@ulu/frontend 0.1.0-beta.10 → 0.1.0-beta.101

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 (325) hide show
  1. package/CHANGELOG.md +647 -0
  2. package/README.dev.md +3 -3
  3. package/README.md +14 -4
  4. package/dist/ulu-frontend.min.css +1 -1
  5. package/dist/ulu-frontend.min.js +36 -29
  6. package/docs-dev/.nojekyll +1 -0
  7. package/docs-dev/assets/main.js +8290 -635
  8. package/docs-dev/assets/placeholder/icon-calendar.svg +1 -0
  9. package/docs-dev/assets/placeholder/icon-check.svg +1 -0
  10. package/docs-dev/assets/style.css +789 -338
  11. package/docs-dev/changelog/index.html +7203 -0
  12. package/docs-dev/demos/accordion/index.html +1277 -365
  13. package/docs-dev/demos/badge/index.html +5655 -0
  14. package/docs-dev/demos/badge-stack/index.html +5636 -0
  15. package/docs-dev/demos/{list-inline.1 → badge.1}/index.html +1231 -363
  16. package/docs-dev/demos/basic-hero/index.html +111 -0
  17. package/docs-dev/demos/breakpoints-manager/index.html +5666 -0
  18. package/docs-dev/demos/button/index.html +1309 -355
  19. package/docs-dev/demos/button-group/index.html +5652 -0
  20. package/docs-dev/demos/button-verbose/index.html +5658 -0
  21. package/docs-dev/demos/callout/index.html +1300 -347
  22. package/docs-dev/demos/captioned-figure/index.html +1271 -358
  23. package/docs-dev/demos/card/index.html +1374 -822
  24. package/docs-dev/demos/card-grid/index.html +5777 -0
  25. package/docs-dev/demos/counter-list/index.html +5660 -0
  26. package/docs-dev/demos/css-icons/index.html +1292 -356
  27. package/docs-dev/demos/data-grid/index.html +1271 -358
  28. package/docs-dev/demos/data-table/index.html +1405 -359
  29. package/docs-dev/demos/details-group/index.html +5687 -0
  30. package/docs-dev/demos/file-save/index.html +1271 -358
  31. package/docs-dev/demos/flipcard/index.html +1271 -358
  32. package/docs-dev/demos/form-theme/index.html +1295 -395
  33. package/docs-dev/demos/headline-label/index.html +5622 -0
  34. package/docs-dev/demos/hero/index.html +12 -4
  35. package/docs-dev/demos/image-grid/index.html +12 -4
  36. package/docs-dev/demos/index.html +1272 -359
  37. package/docs-dev/demos/list-inline/index.html +1271 -358
  38. package/docs-dev/demos/list-lines/index.html +1271 -358
  39. package/docs-dev/demos/menu-stack/index.html +1303 -375
  40. package/docs-dev/demos/modals/index.html +1382 -346
  41. package/docs-dev/demos/nav-strip/index.html +1271 -358
  42. package/docs-dev/demos/overlay-section/index.html +1335 -352
  43. package/docs-dev/demos/panel/index.html +5682 -0
  44. package/docs-dev/demos/popovers/index.html +1562 -407
  45. package/docs-dev/demos/print/index.html +1271 -358
  46. package/docs-dev/demos/pull-quote/index.html +1271 -358
  47. package/docs-dev/demos/rail/index.html +5730 -0
  48. package/docs-dev/demos/rule/index.html +1288 -363
  49. package/docs-dev/demos/scroll-slider/index.html +72 -106
  50. package/docs-dev/demos/scrollpoints/index.html +1272 -359
  51. package/docs-dev/demos/skeleton/index.html +5678 -0
  52. package/docs-dev/demos/slider/index.html +12 -4
  53. package/docs-dev/demos/spoke-spinner/index.html +1271 -358
  54. package/docs-dev/demos/sticky-list/index.html +5643 -0
  55. package/docs-dev/demos/tabs/index.html +1301 -352
  56. package/docs-dev/demos/tag/index.html +1282 -357
  57. package/docs-dev/demos/theme-toggle/index.html +5699 -0
  58. package/docs-dev/demos/tile-grid-overlay/index.html +12 -4
  59. package/docs-dev/demos/tiles/index.html +1271 -358
  60. package/docs-dev/demos/tooltip/index.html +1271 -358
  61. package/docs-dev/demos/wysiwyg/index.html +5672 -0
  62. package/docs-dev/guide/building-stylesheet/index.html +1271 -358
  63. package/docs-dev/guide/developing-ulu-scss-module/index.html +1271 -358
  64. package/docs-dev/guide/index.html +1271 -358
  65. package/docs-dev/index.html +1271 -358
  66. package/docs-dev/javascript/events/index.html +1303 -352
  67. package/docs-dev/javascript/index.html +1271 -358
  68. package/docs-dev/javascript/settings/index.html +5825 -0
  69. package/docs-dev/javascript/ui-breakpoints/index.html +1285 -374
  70. package/docs-dev/javascript/ui-collapsible/index.html +1270 -359
  71. package/docs-dev/javascript/ui-details-group/index.html +5742 -0
  72. package/docs-dev/javascript/ui-dialog/index.html +1302 -376
  73. package/docs-dev/javascript/ui-flipcard/index.html +1331 -364
  74. package/docs-dev/javascript/ui-grid/index.html +1274 -389
  75. package/docs-dev/javascript/ui-modal-builder/index.html +1497 -446
  76. package/docs-dev/javascript/ui-overflow-scroller/index.html +1270 -359
  77. package/docs-dev/javascript/ui-overflow-scroller-pager/index.html +1270 -359
  78. package/docs-dev/javascript/ui-page/index.html +1270 -359
  79. package/docs-dev/javascript/ui-popover/index.html +1280 -373
  80. package/docs-dev/javascript/ui-print/index.html +1268 -365
  81. package/docs-dev/javascript/ui-print-details/index.html +1270 -359
  82. package/docs-dev/javascript/ui-programmatic-modal/index.html +1270 -359
  83. package/docs-dev/javascript/ui-proxy-click/index.html +1331 -335
  84. package/docs-dev/javascript/ui-resizer/index.html +1588 -412
  85. package/docs-dev/javascript/ui-scroll-slider/index.html +1310 -367
  86. package/docs-dev/javascript/ui-scrollpoint/index.html +1280 -376
  87. package/docs-dev/javascript/ui-slider/index.html +1454 -352
  88. package/docs-dev/javascript/ui-tabs/index.html +1261 -387
  89. package/docs-dev/javascript/ui-theme-toggle/index.html +5830 -0
  90. package/docs-dev/javascript/ui-tooltip/index.html +1273 -366
  91. package/docs-dev/javascript/utils-class-logger/index.html +1271 -360
  92. package/docs-dev/javascript/utils-css/index.html +5644 -0
  93. package/docs-dev/javascript/utils-dom/index.html +1269 -438
  94. package/docs-dev/javascript/utils-file-save/index.html +1270 -359
  95. package/docs-dev/javascript/utils-floating-ui/index.html +1270 -359
  96. package/docs-dev/javascript/utils-id/index.html +1270 -359
  97. package/docs-dev/javascript/utils-pause-youtube-video/index.html +1270 -359
  98. package/docs-dev/javascript/utils-system/index.html +5947 -0
  99. package/docs-dev/sass/base/color/index.html +1270 -359
  100. package/docs-dev/sass/base/elements/index.html +1271 -360
  101. package/docs-dev/sass/base/index/index.html +1271 -360
  102. package/docs-dev/sass/base/index.html +1271 -358
  103. package/docs-dev/sass/base/keyframes/index.html +1271 -360
  104. package/docs-dev/sass/base/layout/index.html +1271 -360
  105. package/docs-dev/sass/base/normalize/index.html +1270 -359
  106. package/docs-dev/sass/base/print/index.html +1271 -360
  107. package/docs-dev/sass/base/root/index.html +1274 -363
  108. package/docs-dev/sass/base/typography/index.html +1270 -359
  109. package/docs-dev/sass/components/accordion/index.html +1293 -375
  110. package/docs-dev/sass/components/adaptive-spacing/index.html +1270 -359
  111. package/docs-dev/sass/components/badge/index.html +1295 -366
  112. package/docs-dev/sass/components/badge-stack/index.html +5811 -0
  113. package/docs-dev/sass/components/basic-hero/index.html +5805 -0
  114. package/docs-dev/sass/components/button/index.html +1270 -359
  115. package/docs-dev/sass/components/button-group/index.html +5803 -0
  116. package/docs-dev/sass/components/button-verbose/index.html +1342 -356
  117. package/docs-dev/sass/components/callout/index.html +1352 -422
  118. package/docs-dev/sass/components/captioned-figure/index.html +1373 -347
  119. package/docs-dev/sass/components/card/index.html +1339 -356
  120. package/docs-dev/sass/components/card-grid/index.html +1270 -359
  121. package/docs-dev/sass/components/counter-list/index.html +5887 -0
  122. package/docs-dev/sass/components/css-icon/index.html +1271 -360
  123. package/docs-dev/sass/components/data-grid/index.html +1290 -372
  124. package/docs-dev/sass/components/data-table/index.html +1449 -348
  125. package/docs-dev/sass/components/fill-context/index.html +1270 -359
  126. package/docs-dev/sass/components/flipcard/index.html +1305 -363
  127. package/docs-dev/sass/components/flipcard-grid/index.html +1270 -359
  128. package/docs-dev/sass/components/form-theme/index.html +1449 -442
  129. package/docs-dev/sass/components/headline-label/index.html +5833 -0
  130. package/docs-dev/sass/components/hero/index.html +1316 -357
  131. package/docs-dev/sass/components/horizontal-rule/index.html +1270 -359
  132. package/docs-dev/sass/components/image-grid/index.html +1270 -359
  133. package/docs-dev/sass/components/index/index.html +1289 -369
  134. package/docs-dev/sass/components/index.html +1271 -358
  135. package/docs-dev/sass/components/links/index.html +1270 -359
  136. package/docs-dev/sass/components/list-inline/index.html +1270 -359
  137. package/docs-dev/sass/components/list-lines/index.html +1270 -359
  138. package/docs-dev/sass/components/list-ordered/index.html +1270 -359
  139. package/docs-dev/sass/components/list-unordered/index.html +1270 -359
  140. package/docs-dev/sass/components/menu-stack/index.html +1294 -369
  141. package/docs-dev/sass/components/modal/index.html +1306 -360
  142. package/docs-dev/sass/components/nav-strip/index.html +1278 -367
  143. package/docs-dev/sass/components/overlay-section/index.html +1278 -367
  144. package/docs-dev/sass/components/pager/index.html +1270 -359
  145. package/docs-dev/sass/components/panel/index.html +6033 -0
  146. package/docs-dev/sass/components/placeholder-block/index.html +1270 -359
  147. package/docs-dev/sass/components/popover/index.html +1323 -376
  148. package/docs-dev/sass/components/pull-quote/index.html +1282 -371
  149. package/docs-dev/sass/components/rail/index.html +5823 -0
  150. package/docs-dev/sass/components/ratio-box/index.html +1278 -367
  151. package/docs-dev/sass/components/rule/index.html +1271 -360
  152. package/docs-dev/sass/components/scroll-slider/index.html +1280 -381
  153. package/docs-dev/sass/components/skeleton/index.html +5861 -0
  154. package/docs-dev/sass/components/skip-link/index.html +1270 -359
  155. package/docs-dev/sass/components/slider/index.html +1310 -411
  156. package/docs-dev/sass/components/spoke-spinner/index.html +1272 -361
  157. package/docs-dev/sass/components/sticky-list/index.html +6023 -0
  158. package/docs-dev/sass/components/table-sticky/index.html +5677 -0
  159. package/docs-dev/sass/components/tabs/index.html +1291 -365
  160. package/docs-dev/sass/components/tag/index.html +1360 -355
  161. package/docs-dev/sass/components/tile-button/index.html +1270 -359
  162. package/docs-dev/sass/components/tile-grid/index.html +1270 -359
  163. package/docs-dev/sass/components/tile-grid-overlay/index.html +1270 -359
  164. package/docs-dev/sass/components/vignette/index.html +1282 -365
  165. package/docs-dev/sass/components/wysiwyg/index.html +1296 -367
  166. package/docs-dev/sass/core/breakpoint/index.html +1349 -386
  167. package/docs-dev/sass/core/button/index.html +1302 -389
  168. package/docs-dev/sass/core/color/index.html +1414 -370
  169. package/docs-dev/sass/core/cssvar/index.html +1270 -359
  170. package/docs-dev/sass/core/element/index.html +1641 -448
  171. package/docs-dev/sass/core/index.html +1270 -359
  172. package/docs-dev/sass/core/layout/index.html +1318 -388
  173. package/docs-dev/sass/core/path/index.html +1270 -359
  174. package/docs-dev/sass/core/selector/index.html +1270 -359
  175. package/docs-dev/sass/core/typography/index.html +1270 -359
  176. package/docs-dev/sass/core/units/index.html +1278 -361
  177. package/docs-dev/sass/core/utils/index.html +2580 -520
  178. package/docs-dev/sass/helpers/color/index.html +1270 -359
  179. package/docs-dev/sass/helpers/display/index.html +1271 -360
  180. package/docs-dev/sass/helpers/index/index.html +1270 -359
  181. package/docs-dev/sass/helpers/index.html +1271 -358
  182. package/docs-dev/sass/helpers/print/index.html +759 -298
  183. package/docs-dev/sass/helpers/typography/index.html +1270 -359
  184. package/docs-dev/sass/helpers/units/index.html +1270 -359
  185. package/docs-dev/sass/helpers/utilities/index.html +1272 -361
  186. package/docs-dev/sass/index.html +1271 -358
  187. package/js/events/index.js +17 -5
  188. package/js/index.js +1 -0
  189. package/js/settings.js +97 -0
  190. package/js/ui/breakpoints.js +19 -16
  191. package/js/ui/collapsible.js +8 -1
  192. package/js/ui/details-group.js +112 -0
  193. package/js/ui/dialog.js +103 -44
  194. package/js/ui/dialog.todo +2 -36
  195. package/js/ui/flipcard.js +37 -57
  196. package/js/ui/grid.js +15 -13
  197. package/js/ui/index.js +1 -0
  198. package/js/ui/modal-builder.js +127 -70
  199. package/js/ui/overflow-scroller.js +6 -4
  200. package/js/ui/page.js +2 -2
  201. package/js/ui/popover.js +38 -38
  202. package/js/ui/print.js +16 -25
  203. package/js/ui/programmatic-modal.js +9 -3
  204. package/js/ui/proxy-click.js +50 -36
  205. package/js/ui/resizer.js +408 -39
  206. package/js/ui/scroll-slider.js +24 -30
  207. package/js/ui/scrollpoint.js +29 -64
  208. package/js/ui/slider.js +108 -63
  209. package/js/ui/tabs.js +23 -36
  210. package/js/ui/theme-toggle.js +332 -94
  211. package/js/ui/tooltip.js +27 -32
  212. package/js/utils/class-logger.js +3 -3
  213. package/js/utils/css.js +13 -0
  214. package/js/utils/dom.js +23 -64
  215. package/js/utils/font-awesome.js +19 -0
  216. package/js/utils/index.js +2 -1
  217. package/js/utils/system.js +155 -0
  218. package/package.json +23 -8
  219. package/scss/README.md +9 -0
  220. package/scss/_breakpoint.scss +39 -5
  221. package/scss/_button.scss +7 -5
  222. package/scss/_color.scss +42 -10
  223. package/scss/_element.scss +124 -2
  224. package/scss/_layout.scss +7 -8
  225. package/scss/_units.scss +3 -2
  226. package/scss/_utils.scss +387 -16
  227. package/scss/base/_elements.scss +0 -1
  228. package/scss/base/_index.scss +1 -1
  229. package/scss/base/_keyframes.scss +15 -0
  230. package/scss/base/_layout.scss +1 -0
  231. package/scss/base/_print.scss +2 -0
  232. package/scss/base/_root.scss +2 -0
  233. package/scss/components/README.todos +14 -0
  234. package/scss/components/_accordion.scss +33 -19
  235. package/scss/components/_badge-stack.scss +84 -0
  236. package/scss/components/_badge.scss +30 -7
  237. package/scss/components/_basic-hero.scss +112 -0
  238. package/scss/components/_button-group.scss +90 -0
  239. package/scss/components/_button-verbose.scss +100 -18
  240. package/scss/components/_callout.scss +125 -78
  241. package/scss/components/_captioned-figure.scss +17 -0
  242. package/scss/components/_card-grid.scss +1 -1
  243. package/scss/components/_card.scss +229 -67
  244. package/scss/components/_counter-list.scss +151 -0
  245. package/scss/components/_css-icon.scss +27 -17
  246. package/scss/components/_data-grid.scss +55 -12
  247. package/scss/components/_data-table.scss +39 -3
  248. package/scss/components/_flipcard.scss +8 -3
  249. package/scss/components/_form-theme.scss +119 -108
  250. package/scss/components/_headline-label.scss +83 -0
  251. package/scss/components/_hero.scss +12 -10
  252. package/scss/components/_index.scss +54 -0
  253. package/scss/components/_menu-stack.scss +42 -25
  254. package/scss/components/_modal.scss +51 -23
  255. package/scss/components/_nav-strip.scss +2 -0
  256. package/scss/components/_overlay-section.scss +2 -5
  257. package/scss/components/_panel.scss +246 -0
  258. package/scss/components/_popover.scss +165 -64
  259. package/scss/components/_pull-quote.scss +13 -13
  260. package/scss/components/_rail.scss +127 -0
  261. package/scss/components/_ratio-box.scss +2 -5
  262. package/scss/components/_rule.scss +1 -0
  263. package/scss/components/_scroll-slider.scss +1 -5
  264. package/scss/components/_skeleton.scss +126 -0
  265. package/scss/components/_slider.scss +49 -72
  266. package/scss/components/_spoke-spinner.scss +2 -2
  267. package/scss/components/_sticky-list.scss +206 -0
  268. package/scss/components/_tabs.scss +22 -4
  269. package/scss/components/_tag.scss +49 -7
  270. package/scss/components/_vignette.scss +3 -5
  271. package/scss/components/_wysiwyg.scss +21 -13
  272. package/scss/helpers/_display.scss +15 -18
  273. package/scss/helpers/_print.scss +12 -7
  274. package/scss/helpers/_utilities.scss +41 -31
  275. package/types/events/index.d.ts +10 -1
  276. package/types/events/index.d.ts.map +1 -1
  277. package/types/index.d.ts +1 -0
  278. package/types/settings.d.ts +70 -0
  279. package/types/settings.d.ts.map +1 -0
  280. package/types/ui/breakpoints.d.ts +14 -14
  281. package/types/ui/breakpoints.d.ts.map +1 -1
  282. package/types/ui/collapsible.d.ts.map +1 -1
  283. package/types/ui/details-group.d.ts +38 -0
  284. package/types/ui/details-group.d.ts.map +1 -0
  285. package/types/ui/dialog.d.ts +20 -14
  286. package/types/ui/dialog.d.ts.map +1 -1
  287. package/types/ui/flipcard.d.ts +16 -10
  288. package/types/ui/flipcard.d.ts.map +1 -1
  289. package/types/ui/grid.d.ts +4 -6
  290. package/types/ui/grid.d.ts.map +1 -1
  291. package/types/ui/index.d.ts +2 -1
  292. package/types/ui/modal-builder.d.ts +116 -11
  293. package/types/ui/modal-builder.d.ts.map +1 -1
  294. package/types/ui/overflow-scroller.d.ts +2 -2
  295. package/types/ui/overflow-scroller.d.ts.map +1 -1
  296. package/types/ui/popover.d.ts +6 -7
  297. package/types/ui/popover.d.ts.map +1 -1
  298. package/types/ui/print.d.ts +0 -4
  299. package/types/ui/print.d.ts.map +1 -1
  300. package/types/ui/programmatic-modal.d.ts.map +1 -1
  301. package/types/ui/proxy-click.d.ts +19 -3
  302. package/types/ui/proxy-click.d.ts.map +1 -1
  303. package/types/ui/resizer.d.ts +116 -16
  304. package/types/ui/resizer.d.ts.map +1 -1
  305. package/types/ui/scroll-slider.d.ts +5 -7
  306. package/types/ui/scroll-slider.d.ts.map +1 -1
  307. package/types/ui/scrollpoint.d.ts +3 -8
  308. package/types/ui/scrollpoint.d.ts.map +1 -1
  309. package/types/ui/slider.d.ts +33 -14
  310. package/types/ui/slider.d.ts.map +1 -1
  311. package/types/ui/tabs.d.ts +6 -8
  312. package/types/ui/tabs.d.ts.map +1 -1
  313. package/types/ui/theme-toggle.d.ts +51 -7
  314. package/types/ui/theme-toggle.d.ts.map +1 -1
  315. package/types/ui/tooltip.d.ts +3 -5
  316. package/types/ui/tooltip.d.ts.map +1 -1
  317. package/types/utils/css.d.ts +11 -0
  318. package/types/utils/css.d.ts.map +1 -0
  319. package/types/utils/dom.d.ts +12 -32
  320. package/types/utils/dom.d.ts.map +1 -1
  321. package/types/utils/font-awesome.d.ts +5 -0
  322. package/types/utils/font-awesome.d.ts.map +1 -0
  323. package/types/utils/index.d.ts +2 -1
  324. package/types/utils/system.d.ts +113 -0
  325. package/types/utils/system.d.ts.map +1 -0
@@ -5,6 +5,7 @@
5
5
 
6
6
  @use "sass:map";
7
7
  @use "../utils";
8
+ @use "../layout";
8
9
 
9
10
  /// Module Settings
10
11
  /// @type Map
@@ -49,11 +50,7 @@ $config: (
49
50
  padding: get("size") 0 0 0;
50
51
  }
51
52
  .ratio-box__content {
52
- position: absolute;
53
- top: 0;
54
- left: 0;
55
- width: 100%;
56
- height: 100%;
53
+ @include layout.absolute-fill(true);
57
54
  border: 0;
58
55
  }
59
56
  @each $name, $size in get("sizes") {
@@ -82,6 +82,7 @@ $config: (
82
82
  width: $short-width;
83
83
  max-width: 100%;
84
84
  border-bottom-width: get("short-border-width");
85
+ display: inline-block;
85
86
  }
86
87
  @if get("short-modifiers") {
87
88
  @each $mod, $opts in get("short-modifiers") {
@@ -22,8 +22,6 @@
22
22
  /// @prop {Dimension} padding-bottom [0]
23
23
  /// @prop {Dimension} padding-top [0]
24
24
  /// @prop {String} prefix ["scroll-slide"]
25
- /// @prop {Color} button-background-color [white]
26
- /// @prop {Color} button-background-color-hover [white]
27
25
  /// @prop {CssValue} button-border [2px solid white]
28
26
  /// @prop {Color} button-border-color-hover [white]
29
27
  /// @prop {Dimension} button-border-radius [50%]
@@ -46,8 +44,6 @@ $config: (
46
44
  "padding-bottom" : 0,
47
45
  "padding-top" : 0,
48
46
  "prefix": "scroll-slider",
49
- "button-background-color" : white,
50
- "button-background-color-hover" : white,
51
47
  "button-border" : 2px solid white,
52
48
  "button-border-color-hover" : white,
53
49
  "button-border-radius" : 50%,
@@ -124,7 +120,7 @@ $config: (
124
120
  @include layout.match-container-margin("scroll-padding-left", get("container"));
125
121
  // padding: 1rem;
126
122
  // Add space to end of list
127
- // &:after {
123
+ // &::after {
128
124
  // content: "\00a0";
129
125
  // display: block;
130
126
  // width: 1rem;
@@ -0,0 +1,126 @@
1
+ ////
2
+ /// @group skeleton
3
+ /// Placeholder component for skeleton (ie. loading state
4
+ ////
5
+
6
+ @use "sass:map";
7
+ @use "sass:list";
8
+ @use "sass:math";
9
+ @use "sass:meta";
10
+
11
+ @use "../selector";
12
+ @use "../utils";
13
+ @use "../color";
14
+ @use "../element";
15
+
16
+
17
+ // Used for function fallback
18
+ $-fallbacks: (
19
+ "border-radius" : (
20
+ "function" : meta.get-function("get", false, "element"),
21
+ "property" : "border-radius"
22
+ )
23
+ );
24
+
25
+ /// Module Settings
26
+ /// @type Map
27
+ /// @prop {CssValue} animation [pulse 2s cubic-bezier(0.4,0,0.6,1) infinite] The animation applied to skeleton elements.
28
+ /// @prop {Color} color [type-disabled] The base color for skeleton elements.
29
+ /// @prop {Color} background-color [#cbcbcb] The primary background color for skeleton elements.
30
+ /// @prop {Color} background-color-alt [#aeaeae] An alternative background color for skeleton elements, used for variations.
31
+ /// @prop {Dimension} border-radius [true] The border-radius for skeleton blocks and text. If set to true, uses the element.scss property for "border-radius".
32
+ /// @prop {Dimension} inline-margin [0.35em] The margin between inline skeleton text elements.
33
+ /// @prop {Number} media-ratio [(4/3)] The aspect ratio for skeleton media blocks (width/height).
34
+ /// @prop {Dimension} text-border-radius [3em] The border-radius for skeleton text lines.
35
+ /// @prop {Map} widths [Map] A map defining various width percentages for skeleton text lines (or used to size blocks/etc)
36
+
37
+ $config: (
38
+ "animation" : UluPulse 2s cubic-bezier(0.4,0,0.6,1) infinite,
39
+ "color" : "type-disabled",
40
+ "background-color" : #e2e2e2,
41
+ "background-color-alt" : #bababa,
42
+ "border-radius": true,
43
+ "inline-margin" : 0.35em,
44
+ "media-ratio" : list.slash(4, 3),
45
+ "media-font-size" : 2rem,
46
+ "text-border-radius" : 3em,
47
+ "widths": (
48
+ "small-xxx" : 10%,
49
+ "small-xx" : 20%,
50
+ "small-x" : 30%,
51
+ "small" : 40%,
52
+ "large" : 70%,
53
+ "large-x" : 85%,
54
+ "large-xx" : 100%
55
+ ),
56
+ ) !default;
57
+
58
+ /// Change modules $config
59
+ /// @param {Map} $changes Map of changes
60
+ /// @example scss
61
+ /// @include ulu.component-skeleton-set(( "property" : value ));
62
+
63
+ @mixin set($changes) {
64
+ $config: map.merge($config, $changes) !global;
65
+ }
66
+
67
+ /// Get a config option
68
+ /// @param {Map} $name Name of property
69
+ /// @example scss
70
+ /// @include ulu.component-skeleton-get("property");
71
+
72
+ @function get($name) {
73
+ $value: utils.require-map-get($config, $name, "skeleton [config]");
74
+ @return utils.function-fallback($name, $value, $-fallbacks);
75
+ }
76
+
77
+ /// Prints component styles
78
+ /// @demo skeleton
79
+ /// @example scss
80
+ /// @include ulu.component-skeleton-styles();
81
+
82
+ @mixin styles {
83
+ $prefix: selector.class("skeleton");
84
+
85
+ #{ $prefix } {
86
+ animation: get("animation");
87
+ color: color.get(get("color"));
88
+ }
89
+ #{ $prefix }--background {
90
+ background-color: color.get(get("background-color")) !important;
91
+ }
92
+ #{ $prefix }--block,
93
+ #{ $prefix }--text,
94
+ #{ $prefix }--media {
95
+ animation: get("animation");
96
+ color: color.get(get("color"));
97
+ background-color: color.get(get("background-color")) !important;
98
+ border-radius: get("border-radius");
99
+ }
100
+ #{ $prefix }--media {
101
+ display: flex;
102
+ align-items: center;
103
+ justify-content: center;
104
+ aspect-ratio: get("media-ratio");
105
+ font-size: get("media-font-size");
106
+ }
107
+ #{ $prefix }--text {
108
+ height: 1em;
109
+ width: 60%;
110
+ border-radius: get("text-border-radius");
111
+ }
112
+ #{ $prefix }--inline {
113
+ display: inline-block;
114
+ }
115
+ #{ $prefix }--inline + #{ $prefix }--inline {
116
+ margin-left: get("inline-margin");
117
+ }
118
+ #{ $prefix }--background-alt {
119
+ background-color: color.get(get("background-color-alt")) !important;
120
+ }
121
+ @each $name, $value in get("widths") {
122
+ #{ $prefix }--width-#{ $name } {
123
+ width: $value;
124
+ }
125
+ }
126
+ }
@@ -12,47 +12,45 @@
12
12
  /// Module Settings
13
13
  /// @type Map
14
14
  /// @prop {Color} background-color [transparent] Background color for the entire slider section.
15
- /// @prop {Dimension} margin-bottom [3rem] Bottom margin color for the entire slider section.
16
- /// @prop {Dimension} margin-top [1rem] Top margin color for the entire slider section.
17
- /// @prop {Dimension} padding-bottom [0] Bottom padding for individual slides.
15
+ /// @prop {Dimension} margin [(1rem 0 3rem 0)] Margin for slider container
18
16
  /// @prop {Dimension} padding-top [0] Top padding for individual slides.
19
- /// @prop {Dimension} button-icon-offset-x [false] Offsets the control icons in from their respective sides.
20
- /// @prop {Dimension} button-icon-offset-y [false] Offsets the control options down by adding a margin.
17
+ /// @prop {Dimension} button-offset-x [null] Offsets the control button in from their respective sides.
18
+ /// @prop {Dimension} button-offset-y [null] Offsets the control button y
21
19
  /// @prop {Dimension} button-margin [0.75rem] The margin between the controls and the slide content when using .slider__slide-gap-for-controls
22
- /// @prop {Dimension} button-size [3rem] Size of the button. Likely antiquated and replaced with button-width and button-height
23
- /// @prop {Color} dot-background-color [transparent] The color of the dot when unselected.
24
- /// @prop {Color} dot-background-color-hover [color.get("link")] The color of the dot when hovered.
25
- /// @prop {Color} dot-background-color-selected [color.get("link")] The color of the dot when selected.
26
- /// @prop {Dimension} dot-border-radius [50%] The border-radius of the dot.
27
- /// @prop {Color} dot-border-color [color.get("link")] The border color of the dot.
28
- /// @prop {Color} dot-border-color-hover [color.get("link")] The border color of the dot when hovered.
29
- /// @prop {Color} dot-border-color-selected [color.get("link")] The border color of the dot when selected.
30
- /// @prop {Dimension} dot-border-width [2px] The border width of the dot.
31
- /// @prop {Dimension} dot-size [1rem] The height and width of the dot.
32
- /// @prop {Dimension} button-height [1rem] The height of the button.
20
+ /// @prop {Color} nav-margin [(0.5rem 0)] Margin for nav (dots)
21
+ /// @prop {Color} nav-background-color [transparent] The color of the dot when unselected.
22
+ /// @prop {Color} nav-background-color-hover [color.get("link")] The color of the dot when hovered.
23
+ /// @prop {Color} nav-background-color-selected [color.get("link")] The color of the dot when selected.
24
+ /// @prop {Dimension} nav-border-radius [50%] The border-radius of the dot.
25
+ /// @prop {Color} nav-border-color [color.get("link")] The border color of the dot.
26
+ /// @prop {Color} nav-border-color-hover [color.get("link")] The border color of the dot when hovered.
27
+ /// @prop {Color} nav-border-color-selected [color.get("link")] The border color of the dot when selected.
28
+ /// @prop {Dimension} nav-border-width [2px] The border width of the dot.
29
+ /// @prop {Dimension} nav-size [1rem] The height and width of the dot.
30
+ /// @prop {Dimension} nav-gap [0.2rem] Gap between nav items
33
31
  /// @prop {Dimension} button-width [1rem] The width of the button.
34
32
 
35
33
  $config: (
36
34
  "background-color" : transparent,
37
- "margin-bottom" : 3rem,
38
- "margin-top" : 1rem,
39
- "button-icon-offset-x" : 2rem,
40
- "button-icon-offset-y" : false,
41
- "button-margin" : 2rem,
42
- "button-size" : 3rem,
43
- "button-height": 2.5rem,
44
- "button-width": 2.5rem,
45
- "dot-background-color" : transparent,
46
- "dot-background-color-hover" : "link",
47
- "dot-background-color-selected" : "link",
48
- "dot-border-color" : "link",
49
- "dot-border-color-hover" : "link",
50
- "dot-border-color-selected" : "link",
51
- "dot-border-radius" : 50%,
52
- "dot-border-width" : 2px,
53
- "dot-size" : 1rem,
35
+ "margin" : (1rem 0 3rem 0),
54
36
  "padding-bottom" : 0,
55
37
  "padding-top" : 0,
38
+ "button-offset-x" : null,
39
+ "button-offset-y" : null,
40
+ "button-margin" : 2rem,
41
+ "button-width": 2.5rem,
42
+ "nav-background-color" : transparent,
43
+ "nav-background-color-hover" : "link",
44
+ "nav-background-color-selected" : "link",
45
+ "nav-border-color" : "link",
46
+ "nav-border-color-hover" : "link",
47
+ "nav-border-color-selected" : "link",
48
+ "nav-border-radius" : 50%,
49
+ "nav-gap" : 0.2rem,
50
+ "nav-border-width" : 2px,
51
+ "nav-size" : 1rem,
52
+ "nav-margin" : (0.5rem 0),
53
+
56
54
  ) !default;
57
55
 
58
56
  /// Change modules $config
@@ -84,7 +82,7 @@ $config: (
84
82
  #{ $prefix } {
85
83
  position: relative; // for controls
86
84
  background-color: color.get(get("background-color"));
87
- margin: get("margin-top") 0 get("margin-bottom") 0;
85
+ margin: get("margin");
88
86
  }
89
87
  #{ $prefix }__track,
90
88
  #{ $prefix-plugin }__controls,
@@ -97,34 +95,30 @@ $config: (
97
95
  top: 50%;
98
96
  transform: translateY(-50%);
99
97
  z-index: 10;
100
- }
101
- @if get("button-icon-offset-y") {
102
- #{ $prefix-plugin }__control-icon {
103
- margin-top: get("button-icon-offset-y");
104
- }
98
+ margin-top: get("button-offset-y");
105
99
  }
106
100
  #{ $prefix-plugin }__nav {
107
101
  display: flex;
108
102
  justify-content: center;
109
- li {
110
- margin: 0.5rem 0.15rem;
111
- }
103
+ margin: get("nav-margin");
104
+ gap: get("nav-gap");
112
105
  }
113
106
  #{ $prefix-plugin }__nav-button {
114
107
  display: block;
115
- width: get("dot-size");
116
- height: get("dot-size");
117
- background-color: color.get(get("dot-background-color"));
118
- border: get("dot-border-width") solid color.get(get("dot-border-color"));
119
- border-radius: get("dot-border-radius");
108
+ width: get("nav-size");
109
+ height: get("nav-size");
110
+ background-color: color.get(get("nav-background-color"));
111
+ border: get("nav-border-width") solid color.get(get("nav-border-color"));
112
+ border-radius: get("nav-border-radius");
120
113
  &:hover {
121
- background-color: color.get(get("dot-background-color-hover"));
114
+ background-color: color.get(get("nav-background-color-hover"));
115
+ border-color: color.get(get("nav-border-color-hover"));
122
116
  }
123
117
  }
124
118
  #{ $prefix-plugin }__nav-button--active,
125
119
  #{ $prefix-plugin }__nav-button--active:hover {
126
- background-color: color.get(get("dot-background-color-selected"));
127
- border-color: color.get(get("dot-border-color-selected"));
120
+ background-color: color.get(get("nav-background-color-selected"));
121
+ border-color: color.get(get("nav-border-color-selected"));
128
122
  }
129
123
  #{ $prefix-plugin }__control-button,
130
124
  #{ $prefix-plugin }__nav-button {
@@ -164,42 +158,25 @@ $config: (
164
158
  }
165
159
  #{ $prefix-plugin }__control-button--previous {
166
160
  left: 0;
167
- @if get("button-icon-offset-x") {
168
- #{ $prefix-plugin }__control-icon {
169
- margin-left: get("button-icon-offset-x");
170
- }
171
- }
161
+ margin-left: get("button-offset-x");
172
162
  }
173
163
  #{ $prefix-plugin }__control-button--next {
174
164
  right: 0;
175
- @if get("button-icon-offset-x") {
176
- #{ $prefix-plugin }__control-icon {
177
- margin-right: get("button-icon-offset-x");
178
- }
179
- }
165
+ margin-right: get("button-offset-x");
180
166
  }
181
167
  #{ $prefix }--inset-controls {
182
168
  #{ $prefix }__slide-gap-for-controls {
183
- $padding: get("button-width") + get("button-margin") + get("button-icon-offset-x");
169
+ $padding: get("button-width") + get("button-margin") + get("button-offset-x");
184
170
  padding-left: $padding;
185
171
  padding-right: $padding;
186
172
  }
187
173
  #{ $prefix-plugin }__control-button--previous {
188
174
  left: 0;
189
- @if get("button-icon-offset-x") {
190
- &#{ $prefix-plugin }__control-icon {
191
- margin-left: get("button-icon-offset-x");
192
-
193
- }
194
- }
175
+ margin-left: get("button-offset-x");
195
176
  }
196
177
  #{ $prefix-plugin }__control-button--next {
197
178
  right: 0;
198
- @if get("button-icon-offset-x") {
199
- &#{ $prefix-plugin }__control-icon {
200
- margin-right: get("button-icon-offset-x");
201
- }
202
- }
179
+ margin-right: get("button-offset-x");
203
180
  }
204
181
  }
205
182
  }
@@ -96,7 +96,7 @@ $styles: () !default;
96
96
  transform-origin: $sizeHalf $sizeHalf;
97
97
  animation: UluFadeOut get("duration") linear infinite;
98
98
  }
99
- #{ $prefix }__spinner div:after {
99
+ #{ $prefix }__spinner div::after {
100
100
  content: " ";
101
101
  display: block;
102
102
  position: absolute;
@@ -181,7 +181,7 @@ $styles: () !default;
181
181
  transform-origin: $sizeHalf $sizeHalf;
182
182
  animation-duration: map.get($merged, "duration");
183
183
  }
184
- #{ $prefix }__spinner div:after {
184
+ #{ $prefix }__spinner div::after {
185
185
  left: $sizeHalf - $spoke-widthHalf;
186
186
  width: $spoke-width;
187
187
  height: map.get($merged, "spoke-height");
@@ -0,0 +1,206 @@
1
+
2
+ ////
3
+ /// @group sticky-list
4
+ ////
5
+ /// Sticky first column, sticky elements inside adjacent columns to first. (Sticky list with header)
6
+
7
+ @use "sass:map";
8
+ @use "sass:meta";
9
+ @use "sass:color" as sassColor;
10
+
11
+ @use "../color";
12
+ @use "../element";
13
+ @use "../breakpoint";
14
+ @use "../typography";
15
+ @use "../utils";
16
+ @use "../selector";
17
+
18
+ // Used for function fallback
19
+ $-fallbacks: (
20
+ "margin" : (
21
+ "function" : meta.get-function("get", false, "element"),
22
+ "property" : "margin"
23
+ ),
24
+ );
25
+
26
+ /// Module Settings
27
+ /// @type Map
28
+ /// @prop {Color} background-color [transparent] Background color for the entire slider section.
29
+ /// @prop {Number} margin [true] Margin on ends of component (defaults to element margin)
30
+ /// @prop {Number} mask-offset-bottom [55vh] The offset for the mask (on bottom)
31
+ /// @prop {Number} mask-offset-top [5rem] The offset for the mask (on top)
32
+ /// @prop {Number} sticky-top [45vh] When to stick
33
+ /// @prop {String} breakpoint ["medium"] The upward breakpoint that this is allowed to be sticky
34
+ /// @prop {String} type-size ["medium"] The typography size to use for title
35
+ /// @prop {Number} title-width [40%] The width of the title when this is displayed in columns
36
+ /// @prop {Number} title-min-width [8em] The min width for title when displayed in columns
37
+ /// @prop {CssValue} title-text-align [right] Text alignment for title when displayed in columns
38
+ /// @prop {Number} item-padding-x [0] Optional padding on the left/right for items
39
+ /// @prop {Number} gap [2rem] The gap between title and items when displayed in columns
40
+ /// @prop {Color} background-color [white] The background color used for the mask
41
+ /// @prop {List} background-contexts Adjust the background mask color by contextual selectors. Pass List of Maps with ("selector" [parent/contextual selector], "background-color", "item-padding-x" [optional])
42
+
43
+ $config: (
44
+ "margin" : true,
45
+ "mask-offset-bottom" : 55vh,
46
+ "mask-offset-top" : 5rem,
47
+ "sticky-top" : 45vh,
48
+ "breakpoint" : "medium",
49
+ "type-size" : "large",
50
+ "title-width" : 40%,
51
+ "title-min-width" : 8em,
52
+ "title-text-align" : right,
53
+ "item-padding-x" : 0,
54
+ "gap" : 2rem,
55
+ "background-color" : white,
56
+ "background-contexts" : (
57
+ (
58
+ "selector" : ".background-dark",
59
+ "background-color" : black,
60
+ "item-padding-x" : 1em
61
+ ),
62
+ )
63
+ );
64
+
65
+ /// Change modules $config
66
+ /// @param {Map} $changes Map of changes
67
+ /// @example scss
68
+ /// @include ulu.component-sticky-list-set(( "property" : value ));
69
+
70
+ @mixin set($changes) {
71
+ $config: map.merge($config, $changes) !global;
72
+ }
73
+
74
+ /// Set sizes map
75
+ /// @param {Map} $changes Map of changes
76
+ /// @param {String} $merge-mode Merge mode see utils.map-merge() [null|"deep"|"overwrite"]
77
+
78
+ @mixin set-sizes($changes, $merge-mode: null) {
79
+ $sizes: utils.map-merge($sizes, $changes, $merge-mode) !global;
80
+ }
81
+
82
+ /// Get a config option
83
+ /// @param {Map} $name Name of property
84
+ /// @example scss
85
+ /// @include ulu.component-sticky-list-get("property");
86
+
87
+ @function get($name) {
88
+ $value: utils.require-map-get($config, $name, "sticky-list [config]");
89
+ @return utils.function-fallback($name, $value, $-fallbacks);
90
+ }
91
+
92
+ /// Prints component styles
93
+ /// @demo sticky-list
94
+ /// @example scss
95
+ /// @include ulu.component-sticky-list-styles();
96
+ /// @example html {preview}
97
+ /// <div class="sticky-list">
98
+ /// <strong class="sticky-list__title">Example:</strong>
99
+ /// <ul class="sticky-list__list">
100
+ /// <li class="sticky-list__item">
101
+ /// Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras nec nisl magna
102
+ /// </li>
103
+ /// <li class="sticky-list__item">
104
+ /// Aenean sollicitudin mauris lectus, blandit suscipit lectus fringilla sed
105
+ /// </li>
106
+ /// <li class="sticky-list__item">
107
+ /// Suspendisse sollicitudin, justo sed efficitur tempor, risus
108
+ /// </li>
109
+ /// <li class="sticky-list__item">
110
+ /// Suspendisse sollicitudin, justo sed efficitur tempor, risus
111
+ /// </li>
112
+ /// <li class="sticky-list__item">
113
+ /// Suspendisse sollicitudin, justo sed efficitur tempor, risus
114
+ /// </li>
115
+ /// </ul>
116
+ /// </div>
117
+
118
+ @mixin styles {
119
+ $prefix: selector.class("sticky-list");
120
+ $mask-offset-top: get("mask-offset-top");
121
+ $mask-offset-bottom: get("mask-offset-bottom");
122
+ $type-size: get("type-size");
123
+ $sticky-top: get("sticky-top");
124
+
125
+ #{ $prefix } {
126
+ padding: get("margin") 0;
127
+ }
128
+ @include breakpoint.min(get("breakpoint")) {
129
+ #{ $prefix } {
130
+ display: flex;
131
+ align-items: flex-start;
132
+ gap: get("gap");
133
+ position: relative;
134
+ @if ($type-size and typography.has-size($type-size)) {
135
+ @include typography.size($type-size, $only-font-size: true);
136
+ } @else if ($type-size) {
137
+ @warn "Unable to find '#{$type-size}' typography size for title";
138
+ }
139
+ }
140
+ #{ $prefix }__title,
141
+ #{ $prefix } > :not(ul) {
142
+ display: block;
143
+ position: sticky;
144
+ top: $sticky-top;
145
+ flex-basis: get("title-width");
146
+ min-width: get("title-min-width");
147
+ padding-top: $mask-offset-top;
148
+ padding-bottom: $mask-offset-bottom;
149
+ text-align: get("title-text-align");
150
+ }
151
+ #{ $prefix }__list,
152
+ #{ $prefix } > ul {
153
+ list-style: none;
154
+ margin: 0;
155
+ display: flex;
156
+ flex-direction: column;
157
+ justify-content: space-between;
158
+ align-self: stretch;
159
+ }
160
+ #{ $prefix }__item,
161
+ #{ $prefix } > ul > li {
162
+ display: block;
163
+ position: sticky;
164
+ top: $sticky-top;
165
+ margin: 0 !important; // If in editor (to complicated for :not())
166
+ padding: $mask-offset-top get("item-padding-x") $mask-offset-bottom get("item-padding-x");
167
+ @include set-background(get("background-color"));
168
+ }
169
+ #{ $prefix }__item:first-child,
170
+ #{ $prefix } > ul > li:first-child {
171
+ margin-top: 0;
172
+ }
173
+ #{ $prefix }__item:last-child,
174
+ #{ $prefix } > ul > li:last-child {
175
+ margin-bottom: 0;
176
+ }
177
+ }
178
+
179
+ // Print out any contextual background styles
180
+ @each $props in get("background-contexts") {
181
+ $selector: map.get($props, "selector");
182
+ $item-padding-x: map.get($props, "item-padding-x");
183
+ @include breakpoint.min(get("breakpoint")) {
184
+ #{ $selector } {
185
+ #{ $prefix }__item,
186
+ #{ $prefix } > ul > li {
187
+ @if ($item-padding-x) {
188
+ padding-left: $item-padding-x;
189
+ padding-right: $item-padding-x;
190
+ }
191
+ @include set-background(map.get($props, "background-color"));
192
+ }
193
+ }
194
+ }
195
+ }
196
+ }
197
+
198
+ /// Outputs background color mask CSS (gradient from transparent to original color)
199
+ /// @param {Color} $color The color to create the CSS for
200
+
201
+ @mixin set-background($color) {
202
+ $color: color.get($color);
203
+ $color-transparent: sassColor.change($color, $alpha: 0);
204
+ background-color: $color;
205
+ background: linear-gradient(180deg, $color-transparent 0%, $color get("mask-offset-top"));
206
+ }
@@ -9,6 +9,7 @@
9
9
  @use "../color";
10
10
  @use "../selector";
11
11
  @use "../breakpoint";
12
+ @use "../layout";
12
13
  @use "../typography";
13
14
  @use "../element";
14
15
  @use "../utils";
@@ -39,6 +40,8 @@ $-fallbacks: (
39
40
  /// @prop {Dimension} tabpanel-padding [(2rem,)] Padding for the tabpanel
40
41
  /// @prop {Dimension} indicator-size [0.25em] The size of the tab's active border/indicator
41
42
  /// @prop {Color} indicator-color [currentColor] The color of the indicator
43
+ /// @prop {Color} indicator-transition-duration [200ms] The transition duration for indicator
44
+ /// @prop {Color} indicator-scale-start [0] The starting scale for the indicator (set to 1 to disable expanding on click)
42
45
  /// @prop {Color} tab-color [link] The type color for the tabs. This uses color.scss, so the value of this options should be a variable from color.scss.
43
46
  /// @prop {Color} tab-color-hover [link-hover] The type color for the tabs when hovered or focused. This uses color.scss, so the value of this options should be a variable from color.scss.
44
47
  /// @prop {Color} tab-color-selected [selected] The tab type color when selected. This uses color.scss, so the value of this options should be a variable from color.scss.
@@ -55,14 +58,17 @@ $-fallbacks: (
55
58
  /// @prop {Boolean} horizontal-tab-wrap [false] Set to true to allow line wrapping when the tabs are in horizontal orientation, vertical is always allowed to wrap
56
59
 
57
60
  $config: (
58
- "margin" : (2rem, 0),
61
+ "margin" : (2rem 0),
59
62
  "print-margin" : 1.5em,
60
63
  "tablist-divider" : true,
61
64
  "tablist-divider-width" : 1px,
62
65
  "indicator-size" : 3px,
63
66
  "indicator-color" : currentColor,
67
+ "indicator-transition-duration" : 200ms,
68
+ "indicator-transition-timing" : ease-out,
69
+ "indicator-scale-start" : 0,
64
70
  "tab-color" : "type-tertiary",
65
- "tab-color-hover" : "link-hover",
71
+ "tab-color-hover" : "selected",
66
72
  "tab-color-selected" : "selected",
67
73
  "tab-background-color-selected" : null,
68
74
  "tab-font-weight" : true,
@@ -118,6 +124,7 @@ $config: (
118
124
  overflow-x: auto;
119
125
  border-bottom: get("tablist-divider");
120
126
  border-bottom-width: get("tablist-divider-width");
127
+ @include layout.remove-scrollbar();
121
128
  }
122
129
  [role="tab"] {
123
130
  display: block;
@@ -140,17 +147,28 @@ $config: (
140
147
  left: 0;
141
148
  right: 0;
142
149
  height: get("indicator-size");
150
+ transition-property: opacity, background-color, transform;
151
+ transition-duration: get("indicator-transition-duration");
152
+ transition-timing-function: get("indicator-transition-timing");
153
+ transform: scaleX(get("indicator-scale-start"));
154
+ transform-origin: center;
143
155
  }
144
156
  &:hover {
145
157
  color: color.get(get("tab-color-hover"));
146
158
  }
159
+ // Add focus so as user clicks item it starts the active state styling
160
+ &:focus,
147
161
  &[aria-selected="true"] {
148
- color: color.get(get("tab-color-selected"));
149
- background-color: color.get(get("tab-background-color-selected"));
162
+ outline: none; // We are providing focus styling
150
163
  &::after {
151
164
  opacity: 1;
165
+ transform: scaleX(1);
152
166
  }
153
167
  }
168
+ &[aria-selected="true"] {
169
+ color: color.get(get("tab-color-selected"));
170
+ background-color: color.get(get("tab-background-color-selected"));
171
+ }
154
172
  }
155
173
  [role="tabpanel"] {
156
174
  position: relative;