@ulu/frontend 0.1.0-beta.11 → 0.1.0-beta.110

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 (342) hide show
  1. package/CHANGELOG.md +669 -0
  2. package/GEMINI.md +9 -0
  3. package/README.dev.md +3 -3
  4. package/README.md +14 -4
  5. package/dist/ulu-frontend.min.css +1 -1
  6. package/dist/ulu-frontend.min.js +36 -29
  7. package/docs-dev/.nojekyll +1 -0
  8. package/docs-dev/assets/main.js +832 -421
  9. package/docs-dev/assets/placeholder/icon-calendar.svg +1 -0
  10. package/docs-dev/assets/placeholder/icon-check.svg +1 -0
  11. package/docs-dev/assets/style.css +629 -233
  12. package/docs-dev/changelog/index.html +7445 -0
  13. package/docs-dev/changelog/updates-and-changes/index.html +5109 -0
  14. package/docs-dev/demos/accordion/index.html +1442 -364
  15. package/docs-dev/demos/badge/index.html +5835 -0
  16. package/docs-dev/demos/badge-stack/index.html +5816 -0
  17. package/docs-dev/demos/basic-hero/index.html +111 -0
  18. package/docs-dev/demos/breadcrumb/index.html +5870 -0
  19. package/docs-dev/demos/breakpoints-manager/index.html +5846 -0
  20. package/docs-dev/demos/button/index.html +1490 -356
  21. package/docs-dev/demos/button-group/index.html +5832 -0
  22. package/docs-dev/demos/button-verbose/index.html +5838 -0
  23. package/docs-dev/demos/callout/index.html +1469 -349
  24. package/docs-dev/demos/captioned-figure/index.html +1446 -353
  25. package/docs-dev/demos/card/index.html +1518 -786
  26. package/docs-dev/demos/card-grid/index.html +5957 -0
  27. package/docs-dev/demos/card-new/index.html +5088 -0
  28. package/docs-dev/demos/card-old/index.html +5223 -0
  29. package/docs-dev/demos/card.1/index.html +5223 -0
  30. package/docs-dev/demos/card.TRASH/index.html +5541 -0
  31. package/docs-dev/demos/counter-list/index.html +5840 -0
  32. package/docs-dev/demos/css-icons/index.html +1466 -350
  33. package/docs-dev/demos/data-grid/index.html +1446 -353
  34. package/docs-dev/demos/data-table/index.html +1621 -395
  35. package/docs-dev/demos/details-group/index.html +5867 -0
  36. package/docs-dev/demos/donut-chart/index.html +5874 -0
  37. package/docs-dev/demos/file-save/index.html +1446 -353
  38. package/docs-dev/demos/flipcard/index.html +1446 -353
  39. package/docs-dev/demos/form-theme/index.html +1453 -360
  40. package/docs-dev/demos/headline-label/index.html +5802 -0
  41. package/docs-dev/demos/hero/index.html +12 -4
  42. package/docs-dev/demos/image-grid/index.html +12 -4
  43. package/docs-dev/demos/index.html +1447 -354
  44. package/docs-dev/demos/list-inline/index.html +1446 -353
  45. package/docs-dev/demos/list-lines/index.html +1446 -353
  46. package/docs-dev/demos/menu-stack/index.html +1550 -389
  47. package/docs-dev/demos/modals/index.html +1616 -400
  48. package/docs-dev/demos/nav-strip/index.html +1446 -353
  49. package/docs-dev/demos/overlay-section/index.html +1532 -369
  50. package/docs-dev/demos/panel/index.html +5862 -0
  51. package/docs-dev/demos/popovers/index.html +1710 -375
  52. package/docs-dev/demos/print/index.html +1446 -353
  53. package/docs-dev/demos/progress-bar/index.html +5964 -0
  54. package/docs-dev/demos/progress-circle/index.html +6137 -0
  55. package/docs-dev/demos/progress-donut/index.html +6107 -0
  56. package/docs-dev/demos/pull-quote/index.html +1446 -353
  57. package/docs-dev/demos/rail/index.html +5910 -0
  58. package/docs-dev/demos/rule/index.html +1455 -350
  59. package/docs-dev/demos/scroll-slider/index.html +72 -106
  60. package/docs-dev/demos/scrollpoints/index.html +1447 -354
  61. package/docs-dev/demos/skeleton/index.html +5858 -0
  62. package/docs-dev/demos/slider/index.html +12 -4
  63. package/docs-dev/demos/spoke-spinner/index.html +1446 -353
  64. package/docs-dev/demos/sticky-list/index.html +5823 -0
  65. package/docs-dev/demos/tabs/index.html +1474 -345
  66. package/docs-dev/demos/tag/index.html +1463 -358
  67. package/docs-dev/demos/theme-toggle/index.html +5879 -0
  68. package/docs-dev/demos/tile-grid-overlay/index.html +12 -4
  69. package/docs-dev/demos/tiles/index.html +1446 -353
  70. package/docs-dev/demos/tooltip/index.html +1446 -353
  71. package/docs-dev/demos/wysiwyg/index.html +5852 -0
  72. package/docs-dev/guide/building-stylesheet/index.html +1446 -353
  73. package/docs-dev/guide/developing-ulu-scss-module/index.html +1446 -353
  74. package/docs-dev/guide/index.html +1446 -353
  75. package/docs-dev/guide/updates-and-changes/index.html +5033 -0
  76. package/docs-dev/index.html +1446 -353
  77. package/docs-dev/javascript/events/index.html +1141 -940
  78. package/docs-dev/javascript/index.html +1446 -353
  79. package/docs-dev/javascript/settings/index.html +5629 -0
  80. package/docs-dev/javascript/ui-breakpoints/index.html +1270 -719
  81. package/docs-dev/javascript/ui-collapsible/index.html +1135 -824
  82. package/docs-dev/javascript/ui-details-group/index.html +5382 -0
  83. package/docs-dev/javascript/ui-dialog/index.html +1167 -841
  84. package/docs-dev/javascript/ui-flipcard/index.html +833 -2058
  85. package/docs-dev/javascript/ui-grid/index.html +835 -1962
  86. package/docs-dev/javascript/ui-modal-builder/index.html +988 -1919
  87. package/docs-dev/javascript/ui-overflow-scroller/index.html +811 -1912
  88. package/docs-dev/javascript/ui-overflow-scroller-pager/index.html +1643 -928
  89. package/docs-dev/javascript/ui-page/index.html +1643 -928
  90. package/docs-dev/javascript/ui-popover/index.html +1484 -773
  91. package/docs-dev/javascript/ui-print/index.html +1637 -930
  92. package/docs-dev/javascript/ui-print-details/index.html +1643 -928
  93. package/docs-dev/javascript/ui-programmatic-modal/index.html +1643 -928
  94. package/docs-dev/javascript/ui-proxy-click/index.html +1395 -595
  95. package/docs-dev/javascript/ui-resizer/index.html +1986 -1006
  96. package/docs-dev/javascript/ui-scroll-slider/index.html +1514 -767
  97. package/docs-dev/javascript/ui-scrollpoint/index.html +1649 -941
  98. package/docs-dev/javascript/ui-slider/index.html +1723 -817
  99. package/docs-dev/javascript/ui-tabs/index.html +1537 -859
  100. package/docs-dev/javascript/ui-theme-toggle/index.html +5634 -0
  101. package/docs-dev/javascript/ui-tooltip/index.html +1649 -938
  102. package/docs-dev/javascript/utils-class-logger/index.html +1644 -929
  103. package/docs-dev/javascript/utils-css/index.html +5448 -0
  104. package/docs-dev/javascript/utils-dom/index.html +1320 -685
  105. package/docs-dev/javascript/utils-file-save/index.html +1643 -928
  106. package/docs-dev/javascript/utils-floating-ui/index.html +1643 -928
  107. package/docs-dev/javascript/utils-id/index.html +1643 -928
  108. package/docs-dev/javascript/utils-pause-youtube-video/index.html +1643 -928
  109. package/docs-dev/javascript/utils-system/index.html +5751 -0
  110. package/docs-dev/sass/base/color/index.html +1451 -360
  111. package/docs-dev/sass/base/elements/index.html +1645 -930
  112. package/docs-dev/sass/base/index/index.html +1452 -361
  113. package/docs-dev/sass/base/index.html +1446 -353
  114. package/docs-dev/sass/base/keyframes/index.html +1452 -361
  115. package/docs-dev/sass/base/layout/index.html +1452 -361
  116. package/docs-dev/sass/base/normalize/index.html +1644 -929
  117. package/docs-dev/sass/base/print/index.html +1452 -361
  118. package/docs-dev/sass/base/root/index.html +1455 -364
  119. package/docs-dev/sass/base/typography/index.html +1451 -360
  120. package/docs-dev/sass/components/accordion/index.html +1538 -406
  121. package/docs-dev/sass/components/adaptive-spacing/index.html +1451 -360
  122. package/docs-dev/sass/components/badge/index.html +1468 -359
  123. package/docs-dev/sass/components/badge-stack/index.html +5991 -0
  124. package/docs-dev/sass/components/basic-hero/index.html +5985 -0
  125. package/docs-dev/sass/components/breadcrumb/index.html +6032 -0
  126. package/docs-dev/sass/components/button/index.html +1451 -360
  127. package/docs-dev/sass/components/button-group/index.html +5983 -0
  128. package/docs-dev/sass/components/button-verbose/index.html +1523 -357
  129. package/docs-dev/sass/components/callout/index.html +1572 -422
  130. package/docs-dev/sass/components/captioned-figure/index.html +1591 -385
  131. package/docs-dev/sass/components/card/index.html +1511 -363
  132. package/docs-dev/sass/components/card-grid/index.html +1451 -360
  133. package/docs-dev/sass/components/counter-list/index.html +6067 -0
  134. package/docs-dev/sass/components/css-icon/index.html +1452 -361
  135. package/docs-dev/sass/components/data-grid/index.html +1465 -367
  136. package/docs-dev/sass/components/data-table/index.html +1648 -369
  137. package/docs-dev/sass/components/fill-context/index.html +1451 -360
  138. package/docs-dev/sass/components/flipcard/index.html +1479 -357
  139. package/docs-dev/sass/components/flipcard-grid/index.html +1451 -360
  140. package/docs-dev/sass/components/form-theme/index.html +1652 -566
  141. package/docs-dev/sass/components/headline-label/index.html +6013 -0
  142. package/docs-dev/sass/components/hero/index.html +1497 -358
  143. package/docs-dev/sass/components/horizontal-rule/index.html +1451 -360
  144. package/docs-dev/sass/components/image-grid/index.html +1451 -360
  145. package/docs-dev/sass/components/index/index.html +1466 -362
  146. package/docs-dev/sass/components/index.html +1446 -353
  147. package/docs-dev/sass/components/links/index.html +1451 -360
  148. package/docs-dev/sass/components/list-inline/index.html +1451 -360
  149. package/docs-dev/sass/components/list-lines/index.html +1451 -360
  150. package/docs-dev/sass/components/list-ordered/index.html +1451 -360
  151. package/docs-dev/sass/components/list-unordered/index.html +1451 -360
  152. package/docs-dev/sass/components/menu-stack/index.html +1476 -371
  153. package/docs-dev/sass/components/modal/index.html +1486 -360
  154. package/docs-dev/sass/components/nav-strip/index.html +1459 -368
  155. package/docs-dev/sass/components/overlay-section/index.html +1459 -368
  156. package/docs-dev/sass/components/pager/index.html +1451 -360
  157. package/docs-dev/sass/components/panel/index.html +6213 -0
  158. package/docs-dev/sass/components/placeholder-block/index.html +1451 -360
  159. package/docs-dev/sass/components/popover/index.html +1497 -370
  160. package/docs-dev/sass/components/progress-bar/index.html +6192 -0
  161. package/docs-dev/sass/components/progress-circle/index.html +6084 -0
  162. package/docs-dev/sass/components/pull-quote/index.html +1463 -372
  163. package/docs-dev/sass/components/rail/index.html +6003 -0
  164. package/docs-dev/sass/components/ratio-box/index.html +1459 -368
  165. package/docs-dev/sass/components/rule/index.html +1452 -361
  166. package/docs-dev/sass/components/scroll-slider/index.html +1447 -368
  167. package/docs-dev/sass/components/skeleton/index.html +6041 -0
  168. package/docs-dev/sass/components/skip-link/index.html +1451 -360
  169. package/docs-dev/sass/components/slider/index.html +1491 -412
  170. package/docs-dev/sass/components/spoke-spinner/index.html +1453 -362
  171. package/docs-dev/sass/components/sticky-list/index.html +6203 -0
  172. package/docs-dev/sass/components/table-sticky/index.html +5707 -0
  173. package/docs-dev/sass/components/tabs/index.html +1472 -366
  174. package/docs-dev/sass/components/tag/index.html +1563 -378
  175. package/docs-dev/sass/components/tile-button/index.html +1451 -360
  176. package/docs-dev/sass/components/tile-grid/index.html +1451 -360
  177. package/docs-dev/sass/components/tile-grid-overlay/index.html +1451 -360
  178. package/docs-dev/sass/components/vignette/index.html +1457 -360
  179. package/docs-dev/sass/components/wysiwyg/index.html +1477 -368
  180. package/docs-dev/sass/core/breakpoint/index.html +1530 -387
  181. package/docs-dev/sass/core/button/index.html +1483 -390
  182. package/docs-dev/sass/core/color/index.html +1666 -443
  183. package/docs-dev/sass/core/cssvar/index.html +1451 -360
  184. package/docs-dev/sass/core/element/index.html +1790 -417
  185. package/docs-dev/sass/core/index.html +1451 -360
  186. package/docs-dev/sass/core/layout/index.html +1491 -381
  187. package/docs-dev/sass/core/path/index.html +1451 -360
  188. package/docs-dev/sass/core/selector/index.html +1451 -360
  189. package/docs-dev/sass/core/typography/index.html +1591 -442
  190. package/docs-dev/sass/core/units/index.html +1453 -356
  191. package/docs-dev/sass/core/utils/index.html +2744 -504
  192. package/docs-dev/sass/helpers/color/index.html +1643 -928
  193. package/docs-dev/sass/helpers/display/index.html +1644 -929
  194. package/docs-dev/sass/helpers/index/index.html +1643 -928
  195. package/docs-dev/sass/helpers/index.html +1446 -353
  196. package/docs-dev/sass/helpers/print/index.html +759 -298
  197. package/docs-dev/sass/helpers/typography/index.html +1643 -928
  198. package/docs-dev/sass/helpers/units/index.html +1643 -928
  199. package/docs-dev/sass/helpers/utilities/index.html +1643 -924
  200. package/docs-dev/sass/index.html +1446 -353
  201. package/js/events/index.js +17 -5
  202. package/js/index.js +1 -0
  203. package/js/settings.js +97 -0
  204. package/js/ui/breakpoints.js +19 -16
  205. package/js/ui/collapsible.js +8 -1
  206. package/js/ui/details-group.js +112 -0
  207. package/js/ui/dialog.js +103 -44
  208. package/js/ui/dialog.todo +2 -36
  209. package/js/ui/flipcard.js +37 -57
  210. package/js/ui/grid.js +15 -13
  211. package/js/ui/index.js +1 -0
  212. package/js/ui/modal-builder.js +127 -70
  213. package/js/ui/overflow-scroller.js +6 -4
  214. package/js/ui/page.js +2 -2
  215. package/js/ui/popover.js +38 -38
  216. package/js/ui/print.js +16 -25
  217. package/js/ui/programmatic-modal.js +9 -3
  218. package/js/ui/proxy-click.js +50 -36
  219. package/js/ui/resizer.js +408 -39
  220. package/js/ui/scroll-slider.js +24 -30
  221. package/js/ui/scrollpoint.js +29 -64
  222. package/js/ui/slider.js +108 -63
  223. package/js/ui/tabs.js +23 -36
  224. package/js/ui/theme-toggle.js +332 -94
  225. package/js/ui/tooltip.js +27 -32
  226. package/js/utils/class-logger.js +3 -3
  227. package/js/utils/css.js +13 -0
  228. package/js/utils/dom.js +23 -64
  229. package/js/utils/font-awesome.js +19 -0
  230. package/js/utils/index.js +2 -1
  231. package/js/utils/system.js +155 -0
  232. package/package.json +23 -8
  233. package/scss/README.md +9 -0
  234. package/scss/_breakpoint.scss +39 -5
  235. package/scss/_button.scss +7 -5
  236. package/scss/_color.scss +71 -40
  237. package/scss/_element.scss +124 -2
  238. package/scss/_layout.scss +7 -8
  239. package/scss/_typography.scss +15 -0
  240. package/scss/_units.scss +3 -2
  241. package/scss/_utils.scss +387 -16
  242. package/scss/base/_elements.scss +0 -1
  243. package/scss/base/_index.scss +1 -1
  244. package/scss/base/_keyframes.scss +15 -0
  245. package/scss/base/_layout.scss +1 -0
  246. package/scss/base/_print.scss +2 -0
  247. package/scss/base/_root.scss +2 -0
  248. package/scss/components/README.todos +1 -0
  249. package/scss/components/_accordion.scss +154 -109
  250. package/scss/components/_badge-stack.scss +84 -0
  251. package/scss/components/_badge.scss +30 -7
  252. package/scss/components/_basic-hero.scss +112 -0
  253. package/scss/components/_breadcrumb.scss +110 -0
  254. package/scss/components/_button-group.scss +90 -0
  255. package/scss/components/_button-verbose.scss +100 -18
  256. package/scss/components/_callout.scss +112 -53
  257. package/scss/components/_captioned-figure.scss +17 -0
  258. package/scss/components/_card.scss +224 -66
  259. package/scss/components/_counter-list.scss +151 -0
  260. package/scss/components/_css-icon.scss +27 -17
  261. package/scss/components/_data-grid.scss +55 -12
  262. package/scss/components/_data-table.scss +31 -0
  263. package/scss/components/_flipcard.scss +8 -3
  264. package/scss/components/_form-theme.scss +106 -95
  265. package/scss/components/_headline-label.scss +83 -0
  266. package/scss/components/_hero.scss +12 -10
  267. package/scss/components/_index.scss +73 -0
  268. package/scss/components/_menu-stack.scss +69 -32
  269. package/scss/components/_modal.scss +51 -23
  270. package/scss/components/_nav-strip.scss +2 -0
  271. package/scss/components/_overlay-section.scss +2 -5
  272. package/scss/components/_panel.scss +246 -0
  273. package/scss/components/_popover.scss +165 -64
  274. package/scss/components/_progress-bar.scss +254 -0
  275. package/scss/components/_progress-circle.scss +175 -0
  276. package/scss/components/_pull-quote.scss +13 -13
  277. package/scss/components/_rail.scss +127 -0
  278. package/scss/components/_ratio-box.scss +2 -5
  279. package/scss/components/_rule.scss +1 -0
  280. package/scss/components/_scroll-slider.scss +1 -5
  281. package/scss/components/_skeleton.scss +126 -0
  282. package/scss/components/_slider.scss +49 -72
  283. package/scss/components/_spoke-spinner.scss +2 -2
  284. package/scss/components/_sticky-list.scss +206 -0
  285. package/scss/components/_tabs.scss +22 -4
  286. package/scss/components/_tag.scss +49 -7
  287. package/scss/components/_vignette.scss +3 -5
  288. package/scss/components/_wysiwyg.scss +21 -13
  289. package/scss/helpers/_display.scss +15 -18
  290. package/scss/helpers/_print.scss +12 -7
  291. package/scss/helpers/_utilities.scss +56 -34
  292. package/types/events/index.d.ts +10 -1
  293. package/types/events/index.d.ts.map +1 -1
  294. package/types/index.d.ts +1 -0
  295. package/types/settings.d.ts +70 -0
  296. package/types/settings.d.ts.map +1 -0
  297. package/types/ui/breakpoints.d.ts +14 -14
  298. package/types/ui/breakpoints.d.ts.map +1 -1
  299. package/types/ui/collapsible.d.ts.map +1 -1
  300. package/types/ui/details-group.d.ts +38 -0
  301. package/types/ui/details-group.d.ts.map +1 -0
  302. package/types/ui/dialog.d.ts +20 -14
  303. package/types/ui/dialog.d.ts.map +1 -1
  304. package/types/ui/flipcard.d.ts +16 -10
  305. package/types/ui/flipcard.d.ts.map +1 -1
  306. package/types/ui/grid.d.ts +4 -6
  307. package/types/ui/grid.d.ts.map +1 -1
  308. package/types/ui/index.d.ts +1 -0
  309. package/types/ui/modal-builder.d.ts +116 -11
  310. package/types/ui/modal-builder.d.ts.map +1 -1
  311. package/types/ui/overflow-scroller.d.ts +2 -2
  312. package/types/ui/overflow-scroller.d.ts.map +1 -1
  313. package/types/ui/popover.d.ts +6 -7
  314. package/types/ui/popover.d.ts.map +1 -1
  315. package/types/ui/print.d.ts +0 -4
  316. package/types/ui/print.d.ts.map +1 -1
  317. package/types/ui/programmatic-modal.d.ts.map +1 -1
  318. package/types/ui/proxy-click.d.ts +19 -3
  319. package/types/ui/proxy-click.d.ts.map +1 -1
  320. package/types/ui/resizer.d.ts +116 -16
  321. package/types/ui/resizer.d.ts.map +1 -1
  322. package/types/ui/scroll-slider.d.ts +5 -7
  323. package/types/ui/scroll-slider.d.ts.map +1 -1
  324. package/types/ui/scrollpoint.d.ts +3 -8
  325. package/types/ui/scrollpoint.d.ts.map +1 -1
  326. package/types/ui/slider.d.ts +33 -14
  327. package/types/ui/slider.d.ts.map +1 -1
  328. package/types/ui/tabs.d.ts +6 -8
  329. package/types/ui/tabs.d.ts.map +1 -1
  330. package/types/ui/theme-toggle.d.ts +51 -7
  331. package/types/ui/theme-toggle.d.ts.map +1 -1
  332. package/types/ui/tooltip.d.ts +3 -5
  333. package/types/ui/tooltip.d.ts.map +1 -1
  334. package/types/utils/css.d.ts +11 -0
  335. package/types/utils/css.d.ts.map +1 -0
  336. package/types/utils/dom.d.ts +12 -32
  337. package/types/utils/dom.d.ts.map +1 -1
  338. package/types/utils/font-awesome.d.ts +5 -0
  339. package/types/utils/font-awesome.d.ts.map +1 -0
  340. package/types/utils/index.d.ts +1 -0
  341. package/types/utils/system.d.ts +113 -0
  342. package/types/utils/system.d.ts.map +1 -0
@@ -0,0 +1,110 @@
1
+ ////
2
+ /// @group breadcrumb
3
+ /// Breadcrumb trail list layout
4
+ ////
5
+
6
+ @use "sass:map";
7
+ @use "sass:math";
8
+ @use "sass:meta";
9
+
10
+ @use "../selector";
11
+ @use "../utils";
12
+ @use "../color";
13
+ @use "../typography";
14
+
15
+
16
+ // Used for function fallback
17
+ $-fallbacks: (
18
+ "line-height" : (
19
+ "function" : meta.get-function("get", false, "typography"),
20
+ "property" : "line-height-densest"
21
+ ),
22
+ );
23
+
24
+ /// Module Settings
25
+ /// @type Map
26
+ /// @prop {List} margin [(0 0 1.25em 0)] Margin for component
27
+ /// @prop {CssUnit} row-gap [0.35em] Gap when breadcrumbs wrap
28
+ /// @prop {Color} color ["type-tertiary"] Base color (links inherit this)
29
+ /// @prop {Color} color-hover ["link-hover"] Color for link hover
30
+ /// @prop {CssUnit} line-height [true] Line height, defaults to typography line-height-densest
31
+ /// @prop {CssUnit} item-max-width [15em] Max length of item text
32
+ /// @prop {Color} separator-color [null] Optional color to apply to separator
33
+ /// @prop {Number} separator-opacity [0.7] Optional opacity for separator
34
+ /// @prop {List} separator-margin [(0 0.5em)] Separator margin
35
+
36
+ $config: (
37
+ "row-gap": 0.5em,
38
+ "margin" : (0 0 1.25em 0),
39
+ "color": "type-tertiary",
40
+ "color-hover": "link-hover",
41
+ "line-height": true,
42
+ "item-max-width": 15em,
43
+ "separator-margin": (0 0.5em),
44
+ "separator-color": null,
45
+ "separator-opacity": 0.7,
46
+ ) !default;
47
+
48
+ /// Change modules $config
49
+ /// @param {Map} $changes Map of changes
50
+ /// @example scss
51
+ /// @include ulu.component-breadcrumb-set(( "property" : value ));
52
+
53
+ @mixin set($changes) {
54
+ $config: map.merge($config, $changes) !global;
55
+ }
56
+
57
+ /// Get a config option
58
+ /// @param {Map} $name Name of property
59
+ /// @example scss
60
+ /// @include ulu.component-breadcrumb-get("property");
61
+
62
+ @function get($name) {
63
+ $value: utils.require-map-get($config, $name, "breadcrumb [config]");
64
+ @return utils.function-fallback($name, $value, $-fallbacks);
65
+ }
66
+
67
+ /// Prints component styles
68
+ /// @demo breadcrumb
69
+ /// @example scss
70
+ /// @include ulu.component-breadcrumb-styles();
71
+
72
+ @mixin styles {
73
+ $prefix: selector.class("breadcrumb");
74
+
75
+ #{ $prefix } {
76
+ color: color.get(get("color"));
77
+ margin: get("margin");
78
+ line-height: get("line-height");
79
+ }
80
+ #{ $prefix }__list {
81
+ display: flex;
82
+ align-items: center;
83
+ flex-wrap: wrap;
84
+ gap: get("row-gap") 0;
85
+ }
86
+ #{ $prefix }__item {
87
+ display: flex;
88
+ align-items: center;
89
+ }
90
+ #{ $prefix }__link,
91
+ #{ $prefix }__current {
92
+ white-space: nowrap;
93
+ overflow: hidden;
94
+ max-width: get("item-max-width");
95
+ text-overflow: ellipsis;
96
+ }
97
+ #{ $prefix }__link {
98
+ color: inherit;
99
+ text-decoration: none;
100
+ &:hover,
101
+ &:focus {
102
+ color: color.get(get("color-hover"));
103
+ }
104
+ }
105
+ #{ $prefix }__separator {
106
+ margin: get("separator-margin");
107
+ color: color.get(get("separator-color"));
108
+ opacity: get("separator-opacity");
109
+ }
110
+ }
@@ -0,0 +1,90 @@
1
+ ////
2
+ /// @group button-group
3
+ /// Groups a set of buttons
4
+ ////
5
+
6
+ @use "sass:map";
7
+ @use "sass:math";
8
+
9
+ @use "../selector";
10
+ @use "../utils";
11
+ @use "../color";
12
+ @use "../button";
13
+
14
+ /// Module Settings
15
+ /// @type Map
16
+ /// @prop {Dimension} gap [0.45em] Gap between buttons
17
+ /// @prop {Boolean} no-min-width [true] Buttons within the button group should have no min width
18
+
19
+ $config: (
20
+ "gap": 0.45em,
21
+ "no-min-width" : true
22
+ ) !default;
23
+
24
+ /// Change modules $config
25
+ /// @param {Map} $changes Map of changes
26
+ /// @example scss
27
+ /// @include ulu.component-button-group-set(( "property" : value ));
28
+
29
+ @mixin set($changes) {
30
+ $config: map.merge($config, $changes) !global;
31
+ }
32
+
33
+ /// Get a config option
34
+ /// @param {Map} $name Name of property
35
+ /// @example scss
36
+ /// @include ulu.component-button-group-get("property");
37
+
38
+ @function get($name) {
39
+ @return utils.require-map-get($config, $name, "button-group [config]");
40
+ }
41
+
42
+ /// Prints component styles
43
+ /// @demo button-group
44
+ /// @example scss
45
+ /// @include ulu.component-button-group-styles();
46
+
47
+ @mixin styles {
48
+ $prefix: selector.class("button-group");
49
+ $prefix-button: selector.class("button");
50
+
51
+ $button-radius: button.get("border-radius");
52
+
53
+ #{ $prefix } {
54
+ display: flex;
55
+ flex-wrap: wrap;
56
+ gap: get("gap");
57
+ #{ $prefix-button } {
58
+ margin: 0;
59
+ }
60
+ }
61
+ #{ $prefix }--joined {
62
+ flex-wrap: nowrap;
63
+ overflow-x: auto;
64
+ gap: 0;
65
+ // border-radius: button.get("border-radius");
66
+ #{ $prefix-button } {
67
+ position: relative; // To move to front when hover/active
68
+ border-radius: 0;
69
+ min-width: 0;
70
+ margin-left: -(button.get("border-width"));
71
+ &:first-child {
72
+ border-top-left-radius: $button-radius;
73
+ border-bottom-left-radius: $button-radius;
74
+ margin-left: 0;
75
+ }
76
+ &:last-child {
77
+ border-top-right-radius: $button-radius;
78
+ border-bottom-right-radius: $button-radius;
79
+ }
80
+ #{ button.get("active-selector") } {
81
+ z-index: 2;
82
+ }
83
+ &:hover,
84
+ &:focus {
85
+ z-index: 2;
86
+ }
87
+
88
+ }
89
+ }
90
+ }
@@ -9,6 +9,8 @@
9
9
  @use "../utils";
10
10
  @use "../color";
11
11
  @use "../element";
12
+ @use "../selector";
13
+ @use "../button";
12
14
 
13
15
  // Used for function fallback
14
16
  $-fallbacks: (
@@ -23,6 +25,14 @@ $-fallbacks: (
23
25
  "box-shadow-hover" : (
24
26
  "function" : meta.get-function("get", false, "element"),
25
27
  "property" : "box-shadow-hover"
28
+ ),
29
+ "border-color" : (
30
+ "function" : meta.get-function("get", false, "button"),
31
+ "property" : "border-color"
32
+ ),
33
+ "border-width" : (
34
+ "function" : meta.get-function("get", false, "button"),
35
+ "property" : "border-width"
26
36
  )
27
37
  );
28
38
 
@@ -31,11 +41,14 @@ $-fallbacks: (
31
41
  /// @prop {Color} background-color [white] Background color for the button.
32
42
  /// @prop {Color} background-color-hover [link] Background color for the button when hovered or focused.
33
43
  /// @prop {String} border-radius [border-radius] Border radius of the button.
44
+ /// @prop {String} border-width [null] Border width (or set to true to inherit button border width default)
45
+ /// @prop {String} border-color [null] Border color (or set to true to inherit button border width default)
34
46
  /// @prop {CssValue} box-shadow [true] Box shadow for the button. If set to true, uses default box-shadow.
35
47
  /// @prop {CssValue} box-shadow-hover [true] Box shadow for the button when hovered or focused. If set to true, uses default box-shadow-hover.
36
48
  /// @prop {String} color [type] Text color for the button.
37
49
  /// @prop {String} color-hover [type] Text color for the button when hovered or focused.
38
50
  /// @prop {Color} icon-color [gray] Color for button icons.
51
+ /// @prop {Color} icon-color-hover [null] Optional color for icon when hovered
39
52
  /// @prop {Dimension} icon-font-size [1.25rem] Font size for the button.
40
53
  /// @prop {Number} line-height [1.2] Line height for button text.
41
54
  /// @prop {Dimension} margin [1em] Margin for the button.
@@ -46,26 +59,44 @@ $-fallbacks: (
46
59
  /// @prop {String} title-color [link] Color of the title of the button.
47
60
  /// @prop {String} title-color-hover [link-hover] Color of the title of the button when hovered or focused.
48
61
  /// @prop {Dimension} title-margin [0.5em] Margin for the button's title.
62
+ /// @prop {Boolean} cap [false] Enable left cap style
63
+ /// @prop {Color} cap-side ["left"] The side that gets the cap
64
+ /// @prop {Number} cap-match-radius [true] The cap should have be rounded to match the parent's border radius
65
+ /// @prop {Map} cap-options The options for cap (see element.cap for options)
66
+ /// @prop {Map} cap-options-hover The options for cap when hovered
49
67
 
50
68
  $config: (
51
69
  "background-color" : white,
52
- "background-color-hover" : "link",
53
- "border-radius" : "border-radius",
70
+ "background-color-hover" : #F7F8F7,
71
+ "border-radius" : true,
72
+ "border-color" : null,
73
+ "border-width" : null,
54
74
  "box-shadow" : true,
55
75
  "box-shadow-hover" : true,
56
76
  "color" : "type",
57
77
  "color-hover" : "type",
58
78
  "icon-color": gray,
79
+ "icon-color-hover": null,
59
80
  "icon-font-size" : 1.25rem,
60
81
  "line-height" : 1.2,
61
82
  "margin" : 1em,
62
83
  "margin-inline" : 0.75em,
63
84
  "min-width": 20rem,
64
- "padding-x": 0.65em,
85
+ "padding-x": 0.75em,
65
86
  "padding-y": 1em,
66
87
  "title-color": "link",
67
88
  "title-margin" : 0.5em,
68
89
  "title-color-hover" : "link-hover",
90
+ "cap" : false,
91
+ "cap-side" : "left",
92
+ "cap-match-radius" : true,
93
+ "cap-options" : (
94
+ "color" : "link",
95
+ "size" : 0.5rem,
96
+ ),
97
+ "cap-options-hover" : (
98
+ "color" : "link-hover"
99
+ ),
69
100
  ) !default;
70
101
 
71
102
  /// Change modules $config
@@ -89,50 +120,101 @@ $config: (
89
120
 
90
121
  /// Prints component styles
91
122
  /// @example scss
92
- /// @include ulu.component-button-verbose-styles();
123
+ /// @include ulu.component-button-verbose-styles();
124
+ /// @example html {preview} - Basic Example
125
+ /// <a href="#" class="button-verbose">
126
+ /// <strong class="button-verbose__title">Example Link</strong>
127
+ /// <span class="button-verbose__body">This is the body</span>
128
+ /// <span class="button-verbose__icon fas fa-arrow-right" aria-hidden="true"></span>
129
+ /// </a>
93
130
 
94
131
  @mixin styles {
95
- .button-verbose {
132
+ $prefix: selector.class("button-verbose");
133
+ $padding-x: get("padding-x");
134
+ $padding-y: get("padding-y");
135
+ $padding-right: ($padding-x * 2) + 1em;
136
+ $cap-side: get("cap-side");
137
+ $cap-defaults: (
138
+ "offset" : utils.if-type("number", get("border-width"), 0),
139
+ "border-radius" : if(get("cap-match-radius"), get("border-radius"), 0),
140
+ "padding-adjust" : if(utils.is-side($cap-side), $padding-x, $padding-y)
141
+ );
142
+
143
+ #{ $prefix } {
144
+ position: relative; // For cap and icon
145
+ display: block;
96
146
  text-decoration: none;
97
- border-radius: element.get(get("border-radius"));
147
+ border-radius: get("border-radius");
148
+ @if (get("border-width")) {
149
+ border: get("border-width") solid color.get(get("border-color"));
150
+ }
98
151
  box-shadow: get("box-shadow");
99
152
  line-height: get("line-height");
100
- position: relative;
101
- display: block;
102
153
  margin-bottom: get("margin");
103
154
  max-width: 100%;
104
155
  width: get("min-width");
105
156
  background-color: color.get(get("background-color"));
106
- padding: get("padding-y") get("padding-x");
107
- padding-right: (get("padding-x") * 2) + 1em;
157
+ padding: $padding-y $padding-right $padding-y $padding-x;
108
158
  color: color.get(get("color"));
159
+ text-align: left;
160
+
109
161
  &:hover {
110
162
  color: color.get(get("color-hover"));
111
163
  background-color: color.get(get("background-color-hover"));
112
164
  box-shadow: get("box-shadow-hover");
113
- .button-verbose__title {
114
- color: color.get(get("title-color-hover"));
165
+ @if get("title-color-hover") {
166
+ #{ $prefix }__title {
167
+ color: color.get(get("title-color-hover"));
168
+ }
169
+ }
170
+ @if get("icon-color-hover") {
171
+ #{ $prefix }__icon {
172
+ color: color.get(get("icon-color-hover"));
173
+ }
174
+ }
175
+ }
176
+ @if get("cap") {
177
+ @include element.cap(
178
+ $side: $cap-side,
179
+ $options: map.merge($cap-defaults, get("cap-options"))
180
+ );
181
+ @if get("cap-options-hover") {
182
+ &:hover,
183
+ &:focus {
184
+ @include element.cap-appearance(
185
+ $side: $cap-side,
186
+ $options: get("cap-options-hover")
187
+ );
188
+ }
115
189
  }
116
190
  }
117
191
  }
118
- .button-verbose__title {
192
+ #{ $prefix }__title,
193
+ #{ $prefix }__body {
119
194
  display: block;
120
- margin-bottom: get("title-margin");
195
+ &:first-child {
196
+ margin-bottom: get("title-margin");
197
+ }
198
+ }
199
+ #{ $prefix }__title {
121
200
  color: color.get(get("title-color"));
122
201
  }
123
- .button-verbose__icon {
202
+ #{ $prefix }__icon {
124
203
  position: absolute;
125
204
  top: 50%;
126
- right: get("padding-x");
205
+ right: $padding-x;
127
206
  transform: translateY(-50%);
128
207
  font-size: get("icon-font-size");
129
208
  color: color.get(get("icon-color"));
130
209
  }
131
- .button-verbose--inline {
210
+ #{ $prefix }--inline {
132
211
  display: inline-block;
133
212
  margin-right: get("margin-inline");
213
+ &:last-child {
214
+ margin-right: 0;
215
+ }
134
216
  }
135
- .button-verbose--full-width {
217
+ #{ $prefix }--full-width {
136
218
  width: 100%;
137
219
  }
138
220
  }
@@ -27,48 +27,51 @@ $-fallbacks: (
27
27
  /// @prop {Boolean} border-radius [true] The border radius of the Callout.
28
28
  /// @prop {Dimension} border-width [1px] The border width of the Callout.
29
29
  /// @prop {CssValue} box-shadow [none] The box-shadow of the Callout.
30
- /// @prop {Boolean} left-cap [false] Toggles the use of left caps in styled callouts.
31
- /// @prop {Color} left-cap-color [green] Color of the left cap.
32
- /// @prop {Dimension} left-cap-width [0.5rem] Width of the left cap.
30
+ /// @prop {Boolean} caps-disabled [false] If set will not output any cap styles for both base and styles
31
+ /// @prop {Boolean} cap [false] Toggles the use of caps on default callout
32
+ /// @prop {Boolean} cap-side ["left"] The side that gets the cap
33
+ /// @prop {Number} cap-match-radius [true] The cap should have be rounded to match the parent's border radius
34
+ /// @prop {Map} cap-options The options for cap (see element.cap for options)
33
35
  /// @prop {Dimension} margin [2rem] Bottom margin of the Callout.
34
36
  /// @prop {Dimension} padding [1.5rem] Padding of the Callout.
35
37
 
36
38
  $config: (
37
39
  "background-color" : rgb(240, 240, 240),
38
40
  "border-color" : "rule-light",
39
- "border-radius" : true,
41
+ "border-radius" : 6px,
40
42
  "border-width" : 1px,
41
43
  "box-shadow" : none,
42
- "left-cap" : true,
43
- "left-cap-color" : rgb(160, 160, 160),
44
- "left-cap-width" : 0.5rem,
44
+ "caps-disabled" : false,
45
+ "cap" : false,
46
+ "cap-side" : "left",
47
+ "cap-match-radius" : false,
48
+ "cap-options" : (
49
+ "color" : rgb(160, 160, 160),
50
+ "size" : 0.5rem,
51
+ ),
45
52
  "margin" : 2rem,
46
53
  "padding" : 1.5rem,
47
54
  ) !default;
48
55
 
56
+ /// Styles Map (for unique variations/modifiers)
57
+ /// - Adjust this with set-styles
58
+ /// @type Map
59
+
49
60
  $styles: (
50
61
  "outline" : (
51
62
  "background-color": transparent
52
63
  ),
53
64
  "info" : (
54
65
  "background-color" : "info-background",
55
- "left-cap-color" : "info",
56
- "left-cap" : true,
57
66
  ),
58
67
  "warning" : (
59
68
  "background-color" : "info-background",
60
- "left-cap-color" : "info",
61
- "left-cap" : true,
62
69
  ),
63
70
  "success" : (
64
71
  "background-color" : "success-background",
65
- "left-cap-color" : "success",
66
- "left-cap" : true,
67
72
  ),
68
73
  "danger" : (
69
74
  "background-color" : "danger-background",
70
- "left-cap-color" : "danger",
71
- "left-cap" : true,
72
75
  ),
73
76
  ) !default;
74
77
 
@@ -92,34 +95,30 @@ $styles: (
92
95
  }
93
96
 
94
97
  /// Set callout style variations
95
- /// @param {Map} $changes Map of changes (options for style include [background-color, color, border, border-radius, border-color, box-shadow, padding, left-cap, left-cap-width, left-cap-color]
98
+ /// - Styles that modify padding when using mix-match caps on/off should be included last
99
+ /// @param {Map} $changes Map of changes (options for style include [background-color, color, border-color, border-radius, border-width, box-shadow, padding, cap, cap-options]
96
100
  /// @param {String} $merge-mode Merge mode see utils.map-merge() [null|"deep"|"overwrite"]
97
101
 
98
102
  @mixin set-styles($changes, $merge-mode: null) {
99
103
  $styles: utils.map-merge($styles, $changes, $merge-mode) !global;
100
104
  }
101
105
 
102
- @mixin -left-cap($color: get("left-cap-color")) {
103
- $left-padding: get-spacing-left(get("padding"));
104
- position: relative;
105
- border-top-left-radius: 0;
106
- border-bottom-left-radius: 0;
107
- padding-left: get("left-cap-width") + $left-padding;
108
- &::before {
109
- content: "";
110
- }
111
- }
112
-
113
106
  /// Output component stylesheet
114
107
  /// @example scss
115
108
  /// @include ulu.component-callout-styles();
116
109
 
117
110
  @mixin styles {
118
- $prefix: selector.class("callout");
119
-
111
+ $prefix: selector.class("callout");
112
+ $padding: get("padding");
113
+ $padding-info: utils.get-spacing($padding);
114
+ $cap-options: get("cap-options");
115
+ $cap-size: map.get($cap-options, "size");
116
+ $cap-side: get("cap-side");
117
+
120
118
  #{ $prefix } {
119
+ position: relative; // For cap
121
120
  background-color: color.get(get("background-color"));
122
- padding: get("padding");
121
+ padding: $padding;
123
122
  border: get("border-width") solid color.get(get("border-color"));
124
123
  margin-bottom: get("margin");
125
124
  box-shadow: get("box-shadow");
@@ -127,36 +126,96 @@ $styles: (
127
126
  & >:first-child {
128
127
  margin-top: 0;
129
128
  }
130
- &::before {
131
- position: absolute;
132
- left: 0 - get("border-width");
133
- top: 0 - get("border-width");
134
- bottom: 0 - get("border-width");
135
- width: get("left-cap-width");
136
- background-color: color.get(get("left-cap-color"));
129
+
130
+ // If we have left cap on default we reuse this for all
131
+ // Else we will print it out manually for each unique style
132
+ @if (not get("caps-disabled")) {
133
+ $cap-defaults: (
134
+ "offset" : get("border-width"),
135
+ "border-radius" : if(get("cap-match-radius"), get("border-radius"), null),
136
+ // "padding-adjust" : map.get($padding-info, $cap-side)
137
+ );
138
+ @include element.cap(
139
+ $side: $cap-side,
140
+ $options: map.merge($cap-defaults, $cap-options)
141
+ );
137
142
  }
138
- @if get("left-cap") {
139
- @include -left-cap();
143
+
144
+ // If the left cap is disabled we still include it's CSS but we hide it
145
+ // so that other styles of callouts can use it
146
+ @if (not get("cap")) {
140
147
  &::before {
141
- content: "";
148
+ content: none;
142
149
  }
150
+ // Since this is hidden and reused we need to not use padding adjust unless it
151
+ // was visible
152
+ } @else if ($cap-size) {
153
+ padding-#{ $cap-side }: calc(map.get($padding-info, $cap-side) + $cap-size);
143
154
  }
144
155
  }
156
+
157
+ @include -output-style-modifiers();
158
+ }
159
+
160
+ // Output Each Style Modifier
161
+ // - Note if cap is not disabled this will just update appearance values of cap styling
162
+ @mixin -output-style-modifiers() {
163
+ $prefix: selector.class("callout");
164
+ $caps-enabled: not get("caps-disabled");
165
+ $cap-side: get("cap-side");
166
+
145
167
  @each $name, $style in $styles {
168
+ $cap: map.get($style, "cap");
169
+ $padding: map.get($style, "padding");
170
+ $border-radius: map.get($style, "border-radius");
171
+ $background-color: map.get($style, "background-color");
172
+ $color: map.get($style, "color");
173
+ $border-color: map.get($style, "border-color");
174
+ $border-width: map.get($style, "border-width");
175
+ $box-shadow: map.get($style, "box-shadow");
176
+ $cap-match-radius: map.get($style, "cap-match-radius");
177
+
146
178
  #{ $prefix }--#{ $name } {
147
- background-color: color.get(map.get($style, "background-color"));
148
- color: color.get(map.get($style, "color"));
149
- border: map.get($style, "border");
150
- border-radius: map.get($style, "border-radius");
151
- border-color: color.get(map.get($style, "border-color"));
152
- box-shadow: map.get($style, "box-shadow");
153
- padding: map.get($style, "padding");
154
- &::before {
155
- background-color: color.get(map.get($style, "left-cap-color"));
156
- }
157
- @if map.get($style, "left-cap") {
158
- @if not get("left-cap") {
159
- @include -left-cap();
179
+ background-color: color.get($background-color);
180
+ color: color.get($color);
181
+ border-radius: $border-radius;
182
+ border-color: color.get($border-color);
183
+ border-width: $border-width;
184
+ box-shadow: $box-shadow;
185
+ padding: $padding;
186
+
187
+ @if ($cap and $caps-enabled) {
188
+ $match-radius: utils.if-type("bool", $cap-match-radius, get("cap-match-radius"));
189
+ // Padding adjust always has to be set (since size could change or padding)
190
+ $padding-info: utils.get-spacing(if($padding, $padding, get("padding")));
191
+ $cap-radius: utils.if-type("number", $border-radius, get("border-radius"));
192
+ $cap-options: utils.ensure-map(map.get($style, "cap-options"));
193
+ $cap-defaults: (
194
+ "size" : map.get(get("cap-options"), "size"),
195
+ "padding-adjust" : map.get($padding-info, $cap-side),
196
+ "offset" : $border-width,
197
+ "border-radius" : if($match-radius, $cap-radius, null)
198
+ );
199
+
200
+ @include element.cap-appearance(
201
+ $side: $cap-side,
202
+ $options: map.merge($cap-defaults, $cap-options),
203
+ $before: true
204
+ );
205
+
206
+ // Because the main callout's cap may not be visible
207
+ &::before {
208
+ content: "";
209
+ }
210
+ // If set to false remove the cap (if enabled) and reset default cap padding adjust
211
+ } @else if ($cap == false and $caps-enabled) {
212
+ // if this style doesn't set padding
213
+ @if (not $padding) {
214
+ $padding-info: utils.get-spacing(get("padding"));
215
+ padding-#{ $cap-side }: map.get($padding-info, $cap-side);
216
+ }
217
+ &::before {
218
+ content: none;
160
219
  }
161
220
  }
162
221
  }
@@ -30,6 +30,23 @@ $-fallbacks: (
30
30
 
31
31
  /// Module Settings
32
32
  /// @type Map
33
+ /// @prop {Boolean} text-alignment-matches [false] Toggles matching alignment.
34
+ /// @prop {Boolean} text-alignment-matches-center-only [true] Toggles matching alignment, but only if center.
35
+ /// @prop {Color} background-color [white] Background color of the component.
36
+ /// @prop {CssValue} box-shadow [true] Box shadow the captioned figure.
37
+ /// @prop {Dimension} margin-bottom [true] Bottom margin of the captioned figure.
38
+ /// @prop {Number} line-height [true] Line height of the captioned figure caption.
39
+ /// @prop {Dimension} caption-padding [0.5em] Padding of the captioned figure caption.
40
+ /// @prop {Color} color [null] Font color of the captioned figure caption.
41
+ /// @prop {String} type-size ["small"] Font size of the captioned figure caption.
42
+ /// @prop {Dimension} caption-max-width [min(100%, 15em)] Max width of the captioned figure caption.
43
+ /// @prop {Color} caption-background-color [rgba(255,255,255,0.7)] background color of the captioned figure caption.
44
+ /// @prop {CssValue} caption-backdrop-filter [blur(2px)] Filter of the backdrop of the captioned figure.
45
+ /// @prop {Color} traditional-caption-color [null] Traditional style for font color.
46
+ /// @prop {Color} traditional-caption-background-color [transparent] Traditional style for caption background color.
47
+ /// @prop {Dimension} traditional-caption-padding [0.5em] Traditional style for caption padding.
48
+ /// @prop {Dimension} traditional-caption-max-width [35em] Traditional style for caption max width.
49
+ /// @prop {CssValue} traditional-caption-text-align [right] Traditional style for caption text-align.
33
50
 
34
51
  $config: (
35
52
  "text-alignment-matches" : false,