@gmfe/react 2.14.21-beta.1 → 2.14.26-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (377) hide show
  1. package/LICENSE.md +4 -0
  2. package/package.json +3 -3
  3. package/src/common/hooks/index.js +3 -3
  4. package/src/common/hooks/use_mutation_observer.js +25 -25
  5. package/src/common/util.js +52 -52
  6. package/src/component/affix/affix.stories.js +13 -13
  7. package/src/component/affix/index.js +21 -21
  8. package/src/component/box/box.js +31 -31
  9. package/src/component/box/box.stories.js +94 -94
  10. package/src/component/box/box_form.js +77 -77
  11. package/src/component/box/box_panel.js +91 -91
  12. package/src/component/box/box_table.js +51 -51
  13. package/src/component/box/index.js +6 -6
  14. package/src/component/box/style.less +39 -39
  15. package/src/component/button/button.stories.js +91 -91
  16. package/src/component/button/index.js +92 -92
  17. package/src/component/button/style.less +114 -114
  18. package/src/component/calendar/calendar.js +52 -52
  19. package/src/component/calendar/calendar.stories.js +57 -57
  20. package/src/component/calendar/content.js +89 -89
  21. package/src/component/calendar/day.js +109 -109
  22. package/src/component/calendar/head.js +243 -243
  23. package/src/component/calendar/index.js +4 -4
  24. package/src/component/calendar/range_calendar.js +150 -150
  25. package/src/component/calendar/style.less +140 -140
  26. package/src/component/calendar/week.js +27 -27
  27. package/src/component/carousel/carousel.js +178 -178
  28. package/src/component/carousel/stories.js +50 -50
  29. package/src/component/carousel/style.less +48 -48
  30. package/src/component/cascader/cascader.js +441 -443
  31. package/src/component/cascader/cascader.select.js +195 -195
  32. package/src/component/cascader/stories.js +240 -240
  33. package/src/component/cascader/style.less +122 -122
  34. package/src/component/checkbox/checkbox.js +86 -86
  35. package/src/component/checkbox/checkbox_group.js +66 -66
  36. package/src/component/checkbox/index.js +4 -4
  37. package/src/component/checkbox/stories.js +103 -103
  38. package/src/component/checkbox/style.less +88 -88
  39. package/src/component/collapse/collapse.stories.js +18 -18
  40. package/src/component/collapse/index.js +36 -36
  41. package/src/component/color_picker/index.js +190 -190
  42. package/src/component/color_picker/stories.js +17 -17
  43. package/src/component/color_picker/style.less +41 -41
  44. package/src/component/date_picker/date_picker.stories.js +102 -102
  45. package/src/component/date_picker/index.js +217 -217
  46. package/src/component/date_picker/overlay.js +119 -119
  47. package/src/component/date_picker/style.less +22 -22
  48. package/src/component/date_picker/time_select.js +62 -62
  49. package/src/component/date_range_picker/date_range_picker.stories.js +196 -196
  50. package/src/component/date_range_picker/index.js +206 -206
  51. package/src/component/date_range_picker/left.js +127 -127
  52. package/src/component/date_range_picker/overlay.js +202 -202
  53. package/src/component/date_range_picker/style.less +46 -46
  54. package/src/component/date_range_picker/time_range_select.js +150 -150
  55. package/src/component/date_range_picker/two.js +129 -129
  56. package/src/component/date_range_picker/util.js +42 -42
  57. package/src/component/dialog/index.js +240 -240
  58. package/src/component/dialog/stories.js +125 -125
  59. package/src/component/divider/index.js +28 -28
  60. package/src/component/divider/stories.js +5 -5
  61. package/src/component/divider/style.less +15 -15
  62. package/src/component/drawer/index.js +107 -107
  63. package/src/component/drawer/style.less +43 -43
  64. package/src/component/drop_down/drop_down.js +84 -84
  65. package/src/component/drop_down/drop_down_item.js +43 -43
  66. package/src/component/drop_down/drop_down_items.js +22 -22
  67. package/src/component/drop_down/index.js +5 -5
  68. package/src/component/drop_down/stories.js +38 -38
  69. package/src/component/drop_down/style.less +21 -21
  70. package/src/component/drop_select/index.js +208 -208
  71. package/src/component/drop_select/style.less +69 -69
  72. package/src/component/dropper/index.js +62 -62
  73. package/src/component/dropper/style.less +18 -18
  74. package/src/component/editable_text/editable_text.stories.js +47 -47
  75. package/src/component/editable_text/index.js +106 -106
  76. package/src/component/editable_text/style.less +29 -29
  77. package/src/component/filter_select/filter.select.js +416 -416
  78. package/src/component/filter_select/multiple.filter.select.js +425 -425
  79. package/src/component/filter_select/style.less +117 -117
  80. package/src/component/flex/index.js +132 -132
  81. package/src/component/flex/stories.js +13 -13
  82. package/src/component/flex/style.less +101 -101
  83. package/src/component/flip_number/index.js +196 -196
  84. package/src/component/flip_number/stories.js +25 -25
  85. package/src/component/flip_number/utils.js +50 -50
  86. package/src/component/form/form.js +153 -153
  87. package/src/component/form/form.stories.js +553 -553
  88. package/src/component/form/form_block.js +59 -59
  89. package/src/component/form/form_button.js +29 -29
  90. package/src/component/form/form_group.js +173 -173
  91. package/src/component/form/form_item.js +174 -174
  92. package/src/component/form/form_panel.js +71 -71
  93. package/src/component/form/index.js +8 -8
  94. package/src/component/form/style.less +130 -130
  95. package/src/component/form/util.js +13 -13
  96. package/src/component/function_set/function_set.stories.js +91 -91
  97. package/src/component/function_set/index.js +98 -98
  98. package/src/component/function_set/overlay.js +56 -56
  99. package/src/component/grid/col.js +72 -72
  100. package/src/component/grid/grid.stories.js +123 -123
  101. package/src/component/grid/index.js +4 -4
  102. package/src/component/grid/mixin.less +48 -48
  103. package/src/component/grid/row.js +44 -44
  104. package/src/component/grid/style.less +26 -26
  105. package/src/component/grid/util.js +11 -11
  106. package/src/component/icon_down_up/index.js +28 -28
  107. package/src/component/icon_down_up/stories.js +18 -18
  108. package/src/component/icon_down_up/style.less +8 -8
  109. package/src/component/image_preview/index.js +20 -20
  110. package/src/component/image_preview/preview_modal.js +193 -193
  111. package/src/component/image_preview/style.less +119 -119
  112. package/src/component/img_uploader/index.js +149 -149
  113. package/src/component/img_uploader/index.stories.js +51 -51
  114. package/src/component/img_uploader/style.less +22 -22
  115. package/src/component/input/index.js +19 -19
  116. package/src/component/input_number/index.js +73 -73
  117. package/src/component/input_number/number.js +158 -158
  118. package/src/component/input_number/stories.js +21 -21
  119. package/src/component/input_number/style.less +10 -10
  120. package/src/component/layout_root/index.js +165 -165
  121. package/src/component/lazy_img/index.js +68 -68
  122. package/src/component/level_list/index.js +120 -120
  123. package/src/component/level_list/level_item.js +64 -64
  124. package/src/component/level_list/level_list.stories.js +139 -139
  125. package/src/component/level_list/style.less +47 -47
  126. package/src/component/level_list/util.js +22 -22
  127. package/src/component/level_select/index.js +240 -240
  128. package/src/component/level_select/level_select.stories.js +67 -67
  129. package/src/component/list/base.js +155 -155
  130. package/src/component/list/index.js +93 -93
  131. package/src/component/list/list.stories.js +99 -99
  132. package/src/component/list/style.less +58 -58
  133. package/src/component/loading/index.js +45 -45
  134. package/src/component/loading/loading_chunk.js +59 -59
  135. package/src/component/loading/loading_full_screen.js +62 -62
  136. package/src/component/loading/stories.js +46 -46
  137. package/src/component/loading/style.less +92 -92
  138. package/src/component/mask/index.js +34 -34
  139. package/src/component/mask/style.less +10 -10
  140. package/src/component/modal/clean_modal.js +36 -36
  141. package/src/component/modal/index.js +293 -293
  142. package/src/component/modal/right_side_modal.js +37 -37
  143. package/src/component/modal/stories.js +96 -96
  144. package/src/component/modal/style.less +145 -145
  145. package/src/component/more_select/base.js +517 -517
  146. package/src/component/more_select/index.js +91 -91
  147. package/src/component/more_select/stories.js +261 -261
  148. package/src/component/more_select/style.less +130 -130
  149. package/src/component/nav/index.js +269 -269
  150. package/src/component/nav/nav.stories.js +133 -133
  151. package/src/component/nav/style.less +156 -156
  152. package/src/component/nprogress/index.js +34 -34
  153. package/src/component/nprogress/stories.js +22 -22
  154. package/src/component/nprogress/style.less +39 -39
  155. package/src/component/pagination/base.js +67 -67
  156. package/src/component/pagination/left.js +65 -65
  157. package/src/component/pagination/page.js +120 -120
  158. package/src/component/pagination/page_peek.js +96 -96
  159. package/src/component/pagination/pagination.js +54 -54
  160. package/src/component/pagination/pagination.stories.js +104 -104
  161. package/src/component/pagination/pagination_text.js +71 -71
  162. package/src/component/pagination/pagination_v2.js +30 -30
  163. package/src/component/pagination/right.js +67 -67
  164. package/src/component/pagination/style.less +52 -52
  165. package/src/component/pagination/util.js +5 -5
  166. package/src/component/picture_preview/index.js +21 -21
  167. package/src/component/popover/index.js +373 -373
  168. package/src/component/popover/stories.js +101 -101
  169. package/src/component/popup/index.js +4 -4
  170. package/src/component/popup/popup.js +172 -172
  171. package/src/component/popup/popup_content_confirm.js +67 -67
  172. package/src/component/popup/style.less +105 -105
  173. package/src/component/price/index.js +147 -147
  174. package/src/component/price/stories.js +34 -34
  175. package/src/component/progress/index.js +101 -101
  176. package/src/component/progress/stories.js +60 -60
  177. package/src/component/progress/style.less +88 -88
  178. package/src/component/progress_circle/index.js +116 -116
  179. package/src/component/progress_circle/stories.js +54 -54
  180. package/src/component/progress_circle/style.less +17 -17
  181. package/src/component/radio/index.js +4 -4
  182. package/src/component/radio/radio.js +76 -76
  183. package/src/component/radio/radio_group.js +51 -51
  184. package/src/component/radio/stories.js +80 -80
  185. package/src/component/radio/style.less +63 -63
  186. package/src/component/recommend_input/index.js +118 -118
  187. package/src/component/recommend_input/recommend_input.stories.js +56 -56
  188. package/src/component/recommend_input/style.less +25 -25
  189. package/src/component/select/index.js +4 -4
  190. package/src/component/select/option.js +22 -22
  191. package/src/component/select/select.js +186 -186
  192. package/src/component/select/select.stories.js +79 -79
  193. package/src/component/select/style.less +4 -4
  194. package/src/component/selection/index.js +132 -132
  195. package/src/component/selection/selection.stories.js +41 -41
  196. package/src/component/selection/style.less +67 -67
  197. package/src/component/sheet/index.js +7 -7
  198. package/src/component/sheet/sheet.js +348 -348
  199. package/src/component/sheet/sheet_action.js +16 -16
  200. package/src/component/sheet/sheet_batch_action.js +16 -16
  201. package/src/component/sheet/sheet_column.js +21 -21
  202. package/src/component/sheet/sheet_select.js +31 -31
  203. package/src/component/sheet/stories.js +210 -210
  204. package/src/component/sheet/style.less +95 -95
  205. package/src/component/steps/index.js +66 -66
  206. package/src/component/steps/steps.stories.js +15 -15
  207. package/src/component/steps/style.less +39 -39
  208. package/src/component/storage/index.js +54 -54
  209. package/src/component/storage/stories.js +38 -38
  210. package/src/component/switch/index.js +118 -118
  211. package/src/component/switch/stories.js +7 -7
  212. package/src/component/switch/style.less +70 -70
  213. package/src/component/table_select/index.js +152 -152
  214. package/src/component/table_select/style.less +12 -12
  215. package/src/component/table_select/table_select.stories.js +91 -91
  216. package/src/component/table_select/util.js +21 -21
  217. package/src/component/tabs/style.less +33 -33
  218. package/src/component/tabs/tabs.js +97 -97
  219. package/src/component/tabs/tabs.stories.js +48 -48
  220. package/src/component/time_span/style.less +45 -45
  221. package/src/component/time_span/time_span.js +183 -183
  222. package/src/component/time_span/time_span.stories.js +66 -66
  223. package/src/component/time_span/time_span_picker.js +112 -112
  224. package/src/component/time_span/time_span_picker.stories.js +71 -71
  225. package/src/component/tip/index.js +168 -168
  226. package/src/component/tip/stories.js +54 -54
  227. package/src/component/tip/style.less +41 -41
  228. package/src/component/tool_tip/index.js +58 -58
  229. package/src/component/tool_tip/stories.js +36 -36
  230. package/src/component/transfer/box.js +186 -186
  231. package/src/component/transfer/index.js +4 -4
  232. package/src/component/transfer/stories.js +108 -108
  233. package/src/component/transfer/style.less +34 -34
  234. package/src/component/transfer/transfer.js +181 -181
  235. package/src/component/transfer/transfer_group.js +178 -178
  236. package/src/component/transfer_v2/index.js +171 -171
  237. package/src/component/transfer_v2/transfer_v2.stories.js +226 -226
  238. package/src/component/tree/bottom.js +41 -41
  239. package/src/component/tree/index.js +205 -205
  240. package/src/component/tree/item.js +154 -154
  241. package/src/component/tree/list.js +151 -151
  242. package/src/component/tree/style.less +147 -147
  243. package/src/component/tree/tree.stories.js +241 -241
  244. package/src/component/tree/util.js +24 -24
  245. package/src/component/tree_v2/bottom.js +40 -40
  246. package/src/component/tree_v2/index.js +260 -260
  247. package/src/component/tree_v2/list.js +230 -230
  248. package/src/component/tree_v2/style.less +38 -38
  249. package/src/component/tree_v2/tree.stories.js +419 -419
  250. package/src/component/tree_v2/util.js +185 -185
  251. package/src/component/uploader/index.js +108 -108
  252. package/src/component/uploader/style.less +24 -24
  253. package/src/component/uploader/uploader.stories.js +51 -51
  254. package/src/css/arrow.less +56 -56
  255. package/src/css/bg.less +52 -52
  256. package/src/css/border.less +40 -40
  257. package/src/css/cover.less +236 -236
  258. package/src/css/cursor.less +19 -19
  259. package/src/css/display.less +16 -16
  260. package/src/css/distance.less +324 -324
  261. package/src/css/error.less +10 -10
  262. package/src/css/other.less +16 -16
  263. package/src/css/overflow.less +23 -23
  264. package/src/css/position.less +11 -11
  265. package/src/css/rotate.less +28 -28
  266. package/src/css/shadow.less +11 -11
  267. package/src/css/stories.js +104 -104
  268. package/src/css/svg.less +51 -51
  269. package/src/css/text.less +120 -120
  270. package/src/css/variables.less +62 -62
  271. package/src/event_type.js +16 -16
  272. package/src/fonts/glyphicons-halflings-regular.svg +542 -542
  273. package/src/index.js +237 -237
  274. package/src/index.less +108 -108
  275. package/src/less/.csscomb.json +304 -304
  276. package/src/less/.csslintrc +19 -19
  277. package/src/less/alerts.less +72 -72
  278. package/src/less/badges.less +65 -65
  279. package/src/less/bootstrap.less +51 -51
  280. package/src/less/breadcrumbs.less +25 -25
  281. package/src/less/button-groups.less +253 -253
  282. package/src/less/buttons.less +186 -186
  283. package/src/less/carousel.less +269 -269
  284. package/src/less/close.less +33 -33
  285. package/src/less/code.less +68 -68
  286. package/src/less/component-animations.less +39 -39
  287. package/src/less/custom.less +37 -37
  288. package/src/less/dropdowns.less +215 -215
  289. package/src/less/forms.less +612 -612
  290. package/src/less/glyphicons.less +1614 -1614
  291. package/src/less/grid.less +76 -76
  292. package/src/less/input-groups.less +175 -175
  293. package/src/less/jumbotron.less +53 -53
  294. package/src/less/labels.less +64 -64
  295. package/src/less/list-group.less +126 -126
  296. package/src/less/media.less +66 -66
  297. package/src/less/mixins/alerts.less +14 -14
  298. package/src/less/mixins/background-variant.less +9 -9
  299. package/src/less/mixins/border-radius.less +21 -21
  300. package/src/less/mixins/buttons.less +65 -65
  301. package/src/less/mixins/center-block.less +7 -7
  302. package/src/less/mixins/clearfix.less +22 -22
  303. package/src/less/mixins/forms.less +84 -84
  304. package/src/less/mixins/gradients.less +59 -59
  305. package/src/less/mixins/grid-framework.less +96 -96
  306. package/src/less/mixins/grid.less +134 -134
  307. package/src/less/mixins/hide-text.less +21 -21
  308. package/src/less/mixins/image.less +25 -25
  309. package/src/less/mixins/labels.less +12 -12
  310. package/src/less/mixins/list-group.less +30 -30
  311. package/src/less/mixins/nav-divider.less +10 -10
  312. package/src/less/mixins/nav-vertical-align.less +9 -9
  313. package/src/less/mixins/opacity.less +8 -8
  314. package/src/less/mixins/pagination.less +24 -24
  315. package/src/less/mixins/panels.less +24 -24
  316. package/src/less/mixins/progress-bar.less +10 -10
  317. package/src/less/mixins/reset-filter.less +8 -8
  318. package/src/less/mixins/reset-text.less +18 -18
  319. package/src/less/mixins/resize.less +6 -6
  320. package/src/less/mixins/responsive-visibility.less +21 -21
  321. package/src/less/mixins/size.less +10 -10
  322. package/src/less/mixins/tab-focus.less +9 -9
  323. package/src/less/mixins/table-row.less +28 -28
  324. package/src/less/mixins/text-emphasis.less +9 -9
  325. package/src/less/mixins/text-overflow.less +8 -8
  326. package/src/less/mixins/vendor-prefixes.less +254 -254
  327. package/src/less/mixins.less +36 -36
  328. package/src/less/modals.less +163 -163
  329. package/src/less/navbar.less +651 -651
  330. package/src/less/navs.less +236 -236
  331. package/src/less/normalize.less +424 -424
  332. package/src/less/pager.less +54 -54
  333. package/src/less/pagination.less +90 -90
  334. package/src/less/panels.less +274 -274
  335. package/src/less/popovers.less +140 -140
  336. package/src/less/print.less +103 -103
  337. package/src/less/progress-bars.less +92 -92
  338. package/src/less/responsive-embed.less +35 -35
  339. package/src/less/responsive-utilities.less +209 -209
  340. package/src/less/scaffolding.less +154 -154
  341. package/src/less/tables.less +228 -228
  342. package/src/less/theme.less +344 -344
  343. package/src/less/thumbnails.less +35 -35
  344. package/src/less/tooltip.less +115 -115
  345. package/src/less/type.less +352 -352
  346. package/src/less/utilities.less +57 -57
  347. package/src/less/variables.less +833 -833
  348. package/src/less/wells.less +29 -29
  349. package/src/sotries.js +4 -4
  350. package/src/validator/index.js +10 -10
  351. package/src/validator/rules.js +66 -66
  352. package/src/validator/type.js +10 -10
  353. package/src/validator/validator.js +86 -86
  354. package/src/var.less +4 -4
  355. package/svg/calendar-month.svg +8 -8
  356. package/svg/calendar-year.svg +13 -13
  357. package/svg/calendar.svg +17 -17
  358. package/svg/check-detail.svg +18 -18
  359. package/svg/close-circle.svg +13 -13
  360. package/svg/closeup.svg +20 -20
  361. package/svg/delete.svg +10 -10
  362. package/svg/down-small.svg +1 -1
  363. package/svg/down.svg +1 -1
  364. package/svg/edit-box.svg +17 -17
  365. package/svg/edit-pen.svg +17 -17
  366. package/svg/empty.svg +27 -27
  367. package/svg/expand.svg +21 -21
  368. package/svg/left-small.svg +1 -1
  369. package/svg/more.svg +10 -10
  370. package/svg/next.svg +40 -40
  371. package/svg/pen.svg +12 -12
  372. package/svg/remove.svg +1 -1
  373. package/svg/right-small.svg +1 -1
  374. package/svg/search.svg +8 -8
  375. package/svg/setting.svg +17 -17
  376. package/svg/up-small.svg +1 -1
  377. package/svg/up.svg +1 -1
@@ -1,612 +1,612 @@
1
- //
2
- // Forms
3
- // --------------------------------------------------
4
-
5
- // Normalize non-controls
6
- //
7
- // Restyle and baseline non-control form elements.
8
-
9
- fieldset {
10
- padding: 0;
11
- margin: 0;
12
- border: 0;
13
- // Chrome and Firefox set a `min-width: min-content;` on fieldsets,
14
- // so we reset that to ensure it behaves more like a standard block element.
15
- // See https://github.com/twbs/bootstrap/issues/12359.
16
- min-width: 0;
17
- }
18
-
19
- legend {
20
- display: block;
21
- width: 100%;
22
- padding: 0;
23
- margin-bottom: @line-height-computed;
24
- font-size: (@font-size-base * 1.5);
25
- line-height: inherit;
26
- color: @legend-color;
27
- border: 0;
28
- border-bottom: 1px solid @legend-border-color;
29
- }
30
-
31
- label {
32
- display: inline-block;
33
- max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)
34
- margin-bottom: 5px;
35
- font-weight: bold;
36
- }
37
-
38
- // Normalize form controls
39
- //
40
- // While most of our form styles require extra classes, some basic normalization
41
- // is required to ensure optimum display with or without those classes to better
42
- // address browser inconsistencies.
43
-
44
- // Override content-box in Normalize (* isn't specific enough)
45
- input[type="search"] {
46
- .box-sizing(border-box);
47
- }
48
-
49
- // Position radios and checkboxes better
50
- input[type="radio"],
51
- input[type="checkbox"] {
52
- margin: 4px 0 0;
53
- margin-top: 1px \9; // IE8-9
54
- line-height: normal;
55
- }
56
-
57
- input[type="file"] {
58
- display: block;
59
- }
60
-
61
- // Make range inputs behave like textual form controls
62
- input[type="range"] {
63
- display: block;
64
- width: 100%;
65
- }
66
-
67
- // Make multiple select elements height not fixed
68
- select[multiple],
69
- select[size] {
70
- height: auto;
71
- }
72
-
73
- // Focus for file, radio, and checkbox
74
- input[type="file"]:focus,
75
- input[type="radio"]:focus,
76
- input[type="checkbox"]:focus {
77
- .tab-focus();
78
- }
79
-
80
- // Adjust output element
81
- output {
82
- display: block;
83
- padding-top: (@padding-base-vertical + 1);
84
- font-size: @font-size-base;
85
- line-height: @line-height-base;
86
- color: @input-color;
87
- }
88
-
89
- // Common form controls
90
- //
91
- // Shared size and type resets for form controls. Apply `.form-control` to any
92
- // of the following form controls:
93
- //
94
- // select
95
- // textarea
96
- // input[type="text"]
97
- // input[type="password"]
98
- // input[type="datetime"]
99
- // input[type="datetime-local"]
100
- // input[type="date"]
101
- // input[type="month"]
102
- // input[type="time"]
103
- // input[type="week"]
104
- // input[type="number"]
105
- // input[type="email"]
106
- // input[type="url"]
107
- // input[type="search"]
108
- // input[type="tel"]
109
- // input[type="color"]
110
-
111
- .form-control {
112
- display: block;
113
- width: 100%;
114
- height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
115
- padding: @padding-base-vertical @padding-base-horizontal;
116
- font-size: @font-size-base;
117
- line-height: @line-height-base;
118
- color: @input-color;
119
- background-color: @input-bg;
120
- background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
121
- border: 1px solid @input-border;
122
- border-radius: @input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.
123
- .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075));
124
- .transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s");
125
-
126
- // Customize the `:focus` state to imitate native WebKit styles.
127
- .form-control-focus();
128
-
129
- // Placeholder
130
- .placeholder();
131
-
132
- // Unstyle the caret on `<select>`s in IE10+.
133
- &::-ms-expand {
134
- border: 0;
135
- background-color: transparent;
136
- }
137
-
138
- // Disabled and read-only inputs
139
- //
140
- // HTML5 says that controls under a fieldset > legend:first-child won't be
141
- // disabled if the fieldset is disabled. Due to implementation difficulty, we
142
- // don't honor that edge case; we style them as disabled anyway.
143
- &[disabled],
144
- &[readonly],
145
- fieldset[disabled] & {
146
- background-color: @input-bg-disabled;
147
- opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655
148
- }
149
-
150
- &[disabled],
151
- fieldset[disabled] & {
152
- cursor: @cursor-disabled;
153
- }
154
-
155
- // Reset height for `textarea`s
156
- textarea& {
157
- height: auto;
158
- }
159
- }
160
-
161
- // Search inputs in iOS
162
- //
163
- // This overrides the extra rounded corners on search inputs in iOS so that our
164
- // `.form-control` class can properly style them. Note that this cannot simply
165
- // be added to `.form-control` as it's not specific enough. For details, see
166
- // https://github.com/twbs/bootstrap/issues/11586.
167
-
168
- input[type="search"] {
169
- -webkit-appearance: none;
170
- }
171
-
172
- // Special styles for iOS temporal inputs
173
- //
174
- // In Mobile Safari, setting `display: block` on temporal inputs causes the
175
- // text within the input to become vertically misaligned. As a workaround, we
176
- // set a pixel line-height that matches the given height of the input, but only
177
- // for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848
178
- //
179
- // Note that as of 8.3, iOS doesn't support `datetime` or `week`.
180
-
181
- @media screen and (-webkit-min-device-pixel-ratio: 0) {
182
- input[type="date"],
183
- input[type="time"],
184
- input[type="datetime-local"],
185
- input[type="month"] {
186
- &.form-control {
187
- line-height: @input-height-base;
188
- }
189
-
190
- &.input-sm,
191
- .input-group-sm & {
192
- line-height: @input-height-small;
193
- }
194
-
195
- &.input-lg,
196
- .input-group-lg & {
197
- line-height: @input-height-large;
198
- }
199
- }
200
- }
201
-
202
- // Form groups
203
- //
204
- // Designed to help with the organization and spacing of vertical forms. For
205
- // horizontal forms, use the predefined grid classes.
206
-
207
- .form-group {
208
- margin-bottom: @form-group-margin-bottom;
209
- }
210
-
211
- // Checkboxes and radios
212
- //
213
- // Indent the labels to position radios/checkboxes as hanging controls.
214
-
215
- .radio,
216
- .checkbox {
217
- position: relative;
218
- display: block;
219
- margin-top: 10px;
220
- margin-bottom: 10px;
221
-
222
- label {
223
- min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text
224
- padding-left: 20px;
225
- margin-bottom: 0;
226
- font-weight: normal;
227
- cursor: pointer;
228
- }
229
- }
230
-
231
- .radio input[type="radio"],
232
- .radio-inline input[type="radio"],
233
- .checkbox input[type="checkbox"],
234
- .checkbox-inline input[type="checkbox"] {
235
- position: absolute;
236
- margin-left: -20px;
237
- margin-top: 4px \9;
238
- }
239
-
240
- .radio + .radio,
241
- .checkbox + .checkbox {
242
- margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing
243
- }
244
-
245
- // Radios and checkboxes on same line
246
- .radio-inline,
247
- .checkbox-inline {
248
- position: relative;
249
- display: inline-block;
250
- padding-left: 20px;
251
- margin-bottom: 0;
252
- vertical-align: middle;
253
- font-weight: normal;
254
- cursor: pointer;
255
- }
256
-
257
- .radio-inline + .radio-inline,
258
- .checkbox-inline + .checkbox-inline {
259
- margin-top: 0;
260
- margin-left: 10px; // space out consecutive inline controls
261
- }
262
-
263
- // Apply same disabled cursor tweak as for inputs
264
- // Some special care is needed because <label>s don't inherit their parent's `cursor`.
265
- //
266
- // Note: Neither radios nor checkboxes can be readonly.
267
- input[type="radio"],
268
- input[type="checkbox"] {
269
- &[disabled],
270
- &.disabled,
271
- fieldset[disabled] & {
272
- cursor: @cursor-disabled;
273
- }
274
- }
275
-
276
- // These classes are used directly on <label>s
277
- .radio-inline,
278
- .checkbox-inline {
279
- &.disabled,
280
- fieldset[disabled] & {
281
- cursor: @cursor-disabled;
282
- }
283
- }
284
-
285
- // These classes are used on elements with <label> descendants
286
- .radio,
287
- .checkbox {
288
- &.disabled,
289
- fieldset[disabled] & {
290
- label {
291
- cursor: @cursor-disabled;
292
- }
293
- }
294
- }
295
-
296
- // Static form control text
297
- //
298
- // Apply class to a `p` element to make any string of text align with labels in
299
- // a horizontal form layout.
300
-
301
- .form-control-static {
302
- // Size it appropriately next to real form controls
303
- padding-top: (@padding-base-vertical + 1);
304
- padding-bottom: (@padding-base-vertical + 1);
305
- // Remove default margin from `p`
306
- margin-bottom: 0;
307
- min-height: (@line-height-computed + @font-size-base);
308
-
309
- &.input-lg,
310
- &.input-sm {
311
- padding-left: 0;
312
- padding-right: 0;
313
- }
314
- }
315
-
316
- // Form control sizing
317
- //
318
- // Build on `.form-control` with modifier classes to decrease or increase the
319
- // height and font-size of form controls.
320
- //
321
- // The `.form-group-* form-control` variations are sadly duplicated to avoid the
322
- // issue documented in https://github.com/twbs/bootstrap/issues/15074.
323
-
324
- .input-sm {
325
- .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);
326
- }
327
-
328
- .form-group-sm {
329
- .form-control {
330
- height: @input-height-small;
331
- padding: @padding-small-vertical @padding-small-horizontal;
332
- font-size: @font-size-small;
333
- line-height: @line-height-small;
334
- border-radius: @input-border-radius-small;
335
- }
336
- select.form-control {
337
- height: @input-height-small;
338
- line-height: @input-height-small;
339
- }
340
- textarea.form-control,
341
- select[multiple].form-control {
342
- height: auto;
343
- }
344
- .form-control-static {
345
- height: @input-height-small;
346
- min-height: (@line-height-computed + @font-size-small);
347
- padding: (@padding-small-vertical + 1) @padding-small-horizontal;
348
- font-size: @font-size-small;
349
- line-height: @line-height-small;
350
- }
351
- }
352
-
353
- .input-lg {
354
- .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);
355
- }
356
-
357
- .form-group-lg {
358
- .form-control {
359
- height: @input-height-large;
360
- padding: @padding-large-vertical @padding-large-horizontal;
361
- font-size: @font-size-large;
362
- line-height: @line-height-large;
363
- border-radius: @input-border-radius-large;
364
- }
365
- select.form-control {
366
- height: @input-height-large;
367
- line-height: @input-height-large;
368
- }
369
- textarea.form-control,
370
- select[multiple].form-control {
371
- height: auto;
372
- }
373
- .form-control-static {
374
- height: @input-height-large;
375
- min-height: (@line-height-computed + @font-size-large);
376
- padding: (@padding-large-vertical + 1) @padding-large-horizontal;
377
- font-size: @font-size-large;
378
- line-height: @line-height-large;
379
- }
380
- }
381
-
382
- // Form control feedback states
383
- //
384
- // Apply contextual and semantic states to individual form controls.
385
-
386
- .has-feedback {
387
- // Enable absolute positioning
388
- position: relative;
389
-
390
- // Ensure icons don't overlap text
391
- .form-control {
392
- padding-right: (@input-height-base * 1.25);
393
- }
394
- }
395
-
396
- // Feedback icon (requires .glyphicon classes)
397
- .form-control-feedback {
398
- position: absolute;
399
- top: 0;
400
- right: 0;
401
- z-index: 2; // Ensure icon is above input groups
402
- display: block;
403
- width: @input-height-base;
404
- height: @input-height-base;
405
- line-height: @input-height-base;
406
- text-align: center;
407
- pointer-events: none;
408
- }
409
-
410
- .input-lg + .form-control-feedback,
411
- .input-group-lg + .form-control-feedback,
412
- .form-group-lg .form-control + .form-control-feedback {
413
- width: @input-height-large;
414
- height: @input-height-large;
415
- line-height: @input-height-large;
416
- }
417
-
418
- .input-sm + .form-control-feedback,
419
- .input-group-sm + .form-control-feedback,
420
- .form-group-sm .form-control + .form-control-feedback {
421
- width: @input-height-small;
422
- height: @input-height-small;
423
- line-height: @input-height-small;
424
- }
425
-
426
- // Feedback states
427
- .has-success {
428
- .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);
429
- }
430
-
431
- .has-warning {
432
- .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);
433
- }
434
-
435
- .has-error {
436
- .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);
437
- }
438
-
439
- // Reposition feedback icon if input has visible label above
440
- .has-feedback label {
441
-
442
- & ~ .form-control-feedback {
443
- top: (@line-height-computed + 5); // Height of the `label` and its margin
444
- }
445
- &.sr-only ~ .form-control-feedback {
446
- top: 0;
447
- }
448
- }
449
-
450
- // Help text
451
- //
452
- // Apply to any element you wish to create light text for placement immediately
453
- // below a form control. Use for general help, formatting, or instructional text.
454
-
455
- .help-block {
456
- display: block; // account for any element using help-block
457
- margin-top: 5px;
458
- margin-bottom: 10px;
459
- color: lighten(@text-color, 25%); // lighten the text some for contrast
460
- }
461
-
462
- // Inline forms
463
- //
464
- // Make forms appear inline(-block) by adding the `.form-inline` class. Inline
465
- // forms begin stacked on extra small (mobile) devices and then go inline when
466
- // viewports reach <768px.
467
- //
468
- // Requires wrapping inputs and labels with `.form-group` for proper display of
469
- // default HTML form controls and our custom form controls (e.g., input groups).
470
- //
471
- // Heads up! This is mixin-ed into `.navbar-form` in navbars.less.
472
-
473
- .form-inline {
474
-
475
- // Kick in the inline
476
- @media (min-width: @screen-sm-min) {
477
- // Inline-block all the things for "inline"
478
- .form-group {
479
- display: inline-block;
480
- margin-bottom: 0;
481
- vertical-align: middle;
482
- }
483
-
484
- // In navbar-form, allow folks to *not* use `.form-group`
485
- .form-control {
486
- display: inline-block;
487
- // width: auto; // Prevent labels from stacking above inputs in `.form-group`
488
- vertical-align: middle;
489
- }
490
-
491
- // Make static controls behave like regular ones
492
- .form-control-static {
493
- display: inline-block;
494
- }
495
-
496
- .input-group {
497
- display: inline-table;
498
- vertical-align: middle;
499
-
500
- .input-group-addon,
501
- .input-group-btn,
502
- .form-control {
503
- width: auto;
504
- }
505
- }
506
-
507
- // Input groups need that 100% width though
508
- .input-group > .form-control {
509
- width: 100%;
510
- }
511
-
512
- .control-label {
513
- margin-bottom: 0;
514
- vertical-align: middle;
515
- }
516
-
517
- // Remove default margin on radios/checkboxes that were used for stacking, and
518
- // then undo the floating of radios and checkboxes to match.
519
- .radio,
520
- .checkbox {
521
- display: inline-block;
522
- margin-top: 0;
523
- margin-bottom: 0;
524
- vertical-align: middle;
525
-
526
- label {
527
- padding-left: 0;
528
- }
529
- }
530
-
531
- .radio input[type="radio"],
532
- .checkbox input[type="checkbox"] {
533
- position: relative;
534
- margin-left: 0;
535
- }
536
-
537
- // Re-override the feedback icon.
538
- .has-feedback .form-control-feedback {
539
- top: 0;
540
- }
541
- }
542
- }
543
-
544
- // Horizontal forms
545
- //
546
- // Horizontal forms are built on grid classes and allow you to create forms with
547
- // labels on the left and inputs on the right.
548
-
549
- .form-horizontal {
550
-
551
- // Consistent vertical alignment of radios and checkboxes
552
- //
553
- // Labels also get some reset styles, but that is scoped to a media query below.
554
- .radio,
555
- .checkbox,
556
- .radio-inline,
557
- .checkbox-inline {
558
- margin-top: 0;
559
- margin-bottom: 0;
560
- padding-top: (@padding-base-vertical + 1); // Default padding plus a border
561
- }
562
- // Account for padding we're adding to ensure the alignment and of help text
563
- // and other content below items
564
- .radio,
565
- .checkbox {
566
- min-height: (@line-height-computed + (@padding-base-vertical + 1));
567
- }
568
-
569
- // Make form groups behave like rows
570
- .form-group {
571
- .make-row();
572
- }
573
-
574
- // Reset spacing and right align labels, but scope to media queries so that
575
- // labels on narrow viewports stack the same as a default form example.
576
- @media (min-width: @screen-sm-min) {
577
- .control-label {
578
- text-align: right;
579
- margin-bottom: 0;
580
- padding-top: (@padding-base-vertical + 1); // Default padding plus a border
581
- }
582
- }
583
-
584
- // Validation states
585
- //
586
- // Reposition the icon because it's now within a grid column and columns have
587
- // `position: relative;` on them. Also accounts for the grid gutter padding.
588
- .has-feedback .form-control-feedback {
589
- right: floor((@grid-gutter-width / 2));
590
- }
591
-
592
- // Form group sizes
593
- //
594
- // Quick utility class for applying `.input-lg` and `.input-sm` styles to the
595
- // inputs and labels within a `.form-group`.
596
- .form-group-lg {
597
- @media (min-width: @screen-sm-min) {
598
- .control-label {
599
- padding-top: (@padding-large-vertical + 1);
600
- font-size: @font-size-large;
601
- }
602
- }
603
- }
604
- .form-group-sm {
605
- @media (min-width: @screen-sm-min) {
606
- .control-label {
607
- padding-top: (@padding-small-vertical + 1);
608
- font-size: @font-size-small;
609
- }
610
- }
611
- }
612
- }
1
+ //
2
+ // Forms
3
+ // --------------------------------------------------
4
+
5
+ // Normalize non-controls
6
+ //
7
+ // Restyle and baseline non-control form elements.
8
+
9
+ fieldset {
10
+ padding: 0;
11
+ margin: 0;
12
+ border: 0;
13
+ // Chrome and Firefox set a `min-width: min-content;` on fieldsets,
14
+ // so we reset that to ensure it behaves more like a standard block element.
15
+ // See https://github.com/twbs/bootstrap/issues/12359.
16
+ min-width: 0;
17
+ }
18
+
19
+ legend {
20
+ display: block;
21
+ width: 100%;
22
+ padding: 0;
23
+ margin-bottom: @line-height-computed;
24
+ font-size: (@font-size-base * 1.5);
25
+ line-height: inherit;
26
+ color: @legend-color;
27
+ border: 0;
28
+ border-bottom: 1px solid @legend-border-color;
29
+ }
30
+
31
+ label {
32
+ display: inline-block;
33
+ max-width: 100%; // Force IE8 to wrap long content (see https://github.com/twbs/bootstrap/issues/13141)
34
+ margin-bottom: 5px;
35
+ font-weight: bold;
36
+ }
37
+
38
+ // Normalize form controls
39
+ //
40
+ // While most of our form styles require extra classes, some basic normalization
41
+ // is required to ensure optimum display with or without those classes to better
42
+ // address browser inconsistencies.
43
+
44
+ // Override content-box in Normalize (* isn't specific enough)
45
+ input[type="search"] {
46
+ .box-sizing(border-box);
47
+ }
48
+
49
+ // Position radios and checkboxes better
50
+ input[type="radio"],
51
+ input[type="checkbox"] {
52
+ margin: 4px 0 0;
53
+ margin-top: 1px \9; // IE8-9
54
+ line-height: normal;
55
+ }
56
+
57
+ input[type="file"] {
58
+ display: block;
59
+ }
60
+
61
+ // Make range inputs behave like textual form controls
62
+ input[type="range"] {
63
+ display: block;
64
+ width: 100%;
65
+ }
66
+
67
+ // Make multiple select elements height not fixed
68
+ select[multiple],
69
+ select[size] {
70
+ height: auto;
71
+ }
72
+
73
+ // Focus for file, radio, and checkbox
74
+ input[type="file"]:focus,
75
+ input[type="radio"]:focus,
76
+ input[type="checkbox"]:focus {
77
+ .tab-focus();
78
+ }
79
+
80
+ // Adjust output element
81
+ output {
82
+ display: block;
83
+ padding-top: (@padding-base-vertical + 1);
84
+ font-size: @font-size-base;
85
+ line-height: @line-height-base;
86
+ color: @input-color;
87
+ }
88
+
89
+ // Common form controls
90
+ //
91
+ // Shared size and type resets for form controls. Apply `.form-control` to any
92
+ // of the following form controls:
93
+ //
94
+ // select
95
+ // textarea
96
+ // input[type="text"]
97
+ // input[type="password"]
98
+ // input[type="datetime"]
99
+ // input[type="datetime-local"]
100
+ // input[type="date"]
101
+ // input[type="month"]
102
+ // input[type="time"]
103
+ // input[type="week"]
104
+ // input[type="number"]
105
+ // input[type="email"]
106
+ // input[type="url"]
107
+ // input[type="search"]
108
+ // input[type="tel"]
109
+ // input[type="color"]
110
+
111
+ .form-control {
112
+ display: block;
113
+ width: 100%;
114
+ height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border)
115
+ padding: @padding-base-vertical @padding-base-horizontal;
116
+ font-size: @font-size-base;
117
+ line-height: @line-height-base;
118
+ color: @input-color;
119
+ background-color: @input-bg;
120
+ background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214
121
+ border: 1px solid @input-border;
122
+ border-radius: @input-border-radius; // Note: This has no effect on <select>s in some browsers, due to the limited stylability of <select>s in CSS.
123
+ .box-shadow(inset 0 1px 1px rgba(0, 0, 0, .075));
124
+ .transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s");
125
+
126
+ // Customize the `:focus` state to imitate native WebKit styles.
127
+ .form-control-focus();
128
+
129
+ // Placeholder
130
+ .placeholder();
131
+
132
+ // Unstyle the caret on `<select>`s in IE10+.
133
+ &::-ms-expand {
134
+ border: 0;
135
+ background-color: transparent;
136
+ }
137
+
138
+ // Disabled and read-only inputs
139
+ //
140
+ // HTML5 says that controls under a fieldset > legend:first-child won't be
141
+ // disabled if the fieldset is disabled. Due to implementation difficulty, we
142
+ // don't honor that edge case; we style them as disabled anyway.
143
+ &[disabled],
144
+ &[readonly],
145
+ fieldset[disabled] & {
146
+ background-color: @input-bg-disabled;
147
+ opacity: 1; // iOS fix for unreadable disabled content; see https://github.com/twbs/bootstrap/issues/11655
148
+ }
149
+
150
+ &[disabled],
151
+ fieldset[disabled] & {
152
+ cursor: @cursor-disabled;
153
+ }
154
+
155
+ // Reset height for `textarea`s
156
+ textarea& {
157
+ height: auto;
158
+ }
159
+ }
160
+
161
+ // Search inputs in iOS
162
+ //
163
+ // This overrides the extra rounded corners on search inputs in iOS so that our
164
+ // `.form-control` class can properly style them. Note that this cannot simply
165
+ // be added to `.form-control` as it's not specific enough. For details, see
166
+ // https://github.com/twbs/bootstrap/issues/11586.
167
+
168
+ input[type="search"] {
169
+ -webkit-appearance: none;
170
+ }
171
+
172
+ // Special styles for iOS temporal inputs
173
+ //
174
+ // In Mobile Safari, setting `display: block` on temporal inputs causes the
175
+ // text within the input to become vertically misaligned. As a workaround, we
176
+ // set a pixel line-height that matches the given height of the input, but only
177
+ // for Safari. See https://bugs.webkit.org/show_bug.cgi?id=139848
178
+ //
179
+ // Note that as of 8.3, iOS doesn't support `datetime` or `week`.
180
+
181
+ @media screen and (-webkit-min-device-pixel-ratio: 0) {
182
+ input[type="date"],
183
+ input[type="time"],
184
+ input[type="datetime-local"],
185
+ input[type="month"] {
186
+ &.form-control {
187
+ line-height: @input-height-base;
188
+ }
189
+
190
+ &.input-sm,
191
+ .input-group-sm & {
192
+ line-height: @input-height-small;
193
+ }
194
+
195
+ &.input-lg,
196
+ .input-group-lg & {
197
+ line-height: @input-height-large;
198
+ }
199
+ }
200
+ }
201
+
202
+ // Form groups
203
+ //
204
+ // Designed to help with the organization and spacing of vertical forms. For
205
+ // horizontal forms, use the predefined grid classes.
206
+
207
+ .form-group {
208
+ margin-bottom: @form-group-margin-bottom;
209
+ }
210
+
211
+ // Checkboxes and radios
212
+ //
213
+ // Indent the labels to position radios/checkboxes as hanging controls.
214
+
215
+ .radio,
216
+ .checkbox {
217
+ position: relative;
218
+ display: block;
219
+ margin-top: 10px;
220
+ margin-bottom: 10px;
221
+
222
+ label {
223
+ min-height: @line-height-computed; // Ensure the input doesn't jump when there is no text
224
+ padding-left: 20px;
225
+ margin-bottom: 0;
226
+ font-weight: normal;
227
+ cursor: pointer;
228
+ }
229
+ }
230
+
231
+ .radio input[type="radio"],
232
+ .radio-inline input[type="radio"],
233
+ .checkbox input[type="checkbox"],
234
+ .checkbox-inline input[type="checkbox"] {
235
+ position: absolute;
236
+ margin-left: -20px;
237
+ margin-top: 4px \9;
238
+ }
239
+
240
+ .radio + .radio,
241
+ .checkbox + .checkbox {
242
+ margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing
243
+ }
244
+
245
+ // Radios and checkboxes on same line
246
+ .radio-inline,
247
+ .checkbox-inline {
248
+ position: relative;
249
+ display: inline-block;
250
+ padding-left: 20px;
251
+ margin-bottom: 0;
252
+ vertical-align: middle;
253
+ font-weight: normal;
254
+ cursor: pointer;
255
+ }
256
+
257
+ .radio-inline + .radio-inline,
258
+ .checkbox-inline + .checkbox-inline {
259
+ margin-top: 0;
260
+ margin-left: 10px; // space out consecutive inline controls
261
+ }
262
+
263
+ // Apply same disabled cursor tweak as for inputs
264
+ // Some special care is needed because <label>s don't inherit their parent's `cursor`.
265
+ //
266
+ // Note: Neither radios nor checkboxes can be readonly.
267
+ input[type="radio"],
268
+ input[type="checkbox"] {
269
+ &[disabled],
270
+ &.disabled,
271
+ fieldset[disabled] & {
272
+ cursor: @cursor-disabled;
273
+ }
274
+ }
275
+
276
+ // These classes are used directly on <label>s
277
+ .radio-inline,
278
+ .checkbox-inline {
279
+ &.disabled,
280
+ fieldset[disabled] & {
281
+ cursor: @cursor-disabled;
282
+ }
283
+ }
284
+
285
+ // These classes are used on elements with <label> descendants
286
+ .radio,
287
+ .checkbox {
288
+ &.disabled,
289
+ fieldset[disabled] & {
290
+ label {
291
+ cursor: @cursor-disabled;
292
+ }
293
+ }
294
+ }
295
+
296
+ // Static form control text
297
+ //
298
+ // Apply class to a `p` element to make any string of text align with labels in
299
+ // a horizontal form layout.
300
+
301
+ .form-control-static {
302
+ // Size it appropriately next to real form controls
303
+ padding-top: (@padding-base-vertical + 1);
304
+ padding-bottom: (@padding-base-vertical + 1);
305
+ // Remove default margin from `p`
306
+ margin-bottom: 0;
307
+ min-height: (@line-height-computed + @font-size-base);
308
+
309
+ &.input-lg,
310
+ &.input-sm {
311
+ padding-left: 0;
312
+ padding-right: 0;
313
+ }
314
+ }
315
+
316
+ // Form control sizing
317
+ //
318
+ // Build on `.form-control` with modifier classes to decrease or increase the
319
+ // height and font-size of form controls.
320
+ //
321
+ // The `.form-group-* form-control` variations are sadly duplicated to avoid the
322
+ // issue documented in https://github.com/twbs/bootstrap/issues/15074.
323
+
324
+ .input-sm {
325
+ .input-size(@input-height-small; @padding-small-vertical; @padding-small-horizontal; @font-size-small; @line-height-small; @input-border-radius-small);
326
+ }
327
+
328
+ .form-group-sm {
329
+ .form-control {
330
+ height: @input-height-small;
331
+ padding: @padding-small-vertical @padding-small-horizontal;
332
+ font-size: @font-size-small;
333
+ line-height: @line-height-small;
334
+ border-radius: @input-border-radius-small;
335
+ }
336
+ select.form-control {
337
+ height: @input-height-small;
338
+ line-height: @input-height-small;
339
+ }
340
+ textarea.form-control,
341
+ select[multiple].form-control {
342
+ height: auto;
343
+ }
344
+ .form-control-static {
345
+ height: @input-height-small;
346
+ min-height: (@line-height-computed + @font-size-small);
347
+ padding: (@padding-small-vertical + 1) @padding-small-horizontal;
348
+ font-size: @font-size-small;
349
+ line-height: @line-height-small;
350
+ }
351
+ }
352
+
353
+ .input-lg {
354
+ .input-size(@input-height-large; @padding-large-vertical; @padding-large-horizontal; @font-size-large; @line-height-large; @input-border-radius-large);
355
+ }
356
+
357
+ .form-group-lg {
358
+ .form-control {
359
+ height: @input-height-large;
360
+ padding: @padding-large-vertical @padding-large-horizontal;
361
+ font-size: @font-size-large;
362
+ line-height: @line-height-large;
363
+ border-radius: @input-border-radius-large;
364
+ }
365
+ select.form-control {
366
+ height: @input-height-large;
367
+ line-height: @input-height-large;
368
+ }
369
+ textarea.form-control,
370
+ select[multiple].form-control {
371
+ height: auto;
372
+ }
373
+ .form-control-static {
374
+ height: @input-height-large;
375
+ min-height: (@line-height-computed + @font-size-large);
376
+ padding: (@padding-large-vertical + 1) @padding-large-horizontal;
377
+ font-size: @font-size-large;
378
+ line-height: @line-height-large;
379
+ }
380
+ }
381
+
382
+ // Form control feedback states
383
+ //
384
+ // Apply contextual and semantic states to individual form controls.
385
+
386
+ .has-feedback {
387
+ // Enable absolute positioning
388
+ position: relative;
389
+
390
+ // Ensure icons don't overlap text
391
+ .form-control {
392
+ padding-right: (@input-height-base * 1.25);
393
+ }
394
+ }
395
+
396
+ // Feedback icon (requires .glyphicon classes)
397
+ .form-control-feedback {
398
+ position: absolute;
399
+ top: 0;
400
+ right: 0;
401
+ z-index: 2; // Ensure icon is above input groups
402
+ display: block;
403
+ width: @input-height-base;
404
+ height: @input-height-base;
405
+ line-height: @input-height-base;
406
+ text-align: center;
407
+ pointer-events: none;
408
+ }
409
+
410
+ .input-lg + .form-control-feedback,
411
+ .input-group-lg + .form-control-feedback,
412
+ .form-group-lg .form-control + .form-control-feedback {
413
+ width: @input-height-large;
414
+ height: @input-height-large;
415
+ line-height: @input-height-large;
416
+ }
417
+
418
+ .input-sm + .form-control-feedback,
419
+ .input-group-sm + .form-control-feedback,
420
+ .form-group-sm .form-control + .form-control-feedback {
421
+ width: @input-height-small;
422
+ height: @input-height-small;
423
+ line-height: @input-height-small;
424
+ }
425
+
426
+ // Feedback states
427
+ .has-success {
428
+ .form-control-validation(@state-success-text; @state-success-text; @state-success-bg);
429
+ }
430
+
431
+ .has-warning {
432
+ .form-control-validation(@state-warning-text; @state-warning-text; @state-warning-bg);
433
+ }
434
+
435
+ .has-error {
436
+ .form-control-validation(@state-danger-text; @state-danger-text; @state-danger-bg);
437
+ }
438
+
439
+ // Reposition feedback icon if input has visible label above
440
+ .has-feedback label {
441
+
442
+ & ~ .form-control-feedback {
443
+ top: (@line-height-computed + 5); // Height of the `label` and its margin
444
+ }
445
+ &.sr-only ~ .form-control-feedback {
446
+ top: 0;
447
+ }
448
+ }
449
+
450
+ // Help text
451
+ //
452
+ // Apply to any element you wish to create light text for placement immediately
453
+ // below a form control. Use for general help, formatting, or instructional text.
454
+
455
+ .help-block {
456
+ display: block; // account for any element using help-block
457
+ margin-top: 5px;
458
+ margin-bottom: 10px;
459
+ color: lighten(@text-color, 25%); // lighten the text some for contrast
460
+ }
461
+
462
+ // Inline forms
463
+ //
464
+ // Make forms appear inline(-block) by adding the `.form-inline` class. Inline
465
+ // forms begin stacked on extra small (mobile) devices and then go inline when
466
+ // viewports reach <768px.
467
+ //
468
+ // Requires wrapping inputs and labels with `.form-group` for proper display of
469
+ // default HTML form controls and our custom form controls (e.g., input groups).
470
+ //
471
+ // Heads up! This is mixin-ed into `.navbar-form` in navbars.less.
472
+
473
+ .form-inline {
474
+
475
+ // Kick in the inline
476
+ @media (min-width: @screen-sm-min) {
477
+ // Inline-block all the things for "inline"
478
+ .form-group {
479
+ display: inline-block;
480
+ margin-bottom: 0;
481
+ vertical-align: middle;
482
+ }
483
+
484
+ // In navbar-form, allow folks to *not* use `.form-group`
485
+ .form-control {
486
+ display: inline-block;
487
+ // width: auto; // Prevent labels from stacking above inputs in `.form-group`
488
+ vertical-align: middle;
489
+ }
490
+
491
+ // Make static controls behave like regular ones
492
+ .form-control-static {
493
+ display: inline-block;
494
+ }
495
+
496
+ .input-group {
497
+ display: inline-table;
498
+ vertical-align: middle;
499
+
500
+ .input-group-addon,
501
+ .input-group-btn,
502
+ .form-control {
503
+ width: auto;
504
+ }
505
+ }
506
+
507
+ // Input groups need that 100% width though
508
+ .input-group > .form-control {
509
+ width: 100%;
510
+ }
511
+
512
+ .control-label {
513
+ margin-bottom: 0;
514
+ vertical-align: middle;
515
+ }
516
+
517
+ // Remove default margin on radios/checkboxes that were used for stacking, and
518
+ // then undo the floating of radios and checkboxes to match.
519
+ .radio,
520
+ .checkbox {
521
+ display: inline-block;
522
+ margin-top: 0;
523
+ margin-bottom: 0;
524
+ vertical-align: middle;
525
+
526
+ label {
527
+ padding-left: 0;
528
+ }
529
+ }
530
+
531
+ .radio input[type="radio"],
532
+ .checkbox input[type="checkbox"] {
533
+ position: relative;
534
+ margin-left: 0;
535
+ }
536
+
537
+ // Re-override the feedback icon.
538
+ .has-feedback .form-control-feedback {
539
+ top: 0;
540
+ }
541
+ }
542
+ }
543
+
544
+ // Horizontal forms
545
+ //
546
+ // Horizontal forms are built on grid classes and allow you to create forms with
547
+ // labels on the left and inputs on the right.
548
+
549
+ .form-horizontal {
550
+
551
+ // Consistent vertical alignment of radios and checkboxes
552
+ //
553
+ // Labels also get some reset styles, but that is scoped to a media query below.
554
+ .radio,
555
+ .checkbox,
556
+ .radio-inline,
557
+ .checkbox-inline {
558
+ margin-top: 0;
559
+ margin-bottom: 0;
560
+ padding-top: (@padding-base-vertical + 1); // Default padding plus a border
561
+ }
562
+ // Account for padding we're adding to ensure the alignment and of help text
563
+ // and other content below items
564
+ .radio,
565
+ .checkbox {
566
+ min-height: (@line-height-computed + (@padding-base-vertical + 1));
567
+ }
568
+
569
+ // Make form groups behave like rows
570
+ .form-group {
571
+ .make-row();
572
+ }
573
+
574
+ // Reset spacing and right align labels, but scope to media queries so that
575
+ // labels on narrow viewports stack the same as a default form example.
576
+ @media (min-width: @screen-sm-min) {
577
+ .control-label {
578
+ text-align: right;
579
+ margin-bottom: 0;
580
+ padding-top: (@padding-base-vertical + 1); // Default padding plus a border
581
+ }
582
+ }
583
+
584
+ // Validation states
585
+ //
586
+ // Reposition the icon because it's now within a grid column and columns have
587
+ // `position: relative;` on them. Also accounts for the grid gutter padding.
588
+ .has-feedback .form-control-feedback {
589
+ right: floor((@grid-gutter-width / 2));
590
+ }
591
+
592
+ // Form group sizes
593
+ //
594
+ // Quick utility class for applying `.input-lg` and `.input-sm` styles to the
595
+ // inputs and labels within a `.form-group`.
596
+ .form-group-lg {
597
+ @media (min-width: @screen-sm-min) {
598
+ .control-label {
599
+ padding-top: (@padding-large-vertical + 1);
600
+ font-size: @font-size-large;
601
+ }
602
+ }
603
+ }
604
+ .form-group-sm {
605
+ @media (min-width: @screen-sm-min) {
606
+ .control-label {
607
+ padding-top: (@padding-small-vertical + 1);
608
+ font-size: @font-size-small;
609
+ }
610
+ }
611
+ }
612
+ }