@orcestr/ui 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +151 -0
- package/README.ru.md +151 -0
- package/assets/orcestr-banner.webp +0 -0
- package/dist/components/Action/ActionConfirmModal.d.ts +8 -0
- package/dist/components/Action/ActionConfirmModal.d.ts.map +1 -0
- package/dist/components/Action/ActionConfirmModal.js +13 -0
- package/dist/components/Action/ActionTypes.d.ts +47 -0
- package/dist/components/Action/ActionTypes.d.ts.map +1 -0
- package/dist/components/Action/ActionTypes.js +49 -0
- package/dist/components/ActionMenu/ActionMenu.d.ts +3 -0
- package/dist/components/ActionMenu/ActionMenu.d.ts.map +1 -0
- package/dist/components/ActionMenu/ActionMenu.js +1 -0
- package/dist/components/Alert/Alert.d.ts +11 -0
- package/dist/components/Alert/Alert.d.ts.map +1 -0
- package/dist/components/Alert/Alert.js +7 -0
- package/dist/components/AppShell/AppShell.d.ts +102 -0
- package/dist/components/AppShell/AppShell.d.ts.map +1 -0
- package/dist/components/AppShell/AppShell.js +96 -0
- package/dist/components/Badge/Badge.d.ts +15 -0
- package/dist/components/Badge/Badge.d.ts.map +1 -0
- package/dist/components/Badge/Badge.js +8 -0
- package/dist/components/Box/Box.d.ts +11 -0
- package/dist/components/Box/Box.d.ts.map +1 -0
- package/dist/components/Box/Box.js +8 -0
- package/dist/components/Button/Button.d.ts +27 -0
- package/dist/components/Button/Button.d.ts.map +1 -0
- package/dist/components/Button/Button.js +13 -0
- package/dist/components/Checkbox/Checkbox.d.ts +10 -0
- package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
- package/dist/components/Checkbox/Checkbox.js +15 -0
- package/dist/components/Collapse/Collapse.d.ts +11 -0
- package/dist/components/Collapse/Collapse.d.ts.map +1 -0
- package/dist/components/Collapse/Collapse.js +33 -0
- package/dist/components/Combobox/Combobox.d.ts +17 -0
- package/dist/components/Combobox/Combobox.d.ts.map +1 -0
- package/dist/components/Combobox/Combobox.js +32 -0
- package/dist/components/CommandPalette/CommandPalette.d.ts +21 -0
- package/dist/components/CommandPalette/CommandPalette.d.ts.map +1 -0
- package/dist/components/CommandPalette/CommandPalette.js +168 -0
- package/dist/components/ConfirmDialog/ConfirmDialog.d.ts +25 -0
- package/dist/components/ConfirmDialog/ConfirmDialog.d.ts.map +1 -0
- package/dist/components/ConfirmDialog/ConfirmDialog.js +25 -0
- package/dist/components/ContextMenu/ContextMenu.d.ts +11 -0
- package/dist/components/ContextMenu/ContextMenu.d.ts.map +1 -0
- package/dist/components/ContextMenu/ContextMenu.js +68 -0
- package/dist/components/DataTable/DataTable.d.ts +88 -0
- package/dist/components/DataTable/DataTable.d.ts.map +1 -0
- package/dist/components/DataTable/DataTable.js +415 -0
- package/dist/components/DataTable/DataTableStateAdapters.d.ts +41 -0
- package/dist/components/DataTable/DataTableStateAdapters.d.ts.map +1 -0
- package/dist/components/DataTable/DataTableStateAdapters.js +192 -0
- package/dist/components/DatePicker/DatePicker.d.ts +21 -0
- package/dist/components/DatePicker/DatePicker.d.ts.map +1 -0
- package/dist/components/DatePicker/DatePicker.js +39 -0
- package/dist/components/DatePicker/DatePickerState.d.ts +30 -0
- package/dist/components/DatePicker/DatePickerState.d.ts.map +1 -0
- package/dist/components/DatePicker/DatePickerState.js +106 -0
- package/dist/components/DateRangePicker/DateRangePicker.d.ts +19 -0
- package/dist/components/DateRangePicker/DateRangePicker.d.ts.map +1 -0
- package/dist/components/DateRangePicker/DateRangePicker.js +6 -0
- package/dist/components/DateRangePresetPicker/DateRangePresetPicker.d.ts +10 -0
- package/dist/components/DateRangePresetPicker/DateRangePresetPicker.d.ts.map +1 -0
- package/dist/components/DateRangePresetPicker/DateRangePresetPicker.js +26 -0
- package/dist/components/DateRangePresetPicker/DateRangePresetPickerState.d.ts +4 -0
- package/dist/components/DateRangePresetPicker/DateRangePresetPickerState.d.ts.map +1 -0
- package/dist/components/DateRangePresetPicker/DateRangePresetPickerState.js +20 -0
- package/dist/components/Dialog/Dialog.d.ts +2 -0
- package/dist/components/Dialog/Dialog.d.ts.map +1 -0
- package/dist/components/Dialog/Dialog.js +1 -0
- package/dist/components/Drawer/Drawer.d.ts +30 -0
- package/dist/components/Drawer/Drawer.d.ts.map +1 -0
- package/dist/components/Drawer/Drawer.js +83 -0
- package/dist/components/EntityPicker/EntityPicker.d.ts +41 -0
- package/dist/components/EntityPicker/EntityPicker.d.ts.map +1 -0
- package/dist/components/EntityPicker/EntityPicker.js +17 -0
- package/dist/components/Field/Field.d.ts +12 -0
- package/dist/components/Field/Field.d.ts.map +1 -0
- package/dist/components/Field/Field.js +8 -0
- package/dist/components/Flex/Flex.d.ts +9 -0
- package/dist/components/Flex/Flex.d.ts.map +1 -0
- package/dist/components/Flex/Flex.js +8 -0
- package/dist/components/Grid/Grid.d.ts +11 -0
- package/dist/components/Grid/Grid.d.ts.map +1 -0
- package/dist/components/Grid/Grid.js +12 -0
- package/dist/components/Highlight/Highlight.d.ts +27 -0
- package/dist/components/Highlight/Highlight.d.ts.map +1 -0
- package/dist/components/Highlight/Highlight.js +26 -0
- package/dist/components/IconButton/IconButton.d.ts +25 -0
- package/dist/components/IconButton/IconButton.d.ts.map +1 -0
- package/dist/components/IconButton/IconButton.js +13 -0
- package/dist/components/IconText/IconText.d.ts +12 -0
- package/dist/components/IconText/IconText.d.ts.map +1 -0
- package/dist/components/IconText/IconText.js +7 -0
- package/dist/components/Listbox/Listbox.d.ts +13 -0
- package/dist/components/Listbox/Listbox.d.ts.map +1 -0
- package/dist/components/Listbox/Listbox.js +74 -0
- package/dist/components/Menu/Menu.d.ts +14 -0
- package/dist/components/Menu/Menu.d.ts.map +1 -0
- package/dist/components/Menu/Menu.js +168 -0
- package/dist/components/Modal/Modal.d.ts +29 -0
- package/dist/components/Modal/Modal.d.ts.map +1 -0
- package/dist/components/Modal/Modal.js +155 -0
- package/dist/components/MultiSelect/MultiSelect.d.ts +21 -0
- package/dist/components/MultiSelect/MultiSelect.d.ts.map +1 -0
- package/dist/components/MultiSelect/MultiSelect.js +139 -0
- package/dist/components/NumberField/NumberField.d.ts +4 -0
- package/dist/components/NumberField/NumberField.d.ts.map +1 -0
- package/dist/components/NumberField/NumberField.js +6 -0
- package/dist/components/Overlay/OverlayProvider.d.ts +19 -0
- package/dist/components/Overlay/OverlayProvider.d.ts.map +1 -0
- package/dist/components/Overlay/OverlayProvider.js +73 -0
- package/dist/components/PaginatedCombobox/PaginatedCombobox.d.ts +48 -0
- package/dist/components/PaginatedCombobox/PaginatedCombobox.d.ts.map +1 -0
- package/dist/components/PaginatedCombobox/PaginatedCombobox.js +223 -0
- package/dist/components/PaginatedCombobox/PaginatedComboboxReactQueryAdapter.d.ts +13 -0
- package/dist/components/PaginatedCombobox/PaginatedComboboxReactQueryAdapter.d.ts.map +1 -0
- package/dist/components/PaginatedCombobox/PaginatedComboboxReactQueryAdapter.js +10 -0
- package/dist/components/Pagination/Pagination.d.ts +7 -0
- package/dist/components/Pagination/Pagination.d.ts.map +1 -0
- package/dist/components/Pagination/Pagination.js +9 -0
- package/dist/components/Popover/Popover.d.ts +19 -0
- package/dist/components/Popover/Popover.d.ts.map +1 -0
- package/dist/components/Popover/Popover.js +83 -0
- package/dist/components/Portal/Portal.d.ts +6 -0
- package/dist/components/Portal/Portal.d.ts.map +1 -0
- package/dist/components/Portal/Portal.js +23 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts +14 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts.map +1 -0
- package/dist/components/RadioGroup/RadioGroup.js +6 -0
- package/dist/components/ScrollArea/ScrollArea.d.ts +36 -0
- package/dist/components/ScrollArea/ScrollArea.d.ts.map +1 -0
- package/dist/components/ScrollArea/ScrollArea.js +124 -0
- package/dist/components/Section/Section.d.ts +14 -0
- package/dist/components/Section/Section.d.ts.map +1 -0
- package/dist/components/Section/Section.js +20 -0
- package/dist/components/SegmentedControl/SegmentedControl.d.ts +13 -0
- package/dist/components/SegmentedControl/SegmentedControl.d.ts.map +1 -0
- package/dist/components/SegmentedControl/SegmentedControl.js +6 -0
- package/dist/components/Select/Select.d.ts +27 -0
- package/dist/components/Select/Select.d.ts.map +1 -0
- package/dist/components/Select/Select.js +142 -0
- package/dist/components/Separator/Separator.d.ts +6 -0
- package/dist/components/Separator/Separator.d.ts.map +1 -0
- package/dist/components/Separator/Separator.js +5 -0
- package/dist/components/Skeleton/Skeleton.d.ts +9 -0
- package/dist/components/Skeleton/Skeleton.d.ts.map +1 -0
- package/dist/components/Skeleton/Skeleton.js +8 -0
- package/dist/components/Spinner/Spinner.d.ts +7 -0
- package/dist/components/Spinner/Spinner.d.ts.map +1 -0
- package/dist/components/Spinner/Spinner.js +5 -0
- package/dist/components/Stack/Stack.d.ts +9 -0
- package/dist/components/Stack/Stack.d.ts.map +1 -0
- package/dist/components/Stack/Stack.js +7 -0
- package/dist/components/State/State.d.ts +23 -0
- package/dist/components/State/State.d.ts.map +1 -0
- package/dist/components/State/State.js +30 -0
- package/dist/components/State/stateIcon.d.ts +3 -0
- package/dist/components/State/stateIcon.d.ts.map +1 -0
- package/dist/components/State/stateIcon.js +11 -0
- package/dist/components/StepperInput/StepperInput.d.ts +13 -0
- package/dist/components/StepperInput/StepperInput.d.ts.map +1 -0
- package/dist/components/StepperInput/StepperInput.js +22 -0
- package/dist/components/Switch/Switch.d.ts +10 -0
- package/dist/components/Switch/Switch.d.ts.map +1 -0
- package/dist/components/Switch/Switch.js +14 -0
- package/dist/components/Tabs/Tabs.d.ts +18 -0
- package/dist/components/Tabs/Tabs.d.ts.map +1 -0
- package/dist/components/Tabs/Tabs.js +104 -0
- package/dist/components/Text/Text.d.ts +13 -0
- package/dist/components/Text/Text.d.ts.map +1 -0
- package/dist/components/Text/Text.js +8 -0
- package/dist/components/TextArea/TextArea.d.ts +15 -0
- package/dist/components/TextArea/TextArea.d.ts.map +1 -0
- package/dist/components/TextArea/TextArea.js +17 -0
- package/dist/components/TextField/TextField.d.ts +25 -0
- package/dist/components/TextField/TextField.d.ts.map +1 -0
- package/dist/components/TextField/TextField.js +31 -0
- package/dist/components/Toast/Toast.d.ts +43 -0
- package/dist/components/Toast/Toast.d.ts.map +1 -0
- package/dist/components/Toast/Toast.js +205 -0
- package/dist/components/Tooltip/Tooltip.d.ts +10 -0
- package/dist/components/Tooltip/Tooltip.d.ts.map +1 -0
- package/dist/components/Tooltip/Tooltip.js +24 -0
- package/dist/components/VisuallyHidden/VisuallyHidden.d.ts +8 -0
- package/dist/components/VisuallyHidden/VisuallyHidden.d.ts.map +1 -0
- package/dist/components/VisuallyHidden/VisuallyHidden.js +6 -0
- package/dist/components/Workflow/Workflow.d.ts +82 -0
- package/dist/components/Workflow/Workflow.d.ts.map +1 -0
- package/dist/components/Workflow/Workflow.js +73 -0
- package/dist/example/CodePreview.d.ts +25 -0
- package/dist/example/CodePreview.d.ts.map +1 -0
- package/dist/example/CodePreview.js +93 -0
- package/dist/example/ExampleActionsSection.d.ts +10 -0
- package/dist/example/ExampleActionsSection.d.ts.map +1 -0
- package/dist/example/ExampleActionsSection.js +10 -0
- package/dist/example/ExampleBasicsSections.d.ts +8 -0
- package/dist/example/ExampleBasicsSections.d.ts.map +1 -0
- package/dist/example/ExampleBasicsSections.js +43 -0
- package/dist/example/ExampleDataSection.d.ts +7 -0
- package/dist/example/ExampleDataSection.d.ts.map +1 -0
- package/dist/example/ExampleDataSection.js +124 -0
- package/dist/example/ExampleFieldsSection.d.ts +17 -0
- package/dist/example/ExampleFieldsSection.d.ts.map +1 -0
- package/dist/example/ExampleFieldsSection.js +10 -0
- package/dist/example/ExampleFoundationsSection.d.ts +5 -0
- package/dist/example/ExampleFoundationsSection.d.ts.map +1 -0
- package/dist/example/ExampleFoundationsSection.js +25 -0
- package/dist/example/ExampleOverlays.d.ts +30 -0
- package/dist/example/ExampleOverlays.d.ts.map +1 -0
- package/dist/example/ExampleOverlays.js +12 -0
- package/dist/example/ExampleOverlaysSection.d.ts +14 -0
- package/dist/example/ExampleOverlaysSection.d.ts.map +1 -0
- package/dist/example/ExampleOverlaysSection.js +126 -0
- package/dist/example/ExampleSelectionSection.d.ts +30 -0
- package/dist/example/ExampleSelectionSection.d.ts.map +1 -0
- package/dist/example/ExampleSelectionSection.js +66 -0
- package/dist/example/ExampleStateSection.d.ts +8 -0
- package/dist/example/ExampleStateSection.d.ts.map +1 -0
- package/dist/example/ExampleStateSection.js +76 -0
- package/dist/example/ExampleThemePlayground.d.ts +417 -0
- package/dist/example/ExampleThemePlayground.d.ts.map +1 -0
- package/dist/example/ExampleThemePlayground.js +596 -0
- package/dist/example/UiExamplePage.d.ts +2 -0
- package/dist/example/UiExamplePage.d.ts.map +1 -0
- package/dist/example/UiExamplePage.js +315 -0
- package/dist/example/UiExampleSection.d.ts +8 -0
- package/dist/example/UiExampleSection.d.ts.map +1 -0
- package/dist/example/UiExampleSection.js +5 -0
- package/dist/example/codeSamples.d.ts +30 -0
- package/dist/example/codeSamples.d.ts.map +1 -0
- package/dist/example/codeSamples.js +976 -0
- package/dist/example/exampleData.d.ts +33 -0
- package/dist/example/exampleData.d.ts.map +1 -0
- package/dist/example/exampleData.js +217 -0
- package/dist/example/styles.css +1106 -0
- package/dist/hooks/useControllableState.d.ts +6 -0
- package/dist/hooks/useControllableState.d.ts.map +1 -0
- package/dist/hooks/useControllableState.js +16 -0
- package/dist/hooks/useDisclosure.d.ts +12 -0
- package/dist/hooks/useDisclosure.d.ts.map +1 -0
- package/dist/hooks/useDisclosure.js +14 -0
- package/dist/hooks/useEscapeKey.d.ts +2 -0
- package/dist/hooks/useEscapeKey.d.ts.map +1 -0
- package/dist/hooks/useEscapeKey.js +15 -0
- package/dist/hooks/useFloatingLayer.d.ts +19 -0
- package/dist/hooks/useFloatingLayer.d.ts.map +1 -0
- package/dist/hooks/useFloatingLayer.js +26 -0
- package/dist/hooks/useFloatingPosition.d.ts +17 -0
- package/dist/hooks/useFloatingPosition.d.ts.map +1 -0
- package/dist/hooks/useFloatingPosition.js +132 -0
- package/dist/hooks/useFocusTrap.d.ts +3 -0
- package/dist/hooks/useFocusTrap.d.ts.map +1 -0
- package/dist/hooks/useFocusTrap.js +54 -0
- package/dist/hooks/useListNavigation.d.ts +17 -0
- package/dist/hooks/useListNavigation.d.ts.map +1 -0
- package/dist/hooks/useListNavigation.js +44 -0
- package/dist/hooks/useOutsidePointerDown.d.ts +3 -0
- package/dist/hooks/useOutsidePointerDown.d.ts.map +1 -0
- package/dist/hooks/useOutsidePointerDown.js +20 -0
- package/dist/hooks/usePresence.d.ts +5 -0
- package/dist/hooks/usePresence.d.ts.map +1 -0
- package/dist/hooks/usePresence.js +35 -0
- package/dist/hooks/useTypeahead.d.ts +2 -0
- package/dist/hooks/useTypeahead.d.ts.map +1 -0
- package/dist/hooks/useTypeahead.js +23 -0
- package/dist/index.d.ts +64 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64 -0
- package/dist/locale/LocaleProvider.d.ts +89 -0
- package/dist/locale/LocaleProvider.d.ts.map +1 -0
- package/dist/locale/LocaleProvider.js +174 -0
- package/dist/provider/OrcestrUiProvider.d.ts +28 -0
- package/dist/provider/OrcestrUiProvider.d.ts.map +1 -0
- package/dist/provider/OrcestrUiProvider.js +9 -0
- package/dist/react-query.d.ts +2 -0
- package/dist/react-query.d.ts.map +1 -0
- package/dist/react-query.js +1 -0
- package/dist/styles/orcestr-ui.css +4676 -0
- package/dist/theme/ThemeProvider.d.ts +3 -0
- package/dist/theme/ThemeProvider.d.ts.map +1 -0
- package/dist/theme/ThemeProvider.js +280 -0
- package/dist/theme/defaultTheme.d.ts +12 -0
- package/dist/theme/defaultTheme.d.ts.map +1 -0
- package/dist/theme/defaultTheme.js +516 -0
- package/dist/theme/systemProps.d.ts +53 -0
- package/dist/theme/systemProps.d.ts.map +1 -0
- package/dist/theme/systemProps.js +240 -0
- package/dist/theme/themeTypes.d.ts +197 -0
- package/dist/theme/themeTypes.d.ts.map +1 -0
- package/dist/theme/themeTypes.js +1 -0
- package/dist/theme/useTheme.d.ts +4 -0
- package/dist/theme/useTheme.d.ts.map +1 -0
- package/dist/theme/useTheme.js +10 -0
- package/dist/utils/cn.d.ts +2 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/dist/utils/cn.js +3 -0
- package/dist/utils/composeRefs.d.ts +3 -0
- package/dist/utils/composeRefs.d.ts.map +1 -0
- package/dist/utils/composeRefs.js +14 -0
- package/dist/utils/mergeProps.d.ts +4 -0
- package/dist/utils/mergeProps.d.ts.map +1 -0
- package/dist/utils/mergeProps.js +26 -0
- package/dist/utils/ownerDocument.d.ts +2 -0
- package/dist/utils/ownerDocument.d.ts.map +1 -0
- package/dist/utils/ownerDocument.js +3 -0
- package/dist/utils/polymorphic.d.ts +6 -0
- package/dist/utils/polymorphic.d.ts.map +1 -0
- package/dist/utils/polymorphic.js +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useControllableState.d.ts","sourceRoot":"","sources":["../../src/hooks/useControllableState.ts"],"names":[],"mappings":"AAIA,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,EACpC,KAAK,EACL,YAAY,EACZ,QAAQ,GACX,EAAE;IACC,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,YAAY,EAAE,CAAC,CAAC;IAChB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;CACjC,uBAMc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC,WAYrC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useCallback, useState } from 'react';
|
|
3
|
+
export function useControllableState({ value, defaultValue, onChange, }) {
|
|
4
|
+
const [internalValue, setInternalValue] = useState(defaultValue);
|
|
5
|
+
const isControlled = value !== undefined;
|
|
6
|
+
const currentValue = isControlled ? value : internalValue;
|
|
7
|
+
const setValue = useCallback((next) => {
|
|
8
|
+
const actual = typeof next === 'function'
|
|
9
|
+
? next(currentValue)
|
|
10
|
+
: next;
|
|
11
|
+
if (!isControlled)
|
|
12
|
+
setInternalValue(actual);
|
|
13
|
+
onChange?.(actual);
|
|
14
|
+
}, [currentValue, isControlled, onChange]);
|
|
15
|
+
return [currentValue, setValue];
|
|
16
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare function useDisclosure({ open, defaultOpen, onOpenChange, }?: {
|
|
2
|
+
open?: boolean;
|
|
3
|
+
defaultOpen?: boolean;
|
|
4
|
+
onOpenChange?: (open: boolean) => void;
|
|
5
|
+
}): {
|
|
6
|
+
open: boolean;
|
|
7
|
+
setOpen: (next: boolean | ((current: boolean) => boolean)) => void;
|
|
8
|
+
close: () => void;
|
|
9
|
+
openLayer: () => void;
|
|
10
|
+
toggle: () => void;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=useDisclosure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDisclosure.d.ts","sourceRoot":"","sources":["../../src/hooks/useDisclosure.ts"],"names":[],"mappings":"AAMA,wBAAgB,aAAa,CAAC,EAC1B,IAAI,EACJ,WAAmB,EACnB,YAAY,GACf,GAAE;IACC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACrC;;;;;;EAWL"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useCallback } from 'react';
|
|
3
|
+
import { useControllableState } from './useControllableState';
|
|
4
|
+
export function useDisclosure({ open, defaultOpen = false, onOpenChange, } = {}) {
|
|
5
|
+
const [isOpen, setIsOpen] = useControllableState({
|
|
6
|
+
value: open,
|
|
7
|
+
defaultValue: defaultOpen,
|
|
8
|
+
onChange: onOpenChange,
|
|
9
|
+
});
|
|
10
|
+
const close = useCallback(() => setIsOpen(false), [setIsOpen]);
|
|
11
|
+
const openLayer = useCallback(() => setIsOpen(true), [setIsOpen]);
|
|
12
|
+
const toggle = useCallback(() => setIsOpen((current) => !current), [setIsOpen]);
|
|
13
|
+
return { open: isOpen, setOpen: setIsOpen, close, openLayer, toggle };
|
|
14
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useEscapeKey.d.ts","sourceRoot":"","sources":["../../src/hooks/useEscapeKey.ts"],"names":[],"mappings":"AAIA,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,QAUlE"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEffect } from 'react';
|
|
3
|
+
export function useEscapeKey(enabled, onEscape) {
|
|
4
|
+
useEffect(() => {
|
|
5
|
+
if (!enabled)
|
|
6
|
+
return;
|
|
7
|
+
const handleKeyDown = (event) => {
|
|
8
|
+
if (event.key !== 'Escape')
|
|
9
|
+
return;
|
|
10
|
+
onEscape();
|
|
11
|
+
};
|
|
12
|
+
document.addEventListener('keydown', handleKeyDown);
|
|
13
|
+
return () => document.removeEventListener('keydown', handleKeyDown);
|
|
14
|
+
}, [enabled, onEscape]);
|
|
15
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type FloatingAlign, type FloatingSide } from './useFloatingPosition';
|
|
2
|
+
type UseFloatingLayerOptions = {
|
|
3
|
+
open: boolean;
|
|
4
|
+
presenceDuration?: number;
|
|
5
|
+
side?: FloatingSide;
|
|
6
|
+
align?: FloatingAlign;
|
|
7
|
+
sideOffset?: number;
|
|
8
|
+
collisionPadding?: number;
|
|
9
|
+
matchTriggerWidth?: boolean;
|
|
10
|
+
};
|
|
11
|
+
export declare function useFloatingLayer<TTrigger extends HTMLElement, TContent extends HTMLElement>({ open, presenceDuration, side, align, sideOffset, collisionPadding, matchTriggerWidth, }: UseFloatingLayerOptions): {
|
|
12
|
+
triggerRef: import("react").RefObject<TTrigger | null>;
|
|
13
|
+
contentRef: import("react").RefObject<TContent | null>;
|
|
14
|
+
present: boolean;
|
|
15
|
+
state: "opening" | "open" | "closed" | "closing";
|
|
16
|
+
style: import("react").CSSProperties;
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=useFloatingLayer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFloatingLayer.d.ts","sourceRoot":"","sources":["../../src/hooks/useFloatingLayer.ts"],"names":[],"mappings":"AAIA,OAAO,EAEH,KAAK,aAAa,EAClB,KAAK,YAAY,EACpB,MAAM,uBAAuB,CAAC;AAG/B,KAAK,uBAAuB,GAAG;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF,wBAAgB,gBAAgB,CAC5B,QAAQ,SAAS,WAAW,EAC5B,QAAQ,SAAS,WAAW,EAC9B,EACE,IAAI,EACJ,gBAAsB,EACtB,IAAe,EACf,KAAe,EACf,UAAc,EACd,gBAAoB,EACpB,iBAAyB,GAC5B,EAAE,uBAAuB;;;;;;EAsBzB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useRef } from 'react';
|
|
3
|
+
import { useFloatingPosition, } from './useFloatingPosition';
|
|
4
|
+
import { usePresence } from './usePresence';
|
|
5
|
+
export function useFloatingLayer({ open, presenceDuration = 180, side = 'bottom', align = 'start', sideOffset = 8, collisionPadding = 8, matchTriggerWidth = false, }) {
|
|
6
|
+
const triggerRef = useRef(null);
|
|
7
|
+
const contentRef = useRef(null);
|
|
8
|
+
const { present, state } = usePresence(open, presenceDuration);
|
|
9
|
+
const { style } = useFloatingPosition({
|
|
10
|
+
triggerRef,
|
|
11
|
+
contentRef,
|
|
12
|
+
open: present,
|
|
13
|
+
side,
|
|
14
|
+
align,
|
|
15
|
+
sideOffset,
|
|
16
|
+
collisionPadding,
|
|
17
|
+
matchTriggerWidth,
|
|
18
|
+
});
|
|
19
|
+
return {
|
|
20
|
+
triggerRef,
|
|
21
|
+
contentRef,
|
|
22
|
+
present,
|
|
23
|
+
state,
|
|
24
|
+
style,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type CSSProperties, type RefObject } from 'react';
|
|
2
|
+
export type FloatingSide = 'top' | 'right' | 'bottom' | 'left';
|
|
3
|
+
export type FloatingAlign = 'start' | 'center' | 'end';
|
|
4
|
+
export declare function useFloatingPosition({ triggerRef, contentRef, open, side, align, sideOffset, collisionPadding, matchTriggerWidth, }: {
|
|
5
|
+
triggerRef: RefObject<HTMLElement | null>;
|
|
6
|
+
contentRef: RefObject<HTMLElement | null>;
|
|
7
|
+
open: boolean;
|
|
8
|
+
side?: FloatingSide;
|
|
9
|
+
align?: FloatingAlign;
|
|
10
|
+
sideOffset?: number;
|
|
11
|
+
collisionPadding?: number;
|
|
12
|
+
matchTriggerWidth?: boolean;
|
|
13
|
+
}): {
|
|
14
|
+
style: CSSProperties;
|
|
15
|
+
update: () => void;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=useFloatingPosition.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFloatingPosition.d.ts","sourceRoot":"","sources":["../../src/hooks/useFloatingPosition.ts"],"names":[],"mappings":"AAEA,OAAO,EAKH,KAAK,aAAa,EAClB,KAAK,SAAS,EACjB,MAAM,OAAO,CAAC;AAEf,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC/D,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEvD,wBAAgB,mBAAmB,CAAC,EAChC,UAAU,EACV,UAAU,EACV,IAAI,EACJ,IAAe,EACf,KAAe,EACf,UAAc,EACd,gBAAoB,EACpB,iBAAyB,GAC5B,EAAE;IACC,UAAU,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC1C,UAAU,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAC1C,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B;;;EAyHA"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useCallback, useLayoutEffect, useRef, useState, } from 'react';
|
|
3
|
+
export function useFloatingPosition({ triggerRef, contentRef, open, side = 'bottom', align = 'start', sideOffset = 8, collisionPadding = 8, matchTriggerWidth = false, }) {
|
|
4
|
+
const [style, setStyle] = useState({
|
|
5
|
+
position: 'fixed',
|
|
6
|
+
left: -9999,
|
|
7
|
+
top: -9999,
|
|
8
|
+
visibility: 'hidden',
|
|
9
|
+
});
|
|
10
|
+
const frameRef = useRef(null);
|
|
11
|
+
const update = useCallback(() => {
|
|
12
|
+
const trigger = triggerRef.current;
|
|
13
|
+
const content = contentRef.current;
|
|
14
|
+
if (!trigger || !content)
|
|
15
|
+
return;
|
|
16
|
+
const triggerRect = trigger.getBoundingClientRect();
|
|
17
|
+
const contentRect = content.getBoundingClientRect();
|
|
18
|
+
const viewportW = window.innerWidth;
|
|
19
|
+
const viewportH = window.innerHeight;
|
|
20
|
+
const contentWidth = matchTriggerWidth
|
|
21
|
+
? Math.max(contentRect.width, triggerRect.width)
|
|
22
|
+
: contentRect.width;
|
|
23
|
+
const contentHeight = contentRect.height;
|
|
24
|
+
let left = triggerRect.left;
|
|
25
|
+
let top = triggerRect.bottom + sideOffset;
|
|
26
|
+
let actualSide = side;
|
|
27
|
+
if (side === 'bottom' && triggerRect.bottom + contentHeight + sideOffset > viewportH - collisionPadding) {
|
|
28
|
+
actualSide = 'top';
|
|
29
|
+
}
|
|
30
|
+
else if (side === 'top' && triggerRect.top - contentHeight - sideOffset < collisionPadding) {
|
|
31
|
+
actualSide = 'bottom';
|
|
32
|
+
}
|
|
33
|
+
else if (side === 'right' && triggerRect.right + contentWidth + sideOffset > viewportW - collisionPadding) {
|
|
34
|
+
actualSide = 'left';
|
|
35
|
+
}
|
|
36
|
+
else if (side === 'left' && triggerRect.left - contentWidth - sideOffset < collisionPadding) {
|
|
37
|
+
actualSide = 'right';
|
|
38
|
+
}
|
|
39
|
+
if (actualSide === 'bottom')
|
|
40
|
+
top = triggerRect.bottom + sideOffset;
|
|
41
|
+
if (actualSide === 'top')
|
|
42
|
+
top = triggerRect.top - contentHeight - sideOffset;
|
|
43
|
+
if (actualSide === 'right') {
|
|
44
|
+
left = triggerRect.right + sideOffset;
|
|
45
|
+
top = triggerRect.top;
|
|
46
|
+
}
|
|
47
|
+
if (actualSide === 'left') {
|
|
48
|
+
left = triggerRect.left - contentWidth - sideOffset;
|
|
49
|
+
top = triggerRect.top;
|
|
50
|
+
}
|
|
51
|
+
if (actualSide === 'top' || actualSide === 'bottom') {
|
|
52
|
+
if (align === 'center') {
|
|
53
|
+
left =
|
|
54
|
+
triggerRect.left + triggerRect.width / 2 - contentWidth / 2;
|
|
55
|
+
}
|
|
56
|
+
else if (align === 'end') {
|
|
57
|
+
left = triggerRect.right - contentWidth;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
else if (align === 'center') {
|
|
61
|
+
top = triggerRect.top + triggerRect.height / 2 - contentHeight / 2;
|
|
62
|
+
}
|
|
63
|
+
else if (align === 'end') {
|
|
64
|
+
top = triggerRect.bottom - contentHeight;
|
|
65
|
+
}
|
|
66
|
+
left = Math.min(Math.max(collisionPadding, left), Math.max(collisionPadding, viewportW - contentWidth - collisionPadding));
|
|
67
|
+
top = Math.min(Math.max(collisionPadding, top), Math.max(collisionPadding, viewportH - contentHeight - collisionPadding));
|
|
68
|
+
setStyle({
|
|
69
|
+
position: 'fixed',
|
|
70
|
+
left,
|
|
71
|
+
top,
|
|
72
|
+
minWidth: matchTriggerWidth ? triggerRect.width : undefined,
|
|
73
|
+
maxWidth: `calc(100vw - ${collisionPadding * 2}px)`,
|
|
74
|
+
maxHeight: `calc(100vh - ${collisionPadding * 2}px)`,
|
|
75
|
+
visibility: 'visible',
|
|
76
|
+
transformOrigin: transformOriginFor(actualSide, align),
|
|
77
|
+
});
|
|
78
|
+
}, [
|
|
79
|
+
align,
|
|
80
|
+
collisionPadding,
|
|
81
|
+
contentRef,
|
|
82
|
+
matchTriggerWidth,
|
|
83
|
+
side,
|
|
84
|
+
sideOffset,
|
|
85
|
+
triggerRef,
|
|
86
|
+
]);
|
|
87
|
+
const scheduleUpdate = useCallback(() => {
|
|
88
|
+
if (frameRef.current !== null)
|
|
89
|
+
window.cancelAnimationFrame(frameRef.current);
|
|
90
|
+
frameRef.current = window.requestAnimationFrame(() => {
|
|
91
|
+
frameRef.current = null;
|
|
92
|
+
update();
|
|
93
|
+
});
|
|
94
|
+
}, [update]);
|
|
95
|
+
useLayoutEffect(() => {
|
|
96
|
+
if (!open)
|
|
97
|
+
return;
|
|
98
|
+
scheduleUpdate();
|
|
99
|
+
const trigger = triggerRef.current;
|
|
100
|
+
const content = contentRef.current;
|
|
101
|
+
const observer = typeof ResizeObserver === 'undefined'
|
|
102
|
+
? null
|
|
103
|
+
: new ResizeObserver(() => scheduleUpdate());
|
|
104
|
+
if (trigger)
|
|
105
|
+
observer?.observe(trigger);
|
|
106
|
+
if (content)
|
|
107
|
+
observer?.observe(content);
|
|
108
|
+
window.addEventListener('resize', scheduleUpdate);
|
|
109
|
+
window.addEventListener('scroll', scheduleUpdate, true);
|
|
110
|
+
return () => {
|
|
111
|
+
if (frameRef.current !== null) {
|
|
112
|
+
window.cancelAnimationFrame(frameRef.current);
|
|
113
|
+
frameRef.current = null;
|
|
114
|
+
}
|
|
115
|
+
observer?.disconnect();
|
|
116
|
+
window.removeEventListener('resize', scheduleUpdate);
|
|
117
|
+
window.removeEventListener('scroll', scheduleUpdate, true);
|
|
118
|
+
};
|
|
119
|
+
}, [contentRef, open, scheduleUpdate, triggerRef]);
|
|
120
|
+
return { style, update: scheduleUpdate };
|
|
121
|
+
}
|
|
122
|
+
function transformOriginFor(side, align) {
|
|
123
|
+
const cross = align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';
|
|
124
|
+
const vertical = align === 'start' ? 'top' : align === 'end' ? 'bottom' : 'center';
|
|
125
|
+
if (side === 'bottom')
|
|
126
|
+
return `${cross} top`;
|
|
127
|
+
if (side === 'top')
|
|
128
|
+
return `${cross} bottom`;
|
|
129
|
+
if (side === 'right')
|
|
130
|
+
return `left ${vertical}`;
|
|
131
|
+
return `right ${vertical}`;
|
|
132
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useFocusTrap.d.ts","sourceRoot":"","sources":["../../src/hooks/useFocusTrap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAoB,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAWxD,wBAAgB,YAAY,CACxB,GAAG,EAAE,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,EAClC,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE,MAAM,IAAI,QA8CxB"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEffect, useRef } from 'react';
|
|
3
|
+
const focusableSelector = [
|
|
4
|
+
'a[href]',
|
|
5
|
+
'button:not([disabled])',
|
|
6
|
+
'textarea:not([disabled])',
|
|
7
|
+
'input:not([disabled])',
|
|
8
|
+
'select:not([disabled])',
|
|
9
|
+
'[tabindex]:not([tabindex="-1"])',
|
|
10
|
+
].join(',');
|
|
11
|
+
export function useFocusTrap(ref, enabled, onEscape) {
|
|
12
|
+
const onEscapeRef = useRef(onEscape);
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
onEscapeRef.current = onEscape;
|
|
15
|
+
}, [onEscape]);
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
if (!enabled)
|
|
18
|
+
return;
|
|
19
|
+
const root = ref.current;
|
|
20
|
+
if (!root)
|
|
21
|
+
return;
|
|
22
|
+
const previous = document.activeElement;
|
|
23
|
+
const first = root.querySelector(focusableSelector);
|
|
24
|
+
first?.focus({ preventScroll: true });
|
|
25
|
+
const handleKeyDown = (event) => {
|
|
26
|
+
if (event.key === 'Escape') {
|
|
27
|
+
onEscapeRef.current?.();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (event.key !== 'Tab')
|
|
31
|
+
return;
|
|
32
|
+
const nodes = Array.from(root.querySelectorAll(focusableSelector)).filter((node) => node.offsetParent !== null);
|
|
33
|
+
if (nodes.length === 0) {
|
|
34
|
+
event.preventDefault();
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const firstNode = nodes[0];
|
|
38
|
+
const lastNode = nodes[nodes.length - 1];
|
|
39
|
+
if (event.shiftKey && document.activeElement === firstNode) {
|
|
40
|
+
event.preventDefault();
|
|
41
|
+
lastNode.focus();
|
|
42
|
+
}
|
|
43
|
+
else if (!event.shiftKey && document.activeElement === lastNode) {
|
|
44
|
+
event.preventDefault();
|
|
45
|
+
firstNode.focus();
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
root.addEventListener('keydown', handleKeyDown);
|
|
49
|
+
return () => {
|
|
50
|
+
root.removeEventListener('keydown', handleKeyDown);
|
|
51
|
+
previous?.focus?.({ preventScroll: true });
|
|
52
|
+
};
|
|
53
|
+
}, [enabled, ref]);
|
|
54
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type ListNavigationItem = {
|
|
2
|
+
value: string;
|
|
3
|
+
disabled?: boolean;
|
|
4
|
+
searchText?: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function useListNavigation(items: ReadonlyArray<ListNavigationItem>, { value, }?: {
|
|
7
|
+
value?: string | null;
|
|
8
|
+
}): {
|
|
9
|
+
highlightedValue: string;
|
|
10
|
+
setHighlightedValue: import("react").Dispatch<import("react").SetStateAction<string | null>>;
|
|
11
|
+
move: (direction: 1 | -1) => void;
|
|
12
|
+
first: () => void;
|
|
13
|
+
last: () => void;
|
|
14
|
+
reset: () => void;
|
|
15
|
+
enabledItems: ListNavigationItem[];
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=useListNavigation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useListNavigation.d.ts","sourceRoot":"","sources":["../../src/hooks/useListNavigation.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,kBAAkB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,wBAAgB,iBAAiB,CAC7B,KAAK,EAAE,aAAa,CAAC,kBAAkB,CAAC,EACxC,EACI,KAAY,GACf,GAAE;IACC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB;;;sBAmBU,CAAC,GAAG,CAAC,CAAC;;;;;EAoCzB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useCallback, useMemo, useState } from 'react';
|
|
3
|
+
export function useListNavigation(items, { value = null, } = {}) {
|
|
4
|
+
const enabledItems = useMemo(() => items.filter((item) => !item.disabled), [items]);
|
|
5
|
+
const [requestedValue, setRequestedValue] = useState(null);
|
|
6
|
+
const highlightedValue = useMemo(() => {
|
|
7
|
+
if (requestedValue !== null &&
|
|
8
|
+
enabledItems.some((item) => item.value === requestedValue)) {
|
|
9
|
+
return requestedValue;
|
|
10
|
+
}
|
|
11
|
+
if (value !== null && enabledItems.some((item) => item.value === value)) {
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
return enabledItems[0]?.value ?? null;
|
|
15
|
+
}, [enabledItems, requestedValue, value]);
|
|
16
|
+
const move = useCallback((direction) => {
|
|
17
|
+
if (enabledItems.length === 0)
|
|
18
|
+
return;
|
|
19
|
+
const currentIndex = enabledItems.findIndex((item) => item.value === highlightedValue);
|
|
20
|
+
const nextIndex = currentIndex === -1
|
|
21
|
+
? 0
|
|
22
|
+
: (currentIndex + direction + enabledItems.length) %
|
|
23
|
+
enabledItems.length;
|
|
24
|
+
setRequestedValue(enabledItems[nextIndex]?.value ?? null);
|
|
25
|
+
}, [enabledItems, highlightedValue]);
|
|
26
|
+
const first = useCallback(() => {
|
|
27
|
+
setRequestedValue(enabledItems[0]?.value ?? null);
|
|
28
|
+
}, [enabledItems]);
|
|
29
|
+
const last = useCallback(() => {
|
|
30
|
+
setRequestedValue(enabledItems.at(-1)?.value ?? null);
|
|
31
|
+
}, [enabledItems]);
|
|
32
|
+
const reset = useCallback(() => {
|
|
33
|
+
setRequestedValue(null);
|
|
34
|
+
}, []);
|
|
35
|
+
return {
|
|
36
|
+
highlightedValue,
|
|
37
|
+
setHighlightedValue: setRequestedValue,
|
|
38
|
+
move,
|
|
39
|
+
first,
|
|
40
|
+
last,
|
|
41
|
+
reset,
|
|
42
|
+
enabledItems,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useOutsidePointerDown.d.ts","sourceRoot":"","sources":["../../src/hooks/useOutsidePointerDown.ts"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,SAAS,EAAC,MAAM,OAAO,CAAC;AAEhD,wBAAgB,qBAAqB,CACjC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC,EAC1C,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,QAe3C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEffect } from 'react';
|
|
3
|
+
export function useOutsidePointerDown(refs, enabled, onOutside) {
|
|
4
|
+
useEffect(() => {
|
|
5
|
+
if (!enabled)
|
|
6
|
+
return;
|
|
7
|
+
const handlePointerDown = (event) => {
|
|
8
|
+
const target = event.target;
|
|
9
|
+
if (!(target instanceof Node))
|
|
10
|
+
return;
|
|
11
|
+
const isInside = refs.some((ref) => ref.current?.contains(target));
|
|
12
|
+
if (!isInside)
|
|
13
|
+
onOutside(event);
|
|
14
|
+
};
|
|
15
|
+
document.addEventListener('pointerdown', handlePointerDown, true);
|
|
16
|
+
return () => {
|
|
17
|
+
document.removeEventListener('pointerdown', handlePointerDown, true);
|
|
18
|
+
};
|
|
19
|
+
}, [enabled, onOutside, refs]);
|
|
20
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePresence.d.ts","sourceRoot":"","sources":["../../src/hooks/usePresence.ts"],"names":[],"mappings":"AAIA,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,UAAU,SAAM;;;EAsC1D"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
export function usePresence(open, durationMs = 220) {
|
|
4
|
+
const [present, setPresent] = useState(open);
|
|
5
|
+
const [state, setState] = useState(open ? 'open' : 'closed');
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
let frame = 0;
|
|
8
|
+
let timer = 0;
|
|
9
|
+
if (open) {
|
|
10
|
+
frame = window.requestAnimationFrame(() => {
|
|
11
|
+
setPresent(true);
|
|
12
|
+
setState('opening');
|
|
13
|
+
timer = window.setTimeout(() => setState('open'), durationMs);
|
|
14
|
+
});
|
|
15
|
+
return () => {
|
|
16
|
+
window.cancelAnimationFrame(frame);
|
|
17
|
+
window.clearTimeout(timer);
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
if (!present)
|
|
21
|
+
return;
|
|
22
|
+
frame = window.requestAnimationFrame(() => {
|
|
23
|
+
setState('closing');
|
|
24
|
+
timer = window.setTimeout(() => {
|
|
25
|
+
setPresent(false);
|
|
26
|
+
setState('closed');
|
|
27
|
+
}, durationMs);
|
|
28
|
+
});
|
|
29
|
+
return () => {
|
|
30
|
+
window.cancelAnimationFrame(frame);
|
|
31
|
+
window.clearTimeout(timer);
|
|
32
|
+
};
|
|
33
|
+
}, [durationMs, open, present]);
|
|
34
|
+
return { present, state };
|
|
35
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTypeahead.d.ts","sourceRoot":"","sources":["../../src/hooks/useTypeahead.ts"],"names":[],"mappings":"AAIA,wBAAgB,YAAY,CACxB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,EAChC,SAAS,SAAM,SAeL,MAAM,UAYnB"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useCallback, useEffect, useRef } from 'react';
|
|
3
|
+
export function useTypeahead(onMatch, timeoutMs = 650) {
|
|
4
|
+
const bufferRef = useRef('');
|
|
5
|
+
const timerRef = useRef(null);
|
|
6
|
+
useEffect(() => () => {
|
|
7
|
+
if (timerRef.current !== null) {
|
|
8
|
+
window.clearTimeout(timerRef.current);
|
|
9
|
+
}
|
|
10
|
+
}, []);
|
|
11
|
+
return useCallback((key) => {
|
|
12
|
+
if (key.length !== 1)
|
|
13
|
+
return;
|
|
14
|
+
bufferRef.current = `${bufferRef.current}${key}`.toLowerCase();
|
|
15
|
+
if (timerRef.current !== null)
|
|
16
|
+
window.clearTimeout(timerRef.current);
|
|
17
|
+
timerRef.current = window.setTimeout(() => {
|
|
18
|
+
bufferRef.current = '';
|
|
19
|
+
timerRef.current = null;
|
|
20
|
+
}, timeoutMs);
|
|
21
|
+
onMatch(bufferRef.current);
|
|
22
|
+
}, [onMatch, timeoutMs]);
|
|
23
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
export * from './components/Action/ActionTypes';
|
|
2
|
+
export * from './components/ActionMenu/ActionMenu';
|
|
3
|
+
export * from './components/Alert/Alert';
|
|
4
|
+
export * from './components/AppShell/AppShell';
|
|
5
|
+
export * from './components/Badge/Badge';
|
|
6
|
+
export * from './components/Box/Box';
|
|
7
|
+
export * from './components/Button/Button';
|
|
8
|
+
export * from './components/Checkbox/Checkbox';
|
|
9
|
+
export * from './components/Collapse/Collapse';
|
|
10
|
+
export * from './components/Combobox/Combobox';
|
|
11
|
+
export * from './components/CommandPalette/CommandPalette';
|
|
12
|
+
export * from './components/ConfirmDialog/ConfirmDialog';
|
|
13
|
+
export * from './components/ContextMenu/ContextMenu';
|
|
14
|
+
export * from './components/DataTable/DataTable';
|
|
15
|
+
export * from './components/DataTable/DataTableStateAdapters';
|
|
16
|
+
export * from './components/DatePicker/DatePicker';
|
|
17
|
+
export * from './components/DateRangePicker/DateRangePicker';
|
|
18
|
+
export * from './components/DateRangePresetPicker/DateRangePresetPicker';
|
|
19
|
+
export * from './components/Dialog/Dialog';
|
|
20
|
+
export * from './components/Drawer/Drawer';
|
|
21
|
+
export * from './components/EntityPicker/EntityPicker';
|
|
22
|
+
export * from './components/State/State';
|
|
23
|
+
export * from './components/Flex/Flex';
|
|
24
|
+
export * from './components/Field/Field';
|
|
25
|
+
export * from './components/Grid/Grid';
|
|
26
|
+
export * from './components/Highlight/Highlight';
|
|
27
|
+
export * from './components/IconButton/IconButton';
|
|
28
|
+
export * from './components/IconText/IconText';
|
|
29
|
+
export * from './components/Listbox/Listbox';
|
|
30
|
+
export * from './components/Menu/Menu';
|
|
31
|
+
export * from './components/Modal/Modal';
|
|
32
|
+
export * from './components/MultiSelect/MultiSelect';
|
|
33
|
+
export * from './components/NumberField/NumberField';
|
|
34
|
+
export * from './components/PaginatedCombobox/PaginatedCombobox';
|
|
35
|
+
export * from './components/Pagination/Pagination';
|
|
36
|
+
export * from './components/Popover/Popover';
|
|
37
|
+
export * from './components/Portal/Portal';
|
|
38
|
+
export * from './components/RadioGroup/RadioGroup';
|
|
39
|
+
export * from './components/ScrollArea/ScrollArea';
|
|
40
|
+
export * from './components/SegmentedControl/SegmentedControl';
|
|
41
|
+
export * from './components/Select/Select';
|
|
42
|
+
export * from './components/Separator/Separator';
|
|
43
|
+
export * from './components/Section/Section';
|
|
44
|
+
export * from './components/Skeleton/Skeleton';
|
|
45
|
+
export * from './components/Spinner/Spinner';
|
|
46
|
+
export * from './components/Stack/Stack';
|
|
47
|
+
export * from './components/StepperInput/StepperInput';
|
|
48
|
+
export * from './components/Switch/Switch';
|
|
49
|
+
export * from './components/Tabs/Tabs';
|
|
50
|
+
export * from './components/Text/Text';
|
|
51
|
+
export * from './components/TextArea/TextArea';
|
|
52
|
+
export * from './components/TextField/TextField';
|
|
53
|
+
export * from './components/Toast/Toast';
|
|
54
|
+
export * from './components/Tooltip/Tooltip';
|
|
55
|
+
export * from './components/VisuallyHidden/VisuallyHidden';
|
|
56
|
+
export * from './components/Workflow/Workflow';
|
|
57
|
+
export * from './locale/LocaleProvider';
|
|
58
|
+
export * from './provider/OrcestrUiProvider';
|
|
59
|
+
export * from './theme/defaultTheme';
|
|
60
|
+
export * from './theme/ThemeProvider';
|
|
61
|
+
export * from './theme/systemProps';
|
|
62
|
+
export * from './theme/themeTypes';
|
|
63
|
+
export * from './theme/useTheme';
|
|
64
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,0CAA0C,CAAC;AACzD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kCAAkC,CAAC;AACjD,cAAc,+CAA+C,CAAC;AAC9D,cAAc,oCAAoC,CAAC;AACnD,cAAc,8CAA8C,CAAC;AAC7D,cAAc,0DAA0D,CAAC;AACzE,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wCAAwC,CAAC;AACvD,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,oCAAoC,CAAC;AACnD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sCAAsC,CAAC;AACrD,cAAc,sCAAsC,CAAC;AACrD,cAAc,kDAAkD,CAAC;AACjE,cAAc,oCAAoC,CAAC;AACnD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,oCAAoC,CAAC;AACnD,cAAc,oCAAoC,CAAC;AACnD,cAAc,gDAAgD,CAAC;AAC/D,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,wCAAwC,CAAC;AACvD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4CAA4C,CAAC;AAC3D,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
|