@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.
- package/dist/.storybook/CamundaLogo.d.ts +13 -0
- package/dist/.storybook/CamundaLogo.d.ts.map +1 -0
- package/dist/.storybook/CamundaLogo.js +14 -0
- package/dist/.storybook/CamundaLogo.js.map +1 -0
- package/dist/carbon-compat/filterable-multi-select.d.ts +39 -0
- package/dist/carbon-compat/filterable-multi-select.d.ts.map +1 -0
- package/dist/carbon-compat/filterable-multi-select.js +54 -0
- package/dist/carbon-compat/filterable-multi-select.js.map +1 -0
- package/dist/carbon-compat/form.d.ts +5 -0
- package/dist/carbon-compat/form.d.ts.map +1 -0
- package/dist/carbon-compat/form.js +6 -0
- package/dist/carbon-compat/form.js.map +1 -0
- package/dist/carbon-compat/index.d.ts +2 -0
- package/dist/carbon-compat/index.d.ts.map +1 -1
- package/dist/carbon-compat/index.js +2 -0
- package/dist/carbon-compat/index.js.map +1 -1
- package/dist/carbon-compat/multi-select.d.ts +37 -2
- package/dist/carbon-compat/multi-select.d.ts.map +1 -1
- package/dist/carbon-compat/multi-select.js +52 -2
- package/dist/carbon-compat/multi-select.js.map +1 -1
- package/dist/carbon-compat/select.d.ts +3 -3
- package/dist/carbon-compat/select.d.ts.map +1 -1
- package/dist/carbon-compat/select.js +47 -9
- package/dist/carbon-compat/select.js.map +1 -1
- package/dist/src/components/ui/checkbox.d.ts.map +1 -1
- package/dist/src/components/ui/checkbox.js +1 -1
- package/dist/src/components/ui/checkbox.js.map +1 -1
- package/dist/src/components/ui/data-table.d.ts.map +1 -1
- package/dist/src/components/ui/data-table.js +1 -1
- package/dist/src/components/ui/data-table.js.map +1 -1
- package/dist/src/components/ui/file-uploader.d.ts +39 -0
- package/dist/src/components/ui/file-uploader.d.ts.map +1 -0
- package/dist/src/components/ui/file-uploader.js +198 -0
- package/dist/src/components/ui/file-uploader.js.map +1 -0
- package/dist/src/components/ui/multi-select.d.ts +34 -0
- package/dist/src/components/ui/multi-select.d.ts.map +1 -0
- package/dist/src/components/ui/multi-select.js +88 -0
- package/dist/src/components/ui/multi-select.js.map +1 -0
- package/dist/src/components/ui/table.d.ts +1 -1
- package/dist/src/components/ui/table.d.ts.map +1 -1
- package/dist/src/components/ui/table.js +3 -3
- package/dist/src/components/ui/table.js.map +1 -1
- package/dist/src/examples/cost-dashboard/CostBreakdownChart.d.ts +2 -0
- package/dist/src/examples/cost-dashboard/CostBreakdownChart.d.ts.map +1 -0
- package/dist/src/examples/cost-dashboard/CostBreakdownChart.js +18 -0
- package/dist/src/examples/cost-dashboard/CostBreakdownChart.js.map +1 -0
- package/dist/src/examples/cost-dashboard/CostDashboardPage.d.ts +2 -0
- package/dist/src/examples/cost-dashboard/CostDashboardPage.d.ts.map +1 -0
- package/dist/src/examples/cost-dashboard/CostDashboardPage.js +53 -0
- package/dist/src/examples/cost-dashboard/CostDashboardPage.js.map +1 -0
- package/dist/src/examples/cost-dashboard/TrendChart.d.ts +2 -0
- package/dist/src/examples/cost-dashboard/TrendChart.d.ts.map +1 -0
- package/dist/src/examples/cost-dashboard/TrendChart.js +21 -0
- package/dist/src/examples/cost-dashboard/TrendChart.js.map +1 -0
- package/dist/src/examples/cost-dashboard/mock-data.d.ts +34 -0
- package/dist/src/examples/cost-dashboard/mock-data.d.ts.map +1 -0
- package/dist/src/examples/cost-dashboard/mock-data.js +120 -0
- package/dist/src/examples/cost-dashboard/mock-data.js.map +1 -0
- package/dist/src/examples/cost-dashboard/useChartColors.d.ts +10 -0
- package/dist/src/examples/cost-dashboard/useChartColors.d.ts.map +1 -0
- package/dist/src/examples/cost-dashboard/useChartColors.js +20 -0
- package/dist/src/examples/cost-dashboard/useChartColors.js.map +1 -0
- package/dist/src/examples/project-detail/ProjectDetailPage.d.ts +2 -0
- package/dist/src/examples/project-detail/ProjectDetailPage.d.ts.map +1 -0
- package/dist/src/examples/project-detail/ProjectDetailPage.js +68 -0
- package/dist/src/examples/project-detail/ProjectDetailPage.js.map +1 -0
- package/dist/src/examples/project-detail/mock-data.d.ts +38 -0
- package/dist/src/examples/project-detail/mock-data.d.ts.map +1 -0
- package/dist/src/examples/project-detail/mock-data.js +103 -0
- package/dist/src/examples/project-detail/mock-data.js.map +1 -0
- package/dist/src/examples/projects-list/ProjectsListPage.d.ts +4 -0
- package/dist/src/examples/projects-list/ProjectsListPage.d.ts.map +1 -0
- package/dist/src/examples/projects-list/ProjectsListPage.js +45 -0
- package/dist/src/examples/projects-list/ProjectsListPage.js.map +1 -0
- package/dist/src/examples/projects-list/mock-data.d.ts +10 -0
- package/dist/src/examples/projects-list/mock-data.d.ts.map +1 -0
- package/dist/src/examples/projects-list/mock-data.js +83 -0
- package/dist/src/examples/projects-list/mock-data.js.map +1 -0
- package/dist/src/examples/shared/AppShell.d.ts +13 -0
- package/dist/src/examples/shared/AppShell.d.ts.map +1 -0
- package/dist/src/examples/shared/AppShell.js +13 -0
- package/dist/src/examples/shared/AppShell.js.map +1 -0
- package/dist/src/examples/shared/console-nav.d.ts +5 -0
- package/dist/src/examples/shared/console-nav.d.ts.map +1 -0
- package/dist/src/examples/shared/console-nav.js +37 -0
- package/dist/src/examples/shared/console-nav.js.map +1 -0
- package/dist/src/examples/shared/cost-nav.d.ts +5 -0
- package/dist/src/examples/shared/cost-nav.d.ts.map +1 -0
- package/dist/src/examples/shared/cost-nav.js +47 -0
- package/dist/src/examples/shared/cost-nav.js.map +1 -0
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/specs/schema.d.ts +4 -0
- package/dist/src/specs/schema.d.ts.map +1 -1
- package/dist/styles.css +233 -0
- package/package.json +9 -1
- package/dist/carbon-compat/stories/breadcrumb-skeleton.stories.d.ts +0 -10
- package/dist/carbon-compat/stories/breadcrumb-skeleton.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/breadcrumb-skeleton.stories.js +0 -17
- package/dist/carbon-compat/stories/breadcrumb-skeleton.stories.js.map +0 -1
- package/dist/carbon-compat/stories/breadcrumb.stories.d.ts +0 -6
- package/dist/carbon-compat/stories/breadcrumb.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/breadcrumb.stories.js +0 -11
- package/dist/carbon-compat/stories/breadcrumb.stories.js.map +0 -1
- package/dist/carbon-compat/stories/button.stories.d.ts +0 -13
- package/dist/carbon-compat/stories/button.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/button.stories.js +0 -45
- package/dist/carbon-compat/stories/button.stories.js.map +0 -1
- package/dist/carbon-compat/stories/c3-cluster-tag.stories.d.ts +0 -11
- package/dist/carbon-compat/stories/c3-cluster-tag.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/c3-cluster-tag.stories.js +0 -12
- package/dist/carbon-compat/stories/c3-cluster-tag.stories.js.map +0 -1
- package/dist/carbon-compat/stories/c3-data-table.stories.d.ts +0 -32
- package/dist/carbon-compat/stories/c3-data-table.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/c3-data-table.stories.js +0 -244
- package/dist/carbon-compat/stories/c3-data-table.stories.js.map +0 -1
- package/dist/carbon-compat/stories/c3-responsive-stack.stories.d.ts +0 -9
- package/dist/carbon-compat/stories/c3-responsive-stack.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/c3-responsive-stack.stories.js +0 -28
- package/dist/carbon-compat/stories/c3-responsive-stack.stories.js.map +0 -1
- package/dist/carbon-compat/stories/checkbox-skeleton.stories.d.ts +0 -8
- package/dist/carbon-compat/stories/checkbox-skeleton.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/checkbox-skeleton.stories.js +0 -13
- package/dist/carbon-compat/stories/checkbox-skeleton.stories.js.map +0 -1
- package/dist/carbon-compat/stories/checkbox.stories.d.ts +0 -10
- package/dist/carbon-compat/stories/checkbox.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/checkbox.stories.js +0 -20
- package/dist/carbon-compat/stories/checkbox.stories.js.map +0 -1
- package/dist/carbon-compat/stories/code-snippet.stories.d.ts +0 -9
- package/dist/carbon-compat/stories/code-snippet.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/code-snippet.stories.js +0 -30
- package/dist/carbon-compat/stories/code-snippet.stories.js.map +0 -1
- package/dist/carbon-compat/stories/combo-box.stories.d.ts +0 -8
- package/dist/carbon-compat/stories/combo-box.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/combo-box.stories.js +0 -38
- package/dist/carbon-compat/stories/combo-box.stories.js.map +0 -1
- package/dist/carbon-compat/stories/content-switcher.stories.d.ts +0 -8
- package/dist/carbon-compat/stories/content-switcher.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/content-switcher.stories.js +0 -15
- package/dist/carbon-compat/stories/content-switcher.stories.js.map +0 -1
- package/dist/carbon-compat/stories/data-table-skeleton.stories.d.ts +0 -11
- package/dist/carbon-compat/stories/data-table-skeleton.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/data-table-skeleton.stories.js +0 -37
- package/dist/carbon-compat/stories/data-table-skeleton.stories.js.map +0 -1
- package/dist/carbon-compat/stories/data-table.stories.d.ts +0 -16
- package/dist/carbon-compat/stories/data-table.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/data-table.stories.js +0 -103
- package/dist/carbon-compat/stories/data-table.stories.js.map +0 -1
- package/dist/carbon-compat/stories/dropdown.stories.d.ts +0 -7
- package/dist/carbon-compat/stories/dropdown.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/dropdown.stories.js +0 -23
- package/dist/carbon-compat/stories/dropdown.stories.js.map +0 -1
- package/dist/carbon-compat/stories/icon-button.stories.d.ts +0 -9
- package/dist/carbon-compat/stories/icon-button.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/icon-button.stories.js +0 -29
- package/dist/carbon-compat/stories/icon-button.stories.js.map +0 -1
- package/dist/carbon-compat/stories/link.stories.d.ts +0 -11
- package/dist/carbon-compat/stories/link.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/link.stories.js +0 -24
- package/dist/carbon-compat/stories/link.stories.js.map +0 -1
- package/dist/carbon-compat/stories/loading.stories.d.ts +0 -9
- package/dist/carbon-compat/stories/loading.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/loading.stories.js +0 -22
- package/dist/carbon-compat/stories/loading.stories.js.map +0 -1
- package/dist/carbon-compat/stories/menu-button.stories.d.ts +0 -8
- package/dist/carbon-compat/stories/menu-button.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/menu-button.stories.js +0 -22
- package/dist/carbon-compat/stories/menu-button.stories.js.map +0 -1
- package/dist/carbon-compat/stories/modal.stories.d.ts +0 -8
- package/dist/carbon-compat/stories/modal.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/modal.stories.js +0 -28
- package/dist/carbon-compat/stories/modal.stories.js.map +0 -1
- package/dist/carbon-compat/stories/overflow-menu.stories.d.ts +0 -6
- package/dist/carbon-compat/stories/overflow-menu.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/overflow-menu.stories.js +0 -11
- package/dist/carbon-compat/stories/overflow-menu.stories.js.map +0 -1
- package/dist/carbon-compat/stories/popover.stories.d.ts +0 -6
- package/dist/carbon-compat/stories/popover.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/popover.stories.js +0 -16
- package/dist/carbon-compat/stories/popover.stories.js.map +0 -1
- package/dist/carbon-compat/stories/progress-bar.stories.d.ts +0 -11
- package/dist/carbon-compat/stories/progress-bar.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/progress-bar.stories.js +0 -23
- package/dist/carbon-compat/stories/progress-bar.stories.js.map +0 -1
- package/dist/carbon-compat/stories/radio-button.stories.d.ts +0 -11
- package/dist/carbon-compat/stories/radio-button.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/radio-button.stories.js +0 -25
- package/dist/carbon-compat/stories/radio-button.stories.js.map +0 -1
- package/dist/carbon-compat/stories/search.stories.d.ts +0 -12
- package/dist/carbon-compat/stories/search.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/search.stories.js +0 -31
- package/dist/carbon-compat/stories/search.stories.js.map +0 -1
- package/dist/carbon-compat/stories/select-skeleton.stories.d.ts +0 -8
- package/dist/carbon-compat/stories/select-skeleton.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/select-skeleton.stories.js +0 -13
- package/dist/carbon-compat/stories/select-skeleton.stories.js.map +0 -1
- package/dist/carbon-compat/stories/select.stories.d.ts +0 -7
- package/dist/carbon-compat/stories/select.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/select.stories.js +0 -18
- package/dist/carbon-compat/stories/select.stories.js.map +0 -1
- package/dist/carbon-compat/stories/skeleton-text.stories.d.ts +0 -10
- package/dist/carbon-compat/stories/skeleton-text.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/skeleton-text.stories.js +0 -26
- package/dist/carbon-compat/stories/skeleton-text.stories.js.map +0 -1
- package/dist/carbon-compat/stories/stack.stories.d.ts +0 -17
- package/dist/carbon-compat/stories/stack.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/stack.stories.js +0 -41
- package/dist/carbon-compat/stories/stack.stories.js.map +0 -1
- package/dist/carbon-compat/stories/structured-list-skeleton.stories.d.ts +0 -9
- package/dist/carbon-compat/stories/structured-list-skeleton.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/structured-list-skeleton.stories.js +0 -14
- package/dist/carbon-compat/stories/structured-list-skeleton.stories.js.map +0 -1
- package/dist/carbon-compat/stories/table.stories.d.ts +0 -6
- package/dist/carbon-compat/stories/table.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/table.stories.js +0 -16
- package/dist/carbon-compat/stories/table.stories.js.map +0 -1
- package/dist/carbon-compat/stories/tabs.stories.d.ts +0 -7
- package/dist/carbon-compat/stories/tabs.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/tabs.stories.js +0 -14
- package/dist/carbon-compat/stories/tabs.stories.js.map +0 -1
- package/dist/carbon-compat/stories/tag.stories.d.ts +0 -11
- package/dist/carbon-compat/stories/tag.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/tag.stories.js +0 -46
- package/dist/carbon-compat/stories/tag.stories.js.map +0 -1
- package/dist/carbon-compat/stories/text-area.stories.d.ts +0 -10
- package/dist/carbon-compat/stories/text-area.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/text-area.stories.js +0 -27
- package/dist/carbon-compat/stories/text-area.stories.js.map +0 -1
- package/dist/carbon-compat/stories/text-input.stories.d.ts +0 -11
- package/dist/carbon-compat/stories/text-input.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/text-input.stories.js +0 -30
- package/dist/carbon-compat/stories/text-input.stories.js.map +0 -1
- package/dist/carbon-compat/stories/tile.stories.d.ts +0 -11
- package/dist/carbon-compat/stories/tile.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/tile.stories.js +0 -22
- package/dist/carbon-compat/stories/tile.stories.js.map +0 -1
- package/dist/carbon-compat/stories/toggle.stories.d.ts +0 -11
- package/dist/carbon-compat/stories/toggle.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/toggle.stories.js +0 -23
- package/dist/carbon-compat/stories/toggle.stories.js.map +0 -1
- package/dist/carbon-compat/stories/tooltip.stories.d.ts +0 -7
- package/dist/carbon-compat/stories/tooltip.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/tooltip.stories.js +0 -15
- package/dist/carbon-compat/stories/tooltip.stories.js.map +0 -1
- package/dist/carbon-compat/stories/unordered-list.stories.d.ts +0 -9
- package/dist/carbon-compat/stories/unordered-list.stories.d.ts.map +0 -1
- package/dist/carbon-compat/stories/unordered-list.stories.js +0 -22
- 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;
|
|
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":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAI/B,MAAM,gBAAgB,GAAG,KAAK,CAAC,aAAa,CAAY,IAAI,CAAC,CAAC;AAE9D,MAAM,eAAe,GAA8B;IACjD,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,WAAW;CAChB,CAAC;AAEF,MAAM,eAAe,GAA8B;IACjD,EAAE,EAAE,UAAU;IACd,EAAE,EAAE,WAAW;IACf,EAAE,EAAE,WAAW;CAChB,CAAC;AAEF,SAAS,KAAK,CAAC,EACb,IAAI,GAAG,IAAI,EACX,SAAS,EACT,kBAAkB,EAClB,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../../../src/components/ui/table.tsx"],"names":[],"mappings":"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"}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
1
|
+
{"version":3,"file":"TrendChart.d.ts","sourceRoot":"","sources":["../../../../src/examples/cost-dashboard/TrendChart.tsx"],"names":[],"mappings":"AAyBA,wBAAgB,UAAU,gCAgDzB"}
|