entangle-ui 0.8.2 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +77 -0
- package/dist/esm/assets/src/components/controls/Combobox/Combobox.css.ts.vanilla-B7B5ttkq.css +210 -0
- package/dist/esm/assets/src/components/controls/FileUploader/FileUploader.css.ts.vanilla-T4nRiI7s.css +194 -0
- package/dist/esm/assets/src/components/controls/MultiSelect/MultiSelect.css.ts.vanilla-CdYayqaF.css +311 -0
- package/dist/esm/assets/src/components/controls/TagInput/TagInput.css.ts.vanilla-hnkMOPp1.css +141 -0
- package/dist/esm/assets/src/components/data/DataTable/DataTable.css.ts.vanilla-CmRgtjIW.css +231 -0
- package/dist/esm/assets/src/components/feedback/Alert/{Alert.css.ts.vanilla-CRAI-xHx.css → Alert.css.ts.vanilla-CfCDsIEg.css} +2 -0
- package/dist/esm/assets/src/components/feedback/CommandPalette/CommandPalette.css.ts.vanilla-DGdrLKYZ.css +160 -0
- package/dist/esm/assets/src/components/feedback/Drawer/Drawer.css.ts.vanilla-CLPTOUrA.css +247 -0
- package/dist/esm/assets/src/components/feedback/Skeleton/SkeletonLayout.css.ts.vanilla-Db7bpqiI.css +75 -0
- package/dist/esm/assets/src/components/feedback/Stat/Stat.css.ts.vanilla-GBk3JAMB.css +69 -0
- package/dist/esm/assets/src/components/layout/Card/Card.css.ts.vanilla-Ducn1gUX.css +124 -0
- package/dist/esm/assets/src/components/navigation/Pagination/Pagination.css.ts.vanilla-CmlFyyjh.css +103 -0
- package/dist/esm/assets/src/components/primitives/HoverCard/HoverCard.css.ts.vanilla-BYT0qbLp.css +41 -0
- package/dist/esm/components/Icons/CloudUploadIcon.js +24 -0
- package/dist/esm/components/Icons/CloudUploadIcon.js.map +1 -0
- package/dist/esm/components/Icons/ExternalLinkIcon.js +26 -0
- package/dist/esm/components/Icons/ExternalLinkIcon.js.map +1 -0
- package/dist/esm/components/Icons/FirstIcon.js +23 -0
- package/dist/esm/components/Icons/FirstIcon.js.map +1 -0
- package/dist/esm/components/Icons/LastIcon.js +23 -0
- package/dist/esm/components/Icons/LastIcon.js.map +1 -0
- package/dist/esm/components/Icons/UnlinkIcon.js +26 -0
- package/dist/esm/components/Icons/UnlinkIcon.js.map +1 -0
- package/dist/esm/components/controls/Combobox/Combobox.css.js +20 -0
- package/dist/esm/components/controls/Combobox/Combobox.css.js.map +1 -0
- package/dist/esm/components/controls/Combobox/Combobox.js +354 -0
- package/dist/esm/components/controls/Combobox/Combobox.js.map +1 -0
- package/dist/esm/components/controls/FileUploader/FileUploader.css.js +20 -0
- package/dist/esm/components/controls/FileUploader/FileUploader.css.js.map +1 -0
- package/dist/esm/components/controls/FileUploader/FileUploader.js +264 -0
- package/dist/esm/components/controls/FileUploader/FileUploader.js.map +1 -0
- package/dist/esm/components/controls/MultiSelect/MultiSelect.css.js +23 -0
- package/dist/esm/components/controls/MultiSelect/MultiSelect.css.js.map +1 -0
- package/dist/esm/components/controls/MultiSelect/MultiSelect.js +269 -0
- package/dist/esm/components/controls/MultiSelect/MultiSelect.js.map +1 -0
- package/dist/esm/components/controls/Select/Select.js +5 -4
- package/dist/esm/components/controls/Select/Select.js.map +1 -1
- package/dist/esm/components/controls/TagInput/TagInput.css.js +12 -0
- package/dist/esm/components/controls/TagInput/TagInput.css.js.map +1 -0
- package/dist/esm/components/controls/TagInput/TagInput.js +189 -0
- package/dist/esm/components/controls/TagInput/TagInput.js.map +1 -0
- package/dist/esm/components/controls/TreeView/TreeNode.js +87 -1
- package/dist/esm/components/controls/TreeView/TreeNode.js.map +1 -1
- package/dist/esm/components/controls/VectorInput/VectorInput.js +87 -4
- package/dist/esm/components/controls/VectorInput/VectorInput.js.map +1 -1
- package/dist/esm/components/data/DataTable/DataTable.css.js +25 -0
- package/dist/esm/components/data/DataTable/DataTable.css.js.map +1 -0
- package/dist/esm/components/data/DataTable/DataTable.js +502 -0
- package/dist/esm/components/data/DataTable/DataTable.js.map +1 -0
- package/dist/esm/components/editor/ChatPanel/ChatCodeBlock.js +87 -5
- package/dist/esm/components/editor/ChatPanel/ChatCodeBlock.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatInput.js +87 -5
- package/dist/esm/components/editor/ChatPanel/ChatInput.js.map +1 -1
- package/dist/esm/components/editor/ChatPanel/ChatMessage.js +87 -2
- package/dist/esm/components/editor/ChatPanel/ChatMessage.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.js +87 -3
- package/dist/esm/components/editor/PropertyInspector/PropertyRow.js.map +1 -1
- package/dist/esm/components/editor/PropertyInspector/PropertySection.js +87 -3
- package/dist/esm/components/editor/PropertyInspector/PropertySection.js.map +1 -1
- package/dist/esm/components/feedback/Alert/Alert.css.js +1 -1
- package/dist/esm/components/feedback/Alert/Alert.js +3 -2
- package/dist/esm/components/feedback/Alert/Alert.js.map +1 -1
- package/dist/esm/components/feedback/CommandPalette/CommandPalette.css.js +20 -0
- package/dist/esm/components/feedback/CommandPalette/CommandPalette.css.js.map +1 -0
- package/dist/esm/components/feedback/CommandPalette/CommandPalette.js +261 -0
- package/dist/esm/components/feedback/CommandPalette/CommandPalette.js.map +1 -0
- package/dist/esm/components/feedback/CommandPalette/fuzzySearch.js +86 -0
- package/dist/esm/components/feedback/CommandPalette/fuzzySearch.js.map +1 -0
- package/dist/esm/components/feedback/CommandPalette/useRecentItems.js +63 -0
- package/dist/esm/components/feedback/CommandPalette/useRecentItems.js.map +1 -0
- package/dist/esm/components/feedback/Dialog/DialogHeader.js +2 -1
- package/dist/esm/components/feedback/Dialog/DialogHeader.js.map +1 -1
- package/dist/esm/components/feedback/Drawer/Drawer.css.js +17 -0
- package/dist/esm/components/feedback/Drawer/Drawer.css.js.map +1 -0
- package/dist/esm/components/feedback/Drawer/Drawer.js +120 -0
- package/dist/esm/components/feedback/Drawer/Drawer.js.map +1 -0
- package/dist/esm/components/feedback/Drawer/useDrawerAnimation.js +74 -0
- package/dist/esm/components/feedback/Drawer/useDrawerAnimation.js.map +1 -0
- package/dist/esm/components/feedback/Skeleton/SkeletonLayout.css.js +18 -0
- package/dist/esm/components/feedback/Skeleton/SkeletonLayout.css.js.map +1 -0
- package/dist/esm/components/feedback/Skeleton/SkeletonLayout.js +95 -0
- package/dist/esm/components/feedback/Skeleton/SkeletonLayout.js.map +1 -0
- package/dist/esm/components/feedback/Stat/Stat.css.js +15 -0
- package/dist/esm/components/feedback/Stat/Stat.css.js.map +1 -0
- package/dist/esm/components/feedback/Stat/Stat.js +55 -0
- package/dist/esm/components/feedback/Stat/Stat.js.map +1 -0
- package/dist/esm/components/feedback/Toast/ToastItem.js +12 -15
- package/dist/esm/components/feedback/Toast/ToastItem.js.map +1 -1
- package/dist/esm/components/layout/Accordion/Accordion.js +2 -1
- package/dist/esm/components/layout/Accordion/Accordion.js.map +1 -1
- package/dist/esm/components/layout/Accordion/AccordionTrigger.js +2 -3
- package/dist/esm/components/layout/Accordion/AccordionTrigger.js.map +1 -1
- package/dist/esm/components/layout/Card/Card.css.js +18 -0
- package/dist/esm/components/layout/Card/Card.css.js.map +1 -0
- package/dist/esm/components/layout/Card/Card.js +66 -0
- package/dist/esm/components/layout/Card/Card.js.map +1 -0
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js +1 -0
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js.map +1 -1
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js +1 -0
- package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js.map +1 -1
- package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js +5 -0
- package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js.map +1 -1
- package/dist/esm/components/navigation/Pagination/Pagination.css.js +12 -0
- package/dist/esm/components/navigation/Pagination/Pagination.css.js.map +1 -0
- package/dist/esm/components/navigation/Pagination/Pagination.js +107 -0
- package/dist/esm/components/navigation/Pagination/Pagination.js.map +1 -0
- package/dist/esm/components/navigation/Pagination/usePagination.js +143 -0
- package/dist/esm/components/navigation/Pagination/usePagination.js.map +1 -0
- package/dist/esm/components/primitives/Avatar/Avatar.js +87 -1
- package/dist/esm/components/primitives/Avatar/Avatar.js.map +1 -1
- package/dist/esm/components/primitives/Badge/Badge.js +87 -1
- package/dist/esm/components/primitives/Badge/Badge.js.map +1 -1
- package/dist/esm/components/primitives/Checkbox/Checkbox.js +5 -2
- package/dist/esm/components/primitives/Checkbox/Checkbox.js.map +1 -1
- package/dist/esm/components/primitives/Collapsible/Collapsible.js +2 -3
- package/dist/esm/components/primitives/Collapsible/Collapsible.js.map +1 -1
- package/dist/esm/components/primitives/HoverCard/HoverCard.css.js +7 -0
- package/dist/esm/components/primitives/HoverCard/HoverCard.css.js.map +1 -0
- package/dist/esm/components/primitives/HoverCard/HoverCard.js +169 -0
- package/dist/esm/components/primitives/HoverCard/HoverCard.js.map +1 -0
- package/dist/esm/components/primitives/Icon/Icon.js +16 -2
- package/dist/esm/components/primitives/Icon/Icon.js.map +1 -1
- package/dist/esm/components/primitives/Link/Link.js +3 -3
- package/dist/esm/components/primitives/Link/Link.js.map +1 -1
- package/dist/esm/components/primitives/Popover/PopoverClose.js +2 -3
- package/dist/esm/components/primitives/Popover/PopoverClose.js.map +1 -1
- package/dist/esm/components/primitives/Radio/Radio.js +1 -1
- package/dist/esm/hooks/useBreakpoint/useBreakpoint.js +44 -0
- package/dist/esm/hooks/useBreakpoint/useBreakpoint.js.map +1 -0
- package/dist/esm/hooks/useDebounced/useDebouncedCallback.js +97 -0
- package/dist/esm/hooks/useDebounced/useDebouncedCallback.js.map +1 -0
- package/dist/esm/hooks/useDebounced/useDebouncedValue.js +35 -0
- package/dist/esm/hooks/useDebounced/useDebouncedValue.js.map +1 -0
- package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.js +73 -0
- package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.js.map +1 -0
- package/dist/esm/hooks/useListboxNav/useListboxNav.js +181 -0
- package/dist/esm/hooks/useListboxNav/useListboxNav.js.map +1 -0
- package/dist/esm/hooks/useMediaQuery/useMediaQuery.js +54 -0
- package/dist/esm/hooks/useMediaQuery/useMediaQuery.js.map +1 -0
- package/dist/esm/hooks/useThrottledCallback/useThrottledCallback.js +78 -0
- package/dist/esm/hooks/useThrottledCallback/useThrottledCallback.js.map +1 -0
- package/dist/esm/index.js +25 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/theme/breakpoints.js +27 -0
- package/dist/esm/theme/breakpoints.js.map +1 -0
- package/dist/esm/theme/index.js +1 -0
- package/dist/esm/theme/index.js.map +1 -1
- package/dist/tokens/tokens.dark.css +1 -1
- package/dist/tokens/tokens.json +1 -1
- package/dist/tokens/tokens.light.css +1 -1
- package/dist/types/components/Icons/CloudUploadIcon.d.ts +27 -0
- package/dist/types/components/Icons/ExternalLinkIcon.d.ts +29 -0
- package/dist/types/components/Icons/FirstIcon.d.ts +26 -0
- package/dist/types/components/Icons/LastIcon.d.ts +26 -0
- package/dist/types/components/Icons/UnlinkIcon.d.ts +29 -0
- package/dist/types/components/controls/Combobox/Combobox.d.ts +29 -0
- package/dist/types/components/controls/Combobox/Combobox.types.d.ts +109 -0
- package/dist/types/components/controls/FileUploader/FileUploader.d.ts +34 -0
- package/dist/types/components/controls/FileUploader/FileUploader.types.d.ts +94 -0
- package/dist/types/components/controls/MultiSelect/MultiSelect.d.ts +31 -0
- package/dist/types/components/controls/MultiSelect/MultiSelect.types.d.ts +85 -0
- package/dist/types/components/controls/TagInput/TagInput.d.ts +24 -0
- package/dist/types/components/controls/TagInput/TagInput.types.d.ts +100 -0
- package/dist/types/components/data/DataTable/DataTable.d.ts +8 -0
- package/dist/types/components/data/DataTable/DataTable.types.d.ts +159 -0
- package/dist/types/components/feedback/Alert/Alert.d.ts +1 -0
- package/dist/types/components/feedback/Alert/Alert.types.d.ts +7 -0
- package/dist/types/components/feedback/CommandPalette/CommandPalette.d.ts +29 -0
- package/dist/types/components/feedback/CommandPalette/CommandPalette.types.d.ts +61 -0
- package/dist/types/components/feedback/CommandPalette/fuzzySearch.d.ts +6 -0
- package/dist/types/components/feedback/Drawer/Drawer.d.ts +12 -0
- package/dist/types/components/feedback/Drawer/Drawer.types.d.ts +70 -0
- package/dist/types/components/feedback/Skeleton/Skeleton.types.d.ts +44 -1
- package/dist/types/components/feedback/Skeleton/SkeletonLayout.d.ts +314 -0
- package/dist/types/components/feedback/Stat/Stat.d.ts +23 -0
- package/dist/types/components/feedback/Stat/Stat.types.d.ts +38 -0
- package/dist/types/components/layout/Accordion/Accordion.types.d.ts +7 -0
- package/dist/types/components/layout/Card/Card.d.ts +12 -0
- package/dist/types/components/layout/Card/Card.types.d.ts +54 -0
- package/dist/types/components/navigation/Pagination/Pagination.d.ts +22 -0
- package/dist/types/components/navigation/Pagination/Pagination.types.d.ts +49 -0
- package/dist/types/components/primitives/Button/Button.d.ts +1 -1
- package/dist/types/components/primitives/HoverCard/HoverCard.d.ts +10 -0
- package/dist/types/components/primitives/HoverCard/HoverCard.types.d.ts +64 -0
- package/dist/types/components/primitives/Icon/Icon.d.ts +14 -1
- package/dist/types/components/primitives/IconButton/IconButton.d.ts +1 -1
- package/dist/types/hooks/useBreakpoint/useBreakpoint.d.ts +19 -0
- package/dist/types/hooks/useBreakpoint/useBreakpoint.types.d.ts +20 -0
- package/dist/types/hooks/useDebounced/useDebounced.types.d.ts +15 -0
- package/dist/types/hooks/useDebounced/useDebouncedCallback.d.ts +22 -0
- package/dist/types/hooks/useDebounced/useDebouncedValue.d.ts +16 -0
- package/dist/types/hooks/useIntersectionObserver/useIntersectionObserver.d.ts +22 -0
- package/dist/types/hooks/useIntersectionObserver/useIntersectionObserver.types.d.ts +22 -0
- package/dist/types/hooks/useListboxNav/useListboxNav.d.ts +75 -0
- package/dist/types/hooks/useMediaQuery/useMediaQuery.d.ts +19 -0
- package/dist/types/hooks/useMediaQuery/useMediaQuery.types.d.ts +6 -0
- package/dist/types/hooks/useThrottledCallback/useThrottledCallback.d.ts +23 -0
- package/dist/types/hooks/useThrottledCallback/useThrottledCallback.types.d.ts +13 -0
- package/dist/types/index.d.ts +43 -1
- package/dist/types/theme/breakpoints.d.ts +22 -0
- package/dist/types/theme/index.d.ts +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ComboboxProps } from './Combobox.types.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Single-value select with an editable input. Filters the option list as the
|
|
6
|
+
* user types (built-in fuzzy matcher, configurable via `filterFn`), supports
|
|
7
|
+
* controlled and uncontrolled modes, optional `freeSolo` typing, optional
|
|
8
|
+
* `creatable` mode for adding new entries, and an `loading` state for async
|
|
9
|
+
* data sources.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```tsx
|
|
13
|
+
* <Combobox
|
|
14
|
+
* label="Framework"
|
|
15
|
+
* options={[
|
|
16
|
+
* { value: 'react', label: 'React' },
|
|
17
|
+
* { value: 'vue', label: 'Vue' },
|
|
18
|
+
* ]}
|
|
19
|
+
* value={framework}
|
|
20
|
+
* onChange={setFramework}
|
|
21
|
+
* />
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
declare function Combobox<T extends string = string>({ value, defaultValue, options, placeholder, filterFn, emptyMessage, loading, loadingMessage, freeSolo, creatable, createLabel, openOnFocus, size, variant, label, helperText, error, errorMessage, disabled, required, readOnly, clearable, maxDropdownHeight, minDropdownWidth, name, onChange, onInputChange, onCreate, onOpenChange, className, style, testId, ref, id: idProp, ...rest }: ComboboxProps<T>): react_jsx_runtime.JSX.Element;
|
|
25
|
+
declare namespace Combobox {
|
|
26
|
+
var displayName: string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export { Combobox };
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { BaseComponent, Size } from '../../../types/common.js';
|
|
3
|
+
import { Prettify } from '../../../types/utilities.js';
|
|
4
|
+
|
|
5
|
+
type ComboboxSize = Size;
|
|
6
|
+
type ComboboxVariant = 'default' | 'ghost' | 'filled';
|
|
7
|
+
interface ComboboxOption<T extends string = string> {
|
|
8
|
+
/** Unique value used for selection */
|
|
9
|
+
value: T;
|
|
10
|
+
/** Display label (falls back to value when omitted) */
|
|
11
|
+
label?: string;
|
|
12
|
+
/** Optional description rendered next to the label */
|
|
13
|
+
description?: string;
|
|
14
|
+
/** Optional icon rendered before the label */
|
|
15
|
+
icon?: React.ReactNode;
|
|
16
|
+
/** Whether this option is disabled */
|
|
17
|
+
disabled?: boolean;
|
|
18
|
+
}
|
|
19
|
+
interface ComboboxBaseProps<T extends string = string> extends Omit<BaseComponent<HTMLInputElement>, 'onChange' | 'value' | 'defaultValue' | 'children'> {
|
|
20
|
+
/** Controlled selected value */
|
|
21
|
+
value?: T | null;
|
|
22
|
+
/** Default selected value (uncontrolled) */
|
|
23
|
+
defaultValue?: T;
|
|
24
|
+
/** Available options */
|
|
25
|
+
options: ComboboxOption<T>[];
|
|
26
|
+
/** Placeholder rendered when the input is empty */
|
|
27
|
+
placeholder?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Custom filter function. Receives the raw query and the option, returns
|
|
30
|
+
* either a boolean (`true` to keep) or a numeric score (higher = better).
|
|
31
|
+
* When omitted, options are filtered by the built-in fuzzy matcher
|
|
32
|
+
* (`fuzzyScore`).
|
|
33
|
+
*/
|
|
34
|
+
filterFn?: (option: ComboboxOption<T>, query: string) => boolean | number;
|
|
35
|
+
/** Message shown when filtering yields no results */
|
|
36
|
+
emptyMessage?: string;
|
|
37
|
+
/** Loading indicator state — replaces options with a spinner row */
|
|
38
|
+
loading?: boolean;
|
|
39
|
+
/** Message shown while loading */
|
|
40
|
+
loadingMessage?: string;
|
|
41
|
+
/**
|
|
42
|
+
* Allow values not present in `options`. The `onChange` handler still fires
|
|
43
|
+
* with the user-typed string when the input is blurred or `Enter` is pressed
|
|
44
|
+
* with no active suggestion.
|
|
45
|
+
* @default false
|
|
46
|
+
*/
|
|
47
|
+
freeSolo?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* When true the user can create a brand new option by pressing Enter on a
|
|
50
|
+
* value that doesn't match any existing option. The `onCreate` callback (or
|
|
51
|
+
* `onChange` when omitted) is invoked. Implies `freeSolo`.
|
|
52
|
+
* @default false
|
|
53
|
+
*/
|
|
54
|
+
creatable?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* Render the "create" row when `creatable` is true and the query has no
|
|
57
|
+
* exact match. Defaults to `'Create "<query>"'`.
|
|
58
|
+
*/
|
|
59
|
+
createLabel?: (query: string) => React.ReactNode;
|
|
60
|
+
/**
|
|
61
|
+
* Open the dropdown automatically when the input gains focus, even when no
|
|
62
|
+
* query is typed yet.
|
|
63
|
+
* @default false
|
|
64
|
+
*/
|
|
65
|
+
openOnFocus?: boolean;
|
|
66
|
+
/** Component size */
|
|
67
|
+
size?: ComboboxSize;
|
|
68
|
+
/** Visual variant */
|
|
69
|
+
variant?: ComboboxVariant;
|
|
70
|
+
/** Label rendered above the input */
|
|
71
|
+
label?: string;
|
|
72
|
+
/** Helper text rendered below */
|
|
73
|
+
helperText?: string;
|
|
74
|
+
/** Error state */
|
|
75
|
+
error?: boolean;
|
|
76
|
+
/** Error message — overrides `helperText` when `error` is true */
|
|
77
|
+
errorMessage?: string;
|
|
78
|
+
/** Disable the input */
|
|
79
|
+
disabled?: boolean;
|
|
80
|
+
/** Mark the field as required */
|
|
81
|
+
required?: boolean;
|
|
82
|
+
/** Read-only — input value is fixed */
|
|
83
|
+
readOnly?: boolean;
|
|
84
|
+
/** Show a clear button when a value is selected */
|
|
85
|
+
clearable?: boolean;
|
|
86
|
+
/** Maximum dropdown height in pixels */
|
|
87
|
+
maxDropdownHeight?: number;
|
|
88
|
+
/** Minimum dropdown width in pixels */
|
|
89
|
+
minDropdownWidth?: number;
|
|
90
|
+
/** Hidden form-input name */
|
|
91
|
+
name?: string;
|
|
92
|
+
/** Selection change handler. `null` is passed when the value is cleared. */
|
|
93
|
+
onChange?: (value: T | null) => void;
|
|
94
|
+
/**
|
|
95
|
+
* Free-text change handler. Fires every keystroke regardless of selection
|
|
96
|
+
* status. Useful for async option loading.
|
|
97
|
+
*/
|
|
98
|
+
onInputChange?: (input: string) => void;
|
|
99
|
+
/**
|
|
100
|
+
* Called when the user creates a new option (only when `creatable` is set).
|
|
101
|
+
* Falls back to `onChange` with the typed string cast as `T` when omitted.
|
|
102
|
+
*/
|
|
103
|
+
onCreate?: (input: string) => void;
|
|
104
|
+
/** Open state change handler */
|
|
105
|
+
onOpenChange?: (open: boolean) => void;
|
|
106
|
+
}
|
|
107
|
+
type ComboboxProps<T extends string = string> = Prettify<ComboboxBaseProps<T>>;
|
|
108
|
+
|
|
109
|
+
export type { ComboboxBaseProps, ComboboxOption, ComboboxProps, ComboboxSize, ComboboxVariant };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { FileUploaderProps } from './FileUploader.types.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Drag-and-drop file uploader with click-to-browse fallback. Renders a list
|
|
6
|
+
* of uploaded items with per-file status (`pending` / `uploading` / `done` /
|
|
7
|
+
* `error`) and an animated progress bar.
|
|
8
|
+
*
|
|
9
|
+
* The component itself is purely presentational around the file list — it
|
|
10
|
+
* does not perform the actual upload. The consumer is expected to:
|
|
11
|
+
* 1. Listen to `onFilesAdd` (or `onChange`) to know which files were
|
|
12
|
+
* accepted by the uploader.
|
|
13
|
+
* 2. Drive the upload (fetch / XHR / SDK) externally.
|
|
14
|
+
* 3. Reflect progress back into the component by passing a controlled
|
|
15
|
+
* `value` and updating the `status` / `progress` of each item.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```tsx
|
|
19
|
+
* const [items, setItems] = useState<FileUploaderItem[]>([]);
|
|
20
|
+
* <FileUploader
|
|
21
|
+
* value={items}
|
|
22
|
+
* onChange={setItems}
|
|
23
|
+
* accept="image/*,.pdf"
|
|
24
|
+
* maxSize={5 * 1024 * 1024}
|
|
25
|
+
* onFilesAdd={files => uploadAll(files, setItems)}
|
|
26
|
+
* />
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
declare function FileUploader({ value, defaultValue, onChange, onFilesAdd, onFileRemove, onReject, accept, multiple, maxFiles, maxSize, minSize, validate, renderItem, size, label, helperText, error, errorMessage, disabled, required, dropZoneText, dropZoneHint, name, className, style, testId, id: idProp, ref, ...rest }: FileUploaderProps): react_jsx_runtime.JSX.Element;
|
|
30
|
+
declare namespace FileUploader {
|
|
31
|
+
var displayName: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { FileUploader };
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { BaseComponent, Size } from '../../../types/common.js';
|
|
3
|
+
import { Prettify } from '../../../types/utilities.js';
|
|
4
|
+
|
|
5
|
+
type FileUploaderSize = Size;
|
|
6
|
+
type FileUploaderItemStatus = 'pending' | 'uploading' | 'done' | 'error';
|
|
7
|
+
interface FileUploaderItem {
|
|
8
|
+
/** Stable identifier — generated for new items, preserved across renders */
|
|
9
|
+
id: string;
|
|
10
|
+
/** Underlying File object */
|
|
11
|
+
file: File;
|
|
12
|
+
/** Current status of the upload pipeline */
|
|
13
|
+
status: FileUploaderItemStatus;
|
|
14
|
+
/** Upload progress, 0-100. Optional in `pending` / `done` states. */
|
|
15
|
+
progress?: number;
|
|
16
|
+
/** Error message displayed when `status === 'error'` */
|
|
17
|
+
errorMessage?: string;
|
|
18
|
+
}
|
|
19
|
+
type FileUploaderRejectReason = 'too-large' | 'too-small' | 'wrong-type' | 'max-files' | 'invalid' | (string & {});
|
|
20
|
+
interface FileUploaderRenderItemState {
|
|
21
|
+
item: FileUploaderItem;
|
|
22
|
+
index: number;
|
|
23
|
+
remove: () => void;
|
|
24
|
+
disabled: boolean;
|
|
25
|
+
}
|
|
26
|
+
interface FileUploaderBaseProps extends Omit<BaseComponent<HTMLDivElement>, 'onChange' | 'children' | 'defaultValue'> {
|
|
27
|
+
/** Controlled list of items */
|
|
28
|
+
value?: FileUploaderItem[];
|
|
29
|
+
/** Default list (uncontrolled) */
|
|
30
|
+
defaultValue?: FileUploaderItem[];
|
|
31
|
+
/** Called whenever the items list changes */
|
|
32
|
+
onChange?: (items: FileUploaderItem[]) => void;
|
|
33
|
+
/**
|
|
34
|
+
* Called with the raw `File` objects that were just accepted (after type/size
|
|
35
|
+
* validation, before they appear in the list as `pending`). The consumer
|
|
36
|
+
* should kick off the upload here and update `value` as progress changes.
|
|
37
|
+
*/
|
|
38
|
+
onFilesAdd?: (files: File[]) => void;
|
|
39
|
+
/** Called when a single item is removed */
|
|
40
|
+
onFileRemove?: (item: FileUploaderItem) => void;
|
|
41
|
+
/** Called for files rejected by validation */
|
|
42
|
+
onReject?: (file: File, reason: FileUploaderRejectReason) => void;
|
|
43
|
+
/**
|
|
44
|
+
* Comma-separated list of accepted MIME types and/or extensions, e.g.
|
|
45
|
+
* `'image/*,.pdf'`. When omitted, every file type is accepted.
|
|
46
|
+
*/
|
|
47
|
+
accept?: string;
|
|
48
|
+
/**
|
|
49
|
+
* Allow selecting more than one file at a time.
|
|
50
|
+
* @default true
|
|
51
|
+
*/
|
|
52
|
+
multiple?: boolean;
|
|
53
|
+
/**
|
|
54
|
+
* Maximum number of files the uploader will hold. Additional files are
|
|
55
|
+
* rejected with reason `'max-files'`.
|
|
56
|
+
*/
|
|
57
|
+
maxFiles?: number;
|
|
58
|
+
/** Maximum file size in bytes. Files above are rejected as `'too-large'`. */
|
|
59
|
+
maxSize?: number;
|
|
60
|
+
/** Minimum file size in bytes. Files below are rejected as `'too-small'`. */
|
|
61
|
+
minSize?: number;
|
|
62
|
+
/**
|
|
63
|
+
* Synchronous validator. Return `false` (or a string with a reason) to
|
|
64
|
+
* reject. Called after type/size checks pass.
|
|
65
|
+
*/
|
|
66
|
+
validate?: (file: File) => boolean | string;
|
|
67
|
+
/**
|
|
68
|
+
* Custom renderer for a file row. When omitted the built-in row is used.
|
|
69
|
+
*/
|
|
70
|
+
renderItem?: (state: FileUploaderRenderItemState) => React.ReactNode;
|
|
71
|
+
/** Component size */
|
|
72
|
+
size?: FileUploaderSize;
|
|
73
|
+
/** Label rendered above the dropzone */
|
|
74
|
+
label?: string;
|
|
75
|
+
/** Helper text rendered below */
|
|
76
|
+
helperText?: string;
|
|
77
|
+
/** Error state */
|
|
78
|
+
error?: boolean;
|
|
79
|
+
/** Error message — overrides `helperText` when `error` is true */
|
|
80
|
+
errorMessage?: string;
|
|
81
|
+
/** Disable interaction with the uploader */
|
|
82
|
+
disabled?: boolean;
|
|
83
|
+
/** Mark the field as required */
|
|
84
|
+
required?: boolean;
|
|
85
|
+
/** Primary text shown inside the dropzone */
|
|
86
|
+
dropZoneText?: React.ReactNode;
|
|
87
|
+
/** Secondary text shown inside the dropzone */
|
|
88
|
+
dropZoneHint?: React.ReactNode;
|
|
89
|
+
/** Hidden form-input name attribute (for native form submission) */
|
|
90
|
+
name?: string;
|
|
91
|
+
}
|
|
92
|
+
type FileUploaderProps = Prettify<FileUploaderBaseProps>;
|
|
93
|
+
|
|
94
|
+
export type { FileUploaderBaseProps, FileUploaderItem, FileUploaderItemStatus, FileUploaderProps, FileUploaderRejectReason, FileUploaderRenderItemState, FileUploaderSize };
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { MultiSelectProps } from './MultiSelect.types.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Multi-value select that lets the user pick several options from a dropdown.
|
|
6
|
+
* Selected values are rendered as inline chips inside the trigger; the rest
|
|
7
|
+
* collapse into a "+N more" badge.
|
|
8
|
+
*
|
|
9
|
+
* Supports searchable mode, grouped options, controlled and uncontrolled
|
|
10
|
+
* modes, keyboard navigation, an optional `max` cap, and a clear-all button.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* <MultiSelect
|
|
15
|
+
* label="Tags"
|
|
16
|
+
* options={[
|
|
17
|
+
* { value: 'react', label: 'React' },
|
|
18
|
+
* { value: 'vue', label: 'Vue' },
|
|
19
|
+
* { value: 'svelte', label: 'Svelte' },
|
|
20
|
+
* ]}
|
|
21
|
+
* value={tags}
|
|
22
|
+
* onChange={setTags}
|
|
23
|
+
* />
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
declare function MultiSelect<T extends string = string>({ value, defaultValue, options, placeholder, searchable, searchPlaceholder, filterFn, emptyMessage, max, maxInlineChips, size, variant, label, helperText, error, errorMessage, disabled, required, clearable, maxDropdownHeight, minDropdownWidth, closeOnSelect, name, onChange, onOpenChange, className, style, testId, ref, id: idProp, ...rest }: MultiSelectProps<T>): react_jsx_runtime.JSX.Element;
|
|
27
|
+
declare namespace MultiSelect {
|
|
28
|
+
var displayName: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export { MultiSelect };
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { BaseComponent, Size } from '../../../types/common.js';
|
|
3
|
+
import { Prettify } from '../../../types/utilities.js';
|
|
4
|
+
|
|
5
|
+
type MultiSelectSize = Size;
|
|
6
|
+
type MultiSelectVariant = 'default' | 'ghost' | 'filled';
|
|
7
|
+
interface MultiSelectOption<T extends string = string> {
|
|
8
|
+
/** Unique value used for selection */
|
|
9
|
+
value: T;
|
|
10
|
+
/** Display label (falls back to value when omitted) */
|
|
11
|
+
label?: string;
|
|
12
|
+
/** Optional icon rendered before the label */
|
|
13
|
+
icon?: React.ReactNode;
|
|
14
|
+
/** Whether this option is disabled */
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
}
|
|
17
|
+
interface MultiSelectOptionGroup<T extends string = string> {
|
|
18
|
+
/** Group header label */
|
|
19
|
+
label: string;
|
|
20
|
+
/** Options inside this group */
|
|
21
|
+
options: MultiSelectOption<T>[];
|
|
22
|
+
}
|
|
23
|
+
interface MultiSelectBaseProps<T extends string = string> extends Omit<BaseComponent<HTMLButtonElement>, 'onChange' | 'value' | 'defaultValue' | 'children'> {
|
|
24
|
+
/** Controlled list of selected values */
|
|
25
|
+
value?: T[];
|
|
26
|
+
/** Default selection (uncontrolled) */
|
|
27
|
+
defaultValue?: T[];
|
|
28
|
+
/** Options — flat list or grouped */
|
|
29
|
+
options: Array<MultiSelectOption<T> | MultiSelectOptionGroup<T>>;
|
|
30
|
+
/** Placeholder shown when nothing is selected */
|
|
31
|
+
placeholder?: string;
|
|
32
|
+
/** Whether to render a search input inside the dropdown */
|
|
33
|
+
searchable?: boolean;
|
|
34
|
+
/** Placeholder for the search input */
|
|
35
|
+
searchPlaceholder?: string;
|
|
36
|
+
/** Custom filter for searchable mode */
|
|
37
|
+
filterFn?: (option: MultiSelectOption<T>, query: string) => boolean;
|
|
38
|
+
/** Message shown when search yields no results */
|
|
39
|
+
emptyMessage?: string;
|
|
40
|
+
/** Maximum number of selected items */
|
|
41
|
+
max?: number;
|
|
42
|
+
/**
|
|
43
|
+
* Cap of inline chips rendered in the trigger before falling back to a
|
|
44
|
+
* "+N more" badge. `Infinity` to render every chip. Set to `0` to never
|
|
45
|
+
* render chips and only show the count.
|
|
46
|
+
* @default 3
|
|
47
|
+
*/
|
|
48
|
+
maxInlineChips?: number;
|
|
49
|
+
/** Component size */
|
|
50
|
+
size?: MultiSelectSize;
|
|
51
|
+
/** Visual variant */
|
|
52
|
+
variant?: MultiSelectVariant;
|
|
53
|
+
/** Label rendered above the trigger */
|
|
54
|
+
label?: string;
|
|
55
|
+
/** Helper text rendered below */
|
|
56
|
+
helperText?: string;
|
|
57
|
+
/** Error state */
|
|
58
|
+
error?: boolean;
|
|
59
|
+
/** Error message — overrides `helperText` when `error` is true */
|
|
60
|
+
errorMessage?: string;
|
|
61
|
+
/** Disable the entire control */
|
|
62
|
+
disabled?: boolean;
|
|
63
|
+
/** Mark the field as required */
|
|
64
|
+
required?: boolean;
|
|
65
|
+
/** Show a clear-all button when at least one value is selected */
|
|
66
|
+
clearable?: boolean;
|
|
67
|
+
/** Maximum dropdown height in pixels */
|
|
68
|
+
maxDropdownHeight?: number;
|
|
69
|
+
/** Minimum dropdown width in pixels */
|
|
70
|
+
minDropdownWidth?: number;
|
|
71
|
+
/**
|
|
72
|
+
* Close the dropdown after each selection.
|
|
73
|
+
* @default false
|
|
74
|
+
*/
|
|
75
|
+
closeOnSelect?: boolean;
|
|
76
|
+
/** Hidden form-input name. Selected values are joined by `,`. */
|
|
77
|
+
name?: string;
|
|
78
|
+
/** Selection change handler */
|
|
79
|
+
onChange?: (values: T[]) => void;
|
|
80
|
+
/** Open state change handler */
|
|
81
|
+
onOpenChange?: (open: boolean) => void;
|
|
82
|
+
}
|
|
83
|
+
type MultiSelectProps<T extends string = string> = Prettify<MultiSelectBaseProps<T>>;
|
|
84
|
+
|
|
85
|
+
export type { MultiSelectBaseProps, MultiSelectOption, MultiSelectOptionGroup, MultiSelectProps, MultiSelectSize, MultiSelectVariant };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { TagInputProps } from './TagInput.types.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Multi-value input that captures a list of strings ("tags") rendered as
|
|
6
|
+
* removable chips. Supports controlled and uncontrolled modes, validation,
|
|
7
|
+
* configurable commit keys, and custom chip rendering.
|
|
8
|
+
*
|
|
9
|
+
* @example
|
|
10
|
+
* ```tsx
|
|
11
|
+
* <TagInput
|
|
12
|
+
* label="Keywords"
|
|
13
|
+
* placeholder="Add a keyword..."
|
|
14
|
+
* defaultValue={['react', 'typescript']}
|
|
15
|
+
* onChange={setTags}
|
|
16
|
+
* />
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
declare function TagInput({ value, defaultValue, onChange, placeholder, separators, addOnBlur, allowDuplicates, max, validate, normalize, onValidate, renderTag, size, variant, label, helperText, error, errorMessage, disabled, required, readOnly, name, inputAriaLabel, inputRef: inputRefProp, className, style, testId, id: idProp, ref, ...rest }: TagInputProps): react_jsx_runtime.JSX.Element;
|
|
20
|
+
declare namespace TagInput {
|
|
21
|
+
var displayName: string;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { TagInput };
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { BaseComponent, Size } from '../../../types/common.js';
|
|
3
|
+
import { Prettify } from '../../../types/utilities.js';
|
|
4
|
+
|
|
5
|
+
type TagInputSize = Size;
|
|
6
|
+
type TagInputVariant = 'default' | 'ghost' | 'filled';
|
|
7
|
+
/** Keys (or characters) that commit the current draft as a tag. */
|
|
8
|
+
type TagInputSeparator = 'Enter' | 'Comma' | 'Space' | 'Tab';
|
|
9
|
+
interface TagInputRenderTagState {
|
|
10
|
+
/** Tag value */
|
|
11
|
+
tag: string;
|
|
12
|
+
/** Position in the array */
|
|
13
|
+
index: number;
|
|
14
|
+
/** Whether the parent component is disabled */
|
|
15
|
+
disabled: boolean;
|
|
16
|
+
/** Remove this tag */
|
|
17
|
+
remove: () => void;
|
|
18
|
+
}
|
|
19
|
+
interface TagInputBaseProps extends Omit<BaseComponent<HTMLDivElement>, 'onChange' | 'defaultValue' | 'children'> {
|
|
20
|
+
/** Controlled list of tags */
|
|
21
|
+
value?: string[];
|
|
22
|
+
/** Default tags (uncontrolled) */
|
|
23
|
+
defaultValue?: string[];
|
|
24
|
+
/** Called whenever the tag list changes */
|
|
25
|
+
onChange?: (tags: string[]) => void;
|
|
26
|
+
/** Placeholder shown in the inner input when empty */
|
|
27
|
+
placeholder?: string;
|
|
28
|
+
/**
|
|
29
|
+
* Keys / characters that commit the current draft to a tag.
|
|
30
|
+
* @default ['Enter', 'Comma']
|
|
31
|
+
*/
|
|
32
|
+
separators?: TagInputSeparator[];
|
|
33
|
+
/**
|
|
34
|
+
* Add the current draft as a tag when the input loses focus.
|
|
35
|
+
* @default false
|
|
36
|
+
*/
|
|
37
|
+
addOnBlur?: boolean;
|
|
38
|
+
/**
|
|
39
|
+
* Allow duplicate tags. When `false`, attempts to add an existing tag
|
|
40
|
+
* are ignored (and `onValidate` receives `'duplicate'`).
|
|
41
|
+
* @default false
|
|
42
|
+
*/
|
|
43
|
+
allowDuplicates?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Maximum number of tags. When reached, the input is disabled.
|
|
46
|
+
*/
|
|
47
|
+
max?: number;
|
|
48
|
+
/**
|
|
49
|
+
* Synchronous validator. Return `false` (or a string with an error message)
|
|
50
|
+
* to reject the candidate value. Return `true` to accept.
|
|
51
|
+
*/
|
|
52
|
+
validate?: (value: string, current: string[]) => boolean | string;
|
|
53
|
+
/**
|
|
54
|
+
* Transform the candidate before validation. Defaults to trimming.
|
|
55
|
+
*/
|
|
56
|
+
normalize?: (value: string) => string;
|
|
57
|
+
/**
|
|
58
|
+
* Called when a candidate fails validation. Receives the raw value, the
|
|
59
|
+
* normalized value, and the reason (`'duplicate'`, `'max'`, `'empty'`,
|
|
60
|
+
* `'invalid'`, or the validator's string).
|
|
61
|
+
*/
|
|
62
|
+
onValidate?: (rawValue: string, reason: 'duplicate' | 'max' | 'empty' | 'invalid' | (string & {})) => void;
|
|
63
|
+
/**
|
|
64
|
+
* Render a single chip. When omitted the built-in chip is used.
|
|
65
|
+
*/
|
|
66
|
+
renderTag?: (state: TagInputRenderTagState) => React.ReactNode;
|
|
67
|
+
/**
|
|
68
|
+
* Component size.
|
|
69
|
+
* @default 'md'
|
|
70
|
+
*/
|
|
71
|
+
size?: TagInputSize;
|
|
72
|
+
/**
|
|
73
|
+
* Visual variant for the wrapper.
|
|
74
|
+
* @default 'default'
|
|
75
|
+
*/
|
|
76
|
+
variant?: TagInputVariant;
|
|
77
|
+
/** Label rendered above the input */
|
|
78
|
+
label?: string;
|
|
79
|
+
/** Helper text rendered below the input */
|
|
80
|
+
helperText?: string;
|
|
81
|
+
/** Error state */
|
|
82
|
+
error?: boolean;
|
|
83
|
+
/** Error message — shown in place of `helperText` when `error` is true */
|
|
84
|
+
errorMessage?: string;
|
|
85
|
+
/** Disable the entire control */
|
|
86
|
+
disabled?: boolean;
|
|
87
|
+
/** Mark the field as required */
|
|
88
|
+
required?: boolean;
|
|
89
|
+
/** Read-only — chips are visible but not removable, input is hidden */
|
|
90
|
+
readOnly?: boolean;
|
|
91
|
+
/** Name attribute used for form submission (joined by `,`) */
|
|
92
|
+
name?: string;
|
|
93
|
+
/** ARIA label for the inner text input */
|
|
94
|
+
inputAriaLabel?: string;
|
|
95
|
+
/** Ref forwarded to the inner `<input>` */
|
|
96
|
+
inputRef?: React.Ref<HTMLInputElement>;
|
|
97
|
+
}
|
|
98
|
+
type TagInputProps = Prettify<TagInputBaseProps>;
|
|
99
|
+
|
|
100
|
+
export type { TagInputBaseProps, TagInputProps, TagInputRenderTagState, TagInputSeparator, TagInputSize, TagInputVariant };
|