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.
Files changed (203) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/dist/esm/assets/src/components/controls/Combobox/Combobox.css.ts.vanilla-B7B5ttkq.css +210 -0
  3. package/dist/esm/assets/src/components/controls/FileUploader/FileUploader.css.ts.vanilla-T4nRiI7s.css +194 -0
  4. package/dist/esm/assets/src/components/controls/MultiSelect/MultiSelect.css.ts.vanilla-CdYayqaF.css +311 -0
  5. package/dist/esm/assets/src/components/controls/TagInput/TagInput.css.ts.vanilla-hnkMOPp1.css +141 -0
  6. package/dist/esm/assets/src/components/data/DataTable/DataTable.css.ts.vanilla-CmRgtjIW.css +231 -0
  7. package/dist/esm/assets/src/components/feedback/Alert/{Alert.css.ts.vanilla-CRAI-xHx.css → Alert.css.ts.vanilla-CfCDsIEg.css} +2 -0
  8. package/dist/esm/assets/src/components/feedback/CommandPalette/CommandPalette.css.ts.vanilla-DGdrLKYZ.css +160 -0
  9. package/dist/esm/assets/src/components/feedback/Drawer/Drawer.css.ts.vanilla-CLPTOUrA.css +247 -0
  10. package/dist/esm/assets/src/components/feedback/Skeleton/SkeletonLayout.css.ts.vanilla-Db7bpqiI.css +75 -0
  11. package/dist/esm/assets/src/components/feedback/Stat/Stat.css.ts.vanilla-GBk3JAMB.css +69 -0
  12. package/dist/esm/assets/src/components/layout/Card/Card.css.ts.vanilla-Ducn1gUX.css +124 -0
  13. package/dist/esm/assets/src/components/navigation/Pagination/Pagination.css.ts.vanilla-CmlFyyjh.css +103 -0
  14. package/dist/esm/assets/src/components/primitives/HoverCard/HoverCard.css.ts.vanilla-BYT0qbLp.css +41 -0
  15. package/dist/esm/components/Icons/CloudUploadIcon.js +24 -0
  16. package/dist/esm/components/Icons/CloudUploadIcon.js.map +1 -0
  17. package/dist/esm/components/Icons/ExternalLinkIcon.js +26 -0
  18. package/dist/esm/components/Icons/ExternalLinkIcon.js.map +1 -0
  19. package/dist/esm/components/Icons/FirstIcon.js +23 -0
  20. package/dist/esm/components/Icons/FirstIcon.js.map +1 -0
  21. package/dist/esm/components/Icons/LastIcon.js +23 -0
  22. package/dist/esm/components/Icons/LastIcon.js.map +1 -0
  23. package/dist/esm/components/Icons/UnlinkIcon.js +26 -0
  24. package/dist/esm/components/Icons/UnlinkIcon.js.map +1 -0
  25. package/dist/esm/components/controls/Combobox/Combobox.css.js +20 -0
  26. package/dist/esm/components/controls/Combobox/Combobox.css.js.map +1 -0
  27. package/dist/esm/components/controls/Combobox/Combobox.js +354 -0
  28. package/dist/esm/components/controls/Combobox/Combobox.js.map +1 -0
  29. package/dist/esm/components/controls/FileUploader/FileUploader.css.js +20 -0
  30. package/dist/esm/components/controls/FileUploader/FileUploader.css.js.map +1 -0
  31. package/dist/esm/components/controls/FileUploader/FileUploader.js +264 -0
  32. package/dist/esm/components/controls/FileUploader/FileUploader.js.map +1 -0
  33. package/dist/esm/components/controls/MultiSelect/MultiSelect.css.js +23 -0
  34. package/dist/esm/components/controls/MultiSelect/MultiSelect.css.js.map +1 -0
  35. package/dist/esm/components/controls/MultiSelect/MultiSelect.js +269 -0
  36. package/dist/esm/components/controls/MultiSelect/MultiSelect.js.map +1 -0
  37. package/dist/esm/components/controls/Select/Select.js +5 -4
  38. package/dist/esm/components/controls/Select/Select.js.map +1 -1
  39. package/dist/esm/components/controls/TagInput/TagInput.css.js +12 -0
  40. package/dist/esm/components/controls/TagInput/TagInput.css.js.map +1 -0
  41. package/dist/esm/components/controls/TagInput/TagInput.js +189 -0
  42. package/dist/esm/components/controls/TagInput/TagInput.js.map +1 -0
  43. package/dist/esm/components/controls/TreeView/TreeNode.js +87 -1
  44. package/dist/esm/components/controls/TreeView/TreeNode.js.map +1 -1
  45. package/dist/esm/components/controls/VectorInput/VectorInput.js +87 -4
  46. package/dist/esm/components/controls/VectorInput/VectorInput.js.map +1 -1
  47. package/dist/esm/components/data/DataTable/DataTable.css.js +25 -0
  48. package/dist/esm/components/data/DataTable/DataTable.css.js.map +1 -0
  49. package/dist/esm/components/data/DataTable/DataTable.js +502 -0
  50. package/dist/esm/components/data/DataTable/DataTable.js.map +1 -0
  51. package/dist/esm/components/editor/ChatPanel/ChatCodeBlock.js +87 -5
  52. package/dist/esm/components/editor/ChatPanel/ChatCodeBlock.js.map +1 -1
  53. package/dist/esm/components/editor/ChatPanel/ChatInput.js +87 -5
  54. package/dist/esm/components/editor/ChatPanel/ChatInput.js.map +1 -1
  55. package/dist/esm/components/editor/ChatPanel/ChatMessage.js +87 -2
  56. package/dist/esm/components/editor/ChatPanel/ChatMessage.js.map +1 -1
  57. package/dist/esm/components/editor/PropertyInspector/PropertyRow.js +87 -3
  58. package/dist/esm/components/editor/PropertyInspector/PropertyRow.js.map +1 -1
  59. package/dist/esm/components/editor/PropertyInspector/PropertySection.js +87 -3
  60. package/dist/esm/components/editor/PropertyInspector/PropertySection.js.map +1 -1
  61. package/dist/esm/components/feedback/Alert/Alert.css.js +1 -1
  62. package/dist/esm/components/feedback/Alert/Alert.js +3 -2
  63. package/dist/esm/components/feedback/Alert/Alert.js.map +1 -1
  64. package/dist/esm/components/feedback/CommandPalette/CommandPalette.css.js +20 -0
  65. package/dist/esm/components/feedback/CommandPalette/CommandPalette.css.js.map +1 -0
  66. package/dist/esm/components/feedback/CommandPalette/CommandPalette.js +261 -0
  67. package/dist/esm/components/feedback/CommandPalette/CommandPalette.js.map +1 -0
  68. package/dist/esm/components/feedback/CommandPalette/fuzzySearch.js +86 -0
  69. package/dist/esm/components/feedback/CommandPalette/fuzzySearch.js.map +1 -0
  70. package/dist/esm/components/feedback/CommandPalette/useRecentItems.js +63 -0
  71. package/dist/esm/components/feedback/CommandPalette/useRecentItems.js.map +1 -0
  72. package/dist/esm/components/feedback/Dialog/DialogHeader.js +2 -1
  73. package/dist/esm/components/feedback/Dialog/DialogHeader.js.map +1 -1
  74. package/dist/esm/components/feedback/Drawer/Drawer.css.js +17 -0
  75. package/dist/esm/components/feedback/Drawer/Drawer.css.js.map +1 -0
  76. package/dist/esm/components/feedback/Drawer/Drawer.js +120 -0
  77. package/dist/esm/components/feedback/Drawer/Drawer.js.map +1 -0
  78. package/dist/esm/components/feedback/Drawer/useDrawerAnimation.js +74 -0
  79. package/dist/esm/components/feedback/Drawer/useDrawerAnimation.js.map +1 -0
  80. package/dist/esm/components/feedback/Skeleton/SkeletonLayout.css.js +18 -0
  81. package/dist/esm/components/feedback/Skeleton/SkeletonLayout.css.js.map +1 -0
  82. package/dist/esm/components/feedback/Skeleton/SkeletonLayout.js +95 -0
  83. package/dist/esm/components/feedback/Skeleton/SkeletonLayout.js.map +1 -0
  84. package/dist/esm/components/feedback/Stat/Stat.css.js +15 -0
  85. package/dist/esm/components/feedback/Stat/Stat.css.js.map +1 -0
  86. package/dist/esm/components/feedback/Stat/Stat.js +55 -0
  87. package/dist/esm/components/feedback/Stat/Stat.js.map +1 -0
  88. package/dist/esm/components/feedback/Toast/ToastItem.js +12 -15
  89. package/dist/esm/components/feedback/Toast/ToastItem.js.map +1 -1
  90. package/dist/esm/components/layout/Accordion/Accordion.js +2 -1
  91. package/dist/esm/components/layout/Accordion/Accordion.js.map +1 -1
  92. package/dist/esm/components/layout/Accordion/AccordionTrigger.js +2 -3
  93. package/dist/esm/components/layout/Accordion/AccordionTrigger.js.map +1 -1
  94. package/dist/esm/components/layout/Card/Card.css.js +18 -0
  95. package/dist/esm/components/layout/Card/Card.css.js.map +1 -0
  96. package/dist/esm/components/layout/Card/Card.js +66 -0
  97. package/dist/esm/components/layout/Card/Card.js.map +1 -0
  98. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js +1 -0
  99. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js.map +1 -1
  100. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js +1 -0
  101. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js.map +1 -1
  102. package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js +5 -0
  103. package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js.map +1 -1
  104. package/dist/esm/components/navigation/Pagination/Pagination.css.js +12 -0
  105. package/dist/esm/components/navigation/Pagination/Pagination.css.js.map +1 -0
  106. package/dist/esm/components/navigation/Pagination/Pagination.js +107 -0
  107. package/dist/esm/components/navigation/Pagination/Pagination.js.map +1 -0
  108. package/dist/esm/components/navigation/Pagination/usePagination.js +143 -0
  109. package/dist/esm/components/navigation/Pagination/usePagination.js.map +1 -0
  110. package/dist/esm/components/primitives/Avatar/Avatar.js +87 -1
  111. package/dist/esm/components/primitives/Avatar/Avatar.js.map +1 -1
  112. package/dist/esm/components/primitives/Badge/Badge.js +87 -1
  113. package/dist/esm/components/primitives/Badge/Badge.js.map +1 -1
  114. package/dist/esm/components/primitives/Checkbox/Checkbox.js +5 -2
  115. package/dist/esm/components/primitives/Checkbox/Checkbox.js.map +1 -1
  116. package/dist/esm/components/primitives/Collapsible/Collapsible.js +2 -3
  117. package/dist/esm/components/primitives/Collapsible/Collapsible.js.map +1 -1
  118. package/dist/esm/components/primitives/HoverCard/HoverCard.css.js +7 -0
  119. package/dist/esm/components/primitives/HoverCard/HoverCard.css.js.map +1 -0
  120. package/dist/esm/components/primitives/HoverCard/HoverCard.js +169 -0
  121. package/dist/esm/components/primitives/HoverCard/HoverCard.js.map +1 -0
  122. package/dist/esm/components/primitives/Icon/Icon.js +16 -2
  123. package/dist/esm/components/primitives/Icon/Icon.js.map +1 -1
  124. package/dist/esm/components/primitives/Link/Link.js +3 -3
  125. package/dist/esm/components/primitives/Link/Link.js.map +1 -1
  126. package/dist/esm/components/primitives/Popover/PopoverClose.js +2 -3
  127. package/dist/esm/components/primitives/Popover/PopoverClose.js.map +1 -1
  128. package/dist/esm/components/primitives/Radio/Radio.js +1 -1
  129. package/dist/esm/hooks/useBreakpoint/useBreakpoint.js +44 -0
  130. package/dist/esm/hooks/useBreakpoint/useBreakpoint.js.map +1 -0
  131. package/dist/esm/hooks/useDebounced/useDebouncedCallback.js +97 -0
  132. package/dist/esm/hooks/useDebounced/useDebouncedCallback.js.map +1 -0
  133. package/dist/esm/hooks/useDebounced/useDebouncedValue.js +35 -0
  134. package/dist/esm/hooks/useDebounced/useDebouncedValue.js.map +1 -0
  135. package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.js +73 -0
  136. package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.js.map +1 -0
  137. package/dist/esm/hooks/useListboxNav/useListboxNav.js +181 -0
  138. package/dist/esm/hooks/useListboxNav/useListboxNav.js.map +1 -0
  139. package/dist/esm/hooks/useMediaQuery/useMediaQuery.js +54 -0
  140. package/dist/esm/hooks/useMediaQuery/useMediaQuery.js.map +1 -0
  141. package/dist/esm/hooks/useThrottledCallback/useThrottledCallback.js +78 -0
  142. package/dist/esm/hooks/useThrottledCallback/useThrottledCallback.js.map +1 -0
  143. package/dist/esm/index.js +25 -0
  144. package/dist/esm/index.js.map +1 -1
  145. package/dist/esm/theme/breakpoints.js +27 -0
  146. package/dist/esm/theme/breakpoints.js.map +1 -0
  147. package/dist/esm/theme/index.js +1 -0
  148. package/dist/esm/theme/index.js.map +1 -1
  149. package/dist/tokens/tokens.dark.css +1 -1
  150. package/dist/tokens/tokens.json +1 -1
  151. package/dist/tokens/tokens.light.css +1 -1
  152. package/dist/types/components/Icons/CloudUploadIcon.d.ts +27 -0
  153. package/dist/types/components/Icons/ExternalLinkIcon.d.ts +29 -0
  154. package/dist/types/components/Icons/FirstIcon.d.ts +26 -0
  155. package/dist/types/components/Icons/LastIcon.d.ts +26 -0
  156. package/dist/types/components/Icons/UnlinkIcon.d.ts +29 -0
  157. package/dist/types/components/controls/Combobox/Combobox.d.ts +29 -0
  158. package/dist/types/components/controls/Combobox/Combobox.types.d.ts +109 -0
  159. package/dist/types/components/controls/FileUploader/FileUploader.d.ts +34 -0
  160. package/dist/types/components/controls/FileUploader/FileUploader.types.d.ts +94 -0
  161. package/dist/types/components/controls/MultiSelect/MultiSelect.d.ts +31 -0
  162. package/dist/types/components/controls/MultiSelect/MultiSelect.types.d.ts +85 -0
  163. package/dist/types/components/controls/TagInput/TagInput.d.ts +24 -0
  164. package/dist/types/components/controls/TagInput/TagInput.types.d.ts +100 -0
  165. package/dist/types/components/data/DataTable/DataTable.d.ts +8 -0
  166. package/dist/types/components/data/DataTable/DataTable.types.d.ts +159 -0
  167. package/dist/types/components/feedback/Alert/Alert.d.ts +1 -0
  168. package/dist/types/components/feedback/Alert/Alert.types.d.ts +7 -0
  169. package/dist/types/components/feedback/CommandPalette/CommandPalette.d.ts +29 -0
  170. package/dist/types/components/feedback/CommandPalette/CommandPalette.types.d.ts +61 -0
  171. package/dist/types/components/feedback/CommandPalette/fuzzySearch.d.ts +6 -0
  172. package/dist/types/components/feedback/Drawer/Drawer.d.ts +12 -0
  173. package/dist/types/components/feedback/Drawer/Drawer.types.d.ts +70 -0
  174. package/dist/types/components/feedback/Skeleton/Skeleton.types.d.ts +44 -1
  175. package/dist/types/components/feedback/Skeleton/SkeletonLayout.d.ts +314 -0
  176. package/dist/types/components/feedback/Stat/Stat.d.ts +23 -0
  177. package/dist/types/components/feedback/Stat/Stat.types.d.ts +38 -0
  178. package/dist/types/components/layout/Accordion/Accordion.types.d.ts +7 -0
  179. package/dist/types/components/layout/Card/Card.d.ts +12 -0
  180. package/dist/types/components/layout/Card/Card.types.d.ts +54 -0
  181. package/dist/types/components/navigation/Pagination/Pagination.d.ts +22 -0
  182. package/dist/types/components/navigation/Pagination/Pagination.types.d.ts +49 -0
  183. package/dist/types/components/primitives/Button/Button.d.ts +1 -1
  184. package/dist/types/components/primitives/HoverCard/HoverCard.d.ts +10 -0
  185. package/dist/types/components/primitives/HoverCard/HoverCard.types.d.ts +64 -0
  186. package/dist/types/components/primitives/Icon/Icon.d.ts +14 -1
  187. package/dist/types/components/primitives/IconButton/IconButton.d.ts +1 -1
  188. package/dist/types/hooks/useBreakpoint/useBreakpoint.d.ts +19 -0
  189. package/dist/types/hooks/useBreakpoint/useBreakpoint.types.d.ts +20 -0
  190. package/dist/types/hooks/useDebounced/useDebounced.types.d.ts +15 -0
  191. package/dist/types/hooks/useDebounced/useDebouncedCallback.d.ts +22 -0
  192. package/dist/types/hooks/useDebounced/useDebouncedValue.d.ts +16 -0
  193. package/dist/types/hooks/useIntersectionObserver/useIntersectionObserver.d.ts +22 -0
  194. package/dist/types/hooks/useIntersectionObserver/useIntersectionObserver.types.d.ts +22 -0
  195. package/dist/types/hooks/useListboxNav/useListboxNav.d.ts +75 -0
  196. package/dist/types/hooks/useMediaQuery/useMediaQuery.d.ts +19 -0
  197. package/dist/types/hooks/useMediaQuery/useMediaQuery.types.d.ts +6 -0
  198. package/dist/types/hooks/useThrottledCallback/useThrottledCallback.d.ts +23 -0
  199. package/dist/types/hooks/useThrottledCallback/useThrottledCallback.types.d.ts +13 -0
  200. package/dist/types/index.d.ts +43 -1
  201. package/dist/types/theme/breakpoints.d.ts +22 -0
  202. package/dist/types/theme/index.d.ts +1 -0
  203. package/package.json +3 -1
@@ -0,0 +1,74 @@
1
+ "use client";
2
+ import { useState, useRef, useEffect } from 'react';
3
+ import { FOCUSABLE_SELECTOR } from '../../../hooks/useFocusTrap/useFocusTrap.js';
4
+ import { DRAWER_ANIMATION_MS } from './Drawer.css.js';
5
+
6
+ /**
7
+ * Mount/unmount animation lifecycle plus focus management for Drawer.
8
+ * Mirrors the Dialog hook so behavior stays consistent: mount on open,
9
+ * delay unmount on close to play the slide-out, return focus to the
10
+ * previously focused element. `prefers-reduced-motion: reduce` collapses
11
+ * the animation delay to zero.
12
+ */
13
+ function useDrawerAnimation({ open, panelRef, initialFocusRef, shouldFocus, }) {
14
+ const [mounted, setMounted] = useState(false);
15
+ const [closing, setClosing] = useState(false);
16
+ const previousFocusRef = useRef(null);
17
+ const wasOpenRef = useRef(false);
18
+ useEffect(() => {
19
+ if (open) {
20
+ previousFocusRef.current = document.activeElement;
21
+ setClosing(false);
22
+ setMounted(true);
23
+ wasOpenRef.current = true;
24
+ return undefined;
25
+ }
26
+ if (wasOpenRef.current) {
27
+ wasOpenRef.current = false;
28
+ setClosing(true);
29
+ const prefersReducedMotion = typeof window !== 'undefined' &&
30
+ typeof window.matchMedia === 'function' &&
31
+ window.matchMedia('(prefers-reduced-motion: reduce)').matches;
32
+ const delay = prefersReducedMotion ? 0 : DRAWER_ANIMATION_MS;
33
+ const timer = setTimeout(() => {
34
+ setMounted(false);
35
+ setClosing(false);
36
+ if (previousFocusRef.current) {
37
+ previousFocusRef.current.focus();
38
+ previousFocusRef.current = null;
39
+ }
40
+ }, delay);
41
+ return () => {
42
+ clearTimeout(timer);
43
+ };
44
+ }
45
+ return undefined;
46
+ }, [open]);
47
+ useEffect(() => {
48
+ if (!open || !mounted || !shouldFocus)
49
+ return undefined;
50
+ const timer = setTimeout(() => {
51
+ if (initialFocusRef?.current) {
52
+ initialFocusRef.current.focus();
53
+ return;
54
+ }
55
+ const panel = panelRef.current;
56
+ if (!panel)
57
+ return;
58
+ const firstFocusable = panel.querySelector(FOCUSABLE_SELECTOR);
59
+ if (firstFocusable) {
60
+ firstFocusable.focus();
61
+ }
62
+ else {
63
+ panel.focus();
64
+ }
65
+ }, 0);
66
+ return () => {
67
+ clearTimeout(timer);
68
+ };
69
+ }, [open, mounted, initialFocusRef, panelRef, shouldFocus]);
70
+ return { mounted, closing };
71
+ }
72
+
73
+ export { useDrawerAnimation };
74
+ //# sourceMappingURL=useDrawerAnimation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDrawerAnimation.js","sources":["../../../../../../src/components/feedback/Drawer/useDrawerAnimation.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAkBA;;;;;;AAMG;AACG;;;AAQJ;AACA;;;AAII;;;AAGA;AACA;;AAEF;AACE;;AAEA;AAEE;AACA;;AAEF;;;AAGE;AACE;AACA;;;AAGJ;;AAEA;;AAEF;AACF;;AAGE;AAAuC;AACvC;AACE;AACE;;;AAGF;AACA;;;;;;;;;;AASF;;AAEA;AACF;AAEA;AACF;;"}
@@ -0,0 +1,18 @@
1
+ import './../../../assets/src/components/feedback/Skeleton/SkeletonLayout.css.ts.vanilla-Db7bpqiI.css';
2
+
3
+ var cardBodyStyle = 'SkeletonLayout_cardBodyStyle__1kvkgdl2';
4
+ var cardLayoutStyle = 'SkeletonLayout_cardLayoutStyle__1kvkgdl1';
5
+ var chatBubbleStyle = 'SkeletonLayout_chatBubbleStyle__1kvkgdlc';
6
+ var chatLayoutStyle = 'SkeletonLayout_chatLayoutStyle__1kvkgdl9';
7
+ var chatRowEndStyle = 'SkeletonLayout_chatRowEndStyle__1kvkgdlb';
8
+ var chatRowStyle = 'SkeletonLayout_chatRowStyle__1kvkgdla';
9
+ var gridLayoutStyle = 'SkeletonLayout_gridLayoutStyle__1kvkgdl8';
10
+ var layoutColumnsVar = 'var(--layoutColumnsVar__1kvkgdl0)';
11
+ var listLayoutStyle = 'SkeletonLayout_listLayoutStyle__1kvkgdl3';
12
+ var listRowBodyStyle = 'SkeletonLayout_listRowBodyStyle__1kvkgdl5';
13
+ var listRowStyle = 'SkeletonLayout_listRowStyle__1kvkgdl4';
14
+ var tableHeaderCellStyle = 'SkeletonLayout_tableHeaderCellStyle__1kvkgdl7';
15
+ var tableLayoutStyle = 'SkeletonLayout_tableLayoutStyle__1kvkgdl6';
16
+
17
+ export { cardBodyStyle, cardLayoutStyle, chatBubbleStyle, chatLayoutStyle, chatRowEndStyle, chatRowStyle, gridLayoutStyle, layoutColumnsVar, listLayoutStyle, listRowBodyStyle, listRowStyle, tableHeaderCellStyle, tableLayoutStyle };
18
+ //# sourceMappingURL=SkeletonLayout.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkeletonLayout.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,95 @@
1
+ "use client";
2
+ import { jsx, jsxs } from 'react/jsx-runtime';
3
+ import React from 'react';
4
+ import { assignInlineVars } from '@vanilla-extract/dynamic';
5
+ import { cx } from '../../../utils/cx.js';
6
+ import { Skeleton } from './Skeleton.js';
7
+ import { chatLayoutStyle, chatBubbleStyle, chatRowEndStyle, chatRowStyle, gridLayoutStyle, layoutColumnsVar, tableLayoutStyle, tableHeaderCellStyle, listLayoutStyle, listRowStyle, listRowBodyStyle, cardLayoutStyle, cardBodyStyle } from './SkeletonLayout.css.js';
8
+
9
+ const DEFAULT_COUNT = {
10
+ card: 1,
11
+ list: 5,
12
+ table: 5,
13
+ grid: 12,
14
+ chat: 4,
15
+ };
16
+ const DEFAULT_ANIMATION = {
17
+ card: 'pulse',
18
+ list: 'pulse',
19
+ table: 'pulse',
20
+ grid: 'none',
21
+ chat: 'pulse',
22
+ };
23
+ const DEFAULT_COLUMNS = 4;
24
+ function renderCard(animation) {
25
+ return (jsxs("div", { className: cardLayoutStyle, children: [jsx(Skeleton, { shape: "circle", width: 40, animation: animation }), jsxs("div", { className: cardBodyStyle, children: [jsx(Skeleton, { shape: "line", width: "70%", animation: animation }), jsx(Skeleton, { shape: "line", width: "100%", animation: animation }), jsx(Skeleton, { shape: "line", width: "50%", animation: animation }), jsx(Skeleton, { width: "100%", height: 80, animation: animation })] })] }));
26
+ }
27
+ function renderList(count, animation) {
28
+ return (jsx("div", { className: listLayoutStyle, children: Array.from({ length: count }, (_, i) => (jsxs("div", { className: listRowStyle, children: [jsx(Skeleton, { shape: "circle", width: 32, animation: animation }), jsxs("div", { className: listRowBodyStyle, children: [jsx(Skeleton, { shape: "line", width: "60%", animation: animation }), jsx(Skeleton, { shape: "line", width: "90%", animation: animation })] })] }, i))) }));
29
+ }
30
+ function renderTable(rows, columns, animation) {
31
+ const totalCells = (rows + 1) * columns;
32
+ return (jsx("div", { className: tableLayoutStyle, style: assignInlineVars({ [layoutColumnsVar]: String(columns) }), children: Array.from({ length: totalCells }, (_, i) => {
33
+ const isHeader = i < columns;
34
+ return (jsx("div", { className: isHeader ? tableHeaderCellStyle : undefined, children: jsx(Skeleton, { shape: "line", width: isHeader ? '50%' : '80%', animation: animation }) }, i));
35
+ }) }));
36
+ }
37
+ function renderGrid(count, columns, animation) {
38
+ return (jsx("div", { className: gridLayoutStyle, style: assignInlineVars({ [layoutColumnsVar]: String(columns) }), children: Array.from({ length: count }, (_, i) => (jsx(Skeleton, { width: "100%", height: 80, animation: animation }, i))) }));
39
+ }
40
+ const CHAT_BUBBLE_WIDTHS = ['85%', '60%', '95%', '70%', '50%', '80%'];
41
+ function renderChat(count, animation) {
42
+ return (jsx("div", { className: chatLayoutStyle, children: Array.from({ length: count }, (_, i) => {
43
+ const isOutgoing = i % 2 === 1;
44
+ const bubbleWidth = CHAT_BUBBLE_WIDTHS[i % CHAT_BUBBLE_WIDTHS.length];
45
+ return (jsxs("div", { className: cx(chatRowStyle, isOutgoing && chatRowEndStyle), children: [jsx(Skeleton, { shape: "circle", width: 28, animation: animation }), jsxs("div", { className: chatBubbleStyle, children: [jsx(Skeleton, { shape: "line", width: bubbleWidth, animation: animation }), i % 3 === 0 ? (jsx(Skeleton, { shape: "line", width: "40%", animation: animation })) : null] })] }, i));
46
+ }) }));
47
+ }
48
+ /**
49
+ * Pre-built skeleton layouts for common loading patterns — card, list, table,
50
+ * grid, and chat. Drop one in when the surrounding UI shape is known and you
51
+ * want the placeholder structure to mirror it without composing every block
52
+ * by hand.
53
+ *
54
+ * Each variant uses the base `Skeleton` primitive underneath, so animation
55
+ * and reduced-motion behavior match the rest of the library. Use `count` to
56
+ * scale the number of rows/cells, `columns` for `grid` and `table`, and
57
+ * `animation` to opt out of motion for dense surfaces.
58
+ *
59
+ * @example
60
+ * ```tsx
61
+ * <SkeletonLayout variant="card" />
62
+ * <SkeletonLayout variant="list" count={8} />
63
+ * <SkeletonLayout variant="table" columns={5} count={6} />
64
+ * <SkeletonLayout variant="grid" columns={3} count={9} />
65
+ * <SkeletonLayout variant="chat" count={6} />
66
+ * ```
67
+ */
68
+ const SkeletonLayout = /*#__PURE__*/ React.memo(({ variant, count, columns = DEFAULT_COLUMNS, animation, width = '100%', className, style, testId, ref, ...rest }) => {
69
+ const resolvedCount = count ?? DEFAULT_COUNT[variant];
70
+ const resolvedAnimation = animation ?? DEFAULT_ANIMATION[variant];
71
+ const resolvedWidth = typeof width === 'number' ? `${width}px` : width;
72
+ let content;
73
+ switch (variant) {
74
+ case 'card':
75
+ content = renderCard(resolvedAnimation);
76
+ break;
77
+ case 'list':
78
+ content = renderList(resolvedCount, resolvedAnimation);
79
+ break;
80
+ case 'table':
81
+ content = renderTable(resolvedCount, columns, resolvedAnimation);
82
+ break;
83
+ case 'grid':
84
+ content = renderGrid(resolvedCount, columns, resolvedAnimation);
85
+ break;
86
+ case 'chat':
87
+ content = renderChat(resolvedCount, resolvedAnimation);
88
+ break;
89
+ }
90
+ return (jsx("div", { ref: ref, "aria-hidden": "true", "aria-busy": "true", className: cx(className), style: { width: resolvedWidth, ...style }, "data-testid": testId, "data-variant": variant, ...rest, children: content }));
91
+ });
92
+ SkeletonLayout.displayName = 'SkeletonLayout';
93
+
94
+ export { SkeletonLayout };
95
+ //# sourceMappingURL=SkeletonLayout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SkeletonLayout.js","sources":["../../../../../../src/components/feedback/Skeleton/SkeletonLayout.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;AA2BA;AACE;AACA;AACA;AACA;AACA;;AAGF;AACE;AACA;AACA;AACA;AACA;;AAGF;AAEA;;AAYA;AAEA;AAIE;AAaF;AAEA;;AAME;AAMM;AACA;;AAYR;AAEA;AAKE;AAUF;AAEA;AAEA;;AAOQ;;AAEA;;AAqBR;AAEA;;;;;;;;;;;;;;;;;;;AAmBG;AACI;;;AAeH;AAEA;;AAEE;AACE;;AAEF;AACE;;AAEF;;;AAGA;;;AAGA;AACE;;;AAIJ;AAcF;AAGF;;"}
@@ -0,0 +1,15 @@
1
+ import './../../../assets/src/components/feedback/Stat/Stat.css.ts.vanilla-GBk3JAMB.css';
2
+ import { createRuntimeFn } from '@vanilla-extract/recipes/createRuntimeFn';
3
+
4
+ var statContentStyle = 'Stat_statContentStyle__cv0db96';
5
+ var statDeltaColorVar = 'var(--statDeltaColorVar__cv0db90)';
6
+ var statDeltaIconStyle = 'Stat_statDeltaIconStyle__cv0db9d';
7
+ var statDeltaStyle = 'Stat_statDeltaStyle__cv0db9c';
8
+ var statHelperStyle = 'Stat_statHelperStyle__cv0db9e';
9
+ var statIconStyle = 'Stat_statIconStyle__cv0db95';
10
+ var statLabelStyle = 'Stat_statLabelStyle__cv0db97';
11
+ var statRoot = createRuntimeFn({defaultClassName:'Stat_statRoot__cv0db91',variantClassNames:{size:{sm:'Stat_statRoot_size_sm__cv0db92',md:'Stat_statRoot_size_md__cv0db93',lg:'Stat_statRoot_size_lg__cv0db94'}},defaultVariants:{size:'md'},compoundVariants:[]});
12
+ var statValueRecipe = createRuntimeFn({defaultClassName:'Stat_statValueRecipe__cv0db98',variantClassNames:{size:{sm:'Stat_statValueRecipe_size_sm__cv0db99',md:'Stat_statValueRecipe_size_md__cv0db9a',lg:'Stat_statValueRecipe_size_lg__cv0db9b'}},defaultVariants:{size:'md'},compoundVariants:[]});
13
+
14
+ export { statContentStyle, statDeltaColorVar, statDeltaIconStyle, statDeltaStyle, statHelperStyle, statIconStyle, statLabelStyle, statRoot, statValueRecipe };
15
+ //# sourceMappingURL=Stat.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stat.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;"}
@@ -0,0 +1,55 @@
1
+ "use client";
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+ import { assignInlineVars } from '@vanilla-extract/dynamic';
4
+ import { vars } from '../../../theme/contract.css.js';
5
+ import { cx } from '../../../utils/cx.js';
6
+ import { statIconStyle, statContentStyle, statLabelStyle, statValueRecipe, statHelperStyle, statRoot, statDeltaStyle, statDeltaColorVar, statDeltaIconStyle } from './Stat.css.js';
7
+
8
+ const ARROW_PATHS = {
9
+ up: 'M6 2 L10 7 L7 7 L7 10 L5 10 L5 7 L2 7 Z',
10
+ down: 'M6 10 L2 5 L5 5 L5 2 L7 2 L7 5 L10 5 Z',
11
+ neutral: 'M2 6 L10 6 L10 7 L2 7 Z',
12
+ };
13
+ function deltaColor(direction, semantics) {
14
+ if (semantics === 'neutral' || direction === 'neutral') {
15
+ return vars.colors.text.muted;
16
+ }
17
+ const isUpGood = semantics === 'positive';
18
+ const upColor = isUpGood
19
+ ? vars.colors.accent.success
20
+ : vars.colors.accent.error;
21
+ const downColor = isUpGood
22
+ ? vars.colors.accent.error
23
+ : vars.colors.accent.success;
24
+ return direction === 'up' ? upColor : downColor;
25
+ }
26
+ function DeltaIcon({ direction }) {
27
+ return (jsx("svg", { className: statDeltaIconStyle, viewBox: "0 0 12 12", "aria-hidden": "true", focusable: "false", children: jsx("path", { d: ARROW_PATHS[direction], fill: "currentColor" }) }));
28
+ }
29
+ function DeltaDisplay({ delta }) {
30
+ const semantics = delta.semantics ?? 'positive';
31
+ const color = deltaColor(delta.direction, semantics);
32
+ return (jsxs("span", { className: statDeltaStyle, style: assignInlineVars({ [statDeltaColorVar]: color }), children: [jsx(DeltaIcon, { direction: delta.direction }), delta.value] }));
33
+ }
34
+ /**
35
+ * KPI / metric display: label + value + optional trend delta.
36
+ *
37
+ * Use `delta.semantics` to indicate whether "up" is good. Errors and
38
+ * latency, for example, want `semantics: "negative"` so an upward
39
+ * direction shows red.
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * <Stat
44
+ * label="MRR"
45
+ * value="$12,400"
46
+ * delta={{ value: '+8.2%', direction: 'up' }}
47
+ * helper="vs. last month"
48
+ * />
49
+ * ```
50
+ */
51
+ const Stat = ({ label, value, delta, helper, icon, size = 'md', className, style, testId, ref, ...rest }) => (jsxs("div", { ref: ref, className: cx(statRoot({ size }), className), style: style, "data-testid": testId, ...rest, children: [icon && jsx("div", { className: statIconStyle, children: icon }), jsxs("div", { className: statContentStyle, children: [jsx("p", { className: statLabelStyle, children: label }), jsx("p", { className: statValueRecipe({ size }), children: value }), delta && jsx(DeltaDisplay, { delta: delta }), helper && jsx("p", { className: statHelperStyle, children: helper })] })] }));
52
+ Stat.displayName = 'Stat';
53
+
54
+ export { Stat };
55
+ //# sourceMappingURL=Stat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stat.js","sources":["../../../../../../src/components/feedback/Stat/Stat.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAwBA;AACE;AACA;AACA;;AAGF;;AAKI;;AAEF;;AAEE;;;AAGA;;;AAGJ;AAEA;AACE;AAUF;AAEA;AACE;;AAEA;AASF;AAEA;;;;;;;;;;;;;;;;AAgBG;AACI;AA8BP;;"}
@@ -2,27 +2,24 @@
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
3
  import { useState, useRef, useCallback, useEffect } from 'react';
4
4
  import { assignInlineVars } from '@vanilla-extract/dynamic';
5
+ import { CloseIcon } from '../../Icons/CloseIcon.js';
6
+ import { ErrorIcon } from '../../Icons/ErrorIcon.js';
7
+ import { InfoIcon } from '../../Icons/InfoIcon.js';
8
+ import { SuccessIcon } from '../../Icons/SuccessIcon.js';
9
+ import { WarningIcon } from '../../Icons/WarningIcon.js';
5
10
  import { content, iconWrapper, textContent, titleStyle, message, actionButton, closeButton, progressDurationVar, progressBar, toast } from './ToastItem.css.js';
6
11
 
7
- // --- Severity icons (inline SVGs) ---
8
- const SeverityIcon = ({ severity, color, }) => {
9
- const size = 16;
10
- const commonProps = {
11
- width: size,
12
- height: size,
13
- viewBox: '0 0 16 16',
14
- fill: 'none',
15
- 'aria-hidden': true,
16
- };
12
+ // --- Severity icons ---
13
+ const SeverityIcon = ({ severity }) => {
17
14
  switch (severity) {
18
15
  case 'info':
19
- return (jsxs("svg", { ...commonProps, children: [jsx("circle", { cx: "8", cy: "8", r: "7", stroke: color, strokeWidth: "1.5" }), jsx("line", { x1: "8", y1: "7", x2: "8", y2: "11", stroke: color, strokeWidth: "1.5", strokeLinecap: "round" }), jsx("circle", { cx: "8", cy: "5", r: "0.75", fill: color })] }));
16
+ return jsx(InfoIcon, { size: "md", color: "currentColor", decorative: true });
20
17
  case 'success':
21
- return (jsxs("svg", { ...commonProps, children: [jsx("circle", { cx: "8", cy: "8", r: "7", stroke: color, strokeWidth: "1.5" }), jsx("path", { d: "M5 8L7 10L11 6", stroke: color, strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" })] }));
18
+ return jsx(SuccessIcon, { size: "md", color: "currentColor", decorative: true });
22
19
  case 'warning':
23
- return (jsxs("svg", { ...commonProps, children: [jsx("path", { d: "M8 2L14.5 13H1.5L8 2Z", stroke: color, strokeWidth: "1.5", strokeLinejoin: "round" }), jsx("line", { x1: "8", y1: "6", x2: "8", y2: "9", stroke: color, strokeWidth: "1.5", strokeLinecap: "round" }), jsx("circle", { cx: "8", cy: "11", r: "0.75", fill: color })] }));
20
+ return jsx(WarningIcon, { size: "md", color: "currentColor", decorative: true });
24
21
  case 'error':
25
- return (jsxs("svg", { ...commonProps, children: [jsx("circle", { cx: "8", cy: "8", r: "7", stroke: color, strokeWidth: "1.5" }), jsx("line", { x1: "5.5", y1: "5.5", x2: "10.5", y2: "10.5", stroke: color, strokeWidth: "1.5", strokeLinecap: "round" }), jsx("line", { x1: "10.5", y1: "5.5", x2: "5.5", y2: "10.5", stroke: color, strokeWidth: "1.5", strokeLinecap: "round" })] }));
22
+ return jsx(ErrorIcon, { size: "md", color: "currentColor", decorative: true });
26
23
  }
27
24
  };
28
25
  /**
@@ -74,7 +71,7 @@ const ToastItem = ({ toast: toastData, onDismiss, }) => {
74
71
  startTimer();
75
72
  return clearTimer;
76
73
  }, [startTimer, clearTimer]);
77
- return (jsxs("div", { className: toast({ severity }), role: role, "aria-live": ariaLive, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, "data-testid": `toast-${id}`, children: [jsxs("div", { className: content, children: [jsx("div", { className: iconWrapper, children: icon ?? jsx(SeverityIcon, { severity: severity, color: "currentColor" }) }), jsxs("div", { className: textContent, children: [title && jsx("div", { className: titleStyle, children: title }), jsx("div", { className: message, children: msg }), action && (jsx("button", { className: actionButton({ severity }), onClick: action.onClick, type: "button", children: action.label }))] }), closable && (jsx("button", { className: closeButton, onClick: () => onDismiss(id), "aria-label": "Dismiss notification", type: "button", children: jsxs("svg", { width: 12, height: 12, viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: [jsx("line", { x1: "2", y1: "2", x2: "10", y2: "10", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" }), jsx("line", { x1: "10", y1: "2", x2: "2", y2: "10", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round" })] }) }))] }), showProgress && duration > 0 && (jsx("div", { className: progressBar({ severity, paused }), style: assignInlineVars({
74
+ return (jsxs("div", { className: toast({ severity }), role: role, "aria-live": ariaLive, onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave, "data-testid": `toast-${id}`, children: [jsxs("div", { className: content, children: [jsx("div", { className: iconWrapper, children: icon ?? jsx(SeverityIcon, { severity: severity }) }), jsxs("div", { className: textContent, children: [title && jsx("div", { className: titleStyle, children: title }), jsx("div", { className: message, children: msg }), action && (jsx("button", { className: actionButton({ severity }), onClick: action.onClick, type: "button", children: action.label }))] }), closable && (jsx("button", { className: closeButton, onClick: () => onDismiss(id), "aria-label": "Dismiss notification", type: "button", children: jsx(CloseIcon, { size: "sm", decorative: true }) }))] }), showProgress && duration > 0 && (jsx("div", { className: progressBar({ severity, paused }), style: assignInlineVars({
78
75
  [progressDurationVar]: `${duration}ms`,
79
76
  }), "data-testid": `toast-progress-${id}` }))] }));
80
77
  };
@@ -1 +1 @@
1
- {"version":3,"file":"ToastItem.js","sources":["../../../../../../src/components/feedback/Toast/ToastItem.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAkBA;AAEA;;AAKE;AACE;AACA;AACA;AACA;AACA;;;AAIA;AACE;AAeF;;AAaA;AACE;AAoBF;AACE;;AAwBN;AASA;;;;;;;AAOG;AACI;;;AAiBL;AACA;;;;;AAOA;AACE;AACE;AACA;;;AAIJ;;;AAEE;AACA;AACA;;AAEA;;AAGF;;;;AAGE;;AAEF;AAEA;;;;AAGE;AACF;;AAGE;AACA;AACF;;AAoEU;;AAOZ;AAEA;;"}
1
+ {"version":3,"file":"ToastItem.js","sources":["../../../../../../src/components/feedback/Toast/ToastItem.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;AAuBA;AAEA;;AAEI;AACE;AACF;AACE;AACF;AACE;AACF;AACE;;AAEN;AASA;;;;;;;AAOG;AACI;;;AAiBL;AACA;;;;;AAOA;AACE;AACE;AACA;;;AAIJ;;;AAEE;AACA;AACA;;AAEA;;AAGF;;;;AAGE;;AAEF;AAEA;;;;AAGE;AACF;;AAGE;AACA;AACF;AAEA;AAyCU;;AAOZ;AAEA;;"}
@@ -50,7 +50,7 @@ function normalizeValue(value) {
50
50
  * </Accordion>
51
51
  * ```
52
52
  */
53
- const Accordion = ({ value: valueProp, defaultValue, multiple = false, collapsible = false, variant = 'default', size = 'md', gap = 0, children, onChange, className, style, testId, ref, ...rest }) => {
53
+ const Accordion = ({ value: valueProp, defaultValue, multiple = false, collapsible = false, variant = 'default', size = 'md', gap = 0, width = '100%', children, onChange, className, style, testId, ref, ...rest }) => {
54
54
  const autoId = useId();
55
55
  const [internalValue, setInternalValue] = useState(normalizeValue(defaultValue));
56
56
  const isControlled = valueProp !== undefined;
@@ -94,6 +94,7 @@ const Accordion = ({ value: valueProp, defaultValue, multiple = false, collapsib
94
94
  ...assignInlineVars({
95
95
  [accordionGapVar]: `${gap}px`,
96
96
  }),
97
+ width: typeof width === 'number' ? `${width}px` : width,
97
98
  ...style,
98
99
  };
99
100
  return (jsx(AccordionContext.Provider, { value: contextValue, children: jsx("div", { ref: ref, className: cx(accordionRoot, className), style: mergedStyle, "data-testid": testId, ...rest, children: children }) }));
@@ -1 +1 @@
1
- {"version":3,"file":"Accordion.js","sources":["../../../../../../src/components/layout/Accordion/Accordion.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAkBA;AAEA;AACE;AACF;AACE;;AAGA;;AAEE;;AAIF;AACF;;AAGE;;AAEE;;AAIF;AACF;AAIA;AAEA;;AAC2B;AACzB;AAA0B;;AAE5B;AAEA;AAEA;;;;;;;;;;;;;;;;AAgBG;;AAiBD;AAEA;AAGA;;AAEE;;AAGF;;AAII;;AAGE;AACE;AACA;;;;;;;AAKA;;;;;;;AASF;;;;;AAIJ;AAIF;;;;;AAKE;;AAGF;AACE;AACE;;AAEF;;AAGF;AAaF;AAEA;;"}
1
+ {"version":3,"file":"Accordion.js","sources":["../../../../../../src/components/layout/Accordion/Accordion.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAkBA;AAEA;AACE;AACF;AACE;;AAGA;;AAEE;;AAIF;AACF;;AAGE;;AAEE;;AAIF;AACF;AAIA;AAEA;;AAC2B;AACzB;AAA0B;;AAE5B;AAEA;AAEA;;;;;;;;;;;;;;;;AAgBG;AACI;AAiBL;AAEA;AAGA;;AAEE;;AAGF;;AAII;;AAGE;AACE;AACA;;;;;;;AAKA;;;;;;;AASF;;;;;AAIJ;AAIF;;;;;AAKE;;AAGF;AACE;AACE;;AAEF;AACA;;AAGF;AAaF;AAEA;;"}
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
3
  import { useCallback } from 'react';
4
+ import { ChevronRightIcon } from '../../Icons/ChevronRightIcon.js';
4
5
  import { useAccordionContext, useAccordionItemContext } from './Accordion.js';
5
6
  import { cx } from '../../../utils/cx.js';
6
7
  import { chevronExpanded, chevronCollapsed, chevronStyle, iconArea, actionsArea, triggerButton } from './Accordion.css.js';
@@ -10,8 +11,6 @@ const CHEVRON_SIZE_MAP = {
10
11
  md: { chevronSize: 12 },
11
12
  lg: { chevronSize: 14 },
12
13
  };
13
- // --- Chevron icon ---
14
- const ChevronRightIcon = ({ size }) => (jsx("svg", { width: size, height: size, viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: jsx("path", { d: "M4.5 3L7.5 6L4.5 9", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }));
15
14
  // --- Component ---
16
15
  const AccordionTrigger = ({ children, icon, actions, indicator, className, style, testId, ref, ...rest }) => {
17
16
  const { toggleItem, variant, size, accordionId } = useAccordionContext();
@@ -31,7 +30,7 @@ const AccordionTrigger = ({ children, icon, actions, indicator, className, style
31
30
  return (jsxs("button", { ref: ref, type: "button", id: triggerId, "aria-expanded": isExpanded, "aria-controls": contentId, "aria-disabled": isDisabled || undefined, disabled: isDisabled, onClick: handleClick, className: cx(triggerButton({ variant, size, disabled: isDisabled }), className), style: style, "data-testid": testId, ...rest, children: [showIndicator && (jsx("span", { className: cx(chevronStyle, isExpanded ? chevronExpanded : chevronCollapsed), style: {
32
31
  width: `${sizeConfig.chevronSize}px`,
33
32
  height: `${sizeConfig.chevronSize}px`,
34
- }, children: indicator ?? jsx(ChevronRightIcon, { size: sizeConfig.chevronSize }) })), icon && jsx("span", { className: iconArea, children: icon }), jsx("span", { children: children }), actions && (jsx("span", { className: actionsArea, onClick: handleActionsClick, children: actions }))] }));
33
+ }, children: indicator ?? (jsx(ChevronRightIcon, { size: sizeConfig.chevronSize, decorative: true })) })), icon && jsx("span", { className: iconArea, children: icon }), jsx("span", { children: children }), actions && (jsx("span", { className: actionsArea, onClick: handleActionsClick, children: actions }))] }));
35
34
  };
36
35
  AccordionTrigger.displayName = 'AccordionTrigger';
37
36
 
@@ -1 +1 @@
1
- {"version":3,"file":"AccordionTrigger.js","sources":["../../../../../../src/components/layout/Accordion/AccordionTrigger.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAqBA;AACE;AACA;AACA;;AAGF;AAEA;AAkBA;AAEO;AAWL;;AAEA;AAEA;AACA;AAEA;;;;;AAMA;;;AAIA;AAEA;AAyBU;AACA;;AAeZ;AAEA;;"}
1
+ {"version":3,"file":"AccordionTrigger.js","sources":["../../../../../../src/components/layout/Accordion/AccordionTrigger.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;AAsBA;AACE;AACA;AACA;;AAGF;AAEO;AAWL;;AAEA;AAEA;AACA;AAEA;;;;;AAMA;;;AAIA;AAEA;AAyBU;AACA;;AAiBZ;AAEA;;"}
@@ -0,0 +1,18 @@
1
+ import './../../../assets/src/components/layout/Card/Card.css.ts.vanilla-Ducn1gUX.css';
2
+ import { createRuntimeFn } from '@vanilla-extract/recipes/createRuntimeFn';
3
+
4
+ var cardBodyStyle = 'Card_cardBodyStyle__50gmukh';
5
+ var cardFooterStyle = createRuntimeFn({defaultClassName:'Card_cardFooterStyle__50gmuki',variantClassNames:{align:{left:'Card_cardFooterStyle_align_left__50gmukj',center:'Card_cardFooterStyle_align_center__50gmukk',right:'Card_cardFooterStyle_align_right__50gmukl','space-between':'Card_cardFooterStyle_align_space-between__50gmukm'}},defaultVariants:{align:'right'},compoundVariants:[]});
6
+ var cardHeaderLeadingStyle = 'Card_cardHeaderLeadingStyle__50gmuka';
7
+ var cardHeaderStyle = 'Card_cardHeaderStyle__50gmuk9';
8
+ var cardHeaderSubtitleStyle = 'Card_cardHeaderSubtitleStyle__50gmukd';
9
+ var cardHeaderTextStyle = 'Card_cardHeaderTextStyle__50gmukb';
10
+ var cardHeaderTitleStyle = 'Card_cardHeaderTitleStyle__50gmukc';
11
+ var cardHeaderTrailingStyle = 'Card_cardHeaderTrailingStyle__50gmuke';
12
+ var cardMediaAspectVar = 'var(--cardMediaAspectVar__50gmuk0)';
13
+ var cardMediaImageStyle = 'Card_cardMediaImageStyle__50gmukg';
14
+ var cardMediaStyle = 'Card_cardMediaStyle__50gmukf';
15
+ var cardRecipe = createRuntimeFn({defaultClassName:'Card_cardRecipe__50gmuk1',variantClassNames:{variant:{outlined:'Card_cardRecipe_variant_outlined__50gmuk2',filled:'Card_cardRecipe_variant_filled__50gmuk3',elevated:'Card_cardRecipe_variant_elevated__50gmuk4'},interactive:{true:'Card_cardRecipe_interactive_true__50gmuk5'},selected:{true:'Card_cardRecipe_selected_true__50gmuk6'},disabled:{true:'Card_cardRecipe_disabled_true__50gmuk7'}},defaultVariants:{variant:'outlined'},compoundVariants:[[{variant:'elevated',interactive:true},'Card_cardRecipe_compound_0__50gmuk8']]});
16
+
17
+ export { cardBodyStyle, cardFooterStyle, cardHeaderLeadingStyle, cardHeaderStyle, cardHeaderSubtitleStyle, cardHeaderTextStyle, cardHeaderTitleStyle, cardHeaderTrailingStyle, cardMediaAspectVar, cardMediaImageStyle, cardMediaStyle, cardRecipe };
18
+ //# sourceMappingURL=Card.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,66 @@
1
+ "use client";
2
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
+ import { useCallback } from 'react';
4
+ import { assignInlineVars } from '@vanilla-extract/dynamic';
5
+ import { cx } from '../../../utils/cx.js';
6
+ import { cardRecipe, cardHeaderLeadingStyle, cardHeaderTextStyle, cardHeaderTitleStyle, cardHeaderSubtitleStyle, cardHeaderTrailingStyle, cardHeaderStyle, cardMediaImageStyle, cardMediaAspectVar, cardMediaStyle, cardBodyStyle, cardFooterStyle } from './Card.css.js';
7
+
8
+ /**
9
+ * A bounded surface representing a single semantic unit (item, summary,
10
+ * preview). Distinct from `Paper` (a generic surface): a Card has a
11
+ * header / media / body / footer convention and can be made interactive.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <Card variant="elevated" onClick={open}>
16
+ * <Card.Header
17
+ * title="Asset"
18
+ * subtitle="Updated 2h ago"
19
+ * trailing={<IconButton icon={<MoreIcon />} />}
20
+ * />
21
+ * <Card.Media src="/preview.png" alt="Preview" />
22
+ * <Card.Body>Description...</Card.Body>
23
+ * <Card.Footer>
24
+ * <Button>Open</Button>
25
+ * </Card.Footer>
26
+ * </Card>
27
+ * ```
28
+ */
29
+ const CardRoot = ({ variant = 'outlined', onClick, selected = false, disabled = false, className, style, testId, children, ref, ...rest }) => {
30
+ const interactive = onClick !== undefined && !disabled;
31
+ const handleKeyDown = useCallback((event) => {
32
+ if (!interactive || !onClick)
33
+ return;
34
+ if (event.key === 'Enter' || event.key === ' ') {
35
+ event.preventDefault();
36
+ onClick(event);
37
+ }
38
+ }, [interactive, onClick]);
39
+ return (jsx("div", { ref: ref, className: cx(cardRecipe({
40
+ variant,
41
+ interactive: interactive || undefined,
42
+ selected: selected || undefined,
43
+ disabled: disabled || undefined,
44
+ }), className), style: style, "data-testid": testId, onClick: interactive ? onClick : undefined, onKeyDown: interactive ? handleKeyDown : undefined, role: interactive ? 'button' : undefined, tabIndex: interactive ? 0 : undefined, "aria-disabled": disabled || undefined, "aria-pressed": interactive && selected ? true : undefined, ...rest, children: children }));
45
+ };
46
+ CardRoot.displayName = 'Card';
47
+ const CardHeader = ({ title, subtitle, leading, trailing, children, className, style, testId, ref, ...rest }) => (jsxs("div", { ref: ref, className: cx(cardHeaderStyle, className), style: style, "data-testid": testId, ...rest, children: [leading && jsx("div", { className: cardHeaderLeadingStyle, children: leading }), jsx("div", { className: cardHeaderTextStyle, children: children ?? (jsxs(Fragment, { children: [title && jsx("h3", { className: cardHeaderTitleStyle, children: title }), subtitle && jsx("p", { className: cardHeaderSubtitleStyle, children: subtitle })] })) }), trailing && jsx("div", { className: cardHeaderTrailingStyle, children: trailing })] }));
48
+ CardHeader.displayName = 'Card.Header';
49
+ const CardMedia = ({ src, alt, aspectRatio = 16 / 9, className, style, testId, children, ref, ...rest }) => (jsx("div", { ref: ref, className: cx(cardMediaStyle, className), style: {
50
+ ...assignInlineVars({ [cardMediaAspectVar]: String(aspectRatio) }),
51
+ ...style,
52
+ }, "data-testid": testId, ...rest, children: src ? (jsx("img", { className: cardMediaImageStyle, src: src, alt: alt ?? '' })) : (children) }));
53
+ CardMedia.displayName = 'Card.Media';
54
+ const CardBody = ({ className, style, testId, children, ref, ...rest }) => (jsx("div", { ref: ref, className: cx(cardBodyStyle, className), style: style, "data-testid": testId, ...rest, children: children }));
55
+ CardBody.displayName = 'Card.Body';
56
+ const CardFooter = ({ align = 'right', className, style, testId, children, ref, ...rest }) => (jsx("div", { ref: ref, className: cx(cardFooterStyle({ align }), className), style: style, "data-testid": testId, ...rest, children: children }));
57
+ CardFooter.displayName = 'Card.Footer';
58
+ const Card = Object.assign(CardRoot, {
59
+ Header: CardHeader,
60
+ Media: CardMedia,
61
+ Body: CardBody,
62
+ Footer: CardFooter,
63
+ });
64
+
65
+ export { Card };
66
+ //# sourceMappingURL=Card.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Card.js","sources":["../../../../../../src/components/layout/Card/Card.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAkCA;;;;;;;;;;;;;;;;;;;;AAoBG;AACH;;AAcE;AAEI;;AACA;;;;AAIF;;;;;;AAaK;AAgBT;AAEA;AAEA;AAgCA;AAEA;AAeM;AACA;AACD;AAYL;AAEA;AAmBA;AAEA;AAoBA;;AAGE;AACA;AACA;AACA;AACD;;"}
@@ -9,6 +9,7 @@ import '../../primitives/Checkbox/Checkbox.js';
9
9
  import '../../primitives/Checkbox/CheckboxGroup.js';
10
10
  import '../../primitives/Code/Code.js';
11
11
  import '../../primitives/Collapsible/Collapsible.js';
12
+ import '../../primitives/HoverCard/HoverCard.js';
12
13
  import '../../primitives/Icon/Icon.js';
13
14
  import '../../primitives/IconButton/IconButton.js';
14
15
  import '../../primitives/Input/Input.js';
@@ -1 +1 @@
1
- {"version":3,"file":"BreadcrumbEllipsis.js","sources":["../../../../../../src/components/navigation/Breadcrumbs/BreadcrumbEllipsis.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA;;;;;;;AAOG;;AAED;AAEI;;AA8BF;AAGJ;;"}
1
+ {"version":3,"file":"BreadcrumbEllipsis.js","sources":["../../../../../../src/components/navigation/Breadcrumbs/BreadcrumbEllipsis.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA;;;;;;;AAOG;;AAED;AAEI;;AA8BF;AAGJ;;"}
@@ -9,6 +9,7 @@ import '../../primitives/Checkbox/Checkbox.js';
9
9
  import '../../primitives/Checkbox/CheckboxGroup.js';
10
10
  import '../../primitives/Code/Code.js';
11
11
  import '../../primitives/Collapsible/Collapsible.js';
12
+ import '../../primitives/HoverCard/HoverCard.js';
12
13
  import '../../primitives/Icon/Icon.js';
13
14
  import '../../primitives/IconButton/IconButton.js';
14
15
  import '../../primitives/Input/Input.js';
@@ -1 +1 @@
1
- {"version":3,"file":"BreadcrumbItem.js","sources":["../../../../../../src/components/navigation/Breadcrumbs/BreadcrumbItem.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA;;AAGI;AACA;;;AAKF;;;AAGE;;AAEJ;AAEA;;;;;;;;;;;AAWG;AACI;AAcH;AACA;AAEA;AAEA;AAEI;;;AAIA;;AAEE;;AAEJ;;AAWF;;AAGE;;;AASA;;;AAMA;;;AAYA;;;AAsBJ;AAGF;;"}
1
+ {"version":3,"file":"BreadcrumbItem.js","sources":["../../../../../../src/components/navigation/Breadcrumbs/BreadcrumbItem.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAaA;;AAGI;AACA;;;AAKF;;;AAGE;;AAEJ;AAEA;;;;;;;;;;;AAWG;AACI;AAcH;AACA;AAEA;AAEA;AAEI;;;AAIA;;AAEE;;AAEJ;;AAWF;;AAGE;;;AASA;;;AAMA;;;AAYA;;;AAsBJ;AAGF;;"}
@@ -14,15 +14,18 @@ import '../../Icons/ChevronDownIcon.js';
14
14
  import '../../Icons/ChevronUpIcon.js';
15
15
  import '../../Icons/ClockIcon.js';
16
16
  import '../../Icons/CloseIcon.js';
17
+ import '../../Icons/CloudUploadIcon.js';
17
18
  import '../../Icons/CodeIcon.js';
18
19
  import '../../Icons/CopyIcon.js';
19
20
  import '../../Icons/CutIcon.js';
20
21
  import '../../Icons/DownloadIcon.js';
21
22
  import '../../Icons/EditIcon.js';
22
23
  import '../../Icons/ErrorIcon.js';
24
+ import '../../Icons/ExternalLinkIcon.js';
23
25
  import '../../Icons/EyeDropperIcon.js';
24
26
  import '../../Icons/EyeIcon.js';
25
27
  import '../../Icons/FilterIcon.js';
28
+ import '../../Icons/FirstIcon.js';
26
29
  import '../../Icons/FolderIcon.js';
27
30
  import '../../Icons/FullscreenIcon.js';
28
31
  import '../../Icons/GridIcon.js';
@@ -30,6 +33,7 @@ import '../../Icons/HeartIcon.js';
30
33
  import '../../Icons/HelpIcon.js';
31
34
  import '../../Icons/HomeIcon.js';
32
35
  import '../../Icons/InfoIcon.js';
36
+ import '../../Icons/LastIcon.js';
33
37
  import '../../Icons/LinkIcon.js';
34
38
  import '../../Icons/ListIcon.js';
35
39
  import '../../Icons/LockIcon.js';
@@ -50,6 +54,7 @@ import '../../Icons/SuccessIcon.js';
50
54
  import '../../Icons/TagIcon.js';
51
55
  import '../../Icons/TrashIcon.js';
52
56
  import '../../Icons/UndoIcon.js';
57
+ import '../../Icons/UnlinkIcon.js';
53
58
  import '../../Icons/UnlockIcon.js';
54
59
  import '../../Icons/UploadIcon.js';
55
60
  import '../../Icons/UserIcon.js';
@@ -1 +1 @@
1
- {"version":3,"file":"Breadcrumbs.js","sources":["../../../../../../src/components/navigation/Breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA;AAIE;AACF;AAEA;AACE;;AAIE;;AAGF;AACF;AAEA;AAIE;;AAGI;AACI;;AAID;AAET;AAEA;;;;;;;;;;;;;;;AAeG;AACI;;AAiBH;;AAEE;;AAQE;AACE;AACA;;AAGJ;AAOA;AACE;AACE;AACA;;;;;AAMJ;AAEA;;;;;AAUA;AACE;;AAMA;;AAGF;AACF;;;;;;;;AAQC;;AAcH;AAGF;;"}
1
+ {"version":3,"file":"Breadcrumbs.js","sources":["../../../../../../src/components/navigation/Breadcrumbs/Breadcrumbs.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA;AAIE;AACF;AAEA;AACE;;AAIE;;AAGF;AACF;AAEA;AAIE;;AAGI;AACI;;AAID;AAET;AAEA;;;;;;;;;;;;;;;AAeG;AACI;;AAiBH;;AAEE;;AAQE;AACE;AACA;;AAGJ;AAOA;AACE;AACE;AACA;;;;;AAMJ;AAEA;;;;;AAUA;AACE;;AAMA;;AAGF;AACF;;;;;;;;AAQC;;AAcH;AAGF;;"}
@@ -0,0 +1,12 @@
1
+ import './../../../assets/src/components/navigation/Pagination/Pagination.css.ts.vanilla-CmlFyyjh.css';
2
+ import { createRuntimeFn } from '@vanilla-extract/recipes/createRuntimeFn';
3
+
4
+ var paginationButtonRecipe = createRuntimeFn({defaultClassName:'Pagination_paginationButtonRecipe__17bx4kb6',variantClassNames:{size:{sm:'Pagination_paginationButtonRecipe_size_sm__17bx4kb7',md:'Pagination_paginationButtonRecipe_size_md__17bx4kb8',lg:'Pagination_paginationButtonRecipe_size_lg__17bx4kb9'},selected:{true:'Pagination_paginationButtonRecipe_selected_true__17bx4kba'}},defaultVariants:{size:'md'},compoundVariants:[]});
5
+ var paginationEllipsisRecipe = createRuntimeFn({defaultClassName:'Pagination_paginationEllipsisRecipe__17bx4kbb',variantClassNames:{size:{sm:'Pagination_paginationEllipsisRecipe_size_sm__17bx4kbc',md:'Pagination_paginationEllipsisRecipe_size_md__17bx4kbd',lg:'Pagination_paginationEllipsisRecipe_size_lg__17bx4kbe'}},defaultVariants:{size:'md'},compoundVariants:[]});
6
+ var paginationIconStyle = 'Pagination_paginationIconStyle__17bx4kbf';
7
+ var paginationItemStyle = 'Pagination_paginationItemStyle__17bx4kb5';
8
+ var paginationListRecipe = createRuntimeFn({defaultClassName:'Pagination_paginationListRecipe__17bx4kb1',variantClassNames:{size:{sm:'Pagination_paginationListRecipe_size_sm__17bx4kb2',md:'Pagination_paginationListRecipe_size_md__17bx4kb3',lg:'Pagination_paginationListRecipe_size_lg__17bx4kb4'}},defaultVariants:{size:'md'},compoundVariants:[]});
9
+ var paginationRootStyle = 'Pagination_paginationRootStyle__17bx4kb0';
10
+
11
+ export { paginationButtonRecipe, paginationEllipsisRecipe, paginationIconStyle, paginationItemStyle, paginationListRecipe, paginationRootStyle };
12
+ //# sourceMappingURL=Pagination.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Pagination.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}