@dappworks/kit 0.5.33 → 0.5.35
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/{PromiseState-DVdsif1j.d.ts → PromiseState-e64b3707.d.ts} +1 -1
- package/dist/{StorageState-qapaHguM.d.ts → StorageState-cfd942cb.d.ts} +1 -1
- package/dist/aiem.d.mts +1 -1
- package/dist/aiem.mjs +5 -5
- package/dist/{chunk-2BZKMJZX.mjs → chunk-2N4HH4ZF.mjs} +1 -1
- package/dist/chunk-2N4HH4ZF.mjs.map +1 -0
- package/dist/{chunk-R66SHRQE.mjs → chunk-GKAU4P5I.mjs} +2 -2
- package/dist/chunk-GKAU4P5I.mjs.map +1 -0
- package/dist/{chunk-SA53R6TL.mjs → chunk-IDKGZ5T4.mjs} +7 -7
- package/dist/chunk-IDKGZ5T4.mjs.map +1 -0
- package/dist/{chunk-7EL2RQI7.mjs → chunk-IMOLRP7I.mjs} +1 -1
- package/dist/chunk-IMOLRP7I.mjs.map +1 -0
- package/dist/{chunk-2PD23V7H.mjs → chunk-K7LFG5BA.mjs} +1 -1
- package/dist/{chunk-2PD23V7H.mjs.map → chunk-K7LFG5BA.mjs.map} +1 -1
- package/dist/{chunk-BAXWSAXB.mjs → chunk-MPOMTIDB.mjs} +21 -22
- package/dist/chunk-MPOMTIDB.mjs.map +1 -0
- package/dist/{chunk-FWK5VZHE.mjs → chunk-OBMZXW6O.mjs} +4 -4
- package/dist/chunk-OBMZXW6O.mjs.map +1 -0
- package/dist/{chunk-Z3LJE5QF.mjs → chunk-ONVPCAMQ.mjs} +1 -1
- package/dist/chunk-ONVPCAMQ.mjs.map +1 -0
- package/dist/{chunk-WWCB4WOQ.mjs → chunk-PGS2TG3C.mjs} +3 -3
- package/dist/chunk-PGS2TG3C.mjs.map +1 -0
- package/dist/{chunk-BQSQ4L7R.mjs → chunk-PHQTFYZL.mjs} +2 -2
- package/dist/chunk-PHQTFYZL.mjs.map +1 -0
- package/dist/{chunk-7WJMHFRA.mjs → chunk-R4N52NI2.mjs} +2 -2
- package/dist/chunk-R4N52NI2.mjs.map +1 -0
- package/dist/{chunk-4KRVA5CB.mjs → chunk-RU6ZML4R.mjs} +33 -29
- package/dist/chunk-RU6ZML4R.mjs.map +1 -0
- package/dist/{chunk-I2RSE63R.mjs → chunk-SL5OV6OR.mjs} +3 -3
- package/dist/chunk-SL5OV6OR.mjs.map +1 -0
- package/dist/{chunk-2L5EKCYR.mjs → chunk-VNT5YQS6.mjs} +6 -6
- package/dist/chunk-VNT5YQS6.mjs.map +1 -0
- package/dist/{chunk-VIK2VI34.mjs → chunk-YITAUACR.mjs} +1 -1
- package/dist/dev.d.mts +1 -1
- package/dist/dev.mjs +4 -4
- package/dist/dev.mjs.map +1 -1
- package/dist/experimental.d.mts +5 -5
- package/dist/experimental.mjs +5 -5
- package/dist/experimental.mjs.map +1 -1
- package/dist/form.d.mts +3 -3
- package/dist/form.mjs +6 -6
- package/dist/form.mjs.map +1 -1
- package/dist/{index-CUKoRIdy.d.ts → index-38be834f.d.ts} +1 -1
- package/dist/index.d.mts +5 -5
- package/dist/index.mjs +12 -12
- package/dist/inspector.d.mts +1 -1
- package/dist/inspector.mjs +1 -1
- package/dist/inspector.mjs.map +1 -1
- package/dist/jsoncomponent.d.mts +1 -1
- package/dist/jsoncomponent.mjs +1 -1
- package/dist/jsoncomponent.mjs.map +1 -1
- package/dist/jsontable.d.mts +2 -2
- package/dist/jsontable.mjs +6 -6
- package/dist/metrics.d.mts +1 -1
- package/dist/metrics.mjs +6 -6
- package/dist/metrics.mjs.map +1 -1
- package/dist/plugins.d.mts +3 -3
- package/dist/plugins.mjs +9 -9
- package/dist/plugins.mjs.map +1 -1
- package/dist/{root-BPMUmS6H.d.ts → root-218afa4f.d.ts} +1 -1
- package/dist/ui.mjs +3 -3
- package/dist/ui.mjs.map +1 -1
- package/dist/utils.mjs +4 -4
- package/dist/wallet.d.mts +3 -3
- package/dist/wallet.mjs +21 -14
- package/dist/wallet.mjs.map +1 -1
- package/package.json +173 -173
- package/dist/chunk-2BZKMJZX.mjs.map +0 -1
- package/dist/chunk-2L5EKCYR.mjs.map +0 -1
- package/dist/chunk-4KRVA5CB.mjs.map +0 -1
- package/dist/chunk-7EL2RQI7.mjs.map +0 -1
- package/dist/chunk-7WJMHFRA.mjs.map +0 -1
- package/dist/chunk-BAXWSAXB.mjs.map +0 -1
- package/dist/chunk-BQSQ4L7R.mjs.map +0 -1
- package/dist/chunk-FWK5VZHE.mjs.map +0 -1
- package/dist/chunk-I2RSE63R.mjs.map +0 -1
- package/dist/chunk-R66SHRQE.mjs.map +0 -1
- package/dist/chunk-SA53R6TL.mjs.map +0 -1
- package/dist/chunk-WWCB4WOQ.mjs.map +0 -1
- package/dist/chunk-Z3LJE5QF.mjs.map +0 -1
- /package/dist/{PaginationState-Bmrrw0ky.d.ts → PaginationState-c19e621a.d.ts} +0 -0
- /package/dist/{chunk-VIK2VI34.mjs.map → chunk-YITAUACR.mjs.map} +0 -0
package/dist/form.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../components/JSONForm/index.tsx","../components/JSONForm/Layouts/gridLayout.tsx","../components/JSONForm/Layouts/format.tsx","../components/JSONFormWidgets/CheckboxWidget/index.tsx","../components/JSONFormWidgets/InputWidget/index.tsx","../components/JSONFormWidgets/SelectWidget/index.tsx","../components/JSONFormWidgets/MultipleSelectWidget/index.tsx","../components/JSONFormWidgets/EditorWidget/index.tsx","../store/standard/JSONSchemaState.ts","../components/JSONSchemaForm/index.tsx","../components/ui/grid/col.tsx","../components/ui/grid/styles.tsx","../components/ui/grid/grid.tsx","../components/JSONForm/Layouts/listLayout.tsx","../components/JSONForm/Layouts/simpleLayout.tsx","../components/JSONForm/Layouts/tabLayout.tsx","../components/JSONFormWidgets/TextareaWidget/index.tsx","../components/JSONFormWidgets/DatePickerWidget/index.tsx","../module/ComplexFormModal/Provider.tsx","../module/ComplexFormModal/index.tsx","../module/FormModal/index.tsx","../module/FormModal/Provider.tsx"],"names":["React","useState","Button","errMsg","useMemo","value","useCallback","Select","SelectItem","useRef","_a","formData","toJS","SubmitButton","numColSpan","_b","_c","_d","useEffect","ChevronDown","ChevronUp","observer","EventEmitter","makeAutoObservable","Modal","ModalBody","ModalContent","ModalHeader","Draggable","Provider_default","getFormState"],"mappings":"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","sourcesContent":["import React, { Dispatch, SetStateAction } from \"react\";\r\nimport { ButtonProps, TabsProps } from \"@nextui-org/react\";\r\nimport { UiSchema } from \"@rjsf/utils\";\r\nimport { JSONSchemaFormState } from \"../../store/standard/JSONSchemaState\";\r\nimport { GridLayout } from \"./Layouts/gridLayout\";\r\nimport { ListLayout } from \"./Layouts/listLayout\";\r\nimport { SimpleLayout } from \"./Layouts/simpleLayout\";\r\nimport { TabLayout } from \"./Layouts/tabLayout\";\r\nimport { ThemeType } from \"../../themes\";\r\n\r\nconst COMPONENTS = {\r\n GridLayout,\r\n TabLayout,\r\n ListLayout,\r\n SimpleLayout,\r\n};\r\n\r\nexport type FormDataType = {\r\n [key: string]: {\r\n [key: string]: string | number | boolean | Record<string, string | number | boolean>;\r\n };\r\n};\r\n\r\nexport type FormConfigType<T extends FormDataType> = {\r\n [F in keyof T]?: {\r\n [X in keyof T[F]]?: {\r\n title?: string;\r\n required?: boolean;\r\n requiredErrMsg?: string;\r\n validate?: (v: any) => string | void;\r\n selectOptions?: { label: string; value: string }[];\r\n isMultipleSelect?: boolean;\r\n } & UiSchema;\r\n };\r\n};\r\n\r\ntype SubmitButtonProps<T extends FormDataType> = ButtonProps & { onAfterSubmit?: (formKey: FormKey<T>, data: FormDataOfKey<T>, setLoading: Dispatch<SetStateAction<boolean>>) => void };\r\n\r\ntype CombFormsCustomRender<T extends FormDataType> = (formStates: { [F in keyof T]?: JSONSchemaFormState<FormDataOfKey<T>, UiSchema> }) => React.ReactNode;\r\ntype CombFormsCustomRenderMap<T extends FormDataType> = {\r\n Top?: CombFormsCustomRender<T>;\r\n SubmitButtonBefore?: CombFormsCustomRender<T>;\r\n SubmitButtonAfter?: CombFormsCustomRender<T>;\r\n}\r\n\r\ntype SubformCustomRender<T extends FormDataType> = (formKey: FormKey<T>, formState: JSONSchemaFormState<FormDataOfKey<T>, UiSchema>) => React.ReactNode;\r\ntype SubformCustomRenderMap<T extends FormDataType> = {\r\n Top?: SubformCustomRender<T>;\r\n SubmitButtonBefore?: SubformCustomRender<T>;\r\n SubmitButtonAfter?: SubformCustomRender<T>;\r\n}\r\n\r\ntype SubformLayoutBaseConfig<T extends FormDataType, F extends keyof T> = {\r\n title?: string;\r\n titleBoxCss?: string;\r\n fieldLayout?: Array<keyof NonNullable<T[F]>> | Array<Array<keyof NonNullable<T[F]>> | keyof NonNullable<T[F]>>;\r\n submitButtonProps?: SubmitButtonProps<T>;\r\n customRender?: SubformCustomRenderMap<T>;\r\n};\r\n\r\ninterface LayoutConfigMap<T extends FormDataType> {\r\n GridLayout: {\r\n $type: 'GridLayout';\r\n $gridColumn?: number;\r\n $combFormsCustomRender?: CombFormsCustomRenderMap<T>;\r\n } & {\r\n [F in keyof T]?: SubformLayoutBaseConfig<T, F> & {\r\n colSpan?: number;\r\n cardCss?: string;\r\n };\r\n };\r\n TabLayout: {\r\n $type: 'TabLayout';\r\n $tabsProps?: TabsProps;\r\n $combFormsCustomRender?: CombFormsCustomRenderMap<T>;\r\n } & {\r\n [F in keyof T]?: SubformLayoutBaseConfig<T, F>\r\n };\r\n ListLayout: {\r\n $type: 'ListLayout';\r\n $combFormsCustomRender?: CombFormsCustomRenderMap<T>;\r\n } & {\r\n [F in keyof T]?: SubformLayoutBaseConfig<T, F>\r\n };\r\n SimpleLayout: {\r\n $type: 'SimpleLayout';\r\n $combFormsCustomRender?: CombFormsCustomRenderMap<T>;\r\n } & {\r\n [F in keyof T]?: SubformLayoutBaseConfig<T, F>\r\n };\r\n}\r\n\r\nexport type LayoutType = keyof typeof COMPONENTS;\r\nexport type LayoutConfigType<T extends FormDataType, L extends LayoutType> = LayoutConfigMap<T>[L];\r\n\r\nexport type FormKey<T extends FormDataType> = keyof T;\r\nexport type FormDataOfKey<T extends FormDataType> = T[FormKey<T>];\r\n\r\nexport type JSONFormProps<T extends FormDataType> = {\r\n className?: string;\r\n theme?: ThemeType;\r\n formData: T;\r\n formConfig?: FormConfigType<T>;\r\n layoutConfig?: LayoutConfigType<T, LayoutType>;\r\n onBatchSubmit?: (data: T, setLoading: Dispatch<SetStateAction<boolean>>) => void;\r\n onSet?: (v: FormDataOfKey<T>, form: JSONSchemaFormState<FormDataOfKey<T>, UiSchema>) => FormDataOfKey<T>;\r\n onChange?: (data: Partial<T>) => void;\r\n onReady?: (formStates: { [F in keyof T]?: JSONSchemaFormState<FormDataOfKey<T>, UiSchema> }) => void;\r\n batchSubmitButtonProps?: ButtonProps & { onBatchSubmit?: (formData: T, setLoading: Dispatch<SetStateAction<boolean>>) => void };\r\n};\r\n\r\nexport const JSONForm = <T extends FormDataType>(props: JSONFormProps<T>) => {\r\n const type = props.layoutConfig?.$type || 'SimpleLayout';\r\n const Comp = COMPONENTS[type];\r\n return (\r\n <div className={props.className}>\r\n <Comp {...props} />\r\n </div>\r\n );\r\n};","import React, { useEffect } from \"react\";\r\nimport { Card } from \"@nextui-org/react\";\r\nimport { FormDataType, JSONFormProps, LayoutConfigType } from \"..\";\r\nimport { BatchSubmitButton, SubmitButton, getFormState } from \"./format\";\r\nimport { JSONSchemaForm } from \"../../../components/JSONSchemaForm\";\r\nimport { Grid, Col } from '../../../components/ui/grid';\r\nimport { cn } from '../../../lib/utils';\r\nimport { getStyle } from \"../../../themes\";\r\n\r\nexport const GridLayout = <T extends FormDataType>(props: JSONFormProps<T>) => {\r\n const { layoutConfig, onBatchSubmit, batchSubmitButtonProps, onReady, theme } = props;\r\n const { $type, $gridColumn, $combFormsCustomRender, ...formLayout } = layoutConfig as LayoutConfigType<T, 'GridLayout'>;\r\n const formStates = getFormState(props, formLayout, theme);\r\n const cardStyle = getStyle(theme || 'default', 'Card');\r\n\r\n useEffect(() => {\r\n if (formStates && onReady) {\r\n onReady(formStates);\r\n }\r\n }, [formStates]);\r\n\r\n return (\r\n <>\r\n {$combFormsCustomRender?.Top?.(formStates)}\r\n <Grid numItems={$gridColumn ?? 1} className=\"gap-2\">\r\n {Object.keys(formStates).map((key) => {\r\n const layout = formLayout[key];\r\n return (\r\n <Col numColSpan={layout?.colSpan ?? 1} key={key} id={`form-${key}`}>\r\n <Card className={cn(\"h-full m-0 p-4 shadow-sm border dark:border-[#3e3e3e]\", cardStyle.className, layout?.cardCss)}>\r\n <div className={cn('mb-2 font-bold text-center', layout?.titleBoxCss)}>{layout?.title || key}</div>\r\n {layout?.customRender?.Top?.(key, formStates[key])}\r\n <JSONSchemaForm formState={formStates[key]}>\r\n {layout?.customRender?.SubmitButtonBefore?.(key, formStates[key])}\r\n {layout?.submitButtonProps && <SubmitButton formKey={key} formState={formStates[key]} buttonProps={layout.submitButtonProps} />}\r\n {layout?.customRender?.SubmitButtonAfter?.(key, formStates[key])}\r\n </JSONSchemaForm>\r\n </Card>\r\n </Col>\r\n );\r\n })}\r\n </Grid>\r\n {$combFormsCustomRender?.SubmitButtonBefore?.(formStates)}\r\n {(onBatchSubmit || batchSubmitButtonProps?.onBatchSubmit) && (\r\n <div className=\"w-full flex\">\r\n <BatchSubmitButton formStates={formStates} onSubmit={onBatchSubmit} buttonProps={batchSubmitButtonProps} />\r\n </div>\r\n )}\r\n {$combFormsCustomRender?.SubmitButtonAfter?.(formStates)}\r\n </>\r\n );\r\n};","import React, { useState } from \"react\";\r\nimport { Button } from \"@nextui-org/react\";\r\nimport { UiSchema } from \"@rjsf/utils\";\r\nimport { FormDataOfKey, FormDataType, JSONFormProps } from \"..\";\r\nimport { CheckboxWidget } from \"../../../components/JSONFormWidgets/CheckboxWidget\";\r\nimport { InputWidget } from \"../../../components/JSONFormWidgets/InputWidget\";\r\nimport { SelectWidget } from \"../../../components/JSONFormWidgets/SelectWidget\";\r\nimport { MultipleSelectWidget } from \"../../../components/JSONFormWidgets/MultipleSelectWidget\";\r\nimport { EditorWidget } from '../../../components/JSONFormWidgets/EditorWidget';\r\nimport {\r\n JSONSchemaFormState,\r\n JSONSchemaValue,\r\n} from \"../../../store/standard/JSONSchemaState\";\r\nimport { helper } from \"../../../lib/helper\";\r\nimport { cn } from \"../../../lib/utils\";\r\nimport { ThemeType } from \"../../../themes\";\r\n\r\nexport const getFormState = <T extends FormDataType>(\r\n props: JSONFormProps<T>,\r\n formLayout: { [x: string]: { fieldLayout?: any[] } } = {},\r\n theme: ThemeType = 'default'\r\n) => {\r\n const { formData, formConfig, onSet, onChange } = props;\r\n\r\n const formStates = {};\r\n\r\n Object.keys(formData).forEach((key) => {\r\n const metadata = formData[key];\r\n const formConfigData = formConfig?.[key] || {};\r\n const value = {};\r\n const required = [];\r\n const properties = Object.entries(metadata).reduce((p, c: any) => {\r\n const [k, v] = c;\r\n\r\n const type = typeof v;\r\n p[k] = {\r\n type,\r\n };\r\n\r\n value[k] = v;\r\n\r\n if (!formConfigData[k]) {\r\n formConfigData[k] = {};\r\n }\r\n\r\n if (formConfigData[k]?.title) {\r\n p[k].title = formConfigData[k].title || k;\r\n }\r\n\r\n if (formConfigData[k]?.required) {\r\n required.push(k);\r\n }\r\n\r\n if (type === \"string\" || type === \"number\") {\r\n if (formConfigData[k]?.selectOptions) {\r\n if (formConfigData[k]?.isMultipleSelect) {\r\n formConfigData[k]['ui:widget'] = MultipleSelectWidget;\r\n } else {\r\n formConfigData[k]['ui:widget'] = SelectWidget;\r\n }\r\n } else {\r\n if (!formConfigData[k][\"ui:widget\"]) {\r\n formConfigData[k][\"ui:widget\"] = InputWidget;\r\n\r\n if (type === \"number\") {\r\n formConfigData[k]['ui:options'] = {\r\n ...formConfigData[k]['ui:options'],\r\n inputType: 'number',\r\n };\r\n }\r\n\r\n if (helper.json.isJsonString(v)) {\r\n formConfigData[k]['ui:widget'] = EditorWidget;\r\n formConfigData[k][\"ui:options\"] = {\r\n ...formConfigData[k][\"ui:options\"],\r\n jsonStrSpace: 2,\r\n };\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (type === \"boolean\") {\r\n formConfigData[k][\"ui:widget\"] = CheckboxWidget;\r\n }\r\n\r\n if (type === 'object') {\r\n // Instead of setting up \"definitions\", the easy way to do this is to edit the json directly using the EditorWidget\r\n p[k].type = 'string';\r\n value[k] = JSON.stringify(v, null, 2);\r\n formConfigData[k]['ui:widget'] = EditorWidget;\r\n }\r\n\r\n formConfigData[k]['theme'] = theme;\r\n return p;\r\n }, {});\r\n const schema = {\r\n type: \"object\",\r\n properties,\r\n required,\r\n };\r\n const form = new JSONSchemaFormState({\r\n // @ts-ignore\r\n schema,\r\n uiSchema: {\r\n \"ui:submitButtonOptions\": {\r\n norender: true,\r\n },\r\n ...formConfigData,\r\n layout: formLayout[key]?.fieldLayout,\r\n },\r\n // afterSubmit: async (e) => {\r\n // onSubmit?.(key as FormKey<T>, e.formData as FormDataOfKey<T>);\r\n // },\r\n afterChange: (e, id) => {\r\n const { formData } = e;\r\n if (formData && id) {\r\n const field = id.replace('root_', '');\r\n const data = {\r\n [key]: {\r\n [field]: formData[field],\r\n }\r\n };\r\n // @ts-ignore\r\n onChange?.(data);\r\n }\r\n },\r\n value: new JSONSchemaValue({\r\n default: value as FormDataOfKey<T>,\r\n onSet: (v) => {\r\n if (onSet) {\r\n return onSet(v as FormDataOfKey<T>, form);\r\n }\r\n return v;\r\n },\r\n }),\r\n });\r\n\r\n formStates[key] = form;\r\n });\r\n\r\n return formStates as {\r\n [F in keyof T]?: JSONSchemaFormState<FormDataOfKey<T>, UiSchema>;\r\n };\r\n};\r\n\r\nexport const BatchSubmitButton = ({ formStates, onSubmit, buttonProps }) => {\r\n const { className, onClick, children, isLoading, onBatchSubmit, ...rest } = buttonProps || {};\r\n const [loading, setLoading] = useState(false);\r\n return (\r\n <Button\r\n className={cn('mt-4 ml-auto', className)}\r\n size=\"sm\"\r\n color=\"primary\"\r\n isLoading={loading}\r\n onClick={(e) => {\r\n const formData = {};\r\n const formKeys = Object.keys(formStates);\r\n for (const formKey of formKeys) {\r\n const form = formStates[formKey];\r\n const current = form.formRef.current;\r\n if (current) {\r\n current.submit();\r\n // const errors = current.state.errors;\r\n // if (errors.length > 0) {\r\n // return;\r\n // }\r\n\r\n const data = current.state.formData;\r\n const uiSchema = current.state.uiSchema;\r\n const keys = Object.keys(uiSchema);\r\n for (const key of keys) {\r\n const uiConfig = uiSchema[key];\r\n if (uiConfig) {\r\n const { required, validate } = uiConfig;\r\n if (required) {\r\n if (data[key] === undefined || data[key] === null || data[key] === '') {\r\n return;\r\n }\r\n }\r\n if (validate) {\r\n const errMsg = validate(data[key]);\r\n if (errMsg) {\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n formData[formKey] = data;\r\n } else {\r\n console.error('formRef.current is null');\r\n return;\r\n }\r\n }\r\n onSubmit?.(formData, setLoading);\r\n onBatchSubmit?.(formData, setLoading);\r\n }}\r\n {...rest}\r\n >\r\n {children || 'Submit'}\r\n </Button>\r\n );\r\n};\r\n\r\nexport const SubmitButton = ({ formKey, formState, buttonProps }) => {\r\n const { className, onClick, children, isLoading, onAfterSubmit, ...rest } = buttonProps || {};\r\n const [loading, setLoading] = useState(false);\r\n return (\r\n <div className=\"w-full flex\">\r\n <Button\r\n className={cn('mt-4 ml-auto', className)}\r\n type=\"submit\"\r\n color=\"primary\"\r\n size=\"sm\"\r\n isLoading={loading}\r\n onClick={(e) => {\r\n let formData = {};\r\n const current = formState.formRef.current;\r\n if (current) {\r\n current.submit();\r\n // const errors = current.state.errors;\r\n // if (errors.length > 0) {\r\n // return;\r\n // }\r\n\r\n formData = current.state.formData;\r\n const uiSchema = current.state.uiSchema;\r\n const keys = Object.keys(uiSchema);\r\n for (const key of keys) {\r\n const uiConfig = uiSchema[key];\r\n if (uiConfig) {\r\n const { required, validate } = uiConfig;\r\n if (required) {\r\n if (formData[key] === undefined || formData[key] === null || formData[key] === '') {\r\n return;\r\n }\r\n }\r\n if (validate) {\r\n const errMsg = validate(formData[key]);\r\n if (errMsg) {\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n onAfterSubmit?.(formKey, formData, setLoading);\r\n }}\r\n {...rest}\r\n >\r\n {children || 'Submit'}\r\n </Button>\r\n </div>\r\n );\r\n};\r\n","import React, { useMemo, useState } from \"react\";\r\nimport { Checkbox, CheckboxProps } from \"@nextui-org/react\";\r\nimport { WidgetProps } from \"@rjsf/utils\";\r\nimport { Check } from \"lucide-react\";\r\nimport { cn } from \"../../../lib/utils\";\r\nimport { getStyle } from \"../../../themes\";\r\n\r\ntype Options = {\r\n className?: string;\r\n nextuiClassNames?: CheckboxProps[\"classNames\"];\r\n size: CheckboxProps[\"size\"];\r\n color: CheckboxProps[\"color\"];\r\n description?: string;\r\n descriptionClassName?: string;\r\n};\r\n\r\nexport interface CheckboxWidgetProps extends WidgetProps {\r\n options: Options;\r\n}\r\n\r\nexport interface CheckboxWidgetUIOptions {\r\n \"ui:widget\": (props: CheckboxWidgetProps) => JSX.Element;\r\n \"ui:options\": Options;\r\n}\r\n\r\nexport function CheckboxWidget({\r\n onChange, options, label, value, disabled, uiSchema\r\n}: CheckboxWidgetProps) {\r\n const {\r\n className,\r\n nextuiClassNames,\r\n size = 'sm',\r\n color = 'primary',\r\n description,\r\n descriptionClassName,\r\n } = options;\r\n const { validate, theme } = uiSchema;\r\n const [errMsg, setErrMsg] = useState<string>('');\r\n const isInvalid = !!errMsg;\r\n const classNames = useMemo(() => {\r\n const themeStyle = getStyle(theme || 'default', 'CheckboxWidget');\r\n return {\r\n ...themeStyle.classNames,\r\n ...nextuiClassNames\r\n }\r\n }, [theme, nextuiClassNames]);\r\n return (\r\n <>\r\n <Checkbox\r\n className={cn('max-w-full', className)}\r\n classNames={classNames}\r\n defaultSelected={value}\r\n isDisabled={disabled}\r\n icon={<Check className=\"bg-white dark:bg-black\" />}\r\n color={color}\r\n size={size}\r\n onChange={(e: any) => {\r\n const checked = e.target.checked;\r\n onChange(checked);\r\n }}\r\n onBlur={() => {\r\n if (validate) {\r\n const errMsg = validate(value);\r\n setErrMsg(errMsg);\r\n return;\r\n }\r\n setErrMsg('');\r\n }}\r\n >\r\n {label}\r\n </Checkbox>\r\n {description && <div className={cn('mt-1 text-xs text-[#A1A1A9] dark:text-[#717179]', descriptionClassName)}>{description}</div>}\r\n {isInvalid && <div className=\"mt-2 text-xs text-[#DF3562]\">{errMsg}</div>}\r\n </>\r\n );\r\n}\r\n\r\n","// @ts-nocheck\r\nimport React, { ReactNode, useMemo, useRef } from \"react\";\r\nimport { Input, InputProps, InputSlots, SlotsToClasses } from \"@nextui-org/react\";\r\nimport { WidgetProps } from \"@rjsf/utils\";\r\nimport { cn } from \"../../../lib/utils\";\r\nimport { getStyle } from \"../../../themes\";\r\n\r\ntype Options = {\r\n className?: string;\r\n nextuiClassNames?: SlotsToClasses<InputSlots>;\r\n labelPlacement?: InputProps[\"labelPlacement\"];\r\n size: InputProps[\"size\"];\r\n placeholder?: string;\r\n inputType?: 'text' | 'number' | 'password';\r\n color?: InputProps[\"color\"];\r\n variant?: InputProps[\"variant\"];\r\n radius?: InputProps[\"radius\"];\r\n startContent?: ReactNode;\r\n endContent?: ReactNode;\r\n description?: string;\r\n min?: number;\r\n max?: number;\r\n};\r\n//@ts-ignore \r\nexport interface InputWidgetProps extends WidgetProps {\r\n options: Options;\r\n}\r\n\r\nexport interface InputWidgetUIOptions {\r\n \"ui:widget\": (props: InputWidgetProps) => JSX.Element;\r\n \"ui:options\": Options;\r\n}\r\n\r\nexport function InputWidget(props: InputWidgetProps) {\r\n const { onChange, options, label, value, required, disabled, uiSchema } = props;\r\n const {\r\n className,\r\n nextuiClassNames,\r\n labelPlacement = 'inside',\r\n size = 'sm',\r\n inputType = 'text',\r\n color,\r\n variant,\r\n radius,\r\n startContent,\r\n endContent,\r\n description,\r\n min,\r\n max\r\n } = options;\r\n const { requiredErrMsg, validate, theme } = uiSchema;\r\n const placeholder = uiSchema['ui:options']?.placeholder;\r\n const isFirstChecked = useRef(true);\r\n const classNames = useMemo(() => {\r\n const themeStyle = getStyle(theme || 'default', 'InputWidget');\r\n return {\r\n ...themeStyle.classNames,\r\n ...nextuiClassNames\r\n }\r\n }, [theme, nextuiClassNames]);\r\n return (\r\n <Input\r\n className={cn('w-full', className)}\r\n classNames={classNames}\r\n label={label}\r\n placeholder={placeholder}\r\n value={value}\r\n isRequired={required}\r\n isDisabled={disabled}\r\n size={size}\r\n labelPlacement={labelPlacement}\r\n description={description}\r\n type={inputType}\r\n color={color}\r\n variant={variant}\r\n radius={radius}\r\n startContent={startContent}\r\n endContent={endContent}\r\n onChange={(e) => onChange(e.target.value)}\r\n min={min}\r\n max={max}\r\n validate={() => {\r\n if (isFirstChecked.current) {\r\n isFirstChecked.current = false;\r\n return true;\r\n }\r\n if (value === '' && required) {\r\n return requiredErrMsg || 'This field is required';\r\n }\r\n if (validate) {\r\n const errMsg = validate(value);\r\n return errMsg;\r\n }\r\n return true;\r\n }}\r\n />\r\n );\r\n}\r\n\r\n","import React, { useCallback, useMemo, useState } from \"react\";\r\nimport { WidgetProps } from \"@rjsf/utils\";\r\nimport { Select, SelectItem, SelectProps, SelectSlots, SlotsToClasses } from \"@nextui-org/react\";\r\nimport { cn } from \"../../../lib/utils\";\r\nimport { getStyle } from \"../../../themes\";\r\n\r\ntype Options = {\r\n className?: string;\r\n nextuiClassNames?: SlotsToClasses<SelectSlots>;\r\n listboxProps?: SelectProps['listboxProps'];\r\n labelPlacement?: SelectProps[\"labelPlacement\"];\r\n placeholder?: string;\r\n size: SelectProps[\"size\"];\r\n color?: SelectProps[\"color\"];\r\n variant?: SelectProps[\"variant\"];\r\n radius?: SelectProps[\"radius\"];\r\n description?: string;\r\n};\r\n\r\nexport interface SelectWidgetProps extends WidgetProps {\r\n options: Options;\r\n}\r\n\r\nexport interface SelectWidgetUIOptions {\r\n \"ui:widget\": (props: SelectWidgetProps) => JSX.Element;\r\n \"ui:options\": Options;\r\n}\r\n\r\nexport function SelectWidget(props: SelectWidgetProps) {\r\n const { onChange, options, label, value, required, disabled, uiSchema } = props;\r\n const {\r\n className,\r\n nextuiClassNames,\r\n listboxProps = {\r\n itemClasses: {\r\n base: [\r\n 'rounded-lg',\r\n 'text-default-500',\r\n 'transition-opacity',\r\n 'data-[hover=true]:text-foreground',\r\n 'data-[hover=true]:bg-default-100',\r\n 'dark:data-[hover=true]:bg-default-50',\r\n 'data-[selectable=true]:focus:bg-default-50',\r\n 'data-[pressed=true]:opacity-70',\r\n 'data-[focus-visible=true]:ring-default-500',\r\n ],\r\n },\r\n },\r\n labelPlacement = 'inside',\r\n size = 'sm',\r\n color,\r\n variant,\r\n radius,\r\n description,\r\n } = options;\r\n const { selectOptions = [], requiredErrMsg, validate, theme } = uiSchema;\r\n const placeholder = uiSchema['ui:options']?.placeholder;\r\n const classNames = useMemo(() => {\r\n const themeStyle = getStyle(theme || 'default', 'MultipleSelectWidget');\r\n return {\r\n ...themeStyle.classNames,\r\n ...nextuiClassNames\r\n }\r\n }, [theme, nextuiClassNames]);\r\n const [errMsg, setErrMsg] = useState<string>('');\r\n const isInvalid = !!errMsg;\r\n const checkValue = useCallback((value) => {\r\n if (!value && required) {\r\n setErrMsg(requiredErrMsg || 'This field is required');\r\n return;\r\n }\r\n if (validate) {\r\n const errMsg = validate(value);\r\n setErrMsg(errMsg);\r\n return;\r\n }\r\n setErrMsg('');\r\n }, []);\r\n\r\n return (\r\n <Select\r\n label={label?.trim()}\r\n className={cn('w-full', className)}\r\n classNames={classNames}\r\n labelPlacement={labelPlacement}\r\n placeholder={placeholder}\r\n size={size}\r\n isRequired={required}\r\n isDisabled={disabled}\r\n isInvalid={isInvalid}\r\n description={description}\r\n listboxProps={listboxProps}\r\n variant={variant}\r\n radius={radius}\r\n color={isInvalid ? 'danger' : color}\r\n errorMessage={isInvalid && errMsg}\r\n selectedKeys={[value]}\r\n onSelectionChange={(v) => {\r\n const keys = Array.from(v) as string[];\r\n const _v = keys[0];\r\n onChange(_v);\r\n checkValue(_v);\r\n }}\r\n >\r\n {selectOptions.map((item) => (\r\n <SelectItem key={item.value} value={item.value}>\r\n {item.label}\r\n </SelectItem>\r\n ))}\r\n </Select>\r\n );\r\n}\r\n\r\n\r\n","import React, { useCallback, useMemo, useState } from 'react';\r\nimport { Chip, Select, SelectItem, SelectProps, SelectedItems } from '@nextui-org/react';\r\nimport { WidgetProps } from '@rjsf/utils';\r\nimport { cn } from \"../../../lib/utils\";\r\nimport { getStyle } from '../../../themes';\r\n\r\ntype Options = {\r\n className?: string;\r\n nextuiClassNames?: SelectProps['classNames'];\r\n labelPlacement?: SelectProps['labelPlacement'];\r\n listboxProps?: SelectProps['listboxProps'];\r\n size: SelectProps['size'];\r\n color?: SelectProps['color'];\r\n placeholder?: string;\r\n description?: string;\r\n renderValue?: (\r\n items: SelectedItems<{\r\n label: string;\r\n value: string;\r\n }>,\r\n ) => React.ReactNode;\r\n};\r\n\r\nexport interface MultipleSelectWidgetProps extends WidgetProps {\r\n options: Options;\r\n}\r\n\r\nexport interface MultipleSelectWidgetUIOptions {\r\n 'ui:widget': (props: MultipleSelectWidgetProps) => JSX.Element;\r\n 'ui:options': Options;\r\n}\r\n\r\nexport function MultipleSelectWidget(props: MultipleSelectWidgetProps) {\r\n const { onChange, options, label, value, required, uiSchema = {} } = props;\r\n const { selectOptions = [], requiredErrMsg, validate, theme } = uiSchema;\r\n const {\r\n className,\r\n nextuiClassNames,\r\n labelPlacement = 'inside',\r\n listboxProps = {},\r\n size = 'sm',\r\n color,\r\n description,\r\n renderValue = DefaultRenderValue\r\n } = options;\r\n const placeholder = uiSchema['ui:options']?.placeholder || 'Select an option';\r\n const selectedKeys = useMemo(() => {\r\n return value ? value.split(',') : [];\r\n }, [value]);\r\n const classNames = useMemo(() => {\r\n const themeStyle = getStyle(theme || 'default', 'MultipleSelectWidget');\r\n return {\r\n ...themeStyle.classNames,\r\n ...nextuiClassNames\r\n }\r\n }, [theme, nextuiClassNames]);\r\n const [errMsg, setErrMsg] = useState<string>('');\r\n const isInvalid = !!errMsg;\r\n const checkValue = useCallback((value) => {\r\n if (!value && required) {\r\n setErrMsg(requiredErrMsg || 'This field is required');\r\n return;\r\n }\r\n if (validate) {\r\n const errMsg = validate(value);\r\n setErrMsg(errMsg);\r\n return;\r\n }\r\n setErrMsg('');\r\n }, []);\r\n\r\n return (\r\n <Select\r\n className={cn('w-full', className)}\r\n label={label}\r\n isMultiline\r\n selectionMode=\"multiple\"\r\n labelPlacement={labelPlacement}\r\n size={size}\r\n placeholder={placeholder}\r\n selectedKeys={selectedKeys}\r\n isRequired={required}\r\n color={isInvalid ? 'danger' : color}\r\n errorMessage={isInvalid && errMsg}\r\n onSelectionChange={(v) => {\r\n const keys = Array.from(v) as string[];\r\n const _v = keys.join(',');\r\n onChange(_v);\r\n checkValue(_v);\r\n }}\r\n items={selectOptions}\r\n classNames={classNames}\r\n listboxProps={{\r\n itemClasses: {\r\n base: [\r\n 'rounded-lg',\r\n 'text-default-500',\r\n 'transition-opacity',\r\n 'data-[hover=true]:text-foreground',\r\n 'data-[hover=true]:bg-default-100',\r\n 'dark:data-[hover=true]:bg-default-50',\r\n 'data-[selectable=true]:focus:bg-default-50',\r\n 'data-[pressed=true]:opacity-70',\r\n 'data-[focus-visible=true]:ring-default-500',\r\n ],\r\n },\r\n ...listboxProps\r\n }}\r\n description={description}\r\n renderValue={renderValue}\r\n >\r\n {selectOptions.map((item) => (\r\n <SelectItem key={item.value} textValue={item.label}>\r\n {item.label}\r\n </SelectItem>\r\n ))}\r\n </Select>\r\n );\r\n}\r\n\r\nfunction DefaultRenderValue(\r\n items: SelectedItems<{\r\n label: string;\r\n value: string;\r\n }>,\r\n) {\r\n return (\r\n <div className=\"flex flex-wrap gap-1\">\r\n {items.map((item) => (\r\n <Chip className=\"rounded-sm h-auto py-[2px] text-xs\" color=\"secondary\" size=\"sm\" key={item.key}>\r\n {item.textValue}\r\n </Chip>\r\n ))}\r\n </div>\r\n );\r\n}\r\n","import React, { useRef, useState } from \"react\";\r\nimport MonacoEditor, { EditorProps } from \"@monaco-editor/react\";\r\nimport { WidgetProps } from \"@rjsf/utils\";\r\nimport { Button } from \"@nextui-org/react\";\r\nimport { cn } from \"../../../lib/utils\";\r\nimport { helper } from \"../../../lib/helper\";\r\nimport { _ } from '../../../lib/lodash';\r\n\r\ntype Options = {\r\n editorHeight?: string;\r\n readOnly?: boolean;\r\n language?: string;\r\n languageSelectorOptions?: { label: string; value: string }[];\r\n onChangeLanguage?: (v: string) => void;\r\n onRun?: (v: string) => void;\r\n onMount?: EditorProps['onMount'];\r\n jsonStrSpace?: number; // Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.\r\n labelClassName?: string;\r\n description?: string;\r\n descriptionClassName?: string;\r\n editorBoxClassName?: string;\r\n errMsgClassName?: string;\r\n};\r\n\r\nexport interface EditorWidgetProps extends WidgetProps {\r\n options: Options;\r\n}\r\n\r\nexport type EditorWidgetUIOptions = {\r\n \"ui:widget\": (props: EditorWidgetProps) => JSX.Element;\r\n \"ui:options\": Options;\r\n};\r\n\r\nexport const EditorWidget = ({ label, options = {}, value, required, uiSchema, disabled, onChange }: EditorWidgetProps) => {\r\n const { editorHeight = '200px', readOnly = false, language = 'json', jsonStrSpace, languageSelectorOptions = [], labelClassName, description, descriptionClassName, editorBoxClassName, errMsgClassName, onChangeLanguage, onRun, onMount } = options;\r\n const { requiredErrMsg, validate } = uiSchema;\r\n const [selectedLanguage, setSelectedLanguage] = useState('');\r\n const [runLoading, setRunLoading] = useState(false);\r\n const showLanguageSelector = languageSelectorOptions.length > 0;\r\n const [errMsg, setErrMsg] = useState<string>('');\r\n const isInvalid = !!errMsg;\r\n const debouncedCheckValue = useRef(\r\n _.debounce(async (value) => {\r\n if (!value && required) {\r\n setErrMsg(requiredErrMsg || 'This field is required');\r\n return;\r\n }\r\n if (validate) {\r\n const errMsg = validate(value);\r\n setErrMsg(errMsg);\r\n return;\r\n }\r\n setErrMsg('');\r\n }, 1000),\r\n ).current;\r\n\r\n const labelText = label.trim();\r\n const showLabel = labelText || showLanguageSelector;\r\n\r\n return (\r\n <div className='flex flex-col relative'>\r\n {\r\n showLabel && <div className={cn('flex justify-between items-center mb-2', labelClassName)}>\r\n {label && (\r\n <label\r\n className=\"mr-2 flex items-center text-sm\"\r\n >\r\n {label}\r\n {required && <span className=\"font-bold text-red-600\">*</span>}\r\n </label>\r\n )}\r\n {showLanguageSelector && (\r\n <select\r\n className=\"w-full p-3 text-sm rounded-md bg-[#F4F4F5] dark:bg-[#27272A]\"\r\n value={selectedLanguage}\r\n onChange={(event) => {\r\n const v = event.target.value;\r\n setSelectedLanguage(v);\r\n onChangeLanguage && onChangeLanguage(v);\r\n }}\r\n >\r\n {languageSelectorOptions.map((item) => {\r\n return <option key={item.value} value={item.value}>{item.label}</option>\r\n })}\r\n </select>\r\n )}\r\n </div>\r\n }\r\n {description && <div className={cn('mb-2 text-xs text-[#A1A1A9] dark:text-[#717179]', descriptionClassName)}>{description}</div>}\r\n <div className={cn(\"rounded-lg overflow-hidden relative border dark:border-[#2c2c2c]\", editorBoxClassName)}>\r\n <MonacoEditor\r\n options={{ readOnly: readOnly || disabled, minimap: { enabled: false } }}\r\n height={editorHeight}\r\n theme=\"vs-dark\"\r\n language={selectedLanguage ? selectedLanguage : language}\r\n value={value}\r\n onChange={(v) => {\r\n onChange(v);\r\n debouncedCheckValue(v);\r\n }}\r\n onMount={(editor, monaco) => {\r\n onMount && onMount(editor, monaco);\r\n if (language === 'json' && jsonStrSpace && value) {\r\n const json = helper.json.safeParse(value);\r\n editor.setValue(JSON.stringify(json, null, jsonStrSpace));\r\n }\r\n monaco.editor.defineTheme('myCustomTheme', {\r\n base: 'vs-dark',\r\n inherit: true,\r\n rules: [],\r\n colors: {\r\n 'editor.background': '#09090B',\r\n },\r\n });\r\n monaco.editor.setTheme('myCustomTheme');\r\n }}\r\n />\r\n </div>\r\n {isInvalid && <div className={cn(\"mt-2 text-xs text-[#DF3562]\", errMsgClassName)}>{errMsg}</div>}\r\n {onRun && (\r\n <Button\r\n className=\"absolute bottom-2 right-4\"\r\n size=\"sm\"\r\n isLoading={runLoading}\r\n onClick={async () => {\r\n setRunLoading(true);\r\n await onRun(value);\r\n setRunLoading(false);\r\n }}\r\n >\r\n Run\r\n </Button>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n","import { createRef } from \"react\";\r\nimport Form, { IChangeEvent } from \"@rjsf/core\";\r\nimport { RJSFSchema, UiSchema } from \"@rjsf/utils\";\r\nimport validator from \"@rjsf/validator-ajv8\";\r\nimport { action, computed, makeObservable, observable, toJS } from \"mobx\";\r\nimport { helper } from \"../../lib/helper\";\r\n\r\nexport class JSONSchemaFormState<T, U = UiSchema> {\r\n value: JSONSchemaValue<T> = new JSONSchemaValue();\r\n schema: RJSFSchema;\r\n uiSchema: U;\r\n reactive: boolean = true;\r\n readonly = false;\r\n liveValidate = false;\r\n validator = validator;\r\n formRef: React.RefObject<Form>;\r\n\r\n get formData() {\r\n return this.value.get();\r\n }\r\n set formData(value: T) {\r\n this.value.set(value);\r\n }\r\n get dynamicData() {\r\n return this.getDymaicData();\r\n }\r\n getDymaicData = () => {\r\n return { ready: true };\r\n };\r\n onChange = (e: IChangeEvent<T>, id?: string) => {\r\n this.value.set(e.formData);\r\n if (this.afterChange) {\r\n this.afterChange(e, id);\r\n }\r\n };\r\n onSubmit = (e: IChangeEvent<T>) => {\r\n if (this.afterSubmit) {\r\n this.afterSubmit(e);\r\n }\r\n };\r\n afterSubmit: (e: IChangeEvent<T>) => void;\r\n afterChange: (e: IChangeEvent<T>, id?: string) => void;\r\n reset({ force = false } = {}) {\r\n if (force) {\r\n this.value.value = this.value.default;\r\n } else {\r\n this.value.reset();\r\n }\r\n return this;\r\n }\r\n customValidate = (formData: T, errors: any) => errors;\r\n constructor(args: Partial<JSONSchemaFormState<T, U>> = {}) {\r\n Object.assign(this, args, { formRef: createRef() });\r\n if (this.reactive) {\r\n makeObservable(this, {\r\n formData: computed,\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport class JSONSchemaValue<T> {\r\n value?: T = null as T;\r\n default?: T = null as T;\r\n constructor(args: Partial<JSONSchemaValue<T>> = {}) {\r\n if (!args.value && args.default) {\r\n args.value = args.default;\r\n }\r\n Object.assign(this, args);\r\n makeObservable(this, {\r\n value: observable,\r\n set: action,\r\n });\r\n }\r\n set(value: Partial<T>) {\r\n value = this.onSet(value);\r\n const newVal = helper.deepMerge(this.value, value);\r\n this.value = toJS(newVal);\r\n return this.value;\r\n }\r\n onSet(value: Partial<T>) {\r\n return value;\r\n }\r\n get() {\r\n return this.getFormat(this.value);\r\n }\r\n getFormat(value: T) {\r\n return value;\r\n }\r\n reset() {\r\n this.set(this.default);\r\n }\r\n}\r\n","import React, { useState } from \"react\";\r\nimport { Button } from \"@nextui-org/react\";\r\nimport Form from \"@rjsf/core\";\r\nimport {\r\n type ErrorListProps,\r\n type FieldTemplateProps,\r\n type ObjectFieldTemplateProps,\r\n type SubmitButtonProps,\r\n} from \"@rjsf/utils\";\r\nimport * as Utils from \"@rjsf/utils\"\r\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { cn } from \"../../lib/utils\";\r\nimport { JSONSchemaFormState } from \"../../store/standard/JSONSchemaState\";\r\nimport { toJS } from \"mobx\";\r\n\r\nfunction FieldTemplate(props: FieldTemplateProps) {\r\n const { id, classNames, label, help, required, description, errors, children, schema, uiSchema } = props;\r\n\r\n if (uiSchema && uiSchema['ui:widget'] === 'hidden') { return null; }\r\n\r\n // const hideLabel = schema.type === 'object' || schema.type === 'boolean';\r\n\r\n const isDate = uiSchema && uiSchema['ui:widget'] === 'date';\r\n const isDateTime = uiSchema && uiSchema['ui:widget'] === 'date-time';\r\n const isTime = uiSchema && uiSchema['ui:widget'] === 'time';\r\n const showLabel = isDate || isDateTime || isTime;\r\n\r\n return (\r\n <div className={cn(classNames)}>\r\n {showLabel && (\r\n <label htmlFor={id} className={cn('flex items-center h-8')}>\r\n <span className=\"text-sm\">{label}</span>\r\n {required && <span className=\"font-bold text-red-600\">*</span>}\r\n </label>\r\n )}\r\n\r\n {/* {description} */}\r\n {/* {children} */}\r\n {/* {help} */}\r\n\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nconst renderLayout = (layout: any[], fields: { [k: string]: React.ReactElement }, n = 1) => {\r\n n++;\r\n return layout.map((item, index) => {\r\n if (Array.isArray(item)) {\r\n const even = (n & 1) === 0;\r\n return (\r\n <div key={index} className={cn('w-full flex justify-between items-center space-x-2', even ? 'flex-row items-start' : 'flex-col')}>\r\n {renderLayout(item, fields, n)}\r\n </div>\r\n );\r\n } else {\r\n return (\r\n <div className=\"w-full\" key={index}>\r\n {fields[item]}\r\n </div>\r\n );\r\n }\r\n });\r\n};\r\n\r\nconst ObjectFieldTemplate = ({ title, idSchema: { $id }, properties, uiSchema: { layout } }: ObjectFieldTemplateProps) => {\r\n const [opened, setOpened] = useState(false);\r\n const fields = Object.fromEntries(properties.map((item) => [item.name, item.content]));\r\n return (\r\n <div className=\"w-full space-y-2.5\">\r\n {$id === 'root' ? (\r\n layout ? (\r\n renderLayout(layout, fields)\r\n ) : (\r\n properties.map((element) => {\r\n return (\r\n <div key={element.content.key}>\r\n {element.content}\r\n </div>\r\n );\r\n })\r\n )\r\n ) : (\r\n <>\r\n <div\r\n className=\"mt-5 mb-[10px] flex justify-between items-center cursor-pointer border-t-[1px solid #E5E5EA] py-[5px] hover:bg-[#F2F2F7] dark:hover:bg-gray-900\"\r\n onClick={() => setOpened((o) => !o)}\r\n >\r\n <div className=\"text-gray-900 dark:text-gray-100 font-bold text-base\">{title}</div>\r\n {opened ? <ChevronUp /> : <ChevronDown />}\r\n </div>\r\n <div className={cn('mt-2 space-y-2.5', opened ? 'block' : 'hidden')}>\r\n {layout\r\n ? renderLayout(layout, fields)\r\n : properties.map((element) => {\r\n return (\r\n <div key={element.content.key}>\r\n {element.content}\r\n </div>\r\n );\r\n })}\r\n </div>\r\n </>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nconst ErrorListTemplate = ({ errors }: ErrorListProps) => {\r\n return (\r\n <div>\r\n <div className=\"font-bold\">Errors</div>\r\n <div className=\"mt-[10px]\">\r\n {errors.map((error) => (\r\n <div className=\"mb-[10px]\" color=\"red\" key={error.property}>\r\n {error.stack}\r\n </div>\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nconst SubmitButton = ({ uiSchema }: SubmitButtonProps) => {\r\n const { submitText, norender, props: submitButtonProps = {} } = Utils.getSubmitButtonOptions(uiSchema);\r\n if (norender) {\r\n return null;\r\n }\r\n return (\r\n <div className=\"flex justify-end mt-4\">\r\n <Button type=\"submit\" color='primary' size='sm'>{submitText}</Button>\r\n </div>\r\n );\r\n};\r\n\r\ninterface Props {\r\n formState: JSONSchemaFormState<any>;\r\n children?: any;\r\n}\r\n\r\nexport const JSONSchemaForm = observer(({ children, formState }: Props) => {\r\n if (!formState?.dynamicData?.ready) return <></>;\r\n return (\r\n <Form\r\n showErrorList=\"bottom\"\r\n templates={{\r\n ObjectFieldTemplate,\r\n FieldTemplate,\r\n ErrorListTemplate,\r\n ButtonTemplates: { SubmitButton },\r\n }}\r\n formData={toJS(formState.formData)}\r\n readonly={formState.readonly}\r\n uiSchema={formState.uiSchema}\r\n schema={formState.schema}\r\n onChange={formState.onChange}\r\n onSubmit={formState.onSubmit}\r\n validator={formState.validator}\r\n customValidate={formState.customValidate}\r\n ref={formState.formRef}\r\n >\r\n {children && children}\r\n </Form>\r\n );\r\n});\r\n","import React from 'react';\r\nimport { colSpan, colSpanLg, colSpanMd, colSpanSm, GridClassesMapping } from './styles';\r\nimport { cn } from '../../../lib/utils';\r\n\r\nexport interface ColProps extends React.HTMLAttributes<HTMLDivElement> {\r\n numColSpan?: number;\r\n numColSpanSm?: number;\r\n numColSpanMd?: number;\r\n numColSpanLg?: number;\r\n}\r\n\r\nconst Col = React.forwardRef<HTMLDivElement, ColProps>((props, ref) => {\r\n const { numColSpan = 1, numColSpanSm, numColSpanMd, numColSpanLg, children, className, ...other } = props;\r\n const getColSpan = (numColSpan: number | undefined, colSpanMapping: GridClassesMapping): string => {\r\n if (!numColSpan) return '';\r\n if (!Object.keys(colSpanMapping).includes(String(numColSpan))) return '';\r\n return colSpanMapping[numColSpan];\r\n };\r\n\r\n const getColSpanClassNames = () => {\r\n const spanBase = getColSpan(numColSpan, colSpan);\r\n const spanSm = getColSpan(numColSpanSm, colSpanSm);\r\n const spanMd = getColSpan(numColSpanMd, colSpanMd);\r\n const spanLg = getColSpan(numColSpanLg, colSpanLg);\r\n return cn(spanBase, spanSm, spanMd, spanLg);\r\n };\r\n\r\n return (\r\n <div ref={ref} className={cn(getColSpanClassNames(), className)} {...other}>\r\n {children}\r\n </div>\r\n );\r\n});\r\n\r\nCol.displayName = 'Col';\r\n\r\nexport default Col;\r\n","export type GridClassesMapping = {\r\n [key: string]: string;\r\n};\r\n\r\nexport const gridCols: GridClassesMapping = {\r\n 0: 'grid-cols-none',\r\n 1: 'grid-cols-1',\r\n 2: 'grid-cols-2',\r\n 3: 'grid-cols-3',\r\n 4: 'grid-cols-4',\r\n 5: 'grid-cols-5',\r\n 6: 'grid-cols-6',\r\n 7: 'grid-cols-7',\r\n 8: 'grid-cols-8',\r\n 9: 'grid-cols-9',\r\n 10: 'grid-cols-10',\r\n 11: 'grid-cols-11',\r\n 12: 'grid-cols-12',\r\n};\r\n\r\nexport const gridColsSm: GridClassesMapping = {\r\n 0: 'sm:grid-cols-none',\r\n 1: 'sm:grid-cols-1',\r\n 2: 'sm:grid-cols-2',\r\n 3: 'sm:grid-cols-3',\r\n 4: 'sm:grid-cols-4',\r\n 5: 'sm:grid-cols-5',\r\n 6: 'sm:grid-cols-6',\r\n 7: 'sm:grid-cols-7',\r\n 8: 'sm:grid-cols-8',\r\n 9: 'sm:grid-cols-9',\r\n 10: 'sm:grid-cols-10',\r\n 11: 'sm:grid-cols-11',\r\n 12: 'sm:grid-cols-12',\r\n};\r\n\r\nexport const gridColsMd: GridClassesMapping = {\r\n 0: 'md:grid-cols-none',\r\n 1: 'md:grid-cols-1',\r\n 2: 'md:grid-cols-2',\r\n 3: 'md:grid-cols-3',\r\n 4: 'md:grid-cols-4',\r\n 5: 'md:grid-cols-5',\r\n 6: 'md:grid-cols-6',\r\n 7: 'md:grid-cols-7',\r\n 8: 'md:grid-cols-8',\r\n 9: 'md:grid-cols-9',\r\n 10: 'md:grid-cols-10',\r\n 11: 'md:grid-cols-11',\r\n 12: 'md:grid-cols-12',\r\n};\r\n\r\nexport const gridColsLg: GridClassesMapping = {\r\n 0: 'lg:grid-cols-none',\r\n 1: 'lg:grid-cols-1',\r\n 2: 'lg:grid-cols-2',\r\n 3: 'lg:grid-cols-3',\r\n 4: 'lg:grid-cols-4',\r\n 5: 'lg:grid-cols-5',\r\n 6: 'lg:grid-cols-6',\r\n 7: 'lg:grid-cols-7',\r\n 8: 'lg:grid-cols-8',\r\n 9: 'lg:grid-cols-9',\r\n 10: 'lg:grid-cols-10',\r\n 11: 'lg:grid-cols-11',\r\n 12: 'lg:grid-cols-12',\r\n};\r\n\r\nexport const colSpan: GridClassesMapping = {\r\n 1: 'col-span-1',\r\n 2: 'col-span-2',\r\n 3: 'col-span-3',\r\n 4: 'col-span-4',\r\n 5: 'col-span-5',\r\n 6: 'col-span-6',\r\n 7: 'col-span-7',\r\n 8: 'col-span-8',\r\n 9: 'col-span-9',\r\n 10: 'col-span-10',\r\n 11: 'col-span-11',\r\n 12: 'col-span-12',\r\n 13: 'col-span-13',\r\n};\r\n\r\nexport const colSpanSm: GridClassesMapping = {\r\n 1: 'sm:col-span-1',\r\n 2: 'sm:col-span-2',\r\n 3: 'sm:col-span-3',\r\n 4: 'sm:col-span-4',\r\n 5: 'sm:col-span-5',\r\n 6: 'sm:col-span-6',\r\n 7: 'sm:col-span-7',\r\n 8: 'sm:col-span-8',\r\n 9: 'sm:col-span-9',\r\n 10: 'sm:col-span-10',\r\n 11: 'sm:col-span-11',\r\n 12: 'sm:col-span-12',\r\n 13: 'sm:col-span-13',\r\n};\r\n\r\nexport const colSpanMd: GridClassesMapping = {\r\n 1: 'md:col-span-1',\r\n 2: 'md:col-span-2',\r\n 3: 'md:col-span-3',\r\n 4: 'md:col-span-4',\r\n 5: 'md:col-span-5',\r\n 6: 'md:col-span-6',\r\n 7: 'md:col-span-7',\r\n 8: 'md:col-span-8',\r\n 9: 'md:col-span-9',\r\n 10: 'md:col-span-10',\r\n 11: 'md:col-span-11',\r\n 12: 'md:col-span-12',\r\n 13: 'md:col-span-13',\r\n};\r\n\r\nexport const colSpanLg: GridClassesMapping = {\r\n 1: 'lg:col-span-1',\r\n 2: 'lg:col-span-2',\r\n 3: 'lg:col-span-3',\r\n 4: 'lg:col-span-4',\r\n 5: 'lg:col-span-5',\r\n 6: 'lg:col-span-6',\r\n 7: 'lg:col-span-7',\r\n 8: 'lg:col-span-8',\r\n 9: 'lg:col-span-9',\r\n 10: 'lg:col-span-10',\r\n 11: 'lg:col-span-11',\r\n 12: 'lg:col-span-12',\r\n 13: 'lg:col-span-13',\r\n};\r\n","import React from 'react';\r\nimport { GridClassesMapping, gridCols, gridColsLg, gridColsMd, gridColsSm } from './styles';\r\nimport { cn } from '../../../lib/utils';\r\n\r\nconst getGridCols = (numCols: number | undefined, gridColsMapping: GridClassesMapping): string => {\r\n if (!numCols) return '';\r\n if (!Object.keys(gridColsMapping).includes(String(numCols))) return '';\r\n return gridColsMapping[numCols];\r\n};\r\n\r\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\r\n numItems?: number;\r\n numItemsSm?: number;\r\n numItemsMd?: number;\r\n numItemsLg?: number;\r\n children: React.ReactNode;\r\n}\r\n\r\nconst Grid = React.forwardRef<HTMLDivElement, GridProps>((props, ref) => {\r\n const { numItems = 1, numItemsSm, numItemsMd, numItemsLg, children, className, ...other } = props;\r\n\r\n const colsBase = getGridCols(numItems, gridCols);\r\n const colsSm = getGridCols(numItemsSm, gridColsSm);\r\n const colsMd = getGridCols(numItemsMd, gridColsMd);\r\n const colsLg = getGridCols(numItemsLg, gridColsLg);\r\n\r\n const colClassNames = cn(colsBase, colsSm, colsMd, colsLg);\r\n\r\n return (\r\n <div ref={ref} className={cn('grid', colClassNames, className)} {...other}>\r\n {children}\r\n </div>\r\n );\r\n});\r\n\r\nGrid.displayName = 'Grid';\r\n\r\nexport default Grid;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\r\nimport { FormDataType, JSONFormProps, LayoutConfigType } from \"..\";\r\nimport { JSONSchemaForm } from \"../../../components/JSONSchemaForm\";\r\nimport { cn } from \"../../../lib/utils\";\r\nimport { BatchSubmitButton, SubmitButton, getFormState } from \"./format\";\r\n\r\nconst CollapsibleBox = ({ formKey, layout, formState }: { formKey: string; layout: any; formState: any }) => {\r\n const [opened, setOpened] = useState(true);\r\n return (\r\n <div id={`form-${formKey}`}>\r\n <div\r\n className=\"mt-5 mb-[10px] flex justify-between items-center cursor-pointer border-t-[1px solid #E5E5EA] py-[5px]\"\r\n onClick={() => setOpened((o) => !o)}\r\n >\r\n <div className={cn('text-gray-900 dark:text-gray-100 font-bold text-base', layout?.titleBoxCss)}>{layout?.title || formKey}</div>\r\n {opened ? <ChevronUp size={18} className=\"text-[#717179] dark:text-[#A1A1A9]\" /> : <ChevronDown size={18} className=\"text-[#717179] dark:text-[#A1A1A9]\" />}\r\n </div>\r\n <div className={cn('mt-2', opened ? 'block' : 'hidden')}>\r\n {layout?.customRender?.Top?.(formKey, formState)}\r\n <JSONSchemaForm formState={formState}>\r\n {layout?.customRender?.SubmitButtonBefore?.(formKey, formState)}\r\n {layout?.submitButtonProps && <SubmitButton formKey={formKey} formState={formState} buttonProps={layout.submitButtonProps} />}\r\n {layout?.customRender?.SubmitButtonAfter?.(formKey, formState)}\r\n </JSONSchemaForm>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport const ListLayout = <T extends FormDataType>(props: JSONFormProps<T>) => {\r\n const { layoutConfig = {}, onBatchSubmit, batchSubmitButtonProps, onReady, theme } = props;\r\n const { $type, $combFormsCustomRender, ...formLayout } = layoutConfig as LayoutConfigType<T, 'ListLayout'>;\r\n const formStates = getFormState(props, formLayout, theme);\r\n\r\n useEffect(() => {\r\n if (formStates && onReady) {\r\n onReady(formStates);\r\n }\r\n }, [formStates]);\r\n\r\n return (\r\n <>\r\n {$combFormsCustomRender?.Top?.(formStates)}\r\n {Object.keys(formStates).map((key) => {\r\n return (\r\n <CollapsibleBox\r\n key={key}\r\n formKey={key}\r\n formState={formStates[key]}\r\n layout={formLayout[key]}\r\n />\r\n );\r\n })}\r\n {$combFormsCustomRender?.SubmitButtonBefore?.(formStates)}\r\n {(onBatchSubmit || batchSubmitButtonProps?.onBatchSubmit) && (\r\n <div className=\"w-full flex\">\r\n <BatchSubmitButton formStates={formStates} onSubmit={onBatchSubmit} buttonProps={batchSubmitButtonProps} />\r\n </div>\r\n )}\r\n {$combFormsCustomRender?.SubmitButtonAfter?.(formStates)}\r\n </>\r\n );\r\n};","import React, { useEffect } from 'react';\r\nimport { FormDataType, JSONFormProps, LayoutConfigType } from '..';\r\nimport { JSONSchemaForm } from '../../../components/JSONSchemaForm';\r\nimport { BatchSubmitButton, SubmitButton, getFormState } from './format';\r\n\r\nexport const SimpleLayout = <T extends FormDataType>(props: JSONFormProps<T>) => {\r\n const { layoutConfig = {}, onBatchSubmit, batchSubmitButtonProps, onReady, theme } = props;\r\n const { $type, $combFormsCustomRender, ...formLayout } = layoutConfig as LayoutConfigType<T, 'SimpleLayout'>;\r\n const formStates = getFormState(props, formLayout, theme);\r\n\r\n useEffect(() => {\r\n if (formStates && onReady) {\r\n onReady(formStates);\r\n }\r\n }, [formStates]);\r\n\r\n return (\r\n <>\r\n {$combFormsCustomRender?.Top?.(formStates)}\r\n <div className=\"space-y-2\">\r\n {Object.keys(formStates).map((key) => {\r\n const layout = formLayout[key];\r\n return (\r\n <div key={key} id={`form-${key}`}>\r\n {layout?.customRender?.Top?.(key, formStates[key])}\r\n <JSONSchemaForm formState={formStates[key]}>\r\n {layout?.customRender?.SubmitButtonBefore?.(key, formStates[key])}\r\n {layout?.submitButtonProps && <SubmitButton formKey={key} formState={formStates[key]} buttonProps={layout.submitButtonProps} />}\r\n {layout?.customRender?.SubmitButtonAfter?.(key, formStates[key])}\r\n </JSONSchemaForm>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n {$combFormsCustomRender?.SubmitButtonBefore?.(formStates)}\r\n {(onBatchSubmit || batchSubmitButtonProps?.onBatchSubmit) && (\r\n <div className=\"w-full flex\">\r\n <BatchSubmitButton formStates={formStates} onSubmit={onBatchSubmit} buttonProps={batchSubmitButtonProps} />\r\n </div>\r\n )}\r\n {$combFormsCustomRender?.SubmitButtonAfter?.(formStates)}\r\n </>\r\n );\r\n};\r\n","import React, { useEffect, useMemo, useState } from \"react\";\r\nimport { Tab, Tabs } from \"@nextui-org/react\";\r\nimport { FormDataType, JSONFormProps, LayoutConfigType } from \"..\";\r\nimport { JSONSchemaForm } from \"../../../components/JSONSchemaForm\";\r\nimport { BatchSubmitButton, SubmitButton, getFormState } from \"./format\";\r\nimport { cn } from \"../../../lib/utils\";\r\n\r\nexport const TabLayout = <T extends FormDataType>(props: JSONFormProps<T>) => {\r\n const { layoutConfig = {}, onBatchSubmit, batchSubmitButtonProps, onReady, theme } = props;\r\n const {\r\n $type,\r\n $tabsProps = {\r\n color: 'default',\r\n },\r\n $combFormsCustomRender,\r\n ...formLayout\r\n } = layoutConfig as LayoutConfigType<T, 'TabLayout'>;\r\n const formStates = useMemo(() => getFormState(props, formLayout, theme), [props.formData, props.formConfig, props.layoutConfig]);\r\n const formKeys = Object.keys(formStates);\r\n const [selectedTab, setSelectedTab] = useState(formKeys[0] || '');\r\n\r\n useEffect(() => {\r\n if (formStates && onReady) {\r\n onReady(formStates);\r\n }\r\n }, [formStates]);\r\n\r\n return (\r\n <>\r\n <Tabs\r\n {...$tabsProps}\r\n selectedKey={selectedTab}\r\n onSelectionChange={(key: string) => {\r\n setSelectedTab(key);\r\n }}\r\n >\r\n {formKeys.map((key) => {\r\n const layout = formLayout[key];\r\n return <Tab id={`form-${key}-tab-menu`} key={key} title={<div className={layout?.titleBoxCss}>{layout?.title || key}</div>} />;\r\n })}\r\n </Tabs>\r\n {$combFormsCustomRender?.Top?.(formStates)}\r\n {formKeys.map((key) => {\r\n const layout = formLayout[key];\r\n return (\r\n <div\r\n key={key}\r\n id={`form-${key}-tab-content`}\r\n className={cn('mt-4', selectedTab === key ? '' : 'hidden')}\r\n >\r\n {layout?.customRender?.Top?.(key, formStates[key])}\r\n <JSONSchemaForm formState={formStates[key]}>\r\n {layout?.customRender?.SubmitButtonBefore?.(key, formStates[key])}\r\n {layout?.submitButtonProps && <SubmitButton formKey={key} formState={formStates[key]} buttonProps={layout.submitButtonProps} />}\r\n {layout?.customRender?.SubmitButtonAfter?.(key, formStates[key])}\r\n </JSONSchemaForm>\r\n </div>\r\n );\r\n })}\r\n {$combFormsCustomRender?.SubmitButtonBefore?.(formStates)}\r\n {(onBatchSubmit || batchSubmitButtonProps?.onBatchSubmit) && (\r\n <div className=\"w-full flex\">\r\n <BatchSubmitButton formStates={formStates} onSubmit={onBatchSubmit} buttonProps={batchSubmitButtonProps} />\r\n </div>\r\n )}\r\n {$combFormsCustomRender?.SubmitButtonAfter?.(formStates)}\r\n </>\r\n );\r\n};\r\n","import React, { ReactNode, useMemo, useRef } from 'react';\r\nimport { InputProps, InputSlots, SlotsToClasses, Textarea } from '@nextui-org/react';\r\nimport { WidgetProps } from '@rjsf/utils';\r\nimport { cn } from \"../../../lib/utils\";\r\nimport { getStyle } from '../../../themes';\r\n\r\ntype Options = {\r\n className?: string;\r\n nextuiClassNames?: SlotsToClasses<InputSlots>;\r\n labelPlacement?: InputProps['labelPlacement'];\r\n size: InputProps['size'];\r\n minRows?: number;\r\n maxRows?: number;\r\n placeholder?: string;\r\n color?: InputProps[\"color\"];\r\n variant?: InputProps[\"variant\"];\r\n radius?: InputProps[\"radius\"];\r\n startContent?: ReactNode;\r\n endContent?: ReactNode;\r\n description?: string;\r\n};\r\n// @ts-ignore \r\nexport interface TextareaWidgetProps extends WidgetProps {\r\n options: Options;\r\n}\r\n\r\nexport interface TextareaWidgetUIOptions {\r\n 'ui:widget': (props: TextareaWidgetProps) => JSX.Element;\r\n 'ui:options': Options;\r\n}\r\n\r\nexport function TextareaWidget(props: TextareaWidgetProps) {\r\n const { onChange, options, label, value, required, disabled, uiSchema } = props;\r\n const {\r\n className,\r\n nextuiClassNames = {\r\n inputWrapper: 'rounded-lg shadow-none border dark:border-[#2c2c2c] !bg-transparent data-[hover=true]:!bg-default-50 group-data-[focus=true]:!bg-transparent',\r\n },\r\n labelPlacement = 'inside',\r\n size = 'md',\r\n minRows = 3,\r\n maxRows = 8,\r\n color,\r\n variant,\r\n radius,\r\n startContent,\r\n endContent,\r\n description,\r\n } = options;\r\n const { requiredErrMsg, validate, theme } = uiSchema;\r\n const placeholder = uiSchema['ui:options']?.placeholder;\r\n const isFirstChecked = useRef(true);\r\n const classNames = useMemo(() => {\r\n const themeStyle = getStyle(theme || 'default', 'InputWidget');\r\n return {\r\n ...themeStyle.classNames,\r\n ...nextuiClassNames\r\n }\r\n }, [theme, nextuiClassNames]);\r\n\r\n return (\r\n <Textarea\r\n className={cn('w-full', className)}\r\n classNames={classNames}\r\n label={label}\r\n placeholder={placeholder}\r\n value={value}\r\n isRequired={required}\r\n isDisabled={disabled}\r\n minRows={minRows}\r\n maxRows={maxRows}\r\n size={size}\r\n labelPlacement={labelPlacement}\r\n description={description}\r\n color={color}\r\n variant={variant}\r\n radius={radius}\r\n startContent={startContent}\r\n endContent={endContent}\r\n onChange={(e) => onChange(e.target.value)}\r\n validate={() => {\r\n if (isFirstChecked.current) {\r\n isFirstChecked.current = false;\r\n return true;\r\n }\r\n if (value === '' && required) {\r\n return requiredErrMsg || 'This field is required';\r\n }\r\n if (validate) {\r\n const errMsg = validate(value);\r\n return errMsg;\r\n }\r\n return true;\r\n }}\r\n />\r\n );\r\n}\r\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\r\nimport { DatePicker, DatePickerProps } from '@nextui-org/react';\r\nimport { RJSFSchema, Widget, WidgetProps } from \"@rjsf/utils\";\r\nimport { DateValue, parseAbsoluteToLocal } from '@internationalized/date';\r\nimport { cn } from \"../../../lib/utils\";\r\nimport { getStyle } from \"../../../themes\";\r\n\r\ntype Options = {\r\n className?: string;\r\n nextuiClassNames?: Record<\"base\" | \"selectorButton\" | \"selectorIcon\" | \"popoverContent\" | \"calendar\" | \"calendarContent\" | \"timeInputLabel\" | \"timeInput\", string>;\r\n dateInputClassNames?: Record<\r\n | \"base\"\r\n | \"label\"\r\n | \"inputWrapper\"\r\n | \"innerWrapper\"\r\n | \"input\"\r\n | \"helperWrapper\"\r\n | \"description\"\r\n | \"errorMessage\",\r\n string\r\n >;\r\n size: DatePickerProps[\"size\"];\r\n labelPlacement?: DatePickerProps[\"labelPlacement\"];\r\n color: DatePickerProps[\"color\"];\r\n granularity?: DatePickerProps[\"granularity\"];\r\n variant?: DatePickerProps['variant'];\r\n description?: string;\r\n};\r\n\r\nexport interface DatePickerWidgetProps extends WidgetProps {\r\n options: Options;\r\n}\r\n\r\nexport interface DatePickerWidgetUIOptions {\r\n 'ui:widget': (props: DatePickerWidgetProps) => string | Widget<any, RJSFSchema, any> | undefined;\r\n 'ui:options': Options;\r\n}\r\n\r\nexport function DatePickerWidget({ label, options, value, required, disabled, uiSchema, onChange }: DatePickerWidgetProps) {\r\n const {\r\n className,\r\n nextuiClassNames = { calendarContent: 'min-w-fit' },\r\n dateInputClassNames,\r\n labelPlacement = 'inside',\r\n size = 'sm',\r\n granularity = 'day',\r\n color = 'default',\r\n description,\r\n variant,\r\n } = options;\r\n const [date, setDate] = useState<DateValue>();\r\n const { requiredErrMsg, validate, theme } = uiSchema;\r\n const isFirstChecked = useRef(true);\r\n const dateInputStyle = useMemo(() => {\r\n const themeStyle = getStyle(theme || 'default', 'DatePickerWidget');\r\n return {\r\n ...themeStyle.dateInputClassNames,\r\n ...dateInputClassNames\r\n }\r\n }, [theme, dateInputClassNames]);\r\n\r\n useEffect(() => {\r\n if (value) {\r\n try {\r\n const ISOStr = new Date(value).toISOString();\r\n const v = parseAbsoluteToLocal(ISOStr);\r\n setDate(v);\r\n } catch (error) {\r\n console.log('error', error.message);\r\n }\r\n }\r\n }, [value]);\r\n\r\n return (\r\n <DatePicker\r\n showMonthAndYearPickers\r\n className={cn('w-full', className)}\r\n classNames={nextuiClassNames}\r\n dateInputClassNames={dateInputStyle}\r\n label={label}\r\n size={size}\r\n labelPlacement={labelPlacement}\r\n color={color}\r\n granularity={granularity}\r\n variant={variant}\r\n value={date}\r\n isRequired={required}\r\n description={description || ''}\r\n isDisabled={disabled}\r\n onChange={(dateValue) => {\r\n if (dateValue) {\r\n const v = dateValue.toDate('GMT').toISOString();\r\n onChange(v);\r\n }\r\n }}\r\n validate={() => {\r\n if (isFirstChecked.current) {\r\n isFirstChecked.current = false;\r\n return true;\r\n }\r\n if (value === '' && required) {\r\n return requiredErrMsg || 'This field is required';\r\n }\r\n if (validate) {\r\n const errMsg = validate(value);\r\n return errMsg;\r\n }\r\n return true;\r\n }}\r\n />\r\n );\r\n}\r\n","import { Modal, ModalBody, ModalContent, ModalHeader } from '@nextui-org/react';\r\nimport { observer, useLocalObservable } from \"mobx-react-lite\";\r\nimport { useStore } from \"../../store/index\";\r\nimport Draggable from \"react-draggable\";\r\nimport { JSONForm } from \"../../components/JSONForm\";\r\nimport { useEffect, useMemo } from \"react\";\r\nimport { cn } from \"../../lib/utils\";\r\nimport { ComplexFormModalStore } from \".\";\r\nimport React from \"react\";\r\n\r\nconst JSONViewModal = observer(() => {\r\n const rootStore = useStore();\r\n const complexFormModal = rootStore.get(ComplexFormModalStore);\r\n const { formData, isOpen } = complexFormModal;\r\n const store = useLocalObservable(() => ({\r\n isMobile: false,\r\n }));\r\n\r\n useEffect(() => {\r\n const handleResize = () => {\r\n store.isMobile = window.innerWidth < 991;\r\n };\r\n handleResize();\r\n window.addEventListener('resize', handleResize);\r\n return () => {\r\n window.removeEventListener('resize', handleResize);\r\n };\r\n }, []);\r\n\r\n const isMobile = store.isMobile;\r\n\r\n const ModalMemo = useMemo(() => {\r\n if (!formData) {\r\n return null;\r\n }\r\n\r\n const layoutConfig = { ...complexFormModal.layoutConfig };\r\n if (isMobile && layoutConfig.$type === 'GridLayout') {\r\n layoutConfig.$gridColumn = 1;\r\n Object.keys(layoutConfig).forEach((key) => {\r\n if (typeof layoutConfig[key] === 'object') {\r\n // @ts-ignore\r\n layoutConfig[key].colSpan = 1;\r\n }\r\n });\r\n }\r\n\r\n return (\r\n <Modal\r\n className={complexFormModal.className}\r\n classNames={complexFormModal.classNames}\r\n scrollBehavior={complexFormModal.scrollBehavior}\r\n isDismissable={complexFormModal.isDismissable}\r\n isOpen={isOpen}\r\n size={complexFormModal.modalSize}\r\n onOpenChange={(open: boolean) => {\r\n if (!open) {\r\n complexFormModal.event.emit('abort');\r\n }\r\n }}\r\n >\r\n <div className=\"z-50 fixed top-0 left-0 w-screen h-screen\">\r\n <Draggable handle=\".draggable-handle\">\r\n <ModalContent>\r\n {complexFormModal.title && <ModalHeader className=\"flex flex-col gap-1 draggable-handle cursor-move\">{complexFormModal.title}</ModalHeader>}\r\n <ModalBody className={cn('max-h-[90vh] overflow-auto')}>\r\n <JSONForm\r\n theme={complexFormModal.theme}\r\n formData={formData}\r\n formConfig={complexFormModal.formConfig}\r\n layoutConfig={layoutConfig}\r\n onBatchSubmit={complexFormModal.onBatchSubmit\r\n ? complexFormModal.onBatchSubmit\r\n : (data) => {\r\n complexFormModal.event.emit('batchSubmit', data);\r\n }\r\n }\r\n onSet={complexFormModal.onSet}\r\n onChange={complexFormModal.onChange}\r\n onReady={complexFormModal.onReady}\r\n batchSubmitButtonProps={complexFormModal.batchSubmitButtonProps}\r\n />\r\n </ModalBody>\r\n </ModalContent>\r\n </Draggable>\r\n </div>\r\n </Modal>\r\n );\r\n }, [isOpen, formData, isMobile]);\r\n\r\n return ModalMemo;\r\n});\r\n\r\nexport default JSONViewModal;\r\n","import { Store } from \"../../store/standard/base\";\r\nimport Provider from \"./Provider\";\r\nimport { FormConfigType, FormDataOfKey, FormDataType, LayoutConfigType, LayoutType } from \"../../components/JSONForm\";\r\nimport EventEmitter from \"events\";\r\nimport { JSONSchemaFormState } from \"../../store/standard/JSONSchemaState\";\r\nimport { UiSchema } from \"@rjsf/utils\";\r\nimport { makeAutoObservable } from \"mobx\";\r\nimport { RootStore } from \"../../store\";\r\nimport React, { Dispatch, SetStateAction } from \"react\";\r\nimport { ButtonProps, SlotsToClasses, ModalSlots } from \"@nextui-org/react\";\r\nimport { getStyle, ThemeType } from \"../../themes\";\r\n\r\nexport class ComplexFormModalStore<T extends FormDataType> implements Store {\r\n sid = 'ComplexFormModalStore';\r\n provider = () => <Provider />;\r\n\r\n isOpen = false;\r\n title = '';\r\n formData?: T;\r\n formConfig?: FormConfigType<T>;\r\n layoutConfig?: LayoutConfigType<T, LayoutType>;\r\n className = '';\r\n classNames?: SlotsToClasses<ModalSlots>;\r\n theme: ThemeType = \"default\";\r\n modalSize: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full' | 'xs' | '3xl' | '4xl' | '5xl' = 'md';\r\n scrollBehavior?: 'normal' | 'inside' | 'outside' = 'normal';\r\n isDismissable = true;\r\n event = new EventEmitter();\r\n onBatchSubmit?: (data: T, setLoading?: Dispatch<SetStateAction<boolean>>) => void;\r\n onSet?: (v: FormDataOfKey<T>, form: JSONSchemaFormState<FormDataOfKey<T>, UiSchema>) => FormDataOfKey<T>;\r\n onChange?: (data: Partial<T>) => void;\r\n onReady?: (formStates: { [F in keyof T]?: JSONSchemaFormState<FormDataOfKey<T>, UiSchema> }) => void;\r\n batchSubmitButtonProps?: ButtonProps & { onBatchSubmit?: (formData: T, setLoading: Dispatch<SetStateAction<boolean>>) => void };\r\n\r\n constructor(args?: Partial<ComplexFormModalStore<T>>) {\r\n const modalStyle = getStyle(args?.theme || 'default', 'Modal');\r\n const classNames = {\r\n ...modalStyle.classNames,\r\n ...args?.classNames\r\n }\r\n Object.assign(this, args, { classNames });\r\n makeAutoObservable(this);\r\n }\r\n\r\n setData(v: Partial<ComplexFormModalStore<T>>) {\r\n Object.assign(this, v);\r\n }\r\n\r\n close() {\r\n this.isOpen = false;\r\n this.title = '';\r\n this.formData = undefined;\r\n this.formConfig = undefined;\r\n this.layoutConfig = undefined;\r\n this.modalSize = 'md';\r\n this.scrollBehavior = 'normal';\r\n this.isDismissable = true;\r\n this.onBatchSubmit = undefined;\r\n this.onSet = undefined;\r\n this.onChange = undefined;\r\n this.onReady = undefined;\r\n this.event.removeAllListeners();\r\n }\r\n}\r\n\r\nexport async function getComplexFormData<T extends FormDataType>(v: Partial<ComplexFormModalStore<T>>) {\r\n return new Promise<T>((resolve, reject) => {\r\n const modalStyle = getStyle(v?.theme || 'default', 'Modal');\r\n const classNames = {\r\n ...modalStyle.classNames,\r\n ...v?.classNames\r\n }\r\n const complexFormModal = RootStore.Get(ComplexFormModalStore);\r\n // @ts-ignore\r\n complexFormModal.setData({\r\n ...v,\r\n classNames,\r\n isOpen: true,\r\n });\r\n complexFormModal.event.on('batchSubmit', (formData: T) => {\r\n if (complexFormModal.onBatchSubmit) {\r\n complexFormModal.onBatchSubmit(formData);\r\n } else {\r\n complexFormModal.close();\r\n resolve(formData);\r\n }\r\n });\r\n complexFormModal.event.on('abort', () => {\r\n complexFormModal.close();\r\n reject('abort');\r\n });\r\n });\r\n}\r\n","import EventEmitter from \"events\";\r\nimport React from \"react\";\r\nimport { UiSchema } from \"@rjsf/utils\";\r\nimport { makeAutoObservable } from \"mobx\";\r\nimport { Store } from \"../../store/standard/base\";\r\nimport {\r\n JSONSchemaFormState,\r\n JSONSchemaValue,\r\n} from \"../../store/standard/JSONSchemaState\";\r\nimport Provider from \"./Provider\";\r\nimport { SelectWidget } from \"../../components/JSONFormWidgets/SelectWidget\";\r\nimport { InputWidget } from \"../../components/JSONFormWidgets/InputWidget\";\r\nimport { CheckboxWidget } from \"../../components/JSONFormWidgets/CheckboxWidget\";\r\nimport { EditorWidget } from \"../../components/JSONFormWidgets/EditorWidget\";\r\nimport { RootStore } from \"../../store\";\r\nimport { SlotsToClasses, ModalSlots } from \"@nextui-org/react\";\r\nimport { getStyle, ThemeType } from \"../../themes\";\r\n\r\nexport class FormModalStore<T = { [key: string]: any }> implements Store {\r\n sid = 'FormModalStore';\r\n provider = () => <Provider />;\r\n\r\n isOpen = false;\r\n title = '';\r\n form: JSONSchemaFormState<T> = null;\r\n className: string = '';\r\n classNames?: SlotsToClasses<ModalSlots>;\r\n theme: ThemeType = \"default\";\r\n modalSize: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full' | 'xs' | '3xl' | '4xl' | '5xl' = 'md';\r\n scrollBehavior?: 'normal' | 'inside' | 'outside' = 'normal';\r\n closeOnOverlayClick = false;\r\n event = new EventEmitter();\r\n onAfterSubmit?: (data: T) => void;\r\n\r\n constructor(args?: Partial<FormModalStore>) {\r\n const modalStyle = getStyle(args?.theme || 'default', 'Modal');\r\n const classNames = {\r\n ...modalStyle.classNames,\r\n ...args?.classNames\r\n }\r\n Object.assign(this, args, { classNames });\r\n makeAutoObservable(this);\r\n }\r\n\r\n setData(v: Partial<FormModalStore>) {\r\n Object.assign(this, v);\r\n }\r\n\r\n close() {\r\n this.isOpen = false;\r\n this.title = '';\r\n this.form = null;\r\n this.modalSize = 'md';\r\n this.scrollBehavior = 'normal';\r\n this.closeOnOverlayClick = false;\r\n this.onAfterSubmit = undefined;\r\n this.event.removeAllListeners();\r\n }\r\n}\r\n\r\nexport async function getFormData<T = { [key: string]: any }>(v: Partial<FormModalStore>) {\r\n return new Promise<T>((resolve, reject) => {\r\n const modalStyle = getStyle(v?.theme || 'default', 'Modal');\r\n const classNames = {\r\n ...modalStyle.classNames,\r\n ...v?.classNames\r\n }\r\n const formModal = RootStore.Get(FormModalStore);\r\n formModal.setData({\r\n ...v,\r\n classNames,\r\n isOpen: true,\r\n });\r\n formModal.event.on('afterSubmit', (formData: T) => {\r\n if (formModal.onAfterSubmit) {\r\n formModal.onAfterSubmit(formData);\r\n } else {\r\n formModal.close();\r\n resolve(formData);\r\n }\r\n });\r\n formModal.event.on('abort', () => {\r\n formModal.close();\r\n reject('abort');\r\n });\r\n });\r\n}\r\n\r\nexport function getFormState<T>(\r\n {\r\n data,\r\n metadata = {},\r\n onSet = (v: T, form) => v,\r\n onSubmit,\r\n theme = 'default',\r\n }: {\r\n data: T;\r\n metadata?: { [key: string]: any } & Partial<JSONSchemaFormState<any>>;\r\n onSet?: (v: T, form: JSONSchemaFormState<T, UiSchema>) => T;\r\n onSubmit?: (data: T) => void;\r\n theme: ThemeType;\r\n }\r\n): JSONSchemaFormState<T, UiSchema> {\r\n const value = {};\r\n const required = [];\r\n const props = Object.entries(data).reduce((p, c) => {\r\n const [k, v] = c;\r\n\r\n const type = typeof v;\r\n p[k] = {\r\n type\r\n };\r\n\r\n value[k] = v;\r\n\r\n if (!metadata[k]) {\r\n metadata[k] = {};\r\n }\r\n\r\n if (type === 'string' || type === 'number') {\r\n if (metadata[k]?.selectOptions) {\r\n metadata[k]['ui:widget'] = SelectWidget;\r\n p[k].selectOptions = metadata[k].selectOptions;\r\n } else {\r\n if (!metadata[k]['ui:widget']) {\r\n metadata[k]['ui:widget'] = InputWidget;\r\n\r\n if (type === 'number') {\r\n p[k].inputType = 'number';\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (type === 'boolean') {\r\n metadata[k]['ui:widget'] = CheckboxWidget;\r\n metadata[k]['ui:options'] = {\r\n size: 'sm',\r\n }\r\n }\r\n\r\n if (type === 'object') {\r\n // Instead of setting up \"definitions\", the easy way to do this is to edit the json directly using the EditorWidget\r\n p[k].type = 'string';\r\n value[k] = JSON.stringify(v, null, 2);\r\n metadata[k]['ui:widget'] = EditorWidget;\r\n }\r\n\r\n if (metadata[k]?.inputType) {\r\n p[k].inputType = metadata[k].inputType;\r\n delete metadata[k].inputType;\r\n }\r\n if (metadata[k]?.title) {\r\n p[k].title = metadata[k].title || v;\r\n delete metadata[k].title;\r\n }\r\n if (metadata[k]?.description) {\r\n p[k].description = metadata[k].description;\r\n delete metadata[k].description;\r\n }\r\n\r\n if (metadata[k]?.required) {\r\n required.push(k);\r\n delete metadata[k].required;\r\n }\r\n\r\n metadata[k]['theme'] = theme;\r\n return p;\r\n }, {});\r\n const schema = {\r\n type: 'object',\r\n properties: props,\r\n required,\r\n };\r\n const form = new JSONSchemaFormState({\r\n //@ts-ignore\r\n schema,\r\n uiSchema: {\r\n 'ui:submitButtonOptions': {\r\n norender: false,\r\n submitText: 'Submit',\r\n },\r\n ...metadata,\r\n },\r\n afterSubmit(e) {\r\n if (onSubmit) {\r\n onSubmit(e.formData as T);\r\n } else {\r\n const formModal = RootStore.Get(FormModalStore);\r\n formModal.event.emit('afterSubmit', e.formData);\r\n }\r\n },\r\n value: new JSONSchemaValue({\r\n default: value,\r\n onSet: (v: T) => onSet(v, form),\r\n }),\r\n });\r\n return form as any\r\n}\r\n\r\nexport async function getSimpleFormData<T>(\r\n data: T,\r\n metadata: { [key: string]: any } & Partial<JSONSchemaFormState<any>> = {},\r\n config: Partial<FormModalStore>,\r\n onSet = (v: T, form: JSONSchemaFormState<T, UiSchema>) => {\r\n return v;\r\n },\r\n theme: ThemeType = 'default'\r\n) {\r\n const form = getFormState({ data, metadata, onSet, theme });\r\n return getFormData<T>({\r\n ...config,\r\n //@ts-ignore\r\n form\r\n });\r\n}\r\n","import { Modal, ModalBody, ModalContent, ModalHeader } from '@nextui-org/react';\r\nimport { observer } from \"mobx-react-lite\";\r\nimport { JSONSchemaForm } from \"../../components/JSONSchemaForm\";\r\nimport { useStore } from \"../../store/index\";\r\nimport Draggable from \"react-draggable\";\r\nimport { FormModalStore } from \".\";\r\nimport React from 'react';\r\n\r\nconst JSONFormModal = observer(() => {\r\n const rootStore = useStore();\r\n const formModal = rootStore.get(FormModalStore);\r\n const { form, closeOnOverlayClick } = formModal;\r\n if (!form) {\r\n return null;\r\n }\r\n return (\r\n <Modal\r\n className={formModal.className}\r\n classNames={formModal.classNames}\r\n scrollBehavior={formModal.scrollBehavior}\r\n isOpen={formModal.isOpen}\r\n size={formModal.modalSize}\r\n isDismissable={!closeOnOverlayClick}\r\n onOpenChange={(open: boolean) => {\r\n if (!open) {\r\n formModal.event.emit('abort');\r\n }\r\n }}\r\n >\r\n <div className=\"z-50 fixed top-0 left-0 w-screen h-screen flex items-center justify-center\">\r\n <Draggable handle=\".draggable-handle\">\r\n <ModalContent>\r\n {formModal.title && <ModalHeader className=\"flex flex-col gap-1 draggable-handle cursor-move\">{formModal.title}</ModalHeader>}\r\n <ModalBody className='max-h-[90vh] overflow-auto'>\r\n <JSONSchemaForm formState={form} />\r\n </ModalBody>\r\n </ModalContent>\r\n </Draggable>\r\n </div>\r\n </Modal>\r\n );\r\n});\r\n\r\nexport default JSONFormModal;\r\n\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../components/JSONForm/index.tsx","../components/JSONForm/Layouts/gridLayout.tsx","../components/JSONForm/Layouts/format.tsx","../components/JSONFormWidgets/CheckboxWidget/index.tsx","../components/JSONFormWidgets/InputWidget/index.tsx","../components/JSONFormWidgets/SelectWidget/index.tsx","../components/JSONFormWidgets/MultipleSelectWidget/index.tsx","../components/JSONFormWidgets/EditorWidget/index.tsx","../store/standard/JSONSchemaState.ts","../components/JSONSchemaForm/index.tsx","../components/ui/grid/col.tsx","../components/ui/grid/styles.tsx","../components/ui/grid/grid.tsx","../components/JSONForm/Layouts/listLayout.tsx","../components/JSONForm/Layouts/simpleLayout.tsx","../components/JSONForm/Layouts/tabLayout.tsx","../components/JSONFormWidgets/TextareaWidget/index.tsx","../components/JSONFormWidgets/DatePickerWidget/index.tsx","../module/ComplexFormModal/Provider.tsx","../module/ComplexFormModal/index.tsx","../module/FormModal/index.tsx","../module/FormModal/Provider.tsx"],"names":["React","useState","Button","errMsg","useMemo","value","useCallback","Select","SelectItem","useRef","_a","formData","toJS","SubmitButton","numColSpan","_b","_c","_d","useEffect","ChevronDown","ChevronUp","observer","EventEmitter","makeAutoObservable","Modal","ModalBody","ModalContent","ModalHeader","Draggable","Provider_default","getFormState"],"mappings":"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","sourcesContent":["import React, { Dispatch, SetStateAction } from \"react\";\nimport { ButtonProps, TabsProps } from \"@nextui-org/react\";\nimport { UiSchema } from \"@rjsf/utils\";\nimport { JSONSchemaFormState } from \"../../store/standard/JSONSchemaState\";\nimport { GridLayout } from \"./Layouts/gridLayout\";\nimport { ListLayout } from \"./Layouts/listLayout\";\nimport { SimpleLayout } from \"./Layouts/simpleLayout\";\nimport { TabLayout } from \"./Layouts/tabLayout\";\nimport { ThemeType } from \"../../themes\";\n\nconst COMPONENTS = {\n GridLayout,\n TabLayout,\n ListLayout,\n SimpleLayout,\n};\n\nexport type FormDataType = {\n [key: string]: {\n [key: string]: string | number | boolean | Record<string, string | number | boolean>;\n };\n};\n\nexport type FormConfigType<T extends FormDataType> = {\n [F in keyof T]?: {\n [X in keyof T[F]]?: {\n title?: string;\n required?: boolean;\n requiredErrMsg?: string;\n validate?: (v: any) => string | void;\n selectOptions?: { label: string; value: string }[];\n isMultipleSelect?: boolean;\n } & UiSchema;\n };\n};\n\ntype SubmitButtonProps<T extends FormDataType> = ButtonProps & { onAfterSubmit?: (formKey: FormKey<T>, data: FormDataOfKey<T>, setLoading: Dispatch<SetStateAction<boolean>>) => void };\n\ntype CombFormsCustomRender<T extends FormDataType> = (formStates: { [F in keyof T]?: JSONSchemaFormState<FormDataOfKey<T>, UiSchema> }) => React.ReactNode;\ntype CombFormsCustomRenderMap<T extends FormDataType> = {\n Top?: CombFormsCustomRender<T>;\n SubmitButtonBefore?: CombFormsCustomRender<T>;\n SubmitButtonAfter?: CombFormsCustomRender<T>;\n}\n\ntype SubformCustomRender<T extends FormDataType> = (formKey: FormKey<T>, formState: JSONSchemaFormState<FormDataOfKey<T>, UiSchema>) => React.ReactNode;\ntype SubformCustomRenderMap<T extends FormDataType> = {\n Top?: SubformCustomRender<T>;\n SubmitButtonBefore?: SubformCustomRender<T>;\n SubmitButtonAfter?: SubformCustomRender<T>;\n}\n\ntype SubformLayoutBaseConfig<T extends FormDataType, F extends keyof T> = {\n title?: string;\n titleBoxCss?: string;\n fieldLayout?: Array<keyof NonNullable<T[F]>> | Array<Array<keyof NonNullable<T[F]>> | keyof NonNullable<T[F]>>;\n submitButtonProps?: SubmitButtonProps<T>;\n customRender?: SubformCustomRenderMap<T>;\n};\n\ninterface LayoutConfigMap<T extends FormDataType> {\n GridLayout: {\n $type: 'GridLayout';\n $gridColumn?: number;\n $combFormsCustomRender?: CombFormsCustomRenderMap<T>;\n } & {\n [F in keyof T]?: SubformLayoutBaseConfig<T, F> & {\n colSpan?: number;\n cardCss?: string;\n };\n };\n TabLayout: {\n $type: 'TabLayout';\n $tabsProps?: TabsProps;\n $combFormsCustomRender?: CombFormsCustomRenderMap<T>;\n } & {\n [F in keyof T]?: SubformLayoutBaseConfig<T, F>\n };\n ListLayout: {\n $type: 'ListLayout';\n $combFormsCustomRender?: CombFormsCustomRenderMap<T>;\n } & {\n [F in keyof T]?: SubformLayoutBaseConfig<T, F>\n };\n SimpleLayout: {\n $type: 'SimpleLayout';\n $combFormsCustomRender?: CombFormsCustomRenderMap<T>;\n } & {\n [F in keyof T]?: SubformLayoutBaseConfig<T, F>\n };\n}\n\nexport type LayoutType = keyof typeof COMPONENTS;\nexport type LayoutConfigType<T extends FormDataType, L extends LayoutType> = LayoutConfigMap<T>[L];\n\nexport type FormKey<T extends FormDataType> = keyof T;\nexport type FormDataOfKey<T extends FormDataType> = T[FormKey<T>];\n\nexport type JSONFormProps<T extends FormDataType> = {\n className?: string;\n theme?: ThemeType;\n formData: T;\n formConfig?: FormConfigType<T>;\n layoutConfig?: LayoutConfigType<T, LayoutType>;\n onBatchSubmit?: (data: T, setLoading: Dispatch<SetStateAction<boolean>>) => void;\n onSet?: (v: FormDataOfKey<T>, form: JSONSchemaFormState<FormDataOfKey<T>, UiSchema>) => FormDataOfKey<T>;\n onChange?: (data: Partial<T>) => void;\n onReady?: (formStates: { [F in keyof T]?: JSONSchemaFormState<FormDataOfKey<T>, UiSchema> }) => void;\n batchSubmitButtonProps?: ButtonProps & { onBatchSubmit?: (formData: T, setLoading: Dispatch<SetStateAction<boolean>>) => void };\n};\n\nexport const JSONForm = <T extends FormDataType>(props: JSONFormProps<T>) => {\n const type = props.layoutConfig?.$type || 'SimpleLayout';\n const Comp = COMPONENTS[type];\n return (\n <div className={props.className}>\n <Comp {...props} />\n </div>\n );\n};","import React, { useEffect } from \"react\";\nimport { Card } from \"@nextui-org/react\";\nimport { FormDataType, JSONFormProps, LayoutConfigType } from \"..\";\nimport { BatchSubmitButton, SubmitButton, getFormState } from \"./format\";\nimport { JSONSchemaForm } from \"../../../components/JSONSchemaForm\";\nimport { Grid, Col } from '../../../components/ui/grid';\nimport { cn } from '../../../lib/utils';\nimport { getStyle } from \"../../../themes\";\n\nexport const GridLayout = <T extends FormDataType>(props: JSONFormProps<T>) => {\n const { layoutConfig, onBatchSubmit, batchSubmitButtonProps, onReady, theme } = props;\n const { $type, $gridColumn, $combFormsCustomRender, ...formLayout } = layoutConfig as LayoutConfigType<T, 'GridLayout'>;\n const formStates = getFormState(props, formLayout, theme);\n const cardStyle = getStyle(theme || 'default', 'Card');\n\n useEffect(() => {\n if (formStates && onReady) {\n onReady(formStates);\n }\n }, [formStates]);\n\n return (\n <>\n {$combFormsCustomRender?.Top?.(formStates)}\n <Grid numItems={$gridColumn ?? 1} className=\"gap-2\">\n {Object.keys(formStates).map((key) => {\n const layout = formLayout[key];\n return (\n <Col numColSpan={layout?.colSpan ?? 1} key={key} id={`form-${key}`}>\n <Card className={cn(\"h-full m-0 p-4 shadow-sm border dark:border-[#3e3e3e]\", cardStyle.className, layout?.cardCss)}>\n <div className={cn('mb-2 font-bold text-center', layout?.titleBoxCss)}>{layout?.title || key}</div>\n {layout?.customRender?.Top?.(key, formStates[key])}\n <JSONSchemaForm formState={formStates[key]}>\n {layout?.customRender?.SubmitButtonBefore?.(key, formStates[key])}\n {layout?.submitButtonProps && <SubmitButton formKey={key} formState={formStates[key]} buttonProps={layout.submitButtonProps} />}\n {layout?.customRender?.SubmitButtonAfter?.(key, formStates[key])}\n </JSONSchemaForm>\n </Card>\n </Col>\n );\n })}\n </Grid>\n {$combFormsCustomRender?.SubmitButtonBefore?.(formStates)}\n {(onBatchSubmit || batchSubmitButtonProps?.onBatchSubmit) && (\n <div className=\"w-full flex\">\n <BatchSubmitButton formStates={formStates} onSubmit={onBatchSubmit} buttonProps={batchSubmitButtonProps} />\n </div>\n )}\n {$combFormsCustomRender?.SubmitButtonAfter?.(formStates)}\n </>\n );\n};","import React, { useState } from \"react\";\nimport { Button } from \"@nextui-org/react\";\nimport { UiSchema } from \"@rjsf/utils\";\nimport { FormDataOfKey, FormDataType, JSONFormProps } from \"..\";\nimport { CheckboxWidget } from \"../../../components/JSONFormWidgets/CheckboxWidget\";\nimport { InputWidget } from \"../../../components/JSONFormWidgets/InputWidget\";\nimport { SelectWidget } from \"../../../components/JSONFormWidgets/SelectWidget\";\nimport { MultipleSelectWidget } from \"../../../components/JSONFormWidgets/MultipleSelectWidget\";\nimport { EditorWidget } from '../../../components/JSONFormWidgets/EditorWidget';\nimport {\n JSONSchemaFormState,\n JSONSchemaValue,\n} from \"../../../store/standard/JSONSchemaState\";\nimport { helper } from \"../../../lib/helper\";\nimport { cn } from \"../../../lib/utils\";\nimport { ThemeType } from \"../../../themes\";\n\nexport const getFormState = <T extends FormDataType>(\n props: JSONFormProps<T>,\n formLayout: { [x: string]: { fieldLayout?: any[] } } = {},\n theme: ThemeType = 'default'\n) => {\n const { formData, formConfig, onSet, onChange } = props;\n\n const formStates = {};\n\n Object.keys(formData).forEach((key) => {\n const metadata = formData[key];\n const formConfigData = formConfig?.[key] || {};\n const value = {};\n const required = [];\n const properties = Object.entries(metadata).reduce((p, c: any) => {\n const [k, v] = c;\n\n const type = typeof v;\n p[k] = {\n type,\n };\n\n value[k] = v;\n\n if (!formConfigData[k]) {\n formConfigData[k] = {};\n }\n\n if (formConfigData[k]?.title) {\n p[k].title = formConfigData[k].title || k;\n }\n\n if (formConfigData[k]?.required) {\n required.push(k);\n }\n\n if (type === \"string\" || type === \"number\") {\n if (formConfigData[k]?.selectOptions) {\n if (formConfigData[k]?.isMultipleSelect) {\n formConfigData[k]['ui:widget'] = MultipleSelectWidget;\n } else {\n formConfigData[k]['ui:widget'] = SelectWidget;\n }\n } else {\n if (!formConfigData[k][\"ui:widget\"]) {\n formConfigData[k][\"ui:widget\"] = InputWidget;\n\n if (type === \"number\") {\n formConfigData[k]['ui:options'] = {\n ...formConfigData[k]['ui:options'],\n inputType: 'number',\n };\n }\n\n if (helper.json.isJsonString(v)) {\n formConfigData[k]['ui:widget'] = EditorWidget;\n formConfigData[k][\"ui:options\"] = {\n ...formConfigData[k][\"ui:options\"],\n jsonStrSpace: 2,\n };\n }\n }\n }\n }\n\n if (type === \"boolean\") {\n formConfigData[k][\"ui:widget\"] = CheckboxWidget;\n }\n\n if (type === 'object') {\n // Instead of setting up \"definitions\", the easy way to do this is to edit the json directly using the EditorWidget\n p[k].type = 'string';\n value[k] = JSON.stringify(v, null, 2);\n formConfigData[k]['ui:widget'] = EditorWidget;\n }\n\n formConfigData[k]['theme'] = theme;\n return p;\n }, {});\n const schema = {\n type: \"object\",\n properties,\n required,\n };\n const form = new JSONSchemaFormState({\n // @ts-ignore\n schema,\n uiSchema: {\n \"ui:submitButtonOptions\": {\n norender: true,\n },\n ...formConfigData,\n layout: formLayout[key]?.fieldLayout,\n },\n // afterSubmit: async (e) => {\n // onSubmit?.(key as FormKey<T>, e.formData as FormDataOfKey<T>);\n // },\n afterChange: (e, id) => {\n const { formData } = e;\n if (formData && id) {\n const field = id.replace('root_', '');\n const data = {\n [key]: {\n [field]: formData[field],\n }\n };\n // @ts-ignore\n onChange?.(data);\n }\n },\n value: new JSONSchemaValue({\n default: value as FormDataOfKey<T>,\n onSet: (v) => {\n if (onSet) {\n return onSet(v as FormDataOfKey<T>, form);\n }\n return v;\n },\n }),\n });\n\n formStates[key] = form;\n });\n\n return formStates as {\n [F in keyof T]?: JSONSchemaFormState<FormDataOfKey<T>, UiSchema>;\n };\n};\n\nexport const BatchSubmitButton = ({ formStates, onSubmit, buttonProps }) => {\n const { className, onClick, children, isLoading, onBatchSubmit, ...rest } = buttonProps || {};\n const [loading, setLoading] = useState(false);\n return (\n <Button\n className={cn('mt-4 ml-auto', className)}\n size=\"sm\"\n color=\"primary\"\n isLoading={loading}\n onClick={(e) => {\n const formData = {};\n const formKeys = Object.keys(formStates);\n for (const formKey of formKeys) {\n const form = formStates[formKey];\n const current = form.formRef.current;\n if (current) {\n current.submit();\n // const errors = current.state.errors;\n // if (errors.length > 0) {\n // return;\n // }\n\n const data = current.state.formData;\n const uiSchema = current.state.uiSchema;\n const keys = Object.keys(uiSchema);\n for (const key of keys) {\n const uiConfig = uiSchema[key];\n if (uiConfig) {\n const { required, validate } = uiConfig;\n if (required) {\n if (data[key] === undefined || data[key] === null || data[key] === '') {\n return;\n }\n }\n if (validate) {\n const errMsg = validate(data[key]);\n if (errMsg) {\n return;\n }\n }\n }\n }\n\n formData[formKey] = data;\n } else {\n console.error('formRef.current is null');\n return;\n }\n }\n onSubmit?.(formData, setLoading);\n onBatchSubmit?.(formData, setLoading);\n }}\n {...rest}\n >\n {children || 'Submit'}\n </Button>\n );\n};\n\nexport const SubmitButton = ({ formKey, formState, buttonProps }) => {\n const { className, onClick, children, isLoading, onAfterSubmit, ...rest } = buttonProps || {};\n const [loading, setLoading] = useState(false);\n return (\n <div className=\"w-full flex\">\n <Button\n className={cn('mt-4 ml-auto', className)}\n type=\"submit\"\n color=\"primary\"\n size=\"sm\"\n isLoading={loading}\n onClick={(e) => {\n let formData = {};\n const current = formState.formRef.current;\n if (current) {\n current.submit();\n // const errors = current.state.errors;\n // if (errors.length > 0) {\n // return;\n // }\n\n formData = current.state.formData;\n const uiSchema = current.state.uiSchema;\n const keys = Object.keys(uiSchema);\n for (const key of keys) {\n const uiConfig = uiSchema[key];\n if (uiConfig) {\n const { required, validate } = uiConfig;\n if (required) {\n if (formData[key] === undefined || formData[key] === null || formData[key] === '') {\n return;\n }\n }\n if (validate) {\n const errMsg = validate(formData[key]);\n if (errMsg) {\n return;\n }\n }\n }\n }\n }\n onAfterSubmit?.(formKey, formData, setLoading);\n }}\n {...rest}\n >\n {children || 'Submit'}\n </Button>\n </div>\n );\n};\n","import React, { useMemo, useState } from \"react\";\nimport { Checkbox, CheckboxProps } from \"@nextui-org/react\";\nimport { WidgetProps } from \"@rjsf/utils\";\nimport { Check } from \"lucide-react\";\nimport { cn } from \"../../../lib/utils\";\nimport { getStyle } from \"../../../themes\";\n\ntype Options = {\n className?: string;\n nextuiClassNames?: CheckboxProps[\"classNames\"];\n size: CheckboxProps[\"size\"];\n color: CheckboxProps[\"color\"];\n description?: string;\n descriptionClassName?: string;\n};\n\nexport interface CheckboxWidgetProps extends WidgetProps {\n options: Options;\n}\n\nexport interface CheckboxWidgetUIOptions {\n \"ui:widget\": (props: CheckboxWidgetProps) => JSX.Element;\n \"ui:options\": Options;\n}\n\nexport function CheckboxWidget({\n onChange, options, label, value, disabled, uiSchema\n}: CheckboxWidgetProps) {\n const {\n className,\n nextuiClassNames,\n size = 'sm',\n color = 'primary',\n description,\n descriptionClassName,\n } = options;\n const { validate, theme } = uiSchema;\n const [errMsg, setErrMsg] = useState<string>('');\n const isInvalid = !!errMsg;\n const classNames = useMemo(() => {\n const themeStyle = getStyle(theme || 'default', 'CheckboxWidget');\n return {\n ...themeStyle.classNames,\n ...nextuiClassNames\n }\n }, [theme, nextuiClassNames]);\n return (\n <>\n <Checkbox\n className={cn('max-w-full', className)}\n classNames={classNames}\n defaultSelected={value}\n isDisabled={disabled}\n icon={<Check className=\"bg-white dark:bg-black\" />}\n color={color}\n size={size}\n onChange={(e: any) => {\n const checked = e.target.checked;\n onChange(checked);\n }}\n onBlur={() => {\n if (validate) {\n const errMsg = validate(value);\n setErrMsg(errMsg);\n return;\n }\n setErrMsg('');\n }}\n >\n {label}\n </Checkbox>\n {description && <div className={cn('mt-1 text-xs text-[#A1A1A9] dark:text-[#717179]', descriptionClassName)}>{description}</div>}\n {isInvalid && <div className=\"mt-2 text-xs text-[#DF3562]\">{errMsg}</div>}\n </>\n );\n}\n\n","// @ts-nocheck\nimport React, { ReactNode, useMemo, useRef } from \"react\";\nimport { Input, InputProps, InputSlots, SlotsToClasses } from \"@nextui-org/react\";\nimport { WidgetProps } from \"@rjsf/utils\";\nimport { cn } from \"../../../lib/utils\";\nimport { getStyle } from \"../../../themes\";\n\ntype Options = {\n className?: string;\n nextuiClassNames?: SlotsToClasses<InputSlots>;\n labelPlacement?: InputProps[\"labelPlacement\"];\n size: InputProps[\"size\"];\n placeholder?: string;\n inputType?: 'text' | 'number' | 'password';\n color?: InputProps[\"color\"];\n variant?: InputProps[\"variant\"];\n radius?: InputProps[\"radius\"];\n startContent?: ReactNode;\n endContent?: ReactNode;\n description?: string;\n min?: number;\n max?: number;\n};\n//@ts-ignore \nexport interface InputWidgetProps extends WidgetProps {\n options: Options;\n}\n\nexport interface InputWidgetUIOptions {\n \"ui:widget\": (props: InputWidgetProps) => JSX.Element;\n \"ui:options\": Options;\n}\n\nexport function InputWidget(props: InputWidgetProps) {\n const { onChange, options, label, value, required, disabled, uiSchema } = props;\n const {\n className,\n nextuiClassNames,\n labelPlacement = 'inside',\n size = 'sm',\n inputType = 'text',\n color,\n variant,\n radius,\n startContent,\n endContent,\n description,\n min,\n max\n } = options;\n const { requiredErrMsg, validate, theme } = uiSchema;\n const placeholder = uiSchema['ui:options']?.placeholder;\n const isFirstChecked = useRef(true);\n const classNames = useMemo(() => {\n const themeStyle = getStyle(theme || 'default', 'InputWidget');\n return {\n ...themeStyle.classNames,\n ...nextuiClassNames\n }\n }, [theme, nextuiClassNames]);\n return (\n <Input\n className={cn('w-full', className)}\n classNames={classNames}\n label={label}\n placeholder={placeholder}\n value={value}\n isRequired={required}\n isDisabled={disabled}\n size={size}\n labelPlacement={labelPlacement}\n description={description}\n type={inputType}\n color={color}\n variant={variant}\n radius={radius}\n startContent={startContent}\n endContent={endContent}\n onChange={(e) => onChange(e.target.value)}\n min={min}\n max={max}\n validate={() => {\n if (isFirstChecked.current) {\n isFirstChecked.current = false;\n return true;\n }\n if (value === '' && required) {\n return requiredErrMsg || 'This field is required';\n }\n if (validate) {\n const errMsg = validate(value);\n return errMsg;\n }\n return true;\n }}\n />\n );\n}\n\n","import React, { useCallback, useMemo, useState } from \"react\";\nimport { WidgetProps } from \"@rjsf/utils\";\nimport { Select, SelectItem, SelectProps, SelectSlots, SlotsToClasses } from \"@nextui-org/react\";\nimport { cn } from \"../../../lib/utils\";\nimport { getStyle } from \"../../../themes\";\n\ntype Options = {\n className?: string;\n nextuiClassNames?: SlotsToClasses<SelectSlots>;\n listboxProps?: SelectProps['listboxProps'];\n labelPlacement?: SelectProps[\"labelPlacement\"];\n placeholder?: string;\n size: SelectProps[\"size\"];\n color?: SelectProps[\"color\"];\n variant?: SelectProps[\"variant\"];\n radius?: SelectProps[\"radius\"];\n description?: string;\n};\n\nexport interface SelectWidgetProps extends WidgetProps {\n options: Options;\n}\n\nexport interface SelectWidgetUIOptions {\n \"ui:widget\": (props: SelectWidgetProps) => JSX.Element;\n \"ui:options\": Options;\n}\n\nexport function SelectWidget(props: SelectWidgetProps) {\n const { onChange, options, label, value, required, disabled, uiSchema } = props;\n const {\n className,\n nextuiClassNames,\n listboxProps = {\n itemClasses: {\n base: [\n 'rounded-lg',\n 'text-default-500',\n 'transition-opacity',\n 'data-[hover=true]:text-foreground',\n 'data-[hover=true]:bg-default-100',\n 'dark:data-[hover=true]:bg-default-50',\n 'data-[selectable=true]:focus:bg-default-50',\n 'data-[pressed=true]:opacity-70',\n 'data-[focus-visible=true]:ring-default-500',\n ],\n },\n },\n labelPlacement = 'inside',\n size = 'sm',\n color,\n variant,\n radius,\n description,\n } = options;\n const { selectOptions = [], requiredErrMsg, validate, theme } = uiSchema;\n const placeholder = uiSchema['ui:options']?.placeholder;\n const classNames = useMemo(() => {\n const themeStyle = getStyle(theme || 'default', 'MultipleSelectWidget');\n return {\n ...themeStyle.classNames,\n ...nextuiClassNames\n }\n }, [theme, nextuiClassNames]);\n const [errMsg, setErrMsg] = useState<string>('');\n const isInvalid = !!errMsg;\n const checkValue = useCallback((value) => {\n if (!value && required) {\n setErrMsg(requiredErrMsg || 'This field is required');\n return;\n }\n if (validate) {\n const errMsg = validate(value);\n setErrMsg(errMsg);\n return;\n }\n setErrMsg('');\n }, []);\n\n return (\n <Select\n label={label?.trim()}\n className={cn('w-full', className)}\n classNames={classNames}\n labelPlacement={labelPlacement}\n placeholder={placeholder}\n size={size}\n isRequired={required}\n isDisabled={disabled}\n isInvalid={isInvalid}\n description={description}\n listboxProps={listboxProps}\n variant={variant}\n radius={radius}\n color={isInvalid ? 'danger' : color}\n errorMessage={isInvalid && errMsg}\n selectedKeys={[value]}\n onSelectionChange={(v) => {\n const keys = Array.from(v) as string[];\n const _v = keys[0];\n onChange(_v);\n checkValue(_v);\n }}\n >\n {selectOptions.map((item) => (\n <SelectItem key={item.value} value={item.value}>\n {item.label}\n </SelectItem>\n ))}\n </Select>\n );\n}\n\n\n","import React, { useCallback, useMemo, useState } from 'react';\nimport { Chip, Select, SelectItem, SelectProps, SelectedItems } from '@nextui-org/react';\nimport { WidgetProps } from '@rjsf/utils';\nimport { cn } from \"../../../lib/utils\";\nimport { getStyle } from '../../../themes';\n\ntype Options = {\n className?: string;\n nextuiClassNames?: SelectProps['classNames'];\n labelPlacement?: SelectProps['labelPlacement'];\n listboxProps?: SelectProps['listboxProps'];\n size: SelectProps['size'];\n color?: SelectProps['color'];\n placeholder?: string;\n description?: string;\n renderValue?: (\n items: SelectedItems<{\n label: string;\n value: string;\n }>,\n ) => React.ReactNode;\n};\n\nexport interface MultipleSelectWidgetProps extends WidgetProps {\n options: Options;\n}\n\nexport interface MultipleSelectWidgetUIOptions {\n 'ui:widget': (props: MultipleSelectWidgetProps) => JSX.Element;\n 'ui:options': Options;\n}\n\nexport function MultipleSelectWidget(props: MultipleSelectWidgetProps) {\n const { onChange, options, label, value, required, uiSchema = {} } = props;\n const { selectOptions = [], requiredErrMsg, validate, theme } = uiSchema;\n const {\n className,\n nextuiClassNames,\n labelPlacement = 'inside',\n listboxProps = {},\n size = 'sm',\n color,\n description,\n renderValue = DefaultRenderValue\n } = options;\n const placeholder = uiSchema['ui:options']?.placeholder || 'Select an option';\n const selectedKeys = useMemo(() => {\n return value ? value.split(',') : [];\n }, [value]);\n const classNames = useMemo(() => {\n const themeStyle = getStyle(theme || 'default', 'MultipleSelectWidget');\n return {\n ...themeStyle.classNames,\n ...nextuiClassNames\n }\n }, [theme, nextuiClassNames]);\n const [errMsg, setErrMsg] = useState<string>('');\n const isInvalid = !!errMsg;\n const checkValue = useCallback((value) => {\n if (!value && required) {\n setErrMsg(requiredErrMsg || 'This field is required');\n return;\n }\n if (validate) {\n const errMsg = validate(value);\n setErrMsg(errMsg);\n return;\n }\n setErrMsg('');\n }, []);\n\n return (\n <Select\n className={cn('w-full', className)}\n label={label}\n isMultiline\n selectionMode=\"multiple\"\n labelPlacement={labelPlacement}\n size={size}\n placeholder={placeholder}\n selectedKeys={selectedKeys}\n isRequired={required}\n color={isInvalid ? 'danger' : color}\n errorMessage={isInvalid && errMsg}\n onSelectionChange={(v) => {\n const keys = Array.from(v) as string[];\n const _v = keys.join(',');\n onChange(_v);\n checkValue(_v);\n }}\n items={selectOptions}\n classNames={classNames}\n listboxProps={{\n itemClasses: {\n base: [\n 'rounded-lg',\n 'text-default-500',\n 'transition-opacity',\n 'data-[hover=true]:text-foreground',\n 'data-[hover=true]:bg-default-100',\n 'dark:data-[hover=true]:bg-default-50',\n 'data-[selectable=true]:focus:bg-default-50',\n 'data-[pressed=true]:opacity-70',\n 'data-[focus-visible=true]:ring-default-500',\n ],\n },\n ...listboxProps\n }}\n description={description}\n renderValue={renderValue}\n >\n {selectOptions.map((item) => (\n <SelectItem key={item.value} textValue={item.label}>\n {item.label}\n </SelectItem>\n ))}\n </Select>\n );\n}\n\nfunction DefaultRenderValue(\n items: SelectedItems<{\n label: string;\n value: string;\n }>,\n) {\n return (\n <div className=\"flex flex-wrap gap-1\">\n {items.map((item) => (\n <Chip className=\"rounded-sm h-auto py-[2px] text-xs\" color=\"secondary\" size=\"sm\" key={item.key}>\n {item.textValue}\n </Chip>\n ))}\n </div>\n );\n}\n","import React, { useRef, useState } from \"react\";\nimport MonacoEditor, { EditorProps } from \"@monaco-editor/react\";\nimport { WidgetProps } from \"@rjsf/utils\";\nimport { Button } from \"@nextui-org/react\";\nimport { cn } from \"../../../lib/utils\";\nimport { helper } from \"../../../lib/helper\";\nimport { _ } from '../../../lib/lodash';\n\ntype Options = {\n editorHeight?: string;\n readOnly?: boolean;\n language?: string;\n languageSelectorOptions?: { label: string; value: string }[];\n onChangeLanguage?: (v: string) => void;\n onRun?: (v: string) => void;\n onMount?: EditorProps['onMount'];\n jsonStrSpace?: number; // Adds indentation, white space, and line break characters to the return-value JSON text to make it easier to read.\n labelClassName?: string;\n description?: string;\n descriptionClassName?: string;\n editorBoxClassName?: string;\n errMsgClassName?: string;\n};\n\nexport interface EditorWidgetProps extends WidgetProps {\n options: Options;\n}\n\nexport type EditorWidgetUIOptions = {\n \"ui:widget\": (props: EditorWidgetProps) => JSX.Element;\n \"ui:options\": Options;\n};\n\nexport const EditorWidget = ({ label, options = {}, value, required, uiSchema, disabled, onChange }: EditorWidgetProps) => {\n const { editorHeight = '200px', readOnly = false, language = 'json', jsonStrSpace, languageSelectorOptions = [], labelClassName, description, descriptionClassName, editorBoxClassName, errMsgClassName, onChangeLanguage, onRun, onMount } = options;\n const { requiredErrMsg, validate } = uiSchema;\n const [selectedLanguage, setSelectedLanguage] = useState('');\n const [runLoading, setRunLoading] = useState(false);\n const showLanguageSelector = languageSelectorOptions.length > 0;\n const [errMsg, setErrMsg] = useState<string>('');\n const isInvalid = !!errMsg;\n const debouncedCheckValue = useRef(\n _.debounce(async (value) => {\n if (!value && required) {\n setErrMsg(requiredErrMsg || 'This field is required');\n return;\n }\n if (validate) {\n const errMsg = validate(value);\n setErrMsg(errMsg);\n return;\n }\n setErrMsg('');\n }, 1000),\n ).current;\n\n const labelText = label.trim();\n const showLabel = labelText || showLanguageSelector;\n\n return (\n <div className='flex flex-col relative'>\n {\n showLabel && <div className={cn('flex justify-between items-center mb-2', labelClassName)}>\n {label && (\n <label\n className=\"mr-2 flex items-center text-sm\"\n >\n {label}\n {required && <span className=\"font-bold text-red-600\">*</span>}\n </label>\n )}\n {showLanguageSelector && (\n <select\n className=\"w-full p-3 text-sm rounded-md bg-[#F4F4F5] dark:bg-[#27272A]\"\n value={selectedLanguage}\n onChange={(event) => {\n const v = event.target.value;\n setSelectedLanguage(v);\n onChangeLanguage && onChangeLanguage(v);\n }}\n >\n {languageSelectorOptions.map((item) => {\n return <option key={item.value} value={item.value}>{item.label}</option>\n })}\n </select>\n )}\n </div>\n }\n {description && <div className={cn('mb-2 text-xs text-[#A1A1A9] dark:text-[#717179]', descriptionClassName)}>{description}</div>}\n <div className={cn(\"rounded-lg overflow-hidden relative border dark:border-[#2c2c2c]\", editorBoxClassName)}>\n <MonacoEditor\n options={{ readOnly: readOnly || disabled, minimap: { enabled: false } }}\n height={editorHeight}\n theme=\"vs-dark\"\n language={selectedLanguage ? selectedLanguage : language}\n value={value}\n onChange={(v) => {\n onChange(v);\n debouncedCheckValue(v);\n }}\n onMount={(editor, monaco) => {\n onMount && onMount(editor, monaco);\n if (language === 'json' && jsonStrSpace && value) {\n const json = helper.json.safeParse(value);\n editor.setValue(JSON.stringify(json, null, jsonStrSpace));\n }\n monaco.editor.defineTheme('myCustomTheme', {\n base: 'vs-dark',\n inherit: true,\n rules: [],\n colors: {\n 'editor.background': '#09090B',\n },\n });\n monaco.editor.setTheme('myCustomTheme');\n }}\n />\n </div>\n {isInvalid && <div className={cn(\"mt-2 text-xs text-[#DF3562]\", errMsgClassName)}>{errMsg}</div>}\n {onRun && (\n <Button\n className=\"absolute bottom-2 right-4\"\n size=\"sm\"\n isLoading={runLoading}\n onClick={async () => {\n setRunLoading(true);\n await onRun(value);\n setRunLoading(false);\n }}\n >\n Run\n </Button>\n )}\n </div>\n );\n};\n\n","import { createRef } from \"react\";\nimport Form, { IChangeEvent } from \"@rjsf/core\";\nimport { RJSFSchema, UiSchema } from \"@rjsf/utils\";\nimport validator from \"@rjsf/validator-ajv8\";\nimport { action, computed, makeObservable, observable, toJS } from \"mobx\";\nimport { helper } from \"../../lib/helper\";\n\nexport class JSONSchemaFormState<T, U = UiSchema> {\n value: JSONSchemaValue<T> = new JSONSchemaValue();\n schema: RJSFSchema;\n uiSchema: U;\n reactive: boolean = true;\n readonly = false;\n liveValidate = false;\n validator = validator;\n formRef: React.RefObject<Form>;\n\n get formData() {\n return this.value.get();\n }\n set formData(value: T) {\n this.value.set(value);\n }\n get dynamicData() {\n return this.getDymaicData();\n }\n getDymaicData = () => {\n return { ready: true };\n };\n onChange = (e: IChangeEvent<T>, id?: string) => {\n this.value.set(e.formData);\n if (this.afterChange) {\n this.afterChange(e, id);\n }\n };\n onSubmit = (e: IChangeEvent<T>) => {\n if (this.afterSubmit) {\n this.afterSubmit(e);\n }\n };\n afterSubmit: (e: IChangeEvent<T>) => void;\n afterChange: (e: IChangeEvent<T>, id?: string) => void;\n reset({ force = false } = {}) {\n if (force) {\n this.value.value = this.value.default;\n } else {\n this.value.reset();\n }\n return this;\n }\n customValidate = (formData: T, errors: any) => errors;\n constructor(args: Partial<JSONSchemaFormState<T, U>> = {}) {\n Object.assign(this, args, { formRef: createRef() });\n if (this.reactive) {\n makeObservable(this, {\n formData: computed,\n });\n }\n }\n}\n\nexport class JSONSchemaValue<T> {\n value?: T = null as T;\n default?: T = null as T;\n constructor(args: Partial<JSONSchemaValue<T>> = {}) {\n if (!args.value && args.default) {\n args.value = args.default;\n }\n Object.assign(this, args);\n makeObservable(this, {\n value: observable,\n set: action,\n });\n }\n set(value: Partial<T>) {\n value = this.onSet(value);\n const newVal = helper.deepMerge(this.value, value);\n this.value = toJS(newVal);\n return this.value;\n }\n onSet(value: Partial<T>) {\n return value;\n }\n get() {\n return this.getFormat(this.value);\n }\n getFormat(value: T) {\n return value;\n }\n reset() {\n this.set(this.default);\n }\n}\n","import React, { useState } from \"react\";\nimport { Button } from \"@nextui-org/react\";\nimport Form from \"@rjsf/core\";\nimport {\n type ErrorListProps,\n type FieldTemplateProps,\n type ObjectFieldTemplateProps,\n type SubmitButtonProps,\n} from \"@rjsf/utils\";\nimport * as Utils from \"@rjsf/utils\"\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { observer } from \"mobx-react-lite\";\nimport { cn } from \"../../lib/utils\";\nimport { JSONSchemaFormState } from \"../../store/standard/JSONSchemaState\";\nimport { toJS } from \"mobx\";\n\nfunction FieldTemplate(props: FieldTemplateProps) {\n const { id, classNames, label, help, required, description, errors, children, schema, uiSchema } = props;\n\n if (uiSchema && uiSchema['ui:widget'] === 'hidden') { return null; }\n\n // const hideLabel = schema.type === 'object' || schema.type === 'boolean';\n\n const isDate = uiSchema && uiSchema['ui:widget'] === 'date';\n const isDateTime = uiSchema && uiSchema['ui:widget'] === 'date-time';\n const isTime = uiSchema && uiSchema['ui:widget'] === 'time';\n const showLabel = isDate || isDateTime || isTime;\n\n return (\n <div className={cn(classNames)}>\n {showLabel && (\n <label htmlFor={id} className={cn('flex items-center h-8')}>\n <span className=\"text-sm\">{label}</span>\n {required && <span className=\"font-bold text-red-600\">*</span>}\n </label>\n )}\n\n {/* {description} */}\n {/* {children} */}\n {/* {help} */}\n\n {children}\n </div>\n );\n}\n\nconst renderLayout = (layout: any[], fields: { [k: string]: React.ReactElement }, n = 1) => {\n n++;\n return layout.map((item, index) => {\n if (Array.isArray(item)) {\n const even = (n & 1) === 0;\n return (\n <div key={index} className={cn('w-full flex justify-between items-center space-x-2', even ? 'flex-row items-start' : 'flex-col')}>\n {renderLayout(item, fields, n)}\n </div>\n );\n } else {\n return (\n <div className=\"w-full\" key={index}>\n {fields[item]}\n </div>\n );\n }\n });\n};\n\nconst ObjectFieldTemplate = ({ title, idSchema: { $id }, properties, uiSchema: { layout } }: ObjectFieldTemplateProps) => {\n const [opened, setOpened] = useState(false);\n const fields = Object.fromEntries(properties.map((item) => [item.name, item.content]));\n return (\n <div className=\"w-full space-y-2.5\">\n {$id === 'root' ? (\n layout ? (\n renderLayout(layout, fields)\n ) : (\n properties.map((element) => {\n return (\n <div key={element.content.key}>\n {element.content}\n </div>\n );\n })\n )\n ) : (\n <>\n <div\n className=\"mt-5 mb-[10px] flex justify-between items-center cursor-pointer border-t-[1px solid #E5E5EA] py-[5px] hover:bg-[#F2F2F7] dark:hover:bg-gray-900\"\n onClick={() => setOpened((o) => !o)}\n >\n <div className=\"text-gray-900 dark:text-gray-100 font-bold text-base\">{title}</div>\n {opened ? <ChevronUp /> : <ChevronDown />}\n </div>\n <div className={cn('mt-2 space-y-2.5', opened ? 'block' : 'hidden')}>\n {layout\n ? renderLayout(layout, fields)\n : properties.map((element) => {\n return (\n <div key={element.content.key}>\n {element.content}\n </div>\n );\n })}\n </div>\n </>\n )}\n </div>\n );\n};\n\nconst ErrorListTemplate = ({ errors }: ErrorListProps) => {\n return (\n <div>\n <div className=\"font-bold\">Errors</div>\n <div className=\"mt-[10px]\">\n {errors.map((error) => (\n <div className=\"mb-[10px]\" color=\"red\" key={error.property}>\n {error.stack}\n </div>\n ))}\n </div>\n </div>\n );\n};\n\nconst SubmitButton = ({ uiSchema }: SubmitButtonProps) => {\n const { submitText, norender, props: submitButtonProps = {} } = Utils.getSubmitButtonOptions(uiSchema);\n if (norender) {\n return null;\n }\n return (\n <div className=\"flex justify-end mt-4\">\n <Button type=\"submit\" color='primary' size='sm'>{submitText}</Button>\n </div>\n );\n};\n\ninterface Props {\n formState: JSONSchemaFormState<any>;\n children?: any;\n}\n\nexport const JSONSchemaForm = observer(({ children, formState }: Props) => {\n if (!formState?.dynamicData?.ready) return <></>;\n return (\n <Form\n showErrorList=\"bottom\"\n templates={{\n ObjectFieldTemplate,\n FieldTemplate,\n ErrorListTemplate,\n ButtonTemplates: { SubmitButton },\n }}\n formData={toJS(formState.formData)}\n readonly={formState.readonly}\n uiSchema={formState.uiSchema}\n schema={formState.schema}\n onChange={formState.onChange}\n onSubmit={formState.onSubmit}\n validator={formState.validator}\n customValidate={formState.customValidate}\n ref={formState.formRef}\n >\n {children && children}\n </Form>\n );\n});\n","import React from 'react';\nimport { colSpan, colSpanLg, colSpanMd, colSpanSm, GridClassesMapping } from './styles';\nimport { cn } from '../../../lib/utils';\n\nexport interface ColProps extends React.HTMLAttributes<HTMLDivElement> {\n numColSpan?: number;\n numColSpanSm?: number;\n numColSpanMd?: number;\n numColSpanLg?: number;\n}\n\nconst Col = React.forwardRef<HTMLDivElement, ColProps>((props, ref) => {\n const { numColSpan = 1, numColSpanSm, numColSpanMd, numColSpanLg, children, className, ...other } = props;\n const getColSpan = (numColSpan: number | undefined, colSpanMapping: GridClassesMapping): string => {\n if (!numColSpan) return '';\n if (!Object.keys(colSpanMapping).includes(String(numColSpan))) return '';\n return colSpanMapping[numColSpan];\n };\n\n const getColSpanClassNames = () => {\n const spanBase = getColSpan(numColSpan, colSpan);\n const spanSm = getColSpan(numColSpanSm, colSpanSm);\n const spanMd = getColSpan(numColSpanMd, colSpanMd);\n const spanLg = getColSpan(numColSpanLg, colSpanLg);\n return cn(spanBase, spanSm, spanMd, spanLg);\n };\n\n return (\n <div ref={ref} className={cn(getColSpanClassNames(), className)} {...other}>\n {children}\n </div>\n );\n});\n\nCol.displayName = 'Col';\n\nexport default Col;\n","export type GridClassesMapping = {\n [key: string]: string;\n};\n\nexport const gridCols: GridClassesMapping = {\n 0: 'grid-cols-none',\n 1: 'grid-cols-1',\n 2: 'grid-cols-2',\n 3: 'grid-cols-3',\n 4: 'grid-cols-4',\n 5: 'grid-cols-5',\n 6: 'grid-cols-6',\n 7: 'grid-cols-7',\n 8: 'grid-cols-8',\n 9: 'grid-cols-9',\n 10: 'grid-cols-10',\n 11: 'grid-cols-11',\n 12: 'grid-cols-12',\n};\n\nexport const gridColsSm: GridClassesMapping = {\n 0: 'sm:grid-cols-none',\n 1: 'sm:grid-cols-1',\n 2: 'sm:grid-cols-2',\n 3: 'sm:grid-cols-3',\n 4: 'sm:grid-cols-4',\n 5: 'sm:grid-cols-5',\n 6: 'sm:grid-cols-6',\n 7: 'sm:grid-cols-7',\n 8: 'sm:grid-cols-8',\n 9: 'sm:grid-cols-9',\n 10: 'sm:grid-cols-10',\n 11: 'sm:grid-cols-11',\n 12: 'sm:grid-cols-12',\n};\n\nexport const gridColsMd: GridClassesMapping = {\n 0: 'md:grid-cols-none',\n 1: 'md:grid-cols-1',\n 2: 'md:grid-cols-2',\n 3: 'md:grid-cols-3',\n 4: 'md:grid-cols-4',\n 5: 'md:grid-cols-5',\n 6: 'md:grid-cols-6',\n 7: 'md:grid-cols-7',\n 8: 'md:grid-cols-8',\n 9: 'md:grid-cols-9',\n 10: 'md:grid-cols-10',\n 11: 'md:grid-cols-11',\n 12: 'md:grid-cols-12',\n};\n\nexport const gridColsLg: GridClassesMapping = {\n 0: 'lg:grid-cols-none',\n 1: 'lg:grid-cols-1',\n 2: 'lg:grid-cols-2',\n 3: 'lg:grid-cols-3',\n 4: 'lg:grid-cols-4',\n 5: 'lg:grid-cols-5',\n 6: 'lg:grid-cols-6',\n 7: 'lg:grid-cols-7',\n 8: 'lg:grid-cols-8',\n 9: 'lg:grid-cols-9',\n 10: 'lg:grid-cols-10',\n 11: 'lg:grid-cols-11',\n 12: 'lg:grid-cols-12',\n};\n\nexport const colSpan: GridClassesMapping = {\n 1: 'col-span-1',\n 2: 'col-span-2',\n 3: 'col-span-3',\n 4: 'col-span-4',\n 5: 'col-span-5',\n 6: 'col-span-6',\n 7: 'col-span-7',\n 8: 'col-span-8',\n 9: 'col-span-9',\n 10: 'col-span-10',\n 11: 'col-span-11',\n 12: 'col-span-12',\n 13: 'col-span-13',\n};\n\nexport const colSpanSm: GridClassesMapping = {\n 1: 'sm:col-span-1',\n 2: 'sm:col-span-2',\n 3: 'sm:col-span-3',\n 4: 'sm:col-span-4',\n 5: 'sm:col-span-5',\n 6: 'sm:col-span-6',\n 7: 'sm:col-span-7',\n 8: 'sm:col-span-8',\n 9: 'sm:col-span-9',\n 10: 'sm:col-span-10',\n 11: 'sm:col-span-11',\n 12: 'sm:col-span-12',\n 13: 'sm:col-span-13',\n};\n\nexport const colSpanMd: GridClassesMapping = {\n 1: 'md:col-span-1',\n 2: 'md:col-span-2',\n 3: 'md:col-span-3',\n 4: 'md:col-span-4',\n 5: 'md:col-span-5',\n 6: 'md:col-span-6',\n 7: 'md:col-span-7',\n 8: 'md:col-span-8',\n 9: 'md:col-span-9',\n 10: 'md:col-span-10',\n 11: 'md:col-span-11',\n 12: 'md:col-span-12',\n 13: 'md:col-span-13',\n};\n\nexport const colSpanLg: GridClassesMapping = {\n 1: 'lg:col-span-1',\n 2: 'lg:col-span-2',\n 3: 'lg:col-span-3',\n 4: 'lg:col-span-4',\n 5: 'lg:col-span-5',\n 6: 'lg:col-span-6',\n 7: 'lg:col-span-7',\n 8: 'lg:col-span-8',\n 9: 'lg:col-span-9',\n 10: 'lg:col-span-10',\n 11: 'lg:col-span-11',\n 12: 'lg:col-span-12',\n 13: 'lg:col-span-13',\n};\n","import React from 'react';\nimport { GridClassesMapping, gridCols, gridColsLg, gridColsMd, gridColsSm } from './styles';\nimport { cn } from '../../../lib/utils';\n\nconst getGridCols = (numCols: number | undefined, gridColsMapping: GridClassesMapping): string => {\n if (!numCols) return '';\n if (!Object.keys(gridColsMapping).includes(String(numCols))) return '';\n return gridColsMapping[numCols];\n};\n\nexport interface GridProps extends React.HTMLAttributes<HTMLDivElement> {\n numItems?: number;\n numItemsSm?: number;\n numItemsMd?: number;\n numItemsLg?: number;\n children: React.ReactNode;\n}\n\nconst Grid = React.forwardRef<HTMLDivElement, GridProps>((props, ref) => {\n const { numItems = 1, numItemsSm, numItemsMd, numItemsLg, children, className, ...other } = props;\n\n const colsBase = getGridCols(numItems, gridCols);\n const colsSm = getGridCols(numItemsSm, gridColsSm);\n const colsMd = getGridCols(numItemsMd, gridColsMd);\n const colsLg = getGridCols(numItemsLg, gridColsLg);\n\n const colClassNames = cn(colsBase, colsSm, colsMd, colsLg);\n\n return (\n <div ref={ref} className={cn('grid', colClassNames, className)} {...other}>\n {children}\n </div>\n );\n});\n\nGrid.displayName = 'Grid';\n\nexport default Grid;\n","import React, { useEffect, useState } from \"react\";\nimport { ChevronDown, ChevronUp } from \"lucide-react\";\nimport { FormDataType, JSONFormProps, LayoutConfigType } from \"..\";\nimport { JSONSchemaForm } from \"../../../components/JSONSchemaForm\";\nimport { cn } from \"../../../lib/utils\";\nimport { BatchSubmitButton, SubmitButton, getFormState } from \"./format\";\n\nconst CollapsibleBox = ({ formKey, layout, formState }: { formKey: string; layout: any; formState: any }) => {\n const [opened, setOpened] = useState(true);\n return (\n <div id={`form-${formKey}`}>\n <div\n className=\"mt-5 mb-[10px] flex justify-between items-center cursor-pointer border-t-[1px solid #E5E5EA] py-[5px]\"\n onClick={() => setOpened((o) => !o)}\n >\n <div className={cn('text-gray-900 dark:text-gray-100 font-bold text-base', layout?.titleBoxCss)}>{layout?.title || formKey}</div>\n {opened ? <ChevronUp size={18} className=\"text-[#717179] dark:text-[#A1A1A9]\" /> : <ChevronDown size={18} className=\"text-[#717179] dark:text-[#A1A1A9]\" />}\n </div>\n <div className={cn('mt-2', opened ? 'block' : 'hidden')}>\n {layout?.customRender?.Top?.(formKey, formState)}\n <JSONSchemaForm formState={formState}>\n {layout?.customRender?.SubmitButtonBefore?.(formKey, formState)}\n {layout?.submitButtonProps && <SubmitButton formKey={formKey} formState={formState} buttonProps={layout.submitButtonProps} />}\n {layout?.customRender?.SubmitButtonAfter?.(formKey, formState)}\n </JSONSchemaForm>\n </div>\n </div>\n );\n};\n\nexport const ListLayout = <T extends FormDataType>(props: JSONFormProps<T>) => {\n const { layoutConfig = {}, onBatchSubmit, batchSubmitButtonProps, onReady, theme } = props;\n const { $type, $combFormsCustomRender, ...formLayout } = layoutConfig as LayoutConfigType<T, 'ListLayout'>;\n const formStates = getFormState(props, formLayout, theme);\n\n useEffect(() => {\n if (formStates && onReady) {\n onReady(formStates);\n }\n }, [formStates]);\n\n return (\n <>\n {$combFormsCustomRender?.Top?.(formStates)}\n {Object.keys(formStates).map((key) => {\n return (\n <CollapsibleBox\n key={key}\n formKey={key}\n formState={formStates[key]}\n layout={formLayout[key]}\n />\n );\n })}\n {$combFormsCustomRender?.SubmitButtonBefore?.(formStates)}\n {(onBatchSubmit || batchSubmitButtonProps?.onBatchSubmit) && (\n <div className=\"w-full flex\">\n <BatchSubmitButton formStates={formStates} onSubmit={onBatchSubmit} buttonProps={batchSubmitButtonProps} />\n </div>\n )}\n {$combFormsCustomRender?.SubmitButtonAfter?.(formStates)}\n </>\n );\n};","import React, { useEffect } from 'react';\nimport { FormDataType, JSONFormProps, LayoutConfigType } from '..';\nimport { JSONSchemaForm } from '../../../components/JSONSchemaForm';\nimport { BatchSubmitButton, SubmitButton, getFormState } from './format';\n\nexport const SimpleLayout = <T extends FormDataType>(props: JSONFormProps<T>) => {\n const { layoutConfig = {}, onBatchSubmit, batchSubmitButtonProps, onReady, theme } = props;\n const { $type, $combFormsCustomRender, ...formLayout } = layoutConfig as LayoutConfigType<T, 'SimpleLayout'>;\n const formStates = getFormState(props, formLayout, theme);\n\n useEffect(() => {\n if (formStates && onReady) {\n onReady(formStates);\n }\n }, [formStates]);\n\n return (\n <>\n {$combFormsCustomRender?.Top?.(formStates)}\n <div className=\"space-y-2\">\n {Object.keys(formStates).map((key) => {\n const layout = formLayout[key];\n return (\n <div key={key} id={`form-${key}`}>\n {layout?.customRender?.Top?.(key, formStates[key])}\n <JSONSchemaForm formState={formStates[key]}>\n {layout?.customRender?.SubmitButtonBefore?.(key, formStates[key])}\n {layout?.submitButtonProps && <SubmitButton formKey={key} formState={formStates[key]} buttonProps={layout.submitButtonProps} />}\n {layout?.customRender?.SubmitButtonAfter?.(key, formStates[key])}\n </JSONSchemaForm>\n </div>\n );\n })}\n </div>\n {$combFormsCustomRender?.SubmitButtonBefore?.(formStates)}\n {(onBatchSubmit || batchSubmitButtonProps?.onBatchSubmit) && (\n <div className=\"w-full flex\">\n <BatchSubmitButton formStates={formStates} onSubmit={onBatchSubmit} buttonProps={batchSubmitButtonProps} />\n </div>\n )}\n {$combFormsCustomRender?.SubmitButtonAfter?.(formStates)}\n </>\n );\n};\n","import React, { useEffect, useMemo, useState } from \"react\";\nimport { Tab, Tabs } from \"@nextui-org/react\";\nimport { FormDataType, JSONFormProps, LayoutConfigType } from \"..\";\nimport { JSONSchemaForm } from \"../../../components/JSONSchemaForm\";\nimport { BatchSubmitButton, SubmitButton, getFormState } from \"./format\";\nimport { cn } from \"../../../lib/utils\";\n\nexport const TabLayout = <T extends FormDataType>(props: JSONFormProps<T>) => {\n const { layoutConfig = {}, onBatchSubmit, batchSubmitButtonProps, onReady, theme } = props;\n const {\n $type,\n $tabsProps = {\n color: 'default',\n },\n $combFormsCustomRender,\n ...formLayout\n } = layoutConfig as LayoutConfigType<T, 'TabLayout'>;\n const formStates = useMemo(() => getFormState(props, formLayout, theme), [props.formData, props.formConfig, props.layoutConfig]);\n const formKeys = Object.keys(formStates);\n const [selectedTab, setSelectedTab] = useState(formKeys[0] || '');\n\n useEffect(() => {\n if (formStates && onReady) {\n onReady(formStates);\n }\n }, [formStates]);\n\n return (\n <>\n <Tabs\n {...$tabsProps}\n selectedKey={selectedTab}\n onSelectionChange={(key: string) => {\n setSelectedTab(key);\n }}\n >\n {formKeys.map((key) => {\n const layout = formLayout[key];\n return <Tab id={`form-${key}-tab-menu`} key={key} title={<div className={layout?.titleBoxCss}>{layout?.title || key}</div>} />;\n })}\n </Tabs>\n {$combFormsCustomRender?.Top?.(formStates)}\n {formKeys.map((key) => {\n const layout = formLayout[key];\n return (\n <div\n key={key}\n id={`form-${key}-tab-content`}\n className={cn('mt-4', selectedTab === key ? '' : 'hidden')}\n >\n {layout?.customRender?.Top?.(key, formStates[key])}\n <JSONSchemaForm formState={formStates[key]}>\n {layout?.customRender?.SubmitButtonBefore?.(key, formStates[key])}\n {layout?.submitButtonProps && <SubmitButton formKey={key} formState={formStates[key]} buttonProps={layout.submitButtonProps} />}\n {layout?.customRender?.SubmitButtonAfter?.(key, formStates[key])}\n </JSONSchemaForm>\n </div>\n );\n })}\n {$combFormsCustomRender?.SubmitButtonBefore?.(formStates)}\n {(onBatchSubmit || batchSubmitButtonProps?.onBatchSubmit) && (\n <div className=\"w-full flex\">\n <BatchSubmitButton formStates={formStates} onSubmit={onBatchSubmit} buttonProps={batchSubmitButtonProps} />\n </div>\n )}\n {$combFormsCustomRender?.SubmitButtonAfter?.(formStates)}\n </>\n );\n};\n","import React, { ReactNode, useMemo, useRef } from 'react';\nimport { InputProps, InputSlots, SlotsToClasses, Textarea } from '@nextui-org/react';\nimport { WidgetProps } from '@rjsf/utils';\nimport { cn } from \"../../../lib/utils\";\nimport { getStyle } from '../../../themes';\n\ntype Options = {\n className?: string;\n nextuiClassNames?: SlotsToClasses<InputSlots>;\n labelPlacement?: InputProps['labelPlacement'];\n size: InputProps['size'];\n minRows?: number;\n maxRows?: number;\n placeholder?: string;\n color?: InputProps[\"color\"];\n variant?: InputProps[\"variant\"];\n radius?: InputProps[\"radius\"];\n startContent?: ReactNode;\n endContent?: ReactNode;\n description?: string;\n};\n// @ts-ignore \nexport interface TextareaWidgetProps extends WidgetProps {\n options: Options;\n}\n\nexport interface TextareaWidgetUIOptions {\n 'ui:widget': (props: TextareaWidgetProps) => JSX.Element;\n 'ui:options': Options;\n}\n\nexport function TextareaWidget(props: TextareaWidgetProps) {\n const { onChange, options, label, value, required, disabled, uiSchema } = props;\n const {\n className,\n nextuiClassNames = {\n inputWrapper: 'rounded-lg shadow-none border dark:border-[#2c2c2c] !bg-transparent data-[hover=true]:!bg-default-50 group-data-[focus=true]:!bg-transparent',\n },\n labelPlacement = 'inside',\n size = 'md',\n minRows = 3,\n maxRows = 8,\n color,\n variant,\n radius,\n startContent,\n endContent,\n description,\n } = options;\n const { requiredErrMsg, validate, theme } = uiSchema;\n const placeholder = uiSchema['ui:options']?.placeholder;\n const isFirstChecked = useRef(true);\n const classNames = useMemo(() => {\n const themeStyle = getStyle(theme || 'default', 'InputWidget');\n return {\n ...themeStyle.classNames,\n ...nextuiClassNames\n }\n }, [theme, nextuiClassNames]);\n\n return (\n <Textarea\n className={cn('w-full', className)}\n classNames={classNames}\n label={label}\n placeholder={placeholder}\n value={value}\n isRequired={required}\n isDisabled={disabled}\n minRows={minRows}\n maxRows={maxRows}\n size={size}\n labelPlacement={labelPlacement}\n description={description}\n color={color}\n variant={variant}\n radius={radius}\n startContent={startContent}\n endContent={endContent}\n onChange={(e) => onChange(e.target.value)}\n validate={() => {\n if (isFirstChecked.current) {\n isFirstChecked.current = false;\n return true;\n }\n if (value === '' && required) {\n return requiredErrMsg || 'This field is required';\n }\n if (validate) {\n const errMsg = validate(value);\n return errMsg;\n }\n return true;\n }}\n />\n );\n}\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { DatePicker, DatePickerProps } from '@nextui-org/react';\nimport { RJSFSchema, Widget, WidgetProps } from \"@rjsf/utils\";\nimport { DateValue, parseAbsoluteToLocal } from '@internationalized/date';\nimport { cn } from \"../../../lib/utils\";\nimport { getStyle } from \"../../../themes\";\n\ntype Options = {\n className?: string;\n nextuiClassNames?: Record<\"base\" | \"selectorButton\" | \"selectorIcon\" | \"popoverContent\" | \"calendar\" | \"calendarContent\" | \"timeInputLabel\" | \"timeInput\", string>;\n dateInputClassNames?: Record<\n | \"base\"\n | \"label\"\n | \"inputWrapper\"\n | \"innerWrapper\"\n | \"input\"\n | \"helperWrapper\"\n | \"description\"\n | \"errorMessage\",\n string\n >;\n size: DatePickerProps[\"size\"];\n labelPlacement?: DatePickerProps[\"labelPlacement\"];\n color: DatePickerProps[\"color\"];\n granularity?: DatePickerProps[\"granularity\"];\n variant?: DatePickerProps['variant'];\n description?: string;\n};\n\nexport interface DatePickerWidgetProps extends WidgetProps {\n options: Options;\n}\n\nexport interface DatePickerWidgetUIOptions {\n 'ui:widget': (props: DatePickerWidgetProps) => string | Widget<any, RJSFSchema, any> | undefined;\n 'ui:options': Options;\n}\n\nexport function DatePickerWidget({ label, options, value, required, disabled, uiSchema, onChange }: DatePickerWidgetProps) {\n const {\n className,\n nextuiClassNames = { calendarContent: 'min-w-fit' },\n dateInputClassNames,\n labelPlacement = 'inside',\n size = 'sm',\n granularity = 'day',\n color = 'default',\n description,\n variant,\n } = options;\n const [date, setDate] = useState<DateValue>();\n const { requiredErrMsg, validate, theme } = uiSchema;\n const isFirstChecked = useRef(true);\n const dateInputStyle = useMemo(() => {\n const themeStyle = getStyle(theme || 'default', 'DatePickerWidget');\n return {\n ...themeStyle.dateInputClassNames,\n ...dateInputClassNames\n }\n }, [theme, dateInputClassNames]);\n\n useEffect(() => {\n if (value) {\n try {\n const ISOStr = new Date(value).toISOString();\n const v = parseAbsoluteToLocal(ISOStr);\n setDate(v);\n } catch (error) {\n console.log('error', error.message);\n }\n }\n }, [value]);\n\n return (\n <DatePicker\n showMonthAndYearPickers\n className={cn('w-full', className)}\n classNames={nextuiClassNames}\n dateInputClassNames={dateInputStyle}\n label={label}\n size={size}\n labelPlacement={labelPlacement}\n color={color}\n granularity={granularity}\n variant={variant}\n value={date}\n isRequired={required}\n description={description || ''}\n isDisabled={disabled}\n onChange={(dateValue) => {\n if (dateValue) {\n const v = dateValue.toDate('GMT').toISOString();\n onChange(v);\n }\n }}\n validate={() => {\n if (isFirstChecked.current) {\n isFirstChecked.current = false;\n return true;\n }\n if (value === '' && required) {\n return requiredErrMsg || 'This field is required';\n }\n if (validate) {\n const errMsg = validate(value);\n return errMsg;\n }\n return true;\n }}\n />\n );\n}\n","import { Modal, ModalBody, ModalContent, ModalHeader } from '@nextui-org/react';\nimport { observer, useLocalObservable } from \"mobx-react-lite\";\nimport { useStore } from \"../../store/index\";\nimport Draggable from \"react-draggable\";\nimport { JSONForm } from \"../../components/JSONForm\";\nimport { useEffect, useMemo } from \"react\";\nimport { cn } from \"../../lib/utils\";\nimport { ComplexFormModalStore } from \".\";\nimport React from \"react\";\n\nconst JSONViewModal = observer(() => {\n const rootStore = useStore();\n const complexFormModal = rootStore.get(ComplexFormModalStore);\n const { formData, isOpen } = complexFormModal;\n const store = useLocalObservable(() => ({\n isMobile: false,\n }));\n\n useEffect(() => {\n const handleResize = () => {\n store.isMobile = window.innerWidth < 991;\n };\n handleResize();\n window.addEventListener('resize', handleResize);\n return () => {\n window.removeEventListener('resize', handleResize);\n };\n }, []);\n\n const isMobile = store.isMobile;\n\n const ModalMemo = useMemo(() => {\n if (!formData) {\n return null;\n }\n\n const layoutConfig = { ...complexFormModal.layoutConfig };\n if (isMobile && layoutConfig.$type === 'GridLayout') {\n layoutConfig.$gridColumn = 1;\n Object.keys(layoutConfig).forEach((key) => {\n if (typeof layoutConfig[key] === 'object') {\n // @ts-ignore\n layoutConfig[key].colSpan = 1;\n }\n });\n }\n\n return (\n <Modal\n className={complexFormModal.className}\n classNames={complexFormModal.classNames}\n scrollBehavior={complexFormModal.scrollBehavior}\n isDismissable={complexFormModal.isDismissable}\n isOpen={isOpen}\n size={complexFormModal.modalSize}\n onOpenChange={(open: boolean) => {\n if (!open) {\n complexFormModal.event.emit('abort');\n }\n }}\n >\n <div className=\"z-50 fixed top-0 left-0 w-screen h-screen\">\n <Draggable handle=\".draggable-handle\">\n <ModalContent>\n {complexFormModal.title && <ModalHeader className=\"flex flex-col gap-1 draggable-handle cursor-move\">{complexFormModal.title}</ModalHeader>}\n <ModalBody className={cn('max-h-[90vh] overflow-auto')}>\n <JSONForm\n theme={complexFormModal.theme}\n formData={formData}\n formConfig={complexFormModal.formConfig}\n layoutConfig={layoutConfig}\n onBatchSubmit={complexFormModal.onBatchSubmit\n ? complexFormModal.onBatchSubmit\n : (data) => {\n complexFormModal.event.emit('batchSubmit', data);\n }\n }\n onSet={complexFormModal.onSet}\n onChange={complexFormModal.onChange}\n onReady={complexFormModal.onReady}\n batchSubmitButtonProps={complexFormModal.batchSubmitButtonProps}\n />\n </ModalBody>\n </ModalContent>\n </Draggable>\n </div>\n </Modal>\n );\n }, [isOpen, formData, isMobile]);\n\n return ModalMemo;\n});\n\nexport default JSONViewModal;\n","import { Store } from \"../../store/standard/base\";\nimport Provider from \"./Provider\";\nimport { FormConfigType, FormDataOfKey, FormDataType, LayoutConfigType, LayoutType } from \"../../components/JSONForm\";\nimport EventEmitter from \"events\";\nimport { JSONSchemaFormState } from \"../../store/standard/JSONSchemaState\";\nimport { UiSchema } from \"@rjsf/utils\";\nimport { makeAutoObservable } from \"mobx\";\nimport { RootStore } from \"../../store\";\nimport React, { Dispatch, SetStateAction } from \"react\";\nimport { ButtonProps, SlotsToClasses, ModalSlots } from \"@nextui-org/react\";\nimport { getStyle, ThemeType } from \"../../themes\";\n\nexport class ComplexFormModalStore<T extends FormDataType> implements Store {\n sid = 'ComplexFormModalStore';\n provider = () => <Provider />;\n\n isOpen = false;\n title = '';\n formData?: T;\n formConfig?: FormConfigType<T>;\n layoutConfig?: LayoutConfigType<T, LayoutType>;\n className = '';\n classNames?: SlotsToClasses<ModalSlots>;\n theme: ThemeType = \"default\";\n modalSize: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full' | 'xs' | '3xl' | '4xl' | '5xl' = 'md';\n scrollBehavior?: 'normal' | 'inside' | 'outside' = 'normal';\n isDismissable = true;\n event = new EventEmitter();\n onBatchSubmit?: (data: T, setLoading?: Dispatch<SetStateAction<boolean>>) => void;\n onSet?: (v: FormDataOfKey<T>, form: JSONSchemaFormState<FormDataOfKey<T>, UiSchema>) => FormDataOfKey<T>;\n onChange?: (data: Partial<T>) => void;\n onReady?: (formStates: { [F in keyof T]?: JSONSchemaFormState<FormDataOfKey<T>, UiSchema> }) => void;\n batchSubmitButtonProps?: ButtonProps & { onBatchSubmit?: (formData: T, setLoading: Dispatch<SetStateAction<boolean>>) => void };\n\n constructor(args?: Partial<ComplexFormModalStore<T>>) {\n const modalStyle = getStyle(args?.theme || 'default', 'Modal');\n const classNames = {\n ...modalStyle.classNames,\n ...args?.classNames\n }\n Object.assign(this, args, { classNames });\n makeAutoObservable(this);\n }\n\n setData(v: Partial<ComplexFormModalStore<T>>) {\n Object.assign(this, v);\n }\n\n close() {\n this.isOpen = false;\n this.title = '';\n this.formData = undefined;\n this.formConfig = undefined;\n this.layoutConfig = undefined;\n this.modalSize = 'md';\n this.scrollBehavior = 'normal';\n this.isDismissable = true;\n this.onBatchSubmit = undefined;\n this.onSet = undefined;\n this.onChange = undefined;\n this.onReady = undefined;\n this.event.removeAllListeners();\n }\n}\n\nexport async function getComplexFormData<T extends FormDataType>(v: Partial<ComplexFormModalStore<T>>) {\n return new Promise<T>((resolve, reject) => {\n const modalStyle = getStyle(v?.theme || 'default', 'Modal');\n const classNames = {\n ...modalStyle.classNames,\n ...v?.classNames\n }\n const complexFormModal = RootStore.Get(ComplexFormModalStore);\n // @ts-ignore\n complexFormModal.setData({\n ...v,\n classNames,\n isOpen: true,\n });\n complexFormModal.event.on('batchSubmit', (formData: T) => {\n if (complexFormModal.onBatchSubmit) {\n complexFormModal.onBatchSubmit(formData);\n } else {\n complexFormModal.close();\n resolve(formData);\n }\n });\n complexFormModal.event.on('abort', () => {\n complexFormModal.close();\n reject('abort');\n });\n });\n}\n","import EventEmitter from \"events\";\nimport React from \"react\";\nimport { UiSchema } from \"@rjsf/utils\";\nimport { makeAutoObservable } from \"mobx\";\nimport { Store } from \"../../store/standard/base\";\nimport {\n JSONSchemaFormState,\n JSONSchemaValue,\n} from \"../../store/standard/JSONSchemaState\";\nimport Provider from \"./Provider\";\nimport { SelectWidget } from \"../../components/JSONFormWidgets/SelectWidget\";\nimport { InputWidget } from \"../../components/JSONFormWidgets/InputWidget\";\nimport { CheckboxWidget } from \"../../components/JSONFormWidgets/CheckboxWidget\";\nimport { EditorWidget } from \"../../components/JSONFormWidgets/EditorWidget\";\nimport { RootStore } from \"../../store\";\nimport { SlotsToClasses, ModalSlots } from \"@nextui-org/react\";\nimport { getStyle, ThemeType } from \"../../themes\";\n\nexport class FormModalStore<T = { [key: string]: any }> implements Store {\n sid = 'FormModalStore';\n provider = () => <Provider />;\n\n isOpen = false;\n title = '';\n form: JSONSchemaFormState<T> = null;\n className: string = '';\n classNames?: SlotsToClasses<ModalSlots>;\n theme: ThemeType = \"default\";\n modalSize: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full' | 'xs' | '3xl' | '4xl' | '5xl' = 'md';\n scrollBehavior?: 'normal' | 'inside' | 'outside' = 'normal';\n closeOnOverlayClick = false;\n event = new EventEmitter();\n onAfterSubmit?: (data: T) => void;\n\n constructor(args?: Partial<FormModalStore>) {\n const modalStyle = getStyle(args?.theme || 'default', 'Modal');\n const classNames = {\n ...modalStyle.classNames,\n ...args?.classNames\n }\n Object.assign(this, args, { classNames });\n makeAutoObservable(this);\n }\n\n setData(v: Partial<FormModalStore>) {\n Object.assign(this, v);\n }\n\n close() {\n this.isOpen = false;\n this.title = '';\n this.form = null;\n this.modalSize = 'md';\n this.scrollBehavior = 'normal';\n this.closeOnOverlayClick = false;\n this.onAfterSubmit = undefined;\n this.event.removeAllListeners();\n }\n}\n\nexport async function getFormData<T = { [key: string]: any }>(v: Partial<FormModalStore>) {\n return new Promise<T>((resolve, reject) => {\n const modalStyle = getStyle(v?.theme || 'default', 'Modal');\n const classNames = {\n ...modalStyle.classNames,\n ...v?.classNames\n }\n const formModal = RootStore.Get(FormModalStore);\n formModal.setData({\n ...v,\n classNames,\n isOpen: true,\n });\n formModal.event.on('afterSubmit', (formData: T) => {\n if (formModal.onAfterSubmit) {\n formModal.onAfterSubmit(formData);\n } else {\n formModal.close();\n resolve(formData);\n }\n });\n formModal.event.on('abort', () => {\n formModal.close();\n reject('abort');\n });\n });\n}\n\nexport function getFormState<T>(\n {\n data,\n metadata = {},\n onSet = (v: T, form) => v,\n onSubmit,\n theme = 'default',\n }: {\n data: T;\n metadata?: { [key: string]: any } & Partial<JSONSchemaFormState<any>>;\n onSet?: (v: T, form: JSONSchemaFormState<T, UiSchema>) => T;\n onSubmit?: (data: T) => void;\n theme: ThemeType;\n }\n): JSONSchemaFormState<T, UiSchema> {\n const value = {};\n const required = [];\n const props = Object.entries(data).reduce((p, c) => {\n const [k, v] = c;\n\n const type = typeof v;\n p[k] = {\n type\n };\n\n value[k] = v;\n\n if (!metadata[k]) {\n metadata[k] = {};\n }\n\n if (type === 'string' || type === 'number') {\n if (metadata[k]?.selectOptions) {\n metadata[k]['ui:widget'] = SelectWidget;\n p[k].selectOptions = metadata[k].selectOptions;\n } else {\n if (!metadata[k]['ui:widget']) {\n metadata[k]['ui:widget'] = InputWidget;\n\n if (type === 'number') {\n p[k].inputType = 'number';\n }\n }\n }\n }\n\n if (type === 'boolean') {\n metadata[k]['ui:widget'] = CheckboxWidget;\n metadata[k]['ui:options'] = {\n size: 'sm',\n }\n }\n\n if (type === 'object') {\n // Instead of setting up \"definitions\", the easy way to do this is to edit the json directly using the EditorWidget\n p[k].type = 'string';\n value[k] = JSON.stringify(v, null, 2);\n metadata[k]['ui:widget'] = EditorWidget;\n }\n\n if (metadata[k]?.inputType) {\n p[k].inputType = metadata[k].inputType;\n delete metadata[k].inputType;\n }\n if (metadata[k]?.title) {\n p[k].title = metadata[k].title || v;\n delete metadata[k].title;\n }\n if (metadata[k]?.description) {\n p[k].description = metadata[k].description;\n delete metadata[k].description;\n }\n\n if (metadata[k]?.required) {\n required.push(k);\n delete metadata[k].required;\n }\n\n metadata[k]['theme'] = theme;\n return p;\n }, {});\n const schema = {\n type: 'object',\n properties: props,\n required,\n };\n const form = new JSONSchemaFormState({\n //@ts-ignore\n schema,\n uiSchema: {\n 'ui:submitButtonOptions': {\n norender: false,\n submitText: 'Submit',\n },\n ...metadata,\n },\n afterSubmit(e) {\n if (onSubmit) {\n onSubmit(e.formData as T);\n } else {\n const formModal = RootStore.Get(FormModalStore);\n formModal.event.emit('afterSubmit', e.formData);\n }\n },\n value: new JSONSchemaValue({\n default: value,\n onSet: (v: T) => onSet(v, form),\n }),\n });\n return form as any\n}\n\nexport async function getSimpleFormData<T>(\n data: T,\n metadata: { [key: string]: any } & Partial<JSONSchemaFormState<any>> = {},\n config: Partial<FormModalStore>,\n onSet = (v: T, form: JSONSchemaFormState<T, UiSchema>) => {\n return v;\n },\n theme: ThemeType = 'default'\n) {\n const form = getFormState({ data, metadata, onSet, theme });\n return getFormData<T>({\n ...config,\n //@ts-ignore\n form\n });\n}\n","import { Modal, ModalBody, ModalContent, ModalHeader } from '@nextui-org/react';\nimport { observer } from \"mobx-react-lite\";\nimport { JSONSchemaForm } from \"../../components/JSONSchemaForm\";\nimport { useStore } from \"../../store/index\";\nimport Draggable from \"react-draggable\";\nimport { FormModalStore } from \".\";\nimport React from 'react';\n\nconst JSONFormModal = observer(() => {\n const rootStore = useStore();\n const formModal = rootStore.get(FormModalStore);\n const { form, closeOnOverlayClick } = formModal;\n if (!form) {\n return null;\n }\n return (\n <Modal\n className={formModal.className}\n classNames={formModal.classNames}\n scrollBehavior={formModal.scrollBehavior}\n isOpen={formModal.isOpen}\n size={formModal.modalSize}\n isDismissable={!closeOnOverlayClick}\n onOpenChange={(open: boolean) => {\n if (!open) {\n formModal.event.emit('abort');\n }\n }}\n >\n <div className=\"z-50 fixed top-0 left-0 w-screen h-screen flex items-center justify-center\">\n <Draggable handle=\".draggable-handle\">\n <ModalContent>\n {formModal.title && <ModalHeader className=\"flex flex-col gap-1 draggable-handle cursor-move\">{formModal.title}</ModalHeader>}\n <ModalBody className='max-h-[90vh] overflow-auto'>\n <JSONSchemaForm formState={form} />\n </ModalBody>\n </ModalContent>\n </Draggable>\n </div>\n </Modal>\n );\n});\n\nexport default JSONFormModal;\n\n"]}
|