@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,180 @@
1
+ <script setup>
2
+ import ComponentPreview from '../vuejs/ComponentPreview.vue'
3
+ </script>
4
+
5
+ # Dropdown <Badge type="warning" text="JS" />
6
+
7
+ This is the old version, if modern browser check the [/components/popover](Popover component)
8
+
9
+ ```scss
10
+ @use '@natachah/vanilla-frontend/scss/components/dropdown';
11
+ ```
12
+
13
+ ## Syntax
14
+
15
+ The dropdown is using a `<div>` tag with the class `.dropdown-js`. Inside of the element you must add a `<button>` and another `<div>` or an `<ul/ol>` tag.
16
+
17
+ <ComponentPreview height="200px">
18
+ <div class="dropdown-js">
19
+ <button aria-controls="myDropdown" aria-expanded="false" aria-pressed="false">
20
+ Dropdown
21
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"></path></svg>
22
+ </button>
23
+ <ul id="myDropdown" tabindex="0" hidden>
24
+ <li><a href="#">Subitem</a></li>
25
+ <li><a href="#">Subitem</a></li>
26
+ <li><a href="#">Subitem</a></li>
27
+ </ul>
28
+ </div>
29
+ </ComponentPreview>
30
+
31
+ ::: code-group
32
+
33
+ ```html
34
+ <div class="dropdown-js">
35
+ <button aria-controls="myDropdown" aria-expanded="false" aria-pressed="false">
36
+ Dropdown
37
+ <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 16 16"><path fill-rule="evenodd" d="M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z"></path></svg>
38
+ </button>
39
+ <ul id="myDropdown" tabindex="0" hidden>
40
+ <li><a href="#">Subitem</a></li>
41
+ <li><a href="#">Subitem</a></li>
42
+ <li><a href="#">Subitem</a></li>
43
+ </ul>
44
+ </div>
45
+ ```
46
+
47
+ ```css [css properties]
48
+ --dropdown-color
49
+ --dropdown-background
50
+ --dropdown-border-size
51
+ --dropdown-border-style
52
+ --dropdown-border-color
53
+ --dropdown-border-radius
54
+ --dropdown-padding-inline
55
+ --dropdown-padding-block
56
+ --dropdown-transition
57
+ --dropdown-decoration
58
+ --dropdown-outline-size
59
+ --dropdown-outline-style
60
+ --dropdown-outline-color
61
+ --dropdown-outline-offset
62
+ --dropdown-hover-color
63
+ --dropdown-hover-background
64
+ --dropdown-hover-border-color
65
+ --dropdown-focus-color
66
+ --dropdown-focus-background
67
+ --dropdown-focus-border-color
68
+ --dropdown-active-color
69
+ --dropdown-active-background
70
+ --dropdown-active-border-color
71
+ --dropdown-disabled-opacity
72
+ --dropdown-transition
73
+ --dropdown-svg-transform
74
+ --dropdown-index
75
+ --dropdown-offset
76
+ ```
77
+
78
+ ```js
79
+ import Dropdown from "@natachah/vanilla-frontend/js/_dropdown"
80
+ const dropdowns = document.querySelectorAll('.dropdown-js')
81
+ if (dropdowns) dropdowns.forEach(dropdown => new Dropdown(dropdown))
82
+ ```
83
+
84
+ :::
85
+
86
+ To work properly the `<button>` of the dropdown must have an `aria-controls="IdOfTheContent"`, an `aria-expanded` and an `aria-pressed` attributes.
87
+
88
+ You can also add some `<button>` or `<a role="button">` into the list to make them look as a vertical group.
89
+
90
+ ## Variants
91
+
92
+ You can group some dropdown by putting them in a `<div>` with the class `.group`.
93
+
94
+ <ComponentPreview height="200px">
95
+ <div class="group">
96
+ <div class="dropdown-js">
97
+ <button aria-controls="myDropdownA" aria-expanded="false" aria-pressed="false">
98
+ Dropdown A
99
+ </button>
100
+ <div id="myDropdownA" tabindex="0" hidden>
101
+ <p>AAA</p>
102
+ </div>
103
+ </div>
104
+ <div class="dropdown-js">
105
+ <button aria-controls="myDropdownB" aria-expanded="false" aria-pressed="false">
106
+ Dropdown B
107
+ </button>
108
+ <div id="myDropdownB" tabindex="0" hidden>
109
+ <p>BBB</p>
110
+ </div>
111
+ </div>
112
+ <div class="dropdown-js">
113
+ <button aria-controls="myDropdownC" aria-expanded="false" aria-pressed="false">
114
+ Dropdown C
115
+ </button>
116
+ <div id="myDropdownC" tabindex="0" hidden>
117
+ <p>CCC</p>
118
+ </div>
119
+ </div>
120
+ </div>
121
+ </ComponentPreview>
122
+
123
+ ::: code-group
124
+ ```html
125
+ <div class="group">
126
+ <div class="dropdown-js">
127
+ <button aria-controls="myDropdownA" aria-expanded="false" aria-pressed="false">
128
+ Dropdown A
129
+ </button>
130
+ <div id="myDropdownA" tabindex="0" hidden>
131
+ <p>AAA</p>
132
+ </div>
133
+ </div>
134
+ <div class="dropdown-js">
135
+ <button aria-controls="myDropdownB" aria-expanded="false" aria-pressed="false">
136
+ Dropdown B
137
+ </button>
138
+ <div id="myDropdownB" tabindex="0" hidden>
139
+ <p>BBB</p>
140
+ </div>
141
+ </div>
142
+ <div class="dropdown-js">
143
+ <button aria-controls="myDropdownC" aria-expanded="false" aria-pressed="false">
144
+ Dropdown C
145
+ </button>
146
+ <div id="myDropdownC" tabindex="0" hidden>
147
+ <p>CCC</p>
148
+ </div>
149
+ </div>
150
+ </div>
151
+ ```
152
+
153
+ ```scss
154
+ @use '@natachah/vanilla-frontend/scss/components/group';
155
+ ```
156
+ :::
157
+
158
+ ## Javascript
159
+
160
+ This component require some javascript, to use it you must import the Toggle file and create a `new Toggle` object.
161
+
162
+ ```js
163
+ new Toggle(myDropdown, {
164
+ closable:false // The ability to close the dropdown when click outside
165
+ })
166
+ ```
167
+
168
+ ### Events
169
+
170
+ | Event name | Description | Value |
171
+ |---|---|---|
172
+ | dropdown:changed | When toggle the `<button>` | `isOpen` as a `boolean` |
173
+
174
+
175
+ ```js
176
+ const dropdown = document.getElementById('myDropdown')
177
+ dropdown.addEventListener('dropdown:changed', (e) => {
178
+ const isDropdownOpen = e.detail.isOpen
179
+ })
180
+ ```
@@ -0,0 +1,230 @@
1
+ <script setup>
2
+ import ComponentPreview from '../vuejs/ComponentPreview.vue'
3
+ </script>
4
+
5
+ # Grid
6
+
7
+ A simple way to create some grids into your layout.
8
+
9
+ ```scss
10
+ @use '@natachah/vanilla-frontend/scss/components/grid';
11
+ ```
12
+
13
+ There is two types of grid, the basic and the flexible. USe what is best for your design !
14
+
15
+ ## Syntax
16
+
17
+ ### Grid
18
+
19
+ You can create a basic grid via the `.grid` class.
20
+
21
+ <ComponentPreview>
22
+ <div class="grid" style="--grid-columns:8">
23
+ <div>1</div>
24
+ <div>2</div>
25
+ <div>3</div>
26
+ <div>4</div>
27
+ <div>5</div>
28
+ <div>6</div>
29
+ <div>7</div>
30
+ <div>8</div>
31
+ <div>9</div>
32
+ <div>10</div>
33
+ <div>11</div>
34
+ <div>12</div>
35
+ </div>
36
+ </ComponentPreview>
37
+
38
+ ::: code-group
39
+ ```html
40
+ <div class="grid" style="--grid-columns:8">
41
+ <div>Col 1</div>
42
+ <div>Col 2</div>
43
+ <div>Col 3</div>
44
+ <div>...</div>
45
+ </div>
46
+ ```
47
+
48
+ ```css [css properties]
49
+ --grid-columns: 12;
50
+ --grid-gap-inline: 1rem;
51
+ --grid-gap-block: 1rem;
52
+ --grid-min-column-size: 0%;
53
+ --grid-min-columns: auto-fit;
54
+ ```
55
+ :::
56
+
57
+ ### Flex grid
58
+
59
+ You can create a flexible grid via the `.flex-grid` class.
60
+
61
+ <ComponentPreview>
62
+ <div class="flex-grid" style="--grid-columns:8; --grid-grow:0">
63
+ <div>1</div>
64
+ <div>2</div>
65
+ <div>3</div>
66
+ <div>4</div>
67
+ <div>5</div>
68
+ <div>6</div>
69
+ <div>7</div>
70
+ <div>8</div>
71
+ <div>9</div>
72
+ <div>10</div>
73
+ <div>11</div>
74
+ <div>12</div>
75
+ </div>
76
+ </ComponentPreview>
77
+
78
+ ::: code-group
79
+ ```html
80
+ <div class="flex-grid" style="--grid-columns:8; --grid-grow:0">
81
+ <div>1</div>
82
+ <div>2</div>
83
+ <div>3</div>
84
+ <div>...</div>
85
+ </div>
86
+ ```
87
+
88
+ ```css [css properties]
89
+ --grid-columns: 12;
90
+ --grid-gap-inline: 1rem;
91
+ --grid-gap-block: 1rem;
92
+ --grid-min-column-size: 0%;
93
+ --grid-min-columns: auto-fit;
94
+ --grid-grow: 1;
95
+ ```
96
+ :::
97
+
98
+ ## Responsive
99
+
100
+ There is multiple way to make them responsive, but a simple one is to change the CSS custom properties as:
101
+
102
+ ```scss
103
+ --grid-columns: 6; // The maximum number of columns
104
+ --grid-min-column-size: 120px; // The minimum width of a column
105
+ ```
106
+
107
+ <ComponentPreview>
108
+ <div class="grid" style="--grid-columns: 6;--grid-min-column-size: 120px;">
109
+ <div>1</div>
110
+ <div>2</div>
111
+ <div>3</div>
112
+ <div>4</div>
113
+ <div>5</div>
114
+ <div>6</div>
115
+ <div>7</div>
116
+ <div>8</div>
117
+ </div>
118
+ </ComponentPreview>
119
+
120
+ Same thing for the Flex grid:
121
+
122
+ <ComponentPreview>
123
+ <div class="flex-grid" style="--grid-columns: 6;--grid-min-column-size: 120px;">
124
+ <div>1</div>
125
+ <div>2</div>
126
+ <div>3</div>
127
+ <div>4</div>
128
+ <div>5</div>
129
+ <div>6</div>
130
+ <div>7</div>
131
+ <div>8</div>
132
+ </div>
133
+ </ComponentPreview>
134
+
135
+ ## Columns
136
+
137
+ ### Offset
138
+
139
+ To make a column ossfet with `.grid`, change the properties `--grid-min-columns` to a fixed number, and add the properties `grid-column-start` and `grid-column-end` into the column.
140
+
141
+ <ComponentPreview>
142
+ <div class="grid" style="--grid-min-columns:4">
143
+ <div>Grid 1</div>
144
+ <div>Grid 2</div>
145
+ <div style="grid-column-start: 4;grid-column-end: 5;">Offset</div>
146
+ </div>
147
+ </ComponentPreview>
148
+
149
+ ```html
150
+ <div class="grid" style="--grid-min-columns:4">
151
+ <div>Grid 1</div>
152
+ <div>Grid 2</div>
153
+ <div style="grid-column-start: 4;grid-column-end: 5;">Offset</div>
154
+ </div>
155
+ ```
156
+
157
+ But for `.flex-grid` you must calculate the percentage of the offset and set it as a `margin-left`. Or you can simply use the mixin `flex-grid-offset-column()` and pass as parameter the number of columns you want to offset (by default it's one);
158
+
159
+ <ComponentPreview>
160
+ <div class="flex-grid" style="--grid-columns:4">
161
+ <div>Flex 1</div>
162
+ <div>Flex 2</div>
163
+ <div id="flexGridDemoOffset">Offset</div>
164
+ </div>
165
+ </ComponentPreview>
166
+
167
+ ::: code-group
168
+ ```html
169
+ <div class="flex-grid" style="--grid-columns:4">
170
+ <div>Flex 1</div>
171
+ <div>Flex 2</div>
172
+ <div id="flexGridDemoOffset">Offset</div>
173
+ </div>
174
+ ```
175
+ ```scss
176
+ @use '@natachah/vanilla-frontend/scss/abstracts/mixins' as *;
177
+
178
+ #flexGridDemoOffset {
179
+ @include flex-grid-offset-column()
180
+ }
181
+
182
+ ```
183
+ :::
184
+
185
+ ### Width
186
+
187
+ To make a column wider with `.grid`, change the properties `grid-column-start` and `grid-column-end` of the column.
188
+
189
+ <ComponentPreview>
190
+ <div class="grid" style="--grid-columns:4">
191
+ <div>Grid 1</div>
192
+ <div>Grid 2</div>
193
+ <div style="grid-column-start: 3;grid-column-end: 5;">Wider</div>
194
+ </div>
195
+ </ComponentPreview>
196
+
197
+ ```html
198
+ <div class="grid" style="--grid-columns:4">
199
+ <div>Grid 1</div>
200
+ <div>Grid 2</div>
201
+ <div style="grid-column-start: 3;grid-column-end: 5;">Wider</div>
202
+ </div>
203
+ ```
204
+
205
+ But for `.flex-grid` you must calculate the percentage of the width and set it as a `flex-basis`. Or you can simply use the mixin `flex-grid-wider-column()` and pass as parameter the number of columns you want to take *(by default it's two)*.
206
+
207
+ <ComponentPreview>
208
+ <div class="flex-grid" style="--grid-columns:4">
209
+ <div>Flex 1</div>
210
+ <div>Flex 2</div>
211
+ <div id="flexGridDemoWider">Wider</div>
212
+ </div>
213
+ </ComponentPreview>
214
+
215
+ ::: code-group
216
+ ```html
217
+ <div class="flex-grid" style="--grid-columns:4">
218
+ <div>Flex 1</div>
219
+ <div>Flex 2</div>
220
+ <div id="flexGridDemoWider">Wider</div>
221
+ </div>
222
+ ```
223
+ ```scss
224
+ @use '@natachah/vanilla-frontend/scss/abstracts/mixins' as *;
225
+
226
+ #flexGridDemoWider {
227
+ @include flex-grid-wider-column()
228
+ }
229
+ ```
230
+ :::
@@ -0,0 +1,90 @@
1
+ <script setup>
2
+ import ComponentPreview from '../vuejs/ComponentPreview.vue'
3
+ </script>
4
+
5
+ # List
6
+
7
+ ```scss
8
+ @use '@natachah/vanilla-frontend/scss/components/list';
9
+ ```
10
+
11
+ ## Syntax
12
+
13
+ The list is using the native `<ul>`, `<ol>` or `<div>` tag with the class `.list`.
14
+
15
+ <ComponentPreview>
16
+ <ul class="list">
17
+ <li>List A</li>
18
+ <li>List B</li>
19
+ <li><a href="#">List C</a></li>
20
+ <li>List D</li>
21
+ <li><span>List E</span> <button>button</button></li>
22
+ </ul>
23
+ </ComponentPreview>
24
+
25
+ ::: code-group
26
+ ```html
27
+ <ul class="list">
28
+ <li>List A</li>
29
+ <li>List B</li>
30
+ <li><a href="#">List C</a></li>
31
+ <li>List D</li>
32
+ <li><span>List E</span> <button>button</button></li>
33
+ </ul>
34
+ ```
35
+
36
+ ```css [css properties]
37
+ --list-color
38
+ --list-background
39
+ --list-border-size
40
+ --list-border-style
41
+ --list-border-color
42
+ --list-border-radius
43
+ --list-padding-inline
44
+ --list-padding-block
45
+ --list-text-align
46
+ ```
47
+ :::
48
+
49
+ You can use some button components as `<button>` or `<a role="button">` inside a list to make them full width.
50
+
51
+ <ComponentPreview>
52
+ <ul class="list">
53
+ <li><button>List A</button></li>
54
+ <li><button disabled>List B</button></li>
55
+ <li>List C</li>
56
+ <li><a role="button" href="#">List D</a></li>
57
+ <li><a role="button">List E</a></li>
58
+ </ul>
59
+ </ComponentPreview>
60
+
61
+ ::: code-group
62
+ ```html
63
+ <ul class="list">
64
+ <li><button>List A</button></li>
65
+ <li><button disabled>List B</button></li>
66
+ <li>List C</li>
67
+ <li><a role="button" href="#">List D</a></li>
68
+ <li><a role="button">List E</a></li>
69
+ </ul>
70
+ ```
71
+
72
+ ```css [css properties]
73
+ --list-transition
74
+ --list-decoration
75
+ --list-outline-size
76
+ --list-outline-style
77
+ --list-outline-color
78
+ --list-outline-offset
79
+ --list-hover-color
80
+ --list-hover-background
81
+ --list-hover-border-color
82
+ --list-focus-color
83
+ --list-focus-background
84
+ --list-focus-border-color
85
+ --list-active-color
86
+ --list-active-background
87
+ --list-active-border-color
88
+ --list-disabled-opacity
89
+ ```
90
+ :::