@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
package/js/ui/slider.js CHANGED
@@ -5,19 +5,22 @@
5
5
  // Slider
6
6
  // =============================================================================
7
7
 
8
- // Version: 1.0.10
8
+ // Version: 1.0.11
9
9
 
10
10
  // Changes:
11
+ // 1.0.11 | Updates for ComponentInitializer
11
12
  // 1.0.10 | Fix bug when two and going in reverse
12
- // 1.0.9 | Fix bug when there are only 2 slides (not sliding correctly [revesers because of switchSlide])
13
- // this is addressed now and should slide infinitly between two slides
14
- // 1.0.8 | Change API, to elements object (from individaul arguments),
13
+ // 1.0.9 | Fix bug when there are only 2 slides (not sliding correctly [reverse because of switchSlide])
14
+ // this is addressed now and should slide infinity between two slides
15
+ // 1.0.8 | Change API, to elements object (from individual arguments),
15
16
  // Add the ability to specify the element to append controls within
16
17
  // 1.0.6 | Add transition class for changes during transition,
17
18
  // add will-change to the transition
18
- // 1.0.5 | Fix transtion event difference on windows, convert all
19
+ // 1.0.5 | Fix transition event difference on windows, convert all
19
20
  // async stuff to promises and simplify
20
- // 1.0.4 | Remove live region annoucement (only used if auto rotate)
21
+ // 1.0.4 | Remove live region announcement (only used if auto rotate)
22
+
23
+ // Todo: - Create destroy method to cleanup listeners
21
24
 
22
25
  // Reference: https://www.w3.org/WAI/tutorials/carousels/working-example/
23
26
  // https://www.w3.org/TR/wai-aria-practices/examples/carousel/carousel-1.html#
@@ -27,16 +30,29 @@
27
30
  // https://dev.opera.com/articles/css-will-change-property/
28
31
  // * Will Change use
29
32
 
33
+ import { ComponentInitializer } from "../utils/system.js";
34
+ import { wrapSettingString } from "../settings.js";
30
35
  import maintain from 'ally.js/maintain/_maintain';
31
36
  import { hasRequiredProps } from '@ulu/utils/object.js';
32
37
  import { trimWhitespace } from "@ulu/utils/string.js";
33
38
  import { debounce } from "@ulu/utils/performance.js";
34
39
  import { log, logError, logWarning } from "../utils/class-logger.js";
35
- import { getDatasetOptionalJson } from "../utils/dom.js";
36
- import { createPager } from "./overflow-scroller-pager.js";
37
- import { getName } from "../events/index.js";
40
+ import setupSwipeListener from "swipe-listener";
41
+
42
+ /**
43
+ * Slider Component Initializer
44
+ */
45
+ export const initializer = new ComponentInitializer({
46
+ type: "slider",
47
+ baseAttribute: "data-ulu-slider"
48
+ });
38
49
 
39
- const debugMode = false; // Global dev debug
50
+ const attrSelectorTrack = initializer.attributeSelector("track");
51
+ const attrSelectorTrackContainer = initializer.attributeSelector("track-container");
52
+ const attrSelectorControlContext = initializer.attributeSelector("control-context");
53
+ const attrSelectorSlide = initializer.attributeSelector("slide");
54
+
55
+ const instances = [];
40
56
  const reduceMotion = matchMedia('(prefers-reduced-motion: reduce)').matches;
41
57
  const eventOnce = { once: true };
42
58
  const cssDuration = d => `${ d }ms`;
@@ -56,52 +72,34 @@ const requiredElements = [
56
72
  ];
57
73
 
58
74
  /**
59
- * Default data attributes
75
+ * Initialize all sliders based on data attribute selectors
60
76
  */
61
- export const attrs = {
62
- init: "data-ulu-slider-init",
63
- slider: "data-ulu-slider",
64
- track: "data-ulu-slider-track",
65
- trackContainer: "data-ulu-slider-track-container",
66
- controls: "data-ulu-slider-control-context"
67
- };
68
-
69
- // Utils for selecting things based on attributes
70
- const attrSelector = key => `[${ attrs[key] }]`;
71
- const attrSelectorInitial = key => `${ attrSelector(key) }:not([${ attrs.init }])`;
72
-
73
- const defaults = {
74
- amount: createPager()
75
- };
76
-
77
- const instances = [];
78
-
79
77
  export function init() {
80
- document.addEventListener(getName("pageModified"), setup);
81
- setup();
82
- }
83
-
84
- export function setup() {
85
- const builders = document.querySelectorAll(attrSelectorInitial("slider"));
86
- builders.forEach(setupSlider);
78
+ initializer.init({
79
+ withData: true,
80
+ events: ["pageModified"],
81
+ setup({ element, data, initialize }) {
82
+ setupSlider(element, data);
83
+ initialize();
84
+ }
85
+ });
87
86
  }
88
87
 
89
- export function setupSlider(container) {
90
- container.setAttribute(attrs.init, "");
91
- const options = getDatasetOptionalJson(container, "uluScrollSlider");
92
- const config = Object.assign({}, defaults, options);
88
+ /**
89
+ * Setup single slider instance from querying via data attribute selectors
90
+ * @param {Node} container The slide container to query children from
91
+ * @param {Object} options Options for slider class
92
+ */
93
+ export function setupSlider(container, options) {
94
+ const config = Object.assign({}, options);
93
95
  const elements = {
94
96
  container,
95
- track: container.querySelector("[data-ulu-slider-track]"),
96
- trackContainer: container.querySelector("[data-ulu-slider-track-container]"),
97
- controlContext: container.querySelector("[data-ulu-slider-control-context]"),
98
- slides: container.querySelectorAll("[data-ulu-slider-slide]")
97
+ track: container.querySelector(attrSelectorTrack),
98
+ trackContainer: container.querySelector(attrSelectorTrackContainer),
99
+ controlContext: container.querySelector(attrSelectorControlContext),
100
+ slides: container.querySelectorAll(attrSelectorSlide)
99
101
  };
100
- // Add in any global settings
101
- // Object.assign(config, {
102
- // callbacks: {}
103
- // });
104
- // /
102
+
105
103
  // This was added because there was an issue on the new windows, need to test this
106
104
  // config.transitionFade = true;
107
105
  if (elements.slides.length) {
@@ -109,8 +107,14 @@ export function setupSlider(container) {
109
107
  }
110
108
  }
111
109
 
110
+ /**
111
+ * Class that controls slider
112
+ */
112
113
  export class Slider {
113
114
  static instances = [];
115
+ /**
116
+ * Default options for slider
117
+ */
114
118
  static defaults = {
115
119
  classAccessiblyHidden: "hidden-visually",
116
120
  namespace: "Slider",
@@ -120,18 +124,22 @@ export class Slider {
120
124
  transitionDuration: 700,
121
125
  transitionDurationExit: 400,
122
126
  transitionTimingFunction: "ease-in-out",
123
- buttonClasses: ["Slider__control-icon", "button", "button--icon"],
124
- iconClassesPrevious: ["css-icon", "css-icon--angle-left"],
125
- iconClassesNext: ["css-icon", "css-icon--angle-right"]
126
- // transition: true
127
+ buttonClasses: ["button", "button--icon"],
128
+ iconClassPrevious: wrapSettingString("iconClassPrevious"),
129
+ iconClassNext: wrapSettingString("iconClassNext"),
130
+ swipeEnabled: true,
131
+ swipeOptions: {
132
+ preventScroll: true
133
+ }
127
134
  }
128
- // constructor(container, title, trackContainer, track, slides, config, debug = false) {
129
- constructor(elements, config, debug = false) {
135
+ constructor(elements, config) {
130
136
  const options = Object.assign({}, Slider.defaults, config);
131
- this.debug = debugMode || debug;
132
137
  this.options = options;
133
138
  this.slide = null;
134
139
  this.index = null;
140
+ this.swipeInstance = null;
141
+ this.swipeListener = null;
142
+ this.swipeImageListener = null;
135
143
  this.transitioning = false;
136
144
 
137
145
  if (!hasRequiredProps(requiredElements)) {
@@ -399,13 +407,50 @@ export class Slider {
399
407
  const trackCss = trimWhitespace(this.trackCss());
400
408
  const trackContainerStyles = trimWhitespace(this.trackContainerStyles());
401
409
  const slideCss = trimWhitespace(this.slideCss());
410
+
402
411
  track.setAttribute("style", trackCss);
403
412
  trackContainer.setAttribute("style", trackContainerStyles);
413
+
404
414
  this.slides.forEach(slide => {
405
415
  slide.element.setAttribute("style", slideCss);
406
416
  slide.element.setAttribute('tabindex', '-1');
407
417
  });
418
+
408
419
  container.classList.add(this.getClass());
420
+
421
+ if (this.options.swipeEnabled) {
422
+ this.setupSwipe();
423
+ }
424
+ }
425
+ setupSwipe() {
426
+ const images = this.elements.track.querySelectorAll("img");
427
+
428
+ // Cache for future destroy
429
+ // this.swipeInstance = setupSwipeListener(track, {
430
+ // preventScroll: true
431
+ // });
432
+ this.swipeListener = (event) => {
433
+ this.onSwipe(event);
434
+ }
435
+ this.swipeImageListener = (event) => {
436
+ event.preventDefault(); // Allow swiping on images
437
+ };
438
+ this.slides.forEach(slide => {
439
+ const { element } = slide;
440
+ slide.swipeInstance = setupSwipeListener(element, this.options.swipeOptions);
441
+ element.addEventListener("swipe", this.swipeListener);
442
+ });
443
+
444
+ images.forEach(image => {
445
+ image.addEventListener('dragstart', this.swipeImageListener);
446
+ });
447
+ }
448
+ onSwipe(event) {
449
+ const { directions } = event.detail;
450
+ const method = directions.left ? "next" : directions.right ? "previous" : null;
451
+ if (method) {
452
+ this[method](event);
453
+ }
409
454
  }
410
455
  trackContainerStyles() {
411
456
  // Crop translated track
@@ -454,6 +499,7 @@ export class Slider {
454
499
  const button = document.createElement("button");
455
500
  button.classList.add(this.getClass("control-button"));
456
501
  button.classList.add(this.getClass(`control-button--${ action }`));
502
+
457
503
  button.classList.add(...this.options.buttonClasses);
458
504
  button.setAttribute("data-slider-control", action);
459
505
  button.setAttribute("type", "button");
@@ -509,21 +555,20 @@ export class Slider {
509
555
  const button = document.createElement("button");
510
556
  button.classList.add(this.getClass("nav-button"));
511
557
  button.setAttribute("type", "button");
512
- button.innerHTML = this.getNavContent(slide.number);
558
+ button.innerHTML = this.getNavContent(slide);
513
559
  slide.navButton = button; // Add reference to slide object
514
560
  button.addEventListener("click", this.goto.bind(this, index));
515
561
  return button;
516
562
  }
517
- // change to css-icon
518
563
  getControlContent(action) {
519
- const classes = this.options[action === "next" ? "iconClassesNext" : "iconClassesPrevious"];
564
+ const classes = this.options[action === "next" ? "iconClassNext" : "iconClassPrevious"];
520
565
  return `
521
- <span class="hidden-visually">${ action }</span>
522
- <span class="${ classes.join(' ') }" aria-hidden="true"></span>
566
+ <span class="${ this.options.classAccessiblyHidden }">${ action }</span>
567
+ <span class="${ this.getClass("control-icon") } ${ classes }" aria-hidden="true"></span>
523
568
  `;
524
569
  }
525
- getNavContent(number) {
526
- return `<span class="hidden-visually">Item ${ number }</span>`;
570
+ getNavContent(slide) {
571
+ return `<span class="${ this.options.classAccessiblyHidden }">Item ${ slide.number }</span>`;
527
572
  }
528
573
  emit(name, args) {
529
574
  if (this.options.events[name]) {
package/js/ui/tabs.js CHANGED
@@ -9,9 +9,7 @@
9
9
  // setting this up to destroy tab interface when ui layout changes?
10
10
 
11
11
  import AriaTablist from "aria-tablist";
12
-
13
- const initAttr = "data-ulu-tablist-init";
14
- const errorHeader = "[data-ulu-tablist] error:";
12
+ import { ComponentInitializer } from "../utils/system.js";
15
13
 
16
14
  /**
17
15
  * Array of current tab instances (exported if you need to interact with them)
@@ -19,13 +17,28 @@ const errorHeader = "[data-ulu-tablist] error:";
19
17
  */
20
18
  export const instances = [];
21
19
 
20
+ /**
21
+ * Tabs Component Initializer
22
+ */
23
+ export const initializer = new ComponentInitializer({
24
+ type: "tabs",
25
+ baseAttribute: "data-ulu-tablist"
26
+ });
27
+
22
28
  /**
23
29
  * Init all instances currently in document
24
- * @param {Object} options Options to serve as defaults
25
30
  */
26
- export function init(options = {}) {
31
+ export function init() {
27
32
  const initial = () => {
28
- initWithin(document, options);
33
+ initializer.init({
34
+ events: ["pageModified"],
35
+ withData: true,
36
+ setup({ element, data, initialize }) {
37
+ setup(element, data);
38
+ initialize();
39
+ }
40
+ });
41
+
29
42
  // Run this on page load, optionally exported for use when page is running
30
43
  instances.forEach(openByCurrentHash);
31
44
  };
@@ -35,22 +48,6 @@ export function init(options = {}) {
35
48
  } else {
36
49
  window.addEventListener("load", initial);
37
50
  }
38
- // Initialize when page updates/changes
39
- document.addEventListener("pageModified", e => initWithin(e.target, options));
40
- }
41
-
42
- /**
43
- * Init all tabs within a certain context
44
- * @param {Node} context Element to init within
45
- * @param {Object} options Options to serve as defaults
46
- */
47
- export function initWithin(context, options = {}) {
48
- if (!context) {
49
- console.warn("Missing context to initWithin, skipping init of tabs");
50
- return;
51
- }
52
- const tablists = context.querySelectorAll(`[data-ulu-tablist]:not([${ initAttr }])`);
53
- tablists.forEach(element => setup(element, options));
54
51
  }
55
52
 
56
53
  /**
@@ -60,17 +57,7 @@ export function initWithin(context, options = {}) {
60
57
  * @return {Object} Instance object
61
58
  */
62
59
  export function setup(element, options = {}) {
63
- let elementOptions = {};
64
-
65
- if (element.dataset.uluTablist) {
66
- try {
67
- elementOptions = JSON.parse(element.dataset.uluTablist);
68
- } catch(e) {
69
- console.error(errorHeader, "(JSON Parse for options)", element);
70
- }
71
- }
72
-
73
- const config = Object.assign({}, options, elementOptions);
60
+ const config = Object.assign({}, options);
74
61
 
75
62
  if (config.vertical) {
76
63
  config.allArrows = true;
@@ -91,8 +78,6 @@ export function setup(element, options = {}) {
91
78
  if (config.equalHeights) {
92
79
  setHeights(element);
93
80
  }
94
-
95
- element.setAttribute(initAttr, "");
96
81
 
97
82
  return instance;
98
83
  }
@@ -150,7 +135,9 @@ function setHeights(element) {
150
135
  if (panel.hidden) {
151
136
  panel.hidden = false;
152
137
  panelHeight = panel.offsetHeight;
153
- panel.hidden = true;
138
+ // This explicity needs "hidden" for aria-tablist (it checks this string value)
139
+ // Will break the initial window push state when using openWithUrlHash
140
+ panel.setAttribute("hidden", "hidden");
154
141
  }
155
142
  return panelHeight;
156
143
  });