@gunkin/uiify 0.0.19-alpha → 0.0.22-alpha
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/agents/components.md +14 -1
- package/agents/index.md +32 -1
- package/agents/reference/components/alert.md +44 -0
- package/agents/reference/components/aspect-ratio.md +26 -0
- package/agents/reference/components/avatar.md +32 -0
- package/agents/reference/components/badge.md +31 -0
- package/agents/reference/components/breadcrumb.md +11 -1
- package/agents/reference/components/button.md +4 -4
- package/agents/reference/components/candle-chart.md +20 -1
- package/agents/reference/components/card.md +24 -0
- package/agents/reference/components/carousel.md +3 -2
- package/agents/reference/components/checkbox.md +2 -0
- package/agents/reference/components/combobox.md +2 -1
- package/agents/reference/components/date-picker.md +23 -0
- package/agents/reference/components/description-list.md +38 -0
- package/agents/reference/components/drawer.md +8 -1
- package/agents/reference/components/dropdown-menu.md +1 -1
- package/agents/reference/components/empty.md +45 -0
- package/agents/reference/components/fieldset.md +31 -0
- package/agents/reference/components/file-upload.md +12 -1
- package/agents/reference/components/form-error-summary.md +33 -0
- package/agents/reference/components/input-group.md +33 -0
- package/agents/reference/components/item.md +52 -0
- package/agents/reference/components/line-chart.md +1 -0
- package/agents/reference/components/modal.md +8 -1
- package/agents/reference/components/number-field.md +14 -3
- package/agents/reference/components/pagination.md +22 -1
- package/agents/reference/components/progress.md +16 -0
- package/agents/reference/components/slider.md +9 -1
- package/agents/reference/components/spinner.md +8 -1
- package/agents/reference/components/toast.md +14 -1
- package/dist/components/alert/Alert.d.ts +15 -0
- package/dist/components/alert/Alert.d.ts.map +1 -0
- package/dist/components/alert/Alert.js +61 -0
- package/dist/components/alert/Alert.js.map +1 -0
- package/dist/components/alert/index.d.ts +3 -0
- package/dist/components/alert/index.d.ts.map +1 -0
- package/dist/components/alert/index.js +7 -0
- package/dist/components/alert/index.js.map +1 -0
- package/dist/components/alert/types.d.ts +20 -0
- package/dist/components/alert/types.d.ts.map +1 -0
- package/dist/components/alert/types.js +1 -0
- package/dist/components/alert/types.js.map +1 -0
- package/dist/components/alert.d.ts +1 -0
- package/dist/components/alert.js +1 -0
- package/dist/components/aspect-ratio/AspectRatio.d.ts +7 -0
- package/dist/components/aspect-ratio/AspectRatio.d.ts.map +1 -0
- package/dist/components/aspect-ratio/AspectRatio.js +26 -0
- package/dist/components/aspect-ratio/AspectRatio.js.map +1 -0
- package/dist/components/aspect-ratio/index.d.ts +3 -0
- package/dist/components/aspect-ratio/index.d.ts.map +1 -0
- package/dist/components/aspect-ratio/index.js +5 -0
- package/dist/components/aspect-ratio/index.js.map +1 -0
- package/dist/components/aspect-ratio/types.d.ts +9 -0
- package/dist/components/aspect-ratio/types.d.ts.map +1 -0
- package/dist/components/aspect-ratio/types.js +1 -0
- package/dist/components/aspect-ratio/types.js.map +1 -0
- package/dist/components/aspect-ratio.d.ts +1 -0
- package/dist/components/aspect-ratio.js +1 -0
- package/dist/components/avatar/Avatar.d.ts +7 -0
- package/dist/components/avatar/Avatar.d.ts.map +1 -0
- package/dist/components/avatar/Avatar.js +24 -0
- package/dist/components/avatar/Avatar.js.map +1 -0
- package/dist/components/avatar/index.d.ts +3 -0
- package/dist/components/avatar/index.d.ts.map +1 -0
- package/dist/components/avatar/index.js +5 -0
- package/dist/components/avatar/index.js.map +1 -0
- package/dist/components/avatar/types.d.ts +12 -0
- package/dist/components/avatar/types.d.ts.map +1 -0
- package/dist/components/avatar/types.js +1 -0
- package/dist/components/avatar/types.js.map +1 -0
- package/dist/components/avatar.d.ts +1 -0
- package/dist/components/avatar.js +1 -0
- package/dist/components/badge/Badge.d.ts +7 -0
- package/dist/components/badge/Badge.d.ts.map +1 -0
- package/dist/components/badge/Badge.js +21 -0
- package/dist/components/badge/Badge.js.map +1 -0
- package/dist/components/badge/index.d.ts +3 -0
- package/dist/components/badge/index.d.ts.map +1 -0
- package/dist/components/badge/index.js +5 -0
- package/dist/components/badge/index.js.map +1 -0
- package/dist/components/badge/types.d.ts +11 -0
- package/dist/components/badge/types.d.ts.map +1 -0
- package/dist/components/badge/types.js +1 -0
- package/dist/components/badge/types.js.map +1 -0
- package/dist/components/badge.d.ts +1 -0
- package/dist/components/badge.js +1 -0
- package/dist/components/behavior.css +21 -9
- package/dist/components/behavior.css.map +1 -1
- package/dist/components/breadcrumb/Breadcrumb.d.ts.map +1 -1
- package/dist/components/breadcrumb/Breadcrumb.js +21 -4
- package/dist/components/breadcrumb/Breadcrumb.js.map +1 -1
- package/dist/components/breadcrumb/index.d.ts +1 -1
- package/dist/components/breadcrumb/index.d.ts.map +1 -1
- package/dist/components/breadcrumb/index.js.map +1 -1
- package/dist/components/breadcrumb/types.d.ts +7 -0
- package/dist/components/breadcrumb/types.d.ts.map +1 -1
- package/dist/components/button/types.d.ts +4 -0
- package/dist/components/button/types.d.ts.map +1 -1
- package/dist/components/candle-chart/CandleChart.d.ts +1 -1
- package/dist/components/candle-chart/CandleChart.d.ts.map +1 -1
- package/dist/components/candle-chart/CandleChart.js +81 -46
- package/dist/components/candle-chart/CandleChart.js.map +1 -1
- package/dist/components/candle-chart/client/CandleChartClient.d.ts.map +1 -1
- package/dist/components/candle-chart/client/CandleChartClient.js +5 -0
- package/dist/components/candle-chart/client/CandleChartClient.js.map +1 -1
- package/dist/components/candle-chart/index.d.ts +1 -1
- package/dist/components/candle-chart/index.d.ts.map +1 -1
- package/dist/components/candle-chart/index.js.map +1 -1
- package/dist/components/candle-chart/types.d.ts +17 -0
- package/dist/components/candle-chart/types.d.ts.map +1 -1
- package/dist/components/card/Card.d.ts +7 -0
- package/dist/components/card/Card.d.ts.map +1 -0
- package/dist/components/card/Card.js +16 -0
- package/dist/components/card/Card.js.map +1 -0
- package/dist/components/card/index.d.ts +3 -0
- package/dist/components/card/index.d.ts.map +1 -0
- package/dist/components/card/index.js +5 -0
- package/dist/components/card/index.js.map +1 -0
- package/dist/components/card/types.d.ts +7 -0
- package/dist/components/card/types.d.ts.map +1 -0
- package/dist/components/card/types.js +1 -0
- package/dist/components/card/types.js.map +1 -0
- package/dist/components/card.d.ts +1 -0
- package/dist/components/card.js +1 -0
- package/dist/components/carousel/CarouselMarkup.d.ts.map +1 -1
- package/dist/components/carousel/CarouselMarkup.js +20 -3
- package/dist/components/carousel/CarouselMarkup.js.map +1 -1
- package/dist/components/carousel/carousel-markup.js +2 -2
- package/dist/components/carousel/carousel-markup.js.map +1 -1
- package/dist/components/carousel/types.d.ts +3 -2
- package/dist/components/carousel/types.d.ts.map +1 -1
- package/dist/components/checkbox/types.d.ts +2 -0
- package/dist/components/checkbox/types.d.ts.map +1 -1
- package/dist/components/combobox/Combobox.d.ts.map +1 -1
- package/dist/components/combobox/Combobox.js +37 -23
- package/dist/components/combobox/Combobox.js.map +1 -1
- package/dist/components/combobox/combobox-store.d.ts.map +1 -1
- package/dist/components/combobox/combobox-store.js +5 -2
- package/dist/components/combobox/combobox-store.js.map +1 -1
- package/dist/components/combobox/types.d.ts +2 -3
- package/dist/components/combobox/types.d.ts.map +1 -1
- package/dist/components/context-menu/ContextMenu.d.ts.map +1 -1
- package/dist/components/context-menu/ContextMenu.js +25 -5
- package/dist/components/context-menu/ContextMenu.js.map +1 -1
- package/dist/components/date-picker/DatePicker.d.ts +7 -0
- package/dist/components/date-picker/DatePicker.d.ts.map +1 -0
- package/dist/components/date-picker/DatePicker.js +19 -0
- package/dist/components/date-picker/DatePicker.js.map +1 -0
- package/dist/components/date-picker/index.d.ts +3 -0
- package/dist/components/date-picker/index.d.ts.map +1 -0
- package/dist/components/date-picker/index.js +5 -0
- package/dist/components/date-picker/index.js.map +1 -0
- package/dist/components/date-picker/types.d.ts +5 -0
- package/dist/components/date-picker/types.d.ts.map +1 -0
- package/dist/components/date-picker/types.js +1 -0
- package/dist/components/date-picker/types.js.map +1 -0
- package/dist/components/date-picker.d.ts +1 -0
- package/dist/components/date-picker.js +1 -0
- package/dist/components/description-list/DescriptionList.d.ts +15 -0
- package/dist/components/description-list/DescriptionList.d.ts.map +1 -0
- package/dist/components/description-list/DescriptionList.js +48 -0
- package/dist/components/description-list/DescriptionList.js.map +1 -0
- package/dist/components/description-list/index.d.ts +3 -0
- package/dist/components/description-list/index.d.ts.map +1 -0
- package/dist/components/description-list/index.js +7 -0
- package/dist/components/description-list/index.js.map +1 -0
- package/dist/components/description-list/types.d.ts +15 -0
- package/dist/components/description-list/types.d.ts.map +1 -0
- package/dist/components/description-list/types.js +1 -0
- package/dist/components/description-list/types.js.map +1 -0
- package/dist/components/description-list.d.ts +1 -0
- package/dist/components/description-list.js +1 -0
- package/dist/components/drawer/DrawerNative.d.ts +1 -1
- package/dist/components/drawer/DrawerNative.d.ts.map +1 -1
- package/dist/components/drawer/DrawerNative.js +5 -2
- package/dist/components/drawer/DrawerNative.js.map +1 -1
- package/dist/components/drawer/index.d.ts +1 -1
- package/dist/components/drawer/index.d.ts.map +1 -1
- package/dist/components/drawer/index.js.map +1 -1
- package/dist/components/drawer/types.d.ts +4 -0
- package/dist/components/drawer/types.d.ts.map +1 -1
- package/dist/components/dropdown-menu/DropdownMenu.d.ts.map +1 -1
- package/dist/components/dropdown-menu/DropdownMenu.js +31 -15
- package/dist/components/dropdown-menu/DropdownMenu.js.map +1 -1
- package/dist/components/dropdown-menu/DropdownMenuBar.d.ts.map +1 -1
- package/dist/components/dropdown-menu/DropdownMenuBar.js +7 -5
- package/dist/components/dropdown-menu/DropdownMenuBar.js.map +1 -1
- package/dist/components/dropdown-menu/types.d.ts +1 -1
- package/dist/components/dropdown-menu/types.d.ts.map +1 -1
- package/dist/components/empty/Empty.d.ts +19 -0
- package/dist/components/empty/Empty.d.ts.map +1 -0
- package/dist/components/empty/Empty.js +56 -0
- package/dist/components/empty/Empty.js.map +1 -0
- package/dist/components/empty/index.d.ts +3 -0
- package/dist/components/empty/index.d.ts.map +1 -0
- package/dist/components/empty/index.js +8 -0
- package/dist/components/empty/index.js.map +1 -0
- package/dist/components/empty/types.d.ts +19 -0
- package/dist/components/empty/types.d.ts.map +1 -0
- package/dist/components/empty/types.js +1 -0
- package/dist/components/empty/types.js.map +1 -0
- package/dist/components/empty.d.ts +1 -0
- package/dist/components/empty.js +1 -0
- package/dist/components/fieldset/Fieldset.d.ts +11 -0
- package/dist/components/fieldset/Fieldset.d.ts.map +1 -0
- package/dist/components/fieldset/Fieldset.js +38 -0
- package/dist/components/fieldset/Fieldset.js.map +1 -0
- package/dist/components/fieldset/index.d.ts +3 -0
- package/dist/components/fieldset/index.d.ts.map +1 -0
- package/dist/components/fieldset/index.js +6 -0
- package/dist/components/fieldset/index.js.map +1 -0
- package/dist/components/fieldset/types.d.ts +11 -0
- package/dist/components/fieldset/types.d.ts.map +1 -0
- package/dist/components/fieldset/types.js +1 -0
- package/dist/components/fieldset/types.js.map +1 -0
- package/dist/components/fieldset.d.ts +1 -0
- package/dist/components/fieldset.js +1 -0
- package/dist/components/file-upload/FileUpload.d.ts.map +1 -1
- package/dist/components/file-upload/FileUpload.js +11 -4
- package/dist/components/file-upload/FileUpload.js.map +1 -1
- package/dist/components/file-upload/FileUploadRoot.d.ts +1 -1
- package/dist/components/file-upload/FileUploadRoot.d.ts.map +1 -1
- package/dist/components/file-upload/FileUploadRoot.js +9 -0
- package/dist/components/file-upload/FileUploadRoot.js.map +1 -1
- package/dist/components/file-upload/index.d.ts +1 -1
- package/dist/components/file-upload/index.d.ts.map +1 -1
- package/dist/components/file-upload/index.js.map +1 -1
- package/dist/components/file-upload/types.d.ts +8 -0
- package/dist/components/file-upload/types.d.ts.map +1 -1
- package/dist/components/form-error-summary/FormErrorSummary.d.ts +7 -0
- package/dist/components/form-error-summary/FormErrorSummary.d.ts.map +1 -0
- package/dist/components/form-error-summary/FormErrorSummary.js +25 -0
- package/dist/components/form-error-summary/FormErrorSummary.js.map +1 -0
- package/dist/components/form-error-summary/index.d.ts +3 -0
- package/dist/components/form-error-summary/index.d.ts.map +1 -0
- package/dist/components/form-error-summary/index.js +5 -0
- package/dist/components/form-error-summary/index.js.map +1 -0
- package/dist/components/form-error-summary/types.d.ts +12 -0
- package/dist/components/form-error-summary/types.d.ts.map +1 -0
- package/dist/components/form-error-summary/types.js +1 -0
- package/dist/components/form-error-summary/types.js.map +1 -0
- package/dist/components/form-error-summary.d.ts +1 -0
- package/dist/components/form-error-summary.js +1 -0
- package/dist/components/index.d.ts +13 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +13 -0
- package/dist/components/index.js.map +1 -1
- package/dist/components/input-group/InputGroup.d.ts +5 -0
- package/dist/components/input-group/InputGroup.d.ts.map +1 -0
- package/dist/components/input-group/InputGroup.js +37 -0
- package/dist/components/input-group/InputGroup.js.map +1 -0
- package/dist/components/input-group/index.d.ts +3 -0
- package/dist/components/input-group/index.d.ts.map +1 -0
- package/dist/components/input-group/index.js +6 -0
- package/dist/components/input-group/index.js.map +1 -0
- package/dist/components/input-group/types.d.ts +12 -0
- package/dist/components/input-group/types.d.ts.map +1 -0
- package/dist/components/input-group/types.js +1 -0
- package/dist/components/input-group/types.js.map +1 -0
- package/dist/components/input-group.d.ts +1 -0
- package/dist/components/input-group.js +1 -0
- package/dist/components/internal/native-check-control/NativeCheckControl.d.ts.map +1 -1
- package/dist/components/internal/native-check-control/NativeCheckControl.js +4 -0
- package/dist/components/internal/native-check-control/NativeCheckControl.js.map +1 -1
- package/dist/components/internal/native-check-control/types.d.ts +2 -0
- package/dist/components/internal/native-check-control/types.d.ts.map +1 -1
- package/dist/components/item/Item.d.ts +23 -0
- package/dist/components/item/Item.d.ts.map +1 -0
- package/dist/components/item/Item.js +64 -0
- package/dist/components/item/Item.js.map +1 -0
- package/dist/components/item/index.d.ts +3 -0
- package/dist/components/item/index.d.ts.map +1 -0
- package/dist/components/item/index.js +9 -0
- package/dist/components/item/index.js.map +1 -0
- package/dist/components/item/types.d.ts +23 -0
- package/dist/components/item/types.d.ts.map +1 -0
- package/dist/components/item/types.js +1 -0
- package/dist/components/item/types.js.map +1 -0
- package/dist/components/item.d.ts +1 -0
- package/dist/components/item.js +1 -0
- package/dist/components/line-chart/LineChart.d.ts.map +1 -1
- package/dist/components/line-chart/LineChart.js +3 -2
- package/dist/components/line-chart/LineChart.js.map +1 -1
- package/dist/components/line-chart/line-chart-geometry.d.ts +2 -2
- package/dist/components/line-chart/line-chart-geometry.d.ts.map +1 -1
- package/dist/components/line-chart/line-chart-geometry.js +6 -6
- package/dist/components/line-chart/line-chart-geometry.js.map +1 -1
- package/dist/components/line-chart/types.d.ts +2 -0
- package/dist/components/line-chart/types.d.ts.map +1 -1
- package/dist/components/modal/Modal.d.ts +1 -1
- package/dist/components/modal/Modal.d.ts.map +1 -1
- package/dist/components/modal/Modal.js +5 -2
- package/dist/components/modal/Modal.js.map +1 -1
- package/dist/components/modal/index.d.ts +1 -1
- package/dist/components/modal/index.d.ts.map +1 -1
- package/dist/components/modal/index.js.map +1 -1
- package/dist/components/modal/types.d.ts +4 -0
- package/dist/components/modal/types.d.ts.map +1 -1
- package/dist/components/number-field/NumberField.d.ts +1 -1
- package/dist/components/number-field/NumberField.d.ts.map +1 -1
- package/dist/components/number-field/NumberField.js +25 -5
- package/dist/components/number-field/NumberField.js.map +1 -1
- package/dist/components/number-field/format.d.ts +1 -1
- package/dist/components/number-field/format.d.ts.map +1 -1
- package/dist/components/number-field/format.js +32 -7
- package/dist/components/number-field/format.js.map +1 -1
- package/dist/components/number-field/index.d.ts +1 -1
- package/dist/components/number-field/index.d.ts.map +1 -1
- package/dist/components/number-field/index.js.map +1 -1
- package/dist/components/number-field/types.d.ts +11 -2
- package/dist/components/number-field/types.d.ts.map +1 -1
- package/dist/components/otp-input/OtpInput.d.ts.map +1 -1
- package/dist/components/otp-input/OtpInput.js +2 -0
- package/dist/components/otp-input/OtpInput.js.map +1 -1
- package/dist/components/pagination/Pagination.d.ts.map +1 -1
- package/dist/components/pagination/Pagination.js +93 -29
- package/dist/components/pagination/Pagination.js.map +1 -1
- package/dist/components/pagination/PaginationShell.d.ts +2 -1
- package/dist/components/pagination/PaginationShell.d.ts.map +1 -1
- package/dist/components/pagination/PaginationShell.js +44 -9
- package/dist/components/pagination/PaginationShell.js.map +1 -1
- package/dist/components/pagination/index.d.ts +1 -1
- package/dist/components/pagination/index.d.ts.map +1 -1
- package/dist/components/pagination/index.js.map +1 -1
- package/dist/components/pagination/types.d.ts +18 -0
- package/dist/components/pagination/types.d.ts.map +1 -1
- package/dist/components/progress/Progress.d.ts +7 -0
- package/dist/components/progress/Progress.d.ts.map +1 -0
- package/dist/components/progress/Progress.js +9 -0
- package/dist/components/progress/Progress.js.map +1 -0
- package/dist/components/progress/index.d.ts +3 -0
- package/dist/components/progress/index.d.ts.map +1 -0
- package/dist/components/progress/index.js +5 -0
- package/dist/components/progress/index.js.map +1 -0
- package/dist/components/progress/types.d.ts +3 -0
- package/dist/components/progress/types.d.ts.map +1 -0
- package/dist/components/progress/types.js +1 -0
- package/dist/components/progress/types.js.map +1 -0
- package/dist/components/progress.d.ts +1 -0
- package/dist/components/progress.js +1 -0
- package/dist/components/slider/client/SliderClient.d.ts.map +1 -1
- package/dist/components/slider/client/SliderClient.js +11 -2
- package/dist/components/slider/client/SliderClient.js.map +1 -1
- package/dist/components/slider/index.d.ts +1 -1
- package/dist/components/slider/index.d.ts.map +1 -1
- package/dist/components/slider/index.js.map +1 -1
- package/dist/components/slider/types.d.ts +5 -0
- package/dist/components/slider/types.d.ts.map +1 -1
- package/dist/components/spinner/Spinner.d.ts.map +1 -1
- package/dist/components/spinner/Spinner.js +6 -3
- package/dist/components/spinner/Spinner.js.map +1 -1
- package/dist/components/spinner/index.d.ts +1 -1
- package/dist/components/spinner/index.d.ts.map +1 -1
- package/dist/components/spinner/index.js.map +1 -1
- package/dist/components/spinner/types.d.ts +4 -0
- package/dist/components/spinner/types.d.ts.map +1 -1
- package/dist/components/tags-input/TagsInput.d.ts.map +1 -1
- package/dist/components/tags-input/TagsInput.js +2 -0
- package/dist/components/tags-input/TagsInput.js.map +1 -1
- package/dist/components/toast/Toast.d.ts +1 -1
- package/dist/components/toast/Toast.d.ts.map +1 -1
- package/dist/components/toast/Toast.js +33 -29
- package/dist/components/toast/Toast.js.map +1 -1
- package/dist/components/toast/ToastElements.d.ts.map +1 -1
- package/dist/components/toast/ToastElements.js +24 -12
- package/dist/components/toast/ToastElements.js.map +1 -1
- package/dist/components/toast/index.d.ts +1 -1
- package/dist/components/toast/index.d.ts.map +1 -1
- package/dist/components/toast/index.js.map +1 -1
- package/dist/components/toast/types.d.ts +10 -0
- package/dist/components/toast/types.d.ts.map +1 -1
- package/dist/components/toolbar/Toolbar.d.ts +2 -2
- package/dist/components/toolbar/Toolbar.d.ts.map +1 -1
- package/dist/components/toolbar/Toolbar.js +8 -4
- package/dist/components/toolbar/Toolbar.js.map +1 -1
- package/dist/core/direction.d.ts +2 -0
- package/dist/core/direction.d.ts.map +1 -1
- package/dist/core/direction.js +8 -3
- package/dist/core/direction.js.map +1 -1
- package/dist/core/dismissable-layer-registry.d.ts.map +1 -1
- package/dist/core/dismissable-layer-registry.js +3 -1
- package/dist/core/dismissable-layer-registry.js.map +1 -1
- package/dist/core/format-label.d.ts +2 -0
- package/dist/core/format-label.d.ts.map +1 -0
- package/dist/core/format-label.js +13 -0
- package/dist/core/format-label.js.map +1 -0
- package/dist/core/ime.d.ts +16 -0
- package/dist/core/ime.d.ts.map +1 -0
- package/dist/core/ime.js +7 -0
- package/dist/core/ime.js.map +1 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/roving-focus-store.d.ts +3 -2
- package/dist/core/roving-focus-store.d.ts.map +1 -1
- package/dist/core/roving-focus-store.js +5 -3
- package/dist/core/roving-focus-store.js.map +1 -1
- package/dist/core/roving-focus.d.ts.map +1 -1
- package/dist/core/roving-focus.js +10 -5
- package/dist/core/roving-focus.js.map +1 -1
- package/dist/core/text-direction.d.ts +7 -0
- package/dist/core/text-direction.d.ts.map +1 -0
- package/dist/core/text-direction.js +7 -0
- package/dist/core/text-direction.js.map +1 -0
- package/dist/styles/index.css +1 -1
- package/package.json +2 -1
- package/skills/uiify/SKILL.md +43 -34
- package/skills/uiify/references/elements/alert-modal.md +5 -5
- package/skills/uiify/references/elements/aspect-ratio.md +59 -0
- package/skills/uiify/references/elements/avatar.md +10 -19
- package/skills/uiify/references/elements/badge.md +11 -19
- package/skills/uiify/references/elements/button.md +5 -5
- package/skills/uiify/references/elements/candle-chart.md +2 -0
- package/skills/uiify/references/elements/card.md +10 -21
- package/skills/uiify/references/elements/carousel.md +2 -0
- package/skills/uiify/references/elements/checkbox.md +1 -1
- package/skills/uiify/references/elements/date-picker.md +11 -15
- package/skills/uiify/references/elements/description-list.md +38 -0
- package/skills/uiify/references/elements/empty-state.md +12 -23
- package/skills/uiify/references/elements/field.md +2 -2
- package/skills/uiify/references/elements/fieldset.md +39 -0
- package/skills/uiify/references/elements/form-error-summary.md +39 -0
- package/skills/uiify/references/elements/inline-alert.md +11 -19
- package/skills/uiify/references/elements/input-group.md +39 -0
- package/skills/uiify/references/elements/item.md +39 -0
- package/skills/uiify/references/elements/modal.md +1 -1
- package/skills/uiify/references/elements/number-field.md +2 -0
- package/skills/uiify/references/elements/pagination.md +2 -0
- package/skills/uiify/references/elements/progress-bar.md +11 -20
- package/skills/uiify/references/elements/select.md +1 -1
- package/skills/uiify/references/examples/alert-confirmation.md +21 -9
- package/skills/uiify/references/examples/field-validation.md +2 -2
- package/skills/uiify/references/examples/select-basic.md +1 -1
- package/skills/uiify/references/examples/table-controls.md +3 -2
- package/skills/uiify/references/guides/i18n.md +21 -0
- package/skills/uiify/references/guides/verification.md +9 -0
- package/skills/uiify/scripts/static.mjs +79 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/dismissable-layer-registry.ts"],"sourcesContent":["import type { OpenChangeReason } from \"./open-change-details.js\";\nimport { getEventPath, isEventInsideLayer } from \"./platform.js\";\n\nexport interface DismissableLayerRecord {\n readonly branches: Set<Element>;\n readonly element: Element;\n readonly onDismiss: (reason: OpenChangeReason, event: Event) => void;\n}\n\ninterface Registry {\n readonly controller: AbortController;\n readonly layers: DismissableLayerRecord[];\n}\n\nconst registries = new WeakMap<Document, Registry>();\n\nfunction dispatch(document: Document, reason: OpenChangeReason, event: Event): void {\n const record = registries.get(document)?.layers.at(-1);\n if (!record) return;\n if (\n reason !== \"escape-key\" &&\n isEventInsideLayer(getEventPath(event), record.element, record.branches)\n ) {\n return;\n }\n record.onDismiss(reason, event);\n}\n\nfunction createRegistry(document: Document): Registry {\n const AbortControllerConstructor = document.defaultView?.AbortController ?? AbortController;\n const controller = new AbortControllerConstructor();\n const options = { capture: true, signal: controller.signal };\n document.addEventListener(\n \"keydown\",\n (event) => {\n if (event.key === \"Escape\")
|
|
1
|
+
{"version":3,"sources":["../../src/core/dismissable-layer-registry.ts"],"sourcesContent":["import { isComposingKeyEvent } from \"./ime.js\";\nimport type { OpenChangeReason } from \"./open-change-details.js\";\nimport { getEventPath, isEventInsideLayer } from \"./platform.js\";\n\nexport interface DismissableLayerRecord {\n readonly branches: Set<Element>;\n readonly element: Element;\n readonly onDismiss: (reason: OpenChangeReason, event: Event) => void;\n}\n\ninterface Registry {\n readonly controller: AbortController;\n readonly layers: DismissableLayerRecord[];\n}\n\nconst registries = new WeakMap<Document, Registry>();\n\nfunction dispatch(document: Document, reason: OpenChangeReason, event: Event): void {\n const record = registries.get(document)?.layers.at(-1);\n if (!record) return;\n if (\n reason !== \"escape-key\" &&\n isEventInsideLayer(getEventPath(event), record.element, record.branches)\n ) {\n return;\n }\n record.onDismiss(reason, event);\n}\n\nfunction createRegistry(document: Document): Registry {\n const AbortControllerConstructor = document.defaultView?.AbortController ?? AbortController;\n const controller = new AbortControllerConstructor();\n const options = { capture: true, signal: controller.signal };\n document.addEventListener(\n \"keydown\",\n (event) => {\n if (event.key === \"Escape\" && !isComposingKeyEvent(event))\n dispatch(document, \"escape-key\", event);\n },\n options,\n );\n document.addEventListener(\n \"pointerdown\",\n (event) => dispatch(document, \"outside-press\", event),\n options,\n );\n document.addEventListener(\n \"focusin\",\n (event) => dispatch(document, \"focus-outside\", event),\n options,\n );\n return { controller, layers: [] };\n}\n\nexport function registerDismissableLayer(\n document: Document,\n record: DismissableLayerRecord,\n): () => void {\n const registry = registries.get(document) ?? createRegistry(document);\n registries.set(document, registry);\n registry.layers.push(record);\n\n return () => {\n const index = registry.layers.indexOf(record);\n if (index >= 0) registry.layers.splice(index, 1);\n if (registry.layers.length === 0) {\n registry.controller.abort();\n registries.delete(document);\n }\n };\n}\n"],"mappings":"AAAA,SAAS,2BAA2B;AAEpC,SAAS,cAAc,0BAA0B;AAajD,MAAM,aAAa,oBAAI,QAA4B;AAEnD,SAAS,SAAS,UAAoB,QAA0B,OAAoB;AAClF,QAAM,SAAS,WAAW,IAAI,QAAQ,GAAG,OAAO,GAAG,EAAE;AACrD,MAAI,CAAC,OAAQ;AACb,MACE,WAAW,gBACX,mBAAmB,aAAa,KAAK,GAAG,OAAO,SAAS,OAAO,QAAQ,GACvE;AACA;AAAA,EACF;AACA,SAAO,UAAU,QAAQ,KAAK;AAChC;AAEA,SAAS,eAAe,UAA8B;AACpD,QAAM,6BAA6B,SAAS,aAAa,mBAAmB;AAC5E,QAAM,aAAa,IAAI,2BAA2B;AAClD,QAAM,UAAU,EAAE,SAAS,MAAM,QAAQ,WAAW,OAAO;AAC3D,WAAS;AAAA,IACP;AAAA,IACA,CAAC,UAAU;AACT,UAAI,MAAM,QAAQ,YAAY,CAAC,oBAAoB,KAAK;AACtD,iBAAS,UAAU,cAAc,KAAK;AAAA,IAC1C;AAAA,IACA;AAAA,EACF;AACA,WAAS;AAAA,IACP;AAAA,IACA,CAAC,UAAU,SAAS,UAAU,iBAAiB,KAAK;AAAA,IACpD;AAAA,EACF;AACA,WAAS;AAAA,IACP;AAAA,IACA,CAAC,UAAU,SAAS,UAAU,iBAAiB,KAAK;AAAA,IACpD;AAAA,EACF;AACA,SAAO,EAAE,YAAY,QAAQ,CAAC,EAAE;AAClC;AAEO,SAAS,yBACd,UACA,QACY;AACZ,QAAM,WAAW,WAAW,IAAI,QAAQ,KAAK,eAAe,QAAQ;AACpE,aAAW,IAAI,UAAU,QAAQ;AACjC,WAAS,OAAO,KAAK,MAAM;AAE3B,SAAO,MAAM;AACX,UAAM,QAAQ,SAAS,OAAO,QAAQ,MAAM;AAC5C,QAAI,SAAS,EAAG,UAAS,OAAO,OAAO,OAAO,CAAC;AAC/C,QAAI,SAAS,OAAO,WAAW,GAAG;AAChC,eAAS,WAAW,MAAM;AAC1B,iBAAW,OAAO,QAAQ;AAAA,IAC5B;AAAA,EACF;AACF;","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"format-label.d.ts","sourceRoot":"","sources":["../../src/core/format-label.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CACzB,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,EACjD,MAAM,CAAC,EAAE,MAAM,GACd,MAAM,CAWR"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
function formatLabel(template, values, locale) {
|
|
2
|
+
const numberFormat = new Intl.NumberFormat(locale ?? "en-US");
|
|
3
|
+
return template.replace(/\{(\w+)\}/g, (placeholder, key) => {
|
|
4
|
+
if (!Object.hasOwn(values, key)) return placeholder;
|
|
5
|
+
const value = values[key];
|
|
6
|
+
if (value === void 0) return placeholder;
|
|
7
|
+
return typeof value === "number" ? numberFormat.format(value) : value;
|
|
8
|
+
});
|
|
9
|
+
}
|
|
10
|
+
export {
|
|
11
|
+
formatLabel
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=format-label.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/format-label.ts"],"sourcesContent":["export function formatLabel(\n template: string,\n values: Readonly<Record<string, string | number>>,\n locale?: string,\n): string {\n const numberFormat = new Intl.NumberFormat(locale ?? \"en-US\");\n\n return template.replace(/\\{(\\w+)\\}/g, (placeholder, key: string) => {\n if (!Object.hasOwn(values, key)) return placeholder;\n\n const value = values[key];\n if (value === undefined) return placeholder;\n\n return typeof value === \"number\" ? numberFormat.format(value) : value;\n });\n}\n"],"mappings":"AAAO,SAAS,YACd,UACA,QACA,QACQ;AACR,QAAM,eAAe,IAAI,KAAK,aAAa,UAAU,OAAO;AAE5D,SAAO,SAAS,QAAQ,cAAc,CAAC,aAAa,QAAgB;AAClE,QAAI,CAAC,OAAO,OAAO,QAAQ,GAAG,EAAG,QAAO;AAExC,UAAM,QAAQ,OAAO,GAAG;AACxB,QAAI,UAAU,OAAW,QAAO;AAEhC,WAAO,OAAO,UAAU,WAAW,aAAa,OAAO,KAAK,IAAI;AAAA,EAClE,CAAC;AACH;","names":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
interface ComposingKeyEventLike {
|
|
2
|
+
readonly isComposing?: boolean;
|
|
3
|
+
readonly keyCode?: number;
|
|
4
|
+
readonly nativeEvent?: {
|
|
5
|
+
readonly isComposing?: boolean;
|
|
6
|
+
readonly keyCode?: number;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* True while an IME composition owns the key. Safari fires the final keydown after
|
|
11
|
+
* `compositionend` with `isComposing === false` and `keyCode === 229`, so both signals
|
|
12
|
+
* are checked. React synthetic events expose `isComposing` only on `nativeEvent`.
|
|
13
|
+
*/
|
|
14
|
+
declare function isComposingKeyEvent(event: ComposingKeyEventLike): boolean;
|
|
15
|
+
export { isComposingKeyEvent };
|
|
16
|
+
//# sourceMappingURL=ime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ime.d.ts","sourceRoot":"","sources":["../../src/core/ime.ts"],"names":[],"mappings":"AAAA,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACtF;AAED;;;;GAIG;AACH,iBAAS,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAOlE;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
package/dist/core/ime.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/ime.ts"],"sourcesContent":["interface ComposingKeyEventLike {\n readonly isComposing?: boolean;\n readonly keyCode?: number;\n readonly nativeEvent?: { readonly isComposing?: boolean; readonly keyCode?: number };\n}\n\n/**\n * True while an IME composition owns the key. Safari fires the final keydown after\n * `compositionend` with `isComposing === false` and `keyCode === 229`, so both signals\n * are checked. React synthetic events expose `isComposing` only on `nativeEvent`.\n */\nfunction isComposingKeyEvent(event: ComposingKeyEventLike): boolean {\n return (\n event.isComposing === true ||\n event.nativeEvent?.isComposing === true ||\n event.keyCode === 229 ||\n event.nativeEvent?.keyCode === 229\n );\n}\n\nexport { isComposingKeyEvent };\n"],"mappings":"AAWA,SAAS,oBAAoB,OAAuC;AAClE,SACE,MAAM,gBAAgB,QACtB,MAAM,aAAa,gBAAgB,QACnC,MAAM,YAAY,OAClB,MAAM,aAAa,YAAY;AAEnC;","names":[]}
|
package/dist/core/index.d.ts
CHANGED
|
@@ -6,8 +6,10 @@ export * from "./dialog.js";
|
|
|
6
6
|
export * from "./direction.js";
|
|
7
7
|
export * from "./dismissable-layer.js";
|
|
8
8
|
export * from "./focus-scope.js";
|
|
9
|
+
export * from "./format-label.js";
|
|
9
10
|
export * from "./hover-intent-store.js";
|
|
10
11
|
export * from "./hover-overlay.js";
|
|
12
|
+
export * from "./ime.js";
|
|
11
13
|
export * from "./open-change-details.js";
|
|
12
14
|
export * from "./platform.js";
|
|
13
15
|
export * from "./popover.js";
|
|
@@ -16,6 +18,7 @@ export * from "./presence.js";
|
|
|
16
18
|
export * from "./render.js";
|
|
17
19
|
export * from "./roving-focus.js";
|
|
18
20
|
export * from "./split-ref.js";
|
|
21
|
+
export * from "./text-direction.js";
|
|
19
22
|
export * from "./tabbable.js";
|
|
20
23
|
export * from "./visually-hidden.js";
|
|
21
24
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/core/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,UAAU,CAAC;AACzB,cAAc,0BAA0B,CAAC;AACzC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC"}
|
package/dist/core/index.js
CHANGED
|
@@ -6,8 +6,10 @@ export * from "./dialog.js";
|
|
|
6
6
|
export * from "./direction.js";
|
|
7
7
|
export * from "./dismissable-layer.js";
|
|
8
8
|
export * from "./focus-scope.js";
|
|
9
|
+
export * from "./format-label.js";
|
|
9
10
|
export * from "./hover-intent-store.js";
|
|
10
11
|
export * from "./hover-overlay.js";
|
|
12
|
+
export * from "./ime.js";
|
|
11
13
|
export * from "./open-change-details.js";
|
|
12
14
|
export * from "./platform.js";
|
|
13
15
|
export * from "./popover.js";
|
|
@@ -16,6 +18,7 @@ export * from "./presence.js";
|
|
|
16
18
|
export * from "./render.js";
|
|
17
19
|
export * from "./roving-focus.js";
|
|
18
20
|
export * from "./split-ref.js";
|
|
21
|
+
export * from "./text-direction.js";
|
|
19
22
|
export * from "./tabbable.js";
|
|
20
23
|
export * from "./visually-hidden.js";
|
|
21
24
|
//# sourceMappingURL=index.js.map
|
package/dist/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/index.ts"],"sourcesContent":["export * from \"./anchor-position.js\";\nexport * from \"./collection.js\";\nexport * from \"./compose-event-handlers.js\";\nexport * from \"./create-part-context.js\";\nexport * from \"./dialog.js\";\nexport * from \"./direction.js\";\nexport * from \"./dismissable-layer.js\";\nexport * from \"./focus-scope.js\";\nexport * from \"./hover-intent-store.js\";\nexport * from \"./hover-overlay.js\";\nexport * from \"./open-change-details.js\";\nexport * from \"./platform.js\";\nexport * from \"./popover.js\";\nexport * from \"./portal.js\";\nexport * from \"./presence.js\";\nexport * from \"./render.js\";\nexport * from \"./roving-focus.js\";\nexport * from \"./split-ref.js\";\nexport * from \"./tabbable.js\";\nexport * from \"./visually-hidden.js\";\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../src/core/index.ts"],"sourcesContent":["export * from \"./anchor-position.js\";\nexport * from \"./collection.js\";\nexport * from \"./compose-event-handlers.js\";\nexport * from \"./create-part-context.js\";\nexport * from \"./dialog.js\";\nexport * from \"./direction.js\";\nexport * from \"./dismissable-layer.js\";\nexport * from \"./focus-scope.js\";\nexport * from \"./format-label.js\";\nexport * from \"./hover-intent-store.js\";\nexport * from \"./hover-overlay.js\";\nexport * from \"./ime.js\";\nexport * from \"./open-change-details.js\";\nexport * from \"./platform.js\";\nexport * from \"./popover.js\";\nexport * from \"./portal.js\";\nexport * from \"./presence.js\";\nexport * from \"./render.js\";\nexport * from \"./roving-focus.js\";\nexport * from \"./split-ref.js\";\nexport * from \"./text-direction.js\";\nexport * from \"./tabbable.js\";\nexport * from \"./visually-hidden.js\";\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
|
|
@@ -7,15 +7,16 @@ export interface RovingFocusItemRecord {
|
|
|
7
7
|
readonly textValue: string;
|
|
8
8
|
}
|
|
9
9
|
export interface RovingFocusConfig {
|
|
10
|
-
readonly direction
|
|
10
|
+
readonly direction?: Direction | undefined;
|
|
11
11
|
readonly loop: boolean;
|
|
12
12
|
readonly orientation: RovingFocusOrientation;
|
|
13
13
|
}
|
|
14
14
|
export interface RovingFocusStore {
|
|
15
15
|
focus(id: string): void;
|
|
16
16
|
getCurrentId(): string | null;
|
|
17
|
+
getDirection(): Direction | undefined;
|
|
17
18
|
getItems(): readonly RovingFocusItemRecord[];
|
|
18
|
-
move(fromId: string, key: string): boolean;
|
|
19
|
+
move(fromId: string, key: string, direction?: Direction): boolean;
|
|
19
20
|
register(item: RovingFocusItemRecord): () => void;
|
|
20
21
|
search(character: string): void;
|
|
21
22
|
setCurrentId(id: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roving-focus-store.d.ts","sourceRoot":"","sources":["../../src/core/roving-focus-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC;AAExE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"roving-focus-store.d.ts","sourceRoot":"","sources":["../../src/core/roving-focus-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,MAAM,MAAM,sBAAsB,GAAG,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC;AAExE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,sBAAsB,CAAC;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,IAAI,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,IAAI,SAAS,GAAG,SAAS,CAAC;IACtC,QAAQ,IAAI,SAAS,qBAAqB,EAAE,CAAC;IAC7C,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAClE,QAAQ,CAAC,IAAI,EAAE,qBAAqB,GAAG,MAAM,IAAI,CAAC;IAClD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1D,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5C,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5D,YAAY,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC9C,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC;CACpE;AAMD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAwHnF"}
|
|
@@ -34,8 +34,10 @@ function createRovingFocusStore(initial) {
|
|
|
34
34
|
item.element?.focus({ preventScroll: true });
|
|
35
35
|
},
|
|
36
36
|
getCurrentId: () => currentId,
|
|
37
|
+
getDirection: () => config.direction,
|
|
37
38
|
getItems: () => orderedItems(items),
|
|
38
|
-
move(fromId, key) {
|
|
39
|
+
move(fromId, key, direction) {
|
|
40
|
+
const effectiveDirection = direction ?? config.direction ?? "ltr";
|
|
39
41
|
const enabled = getEnabled();
|
|
40
42
|
if (enabled.length === 0) return false;
|
|
41
43
|
const currentIndex = Math.max(
|
|
@@ -48,10 +50,10 @@ function createRovingFocusStore(initial) {
|
|
|
48
50
|
if (vertical && key === "ArrowDown") offset = 1;
|
|
49
51
|
if (vertical && key === "ArrowUp") offset = -1;
|
|
50
52
|
if (horizontal && key === "ArrowRight") {
|
|
51
|
-
offset =
|
|
53
|
+
offset = effectiveDirection === "rtl" ? -1 : 1;
|
|
52
54
|
}
|
|
53
55
|
if (horizontal && key === "ArrowLeft") {
|
|
54
|
-
offset =
|
|
56
|
+
offset = effectiveDirection === "rtl" ? 1 : -1;
|
|
55
57
|
}
|
|
56
58
|
if (offset === 0 && key !== "Home" && key !== "End") return false;
|
|
57
59
|
let nextIndex = key === "Home" ? 0 : key === "End" ? enabled.length - 1 : currentIndex + offset;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/roving-focus-store.ts"],"sourcesContent":["import type { Direction } from \"./direction.js\";\nimport { sortByDocumentOrder } from \"./dom-order.js\";\n\nexport type RovingFocusOrientation = \"horizontal\" | \"vertical\" | \"both\";\n\nexport interface RovingFocusItemRecord {\n readonly disabled: boolean;\n readonly element: HTMLElement | null;\n readonly id: string;\n readonly textValue: string;\n}\n\nexport interface RovingFocusConfig {\n readonly direction
|
|
1
|
+
{"version":3,"sources":["../../src/core/roving-focus-store.ts"],"sourcesContent":["import type { Direction } from \"./direction.js\";\nimport { sortByDocumentOrder } from \"./dom-order.js\";\n\nexport type RovingFocusOrientation = \"horizontal\" | \"vertical\" | \"both\";\n\nexport interface RovingFocusItemRecord {\n readonly disabled: boolean;\n readonly element: HTMLElement | null;\n readonly id: string;\n readonly textValue: string;\n}\n\nexport interface RovingFocusConfig {\n readonly direction?: Direction | undefined;\n readonly loop: boolean;\n readonly orientation: RovingFocusOrientation;\n}\n\nexport interface RovingFocusStore {\n focus(id: string): void;\n getCurrentId(): string | null;\n getDirection(): Direction | undefined;\n getItems(): readonly RovingFocusItemRecord[];\n move(fromId: string, key: string, direction?: Direction): boolean;\n register(item: RovingFocusItemRecord): () => void;\n search(character: string): void;\n setCurrentId(id: string): void;\n setElement(id: string, element: HTMLElement | null): void;\n subscribe(listener: () => void): () => void;\n subscribeItem(id: string, listener: () => void): () => void;\n updateConfig(config: RovingFocusConfig): void;\n updateItem(id: string, item: Partial<RovingFocusItemRecord>): void;\n}\n\nfunction orderedItems(items: Map<string, RovingFocusItemRecord>) {\n return sortByDocumentOrder(items.values(), (item) => item.element);\n}\n\nexport function createRovingFocusStore(initial: RovingFocusConfig): RovingFocusStore {\n const items = new Map<string, RovingFocusItemRecord>();\n const listeners = new Set<() => void>();\n const itemListeners = new Map<string, Set<() => void>>();\n let config = initial;\n let currentId: string | null = null;\n let search = \"\";\n let searchTimer: ReturnType<typeof setTimeout> | undefined;\n const emit = () => {\n for (const listener of listeners) listener();\n };\n const emitItem = (id: string | null) => {\n if (!id) return;\n for (const listener of itemListeners.get(id) ?? []) listener();\n };\n const commitCurrentId = (id: string | null) => {\n if (currentId === id) return;\n const previous = currentId;\n currentId = id;\n emit();\n emitItem(previous);\n emitItem(id);\n };\n const getEnabled = () => orderedItems(items).filter((item) => !item.disabled);\n\n const store: RovingFocusStore = {\n focus(id) {\n const item = items.get(id);\n if (!item || item.disabled) return;\n store.setCurrentId(id);\n item.element?.focus({ preventScroll: true });\n },\n getCurrentId: () => currentId,\n getDirection: () => config.direction,\n getItems: () => orderedItems(items),\n move(fromId, key, direction) {\n const effectiveDirection = direction ?? config.direction ?? \"ltr\";\n const enabled = getEnabled();\n if (enabled.length === 0) return false;\n const currentIndex = Math.max(\n 0,\n enabled.findIndex((item) => item.id === fromId),\n );\n const horizontal = config.orientation !== \"vertical\";\n const vertical = config.orientation !== \"horizontal\";\n let offset = 0;\n if (vertical && key === \"ArrowDown\") offset = 1;\n if (vertical && key === \"ArrowUp\") offset = -1;\n if (horizontal && key === \"ArrowRight\") {\n offset = effectiveDirection === \"rtl\" ? -1 : 1;\n }\n if (horizontal && key === \"ArrowLeft\") {\n offset = effectiveDirection === \"rtl\" ? 1 : -1;\n }\n if (offset === 0 && key !== \"Home\" && key !== \"End\") return false;\n let nextIndex =\n key === \"Home\" ? 0 : key === \"End\" ? enabled.length - 1 : currentIndex + offset;\n if (config.loop) nextIndex = (nextIndex + enabled.length) % enabled.length;\n const next = enabled[nextIndex];\n if (!next) return false;\n store.focus(next.id);\n return true;\n },\n register(item) {\n items.set(item.id, item);\n if (currentId === null && !item.disabled) commitCurrentId(item.id);\n return () => {\n const wasCurrent = currentId === item.id;\n if (!items.delete(item.id)) return;\n if (wasCurrent) commitCurrentId(getEnabled()[0]?.id ?? null);\n else emit();\n };\n },\n search(character) {\n clearTimeout(searchTimer);\n const repeated = search.length > 0 && [...search].every((value) => value === character);\n search = repeated ? character : search + character;\n const query = search.toLocaleLowerCase();\n const enabled = getEnabled();\n const start = Math.max(0, enabled.findIndex((item) => item.id === currentId) + 1);\n const rotated = [...enabled.slice(start), ...enabled.slice(0, start)];\n const match = rotated.find((item) => item.textValue.toLocaleLowerCase().startsWith(query));\n if (match) store.focus(match.id);\n searchTimer = setTimeout(() => {\n search = \"\";\n }, 500);\n },\n setCurrentId(id) {\n commitCurrentId(id);\n },\n setElement(id, element) {\n store.updateItem(id, { element });\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n subscribeItem(id, listener) {\n const set = itemListeners.get(id) ?? new Set<() => void>();\n set.add(listener);\n itemListeners.set(id, set);\n return () => {\n set.delete(listener);\n if (set.size === 0) itemListeners.delete(id);\n };\n },\n updateConfig(next) {\n config = next;\n },\n updateItem(id, update) {\n const item = items.get(id);\n if (!item) return;\n const next = { ...item, ...update };\n items.set(id, next);\n if (id === currentId && next.disabled) {\n commitCurrentId(getEnabled()[0]?.id ?? null);\n }\n },\n };\n return store;\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roving-focus.d.ts","sourceRoot":"","sources":["../../src/core/roving-focus.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,WAAW,EAGX,YAAY,EACZ,GAAG,EACJ,MAAM,OAAO,CAAC;AAEf,OAAO,
|
|
1
|
+
{"version":3,"file":"roving-focus.d.ts","sourceRoot":"","sources":["../../src/core/roving-focus.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,WAAW,EAGX,YAAY,EACZ,GAAG,EACJ,MAAM,OAAO,CAAC;AAEf,OAAO,EAAwB,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EACL,sBAAsB,EACtB,KAAK,sBAAsB,EAC3B,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AAMjC,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,sBAAsB,CAAC;CAC/C;AAED,MAAM,MAAM,oBAAoB,CAAC,GAAG,SAAS,WAAW,GAAG,KAAK,IAAI,eAAe,CACjF,GAAG,EACH,uBAAuB,EACvB;IAAE,WAAW,EAAE,sBAAsB,CAAA;CAAE,EACvC,WAAW,CACZ,CAAC;AAEF,wBAAgB,eAAe,CAAC,GAAG,SAAS,WAAW,GAAG,KAAK,EAC7D,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC,GAC/B,YAAY,GAAG,IAAI,CA0BrB;yBA5Be,eAAe;;;AA+B/B,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC;IAChC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,oBAAoB,CAAC,GAAG,SAAS,WAAW,GAAG,KAAK,IAAI,eAAe,CACjF,GAAG,EACH,uBAAuB,EACvB;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,EACvC,WAAW,CACZ,CAAC;AAEF,wBAAgB,eAAe,CAAC,GAAG,SAAS,WAAW,GAAG,KAAK,EAC7D,KAAK,EAAE,oBAAoB,CAAC,GAAG,CAAC,GAC/B,YAAY,GAAG,IAAI,CAkFrB;AAED,OAAO,EAAE,sBAAsB,EAAE,CAAC;AAClC,YAAY,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -3,10 +3,12 @@ import { jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import { createContext, useCallback, useContext, useRef, useSyncExternalStore } from "react";
|
|
4
4
|
import { useId, useIsomorphicLayoutEffect, useMergedRefs } from "@gunkin/uiify/hooks";
|
|
5
5
|
import { composeEventHandlers } from "./compose-event-handlers.js";
|
|
6
|
-
import {
|
|
6
|
+
import { useDirectionOverride } from "./direction.js";
|
|
7
|
+
import { isComposingKeyEvent } from "./ime.js";
|
|
7
8
|
import {
|
|
8
9
|
createRovingFocusStore
|
|
9
10
|
} from "./roving-focus-store.js";
|
|
11
|
+
import { resolveDirection } from "./text-direction.js";
|
|
10
12
|
import { useRenderElement } from "./use-render-element.js";
|
|
11
13
|
const RovingFocusContext = createContext(null);
|
|
12
14
|
function RovingFocusRoot(props) {
|
|
@@ -18,7 +20,7 @@ function RovingFocusRoot(props) {
|
|
|
18
20
|
render,
|
|
19
21
|
...consumerProps
|
|
20
22
|
} = props;
|
|
21
|
-
const direction =
|
|
23
|
+
const direction = useDirectionOverride(localDirection);
|
|
22
24
|
const storeRef = useRef(null);
|
|
23
25
|
storeRef.current ??= createRovingFocusStore({ direction, loop, orientation });
|
|
24
26
|
storeRef.current.updateConfig({ direction, loop, orientation });
|
|
@@ -27,8 +29,8 @@ function RovingFocusRoot(props) {
|
|
|
27
29
|
defaultTag: "div",
|
|
28
30
|
props: {
|
|
29
31
|
...consumerProps,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
...direction ? { dir: direction } : {},
|
|
33
|
+
"data-orientation": orientation
|
|
32
34
|
},
|
|
33
35
|
render,
|
|
34
36
|
state: { orientation }
|
|
@@ -82,8 +84,11 @@ function RovingFocusItem(props) {
|
|
|
82
84
|
if (!disabled) store.setCurrentId(id);
|
|
83
85
|
};
|
|
84
86
|
const handleKeyDown = (event) => {
|
|
87
|
+
if (isComposingKeyEvent(event)) return;
|
|
85
88
|
if (event.key === "Home" || event.key === "End" || event.key.startsWith("Arrow")) {
|
|
86
|
-
if (store.move(id, event.key
|
|
89
|
+
if (store.move(id, event.key, resolveDirection(event.currentTarget, store.getDirection()))) {
|
|
90
|
+
event.preventDefault();
|
|
91
|
+
}
|
|
87
92
|
} else if (event.key.length === 1 && !event.altKey && !event.ctrlKey && !event.metaKey) {
|
|
88
93
|
store.search(event.key);
|
|
89
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/roving-focus.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, useCallback, useContext, useRef, useSyncExternalStore } from \"react\";\nimport { useId, useIsomorphicLayoutEffect, useMergedRefs } from \"@gunkin/uiify/hooks\";\nimport type {\n ElementType,\n FocusEvent as ReactFocusEvent,\n KeyboardEvent as ReactKeyboardEvent,\n ReactElement,\n Ref,\n} from \"react\";\nimport { composeEventHandlers } from \"./compose-event-handlers.js\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../src/core/roving-focus.tsx"],"sourcesContent":["\"use client\";\n\nimport { createContext, useCallback, useContext, useRef, useSyncExternalStore } from \"react\";\nimport { useId, useIsomorphicLayoutEffect, useMergedRefs } from \"@gunkin/uiify/hooks\";\nimport type {\n ElementType,\n FocusEvent as ReactFocusEvent,\n KeyboardEvent as ReactKeyboardEvent,\n ReactElement,\n Ref,\n} from \"react\";\nimport { composeEventHandlers } from \"./compose-event-handlers.js\";\nimport { useDirectionOverride, type Direction } from \"./direction.js\";\nimport { isComposingKeyEvent } from \"./ime.js\";\nimport type { RenderableProps } from \"./polymorphic.js\";\nimport {\n createRovingFocusStore,\n type RovingFocusOrientation,\n type RovingFocusStore,\n} from \"./roving-focus-store.js\";\nimport { resolveDirection } from \"./text-direction.js\";\nimport { useRenderElement } from \"./use-render-element.js\";\n\nconst RovingFocusContext = createContext<RovingFocusStore | null>(null);\n\nexport interface RovingFocusRootOwnProps {\n readonly direction?: Direction;\n readonly loop?: boolean;\n readonly orientation?: RovingFocusOrientation;\n}\n\nexport type RovingFocusRootProps<TAs extends ElementType = \"div\"> = RenderableProps<\n TAs,\n RovingFocusRootOwnProps,\n { orientation: RovingFocusOrientation },\n HTMLElement\n>;\n\nexport function RovingFocusRoot<TAs extends ElementType = \"div\">(\n props: RovingFocusRootProps<TAs>,\n): ReactElement | null {\n const {\n as,\n direction: localDirection,\n loop = true,\n orientation = \"both\",\n render,\n ...consumerProps\n } = props as RovingFocusRootProps<ElementType>;\n const direction = useDirectionOverride(localDirection);\n const storeRef = useRef<RovingFocusStore | null>(null);\n storeRef.current ??= createRovingFocusStore({ direction, loop, orientation });\n storeRef.current.updateConfig({ direction, loop, orientation });\n\n const element = useRenderElement({\n as,\n defaultTag: \"div\",\n props: {\n ...consumerProps,\n ...(direction ? { dir: direction } : {}),\n \"data-orientation\": orientation,\n },\n render,\n state: { orientation },\n });\n return <RovingFocusContext value={storeRef.current}>{element}</RovingFocusContext>;\n}\nRovingFocusRoot.displayName = \"RovingFocusRoot\";\n\nexport interface RovingFocusItemOwnProps {\n readonly ref?: Ref<HTMLElement>;\n readonly disabled?: boolean;\n readonly id?: string;\n readonly textValue?: string;\n}\n\nexport type RovingFocusItemProps<TAs extends ElementType = \"div\"> = RenderableProps<\n TAs,\n RovingFocusItemOwnProps,\n { current: boolean; disabled: boolean },\n HTMLElement\n>;\n\nexport function RovingFocusItem<TAs extends ElementType = \"div\">(\n props: RovingFocusItemProps<TAs>,\n): ReactElement | null {\n const {\n as,\n disabled = false,\n id: providedId,\n ref: consumerRef,\n render,\n textValue = \"\",\n ...consumerProps\n } = props as RovingFocusItemProps<ElementType> & { ref?: Ref<HTMLElement> };\n const { onFocus: consumerOnFocus, onKeyDown: consumerOnKeyDown } = consumerProps as {\n onFocus?: (event: ReactFocusEvent<HTMLElement>) => void;\n onKeyDown?: (event: ReactKeyboardEvent<HTMLElement>) => void;\n };\n const generatedId = useId();\n const id = providedId ?? generatedId;\n const store = useContext(RovingFocusContext);\n if (!store) throw new Error(\"RovingFocusItem must be used inside RovingFocusRoot\");\n const elementRef = useRef<HTMLElement | null>(null);\n const current = useSyncExternalStore(\n (listener) => store.subscribeItem(id, listener),\n () => store.getCurrentId() === id,\n () => false,\n );\n const setElement = useCallback(\n (element: HTMLElement | null) => store.setElement(id, element),\n [id, store],\n );\n const mergedRef = useMergedRefs(elementRef, consumerRef, setElement);\n\n useIsomorphicLayoutEffect(\n () =>\n store.register({\n disabled,\n element: elementRef.current,\n id,\n textValue: textValue || elementRef.current?.textContent?.trim() || \"\",\n }),\n [id, store],\n );\n useIsomorphicLayoutEffect(() => {\n store.updateItem(id, {\n disabled,\n textValue: textValue || elementRef.current?.textContent?.trim() || \"\",\n });\n }, [disabled, id, store, textValue]);\n\n const nativeButton = as === \"button\";\n\n const handleFocus = () => {\n if (!disabled) store.setCurrentId(id);\n };\n\n const handleKeyDown = (event: ReactKeyboardEvent<HTMLElement>) => {\n if (isComposingKeyEvent(event)) return;\n if (event.key === \"Home\" || event.key === \"End\" || event.key.startsWith(\"Arrow\")) {\n if (store.move(id, event.key, resolveDirection(event.currentTarget, store.getDirection()))) {\n event.preventDefault();\n }\n } else if (event.key.length === 1 && !event.altKey && !event.ctrlKey && !event.metaKey) {\n store.search(event.key);\n }\n };\n\n return useRenderElement({\n as,\n defaultTag: \"div\",\n props: {\n ...consumerProps,\n id,\n \"aria-disabled\": disabled || undefined,\n \"data-current\": current ? \"\" : undefined,\n \"data-disabled\": disabled ? \"\" : undefined,\n ...(nativeButton ? { disabled: disabled || undefined } : {}),\n onFocus: composeEventHandlers(consumerOnFocus, handleFocus),\n onKeyDown: composeEventHandlers(consumerOnKeyDown, handleKeyDown),\n ref: mergedRef,\n tabIndex: current && !disabled ? 0 : -1,\n },\n render,\n state: { current, disabled },\n });\n}\n\nexport { createRovingFocusStore };\nexport type { RovingFocusOrientation, RovingFocusStore };\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Direction } from "./direction.js";
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the effective text direction at event time with a selector match
|
|
4
|
+
* (no layout read). An explicit `override` wins over the DOM.
|
|
5
|
+
*/
|
|
6
|
+
export declare function resolveDirection(element: Element | null | undefined, override?: Direction): Direction;
|
|
7
|
+
//# sourceMappingURL=text-direction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-direction.d.ts","sourceRoot":"","sources":["../../src/core/text-direction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,EACnC,QAAQ,CAAC,EAAE,SAAS,GACnB,SAAS,CAEX"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/core/text-direction.ts"],"sourcesContent":["import type { Direction } from \"./direction.js\";\n\n/**\n * Resolves the effective text direction at event time with a selector match\n * (no layout read). An explicit `override` wins over the DOM.\n */\nexport function resolveDirection(\n element: Element | null | undefined,\n override?: Direction,\n): Direction {\n return override ?? (element?.matches(\":dir(rtl)\") ? \"rtl\" : \"ltr\");\n}\n"],"mappings":"AAMO,SAAS,iBACd,SACA,UACW;AACX,SAAO,aAAa,SAAS,QAAQ,WAAW,IAAI,QAAQ;AAC9D;","names":[]}
|