@quanticjs/workflow-ui 0.1.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/components/ProcessTimeline/ProcessTimeline.d.ts +7 -0
- package/dist/components/ProcessTimeline/ProcessTimeline.d.ts.map +1 -0
- package/dist/components/ProcessTimeline/ProcessTimeline.js +48 -0
- package/dist/components/ProcessTimeline/ProcessTimeline.js.map +1 -0
- package/dist/components/ProcessTimeline/ProcessTimelineSkeleton.d.ts +6 -0
- package/dist/components/ProcessTimeline/ProcessTimelineSkeleton.d.ts.map +1 -0
- package/dist/components/ProcessTimeline/ProcessTimelineSkeleton.js +6 -0
- package/dist/components/ProcessTimeline/ProcessTimelineSkeleton.js.map +1 -0
- package/dist/components/ProcessTimeline/TimelineEntry.d.ts +8 -0
- package/dist/components/ProcessTimeline/TimelineEntry.d.ts.map +1 -0
- package/dist/components/ProcessTimeline/TimelineEntry.js +66 -0
- package/dist/components/ProcessTimeline/TimelineEntry.js.map +1 -0
- package/dist/components/ProcessTimeline/index.d.ts +4 -0
- package/dist/components/ProcessTimeline/index.d.ts.map +1 -0
- package/dist/components/ProcessTimeline/index.js +4 -0
- package/dist/components/ProcessTimeline/index.js.map +1 -0
- package/dist/components/TaskActions/ConfirmationDialog.d.ts +8 -0
- package/dist/components/TaskActions/ConfirmationDialog.d.ts.map +1 -0
- package/dist/components/TaskActions/ConfirmationDialog.js +45 -0
- package/dist/components/TaskActions/ConfirmationDialog.js.map +1 -0
- package/dist/components/TaskActions/TaskActions.d.ts +10 -0
- package/dist/components/TaskActions/TaskActions.d.ts.map +1 -0
- package/dist/components/TaskActions/TaskActions.js +51 -0
- package/dist/components/TaskActions/TaskActions.js.map +1 -0
- package/dist/components/TaskActions/index.d.ts +3 -0
- package/dist/components/TaskActions/index.d.ts.map +1 -0
- package/dist/components/TaskActions/index.js +3 -0
- package/dist/components/TaskActions/index.js.map +1 -0
- package/dist/components/TaskDetail/TaskDetail.d.ts +8 -0
- package/dist/components/TaskDetail/TaskDetail.d.ts.map +1 -0
- package/dist/components/TaskDetail/TaskDetail.js +116 -0
- package/dist/components/TaskDetail/TaskDetail.js.map +1 -0
- package/dist/components/TaskDetail/TaskDetailError.d.ts +7 -0
- package/dist/components/TaskDetail/TaskDetailError.d.ts.map +1 -0
- package/dist/components/TaskDetail/TaskDetailError.js +8 -0
- package/dist/components/TaskDetail/TaskDetailError.js.map +1 -0
- package/dist/components/TaskDetail/TaskDetailHeader.d.ts +7 -0
- package/dist/components/TaskDetail/TaskDetailHeader.d.ts.map +1 -0
- package/dist/components/TaskDetail/TaskDetailHeader.js +39 -0
- package/dist/components/TaskDetail/TaskDetailHeader.js.map +1 -0
- package/dist/components/TaskDetail/TaskDetailNotFound.d.ts +5 -0
- package/dist/components/TaskDetail/TaskDetailNotFound.d.ts.map +1 -0
- package/dist/components/TaskDetail/TaskDetailNotFound.js +6 -0
- package/dist/components/TaskDetail/TaskDetailNotFound.js.map +1 -0
- package/dist/components/TaskDetail/TaskDetailSkeleton.d.ts +5 -0
- package/dist/components/TaskDetail/TaskDetailSkeleton.d.ts.map +1 -0
- package/dist/components/TaskDetail/TaskDetailSkeleton.js +6 -0
- package/dist/components/TaskDetail/TaskDetailSkeleton.js.map +1 -0
- package/dist/components/TaskDetail/index.d.ts +6 -0
- package/dist/components/TaskDetail/index.d.ts.map +1 -0
- package/dist/components/TaskDetail/index.js +6 -0
- package/dist/components/TaskDetail/index.js.map +1 -0
- package/dist/components/TaskInbox/TaskCard.d.ts +10 -0
- package/dist/components/TaskInbox/TaskCard.d.ts.map +1 -0
- package/dist/components/TaskInbox/TaskCard.js +90 -0
- package/dist/components/TaskInbox/TaskCard.js.map +1 -0
- package/dist/components/TaskInbox/TaskFilters.d.ts +10 -0
- package/dist/components/TaskInbox/TaskFilters.d.ts.map +1 -0
- package/dist/components/TaskInbox/TaskFilters.js +59 -0
- package/dist/components/TaskInbox/TaskFilters.js.map +1 -0
- package/dist/components/TaskInbox/TaskInbox.d.ts +12 -0
- package/dist/components/TaskInbox/TaskInbox.d.ts.map +1 -0
- package/dist/components/TaskInbox/TaskInbox.js +85 -0
- package/dist/components/TaskInbox/TaskInbox.js.map +1 -0
- package/dist/components/TaskInbox/TaskInboxEmpty.d.ts +7 -0
- package/dist/components/TaskInbox/TaskInboxEmpty.d.ts.map +1 -0
- package/dist/components/TaskInbox/TaskInboxEmpty.js +6 -0
- package/dist/components/TaskInbox/TaskInboxEmpty.js.map +1 -0
- package/dist/components/TaskInbox/TaskInboxError.d.ts +7 -0
- package/dist/components/TaskInbox/TaskInboxError.d.ts.map +1 -0
- package/dist/components/TaskInbox/TaskInboxError.js +8 -0
- package/dist/components/TaskInbox/TaskInboxError.js.map +1 -0
- package/dist/components/TaskInbox/TaskInboxSkeleton.d.ts +6 -0
- package/dist/components/TaskInbox/TaskInboxSkeleton.d.ts.map +1 -0
- package/dist/components/TaskInbox/TaskInboxSkeleton.js +6 -0
- package/dist/components/TaskInbox/TaskInboxSkeleton.js.map +1 -0
- package/dist/components/TaskInbox/index.d.ts +7 -0
- package/dist/components/TaskInbox/index.d.ts.map +1 -0
- package/dist/components/TaskInbox/index.js +7 -0
- package/dist/components/TaskInbox/index.js.map +1 -0
- package/dist/components/WorkflowForm/FieldRenderer.d.ts +14 -0
- package/dist/components/WorkflowForm/FieldRenderer.d.ts.map +1 -0
- package/dist/components/WorkflowForm/FieldRenderer.js +28 -0
- package/dist/components/WorkflowForm/FieldRenderer.js.map +1 -0
- package/dist/components/WorkflowForm/FormSection.d.ts +10 -0
- package/dist/components/WorkflowForm/FormSection.d.ts.map +1 -0
- package/dist/components/WorkflowForm/FormSection.js +12 -0
- package/dist/components/WorkflowForm/FormSection.js.map +1 -0
- package/dist/components/WorkflowForm/WorkflowForm.d.ts +11 -0
- package/dist/components/WorkflowForm/WorkflowForm.d.ts.map +1 -0
- package/dist/components/WorkflowForm/WorkflowForm.js +61 -0
- package/dist/components/WorkflowForm/WorkflowForm.js.map +1 -0
- package/dist/components/WorkflowForm/buildZodSchema.d.ts +4 -0
- package/dist/components/WorkflowForm/buildZodSchema.d.ts.map +1 -0
- package/dist/components/WorkflowForm/buildZodSchema.js +79 -0
- package/dist/components/WorkflowForm/buildZodSchema.js.map +1 -0
- package/dist/components/WorkflowForm/fields/CheckboxField.d.ts +3 -0
- package/dist/components/WorkflowForm/fields/CheckboxField.d.ts.map +1 -0
- package/dist/components/WorkflowForm/fields/CheckboxField.js +7 -0
- package/dist/components/WorkflowForm/fields/CheckboxField.js.map +1 -0
- package/dist/components/WorkflowForm/fields/DateField.d.ts +3 -0
- package/dist/components/WorkflowForm/fields/DateField.d.ts.map +1 -0
- package/dist/components/WorkflowForm/fields/DateField.js +7 -0
- package/dist/components/WorkflowForm/fields/DateField.js.map +1 -0
- package/dist/components/WorkflowForm/fields/FileUploadField.d.ts +3 -0
- package/dist/components/WorkflowForm/fields/FileUploadField.d.ts.map +1 -0
- package/dist/components/WorkflowForm/fields/FileUploadField.js +80 -0
- package/dist/components/WorkflowForm/fields/FileUploadField.js.map +1 -0
- package/dist/components/WorkflowForm/fields/MultiSelectField.d.ts +3 -0
- package/dist/components/WorkflowForm/fields/MultiSelectField.d.ts.map +1 -0
- package/dist/components/WorkflowForm/fields/MultiSelectField.js +33 -0
- package/dist/components/WorkflowForm/fields/MultiSelectField.js.map +1 -0
- package/dist/components/WorkflowForm/fields/NumberField.d.ts +3 -0
- package/dist/components/WorkflowForm/fields/NumberField.d.ts.map +1 -0
- package/dist/components/WorkflowForm/fields/NumberField.js +16 -0
- package/dist/components/WorkflowForm/fields/NumberField.js.map +1 -0
- package/dist/components/WorkflowForm/fields/ReadonlyField.d.ts +3 -0
- package/dist/components/WorkflowForm/fields/ReadonlyField.d.ts.map +1 -0
- package/dist/components/WorkflowForm/fields/ReadonlyField.js +6 -0
- package/dist/components/WorkflowForm/fields/ReadonlyField.js.map +1 -0
- package/dist/components/WorkflowForm/fields/SelectField.d.ts +3 -0
- package/dist/components/WorkflowForm/fields/SelectField.d.ts.map +1 -0
- package/dist/components/WorkflowForm/fields/SelectField.js +7 -0
- package/dist/components/WorkflowForm/fields/SelectField.js.map +1 -0
- package/dist/components/WorkflowForm/fields/TextField.d.ts +3 -0
- package/dist/components/WorkflowForm/fields/TextField.d.ts.map +1 -0
- package/dist/components/WorkflowForm/fields/TextField.js +7 -0
- package/dist/components/WorkflowForm/fields/TextField.js.map +1 -0
- package/dist/components/WorkflowForm/fields/TextareaField.d.ts +3 -0
- package/dist/components/WorkflowForm/fields/TextareaField.d.ts.map +1 -0
- package/dist/components/WorkflowForm/fields/TextareaField.js +7 -0
- package/dist/components/WorkflowForm/fields/TextareaField.js.map +1 -0
- package/dist/components/WorkflowForm/fields/UnknownField.d.ts +3 -0
- package/dist/components/WorkflowForm/fields/UnknownField.d.ts.map +1 -0
- package/dist/components/WorkflowForm/fields/UnknownField.js +7 -0
- package/dist/components/WorkflowForm/fields/UnknownField.js.map +1 -0
- package/dist/components/WorkflowForm/fields/shared.d.ts +22 -0
- package/dist/components/WorkflowForm/fields/shared.d.ts.map +1 -0
- package/dist/components/WorkflowForm/fields/shared.js +2 -0
- package/dist/components/WorkflowForm/fields/shared.js.map +1 -0
- package/dist/components/WorkflowForm/index.d.ts +5 -0
- package/dist/components/WorkflowForm/index.d.ts.map +1 -0
- package/dist/components/WorkflowForm/index.js +5 -0
- package/dist/components/WorkflowForm/index.js.map +1 -0
- package/dist/hooks/mutation-error-handler.d.ts +3 -0
- package/dist/hooks/mutation-error-handler.d.ts.map +1 -0
- package/dist/hooks/mutation-error-handler.js +20 -0
- package/dist/hooks/mutation-error-handler.js.map +1 -0
- package/dist/hooks/useProcessTimeline.d.ts +8 -0
- package/dist/hooks/useProcessTimeline.d.ts.map +1 -0
- package/dist/hooks/useProcessTimeline.js +17 -0
- package/dist/hooks/useProcessTimeline.js.map +1 -0
- package/dist/hooks/useTask.d.ts +3 -0
- package/dist/hooks/useTask.d.ts.map +1 -0
- package/dist/hooks/useTask.js +11 -0
- package/dist/hooks/useTask.js.map +1 -0
- package/dist/hooks/useTaskAction.d.ts +3 -0
- package/dist/hooks/useTaskAction.d.ts.map +1 -0
- package/dist/hooks/useTaskAction.js +15 -0
- package/dist/hooks/useTaskAction.js.map +1 -0
- package/dist/hooks/useTaskClaim.d.ts +5 -0
- package/dist/hooks/useTaskClaim.d.ts.map +1 -0
- package/dist/hooks/useTaskClaim.js +23 -0
- package/dist/hooks/useTaskClaim.js.map +1 -0
- package/dist/hooks/useTaskList.d.ts +3 -0
- package/dist/hooks/useTaskList.d.ts.map +1 -0
- package/dist/hooks/useTaskList.js +23 -0
- package/dist/hooks/useTaskList.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/provider/WorkflowProvider.d.ts +32 -0
- package/dist/provider/WorkflowProvider.d.ts.map +1 -0
- package/dist/provider/WorkflowProvider.js +52 -0
- package/dist/provider/WorkflowProvider.js.map +1 -0
- package/dist/test-setup.d.ts +2 -0
- package/dist/test-setup.d.ts.map +1 -0
- package/dist/test-setup.js +2 -0
- package/dist/test-setup.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/types.d.ts +141 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { WorkflowFormField } from '../../types';
|
|
2
|
+
import type { RegisterReturn } from './fields/shared';
|
|
3
|
+
interface FieldRendererProps {
|
|
4
|
+
field: WorkflowFormField;
|
|
5
|
+
register: (name: string) => RegisterReturn;
|
|
6
|
+
setValue: (name: string, value: unknown) => void;
|
|
7
|
+
error?: string;
|
|
8
|
+
readOnly?: boolean;
|
|
9
|
+
value?: unknown;
|
|
10
|
+
className?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const FieldRenderer: import("react").ForwardRefExoticComponent<FieldRendererProps & import("react").RefAttributes<HTMLDivElement>>;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=FieldRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldRenderer.d.ts","sourceRoot":"","sources":["../../../src/components/WorkflowForm/FieldRenderer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAYtD,UAAU,kBAAkB;IAC1B,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,cAAc,CAAC;IAC3C,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAcD,eAAO,MAAM,aAAa,+GAUxB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
import { TextField } from './fields/TextField';
|
|
4
|
+
import { TextareaField } from './fields/TextareaField';
|
|
5
|
+
import { NumberField } from './fields/NumberField';
|
|
6
|
+
import { SelectField } from './fields/SelectField';
|
|
7
|
+
import { MultiSelectField } from './fields/MultiSelectField';
|
|
8
|
+
import { CheckboxField } from './fields/CheckboxField';
|
|
9
|
+
import { DateField } from './fields/DateField';
|
|
10
|
+
import { FileUploadField } from './fields/FileUploadField';
|
|
11
|
+
import { ReadonlyField } from './fields/ReadonlyField';
|
|
12
|
+
import { UnknownField } from './fields/UnknownField';
|
|
13
|
+
const FIELD_MAP = {
|
|
14
|
+
text: TextField,
|
|
15
|
+
textarea: TextareaField,
|
|
16
|
+
number: NumberField,
|
|
17
|
+
select: SelectField,
|
|
18
|
+
multiselect: MultiSelectField,
|
|
19
|
+
checkbox: CheckboxField,
|
|
20
|
+
date: DateField,
|
|
21
|
+
file: FileUploadField,
|
|
22
|
+
readonly: ReadonlyField,
|
|
23
|
+
};
|
|
24
|
+
export const FieldRenderer = forwardRef(function FieldRenderer({ className, ...props }, ref) {
|
|
25
|
+
const Component = FIELD_MAP[props.field.type] ?? UnknownField;
|
|
26
|
+
return (_jsx("div", { ref: ref, className: className, children: _jsx(Component, { ...props }) }));
|
|
27
|
+
});
|
|
28
|
+
//# sourceMappingURL=FieldRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldRenderer.js","sourceRoot":"","sources":["../../../src/components/WorkflowForm/FieldRenderer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAGnC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAYrD,MAAM,SAAS,GAAqC;IAClD,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,aAAa;IACvB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,WAAW;IACnB,WAAW,EAAE,gBAAgB;IAC7B,QAAQ,EAAE,aAAa;IACvB,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,eAAe;IACrB,QAAQ,EAAE,aAAa;CACxB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAqC,SAAS,aAAa,CAChG,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EACvB,GAAG;IAEH,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC;IAC9D,OAAO,CACL,cAAK,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,YACjC,KAAC,SAAS,OAAK,KAAK,GAAI,GACpB,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
interface FormSectionProps {
|
|
3
|
+
label: string;
|
|
4
|
+
columns?: number;
|
|
5
|
+
children: ReactNode;
|
|
6
|
+
className?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const FormSection: import("react").ForwardRefExoticComponent<FormSectionProps & import("react").RefAttributes<HTMLFieldSetElement>>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=FormSection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormSection.d.ts","sourceRoot":"","sources":["../../../src/components/WorkflowForm/FormSection.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEnD,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,WAAW,kHAoBtB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from 'react';
|
|
3
|
+
export const FormSection = forwardRef(function FormSection({ label, columns, children, className }, ref) {
|
|
4
|
+
const cols = columns && columns > 1 ? columns : 2;
|
|
5
|
+
const gridClass = cols === 3
|
|
6
|
+
? 'grid grid-cols-3 gap-x-10 gap-y-5'
|
|
7
|
+
: cols === 4
|
|
8
|
+
? 'grid grid-cols-4 gap-x-10 gap-y-5'
|
|
9
|
+
: 'grid grid-cols-2 gap-x-10 gap-y-5';
|
|
10
|
+
return (_jsxs("fieldset", { ref: ref, className: `border-t border-border pt-5 ${className ?? ''}`, children: [_jsx("legend", { className: "mb-4 text-[11px] font-semibold uppercase tracking-wider text-muted-foreground", children: label }), _jsx("div", { className: gridClass, children: children })] }));
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=FormSection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FormSection.js","sourceRoot":"","sources":["../../../src/components/WorkflowForm/FormSection.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAkB,MAAM,OAAO,CAAC;AASnD,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAwC,SAAS,WAAW,CAC/F,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EACvC,GAAG;IAEH,MAAM,IAAI,GAAG,OAAO,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,SAAS,GACb,IAAI,KAAK,CAAC;QACR,CAAC,CAAC,mCAAmC;QACrC,CAAC,CAAC,IAAI,KAAK,CAAC;YACV,CAAC,CAAC,mCAAmC;YACrC,CAAC,CAAC,mCAAmC,CAAC;IAE5C,OAAO,CACL,oBAAU,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,+BAA+B,SAAS,IAAI,EAAE,EAAE,aAC7E,iBAAQ,SAAS,EAAC,+EAA+E,YAC9F,KAAK,GACC,EACT,cAAK,SAAS,EAAE,SAAS,YAAG,QAAQ,GAAO,IAClC,CACZ,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { WorkflowFormSchema } from '../../types';
|
|
2
|
+
export interface WorkflowFormProps {
|
|
3
|
+
schema: WorkflowFormSchema;
|
|
4
|
+
initialValues?: Record<string, unknown>;
|
|
5
|
+
onSubmit?: (data: Record<string, unknown>) => void | Promise<void>;
|
|
6
|
+
activeAction?: string;
|
|
7
|
+
readOnly?: boolean;
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const WorkflowForm: import("react").ForwardRefExoticComponent<WorkflowFormProps & import("react").RefAttributes<HTMLFormElement>>;
|
|
11
|
+
//# sourceMappingURL=WorkflowForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowForm.d.ts","sourceRoot":"","sources":["../../../src/components/WorkflowForm/WorkflowForm.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAC;AAKzE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAyBD,eAAO,MAAM,YAAY,+GA2FvB,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, forwardRef } from 'react';
|
|
3
|
+
import { useForm } from '@quanticjs/react-forms';
|
|
4
|
+
import { buildZodSchema } from './buildZodSchema';
|
|
5
|
+
import { FieldRenderer } from './FieldRenderer';
|
|
6
|
+
import { FormSection } from './FormSection';
|
|
7
|
+
function computeDefaults(fields, initialValues) {
|
|
8
|
+
const result = {};
|
|
9
|
+
for (const field of fields) {
|
|
10
|
+
if (field.type === 'readonly')
|
|
11
|
+
continue;
|
|
12
|
+
const initial = initialValues?.[field.name];
|
|
13
|
+
if (initial !== undefined) {
|
|
14
|
+
result[field.name] = initial;
|
|
15
|
+
}
|
|
16
|
+
else if (field.default !== undefined) {
|
|
17
|
+
result[field.name] = field.default;
|
|
18
|
+
}
|
|
19
|
+
else if (field.type === 'checkbox') {
|
|
20
|
+
result[field.name] = false;
|
|
21
|
+
}
|
|
22
|
+
else if (field.type === 'multiselect' || field.type === 'file') {
|
|
23
|
+
result[field.name] = [];
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
result[field.name] = '';
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
export const WorkflowForm = forwardRef(function WorkflowForm({ schema, initialValues, onSubmit, activeAction, readOnly, className }, ref) {
|
|
32
|
+
const zodSchema = useMemo(() => buildZodSchema(schema.fields, activeAction), [schema.fields, activeAction]);
|
|
33
|
+
const defaults = useMemo(() => computeDefaults(schema.fields, initialValues), [schema.fields, initialValues]);
|
|
34
|
+
const form = useForm({
|
|
35
|
+
schema: zodSchema,
|
|
36
|
+
defaultValues: defaults,
|
|
37
|
+
onSubmit: async (data) => {
|
|
38
|
+
await onSubmit?.(data);
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
const sections = schema.layout?.sections;
|
|
42
|
+
const sectionedFieldNames = new Set(sections?.flatMap((s) => s.fields) ?? []);
|
|
43
|
+
const unsectionedFields = schema.fields.filter((f) => !sectionedFieldNames.has(f.name));
|
|
44
|
+
const renderField = (field) => {
|
|
45
|
+
const fieldValue = field.type === 'readonly'
|
|
46
|
+
? (initialValues?.[field.name] ?? field.default)
|
|
47
|
+
: form.values[field.name];
|
|
48
|
+
return (_jsx(FieldRenderer, { field: field, register: form.register, setValue: form.setValue, error: form.errors[field.name], readOnly: readOnly, value: fieldValue }, field.name));
|
|
49
|
+
};
|
|
50
|
+
const fieldsByName = useMemo(() => {
|
|
51
|
+
const map = new Map();
|
|
52
|
+
for (const f of schema.fields)
|
|
53
|
+
map.set(f.name, f);
|
|
54
|
+
return map;
|
|
55
|
+
}, [schema.fields]);
|
|
56
|
+
return (_jsxs("form", { ref: ref, onSubmit: form.handleSubmit, className: className, noValidate: true, "aria-label": "Workflow form", children: [form.errors._root && (_jsx("div", { className: "mb-4 rounded-xl border border-destructive/30 bg-destructive/5 px-4 py-3 text-sm text-destructive", role: "alert", "aria-live": "assertive", children: form.errors._root })), sections && sections.length > 0 ? (_jsxs(_Fragment, { children: [sections.map((section) => (_jsx(FormSection, { label: section.label, columns: section.columns, children: section.fields
|
|
57
|
+
.map((name) => fieldsByName.get(name))
|
|
58
|
+
.filter((f) => !!f)
|
|
59
|
+
.map(renderField) }, section.name))), unsectionedFields.length > 0 && (_jsx("div", { className: "grid grid-cols-2 gap-x-10 gap-y-5", children: unsectionedFields.map(renderField) }))] })) : (_jsx("div", { className: "grid grid-cols-2 gap-x-10 gap-y-5", children: schema.fields.map(renderField) }))] }));
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=WorkflowForm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkflowForm.js","sourceRoot":"","sources":["../../../src/components/WorkflowForm/WorkflowForm.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { z, type ZodTypeAny } from 'zod';
|
|
2
|
+
import type { WorkflowFormField } from '../../types';
|
|
3
|
+
export declare function buildZodSchema(fields: WorkflowFormField[], activeAction?: string): z.ZodObject<Record<string, ZodTypeAny>>;
|
|
4
|
+
//# sourceMappingURL=buildZodSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildZodSchema.d.ts","sourceRoot":"","sources":["../../../src/components/WorkflowForm/buildZodSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,KAAK,UAAU,EAAE,MAAM,KAAK,CAAC;AACzC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAwErD,wBAAgB,cAAc,CAC5B,MAAM,EAAE,iBAAiB,EAAE,EAC3B,YAAY,CAAC,EAAE,MAAM,GACpB,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAOzC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
function isFieldRequired(field, activeAction) {
|
|
3
|
+
if (field.requiredForActions && field.requiredForActions.length > 0) {
|
|
4
|
+
return !!activeAction && field.requiredForActions.includes(activeAction);
|
|
5
|
+
}
|
|
6
|
+
return !!field.required;
|
|
7
|
+
}
|
|
8
|
+
function buildStringField(field, required) {
|
|
9
|
+
let schema = z.string();
|
|
10
|
+
if (required)
|
|
11
|
+
schema = schema.min(1, `${field.label} is required`);
|
|
12
|
+
if (field.validation?.minLength != null) {
|
|
13
|
+
schema = schema.min(field.validation.minLength, `Minimum ${field.validation.minLength} characters`);
|
|
14
|
+
}
|
|
15
|
+
if (field.validation?.maxLength != null) {
|
|
16
|
+
schema = schema.max(field.validation.maxLength, `Maximum ${field.validation.maxLength} characters`);
|
|
17
|
+
}
|
|
18
|
+
if (field.validation?.pattern) {
|
|
19
|
+
schema = schema.regex(new RegExp(field.validation.pattern), 'Invalid format');
|
|
20
|
+
}
|
|
21
|
+
return required ? schema : schema.or(z.literal(''));
|
|
22
|
+
}
|
|
23
|
+
function buildNumberField(field, required) {
|
|
24
|
+
if (!required) {
|
|
25
|
+
return z.union([
|
|
26
|
+
z.number()
|
|
27
|
+
.pipe(z.number()
|
|
28
|
+
.min(field.validation?.min ?? -Infinity)
|
|
29
|
+
.max(field.validation?.max ?? Infinity)),
|
|
30
|
+
z.nan(),
|
|
31
|
+
z.literal(''),
|
|
32
|
+
]).transform(v => (v === '' || (typeof v === 'number' && isNaN(v)) ? undefined : v));
|
|
33
|
+
}
|
|
34
|
+
let schema = z.number({ invalid_type_error: `${field.label} must be a number` });
|
|
35
|
+
if (field.validation?.min != null)
|
|
36
|
+
schema = schema.min(field.validation.min, `Minimum value is ${field.validation.min}`);
|
|
37
|
+
if (field.validation?.max != null)
|
|
38
|
+
schema = schema.max(field.validation.max, `Maximum value is ${field.validation.max}`);
|
|
39
|
+
return schema;
|
|
40
|
+
}
|
|
41
|
+
function buildFieldSchema(field, activeAction) {
|
|
42
|
+
const required = isFieldRequired(field, activeAction);
|
|
43
|
+
switch (field.type) {
|
|
44
|
+
case 'number':
|
|
45
|
+
return buildNumberField(field, required);
|
|
46
|
+
case 'checkbox':
|
|
47
|
+
return z.boolean().default(false);
|
|
48
|
+
case 'select':
|
|
49
|
+
return required
|
|
50
|
+
? z.string().min(1, `${field.label} is required`)
|
|
51
|
+
: z.string();
|
|
52
|
+
case 'multiselect':
|
|
53
|
+
return required
|
|
54
|
+
? z.array(z.string()).min(1, `${field.label} is required`)
|
|
55
|
+
: z.array(z.string()).default([]);
|
|
56
|
+
case 'date':
|
|
57
|
+
return required
|
|
58
|
+
? z.string().min(1, `${field.label} is required`)
|
|
59
|
+
: z.string();
|
|
60
|
+
case 'file':
|
|
61
|
+
return required
|
|
62
|
+
? z.array(z.object({ id: z.string(), name: z.string(), url: z.string() })).min(1, `${field.label} is required`)
|
|
63
|
+
: z.array(z.object({ id: z.string(), name: z.string(), url: z.string() })).default([]);
|
|
64
|
+
case 'readonly':
|
|
65
|
+
return z.unknown().optional();
|
|
66
|
+
default:
|
|
67
|
+
return buildStringField(field, required);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
export function buildZodSchema(fields, activeAction) {
|
|
71
|
+
const shape = {};
|
|
72
|
+
for (const field of fields) {
|
|
73
|
+
if (field.type === 'readonly')
|
|
74
|
+
continue;
|
|
75
|
+
shape[field.name] = buildFieldSchema(field, activeAction);
|
|
76
|
+
}
|
|
77
|
+
return z.object(shape);
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=buildZodSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildZodSchema.js","sourceRoot":"","sources":["../../../src/components/WorkflowForm/buildZodSchema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CheckboxField.d.ts","sourceRoot":"","sources":["../../../../src/components/WorkflowForm/fields/CheckboxField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,UAAU,2CA4BpF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function CheckboxField({ field, error, readOnly, value, setValue }) {
|
|
3
|
+
const checked = !!value;
|
|
4
|
+
const errorId = `${field.name}-error`;
|
|
5
|
+
return (_jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-2.5", children: [_jsx("input", { id: field.name, type: "checkbox", checked: checked, disabled: readOnly, onChange: (e) => setValue(field.name, e.target.checked), "aria-invalid": !!error || undefined, "aria-describedby": error ? errorId : undefined, className: "h-4 w-4 shrink-0 rounded border-border text-primary accent-primary focus:ring-2 focus:ring-primary disabled:opacity-60" }), _jsx("label", { htmlFor: field.name, className: "text-sm font-semibold text-foreground", children: field.label })] }), error && (_jsx("p", { id: errorId, className: "mt-1 text-xs text-destructive", role: "alert", children: error }))] }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=CheckboxField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CheckboxField.js","sourceRoot":"","sources":["../../../../src/components/WorkflowForm/fields/CheckboxField.tsx"],"names":[],"mappings":";AAEA,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAc;IACnF,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC;IACxB,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,QAAQ,CAAC;IAEtC,OAAO,CACL,0BACE,eAAK,SAAS,EAAC,2BAA2B,aACxC,gBACE,EAAE,EAAE,KAAK,CAAC,IAAI,EACd,IAAI,EAAC,UAAU,EACf,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,kBACzC,CAAC,CAAC,KAAK,IAAI,SAAS,sBAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAC7C,SAAS,EAAC,wHAAwH,GAClI,EACF,gBAAO,OAAO,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAC,uCAAuC,YAC1E,KAAK,CAAC,KAAK,GACN,IACJ,EACL,KAAK,IAAI,CACR,YAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,+BAA+B,EAAC,IAAI,EAAC,OAAO,YACnE,KAAK,GACJ,CACL,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateField.d.ts","sourceRoot":"","sources":["../../../../src/components/WorkflowForm/fields/DateField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,UAAU,2CA6BzE"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function DateField({ field, register, error, readOnly }) {
|
|
3
|
+
const props = register(field.name);
|
|
4
|
+
const errorId = `${field.name}-error`;
|
|
5
|
+
return (_jsxs("div", { children: [_jsx("label", { htmlFor: field.name, className: "mb-1 block text-[11px] font-semibold uppercase tracking-wider text-muted-foreground", children: field.label }), _jsx("input", { id: field.name, type: "date", ...props, disabled: readOnly, "aria-required": !readOnly && field.required ? 'true' : undefined, "aria-invalid": !!error || undefined, "aria-describedby": error ? errorId : undefined, className: `w-full rounded-xl border bg-muted/30 px-4 py-3 text-sm text-foreground transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent disabled:opacity-60 ${error ? 'border-destructive' : 'border-border'}` }), error && (_jsx("p", { id: errorId, className: "mt-1 text-xs text-destructive", role: "alert", children: error }))] }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=DateField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateField.js","sourceRoot":"","sources":["../../../../src/components/WorkflowForm/fields/DateField.tsx"],"names":[],"mappings":";AAEA,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAc;IACxE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,QAAQ,CAAC;IAEtC,OAAO,CACL,0BACE,gBACE,OAAO,EAAE,KAAK,CAAC,IAAI,EACnB,SAAS,EAAC,qFAAqF,YAE9F,KAAK,CAAC,KAAK,GACN,EACR,gBACE,EAAE,EAAE,KAAK,CAAC,IAAI,EACd,IAAI,EAAC,MAAM,KACP,KAAK,EACT,QAAQ,EAAE,QAAQ,mBACH,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,kBACjD,CAAC,CAAC,KAAK,IAAI,SAAS,sBAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAC7C,SAAS,EAAE,4LAA4L,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,eAAe,EAAE,GACvP,EACD,KAAK,IAAI,CACR,YAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,+BAA+B,EAAC,IAAI,EAAC,OAAO,YACnE,KAAK,GACJ,CACL,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileUploadField.d.ts","sourceRoot":"","sources":["../../../../src/components/WorkflowForm/fields/FileUploadField.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAiB,MAAM,UAAU,CAAC;AAQ1D,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,UAAU,2CA6LtF"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useRef, useCallback } from 'react';
|
|
3
|
+
import { useWorkflowContext } from '../../../provider/WorkflowProvider';
|
|
4
|
+
export function FileUploadField({ field, error, readOnly, value, setValue }) {
|
|
5
|
+
const { fileUploadUrl, fileDownloadUrl } = useWorkflowContext();
|
|
6
|
+
const files = Array.isArray(value) ? value : [];
|
|
7
|
+
const [uploadState, setUploadState] = useState({
|
|
8
|
+
uploading: false,
|
|
9
|
+
progress: 0,
|
|
10
|
+
});
|
|
11
|
+
const inputRef = useRef(null);
|
|
12
|
+
const errorId = `${field.name}-error`;
|
|
13
|
+
const displayError = uploadState.error ?? error;
|
|
14
|
+
const handleUpload = useCallback(async (fileList) => {
|
|
15
|
+
if (!fileUploadUrl)
|
|
16
|
+
return;
|
|
17
|
+
setUploadState({ uploading: true, progress: 0 });
|
|
18
|
+
const uploaded = [...files];
|
|
19
|
+
for (let i = 0; i < fileList.length; i++) {
|
|
20
|
+
const file = fileList[i];
|
|
21
|
+
if (!file)
|
|
22
|
+
continue;
|
|
23
|
+
const formData = new FormData();
|
|
24
|
+
formData.append('file', file);
|
|
25
|
+
try {
|
|
26
|
+
const xhr = new XMLHttpRequest();
|
|
27
|
+
const result = await new Promise((resolve, reject) => {
|
|
28
|
+
xhr.upload.addEventListener('progress', (e) => {
|
|
29
|
+
if (e.lengthComputable) {
|
|
30
|
+
setUploadState((s) => ({
|
|
31
|
+
...s,
|
|
32
|
+
progress: Math.round((e.loaded / e.total) * 100),
|
|
33
|
+
}));
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
xhr.addEventListener('load', () => {
|
|
37
|
+
if (xhr.status >= 200 && xhr.status < 300) {
|
|
38
|
+
resolve(JSON.parse(xhr.responseText));
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
reject(new Error('Upload failed'));
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
xhr.addEventListener('error', () => reject(new Error('Upload failed')));
|
|
45
|
+
xhr.open('POST', fileUploadUrl);
|
|
46
|
+
xhr.send(formData);
|
|
47
|
+
});
|
|
48
|
+
uploaded.push(result);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
setUploadState({ uploading: false, progress: 0, error: `Failed to upload ${file.name}` });
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
setValue(field.name, uploaded);
|
|
56
|
+
setUploadState({ uploading: false, progress: 0 });
|
|
57
|
+
}, [fileUploadUrl, files, field.name, setValue]);
|
|
58
|
+
const removeFile = useCallback((fileId) => {
|
|
59
|
+
setValue(field.name, files.filter((f) => f.id !== fileId));
|
|
60
|
+
}, [files, field.name, setValue]);
|
|
61
|
+
if (readOnly) {
|
|
62
|
+
return (_jsxs("div", { children: [_jsx("span", { className: "mb-1 block text-[11px] font-semibold uppercase tracking-wider text-muted-foreground", children: field.label }), files.length === 0 ? (_jsx("p", { className: "text-sm text-muted-foreground", children: "No files" })) : (_jsx("ul", { className: "space-y-1", children: files.map((f) => (_jsx("li", { children: _jsx("a", { href: fileDownloadUrl ? `${fileDownloadUrl}/${f.id}` : f.url, target: "_blank", rel: "noopener noreferrer", className: "text-sm font-medium text-primary hover:underline", children: f.name }) }, f.id))) }))] }));
|
|
63
|
+
}
|
|
64
|
+
return (_jsxs("div", { className: "col-span-2", children: [_jsx("label", { htmlFor: field.name, className: "mb-1.5 block text-[11px] font-semibold uppercase tracking-wider text-muted-foreground", children: field.label }), _jsxs("div", { className: `flex cursor-pointer flex-col items-center justify-center rounded-xl border-2 border-dashed bg-muted/20 px-6 py-8 text-center transition-colors hover:bg-muted/40 ${displayError ? 'border-destructive' : 'border-border'}`, role: "button", tabIndex: 0, "aria-label": `Upload file for ${field.label}`, "aria-required": field.required ? 'true' : undefined, "aria-invalid": !!displayError || undefined, "aria-describedby": displayError ? errorId : undefined, onClick: () => inputRef.current?.click(), onKeyDown: (e) => {
|
|
65
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
66
|
+
e.preventDefault();
|
|
67
|
+
inputRef.current?.click();
|
|
68
|
+
}
|
|
69
|
+
}, onDragOver: (e) => e.preventDefault(), onDrop: (e) => {
|
|
70
|
+
e.preventDefault();
|
|
71
|
+
if (e.dataTransfer.files.length > 0) {
|
|
72
|
+
handleUpload(e.dataTransfer.files);
|
|
73
|
+
}
|
|
74
|
+
}, children: [_jsx("input", { ref: inputRef, id: field.name, type: "file", multiple: true, className: "sr-only", onChange: (e) => {
|
|
75
|
+
if (e.target.files && e.target.files.length > 0) {
|
|
76
|
+
handleUpload(e.target.files);
|
|
77
|
+
}
|
|
78
|
+
} }), uploadState.uploading ? (_jsxs("div", { className: "w-full max-w-xs", children: [_jsxs("div", { role: "status", "aria-label": "Uploading", className: "mb-2 text-sm text-muted-foreground", children: ["Uploading... ", uploadState.progress, "%"] }), _jsx("div", { className: "h-1.5 w-full overflow-hidden rounded-full bg-muted", children: _jsx("div", { className: "h-full rounded-full bg-primary transition-all", style: { width: `${uploadState.progress}%` } }) })] })) : (_jsx("p", { className: "text-sm text-muted-foreground", children: "Drop files here or click to upload" }))] }), files.length > 0 && (_jsx("ul", { className: "mt-2 space-y-1", children: files.map((f) => (_jsxs("li", { className: "flex items-center justify-between rounded-lg bg-muted/30 px-3 py-1.5", children: [_jsx("span", { className: "text-sm text-foreground", children: f.name }), _jsx("button", { type: "button", "aria-label": `Remove ${f.name}`, className: "text-muted-foreground hover:text-destructive", onClick: () => removeFile(f.id), children: "\u00D7" })] }, f.id))) })), displayError && (_jsx("p", { id: errorId, className: "mt-1 text-xs text-destructive", role: "alert", children: displayError }))] }));
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=FileUploadField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FileUploadField.js","sourceRoot":"","sources":["../../../../src/components/WorkflowForm/fields/FileUploadField.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiSelectField.d.ts","sourceRoot":"","sources":["../../../../src/components/WorkflowForm/fields/MultiSelectField.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,gBAAgB,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,UAAU,2CAgHvF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useState, useRef, useCallback } from 'react';
|
|
3
|
+
export function MultiSelectField({ field, error, readOnly, value, setValue }) {
|
|
4
|
+
const selected = Array.isArray(value) ? value : [];
|
|
5
|
+
const [open, setOpen] = useState(false);
|
|
6
|
+
const containerRef = useRef(null);
|
|
7
|
+
const errorId = `${field.name}-error`;
|
|
8
|
+
const toggle = useCallback((optValue) => {
|
|
9
|
+
const next = selected.includes(optValue)
|
|
10
|
+
? selected.filter((v) => v !== optValue)
|
|
11
|
+
: [...selected, optValue];
|
|
12
|
+
setValue(field.name, next);
|
|
13
|
+
}, [selected, field.name, setValue]);
|
|
14
|
+
const remove = useCallback((optValue) => {
|
|
15
|
+
setValue(field.name, selected.filter((v) => v !== optValue));
|
|
16
|
+
}, [selected, field.name, setValue]);
|
|
17
|
+
const labelFor = (val) => field.options?.find((o) => o.value === val)?.label ?? val;
|
|
18
|
+
return (_jsxs("div", { ref: containerRef, children: [_jsx("label", { id: `${field.name}-label`, className: "mb-1 block text-[11px] font-semibold uppercase tracking-wider text-muted-foreground", children: field.label }), _jsxs("div", { role: "listbox", "aria-labelledby": `${field.name}-label`, "aria-multiselectable": "true", "aria-required": !readOnly && field.required ? 'true' : undefined, "aria-invalid": !!error || undefined, "aria-describedby": error ? errorId : undefined, tabIndex: readOnly ? -1 : 0, className: `flex min-h-[44px] cursor-pointer flex-wrap items-center gap-1.5 rounded-xl border bg-muted/30 px-4 py-2.5 text-sm transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent ${error ? 'border-destructive' : 'border-border'}`, onClick: () => !readOnly && setOpen((o) => !o), onKeyDown: (e) => {
|
|
19
|
+
if (!readOnly && (e.key === 'Enter' || e.key === ' ')) {
|
|
20
|
+
e.preventDefault();
|
|
21
|
+
setOpen((o) => !o);
|
|
22
|
+
}
|
|
23
|
+
}, children: [selected.length === 0 && _jsx("span", { className: "text-muted-foreground/50", children: "Select..." }), selected.map((val) => (_jsxs("span", { className: "inline-flex items-center gap-1 rounded-md bg-primary/10 px-2 py-0.5 text-xs font-medium text-primary", role: "option", "aria-selected": "true", children: [labelFor(val), !readOnly && (_jsx("button", { type: "button", "aria-label": `Remove ${labelFor(val)}`, className: "text-primary/60 hover:text-primary", onClick: (e) => {
|
|
24
|
+
e.stopPropagation();
|
|
25
|
+
remove(val);
|
|
26
|
+
}, children: "\u00D7" }))] }, val)))] }), open && !readOnly && (_jsx("ul", { className: "mt-1 max-h-48 overflow-y-auto rounded-xl border border-border bg-card shadow-lg", role: "listbox", children: field.options?.map((opt) => (_jsx("li", { role: "option", "aria-selected": selected.includes(opt.value), tabIndex: 0, className: `cursor-pointer px-4 py-2.5 text-sm transition-colors hover:bg-accent ${selected.includes(opt.value) ? 'bg-primary/5 font-semibold text-primary' : 'text-foreground'}`, onClick: () => toggle(opt.value), onKeyDown: (e) => {
|
|
27
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
28
|
+
e.preventDefault();
|
|
29
|
+
toggle(opt.value);
|
|
30
|
+
}
|
|
31
|
+
}, children: opt.label }, opt.value))) })), error && (_jsx("p", { id: errorId, className: "mt-1 text-xs text-destructive", role: "alert", children: error }))] }));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=MultiSelectField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MultiSelectField.js","sourceRoot":"","sources":["../../../../src/components/WorkflowForm/fields/MultiSelectField.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberField.d.ts","sourceRoot":"","sources":["../../../../src/components/WorkflowForm/fields/NumberField.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,UAAU,2CA4CrF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function NumberField({ field, register, error, readOnly, setValue }) {
|
|
3
|
+
const props = register(field.name);
|
|
4
|
+
const errorId = `${field.name}-error`;
|
|
5
|
+
const handleChange = (e) => {
|
|
6
|
+
const raw = e.target.value;
|
|
7
|
+
if (raw === '') {
|
|
8
|
+
setValue(field.name, '');
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
setValue(field.name, Number(raw));
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
return (_jsxs("div", { children: [_jsx("label", { htmlFor: field.name, className: "mb-1 block text-[11px] font-semibold uppercase tracking-wider text-muted-foreground", children: field.label }), _jsx("input", { id: field.name, type: "number", name: props.name, value: String(props.value ?? ''), onChange: handleChange, onBlur: props.onBlur, step: field.validation?.step, min: field.validation?.min, max: field.validation?.max, disabled: readOnly, "aria-required": !readOnly && field.required ? 'true' : undefined, "aria-invalid": !!error || undefined, "aria-describedby": error ? errorId : undefined, className: `w-full rounded-xl border bg-muted/30 px-4 py-3 text-sm font-bold text-foreground placeholder-muted-foreground/50 transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent disabled:opacity-60 ${error ? 'border-destructive' : 'border-border'}` }), error && (_jsx("p", { id: errorId, className: "mt-1 text-xs text-destructive", role: "alert", children: error }))] }));
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=NumberField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberField.js","sourceRoot":"","sources":["../../../../src/components/WorkflowForm/fields/NumberField.tsx"],"names":[],"mappings":";AAGA,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAc;IACpF,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,QAAQ,CAAC;IAEtC,MAAM,YAAY,GAAG,CAAC,CAAgC,EAAE,EAAE;QACxD,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,GAAG,KAAK,EAAE,EAAE,CAAC;YACf,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACpC,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,0BACE,gBACE,OAAO,EAAE,KAAK,CAAC,IAAI,EACnB,SAAS,EAAC,qFAAqF,YAE9F,KAAK,CAAC,KAAK,GACN,EACR,gBACE,EAAE,EAAE,KAAK,CAAC,IAAI,EACd,IAAI,EAAC,QAAQ,EACb,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC,EAChC,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,IAAI,EAAE,KAAK,CAAC,UAAU,EAAE,IAAI,EAC5B,GAAG,EAAE,KAAK,CAAC,UAAU,EAAE,GAAG,EAC1B,GAAG,EAAE,KAAK,CAAC,UAAU,EAAE,GAAG,EAC1B,QAAQ,EAAE,QAAQ,mBACH,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,kBACjD,CAAC,CAAC,KAAK,IAAI,SAAS,sBAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAC7C,SAAS,EAAE,sOAAsO,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,eAAe,EAAE,GACjS,EACD,KAAK,IAAI,CACR,YAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,+BAA+B,EAAC,IAAI,EAAC,OAAO,YACnE,KAAK,GACJ,CACL,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReadonlyField.d.ts","sourceRoot":"","sources":["../../../../src/components/WorkflowForm/fields/ReadonlyField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,UAAU,2CAezD"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function ReadonlyField({ field, value }) {
|
|
3
|
+
const displayValue = value != null ? String(value) : '';
|
|
4
|
+
return (_jsxs("div", { children: [_jsx("span", { className: "mb-1 block text-[11px] font-semibold uppercase tracking-wider text-muted-foreground", children: field.label }), displayValue ? (_jsx("span", { className: "block text-sm font-semibold text-foreground", children: displayValue })) : (_jsx("span", { className: "block text-sm text-muted-foreground", children: "\u2014" }))] }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=ReadonlyField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ReadonlyField.js","sourceRoot":"","sources":["../../../../src/components/WorkflowForm/fields/ReadonlyField.tsx"],"names":[],"mappings":";AAEA,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAc;IACxD,MAAM,YAAY,GAAG,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAExD,OAAO,CACL,0BACE,eAAM,SAAS,EAAC,qFAAqF,YAClG,KAAK,CAAC,KAAK,GACP,EACN,YAAY,CAAC,CAAC,CAAC,CACd,eAAM,SAAS,EAAC,6CAA6C,YAAE,YAAY,GAAQ,CACpF,CAAC,CAAC,CAAC,CACF,eAAM,SAAS,EAAC,qCAAqC,uBAAS,CAC/D,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectField.d.ts","sourceRoot":"","sources":["../../../../src/components/WorkflowForm/fields/SelectField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,UAAU,2CAmC3E"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function SelectField({ field, register, error, readOnly }) {
|
|
3
|
+
const props = register(field.name);
|
|
4
|
+
const errorId = `${field.name}-error`;
|
|
5
|
+
return (_jsxs("div", { children: [_jsx("label", { htmlFor: field.name, className: "mb-1 block text-[11px] font-semibold uppercase tracking-wider text-muted-foreground", children: field.label }), _jsxs("select", { id: field.name, ...props, disabled: readOnly, "aria-required": !readOnly && field.required ? 'true' : undefined, "aria-invalid": !!error || undefined, "aria-describedby": error ? errorId : undefined, className: `w-full appearance-none rounded-xl border bg-muted/30 px-4 py-3 text-sm text-foreground transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent disabled:opacity-60 ${error ? 'border-destructive' : 'border-border'}`, children: [_jsx("option", { value: "", children: "Select..." }), field.options?.map((opt) => (_jsx("option", { value: opt.value, children: opt.label }, opt.value)))] }), error && (_jsx("p", { id: errorId, className: "mt-1 text-xs text-destructive", role: "alert", children: error }))] }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=SelectField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectField.js","sourceRoot":"","sources":["../../../../src/components/WorkflowForm/fields/SelectField.tsx"],"names":[],"mappings":";AAEA,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAc;IAC1E,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,QAAQ,CAAC;IAEtC,OAAO,CACL,0BACE,gBACE,OAAO,EAAE,KAAK,CAAC,IAAI,EACnB,SAAS,EAAC,qFAAqF,YAE9F,KAAK,CAAC,KAAK,GACN,EACR,kBACE,EAAE,EAAE,KAAK,CAAC,IAAI,KACV,KAAK,EACT,QAAQ,EAAE,QAAQ,mBACH,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,kBACjD,CAAC,CAAC,KAAK,IAAI,SAAS,sBAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAC7C,SAAS,EAAE,4MAA4M,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,eAAe,EAAE,aAEvQ,iBAAQ,KAAK,EAAC,EAAE,0BAAmB,EAClC,KAAK,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAC3B,iBAAwB,KAAK,EAAE,GAAG,CAAC,KAAK,YACrC,GAAG,CAAC,KAAK,IADC,GAAG,CAAC,KAAK,CAEb,CACV,CAAC,IACK,EACR,KAAK,IAAI,CACR,YAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,+BAA+B,EAAC,IAAI,EAAC,OAAO,YACnE,KAAK,GACJ,CACL,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../../../src/components/WorkflowForm/fields/TextField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,UAAU,2CA6BzE"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function TextField({ field, register, error, readOnly }) {
|
|
3
|
+
const props = register(field.name);
|
|
4
|
+
const errorId = `${field.name}-error`;
|
|
5
|
+
return (_jsxs("div", { children: [_jsx("label", { htmlFor: field.name, className: "mb-1 block text-[11px] font-semibold uppercase tracking-wider text-muted-foreground", children: field.label }), _jsx("input", { id: field.name, type: "text", ...props, disabled: readOnly, "aria-required": !readOnly && field.required ? 'true' : undefined, "aria-invalid": !!error || undefined, "aria-describedby": error ? errorId : undefined, className: `w-full rounded-xl border bg-muted/30 px-4 py-3 text-sm text-foreground placeholder-muted-foreground/50 transition-colors focus:outline-none focus:ring-2 focus:ring-primary focus:border-transparent disabled:opacity-60 ${error ? 'border-destructive' : 'border-border'}` }), error && (_jsx("p", { id: errorId, className: "mt-1 text-xs text-destructive", role: "alert", children: error }))] }));
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=TextField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextField.js","sourceRoot":"","sources":["../../../../src/components/WorkflowForm/fields/TextField.tsx"],"names":[],"mappings":";AAEA,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAc;IACxE,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,IAAI,QAAQ,CAAC;IAEtC,OAAO,CACL,0BACE,gBACE,OAAO,EAAE,KAAK,CAAC,IAAI,EACnB,SAAS,EAAC,qFAAqF,YAE9F,KAAK,CAAC,KAAK,GACN,EACR,gBACE,EAAE,EAAE,KAAK,CAAC,IAAI,EACd,IAAI,EAAC,MAAM,KACP,KAAK,EACT,QAAQ,EAAE,QAAQ,mBACH,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,kBACjD,CAAC,CAAC,KAAK,IAAI,SAAS,sBAChB,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAC7C,SAAS,EAAE,4NAA4N,KAAK,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,eAAe,EAAE,GACvR,EACD,KAAK,IAAI,CACR,YAAG,EAAE,EAAE,OAAO,EAAE,SAAS,EAAC,+BAA+B,EAAC,IAAI,EAAC,OAAO,YACnE,KAAK,GACJ,CACL,IACG,CACP,CAAC;AACJ,CAAC"}
|