├── .gitignore ├── .meteor ├── .finished-upgraders ├── .gitignore ├── .id ├── packages ├── platforms ├── release └── versions ├── LICENSE ├── README.md ├── client ├── holder.js └── theme.less ├── example.html ├── packages ├── bootstrap-affix-js │ ├── .versions │ ├── README.md │ ├── affix.js │ └── package.js ├── bootstrap-alert-js │ ├── .versions │ ├── README.md │ ├── alert.js │ └── package.js ├── bootstrap-alerts │ ├── .versions │ ├── README.md │ ├── alerts.less │ └── package.js ├── bootstrap-badges │ ├── .versions │ ├── README.md │ ├── badges.less │ └── package.js ├── bootstrap-base │ ├── .versions │ ├── README.md │ ├── base.less │ ├── bootstrap.less │ ├── mixins.less │ ├── mixins │ │ ├── alerts.less │ │ ├── background-variant.less │ │ ├── border-radius.less │ │ ├── buttons.less │ │ ├── center-block.less │ │ ├── clearfix.less │ │ ├── forms.less │ │ ├── gradients.less │ │ ├── grid-framework.less │ │ ├── grid.less │ │ ├── hide-text.less │ │ ├── image.less │ │ ├── labels.less │ │ ├── list-group.less │ │ ├── nav-divider.less │ │ ├── nav-vertical-align.less │ │ ├── opacity.less │ │ ├── pagination.less │ │ ├── panels.less │ │ ├── progress-bar.less │ │ ├── reset-filter.less │ │ ├── resize.less │ │ ├── responsive-visibility.less │ │ ├── size.less │ │ ├── tab-focus.less │ │ ├── table-row.less │ │ ├── text-emphasis.less │ │ ├── text-overflow.less │ │ └── vendor-prefixes.less │ ├── normalize.less │ ├── package.js │ ├── responsive-utilities.less │ ├── scaffolding.less │ ├── utilities.less │ └── variables.less ├── bootstrap-breadcrumbs │ ├── .versions │ ├── README.md │ ├── breadcrumbs.less │ └── package.js ├── bootstrap-button-groups │ ├── .versions │ ├── README.md │ ├── button-groups.less │ └── package.js ├── bootstrap-button-js │ ├── .versions │ ├── README.md │ ├── button.js │ └── package.js ├── bootstrap-buttons │ ├── .versions │ ├── README.md │ ├── buttons.less │ └── package.js ├── bootstrap-carousel │ ├── .versions │ ├── README.md │ ├── carousel.js │ ├── carousel.less │ └── package.js ├── bootstrap-close-icon │ ├── .versions │ ├── README.md │ ├── close.less │ └── package.js ├── bootstrap-code │ ├── .versions │ ├── README.md │ ├── code.less │ └── package.js ├── bootstrap-collapse-js │ ├── .versions │ ├── README.md │ ├── collapse.js │ └── package.js ├── bootstrap-component-animations │ ├── .versions │ ├── README.md │ ├── component-animations.less │ └── package.js ├── bootstrap-dropdowns │ ├── .versions │ ├── README.md │ ├── dropdown.js │ ├── dropdowns.less │ └── package.js ├── bootstrap-forms │ ├── .versions │ ├── README.md │ ├── forms.less │ ├── mixins.less │ └── package.js ├── bootstrap-full │ ├── .versions │ ├── README.md │ └── package.js ├── bootstrap-glyphicons │ ├── .versions │ ├── README.md │ ├── glyphicons-halflings-regular.eot │ ├── glyphicons-halflings-regular.svg │ ├── glyphicons-halflings-regular.ttf │ ├── glyphicons-halflings-regular.woff │ ├── glyphicons-halflings-regular.woff2 │ ├── glyphicons.less │ └── package.js ├── bootstrap-grid │ ├── .versions │ ├── README.md │ ├── grid.less │ └── package.js ├── bootstrap-input-groups │ ├── .versions │ ├── README.md │ ├── input-groups.less │ └── package.js ├── bootstrap-jumbotron │ ├── .versions │ ├── README.md │ ├── jumbotron.less │ └── package.js ├── bootstrap-labels │ ├── .versions │ ├── README.md │ ├── labels.less │ └── package.js ├── bootstrap-list-group │ ├── .versions │ ├── README.md │ ├── list-group.less │ └── package.js ├── bootstrap-media-items │ ├── .versions │ ├── README.md │ ├── media.less │ └── package.js ├── bootstrap-modal-js │ ├── .versions │ ├── README.md │ ├── modal.js │ └── package.js ├── bootstrap-modals │ ├── .versions │ ├── README.md │ ├── modals.less │ └── package.js ├── bootstrap-navbar │ ├── .versions │ ├── README.md │ ├── navbar.less │ └── package.js ├── bootstrap-navs │ ├── .versions │ ├── README.md │ ├── navs.less │ └── package.js ├── bootstrap-pager │ ├── .versions │ ├── README.md │ ├── package.js │ └── pager.less ├── bootstrap-pagination │ ├── .versions │ ├── README.md │ ├── package.js │ └── pagination.less ├── bootstrap-panels │ ├── .versions │ ├── README.md │ ├── package.js │ └── panels.less ├── bootstrap-popovers │ ├── .versions │ ├── README.md │ ├── package.js │ ├── popover.js │ └── popovers.less ├── bootstrap-print │ ├── .versions │ ├── README.md │ ├── package.js │ └── print.less ├── bootstrap-progress-bars │ ├── .versions │ ├── README.md │ ├── package.js │ └── progress-bars.less ├── bootstrap-responsive-embed │ ├── .versions │ ├── README.md │ ├── package.js │ └── responsive-embed.less ├── bootstrap-scrollspy-js │ ├── .versions │ ├── README.md │ ├── package.js │ └── scrollspy.js ├── bootstrap-tab-js │ ├── .versions │ ├── README.md │ ├── package.js │ └── tab.js ├── bootstrap-tables │ ├── .versions │ ├── README.md │ ├── package.js │ └── tables.less ├── bootstrap-theme │ ├── .versions │ ├── README.md │ ├── package.js │ └── theme.less ├── bootstrap-thumbnails │ ├── .versions │ ├── README.md │ ├── package.js │ └── thumbnails.less ├── bootstrap-tooltip │ ├── .versions │ ├── README.md │ ├── package.js │ ├── tooltip.js │ └── tooltip.less ├── bootstrap-transition-js │ ├── .versions │ ├── README.md │ ├── package.js │ └── transition.js ├── bootstrap-type │ ├── .versions │ ├── README.md │ ├── package.js │ └── type.less └── bootstrap-wells │ ├── .versions │ ├── README.md │ ├── package.js │ └── wells.less └── publish.sh /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | Thumbs.db 3 | .meteor/local 4 | .meteor/meteorite 5 | -------------------------------------------------------------------------------- /.meteor/.finished-upgraders: -------------------------------------------------------------------------------- 1 | # This file contains information which helps Meteor properly upgrade your 2 | # app when you run 'meteor update'. You should check it into version control 3 | # with your project. 4 | 5 | notices-for-0.9.0 6 | notices-for-0.9.1 7 | 0.9.4-platform-file 8 | notices-for-facebook-graph-api-2 9 | 1.2.0-standard-minifiers-package 10 | 1.2.0-meteor-platform-split 11 | 1.2.0-cordova-changes 12 | 1.2.0-breaking-changes 13 | -------------------------------------------------------------------------------- /.meteor/.gitignore: -------------------------------------------------------------------------------- 1 | local 2 | -------------------------------------------------------------------------------- /.meteor/.id: -------------------------------------------------------------------------------- 1 | # This file contains a token that is unique to your project. 2 | # Check it into your repository along with the rest of this directory. 3 | # It can be used for purposes such as: 4 | # - ensuring you don't accidentally deploy one app on top of another 5 | # - providing package authors with aggregated statistics 6 | 7 | 1g0njufbylc8b126h7u8 8 | -------------------------------------------------------------------------------- /.meteor/packages: -------------------------------------------------------------------------------- 1 | # Meteor packages used by this project, one per line. 2 | # Check this file (and the other files in this directory) into your repository. 3 | # 4 | # 'meteor add' and 'meteor remove' will edit this file for you, 5 | # but you can also edit it by hand. 6 | 7 | matb33:bootstrap-full 8 | standard-minifiers 9 | meteor-base 10 | mobile-experience 11 | mongo 12 | blaze-html-templates 13 | session 14 | jquery 15 | tracker 16 | logging 17 | reload 18 | random 19 | ejson 20 | spacebars 21 | check 22 | less 23 | -------------------------------------------------------------------------------- /.meteor/platforms: -------------------------------------------------------------------------------- 1 | server 2 | browser 3 | -------------------------------------------------------------------------------- /.meteor/release: -------------------------------------------------------------------------------- 1 | METEOR@1.2.0.2 2 | -------------------------------------------------------------------------------- /.meteor/versions: -------------------------------------------------------------------------------- 1 | autoupdate@1.2.3 2 | babel-compiler@5.8.24_1 3 | babel-runtime@0.1.4 4 | base64@1.0.4 5 | binary-heap@1.0.4 6 | blaze@2.1.3 7 | blaze-html-templates@1.0.1 8 | blaze-tools@1.0.4 9 | boilerplate-generator@1.0.4 10 | caching-compiler@1.0.0 11 | caching-html-compiler@1.0.2 12 | callback-hook@1.0.4 13 | check@1.0.6 14 | ddp@1.2.2 15 | ddp-client@1.2.1 16 | ddp-common@1.2.1 17 | ddp-server@1.2.1 18 | deps@1.0.9 19 | diff-sequence@1.0.1 20 | ecmascript@0.1.5 21 | ecmascript-collections@0.1.6 22 | ejson@1.0.7 23 | fastclick@1.0.7 24 | geojson-utils@1.0.4 25 | hot-code-push@1.0.0 26 | html-tools@1.0.5 27 | htmljs@1.0.5 28 | http@1.1.1 29 | id-map@1.0.4 30 | jquery@1.11.4 31 | launch-screen@1.0.4 32 | less@2.5.0_3 33 | livedata@1.0.15 34 | logging@1.0.8 35 | matb33:bootstrap-affix-js@3.3.4 36 | matb33:bootstrap-alert-js@3.3.4 37 | matb33:bootstrap-alerts@3.3.4 38 | matb33:bootstrap-badges@3.3.4 39 | matb33:bootstrap-base@3.3.4 40 | matb33:bootstrap-breadcrumbs@3.3.4 41 | matb33:bootstrap-button-groups@3.3.4 42 | matb33:bootstrap-button-js@3.3.4 43 | matb33:bootstrap-buttons@3.3.4 44 | matb33:bootstrap-carousel@3.3.4 45 | matb33:bootstrap-close-icon@3.3.4 46 | matb33:bootstrap-code@3.3.4 47 | matb33:bootstrap-collapse-js@3.3.4 48 | matb33:bootstrap-component-animations@3.3.4 49 | matb33:bootstrap-dropdowns@3.3.4 50 | matb33:bootstrap-forms@3.3.4 51 | matb33:bootstrap-full@3.3.4 52 | matb33:bootstrap-glyphicons@3.3.4 53 | matb33:bootstrap-grid@3.3.4 54 | matb33:bootstrap-input-groups@3.3.4 55 | matb33:bootstrap-jumbotron@3.3.4 56 | matb33:bootstrap-labels@3.3.4 57 | matb33:bootstrap-list-group@3.3.4 58 | matb33:bootstrap-media-items@3.3.4 59 | matb33:bootstrap-modal-js@3.3.4 60 | matb33:bootstrap-modals@3.3.4 61 | matb33:bootstrap-navbar@3.3.4 62 | matb33:bootstrap-navs@3.3.4 63 | matb33:bootstrap-pager@3.3.4 64 | matb33:bootstrap-pagination@3.3.4 65 | matb33:bootstrap-panels@3.3.4 66 | matb33:bootstrap-popovers@3.3.4 67 | matb33:bootstrap-print@3.3.4 68 | matb33:bootstrap-progress-bars@3.3.4 69 | matb33:bootstrap-responsive-embed@3.3.4 70 | matb33:bootstrap-scrollspy-js@3.3.4 71 | matb33:bootstrap-tab-js@3.3.4 72 | matb33:bootstrap-tables@3.3.4 73 | matb33:bootstrap-theme@3.3.4 74 | matb33:bootstrap-thumbnails@3.3.4 75 | matb33:bootstrap-tooltip@3.3.4 76 | matb33:bootstrap-transition-js@3.3.4 77 | matb33:bootstrap-type@3.3.4 78 | matb33:bootstrap-wells@3.3.4 79 | meteor@1.1.9 80 | meteor-base@1.0.1 81 | minifiers@1.1.7 82 | minimongo@1.0.10 83 | mobile-experience@1.0.1 84 | mobile-status-bar@1.0.6 85 | mongo@1.1.2 86 | mongo-id@1.0.1 87 | npm-mongo@1.4.39_1 88 | observe-sequence@1.0.7 89 | ordered-dict@1.0.4 90 | promise@0.5.0 91 | random@1.0.4 92 | reactive-dict@1.1.2 93 | reactive-var@1.0.6 94 | reload@1.1.4 95 | retry@1.0.4 96 | routepolicy@1.0.6 97 | session@1.1.1 98 | spacebars@1.0.7 99 | spacebars-compiler@1.0.7 100 | standard-minifiers@1.0.1 101 | templating@1.1.4 102 | templating-tools@1.0.0 103 | tracker@1.0.9 104 | ui@1.0.8 105 | underscore@1.0.4 106 | url@1.0.5 107 | webapp@1.2.2 108 | webapp-hashing@1.0.5 109 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Mathieu Bouchard 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Bootstrap Smart Package-Collection for Meteor 2 | 3 | ## Usage 4 | 5 | You can add exactly the components you need from Bootstrap using `meteor add`. 6 | 7 | If you develop using an all-packages methodology, then any of your packages that 8 | need very specific bootstrap functionality can `api.use` them. 9 | 10 | ### Examples 11 | 12 | 1. `meteor add matb33:bootstrap-full` -- will give you the complete Bootstrap experience 13 | 14 | 2. `meteor add matb33:bootstrap-buttons` -- will only load the minimum bootstrap styles to be able to render bootstrap button styles 15 | 16 | ## Package-collection list 17 | 18 | - `matb33:bootstrap-full` (adding only this package will pull in all other packages) 19 | 20 | --- 21 | 22 | - `matb33:bootstrap-affix-js` 23 | - `matb33:bootstrap-alert-js` 24 | - `matb33:bootstrap-alerts` 25 | - `matb33:bootstrap-badges` 26 | - `matb33:bootstrap-base` 27 | - `matb33:bootstrap-breadcrumbs` 28 | - `matb33:bootstrap-button-groups` 29 | - `matb33:bootstrap-button-js` 30 | - `matb33:bootstrap-buttons` 31 | - `matb33:bootstrap-carousel` 32 | - `matb33:bootstrap-close-icon` 33 | - `matb33:bootstrap-code` 34 | - `matb33:bootstrap-collapse-js` 35 | - `matb33:bootstrap-component-animations` 36 | - `matb33:bootstrap-dropdowns` 37 | - `matb33:bootstrap-forms` 38 | - `matb33:bootstrap-glyphicons` 39 | - `matb33:bootstrap-grid` 40 | - `matb33:bootstrap-input-groups` 41 | - `matb33:bootstrap-jumbotron` 42 | - `matb33:bootstrap-labels` 43 | - `matb33:bootstrap-list-group` 44 | - `matb33:bootstrap-media-items` 45 | - `matb33:bootstrap-modal-js` 46 | - `matb33:bootstrap-modals` 47 | - `matb33:bootstrap-navbar` 48 | - `matb33:bootstrap-navs` 49 | - `matb33:bootstrap-pager` 50 | - `matb33:bootstrap-pagination` 51 | - `matb33:bootstrap-panels` 52 | - `matb33:bootstrap-popovers` 53 | - `matb33:bootstrap-print` 54 | - `matb33:bootstrap-progress-bars` 55 | - `matb33:bootstrap-responsive-embed` 56 | - `matb33:bootstrap-scrollspy-js` 57 | - `matb33:bootstrap-tab-js` 58 | - `matb33:bootstrap-tables` 59 | - `matb33:bootstrap-theme` 60 | - `matb33:bootstrap-thumbnails` 61 | - `matb33:bootstrap-tooltip` 62 | - `matb33:bootstrap-transition-js` 63 | - `matb33:bootstrap-type` 64 | - `matb33:bootstrap-wells` 65 | 66 | ## Notes 67 | 68 | - It's currently not possible to customize LESS variables with this approach, 69 | but it likely will be in the near future: https://meteor.hackpad.com/Improvements-to-LESS-and-other-CSS-preprocessors-fqDPbgOH8Fn 70 | 71 | ## Maintainers 72 | 73 | - Mathieu Bouchard ([matb33](https://github.com/matb33)) -------------------------------------------------------------------------------- /client/theme.less: -------------------------------------------------------------------------------- 1 | // TODO: This still does not work in 1.2.0. Unsure how to go about it... 2 | // @import "{matb33:bootstrap-base}/base.less"; 3 | // @brand-primary: #ff0000; 4 | 5 | body { 6 | padding-top: 70px; 7 | padding-bottom: 30px; 8 | } 9 | 10 | .theme-dropdown .dropdown-menu { 11 | position: static; 12 | display: block; 13 | margin-bottom: 20px; 14 | } 15 | 16 | .theme-showcase > p > .btn { 17 | margin: 5px 0; 18 | } 19 | 20 | .theme-showcase .navbar .container { 21 | width: auto; 22 | } -------------------------------------------------------------------------------- /packages/bootstrap-affix-js/.versions: -------------------------------------------------------------------------------- 1 | jquery@1.11.3_2 2 | less@1.0.14 3 | matb33:bootstrap-affix-js 4 | matb33:bootstrap-base 5 | meteor@1.1.6 6 | underscore@1.0.3 7 | -------------------------------------------------------------------------------- /packages/bootstrap-affix-js/README.md: -------------------------------------------------------------------------------- 1 | # Bootstrap 3.3.4 `affix-js` smart package for Meteor 2 | 3 | Part of the smart package-collection for Meteor: http://github.com/matb33/meteor-bootstrap 4 | 5 | ## Usage: 6 | 7 | `meteor add matb33:bootstrap-affix-js` -------------------------------------------------------------------------------- /packages/bootstrap-affix-js/affix.js: -------------------------------------------------------------------------------- 1 | /* ======================================================================== 2 | * Bootstrap: affix.js v3.3.4 3 | * http://getbootstrap.com/javascript/#affix 4 | * ======================================================================== 5 | * Copyright 2011-2015 Twitter, Inc. 6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 7 | * ======================================================================== */ 8 | 9 | 10 | +function ($) { 11 | 'use strict'; 12 | 13 | // AFFIX CLASS DEFINITION 14 | // ====================== 15 | 16 | var Affix = function (element, options) { 17 | this.options = $.extend({}, Affix.DEFAULTS, options) 18 | 19 | this.$target = $(this.options.target) 20 | .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) 21 | .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) 22 | 23 | this.$element = $(element) 24 | this.affixed = null 25 | this.unpin = null 26 | this.pinnedOffset = null 27 | 28 | this.checkPosition() 29 | } 30 | 31 | Affix.VERSION = '3.3.4' 32 | 33 | Affix.RESET = 'affix affix-top affix-bottom' 34 | 35 | Affix.DEFAULTS = { 36 | offset: 0, 37 | target: window 38 | } 39 | 40 | Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { 41 | var scrollTop = this.$target.scrollTop() 42 | var position = this.$element.offset() 43 | var targetHeight = this.$target.height() 44 | 45 | if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false 46 | 47 | if (this.affixed == 'bottom') { 48 | if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' 49 | return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' 50 | } 51 | 52 | var initializing = this.affixed == null 53 | var colliderTop = initializing ? scrollTop : position.top 54 | var colliderHeight = initializing ? targetHeight : height 55 | 56 | if (offsetTop != null && scrollTop <= offsetTop) return 'top' 57 | if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' 58 | 59 | return false 60 | } 61 | 62 | Affix.prototype.getPinnedOffset = function () { 63 | if (this.pinnedOffset) return this.pinnedOffset 64 | this.$element.removeClass(Affix.RESET).addClass('affix') 65 | var scrollTop = this.$target.scrollTop() 66 | var position = this.$element.offset() 67 | return (this.pinnedOffset = position.top - scrollTop) 68 | } 69 | 70 | Affix.prototype.checkPositionWithEventLoop = function () { 71 | setTimeout($.proxy(this.checkPosition, this), 1) 72 | } 73 | 74 | Affix.prototype.checkPosition = function () { 75 | if (!this.$element.is(':visible')) return 76 | 77 | var height = this.$element.height() 78 | var offset = this.options.offset 79 | var offsetTop = offset.top 80 | var offsetBottom = offset.bottom 81 | var scrollHeight = $(document.body).height() 82 | 83 | if (typeof offset != 'object') offsetBottom = offsetTop = offset 84 | if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) 85 | if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) 86 | 87 | var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) 88 | 89 | if (this.affixed != affix) { 90 | if (this.unpin != null) this.$element.css('top', '') 91 | 92 | var affixType = 'affix' + (affix ? '-' + affix : '') 93 | var e = $.Event(affixType + '.bs.affix') 94 | 95 | this.$element.trigger(e) 96 | 97 | if (e.isDefaultPrevented()) return 98 | 99 | this.affixed = affix 100 | this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null 101 | 102 | this.$element 103 | .removeClass(Affix.RESET) 104 | .addClass(affixType) 105 | .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') 106 | } 107 | 108 | if (affix == 'bottom') { 109 | this.$element.offset({ 110 | top: scrollHeight - height - offsetBottom 111 | }) 112 | } 113 | } 114 | 115 | 116 | // AFFIX PLUGIN DEFINITION 117 | // ======================= 118 | 119 | function Plugin(option) { 120 | return this.each(function () { 121 | var $this = $(this) 122 | var data = $this.data('bs.affix') 123 | var options = typeof option == 'object' && option 124 | 125 | if (!data) $this.data('bs.affix', (data = new Affix(this, options))) 126 | if (typeof option == 'string') data[option]() 127 | }) 128 | } 129 | 130 | var old = $.fn.affix 131 | 132 | $.fn.affix = Plugin 133 | $.fn.affix.Constructor = Affix 134 | 135 | 136 | // AFFIX NO CONFLICT 137 | // ================= 138 | 139 | $.fn.affix.noConflict = function () { 140 | $.fn.affix = old 141 | return this 142 | } 143 | 144 | 145 | // AFFIX DATA-API 146 | // ============== 147 | 148 | $(window).on('load', function () { 149 | $('[data-spy="affix"]').each(function () { 150 | var $spy = $(this) 151 | var data = $spy.data() 152 | 153 | data.offset = data.offset || {} 154 | 155 | if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom 156 | if (data.offsetTop != null) data.offset.top = data.offsetTop 157 | 158 | Plugin.call($spy, data) 159 | }) 160 | }) 161 | 162 | }(jQuery); 163 | -------------------------------------------------------------------------------- /packages/bootstrap-affix-js/package.js: -------------------------------------------------------------------------------- 1 | Package.describe({ 2 | name: 'matb33:bootstrap-affix-js', 3 | summary: 'Bootstrap 3.3.4: affix js', 4 | version: '10.0.0', 5 | git: 'https://github.com/matb33/meteor-bootstrap.git', 6 | documentation: 'README.md' 7 | }); 8 | 9 | Package.onUse(function (api) { 10 | api.versionsFrom('1.2.0.2'); 11 | api.use('matb33:bootstrap-base@10.0.0', 'client'); 12 | api.use('jquery', 'client'); 13 | api.addFiles('affix.js', 'client'); 14 | }); -------------------------------------------------------------------------------- /packages/bootstrap-alert-js/.versions: -------------------------------------------------------------------------------- 1 | jquery@1.11.3_2 2 | less@1.0.14 3 | matb33:bootstrap-alert-js 4 | matb33:bootstrap-alerts 5 | matb33:bootstrap-base 6 | matb33:bootstrap-transition-js 7 | meteor@1.1.6 8 | underscore@1.0.3 9 | -------------------------------------------------------------------------------- /packages/bootstrap-alert-js/README.md: -------------------------------------------------------------------------------- 1 | # Bootstrap 3.3.4 `alert-js` smart package for Meteor 2 | 3 | Part of the smart package-collection for Meteor: http://github.com/matb33/meteor-bootstrap 4 | 5 | ## Usage: 6 | 7 | `meteor add matb33:bootstrap-alert-js` -------------------------------------------------------------------------------- /packages/bootstrap-alert-js/alert.js: -------------------------------------------------------------------------------- 1 | /* ======================================================================== 2 | * Bootstrap: alert.js v3.3.4 3 | * http://getbootstrap.com/javascript/#alerts 4 | * ======================================================================== 5 | * Copyright 2011-2015 Twitter, Inc. 6 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 7 | * ======================================================================== */ 8 | 9 | 10 | +function ($) { 11 | 'use strict'; 12 | 13 | // ALERT CLASS DEFINITION 14 | // ====================== 15 | 16 | var dismiss = '[data-dismiss="alert"]' 17 | var Alert = function (el) { 18 | $(el).on('click', dismiss, this.close) 19 | } 20 | 21 | Alert.VERSION = '3.3.4' 22 | 23 | Alert.TRANSITION_DURATION = 150 24 | 25 | Alert.prototype.close = function (e) { 26 | var $this = $(this) 27 | var selector = $this.attr('data-target') 28 | 29 | if (!selector) { 30 | selector = $this.attr('href') 31 | selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 32 | } 33 | 34 | var $parent = $(selector) 35 | 36 | if (e) e.preventDefault() 37 | 38 | if (!$parent.length) { 39 | $parent = $this.closest('.alert') 40 | } 41 | 42 | $parent.trigger(e = $.Event('close.bs.alert')) 43 | 44 | if (e.isDefaultPrevented()) return 45 | 46 | $parent.removeClass('in') 47 | 48 | function removeElement() { 49 | // detach from parent, fire event then clean up data 50 | $parent.detach().trigger('closed.bs.alert').remove() 51 | } 52 | 53 | $.support.transition && $parent.hasClass('fade') ? 54 | $parent 55 | .one('bsTransitionEnd', removeElement) 56 | .emulateTransitionEnd(Alert.TRANSITION_DURATION) : 57 | removeElement() 58 | } 59 | 60 | 61 | // ALERT PLUGIN DEFINITION 62 | // ======================= 63 | 64 | function Plugin(option) { 65 | return this.each(function () { 66 | var $this = $(this) 67 | var data = $this.data('bs.alert') 68 | 69 | if (!data) $this.data('bs.alert', (data = new Alert(this))) 70 | if (typeof option == 'string') data[option].call($this) 71 | }) 72 | } 73 | 74 | var old = $.fn.alert 75 | 76 | $.fn.alert = Plugin 77 | $.fn.alert.Constructor = Alert 78 | 79 | 80 | // ALERT NO CONFLICT 81 | // ================= 82 | 83 | $.fn.alert.noConflict = function () { 84 | $.fn.alert = old 85 | return this 86 | } 87 | 88 | 89 | // ALERT DATA-API 90 | // ============== 91 | 92 | $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) 93 | 94 | }(jQuery); 95 | -------------------------------------------------------------------------------- /packages/bootstrap-alert-js/package.js: -------------------------------------------------------------------------------- 1 | Package.describe({ 2 | name: 'matb33:bootstrap-alert-js', 3 | summary: 'Bootstrap 3.3.4: alert js', 4 | version: '10.0.0', 5 | git: 'https://github.com/matb33/meteor-bootstrap.git', 6 | documentation: 'README.md' 7 | }); 8 | 9 | Package.onUse(function (api) { 10 | api.versionsFrom('1.2.0.2'); 11 | api.use('matb33:bootstrap-base@10.0.0', 'client'); 12 | api.use(['matb33:bootstrap-alerts@10.0.0', 'matb33:bootstrap-transition-js@10.0.0', 'jquery'], 'client'); 13 | api.addFiles('alert.js', 'client'); 14 | }); -------------------------------------------------------------------------------- /packages/bootstrap-alerts/.versions: -------------------------------------------------------------------------------- 1 | babel-compiler@5.8.24_1 2 | babel-runtime@0.1.4 3 | base64@1.0.4 4 | caching-compiler@1.0.0 5 | check@1.0.6 6 | ecmascript@0.1.5 7 | ecmascript-collections@0.1.6 8 | ejson@1.0.7 9 | less@2.5.0_3 10 | matb33:bootstrap-alerts@10.0.0 11 | matb33:bootstrap-base@10.0.0 12 | meteor@1.1.9 13 | promise@0.5.0 14 | random@1.0.4 15 | underscore@1.0.4 16 | -------------------------------------------------------------------------------- /packages/bootstrap-alerts/README.md: -------------------------------------------------------------------------------- 1 | # Bootstrap 3.3.4 `alerts` smart package for Meteor 2 | 3 | Part of the smart package-collection for Meteor: http://github.com/matb33/meteor-bootstrap 4 | 5 | ## Usage: 6 | 7 | `meteor add matb33:bootstrap-alerts` -------------------------------------------------------------------------------- /packages/bootstrap-alerts/alerts.less: -------------------------------------------------------------------------------- 1 | @import "{matb33:bootstrap-base}/variables.less"; 2 | @import "{matb33:bootstrap-base}/mixins.less"; 3 | 4 | // 5 | // Alerts 6 | // -------------------------------------------------- 7 | 8 | 9 | // Base styles 10 | // ------------------------- 11 | 12 | .alert { 13 | padding: @alert-padding; 14 | margin-bottom: @line-height-computed; 15 | border: 1px solid transparent; 16 | border-radius: @alert-border-radius; 17 | 18 | // Headings for larger alerts 19 | h4 { 20 | margin-top: 0; 21 | // Specified for the h4 to prevent conflicts of changing @headings-color 22 | color: inherit; 23 | } 24 | 25 | // Provide class for links that match alerts 26 | .alert-link { 27 | font-weight: @alert-link-font-weight; 28 | } 29 | 30 | // Improve alignment and spacing of inner content 31 | > p, 32 | > ul { 33 | margin-bottom: 0; 34 | } 35 | 36 | > p + p { 37 | margin-top: 5px; 38 | } 39 | } 40 | 41 | // Dismissible alerts 42 | // 43 | // Expand the right padding and account for the close button's positioning. 44 | 45 | .alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0. 46 | .alert-dismissible { 47 | padding-right: (@alert-padding + 20); 48 | 49 | // Adjust close link position 50 | .close { 51 | position: relative; 52 | top: -2px; 53 | right: -21px; 54 | color: inherit; 55 | } 56 | } 57 | 58 | // Alternate styles 59 | // 60 | // Generate contextual modifier classes for colorizing the alert. 61 | 62 | .alert-success { 63 | .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text); 64 | } 65 | 66 | .alert-info { 67 | .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text); 68 | } 69 | 70 | .alert-warning { 71 | .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text); 72 | } 73 | 74 | .alert-danger { 75 | .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text); 76 | } 77 | -------------------------------------------------------------------------------- /packages/bootstrap-alerts/package.js: -------------------------------------------------------------------------------- 1 | Package.describe({ 2 | name: 'matb33:bootstrap-alerts', 3 | summary: 'Bootstrap 3.3.4: alerts', 4 | version: '10.0.0', 5 | git: 'https://github.com/matb33/meteor-bootstrap.git', 6 | documentation: 'README.md' 7 | }); 8 | 9 | Package.onUse(function (api) { 10 | api.versionsFrom('1.2.0.2'); 11 | api.use('matb33:bootstrap-base@10.0.0', 'client'); 12 | api.use('less', 'client'); 13 | api.addFiles('alerts.less', 'client'); 14 | }); -------------------------------------------------------------------------------- /packages/bootstrap-badges/.versions: -------------------------------------------------------------------------------- 1 | less@1.0.14 2 | matb33:bootstrap-badges 3 | matb33:bootstrap-base 4 | meteor@1.1.6 5 | underscore@1.0.3 6 | -------------------------------------------------------------------------------- /packages/bootstrap-badges/README.md: -------------------------------------------------------------------------------- 1 | # Bootstrap 3.3.4 `badges` smart package for Meteor 2 | 3 | Part of the smart package-collection for Meteor: http://github.com/matb33/meteor-bootstrap 4 | 5 | ## Usage: 6 | 7 | `meteor add matb33:bootstrap-badges` -------------------------------------------------------------------------------- /packages/bootstrap-badges/badges.less: -------------------------------------------------------------------------------- 1 | @import "{matb33:bootstrap-base}/variables.less"; 2 | @import "{matb33:bootstrap-base}/mixins.less"; 3 | 4 | // 5 | // Badges 6 | // -------------------------------------------------- 7 | 8 | 9 | // Base class 10 | .badge { 11 | display: inline-block; 12 | min-width: 10px; 13 | padding: 3px 7px; 14 | font-size: @font-size-small; 15 | font-weight: @badge-font-weight; 16 | color: @badge-color; 17 | line-height: @badge-line-height; 18 | vertical-align: baseline; 19 | white-space: nowrap; 20 | text-align: center; 21 | background-color: @badge-bg; 22 | border-radius: @badge-border-radius; 23 | 24 | // Empty badges collapse automatically (not available in IE8) 25 | &:empty { 26 | display: none; 27 | } 28 | 29 | // Quick fix for badges in buttons 30 | .btn & { 31 | position: relative; 32 | top: -1px; 33 | } 34 | 35 | .btn-xs &, 36 | .btn-group-xs > .btn & { 37 | top: 0; 38 | padding: 1px 5px; 39 | } 40 | 41 | // Hover state, but only for links 42 | a& { 43 | &:hover, 44 | &:focus { 45 | color: @badge-link-hover-color; 46 | text-decoration: none; 47 | cursor: pointer; 48 | } 49 | } 50 | 51 | // Account for badges in navs 52 | .list-group-item.active > &, 53 | .nav-pills > .active > a > & { 54 | color: @badge-active-color; 55 | background-color: @badge-active-bg; 56 | } 57 | 58 | .list-group-item > & { 59 | float: right; 60 | } 61 | 62 | .list-group-item > & + & { 63 | margin-right: 5px; 64 | } 65 | 66 | .nav-pills > li > a > & { 67 | margin-left: 3px; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /packages/bootstrap-badges/package.js: -------------------------------------------------------------------------------- 1 | Package.describe({ 2 | name: 'matb33:bootstrap-badges', 3 | summary: 'Bootstrap 3.3.4: badges', 4 | version: '10.0.0', 5 | git: 'https://github.com/matb33/meteor-bootstrap.git', 6 | documentation: 'README.md' 7 | }); 8 | 9 | Package.onUse(function (api) { 10 | api.versionsFrom('1.2.0.2'); 11 | api.use('matb33:bootstrap-base@10.0.0', 'client'); 12 | api.use('less', 'client'); 13 | api.addFiles('badges.less', 'client'); 14 | }); 15 | -------------------------------------------------------------------------------- /packages/bootstrap-base/.versions: -------------------------------------------------------------------------------- 1 | babel-compiler@5.8.24_1 2 | babel-runtime@0.1.4 3 | base64@1.0.4 4 | caching-compiler@1.0.0 5 | check@1.0.6 6 | ecmascript@0.1.5 7 | ecmascript-collections@0.1.6 8 | ejson@1.0.7 9 | less@2.5.0_3 10 | matb33:bootstrap-base@10.0.0 11 | meteor@1.1.9 12 | promise@0.5.0 13 | random@1.0.4 14 | underscore@1.0.4 15 | -------------------------------------------------------------------------------- /packages/bootstrap-base/README.md: -------------------------------------------------------------------------------- 1 | # Bootstrap 3.3.4 `base` smart package for Meteor 2 | 3 | Part of the smart package-collection for Meteor: http://github.com/matb33/meteor-bootstrap 4 | 5 | ## Usage: 6 | 7 | `meteor add matb33:bootstrap-base` -------------------------------------------------------------------------------- /packages/bootstrap-base/base.less: -------------------------------------------------------------------------------- 1 | @import "variables.less"; 2 | @import "mixins.less"; 3 | 4 | @import "normalize.less"; 5 | @import "scaffolding.less"; 6 | 7 | @import "utilities.less"; 8 | @import "responsive-utilities.less"; -------------------------------------------------------------------------------- /packages/bootstrap-base/bootstrap.less: -------------------------------------------------------------------------------- 1 | // Core variables and mixins 2 | @import "variables.less"; 3 | @import "mixins.less"; 4 | 5 | // Reset and dependencies 6 | @import "normalize.less"; 7 | @import "print.less"; 8 | @import "glyphicons.less"; 9 | 10 | // Core CSS 11 | @import "scaffolding.less"; 12 | @import "type.less"; 13 | @import "code.less"; 14 | @import "grid.less"; 15 | @import "tables.less"; 16 | @import "forms.less"; 17 | @import "buttons.less"; 18 | 19 | // Components 20 | @import "component-animations.less"; 21 | @import "dropdowns.less"; 22 | @import "button-groups.less"; 23 | @import "input-groups.less"; 24 | @import "navs.less"; 25 | @import "navbar.less"; 26 | @import "breadcrumbs.less"; 27 | @import "pagination.less"; 28 | @import "pager.less"; 29 | @import "labels.less"; 30 | @import "badges.less"; 31 | @import "jumbotron.less"; 32 | @import "thumbnails.less"; 33 | @import "alerts.less"; 34 | @import "progress-bars.less"; 35 | @import "media.less"; 36 | @import "list-group.less"; 37 | @import "panels.less"; 38 | @import "responsive-embed.less"; 39 | @import "wells.less"; 40 | @import "close.less"; 41 | 42 | // Components w/ JavaScript 43 | @import "modals.less"; 44 | @import "tooltip.less"; 45 | @import "popovers.less"; 46 | @import "carousel.less"; 47 | 48 | // Utility classes 49 | @import "utilities.less"; 50 | @import "responsive-utilities.less"; 51 | -------------------------------------------------------------------------------- /packages/bootstrap-base/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------------------------------- 3 | 4 | // Utilities 5 | @import "mixins/hide-text.less"; 6 | @import "mixins/opacity.less"; 7 | @import "mixins/image.less"; 8 | @import "mixins/labels.less"; 9 | @import "mixins/reset-filter.less"; 10 | @import "mixins/resize.less"; 11 | @import "mixins/responsive-visibility.less"; 12 | @import "mixins/size.less"; 13 | @import "mixins/tab-focus.less"; 14 | @import "mixins/text-emphasis.less"; 15 | @import "mixins/text-overflow.less"; 16 | @import "mixins/vendor-prefixes.less"; 17 | 18 | // Components 19 | @import "mixins/alerts.less"; 20 | @import "mixins/buttons.less"; 21 | @import "mixins/panels.less"; 22 | @import "mixins/pagination.less"; 23 | @import "mixins/list-group.less"; 24 | @import "mixins/nav-divider.less"; 25 | @import "mixins/forms.less"; 26 | @import "mixins/progress-bar.less"; 27 | @import "mixins/table-row.less"; 28 | 29 | // Skins 30 | @import "mixins/background-variant.less"; 31 | @import "mixins/border-radius.less"; 32 | @import "mixins/gradients.less"; 33 | 34 | // Layout 35 | @import "mixins/clearfix.less"; 36 | @import "mixins/center-block.less"; 37 | @import "mixins/nav-vertical-align.less"; 38 | @import "mixins/grid-framework.less"; 39 | @import "mixins/grid.less"; 40 | -------------------------------------------------------------------------------- /packages/bootstrap-base/mixins/alerts.less: -------------------------------------------------------------------------------- 1 | // Alerts 2 | 3 | .alert-variant(@background; @border; @text-color) { 4 | background-color: @background; 5 | border-color: @border; 6 | color: @text-color; 7 | 8 | hr { 9 | border-top-color: darken(@border, 5%); 10 | } 11 | .alert-link { 12 | color: darken(@text-color, 10%); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/bootstrap-base/mixins/background-variant.less: -------------------------------------------------------------------------------- 1 | // Contextual backgrounds 2 | 3 | .bg-variant(@color) { 4 | background-color: @color; 5 | a&:hover { 6 | background-color: darken(@color, 10%); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/bootstrap-base/mixins/border-radius.less: -------------------------------------------------------------------------------- 1 | // Single side border-radius 2 | 3 | .border-top-radius(@radius) { 4 | border-top-right-radius: @radius; 5 | border-top-left-radius: @radius; 6 | } 7 | .border-right-radius(@radius) { 8 | border-bottom-right-radius: @radius; 9 | border-top-right-radius: @radius; 10 | } 11 | .border-bottom-radius(@radius) { 12 | border-bottom-right-radius: @radius; 13 | border-bottom-left-radius: @radius; 14 | } 15 | .border-left-radius(@radius) { 16 | border-bottom-left-radius: @radius; 17 | border-top-left-radius: @radius; 18 | } 19 | -------------------------------------------------------------------------------- /packages/bootstrap-base/mixins/buttons.less: -------------------------------------------------------------------------------- 1 | // Button variants 2 | // 3 | // Easily pump out default styles, as well as :hover, :focus, :active, 4 | // and disabled options for all buttons 5 | 6 | .button-variant(@color; @background; @border) { 7 | color: @color; 8 | background-color: @background; 9 | border-color: @border; 10 | 11 | &:hover, 12 | &:focus, 13 | &.focus, 14 | &:active, 15 | &.active, 16 | .open > .dropdown-toggle& { 17 | color: @color; 18 | background-color: darken(@background, 10%); 19 | border-color: darken(@border, 12%); 20 | } 21 | &:active, 22 | &.active, 23 | .open > .dropdown-toggle& { 24 | background-image: none; 25 | } 26 | &.disabled, 27 | &[disabled], 28 | fieldset[disabled] & { 29 | &, 30 | &:hover, 31 | &:focus, 32 | &.focus, 33 | &:active, 34 | &.active { 35 | background-color: @background; 36 | border-color: @border; 37 | } 38 | } 39 | 40 | .badge { 41 | color: @background; 42 | background-color: @color; 43 | } 44 | } 45 | 46 | // Button sizes 47 | .button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) { 48 | padding: @padding-vertical @padding-horizontal; 49 | font-size: @font-size; 50 | line-height: @line-height; 51 | border-radius: @border-radius; 52 | } 53 | -------------------------------------------------------------------------------- /packages/bootstrap-base/mixins/center-block.less: -------------------------------------------------------------------------------- 1 | // Center-align a block level element 2 | 3 | .center-block() { 4 | display: block; 5 | margin-left: auto; 6 | margin-right: auto; 7 | } 8 | -------------------------------------------------------------------------------- /packages/bootstrap-base/mixins/clearfix.less: -------------------------------------------------------------------------------- 1 | // Clearfix 2 | // 3 | // For modern browsers 4 | // 1. The space content is one way to avoid an Opera bug when the 5 | // contenteditable attribute is included anywhere else in the document. 6 | // Otherwise it causes space to appear at the top and bottom of elements 7 | // that are clearfixed. 8 | // 2. The use of `table` rather than `block` is only necessary if using 9 | // `:before` to contain the top-margins of child elements. 10 | // 11 | // Source: http://nicolasgallagher.com/micro-clearfix-hack/ 12 | 13 | .clearfix() { 14 | &:before, 15 | &:after { 16 | content: " "; // 1 17 | display: table; // 2 18 | } 19 | &:after { 20 | clear: both; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /packages/bootstrap-base/mixins/forms.less: -------------------------------------------------------------------------------- 1 | // Form validation states 2 | // 3 | // Used in forms.less to generate the form validation CSS for warnings, errors, 4 | // and successes. 5 | 6 | .form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) { 7 | // Color the label and help text 8 | .help-block, 9 | .control-label, 10 | .radio, 11 | .checkbox, 12 | .radio-inline, 13 | .checkbox-inline, 14 | &.radio label, 15 | &.checkbox label, 16 | &.radio-inline label, 17 | &.checkbox-inline label { 18 | color: @text-color; 19 | } 20 | // Set the border and box shadow on specific inputs to match 21 | .form-control { 22 | border-color: @border-color; 23 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work 24 | &:focus { 25 | border-color: darken(@border-color, 10%); 26 | @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%); 27 | .box-shadow(@shadow); 28 | } 29 | } 30 | // Set validation states also for addons 31 | .input-group-addon { 32 | color: @text-color; 33 | border-color: @border-color; 34 | background-color: @background-color; 35 | } 36 | // Optional feedback icon 37 | .form-control-feedback { 38 | color: @text-color; 39 | } 40 | } 41 | 42 | 43 | // Form control focus state 44 | // 45 | // Generate a customized focus state and for any input with the specified color, 46 | // which defaults to the `@input-border-focus` variable. 47 | // 48 | // We highly encourage you to not customize the default value, but instead use 49 | // this to tweak colors on an as-needed basis. This aesthetic change is based on 50 | // WebKit's default styles, but applicable to a wider range of browsers. Its 51 | // usability and accessibility should be taken into account with any change. 52 | // 53 | // Example usage: change the default blue border and shadow to white for better 54 | // contrast against a dark gray background. 55 | .form-control-focus(@color: @input-border-focus) { 56 | @color-rgba: rgba(red(@color), green(@color), blue(@color), .6); 57 | &:focus { 58 | border-color: @color; 59 | outline: 0; 60 | .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}"); 61 | } 62 | } 63 | 64 | // Form control sizing 65 | // 66 | // Relative text size, padding, and border-radii changes for form controls. For 67 | // horizontal sizing, wrap controls in the predefined grid classes. `