@ecoma-io/loom 0.3.0 → 0.4.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/index.js +38 -6
- package/dist/packages/blocks/app-header/src/AppHeader.js.map +1 -1
- package/dist/packages/blocks/app-header/src/AppHeader.vue.d.ts.map +1 -1
- package/dist/packages/blocks/app-header/src/AppHeader.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/packages/blocks/app-header/src/AppHeader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/blocks/desktop-app-shell/src/DesktopAppShell.vue.d.ts +3 -3
- package/dist/packages/blocks/metric-card/src/MetricCard.js.map +1 -1
- package/dist/packages/blocks/metric-card/src/MetricCard.vue.d.ts +22 -4
- package/dist/packages/blocks/metric-card/src/MetricCard.vue.d.ts.map +1 -1
- package/dist/packages/blocks/metric-card/src/MetricCard.vue_vue_type_script_setup_true_lang.js +38 -15
- package/dist/packages/blocks/metric-card/src/MetricCard.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/blocks/title-bar/src/TitleBar.vue.d.ts +3 -3
- package/dist/packages/blocks/toast-stack/src/ToastStack.vue.d.ts +3 -3
- package/dist/packages/composition/scroll-reel/src/ScrollReel.js +2 -2
- package/dist/packages/composition/scroll-reel/src/ScrollReel.js.map +1 -1
- package/dist/packages/composition/scroll-reel/src/ScrollReel.vue.d.ts +26 -0
- package/dist/packages/composition/scroll-reel/src/ScrollReel.vue_vue_type_script_setup_true_lang.js +27 -7
- package/dist/packages/composition/scroll-reel/src/ScrollReel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/composition/scroll-reel/src/index.d.ts +2 -1
- package/dist/packages/composition/scroll-reel/src/index.js +2 -1
- package/dist/packages/core/src/index.d.ts +1 -1
- package/dist/packages/core/src/index.d.ts.map +1 -1
- package/dist/packages/core/src/index.js +2 -2
- package/dist/packages/core/src/motion.d.ts +13 -0
- package/dist/packages/core/src/motion.d.ts.map +1 -1
- package/dist/packages/core/src/motion.js +20 -13
- package/dist/packages/core/src/motion.js.map +1 -1
- package/dist/packages/core/src/theme.d.ts +9 -0
- package/dist/packages/core/src/theme.d.ts.map +1 -1
- package/dist/packages/core/src/theme.js +36 -10
- package/dist/packages/core/src/theme.js.map +1 -1
- package/dist/packages/labels/src/ancestor-disabled.d.ts +5 -1
- package/dist/packages/labels/src/ancestor-disabled.d.ts.map +1 -1
- package/dist/packages/labels/src/ancestor-disabled.js +5 -1
- package/dist/packages/labels/src/ancestor-disabled.js.map +1 -1
- package/dist/packages/labels/src/component-shapes.d.ts +73 -0
- package/dist/packages/labels/src/component-shapes.d.ts.map +1 -1
- package/dist/packages/labels/src/date-labels.d.ts +8 -6
- package/dist/packages/labels/src/date-labels.d.ts.map +1 -1
- package/dist/packages/labels/src/date-labels.js +8 -6
- package/dist/packages/labels/src/date-labels.js.map +1 -1
- package/dist/packages/labels/src/index.d.ts +2 -2
- package/dist/packages/labels/src/index.d.ts.map +1 -1
- package/dist/packages/labels/src/label-registry.d.ts +7 -1
- package/dist/packages/labels/src/label-registry.d.ts.map +1 -1
- package/dist/packages/layouts/reading/src/Reading.js.map +1 -1
- package/dist/packages/layouts/reading/src/Reading.vue.d.ts +16 -15
- package/dist/packages/layouts/reading/src/Reading.vue.d.ts.map +1 -1
- package/dist/packages/layouts/reading/src/Reading.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/layouts/reading/src/index.d.ts +1 -0
- package/dist/packages/layouts/reading/src/index.d.ts.map +1 -1
- package/dist/packages/loom/src/a11y.d.ts +1 -1
- package/dist/packages/loom/src/index.d.ts +191 -174
- package/dist/packages/loom/src/theme.d.ts +3 -0
- package/dist/packages/primitives/alert/src/Alert.js +7 -0
- package/dist/packages/primitives/alert/src/Alert.js.map +1 -0
- package/dist/packages/primitives/alert/src/Alert.vue.d.ts +73 -0
- package/dist/packages/primitives/alert/src/Alert.vue_vue_type_script_setup_true_lang.js +127 -0
- package/dist/packages/primitives/alert/src/Alert.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/packages/primitives/alert/src/index.d.ts +4 -0
- package/dist/packages/primitives/alert/src/index.js +3 -0
- package/dist/packages/primitives/alert-dialog/src/AlertDialog.js.map +1 -1
- package/dist/packages/primitives/alert-dialog/src/AlertDialog.vue.d.ts +2 -2
- package/dist/packages/primitives/alert-dialog/src/AlertDialog.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/packages/primitives/alert-dialog/src/AlertDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/alert-dialog/src/index.d.ts +1 -1
- package/dist/packages/primitives/avatar-group/src/AvatarGroup.vue.d.ts +3 -3
- package/dist/packages/primitives/avatar-group/src/index.d.ts +1 -1
- package/dist/packages/primitives/badge/src/Badge.js.map +1 -1
- package/dist/packages/primitives/badge/src/Badge.vue.d.ts.map +1 -1
- package/dist/packages/primitives/badge/src/Badge.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/badge/src/Badge.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/breadcrumb/src/Breadcrumb.js +2 -2
- package/dist/packages/primitives/breadcrumb/src/Breadcrumb.js.map +1 -1
- package/dist/packages/primitives/breadcrumb/src/Breadcrumb.vue.d.ts +28 -0
- package/dist/packages/primitives/breadcrumb/src/Breadcrumb.vue_vue_type_script_setup_true_lang.js +16 -5
- package/dist/packages/primitives/breadcrumb/src/Breadcrumb.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/breadcrumb/src/index.d.ts +2 -1
- package/dist/packages/primitives/breadcrumb/src/index.js +2 -1
- package/dist/packages/primitives/button/src/Button.js.map +1 -1
- package/dist/packages/primitives/button/src/Button.vue.d.ts.map +1 -1
- package/dist/packages/primitives/button/src/Button.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/button/src/index.js +2 -2
- package/dist/packages/primitives/card/src/Card.js +7 -0
- package/dist/packages/primitives/card/src/Card.js.map +1 -0
- package/dist/packages/primitives/card/src/Card.vue.d.ts +72 -0
- package/dist/packages/primitives/card/src/Card.vue_vue_type_script_setup_true_lang.js +65 -0
- package/dist/packages/primitives/card/src/Card.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/packages/primitives/card/src/index.d.ts +3 -0
- package/dist/packages/primitives/card/src/index.d.ts.map +1 -0
- package/dist/packages/primitives/card/src/index.js +2 -0
- package/dist/packages/primitives/carousel/src/Carousel.js +7 -0
- package/dist/packages/primitives/carousel/src/Carousel.js.map +1 -0
- package/dist/packages/primitives/carousel/src/Carousel.vue.d.ts +34 -0
- package/dist/packages/primitives/carousel/src/Carousel.vue_vue_type_script_setup_true_lang.js +175 -0
- package/dist/packages/primitives/carousel/src/Carousel.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/packages/primitives/carousel/src/index.d.ts +3 -0
- package/dist/packages/primitives/carousel/src/index.js +3 -0
- package/dist/packages/primitives/checkbox/src/Checkbox.js.map +1 -1
- package/dist/packages/primitives/checkbox/src/Checkbox.vue.d.ts +1 -1
- package/dist/packages/primitives/checkbox/src/Checkbox.vue.d.ts.map +1 -1
- package/dist/packages/primitives/checkbox/src/Checkbox.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/packages/primitives/checkbox/src/Checkbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/chip/src/Chip.js.map +1 -1
- package/dist/packages/primitives/chip/src/Chip.vue.d.ts.map +1 -1
- package/dist/packages/primitives/chip/src/Chip.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/chip/src/Chip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/collapse/src/Collapse.js +7 -0
- package/dist/packages/primitives/collapse/src/Collapse.js.map +1 -0
- package/dist/packages/primitives/collapse/src/Collapse.vue.d.ts +56 -0
- package/dist/packages/primitives/collapse/src/Collapse.vue.d.ts.map +1 -0
- package/dist/packages/primitives/collapse/src/Collapse.vue_vue_type_script_setup_true_lang.js +81 -0
- package/dist/packages/primitives/collapse/src/Collapse.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/packages/primitives/collapse/src/index.d.ts +2 -0
- package/dist/packages/primitives/collapse/src/index.d.ts.map +1 -0
- package/dist/packages/primitives/collapse/src/index.js +2 -0
- package/dist/packages/primitives/color-picker/src/ColorPicker.js.map +1 -1
- package/dist/packages/primitives/color-picker/src/ColorPicker.vue.d.ts +4 -4
- package/dist/packages/primitives/color-picker/src/ColorPicker.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/packages/primitives/color-picker/src/ColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/color-picker/src/index.d.ts +1 -1
- package/dist/packages/primitives/combobox/src/Combobox.js.map +1 -1
- package/dist/packages/primitives/combobox/src/Combobox.vue.d.ts +2 -2
- package/dist/packages/primitives/combobox/src/Combobox.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/packages/primitives/combobox/src/Combobox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/combobox/src/index.d.ts +1 -1
- package/dist/packages/primitives/context-menu/src/ContextMenu.js.map +1 -1
- package/dist/packages/primitives/context-menu/src/ContextMenu.vue.d.ts +12 -0
- package/dist/packages/primitives/context-menu/src/ContextMenu.vue.d.ts.map +1 -1
- package/dist/packages/primitives/context-menu/src/ContextMenu.vue_vue_type_script_setup_true_lang.js +7 -3
- package/dist/packages/primitives/context-menu/src/ContextMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/date-picker/src/DatePicker.js.map +1 -1
- package/dist/packages/primitives/date-picker/src/DatePicker.vue.d.ts +2 -2
- package/dist/packages/primitives/date-picker/src/DatePicker.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/date-picker/src/DatePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/date-range-picker/src/DateRangePicker.js.map +1 -1
- package/dist/packages/primitives/date-range-picker/src/DateRangePicker.vue.d.ts +3 -3
- package/dist/packages/primitives/date-range-picker/src/DateRangePicker.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/date-range-picker/src/DateRangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/date-range-picker/src/index.d.ts +1 -1
- package/dist/packages/primitives/date-time-picker/src/DateTimePicker.js.map +1 -1
- package/dist/packages/primitives/date-time-picker/src/DateTimePicker.vue.d.ts +2 -2
- package/dist/packages/primitives/date-time-picker/src/DateTimePicker.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/date-time-picker/src/DateTimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/date-time-range-picker/src/DateTimeRangePicker.js.map +1 -1
- package/dist/packages/primitives/date-time-range-picker/src/DateTimeRangePicker.vue.d.ts +3 -3
- package/dist/packages/primitives/date-time-range-picker/src/DateTimeRangePicker.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/date-time-range-picker/src/DateTimeRangePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/date-time-range-picker/src/index.d.ts +1 -1
- package/dist/packages/primitives/dialog/src/Dialog.js.map +1 -1
- package/dist/packages/primitives/dialog/src/Dialog.vue.d.ts +12 -4
- package/dist/packages/primitives/dialog/src/Dialog.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/dialog/src/Dialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/dialog/src/index.d.ts +1 -1
- package/dist/packages/primitives/drawer/src/Drawer.js.map +1 -1
- package/dist/packages/primitives/drawer/src/Drawer.vue.d.ts +2 -2
- package/dist/packages/primitives/drawer/src/Drawer.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/packages/primitives/drawer/src/Drawer.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/drawer/src/index.d.ts +1 -1
- package/dist/packages/primitives/dropdown-menu/src/DropdownMenu.js.map +1 -1
- package/dist/packages/primitives/dropdown-menu/src/DropdownMenu.vue.d.ts +26 -0
- package/dist/packages/primitives/dropdown-menu/src/DropdownMenu.vue.d.ts.map +1 -1
- package/dist/packages/primitives/dropdown-menu/src/DropdownMenu.vue_vue_type_script_setup_true_lang.js +10 -4
- package/dist/packages/primitives/dropdown-menu/src/DropdownMenu.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/editable/src/Editable.js.map +1 -1
- package/dist/packages/primitives/editable/src/Editable.vue.d.ts +2 -2
- package/dist/packages/primitives/editable/src/Editable.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/editable/src/Editable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/editable/src/index.d.ts +1 -1
- package/dist/packages/primitives/file-upload/src/FileUpload.js.map +1 -1
- package/dist/packages/primitives/file-upload/src/FileUpload.vue.d.ts +2 -2
- package/dist/packages/primitives/file-upload/src/FileUpload.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/file-upload/src/FileUpload.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/file-upload/src/index.d.ts +1 -1
- package/dist/packages/primitives/hover-card/src/HoverCard.js.map +1 -1
- package/dist/packages/primitives/hover-card/src/HoverCard.vue.d.ts.map +1 -1
- package/dist/packages/primitives/hover-card/src/HoverCard.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/hover-card/src/HoverCard.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/icon-button/src/IconButton.js.map +1 -1
- package/dist/packages/primitives/icon-button/src/IconButton.vue.d.ts +10 -4
- package/dist/packages/primitives/icon-button/src/IconButton.vue.d.ts.map +1 -1
- package/dist/packages/primitives/icon-button/src/IconButton.vue_vue_type_script_setup_true_lang.js +18 -6
- package/dist/packages/primitives/icon-button/src/IconButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/indicator/src/Indicator.vue.d.ts +2 -2
- package/dist/packages/primitives/indicator/src/index.d.ts +1 -1
- package/dist/packages/primitives/kbd/src/Kbd.js +7 -0
- package/dist/packages/primitives/kbd/src/Kbd.js.map +1 -0
- package/dist/packages/primitives/kbd/src/Kbd.vue.d.ts +30 -0
- package/dist/packages/primitives/kbd/src/Kbd.vue.d.ts.map +1 -0
- package/dist/packages/primitives/kbd/src/Kbd.vue_vue_type_script_setup_true_lang.js +29 -0
- package/dist/packages/primitives/kbd/src/Kbd.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/packages/primitives/kbd/src/index.d.ts +3 -0
- package/dist/packages/primitives/kbd/src/index.d.ts.map +1 -0
- package/dist/packages/primitives/kbd/src/index.js +3 -0
- package/dist/packages/primitives/link/src/Link.js.map +1 -1
- package/dist/packages/primitives/link/src/Link.vue.d.ts.map +1 -1
- package/dist/packages/primitives/link/src/Link.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/packages/primitives/link/src/Link.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/list/src/List.js +7 -0
- package/dist/packages/primitives/list/src/List.js.map +1 -0
- package/dist/packages/primitives/list/src/List.vue.d.ts +22 -0
- package/dist/packages/primitives/list/src/List.vue.d.ts.map +1 -0
- package/dist/packages/primitives/list/src/List.vue_vue_type_script_setup_true_lang.js +27 -0
- package/dist/packages/primitives/list/src/List.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/packages/primitives/list/src/ListItem.js +7 -0
- package/dist/packages/primitives/list/src/ListItem.js.map +1 -0
- package/dist/packages/primitives/list/src/ListItem.vue.d.ts +75 -0
- package/dist/packages/primitives/list/src/ListItem.vue.d.ts.map +1 -0
- package/dist/packages/primitives/list/src/ListItem.vue_vue_type_script_setup_true_lang.js +101 -0
- package/dist/packages/primitives/list/src/ListItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/packages/primitives/list/src/index.d.ts +4 -0
- package/dist/packages/primitives/list/src/index.d.ts.map +1 -0
- package/dist/packages/primitives/list/src/index.js +3 -0
- package/dist/packages/primitives/menubar/src/Menubar.js.map +1 -1
- package/dist/packages/primitives/menubar/src/Menubar.vue.d.ts +20 -6
- package/dist/packages/primitives/menubar/src/Menubar.vue.d.ts.map +1 -1
- package/dist/packages/primitives/menubar/src/Menubar.vue_vue_type_script_setup_true_lang.js +178 -64
- package/dist/packages/primitives/menubar/src/Menubar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/number-field/src/NumberField.js.map +1 -1
- package/dist/packages/primitives/number-field/src/NumberField.vue.d.ts +2 -2
- package/dist/packages/primitives/number-field/src/NumberField.vue_vue_type_script_setup_true_lang.js +1 -0
- package/dist/packages/primitives/number-field/src/NumberField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/number-field/src/index.d.ts +1 -1
- package/dist/packages/primitives/otp-input/src/OtpInput.vue.d.ts +2 -2
- package/dist/packages/primitives/otp-input/src/index.d.ts +1 -1
- package/dist/packages/primitives/pagination/src/Pagination.js.map +1 -1
- package/dist/packages/primitives/pagination/src/Pagination.vue.d.ts +3 -3
- package/dist/packages/primitives/pagination/src/Pagination.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/pagination/src/Pagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/pagination/src/index.d.ts +1 -1
- package/dist/packages/primitives/popover/src/Popover.js.map +1 -1
- package/dist/packages/primitives/popover/src/Popover.vue.d.ts.map +1 -1
- package/dist/packages/primitives/popover/src/Popover.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/popover/src/Popover.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/progress/src/Progress.vue.d.ts +2 -2
- package/dist/packages/primitives/progress/src/index.d.ts +1 -1
- package/dist/packages/primitives/radial-progress/src/RadialProgress.vue.d.ts +2 -2
- package/dist/packages/primitives/radial-progress/src/index.d.ts +1 -1
- package/dist/packages/primitives/radio-group/src/RadioGroup.js.map +1 -1
- package/dist/packages/primitives/radio-group/src/RadioGroup.vue.d.ts.map +1 -1
- package/dist/packages/primitives/radio-group/src/RadioGroup.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/radio-group/src/RadioGroup.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/rating/src/Rating.vue.d.ts +2 -2
- package/dist/packages/primitives/rating/src/index.d.ts +1 -1
- package/dist/packages/primitives/segmented-control/src/SegmentedControl.js.map +1 -1
- package/dist/packages/primitives/segmented-control/src/SegmentedControl.vue.d.ts.map +1 -1
- package/dist/packages/primitives/segmented-control/src/SegmentedControl.vue_vue_type_script_setup_true_lang.js +2 -3
- package/dist/packages/primitives/segmented-control/src/SegmentedControl.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/select/src/Select.js.map +1 -1
- package/dist/packages/primitives/select/src/Select.vue.d.ts.map +1 -1
- package/dist/packages/primitives/select/src/Select.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/select/src/Select.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/slider/src/Slider.js.map +1 -1
- package/dist/packages/primitives/slider/src/Slider.vue.d.ts +6 -3
- package/dist/packages/primitives/slider/src/Slider.vue.d.ts.map +1 -1
- package/dist/packages/primitives/slider/src/Slider.vue_vue_type_script_setup_true_lang.js +15 -10
- package/dist/packages/primitives/slider/src/Slider.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/stepper/src/Stepper.vue.d.ts +2 -2
- package/dist/packages/primitives/stepper/src/index.d.ts +1 -1
- package/dist/packages/primitives/switch/src/Switch.js.map +1 -1
- package/dist/packages/primitives/switch/src/Switch.vue.d.ts +1 -1
- package/dist/packages/primitives/switch/src/Switch.vue.d.ts.map +1 -1
- package/dist/packages/primitives/switch/src/Switch.vue_vue_type_script_setup_true_lang.js +3 -3
- package/dist/packages/primitives/switch/src/Switch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/table/src/Table.js +7 -0
- package/dist/packages/primitives/table/src/Table.js.map +1 -0
- package/dist/packages/primitives/table/src/Table.vue.d.ts +45 -0
- package/dist/packages/primitives/table/src/Table.vue_vue_type_script_setup_true_lang.js +72 -0
- package/dist/packages/primitives/table/src/Table.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/packages/primitives/table/src/TableCell.js +7 -0
- package/dist/packages/primitives/table/src/TableCell.js.map +1 -0
- package/dist/packages/primitives/table/src/TableCell.vue.d.ts +19 -0
- package/dist/packages/primitives/table/src/TableCell.vue.d.ts.map +1 -0
- package/dist/packages/primitives/table/src/TableCell.vue_vue_type_script_setup_true_lang.js +17 -0
- package/dist/packages/primitives/table/src/TableCell.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/packages/primitives/table/src/TableHead.js +7 -0
- package/dist/packages/primitives/table/src/TableHead.js.map +1 -0
- package/dist/packages/primitives/table/src/TableHead.vue.d.ts +56 -0
- package/dist/packages/primitives/table/src/TableHead.vue_vue_type_script_setup_true_lang.js +79 -0
- package/dist/packages/primitives/table/src/TableHead.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/packages/primitives/table/src/TableRow.js +7 -0
- package/dist/packages/primitives/table/src/TableRow.js.map +1 -0
- package/dist/packages/primitives/table/src/TableRow.vue.d.ts +39 -0
- package/dist/packages/primitives/table/src/TableRow.vue.d.ts.map +1 -0
- package/dist/packages/primitives/table/src/TableRow.vue_vue_type_script_setup_true_lang.js +61 -0
- package/dist/packages/primitives/table/src/TableRow.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/packages/primitives/table/src/index.d.ts +10 -0
- package/dist/packages/primitives/table/src/index.js +8 -0
- package/dist/packages/primitives/tabs/src/Tabs.js.map +1 -1
- package/dist/packages/primitives/tabs/src/Tabs.vue.d.ts.map +1 -1
- package/dist/packages/primitives/tabs/src/Tabs.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/tabs/src/Tabs.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/tags-input/src/TagsInput.js.map +1 -1
- package/dist/packages/primitives/tags-input/src/TagsInput.vue.d.ts +2 -2
- package/dist/packages/primitives/tags-input/src/TagsInput.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/tags-input/src/TagsInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/tags-input/src/index.d.ts +1 -1
- package/dist/packages/primitives/text-field/src/TextField.js.map +1 -1
- package/dist/packages/primitives/text-field/src/TextField.vue.d.ts +2 -2
- package/dist/packages/primitives/text-field/src/TextField.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/text-field/src/TextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/text-field/src/index.d.ts +1 -1
- package/dist/packages/primitives/text-field/src/index.js +2 -2
- package/dist/packages/primitives/textarea/src/Textarea.js.map +1 -1
- package/dist/packages/primitives/textarea/src/Textarea.vue.d.ts +2 -2
- package/dist/packages/primitives/textarea/src/Textarea.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/textarea/src/Textarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/textarea/src/index.d.ts +1 -1
- package/dist/packages/primitives/textarea/src/index.js +2 -2
- package/dist/packages/primitives/time-picker/src/TimePicker.vue.d.ts +2 -2
- package/dist/packages/primitives/timeline/src/Timeline.js +7 -0
- package/dist/packages/primitives/timeline/src/Timeline.js.map +1 -0
- package/dist/packages/primitives/timeline/src/Timeline.vue.d.ts +37 -0
- package/dist/packages/primitives/timeline/src/Timeline.vue_vue_type_script_setup_true_lang.js +44 -0
- package/dist/packages/primitives/timeline/src/Timeline.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/packages/primitives/timeline/src/TimelineItem.js +7 -0
- package/dist/packages/primitives/timeline/src/TimelineItem.js.map +1 -0
- package/dist/packages/primitives/timeline/src/TimelineItem.vue.d.ts +50 -0
- package/dist/packages/primitives/timeline/src/TimelineItem.vue_vue_type_script_setup_true_lang.js +96 -0
- package/dist/packages/primitives/timeline/src/TimelineItem.vue_vue_type_script_setup_true_lang.js.map +1 -0
- package/dist/packages/primitives/timeline/src/index.d.ts +5 -0
- package/dist/packages/primitives/timeline/src/index.js +5 -0
- package/dist/packages/primitives/toast/src/Toast.vue.d.ts +2 -2
- package/dist/packages/primitives/toast/src/ToastItem.js.map +1 -1
- package/dist/packages/primitives/toast/src/ToastItem.vue.d.ts +2 -2
- package/dist/packages/primitives/toast/src/ToastItem.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/packages/primitives/toast/src/ToastItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/toast/src/index.d.ts +1 -1
- package/dist/packages/primitives/tooltip/src/Tooltip.js.map +1 -1
- package/dist/packages/primitives/tooltip/src/Tooltip.vue.d.ts.map +1 -1
- package/dist/packages/primitives/tooltip/src/Tooltip.vue_vue_type_script_setup_true_lang.js +1 -1
- package/dist/packages/primitives/tooltip/src/Tooltip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/packages/primitives/window-controls/src/WindowControls.vue.d.ts +2 -2
- package/dist/packages/primitives/window-controls/src/index.d.ts +1 -1
- package/dist/styles/global.css +59 -0
- package/dist/styles/theme.css +13 -0
- package/dist/theme.js +3 -0
- package/package.json +13 -7
- package/dist/packages/blocks/desktop-app-shell/src/DesktopAppShell.vue.d.ts.map +0 -1
- package/dist/packages/blocks/title-bar/src/TitleBar.vue.d.ts.map +0 -1
- package/dist/packages/blocks/toast-stack/src/ToastStack.vue.d.ts.map +0 -1
- package/dist/packages/composition/scroll-reel/src/ScrollReel.vue.d.ts.map +0 -1
- package/dist/packages/composition/scroll-reel/src/index.d.ts.map +0 -1
- package/dist/packages/loom/src/a11y.d.ts.map +0 -1
- package/dist/packages/loom/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/alert-dialog/src/AlertDialog.vue.d.ts.map +0 -1
- package/dist/packages/primitives/alert-dialog/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/avatar-group/src/AvatarGroup.vue.d.ts.map +0 -1
- package/dist/packages/primitives/avatar-group/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/breadcrumb/src/Breadcrumb.vue.d.ts.map +0 -1
- package/dist/packages/primitives/breadcrumb/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/color-picker/src/ColorPicker.vue.d.ts.map +0 -1
- package/dist/packages/primitives/color-picker/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/combobox/src/Combobox.vue.d.ts.map +0 -1
- package/dist/packages/primitives/combobox/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/date-picker/src/DatePicker.vue.d.ts.map +0 -1
- package/dist/packages/primitives/date-range-picker/src/DateRangePicker.vue.d.ts.map +0 -1
- package/dist/packages/primitives/date-range-picker/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/date-time-picker/src/DateTimePicker.vue.d.ts.map +0 -1
- package/dist/packages/primitives/date-time-range-picker/src/DateTimeRangePicker.vue.d.ts.map +0 -1
- package/dist/packages/primitives/date-time-range-picker/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/dialog/src/Dialog.vue.d.ts.map +0 -1
- package/dist/packages/primitives/dialog/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/drawer/src/Drawer.vue.d.ts.map +0 -1
- package/dist/packages/primitives/drawer/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/editable/src/Editable.vue.d.ts.map +0 -1
- package/dist/packages/primitives/editable/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/file-upload/src/FileUpload.vue.d.ts.map +0 -1
- package/dist/packages/primitives/file-upload/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/indicator/src/Indicator.vue.d.ts.map +0 -1
- package/dist/packages/primitives/indicator/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/number-field/src/NumberField.vue.d.ts.map +0 -1
- package/dist/packages/primitives/number-field/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/otp-input/src/OtpInput.vue.d.ts.map +0 -1
- package/dist/packages/primitives/otp-input/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/pagination/src/Pagination.vue.d.ts.map +0 -1
- package/dist/packages/primitives/pagination/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/progress/src/Progress.vue.d.ts.map +0 -1
- package/dist/packages/primitives/progress/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/radial-progress/src/RadialProgress.vue.d.ts.map +0 -1
- package/dist/packages/primitives/radial-progress/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/rating/src/Rating.vue.d.ts.map +0 -1
- package/dist/packages/primitives/rating/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/stepper/src/Stepper.vue.d.ts.map +0 -1
- package/dist/packages/primitives/stepper/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/tags-input/src/TagsInput.vue.d.ts.map +0 -1
- package/dist/packages/primitives/tags-input/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/text-field/src/TextField.vue.d.ts.map +0 -1
- package/dist/packages/primitives/text-field/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/textarea/src/Textarea.vue.d.ts.map +0 -1
- package/dist/packages/primitives/textarea/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/time-picker/src/TimePicker.vue.d.ts.map +0 -1
- package/dist/packages/primitives/toast/src/Toast.vue.d.ts.map +0 -1
- package/dist/packages/primitives/toast/src/ToastItem.vue.d.ts.map +0 -1
- package/dist/packages/primitives/toast/src/index.d.ts.map +0 -1
- package/dist/packages/primitives/window-controls/src/WindowControls.vue.d.ts.map +0 -1
- package/dist/packages/primitives/window-controls/src/index.d.ts.map +0 -1
- package/dist/styles/theme.contrast.test.ts +0 -460
package/dist/packages/composition/scroll-reel/src/ScrollReel.vue_vue_type_script_setup_true_lang.js
CHANGED
|
@@ -1,7 +1,22 @@
|
|
|
1
1
|
import { cn } from "../../../core/src/cn.js";
|
|
2
|
+
import { smoothScrollBehavior } from "../../../core/src/motion.js";
|
|
2
3
|
import "../../../core/src/index.js";
|
|
4
|
+
import { useLabels } from "../../../labels/src/labels.js";
|
|
5
|
+
import "../../../labels/src/index.js";
|
|
3
6
|
import { createElementBlock, defineComponent, normalizeClass, openBlock, ref, renderSlot, unref } from "vue";
|
|
4
7
|
//#region packages/composition/scroll-reel/src/ScrollReel.vue?vue&type=script&setup=true&lang.ts
|
|
8
|
+
var _hoisted_1 = ["aria-label"];
|
|
9
|
+
/**
|
|
10
|
+
* Loom's English, co-located with the component so it tree-shakes with it,
|
|
11
|
+
* and exported so a host can build a partial vocabulary against the real
|
|
12
|
+
* thing rather than a transcription of it. The type itself lives in the
|
|
13
|
+
* labels registry (`ScrollReelLabels`) like every other slot's, so
|
|
14
|
+
* `provideLoomLabels({ scrollReel: … })` reaches this component exactly as
|
|
15
|
+
* it reaches every primitive — composition sits above labels in the layer
|
|
16
|
+
* direction, and a host localising one reel should not have to learn a
|
|
17
|
+
* second seam to do it.
|
|
18
|
+
*/
|
|
19
|
+
var SCROLL_REEL_LABELS = { region: "Scrollable content" };
|
|
5
20
|
var snapClass = {
|
|
6
21
|
start: "snap-x snap-mandatory snap-start",
|
|
7
22
|
center: "snap-x snap-mandatory snap-center",
|
|
@@ -17,10 +32,14 @@ var ScrollReel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
17
32
|
__name: "ScrollReel",
|
|
18
33
|
props: {
|
|
19
34
|
snap: { default: "start" },
|
|
20
|
-
gap: { default: "md" }
|
|
35
|
+
gap: { default: "md" },
|
|
36
|
+
labels: {}
|
|
21
37
|
},
|
|
22
38
|
setup(__props) {
|
|
39
|
+
const props = __props;
|
|
40
|
+
const text = useLabels("scrollReel", SCROLL_REEL_LABELS, () => props.labels);
|
|
23
41
|
const reel = ref(null);
|
|
42
|
+
const scrollBehavior = smoothScrollBehavior;
|
|
24
43
|
/**
|
|
25
44
|
* Keyboard navigation for scroll-snap: arrow keys scroll to the next or
|
|
26
45
|
* previous snap-aligned child. Without this, the browser's default arrow-key
|
|
@@ -33,17 +52,18 @@ var ScrollReel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
33
52
|
const direction = event.key === "ArrowRight" ? 1 : event.key === "ArrowLeft" ? -1 : 0;
|
|
34
53
|
if (direction === 0 && event.key !== "Home" && event.key !== "End") return;
|
|
35
54
|
event.preventDefault();
|
|
55
|
+
const behavior = scrollBehavior();
|
|
36
56
|
if (event.key === "Home") {
|
|
37
57
|
el.scrollTo({
|
|
38
58
|
left: 0,
|
|
39
|
-
behavior
|
|
59
|
+
behavior
|
|
40
60
|
});
|
|
41
61
|
return;
|
|
42
62
|
}
|
|
43
63
|
if (event.key === "End") {
|
|
44
64
|
el.scrollTo({
|
|
45
65
|
left: el.scrollWidth,
|
|
46
|
-
behavior
|
|
66
|
+
behavior
|
|
47
67
|
});
|
|
48
68
|
return;
|
|
49
69
|
}
|
|
@@ -53,7 +73,7 @@ var ScrollReel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
53
73
|
const childEdge = direction === 1 ? child.offsetLeft : child.offsetLeft + child.offsetWidth;
|
|
54
74
|
if (direction === 1 ? childEdge > scrollEdge - 1 : childEdge < scrollEdge + 1) {
|
|
55
75
|
child.scrollIntoView({
|
|
56
|
-
behavior
|
|
76
|
+
behavior,
|
|
57
77
|
block: "nearest",
|
|
58
78
|
inline: "start"
|
|
59
79
|
});
|
|
@@ -68,13 +88,13 @@ var ScrollReel_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
|
|
|
68
88
|
class: normalizeClass(["overflow-x-auto", unref(cn)("flex flex-row", snapClass[__props.snap], gapClass[__props.gap])]),
|
|
69
89
|
tabindex: "0",
|
|
70
90
|
role: "region",
|
|
71
|
-
"aria-label":
|
|
91
|
+
"aria-label": unref(text).region,
|
|
72
92
|
onKeydown
|
|
73
|
-
}, [renderSlot(_ctx.$slots, "default")],
|
|
93
|
+
}, [renderSlot(_ctx.$slots, "default")], 42, _hoisted_1);
|
|
74
94
|
};
|
|
75
95
|
}
|
|
76
96
|
});
|
|
77
97
|
//#endregion
|
|
78
|
-
export { ScrollReel_vue_vue_type_script_setup_true_lang_default as default, gapClass, snapClass };
|
|
98
|
+
export { SCROLL_REEL_LABELS, ScrollReel_vue_vue_type_script_setup_true_lang_default as default, gapClass, snapClass };
|
|
79
99
|
|
|
80
100
|
//# sourceMappingURL=ScrollReel.vue_vue_type_script_setup_true_lang.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ScrollReel.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../../packages/composition/scroll-reel/src/ScrollReel.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * ScrollReel — horizontal scrolling strip with scroll-snap.\n *\n * A touch-friendly, keyboard-navigable horizontal scroll container with\n * optional scroll-snap alignment. Arrow keys scroll to the next or previous\n * snap point; the `Home` and `End` keys jump to the start or end of the\n * strip.\n *\n * A ScrollReel is a component, not `overflow-x-auto snap-x snap-mandatory`,\n * because keyboard accessibility for scroll-snap requires JavaScript (arrow\n * keys must find the next snap-aligned child and scroll it into view), and\n * the gap tightens one step below `sm` like Stack and DashboardGrid.\n */\nexport type ScrollReelSnap = \"start\" | \"center\" | \"end\" | \"none\";\n\nexport type ScrollReelGap = \"sm\" | \"md\" | \"lg\";\n\nconst snapClass: Record<ScrollReelSnap, string> = {\n start: \"snap-x snap-mandatory snap-start\",\n center: \"snap-x snap-mandatory snap-center\",\n end: \"snap-x snap-mandatory snap-end\",\n // `none` means no snap alignment — items scroll freely.\n none: \"\",\n} as const;\n\nconst gapClass: Record<ScrollReelGap, string> = {\n sm: \"gap-2 sm:gap-3\",\n md: \"gap-3 sm:gap-4\",\n lg: \"gap-4 sm:gap-6\",\n} as const;\n\nexport { snapClass, gapClass };\n</script>\n\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport { cn } from \"@ecoma-io/loom-core\";\n\
|
|
1
|
+
{"version":3,"file":"ScrollReel.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../../../packages/composition/scroll-reel/src/ScrollReel.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * ScrollReel — horizontal scrolling strip with scroll-snap.\n *\n * A touch-friendly, keyboard-navigable horizontal scroll container with\n * optional scroll-snap alignment. Arrow keys scroll to the next or previous\n * snap point; the `Home` and `End` keys jump to the start or end of the\n * strip.\n *\n * A ScrollReel is a component, not `overflow-x-auto snap-x snap-mandatory`,\n * because keyboard accessibility for scroll-snap requires JavaScript (arrow\n * keys must find the next snap-aligned child and scroll it into view), and\n * the gap tightens one step below `sm` like Stack and DashboardGrid.\n */\nexport type ScrollReelSnap = \"start\" | \"center\" | \"end\" | \"none\";\n\nexport type ScrollReelGap = \"sm\" | \"md\" | \"lg\";\n\n/**\n * Loom's English, co-located with the component so it tree-shakes with it,\n * and exported so a host can build a partial vocabulary against the real\n * thing rather than a transcription of it. The type itself lives in the\n * labels registry (`ScrollReelLabels`) like every other slot's, so\n * `provideLoomLabels({ scrollReel: … })` reaches this component exactly as\n * it reaches every primitive — composition sits above labels in the layer\n * direction, and a host localising one reel should not have to learn a\n * second seam to do it.\n */\nexport const SCROLL_REEL_LABELS: ScrollReelLabels = {\n region: \"Scrollable content\",\n};\n\nconst snapClass: Record<ScrollReelSnap, string> = {\n start: \"snap-x snap-mandatory snap-start\",\n center: \"snap-x snap-mandatory snap-center\",\n end: \"snap-x snap-mandatory snap-end\",\n // `none` means no snap alignment — items scroll freely.\n none: \"\",\n} as const;\n\nconst gapClass: Record<ScrollReelGap, string> = {\n sm: \"gap-2 sm:gap-3\",\n md: \"gap-3 sm:gap-4\",\n lg: \"gap-4 sm:gap-6\",\n} as const;\n\nexport { snapClass, gapClass };\n</script>\n\n<script setup lang=\"ts\">\nimport { ref } from \"vue\";\nimport { cn, smoothScrollBehavior } from \"@ecoma-io/loom-core\";\nimport { useLabels, type LabelOverrides, type ScrollReelLabels } from \"@ecoma-io/loom-labels\";\n\nconst props = withDefaults(\n defineProps<{\n /** Scroll-snap alignment. \"none\" disables snap entirely. */\n snap?: ScrollReelSnap;\n /** Gap between items — mirrors Stack's scale. Tightens one notch below `sm`. */\n gap?: ScrollReelGap;\n /**\n * Names for what the reel says out loud, as any subset of\n * `ScrollReelLabels` — the per-instance correction over\n * `SCROLL_REEL_LABELS`, in the same shape a primitive's `labels` prop\n * takes.\n */\n labels?: LabelOverrides<ScrollReelLabels>;\n }>(),\n { snap: \"start\", gap: \"md\" },\n);\n\n// `text`, not `labels`: the prop of that name is one of the three sources this\n// resolves (own prop, then the host vocabulary from `provideLoomLabels`, then\n// these English defaults), and a template reading the raw prop would be\n// reading the overrides rather than the answer.\nconst text = useLabels(\"scrollReel\", SCROLL_REEL_LABELS, () => props.labels);\n\nconst reel = ref<HTMLDivElement | null>(null);\n\n// The reduced-motion softening lives in core (`smoothScrollBehavior`): an\n// explicit `\"smooth\"` in a scrollTo dictionary overrides the stylesheet's\n// kill-switch, so the question has to be answered at the call site — and\n// Carousel asks it too, which is why the answer is shared rather than owned.\nconst scrollBehavior = smoothScrollBehavior;\n\n/**\n * Keyboard navigation for scroll-snap: arrow keys scroll to the next or\n * previous snap-aligned child. Without this, the browser's default arrow-key\n * behaviour scrolls by a fixed pixel amount that rarely aligns with snap\n * points, leaving the strip between two items.\n */\nfunction onKeydown(event: KeyboardEvent) {\n const el = reel.value;\n if (!el) return;\n\n const direction = event.key === \"ArrowRight\" ? 1 : event.key === \"ArrowLeft\" ? -1 : 0;\n if (direction === 0 && event.key !== \"Home\" && event.key !== \"End\") return;\n\n event.preventDefault();\n\n const behavior = scrollBehavior();\n if (event.key === \"Home\") {\n el.scrollTo({ left: 0, behavior });\n return;\n }\n if (event.key === \"End\") {\n el.scrollTo({ left: el.scrollWidth, behavior });\n return;\n }\n\n // Find the next snap-aligned child in the scroll direction.\n const children = [...el.children] as HTMLElement[];\n const scrollEdge = direction === 1 ? el.scrollLeft + el.clientWidth : el.scrollLeft;\n\n for (const child of direction === 1 ? children : children.reverse()) {\n const childEdge = direction === 1 ? child.offsetLeft : child.offsetLeft + child.offsetWidth;\n const isNext = direction === 1 ? childEdge > scrollEdge - 1 : childEdge < scrollEdge + 1;\n if (isNext) {\n child.scrollIntoView({ behavior, block: \"nearest\", inline: \"start\" });\n break;\n }\n }\n}\n</script>\n\n<template>\n <!-- `role=\"region\"` + `tabindex=\"0\"` + an accessible name make this a named,\n focusable landmark region. The keyboard handler is what makes the\n scroll-snap strip navigable by arrow keys — a genuine interaction on\n a genuinely interactive element. The rule does not account for\n non-interactive ARIA roles with an explicit tabindex. -->\n <!-- eslint-disable-next-line vuejs-accessibility/no-static-element-interactions -->\n <div\n ref=\"reel\"\n class=\"overflow-x-auto\"\n :class=\"cn('flex flex-row', snapClass[snap], gapClass[gap])\"\n tabindex=\"0\"\n role=\"region\"\n :aria-label=\"text.region\"\n @keydown=\"onKeydown\"\n >\n <slot />\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;AA4BA,IAAa,qBAAuC,EAClD,QAAQ,qBACV;AAEA,IAAM,YAA4C;CAChD,OAAO;CACP,QAAQ;CACR,KAAK;CAEL,MAAM;AACR;AAEA,IAAM,WAA0C;CAC9C,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;;;;;;;;;EAUA,MAAM,QAAQ;EAqBd,MAAM,OAAO,UAAU,cAAc,0BAA0B,MAAM,MAAM;EAE3E,MAAM,OAAO,IAA2B,IAAI;EAM5C,MAAM,iBAAiB;;;;;;;EAQvB,SAAS,UAAU,OAAsB;GACvC,MAAM,KAAK,KAAK;GAChB,IAAI,CAAC,IAAI;GAET,MAAM,YAAY,MAAM,QAAQ,eAAe,IAAI,MAAM,QAAQ,cAAc,KAAK;GACpF,IAAI,cAAc,KAAK,MAAM,QAAQ,UAAU,MAAM,QAAQ,OAAO;GAEpE,MAAM,eAAe;GAErB,MAAM,WAAW,eAAe;GAChC,IAAI,MAAM,QAAQ,QAAQ;IACxB,GAAG,SAAS;KAAE,MAAM;KAAG;IAAS,CAAC;IACjC;GACF;GACA,IAAI,MAAM,QAAQ,OAAO;IACvB,GAAG,SAAS;KAAE,MAAM,GAAG;KAAa;IAAS,CAAC;IAC9C;GACF;GAGA,MAAM,WAAW,CAAC,GAAG,GAAG,QAAQ;GAChC,MAAM,aAAa,cAAc,IAAI,GAAG,aAAa,GAAG,cAAc,GAAG;GAEzE,KAAK,MAAM,SAAS,cAAc,IAAI,WAAW,SAAS,QAAQ,GAAG;IACnE,MAAM,YAAY,cAAc,IAAI,MAAM,aAAa,MAAM,aAAa,MAAM;IAEhF,IADe,cAAc,IAAI,YAAY,aAAa,IAAI,YAAY,aAAa,GAC3E;KACV,MAAM,eAAe;MAAE;MAAU,OAAO;MAAW,QAAQ;KAAQ,CAAC;KACpE;IACF;GACF;EACF;;GAUE,OAAA,UAAA,GAAA,mBAUM,OAAA;IATA,SAAA;IAAJ,KAAI;IACJ,OAAK,eAAA,CAAC,mBACE,MAAA,EAAA,CAAE,CAAA,iBAAkB,UAAU,QAAA,OAAO,SAAS,QAAA,IAAG,CAAA,CAAA;IACzD,UAAS;IACT,MAAK;IACJ,cAAY,MAAA,IAAA,CAAI,CAAC;IACR;GAEV,GAAA,CAAA,WAAQ,KAAA,QAAA,SAAA,CAAA,GAAA,IAAA,UAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { default } from "./ScrollReel.vue";
|
|
1
|
+
export { default, SCROLL_REEL_LABELS } from "./ScrollReel.vue";
|
|
2
2
|
export type { ScrollReelGap, ScrollReelSnap } from "./ScrollReel.vue";
|
|
3
|
+
export type { ScrollReelLabels } from "../../../labels/src/index";
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { cn } from "./cn";
|
|
2
2
|
export { optional } from "./props";
|
|
3
3
|
export { useSplitAttrs } from "./attrs";
|
|
4
|
-
export { LIST_STAGGER_CAP, LIST_STAGGER_STEP_MS, listStaggerDelay } from "./motion";
|
|
4
|
+
export { LIST_STAGGER_CAP, LIST_STAGGER_STEP_MS, listStaggerDelay, smoothScrollBehavior, } from "./motion";
|
|
5
5
|
export { WCAG_TAGS } from "./a11y-scope";
|
|
6
6
|
export { useTheme, themeScript } from "./theme";
|
|
7
7
|
export type { ThemePreference, ResolvedTheme } from "./theme";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAG1B,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGxC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/index.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAG1B,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAGxC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,UAAU,CAAC;AAGlB,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAG9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { cn } from "./cn.js";
|
|
2
2
|
import { optional } from "./props.js";
|
|
3
3
|
import { useSplitAttrs } from "./attrs.js";
|
|
4
|
-
import {
|
|
4
|
+
import { listStaggerDelay, smoothScrollBehavior } from "./motion.js";
|
|
5
5
|
import { WCAG_TAGS } from "./a11y-scope.js";
|
|
6
6
|
import { themeScript, useTheme } from "./theme.js";
|
|
7
7
|
import { applyLoomIconDefaults } from "./icon-defaults.js";
|
|
8
|
-
export {
|
|
8
|
+
export { WCAG_TAGS, applyLoomIconDefaults, cn, listStaggerDelay, optional, smoothScrollBehavior, themeScript, useSplitAttrs, useTheme };
|
|
@@ -11,4 +11,17 @@ export declare const LIST_STAGGER_STEP_MS = 24;
|
|
|
11
11
|
export declare const LIST_STAGGER_CAP = 5;
|
|
12
12
|
/** The inline `animation-delay` for the i-th revealed row. */
|
|
13
13
|
export declare function listStaggerDelay(i: number): string;
|
|
14
|
+
/**
|
|
15
|
+
* The behaviour a scripted scroll should ask for, given the reader's motion
|
|
16
|
+
* preference: `"smooth"` normally, `"auto"` under
|
|
17
|
+
* `prefers-reduced-motion`.
|
|
18
|
+
*
|
|
19
|
+
* It has to exist because the stylesheet's kill-switch cannot reach this
|
|
20
|
+
* path: an explicit `"smooth"` in a `scrollTo` dictionary *overrides* the
|
|
21
|
+
* CSS `scroll-behavior` property — that is what the spec defines a
|
|
22
|
+
* non-`"auto"` behaviour value to mean. Every component that scrolls by
|
|
23
|
+
* script (ScrollReel, Carousel) asks this instead of deciding alone, which
|
|
24
|
+
* is why it lives here and not in either of them.
|
|
25
|
+
*/
|
|
26
|
+
export declare function smoothScrollBehavior(): "auto" | "smooth";
|
|
14
27
|
//# sourceMappingURL=motion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"motion.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/motion.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD"}
|
|
1
|
+
{"version":3,"file":"motion.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/motion.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,GAAG,QAAQ,CAOxD"}
|
|
@@ -1,20 +1,27 @@
|
|
|
1
|
-
//#region packages/core/src/motion.ts
|
|
2
|
-
/**
|
|
3
|
-
* The list-reveal stagger vocabulary — one source for every overlay that
|
|
4
|
-
* reveals rows (DropdownMenu, Menubar, Select) and for the Motion
|
|
5
|
-
* documentation page. Each revealed row is delayed one step after the
|
|
6
|
-
* previous, capped so a long list does not tail off indefinitely.
|
|
7
|
-
*
|
|
8
|
-
* It lives here rather than in each template because it was written into
|
|
9
|
-
* three of them independently once, which is how the three drifted.
|
|
10
|
-
*/
|
|
11
|
-
var LIST_STAGGER_STEP_MS = 24;
|
|
12
|
-
var LIST_STAGGER_CAP = 5;
|
|
13
1
|
/** The inline `animation-delay` for the i-th revealed row. */
|
|
14
2
|
function listStaggerDelay(i) {
|
|
15
3
|
return `${String(Math.min(i, 5) * 24)}ms`;
|
|
16
4
|
}
|
|
5
|
+
/**
|
|
6
|
+
* The behaviour a scripted scroll should ask for, given the reader's motion
|
|
7
|
+
* preference: `"smooth"` normally, `"auto"` under
|
|
8
|
+
* `prefers-reduced-motion`.
|
|
9
|
+
*
|
|
10
|
+
* It has to exist because the stylesheet's kill-switch cannot reach this
|
|
11
|
+
* path: an explicit `"smooth"` in a `scrollTo` dictionary *overrides* the
|
|
12
|
+
* CSS `scroll-behavior` property — that is what the spec defines a
|
|
13
|
+
* non-`"auto"` behaviour value to mean. Every component that scrolls by
|
|
14
|
+
* script (ScrollReel, Carousel) asks this instead of deciding alone, which
|
|
15
|
+
* is why it lives here and not in either of them.
|
|
16
|
+
*/
|
|
17
|
+
function smoothScrollBehavior() {
|
|
18
|
+
try {
|
|
19
|
+
return window.matchMedia("(prefers-reduced-motion: reduce)").matches ? "auto" : "smooth";
|
|
20
|
+
} catch {
|
|
21
|
+
return "smooth";
|
|
22
|
+
}
|
|
23
|
+
}
|
|
17
24
|
//#endregion
|
|
18
|
-
export {
|
|
25
|
+
export { listStaggerDelay, smoothScrollBehavior };
|
|
19
26
|
|
|
20
27
|
//# sourceMappingURL=motion.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"motion.js","names":[],"sources":["../../../../packages/core/src/motion.ts"],"sourcesContent":["/**\n * The list-reveal stagger vocabulary — one source for every overlay that\n * reveals rows (DropdownMenu, Menubar, Select) and for the Motion\n * documentation page. Each revealed row is delayed one step after the\n * previous, capped so a long list does not tail off indefinitely.\n *\n * It lives here rather than in each template because it was written into\n * three of them independently once, which is how the three drifted.\n */\nexport const LIST_STAGGER_STEP_MS = 24;\nexport const LIST_STAGGER_CAP = 5;\n\n/** The inline `animation-delay` for the i-th revealed row. */\nexport function listStaggerDelay(i: number): string {\n return `${String(Math.min(i, LIST_STAGGER_CAP) * LIST_STAGGER_STEP_MS)}ms`;\n}\n"
|
|
1
|
+
{"version":3,"file":"motion.js","names":[],"sources":["../../../../packages/core/src/motion.ts"],"sourcesContent":["/**\n * The list-reveal stagger vocabulary — one source for every overlay that\n * reveals rows (DropdownMenu, Menubar, Select) and for the Motion\n * documentation page. Each revealed row is delayed one step after the\n * previous, capped so a long list does not tail off indefinitely.\n *\n * It lives here rather than in each template because it was written into\n * three of them independently once, which is how the three drifted.\n */\nexport const LIST_STAGGER_STEP_MS = 24;\nexport const LIST_STAGGER_CAP = 5;\n\n/** The inline `animation-delay` for the i-th revealed row. */\nexport function listStaggerDelay(i: number): string {\n return `${String(Math.min(i, LIST_STAGGER_CAP) * LIST_STAGGER_STEP_MS)}ms`;\n}\n\n/**\n * The behaviour a scripted scroll should ask for, given the reader's motion\n * preference: `\"smooth\"` normally, `\"auto\"` under\n * `prefers-reduced-motion`.\n *\n * It has to exist because the stylesheet's kill-switch cannot reach this\n * path: an explicit `\"smooth\"` in a `scrollTo` dictionary *overrides* the\n * CSS `scroll-behavior` property — that is what the spec defines a\n * non-`\"auto\"` behaviour value to mean. Every component that scrolls by\n * script (ScrollReel, Carousel) asks this instead of deciding alone, which\n * is why it lives here and not in either of them.\n */\nexport function smoothScrollBehavior(): \"auto\" | \"smooth\" {\n try {\n return window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches ? \"auto\" : \"smooth\";\n } catch {\n // matchMedia may be unavailable; smooth is the behaviour being replaced.\n return \"smooth\";\n }\n}\n"],"mappings":";AAaA,SAAgB,iBAAiB,GAAmB;CAClD,OAAO,GAAG,OAAO,KAAK,IAAI,GAAA,CAAmB,IAAA,EAAwB,EAAE;AACzE;;;;;;;;;;;;;AAcA,SAAgB,uBAA0C;CACxD,IAAI;EACF,OAAO,OAAO,WAAW,kCAAkC,CAAC,CAAC,UAAU,SAAS;CAClF,QAAQ;EAEN,OAAO;CACT;AACF"}
|
|
@@ -29,6 +29,15 @@ export declare function _resetThemeState(): void;
|
|
|
29
29
|
/**
|
|
30
30
|
* Read and control the active Loom theme.
|
|
31
31
|
*
|
|
32
|
+
* Call it from a component `setup()` or inside an `effectScope()` — that
|
|
33
|
+
* scope is what releases the shared state when its last real consumer
|
|
34
|
+
* unmounts. A call from outside any effect scope still works, but it can
|
|
35
|
+
* never be released, so it is not counted and development warns once; the
|
|
36
|
+
* shared state simply lives as long as whatever creates it next counts for.
|
|
37
|
+
* The DOM-apply and persistence side effects are created once per app in a
|
|
38
|
+
* detached scope of their own — never once per consumer — and storage is
|
|
39
|
+
* only written when the stored preference actually changes.
|
|
40
|
+
*
|
|
32
41
|
* @example
|
|
33
42
|
* ```vue
|
|
34
43
|
* <script setup>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../../packages/core/src/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,KAAK,GAAG,EAAsE,MAAM,KAAK,CAAC;AAEnG,qEAAqE;AACrE,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE1D,8DAA8D;AAC9D,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC;AA8C7C;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CASvC;AAkID;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,QAAQ,IAAI;IAC1B,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;IACrC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,CAAC;IACzD,QAAQ,CAAC,WAAW,EAAE,MAAM,IAAI,CAAC;CAClC,CAwCA;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW,gQAInB,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { computed, onScopeDispose, ref, watch } from "vue";
|
|
1
|
+
import { EffectScope, computed, getCurrentScope, onScopeDispose, ref, watch } from "vue";
|
|
2
2
|
//#region packages/core/src/theme.ts
|
|
3
3
|
/**
|
|
4
4
|
* Theme switching for Loom.
|
|
@@ -30,9 +30,16 @@ var DEFAULT_PREFERENCE = "system";
|
|
|
30
30
|
* `matchMedia` listener.
|
|
31
31
|
*/
|
|
32
32
|
var sharedState = null;
|
|
33
|
+
/** Fired once, at the first `useTheme()` call made outside any active effect scope. */
|
|
34
|
+
var warnedOutsideScope = false;
|
|
33
35
|
function getSharedState() {
|
|
36
|
+
const scoped = getCurrentScope() !== void 0;
|
|
37
|
+
if (!scoped && !warnedOutsideScope) {
|
|
38
|
+
warnedOutsideScope = true;
|
|
39
|
+
console.warn("[loom] useTheme() called outside an active effect scope; the shared theme state can never be released. Call it from setup() or inside an effectScope().");
|
|
40
|
+
}
|
|
34
41
|
if (sharedState) {
|
|
35
|
-
sharedState.scopeCount++;
|
|
42
|
+
if (scoped) sharedState.scopeCount++;
|
|
36
43
|
return sharedState;
|
|
37
44
|
}
|
|
38
45
|
let stored = DEFAULT_PREFERENCE;
|
|
@@ -52,19 +59,33 @@ function getSharedState() {
|
|
|
52
59
|
};
|
|
53
60
|
mediaQuery.addEventListener("change", listener);
|
|
54
61
|
} catch {}
|
|
55
|
-
|
|
62
|
+
const owner = new EffectScope(true);
|
|
63
|
+
const state = {
|
|
56
64
|
preference,
|
|
57
65
|
systemIsDark,
|
|
58
66
|
mediaQuery,
|
|
59
67
|
listener,
|
|
60
|
-
scopeCount: 1
|
|
68
|
+
scopeCount: scoped ? 1 : 0,
|
|
69
|
+
owner,
|
|
70
|
+
lastPersisted: stored
|
|
61
71
|
};
|
|
62
|
-
|
|
72
|
+
sharedState = state;
|
|
73
|
+
owner.run(() => {
|
|
74
|
+
watch([preference, systemIsDark], () => {
|
|
75
|
+
applyToDOM(resolveTheme(preference.value, systemIsDark.value));
|
|
76
|
+
if (preference.value !== state.lastPersisted) {
|
|
77
|
+
state.lastPersisted = preference.value;
|
|
78
|
+
persist(state.lastPersisted);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
return state;
|
|
63
83
|
}
|
|
64
84
|
function releaseSharedState() {
|
|
65
85
|
if (!sharedState) return;
|
|
66
86
|
sharedState.scopeCount--;
|
|
67
87
|
if (sharedState.scopeCount > 0) return;
|
|
88
|
+
sharedState.owner.stop();
|
|
68
89
|
if (sharedState.mediaQuery && sharedState.listener) sharedState.mediaQuery.removeEventListener("change", sharedState.listener);
|
|
69
90
|
sharedState = null;
|
|
70
91
|
}
|
|
@@ -91,6 +112,15 @@ function persist(preference) {
|
|
|
91
112
|
/**
|
|
92
113
|
* Read and control the active Loom theme.
|
|
93
114
|
*
|
|
115
|
+
* Call it from a component `setup()` or inside an `effectScope()` — that
|
|
116
|
+
* scope is what releases the shared state when its last real consumer
|
|
117
|
+
* unmounts. A call from outside any effect scope still works, but it can
|
|
118
|
+
* never be released, so it is not counted and development warns once; the
|
|
119
|
+
* shared state simply lives as long as whatever creates it next counts for.
|
|
120
|
+
* The DOM-apply and persistence side effects are created once per app in a
|
|
121
|
+
* detached scope of their own — never once per consumer — and storage is
|
|
122
|
+
* only written when the stored preference actually changes.
|
|
123
|
+
*
|
|
94
124
|
* @example
|
|
95
125
|
* ```vue
|
|
96
126
|
* <script setup>
|
|
@@ -107,7 +137,7 @@ function persist(preference) {
|
|
|
107
137
|
*/
|
|
108
138
|
function useTheme() {
|
|
109
139
|
const state = getSharedState();
|
|
110
|
-
onScopeDispose(releaseSharedState);
|
|
140
|
+
if (getCurrentScope() !== void 0) onScopeDispose(releaseSharedState);
|
|
111
141
|
/** The user's preference — `"system"` defers to the OS. */
|
|
112
142
|
const theme = computed({
|
|
113
143
|
get: () => state.preference.value,
|
|
@@ -117,10 +147,6 @@ function useTheme() {
|
|
|
117
147
|
});
|
|
118
148
|
/** The actual active theme, with `"system"` resolved to `"light"` or `"dark"`. */
|
|
119
149
|
const resolvedTheme = computed(() => resolveTheme(state.preference.value, state.systemIsDark.value));
|
|
120
|
-
watch([() => state.preference.value, () => state.systemIsDark.value], () => {
|
|
121
|
-
applyToDOM(resolvedTheme.value);
|
|
122
|
-
persist(state.preference.value);
|
|
123
|
-
});
|
|
124
150
|
/** Set the theme preference explicitly. */
|
|
125
151
|
function setTheme(preference) {
|
|
126
152
|
state.preference.value = preference;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.js","names":[],"sources":["../../../../packages/core/src/theme.ts"],"sourcesContent":["/**\n * Theme switching for Loom.\n *\n * The single source of truth is the `data-theme` attribute on `<html>`.\n * This composable reads and writes it, persists the preference to\n * `localStorage`, and resolves `\"system\"` mode from the OS preference.\n *\n * SSR-safe: every DOM access is guarded. On the server, `theme` returns\n * the persisted or default preference, `resolvedTheme` resolves `\"system\"`\n * to `\"light\"` (the only safe default without a DOM), and the setter and\n * toggler are no-ops.\n *\n * Flash prevention: `themeScript` is a string of inline JavaScript that\n * reads `localStorage` and sets `data-theme` before the first paint.\n * Consumers rendering SSR inject it into `<head>`:\n *\n * <script>${themeScript}</script>\n */\n\nimport { type Ref, computed, onScopeDispose, ref, watch } from \"vue\";\n\n/** The preference a user expresses — `\"system\"` defers to the OS. */\nexport type ThemePreference = \"light\" | \"dark\" | \"system\";\n\n/** The actual theme applied — `\"system\"` is resolved away. */\nexport type ResolvedTheme = \"light\" | \"dark\";\n\nconst STORAGE_KEY = \"loom:theme\";\nconst DATA_ATTR = \"data-theme\";\nconst MEDIA_QUERY = \"(prefers-color-scheme: dark)\";\n\n/** Default preference when nothing is stored and no OS signal exists. */\nconst DEFAULT_PREFERENCE: ThemePreference = \"system\";\n\n// --- Shared state (one per Vue app, not one per composable call) ---------\n\ninterface ThemeState {\n preference: Ref<ThemePreference>;\n systemIsDark: Ref<boolean>;\n mediaQuery: MediaQueryList | null;\n listener: ((e: MediaQueryListEvent) => void) | null;\n scopeCount: number;\n}\n\n/**\n * Reactive shared state, lazily initialised on the first `useTheme()` call\n * and torn down with the effect scope that owns it. Multiple components\n * calling `useTheme()` in the same app share the same refs and the same\n * `matchMedia` listener.\n */\nlet sharedState: ThemeState | null = null;\n\n/**\n * Reset the shared state. Intended for test isolation only — a real app\n * never needs this because the state lives for the app's lifetime.\n */\nexport function _resetThemeState(): void {\n if (sharedState?.mediaQuery && sharedState.listener) {\n sharedState.mediaQuery.removeEventListener(\"change\", sharedState.listener);\n }\n sharedState = null;\n}\n\nfunction getSharedState(): ThemeState {\n if (sharedState) {\n sharedState.scopeCount++;\n return sharedState;\n }\n\n // Read the stored preference, defaulting to \"system\".\n let stored: ThemePreference = DEFAULT_PREFERENCE;\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (raw === \"light\" || raw === \"dark\" || raw === \"system\") {\n stored = raw;\n }\n } catch {\n // localStorage may be unavailable (SSR, private browsing).\n }\n\n // Apply the initial theme to the DOM so the very first render is correct.\n const initial = resolveTheme(stored, getSystemIsDark());\n applyToDOM(initial);\n\n const preference = ref<ThemePreference>(stored);\n const systemIsDark = ref<boolean>(getSystemIsDark());\n\n // Listen for OS dark-mode changes.\n let mediaQuery: MediaQueryList | null = null;\n let listener: ((e: MediaQueryListEvent) => void) | null = null;\n\n try {\n mediaQuery = window.matchMedia(MEDIA_QUERY);\n listener = (e: MediaQueryListEvent) => {\n systemIsDark.value = e.matches;\n };\n mediaQuery.addEventListener(\"change\", listener);\n } catch {\n // matchMedia may be unavailable.\n }\n\n sharedState = {\n preference,\n systemIsDark,\n mediaQuery,\n listener,\n scopeCount: 1,\n };\n\n return sharedState;\n}\n\nfunction releaseSharedState(): void {\n if (!sharedState) return;\n sharedState.scopeCount--;\n if (sharedState.scopeCount > 0) return;\n\n // Last consumer gone — tear down the listener.\n if (sharedState.mediaQuery && sharedState.listener) {\n sharedState.mediaQuery.removeEventListener(\"change\", sharedState.listener);\n }\n sharedState = null;\n}\n\n// --- DOM helpers --------------------------------------------------------\n\nfunction getSystemIsDark(): boolean {\n try {\n return window.matchMedia(MEDIA_QUERY).matches;\n } catch {\n return false;\n }\n}\n\nfunction resolveTheme(pref: ThemePreference, systemDark: boolean): ResolvedTheme {\n return pref === \"system\" ? (systemDark ? \"dark\" : \"light\") : pref;\n}\n\nfunction applyToDOM(theme: ResolvedTheme): void {\n try {\n document.documentElement.setAttribute(DATA_ATTR, theme);\n } catch {\n // document may be unavailable (SSR).\n }\n}\n\nfunction persist(preference: ThemePreference): void {\n try {\n localStorage.setItem(STORAGE_KEY, preference);\n } catch {\n // localStorage may be unavailable.\n }\n}\n\n// --- Public API ---------------------------------------------------------\n\n/**\n * Read and control the active Loom theme.\n *\n * @example\n * ```vue\n * <script setup>\n * import { useTheme } from \"@ecoma-io/loom/theme\"\n * const { theme, resolvedTheme, setTheme, toggleTheme } = useTheme()\n * </script>\n *\n * <template>\n * <button @click=\"toggleTheme\">\n * {{ resolvedTheme === \"dark\" ? \"☀️\" : \"🌙\" }}\n * </button>\n * </template>\n * ```\n */\nexport function useTheme(): {\n readonly theme: Ref<ThemePreference>;\n readonly resolvedTheme: Readonly<Ref<ResolvedTheme>>;\n readonly setTheme: (preference: ThemePreference) => void;\n readonly toggleTheme: () => void;\n} {\n const state = getSharedState();\n\n // Clean up the shared listener when the consuming scope disposes.\n onScopeDispose(releaseSharedState);\n\n /** The user's preference — `\"system\"` defers to the OS. */\n const theme = computed<ThemePreference>({\n get: () => state.preference.value,\n set: (value: ThemePreference) => {\n state.preference.value = value;\n },\n });\n\n /** The actual active theme, with `\"system\"` resolved to `\"light\"` or `\"dark\"`. */\n const resolvedTheme = computed<ResolvedTheme>(() =>\n resolveTheme(state.preference.value, state.systemIsDark.value),\n );\n\n // Whenever the preference or the OS signal changes, apply the resolved\n // theme to the DOM and persist the preference.\n watch([() => state.preference.value, () => state.systemIsDark.value], () => {\n applyToDOM(resolvedTheme.value);\n persist(state.preference.value);\n });\n\n /** Set the theme preference explicitly. */\n function setTheme(preference: ThemePreference): void {\n state.preference.value = preference;\n }\n\n /** Toggle between light and dark. System preference stays system. */\n function toggleTheme(): void {\n if (state.preference.value === \"system\") {\n // Toggle the resolved theme and lock to it, so the user can override\n // the OS preference with one click.\n state.preference.value = resolvedTheme.value === \"dark\" ? \"light\" : \"dark\";\n } else {\n state.preference.value = state.preference.value === \"dark\" ? \"light\" : \"dark\";\n }\n }\n\n return { theme, resolvedTheme, setTheme, toggleTheme } as const;\n}\n\n/**\n * Inline script to prevent flash-of-wrong-theme on SSR pages.\n *\n * Paste it into `<head>` before any stylesheet links:\n *\n * ```html\n * <script><%= themeScript %></script>\n * ```\n *\n * It reads `localStorage` and sets `data-theme` on `<html>` synchronously,\n * before the browser paints, so the first frame is already in the right\n * theme. When no preference is stored, it follows the OS preference.\n *\n * The script is deliberately tiny and has no dependencies.\n */\nexport const themeScript = `(() => {\n const t = localStorage.getItem(\"${STORAGE_KEY}\");\n const d = window.matchMedia(\"${MEDIA_QUERY}\").matches;\n document.documentElement.setAttribute(\"${DATA_ATTR}\", (t === \"dark\" || (!t && d)) ? \"dark\" : \"light\");\n})()`;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA2BA,IAAM,cAAc;AACpB,IAAM,YAAY;AAClB,IAAM,cAAc;;AAGpB,IAAM,qBAAsC;;;;;;;AAkB5C,IAAI,cAAiC;AAarC,SAAS,iBAA6B;CACpC,IAAI,aAAa;EACf,YAAY;EACZ,OAAO;CACT;CAGA,IAAI,SAA0B;CAC9B,IAAI;EACF,MAAM,MAAM,aAAa,QAAQ,WAAW;EAC5C,IAAI,QAAQ,WAAW,QAAQ,UAAU,QAAQ,UAC/C,SAAS;CAEb,QAAQ,CAER;CAIA,WADgB,aAAa,QAAQ,gBAAgB,CAC1C,CAAO;CAElB,MAAM,aAAa,IAAqB,MAAM;CAC9C,MAAM,eAAe,IAAa,gBAAgB,CAAC;CAGnD,IAAI,aAAoC;CACxC,IAAI,WAAsD;CAE1D,IAAI;EACF,aAAa,OAAO,WAAW,WAAW;EAC1C,YAAY,MAA2B;GACrC,aAAa,QAAQ,EAAE;EACzB;EACA,WAAW,iBAAiB,UAAU,QAAQ;CAChD,QAAQ,CAER;CAEA,cAAc;EACZ;EACA;EACA;EACA;EACA,YAAY;CACd;CAEA,OAAO;AACT;AAEA,SAAS,qBAA2B;CAClC,IAAI,CAAC,aAAa;CAClB,YAAY;CACZ,IAAI,YAAY,aAAa,GAAG;CAGhC,IAAI,YAAY,cAAc,YAAY,UACxC,YAAY,WAAW,oBAAoB,UAAU,YAAY,QAAQ;CAE3E,cAAc;AAChB;AAIA,SAAS,kBAA2B;CAClC,IAAI;EACF,OAAO,OAAO,WAAW,WAAW,CAAC,CAAC;CACxC,QAAQ;EACN,OAAO;CACT;AACF;AAEA,SAAS,aAAa,MAAuB,YAAoC;CAC/E,OAAO,SAAS,WAAY,aAAa,SAAS,UAAW;AAC/D;AAEA,SAAS,WAAW,OAA4B;CAC9C,IAAI;EACF,SAAS,gBAAgB,aAAa,WAAW,KAAK;CACxD,QAAQ,CAER;AACF;AAEA,SAAS,QAAQ,YAAmC;CAClD,IAAI;EACF,aAAa,QAAQ,aAAa,UAAU;CAC9C,QAAQ,CAER;AACF;;;;;;;;;;;;;;;;;;AAqBA,SAAgB,WAKd;CACA,MAAM,QAAQ,eAAe;CAG7B,eAAe,kBAAkB;;CAGjC,MAAM,QAAQ,SAA0B;EACtC,WAAW,MAAM,WAAW;EAC5B,MAAM,UAA2B;GAC/B,MAAM,WAAW,QAAQ;EAC3B;CACF,CAAC;;CAGD,MAAM,gBAAgB,eACpB,aAAa,MAAM,WAAW,OAAO,MAAM,aAAa,KAAK,CAC/D;CAIA,MAAM,OAAO,MAAM,WAAW,aAAa,MAAM,aAAa,KAAK,SAAS;EAC1E,WAAW,cAAc,KAAK;EAC9B,QAAQ,MAAM,WAAW,KAAK;CAChC,CAAC;;CAGD,SAAS,SAAS,YAAmC;EACnD,MAAM,WAAW,QAAQ;CAC3B;;CAGA,SAAS,cAAoB;EAC3B,IAAI,MAAM,WAAW,UAAU,UAG7B,MAAM,WAAW,QAAQ,cAAc,UAAU,SAAS,UAAU;OAEpE,MAAM,WAAW,QAAQ,MAAM,WAAW,UAAU,SAAS,UAAU;CAE3E;CAEA,OAAO;EAAE;EAAO;EAAe;EAAU;CAAY;AACvD;;;;;;;;;;;;;;;;AAiBA,IAAa,cAAc;oCACS,YAAY;iCACf,YAAY;2CACF,UAAU"}
|
|
1
|
+
{"version":3,"file":"theme.js","names":[],"sources":["../../../../packages/core/src/theme.ts"],"sourcesContent":["/**\n * Theme switching for Loom.\n *\n * The single source of truth is the `data-theme` attribute on `<html>`.\n * This composable reads and writes it, persists the preference to\n * `localStorage`, and resolves `\"system\"` mode from the OS preference.\n *\n * SSR-safe: every DOM access is guarded. On the server, `theme` returns\n * the persisted or default preference, `resolvedTheme` resolves `\"system\"`\n * to `\"light\"` (the only safe default without a DOM), and the setter and\n * toggler are no-ops.\n *\n * Flash prevention: `themeScript` is a string of inline JavaScript that\n * reads `localStorage` and sets `data-theme` before the first paint.\n * Consumers rendering SSR inject it into `<head>`:\n *\n * <script>${themeScript}</script>\n */\n\nimport { type Ref, EffectScope, computed, getCurrentScope, onScopeDispose, ref, watch } from \"vue\";\n\n/** The preference a user expresses — `\"system\"` defers to the OS. */\nexport type ThemePreference = \"light\" | \"dark\" | \"system\";\n\n/** The actual theme applied — `\"system\"` is resolved away. */\nexport type ResolvedTheme = \"light\" | \"dark\";\n\nconst STORAGE_KEY = \"loom:theme\";\nconst DATA_ATTR = \"data-theme\";\nconst MEDIA_QUERY = \"(prefers-color-scheme: dark)\";\n\n/** Default preference when nothing is stored and no OS signal exists. */\nconst DEFAULT_PREFERENCE: ThemePreference = \"system\";\n\n// --- Shared state (one per Vue app, not one per composable call) ---------\n\ninterface ThemeState {\n preference: Ref<ThemePreference>;\n systemIsDark: Ref<boolean>;\n mediaQuery: MediaQueryList | null;\n listener: ((e: MediaQueryListEvent) => void) | null;\n /** Consumers that can be released — see `useTheme` for who does not count. */\n scopeCount: number;\n /**\n * The detached scope that owns the apply/persist watcher below. The side\n * effects are the shared state's, not the first consumer's: owned by a\n * consumer's scope they would die the day that component unmounted while\n * later ones stayed mounted, leaving an app whose theme button had gone\n * silent. Detached so creation inside a component setup does not link it\n * into that component's own scope.\n */\n owner: EffectScope;\n /**\n * The preference last written to `localStorage`. `\"system\"` resolves away,\n * so OS dark-mode flips fire the watcher with a preference that has not\n * changed — without this, every flip rewrites storage with the same value.\n */\n lastPersisted: ThemePreference;\n}\n\n/**\n * Reactive shared state, lazily initialised on the first `useTheme()` call\n * and torn down with the effect scope that owns it. Multiple components\n * calling `useTheme()` in the same app share the same refs and the same\n * `matchMedia` listener.\n */\nlet sharedState: ThemeState | null = null;\n\n/** Fired once, at the first `useTheme()` call made outside any active effect scope. */\nlet warnedOutsideScope = false;\n\n/**\n * Reset the shared state. Intended for test isolation only — a real app\n * never needs this because the state lives for the app's lifetime.\n */\nexport function _resetThemeState(): void {\n if (sharedState) {\n sharedState.owner.stop();\n if (sharedState.mediaQuery && sharedState.listener) {\n sharedState.mediaQuery.removeEventListener(\"change\", sharedState.listener);\n }\n }\n sharedState = null;\n warnedOutsideScope = false;\n}\n\nfunction getSharedState(): ThemeState {\n // A consumer is released by the effect scope it was called from, so a call\n // from outside any scope is one that could never be released — counting it\n // would pin the matchMedia listener open forever. It still gets the state,\n // but it does not count toward teardown, and development is told once so\n // the eventual leak is attributed to a call site instead of discovered as\n // an immortal listener.\n const scoped = getCurrentScope() !== undefined;\n if (!scoped && !warnedOutsideScope) {\n warnedOutsideScope = true;\n console.warn(\n \"[loom] useTheme() called outside an active effect scope; the shared theme state can never be released. Call it from setup() or inside an effectScope().\",\n );\n }\n\n if (sharedState) {\n if (scoped) sharedState.scopeCount++;\n return sharedState;\n }\n\n // Read the stored preference, defaulting to \"system\".\n let stored: ThemePreference = DEFAULT_PREFERENCE;\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n if (raw === \"light\" || raw === \"dark\" || raw === \"system\") {\n stored = raw;\n }\n } catch {\n // localStorage may be unavailable (SSR, private browsing).\n }\n\n // Apply the initial theme to the DOM so the very first render is correct.\n const initial = resolveTheme(stored, getSystemIsDark());\n applyToDOM(initial);\n\n const preference = ref<ThemePreference>(stored);\n const systemIsDark = ref<boolean>(getSystemIsDark());\n\n // Listen for OS dark-mode changes.\n let mediaQuery: MediaQueryList | null = null;\n let listener: ((e: MediaQueryListEvent) => void) | null = null;\n\n try {\n mediaQuery = window.matchMedia(MEDIA_QUERY);\n listener = (e: MediaQueryListEvent) => {\n systemIsDark.value = e.matches;\n };\n mediaQuery.addEventListener(\"change\", listener);\n } catch {\n // matchMedia may be unavailable.\n }\n\n const owner = new EffectScope(true);\n const state: ThemeState = {\n preference,\n systemIsDark,\n mediaQuery,\n listener,\n scopeCount: scoped ? 1 : 0,\n owner,\n lastPersisted: stored,\n };\n sharedState = state;\n\n // The apply/persist watcher is created exactly once, here in the detached\n // scope that owns the shared state — never per consumer. N components\n // calling `useTheme()` must not mean N writes to `data-theme` and\n // `localStorage` on every change.\n owner.run(() => {\n watch([preference, systemIsDark], () => {\n // Applied even when the preference itself has not moved: an OS flip\n // under `\"system\"` resolves differently without any user action.\n applyToDOM(resolveTheme(preference.value, systemIsDark.value));\n if (preference.value !== state.lastPersisted) {\n state.lastPersisted = preference.value;\n persist(state.lastPersisted);\n }\n });\n });\n\n return state;\n}\n\nfunction releaseSharedState(): void {\n if (!sharedState) return;\n sharedState.scopeCount--;\n if (sharedState.scopeCount > 0) return;\n\n // Last counted consumer gone — stop the side effects, then the listener.\n sharedState.owner.stop();\n if (sharedState.mediaQuery && sharedState.listener) {\n sharedState.mediaQuery.removeEventListener(\"change\", sharedState.listener);\n }\n sharedState = null;\n}\n\n// --- DOM helpers --------------------------------------------------------\n\nfunction getSystemIsDark(): boolean {\n try {\n return window.matchMedia(MEDIA_QUERY).matches;\n } catch {\n return false;\n }\n}\n\nfunction resolveTheme(pref: ThemePreference, systemDark: boolean): ResolvedTheme {\n return pref === \"system\" ? (systemDark ? \"dark\" : \"light\") : pref;\n}\n\nfunction applyToDOM(theme: ResolvedTheme): void {\n try {\n document.documentElement.setAttribute(DATA_ATTR, theme);\n } catch {\n // document may be unavailable (SSR).\n }\n}\n\nfunction persist(preference: ThemePreference): void {\n try {\n localStorage.setItem(STORAGE_KEY, preference);\n } catch {\n // localStorage may be unavailable.\n }\n}\n\n// --- Public API ---------------------------------------------------------\n\n/**\n * Read and control the active Loom theme.\n *\n * Call it from a component `setup()` or inside an `effectScope()` — that\n * scope is what releases the shared state when its last real consumer\n * unmounts. A call from outside any effect scope still works, but it can\n * never be released, so it is not counted and development warns once; the\n * shared state simply lives as long as whatever creates it next counts for.\n * The DOM-apply and persistence side effects are created once per app in a\n * detached scope of their own — never once per consumer — and storage is\n * only written when the stored preference actually changes.\n *\n * @example\n * ```vue\n * <script setup>\n * import { useTheme } from \"@ecoma-io/loom/theme\"\n * const { theme, resolvedTheme, setTheme, toggleTheme } = useTheme()\n * </script>\n *\n * <template>\n * <button @click=\"toggleTheme\">\n * {{ resolvedTheme === \"dark\" ? \"☀️\" : \"🌙\" }}\n * </button>\n * </template>\n * ```\n */\nexport function useTheme(): {\n readonly theme: Ref<ThemePreference>;\n readonly resolvedTheme: Readonly<Ref<ResolvedTheme>>;\n readonly setTheme: (preference: ThemePreference) => void;\n readonly toggleTheme: () => void;\n} {\n const state = getSharedState();\n\n // Clean up the shared state when the consuming scope disposes. Only a call\n // from inside an active scope is registered — and only such a call was\n // counted by `getSharedState()` in the first place; outside one,\n // `onScopeDispose` would silently do nothing and the count would never\n // come back down.\n if (getCurrentScope() !== undefined) onScopeDispose(releaseSharedState);\n\n /** The user's preference — `\"system\"` defers to the OS. */\n const theme = computed<ThemePreference>({\n get: () => state.preference.value,\n set: (value: ThemePreference) => {\n state.preference.value = value;\n },\n });\n\n /** The actual active theme, with `\"system\"` resolved to `\"light\"` or `\"dark\"`. */\n const resolvedTheme = computed<ResolvedTheme>(() =>\n resolveTheme(state.preference.value, state.systemIsDark.value),\n );\n\n /** Set the theme preference explicitly. */\n function setTheme(preference: ThemePreference): void {\n state.preference.value = preference;\n }\n\n /** Toggle between light and dark. System preference stays system. */\n function toggleTheme(): void {\n if (state.preference.value === \"system\") {\n // Toggle the resolved theme and lock to it, so the user can override\n // the OS preference with one click.\n state.preference.value = resolvedTheme.value === \"dark\" ? \"light\" : \"dark\";\n } else {\n state.preference.value = state.preference.value === \"dark\" ? \"light\" : \"dark\";\n }\n }\n\n return { theme, resolvedTheme, setTheme, toggleTheme } as const;\n}\n\n/**\n * Inline script to prevent flash-of-wrong-theme on SSR pages.\n *\n * Paste it into `<head>` before any stylesheet links:\n *\n * ```html\n * <script><%= themeScript %></script>\n * ```\n *\n * It reads `localStorage` and sets `data-theme` on `<html>` synchronously,\n * before the browser paints, so the first frame is already in the right\n * theme. When no preference is stored, it follows the OS preference.\n *\n * The script is deliberately tiny and has no dependencies.\n */\nexport const themeScript = `(() => {\n const t = localStorage.getItem(\"${STORAGE_KEY}\");\n const d = window.matchMedia(\"${MEDIA_QUERY}\").matches;\n document.documentElement.setAttribute(\"${DATA_ATTR}\", (t === \"dark\" || (!t && d)) ? \"dark\" : \"light\");\n})()`;\n"],"mappings":"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"}
|
|
@@ -6,7 +6,11 @@ import { type Ref } from "vue";
|
|
|
6
6
|
* The platform already answers this for `<input>`, `<button>`, `<select>` and
|
|
7
7
|
* `<textarea>`: a disabled fieldset makes every such descendant *actually
|
|
8
8
|
* disabled*, so `:disabled` matches, the tab stop goes and the control refuses
|
|
9
|
-
* input. Nothing in Loom has to help
|
|
9
|
+
* input. Nothing in Loom has to help — native roots inherit a fieldset's
|
|
10
|
+
* disabling and composites call this composable instead, which is the house
|
|
11
|
+
* rule stated in CONTRIBUTING.md's accessibility section.
|
|
12
|
+
*
|
|
13
|
+
* That answer stops at the boundary of that short list,
|
|
10
14
|
* and Reka builds several controls out of elements that are not on it — a
|
|
11
15
|
* `<span role="slider">`, a `<div role="spinbutton">`. Those keep their
|
|
12
16
|
* `tabindex="0"` and their arrow-key handlers inside a disabled group: measured
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ancestor-disabled.d.ts","sourceRoot":"","sources":["../../../../packages/labels/src/ancestor-disabled.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkD,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/E
|
|
1
|
+
{"version":3,"file":"ancestor-disabled.d.ts","sourceRoot":"","sources":["../../../../packages/labels/src/ancestor-disabled.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkD,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAE/E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,OAAO,GAAG,IAAI,GAAG,SAAS,GACvC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAmCxB"}
|
|
@@ -7,7 +7,11 @@ import { onScopeDispose, readonly, ref, watchPostEffect } from "vue";
|
|
|
7
7
|
* The platform already answers this for `<input>`, `<button>`, `<select>` and
|
|
8
8
|
* `<textarea>`: a disabled fieldset makes every such descendant *actually
|
|
9
9
|
* disabled*, so `:disabled` matches, the tab stop goes and the control refuses
|
|
10
|
-
* input. Nothing in Loom has to help
|
|
10
|
+
* input. Nothing in Loom has to help — native roots inherit a fieldset's
|
|
11
|
+
* disabling and composites call this composable instead, which is the house
|
|
12
|
+
* rule stated in CONTRIBUTING.md's accessibility section.
|
|
13
|
+
*
|
|
14
|
+
* That answer stops at the boundary of that short list,
|
|
11
15
|
* and Reka builds several controls out of elements that are not on it — a
|
|
12
16
|
* `<span role="slider">`, a `<div role="spinbutton">`. Those keep their
|
|
13
17
|
* `tabindex="0"` and their arrow-key handlers inside a disabled group: measured
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ancestor-disabled.js","names":[],"sources":["../../../../packages/labels/src/ancestor-disabled.ts"],"sourcesContent":["import { onScopeDispose, readonly, ref, watchPostEffect, type Ref } from \"vue\";\n\n/**\n * Whether an enclosing `<fieldset disabled>` has made this control unavailable\n * — read off the element itself, not off anything a wrapper told us.\n *\n * The platform already answers this for `<input>`, `<button>`, `<select>` and\n * `<textarea>`: a disabled fieldset makes every such descendant *actually\n * disabled*, so `:disabled` matches, the tab stop goes and the control refuses\n * input. Nothing in Loom has to help.
|
|
1
|
+
{"version":3,"file":"ancestor-disabled.js","names":[],"sources":["../../../../packages/labels/src/ancestor-disabled.ts"],"sourcesContent":["import { onScopeDispose, readonly, ref, watchPostEffect, type Ref } from \"vue\";\n\n/**\n * Whether an enclosing `<fieldset disabled>` has made this control unavailable\n * — read off the element itself, not off anything a wrapper told us.\n *\n * The platform already answers this for `<input>`, `<button>`, `<select>` and\n * `<textarea>`: a disabled fieldset makes every such descendant *actually\n * disabled*, so `:disabled` matches, the tab stop goes and the control refuses\n * input. Nothing in Loom has to help — native roots inherit a fieldset's\n * disabling and composites call this composable instead, which is the house\n * rule stated in CONTRIBUTING.md's accessibility section.\n *\n * That answer stops at the boundary of that short list,\n * and Reka builds several controls out of elements that are not on it — a\n * `<span role=\"slider\">`, a `<div role=\"spinbutton\">`. Those keep their\n * `tabindex=\"0\"` and their arrow-key handlers inside a disabled group: measured\n * in jsdom, a Slider in a `<fieldset disabled>` still took Home/End and moved\n * its value, and a DatePicker segment still typed. A control that looks\n * unavailable and still answers the keyboard is worse than one that looks\n * available, so the appearance cannot be fixed on its own.\n *\n * **This is a read of the native attribute, not a second copy of it.**\n * `Fieldset.vue`'s docblock rules out publishing `disabled` through the Field\n * context, and the reason is precedence: a context is a claim a control may\n * beat with `:disabled=\"false\"`, while the native attribute disables it anyway,\n * leaving a control that renders enabled and silently refuses input. Nothing\n * here can drift that way, because there is nothing to beat — the answer is\n * recomputed from the same DOM the browser is reading, so a control cannot\n * disagree with the fieldset it is standing in. It also needs no Loom wrapper\n * at all: a raw `<fieldset disabled>` a consumer wrote works exactly as one of\n * ours does.\n *\n * The result is `false` on the server and until the effect first runs, which is\n * deliberate. `watchPostEffect` does not run during SSR, so the markup a server\n * emits matches the markup the client hydrates and the state settles in the\n * same tick as mount — a hydration-time correction rather than a mismatch.\n */\nexport function useAncestorDisabled(\n target: () => Element | null | undefined,\n): Readonly<Ref<boolean>> {\n const disabled = ref(false);\n\n // Kept rather than chained off the constructor: an observer holds a strong\n // reference to everything it watches, and `disconnect()` is the only thing\n // that releases them.\n let observer: MutationObserver | undefined;\n\n function sync(): void {\n const start = target();\n if (!start) {\n observer?.disconnect();\n disabled.value = false;\n return;\n }\n\n const fieldsets = enclosingFieldsets(start);\n observer ??= new MutationObserver(sync);\n // Re-observed wholesale rather than diffed. The set is an element's\n // ancestor fieldsets — one or two of them in any real form — and the\n // attribute filter means nothing else in the document wakes this up.\n observer.disconnect();\n for (const fieldset of fieldsets) {\n observer.observe(fieldset, { attributes: true, attributeFilter: [\"disabled\"] });\n }\n\n disabled.value = fieldsets.some((fieldset) => fieldset.disabled);\n }\n\n watchPostEffect(sync);\n onScopeDispose(() => {\n observer?.disconnect();\n });\n\n return readonly(disabled);\n}\n\n/**\n * The `<fieldset>` ancestors whose `disabled` would reach `start`, outermost\n * last, whether or not any of them currently carries the attribute — they are\n * what has to be watched for the attribute arriving.\n *\n * The walk climbs child-by-child rather than calling `closest(\"fieldset\")`\n * because of the exemption in the \"actually disabled\" rule: controls inside a\n * disabled fieldset's **first** `<legend>` stay available, which is what makes\n * a switch in the legend that re-enables its own group possible. Reaching a\n * fieldset through that legend is reaching a fieldset that does not disable\n * you, so it is skipped — and the walk continues past it, since a fieldset\n * further out may still disable the legend itself.\n */\nfunction enclosingFieldsets(start: Element): HTMLFieldSetElement[] {\n const found: HTMLFieldSetElement[] = [];\n let node: Element | null = start;\n\n while (node) {\n const parent: Element | null = node.parentElement;\n if (parent instanceof HTMLFieldSetElement && node !== parent.querySelector(\":scope > legend\")) {\n found.push(parent);\n }\n node = parent;\n }\n\n return found;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,SAAgB,oBACd,QACwB;CACxB,MAAM,WAAW,IAAI,KAAK;CAK1B,IAAI;CAEJ,SAAS,OAAa;EACpB,MAAM,QAAQ,OAAO;EACrB,IAAI,CAAC,OAAO;GACV,UAAU,WAAW;GACrB,SAAS,QAAQ;GACjB;EACF;EAEA,MAAM,YAAY,mBAAmB,KAAK;EAC1C,aAAa,IAAI,iBAAiB,IAAI;EAItC,SAAS,WAAW;EACpB,KAAK,MAAM,YAAY,WACrB,SAAS,QAAQ,UAAU;GAAE,YAAY;GAAM,iBAAiB,CAAC,UAAU;EAAE,CAAC;EAGhF,SAAS,QAAQ,UAAU,MAAM,aAAa,SAAS,QAAQ;CACjE;CAEA,gBAAgB,IAAI;CACpB,qBAAqB;EACnB,UAAU,WAAW;CACvB,CAAC;CAED,OAAO,SAAS,QAAQ;AAC1B;;;;;;;;;;;;;;AAeA,SAAS,mBAAmB,OAAuC;CACjE,MAAM,QAA+B,CAAC;CACtC,IAAI,OAAuB;CAE3B,OAAO,MAAM;EACX,MAAM,SAAyB,KAAK;EACpC,IAAI,kBAAkB,uBAAuB,SAAS,OAAO,cAAc,iBAAiB,GAC1F,MAAM,KAAK,MAAM;EAEnB,OAAO;CACT;CAEA,OAAO;AACT"}
|
|
@@ -49,6 +49,57 @@ export interface AlertDialogLabels {
|
|
|
49
49
|
*/
|
|
50
50
|
readonly cancel: string;
|
|
51
51
|
}
|
|
52
|
+
/**
|
|
53
|
+
* What Alert says on its own account: the name of its dismiss control. The
|
|
54
|
+
* tone's icon and message belong to the host's content; this is the one word
|
|
55
|
+
* the component itself renders, and an unnamed close button in a wall of
|
|
56
|
+
* alerts tells a screen-reader user nothing about which note they are
|
|
57
|
+
* removing.
|
|
58
|
+
*/
|
|
59
|
+
export interface AlertLabels {
|
|
60
|
+
/** The dismiss control's accessible name. */
|
|
61
|
+
readonly dismiss: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* What Carousel says on its own account: the region's name, the two controls'
|
|
65
|
+
* names, and the sentence that turns a position into a sentence. `slide` is
|
|
66
|
+
* a message in the labels package's sense — it receives the raw numbers and
|
|
67
|
+
* returns finished words, so pluralisation stays in the consumer's locale.
|
|
68
|
+
*/
|
|
69
|
+
export interface CarouselLabels {
|
|
70
|
+
/** The carousel region's accessible name. */
|
|
71
|
+
readonly region: string;
|
|
72
|
+
readonly previous: string;
|
|
73
|
+
readonly next: string;
|
|
74
|
+
/** Per-slide and live-region announcement, from 1-based position. */
|
|
75
|
+
readonly slide: LabelOf<{
|
|
76
|
+
position: number;
|
|
77
|
+
total: number;
|
|
78
|
+
}>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* What Table says on its own account: the scrollable region's fallback name
|
|
82
|
+
* (a caption prop overrides it) and the sort control's state in words —
|
|
83
|
+
* chevrons are shape-only semantics, so the words carry the state to a
|
|
84
|
+
* screen reader instead.
|
|
85
|
+
*/
|
|
86
|
+
/**
|
|
87
|
+
* What Timeline says on its own account: the ordered list's accessible name
|
|
88
|
+
* and the three status words announced beside each title — a dot's colour
|
|
89
|
+
* alone is not a state.
|
|
90
|
+
*/
|
|
91
|
+
export interface TimelineLabels {
|
|
92
|
+
readonly region: string;
|
|
93
|
+
readonly complete: string;
|
|
94
|
+
readonly current: string;
|
|
95
|
+
readonly upcoming: string;
|
|
96
|
+
}
|
|
97
|
+
export interface TableLabels {
|
|
98
|
+
readonly region: string;
|
|
99
|
+
readonly sortedAscending: string;
|
|
100
|
+
readonly sortedDescending: string;
|
|
101
|
+
readonly sort: string;
|
|
102
|
+
}
|
|
52
103
|
/**
|
|
53
104
|
* The two sentences the row says that are not a member's own name.
|
|
54
105
|
*
|
|
@@ -74,6 +125,17 @@ export interface AvatarGroupLabels {
|
|
|
74
125
|
name: string;
|
|
75
126
|
}>;
|
|
76
127
|
}
|
|
128
|
+
/**
|
|
129
|
+
* The one name this component publishes: its `<nav>` landmark's accessible
|
|
130
|
+
* name. Every visible word on the trail is the host's own item label, so this
|
|
131
|
+
* is the whole slot — but it is not optional, because a page commonly carries
|
|
132
|
+
* several navigation landmarks and a screen reader's landmark menu listing
|
|
133
|
+
* three entries all called "navigation" cannot tell them apart.
|
|
134
|
+
*/
|
|
135
|
+
export interface BreadcrumbLabels {
|
|
136
|
+
/** The `<nav>` landmark's own name. */
|
|
137
|
+
readonly label: string;
|
|
138
|
+
}
|
|
77
139
|
/**
|
|
78
140
|
* Everything this picker publishes to assistive technology, and none of it is
|
|
79
141
|
* optional: a saturation surface, two thumbs and a row of coloured squares
|
|
@@ -776,4 +838,15 @@ export interface WindowControlsLabels {
|
|
|
776
838
|
/** Close the window. */
|
|
777
839
|
readonly close: string;
|
|
778
840
|
}
|
|
841
|
+
/**
|
|
842
|
+
* The one name this component publishes: the scroll strip's accessible name,
|
|
843
|
+
* announced as a scrollable region. The items inside are the host's content
|
|
844
|
+
* and carry their own names, so this is the whole slot — but it is not
|
|
845
|
+
* optional, because a strip of images or cards with no region name is
|
|
846
|
+
* announced as an anonymous scrollable container.
|
|
847
|
+
*/
|
|
848
|
+
export interface ScrollReelLabels {
|
|
849
|
+
/** The reel region's accessible name. */
|
|
850
|
+
readonly region: string;
|
|
851
|
+
}
|
|
779
852
|
//# sourceMappingURL=component-shapes.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-shapes.d.ts","sourceRoot":"","sources":["../../../../packages/labels/src/component-shapes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component-shapes.d.ts","sourceRoot":"","sources":["../../../../packages/labels/src/component-shapes.ts"],"names":[],"mappings":"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"}
|