@mozaic-ds/web-components 1.0.0-beta.6 → 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/README.md +36 -68
- package/dist/Cross20.js +1 -1
- package/dist/Cross20.js.map +1 -1
- package/dist/Cross24.js +1 -1
- package/dist/Cross24.js.map +1 -1
- package/dist/CrossCircleFilled24.js +1 -1
- package/dist/CrossCircleFilled24.js.map +1 -1
- package/dist/attributes.js +1 -1
- package/dist/attributes.js.map +1 -1
- package/dist/bundle.d.ts +24 -23
- package/dist/bundle.d.ts.map +1 -1
- package/dist/bundle.js +24 -23
- package/dist/components/avatar/Avatar.js +2 -5
- package/dist/components/avatar/Avatar.js.map +1 -1
- package/dist/components/avatar/Avatar.spec.js +17 -0
- package/dist/components/avatar/Avatar.stories.d.ts.map +1 -1
- package/dist/components/avatar/Avatar.stories.js +3 -29
- package/dist/components/avatar/Avatar.svelte +9 -10
- package/dist/components/avatar/Avatar.svelte.d.ts +2 -0
- package/dist/components/avatar/Avatar.svelte.d.ts.map +1 -1
- package/dist/components/avatar/README.md +16 -0
- package/dist/components/breadcrumb/Breadcrumb.js +6 -9
- package/dist/components/breadcrumb/Breadcrumb.js.map +1 -1
- package/dist/components/breadcrumb/Breadcrumb.spec.js +42 -0
- package/dist/components/breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
- package/dist/components/breadcrumb/Breadcrumb.stories.js +6 -35
- package/dist/components/breadcrumb/Breadcrumb.svelte +26 -34
- package/dist/components/breadcrumb/Breadcrumb.svelte.d.ts.map +1 -1
- package/dist/components/breadcrumb/README.md +11 -0
- package/dist/components/button/Button.js +3 -6
- package/dist/components/button/Button.js.map +1 -1
- package/dist/components/button/Button.spec.js +74 -0
- package/dist/components/button/Button.stories.d.ts +9 -13
- package/dist/components/button/Button.stories.d.ts.map +1 -1
- package/dist/components/button/Button.stories.js +46 -146
- package/dist/components/button/Button.svelte +186 -168
- package/dist/components/button/Button.svelte.d.ts +36 -8
- package/dist/components/button/Button.svelte.d.ts.map +1 -1
- package/dist/components/button/README.md +26 -0
- package/dist/components/callout/Callout.js +2 -5
- package/dist/components/callout/Callout.js.map +1 -1
- package/dist/components/callout/Callout.spec.js +33 -0
- package/dist/components/callout/Callout.stories.d.ts.map +1 -1
- package/dist/components/callout/Callout.stories.js +2 -55
- package/dist/components/callout/Callout.svelte +15 -14
- package/dist/components/callout/Callout.svelte.d.ts +4 -0
- package/dist/components/callout/Callout.svelte.d.ts.map +1 -1
- package/dist/components/callout/README.md +20 -0
- package/dist/components/checkbox/Checkbox.js +3 -6
- package/dist/components/checkbox/Checkbox.js.map +1 -1
- package/dist/components/checkbox/Checkbox.spec.js +70 -0
- package/dist/components/checkbox/Checkbox.stories.d.ts +11 -16
- package/dist/components/checkbox/Checkbox.stories.d.ts.map +1 -1
- package/dist/components/checkbox/Checkbox.stories.js +67 -124
- package/dist/components/checkbox/Checkbox.svelte +75 -58
- package/dist/components/checkbox/Checkbox.svelte.d.ts +31 -6
- package/dist/components/checkbox/Checkbox.svelte.d.ts.map +1 -1
- package/dist/components/checkbox/README.md +17 -0
- package/dist/components/checkboxgroup/CheckboxGroup.js +4 -7
- package/dist/components/checkboxgroup/CheckboxGroup.js.map +1 -1
- package/dist/components/checkboxgroup/CheckboxGroup.spec.js +113 -0
- package/dist/components/checkboxgroup/CheckboxGroup.stories.d.ts +5 -13
- package/dist/components/checkboxgroup/CheckboxGroup.stories.d.ts.map +1 -1
- package/dist/components/checkboxgroup/CheckboxGroup.stories.js +56 -140
- package/dist/components/checkboxgroup/CheckboxGroup.svelte +89 -81
- package/dist/components/checkboxgroup/CheckboxGroup.svelte.d.ts +30 -6
- package/dist/components/checkboxgroup/CheckboxGroup.svelte.d.ts.map +1 -1
- package/dist/components/checkboxgroup/README.md +14 -0
- package/dist/components/circularprogressbar/CircularProgressbar.js +4 -7
- package/dist/components/circularprogressbar/CircularProgressbar.js.map +1 -1
- package/dist/components/circularprogressbar/CircularProgressbar.spec.js +74 -0
- package/dist/components/circularprogressbar/CircularProgressbar.stories.d.ts +6 -6
- package/dist/components/circularprogressbar/CircularProgressbar.stories.d.ts.map +1 -1
- package/dist/components/circularprogressbar/CircularProgressbar.stories.js +29 -68
- package/dist/components/circularprogressbar/CircularProgressbar.svelte +46 -30
- package/dist/components/circularprogressbar/CircularProgressbar.svelte.d.ts +18 -0
- package/dist/components/circularprogressbar/CircularProgressbar.svelte.d.ts.map +1 -1
- package/dist/components/circularprogressbar/README.md +14 -0
- package/dist/components/datepicker/Datepicker.js +3 -6
- package/dist/components/datepicker/Datepicker.js.map +1 -1
- package/dist/components/datepicker/Datepicker.spec.js +95 -0
- package/dist/components/datepicker/Datepicker.stories.d.ts +7 -6
- package/dist/components/datepicker/Datepicker.stories.d.ts.map +1 -1
- package/dist/components/datepicker/Datepicker.stories.js +58 -75
- package/dist/components/datepicker/Datepicker.svelte +103 -79
- package/dist/components/datepicker/Datepicker.svelte.d.ts +30 -1
- package/dist/components/datepicker/Datepicker.svelte.d.ts.map +1 -1
- package/dist/components/datepicker/README.md +18 -0
- package/dist/components/drawer/Drawer.js +12 -15
- package/dist/components/drawer/Drawer.js.map +1 -1
- package/dist/components/drawer/Drawer.spec.js +101 -0
- package/dist/components/drawer/Drawer.stories.d.ts +29 -8
- package/dist/components/drawer/Drawer.stories.d.ts.map +1 -1
- package/dist/components/drawer/Drawer.stories.js +86 -87
- package/dist/components/drawer/Drawer.svelte +185 -161
- package/dist/components/drawer/Drawer.svelte.d.ts +26 -3
- package/dist/components/drawer/Drawer.svelte.d.ts.map +1 -1
- package/dist/components/drawer/README.md +29 -0
- package/dist/components/field/Field.js +3 -6
- package/dist/components/field/Field.js.map +1 -1
- package/dist/components/field/Field.spec.js +51 -0
- package/dist/components/field/Field.stories.d.ts +9 -15
- package/dist/components/field/Field.stories.d.ts.map +1 -1
- package/dist/components/field/Field.stories.js +86 -142
- package/dist/components/field/Field.svelte +63 -30
- package/dist/components/field/Field.svelte.d.ts +38 -7
- package/dist/components/field/Field.svelte.d.ts.map +1 -1
- package/dist/components/field/README.md +24 -0
- package/dist/components/flag/Flag.js +2 -5
- package/dist/components/flag/Flag.js.map +1 -1
- package/dist/components/flag/Flag.spec.js +30 -0
- package/dist/components/flag/Flag.stories.d.ts +8 -18
- package/dist/components/flag/Flag.stories.d.ts.map +1 -1
- package/dist/components/flag/Flag.stories.js +28 -106
- package/dist/components/flag/Flag.svelte +23 -24
- package/dist/components/flag/Flag.svelte.d.ts +10 -28
- package/dist/components/flag/Flag.svelte.d.ts.map +1 -1
- package/dist/components/flag/README.md +11 -0
- package/dist/components/iconbutton/IconButton.js +2 -5
- package/dist/components/iconbutton/IconButton.js.map +1 -1
- package/dist/components/iconbutton/IconButton.stories.d.ts +11 -11
- package/dist/components/iconbutton/IconButton.stories.d.ts.map +1 -1
- package/dist/components/iconbutton/IconButton.stories.js +51 -67
- package/dist/components/iconbutton/IconButton.svelte +157 -152
- package/dist/components/iconbutton/IconButton.svelte.d.ts +28 -7
- package/dist/components/iconbutton/IconButton.svelte.d.ts.map +1 -1
- package/dist/components/iconbutton/README.md +21 -0
- package/dist/components/linearprogressbarbuffer/LinearProgressbarBuffer.js +2 -5
- package/dist/components/linearprogressbarbuffer/LinearProgressbarBuffer.js.map +1 -1
- package/dist/components/linearprogressbarbuffer/LinearProgressbarBuffer.spec.js +28 -0
- package/dist/components/linearprogressbarbuffer/LinearProgressbarBuffer.stories.d.ts +5 -7
- package/dist/components/linearprogressbarbuffer/LinearProgressbarBuffer.stories.d.ts.map +1 -1
- package/dist/components/linearprogressbarbuffer/LinearProgressbarBuffer.stories.js +18 -49
- package/dist/components/linearprogressbarbuffer/LinearProgressbarBuffer.svelte +19 -12
- package/dist/components/linearprogressbarbuffer/LinearProgressbarBuffer.svelte.d.ts +10 -1
- package/dist/components/linearprogressbarbuffer/LinearProgressbarBuffer.svelte.d.ts.map +1 -1
- package/dist/components/linearprogressbarbuffer/README.md +11 -0
- package/dist/components/linearprogressbarpercentage/LinearProgressbarPercentage.js +2 -5
- package/dist/components/linearprogressbarpercentage/LinearProgressbarPercentage.js.map +1 -1
- package/dist/components/linearprogressbarpercentage/LinearProgressbarPercentage.spec.js +26 -0
- package/dist/components/linearprogressbarpercentage/LinearProgressbarPercentage.stories.d.ts +4 -5
- package/dist/components/linearprogressbarpercentage/LinearProgressbarPercentage.stories.d.ts.map +1 -1
- package/dist/components/linearprogressbarpercentage/LinearProgressbarPercentage.stories.js +15 -33
- package/dist/components/linearprogressbarpercentage/LinearProgressbarPercentage.svelte +19 -16
- package/dist/components/linearprogressbarpercentage/LinearProgressbarPercentage.svelte.d.ts +6 -0
- package/dist/components/linearprogressbarpercentage/LinearProgressbarPercentage.svelte.d.ts.map +1 -1
- package/dist/components/linearprogressbarpercentage/README.md +10 -0
- package/dist/components/link/Link.js +2 -5
- package/dist/components/link/Link.js.map +1 -1
- package/dist/components/link/Link.spec.js +51 -0
- package/dist/components/link/Link.stories.d.ts +12 -12
- package/dist/components/link/Link.stories.d.ts.map +1 -1
- package/dist/components/link/Link.stories.js +61 -74
- package/dist/components/link/Link.svelte +54 -52
- package/dist/components/link/Link.svelte.d.ts +29 -8
- package/dist/components/link/Link.svelte.d.ts.map +1 -1
- package/dist/components/link/README.md +23 -0
- package/dist/components/loader/Loader.js +7 -10
- package/dist/components/loader/Loader.js.map +1 -1
- package/dist/components/loader/Loader.spec.js +54 -0
- package/dist/components/loader/Loader.stories.d.ts +8 -10
- package/dist/components/loader/Loader.stories.d.ts.map +1 -1
- package/dist/components/loader/Loader.stories.js +27 -43
- package/dist/components/loader/Loader.svelte +42 -43
- package/dist/components/loader/Loader.svelte.d.ts +14 -3
- package/dist/components/loader/Loader.svelte.d.ts.map +1 -1
- package/dist/components/loader/README.md +12 -0
- package/dist/components/loadingoverlay/LoadingOverlay.js +4 -0
- package/dist/components/loadingoverlay/LoadingOverlay.js.map +1 -0
- package/dist/components/loadingoverlay/LoadingOverlay.spec.js +38 -0
- package/dist/components/loadingoverlay/LoadingOverlay.stories.d.ts +7 -0
- package/dist/components/loadingoverlay/LoadingOverlay.stories.d.ts.map +1 -0
- package/dist/components/loadingoverlay/LoadingOverlay.stories.js +39 -0
- package/dist/components/loadingoverlay/LoadingOverlay.svelte +50 -0
- package/dist/components/loadingoverlay/LoadingOverlay.svelte.d.ts +17 -0
- package/dist/components/loadingoverlay/LoadingOverlay.svelte.d.ts.map +1 -0
- package/dist/components/loadingoverlay/README.md +11 -0
- package/dist/components/modal/Modal.js +14 -17
- package/dist/components/modal/Modal.js.map +1 -1
- package/dist/components/modal/Modal.spec.js +50 -0
- package/dist/components/modal/Modal.stories.d.ts +36 -9
- package/dist/components/modal/Modal.stories.d.ts.map +1 -1
- package/dist/components/modal/Modal.stories.js +54 -83
- package/dist/components/modal/Modal.svelte +167 -166
- package/dist/components/modal/Modal.svelte.d.ts +22 -5
- package/dist/components/modal/Modal.svelte.d.ts.map +1 -1
- package/dist/components/modal/README.md +28 -0
- package/dist/components/numberbadge/NumberBadge.js +2 -5
- package/dist/components/numberbadge/NumberBadge.js.map +1 -1
- package/dist/components/numberbadge/NumberBadge.spec.js +28 -0
- package/dist/components/numberbadge/NumberBadge.stories.d.ts +9 -13
- package/dist/components/numberbadge/NumberBadge.stories.d.ts.map +1 -1
- package/dist/components/numberbadge/NumberBadge.stories.js +28 -56
- package/dist/components/numberbadge/NumberBadge.svelte +36 -35
- package/dist/components/numberbadge/NumberBadge.svelte.d.ts +15 -4
- package/dist/components/numberbadge/NumberBadge.svelte.d.ts.map +1 -1
- package/dist/components/numberbadge/README.md +12 -0
- package/dist/components/overlay/Overlay.js +2 -5
- package/dist/components/overlay/Overlay.js.map +1 -1
- package/dist/components/overlay/Overlay.spec.js +29 -0
- package/dist/components/overlay/Overlay.stories.d.ts +5 -7
- package/dist/components/overlay/Overlay.stories.d.ts.map +1 -1
- package/dist/components/overlay/Overlay.stories.js +32 -40
- package/dist/components/overlay/Overlay.svelte +21 -12
- package/dist/components/overlay/Overlay.svelte.d.ts +11 -0
- package/dist/components/overlay/Overlay.svelte.d.ts.map +1 -1
- package/dist/components/overlay/README.md +17 -0
- package/dist/components/pagination/Pagination.js +8 -11
- package/dist/components/pagination/Pagination.js.map +1 -1
- package/dist/components/pagination/Pagination.spec.js +65 -0
- package/dist/components/pagination/Pagination.stories.d.ts +8 -11
- package/dist/components/pagination/Pagination.stories.d.ts.map +1 -1
- package/dist/components/pagination/Pagination.stories.js +37 -91
- package/dist/components/pagination/Pagination.svelte +53 -35
- package/dist/components/pagination/Pagination.svelte.d.ts +27 -4
- package/dist/components/pagination/Pagination.svelte.d.ts.map +1 -1
- package/dist/components/pagination/README.md +16 -0
- package/dist/components/passwordinput/PasswordInput.js +4 -9
- package/dist/components/passwordinput/PasswordInput.js.map +1 -1
- package/dist/components/passwordinput/PasswordInput.spec.js +84 -0
- package/dist/components/passwordinput/PasswordInput.stories.d.ts +10 -13
- package/dist/components/passwordinput/PasswordInput.stories.d.ts.map +1 -1
- package/dist/components/passwordinput/PasswordInput.stories.js +67 -124
- package/dist/components/passwordinput/PasswordInput.svelte +424 -60
- package/dist/components/passwordinput/PasswordInput.svelte.d.ts +34 -2
- package/dist/components/passwordinput/PasswordInput.svelte.d.ts.map +1 -1
- package/dist/components/passwordinput/README.md +19 -0
- package/dist/components/pincode/Pincode.js +4 -7
- package/dist/components/pincode/Pincode.js.map +1 -1
- package/dist/components/pincode/Pincode.spec.js +99 -0
- package/dist/components/pincode/Pincode.stories.d.ts +9 -13
- package/dist/components/pincode/Pincode.stories.d.ts.map +1 -1
- package/dist/components/pincode/Pincode.stories.js +62 -127
- package/dist/components/pincode/Pincode.svelte +72 -60
- package/dist/components/pincode/Pincode.svelte.d.ts +30 -24
- package/dist/components/pincode/Pincode.svelte.d.ts.map +1 -1
- package/dist/components/pincode/README.md +22 -0
- package/dist/components/quantityselector/QuantitySelector.js +3 -7
- package/dist/components/quantityselector/QuantitySelector.js.map +1 -1
- package/dist/components/quantityselector/QuantitySelector.spec.js +104 -0
- package/dist/components/quantityselector/QuantitySelector.stories.d.ts +11 -15
- package/dist/components/quantityselector/QuantitySelector.stories.d.ts.map +1 -1
- package/dist/components/quantityselector/QuantitySelector.stories.js +77 -145
- package/dist/components/quantityselector/QuantitySelector.svelte +136 -112
- package/dist/components/quantityselector/QuantitySelector.svelte.d.ts +49 -17
- package/dist/components/quantityselector/QuantitySelector.svelte.d.ts.map +1 -1
- package/dist/components/quantityselector/README.md +21 -0
- package/dist/components/radio/README.md +15 -0
- package/dist/components/radio/Radio.js +2 -5
- package/dist/components/radio/Radio.js.map +1 -1
- package/dist/components/radio/Radio.spec.js +60 -0
- package/dist/components/radio/Radio.stories.d.ts +9 -13
- package/dist/components/radio/Radio.stories.d.ts.map +1 -1
- package/dist/components/radio/Radio.stories.js +54 -70
- package/dist/components/radio/Radio.svelte +58 -39
- package/dist/components/radio/Radio.svelte.d.ts +27 -5
- package/dist/components/radio/Radio.svelte.d.ts.map +1 -1
- package/dist/components/radiogroup/README.md +14 -0
- package/dist/components/radiogroup/RadioGroup.js +4 -7
- package/dist/components/radiogroup/RadioGroup.js.map +1 -1
- package/dist/components/radiogroup/RadioGroup.spec.js +65 -0
- package/dist/components/radiogroup/RadioGroup.stories.d.ts +5 -12
- package/dist/components/radiogroup/RadioGroup.stories.d.ts.map +1 -1
- package/dist/components/radiogroup/RadioGroup.stories.js +56 -151
- package/dist/components/radiogroup/RadioGroup.svelte +81 -77
- package/dist/components/radiogroup/RadioGroup.svelte.d.ts +28 -9
- package/dist/components/radiogroup/RadioGroup.svelte.d.ts.map +1 -1
- package/dist/components/select/README.md +18 -0
- package/dist/components/select/Select.js +3 -6
- package/dist/components/select/Select.js.map +1 -1
- package/dist/components/select/Select.spec.js +76 -0
- package/dist/components/select/Select.stories.d.ts +10 -14
- package/dist/components/select/Select.stories.d.ts.map +1 -1
- package/dist/components/select/Select.stories.js +87 -92
- package/dist/components/select/Select.svelte +77 -67
- package/dist/components/select/Select.svelte.d.ts +41 -10
- package/dist/components/select/Select.svelte.d.ts.map +1 -1
- package/dist/components/statusbadge/README.md +11 -0
- package/dist/components/statusbadge/StatusBadge.js +2 -5
- package/dist/components/statusbadge/StatusBadge.js.map +1 -1
- package/dist/components/statusbadge/StatusBadge.spec.js +31 -0
- package/dist/components/statusbadge/StatusBadge.stories.d.ts +9 -12
- package/dist/components/statusbadge/StatusBadge.stories.d.ts.map +1 -1
- package/dist/components/statusbadge/StatusBadge.stories.js +21 -44
- package/dist/components/statusbadge/StatusBadge.svelte +34 -29
- package/dist/components/statusbadge/StatusBadge.svelte.d.ts +13 -28
- package/dist/components/statusbadge/StatusBadge.svelte.d.ts.map +1 -1
- package/dist/components/statusdot/README.md +11 -0
- package/dist/components/statusdot/StatusDot.js +2 -5
- package/dist/components/statusdot/StatusDot.js.map +1 -1
- package/dist/components/statusdot/StatusDot.spec.js +42 -0
- package/dist/components/statusdot/StatusDot.stories.d.ts.map +1 -1
- package/dist/components/statusdot/StatusDot.stories.js +9 -37
- package/dist/components/statusdot/StatusDot.svelte +15 -16
- package/dist/components/statusdot/StatusDot.svelte.d.ts +2 -2
- package/dist/components/statusdot/StatusDot.svelte.d.ts.map +1 -1
- package/dist/components/statusnotification/README.md +25 -0
- package/dist/components/statusnotification/StatusNotification.js +3 -6
- package/dist/components/statusnotification/StatusNotification.js.map +1 -1
- package/dist/components/statusnotification/StatusNotification.spec.js +54 -0
- package/dist/components/statusnotification/StatusNotification.stories.d.ts +16 -14
- package/dist/components/statusnotification/StatusNotification.stories.d.ts.map +1 -1
- package/dist/components/statusnotification/StatusNotification.stories.js +53 -86
- package/dist/components/statusnotification/StatusNotification.svelte +186 -187
- package/dist/components/statusnotification/StatusNotification.svelte.d.ts +21 -18
- package/dist/components/statusnotification/StatusNotification.svelte.d.ts.map +1 -1
- package/dist/components/tab/README.md +20 -0
- package/dist/components/tab/Tab.js +4 -0
- package/dist/components/tab/Tab.js.map +1 -0
- package/dist/components/tab/Tab.spec.js +58 -0
- package/dist/components/tab/Tab.svelte +154 -0
- package/dist/components/{tabs → tab}/Tab.svelte.d.ts +20 -3
- package/dist/components/tab/Tab.svelte.d.ts.map +1 -0
- package/dist/components/tabs/README.md +18 -0
- package/dist/components/tabs/Tabs.js +2 -5
- package/dist/components/tabs/Tabs.js.map +1 -1
- package/dist/components/tabs/Tabs.spec.js +51 -0
- package/dist/components/tabs/Tabs.stories.d.ts +9 -6
- package/dist/components/tabs/Tabs.stories.d.ts.map +1 -1
- package/dist/components/tabs/Tabs.stories.js +59 -115
- package/dist/components/tabs/Tabs.svelte +46 -29
- package/dist/components/tabs/Tabs.svelte.d.ts +21 -7
- package/dist/components/tabs/Tabs.svelte.d.ts.map +1 -1
- package/dist/components/tags/README.md +9 -0
- package/dist/components/tags/Tag.js +2 -5
- package/dist/components/tags/Tag.js.map +1 -1
- package/dist/components/tags/Tag.svelte +35 -38
- package/dist/components/tags/TagContextualised.js +2 -5
- package/dist/components/tags/TagContextualised.js.map +1 -1
- package/dist/components/tags/TagContextualised.svelte +35 -38
- package/dist/components/tags/TagInteractive.js +2 -5
- package/dist/components/tags/TagInteractive.js.map +1 -1
- package/dist/components/tags/TagInteractive.svelte +35 -38
- package/dist/components/tags/TagRemovable.js +2 -5
- package/dist/components/tags/TagRemovable.js.map +1 -1
- package/dist/components/tags/TagRemovable.svelte +35 -38
- package/dist/components/tags/TagSelectable.js +2 -5
- package/dist/components/tags/TagSelectable.js.map +1 -1
- package/dist/components/tags/TagSelectable.svelte +35 -38
- package/dist/components/tags/Tags.stories.d.ts.map +1 -1
- package/dist/components/tags/Tags.stories.js +7 -1
- package/dist/components/tags/TagsContextualised.stories.d.ts.map +1 -1
- package/dist/components/tags/TagsContextualised.stories.js +7 -1
- package/dist/components/tags/TagsInteractive.stories.d.ts.map +1 -1
- package/dist/components/tags/TagsInteractive.stories.js +7 -1
- package/dist/components/tags/TagsRemovable.stories.d.ts.map +1 -1
- package/dist/components/tags/TagsRemovable.stories.js +7 -1
- package/dist/components/tags/TagsSelectable.stories.d.ts.map +1 -1
- package/dist/components/tags/TagsSelectable.stories.js +7 -1
- package/dist/components/textarea/README.md +19 -0
- package/dist/components/textarea/Textarea.js +2 -8
- package/dist/components/textarea/Textarea.js.map +1 -1
- package/dist/components/textarea/Textarea.spec.js +67 -0
- package/dist/components/textarea/Textarea.stories.d.ts +9 -13
- package/dist/components/textarea/Textarea.stories.d.ts.map +1 -1
- package/dist/components/textarea/Textarea.stories.js +61 -92
- package/dist/components/textarea/Textarea.svelte +70 -117
- package/dist/components/textarea/Textarea.svelte.d.ts +43 -13
- package/dist/components/textarea/Textarea.svelte.d.ts.map +1 -1
- package/dist/components/textinput/README.md +26 -0
- package/dist/components/textinput/Textinput.js +5 -9
- package/dist/components/textinput/Textinput.js.map +1 -1
- package/dist/components/textinput/Textinput.spec.js +89 -0
- package/dist/components/textinput/Textinput.stories.d.ts +11 -12
- package/dist/components/textinput/Textinput.stories.d.ts.map +1 -1
- package/dist/components/textinput/Textinput.stories.js +78 -137
- package/dist/components/textinput/Textinput.svelte +107 -148
- package/dist/components/textinput/Textinput.svelte.d.ts +46 -22
- package/dist/components/textinput/Textinput.svelte.d.ts.map +1 -1
- package/dist/components/toaster/README.md +28 -0
- package/dist/components/toaster/Toaster.js +5 -8
- package/dist/components/toaster/Toaster.js.map +1 -1
- package/dist/components/toaster/Toaster.spec.js +100 -0
- package/dist/components/toaster/Toaster.stories.d.ts.map +1 -1
- package/dist/components/toaster/Toaster.stories.js +5 -73
- package/dist/components/toaster/Toaster.svelte +157 -146
- package/dist/components/toaster/Toaster.svelte.d.ts +3 -0
- package/dist/components/toaster/Toaster.svelte.d.ts.map +1 -1
- package/dist/components/toggle/README.md +15 -0
- package/dist/components/toggle/Toggle.js +2 -5
- package/dist/components/toggle/Toggle.js.map +1 -1
- package/dist/components/toggle/Toggle.spec.js +69 -0
- package/dist/components/toggle/Toggle.stories.d.ts +9 -14
- package/dist/components/toggle/Toggle.stories.d.ts.map +1 -1
- package/dist/components/toggle/Toggle.stories.js +55 -64
- package/dist/components/toggle/Toggle.svelte +59 -48
- package/dist/components/toggle/Toggle.svelte.d.ts +26 -7
- package/dist/components/toggle/Toggle.svelte.d.ts.map +1 -1
- package/dist/components/togglegroup/README.md +13 -0
- package/dist/components/togglegroup/ToggleGroup.js +3 -6
- package/dist/components/togglegroup/ToggleGroup.js.map +1 -1
- package/dist/components/togglegroup/ToggleGroup.spec.js +50 -0
- package/dist/components/togglegroup/ToggleGroup.stories.d.ts +5 -13
- package/dist/components/togglegroup/ToggleGroup.stories.d.ts.map +1 -1
- package/dist/components/togglegroup/ToggleGroup.stories.js +56 -104
- package/dist/components/togglegroup/ToggleGroup.svelte +91 -97
- package/dist/components/togglegroup/ToggleGroup.svelte.d.ts +25 -14
- package/dist/components/togglegroup/ToggleGroup.svelte.d.ts.map +1 -1
- package/dist/components/tooltip/README.md +19 -0
- package/dist/components/tooltip/Tooltip.js +4 -7
- package/dist/components/tooltip/Tooltip.js.map +1 -1
- package/dist/components/tooltip/Tooltip.spec.js +38 -0
- package/dist/components/tooltip/Tooltip.stories.d.ts +6 -7
- package/dist/components/tooltip/Tooltip.stories.d.ts.map +1 -1
- package/dist/components/tooltip/Tooltip.stories.js +45 -59
- package/dist/components/tooltip/Tooltip.svelte +31 -25
- package/dist/components/tooltip/Tooltip.svelte.d.ts +17 -0
- package/dist/components/tooltip/Tooltip.svelte.d.ts.map +1 -1
- package/dist/custom-element-forward-events.js.map +1 -1
- package/dist/custom-element.js +3 -3
- package/dist/custom-element.js.map +1 -1
- package/dist/documentation/Contributing.mdx +1 -1
- package/dist/documentation/Introduction.mdx +45 -11
- package/dist/documentation/SupportAndOnboarding.mdx +2 -2
- package/dist/each.js +1 -1
- package/dist/each.js.map +1 -1
- package/dist/if.js +1 -1
- package/dist/if.js.map +1 -1
- package/dist/input.js +1 -1
- package/dist/input.js.map +1 -1
- package/dist/legacy.js +1 -1
- package/dist/legacy.js.map +1 -1
- package/dist/main.d.ts +24 -23
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +24 -23
- package/dist/slot.js +1 -1
- package/dist/slot.js.map +1 -1
- package/dist/this.js +2 -0
- package/dist/this.js.map +1 -0
- package/package.json +12 -4
- package/dist/components/button/button.types.d.ts +0 -13
- package/dist/components/button/button.types.d.ts.map +0 -1
- package/dist/components/button/button.types.js +0 -1
- package/dist/components/checkboxgroup/checkboxgroup.types.d.ts +0 -9
- package/dist/components/checkboxgroup/checkboxgroup.types.d.ts.map +0 -1
- package/dist/components/checkboxgroup/checkboxgroup.types.js +0 -1
- package/dist/components/link/link.types.d.ts +0 -4
- package/dist/components/link/link.types.d.ts.map +0 -1
- package/dist/components/link/link.types.js +0 -1
- package/dist/components/loader/loader.types.d.ts +0 -3
- package/dist/components/loader/loader.types.d.ts.map +0 -1
- package/dist/components/loader/loader.types.js +0 -1
- package/dist/components/numberbadge/NumberBadge.types.d.ts +0 -3
- package/dist/components/numberbadge/NumberBadge.types.d.ts.map +0 -1
- package/dist/components/numberbadge/NumberBadge.types.js +0 -1
- package/dist/components/overlayloader/OverlayLoader.js +0 -30
- package/dist/components/overlayloader/OverlayLoader.js.map +0 -1
- package/dist/components/overlayloader/OverlayLoader.stories.d.ts +0 -8
- package/dist/components/overlayloader/OverlayLoader.stories.d.ts.map +0 -1
- package/dist/components/overlayloader/OverlayLoader.stories.js +0 -50
- package/dist/components/overlayloader/OverlayLoader.svelte +0 -159
- package/dist/components/overlayloader/OverlayLoader.svelte.d.ts +0 -9
- package/dist/components/overlayloader/OverlayLoader.svelte.d.ts.map +0 -1
- package/dist/components/quantityselector/quantitySelector.types.d.ts +0 -2
- package/dist/components/quantityselector/quantitySelector.types.d.ts.map +0 -1
- package/dist/components/quantityselector/quantitySelector.types.js +0 -1
- package/dist/components/radiogroup/radioGroup.types.d.ts +0 -9
- package/dist/components/radiogroup/radioGroup.types.d.ts.map +0 -1
- package/dist/components/radiogroup/radioGroup.types.js +0 -1
- package/dist/components/select/select.types.d.ts +0 -9
- package/dist/components/select/select.types.d.ts.map +0 -1
- package/dist/components/select/select.types.js +0 -1
- package/dist/components/statusbadge/StatusBadge.types.d.ts +0 -2
- package/dist/components/statusbadge/StatusBadge.types.d.ts.map +0 -1
- package/dist/components/statusbadge/StatusBadge.types.js +0 -1
- package/dist/components/statusdot/StatusDot.types.d.ts +0 -3
- package/dist/components/statusdot/StatusDot.types.d.ts.map +0 -1
- package/dist/components/statusdot/StatusDot.types.js +0 -1
- package/dist/components/tabs/Tab.js +0 -7
- package/dist/components/tabs/Tab.js.map +0 -1
- package/dist/components/tabs/Tab.svelte +0 -137
- package/dist/components/tabs/Tab.svelte.d.ts.map +0 -1
- package/dist/components/textinput/textinput.types.d.ts +0 -3
- package/dist/components/textinput/textinput.types.d.ts.map +0 -1
- package/dist/components/textinput/textinput.types.js +0 -1
- package/dist/components/toggle/toggle.types.d.ts +0 -2
- package/dist/components/toggle/toggle.types.d.ts.map +0 -1
- package/dist/components/toggle/toggle.types.js +0 -1
- package/dist/index-client.js +0 -2
- package/dist/index-client.js.map +0 -1
- package/dist/snippet.js +0 -2
- package/dist/snippet.js.map +0 -1
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# `m-password-input`
|
|
2
|
+
|
|
3
|
+
A password input is a specialized input field used to securely enter and manage passwords. It typically masks the characters entered to protect sensitive information from being seen. It includes a toggle button to show or hide the password, improving usability while maintaining security. Password inputs are commonly used in login forms, account creation, and authentication flows.
|
|
4
|
+
|
|
5
|
+
## Props
|
|
6
|
+
|
|
7
|
+
| Name | Description | Type | Default |
|
|
8
|
+
|------|-------------|------|---------|
|
|
9
|
+
| `id*` | A unique identifier for the password input element, used to associate the label with the form element. | `string` | |
|
|
10
|
+
| `name` | The name attribute for the password input element, typically used for form submission. | `string` | |
|
|
11
|
+
| `value` | The current value of the password input field. | `string` `number` | |
|
|
12
|
+
| `placeholder` | A placeholder text to show in the password input when it is empty. | `string` | |
|
|
13
|
+
| `isinvalid` | If `true`, applies an invalid state to the password input. | `boolean` | |
|
|
14
|
+
| `disabled` | If `true`, disables the password input, making it non-interactive. | `boolean` | |
|
|
15
|
+
| `readonly` | If `true`, the password input is read-only (cannot be edited). | `boolean` | |
|
|
16
|
+
| `isclearable` | If `true`, a clear button will appear when the password input has a value. | `boolean` | |
|
|
17
|
+
| `clearlabel` | The label text for the clear button. | `string` | `Clear content` |
|
|
18
|
+
| `buttonlabel` | Labels of the button displayed when showing or hiding the password. | `{ show: string; hide: string; }` | `{ show: 'Show', hide: 'Hide' }` |
|
|
19
|
+
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{v as C,c as K,p as O,a as R,b as d,w as D,l as A,m as r,L as F,u as G,x as I,f as M,M as H,i as j,j as J,k as c,r as N,t as Q,e as T,g as U}from"../../custom-element.js";import{e as V,i as W}from"../../each.js";import{r as X,s as E,e as Y}from"../../attributes.js";import{b as L}from"../../this.js";var Z=M('<input type="text" inputmode="numeric" maxlength="1" pattern="\\d*" autocomplete="one-time-code"/>'),$=M('<div class="mc-pincode-input svelte-h63szf"></div>');const ee={hash:"svelte-h63szf",code:`/**
|
|
2
2
|
* Do not edit directly, this file was auto-generated.
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
*/.mc-pincode-input.svelte-kgmgk5 {display:inline-flex;column-gap:0.5rem;}
|
|
7
|
-
@media screen and (width <= 1024px) {.mc-pincode-input.svelte-kgmgk5 {flex-wrap:wrap;row-gap:0.75rem;}
|
|
8
|
-
}.mc-pincode-input__control.svelte-kgmgk5 {font-size:1.75rem;transition:box-shadow 200ms ease;background-color:#ffffff;border:1px solid #666666;border-radius:0.25rem;transition:all ease 200ms;color:#000000;display:block;width:3rem;box-sizing:border-box;height:4rem;text-align:center;line-height:1.3;}.mc-pincode-input__control.svelte-kgmgk5::placeholder {color:#666666;}.mc-pincode-input__control.svelte-kgmgk5:focus-within {box-shadow:0 0 0 0.125rem var(--focus-color-mid, #ffffff), 0 0 0 0.25rem var(--focus-color-outer, #000000);outline:0.125rem solid transparent;outline-offset:0.125rem;}.mc-pincode-input__control.svelte-kgmgk5:hover:not(:focus-within) {border-color:#4d4d4d;box-shadow:0 0 0 1px #4d4d4d;}.mc-pincode-input__control.svelte-kgmgk5:disabled {background-color:#d9d9d9;cursor:not-allowed;border-color:transparent;box-shadow:none;color:#737373;pointer-events:none;}.mc-pincode-input__control.is-invalid.svelte-kgmgk5 {border-color:#ea302d;box-shadow:0 0 0 1px #ea302d;}.mc-pincode-input__control.is-invalid.svelte-kgmgk5:hover:not(:focus-within) {border-color:#c61112;box-shadow:0 0 0 1px #c61112;}`};function ue(a,n){H(n,!0),J(a,de);const d=$();let f=p(n,"id",7),l=p(n,"length",7,6),o=p(n,"name",7),w=p(n,"value",7,""),k=p(n,"isInvalid",7,!1),_=p(n,"disabled",7,!1),D=p(n,"readonly",7,!1),B=U(n,["$$slots","$$events","$$legacy","$$host","id","length","name","value","isInvalid","disabled","readonly"]);const u=N(()=>typeof l()=="string"?parseInt(l(),10)||6:l());let m=S(E(Array(s(u)).fill(""))),x=S(E([]));Q(()=>{const e=String(w()??"");L(m,Array.from({length:s(u)},(t,i)=>e[i]??""),!0)});function v(e){queueMicrotask(()=>{var t,i;return(i=(t=s(x))==null?void 0:t[e])==null?void 0:i.focus()})}function I(){const e=s(m).join("");d("input",{value:e}),d("change",{value:e})}function C(e,t){const r=e.target.value.replace(/\D/g,"").slice(0,1);s(m)[t]=r,I(),r&&t+1<s(u)&&v(t+1)}function O(e,t){e.key==="ArrowLeft"&&t>0?(e.preventDefault(),v(t-1)):e.key==="ArrowRight"&&t<s(u)-1?(e.preventDefault(),v(t+1)):e.key==="Backspace"&&s(m)[t]===""&&t>0&&(s(m)[t-1]="",I(),v(t-1))}function P(e){var i;e.preventDefault();const t=(((i=e.clipboardData)==null?void 0:i.getData("text"))??"").replace(/\D/g,"").slice(0,s(u));L(m,Array.from({length:s(u)},(r,b)=>t[b]??""),!0),I(),v(Math.min(t.length,s(u)-1))}var h=ce();return ne(h,e=>({class:"mc-pincode-input",...B,[ae]:e}),[()=>({"is-invalid":k()})],void 0,"svelte-kgmgk5"),ee(h,21,()=>Array(s(u)),te,(e,t,i)=>{var r=le();se(r),z(r,"id",`pincodeItem${i}`);let b;ie(r,(c,y)=>s(x)[y]=c,c=>{var y;return(y=s(x))==null?void 0:y[c]},()=>[i]),X(c=>{b=Z(r,1,"mc-pincode-input__control svelte-kgmgk5",null,b,c),z(r,"name",o()??`pincode-${f()}`),r.disabled=_(),r.readOnly=D(),re(r,s(m)[i])},[()=>({"is-invalid":k()})]),A("input",r,c=>C(c,i)),A("keydown",r,c=>O(c,i)),j(e,r)}),W(h),A("paste",h,oe(P)),j(a,h),V({get id(){return f()},set id(e){f(e),g()},get length(){return l()},set length(e=6){l(e),g()},get name(){return o()},set name(e){o(e),g()},get value(){return w()},set value(e=""){w(e),g()},get isInvalid(){return k()},set isInvalid(e=!1){k(e),g()},get disabled(){return _()},set disabled(e=!1){_(e),g()},get readonly(){return D()},set readonly(e=!1){D(e),g()}})}customElements.define("m-pincode",G(ue,{id:{},length:{},name:{},value:{},isInvalid:{},disabled:{},readonly:{}},[],[],!0));
|
|
3
|
+
*/.mc-pincode-input.svelte-h63szf {display:inline-flex;column-gap:0.5rem;}
|
|
4
|
+
@media screen and (width <= 1024px) {.mc-pincode-input.svelte-h63szf {flex-wrap:wrap;row-gap:0.75rem;}
|
|
5
|
+
}.mc-pincode-input__control.svelte-h63szf {font-size:var(--font-size-400, 1.75rem);transition:box-shadow 200ms ease;background-color:var(--forms-color-background-default, #ffffff);border:var(--border-s, 1px) solid var(--forms-color-border-default, #666666);border-radius:var(--forms-radius-border, 0.25rem);transition:all ease 200ms;color:var(--forms-color-text-default, #000000);display:block;width:3rem;box-sizing:border-box;height:4rem;text-align:center;line-height:var(--line-height-s, 1.3);}.mc-pincode-input__control.svelte-h63szf::placeholder {color:var(--forms-color-placeholder, #666666);}.mc-pincode-input__control.svelte-h63szf:focus-within {box-shadow:0 0 0 0.125rem var(--focus-color-mid, var(--focus-color-outline-mid, #ffffff)), 0 0 0 0.25rem var(--focus-color-outer, var(--focus-color-outline-outer, #000000));outline:0.125rem solid transparent;outline-offset:0.125rem;}.mc-pincode-input__control.svelte-h63szf:hover:not(:focus-within) {border-color:var(--forms-color-border-hover, #4d4d4d);box-shadow:0 0 0 var(--border-s, 1px) var(--forms-color-border-hover, #4d4d4d);}.mc-pincode-input__control.svelte-h63szf:disabled {background-color:var(--forms-color-background-disabled, #d9d9d9);cursor:not-allowed;border-color:transparent;box-shadow:none;color:var(--forms-color-text-disabled, #737373);pointer-events:none;}.mc-pincode-input__control.is-invalid.svelte-h63szf {border-color:var(--forms-color-border-invalid, #ea302d);box-shadow:0 0 0 var(--border-s, 1px) var(--forms-color-border-invalid, #ea302d);}.mc-pincode-input__control.is-invalid.svelte-h63szf:hover:not(:focus-within) {border-color:var(--forms-color-border-invalid-hover, #c61112);box-shadow:0 0 0 var(--border-s, 1px) var(--forms-color-border-invalid-hover, #c61112);}`};function oe(k,n){O(n,!0),R(k,ee);let p=d(n,"id",7),u=d(n,"length",7,6),h=d(n,"name",7),b=d(n,"value",7),g=d(n,"isinvalid",7),_=d(n,"disabled",7),y=d(n,"readonly",7);const l=F(()=>typeof u()=="string"?parseInt(u(),10)||6:u());let i=D(A(Array(r(l)).fill(""))),w=D(A([])),x;G(()=>{const e=String(b()??"");I(i,Array.from({length:r(l)},(o,s)=>e[s]??""),!0)});const f=e=>{queueMicrotask(()=>{var o,s;return(s=(o=r(w))==null?void 0:o[e])==null?void 0:s.focus()})},z=()=>{const e=r(i).join(""),o=new CustomEvent("input",{detail:{value:e},bubbles:!0,composed:!0});x.dispatchEvent(o)},P=(e,o)=>{const t=e.target.value.replace(/\D/g,"").slice(0,1);r(i)[o]=t,z(),t&&o+1<r(l)&&f(o+1)},S=(e,o)=>{e.key==="ArrowLeft"&&o>0?(e.preventDefault(),f(o-1)):e.key==="ArrowRight"&&o<r(l)-1?(e.preventDefault(),f(o+1)):e.key==="Backspace"&&r(i)[o]===""&&o>0&&(r(i)[o-1]="",z(),f(o-1))},q=e=>{var s;e.preventDefault();const o=(((s=e.clipboardData)==null?void 0:s.getData("text"))??"").replace(/\D/g,"").slice(0,r(l));I(i,Array.from({length:r(l)},(t,a)=>o[a]??""),!0),z(),f(Math.min(o.length,r(l)-1))};var B={get id(){return p()},set id(e){p(e),c()},get length(){return u()},set length(e=6){u(e),c()},get name(){return h()},set name(e){h(e),c()},get value(){return b()},set value(e){b(e),c()},get isinvalid(){return g()},set isinvalid(e){g(e),c()},get disabled(){return _()},set disabled(e){_(e),c()},get readonly(){return y()},set readonly(e){y(e),c()}},v=$();return V(v,21,()=>Array(r(l)),W,(e,o,s)=>{var t=Z();X(t),E(t,"id",`pincodeItem${s}`),t.__input=a=>P(a,s),t.__keydown=a=>S(a,s),L(t,(a,m)=>r(w)[m]=a,a=>{var m;return(m=r(w))==null?void 0:m[a]},()=>[s]),Q(()=>{T(t,1,U(["mc-pincode-input__control",g()&&"is-invalid"]),"svelte-h63szf"),E(t,"name",h()??`pincode-${p()}`),t.disabled=_(),t.readOnly=y(),Y(t,r(i)[s])}),j(e,t)}),N(v),L(v,e=>x=e,()=>x),H("paste",v,q),j(k,v),J(B)}C(["input","keydown"]);customElements.define("m-pincode",K(oe,{id:{},length:{},name:{},value:{},isinvalid:{},disabled:{},readonly:{}},[],[],!0));
|
|
9
6
|
//# sourceMappingURL=Pincode.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pincode.js","sources":["../../../node_modules/svelte/src/internal/client/dom/elements/bindings/this.js","../../../node_modules/svelte/src/internal/client/dom/legacy/event-modifiers.js","../../../src/components/pincode/Pincode.svelte"],"sourcesContent":["import { STATE_SYMBOL } from '#client/constants';\nimport { effect, render_effect } from '../../../reactivity/effects.js';\nimport { untrack } from '../../../runtime.js';\nimport { queue_micro_task } from '../../task.js';\n\n/**\n * @param {any} bound_value\n * @param {Element} element_or_component\n * @returns {boolean}\n */\nfunction is_bound_this(bound_value, element_or_component) {\n\treturn (\n\t\tbound_value === element_or_component || bound_value?.[STATE_SYMBOL] === element_or_component\n\t);\n}\n\n/**\n * @param {any} element_or_component\n * @param {(value: unknown, ...parts: unknown[]) => void} update\n * @param {(...parts: unknown[]) => unknown} get_value\n * @param {() => unknown[]} [get_parts] Set if the this binding is used inside an each block,\n * \t\t\t\t\t\t\t\t\t\treturns all the parts of the each block context that are used in the expression\n * @returns {void}\n */\nexport function bind_this(element_or_component = {}, update, get_value, get_parts) {\n\teffect(() => {\n\t\t/** @type {unknown[]} */\n\t\tvar old_parts;\n\n\t\t/** @type {unknown[]} */\n\t\tvar parts;\n\n\t\trender_effect(() => {\n\t\t\told_parts = parts;\n\t\t\t// We only track changes to the parts, not the value itself to avoid unnecessary reruns.\n\t\t\tparts = get_parts?.() || [];\n\n\t\t\tuntrack(() => {\n\t\t\t\tif (element_or_component !== get_value(...parts)) {\n\t\t\t\t\tupdate(element_or_component, ...parts);\n\t\t\t\t\t// If this is an effect rerun (cause: each block context changes), then nullfiy the binding at\n\t\t\t\t\t// the previous position if it isn't already taken over by a different effect.\n\t\t\t\t\tif (old_parts && is_bound_this(get_value(...old_parts), element_or_component)) {\n\t\t\t\t\t\tupdate(null, ...old_parts);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn () => {\n\t\t\t// We cannot use effects in the teardown phase, we we use a microtask instead.\n\t\t\tqueue_micro_task(() => {\n\t\t\t\tif (parts && is_bound_this(get_value(...parts), element_or_component)) {\n\t\t\t\t\tupdate(null, ...parts);\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t});\n\n\treturn element_or_component;\n}\n","import { noop } from '../../../shared/utils.js';\nimport { user_pre_effect } from '../../reactivity/effects.js';\nimport { on } from '../elements/events.js';\n\n/**\n * Substitute for the `trusted` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function trusted(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\tif (event.isTrusted) {\n\t\t\t// @ts-ignore\n\t\t\tfn?.apply(this, args);\n\t\t}\n\t};\n}\n\n/**\n * Substitute for the `self` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function self(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\t// @ts-ignore\n\t\tif (event.target === this) {\n\t\t\t// @ts-ignore\n\t\t\tfn?.apply(this, args);\n\t\t}\n\t};\n}\n\n/**\n * Substitute for the `stopPropagation` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function stopPropagation(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\tevent.stopPropagation();\n\t\t// @ts-ignore\n\t\treturn fn?.apply(this, args);\n\t};\n}\n\n/**\n * Substitute for the `once` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function once(fn) {\n\tvar ran = false;\n\n\treturn function (...args) {\n\t\tif (ran) return;\n\t\tran = true;\n\n\t\t// @ts-ignore\n\t\treturn fn?.apply(this, args);\n\t};\n}\n\n/**\n * Substitute for the `stopImmediatePropagation` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function stopImmediatePropagation(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\tevent.stopImmediatePropagation();\n\t\t// @ts-ignore\n\t\treturn fn?.apply(this, args);\n\t};\n}\n\n/**\n * Substitute for the `preventDefault` event modifier\n * @deprecated\n * @param {(event: Event, ...args: Array<unknown>) => void} fn\n * @returns {(event: Event, ...args: unknown[]) => void}\n */\nexport function preventDefault(fn) {\n\treturn function (...args) {\n\t\tvar event = /** @type {Event} */ (args[0]);\n\t\tevent.preventDefault();\n\t\t// @ts-ignore\n\t\treturn fn?.apply(this, args);\n\t};\n}\n\n/**\n * Substitute for the `passive` event modifier, implemented as an action\n * @deprecated\n * @param {HTMLElement} node\n * @param {[event: string, handler: () => EventListener]} options\n */\nexport function passive(node, [event, handler]) {\n\tuser_pre_effect(() => {\n\t\treturn on(node, event, handler() ?? noop, {\n\t\t\tpassive: true\n\t\t});\n\t});\n}\n\n/**\n * Substitute for the `nonpassive` event modifier, implemented as an action\n * @deprecated\n * @param {HTMLElement} node\n * @param {[event: string, handler: () => EventListener]} options\n */\nexport function nonpassive(node, [event, handler]) {\n\tuser_pre_effect(() => {\n\t\treturn on(node, event, handler() ?? noop, {\n\t\t\tpassive: false\n\t\t});\n\t});\n}\n","<svelte:options customElement={{ tag: 'm-pincode' }} />\n\n<script lang=\"ts\">\n import { createEventDispatcher } from 'svelte';\n\n type PincodeLen = 4 | 5 | 6;\n interface Props {\n id: string;\n length?: PincodeLen | string; // <- peut arriver en string via l'attribut\n name?: string;\n value?: string | number;\n isInvalid?: boolean;\n disabled?: boolean;\n readonly?: boolean;\n [key: string]: any;\n }\n\n const dispatch = createEventDispatcher();\n\n let {\n id,\n length = 6,\n name,\n value = '',\n isInvalid = false,\n disabled = false,\n readonly = false,\n ...attrsAndEvents\n }: Props = $props();\n\n // Normalisation: length numérique (ex. \"6\" -> 6)\n const L = $derived(\n typeof length === 'string' ? parseInt(length, 10) || 6 : length,\n );\n\n // État minimal\n let otp = $state<string[]>(Array(L).fill(''));\n let inputs = $state<HTMLInputElement[]>([]);\n\n // Sync depuis props (value/length normalisé)\n $effect(() => {\n const incoming = String(value ?? '');\n otp = Array.from({ length: L }, (_, i) => incoming[i] ?? '');\n });\n\n function focusInput(i: number) {\n queueMicrotask(() => inputs?.[i]?.focus());\n }\n\n function emit() {\n const joined = otp.join('');\n dispatch('input', { value: joined });\n dispatch('change', { value: joined });\n }\n\n function onInput(e: Event, index: number) {\n const el = e.target as HTMLInputElement;\n const digit = el.value.replace(/\\D/g, '').slice(0, 1);\n otp[index] = digit;\n emit();\n if (digit && index + 1 < L) focusInput(index + 1);\n }\n\n function onKeyDown(e: KeyboardEvent, index: number) {\n if (e.key === 'ArrowLeft' && index > 0) {\n e.preventDefault();\n focusInput(index - 1);\n } else if (e.key === 'ArrowRight' && index < L - 1) {\n e.preventDefault();\n focusInput(index + 1);\n } else if (e.key === 'Backspace' && otp[index] === '' && index > 0) {\n otp[index - 1] = '';\n emit();\n focusInput(index - 1);\n }\n }\n\n function onPaste(e: ClipboardEvent) {\n e.preventDefault();\n const pasted = (e.clipboardData?.getData('text') ?? '')\n .replace(/\\D/g, '')\n .slice(0, L);\n otp = Array.from({ length: L }, (_, i) => pasted[i] ?? '');\n emit();\n focusInput(Math.min(pasted.length, L - 1));\n }\n</script>\n\n<div\n class=\"mc-pincode-input\"\n on:paste|preventDefault={onPaste}\n class:is-invalid={isInvalid}\n {...attrsAndEvents}\n>\n {#each Array(L) as _, i}\n <input\n id={`pincodeItem${i}`}\n bind:this={inputs[i]}\n class=\"mc-pincode-input__control\"\n class:is-invalid={isInvalid}\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"1\"\n pattern=\"\\d*\"\n autocomplete=\"one-time-code\"\n name={name ?? `pincode-${id}`}\n {disabled}\n {readonly}\n value={otp[i]}\n on:input={(e) => onInput(e, i)}\n on:keydown={(e) => onKeyDown(e as KeyboardEvent, i)}\n />\n {/each}\n</div>\n\n<style lang=\"scss\">\n @use '@mozaic-ds/styles/components/pincode-input';\n</style>\n"],"names":["is_bound_this","bound_value","element_or_component","STATE_SYMBOL","bind_this","update","get_value","get_parts","effect","old_parts","parts","render_effect","untrack","queue_micro_task","preventDefault","fn","args","event","dispatch","createEventDispatcher","id","$.prop","$$props","length","name","value","isInvalid","disabled","readonly","attrsAndEvents","$.rest_props","L","$.derived","otp","$.get","inputs","$.state","$.proxy","$.user_effect","incoming","$.set","_","focusInput","i","emit","joined","onInput","index","digit","onKeyDown","onPaste","pasted","_a","$.attribute_effect","div","$0","$.index","$$anchor","$$value","$.set_attribute","input","$.set_value","$.event","e"],"mappings":"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","x_google_ignoreList":[0,1]}
|
|
1
|
+
{"version":3,"file":"Pincode.js","sources":["../../../src/components/pincode/Pincode.svelte"],"sourcesContent":["<svelte:options customElement={{ tag: 'm-pincode' }} />\n\n<script lang=\"ts\">\n /**\n * A pincode input is a specialized input field used to enter short numeric codes, such as verification codes, security PINs, or authentication tokens. It typically separates each digit into individual fields to improve readability and ease of entry. This component is commonly used in two-factor authentication (2FA), password recovery, and secure access flows, ensuring a structured and user-friendly experience.\n *\n * @event input {CustomEvent<{ value: string }>} - Emits when the pincode value changes.\n */\n interface Props {\n /**\n * A unique identifier for the pincode element, used to associate the label with the form element.\n */\n id: string;\n /**\n * The number of input displayed in the pincode element.\n */\n length?: 4 | 5 | 6;\n /**\n * The name attribute for the pincode element, typically used for form submission.\n */\n name?: string;\n /**\n * The current value of the pincode field.\n */\n value?: string | number;\n /**\n * If `true`, applies an invalid state to the pincode.\n */\n isinvalid?: boolean;\n /**\n * If `true`, disables the pincode, making it non-interactive.\n */\n disabled?: boolean;\n /**\n * If `true`, the pincode is read-only (cannot be edited).\n */\n readonly?: boolean;\n }\n\n let {\n id,\n length = 6,\n name,\n value,\n isinvalid,\n disabled,\n readonly,\n }: Props = $props();\n\n const L = $derived(\n typeof length === 'string' ? parseInt(length, 10) || 6 : length,\n );\n\n let otp = $state<string[]>(Array(L).fill(''));\n let inputs = $state<HTMLInputElement[]>([]);\n let element: HTMLElement;\n\n $effect(() => {\n const incoming = String(value ?? '');\n otp = Array.from({ length: L }, (_, i) => incoming[i] ?? '');\n });\n\n const focusInput = (i: number) => {\n queueMicrotask(() => inputs?.[i]?.focus());\n };\n\n const emitInput = () => {\n const joined = otp.join('');\n const event = new CustomEvent('input', {\n detail: { value: joined },\n bubbles: true,\n composed: true,\n });\n element.dispatchEvent(event);\n };\n\n const onInput = (e: Event, index: number) => {\n const el = e.target as HTMLInputElement;\n const digit = el.value.replace(/\\D/g, '').slice(0, 1);\n otp[index] = digit;\n emitInput();\n if (digit && index + 1 < L) focusInput(index + 1);\n };\n\n const onKeyDown = (e: KeyboardEvent, index: number) => {\n if (e.key === 'ArrowLeft' && index > 0) {\n e.preventDefault();\n focusInput(index - 1);\n } else if (e.key === 'ArrowRight' && index < L - 1) {\n e.preventDefault();\n focusInput(index + 1);\n } else if (e.key === 'Backspace' && otp[index] === '' && index > 0) {\n otp[index - 1] = '';\n emitInput();\n focusInput(index - 1);\n }\n };\n\n const onPaste = (e: ClipboardEvent) => {\n e.preventDefault();\n const pasted = (e.clipboardData?.getData('text') ?? '')\n .replace(/\\D/g, '')\n .slice(0, L);\n otp = Array.from({ length: L }, (_, i) => pasted[i] ?? '');\n emitInput();\n focusInput(Math.min(pasted.length, L - 1));\n };\n</script>\n\n<div class=\"mc-pincode-input\" onpaste={onPaste} bind:this={element}>\n {#each Array(L) as _, i}\n <input\n id={`pincodeItem${i}`}\n bind:this={inputs[i]}\n class={['mc-pincode-input__control', isinvalid && 'is-invalid']}\n type=\"text\"\n inputmode=\"numeric\"\n maxlength=\"1\"\n pattern=\"\\d*\"\n autocomplete=\"one-time-code\"\n name={name ?? `pincode-${id}`}\n {disabled}\n {readonly}\n value={otp[i]}\n oninput={(e) => onInput(e, i)}\n onkeydown={(e) => onKeyDown(e as KeyboardEvent, i)}\n />\n {/each}\n</div>\n\n<style lang=\"scss\">\n @use '@mozaic-ds/styles/components/pincode-input';\n</style>\n"],"names":["id","$.prop","$$props","length","name","value","isinvalid","disabled","readonly","L","$.derived","otp","$.get","inputs","$.state","$.proxy","element","$.user_effect","incoming","$.set","_","i","focusInput","emitInput","joined","event","onInput","index","digit","onKeyDown","onPaste","pasted","_a","$.index","$$anchor","input","e","$$value","$.set_attribute","$.set_value","$.bind_this","div"],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
+
import { render, fireEvent } from '@testing-library/svelte';
|
|
3
|
+
import Pincode from './Pincode.svelte';
|
|
4
|
+
describe('m-pincode component', () => {
|
|
5
|
+
const baseProps = {
|
|
6
|
+
id: 'test-pincode',
|
|
7
|
+
length: 4,
|
|
8
|
+
};
|
|
9
|
+
it('renders correct number of inputs', () => {
|
|
10
|
+
const { container } = render(Pincode, { props: baseProps });
|
|
11
|
+
const inputs = container.querySelectorAll('input');
|
|
12
|
+
expect(inputs.length).toBe(4);
|
|
13
|
+
});
|
|
14
|
+
it('displays initial value correctly', () => {
|
|
15
|
+
const value = '1234';
|
|
16
|
+
const { container } = render(Pincode, { props: { ...baseProps, value } });
|
|
17
|
+
const inputs = container.querySelectorAll('input');
|
|
18
|
+
inputs.forEach((input, i) => {
|
|
19
|
+
expect(input.value).toBe(value[i]);
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
it('focuses next input on input', async () => {
|
|
23
|
+
const { container } = render(Pincode, { props: baseProps });
|
|
24
|
+
const inputs = container.querySelectorAll('input');
|
|
25
|
+
await fireEvent.input(inputs[0], { target: { value: '5' } });
|
|
26
|
+
expect(document.activeElement).toBe(inputs[1]);
|
|
27
|
+
});
|
|
28
|
+
it('applies disabled and readonly props', () => {
|
|
29
|
+
const { container } = render(Pincode, {
|
|
30
|
+
props: { ...baseProps, disabled: true, readonly: true },
|
|
31
|
+
});
|
|
32
|
+
const inputs = container.querySelectorAll('input');
|
|
33
|
+
inputs.forEach((input) => {
|
|
34
|
+
expect(input).toBeDisabled();
|
|
35
|
+
expect(input).toHaveAttribute('readonly');
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
it('applies invalid class when isinvalid is true', () => {
|
|
39
|
+
const { container } = render(Pincode, {
|
|
40
|
+
props: { ...baseProps, isinvalid: true },
|
|
41
|
+
});
|
|
42
|
+
const inputs = container.querySelectorAll('input');
|
|
43
|
+
inputs.forEach((input) => {
|
|
44
|
+
expect(input.classList.contains('is-invalid')).toBe(true);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
it('emits input event with concatenated value on input', async () => {
|
|
48
|
+
const { container } = render(Pincode, { props: baseProps });
|
|
49
|
+
const root = container.querySelector('.mc-pincode-input');
|
|
50
|
+
const inputHandler = vi.fn();
|
|
51
|
+
root.addEventListener('input', inputHandler);
|
|
52
|
+
const inputs = container.querySelectorAll('input');
|
|
53
|
+
await fireEvent.input(inputs[0], { target: { value: '1' } });
|
|
54
|
+
await fireEvent.input(inputs[1], { target: { value: '2' } });
|
|
55
|
+
expect(inputHandler).toHaveBeenCalled();
|
|
56
|
+
const lastEvent = inputHandler.mock.calls[inputHandler.mock.calls.length - 1][0];
|
|
57
|
+
expect(lastEvent.detail.value).toBe('12');
|
|
58
|
+
});
|
|
59
|
+
it('handles backspace key to clear previous input and focus', async () => {
|
|
60
|
+
const { container } = render(Pincode, { props: baseProps });
|
|
61
|
+
const inputs = container.querySelectorAll('input');
|
|
62
|
+
await fireEvent.input(inputs[0], { target: { value: '1' } });
|
|
63
|
+
await fireEvent.input(inputs[1], { target: { value: '' } });
|
|
64
|
+
await fireEvent.keyDown(inputs[1], { key: 'Backspace' });
|
|
65
|
+
expect(inputs[0].value).toBe('');
|
|
66
|
+
expect(document.activeElement).toBe(inputs[0]);
|
|
67
|
+
});
|
|
68
|
+
it('handles arrow navigation keys', async () => {
|
|
69
|
+
const { container } = render(Pincode, { props: baseProps });
|
|
70
|
+
const inputs = container.querySelectorAll('input');
|
|
71
|
+
inputs[1].focus();
|
|
72
|
+
await fireEvent.keyDown(inputs[1], { key: 'ArrowLeft' });
|
|
73
|
+
expect(document.activeElement).toBe(inputs[0]);
|
|
74
|
+
inputs[0].focus();
|
|
75
|
+
await fireEvent.keyDown(inputs[0], { key: 'ArrowRight' });
|
|
76
|
+
expect(document.activeElement).toBe(inputs[1]);
|
|
77
|
+
});
|
|
78
|
+
it('handles paste event correctly', async () => {
|
|
79
|
+
const { container } = render(Pincode, { props: baseProps });
|
|
80
|
+
const root = container.querySelector('.mc-pincode-input');
|
|
81
|
+
const inputHandler = vi.fn();
|
|
82
|
+
root.addEventListener('input', inputHandler);
|
|
83
|
+
const pasteEvent = new Event('paste', {
|
|
84
|
+
bubbles: true,
|
|
85
|
+
cancelable: true,
|
|
86
|
+
});
|
|
87
|
+
Object.defineProperty(pasteEvent, 'clipboardData', {
|
|
88
|
+
value: {
|
|
89
|
+
getData: () => '9876',
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
await root.dispatchEvent(pasteEvent);
|
|
93
|
+
expect(inputHandler).toHaveBeenCalled();
|
|
94
|
+
const inputs = container.querySelectorAll('input');
|
|
95
|
+
inputs.forEach((input, i) => {
|
|
96
|
+
expect(input.value).toBe('9876'[i]);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
});
|
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
import type { Meta } from '@storybook/
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
declare const
|
|
7
|
-
export
|
|
8
|
-
export declare const
|
|
9
|
-
export declare const
|
|
10
|
-
export declare const WithInitialValue: any;
|
|
11
|
-
export declare const Disabled: any;
|
|
12
|
-
export declare const Readonly: any;
|
|
13
|
-
export declare const Invalid: any;
|
|
1
|
+
import type { Meta, StoryObj } from '@storybook/web-components-vite';
|
|
2
|
+
declare const meta: Meta;
|
|
3
|
+
export default meta;
|
|
4
|
+
type Story = StoryObj;
|
|
5
|
+
export declare const WithValue: Story;
|
|
6
|
+
export declare const Default: Story;
|
|
7
|
+
export declare const Disabled: Story;
|
|
8
|
+
export declare const ReadOnly: Story;
|
|
9
|
+
export declare const Invalid: Story;
|
|
14
10
|
//# sourceMappingURL=Pincode.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Pincode.stories.d.ts","sourceRoot":"","sources":["../../../src/components/pincode/Pincode.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"Pincode.stories.d.ts","sourceRoot":"","sources":["../../../src/components/pincode/Pincode.stories.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAKrE,QAAA,MAAM,IAAI,EAAE,IA6CX,CAAC;AAEF,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC;AAEtB,eAAO,MAAM,SAAS,EAAE,KAKvB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC,eAAO,MAAM,QAAQ,EAAE,KAKtB,CAAC;AAEF,eAAO,MAAM,QAAQ,EAAE,KAMtB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,KAKrB,CAAC"}
|
|
@@ -1,140 +1,75 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { html } from 'lit';
|
|
2
|
+
import { ifDefined } from 'lit-html/directives/if-defined.js';
|
|
2
3
|
import { action } from 'storybook/actions';
|
|
3
|
-
|
|
4
|
-
* The `MPincode` component is the **Svelte / WebComponent** implementation
|
|
5
|
-
* of the Mozaic Pincode Input.
|
|
6
|
-
*/
|
|
7
|
-
export default {
|
|
4
|
+
const meta = {
|
|
8
5
|
title: 'Form Elements/Pincode',
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
args: {
|
|
12
|
-
id: 'pincode-demo',
|
|
13
|
-
name: 'otp',
|
|
14
|
-
length: 6,
|
|
15
|
-
value: '',
|
|
16
|
-
isInvalid: false,
|
|
17
|
-
disabled: false,
|
|
18
|
-
readonly: false,
|
|
19
|
-
},
|
|
6
|
+
component: 'm-pincode',
|
|
7
|
+
tags: ['v2'],
|
|
20
8
|
argTypes: {
|
|
21
|
-
id: {
|
|
22
|
-
description: 'Identifiant unique du pincode',
|
|
23
|
-
control: 'text',
|
|
24
|
-
},
|
|
25
|
-
name: {
|
|
26
|
-
description: 'Attribut name pour la soumission de formulaire',
|
|
27
|
-
control: 'text',
|
|
28
|
-
},
|
|
29
9
|
length: {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
description: 'Valeur initiale/contrôlée du pincode',
|
|
36
|
-
control: 'text',
|
|
37
|
-
},
|
|
38
|
-
isInvalid: {
|
|
39
|
-
description: 'Applique l’état invalide',
|
|
40
|
-
control: 'boolean',
|
|
41
|
-
table: { category: 'State' },
|
|
42
|
-
},
|
|
43
|
-
disabled: {
|
|
44
|
-
description: 'Désactive le pincode',
|
|
45
|
-
control: 'boolean',
|
|
46
|
-
table: { category: 'State' },
|
|
47
|
-
},
|
|
48
|
-
readonly: {
|
|
49
|
-
description: 'Lecture seule',
|
|
50
|
-
control: 'boolean',
|
|
51
|
-
table: { category: 'State' },
|
|
10
|
+
control: {
|
|
11
|
+
type: 'number',
|
|
12
|
+
min: 4,
|
|
13
|
+
max: 6,
|
|
14
|
+
},
|
|
52
15
|
},
|
|
53
16
|
input: {
|
|
54
|
-
|
|
55
|
-
table: { category: 'Events' },
|
|
56
|
-
action: 'input',
|
|
57
|
-
},
|
|
58
|
-
change: {
|
|
59
|
-
description: 'Émis à chaque changement (CustomEvent<{ value: string }>)',
|
|
60
|
-
table: { category: 'Events' },
|
|
61
|
-
action: 'change',
|
|
17
|
+
control: false,
|
|
62
18
|
},
|
|
63
19
|
},
|
|
20
|
+
args: {
|
|
21
|
+
id: 'pincodeId',
|
|
22
|
+
},
|
|
23
|
+
render: (args) => {
|
|
24
|
+
const onInput = action('input');
|
|
25
|
+
const onFocus = action('focus');
|
|
26
|
+
const onBlur = action('blur');
|
|
27
|
+
return html `
|
|
28
|
+
<m-pincode
|
|
29
|
+
id=${ifDefined(args.id)}
|
|
30
|
+
name=${ifDefined(args.name)}
|
|
31
|
+
value=${ifDefined(args.value)}
|
|
32
|
+
length=${ifDefined(args.length)}
|
|
33
|
+
isinvalid=${ifDefined(args.isinvalid)}
|
|
34
|
+
disabled=${ifDefined(args.disabled)}
|
|
35
|
+
readonly=${ifDefined(args.readonly)}
|
|
36
|
+
@input=${(event) => {
|
|
37
|
+
onInput(event);
|
|
38
|
+
}}
|
|
39
|
+
@focus=${(event) => {
|
|
40
|
+
onFocus(event);
|
|
41
|
+
}}
|
|
42
|
+
@blur=${(event) => {
|
|
43
|
+
onBlur(event);
|
|
44
|
+
}}
|
|
45
|
+
></m-pincode>
|
|
46
|
+
`;
|
|
47
|
+
},
|
|
64
48
|
};
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
el.setAttribute('name', args.name);
|
|
72
|
-
if (args.length)
|
|
73
|
-
el.setAttribute('length', String(args.length));
|
|
74
|
-
if (args.value)
|
|
75
|
-
el.setAttribute('value', String(args.value));
|
|
76
|
-
if (args.isInvalid)
|
|
77
|
-
el.setAttribute('isinvalid', 'true');
|
|
78
|
-
if (args.disabled)
|
|
79
|
-
el.setAttribute('disabled', 'true');
|
|
80
|
-
if (args.readonly)
|
|
81
|
-
el.setAttribute('readonly', 'true');
|
|
82
|
-
// Actions Storybook
|
|
83
|
-
el.addEventListener('input', action('input'));
|
|
84
|
-
el.addEventListener('change', action('change'));
|
|
85
|
-
return el;
|
|
86
|
-
};
|
|
87
|
-
export const Default = Template.bind({});
|
|
88
|
-
Default.args = {};
|
|
89
|
-
Default.play = async ({ canvasElement }) => {
|
|
90
|
-
const host = canvasElement.querySelector('m-pincode');
|
|
91
|
-
const root = host.shadowRoot;
|
|
92
|
-
const inputs = root.querySelectorAll('.mc-pincode-input__control');
|
|
93
|
-
expect(inputs.length).toBe(6);
|
|
94
|
-
await userEvent.click(inputs[0]);
|
|
95
|
-
await userEvent.type(inputs[0], '123456');
|
|
96
|
-
const joined = Array.from(inputs)
|
|
97
|
-
.map((i) => i.value)
|
|
98
|
-
.join('');
|
|
99
|
-
expect(joined).toBe('123456');
|
|
100
|
-
};
|
|
101
|
-
export const FourDigits = Template.bind({});
|
|
102
|
-
FourDigits.args = { length: 4 };
|
|
103
|
-
FourDigits.play = async ({ canvasElement }) => {
|
|
104
|
-
const host = canvasElement.querySelector('m-pincode');
|
|
105
|
-
const vals = Array.from(host.shadowRoot.querySelectorAll('.mc-pincode-input__control'));
|
|
106
|
-
expect(vals.length).toBe(4);
|
|
107
|
-
await userEvent.type(vals[0], '9876');
|
|
108
|
-
expect(vals.map((i) => i.value).join('')).toBe('9876');
|
|
109
|
-
};
|
|
110
|
-
export const WithInitialValue = Template.bind({});
|
|
111
|
-
WithInitialValue.args = { length: 4, value: '2468' };
|
|
112
|
-
WithInitialValue.play = async ({ canvasElement }) => {
|
|
113
|
-
const host = canvasElement.querySelector('m-pincode');
|
|
114
|
-
const inputs = host.shadowRoot.querySelectorAll('.mc-pincode-input__control');
|
|
115
|
-
const joined = Array.from(inputs)
|
|
116
|
-
.map((i) => i.value)
|
|
117
|
-
.join('');
|
|
118
|
-
expect(joined).toBe('2468'.padEnd(inputs.length, ''));
|
|
49
|
+
export default meta;
|
|
50
|
+
export const WithValue = {
|
|
51
|
+
args: {
|
|
52
|
+
id: 'valueId',
|
|
53
|
+
value: '123098',
|
|
54
|
+
},
|
|
119
55
|
};
|
|
120
|
-
export const
|
|
121
|
-
Disabled
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
56
|
+
export const Default = {};
|
|
57
|
+
export const Disabled = {
|
|
58
|
+
args: {
|
|
59
|
+
id: 'disableId',
|
|
60
|
+
disabled: true,
|
|
61
|
+
},
|
|
126
62
|
};
|
|
127
|
-
export const
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
63
|
+
export const ReadOnly = {
|
|
64
|
+
args: {
|
|
65
|
+
id: 'readonlyId',
|
|
66
|
+
value: '123098',
|
|
67
|
+
readonly: true,
|
|
68
|
+
},
|
|
133
69
|
};
|
|
134
|
-
export const Invalid =
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
expect(container.classList.contains('is-invalid')).toBe(true);
|
|
70
|
+
export const Invalid = {
|
|
71
|
+
args: {
|
|
72
|
+
id: 'invalidId',
|
|
73
|
+
isinvalid: true,
|
|
74
|
+
},
|
|
140
75
|
};
|