@vjdesigns/vjdesigns-ui 2.4.0 → 3.0.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 +141 -76
- package/dist/ai/registry.json +125 -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 +59 -3
- package/dist/components/data-display/DataGrid/DataGrid.mjs +382 -272
- package/dist/components/data-display/DataGrid/DataGrid.module.css.cjs.js +1 -1
- package/dist/components/data-display/DataGrid/DataGrid.module.css.mjs +29 -26
- 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/DatePicker/index.d.ts +1 -1
- 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.cjs.js +1 -1
- package/dist/components/forms/SegmentedControl/SegmentedControl.module.css.mjs +2 -3
- 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 +65 -67
- package/dist/components/forms/TimePicker/TimePicker.module.css.mjs +1 -2
- package/dist/components/forms/TimePicker/index.d.ts +1 -0
- 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.cjs.js +1 -1
- package/dist/i18n/en.mjs +194 -4
- package/dist/i18n/merge.mjs +1 -2
- package/dist/i18n/plural.mjs +1 -2
- package/dist/i18n/types.d.ts +240 -0
- package/dist/index.cjs.js +1 -1
- package/dist/index.mjs +114 -114
- package/dist/locales/ar.cjs.js +1 -1
- package/dist/locales/ar.mjs +230 -4
- package/dist/locales/bn.cjs.js +1 -1
- package/dist/locales/bn.mjs +167 -4
- package/dist/locales/cs.cjs.js +1 -1
- package/dist/locales/cs.mjs +212 -4
- package/dist/locales/da.cjs.js +1 -1
- package/dist/locales/da.mjs +194 -4
- package/dist/locales/de.cjs.js +1 -1
- package/dist/locales/de.mjs +194 -4
- package/dist/locales/el.cjs.js +1 -1
- package/dist/locales/el.mjs +194 -4
- package/dist/locales/es.cjs.js +1 -1
- package/dist/locales/es.mjs +194 -4
- package/dist/locales/fa.cjs.js +1 -1
- package/dist/locales/fa.mjs +167 -4
- package/dist/locales/fi.cjs.js +1 -1
- package/dist/locales/fi.mjs +194 -4
- package/dist/locales/fr.cjs.js +1 -1
- package/dist/locales/fr.mjs +194 -4
- package/dist/locales/he.cjs.js +1 -1
- package/dist/locales/he.mjs +203 -4
- package/dist/locales/hi.cjs.js +1 -1
- package/dist/locales/hi.mjs +194 -4
- package/dist/locales/hu.cjs.js +1 -1
- package/dist/locales/hu.mjs +167 -4
- package/dist/locales/id.cjs.js +1 -1
- package/dist/locales/id.mjs +167 -4
- package/dist/locales/it.cjs.js +1 -1
- package/dist/locales/it.mjs +194 -4
- package/dist/locales/ja.cjs.js +1 -1
- package/dist/locales/ja.mjs +167 -4
- package/dist/locales/ko.cjs.js +1 -1
- package/dist/locales/ko.mjs +167 -4
- package/dist/locales/nb.cjs.js +1 -1
- package/dist/locales/nb.mjs +194 -4
- package/dist/locales/nl.cjs.js +1 -1
- package/dist/locales/nl.mjs +194 -4
- package/dist/locales/pl.cjs.js +1 -1
- package/dist/locales/pl.mjs +212 -4
- package/dist/locales/pt-BR.cjs.js +1 -1
- package/dist/locales/pt-BR.mjs +194 -4
- package/dist/locales/ro.cjs.js +1 -1
- package/dist/locales/ro.mjs +203 -4
- package/dist/locales/ru.cjs.js +1 -1
- package/dist/locales/ru.mjs +212 -4
- package/dist/locales/sv.cjs.js +1 -1
- package/dist/locales/sv.mjs +194 -4
- package/dist/locales/th.cjs.js +1 -1
- package/dist/locales/th.mjs +167 -4
- package/dist/locales/tr.cjs.js +1 -1
- package/dist/locales/tr.mjs +167 -4
- package/dist/locales/uk.cjs.js +1 -1
- package/dist/locales/uk.mjs +212 -4
- package/dist/locales/ur.cjs.js +1 -1
- package/dist/locales/ur.mjs +194 -4
- package/dist/locales/vi.cjs.js +1 -1
- package/dist/locales/vi.mjs +167 -4
- package/dist/locales/zh-Hans.cjs.js +1 -1
- package/dist/locales/zh-Hans.mjs +167 -4
- package/dist/locales/zh-Hant.cjs.js +1 -1
- package/dist/locales/zh-Hant.mjs +167 -4
- 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 +103 -90
package/dist/ai/registry.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vjdesigns/vjdesigns-ui",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.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
|
{
|
|
@@ -2295,6 +2302,37 @@
|
|
|
2295
2302
|
"type": "Ref<HTMLTableElement>",
|
|
2296
2303
|
"required": false,
|
|
2297
2304
|
"description": "Ref to the `<table role=\"grid\">`."
|
|
2305
|
+
},
|
|
2306
|
+
{
|
|
2307
|
+
"name": "treegrid",
|
|
2308
|
+
"type": "boolean",
|
|
2309
|
+
"required": false,
|
|
2310
|
+
"default": "false",
|
|
2311
|
+
"description": "Rows form a hierarchy (groups, a tree): the table becomes a\n`role=\"treegrid\"` and each row takes the `level` and `expanded` from\n`getRowProps`."
|
|
2312
|
+
},
|
|
2313
|
+
{
|
|
2314
|
+
"name": "getRowProps",
|
|
2315
|
+
"type": "(row: T) => DataGridRowProps",
|
|
2316
|
+
"required": false,
|
|
2317
|
+
"description": "Per-row level, expanded state, and class name."
|
|
2318
|
+
},
|
|
2319
|
+
{
|
|
2320
|
+
"name": "renderRowDetail",
|
|
2321
|
+
"type": "(row: T) => ReactNode",
|
|
2322
|
+
"required": false,
|
|
2323
|
+
"description": "Content for a full-width row under a row (master-detail), or null for\nnone. Its controls are outside the grid's arrow-key navigation: Tab from\nthe row moves into them. A grid with detail rows doesn't virtualize, so\npair it with `pageSize` for long lists."
|
|
2324
|
+
},
|
|
2325
|
+
{
|
|
2326
|
+
"name": "onRowsShown",
|
|
2327
|
+
"type": "(rows: readonly T[]) => void",
|
|
2328
|
+
"required": false,
|
|
2329
|
+
"description": "Called with the rows the grid shows, sorted, filtered, and paged, in\ndisplay order, whenever they change (to copy a cell range, or export\nexactly what's on screen)."
|
|
2330
|
+
},
|
|
2331
|
+
{
|
|
2332
|
+
"name": "onVisibleRangeChange",
|
|
2333
|
+
"type": "(range: { start: number; end: number }) => void",
|
|
2334
|
+
"required": false,
|
|
2335
|
+
"description": "Called with the range of shown rows (indexes into them, inclusive) that\nare rendered in view. With virtualization this follows scrolling, which\nis what \"load more while scrolling\" needs."
|
|
2298
2336
|
}
|
|
2299
2337
|
],
|
|
2300
2338
|
"subcomponents": [],
|
|
@@ -2343,6 +2381,18 @@
|
|
|
2343
2381
|
{
|
|
2344
2382
|
"name": "Extending Columns",
|
|
2345
2383
|
"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."
|
|
2384
|
+
},
|
|
2385
|
+
{
|
|
2386
|
+
"name": "Large data (100,000 rows)",
|
|
2387
|
+
"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."
|
|
2388
|
+
},
|
|
2389
|
+
{
|
|
2390
|
+
"name": "Row Levels And Details",
|
|
2391
|
+
"description": "Extension points for hierarchical and master-detail grids: `treegrid`\nwith `getRowProps` (each row's level and expanded state), and\n`renderRowDetail` (a full-width row under a row). DataGridPro builds its\ngrouping, tree data, and details on these."
|
|
2392
|
+
},
|
|
2393
|
+
{
|
|
2394
|
+
"name": "Rows Shown And Range",
|
|
2395
|
+
"description": "`onRowsShown` reports the rows on screen, sorted, filtered, and paged,\nin order; `onVisibleRangeChange` reports which of them are rendered in\nview. DataGridPro builds cell ranges and loading while scrolling on these."
|
|
2346
2396
|
}
|
|
2347
2397
|
]
|
|
2348
2398
|
},
|
|
@@ -2729,7 +2779,7 @@
|
|
|
2729
2779
|
"category": "data-display",
|
|
2730
2780
|
"folder": "List",
|
|
2731
2781
|
"import": "import { List } from \"@vjdesigns/vjdesigns-ui\";",
|
|
2732
|
-
"description": "A semantic list (`<ul>` or `<ol>`) with styled markers and rich items.\
|
|
2782
|
+
"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
2783
|
"nativeElement": "ol",
|
|
2734
2784
|
"props": [
|
|
2735
2785
|
{
|
|
@@ -2763,13 +2813,13 @@
|
|
|
2763
2813
|
"name": "spacing",
|
|
2764
2814
|
"type": "Space",
|
|
2765
2815
|
"required": false,
|
|
2766
|
-
"description": "Space between items, as a `--space-*` step. For `plain`, `bulleted`, and\
|
|
2816
|
+
"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
2817
|
},
|
|
2768
2818
|
{
|
|
2769
2819
|
"name": "marker",
|
|
2770
2820
|
"type": "ReactNode",
|
|
2771
2821
|
"required": false,
|
|
2772
|
-
"description": "A custom marker for every item, such as `<CheckIcon />` for a feature\
|
|
2822
|
+
"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
2823
|
},
|
|
2774
2824
|
{
|
|
2775
2825
|
"name": "start",
|
|
@@ -2795,7 +2845,7 @@
|
|
|
2795
2845
|
{
|
|
2796
2846
|
"name": "List.Item",
|
|
2797
2847
|
"exportedAs": "ListItem",
|
|
2798
|
-
"description": "A static list item (`<li>`) with optional `start`, `title`, `description`,\
|
|
2848
|
+
"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
2849
|
"nativeElement": "li",
|
|
2800
2850
|
"props": [
|
|
2801
2851
|
{
|
|
@@ -2826,20 +2876,20 @@
|
|
|
2826
2876
|
"name": "end",
|
|
2827
2877
|
"type": "ReactNode",
|
|
2828
2878
|
"required": false,
|
|
2829
|
-
"description": "Trailing content: actions (`IconButton`, `Switch`), `Badge`s, or a\
|
|
2879
|
+
"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
2880
|
},
|
|
2831
2881
|
{
|
|
2832
2882
|
"name": "marker",
|
|
2833
2883
|
"type": "ReactNode",
|
|
2834
2884
|
"required": false,
|
|
2835
|
-
"description": "Overrides the list's marker for this item. `undefined` inherits the\
|
|
2885
|
+
"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
2886
|
},
|
|
2837
2887
|
{
|
|
2838
2888
|
"name": "selected",
|
|
2839
2889
|
"type": "boolean",
|
|
2840
2890
|
"required": false,
|
|
2841
2891
|
"default": "false",
|
|
2842
|
-
"description": "Highlights the item with a tinted fill and a leading bar (shape plus\
|
|
2892
|
+
"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
2893
|
},
|
|
2844
2894
|
{
|
|
2845
2895
|
"name": "current",
|
|
@@ -2858,7 +2908,7 @@
|
|
|
2858
2908
|
{
|
|
2859
2909
|
"name": "List.ItemButton",
|
|
2860
2910
|
"exportedAs": "ListItemButton",
|
|
2861
|
-
"description": "A list item whose main area is a real `<button>`. The button wraps the\
|
|
2911
|
+
"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
2912
|
"nativeElement": "button",
|
|
2863
2913
|
"props": [
|
|
2864
2914
|
{
|
|
@@ -2889,20 +2939,20 @@
|
|
|
2889
2939
|
"name": "end",
|
|
2890
2940
|
"type": "ReactNode",
|
|
2891
2941
|
"required": false,
|
|
2892
|
-
"description": "Trailing content: actions (`IconButton`, `Switch`), `Badge`s, or a\
|
|
2942
|
+
"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
2943
|
},
|
|
2894
2944
|
{
|
|
2895
2945
|
"name": "marker",
|
|
2896
2946
|
"type": "ReactNode",
|
|
2897
2947
|
"required": false,
|
|
2898
|
-
"description": "Overrides the list's marker for this item. `undefined` inherits the\
|
|
2948
|
+
"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
2949
|
},
|
|
2900
2950
|
{
|
|
2901
2951
|
"name": "selected",
|
|
2902
2952
|
"type": "boolean",
|
|
2903
2953
|
"required": false,
|
|
2904
2954
|
"default": "false",
|
|
2905
|
-
"description": "Highlights the item with a tinted fill and a leading bar (shape plus\
|
|
2955
|
+
"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
2956
|
},
|
|
2907
2957
|
{
|
|
2908
2958
|
"name": "current",
|
|
@@ -2946,7 +2996,7 @@
|
|
|
2946
2996
|
{
|
|
2947
2997
|
"name": "List.ItemLink",
|
|
2948
2998
|
"exportedAs": "ListItemLink",
|
|
2949
|
-
"description": "A list item whose main area is a real `<a>`, stretched over the whole row\
|
|
2999
|
+
"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
3000
|
"nativeElement": "a",
|
|
2951
3001
|
"props": [
|
|
2952
3002
|
{
|
|
@@ -2977,20 +3027,20 @@
|
|
|
2977
3027
|
"name": "end",
|
|
2978
3028
|
"type": "ReactNode",
|
|
2979
3029
|
"required": false,
|
|
2980
|
-
"description": "Trailing content: actions (`IconButton`, `Switch`), `Badge`s, or a\
|
|
3030
|
+
"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
3031
|
},
|
|
2982
3032
|
{
|
|
2983
3033
|
"name": "marker",
|
|
2984
3034
|
"type": "ReactNode",
|
|
2985
3035
|
"required": false,
|
|
2986
|
-
"description": "Overrides the list's marker for this item. `undefined` inherits the\
|
|
3036
|
+
"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
3037
|
},
|
|
2988
3038
|
{
|
|
2989
3039
|
"name": "selected",
|
|
2990
3040
|
"type": "boolean",
|
|
2991
3041
|
"required": false,
|
|
2992
3042
|
"default": "false",
|
|
2993
|
-
"description": "Highlights the item with a tinted fill and a leading bar (shape plus\
|
|
3043
|
+
"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
3044
|
},
|
|
2995
3045
|
{
|
|
2996
3046
|
"name": "current",
|
|
@@ -3034,7 +3084,7 @@
|
|
|
3034
3084
|
{
|
|
3035
3085
|
"name": "List.Subheader",
|
|
3036
3086
|
"exportedAs": "ListSubheader",
|
|
3037
|
-
"description": "An uppercase label for a group of items. Render it before (outside) a\
|
|
3087
|
+
"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
3088
|
"nativeElement": "h3",
|
|
3039
3089
|
"props": [
|
|
3040
3090
|
{
|
|
@@ -3042,7 +3092,7 @@
|
|
|
3042
3092
|
"type": "ListSubheaderElement",
|
|
3043
3093
|
"required": false,
|
|
3044
3094
|
"default": "\"h3\"",
|
|
3045
|
-
"description": "Element to render. A heading (default `h3`) so grouped lists show up in\
|
|
3095
|
+
"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
3096
|
},
|
|
3047
3097
|
{
|
|
3048
3098
|
"name": "size",
|
|
@@ -3417,7 +3467,7 @@
|
|
|
3417
3467
|
"type": "string | number",
|
|
3418
3468
|
"required": false,
|
|
3419
3469
|
"default": "\"var(--container-xs)\" when `stickyHeader`, otherwise none",
|
|
3420
|
-
"description": "Maximum height of the scroll container (any CSS length). Rows past it\
|
|
3470
|
+
"description": "Maximum height of the scroll container (any CSS length). Rows past it\nscroll vertically."
|
|
3421
3471
|
},
|
|
3422
3472
|
{
|
|
3423
3473
|
"name": "stickyFirstColumn",
|
|
@@ -3459,7 +3509,7 @@
|
|
|
3459
3509
|
"type": "boolean",
|
|
3460
3510
|
"required": false,
|
|
3461
3511
|
"default": "false",
|
|
3462
|
-
"description": "Shows a spinner over the table, dims the body, and sets `aria-busy` on\
|
|
3512
|
+
"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
3513
|
},
|
|
3464
3514
|
{
|
|
3465
3515
|
"name": "loadingLabel",
|
|
@@ -3472,14 +3522,14 @@
|
|
|
3472
3522
|
"name": "stackBelow",
|
|
3473
3523
|
"type": "TableStackBreakpoint",
|
|
3474
3524
|
"required": false,
|
|
3475
|
-
"description": "Turns rows into stacked cards below this viewport width, labelling each\
|
|
3525
|
+
"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
3526
|
},
|
|
3477
3527
|
{
|
|
3478
3528
|
"name": "scrollLabel",
|
|
3479
3529
|
"type": "string",
|
|
3480
3530
|
"required": false,
|
|
3481
3531
|
"default": "\"Scrollable table\"",
|
|
3482
|
-
"description": "Accessible name for the scroll region, used when the table overflows and\
|
|
3532
|
+
"description": "Accessible name for the scroll region, used when the table overflows and\nhas no `Table.Caption`, `aria-label`, or `aria-labelledby`."
|
|
3483
3533
|
},
|
|
3484
3534
|
{
|
|
3485
3535
|
"name": "className",
|
|
@@ -3504,7 +3554,7 @@
|
|
|
3504
3554
|
{
|
|
3505
3555
|
"name": "Table.Caption",
|
|
3506
3556
|
"exportedAs": "TableCaption",
|
|
3507
|
-
"description": "The table's title (`<caption>`). It names the table and, when the table\
|
|
3557
|
+
"description": "The table's title (`<caption>`). It names the table and, when the table\nscrolls, its scroll region. Strongly recommended on every table.",
|
|
3508
3558
|
"nativeElement": "caption",
|
|
3509
3559
|
"props": []
|
|
3510
3560
|
},
|
|
@@ -3540,14 +3590,14 @@
|
|
|
3540
3590
|
"type": "boolean",
|
|
3541
3591
|
"required": false,
|
|
3542
3592
|
"default": "false",
|
|
3543
|
-
"description": "Shows the row as selected. Visual only: `aria-selected` is not valid on\
|
|
3593
|
+
"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
3594
|
}
|
|
3545
3595
|
]
|
|
3546
3596
|
},
|
|
3547
3597
|
{
|
|
3548
3598
|
"name": "Table.HeaderCell",
|
|
3549
3599
|
"exportedAs": "TableHeaderCell",
|
|
3550
|
-
"description": "A header cell (`<th>`). With `sortable`, the whole cell is a real\
|
|
3600
|
+
"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
3601
|
"nativeElement": "th",
|
|
3552
3602
|
"props": [
|
|
3553
3603
|
{
|
|
@@ -3569,7 +3619,7 @@
|
|
|
3569
3619
|
"type": "boolean",
|
|
3570
3620
|
"required": false,
|
|
3571
3621
|
"default": "false",
|
|
3572
|
-
"description": "Keeps content on one line and cuts it off with an ellipsis. Works best\
|
|
3622
|
+
"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
3623
|
},
|
|
3574
3624
|
{
|
|
3575
3625
|
"name": "width",
|
|
@@ -3581,7 +3631,7 @@
|
|
|
3581
3631
|
"name": "scope",
|
|
3582
3632
|
"type": "\"col\" | \"row\" | \"colgroup\" | \"rowgroup\"",
|
|
3583
3633
|
"required": false,
|
|
3584
|
-
"description": "Which cells this header labels. @default \"col\" in `Table.Head` and\
|
|
3634
|
+
"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
3635
|
},
|
|
3586
3636
|
{
|
|
3587
3637
|
"name": "sortable",
|
|
@@ -3601,7 +3651,7 @@
|
|
|
3601
3651
|
"name": "onSort",
|
|
3602
3652
|
"type": "(nextDirection: TableSortDirection) => void",
|
|
3603
3653
|
"required": false,
|
|
3604
|
-
"description": "Called when the sort button is pressed, with the suggested next direction\
|
|
3654
|
+
"description": "Called when the sort button is pressed, with the suggested next direction\n(`ascending` from none or descending, `descending` from ascending)."
|
|
3605
3655
|
}
|
|
3606
3656
|
]
|
|
3607
3657
|
},
|
|
@@ -3630,7 +3680,7 @@
|
|
|
3630
3680
|
"type": "boolean",
|
|
3631
3681
|
"required": false,
|
|
3632
3682
|
"default": "false",
|
|
3633
|
-
"description": "Keeps content on one line and cuts it off with an ellipsis. Works best\
|
|
3683
|
+
"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
3684
|
},
|
|
3635
3685
|
{
|
|
3636
3686
|
"name": "width",
|
|
@@ -3642,14 +3692,14 @@
|
|
|
3642
3692
|
"name": "label",
|
|
3643
3693
|
"type": "string",
|
|
3644
3694
|
"required": false,
|
|
3645
|
-
"description": "Column label shown beside the value when rows are stacked (`stackBelow`).\
|
|
3695
|
+
"description": "Column label shown beside the value when rows are stacked (`stackBelow`).\nDefaults to the matching header cell's text."
|
|
3646
3696
|
}
|
|
3647
3697
|
]
|
|
3648
3698
|
},
|
|
3649
3699
|
{
|
|
3650
3700
|
"name": "Table.SelectCell",
|
|
3651
3701
|
"exportedAs": "TableSelectCell",
|
|
3652
|
-
"description": "A data cell holding the row's selection checkbox. Pair with `selected` on\
|
|
3702
|
+
"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
3703
|
"nativeElement": "td",
|
|
3654
3704
|
"props": [
|
|
3655
3705
|
{
|
|
@@ -3668,7 +3718,7 @@
|
|
|
3668
3718
|
"name": "rowLabel",
|
|
3669
3719
|
"type": "string",
|
|
3670
3720
|
"required": false,
|
|
3671
|
-
"description": "Readable name of the row, used for the checkbox's accessible name:\
|
|
3721
|
+
"description": "Readable name of the row, used for the checkbox's accessible name:\n\"Select row {rowLabel}\". Ignored when `checkboxLabel` is set."
|
|
3672
3722
|
},
|
|
3673
3723
|
{
|
|
3674
3724
|
"name": "checkboxLabel",
|
|
@@ -3688,7 +3738,7 @@
|
|
|
3688
3738
|
{
|
|
3689
3739
|
"name": "Table.SelectAllCell",
|
|
3690
3740
|
"exportedAs": "TableSelectAllCell",
|
|
3691
|
-
"description": "A header cell (`<th scope=\"col\">`) with a \"select all\" checkbox. Shows the\
|
|
3741
|
+
"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
3742
|
"nativeElement": "th",
|
|
3693
3743
|
"props": [
|
|
3694
3744
|
{
|
|
@@ -6923,7 +6973,7 @@
|
|
|
6923
6973
|
},
|
|
6924
6974
|
{
|
|
6925
6975
|
"name": "Basic Single",
|
|
6926
|
-
"description": "Type to filter, ArrowDown to highlight, Enter to choose. The input shows the\
|
|
6976
|
+
"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
6977
|
},
|
|
6928
6978
|
{
|
|
6929
6979
|
"name": "Results Announcement",
|
|
@@ -6931,7 +6981,7 @@
|
|
|
6931
6981
|
},
|
|
6932
6982
|
{
|
|
6933
6983
|
"name": "Multiple",
|
|
6934
|
-
"description": "`multiple`: selections become removable chips before the input. Enter\
|
|
6984
|
+
"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
6985
|
},
|
|
6936
6986
|
{
|
|
6937
6987
|
"name": "With Groups",
|
|
@@ -6951,7 +7001,7 @@
|
|
|
6951
7001
|
},
|
|
6952
7002
|
{
|
|
6953
7003
|
"name": "Async",
|
|
6954
|
-
"description": "Server-side filtering: `filter={false}` shows `options` as given, `loading`\
|
|
7004
|
+
"description": "Server-side filtering: `filter={false}` shows `options` as given, `loading`\nshows a spinner row, and `emptyMessage` a status row when nothing matches."
|
|
6955
7005
|
},
|
|
6956
7006
|
{
|
|
6957
7007
|
"name": "Creatable",
|
|
@@ -6979,7 +7029,7 @@
|
|
|
6979
7029
|
},
|
|
6980
7030
|
{
|
|
6981
7031
|
"name": "In Modal",
|
|
6982
|
-
"description": "Inside a Modal the list is a child layer: Escape closes only the list.\
|
|
7032
|
+
"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
7033
|
},
|
|
6984
7034
|
{
|
|
6985
7035
|
"name": "Assign Players To Team",
|
|
@@ -6995,7 +7045,11 @@
|
|
|
6995
7045
|
},
|
|
6996
7046
|
{
|
|
6997
7047
|
"name": "Form submit, reset, and custom values",
|
|
6998
|
-
"description": "Form behavior: Enter submits what is shown (cleared text submits no team),\
|
|
7048
|
+
"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."
|
|
7049
|
+
},
|
|
7050
|
+
{
|
|
7051
|
+
"name": "Long list (10,000 options)",
|
|
7052
|
+
"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
7053
|
}
|
|
7000
7054
|
]
|
|
7001
7055
|
},
|
|
@@ -8257,7 +8311,7 @@
|
|
|
8257
8311
|
"category": "forms",
|
|
8258
8312
|
"folder": "FileUpload",
|
|
8259
8313
|
"import": "import { FileUpload } from \"@vjdesigns/vjdesigns-ui\";",
|
|
8260
|
-
"description": "File picker with drag and drop, validation, and a file list.\
|
|
8314
|
+
"description": "File picker with drag and drop, validation, and a file list.\n`FileUpload.List` is the standalone list for custom layouts.",
|
|
8261
8315
|
"nativeElement": "div",
|
|
8262
8316
|
"props": [
|
|
8263
8317
|
{
|
|
@@ -8356,7 +8410,7 @@
|
|
|
8356
8410
|
"type": "Size",
|
|
8357
8411
|
"required": false,
|
|
8358
8412
|
"default": "\"md\"",
|
|
8359
|
-
"description": "`sm`: compact inline row. `md`: standard dropzone. `lg`: hero dropzone.\
|
|
8413
|
+
"description": "`sm`: compact inline row. `md`: standard dropzone. `lg`: hero dropzone.\nInherits from a surrounding `Field`."
|
|
8360
8414
|
},
|
|
8361
8415
|
{
|
|
8362
8416
|
"name": "variant",
|
|
@@ -8369,7 +8423,7 @@
|
|
|
8369
8423
|
"name": "children",
|
|
8370
8424
|
"type": "ReactNode | ((state: FileUploadRenderState) => ReactNode)",
|
|
8371
8425
|
"required": false,
|
|
8372
|
-
"description": "Replaces the prompt and hint inside the dropzone. A function receives\
|
|
8426
|
+
"description": "Replaces the prompt and hint inside the dropzone. A function receives\n`{ dragging, disabled, openPicker }`. The Browse button is always rendered."
|
|
8373
8427
|
},
|
|
8374
8428
|
{
|
|
8375
8429
|
"name": "prompt",
|
|
@@ -8382,7 +8436,7 @@
|
|
|
8382
8436
|
"name": "hint",
|
|
8383
8437
|
"type": "ReactNode",
|
|
8384
8438
|
"required": false,
|
|
8385
|
-
"description": "Hint under the prompt. Defaults to text built from `accept`, `maxSize`,\
|
|
8439
|
+
"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
8440
|
},
|
|
8387
8441
|
{
|
|
8388
8442
|
"name": "browseLabel",
|
|
@@ -8441,7 +8495,7 @@
|
|
|
8441
8495
|
{
|
|
8442
8496
|
"name": "FileUpload.List",
|
|
8443
8497
|
"exportedAs": "FileUploadList",
|
|
8444
|
-
"description": "The list of selected files: icon or image thumbnail, name (truncated, full\
|
|
8498
|
+
"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
8499
|
"nativeElement": "ul",
|
|
8446
8500
|
"props": [
|
|
8447
8501
|
{
|
|
@@ -8494,7 +8548,7 @@
|
|
|
8494
8548
|
"name": "focusFallback",
|
|
8495
8549
|
"type": "() => HTMLElement | null | undefined",
|
|
8496
8550
|
"required": false,
|
|
8497
|
-
"description": "Element to focus after the last file is removed (for example the Browse\
|
|
8551
|
+
"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
8552
|
},
|
|
8499
8553
|
{
|
|
8500
8554
|
"name": "size",
|
|
@@ -8754,7 +8808,7 @@
|
|
|
8754
8808
|
"category": "forms",
|
|
8755
8809
|
"folder": "NumberInput",
|
|
8756
8810
|
"import": "import { NumberInput } from \"@vjdesigns/vjdesigns-ui\";",
|
|
8757
|
-
"description": "A numeric text field following the WAI-ARIA spinbutton pattern. The\
|
|
8811
|
+
"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
8812
|
"nativeElement": "input",
|
|
8759
8813
|
"props": [
|
|
8760
8814
|
{
|
|
@@ -8921,7 +8975,7 @@
|
|
|
8921
8975
|
"name": "precision",
|
|
8922
8976
|
"type": "number",
|
|
8923
8977
|
"required": false,
|
|
8924
|
-
"description": "Fixed number of decimal places. Committed values are rounded to it and\
|
|
8978
|
+
"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
8979
|
},
|
|
8926
8980
|
{
|
|
8927
8981
|
"name": "clampOnBlur",
|
|
@@ -8948,7 +9002,7 @@
|
|
|
8948
9002
|
"name": "formatOptions",
|
|
8949
9003
|
"type": "Intl.NumberFormatOptions",
|
|
8950
9004
|
"required": false,
|
|
8951
|
-
"description": "`Intl.NumberFormat` options for the value shown while the field is not\
|
|
9005
|
+
"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
9006
|
},
|
|
8953
9007
|
{
|
|
8954
9008
|
"name": "locale",
|
|
@@ -10674,6 +10728,10 @@
|
|
|
10674
10728
|
{
|
|
10675
10729
|
"name": "Composition: Stats period",
|
|
10676
10730
|
"description": ""
|
|
10731
|
+
},
|
|
10732
|
+
{
|
|
10733
|
+
"name": "Right To Left",
|
|
10734
|
+
"description": "Right to left: the segments run from the right and the thumb sits under the selected one."
|
|
10677
10735
|
}
|
|
10678
10736
|
]
|
|
10679
10737
|
},
|
|
@@ -18744,19 +18802,19 @@
|
|
|
18744
18802
|
"category": "overlays",
|
|
18745
18803
|
"folder": "Tooltip",
|
|
18746
18804
|
"import": "import { Tooltip } from \"@vjdesigns/vjdesigns-ui\";",
|
|
18747
|
-
"description": "A short, non-interactive label or description that appears on hover and on\
|
|
18805
|
+
"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
18806
|
"props": [
|
|
18749
18807
|
{
|
|
18750
18808
|
"name": "children",
|
|
18751
18809
|
"type": "ReactElement",
|
|
18752
18810
|
"required": true,
|
|
18753
|
-
"description": "The trigger: exactly one focusable element (a `Button`, `IconButton`,\
|
|
18811
|
+
"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
18812
|
},
|
|
18755
18813
|
{
|
|
18756
18814
|
"name": "content",
|
|
18757
18815
|
"type": "ReactNode",
|
|
18758
18816
|
"required": true,
|
|
18759
|
-
"description": "Short, plain text describing or naming the trigger. Never put interactive\
|
|
18817
|
+
"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
18818
|
},
|
|
18761
18819
|
{
|
|
18762
18820
|
"name": "shortcut",
|
|
@@ -18769,7 +18827,7 @@
|
|
|
18769
18827
|
"type": "TooltipPlacement",
|
|
18770
18828
|
"required": false,
|
|
18771
18829
|
"default": "\"top\"",
|
|
18772
|
-
"description": "Preferred side and alignment, or a logical `start` / `end` side that\
|
|
18830
|
+
"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
18831
|
},
|
|
18774
18832
|
{
|
|
18775
18833
|
"name": "offset",
|
|
@@ -18910,7 +18968,7 @@
|
|
|
18910
18968
|
"category": "overlays",
|
|
18911
18969
|
"folder": "Tooltip",
|
|
18912
18970
|
"import": "import { TooltipProvider } from \"@vjdesigns/vjdesigns-ui\";",
|
|
18913
|
-
"description": "Optional. Sets shared timing for the tooltips inside it. Tooltips work\
|
|
18971
|
+
"description": "Optional. Sets shared timing for the tooltips inside it. Tooltips work\nwithout a provider, using the defaults.",
|
|
18914
18972
|
"props": [
|
|
18915
18973
|
{
|
|
18916
18974
|
"name": "delay",
|
|
@@ -18931,7 +18989,7 @@
|
|
|
18931
18989
|
"type": "number",
|
|
18932
18990
|
"required": false,
|
|
18933
18991
|
"default": "300",
|
|
18934
|
-
"description": "After a tooltip closes, other tooltips open instantly (no `delay`) for this\
|
|
18992
|
+
"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
18993
|
},
|
|
18936
18994
|
{
|
|
18937
18995
|
"name": "children",
|
|
@@ -20570,6 +20628,12 @@
|
|
|
20570
20628
|
"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
20629
|
"module": "hooks/index.ts"
|
|
20572
20630
|
},
|
|
20631
|
+
{
|
|
20632
|
+
"name": "withExtraItems",
|
|
20633
|
+
"signature": "withExtraItems(virtualizer: Virtualizer, extra: readonly number[]): VirtualItem[]",
|
|
20634
|
+
"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`.",
|
|
20635
|
+
"module": "hooks/index.ts"
|
|
20636
|
+
},
|
|
20573
20637
|
{
|
|
20574
20638
|
"name": "cx",
|
|
20575
20639
|
"signature": "cx(...classes: Array<string | false | null | undefined>): string",
|