@ulu/frontend 0.1.0-beta.12 → 0.1.0-beta.121

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 (344) hide show
  1. package/CHANGELOG.md +717 -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 +7613 -0
  13. package/docs-dev/changelog/updates-and-changes/index.html +5109 -0
  14. package/docs-dev/demos/accordion/index.html +1496 -358
  15. package/docs-dev/demos/badge/index.html +5895 -0
  16. package/docs-dev/demos/badge-stack/index.html +5876 -0
  17. package/docs-dev/demos/basic-hero/index.html +111 -0
  18. package/docs-dev/demos/breadcrumb/index.html +5930 -0
  19. package/docs-dev/demos/breakpoints-manager/index.html +5906 -0
  20. package/docs-dev/demos/button/index.html +1537 -343
  21. package/docs-dev/demos/button-group/index.html +5892 -0
  22. package/docs-dev/demos/button-verbose/index.html +5898 -0
  23. package/docs-dev/demos/callout/index.html +1559 -379
  24. package/docs-dev/demos/captioned-figure/index.html +1492 -339
  25. package/docs-dev/demos/card/index.html +1592 -800
  26. package/docs-dev/demos/card-grid/index.html +6017 -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 +5900 -0
  32. package/docs-dev/demos/css-icons/index.html +1556 -380
  33. package/docs-dev/demos/data-grid/index.html +1492 -339
  34. package/docs-dev/demos/data-table/index.html +1634 -348
  35. package/docs-dev/demos/definition-list/index.html +6011 -0
  36. package/docs-dev/demos/details-group/index.html +5927 -0
  37. package/docs-dev/demos/donut-chart/index.html +5874 -0
  38. package/docs-dev/demos/file-save/index.html +1492 -339
  39. package/docs-dev/demos/flipcard/index.html +1492 -339
  40. package/docs-dev/demos/form-theme/index.html +1500 -347
  41. package/docs-dev/demos/headline-label/index.html +5862 -0
  42. package/docs-dev/demos/hero/index.html +12 -4
  43. package/docs-dev/demos/image-grid/index.html +12 -4
  44. package/docs-dev/demos/index.html +1493 -340
  45. package/docs-dev/demos/list-inline/index.html +1492 -339
  46. package/docs-dev/demos/list-lines/index.html +1492 -339
  47. package/docs-dev/demos/menu-stack/index.html +1652 -378
  48. package/docs-dev/demos/modals/index.html +1642 -366
  49. package/docs-dev/demos/nav-strip/index.html +1492 -339
  50. package/docs-dev/demos/overlay-section/index.html +1611 -388
  51. package/docs-dev/demos/panel/index.html +5922 -0
  52. package/docs-dev/demos/popovers/index.html +1752 -357
  53. package/docs-dev/demos/print/index.html +1492 -339
  54. package/docs-dev/demos/progress-bar/index.html +6030 -0
  55. package/docs-dev/demos/progress-circle/index.html +6197 -0
  56. package/docs-dev/demos/progress-donut/index.html +6107 -0
  57. package/docs-dev/demos/pull-quote/index.html +1492 -339
  58. package/docs-dev/demos/rail/index.html +5970 -0
  59. package/docs-dev/demos/rule/index.html +1509 -344
  60. package/docs-dev/demos/scroll-slider/index.html +72 -106
  61. package/docs-dev/demos/scrollpoints/index.html +1493 -340
  62. package/docs-dev/demos/skeleton/index.html +5918 -0
  63. package/docs-dev/demos/slider/index.html +12 -4
  64. package/docs-dev/demos/spoke-spinner/index.html +1492 -339
  65. package/docs-dev/demos/sticky-list/index.html +5883 -0
  66. package/docs-dev/demos/tabs/index.html +1565 -376
  67. package/docs-dev/demos/tag/index.html +1510 -345
  68. package/docs-dev/demos/theme-toggle/index.html +5939 -0
  69. package/docs-dev/demos/tile-grid-overlay/index.html +12 -4
  70. package/docs-dev/demos/tiles/index.html +1492 -339
  71. package/docs-dev/demos/tooltip/index.html +1492 -339
  72. package/docs-dev/demos/wysiwyg/index.html +5912 -0
  73. package/docs-dev/guide/building-stylesheet/index.html +1492 -339
  74. package/docs-dev/guide/developing-ulu-scss-module/index.html +1492 -339
  75. package/docs-dev/guide/index.html +1492 -339
  76. package/docs-dev/guide/updates-and-changes/index.html +5033 -0
  77. package/docs-dev/index.html +1492 -339
  78. package/docs-dev/javascript/events/index.html +1567 -376
  79. package/docs-dev/javascript/index.html +1492 -339
  80. package/docs-dev/javascript/settings/index.html +6065 -0
  81. package/docs-dev/javascript/ui-breakpoints/index.html +1506 -355
  82. package/docs-dev/javascript/ui-collapsible/index.html +1491 -340
  83. package/docs-dev/javascript/ui-details-group/index.html +5982 -0
  84. package/docs-dev/javascript/ui-dialog/index.html +1523 -357
  85. package/docs-dev/javascript/ui-flipcard/index.html +1552 -345
  86. package/docs-dev/javascript/ui-grid/index.html +1538 -413
  87. package/docs-dev/javascript/ui-modal-builder/index.html +1761 -470
  88. package/docs-dev/javascript/ui-overflow-scroller/index.html +1491 -340
  89. package/docs-dev/javascript/ui-overflow-scroller-pager/index.html +1491 -340
  90. package/docs-dev/javascript/ui-page/index.html +1491 -340
  91. package/docs-dev/javascript/ui-popover/index.html +1501 -354
  92. package/docs-dev/javascript/ui-print/index.html +1489 -346
  93. package/docs-dev/javascript/ui-print-details/index.html +1491 -340
  94. package/docs-dev/javascript/ui-programmatic-modal/index.html +1491 -340
  95. package/docs-dev/javascript/ui-proxy-click/index.html +1591 -355
  96. package/docs-dev/javascript/ui-resizer/index.html +1850 -434
  97. package/docs-dev/javascript/ui-scroll-slider/index.html +1531 -348
  98. package/docs-dev/javascript/ui-scrollpoint/index.html +1501 -357
  99. package/docs-dev/javascript/ui-slider/index.html +1708 -366
  100. package/docs-dev/javascript/ui-tabs/index.html +1523 -409
  101. package/docs-dev/javascript/ui-theme-toggle/index.html +6070 -0
  102. package/docs-dev/javascript/ui-tooltip/index.html +1501 -354
  103. package/docs-dev/javascript/utils-class-logger/index.html +1492 -341
  104. package/docs-dev/javascript/utils-css/index.html +5884 -0
  105. package/docs-dev/javascript/utils-dom/index.html +1523 -452
  106. package/docs-dev/javascript/utils-file-save/index.html +1491 -340
  107. package/docs-dev/javascript/utils-floating-ui/index.html +1491 -340
  108. package/docs-dev/javascript/utils-id/index.html +1491 -340
  109. package/docs-dev/javascript/utils-pause-youtube-video/index.html +1491 -340
  110. package/docs-dev/javascript/utils-system/index.html +6187 -0
  111. package/docs-dev/sass/base/color/index.html +1491 -340
  112. package/docs-dev/sass/base/elements/index.html +1492 -341
  113. package/docs-dev/sass/base/index/index.html +1492 -341
  114. package/docs-dev/sass/base/index.html +1492 -339
  115. package/docs-dev/sass/base/keyframes/index.html +1492 -341
  116. package/docs-dev/sass/base/layout/index.html +1492 -341
  117. package/docs-dev/sass/base/normalize/index.html +1491 -340
  118. package/docs-dev/sass/base/print/index.html +1492 -341
  119. package/docs-dev/sass/base/root/index.html +1495 -344
  120. package/docs-dev/sass/base/typography/index.html +1491 -340
  121. package/docs-dev/sass/components/accordion/index.html +1628 -436
  122. package/docs-dev/sass/components/adaptive-spacing/index.html +1491 -340
  123. package/docs-dev/sass/components/badge/index.html +1522 -353
  124. package/docs-dev/sass/components/badge-stack/index.html +6051 -0
  125. package/docs-dev/sass/components/basic-hero/index.html +6045 -0
  126. package/docs-dev/sass/components/breadcrumb/index.html +6092 -0
  127. package/docs-dev/sass/components/button/index.html +1491 -340
  128. package/docs-dev/sass/components/button-group/index.html +6043 -0
  129. package/docs-dev/sass/components/button-verbose/index.html +1613 -387
  130. package/docs-dev/sass/components/callout/index.html +1598 -388
  131. package/docs-dev/sass/components/captioned-figure/index.html +1491 -340
  132. package/docs-dev/sass/components/card/index.html +1601 -393
  133. package/docs-dev/sass/components/card-grid/index.html +1491 -340
  134. package/docs-dev/sass/components/counter-list/index.html +6127 -0
  135. package/docs-dev/sass/components/css-icon/index.html +1492 -341
  136. package/docs-dev/sass/components/data-grid/index.html +1511 -353
  137. package/docs-dev/sass/components/data-table/index.html +1510 -352
  138. package/docs-dev/sass/components/definition-list/index.html +6107 -0
  139. package/docs-dev/sass/components/fill-context/index.html +1491 -340
  140. package/docs-dev/sass/components/flipcard/index.html +1569 -387
  141. package/docs-dev/sass/components/flipcard-grid/index.html +1491 -340
  142. package/docs-dev/sass/components/form-theme/index.html +1718 -572
  143. package/docs-dev/sass/components/headline-label/index.html +6073 -0
  144. package/docs-dev/sass/components/hero/index.html +1499 -348
  145. package/docs-dev/sass/components/horizontal-rule/index.html +1491 -340
  146. package/docs-dev/sass/components/image-grid/index.html +1491 -340
  147. package/docs-dev/sass/components/index/index.html +1514 -349
  148. package/docs-dev/sass/components/index.html +1492 -339
  149. package/docs-dev/sass/components/links/index.html +1491 -340
  150. package/docs-dev/sass/components/list-inline/index.html +1491 -340
  151. package/docs-dev/sass/components/list-lines/index.html +1491 -340
  152. package/docs-dev/sass/components/list-ordered/index.html +1491 -340
  153. package/docs-dev/sass/components/list-unordered/index.html +1491 -340
  154. package/docs-dev/sass/components/menu-stack/index.html +1578 -378
  155. package/docs-dev/sass/components/modal/index.html +1576 -390
  156. package/docs-dev/sass/components/nav-strip/index.html +1499 -348
  157. package/docs-dev/sass/components/overlay-section/index.html +1499 -348
  158. package/docs-dev/sass/components/pager/index.html +1491 -340
  159. package/docs-dev/sass/components/panel/index.html +6273 -0
  160. package/docs-dev/sass/components/placeholder-block/index.html +1491 -340
  161. package/docs-dev/sass/components/popover/index.html +1561 -404
  162. package/docs-dev/sass/components/progress-bar/index.html +6252 -0
  163. package/docs-dev/sass/components/progress-circle/index.html +6144 -0
  164. package/docs-dev/sass/components/pull-quote/index.html +1491 -340
  165. package/docs-dev/sass/components/rail/index.html +6063 -0
  166. package/docs-dev/sass/components/ratio-box/index.html +1499 -348
  167. package/docs-dev/sass/components/rule/index.html +1492 -341
  168. package/docs-dev/sass/components/scroll-slider/index.html +1501 -362
  169. package/docs-dev/sass/components/skeleton/index.html +6101 -0
  170. package/docs-dev/sass/components/skip-link/index.html +1491 -340
  171. package/docs-dev/sass/components/slider/index.html +1581 -442
  172. package/docs-dev/sass/components/spoke-spinner/index.html +1493 -342
  173. package/docs-dev/sass/components/sticky-list/index.html +6263 -0
  174. package/docs-dev/sass/components/table-sticky/index.html +5707 -0
  175. package/docs-dev/sass/components/tabs/index.html +1519 -353
  176. package/docs-dev/sass/components/tag/index.html +1648 -403
  177. package/docs-dev/sass/components/tile-button/index.html +1491 -340
  178. package/docs-dev/sass/components/tile-grid/index.html +1491 -340
  179. package/docs-dev/sass/components/tile-grid-overlay/index.html +1491 -340
  180. package/docs-dev/sass/components/vignette/index.html +1499 -348
  181. package/docs-dev/sass/components/wysiwyg/index.html +1524 -355
  182. package/docs-dev/sass/core/breakpoint/index.html +1577 -374
  183. package/docs-dev/sass/core/button/index.html +1523 -370
  184. package/docs-dev/sass/core/color/index.html +1768 -485
  185. package/docs-dev/sass/core/cssvar/index.html +1491 -340
  186. package/docs-dev/sass/core/element/index.html +1837 -404
  187. package/docs-dev/sass/core/index.html +1491 -340
  188. package/docs-dev/sass/core/layout/index.html +1582 -412
  189. package/docs-dev/sass/core/path/index.html +1491 -340
  190. package/docs-dev/sass/core/selector/index.html +1491 -340
  191. package/docs-dev/sass/core/typography/index.html +1657 -448
  192. package/docs-dev/sass/core/units/index.html +1499 -342
  193. package/docs-dev/sass/core/utils/index.html +2781 -481
  194. package/docs-dev/sass/helpers/color/index.html +1491 -340
  195. package/docs-dev/sass/helpers/display/index.html +1492 -341
  196. package/docs-dev/sass/helpers/index/index.html +1491 -340
  197. package/docs-dev/sass/helpers/index.html +1492 -339
  198. package/docs-dev/sass/helpers/print/index.html +759 -298
  199. package/docs-dev/sass/helpers/typography/index.html +1491 -340
  200. package/docs-dev/sass/helpers/units/index.html +1491 -340
  201. package/docs-dev/sass/helpers/utilities/index.html +1495 -340
  202. package/docs-dev/sass/index.html +1492 -339
  203. package/js/events/index.js +17 -5
  204. package/js/index.js +1 -0
  205. package/js/settings.js +97 -0
  206. package/js/ui/breakpoints.js +19 -16
  207. package/js/ui/collapsible.js +8 -1
  208. package/js/ui/details-group.js +112 -0
  209. package/js/ui/dialog.js +103 -44
  210. package/js/ui/dialog.todo +2 -36
  211. package/js/ui/flipcard.js +37 -57
  212. package/js/ui/grid.js +15 -13
  213. package/js/ui/index.js +1 -0
  214. package/js/ui/modal-builder.js +127 -70
  215. package/js/ui/overflow-scroller.js +6 -4
  216. package/js/ui/page.js +2 -2
  217. package/js/ui/popover.js +38 -38
  218. package/js/ui/print.js +16 -25
  219. package/js/ui/programmatic-modal.js +9 -3
  220. package/js/ui/proxy-click.js +50 -36
  221. package/js/ui/resizer.js +408 -39
  222. package/js/ui/scroll-slider.js +24 -30
  223. package/js/ui/scrollpoint.js +29 -64
  224. package/js/ui/slider.js +108 -63
  225. package/js/ui/tabs.js +23 -36
  226. package/js/ui/theme-toggle.js +332 -94
  227. package/js/ui/tooltip.js +27 -32
  228. package/js/utils/class-logger.js +3 -3
  229. package/js/utils/css.js +13 -0
  230. package/js/utils/dom.js +23 -64
  231. package/js/utils/font-awesome.js +19 -0
  232. package/js/utils/index.js +2 -1
  233. package/js/utils/system.js +155 -0
  234. package/package.json +24 -9
  235. package/scss/README.md +9 -0
  236. package/scss/_breakpoint.scss +39 -5
  237. package/scss/_button.scss +7 -5
  238. package/scss/_color.scss +71 -40
  239. package/scss/_element.scss +124 -2
  240. package/scss/_layout.scss +7 -8
  241. package/scss/_typography.scss +15 -0
  242. package/scss/_units.scss +3 -2
  243. package/scss/_utils.scss +387 -16
  244. package/scss/base/_elements.scss +0 -1
  245. package/scss/base/_index.scss +1 -1
  246. package/scss/base/_keyframes.scss +15 -0
  247. package/scss/base/_layout.scss +1 -0
  248. package/scss/base/_print.scss +2 -0
  249. package/scss/base/_root.scss +2 -0
  250. package/scss/components/_accordion.scss +167 -110
  251. package/scss/components/_badge-stack.scss +84 -0
  252. package/scss/components/_badge.scss +30 -7
  253. package/scss/components/_basic-hero.scss +112 -0
  254. package/scss/components/_breadcrumb.scss +110 -0
  255. package/scss/components/_button-group.scss +90 -0
  256. package/scss/components/_button-verbose.scss +100 -18
  257. package/scss/components/_callout.scss +112 -53
  258. package/scss/components/_card-grid.scss +5 -2
  259. package/scss/components/_card.scss +216 -87
  260. package/scss/components/_counter-list.scss +151 -0
  261. package/scss/components/_css-icon.scss +27 -17
  262. package/scss/components/_data-grid.scss +55 -12
  263. package/scss/components/_data-table.scss +3 -0
  264. package/scss/components/_definition-list.scss +178 -0
  265. package/scss/components/_flipcard.scss +8 -3
  266. package/scss/components/_form-theme.scss +106 -95
  267. package/scss/components/_headline-label.scss +83 -0
  268. package/scss/components/_hero.scss +3 -10
  269. package/scss/components/_index.scss +79 -0
  270. package/scss/components/_menu-stack.scss +87 -23
  271. package/scss/components/_modal.scss +51 -23
  272. package/scss/components/_nav-strip.scss +2 -0
  273. package/scss/components/_overlay-section.scss +2 -5
  274. package/scss/components/_panel.scss +246 -0
  275. package/scss/components/_popover.scss +139 -38
  276. package/scss/components/_progress-bar.scss +260 -0
  277. package/scss/components/_progress-circle.scss +175 -0
  278. package/scss/components/_pull-quote.scss +1 -1
  279. package/scss/components/_rail.scss +127 -0
  280. package/scss/components/_ratio-box.scss +2 -5
  281. package/scss/components/_rule.scss +1 -0
  282. package/scss/components/_scroll-slider.scss +1 -5
  283. package/scss/components/_skeleton.scss +126 -0
  284. package/scss/components/_slider.scss +49 -72
  285. package/scss/components/_spoke-spinner.scss +2 -2
  286. package/scss/components/_sticky-list.scss +206 -0
  287. package/scss/components/_tabs.scss +22 -4
  288. package/scss/components/_tag.scss +49 -7
  289. package/scss/components/_vignette.scss +2 -5
  290. package/scss/components/_wysiwyg.scss +21 -13
  291. package/scss/helpers/_display.scss +15 -18
  292. package/scss/helpers/_print.scss +12 -7
  293. package/scss/helpers/_utilities.scss +62 -34
  294. package/types/events/index.d.ts +10 -1
  295. package/types/events/index.d.ts.map +1 -1
  296. package/types/index.d.ts +1 -0
  297. package/types/settings.d.ts +70 -0
  298. package/types/settings.d.ts.map +1 -0
  299. package/types/ui/breakpoints.d.ts +14 -14
  300. package/types/ui/breakpoints.d.ts.map +1 -1
  301. package/types/ui/collapsible.d.ts.map +1 -1
  302. package/types/ui/details-group.d.ts +38 -0
  303. package/types/ui/details-group.d.ts.map +1 -0
  304. package/types/ui/dialog.d.ts +20 -14
  305. package/types/ui/dialog.d.ts.map +1 -1
  306. package/types/ui/flipcard.d.ts +16 -10
  307. package/types/ui/flipcard.d.ts.map +1 -1
  308. package/types/ui/grid.d.ts +4 -6
  309. package/types/ui/grid.d.ts.map +1 -1
  310. package/types/ui/index.d.ts +1 -0
  311. package/types/ui/modal-builder.d.ts +116 -11
  312. package/types/ui/modal-builder.d.ts.map +1 -1
  313. package/types/ui/overflow-scroller.d.ts +2 -2
  314. package/types/ui/overflow-scroller.d.ts.map +1 -1
  315. package/types/ui/popover.d.ts +6 -7
  316. package/types/ui/popover.d.ts.map +1 -1
  317. package/types/ui/print.d.ts +0 -4
  318. package/types/ui/print.d.ts.map +1 -1
  319. package/types/ui/programmatic-modal.d.ts.map +1 -1
  320. package/types/ui/proxy-click.d.ts +19 -3
  321. package/types/ui/proxy-click.d.ts.map +1 -1
  322. package/types/ui/resizer.d.ts +116 -16
  323. package/types/ui/resizer.d.ts.map +1 -1
  324. package/types/ui/scroll-slider.d.ts +5 -7
  325. package/types/ui/scroll-slider.d.ts.map +1 -1
  326. package/types/ui/scrollpoint.d.ts +3 -8
  327. package/types/ui/scrollpoint.d.ts.map +1 -1
  328. package/types/ui/slider.d.ts +33 -14
  329. package/types/ui/slider.d.ts.map +1 -1
  330. package/types/ui/tabs.d.ts +6 -8
  331. package/types/ui/tabs.d.ts.map +1 -1
  332. package/types/ui/theme-toggle.d.ts +51 -7
  333. package/types/ui/theme-toggle.d.ts.map +1 -1
  334. package/types/ui/tooltip.d.ts +3 -5
  335. package/types/ui/tooltip.d.ts.map +1 -1
  336. package/types/utils/css.d.ts +11 -0
  337. package/types/utils/css.d.ts.map +1 -0
  338. package/types/utils/dom.d.ts +12 -32
  339. package/types/utils/dom.d.ts.map +1 -1
  340. package/types/utils/font-awesome.d.ts +5 -0
  341. package/types/utils/font-awesome.d.ts.map +1 -0
  342. package/types/utils/index.d.ts +1 -0
  343. package/types/utils/system.d.ts +113 -0
  344. package/types/utils/system.d.ts.map +1 -0
@@ -10,6 +10,7 @@
10
10
  @use "../utils";
11
11
  @use "../selector";
12
12
  @use "../color";
13
+ @use "../layout";
13
14
 
14
15
  // todo
15
16
  // sass color adjust for smooth transition. Add a comment for this if we can’t get to this
@@ -29,7 +30,7 @@
29
30
  /// @prop {Color} background-color [white] The background color of the card.
30
31
  /// @prop {Color} background-color-hover [rgb(242, 244, 246)] The background color of the card when hovered or focused.
31
32
  /// @prop {Dimension} max-width [28rem] The max-width of the card.
32
- /// @prop {Dimension} body-min-height [10rem] the min-height of the card body.
33
+ /// @prop {Dimension} body-min-height [8rem] the min-height of the card body.
33
34
  /// @prop {CssValue} border [1px solid #ccc] The card border.
34
35
  /// @prop {CssValue} border-hover [2px solid #278cca] The card border when hovered or focused.
35
36
  /// @prop {Dimension} header-margin [0.75em] The margin for the card header.
@@ -49,6 +50,7 @@
49
50
  /// @prop {String} clickable-card-interact-selector [&:hover, &:focus-within] The selectors for the cards being interacted with.
50
51
  /// @prop {Dimension} footer-padding-y [0.25rem] The top and bottom padding for the footer.
51
52
  /// @prop {Dimension} footer-min-height [2.5rem] The min height for the footer
53
+ /// @prop {Dimension} footer-justify [flex-end] Flex alignment of footer items (on end by default)
52
54
  /// @prop {String} prefix [card] The class name used to add card styling.
53
55
  /// @prop {Boolean} transition-enabled [true] Enable or disable transition for card.
54
56
  /// @prop {CssValue} transition-timing-function [ease-in-out] The timing function for the card animation.
@@ -57,11 +59,18 @@
57
59
  /// @prop {Boolean} image-transition-enabled [true] Enable or disable the image transition.
58
60
  /// @prop {Time} image-transition-duration [350ms] The duration of the image transition.
59
61
  /// @prop {CssValue} image-transition-timing-function [ease-in-out] The timing function for the image transition.
60
- /// @prop {List} image-icon-max-width [30rem] Max width for image when using the modifier on the .card__image--icon
62
+ /// @prop {Number} image-fit-padding [1rem] Padding on inside of image when using image fit modifier
63
+ /// @prop {CssValue} image-fit-filter [drop-shadow(0 0px 8px rgba(0, 0, 0, 0.2))] Filter to use on image when using image fit modifier
64
+ /// @prop {List} image-icon-max-width [10rem] Max width for image when using the modifier on the .card__image--icon
61
65
  /// @prop {List} image-transition-properties [(transform, filter)] The properties for the image transitions.
62
66
  /// @prop {String} horizontal-breakpoint [small] The breakpoint used to change the card to vertical if using the card--horizontal styling. Uses ulu's breakpoint module.
67
+ /// @prop {Unit} horizontal-min-height [10rem] Minimum height when horizontal
68
+ /// @prop {Unit} horizontal-max-width [40rem] Maximum width when horizontal
63
69
  /// @prop {Unit} horizontal-body-max-width [80rem] The max-width of body when horizontal
64
-
70
+ /// @prop {Boolean} aside-rule [false] Whether or not to have a rule separating body and aside
71
+ /// @prop {CssUnit} aside-rule-width [1px] Size of rule
72
+ /// @prop {CssUnit} aside-rule-color ["rule-light"] Color of rule
73
+ /// @prop {CssUnit} aside-rule-background-color [transparent] Color of aside background color
65
74
 
66
75
  $config: (
67
76
  "background-color" : white,
@@ -75,26 +84,32 @@ $config: (
75
84
  "clickable-card-enabled" : true,
76
85
  "clickable-card-selector" : "[data-ulu-proxy-click-init]",
77
86
  "clickable-card-interact-selector" : "&:hover, &:focus-within",
78
- "color" : null,
87
+ "color" : "type",
79
88
  "color-hover" : null,
80
89
  "footer-padding-y" : 0.25rem,
81
90
  "footer-min-height" : 2.5rem,
91
+ "footer-justify" : flex-end,
82
92
  "horizontal-breakpoint" : "small",
83
- "horizontal-image-width" : 33%,
84
- "horizontal-body-max-width" : 80rem,
93
+ "horizontal-image-width" : min(33%, 20rem),
94
+ "horizontal-min-height" : 20rem,
95
+ "horizontal-max-width" : 80rem,
96
+ "horizontal-main-max-width" : 40rem,
97
+ "horizontal-aside-width" : 40%,
85
98
  "header-margin" : 0.75em,
86
99
  "image-ratio" : 56.25%,
87
100
  "image-aspect-ratio": list.slash(5, 3),
88
- "image-background-color" : rgb(197, 197, 197),
101
+ "image-background-color" : rgb(238, 238, 238),
89
102
  "image-border" : null, // For when you have a margin
90
103
  "image-filter-hover" : null,
91
104
  "image-margin" : null,
92
- "image-icon-max-width" : 30rem,
105
+ "image-icon-max-width" : 8rem,
93
106
  "image-transform-hover" : null,
94
107
  "image-transition-duration" : 350ms,
95
108
  "image-transition-enabled" : true,
96
109
  "image-transition-properties" : (transform, filter),
97
110
  "image-transition-timing-function" : ease-in-out,
111
+ "image-fit-padding" : 1rem,
112
+ "image-fit-filter" : drop-shadow(0 0px 8px rgba(0, 0, 0, 0.3)),
98
113
  "margin-y" : 3rem,
99
114
  "max-width" : 28rem,
100
115
  "padding" : 2rem,
@@ -114,6 +129,10 @@ $config: (
114
129
  "overlay-background-color": rgba(0, 0, 0, 0.6),
115
130
  "overlay-shading": true,
116
131
  "overlay-body-padding-y": 1rem,
132
+ "aside-rule" : false,
133
+ "aside-rule-width" : 1px,
134
+ "aside-background-color" : transparent,
135
+ "aside-rule-color": "rule-light",
117
136
  ) !default;
118
137
 
119
138
  /// Change modules $config
@@ -134,34 +153,6 @@ $config: (
134
153
  @return utils.require-map-get($config, $name, "card [config]");
135
154
  }
136
155
 
137
- /// Mixin styles for card when it has proxy click enabled and is being interacted with (hover/focus)
138
- /// @param {Boolean} $hover [false] Apply styles when the card is being hover/focused within, else applies styles to rest state of a clickable card (one who has a proxy click setup)
139
- /// Prints component styles
140
- /// @example scss
141
- /// @include ulu.component-card-styles();
142
-
143
- @mixin when-clickable($hover: false) {
144
- $prefix: selector.class("card");
145
- @if (get("clickable-card-enabled") and get("clickable-card-selector")) {
146
- #{ $prefix } {
147
- &#{ get("clickable-card-selector") } {
148
- @if ($hover) {
149
- #{ get("clickable-card-interact-selector") } {
150
- @content;
151
- }
152
- } @else {
153
- @content;
154
- }
155
- }
156
- }
157
- }
158
- }
159
-
160
-
161
- @mixin shared-transition-styles() {
162
- transition-duration: get("transition-duration");
163
- transition-timing-function: get("transition-timing-function");
164
- }
165
156
  /// Prints component styles
166
157
  /// @demo card
167
158
  /// @example scss
@@ -183,14 +174,11 @@ $config: (
183
174
  flex-direction: column;
184
175
  justify-content: flex-end;
185
176
  max-width: get("max-width");
177
+
186
178
  // Border is on pseudo so that it's on top of image/etc
187
- &:after {
188
- position: absolute;
179
+ &::after {
180
+ @include layout.absolute-fill();
189
181
  content: if(get("border"), "", null);
190
- top: 0;
191
- bottom: 0;
192
- right: 0;
193
- left: 0;
194
182
  border: get("border");
195
183
  border-radius: get("border-radius");
196
184
  z-index: 4;
@@ -204,7 +192,7 @@ $config: (
204
192
  box-shadow: get("box-shadow-hover");
205
193
 
206
194
  @if (get("border-hover") or get("overlay-background-color-hover")) {
207
- &:after {
195
+ &::after {
208
196
  content: "";
209
197
  border: get("border-hover");
210
198
  background-color: color.get(get("overlay-background-color-hover"));
@@ -218,7 +206,8 @@ $config: (
218
206
  #{ $prefix },
219
207
  #{ $prefix }::after,
220
208
  #{ $prefix }__title {
221
- @include shared-transition-styles();
209
+ transition-duration: get("transition-duration");
210
+ transition-timing-function: get("transition-timing-function");
222
211
  transition-property: get("transition-properties");
223
212
  }
224
213
  }
@@ -228,14 +217,15 @@ $config: (
228
217
  margin-bottom: get("title-margin");
229
218
  display: block;
230
219
  font-weight: get("title-font-weight");
231
- @if get("title-color-hover") {
232
- &:hover,
233
- &:focus {
234
- color: color.get(get("title-color-hover"));
235
- }
236
- }
237
220
  #{ $prefix }__title-link {
238
221
  all: unset;
222
+ cursor: pointer;
223
+ @if get("title-color-hover") {
224
+ &:hover,
225
+ &:focus {
226
+ color: color.get(get("title-color-hover"));
227
+ }
228
+ }
239
229
  }
240
230
  }
241
231
  @if get("title-color-hover") {
@@ -267,11 +257,7 @@ $config: (
267
257
  }
268
258
  #{ $prefix }__image img,
269
259
  #{ $prefix}__image-media {
270
- position: absolute;
271
- top: 0;
272
- left: 0;
273
- width: 100%;
274
- height: 100%;
260
+ @include layout.absolute-fill(true);
275
261
  border: 0;
276
262
  object-fit: cover;
277
263
  transform-origin: center center;
@@ -290,17 +276,24 @@ $config: (
290
276
  }
291
277
  }
292
278
  }
293
- #{ $prefix }__body,
294
- #{ $prefix }__footer,
295
- #{ $prefix }__image--icon {
279
+
280
+ #{ $prefix }__footer {
281
+ padding: get("padding");
282
+ }
283
+ #{ $prefix }__main {
284
+ padding: get("padding");
285
+ }
286
+ #{ $prefix }__aside {
287
+ position: relative;
296
288
  padding: get("padding");
297
289
  }
298
290
 
299
291
  #{ $prefix }__image--icon {
300
- background-color: transparent;
292
+ // background-color: transparent;
301
293
  display: flex;
302
294
  align-items: center;
303
295
  justify-content: center;
296
+ // padding: 2rem;
304
297
  img {
305
298
  position: static;
306
299
  display: block;
@@ -316,9 +309,25 @@ $config: (
316
309
  z-index: 2; // Above image
317
310
  }
318
311
  #{ $prefix }__body {
312
+ display: flex;
313
+ flex-direction: column;
319
314
  flex-grow: 1;
320
315
  min-height: get("body-min-height");
321
316
  }
317
+ @if(get("aside-rule")) {
318
+ #{ $prefix }__aside {
319
+ background-color: color.get(get("aside-background-color"));
320
+ }
321
+ #{ $prefix }__aside::after {
322
+ content: "";
323
+ position: absolute;
324
+ top: calc(0rem - get("aside-rule-width") / 2);
325
+ left: get("padding");
326
+ right: get("padding");
327
+ height: get("aside-rule-width");
328
+ background-color: color.get(get("aside-rule-color"));
329
+ }
330
+ }
322
331
  // For actions/messages
323
332
  // - Layout as flex with min height to support buttons
324
333
  // and text without relying so much on padding
@@ -330,7 +339,7 @@ $config: (
330
339
  min-height: get("footer-min-height");
331
340
  display: flex;
332
341
  align-items: center;
333
- justify-content: flex-end;
342
+ justify-content: get("footer-justify");
334
343
  }
335
344
  // body + footer {
336
345
  // means body keeps before pseudo element while footer loses it
@@ -347,10 +356,12 @@ $config: (
347
356
  min-height: 0;
348
357
  padding-top: get("overlay-body-padding-y");
349
358
  padding-bottom: get("overlay-body-padding-y");
359
+
350
360
  &:not(:has(~ #{ $prefix }__footer)) {
351
361
  border-bottom-left-radius: get("border-radius");
352
362
  border-bottom-right-radius: get("border-radius");
353
363
  }
364
+
354
365
  @if (get("overlay-shading")) {
355
366
  margin-top: 4rem;
356
367
  &::before {
@@ -381,11 +392,7 @@ $config: (
381
392
  color: color.get(get("color-overlay"));
382
393
  }
383
394
  #{ $prefix }__image {
384
- position: absolute;
385
- top: 0;
386
- left: 0;
387
- bottom: 0;
388
- right: 0;
395
+ @include layout.absolute-fill();
389
396
  overflow: hidden;
390
397
  padding-top: 0;
391
398
  background-color: color.get(rgb(255, 255, 255));
@@ -399,40 +406,162 @@ $config: (
399
406
  border: 0;
400
407
  object-fit: cover;
401
408
  &::before {
402
- position: absolute;
409
+ @include layout.absolute-fill(true);
403
410
  display: block;
404
- top: 0;
405
- bottom: 0;
406
- left: 0;
407
- right: 0;
408
411
  background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0), rgba(0, 0, 0, 0.9));
409
412
  }
410
413
  }
411
414
  }
412
415
  }
413
416
 
417
+ // Incase this modifier is being used to hide the image
418
+ // not just to tell the component how to layout without image
419
+ // - Use case is hiding image when you can't control the output
420
+ // of the inside of the card (printed no matter what). We had
421
+ // this happen in HHRC, including this extra CSS for that
422
+ #{ $prefix }--no-image {
423
+ #{ $prefix }__image {
424
+ display: none;
425
+ }
426
+ }
427
+ #{ $prefix }--image-fit {
428
+ #{ $prefix }__image {
429
+ img {
430
+ padding: get("image-fit-padding");
431
+ object-fit: contain;
432
+ object-position: top center;
433
+ filter: get("image-fit-filter");
434
+ }
435
+ }
436
+ }
437
+ #{ $prefix }--fill {
438
+ max-width: none;
439
+ height: 100%;
440
+ margin: 0;
441
+ }
442
+
414
443
  @if (get("horizontal-breakpoint")) {
415
444
  @include breakpoint.min(get("horizontal-breakpoint")) {
416
- #{ $prefix }--horizontal {
417
- display: flex;
418
- justify-content: center;
419
- align-items: center;
420
- #{ $prefix }__image {
421
- width: get("horizontal-image-width");
422
- flex: 0 1 get("horizontal-image-width");
423
- // max-width: 30rem;
424
- min-height: 28rem;
425
- // padding-top: 0;
445
+ @include -horizontal-card-styles();
446
+ }
447
+ } @else {
448
+ @include -horizontal-card-styles();
449
+ }
450
+ }
451
+
452
+ @mixin -horizontal-card-styles() {
453
+ $prefix: selector.class("card");
454
+
455
+ #{ $prefix }--horizontal {
456
+ display: grid;
457
+ grid-template-columns: get("horizontal-image-width") 1fr;
458
+ // Creating the two rows (body and footer), if one is missing it's height will be 0
459
+ // Cannot use gap with the grid as it will create space when a row isn't needed
460
+ grid-template-rows: auto auto;
461
+ min-height: get("horizontal-min-height");
462
+ max-width: get("horizontal-max-width");
463
+
464
+ // When no footer remove extra row
465
+ &:not(:has(> #{ $prefix }__footer)) {
466
+ grid-template-rows: auto;
467
+ }
468
+ #{ $prefix }__image {
469
+ grid-column: 1 / 2;
470
+ grid-row: 1 / -1;
471
+ aspect-ratio: auto;
472
+ border-top-right-radius: 0;
473
+ border-bottom-left-radius: get("border-radius");
474
+ }
475
+ #{ $prefix }__body,
476
+ #{ $prefix }__footer {
477
+ grid-column: 2 / 3;
478
+ }
479
+ #{ $prefix }__body {
480
+ flex-direction: row;
481
+ justify-content: space-between;
482
+ }
483
+ #{ $prefix }__main {
484
+ flex-grow: 1;
485
+ max-width: get("horizontal-main-max-width");
486
+ }
487
+ #{ $prefix }__aside {
488
+ flex: 0 0 get("horizontal-aside-width");
489
+ height: 100%;
490
+ }
491
+ @if(get("aside-rule")) {
492
+ #{ $prefix }__aside::after {
493
+ content: "";
494
+ position: absolute;
495
+ top: get("padding");
496
+ left: calc(0rem - get("aside-rule-width") / 2);
497
+ height: calc(100% - get("padding") - get("padding"));
498
+ width: get("aside-rule-width");
499
+ background-color: get("aside-rule-color");
500
+ }
501
+ }
502
+
503
+ // For modern browsers
504
+ // Optionally use no-image modifier for older browser support
505
+ &:not(:has(#{ $prefix }__image)) {
506
+ @include -card-horizontal-no-image-styles();
507
+ }
508
+ &#{ $prefix }--no-image {
509
+ @include -card-horizontal-no-image-styles();
510
+ }
511
+ }
512
+ #{ $prefix }--horizontal-center {
513
+ #{ $prefix }__body {
514
+ align-self: center;
515
+ }
516
+ }
517
+ }
518
+
519
+
520
+ /// Mixin styles for card when it has proxy click enabled and is being interacted with (hover/focus)
521
+ /// @param {Boolean} $hover [false] Apply styles when the card is being hover/focused within, else applies styles to rest state of a clickable card (one who has a proxy click setup)
522
+ /// Prints component styles
523
+ /// @example scss
524
+ /// @include ulu.component-card-styles();
525
+
526
+ @mixin when-clickable($hover: false) {
527
+ $prefix: selector.class("card");
528
+ // When proxy click enabled
529
+ @if (get("clickable-card-enabled") and get("clickable-card-selector")) {
530
+ #{ $prefix }#{ get("clickable-card-selector") },
531
+ a#{ $prefix },
532
+ button#{ $prefix },
533
+ #{ $prefix }--clickable {
534
+ @if ($hover) {
535
+ #{ get("clickable-card-interact-selector") } {
536
+ @content;
426
537
  }
427
- #{ $prefix }__body {
428
- display: flex;
429
- flex: 1;
430
- flex-direction: column;
431
- justify-content: center;
432
- max-width: get("horizontal-body-max-width");
538
+ } @else {
539
+ @content;
540
+ }
541
+ }
542
+ // Without proxy click (only if interactive)
543
+ } @else {
544
+ a#{ $prefix },
545
+ button#{ $prefix },
546
+ #{ $prefix }--clickable {
547
+ @if ($hover) {
548
+ #{ get("clickable-card-interact-selector") } {
549
+ @content;
433
550
  }
551
+ } @else {
552
+ @content;
434
553
  }
435
554
  }
436
- }
555
+ }
437
556
  }
438
557
 
558
+
559
+ // Internal mixin for DRY
560
+ @mixin -card-horizontal-no-image-styles() {
561
+ $prefix: selector.class("card");
562
+ grid-template-columns: 1fr;
563
+ #{ $prefix }__body,
564
+ #{ $prefix }__footer {
565
+ grid-column: 1 / 2;
566
+ }
567
+ }
@@ -0,0 +1,151 @@
1
+ ////
2
+ /// @group counter-list
3
+ /// Outputs a styled list with counters
4
+
5
+ @use "sass:map";
6
+ @use "sass:selector" as sassSelector;
7
+
8
+ @use "../utils";
9
+ @use "../selector";
10
+ @use "../color";
11
+ @use "../breakpoint";
12
+
13
+ /// Module Settings
14
+ /// @type Map
15
+ /// @prop {List|CssUnit} margin [(2rem 0)] The top and bottom margin of the list.
16
+ /// @prop {List|CssUnit} item-margin [((0 0 1rem 0))] The margin applied to each list item.
17
+ /// @prop {Keyword} align-items [baseline] How to align the counter (flexbox align-items values)
18
+ /// @prop {CssUnit} counter-width [2.4em] The width and height (if height is falsy)
19
+ /// @prop {CssUnit} counter-height [null] The height (optional)
20
+ /// @prop {CssUnit} counter-gap [1em] The gap between the counter and the list item content.
21
+ /// @prop {String} counter-style [numeric] The list-style-type used for the counter.
22
+ /// @prop {Keyword|Percentage} counter-border-radius [50%] The border-radius of the counter element.
23
+ /// @prop {CssUnit} counter-font-size [1.2em] The font-size of the counter text.
24
+ /// @prop {Color|String} counter-color [white] The text color of the counter. Accepts color names or hex codes.
25
+ /// @prop {Color|String} counter-background-color ["accent"] The background color of the counter. Refers to a color in the color module.
26
+ /// @prop {String} extra-selector [null] Additional selectors to include table styling.
27
+
28
+ $config: (
29
+ "margin" : (2rem 0),
30
+ "item-margin" : (0 0 1rem 0),
31
+ "align-items" : baseline,
32
+ "counter-width" : 2.4em,
33
+ "counter-height" : null,
34
+ "counter-gap" : 1em,
35
+ "counter-style" : numeric,
36
+ "counter-border-radius" : 50%,
37
+ "counter-font-size" : 1.2em,
38
+ "counter-font-weight" : null,
39
+ "counter-font-family" : null,
40
+ "counter-color" : white,
41
+ "counter-background-color" : "accent",
42
+ "extra-selector" : null
43
+ ) !default;
44
+
45
+ /// Change modules $config
46
+ /// @param {Map} $changes Map of changes
47
+ /// @example scss
48
+ /// @include ulu.component-counter-list-set(( "property" : value ));
49
+
50
+ @mixin set($changes) {
51
+ $config: map.merge($config, $changes) !global;
52
+ }
53
+
54
+ /// Get a config option
55
+ /// @param {Map} $name Name of property
56
+ /// @example scss
57
+ /// @include ulu.component-counter-list-get("property");
58
+
59
+ @function get($name) {
60
+ @return utils.require-map-get($config, $name, "counter-list [config]");
61
+ }
62
+
63
+ /// Output counter-list component styles
64
+ /// @demo counter-list
65
+ /// @example html {preview}
66
+ /// <ol class="counter-list">
67
+ /// <li class="counter-list__item">This is a item that will get counted</li>
68
+ /// <li class="counter-list__item">Another item that has more content to show line wrapping. Lorem ipsum et depsi anu. Dolor et anu.</li>
69
+ /// <li class="counter-list__item">Small Amount of Text</li>
70
+ /// </ol>
71
+
72
+ @mixin styles {
73
+ $prefix: selector.class("counter-list");
74
+ $prefix-item: sassSelector.parse("#{ $prefix }__item");
75
+ $extra-selector: get("extra-selector");
76
+
77
+ $selector: $prefix;
78
+ $selector-item: sassSelector.parse("#{ $prefix } > li, #{ $prefix-item }");
79
+
80
+ @if ($extra-selector) {
81
+ $selector: sassSelector.parse("#{ $prefix }, #{ $extra-selector }");
82
+ $selector-item: sassSelector.parse("#{ $selector-item }, #{ $extra-selector } > li");
83
+ }
84
+
85
+ #{ $selector } {
86
+ margin: get("margin");
87
+ counter-reset: ulu-counter-list;
88
+ }
89
+
90
+ #{ $selector-item } {
91
+ $width: get("counter-width");
92
+ $height: utils.fallback(get("counter-height"), $width);
93
+
94
+ display: flex;
95
+ gap: get("counter-gap");
96
+ align-items: get("align-items");
97
+ margin: get("item-margin");
98
+ min-height: $height;
99
+ &::before {
100
+ display: flex;
101
+ align-items: center;
102
+ justify-content: center;
103
+ width: $width;
104
+ height: $height;
105
+ flex: 0 0 $width;
106
+ counter-increment: ulu-counter-list;
107
+ content: counter(ulu-counter-list, get("counter-style"));
108
+ font-size: get("counter-font-size");
109
+ font-family: get("counter-font-family");
110
+ font-weight: get("counter-font-weight");
111
+ color: color.get(get("counter-color"));
112
+ background-color: color.get(get("counter-background-color"));
113
+ border-radius: get("counter-border-radius");
114
+ }
115
+
116
+ // Keeping this could be useful
117
+ // but we need to think about how its setup
118
+ // - Probably should be a modifier (choice)
119
+ // - May need either option for how align-items is set (flex-start vs center)
120
+ // - This could be useful when used in grid
121
+ // - May need to be pervasive and not linked to a breakpoint (alternate style)
122
+ // - It's also just useful to know you could override the layout like this
123
+ // to get useful variations (maybe we don't need to include it but users
124
+ // can do specific)
125
+ // @if ( get("counter-mobile-toggle") ) {
126
+ // @include breakpoint.max("small") {
127
+ // padding-left: 0;
128
+ // padding-top: calc(get("counter-width") + get("counter-gap-mobile"));
129
+ // flex-direction: column;
130
+ // align-items: center;
131
+ // }
132
+ // }
133
+ }
134
+
135
+ // Modifiers
136
+ #{ $prefix }--alphabetical {
137
+ & > li::before,
138
+ & > #{ $prefix-item }::before {
139
+ content: counter(ulu-counter-list, upper-alpha);
140
+ }
141
+ }
142
+ #{ $prefix }--numeric {
143
+ & > li::before,
144
+ & > #{ $prefix-item }::before {
145
+ content: counter(ulu-counter-list, numeric);
146
+ }
147
+ }
148
+ #{ $prefix }--no-reset {
149
+ counter-reset: none;
150
+ }
151
+ }