fomantic-ui 2.9.0-beta.2 → 2.9.0-beta.202

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 (243) hide show
  1. package/.all-contributorsrc +197 -3
  2. package/CONTRIBUTING.md +1 -1
  3. package/CONTRIBUTORS.md +74 -37
  4. package/README.md +1 -1
  5. package/dist/components/accordion.css +162 -26
  6. package/dist/components/accordion.js +1 -1
  7. package/dist/components/accordion.min.css +2 -2
  8. package/dist/components/accordion.min.js +2 -2
  9. package/dist/components/ad.css +1 -1
  10. package/dist/components/ad.min.css +1 -1
  11. package/dist/components/api.js +30 -26
  12. package/dist/components/api.min.js +3 -3
  13. package/dist/components/breadcrumb.css +1 -1
  14. package/dist/components/breadcrumb.min.css +1 -1
  15. package/dist/components/button.css +81 -81
  16. package/dist/components/button.min.css +2 -2
  17. package/dist/components/calendar.css +1 -1
  18. package/dist/components/calendar.js +110 -11
  19. package/dist/components/calendar.min.css +1 -1
  20. package/dist/components/calendar.min.js +3 -3
  21. package/dist/components/card.css +26 -19
  22. package/dist/components/card.min.css +2 -2
  23. package/dist/components/checkbox.css +2 -1
  24. package/dist/components/checkbox.js +17 -11
  25. package/dist/components/checkbox.min.css +2 -2
  26. package/dist/components/checkbox.min.js +3 -3
  27. package/dist/components/comment.css +11 -11
  28. package/dist/components/comment.min.css +1 -1
  29. package/dist/components/container.css +77 -1
  30. package/dist/components/container.min.css +2 -2
  31. package/dist/components/dimmer.css +28 -14
  32. package/dist/components/dimmer.js +7 -1
  33. package/dist/components/dimmer.min.css +2 -2
  34. package/dist/components/dimmer.min.js +3 -3
  35. package/dist/components/divider.css +1 -1
  36. package/dist/components/divider.min.css +1 -1
  37. package/dist/components/dropdown.css +30 -7
  38. package/dist/components/dropdown.js +59 -34
  39. package/dist/components/dropdown.min.css +2 -2
  40. package/dist/components/dropdown.min.js +3 -3
  41. package/dist/components/embed.css +1 -1
  42. package/dist/components/embed.js +1 -1
  43. package/dist/components/embed.min.css +1 -1
  44. package/dist/components/embed.min.js +2 -2
  45. package/dist/components/emoji.css +2 -2
  46. package/dist/components/feed.css +28 -28
  47. package/dist/components/feed.min.css +2 -2
  48. package/dist/components/flag.css +731 -625
  49. package/dist/components/flag.min.css +2 -2
  50. package/dist/components/form.css +106 -55
  51. package/dist/components/form.js +25 -23
  52. package/dist/components/form.min.css +2 -2
  53. package/dist/components/form.min.js +3 -3
  54. package/dist/components/grid.css +11 -8
  55. package/dist/components/grid.min.css +2 -2
  56. package/dist/components/header.css +1 -1
  57. package/dist/components/header.min.css +1 -1
  58. package/dist/components/icon.css +6 -1
  59. package/dist/components/icon.min.css +2 -2
  60. package/dist/components/image.css +1 -1
  61. package/dist/components/image.min.css +1 -1
  62. package/dist/components/input.css +734 -17
  63. package/dist/components/input.min.css +2 -2
  64. package/dist/components/item.css +13 -13
  65. package/dist/components/item.min.css +1 -1
  66. package/dist/components/label.css +1 -1
  67. package/dist/components/label.min.css +1 -1
  68. package/dist/components/list.css +1 -1
  69. package/dist/components/list.min.css +1 -1
  70. package/dist/components/loader.css +1 -1
  71. package/dist/components/loader.min.css +1 -1
  72. package/dist/components/menu.css +31 -7
  73. package/dist/components/menu.min.css +1 -1
  74. package/dist/components/message.css +41 -41
  75. package/dist/components/message.min.css +2 -2
  76. package/dist/components/modal.css +13 -1
  77. package/dist/components/modal.js +121 -46
  78. package/dist/components/modal.min.css +2 -2
  79. package/dist/components/modal.min.js +3 -3
  80. package/dist/components/nag.css +1 -1
  81. package/dist/components/nag.js +1 -1
  82. package/dist/components/nag.min.css +1 -1
  83. package/dist/components/nag.min.js +2 -2
  84. package/dist/components/placeholder.css +1 -1
  85. package/dist/components/placeholder.min.css +1 -1
  86. package/dist/components/popup.css +5 -3
  87. package/dist/components/popup.js +1 -1
  88. package/dist/components/popup.min.css +2 -2
  89. package/dist/components/popup.min.js +2 -2
  90. package/dist/components/progress.css +1 -1
  91. package/dist/components/progress.js +6 -3
  92. package/dist/components/progress.min.css +1 -1
  93. package/dist/components/progress.min.js +3 -3
  94. package/dist/components/rail.css +1 -1
  95. package/dist/components/rail.min.css +1 -1
  96. package/dist/components/rating.css +7 -46
  97. package/dist/components/rating.js +1 -1
  98. package/dist/components/rating.min.css +2 -2
  99. package/dist/components/rating.min.js +2 -2
  100. package/dist/components/reset.css +1 -1
  101. package/dist/components/reset.min.css +1 -1
  102. package/dist/components/reveal.css +1 -1
  103. package/dist/components/reveal.min.css +1 -1
  104. package/dist/components/search.css +1 -1
  105. package/dist/components/search.js +1 -1
  106. package/dist/components/search.min.css +1 -1
  107. package/dist/components/search.min.js +2 -2
  108. package/dist/components/segment.css +90 -6
  109. package/dist/components/segment.min.css +2 -2
  110. package/dist/components/shape.css +1 -1
  111. package/dist/components/shape.js +1 -1
  112. package/dist/components/shape.min.css +1 -1
  113. package/dist/components/shape.min.js +2 -2
  114. package/dist/components/sidebar.css +4 -2
  115. package/dist/components/sidebar.js +1 -1
  116. package/dist/components/sidebar.min.css +2 -2
  117. package/dist/components/sidebar.min.js +2 -2
  118. package/dist/components/site.css +61 -39
  119. package/dist/components/site.js +1 -1
  120. package/dist/components/site.min.css +2 -2
  121. package/dist/components/site.min.js +2 -2
  122. package/dist/components/slider.js +1 -1
  123. package/dist/components/slider.min.js +2 -2
  124. package/dist/components/state.js +1 -1
  125. package/dist/components/state.min.js +2 -2
  126. package/dist/components/statistic.css +1 -1
  127. package/dist/components/statistic.min.css +1 -1
  128. package/dist/components/step.css +4 -4
  129. package/dist/components/step.min.css +2 -2
  130. package/dist/components/sticky.css +1 -1
  131. package/dist/components/sticky.js +2 -2
  132. package/dist/components/sticky.min.css +1 -1
  133. package/dist/components/sticky.min.js +3 -3
  134. package/dist/components/tab.css +1 -1
  135. package/dist/components/tab.js +23 -5
  136. package/dist/components/tab.min.css +1 -1
  137. package/dist/components/tab.min.js +3 -3
  138. package/dist/components/table.css +1168 -26
  139. package/dist/components/table.min.css +2 -2
  140. package/dist/components/text.css +1 -1
  141. package/dist/components/text.min.css +1 -1
  142. package/dist/components/toast.css +45 -1
  143. package/dist/components/toast.js +56 -28
  144. package/dist/components/toast.min.css +2 -2
  145. package/dist/components/toast.min.js +3 -3
  146. package/dist/components/transition.css +1 -1
  147. package/dist/components/transition.js +2 -2
  148. package/dist/components/transition.min.css +1 -1
  149. package/dist/components/transition.min.js +3 -3
  150. package/dist/components/visibility.js +2 -2
  151. package/dist/components/visibility.min.js +2 -2
  152. package/dist/semantic.css +4300 -1394
  153. package/dist/semantic.js +473 -207
  154. package/dist/semantic.min.css +3 -3
  155. package/dist/semantic.min.js +3 -3
  156. package/examples/assets/library/iframe-content.js +8 -8
  157. package/examples/assets/library/iframe.js +3 -3
  158. package/package.json +2 -2
  159. package/src/definitions/behaviors/api.js +29 -25
  160. package/src/definitions/behaviors/form.js +24 -22
  161. package/src/definitions/behaviors/visibility.js +1 -1
  162. package/src/definitions/collections/form.less +193 -140
  163. package/src/definitions/collections/grid.less +716 -680
  164. package/src/definitions/collections/menu.less +174 -127
  165. package/src/definitions/collections/message.less +48 -46
  166. package/src/definitions/collections/table.less +849 -262
  167. package/src/definitions/elements/button.less +360 -347
  168. package/src/definitions/elements/container.less +126 -8
  169. package/src/definitions/elements/emoji.less +15 -9
  170. package/src/definitions/elements/flag.less +7 -17
  171. package/src/definitions/elements/header.less +42 -35
  172. package/src/definitions/elements/icon.less +38 -31
  173. package/src/definitions/elements/input.less +256 -21
  174. package/src/definitions/elements/label.less +92 -91
  175. package/src/definitions/elements/list.less +55 -45
  176. package/src/definitions/elements/loader.less +30 -29
  177. package/src/definitions/elements/segment.less +146 -27
  178. package/src/definitions/elements/step.less +52 -48
  179. package/src/definitions/elements/text.less +17 -15
  180. package/src/definitions/globals/site.less +23 -2
  181. package/src/definitions/modules/accordion.less +175 -24
  182. package/src/definitions/modules/calendar.js +109 -10
  183. package/src/definitions/modules/checkbox.js +16 -10
  184. package/src/definitions/modules/checkbox.less +34 -178
  185. package/src/definitions/modules/dimmer.js +6 -0
  186. package/src/definitions/modules/dimmer.less +21 -8
  187. package/src/definitions/modules/dropdown.js +58 -33
  188. package/src/definitions/modules/dropdown.less +101 -69
  189. package/src/definitions/modules/modal.js +120 -45
  190. package/src/definitions/modules/modal.less +12 -0
  191. package/src/definitions/modules/nag.less +20 -19
  192. package/src/definitions/modules/popup.less +5 -1
  193. package/src/definitions/modules/progress.js +5 -2
  194. package/src/definitions/modules/progress.less +19 -18
  195. package/src/definitions/modules/rating.less +49 -42
  196. package/src/definitions/modules/search.less +32 -16
  197. package/src/definitions/modules/sidebar.less +33 -19
  198. package/src/definitions/modules/slider.less +39 -38
  199. package/src/definitions/modules/sticky.js +1 -1
  200. package/src/definitions/modules/tab.js +22 -4
  201. package/src/definitions/modules/toast.js +55 -27
  202. package/src/definitions/modules/toast.less +53 -16
  203. package/src/definitions/modules/transition.js +1 -1
  204. package/src/definitions/views/card.less +402 -361
  205. package/src/definitions/views/comment.less +92 -81
  206. package/src/definitions/views/feed.less +164 -144
  207. package/src/definitions/views/item.less +249 -196
  208. package/src/definitions/views/statistic.less +90 -88
  209. package/src/themes/bookish/elements/header.overrides +1 -1
  210. package/src/themes/chubby/elements/button.overrides +1 -1
  211. package/src/themes/chubby/elements/header.overrides +1 -1
  212. package/src/themes/default/collections/menu.variables +6 -0
  213. package/src/themes/default/collections/table.variables +52 -0
  214. package/src/themes/default/elements/button.variables +2 -1
  215. package/src/themes/default/elements/container.variables +8 -0
  216. package/src/themes/default/elements/flag.overrides +1635 -986
  217. package/src/themes/default/elements/flag.variables +7 -5
  218. package/src/themes/default/elements/icon.overrides +35 -28
  219. package/src/themes/default/elements/icon.variables +1 -0
  220. package/src/themes/default/elements/input.variables +15 -0
  221. package/src/themes/default/elements/segment.variables +8 -0
  222. package/src/themes/default/elements/step.overrides +1 -1
  223. package/src/themes/default/globals/site.variables +6 -0
  224. package/src/themes/default/globals/variation.variables +135 -6
  225. package/src/themes/default/modules/accordion.variables +49 -2
  226. package/src/themes/default/modules/checkbox.variables +5 -5
  227. package/src/themes/default/modules/dimmer.variables +1 -1
  228. package/src/themes/default/modules/dropdown.variables +1 -1
  229. package/src/themes/default/modules/modal.variables +13 -0
  230. package/src/themes/default/modules/toast.variables +3 -0
  231. package/src/themes/famfamfam/elements/flag.overrides +1026 -0
  232. package/src/themes/famfamfam/elements/flag.variables +13 -0
  233. package/src/themes/instagram/views/card.overrides +1 -1
  234. package/src/themes/material/collections/menu.overrides +1 -1
  235. package/src/themes/material/elements/button.overrides +1 -1
  236. package/src/themes/material/elements/header.overrides +1 -1
  237. package/src/themes/material/modules/dropdown.overrides +1 -1
  238. package/src/themes/material/modules/modal.overrides +1 -1
  239. package/src/themes/rtl/globals/site.overrides +1 -1
  240. package/tasks/admin/components/init.js +2 -2
  241. package/tasks/admin/distributions/init.js +2 -2
  242. package/tasks/build/css.js +6 -1
  243. package/test/helpers/sinon.js +1 -1
@@ -55,126 +55,6 @@
55
55
  }
56
56
 
57
57
 
58
- & when (@variationCheckboxBox) {
59
- /*--------------
60
- Box
61
- ---------------*/
62
-
63
- /* .box selector is deprecated and will be removed in v3 */
64
- .ui.checkbox .box {
65
- &:extend(.ui.checkbox label all);
66
- }
67
- .ui.checkbox + .box {
68
- &:extend(.ui.checkbox + label all);
69
- }
70
- .ui.checkbox input:focus ~ .box {
71
- &:extend(.ui.checkbox input:focus ~ label all);
72
- }
73
- .ui.checkbox input:checked ~ .box {
74
- &:extend(.ui.checkbox input:checked ~ label all);
75
- }
76
- & when (@variationCheckboxIndeterminate) {
77
- .ui.checkbox input:not([type=radio]):indeterminate ~ .box {
78
- &:extend(.ui.checkbox input:not([type=radio]):indeterminate ~ label all);
79
- }
80
- .ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box {
81
- &:extend(.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label all);
82
- }
83
- }
84
- .ui.checkbox input:checked:focus ~ .box {
85
- &:extend(.ui.checkbox input:checked:focus ~ label all);
86
- }
87
- & when (@variationCheckboxDisabled) {
88
- .ui.disabled.checkbox .box {
89
- &:extend(.ui.disabled.checkbox label all);
90
- }
91
-
92
- .ui.checkbox input[disabled] ~ .box {
93
- &:extend(.ui.checkbox input[disabled] ~ label all);
94
- }
95
- }
96
- & when (@variationCheckboxRadio) {
97
- .ui.radio.checkbox .box {
98
- &:extend(.ui.radio.checkbox label all);
99
- }
100
- .ui.radio.checkbox input:focus ~ .box {
101
- &:extend(.ui.radio.checkbox input:focus ~ label all);
102
- }
103
- .ui.radio.checkbox input:indeterminate ~ .box {
104
- &:extend(.ui.radio.checkbox input:indeterminate ~ label all);
105
- }
106
- .ui.radio.checkbox input:checked ~ .box {
107
- &:extend(.ui.radio.checkbox input:checked ~ label all);
108
- }
109
- .ui.radio.checkbox input:focus:checked ~ .box {
110
- &:extend(.ui.radio.checkbox input:focus:checked ~ label all);
111
- }
112
- }
113
- & when (@variationCheckboxSlider) {
114
- .ui.slider.checkbox .box {
115
- &:extend(.ui.slider.checkbox label all);
116
- }
117
- .ui.slider.checkbox input:focus ~ .box {
118
- &:extend(.ui.slider.checkbox input:focus ~ label all);
119
- }
120
- .ui.slider.checkbox input:checked ~ .box {
121
- &:extend(.ui.slider.checkbox input:checked ~ label all);
122
- }
123
- .ui.slider.checkbox input:focus:checked ~ .box {
124
- &:extend(.ui.slider.checkbox input:focus:checked ~ label all);
125
- }
126
- }
127
- & when (@variationCheckboxToggle) {
128
- .ui.toggle.checkbox .box {
129
- &:extend(.ui.toggle.checkbox label all);
130
- }
131
- .ui.toggle.checkbox input ~ .box {
132
- &:extend(.ui.toggle.checkbox input ~ label all);
133
- }
134
- .ui.toggle.checkbox input:focus ~ .box {
135
- &:extend(.ui.toggle.checkbox input:focus ~ label all);
136
- }
137
- .ui.toggle.checkbox input:checked ~ .box {
138
- &:extend(.ui.toggle.checkbox input:checked ~ label all);
139
- }
140
- .ui.toggle.checkbox input:focus:checked ~ .box {
141
- &:extend(.ui.toggle.checkbox input:focus:checked ~ label all);
142
- }
143
- }
144
- & when (@variationCheckboxFitted) {
145
- .ui.fitted.checkbox .box {
146
- &:extend(.ui.fitted.checkbox label all);
147
- }
148
- }
149
- & when (@variationCheckboxInverted) {
150
- .ui.inverted.checkbox .box {
151
- &:extend(.ui.inverted.checkbox label all);
152
- }
153
- & when (@variationCheckboxSlider) {
154
- .ui.inverted.slider.checkbox .box {
155
- &:extend(.ui.inverted.slider.checkbox label all);
156
- }
157
- .ui.inverted.slider.checkbox input:checked ~ .box {
158
- &:extend(.ui.inverted.slider.checkbox input:checked ~ label all);
159
- }
160
- .ui.inverted.slider.checkbox input:focus:checked ~ .box {
161
- &:extend(.ui.inverted.slider.checkbox input:focus:checked ~ label all);
162
- }
163
- }
164
- & when (@variationCheckboxToggle) {
165
- .ui.inverted.toggle.checkbox .box {
166
- &:extend(.ui.inverted.toggle.checkbox label all);
167
- }
168
- .ui.inverted.toggle.checkbox input:checked ~ .box {
169
- &:extend(.ui.inverted.toggle.checkbox input:checked ~ label all);
170
- }
171
- .ui.inverted.toggle.checkbox input:focus:checked ~ .box {
172
- &:extend(.ui.inverted.toggle.checkbox input:focus:checked ~ label all);
173
- }
174
- }
175
- }
176
- }
177
-
178
58
  .ui.checkbox label {
179
59
  cursor: auto;
180
60
  position: relative;
@@ -386,6 +266,7 @@
386
266
  }
387
267
 
388
268
  /* Selectable Label */
269
+ .ui.checkbox input + label[for],
389
270
  .ui.checkbox input.hidden + label {
390
271
  cursor: pointer;
391
272
  user-select: none;
@@ -796,69 +677,44 @@
796
677
  /*--------------------
797
678
  Size
798
679
  ---------------------*/
680
+ & when not (@variationCheckboxSizes = false) {
681
+ each(@variationCheckboxSizes, {
682
+ @raw: @{value}Raw;
683
+ @size: @{value}CheckboxSize;
684
+ @circleScale: @{value}CheckboxCircleScale;
685
+ @circleLeft: @{value}CheckboxCircleLeft;
799
686
 
800
- each(@variationCheckboxSizes, {
801
- @raw: @{value}Raw;
802
- @size: @{value}CheckboxSize;
803
- @circleScale: @{value}CheckboxCircleScale;
804
- @circleLeft: @{value}CheckboxCircleLeft;
805
-
806
- .ui.@{value}.checkbox {
807
- font-size: @@size;
808
- }
809
-
810
- & when (@@raw > 1) {
811
- .ui.@{value}.form .checkbox,
812
687
  .ui.@{value}.checkbox {
813
- &:not(.slider):not(.toggle):not(.radio) {
814
- &
815
- label:after,
816
- label:before {
817
- transform: scale(@@raw);
818
- transform-origin:left;
819
- }
820
- }
821
- &.radio when (@variationCheckboxRadio) {
822
- &
823
- label:before {
824
- transform: scale(@@raw);
825
- transform-origin:left;
688
+ font-size: @@size;
689
+ }
690
+
691
+ & when (@@raw > 1) {
692
+ .ui.@{value}.form .checkbox,
693
+ .ui.@{value}.checkbox {
694
+ &:not(.slider):not(.toggle):not(.radio) {
695
+ &
696
+ label:after,
697
+ label:before {
698
+ transform: scale(@@raw);
699
+ transform-origin: left;
700
+ }
826
701
  }
827
- &
828
- label:after {
829
- transform:scale(@@circleScale);
830
- transform-origin:left;
831
- left: @@circleLeft;
702
+ &.radio when (@variationCheckboxRadio) {
703
+ &
704
+ label:before {
705
+ transform: scale(@@raw);
706
+ transform-origin: left;
707
+ }
708
+ &
709
+ label:after {
710
+ transform: scale(@@circleScale);
711
+ transform-origin: left;
712
+ left: @@circleLeft;
713
+ }
832
714
  }
833
715
  }
834
716
  }
835
- }
836
- & when (@@raw > 1) and (@variationCheckboxBox) {
837
- .ui.@{value}.form .checkbox,
838
- .ui.@{value}.checkbox {
839
- &:not(.slider):not(.toggle):not(.radio) {
840
- &
841
- .box:after,
842
- .box:before {
843
- transform: scale(@@raw);
844
- transform-origin:left;
845
- }
846
- }
847
- &.radio when (@variationCheckboxRadio) {
848
- &
849
- .box:before {
850
- transform: scale(@@raw);
851
- transform-origin:left;
852
- }
853
- &
854
- .box:after {
855
- transform:scale(@@circleScale);
856
- transform-origin:left;
857
- left: @@circleLeft;
858
- }
859
- }
860
- }
861
- }
862
- })
717
+ })
718
+ }
863
719
 
864
720
  .loadUIOverrides();
@@ -264,6 +264,7 @@ $.fn.dimmer = function(parameters) {
264
264
  },
265
265
  onComplete : function() {
266
266
  module.set.active();
267
+ settings.onVisible.call($dimmer);
267
268
  callback();
268
269
  }
269
270
  })
@@ -285,6 +286,7 @@ $.fn.dimmer = function(parameters) {
285
286
  .fadeTo(module.get.duration(), settings.opacity, function() {
286
287
  $dimmer.removeAttr('style');
287
288
  module.set.active();
289
+ settings.onVisible.call($dimmer);
288
290
  callback();
289
291
  })
290
292
  ;
@@ -310,6 +312,7 @@ $.fn.dimmer = function(parameters) {
310
312
  module.remove.dimmed();
311
313
  module.remove.variation();
312
314
  module.remove.active();
315
+ settings.onHidden.call($dimmer);
313
316
  callback();
314
317
  }
315
318
  })
@@ -323,6 +326,7 @@ $.fn.dimmer = function(parameters) {
323
326
  module.remove.dimmed();
324
327
  module.remove.active();
325
328
  $dimmer.removeAttr('style');
329
+ settings.onHidden.call($dimmer);
326
330
  callback();
327
331
  })
328
332
  ;
@@ -704,6 +708,8 @@ $.fn.dimmer.settings = {
704
708
  onChange : function(){},
705
709
  onShow : function(){},
706
710
  onHide : function(){},
711
+ onVisible : function(){},
712
+ onHidden : function(){},
707
713
 
708
714
  error : {
709
715
  method : 'The method you called is not defined.'
@@ -68,7 +68,7 @@
68
68
  }
69
69
 
70
70
  /* Scrollbars */
71
- .addScrollbars() when (@useCustomScrollbars) {
71
+ & when (@useCustomScrollbars) {
72
72
  .ui.dimmer:not(.inverted)::-webkit-scrollbar-track {
73
73
  background: @trackInvertedBackground;
74
74
  }
@@ -81,8 +81,17 @@
81
81
  .ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:hover {
82
82
  background: @thumbInvertedHoverBackground;
83
83
  }
84
+ .ui.dimmer:not(.inverted) {
85
+ /* IE11 */
86
+ scrollbar-face-color: @thumbInvertedBackgroundHex;
87
+ scrollbar-shadow-color: @thumbInvertedBackgroundHex;
88
+ scrollbar-track-color: @trackInvertedBackgroundHex;
89
+ scrollbar-arrow-color: @trackInvertedBackgroundHex;
90
+
91
+ /* firefox : first color thumb, second track */
92
+ scrollbar-color: @thumbInvertedBackground @trackInvertedBackground;
93
+ }
84
94
  }
85
- .addScrollbars();
86
95
 
87
96
  /*******************************
88
97
  States
@@ -171,17 +180,21 @@ body.dimmable > .dimmer {
171
180
  Blurring
172
181
  ---------------*/
173
182
 
174
- .blurring.dimmable > :not(.dimmer) {
175
- filter: @blurredStartFilter;
176
- transition: @blurredTransition;
177
- }
178
- .blurring.dimmed.dimmable > :not(.dimmer):not(.popup) {
179
- filter: @blurredEndFilter;
183
+ @supports (not (-webkit-backdrop-filter: none)) and (not (backdrop-filter: none)) {
184
+ .blurring.dimmable > :not(.dimmer) {
185
+ filter: @blurredStartFilter;
186
+ transition: @blurredTransition;
187
+ }
188
+ .blurring.dimmed.dimmable > :not(.dimmer):not(.popup) {
189
+ filter: @blurredEndFilter;
190
+ }
180
191
  }
181
192
 
182
193
  /* Dimmer Color */
183
194
  .blurring.dimmable > .dimmer {
184
195
  background: @blurredBackgroundColor;
196
+ -webkit-backdrop-filter: @blurredEndFilter;
197
+ backdrop-filter: @blurredEndFilter;
185
198
  }
186
199
  .blurring.dimmable > .inverted.dimmer {
187
200
  background: @blurredInvertedBackgroundColor;
@@ -200,6 +200,7 @@ $.fn.dropdown = function(parameters) {
200
200
  select: function() {
201
201
  if(module.has.input() && selectObserver) {
202
202
  selectObserver.observe($module[0], {
203
+ attributes: true,
203
204
  childList : true,
204
205
  subtree : true
205
206
  });
@@ -421,6 +422,9 @@ $.fn.dropdown = function(parameters) {
421
422
  module.debug('Disabling dropdown');
422
423
  $module.addClass(className.disabled);
423
424
  }
425
+ if($input.is('[required]')) {
426
+ settings.forceSelection = true;
427
+ }
424
428
  $input
425
429
  .removeAttr('required')
426
430
  .removeAttr('class')
@@ -560,7 +564,7 @@ $.fn.dropdown = function(parameters) {
560
564
  if(settings.onHide.call(element) !== false) {
561
565
  module.animate.hide(function() {
562
566
  module.remove.visible();
563
- // hidding search focus
567
+ // hiding search focus
564
568
  if ( module.is.focusedOnSearch() && preventBlur !== true ) {
565
569
  $search.blur();
566
570
  }
@@ -625,6 +629,11 @@ $.fn.dropdown = function(parameters) {
625
629
  $module
626
630
  .on('change' + eventNamespace, selector.input, module.event.change)
627
631
  ;
632
+ if(module.is.multiple() && module.is.searchSelection()) {
633
+ $module
634
+ .on('paste' + eventNamespace, selector.search, module.event.paste)
635
+ ;
636
+ }
628
637
  },
629
638
  mouseEvents: function() {
630
639
  module.verbose('Binding mouse events');
@@ -844,7 +853,7 @@ $.fn.dropdown = function(parameters) {
844
853
  var value = module.is.multiple() ? module.get.values() : module.get.value();
845
854
  if (value !== '') {
846
855
  module.verbose('Value(s) present after click icon, select value(s) in items');
847
- module.set.selected(value, null, null, true);
856
+ module.set.selected(value, null, true, true);
848
857
  }
849
858
  }
850
859
  iconClicked = false;
@@ -1073,6 +1082,15 @@ $.fn.dropdown = function(parameters) {
1073
1082
  },
1074
1083
 
1075
1084
  event: {
1085
+ paste: function(event) {
1086
+ var pasteValue = (event.originalEvent.clipboardData || window.clipboardData).getData('text'),
1087
+ tokens = pasteValue.split(settings.delimiter)
1088
+ ;
1089
+ tokens.forEach(function(value){
1090
+ module.set.selected(module.escape.htmlEntities(value.trim()), null, true, true);
1091
+ });
1092
+ event.preventDefault();
1093
+ },
1076
1094
  change: function() {
1077
1095
  if(!internalChange) {
1078
1096
  module.debug('Input changed, updating selection');
@@ -1285,8 +1303,8 @@ $.fn.dropdown = function(parameters) {
1285
1303
  },
1286
1304
  select: {
1287
1305
  mutation: function(mutations) {
1288
- module.debug('<select> modified, recreating menu');
1289
1306
  if(module.is.selectMutation(mutations)) {
1307
+ module.debug('<select> modified, recreating menu');
1290
1308
  module.disconnect.selectObserver();
1291
1309
  module.refresh();
1292
1310
  module.setup.select();
@@ -1531,7 +1549,7 @@ $.fn.dropdown = function(parameters) {
1531
1549
  hasSubMenu = ($subMenu.length> 0),
1532
1550
  hasSelectedItem = ($selectedItem.length > 0),
1533
1551
  selectedIsSelectable = ($selectedItem.not(selector.unselectable).length > 0),
1534
- delimiterPressed = (pressedKey == keys.delimiter && settings.allowAdditions && module.is.multiple()),
1552
+ delimiterPressed = (pressedKey == keys.delimiter && module.is.multiple()),
1535
1553
  isAdditionWithoutMenu = (settings.allowAdditions && settings.hideAdditions && (pressedKey == keys.enter || delimiterPressed) && selectedIsSelectable),
1536
1554
  $nextItem,
1537
1555
  isSubMenuItem,
@@ -1629,7 +1647,7 @@ $.fn.dropdown = function(parameters) {
1629
1647
  .addClass(className.selected)
1630
1648
  ;
1631
1649
  module.set.scrollPosition($nextItem);
1632
- if(settings.selectOnKeydown && module.is.single()) {
1650
+ if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
1633
1651
  module.set.selectedItem($nextItem);
1634
1652
  }
1635
1653
  }
@@ -1656,7 +1674,7 @@ $.fn.dropdown = function(parameters) {
1656
1674
  .addClass(className.selected)
1657
1675
  ;
1658
1676
  module.set.scrollPosition($nextItem);
1659
- if(settings.selectOnKeydown && module.is.single()) {
1677
+ if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
1660
1678
  module.set.selectedItem($nextItem);
1661
1679
  }
1662
1680
  }
@@ -1787,7 +1805,7 @@ $.fn.dropdown = function(parameters) {
1787
1805
  ;
1788
1806
  if( module.can.activate( $(element) ) ) {
1789
1807
  module.set.selected(value, $(element));
1790
- if(!module.is.multiple()) {
1808
+ if(!module.is.multiple() && !(!settings.collapseOnActionable && $(element).hasClass(className.actionable))) {
1791
1809
  module.hideAndClear();
1792
1810
  }
1793
1811
  }
@@ -1800,7 +1818,7 @@ $.fn.dropdown = function(parameters) {
1800
1818
  ;
1801
1819
  if( module.can.activate( $(element) ) ) {
1802
1820
  module.set.value(value, text, $(element));
1803
- if(!module.is.multiple()) {
1821
+ if(!module.is.multiple() && !(!settings.collapseOnActionable && $(element).hasClass(className.actionable))) {
1804
1822
  module.hideAndClear();
1805
1823
  }
1806
1824
  }
@@ -2320,7 +2338,7 @@ $.fn.dropdown = function(parameters) {
2320
2338
  module.error(error.noStorage);
2321
2339
  return;
2322
2340
  }
2323
- name = sessionStorage.getItem(value);
2341
+ name = sessionStorage.getItem(value + elementNamespace);
2324
2342
  return (name !== undefined)
2325
2343
  ? name
2326
2344
  : false
@@ -2364,7 +2382,7 @@ $.fn.dropdown = function(parameters) {
2364
2382
  return;
2365
2383
  }
2366
2384
  module.verbose('Saving remote data to session storage', value, name);
2367
- sessionStorage.setItem(value, name);
2385
+ sessionStorage.setItem(value + elementNamespace, name);
2368
2386
  }
2369
2387
  },
2370
2388
 
@@ -2424,7 +2442,7 @@ $.fn.dropdown = function(parameters) {
2424
2442
  $nextSelectedItem
2425
2443
  .addClass(className.selected)
2426
2444
  ;
2427
- if(settings.selectOnKeydown && module.is.single()) {
2445
+ if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
2428
2446
  module.set.selectedItem($nextSelectedItem);
2429
2447
  }
2430
2448
  $menu
@@ -2627,7 +2645,7 @@ $.fn.dropdown = function(parameters) {
2627
2645
  module.set.scrollPosition($nextValue);
2628
2646
  $selectedItem.removeClass(className.selected);
2629
2647
  $nextValue.addClass(className.selected);
2630
- if(settings.selectOnKeydown && module.is.single()) {
2648
+ if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
2631
2649
  module.set.selectedItem($nextValue);
2632
2650
  }
2633
2651
  }
@@ -2765,17 +2783,24 @@ $.fn.dropdown = function(parameters) {
2765
2783
 
2766
2784
  isFiltered = $selected.hasClass(className.filtered),
2767
2785
  isActive = $selected.hasClass(className.active),
2786
+ isActionable = $selected.hasClass(className.actionable),
2768
2787
  isUserValue = $selected.hasClass(className.addition),
2769
2788
  shouldAnimate = (isMultiple && $selectedItem.length == 1)
2770
2789
  ;
2771
- if(isMultiple) {
2790
+ if(isActionable){
2791
+ if((!isMultiple || (!isActive || isUserValue)) && settings.apiSettings && settings.saveRemoteData) {
2792
+ module.save.remoteData(selectedText, selectedValue);
2793
+ }
2794
+ settings.onActionable.call(element, selectedValue, selectedText, $selected);
2795
+ }
2796
+ else if(isMultiple) {
2772
2797
  if(!isActive || isUserValue) {
2773
2798
  if(settings.apiSettings && settings.saveRemoteData) {
2774
2799
  module.save.remoteData(selectedText, selectedValue);
2775
2800
  }
2776
2801
  if(settings.useLabels) {
2777
- module.add.label(selectedValue, selectedText, shouldAnimate);
2778
2802
  module.add.value(selectedValue, selectedText, $selected);
2803
+ module.add.label(selectedValue, selectedText, shouldAnimate);
2779
2804
  module.set.activeItem($selected);
2780
2805
  module.filterActive();
2781
2806
  module.select.nextAvailable($selectedItem);
@@ -2795,7 +2820,7 @@ $.fn.dropdown = function(parameters) {
2795
2820
  if(settings.apiSettings && settings.saveRemoteData) {
2796
2821
  module.save.remoteData(selectedText, selectedValue);
2797
2822
  }
2798
- if (!keepSearchTerm) {
2823
+ if (!keepSearchTerm && !$selected.hasClass(className.actionable)) {
2799
2824
  module.set.text(selectedText);
2800
2825
  }
2801
2826
  module.set.value(selectedValue, selectedText, $selected, preventChangeTrigger);
@@ -2985,7 +3010,7 @@ $.fn.dropdown = function(parameters) {
2985
3010
  }
2986
3011
  // extend current array
2987
3012
  if(Array.isArray(currentValue)) {
2988
- newValue = currentValue.concat([addedValue]);
3013
+ newValue = $selectedItem.hasClass(className.actionable) ? currentValue : currentValue.concat([addedValue]);
2989
3014
  newValue = module.get.uniqueArray(newValue);
2990
3015
  }
2991
3016
  else {
@@ -3069,18 +3094,10 @@ $.fn.dropdown = function(parameters) {
3069
3094
  return;
3070
3095
  }
3071
3096
  // temporarily disconnect observer
3072
- if(selectObserver) {
3073
- selectObserver.disconnect();
3074
- module.verbose('Temporarily disconnecting mutation observer');
3075
- }
3097
+ module.disconnect.selectObserver();
3076
3098
  $option.remove();
3077
3099
  module.verbose('Removing user addition as an <option>', escapedValue);
3078
- if(selectObserver) {
3079
- selectObserver.observe($input[0], {
3080
- childList : true,
3081
- subtree : true
3082
- });
3083
- }
3100
+ module.observe.select();
3084
3101
  },
3085
3102
  message: function() {
3086
3103
  $menu.children(selector.message).remove();
@@ -3445,7 +3462,7 @@ $.fn.dropdown = function(parameters) {
3445
3462
  selectChanged = false
3446
3463
  ;
3447
3464
  $.each(mutations, function(index, mutation) {
3448
- if($(mutation.target).is('select') || $(mutation.addedNodes).is('select')) {
3465
+ if($(mutation.target).is('select, option, optgroup') || $(mutation.addedNodes).is('select')) {
3449
3466
  selectChanged = true;
3450
3467
  return false;
3451
3468
  }
@@ -3990,7 +4007,7 @@ $.fn.dropdown.settings = {
3990
4007
  keepOnScreen : true, // Whether dropdown should check whether it is on screen before showing
3991
4008
 
3992
4009
  match : 'both', // what to match against with search selection (both, text, or label)
3993
- fullTextSearch : false, // search anywhere in value (set to 'exact' to require exact matches)
4010
+ fullTextSearch : 'exact', // search anywhere in value (set to 'exact' to require exact matches)
3994
4011
  ignoreDiacritics : false, // match results also if they contain diacritics of the same base character (for example searching for "a" will also match "á" or "â" or "à", etc...)
3995
4012
  hideDividers : false, // Whether to hide any divider elements (specified in selector.divider) that are sibling to any items when searched (set to true will hide all dividers, set to 'empty' will hide them when they are not followed by a visible item)
3996
4013
 
@@ -3998,7 +4015,7 @@ $.fn.dropdown.settings = {
3998
4015
  preserveHTML : true, // preserve html when selecting value
3999
4016
  sortSelect : false, // sort selection on init
4000
4017
 
4001
- forceSelection : true, // force a choice on blur with search selection
4018
+ forceSelection : false, // force a choice on blur with search selection
4002
4019
 
4003
4020
  allowAdditions : false, // whether multiple select should allow user added values
4004
4021
  ignoreCase : false, // whether to consider case sensitivity when creating labels
@@ -4009,7 +4026,7 @@ $.fn.dropdown.settings = {
4009
4026
  useLabels : true, // whether multiple select should filter currently active selections from choices
4010
4027
  delimiter : ',', // when multiselect uses normal <input> the values will be delimited with this character
4011
4028
 
4012
- showOnFocus : true, // show menu on focus
4029
+ showOnFocus : false, // show menu on focus
4013
4030
  allowReselection : false, // whether current value should trigger callbacks when reselected
4014
4031
  allowTab : true, // add tabindex to element
4015
4032
  allowCategorySelection : false, // allow elements with sub-menus to be selected
@@ -4024,6 +4041,8 @@ $.fn.dropdown.settings = {
4024
4041
 
4025
4042
  headerDivider : true, // whether option headers should have an additional divider line underneath when converted from <select> <optgroup>
4026
4043
 
4044
+ collapseOnActionable : true, // whether the dropdown should collapse upon selection of an actionable item
4045
+
4027
4046
  // label settings on multi-select
4028
4047
  label: {
4029
4048
  transition : 'scale',
@@ -4043,6 +4062,7 @@ $.fn.dropdown.settings = {
4043
4062
  onChange : function(value, text, $selected){},
4044
4063
  onAdd : function(value, text, $selected){},
4045
4064
  onRemove : function(value, text, $selected){},
4065
+ onActionable : function(value, text, $selected){},
4046
4066
  onSearch : function(searchTerm){},
4047
4067
 
4048
4068
  onLabelSelect : function($selectedLabels){},
@@ -4105,7 +4125,8 @@ $.fn.dropdown.settings = {
4105
4125
  icon : 'icon', // optional icon name
4106
4126
  iconClass : 'iconClass', // optional individual class for icon (for example to use flag instead)
4107
4127
  class : 'class', // optional individual class for item/header
4108
- divider : 'divider' // optional divider append for group headers
4128
+ divider : 'divider', // optional divider append for group headers
4129
+ actionable : 'actionable' // optional actionable item
4109
4130
  },
4110
4131
 
4111
4132
  keys : {
@@ -4177,7 +4198,8 @@ $.fn.dropdown.settings = {
4177
4198
  header : 'header',
4178
4199
  divider : 'divider',
4179
4200
  groupIcon : '',
4180
- unfilterable : 'unfilterable'
4201
+ unfilterable : 'unfilterable',
4202
+ actionable : 'actionable'
4181
4203
  }
4182
4204
 
4183
4205
  };
@@ -4252,6 +4274,9 @@ $.fn.dropdown.settings.templates = {
4252
4274
  maybeText = (option[fields.text])
4253
4275
  ? ' data-text="' + deQuote(option[fields.text],true) + '"'
4254
4276
  : '',
4277
+ maybeActionable = (option[fields.actionable])
4278
+ ? className.actionable+' '
4279
+ : '',
4255
4280
  maybeDisabled = (option[fields.disabled])
4256
4281
  ? className.disabled+' '
4257
4282
  : '',
@@ -4260,7 +4285,7 @@ $.fn.dropdown.settings.templates = {
4260
4285
  : '',
4261
4286
  hasDescription = (escape(option[fields.description] || '', preserveHTML) != '')
4262
4287
  ;
4263
- html += '<div class="'+ maybeDisabled + maybeDescriptionVertical + (option[fields.class] ? deQuote(option[fields.class]) : className.item)+'" data-value="' + deQuote(option[fields.value],true) + '"' + maybeText + '>';
4288
+ html += '<div class="'+ maybeActionable + maybeDisabled + maybeDescriptionVertical + (option[fields.class] ? deQuote(option[fields.class]) : className.item)+'" data-value="' + deQuote(option[fields.value],true) + '"' + maybeText + '>';
4264
4289
  if (isMenu) {
4265
4290
  html += '<i class="'+ (itemType.indexOf('left') !== -1 ? 'left' : '') + ' dropdown icon"></i>';
4266
4291
  }