@natachah/vanilla-frontend 0.4.1 → 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.
- package/.gitlab-ci.yml +22 -13
- package/LICENSE.md +1 -1
- package/docs/.vitepress/config.mts +101 -0
- package/docs/base/layout.md +77 -0
- package/docs/base/media.md +146 -0
- package/docs/base/reset.md +33 -0
- package/docs/base/typography.md +296 -0
- package/docs/classes/badge.md +146 -0
- package/docs/classes/breadcrumb.md +54 -0
- package/docs/classes/card.md +171 -0
- package/docs/classes/dropdown.md +180 -0
- package/docs/classes/grid.md +230 -0
- package/docs/classes/list.md +90 -0
- package/docs/components/button.md +254 -0
- package/docs/components/dialog.md +223 -0
- package/docs/components/disclosure.md +169 -0
- package/docs/components/form.md +514 -0
- package/docs/components/loading.md +53 -0
- package/docs/components/popover.md +270 -0
- package/docs/components/progress.md +33 -0
- package/docs/components/table.md +175 -0
- package/docs/index.md +27 -0
- package/docs/javascript/autofill.md +155 -0
- package/docs/javascript/check.md +53 -0
- package/docs/javascript/comfort.md +125 -0
- package/docs/javascript/consent.md +89 -0
- package/docs/javascript/cookie.md +33 -0
- package/docs/javascript/drawer.md +99 -0
- package/docs/javascript/form.md +130 -0
- package/docs/javascript/scroll.md +104 -0
- package/docs/javascript/slider.md +130 -0
- package/docs/javascript/sortable.md +127 -0
- package/docs/javascript/tabpanel.md +72 -0
- package/docs/javascript/toggle.md +182 -0
- package/docs/javascript/trap.md +33 -0
- package/docs/javascript/tree.md +220 -0
- package/docs/prologue/conventions.md +92 -0
- package/docs/prologue/release.md +44 -0
- package/docs/prologue/upgrade.md +21 -0
- package/docs/{pages/demo/layout.html → public/demo/demo.html} +1 -2
- package/docs/start/customization.md +184 -0
- package/docs/start/install.md +80 -0
- package/docs/start/mixin.md +203 -0
- package/docs/vuejs/ComponentPreview.vue +99 -0
- package/js/_slider.js +17 -1
- package/js/{vanilla-frontend.js → vanilla-frontend-doc.js} +30 -33
- package/natachah-vanilla-frontend-1.0.0.tgz +0 -0
- package/package.json +11 -14
- package/public/404.html +22 -0
- package/public/assets/app.DsgDPRSA.js +1 -0
- package/public/assets/base_layout.md.CTGv6rTn.js +13 -0
- package/public/assets/base_layout.md.CTGv6rTn.lean.js +1 -0
- package/public/assets/base_media.md.CcuDUcF-.js +24 -0
- package/public/assets/base_media.md.CcuDUcF-.lean.js +1 -0
- package/public/assets/base_reset.md.DqIdqFRJ.js +3 -0
- package/public/assets/base_reset.md.DqIdqFRJ.lean.js +1 -0
- package/public/assets/base_typography.md.DV-ikqGZ.js +87 -0
- package/public/assets/base_typography.md.DV-ikqGZ.lean.js +1 -0
- package/public/assets/chunks/ComponentPreview.BW2s4ay5.js +27 -0
- package/public/assets/chunks/framework.CaiDwmc7.js +4 -0
- package/public/assets/chunks/theme.DL_11MHV.js +1 -0
- package/public/assets/classes_badge.md.BCGzPr6f.js +24 -0
- package/public/assets/classes_badge.md.BCGzPr6f.lean.js +1 -0
- package/public/assets/classes_breadcrumb.md.vU6jlo36.js +15 -0
- package/public/assets/classes_breadcrumb.md.vU6jlo36.lean.js +1 -0
- package/public/assets/classes_card.md.BZEh2l_B.js +41 -0
- package/public/assets/classes_card.md.BZEh2l_B.lean.js +1 -0
- package/public/assets/classes_dropdown.md.BLVw_xQY.js +70 -0
- package/public/assets/classes_dropdown.md.BLVw_xQY.lean.js +1 -0
- package/public/assets/classes_grid.md.47v-Ybqe.js +45 -0
- package/public/assets/classes_grid.md.47v-Ybqe.lean.js +1 -0
- package/public/assets/classes_list.md.BW9PWZV1.js +36 -0
- package/public/assets/classes_list.md.BW9PWZV1.lean.js +1 -0
- package/public/assets/components_button.md.vx3HzdpN.js +45 -0
- package/public/assets/components_button.md.vx3HzdpN.lean.js +1 -0
- package/public/assets/components_dialog.md.C-0gJGus.js +76 -0
- package/public/assets/components_dialog.md.C-0gJGus.lean.js +1 -0
- package/public/assets/components_disclosure.md.DeSRu9_P.js +53 -0
- package/public/assets/components_disclosure.md.DeSRu9_P.lean.js +1 -0
- package/public/assets/components_form.md.Be8d5WFv.js +122 -0
- package/public/assets/components_form.md.Be8d5WFv.lean.js +1 -0
- package/public/assets/components_loading.md.CKDG7z5x.js +4 -0
- package/public/assets/components_loading.md.CKDG7z5x.lean.js +1 -0
- package/public/assets/components_popover.md.CwgNttNc.js +102 -0
- package/public/assets/components_popover.md.CwgNttNc.lean.js +1 -0
- package/public/assets/components_progress.md.CNC7rJiC.js +6 -0
- package/public/assets/components_progress.md.CNC7rJiC.lean.js +1 -0
- package/public/assets/components_table.md.LyBkIDkF.js +75 -0
- package/public/assets/components_table.md.LyBkIDkF.lean.js +1 -0
- package/public/assets/index.md.CJiHmjB7.js +1 -0
- package/public/assets/index.md.CJiHmjB7.lean.js +1 -0
- package/public/assets/inter-italic-cyrillic-ext.r48I6akx.woff2 +0 -0
- package/public/assets/inter-italic-cyrillic.By2_1cv3.woff2 +0 -0
- package/public/assets/inter-italic-greek-ext.1u6EdAuj.woff2 +0 -0
- package/public/assets/inter-italic-greek.DJ8dCoTZ.woff2 +0 -0
- package/public/assets/inter-italic-latin-ext.CN1xVJS-.woff2 +0 -0
- package/public/assets/inter-italic-latin.C2AdPX0b.woff2 +0 -0
- package/public/assets/inter-italic-vietnamese.BSbpV94h.woff2 +0 -0
- package/public/assets/inter-roman-cyrillic-ext.BBPuwvHQ.woff2 +0 -0
- package/public/assets/inter-roman-cyrillic.C5lxZ8CY.woff2 +0 -0
- package/public/assets/inter-roman-greek-ext.CqjqNYQ-.woff2 +0 -0
- package/public/assets/inter-roman-greek.BBVDIX6e.woff2 +0 -0
- package/public/assets/inter-roman-latin-ext.4ZJIpNVo.woff2 +0 -0
- package/public/assets/inter-roman-latin.Di8DUHzh.woff2 +0 -0
- package/public/assets/inter-roman-vietnamese.BjW4sHH5.woff2 +0 -0
- package/public/assets/javascript_autofill.md.BewVUo4H.js +49 -0
- package/public/assets/javascript_autofill.md.BewVUo4H.lean.js +1 -0
- package/public/assets/javascript_check.md.B6ajE66i.js +13 -0
- package/public/assets/javascript_check.md.B6ajE66i.lean.js +1 -0
- package/public/assets/javascript_comfort.md.BRci3j7V.js +20 -0
- package/public/assets/javascript_comfort.md.BRci3j7V.lean.js +1 -0
- package/public/assets/javascript_consent.md.Bjv8ZDS6.js +29 -0
- package/public/assets/javascript_consent.md.Bjv8ZDS6.lean.js +1 -0
- package/public/assets/javascript_cookie.md.Dlhyk4Ha.js +2 -0
- package/public/assets/javascript_cookie.md.Dlhyk4Ha.lean.js +1 -0
- package/public/assets/javascript_drawer.md.BCJX3fL-.js +32 -0
- package/public/assets/javascript_drawer.md.BCJX3fL-.lean.js +1 -0
- package/public/assets/javascript_form.md.Cwf_gxLI.js +40 -0
- package/public/assets/javascript_form.md.Cwf_gxLI.lean.js +2 -0
- package/public/assets/javascript_scroll.md.BrJijWbF.js +30 -0
- package/public/assets/javascript_scroll.md.BrJijWbF.lean.js +1 -0
- package/public/assets/javascript_slider.md.DDO8wC4u.js +27 -0
- package/public/assets/javascript_slider.md.DDO8wC4u.lean.js +1 -0
- package/public/assets/javascript_sortable.md.BKyem7yw.js +35 -0
- package/public/assets/javascript_sortable.md.BKyem7yw.lean.js +1 -0
- package/public/assets/javascript_tabpanel.md.D9M-_xE0.js +19 -0
- package/public/assets/javascript_tabpanel.md.D9M-_xE0.lean.js +1 -0
- package/public/assets/javascript_toggle.md.C8582WNC.js +46 -0
- package/public/assets/javascript_toggle.md.C8582WNC.lean.js +1 -0
- package/public/assets/javascript_trap.md.Bc59YUng.js +2 -0
- package/public/assets/javascript_trap.md.Bc59YUng.lean.js +1 -0
- package/public/assets/javascript_tree.md.uc1UUsFV.js +72 -0
- package/public/assets/javascript_tree.md.uc1UUsFV.lean.js +1 -0
- package/public/assets/prologue_conventions.md.D8nVwlRS.js +34 -0
- package/public/assets/prologue_conventions.md.D8nVwlRS.lean.js +1 -0
- package/public/assets/prologue_release.md.CG6nuFnt.js +1 -0
- package/public/assets/prologue_release.md.CG6nuFnt.lean.js +1 -0
- package/public/assets/prologue_upgrade.md.CFxokaBG.js +1 -0
- package/public/assets/prologue_upgrade.md.CFxokaBG.lean.js +1 -0
- package/public/assets/start_customization.md.t-ze_NoQ.js +141 -0
- package/public/assets/start_customization.md.t-ze_NoQ.lean.js +1 -0
- package/public/assets/start_install.md.OluH7l11.js +46 -0
- package/public/assets/start_install.md.OluH7l11.lean.js +1 -0
- package/public/assets/start_mixin.md.D76cLRSX.js +85 -0
- package/public/assets/start_mixin.md.D76cLRSX.lean.js +1 -0
- package/public/assets/style.zIeGMibA.css +1 -0
- package/public/base/layout.html +37 -0
- package/public/base/media.html +179 -0
- package/public/base/reset.html +27 -0
- package/public/base/typography.html +320 -0
- package/public/bundles/vanilla-frontend-doc.css +1 -0
- package/public/bundles/vanilla-frontend-doc.js +1 -0
- package/public/bundles/vanilla-frontend.css +1 -0
- package/public/classes/badge.html +205 -0
- package/public/classes/breadcrumb.html +66 -0
- package/public/classes/card.html +222 -0
- package/public/classes/dropdown.html +147 -0
- package/public/classes/grid.html +278 -0
- package/public/classes/list.html +113 -0
- package/public/components/button.html +304 -0
- package/public/components/dialog.html +205 -0
- package/public/components/disclosure.html +130 -0
- package/public/components/form.html +589 -0
- package/public/components/loading.html +107 -0
- package/public/components/popover.html +257 -0
- package/public/components/progress.html +57 -0
- package/public/components/table.html +152 -0
- package/public/demo/demo.html +84 -0
- package/public/hashmap.json +1 -0
- package/public/index.html +25 -0
- package/public/javascript/autofill.html +152 -0
- package/public/javascript/check.html +64 -0
- package/public/javascript/comfort.html +123 -0
- package/public/javascript/consent.html +80 -0
- package/public/javascript/cookie.html +26 -0
- package/public/javascript/drawer.html +83 -0
- package/public/javascript/form.html +117 -0
- package/public/javascript/scroll.html +81 -0
- package/public/javascript/slider.html +78 -0
- package/public/javascript/sortable.html +112 -0
- package/public/javascript/tabpanel.html +70 -0
- package/public/javascript/toggle.html +201 -0
- package/public/javascript/trap.html +26 -0
- package/public/javascript/tree.html +175 -0
- package/public/prologue/conventions.html +58 -0
- package/public/prologue/release.html +25 -0
- package/public/prologue/upgrade.html +25 -0
- package/public/start/customization.html +165 -0
- package/public/start/install.html +70 -0
- package/public/start/mixin.html +109 -0
- package/public/vp-icons.css +0 -0
- package/sandbox/index.html +27 -0
- package/sandbox/js/sandbox-header.js +57 -0
- package/sandbox/js/sandbox-test.js +91 -0
- package/sandbox/pages/base/layout.html +80 -0
- package/sandbox/pages/base/media.html +52 -0
- package/sandbox/pages/base/typography.html +132 -0
- package/sandbox/pages/components/button.html +70 -0
- package/sandbox/pages/components/dialog.html +72 -0
- package/sandbox/pages/components/disclosure.html +77 -0
- package/sandbox/pages/components/form.html +164 -0
- package/sandbox/pages/components/loading.html +32 -0
- package/sandbox/pages/components/popover.html +119 -0
- package/sandbox/pages/components/progress.html +28 -0
- package/sandbox/pages/components/table.html +80 -0
- package/sandbox/pages/customs/badge.html +59 -0
- package/sandbox/pages/customs/breadcrumb.html +34 -0
- package/sandbox/pages/customs/card.html +71 -0
- package/sandbox/pages/customs/dropdown.html +70 -0
- package/sandbox/pages/customs/grid.html +109 -0
- package/sandbox/pages/customs/list.html +43 -0
- package/sandbox/pages/javascript/autofill.html +39 -0
- package/sandbox/pages/javascript/checkall.html +37 -0
- package/sandbox/pages/javascript/comfort.html +41 -0
- package/sandbox/pages/javascript/consent.html +45 -0
- package/sandbox/pages/javascript/form.html +50 -0
- package/sandbox/pages/javascript/scroll.html +44 -0
- package/sandbox/pages/javascript/slider.html +44 -0
- package/sandbox/pages/javascript/sortable.html +56 -0
- package/sandbox/pages/javascript/tabpanel.html +39 -0
- package/sandbox/pages/javascript/toggle.html +72 -0
- package/sandbox/pages/javascript/tree.html +96 -0
- package/sandbox/sandbox.js +26 -0
- package/sandbox/scss/sandbox-header.scss +93 -0
- package/scss/components/_badge.scss +2 -1
- package/scss/components/_dropdown.scss +2 -2
- package/scss/components/_group.scss +8 -4
- package/scss/components/_popover.scss +74 -0
- package/scss/components/index.scss +1 -0
- package/scss/vanilla-frontend-doc.scss +46 -1
- package/scss/vanilla-frontend-sandbox.scss +34 -0
- package/vite.config.js +30 -0
- package/docs/index.html +0 -36
- package/docs/main-demo.js +0 -2
- package/docs/main.js +0 -34
- package/docs/pages/base/layout.html +0 -131
- package/docs/pages/base/media.html +0 -142
- package/docs/pages/base/reset.html +0 -53
- package/docs/pages/base/typography.html +0 -334
- package/docs/pages/components/button.html +0 -202
- package/docs/pages/components/dialog.html +0 -336
- package/docs/pages/components/disclosure.html +0 -174
- package/docs/pages/components/form.html +0 -427
- package/docs/pages/components/loading.html +0 -58
- package/docs/pages/components/progress.html +0 -47
- package/docs/pages/components/table.html +0 -168
- package/docs/pages/customs/badge.html +0 -150
- package/docs/pages/customs/breadcrumb.html +0 -67
- package/docs/pages/customs/card.html +0 -185
- package/docs/pages/customs/drawer.html +0 -149
- package/docs/pages/customs/dropdown.html +0 -270
- package/docs/pages/customs/grid.html +0 -185
- package/docs/pages/customs/list.html +0 -112
- package/docs/pages/customs/slider.html +0 -273
- package/docs/pages/javascript/autofill.html +0 -170
- package/docs/pages/javascript/checkall.html +0 -59
- package/docs/pages/javascript/comfort.html +0 -146
- package/docs/pages/javascript/consent.html +0 -112
- package/docs/pages/javascript/cookie.html +0 -81
- package/docs/pages/javascript/form.html +0 -199
- package/docs/pages/javascript/scroll.html +0 -209
- package/docs/pages/javascript/sortable.html +0 -167
- package/docs/pages/javascript/tabpanel.html +0 -89
- package/docs/pages/javascript/toggle.html +0 -193
- package/docs/pages/javascript/trap.html +0 -89
- package/docs/pages/javascript/tree.html +0 -256
- package/docs/pages/quick-start/conventions.html +0 -112
- package/docs/pages/quick-start/customization.html +0 -187
- package/docs/pages/quick-start/installation.html +0 -97
- package/docs/pages/quick-start/mixins.html +0 -214
- package/docs/src/js/demo.js +0 -110
- package/docs/src/js/doc-code.js +0 -102
- package/docs/src/js/doc-demo.js +0 -14
- package/docs/src/js/doc-layout.js +0 -117
- package/docs/src/scss/demo.scss +0 -77
- package/docs/src/scss/layout.scss +0 -83
- package/docs/src/scss/style.scss +0 -278
- package/docs/vite.config.mjs +0 -23
- package/esbuild.mjs +0 -25
- package/natachah-vanilla-frontend-0.4.1.tgz +0 -0
- 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 |
|