@camunda/design-system 0.1.0 → 0.2.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 (250) hide show
  1. package/dist/.storybook/CamundaLogo.d.ts +13 -0
  2. package/dist/.storybook/CamundaLogo.d.ts.map +1 -0
  3. package/dist/.storybook/CamundaLogo.js +14 -0
  4. package/dist/.storybook/CamundaLogo.js.map +1 -0
  5. package/dist/carbon-compat/filterable-multi-select.d.ts +39 -0
  6. package/dist/carbon-compat/filterable-multi-select.d.ts.map +1 -0
  7. package/dist/carbon-compat/filterable-multi-select.js +54 -0
  8. package/dist/carbon-compat/filterable-multi-select.js.map +1 -0
  9. package/dist/carbon-compat/form.d.ts +5 -0
  10. package/dist/carbon-compat/form.d.ts.map +1 -0
  11. package/dist/carbon-compat/form.js +6 -0
  12. package/dist/carbon-compat/form.js.map +1 -0
  13. package/dist/carbon-compat/index.d.ts +2 -0
  14. package/dist/carbon-compat/index.d.ts.map +1 -1
  15. package/dist/carbon-compat/index.js +2 -0
  16. package/dist/carbon-compat/index.js.map +1 -1
  17. package/dist/carbon-compat/multi-select.d.ts +37 -2
  18. package/dist/carbon-compat/multi-select.d.ts.map +1 -1
  19. package/dist/carbon-compat/multi-select.js +52 -2
  20. package/dist/carbon-compat/multi-select.js.map +1 -1
  21. package/dist/carbon-compat/select.d.ts +3 -3
  22. package/dist/carbon-compat/select.d.ts.map +1 -1
  23. package/dist/carbon-compat/select.js +47 -9
  24. package/dist/carbon-compat/select.js.map +1 -1
  25. package/dist/src/components/ui/checkbox.d.ts.map +1 -1
  26. package/dist/src/components/ui/checkbox.js +1 -1
  27. package/dist/src/components/ui/checkbox.js.map +1 -1
  28. package/dist/src/components/ui/data-table.d.ts.map +1 -1
  29. package/dist/src/components/ui/data-table.js +1 -1
  30. package/dist/src/components/ui/data-table.js.map +1 -1
  31. package/dist/src/components/ui/file-uploader.d.ts +39 -0
  32. package/dist/src/components/ui/file-uploader.d.ts.map +1 -0
  33. package/dist/src/components/ui/file-uploader.js +198 -0
  34. package/dist/src/components/ui/file-uploader.js.map +1 -0
  35. package/dist/src/components/ui/multi-select.d.ts +34 -0
  36. package/dist/src/components/ui/multi-select.d.ts.map +1 -0
  37. package/dist/src/components/ui/multi-select.js +88 -0
  38. package/dist/src/components/ui/multi-select.js.map +1 -0
  39. package/dist/src/components/ui/table.d.ts +1 -1
  40. package/dist/src/components/ui/table.d.ts.map +1 -1
  41. package/dist/src/components/ui/table.js +3 -3
  42. package/dist/src/components/ui/table.js.map +1 -1
  43. package/dist/src/examples/cost-dashboard/CostBreakdownChart.d.ts +2 -0
  44. package/dist/src/examples/cost-dashboard/CostBreakdownChart.d.ts.map +1 -0
  45. package/dist/src/examples/cost-dashboard/CostBreakdownChart.js +18 -0
  46. package/dist/src/examples/cost-dashboard/CostBreakdownChart.js.map +1 -0
  47. package/dist/src/examples/cost-dashboard/CostDashboardPage.d.ts +2 -0
  48. package/dist/src/examples/cost-dashboard/CostDashboardPage.d.ts.map +1 -0
  49. package/dist/src/examples/cost-dashboard/CostDashboardPage.js +53 -0
  50. package/dist/src/examples/cost-dashboard/CostDashboardPage.js.map +1 -0
  51. package/dist/src/examples/cost-dashboard/TrendChart.d.ts +2 -0
  52. package/dist/src/examples/cost-dashboard/TrendChart.d.ts.map +1 -0
  53. package/dist/src/examples/cost-dashboard/TrendChart.js +21 -0
  54. package/dist/src/examples/cost-dashboard/TrendChart.js.map +1 -0
  55. package/dist/src/examples/cost-dashboard/mock-data.d.ts +34 -0
  56. package/dist/src/examples/cost-dashboard/mock-data.d.ts.map +1 -0
  57. package/dist/src/examples/cost-dashboard/mock-data.js +120 -0
  58. package/dist/src/examples/cost-dashboard/mock-data.js.map +1 -0
  59. package/dist/src/examples/cost-dashboard/useChartColors.d.ts +10 -0
  60. package/dist/src/examples/cost-dashboard/useChartColors.d.ts.map +1 -0
  61. package/dist/src/examples/cost-dashboard/useChartColors.js +20 -0
  62. package/dist/src/examples/cost-dashboard/useChartColors.js.map +1 -0
  63. package/dist/src/examples/project-detail/ProjectDetailPage.d.ts +2 -0
  64. package/dist/src/examples/project-detail/ProjectDetailPage.d.ts.map +1 -0
  65. package/dist/src/examples/project-detail/ProjectDetailPage.js +68 -0
  66. package/dist/src/examples/project-detail/ProjectDetailPage.js.map +1 -0
  67. package/dist/src/examples/project-detail/mock-data.d.ts +38 -0
  68. package/dist/src/examples/project-detail/mock-data.d.ts.map +1 -0
  69. package/dist/src/examples/project-detail/mock-data.js +103 -0
  70. package/dist/src/examples/project-detail/mock-data.js.map +1 -0
  71. package/dist/src/examples/projects-list/ProjectsListPage.d.ts +4 -0
  72. package/dist/src/examples/projects-list/ProjectsListPage.d.ts.map +1 -0
  73. package/dist/src/examples/projects-list/ProjectsListPage.js +45 -0
  74. package/dist/src/examples/projects-list/ProjectsListPage.js.map +1 -0
  75. package/dist/src/examples/projects-list/mock-data.d.ts +10 -0
  76. package/dist/src/examples/projects-list/mock-data.d.ts.map +1 -0
  77. package/dist/src/examples/projects-list/mock-data.js +83 -0
  78. package/dist/src/examples/projects-list/mock-data.js.map +1 -0
  79. package/dist/src/examples/shared/AppShell.d.ts +13 -0
  80. package/dist/src/examples/shared/AppShell.d.ts.map +1 -0
  81. package/dist/src/examples/shared/AppShell.js +13 -0
  82. package/dist/src/examples/shared/AppShell.js.map +1 -0
  83. package/dist/src/examples/shared/console-nav.d.ts +5 -0
  84. package/dist/src/examples/shared/console-nav.d.ts.map +1 -0
  85. package/dist/src/examples/shared/console-nav.js +37 -0
  86. package/dist/src/examples/shared/console-nav.js.map +1 -0
  87. package/dist/src/examples/shared/cost-nav.d.ts +5 -0
  88. package/dist/src/examples/shared/cost-nav.d.ts.map +1 -0
  89. package/dist/src/examples/shared/cost-nav.js +47 -0
  90. package/dist/src/examples/shared/cost-nav.js.map +1 -0
  91. package/dist/src/index.d.ts +2 -0
  92. package/dist/src/index.d.ts.map +1 -1
  93. package/dist/src/index.js +2 -0
  94. package/dist/src/index.js.map +1 -1
  95. package/dist/src/specs/schema.d.ts +4 -0
  96. package/dist/src/specs/schema.d.ts.map +1 -1
  97. package/dist/styles.css +233 -0
  98. package/package.json +9 -1
  99. package/dist/carbon-compat/stories/breadcrumb-skeleton.stories.d.ts +0 -10
  100. package/dist/carbon-compat/stories/breadcrumb-skeleton.stories.d.ts.map +0 -1
  101. package/dist/carbon-compat/stories/breadcrumb-skeleton.stories.js +0 -17
  102. package/dist/carbon-compat/stories/breadcrumb-skeleton.stories.js.map +0 -1
  103. package/dist/carbon-compat/stories/breadcrumb.stories.d.ts +0 -6
  104. package/dist/carbon-compat/stories/breadcrumb.stories.d.ts.map +0 -1
  105. package/dist/carbon-compat/stories/breadcrumb.stories.js +0 -11
  106. package/dist/carbon-compat/stories/breadcrumb.stories.js.map +0 -1
  107. package/dist/carbon-compat/stories/button.stories.d.ts +0 -13
  108. package/dist/carbon-compat/stories/button.stories.d.ts.map +0 -1
  109. package/dist/carbon-compat/stories/button.stories.js +0 -45
  110. package/dist/carbon-compat/stories/button.stories.js.map +0 -1
  111. package/dist/carbon-compat/stories/c3-cluster-tag.stories.d.ts +0 -11
  112. package/dist/carbon-compat/stories/c3-cluster-tag.stories.d.ts.map +0 -1
  113. package/dist/carbon-compat/stories/c3-cluster-tag.stories.js +0 -12
  114. package/dist/carbon-compat/stories/c3-cluster-tag.stories.js.map +0 -1
  115. package/dist/carbon-compat/stories/c3-data-table.stories.d.ts +0 -32
  116. package/dist/carbon-compat/stories/c3-data-table.stories.d.ts.map +0 -1
  117. package/dist/carbon-compat/stories/c3-data-table.stories.js +0 -244
  118. package/dist/carbon-compat/stories/c3-data-table.stories.js.map +0 -1
  119. package/dist/carbon-compat/stories/c3-responsive-stack.stories.d.ts +0 -9
  120. package/dist/carbon-compat/stories/c3-responsive-stack.stories.d.ts.map +0 -1
  121. package/dist/carbon-compat/stories/c3-responsive-stack.stories.js +0 -28
  122. package/dist/carbon-compat/stories/c3-responsive-stack.stories.js.map +0 -1
  123. package/dist/carbon-compat/stories/checkbox-skeleton.stories.d.ts +0 -8
  124. package/dist/carbon-compat/stories/checkbox-skeleton.stories.d.ts.map +0 -1
  125. package/dist/carbon-compat/stories/checkbox-skeleton.stories.js +0 -13
  126. package/dist/carbon-compat/stories/checkbox-skeleton.stories.js.map +0 -1
  127. package/dist/carbon-compat/stories/checkbox.stories.d.ts +0 -10
  128. package/dist/carbon-compat/stories/checkbox.stories.d.ts.map +0 -1
  129. package/dist/carbon-compat/stories/checkbox.stories.js +0 -20
  130. package/dist/carbon-compat/stories/checkbox.stories.js.map +0 -1
  131. package/dist/carbon-compat/stories/code-snippet.stories.d.ts +0 -9
  132. package/dist/carbon-compat/stories/code-snippet.stories.d.ts.map +0 -1
  133. package/dist/carbon-compat/stories/code-snippet.stories.js +0 -30
  134. package/dist/carbon-compat/stories/code-snippet.stories.js.map +0 -1
  135. package/dist/carbon-compat/stories/combo-box.stories.d.ts +0 -8
  136. package/dist/carbon-compat/stories/combo-box.stories.d.ts.map +0 -1
  137. package/dist/carbon-compat/stories/combo-box.stories.js +0 -38
  138. package/dist/carbon-compat/stories/combo-box.stories.js.map +0 -1
  139. package/dist/carbon-compat/stories/content-switcher.stories.d.ts +0 -8
  140. package/dist/carbon-compat/stories/content-switcher.stories.d.ts.map +0 -1
  141. package/dist/carbon-compat/stories/content-switcher.stories.js +0 -15
  142. package/dist/carbon-compat/stories/content-switcher.stories.js.map +0 -1
  143. package/dist/carbon-compat/stories/data-table-skeleton.stories.d.ts +0 -11
  144. package/dist/carbon-compat/stories/data-table-skeleton.stories.d.ts.map +0 -1
  145. package/dist/carbon-compat/stories/data-table-skeleton.stories.js +0 -37
  146. package/dist/carbon-compat/stories/data-table-skeleton.stories.js.map +0 -1
  147. package/dist/carbon-compat/stories/data-table.stories.d.ts +0 -16
  148. package/dist/carbon-compat/stories/data-table.stories.d.ts.map +0 -1
  149. package/dist/carbon-compat/stories/data-table.stories.js +0 -103
  150. package/dist/carbon-compat/stories/data-table.stories.js.map +0 -1
  151. package/dist/carbon-compat/stories/dropdown.stories.d.ts +0 -7
  152. package/dist/carbon-compat/stories/dropdown.stories.d.ts.map +0 -1
  153. package/dist/carbon-compat/stories/dropdown.stories.js +0 -23
  154. package/dist/carbon-compat/stories/dropdown.stories.js.map +0 -1
  155. package/dist/carbon-compat/stories/icon-button.stories.d.ts +0 -9
  156. package/dist/carbon-compat/stories/icon-button.stories.d.ts.map +0 -1
  157. package/dist/carbon-compat/stories/icon-button.stories.js +0 -29
  158. package/dist/carbon-compat/stories/icon-button.stories.js.map +0 -1
  159. package/dist/carbon-compat/stories/link.stories.d.ts +0 -11
  160. package/dist/carbon-compat/stories/link.stories.d.ts.map +0 -1
  161. package/dist/carbon-compat/stories/link.stories.js +0 -24
  162. package/dist/carbon-compat/stories/link.stories.js.map +0 -1
  163. package/dist/carbon-compat/stories/loading.stories.d.ts +0 -9
  164. package/dist/carbon-compat/stories/loading.stories.d.ts.map +0 -1
  165. package/dist/carbon-compat/stories/loading.stories.js +0 -22
  166. package/dist/carbon-compat/stories/loading.stories.js.map +0 -1
  167. package/dist/carbon-compat/stories/menu-button.stories.d.ts +0 -8
  168. package/dist/carbon-compat/stories/menu-button.stories.d.ts.map +0 -1
  169. package/dist/carbon-compat/stories/menu-button.stories.js +0 -22
  170. package/dist/carbon-compat/stories/menu-button.stories.js.map +0 -1
  171. package/dist/carbon-compat/stories/modal.stories.d.ts +0 -8
  172. package/dist/carbon-compat/stories/modal.stories.d.ts.map +0 -1
  173. package/dist/carbon-compat/stories/modal.stories.js +0 -28
  174. package/dist/carbon-compat/stories/modal.stories.js.map +0 -1
  175. package/dist/carbon-compat/stories/overflow-menu.stories.d.ts +0 -6
  176. package/dist/carbon-compat/stories/overflow-menu.stories.d.ts.map +0 -1
  177. package/dist/carbon-compat/stories/overflow-menu.stories.js +0 -11
  178. package/dist/carbon-compat/stories/overflow-menu.stories.js.map +0 -1
  179. package/dist/carbon-compat/stories/popover.stories.d.ts +0 -6
  180. package/dist/carbon-compat/stories/popover.stories.d.ts.map +0 -1
  181. package/dist/carbon-compat/stories/popover.stories.js +0 -16
  182. package/dist/carbon-compat/stories/popover.stories.js.map +0 -1
  183. package/dist/carbon-compat/stories/progress-bar.stories.d.ts +0 -11
  184. package/dist/carbon-compat/stories/progress-bar.stories.d.ts.map +0 -1
  185. package/dist/carbon-compat/stories/progress-bar.stories.js +0 -23
  186. package/dist/carbon-compat/stories/progress-bar.stories.js.map +0 -1
  187. package/dist/carbon-compat/stories/radio-button.stories.d.ts +0 -11
  188. package/dist/carbon-compat/stories/radio-button.stories.d.ts.map +0 -1
  189. package/dist/carbon-compat/stories/radio-button.stories.js +0 -25
  190. package/dist/carbon-compat/stories/radio-button.stories.js.map +0 -1
  191. package/dist/carbon-compat/stories/search.stories.d.ts +0 -12
  192. package/dist/carbon-compat/stories/search.stories.d.ts.map +0 -1
  193. package/dist/carbon-compat/stories/search.stories.js +0 -31
  194. package/dist/carbon-compat/stories/search.stories.js.map +0 -1
  195. package/dist/carbon-compat/stories/select-skeleton.stories.d.ts +0 -8
  196. package/dist/carbon-compat/stories/select-skeleton.stories.d.ts.map +0 -1
  197. package/dist/carbon-compat/stories/select-skeleton.stories.js +0 -13
  198. package/dist/carbon-compat/stories/select-skeleton.stories.js.map +0 -1
  199. package/dist/carbon-compat/stories/select.stories.d.ts +0 -7
  200. package/dist/carbon-compat/stories/select.stories.d.ts.map +0 -1
  201. package/dist/carbon-compat/stories/select.stories.js +0 -18
  202. package/dist/carbon-compat/stories/select.stories.js.map +0 -1
  203. package/dist/carbon-compat/stories/skeleton-text.stories.d.ts +0 -10
  204. package/dist/carbon-compat/stories/skeleton-text.stories.d.ts.map +0 -1
  205. package/dist/carbon-compat/stories/skeleton-text.stories.js +0 -26
  206. package/dist/carbon-compat/stories/skeleton-text.stories.js.map +0 -1
  207. package/dist/carbon-compat/stories/stack.stories.d.ts +0 -17
  208. package/dist/carbon-compat/stories/stack.stories.d.ts.map +0 -1
  209. package/dist/carbon-compat/stories/stack.stories.js +0 -41
  210. package/dist/carbon-compat/stories/stack.stories.js.map +0 -1
  211. package/dist/carbon-compat/stories/structured-list-skeleton.stories.d.ts +0 -9
  212. package/dist/carbon-compat/stories/structured-list-skeleton.stories.d.ts.map +0 -1
  213. package/dist/carbon-compat/stories/structured-list-skeleton.stories.js +0 -14
  214. package/dist/carbon-compat/stories/structured-list-skeleton.stories.js.map +0 -1
  215. package/dist/carbon-compat/stories/table.stories.d.ts +0 -6
  216. package/dist/carbon-compat/stories/table.stories.d.ts.map +0 -1
  217. package/dist/carbon-compat/stories/table.stories.js +0 -16
  218. package/dist/carbon-compat/stories/table.stories.js.map +0 -1
  219. package/dist/carbon-compat/stories/tabs.stories.d.ts +0 -7
  220. package/dist/carbon-compat/stories/tabs.stories.d.ts.map +0 -1
  221. package/dist/carbon-compat/stories/tabs.stories.js +0 -14
  222. package/dist/carbon-compat/stories/tabs.stories.js.map +0 -1
  223. package/dist/carbon-compat/stories/tag.stories.d.ts +0 -11
  224. package/dist/carbon-compat/stories/tag.stories.d.ts.map +0 -1
  225. package/dist/carbon-compat/stories/tag.stories.js +0 -46
  226. package/dist/carbon-compat/stories/tag.stories.js.map +0 -1
  227. package/dist/carbon-compat/stories/text-area.stories.d.ts +0 -10
  228. package/dist/carbon-compat/stories/text-area.stories.d.ts.map +0 -1
  229. package/dist/carbon-compat/stories/text-area.stories.js +0 -27
  230. package/dist/carbon-compat/stories/text-area.stories.js.map +0 -1
  231. package/dist/carbon-compat/stories/text-input.stories.d.ts +0 -11
  232. package/dist/carbon-compat/stories/text-input.stories.d.ts.map +0 -1
  233. package/dist/carbon-compat/stories/text-input.stories.js +0 -30
  234. package/dist/carbon-compat/stories/text-input.stories.js.map +0 -1
  235. package/dist/carbon-compat/stories/tile.stories.d.ts +0 -11
  236. package/dist/carbon-compat/stories/tile.stories.d.ts.map +0 -1
  237. package/dist/carbon-compat/stories/tile.stories.js +0 -22
  238. package/dist/carbon-compat/stories/tile.stories.js.map +0 -1
  239. package/dist/carbon-compat/stories/toggle.stories.d.ts +0 -11
  240. package/dist/carbon-compat/stories/toggle.stories.d.ts.map +0 -1
  241. package/dist/carbon-compat/stories/toggle.stories.js +0 -23
  242. package/dist/carbon-compat/stories/toggle.stories.js.map +0 -1
  243. package/dist/carbon-compat/stories/tooltip.stories.d.ts +0 -7
  244. package/dist/carbon-compat/stories/tooltip.stories.d.ts.map +0 -1
  245. package/dist/carbon-compat/stories/tooltip.stories.js +0 -15
  246. package/dist/carbon-compat/stories/tooltip.stories.js.map +0 -1
  247. package/dist/carbon-compat/stories/unordered-list.stories.d.ts +0 -9
  248. package/dist/carbon-compat/stories/unordered-list.stories.d.ts.map +0 -1
  249. package/dist/carbon-compat/stories/unordered-list.stories.js +0 -22
  250. package/dist/carbon-compat/stories/unordered-list.stories.js.map +0 -1
@@ -0,0 +1,39 @@
1
+ import * as React from "react";
2
+ export type FileStatus = "idle" | "uploading" | "complete" | "error";
3
+ export interface FileUploaderProps extends Omit<React.ComponentProps<"div">, "onChange"> {
4
+ /** Single file replaces the previous; multiple appends. */
5
+ mode?: "single" | "multiple";
6
+ size?: "default" | "compact";
7
+ /** Accessible label title shown inside the drop zone. */
8
+ labelTitle?: string;
9
+ /** Secondary description (accepted types, size limits). */
10
+ labelDescription?: string;
11
+ /** Label for the browse-files button. */
12
+ buttonLabel?: string;
13
+ /** Native file input `accept` attribute. */
14
+ accept?: string;
15
+ /** Whether the uploader is disabled. */
16
+ disabled?: boolean;
17
+ /** Max number of files allowed (multiple mode only). */
18
+ maxFiles?: number;
19
+ /** Max size per file in bytes. */
20
+ maxSize?: number;
21
+ /** Controlled file list. */
22
+ files?: File[];
23
+ /** Called when files are added or removed. */
24
+ onFilesChange?: (files: File[]) => void;
25
+ /**
26
+ * Legacy alias for `onFilesChange` — matches the example API in the spec.
27
+ * Either prop works; `onFilesChange` takes precedence.
28
+ */
29
+ onChange?: (files: File[]) => void;
30
+ /** Per-file upload status provided by the caller. */
31
+ fileStatus?: Map<File, FileStatus>;
32
+ /** Per-file error messages for `error` status rows. */
33
+ fileErrors?: Map<File, string>;
34
+ /** Form-level invalid state. */
35
+ "aria-invalid"?: boolean | "true" | "false";
36
+ }
37
+ declare function FileUploader({ mode, size, labelTitle, labelDescription, buttonLabel, accept, disabled, maxFiles, maxSize, files: controlledFiles, onFilesChange, onChange, fileStatus, fileErrors, className, id, "aria-invalid": ariaInvalid, "aria-describedby": ariaDescribedby, "aria-label": ariaLabel, ...props }: FileUploaderProps): React.JSX.Element;
38
+ export { FileUploader };
39
+ //# sourceMappingURL=file-uploader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-uploader.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/file-uploader.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA0C/B,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;AAErE,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAC7C,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,EAC3B,UAAU,CACX;IACC,2DAA2D;IAC3D,IAAI,CAAC,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC7B,IAAI,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC7B,yDAAyD;IACzD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2DAA2D;IAC3D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yCAAyC;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kCAAkC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,8CAA8C;IAC9C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACxC;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACnC,qDAAqD;IACrD,UAAU,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACnC,uDAAuD;IACvD,UAAU,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/B,gCAAgC;IAChC,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;CAC7C;AAGD,iBAAS,YAAY,CAAC,EACpB,IAAe,EACf,IAAgB,EAChB,UAA6B,EAC7B,gBAAgB,EAChB,WAA4B,EAC5B,MAAM,EACN,QAAgB,EAChB,QAAQ,EACR,OAAO,EACP,KAAK,EAAE,eAAe,EACtB,aAAa,EACb,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAS,EACT,EAAE,EACF,cAAc,EAAE,WAAW,EAC3B,kBAAkB,EAAE,eAAe,EACnC,YAAY,EAAE,SAAS,EACvB,GAAG,KAAK,EACT,EAAE,iBAAiB,qBAmTnB;AAGD,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,198 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ // 1. Imports
3
+ import * as React from "react";
4
+ import { cva } from "class-variance-authority";
5
+ import { CheckCircle2, Loader2, UploadCloud, X, XCircle } from "lucide-react";
6
+ import { cn } from "../../lib/utils";
7
+ import { Button, buttonVariants } from "./button";
8
+ // 2. cva() variants
9
+ const dropZoneVariants = cva([
10
+ "relative flex flex-col items-center justify-center gap-3 rounded-lg border-2 border-dashed border-border",
11
+ "bg-background px-6 py-4 text-center transition-colors",
12
+ ], {
13
+ variants: {
14
+ size: {
15
+ default: "min-h-[120px]",
16
+ compact: "min-h-[80px]",
17
+ },
18
+ isDragOver: {
19
+ true: "border-primary bg-accent",
20
+ false: "",
21
+ },
22
+ disabled: {
23
+ true: "cursor-not-allowed opacity-50 pointer-events-none",
24
+ false: "cursor-pointer hover:border-primary hover:bg-accent",
25
+ },
26
+ invalid: {
27
+ true: "border-destructive",
28
+ false: "",
29
+ },
30
+ },
31
+ defaultVariants: {
32
+ size: "default",
33
+ isDragOver: false,
34
+ disabled: false,
35
+ invalid: false,
36
+ },
37
+ });
38
+ // 4. Component
39
+ function FileUploader({ mode = "single", size = "default", labelTitle = "Drop file here", labelDescription, buttonLabel = "Browse files", accept, disabled = false, maxFiles, maxSize, files: controlledFiles, onFilesChange, onChange, fileStatus, fileErrors, className, id, "aria-invalid": ariaInvalid, "aria-describedby": ariaDescribedby, "aria-label": ariaLabel, ...props }) {
40
+ // useId provides a stable ID so htmlFor always resolves even without an explicit `id` prop.
41
+ const stableId = React.useId();
42
+ const isControlled = controlledFiles !== undefined;
43
+ const [internalFiles, setInternalFiles] = React.useState([]);
44
+ const [isDragOver, setIsDragOver] = React.useState(false);
45
+ const [maxFilesError, setMaxFilesError] = React.useState(false);
46
+ const [sizeErrors, setSizeErrors] = React.useState(new Map());
47
+ const [liveMessage, setLiveMessage] = React.useState("");
48
+ // Ref-based pattern required by the React Compiler (eslint-plugin-react-hooks v7):
49
+ // - Refs are only read/written inside effects or handlers (never during render).
50
+ // - setState inside an effect is allowed only when the value is ref-derived.
51
+ const prevFileStatusRef = React.useRef(new Map());
52
+ const pendingAnnouncementRef = React.useRef("");
53
+ const files = isControlled ? controlledFiles : internalFiles;
54
+ // Always assign an inputId so the label htmlFor always resolves.
55
+ const inputId = `${id ?? stableId}-input`;
56
+ const regionId = id ? `${id}-region` : undefined;
57
+ const descriptionId = id ? `${id}-description` : undefined;
58
+ const maxFilesErrorId = id ? `${id}-max-files-error` : undefined;
59
+ const isInvalid = ariaInvalid === true || ariaInvalid === "true" ? true : false;
60
+ const announceLive = (msg) => {
61
+ // Clear first so the same message re-triggers the live region.
62
+ setLiveMessage("");
63
+ requestAnimationFrame(() => setLiveMessage(msg));
64
+ };
65
+ const applyFiles = (next) => {
66
+ if (!isControlled)
67
+ setInternalFiles(next);
68
+ onFilesChange?.(next);
69
+ onChange?.(next);
70
+ };
71
+ // Detect fileStatus transitions and announce them via the aria-live region.
72
+ // Pattern: refs are written inside an effect (never during render) and the setState
73
+ // call receives a ref-derived value — both constraints required by react-hooks v7.
74
+ React.useEffect(() => {
75
+ if (!fileStatus)
76
+ return;
77
+ const prev = prevFileStatusRef.current;
78
+ let msg = "";
79
+ for (const [file, next] of fileStatus) {
80
+ const previous = prev.get(file) ?? "idle";
81
+ if (previous !== next) {
82
+ if (next === "uploading")
83
+ msg = `Uploading ${file.name}`;
84
+ else if (next === "complete")
85
+ msg = `${file.name} uploaded`;
86
+ else if (next === "error")
87
+ msg = `${file.name} upload failed`;
88
+ if (msg)
89
+ break;
90
+ }
91
+ }
92
+ prevFileStatusRef.current = new Map(fileStatus);
93
+ if (!msg)
94
+ return;
95
+ pendingAnnouncementRef.current = msg;
96
+ // setState with a ref-derived value — permitted by enableAllowSetStateFromRefsInEffects.
97
+ setLiveMessage("");
98
+ requestAnimationFrame(() => {
99
+ setLiveMessage(pendingAnnouncementRef.current);
100
+ });
101
+ }, [fileStatus]);
102
+ const handleFiles = (incoming) => {
103
+ const list = Array.from(incoming);
104
+ const newSizeErrors = new Map(sizeErrors);
105
+ let hasNewSizeError = false;
106
+ for (const file of list) {
107
+ if (maxSize !== undefined && file.size > maxSize) {
108
+ const mb = (maxSize / 1_048_576).toFixed(0);
109
+ newSizeErrors.set(file, `File exceeds ${mb} MB limit.`);
110
+ hasNewSizeError = true;
111
+ }
112
+ }
113
+ if (hasNewSizeError)
114
+ setSizeErrors(newSizeErrors);
115
+ const base = mode === "single" ? [] : files;
116
+ const next = mode === "single" ? list.slice(0, 1) : [...base, ...list];
117
+ if (maxFiles !== undefined && next.length > maxFiles) {
118
+ setMaxFilesError(true);
119
+ const limited = next.slice(0, maxFiles);
120
+ applyFiles(limited);
121
+ for (const f of limited)
122
+ announceLive(`${f.name} added`);
123
+ return;
124
+ }
125
+ setMaxFilesError(false);
126
+ applyFiles(next);
127
+ for (const f of list)
128
+ announceLive(`${f.name} added`);
129
+ };
130
+ const removeFile = (file) => {
131
+ const next = files.filter((f) => f !== file);
132
+ const newSizeErrors = new Map(sizeErrors);
133
+ newSizeErrors.delete(file);
134
+ setSizeErrors(newSizeErrors);
135
+ if (next.length < (maxFiles ?? Infinity))
136
+ setMaxFilesError(false);
137
+ applyFiles(next);
138
+ announceLive(`${file.name} removed`);
139
+ };
140
+ const handleInputChange = (e) => {
141
+ if (e.target.files && e.target.files.length > 0) {
142
+ handleFiles(e.target.files);
143
+ }
144
+ // Reset so the same file can be re-selected.
145
+ e.target.value = "";
146
+ };
147
+ const handleDragOver = (e) => {
148
+ e.preventDefault();
149
+ if (!disabled)
150
+ setIsDragOver(true);
151
+ };
152
+ const handleDragLeave = (e) => {
153
+ // Only clear if leaving the region itself, not a child element.
154
+ if (!e.currentTarget.contains(e.relatedTarget)) {
155
+ setIsDragOver(false);
156
+ }
157
+ };
158
+ const handleDrop = (e) => {
159
+ e.preventDefault();
160
+ setIsDragOver(false);
161
+ if (disabled)
162
+ return;
163
+ if (e.dataTransfer.files.length > 0) {
164
+ handleFiles(e.dataTransfer.files);
165
+ }
166
+ };
167
+ const describedByParts = [
168
+ labelDescription ? descriptionId : undefined,
169
+ ariaDescribedby,
170
+ ]
171
+ .filter(Boolean)
172
+ .join(" ");
173
+ const statusForFile = (file) => {
174
+ return fileStatus?.get(file) ?? "idle";
175
+ };
176
+ const errorForFile = (file) => {
177
+ return fileErrors?.get(file) ?? sizeErrors.get(file);
178
+ };
179
+ return (_jsxs("div", { "data-slot": "file-uploader", "aria-disabled": disabled || undefined, className: cn("flex flex-col gap-2", className), ...props, children: [_jsx("div", { "aria-live": "polite", "aria-atomic": "true", className: "sr-only", children: liveMessage }), _jsx("input", { type: "file", id: inputId, accept: accept, multiple: mode === "multiple", disabled: disabled, onChange: handleInputChange, "aria-hidden": "true", tabIndex: -1, className: "sr-only" }), _jsxs("div", { id: regionId, role: "region", "aria-label": ariaLabel ?? labelTitle ?? "File upload", "aria-describedby": describedByParts || undefined, "aria-invalid": isInvalid || undefined, "aria-dropeffect": isDragOver ? "copy" : undefined, onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, className: dropZoneVariants({
180
+ size,
181
+ isDragOver,
182
+ disabled,
183
+ invalid: isInvalid,
184
+ }), children: [size !== "compact" && (_jsx(UploadCloud, { className: "size-8 text-muted-foreground", "aria-hidden": "true" })), labelTitle && (_jsx("p", { className: "text-sm font-medium text-foreground", children: labelTitle })), labelDescription && (_jsx("p", { id: descriptionId, className: "text-xs text-muted-foreground", children: labelDescription })), _jsx("label", { htmlFor: inputId, className: cn(buttonVariants({ variant: "outline", size: "sm" }), disabled && "pointer-events-none cursor-not-allowed opacity-50", "cursor-pointer"), children: buttonLabel })] }), files.length > 0 && (_jsx("ul", { className: "flex flex-col gap-1.5", role: "list", children: files.map((file) => {
185
+ const status = statusForFile(file);
186
+ const fileError = errorForFile(file);
187
+ const rowId = `${id ?? "file-uploader"}-row-${file.name}`;
188
+ const errorId = `${rowId}-error`;
189
+ return (_jsxs("li", { children: [_jsxs("div", { className: "flex items-center gap-2 rounded-md border border-border bg-background px-3 py-2", "aria-busy": status === "uploading" || undefined, "aria-describedby": fileError ? errorId : undefined, children: [_jsxs("span", { className: "shrink-0", "aria-hidden": "true", children: [status === "uploading" && (_jsx(Loader2, { className: "size-4 animate-spin text-muted-foreground" })), status === "complete" && (_jsx(CheckCircle2, { className: "size-4 text-success" })), status === "error" && (_jsx(XCircle, { className: "size-4 text-destructive" })), status === "idle" && _jsx("div", { className: "size-4" })] }), _jsx("span", { className: "min-w-0 flex-1 truncate text-sm text-foreground", children: file.name }), _jsx(Button, { variant: "ghost", size: "icon-sm", type: "button", disabled: disabled, "aria-label": `Remove ${file.name}`, onClick: (e) => {
190
+ e.stopPropagation();
191
+ removeFile(file);
192
+ }, children: _jsx(X, { "aria-hidden": "true" }) })] }), fileError && (_jsx("p", { id: errorId, className: "mt-0.5 px-3 text-xs text-destructive", role: "alert", children: fileError }))] }, `${file.name}-${file.size}`));
193
+ }) })), maxFiles !== undefined &&
194
+ (maxFilesError || files.length >= maxFiles) && (_jsxs("p", { id: maxFilesErrorId, className: "text-xs text-destructive", role: "alert", children: ["Maximum ", maxFiles, " ", maxFiles === 1 ? "file" : "files", " reached."] }))] }));
195
+ }
196
+ // 5. Named exports
197
+ export { FileUploader };
198
+ //# sourceMappingURL=file-uploader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-uploader.js","sourceRoot":"","sources":["../../../../src/components/ui/file-uploader.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import * as React from "react";
2
+ import { type LucideIcon } from "lucide-react";
3
+ export interface MultiSelectOption {
4
+ label: string;
5
+ value: string;
6
+ icon?: LucideIcon;
7
+ disabled?: boolean;
8
+ }
9
+ export interface MultiSelectGroup {
10
+ heading: string;
11
+ options: MultiSelectOption[];
12
+ }
13
+ export interface MultiSelectProps {
14
+ options: (MultiSelectOption | MultiSelectGroup)[];
15
+ value?: string[];
16
+ defaultValue?: string[];
17
+ onValueChange?: (value: string[]) => void;
18
+ placeholder?: string;
19
+ searchable?: boolean;
20
+ searchPlaceholder?: string;
21
+ maxCount?: number;
22
+ hideSelectAll?: boolean;
23
+ closeOnSelect?: boolean;
24
+ emptyIndicator?: React.ReactNode;
25
+ size?: "default" | "sm";
26
+ disabled?: boolean;
27
+ id?: string;
28
+ className?: string;
29
+ "aria-label"?: string;
30
+ "aria-labelledby"?: string;
31
+ }
32
+ declare function MultiSelect({ options, value: controlledValue, defaultValue, onValueChange, placeholder, searchable, searchPlaceholder, maxCount, hideSelectAll, closeOnSelect, emptyIndicator, size, disabled, id, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, }: MultiSelectProps): React.JSX.Element;
33
+ export { MultiSelect };
34
+ //# sourceMappingURL=multi-select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-select.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/multi-select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAe/C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,iBAAiB,GAAG,gBAAgB,CAAC,EAAE,CAAC;IAClD,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACjC,IAAI,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAcD,iBAAS,WAAW,CAAC,EACnB,OAAO,EACP,KAAK,EAAE,eAAe,EACtB,YAAY,EACZ,aAAa,EACb,WAA+B,EAC/B,UAAiB,EACjB,iBAA6B,EAC7B,QAAY,EACZ,aAAqB,EACrB,aAAqB,EACrB,cAAc,EACd,IAAgB,EAChB,QAAgB,EAChB,EAAE,EACF,SAAS,EACT,YAAY,EAAE,SAAS,EACvB,iBAAiB,EAAE,cAAc,GAClC,EAAE,gBAAgB,qBA4PlB;AAED,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,88 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Popover as PopoverPrimitive } from "radix-ui";
5
+ import { ChevronDownIcon, XIcon, ListChecksIcon } from "lucide-react";
6
+ import {} from "lucide-react";
7
+ import { cn } from "../../lib/utils";
8
+ import { Badge } from "./badge";
9
+ import { C4Provider } from "./c4-provider";
10
+ import { Checkbox } from "./checkbox";
11
+ import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from "./command";
12
+ function isGroup(item) {
13
+ return "heading" in item;
14
+ }
15
+ function getAllOptions(options) {
16
+ return options.flatMap((item) => (isGroup(item) ? item.options : [item]));
17
+ }
18
+ function MultiSelect({ options, value: controlledValue, defaultValue, onValueChange, placeholder = "Select options…", searchable = true, searchPlaceholder = "Search…", maxCount = 3, hideSelectAll = false, closeOnSelect = false, emptyIndicator, size = "default", disabled = false, id, className, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, }) {
19
+ const [open, setOpen] = React.useState(false);
20
+ const [internalValue, setInternalValue] = React.useState(defaultValue ?? []);
21
+ const isControlled = controlledValue !== undefined;
22
+ const selected = isControlled ? controlledValue : internalValue;
23
+ function updateSelected(next) {
24
+ if (!isControlled) {
25
+ setInternalValue(next);
26
+ }
27
+ onValueChange?.(next);
28
+ }
29
+ function toggleOption(optionValue) {
30
+ const next = selected.includes(optionValue)
31
+ ? selected.filter((v) => v !== optionValue)
32
+ : [...selected, optionValue];
33
+ updateSelected(next);
34
+ if (closeOnSelect) {
35
+ setOpen(false);
36
+ }
37
+ }
38
+ const allOptions = getAllOptions(options);
39
+ const selectableOptions = allOptions.filter((o) => !o.disabled);
40
+ const allSelected = selectableOptions.length > 0 &&
41
+ selectableOptions.every((o) => selected.includes(o.value));
42
+ function handleSelectAll() {
43
+ if (allSelected) {
44
+ updateSelected([]);
45
+ }
46
+ else {
47
+ updateSelected(selectableOptions.map((o) => o.value));
48
+ }
49
+ }
50
+ const visibleChips = selected.slice(0, maxCount);
51
+ const overflowCount = selected.length - maxCount;
52
+ function removeOption(optionValue, e) {
53
+ e.stopPropagation();
54
+ updateSelected(selected.filter((v) => v !== optionValue));
55
+ }
56
+ function removeOverflow(e) {
57
+ e.stopPropagation();
58
+ updateSelected(selected.slice(0, maxCount));
59
+ }
60
+ function handleTriggerKeyDown(e) {
61
+ if (e.key === "Backspace" && !open && selected.length > 0) {
62
+ updateSelected(selected.slice(0, -1));
63
+ }
64
+ }
65
+ const optionLabelMap = React.useMemo(() => {
66
+ const map = new Map();
67
+ for (const o of getAllOptions(options)) {
68
+ map.set(o.value, o.label);
69
+ }
70
+ return map;
71
+ }, [options]);
72
+ const groupedItems = options.filter(isGroup);
73
+ const flatItems = options.filter((o) => !isGroup(o));
74
+ return (_jsxs(PopoverPrimitive.Root, { open: open, onOpenChange: disabled ? undefined : setOpen, children: [_jsx(PopoverPrimitive.Trigger, { asChild: true, children: _jsxs("button", { "data-slot": "multi-select", "data-size": size, id: id, type: "button", role: "combobox", "aria-expanded": open, "aria-haspopup": "listbox", "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy, "aria-disabled": disabled ? "true" : undefined, disabled: disabled, onKeyDown: handleTriggerKeyDown, className: cn("flex w-full min-h-9 flex-wrap items-center gap-1 rounded-lg border border-input bg-input-background px-2 py-1 text-sm text-left transition-all duration-200 outline-none", "focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50", "disabled:cursor-not-allowed disabled:opacity-50", "data-[size=sm]:min-h-8", selected.length === 0 && "text-muted-foreground", className), children: [selected.length === 0 ? (_jsx("span", { className: "flex-1 truncate", children: placeholder })) : (_jsxs(_Fragment, { children: [visibleChips.map((v) => {
75
+ const label = optionLabelMap.get(v) ?? v;
76
+ return (_jsxs(Badge, { variant: "outline", className: "gap-0.5 pr-0.5", children: [label, _jsx("button", { type: "button", "aria-label": `Remove ${label}`, onClick: (e) => removeOption(v, e), className: "ml-0.5 rounded-sm opacity-60 hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring", children: _jsx(XIcon, { className: "size-3", "aria-hidden": "true" }) })] }, v));
77
+ }), overflowCount > 0 && (_jsxs(Badge, { variant: "outline", className: "gap-0.5 pr-0.5", children: [_jsxs("span", { children: ["+", overflowCount, " more"] }), _jsx("button", { type: "button", "aria-label": `Remove ${overflowCount} more selected items`, onClick: removeOverflow, className: "ml-0.5 rounded-sm opacity-60 hover:opacity-100 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring", children: _jsx(XIcon, { className: "size-3", "aria-hidden": "true" }) })] }))] })), _jsx(ChevronDownIcon, { className: "ml-auto size-4 shrink-0 opacity-50 pointer-events-none", "aria-hidden": "true" })] }) }), _jsx(PopoverPrimitive.Portal, { children: _jsx(C4Provider, { children: _jsx(PopoverPrimitive.Content, { "data-slot": "multi-select-content", align: "start", sideOffset: 4, className: cn("z-50 w-[--radix-popover-trigger-width] p-0 rounded-lg border border-input bg-popover text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-hidden", "data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", "data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95", "data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95"), children: _jsxs(Command, { children: [searchable && (_jsx(CommandInput, { placeholder: searchPlaceholder, "aria-label": searchPlaceholder })), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: emptyIndicator ?? "No results found" }), !hideSelectAll && (_jsx(CommandGroup, { children: _jsxs(CommandItem, { onSelect: handleSelectAll, className: "gap-2", children: [_jsx(Checkbox, { checked: allSelected, "aria-hidden": "true", tabIndex: -1, className: "pointer-events-none" }), _jsx(ListChecksIcon, { className: "size-4 text-muted-foreground", "aria-hidden": "true" }), allSelected ? "Clear All" : "Select All"] }) })), flatItems.length > 0 && (_jsx(CommandGroup, { children: flatItems.map((option) => {
78
+ const isSelected = selected.includes(option.value);
79
+ const Icon = option.icon;
80
+ return (_jsxs(CommandItem, { value: option.value, disabled: option.disabled, onSelect: () => toggleOption(option.value), className: "gap-2", children: [_jsx(Checkbox, { checked: isSelected, "aria-hidden": "true", tabIndex: -1, className: "pointer-events-none" }), Icon && (_jsx(Icon, { className: "size-4 text-muted-foreground", "aria-hidden": "true" })), option.label] }, option.value));
81
+ }) })), groupedItems.map((group) => (_jsx(CommandGroup, { heading: group.heading, children: group.options.map((option) => {
82
+ const isSelected = selected.includes(option.value);
83
+ const Icon = option.icon;
84
+ return (_jsxs(CommandItem, { value: option.value, disabled: option.disabled, onSelect: () => toggleOption(option.value), className: "gap-2", children: [_jsx(Checkbox, { checked: isSelected, "aria-hidden": "true", tabIndex: -1, className: "pointer-events-none" }), Icon && (_jsx(Icon, { className: "size-4 text-muted-foreground", "aria-hidden": "true" })), option.label] }, option.value));
85
+ }) }, group.heading)))] })] }) }) }) })] }));
86
+ }
87
+ export { MultiSelect };
88
+ //# sourceMappingURL=multi-select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-select.js","sourceRoot":"","sources":["../../../../src/components/ui/multi-select.tsx"],"names":[],"mappings":"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"}
@@ -11,5 +11,5 @@ declare function TableRow({ className, ...props }: React.ComponentProps<"tr">):
11
11
  declare function TableHead({ className, ...props }: React.ComponentProps<"th">): React.JSX.Element;
12
12
  declare function TableCell({ className, ...props }: React.ComponentProps<"td">): React.JSX.Element;
13
13
  declare function TableCaption({ className, ...props }: React.ComponentProps<"caption">): React.JSX.Element;
14
- export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption };
14
+ export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption, };
15
15
  //# sourceMappingURL=table.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/table.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,KAAK,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAgBpC,iBAAS,KAAK,CAAC,EACb,IAAW,EACX,SAAS,EACT,kBAAkB,EAClB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,SAAS,CAAC;IAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAAE,qBAsBnF;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,qBAE1E;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,qBAExE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,qBAQ1E;AAED,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAWpE;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAarE;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAarE;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,qBAI7E;AAED,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC"}
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/table.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,KAAK,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAgBpC,iBAAS,KAAK,CAAC,EACb,IAAW,EACX,SAAS,EACT,kBAAkB,EAClB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG;IACjC,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,qBAyBA;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,qBAQ1E;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,qBAQxE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,qBAW1E;AAED,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAWpE;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAarE;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAarE;AAED,iBAAS,YAAY,CAAC,EACpB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,SAAS,CAAC,qBAQjC;AAED,OAAO,EACL,KAAK,EACL,WAAW,EACX,SAAS,EACT,WAAW,EACX,SAAS,EACT,QAAQ,EACR,SAAS,EACT,YAAY,GACb,CAAC"}
@@ -21,10 +21,10 @@ function Table({ size = "md", className, containerClassName, ...props }) {
21
21
  className: cn("w-full caption-bottom border-collapse text-sm", className), ...props }) }) }));
22
22
  }
23
23
  function TableHeader({ className, ...props }) {
24
- return _jsx("thead", { "data-slot": "table-header", className: cn("[&_tr]:border-b", className), ...props });
24
+ return (_jsx("thead", { "data-slot": "table-header", className: cn("bg-muted/50 [&_tr]:border-b", className), ...props }));
25
25
  }
26
26
  function TableBody({ className, ...props }) {
27
- return _jsx("tbody", { "data-slot": "table-body", className: cn("[&_tr:last-child]:border-0", className), ...props });
27
+ return (_jsx("tbody", { "data-slot": "table-body", className: cn("[&_tr:last-child]:border-0", className), ...props }));
28
28
  }
29
29
  function TableFooter({ className, ...props }) {
30
30
  return (_jsx("tfoot", { "data-slot": "table-footer", className: cn("border-t bg-muted/50 font-medium [&>tr]:last:border-b-0", className), ...props }));
@@ -43,5 +43,5 @@ function TableCell({ className, ...props }) {
43
43
  function TableCaption({ className, ...props }) {
44
44
  return (_jsx("caption", { "data-slot": "table-caption", className: cn("mt-4 text-sm text-muted-foreground", className), ...props }));
45
45
  }
46
- export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption };
46
+ export { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption, };
47
47
  //# sourceMappingURL=table.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../../src/components/ui/table.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../../../src/components/ui/table.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function CostBreakdownChart(): import("react").JSX.Element;
2
+ //# sourceMappingURL=CostBreakdownChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CostBreakdownChart.d.ts","sourceRoot":"","sources":["../../../../src/examples/cost-dashboard/CostBreakdownChart.tsx"],"names":[],"mappings":"AAeA,wBAAgB,kBAAkB,gCAiDjC"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { PieChart, Pie, Cell, ResponsiveContainer } from "recharts";
3
+ import { agents, totalLlmSpend } from "./mock-data";
4
+ import { useChartColors } from "./useChartColors";
5
+ // Spend split into input vs output cost (summed across the definition's agents).
6
+ const totalInput = +agents.reduce((sum, a) => sum + a.inCostUsd, 0).toFixed(2);
7
+ const totalOutput = +agents
8
+ .reduce((sum, a) => sum + a.outCostUsd, 0)
9
+ .toFixed(2);
10
+ const segments = [
11
+ { name: "Input", value: totalInput },
12
+ { name: "Output", value: totalOutput },
13
+ ];
14
+ export function CostBreakdownChart() {
15
+ const [ref, colors] = useChartColors();
16
+ return (_jsxs("div", { ref: ref, className: "flex flex-col items-center", children: [_jsxs("div", { className: "relative h-44 w-44", children: [colors.length >= segments.length && (_jsx(ResponsiveContainer, { width: "100%", height: "100%", children: _jsx(PieChart, { children: _jsx(Pie, { data: segments, dataKey: "value", nameKey: "name", innerRadius: 52, outerRadius: 84, stroke: "none", children: segments.map((s, i) => (_jsx(Cell, { fill: colors[i] }, s.name))) }) }) })), _jsxs("div", { className: "pointer-events-none absolute inset-0 flex flex-col items-center justify-center", children: [_jsxs("span", { className: "text-xl font-semibold tabular-nums", children: ["$", totalLlmSpend.toFixed(2)] }), _jsx("span", { className: "text-xs text-muted-foreground", children: "total spend" })] })] }), _jsx("ul", { className: "mt-4 w-full space-y-1 text-xs", children: segments.map((s, i) => (_jsxs("li", { className: "flex items-center justify-between gap-2", children: [_jsxs("span", { className: "flex items-center gap-1.5", children: [_jsx("span", { className: "inline-block size-2.5 rounded-[2px]", style: { background: colors[i] ?? "var(--muted)" } }), s.name] }), _jsxs("span", { className: "tabular-nums text-muted-foreground", children: ["$", s.value.toFixed(2)] })] }, s.name))) })] }));
17
+ }
18
+ //# sourceMappingURL=CostBreakdownChart.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CostBreakdownChart.js","sourceRoot":"","sources":["../../../../src/examples/cost-dashboard/CostBreakdownChart.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAEpE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,iFAAiF;AACjF,MAAM,UAAU,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC/E,MAAM,WAAW,GAAG,CAAC,MAAM;KACxB,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;KACzC,OAAO,CAAC,CAAC,CAAC,CAAC;AACd,MAAM,QAAQ,GAAG;IACf,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;IACpC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,EAAE;CACvC,CAAC;AAEF,MAAM,UAAU,kBAAkB;IAChC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,cAAc,EAAE,CAAC;IACvC,OAAO,CACL,eAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAC,4BAA4B,aACnD,eAAK,SAAS,EAAC,oBAAoB,aAEhC,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,CACnC,KAAC,mBAAmB,IAAC,KAAK,EAAC,MAAM,EAAC,MAAM,EAAC,MAAM,YAC7C,KAAC,QAAQ,cACP,KAAC,GAAG,IACF,IAAI,EAAE,QAAQ,EACd,OAAO,EAAC,OAAO,EACf,OAAO,EAAC,MAAM,EACd,WAAW,EAAE,EAAE,EACf,WAAW,EAAE,EAAE,EACf,MAAM,EAAC,MAAM,YAEZ,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,KAAC,IAAI,IAAc,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAvB,CAAC,CAAC,IAAI,CAAqB,CACvC,CAAC,GACE,GACG,GACS,CACvB,EACD,eAAK,SAAS,EAAC,gFAAgF,aAC7F,gBAAM,SAAS,EAAC,oCAAoC,kBAChD,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,IACrB,EACP,eAAM,SAAS,EAAC,+BAA+B,4BAAmB,IAC9D,IACF,EACN,aAAI,SAAS,EAAC,+BAA+B,YAC1C,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,cAAiB,SAAS,EAAC,yCAAyC,aAClE,gBAAM,SAAS,EAAC,2BAA2B,aACzC,eACE,SAAS,EAAC,qCAAqC,EAC/C,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,cAAc,EAAE,GAClD,EACD,CAAC,CAAC,IAAI,IACF,EACP,gBAAM,SAAS,EAAC,oCAAoC,kBAChD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IACf,KAVA,CAAC,CAAC,IAAI,CAWV,CACN,CAAC,GACC,IACD,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function CostDashboardPage(): import("react").JSX.Element;
2
+ //# sourceMappingURL=CostDashboardPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CostDashboardPage.d.ts","sourceRoot":"","sources":["../../../../src/examples/cost-dashboard/CostDashboardPage.tsx"],"names":[],"mappings":"AAqIA,wBAAgB,iBAAiB,gCAkIhC"}
@@ -0,0 +1,53 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ArrowDown, ArrowUp, CalendarDays } from "lucide-react";
3
+ import { DataTable, Card, CardHeader, CardTitle, CardDescription, CardAction, CardContent, Badge, Button, Select, SelectTrigger, SelectValue, SelectContent, SelectItem, Popover, PopoverTrigger, PopoverContent, cn, } from "../../index";
4
+ import { AppShell } from "../shared/AppShell";
5
+ import { costNav, costBackNav, costBreadcrumb } from "../shared/cost-nav";
6
+ import { definition, instances, totalLlmSpend, totalTokens, totalRuns, } from "./mock-data";
7
+ import { TrendChart } from "./TrendChart";
8
+ import { CostBreakdownChart } from "./CostBreakdownChart";
9
+ // Tinted background signals sentiment (positive = good, regardless of arrow
10
+ // direction): a rising LLM spend is not "good", so it reads neutral, not green.
11
+ const trendStyles = {
12
+ positive: "bg-success/15 text-success",
13
+ negative: "bg-destructive/15 text-destructive",
14
+ neutral: "bg-muted text-muted-foreground",
15
+ };
16
+ function TrendPill({ value, direction, sentiment }) {
17
+ const Arrow = direction === "up" ? ArrowUp : ArrowDown;
18
+ return (_jsxs("span", { className: cn("inline-flex items-center gap-0.5 rounded-md px-1.5 py-0.5 text-xs font-medium tabular-nums", trendStyles[sentiment]), children: [_jsx(Arrow, { className: "size-3", "aria-hidden": true }), value] }));
19
+ }
20
+ function Stat({ label, value, trend, }) {
21
+ return (_jsx(Card, { children: _jsxs(CardHeader, { children: [_jsx(CardDescription, { children: label }), _jsx("span", { className: "text-3xl font-semibold tracking-tight tabular-nums", children: value }), trend ? (_jsx(CardAction, { children: _jsx(TrendPill, { ...trend }) })) : null] }) }));
22
+ }
23
+ const instanceColumns = [
24
+ {
25
+ accessorKey: "key",
26
+ header: "Instance key",
27
+ cell: ({ row }) => (_jsx("span", { className: "font-mono text-xs", children: row.original.key })),
28
+ },
29
+ {
30
+ accessorKey: "version",
31
+ header: "Version",
32
+ cell: ({ row }) => `v${row.original.version}`,
33
+ },
34
+ {
35
+ accessorKey: "state",
36
+ header: "State",
37
+ cell: ({ row }) => row.original.state === "ACTIVE" ? (_jsx(Badge, { variant: "outline", className: "text-info", children: "ACTIVE" })) : (_jsx(Badge, { variant: "outline", children: "COMPLETED" })),
38
+ },
39
+ {
40
+ accessorKey: "costUsd",
41
+ header: "LLM cost",
42
+ cell: ({ row }) => (_jsxs("span", { className: "block text-right tabular-nums", children: ["$", row.original.costUsd.toFixed(2)] })),
43
+ },
44
+ {
45
+ accessorKey: "started",
46
+ header: "Started",
47
+ },
48
+ ];
49
+ export function CostDashboardPage() {
50
+ // TODO: Replace with API call to GET /v1/definitions/{id}/versions/{v}/instances?range=...
51
+ return (_jsx(AppShell, { appName: "Agent Cost Monitor", sidebarLabel: "Agent Cost Monitor navigation", items: costNav, backNav: costBackNav, breadcrumb: costBreadcrumb, children: _jsxs("div", { className: "p-6 space-y-6", children: [_jsxs("div", { className: "flex items-start justify-between gap-4", children: [_jsx("div", { children: _jsx("h1", { className: "text-2xl font-semibold", children: "Process definitions" }) }), _jsxs("div", { className: "flex flex-col items-end gap-1", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Select, { defaultValue: definition.name, children: [_jsx(SelectTrigger, { "aria-label": "Process definition", className: "w-44", children: _jsx(SelectValue, {}) }), _jsxs(SelectContent, { children: [_jsx(SelectItem, { value: "OrderFulfillment", children: "OrderFulfillment" }), _jsx(SelectItem, { value: "InvoiceApproval", children: "InvoiceApproval" }), _jsx(SelectItem, { value: "SupportTriage", children: "SupportTriage" })] })] }), _jsxs(Select, { defaultValue: String(definition.version), children: [_jsx(SelectTrigger, { "aria-label": "Process version", className: "w-24", children: _jsx(SelectValue, {}) }), _jsx(SelectContent, { children: definition.versions.map((v) => (_jsxs(SelectItem, { value: String(v), children: ["v", v] }, v))) })] }), _jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: "outline", children: [_jsx(CalendarDays, {}), "Last 7 days"] }) }), _jsxs(PopoverContent, { align: "end", className: "w-48 gap-1 p-1.5", children: [_jsx(Button, { variant: "ghost", className: "w-full justify-start", children: "Last 24 hours" }), _jsx(Button, { variant: "ghost", className: "w-full justify-start", children: "Last 7 days" }), _jsx(Button, { variant: "ghost", className: "w-full justify-start", children: "Last 30 days" }), _jsx(Button, { variant: "ghost", className: "w-full justify-start", children: "Custom range" })] })] })] }), _jsx("p", { className: "text-right text-xs text-muted-foreground", children: "Compared to Jun 1\u20137" })] })] }), _jsxs("div", { className: "grid grid-cols-1 gap-4 sm:grid-cols-3", children: [_jsx(Stat, { label: "LLM spend", value: `$${totalLlmSpend.toFixed(2)}`, trend: { value: "3%", direction: "up", sentiment: "neutral" } }), _jsx(Stat, { label: "Total tokens", value: totalTokens.toLocaleString(), trend: { value: "8%", direction: "up", sentiment: "neutral" } }), _jsx(Stat, { label: "Total runs", value: totalRuns.toLocaleString(), trend: { value: "5%", direction: "down", sentiment: "neutral" } })] }), _jsxs("div", { className: "grid grid-cols-1 gap-4 lg:grid-cols-3", children: [_jsxs(Card, { className: "lg:col-span-2", children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: "Token usage trend" }) }), _jsx(CardContent, { children: _jsx(TrendChart, {}) })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: "Cost breakdown" }) }), _jsx(CardContent, { children: _jsx(CostBreakdownChart, {}) })] })] }), _jsxs(Card, { children: [_jsx(CardHeader, { children: _jsx(CardTitle, { children: "Recent instances" }) }), _jsx(CardContent, { children: _jsx(DataTable, { columns: instanceColumns, data: instances, sorting: true, getRowId: (row) => row.key }) })] })] }) }));
52
+ }
53
+ //# sourceMappingURL=CostDashboardPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CostDashboardPage.js","sourceRoot":"","sources":["../../../../src/examples/cost-dashboard/CostDashboardPage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function TrendChart(): import("react").JSX.Element;
2
+ //# sourceMappingURL=TrendChart.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TrendChart.d.ts","sourceRoot":"","sources":["../../../../src/examples/cost-dashboard/TrendChart.tsx"],"names":[],"mappings":"AAyBA,wBAAgB,UAAU,gCAgDzB"}