@llui/components 0.4.10 → 0.5.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/dist/components/accordion.d.ts +13 -13
- package/dist/components/accordion.d.ts.map +1 -1
- package/dist/components/accordion.js +9 -9
- package/dist/components/accordion.js.map +1 -1
- package/dist/components/alert-dialog.d.ts +8 -8
- package/dist/components/alert-dialog.d.ts.map +1 -1
- package/dist/components/alert-dialog.js +2 -2
- package/dist/components/alert-dialog.js.map +1 -1
- package/dist/components/angle-slider.d.ts +13 -13
- package/dist/components/angle-slider.d.ts.map +1 -1
- package/dist/components/angle-slider.js +11 -11
- package/dist/components/angle-slider.js.map +1 -1
- package/dist/components/async-list.d.ts +7 -7
- package/dist/components/async-list.d.ts.map +1 -1
- package/dist/components/async-list.js +5 -8
- package/dist/components/async-list.js.map +1 -1
- package/dist/components/avatar.d.ts +9 -9
- package/dist/components/avatar.d.ts.map +1 -1
- package/dist/components/avatar.js +7 -7
- package/dist/components/avatar.js.map +1 -1
- package/dist/components/carousel.d.ts +18 -18
- package/dist/components/carousel.d.ts.map +1 -1
- package/dist/components/carousel.js +12 -12
- package/dist/components/carousel.js.map +1 -1
- package/dist/components/cascade-select.d.ts +12 -12
- package/dist/components/cascade-select.d.ts.map +1 -1
- package/dist/components/cascade-select.js +8 -8
- package/dist/components/cascade-select.js.map +1 -1
- package/dist/components/checkbox.d.ts +14 -14
- package/dist/components/checkbox.d.ts.map +1 -1
- package/dist/components/checkbox.js +12 -12
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/clipboard.d.ts +8 -8
- package/dist/components/clipboard.d.ts.map +1 -1
- package/dist/components/clipboard.js +6 -6
- package/dist/components/clipboard.js.map +1 -1
- package/dist/components/collapsible.d.ts +11 -11
- package/dist/components/collapsible.d.ts.map +1 -1
- package/dist/components/collapsible.js +9 -9
- package/dist/components/collapsible.js.map +1 -1
- package/dist/components/color-picker.d.ts +19 -19
- package/dist/components/color-picker.d.ts.map +1 -1
- package/dist/components/color-picker.js +21 -21
- package/dist/components/color-picker.js.map +1 -1
- package/dist/components/combobox.d.ts +25 -25
- package/dist/components/combobox.d.ts.map +1 -1
- package/dist/components/combobox.js +54 -59
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/context-menu.d.ts +14 -14
- package/dist/components/context-menu.d.ts.map +1 -1
- package/dist/components/context-menu.js +15 -19
- package/dist/components/context-menu.js.map +1 -1
- package/dist/components/date-input.d.ts +13 -13
- package/dist/components/date-input.d.ts.map +1 -1
- package/dist/components/date-input.js +11 -11
- package/dist/components/date-input.js.map +1 -1
- package/dist/components/date-picker.d.ts +11 -11
- package/dist/components/date-picker.d.ts.map +1 -1
- package/dist/components/date-picker.js +7 -7
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/dialog.d.ts +15 -15
- package/dist/components/dialog.d.ts.map +1 -1
- package/dist/components/dialog.js +45 -50
- package/dist/components/dialog.js.map +1 -1
- package/dist/components/drawer.d.ts +13 -13
- package/dist/components/drawer.d.ts.map +1 -1
- package/dist/components/drawer.js +44 -49
- package/dist/components/drawer.js.map +1 -1
- package/dist/components/editable.d.ts +11 -11
- package/dist/components/editable.d.ts.map +1 -1
- package/dist/components/editable.js +9 -9
- package/dist/components/editable.js.map +1 -1
- package/dist/components/file-upload.d.ts +19 -19
- package/dist/components/file-upload.d.ts.map +1 -1
- package/dist/components/file-upload.js +14 -14
- package/dist/components/file-upload.js.map +1 -1
- package/dist/components/floating-panel.d.ts +14 -14
- package/dist/components/floating-panel.d.ts.map +1 -1
- package/dist/components/floating-panel.js +13 -14
- package/dist/components/floating-panel.js.map +1 -1
- package/dist/components/form.d.ts +9 -9
- package/dist/components/form.d.ts.map +1 -1
- package/dist/components/form.js +7 -7
- package/dist/components/form.js.map +1 -1
- package/dist/components/hover-card.d.ts +9 -9
- package/dist/components/hover-card.d.ts.map +1 -1
- package/dist/components/hover-card.js +12 -13
- package/dist/components/hover-card.js.map +1 -1
- package/dist/components/image-cropper.d.ts +8 -8
- package/dist/components/image-cropper.d.ts.map +1 -1
- package/dist/components/image-cropper.js +7 -8
- package/dist/components/image-cropper.js.map +1 -1
- package/dist/components/in-view.d.ts +6 -6
- package/dist/components/in-view.d.ts.map +1 -1
- package/dist/components/in-view.js +2 -2
- package/dist/components/in-view.js.map +1 -1
- package/dist/components/listbox.d.ts +16 -16
- package/dist/components/listbox.d.ts.map +1 -1
- package/dist/components/listbox.js +16 -16
- package/dist/components/listbox.js.map +1 -1
- package/dist/components/marquee.d.ts +8 -8
- package/dist/components/marquee.d.ts.map +1 -1
- package/dist/components/marquee.js +8 -11
- package/dist/components/marquee.js.map +1 -1
- package/dist/components/menu.d.ts +15 -15
- package/dist/components/menu.d.ts.map +1 -1
- package/dist/components/menu.js +16 -17
- package/dist/components/menu.js.map +1 -1
- package/dist/components/navigation-menu.d.ts +12 -12
- package/dist/components/navigation-menu.d.ts.map +1 -1
- package/dist/components/navigation-menu.js +8 -8
- package/dist/components/navigation-menu.js.map +1 -1
- package/dist/components/number-input.d.ts +18 -18
- package/dist/components/number-input.d.ts.map +1 -1
- package/dist/components/number-input.js +16 -20
- package/dist/components/number-input.js.map +1 -1
- package/dist/components/pagination.d.ts +13 -13
- package/dist/components/pagination.d.ts.map +1 -1
- package/dist/components/pagination.js +11 -17
- package/dist/components/pagination.js.map +1 -1
- package/dist/components/password-input.d.ts +11 -11
- package/dist/components/password-input.d.ts.map +1 -1
- package/dist/components/password-input.js +11 -11
- package/dist/components/password-input.js.map +1 -1
- package/dist/components/pin-input.d.ts +9 -9
- package/dist/components/pin-input.d.ts.map +1 -1
- package/dist/components/pin-input.js +9 -9
- package/dist/components/pin-input.js.map +1 -1
- package/dist/components/popover.d.ts +11 -11
- package/dist/components/popover.d.ts.map +1 -1
- package/dist/components/popover.js +61 -60
- package/dist/components/popover.js.map +1 -1
- package/dist/components/presence.d.ts +7 -5
- package/dist/components/presence.d.ts.map +1 -1
- package/dist/components/presence.js +5 -3
- package/dist/components/presence.js.map +1 -1
- package/dist/components/progress.d.ts +14 -14
- package/dist/components/progress.d.ts.map +1 -1
- package/dist/components/progress.js +12 -12
- package/dist/components/progress.js.map +1 -1
- package/dist/components/qr-code.d.ts +7 -7
- package/dist/components/qr-code.d.ts.map +1 -1
- package/dist/components/qr-code.js +7 -7
- package/dist/components/qr-code.js.map +1 -1
- package/dist/components/radio-group.d.ts +15 -15
- package/dist/components/radio-group.d.ts.map +1 -1
- package/dist/components/radio-group.js +12 -13
- package/dist/components/radio-group.js.map +1 -1
- package/dist/components/rating-group.d.ts +13 -13
- package/dist/components/rating-group.d.ts.map +1 -1
- package/dist/components/rating-group.js +10 -11
- package/dist/components/rating-group.js.map +1 -1
- package/dist/components/scroll-area.d.ts +10 -10
- package/dist/components/scroll-area.d.ts.map +1 -1
- package/dist/components/scroll-area.js +10 -15
- package/dist/components/scroll-area.js.map +1 -1
- package/dist/components/select.d.ts +26 -26
- package/dist/components/select.d.ts.map +1 -1
- package/dist/components/select.js +29 -33
- package/dist/components/select.js.map +1 -1
- package/dist/components/signature-pad.d.ts +12 -12
- package/dist/components/signature-pad.d.ts.map +1 -1
- package/dist/components/signature-pad.js +10 -10
- package/dist/components/signature-pad.js.map +1 -1
- package/dist/components/slider.d.ts +22 -22
- package/dist/components/slider.d.ts.map +1 -1
- package/dist/components/slider.js +17 -17
- package/dist/components/slider.js.map +1 -1
- package/dist/components/sortable.d.ts +11 -11
- package/dist/components/sortable.d.ts.map +1 -1
- package/dist/components/sortable.js +20 -20
- package/dist/components/sortable.js.map +1 -1
- package/dist/components/splitter.d.ts +15 -15
- package/dist/components/splitter.d.ts.map +1 -1
- package/dist/components/splitter.js +15 -15
- package/dist/components/splitter.js.map +1 -1
- package/dist/components/steps.d.ts +14 -14
- package/dist/components/steps.d.ts.map +1 -1
- package/dist/components/steps.js +10 -16
- package/dist/components/steps.js.map +1 -1
- package/dist/components/switch.d.ts +12 -12
- package/dist/components/switch.d.ts.map +1 -1
- package/dist/components/switch.js +10 -10
- package/dist/components/switch.js.map +1 -1
- package/dist/components/tabs.d.ts +15 -15
- package/dist/components/tabs.d.ts.map +1 -1
- package/dist/components/tabs.js +11 -11
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/tags-input.d.ts +14 -14
- package/dist/components/tags-input.d.ts.map +1 -1
- package/dist/components/tags-input.js +10 -10
- package/dist/components/tags-input.js.map +1 -1
- package/dist/components/theme-switch.d.ts +5 -5
- package/dist/components/theme-switch.d.ts.map +1 -1
- package/dist/components/theme-switch.js +3 -3
- package/dist/components/theme-switch.js.map +1 -1
- package/dist/components/time-picker.d.ts +19 -19
- package/dist/components/time-picker.d.ts.map +1 -1
- package/dist/components/time-picker.js +17 -17
- package/dist/components/time-picker.js.map +1 -1
- package/dist/components/timer.d.ts +10 -10
- package/dist/components/timer.d.ts.map +1 -1
- package/dist/components/timer.js +8 -8
- package/dist/components/timer.js.map +1 -1
- package/dist/components/toast.d.ts +8 -8
- package/dist/components/toast.d.ts.map +1 -1
- package/dist/components/toast.js +4 -4
- package/dist/components/toast.js.map +1 -1
- package/dist/components/toc.d.ts +12 -12
- package/dist/components/toc.d.ts.map +1 -1
- package/dist/components/toc.js +8 -8
- package/dist/components/toc.js.map +1 -1
- package/dist/components/toggle-group.d.ts +13 -13
- package/dist/components/toggle-group.d.ts.map +1 -1
- package/dist/components/toggle-group.js +9 -9
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/toggle.d.ts +8 -8
- package/dist/components/toggle.d.ts.map +1 -1
- package/dist/components/toggle.js +6 -6
- package/dist/components/toggle.js.map +1 -1
- package/dist/components/tooltip.d.ts +10 -10
- package/dist/components/tooltip.d.ts.map +1 -1
- package/dist/components/tooltip.js +13 -14
- package/dist/components/tooltip.js.map +1 -1
- package/dist/components/tour.d.ts +7 -7
- package/dist/components/tour.d.ts.map +1 -1
- package/dist/components/tour.js +5 -5
- package/dist/components/tour.js.map +1 -1
- package/dist/components/tree-view.d.ts +19 -19
- package/dist/components/tree-view.d.ts.map +1 -1
- package/dist/components/tree-view.js +23 -23
- package/dist/components/tree-view.js.map +1 -1
- package/dist/patterns/confirm-dialog.d.ts +4 -4
- package/dist/patterns/confirm-dialog.d.ts.map +1 -1
- package/dist/patterns/confirm-dialog.js +7 -9
- package/dist/patterns/confirm-dialog.js.map +1 -1
- package/package.json +3 -3
- package/dist/components/enter-view.d.ts +0 -73
- package/dist/components/enter-view.d.ts.map +0 -1
- package/dist/components/enter-view.js +0 -51
- package/dist/utils/validators.d.ts +0 -34
- package/dist/utils/validators.d.ts.map +0 -1
- package/dist/utils/validators.js +0 -83
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-input.js","sourceRoot":"","sources":["../../src/components/date-input.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAyD5C;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,SAA8B,KAAK;IAC1E,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC5B,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAA;IACzB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IACxD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACnC,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;IAC9C,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAA;IAC3C,IAAI,IAAY,EAAE,KAAa,EAAE,GAAW,CAAA;IAC5C,IAAI,MAAM,KAAK,KAAK,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/C,CAAC;QAAA,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,IAAgC,CAAA;IACxD,CAAC;SAAM,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAC3B,CAAC;QAAA,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAgC,CAAA;IACxD,CAAC;SAAM,CAAC;QACN,CAAC;QAAA,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,IAAgC,CAAA;IACxD,CAAC;IACD,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,EAAE,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAC3E,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAA;IACxC,oEAAoE;IACpE,IAAI,CAAC,CAAC,WAAW,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE,KAAK,KAAK,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,GAAG,EAAE,CAAC;QAClF,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC;AAED,qCAAqC;AACrC,MAAM,UAAU,UAAU,CAAC,CAAO;IAChC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACrD,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACxD,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;IACnD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAA;AAC3B,CAAC;AAED,SAAS,QAAQ,CAAC,KAAkB,EAAE,GAAgB,EAAE,GAAgB;IACtE,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAA;IAC/B,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,GAAG,GAAG;QAAE,OAAO,YAAY,CAAA;IACpD,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,GAAG,GAAG;QAAE,OAAO,WAAW,CAAA;IACnD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAsB,EAAE;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAA;IAChC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAA;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAA;IAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAA;IAC5B,OAAO;QACL,KAAK;QACL,KAAK;QACL,GAAG;QACH,GAAG;QACH,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC;QAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;QAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;QAChC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;KACjC,CAAA;AACH,CAAC;AAED,MAAM,UAAU,MAAM,CACpB,KAAqB,EACrB,GAAiB,EACjB,SAA8B,KAAK;IAEnC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,UAAU;QAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACrF,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;YAC3C,MAAM,KAAK,GAAc,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;gBACvC,CAAC,CAAC,MAAM,KAAK,IAAI;oBACf,CAAC,CAAC,SAAS;oBACX,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC;gBAC1C,CAAC,CAAC,IAAI,CAAA;YACR,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAA;QACnE,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;YACpD,OAAO;gBACL,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE;gBACvF,EAAE;aACH,CAAA;QACH,CAAC;QACD,KAAK,OAAO;YACV,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;QAChE,KAAK,QAAQ;YACX,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAC3F,KAAK,QAAQ;YACX,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAC3F,KAAK,aAAa;YAChB,OAAO,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAA;IACrD,CAAC;AACH,CAAC;AA+CD,MAAM,UAAU,OAAO,CACrB,GAA6B,EAC7B,IAAwB,EACxB,OAAuB,EAAE;IAEzB,MAAM,MAAM,GAAG,UAAU,CAAY,aAAa,CAAC,CAAA;IACnD,OAAO;QACL,IAAI,EAAE;YACJ,YAAY,EAAE,YAAY;YAC1B,WAAW,EAAE,MAAM;YACnB,eAAe,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1D,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;SACvD;QACD,KAAK,EAAE;YACL,IAAI,EAAE,MAAM;YACZ,SAAS,EAAE,SAAS;YACpB,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,KAAK;YACjB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK;YAC1B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ;YAChC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ;YAChC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ;YAChC,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;YAC1D,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5E,YAAY,EAAE,YAAY;YAC1B,WAAW,EAAE,OAAO;YACpB,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;gBACzC,MAAM,EAAE,GAAG,CAAC,CAAC,MAA0B,CAAA;gBACvC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;YAC7C,CAAC,CAAC;YACF,MAAM,EAAE,GAAG,EAAE;gBACX,+CAA+C;YACjD,CAAC;SACF;QACD,YAAY,EAAE;YACZ,IAAI,EAAE,QAAQ;YACd,YAAY,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,CAAI,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC;YACtE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;YACpC,YAAY,EAAE,YAAY;YAC1B,WAAW,EAAE,eAAe;YAC5B,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;SACjE;QACD,SAAS,EAAE;YACT,IAAI,EAAE,OAAO;YACb,WAAW,EAAE,QAAQ;YACrB,YAAY,EAAE,YAAY;YAC1B,WAAW,EAAE,YAAY;YACzB,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI;SACrC;KACF,CAAA;AACH,CAAC;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAA","sourcesContent":["import type { Send } from '@llui/dom'\nimport { useContext, tagSend } from '@llui/dom'\nimport { LocaleContext } from '../locale.js'\nimport type { Locale } from '../locale.js'\n\n/**\n * Date input — keyboard-only date field with masked parsing. Unlike\n * date-picker, this is a plain <input> that parses ISO-ish date strings\n * as the user types. Separate from date-picker to keep each focused.\n *\n * The machine holds the raw input string + the parsed Date (null until\n * a complete/valid value is entered). Min/max bounds are validated on\n * every change, populating `error` when out of range.\n */\n\nexport type DateError = 'invalid' | 'before-min' | 'after-max' | null\n\nexport interface DateInputState {\n /** Raw string as typed by the user. */\n input: string\n /** Parsed date, or null if the input is empty/invalid/out-of-range. */\n value: Date | null\n /** Optional lower bound (inclusive). */\n min: Date | null\n /** Optional upper bound (inclusive). */\n max: Date | null\n error: DateError\n disabled: boolean\n readOnly: boolean\n required: boolean\n}\n\nexport type DateInputMsg =\n /** @intent(\"Update the raw text the user has typed (re-parses to a Date)\") */\n | { type: 'setInput'; value: string }\n /**\n * @intent(\"Set the parsed date directly (also updates the displayed text)\")\n * @codec(\"iso-date\")\n */\n | { type: 'setValue'; value: Date | null }\n /** @intent(\"Clear the input and the parsed date\") */\n | { type: 'clear' }\n /** @humanOnly */\n | { type: 'setMin'; min: Date | null }\n /** @humanOnly */\n | { type: 'setMax'; max: Date | null }\n /** @humanOnly */\n | { type: 'setDisabled'; disabled: boolean }\n\nexport interface DateInputInit {\n input?: string\n value?: Date | null\n min?: Date | null\n max?: Date | null\n disabled?: boolean\n readOnly?: boolean\n required?: boolean\n}\n\n/**\n * Parse an ISO-ish date string. Accepts:\n * - YYYY-MM-DD\n * - YYYY/MM/DD\n * - MM/DD/YYYY (US)\n * - DD/MM/YYYY (EU)\n * Returns null for anything else.\n */\nexport function parseDate(input: string, format: 'iso' | 'us' | 'eu' = 'iso'): Date | null {\n const trimmed = input.trim()\n if (!trimmed) return null\n const parts = trimmed.split(/[-/]/).map((p) => p.trim())\n if (parts.length !== 3) return null\n const nums = parts.map((p) => parseInt(p, 10))\n if (nums.some((n) => isNaN(n))) return null\n let year: number, month: number, day: number\n if (format === 'iso' || parts[0]!.length === 4) {\n ;[year, month, day] = nums as [number, number, number]\n } else if (format === 'us') {\n ;[month, day, year] = nums as [number, number, number]\n } else {\n ;[day, month, year] = nums as [number, number, number]\n }\n if (month < 1 || month > 12 || day < 1 || day > 31 || year < 1) return null\n const d = new Date(year, month - 1, day)\n // JS Date normalizes: new Date(2024, 1, 30) → March 1. Reject that.\n if (d.getFullYear() !== year || d.getMonth() !== month - 1 || d.getDate() !== day) {\n return null\n }\n return d\n}\n\n/** Format a Date as 'YYYY-MM-DD'. */\nexport function formatDate(d: Date): string {\n const y = d.getFullYear().toString().padStart(4, '0')\n const m = (d.getMonth() + 1).toString().padStart(2, '0')\n const day = d.getDate().toString().padStart(2, '0')\n return `${y}-${m}-${day}`\n}\n\nfunction validate(value: Date | null, min: Date | null, max: Date | null): DateError {\n if (value === null) return null\n if (min !== null && value < min) return 'before-min'\n if (max !== null && value > max) return 'after-max'\n return null\n}\n\nexport function init(opts: DateInputInit = {}): DateInputState {\n const value = opts.value ?? null\n const input = opts.input ?? (value ? formatDate(value) : '')\n const min = opts.min ?? null\n const max = opts.max ?? null\n return {\n input,\n value,\n min,\n max,\n error: validate(value, min, max),\n disabled: opts.disabled ?? false,\n readOnly: opts.readOnly ?? false,\n required: opts.required ?? false,\n }\n}\n\nexport function update(\n state: DateInputState,\n msg: DateInputMsg,\n format: 'iso' | 'us' | 'eu' = 'iso',\n): [DateInputState, never[]] {\n if ((state.disabled || state.readOnly) && msg.type === 'setInput') return [state, []]\n switch (msg.type) {\n case 'setInput': {\n const parsed = parseDate(msg.value, format)\n const error: DateError = msg.value.trim()\n ? parsed === null\n ? 'invalid'\n : validate(parsed, state.min, state.max)\n : null\n return [{ ...state, input: msg.value, value: parsed, error }, []]\n }\n case 'setValue': {\n const input = msg.value ? formatDate(msg.value) : ''\n return [\n { ...state, input, value: msg.value, error: validate(msg.value, state.min, state.max) },\n [],\n ]\n }\n case 'clear':\n return [{ ...state, input: '', value: null, error: null }, []]\n case 'setMin':\n return [{ ...state, min: msg.min, error: validate(state.value, msg.min, state.max) }, []]\n case 'setMax':\n return [{ ...state, max: msg.max, error: validate(state.value, state.min, msg.max) }, []]\n case 'setDisabled':\n return [{ ...state, disabled: msg.disabled }, []]\n }\n}\n\nexport interface DateInputParts<S> {\n root: {\n 'data-scope': 'date-input'\n 'data-part': 'root'\n 'data-disabled': (s: S) => '' | undefined\n 'data-invalid': (s: S) => '' | undefined\n }\n input: {\n type: 'text'\n inputMode: 'numeric'\n autoComplete: 'off'\n spellCheck: false\n value: (s: S) => string\n disabled: (s: S) => boolean\n readOnly: (s: S) => boolean\n required: (s: S) => boolean\n 'aria-invalid': (s: S) => 'true' | undefined\n placeholder?: string\n 'data-scope': 'date-input'\n 'data-part': 'input'\n onInput: (e: Event) => void\n onBlur: (e: FocusEvent) => void\n }\n clearTrigger: {\n type: 'button'\n 'aria-label': string | ((s: S) => string)\n disabled: (s: S) => boolean\n 'data-scope': 'date-input'\n 'data-part': 'clear-trigger'\n onClick: (e: MouseEvent) => void\n }\n errorText: {\n role: 'alert'\n 'aria-live': 'polite'\n 'data-scope': 'date-input'\n 'data-part': 'error-text'\n hidden: (s: S) => boolean\n }\n}\n\nexport interface ConnectOptions {\n placeholder?: string\n clearLabel?: string\n}\n\nexport function connect<S>(\n get: (s: S) => DateInputState,\n send: Send<DateInputMsg>,\n opts: ConnectOptions = {},\n): DateInputParts<S> {\n const locale = useContext<S, Locale>(LocaleContext)\n return {\n root: {\n 'data-scope': 'date-input',\n 'data-part': 'root',\n 'data-disabled': (s) => (get(s).disabled ? '' : undefined),\n 'data-invalid': (s) => (get(s).error ? '' : undefined),\n },\n input: {\n type: 'text',\n inputMode: 'numeric',\n autoComplete: 'off',\n spellCheck: false,\n value: (s) => get(s).input,\n disabled: (s) => get(s).disabled,\n readOnly: (s) => get(s).readOnly,\n required: (s) => get(s).required,\n 'aria-invalid': (s) => (get(s).error ? 'true' : undefined),\n ...(opts.placeholder !== undefined ? { placeholder: opts.placeholder } : {}),\n 'data-scope': 'date-input',\n 'data-part': 'input',\n onInput: tagSend(send, ['setInput'], (e) => {\n const el = e.target as HTMLInputElement\n send({ type: 'setInput', value: el.value })\n }),\n onBlur: () => {\n /* consumers can add their own blur handling */\n },\n },\n clearTrigger: {\n type: 'button',\n 'aria-label': opts.clearLabel ?? ((s: S) => locale(s).dateInput.clear),\n disabled: (s) => get(s).input === '',\n 'data-scope': 'date-input',\n 'data-part': 'clear-trigger',\n onClick: tagSend(send, ['clear'], () => send({ type: 'clear' })),\n },\n errorText: {\n role: 'alert',\n 'aria-live': 'polite',\n 'data-scope': 'date-input',\n 'data-part': 'error-text',\n hidden: (s) => get(s).error === null,\n },\n }\n}\n\nexport const dateInput = { init, update, connect, parseDate, formatDate }\n"]}
|
|
1
|
+
{"version":3,"file":"date-input.js","sourceRoot":"","sources":["../../src/components/date-input.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Send, Signal } from '@llui/dom'\nimport { useContext, tagSend } from '@llui/dom'\nimport { LocaleContext } from '../locale.js'\n\n/**\n * Date input — keyboard-only date field with masked parsing. Unlike\n * date-picker, this is a plain <input> that parses ISO-ish date strings\n * as the user types. Separate from date-picker to keep each focused.\n *\n * The machine holds the raw input string + the parsed Date (null until\n * a complete/valid value is entered). Min/max bounds are validated on\n * every change, populating `error` when out of range.\n */\n\nexport type DateError = 'invalid' | 'before-min' | 'after-max' | null\n\nexport interface DateInputState {\n /** Raw string as typed by the user. */\n input: string\n /** Parsed date, or null if the input is empty/invalid/out-of-range. */\n value: Date | null\n /** Optional lower bound (inclusive). */\n min: Date | null\n /** Optional upper bound (inclusive). */\n max: Date | null\n error: DateError\n disabled: boolean\n readOnly: boolean\n required: boolean\n}\n\nexport type DateInputMsg =\n /** @intent(\"Update the raw text the user has typed (re-parses to a Date)\") */\n | { type: 'setInput'; value: string }\n /**\n * @intent(\"Set the parsed date directly (also updates the displayed text)\")\n * @codec(\"iso-date\")\n */\n | { type: 'setValue'; value: Date | null }\n /** @intent(\"Clear the input and the parsed date\") */\n | { type: 'clear' }\n /** @humanOnly */\n | { type: 'setMin'; min: Date | null }\n /** @humanOnly */\n | { type: 'setMax'; max: Date | null }\n /** @humanOnly */\n | { type: 'setDisabled'; disabled: boolean }\n\nexport interface DateInputInit {\n input?: string\n value?: Date | null\n min?: Date | null\n max?: Date | null\n disabled?: boolean\n readOnly?: boolean\n required?: boolean\n}\n\n/**\n * Parse an ISO-ish date string. Accepts:\n * - YYYY-MM-DD\n * - YYYY/MM/DD\n * - MM/DD/YYYY (US)\n * - DD/MM/YYYY (EU)\n * Returns null for anything else.\n */\nexport function parseDate(input: string, format: 'iso' | 'us' | 'eu' = 'iso'): Date | null {\n const trimmed = input.trim()\n if (!trimmed) return null\n const parts = trimmed.split(/[-/]/).map((p) => p.trim())\n if (parts.length !== 3) return null\n const nums = parts.map((p) => parseInt(p, 10))\n if (nums.some((n) => isNaN(n))) return null\n let year: number, month: number, day: number\n if (format === 'iso' || parts[0]!.length === 4) {\n ;[year, month, day] = nums as [number, number, number]\n } else if (format === 'us') {\n ;[month, day, year] = nums as [number, number, number]\n } else {\n ;[day, month, year] = nums as [number, number, number]\n }\n if (month < 1 || month > 12 || day < 1 || day > 31 || year < 1) return null\n const d = new Date(year, month - 1, day)\n // JS Date normalizes: new Date(2024, 1, 30) → March 1. Reject that.\n if (d.getFullYear() !== year || d.getMonth() !== month - 1 || d.getDate() !== day) {\n return null\n }\n return d\n}\n\n/** Format a Date as 'YYYY-MM-DD'. */\nexport function formatDate(d: Date): string {\n const y = d.getFullYear().toString().padStart(4, '0')\n const m = (d.getMonth() + 1).toString().padStart(2, '0')\n const day = d.getDate().toString().padStart(2, '0')\n return `${y}-${m}-${day}`\n}\n\nfunction validate(value: Date | null, min: Date | null, max: Date | null): DateError {\n if (value === null) return null\n if (min !== null && value < min) return 'before-min'\n if (max !== null && value > max) return 'after-max'\n return null\n}\n\nexport function init(opts: DateInputInit = {}): DateInputState {\n const value = opts.value ?? null\n const input = opts.input ?? (value ? formatDate(value) : '')\n const min = opts.min ?? null\n const max = opts.max ?? null\n return {\n input,\n value,\n min,\n max,\n error: validate(value, min, max),\n disabled: opts.disabled ?? false,\n readOnly: opts.readOnly ?? false,\n required: opts.required ?? false,\n }\n}\n\nexport function update(\n state: DateInputState,\n msg: DateInputMsg,\n format: 'iso' | 'us' | 'eu' = 'iso',\n): [DateInputState, never[]] {\n if ((state.disabled || state.readOnly) && msg.type === 'setInput') return [state, []]\n switch (msg.type) {\n case 'setInput': {\n const parsed = parseDate(msg.value, format)\n const error: DateError = msg.value.trim()\n ? parsed === null\n ? 'invalid'\n : validate(parsed, state.min, state.max)\n : null\n return [{ ...state, input: msg.value, value: parsed, error }, []]\n }\n case 'setValue': {\n const input = msg.value ? formatDate(msg.value) : ''\n return [\n { ...state, input, value: msg.value, error: validate(msg.value, state.min, state.max) },\n [],\n ]\n }\n case 'clear':\n return [{ ...state, input: '', value: null, error: null }, []]\n case 'setMin':\n return [{ ...state, min: msg.min, error: validate(state.value, msg.min, state.max) }, []]\n case 'setMax':\n return [{ ...state, max: msg.max, error: validate(state.value, state.min, msg.max) }, []]\n case 'setDisabled':\n return [{ ...state, disabled: msg.disabled }, []]\n }\n}\n\nexport interface DateInputParts {\n root: {\n 'data-scope': 'date-input'\n 'data-part': 'root'\n 'data-disabled': Signal<'' | undefined>\n 'data-invalid': Signal<'' | undefined>\n }\n input: {\n type: 'text'\n inputMode: 'numeric'\n autoComplete: 'off'\n spellCheck: false\n value: Signal<string>\n disabled: Signal<boolean>\n readOnly: Signal<boolean>\n required: Signal<boolean>\n 'aria-invalid': Signal<'true' | undefined>\n placeholder?: string\n 'data-scope': 'date-input'\n 'data-part': 'input'\n onInput: (e: Event) => void\n onBlur: (e: FocusEvent) => void\n }\n clearTrigger: {\n type: 'button'\n 'aria-label': string\n disabled: Signal<boolean>\n 'data-scope': 'date-input'\n 'data-part': 'clear-trigger'\n onClick: (e: MouseEvent) => void\n }\n errorText: {\n role: 'alert'\n 'aria-live': 'polite'\n 'data-scope': 'date-input'\n 'data-part': 'error-text'\n hidden: Signal<boolean>\n }\n}\n\nexport interface ConnectOptions {\n placeholder?: string\n clearLabel?: string\n}\n\nexport function connect(\n state: Signal<DateInputState>,\n send: Send<DateInputMsg>,\n opts: ConnectOptions = {},\n): DateInputParts {\n const locale = useContext(LocaleContext)\n return {\n root: {\n 'data-scope': 'date-input',\n 'data-part': 'root',\n 'data-disabled': state.map((s) => (s.disabled ? '' : undefined)),\n 'data-invalid': state.map((s) => (s.error ? '' : undefined)),\n },\n input: {\n type: 'text',\n inputMode: 'numeric',\n autoComplete: 'off',\n spellCheck: false,\n value: state.map((s) => s.input),\n disabled: state.map((s) => s.disabled),\n readOnly: state.map((s) => s.readOnly),\n required: state.map((s) => s.required),\n 'aria-invalid': state.map((s) => (s.error ? 'true' : undefined)),\n ...(opts.placeholder !== undefined ? { placeholder: opts.placeholder } : {}),\n 'data-scope': 'date-input',\n 'data-part': 'input',\n onInput: tagSend(send, ['setInput'], (e) => {\n const el = e.target as HTMLInputElement\n send({ type: 'setInput', value: el.value })\n }),\n onBlur: () => {\n /* consumers can add their own blur handling */\n },\n },\n clearTrigger: {\n type: 'button',\n 'aria-label': opts.clearLabel ?? locale.dateInput.clear,\n disabled: state.map((s) => s.input === ''),\n 'data-scope': 'date-input',\n 'data-part': 'clear-trigger',\n onClick: tagSend(send, ['clear'], () => send({ type: 'clear' })),\n },\n errorText: {\n role: 'alert',\n 'aria-live': 'polite',\n 'data-scope': 'date-input',\n 'data-part': 'error-text',\n hidden: state.map((s) => s.error === null),\n },\n }\n}\n\nexport const dateInput = { init, update, connect, parseDate, formatDate }\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Send } from '@llui/dom';
|
|
1
|
+
import type { Send, Signal } from '@llui/dom';
|
|
2
2
|
/**
|
|
3
3
|
* Date picker — calendar with month navigation and date selection. Works
|
|
4
4
|
* with plain Date objects internally but exposes ISO strings (YYYY-MM-DD)
|
|
@@ -108,7 +108,7 @@ export declare function monthGrid(state: DatePickerState): DayCell[];
|
|
|
108
108
|
* required by the WAI-ARIA grid pattern.
|
|
109
109
|
*/
|
|
110
110
|
export declare function weekRows(cells: DayCell[]): DayCell[][];
|
|
111
|
-
export interface DayCellParts
|
|
111
|
+
export interface DayCellParts {
|
|
112
112
|
cell: {
|
|
113
113
|
role: 'gridcell';
|
|
114
114
|
'aria-selected': boolean;
|
|
@@ -127,15 +127,15 @@ export interface DayCellParts<_S> {
|
|
|
127
127
|
onFocus: (e: FocusEvent) => void;
|
|
128
128
|
};
|
|
129
129
|
}
|
|
130
|
-
export interface DatePickerParts
|
|
130
|
+
export interface DatePickerParts {
|
|
131
131
|
root: {
|
|
132
132
|
'data-scope': 'date-picker';
|
|
133
133
|
'data-part': 'root';
|
|
134
|
-
'data-disabled':
|
|
134
|
+
'data-disabled': Signal<'' | undefined>;
|
|
135
135
|
};
|
|
136
136
|
grid: {
|
|
137
137
|
role: 'grid';
|
|
138
|
-
'aria-label':
|
|
138
|
+
'aria-label': Signal<string>;
|
|
139
139
|
'data-scope': 'date-picker';
|
|
140
140
|
'data-part': 'grid';
|
|
141
141
|
};
|
|
@@ -146,28 +146,28 @@ export interface DatePickerParts<S> {
|
|
|
146
146
|
};
|
|
147
147
|
prevMonthTrigger: {
|
|
148
148
|
type: 'button';
|
|
149
|
-
'aria-label': string
|
|
150
|
-
disabled:
|
|
149
|
+
'aria-label': string;
|
|
150
|
+
disabled: Signal<boolean>;
|
|
151
151
|
'data-scope': 'date-picker';
|
|
152
152
|
'data-part': 'prev-month-trigger';
|
|
153
153
|
onClick: (e: MouseEvent) => void;
|
|
154
154
|
};
|
|
155
155
|
nextMonthTrigger: {
|
|
156
156
|
type: 'button';
|
|
157
|
-
'aria-label': string
|
|
158
|
-
disabled:
|
|
157
|
+
'aria-label': string;
|
|
158
|
+
disabled: Signal<boolean>;
|
|
159
159
|
'data-scope': 'date-picker';
|
|
160
160
|
'data-part': 'next-month-trigger';
|
|
161
161
|
onClick: (e: MouseEvent) => void;
|
|
162
162
|
};
|
|
163
|
-
dayCell: (cell: DayCell) => DayCellParts
|
|
163
|
+
dayCell: (cell: DayCell) => DayCellParts;
|
|
164
164
|
}
|
|
165
165
|
export interface ConnectOptions {
|
|
166
166
|
prevLabel?: string;
|
|
167
167
|
nextLabel?: string;
|
|
168
168
|
gridLabel?: (year: number, month: number) => string;
|
|
169
169
|
}
|
|
170
|
-
export declare function connect
|
|
170
|
+
export declare function connect(state: Signal<DatePickerState>, send: Send<DatePickerMsg>, opts?: ConnectOptions): DatePickerParts;
|
|
171
171
|
export declare const datePicker: {
|
|
172
172
|
init: typeof init;
|
|
173
173
|
update: typeof update;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-picker.d.ts","sourceRoot":"","sources":["../../src/components/date-picker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"date-picker.d.ts","sourceRoot":"","sources":["../../src/components/date-picker.ts"],"names":[],"mappings":"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"}
|
|
@@ -194,20 +194,20 @@ export function weekRows(cells) {
|
|
|
194
194
|
}
|
|
195
195
|
return rows;
|
|
196
196
|
}
|
|
197
|
-
export function connect(
|
|
197
|
+
export function connect(state, send, opts = {}) {
|
|
198
198
|
const locale = useContext(LocaleContext);
|
|
199
|
-
const prevLabel = opts.prevLabel ??
|
|
200
|
-
const nextLabel = opts.nextLabel ??
|
|
199
|
+
const prevLabel = opts.prevLabel ?? locale.datePicker.prev;
|
|
200
|
+
const nextLabel = opts.nextLabel ?? locale.datePicker.next;
|
|
201
201
|
const gridLabel = opts.gridLabel ?? en.datePicker.grid;
|
|
202
202
|
return {
|
|
203
203
|
root: {
|
|
204
204
|
'data-scope': 'date-picker',
|
|
205
205
|
'data-part': 'root',
|
|
206
|
-
'data-disabled': (s) => (
|
|
206
|
+
'data-disabled': state.map((s) => (s.disabled ? '' : undefined)),
|
|
207
207
|
},
|
|
208
208
|
grid: {
|
|
209
209
|
role: 'grid',
|
|
210
|
-
'aria-label': (s) => gridLabel(
|
|
210
|
+
'aria-label': state.map((s) => gridLabel(s.visibleYear, s.visibleMonth)),
|
|
211
211
|
'data-scope': 'date-picker',
|
|
212
212
|
'data-part': 'grid',
|
|
213
213
|
},
|
|
@@ -219,7 +219,7 @@ export function connect(get, send, opts = {}) {
|
|
|
219
219
|
prevMonthTrigger: {
|
|
220
220
|
type: 'button',
|
|
221
221
|
'aria-label': prevLabel,
|
|
222
|
-
disabled: (s) =>
|
|
222
|
+
disabled: state.map((s) => s.disabled),
|
|
223
223
|
'data-scope': 'date-picker',
|
|
224
224
|
'data-part': 'prev-month-trigger',
|
|
225
225
|
onClick: tagSend(send, ['prevMonth'], () => send({ type: 'prevMonth' })),
|
|
@@ -227,7 +227,7 @@ export function connect(get, send, opts = {}) {
|
|
|
227
227
|
nextMonthTrigger: {
|
|
228
228
|
type: 'button',
|
|
229
229
|
'aria-label': nextLabel,
|
|
230
|
-
disabled: (s) =>
|
|
230
|
+
disabled: state.map((s) => s.disabled),
|
|
231
231
|
'data-scope': 'date-picker',
|
|
232
232
|
'data-part': 'next-month-trigger',
|
|
233
233
|
onClick: tagSend(send, ['nextMonth'], () => send({ type: 'nextMonth' })),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-picker.js","sourceRoot":"","sources":["../../src/components/date-picker.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Send } from '@llui/dom'\nimport { useContext, tagSend } from '@llui/dom'\nimport { flipArrow } from '../utils/direction.js'\nimport { LocaleContext, en } from '../locale.js'\nimport type { Locale } from '../locale.js'\n\n/**\n * Date picker — calendar with month navigation and date selection. Works\n * with plain Date objects internally but exposes ISO strings (YYYY-MM-DD)\n * for serialization-friendly state.\n *\n * Keyboard navigation: arrow keys move by day, PageUp/Down by month,\n * Home/End to start/end of week, Enter to select.\n */\n\nexport interface DatePickerState {\n /** Selected date as YYYY-MM-DD, or null. */\n value: string | null\n /** The month currently visible (1-indexed, 1-12). */\n visibleMonth: number\n /** The year currently visible. */\n visibleYear: number\n /** The date currently focused by the keyboard (YYYY-MM-DD). */\n focused: string\n /** Minimum selectable date, inclusive. */\n min: string | null\n /** Maximum selectable date, inclusive. */\n max: string | null\n /** 0=Sunday, 1=Monday. */\n weekStartsOn: 0 | 1\n disabled: boolean\n}\n\nexport type DatePickerMsg =\n /** @intent(\"Set the selected date (YYYY-MM-DD), or null to clear\") */\n | { type: 'setValue'; value: string | null }\n /** @humanOnly */\n | { type: 'setFocused'; date: string }\n /** @intent(\"Show the previous month in the calendar\") */\n | { type: 'prevMonth' }\n /** @intent(\"Show the next month in the calendar\") */\n | { type: 'nextMonth' }\n /** @intent(\"Show the previous year (same month)\") */\n | { type: 'prevYear' }\n /** @intent(\"Show the next year (same month)\") */\n | { type: 'nextYear' }\n /** @intent(\"Select the currently-focused date\") */\n | { type: 'selectFocused' }\n /** @humanOnly */\n | { type: 'moveFocus'; days: number }\n /** @humanOnly */\n | { type: 'focusStartOfWeek' }\n /** @humanOnly */\n | { type: 'focusEndOfWeek' }\n /** @humanOnly */\n | { type: 'focusToday' }\n /** @intent(\"Clear the selected date\") */\n | { type: 'clear' }\n\nexport interface DatePickerInit {\n value?: string | null\n visibleMonth?: number\n visibleYear?: number\n min?: string | null\n max?: string | null\n weekStartsOn?: 0 | 1\n disabled?: boolean\n}\n\nfunction pad(n: number): string {\n return n.toString().padStart(2, '0')\n}\n\nfunction parseIso(iso: string): { y: number; m: number; d: number } | null {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(iso)\n if (!match) return null\n return { y: Number(match[1]), m: Number(match[2]), d: Number(match[3]) }\n}\n\nfunction toIso(y: number, m: number, d: number): string {\n return `${y}-${pad(m)}-${pad(d)}`\n}\n\nfunction daysInMonth(year: number, month: number): number {\n return new Date(year, month, 0).getDate()\n}\n\nfunction todayIso(): string {\n const now = new Date()\n return toIso(now.getFullYear(), now.getMonth() + 1, now.getDate())\n}\n\nfunction addDays(iso: string, days: number): string {\n const p = parseIso(iso)\n if (!p) return iso\n const d = new Date(p.y, p.m - 1, p.d)\n d.setDate(d.getDate() + days)\n return toIso(d.getFullYear(), d.getMonth() + 1, d.getDate())\n}\n\nfunction isInRange(iso: string, min: string | null, max: string | null): boolean {\n if (min && iso < min) return false\n if (max && iso > max) return false\n return true\n}\n\nexport function init(opts: DatePickerInit = {}): DatePickerState {\n const today = todayIso()\n const parsed = opts.value ? parseIso(opts.value) : null\n const visibleMonth = opts.visibleMonth ?? parsed?.m ?? new Date().getMonth() + 1\n const visibleYear = opts.visibleYear ?? parsed?.y ?? new Date().getFullYear()\n return {\n value: opts.value ?? null,\n visibleMonth,\n visibleYear,\n focused: opts.value ?? today,\n min: opts.min ?? null,\n max: opts.max ?? null,\n weekStartsOn: opts.weekStartsOn ?? 0,\n disabled: opts.disabled ?? false,\n }\n}\n\nfunction normalizeMonth(year: number, month: number): { year: number; month: number } {\n let y = year\n let m = month\n while (m > 12) {\n m -= 12\n y += 1\n }\n while (m < 1) {\n m += 12\n y -= 1\n }\n return { year: y, month: m }\n}\n\nfunction syncVisibleMonth(state: DatePickerState, date: string): DatePickerState {\n const p = parseIso(date)\n if (!p) return state\n if (p.y === state.visibleYear && p.m === state.visibleMonth) return state\n return { ...state, visibleYear: p.y, visibleMonth: p.m }\n}\n\nexport function update(state: DatePickerState, msg: DatePickerMsg): [DatePickerState, never[]] {\n if (state.disabled) return [state, []]\n switch (msg.type) {\n case 'setValue':\n return [{ ...state, value: msg.value, focused: msg.value ?? state.focused }, []]\n case 'setFocused':\n return [syncVisibleMonth({ ...state, focused: msg.date }, msg.date), []]\n case 'prevMonth': {\n const n = normalizeMonth(state.visibleYear, state.visibleMonth - 1)\n return [{ ...state, visibleYear: n.year, visibleMonth: n.month }, []]\n }\n case 'nextMonth': {\n const n = normalizeMonth(state.visibleYear, state.visibleMonth + 1)\n return [{ ...state, visibleYear: n.year, visibleMonth: n.month }, []]\n }\n case 'prevYear':\n return [{ ...state, visibleYear: state.visibleYear - 1 }, []]\n case 'nextYear':\n return [{ ...state, visibleYear: state.visibleYear + 1 }, []]\n case 'selectFocused':\n if (!isInRange(state.focused, state.min, state.max)) return [state, []]\n return [{ ...state, value: state.focused }, []]\n case 'moveFocus': {\n const next = addDays(state.focused, msg.days)\n return [syncVisibleMonth({ ...state, focused: next }, next), []]\n }\n case 'focusStartOfWeek': {\n const p = parseIso(state.focused)\n if (!p) return [state, []]\n const d = new Date(p.y, p.m - 1, p.d)\n const delta = (d.getDay() - state.weekStartsOn + 7) % 7\n return [update(state, { type: 'moveFocus', days: -delta })[0], []]\n }\n case 'focusEndOfWeek': {\n const p = parseIso(state.focused)\n if (!p) return [state, []]\n const d = new Date(p.y, p.m - 1, p.d)\n const delta = 6 - ((d.getDay() - state.weekStartsOn + 7) % 7)\n return [update(state, { type: 'moveFocus', days: delta })[0], []]\n }\n case 'focusToday': {\n const today = todayIso()\n return [syncVisibleMonth({ ...state, focused: today }, today), []]\n }\n case 'clear':\n return [{ ...state, value: null }, []]\n }\n}\n\nexport interface DayCell {\n iso: string\n day: number\n inMonth: boolean\n isToday: boolean\n isSelected: boolean\n isFocused: boolean\n isDisabled: boolean\n}\n\n/**\n * Compute the grid of days visible in the current month view. Always returns\n * full weeks: leading days from previous month and trailing from next month\n * to fill the grid.\n */\nexport function monthGrid(state: DatePickerState): DayCell[] {\n const y = state.visibleYear\n const m = state.visibleMonth\n const first = new Date(y, m - 1, 1)\n const firstDay = first.getDay()\n const leadDays = (firstDay - state.weekStartsOn + 7) % 7\n const totalDays = daysInMonth(y, m)\n const today = todayIso()\n\n const cells: DayCell[] = []\n // Leading: previous month's trailing days\n for (let i = leadDays; i > 0; i--) {\n const d = new Date(y, m - 1, 1 - i)\n const iso = toIso(d.getFullYear(), d.getMonth() + 1, d.getDate())\n cells.push({\n iso,\n day: d.getDate(),\n inMonth: false,\n isToday: iso === today,\n isSelected: iso === state.value,\n isFocused: iso === state.focused,\n isDisabled: !isInRange(iso, state.min, state.max),\n })\n }\n // Current month\n for (let d = 1; d <= totalDays; d++) {\n const iso = toIso(y, m, d)\n cells.push({\n iso,\n day: d,\n inMonth: true,\n isToday: iso === today,\n isSelected: iso === state.value,\n isFocused: iso === state.focused,\n isDisabled: !isInRange(iso, state.min, state.max),\n })\n }\n // Trailing: next month's leading days to fill to multiple of 7\n const remaining = (7 - (cells.length % 7)) % 7\n for (let d = 1; d <= remaining; d++) {\n const next = new Date(y, m, d)\n const iso = toIso(next.getFullYear(), next.getMonth() + 1, next.getDate())\n cells.push({\n iso,\n day: d,\n inMonth: false,\n isToday: iso === today,\n isSelected: iso === state.value,\n isFocused: iso === state.focused,\n isDisabled: !isInRange(iso, state.min, state.max),\n })\n }\n return cells\n}\n\n/**\n * Group a flat `DayCell[]` (from `monthGrid`) into rows of 7 — one row\n * per week — so the view can wrap each in a `role=\"row\"` element as\n * required by the WAI-ARIA grid pattern.\n */\nexport function weekRows(cells: DayCell[]): DayCell[][] {\n const rows: DayCell[][] = []\n for (let i = 0; i < cells.length; i += 7) {\n rows.push(cells.slice(i, i + 7))\n }\n return rows\n}\n\nexport interface DayCellParts<_S> {\n cell: {\n role: 'gridcell'\n 'aria-selected': boolean\n 'aria-disabled': 'true' | undefined\n tabIndex: number\n 'data-scope': 'date-picker'\n 'data-part': 'day-cell'\n 'data-date': string\n 'data-in-month': '' | undefined\n 'data-today': '' | undefined\n 'data-selected': '' | undefined\n 'data-focused': '' | undefined\n 'data-disabled': '' | undefined\n onClick: (e: MouseEvent) => void\n onKeyDown: (e: KeyboardEvent) => void\n onFocus: (e: FocusEvent) => void\n }\n}\n\nexport interface DatePickerParts<S> {\n root: {\n 'data-scope': 'date-picker'\n 'data-part': 'root'\n 'data-disabled': (s: S) => '' | undefined\n }\n grid: {\n role: 'grid'\n 'aria-label': (s: S) => string\n 'data-scope': 'date-picker'\n 'data-part': 'grid'\n }\n row: {\n role: 'row'\n 'data-scope': 'date-picker'\n 'data-part': 'row'\n }\n prevMonthTrigger: {\n type: 'button'\n 'aria-label': string | ((s: S) => string)\n disabled: (s: S) => boolean\n 'data-scope': 'date-picker'\n 'data-part': 'prev-month-trigger'\n onClick: (e: MouseEvent) => void\n }\n nextMonthTrigger: {\n type: 'button'\n 'aria-label': string | ((s: S) => string)\n disabled: (s: S) => boolean\n 'data-scope': 'date-picker'\n 'data-part': 'next-month-trigger'\n onClick: (e: MouseEvent) => void\n }\n dayCell: (cell: DayCell) => DayCellParts<S>\n}\n\nexport interface ConnectOptions {\n prevLabel?: string\n nextLabel?: string\n gridLabel?: (year: number, month: number) => string\n}\n\nexport function connect<S>(\n get: (s: S) => DatePickerState,\n send: Send<DatePickerMsg>,\n opts: ConnectOptions = {},\n): DatePickerParts<S> {\n const locale = useContext<S, Locale>(LocaleContext)\n const prevLabel: string | ((s: S) => string) =\n opts.prevLabel ?? ((s: S) => locale(s).datePicker.prev)\n const nextLabel: string | ((s: S) => string) =\n opts.nextLabel ?? ((s: S) => locale(s).datePicker.next)\n const gridLabel = opts.gridLabel ?? en.datePicker.grid\n\n return {\n root: {\n 'data-scope': 'date-picker',\n 'data-part': 'root',\n 'data-disabled': (s) => (get(s).disabled ? '' : undefined),\n },\n grid: {\n role: 'grid',\n 'aria-label': (s) => gridLabel(get(s).visibleYear, get(s).visibleMonth),\n 'data-scope': 'date-picker',\n 'data-part': 'grid',\n },\n row: {\n role: 'row',\n 'data-scope': 'date-picker',\n 'data-part': 'row',\n },\n prevMonthTrigger: {\n type: 'button',\n 'aria-label': prevLabel,\n disabled: (s) => get(s).disabled,\n 'data-scope': 'date-picker',\n 'data-part': 'prev-month-trigger',\n onClick: tagSend(send, ['prevMonth'], () => send({ type: 'prevMonth' })),\n },\n nextMonthTrigger: {\n type: 'button',\n 'aria-label': nextLabel,\n disabled: (s) => get(s).disabled,\n 'data-scope': 'date-picker',\n 'data-part': 'next-month-trigger',\n onClick: tagSend(send, ['nextMonth'], () => send({ type: 'nextMonth' })),\n },\n dayCell: (cell: DayCell): DayCellParts<S> => ({\n cell: {\n role: 'gridcell',\n 'aria-selected': cell.isSelected,\n 'aria-disabled': cell.isDisabled ? 'true' : undefined,\n tabIndex: cell.isFocused ? 0 : -1,\n 'data-scope': 'date-picker',\n 'data-part': 'day-cell',\n 'data-date': cell.iso,\n 'data-in-month': cell.inMonth ? '' : undefined,\n 'data-today': cell.isToday ? '' : undefined,\n 'data-selected': cell.isSelected ? '' : undefined,\n 'data-focused': cell.isFocused ? '' : undefined,\n 'data-disabled': cell.isDisabled ? '' : undefined,\n onClick: tagSend(send, ['setFocused', 'selectFocused'], () => {\n if (cell.isDisabled) return\n send({ type: 'setFocused', date: cell.iso })\n send({ type: 'selectFocused' })\n }),\n onFocus: tagSend(send, ['setFocused'], () => send({ type: 'setFocused', date: cell.iso })),\n onKeyDown: tagSend(\n send,\n [\n 'moveFocus',\n 'prevMonth',\n 'nextMonth',\n 'focusStartOfWeek',\n 'focusEndOfWeek',\n 'selectFocused',\n ],\n (e) => {\n const key = flipArrow(e.key, e.currentTarget as Element)\n switch (key) {\n case 'ArrowLeft':\n e.preventDefault()\n send({ type: 'moveFocus', days: -1 })\n return\n case 'ArrowRight':\n e.preventDefault()\n send({ type: 'moveFocus', days: 1 })\n return\n case 'ArrowUp':\n e.preventDefault()\n send({ type: 'moveFocus', days: -7 })\n return\n case 'ArrowDown':\n e.preventDefault()\n send({ type: 'moveFocus', days: 7 })\n return\n case 'PageUp':\n e.preventDefault()\n send({ type: 'prevMonth' })\n return\n case 'PageDown':\n e.preventDefault()\n send({ type: 'nextMonth' })\n return\n case 'Home':\n e.preventDefault()\n send({ type: 'focusStartOfWeek' })\n return\n case 'End':\n e.preventDefault()\n send({ type: 'focusEndOfWeek' })\n return\n case 'Enter':\n case ' ':\n e.preventDefault()\n send({ type: 'selectFocused' })\n return\n }\n },\n ),\n },\n }),\n }\n}\n\nexport const datePicker = { init, update, connect, monthGrid, weekRows }\n"]}
|
|
1
|
+
{"version":3,"file":"date-picker.js","sourceRoot":"","sources":["../../src/components/date-picker.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Send, Signal } from '@llui/dom'\nimport { useContext, tagSend } from '@llui/dom'\nimport { flipArrow } from '../utils/direction.js'\nimport { LocaleContext, en } from '../locale.js'\n\n/**\n * Date picker — calendar with month navigation and date selection. Works\n * with plain Date objects internally but exposes ISO strings (YYYY-MM-DD)\n * for serialization-friendly state.\n *\n * Keyboard navigation: arrow keys move by day, PageUp/Down by month,\n * Home/End to start/end of week, Enter to select.\n */\n\nexport interface DatePickerState {\n /** Selected date as YYYY-MM-DD, or null. */\n value: string | null\n /** The month currently visible (1-indexed, 1-12). */\n visibleMonth: number\n /** The year currently visible. */\n visibleYear: number\n /** The date currently focused by the keyboard (YYYY-MM-DD). */\n focused: string\n /** Minimum selectable date, inclusive. */\n min: string | null\n /** Maximum selectable date, inclusive. */\n max: string | null\n /** 0=Sunday, 1=Monday. */\n weekStartsOn: 0 | 1\n disabled: boolean\n}\n\nexport type DatePickerMsg =\n /** @intent(\"Set the selected date (YYYY-MM-DD), or null to clear\") */\n | { type: 'setValue'; value: string | null }\n /** @humanOnly */\n | { type: 'setFocused'; date: string }\n /** @intent(\"Show the previous month in the calendar\") */\n | { type: 'prevMonth' }\n /** @intent(\"Show the next month in the calendar\") */\n | { type: 'nextMonth' }\n /** @intent(\"Show the previous year (same month)\") */\n | { type: 'prevYear' }\n /** @intent(\"Show the next year (same month)\") */\n | { type: 'nextYear' }\n /** @intent(\"Select the currently-focused date\") */\n | { type: 'selectFocused' }\n /** @humanOnly */\n | { type: 'moveFocus'; days: number }\n /** @humanOnly */\n | { type: 'focusStartOfWeek' }\n /** @humanOnly */\n | { type: 'focusEndOfWeek' }\n /** @humanOnly */\n | { type: 'focusToday' }\n /** @intent(\"Clear the selected date\") */\n | { type: 'clear' }\n\nexport interface DatePickerInit {\n value?: string | null\n visibleMonth?: number\n visibleYear?: number\n min?: string | null\n max?: string | null\n weekStartsOn?: 0 | 1\n disabled?: boolean\n}\n\nfunction pad(n: number): string {\n return n.toString().padStart(2, '0')\n}\n\nfunction parseIso(iso: string): { y: number; m: number; d: number } | null {\n const match = /^(\\d{4})-(\\d{2})-(\\d{2})$/.exec(iso)\n if (!match) return null\n return { y: Number(match[1]), m: Number(match[2]), d: Number(match[3]) }\n}\n\nfunction toIso(y: number, m: number, d: number): string {\n return `${y}-${pad(m)}-${pad(d)}`\n}\n\nfunction daysInMonth(year: number, month: number): number {\n return new Date(year, month, 0).getDate()\n}\n\nfunction todayIso(): string {\n const now = new Date()\n return toIso(now.getFullYear(), now.getMonth() + 1, now.getDate())\n}\n\nfunction addDays(iso: string, days: number): string {\n const p = parseIso(iso)\n if (!p) return iso\n const d = new Date(p.y, p.m - 1, p.d)\n d.setDate(d.getDate() + days)\n return toIso(d.getFullYear(), d.getMonth() + 1, d.getDate())\n}\n\nfunction isInRange(iso: string, min: string | null, max: string | null): boolean {\n if (min && iso < min) return false\n if (max && iso > max) return false\n return true\n}\n\nexport function init(opts: DatePickerInit = {}): DatePickerState {\n const today = todayIso()\n const parsed = opts.value ? parseIso(opts.value) : null\n const visibleMonth = opts.visibleMonth ?? parsed?.m ?? new Date().getMonth() + 1\n const visibleYear = opts.visibleYear ?? parsed?.y ?? new Date().getFullYear()\n return {\n value: opts.value ?? null,\n visibleMonth,\n visibleYear,\n focused: opts.value ?? today,\n min: opts.min ?? null,\n max: opts.max ?? null,\n weekStartsOn: opts.weekStartsOn ?? 0,\n disabled: opts.disabled ?? false,\n }\n}\n\nfunction normalizeMonth(year: number, month: number): { year: number; month: number } {\n let y = year\n let m = month\n while (m > 12) {\n m -= 12\n y += 1\n }\n while (m < 1) {\n m += 12\n y -= 1\n }\n return { year: y, month: m }\n}\n\nfunction syncVisibleMonth(state: DatePickerState, date: string): DatePickerState {\n const p = parseIso(date)\n if (!p) return state\n if (p.y === state.visibleYear && p.m === state.visibleMonth) return state\n return { ...state, visibleYear: p.y, visibleMonth: p.m }\n}\n\nexport function update(state: DatePickerState, msg: DatePickerMsg): [DatePickerState, never[]] {\n if (state.disabled) return [state, []]\n switch (msg.type) {\n case 'setValue':\n return [{ ...state, value: msg.value, focused: msg.value ?? state.focused }, []]\n case 'setFocused':\n return [syncVisibleMonth({ ...state, focused: msg.date }, msg.date), []]\n case 'prevMonth': {\n const n = normalizeMonth(state.visibleYear, state.visibleMonth - 1)\n return [{ ...state, visibleYear: n.year, visibleMonth: n.month }, []]\n }\n case 'nextMonth': {\n const n = normalizeMonth(state.visibleYear, state.visibleMonth + 1)\n return [{ ...state, visibleYear: n.year, visibleMonth: n.month }, []]\n }\n case 'prevYear':\n return [{ ...state, visibleYear: state.visibleYear - 1 }, []]\n case 'nextYear':\n return [{ ...state, visibleYear: state.visibleYear + 1 }, []]\n case 'selectFocused':\n if (!isInRange(state.focused, state.min, state.max)) return [state, []]\n return [{ ...state, value: state.focused }, []]\n case 'moveFocus': {\n const next = addDays(state.focused, msg.days)\n return [syncVisibleMonth({ ...state, focused: next }, next), []]\n }\n case 'focusStartOfWeek': {\n const p = parseIso(state.focused)\n if (!p) return [state, []]\n const d = new Date(p.y, p.m - 1, p.d)\n const delta = (d.getDay() - state.weekStartsOn + 7) % 7\n return [update(state, { type: 'moveFocus', days: -delta })[0], []]\n }\n case 'focusEndOfWeek': {\n const p = parseIso(state.focused)\n if (!p) return [state, []]\n const d = new Date(p.y, p.m - 1, p.d)\n const delta = 6 - ((d.getDay() - state.weekStartsOn + 7) % 7)\n return [update(state, { type: 'moveFocus', days: delta })[0], []]\n }\n case 'focusToday': {\n const today = todayIso()\n return [syncVisibleMonth({ ...state, focused: today }, today), []]\n }\n case 'clear':\n return [{ ...state, value: null }, []]\n }\n}\n\nexport interface DayCell {\n iso: string\n day: number\n inMonth: boolean\n isToday: boolean\n isSelected: boolean\n isFocused: boolean\n isDisabled: boolean\n}\n\n/**\n * Compute the grid of days visible in the current month view. Always returns\n * full weeks: leading days from previous month and trailing from next month\n * to fill the grid.\n */\nexport function monthGrid(state: DatePickerState): DayCell[] {\n const y = state.visibleYear\n const m = state.visibleMonth\n const first = new Date(y, m - 1, 1)\n const firstDay = first.getDay()\n const leadDays = (firstDay - state.weekStartsOn + 7) % 7\n const totalDays = daysInMonth(y, m)\n const today = todayIso()\n\n const cells: DayCell[] = []\n // Leading: previous month's trailing days\n for (let i = leadDays; i > 0; i--) {\n const d = new Date(y, m - 1, 1 - i)\n const iso = toIso(d.getFullYear(), d.getMonth() + 1, d.getDate())\n cells.push({\n iso,\n day: d.getDate(),\n inMonth: false,\n isToday: iso === today,\n isSelected: iso === state.value,\n isFocused: iso === state.focused,\n isDisabled: !isInRange(iso, state.min, state.max),\n })\n }\n // Current month\n for (let d = 1; d <= totalDays; d++) {\n const iso = toIso(y, m, d)\n cells.push({\n iso,\n day: d,\n inMonth: true,\n isToday: iso === today,\n isSelected: iso === state.value,\n isFocused: iso === state.focused,\n isDisabled: !isInRange(iso, state.min, state.max),\n })\n }\n // Trailing: next month's leading days to fill to multiple of 7\n const remaining = (7 - (cells.length % 7)) % 7\n for (let d = 1; d <= remaining; d++) {\n const next = new Date(y, m, d)\n const iso = toIso(next.getFullYear(), next.getMonth() + 1, next.getDate())\n cells.push({\n iso,\n day: d,\n inMonth: false,\n isToday: iso === today,\n isSelected: iso === state.value,\n isFocused: iso === state.focused,\n isDisabled: !isInRange(iso, state.min, state.max),\n })\n }\n return cells\n}\n\n/**\n * Group a flat `DayCell[]` (from `monthGrid`) into rows of 7 — one row\n * per week — so the view can wrap each in a `role=\"row\"` element as\n * required by the WAI-ARIA grid pattern.\n */\nexport function weekRows(cells: DayCell[]): DayCell[][] {\n const rows: DayCell[][] = []\n for (let i = 0; i < cells.length; i += 7) {\n rows.push(cells.slice(i, i + 7))\n }\n return rows\n}\n\nexport interface DayCellParts {\n cell: {\n role: 'gridcell'\n 'aria-selected': boolean\n 'aria-disabled': 'true' | undefined\n tabIndex: number\n 'data-scope': 'date-picker'\n 'data-part': 'day-cell'\n 'data-date': string\n 'data-in-month': '' | undefined\n 'data-today': '' | undefined\n 'data-selected': '' | undefined\n 'data-focused': '' | undefined\n 'data-disabled': '' | undefined\n onClick: (e: MouseEvent) => void\n onKeyDown: (e: KeyboardEvent) => void\n onFocus: (e: FocusEvent) => void\n }\n}\n\nexport interface DatePickerParts {\n root: {\n 'data-scope': 'date-picker'\n 'data-part': 'root'\n 'data-disabled': Signal<'' | undefined>\n }\n grid: {\n role: 'grid'\n 'aria-label': Signal<string>\n 'data-scope': 'date-picker'\n 'data-part': 'grid'\n }\n row: {\n role: 'row'\n 'data-scope': 'date-picker'\n 'data-part': 'row'\n }\n prevMonthTrigger: {\n type: 'button'\n 'aria-label': string\n disabled: Signal<boolean>\n 'data-scope': 'date-picker'\n 'data-part': 'prev-month-trigger'\n onClick: (e: MouseEvent) => void\n }\n nextMonthTrigger: {\n type: 'button'\n 'aria-label': string\n disabled: Signal<boolean>\n 'data-scope': 'date-picker'\n 'data-part': 'next-month-trigger'\n onClick: (e: MouseEvent) => void\n }\n dayCell: (cell: DayCell) => DayCellParts\n}\n\nexport interface ConnectOptions {\n prevLabel?: string\n nextLabel?: string\n gridLabel?: (year: number, month: number) => string\n}\n\nexport function connect(\n state: Signal<DatePickerState>,\n send: Send<DatePickerMsg>,\n opts: ConnectOptions = {},\n): DatePickerParts {\n const locale = useContext(LocaleContext)\n const prevLabel = opts.prevLabel ?? locale.datePicker.prev\n const nextLabel = opts.nextLabel ?? locale.datePicker.next\n const gridLabel = opts.gridLabel ?? en.datePicker.grid\n\n return {\n root: {\n 'data-scope': 'date-picker',\n 'data-part': 'root',\n 'data-disabled': state.map((s) => (s.disabled ? '' : undefined)),\n },\n grid: {\n role: 'grid',\n 'aria-label': state.map((s) => gridLabel(s.visibleYear, s.visibleMonth)),\n 'data-scope': 'date-picker',\n 'data-part': 'grid',\n },\n row: {\n role: 'row',\n 'data-scope': 'date-picker',\n 'data-part': 'row',\n },\n prevMonthTrigger: {\n type: 'button',\n 'aria-label': prevLabel,\n disabled: state.map((s) => s.disabled),\n 'data-scope': 'date-picker',\n 'data-part': 'prev-month-trigger',\n onClick: tagSend(send, ['prevMonth'], () => send({ type: 'prevMonth' })),\n },\n nextMonthTrigger: {\n type: 'button',\n 'aria-label': nextLabel,\n disabled: state.map((s) => s.disabled),\n 'data-scope': 'date-picker',\n 'data-part': 'next-month-trigger',\n onClick: tagSend(send, ['nextMonth'], () => send({ type: 'nextMonth' })),\n },\n dayCell: (cell: DayCell): DayCellParts => ({\n cell: {\n role: 'gridcell',\n 'aria-selected': cell.isSelected,\n 'aria-disabled': cell.isDisabled ? 'true' : undefined,\n tabIndex: cell.isFocused ? 0 : -1,\n 'data-scope': 'date-picker',\n 'data-part': 'day-cell',\n 'data-date': cell.iso,\n 'data-in-month': cell.inMonth ? '' : undefined,\n 'data-today': cell.isToday ? '' : undefined,\n 'data-selected': cell.isSelected ? '' : undefined,\n 'data-focused': cell.isFocused ? '' : undefined,\n 'data-disabled': cell.isDisabled ? '' : undefined,\n onClick: tagSend(send, ['setFocused', 'selectFocused'], () => {\n if (cell.isDisabled) return\n send({ type: 'setFocused', date: cell.iso })\n send({ type: 'selectFocused' })\n }),\n onFocus: tagSend(send, ['setFocused'], () => send({ type: 'setFocused', date: cell.iso })),\n onKeyDown: tagSend(\n send,\n [\n 'moveFocus',\n 'prevMonth',\n 'nextMonth',\n 'focusStartOfWeek',\n 'focusEndOfWeek',\n 'selectFocused',\n ],\n (e) => {\n const key = flipArrow(e.key, e.currentTarget as Element)\n switch (key) {\n case 'ArrowLeft':\n e.preventDefault()\n send({ type: 'moveFocus', days: -1 })\n return\n case 'ArrowRight':\n e.preventDefault()\n send({ type: 'moveFocus', days: 1 })\n return\n case 'ArrowUp':\n e.preventDefault()\n send({ type: 'moveFocus', days: -7 })\n return\n case 'ArrowDown':\n e.preventDefault()\n send({ type: 'moveFocus', days: 7 })\n return\n case 'PageUp':\n e.preventDefault()\n send({ type: 'prevMonth' })\n return\n case 'PageDown':\n e.preventDefault()\n send({ type: 'nextMonth' })\n return\n case 'Home':\n e.preventDefault()\n send({ type: 'focusStartOfWeek' })\n return\n case 'End':\n e.preventDefault()\n send({ type: 'focusEndOfWeek' })\n return\n case 'Enter':\n case ' ':\n e.preventDefault()\n send({ type: 'selectFocused' })\n return\n }\n },\n ),\n },\n }),\n }\n}\n\nexport const datePicker = { init, update, connect, monthGrid, weekRows }\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Send, TransitionOptions } from '@llui/dom';
|
|
1
|
+
import type { Send, Signal, TransitionOptions } from '@llui/dom';
|
|
2
2
|
/**
|
|
3
3
|
* Dialog — modal / non-modal overlay. Ties together focus-trap, dismissable,
|
|
4
4
|
* body scroll lock, sibling aria-hidden, and portal-to-body rendering into
|
|
@@ -56,20 +56,20 @@ export interface DialogInit {
|
|
|
56
56
|
}
|
|
57
57
|
export declare function init(opts?: DialogInit): DialogState;
|
|
58
58
|
export declare function update(state: DialogState, msg: DialogMsg): [DialogState, never[]];
|
|
59
|
-
export interface DialogParts
|
|
59
|
+
export interface DialogParts {
|
|
60
60
|
trigger: {
|
|
61
61
|
type: 'button';
|
|
62
62
|
'aria-haspopup': 'dialog';
|
|
63
|
-
'aria-expanded':
|
|
63
|
+
'aria-expanded': Signal<boolean>;
|
|
64
64
|
'aria-controls': string;
|
|
65
65
|
id: string;
|
|
66
|
-
'data-state':
|
|
66
|
+
'data-state': Signal<'open' | 'closed'>;
|
|
67
67
|
'data-scope': 'dialog';
|
|
68
68
|
'data-part': 'trigger';
|
|
69
69
|
onClick: (e: MouseEvent) => void;
|
|
70
70
|
};
|
|
71
71
|
backdrop: {
|
|
72
|
-
'data-state':
|
|
72
|
+
'data-state': Signal<'open' | 'closed'>;
|
|
73
73
|
'data-scope': 'dialog';
|
|
74
74
|
'data-part': 'backdrop';
|
|
75
75
|
'aria-hidden': 'true';
|
|
@@ -85,7 +85,7 @@ export interface DialogParts<S> {
|
|
|
85
85
|
'aria-labelledby': string;
|
|
86
86
|
'aria-describedby': string;
|
|
87
87
|
tabIndex: -1;
|
|
88
|
-
'data-state':
|
|
88
|
+
'data-state': Signal<'open' | 'closed'>;
|
|
89
89
|
'data-scope': 'dialog';
|
|
90
90
|
'data-part': 'content';
|
|
91
91
|
};
|
|
@@ -101,7 +101,7 @@ export interface DialogParts<S> {
|
|
|
101
101
|
};
|
|
102
102
|
closeTrigger: {
|
|
103
103
|
type: 'button';
|
|
104
|
-
'aria-label': string
|
|
104
|
+
'aria-label': string;
|
|
105
105
|
'data-scope': 'dialog';
|
|
106
106
|
'data-part': 'close-trigger';
|
|
107
107
|
onClick: (e: MouseEvent) => void;
|
|
@@ -117,16 +117,16 @@ export interface ConnectOptions {
|
|
|
117
117
|
/** Accessible label for the close button (default: 'Close'). */
|
|
118
118
|
closeLabel?: string;
|
|
119
119
|
}
|
|
120
|
-
export declare function connect
|
|
121
|
-
export interface OverlayOptions
|
|
122
|
-
/**
|
|
123
|
-
|
|
120
|
+
export declare function connect(state: Signal<DialogState>, send: Send<DialogMsg>, opts: ConnectOptions): DialogParts;
|
|
121
|
+
export interface OverlayOptions {
|
|
122
|
+
/** Dialog state slice as a Signal. */
|
|
123
|
+
state: Signal<DialogState>;
|
|
124
124
|
/** Send dispatcher for dialog messages. */
|
|
125
125
|
send: Send<DialogMsg>;
|
|
126
126
|
/** Parts from `connect()` — used to locate the content element by id. */
|
|
127
|
-
parts: DialogParts
|
|
127
|
+
parts: DialogParts;
|
|
128
128
|
/** Content rendering. */
|
|
129
|
-
content: () => Node[];
|
|
129
|
+
content: () => readonly Node[];
|
|
130
130
|
/** Optional transition to apply on open/close (from `@llui/transitions`). */
|
|
131
131
|
transition?: TransitionOptions;
|
|
132
132
|
/** Close on Escape key (default: true). */
|
|
@@ -148,9 +148,9 @@ export interface OverlayOptions<S> {
|
|
|
148
148
|
}
|
|
149
149
|
/**
|
|
150
150
|
* Build the dialog's DOM tree and wire up all accessibility utilities.
|
|
151
|
-
* Returns a `show()` structural block that tracks `
|
|
151
|
+
* Returns a `show()` structural block that tracks `state.open`.
|
|
152
152
|
*/
|
|
153
|
-
export declare function overlay
|
|
153
|
+
export declare function overlay(opts: OverlayOptions): Node;
|
|
154
154
|
export declare const dialog: {
|
|
155
155
|
init: typeof init;
|
|
156
156
|
update: typeof update;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/components/dialog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"dialog.d.ts","sourceRoot":"","sources":["../../src/components/dialog.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,7 @@ export function update(state, msg) {
|
|
|
19
19
|
return [{ ...state, open: msg.open }, []];
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
-
export function connect(
|
|
22
|
+
export function connect(state, send, opts) {
|
|
23
23
|
const base = opts.id;
|
|
24
24
|
const contentId = `${base}:content`;
|
|
25
25
|
const titleId = `${base}:title`;
|
|
@@ -28,21 +28,21 @@ export function connect(get, send, opts) {
|
|
|
28
28
|
const role = opts.role ?? 'dialog';
|
|
29
29
|
const modal = opts.modal !== false;
|
|
30
30
|
const locale = useContext(LocaleContext);
|
|
31
|
-
const closeLabel = opts.closeLabel ??
|
|
31
|
+
const closeLabel = opts.closeLabel ?? locale.dialog.close;
|
|
32
32
|
return {
|
|
33
33
|
trigger: {
|
|
34
34
|
type: 'button',
|
|
35
35
|
'aria-haspopup': 'dialog',
|
|
36
|
-
'aria-expanded': (s) =>
|
|
36
|
+
'aria-expanded': state.map((s) => s.open),
|
|
37
37
|
'aria-controls': contentId,
|
|
38
38
|
id: triggerId,
|
|
39
|
-
'data-state': (s) => (
|
|
39
|
+
'data-state': state.map((s) => (s.open ? 'open' : 'closed')),
|
|
40
40
|
'data-scope': 'dialog',
|
|
41
41
|
'data-part': 'trigger',
|
|
42
42
|
onClick: tagSend(send, ['open'], () => send({ type: 'open' })),
|
|
43
43
|
},
|
|
44
44
|
backdrop: {
|
|
45
|
-
'data-state': (s) => (
|
|
45
|
+
'data-state': state.map((s) => (s.open ? 'open' : 'closed')),
|
|
46
46
|
'data-scope': 'dialog',
|
|
47
47
|
'data-part': 'backdrop',
|
|
48
48
|
'aria-hidden': 'true',
|
|
@@ -58,7 +58,7 @@ export function connect(get, send, opts) {
|
|
|
58
58
|
'aria-labelledby': titleId,
|
|
59
59
|
'aria-describedby': descId,
|
|
60
60
|
tabIndex: -1,
|
|
61
|
-
'data-state': (s) => (
|
|
61
|
+
'data-state': state.map((s) => (s.open ? 'open' : 'closed')),
|
|
62
62
|
'data-scope': 'dialog',
|
|
63
63
|
'data-part': 'content',
|
|
64
64
|
},
|
|
@@ -83,10 +83,10 @@ export function connect(get, send, opts) {
|
|
|
83
83
|
}
|
|
84
84
|
/**
|
|
85
85
|
* Build the dialog's DOM tree and wire up all accessibility utilities.
|
|
86
|
-
* Returns a `show()` structural block that tracks `
|
|
86
|
+
* Returns a `show()` structural block that tracks `state.open`.
|
|
87
87
|
*/
|
|
88
88
|
export function overlay(opts) {
|
|
89
|
-
const
|
|
89
|
+
const targetOpt = opts.target ?? 'body';
|
|
90
90
|
const closeOnEscape = opts.closeOnEscape !== false;
|
|
91
91
|
const closeOnOutsideClick = opts.closeOnOutsideClick !== false;
|
|
92
92
|
const trapFocus = opts.trapFocus !== false;
|
|
@@ -96,48 +96,43 @@ export function overlay(opts) {
|
|
|
96
96
|
const parts = opts.parts;
|
|
97
97
|
const contentId = parts.content.id;
|
|
98
98
|
const triggerId = parts.trigger.id;
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
},
|
|
137
|
-
}),
|
|
138
|
-
enter: opts.transition?.enter,
|
|
139
|
-
leave: opts.transition?.leave,
|
|
140
|
-
});
|
|
99
|
+
const host = typeof targetOpt === 'string' ? (document.querySelector(targetOpt) ?? document.body) : targetOpt;
|
|
100
|
+
return show(opts.state.map((s) => s.open), () => [
|
|
101
|
+
portal(() => {
|
|
102
|
+
onMount(() => {
|
|
103
|
+
const contentEl = document.getElementById(contentId);
|
|
104
|
+
if (!contentEl)
|
|
105
|
+
return;
|
|
106
|
+
const triggerEl = document.getElementById(triggerId);
|
|
107
|
+
const cleanups = [];
|
|
108
|
+
if (lockScroll)
|
|
109
|
+
cleanups.push(lockBodyScroll());
|
|
110
|
+
if (hideSiblings)
|
|
111
|
+
cleanups.push(setAriaHiddenOutside(contentEl));
|
|
112
|
+
if (trapFocus) {
|
|
113
|
+
cleanups.push(pushFocusTrap({
|
|
114
|
+
container: contentEl,
|
|
115
|
+
initialFocus: opts.initialFocus,
|
|
116
|
+
restoreFocus,
|
|
117
|
+
}));
|
|
118
|
+
}
|
|
119
|
+
if (closeOnEscape || closeOnOutsideClick) {
|
|
120
|
+
cleanups.push(pushDismissable({
|
|
121
|
+
element: contentEl,
|
|
122
|
+
ignore: () => (triggerEl ? [triggerEl] : []),
|
|
123
|
+
disableEscape: !closeOnEscape,
|
|
124
|
+
disableOutside: !closeOnOutsideClick,
|
|
125
|
+
onDismiss: () => opts.send({ type: 'close' }),
|
|
126
|
+
}));
|
|
127
|
+
}
|
|
128
|
+
return () => {
|
|
129
|
+
for (let i = cleanups.length - 1; i >= 0; i--)
|
|
130
|
+
cleanups[i]();
|
|
131
|
+
};
|
|
132
|
+
});
|
|
133
|
+
return [div(parts.positioner, opts.content())];
|
|
134
|
+
}, host),
|
|
135
|
+
]);
|
|
141
136
|
}
|
|
142
137
|
export const dialog = { init, update, connect, overlay };
|
|
143
138
|
//# sourceMappingURL=dialog.js.map
|