alus-ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +289 -0
- package/dist/components/display/aspect-ratio/AspectRatio.svelte +18 -0
- package/dist/components/display/aspect-ratio/AspectRatio.svelte.d.ts +9 -0
- package/dist/components/display/aspect-ratio/index.d.ts +1 -0
- package/dist/components/display/aspect-ratio/index.js +1 -0
- package/dist/components/display/avatar/Avatar.svelte +62 -0
- package/dist/components/display/avatar/Avatar.svelte.d.ts +11 -0
- package/dist/components/display/avatar/index.d.ts +1 -0
- package/dist/components/display/avatar/index.js +1 -0
- package/dist/components/display/card/Card.svelte +60 -0
- package/dist/components/display/card/Card.svelte.d.ts +18 -0
- package/dist/components/display/card/CardContent.svelte +12 -0
- package/dist/components/display/card/CardContent.svelte.d.ts +7 -0
- package/dist/components/display/card/CardDescription.svelte +21 -0
- package/dist/components/display/card/CardDescription.svelte.d.ts +7 -0
- package/dist/components/display/card/CardFooter.svelte +12 -0
- package/dist/components/display/card/CardFooter.svelte.d.ts +7 -0
- package/dist/components/display/card/CardHeader.svelte +12 -0
- package/dist/components/display/card/CardHeader.svelte.d.ts +7 -0
- package/dist/components/display/card/CardTitle.svelte +22 -0
- package/dist/components/display/card/CardTitle.svelte.d.ts +8 -0
- package/dist/components/display/card/index.d.ts +7 -0
- package/dist/components/display/card/index.js +6 -0
- package/dist/components/display/carousel/Carousel.svelte +130 -0
- package/dist/components/display/carousel/Carousel.svelte.d.ts +30 -0
- package/dist/components/display/carousel/CarouselIndicators.svelte +74 -0
- package/dist/components/display/carousel/CarouselIndicators.svelte.d.ts +11 -0
- package/dist/components/display/carousel/CarouselNext.svelte +24 -0
- package/dist/components/display/carousel/CarouselNext.svelte.d.ts +8 -0
- package/dist/components/display/carousel/CarouselPrev.svelte +28 -0
- package/dist/components/display/carousel/CarouselPrev.svelte.d.ts +8 -0
- package/dist/components/display/carousel/CarouselSlide.svelte +32 -0
- package/dist/components/display/carousel/CarouselSlide.svelte.d.ts +11 -0
- package/dist/components/display/carousel/CarouselSlides.svelte +16 -0
- package/dist/components/display/carousel/CarouselSlides.svelte.d.ts +8 -0
- package/dist/components/display/carousel/index.d.ts +7 -0
- package/dist/components/display/carousel/index.js +6 -0
- package/dist/components/display/code-block/CodeBlock.svelte +60 -0
- package/dist/components/display/code-block/CodeBlock.svelte.d.ts +21 -0
- package/dist/components/display/code-block/index.d.ts +1 -0
- package/dist/components/display/code-block/index.js +1 -0
- package/dist/components/display/compare/Compare.svelte +222 -0
- package/dist/components/display/compare/Compare.svelte.d.ts +26 -0
- package/dist/components/display/compare/index.d.ts +1 -0
- package/dist/components/display/compare/index.js +1 -0
- package/dist/components/display/data-list/DataList.svelte +19 -0
- package/dist/components/display/data-list/DataList.svelte.d.ts +9 -0
- package/dist/components/display/data-list/DataListDescription.svelte +12 -0
- package/dist/components/display/data-list/DataListDescription.svelte.d.ts +7 -0
- package/dist/components/display/data-list/DataListTerm.svelte +12 -0
- package/dist/components/display/data-list/DataListTerm.svelte.d.ts +7 -0
- package/dist/components/display/data-list/index.d.ts +3 -0
- package/dist/components/display/data-list/index.js +3 -0
- package/dist/components/display/divider/Divider.svelte +27 -0
- package/dist/components/display/divider/Divider.svelte.d.ts +8 -0
- package/dist/components/display/divider/index.d.ts +1 -0
- package/dist/components/display/divider/index.js +1 -0
- package/dist/components/display/frame/Frame.svelte +63 -0
- package/dist/components/display/frame/Frame.svelte.d.ts +18 -0
- package/dist/components/display/frame/index.d.ts +1 -0
- package/dist/components/display/frame/index.js +1 -0
- package/dist/components/display/image/Image.svelte +65 -0
- package/dist/components/display/image/Image.svelte.d.ts +17 -0
- package/dist/components/display/image/index.d.ts +1 -0
- package/dist/components/display/image/index.js +1 -0
- package/dist/components/display/kbd/Kbd.svelte +29 -0
- package/dist/components/display/kbd/Kbd.svelte.d.ts +10 -0
- package/dist/components/display/kbd/index.d.ts +1 -0
- package/dist/components/display/kbd/index.js +1 -0
- package/dist/components/display/list/List.svelte +27 -0
- package/dist/components/display/list/List.svelte.d.ts +10 -0
- package/dist/components/display/list/ListItem.svelte +12 -0
- package/dist/components/display/list/ListItem.svelte.d.ts +7 -0
- package/dist/components/display/list/index.d.ts +2 -0
- package/dist/components/display/list/index.js +2 -0
- package/dist/components/display/stat-card/StatCard.svelte +76 -0
- package/dist/components/display/stat-card/StatCard.svelte.d.ts +24 -0
- package/dist/components/display/stat-card/index.d.ts +1 -0
- package/dist/components/display/stat-card/index.js +1 -0
- package/dist/components/display/table/Table.svelte +29 -0
- package/dist/components/display/table/Table.svelte.d.ts +10 -0
- package/dist/components/display/table/TableBody.svelte +11 -0
- package/dist/components/display/table/TableBody.svelte.d.ts +7 -0
- package/dist/components/display/table/TableCaption.svelte +13 -0
- package/dist/components/display/table/TableCaption.svelte.d.ts +8 -0
- package/dist/components/display/table/TableCell.svelte +14 -0
- package/dist/components/display/table/TableCell.svelte.d.ts +10 -0
- package/dist/components/display/table/TableFoot.svelte +11 -0
- package/dist/components/display/table/TableFoot.svelte.d.ts +7 -0
- package/dist/components/display/table/TableHead.svelte +11 -0
- package/dist/components/display/table/TableHead.svelte.d.ts +7 -0
- package/dist/components/display/table/TableHeader.svelte +15 -0
- package/dist/components/display/table/TableHeader.svelte.d.ts +11 -0
- package/dist/components/display/table/TableRow.svelte +12 -0
- package/dist/components/display/table/TableRow.svelte.d.ts +8 -0
- package/dist/components/display/table/index.d.ts +8 -0
- package/dist/components/display/table/index.js +8 -0
- package/dist/components/display/timeline/Timeline.svelte +27 -0
- package/dist/components/display/timeline/Timeline.svelte.d.ts +10 -0
- package/dist/components/display/timeline/TimelineItem.svelte +27 -0
- package/dist/components/display/timeline/TimelineItem.svelte.d.ts +11 -0
- package/dist/components/display/timeline/index.d.ts +2 -0
- package/dist/components/display/timeline/index.js +2 -0
- package/dist/components/display/timestamp/Timestamp.svelte +75 -0
- package/dist/components/display/timestamp/Timestamp.svelte.d.ts +16 -0
- package/dist/components/display/timestamp/index.d.ts +1 -0
- package/dist/components/display/timestamp/index.js +1 -0
- package/dist/components/display/tree-view/TreeItem.svelte +76 -0
- package/dist/components/display/tree-view/TreeItem.svelte.d.ts +13 -0
- package/dist/components/display/tree-view/TreeView.svelte +182 -0
- package/dist/components/display/tree-view/TreeView.svelte.d.ts +31 -0
- package/dist/components/display/tree-view/index.d.ts +3 -0
- package/dist/components/display/tree-view/index.js +2 -0
- package/dist/components/feedback/alert/Alert.svelte +72 -0
- package/dist/components/feedback/alert/Alert.svelte.d.ts +20 -0
- package/dist/components/feedback/alert/index.d.ts +1 -0
- package/dist/components/feedback/alert/index.js +1 -0
- package/dist/components/feedback/badge/Badge.svelte +52 -0
- package/dist/components/feedback/badge/Badge.svelte.d.ts +15 -0
- package/dist/components/feedback/badge/index.d.ts +1 -0
- package/dist/components/feedback/badge/index.js +1 -0
- package/dist/components/feedback/banner/Banner.svelte +75 -0
- package/dist/components/feedback/banner/Banner.svelte.d.ts +22 -0
- package/dist/components/feedback/banner/index.d.ts +1 -0
- package/dist/components/feedback/banner/index.js +1 -0
- package/dist/components/feedback/callout/Callout.svelte +52 -0
- package/dist/components/feedback/callout/Callout.svelte.d.ts +18 -0
- package/dist/components/feedback/callout/index.d.ts +1 -0
- package/dist/components/feedback/callout/index.js +1 -0
- package/dist/components/feedback/inline-message/InlineMessage.svelte +42 -0
- package/dist/components/feedback/inline-message/InlineMessage.svelte.d.ts +14 -0
- package/dist/components/feedback/inline-message/index.d.ts +1 -0
- package/dist/components/feedback/inline-message/index.js +1 -0
- package/dist/components/feedback/live-region/LiveRegion.svelte +48 -0
- package/dist/components/feedback/live-region/LiveRegion.svelte.d.ts +15 -0
- package/dist/components/feedback/live-region/index.d.ts +1 -0
- package/dist/components/feedback/live-region/index.js +1 -0
- package/dist/components/feedback/notification-bell/NotificationBell.svelte +57 -0
- package/dist/components/feedback/notification-bell/NotificationBell.svelte.d.ts +19 -0
- package/dist/components/feedback/notification-bell/index.d.ts +1 -0
- package/dist/components/feedback/notification-bell/index.js +1 -0
- package/dist/components/feedback/progress/Progress.svelte +64 -0
- package/dist/components/feedback/progress/Progress.svelte.d.ts +19 -0
- package/dist/components/feedback/progress/index.d.ts +1 -0
- package/dist/components/feedback/progress/index.js +1 -0
- package/dist/components/feedback/skeleton/Skeleton.svelte +28 -0
- package/dist/components/feedback/skeleton/Skeleton.svelte.d.ts +9 -0
- package/dist/components/feedback/skeleton/index.d.ts +1 -0
- package/dist/components/feedback/skeleton/index.js +1 -0
- package/dist/components/feedback/spinner/Spinner.svelte +14 -0
- package/dist/components/feedback/spinner/Spinner.svelte.d.ts +7 -0
- package/dist/components/feedback/spinner/index.d.ts +1 -0
- package/dist/components/feedback/spinner/index.js +1 -0
- package/dist/components/feedback/tag/Tag.svelte +60 -0
- package/dist/components/feedback/tag/Tag.svelte.d.ts +13 -0
- package/dist/components/feedback/tag/index.d.ts +1 -0
- package/dist/components/feedback/tag/index.js +1 -0
- package/dist/components/feedback/toast/Toaster.svelte +74 -0
- package/dist/components/feedback/toast/Toaster.svelte.d.ts +38 -0
- package/dist/components/feedback/toast/index.d.ts +4 -0
- package/dist/components/feedback/toast/index.js +2 -0
- package/dist/components/feedback/toast/toast.svelte.d.ts +90 -0
- package/dist/components/feedback/toast/toast.svelte.js +228 -0
- package/dist/components/form/auto-complete/AutoComplete.svelte +273 -0
- package/dist/components/form/auto-complete/AutoComplete.svelte.d.ts +57 -0
- package/dist/components/form/auto-complete/index.d.ts +2 -0
- package/dist/components/form/auto-complete/index.js +1 -0
- package/dist/components/form/button/Button.svelte +99 -0
- package/dist/components/form/button/Button.svelte.d.ts +28 -0
- package/dist/components/form/button/index.d.ts +1 -0
- package/dist/components/form/button/index.js +1 -0
- package/dist/components/form/calendar/Calendar.svelte +443 -0
- package/dist/components/form/calendar/Calendar.svelte.d.ts +41 -0
- package/dist/components/form/calendar/index.d.ts +2 -0
- package/dist/components/form/calendar/index.js +1 -0
- package/dist/components/form/checkbox/Checkbox.svelte +94 -0
- package/dist/components/form/checkbox/Checkbox.svelte.d.ts +23 -0
- package/dist/components/form/checkbox/index.d.ts +1 -0
- package/dist/components/form/checkbox/index.js +1 -0
- package/dist/components/form/color-picker/ColorPicker.svelte +178 -0
- package/dist/components/form/color-picker/ColorPicker.svelte.d.ts +18 -0
- package/dist/components/form/color-picker/index.d.ts +1 -0
- package/dist/components/form/color-picker/index.js +1 -0
- package/dist/components/form/date-picker/DatePicker.svelte +211 -0
- package/dist/components/form/date-picker/DatePicker.svelte.d.ts +31 -0
- package/dist/components/form/date-picker/index.d.ts +1 -0
- package/dist/components/form/date-picker/index.js +1 -0
- package/dist/components/form/date-range/DateRange.svelte +162 -0
- package/dist/components/form/date-range/DateRange.svelte.d.ts +34 -0
- package/dist/components/form/date-range/index.d.ts +2 -0
- package/dist/components/form/date-range/index.js +1 -0
- package/dist/components/form/date-range-picker/DateRangePicker.svelte +220 -0
- package/dist/components/form/date-range-picker/DateRangePicker.svelte.d.ts +37 -0
- package/dist/components/form/date-range-picker/index.d.ts +1 -0
- package/dist/components/form/date-range-picker/index.js +1 -0
- package/dist/components/form/field-error/FieldError.svelte +29 -0
- package/dist/components/form/field-error/FieldError.svelte.d.ts +12 -0
- package/dist/components/form/field-error/index.d.ts +1 -0
- package/dist/components/form/field-error/index.js +1 -0
- package/dist/components/form/fieldset/Fieldset.svelte +42 -0
- package/dist/components/form/fieldset/Fieldset.svelte.d.ts +15 -0
- package/dist/components/form/fieldset/index.d.ts +1 -0
- package/dist/components/form/fieldset/index.js +1 -0
- package/dist/components/form/file-input/FileInput.svelte +89 -0
- package/dist/components/form/file-input/FileInput.svelte.d.ts +23 -0
- package/dist/components/form/file-input/index.d.ts +1 -0
- package/dist/components/form/file-input/index.js +1 -0
- package/dist/components/form/form/Form.svelte +62 -0
- package/dist/components/form/form/Form.svelte.d.ts +20 -0
- package/dist/components/form/form/index.d.ts +1 -0
- package/dist/components/form/form/index.js +1 -0
- package/dist/components/form/icon-button/IconButton.svelte +58 -0
- package/dist/components/form/icon-button/IconButton.svelte.d.ts +19 -0
- package/dist/components/form/icon-button/index.d.ts +1 -0
- package/dist/components/form/icon-button/index.js +1 -0
- package/dist/components/form/input/Input.svelte +113 -0
- package/dist/components/form/input/Input.svelte.d.ts +36 -0
- package/dist/components/form/input/index.d.ts +1 -0
- package/dist/components/form/input/index.js +1 -0
- package/dist/components/form/input-group/InputAddon.svelte +13 -0
- package/dist/components/form/input-group/InputAddon.svelte.d.ts +8 -0
- package/dist/components/form/input-group/InputGroup.svelte +29 -0
- package/dist/components/form/input-group/InputGroup.svelte.d.ts +11 -0
- package/dist/components/form/input-group/index.d.ts +2 -0
- package/dist/components/form/input-group/index.js +2 -0
- package/dist/components/form/label/Label.svelte +31 -0
- package/dist/components/form/label/Label.svelte.d.ts +11 -0
- package/dist/components/form/label/index.d.ts +1 -0
- package/dist/components/form/label/index.js +1 -0
- package/dist/components/form/number-input/NumberInput.svelte +128 -0
- package/dist/components/form/number-input/NumberInput.svelte.d.ts +33 -0
- package/dist/components/form/number-input/index.d.ts +1 -0
- package/dist/components/form/number-input/index.js +1 -0
- package/dist/components/form/radio/Radio.svelte +85 -0
- package/dist/components/form/radio/Radio.svelte.d.ts +22 -0
- package/dist/components/form/radio/index.d.ts +1 -0
- package/dist/components/form/radio/index.js +1 -0
- package/dist/components/form/radio-group/RadioGroup.svelte +70 -0
- package/dist/components/form/radio-group/RadioGroup.svelte.d.ts +24 -0
- package/dist/components/form/radio-group/index.d.ts +2 -0
- package/dist/components/form/radio-group/index.js +1 -0
- package/dist/components/form/rating/Rating.svelte +124 -0
- package/dist/components/form/rating/Rating.svelte.d.ts +24 -0
- package/dist/components/form/rating/index.d.ts +1 -0
- package/dist/components/form/rating/index.js +1 -0
- package/dist/components/form/search-input/SearchInput.svelte +84 -0
- package/dist/components/form/search-input/SearchInput.svelte.d.ts +24 -0
- package/dist/components/form/search-input/index.d.ts +1 -0
- package/dist/components/form/search-input/index.js +1 -0
- package/dist/components/form/select/Select.svelte +156 -0
- package/dist/components/form/select/Select.svelte.d.ts +46 -0
- package/dist/components/form/select/SelectContent.svelte +157 -0
- package/dist/components/form/select/SelectContent.svelte.d.ts +10 -0
- package/dist/components/form/select/SelectOption.svelte +61 -0
- package/dist/components/form/select/SelectOption.svelte.d.ts +12 -0
- package/dist/components/form/select/SelectTrigger.svelte +67 -0
- package/dist/components/form/select/SelectTrigger.svelte.d.ts +9 -0
- package/dist/components/form/select/index.d.ts +5 -0
- package/dist/components/form/select/index.js +4 -0
- package/dist/components/form/slider/Slider.svelte +78 -0
- package/dist/components/form/slider/Slider.svelte.d.ts +21 -0
- package/dist/components/form/slider/index.d.ts +1 -0
- package/dist/components/form/slider/index.js +1 -0
- package/dist/components/form/switch/Switch.svelte +82 -0
- package/dist/components/form/switch/Switch.svelte.d.ts +21 -0
- package/dist/components/form/switch/index.d.ts +1 -0
- package/dist/components/form/switch/index.js +1 -0
- package/dist/components/form/textarea/Textarea.svelte +104 -0
- package/dist/components/form/textarea/Textarea.svelte.d.ts +33 -0
- package/dist/components/form/textarea/index.d.ts +1 -0
- package/dist/components/form/textarea/index.js +1 -0
- package/dist/components/form/time-picker/TimePicker.svelte +209 -0
- package/dist/components/form/time-picker/TimePicker.svelte.d.ts +26 -0
- package/dist/components/form/time-picker/index.d.ts +2 -0
- package/dist/components/form/time-picker/index.js +1 -0
- package/dist/components/form/toggle-button/ToggleButton.svelte +60 -0
- package/dist/components/form/toggle-button/ToggleButton.svelte.d.ts +19 -0
- package/dist/components/form/toggle-button/index.d.ts +1 -0
- package/dist/components/form/toggle-button/index.js +1 -0
- package/dist/components/index.d.ts +128 -0
- package/dist/components/index.js +108 -0
- package/dist/components/interactive/draggable/Draggable.svelte +162 -0
- package/dist/components/interactive/draggable/Draggable.svelte.d.ts +48 -0
- package/dist/components/interactive/draggable/index.d.ts +2 -0
- package/dist/components/interactive/draggable/index.js +1 -0
- package/dist/components/interactive/droppable/Droppable.svelte +153 -0
- package/dist/components/interactive/droppable/Droppable.svelte.d.ts +43 -0
- package/dist/components/interactive/droppable/index.d.ts +2 -0
- package/dist/components/interactive/droppable/index.js +1 -0
- package/dist/components/interactive/infinite-scroll/InfiniteScroll.svelte +62 -0
- package/dist/components/interactive/infinite-scroll/InfiniteScroll.svelte.d.ts +18 -0
- package/dist/components/interactive/infinite-scroll/index.d.ts +1 -0
- package/dist/components/interactive/infinite-scroll/index.js +1 -0
- package/dist/components/interactive/resizable/Resizable.svelte +145 -0
- package/dist/components/interactive/resizable/Resizable.svelte.d.ts +19 -0
- package/dist/components/interactive/resizable/index.d.ts +1 -0
- package/dist/components/interactive/resizable/index.js +1 -0
- package/dist/components/interactive/sortable/Sortable.svelte +204 -0
- package/dist/components/interactive/sortable/Sortable.svelte.d.ts +44 -0
- package/dist/components/interactive/sortable/index.d.ts +1 -0
- package/dist/components/interactive/sortable/index.js +1 -0
- package/dist/components/interactive/split-view/SplitView.svelte +98 -0
- package/dist/components/interactive/split-view/SplitView.svelte.d.ts +29 -0
- package/dist/components/interactive/split-view/SplitViewHandle.svelte +123 -0
- package/dist/components/interactive/split-view/SplitViewHandle.svelte.d.ts +10 -0
- package/dist/components/interactive/split-view/SplitViewPane.svelte +43 -0
- package/dist/components/interactive/split-view/SplitViewPane.svelte.d.ts +10 -0
- package/dist/components/interactive/split-view/index.d.ts +5 -0
- package/dist/components/interactive/split-view/index.js +4 -0
- package/dist/components/interactive/swipeable/Swipeable.svelte +147 -0
- package/dist/components/interactive/swipeable/Swipeable.svelte.d.ts +29 -0
- package/dist/components/interactive/swipeable/index.d.ts +2 -0
- package/dist/components/interactive/swipeable/index.js +1 -0
- package/dist/components/interactive/virtual-list/VirtualList.svelte +84 -0
- package/dist/components/interactive/virtual-list/VirtualList.svelte.d.ts +38 -0
- package/dist/components/interactive/virtual-list/index.d.ts +1 -0
- package/dist/components/interactive/virtual-list/index.js +1 -0
- package/dist/components/layout/columns/Columns.svelte +40 -0
- package/dist/components/layout/columns/Columns.svelte.d.ts +12 -0
- package/dist/components/layout/columns/index.d.ts +1 -0
- package/dist/components/layout/columns/index.js +1 -0
- package/dist/components/layout/container/Container.svelte +45 -0
- package/dist/components/layout/container/Container.svelte.d.ts +12 -0
- package/dist/components/layout/container/index.d.ts +1 -0
- package/dist/components/layout/container/index.js +1 -0
- package/dist/components/layout/flex/Flex.svelte +66 -0
- package/dist/components/layout/flex/Flex.svelte.d.ts +18 -0
- package/dist/components/layout/flex/index.d.ts +1 -0
- package/dist/components/layout/flex/index.js +1 -0
- package/dist/components/layout/grid/Grid.svelte +71 -0
- package/dist/components/layout/grid/Grid.svelte.d.ts +19 -0
- package/dist/components/layout/grid/index.d.ts +1 -0
- package/dist/components/layout/grid/index.js +1 -0
- package/dist/components/layout/spacer/Spacer.svelte +35 -0
- package/dist/components/layout/spacer/Spacer.svelte.d.ts +10 -0
- package/dist/components/layout/spacer/index.d.ts +1 -0
- package/dist/components/layout/spacer/index.js +1 -0
- package/dist/components/layout/stack/Stack.svelte +62 -0
- package/dist/components/layout/stack/Stack.svelte.d.ts +15 -0
- package/dist/components/layout/stack/index.d.ts +1 -0
- package/dist/components/layout/stack/index.js +1 -0
- package/dist/components/navigation/accordion/Accordion.svelte +62 -0
- package/dist/components/navigation/accordion/Accordion.svelte.d.ts +14 -0
- package/dist/components/navigation/accordion/AccordionContent.svelte +27 -0
- package/dist/components/navigation/accordion/AccordionContent.svelte.d.ts +8 -0
- package/dist/components/navigation/accordion/AccordionItem.svelte +41 -0
- package/dist/components/navigation/accordion/AccordionItem.svelte.d.ts +11 -0
- package/dist/components/navigation/accordion/AccordionTrigger.svelte +78 -0
- package/dist/components/navigation/accordion/AccordionTrigger.svelte.d.ts +9 -0
- package/dist/components/navigation/accordion/context.d.ts +21 -0
- package/dist/components/navigation/accordion/context.js +21 -0
- package/dist/components/navigation/accordion/index.d.ts +6 -0
- package/dist/components/navigation/accordion/index.js +5 -0
- package/dist/components/navigation/breadcrumb/Breadcrumb.svelte +21 -0
- package/dist/components/navigation/breadcrumb/Breadcrumb.svelte.d.ts +9 -0
- package/dist/components/navigation/breadcrumb/BreadcrumbItem.svelte +23 -0
- package/dist/components/navigation/breadcrumb/BreadcrumbItem.svelte.d.ts +10 -0
- package/dist/components/navigation/breadcrumb/BreadcrumbSeparator.svelte +12 -0
- package/dist/components/navigation/breadcrumb/BreadcrumbSeparator.svelte.d.ts +7 -0
- package/dist/components/navigation/breadcrumb/index.d.ts +3 -0
- package/dist/components/navigation/breadcrumb/index.js +3 -0
- package/dist/components/navigation/command-menu/CommandMenu.svelte +146 -0
- package/dist/components/navigation/command-menu/CommandMenu.svelte.d.ts +37 -0
- package/dist/components/navigation/command-menu/CommandMenuContent.svelte +78 -0
- package/dist/components/navigation/command-menu/CommandMenuContent.svelte.d.ts +11 -0
- package/dist/components/navigation/command-menu/CommandMenuEmpty.svelte +18 -0
- package/dist/components/navigation/command-menu/CommandMenuEmpty.svelte.d.ts +7 -0
- package/dist/components/navigation/command-menu/CommandMenuGroup.svelte +55 -0
- package/dist/components/navigation/command-menu/CommandMenuGroup.svelte.d.ts +13 -0
- package/dist/components/navigation/command-menu/CommandMenuInput.svelte +88 -0
- package/dist/components/navigation/command-menu/CommandMenuInput.svelte.d.ts +9 -0
- package/dist/components/navigation/command-menu/CommandMenuItem.svelte +67 -0
- package/dist/components/navigation/command-menu/CommandMenuItem.svelte.d.ts +13 -0
- package/dist/components/navigation/command-menu/CommandMenuList.svelte +22 -0
- package/dist/components/navigation/command-menu/CommandMenuList.svelte.d.ts +8 -0
- package/dist/components/navigation/command-menu/CommandMenuTrigger.svelte +42 -0
- package/dist/components/navigation/command-menu/CommandMenuTrigger.svelte.d.ts +8 -0
- package/dist/components/navigation/command-menu/index.d.ts +9 -0
- package/dist/components/navigation/command-menu/index.js +8 -0
- package/dist/components/navigation/external-link/ExternalLink.svelte +45 -0
- package/dist/components/navigation/external-link/ExternalLink.svelte.d.ts +14 -0
- package/dist/components/navigation/external-link/index.d.ts +1 -0
- package/dist/components/navigation/external-link/index.js +1 -0
- package/dist/components/navigation/link/Link.svelte +63 -0
- package/dist/components/navigation/link/Link.svelte.d.ts +19 -0
- package/dist/components/navigation/link/index.d.ts +1 -0
- package/dist/components/navigation/link/index.js +1 -0
- package/dist/components/navigation/menu/Menu.svelte +112 -0
- package/dist/components/navigation/menu/Menu.svelte.d.ts +38 -0
- package/dist/components/navigation/menu/MenuContent.svelte +147 -0
- package/dist/components/navigation/menu/MenuContent.svelte.d.ts +10 -0
- package/dist/components/navigation/menu/MenuItem.svelte +65 -0
- package/dist/components/navigation/menu/MenuItem.svelte.d.ts +11 -0
- package/dist/components/navigation/menu/MenuTrigger.svelte +57 -0
- package/dist/components/navigation/menu/MenuTrigger.svelte.d.ts +10 -0
- package/dist/components/navigation/menu/index.d.ts +5 -0
- package/dist/components/navigation/menu/index.js +4 -0
- package/dist/components/navigation/navigation/Navigation.svelte +33 -0
- package/dist/components/navigation/navigation/Navigation.svelte.d.ts +12 -0
- package/dist/components/navigation/navigation/index.d.ts +1 -0
- package/dist/components/navigation/navigation/index.js +1 -0
- package/dist/components/navigation/pagination/Pagination.svelte +85 -0
- package/dist/components/navigation/pagination/Pagination.svelte.d.ts +24 -0
- package/dist/components/navigation/pagination/index.d.ts +1 -0
- package/dist/components/navigation/pagination/index.js +1 -0
- package/dist/components/navigation/stepper/Stepper.svelte +73 -0
- package/dist/components/navigation/stepper/Stepper.svelte.d.ts +23 -0
- package/dist/components/navigation/stepper/StepperStep.svelte +58 -0
- package/dist/components/navigation/stepper/StepperStep.svelte.d.ts +11 -0
- package/dist/components/navigation/stepper/index.d.ts +3 -0
- package/dist/components/navigation/stepper/index.js +2 -0
- package/dist/components/navigation/sub-menu/SubMenu.svelte +243 -0
- package/dist/components/navigation/sub-menu/SubMenu.svelte.d.ts +26 -0
- package/dist/components/navigation/sub-menu/index.d.ts +2 -0
- package/dist/components/navigation/sub-menu/index.js +1 -0
- package/dist/components/navigation/tabs/Tab.svelte +87 -0
- package/dist/components/navigation/tabs/Tab.svelte.d.ts +11 -0
- package/dist/components/navigation/tabs/TabList.svelte +33 -0
- package/dist/components/navigation/tabs/TabList.svelte.d.ts +9 -0
- package/dist/components/navigation/tabs/TabPanel.svelte +31 -0
- package/dist/components/navigation/tabs/TabPanel.svelte.d.ts +9 -0
- package/dist/components/navigation/tabs/Tabs.svelte +42 -0
- package/dist/components/navigation/tabs/Tabs.svelte.d.ts +12 -0
- package/dist/components/navigation/tabs/context.d.ts +11 -0
- package/dist/components/navigation/tabs/context.js +13 -0
- package/dist/components/navigation/tabs/index.d.ts +6 -0
- package/dist/components/navigation/tabs/index.js +5 -0
- package/dist/components/overlay/context-menu/ContextMenu.svelte +239 -0
- package/dist/components/overlay/context-menu/ContextMenu.svelte.d.ts +26 -0
- package/dist/components/overlay/context-menu/index.d.ts +2 -0
- package/dist/components/overlay/context-menu/index.js +1 -0
- package/dist/components/overlay/dialog/Dialog.svelte +23 -0
- package/dist/components/overlay/dialog/Dialog.svelte.d.ts +10 -0
- package/dist/components/overlay/dialog/index.d.ts +2 -0
- package/dist/components/overlay/dialog/index.js +2 -0
- package/dist/components/overlay/drawer/Drawer.svelte +26 -0
- package/dist/components/overlay/drawer/Drawer.svelte.d.ts +11 -0
- package/dist/components/overlay/drawer/DrawerContent.svelte +100 -0
- package/dist/components/overlay/drawer/DrawerContent.svelte.d.ts +15 -0
- package/dist/components/overlay/drawer/context.d.ts +3 -0
- package/dist/components/overlay/drawer/context.js +8 -0
- package/dist/components/overlay/drawer/index.d.ts +4 -0
- package/dist/components/overlay/drawer/index.js +3 -0
- package/dist/components/overlay/dropdown/index.d.ts +2 -0
- package/dist/components/overlay/dropdown/index.js +1 -0
- package/dist/components/overlay/lightbox/Lightbox.svelte +164 -0
- package/dist/components/overlay/lightbox/Lightbox.svelte.d.ts +38 -0
- package/dist/components/overlay/lightbox/index.d.ts +2 -0
- package/dist/components/overlay/lightbox/index.js +1 -0
- package/dist/components/overlay/modal/Modal.svelte +86 -0
- package/dist/components/overlay/modal/Modal.svelte.d.ts +29 -0
- package/dist/components/overlay/modal/ModalClose.svelte +17 -0
- package/dist/components/overlay/modal/ModalClose.svelte.d.ts +8 -0
- package/dist/components/overlay/modal/ModalContent.svelte +96 -0
- package/dist/components/overlay/modal/ModalContent.svelte.d.ts +13 -0
- package/dist/components/overlay/modal/ModalDescription.svelte +21 -0
- package/dist/components/overlay/modal/ModalDescription.svelte.d.ts +7 -0
- package/dist/components/overlay/modal/ModalTitle.svelte +22 -0
- package/dist/components/overlay/modal/ModalTitle.svelte.d.ts +8 -0
- package/dist/components/overlay/modal/ModalTrigger.svelte +44 -0
- package/dist/components/overlay/modal/ModalTrigger.svelte.d.ts +10 -0
- package/dist/components/overlay/modal/index.d.ts +7 -0
- package/dist/components/overlay/modal/index.js +6 -0
- package/dist/components/overlay/overlay/Overlay.svelte +63 -0
- package/dist/components/overlay/overlay/Overlay.svelte.d.ts +13 -0
- package/dist/components/overlay/overlay/index.d.ts +1 -0
- package/dist/components/overlay/overlay/index.js +1 -0
- package/dist/components/overlay/popover/Popover.svelte +73 -0
- package/dist/components/overlay/popover/Popover.svelte.d.ts +26 -0
- package/dist/components/overlay/popover/PopoverContent.svelte +130 -0
- package/dist/components/overlay/popover/PopoverContent.svelte.d.ts +15 -0
- package/dist/components/overlay/popover/PopoverTrigger.svelte +45 -0
- package/dist/components/overlay/popover/PopoverTrigger.svelte.d.ts +10 -0
- package/dist/components/overlay/popover/index.d.ts +4 -0
- package/dist/components/overlay/popover/index.js +3 -0
- package/dist/components/overlay/sheet/index.d.ts +2 -0
- package/dist/components/overlay/sheet/index.js +1 -0
- package/dist/components/overlay/tooltip/Tooltip.svelte +99 -0
- package/dist/components/overlay/tooltip/Tooltip.svelte.d.ts +28 -0
- package/dist/components/overlay/tooltip/TooltipContent.svelte +68 -0
- package/dist/components/overlay/tooltip/TooltipContent.svelte.d.ts +10 -0
- package/dist/components/overlay/tooltip/TooltipTrigger.svelte +38 -0
- package/dist/components/overlay/tooltip/TooltipTrigger.svelte.d.ts +10 -0
- package/dist/components/overlay/tooltip/index.d.ts +4 -0
- package/dist/components/overlay/tooltip/index.js +3 -0
- package/dist/components/utility/conditional/Conditional.svelte +15 -0
- package/dist/components/utility/conditional/Conditional.svelte.d.ts +8 -0
- package/dist/components/utility/conditional/index.d.ts +1 -0
- package/dist/components/utility/conditional/index.js +1 -0
- package/dist/components/utility/focus-trap/FocusTrap.svelte +39 -0
- package/dist/components/utility/focus-trap/FocusTrap.svelte.d.ts +10 -0
- package/dist/components/utility/focus-trap/index.d.ts +1 -0
- package/dist/components/utility/focus-trap/index.js +1 -0
- package/dist/components/utility/portal/Portal.svelte +36 -0
- package/dist/components/utility/portal/Portal.svelte.d.ts +8 -0
- package/dist/components/utility/portal/index.d.ts +1 -0
- package/dist/components/utility/portal/index.js +1 -0
- package/dist/components/utility/screen-reader-only/index.d.ts +1 -0
- package/dist/components/utility/screen-reader-only/index.js +1 -0
- package/dist/components/utility/visually-hidden/VisuallyHidden.svelte +50 -0
- package/dist/components/utility/visually-hidden/VisuallyHidden.svelte.d.ts +13 -0
- package/dist/components/utility/visually-hidden/index.d.ts +1 -0
- package/dist/components/utility/visually-hidden/index.js +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +10 -0
- package/dist/types/README.md +299 -0
- package/dist/types/index.d.ts +251 -0
- package/dist/types/index.js +89 -0
- package/dist/utils/a11y/README.md +312 -0
- package/dist/utils/a11y/aria.d.ts +88 -0
- package/dist/utils/a11y/aria.js +131 -0
- package/dist/utils/a11y/focus.d.ts +51 -0
- package/dist/utils/a11y/focus.js +91 -0
- package/dist/utils/a11y/id.d.ts +54 -0
- package/dist/utils/a11y/id.js +61 -0
- package/dist/utils/a11y/index.d.ts +8 -0
- package/dist/utils/a11y/index.js +12 -0
- package/dist/utils/a11y/keyboard.d.ts +71 -0
- package/dist/utils/a11y/keyboard.js +101 -0
- package/dist/utils/form/README.md +164 -0
- package/dist/utils/form/aria.d.ts +63 -0
- package/dist/utils/form/aria.js +75 -0
- package/dist/utils/form/ids.d.ts +46 -0
- package/dist/utils/form/ids.js +53 -0
- package/dist/utils/form/index.d.ts +7 -0
- package/dist/utils/form/index.js +8 -0
- package/dist/utils/form/state.d.ts +87 -0
- package/dist/utils/form/state.js +103 -0
- package/dist/utils/index.d.ts +6 -0
- package/dist/utils/index.js +8 -0
- package/package.json +98 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Focus management utilities for accessibility
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Traps focus within a container (for modals, dialogs, dropdowns)
|
|
6
|
+
* Returns a cleanup function that removes the event listener
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```svelte
|
|
10
|
+
* <script>
|
|
11
|
+
* import { focus } from 'alus-ui';
|
|
12
|
+
* let modalElement;
|
|
13
|
+
*
|
|
14
|
+
* function openModal() {
|
|
15
|
+
* modalElement.showModal();
|
|
16
|
+
* const cleanup = focus.trap(modalElement);
|
|
17
|
+
* // Store cleanup to call when modal closes
|
|
18
|
+
* }
|
|
19
|
+
* </script>
|
|
20
|
+
*
|
|
21
|
+
* <dialog bind:this={modalElement}>
|
|
22
|
+
* <!-- Content -->
|
|
23
|
+
* </dialog>
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export function trap(container) {
|
|
27
|
+
const focusableElements = container.querySelectorAll('a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])');
|
|
28
|
+
const firstElement = focusableElements[0];
|
|
29
|
+
const lastElement = focusableElements[focusableElements.length - 1];
|
|
30
|
+
const handleTabKey = (e) => {
|
|
31
|
+
if (e.key !== 'Tab')
|
|
32
|
+
return;
|
|
33
|
+
if (e.shiftKey) {
|
|
34
|
+
if (document.activeElement === firstElement) {
|
|
35
|
+
e.preventDefault();
|
|
36
|
+
lastElement?.focus();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
if (document.activeElement === lastElement) {
|
|
41
|
+
e.preventDefault();
|
|
42
|
+
firstElement?.focus();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
container.addEventListener('keydown', handleTabKey);
|
|
47
|
+
return () => container.removeEventListener('keydown', handleTabKey);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Moves focus to first focusable element in container
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```svelte
|
|
54
|
+
* <script>
|
|
55
|
+
* import { focus } from 'alus-ui';
|
|
56
|
+
* let dialogElement;
|
|
57
|
+
*
|
|
58
|
+
* function open() {
|
|
59
|
+
* dialogElement.showModal();
|
|
60
|
+
* focus.focusFirst(dialogElement);
|
|
61
|
+
* }
|
|
62
|
+
* </script>
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export function focusFirst(container) {
|
|
66
|
+
const focusable = container.querySelector('a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])');
|
|
67
|
+
focusable?.focus();
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Moves focus to last focusable element in container
|
|
71
|
+
*/
|
|
72
|
+
export function focusLast(container) {
|
|
73
|
+
const focusable = container.querySelectorAll('a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])');
|
|
74
|
+
const last = focusable[focusable.length - 1];
|
|
75
|
+
last?.focus();
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Checks if an element can receive focus
|
|
79
|
+
*/
|
|
80
|
+
export function isFocusable(element) {
|
|
81
|
+
if (element instanceof HTMLButtonElement ||
|
|
82
|
+
element instanceof HTMLInputElement ||
|
|
83
|
+
element instanceof HTMLSelectElement ||
|
|
84
|
+
element instanceof HTMLTextAreaElement) {
|
|
85
|
+
return !element.disabled && element.tabIndex >= 0;
|
|
86
|
+
}
|
|
87
|
+
if (element instanceof HTMLAnchorElement) {
|
|
88
|
+
return element.href !== '';
|
|
89
|
+
}
|
|
90
|
+
return element.tabIndex >= 0;
|
|
91
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ID generation utilities for accessibility associations
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Creates a unique ID for accessibility associations
|
|
6
|
+
* Useful for generating IDs for aria-describedby, aria-labelledby, etc.
|
|
7
|
+
*
|
|
8
|
+
* @param prefix - Descriptive prefix for the ID (e.g., 'label', 'desc', 'error')
|
|
9
|
+
* @returns A unique ID string
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```svelte
|
|
13
|
+
* <script>
|
|
14
|
+
* import { generateId } from 'alus-ui';
|
|
15
|
+
*
|
|
16
|
+
* const labelId = generateId('label');
|
|
17
|
+
* const errorId = generateId('error');
|
|
18
|
+
* </script>
|
|
19
|
+
*
|
|
20
|
+
* <Input id="email" {...labelAttrs({ labelledby: labelId, describedby: errorId })} />
|
|
21
|
+
* <label {for}>Email</label>
|
|
22
|
+
* <p id={errorId} role="alert">{error}</p>
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function generateId(prefix: string): string;
|
|
26
|
+
/**
|
|
27
|
+
* Creates a sequential ID (useful for lists, radios, checkboxes)
|
|
28
|
+
*
|
|
29
|
+
* @param prefix - Descriptive prefix for the ID
|
|
30
|
+
* @returns A sequential ID string
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```svelte
|
|
34
|
+
* {#each items as item, i}
|
|
35
|
+
* <Radio id={generateSequentialId('option', i)} />
|
|
36
|
+
* {/each}
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function generateSequentialId(prefix: string, index: number): string;
|
|
40
|
+
/**
|
|
41
|
+
* Creates a counter-based ID (guaranteed unique per session)
|
|
42
|
+
*
|
|
43
|
+
* @param prefix - Descriptive prefix for the ID
|
|
44
|
+
* @returns A unique counter-based ID
|
|
45
|
+
*/
|
|
46
|
+
export declare function generateCounterId(prefix: string): string;
|
|
47
|
+
/**
|
|
48
|
+
* ID generation utilities object
|
|
49
|
+
*/
|
|
50
|
+
export declare const id: {
|
|
51
|
+
generate: typeof generateId;
|
|
52
|
+
sequential: typeof generateSequentialId;
|
|
53
|
+
counter: typeof generateCounterId;
|
|
54
|
+
};
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ID generation utilities for accessibility associations
|
|
3
|
+
*/
|
|
4
|
+
let counter = 0;
|
|
5
|
+
/**
|
|
6
|
+
* Creates a unique ID for accessibility associations
|
|
7
|
+
* Useful for generating IDs for aria-describedby, aria-labelledby, etc.
|
|
8
|
+
*
|
|
9
|
+
* @param prefix - Descriptive prefix for the ID (e.g., 'label', 'desc', 'error')
|
|
10
|
+
* @returns A unique ID string
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```svelte
|
|
14
|
+
* <script>
|
|
15
|
+
* import { generateId } from 'alus-ui';
|
|
16
|
+
*
|
|
17
|
+
* const labelId = generateId('label');
|
|
18
|
+
* const errorId = generateId('error');
|
|
19
|
+
* </script>
|
|
20
|
+
*
|
|
21
|
+
* <Input id="email" {...labelAttrs({ labelledby: labelId, describedby: errorId })} />
|
|
22
|
+
* <label {for}>Email</label>
|
|
23
|
+
* <p id={errorId} role="alert">{error}</p>
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export function generateId(prefix) {
|
|
27
|
+
return `alus-${prefix}-${Math.random().toString(36).substring(2, 9)}`;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Creates a sequential ID (useful for lists, radios, checkboxes)
|
|
31
|
+
*
|
|
32
|
+
* @param prefix - Descriptive prefix for the ID
|
|
33
|
+
* @returns A sequential ID string
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```svelte
|
|
37
|
+
* {#each items as item, i}
|
|
38
|
+
* <Radio id={generateSequentialId('option', i)} />
|
|
39
|
+
* {/each}
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export function generateSequentialId(prefix, index) {
|
|
43
|
+
return `alus-${prefix}-${index}`;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Creates a counter-based ID (guaranteed unique per session)
|
|
47
|
+
*
|
|
48
|
+
* @param prefix - Descriptive prefix for the ID
|
|
49
|
+
* @returns A unique counter-based ID
|
|
50
|
+
*/
|
|
51
|
+
export function generateCounterId(prefix) {
|
|
52
|
+
return `alus-${prefix}-${counter++}`;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* ID generation utilities object
|
|
56
|
+
*/
|
|
57
|
+
export const id = {
|
|
58
|
+
generate: generateId,
|
|
59
|
+
sequential: generateSequentialId,
|
|
60
|
+
counter: generateCounterId
|
|
61
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accessibility utilities for WCAG compliance and ARIA attributes
|
|
3
|
+
* @module a11y
|
|
4
|
+
*/
|
|
5
|
+
// Export all ARIA utilities
|
|
6
|
+
export * from './aria.js';
|
|
7
|
+
// Export focus management
|
|
8
|
+
export * from './focus.js';
|
|
9
|
+
// Export keyboard utilities
|
|
10
|
+
export * from './keyboard.js';
|
|
11
|
+
// Export ID generation
|
|
12
|
+
export * from './id.js';
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keyboard event utilities for accessibility
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Checks if Enter or Space was pressed (for button-like behavior)
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```svelte
|
|
9
|
+
* <script>
|
|
10
|
+
* import { keyboard } from 'alus-ui';
|
|
11
|
+
*
|
|
12
|
+
* function handleKeydown(e: KeyboardEvent) {
|
|
13
|
+
* if (keyboard.isActivationKey(e)) {
|
|
14
|
+
* // Activate button
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
* </script>
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function isActivationKey(event: KeyboardEvent): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Checks if Escape was pressed
|
|
23
|
+
*/
|
|
24
|
+
export declare function isEscape(event: KeyboardEvent): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Checks if Arrow key was pressed
|
|
27
|
+
*/
|
|
28
|
+
export declare function isArrow(event: KeyboardEvent): boolean;
|
|
29
|
+
/**
|
|
30
|
+
* Checks if Home or End was pressed
|
|
31
|
+
*/
|
|
32
|
+
export declare function isHomeEnd(event: KeyboardEvent): boolean;
|
|
33
|
+
/**
|
|
34
|
+
* Checks if Page Up or Page Down was pressed
|
|
35
|
+
*/
|
|
36
|
+
export declare function isPageUpDown(event: KeyboardEvent): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Prevents default behavior for activation keys (Space key scrolling)
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```svelte
|
|
42
|
+
* <div
|
|
43
|
+
* role="button"
|
|
44
|
+
* onkeydown={(e) => {
|
|
45
|
+
* keyboard.preventActivation(e);
|
|
46
|
+
* if (keyboard.isActivationKey(e)) {
|
|
47
|
+
* // Handle activation
|
|
48
|
+
* }
|
|
49
|
+
* }}
|
|
50
|
+
* >
|
|
51
|
+
* Custom Button
|
|
52
|
+
* </div>
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare function preventActivation(event: KeyboardEvent): void;
|
|
56
|
+
/**
|
|
57
|
+
* Gets the direction from an arrow key event
|
|
58
|
+
*/
|
|
59
|
+
export declare function getArrowDirection(event: KeyboardEvent): 'up' | 'down' | 'left' | 'right' | null;
|
|
60
|
+
/**
|
|
61
|
+
* Keyboard event handler utility object
|
|
62
|
+
*/
|
|
63
|
+
export declare const keyboard: {
|
|
64
|
+
isActivationKey: typeof isActivationKey;
|
|
65
|
+
isEscape: typeof isEscape;
|
|
66
|
+
isArrow: typeof isArrow;
|
|
67
|
+
isHomeEnd: typeof isHomeEnd;
|
|
68
|
+
isPageUpDown: typeof isPageUpDown;
|
|
69
|
+
preventActivation: typeof preventActivation;
|
|
70
|
+
getArrowDirection: typeof getArrowDirection;
|
|
71
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keyboard event utilities for accessibility
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Checks if Enter or Space was pressed (for button-like behavior)
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```svelte
|
|
9
|
+
* <script>
|
|
10
|
+
* import { keyboard } from 'alus-ui';
|
|
11
|
+
*
|
|
12
|
+
* function handleKeydown(e: KeyboardEvent) {
|
|
13
|
+
* if (keyboard.isActivationKey(e)) {
|
|
14
|
+
* // Activate button
|
|
15
|
+
* }
|
|
16
|
+
* }
|
|
17
|
+
* </script>
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export function isActivationKey(event) {
|
|
21
|
+
return event.key === 'Enter' || event.key === ' ' || event.key === 'Spacebar';
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Checks if Escape was pressed
|
|
25
|
+
*/
|
|
26
|
+
export function isEscape(event) {
|
|
27
|
+
return event.key === 'Escape';
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Checks if Arrow key was pressed
|
|
31
|
+
*/
|
|
32
|
+
export function isArrow(event) {
|
|
33
|
+
return (event.key === 'ArrowUp' ||
|
|
34
|
+
event.key === 'ArrowDown' ||
|
|
35
|
+
event.key === 'ArrowLeft' ||
|
|
36
|
+
event.key === 'ArrowRight');
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Checks if Home or End was pressed
|
|
40
|
+
*/
|
|
41
|
+
export function isHomeEnd(event) {
|
|
42
|
+
return event.key === 'Home' || event.key === 'End';
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Checks if Page Up or Page Down was pressed
|
|
46
|
+
*/
|
|
47
|
+
export function isPageUpDown(event) {
|
|
48
|
+
return event.key === 'PageUp' || event.key === 'PageDown';
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Prevents default behavior for activation keys (Space key scrolling)
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```svelte
|
|
55
|
+
* <div
|
|
56
|
+
* role="button"
|
|
57
|
+
* onkeydown={(e) => {
|
|
58
|
+
* keyboard.preventActivation(e);
|
|
59
|
+
* if (keyboard.isActivationKey(e)) {
|
|
60
|
+
* // Handle activation
|
|
61
|
+
* }
|
|
62
|
+
* }}
|
|
63
|
+
* >
|
|
64
|
+
* Custom Button
|
|
65
|
+
* </div>
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
export function preventActivation(event) {
|
|
69
|
+
if (event.key === ' ' || event.key === 'Spacebar') {
|
|
70
|
+
event.preventDefault();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Gets the direction from an arrow key event
|
|
75
|
+
*/
|
|
76
|
+
export function getArrowDirection(event) {
|
|
77
|
+
switch (event.key) {
|
|
78
|
+
case 'ArrowUp':
|
|
79
|
+
return 'up';
|
|
80
|
+
case 'ArrowDown':
|
|
81
|
+
return 'down';
|
|
82
|
+
case 'ArrowLeft':
|
|
83
|
+
return 'left';
|
|
84
|
+
case 'ArrowRight':
|
|
85
|
+
return 'right';
|
|
86
|
+
default:
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Keyboard event handler utility object
|
|
92
|
+
*/
|
|
93
|
+
export const keyboard = {
|
|
94
|
+
isActivationKey,
|
|
95
|
+
isEscape,
|
|
96
|
+
isArrow,
|
|
97
|
+
isHomeEnd,
|
|
98
|
+
isPageUpDown,
|
|
99
|
+
preventActivation,
|
|
100
|
+
getArrowDirection
|
|
101
|
+
};
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# Form Utilities
|
|
2
|
+
|
|
3
|
+
Reusable utilities for form field management and accessibility.
|
|
4
|
+
|
|
5
|
+
## Modules
|
|
6
|
+
|
|
7
|
+
### `ids.ts` - ID Generation
|
|
8
|
+
|
|
9
|
+
Generate consistent, accessible IDs for form fields.
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
import { createFieldIds, createFieldGroupIds } from 'alus-ui/utils/form';
|
|
13
|
+
|
|
14
|
+
const ids = createFieldIds('email');
|
|
15
|
+
// { label: 'alus-ui-email-abc123-label', input: 'alus-ui-email-abc123-input', ... }
|
|
16
|
+
|
|
17
|
+
const groupIds = createFieldGroupIds('password');
|
|
18
|
+
// { group: 'alus-ui-password-abc123-group', label: 'alus-ui-password-abc123-label', ... }
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### `aria.ts` - ARIA Attributes
|
|
22
|
+
|
|
23
|
+
Build proper ARIA attributes for form fields.
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
import { getFieldAriaAttrs, hasError, getErrorMessage } from 'alus-ui/utils/form';
|
|
27
|
+
|
|
28
|
+
const aria = getFieldAriaAttrs({
|
|
29
|
+
descriptionId: 'help-text',
|
|
30
|
+
errorId: 'error-message',
|
|
31
|
+
invalid: true
|
|
32
|
+
});
|
|
33
|
+
// { 'aria-describedby': 'help-text error-message', 'aria-invalid': true }
|
|
34
|
+
|
|
35
|
+
hasError('Some error'); // true
|
|
36
|
+
getErrorMessage('Some error'); // 'Some error'
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
### `state.ts` - Form State Management
|
|
40
|
+
|
|
41
|
+
Create reactive form field and form state.
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
import { createFormField, createFormState, hasFormErrors, isFormValid } from 'alus-ui/utils/form';
|
|
45
|
+
|
|
46
|
+
// Single field
|
|
47
|
+
let email = createFormField('');
|
|
48
|
+
// { value: '', error: undefined, touched: false, dirty: false }
|
|
49
|
+
|
|
50
|
+
// Multiple fields (form)
|
|
51
|
+
let form = createFormState({
|
|
52
|
+
email: '',
|
|
53
|
+
password: '',
|
|
54
|
+
terms: false
|
|
55
|
+
});
|
|
56
|
+
// { values: {...}, errors: {...}, touched: {...}, dirty: {...} }
|
|
57
|
+
|
|
58
|
+
hasFormErrors(form); // true if any errors
|
|
59
|
+
isFormValid(form); // true if valid and all touched
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Usage Examples
|
|
63
|
+
|
|
64
|
+
### Form Field with Accessibility
|
|
65
|
+
|
|
66
|
+
```svelte
|
|
67
|
+
<script lang="ts">
|
|
68
|
+
import { Input } from 'alus-ui';
|
|
69
|
+
import { createFieldIds } from 'alus-ui/utils/form';
|
|
70
|
+
|
|
71
|
+
const ids = createFieldIds('email');
|
|
72
|
+
|
|
73
|
+
let email = $state('');
|
|
74
|
+
let emailError = $state(undefined);
|
|
75
|
+
let emailTouched = $state(false);
|
|
76
|
+
</script>
|
|
77
|
+
|
|
78
|
+
<label for={ids.label}>Email Address</label>
|
|
79
|
+
<Input
|
|
80
|
+
id={ids.input}
|
|
81
|
+
bind:value={email}
|
|
82
|
+
aria-describedby={ids.description}
|
|
83
|
+
aria-invalid={emailError !== undefined}
|
|
84
|
+
onblur={() => (emailTouched = true)}
|
|
85
|
+
/>
|
|
86
|
+
<p id={ids.description}>We'll never share your email</p>
|
|
87
|
+
|
|
88
|
+
{#if emailError && emailTouched}
|
|
89
|
+
<p id={ids.error} class="error" role="alert">
|
|
90
|
+
{emailError}
|
|
91
|
+
</p>
|
|
92
|
+
{/if}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Form State Manager
|
|
96
|
+
|
|
97
|
+
```svelte
|
|
98
|
+
<script lang="ts">
|
|
99
|
+
import { Input, Checkbox } from 'alus-ui';
|
|
100
|
+
import { createFormState, isFormValid, hasFormErrors } from 'alus-ui/utils/form';
|
|
101
|
+
|
|
102
|
+
let form = createFormState({
|
|
103
|
+
email: '',
|
|
104
|
+
password: '',
|
|
105
|
+
terms: false
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
function handleSubmit() {
|
|
109
|
+
if (isFormValid(form)) {
|
|
110
|
+
// Submit form
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
</script>
|
|
114
|
+
|
|
115
|
+
<Input bind:value={form.values.email} />
|
|
116
|
+
<Input bind:value={form.values.password} />
|
|
117
|
+
<Checkbox bind:checked={form.values.terms as boolean} />
|
|
118
|
+
|
|
119
|
+
<button disabled={!isFormValid(form)}>Submit</button>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## API Reference
|
|
123
|
+
|
|
124
|
+
### Functions
|
|
125
|
+
|
|
126
|
+
#### `createFieldIds(fieldName: string): FieldIds`
|
|
127
|
+
|
|
128
|
+
Generate IDs for a single form field.
|
|
129
|
+
|
|
130
|
+
#### `createFieldGroupIds(groupName: string): FieldIds & { group: string }`
|
|
131
|
+
|
|
132
|
+
Generate IDs for a field group (with group ID).
|
|
133
|
+
|
|
134
|
+
#### `getFieldAriaAttrs(props: FieldProps): Record<string, string | boolean>`
|
|
135
|
+
|
|
136
|
+
Generate ARIA attributes for a form field.
|
|
137
|
+
|
|
138
|
+
#### `hasError(error?: string | boolean): boolean`
|
|
139
|
+
|
|
140
|
+
Check if a field has an error.
|
|
141
|
+
|
|
142
|
+
#### `getErrorMessage(error?: string | boolean): string | undefined`
|
|
143
|
+
|
|
144
|
+
Extract error message from error value.
|
|
145
|
+
|
|
146
|
+
#### `createFormField<T>(initialValue: T): FormFieldState<T>`
|
|
147
|
+
|
|
148
|
+
Create state for a single form field.
|
|
149
|
+
|
|
150
|
+
#### `createFormState<T>(initialValues: T): FormState<T>`
|
|
151
|
+
|
|
152
|
+
Create state for an entire form.
|
|
153
|
+
|
|
154
|
+
#### `hasFormErrors(form: FormState): boolean`
|
|
155
|
+
|
|
156
|
+
Check if form has any errors.
|
|
157
|
+
|
|
158
|
+
#### `isFormValid(form: FormState): boolean`
|
|
159
|
+
|
|
160
|
+
Check if form is valid (no errors, all touched).
|
|
161
|
+
|
|
162
|
+
#### `resetForm(form: FormState, initialValues: T): void`
|
|
163
|
+
|
|
164
|
+
Reset form to initial state.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ARIA attribute utilities for form fields
|
|
3
|
+
* @module form/aria
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Props for a form field with label and error states
|
|
7
|
+
*/
|
|
8
|
+
export interface FieldProps {
|
|
9
|
+
id?: string;
|
|
10
|
+
label?: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
descriptionId?: string;
|
|
13
|
+
error?: string;
|
|
14
|
+
errorId?: string;
|
|
15
|
+
required?: boolean;
|
|
16
|
+
invalid?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate ARIA attributes for a form field based on its state
|
|
20
|
+
* @param props - Field properties
|
|
21
|
+
* @returns ARIA attributes object
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```svelte
|
|
25
|
+
* <script>
|
|
26
|
+
* import { getFieldAriaAttrs } from 'alus-ui/utils/form';
|
|
27
|
+
*
|
|
28
|
+
* const aria = getFieldAriaAttrs({
|
|
29
|
+
* descriptionId: 'help-id',
|
|
30
|
+
* errorId: 'error-id',
|
|
31
|
+
* invalid: true
|
|
32
|
+
* });
|
|
33
|
+
* </script>
|
|
34
|
+
*
|
|
35
|
+
* <Input {...aria} />
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare function getFieldAriaAttrs(props: FieldProps): Record<string, string>;
|
|
39
|
+
/**
|
|
40
|
+
* Check if a field has an error state
|
|
41
|
+
* @param error - Error message or boolean
|
|
42
|
+
* @returns Whether the field is invalid
|
|
43
|
+
*/
|
|
44
|
+
export declare function hasError(error?: string | boolean): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Get the error message to display
|
|
47
|
+
* @param error - Error message or boolean
|
|
48
|
+
* @returns Error string or undefined
|
|
49
|
+
*/
|
|
50
|
+
export declare function getErrorMessage(error?: string | boolean): string | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* Common ARIA roles for form feedback
|
|
53
|
+
*/
|
|
54
|
+
export declare const fieldRoles: {
|
|
55
|
+
/** Role for an alert message */
|
|
56
|
+
readonly alert: "alert";
|
|
57
|
+
/** Role for status information */
|
|
58
|
+
readonly status: "status";
|
|
59
|
+
};
|
|
60
|
+
/**
|
|
61
|
+
* Type for ARIA field roles
|
|
62
|
+
*/
|
|
63
|
+
export type FieldRole = (typeof fieldRoles)[keyof typeof fieldRoles];
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ARIA attribute utilities for form fields
|
|
3
|
+
* @module form/aria
|
|
4
|
+
*/
|
|
5
|
+
import { buildAriaAttrs } from '../a11y/aria.js';
|
|
6
|
+
/**
|
|
7
|
+
* Build aria-describedby value from description and error IDs
|
|
8
|
+
* @param descriptionId - Description element ID
|
|
9
|
+
* @param errorId - Error element ID
|
|
10
|
+
* @returns Space-separated IDs for aria-describedby
|
|
11
|
+
*/
|
|
12
|
+
function buildDescribedBy(descriptionId, errorId) {
|
|
13
|
+
const ids = [];
|
|
14
|
+
if (descriptionId)
|
|
15
|
+
ids.push(descriptionId);
|
|
16
|
+
if (errorId)
|
|
17
|
+
ids.push(errorId);
|
|
18
|
+
return ids.length > 0 ? ids.join(' ') : undefined;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Generate ARIA attributes for a form field based on its state
|
|
22
|
+
* @param props - Field properties
|
|
23
|
+
* @returns ARIA attributes object
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```svelte
|
|
27
|
+
* <script>
|
|
28
|
+
* import { getFieldAriaAttrs } from 'alus-ui/utils/form';
|
|
29
|
+
*
|
|
30
|
+
* const aria = getFieldAriaAttrs({
|
|
31
|
+
* descriptionId: 'help-id',
|
|
32
|
+
* errorId: 'error-id',
|
|
33
|
+
* invalid: true
|
|
34
|
+
* });
|
|
35
|
+
* </script>
|
|
36
|
+
*
|
|
37
|
+
* <Input {...aria} />
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export function getFieldAriaAttrs(props) {
|
|
41
|
+
return buildAriaAttrs({
|
|
42
|
+
'aria-label': props.label,
|
|
43
|
+
'aria-describedby': buildDescribedBy(props.descriptionId || props.description, props.errorId || props.error),
|
|
44
|
+
'aria-invalid': props.invalid || hasError(props.error),
|
|
45
|
+
'aria-required': props.required
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check if a field has an error state
|
|
50
|
+
* @param error - Error message or boolean
|
|
51
|
+
* @returns Whether the field is invalid
|
|
52
|
+
*/
|
|
53
|
+
export function hasError(error) {
|
|
54
|
+
return error === true || (typeof error === 'string' && error.length > 0);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get the error message to display
|
|
58
|
+
* @param error - Error message or boolean
|
|
59
|
+
* @returns Error string or undefined
|
|
60
|
+
*/
|
|
61
|
+
export function getErrorMessage(error) {
|
|
62
|
+
if (typeof error === 'string') {
|
|
63
|
+
return error || undefined;
|
|
64
|
+
}
|
|
65
|
+
return undefined;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Common ARIA roles for form feedback
|
|
69
|
+
*/
|
|
70
|
+
export const fieldRoles = {
|
|
71
|
+
/** Role for an alert message */
|
|
72
|
+
alert: 'alert',
|
|
73
|
+
/** Role for status information */
|
|
74
|
+
status: 'status'
|
|
75
|
+
};
|