@vjdesigns/vjdesigns-ui 2.3.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 +199 -107
- package/dist/ai/registry.json +217 -77
- 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.d.ts +7 -2
- package/dist/components/data-display/Badge/Badge.mjs +4 -3
- package/dist/components/data-display/Badge/Badge.module.css.cjs.js +1 -1
- package/dist/components/data-display/Badge/Badge.module.css.mjs +34 -34
- 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.d.ts +65 -2
- package/dist/components/navigation/Navbar/Navbar.mjs +315 -175
- package/dist/components/navigation/Navbar/Navbar.module.css.cjs.js +1 -1
- package/dist/components/navigation/Navbar/Navbar.module.css.mjs +21 -13
- 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 +2 -2
- package/dist/i18n/merge.mjs +1 -2
- package/dist/i18n/plural.mjs +1 -2
- package/dist/i18n/types.d.ts +5 -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 +2 -2
- package/dist/locales/bn.cjs.js +1 -1
- package/dist/locales/bn.mjs +2 -2
- package/dist/locales/cs.cjs.js +1 -1
- package/dist/locales/cs.mjs +2 -2
- package/dist/locales/da.cjs.js +1 -1
- package/dist/locales/da.mjs +2 -2
- package/dist/locales/de.cjs.js +1 -1
- package/dist/locales/de.mjs +2 -2
- package/dist/locales/el.cjs.js +1 -1
- package/dist/locales/el.mjs +2 -2
- package/dist/locales/es.cjs.js +1 -1
- package/dist/locales/es.mjs +2 -2
- package/dist/locales/fa.cjs.js +1 -1
- package/dist/locales/fa.mjs +2 -2
- package/dist/locales/fi.cjs.js +1 -1
- package/dist/locales/fi.mjs +2 -2
- package/dist/locales/fr.cjs.js +1 -1
- package/dist/locales/fr.mjs +2 -2
- package/dist/locales/he.cjs.js +1 -1
- package/dist/locales/he.mjs +2 -2
- package/dist/locales/hi.cjs.js +1 -1
- package/dist/locales/hi.mjs +2 -2
- package/dist/locales/hu.cjs.js +1 -1
- package/dist/locales/hu.mjs +2 -2
- package/dist/locales/id.cjs.js +1 -1
- package/dist/locales/id.mjs +2 -2
- package/dist/locales/it.cjs.js +1 -1
- package/dist/locales/it.mjs +2 -2
- package/dist/locales/ja.cjs.js +1 -1
- package/dist/locales/ja.mjs +2 -2
- package/dist/locales/ko.cjs.js +1 -1
- package/dist/locales/ko.mjs +2 -2
- package/dist/locales/nb.cjs.js +1 -1
- package/dist/locales/nb.mjs +2 -2
- package/dist/locales/nl.cjs.js +1 -1
- package/dist/locales/nl.mjs +2 -2
- package/dist/locales/pl.cjs.js +1 -1
- package/dist/locales/pl.mjs +2 -2
- package/dist/locales/pt-BR.cjs.js +1 -1
- package/dist/locales/pt-BR.mjs +2 -2
- package/dist/locales/ro.cjs.js +1 -1
- package/dist/locales/ro.mjs +2 -2
- package/dist/locales/ru.cjs.js +1 -1
- package/dist/locales/ru.mjs +2 -2
- package/dist/locales/sv.cjs.js +1 -1
- package/dist/locales/sv.mjs +2 -2
- package/dist/locales/th.cjs.js +1 -1
- package/dist/locales/th.mjs +2 -2
- package/dist/locales/tr.cjs.js +1 -1
- package/dist/locales/tr.mjs +2 -2
- package/dist/locales/uk.cjs.js +1 -1
- package/dist/locales/uk.mjs +2 -2
- package/dist/locales/ur.cjs.js +1 -1
- package/dist/locales/ur.mjs +2 -2
- package/dist/locales/vi.cjs.js +1 -1
- package/dist/locales/vi.mjs +2 -2
- package/dist/locales/zh-Hans.cjs.js +1 -1
- package/dist/locales/zh-Hans.mjs +2 -2
- package/dist/locales/zh-Hant.cjs.js +1 -1
- package/dist/locales/zh-Hant.mjs +2 -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
|
{
|
|
@@ -687,6 +687,10 @@
|
|
|
687
687
|
"name": "In text",
|
|
688
688
|
"description": ""
|
|
689
689
|
},
|
|
690
|
+
{
|
|
691
|
+
"name": "Inverse",
|
|
692
|
+
"description": "`inverse` swaps the solid colors, for a badge on a solid tone surface: a solid Navbar, a Banner, a primary card."
|
|
693
|
+
},
|
|
690
694
|
{
|
|
691
695
|
"name": "On surfaces (both themes)",
|
|
692
696
|
"description": ""
|
|
@@ -2175,6 +2179,13 @@
|
|
|
2175
2179
|
"required": false,
|
|
2176
2180
|
"description": "Rows per page. Shows a footer with the range and `Pagination`. Without it, every row shows."
|
|
2177
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
|
+
},
|
|
2178
2189
|
{
|
|
2179
2190
|
"name": "page",
|
|
2180
2191
|
"type": "number",
|
|
@@ -2265,7 +2276,7 @@
|
|
|
2265
2276
|
"name": "layout",
|
|
2266
2277
|
"type": "\"auto\" | \"fixed\"",
|
|
2267
2278
|
"required": false,
|
|
2268
|
-
"default": "\"auto\"",
|
|
2279
|
+
"default": "\"auto\" (\"fixed\" while virtualized)",
|
|
2269
2280
|
"description": "Table layout. `fixed` makes column widths exact (content wraps or clips\ninstead of widening a column)."
|
|
2270
2281
|
},
|
|
2271
2282
|
{
|
|
@@ -2339,6 +2350,10 @@
|
|
|
2339
2350
|
{
|
|
2340
2351
|
"name": "Extending Columns",
|
|
2341
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."
|
|
2342
2357
|
}
|
|
2343
2358
|
]
|
|
2344
2359
|
},
|
|
@@ -2725,7 +2740,7 @@
|
|
|
2725
2740
|
"category": "data-display",
|
|
2726
2741
|
"folder": "List",
|
|
2727
2742
|
"import": "import { List } from \"@vjdesigns/vjdesigns-ui\";",
|
|
2728
|
-
"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\".",
|
|
2729
2744
|
"nativeElement": "ol",
|
|
2730
2745
|
"props": [
|
|
2731
2746
|
{
|
|
@@ -2759,13 +2774,13 @@
|
|
|
2759
2774
|
"name": "spacing",
|
|
2760
2775
|
"type": "Space",
|
|
2761
2776
|
"required": false,
|
|
2762
|
-
"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`."
|
|
2763
2778
|
},
|
|
2764
2779
|
{
|
|
2765
2780
|
"name": "marker",
|
|
2766
2781
|
"type": "ReactNode",
|
|
2767
2782
|
"required": false,
|
|
2768
|
-
"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."
|
|
2769
2784
|
},
|
|
2770
2785
|
{
|
|
2771
2786
|
"name": "start",
|
|
@@ -2791,7 +2806,7 @@
|
|
|
2791
2806
|
{
|
|
2792
2807
|
"name": "List.Item",
|
|
2793
2808
|
"exportedAs": "ListItem",
|
|
2794
|
-
"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`.",
|
|
2795
2810
|
"nativeElement": "li",
|
|
2796
2811
|
"props": [
|
|
2797
2812
|
{
|
|
@@ -2822,20 +2837,20 @@
|
|
|
2822
2837
|
"name": "end",
|
|
2823
2838
|
"type": "ReactNode",
|
|
2824
2839
|
"required": false,
|
|
2825
|
-
"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."
|
|
2826
2841
|
},
|
|
2827
2842
|
{
|
|
2828
2843
|
"name": "marker",
|
|
2829
2844
|
"type": "ReactNode",
|
|
2830
2845
|
"required": false,
|
|
2831
|
-
"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."
|
|
2832
2847
|
},
|
|
2833
2848
|
{
|
|
2834
2849
|
"name": "selected",
|
|
2835
2850
|
"type": "boolean",
|
|
2836
2851
|
"required": false,
|
|
2837
2852
|
"default": "false",
|
|
2838
|
-
"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."
|
|
2839
2854
|
},
|
|
2840
2855
|
{
|
|
2841
2856
|
"name": "current",
|
|
@@ -2854,7 +2869,7 @@
|
|
|
2854
2869
|
{
|
|
2855
2870
|
"name": "List.ItemButton",
|
|
2856
2871
|
"exportedAs": "ListItemButton",
|
|
2857
|
-
"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.",
|
|
2858
2873
|
"nativeElement": "button",
|
|
2859
2874
|
"props": [
|
|
2860
2875
|
{
|
|
@@ -2885,20 +2900,20 @@
|
|
|
2885
2900
|
"name": "end",
|
|
2886
2901
|
"type": "ReactNode",
|
|
2887
2902
|
"required": false,
|
|
2888
|
-
"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."
|
|
2889
2904
|
},
|
|
2890
2905
|
{
|
|
2891
2906
|
"name": "marker",
|
|
2892
2907
|
"type": "ReactNode",
|
|
2893
2908
|
"required": false,
|
|
2894
|
-
"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."
|
|
2895
2910
|
},
|
|
2896
2911
|
{
|
|
2897
2912
|
"name": "selected",
|
|
2898
2913
|
"type": "boolean",
|
|
2899
2914
|
"required": false,
|
|
2900
2915
|
"default": "false",
|
|
2901
|
-
"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."
|
|
2902
2917
|
},
|
|
2903
2918
|
{
|
|
2904
2919
|
"name": "current",
|
|
@@ -2942,7 +2957,7 @@
|
|
|
2942
2957
|
{
|
|
2943
2958
|
"name": "List.ItemLink",
|
|
2944
2959
|
"exportedAs": "ListItemLink",
|
|
2945
|
-
"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>`.",
|
|
2946
2961
|
"nativeElement": "a",
|
|
2947
2962
|
"props": [
|
|
2948
2963
|
{
|
|
@@ -2973,20 +2988,20 @@
|
|
|
2973
2988
|
"name": "end",
|
|
2974
2989
|
"type": "ReactNode",
|
|
2975
2990
|
"required": false,
|
|
2976
|
-
"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."
|
|
2977
2992
|
},
|
|
2978
2993
|
{
|
|
2979
2994
|
"name": "marker",
|
|
2980
2995
|
"type": "ReactNode",
|
|
2981
2996
|
"required": false,
|
|
2982
|
-
"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."
|
|
2983
2998
|
},
|
|
2984
2999
|
{
|
|
2985
3000
|
"name": "selected",
|
|
2986
3001
|
"type": "boolean",
|
|
2987
3002
|
"required": false,
|
|
2988
3003
|
"default": "false",
|
|
2989
|
-
"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."
|
|
2990
3005
|
},
|
|
2991
3006
|
{
|
|
2992
3007
|
"name": "current",
|
|
@@ -3030,7 +3045,7 @@
|
|
|
3030
3045
|
{
|
|
3031
3046
|
"name": "List.Subheader",
|
|
3032
3047
|
"exportedAs": "ListSubheader",
|
|
3033
|
-
"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```",
|
|
3034
3049
|
"nativeElement": "h3",
|
|
3035
3050
|
"props": [
|
|
3036
3051
|
{
|
|
@@ -3038,7 +3053,7 @@
|
|
|
3038
3053
|
"type": "ListSubheaderElement",
|
|
3039
3054
|
"required": false,
|
|
3040
3055
|
"default": "\"h3\"",
|
|
3041
|
-
"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."
|
|
3042
3057
|
},
|
|
3043
3058
|
{
|
|
3044
3059
|
"name": "size",
|
|
@@ -3413,7 +3428,7 @@
|
|
|
3413
3428
|
"type": "string | number",
|
|
3414
3429
|
"required": false,
|
|
3415
3430
|
"default": "\"var(--container-xs)\" when `stickyHeader`, otherwise none",
|
|
3416
|
-
"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."
|
|
3417
3432
|
},
|
|
3418
3433
|
{
|
|
3419
3434
|
"name": "stickyFirstColumn",
|
|
@@ -3455,7 +3470,7 @@
|
|
|
3455
3470
|
"type": "boolean",
|
|
3456
3471
|
"required": false,
|
|
3457
3472
|
"default": "false",
|
|
3458
|
-
"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."
|
|
3459
3474
|
},
|
|
3460
3475
|
{
|
|
3461
3476
|
"name": "loadingLabel",
|
|
@@ -3468,14 +3483,14 @@
|
|
|
3468
3483
|
"name": "stackBelow",
|
|
3469
3484
|
"type": "TableStackBreakpoint",
|
|
3470
3485
|
"required": false,
|
|
3471
|
-
"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."
|
|
3472
3487
|
},
|
|
3473
3488
|
{
|
|
3474
3489
|
"name": "scrollLabel",
|
|
3475
3490
|
"type": "string",
|
|
3476
3491
|
"required": false,
|
|
3477
3492
|
"default": "\"Scrollable table\"",
|
|
3478
|
-
"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`."
|
|
3479
3494
|
},
|
|
3480
3495
|
{
|
|
3481
3496
|
"name": "className",
|
|
@@ -3500,7 +3515,7 @@
|
|
|
3500
3515
|
{
|
|
3501
3516
|
"name": "Table.Caption",
|
|
3502
3517
|
"exportedAs": "TableCaption",
|
|
3503
|
-
"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.",
|
|
3504
3519
|
"nativeElement": "caption",
|
|
3505
3520
|
"props": []
|
|
3506
3521
|
},
|
|
@@ -3536,14 +3551,14 @@
|
|
|
3536
3551
|
"type": "boolean",
|
|
3537
3552
|
"required": false,
|
|
3538
3553
|
"default": "false",
|
|
3539
|
-
"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."
|
|
3540
3555
|
}
|
|
3541
3556
|
]
|
|
3542
3557
|
},
|
|
3543
3558
|
{
|
|
3544
3559
|
"name": "Table.HeaderCell",
|
|
3545
3560
|
"exportedAs": "TableHeaderCell",
|
|
3546
|
-
"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.",
|
|
3547
3562
|
"nativeElement": "th",
|
|
3548
3563
|
"props": [
|
|
3549
3564
|
{
|
|
@@ -3565,7 +3580,7 @@
|
|
|
3565
3580
|
"type": "boolean",
|
|
3566
3581
|
"required": false,
|
|
3567
3582
|
"default": "false",
|
|
3568
|
-
"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."
|
|
3569
3584
|
},
|
|
3570
3585
|
{
|
|
3571
3586
|
"name": "width",
|
|
@@ -3577,7 +3592,7 @@
|
|
|
3577
3592
|
"name": "scope",
|
|
3578
3593
|
"type": "\"col\" | \"row\" | \"colgroup\" | \"rowgroup\"",
|
|
3579
3594
|
"required": false,
|
|
3580
|
-
"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)"
|
|
3581
3596
|
},
|
|
3582
3597
|
{
|
|
3583
3598
|
"name": "sortable",
|
|
@@ -3597,7 +3612,7 @@
|
|
|
3597
3612
|
"name": "onSort",
|
|
3598
3613
|
"type": "(nextDirection: TableSortDirection) => void",
|
|
3599
3614
|
"required": false,
|
|
3600
|
-
"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)."
|
|
3601
3616
|
}
|
|
3602
3617
|
]
|
|
3603
3618
|
},
|
|
@@ -3626,7 +3641,7 @@
|
|
|
3626
3641
|
"type": "boolean",
|
|
3627
3642
|
"required": false,
|
|
3628
3643
|
"default": "false",
|
|
3629
|
-
"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."
|
|
3630
3645
|
},
|
|
3631
3646
|
{
|
|
3632
3647
|
"name": "width",
|
|
@@ -3638,14 +3653,14 @@
|
|
|
3638
3653
|
"name": "label",
|
|
3639
3654
|
"type": "string",
|
|
3640
3655
|
"required": false,
|
|
3641
|
-
"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."
|
|
3642
3657
|
}
|
|
3643
3658
|
]
|
|
3644
3659
|
},
|
|
3645
3660
|
{
|
|
3646
3661
|
"name": "Table.SelectCell",
|
|
3647
3662
|
"exportedAs": "TableSelectCell",
|
|
3648
|
-
"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.",
|
|
3649
3664
|
"nativeElement": "td",
|
|
3650
3665
|
"props": [
|
|
3651
3666
|
{
|
|
@@ -3664,7 +3679,7 @@
|
|
|
3664
3679
|
"name": "rowLabel",
|
|
3665
3680
|
"type": "string",
|
|
3666
3681
|
"required": false,
|
|
3667
|
-
"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."
|
|
3668
3683
|
},
|
|
3669
3684
|
{
|
|
3670
3685
|
"name": "checkboxLabel",
|
|
@@ -3684,7 +3699,7 @@
|
|
|
3684
3699
|
{
|
|
3685
3700
|
"name": "Table.SelectAllCell",
|
|
3686
3701
|
"exportedAs": "TableSelectAllCell",
|
|
3687
|
-
"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.",
|
|
3688
3703
|
"nativeElement": "th",
|
|
3689
3704
|
"props": [
|
|
3690
3705
|
{
|
|
@@ -6919,7 +6934,7 @@
|
|
|
6919
6934
|
},
|
|
6920
6935
|
{
|
|
6921
6936
|
"name": "Basic Single",
|
|
6922
|
-
"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)."
|
|
6923
6938
|
},
|
|
6924
6939
|
{
|
|
6925
6940
|
"name": "Results Announcement",
|
|
@@ -6927,7 +6942,7 @@
|
|
|
6927
6942
|
},
|
|
6928
6943
|
{
|
|
6929
6944
|
"name": "Multiple",
|
|
6930
|
-
"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."
|
|
6931
6946
|
},
|
|
6932
6947
|
{
|
|
6933
6948
|
"name": "With Groups",
|
|
@@ -6947,7 +6962,7 @@
|
|
|
6947
6962
|
},
|
|
6948
6963
|
{
|
|
6949
6964
|
"name": "Async",
|
|
6950
|
-
"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."
|
|
6951
6966
|
},
|
|
6952
6967
|
{
|
|
6953
6968
|
"name": "Creatable",
|
|
@@ -6975,7 +6990,7 @@
|
|
|
6975
6990
|
},
|
|
6976
6991
|
{
|
|
6977
6992
|
"name": "In Modal",
|
|
6978
|
-
"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)."
|
|
6979
6994
|
},
|
|
6980
6995
|
{
|
|
6981
6996
|
"name": "Assign Players To Team",
|
|
@@ -6991,7 +7006,11 @@
|
|
|
6991
7006
|
},
|
|
6992
7007
|
{
|
|
6993
7008
|
"name": "Form submit, reset, and custom values",
|
|
6994
|
-
"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."
|
|
6995
7014
|
}
|
|
6996
7015
|
]
|
|
6997
7016
|
},
|
|
@@ -8253,7 +8272,7 @@
|
|
|
8253
8272
|
"category": "forms",
|
|
8254
8273
|
"folder": "FileUpload",
|
|
8255
8274
|
"import": "import { FileUpload } from \"@vjdesigns/vjdesigns-ui\";",
|
|
8256
|
-
"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.",
|
|
8257
8276
|
"nativeElement": "div",
|
|
8258
8277
|
"props": [
|
|
8259
8278
|
{
|
|
@@ -8352,7 +8371,7 @@
|
|
|
8352
8371
|
"type": "Size",
|
|
8353
8372
|
"required": false,
|
|
8354
8373
|
"default": "\"md\"",
|
|
8355
|
-
"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`."
|
|
8356
8375
|
},
|
|
8357
8376
|
{
|
|
8358
8377
|
"name": "variant",
|
|
@@ -8365,7 +8384,7 @@
|
|
|
8365
8384
|
"name": "children",
|
|
8366
8385
|
"type": "ReactNode | ((state: FileUploadRenderState) => ReactNode)",
|
|
8367
8386
|
"required": false,
|
|
8368
|
-
"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."
|
|
8369
8388
|
},
|
|
8370
8389
|
{
|
|
8371
8390
|
"name": "prompt",
|
|
@@ -8378,7 +8397,7 @@
|
|
|
8378
8397
|
"name": "hint",
|
|
8379
8398
|
"type": "ReactNode",
|
|
8380
8399
|
"required": false,
|
|
8381
|
-
"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`."
|
|
8382
8401
|
},
|
|
8383
8402
|
{
|
|
8384
8403
|
"name": "browseLabel",
|
|
@@ -8437,7 +8456,7 @@
|
|
|
8437
8456
|
{
|
|
8438
8457
|
"name": "FileUpload.List",
|
|
8439
8458
|
"exportedAs": "FileUploadList",
|
|
8440
|
-
"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.",
|
|
8441
8460
|
"nativeElement": "ul",
|
|
8442
8461
|
"props": [
|
|
8443
8462
|
{
|
|
@@ -8490,7 +8509,7 @@
|
|
|
8490
8509
|
"name": "focusFallback",
|
|
8491
8510
|
"type": "() => HTMLElement | null | undefined",
|
|
8492
8511
|
"required": false,
|
|
8493
|
-
"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."
|
|
8494
8513
|
},
|
|
8495
8514
|
{
|
|
8496
8515
|
"name": "size",
|
|
@@ -8750,7 +8769,7 @@
|
|
|
8750
8769
|
"category": "forms",
|
|
8751
8770
|
"folder": "NumberInput",
|
|
8752
8771
|
"import": "import { NumberInput } from \"@vjdesigns/vjdesigns-ui\";",
|
|
8753
|
-
"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```",
|
|
8754
8773
|
"nativeElement": "input",
|
|
8755
8774
|
"props": [
|
|
8756
8775
|
{
|
|
@@ -8917,7 +8936,7 @@
|
|
|
8917
8936
|
"name": "precision",
|
|
8918
8937
|
"type": "number",
|
|
8919
8938
|
"required": false,
|
|
8920
|
-
"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."
|
|
8921
8940
|
},
|
|
8922
8941
|
{
|
|
8923
8942
|
"name": "clampOnBlur",
|
|
@@ -8944,7 +8963,7 @@
|
|
|
8944
8963
|
"name": "formatOptions",
|
|
8945
8964
|
"type": "Intl.NumberFormatOptions",
|
|
8946
8965
|
"required": false,
|
|
8947
|
-
"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%\"."
|
|
8948
8967
|
},
|
|
8949
8968
|
{
|
|
8950
8969
|
"name": "locale",
|
|
@@ -15312,7 +15331,7 @@
|
|
|
15312
15331
|
"category": "navigation",
|
|
15313
15332
|
"folder": "Navbar",
|
|
15314
15333
|
"import": "import { Navbar } from \"@vjdesigns/vjdesigns-ui\";",
|
|
15315
|
-
"description": "The top header of an app or site. Renders a `<header>` (a `banner`\
|
|
15334
|
+
"description": "The top header of an app or site. Renders a `<header>` (a `banner`\nlandmark when it isn't inside `main`, `article`, `aside`, `nav`, or\n`section`) with brand, navigation, and actions. Below `collapseBelow`\nthe navigation moves into a modal drawer opened by a menu button.\n\n```tsx\n<Navbar>\n <Navbar.Brand href=\"/\">Hoops</Navbar.Brand>\n <Navbar.Nav>\n <Navbar.Link href=\"/\" active>Home</Navbar.Link>\n <Navbar.Link href=\"/teams\">Teams</Navbar.Link>\n </Navbar.Nav>\n <Navbar.Actions>\n <Button size=\"sm\">Sign in</Button>\n </Navbar.Actions>\n</Navbar>\n```",
|
|
15316
15335
|
"nativeElement": "header",
|
|
15317
15336
|
"props": [
|
|
15318
15337
|
{
|
|
@@ -15347,7 +15366,7 @@
|
|
|
15347
15366
|
"type": "boolean",
|
|
15348
15367
|
"required": false,
|
|
15349
15368
|
"default": "true",
|
|
15350
|
-
"description": "Keeps focused and scrolled-to content clear of a `sticky` or `fixed`\
|
|
15369
|
+
"description": "Keeps focused and scrolled-to content clear of a `sticky` or `fixed`\nbar (WCAG 2.4.11): while mounted, sets `scroll-padding-top` on the bar's\nscroll container to the bar's height, and restores it on unmount. Set\n`false` to manage it yourself, e.g. `html { scroll-padding-top:\nvar(--header-height) }` (the md bar's height). Inside the bar,\n`--navbar-height` holds its height."
|
|
15351
15370
|
},
|
|
15352
15371
|
{
|
|
15353
15372
|
"name": "bordered",
|
|
@@ -15368,14 +15387,14 @@
|
|
|
15368
15387
|
"type": "boolean",
|
|
15369
15388
|
"required": false,
|
|
15370
15389
|
"default": "false",
|
|
15371
|
-
"description": "Shows the soft shadow only once the window has scrolled (a passive,\
|
|
15390
|
+
"description": "Shows the soft shadow only once the window has scrolled (a passive,\nframe-throttled listener). A `transparent` bar also fills with the\nsurface color so links stay readable over content."
|
|
15372
15391
|
},
|
|
15373
15392
|
{
|
|
15374
15393
|
"name": "contained",
|
|
15375
15394
|
"type": "boolean",
|
|
15376
15395
|
"required": false,
|
|
15377
15396
|
"default": "true",
|
|
15378
|
-
"description": "Centers the content in a max-width `Container` with responsive gutters.\
|
|
15397
|
+
"description": "Centers the content in a max-width `Container` with responsive gutters.\nWhen `false`, the content spans the full width (gutters are kept). To\ncompose your own layout instead, set `contained={false}`."
|
|
15379
15398
|
},
|
|
15380
15399
|
{
|
|
15381
15400
|
"name": "maxWidth",
|
|
@@ -15389,7 +15408,7 @@
|
|
|
15389
15408
|
"type": "NavbarCollapseBreakpoint",
|
|
15390
15409
|
"required": false,
|
|
15391
15410
|
"default": "\"md\"",
|
|
15392
|
-
"description": "Below this breakpoint (sm 640px, md 768px, lg 1024px), `Navbar.Nav`\
|
|
15411
|
+
"description": "Below this breakpoint (sm 640px, md 768px, lg 1024px), `Navbar.Nav`\nis hidden and a menu button opens the links in a drawer instead."
|
|
15393
15412
|
},
|
|
15394
15413
|
{
|
|
15395
15414
|
"name": "open",
|
|
@@ -15436,7 +15455,7 @@
|
|
|
15436
15455
|
"type": "NavbarActiveTone",
|
|
15437
15456
|
"required": false,
|
|
15438
15457
|
"default": "\"accent\"",
|
|
15439
|
-
"description": "Color of the active link's pill and indicator bar, in the bar and the\
|
|
15458
|
+
"description": "Color of the active link's pill and indicator bar, in the bar and the\nmobile menu: `accent` (the theme's accent), `primary` (the brand color), or\n`neutral`. The `solid` variant always marks the active link with the\non-primary color."
|
|
15440
15459
|
}
|
|
15441
15460
|
],
|
|
15442
15461
|
"subcomponents": [
|
|
@@ -15449,7 +15468,7 @@
|
|
|
15449
15468
|
"name": "as",
|
|
15450
15469
|
"type": "C",
|
|
15451
15470
|
"required": false,
|
|
15452
|
-
"description": "Component or element to render. Defaults to `a` when `href` is set,\
|
|
15471
|
+
"description": "Component or element to render. Defaults to `a` when `href` is set,\notherwise `div`. Pass a router link (e.g. React Router or Next.js `Link`)\nand its props (such as `to`) are accepted; it must forward `className`\nand ARIA props to its `<a>`."
|
|
15453
15472
|
},
|
|
15454
15473
|
{
|
|
15455
15474
|
"name": "children",
|
|
@@ -15462,7 +15481,7 @@
|
|
|
15462
15481
|
{
|
|
15463
15482
|
"name": "Navbar.Nav",
|
|
15464
15483
|
"exportedAs": "NavbarNav",
|
|
15465
|
-
"description": "The primary links: a `<nav>` landmark around a `<ul>`. Above the\
|
|
15484
|
+
"description": "The primary links: a `<nav>` landmark around a `<ul>`. Above the\n`collapseBelow` breakpoint they sit in the bar; below it they are hidden\n(`display: none`) and the same links render vertically in a drawer that the\nmenu button opens. Only one copy is ever exposed to assistive technology.\n\nOther props go on the inline `<nav>` only. The drawer copy gets the same\n`aria-label` / `aria-labelledby`.",
|
|
15466
15485
|
"nativeElement": "nav",
|
|
15467
15486
|
"props": [
|
|
15468
15487
|
{
|
|
@@ -15476,14 +15495,14 @@
|
|
|
15476
15495
|
"type": "NavbarNavAlign",
|
|
15477
15496
|
"required": false,
|
|
15478
15497
|
"default": "\"start\"",
|
|
15479
|
-
"description": "Where the links sit in the bar, between the brand and the actions:\
|
|
15498
|
+
"description": "Where the links sit in the bar, between the brand and the actions:\n`start` (next to the brand; left in left-to-right layouts), `center`,\nor `end` (next to the actions; right in left-to-right layouts). Logical,\nso it flips in right-to-left layouts. The mobile drawer always lists\nthem vertically."
|
|
15480
15499
|
},
|
|
15481
15500
|
{
|
|
15482
15501
|
"name": "gap",
|
|
15483
15502
|
"type": "Responsive<Space>",
|
|
15484
15503
|
"required": false,
|
|
15485
15504
|
"default": "1",
|
|
15486
|
-
"description": "Space between the links in the bar, as a spacing step (`4` is\
|
|
15505
|
+
"description": "Space between the links in the bar, as a spacing step (`4` is\n`--space-4`, 16px). Accepts one value or one per breakpoint, e.g.\n`{ base: 2, xl: 6 }`. The mobile drawer keeps its own vertical spacing."
|
|
15487
15506
|
},
|
|
15488
15507
|
{
|
|
15489
15508
|
"name": "aria-label",
|
|
@@ -15497,7 +15516,7 @@
|
|
|
15497
15516
|
{
|
|
15498
15517
|
"name": "Navbar.Item",
|
|
15499
15518
|
"exportedAs": "NavbarItem",
|
|
15500
|
-
"description": "A list item in `Navbar.Nav`. `Navbar.Link` adds its own `<li>`, so you\
|
|
15519
|
+
"description": "A list item in `Navbar.Nav`. `Navbar.Link` adds its own `<li>`, so you\nonly need this to wrap something else, to put props on the `<li>`, or to\nshow an item only in the bar or only in the drawer (`showIn`). A `ref`\nattaches to the bar's copy.",
|
|
15501
15520
|
"nativeElement": "li",
|
|
15502
15521
|
"props": [
|
|
15503
15522
|
{
|
|
@@ -15511,27 +15530,27 @@
|
|
|
15511
15530
|
"type": "NavbarItemShowIn",
|
|
15512
15531
|
"required": false,
|
|
15513
15532
|
"default": "\"both\"",
|
|
15514
|
-
"description": "Where the item appears. `Navbar.Nav` renders its children twice (in the\
|
|
15533
|
+
"description": "Where the item appears. `Navbar.Nav` renders its children twice (in the\nbar and in the drawer), so a stateful child (a Menu, a toggle) is\nmounted twice and its drawer copy resets each time the drawer opens.\nShow such an item in one place only, or put it in `Navbar.Actions`."
|
|
15515
15534
|
}
|
|
15516
15535
|
]
|
|
15517
15536
|
},
|
|
15518
15537
|
{
|
|
15519
15538
|
"name": "Navbar.Link",
|
|
15520
15539
|
"exportedAs": "NavbarLink",
|
|
15521
|
-
"description": "A primary navigation link. Wraps itself in an `<li>` unless it's already\
|
|
15540
|
+
"description": "A primary navigation link. Wraps itself in an `<li>` unless it's already\ninside `Navbar.Item`. In the mobile drawer, clicking it closes the drawer\n(even if a router prevents the default navigation).\n\nIt renders once in the bar and once in the drawer (only one is ever\nexposed), so don't give it an `id`. A `ref` attaches to the bar's copy.",
|
|
15522
15541
|
"props": [
|
|
15523
15542
|
{
|
|
15524
15543
|
"name": "as",
|
|
15525
15544
|
"type": "C",
|
|
15526
15545
|
"required": false,
|
|
15527
|
-
"description": "Component or element to render. Defaults to `a`. Pass a router link\
|
|
15546
|
+
"description": "Component or element to render. Defaults to `a`. Pass a router link\n(e.g. React Router or Next.js `Link`) and its props (such as `to`) are\naccepted and typed. It must forward `className`, `onClick`, and ARIA\nprops to its `<a>`."
|
|
15528
15547
|
},
|
|
15529
15548
|
{
|
|
15530
15549
|
"name": "active",
|
|
15531
15550
|
"type": "boolean",
|
|
15532
15551
|
"required": false,
|
|
15533
15552
|
"default": "false",
|
|
15534
|
-
"description": "Marks the link as the current page: sets `aria-current=\"page\"` and shows\
|
|
15553
|
+
"description": "Marks the link as the current page: sets `aria-current=\"page\"` and shows\na filled pill with an indicator bar, so the state never relies on color\nalone."
|
|
15535
15554
|
},
|
|
15536
15555
|
{
|
|
15537
15556
|
"name": "icon",
|
|
@@ -15539,6 +15558,24 @@
|
|
|
15539
15558
|
"required": false,
|
|
15540
15559
|
"description": "Decorative icon before the label. Hidden from assistive technology."
|
|
15541
15560
|
},
|
|
15561
|
+
{
|
|
15562
|
+
"name": "badge",
|
|
15563
|
+
"type": "NavbarBadgeValue",
|
|
15564
|
+
"required": false,
|
|
15565
|
+
"description": "A count (rendered with `Badge` `count`, capped at 99+, hidden at 0) or a\nshort text such as \"New\", after the label. It's part of the link's name\n(\"Messages 3\"), in the bar and the mobile menu."
|
|
15566
|
+
},
|
|
15567
|
+
{
|
|
15568
|
+
"name": "badgeLabel",
|
|
15569
|
+
"type": "string",
|
|
15570
|
+
"required": false,
|
|
15571
|
+
"description": "Screen-reader text for the badge, e.g. \"3 unread messages\". Replaces the visible badge text in the accessible name."
|
|
15572
|
+
},
|
|
15573
|
+
{
|
|
15574
|
+
"name": "badgeTone",
|
|
15575
|
+
"type": "Tone",
|
|
15576
|
+
"required": false,
|
|
15577
|
+
"description": "Badge color. By default `accent`, except in the `solid` bar, where the\nbadge takes the bar's own colors swapped (a `Badge` `variant=\"inverse\"`)\nso it stands out from the bar in both themes. Setting it always gives a\nsolid badge in that tone."
|
|
15578
|
+
},
|
|
15542
15579
|
{
|
|
15543
15580
|
"name": "children",
|
|
15544
15581
|
"type": "ReactNode",
|
|
@@ -15547,6 +15584,83 @@
|
|
|
15547
15584
|
}
|
|
15548
15585
|
]
|
|
15549
15586
|
},
|
|
15587
|
+
{
|
|
15588
|
+
"name": "Navbar.Group",
|
|
15589
|
+
"exportedAs": "NavbarGroup",
|
|
15590
|
+
"description": "A group of links under one button, following the WAI-ARIA disclosure\nnavigation pattern (not a `menu`): the button has `aria-expanded`, and the\nlinks stay ordinary links in the Tab order.\n\n- In the bar: the button opens a dropdown below it. Escape closes it and\n returns focus to the button; so do a press outside, Tab moving focus out\n of the group, and activating a link. Opening one group closes the others.\n- In the mobile menu: an expandable section with the links indented below.",
|
|
15591
|
+
"nativeElement": "li",
|
|
15592
|
+
"props": [
|
|
15593
|
+
{
|
|
15594
|
+
"name": "label",
|
|
15595
|
+
"type": "ReactNode",
|
|
15596
|
+
"required": true,
|
|
15597
|
+
"description": "The group button's visible label, and its accessible name."
|
|
15598
|
+
},
|
|
15599
|
+
{
|
|
15600
|
+
"name": "icon",
|
|
15601
|
+
"type": "ReactNode",
|
|
15602
|
+
"required": false,
|
|
15603
|
+
"description": "Decorative icon before the label."
|
|
15604
|
+
},
|
|
15605
|
+
{
|
|
15606
|
+
"name": "children",
|
|
15607
|
+
"type": "ReactNode",
|
|
15608
|
+
"required": false,
|
|
15609
|
+
"description": "The group's `Navbar.Link`s."
|
|
15610
|
+
},
|
|
15611
|
+
{
|
|
15612
|
+
"name": "active",
|
|
15613
|
+
"type": "boolean",
|
|
15614
|
+
"required": false,
|
|
15615
|
+
"default": "false",
|
|
15616
|
+
"description": "One of the group's links is the current page. The button then shows the\nactive look (it doesn't set `aria-current`; the link does), and the\ngroup starts open in the mobile menu."
|
|
15617
|
+
},
|
|
15618
|
+
{
|
|
15619
|
+
"name": "badge",
|
|
15620
|
+
"type": "NavbarBadgeValue",
|
|
15621
|
+
"required": false,
|
|
15622
|
+
"description": "A count or short text on the group button, like `Navbar.Link`'s `badge`."
|
|
15623
|
+
},
|
|
15624
|
+
{
|
|
15625
|
+
"name": "badgeLabel",
|
|
15626
|
+
"type": "string",
|
|
15627
|
+
"required": false,
|
|
15628
|
+
"description": "Screen-reader text for the badge."
|
|
15629
|
+
},
|
|
15630
|
+
{
|
|
15631
|
+
"name": "badgeTone",
|
|
15632
|
+
"type": "Tone",
|
|
15633
|
+
"required": false,
|
|
15634
|
+
"description": "Badge color. Same default as `Navbar.Link`'s `badgeTone` (inverse on the solid bar)."
|
|
15635
|
+
},
|
|
15636
|
+
{
|
|
15637
|
+
"name": "open",
|
|
15638
|
+
"type": "boolean",
|
|
15639
|
+
"required": false,
|
|
15640
|
+
"description": "Controlled open state of the dropdown in the bar."
|
|
15641
|
+
},
|
|
15642
|
+
{
|
|
15643
|
+
"name": "defaultOpen",
|
|
15644
|
+
"type": "boolean",
|
|
15645
|
+
"required": false,
|
|
15646
|
+
"default": "false",
|
|
15647
|
+
"description": "Initial open state of the dropdown when uncontrolled."
|
|
15648
|
+
},
|
|
15649
|
+
{
|
|
15650
|
+
"name": "onOpenChange",
|
|
15651
|
+
"type": "(open: boolean) => void",
|
|
15652
|
+
"required": false,
|
|
15653
|
+
"description": "Called with the next open state of the dropdown in the bar."
|
|
15654
|
+
},
|
|
15655
|
+
{
|
|
15656
|
+
"name": "disabled",
|
|
15657
|
+
"type": "boolean",
|
|
15658
|
+
"required": false,
|
|
15659
|
+
"default": "false",
|
|
15660
|
+
"description": "Disables the group button."
|
|
15661
|
+
}
|
|
15662
|
+
]
|
|
15663
|
+
},
|
|
15550
15664
|
{
|
|
15551
15665
|
"name": "Navbar.Actions",
|
|
15552
15666
|
"exportedAs": "NavbarActions",
|
|
@@ -15596,9 +15710,29 @@
|
|
|
15596
15710
|
"name": "Active Link",
|
|
15597
15711
|
"description": "`active` sets `aria-current=\"page\"` and draws an accent-tinted pill with an\r\nindicator bar, so the current page is marked by shape as well as color.\r\nLinks can carry a decorative `icon`."
|
|
15598
15712
|
},
|
|
15713
|
+
{
|
|
15714
|
+
"name": "Link Badges",
|
|
15715
|
+
"description": "`badge` on `Navbar.Link` (and `Navbar.Group`) shows a count or short text\r\nafter the label, in the bar and the mobile menu. `badgeLabel` gives screen\r\nreaders the full meaning (\"Messages, 3 unread messages\"). On the solid bar,\r\na badge without a `badgeTone` swaps the bar's colors (`Badge`\r\n`variant=\"inverse\"`), so it stands out in both themes."
|
|
15716
|
+
},
|
|
15717
|
+
{
|
|
15718
|
+
"name": "Link Groups",
|
|
15719
|
+
"description": "`Navbar.Group` puts links under one button (the WAI-ARIA disclosure\r\nnavigation pattern, not a menu). The button opens a dropdown; Escape, a\r\npress outside, Tab moving out, or choosing a link closes it, and opening\r\none group closes the other. `active` marks the group holding the current page."
|
|
15720
|
+
},
|
|
15721
|
+
{
|
|
15722
|
+
"name": "Link group, last on the page",
|
|
15723
|
+
"description": "A group as the last focusable thing on the page: Tab past its last link\r\nleaves the page, and the dropdown still closes. A press on the panel's\r\npadding (nothing focusable) keeps it open."
|
|
15724
|
+
},
|
|
15725
|
+
{
|
|
15726
|
+
"name": "Link Groups Mobile",
|
|
15727
|
+
"description": "In the mobile menu, a group is an expandable section; the one holding the current page starts open."
|
|
15728
|
+
},
|
|
15729
|
+
{
|
|
15730
|
+
"name": "Link Groups Right To Left",
|
|
15731
|
+
"description": "Right-to-left: the dropdown lines up with the button's right edge."
|
|
15732
|
+
},
|
|
15599
15733
|
{
|
|
15600
15734
|
"name": "Mobile",
|
|
15601
|
-
"description": "
|
|
15735
|
+
"description": ""
|
|
15602
15736
|
},
|
|
15603
15737
|
{
|
|
15604
15738
|
"name": "Mobile Solid",
|
|
@@ -18625,19 +18759,19 @@
|
|
|
18625
18759
|
"category": "overlays",
|
|
18626
18760
|
"folder": "Tooltip",
|
|
18627
18761
|
"import": "import { Tooltip } from \"@vjdesigns/vjdesigns-ui\";",
|
|
18628
|
-
"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.",
|
|
18629
18763
|
"props": [
|
|
18630
18764
|
{
|
|
18631
18765
|
"name": "children",
|
|
18632
18766
|
"type": "ReactElement",
|
|
18633
18767
|
"required": true,
|
|
18634
|
-
"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."
|
|
18635
18769
|
},
|
|
18636
18770
|
{
|
|
18637
18771
|
"name": "content",
|
|
18638
18772
|
"type": "ReactNode",
|
|
18639
18773
|
"required": true,
|
|
18640
|
-
"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."
|
|
18641
18775
|
},
|
|
18642
18776
|
{
|
|
18643
18777
|
"name": "shortcut",
|
|
@@ -18650,7 +18784,7 @@
|
|
|
18650
18784
|
"type": "TooltipPlacement",
|
|
18651
18785
|
"required": false,
|
|
18652
18786
|
"default": "\"top\"",
|
|
18653
|
-
"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."
|
|
18654
18788
|
},
|
|
18655
18789
|
{
|
|
18656
18790
|
"name": "offset",
|
|
@@ -18791,7 +18925,7 @@
|
|
|
18791
18925
|
"category": "overlays",
|
|
18792
18926
|
"folder": "Tooltip",
|
|
18793
18927
|
"import": "import { TooltipProvider } from \"@vjdesigns/vjdesigns-ui\";",
|
|
18794
|
-
"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.",
|
|
18795
18929
|
"props": [
|
|
18796
18930
|
{
|
|
18797
18931
|
"name": "delay",
|
|
@@ -18812,7 +18946,7 @@
|
|
|
18812
18946
|
"type": "number",
|
|
18813
18947
|
"required": false,
|
|
18814
18948
|
"default": "300",
|
|
18815
|
-
"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."
|
|
18816
18950
|
},
|
|
18817
18951
|
{
|
|
18818
18952
|
"name": "children",
|
|
@@ -20451,6 +20585,12 @@
|
|
|
20451
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```",
|
|
20452
20586
|
"module": "hooks/index.ts"
|
|
20453
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
|
+
},
|
|
20454
20594
|
{
|
|
20455
20595
|
"name": "cx",
|
|
20456
20596
|
"signature": "cx(...classes: Array<string | false | null | undefined>): string",
|