Basic Buttons

<div ng-controller="gnap-buttons as vm">
    <button class="btn btn-primary" ng-click="vm.primary()">Primary</button>
    <button class="btn btn-primary" ng-click="vm.primary()">
        <i class="icon-cog"></i>
        Primary
    </button>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-buttons', GnapButtonsController);

    GnapButtonsController.$inject = [];

    function GnapButtonsController() {
        var vm = this;

        vm.primary = function () {
            alert('You clicked a primary button');
        };
    };
})();

Form Example

<div ng-controller="gnap-buttons as vm">
    <button class="btn btn-primary" ng-click="vm.save()">Save</button>
    <button class="btn btn-default" ng-click="vm.cancel()">Cancel</button>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-buttons', GnapButtonsController);

    GnapButtonsController.$inject = [];

    function GnapButtonsController() {
        var vm = this;

        vm.save = function () {
            alert('You clicked a save button');
        };
    
        vm.cancel = function () {
            alert('You clicked a cancel button');
        };
    };
})();

Tooltips (hover over these)

<button class="btn btn-primary" tooltip="This is a default tooltip!">Default tooltip</button>
<button class="btn btn-primary" tooltip="This is a tooltip on the left!" tooltip-placement="left">Left tooltip</button>
<button class="btn btn-primary" tooltip="This is a tooltip on the right!" tooltip-placement="right">Right tooltip</button>
<button class="btn btn-primary" tooltip="This is a tooltip on top!" tooltip-placement="top">Top tooltip</button>
<button class="btn btn-primary" tooltip="This is a tooltip at the bottom!" tooltip-placement="bottom">Bottom tooltip</button>

Various Sizes

<button class="btn btn-primary btn-minier">Tiny</button>
<button class="btn btn-primary btn-xs">Mini</button>
<button class="btn btn-primary btn-sm">Small</button>
<button class="btn btn-primary">Default</button>
<button class="btn btn-primary btn-lg">Large</button>

Disabled Buttons

<button class="btn btn-primary disabled">Disabled Primary</button>
<button class="btn btn-default disabled">Disabled Default</button>

Dropdown Button

<div ng-controller="gnap-buttons as vm">
    <div class="btn-group" dropdown is-open="vm.status.isopen">
        <button type="button" class="btn btn-primary dropdown-toggle">
            Action
            <i class="icon-angle-down icon-on-right"></i>
        </button>
        <ul class="dropdown-menu" role="menu">
            <li>
                <a ng-click="vm.action1()">Action</a>
            </li>
            <li>
                <a ng-click="vm.action2()">Another action</a>
            </li>
            <li>
                <a ng-click="vm.action3()">Something else here</a>
            </li>
            <li class="divider"></li>
            <li>
                <a href="a link to somewhere else">Separated link</a>
            </li>
        </ul>
    </div>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-buttons', GnapButtonsController);

    GnapButtonsController.$inject = [];

    function GnapButtonsController() {
        var vm = this;

        vm.status = {
            isopen: false
        };

        vm.action1 = function () {
            // do something here
            vm.status.isopen = false;
        };

        vm.action2 = function () {
            // do something here
            vm.status.isopen = false;
        };

        vm.action3 = function () {
            // do something here
            vm.status.isopen = false;
        };
    };
})();

Grouped Buttons

<div class="btn-group">
    <button class="btn btn-primary">Save</button>
    <button class="btn btn-primary">Update</button>
    <button class="btn btn-primary">Delete</button>
</div>
<div class="btn-group">
    <button class="btn btn-primary">Ok</button>
    <button class="btn btn-default">Cancel</button>
</div>

Progress Bar

<div ng-controller="gnap-progressbar as vm">                        
    <div class="form-group">
        <label class="control-label">Progress</label>
        <div><input type="text" ng-model="vm.progress"></div>
    </div>
    <div progressbar class="progress-small progress-striped active" value="vm.progress"></div>
    <div progressbar class="progress-small progress-striped" value="vm.workLeft"></div>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-progressbar', GnapProgressbarController);

    GnapProgressbarController.$inject = ['$scope'];

    function GnapProgressbarController($scope) {
        var vm = this;

        vm.progress = 40;

        $scope.$watch('vm.progress', function (progress) { vm.workLeft = 100 - progress; });
    };
})();

Stacked


{{bar.value}}%
<div ng-controller="gnap-stacked-progressbar as vm">
    <input ng-repeat="bar in vm.collection track by $index" type="text" ng-model="bar.value">
    <hr>
    <div progress class="progress-small progress-striped active">
        <div bar ng-repeat="bar in vm.collection track by $index" value="bar.value" type="{{bar.type}}">
            <span>{{bar.value}}%</span>
        </div>
    </div>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-stacked-progressbar', GnapStackedProgressbarController);

    GnapStackedProgressbarController.$inject = [];

    function GnapStackedProgressbarController() {
        var vm = this;

        vm.collection = [];

        vm.collection.push({
            value: 20,
            type: 'success'
        });

        vm.collection.push({
            value: 15,
            type: 'warning'
        });

        vm.collection.push({
            value: 25,
            type: 'error'
        });
    };
})();

Alert Dialog

<button class="btn btn-primary" ng-bootbox-alert="Alert message!">Click Me!</button>

Confirm Dialog

<div ng-controller="gnap-confirm-dialog as vm">
    <button class="btn btn-primary"
            ng-bootbox-confirm="Are you sure you want to confirm this?"
            ng-bootbox-confirm-action="vm.confirm()"
            ng-bootbox-confirm-action-cancel="vm.cancel()">
        Click Me!
    </button>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-confirm-dialog', GnapConfirmDialogController);

    GnapConfirmDialogController.$inject = [];

    function GnapConfirmDialogController() {
        var vm  = this;

        vm.confirm = function () {
            alert('You were sure!');
        };

        vm.cancel = function () {
            alert('You weren\'t sure!');
        };
    };
})();

Prompt Dialog

<div ng-controller="gnap-prompt-dialo as vmg">
    <button class="btn btn-primary"
            ng-bootbox-prompt="Please type in your name"
            ng-bootbox-prompt-action="vm.accept(result)"
            ng-bootbox-prompt-action-cancel="vm.cancel()">
        Prompt
    </button>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-prompt-dialog', GnapPromptDialogController);

    GnapPromptDialogController.$inject = [];

    function GnapPromptDialogController() {
        var vm = this;

        vm.accept = function (name) {
            alert('Hello ' + name);
        };

        vm.cancel = function () {
            alert('You cancelled!');
        };
    };
})();

Custom Dialog

<div ng-controller="gnap-custom-dialog as vm">
    <script type="text/ng-template" id="myModalContent.html">
        <div class="modal-header">
            <h3 class="modal-title">I am a modal!</h3>
        </div>
        <div class="modal-body">
            <ul>
                <li ng-repeat="item in vm.items">
                    <a ng-click="vm.selected.item = item">{{ item }}</a>
                </li>
            </ul>
           Selected: <b>{{ vm.selected.item }}</b>
        </div>
        <div class="modal-footer">
            <button class="btn btn-primary" ng-click="vm.ok()">OK</button>
            <button class="btn btn-warning" ng-click="vm.cancel()">Cancel</button>
        </div>
    </script>

    <button class="btn btn-primary" ng-click="vm.open()">click Me!</button>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-custom-dialog', GnapCustomDialogController)
        .controller('gnap-custom-dialog-instance', GnapCustomDialogInstanceController);

    GnapCustomDialogController.$inject = ['$modal'];
    GnapCustomDialogInstanceController.$inject = ['$modalInstance', 'items'];

    function GnapCustomDialogController($modal) {
        var vm = this;

        vm.items = ['item1', 'item2', 'item3'];

        vm.open = function (size) {
            var modalInstance = $modal.open({
                templateUrl: 'myModalContent.html',
                controller: 'gnap-custom-dialog-instance as vm',
                resolve: {
                    items: function () {
                        return vm.items;
                    }
                }
            });

            modalInstance.result.then(function (result) {
                alert('You selected: ' + result);
            }, function () {
                alert('You dismissed the dialog!');
            });
        };
    };

    function GnapCustomDialogInstanceController($modalInstance, items) {
        var vm = this;

        vm.items = items;

        vm.selected = {
            item: vm.items[0]
        };

        vm.ok = function () {
            $modalInstance.close(vm.selected.item);
        };

        vm.cancel = function () {
            $modalInstance.dismiss('cancel');
        };
    };
})();

Alerts

<div ng-controller="gnap-alerts as vm">
    <div alert ng-repeat="alert in vm.alerts" type="{{alert.type}}" close="vm.closeAlert($index)"><span ng-bind-html="alert.msg"></span></div>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-alerts', GnapAlertsController);

    GnapAlertsController.$inject = ['$sce'];

    function GnapAlertsController($sce) {
        var vm = this;

        vm.alerts = [
            { type: 'danger', msg: $sce.trustAsHtml('<b>Oh snap!</b> Change a few things up and try submitting again.') },
            { type: 'success', msg: $sce.trustAsHtml('<b>Well done!</b> You successfully read this important alert message.') },
            { type: 'warning', msg: $sce.trustAsHtml('<b>Warning!</b> Best check your self, you\'re not looking too good.') },
            { type: 'info', msg: $sce.trustAsHtml('<b>Heads up!</b> This alert needs your attention, but it\'s not super important.') }
        ];

        vm.closeAlert = function (index) {
            vm.alerts.splice(index, 1);
        };
    };
})();

Loading Icon

Loading...
<img src="images/loading.gif" alt="Loading..." />

361 Scalable FontAwesome Icons (see all icons )

  • icon-adjust
  • icon-asterisk
  • icon-ban-circle
  • icon-bar-chart
  • icon-barcode
  • icon-beaker
  • icon-beer
  • icon-bell
  • icon-bell-alt
  • icon-bolt
  • icon-book
  • icon-bookmark
  • icon-bookmark-empty
  • icon-briefcase
  • icon-bullhorn
  • icon-calendar
  • icon-camera
  • icon-camera-retro
  • icon-certificate
  • icon-check
  • icon-check-empty
  • icon-circle
  • icon-circle-blank
  • icon-cloud
  • icon-cloud-download
  • icon-cloud-upload
  • icon-coffee
  • icon-cog
  • icon-cogs
  • icon-comment
  • icon-comment-alt
  • icon-comments
  • icon-comments-alt
  • icon-credit-card
  • icon-dashboard
  • icon-desktop
  • icon-download
  • icon-download-alt
  • icon-edit
  • icon-envelope
  • icon-envelope-alt
  • icon-exchange
  • icon-exclamation-sign
  • icon-external-link
  • icon-eye-close
  • icon-eye-open
  • icon-facetime-video
  • icon-fighter-jet
  • icon-film
  • icon-filter
  • icon-fire
  • icon-flag
  • icon-folder-close
  • icon-folder-open
  • icon-folder-close-alt
  • icon-folder-open-alt
  • icon-food
  • icon-gift
  • icon-glass
  • icon-globe
  • icon-group
  • icon-hdd
  • icon-headphones
  • icon-heart
  • icon-heart-empty
  • icon-home
  • icon-inbox
  • icon-info-sign
  • icon-key
  • icon-leaf
  • icon-laptop
  • icon-legal
  • icon-lemon
  • icon-lightbulb
  • icon-lock
  • icon-unlock
<i class="icon-unlock"></i>

Standard Labels

Default Success
<span class="label label-primary">Default</span>
<span class="label label-success arrowed">Success</span>

Indicators

1 2 4 6 8
<span class="badge badge-primary">1</span>
<span class="badge badge-success">2</span>
<span class="badge badge-warning">4</span>
<span class="badge badge-danger">6</span>
<span class="badge badge-info">8</span>

Variations

Warning Large Purple
<span class="label label-warning">
    <i class="icon-warning-sign bigger-120"></i>
    Warning
</span>
<span class="label label-lg label-pink arrowed-right">Large</span>
<span class="label label-lg label-purple arrowed">Purple</span>

Standard Table

Domain Price Clicks Update
{{ domain.domain }} {{ domain.price }} {{ domain.clicks }} {{ domain.update }}
<div class="table-responsive" ng-controller="gnap-standard-table as vm">
    <table class="table table-striped table-bordered table-hover">
        <thead>
            <tr>
                <th>Domain</th>
                <th>Price</th>
                <th class="hidden-480">Clicks</th>
                <th>
                    <i class="icon-time bigger-110 hidden-480"></i>
                    Update
                </th>
            </tr>
        </thead>
        <tbody>
            <tr ng-repeat="domain in vm.domains">
                <td>
                    <a ng-click="vm.view(domain)">{{ domain.domain }}</a>
                </td>
                <td>{{ domain.price }}</td>
                <td class="hidden-480">{{ domain.clicks }}</td>
                <td>{{ domain.update }}</td>
            </tr>
        </tbody>
    </table>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-standard-table', GnapStandardTableController);

    GnapStandardTableController.$inject = ['Domain'];

    function GnapStandardTableController(Domain) {
        var vm = this;

        Domain.query(function(domains) {
            vm.domains = domains;
        });
    
        vm.view = function (domain) {
            alert('Going to the view \'' + domain.domain + '\' page ...');
        };
    };
})();
(function () {
    angular
        .module('gnap-example-app')
        .factory('Domain', Domain);

    Domain.$inject = ['$resource'];

    function Domain($resource) {
        return $resource('app/main/examples/tables/domains.json');
    };
})();
[
    {
        "domain": "app.com",
        "price": "$45",
        "clicks": "3,330",
        "update": "Feb 12",
        "status": "Expiring"
    },
    {
        "domain": "base.com",
        "price": "$35",
        "clicks": "2,595",
        "update": "Feb 18",
        "status": "Registered"
    },
    {
        "domain": "max.com",
        "price": "$60",
        "clicks": "4,400",
        "update": "Mar 11",
        "status": "Expiring"
    },
    {
        "domain": "best.com",
        "price": "$75",
        "clicks": "6,500",
        "update": "Apr 03",
        "status": "Flagged"
    },
    {
        "domain": "pro.com",
        "price": "$55",
        "clicks": "4,250",
        "update": "Jan 21",
        "status": "Flagged"
    }
]

Full Table

A Table Title
Domain Price Clicks Update Status
{{ domain.domain }} {{ domain.price }} {{ domain.clicks }} {{ domain.update }} {{ domain.status }}
<div class="table-header">
    A Table Title
</div>
<div class="table-responsive" ng-controller="gnap-full-table as vm">
    <table datatable class="table table-striped table-bordered table-hover">
        <thead>
            <tr>
                <th class="center">
                    <label>
                        <input type="checkbox" gnap-header-checkbox class="ace" />
                        <span class="lbl"></span>
                    </label>
                </th>
                <th>Domain</th>
                <th>Price</th>
                <th class="hidden-480">Clicks</th>
                <th>
                    <i class="icon-time bigger-110 hidden-480"></i>
                    Update
                </th>
                <th class="hidden-480">Status</th>
                <th></th>
            </tr>
        </thead>
        <tbody>
            <tr ng-repeat="domain in vm.domains">
                <td class="center">
                    <label>
                        <input type="checkbox" class="ace" />
                        <span class="lbl"></span>
                    </label>
                </td>
                <td>
                    <a ng-click="vm.view(domain)">{{ domain.domain }}</a>
                </td>
                <td>{{ domain.price }}</td>
                <td class="hidden-480">{{ domain.clicks }}</td>
                <td>{{ domain.update }}</td>
                <td class="hidden-480">{{ domain.status }}</td>
                <td>
                    <div class="visible-md visible-lg hidden-sm hidden-xs action-buttons">
                        <a class="blue" ng-click="vm.view(domain)">
                            <i class="icon-zoom-in bigger-130"></i>
                        </a>
                        <a class="green" ng-click="vm.edit(domain)">
                            <i class="icon-pencil bigger-130"></i>
                        </a>
                        <a class="red" ng-bootbox-confirm="Can I delete it ?" ng-bootbox-confirm-action="vm.delete(domain)">
                            <i class="icon-trash bigger-130"></i>
                        </a>
                    </div>
                    <div class="visible-xs visible-sm hidden-md hidden-lg">
                        <div class="inline position-relative">
                            <button class="btn btn-minier btn-primary dropdown-toggle" data-toggle="dropdown">
                                <i class="icon-caret-down icon-only bigger-120"></i>
                            </button>
                            <ul class="dropdown-menu dropdown-only-icon pull-right dropdown-caret dropdown-close">
                                <li>
                                    <a tooltip="View" ng-click="vm.view(domain)">
                                        <span>
                                            <i class="icon-zoom-in bigger-120"></i>
                                        </span>
                                    </a>
                                </li>
                                <li>
                                    <a tooltip="Edit" ng-click="vm.edit(domain)">
                                        <span>
                                            <i class="icon-edit bigger-120"></i>
                                        </span>
                                    </a>
                                </li>
                                <li>
                                    <a ng-bootbox-confirm="Can I delete it ?" ng-bootbox-confirm-action="vm.delete(domain)">
                                        <span tooltip="Delete">
                                            <i class="icon-trash bigger-120"></i>
                                        </span>
                                    </a>
                                </li>
                            </ul>
                        </div>
                    </div>
                </td>
            </tr>
        </tbody>
    </table>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-full-table', GnapFullTableController);

    GnapFullTableController.$inject = ['Domain'];

    function GnapFullTableController(Domain) {
        var vm = this;

        Domain.query(function(domains) {
            vm.domains = domains;
        });

        vm.view = function(domain) {
            alert('Going to the view \'' + domain.domain + '\' page ...');
        };

        vm.edit = function(domain) {
            alert('Going to the edit \'' + domain.domain + '\' page ...');
        };

        vm['delete'] = function(domain) {
            alert('Logic to delete \'' + domain.domain + '\' should be executed now ...');
        }
    };
})();
(function () {
    angular
        .module('gnap-example-app')
        .factory('Domain', Domain);

    Domain.$inject = ['$resource'];

    function Domain($resource) {
        return $resource('app/main/examples/tables/domains.json');
    };
})();
[
    {
        "domain": "app.com",
        "price": "$45",
        "clicks": "3,330",
        "update": "Feb 12",
        "status": "Expiring"
    },
    {
        "domain": "base.com",
        "price": "$35",
        "clicks": "2,595",
        "update": "Feb 18",
        "status": "Registered"
    },
    {
        "domain": "max.com",
        "price": "$60",
        "clicks": "4,400",
        "update": "Mar 11",
        "status": "Expiring"
    },
    {
        "domain": "best.com",
        "price": "$75",
        "clicks": "6,500",
        "update": "Apr 03",
        "status": "Flagged"
    },
    {
        "domain": "pro.com",
        "price": "$55",
        "clicks": "4,250",
        "update": "Jan 21",
        "status": "Flagged"
    }
]

Tabs

Here is an example of the basic tabs that we have to use

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean lobortis neque id leo tincidunt, vel interdum tortor egestas. Quisque at massa sit amet nisl placerat euismod sit amet non leo. Suspendisse egestas, leo id scelerisque euismod, massa sapien feugiat mi, at pulvinar lorem est sit amet est.

<div tabset>
    <div tab heading="Home">
        <p>
            Here is an example of the basic tabs that we have to use
        </p>
    </div>

    <div tab heading="Messages">
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean lobortis neque id leo tincidunt, vel interdum tortor egestas. Quisque at massa sit amet nisl placerat euismod sit amet non leo. Suspendisse egestas, leo id scelerisque euismod, massa sapien feugiat mi, at pulvinar lorem est sit amet est.</p>
    </div>
</div>

Container

Some Group

This is some grouped content
<div class="widget-box">
  <div class="widget-header widget-header-flat">
    <h4 class="smaller">
      <i class="icon-quote-left smaller-80"></i>
      Some Group
    </h4>
  </div>

  <div class="widget-body">
    <div class="widget-main">
      This is some grouped content
    </div>
  </div>
</div>

Collapsable Container

Some Group

Nunc aliquam enim ut arcu aliquet adipiscing. Fusce dignissim volutpat justo non consectetur. Nulla fringilla eleifend consectetur.

Raw denim you probably haven't heard of them jean shorts Austin.

<div ng-controller="gnap-collapse as vm">
  <div class="widget-box">
    <div class="widget-header widget-header-flat">
      <h5>Some Group</h5>

      <div class="widget-toolbar">
        <a>
          <i class="icon-cog"></i>
        </a>

        <a>
          <i class="icon-refresh"></i>
        </a>

        <a ng-click="vm.isCollapsed = !vm.isCollapsed">
          <i ng-class="{true:'icon-chevron-down', false:'icon-chevron-up'}[vm.isCollapsed]"></i>
        </a>
      </div>
    </div>

    <div class="widget-body" collapse="vm.isCollapsed">
      <div class="widget-main">
        <p class="alert alert-info">
          Nunc aliquam enim ut arcu aliquet adipiscing. Fusce dignissim volutpat justo non consectetur. Nulla fringilla eleifend consectetur.
        </p>
        <p class="alert alert-success">
          Raw denim you probably haven't heard of them jean shorts Austin.
        </p>
      </div>
    </div>
  </div>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-collapse', GnapCollapseController);

    GnapCollapseController.$inject = [];

    function GnapCollapseController() {
        var vm = this;

        vm.isCollapsed = false;
    };
})();

Collapsable Container With Buttons

Some Group

Nunc aliquam enim ut arcu aliquet adipiscing. Fusce dignissim volutpat justo non consectetur. Nulla fringilla eleifend consectetur.

Raw denim you probably haven't heard of them jean shorts Austin.

<div ng-controller="gnap-collapse as vm">
  <div class="widget-box">
    <div class="widget-header widget-header-flat">
      <h5>Some Group</h5>

      <div class="widget-toolbar">
        <a ng-click="vm.isCollapsed = !vm.isCollapsed">
          <i class="1 bigger-125" ng-class="{true:'icon-chevron-down', false:'icon-chevron-up'}[vm.isCollapsed]"></i>
        </a>
      </div>
    </div>

    <div class="widget-body" collapse="vm.isCollapsed">
      <div class="widget-main">
        <p class="alert alert-info">
          Nunc aliquam enim ut arcu aliquet adipiscing. Fusce dignissim volutpat justo non consectetur. Nulla fringilla eleifend consectetur.
        </p>
        <p class="alert alert-success">
          Raw denim you probably haven't heard of them jean shorts Austin.
        </p>
      </div>

      <div class="widget-toolbox padding-8 clearfix">
        <button class="btn btn-xs btn-danger pull-left">
          <i class="icon-remove"></i>
          <span class="bigger-110">I don't accept</span>
        </button>

        <button class="btn btn-xs btn-success pull-right">
          <span class="bigger-110">I accept</span>

          <i class="icon-arrow-right icon-on-right"></i>
        </button>
      </div>
    </div>
  </div>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-collapse', GnapCollapseController);

    GnapCollapseController.$inject = [];

    function GnapCollapseController() {
        var vm = this;

        vm.isCollapsed = false;
    };
})();

Default Notification

<div ng-controller="gnap-default-notification as vm">
    <button class="btn btn-primary" ng-click="vm.notify()">Click Me!</button>
    <button class="btn btn-default" ng-click="vm.remove()">Remove Notification</button>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-default-notification', GnapDefaultNotificationController);

    GnapDefaultNotificationController.$inject = ['notification'];

    function GnapDefaultNotificationController(notification) {
        var vm = this;

        vm.notify = function () {
            notification.show({
                title: 'This is a default notification',
                text: 'This will fade out after a certain amount of time. Vivamus eget tincidunt velit. Cum sociis natoque penatibus et, nascetur ridiculus mus.'
            });
        };

        vm.remove = function () {
            notification.removeAll();
        };
    };
})();

Success Notification

<div ng-controller="gnap-success-notification">
    <button class="btn btn-primary" ng-click="notify()">Click Me!</button>
    <button class="btn btn-default" ng-click="remove()">Remove Notification</button>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-success-notification', GnapSuccessNotificationController);

    GnapSuccessNotificationController.$inject = ['$scope', 'notification'];

    function GnapSuccessNotificationController($scope, notification) {
        $scope.notify = function () {
            notification.show({
                type: 'success',
                title: 'This is a success notification',
                text: 'This will fade out after a certain amount of time. Vivamus eget tincidunt velit. Cum sociis natoque penatibus et, nascetur ridiculus mus.'
            });
        };

        $scope.remove = function () {
            notification.removeAll();
        };
    };
})();

Error Notification

<div ng-controller="gnap-error-notification as vm">
    <button class="btn btn-primary" ng-click="vm.notify()">Click Me!</button>
    <button class="btn btn-default" ng-click="vm.remove()">Remove Notification</button>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-error-notification', GnapErrorNotificationController);

    GnapErrorNotificationController.$inject = ['notification'];

    function GnapErrorNotificationController(notification) {
        var vm = this;

        vm.notify = function () {
            notification.show({
                type: 'error',
                title: 'This is an error notification',
                text: 'This will fade out after a certain amount of time. Vivamus eget tincidunt velit. Cum sociis natoque penatibus et, nascetur ridiculus mus.'
            });
        };

        vm.remove = function () {
            notification.removeAll();
        };
    };
})();

Progress Indicator

<div ng-controller="gnap-progress as vm">
    <button class="btn btn-primary" ng-click="vm.start()">Start!</button>
    <button class="btn btn-default" ng-click="vm.set40()">Set 40%</button>
    <button class="btn btn-default" ng-click="vm.increment()">Increment</button>
    <button class="btn btn-default" ng-click="vm.done()">Done</button>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-progress', GnapProgressController);

    GnapProgressController.$inject = ['ngProgressLite'];

    function GnapProgressController(ngProgressLite) {
        var vm = this;

        vm.start = function () {
            ngProgressLite.start();
        };

        vm.set40 = function () {
            ngProgressLite.set(0.4);
        };

        vm.increment = function () {
            ngProgressLite.inc();
        };

        vm.done = function () {
            ngProgressLite.done();
        };
    };
})();

Common Input Controls

<input type="text" placeholder="Username" />
Inline help text
<input type="password" placeholder="Password" />
<input type="text" value="This text field is readonly!" readonly="readonly" />
<input type="text" value="This text field is disabled!" disabled="disabled" />
<span class="input-icon">
    <input type="text" />
    <i class="icon-user theme_color"></i>
</span>

<span class="input-icon input-icon-right">
    <input type="text" />
    <i class="icon-lock theme_color"></i>
</span>
<div ng-controller="gnap-dropdown as vm">
    <select ui-select2 ng-model="vm.mydropdown" class="col-xs-10 col-sm-5">
        <option value="">&nbsp;</option>
        <option value="AL">Alabama</option>                                   
        <option value="AK">Alqska</option>   
        ...
    </select>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-dropdown', GnapDropdownController);

    function GnapDropdownController() {
    };
})();
<div ng-controller="gnap-multiple-dropdown as vm">
    <select ui-select2 ng-model="vm.mydropdown" multiple="multiple" class="col-xs-10 col-sm-5">
        <option value="AL">Alabama</option>                                   
        <option value="AK">Alqska</option>   
        ...
    </select>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-multiple-dropdown', GnapMultipleDropdownController);

    function GnapMultipleDropdownController() {
    };
})();
<div class="checkbox">
    <label>
        <input name="form-field-checkbox" class="ace ace-checkbox-2" type="checkbox" />
        <span class="lbl"> Choice #1</span>
    </label>
</div>

<div class="checkbox">
    <label>
        <input name="form-field-checkbox" class="ace ace-checkbox-2" type="checkbox" />
        <span class="lbl"> Choice #2</span>
    </label>
</div>

<div class="checkbox">
    <label class="block">
        <input name="form-field-checkbox" disabled="disabled" type="checkbox" class="ace" />
        <span class="lbl"> Disabled</span>
    </label>
</div>
<div class="radio">
    <label>
        <input name="form-field-radio" type="radio" class="ace" />
        <span class="lbl"> Option #1</span>
    </label>
</div>

<div class="radio">
    <label>
        <input name="form-field-radio" type="radio" class="ace" />
        <span class="lbl"> Option #2</span>
    </label>
</div>

<div class="radio">
    <label>
        <input disabled="" name="form-field-radio" type="radio" class="ace" />
        <span class="lbl"> Disabled</span>
    </label>
</div>
<textarea class="form-control" placeholder="Default Text"></textarea>

Specialized Input Controls

<div class="form-group" ng-controller="gnap-date-picker as vm">
    <label class="col-sm-3 control-label no-padding-right">Date Picker</label>
    <div class="col-sm-9">
        <div class="input-group col-xs-10 col-sm-5 no-padding-left no-padding-right">
            <span gnap-datepicker date="vm.date" icon-position="right"></span>
        </div>
    </div>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-date-picker', GnapDatepickerController);

    GnapDatepickerController.$inject = [];

    function GnapDatepickerController() {
        var vm = this;

        vm.date = new Date();
    };
})();
<div class="form-group" ng-controller="gnap-date-range-picker as vm">
    <label class="col-sm-3 control-label no-padding-right">Date Range</label>
    <div class="col-sm-9">
        <span gnap-date-range date-begin="vm.range.dateStart" date-end="vm.range.dateEnd" icon-position="{{vm.iconPosition}}"></span>
    </div>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-date-range-picker', GnapDaterangepickerController);

    GnapDaterangepickerController.$inject = [];

    function GnapDaterangepickerController() {
        var vm = this;

        vm.range = {
            dateStart: new Date(2014, 0, 7),
            dateEnd: new Date(2014, 7, 14)
        };

        vm.iconPosition = 'left';
    };
})();
<div class="form-group" ng-controller="gnap-time-picker as vm">
    <label class="col-sm-3 control-label no-padding-right">Time Picker</label>
    <div class="col-sm-9">
        <span gnap-timepicker time="vm.sometime" icon-position="right"></span>
    </div>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-time-picker', GnapTimepickerController);

    GnapTimepickerController.$inject = [];

    function GnapTimepickerController() {
        var vm = this;

        vm.sometime = new Date(2014, 1, 1, 10, 30, 0);
    };
})();
<div ng-controller="gnap-choice-toggle as vm">
    <div class="form-group">
        <label class="col-sm-3 control-label no-padding-right">Choice toggle directive</label>
        <div class="col-sm-9">
            <span gnap-choice-toggle choice="vm.value"></span>
            <span gnap-choice-toggle lang="fr" choice="vm.value"></span>
            <span gnap-choice-toggle lang="en" choice="vm.value"></span>
           <span gnap-choice-toggle lang="nl" choice="vm.value"></span>
        </div>
    </div>
</div>
(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-choice-toggle', GnapChoiceToggleController);

    GnapChoiceToggleController.$inject = [];

    function GnapChoiceToggleController() {
        var vm = this;

        vm.value = true;
    };
})();
Todo
Todo
a*-999-a999
<input type="text" gnap-masked-input="a*-999-a999" />
<span class="help-inline">a*-999-a999</span>
<textarea gnap-input-limiter="200"></textarea>
<div gnap-wysiwyg></div>

Sizing Examples

<div class="form-group">
    <label class="col-sm-3 control-label no-padding-right">Full width</label>
    <div class="col-sm-9">
        <input class="form-control" type="text" placeholder="no input class" />
    </div>
</div>

<div class="form-group">
    <label class="col-sm-3 control-label no-padding-right">Mini</label>
    <div class="col-sm-9">
        <input class="form-control input-mini" type="text" placeholder=".input-mini" />
    </div>
</div>

<div class="form-group">
    <label class="col-sm-3 control-label no-padding-right">Small</label>
    <div class="col-sm-9">
        <input class="form-control input-small" type="text" placeholder=".input-small" />
    </div>
</div>

<div class="form-group">
    <label class="col-sm-3 control-label no-padding-right">Medium</label>
    <div class="col-sm-9">
        <input class="form-control input-medium" type="text" placeholder=".input-medium" />
    </div>
</div>

<div class="form-group">
    <label class="col-sm-3 control-label no-padding-right">Large</label>
    <div class="col-sm-9">
        <input class="form-control input-large" type="text" placeholder=".input-large" />
    </div>
</div>

<div class="form-group">
    <label class="col-sm-3 control-label no-padding-right">Extra large</label>
    <div class="col-sm-9">
        <input class="form-control input-xlarge" type="text" placeholder=".input-xlarge" />
    </div>
</div>

<div class="form-group">
    <label class="col-sm-3 control-label no-padding-right">Extra extra large</label>
    <div class="col-sm-9">
        <input class="form-control input-xxlarge" type="text" placeholder=".input-xxlarge" />
    </div>
</div>

Validation Example

Enter the first name
Enter the last name
Enter the username
The username entered is not unique
The username must be at least 4 characters in length
Enter a valid email address
Enter a valid age
Age must be a number greater than 0
Age must be a number less than or equal to 100
<form gnap-submit='vm.save()'>
    <div gnap-show-validity for="firstName" class="form-group">
        <label class="control-label" for="firstName">First Name</label>
        <input ng-model="vm.firstName" type="text" class="form-control" id="firstName" name="firstName" required>
        <div gnap-validation-messages for="firstName">
            <div gnap-validation-message when="required">Enter the first name</div>
        </div>
    </div>

    <div gnap-show-validity for="lastName" class="form-group">
        <label class="control-label" for="lastName">Last Name</label>
        <input ng-model="vm.lastName" type="text" class="form-control" id="lastName" name="lastName" required>
        <div gnap-validation-messages for="lastName">
            <div gnap-validation-message when="required">Enter the last name</div>
        </div>
    </div>

    <div gnap-show-validity for="username" class="form-group">
        <label class="control-label" for="username">Username</label>
        <input ng-model="vm.username" type="text" class="form-control" id="username" name="username" required ng-minlength="4" maxlength="8" gnap-validate="vm.validateUsername()">
        <div gnap-validation-messages for="username">
            <div gnap-validation-message when="required">Enter the username</div>
            <div gnap-validation-message when="unique">The username entered is not unique</div>
            <div gnap-validation-message when="minlength">The username must be at least 4 characters in length</div>
        </div>
    </div>

    <div gnap-show-validity for="email" class="form-group">
        <label class="control-label" for="email">Email</label>
        <input ng-model="vm.email" type="email" class="form-control" id="email" name="email">
        <div gnap-validation-messages for="email">
            <div gnap-validation-message when="email">Enter a valid email address</div>
        </div>
    </div>

    <div gnap-show-validity for="age" class="form-group">
        <label class="control-label" for="age">Age</label>
        <input ng-model="vm.age" type="number" class="form-control" id="age" name="age" min="0" max="100" />
        <div gnap-validation-messages for="age">
            <div gnap-validation-message when="number">Enter a valid age</div>
            <div gnap-validation-message when="min">Age must be a number greater than 0</div>
            <div gnap-validation-message when="max">Age must be a number less than or equal to 100</div>
        </div>
    </div>

    <button class="btn btn-primary">Save</button>
</form>

(function () {
    angular
        .module('gnap-example-app')
        .controller('gnap-validation', GnapValidationController);

    GnapValidationController.$inject = ['$q', 'notification'];

    function GnapValidationController($q, notification) {
        var vm = this;

        vm.save = function() {
            notification.show({
                type: 'success',
                title: 'User Saved',
                text: 'The user account was successfully created.'
            });
        };

        vm.validateUsername = function() {
            if (angular.isUndefined(vm.username)) {
                return {
                    unique: true
                };
            }
            
            // simulate remote call
            var uniqueDeferred = $q.defer();
            setTimeout(function() {
                if (vm.username === 'test') {
                    uniqueDeferred.resolve(false);
                } else {
                    uniqueDeferred.resolve(true);
                }
            }, 2500);

            return {
                unique: uniqueDeferred.promise
            };
        };
    }
})();