@olddevs/ui 0.0.0-stage → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/LICENSE +21 -0
- package/NOTICE +100 -0
- package/README.md +145 -2
- package/README.ru.md +146 -0
- package/dist/color.d.ts +22 -0
- package/dist/color.d.ts.map +1 -0
- package/dist/color.js +2 -0
- package/dist/color.js.map +1 -0
- package/dist/components/actions/Alert.d.ts +46 -0
- package/dist/components/actions/Alert.d.ts.map +1 -0
- package/dist/components/actions/Alert.js +20 -0
- package/dist/components/actions/Alert.js.map +1 -0
- package/dist/components/actions/Banner.d.ts +58 -0
- package/dist/components/actions/Banner.d.ts.map +1 -0
- package/dist/components/actions/Banner.js +20 -0
- package/dist/components/actions/Banner.js.map +1 -0
- package/dist/components/actions/Button.d.ts +79 -0
- package/dist/components/actions/Button.d.ts.map +1 -0
- package/dist/components/actions/Button.js +29 -0
- package/dist/components/actions/Button.js.map +1 -0
- package/dist/components/actions/ButtonGroup.d.ts +32 -0
- package/dist/components/actions/ButtonGroup.d.ts.map +1 -0
- package/dist/components/actions/ButtonGroup.js +10 -0
- package/dist/components/actions/ButtonGroup.js.map +1 -0
- package/dist/components/actions/Chip.d.ts +36 -0
- package/dist/components/actions/Chip.d.ts.map +1 -0
- package/dist/components/actions/Chip.js +16 -0
- package/dist/components/actions/Chip.js.map +1 -0
- package/dist/components/actions/CopyButton.d.ts +32 -0
- package/dist/components/actions/CopyButton.d.ts.map +1 -0
- package/dist/components/actions/CopyButton.js +41 -0
- package/dist/components/actions/CopyButton.js.map +1 -0
- package/dist/components/actions/Progress.d.ts +36 -0
- package/dist/components/actions/Progress.d.ts.map +1 -0
- package/dist/components/actions/Progress.js +14 -0
- package/dist/components/actions/Progress.js.map +1 -0
- package/dist/components/actions/Segmented.d.ts +64 -0
- package/dist/components/actions/Segmented.d.ts.map +1 -0
- package/dist/components/actions/Segmented.js +14 -0
- package/dist/components/actions/Segmented.js.map +1 -0
- package/dist/components/actions/Spinner.d.ts +46 -0
- package/dist/components/actions/Spinner.d.ts.map +1 -0
- package/dist/components/actions/Spinner.js +17 -0
- package/dist/components/actions/Spinner.js.map +1 -0
- package/dist/components/actions/SplitButton.d.ts +92 -0
- package/dist/components/actions/SplitButton.d.ts.map +1 -0
- package/dist/components/actions/SplitButton.js +21 -0
- package/dist/components/actions/SplitButton.js.map +1 -0
- package/dist/components/actions/StatusBadge.d.ts +26 -0
- package/dist/components/actions/StatusBadge.d.ts.map +1 -0
- package/dist/components/actions/StatusBadge.js +14 -0
- package/dist/components/actions/StatusBadge.js.map +1 -0
- package/dist/components/actions/Toaster.d.ts +83 -0
- package/dist/components/actions/Toaster.d.ts.map +1 -0
- package/dist/components/actions/Toaster.js +38 -0
- package/dist/components/actions/Toaster.js.map +1 -0
- package/dist/components/actions/Toggle.d.ts +75 -0
- package/dist/components/actions/Toggle.d.ts.map +1 -0
- package/dist/components/actions/Toggle.js +39 -0
- package/dist/components/actions/Toggle.js.map +1 -0
- package/dist/components/actions/ToggleGroup.d.ts +63 -0
- package/dist/components/actions/ToggleGroup.d.ts.map +1 -0
- package/dist/components/actions/ToggleGroup.js +30 -0
- package/dist/components/actions/ToggleGroup.js.map +1 -0
- package/dist/components/actions/Toolbar.d.ts +52 -0
- package/dist/components/actions/Toolbar.d.ts.map +1 -0
- package/dist/components/actions/Toolbar.js +98 -0
- package/dist/components/actions/Toolbar.js.map +1 -0
- package/dist/components/actions/Truncate.d.ts +31 -0
- package/dist/components/actions/Truncate.d.ts.map +1 -0
- package/dist/components/actions/Truncate.js +32 -0
- package/dist/components/actions/Truncate.js.map +1 -0
- package/dist/components/app-shell/AppShell.d.ts +106 -0
- package/dist/components/app-shell/AppShell.d.ts.map +1 -0
- package/dist/components/app-shell/AppShell.js +29 -0
- package/dist/components/app-shell/AppShell.js.map +1 -0
- package/dist/components/app-shell/MobileTabBar.d.ts +130 -0
- package/dist/components/app-shell/MobileTabBar.d.ts.map +1 -0
- package/dist/components/app-shell/MobileTabBar.js +50 -0
- package/dist/components/app-shell/MobileTabBar.js.map +1 -0
- package/dist/components/app-shell/NavItem.d.ts +72 -0
- package/dist/components/app-shell/NavItem.d.ts.map +1 -0
- package/dist/components/app-shell/NavItem.js +22 -0
- package/dist/components/app-shell/NavItem.js.map +1 -0
- package/dist/components/app-shell/SideNav.d.ts +65 -0
- package/dist/components/app-shell/SideNav.d.ts.map +1 -0
- package/dist/components/app-shell/SideNav.js +31 -0
- package/dist/components/app-shell/SideNav.js.map +1 -0
- package/dist/components/app-shell/SplitPanel.d.ts +121 -0
- package/dist/components/app-shell/SplitPanel.d.ts.map +1 -0
- package/dist/components/app-shell/SplitPanel.js +88 -0
- package/dist/components/app-shell/SplitPanel.js.map +1 -0
- package/dist/components/app-shell/TopBar.d.ts +43 -0
- package/dist/components/app-shell/TopBar.d.ts.map +1 -0
- package/dist/components/app-shell/TopBar.js +24 -0
- package/dist/components/app-shell/TopBar.js.map +1 -0
- package/dist/components/content/AspectRatio.d.ts +25 -0
- package/dist/components/content/AspectRatio.d.ts.map +1 -0
- package/dist/components/content/AspectRatio.js +7 -0
- package/dist/components/content/AspectRatio.js.map +1 -0
- package/dist/components/content/Avatar.d.ts +22 -0
- package/dist/components/content/Avatar.d.ts.map +1 -0
- package/dist/components/content/Avatar.js +23 -0
- package/dist/components/content/Avatar.js.map +1 -0
- package/dist/components/content/AvatarGroup.d.ts +42 -0
- package/dist/components/content/AvatarGroup.d.ts.map +1 -0
- package/dist/components/content/AvatarGroup.js +11 -0
- package/dist/components/content/AvatarGroup.js.map +1 -0
- package/dist/components/content/Badge.d.ts +41 -0
- package/dist/components/content/Badge.d.ts.map +1 -0
- package/dist/components/content/Badge.js +13 -0
- package/dist/components/content/Badge.js.map +1 -0
- package/dist/components/content/Card.d.ts +59 -0
- package/dist/components/content/Card.d.ts.map +1 -0
- package/dist/components/content/Card.js +20 -0
- package/dist/components/content/Card.js.map +1 -0
- package/dist/components/content/Carousel.d.ts +79 -0
- package/dist/components/content/Carousel.d.ts.map +1 -0
- package/dist/components/content/Carousel.js +172 -0
- package/dist/components/content/Carousel.js.map +1 -0
- package/dist/components/content/CodeView.d.ts +76 -0
- package/dist/components/content/CodeView.d.ts.map +1 -0
- package/dist/components/content/CodeView.js +12 -0
- package/dist/components/content/CodeView.js.map +1 -0
- package/dist/components/content/DescriptionList.d.ts +31 -0
- package/dist/components/content/DescriptionList.d.ts.map +1 -0
- package/dist/components/content/DescriptionList.js +10 -0
- package/dist/components/content/DescriptionList.js.map +1 -0
- package/dist/components/content/EditableList.d.ts +162 -0
- package/dist/components/content/EditableList.d.ts.map +1 -0
- package/dist/components/content/EditableList.js +241 -0
- package/dist/components/content/EditableList.js.map +1 -0
- package/dist/components/content/EmptyState.d.ts +31 -0
- package/dist/components/content/EmptyState.d.ts.map +1 -0
- package/dist/components/content/EmptyState.js +9 -0
- package/dist/components/content/EmptyState.js.map +1 -0
- package/dist/components/content/ErrorState.d.ts +52 -0
- package/dist/components/content/ErrorState.d.ts.map +1 -0
- package/dist/components/content/ErrorState.js +16 -0
- package/dist/components/content/ErrorState.js.map +1 -0
- package/dist/components/content/Grid.d.ts +57 -0
- package/dist/components/content/Grid.d.ts.map +1 -0
- package/dist/components/content/Grid.js +85 -0
- package/dist/components/content/Grid.js.map +1 -0
- package/dist/components/content/Heading.d.ts +43 -0
- package/dist/components/content/Heading.d.ts.map +1 -0
- package/dist/components/content/Heading.js +21 -0
- package/dist/components/content/Heading.js.map +1 -0
- package/dist/components/content/Image.d.ts +94 -0
- package/dist/components/content/Image.d.ts.map +1 -0
- package/dist/components/content/Image.js +41 -0
- package/dist/components/content/Image.js.map +1 -0
- package/dist/components/content/Kbd.d.ts +31 -0
- package/dist/components/content/Kbd.d.ts.map +1 -0
- package/dist/components/content/Kbd.js +13 -0
- package/dist/components/content/Kbd.js.map +1 -0
- package/dist/components/content/Keyboard.d.ts +32 -0
- package/dist/components/content/Keyboard.d.ts.map +1 -0
- package/dist/components/content/Keyboard.js +381 -0
- package/dist/components/content/Keyboard.js.map +1 -0
- package/dist/components/content/Link.d.ts +46 -0
- package/dist/components/content/Link.d.ts.map +1 -0
- package/dist/components/content/Link.js +38 -0
- package/dist/components/content/Link.js.map +1 -0
- package/dist/components/content/MediaCard.d.ts +56 -0
- package/dist/components/content/MediaCard.d.ts.map +1 -0
- package/dist/components/content/MediaCard.js +15 -0
- package/dist/components/content/MediaCard.js.map +1 -0
- package/dist/components/content/NotificationCenter.d.ts +68 -0
- package/dist/components/content/NotificationCenter.d.ts.map +1 -0
- package/dist/components/content/NotificationCenter.js +14 -0
- package/dist/components/content/NotificationCenter.js.map +1 -0
- package/dist/components/content/NotificationList.d.ts +111 -0
- package/dist/components/content/NotificationList.d.ts.map +1 -0
- package/dist/components/content/NotificationList.js +48 -0
- package/dist/components/content/NotificationList.js.map +1 -0
- package/dist/components/content/ScrollArea.d.ts +30 -0
- package/dist/components/content/ScrollArea.d.ts.map +1 -0
- package/dist/components/content/ScrollArea.js +7 -0
- package/dist/components/content/ScrollArea.js.map +1 -0
- package/dist/components/content/Separator.d.ts +19 -0
- package/dist/components/content/Separator.d.ts.map +1 -0
- package/dist/components/content/Separator.js +14 -0
- package/dist/components/content/Separator.js.map +1 -0
- package/dist/components/content/Skeleton.d.ts +24 -0
- package/dist/components/content/Skeleton.d.ts.map +1 -0
- package/dist/components/content/Skeleton.js +8 -0
- package/dist/components/content/Skeleton.js.map +1 -0
- package/dist/components/content/SortableList.d.ts +98 -0
- package/dist/components/content/SortableList.d.ts.map +1 -0
- package/dist/components/content/SortableList.js +46 -0
- package/dist/components/content/SortableList.js.map +1 -0
- package/dist/components/content/Stat.d.ts +46 -0
- package/dist/components/content/Stat.d.ts.map +1 -0
- package/dist/components/content/Stat.js +12 -0
- package/dist/components/content/Stat.js.map +1 -0
- package/dist/components/content/Table.d.ts +110 -0
- package/dist/components/content/Table.d.ts.map +1 -0
- package/dist/components/content/Table.js +66 -0
- package/dist/components/content/Table.js.map +1 -0
- package/dist/components/content/TagGroup.d.ts +120 -0
- package/dist/components/content/TagGroup.d.ts.map +1 -0
- package/dist/components/content/TagGroup.js +20 -0
- package/dist/components/content/TagGroup.js.map +1 -0
- package/dist/components/content/Text.d.ts +55 -0
- package/dist/components/content/Text.d.ts.map +1 -0
- package/dist/components/content/Text.js +27 -0
- package/dist/components/content/Text.js.map +1 -0
- package/dist/components/content/Timeline.d.ts +50 -0
- package/dist/components/content/Timeline.d.ts.map +1 -0
- package/dist/components/content/Timeline.js +15 -0
- package/dist/components/content/Timeline.js.map +1 -0
- package/dist/components/content/VirtualGrid.d.ts +171 -0
- package/dist/components/content/VirtualGrid.d.ts.map +1 -0
- package/dist/components/content/VirtualGrid.js +267 -0
- package/dist/components/content/VirtualGrid.js.map +1 -0
- package/dist/components/content/VisuallyHidden.d.ts +24 -0
- package/dist/components/content/VisuallyHidden.d.ts.map +1 -0
- package/dist/components/content/VisuallyHidden.js +3 -0
- package/dist/components/content/VisuallyHidden.js.map +1 -0
- package/dist/components/content/keyboardEditing.d.ts +15 -0
- package/dist/components/content/keyboardEditing.d.ts.map +1 -0
- package/dist/components/content/keyboardEditing.js +28 -0
- package/dist/components/content/keyboardEditing.js.map +1 -0
- package/dist/components/content/useDragToSelect.d.ts +41 -0
- package/dist/components/content/useDragToSelect.d.ts.map +1 -0
- package/dist/components/content/useDragToSelect.js +190 -0
- package/dist/components/content/useDragToSelect.js.map +1 -0
- package/dist/components/date-time/Calendar.d.ts +67 -0
- package/dist/components/date-time/Calendar.d.ts.map +1 -0
- package/dist/components/date-time/Calendar.js +28 -0
- package/dist/components/date-time/Calendar.js.map +1 -0
- package/dist/components/date-time/DatePicker.d.ts +57 -0
- package/dist/components/date-time/DatePicker.d.ts.map +1 -0
- package/dist/components/date-time/DatePicker.js +37 -0
- package/dist/components/date-time/DatePicker.js.map +1 -0
- package/dist/components/date-time/DateRangePicker.d.ts +91 -0
- package/dist/components/date-time/DateRangePicker.d.ts.map +1 -0
- package/dist/components/date-time/DateRangePicker.js +72 -0
- package/dist/components/date-time/DateRangePicker.js.map +1 -0
- package/dist/components/date-time/DateTimePicker.d.ts +55 -0
- package/dist/components/date-time/DateTimePicker.d.ts.map +1 -0
- package/dist/components/date-time/DateTimePicker.js +9 -0
- package/dist/components/date-time/DateTimePicker.js.map +1 -0
- package/dist/components/date-time/RangeCalendar.d.ts +50 -0
- package/dist/components/date-time/RangeCalendar.d.ts.map +1 -0
- package/dist/components/date-time/RangeCalendar.js +17 -0
- package/dist/components/date-time/RangeCalendar.js.map +1 -0
- package/dist/components/date-time/TimePicker.d.ts +47 -0
- package/dist/components/date-time/TimePicker.d.ts.map +1 -0
- package/dist/components/date-time/TimePicker.js +148 -0
- package/dist/components/date-time/TimePicker.js.map +1 -0
- package/dist/components/inputs/Checkbox.d.ts +140 -0
- package/dist/components/inputs/Checkbox.d.ts.map +1 -0
- package/dist/components/inputs/Checkbox.js +29 -0
- package/dist/components/inputs/Checkbox.js.map +1 -0
- package/dist/components/inputs/CheckboxCard.d.ts +17 -0
- package/dist/components/inputs/CheckboxCard.d.ts.map +1 -0
- package/dist/components/inputs/CheckboxCard.js +25 -0
- package/dist/components/inputs/CheckboxCard.js.map +1 -0
- package/dist/components/inputs/CheckboxGroup.d.ts +68 -0
- package/dist/components/inputs/CheckboxGroup.d.ts.map +1 -0
- package/dist/components/inputs/CheckboxGroup.js +14 -0
- package/dist/components/inputs/CheckboxGroup.js.map +1 -0
- package/dist/components/inputs/ChoiceCardBody.d.ts +16 -0
- package/dist/components/inputs/ChoiceCardBody.d.ts.map +1 -0
- package/dist/components/inputs/ChoiceCardBody.js +10 -0
- package/dist/components/inputs/ChoiceCardBody.js.map +1 -0
- package/dist/components/inputs/ColorPicker.d.ts +71 -0
- package/dist/components/inputs/ColorPicker.d.ts.map +1 -0
- package/dist/components/inputs/ColorPicker.js +30 -0
- package/dist/components/inputs/ColorPicker.js.map +1 -0
- package/dist/components/inputs/Combobox.d.ts +41 -0
- package/dist/components/inputs/Combobox.d.ts.map +1 -0
- package/dist/components/inputs/Combobox.js +16 -0
- package/dist/components/inputs/Combobox.js.map +1 -0
- package/dist/components/inputs/FileDropzone.d.ts +51 -0
- package/dist/components/inputs/FileDropzone.d.ts.map +1 -0
- package/dist/components/inputs/FileDropzone.js +75 -0
- package/dist/components/inputs/FileDropzone.js.map +1 -0
- package/dist/components/inputs/Form.d.ts +50 -0
- package/dist/components/inputs/Form.d.ts.map +1 -0
- package/dist/components/inputs/Form.js +14 -0
- package/dist/components/inputs/Form.js.map +1 -0
- package/dist/components/inputs/FormField.d.ts +89 -0
- package/dist/components/inputs/FormField.d.ts.map +1 -0
- package/dist/components/inputs/FormField.js +24 -0
- package/dist/components/inputs/FormField.js.map +1 -0
- package/dist/components/inputs/FormLayout.d.ts +47 -0
- package/dist/components/inputs/FormLayout.d.ts.map +1 -0
- package/dist/components/inputs/FormLayout.js +12 -0
- package/dist/components/inputs/FormLayout.js.map +1 -0
- package/dist/components/inputs/InlineEdit.d.ts +50 -0
- package/dist/components/inputs/InlineEdit.d.ts.map +1 -0
- package/dist/components/inputs/InlineEdit.js +70 -0
- package/dist/components/inputs/InlineEdit.js.map +1 -0
- package/dist/components/inputs/MaskedInput.d.ts +66 -0
- package/dist/components/inputs/MaskedInput.d.ts.map +1 -0
- package/dist/components/inputs/MaskedInput.js +73 -0
- package/dist/components/inputs/MaskedInput.js.map +1 -0
- package/dist/components/inputs/NumberInput.d.ts +53 -0
- package/dist/components/inputs/NumberInput.d.ts.map +1 -0
- package/dist/components/inputs/NumberInput.js +17 -0
- package/dist/components/inputs/NumberInput.js.map +1 -0
- package/dist/components/inputs/PasswordInput.d.ts +49 -0
- package/dist/components/inputs/PasswordInput.d.ts.map +1 -0
- package/dist/components/inputs/PasswordInput.js +49 -0
- package/dist/components/inputs/PasswordInput.js.map +1 -0
- package/dist/components/inputs/PhoneInput.d.ts +35 -0
- package/dist/components/inputs/PhoneInput.d.ts.map +1 -0
- package/dist/components/inputs/PhoneInput.js +9 -0
- package/dist/components/inputs/PhoneInput.js.map +1 -0
- package/dist/components/inputs/PinInput.d.ts +50 -0
- package/dist/components/inputs/PinInput.d.ts.map +1 -0
- package/dist/components/inputs/PinInput.js +67 -0
- package/dist/components/inputs/PinInput.js.map +1 -0
- package/dist/components/inputs/RadioGroup.d.ts +86 -0
- package/dist/components/inputs/RadioGroup.d.ts.map +1 -0
- package/dist/components/inputs/RadioGroup.js +51 -0
- package/dist/components/inputs/RadioGroup.js.map +1 -0
- package/dist/components/inputs/Rating.d.ts +69 -0
- package/dist/components/inputs/Rating.d.ts.map +1 -0
- package/dist/components/inputs/Rating.js +51 -0
- package/dist/components/inputs/Rating.js.map +1 -0
- package/dist/components/inputs/SearchControl.d.ts +85 -0
- package/dist/components/inputs/SearchControl.d.ts.map +1 -0
- package/dist/components/inputs/SearchControl.js +62 -0
- package/dist/components/inputs/SearchControl.js.map +1 -0
- package/dist/components/inputs/Select.d.ts +205 -0
- package/dist/components/inputs/Select.d.ts.map +1 -0
- package/dist/components/inputs/Select.js +136 -0
- package/dist/components/inputs/Select.js.map +1 -0
- package/dist/components/inputs/Slider.d.ts +59 -0
- package/dist/components/inputs/Slider.d.ts.map +1 -0
- package/dist/components/inputs/Slider.js +153 -0
- package/dist/components/inputs/Slider.js.map +1 -0
- package/dist/components/inputs/SwatchGroup.d.ts +101 -0
- package/dist/components/inputs/SwatchGroup.d.ts.map +1 -0
- package/dist/components/inputs/SwatchGroup.js +57 -0
- package/dist/components/inputs/SwatchGroup.js.map +1 -0
- package/dist/components/inputs/TagInput.d.ts +45 -0
- package/dist/components/inputs/TagInput.d.ts.map +1 -0
- package/dist/components/inputs/TagInput.js +56 -0
- package/dist/components/inputs/TagInput.js.map +1 -0
- package/dist/components/inputs/TextControl.d.ts +101 -0
- package/dist/components/inputs/TextControl.d.ts.map +1 -0
- package/dist/components/inputs/TextControl.js +31 -0
- package/dist/components/inputs/TextControl.js.map +1 -0
- package/dist/components/inputs/Transfer.d.ts +84 -0
- package/dist/components/inputs/Transfer.d.ts.map +1 -0
- package/dist/components/inputs/Transfer.js +112 -0
- package/dist/components/inputs/Transfer.js.map +1 -0
- package/dist/components/inputs/TreeSelect.d.ts +73 -0
- package/dist/components/inputs/TreeSelect.d.ts.map +1 -0
- package/dist/components/inputs/TreeSelect.js +60 -0
- package/dist/components/inputs/TreeSelect.js.map +1 -0
- package/dist/components/inputs/UploadQueue.d.ts +84 -0
- package/dist/components/inputs/UploadQueue.d.ts.map +1 -0
- package/dist/components/inputs/UploadQueue.js +30 -0
- package/dist/components/inputs/UploadQueue.js.map +1 -0
- package/dist/components/navigation/Accordion.d.ts +44 -0
- package/dist/components/navigation/Accordion.d.ts.map +1 -0
- package/dist/components/navigation/Accordion.js +12 -0
- package/dist/components/navigation/Accordion.js.map +1 -0
- package/dist/components/navigation/Breadcrumbs.d.ts +35 -0
- package/dist/components/navigation/Breadcrumbs.d.ts.map +1 -0
- package/dist/components/navigation/Breadcrumbs.js +17 -0
- package/dist/components/navigation/Breadcrumbs.js.map +1 -0
- package/dist/components/navigation/ContextualSaveBar.d.ts +90 -0
- package/dist/components/navigation/ContextualSaveBar.d.ts.map +1 -0
- package/dist/components/navigation/ContextualSaveBar.js +20 -0
- package/dist/components/navigation/ContextualSaveBar.js.map +1 -0
- package/dist/components/navigation/PageHeader.d.ts +17 -0
- package/dist/components/navigation/PageHeader.d.ts.map +1 -0
- package/dist/components/navigation/PageHeader.js +8 -0
- package/dist/components/navigation/PageHeader.js.map +1 -0
- package/dist/components/navigation/Pagination.d.ts +44 -0
- package/dist/components/navigation/Pagination.d.ts.map +1 -0
- package/dist/components/navigation/Pagination.js +57 -0
- package/dist/components/navigation/Pagination.js.map +1 -0
- package/dist/components/navigation/SectionHeader.d.ts +32 -0
- package/dist/components/navigation/SectionHeader.d.ts.map +1 -0
- package/dist/components/navigation/SectionHeader.js +13 -0
- package/dist/components/navigation/SectionHeader.js.map +1 -0
- package/dist/components/navigation/SelectionBar.d.ts +65 -0
- package/dist/components/navigation/SelectionBar.d.ts.map +1 -0
- package/dist/components/navigation/SelectionBar.js +24 -0
- package/dist/components/navigation/SelectionBar.js.map +1 -0
- package/dist/components/navigation/Stepper.d.ts +45 -0
- package/dist/components/navigation/Stepper.d.ts.map +1 -0
- package/dist/components/navigation/Stepper.js +16 -0
- package/dist/components/navigation/Stepper.js.map +1 -0
- package/dist/components/navigation/Tabs.d.ts +45 -0
- package/dist/components/navigation/Tabs.d.ts.map +1 -0
- package/dist/components/navigation/Tabs.js +51 -0
- package/dist/components/navigation/Tabs.js.map +1 -0
- package/dist/components/navigation/TreeView.d.ts +101 -0
- package/dist/components/navigation/TreeView.d.ts.map +1 -0
- package/dist/components/navigation/TreeView.js +27 -0
- package/dist/components/navigation/TreeView.js.map +1 -0
- package/dist/components/overlays/CommandPalette.d.ts +115 -0
- package/dist/components/overlays/CommandPalette.d.ts.map +1 -0
- package/dist/components/overlays/CommandPalette.js +43 -0
- package/dist/components/overlays/CommandPalette.js.map +1 -0
- package/dist/components/overlays/ConfirmDialog.d.ts +67 -0
- package/dist/components/overlays/ConfirmDialog.d.ts.map +1 -0
- package/dist/components/overlays/ConfirmDialog.js +47 -0
- package/dist/components/overlays/ConfirmDialog.js.map +1 -0
- package/dist/components/overlays/ContextMenu.d.ts +122 -0
- package/dist/components/overlays/ContextMenu.d.ts.map +1 -0
- package/dist/components/overlays/ContextMenu.js +39 -0
- package/dist/components/overlays/ContextMenu.js.map +1 -0
- package/dist/components/overlays/Dialog.d.ts +113 -0
- package/dist/components/overlays/Dialog.d.ts.map +1 -0
- package/dist/components/overlays/Dialog.js +43 -0
- package/dist/components/overlays/Dialog.js.map +1 -0
- package/dist/components/overlays/Drawer.d.ts +53 -0
- package/dist/components/overlays/Drawer.d.ts.map +1 -0
- package/dist/components/overlays/Drawer.js +32 -0
- package/dist/components/overlays/Drawer.js.map +1 -0
- package/dist/components/overlays/HelpTooltip.d.ts +41 -0
- package/dist/components/overlays/HelpTooltip.d.ts.map +1 -0
- package/dist/components/overlays/HelpTooltip.js +10 -0
- package/dist/components/overlays/HelpTooltip.js.map +1 -0
- package/dist/components/overlays/HoverCard.d.ts +62 -0
- package/dist/components/overlays/HoverCard.d.ts.map +1 -0
- package/dist/components/overlays/HoverCard.js +175 -0
- package/dist/components/overlays/HoverCard.js.map +1 -0
- package/dist/components/overlays/Menu.d.ts +113 -0
- package/dist/components/overlays/Menu.d.ts.map +1 -0
- package/dist/components/overlays/Menu.js +26 -0
- package/dist/components/overlays/Menu.js.map +1 -0
- package/dist/components/overlays/ModalHeader.d.ts +77 -0
- package/dist/components/overlays/ModalHeader.d.ts.map +1 -0
- package/dist/components/overlays/ModalHeader.js +11 -0
- package/dist/components/overlays/ModalHeader.js.map +1 -0
- package/dist/components/overlays/ModalOverlay.d.ts +45 -0
- package/dist/components/overlays/ModalOverlay.d.ts.map +1 -0
- package/dist/components/overlays/ModalOverlay.js +29 -0
- package/dist/components/overlays/ModalOverlay.js.map +1 -0
- package/dist/components/overlays/Popover.d.ts +56 -0
- package/dist/components/overlays/Popover.d.ts.map +1 -0
- package/dist/components/overlays/Popover.js +16 -0
- package/dist/components/overlays/Popover.js.map +1 -0
- package/dist/components/overlays/ShortcutsHelp.d.ts +70 -0
- package/dist/components/overlays/ShortcutsHelp.d.ts.map +1 -0
- package/dist/components/overlays/ShortcutsHelp.js +20 -0
- package/dist/components/overlays/ShortcutsHelp.js.map +1 -0
- package/dist/components/overlays/Tooltip.d.ts +35 -0
- package/dist/components/overlays/Tooltip.d.ts.map +1 -0
- package/dist/components/overlays/Tooltip.js +18 -0
- package/dist/components/overlays/Tooltip.js.map +1 -0
- package/dist/components/table/DataTable.d.ts +60 -0
- package/dist/components/table/DataTable.d.ts.map +1 -0
- package/dist/components/table/DataTable.js +20 -0
- package/dist/components/table/DataTable.js.map +1 -0
- package/dist/components/table/FilterBar.d.ts +35 -0
- package/dist/components/table/FilterBar.d.ts.map +1 -0
- package/dist/components/table/FilterBar.js +17 -0
- package/dist/components/table/FilterBar.js.map +1 -0
- package/dist/components/table/FilterBarAdd.d.ts +57 -0
- package/dist/components/table/FilterBarAdd.d.ts.map +1 -0
- package/dist/components/table/FilterBarAdd.js +83 -0
- package/dist/components/table/FilterBarAdd.js.map +1 -0
- package/dist/components/table/SavedViews.d.ts +83 -0
- package/dist/components/table/SavedViews.d.ts.map +1 -0
- package/dist/components/table/SavedViews.js +12 -0
- package/dist/components/table/SavedViews.js.map +1 -0
- package/dist/components/table/TablePreferences.d.ts +45 -0
- package/dist/components/table/TablePreferences.d.ts.map +1 -0
- package/dist/components/table/TablePreferences.js +41 -0
- package/dist/components/table/TablePreferences.js.map +1 -0
- package/dist/components/table/TableToolbar.d.ts +38 -0
- package/dist/components/table/TableToolbar.d.ts.map +1 -0
- package/dist/components/table/TableToolbar.js +11 -0
- package/dist/components/table/TableToolbar.js.map +1 -0
- package/dist/editor/RichTextEditor.d.ts +274 -0
- package/dist/editor/RichTextEditor.d.ts.map +1 -0
- package/dist/editor/RichTextEditor.js +671 -0
- package/dist/editor/RichTextEditor.js.map +1 -0
- package/dist/editor/RichTextView.d.ts +70 -0
- package/dist/editor/RichTextView.d.ts.map +1 -0
- package/dist/editor/RichTextView.js +24 -0
- package/dist/editor/RichTextView.js.map +1 -0
- package/dist/editor/core/atomText.d.ts +21 -0
- package/dist/editor/core/atomText.d.ts.map +1 -0
- package/dist/editor/core/atomText.js +77 -0
- package/dist/editor/core/atomText.js.map +1 -0
- package/dist/editor/core/blockCommands.d.ts +94 -0
- package/dist/editor/core/blockCommands.d.ts.map +1 -0
- package/dist/editor/core/blockCommands.js +188 -0
- package/dist/editor/core/blockCommands.js.map +1 -0
- package/dist/editor/core/blockTypes.d.ts +89 -0
- package/dist/editor/core/blockTypes.d.ts.map +1 -0
- package/dist/editor/core/blockTypes.js +121 -0
- package/dist/editor/core/blockTypes.js.map +1 -0
- package/dist/editor/core/containers.d.ts +43 -0
- package/dist/editor/core/containers.d.ts.map +1 -0
- package/dist/editor/core/containers.js +52 -0
- package/dist/editor/core/containers.js.map +1 -0
- package/dist/editor/core/customMarkdown.d.ts +8 -0
- package/dist/editor/core/customMarkdown.d.ts.map +1 -0
- package/dist/editor/core/customMarkdown.js +34 -0
- package/dist/editor/core/customMarkdown.js.map +1 -0
- package/dist/editor/core/customTool.d.ts +407 -0
- package/dist/editor/core/customTool.d.ts.map +1 -0
- package/dist/editor/core/customTool.js +31 -0
- package/dist/editor/core/customTool.js.map +1 -0
- package/dist/editor/core/customToolEngine.d.ts +31 -0
- package/dist/editor/core/customToolEngine.d.ts.map +1 -0
- package/dist/editor/core/customToolEngine.js +324 -0
- package/dist/editor/core/customToolEngine.js.map +1 -0
- package/dist/editor/core/document.d.ts +17 -0
- package/dist/editor/core/document.d.ts.map +1 -0
- package/dist/editor/core/document.js +11 -0
- package/dist/editor/core/document.js.map +1 -0
- package/dist/editor/core/emptiness.d.ts +18 -0
- package/dist/editor/core/emptiness.d.ts.map +1 -0
- package/dist/editor/core/emptiness.js +14 -0
- package/dist/editor/core/emptiness.js.map +1 -0
- package/dist/editor/core/extensions.d.ts +78 -0
- package/dist/editor/core/extensions.d.ts.map +1 -0
- package/dist/editor/core/extensions.js +134 -0
- package/dist/editor/core/extensions.js.map +1 -0
- package/dist/editor/core/fieldNotice.d.ts +48 -0
- package/dist/editor/core/fieldNotice.d.ts.map +1 -0
- package/dist/editor/core/fieldNotice.js +18 -0
- package/dist/editor/core/fieldNotice.js.map +1 -0
- package/dist/editor/core/handle.d.ts +110 -0
- package/dist/editor/core/handle.d.ts.map +1 -0
- package/dist/editor/core/handle.js +149 -0
- package/dist/editor/core/handle.js.map +1 -0
- package/dist/editor/core/insertItems.d.ts +147 -0
- package/dist/editor/core/insertItems.d.ts.map +1 -0
- package/dist/editor/core/insertItems.js +215 -0
- package/dist/editor/core/insertItems.js.map +1 -0
- package/dist/editor/core/jsonDocument.d.ts +42 -0
- package/dist/editor/core/jsonDocument.d.ts.map +1 -0
- package/dist/editor/core/jsonDocument.js +44 -0
- package/dist/editor/core/jsonDocument.js.map +1 -0
- package/dist/editor/core/markdown.d.ts +47 -0
- package/dist/editor/core/markdown.d.ts.map +1 -0
- package/dist/editor/core/markdown.js +169 -0
- package/dist/editor/core/markdown.js.map +1 -0
- package/dist/editor/core/maxLength.d.ts +43 -0
- package/dist/editor/core/maxLength.d.ts.map +1 -0
- package/dist/editor/core/maxLength.js +45 -0
- package/dist/editor/core/maxLength.js.map +1 -0
- package/dist/editor/core/pasteTrim.d.ts +8 -0
- package/dist/editor/core/pasteTrim.d.ts.map +1 -0
- package/dist/editor/core/pasteTrim.js +61 -0
- package/dist/editor/core/pasteTrim.js.map +1 -0
- package/dist/editor/core/schema.d.ts +479 -0
- package/dist/editor/core/schema.d.ts.map +1 -0
- package/dist/editor/core/schema.js +371 -0
- package/dist/editor/core/schema.js.map +1 -0
- package/dist/editor/core/schemaConform.d.ts +30 -0
- package/dist/editor/core/schemaConform.d.ts.map +1 -0
- package/dist/editor/core/schemaConform.js +72 -0
- package/dist/editor/core/schemaConform.js.map +1 -0
- package/dist/editor/core/shortcuts.d.ts +110 -0
- package/dist/editor/core/shortcuts.d.ts.map +1 -0
- package/dist/editor/core/shortcuts.js +299 -0
- package/dist/editor/core/shortcuts.js.map +1 -0
- package/dist/editor/core/skeleton.d.ts +11 -0
- package/dist/editor/core/skeleton.d.ts.map +1 -0
- package/dist/editor/core/skeleton.js +48 -0
- package/dist/editor/core/skeleton.js.map +1 -0
- package/dist/editor/core/slashCommand.d.ts +46 -0
- package/dist/editor/core/slashCommand.d.ts.map +1 -0
- package/dist/editor/core/slashCommand.js +67 -0
- package/dist/editor/core/slashCommand.js.map +1 -0
- package/dist/editor/core/sourceFormat.d.ts +30 -0
- package/dist/editor/core/sourceFormat.d.ts.map +1 -0
- package/dist/editor/core/sourceFormat.js +136 -0
- package/dist/editor/core/sourceFormat.js.map +1 -0
- package/dist/editor/core/toolButtons.d.ts +58 -0
- package/dist/editor/core/toolButtons.d.ts.map +1 -0
- package/dist/editor/core/toolButtons.js +64 -0
- package/dist/editor/core/toolButtons.js.map +1 -0
- package/dist/editor/core/toolDescriptor.d.ts +304 -0
- package/dist/editor/core/toolDescriptor.d.ts.map +1 -0
- package/dist/editor/core/toolDescriptor.js +29 -0
- package/dist/editor/core/toolDescriptor.js.map +1 -0
- package/dist/editor/core/toolEntryShortcuts.d.ts +20 -0
- package/dist/editor/core/toolEntryShortcuts.d.ts.map +1 -0
- package/dist/editor/core/toolEntryShortcuts.js +46 -0
- package/dist/editor/core/toolEntryShortcuts.js.map +1 -0
- package/dist/editor/core/toolLoader.d.ts +14 -0
- package/dist/editor/core/toolLoader.d.ts.map +1 -0
- package/dist/editor/core/toolLoader.js +20 -0
- package/dist/editor/core/toolLoader.js.map +1 -0
- package/dist/editor/core/tools.d.ts +90 -0
- package/dist/editor/core/tools.d.ts.map +1 -0
- package/dist/editor/core/tools.js +56 -0
- package/dist/editor/core/tools.js.map +1 -0
- package/dist/editor/core/viewIsland.d.ts +17 -0
- package/dist/editor/core/viewIsland.d.ts.map +1 -0
- package/dist/editor/core/viewIsland.js +4 -0
- package/dist/editor/core/viewIsland.js.map +1 -0
- package/dist/editor/features/builtins.d.ts +25 -0
- package/dist/editor/features/builtins.d.ts.map +1 -0
- package/dist/editor/features/builtins.js +88 -0
- package/dist/editor/features/builtins.js.map +1 -0
- package/dist/editor/features/code/CodeBlockView.d.ts +38 -0
- package/dist/editor/features/code/CodeBlockView.d.ts.map +1 -0
- package/dist/editor/features/code/CodeBlockView.js +98 -0
- package/dist/editor/features/code/CodeBlockView.js.map +1 -0
- package/dist/editor/features/code/CodeCopyButton.d.ts +20 -0
- package/dist/editor/features/code/CodeCopyButton.d.ts.map +1 -0
- package/dist/editor/features/code/CodeCopyButton.js +29 -0
- package/dist/editor/features/code/CodeCopyButton.js.map +1 -0
- package/dist/editor/features/code/CodeCopyIsland.d.ts +37 -0
- package/dist/editor/features/code/CodeCopyIsland.d.ts.map +1 -0
- package/dist/editor/features/code/CodeCopyIsland.js +21 -0
- package/dist/editor/features/code/CodeCopyIsland.js.map +1 -0
- package/dist/editor/features/code/codeBlock.d.ts +25 -0
- package/dist/editor/features/code/codeBlock.d.ts.map +1 -0
- package/dist/editor/features/code/codeBlock.js +116 -0
- package/dist/editor/features/code/codeBlock.js.map +1 -0
- package/dist/editor/features/code/codeBlockTool.d.ts +24 -0
- package/dist/editor/features/code/codeBlockTool.d.ts.map +1 -0
- package/dist/editor/features/code/codeBlockTool.js +66 -0
- package/dist/editor/features/code/codeBlockTool.js.map +1 -0
- package/dist/editor/features/code/codeHeader.d.ts +41 -0
- package/dist/editor/features/code/codeHeader.d.ts.map +1 -0
- package/dist/editor/features/code/codeHeader.js +25 -0
- package/dist/editor/features/code/codeHeader.js.map +1 -0
- package/dist/editor/features/code/codeLanguages.d.ts +76 -0
- package/dist/editor/features/code/codeLanguages.d.ts.map +1 -0
- package/dist/editor/features/code/codeLanguages.js +24 -0
- package/dist/editor/features/code/codeLanguages.js.map +1 -0
- package/dist/editor/features/code/highlight.d.ts +20 -0
- package/dist/editor/features/code/highlight.d.ts.map +1 -0
- package/dist/editor/features/code/highlight.js +51 -0
- package/dist/editor/features/code/highlight.js.map +1 -0
- package/dist/editor/features/code/highlightNodes.d.ts +31 -0
- package/dist/editor/features/code/highlightNodes.d.ts.map +1 -0
- package/dist/editor/features/code/highlightNodes.js +25 -0
- package/dist/editor/features/code/highlightNodes.js.map +1 -0
- package/dist/editor/features/code/lowlight.d.ts +20 -0
- package/dist/editor/features/code/lowlight.d.ts.map +1 -0
- package/dist/editor/features/code/lowlight.js +26 -0
- package/dist/editor/features/code/lowlight.js.map +1 -0
- package/dist/editor/features/color/CustomColorPopover.d.ts +40 -0
- package/dist/editor/features/color/CustomColorPopover.d.ts.map +1 -0
- package/dist/editor/features/color/CustomColorPopover.js +70 -0
- package/dist/editor/features/color/CustomColorPopover.js.map +1 -0
- package/dist/editor/features/color/contrast.d.ts +26 -0
- package/dist/editor/features/color/contrast.d.ts.map +1 -0
- package/dist/editor/features/color/contrast.js +27 -0
- package/dist/editor/features/color/contrast.js.map +1 -0
- package/dist/editor/features/color/customColor.d.ts +65 -0
- package/dist/editor/features/color/customColor.d.ts.map +1 -0
- package/dist/editor/features/color/customColor.js +29 -0
- package/dist/editor/features/color/customColor.js.map +1 -0
- package/dist/editor/features/color/styleExtensions.d.ts +28 -0
- package/dist/editor/features/color/styleExtensions.d.ts.map +1 -0
- package/dist/editor/features/color/styleExtensions.js +172 -0
- package/dist/editor/features/color/styleExtensions.js.map +1 -0
- package/dist/editor/features/emoji/EmojiGrid.d.ts +34 -0
- package/dist/editor/features/emoji/EmojiGrid.d.ts.map +1 -0
- package/dist/editor/features/emoji/EmojiGrid.js +71 -0
- package/dist/editor/features/emoji/EmojiGrid.js.map +1 -0
- package/dist/editor/features/emoji/emoji.d.ts +47 -0
- package/dist/editor/features/emoji/emoji.d.ts.map +1 -0
- package/dist/editor/features/emoji/emoji.js +108 -0
- package/dist/editor/features/emoji/emoji.js.map +1 -0
- package/dist/editor/features/emoji/emojiTool.d.ts +32 -0
- package/dist/editor/features/emoji/emojiTool.d.ts.map +1 -0
- package/dist/editor/features/emoji/emojiTool.js +34 -0
- package/dist/editor/features/emoji/emojiTool.js.map +1 -0
- package/dist/editor/features/image/ImagePopover.d.ts +29 -0
- package/dist/editor/features/image/ImagePopover.d.ts.map +1 -0
- package/dist/editor/features/image/ImagePopover.js +89 -0
- package/dist/editor/features/image/ImagePopover.js.map +1 -0
- package/dist/editor/features/image/ImageToolbar.d.ts +25 -0
- package/dist/editor/features/image/ImageToolbar.d.ts.map +1 -0
- package/dist/editor/features/image/ImageToolbar.js +49 -0
- package/dist/editor/features/image/ImageToolbar.js.map +1 -0
- package/dist/editor/features/image/image.d.ts +115 -0
- package/dist/editor/features/image/image.d.ts.map +1 -0
- package/dist/editor/features/image/image.js +539 -0
- package/dist/editor/features/image/image.js.map +1 -0
- package/dist/editor/features/image/imageNotice.d.ts +6 -0
- package/dist/editor/features/image/imageNotice.d.ts.map +1 -0
- package/dist/editor/features/image/imageNotice.js +16 -0
- package/dist/editor/features/image/imageNotice.js.map +1 -0
- package/dist/editor/features/layout/columnLayouts.d.ts +36 -0
- package/dist/editor/features/layout/columnLayouts.d.ts.map +1 -0
- package/dist/editor/features/layout/columnLayouts.js +33 -0
- package/dist/editor/features/layout/columnLayouts.js.map +1 -0
- package/dist/editor/features/layout/layout.d.ts +81 -0
- package/dist/editor/features/layout/layout.d.ts.map +1 -0
- package/dist/editor/features/layout/layout.js +318 -0
- package/dist/editor/features/layout/layout.js.map +1 -0
- package/dist/editor/features/link/LinkPopover.d.ts +21 -0
- package/dist/editor/features/link/LinkPopover.d.ts.map +1 -0
- package/dist/editor/features/link/LinkPopover.js +54 -0
- package/dist/editor/features/link/LinkPopover.js.map +1 -0
- package/dist/editor/features/link/link.d.ts +41 -0
- package/dist/editor/features/link/link.d.ts.map +1 -0
- package/dist/editor/features/link/link.js +66 -0
- package/dist/editor/features/link/link.js.map +1 -0
- package/dist/editor/features/link/linkTool.d.ts +13 -0
- package/dist/editor/features/link/linkTool.d.ts.map +1 -0
- package/dist/editor/features/link/linkTool.js +25 -0
- package/dist/editor/features/link/linkTool.js.map +1 -0
- package/dist/editor/features/search/SearchPanel.d.ts +31 -0
- package/dist/editor/features/search/SearchPanel.d.ts.map +1 -0
- package/dist/editor/features/search/SearchPanel.js +101 -0
- package/dist/editor/features/search/SearchPanel.js.map +1 -0
- package/dist/editor/features/search/revealMatch.d.ts +25 -0
- package/dist/editor/features/search/revealMatch.d.ts.map +1 -0
- package/dist/editor/features/search/revealMatch.js +41 -0
- package/dist/editor/features/search/revealMatch.js.map +1 -0
- package/dist/editor/features/search/searchMatch.d.ts +53 -0
- package/dist/editor/features/search/searchMatch.d.ts.map +1 -0
- package/dist/editor/features/search/searchMatch.js +67 -0
- package/dist/editor/features/search/searchMatch.js.map +1 -0
- package/dist/editor/features/search/searchPlugin.d.ts +48 -0
- package/dist/editor/features/search/searchPlugin.d.ts.map +1 -0
- package/dist/editor/features/search/searchPlugin.js +151 -0
- package/dist/editor/features/search/searchPlugin.js.map +1 -0
- package/dist/editor/features/search/searchTool.d.ts +13 -0
- package/dist/editor/features/search/searchTool.d.ts.map +1 -0
- package/dist/editor/features/search/searchTool.js +18 -0
- package/dist/editor/features/search/searchTool.js.map +1 -0
- package/dist/editor/features/table/TableInsertDialog.d.ts +29 -0
- package/dist/editor/features/table/TableInsertDialog.d.ts.map +1 -0
- package/dist/editor/features/table/TableInsertDialog.js +37 -0
- package/dist/editor/features/table/TableInsertDialog.js.map +1 -0
- package/dist/editor/features/table/TableMenuButton.d.ts +40 -0
- package/dist/editor/features/table/TableMenuButton.d.ts.map +1 -0
- package/dist/editor/features/table/TableMenuButton.js +97 -0
- package/dist/editor/features/table/TableMenuButton.js.map +1 -0
- package/dist/editor/features/table/TableSizeGrid.d.ts +60 -0
- package/dist/editor/features/table/TableSizeGrid.d.ts.map +1 -0
- package/dist/editor/features/table/TableSizeGrid.js +88 -0
- package/dist/editor/features/table/TableSizeGrid.js.map +1 -0
- package/dist/editor/features/table/tableActions.d.ts +110 -0
- package/dist/editor/features/table/tableActions.d.ts.map +1 -0
- package/dist/editor/features/table/tableActions.js +254 -0
- package/dist/editor/features/table/tableActions.js.map +1 -0
- package/dist/editor/features/table/tableCells.d.ts +41 -0
- package/dist/editor/features/table/tableCells.d.ts.map +1 -0
- package/dist/editor/features/table/tableCells.js +38 -0
- package/dist/editor/features/table/tableCells.js.map +1 -0
- package/dist/editor/features/table/tableChunk.d.ts +4 -0
- package/dist/editor/features/table/tableChunk.d.ts.map +1 -0
- package/dist/editor/features/table/tableChunk.js +5 -0
- package/dist/editor/features/table/tableChunk.js.map +1 -0
- package/dist/editor/features/table/tableTool.d.ts +22 -0
- package/dist/editor/features/table/tableTool.d.ts.map +1 -0
- package/dist/editor/features/table/tableTool.js +42 -0
- package/dist/editor/features/table/tableTool.js.map +1 -0
- package/dist/editor/features/table/tables.d.ts +79 -0
- package/dist/editor/features/table/tables.d.ts.map +1 -0
- package/dist/editor/features/table/tables.js +118 -0
- package/dist/editor/features/table/tables.js.map +1 -0
- package/dist/editor/features/wrapper/wrapper.d.ts +73 -0
- package/dist/editor/features/wrapper/wrapper.d.ts.map +1 -0
- package/dist/editor/features/wrapper/wrapper.js +198 -0
- package/dist/editor/features/wrapper/wrapper.js.map +1 -0
- package/dist/editor/features/wrapper/wrapperTones.d.ts +39 -0
- package/dist/editor/features/wrapper/wrapperTones.d.ts.map +1 -0
- package/dist/editor/features/wrapper/wrapperTones.js +19 -0
- package/dist/editor/features/wrapper/wrapperTones.js.map +1 -0
- package/dist/editor/highlight-entry.d.ts +24 -0
- package/dist/editor/highlight-entry.d.ts.map +1 -0
- package/dist/editor/highlight-entry.js +3 -0
- package/dist/editor/highlight-entry.js.map +1 -0
- package/dist/editor/hooks/useChangeThrottle.d.ts +24 -0
- package/dist/editor/hooks/useChangeThrottle.d.ts.map +1 -0
- package/dist/editor/hooks/useChangeThrottle.js +35 -0
- package/dist/editor/hooks/useChangeThrottle.js.map +1 -0
- package/dist/editor/hooks/useCoarsePointer.d.ts +17 -0
- package/dist/editor/hooks/useCoarsePointer.d.ts.map +1 -0
- package/dist/editor/hooks/useCoarsePointer.js +19 -0
- package/dist/editor/hooks/useCoarsePointer.js.map +1 -0
- package/dist/editor/hooks/useFieldsetDisabled.d.ts +22 -0
- package/dist/editor/hooks/useFieldsetDisabled.d.ts.map +1 -0
- package/dist/editor/hooks/useFieldsetDisabled.js +29 -0
- package/dist/editor/hooks/useFieldsetDisabled.js.map +1 -0
- package/dist/editor/hooks/useRichTextEditorState.d.ts +25 -0
- package/dist/editor/hooks/useRichTextEditorState.d.ts.map +1 -0
- package/dist/editor/hooks/useRichTextEditorState.js +17 -0
- package/dist/editor/hooks/useRichTextEditorState.js.map +1 -0
- package/dist/editor/hooks/useSubmenuPlacement.d.ts +19 -0
- package/dist/editor/hooks/useSubmenuPlacement.d.ts.map +1 -0
- package/dist/editor/hooks/useSubmenuPlacement.js +20 -0
- package/dist/editor/hooks/useSubmenuPlacement.js.map +1 -0
- package/dist/editor/index.d.ts +32 -0
- package/dist/editor/index.d.ts.map +1 -0
- package/dist/editor/index.js +7 -0
- package/dist/editor/index.js.map +1 -0
- package/dist/editor/schema-entry.d.ts +29 -0
- package/dist/editor/schema-entry.d.ts.map +1 -0
- package/dist/editor/schema-entry.js +3 -0
- package/dist/editor/schema-entry.js.map +1 -0
- package/dist/editor/styles/codeTheme.d.ts +49 -0
- package/dist/editor/styles/codeTheme.d.ts.map +1 -0
- package/dist/editor/styles/codeTheme.js +11 -0
- package/dist/editor/styles/codeTheme.js.map +1 -0
- package/dist/editor/styles/glass.d.ts +40 -0
- package/dist/editor/styles/glass.d.ts.map +1 -0
- package/dist/editor/styles/glass.js +15 -0
- package/dist/editor/styles/glass.js.map +1 -0
- package/dist/editor/styles/palette.d.ts +181 -0
- package/dist/editor/styles/palette.d.ts.map +1 -0
- package/dist/editor/styles/palette.js +57 -0
- package/dist/editor/styles/palette.js.map +1 -0
- package/dist/editor/styles/prose.d.ts +56 -0
- package/dist/editor/styles/prose.d.ts.map +1 -0
- package/dist/editor/styles/prose.js +154 -0
- package/dist/editor/styles/prose.js.map +1 -0
- package/dist/editor/styles/surface.d.ts +22 -0
- package/dist/editor/styles/surface.d.ts.map +1 -0
- package/dist/editor/styles/surface.js +4 -0
- package/dist/editor/styles/surface.js.map +1 -0
- package/dist/editor/styles/tokens.d.ts +136 -0
- package/dist/editor/styles/tokens.d.ts.map +1 -0
- package/dist/editor/styles/tokens.js +38 -0
- package/dist/editor/styles/tokens.js.map +1 -0
- package/dist/editor/ui/BlockHandle.d.ts +40 -0
- package/dist/editor/ui/BlockHandle.d.ts.map +1 -0
- package/dist/editor/ui/BlockHandle.js +394 -0
- package/dist/editor/ui/BlockHandle.js.map +1 -0
- package/dist/editor/ui/BlockIsland.d.ts +3 -0
- package/dist/editor/ui/BlockIsland.d.ts.map +1 -0
- package/dist/editor/ui/BlockIsland.js +8 -0
- package/dist/editor/ui/BlockIsland.js.map +1 -0
- package/dist/editor/ui/BlockIslandSlots.d.ts +31 -0
- package/dist/editor/ui/BlockIslandSlots.d.ts.map +1 -0
- package/dist/editor/ui/BlockIslandSlots.js +61 -0
- package/dist/editor/ui/BlockIslandSlots.js.map +1 -0
- package/dist/editor/ui/ColorMenus.d.ts +18 -0
- package/dist/editor/ui/ColorMenus.d.ts.map +1 -0
- package/dist/editor/ui/ColorMenus.js +281 -0
- package/dist/editor/ui/ColorMenus.js.map +1 -0
- package/dist/editor/ui/EditorToolbar.d.ts +71 -0
- package/dist/editor/ui/EditorToolbar.d.ts.map +1 -0
- package/dist/editor/ui/EditorToolbar.js +197 -0
- package/dist/editor/ui/EditorToolbar.js.map +1 -0
- package/dist/editor/ui/FieldResizer.d.ts +22 -0
- package/dist/editor/ui/FieldResizer.d.ts.map +1 -0
- package/dist/editor/ui/FieldResizer.js +75 -0
- package/dist/editor/ui/FieldResizer.js.map +1 -0
- package/dist/editor/ui/FieldStatus.d.ts +32 -0
- package/dist/editor/ui/FieldStatus.d.ts.map +1 -0
- package/dist/editor/ui/FieldStatus.js +15 -0
- package/dist/editor/ui/FieldStatus.js.map +1 -0
- package/dist/editor/ui/FloatingToolbar.d.ts +32 -0
- package/dist/editor/ui/FloatingToolbar.d.ts.map +1 -0
- package/dist/editor/ui/FloatingToolbar.js +17 -0
- package/dist/editor/ui/FloatingToolbar.js.map +1 -0
- package/dist/editor/ui/FormatMenus.d.ts +210 -0
- package/dist/editor/ui/FormatMenus.d.ts.map +1 -0
- package/dist/editor/ui/FormatMenus.js +296 -0
- package/dist/editor/ui/FormatMenus.js.map +1 -0
- package/dist/editor/ui/InsertMenuButton.d.ts +25 -0
- package/dist/editor/ui/InsertMenuButton.d.ts.map +1 -0
- package/dist/editor/ui/InsertMenuButton.js +28 -0
- package/dist/editor/ui/InsertMenuButton.js.map +1 -0
- package/dist/editor/ui/SelectionBubble.d.ts +46 -0
- package/dist/editor/ui/SelectionBubble.d.ts.map +1 -0
- package/dist/editor/ui/SelectionBubble.js +90 -0
- package/dist/editor/ui/SelectionBubble.js.map +1 -0
- package/dist/editor/ui/ShortcutsButton.d.ts +29 -0
- package/dist/editor/ui/ShortcutsButton.d.ts.map +1 -0
- package/dist/editor/ui/ShortcutsButton.js +34 -0
- package/dist/editor/ui/ShortcutsButton.js.map +1 -0
- package/dist/editor/ui/SlashMenu.d.ts +42 -0
- package/dist/editor/ui/SlashMenu.d.ts.map +1 -0
- package/dist/editor/ui/SlashMenu.js +114 -0
- package/dist/editor/ui/SlashMenu.js.map +1 -0
- package/dist/editor/ui/SuggestionList.d.ts +60 -0
- package/dist/editor/ui/SuggestionList.d.ts.map +1 -0
- package/dist/editor/ui/SuggestionList.js +61 -0
- package/dist/editor/ui/SuggestionList.js.map +1 -0
- package/dist/editor/ui/TextCard.d.ts +20 -0
- package/dist/editor/ui/TextCard.d.ts.map +1 -0
- package/dist/editor/ui/TextCard.js +192 -0
- package/dist/editor/ui/TextCard.js.map +1 -0
- package/dist/editor/ui/ToolButtonView.d.ts +58 -0
- package/dist/editor/ui/ToolButtonView.d.ts.map +1 -0
- package/dist/editor/ui/ToolButtonView.js +86 -0
- package/dist/editor/ui/ToolButtonView.js.map +1 -0
- package/dist/editor/ui/TriggerMenu.d.ts +25 -0
- package/dist/editor/ui/TriggerMenu.d.ts.map +1 -0
- package/dist/editor/ui/TriggerMenu.js +180 -0
- package/dist/editor/ui/TriggerMenu.js.map +1 -0
- package/dist/editor/ui/focusWithin.d.ts +22 -0
- package/dist/editor/ui/focusWithin.d.ts.map +1 -0
- package/dist/editor/ui/focusWithin.js +5 -0
- package/dist/editor/ui/focusWithin.js.map +1 -0
- package/dist/editor/ui/lockableMenu.d.ts +28 -0
- package/dist/editor/ui/lockableMenu.d.ts.map +1 -0
- package/dist/editor/ui/lockableMenu.js +17 -0
- package/dist/editor/ui/lockableMenu.js.map +1 -0
- package/dist/editor/ui/rowMarks.d.ts +21 -0
- package/dist/editor/ui/rowMarks.d.ts.map +1 -0
- package/dist/editor/ui/rowMarks.js +35 -0
- package/dist/editor/ui/rowMarks.js.map +1 -0
- package/dist/editor/ui/selectionMenu.d.ts +61 -0
- package/dist/editor/ui/selectionMenu.d.ts.map +1 -0
- package/dist/editor/ui/selectionMenu.js +32 -0
- package/dist/editor/ui/selectionMenu.js.map +1 -0
- package/dist/hooks/useFieldDescription.d.ts +45 -0
- package/dist/hooks/useFieldDescription.d.ts.map +1 -0
- package/dist/hooks/useFieldDescription.js +23 -0
- package/dist/hooks/useFieldDescription.js.map +1 -0
- package/dist/hooks/useMediaQuery.d.ts +25 -0
- package/dist/hooks/useMediaQuery.d.ts.map +1 -0
- package/dist/hooks/useMediaQuery.js +14 -0
- package/dist/hooks/useMediaQuery.js.map +1 -0
- package/dist/hooks/useOpenerFocus.d.ts +10 -0
- package/dist/hooks/useOpenerFocus.d.ts.map +1 -0
- package/dist/hooks/useOpenerFocus.js +35 -0
- package/dist/hooks/useOpenerFocus.js.map +1 -0
- package/dist/hooks/useOverlayLayer.d.ts +23 -0
- package/dist/hooks/useOverlayLayer.d.ts.map +1 -0
- package/dist/hooks/useOverlayLayer.js +19 -0
- package/dist/hooks/useOverlayLayer.js.map +1 -0
- package/dist/hooks/useScrollLock.d.ts +3 -0
- package/dist/hooks/useScrollLock.d.ts.map +1 -0
- package/dist/hooks/useScrollLock.js +52 -0
- package/dist/hooks/useScrollLock.js.map +1 -0
- package/dist/hooks/useStickyOffset.d.ts +53 -0
- package/dist/hooks/useStickyOffset.d.ts.map +1 -0
- package/dist/hooks/useStickyOffset.js +91 -0
- package/dist/hooks/useStickyOffset.js.map +1 -0
- package/dist/hooks/useTableState.d.ts +35 -0
- package/dist/hooks/useTableState.d.ts.map +1 -0
- package/dist/hooks/useTableState.js +23 -0
- package/dist/hooks/useTableState.js.map +1 -0
- package/dist/i18n/UiProvider.d.ts +53 -0
- package/dist/i18n/UiProvider.d.ts.map +1 -0
- package/dist/i18n/UiProvider.js +63 -0
- package/dist/i18n/UiProvider.js.map +1 -0
- package/dist/i18n/context.d.ts +26 -0
- package/dist/i18n/context.d.ts.map +1 -0
- package/dist/i18n/context.js +4 -0
- package/dist/i18n/context.js.map +1 -0
- package/dist/i18n/defaults.d.ts +19 -0
- package/dist/i18n/defaults.d.ts.map +1 -0
- package/dist/i18n/defaults.js +574 -0
- package/dist/i18n/defaults.js.map +1 -0
- package/dist/i18n/messages.d.ts +1178 -0
- package/dist/i18n/messages.d.ts.map +1 -0
- package/dist/i18n/messages.js +2 -0
- package/dist/i18n/messages.js.map +1 -0
- package/dist/i18n/useMessages.d.ts +26 -0
- package/dist/i18n/useMessages.d.ts.map +1 -0
- package/dist/i18n/useMessages.js +22 -0
- package/dist/i18n/useMessages.js.map +1 -0
- package/dist/icons.d.ts +437 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/icons.js +2 -0
- package/dist/icons.js.map +1 -0
- package/dist/index.d.ts +250 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +128 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/accessible-name.d.ts +34 -0
- package/dist/lib/accessible-name.d.ts.map +1 -0
- package/dist/lib/accessible-name.js +2 -0
- package/dist/lib/accessible-name.js.map +1 -0
- package/dist/lib/bottom-bar-slot.d.ts +24 -0
- package/dist/lib/bottom-bar-slot.d.ts.map +1 -0
- package/dist/lib/bottom-bar-slot.js +4 -0
- package/dist/lib/bottom-bar-slot.js.map +1 -0
- package/dist/lib/button.d.ts +36 -0
- package/dist/lib/button.d.ts.map +1 -0
- package/dist/lib/button.js +35 -0
- package/dist/lib/button.js.map +1 -0
- package/dist/lib/choice-card.d.ts +64 -0
- package/dist/lib/choice-card.d.ts.map +1 -0
- package/dist/lib/choice-card.js +15 -0
- package/dist/lib/choice-card.js.map +1 -0
- package/dist/lib/clamp.d.ts +17 -0
- package/dist/lib/clamp.d.ts.map +1 -0
- package/dist/lib/clamp.js +4 -0
- package/dist/lib/clamp.js.map +1 -0
- package/dist/lib/cn.d.ts +12 -0
- package/dist/lib/cn.d.ts.map +1 -0
- package/dist/lib/cn.js +14 -0
- package/dist/lib/cn.js.map +1 -0
- package/dist/lib/date.d.ts +61 -0
- package/dist/lib/date.d.ts.map +1 -0
- package/dist/lib/date.js +30 -0
- package/dist/lib/date.js.map +1 -0
- package/dist/lib/dev-warn.d.ts +26 -0
- package/dist/lib/dev-warn.d.ts.map +1 -0
- package/dist/lib/dev-warn.js +28 -0
- package/dist/lib/dev-warn.js.map +1 -0
- package/dist/lib/empty.d.ts +35 -0
- package/dist/lib/empty.d.ts.map +1 -0
- package/dist/lib/empty.js +11 -0
- package/dist/lib/empty.js.map +1 -0
- package/dist/lib/field.d.ts +105 -0
- package/dist/lib/field.d.ts.map +1 -0
- package/dist/lib/field.js +18 -0
- package/dist/lib/field.js.map +1 -0
- package/dist/lib/filter-range.d.ts +24 -0
- package/dist/lib/filter-range.d.ts.map +1 -0
- package/dist/lib/filter-range.js +27 -0
- package/dist/lib/filter-range.js.map +1 -0
- package/dist/lib/interaction-modality.d.ts +40 -0
- package/dist/lib/interaction-modality.d.ts.map +1 -0
- package/dist/lib/interaction-modality.js +60 -0
- package/dist/lib/interaction-modality.js.map +1 -0
- package/dist/lib/mask.d.ts +94 -0
- package/dist/lib/mask.d.ts.map +1 -0
- package/dist/lib/mask.js +114 -0
- package/dist/lib/mask.js.map +1 -0
- package/dist/lib/menu.d.ts +85 -0
- package/dist/lib/menu.d.ts.map +1 -0
- package/dist/lib/menu.js +33 -0
- package/dist/lib/menu.js.map +1 -0
- package/dist/lib/overlay-layer.d.ts +101 -0
- package/dist/lib/overlay-layer.d.ts.map +1 -0
- package/dist/lib/overlay-layer.js +40 -0
- package/dist/lib/overlay-layer.js.map +1 -0
- package/dist/lib/period.d.ts +82 -0
- package/dist/lib/period.d.ts.map +1 -0
- package/dist/lib/period.js +58 -0
- package/dist/lib/period.js.map +1 -0
- package/dist/lib/progress-status.d.ts +38 -0
- package/dist/lib/progress-status.d.ts.map +1 -0
- package/dist/lib/progress-status.js +7 -0
- package/dist/lib/progress-status.js.map +1 -0
- package/dist/lib/published-height.d.ts +16 -0
- package/dist/lib/published-height.d.ts.map +1 -0
- package/dist/lib/published-height.js +72 -0
- package/dist/lib/published-height.js.map +1 -0
- package/dist/lib/reorder.d.ts +44 -0
- package/dist/lib/reorder.d.ts.map +1 -0
- package/dist/lib/reorder.js +22 -0
- package/dist/lib/reorder.js.map +1 -0
- package/dist/lib/responsive.d.ts +51 -0
- package/dist/lib/responsive.d.ts.map +1 -0
- package/dist/lib/responsive.js +12 -0
- package/dist/lib/responsive.js.map +1 -0
- package/dist/lib/state.d.ts +25 -0
- package/dist/lib/state.d.ts.map +1 -0
- package/dist/lib/state.js +21 -0
- package/dist/lib/state.js.map +1 -0
- package/dist/lib/table-state.d.ts +105 -0
- package/dist/lib/table-state.d.ts.map +1 -0
- package/dist/lib/table-state.js +121 -0
- package/dist/lib/table-state.js.map +1 -0
- package/dist/lib/tag.d.ts +25 -0
- package/dist/lib/tag.d.ts.map +1 -0
- package/dist/lib/tag.js +6 -0
- package/dist/lib/tag.js.map +1 -0
- package/dist/lib/themes.d.ts +54 -0
- package/dist/lib/themes.d.ts.map +1 -0
- package/dist/lib/themes.js +40 -0
- package/dist/lib/themes.js.map +1 -0
- package/dist/lib/time.d.ts +35 -0
- package/dist/lib/time.d.ts.map +1 -0
- package/dist/lib/time.js +68 -0
- package/dist/lib/time.js.map +1 -0
- package/dist/lib/toolbar-axis.d.ts +17 -0
- package/dist/lib/toolbar-axis.d.ts.map +1 -0
- package/dist/lib/toolbar-axis.js +10 -0
- package/dist/lib/toolbar-axis.js.map +1 -0
- package/dist/lib/touch.d.ts +16 -0
- package/dist/lib/touch.d.ts.map +1 -0
- package/dist/lib/touch.js +2 -0
- package/dist/lib/touch.js.map +1 -0
- package/dist/lib/variants.d.ts +204 -0
- package/dist/lib/variants.d.ts.map +1 -0
- package/dist/lib/variants.js +127 -0
- package/dist/lib/variants.js.map +1 -0
- package/dist/locales/en.d.ts +11 -0
- package/dist/locales/en.d.ts.map +1 -0
- package/dist/locales/en.js +3 -0
- package/dist/locales/en.js.map +1 -0
- package/dist/locales/ru.d.ts +5 -0
- package/dist/locales/ru.d.ts.map +1 -0
- package/dist/locales/ru.js +591 -0
- package/dist/locales/ru.js.map +1 -0
- package/docs/accessibility.en.md +79 -0
- package/docs/accessibility.md +73 -0
- package/docs/api/editor-extension.en.md +309 -0
- package/docs/api/editor-extension.md +308 -0
- package/docs/api/messages.md +750 -0
- package/docs/api/migration-notes.en.md +885 -0
- package/docs/api/migration-notes.md +890 -0
- package/docs/api/utilities.md +252 -0
- package/docs/component-selection.en.md +48 -0
- package/docs/component-selection.md +44 -0
- package/docs/components/actions/button.en.md +59 -0
- package/docs/components/actions/button.md +58 -0
- package/docs/components/actions/chip.en.md +47 -0
- package/docs/components/actions/chip.md +46 -0
- package/docs/components/actions/copy-and-truncate.en.md +98 -0
- package/docs/components/actions/copy-and-truncate.md +96 -0
- package/docs/components/actions/feedback.en.md +69 -0
- package/docs/components/actions/feedback.md +68 -0
- package/docs/components/actions/split-button.en.md +76 -0
- package/docs/components/actions/split-button.md +75 -0
- package/docs/components/actions/toggles.en.md +139 -0
- package/docs/components/actions/toggles.md +136 -0
- package/docs/components/actions/toolbar.en.md +197 -0
- package/docs/components/actions/toolbar.md +192 -0
- package/docs/components/app-shell/app-shell.en.md +172 -0
- package/docs/components/app-shell/app-shell.md +172 -0
- package/docs/components/app-shell/mobile-tab-bar.en.md +207 -0
- package/docs/components/app-shell/mobile-tab-bar.md +210 -0
- package/docs/components/app-shell/side-nav.en.md +153 -0
- package/docs/components/app-shell/side-nav.md +152 -0
- package/docs/components/app-shell/split-panel.en.md +148 -0
- package/docs/components/app-shell/split-panel.md +147 -0
- package/docs/components/app-shell/top-bar.en.md +103 -0
- package/docs/components/app-shell/top-bar.md +100 -0
- package/docs/components/content/avatar.en.md +123 -0
- package/docs/components/content/avatar.md +119 -0
- package/docs/components/content/card.en.md +123 -0
- package/docs/components/content/card.md +122 -0
- package/docs/components/content/carousel.en.md +236 -0
- package/docs/components/content/carousel.md +227 -0
- package/docs/components/content/code-view.en.md +177 -0
- package/docs/components/content/code-view.md +172 -0
- package/docs/components/content/data-display.en.md +205 -0
- package/docs/components/content/data-display.md +212 -0
- package/docs/components/content/editable-list.en.md +437 -0
- package/docs/components/content/editable-list.md +418 -0
- package/docs/components/content/empty-and-loading.en.md +149 -0
- package/docs/components/content/empty-and-loading.md +149 -0
- package/docs/components/content/grid.en.md +148 -0
- package/docs/components/content/grid.md +142 -0
- package/docs/components/content/image.en.md +115 -0
- package/docs/components/content/image.md +114 -0
- package/docs/components/content/keyboard.en.md +129 -0
- package/docs/components/content/keyboard.md +129 -0
- package/docs/components/content/layout-primitives.en.md +105 -0
- package/docs/components/content/layout-primitives.md +104 -0
- package/docs/components/content/media-card.en.md +137 -0
- package/docs/components/content/media-card.md +132 -0
- package/docs/components/content/notifications.en.md +216 -0
- package/docs/components/content/notifications.md +207 -0
- package/docs/components/content/rich-text-view.en.md +325 -0
- package/docs/components/content/rich-text-view.md +324 -0
- package/docs/components/content/sortable-list.en.md +212 -0
- package/docs/components/content/sortable-list.md +206 -0
- package/docs/components/content/tag-group.en.md +158 -0
- package/docs/components/content/tag-group.md +151 -0
- package/docs/components/content/timeline.en.md +77 -0
- package/docs/components/content/timeline.md +76 -0
- package/docs/components/content/typography.en.md +152 -0
- package/docs/components/content/typography.md +146 -0
- package/docs/components/content/virtual-grid.en.md +305 -0
- package/docs/components/content/virtual-grid.md +315 -0
- package/docs/components/date-time/calendar.en.md +47 -0
- package/docs/components/date-time/calendar.md +46 -0
- package/docs/components/date-time/date-picker.en.md +52 -0
- package/docs/components/date-time/date-picker.md +50 -0
- package/docs/components/date-time/date-range-picker.en.md +58 -0
- package/docs/components/date-time/date-range-picker.md +57 -0
- package/docs/components/date-time/date-time-picker.en.md +44 -0
- package/docs/components/date-time/date-time-picker.md +43 -0
- package/docs/components/date-time/range-calendar.en.md +47 -0
- package/docs/components/date-time/range-calendar.md +46 -0
- package/docs/components/date-time/time-picker.en.md +47 -0
- package/docs/components/date-time/time-picker.md +51 -0
- package/docs/components/index.en.md +155 -0
- package/docs/components/index.md +150 -0
- package/docs/components/inputs/choice-controls.en.md +118 -0
- package/docs/components/inputs/choice-controls.md +112 -0
- package/docs/components/inputs/color-picker.en.md +126 -0
- package/docs/components/inputs/color-picker.md +122 -0
- package/docs/components/inputs/combobox.en.md +62 -0
- package/docs/components/inputs/combobox.md +58 -0
- package/docs/components/inputs/file-dropzone.en.md +51 -0
- package/docs/components/inputs/file-dropzone.md +50 -0
- package/docs/components/inputs/form-layout.en.md +99 -0
- package/docs/components/inputs/form-layout.md +97 -0
- package/docs/components/inputs/form.en.md +87 -0
- package/docs/components/inputs/form.md +86 -0
- package/docs/components/inputs/inline-edit.en.md +93 -0
- package/docs/components/inputs/inline-edit.md +94 -0
- package/docs/components/inputs/masked-input.en.md +149 -0
- package/docs/components/inputs/masked-input.md +147 -0
- package/docs/components/inputs/number-input.en.md +81 -0
- package/docs/components/inputs/number-input.md +80 -0
- package/docs/components/inputs/password-input.en.md +101 -0
- package/docs/components/inputs/password-input.md +97 -0
- package/docs/components/inputs/phone-input.en.md +78 -0
- package/docs/components/inputs/phone-input.md +76 -0
- package/docs/components/inputs/pin-input.en.md +109 -0
- package/docs/components/inputs/pin-input.md +108 -0
- package/docs/components/inputs/rating.en.md +100 -0
- package/docs/components/inputs/rating.md +99 -0
- package/docs/components/inputs/rich-text-editor.en.md +1539 -0
- package/docs/components/inputs/rich-text-editor.md +1538 -0
- package/docs/components/inputs/search-control.en.md +60 -0
- package/docs/components/inputs/search-control.md +58 -0
- package/docs/components/inputs/select.en.md +68 -0
- package/docs/components/inputs/select.md +65 -0
- package/docs/components/inputs/slider.en.md +60 -0
- package/docs/components/inputs/slider.md +59 -0
- package/docs/components/inputs/swatch-group.en.md +181 -0
- package/docs/components/inputs/swatch-group.md +177 -0
- package/docs/components/inputs/tag-input.en.md +50 -0
- package/docs/components/inputs/tag-input.md +48 -0
- package/docs/components/inputs/text-control.en.md +76 -0
- package/docs/components/inputs/text-control.md +74 -0
- package/docs/components/inputs/transfer.en.md +118 -0
- package/docs/components/inputs/transfer.md +114 -0
- package/docs/components/inputs/tree-select.en.md +91 -0
- package/docs/components/inputs/tree-select.md +89 -0
- package/docs/components/inputs/upload-queue.en.md +160 -0
- package/docs/components/inputs/upload-queue.md +158 -0
- package/docs/components/navigation/accordion.en.md +76 -0
- package/docs/components/navigation/accordion.md +75 -0
- package/docs/components/navigation/breadcrumbs.en.md +73 -0
- package/docs/components/navigation/breadcrumbs.md +72 -0
- package/docs/components/navigation/contextual-save-bar.en.md +104 -0
- package/docs/components/navigation/contextual-save-bar.md +103 -0
- package/docs/components/navigation/page-header.en.md +71 -0
- package/docs/components/navigation/page-header.md +70 -0
- package/docs/components/navigation/pagination.en.md +69 -0
- package/docs/components/navigation/pagination.md +69 -0
- package/docs/components/navigation/section-header.en.md +67 -0
- package/docs/components/navigation/section-header.md +66 -0
- package/docs/components/navigation/selection-bar.en.md +83 -0
- package/docs/components/navigation/selection-bar.md +83 -0
- package/docs/components/navigation/stepper.en.md +78 -0
- package/docs/components/navigation/stepper.md +77 -0
- package/docs/components/navigation/tabs.en.md +71 -0
- package/docs/components/navigation/tabs.md +70 -0
- package/docs/components/navigation/tree-view.en.md +173 -0
- package/docs/components/navigation/tree-view.md +172 -0
- package/docs/components/overlays/command-palette.en.md +153 -0
- package/docs/components/overlays/command-palette.md +147 -0
- package/docs/components/overlays/confirm-dialog.en.md +134 -0
- package/docs/components/overlays/confirm-dialog.md +127 -0
- package/docs/components/overlays/context-menu.en.md +115 -0
- package/docs/components/overlays/context-menu.md +113 -0
- package/docs/components/overlays/dialog.en.md +120 -0
- package/docs/components/overlays/dialog.md +117 -0
- package/docs/components/overlays/drawer.en.md +87 -0
- package/docs/components/overlays/drawer.md +88 -0
- package/docs/components/overlays/hover-card.en.md +179 -0
- package/docs/components/overlays/hover-card.md +175 -0
- package/docs/components/overlays/menu.en.md +103 -0
- package/docs/components/overlays/menu.md +100 -0
- package/docs/components/overlays/popover.en.md +78 -0
- package/docs/components/overlays/popover.md +77 -0
- package/docs/components/overlays/shortcuts-help.en.md +190 -0
- package/docs/components/overlays/shortcuts-help.md +186 -0
- package/docs/components/overlays/tooltip.en.md +78 -0
- package/docs/components/overlays/tooltip.md +77 -0
- package/docs/components/table/data-table.en.md +137 -0
- package/docs/components/table/data-table.md +133 -0
- package/docs/components/table/filter-bar.en.md +161 -0
- package/docs/components/table/filter-bar.md +155 -0
- package/docs/components/table/saved-views.en.md +117 -0
- package/docs/components/table/saved-views.md +115 -0
- package/docs/components/table/toolbar.en.md +100 -0
- package/docs/components/table/toolbar.md +97 -0
- package/docs/conventions.md +358 -0
- package/docs/getting-started.en.md +382 -0
- package/docs/getting-started.md +381 -0
- package/docs/glossary.en.md +179 -0
- package/docs/glossary.md +174 -0
- package/docs/i18n.en.md +147 -0
- package/docs/i18n.md +143 -0
- package/docs/icons.en.md +252 -0
- package/docs/icons.md +251 -0
- package/docs/index.md +62 -0
- package/docs/palette.en.md +400 -0
- package/docs/palette.md +396 -0
- package/docs/theming.en.md +522 -0
- package/docs/theming.md +518 -0
- package/llms.txt +144 -0
- package/package.json +173 -4
- package/src/color.ts +21 -0
- package/src/components/actions/Alert.tsx +121 -0
- package/src/components/actions/Banner.tsx +120 -0
- package/src/components/actions/Button.tsx +241 -0
- package/src/components/actions/ButtonGroup.tsx +65 -0
- package/src/components/actions/Chip.tsx +113 -0
- package/src/components/actions/CopyButton.tsx +112 -0
- package/src/components/actions/Progress.tsx +103 -0
- package/src/components/actions/Segmented.tsx +162 -0
- package/src/components/actions/Spinner.tsx +80 -0
- package/src/components/actions/SplitButton.tsx +164 -0
- package/src/components/actions/StatusBadge.tsx +61 -0
- package/src/components/actions/Toaster.tsx +148 -0
- package/src/components/actions/Toggle.tsx +224 -0
- package/src/components/actions/ToggleGroup.tsx +147 -0
- package/src/components/actions/Toolbar.tsx +223 -0
- package/src/components/actions/Truncate.tsx +96 -0
- package/src/components/app-shell/AppShell.tsx +268 -0
- package/src/components/app-shell/MobileTabBar.tsx +305 -0
- package/src/components/app-shell/NavItem.tsx +149 -0
- package/src/components/app-shell/SideNav.tsx +217 -0
- package/src/components/app-shell/SplitPanel.tsx +381 -0
- package/src/components/app-shell/TopBar.tsx +115 -0
- package/src/components/content/AspectRatio.tsx +45 -0
- package/src/components/content/Avatar.tsx +132 -0
- package/src/components/content/AvatarGroup.tsx +92 -0
- package/src/components/content/Badge.tsx +78 -0
- package/src/components/content/Card.tsx +117 -0
- package/src/components/content/Carousel.tsx +427 -0
- package/src/components/content/CodeView.tsx +178 -0
- package/src/components/content/DescriptionList.tsx +64 -0
- package/src/components/content/EditableList.tsx +879 -0
- package/src/components/content/EmptyState.tsx +65 -0
- package/src/components/content/ErrorState.tsx +100 -0
- package/src/components/content/Grid.tsx +208 -0
- package/src/components/content/Heading.tsx +81 -0
- package/src/components/content/Image.tsx +235 -0
- package/src/components/content/Kbd.tsx +67 -0
- package/src/components/content/Keyboard.tsx +634 -0
- package/src/components/content/Link.tsx +199 -0
- package/src/components/content/MediaCard.tsx +167 -0
- package/src/components/content/NotificationCenter.tsx +168 -0
- package/src/components/content/NotificationList.tsx +329 -0
- package/src/components/content/ScrollArea.tsx +69 -0
- package/src/components/content/Separator.tsx +62 -0
- package/src/components/content/Skeleton.tsx +40 -0
- package/src/components/content/SortableList.tsx +249 -0
- package/src/components/content/Stat.tsx +75 -0
- package/src/components/content/Table.tsx +500 -0
- package/src/components/content/TagGroup.tsx +222 -0
- package/src/components/content/Text.tsx +127 -0
- package/src/components/content/Timeline.tsx +126 -0
- package/src/components/content/VirtualGrid.tsx +726 -0
- package/src/components/content/VisuallyHidden.tsx +25 -0
- package/src/components/content/keyboardEditing.ts +51 -0
- package/src/components/content/useDragToSelect.ts +255 -0
- package/src/components/date-time/Calendar.tsx +181 -0
- package/src/components/date-time/DatePicker.tsx +143 -0
- package/src/components/date-time/DateRangePicker.tsx +349 -0
- package/src/components/date-time/DateTimePicker.tsx +92 -0
- package/src/components/date-time/RangeCalendar.tsx +156 -0
- package/src/components/date-time/TimePicker.tsx +377 -0
- package/src/components/inputs/Checkbox.tsx +284 -0
- package/src/components/inputs/CheckboxCard.tsx +132 -0
- package/src/components/inputs/CheckboxGroup.tsx +140 -0
- package/src/components/inputs/ChoiceCardBody.tsx +53 -0
- package/src/components/inputs/ColorPicker.tsx +221 -0
- package/src/components/inputs/Combobox.tsx +156 -0
- package/src/components/inputs/FileDropzone.tsx +253 -0
- package/src/components/inputs/Form.tsx +77 -0
- package/src/components/inputs/FormField.tsx +235 -0
- package/src/components/inputs/FormLayout.tsx +80 -0
- package/src/components/inputs/InlineEdit.tsx +205 -0
- package/src/components/inputs/MaskedInput.tsx +288 -0
- package/src/components/inputs/NumberInput.tsx +138 -0
- package/src/components/inputs/PasswordInput.tsx +166 -0
- package/src/components/inputs/PhoneInput.tsx +55 -0
- package/src/components/inputs/PinInput.tsx +197 -0
- package/src/components/inputs/RadioGroup.tsx +322 -0
- package/src/components/inputs/Rating.tsx +224 -0
- package/src/components/inputs/SearchControl.tsx +278 -0
- package/src/components/inputs/Select.tsx +741 -0
- package/src/components/inputs/Slider.tsx +436 -0
- package/src/components/inputs/SwatchGroup.tsx +342 -0
- package/src/components/inputs/TagInput.tsx +221 -0
- package/src/components/inputs/TextControl.tsx +335 -0
- package/src/components/inputs/Transfer.tsx +368 -0
- package/src/components/inputs/TreeSelect.tsx +275 -0
- package/src/components/inputs/UploadQueue.tsx +240 -0
- package/src/components/navigation/Accordion.tsx +118 -0
- package/src/components/navigation/Breadcrumbs.tsx +112 -0
- package/src/components/navigation/ContextualSaveBar.tsx +174 -0
- package/src/components/navigation/PageHeader.tsx +41 -0
- package/src/components/navigation/Pagination.tsx +184 -0
- package/src/components/navigation/SectionHeader.tsx +54 -0
- package/src/components/navigation/SelectionBar.tsx +151 -0
- package/src/components/navigation/Stepper.tsx +153 -0
- package/src/components/navigation/Tabs.tsx +130 -0
- package/src/components/navigation/TreeView.tsx +246 -0
- package/src/components/overlays/CommandPalette.tsx +343 -0
- package/src/components/overlays/ConfirmDialog.tsx +272 -0
- package/src/components/overlays/ContextMenu.tsx +284 -0
- package/src/components/overlays/Dialog.tsx +283 -0
- package/src/components/overlays/Drawer.tsx +193 -0
- package/src/components/overlays/HelpTooltip.tsx +96 -0
- package/src/components/overlays/HoverCard.tsx +404 -0
- package/src/components/overlays/Menu.tsx +243 -0
- package/src/components/overlays/ModalHeader.tsx +125 -0
- package/src/components/overlays/ModalOverlay.tsx +108 -0
- package/src/components/overlays/Popover.tsx +120 -0
- package/src/components/overlays/ShortcutsHelp.tsx +147 -0
- package/src/components/overlays/Tooltip.tsx +89 -0
- package/src/components/table/DataTable.tsx +164 -0
- package/src/components/table/FilterBar.tsx +114 -0
- package/src/components/table/FilterBarAdd.tsx +268 -0
- package/src/components/table/SavedViews.tsx +122 -0
- package/src/components/table/TablePreferences.tsx +173 -0
- package/src/components/table/TableToolbar.tsx +74 -0
- package/src/editor/RichTextEditor.tsx +1747 -0
- package/src/editor/RichTextView.tsx +119 -0
- package/src/editor/core/atomText.ts +140 -0
- package/src/editor/core/blockCommands.ts +329 -0
- package/src/editor/core/blockTypes.ts +252 -0
- package/src/editor/core/containers.ts +100 -0
- package/src/editor/core/customMarkdown.ts +74 -0
- package/src/editor/core/customTool.ts +472 -0
- package/src/editor/core/customToolEngine.ts +442 -0
- package/src/editor/core/document.ts +27 -0
- package/src/editor/core/emptiness.ts +31 -0
- package/src/editor/core/extensions.ts +295 -0
- package/src/editor/core/fieldNotice.ts +75 -0
- package/src/editor/core/handle.ts +311 -0
- package/src/editor/core/insertItems.ts +434 -0
- package/src/editor/core/jsonDocument.ts +99 -0
- package/src/editor/core/markdown.ts +313 -0
- package/src/editor/core/maxLength.ts +99 -0
- package/src/editor/core/pasteTrim.ts +85 -0
- package/src/editor/core/schema.ts +986 -0
- package/src/editor/core/schemaConform.ts +122 -0
- package/src/editor/core/shortcuts.ts +435 -0
- package/src/editor/core/skeleton.ts +108 -0
- package/src/editor/core/slashCommand.ts +143 -0
- package/src/editor/core/sourceFormat.ts +194 -0
- package/src/editor/core/toolButtons.ts +133 -0
- package/src/editor/core/toolDescriptor.ts +359 -0
- package/src/editor/core/toolEntryShortcuts.ts +66 -0
- package/src/editor/core/toolLoader.ts +50 -0
- package/src/editor/core/tools.ts +150 -0
- package/src/editor/core/viewIsland.ts +35 -0
- package/src/editor/features/builtins.ts +145 -0
- package/src/editor/features/code/CodeBlockView.tsx +240 -0
- package/src/editor/features/code/CodeCopyButton.tsx +76 -0
- package/src/editor/features/code/CodeCopyIsland.tsx +71 -0
- package/src/editor/features/code/codeBlock.ts +188 -0
- package/src/editor/features/code/codeBlockTool.ts +107 -0
- package/src/editor/features/code/codeHeader.ts +97 -0
- package/src/editor/features/code/codeLanguages.ts +62 -0
- package/src/editor/features/code/highlight.ts +109 -0
- package/src/editor/features/code/highlightNodes.ts +65 -0
- package/src/editor/features/code/lowlight.ts +45 -0
- package/src/editor/features/color/CustomColorPopover.tsx +180 -0
- package/src/editor/features/color/contrast.ts +52 -0
- package/src/editor/features/color/customColor.ts +91 -0
- package/src/editor/features/color/styleExtensions.ts +316 -0
- package/src/editor/features/emoji/EmojiGrid.tsx +160 -0
- package/src/editor/features/emoji/emoji.ts +156 -0
- package/src/editor/features/emoji/emojiTool.tsx +67 -0
- package/src/editor/features/image/ImagePopover.tsx +254 -0
- package/src/editor/features/image/ImageToolbar.tsx +147 -0
- package/src/editor/features/image/image.ts +821 -0
- package/src/editor/features/image/imageNotice.ts +27 -0
- package/src/editor/features/layout/columnLayouts.ts +71 -0
- package/src/editor/features/layout/layout.ts +537 -0
- package/src/editor/features/link/LinkPopover.tsx +114 -0
- package/src/editor/features/link/link.ts +112 -0
- package/src/editor/features/link/linkTool.tsx +36 -0
- package/src/editor/features/search/SearchPanel.tsx +264 -0
- package/src/editor/features/search/revealMatch.ts +69 -0
- package/src/editor/features/search/searchMatch.ts +129 -0
- package/src/editor/features/search/searchPlugin.ts +254 -0
- package/src/editor/features/search/searchTool.ts +30 -0
- package/src/editor/features/table/TableInsertDialog.tsx +129 -0
- package/src/editor/features/table/TableMenuButton.tsx +503 -0
- package/src/editor/features/table/TableSizeGrid.tsx +265 -0
- package/src/editor/features/table/tableActions.ts +380 -0
- package/src/editor/features/table/tableCells.ts +63 -0
- package/src/editor/features/table/tableChunk.ts +11 -0
- package/src/editor/features/table/tableTool.ts +74 -0
- package/src/editor/features/table/tables.ts +220 -0
- package/src/editor/features/wrapper/wrapper.ts +350 -0
- package/src/editor/features/wrapper/wrapperTones.ts +51 -0
- package/src/editor/highlight-entry.ts +23 -0
- package/src/editor/highlight-grammars.d.ts +12 -0
- package/src/editor/hooks/useChangeThrottle.ts +62 -0
- package/src/editor/hooks/useCoarsePointer.ts +36 -0
- package/src/editor/hooks/useFieldsetDisabled.ts +53 -0
- package/src/editor/hooks/useRichTextEditorState.ts +51 -0
- package/src/editor/hooks/useSubmenuPlacement.ts +40 -0
- package/src/editor/index.ts +59 -0
- package/src/editor/schema-entry.ts +40 -0
- package/src/editor/styles/codeTheme.ts +66 -0
- package/src/editor/styles/glass.ts +66 -0
- package/src/editor/styles/palette.ts +191 -0
- package/src/editor/styles/prose.ts +429 -0
- package/src/editor/styles/surface.ts +24 -0
- package/src/editor/styles/tokens.ts +173 -0
- package/src/editor/ui/BlockHandle.tsx +601 -0
- package/src/editor/ui/BlockIsland.tsx +23 -0
- package/src/editor/ui/BlockIslandSlots.tsx +114 -0
- package/src/editor/ui/ColorMenus.tsx +613 -0
- package/src/editor/ui/EditorToolbar.tsx +630 -0
- package/src/editor/ui/FieldResizer.tsx +155 -0
- package/src/editor/ui/FieldStatus.tsx +85 -0
- package/src/editor/ui/FloatingToolbar.tsx +77 -0
- package/src/editor/ui/FormatMenus.tsx +706 -0
- package/src/editor/ui/InsertMenuButton.tsx +104 -0
- package/src/editor/ui/SelectionBubble.tsx +317 -0
- package/src/editor/ui/ShortcutsButton.tsx +128 -0
- package/src/editor/ui/SlashMenu.tsx +199 -0
- package/src/editor/ui/SuggestionList.tsx +217 -0
- package/src/editor/ui/TextCard.tsx +312 -0
- package/src/editor/ui/ToolButtonView.tsx +242 -0
- package/src/editor/ui/TriggerMenu.tsx +255 -0
- package/src/editor/ui/focusWithin.ts +26 -0
- package/src/editor/ui/lockableMenu.ts +37 -0
- package/src/editor/ui/rowMarks.ts +66 -0
- package/src/editor/ui/selectionMenu.ts +97 -0
- package/src/hooks/useFieldDescription.ts +126 -0
- package/src/hooks/useMediaQuery.ts +46 -0
- package/src/hooks/useOpenerFocus.ts +118 -0
- package/src/hooks/useOverlayLayer.ts +42 -0
- package/src/hooks/useScrollLock.ts +92 -0
- package/src/hooks/useStickyOffset.ts +228 -0
- package/src/hooks/useTableState.ts +76 -0
- package/src/i18n/UiProvider.tsx +152 -0
- package/src/i18n/context.ts +30 -0
- package/src/i18n/defaults.ts +657 -0
- package/src/i18n/messages.ts +1183 -0
- package/src/i18n/useMessages.ts +47 -0
- package/src/icons.ts +566 -0
- package/src/index.ts +502 -0
- package/src/lib/accessible-name.ts +35 -0
- package/src/lib/bottom-bar-slot.ts +27 -0
- package/src/lib/button.ts +158 -0
- package/src/lib/choice-card.ts +79 -0
- package/src/lib/clamp.ts +18 -0
- package/src/lib/cn.ts +48 -0
- package/src/lib/date.ts +87 -0
- package/src/lib/dev-warn.ts +82 -0
- package/src/lib/empty.ts +43 -0
- package/src/lib/field.ts +125 -0
- package/src/lib/filter-range.ts +48 -0
- package/src/lib/interaction-modality.ts +134 -0
- package/src/lib/mask.ts +226 -0
- package/src/lib/menu.ts +196 -0
- package/src/lib/overlay-layer.ts +163 -0
- package/src/lib/period.ts +167 -0
- package/src/lib/progress-status.ts +44 -0
- package/src/lib/published-height.ts +147 -0
- package/src/lib/reorder.ts +65 -0
- package/src/lib/responsive.ts +71 -0
- package/src/lib/state.ts +39 -0
- package/src/lib/table-state.ts +264 -0
- package/src/lib/tag.ts +31 -0
- package/src/lib/themes.ts +144 -0
- package/src/lib/time.ts +107 -0
- package/src/lib/toolbar-axis.tsx +31 -0
- package/src/lib/touch.ts +15 -0
- package/src/lib/variants.ts +342 -0
- package/src/locales/en.ts +10 -0
- package/src/locales/ru.ts +695 -0
- package/styles.css +1650 -0
|
@@ -0,0 +1,741 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import {
|
|
4
|
+
useEffect,
|
|
5
|
+
useId,
|
|
6
|
+
useMemo,
|
|
7
|
+
useRef,
|
|
8
|
+
useState,
|
|
9
|
+
type KeyboardEvent,
|
|
10
|
+
type ReactNode,
|
|
11
|
+
} from "react";
|
|
12
|
+
import { useFieldDescribedBy } from "../../hooks/useFieldDescription.js";
|
|
13
|
+
import { cn } from "../../lib/cn.js";
|
|
14
|
+
import { LISTBOX_ITEM_CLASS } from "../../lib/menu.js";
|
|
15
|
+
import { FIELD_CLEAR_CLASS } from "../../lib/field.js";
|
|
16
|
+
import { useMessages } from "../../i18n/useMessages.js";
|
|
17
|
+
import { CheckIcon, CloseIcon, SelectIcon } from "../../icons.js";
|
|
18
|
+
import { Popover, PopoverContent, PopoverTrigger } from "../overlays/Popover.js";
|
|
19
|
+
import { VisuallyHidden } from "../content/VisuallyHidden.js";
|
|
20
|
+
|
|
21
|
+
/** Минимум, который список требует от элемента. Остальные поля — ваши. */
|
|
22
|
+
export interface SelectItem {
|
|
23
|
+
/** Идентификатор элемента; именно он попадает в `value` и `onChange`. */
|
|
24
|
+
id: string | number;
|
|
25
|
+
/** Подпись в списке и в триггере. По ней же идёт поиск. */
|
|
26
|
+
label: string;
|
|
27
|
+
/** Дополнительный текст для поиска — slug, описание, синонимы. Не показывается. */
|
|
28
|
+
keywords?: string;
|
|
29
|
+
/** Что показать справа у невыбранного элемента: счётчик, дата, тон. */
|
|
30
|
+
meta?: ReactNode;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Идентификатор элемента списка.
|
|
35
|
+
*
|
|
36
|
+
* Экспортируется, потому что стоит в публичной сигнатуре: `value` и `onChange`
|
|
37
|
+
* говорят на нём. Без экспорта потребитель, объявляя состояние или обработчик,
|
|
38
|
+
* писал `string | number | null` руками — то есть повторял определение кита в
|
|
39
|
+
* своём коде, и при его изменении узнал бы об этом не от компилятора.
|
|
40
|
+
*
|
|
41
|
+
* Тип шире, чем `string`, ровно из-за `id` у `SelectItem`: категории приходят
|
|
42
|
+
* с сервера с числовыми идентификаторами, коллекции — со строковыми.
|
|
43
|
+
*/
|
|
44
|
+
export type SelectId = string | number;
|
|
45
|
+
|
|
46
|
+
/** Общая часть обеих осей: всё, что не зависит от множественности. */
|
|
47
|
+
interface SelectCommonProps<T extends SelectItem> {
|
|
48
|
+
/** Элементы списка. */
|
|
49
|
+
items: T[];
|
|
50
|
+
/** Подпись триггера, когда ничего не выбрано: «Категория», «Автор». */
|
|
51
|
+
placeholder: string;
|
|
52
|
+
/**
|
|
53
|
+
* Поле поиска в панели. По умолчанию выключено: список из трёх статусов
|
|
54
|
+
* искать незачем, а поле в нём — лишний шаг до цели.
|
|
55
|
+
*/
|
|
56
|
+
searchable?: boolean;
|
|
57
|
+
/** Плейсхолдер в поле поиска панели. */
|
|
58
|
+
searchPlaceholder?: string;
|
|
59
|
+
/** Когда список пуст изначально. */
|
|
60
|
+
emptyText?: string;
|
|
61
|
+
/** Когда пуст результат поиска. */
|
|
62
|
+
notFoundText?: string;
|
|
63
|
+
/** Показывать ли кнопку очистки у выбранного значения. */
|
|
64
|
+
clearable?: boolean;
|
|
65
|
+
/**
|
|
66
|
+
* Подсвечивать ли триггер акцентом, когда значение выбрано.
|
|
67
|
+
*
|
|
68
|
+
* В фильтрах — да, и по умолчанию так: подсветка там означает «фильтр
|
|
69
|
+
* применён», её ищут глазами, пробегая панель. В форме она означала бы
|
|
70
|
+
* «поле заполнено» — а заполненное поле это норма, а не событие, и рядом
|
|
71
|
+
* с обычными `TextControl` акцентная пилюля выглядит тревогой на пустом
|
|
72
|
+
* месте.
|
|
73
|
+
*
|
|
74
|
+
* Выключенный вариант оставляет триггеру нейтральную рамку; фон и радиус
|
|
75
|
+
* под соседние поля потребитель задаёт через `triggerClassName` — какой
|
|
76
|
+
* именно вид у формы, пакет не знает.
|
|
77
|
+
*/
|
|
78
|
+
highlightSelected?: boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Рисует картинку слева от подписи: превью, эмодзи, аватар.
|
|
81
|
+
*
|
|
82
|
+
* Картинка слева: превью, эмодзи, аватар. `px` — сторона квадрата, которую
|
|
83
|
+
* ждёт вёрстка: 20 в триггере, 28 в списке. Размер передаётся числом, а не
|
|
84
|
+
* ступенью словаря, потому что это внутренняя геометрия списка, а не ось.
|
|
85
|
+
*
|
|
86
|
+
* 20 в триггере — это ровно строчный бокс контрола (`leading-5`), и меньшим
|
|
87
|
+
* числом квадрат сделан именно поэтому: всё, что выше строки, растягивает
|
|
88
|
+
* триггер, и он расходится по высоте с соседним `TextControl`.
|
|
89
|
+
*/
|
|
90
|
+
renderMedia?: (item: T, px: number) => ReactNode;
|
|
91
|
+
/**
|
|
92
|
+
* Иконка слева в свёрнутом состоянии — когда ничего не выбрано. У выбранного
|
|
93
|
+
* значения его место занимает `renderMedia`.
|
|
94
|
+
*
|
|
95
|
+
* По умолчанию `SelectIcon` из словаря дизайн-системы — общепринятая
|
|
96
|
+
* стрелка-двусторонка выпадающего списка. Раньше здесь стоял текстовый символ
|
|
97
|
+
* `⌄`, потому что пакет принципиально не тянул иконочную библиотеку; на деле
|
|
98
|
+
* это означало, что привести компонент к своему стилю нельзя было вовсе,
|
|
99
|
+
* и потребителю приходилось передавать иконку вручную в каждом месте вызова.
|
|
100
|
+
*
|
|
101
|
+
* Своя иконка по-прежнему передаётся сюда — она получит `aria-hidden`
|
|
102
|
+
* от обёртки, потому что подпись рядом уже всё называет.
|
|
103
|
+
*/
|
|
104
|
+
icon?: ReactNode;
|
|
105
|
+
/** Раскрыт ли список, когда им управляют снаружи; обновлять в `onOpenChange`. */
|
|
106
|
+
open?: boolean;
|
|
107
|
+
/** Вызывается при открытии и закрытии списка. */
|
|
108
|
+
onOpenChange?: (open: boolean) => void;
|
|
109
|
+
/**
|
|
110
|
+
* Классы триггера: раскладка, внутренние отступы, скругление, фон.
|
|
111
|
+
*
|
|
112
|
+
* Здесь же снимается предел ширины подписи, если триггер широкий:
|
|
113
|
+
* `[--select-label-max:none]`. По умолчанию подпись обрезается на 110px,
|
|
114
|
+
* чтобы пилюля фильтра не растягивалась по длинному названию.
|
|
115
|
+
*/
|
|
116
|
+
triggerClassName?: string;
|
|
117
|
+
/** Классы выпадающей панели. */
|
|
118
|
+
contentClassName?: string;
|
|
119
|
+
/** Доступное имя кнопки очистки. */
|
|
120
|
+
clearLabel?: string;
|
|
121
|
+
/**
|
|
122
|
+
* Как подписать значение, которому не нашлось элемента в `items`.
|
|
123
|
+
*
|
|
124
|
+
* Такое бывает в двух обычных случаях: значение пришло из адреса, пока список
|
|
125
|
+
* ещё грузится, и значение указывает на удалённую запись. По умолчанию
|
|
126
|
+
* показывается сам ключ — он честнее плейсхолдера, когда человекочитаем
|
|
127
|
+
* (`section-contracts`). Но если идентификаторы у вас машинные, пользователь
|
|
128
|
+
* увидит `9f2c1b04-…`; тогда подпись задаёт этот проп — кит не знает, как
|
|
129
|
+
* выглядят ваши ключи.
|
|
130
|
+
*/
|
|
131
|
+
missingLabel?: (id: SelectId) => ReactNode;
|
|
132
|
+
/**
|
|
133
|
+
* Выключенное поле: триггер не фокусируется, панель не открывается, кнопка
|
|
134
|
+
* очистки исчезает, вид приглушён.
|
|
135
|
+
*
|
|
136
|
+
* Поведение и вид — как у `Button` и `TextControl`, и заведено оно ровно
|
|
137
|
+
* поэтому: потребитель гасит форму на время запроса целиком, а поле, которое
|
|
138
|
+
* осталось живым среди погасших соседей, читается как недоделка, а не как
|
|
139
|
+
* замысел.
|
|
140
|
+
*/
|
|
141
|
+
disabled?: boolean;
|
|
142
|
+
/**
|
|
143
|
+
* Доступное имя поля — «Иконка», «Проект».
|
|
144
|
+
*
|
|
145
|
+
* БЕЗ НЕГО ТРИГГЕР ИМЕНУЕТСЯ СОДЕРЖИМЫМ, то есть подписью выбранного значения
|
|
146
|
+
* либо плейсхолдером. В панели фильтров этого хватает: там плейсхолдер и есть
|
|
147
|
+
* название фильтра. В форме — нет: зрячий видит подпись «Иконка» над полем,
|
|
148
|
+
* а скринридер объявляет «Без иконки, кнопка», и два таких поля рядом на слух
|
|
149
|
+
* не различаются. Подпись `FormField` сюда не доходит сама: составной контрол
|
|
150
|
+
* не принимает `id`, и `htmlFor` связывать нечего.
|
|
151
|
+
*
|
|
152
|
+
* ИМЯ СКЛАДЫВАЕТСЯ С СОДЕРЖИМЫМ, а не вытесняет его: строка уезжает в скрытый
|
|
153
|
+
* узел, и триггер объявляется «Иконка, Круг, кнопка». Обычный `aria-label` на
|
|
154
|
+
* кнопке победил бы содержимое, и поле выбора перестало бы сообщать, что в
|
|
155
|
+
* нём выбрано. Тот же приём и по той же причине — в `TreeSelect`.
|
|
156
|
+
*/
|
|
157
|
+
"aria-label"?: string;
|
|
158
|
+
/**
|
|
159
|
+
* Имя триггера ссылкой на `id` уже показанной подписи.
|
|
160
|
+
*
|
|
161
|
+
* То же имя, но ссылкой на уже нарисованную подпись: у потребителя она стоит
|
|
162
|
+
* на экране, и повторять её текст здесь значило бы завести второй источник,
|
|
163
|
+
* который разъедется с первым молча.
|
|
164
|
+
*
|
|
165
|
+
* Складывается с содержимым так же, как `aria-label`. Заданы оба — побеждает
|
|
166
|
+
* ссылка: видимая подпись ближе к тому, что человек читает глазами.
|
|
167
|
+
*/
|
|
168
|
+
"aria-labelledby"?: string;
|
|
169
|
+
/**
|
|
170
|
+
* Своё описание триггера. Сливается с описанием `FormField`, а не заменяет
|
|
171
|
+
* его: подсказка формы и пояснение потребителя обязаны звучать обе.
|
|
172
|
+
*/
|
|
173
|
+
"aria-describedby"?: string;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/*
|
|
177
|
+
Предел ширины подписи — ОДИН на все ветки триггера.
|
|
178
|
+
|
|
179
|
+
Стоял он только у выбранного значения, и остальные две подписи росли
|
|
180
|
+
свободно: счётчик множественного выбора и подпись исчезнувшего значения
|
|
181
|
+
(`missingLabel`). Замер потребителя: пилюля с «Проект удалён» занимала 170
|
|
182
|
+
пикселей против 120 у обычной — одной такой хватало, чтобы панель отбора
|
|
183
|
+
разъехалась на вторую строку. `truncate` там был, а обрезать ему было нечего:
|
|
184
|
+
без `max-width` строка занимает столько, сколько занимает.
|
|
185
|
+
|
|
186
|
+
Плейсхолдер намеренно без предела: это состояние по умолчанию, под него у
|
|
187
|
+
всех потребителей уже собрана раскладка, и обрезать её задним числом значило
|
|
188
|
+
бы сменить вид там, где никто не жаловался.
|
|
189
|
+
*/
|
|
190
|
+
const LABEL_CLASS = "max-w-[var(--select-label-max,110px)] truncate";
|
|
191
|
+
|
|
192
|
+
export type SelectProps<T extends SelectItem> =
|
|
193
|
+
| (SelectCommonProps<T> & {
|
|
194
|
+
/** Выбор одного элемента. По умолчанию. */
|
|
195
|
+
multiple?: false;
|
|
196
|
+
/** Выбранный `id` или, при `multiple`, массив `id`. Сравнение по строке: `1` и `"1"` — одно и то же; порядок в массиве — как пришёл. */
|
|
197
|
+
value?: SelectId | null;
|
|
198
|
+
/**
|
|
199
|
+
* Выбран элемент — приходит его `id`; очищено — приходит `null`.
|
|
200
|
+
*
|
|
201
|
+
* Раньше очистка отдавала пустую строку, и договорённость держалась только
|
|
202
|
+
* на комментарии: в типе `""` неотличима от любого другого `string`. `null`
|
|
203
|
+
* виден компилятору, и потребитель обязан его обработать.
|
|
204
|
+
*/
|
|
205
|
+
onChange: (id: SelectId | null) => void;
|
|
206
|
+
})
|
|
207
|
+
| (SelectCommonProps<T> & {
|
|
208
|
+
/** Выбор нескольких элементов: `value` — массив `id`, `onChange` получает массив. */
|
|
209
|
+
multiple: true;
|
|
210
|
+
/** Выбранный `id` или, при `multiple`, массив `id`. Сравнение по строке: `1` и `"1"` — одно и то же; порядок в массиве — как пришёл. */
|
|
211
|
+
value?: SelectId[];
|
|
212
|
+
/** Всегда массив: очистка — пустой, а не `null`. */
|
|
213
|
+
onChange: (ids: SelectId[]) => void;
|
|
214
|
+
/**
|
|
215
|
+
* Подпись триггера, когда выбрано больше одного: «Категории: 3».
|
|
216
|
+
* Склонение — работа потребителя: пакет не знает ни языка подписи,
|
|
217
|
+
* ни того, что `placeholder` был в единственном числе.
|
|
218
|
+
*/
|
|
219
|
+
countLabel?: (count: number) => ReactNode;
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
/**
|
|
223
|
+
* Выпадающий список с двумя ортогональными осями: `searchable` и `multiple`.
|
|
224
|
+
*
|
|
225
|
+
* Пришёл на смену `SearchSelect`, который умел ровно одно сочетание —
|
|
226
|
+
* «с поиском, по одному». Оси разведены, потому что во фронте одновременно
|
|
227
|
+
* жили и он, и два рукописных дропдауна (статус и тон), повторявшие его
|
|
228
|
+
* триггер и панель без поиска: сотня строк копии ради выключенной строки поиска.
|
|
229
|
+
*
|
|
230
|
+
* Типы — union по `multiple`, а не `SelectId | SelectId[] | null` одним полем.
|
|
231
|
+
* Разница принципиальная: с union компилятор сам знает, что придёт в `onChange`,
|
|
232
|
+
* и потребителю не приходится сужать тип в каждом обработчике.
|
|
233
|
+
*
|
|
234
|
+
* ДВЕ ВЕЩИ УСТРОЕНЫ ИНАЧЕ, ЧЕМ В ПРЕЖНИХ ПИКЕРАХ ФРОНТА, И ЭТО НЕ КОСМЕТИКА:
|
|
235
|
+
*
|
|
236
|
+
* 1. Крестик очистки — настоящая `<button>` рядом с триггером, а не `<span>`
|
|
237
|
+
* с `onClick` внутри него. Вложенная интерактивность недопустима в разметке,
|
|
238
|
+
* и такой крестик был недостижим с клавиатуры вовсе: до него нельзя было
|
|
239
|
+
* добраться табом, а Enter на нём открывал список вместо очистки.
|
|
240
|
+
* 2. Триггер сообщает состояние: `aria-expanded` и `aria-haspopup="listbox"`.
|
|
241
|
+
* Прежняя версия отдавала скринридеру обычную кнопку, по которой нельзя
|
|
242
|
+
* было понять ни что она открывает, ни что уже выбрано.
|
|
243
|
+
*/
|
|
244
|
+
export function Select<T extends SelectItem>(props: SelectProps<T>) {
|
|
245
|
+
/**
|
|
246
|
+
* Описание поля из `FormField` плюс своё, если потребитель его передал.
|
|
247
|
+
*
|
|
248
|
+
* Тот же приём, что у `TextControl` и `NumberInput`: значения СЛИВАЮТСЯ, а
|
|
249
|
+
* не заменяют друг друга. Вне `FormField` контекст пуст, и разметка та же,
|
|
250
|
+
* что была до появления описаний.
|
|
251
|
+
*/
|
|
252
|
+
const fieldDescribedBy = useFieldDescribedBy();
|
|
253
|
+
const describedBy =
|
|
254
|
+
[props["aria-describedby"], fieldDescribedBy].filter(Boolean).join(" ") || undefined;
|
|
255
|
+
|
|
256
|
+
const {
|
|
257
|
+
items,
|
|
258
|
+
placeholder,
|
|
259
|
+
searchable = false,
|
|
260
|
+
searchPlaceholder,
|
|
261
|
+
emptyText,
|
|
262
|
+
notFoundText,
|
|
263
|
+
clearable = true,
|
|
264
|
+
highlightSelected = true,
|
|
265
|
+
renderMedia,
|
|
266
|
+
icon,
|
|
267
|
+
open: controlledOpen,
|
|
268
|
+
onOpenChange,
|
|
269
|
+
triggerClassName,
|
|
270
|
+
contentClassName,
|
|
271
|
+
clearLabel,
|
|
272
|
+
missingLabel,
|
|
273
|
+
disabled = false,
|
|
274
|
+
"aria-label": ariaLabel,
|
|
275
|
+
"aria-labelledby": ariaLabelledBy,
|
|
276
|
+
} = props;
|
|
277
|
+
|
|
278
|
+
const messages = useMessages();
|
|
279
|
+
const [internalOpen, setInternalOpen] = useState(false);
|
|
280
|
+
const [search, setSearch] = useState("");
|
|
281
|
+
|
|
282
|
+
const open = controlledOpen ?? internalOpen;
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* ИМЯ ТРИГГЕРА СОБИРАЕТСЯ ИЗ ПОДПИСИ И СОДЕРЖИМОГО.
|
|
286
|
+
*
|
|
287
|
+
* `aria-label` на кнопке победил бы содержимое, и поле объявлялось бы
|
|
288
|
+
* «Иконка, кнопка» — без единого слова о том, что в нём выбрано. Для поля
|
|
289
|
+
* выбора это отказ основной функции, и axe его не ловит: имя у кнопки есть.
|
|
290
|
+
* Поэтому подпись уезжает в скрытый узел, а `aria-labelledby` перечисляет её
|
|
291
|
+
* вместе с узлом значения. Раскладка повторяет `TreeSelect`.
|
|
292
|
+
*
|
|
293
|
+
* Без подписи атрибута нет вовсе: тогда имя вычисляется из содержимого, как
|
|
294
|
+
* и до появления этих пропов, — в панели фильтров плейсхолдер и есть название.
|
|
295
|
+
*/
|
|
296
|
+
const fieldId = useId();
|
|
297
|
+
const labelId = `${fieldId}-label`;
|
|
298
|
+
const valueId = `${fieldId}-value`;
|
|
299
|
+
const labelledBy = ariaLabelledBy ?? (ariaLabel ? labelId : undefined);
|
|
300
|
+
|
|
301
|
+
/*
|
|
302
|
+
Выключение ЗАКРЫВАЕТ панель, а не прячет её.
|
|
303
|
+
|
|
304
|
+
Одного `open && !disabled` в разметке мало: управляемая смена `open` у Radix
|
|
305
|
+
не зовёт `onOpenChange`, и состояние осталось бы `true` — форма ушла в
|
|
306
|
+
отправку, панель исчезла, отправка кончилась, панель вернулась сама, хотя
|
|
307
|
+
пользователь ничего не нажимал. Тот же приём и по той же причине, что в
|
|
308
|
+
`TreeSelect` и `SplitButton`.
|
|
309
|
+
|
|
310
|
+
Закрытие объявляется НАРУЖУ, а не только внутрь. У `TreeSelect` состояние
|
|
311
|
+
всегда своё, здесь же `open` бывает управляемым: погасить одно внутреннее
|
|
312
|
+
значило бы закрыть панель на экране и оставить `true` у потребителя — то
|
|
313
|
+
самое возвращение, от которого эффект и заводится.
|
|
314
|
+
|
|
315
|
+
Колбэк зовётся, только если панель была открыта: иначе каждое выключение
|
|
316
|
+
поля слало бы `onOpenChange(false)` о том, чего не было.
|
|
317
|
+
*/
|
|
318
|
+
useEffect(() => {
|
|
319
|
+
if (!disabled || !open) return;
|
|
320
|
+
setInternalOpen(false);
|
|
321
|
+
onOpenChange?.(false);
|
|
322
|
+
// Зависимость одна: эффект — про МОМЕНТ выключения, а `open` и колбэк
|
|
323
|
+
// читаются в этот момент и в перезапуске не нуждаются.
|
|
324
|
+
}, [disabled]);
|
|
325
|
+
|
|
326
|
+
/**
|
|
327
|
+
* Внутреннее состояние обновляется ВСЕГДА, даже когда потребитель слушает
|
|
328
|
+
* `onOpenChange`. Иначе тот, кто передал только колбэк без `open`, получал
|
|
329
|
+
* список, который не открывается никогда: `setOpen` уходил в колбэк, а
|
|
330
|
+
* `internalOpen` оставался `false`.
|
|
331
|
+
*/
|
|
332
|
+
const setOpen = (next: boolean) => {
|
|
333
|
+
setInternalOpen(next);
|
|
334
|
+
onOpenChange?.(next);
|
|
335
|
+
};
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* Обе оси сводятся к одному списку строк — дальше разметке всё равно.
|
|
339
|
+
*
|
|
340
|
+
* Пустая строка — тоже «не выбрано». Компонент отдаёт при очистке `null`,
|
|
341
|
+
* но потребители держат фильтры в URL, где пусто выражается именно `""`,
|
|
342
|
+
* и присылают его обратно. Считать `""` выбором значит показать счётчик
|
|
343
|
+
* «Статус: 1» на фильтре, где ничего не выбрано.
|
|
344
|
+
*/
|
|
345
|
+
const selectedIds = props.multiple
|
|
346
|
+
? (props.value ?? []).map(String).filter((v) => v !== "")
|
|
347
|
+
: props.value === null || props.value === undefined || props.value === ""
|
|
348
|
+
? []
|
|
349
|
+
: [String(props.value)];
|
|
350
|
+
|
|
351
|
+
const selected =
|
|
352
|
+
selectedIds.length === 1 ? items.find((i) => String(i.id) === selectedIds[0]) : undefined;
|
|
353
|
+
|
|
354
|
+
const filtered = useMemo(() => {
|
|
355
|
+
const q = search.trim().toLowerCase();
|
|
356
|
+
if (!q) return items;
|
|
357
|
+
return items.filter(
|
|
358
|
+
(i) => i.label.toLowerCase().includes(q) || (i.keywords ?? "").toLowerCase().includes(q)
|
|
359
|
+
);
|
|
360
|
+
}, [items, search]);
|
|
361
|
+
|
|
362
|
+
const select = (item: T) => {
|
|
363
|
+
if (props.multiple) {
|
|
364
|
+
// Панель остаётся открытой: мультивыбор из одного элемента бессмыслен,
|
|
365
|
+
// а закрытие после каждого клика заставляло бы открывать её заново.
|
|
366
|
+
const id = String(item.id);
|
|
367
|
+
const current = props.value ?? [];
|
|
368
|
+
props.onChange(
|
|
369
|
+
current.some((v) => String(v) === id)
|
|
370
|
+
? current.filter((v) => String(v) !== id)
|
|
371
|
+
: [...current, item.id]
|
|
372
|
+
);
|
|
373
|
+
return;
|
|
374
|
+
}
|
|
375
|
+
props.onChange(item.id);
|
|
376
|
+
setSearch("");
|
|
377
|
+
setOpen(false);
|
|
378
|
+
};
|
|
379
|
+
|
|
380
|
+
const clear = () => {
|
|
381
|
+
if (props.multiple) props.onChange([]);
|
|
382
|
+
else props.onChange(null);
|
|
383
|
+
setSearch("");
|
|
384
|
+
setOpen(false);
|
|
385
|
+
};
|
|
386
|
+
|
|
387
|
+
const hasSelection = selectedIds.length > 0;
|
|
388
|
+
// `Set`, а не `includes` на каждой строке: список бывает в тысячи элементов,
|
|
389
|
+
// а отмеченных — в сотни, и на каждый символ в поиске это давало сотни тысяч
|
|
390
|
+
// сравнений строк синхронно, до отрисовки.
|
|
391
|
+
const selectedSet = useMemo(() => new Set(selectedIds), [selectedIds.join("\u0000")]);
|
|
392
|
+
const countLabel = props.multiple ? props.countLabel : undefined;
|
|
393
|
+
|
|
394
|
+
/**
|
|
395
|
+
* КЛАВИАТУРА В ПАНЕЛИ. Фокус переносится по настоящим кнопкам
|
|
396
|
+
* (roving focus), а не через `aria-activedescendant`: пункты списка здесь —
|
|
397
|
+
* полноценные `<button>`, и второй способ адресации ничего не добавил бы,
|
|
398
|
+
* кроме расхождения между «куда смотрит скринридер» и «где фокус на самом
|
|
399
|
+
* деле».
|
|
400
|
+
*
|
|
401
|
+
* Обработчик один и висит на всей панели, а не на каждом пункте: до пунктов
|
|
402
|
+
* дело доходит не всегда — сразу после открытия фокус стоит либо в поле
|
|
403
|
+
* поиска, либо на самой панели (её фокусирует Radix), и события с них
|
|
404
|
+
* до списка не всплывают, потому что список у них внутри, а не снаружи.
|
|
405
|
+
*/
|
|
406
|
+
const searchRef = useRef<HTMLInputElement>(null);
|
|
407
|
+
const optionRefs = useRef<(HTMLButtonElement | null)[]>([]);
|
|
408
|
+
|
|
409
|
+
/**
|
|
410
|
+
* Живые кнопки списка. Отфильтровать дырки обязательно: React обнуляет реф
|
|
411
|
+
* при размонтировании, поэтому после сужения поиска в массиве остаются
|
|
412
|
+
* `null` на месте выбывших пунктов — и `End` уводил бы фокус в такую дырку,
|
|
413
|
+
* то есть никуда. Считаем здесь, а не подрезаем массив в рендере: писать
|
|
414
|
+
* в реф во время рендера нельзя.
|
|
415
|
+
*/
|
|
416
|
+
const liveOptions = () => optionRefs.current.filter((el): el is HTMLButtonElement => el !== null);
|
|
417
|
+
|
|
418
|
+
const focusOption = (index: number) => {
|
|
419
|
+
const options = liveOptions();
|
|
420
|
+
if (options.length === 0) return;
|
|
421
|
+
// Края не зацикливаются: список — не карусель, и «вниз» с последнего
|
|
422
|
+
// пункта, прыгающее на первый, читается как промах, а не как переход.
|
|
423
|
+
options[Math.max(0, Math.min(index, options.length - 1))]?.focus();
|
|
424
|
+
};
|
|
425
|
+
|
|
426
|
+
const onPanelKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {
|
|
427
|
+
const inSearch = document.activeElement === searchRef.current;
|
|
428
|
+
const current = liveOptions().indexOf(document.activeElement as HTMLButtonElement);
|
|
429
|
+
|
|
430
|
+
switch (e.key) {
|
|
431
|
+
case "ArrowDown":
|
|
432
|
+
e.preventDefault();
|
|
433
|
+
// Из поля поиска и с самой панели — на первый пункт.
|
|
434
|
+
focusOption(current < 0 ? 0 : current + 1);
|
|
435
|
+
return;
|
|
436
|
+
case "ArrowUp":
|
|
437
|
+
if (inSearch) return;
|
|
438
|
+
e.preventDefault();
|
|
439
|
+
// Вверх с первого пункта — обратно в поиск: иначе фокус упирается
|
|
440
|
+
// в потолок списка, а поле остаётся достижимым только мышью.
|
|
441
|
+
if (current <= 0 && searchable) searchRef.current?.focus();
|
|
442
|
+
else focusOption(current < 0 ? 0 : current - 1);
|
|
443
|
+
return;
|
|
444
|
+
case "Home":
|
|
445
|
+
case "End":
|
|
446
|
+
// В поле поиска это перемещение каретки по строке, а не по списку.
|
|
447
|
+
if (inSearch) return;
|
|
448
|
+
e.preventDefault();
|
|
449
|
+
focusOption(e.key === "Home" ? 0 : liveOptions().length - 1);
|
|
450
|
+
return;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
// Печать с пункта списка возвращает в поиск: пользователь, начавший
|
|
454
|
+
// набирать название, имеет в виду поиск, а не список.
|
|
455
|
+
//
|
|
456
|
+
// Пробел исключён намеренно — на кнопке это выбор пункта, и отдавать его
|
|
457
|
+
// поиску значило бы сломать штатный способ выбрать элемент с клавиатуры.
|
|
458
|
+
if (!searchable || inSearch || current < 0) return;
|
|
459
|
+
if (e.key === "Backspace") {
|
|
460
|
+
e.preventDefault();
|
|
461
|
+
setSearch((s) => s.slice(0, -1));
|
|
462
|
+
searchRef.current?.focus();
|
|
463
|
+
return;
|
|
464
|
+
}
|
|
465
|
+
if (e.key.length === 1 && e.key !== " " && !e.metaKey && !e.ctrlKey && !e.altKey) {
|
|
466
|
+
e.preventDefault();
|
|
467
|
+
setSearch((s) => s + e.key);
|
|
468
|
+
searchRef.current?.focus();
|
|
469
|
+
}
|
|
470
|
+
};
|
|
471
|
+
|
|
472
|
+
return (
|
|
473
|
+
<Popover
|
|
474
|
+
// `open && !disabled`, а не условный `onOpenChange`: выключение при
|
|
475
|
+
// открытой панели иначе заклинило бы её — и Escape, и клик снаружи идут
|
|
476
|
+
// через обработчик, а открыться заново мешает атрибут `disabled`.
|
|
477
|
+
open={open && !disabled}
|
|
478
|
+
onOpenChange={(v) => {
|
|
479
|
+
setOpen(v);
|
|
480
|
+
if (!v) setSearch("");
|
|
481
|
+
}}
|
|
482
|
+
>
|
|
483
|
+
{/*
|
|
484
|
+
Пилюля — внешний бокс, а кнопка внутри растянута на всю его площадь
|
|
485
|
+
через `after:inset-0`. Так решаются сразу три требования, которые иначе
|
|
486
|
+
конфликтуют:
|
|
487
|
+
|
|
488
|
+
1. Крестик обязан быть отдельной кнопкой — вложенная интерактивность
|
|
489
|
+
недопустима, а прежний `<span onClick>` внутри кнопки был вдобавок
|
|
490
|
+
недостижим с клавиатуры.
|
|
491
|
+
2. Кликается вся пилюля, включая отступы. Промежуточный вариант, где
|
|
492
|
+
кнопка была лишь внутренностью обёртки, оставлял 26px мёртвой зоны
|
|
493
|
+
под `cursor-pointer` — курсор обещал клик там, где его не было.
|
|
494
|
+
3. `triggerClassName` действует на том же боксе, что и до переноса:
|
|
495
|
+
потребитель шлёт вперемешку и раскладку (`w-full`, `min-w`), и вид
|
|
496
|
+
(`px-3`, `rounded-control`). Разложить это по двум элементам нечем,
|
|
497
|
+
поэтому строка целиком остаётся на пилюле. Когда она висела на
|
|
498
|
+
обёртке, а отступы были ещё и на кнопке, они складывались: на экране
|
|
499
|
+
кампаний контрол вырастал с 36 до 56 пикселей рядом с 36-пиксельными
|
|
500
|
+
соседями.
|
|
501
|
+
|
|
502
|
+
Кольцо фокуса рисуется на псевдоэлементе, а не на кнопке: обводить надо
|
|
503
|
+
пилюлю целиком, иначе она у`же собственного контура.
|
|
504
|
+
*/}
|
|
505
|
+
<span
|
|
506
|
+
className={cn(
|
|
507
|
+
"relative inline-flex items-center gap-2 rounded-full border px-3 py-[7px]",
|
|
508
|
+
// `leading-5` задаёт высоту, а не наследует её: строчный бокс в 20px
|
|
509
|
+
// плюс отступы дают ровно 36 — рост `Button` размера `md`, рядом с
|
|
510
|
+
// которым пилюля и стоит в панели фильтров. С отступами формы
|
|
511
|
+
// (`py-2.5` от потребителя) те же 20 дают 42 — рост `TextControl`
|
|
512
|
+
// и `NumberInput` (см. `lib/field.ts`).
|
|
513
|
+
//
|
|
514
|
+
// Картинка выбранного значения тоже 20, и это условие, а не совпадение:
|
|
515
|
+
// содержимое выше строчного бокса растягивало бы триггер. Пока она
|
|
516
|
+
// была 22, пилюля с картинкой вырастала до 38, а триггер формы — до 44,
|
|
517
|
+
// и контрол расходился и с соседним полем, и сам с собой в пустом
|
|
518
|
+
// состоянии.
|
|
519
|
+
// `transition-colors`, а не `transition-all`: на этом боксе меняются
|
|
520
|
+
// только рамка, фон и цвет подписи — по ветке `hasSelection`. `all`
|
|
521
|
+
// обещал переход всему, чего на пилюле нет, и заодно тому, что
|
|
522
|
+
// потребитель пришлёт через `triggerClassName`. Заменено в волне 27
|
|
523
|
+
// при ревизии движения: класс выглядел перемещающим, а перемещать
|
|
524
|
+
// здесь нечего.
|
|
525
|
+
"text-[13px] leading-5 font-semibold transition-colors",
|
|
526
|
+
hasSelection && highlightSelected
|
|
527
|
+
? "border-accent-strong bg-accent-soft text-fg-0"
|
|
528
|
+
: "border-line-soft text-fg-1 hover:border-line hover:bg-bg-2 bg-transparent",
|
|
529
|
+
// Выбранное значение читается тёмным даже без акцентной подсветки:
|
|
530
|
+
// подпись — это содержимое контрола, а не подсказка.
|
|
531
|
+
hasSelection && !highlightSelected && "text-fg-0",
|
|
532
|
+
// Гаснет ПИЛЮЛЯ, а не кнопка внутри неё: рамка и фон нарисованы здесь,
|
|
533
|
+
// и приглушённая подпись рядом с яркой рамкой выглядела бы сбоем
|
|
534
|
+
// отрисовки, а не выключенным полем.
|
|
535
|
+
disabled && "cursor-not-allowed opacity-50",
|
|
536
|
+
triggerClassName
|
|
537
|
+
)}
|
|
538
|
+
>
|
|
539
|
+
{/*
|
|
540
|
+
Подпись видна только скринридеру и стоит ВНЕ кнопки: внутри неё она
|
|
541
|
+
попала бы в содержимое, то есть прочиталась бы дважды — один раз как
|
|
542
|
+
имя, второй как значение.
|
|
543
|
+
|
|
544
|
+
`elementType="span"`: по умолчанию react-aria рисует `<div>`, а здесь
|
|
545
|
+
он оказался бы внутри строчной пилюли.
|
|
546
|
+
*/}
|
|
547
|
+
{ariaLabel && !ariaLabelledBy ? (
|
|
548
|
+
<VisuallyHidden elementType="span" id={labelId}>
|
|
549
|
+
{ariaLabel}
|
|
550
|
+
</VisuallyHidden>
|
|
551
|
+
) : null}
|
|
552
|
+
|
|
553
|
+
<PopoverTrigger asChild>
|
|
554
|
+
<button
|
|
555
|
+
type="button"
|
|
556
|
+
disabled={disabled}
|
|
557
|
+
aria-haspopup="listbox"
|
|
558
|
+
aria-expanded={open && !disabled}
|
|
559
|
+
aria-labelledby={labelledBy ? `${labelledBy} ${valueId}` : undefined}
|
|
560
|
+
aria-describedby={describedBy}
|
|
561
|
+
className={cn(
|
|
562
|
+
// `grow` + `justify-between`: когда потребитель растягивает пилюлю
|
|
563
|
+
// (`w-full`, `min-w`), кнопка занимает всю ширину, и его
|
|
564
|
+
// `justify-between` разводит иконку и подпись — как было до выноса.
|
|
565
|
+
// На пилюле по размеру содержимого свободного места нет, и оба
|
|
566
|
+
// класса ничего не меняют.
|
|
567
|
+
"inline-flex min-w-0 grow cursor-pointer items-center justify-between gap-2 text-left",
|
|
568
|
+
"disabled:cursor-not-allowed",
|
|
569
|
+
"after:absolute after:inset-0 after:rounded-[inherit]",
|
|
570
|
+
"focus-visible:after:outline-accent-strong focus-visible:after:outline-2 focus-visible:after:outline-offset-2",
|
|
571
|
+
// Место под крестик — на кнопке, а не на пилюле: пилюля уже несёт
|
|
572
|
+
// отступы потребителя, и добавка к ним сместила бы рамку.
|
|
573
|
+
hasSelection && clearable && !disabled && "pr-6"
|
|
574
|
+
)}
|
|
575
|
+
>
|
|
576
|
+
{/*
|
|
577
|
+
Содержимое собрано в одну группу, а не выложено соседями кнопки.
|
|
578
|
+
Иначе `justify-between` разводит по краям именно их: в пилюле по
|
|
579
|
+
ширине содержимого это незаметно, а в широком триггере (`w-full`
|
|
580
|
+
в форме) картинка прилипает к левому краю, подпись — к правому,
|
|
581
|
+
и между ними дыра во всю строку.
|
|
582
|
+
*/}
|
|
583
|
+
{selected ? (
|
|
584
|
+
<span id={valueId} className="inline-flex min-w-0 items-center gap-2">
|
|
585
|
+
{renderMedia?.(selected, 20)}
|
|
586
|
+
{/*
|
|
587
|
+
Ширина подписи ограничена переменной, а не жёстким числом.
|
|
588
|
+
В пилюле фильтра предел нужен: она растёт по содержимому, и
|
|
589
|
+
«Абстрактные градиенты» растолкали бы соседние фильтры. В
|
|
590
|
+
широком триггере формы (`w-full`) он, наоборот, врёт — там
|
|
591
|
+
место есть, а подпись всё равно резалась на 110 пикселях.
|
|
592
|
+
Снимается это классом на триггере:
|
|
593
|
+
`triggerClassName="[--select-label-max:none]"`.
|
|
594
|
+
*/}
|
|
595
|
+
<span className={LABEL_CLASS}>{selected.label}</span>
|
|
596
|
+
</span>
|
|
597
|
+
) : hasSelection && props.multiple ? (
|
|
598
|
+
/*
|
|
599
|
+
Счётчик — СТРОГО за множественным выбором.
|
|
600
|
+
|
|
601
|
+
Ветка ловила и одиночный `Select`, у которого значение есть, а
|
|
602
|
+
элемента для него в `items` не нашлось: значение пришло из
|
|
603
|
+
адреса, пока список грузится, или указывает на удалённую запись.
|
|
604
|
+
Триггер показывал «Категория: 1» — счётчик там, где считать
|
|
605
|
+
нечего. Одиночный случай уходит теперь в ветку ниже и
|
|
606
|
+
показывает сам ключ, как это делает `captionOf` в `TreeSelect`.
|
|
607
|
+
*/
|
|
608
|
+
<span id={valueId} className={LABEL_CLASS}>
|
|
609
|
+
{countLabel
|
|
610
|
+
? countLabel(selectedIds.length)
|
|
611
|
+
: `${placeholder}: ${selectedIds.length}`}
|
|
612
|
+
</span>
|
|
613
|
+
) : hasSelection ? (
|
|
614
|
+
/*
|
|
615
|
+
Одиночный выбор, которому не нашлось элемента.
|
|
616
|
+
|
|
617
|
+
Ключ ЧЕСТНЕЕ плейсхолдера, когда он человекочитаем
|
|
618
|
+
(`section-contracts`), и хуже него, когда это UUID: пользователь
|
|
619
|
+
видит `9f2c1b04-…` там, где ждал подпись. Решает это
|
|
620
|
+
потребитель — он один знает, как выглядят его идентификаторы, —
|
|
621
|
+
поэтому подпись отсутствующего значения берётся пропом, а по
|
|
622
|
+
умолчанию показывается ключ, как это делает `captionOf` в
|
|
623
|
+
`TreeSelect`.
|
|
624
|
+
*/
|
|
625
|
+
<span id={valueId} className={LABEL_CLASS}>
|
|
626
|
+
{missingLabel ? missingLabel(selectedIds[0]!) : selectedIds[0]}
|
|
627
|
+
</span>
|
|
628
|
+
) : (
|
|
629
|
+
/*
|
|
630
|
+
`id` значения стоит на КОРНЕ КАЖДОЙ ветки, а не на общей обёртке
|
|
631
|
+
вокруг них: обёртка — лишний бокс во флексе триггера, и она
|
|
632
|
+
сместила бы содержимое там, где менять его никто не просил.
|
|
633
|
+
*/
|
|
634
|
+
<span id={valueId} className="inline-flex min-w-0 items-center gap-2">
|
|
635
|
+
<span aria-hidden className="inline-flex shrink-0 items-center opacity-60">
|
|
636
|
+
{icon ?? <SelectIcon size={14} />}
|
|
637
|
+
</span>
|
|
638
|
+
<span className="truncate">{placeholder}</span>
|
|
639
|
+
</span>
|
|
640
|
+
)}
|
|
641
|
+
</button>
|
|
642
|
+
</PopoverTrigger>
|
|
643
|
+
|
|
644
|
+
{hasSelection && clearable && !disabled ? (
|
|
645
|
+
<button
|
|
646
|
+
type="button"
|
|
647
|
+
aria-label={clearLabel ?? messages.common.clear}
|
|
648
|
+
onClick={clear}
|
|
649
|
+
className={FIELD_CLEAR_CLASS}
|
|
650
|
+
>
|
|
651
|
+
<CloseIcon size={10} aria-hidden />
|
|
652
|
+
</button>
|
|
653
|
+
) : null}
|
|
654
|
+
</span>
|
|
655
|
+
|
|
656
|
+
<PopoverContent
|
|
657
|
+
className={cn("w-[260px]", contentClassName)}
|
|
658
|
+
align="start"
|
|
659
|
+
onKeyDown={onPanelKeyDown}
|
|
660
|
+
>
|
|
661
|
+
{searchable ? (
|
|
662
|
+
<div className="border-line-soft border-b px-3 py-2">
|
|
663
|
+
<div className="border-line-soft bg-bg-2 focus-within:border-accent-strong flex items-center gap-2 rounded-sm border px-3 py-2 transition-[border-color,box-shadow] focus-within:ring-[3px] focus-within:ring-[color:var(--focus-ring)]">
|
|
664
|
+
<input
|
|
665
|
+
ref={searchRef}
|
|
666
|
+
type="text"
|
|
667
|
+
// Панель уже обведена рамкой фокуса — второй контур внутри неё лишний.
|
|
668
|
+
data-disable-focus-ring="true"
|
|
669
|
+
aria-label={searchPlaceholder ?? messages.common.searchPlaceholder}
|
|
670
|
+
placeholder={searchPlaceholder ?? messages.common.searchPlaceholder}
|
|
671
|
+
value={search}
|
|
672
|
+
onChange={(e) => setSearch(e.target.value)}
|
|
673
|
+
className="text-fg-0 placeholder:text-fg-2 w-full border-none bg-transparent text-[13px] outline-none"
|
|
674
|
+
autoFocus
|
|
675
|
+
/>
|
|
676
|
+
</div>
|
|
677
|
+
</div>
|
|
678
|
+
) : null}
|
|
679
|
+
|
|
680
|
+
<div
|
|
681
|
+
role="listbox"
|
|
682
|
+
aria-multiselectable={props.multiple ? true : undefined}
|
|
683
|
+
className="max-h-[280px] overflow-y-auto p-1"
|
|
684
|
+
>
|
|
685
|
+
{filtered.length === 0 ? (
|
|
686
|
+
<div className="text-fg-2 px-3 py-4 text-center text-[13px]">
|
|
687
|
+
{search
|
|
688
|
+
? (notFoundText ?? messages.common.notFound)
|
|
689
|
+
: (emptyText ?? messages.common.empty)}
|
|
690
|
+
</div>
|
|
691
|
+
) : (
|
|
692
|
+
filtered.map((item, index) => {
|
|
693
|
+
const isSelected = selectedSet.has(String(item.id));
|
|
694
|
+
return (
|
|
695
|
+
<button
|
|
696
|
+
key={item.id}
|
|
697
|
+
ref={(el) => {
|
|
698
|
+
optionRefs.current[index] = el;
|
|
699
|
+
}}
|
|
700
|
+
type="button"
|
|
701
|
+
role="option"
|
|
702
|
+
aria-selected={isSelected}
|
|
703
|
+
onClick={() => select(item)}
|
|
704
|
+
/*
|
|
705
|
+
`data-selected` — чтобы ОБЩАЯ строка списка работала и здесь.
|
|
706
|
+
|
|
707
|
+
Вариант `selected:` плагина разворачивается в `[data-selected]`
|
|
708
|
+
без требования `data-rac` (у `selected` нет нативного
|
|
709
|
+
соответствия), поэтому его хватает и обычной кнопке. Так
|
|
710
|
+
строка `Select` наконец красится тем же, чем `Combobox`,
|
|
711
|
+
`CommandPalette` и `Transfer`: свой набор расходился с ними
|
|
712
|
+
и отступом (`py-[9px]` против `py-1.5`), и цветом выбора
|
|
713
|
+
(`bg-bg-3` против `selected:bg-accent-soft`) — списки кита,
|
|
714
|
+
поставленные рядом, различались и высотой строки, и тем, как
|
|
715
|
+
выглядит выбранное.
|
|
716
|
+
*/
|
|
717
|
+
data-selected={isSelected || undefined}
|
|
718
|
+
className={cn(
|
|
719
|
+
LISTBOX_ITEM_CLASS,
|
|
720
|
+
// Своё остаётся только то, что не про вид строки списка:
|
|
721
|
+
// кнопка во всю ширину, зазор под медиа-слот и кольцо фокуса.
|
|
722
|
+
"w-full gap-[10px] text-left transition-colors",
|
|
723
|
+
"focus-visible:outline-accent-strong focus-visible:outline-2 focus-visible:-outline-offset-2"
|
|
724
|
+
)}
|
|
725
|
+
>
|
|
726
|
+
{renderMedia?.(item, 28)}
|
|
727
|
+
<span className="flex-1 truncate font-medium">{item.label}</span>
|
|
728
|
+
{isSelected ? (
|
|
729
|
+
<CheckIcon size={14} aria-hidden className="text-accent-strong shrink-0" />
|
|
730
|
+
) : (
|
|
731
|
+
<span className="text-fg-2 font-mono tabular-nums">{item.meta}</span>
|
|
732
|
+
)}
|
|
733
|
+
</button>
|
|
734
|
+
);
|
|
735
|
+
})
|
|
736
|
+
)}
|
|
737
|
+
</div>
|
|
738
|
+
</PopoverContent>
|
|
739
|
+
</Popover>
|
|
740
|
+
);
|
|
741
|
+
}
|