@natachah/vanilla-frontend 0.4.0 → 1.0.0

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 (283) hide show
  1. package/.gitlab-ci.yml +22 -13
  2. package/LICENSE.md +1 -1
  3. package/docs/.vitepress/config.mts +101 -0
  4. package/docs/base/layout.md +77 -0
  5. package/docs/base/media.md +146 -0
  6. package/docs/base/reset.md +33 -0
  7. package/docs/base/typography.md +296 -0
  8. package/docs/classes/badge.md +146 -0
  9. package/docs/classes/breadcrumb.md +54 -0
  10. package/docs/classes/card.md +171 -0
  11. package/docs/classes/dropdown.md +180 -0
  12. package/docs/classes/grid.md +230 -0
  13. package/docs/classes/list.md +90 -0
  14. package/docs/components/button.md +254 -0
  15. package/docs/components/dialog.md +223 -0
  16. package/docs/components/disclosure.md +169 -0
  17. package/docs/components/form.md +514 -0
  18. package/docs/components/loading.md +53 -0
  19. package/docs/components/popover.md +270 -0
  20. package/docs/components/progress.md +33 -0
  21. package/docs/components/table.md +175 -0
  22. package/docs/index.md +27 -0
  23. package/docs/javascript/autofill.md +155 -0
  24. package/docs/javascript/check.md +53 -0
  25. package/docs/javascript/comfort.md +125 -0
  26. package/docs/javascript/consent.md +89 -0
  27. package/docs/javascript/cookie.md +33 -0
  28. package/docs/javascript/drawer.md +99 -0
  29. package/docs/javascript/form.md +130 -0
  30. package/docs/javascript/scroll.md +104 -0
  31. package/docs/javascript/slider.md +130 -0
  32. package/docs/javascript/sortable.md +127 -0
  33. package/docs/javascript/tabpanel.md +72 -0
  34. package/docs/javascript/toggle.md +182 -0
  35. package/docs/javascript/trap.md +33 -0
  36. package/docs/javascript/tree.md +220 -0
  37. package/docs/prologue/conventions.md +92 -0
  38. package/docs/prologue/release.md +44 -0
  39. package/docs/prologue/upgrade.md +21 -0
  40. package/docs/{pages/demo/layout.html → public/demo/demo.html} +1 -2
  41. package/docs/start/customization.md +184 -0
  42. package/docs/start/install.md +80 -0
  43. package/docs/start/mixin.md +203 -0
  44. package/docs/vuejs/ComponentPreview.vue +99 -0
  45. package/js/_slider.js +17 -1
  46. package/js/vanilla-frontend-doc.js +105 -0
  47. package/natachah-vanilla-frontend-1.0.0.tgz +0 -0
  48. package/package.json +11 -14
  49. package/public/404.html +22 -0
  50. package/public/assets/app.DsgDPRSA.js +1 -0
  51. package/public/assets/base_layout.md.CTGv6rTn.js +13 -0
  52. package/public/assets/base_layout.md.CTGv6rTn.lean.js +1 -0
  53. package/public/assets/base_media.md.CcuDUcF-.js +24 -0
  54. package/public/assets/base_media.md.CcuDUcF-.lean.js +1 -0
  55. package/public/assets/base_reset.md.DqIdqFRJ.js +3 -0
  56. package/public/assets/base_reset.md.DqIdqFRJ.lean.js +1 -0
  57. package/public/assets/base_typography.md.DV-ikqGZ.js +87 -0
  58. package/public/assets/base_typography.md.DV-ikqGZ.lean.js +1 -0
  59. package/public/assets/chunks/ComponentPreview.BW2s4ay5.js +27 -0
  60. package/public/assets/chunks/framework.CaiDwmc7.js +4 -0
  61. package/public/assets/chunks/theme.DL_11MHV.js +1 -0
  62. package/public/assets/classes_badge.md.BCGzPr6f.js +24 -0
  63. package/public/assets/classes_badge.md.BCGzPr6f.lean.js +1 -0
  64. package/public/assets/classes_breadcrumb.md.vU6jlo36.js +15 -0
  65. package/public/assets/classes_breadcrumb.md.vU6jlo36.lean.js +1 -0
  66. package/public/assets/classes_card.md.BZEh2l_B.js +41 -0
  67. package/public/assets/classes_card.md.BZEh2l_B.lean.js +1 -0
  68. package/public/assets/classes_dropdown.md.BLVw_xQY.js +70 -0
  69. package/public/assets/classes_dropdown.md.BLVw_xQY.lean.js +1 -0
  70. package/public/assets/classes_grid.md.47v-Ybqe.js +45 -0
  71. package/public/assets/classes_grid.md.47v-Ybqe.lean.js +1 -0
  72. package/public/assets/classes_list.md.BW9PWZV1.js +36 -0
  73. package/public/assets/classes_list.md.BW9PWZV1.lean.js +1 -0
  74. package/public/assets/components_button.md.vx3HzdpN.js +45 -0
  75. package/public/assets/components_button.md.vx3HzdpN.lean.js +1 -0
  76. package/public/assets/components_dialog.md.C-0gJGus.js +76 -0
  77. package/public/assets/components_dialog.md.C-0gJGus.lean.js +1 -0
  78. package/public/assets/components_disclosure.md.DeSRu9_P.js +53 -0
  79. package/public/assets/components_disclosure.md.DeSRu9_P.lean.js +1 -0
  80. package/public/assets/components_form.md.Be8d5WFv.js +122 -0
  81. package/public/assets/components_form.md.Be8d5WFv.lean.js +1 -0
  82. package/public/assets/components_loading.md.CKDG7z5x.js +4 -0
  83. package/public/assets/components_loading.md.CKDG7z5x.lean.js +1 -0
  84. package/public/assets/components_popover.md.CwgNttNc.js +102 -0
  85. package/public/assets/components_popover.md.CwgNttNc.lean.js +1 -0
  86. package/public/assets/components_progress.md.CNC7rJiC.js +6 -0
  87. package/public/assets/components_progress.md.CNC7rJiC.lean.js +1 -0
  88. package/public/assets/components_table.md.LyBkIDkF.js +75 -0
  89. package/public/assets/components_table.md.LyBkIDkF.lean.js +1 -0
  90. package/public/assets/index.md.CJiHmjB7.js +1 -0
  91. package/public/assets/index.md.CJiHmjB7.lean.js +1 -0
  92. package/public/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
  93. package/public/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
  94. package/public/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
  95. package/public/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
  96. package/public/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
  97. package/public/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
  98. package/public/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
  99. package/public/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
  100. package/public/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
  101. package/public/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
  102. package/public/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
  103. package/public/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
  104. package/public/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
  105. package/public/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
  106. package/public/assets/javascript_autofill.md.BewVUo4H.js +49 -0
  107. package/public/assets/javascript_autofill.md.BewVUo4H.lean.js +1 -0
  108. package/public/assets/javascript_check.md.B6ajE66i.js +13 -0
  109. package/public/assets/javascript_check.md.B6ajE66i.lean.js +1 -0
  110. package/public/assets/javascript_comfort.md.BRci3j7V.js +20 -0
  111. package/public/assets/javascript_comfort.md.BRci3j7V.lean.js +1 -0
  112. package/public/assets/javascript_consent.md.Bjv8ZDS6.js +29 -0
  113. package/public/assets/javascript_consent.md.Bjv8ZDS6.lean.js +1 -0
  114. package/public/assets/javascript_cookie.md.Dlhyk4Ha.js +2 -0
  115. package/public/assets/javascript_cookie.md.Dlhyk4Ha.lean.js +1 -0
  116. package/public/assets/javascript_drawer.md.BCJX3fL-.js +32 -0
  117. package/public/assets/javascript_drawer.md.BCJX3fL-.lean.js +1 -0
  118. package/public/assets/javascript_form.md.Cwf_gxLI.js +40 -0
  119. package/public/assets/javascript_form.md.Cwf_gxLI.lean.js +2 -0
  120. package/public/assets/javascript_scroll.md.BrJijWbF.js +30 -0
  121. package/public/assets/javascript_scroll.md.BrJijWbF.lean.js +1 -0
  122. package/public/assets/javascript_slider.md.DDO8wC4u.js +27 -0
  123. package/public/assets/javascript_slider.md.DDO8wC4u.lean.js +1 -0
  124. package/public/assets/javascript_sortable.md.BKyem7yw.js +35 -0
  125. package/public/assets/javascript_sortable.md.BKyem7yw.lean.js +1 -0
  126. package/public/assets/javascript_tabpanel.md.D9M-_xE0.js +19 -0
  127. package/public/assets/javascript_tabpanel.md.D9M-_xE0.lean.js +1 -0
  128. package/public/assets/javascript_toggle.md.C8582WNC.js +46 -0
  129. package/public/assets/javascript_toggle.md.C8582WNC.lean.js +1 -0
  130. package/public/assets/javascript_trap.md.Bc59YUng.js +2 -0
  131. package/public/assets/javascript_trap.md.Bc59YUng.lean.js +1 -0
  132. package/public/assets/javascript_tree.md.uc1UUsFV.js +72 -0
  133. package/public/assets/javascript_tree.md.uc1UUsFV.lean.js +1 -0
  134. package/public/assets/prologue_conventions.md.D8nVwlRS.js +34 -0
  135. package/public/assets/prologue_conventions.md.D8nVwlRS.lean.js +1 -0
  136. package/public/assets/prologue_release.md.CG6nuFnt.js +1 -0
  137. package/public/assets/prologue_release.md.CG6nuFnt.lean.js +1 -0
  138. package/public/assets/prologue_upgrade.md.CFxokaBG.js +1 -0
  139. package/public/assets/prologue_upgrade.md.CFxokaBG.lean.js +1 -0
  140. package/public/assets/start_customization.md.t-ze_NoQ.js +141 -0
  141. package/public/assets/start_customization.md.t-ze_NoQ.lean.js +1 -0
  142. package/public/assets/start_install.md.OluH7l11.js +46 -0
  143. package/public/assets/start_install.md.OluH7l11.lean.js +1 -0
  144. package/public/assets/start_mixin.md.D76cLRSX.js +85 -0
  145. package/public/assets/start_mixin.md.D76cLRSX.lean.js +1 -0
  146. package/public/assets/style.zIeGMibA.css +1 -0
  147. package/public/base/layout.html +37 -0
  148. package/public/base/media.html +179 -0
  149. package/public/base/reset.html +27 -0
  150. package/public/base/typography.html +320 -0
  151. package/public/bundles/vanilla-frontend-doc.css +1 -0
  152. package/public/bundles/vanilla-frontend-doc.js +1 -0
  153. package/public/bundles/vanilla-frontend.css +1 -0
  154. package/public/classes/badge.html +205 -0
  155. package/public/classes/breadcrumb.html +66 -0
  156. package/public/classes/card.html +222 -0
  157. package/public/classes/dropdown.html +147 -0
  158. package/public/classes/grid.html +278 -0
  159. package/public/classes/list.html +113 -0
  160. package/public/components/button.html +304 -0
  161. package/public/components/dialog.html +205 -0
  162. package/public/components/disclosure.html +130 -0
  163. package/public/components/form.html +589 -0
  164. package/public/components/loading.html +107 -0
  165. package/public/components/popover.html +257 -0
  166. package/public/components/progress.html +57 -0
  167. package/public/components/table.html +152 -0
  168. package/public/demo/demo.html +84 -0
  169. package/public/hashmap.json +1 -0
  170. package/public/index.html +25 -0
  171. package/public/javascript/autofill.html +152 -0
  172. package/public/javascript/check.html +64 -0
  173. package/public/javascript/comfort.html +123 -0
  174. package/public/javascript/consent.html +80 -0
  175. package/public/javascript/cookie.html +26 -0
  176. package/public/javascript/drawer.html +83 -0
  177. package/public/javascript/form.html +117 -0
  178. package/public/javascript/scroll.html +81 -0
  179. package/public/javascript/slider.html +78 -0
  180. package/public/javascript/sortable.html +112 -0
  181. package/public/javascript/tabpanel.html +70 -0
  182. package/public/javascript/toggle.html +201 -0
  183. package/public/javascript/trap.html +26 -0
  184. package/public/javascript/tree.html +175 -0
  185. package/public/prologue/conventions.html +58 -0
  186. package/public/prologue/release.html +25 -0
  187. package/public/prologue/upgrade.html +25 -0
  188. package/public/start/customization.html +165 -0
  189. package/public/start/install.html +70 -0
  190. package/public/start/mixin.html +109 -0
  191. package/public/vp-icons.css +0 -0
  192. package/sandbox/index.html +27 -0
  193. package/sandbox/js/sandbox-header.js +57 -0
  194. package/sandbox/js/sandbox-test.js +91 -0
  195. package/sandbox/pages/base/layout.html +80 -0
  196. package/sandbox/pages/base/media.html +52 -0
  197. package/sandbox/pages/base/typography.html +132 -0
  198. package/sandbox/pages/components/button.html +70 -0
  199. package/sandbox/pages/components/dialog.html +72 -0
  200. package/sandbox/pages/components/disclosure.html +77 -0
  201. package/sandbox/pages/components/form.html +164 -0
  202. package/sandbox/pages/components/loading.html +32 -0
  203. package/sandbox/pages/components/popover.html +119 -0
  204. package/sandbox/pages/components/progress.html +28 -0
  205. package/sandbox/pages/components/table.html +80 -0
  206. package/sandbox/pages/customs/badge.html +59 -0
  207. package/sandbox/pages/customs/breadcrumb.html +34 -0
  208. package/sandbox/pages/customs/card.html +71 -0
  209. package/sandbox/pages/customs/dropdown.html +70 -0
  210. package/sandbox/pages/customs/grid.html +109 -0
  211. package/sandbox/pages/customs/list.html +43 -0
  212. package/sandbox/pages/javascript/autofill.html +39 -0
  213. package/sandbox/pages/javascript/checkall.html +37 -0
  214. package/sandbox/pages/javascript/comfort.html +41 -0
  215. package/sandbox/pages/javascript/consent.html +45 -0
  216. package/sandbox/pages/javascript/form.html +50 -0
  217. package/sandbox/pages/javascript/scroll.html +44 -0
  218. package/sandbox/pages/javascript/slider.html +44 -0
  219. package/sandbox/pages/javascript/sortable.html +56 -0
  220. package/sandbox/pages/javascript/tabpanel.html +39 -0
  221. package/sandbox/pages/javascript/toggle.html +72 -0
  222. package/sandbox/pages/javascript/tree.html +96 -0
  223. package/sandbox/sandbox.js +26 -0
  224. package/sandbox/scss/sandbox-header.scss +93 -0
  225. package/scss/base/_reset.scss +2 -0
  226. package/scss/components/_badge.scss +2 -1
  227. package/scss/components/_dropdown.scss +2 -2
  228. package/scss/components/_group.scss +8 -4
  229. package/scss/components/_popover.scss +74 -0
  230. package/scss/components/index.scss +1 -0
  231. package/scss/themes/_root.scss +3 -0
  232. package/scss/vanilla-frontend-doc.scss +46 -1
  233. package/scss/vanilla-frontend-sandbox.scss +34 -0
  234. package/vite.config.js +30 -0
  235. package/docs/index.html +0 -36
  236. package/docs/main-demo.js +0 -2
  237. package/docs/main.js +0 -34
  238. package/docs/pages/base/layout.html +0 -131
  239. package/docs/pages/base/media.html +0 -142
  240. package/docs/pages/base/reset.html +0 -53
  241. package/docs/pages/base/typography.html +0 -334
  242. package/docs/pages/components/button.html +0 -202
  243. package/docs/pages/components/dialog.html +0 -336
  244. package/docs/pages/components/disclosure.html +0 -174
  245. package/docs/pages/components/form.html +0 -427
  246. package/docs/pages/components/loading.html +0 -58
  247. package/docs/pages/components/progress.html +0 -47
  248. package/docs/pages/components/table.html +0 -168
  249. package/docs/pages/customs/badge.html +0 -150
  250. package/docs/pages/customs/breadcrumb.html +0 -67
  251. package/docs/pages/customs/card.html +0 -185
  252. package/docs/pages/customs/drawer.html +0 -149
  253. package/docs/pages/customs/dropdown.html +0 -270
  254. package/docs/pages/customs/grid.html +0 -185
  255. package/docs/pages/customs/list.html +0 -112
  256. package/docs/pages/customs/slider.html +0 -273
  257. package/docs/pages/javascript/autofill.html +0 -170
  258. package/docs/pages/javascript/checkall.html +0 -59
  259. package/docs/pages/javascript/comfort.html +0 -146
  260. package/docs/pages/javascript/consent.html +0 -112
  261. package/docs/pages/javascript/cookie.html +0 -81
  262. package/docs/pages/javascript/form.html +0 -199
  263. package/docs/pages/javascript/scroll.html +0 -209
  264. package/docs/pages/javascript/sortable.html +0 -167
  265. package/docs/pages/javascript/tabpanel.html +0 -89
  266. package/docs/pages/javascript/toggle.html +0 -193
  267. package/docs/pages/javascript/trap.html +0 -89
  268. package/docs/pages/javascript/tree.html +0 -256
  269. package/docs/pages/quick-start/conventions.html +0 -112
  270. package/docs/pages/quick-start/customization.html +0 -184
  271. package/docs/pages/quick-start/installation.html +0 -97
  272. package/docs/pages/quick-start/mixins.html +0 -214
  273. package/docs/src/js/demo.js +0 -110
  274. package/docs/src/js/doc-code.js +0 -102
  275. package/docs/src/js/doc-demo.js +0 -14
  276. package/docs/src/js/doc-layout.js +0 -117
  277. package/docs/src/scss/demo.scss +0 -77
  278. package/docs/src/scss/layout.scss +0 -83
  279. package/docs/src/scss/style.scss +0 -278
  280. package/docs/vite.config.mjs +0 -23
  281. package/esbuild.mjs +0 -25
  282. package/natachah-vanilla-frontend-0.4.0.tgz +0 -0
  283. package/vitest.config.js +0 -8
@@ -0,0 +1,130 @@
1
+ <script setup>
2
+ import ComponentPreview from '../vuejs/ComponentPreview.vue'
3
+ </script>
4
+
5
+ # Slider <Badge type="warning" text="JS" />
6
+
7
+ ```scss
8
+ @use '@natachah/vanilla-frontend/scss/components/slider';
9
+ ```
10
+
11
+ ## Syntax
12
+
13
+ The slider is using the a `<div>` tag with the class `.slider.`
14
+
15
+ Each slide must be a `<div>` with `role="tabpanel"` and `aria-hidden="true"` attributes.
16
+
17
+ <ComponentPreview >
18
+ <div id="slider" class="slider">
19
+ <div id="slide1" role="tabpanel" aria-hidden="false"><img src="https://picsum.photos/id/1/300" alt="Image 1"></div>
20
+ <div id="slide2" role="tabpanel" aria-hidden="true"><img src="https://picsum.photos/id/2/300" alt="Image 2"></div>
21
+ <div id="slide3" role="tabpanel" aria-hidden="true"><img src="https://picsum.photos/id/3/300" alt="Image 3"></div>
22
+ </div>
23
+ <button aria-controls="slider" data-slider-prev>previous</button>
24
+ <div aria-controls="slider" role="tablist">
25
+ <button role="tab" aria-controls="slide1" aria-selected="true">1</button>
26
+ <button role="tab" aria-controls="slide2" aria-selected="false">2</button>
27
+ <button role="tab" aria-controls="slide3" aria-selected="false">3</button>
28
+ </div>
29
+ <button aria-controls="slider" data-slider-next>next</button>
30
+ </ComponentPreview>
31
+
32
+ ::: code-group
33
+
34
+ ```html
35
+ <div id="slider" class="slider">
36
+ <div id="slide1" role="tabpanel" aria-hidden="false"><img src="https://picsum.photos/id/1/300" alt="Image 1"></div>
37
+ <div id="slide2" role="tabpanel" aria-hidden="true"><img src="https://picsum.photos/id/2/300" alt="Image 2"></div>
38
+ <div id="slide3" role="tabpanel" aria-hidden="true"><img src="https://picsum.photos/id/3/300" alt="Image 3"></div>
39
+ </div>
40
+ <button aria-controls="slider" data-slider-prev>previous</button>
41
+ <div aria-controls="slider" role="tablist">
42
+ <button role="tab" aria-controls="slide1" aria-selected="true">1</button>
43
+ <button role="tab" aria-controls="slide2" aria-selected="false">2</button>
44
+ <button role="tab" aria-controls="slide3" aria-selected="false">3</button>
45
+ </div>
46
+ <button aria-controls="slider" data-slider-next>next</button>
47
+ ```
48
+
49
+ ```css [css properties]
50
+ --slider-columns
51
+ --slider-gap
52
+ ```
53
+
54
+ ```js
55
+ import Slider from "@natachah/vanilla-frontend/js/_slider"
56
+ const slider = document.getElementById('slider')
57
+ if (slider) const mySliderObj = new Slider(slider, {loop: true})
58
+ ```
59
+
60
+ :::
61
+
62
+ ### Indicators
63
+
64
+ You can create some indicators with a `<div>` tag with the `aria-controls="IdOfSlider"` and `role="tablist"` attributes.
65
+
66
+ Inside you must insert each slides indicators as `<button>` tag with `role="tab"`, `aria-controls="IdOfSlide"` and `aria-selected="false"` attributes.
67
+
68
+ ```html
69
+ <div aria-controls="slider" role="tablist">
70
+ <button role="tab" aria-controls="slide1" aria-selected="true">1</button>
71
+ <button role="tab" aria-controls="slide2" aria-selected="false">2</button>
72
+ <button role="tab" aria-controls="slide3" aria-selected="false">3</button>
73
+ </div>
74
+ ```
75
+
76
+ ### Navigation
77
+
78
+ You can create some prev/next navigation with some `<button>` tag with the `aria-controls="IdOfSlider"` and `data-slider-prev` or `data-slider-next` attributes.
79
+
80
+ ```html
81
+ <button aria-controls="slider" data-slider-prev>previous</button>
82
+ <button aria-controls="slider" data-slider-next>next</button>
83
+ ```
84
+
85
+ You must add the play and pause `<button>` if you use the `autoplay` version of the slider.
86
+
87
+ ```html
88
+ <button aria-controls="slider" data-slider-play>play</button>
89
+ <button aria-controls="slider" data-slider-pause>pause</button>
90
+ ```
91
+
92
+ ## Javascript
93
+
94
+ To work properly the slider required some javascript.
95
+
96
+ ### Options
97
+
98
+ | Name | Description | Value |
99
+ | --- | --- | --- |
100
+ | behavior | The scroll behavior inside the slider | `smooth` as string can be auto, smooth or instant |
101
+ | loop | If set to `true`, the slider will work as a carousel | `false` as boolean |
102
+ | autoplay | If set to `true`, the slider will automatically cycling | `false` as boolean |
103
+
104
+ ```js {2-4}
105
+ new Slider(mySliderDiv, {
106
+ behavior: 'smooth',
107
+ loop: false,
108
+ autoplay: false
109
+ })
110
+ ```
111
+
112
+ ### Methods
113
+
114
+ | Method | Description |
115
+ | --- | --- |
116
+ | goTo(index) | Go to a specific slide by index starting by 0 |
117
+ | next() | Go to the next slide |
118
+ | prev() | Go to the previous slide |
119
+
120
+ ### Events
121
+
122
+ | Event name | Description | Value |
123
+ |---|---|---|
124
+ | slider:changed | This event is fired when the slide has been changed | `current` as a index number |
125
+
126
+ ```js
127
+ document.getElementById('mySliderId').addEventListener('slider:changed', (e) => {
128
+ const theCurrentIndexSlide = e.detail.current
129
+ })
130
+ ```
@@ -0,0 +1,127 @@
1
+ <script setup>
2
+ import ComponentPreview from '../vuejs/ComponentPreview.vue'
3
+ </script>
4
+
5
+ # Sortable <Badge type="warning" text="JS" />
6
+
7
+ ```js
8
+ import Sortable from "@natachah/vanilla-frontend/js/_sortable"
9
+ ```
10
+
11
+ ## Syntax
12
+
13
+ The sortable component make you able to change the order of a list..
14
+
15
+ The list can be an `<ul>`, `<ol>`, `<div>` or `<tbody>` tag.
16
+
17
+ Each children must have a `draggable="false"` attribute. The attribute will be changed when drag start.
18
+
19
+ <ComponentPreview>
20
+ <ul d="mySortableList" class="demo-sortable">
21
+ <li draggable="false">Lorem, ipsum.</li>
22
+ <li draggable="false">Impedit, quod!</li>
23
+ <li draggable="false">Repudiandae, rerum.</li>
24
+ <li draggable="false">Ab, doloremque!</li>
25
+ <li draggable="false">Totam, consectetur.</li>
26
+ <li draggable="false">Laborum, cum!</li>
27
+ </ul>
28
+ </ComponentPreview>
29
+
30
+ ::: code-group
31
+
32
+ ```html
33
+ <ul id="mySortableList" class="demo-sortable">
34
+ <li draggable="false">Lorem, ipsum.</li>
35
+ <li draggable="false">Impedit, quod!</li>
36
+ <li draggable="false">Repudiandae, rerum.</li>
37
+ <li draggable="false">Ab, doloremque!</li>
38
+ <li draggable="false">Totam, consectetur.</li>
39
+ <li draggable="false">Laborum, cum!</li>
40
+ </ul>
41
+ ```
42
+
43
+ ```js
44
+ import Sortable from "@natachah/vanilla-frontend/js/_sortable"
45
+ const sortables = document.querySelectorAll('.demo-sortable')
46
+ if (sortables) sortables.forEach(sortable => new Sortable(sortable))
47
+ ```
48
+
49
+ :::
50
+
51
+ ## Options
52
+
53
+ ### Handles
54
+
55
+ You can decide which part of the item is draggable with the `data-handle="sortable"` attribute.
56
+
57
+
58
+ <ComponentPreview>
59
+ <ul id="mySortableListWithHandle" class="demo-sortable">
60
+ <li draggable="false">
61
+ <b data-handle="sortable">
62
+ Handle
63
+ </b>
64
+ Lorem, ipsum.
65
+ </li>
66
+ <li draggable="false">
67
+ <b data-handle="sortable">
68
+ Handle
69
+ </b>
70
+ Impedit, quod!
71
+ </li>
72
+ <li draggable="false">
73
+ <b data-handle="sortable">
74
+ Handle
75
+ </b>
76
+ Repudiandae, rerum.
77
+ </li>
78
+ </ul>
79
+ </ComponentPreview>
80
+
81
+ ```html
82
+ <ul id="mySortableListWithHandle" class="demo-sortable">
83
+ <li draggable="false">
84
+ <b data-handle="sortable">
85
+ Handle
86
+ </b>
87
+ Lorem, ipsum.
88
+ </li>
89
+ <li draggable="false">
90
+ <b data-handle="sortable">
91
+ Handle
92
+ </b>
93
+ Impedit, quod!
94
+ </li>
95
+ <li draggable="false">
96
+ <b data-handle="sortable">
97
+ Handle
98
+ </b>
99
+ Repudiandae, rerum.
100
+ </li>
101
+ </ul>
102
+ ```
103
+
104
+ ## Javascript
105
+
106
+ ### Methods
107
+
108
+ | Method | Description |
109
+ |---|---|
110
+ | resetEvents() | This method will reset the items and events |
111
+
112
+ ### Events
113
+
114
+ | Event name | Description | Value |
115
+ |---|---|---|
116
+ | sortable:drag | This event is fired when the you start dragging an item | items as a Collection and current as HTMLElement |
117
+ | sortable:drop | This event is fired when the you drop an item | items as a Collection and current as HTMLElement |
118
+
119
+ ```js
120
+ const mySortable = document.getElementById('mySortableList')
121
+
122
+ mySortable.addEventListener('sortable:drag', (e) => {
123
+ const theCollectionOfItems = e.detail.items
124
+ const thecurrentItem = e.detail.current
125
+ ...
126
+ })
127
+ ```
@@ -0,0 +1,72 @@
1
+ <script setup>
2
+ import ComponentPreview from '../vuejs/ComponentPreview.vue'
3
+ </script>
4
+
5
+ # Tabpanel <Badge type="warning" text="JS" />
6
+
7
+ ```js
8
+ import Tabpanel from "@natachah/vanilla-frontend/js/_tabpanel"
9
+ ```
10
+
11
+ ## Syntax
12
+
13
+ The tabpanel component make you able to make some elements visible by some `<button>`.
14
+
15
+ The button must have an `aria-controls="IdOfElement"`, an `aria-expanded` and a `aria-pressed` attributes.
16
+
17
+ <ComponentPreview>
18
+ <div id="myPanel">
19
+ <div role="tablist" aria-label="My demo tabpanel">
20
+ <button id="tab-1" role="tab" aria-controls="one">One</button>
21
+ <button id="tab-2" role="tab" aria-controls="two">Two</button>
22
+ </div>
23
+ <div id="one" role="tabpanel" aria-labelledby="tab-1">
24
+ This is the first panel
25
+ </div>
26
+ <div id="two" role="tabpanel" aria-labelledby="tab-2">
27
+ This is the seconde panel
28
+ </div>
29
+ </div>
30
+ </ComponentPreview>
31
+
32
+ ::: code-group
33
+
34
+ ```html
35
+ <div id="myPanel">
36
+ <div role="tablist" aria-label="My demo tabpanel">
37
+ <button id="tab-1" role="tab" aria-controls="one">One</button>
38
+ <button id="tab-2" role="tab" aria-controls="two">Two</button>
39
+ </div>
40
+ <div id="one" role="tabpanel" aria-labelledby="tab-1">
41
+ This is the first panel
42
+ </div>
43
+ <div id="two" role="tabpanel" aria-labelledby="tab-2">
44
+ This is the seconde panel
45
+ </div>
46
+ </div>
47
+ ```
48
+
49
+ ```js
50
+ import Tabpanel from '@natachah/vanilla-frontend/js/_tabpanel.js'
51
+ const tabpanel = document.getElementById('myPanel')
52
+ if (tabpanel) new Tabpanel(tabpanel)
53
+ ```
54
+
55
+ :::
56
+
57
+ ## Javascript
58
+
59
+ ### Events
60
+
61
+ | Event name | Description | Value |
62
+ |---|---|---|
63
+ | tabpanel:changed | This event is fired when the panel as been changed | current as a HTMLElement of the current button |
64
+
65
+ ```js
66
+ const myPanel = document.getElementById('myPanel')
67
+
68
+ myPanel.addEventListener('tabpanel:changed', (e) => {
69
+ const thecurrentButton = e.detail.current
70
+ console.log('It has changed !')
71
+ })
72
+ ```
@@ -0,0 +1,182 @@
1
+ <script setup>
2
+ import ComponentPreview from '../vuejs/ComponentPreview.vue'
3
+ </script>
4
+
5
+ # Toggle <Badge type="warning" text="JS" />
6
+
7
+ ```js
8
+ import Toggle from "@natachah/vanilla-frontend/js/_toggle"
9
+ ```
10
+
11
+ ## Syntax
12
+
13
+ The toggle component make you able to show/hide some elements by a `<button>`.
14
+
15
+ The button must have an `aria-controls="IdOfElement"`, an `aria-expanded` and a `aria-pressed` attributes.
16
+
17
+ <ComponentPreview height="200px">
18
+ <button id="toggle" class="demo-toggle" aria-controls="collapse" aria-expanded="false" aria-pressed="false">Toggle</button>
19
+ <div id="collapse" tabindex="0" hidden>
20
+ Hello there !
21
+ </div>
22
+ </ComponentPreview>
23
+
24
+ ::: code-group
25
+
26
+ ```html
27
+ <button id="toggle" class="demo-toggle" aria-controls="collapse" aria-expanded="false" aria-pressed="false">Toggle</button>
28
+ <div id="collapse" tabindex="0" hidden>
29
+ Hello there !
30
+ </div>
31
+ ```
32
+
33
+ ```js
34
+ import Toggle from "@natachah/vanilla-frontend/js/_toggle"
35
+ const toggles = document.querySelectorAll('.demo-toggle')
36
+ if (toggles) toggles.forEach(toggle => new Toggle(toggle))
37
+ ```
38
+
39
+ :::
40
+
41
+ ::: info
42
+ The `aria-controls` can have multiple IDs split by a comma.
43
+ :::
44
+
45
+ ## Options
46
+
47
+ ### By checkbox
48
+
49
+ The component also work with some form checkbox.
50
+
51
+ <ComponentPreview height="200px">
52
+ <fieldset>
53
+ <legend>Toggles</legend>
54
+ <input class="demo-toggle" id="cA" type="checkbox" aria-controls="checkboxA" aria-expanded="false">
55
+ <label for="cA">Toggle A</label>
56
+ <input class="demo-toggle" id="cB" type="checkbox" aria-controls="checkboxB" aria-expanded="false">
57
+ <label for="cB">Toggle B</label>
58
+ </fieldset>
59
+
60
+ <div id="checkboxA" hidden>Hello there, I'm A !</div>
61
+ <div id="checkboxB" hidden>Hello there, I'm B !</div>
62
+ </ComponentPreview>
63
+
64
+ ```html
65
+ <fieldset>
66
+ <legend>Toggles</legend>
67
+ <input class="demo-toggle" id="cA" type="checkbox" aria-controls="checkboxA" aria-expanded="false">
68
+ <label for="cA">Toggle A</label>
69
+ <input class="demo-toggle" id="cB" type="checkbox" aria-controls="checkboxB" aria-expanded="false">
70
+ <label for="cB">Toggle B</label>
71
+ </fieldset>
72
+
73
+ <div id="checkboxA" hidden>Hello there, I'm A !</div>
74
+ <div id="checkboxB" hidden>Hello there, I'm B !</div>
75
+ ```
76
+
77
+ ### By radio
78
+
79
+ The component also work with some form radio.
80
+
81
+ <ComponentPreview height="200px">
82
+ <fieldset>
83
+ <legend>Toggles</legend>
84
+ <input id="rA" class="demo-toggle" type="radio" name="radio" aria-controls="radioA" aria-expanded="false" value="a">
85
+ <label for="rA">Toggle A</label>
86
+ <input id="rB" class="demo-toggle" type="radio" name="radio" aria-controls="radioB" aria-expanded="false" value="b">
87
+ <label for="rB">Toggle B</label>
88
+ <input id="rC" class="demo-toggle" type="radio" name="radio" value="c">
89
+ <label for="rC">Toggle C</label>
90
+ </fieldset>
91
+
92
+ <div id="radioA" hidden>Hello there, I'm A !</div>
93
+ <div id="radioB" hidden>Hello there, I'm B !</div>
94
+ </ComponentPreview>
95
+
96
+ ```html
97
+ <fieldset>
98
+ <legend>Toggles</legend>
99
+ <input id="rA" class="demo-toggle" type="radio" name="radio" aria-controls="radioA" aria-expanded="false" value="a">
100
+ <label for="rA">Toggle A</label>
101
+ <input id="rB" class="demo-toggle" type="radio" name="radio" aria-controls="radioB" aria-expanded="false" value="b">
102
+ <label for="rB">Toggle B</label>
103
+ <input id="rC" class="demo-toggle" type="radio" name="radio" value="c">
104
+ <label for="rC">Toggle C</label>
105
+ </fieldset>
106
+
107
+ <div id="radioA" hidden>Hello there, I'm A !</div>
108
+ <div id="radioB" hidden>Hello there, I'm B !</div>
109
+ ```
110
+
111
+ ### By switch
112
+
113
+ It also work with the switch fields. You can tell when display the element via the data-toggle-when="value" attribute.
114
+
115
+ <ComponentPreview>
116
+ <input id="switch" class="demo-toggle" type="checkbox" role="switch" aria-controls="switchA switchB" aria-expanded="true">
117
+ <label for="switch">Switch</label>
118
+ <div id="switchA" data-toggle-when="true" hidden>This is TRUE</div>
119
+ <div id="switchB" data-toggle-when="false">This is FALSE</div>
120
+ </ComponentPreview>
121
+
122
+ ```html
123
+ <input id="switch" class="demo-toggle" type="checkbox" role="switch" aria-controls="switchA switchB" aria-expanded="true">
124
+ <label for="switch">Switch</label>
125
+ <div id="switchA" data-toggle-when="true" hidden>This is TRUE</div>
126
+ <div id="switchB" data-toggle-when="false">This is FALSE</div>
127
+ ```
128
+
129
+ ### By select
130
+
131
+ The component also work with `<select>` and it support the `<optgroup>`.
132
+
133
+ <ComponentPreview height="200px">
134
+ <select class="demo-toggle" name="select" aria-controls="selectA selectB selectG selectNot" aria-expanded="false">
135
+ <option value="null">--</option>
136
+ <option value="A">aaa</option>
137
+ <option value="B">bbb</option>
138
+ <optgroup label="mygroup">
139
+ <option value="C">ccc</option>
140
+ <option value="D">ddd</option>
141
+ </optgroup>
142
+ </select>
143
+
144
+ <div id="selectA" data-toggle-when="A" hidden>Hello there, I'm A !</div>
145
+ <div id="selectB" data-toggle-when="B" hidden>Hello there, I'm B !</div>
146
+ <div id="selectG" data-toggle-when="mygroup" hidden>Hello there, I'm GROUP for C or D !</div>
147
+ <div id="selectNot" data-toggle-when-not="A" hidden>Hello there, I'm present if not A !</div>
148
+ </ComponentPreview>
149
+
150
+ ```html
151
+ <select class="demo-toggle" name="select" aria-controls="selectA selectB selectG selectNot" aria-expanded="false">
152
+ <option value="null">--</option>
153
+ <option value="A">aaa</option>
154
+ <option value="B">bbb</option>
155
+ <optgroup label="mygroup">
156
+ <option value="C">ccc</option>
157
+ <option value="D">ddd</option>
158
+ </optgroup>
159
+ </select>
160
+
161
+ <div id="selectA" data-toggle-when="A" hidden>Hello there, I'm A !</div>
162
+ <div id="selectB" data-toggle-when="B" hidden>Hello there, I'm B !</div>
163
+ <div id="selectG" data-toggle-when="mygroup" hidden>Hello there, I'm GROUP for C or D !</div>
164
+ <div id="selectNot" data-toggle-when-not="A" hidden>Hello there, I'm present if not A !</div>
165
+ ```
166
+
167
+ ## Javascript
168
+
169
+
170
+ ### Events
171
+
172
+ | Event name | Description | Value |
173
+ |---|---|---|
174
+ | toggle:changed | This event is fired when the value as been changed | - |
175
+
176
+ ```js
177
+ const myToggle = document.getElementById('myToggle')
178
+
179
+ myToggle.addEventListener('toggle:changed', () => {
180
+ console.log('It has changed !')
181
+ })
182
+ ```
@@ -0,0 +1,33 @@
1
+ <script setup>
2
+ import ComponentPreview from '../vuejs/ComponentPreview.vue'
3
+ </script>
4
+
5
+ # Trap <Badge type="warning" text="JS" />
6
+
7
+ The trap component make you able to create a focus trap on an element.
8
+
9
+ ```js
10
+ import Trap from "@natachah/vanilla-frontend/js/utilities/_trap"
11
+ ```
12
+
13
+ ## Javascript
14
+
15
+ This component is only in javascript, to use it you must import the script file and create a `new Trap` object.
16
+
17
+ You can pass the element, an array of exclusions (= element that should not be inert) and an array of inclusions (= element that should be included into the trap) when initiate the component.
18
+
19
+ ```js
20
+ import Trap from "@natachah/vanilla-frontend/js/utilities/_trap"
21
+ new Trap(document.getElementById('drawer'), ['#backdrop','#toggleMenu'], ['#toggleMenu'])
22
+ ```
23
+
24
+ ### Methods
25
+
26
+ | Method | Description |
27
+ | --- | --- |
28
+ | focusOnFirst() | This will focus on the first focusable element |
29
+ | activate() | This method will activate the trap, it will also set `inert` and `aria-hidden` attributes on other HTMLElements |
30
+ | desactivate() | This method will desactivate the trap and remove related attributes |
31
+ | handleKeydown(e) | This method will keep the TAB focus inside the element |
32
+ | getFocusableElements() | This method will return an array of focusable items inside the element |
33
+ | getSiblingsOutside() | This method will return an array of HTMLElements outside of the element |