@vjdesigns/vjdesigns-ui 2.4.0 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -0
- package/README.md +45 -1
- package/dist/ai/llms-full.txt +133 -76
- package/dist/ai/registry.json +82 -61
- package/dist/components/data-display/Accordion/Accordion.cjs.js +1 -1
- package/dist/components/data-display/Accordion/Accordion.mjs +22 -22
- package/dist/components/data-display/Accordion/Accordion.module.css.mjs +1 -2
- package/dist/components/data-display/Avatar/Avatar.cjs.js +1 -1
- package/dist/components/data-display/Avatar/Avatar.mjs +92 -92
- package/dist/components/data-display/Avatar/Avatar.module.css.mjs +1 -2
- package/dist/components/data-display/Badge/Badge.cjs.js +1 -1
- package/dist/components/data-display/Badge/Badge.mjs +2 -2
- package/dist/components/data-display/Badge/Badge.module.css.mjs +1 -2
- package/dist/components/data-display/Card/Card.cjs.js +1 -1
- package/dist/components/data-display/Card/Card.mjs +2 -2
- package/dist/components/data-display/Card/Card.module.css.mjs +1 -2
- package/dist/components/data-display/Carousel/Carousel.cjs.js +1 -1
- package/dist/components/data-display/Carousel/Carousel.mjs +42 -42
- package/dist/components/data-display/Carousel/Carousel.module.css.mjs +1 -2
- package/dist/components/data-display/Chat/Chat.cjs.js +1 -1
- package/dist/components/data-display/Chat/Chat.mjs +114 -118
- package/dist/components/data-display/Chat/Chat.module.css.mjs +1 -2
- package/dist/components/data-display/Chat/streams.mjs +1 -2
- package/dist/components/data-display/Chip/Chip.cjs.js +1 -1
- package/dist/components/data-display/Chip/Chip.mjs +50 -54
- package/dist/components/data-display/Chip/Chip.module.css.mjs +1 -2
- package/dist/components/data-display/CodeBlock/CodeBlock.cjs.js +4 -4
- package/dist/components/data-display/CodeBlock/CodeBlock.mjs +113 -113
- package/dist/components/data-display/CodeBlock/CodeBlock.module.css.mjs +1 -2
- package/dist/components/data-display/CodeBlock/tokenize.mjs +1 -2
- package/dist/components/data-display/DataGrid/DataGrid.cjs.js +1 -1
- package/dist/components/data-display/DataGrid/DataGrid.d.ts +14 -3
- package/dist/components/data-display/DataGrid/DataGrid.mjs +352 -267
- package/dist/components/data-display/DataGrid/DataGrid.module.css.cjs.js +1 -1
- package/dist/components/data-display/DataGrid/DataGrid.module.css.mjs +6 -5
- package/dist/components/data-display/DataGrid/dataGridUtils.cjs.js +1 -1
- package/dist/components/data-display/DataGrid/dataGridUtils.d.ts +18 -0
- package/dist/components/data-display/DataGrid/dataGridUtils.mjs +100 -32
- package/dist/components/data-display/EmptyState/EmptyState.cjs.js +1 -1
- package/dist/components/data-display/EmptyState/EmptyState.mjs +53 -53
- package/dist/components/data-display/EmptyState/EmptyState.module.css.mjs +1 -2
- package/dist/components/data-display/Image/Image.cjs.js +1 -1
- package/dist/components/data-display/Image/Image.mjs +6 -6
- package/dist/components/data-display/Image/Image.module.css.mjs +1 -2
- package/dist/components/data-display/List/List.cjs.js +1 -1
- package/dist/components/data-display/List/List.mjs +68 -68
- package/dist/components/data-display/List/List.module.css.mjs +1 -2
- package/dist/components/data-display/Stat/Stat.cjs.js +1 -1
- package/dist/components/data-display/Stat/Stat.mjs +112 -112
- package/dist/components/data-display/Stat/Stat.module.css.mjs +1 -2
- package/dist/components/data-display/Table/Table.cjs.js +1 -1
- package/dist/components/data-display/Table/Table.mjs +187 -183
- package/dist/components/data-display/Table/Table.module.css.mjs +1 -2
- package/dist/components/data-display/Table/useTable.cjs.js +1 -1
- package/dist/components/data-display/Table/useTable.mjs +2 -2
- package/dist/components/data-display/Timeline/Timeline.cjs.js +1 -1
- package/dist/components/data-display/Timeline/Timeline.mjs +64 -64
- package/dist/components/data-display/Timeline/Timeline.module.css.mjs +1 -2
- package/dist/components/data-display/TreeView/TreeView.cjs.js +1 -1
- package/dist/components/data-display/TreeView/TreeView.mjs +107 -119
- package/dist/components/data-display/TreeView/TreeView.module.css.mjs +1 -2
- package/dist/components/data-display/TreeView/treeUtils.mjs +1 -2
- package/dist/components/data-display/VirtualList/VirtualList.cjs.js +1 -1
- package/dist/components/data-display/VirtualList/VirtualList.mjs +2 -2
- package/dist/components/data-display/VirtualList/VirtualList.module.css.mjs +1 -2
- package/dist/components/feedback/Alert/Alert.cjs.js +1 -1
- package/dist/components/feedback/Alert/Alert.mjs +56 -56
- package/dist/components/feedback/Alert/Alert.module.css.mjs +1 -2
- package/dist/components/feedback/Banner/Banner.cjs.js +1 -1
- package/dist/components/feedback/Banner/Banner.mjs +48 -48
- package/dist/components/feedback/Banner/Banner.module.css.mjs +1 -2
- package/dist/components/feedback/ErrorSummary/ErrorSummary.cjs.js +1 -1
- package/dist/components/feedback/ErrorSummary/ErrorSummary.mjs +10 -10
- package/dist/components/feedback/ErrorSummary/ErrorSummary.module.css.mjs +1 -2
- package/dist/components/feedback/Progress/Progress.cjs.js +1 -1
- package/dist/components/feedback/Progress/Progress.mjs +2 -2
- package/dist/components/feedback/Progress/Progress.module.css.mjs +1 -2
- package/dist/components/feedback/Skeleton/Skeleton.cjs.js +1 -1
- package/dist/components/feedback/Skeleton/Skeleton.mjs +73 -73
- package/dist/components/feedback/Skeleton/Skeleton.module.css.mjs +1 -2
- package/dist/components/feedback/Spinner/Spinner.cjs.js +1 -1
- package/dist/components/feedback/Spinner/Spinner.mjs +29 -29
- package/dist/components/feedback/Spinner/Spinner.module.css.mjs +1 -2
- package/dist/components/feedback/Toast/Toast.cjs.js +1 -1
- package/dist/components/feedback/Toast/Toast.mjs +42 -42
- package/dist/components/feedback/Toast/Toast.module.css.mjs +1 -2
- package/dist/components/feedback/Toast/ToastItem.cjs.js +1 -1
- package/dist/components/feedback/Toast/ToastItem.mjs +10 -10
- package/dist/components/feedback/Toast/ToastProvider.cjs.js +1 -1
- package/dist/components/feedback/Toast/ToastProvider.mjs +11 -11
- package/dist/components/feedback/Toast/ToastViewport.cjs.js +1 -1
- package/dist/components/feedback/Toast/ToastViewport.mjs +30 -30
- package/dist/components/feedback/Toast/toastStore.mjs +1 -2
- package/dist/components/feedback/Toast/toastTiming.cjs.js +1 -1
- package/dist/components/feedback/Toast/toastTiming.mjs +2 -2
- package/dist/components/feedback/Toast/useToast.cjs.js +1 -1
- package/dist/components/feedback/Toast/useToast.mjs +2 -2
- package/dist/components/feedback/Toast/useToastAnnouncer.cjs.js +1 -1
- package/dist/components/feedback/Toast/useToastAnnouncer.mjs +2 -2
- package/dist/components/forms/CheckBox/CheckBox.cjs.js +1 -1
- package/dist/components/forms/CheckBox/CheckBox.mjs +2 -2
- package/dist/components/forms/CheckBox/CheckBox.module.css.mjs +1 -2
- package/dist/components/forms/ColorPicker/ColorInput.cjs.js +1 -1
- package/dist/components/forms/ColorPicker/ColorInput.mjs +43 -43
- package/dist/components/forms/ColorPicker/ColorPicker.cjs.js +1 -1
- package/dist/components/forms/ColorPicker/ColorPicker.mjs +153 -153
- package/dist/components/forms/ColorPicker/ColorPicker.module.css.mjs +1 -2
- package/dist/components/forms/ColorPicker/colorUtils.mjs +1 -2
- package/dist/components/forms/Combobox/Combobox.cjs.js +1 -1
- package/dist/components/forms/Combobox/Combobox.mjs +200 -213
- package/dist/components/forms/Combobox/Combobox.module.css.mjs +1 -2
- package/dist/components/forms/Combobox/ComboboxPopup.cjs.js +1 -1
- package/dist/components/forms/Combobox/ComboboxPopup.mjs +164 -121
- package/dist/components/forms/Combobox/comboboxUtils.cjs.js +1 -1
- package/dist/components/forms/Combobox/comboboxUtils.d.ts +4 -1
- package/dist/components/forms/Combobox/comboboxUtils.mjs +21 -20
- package/dist/components/forms/DatePicker/Calendar.cjs.js +1 -1
- package/dist/components/forms/DatePicker/Calendar.mjs +60 -66
- package/dist/components/forms/DatePicker/Calendar.module.css.mjs +1 -2
- package/dist/components/forms/DatePicker/DatePicker.cjs.js +1 -1
- package/dist/components/forms/DatePicker/DatePicker.mjs +72 -74
- package/dist/components/forms/DatePicker/DatePicker.module.css.mjs +1 -2
- package/dist/components/forms/DatePicker/DateRangePicker.cjs.js +1 -1
- package/dist/components/forms/DatePicker/DateRangePicker.mjs +117 -117
- package/dist/components/forms/DatePicker/DateRangePicker.module.css.mjs +1 -2
- package/dist/components/forms/DatePicker/dateUtils.mjs +1 -2
- package/dist/components/forms/DateTimePicker/DateTimePicker.cjs.js +1 -1
- package/dist/components/forms/DateTimePicker/DateTimePicker.mjs +19 -19
- package/dist/components/forms/DateTimePicker/DateTimePicker.module.css.mjs +1 -2
- package/dist/components/forms/Field/Field.cjs.js +1 -1
- package/dist/components/forms/Field/Field.mjs +14 -14
- package/dist/components/forms/Field/Field.module.css.mjs +1 -2
- package/dist/components/forms/Field/FieldContext.cjs.js +1 -1
- package/dist/components/forms/Field/FieldContext.mjs +2 -2
- package/dist/components/forms/FileUpload/FileUpload.cjs.js +1 -1
- package/dist/components/forms/FileUpload/FileUpload.mjs +250 -255
- package/dist/components/forms/FileUpload/FileUpload.module.css.mjs +1 -2
- package/dist/components/forms/Input/Input.cjs.js +1 -1
- package/dist/components/forms/Input/Input.mjs +35 -35
- package/dist/components/forms/Input/Input.module.css.mjs +1 -2
- package/dist/components/forms/NumberInput/NumberInput.cjs.js +1 -1
- package/dist/components/forms/NumberInput/NumberInput.mjs +137 -142
- package/dist/components/forms/NumberInput/NumberInput.module.css.mjs +1 -2
- package/dist/components/forms/PasswordInput/PasswordInput.cjs.js +1 -1
- package/dist/components/forms/PasswordInput/PasswordInput.mjs +142 -142
- package/dist/components/forms/PasswordInput/PasswordInput.module.css.mjs +1 -2
- package/dist/components/forms/PinInput/PinInput.cjs.js +1 -1
- package/dist/components/forms/PinInput/PinInput.mjs +12 -12
- package/dist/components/forms/PinInput/PinInput.module.css.mjs +1 -2
- package/dist/components/forms/Radio/Radio.cjs.js +1 -1
- package/dist/components/forms/Radio/Radio.mjs +2 -2
- package/dist/components/forms/Radio/Radio.module.css.mjs +1 -2
- package/dist/components/forms/Rating/Rating.cjs.js +1 -1
- package/dist/components/forms/Rating/Rating.mjs +110 -109
- package/dist/components/forms/Rating/Rating.module.css.mjs +1 -2
- package/dist/components/forms/SearchInput/SearchInput.cjs.js +1 -1
- package/dist/components/forms/SearchInput/SearchInput.mjs +118 -126
- package/dist/components/forms/SearchInput/SearchInput.module.css.mjs +1 -2
- package/dist/components/forms/SegmentedControl/SegmentedControl.cjs.js +1 -1
- package/dist/components/forms/SegmentedControl/SegmentedControl.mjs +46 -43
- package/dist/components/forms/SegmentedControl/SegmentedControl.module.css.mjs +1 -2
- package/dist/components/forms/Select/Select.cjs.js +1 -1
- package/dist/components/forms/Select/Select.mjs +2 -2
- package/dist/components/forms/Select/Select.module.css.mjs +1 -2
- package/dist/components/forms/Slider/Slider.cjs.js +1 -1
- package/dist/components/forms/Slider/Slider.mjs +2 -2
- package/dist/components/forms/Slider/Slider.module.css.mjs +1 -2
- package/dist/components/forms/Switch/Switch.cjs.js +1 -1
- package/dist/components/forms/Switch/Switch.mjs +39 -39
- package/dist/components/forms/Switch/Switch.module.css.mjs +1 -2
- package/dist/components/forms/TagInput/TagInput.cjs.js +1 -1
- package/dist/components/forms/TagInput/TagInput.mjs +197 -203
- package/dist/components/forms/TagInput/TagInput.module.css.mjs +1 -2
- package/dist/components/forms/Textarea/Textarea.cjs.js +1 -1
- package/dist/components/forms/Textarea/Textarea.mjs +59 -59
- package/dist/components/forms/Textarea/Textarea.module.css.mjs +1 -2
- package/dist/components/forms/TimePicker/TimePicker.cjs.js +1 -1
- package/dist/components/forms/TimePicker/TimePicker.mjs +14 -16
- package/dist/components/forms/TimePicker/TimePicker.module.css.mjs +1 -2
- package/dist/components/forms/TimePicker/timeUtils.cjs.js +1 -1
- package/dist/components/forms/TimePicker/timeUtils.d.ts +4 -1
- package/dist/components/forms/TimePicker/timeUtils.mjs +43 -38
- package/dist/components/forms/ToggleGroup/ToggleGroup.cjs.js +1 -1
- package/dist/components/forms/ToggleGroup/ToggleGroup.mjs +10 -10
- package/dist/components/forms/ToggleGroup/ToggleGroup.module.css.mjs +1 -2
- package/dist/components/layout/Box/Box.mjs +1 -2
- package/dist/components/layout/Box/Box.module.css.mjs +1 -2
- package/dist/components/layout/Container/Container.mjs +1 -2
- package/dist/components/layout/Container/Container.module.css.mjs +1 -2
- package/dist/components/layout/Divider/Divider.mjs +1 -2
- package/dist/components/layout/Divider/Divider.module.css.mjs +1 -2
- package/dist/components/layout/Flex/Flex.cjs.js +1 -1
- package/dist/components/layout/Flex/Flex.mjs +12 -13
- package/dist/components/layout/Flex/Flex.module.css.mjs +1 -2
- package/dist/components/layout/Grid/Grid.cjs.js +1 -1
- package/dist/components/layout/Grid/Grid.mjs +20 -21
- package/dist/components/layout/Grid/Grid.module.css.mjs +1 -2
- package/dist/components/layout/ResizablePanels/ResizablePanels.cjs.js +1 -1
- package/dist/components/layout/ResizablePanels/ResizablePanels.mjs +17 -17
- package/dist/components/layout/ResizablePanels/ResizablePanels.module.css.mjs +1 -2
- package/dist/components/layout/ScrollArea/ScrollArea.cjs.js +1 -1
- package/dist/components/layout/ScrollArea/ScrollArea.mjs +2 -2
- package/dist/components/layout/ScrollArea/ScrollArea.module.css.mjs +1 -2
- package/dist/components/layout/Stack/Stack.cjs.js +1 -1
- package/dist/components/layout/Stack/Stack.mjs +8 -9
- package/dist/components/layout/Stack/Stack.module.css.mjs +1 -2
- package/dist/components/navigation/Breadcrumbs/Breadcrumbs.cjs.js +1 -1
- package/dist/components/navigation/Breadcrumbs/Breadcrumbs.mjs +41 -41
- package/dist/components/navigation/Breadcrumbs/Breadcrumbs.module.css.mjs +1 -2
- package/dist/components/navigation/ContextMenu/ContextMenu.cjs.js +1 -1
- package/dist/components/navigation/ContextMenu/ContextMenu.mjs +48 -48
- package/dist/components/navigation/ContextMenu/ContextMenu.module.css.mjs +1 -2
- package/dist/components/navigation/Link/Link.cjs.js +1 -1
- package/dist/components/navigation/Link/Link.mjs +6 -7
- package/dist/components/navigation/Link/Link.module.css.mjs +1 -2
- package/dist/components/navigation/Menu/Menu.cjs.js +1 -1
- package/dist/components/navigation/Menu/Menu.mjs +11 -11
- package/dist/components/navigation/Menu/Menu.module.css.mjs +1 -2
- package/dist/components/navigation/Menu/MenuContent.cjs.js +1 -1
- package/dist/components/navigation/Menu/MenuContent.mjs +46 -46
- package/dist/components/navigation/Menu/MenuContext.cjs.js +1 -1
- package/dist/components/navigation/Menu/MenuContext.mjs +2 -2
- package/dist/components/navigation/Menu/MenuItem.cjs.js +1 -1
- package/dist/components/navigation/Menu/MenuItem.mjs +35 -39
- package/dist/components/navigation/Menu/MenuSub.cjs.js +1 -1
- package/dist/components/navigation/Menu/MenuSub.mjs +16 -20
- package/dist/components/navigation/Menu/useMenuRoot.cjs.js +1 -1
- package/dist/components/navigation/Menu/useMenuRoot.mjs +2 -2
- package/dist/components/navigation/Navbar/Navbar.cjs.js +1 -1
- package/dist/components/navigation/Navbar/Navbar.mjs +111 -111
- package/dist/components/navigation/Navbar/Navbar.module.css.mjs +1 -2
- package/dist/components/navigation/Pagination/Pagination.cjs.js +1 -1
- package/dist/components/navigation/Pagination/Pagination.mjs +31 -35
- package/dist/components/navigation/Pagination/Pagination.module.css.mjs +1 -2
- package/dist/components/navigation/Sidebar/Sidebar.cjs.js +1 -1
- package/dist/components/navigation/Sidebar/Sidebar.mjs +52 -52
- package/dist/components/navigation/Sidebar/Sidebar.module.css.mjs +1 -2
- package/dist/components/navigation/Sidebar/SidebarContext.cjs.js +1 -1
- package/dist/components/navigation/Sidebar/SidebarContext.mjs +2 -2
- package/dist/components/navigation/Sidebar/SidebarParts.cjs.js +1 -1
- package/dist/components/navigation/Sidebar/SidebarParts.mjs +76 -80
- package/dist/components/navigation/SkipLink/SkipLink.cjs.js +1 -1
- package/dist/components/navigation/SkipLink/SkipLink.mjs +12 -12
- package/dist/components/navigation/SkipLink/SkipLink.module.css.mjs +1 -2
- package/dist/components/navigation/Stepper/Stepper.cjs.js +1 -1
- package/dist/components/navigation/Stepper/Stepper.mjs +46 -46
- package/dist/components/navigation/Stepper/Stepper.module.css.mjs +1 -2
- package/dist/components/navigation/Tabs/Tabs.cjs.js +1 -1
- package/dist/components/navigation/Tabs/Tabs.mjs +2 -2
- package/dist/components/navigation/Tabs/Tabs.module.css.mjs +1 -2
- package/dist/components/overlays/CommandPalette/CommandPalette.cjs.js +1 -1
- package/dist/components/overlays/CommandPalette/CommandPalette.mjs +206 -206
- package/dist/components/overlays/CommandPalette/CommandPalette.module.css.mjs +1 -2
- package/dist/components/overlays/CommandPalette/CommandPaletteContext.cjs.js +1 -1
- package/dist/components/overlays/CommandPalette/CommandPaletteContext.mjs +2 -2
- package/dist/components/overlays/CommandPalette/CommandPaletteParts.cjs.js +1 -1
- package/dist/components/overlays/CommandPalette/CommandPaletteParts.mjs +104 -104
- package/dist/components/overlays/CommandPalette/commandPaletteUtils.cjs.js +1 -1
- package/dist/components/overlays/CommandPalette/commandPaletteUtils.mjs +62 -60
- package/dist/components/overlays/Drawer/Drawer.cjs.js +1 -1
- package/dist/components/overlays/Drawer/Drawer.mjs +31 -31
- package/dist/components/overlays/Drawer/Drawer.module.css.mjs +1 -2
- package/dist/components/overlays/Drawer/DrawerContent.cjs.js +1 -1
- package/dist/components/overlays/Drawer/DrawerContent.mjs +99 -99
- package/dist/components/overlays/Drawer/DrawerContext.cjs.js +1 -1
- package/dist/components/overlays/Drawer/DrawerContext.mjs +2 -2
- package/dist/components/overlays/Drawer/DrawerParts.cjs.js +1 -1
- package/dist/components/overlays/Drawer/DrawerParts.mjs +18 -18
- package/dist/components/overlays/Drawer/internal.mjs +1 -2
- package/dist/components/overlays/Drawer/useDragToClose.cjs.js +1 -1
- package/dist/components/overlays/Drawer/useDragToClose.mjs +2 -2
- package/dist/components/overlays/HoverCard/HoverCard.cjs.js +1 -1
- package/dist/components/overlays/HoverCard/HoverCard.mjs +31 -31
- package/dist/components/overlays/HoverCard/HoverCard.module.css.mjs +1 -2
- package/dist/components/overlays/Modal/ConfirmModal.cjs.js +1 -1
- package/dist/components/overlays/Modal/ConfirmModal.mjs +21 -23
- package/dist/components/overlays/Modal/Modal.cjs.js +1 -1
- package/dist/components/overlays/Modal/Modal.mjs +47 -47
- package/dist/components/overlays/Modal/Modal.module.css.mjs +1 -2
- package/dist/components/overlays/Modal/ModalContent.cjs.js +1 -1
- package/dist/components/overlays/Modal/ModalContent.mjs +24 -24
- package/dist/components/overlays/Modal/ModalContext.cjs.js +1 -1
- package/dist/components/overlays/Modal/ModalContext.mjs +2 -2
- package/dist/components/overlays/Modal/useScrollRegion.cjs.js +1 -1
- package/dist/components/overlays/Modal/useScrollRegion.mjs +2 -2
- package/dist/components/overlays/Popover/Popover.cjs.js +1 -1
- package/dist/components/overlays/Popover/Popover.mjs +40 -40
- package/dist/components/overlays/Popover/Popover.module.css.mjs +1 -2
- package/dist/components/overlays/Popover/PopoverContent.cjs.js +1 -1
- package/dist/components/overlays/Popover/PopoverContent.mjs +39 -39
- package/dist/components/overlays/Popover/PopoverContext.cjs.js +1 -1
- package/dist/components/overlays/Popover/PopoverContext.mjs +2 -2
- package/dist/components/overlays/Tooltip/Tooltip.cjs.js +1 -1
- package/dist/components/overlays/Tooltip/Tooltip.mjs +100 -95
- package/dist/components/overlays/Tooltip/Tooltip.module.css.mjs +1 -2
- package/dist/components/primitives/Button/Button.cjs.js +1 -1
- package/dist/components/primitives/Button/Button.mjs +59 -63
- package/dist/components/primitives/Button/Button.module.css.mjs +1 -2
- package/dist/components/primitives/Icon/Icon.cjs.js +1 -1
- package/dist/components/primitives/Icon/Icon.mjs +5 -6
- package/dist/components/primitives/Icon/Icon.module.css.mjs +1 -2
- package/dist/components/primitives/Icon/IconSvg.mjs +1 -2
- package/dist/components/primitives/Icon/icons.mjs +1 -2
- package/dist/components/primitives/Kbd/Kbd.cjs.js +1 -1
- package/dist/components/primitives/Kbd/Kbd.mjs +30 -30
- package/dist/components/primitives/Kbd/Kbd.module.css.mjs +1 -2
- package/dist/components/primitives/Typography/Typography.mjs +1 -2
- package/dist/components/primitives/Typography/Typography.module.css.mjs +1 -2
- package/dist/components/utilities/LocaleProvider/LocaleProvider.cjs.js +1 -1
- package/dist/components/utilities/LocaleProvider/LocaleProvider.mjs +11 -11
- package/dist/components/utilities/LocaleProvider/LocaleProvider.module.css.mjs +1 -2
- package/dist/components/utilities/Portal/Portal.cjs.js +1 -1
- package/dist/components/utilities/Portal/Portal.mjs +2 -2
- package/dist/components/utilities/Theme/Theme.cjs.js +1 -1
- package/dist/components/utilities/Theme/Theme.mjs +13 -13
- package/dist/components/utilities/Theme/Theme.module.css.mjs +1 -2
- package/dist/components/utilities/VisuallyHidden/VisuallyHidden.mjs +1 -2
- package/dist/components/utilities/VisuallyHidden/VisuallyHidden.module.css.mjs +1 -2
- package/dist/hooks/elementSource.cjs.js +1 -1
- package/dist/hooks/elementSource.mjs +4 -3
- package/dist/hooks/useClipboard.cjs.js +1 -1
- package/dist/hooks/useClipboard.mjs +2 -2
- package/dist/hooks/useControllableState.cjs.js +1 -1
- package/dist/hooks/useControllableState.mjs +2 -2
- package/dist/hooks/useDisclosure.cjs.js +1 -1
- package/dist/hooks/useDisclosure.mjs +2 -2
- package/dist/hooks/useDismiss.cjs.js +1 -1
- package/dist/hooks/useDismiss.mjs +2 -2
- package/dist/hooks/useElementObservers.cjs.js +1 -1
- package/dist/hooks/useElementObservers.mjs +2 -2
- package/dist/hooks/useEnvironment.cjs.js +1 -1
- package/dist/hooks/useEnvironment.mjs +2 -2
- package/dist/hooks/useFloatingPosition.cjs.js +1 -1
- package/dist/hooks/useFloatingPosition.mjs +2 -2
- package/dist/hooks/useFocusTrap.cjs.js +1 -1
- package/dist/hooks/useFocusTrap.mjs +4 -15
- package/dist/hooks/useFormReset.cjs.js +1 -1
- package/dist/hooks/useFormReset.mjs +2 -2
- package/dist/hooks/useFormValidation.cjs.js +1 -1
- package/dist/hooks/useFormValidation.mjs +2 -2
- package/dist/hooks/useHotkeys.cjs.js +1 -1
- package/dist/hooks/useHotkeys.mjs +2 -2
- package/dist/hooks/useInertOutside.cjs.js +1 -1
- package/dist/hooks/useInertOutside.mjs +5 -9
- package/dist/hooks/useMediaQuery.cjs.js +1 -1
- package/dist/hooks/useMediaQuery.mjs +2 -2
- package/dist/hooks/useMergedRef.cjs.js +1 -1
- package/dist/hooks/useMergedRef.mjs +2 -2
- package/dist/hooks/useOverlayLayer.cjs.js +1 -1
- package/dist/hooks/useOverlayLayer.mjs +3 -3
- package/dist/hooks/useResponsiveValue.cjs.js +1 -1
- package/dist/hooks/useResponsiveValue.mjs +2 -2
- package/dist/hooks/useScrollLock.cjs.js +1 -1
- package/dist/hooks/useScrollLock.mjs +2 -2
- package/dist/hooks/useStorage.cjs.js +1 -1
- package/dist/hooks/useStorage.mjs +2 -2
- package/dist/hooks/useTiming.cjs.js +1 -1
- package/dist/hooks/useTiming.mjs +10 -15
- package/dist/hooks/useVirtualizer.cjs.js +1 -1
- package/dist/hooks/useVirtualizer.d.ts +13 -0
- package/dist/hooks/useVirtualizer.mjs +93 -54
- package/dist/i18n/en.mjs +1 -2
- package/dist/i18n/merge.mjs +1 -2
- package/dist/i18n/plural.mjs +1 -2
- package/dist/index.cjs.js +1 -1
- package/dist/index.mjs +114 -114
- package/dist/locales/ar.mjs +1 -2
- package/dist/locales/bn.mjs +1 -2
- package/dist/locales/cs.mjs +1 -2
- package/dist/locales/da.mjs +1 -2
- package/dist/locales/de.mjs +1 -2
- package/dist/locales/el.mjs +1 -2
- package/dist/locales/es.mjs +1 -2
- package/dist/locales/fa.mjs +1 -2
- package/dist/locales/fi.mjs +1 -2
- package/dist/locales/fr.mjs +1 -2
- package/dist/locales/he.mjs +1 -2
- package/dist/locales/hi.mjs +1 -2
- package/dist/locales/hu.mjs +1 -2
- package/dist/locales/id.mjs +1 -2
- package/dist/locales/it.mjs +1 -2
- package/dist/locales/ja.mjs +1 -2
- package/dist/locales/ko.mjs +1 -2
- package/dist/locales/nb.mjs +1 -2
- package/dist/locales/nl.mjs +1 -2
- package/dist/locales/pl.mjs +1 -2
- package/dist/locales/pt-BR.mjs +1 -2
- package/dist/locales/ro.mjs +1 -2
- package/dist/locales/ru.mjs +1 -2
- package/dist/locales/sv.mjs +1 -2
- package/dist/locales/th.mjs +1 -2
- package/dist/locales/tr.mjs +1 -2
- package/dist/locales/uk.mjs +1 -2
- package/dist/locales/ur.mjs +1 -2
- package/dist/locales/vi.mjs +1 -2
- package/dist/locales/zh-Hans.mjs +1 -2
- package/dist/locales/zh-Hant.mjs +1 -2
- package/dist/types/common.mjs +1 -2
- package/dist/utils/announce.cjs.js +1 -1
- package/dist/utils/announce.mjs +3 -4
- package/dist/utils/brandPalette.mjs +1 -2
- package/dist/utils/clipboard.mjs +1 -2
- package/dist/utils/cx.mjs +1 -2
- package/dist/utils/fillSlot.cjs.js +1 -1
- package/dist/utils/fillSlot.mjs +2 -2
- package/dist/utils/flattenChildren.mjs +1 -2
- package/dist/utils/hotkeys.mjs +1 -2
- package/dist/utils/intl.cjs.js +1 -0
- package/dist/utils/intl.d.ts +10 -0
- package/dist/utils/intl.mjs +15 -0
- package/dist/utils/refs.mjs +1 -2
- package/dist/utils/responsive.mjs +1 -2
- package/dist/utils/slot.mjs +1 -2
- package/dist/utils/validators.mjs +1 -2
- package/dist/vjdesigns-ui.css +1 -1
- package/dist/vjdesigns-ui.css.d.ts +2 -0
- package/package.json +24 -14
package/dist/ai/registry.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vjdesigns/vjdesigns-ui",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"summary": "Accessible React 19 component library: WCAG 2.2 AA verified (axe on every story, a contrast check on every color pair), 31 languages with right-to-left support, themeable with any brand color (auto-adjusted to stay accessible), tree-shakable, no runtime dependencies besides React.",
|
|
5
5
|
"install": "npm install @vjdesigns/vjdesigns-ui",
|
|
6
6
|
"stylesheet": "@vjdesigns/vjdesigns-ui/dist/vjdesigns-ui.css",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
{
|
|
23
23
|
"id": "usage",
|
|
24
24
|
"title": "Usage",
|
|
25
|
-
"markdown": "The components are built with React. You can use them directly in a React project. In Angular or Vue, you mount them inside a small wrapper component, as shown below.\n\n### React\n\n```tsx\nimport { useState } from \"react\";\nimport { Button, CheckBox } from \"@vjdesigns/vjdesigns-ui\";\n\nexport function SignupForm() {\n const [accepted, setAccepted] = useState(false);\n\n return (\n <form>\n <CheckBox\n label=\"Accept terms\"\n checked={accepted}\n onCheckedChange={setAccepted}\n />\n <Button\n variant=\"solid\"\n tone=\"primary\"\n size=\"md\"\n disabled={!accepted}\n onClick={() => console.log(\"Submitted\")}\n >\n Submit\n </Button>\n </form>\n );\n}\n```\n\n### Angular\n\nMake a standalone wrapper that renders the React component into its host element. The wrapper uses `createElement`, so you don't need to change your JSX or TSX settings.\n\n```ts\n// vj-button.component.ts\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n ViewChild,\n} from \"@angular/core\";\nimport { createElement, type MouseEvent as ReactMouseEvent, type ReactElement } from \"react\";\nimport { createRoot, Root } from \"react-dom/client\";\nimport {\n Button,\n type ButtonProps,\n type ButtonVariant,\n type Size,\n type Tone,\n} from \"@vjdesigns/vjdesigns-ui\";\n\n// Button has overloaded types (for `href` and `as`). Narrowing it here lets createElement type-check.\nconst ReactButton = Button as (props: ButtonProps) => ReactElement;\n\n@Component({\n selector: \"vj-button\",\n standalone: true,\n template: `<span #host></span>`,\n})\nexport class VjButtonComponent implements AfterViewInit, OnChanges, OnDestroy {\n @ViewChild(\"host\", { static: true }) host!: ElementRef<HTMLElement>;\n\n @Input() label = \"\";\n @Input() variant: ButtonVariant = \"solid\";\n @Input() tone: Tone = \"primary\";\n @Input() size: Size = \"md\";\n @Input() disabled = false;\n @Output() clicked = new EventEmitter<MouseEvent>();\n\n private root?: Root;\n\n ngAfterViewInit() {\n this.root = createRoot(this.host.nativeElement);\n this.render();\n }\n\n ngOnChanges() {\n this.render();\n }\n\n ngOnDestroy() {\n this.root?.unmount();\n }\n\n private render() {\n this.root?.render(\n createElement(\n ReactButton,\n {\n variant: this.variant,\n tone: this.tone,\n size: this.size,\n disabled: this.disabled,\n onClick: (event: ReactMouseEvent) => this.clicked.emit(event.nativeEvent),\n },\n this.label // the button's text is passed as children\n )\n );\n }\n}\n```\n\nImport the wrapper wherever you need it:\n\n```ts\n// app.component.ts\nimport { Component } from \"@angular/core\";\nimport { VjButtonComponent } from \"./vj-button.component\";\n\n@Component({\n selector: \"app-root\",\n standalone: true,\n imports: [VjButtonComponent],\n template: `<vj-button label=\"Submit\" tone=\"primary\" (clicked)=\"onSubmit()\" />`,\n})\nexport class AppComponent {\n onSubmit() {\n console.log(\"Submitted\");\n }\n}\n```\n\n### Vue 3\n\nMake a wrapper component that mounts the React component when it loads and re-renders it whenever its props change.\n\n```vue\n<!-- VjButton.vue -->\n<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref, watch } from \"vue\";\nimport { createElement, type MouseEvent as ReactMouseEvent, type ReactElement } from \"react\";\nimport { createRoot, type Root } from \"react-dom/client\";\nimport {\n Button,\n type ButtonProps,\n type ButtonVariant,\n type Size,\n type Tone,\n} from \"@vjdesigns/vjdesigns-ui\";\n\n// Button has overloaded types (for `href` and `as`). Narrowing it here lets createElement type-check.\nconst ReactButton = Button as (props: ButtonProps) => ReactElement;\n\nconst props = withDefaults(\n defineProps<{\n label: string;\n variant?: ButtonVariant;\n tone?: Tone;\n size?: Size;\n disabled?: boolean;\n }>(),\n { variant: \"solid\", tone: \"primary\", size: \"md\", disabled: false }\n);\n\nconst emit = defineEmits<{ click: [event: MouseEvent] }>();\n\nconst host = ref<HTMLElement | null>(null);\nlet root: Root | undefined;\n\nfunction render() {\n root?.render(\n createElement(\n ReactButton,\n {\n variant: props.variant,\n tone: props.tone,\n size: props.size,\n disabled: props.disabled,\n onClick: (event: ReactMouseEvent) => emit(\"click\", event.nativeEvent),\n },\n props.label // the button's text is passed as children\n )\n );\n}\n\nonMounted(() => {\n root = createRoot(host.value!);\n render();\n});\n\nwatch(() => ({ ...props }), render);\n\nonBeforeUnmount(() => root?.unmount());\n</script>\n\n<template>\n <span ref=\"host\" />\n</template>\n```\n\nUse it like any other Vue component:\n\n```vue\n<script setup lang=\"ts\">\nimport VjButton from \"./VjButton.vue\";\n\nconst onSubmit = () => console.log(\"Submitted\");\n</script>\n\n<template>\n <VjButton label=\"Submit\" tone=\"primary\" @click=\"onSubmit\" />\n</template>\n```\n\n> **Tip:** Wrap `CheckBox` and any other component the same way. Pass its props into `createElement`, and send its callbacks back out as Angular outputs or Vue emits. For `CheckBox`, that means sending `onCheckedChange` back out."
|
|
25
|
+
"markdown": "The components are built with React. You can use them directly in a React project. In Angular or Vue, you mount them inside a small wrapper component, as shown below.\n\n### React\n\n```tsx\nimport { useState } from \"react\";\nimport { Button, CheckBox } from \"@vjdesigns/vjdesigns-ui\";\n\nexport function SignupForm() {\n const [accepted, setAccepted] = useState(false);\n\n return (\n <form>\n <CheckBox\n label=\"Accept terms\"\n checked={accepted}\n onCheckedChange={setAccepted}\n />\n <Button\n variant=\"solid\"\n tone=\"primary\"\n size=\"md\"\n disabled={!accepted}\n onClick={() => console.log(\"Submitted\")}\n >\n Submit\n </Button>\n </form>\n );\n}\n```\n\n### Next.js (App Router) and React Server Components\n\nThe library works in Server Components. Interactive components (anything with state, effects, or context: `Button`, `DataGrid`, `Modal`, ...) are marked `\"use client\"`, so you can render them from a Server Component like any client component. Utilities (`cx`, `sortRows`, `createBrandPalette`, `getLocaleDirection`, ...) and the locale catalogs have no directive, so you can call or read them on the server too. Every component also renders on the server for the first paint.\n\nPut the providers in a small client file of your own, and render it from the root layout:\n\n```tsx\n// app/providers.tsx\n\"use client\";\nimport { LocaleProvider, ToastProvider } from \"@vjdesigns/vjdesigns-ui\";\nimport es from \"@vjdesigns/vjdesigns-ui/locales/es\";\nimport type { ReactNode } from \"react\";\n\nexport function Providers({ children }: { children: ReactNode }) {\n return (\n <LocaleProvider locale=\"es\" messages={es}>\n <ToastProvider>{children}</ToastProvider>\n </LocaleProvider>\n );\n}\n```\n\n```tsx\n// app/layout.tsx (a Server Component)\nimport \"@vjdesigns/vjdesigns-ui/dist/vjdesigns-ui.css\";\nimport { getLocaleDirection } from \"@vjdesigns/vjdesigns-ui\";\nimport { Providers } from \"./providers\";\n\nexport default function RootLayout({ children }: { children: React.ReactNode }) {\n return (\n <html lang=\"es\" dir={getLocaleDirection(\"es\")}>\n <body>\n <Providers>{children}</Providers>\n </body>\n </html>\n );\n}\n```\n\nTwo rules of Server Components to keep in mind:\n\n- **Functions can't be passed from a Server Component to a client one.** That includes event handlers (`onClick`), DataGrid columns with `cell` or `value` functions, and the locale catalogs themselves (their plural messages are functions, which is why `LocaleProvider` goes in the client providers file above). Render those components from your own `\"use client\"` file.\n- **Compound parts can't be reached with a dot from a Server Component** (`Tabs.List`, `Menu.Item`): Next.js reports \"You cannot dot into a client module\". Use them inside a `\"use client\"` file, or use the named exports where they exist (`CardHeader`, `CardBody`, `NavbarBrand`, ...).\n\n### Angular\n\nMake a standalone wrapper that renders the React component into its host element. The wrapper uses `createElement`, so you don't need to change your JSX or TSX settings.\n\n```ts\n// vj-button.component.ts\nimport {\n AfterViewInit,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n ViewChild,\n} from \"@angular/core\";\nimport { createElement, type MouseEvent as ReactMouseEvent, type ReactElement } from \"react\";\nimport { createRoot, Root } from \"react-dom/client\";\nimport {\n Button,\n type ButtonProps,\n type ButtonVariant,\n type Size,\n type Tone,\n} from \"@vjdesigns/vjdesigns-ui\";\n\n// Button has overloaded types (for `href` and `as`). Narrowing it here lets createElement type-check.\nconst ReactButton = Button as (props: ButtonProps) => ReactElement;\n\n@Component({\n selector: \"vj-button\",\n standalone: true,\n template: `<span #host></span>`,\n})\nexport class VjButtonComponent implements AfterViewInit, OnChanges, OnDestroy {\n @ViewChild(\"host\", { static: true }) host!: ElementRef<HTMLElement>;\n\n @Input() label = \"\";\n @Input() variant: ButtonVariant = \"solid\";\n @Input() tone: Tone = \"primary\";\n @Input() size: Size = \"md\";\n @Input() disabled = false;\n @Output() clicked = new EventEmitter<MouseEvent>();\n\n private root?: Root;\n\n ngAfterViewInit() {\n this.root = createRoot(this.host.nativeElement);\n this.render();\n }\n\n ngOnChanges() {\n this.render();\n }\n\n ngOnDestroy() {\n this.root?.unmount();\n }\n\n private render() {\n this.root?.render(\n createElement(\n ReactButton,\n {\n variant: this.variant,\n tone: this.tone,\n size: this.size,\n disabled: this.disabled,\n onClick: (event: ReactMouseEvent) => this.clicked.emit(event.nativeEvent),\n },\n this.label // the button's text is passed as children\n )\n );\n }\n}\n```\n\nImport the wrapper wherever you need it:\n\n```ts\n// app.component.ts\nimport { Component } from \"@angular/core\";\nimport { VjButtonComponent } from \"./vj-button.component\";\n\n@Component({\n selector: \"app-root\",\n standalone: true,\n imports: [VjButtonComponent],\n template: `<vj-button label=\"Submit\" tone=\"primary\" (clicked)=\"onSubmit()\" />`,\n})\nexport class AppComponent {\n onSubmit() {\n console.log(\"Submitted\");\n }\n}\n```\n\n### Vue 3\n\nMake a wrapper component that mounts the React component when it loads and re-renders it whenever its props change.\n\n```vue\n<!-- VjButton.vue -->\n<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref, watch } from \"vue\";\nimport { createElement, type MouseEvent as ReactMouseEvent, type ReactElement } from \"react\";\nimport { createRoot, type Root } from \"react-dom/client\";\nimport {\n Button,\n type ButtonProps,\n type ButtonVariant,\n type Size,\n type Tone,\n} from \"@vjdesigns/vjdesigns-ui\";\n\n// Button has overloaded types (for `href` and `as`). Narrowing it here lets createElement type-check.\nconst ReactButton = Button as (props: ButtonProps) => ReactElement;\n\nconst props = withDefaults(\n defineProps<{\n label: string;\n variant?: ButtonVariant;\n tone?: Tone;\n size?: Size;\n disabled?: boolean;\n }>(),\n { variant: \"solid\", tone: \"primary\", size: \"md\", disabled: false }\n);\n\nconst emit = defineEmits<{ click: [event: MouseEvent] }>();\n\nconst host = ref<HTMLElement | null>(null);\nlet root: Root | undefined;\n\nfunction render() {\n root?.render(\n createElement(\n ReactButton,\n {\n variant: props.variant,\n tone: props.tone,\n size: props.size,\n disabled: props.disabled,\n onClick: (event: ReactMouseEvent) => emit(\"click\", event.nativeEvent),\n },\n props.label // the button's text is passed as children\n )\n );\n}\n\nonMounted(() => {\n root = createRoot(host.value!);\n render();\n});\n\nwatch(() => ({ ...props }), render);\n\nonBeforeUnmount(() => root?.unmount());\n</script>\n\n<template>\n <span ref=\"host\" />\n</template>\n```\n\nUse it like any other Vue component:\n\n```vue\n<script setup lang=\"ts\">\nimport VjButton from \"./VjButton.vue\";\n\nconst onSubmit = () => console.log(\"Submitted\");\n</script>\n\n<template>\n <VjButton label=\"Submit\" tone=\"primary\" @click=\"onSubmit\" />\n</template>\n```\n\n> **Tip:** Wrap `CheckBox` and any other component the same way. Pass its props into `createElement`, and send its callbacks back out as Angular outputs or Vue emits. For `CheckBox`, that means sending `onCheckedChange` back out."
|
|
26
26
|
},
|
|
27
27
|
{
|
|
28
28
|
"id": "theming",
|
|
@@ -325,7 +325,7 @@
|
|
|
325
325
|
"category": "data-display",
|
|
326
326
|
"folder": "Avatar",
|
|
327
327
|
"import": "import { Avatar } from \"@vjdesigns/vjdesigns-ui\";",
|
|
328
|
-
"description": "A person's photo (`src`), with a fallback chain of image, initials (from\
|
|
328
|
+
"description": "A person's photo (`src`), with a fallback chain of image, initials (from\n`name`), then a user icon, so it always shows something. Supports a border,\na presence status dot, a highlight ring, and stacking in an `AvatarGroup`.",
|
|
329
329
|
"nativeElement": "span",
|
|
330
330
|
"props": [
|
|
331
331
|
{
|
|
@@ -338,7 +338,7 @@
|
|
|
338
338
|
"name": "alt",
|
|
339
339
|
"type": "string",
|
|
340
340
|
"required": false,
|
|
341
|
-
"description": "Text alternative for the image. Used as the accessible name (falls back to\
|
|
341
|
+
"description": "Text alternative for the image. Used as the accessible name (falls back to\n`name`). Pass `alt=\"\"` with no `name` to make the avatar decorative."
|
|
342
342
|
},
|
|
343
343
|
{
|
|
344
344
|
"name": "name",
|
|
@@ -392,13 +392,13 @@
|
|
|
392
392
|
"name": "bordered",
|
|
393
393
|
"type": "boolean",
|
|
394
394
|
"required": false,
|
|
395
|
-
"description": "Draws a border around the avatar, e.g. to set a photo apart from a busy\
|
|
395
|
+
"description": "Draws a border around the avatar, e.g. to set a photo apart from a busy\nbackground or a cover image. Decorative. Its color is the\n`--avatar-border-color` CSS variable (default `--color-border-strong`);\nset it to `var(--color-surface)` for a light frame on a photo banner."
|
|
396
396
|
},
|
|
397
397
|
{
|
|
398
398
|
"name": "ring",
|
|
399
399
|
"type": "boolean",
|
|
400
400
|
"required": false,
|
|
401
|
-
"description": "Highlight ring (e.g. the active player). Visual only: also convey the\
|
|
401
|
+
"description": "Highlight ring (e.g. the active player). Visual only: also convey the\nstate in text nearby or in `aria-label`."
|
|
402
402
|
},
|
|
403
403
|
{
|
|
404
404
|
"name": "ringTone",
|
|
@@ -410,7 +410,7 @@
|
|
|
410
410
|
"name": "decorative",
|
|
411
411
|
"type": "boolean",
|
|
412
412
|
"required": false,
|
|
413
|
-
"description": "Hide the avatar from assistive technology. Use when the person's name is\
|
|
413
|
+
"description": "Hide the avatar from assistive technology. Use when the person's name is\nalready visible next to the avatar."
|
|
414
414
|
},
|
|
415
415
|
{
|
|
416
416
|
"name": "icon",
|
|
@@ -497,7 +497,7 @@
|
|
|
497
497
|
"category": "data-display",
|
|
498
498
|
"folder": "Avatar",
|
|
499
499
|
"import": "import { AvatarGroup } from \"@vjdesigns/vjdesigns-ui\";",
|
|
500
|
-
"description": "Overlapping stack of avatars in a labelled `role=\"group\"`. Avatars beyond\
|
|
500
|
+
"description": "Overlapping stack of avatars in a labelled `role=\"group\"`. Avatars beyond\n`max` collapse into a \"+N\" surplus avatar with an accessible label.",
|
|
501
501
|
"nativeElement": "div",
|
|
502
502
|
"props": [
|
|
503
503
|
{
|
|
@@ -2179,6 +2179,13 @@
|
|
|
2179
2179
|
"required": false,
|
|
2180
2180
|
"description": "Rows per page. Shows a footer with the range and `Pagination`. Without it, every row shows."
|
|
2181
2181
|
},
|
|
2182
|
+
{
|
|
2183
|
+
"name": "virtualize",
|
|
2184
|
+
"type": "boolean | \"auto\"",
|
|
2185
|
+
"required": false,
|
|
2186
|
+
"default": "\"auto\"",
|
|
2187
|
+
"description": "Render only the rows in view (plus a few above and below), so grids of\n100,000+ rows scroll, sort, filter, and select without delay. `\"auto\"`\nturns it on when more than 100 rows show at once. While it's on, the body\nscrolls inside the grid (its height is `maxHeight`, 70% of the window by\ndefault) and the table uses fixed layout unless you set `layout`, so\ncolumns keep their widths while you scroll; give columns a `width` to\nsize them. Screen readers still get the full count (`aria-rowcount`)\nand each row's position (`aria-rowindex`)."
|
|
2188
|
+
},
|
|
2182
2189
|
{
|
|
2183
2190
|
"name": "page",
|
|
2184
2191
|
"type": "number",
|
|
@@ -2269,7 +2276,7 @@
|
|
|
2269
2276
|
"name": "layout",
|
|
2270
2277
|
"type": "\"auto\" | \"fixed\"",
|
|
2271
2278
|
"required": false,
|
|
2272
|
-
"default": "\"auto\"",
|
|
2279
|
+
"default": "\"auto\" (\"fixed\" while virtualized)",
|
|
2273
2280
|
"description": "Table layout. `fixed` makes column widths exact (content wraps or clips\ninstead of widening a column)."
|
|
2274
2281
|
},
|
|
2275
2282
|
{
|
|
@@ -2343,6 +2350,10 @@
|
|
|
2343
2350
|
{
|
|
2344
2351
|
"name": "Extending Columns",
|
|
2345
2352
|
"description": "Extending columns: `headerEnd` adds content after a header's label,\noutside its sort button (here a column menu button), and `className` /\n`style` reach every cell of a column. Controls marked\n`data-grid-secondary` don't steal the header's focus: the sort button\nstays its target, and F2 then Tab reaches them."
|
|
2353
|
+
},
|
|
2354
|
+
{
|
|
2355
|
+
"name": "Large data (100,000 rows)",
|
|
2356
|
+
"description": "100,000 rows with sorting, search, and selection. Only the rows in view\n(plus a few above and below) are in the page, so scrolling, sorting,\nfiltering, and selecting stay instant at any size. Screen readers still\nhear the full count (`aria-rowcount`) and each row's position."
|
|
2346
2357
|
}
|
|
2347
2358
|
]
|
|
2348
2359
|
},
|
|
@@ -2729,7 +2740,7 @@
|
|
|
2729
2740
|
"category": "data-display",
|
|
2730
2741
|
"folder": "List",
|
|
2731
2742
|
"import": "import { List } from \"@vjdesigns/vjdesigns-ui\";",
|
|
2732
|
-
"description": "A semantic list (`<ul>` or `<ol>`) with styled markers and rich items.\
|
|
2743
|
+
"description": "A semantic list (`<ul>` or `<ol>`) with styled markers and rich items.\n\nEvery variant draws its own markers, so the browser's markers are removed\nwith CSS; `role=\"list\"` is added so Safari and VoiceOver keep announcing\nthe list and its item count.\n\nThis is a list, not a listbox: items are not selectable options and there\nis no roving focus. Interactive items (`List.ItemButton`, `List.ItemLink`)\nare ordinary Tab stops. For choosing among options, use a Listbox,\nCombobox, or Select instead.\n\nGrouping: put a `List.Subheader` (a real heading by default) before each\nlist and point the list at it with `aria-labelledby`, so screen readers\nannounce \"Account, list, 3 items\".",
|
|
2733
2744
|
"nativeElement": "ol",
|
|
2734
2745
|
"props": [
|
|
2735
2746
|
{
|
|
@@ -2763,13 +2774,13 @@
|
|
|
2763
2774
|
"name": "spacing",
|
|
2764
2775
|
"type": "Space",
|
|
2765
2776
|
"required": false,
|
|
2766
|
-
"description": "Space between items, as a `--space-*` step. For `plain`, `bulleted`, and\
|
|
2777
|
+
"description": "Space between items, as a `--space-*` step. For `plain`, `bulleted`, and\n`numbered` it is the gap between items; for `divided` and `card` (where\na gap would break the dividers) it is each item's block padding.\nDefaults to a step that scales with `size`."
|
|
2767
2778
|
},
|
|
2768
2779
|
{
|
|
2769
2780
|
"name": "marker",
|
|
2770
2781
|
"type": "ReactNode",
|
|
2771
2782
|
"required": false,
|
|
2772
|
-
"description": "A custom marker for every item, such as `<CheckIcon />` for a feature\
|
|
2783
|
+
"description": "A custom marker for every item, such as `<CheckIcon />` for a feature\nlist. Replaces the variant's dot or number. Decorative: hidden from\nassistive technology, so the item text must carry the meaning."
|
|
2773
2784
|
},
|
|
2774
2785
|
{
|
|
2775
2786
|
"name": "start",
|
|
@@ -2795,7 +2806,7 @@
|
|
|
2795
2806
|
{
|
|
2796
2807
|
"name": "List.Item",
|
|
2797
2808
|
"exportedAs": "ListItem",
|
|
2798
|
-
"description": "A static list item (`<li>`) with optional `start`, `title`, `description`,\
|
|
2809
|
+
"description": "A static list item (`<li>`) with optional `start`, `title`, `description`,\n`meta`, and `end` slots, or plain `children`. For a clickable row, use\n`List.ItemButton` or `List.ItemLink`.",
|
|
2799
2810
|
"nativeElement": "li",
|
|
2800
2811
|
"props": [
|
|
2801
2812
|
{
|
|
@@ -2826,20 +2837,20 @@
|
|
|
2826
2837
|
"name": "end",
|
|
2827
2838
|
"type": "ReactNode",
|
|
2828
2839
|
"required": false,
|
|
2829
|
-
"description": "Trailing content: actions (`IconButton`, `Switch`), `Badge`s, or a\
|
|
2840
|
+
"description": "Trailing content: actions (`IconButton`, `Switch`), `Badge`s, or a\nchevron. On `ItemButton` and `ItemLink` these stay independently\nclickable and focusable; they sit above the stretched main action."
|
|
2830
2841
|
},
|
|
2831
2842
|
{
|
|
2832
2843
|
"name": "marker",
|
|
2833
2844
|
"type": "ReactNode",
|
|
2834
2845
|
"required": false,
|
|
2835
|
-
"description": "Overrides the list's marker for this item. `undefined` inherits the\
|
|
2846
|
+
"description": "Overrides the list's marker for this item. `undefined` inherits the\nlist's marker; `false` removes the marker. Decorative and hidden from\nassistive technology."
|
|
2836
2847
|
},
|
|
2837
2848
|
{
|
|
2838
2849
|
"name": "selected",
|
|
2839
2850
|
"type": "boolean",
|
|
2840
2851
|
"required": false,
|
|
2841
2852
|
"default": "false",
|
|
2842
|
-
"description": "Highlights the item with a tinted fill and a leading bar (shape plus\
|
|
2853
|
+
"description": "Highlights the item with a tinted fill and a leading bar (shape plus\ncolor). Also sets `aria-current` (`\"page\"` on links, `\"true\"` otherwise)\nso the state is announced, not only seen."
|
|
2843
2854
|
},
|
|
2844
2855
|
{
|
|
2845
2856
|
"name": "current",
|
|
@@ -2858,7 +2869,7 @@
|
|
|
2858
2869
|
{
|
|
2859
2870
|
"name": "List.ItemButton",
|
|
2860
2871
|
"exportedAs": "ListItemButton",
|
|
2861
|
-
"description": "A list item whose main area is a real `<button>`. The button wraps the\
|
|
2872
|
+
"description": "A list item whose main area is a real `<button>`. The button wraps the\ntitle (or `children` when there is no title) and its hit area is\nstretched over the whole row, so the row is clickable, while `end`\nactions sit above it and stay independently clickable. Never nest\ninteractive elements in `title` or `description`.\n\n`className` and `style` go on the row `<li>`; `ref`, `onClick`, `type`,\n`aria-*`, and every other prop go on the `<button>`. The description and\nmeta become the button's accessible description.",
|
|
2862
2873
|
"nativeElement": "button",
|
|
2863
2874
|
"props": [
|
|
2864
2875
|
{
|
|
@@ -2889,20 +2900,20 @@
|
|
|
2889
2900
|
"name": "end",
|
|
2890
2901
|
"type": "ReactNode",
|
|
2891
2902
|
"required": false,
|
|
2892
|
-
"description": "Trailing content: actions (`IconButton`, `Switch`), `Badge`s, or a\
|
|
2903
|
+
"description": "Trailing content: actions (`IconButton`, `Switch`), `Badge`s, or a\nchevron. On `ItemButton` and `ItemLink` these stay independently\nclickable and focusable; they sit above the stretched main action."
|
|
2893
2904
|
},
|
|
2894
2905
|
{
|
|
2895
2906
|
"name": "marker",
|
|
2896
2907
|
"type": "ReactNode",
|
|
2897
2908
|
"required": false,
|
|
2898
|
-
"description": "Overrides the list's marker for this item. `undefined` inherits the\
|
|
2909
|
+
"description": "Overrides the list's marker for this item. `undefined` inherits the\nlist's marker; `false` removes the marker. Decorative and hidden from\nassistive technology."
|
|
2899
2910
|
},
|
|
2900
2911
|
{
|
|
2901
2912
|
"name": "selected",
|
|
2902
2913
|
"type": "boolean",
|
|
2903
2914
|
"required": false,
|
|
2904
2915
|
"default": "false",
|
|
2905
|
-
"description": "Highlights the item with a tinted fill and a leading bar (shape plus\
|
|
2916
|
+
"description": "Highlights the item with a tinted fill and a leading bar (shape plus\ncolor). Also sets `aria-current` (`\"page\"` on links, `\"true\"` otherwise)\nso the state is announced, not only seen."
|
|
2906
2917
|
},
|
|
2907
2918
|
{
|
|
2908
2919
|
"name": "current",
|
|
@@ -2946,7 +2957,7 @@
|
|
|
2946
2957
|
{
|
|
2947
2958
|
"name": "List.ItemLink",
|
|
2948
2959
|
"exportedAs": "ListItemLink",
|
|
2949
|
-
"description": "A list item whose main area is a real `<a>`, stretched over the whole row\
|
|
2960
|
+
"description": "A list item whose main area is a real `<a>`, stretched over the whole row\nlike `List.ItemButton`. `selected` sets `aria-current=\"page\"` (override\nwith `current`). When `disabled`, the link loses its `href` and is marked\n`aria-disabled`, so it can't be followed or focused.\n\n`className` and `style` go on the row `<li>`; everything else, including\n`ref` and `href`, goes on the `<a>`.",
|
|
2950
2961
|
"nativeElement": "a",
|
|
2951
2962
|
"props": [
|
|
2952
2963
|
{
|
|
@@ -2977,20 +2988,20 @@
|
|
|
2977
2988
|
"name": "end",
|
|
2978
2989
|
"type": "ReactNode",
|
|
2979
2990
|
"required": false,
|
|
2980
|
-
"description": "Trailing content: actions (`IconButton`, `Switch`), `Badge`s, or a\
|
|
2991
|
+
"description": "Trailing content: actions (`IconButton`, `Switch`), `Badge`s, or a\nchevron. On `ItemButton` and `ItemLink` these stay independently\nclickable and focusable; they sit above the stretched main action."
|
|
2981
2992
|
},
|
|
2982
2993
|
{
|
|
2983
2994
|
"name": "marker",
|
|
2984
2995
|
"type": "ReactNode",
|
|
2985
2996
|
"required": false,
|
|
2986
|
-
"description": "Overrides the list's marker for this item. `undefined` inherits the\
|
|
2997
|
+
"description": "Overrides the list's marker for this item. `undefined` inherits the\nlist's marker; `false` removes the marker. Decorative and hidden from\nassistive technology."
|
|
2987
2998
|
},
|
|
2988
2999
|
{
|
|
2989
3000
|
"name": "selected",
|
|
2990
3001
|
"type": "boolean",
|
|
2991
3002
|
"required": false,
|
|
2992
3003
|
"default": "false",
|
|
2993
|
-
"description": "Highlights the item with a tinted fill and a leading bar (shape plus\
|
|
3004
|
+
"description": "Highlights the item with a tinted fill and a leading bar (shape plus\ncolor). Also sets `aria-current` (`\"page\"` on links, `\"true\"` otherwise)\nso the state is announced, not only seen."
|
|
2994
3005
|
},
|
|
2995
3006
|
{
|
|
2996
3007
|
"name": "current",
|
|
@@ -3034,7 +3045,7 @@
|
|
|
3034
3045
|
{
|
|
3035
3046
|
"name": "List.Subheader",
|
|
3036
3047
|
"exportedAs": "ListSubheader",
|
|
3037
|
-
"description": "An uppercase label for a group of items. Render it before (outside) a\
|
|
3048
|
+
"description": "An uppercase label for a group of items. Render it before (outside) a\n`List`, give it an `id`, and pass that id to the list's\n`aria-labelledby`. It must not go inside the `<ul>`, where it would be\ncounted as an item.\n\n```tsx\n<List.Subheader id=\"acct\">Account</List.Subheader>\n<List aria-labelledby=\"acct\">...</List>\n```",
|
|
3038
3049
|
"nativeElement": "h3",
|
|
3039
3050
|
"props": [
|
|
3040
3051
|
{
|
|
@@ -3042,7 +3053,7 @@
|
|
|
3042
3053
|
"type": "ListSubheaderElement",
|
|
3043
3054
|
"required": false,
|
|
3044
3055
|
"default": "\"h3\"",
|
|
3045
|
-
"description": "Element to render. A heading (default `h3`) so grouped lists show up in\
|
|
3056
|
+
"description": "Element to render. A heading (default `h3`) so grouped lists show up in\nthe screen reader's headings list; pick the level that fits the page\noutline, or `div` when a heading would be out of place."
|
|
3046
3057
|
},
|
|
3047
3058
|
{
|
|
3048
3059
|
"name": "size",
|
|
@@ -3417,7 +3428,7 @@
|
|
|
3417
3428
|
"type": "string | number",
|
|
3418
3429
|
"required": false,
|
|
3419
3430
|
"default": "\"var(--container-xs)\" when `stickyHeader`, otherwise none",
|
|
3420
|
-
"description": "Maximum height of the scroll container (any CSS length). Rows past it\
|
|
3431
|
+
"description": "Maximum height of the scroll container (any CSS length). Rows past it\nscroll vertically."
|
|
3421
3432
|
},
|
|
3422
3433
|
{
|
|
3423
3434
|
"name": "stickyFirstColumn",
|
|
@@ -3459,7 +3470,7 @@
|
|
|
3459
3470
|
"type": "boolean",
|
|
3460
3471
|
"required": false,
|
|
3461
3472
|
"default": "false",
|
|
3462
|
-
"description": "Shows a spinner over the table, dims the body, and sets `aria-busy` on\
|
|
3473
|
+
"description": "Shows a spinner over the table, dims the body, and sets `aria-busy` on\nthe `<table>`. Keep previous rows rendered so the layout doesn't jump."
|
|
3463
3474
|
},
|
|
3464
3475
|
{
|
|
3465
3476
|
"name": "loadingLabel",
|
|
@@ -3472,14 +3483,14 @@
|
|
|
3472
3483
|
"name": "stackBelow",
|
|
3473
3484
|
"type": "TableStackBreakpoint",
|
|
3474
3485
|
"required": false,
|
|
3475
|
-
"description": "Turns rows into stacked cards below this viewport width, labelling each\
|
|
3486
|
+
"description": "Turns rows into stacked cards below this viewport width, labelling each\nvalue with its column header (`data-label`). While stacked, every part\ngets an explicit ARIA table role (`table`, `rowgroup`, `row`,\n`columnheader`, `cell`), because some browsers drop native table\nsemantics when CSS changes a table's `display`. The header row is\nvisually hidden but stays in the accessibility tree."
|
|
3476
3487
|
},
|
|
3477
3488
|
{
|
|
3478
3489
|
"name": "scrollLabel",
|
|
3479
3490
|
"type": "string",
|
|
3480
3491
|
"required": false,
|
|
3481
3492
|
"default": "\"Scrollable table\"",
|
|
3482
|
-
"description": "Accessible name for the scroll region, used when the table overflows and\
|
|
3493
|
+
"description": "Accessible name for the scroll region, used when the table overflows and\nhas no `Table.Caption`, `aria-label`, or `aria-labelledby`."
|
|
3483
3494
|
},
|
|
3484
3495
|
{
|
|
3485
3496
|
"name": "className",
|
|
@@ -3504,7 +3515,7 @@
|
|
|
3504
3515
|
{
|
|
3505
3516
|
"name": "Table.Caption",
|
|
3506
3517
|
"exportedAs": "TableCaption",
|
|
3507
|
-
"description": "The table's title (`<caption>`). It names the table and, when the table\
|
|
3518
|
+
"description": "The table's title (`<caption>`). It names the table and, when the table\nscrolls, its scroll region. Strongly recommended on every table.",
|
|
3508
3519
|
"nativeElement": "caption",
|
|
3509
3520
|
"props": []
|
|
3510
3521
|
},
|
|
@@ -3540,14 +3551,14 @@
|
|
|
3540
3551
|
"type": "boolean",
|
|
3541
3552
|
"required": false,
|
|
3542
3553
|
"default": "false",
|
|
3543
|
-
"description": "Shows the row as selected. Visual only: `aria-selected` is not valid on\
|
|
3554
|
+
"description": "Shows the row as selected. Visual only: `aria-selected` is not valid on\nrows of a plain `<table>` (only inside `role=\"grid\"` / `treegrid`), so the\nselected state is conveyed to assistive technology by the row's checked\n`Table.SelectCell` checkbox. Pair the two."
|
|
3544
3555
|
}
|
|
3545
3556
|
]
|
|
3546
3557
|
},
|
|
3547
3558
|
{
|
|
3548
3559
|
"name": "Table.HeaderCell",
|
|
3549
3560
|
"exportedAs": "TableHeaderCell",
|
|
3550
|
-
"description": "A header cell (`<th>`). With `sortable`, the whole cell is a real\
|
|
3561
|
+
"description": "A header cell (`<th>`). With `sortable`, the whole cell is a real\n`<button>` and the header carries `aria-sort` while it is the sorted column.\nThe sort icon shows the direction by shape (up arrow, down arrow, or a\nneutral double arrow), not by color alone.",
|
|
3551
3562
|
"nativeElement": "th",
|
|
3552
3563
|
"props": [
|
|
3553
3564
|
{
|
|
@@ -3569,7 +3580,7 @@
|
|
|
3569
3580
|
"type": "boolean",
|
|
3570
3581
|
"required": false,
|
|
3571
3582
|
"default": "false",
|
|
3572
|
-
"description": "Keeps content on one line and cuts it off with an ellipsis. Works best\
|
|
3583
|
+
"description": "Keeps content on one line and cuts it off with an ellipsis. Works best\nwith `layout=\"fixed\"` or a `width`. String content also gets a `title`\ntooltip; screen readers always read the full text."
|
|
3573
3584
|
},
|
|
3574
3585
|
{
|
|
3575
3586
|
"name": "width",
|
|
@@ -3581,7 +3592,7 @@
|
|
|
3581
3592
|
"name": "scope",
|
|
3582
3593
|
"type": "\"col\" | \"row\" | \"colgroup\" | \"rowgroup\"",
|
|
3583
3594
|
"required": false,
|
|
3584
|
-
"description": "Which cells this header labels. @default \"col\" in `Table.Head` and\
|
|
3595
|
+
"description": "Which cells this header labels. @default \"col\" in `Table.Head` and\n`Table.Foot`, \"row\" in `Table.Body` (use a header cell for each row's\nkey column, such as a player's name)"
|
|
3585
3596
|
},
|
|
3586
3597
|
{
|
|
3587
3598
|
"name": "sortable",
|
|
@@ -3601,7 +3612,7 @@
|
|
|
3601
3612
|
"name": "onSort",
|
|
3602
3613
|
"type": "(nextDirection: TableSortDirection) => void",
|
|
3603
3614
|
"required": false,
|
|
3604
|
-
"description": "Called when the sort button is pressed, with the suggested next direction\
|
|
3615
|
+
"description": "Called when the sort button is pressed, with the suggested next direction\n(`ascending` from none or descending, `descending` from ascending)."
|
|
3605
3616
|
}
|
|
3606
3617
|
]
|
|
3607
3618
|
},
|
|
@@ -3630,7 +3641,7 @@
|
|
|
3630
3641
|
"type": "boolean",
|
|
3631
3642
|
"required": false,
|
|
3632
3643
|
"default": "false",
|
|
3633
|
-
"description": "Keeps content on one line and cuts it off with an ellipsis. Works best\
|
|
3644
|
+
"description": "Keeps content on one line and cuts it off with an ellipsis. Works best\nwith `layout=\"fixed\"` or a `width`. String content also gets a `title`\ntooltip; screen readers always read the full text."
|
|
3634
3645
|
},
|
|
3635
3646
|
{
|
|
3636
3647
|
"name": "width",
|
|
@@ -3642,14 +3653,14 @@
|
|
|
3642
3653
|
"name": "label",
|
|
3643
3654
|
"type": "string",
|
|
3644
3655
|
"required": false,
|
|
3645
|
-
"description": "Column label shown beside the value when rows are stacked (`stackBelow`).\
|
|
3656
|
+
"description": "Column label shown beside the value when rows are stacked (`stackBelow`).\nDefaults to the matching header cell's text."
|
|
3646
3657
|
}
|
|
3647
3658
|
]
|
|
3648
3659
|
},
|
|
3649
3660
|
{
|
|
3650
3661
|
"name": "Table.SelectCell",
|
|
3651
3662
|
"exportedAs": "TableSelectCell",
|
|
3652
|
-
"description": "A data cell holding the row's selection checkbox. Pair with `selected` on\
|
|
3663
|
+
"description": "A data cell holding the row's selection checkbox. Pair with `selected` on\nthe `Table.Row`. Give it a `rowLabel` (or `checkboxLabel`) so each\ncheckbox has a unique accessible name.",
|
|
3653
3664
|
"nativeElement": "td",
|
|
3654
3665
|
"props": [
|
|
3655
3666
|
{
|
|
@@ -3668,7 +3679,7 @@
|
|
|
3668
3679
|
"name": "rowLabel",
|
|
3669
3680
|
"type": "string",
|
|
3670
3681
|
"required": false,
|
|
3671
|
-
"description": "Readable name of the row, used for the checkbox's accessible name:\
|
|
3682
|
+
"description": "Readable name of the row, used for the checkbox's accessible name:\n\"Select row {rowLabel}\". Ignored when `checkboxLabel` is set."
|
|
3672
3683
|
},
|
|
3673
3684
|
{
|
|
3674
3685
|
"name": "checkboxLabel",
|
|
@@ -3688,7 +3699,7 @@
|
|
|
3688
3699
|
{
|
|
3689
3700
|
"name": "Table.SelectAllCell",
|
|
3690
3701
|
"exportedAs": "TableSelectAllCell",
|
|
3691
|
-
"description": "A header cell (`<th scope=\"col\">`) with a \"select all\" checkbox. Shows the\
|
|
3702
|
+
"description": "A header cell (`<th scope=\"col\">`) with a \"select all\" checkbox. Shows the\nmixed state (`aria-checked=\"mixed\"`) when some rows are selected.",
|
|
3692
3703
|
"nativeElement": "th",
|
|
3693
3704
|
"props": [
|
|
3694
3705
|
{
|
|
@@ -6923,7 +6934,7 @@
|
|
|
6923
6934
|
},
|
|
6924
6935
|
{
|
|
6925
6936
|
"name": "Basic Single",
|
|
6926
|
-
"description": "Type to filter, ArrowDown to highlight, Enter to choose. The input shows the\
|
|
6937
|
+
"description": "Type to filter, ArrowDown to highlight, Enter to choose. The input shows the\nchosen label. Escape closes the list; a second Escape undoes typed text,\ngoing back to the chosen label (the selection is kept)."
|
|
6927
6938
|
},
|
|
6928
6939
|
{
|
|
6929
6940
|
"name": "Results Announcement",
|
|
@@ -6931,7 +6942,7 @@
|
|
|
6931
6942
|
},
|
|
6932
6943
|
{
|
|
6933
6944
|
"name": "Multiple",
|
|
6934
|
-
"description": "`multiple`: selections become removable chips before the input. Enter\
|
|
6945
|
+
"description": "`multiple`: selections become removable chips before the input. Enter\ntoggles the highlighted option and keeps the list open; Backspace on an\nempty input removes the last chip."
|
|
6935
6946
|
},
|
|
6936
6947
|
{
|
|
6937
6948
|
"name": "With Groups",
|
|
@@ -6951,7 +6962,7 @@
|
|
|
6951
6962
|
},
|
|
6952
6963
|
{
|
|
6953
6964
|
"name": "Async",
|
|
6954
|
-
"description": "Server-side filtering: `filter={false}` shows `options` as given, `loading`\
|
|
6965
|
+
"description": "Server-side filtering: `filter={false}` shows `options` as given, `loading`\nshows a spinner row, and `emptyMessage` a status row when nothing matches."
|
|
6955
6966
|
},
|
|
6956
6967
|
{
|
|
6957
6968
|
"name": "Creatable",
|
|
@@ -6979,7 +6990,7 @@
|
|
|
6979
6990
|
},
|
|
6980
6991
|
{
|
|
6981
6992
|
"name": "In Modal",
|
|
6982
|
-
"description": "Inside a Modal the list is a child layer: Escape closes only the list.\
|
|
6993
|
+
"description": "Inside a Modal the list is a child layer: Escape closes only the list.\nWith the chosen label unchanged, the next Escape reaches the Modal and\ncloses it (the selection isn't silently cleared)."
|
|
6983
6994
|
},
|
|
6984
6995
|
{
|
|
6985
6996
|
"name": "Assign Players To Team",
|
|
@@ -6995,7 +7006,11 @@
|
|
|
6995
7006
|
},
|
|
6996
7007
|
{
|
|
6997
7008
|
"name": "Form submit, reset, and custom values",
|
|
6998
|
-
"description": "Form behavior: Enter submits what is shown (cleared text submits no team),\
|
|
7009
|
+
"description": "Form behavior: Enter submits what is shown (cleared text submits no team),\na form reset restores the default, and re-entering a custom tag that's\nalready chosen doesn't remove it."
|
|
7010
|
+
},
|
|
7011
|
+
{
|
|
7012
|
+
"name": "Long list (10,000 options)",
|
|
7013
|
+
"description": "10,000 options. Only the options in view are in the page (plus the\nhighlighted one), so opening, scrolling, and typing stay instant. Each\noption carries its position in the full list (`aria-setsize`,\n`aria-posinset`), so screen readers still hear \"10,000 of 10,000\".\nLists with groups always render in full."
|
|
6999
7014
|
}
|
|
7000
7015
|
]
|
|
7001
7016
|
},
|
|
@@ -8257,7 +8272,7 @@
|
|
|
8257
8272
|
"category": "forms",
|
|
8258
8273
|
"folder": "FileUpload",
|
|
8259
8274
|
"import": "import { FileUpload } from \"@vjdesigns/vjdesigns-ui\";",
|
|
8260
|
-
"description": "File picker with drag and drop, validation, and a file list.\
|
|
8275
|
+
"description": "File picker with drag and drop, validation, and a file list.\n`FileUpload.List` is the standalone list for custom layouts.",
|
|
8261
8276
|
"nativeElement": "div",
|
|
8262
8277
|
"props": [
|
|
8263
8278
|
{
|
|
@@ -8356,7 +8371,7 @@
|
|
|
8356
8371
|
"type": "Size",
|
|
8357
8372
|
"required": false,
|
|
8358
8373
|
"default": "\"md\"",
|
|
8359
|
-
"description": "`sm`: compact inline row. `md`: standard dropzone. `lg`: hero dropzone.\
|
|
8374
|
+
"description": "`sm`: compact inline row. `md`: standard dropzone. `lg`: hero dropzone.\nInherits from a surrounding `Field`."
|
|
8360
8375
|
},
|
|
8361
8376
|
{
|
|
8362
8377
|
"name": "variant",
|
|
@@ -8369,7 +8384,7 @@
|
|
|
8369
8384
|
"name": "children",
|
|
8370
8385
|
"type": "ReactNode | ((state: FileUploadRenderState) => ReactNode)",
|
|
8371
8386
|
"required": false,
|
|
8372
|
-
"description": "Replaces the prompt and hint inside the dropzone. A function receives\
|
|
8387
|
+
"description": "Replaces the prompt and hint inside the dropzone. A function receives\n`{ dragging, disabled, openPicker }`. The Browse button is always rendered."
|
|
8373
8388
|
},
|
|
8374
8389
|
{
|
|
8375
8390
|
"name": "prompt",
|
|
@@ -8382,7 +8397,7 @@
|
|
|
8382
8397
|
"name": "hint",
|
|
8383
8398
|
"type": "ReactNode",
|
|
8384
8399
|
"required": false,
|
|
8385
|
-
"description": "Hint under the prompt. Defaults to text built from `accept`, `maxSize`,\
|
|
8400
|
+
"description": "Hint under the prompt. Defaults to text built from `accept`, `maxSize`,\nand `maxFiles` (e.g. \"PNG, JPG up to 5 MB each. Up to 3 files.\"). Pass\n`null` to hide. It is wired to the Browse button with `aria-describedby`."
|
|
8386
8401
|
},
|
|
8387
8402
|
{
|
|
8388
8403
|
"name": "browseLabel",
|
|
@@ -8441,7 +8456,7 @@
|
|
|
8441
8456
|
{
|
|
8442
8457
|
"name": "FileUpload.List",
|
|
8443
8458
|
"exportedAs": "FileUploadList",
|
|
8444
|
-
"description": "The list of selected files: icon or image thumbnail, name (truncated, full\
|
|
8459
|
+
"description": "The list of selected files: icon or image thumbnail, name (truncated, full\nname on hover and focus), formatted size, optional upload progress and\nstatus, and a remove button per file. `FileUpload` renders one for you;\nuse `FileUpload.List` directly for custom layouts.\n\nAfter a removal, focus moves to the next item's remove button (or the\nprevious one), then to `focusFallback` when the list becomes empty.\nUpload completions and failures are announced in a polite live region.",
|
|
8445
8460
|
"nativeElement": "ul",
|
|
8446
8461
|
"props": [
|
|
8447
8462
|
{
|
|
@@ -8494,7 +8509,7 @@
|
|
|
8494
8509
|
"name": "focusFallback",
|
|
8495
8510
|
"type": "() => HTMLElement | null | undefined",
|
|
8496
8511
|
"required": false,
|
|
8497
|
-
"description": "Element to focus after the last file is removed (for example the Browse\
|
|
8512
|
+
"description": "Element to focus after the last file is removed (for example the Browse\nbutton). Otherwise focus moves to the next item's remove button, or the\nprevious one when the last item was removed."
|
|
8498
8513
|
},
|
|
8499
8514
|
{
|
|
8500
8515
|
"name": "size",
|
|
@@ -8754,7 +8769,7 @@
|
|
|
8754
8769
|
"category": "forms",
|
|
8755
8770
|
"folder": "NumberInput",
|
|
8756
8771
|
"import": "import { NumberInput } from \"@vjdesigns/vjdesigns-ui\";",
|
|
8757
|
-
"description": "A numeric text field following the WAI-ARIA spinbutton pattern. The\
|
|
8772
|
+
"description": "A numeric text field following the WAI-ARIA spinbutton pattern. The\n`<input>` itself is the spinbutton: it takes focus, exposes\n`aria-valuenow`/`min`/`max`/`valuetext`, and handles ArrowUp/Down,\nPageUp/Down, Home/End, and Enter. Stepper buttons are pointer\nconveniences (press and hold to repeat) and stay out of the tab order.\n\nShows a formatted value (`Intl.NumberFormat`) when not focused and the\nplain editable number while focused; parses locale input (group\nseparators, decimal comma). Built on `Input`, so size, variant, radius,\naddons, and `Field` wiring match every other text field.\n\n```tsx\n<Field label=\"Weight\">\n <NumberInput min={0} step={2.5} endAddon=\"kg\" defaultValue={60} />\n</Field>\n```",
|
|
8758
8773
|
"nativeElement": "input",
|
|
8759
8774
|
"props": [
|
|
8760
8775
|
{
|
|
@@ -8921,7 +8936,7 @@
|
|
|
8921
8936
|
"name": "precision",
|
|
8922
8937
|
"type": "number",
|
|
8923
8938
|
"required": false,
|
|
8924
|
-
"description": "Fixed number of decimal places. Committed values are rounded to it and\
|
|
8939
|
+
"description": "Fixed number of decimal places. Committed values are rounded to it and\nthe display shows exactly this many digits (unless `formatOptions` says\notherwise). When omitted, the step's decimals are used for stepping."
|
|
8925
8940
|
},
|
|
8926
8941
|
{
|
|
8927
8942
|
"name": "clampOnBlur",
|
|
@@ -8948,7 +8963,7 @@
|
|
|
8948
8963
|
"name": "formatOptions",
|
|
8949
8964
|
"type": "Intl.NumberFormatOptions",
|
|
8950
8965
|
"required": false,
|
|
8951
|
-
"description": "`Intl.NumberFormat` options for the value shown while the field is not\
|
|
8966
|
+
"description": "`Intl.NumberFormat` options for the value shown while the field is not\nfocused (e.g. `{ style: \"currency\", currency: \"USD\" }` or\n`{ style: \"unit\", unit: \"percent\" }`). While focused the field shows the\nplain editable number. Note `style: \"percent\"` shows 0.45 as \"45%\";\nuse `style: \"unit\", unit: \"percent\"` to show 45 as \"45%\"."
|
|
8952
8967
|
},
|
|
8953
8968
|
{
|
|
8954
8969
|
"name": "locale",
|
|
@@ -18744,19 +18759,19 @@
|
|
|
18744
18759
|
"category": "overlays",
|
|
18745
18760
|
"folder": "Tooltip",
|
|
18746
18761
|
"import": "import { Tooltip } from \"@vjdesigns/vjdesigns-ui\";",
|
|
18747
|
-
"description": "A short, non-interactive label or description that appears on hover and on\
|
|
18762
|
+
"description": "A short, non-interactive label or description that appears on hover and on\nkeyboard focus. Follows the WAI-ARIA tooltip pattern and WCAG 1.4.13: it\ncan be dismissed with Escape, the pointer can move onto it, and it stays\nopen until the pointer or focus leaves. Use `Popover` for interactive content.",
|
|
18748
18763
|
"props": [
|
|
18749
18764
|
{
|
|
18750
18765
|
"name": "children",
|
|
18751
18766
|
"type": "ReactElement",
|
|
18752
18767
|
"required": true,
|
|
18753
|
-
"description": "The trigger: exactly one focusable element (a `Button`, `IconButton`,\
|
|
18768
|
+
"description": "The trigger: exactly one focusable element (a `Button`, `IconButton`,\nlink, or input) that accepts a `ref`, event handlers, and `aria-*` props.\nIts existing handlers, ref, and `aria-describedby` / `aria-labelledby` are kept.\n\nDisabled elements fire no pointer or focus events, so a `disabled` button\nnever shows a tooltip. Don't wrap it in a focusable `<span>`; use\n`aria-disabled=\"true\"` on the button instead (and ignore its clicks), so\nit stays focusable and the tooltip can explain why it's unavailable."
|
|
18754
18769
|
},
|
|
18755
18770
|
{
|
|
18756
18771
|
"name": "content",
|
|
18757
18772
|
"type": "ReactNode",
|
|
18758
18773
|
"required": true,
|
|
18759
|
-
"description": "Short, plain text describing or naming the trigger. Never put interactive\
|
|
18774
|
+
"description": "Short, plain text describing or naming the trigger. Never put interactive\ncontent (links, buttons, inputs) here: a tooltip can't receive focus.\nUse a Popover for that. A dev-mode warning fires if focusable content is found."
|
|
18760
18775
|
},
|
|
18761
18776
|
{
|
|
18762
18777
|
"name": "shortcut",
|
|
@@ -18769,7 +18784,7 @@
|
|
|
18769
18784
|
"type": "TooltipPlacement",
|
|
18770
18785
|
"required": false,
|
|
18771
18786
|
"default": "\"top\"",
|
|
18772
|
-
"description": "Preferred side and alignment, or a logical `start` / `end` side that\
|
|
18787
|
+
"description": "Preferred side and alignment, or a logical `start` / `end` side that\nfollows the text direction. Flips to the opposite side when there isn't\nroom."
|
|
18773
18788
|
},
|
|
18774
18789
|
{
|
|
18775
18790
|
"name": "offset",
|
|
@@ -18910,7 +18925,7 @@
|
|
|
18910
18925
|
"category": "overlays",
|
|
18911
18926
|
"folder": "Tooltip",
|
|
18912
18927
|
"import": "import { TooltipProvider } from \"@vjdesigns/vjdesigns-ui\";",
|
|
18913
|
-
"description": "Optional. Sets shared timing for the tooltips inside it. Tooltips work\
|
|
18928
|
+
"description": "Optional. Sets shared timing for the tooltips inside it. Tooltips work\nwithout a provider, using the defaults.",
|
|
18914
18929
|
"props": [
|
|
18915
18930
|
{
|
|
18916
18931
|
"name": "delay",
|
|
@@ -18931,7 +18946,7 @@
|
|
|
18931
18946
|
"type": "number",
|
|
18932
18947
|
"required": false,
|
|
18933
18948
|
"default": "300",
|
|
18934
|
-
"description": "After a tooltip closes, other tooltips open instantly (no `delay`) for this\
|
|
18949
|
+
"description": "After a tooltip closes, other tooltips open instantly (no `delay`) for this\nmany ms, so scanning across a toolbar feels immediate. `0` turns it off."
|
|
18935
18950
|
},
|
|
18936
18951
|
{
|
|
18937
18952
|
"name": "children",
|
|
@@ -20570,6 +20585,12 @@
|
|
|
20570
20585
|
"description": "A `keydown` handler for one element (an editor, a list): pass it to\n`onKeyDown`. Same shortcut format as `useHotkeys`; shortcuts fire while\ntyping in that element.\n\n```tsx\n<Textarea onKeyDown={getHotkeyHandler([[\"mod+enter\", send]])} />\n```",
|
|
20571
20586
|
"module": "hooks/index.ts"
|
|
20572
20587
|
},
|
|
20588
|
+
{
|
|
20589
|
+
"name": "withExtraItems",
|
|
20590
|
+
"signature": "withExtraItems(virtualizer: Virtualizer, extra: readonly number[]): VirtualItem[]",
|
|
20591
|
+
"description": "The window's items plus extra indices that must stay rendered even when\nscrolled out of view (a focused row, a highlighted option), in order.\nRender spacers between non-adjacent items from their `start` / `end`.",
|
|
20592
|
+
"module": "hooks/index.ts"
|
|
20593
|
+
},
|
|
20573
20594
|
{
|
|
20574
20595
|
"name": "cx",
|
|
20575
20596
|
"signature": "cx(...classes: Array<string | false | null | undefined>): string",
|