@axdspub/axiom-ui-forms 0.2.4 → 0.2.5
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/library/axiom-ui-forms.d.ts +12 -17
- package/library/esm/_virtual/index2.js +2 -2
- package/library/esm/_virtual/index3.js +2 -2
- package/library/esm/_virtual/index6.js +2 -2
- package/library/esm/_virtual/index8.js +2 -2
- package/library/esm/_virtual/index9.js +2 -2
- package/library/esm/node_modules/ajv/dist/compile/codegen/index.js +1 -1
- package/library/esm/node_modules/ajv/dist/compile/validate/index.js +1 -1
- package/library/esm/node_modules/ajv/dist/vocabularies/applicator/index.js +1 -1
- package/library/esm/node_modules/ajv/dist/vocabularies/core/index.js +1 -1
- package/library/esm/node_modules/ajv/dist/vocabularies/format/index.js +1 -1
- package/library/esm/src/Form/Components/FieldCreator.js +10 -9
- package/library/esm/src/Form/Components/FieldCreator.js.map +1 -1
- package/library/esm/src/Form/Components/FieldLabel.js +6 -6
- package/library/esm/src/Form/Components/FieldLabel.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/Date.js +8 -12
- package/library/esm/src/Form/Components/Inputs/Date.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/GeoJSON.js +49 -48
- package/library/esm/src/Form/Components/Inputs/GeoJSON.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/Geometry.js +81 -59
- package/library/esm/src/Form/Components/Inputs/Geometry.js.map +1 -1
- package/library/esm/src/Form/Components/Inputs/Object.js +3 -3
- package/library/esm/src/Form/Components/Inputs/Object.js.map +1 -1
- package/library/esm/src/Form/Creator/FormContextProvider.js +17 -0
- package/library/esm/src/Form/Creator/FormContextProvider.js.map +1 -0
- package/library/esm/src/Form/Creator/FormCreator.js +22 -23
- package/library/esm/src/Form/Creator/FormCreator.js.map +1 -1
- package/library/esm/src/Form/Creator/FormFields.js +2 -2
- package/library/esm/src/Form/Creator/FormFields.js.map +1 -1
- package/library/esm/src/Form/Creator/FormSection.js +4 -4
- package/library/esm/src/Form/Creator/FormSection.js.map +1 -1
- package/library/esm/src/Form/Creator/FormSectionContextProvider.js +23 -0
- package/library/esm/src/Form/Creator/FormSectionContextProvider.js.map +1 -0
- package/library/esm/src/Form/Creator/Page.js +23 -34
- package/library/esm/src/Form/Creator/Page.js.map +1 -1
- package/library/esm/src/Form/Creator/Wizard.js +38 -48
- package/library/esm/src/Form/Creator/Wizard.js.map +1 -1
- package/library/esm/src/Form/helpers.js +14 -6
- package/library/esm/src/Form/helpers.js.map +1 -1
- package/library/esm/src/Form/resolveRefs.js.map +1 -1
- package/library/esm/src/Form/schemaToFormHelpers.js +45 -25
- package/library/esm/src/Form/schemaToFormHelpers.js.map +1 -1
- package/package.json +14 -7
@@ -1,5 +1,5 @@
|
|
1
1
|
import { GeoJSON } from 'geojson';
|
2
|
-
import {
|
2
|
+
import { JSONSchema6, JSONSchema6Type, JSONSchema6Definition } from 'json-schema';
|
3
3
|
import React$1, { ReactElement } from 'react';
|
4
4
|
|
5
5
|
interface IValueTypes {
|
@@ -200,18 +200,15 @@ type IFormValueState = [IFormValues, (v: IFormValues) => void];
|
|
200
200
|
type IFormInputComponent = React.FC<IFormFieldProps>;
|
201
201
|
type IValueChangeFn = (v: IValueType | IValueType[] | undefined) => void;
|
202
202
|
interface IFieldInputProps {
|
203
|
-
form: IForm;
|
204
203
|
field: IFormField;
|
205
204
|
onChange: IValueChangeFn;
|
206
|
-
formValueState: IFormValueState;
|
207
205
|
value?: IValueType;
|
208
|
-
inputOverrides?: Record<string, React.FC<IFieldInputProps>>;
|
209
206
|
className?: string;
|
210
207
|
}
|
211
208
|
|
212
209
|
interface IFormCreatorProps {
|
213
210
|
form: IForm;
|
214
|
-
schema?:
|
211
|
+
schema?: JSONSchema6;
|
215
212
|
formValueState: [IFormValues, (v: IFormValues) => void];
|
216
213
|
note?: string;
|
217
214
|
error?: string;
|
@@ -220,7 +217,7 @@ interface IFormCreatorProps {
|
|
220
217
|
urlNavigable?: boolean;
|
221
218
|
inputOverrides?: Record<string, React$1.FC<IFieldInputProps>>;
|
222
219
|
}
|
223
|
-
declare const FormCreator: ({ form, formValueState, note, error, onChange, className, urlNavigable, inputOverrides }: IFormCreatorProps) => ReactElement;
|
220
|
+
declare const FormCreator: ({ form, formValueState, note, error, onChange, className, urlNavigable, inputOverrides, schema }: IFormCreatorProps) => ReactElement;
|
224
221
|
type IFormSectionStatus = Record<string, {
|
225
222
|
completed: number;
|
226
223
|
total: number;
|
@@ -250,15 +247,12 @@ declare const calculateSectionStatus: (sections: IFormSection[], formValueState:
|
|
250
247
|
|
251
248
|
interface IFieldCreator {
|
252
249
|
field: IFormField;
|
253
|
-
form: IForm;
|
254
250
|
onChange?: IValueChangeFn;
|
255
251
|
className?: string;
|
256
252
|
defaultClassName?: string;
|
257
253
|
value?: IValueType | IValueType[];
|
258
|
-
formValueState: IFormValueState;
|
259
|
-
inputOverrides?: Record<string, React$1.FC<IFieldInputProps>>;
|
260
254
|
}
|
261
|
-
declare const FieldCreator: ({ field,
|
255
|
+
declare const FieldCreator: ({ field, value, onChange, className, defaultClassName }: IFieldCreator) => ReactElement | null;
|
262
256
|
|
263
257
|
declare const BooleanInput: ({ field, onChange, value }: IFieldInputProps) => ReactElement;
|
264
258
|
|
@@ -280,14 +274,15 @@ declare const DateInput: ({ field, onChange, value }: IFieldInputProps) => React
|
|
280
274
|
|
281
275
|
declare const TimeInput: ({ field, onChange, value }: IFieldInputProps) => ReactElement;
|
282
276
|
|
283
|
-
declare const validateSchema: (schemaOb: unknown, version?: number) =>
|
284
|
-
schema?:
|
277
|
+
declare const validateSchema: (schemaOb: unknown, version?: number) => {
|
278
|
+
schema?: JSONSchema6;
|
285
279
|
error?: string;
|
286
|
-
|
287
|
-
|
288
|
-
declare const
|
289
|
-
declare const
|
290
|
-
declare const
|
280
|
+
unrefed?: JSONSchema6;
|
281
|
+
};
|
282
|
+
declare const validateAgainstSchema: (schema: JSONSchema6, formValues: IFormValues) => string[] | undefined;
|
283
|
+
declare const getValueFromSchema: (schema: JSONSchema6Type | JSONSchema6Definition | undefined) => string | number | boolean | undefined;
|
284
|
+
declare const getLabelFromSchema: (schema: JSONSchema6Type | JSONSchema6Definition | undefined) => string | undefined;
|
285
|
+
declare const schemaToFormObject: (schema: JSONSchema6) => IForm;
|
291
286
|
|
292
287
|
declare const schemaToFormHelpers_getLabelFromSchema: typeof getLabelFromSchema;
|
293
288
|
declare const schemaToFormHelpers_getValueFromSchema: typeof getValueFromSchema;
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { __exports as validate } from '../../../../../_virtual/
|
1
|
+
import { __exports as validate } from '../../../../../_virtual/index2.js';
|
2
2
|
import { __require as requireBoolSchema } from './boolSchema.js';
|
3
3
|
import { __require as requireDataType } from './dataType.js';
|
4
4
|
import { __require as requireApplicability } from './applicability.js';
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { __exports as applicator } from '../../../../../_virtual/
|
1
|
+
import { __exports as applicator } from '../../../../../_virtual/index6.js';
|
2
2
|
import { __require as requireAdditionalItems } from './additionalItems.js';
|
3
3
|
import { __require as requirePrefixItems } from './prefixItems.js';
|
4
4
|
import { __require as requireItems } from './items.js';
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import { __assign, __spreadArray } from '../../../node_modules/tslib/tslib.es6.js';
|
2
2
|
import inputMap from './Inputs/inputMap.js';
|
3
|
+
import { useFormContext } from '../Creator/FormContextProvider.js';
|
3
4
|
import { checkCondition, getFieldValue, getPathFromField, cleanUnusedDependenciesFromFormValues } from '../helpers.js';
|
4
5
|
import { utils as index$1, Button } from '../../../node_modules/@axdspub/axiom-ui-utilities/library/index.js';
|
5
6
|
import { ExclamationTriangleIcon, PlusIcon, CopyIcon, CheckIcon, Cross1Icon, TrashIcon } from '../../../node_modules/@radix-ui/react-icons/dist/react-icons.esm.js';
|
@@ -30,14 +31,14 @@ var DeleteMultiple = function (_a) {
|
|
30
31
|
React__default.createElement(TrashIcon, { className: 'inline ml-2 fill-white' }))));
|
31
32
|
};
|
32
33
|
var OneOfMultiple = function (_a) {
|
33
|
-
var InputComponent = _a.InputComponent, field = _a.field,
|
34
|
+
var InputComponent = _a.InputComponent, field = _a.field, value = _a.value, index = _a.index, onChange = _a.onChange, values = _a.values;
|
34
35
|
var addValue = function (v) {
|
35
36
|
var newValues = __spreadArray([], values, true);
|
36
37
|
newValues.splice(index + 1, 0, v);
|
37
38
|
onChange(newValues);
|
38
39
|
};
|
39
40
|
return (React__default.createElement("div", { className: 'flex flex-col gap-2' },
|
40
|
-
React__default.createElement(InputComponent, {
|
41
|
+
React__default.createElement(InputComponent, { field: __assign(__assign({}, field), { required: false, label: index > 0 ? null : field.label, id: "".concat(field.id, "-").concat(index) }), value: value, onChange: function (v) {
|
41
42
|
var newValues = __spreadArray([], values, true);
|
42
43
|
newValues[index] = v;
|
43
44
|
onChange(newValues);
|
@@ -61,8 +62,8 @@ var OneOfMultiple = function (_a) {
|
|
61
62
|
React__default.createElement(CopyIcon, { className: 'inline ml-2' }))))));
|
62
63
|
};
|
63
64
|
var MultipleFieldCreator = function (_a) {
|
64
|
-
var
|
65
|
-
var formValues =
|
65
|
+
var field = _a.field, onChange = _a.onChange, value = _a.value;
|
66
|
+
var _b = useFormContext(), formValues = _b.formValues, setFormValues = _b.setFormValues, inputOverrides = _b.inputOverrides;
|
66
67
|
var defaultOnChange = function (v) {
|
67
68
|
var formValuesCopy = structuredClone(formValues);
|
68
69
|
var fieldPath = getPathFromField(field);
|
@@ -73,13 +74,13 @@ var MultipleFieldCreator = function (_a) {
|
|
73
74
|
var initialValues = (initialVal !== undefined ? (Array.isArray(initialVal) ? initialVal : [initialVal]) : [null]);
|
74
75
|
var InputComponent = __assign(__assign({}, inputMap), (inputOverrides !== null && inputOverrides !== void 0 ? inputOverrides : {}))[field.type];
|
75
76
|
return React__default.createElement("div", null, initialValues === null || initialValues === void 0 ? void 0 : initialValues.map(function (value, index) {
|
76
|
-
return React__default.createElement(OneOfMultiple, {
|
77
|
+
return React__default.createElement(OneOfMultiple, { key: "".concat(field.id, "-").concat(index), InputComponent: InputComponent, field: field, value: value, index: index, onChange: onChange !== null && onChange !== void 0 ? onChange : defaultOnChange, values: initialValues });
|
77
78
|
}));
|
78
79
|
};
|
79
80
|
var FieldCreator = function (_a) {
|
80
81
|
var _b;
|
81
|
-
var field = _a.field,
|
82
|
-
var
|
82
|
+
var field = _a.field, value = _a.value, onChange = _a.onChange, className = _a.className, _c = _a.defaultClassName, defaultClassName = _c === void 0 ? 'py-2 flex flex-col gap-8' : _c;
|
83
|
+
var _d = useFormContext(), form = _d.form, inputOverrides = _d.inputOverrides, setFormValues = _d.setFormValues, formValues = _d.formValues;
|
83
84
|
var InputComponent = __assign(__assign({}, inputMap), (inputOverrides !== null && inputOverrides !== void 0 ? inputOverrides : {}))[field.type];
|
84
85
|
var updateFormValues = function (v) {
|
85
86
|
setFormValues(cleanUnusedDependenciesFromFormValues(form, v));
|
@@ -99,8 +100,8 @@ var FieldCreator = function (_a) {
|
|
99
100
|
className: className,
|
100
101
|
defaultClassName: defaultClassName
|
101
102
|
}) }, field.multiple === true
|
102
|
-
? React__default.createElement(MultipleFieldCreator, { field: field,
|
103
|
-
: React__default.createElement(InputComponent, { field: field,
|
103
|
+
? React__default.createElement(MultipleFieldCreator, { field: field, onChange: onChange, value: initialValue })
|
104
|
+
: React__default.createElement(InputComponent, { field: field, onChange: onChange !== null && onChange !== void 0 ? onChange : defaultOnChange, value: Array.isArray(initialValue) ? initialValue[0] : initialValue }))
|
104
105
|
: React__default.createElement("div", null,
|
105
106
|
React__default.createElement("p", { className: 'font-bold mb-2' },
|
106
107
|
React__default.createElement(ExclamationTriangleIcon, { className: 'inline' }),
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"FieldCreator.js","sources":["../../../../../src/Form/Components/FieldCreator.tsx"],"sourcesContent":["import inputMap from '@/Form/Components/Inputs/inputMap'\nimport { type IFormValues, type IFieldInputProps, type IFormField, type IValueChangeFn, type IValueType, type IForm, type IFormValueState } from '@/Form/Creator/FormCreatorTypes'\nimport { checkCondition, cleanUnusedDependenciesFromFormValues, getFieldValue, getPathFromField } from '@/Form/helpers'\nimport { Button, utils } from '@axdspub/axiom-ui-utilities'\nimport { CheckIcon, CopyIcon, Cross1Icon, ExclamationTriangleIcon, PlusIcon, TrashIcon } from '@radix-ui/react-icons'\nimport { set } from 'lodash'\nimport React, { useState, type ReactElement } from 'react'\n\ninterface IFieldCreator {\n field: IFormField\n form: IForm\n onChange?: IValueChangeFn\n className?: string\n defaultClassName?: string\n value?: IValueType | IValueType[]\n formValueState: IFormValueState\n inputOverrides?: Record<string, React.FC<IFieldInputProps>>\n}\n\nconst toolButtonClass = 'border-white hover:border-single hover:border-1 hover:border-slate-400'\n\nconst DeleteMultiple = ({\n doDelete\n}: {\n doDelete: () => void\n}): ReactElement => {\n const [confirm, setConfirm] = useState(false)\n\n return (\n <>\n {\n confirm\n ? <p className='flex flex-row gap-2 text-sm'><span className='text-slate-600'>Deleting: </span> Are you sure?\n <Button size='xs' type='submit'\n onClick={() => {\n doDelete()\n setConfirm(false)\n }}>Yes <CheckIcon className='inline ml-2' />\n </Button>\n <Button size='xs' type='alert'\n onClick={() => {\n setConfirm(false)\n }}>Cancel <Cross1Icon className='inline ml-2' />\n </Button>\n </p>\n : <Button size='xs' className={toolButtonClass} onClick={() => { setConfirm(true) }}>\n Delete <TrashIcon className='inline ml-2 fill-white' />\n </Button>\n }\n </>\n )\n}\n\nconst OneOfMultiple = ({\n InputComponent,\n field,\n form,\n value,\n index,\n onChange,\n values,\n formValueState\n\n}: {\n InputComponent: React.FC<IFieldInputProps>\n field: IFormField\n form: IForm\n value: IValueType\n index: number\n onChange: (v: IValueType[] | undefined) => void\n values: IValueType[]\n formValueState: [IFormValues, (v: IFormValues) => void]\n\n}): ReactElement => {\n const addValue = (v: IValueType | null): void => {\n const newValues = [...values]\n newValues.splice(index + 1, 0, v)\n onChange(newValues)\n }\n\n return (\n <div className='flex flex-col gap-2'>\n <InputComponent\n formValueState={formValueState}\n form={form}\n field={{\n ...field,\n required: false,\n label: index > 0 ? null : field.label,\n id: `${field.id}-${index}`\n }}\n value={value}\n onChange={(v) => {\n const newValues = [...values]\n newValues[index] = v as IValueType\n onChange(newValues)\n }}\n />\n\n <div className='flex flex-row justify-between w-full p-2'>\n {index > 0 && (\n <DeleteMultiple doDelete={() => {\n const newValues = [...values]\n newValues.splice(index, 1)\n onChange(newValues)\n }} />\n )}\n <div className='ml-auto flex gap-2'>\n <Button\n size='xs'\n className={toolButtonClass}\n onClick={() => {\n addValue(null)\n }}>Add <PlusIcon className='inline ml-2' /></Button>\n <Button\n size='xs'\n className={toolButtonClass}\n onClick={() => {\n addValue(structuredClone(value))\n }}>Duplicate <CopyIcon className='inline ml-2' />\n </Button>\n </div>\n </div>\n </div>\n )\n}\n\nconst MultipleFieldCreator = ({\n form,\n field,\n onChange,\n value,\n formValueState,\n inputOverrides\n}: IFieldCreator): ReactElement => {\n const [formValues, setFormValues] = formValueState\n const defaultOnChange = (v: IValueType[] | undefined): void => {\n const formValuesCopy = structuredClone(formValues)\n const fieldPath = getPathFromField(field)\n set(formValuesCopy, fieldPath, v)\n setFormValues(formValuesCopy)\n }\n\n const initialVal = value !== undefined ? value : getFieldValue(field, formValues)\n const initialValues = (initialVal !== undefined ? (Array.isArray(initialVal) ? initialVal : [initialVal]) : [null])\n\n const InputComponent = {\n ...inputMap,\n ...(inputOverrides ?? {})\n }[field.type]\n\n return <div>\n {\n initialValues?.map((value, index) => {\n return <OneOfMultiple\n formValueState={formValueState}\n key={`${field.id}-${index}`}\n InputComponent={InputComponent}\n form={form}\n field={field}\n value={value}\n index={index}\n onChange={onChange ?? defaultOnChange}\n values={initialValues}\n />\n })\n }\n </div>\n}\n\nconst FieldCreator = ({\n field,\n form,\n value,\n onChange,\n className,\n defaultClassName = 'py-2 flex flex-col gap-8',\n formValueState,\n inputOverrides\n}: IFieldCreator): ReactElement | null => {\n const [formValues, setFormValues] = formValueState\n const InputComponent = {\n ...inputMap,\n ...(inputOverrides ?? {})\n }[field.type]\n\n const updateFormValues = (v: IFormValues): void => {\n setFormValues(cleanUnusedDependenciesFromFormValues(form, v))\n }\n\n if (!checkCondition(field, formValues)) {\n return null\n }\n\n const defaultOnChange = (v: IValueType | IValueType[] | undefined): void => {\n const formValuesCopy = structuredClone(formValues)\n const fieldPath = getPathFromField(field)\n set(formValuesCopy, fieldPath, v)\n updateFormValues(formValuesCopy)\n }\n const initialValue = value !== undefined ? value : getFieldValue(field, formValues)\n return InputComponent !== undefined\n ? <div className={utils.makeClassName({\n className,\n defaultClassName\n })}>{\n field.multiple === true\n ? <MultipleFieldCreator\n field={field}\n form={form}\n onChange={onChange}\n value={initialValue}\n formValueState={formValueState}\n inputOverrides={inputOverrides}\n />\n : <InputComponent\n field={field}\n form={form}\n onChange={onChange ?? defaultOnChange}\n value={Array.isArray(initialValue) ? initialValue[0] : initialValue}\n formValueState={formValueState}\n inputOverrides={inputOverrides}\n />\n\n }</div>\n : <div>\n <p className='font-bold mb-2'><ExclamationTriangleIcon className='inline' /> {field.label ?? ''}</p>\n <p className='p-4 text-sm bg-slate-100'>No component definition for <span className='text-rose-800 font-mono text-xs bg-slate-300 p-2'>type</span><span className='p-2 bg-slate-700 text-white font-mono text-xs'>{field.type}</span> at <span className='text-rose-800 font-mono text-xs bg-slate-300 p-2'>id</span><span className='p-2 bg-slate-700 text-white font-mono text-xs'>{field.id}</span></p>\n </div>\n}\n\nexport default FieldCreator\n"],"names":["React","utils"],"mappings":";;;;;;;;AAmBA,IAAM,eAAe,GAAG,wEAAwE;AAEhG,IAAM,cAAc,GAAG,UAAC,EAIvB,EAAA;AAHC,IAAA,IAAA,QAAQ,GAAA,EAAA,CAAA,QAAA;IAIF,IAAA,EAAA,GAAwB,QAAQ,CAAC,KAAK,CAAC,EAAtC,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,UAAU,GAAA,EAAA,CAAA,CAAA,CAAmB;IAE7C,QACEA,4DAEI;AACE,UAAEA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,6BAA6B,EAAA;YAACA,cAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAC,gBAAgB,EAAkB,EAAA,YAAA,CAAA;;YAC3FA,cAAC,CAAA,aAAA,CAAA,MAAM,EAAC,EAAA,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,QAAQ,EAC7B,OAAO,EAAE,YAAA;AACP,oBAAA,QAAQ,EAAE;oBACV,UAAU,CAAC,KAAK,CAAC;iBAClB,EAAA;;AAAM,gBAAAA,cAAA,CAAA,aAAA,CAAC,SAAS,EAAC,EAAA,SAAS,EAAC,aAAa,GAAG,CACrC;YACTA,cAAC,CAAA,aAAA,CAAA,MAAM,EAAC,EAAA,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAC5B,OAAO,EAAE,YAAA;oBACP,UAAU,CAAC,KAAK,CAAC;iBAClB,EAAA;;AAAS,gBAAAA,cAAA,CAAA,aAAA,CAAC,UAAU,EAAC,EAAA,SAAS,EAAC,aAAa,EAAA,CAAG,CACzC;UAEXA,6BAAC,MAAM,EAAA,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,YAAQ,EAAA,UAAU,CAAC,IAAI,CAAC,CAAA,EAAE,EAAA;;YACxEA,cAAC,CAAA,aAAA,CAAA,SAAS,IAAC,SAAS,EAAC,wBAAwB,EAAG,CAAA,CAChD,CAEd;AAEP,CAAC;AAED,IAAM,aAAa,GAAG,UAAC,EAoBtB,EAAA;QAnBC,cAAc,GAAA,EAAA,CAAA,cAAA,EACd,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,cAAc,GAAA,EAAA,CAAA,cAAA;IAad,IAAM,QAAQ,GAAG,UAAC,CAAoB,EAAA;AACpC,QAAA,IAAM,SAAS,GAAA,aAAA,CAAA,EAAA,EAAO,MAAM,EAAA,IAAA,CAAC;QAC7B,SAAS,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACjC,QAAQ,CAAC,SAAS,CAAC;AACrB,KAAC;AAED,IAAA,QACEA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,qBAAqB,EAAA;QAC9BA,cAAC,CAAA,aAAA,CAAA,cAAc,IACf,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,IAAI,EACV,KAAK,wBACA,KAAK,CAAA,EAAA,EACR,QAAQ,EAAE,KAAK,EACf,KAAK,EAAE,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,KAAK,EACrC,EAAE,EAAE,EAAA,CAAA,MAAA,CAAG,KAAK,CAAC,EAAE,EAAI,GAAA,CAAA,CAAA,MAAA,CAAA,KAAK,CAAE,EAAA,CAAA,EAE5B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,UAAC,CAAC,EAAA;AACV,gBAAA,IAAM,SAAS,GAAA,aAAA,CAAA,EAAA,EAAO,MAAM,EAAA,IAAA,CAAC;AAC7B,gBAAA,SAAS,CAAC,KAAK,CAAC,GAAG,CAAe;gBAClC,QAAQ,CAAC,SAAS,CAAC;AACrB,aAAC,EACD,CAAA;QAEEA,cAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,0CAA0C,EAAA;YACtD,KAAK,GAAG,CAAC,KACVA,6BAAC,cAAc,EAAA,EAAC,QAAQ,EAAE,YAAA;AACxB,oBAAA,IAAM,SAAS,GAAA,aAAA,CAAA,EAAA,EAAO,MAAM,EAAA,IAAA,CAAC;AAC7B,oBAAA,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC1B,QAAQ,CAAC,SAAS,CAAC;AACrB,iBAAC,GAAI,CACJ;YACDA,cAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,oBAAoB,EAAA;gBACjCA,cAAC,CAAA,aAAA,CAAA,MAAM,EACP,EAAA,IAAI,EAAC,IAAI,EACT,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,YAAA;wBACP,QAAQ,CAAC,IAAI,CAAC;qBACf,EAAA;;AAAM,oBAAAA,cAAA,CAAA,aAAA,CAAC,QAAQ,EAAC,EAAA,SAAS,EAAC,aAAa,GAAG,CAAS;gBACpDA,cAAC,CAAA,aAAA,CAAA,MAAM,EACL,EAAA,IAAI,EAAC,IAAI,EACT,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,YAAA;AACP,wBAAA,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;qBACjC,EAAA;;oBAAYA,cAAC,CAAA,aAAA,CAAA,QAAQ,EAAC,EAAA,SAAS,EAAC,aAAa,EAAG,CAAA,CAC1C,CACL,CACF,CACJ;AAEd,CAAC;AAED,IAAM,oBAAoB,GAAG,UAAC,EAOd,EAAA;AANd,IAAA,IAAA,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,KAAK,WAAA,EACL,cAAc,GAAA,EAAA,CAAA,cAAA,EACd,cAAc,GAAA,EAAA,CAAA,cAAA;IAEP,IAAA,UAAU,GAAmB,cAAc,CAAA,CAAA,CAAjC,EAAE,aAAa,GAAI,cAAc,CAAA,CAAA,CAAlB;IAChC,IAAM,eAAe,GAAG,UAAC,CAA2B,EAAA;AAClD,QAAA,IAAM,cAAc,GAAG,eAAe,CAAC,UAAU,CAAC;AAClD,QAAA,IAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC;AACzC,QAAA,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;QACjC,aAAa,CAAC,cAAc,CAAC;AAC/B,KAAC;AAED,IAAA,IAAM,UAAU,GAAG,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC;AACjF,IAAA,IAAM,aAAa,IAAI,UAAU,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEnH,IAAA,IAAM,cAAc,GAAG,QAAA,CAAA,QAAA,CAAA,EAAA,EAClB,QAAQ,CACR,GAAC,cAAc,KAAd,IAAA,IAAA,cAAc,cAAd,cAAc,GAAI,EAAE,EAAC,CACzB,KAAK,CAAC,IAAI,CAAC;AAEb,IAAA,OAAOA,cAEH,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA,EAAA,aAAa,KAAb,IAAA,IAAA,aAAa,KAAb,MAAA,GAAA,MAAA,GAAA,aAAa,CAAE,GAAG,CAAC,UAAC,KAAK,EAAE,KAAK,EAAA;QAC9B,OAAOA,cAAA,CAAA,aAAA,CAAC,aAAa,EACnB,EAAA,cAAc,EAAE,cAAc,EAC9B,GAAG,EAAE,EAAG,CAAA,MAAA,CAAA,KAAK,CAAC,EAAE,EAAA,GAAA,CAAA,CAAA,MAAA,CAAI,KAAK,CAAE,EAC3B,cAAc,EAAE,cAAc,EAC9B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,KAAR,IAAA,IAAA,QAAQ,KAAR,MAAA,GAAA,QAAQ,GAAI,eAAe,EACrC,MAAM,EAAE,aAAa,EAAA,CACnB;KACL,CAAC,CAEA;AACR,CAAC;AAEK,IAAA,YAAY,GAAG,UAAC,EASN,EAAA;;QARd,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,SAAS,eAAA,EACT,EAAA,GAAA,EAAA,CAAA,gBAA6C,EAA7C,gBAAgB,GAAG,EAAA,KAAA,MAAA,GAAA,0BAA0B,GAAA,EAAA,EAC7C,cAAc,GAAA,EAAA,CAAA,cAAA,EACd,cAAc,GAAA,EAAA,CAAA,cAAA;IAEP,IAAA,UAAU,GAAmB,cAAc,CAAA,CAAA,CAAjC,EAAE,aAAa,GAAI,cAAc,CAAA,CAAA,CAAlB;AAChC,IAAA,IAAM,cAAc,GAAG,QAAA,CAAA,QAAA,CAAA,EAAA,EAClB,QAAQ,CACR,GAAC,cAAc,KAAd,IAAA,IAAA,cAAc,cAAd,cAAc,GAAI,EAAE,EAAC,CACzB,KAAK,CAAC,IAAI,CAAC;IAEb,IAAM,gBAAgB,GAAG,UAAC,CAAc,EAAA;QACtC,aAAa,CAAC,qCAAqC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/D,KAAC;IAED,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;AACtC,QAAA,OAAO,IAAI;;IAGb,IAAM,eAAe,GAAG,UAAC,CAAwC,EAAA;AAC/D,QAAA,IAAM,cAAc,GAAG,eAAe,CAAC,UAAU,CAAC;AAClD,QAAA,IAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC;AACzC,QAAA,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;QACjC,gBAAgB,CAAC,cAAc,CAAC;AAClC,KAAC;AACD,IAAA,IAAM,YAAY,GAAG,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC;IACnF,OAAO,cAAc,KAAK;AACxB,UAAEA,cAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAEC,OAAK,CAAC,aAAa,CAAC;AACpC,gBAAA,SAAS,EAAA,SAAA;AACT,gBAAA,gBAAgB,EAAA;AACjB,aAAA,CAAC,EACA,EAAA,KAAK,CAAC,QAAQ,KAAK;cACfD,cAAC,CAAA,aAAA,CAAA,oBAAoB,EACnB,EAAA,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,YAAY,EACnB,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAC9B;cACFA,6BAAC,cAAc,EAAA,EACb,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAR,QAAQ,GAAI,eAAe,EACrC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,EACnE,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,EAAA,CAC9B;AAGR,UAAEA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;YACEA,cAAG,CAAA,aAAA,CAAA,GAAA,EAAA,EAAA,SAAS,EAAC,gBAAgB,EAAA;AAAC,gBAAAA,cAAA,CAAA,aAAA,CAAC,uBAAuB,EAAA,EAAC,SAAS,EAAC,QAAQ,EAAG,CAAA;AAAE,gBAAA,GAAA,EAAA,CAAA,EAAA,GAAA,KAAK,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,CAAK;YACpGA,cAAG,CAAA,aAAA,CAAA,GAAA,EAAA,EAAA,SAAS,EAAC,0BAA0B,EAAA;;gBAA6BA,cAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAC,kDAAkD,EAAY,EAAA,MAAA,CAAA;AAAA,gBAAAA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,+CAA+C,IAAE,KAAK,CAAC,IAAI,CAAQ;;gBAAIA,cAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAC,kDAAkD,EAAU,EAAA,IAAA,CAAA;gBAAAA,cAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAC,+CAA+C,EAAE,EAAA,KAAK,CAAC,EAAE,CAAQ,CAAI,CACtY;AACZ;;;;"}
|
1
|
+
{"version":3,"file":"FieldCreator.js","sources":["../../../../../src/Form/Components/FieldCreator.tsx"],"sourcesContent":["import inputMap from '@/Form/Components/Inputs/inputMap'\nimport { useFormContext } from '@/Form/Creator/FormContextProvider'\nimport { type IFormValues, type IFieldInputProps, type IFormField, type IValueChangeFn, type IValueType } from '@/Form/Creator/FormCreatorTypes'\nimport { checkCondition, cleanUnusedDependenciesFromFormValues, getFieldValue, getPathFromField } from '@/Form/helpers'\nimport { Button, utils } from '@axdspub/axiom-ui-utilities'\nimport { CheckIcon, CopyIcon, Cross1Icon, ExclamationTriangleIcon, PlusIcon, TrashIcon } from '@radix-ui/react-icons'\nimport { set } from 'lodash'\nimport React, { useState, type ReactElement } from 'react'\n\ninterface IFieldCreator {\n field: IFormField\n onChange?: IValueChangeFn\n className?: string\n defaultClassName?: string\n value?: IValueType | IValueType[]\n}\n\nconst toolButtonClass = 'border-white hover:border-single hover:border-1 hover:border-slate-400'\n\nconst DeleteMultiple = ({\n doDelete\n}: {\n doDelete: () => void\n}): ReactElement => {\n const [confirm, setConfirm] = useState(false)\n\n return (\n <>\n {\n confirm\n ? <p className='flex flex-row gap-2 text-sm'><span className='text-slate-600'>Deleting: </span> Are you sure?\n <Button size='xs' type='submit'\n onClick={() => {\n doDelete()\n setConfirm(false)\n }}>Yes <CheckIcon className='inline ml-2' />\n </Button>\n <Button size='xs' type='alert'\n onClick={() => {\n setConfirm(false)\n }}>Cancel <Cross1Icon className='inline ml-2' />\n </Button>\n </p>\n : <Button size='xs' className={toolButtonClass} onClick={() => { setConfirm(true) }}>\n Delete <TrashIcon className='inline ml-2 fill-white' />\n </Button>\n }\n </>\n )\n}\n\nconst OneOfMultiple = ({\n InputComponent,\n field,\n value,\n index,\n onChange,\n values\n\n}: {\n InputComponent: React.FC<IFieldInputProps>\n field: IFormField\n value: IValueType\n index: number\n onChange: (v: IValueType[] | undefined) => void\n values: IValueType[]\n}): ReactElement => {\n const addValue = (v: IValueType | null): void => {\n const newValues = [...values]\n newValues.splice(index + 1, 0, v)\n onChange(newValues)\n }\n\n return (\n <div className='flex flex-col gap-2'>\n <InputComponent\n field={{\n ...field,\n required: false,\n label: index > 0 ? null : field.label,\n id: `${field.id}-${index}`\n }}\n value={value}\n onChange={(v) => {\n const newValues = [...values]\n newValues[index] = v as IValueType\n onChange(newValues)\n }}\n />\n\n <div className='flex flex-row justify-between w-full p-2'>\n {index > 0 && (\n <DeleteMultiple doDelete={() => {\n const newValues = [...values]\n newValues.splice(index, 1)\n onChange(newValues)\n }} />\n )}\n <div className='ml-auto flex gap-2'>\n <Button\n size='xs'\n className={toolButtonClass}\n onClick={() => {\n addValue(null)\n }}>Add <PlusIcon className='inline ml-2' /></Button>\n <Button\n size='xs'\n className={toolButtonClass}\n onClick={() => {\n addValue(structuredClone(value))\n }}>Duplicate <CopyIcon className='inline ml-2' />\n </Button>\n </div>\n </div>\n </div>\n )\n}\n\nconst MultipleFieldCreator = ({\n field,\n onChange,\n value\n}: IFieldCreator): ReactElement => {\n const { formValues, setFormValues, inputOverrides } = useFormContext()\n const defaultOnChange = (v: IValueType[] | undefined): void => {\n const formValuesCopy = structuredClone(formValues)\n const fieldPath = getPathFromField(field)\n set(formValuesCopy, fieldPath, v)\n setFormValues(formValuesCopy)\n }\n\n const initialVal = value !== undefined ? value : getFieldValue(field, formValues)\n const initialValues = (initialVal !== undefined ? (Array.isArray(initialVal) ? initialVal : [initialVal]) : [null])\n\n const InputComponent = {\n ...inputMap,\n ...(inputOverrides ?? {})\n }[field.type]\n\n return <div>\n {\n initialValues?.map((value, index) => {\n return <OneOfMultiple\n key={`${field.id}-${index}`}\n InputComponent={InputComponent}\n field={field}\n value={value}\n index={index}\n onChange={onChange ?? defaultOnChange}\n values={initialValues}\n />\n })\n }\n </div>\n}\n\nconst FieldCreator = ({\n field,\n value,\n onChange,\n className,\n defaultClassName = 'py-2 flex flex-col gap-8'\n}: IFieldCreator): ReactElement | null => {\n const { form, inputOverrides, setFormValues, formValues } = useFormContext()\n const InputComponent = {\n ...inputMap,\n ...(inputOverrides ?? {})\n }[field.type]\n\n const updateFormValues = (v: IFormValues): void => {\n setFormValues(cleanUnusedDependenciesFromFormValues(form, v))\n }\n\n if (!checkCondition(field, formValues)) {\n return null\n }\n\n const defaultOnChange = (v: IValueType | IValueType[] | undefined): void => {\n const formValuesCopy = structuredClone(formValues)\n const fieldPath = getPathFromField(field)\n set(formValuesCopy, fieldPath, v)\n updateFormValues(formValuesCopy)\n }\n const initialValue = value !== undefined ? value : getFieldValue(field, formValues)\n return InputComponent !== undefined\n ? <div className={utils.makeClassName({\n className,\n defaultClassName\n })}>{\n field.multiple === true\n ? <MultipleFieldCreator\n field={field}\n onChange={onChange}\n value={initialValue}\n />\n : <InputComponent\n field={field}\n onChange={onChange ?? defaultOnChange}\n value={Array.isArray(initialValue) ? initialValue[0] : initialValue}\n />\n\n }</div>\n : <div>\n <p className='font-bold mb-2'><ExclamationTriangleIcon className='inline' /> {field.label ?? ''}</p>\n <p className='p-4 text-sm bg-slate-100'>No component definition for <span className='text-rose-800 font-mono text-xs bg-slate-300 p-2'>type</span><span className='p-2 bg-slate-700 text-white font-mono text-xs'>{field.type}</span> at <span className='text-rose-800 font-mono text-xs bg-slate-300 p-2'>id</span><span className='p-2 bg-slate-700 text-white font-mono text-xs'>{field.id}</span></p>\n </div>\n}\n\nexport default FieldCreator\n"],"names":["React","utils"],"mappings":";;;;;;;;;AAiBA,IAAM,eAAe,GAAG,wEAAwE;AAEhG,IAAM,cAAc,GAAG,UAAC,EAIvB,EAAA;AAHC,IAAA,IAAA,QAAQ,GAAA,EAAA,CAAA,QAAA;IAIF,IAAA,EAAA,GAAwB,QAAQ,CAAC,KAAK,CAAC,EAAtC,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,UAAU,GAAA,EAAA,CAAA,CAAA,CAAmB;IAE7C,QACEA,4DAEI;AACE,UAAEA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,6BAA6B,EAAA;YAACA,cAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAC,gBAAgB,EAAkB,EAAA,YAAA,CAAA;;YAC3FA,cAAC,CAAA,aAAA,CAAA,MAAM,EAAC,EAAA,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,QAAQ,EAC7B,OAAO,EAAE,YAAA;AACP,oBAAA,QAAQ,EAAE;oBACV,UAAU,CAAC,KAAK,CAAC;iBAClB,EAAA;;AAAM,gBAAAA,cAAA,CAAA,aAAA,CAAC,SAAS,EAAC,EAAA,SAAS,EAAC,aAAa,GAAG,CACrC;YACTA,cAAC,CAAA,aAAA,CAAA,MAAM,EAAC,EAAA,IAAI,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAC5B,OAAO,EAAE,YAAA;oBACP,UAAU,CAAC,KAAK,CAAC;iBAClB,EAAA;;AAAS,gBAAAA,cAAA,CAAA,aAAA,CAAC,UAAU,EAAC,EAAA,SAAS,EAAC,aAAa,EAAA,CAAG,CACzC;UAEXA,6BAAC,MAAM,EAAA,EAAC,IAAI,EAAC,IAAI,EAAC,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,YAAQ,EAAA,UAAU,CAAC,IAAI,CAAC,CAAA,EAAE,EAAA;;YACxEA,cAAC,CAAA,aAAA,CAAA,SAAS,IAAC,SAAS,EAAC,wBAAwB,EAAG,CAAA,CAChD,CAEd;AAEP,CAAC;AAED,IAAM,aAAa,GAAG,UAAC,EAetB,EAAA;AAdC,IAAA,IAAA,cAAc,GAAA,EAAA,CAAA,cAAA,EACd,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,KAAK,WAAA,EACL,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,MAAM,GAAA,EAAA,CAAA,MAAA;IAUN,IAAM,QAAQ,GAAG,UAAC,CAAoB,EAAA;AACpC,QAAA,IAAM,SAAS,GAAA,aAAA,CAAA,EAAA,EAAO,MAAM,EAAA,IAAA,CAAC;QAC7B,SAAS,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACjC,QAAQ,CAAC,SAAS,CAAC;AACrB,KAAC;AAED,IAAA,QACEA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,qBAAqB,EAAA;AAC9B,QAAAA,cAAA,CAAA,aAAA,CAAC,cAAc,EACf,EAAA,KAAK,wBACA,KAAK,CAAA,EAAA,EACR,QAAQ,EAAE,KAAK,EACf,KAAK,EAAE,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,KAAK,EACrC,EAAE,EAAE,EAAG,CAAA,MAAA,CAAA,KAAK,CAAC,EAAE,EAAA,GAAA,CAAA,CAAA,MAAA,CAAI,KAAK,CAAE,EAAA,CAAA,EAE5B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,UAAC,CAAC,EAAA;AACV,gBAAA,IAAM,SAAS,GAAA,aAAA,CAAA,EAAA,EAAO,MAAM,EAAA,IAAA,CAAC;AAC7B,gBAAA,SAAS,CAAC,KAAK,CAAC,GAAG,CAAe;gBAClC,QAAQ,CAAC,SAAS,CAAC;AACrB,aAAC,EACD,CAAA;QAEEA,cAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,0CAA0C,EAAA;YACtD,KAAK,GAAG,CAAC,KACVA,6BAAC,cAAc,EAAA,EAAC,QAAQ,EAAE,YAAA;AACxB,oBAAA,IAAM,SAAS,GAAA,aAAA,CAAA,EAAA,EAAO,MAAM,EAAA,IAAA,CAAC;AAC7B,oBAAA,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC1B,QAAQ,CAAC,SAAS,CAAC;AACrB,iBAAC,GAAI,CACJ;YACDA,cAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,oBAAoB,EAAA;gBACjCA,cAAC,CAAA,aAAA,CAAA,MAAM,EACP,EAAA,IAAI,EAAC,IAAI,EACT,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,YAAA;wBACP,QAAQ,CAAC,IAAI,CAAC;qBACf,EAAA;;AAAM,oBAAAA,cAAA,CAAA,aAAA,CAAC,QAAQ,EAAC,EAAA,SAAS,EAAC,aAAa,GAAG,CAAS;gBACpDA,cAAC,CAAA,aAAA,CAAA,MAAM,EACL,EAAA,IAAI,EAAC,IAAI,EACT,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,YAAA;AACP,wBAAA,QAAQ,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;qBACjC,EAAA;;oBAAYA,cAAC,CAAA,aAAA,CAAA,QAAQ,EAAC,EAAA,SAAS,EAAC,aAAa,EAAG,CAAA,CAC1C,CACL,CACF,CACJ;AAEd,CAAC;AAED,IAAM,oBAAoB,GAAG,UAAC,EAId,EAAA;AAHd,IAAA,IAAA,KAAK,WAAA,EACL,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,KAAK,GAAA,EAAA,CAAA,KAAA;AAEC,IAAA,IAAA,EAAgD,GAAA,cAAc,EAAE,EAA9D,UAAU,GAAA,EAAA,CAAA,UAAA,EAAE,aAAa,GAAA,EAAA,CAAA,aAAA,EAAE,cAAc,GAAA,EAAA,CAAA,cAAqB;IACtE,IAAM,eAAe,GAAG,UAAC,CAA2B,EAAA;AAClD,QAAA,IAAM,cAAc,GAAG,eAAe,CAAC,UAAU,CAAC;AAClD,QAAA,IAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC;AACzC,QAAA,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;QACjC,aAAa,CAAC,cAAc,CAAC;AAC/B,KAAC;AAED,IAAA,IAAM,UAAU,GAAG,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC;AACjF,IAAA,IAAM,aAAa,IAAI,UAAU,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEnH,IAAA,IAAM,cAAc,GAAG,QAAA,CAAA,QAAA,CAAA,EAAA,EAClB,QAAQ,CACR,GAAC,cAAc,KAAd,IAAA,IAAA,cAAc,cAAd,cAAc,GAAI,EAAE,EAAC,CACzB,KAAK,CAAC,IAAI,CAAC;AAEb,IAAA,OAAOA,cAEH,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA,EAAA,aAAa,KAAb,IAAA,IAAA,aAAa,KAAb,MAAA,GAAA,MAAA,GAAA,aAAa,CAAE,GAAG,CAAC,UAAC,KAAK,EAAE,KAAK,EAAA;AAC9B,QAAA,OAAOA,6BAAC,aAAa,EAAA,EACnB,GAAG,EAAE,EAAA,CAAA,MAAA,CAAG,KAAK,CAAC,EAAE,cAAI,KAAK,CAAE,EAC3B,cAAc,EAAE,cAAc,EAC9B,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAR,MAAA,GAAA,QAAQ,GAAI,eAAe,EACrC,MAAM,EAAE,aAAa,GACnB;KACL,CAAC,CAEA;AACR,CAAC;AAEK,IAAA,YAAY,GAAG,UAAC,EAMN,EAAA;;AALd,IAAA,IAAA,KAAK,WAAA,EACL,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,EAA6C,GAAA,EAAA,CAAA,gBAAA,EAA7C,gBAAgB,GAAA,EAAA,KAAA,MAAA,GAAG,0BAA0B,GAAA,EAAA;AAEvC,IAAA,IAAA,EAAsD,GAAA,cAAc,EAAE,EAApE,IAAI,GAAA,EAAA,CAAA,IAAA,EAAE,cAAc,GAAA,EAAA,CAAA,cAAA,EAAE,aAAa,GAAA,EAAA,CAAA,aAAA,EAAE,UAAU,gBAAqB;AAC5E,IAAA,IAAM,cAAc,GAAG,QAAA,CAAA,QAAA,CAAA,EAAA,EAClB,QAAQ,CACR,GAAC,cAAc,KAAd,IAAA,IAAA,cAAc,cAAd,cAAc,GAAI,EAAE,EAAC,CACzB,KAAK,CAAC,IAAI,CAAC;IAEb,IAAM,gBAAgB,GAAG,UAAC,CAAc,EAAA;QACtC,aAAa,CAAC,qCAAqC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/D,KAAC;IAED,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE;AACtC,QAAA,OAAO,IAAI;;IAGb,IAAM,eAAe,GAAG,UAAC,CAAwC,EAAA;AAC/D,QAAA,IAAM,cAAc,GAAG,eAAe,CAAC,UAAU,CAAC;AAClD,QAAA,IAAM,SAAS,GAAG,gBAAgB,CAAC,KAAK,CAAC;AACzC,QAAA,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC;QACjC,gBAAgB,CAAC,cAAc,CAAC;AAClC,KAAC;AACD,IAAA,IAAM,YAAY,GAAG,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC;IACnF,OAAO,cAAc,KAAK;AACxB,UAAEA,cAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAEC,OAAK,CAAC,aAAa,CAAC;AACpC,gBAAA,SAAS,EAAA,SAAA;AACT,gBAAA,gBAAgB,EAAA;AACjB,aAAA,CAAC,EACA,EAAA,KAAK,CAAC,QAAQ,KAAK;AACjB,cAAED,cAAA,CAAA,aAAA,CAAC,oBAAoB,EAAA,EACnB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,KAAK,EAAE,YAAY,EACnB;AACJ,cAAEA,cAAC,CAAA,aAAA,CAAA,cAAc,EACb,EAAA,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,KAAR,IAAA,IAAA,QAAQ,cAAR,QAAQ,GAAI,eAAe,EACrC,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,GACnE;AAGR,UAAEA,cAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;YACEA,cAAG,CAAA,aAAA,CAAA,GAAA,EAAA,EAAA,SAAS,EAAC,gBAAgB,EAAA;AAAC,gBAAAA,cAAA,CAAA,aAAA,CAAC,uBAAuB,EAAA,EAAC,SAAS,EAAC,QAAQ,EAAG,CAAA;AAAE,gBAAA,GAAA,EAAA,CAAA,EAAA,GAAA,KAAK,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,EAAE,CAAK;YACpGA,cAAG,CAAA,aAAA,CAAA,GAAA,EAAA,EAAA,SAAS,EAAC,0BAA0B,EAAA;;gBAA6BA,cAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAC,kDAAkD,EAAY,EAAA,MAAA,CAAA;AAAA,gBAAAA,cAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,+CAA+C,IAAE,KAAK,CAAC,IAAI,CAAQ;;gBAAIA,cAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAC,kDAAkD,EAAU,EAAA,IAAA,CAAA;gBAAAA,cAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAC,+CAA+C,EAAE,EAAA,KAAK,CAAC,EAAE,CAAQ,CAAI,CACtY;AACZ;;;;"}
|
@@ -2,11 +2,10 @@ import { __assign } from '../../../node_modules/tslib/tslib.es6.js';
|
|
2
2
|
import React__default from 'react';
|
3
3
|
|
4
4
|
var FieldLabelText = function (field) {
|
5
|
-
return (React__default.createElement("
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
field.required === true ? React__default.createElement("span", { className: 'text-red-500' }, "*") : '')));
|
5
|
+
return (React__default.createElement("strong", null,
|
6
|
+
field.label,
|
7
|
+
" ",
|
8
|
+
field.required === true ? React__default.createElement("span", { className: 'text-red-500' }, "*") : ''));
|
10
9
|
};
|
11
10
|
var FieldDescriptionText = function (field) {
|
12
11
|
return (React__default.createElement(React__default.Fragment, null, field.description !== undefined
|
@@ -15,7 +14,8 @@ var FieldDescriptionText = function (field) {
|
|
15
14
|
};
|
16
15
|
var FieldLabel = function (field) {
|
17
16
|
return React__default.createElement(React__default.Fragment, null,
|
18
|
-
React__default.createElement(
|
17
|
+
React__default.createElement("p", null,
|
18
|
+
React__default.createElement(FieldLabelText, __assign({}, field))),
|
19
19
|
React__default.createElement(FieldDescriptionText, __assign({}, field)));
|
20
20
|
};
|
21
21
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"FieldLabel.js","sources":["../../../../../src/Form/Components/FieldLabel.tsx"],"sourcesContent":["import { type IFormField } from '@/Form/Creator/FormCreatorTypes'\nimport React, { type ReactElement } from 'react'\n\nexport const FieldLabelText = (field: IFormField): ReactElement => {\n return (\n <
|
1
|
+
{"version":3,"file":"FieldLabel.js","sources":["../../../../../src/Form/Components/FieldLabel.tsx"],"sourcesContent":["import { type IFormField } from '@/Form/Creator/FormCreatorTypes'\nimport React, { type ReactElement } from 'react'\n\nexport const FieldLabelText = (field: IFormField): ReactElement => {\n return (\n <strong>{field.label} { field.required === true ? <span className='text-red-500'>*</span> : ''}</strong>\n )\n}\n\nexport const FieldDescriptionText = (field: IFormField): ReactElement => {\n return (\n <>{\n field.description !== undefined\n ? <p className='text-xs py-2'>{field.description}</p>\n : ''\n }</>\n )\n}\n\nconst FieldLabel = (field: IFormField): ReactElement => {\n return <>\n <p><FieldLabelText {...field} /></p>\n <FieldDescriptionText {...field} />\n\n </>\n}\n\nexport default FieldLabel\n"],"names":["React"],"mappings":";;;AAGO,IAAM,cAAc,GAAG,UAAC,KAAiB,EAAA;AAC9C,IAAA,QACEA,cAAA,CAAA,aAAA,CAAA,QAAA,EAAA,IAAA;AAAS,QAAA,KAAK,CAAC,KAAK;;AAAI,QAAA,KAAK,CAAC,QAAQ,KAAK,IAAI,GAAGA,cAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAC,cAAc,QAAS,GAAG,EAAE,CAAU;AAE5G;AAEO,IAAM,oBAAoB,GAAG,UAAC,KAAiB,EAAA;AACpD,IAAA,QACEA,cACE,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA,EAAA,KAAK,CAAC,WAAW,KAAK;UAClBA,oCAAG,SAAS,EAAC,cAAc,EAAE,EAAA,KAAK,CAAC,WAAW;AAChD,UAAE,EAAE,CACJ;AAER;AAEM,IAAA,UAAU,GAAG,UAAC,KAAiB,EAAA;IACnC,OAAOA,cAAA,CAAA,aAAA,CAAAA,cAAA,CAAA,QAAA,EAAA,IAAA;AACL,QAAAA,cAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA;AAAG,YAAAA,cAAA,CAAA,aAAA,CAAC,cAAc,EAAA,QAAA,CAAA,EAAA,EAAK,KAAK,CAAA,CAAI,CAAI;AACpC,QAAAA,cAAA,CAAA,aAAA,CAAC,oBAAoB,EAAA,QAAA,CAAA,EAAA,EAAK,KAAK,CAAA,CAAI,CAElC;AACL;;;;"}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { __assign } from '../../../../node_modules/tslib/tslib.es6.js';
|
2
2
|
import FieldLabel from '../FieldLabel.js';
|
3
|
-
import React__default, { useState
|
3
|
+
import React__default, { useState } from 'react';
|
4
4
|
|
5
5
|
var DateInput = function (_a) {
|
6
6
|
var _b;
|
@@ -11,12 +11,8 @@ var DateInput = function (_a) {
|
|
11
11
|
field.id,
|
12
12
|
" is missing 'options'");
|
13
13
|
}
|
14
|
-
var _c = useState(
|
15
|
-
var _d =
|
16
|
-
var _e = (_b = field.constraints) !== null && _b !== void 0 ? _b : {}, minDate = _e.minDate, maxDate = _e.maxDate;
|
17
|
-
useEffect(function () {
|
18
|
-
setInputValue(formatValue(value));
|
19
|
-
}, [value]);
|
14
|
+
var _c = useState(null), error = _c[0], setError = _c[1];
|
15
|
+
var _d = (_b = field.constraints) !== null && _b !== void 0 ? _b : {}, minDate = _d.minDate, maxDate = _d.maxDate;
|
20
16
|
// Convert the value to the format expected by date input (YYYY-MM-DD)
|
21
17
|
var formatValue = function (val) {
|
22
18
|
if (!val)
|
@@ -36,6 +32,7 @@ var DateInput = function (_a) {
|
|
36
32
|
return '';
|
37
33
|
}
|
38
34
|
};
|
35
|
+
var inputValue = formatValue(value);
|
39
36
|
var validateDate = function (dateStr) {
|
40
37
|
if (!minDate && !maxDate)
|
41
38
|
return null;
|
@@ -51,15 +48,14 @@ var DateInput = function (_a) {
|
|
51
48
|
return null;
|
52
49
|
};
|
53
50
|
var handleChange = function (e) {
|
54
|
-
var
|
55
|
-
setInputValue(newInputValue);
|
51
|
+
var newValue = e.target.value;
|
56
52
|
// Only notify parent of change if we have a complete valid date
|
57
|
-
if (
|
53
|
+
if (newValue) {
|
58
54
|
// Create date in UTC by appending T00:00:00Z to the input value
|
59
|
-
var date = new Date(
|
55
|
+
var date = new Date(newValue + 'T00:00:00Z');
|
60
56
|
// Check if it's a valid date and the year is reasonable (4 digits)
|
61
57
|
if (!isNaN(date.getTime()) && date.getUTCFullYear() > 999) {
|
62
|
-
var validationError = validateDate(
|
58
|
+
var validationError = validateDate(newValue);
|
63
59
|
setError(validationError);
|
64
60
|
if (!validationError) {
|
65
61
|
onChange(date.toISOString());
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Date.js","sources":["../../../../../../src/Form/Components/Inputs/Date.tsx"],"sourcesContent":["import FieldLabel from '@/Form/Components/FieldLabel'\nimport { type IFieldInputProps } from '@/Form/Creator/FormCreatorTypes'\nimport React, { type ReactElement, useState
|
1
|
+
{"version":3,"file":"Date.js","sources":["../../../../../../src/Form/Components/Inputs/Date.tsx"],"sourcesContent":["import FieldLabel from '@/Form/Components/FieldLabel'\nimport { type IFieldInputProps } from '@/Form/Creator/FormCreatorTypes'\nimport React, { type ReactElement, useState } from 'react'\n\nconst DateInput = ({ field, onChange, value }: IFieldInputProps): ReactElement => {\n if (field.type !== 'date') {\n return <p>Field config for {field.id} is missing 'options'</p>\n }\n\n const [error, setError] = useState<string | null>(null)\n const { minDate, maxDate } = field.constraints ?? {}\n\n // Convert the value to the format expected by date input (YYYY-MM-DD)\n const formatValue = (val: string | undefined | null): string => {\n if (!val) return ''\n try {\n // Ensure the value is in the correct format\n const date = new Date(val)\n if (isNaN(date.getTime())) return ''\n\n // Format to YYYY-MM-DD using UTC to avoid timezone issues\n const year = date.getUTCFullYear()\n const month = String(date.getUTCMonth() + 1).padStart(2, '0')\n const day = String(date.getUTCDate()).padStart(2, '0')\n\n return `${year}-${month}-${day}`\n } catch {\n return ''\n }\n }\n\n const inputValue = formatValue(value as string)\n\n const validateDate = (dateStr: string): string | null => {\n if (!minDate && !maxDate) return null\n\n const inputDate = new Date(dateStr + 'T00:00:00Z')\n const minDateObj = minDate ? new Date(minDate) : null\n const maxDateObj = maxDate ? new Date(maxDate) : null\n\n if (minDateObj && inputDate < minDateObj) {\n return `Date must be after ${formatValue(minDate)}`\n }\n if (maxDateObj && inputDate > maxDateObj) {\n return `Date must be before ${formatValue(maxDate)}`\n }\n return null\n }\n\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>): void => {\n const newValue = e.target.value\n // Only notify parent of change if we have a complete valid date\n if (newValue) {\n // Create date in UTC by appending T00:00:00Z to the input value\n const date = new Date(newValue + 'T00:00:00Z')\n // Check if it's a valid date and the year is reasonable (4 digits)\n if (!isNaN(date.getTime()) && date.getUTCFullYear() > 999) {\n const validationError = validateDate(newValue)\n setError(validationError)\n if (!validationError) {\n onChange(date.toISOString())\n }\n }\n } else {\n setError(null)\n onChange(undefined)\n }\n }\n\n const getConstraintMessage = (): string | null => {\n if (!minDate && !maxDate) return null\n const parts = []\n if (minDate) parts.push(`after ${formatValue(minDate)}`)\n if (maxDate) parts.push(`before ${formatValue(maxDate)}`)\n return `Must be ${parts.join(' and ')}`\n }\n\n const constraintMessage = getConstraintMessage()\n\n return (\n <div>\n <div className=\"flex flex-wrap items-baseline gap-2\">\n <label htmlFor={field.id} className=\"flex-1 min-w-[200px]\">\n <FieldLabel {...field} />\n </label>\n {constraintMessage && (\n <span className=\"text-sm text-slate-500 italic\">\n {constraintMessage}\n </span>\n )}\n </div>\n <input\n id={field.id}\n className={`border ${error ? 'border-red-500' : 'border-slate-300'} p-2 w-full`}\n data-testid={field.id}\n type=\"date\"\n value={inputValue}\n onChange={handleChange}\n min={minDate ? formatValue(minDate) : undefined}\n max={maxDate ? formatValue(maxDate) : undefined}\n />\n {error && <p className=\"text-red-500 text-sm mt-1\">{error}</p>}\n </div>\n )\n}\n\nexport default DateInput\n"],"names":["React"],"mappings":"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"}
|
@@ -401,55 +401,56 @@ var GeoJSONInput = function (_a) {
|
|
401
401
|
// Don't hide the buttons anymore
|
402
402
|
// setShowShapeTypeButtons(false)
|
403
403
|
};
|
404
|
-
return React__default.createElement("div",
|
404
|
+
return React__default.createElement("div", null,
|
405
405
|
React__default.createElement(FieldLabel, __assign({}, field)),
|
406
|
-
React__default.createElement("div", { className: "
|
407
|
-
React__default.createElement("div", { className: "
|
408
|
-
React__default.createElement(
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
React__default.createElement(
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
React__default.createElement(
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
React__default.createElement(
|
427
|
-
React__default.createElement(
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
React__default.createElement("div", { className: "
|
432
|
-
React__default.createElement("
|
433
|
-
"
|
434
|
-
|
435
|
-
|
436
|
-
React__default.createElement(
|
437
|
-
React__default.createElement(
|
438
|
-
|
439
|
-
|
440
|
-
React__default.createElement(
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
406
|
+
React__default.createElement("div", { className: "relative" },
|
407
|
+
React__default.createElement("div", { className: "absolute z-20 top-12 right-4 flex flex-col gap-2" },
|
408
|
+
React__default.createElement("div", { className: "tooltip-container relative group" },
|
409
|
+
React__default.createElement(Button, { onClick: function () { handleDrawTypeChange(EMapShape.polygon); }, className: "p-2 rounded-lg shadow-lg ".concat(currentDrawType === EMapShape.polygon && isDrawing
|
410
|
+
? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'
|
411
|
+
: 'bg-gray-100 hover:bg-gray-50', " text-black w-10 h-10 flex items-center justify-center") },
|
412
|
+
React__default.createElement(SquareIcon, { className: "w-5 h-5 rotate-45" }),
|
413
|
+
React__default.createElement("span", { className: "tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none" }, "Draw Polygon"))),
|
414
|
+
React__default.createElement("div", { className: "tooltip-container relative group" },
|
415
|
+
React__default.createElement(Button, { onClick: function () { handleDrawTypeChange(EMapShape.linestring); }, className: "p-2 rounded-lg shadow-lg ".concat(currentDrawType === EMapShape.linestring && isDrawing
|
416
|
+
? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'
|
417
|
+
: 'bg-gray-100 hover:bg-gray-50', " text-black w-10 h-10 flex items-center justify-center") },
|
418
|
+
React__default.createElement(BorderSolidIcon, { className: "w-5 h-5" }),
|
419
|
+
React__default.createElement("span", { className: "tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none" }, "Draw Path"))),
|
420
|
+
React__default.createElement("div", { className: "tooltip-container relative group" },
|
421
|
+
React__default.createElement(Button, { onClick: function () { handleDrawTypeChange(EMapShape.point); }, className: "p-2 rounded-lg shadow-lg ".concat(currentDrawType === EMapShape.point && isDrawing
|
422
|
+
? 'bg-white hover:bg-gray-50 ring-2 ring-yellow-200 shadow-[0_0_10px_rgba(253,224,71,0.5)]'
|
423
|
+
: 'bg-gray-100 hover:bg-gray-50', " text-black w-10 h-10 flex items-center justify-center") },
|
424
|
+
React__default.createElement(DrawingPinFilledIcon, { className: "w-5 h-5" }),
|
425
|
+
React__default.createElement("span", { className: "tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none" }, "Draw Point"))),
|
426
|
+
hasValidShape(geojson) && (React__default.createElement("div", { className: "tooltip-container relative group" },
|
427
|
+
React__default.createElement(Button, { onClick: clearShape, className: "p-2 rounded-lg shadow-lg bg-red-500 hover:bg-red-600 text-white w-10 h-10 flex items-center justify-center" },
|
428
|
+
React__default.createElement(TrashIcon, { className: "w-5 h-5" }),
|
429
|
+
React__default.createElement("span", { className: "tooltip absolute right-full mr-2 px-2 py-1 bg-gray-800 text-white text-sm rounded whitespace-nowrap opacity-0 group-hover:opacity-100 pointer-events-none" }, "Clear Shape"))))),
|
430
|
+
React__default.createElement(OpenLayersMapComponent, __assign({}, MAP_CONFIG, { setState: setMapState })),
|
431
|
+
React__default.createElement("div", { className: "mt-4" },
|
432
|
+
React__default.createElement("div", { className: "flex justify-between items-center mb-2" },
|
433
|
+
React__default.createElement("span", null,
|
434
|
+
"Draw on map or enter coordinates ",
|
435
|
+
React__default.createElement("pre", { className: "inline-block text-sm" }, "(latitude, longitude)")),
|
436
|
+
showShapeTypeButtons && (React__default.createElement("div", { className: "flex gap-2" },
|
437
|
+
React__default.createElement(Button, { onClick: function () { applyShapeType(EMapShape.linestring); }, className: "px-4 py-1 bg-white hover:bg-gray-50 text-black rounded-lg shadow-sm border border-gray-200 text-sm flex items-center gap-2" },
|
438
|
+
React__default.createElement(BorderSolidIcon, { className: "w-4 h-4" }),
|
439
|
+
"Create Path"),
|
440
|
+
React__default.createElement(Button, { onClick: function () { applyShapeType(EMapShape.polygon); }, className: "px-4 py-1 bg-white hover:bg-gray-50 text-black rounded-lg shadow-sm border border-gray-200 text-sm flex items-center gap-2" },
|
441
|
+
React__default.createElement(SquareIcon, { className: "w-4 h-4 rotate-45" }),
|
442
|
+
"Create Polygon")))),
|
443
|
+
React__default.createElement(TextArea, { error: error, className: 'min-h-[100px] bg-slate-50 rounded-lg shadow-inner', id: "".concat(field.id, "-coordinates"), testId: "".concat(field.id, "-coordinates"), value: coordinates, onChange: handleCoordinatesChange, placeholder: "61.2181, -149.9003\n61.2182, -149.9004\n61.2183, -149.9005" })),
|
444
|
+
showGeoJSONInput && React__default.createElement(TextArea, { error: error, className: 'min-h-[500px] bg-slate-50 rounded-lg shadow-inner', id: field.id, testId: field.id, label: React__default.createElement(FieldLabel, __assign({}, field)), value: getValue(), onChange: function (e) {
|
445
|
+
try {
|
446
|
+
JSON.parse(e !== null && e !== void 0 ? e : '');
|
447
|
+
onChange(JSON.parse(e !== null && e !== void 0 ? e : ''));
|
448
|
+
setError(undefined);
|
449
|
+
}
|
450
|
+
catch (e) {
|
451
|
+
setError('Invalid JSON');
|
452
|
+
}
|
453
|
+
} })));
|
453
454
|
};
|
454
455
|
|
455
456
|
export { GeoJSONInput, GeoJSONInput as default };
|