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
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,82 @@
|
|
|
1
1
|
# entangle-ui
|
|
2
2
|
|
|
3
|
+
## 0.9.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `Combobox` component (`@/components/controls/Combobox`). Single-value select with an editable input — filters the option list as the user types using the built-in fuzzy matcher (`fuzzyScore` from CommandPalette), configurable via `filterFn`. Supports controlled and uncontrolled modes, optional `freeSolo` for accepting arbitrary input, optional `creatable` mode that surfaces a `Create "<query>"` row and invokes `onCreate`, an async-friendly `loading` state, optional `openOnFocus`, optional `clearable` button, and shares keyboard navigation with MultiSelect through `useListboxNav`.
|
|
8
|
+
|
|
9
|
+
- [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `CommandPalette` component (`@/components/feedback/CommandPalette`). Search-driven command list shown as a centred floating dialog. Type to fuzzy-filter (subsequence + word-boundary scoring), ArrowUp/Down to navigate, Enter to run, Escape to close. Hover mirrors keyboard selection. Groups, descriptions, leading icons, and `<Kbd>`-rendered shortcuts; supports a custom `renderItem` for full layout overrides. Recent selections are tracked in localStorage when `recentKey` is provided (graceful fallback when unavailable). Component does not bind a global hotkey — wire `useHotkey('Mod+K', open)` in the consumer. Also exports the underlying `fuzzyScore` and `fuzzyFilter` helpers.
|
|
10
|
+
|
|
11
|
+
- [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `DataTable` component (`@/components/data/DataTable`) — a new `data` category. Sortable columns (three-state cycle asc → desc → none, controllable via `sort` / `onSortChange` / `manualSort`), single or multiple row selection with controlled and uncontrolled modes, custom `rowKey`, three densities (`comfortable` / `compact` / `dense`), sticky header, optional sticky-left columns via per-column `sticky`, optional column resizing via `resizableColumns`, custom row renderer, empty state slot, loading state with skeleton rows, and row virtualization auto-enabled above 100 rows (opt-in / opt-out via `virtualized`). Built on `@tanstack/react-virtual` (added as a peer dependency) and uses CSS grid under `role="grid"` so columns line up across the sticky header and individual virtualized rows. Keyboard navigation supports ArrowUp/Down, Home/End, PageUp/PageDown, Space (toggle in multi mode) and Enter (activate, toggle in single mode).
|
|
12
|
+
|
|
13
|
+
- [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `Drawer` component (`@/components/feedback/Drawer`). Anchored sliding panel for filters, navigation, or detail views. Compound API (`Drawer.Header`, `Drawer.Body`, `Drawer.Footer`, `Drawer.CloseButton`), four anchors (left/right/top/bottom), modal and non-modal modes, focus trap when modal, optional close on overlay click and Escape, slide-in/out animations honoring `prefers-reduced-motion`, portal by default, size presets plus arbitrary CSS values.
|
|
14
|
+
|
|
15
|
+
- [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `FileUploader` component (`@/components/controls/FileUploader`). Drag-and-drop file uploader with click-to-browse fallback, MIME type and extension matching via `accept`, `maxSize`/`minSize`/`maxFiles` enforcement with reasoned rejections through `onReject`, custom synchronous `validate`, controlled and uncontrolled item lists, optional single-file mode, and a per-row UI showing file name, size, status badge (`pending` / `uploading` / `done` / `error`), and an animated progress bar. The component is presentational around the file list — the consumer drives the actual upload via `onFilesAdd` and reflects progress back through `value`.
|
|
16
|
+
|
|
17
|
+
- [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `HoverCard` component (`@/components/primitives/HoverCard`). Hover- and focus-driven floating panel for previews. `HoverCard.Trigger` + `HoverCard.Content` compound, configurable `openDelay` (400ms) and `closeDelay` (150ms), safe-polygon based cursor handover from trigger to content (toggle with `disableSafePolygon`), portal by default, controlled and uncontrolled modes, `disabled` flag.
|
|
18
|
+
|
|
19
|
+
- [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `MultiSelect` component (`@/components/controls/MultiSelect`). Multi-value select that renders chosen options as inline chips inside the trigger, with a `+N more` overflow badge once `maxInlineChips` is exceeded. Supports flat or grouped options, optional searchable mode with custom `filterFn`, controlled and uncontrolled modes, keyboard navigation through `useListboxNav`, configurable `max` cap, optional `clearable` button, and `closeOnSelect` to dismiss the dropdown after each pick. Three sizes, three variants, full label/helper/error wiring, and form-friendly hidden input via `name`.
|
|
20
|
+
|
|
21
|
+
- [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `Pagination` component (`@/components/navigation/Pagination`). Page navigator with sibling/boundary ellipsis logic (MUI-style), 1-based pages, controlled and uncontrolled modes, optional first/last jump buttons, optional prev/next, three sizes, customisable aria labels.
|
|
22
|
+
|
|
23
|
+
- [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `TagInput` component (`@/components/controls/TagInput`). Multi-value text input that captures a list of strings as removable chips. Controlled and uncontrolled modes via `value`/`defaultValue`/`onChange`, configurable commit keys (`Enter`, `Comma`, `Space`, `Tab`), optional `addOnBlur`, duplicate handling, `max` cap, custom `validate`/`normalize` callbacks with reason reporting through `onValidate`, custom chip rendering via `renderTag`, `Backspace` removes the trailing tag when the draft is empty, paste with separators is split into multiple tags, three sizes, three variants, and full label/helper/error wiring.
|
|
24
|
+
|
|
25
|
+
- [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `useListboxNav` hook (`@/hooks/useListboxNav`). Generic keyboard navigation primitive for listbox-like surfaces (Select, MultiSelect, Combobox, CommandPalette). Tracks an `activeIndex`, skips disabled items, and exposes a single `handleKeyDown` covering ArrowUp/ArrowDown/Home/End/Enter/Escape with optional looping. The hook is purely logical — consumers render the list and bind the handler to an input or the listbox container. Resets the active index when the items array changes by reference.
|
|
26
|
+
|
|
27
|
+
- [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Fixes and additions for the 0.9 release:
|
|
28
|
+
- `Radio` — inner dot at `size="md"` is now 6 px instead of 7 px so the dot stays pixel-centered inside the 14 px outer ring.
|
|
29
|
+
- `Accordion` — new `width` prop (defaults to `"100%"`); the accordion now keeps a stable width regardless of which item is expanded.
|
|
30
|
+
- `Alert` — new `width` prop (defaults to `"100%"`); long unbreakable content now wraps via `overflow-wrap: anywhere` instead of stretching the alert.
|
|
31
|
+
- `SkeletonLayout` — new component (`@/components/feedback/Skeleton`) with pre-built loading patterns: `card`, `list`, `table`, `grid`, `chat`. Each variant composes the existing `Skeleton` primitive with sensible defaults; configurable `count`, `columns`, `animation`, and `width`. Grid defaults to `animation="none"` for dense surfaces.
|
|
32
|
+
|
|
33
|
+
- [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Centralise every icon through the shared `Icon` primitive — no component defines SVGs inline anymore.
|
|
34
|
+
|
|
35
|
+
**`Icon` primitive — custom size support**
|
|
36
|
+
|
|
37
|
+
`size` now accepts any number (interpreted as pixels) or any CSS length string (`'1.5em'`, `'24px'`, …) in addition to the `'sm' | 'md' | 'lg'` tokens. Custom color via any CSS string was already supported. This unlocks reuse of library icons in chip-sized and inline-text contexts that previously needed bespoke SVGs.
|
|
38
|
+
|
|
39
|
+
**New icons**
|
|
40
|
+
- `FirstIcon`, `LastIcon` — skip-to-edge chevrons for paginators
|
|
41
|
+
- `CloudUploadIcon` — cloud with up-arrow for upload drop zones
|
|
42
|
+
- `ExternalLinkIcon` — box with arrow leaving the top-right corner
|
|
43
|
+
- `UnlinkIcon` — broken chain (pair with `LinkIcon` for coupled-value toggles)
|
|
44
|
+
|
|
45
|
+
**Inline SVG removal**
|
|
46
|
+
|
|
47
|
+
Every component that drew its own X / chevron / check / upload / unlink icon now imports the matching `*Icon` from `@/components/Icons` and forwards the appropriate `size` and `decorative` props:
|
|
48
|
+
- Form controls — `Combobox`, `Select`, `MultiSelect` (chevron + check)
|
|
49
|
+
- Primitives — `Checkbox` (check + minus), `Collapsible` (chevron), `Link` (external link)
|
|
50
|
+
- Layout — `Accordion` trigger (chevron)
|
|
51
|
+
- Controls — `VectorInput` (link + unlink), `FileUploader` (cloud upload), `Pagination` (first / last / prev / next)
|
|
52
|
+
- Feedback — `Toast` (info / success / warning / error)
|
|
53
|
+
- Editor — `PropertyInspector` (chevron + undo)
|
|
54
|
+
|
|
55
|
+
Left intact: `Stat` delta arrows (no library match for the bar + chunky-arrow set), `Tooltip` arrow tail (not a typical icon shape), `CircularProgress` ring, and the `Mini*Icon` family in `ChatPanel/ChatIcons.tsx` whose usage sites live in unowned files — all flagged for a separate follow-up.
|
|
56
|
+
|
|
57
|
+
### Patch Changes
|
|
58
|
+
|
|
59
|
+
- [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Three follow-up fixes/additions for the 0.9 release based on review feedback:
|
|
60
|
+
- `Combobox` — the open/close trigger rotated the entire button instead of just the chevron icon. The rotation is now scoped to a span wrapping the icon, so the click target stays stable.
|
|
61
|
+
- `Combobox` — the clear button now uses the shared `CloseIcon` primitive instead of a hand-rolled inline SVG, which rendered with a noticeable seam at the cross point.
|
|
62
|
+
- `DataTable` — multi-select tables now support range selection. Hold `Shift` while clicking a row's checkbox (or pressing `Space` on a focused row) to toggle every row between the last anchor and the target. Disabled rows are skipped. Behavior is on by default for `selectionMode="multiple"`.
|
|
63
|
+
|
|
64
|
+
- [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Replace inline X / close icon SVGs across the library with the shared `CloseIcon` primitive.
|
|
65
|
+
|
|
66
|
+
The hand-rolled SVGs used a single `M…L…M…L…` path for the cross stroke, which rendered with a visible seam at the center on most platforms (same root cause as the earlier Combobox fix). The library `CloseIcon` uses two separate `<line>` elements through the `Icon` primitive, so the cross is clean and stays consistent across components.
|
|
67
|
+
|
|
68
|
+
Touched components:
|
|
69
|
+
- `MultiSelect` — chip remove button and clear-all button
|
|
70
|
+
- `Select` — clear-all button
|
|
71
|
+
- `TagInput` — chip remove button
|
|
72
|
+
- `Drawer` — header close button and `Drawer.CloseButton`
|
|
73
|
+
- `Dialog` — header close button
|
|
74
|
+
- `Popover` — `PopoverClose`
|
|
75
|
+
- `Toast` — dismiss button
|
|
76
|
+
- `FileUploader` — the inline `TrashIcon` now uses the shared `TrashIcon` primitive
|
|
77
|
+
|
|
78
|
+
No public-API changes — only the rendered glyph differs.
|
|
79
|
+
|
|
3
80
|
## 0.8.2
|
|
4
81
|
|
|
5
82
|
### Patch Changes
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
@keyframes Combobox_dropdownIn__1pazsaxk {
|
|
2
|
+
from {
|
|
3
|
+
opacity: 0;
|
|
4
|
+
transform: scaleY(0.96);
|
|
5
|
+
}
|
|
6
|
+
to {
|
|
7
|
+
opacity: 1;
|
|
8
|
+
transform: scaleY(1);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
.Combobox_containerStyle__1pazsax0 {
|
|
12
|
+
display: flex;
|
|
13
|
+
flex-direction: column;
|
|
14
|
+
position: relative;
|
|
15
|
+
}
|
|
16
|
+
.Combobox_inputWrapperRecipe__1pazsax1 {
|
|
17
|
+
display: flex;
|
|
18
|
+
align-items: center;
|
|
19
|
+
gap: var(--etui-spacing-xs);
|
|
20
|
+
width: 100%;
|
|
21
|
+
border-radius: var(--etui-radius-md);
|
|
22
|
+
transition: border-color var(--etui-transition-fast), background var(--etui-transition-fast), box-shadow var(--etui-transition-fast);
|
|
23
|
+
font-family: var(--etui-font-family-sans);
|
|
24
|
+
}
|
|
25
|
+
.Combobox_inputWrapperRecipe_size_sm__1pazsax2 {
|
|
26
|
+
height: 20px;
|
|
27
|
+
padding: 0 var(--etui-spacing-sm);
|
|
28
|
+
font-size: var(--etui-font-size-xs);
|
|
29
|
+
}
|
|
30
|
+
.Combobox_inputWrapperRecipe_size_md__1pazsax3 {
|
|
31
|
+
height: 24px;
|
|
32
|
+
padding: 0 var(--etui-spacing-md);
|
|
33
|
+
font-size: var(--etui-font-size-xs);
|
|
34
|
+
}
|
|
35
|
+
.Combobox_inputWrapperRecipe_size_lg__1pazsax4 {
|
|
36
|
+
height: 32px;
|
|
37
|
+
padding: 0 var(--etui-spacing-md);
|
|
38
|
+
font-size: var(--etui-font-size-sm);
|
|
39
|
+
}
|
|
40
|
+
.Combobox_inputWrapperRecipe_variant_default__1pazsax5 {
|
|
41
|
+
background: transparent;
|
|
42
|
+
border: 1px solid var(--etui-color-border-default);
|
|
43
|
+
color: var(--etui-color-text-primary);
|
|
44
|
+
}
|
|
45
|
+
.Combobox_inputWrapperRecipe_variant_ghost__1pazsax6 {
|
|
46
|
+
background: transparent;
|
|
47
|
+
border: 1px solid transparent;
|
|
48
|
+
color: var(--etui-color-text-primary);
|
|
49
|
+
}
|
|
50
|
+
.Combobox_inputWrapperRecipe_variant_filled__1pazsax7 {
|
|
51
|
+
background: var(--etui-color-surface-default);
|
|
52
|
+
border: 1px solid var(--etui-color-border-default);
|
|
53
|
+
color: var(--etui-color-text-primary);
|
|
54
|
+
}
|
|
55
|
+
.Combobox_inputWrapperRecipe_focused_true__1pazsax8 {
|
|
56
|
+
border-color: var(--etui-color-border-focus);
|
|
57
|
+
box-shadow: var(--etui-shadow-focus);
|
|
58
|
+
}
|
|
59
|
+
.Combobox_inputWrapperRecipe_error_true__1pazsaxa {
|
|
60
|
+
border-color: var(--etui-color-accent-error);
|
|
61
|
+
}
|
|
62
|
+
.Combobox_inputWrapperRecipe_disabled_true__1pazsaxc {
|
|
63
|
+
opacity: 0.5;
|
|
64
|
+
cursor: not-allowed;
|
|
65
|
+
}
|
|
66
|
+
.Combobox_inputStyle__1pazsaxe {
|
|
67
|
+
flex: 1;
|
|
68
|
+
min-width: 0;
|
|
69
|
+
border: none;
|
|
70
|
+
outline: none;
|
|
71
|
+
background: transparent;
|
|
72
|
+
color: inherit;
|
|
73
|
+
font-family: inherit;
|
|
74
|
+
font-size: inherit;
|
|
75
|
+
padding: 0;
|
|
76
|
+
}
|
|
77
|
+
.Combobox_inputStyle__1pazsaxe::placeholder {
|
|
78
|
+
color: var(--etui-color-text-muted);
|
|
79
|
+
}
|
|
80
|
+
.Combobox_inputStyle__1pazsaxe:disabled {
|
|
81
|
+
cursor: not-allowed;
|
|
82
|
+
}
|
|
83
|
+
.Combobox_clearButtonStyle__1pazsaxf {
|
|
84
|
+
padding: 0;
|
|
85
|
+
margin: 0;
|
|
86
|
+
border: none;
|
|
87
|
+
background: none;
|
|
88
|
+
outline: none;
|
|
89
|
+
cursor: pointer;
|
|
90
|
+
display: flex;
|
|
91
|
+
align-items: center;
|
|
92
|
+
justify-content: center;
|
|
93
|
+
color: var(--etui-color-text-muted);
|
|
94
|
+
flex-shrink: 0;
|
|
95
|
+
}
|
|
96
|
+
.Combobox_clearButtonStyle__1pazsaxf:hover {
|
|
97
|
+
color: var(--etui-color-text-primary);
|
|
98
|
+
}
|
|
99
|
+
.Combobox_chevronButtonStyle__1pazsaxg {
|
|
100
|
+
padding: 0;
|
|
101
|
+
margin: 0;
|
|
102
|
+
border: none;
|
|
103
|
+
background: none;
|
|
104
|
+
outline: none;
|
|
105
|
+
cursor: pointer;
|
|
106
|
+
display: flex;
|
|
107
|
+
align-items: center;
|
|
108
|
+
justify-content: center;
|
|
109
|
+
flex-shrink: 0;
|
|
110
|
+
color: var(--etui-color-text-muted);
|
|
111
|
+
}
|
|
112
|
+
.Combobox_chevronButtonStyle__1pazsaxg:disabled {
|
|
113
|
+
cursor: not-allowed;
|
|
114
|
+
opacity: 0.5;
|
|
115
|
+
}
|
|
116
|
+
.Combobox_chevronIconRecipe__1pazsaxh {
|
|
117
|
+
display: inline-flex;
|
|
118
|
+
align-items: center;
|
|
119
|
+
justify-content: center;
|
|
120
|
+
transition: transform var(--etui-transition-fast);
|
|
121
|
+
}
|
|
122
|
+
.Combobox_chevronIconRecipe_open_true__1pazsaxi {
|
|
123
|
+
transform: rotate(180deg);
|
|
124
|
+
}
|
|
125
|
+
.Combobox_chevronIconRecipe_open_false__1pazsaxj {
|
|
126
|
+
transform: rotate(0deg);
|
|
127
|
+
}
|
|
128
|
+
.Combobox_dropdownStyle__1pazsaxl {
|
|
129
|
+
position: fixed;
|
|
130
|
+
z-index: var(--etui-z-dropdown);
|
|
131
|
+
background: var(--etui-color-bg-elevated);
|
|
132
|
+
border: 1px solid var(--etui-color-border-default);
|
|
133
|
+
border-radius: var(--etui-radius-md);
|
|
134
|
+
box-shadow: var(--etui-shadow-lg);
|
|
135
|
+
overflow: hidden;
|
|
136
|
+
font-family: var(--etui-font-family-sans);
|
|
137
|
+
animation: Combobox_dropdownIn__1pazsaxk var(--etui-transition-fast) forwards;
|
|
138
|
+
display: flex;
|
|
139
|
+
flex-direction: column;
|
|
140
|
+
}
|
|
141
|
+
.Combobox_optionsListStyle__1pazsaxm {
|
|
142
|
+
width: 100%;
|
|
143
|
+
overflow-y: auto;
|
|
144
|
+
}
|
|
145
|
+
.Combobox_optionItemRecipe__1pazsaxn {
|
|
146
|
+
display: flex;
|
|
147
|
+
align-items: center;
|
|
148
|
+
padding: var(--etui-spacing-sm) var(--etui-spacing-md);
|
|
149
|
+
font-size: var(--etui-font-size-md);
|
|
150
|
+
gap: var(--etui-spacing-sm);
|
|
151
|
+
transition: background var(--etui-transition-fast);
|
|
152
|
+
}
|
|
153
|
+
.Combobox_optionItemRecipe_active_true__1pazsaxo {
|
|
154
|
+
background: var(--etui-color-surface-hover);
|
|
155
|
+
}
|
|
156
|
+
.Combobox_optionItemRecipe_selected_true__1pazsaxq {
|
|
157
|
+
background: var(--etui-color-surface-active);
|
|
158
|
+
}
|
|
159
|
+
.Combobox_optionItemRecipe_disabled_true__1pazsaxs {
|
|
160
|
+
color: var(--etui-color-text-disabled);
|
|
161
|
+
cursor: not-allowed;
|
|
162
|
+
opacity: 0.5;
|
|
163
|
+
}
|
|
164
|
+
.Combobox_optionItemRecipe_disabled_false__1pazsaxt {
|
|
165
|
+
color: var(--etui-color-text-primary);
|
|
166
|
+
cursor: pointer;
|
|
167
|
+
}
|
|
168
|
+
.Combobox_optionItemRecipe_disabled_false__1pazsaxt:hover {
|
|
169
|
+
background: var(--etui-color-surface-hover);
|
|
170
|
+
}
|
|
171
|
+
.Combobox_optionLabelStyle__1pazsaxu {
|
|
172
|
+
flex: 1;
|
|
173
|
+
min-width: 0;
|
|
174
|
+
white-space: nowrap;
|
|
175
|
+
overflow: hidden;
|
|
176
|
+
text-overflow: ellipsis;
|
|
177
|
+
}
|
|
178
|
+
.Combobox_optionDescriptionStyle__1pazsaxv {
|
|
179
|
+
color: var(--etui-color-text-muted);
|
|
180
|
+
font-size: var(--etui-font-size-xs);
|
|
181
|
+
margin-left: auto;
|
|
182
|
+
white-space: nowrap;
|
|
183
|
+
}
|
|
184
|
+
.Combobox_emptyMessageStyle__1pazsaxw {
|
|
185
|
+
padding: var(--etui-spacing-md);
|
|
186
|
+
text-align: center;
|
|
187
|
+
color: var(--etui-color-text-muted);
|
|
188
|
+
font-size: var(--etui-font-size-md);
|
|
189
|
+
}
|
|
190
|
+
.Combobox_checkmarkStyle__1pazsaxx {
|
|
191
|
+
margin-left: auto;
|
|
192
|
+
flex-shrink: 0;
|
|
193
|
+
color: var(--etui-color-accent-primary);
|
|
194
|
+
display: flex;
|
|
195
|
+
align-items: center;
|
|
196
|
+
}
|
|
197
|
+
.Combobox_createRowStyle__1pazsaxy {
|
|
198
|
+
font-style: italic;
|
|
199
|
+
}
|
|
200
|
+
@media (prefers-reduced-motion: reduce) {
|
|
201
|
+
.Combobox_inputWrapperRecipe__1pazsax1 {
|
|
202
|
+
transition: none;
|
|
203
|
+
}
|
|
204
|
+
.Combobox_chevronIconRecipe__1pazsaxh {
|
|
205
|
+
transition: none;
|
|
206
|
+
}
|
|
207
|
+
.Combobox_dropdownStyle__1pazsaxl {
|
|
208
|
+
animation: none;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
.FileUploader_containerStyle__yf371x0 {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
width: 100%;
|
|
5
|
+
}
|
|
6
|
+
.FileUploader_dropZoneRecipe__yf371x1 {
|
|
7
|
+
display: flex;
|
|
8
|
+
flex-direction: column;
|
|
9
|
+
align-items: center;
|
|
10
|
+
justify-content: center;
|
|
11
|
+
text-align: center;
|
|
12
|
+
width: 100%;
|
|
13
|
+
border: 1px dashed var(--etui-color-border-default);
|
|
14
|
+
border-radius: var(--etui-radius-md);
|
|
15
|
+
background: var(--etui-color-surface-default);
|
|
16
|
+
color: var(--etui-color-text-secondary);
|
|
17
|
+
font-family: var(--etui-font-family-sans);
|
|
18
|
+
cursor: pointer;
|
|
19
|
+
transition: border-color var(--etui-transition-fast), background var(--etui-transition-fast);
|
|
20
|
+
}
|
|
21
|
+
.FileUploader_dropZoneRecipe__yf371x1:focus-visible {
|
|
22
|
+
outline: none;
|
|
23
|
+
box-shadow: var(--etui-shadow-focus);
|
|
24
|
+
}
|
|
25
|
+
.FileUploader_dropZoneRecipe_size_sm__yf371x2 {
|
|
26
|
+
padding: var(--etui-spacing-md);
|
|
27
|
+
font-size: var(--etui-font-size-xs);
|
|
28
|
+
gap: var(--etui-spacing-xs);
|
|
29
|
+
}
|
|
30
|
+
.FileUploader_dropZoneRecipe_size_md__yf371x3 {
|
|
31
|
+
padding: var(--etui-spacing-lg);
|
|
32
|
+
font-size: var(--etui-font-size-sm);
|
|
33
|
+
gap: var(--etui-spacing-sm);
|
|
34
|
+
}
|
|
35
|
+
.FileUploader_dropZoneRecipe_size_lg__yf371x4 {
|
|
36
|
+
padding: var(--etui-spacing-xl);
|
|
37
|
+
font-size: var(--etui-font-size-md);
|
|
38
|
+
gap: var(--etui-spacing-md);
|
|
39
|
+
}
|
|
40
|
+
.FileUploader_dropZoneRecipe_dragging_true__yf371x5 {
|
|
41
|
+
border-color: var(--etui-color-accent-primary);
|
|
42
|
+
background: var(--etui-color-surface-hover);
|
|
43
|
+
color: var(--etui-color-text-primary);
|
|
44
|
+
}
|
|
45
|
+
.FileUploader_dropZoneRecipe_disabled_true__yf371x7 {
|
|
46
|
+
opacity: 0.5;
|
|
47
|
+
cursor: not-allowed;
|
|
48
|
+
}
|
|
49
|
+
.FileUploader_dropZoneRecipe_error_true__yf371x9 {
|
|
50
|
+
border-color: var(--etui-color-accent-error);
|
|
51
|
+
}
|
|
52
|
+
.FileUploader_dropZonePrimaryStyle__yf371xb {
|
|
53
|
+
font-weight: var(--etui-font-weight-medium);
|
|
54
|
+
color: var(--etui-color-text-primary);
|
|
55
|
+
}
|
|
56
|
+
.FileUploader_dropZoneHintStyle__yf371xc {
|
|
57
|
+
color: var(--etui-color-text-muted);
|
|
58
|
+
font-size: var(--etui-font-size-xs);
|
|
59
|
+
}
|
|
60
|
+
.FileUploader_hiddenInputStyle__yf371xd {
|
|
61
|
+
position: absolute;
|
|
62
|
+
width: 1px;
|
|
63
|
+
height: 1px;
|
|
64
|
+
overflow: hidden;
|
|
65
|
+
clip: rect(0 0 0 0);
|
|
66
|
+
border: 0;
|
|
67
|
+
padding: 0;
|
|
68
|
+
}
|
|
69
|
+
.FileUploader_fileListStyle__yf371xe {
|
|
70
|
+
display: flex;
|
|
71
|
+
flex-direction: column;
|
|
72
|
+
gap: var(--etui-spacing-xs);
|
|
73
|
+
margin-top: var(--etui-spacing-sm);
|
|
74
|
+
width: 100%;
|
|
75
|
+
}
|
|
76
|
+
.FileUploader_fileRowRecipe__yf371xf {
|
|
77
|
+
display: flex;
|
|
78
|
+
align-items: center;
|
|
79
|
+
gap: var(--etui-spacing-sm);
|
|
80
|
+
padding: var(--etui-spacing-sm) var(--etui-spacing-md);
|
|
81
|
+
border-radius: var(--etui-radius-md);
|
|
82
|
+
border: 1px solid var(--etui-color-border-default);
|
|
83
|
+
background: var(--etui-color-surface-default);
|
|
84
|
+
color: var(--etui-color-text-primary);
|
|
85
|
+
font-size: var(--etui-font-size-xs);
|
|
86
|
+
}
|
|
87
|
+
.FileUploader_fileRowRecipe_status_error__yf371xj {
|
|
88
|
+
border-color: var(--etui-color-accent-error);
|
|
89
|
+
}
|
|
90
|
+
.FileUploader_fileMetaStyle__yf371xk {
|
|
91
|
+
display: flex;
|
|
92
|
+
flex-direction: column;
|
|
93
|
+
flex: 1;
|
|
94
|
+
min-width: 0;
|
|
95
|
+
gap: 2px;
|
|
96
|
+
}
|
|
97
|
+
.FileUploader_fileNameStyle__yf371xl {
|
|
98
|
+
white-space: nowrap;
|
|
99
|
+
overflow: hidden;
|
|
100
|
+
text-overflow: ellipsis;
|
|
101
|
+
}
|
|
102
|
+
.FileUploader_fileSubStyle__yf371xm {
|
|
103
|
+
color: var(--etui-color-text-muted);
|
|
104
|
+
font-size: 11px;
|
|
105
|
+
display: flex;
|
|
106
|
+
align-items: center;
|
|
107
|
+
gap: var(--etui-spacing-sm);
|
|
108
|
+
}
|
|
109
|
+
.FileUploader_progressBarStyle__yf371xn {
|
|
110
|
+
position: relative;
|
|
111
|
+
width: 100%;
|
|
112
|
+
height: 3px;
|
|
113
|
+
border-radius: var(--etui-radius-sm);
|
|
114
|
+
background: var(--etui-color-surface-active);
|
|
115
|
+
overflow: hidden;
|
|
116
|
+
}
|
|
117
|
+
.FileUploader_progressFillRecipe__yf371xo {
|
|
118
|
+
position: absolute;
|
|
119
|
+
top: 0;
|
|
120
|
+
bottom: 0;
|
|
121
|
+
left: 0;
|
|
122
|
+
transition: width var(--etui-transition-normal);
|
|
123
|
+
}
|
|
124
|
+
.FileUploader_progressFillRecipe_status_pending__yf371xp {
|
|
125
|
+
background: var(--etui-color-text-muted);
|
|
126
|
+
}
|
|
127
|
+
.FileUploader_progressFillRecipe_status_uploading__yf371xq {
|
|
128
|
+
background: var(--etui-color-accent-primary);
|
|
129
|
+
}
|
|
130
|
+
.FileUploader_progressFillRecipe_status_done__yf371xr {
|
|
131
|
+
background: var(--etui-color-accent-success);
|
|
132
|
+
}
|
|
133
|
+
.FileUploader_progressFillRecipe_status_error__yf371xs {
|
|
134
|
+
background: var(--etui-color-accent-error);
|
|
135
|
+
}
|
|
136
|
+
.FileUploader_removeButtonStyle__yf371xt {
|
|
137
|
+
display: inline-flex;
|
|
138
|
+
align-items: center;
|
|
139
|
+
justify-content: center;
|
|
140
|
+
width: 20px;
|
|
141
|
+
height: 20px;
|
|
142
|
+
padding: 0;
|
|
143
|
+
border: none;
|
|
144
|
+
background: transparent;
|
|
145
|
+
color: var(--etui-color-text-muted);
|
|
146
|
+
cursor: pointer;
|
|
147
|
+
border-radius: var(--etui-radius-sm);
|
|
148
|
+
}
|
|
149
|
+
.FileUploader_removeButtonStyle__yf371xt:hover {
|
|
150
|
+
color: var(--etui-color-text-primary);
|
|
151
|
+
background: var(--etui-color-surface-hover);
|
|
152
|
+
}
|
|
153
|
+
.FileUploader_removeButtonStyle__yf371xt:disabled {
|
|
154
|
+
cursor: not-allowed;
|
|
155
|
+
opacity: 0.5;
|
|
156
|
+
}
|
|
157
|
+
.FileUploader_removeButtonStyle__yf371xt:focus-visible {
|
|
158
|
+
outline: none;
|
|
159
|
+
box-shadow: var(--etui-shadow-focus);
|
|
160
|
+
}
|
|
161
|
+
.FileUploader_statusBadgeRecipe__yf371xu {
|
|
162
|
+
display: inline-flex;
|
|
163
|
+
align-items: center;
|
|
164
|
+
padding: 0 var(--etui-spacing-xs);
|
|
165
|
+
height: 14px;
|
|
166
|
+
border-radius: var(--etui-radius-sm);
|
|
167
|
+
font-size: 10px;
|
|
168
|
+
text-transform: uppercase;
|
|
169
|
+
letter-spacing: 0.5px;
|
|
170
|
+
}
|
|
171
|
+
.FileUploader_statusBadgeRecipe_status_pending__yf371xv {
|
|
172
|
+
background: var(--etui-color-surface-active);
|
|
173
|
+
color: var(--etui-color-text-muted);
|
|
174
|
+
}
|
|
175
|
+
.FileUploader_statusBadgeRecipe_status_uploading__yf371xw {
|
|
176
|
+
background: var(--etui-color-accent-primary);
|
|
177
|
+
color: var(--etui-color-text-primary);
|
|
178
|
+
}
|
|
179
|
+
.FileUploader_statusBadgeRecipe_status_done__yf371xx {
|
|
180
|
+
background: var(--etui-color-accent-success);
|
|
181
|
+
color: var(--etui-color-text-primary);
|
|
182
|
+
}
|
|
183
|
+
.FileUploader_statusBadgeRecipe_status_error__yf371xy {
|
|
184
|
+
background: var(--etui-color-accent-error);
|
|
185
|
+
color: var(--etui-color-text-primary);
|
|
186
|
+
}
|
|
187
|
+
@media (prefers-reduced-motion: reduce) {
|
|
188
|
+
.FileUploader_dropZoneRecipe__yf371x1 {
|
|
189
|
+
transition: none;
|
|
190
|
+
}
|
|
191
|
+
.FileUploader_progressFillRecipe__yf371xo {
|
|
192
|
+
transition: none;
|
|
193
|
+
}
|
|
194
|
+
}
|