@optimum-intelligence/opti-ui 0.0.0-stage → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +23 -0
- package/README.md +244 -2
- package/dist/components/accordion/Accordion.d.ts +17 -0
- package/dist/components/accordion/Accordion.js +204 -0
- package/dist/components/accordion/Accordion.js.map +1 -0
- package/dist/components/alert/Alert.d.ts +18 -0
- package/dist/components/alert/Alert.js +164 -0
- package/dist/components/alert/Alert.js.map +1 -0
- package/dist/components/app-shell/AppShell.d.ts +97 -0
- package/dist/components/app-shell/AppShell.js +689 -0
- package/dist/components/app-shell/AppShell.js.map +1 -0
- package/dist/components/avatar/Avatar.d.ts +21 -0
- package/dist/components/avatar/Avatar.js +190 -0
- package/dist/components/avatar/Avatar.js.map +1 -0
- package/dist/components/badge/Badge.d.ts +16 -0
- package/dist/components/badge/Badge.js +94 -0
- package/dist/components/badge/Badge.js.map +1 -0
- package/dist/components/breadcrumbs/Breadcrumbs.d.ts +18 -0
- package/dist/components/breadcrumbs/Breadcrumbs.js +154 -0
- package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -0
- package/dist/components/button/Button.d.ts +23 -0
- package/dist/components/button/Button.js +159 -0
- package/dist/components/button/Button.js.map +1 -0
- package/dist/components/calendar/Calendar.d.ts +59 -0
- package/dist/components/calendar/Calendar.js +709 -0
- package/dist/components/calendar/Calendar.js.map +1 -0
- package/dist/components/calendar/date-utils.d.ts +32 -0
- package/dist/components/calendar/date-utils.js +112 -0
- package/dist/components/calendar/date-utils.js.map +1 -0
- package/dist/components/card/Card.d.ts +42 -0
- package/dist/components/card/Card.js +82 -0
- package/dist/components/card/Card.js.map +1 -0
- package/dist/components/choice/Choice.d.ts +32 -0
- package/dist/components/choice/Choice.js +371 -0
- package/dist/components/choice/Choice.js.map +1 -0
- package/dist/components/collapsible/Collapsible.d.ts +15 -0
- package/dist/components/collapsible/Collapsible.js +155 -0
- package/dist/components/collapsible/Collapsible.js.map +1 -0
- package/dist/components/combobox/Combobox.d.ts +68 -0
- package/dist/components/combobox/Combobox.js +752 -0
- package/dist/components/combobox/Combobox.js.map +1 -0
- package/dist/components/command-palette/CommandPalette.d.ts +52 -0
- package/dist/components/command-palette/CommandPalette.js +328 -0
- package/dist/components/command-palette/CommandPalette.js.map +1 -0
- package/dist/components/data-table/DataTable.d.ts +73 -0
- package/dist/components/data-table/DataTable.js +478 -0
- package/dist/components/data-table/DataTable.js.map +1 -0
- package/dist/components/data-table/DataTableContent.d.ts +35 -0
- package/dist/components/data-table/DataTableContent.js +550 -0
- package/dist/components/data-table/DataTableContent.js.map +1 -0
- package/dist/components/data-table/DataTableFilters.d.ts +15 -0
- package/dist/components/data-table/DataTableFilters.js +284 -0
- package/dist/components/data-table/DataTableFilters.js.map +1 -0
- package/dist/components/data-table/DataTableRow.d.ts +33 -0
- package/dist/components/data-table/DataTableRow.js +552 -0
- package/dist/components/data-table/DataTableRow.js.map +1 -0
- package/dist/components/data-table/context.d.ts +5 -0
- package/dist/components/data-table/context.js +14 -0
- package/dist/components/data-table/context.js.map +1 -0
- package/dist/components/data-table/layout.d.ts +60 -0
- package/dist/components/data-table/layout.js +272 -0
- package/dist/components/data-table/layout.js.map +1 -0
- package/dist/components/data-table/types.d.ts +319 -0
- package/dist/components/data-table/useDataTable.d.ts +9 -0
- package/dist/components/data-table/useDataTable.js +666 -0
- package/dist/components/data-table/useDataTable.js.map +1 -0
- package/dist/components/date-picker/DatePicker.d.ts +50 -0
- package/dist/components/date-picker/DatePicker.js +485 -0
- package/dist/components/date-picker/DatePicker.js.map +1 -0
- package/dist/components/date-picker/DateRangePicker.d.ts +39 -0
- package/dist/components/date-picker/DateRangePicker.js +339 -0
- package/dist/components/date-picker/DateRangePicker.js.map +1 -0
- package/dist/components/date-picker/PickerField.d.ts +38 -0
- package/dist/components/date-picker/PickerField.js +238 -0
- package/dist/components/date-picker/PickerField.js.map +1 -0
- package/dist/components/dialog/Dialog.d.ts +70 -0
- package/dist/components/dialog/Dialog.js +354 -0
- package/dist/components/dialog/Dialog.js.map +1 -0
- package/dist/components/drawer/Drawer.d.ts +39 -0
- package/dist/components/drawer/Drawer.js +225 -0
- package/dist/components/drawer/Drawer.js.map +1 -0
- package/dist/components/empty-state/EmptyState.d.ts +12 -0
- package/dist/components/empty-state/EmptyState.js +116 -0
- package/dist/components/empty-state/EmptyState.js.map +1 -0
- package/dist/components/field/Field.d.ts +36 -0
- package/dist/components/field/Field.js +337 -0
- package/dist/components/field/Field.js.map +1 -0
- package/dist/components/file-upload/FileUpload.d.ts +91 -0
- package/dist/components/file-upload/FileUpload.js +714 -0
- package/dist/components/file-upload/FileUpload.js.map +1 -0
- package/dist/components/input/Input.d.ts +49 -0
- package/dist/components/input/Input.js +538 -0
- package/dist/components/input/Input.js.map +1 -0
- package/dist/components/link/Link.d.ts +17 -0
- package/dist/components/link/Link.js +91 -0
- package/dist/components/link/Link.js.map +1 -0
- package/dist/components/menu/Menu.d.ts +79 -0
- package/dist/components/menu/Menu.js +615 -0
- package/dist/components/menu/Menu.js.map +1 -0
- package/dist/components/number-field/NumberField.d.ts +16 -0
- package/dist/components/number-field/NumberField.js +188 -0
- package/dist/components/number-field/NumberField.js.map +1 -0
- package/dist/components/pagination/Pagination.d.ts +34 -0
- package/dist/components/pagination/Pagination.js +244 -0
- package/dist/components/pagination/Pagination.js.map +1 -0
- package/dist/components/popover/Popover.d.ts +22 -0
- package/dist/components/popover/Popover.js +186 -0
- package/dist/components/popover/Popover.js.map +1 -0
- package/dist/components/preview-card/PreviewCard.d.ts +20 -0
- package/dist/components/preview-card/PreviewCard.js +114 -0
- package/dist/components/preview-card/PreviewCard.js.map +1 -0
- package/dist/components/progress/Progress.d.ts +20 -0
- package/dist/components/progress/Progress.js +169 -0
- package/dist/components/progress/Progress.js.map +1 -0
- package/dist/components/scroll-area/ScrollArea.d.ts +8 -0
- package/dist/components/scroll-area/ScrollArea.js +112 -0
- package/dist/components/scroll-area/ScrollArea.js.map +1 -0
- package/dist/components/search-input/SearchInput.d.ts +14 -0
- package/dist/components/search-input/SearchInput.js +114 -0
- package/dist/components/search-input/SearchInput.js.map +1 -0
- package/dist/components/select/Select.d.ts +66 -0
- package/dist/components/select/Select.js +601 -0
- package/dist/components/select/Select.js.map +1 -0
- package/dist/components/separator/Separator.d.ts +4 -0
- package/dist/components/separator/Separator.js +46 -0
- package/dist/components/separator/Separator.js.map +1 -0
- package/dist/components/skeleton/Skeleton.d.ts +16 -0
- package/dist/components/skeleton/Skeleton.js +135 -0
- package/dist/components/skeleton/Skeleton.js.map +1 -0
- package/dist/components/slider/Slider.d.ts +11 -0
- package/dist/components/slider/Slider.js +107 -0
- package/dist/components/slider/Slider.js.map +1 -0
- package/dist/components/spinner/Spinner.d.ts +9 -0
- package/dist/components/spinner/Spinner.js +78 -0
- package/dist/components/spinner/Spinner.js.map +1 -0
- package/dist/components/stack/Stack.d.ts +23 -0
- package/dist/components/stack/Stack.js +79 -0
- package/dist/components/stack/Stack.js.map +1 -0
- package/dist/components/stat-card/StatCard.d.ts +22 -0
- package/dist/components/stat-card/StatCard.js +153 -0
- package/dist/components/stat-card/StatCard.js.map +1 -0
- package/dist/components/stepper/Stepper.d.ts +30 -0
- package/dist/components/stepper/Stepper.js +131 -0
- package/dist/components/stepper/Stepper.js.map +1 -0
- package/dist/components/table/Table.d.ts +53 -0
- package/dist/components/table/Table.js +221 -0
- package/dist/components/table/Table.js.map +1 -0
- package/dist/components/tabs/Tabs.d.ts +19 -0
- package/dist/components/tabs/Tabs.js +183 -0
- package/dist/components/tabs/Tabs.js.map +1 -0
- package/dist/components/tag/Tag.d.ts +22 -0
- package/dist/components/tag/Tag.js +121 -0
- package/dist/components/tag/Tag.js.map +1 -0
- package/dist/components/toast/Toast.d.ts +34 -0
- package/dist/components/toast/Toast.js +187 -0
- package/dist/components/toast/Toast.js.map +1 -0
- package/dist/components/toggle/Toggle.d.ts +31 -0
- package/dist/components/toggle/Toggle.js +197 -0
- package/dist/components/toggle/Toggle.js.map +1 -0
- package/dist/components/toolbar/Toolbar.d.ts +21 -0
- package/dist/components/toolbar/Toolbar.js +239 -0
- package/dist/components/toolbar/Toolbar.js.map +1 -0
- package/dist/components/tooltip/Tooltip.d.ts +33 -0
- package/dist/components/tooltip/Tooltip.js +182 -0
- package/dist/components/tooltip/Tooltip.js.map +1 -0
- package/dist/components/typography/Typography.d.ts +32 -0
- package/dist/components/typography/Typography.js +183 -0
- package/dist/components/typography/Typography.js.map +1 -0
- package/dist/fonts.css +3 -0
- package/dist/icons/index.d.ts +133 -0
- package/dist/icons/index.js +182 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/index.d.ts +55 -0
- package/dist/index.js +58 -0
- package/dist/opti-ui.css +5692 -0
- package/dist/theme/ThemeProvider.d.ts +22 -0
- package/dist/theme/ThemeProvider.js +115 -0
- package/dist/theme/ThemeProvider.js.map +1 -0
- package/dist/theme/index.d.ts +2 -0
- package/dist/utils/cx.d.ts +10 -0
- package/dist/utils/cx.js +18 -0
- package/dist/utils/cx.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/portal.d.ts +8 -0
- package/dist/utils/portal.js +16 -0
- package/dist/utils/portal.js.map +1 -0
- package/dist/utils/primitive.d.ts +13 -0
- package/dist/utils/primitive.js +61 -0
- package/dist/utils/primitive.js.map +1 -0
- package/dist/utils/search.d.ts +4 -0
- package/dist/utils/search.js +15 -0
- package/dist/utils/search.js.map +1 -0
- package/package.json +71 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Combobox.js","names":["React","Combobox","BaseCombobox","withClass","usePortalContainer","CheckIcon","ChevronDownIcon","XIcon","Field","ControlSize","ComboboxInputGroupProps","InputGroup","Props","size","ComboboxInputGroup","t0","$","_c","className","props","ref","t1","undefined","t2","t3","ComboboxInput","ComboboxTrigger","children","ComboboxClear","ComboboxContentProps","Popup","side","Positioner","align","sideOffset","positionerProps","ComboboxContent","container","t4","t5","ComboboxList","ComboboxItem","Symbol","for","ComboboxEmpty","ComboboxChips","ComboboxChip","removeLabel","ComboboxGroupLabel","ComboboxOption","value","label","disabled","RootProps","Omit","Root","ComboboxProps","items","ReactNode","description","error","placeholder","emptyText","hideClear","inputProps","Input","ComboboxComponent","multiple","name","required","rootProps","t6","t7","map","_temp","length","t8","t9","t10","t11","t12","t13","_temp2","t14","t15","t16","t17","t18","item_0","item","Object","assign","Trigger","Clear","Value","Chips","Chip","Content","List","Item","Empty","Group","GroupLabel","Collection","useFilter","_c","BaseCombobox","Combobox"],"sources":["../../../src/components/combobox/Combobox.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Combobox as BaseCombobox } from '@base-ui/react/combobox';\nimport { withClass } from '../../utils/cx';\nimport { usePortalContainer } from '../../utils/portal';\nimport { CheckIcon, ChevronDownIcon, XIcon } from '../../icons';\nimport { Field } from '../field/Field';\nimport type { ControlSize } from '../input/Input';\n\n// ─── Parts ───────────────────────────────────────────────────────────────────\n\nexport interface ComboboxInputGroupProps extends BaseCombobox.InputGroup.Props {\n size?: ControlSize;\n}\n\nfunction ComboboxInputGroup({ size = 'md', className, ref, ...props }: ComboboxInputGroupProps) {\n return (\n <BaseCombobox.InputGroup\n ref={ref}\n className={withClass('oui-combobox__group', className)}\n data-size={size}\n {...props}\n />\n );\n}\n\nfunction ComboboxInput({ className, ref, ...props }: BaseCombobox.Input.Props) {\n return <BaseCombobox.Input ref={ref} className={withClass('oui-combobox__input', className)} {...props} />;\n}\n\nfunction ComboboxTrigger({ className, children, ref, ...props }: BaseCombobox.Trigger.Props) {\n return (\n <BaseCombobox.Trigger\n ref={ref}\n aria-label=\"Open list\"\n className={withClass('oui-combobox__action', className)}\n {...props}\n >\n {children ?? <ChevronDownIcon />}\n </BaseCombobox.Trigger>\n );\n}\n\nfunction ComboboxClear({ className, children, ref, ...props }: BaseCombobox.Clear.Props) {\n return (\n <BaseCombobox.Clear\n ref={ref}\n aria-label=\"Clear selection\"\n className={withClass('oui-combobox__action', className)}\n {...props}\n >\n {children ?? <XIcon />}\n </BaseCombobox.Clear>\n );\n}\n\nexport interface ComboboxContentProps extends BaseCombobox.Popup.Props {\n side?: BaseCombobox.Positioner.Props['side'];\n align?: BaseCombobox.Positioner.Props['align'];\n sideOffset?: BaseCombobox.Positioner.Props['sideOffset'];\n positionerProps?: BaseCombobox.Positioner.Props;\n}\n\nfunction ComboboxContent({\n side,\n align,\n sideOffset = 6,\n positionerProps,\n className,\n ref,\n ...props\n}: ComboboxContentProps) {\n const container = usePortalContainer();\n return (\n <BaseCombobox.Portal container={container}>\n <BaseCombobox.Positioner\n className=\"oui-combobox__positioner\"\n side={side}\n align={align}\n sideOffset={sideOffset}\n {...positionerProps}\n >\n <BaseCombobox.Popup ref={ref} className={withClass('oui-combobox__popup', className)} {...props} />\n </BaseCombobox.Positioner>\n </BaseCombobox.Portal>\n );\n}\n\nfunction ComboboxList({ className, ref, ...props }: BaseCombobox.List.Props) {\n return <BaseCombobox.List ref={ref} className={withClass('oui-combobox__list', className)} {...props} />;\n}\n\nfunction ComboboxItem({ className, children, ref, ...props }: BaseCombobox.Item.Props) {\n return (\n <BaseCombobox.Item ref={ref} className={withClass('oui-combobox__item', className)} {...props}>\n <span className=\"oui-combobox__item-text\">{children}</span>\n <BaseCombobox.ItemIndicator className=\"oui-combobox__item-indicator\">\n <CheckIcon />\n </BaseCombobox.ItemIndicator>\n </BaseCombobox.Item>\n );\n}\n\nfunction ComboboxEmpty({ className, ref, ...props }: BaseCombobox.Empty.Props) {\n return <BaseCombobox.Empty ref={ref} className={withClass('oui-combobox__empty', className)} {...props} />;\n}\n\nfunction ComboboxChips({ className, ref, ...props }: BaseCombobox.Chips.Props) {\n return <BaseCombobox.Chips ref={ref} className={withClass('oui-combobox__chips', className)} {...props} />;\n}\n\nfunction ComboboxChip({\n className,\n children,\n removeLabel = 'Remove',\n ref,\n ...props\n}: BaseCombobox.Chip.Props & { removeLabel?: string }) {\n return (\n <BaseCombobox.Chip ref={ref} className={withClass('oui-combobox__chip', className)} {...props}>\n {children}\n <BaseCombobox.ChipRemove className=\"oui-combobox__chip-remove\" aria-label={removeLabel}>\n <XIcon />\n </BaseCombobox.ChipRemove>\n </BaseCombobox.Chip>\n );\n}\n\nfunction ComboboxGroupLabel({ className, ref, ...props }: BaseCombobox.GroupLabel.Props) {\n return <BaseCombobox.GroupLabel ref={ref} className={withClass('oui-select__group-label', className)} {...props} />;\n}\n\n// ─── Convenience component ───────────────────────────────────────────────────\n\nexport interface ComboboxOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\ntype RootProps = Omit<BaseCombobox.Root.Props<ComboboxOption, boolean | undefined>, 'items' | 'children'>;\n\nexport interface ComboboxProps extends RootProps {\n items: ComboboxOption[];\n label?: React.ReactNode;\n description?: React.ReactNode;\n error?: React.ReactNode;\n placeholder?: string;\n /** Shown when the filter matches nothing. */\n emptyText?: React.ReactNode;\n size?: ControlSize;\n /** Hide the clear button. */\n hideClear?: boolean;\n inputProps?: BaseCombobox.Input.Props;\n}\n\nfunction ComboboxComponent({\n items,\n label,\n description,\n error,\n placeholder,\n emptyText = 'No results found.',\n size = 'md',\n hideClear,\n inputProps,\n name,\n disabled,\n required,\n multiple,\n ...rootProps\n}: ComboboxProps) {\n return (\n <Field.Root name={name} disabled={disabled} invalid={error ? true : undefined}>\n <BaseCombobox.Root\n items={items}\n multiple={multiple}\n disabled={disabled}\n required={required}\n {...(rootProps as BaseCombobox.Root.Props<ComboboxOption, boolean | undefined>)}\n >\n {label && <Field.Label required={required}>{label}</Field.Label>}\n <ComboboxInputGroup size={size} data-multiple={multiple || undefined}>\n {multiple ? (\n <BaseCombobox.Value>\n {(value: ComboboxOption[]) => (\n <ComboboxChips>\n {value.map((item) => (\n <ComboboxChip key={item.value} removeLabel={`Remove ${item.label}`}>\n {item.label}\n </ComboboxChip>\n ))}\n <ComboboxInput placeholder={value.length ? undefined : placeholder} {...inputProps} />\n </ComboboxChips>\n )}\n </BaseCombobox.Value>\n ) : (\n <ComboboxInput placeholder={placeholder} {...inputProps} />\n )}\n <span className=\"oui-combobox__actions\">\n {!hideClear && <ComboboxClear />}\n <ComboboxTrigger />\n </span>\n </ComboboxInputGroup>\n <ComboboxContent>\n <ComboboxEmpty>{emptyText}</ComboboxEmpty>\n <ComboboxList>\n {(item: ComboboxOption) => (\n <ComboboxItem key={item.value} value={item} disabled={item.disabled}>\n {item.label}\n </ComboboxItem>\n )}\n </ComboboxList>\n </ComboboxContent>\n </BaseCombobox.Root>\n {description && <Field.Description>{description}</Field.Description>}\n {error ? <Field.Error match>{error}</Field.Error> : <Field.Error />}\n </Field.Root>\n );\n}\n\n/**\n * Searchable select. `<Combobox items={…} />` covers single and `multiple`\n * (chips) selection; compose the parts for anything custom.\n */\nexport const Combobox = Object.assign(ComboboxComponent, {\n Root: BaseCombobox.Root,\n InputGroup: ComboboxInputGroup,\n Input: ComboboxInput,\n Trigger: ComboboxTrigger,\n Clear: ComboboxClear,\n Value: BaseCombobox.Value,\n Chips: ComboboxChips,\n Chip: ComboboxChip,\n Content: ComboboxContent,\n List: ComboboxList,\n Item: ComboboxItem,\n Empty: ComboboxEmpty,\n Group: BaseCombobox.Group,\n GroupLabel: ComboboxGroupLabel,\n Collection: BaseCombobox.Collection,\n useFilter: BaseCombobox.useFilter,\n});\n"],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface CommandItem {
|
|
3
|
+
id: string;
|
|
4
|
+
label: string;
|
|
5
|
+
/** Secondary text next to the label. */
|
|
6
|
+
description?: React.ReactNode;
|
|
7
|
+
/** Heading the item is listed under. Groups appear in first-seen order. */
|
|
8
|
+
group?: string;
|
|
9
|
+
icon?: React.ReactNode;
|
|
10
|
+
/** Extra search terms that are not displayed. */
|
|
11
|
+
keywords?: string;
|
|
12
|
+
/** Hint shown on the right, e.g. `<kbd>G</kbd>` or an arrow icon. */
|
|
13
|
+
shortcut?: React.ReactNode;
|
|
14
|
+
disabled?: boolean;
|
|
15
|
+
onSelect?: () => void;
|
|
16
|
+
}
|
|
17
|
+
export interface CommandPaletteProps<T extends CommandItem = CommandItem> {
|
|
18
|
+
items: T[];
|
|
19
|
+
/** Called for any chosen item, after the item's own `onSelect`. */
|
|
20
|
+
onSelect?: (item: T) => void;
|
|
21
|
+
open?: boolean;
|
|
22
|
+
defaultOpen?: boolean;
|
|
23
|
+
onOpenChange?: (open: boolean) => void;
|
|
24
|
+
search?: string;
|
|
25
|
+
defaultSearch?: string;
|
|
26
|
+
onSearchChange?: (search: string) => void;
|
|
27
|
+
/**
|
|
28
|
+
* Custom match function, or `false` when `items` are already filtered (server-side search).
|
|
29
|
+
* By default every term must occur in the label, keywords or group.
|
|
30
|
+
*/
|
|
31
|
+
filter?: ((item: T, search: string) => boolean) | false;
|
|
32
|
+
/** Cap on rendered results. */
|
|
33
|
+
maxResults?: number;
|
|
34
|
+
/** Key that toggles the palette together with Ctrl / ⌘. `false` disables the shortcut. */
|
|
35
|
+
hotkey?: string | false;
|
|
36
|
+
/** Keep the palette open after choosing an item. */
|
|
37
|
+
keepOpenOnSelect?: boolean;
|
|
38
|
+
/** Accessible name of the dialog. */
|
|
39
|
+
title?: string;
|
|
40
|
+
placeholder?: string;
|
|
41
|
+
emptyText?: React.ReactNode;
|
|
42
|
+
/** Show a spinner in the search row while results load. */
|
|
43
|
+
loading?: boolean;
|
|
44
|
+
/** Content below the results (key hints, a retry button…). */
|
|
45
|
+
footer?: React.ReactNode;
|
|
46
|
+
className?: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Searchable command menu in a dialog (Ctrl / ⌘ + K) for navigation and quick
|
|
50
|
+
* actions. Keyboard: arrows move, Enter chooses, Esc closes.
|
|
51
|
+
*/
|
|
52
|
+
export declare function CommandPalette<T extends CommandItem = CommandItem>({ items, onSelect, open: openProp, defaultOpen, onOpenChange, search: searchProp, defaultSearch, onSearchChange, filter, maxResults, hotkey, keepOpenOnSelect, title, placeholder, emptyText, loading, footer, className, }: CommandPaletteProps<T>): React.JSX.Element;
|
|
@@ -0,0 +1,328 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { usePortalContainer } from "../../utils/portal.js";
|
|
3
|
+
import { cx } from "../../utils/cx.js";
|
|
4
|
+
import { SearchIcon } from "../../icons/index.js";
|
|
5
|
+
import { Spinner } from "../spinner/Spinner.js";
|
|
6
|
+
import { matchesQuery } from "../../utils/search.js";
|
|
7
|
+
import { c } from "react/compiler-runtime";
|
|
8
|
+
import * as React from "react";
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
import { Dialog } from "@base-ui/react/dialog";
|
|
11
|
+
//#region src/components/command-palette/CommandPalette.tsx
|
|
12
|
+
function useControlled(value, initial, onChange) {
|
|
13
|
+
const $ = c(5);
|
|
14
|
+
const [inner, setInner] = React.useState(initial);
|
|
15
|
+
let t0;
|
|
16
|
+
if ($[0] !== onChange) {
|
|
17
|
+
t0 = (next) => {
|
|
18
|
+
setInner(next);
|
|
19
|
+
onChange?.(next);
|
|
20
|
+
};
|
|
21
|
+
$[0] = onChange;
|
|
22
|
+
$[1] = t0;
|
|
23
|
+
} else t0 = $[1];
|
|
24
|
+
const set = t0;
|
|
25
|
+
const t1 = value === void 0 ? inner : value;
|
|
26
|
+
let t2;
|
|
27
|
+
if ($[2] !== set || $[3] !== t1) {
|
|
28
|
+
t2 = [t1, set];
|
|
29
|
+
$[2] = set;
|
|
30
|
+
$[3] = t1;
|
|
31
|
+
$[4] = t2;
|
|
32
|
+
} else t2 = $[4];
|
|
33
|
+
return t2;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Searchable command menu in a dialog (Ctrl / ⌘ + K) for navigation and quick
|
|
37
|
+
* actions. Keyboard: arrows move, Enter chooses, Esc closes.
|
|
38
|
+
*/
|
|
39
|
+
function CommandPalette(t0) {
|
|
40
|
+
const $ = c(36);
|
|
41
|
+
const { items, onSelect, open: openProp, defaultOpen: t1, onOpenChange, search: searchProp, defaultSearch: t2, onSearchChange, filter, maxResults: t3, hotkey: t4, keepOpenOnSelect, title: t5, placeholder: t6, emptyText: t7, loading, footer, className } = t0;
|
|
42
|
+
const defaultOpen = t1 === void 0 ? false : t1;
|
|
43
|
+
const defaultSearch = t2 === void 0 ? "" : t2;
|
|
44
|
+
const maxResults = t3 === void 0 ? 50 : t3;
|
|
45
|
+
const hotkey = t4 === void 0 ? "k" : t4;
|
|
46
|
+
const title = t5 === void 0 ? "Command palette" : t5;
|
|
47
|
+
const placeholder = t6 === void 0 ? "Search…" : t6;
|
|
48
|
+
const emptyText = t7 === void 0 ? "No results found." : t7;
|
|
49
|
+
const [open, setOpen] = useControlled(openProp, defaultOpen, onOpenChange);
|
|
50
|
+
const [search, setSearch] = useControlled(searchProp, defaultSearch, onSearchChange);
|
|
51
|
+
const [active, setActive] = React.useState(0);
|
|
52
|
+
const container = usePortalContainer();
|
|
53
|
+
const inputRef = React.useRef(null);
|
|
54
|
+
const listRef = React.useRef(null);
|
|
55
|
+
const baseId = React.useId();
|
|
56
|
+
const toggle = React.useRef(_temp);
|
|
57
|
+
let t8;
|
|
58
|
+
if ($[0] !== open || $[1] !== setOpen) {
|
|
59
|
+
t8 = () => {
|
|
60
|
+
toggle.current = () => setOpen(!open);
|
|
61
|
+
};
|
|
62
|
+
$[0] = open;
|
|
63
|
+
$[1] = setOpen;
|
|
64
|
+
$[2] = t8;
|
|
65
|
+
} else t8 = $[2];
|
|
66
|
+
React.useEffect(t8);
|
|
67
|
+
let t10;
|
|
68
|
+
let t9;
|
|
69
|
+
if ($[3] !== hotkey) {
|
|
70
|
+
t9 = () => {
|
|
71
|
+
if (!hotkey) return;
|
|
72
|
+
const onKeyDown = (event) => {
|
|
73
|
+
if ((event.metaKey || event.ctrlKey) && !event.altKey && event.key.toLowerCase() === hotkey.toLowerCase()) {
|
|
74
|
+
event.preventDefault();
|
|
75
|
+
toggle.current();
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
window.addEventListener("keydown", onKeyDown);
|
|
79
|
+
return () => window.removeEventListener("keydown", onKeyDown);
|
|
80
|
+
};
|
|
81
|
+
t10 = [hotkey];
|
|
82
|
+
$[3] = hotkey;
|
|
83
|
+
$[4] = t10;
|
|
84
|
+
$[5] = t9;
|
|
85
|
+
} else {
|
|
86
|
+
t10 = $[4];
|
|
87
|
+
t9 = $[5];
|
|
88
|
+
}
|
|
89
|
+
React.useEffect(t9, t10);
|
|
90
|
+
const matched = filter === false ? items : items.filter((item) => filter ? filter(item, search) : matchesQuery(`${item.label} ${item.keywords ?? ""} ${item.group ?? ""}`, search));
|
|
91
|
+
const byGroup = /* @__PURE__ */ new Map();
|
|
92
|
+
for (const item_0 of matched.slice(0, maxResults)) {
|
|
93
|
+
const key = item_0.group ?? "";
|
|
94
|
+
byGroup.set(key, [...byGroup.get(key) ?? [], item_0]);
|
|
95
|
+
}
|
|
96
|
+
const groups = [...byGroup].map(_temp2);
|
|
97
|
+
const results = groups.flatMap(_temp3);
|
|
98
|
+
const activeIndex = Math.min(active, Math.max(0, results.length - 1));
|
|
99
|
+
let t11;
|
|
100
|
+
if ($[6] !== baseId) {
|
|
101
|
+
t11 = (index) => `${baseId}-option-${index}`;
|
|
102
|
+
$[6] = baseId;
|
|
103
|
+
$[7] = t11;
|
|
104
|
+
} else t11 = $[7];
|
|
105
|
+
const optionId = t11;
|
|
106
|
+
let t12;
|
|
107
|
+
if ($[8] !== keepOpenOnSelect || $[9] !== onSelect || $[10] !== setOpen) {
|
|
108
|
+
t12 = (item_1) => {
|
|
109
|
+
if (!item_1 || item_1.disabled) return;
|
|
110
|
+
item_1.onSelect?.();
|
|
111
|
+
onSelect?.(item_1);
|
|
112
|
+
if (!keepOpenOnSelect) setOpen(false);
|
|
113
|
+
};
|
|
114
|
+
$[8] = keepOpenOnSelect;
|
|
115
|
+
$[9] = onSelect;
|
|
116
|
+
$[10] = setOpen;
|
|
117
|
+
$[11] = t12;
|
|
118
|
+
} else t12 = $[11];
|
|
119
|
+
const choose = t12;
|
|
120
|
+
const move = (step) => {
|
|
121
|
+
if (!results.length) return;
|
|
122
|
+
let next = activeIndex;
|
|
123
|
+
for (let i = 0; i < results.length; i++) {
|
|
124
|
+
next = (next + step + results.length) % results.length;
|
|
125
|
+
if (!results[next].disabled) break;
|
|
126
|
+
}
|
|
127
|
+
setActive(next);
|
|
128
|
+
listRef.current?.querySelector(`[data-index="${next}"]`)?.scrollIntoView({ block: "nearest" });
|
|
129
|
+
};
|
|
130
|
+
const onKeyDown_0 = (event_0) => {
|
|
131
|
+
if (event_0.key === "ArrowDown" || event_0.key === "ArrowUp") {
|
|
132
|
+
event_0.preventDefault();
|
|
133
|
+
move(event_0.key === "ArrowDown" ? 1 : -1);
|
|
134
|
+
} else if (event_0.key === "Enter" && !event_0.nativeEvent.isComposing) {
|
|
135
|
+
event_0.preventDefault();
|
|
136
|
+
choose(results[activeIndex]);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
let index_0 = -1;
|
|
140
|
+
let t13;
|
|
141
|
+
if ($[12] !== setOpen) {
|
|
142
|
+
t13 = (next_0) => setOpen(next_0);
|
|
143
|
+
$[12] = setOpen;
|
|
144
|
+
$[13] = t13;
|
|
145
|
+
} else t13 = $[13];
|
|
146
|
+
let t14;
|
|
147
|
+
if ($[14] !== search || $[15] !== setSearch) {
|
|
148
|
+
t14 = (next_1) => {
|
|
149
|
+
if (!next_1) {
|
|
150
|
+
setActive(0);
|
|
151
|
+
if (search) setSearch("");
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
$[14] = search;
|
|
155
|
+
$[15] = setSearch;
|
|
156
|
+
$[16] = t14;
|
|
157
|
+
} else t14 = $[16];
|
|
158
|
+
let t15;
|
|
159
|
+
if ($[17] === Symbol.for("react.memo_cache_sentinel")) {
|
|
160
|
+
t15 = /* @__PURE__ */ jsx(Dialog.Backdrop, { className: "oui-dialog__backdrop" });
|
|
161
|
+
$[17] = t15;
|
|
162
|
+
} else t15 = $[17];
|
|
163
|
+
let t16;
|
|
164
|
+
if ($[18] !== className) {
|
|
165
|
+
t16 = cx("oui-command", className);
|
|
166
|
+
$[18] = className;
|
|
167
|
+
$[19] = t16;
|
|
168
|
+
} else t16 = $[19];
|
|
169
|
+
let t17;
|
|
170
|
+
if ($[20] === Symbol.for("react.memo_cache_sentinel")) {
|
|
171
|
+
t17 = /* @__PURE__ */ jsx(SearchIcon, {});
|
|
172
|
+
$[20] = t17;
|
|
173
|
+
} else t17 = $[20];
|
|
174
|
+
let t18;
|
|
175
|
+
if ($[21] !== setSearch) {
|
|
176
|
+
t18 = (event_1) => {
|
|
177
|
+
setSearch(event_1.target.value);
|
|
178
|
+
setActive(0);
|
|
179
|
+
};
|
|
180
|
+
$[21] = setSearch;
|
|
181
|
+
$[22] = t18;
|
|
182
|
+
} else t18 = $[22];
|
|
183
|
+
let t19;
|
|
184
|
+
if ($[23] !== loading) {
|
|
185
|
+
t19 = loading && /* @__PURE__ */ jsx(Spinner, { size: "1rem" });
|
|
186
|
+
$[23] = loading;
|
|
187
|
+
$[24] = t19;
|
|
188
|
+
} else t19 = $[24];
|
|
189
|
+
const t20 = `${baseId}-list`;
|
|
190
|
+
const t21 = "listbox";
|
|
191
|
+
const t22 = "oui-command__list";
|
|
192
|
+
const t23 = groups.map((group_0, groupIndex) => /* @__PURE__ */ jsxs("div", {
|
|
193
|
+
role: "group",
|
|
194
|
+
"aria-labelledby": group_0.heading ? `${baseId}-group-${groupIndex}` : void 0,
|
|
195
|
+
className: "oui-command__group",
|
|
196
|
+
children: [group_0.heading && /* @__PURE__ */ jsx("div", {
|
|
197
|
+
id: `${baseId}-group-${groupIndex}`,
|
|
198
|
+
className: "oui-command__group-label",
|
|
199
|
+
children: group_0.heading
|
|
200
|
+
}), group_0.items.map((item_2) => {
|
|
201
|
+
index_0 = index_0 + 1;
|
|
202
|
+
const itemIndex = index_0;
|
|
203
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
204
|
+
id: optionId(itemIndex),
|
|
205
|
+
role: "option",
|
|
206
|
+
className: "oui-command__item",
|
|
207
|
+
"aria-selected": itemIndex === activeIndex,
|
|
208
|
+
"aria-disabled": item_2.disabled || void 0,
|
|
209
|
+
"data-index": itemIndex,
|
|
210
|
+
"data-highlighted": itemIndex === activeIndex ? "" : void 0,
|
|
211
|
+
"data-disabled": item_2.disabled ? "" : void 0,
|
|
212
|
+
onPointerMove: () => !item_2.disabled && itemIndex !== activeIndex && setActive(itemIndex),
|
|
213
|
+
onClick: () => choose(item_2),
|
|
214
|
+
children: [
|
|
215
|
+
item_2.icon && /* @__PURE__ */ jsx("span", {
|
|
216
|
+
className: "oui-command__item-icon",
|
|
217
|
+
children: item_2.icon
|
|
218
|
+
}),
|
|
219
|
+
/* @__PURE__ */ jsxs("span", {
|
|
220
|
+
className: "oui-command__item-text",
|
|
221
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
222
|
+
className: "oui-command__item-label",
|
|
223
|
+
children: item_2.label
|
|
224
|
+
}), item_2.description && /* @__PURE__ */ jsx("span", {
|
|
225
|
+
className: "oui-command__item-description",
|
|
226
|
+
children: item_2.description
|
|
227
|
+
})]
|
|
228
|
+
}),
|
|
229
|
+
item_2.shortcut && /* @__PURE__ */ jsx("span", {
|
|
230
|
+
className: "oui-command__item-shortcut",
|
|
231
|
+
children: item_2.shortcut
|
|
232
|
+
})
|
|
233
|
+
]
|
|
234
|
+
}, item_2.id);
|
|
235
|
+
})]
|
|
236
|
+
}, group_0.heading));
|
|
237
|
+
let t24;
|
|
238
|
+
if ($[25] !== emptyText || $[26] !== results.length) {
|
|
239
|
+
t24 = !results.length && /* @__PURE__ */ jsx("div", {
|
|
240
|
+
className: "oui-command__empty",
|
|
241
|
+
children: emptyText
|
|
242
|
+
});
|
|
243
|
+
$[25] = emptyText;
|
|
244
|
+
$[26] = results.length;
|
|
245
|
+
$[27] = t24;
|
|
246
|
+
} else t24 = $[27];
|
|
247
|
+
let t25;
|
|
248
|
+
if ($[28] !== listRef || $[29] !== t20 || $[30] !== t23 || $[31] !== t24 || $[32] !== title) {
|
|
249
|
+
t25 = /* @__PURE__ */ jsxs("div", {
|
|
250
|
+
ref: listRef,
|
|
251
|
+
id: t20,
|
|
252
|
+
role: t21,
|
|
253
|
+
"aria-label": title,
|
|
254
|
+
className: t22,
|
|
255
|
+
children: [t23, t24]
|
|
256
|
+
});
|
|
257
|
+
$[28] = listRef;
|
|
258
|
+
$[29] = t20;
|
|
259
|
+
$[30] = t23;
|
|
260
|
+
$[31] = t24;
|
|
261
|
+
$[32] = title;
|
|
262
|
+
$[33] = t25;
|
|
263
|
+
} else t25 = $[33];
|
|
264
|
+
let t26;
|
|
265
|
+
if ($[34] !== footer) {
|
|
266
|
+
t26 = footer && /* @__PURE__ */ jsx("div", {
|
|
267
|
+
className: "oui-command__footer",
|
|
268
|
+
children: footer
|
|
269
|
+
});
|
|
270
|
+
$[34] = footer;
|
|
271
|
+
$[35] = t26;
|
|
272
|
+
} else t26 = $[35];
|
|
273
|
+
return /* @__PURE__ */ jsx(Dialog.Root, {
|
|
274
|
+
open,
|
|
275
|
+
onOpenChange: t13,
|
|
276
|
+
onOpenChangeComplete: t14,
|
|
277
|
+
children: /* @__PURE__ */ jsxs(Dialog.Portal, {
|
|
278
|
+
container,
|
|
279
|
+
children: [t15, /* @__PURE__ */ jsxs(Dialog.Popup, {
|
|
280
|
+
className: t16,
|
|
281
|
+
"aria-label": title,
|
|
282
|
+
initialFocus: inputRef,
|
|
283
|
+
children: [
|
|
284
|
+
/* @__PURE__ */ jsxs("div", {
|
|
285
|
+
className: "oui-command__search",
|
|
286
|
+
children: [
|
|
287
|
+
t17,
|
|
288
|
+
/* @__PURE__ */ jsx("input", {
|
|
289
|
+
ref: inputRef,
|
|
290
|
+
className: "oui-command__input",
|
|
291
|
+
role: "combobox",
|
|
292
|
+
"aria-expanded": true,
|
|
293
|
+
"aria-autocomplete": "list",
|
|
294
|
+
"aria-controls": `${baseId}-list`,
|
|
295
|
+
"aria-activedescendant": results.length ? optionId(activeIndex) : void 0,
|
|
296
|
+
"aria-label": placeholder,
|
|
297
|
+
placeholder,
|
|
298
|
+
autoComplete: "off",
|
|
299
|
+
spellCheck: false,
|
|
300
|
+
value: search,
|
|
301
|
+
onChange: t18,
|
|
302
|
+
onKeyDown: onKeyDown_0
|
|
303
|
+
}),
|
|
304
|
+
t19
|
|
305
|
+
]
|
|
306
|
+
}),
|
|
307
|
+
t25,
|
|
308
|
+
t26
|
|
309
|
+
]
|
|
310
|
+
})]
|
|
311
|
+
})
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
function _temp3(group) {
|
|
315
|
+
return group.items;
|
|
316
|
+
}
|
|
317
|
+
function _temp2(t0) {
|
|
318
|
+
const [heading, groupItems] = t0;
|
|
319
|
+
return {
|
|
320
|
+
heading,
|
|
321
|
+
items: groupItems
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
function _temp() {}
|
|
325
|
+
//#endregion
|
|
326
|
+
export { CommandPalette };
|
|
327
|
+
|
|
328
|
+
//# sourceMappingURL=CommandPalette.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandPalette.js","names":["React","Dialog","BaseDialog","cx","usePortalContainer","matchesQuery","SearchIcon","Spinner","CommandItem","id","label","description","ReactNode","group","icon","keywords","shortcut","disabled","onSelect","CommandPaletteProps","items","T","item","open","defaultOpen","onOpenChange","search","defaultSearch","onSearchChange","filter","maxResults","hotkey","keepOpenOnSelect","title","placeholder","emptyText","loading","footer","className","useControlled","value","initial","onChange","$","_c","inner","setInner","useState","t0","next","set","t1","undefined","t2","const","CommandPalette","openProp","searchProp","t3","t4","t5","t6","t7","setOpen","setSearch","active","setActive","container","inputRef","useRef","listRef","baseId","useId","toggle","_temp","t8","current","useEffect","t10","t9","onKeyDown","event","metaKey","ctrlKey","altKey","key","toLowerCase","preventDefault","window","addEventListener","removeEventListener","matched","byGroup","Map","item_0","slice","get","groups","map","_temp2","results","flatMap","_temp3","activeIndex","Math","min","max","length","t11","index","optionId","t12","item_1","choose","move","step","i","querySelector","scrollIntoView","block","onKeyDown_0","event_0","nativeEvent","isComposing","index_0","t13","next_0","t14","next_1","t15","Symbol","for","t16","t17","t18","event_1","target","t19","t20","t21","t22","t23","group_0","groupIndex","heading","item_2","itemIndex","t24","t25","t26","groupItems","_c","BaseDialog"],"sources":["../../../src/components/command-palette/CommandPalette.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Dialog as BaseDialog } from '@base-ui/react/dialog';\nimport { cx } from '../../utils/cx';\nimport { usePortalContainer } from '../../utils/portal';\nimport { matchesQuery } from '../../utils/search';\nimport { SearchIcon } from '../../icons';\nimport { Spinner } from '../spinner/Spinner';\n\nexport interface CommandItem {\n id: string;\n label: string;\n /** Secondary text next to the label. */\n description?: React.ReactNode;\n /** Heading the item is listed under. Groups appear in first-seen order. */\n group?: string;\n icon?: React.ReactNode;\n /** Extra search terms that are not displayed. */\n keywords?: string;\n /** Hint shown on the right, e.g. `<kbd>G</kbd>` or an arrow icon. */\n shortcut?: React.ReactNode;\n disabled?: boolean;\n onSelect?: () => void;\n}\n\nexport interface CommandPaletteProps<T extends CommandItem = CommandItem> {\n items: T[];\n /** Called for any chosen item, after the item's own `onSelect`. */\n onSelect?: (item: T) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n search?: string;\n defaultSearch?: string;\n onSearchChange?: (search: string) => void;\n /**\n * Custom match function, or `false` when `items` are already filtered (server-side search).\n * By default every term must occur in the label, keywords or group.\n */\n filter?: ((item: T, search: string) => boolean) | false;\n /** Cap on rendered results. */\n maxResults?: number;\n /** Key that toggles the palette together with Ctrl / ⌘. `false` disables the shortcut. */\n hotkey?: string | false;\n /** Keep the palette open after choosing an item. */\n keepOpenOnSelect?: boolean;\n /** Accessible name of the dialog. */\n title?: string;\n placeholder?: string;\n emptyText?: React.ReactNode;\n /** Show a spinner in the search row while results load. */\n loading?: boolean;\n /** Content below the results (key hints, a retry button…). */\n footer?: React.ReactNode;\n className?: string;\n}\n\nfunction useControlled<V>(value: V | undefined, initial: V, onChange?: (value: V) => void) {\n const [inner, setInner] = React.useState(initial);\n const set = (next: V) => {\n setInner(next);\n onChange?.(next);\n };\n return [value === undefined ? inner : value, set] as const;\n}\n\n/**\n * Searchable command menu in a dialog (Ctrl / ⌘ + K) for navigation and quick\n * actions. Keyboard: arrows move, Enter chooses, Esc closes.\n */\nexport function CommandPalette<T extends CommandItem = CommandItem>({\n items,\n onSelect,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n search: searchProp,\n defaultSearch = '',\n onSearchChange,\n filter,\n maxResults = 50,\n hotkey = 'k',\n keepOpenOnSelect,\n title = 'Command palette',\n placeholder = 'Search…',\n emptyText = 'No results found.',\n loading,\n footer,\n className,\n}: CommandPaletteProps<T>) {\n const [open, setOpen] = useControlled(openProp, defaultOpen, onOpenChange);\n const [search, setSearch] = useControlled(searchProp, defaultSearch, onSearchChange);\n const [active, setActive] = React.useState(0);\n const container = usePortalContainer();\n const inputRef = React.useRef<HTMLInputElement>(null);\n const listRef = React.useRef<HTMLDivElement>(null);\n const baseId = React.useId();\n\n // Latest state for the global shortcut without re-subscribing on every render.\n const toggle = React.useRef(() => {});\n React.useEffect(() => {\n toggle.current = () => setOpen(!open);\n });\n React.useEffect(() => {\n if (!hotkey) return;\n const onKeyDown = (event: KeyboardEvent) => {\n if ((event.metaKey || event.ctrlKey) && !event.altKey && event.key.toLowerCase() === hotkey.toLowerCase()) {\n event.preventDefault();\n toggle.current();\n }\n };\n window.addEventListener('keydown', onKeyDown);\n return () => window.removeEventListener('keydown', onKeyDown);\n }, [hotkey]);\n\n // Grouped, in first-seen group order; `results` is the flat keyboard order.\n const matched =\n filter === false\n ? items\n : items.filter((item) =>\n filter ? filter(item, search) : matchesQuery(`${item.label} ${item.keywords ?? ''} ${item.group ?? ''}`, search),\n );\n const byGroup = new Map<string, T[]>();\n for (const item of matched.slice(0, maxResults)) {\n const key = item.group ?? '';\n byGroup.set(key, [...(byGroup.get(key) ?? []), item]);\n }\n const groups = [...byGroup].map(([heading, groupItems]) => ({ heading, items: groupItems }));\n const results = groups.flatMap((group) => group.items);\n\n const activeIndex = Math.min(active, Math.max(0, results.length - 1));\n const optionId = (index: number) => `${baseId}-option-${index}`;\n\n const choose = (item: T | undefined) => {\n if (!item || item.disabled) return;\n item.onSelect?.();\n onSelect?.(item);\n if (!keepOpenOnSelect) setOpen(false);\n };\n\n const move = (step: 1 | -1) => {\n if (!results.length) return;\n let next = activeIndex;\n for (let i = 0; i < results.length; i++) {\n next = (next + step + results.length) % results.length;\n if (!results[next].disabled) break;\n }\n setActive(next);\n listRef.current?.querySelector(`[data-index=\"${next}\"]`)?.scrollIntoView({ block: 'nearest' });\n };\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n move(event.key === 'ArrowDown' ? 1 : -1);\n } else if (event.key === 'Enter' && !event.nativeEvent.isComposing) {\n event.preventDefault();\n choose(results[activeIndex]);\n }\n };\n\n let index = -1;\n return (\n <BaseDialog.Root\n open={open}\n onOpenChange={(next) => setOpen(next)}\n onOpenChangeComplete={(next) => {\n // Start fresh next time, once the closing animation is done.\n if (!next) {\n setActive(0);\n if (search) setSearch('');\n }\n }}\n >\n <BaseDialog.Portal container={container}>\n <BaseDialog.Backdrop className=\"oui-dialog__backdrop\" />\n <BaseDialog.Popup className={cx('oui-command', className)} aria-label={title} initialFocus={inputRef}>\n <div className=\"oui-command__search\">\n <SearchIcon />\n <input\n ref={inputRef}\n className=\"oui-command__input\"\n role=\"combobox\"\n aria-expanded\n aria-autocomplete=\"list\"\n aria-controls={`${baseId}-list`}\n aria-activedescendant={results.length ? optionId(activeIndex) : undefined}\n aria-label={placeholder}\n placeholder={placeholder}\n autoComplete=\"off\"\n spellCheck={false}\n value={search}\n onChange={(event) => {\n setSearch(event.target.value);\n setActive(0);\n }}\n onKeyDown={onKeyDown}\n />\n {loading && <Spinner size=\"1rem\" />}\n </div>\n <div ref={listRef} id={`${baseId}-list`} role=\"listbox\" aria-label={title} className=\"oui-command__list\">\n {groups.map((group, groupIndex) => (\n <div\n key={group.heading}\n role=\"group\"\n aria-labelledby={group.heading ? `${baseId}-group-${groupIndex}` : undefined}\n className=\"oui-command__group\"\n >\n {group.heading && (\n <div id={`${baseId}-group-${groupIndex}`} className=\"oui-command__group-label\">\n {group.heading}\n </div>\n )}\n {group.items.map((item) => {\n index += 1;\n const itemIndex = index;\n return (\n <div\n key={item.id}\n id={optionId(itemIndex)}\n role=\"option\"\n className=\"oui-command__item\"\n aria-selected={itemIndex === activeIndex}\n aria-disabled={item.disabled || undefined}\n data-index={itemIndex}\n data-highlighted={itemIndex === activeIndex ? '' : undefined}\n data-disabled={item.disabled ? '' : undefined}\n onPointerMove={() => !item.disabled && itemIndex !== activeIndex && setActive(itemIndex)}\n onClick={() => choose(item)}\n >\n {item.icon && <span className=\"oui-command__item-icon\">{item.icon}</span>}\n <span className=\"oui-command__item-text\">\n <span className=\"oui-command__item-label\">{item.label}</span>\n {item.description && <span className=\"oui-command__item-description\">{item.description}</span>}\n </span>\n {item.shortcut && <span className=\"oui-command__item-shortcut\">{item.shortcut}</span>}\n </div>\n );\n })}\n </div>\n ))}\n {!results.length && <div className=\"oui-command__empty\">{emptyText}</div>}\n </div>\n {footer && <div className=\"oui-command__footer\">{footer}</div>}\n </BaseDialog.Popup>\n </BaseDialog.Portal>\n </BaseDialog.Root>\n );\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type PaginationProps } from '../pagination/Pagination';
|
|
3
|
+
import { type SearchInputProps } from '../search-input/SearchInput';
|
|
4
|
+
import { DataTableContent, type DataTableContentProps } from './DataTableContent';
|
|
5
|
+
import { DataTableFilter, DataTableFilters, type DataTableControlSize } from './DataTableFilters';
|
|
6
|
+
import type { DataTableInstance, UseDataTableOptions } from './types';
|
|
7
|
+
export { useDataTableContext } from './context';
|
|
8
|
+
export type { DataTableContentProps, DataTableVirtualOptions } from './DataTableContent';
|
|
9
|
+
export type { DataTableControlSize, DataTableFilterProps, DataTableFiltersProps } from './DataTableFilters';
|
|
10
|
+
export interface DataTableRootProps<T> extends React.HTMLAttributes<HTMLDivElement> {
|
|
11
|
+
ref?: React.Ref<HTMLDivElement>;
|
|
12
|
+
/** The table from `useDataTable`. */
|
|
13
|
+
table: DataTableInstance<T>;
|
|
14
|
+
}
|
|
15
|
+
/** Provides a table to the parts inside it. */
|
|
16
|
+
declare function DataTableRoot<T>({ table, className, ref, ...props }: DataTableRootProps<T>): React.JSX.Element;
|
|
17
|
+
export interface DataTableSearchProps extends Omit<SearchInputProps, 'value' | 'defaultValue' | 'onValueChange' | 'className'> {
|
|
18
|
+
className?: string;
|
|
19
|
+
}
|
|
20
|
+
/** Search box of the table. Typing applies after the table's `searchDebounce`; clearing applies at once. */
|
|
21
|
+
declare function DataTableSearch({ className, ...props }: DataTableSearchProps): React.JSX.Element;
|
|
22
|
+
/** Row count, or the number of selected rows, with a spinner while loading. */
|
|
23
|
+
declare function DataTableSummary({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>): React.JSX.Element;
|
|
24
|
+
export interface DataTablePaginationProps extends Omit<PaginationProps, 'page' | 'pageSize' | 'total' | 'onPageChange' | 'onPageSizeChange'> {
|
|
25
|
+
}
|
|
26
|
+
/** Page navigation of the table. Renders nothing when there are no rows, or the table is not paginated. */
|
|
27
|
+
declare function DataTablePagination({ className, ...props }: DataTablePaginationProps): React.JSX.Element | null;
|
|
28
|
+
export interface DataTableToolbarContext<T> {
|
|
29
|
+
/** Rows after filters, search and sorting, across all pages. In server mode: the current page. */
|
|
30
|
+
rows: T[];
|
|
31
|
+
/** Ids of the selected rows. */
|
|
32
|
+
selection: string[];
|
|
33
|
+
/** The whole table: filter values, sort, setters. */
|
|
34
|
+
table: DataTableInstance<T>;
|
|
35
|
+
}
|
|
36
|
+
export interface DataTableProps<T> extends UseDataTableOptions<T>, DataTableContentProps {
|
|
37
|
+
pageSizeOptions?: number[];
|
|
38
|
+
/** Size of the search box and the filters. */
|
|
39
|
+
controlSize?: DataTableControlSize;
|
|
40
|
+
/** Extra toolbar content (export, add…). A function receives the processed rows. */
|
|
41
|
+
toolbar?: React.ReactNode | ((context: DataTableToolbarContext<T>) => React.ReactNode);
|
|
42
|
+
className?: string;
|
|
43
|
+
}
|
|
44
|
+
declare function DataTableComponent<T>({ density, striped, stickyHeader, layout, maxHeight, virtualized, onEndReached, empty, tableProps, pageSizeOptions, controlSize, toolbar, className, ...options }: DataTableProps<T>): React.JSX.Element;
|
|
45
|
+
/**
|
|
46
|
+
* `<DataTable data={…} columns={…} />` renders a complete table with search,
|
|
47
|
+
* filters, sorting, pagination, row selection, row actions and inline editing;
|
|
48
|
+
* columns declare what they take part in. Every piece of state works
|
|
49
|
+
* uncontrolled or controlled (`search` / `filterValues` / `sort` / `page` /
|
|
50
|
+
* `selection`), and with `mode="server"` the same state drives an API.
|
|
51
|
+
*
|
|
52
|
+
* For another layout, create the table with `useDataTable` and compose the
|
|
53
|
+
* parts: `DataTable.Root`, `DataTable.Toolbar`, `DataTable.Search`,
|
|
54
|
+
* `DataTable.Filters`, `DataTable.Filter`, `DataTable.Actions`,
|
|
55
|
+
* `DataTable.Summary`, `DataTable.Content`, `DataTable.Pagination`.
|
|
56
|
+
*/
|
|
57
|
+
export declare const DataTable: typeof DataTableComponent & {
|
|
58
|
+
Root: typeof DataTableRoot;
|
|
59
|
+
Toolbar: {
|
|
60
|
+
(props: import("../../utils/primitive").PrimitiveProps<"div">): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
|
|
61
|
+
displayName: string;
|
|
62
|
+
};
|
|
63
|
+
Search: typeof DataTableSearch;
|
|
64
|
+
Filters: typeof DataTableFilters;
|
|
65
|
+
Filter: typeof DataTableFilter;
|
|
66
|
+
Actions: {
|
|
67
|
+
(props: import("../../utils/primitive").PrimitiveProps<"div">): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
|
|
68
|
+
displayName: string;
|
|
69
|
+
};
|
|
70
|
+
Summary: typeof DataTableSummary;
|
|
71
|
+
Content: typeof DataTableContent;
|
|
72
|
+
Pagination: typeof DataTablePagination;
|
|
73
|
+
};
|