@knkcs/anker 2.4.0 → 2.5.1

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.
@@ -16,12 +16,17 @@ interface FormFieldProps<T extends FieldValues> {
16
16
  disabled?: boolean;
17
17
  readOnly?: boolean;
18
18
  actions?: React__default.ReactNode;
19
+ /** When false, the dirty-marker on the label is suppressed and the
20
+ * children-callback's `meta.isDirty` is forced to false. @default true */
21
+ showDirtyState?: boolean;
19
22
  children: (field: ControllerRenderProps<T, Path<T>> & {
20
23
  /** Computed aria-describedby linking to helper/description/error elements. */
21
24
  "aria-describedby"?: string;
25
+ }, meta: {
26
+ isDirty: boolean;
22
27
  }) => React__default.ReactNode;
23
28
  }
24
- declare function FormField<T extends FieldValues>({ name, label, helperText, description, required, disabled, readOnly, actions, children, }: FormFieldProps<T>): react_jsx_runtime.JSX.Element;
29
+ declare function FormField<T extends FieldValues>({ name, label, helperText, description, required, disabled, readOnly, actions, showDirtyState, children, }: FormFieldProps<T>): react_jsx_runtime.JSX.Element;
25
30
 
26
31
  interface ArrayFieldProps<T extends FieldValues> extends Omit<FormFieldProps<T>, "children"> {
27
32
  /**
@@ -52,18 +57,13 @@ declare namespace ArrayField {
52
57
  var displayName: string;
53
58
  }
54
59
 
55
- interface CheckboxFieldProps<T extends FieldValues> {
56
- name: Path<T>;
57
- label?: string;
60
+ interface CheckboxFieldProps<T extends FieldValues> extends Omit<FormFieldProps<T>, "children"> {
58
61
  /** When provided, the field is treated as an array of checked values. */
59
62
  value?: string | number;
60
- disabled?: boolean;
61
- helperText?: React__default.ReactNode;
63
+ /** Content to display after the checkbox. */
62
64
  children?: React__default.ReactNode;
63
65
  }
64
- declare function CheckboxField<T extends FieldValues>({ ref, ...props }: CheckboxFieldProps<T> & {
65
- ref?: React__default.Ref<HTMLLabelElement>;
66
- }): react_jsx_runtime.JSX.Element;
66
+ declare function CheckboxField<T extends FieldValues>({ ...props }: CheckboxFieldProps<T>): react_jsx_runtime.JSX.Element;
67
67
 
68
68
  type MonacoEditorProps = {
69
69
  value?: string;
@@ -123,6 +123,20 @@ declare function DatePickerField<T extends FieldValues>({ ref, ...props }: DateP
123
123
  ref?: React__default.Ref<HTMLInputElement>;
124
124
  }): react_jsx_runtime.JSX.Element;
125
125
 
126
+ interface DirtyCounterProps {
127
+ /**
128
+ * Label template. The literal `{count}` is replaced with the dirty
129
+ * field count. @default "{count} ungespeicherte Änderungen"
130
+ */
131
+ label?: string;
132
+ /** Render nothing when no fields are dirty. @default true */
133
+ hideWhenClean?: boolean;
134
+ }
135
+ declare function DirtyCounter({ label, hideWhenClean, }: DirtyCounterProps): react_jsx_runtime.JSX.Element | null;
136
+ declare namespace DirtyCounter {
137
+ var displayName: string;
138
+ }
139
+
126
140
  interface DirtyFormGuardProps {
127
141
  /** Dialog title. @default "You have unsaved changes" */
128
142
  title?: string;
@@ -266,4 +280,15 @@ declare function TextareaField<T extends FieldValues>({ ref, ...props }: Textare
266
280
  ref?: React__default.Ref<HTMLTextAreaElement>;
267
281
  }): react_jsx_runtime.JSX.Element;
268
282
 
269
- export { ArrayField, type ArrayFieldProps, CheckboxField, type CheckboxFieldProps, CodeField, type CodeFieldProps, ColorPickerField, type ColorPickerFieldProps, ControlledFormField, type ControlledFormFieldProps, DatePickerField, type DatePickerFieldProps, DirtyFormGuard, type DirtyFormGuardProps, FileField, type FileFieldProps, FormField, type FormFieldProps, InlineEdit, type InlineEditProps, InputField, type InputFieldProps, MarkdownField, type MarkdownFieldProps, NumberInputField, type NumberInputFieldProps, RadioGroupField, type RadioGroupFieldProps, type RadioOption, SelectField, type SelectFieldProps, SwitchField, type SwitchFieldProps, TextareaField, type TextareaFieldProps };
283
+ interface UseFieldDirtyOptions {
284
+ /** Set to false to never report dirty (opt-out per field). */
285
+ showDirtyState?: boolean;
286
+ }
287
+ /**
288
+ * useFieldDirty returns true when the field at `name` is dirty (changed
289
+ * from its react-hook-form default) AND visual marking isn't suppressed.
290
+ * Safe to call outside a FormProvider — returns false in that case.
291
+ */
292
+ declare function useFieldDirty(name: string, opts?: UseFieldDirtyOptions): boolean;
293
+
294
+ export { ArrayField, type ArrayFieldProps, CheckboxField, type CheckboxFieldProps, CodeField, type CodeFieldProps, ColorPickerField, type ColorPickerFieldProps, ControlledFormField, type ControlledFormFieldProps, DatePickerField, type DatePickerFieldProps, DirtyCounter, type DirtyCounterProps, DirtyFormGuard, type DirtyFormGuardProps, FileField, type FileFieldProps, FormField, type FormFieldProps, InlineEdit, type InlineEditProps, InputField, type InputFieldProps, MarkdownField, type MarkdownFieldProps, NumberInputField, type NumberInputFieldProps, RadioGroupField, type RadioGroupFieldProps, type RadioOption, SelectField, type SelectFieldProps, SwitchField, type SwitchFieldProps, TextareaField, type TextareaFieldProps, type UseFieldDirtyOptions, useFieldDirty };
@@ -20,6 +20,7 @@ function FormField({
20
20
  disabled,
21
21
  readOnly,
22
22
  actions,
23
+ showDirtyState = true,
23
24
  children
24
25
  }) {
25
26
  const { control } = useFormContext();
@@ -38,6 +39,7 @@ function FormField({
38
39
  helperText ? helperId : null,
39
40
  fieldState.error ? errorId : null
40
41
  ].filter(Boolean).join(" ") || void 0;
42
+ const isDirty = Boolean(showDirtyState && fieldState.isDirty);
41
43
  return /* @__PURE__ */ jsxs(
42
44
  Field.Root,
43
45
  {
@@ -45,12 +47,31 @@ function FormField({
45
47
  required,
46
48
  disabled,
47
49
  readOnly,
50
+ "data-dirty": isDirty ? "true" : void 0,
48
51
  children: [
49
52
  label && (typeof label === "string" ? /* @__PURE__ */ jsxs(HStack, { children: [
50
- /* @__PURE__ */ jsx(Field.Label, { flex: "1", htmlFor: name, children: label }),
53
+ /* @__PURE__ */ jsxs(Field.Label, { flex: "1", htmlFor: name, children: [
54
+ label,
55
+ isDirty && /* @__PURE__ */ jsx(
56
+ Box,
57
+ {
58
+ as: "span",
59
+ display: "inline-block",
60
+ width: "6px",
61
+ height: "6px",
62
+ borderRadius: "full",
63
+ bg: "yellow.500",
64
+ ml: "2",
65
+ "aria-label": "ungespeicherte \xC4nderung"
66
+ }
67
+ )
68
+ ] }),
51
69
  actions
52
70
  ] }) : label),
53
- children({ ...field, "aria-describedby": describedBy }),
71
+ children(
72
+ { ...field, "aria-describedby": describedBy },
73
+ { isDirty }
74
+ ),
54
75
  description && /* @__PURE__ */ jsx(Text, { id: descriptionId, fontSize: "xs", color: "muted", children: description }),
55
76
  helperText && (typeof helperText === "string" ? /* @__PURE__ */ jsx(Field.HelperText, { id: helperId, children: helperText }) : /* @__PURE__ */ jsx("span", { id: helperId, children: helperText })),
56
77
  fieldState.error && /* @__PURE__ */ jsx(Field.ErrorText, { id: errorId, "aria-live": "polite", children: fieldState.error.message })
@@ -73,30 +94,41 @@ function ArrayField(props) {
73
94
  addLabel = "Add Field",
74
95
  removeLabel = "Remove Item",
75
96
  readOnly,
97
+ showDirtyState,
76
98
  emptyState,
77
99
  ...rest
78
100
  } = props;
79
- return /* @__PURE__ */ jsx(FormField, { name, label, readOnly, ...rest, children: () => /* @__PURE__ */ jsx(Box, { py: 4, px: 4, bg: "bg", rounded: "md", children: mode === "dynamic" ? /* @__PURE__ */ jsx(
80
- DynamicArray,
101
+ return /* @__PURE__ */ jsx(
102
+ FormField,
81
103
  {
82
104
  name,
83
- valueHeader,
84
- keyHeader,
85
- addLabel,
86
- removeLabel,
105
+ label,
87
106
  readOnly,
88
- emptyState
89
- }
90
- ) : /* @__PURE__ */ jsx(
91
- KeyedArray,
92
- {
93
- name,
94
- valueHeader,
95
- keyHeader,
96
- keys,
97
- readOnly
107
+ showDirtyState,
108
+ ...rest,
109
+ children: () => /* @__PURE__ */ jsx(Box, { py: 4, px: 4, bg: "bg", rounded: "md", children: mode === "dynamic" ? /* @__PURE__ */ jsx(
110
+ DynamicArray,
111
+ {
112
+ name,
113
+ valueHeader,
114
+ keyHeader,
115
+ addLabel,
116
+ removeLabel,
117
+ readOnly,
118
+ emptyState
119
+ }
120
+ ) : /* @__PURE__ */ jsx(
121
+ KeyedArray,
122
+ {
123
+ name,
124
+ valueHeader,
125
+ keyHeader,
126
+ keys,
127
+ readOnly
128
+ }
129
+ ) })
98
130
  }
99
- ) }) });
131
+ );
100
132
  }
101
133
  ArrayField.displayName = "ArrayField";
102
134
  var DynamicArray = React.memo((props) => {
@@ -184,17 +216,28 @@ var KeyedArray = React.memo((props) => {
184
216
  });
185
217
  KeyedArray.displayName = "KeyedArray";
186
218
  function CheckboxField({
187
- ref,
188
219
  ...props
189
220
  }) {
190
- const { name, label, value, disabled, helperText, children } = props;
191
- const { control } = useFormContext();
221
+ const {
222
+ name,
223
+ label,
224
+ value,
225
+ disabled,
226
+ showDirtyState,
227
+ helperText,
228
+ children,
229
+ ...rest
230
+ } = props;
192
231
  return /* @__PURE__ */ jsx(
193
- Controller,
232
+ FormField,
194
233
  {
195
234
  name,
196
- control,
197
- render: ({ field, fieldState }) => {
235
+ label,
236
+ disabled,
237
+ showDirtyState,
238
+ helperText,
239
+ ...rest,
240
+ children: (field) => {
198
241
  const isArrayMode = value !== void 0;
199
242
  const isChecked = isArrayMode ? Array.isArray(field.value) && field.value.includes(value) : !!field.value;
200
243
  const handleCheckedChange = (details) => {
@@ -214,32 +257,24 @@ function CheckboxField({
214
257
  }
215
258
  };
216
259
  const uniqueId = isArrayMode ? `${name}-${String(value)}` : name;
217
- return /* @__PURE__ */ jsxs(Field.Root, { invalid: !!fieldState.error, disabled, children: [
218
- /* @__PURE__ */ jsxs(
219
- Checkbox.Root,
220
- {
221
- id: uniqueId,
222
- name: field.name,
223
- value: isArrayMode ? String(value) : void 0,
224
- invalid: !!fieldState.error,
225
- ref,
226
- checked: isChecked,
227
- onCheckedChange: handleCheckedChange,
228
- onBlur: field.onBlur,
229
- disabled,
230
- children: [
231
- /* @__PURE__ */ jsx(Checkbox.HiddenInput, {}),
232
- /* @__PURE__ */ jsx(Checkbox.Control, { children: /* @__PURE__ */ jsx(Checkbox.Indicator, {}) }),
233
- (label || children) && /* @__PURE__ */ jsxs(Checkbox.Label, { children: [
234
- label,
235
- children
236
- ] })
237
- ]
238
- }
239
- ),
240
- helperText && /* @__PURE__ */ jsx(Field.HelperText, { children: helperText }),
241
- fieldState.error && /* @__PURE__ */ jsx(Field.ErrorText, { "aria-live": "polite", children: fieldState.error.message })
242
- ] });
260
+ return /* @__PURE__ */ jsxs(
261
+ Checkbox.Root,
262
+ {
263
+ id: uniqueId,
264
+ name: field.name,
265
+ value: isArrayMode ? String(value) : void 0,
266
+ checked: isChecked,
267
+ onCheckedChange: handleCheckedChange,
268
+ onBlur: field.onBlur,
269
+ disabled,
270
+ "aria-describedby": field["aria-describedby"],
271
+ children: [
272
+ /* @__PURE__ */ jsx(Checkbox.HiddenInput, {}),
273
+ /* @__PURE__ */ jsx(Checkbox.Control, { children: /* @__PURE__ */ jsx(Checkbox.Indicator, {}) }),
274
+ (label || children) && /* @__PURE__ */ jsx(Checkbox.Label, { children })
275
+ ]
276
+ }
277
+ );
243
278
  }
244
279
  }
245
280
  );
@@ -429,6 +464,29 @@ function DatePickerField({
429
464
  );
430
465
  }
431
466
  DatePickerField.displayName = "DatePickerField";
467
+ function DirtyCounter({
468
+ label = "{count} ungespeicherte \xC4nderungen",
469
+ hideWhenClean = true
470
+ }) {
471
+ const ctx = useFormContext();
472
+ const dirty = ctx ? ctx.formState.dirtyFields : {};
473
+ const count = Object.keys(dirty).length;
474
+ if (count === 0 && hideWhenClean) return null;
475
+ return /* @__PURE__ */ jsxs(HStack, { gap: "2", fontSize: "sm", color: "yellow.700", children: [
476
+ /* @__PURE__ */ jsx(
477
+ Box,
478
+ {
479
+ width: "6px",
480
+ height: "6px",
481
+ borderRadius: "full",
482
+ bg: "yellow.500",
483
+ "aria-hidden": true
484
+ }
485
+ ),
486
+ /* @__PURE__ */ jsx(Text, { children: label.replace("{count}", String(count)) })
487
+ ] });
488
+ }
489
+ DirtyCounter.displayName = "DirtyCounter";
432
490
  var DirtyFormGuard = ({
433
491
  title,
434
492
  message,
@@ -669,6 +727,7 @@ function InputField({
669
727
  inputProps,
670
728
  readOnly,
671
729
  disabled,
730
+ showDirtyState,
672
731
  ...rest
673
732
  } = props;
674
733
  return /* @__PURE__ */ jsx(
@@ -678,8 +737,9 @@ function InputField({
678
737
  label,
679
738
  readOnly,
680
739
  disabled,
740
+ showDirtyState,
681
741
  ...rest,
682
- children: (field) => /* @__PURE__ */ jsx(
742
+ children: (field, { isDirty }) => /* @__PURE__ */ jsx(
683
743
  text_input_default,
684
744
  {
685
745
  ...field,
@@ -692,6 +752,8 @@ function InputField({
692
752
  readOnly,
693
753
  disabled,
694
754
  opacity: readOnly ? 0.8 : 1,
755
+ borderColor: isDirty ? "yellow.400" : void 0,
756
+ bg: isDirty ? "yellow.50" : void 0,
695
757
  ref,
696
758
  ...inputProps
697
759
  }
@@ -805,17 +867,34 @@ function NumberInputField2({
805
867
  }
806
868
  NumberInputField2.displayName = "NumberInputField";
807
869
  function RadioGroupField(props) {
808
- const { name, label, options, radioGroupProps, stackProps, ...rest } = props;
809
- return /* @__PURE__ */ jsx(FormField, { name, label, ...rest, children: (field) => /* @__PURE__ */ jsx(
810
- RadioGroup,
870
+ const {
871
+ name,
872
+ label,
873
+ options,
874
+ showDirtyState,
875
+ radioGroupProps,
876
+ stackProps,
877
+ ...rest
878
+ } = props;
879
+ return /* @__PURE__ */ jsx(
880
+ FormField,
811
881
  {
812
- value: String(field.value ?? ""),
813
- onValueChange: (e) => field.onChange(e.value),
814
- "aria-describedby": field["aria-describedby"],
815
- ...radioGroupProps,
816
- children: /* @__PURE__ */ jsx(Stack, { direction: "row", ...stackProps, children: options.map((option) => /* @__PURE__ */ jsx(Radio, { value: option.value, children: option.label }, option.value)) })
882
+ name,
883
+ label,
884
+ showDirtyState,
885
+ ...rest,
886
+ children: (field) => /* @__PURE__ */ jsx(
887
+ RadioGroup,
888
+ {
889
+ value: String(field.value ?? ""),
890
+ onValueChange: (e) => field.onChange(e.value),
891
+ "aria-describedby": field["aria-describedby"],
892
+ ...radioGroupProps,
893
+ children: /* @__PURE__ */ jsx(Stack, { direction: "row", ...stackProps, children: options.map((option) => /* @__PURE__ */ jsx(Radio, { value: option.value, children: option.label }, option.value)) })
894
+ }
895
+ )
817
896
  }
818
- ) });
897
+ );
819
898
  }
820
899
  RadioGroupField.displayName = "RadioGroupField";
821
900
  function SelectField({
@@ -830,6 +909,7 @@ function SelectField({
830
909
  children,
831
910
  readOnly,
832
911
  disabled,
912
+ showDirtyState,
833
913
  ...rest
834
914
  } = props;
835
915
  return /* @__PURE__ */ jsx(
@@ -839,8 +919,9 @@ function SelectField({
839
919
  label,
840
920
  readOnly,
841
921
  disabled,
922
+ showDirtyState,
842
923
  ...rest,
843
- children: (field) => /* @__PURE__ */ jsx(
924
+ children: (field, { isDirty }) => /* @__PURE__ */ jsx(
844
925
  NativeSelect,
845
926
  {
846
927
  disabled: readOnly || disabled,
@@ -849,6 +930,8 @@ function SelectField({
849
930
  value: String(field.value ?? ""),
850
931
  id: name,
851
932
  ref,
933
+ borderColor: isDirty ? "yellow.400" : void 0,
934
+ bg: isDirty ? "yellow.50" : void 0,
852
935
  ...selectProps,
853
936
  children
854
937
  }
@@ -861,7 +944,15 @@ function SwitchField({
861
944
  ref,
862
945
  ...props
863
946
  }) {
864
- const { name, label, readOnly, disabled, switchProps, ...rest } = props;
947
+ const {
948
+ name,
949
+ label,
950
+ readOnly,
951
+ disabled,
952
+ showDirtyState,
953
+ switchProps,
954
+ ...rest
955
+ } = props;
865
956
  return /* @__PURE__ */ jsx(
866
957
  FormField,
867
958
  {
@@ -869,6 +960,7 @@ function SwitchField({
869
960
  label,
870
961
  readOnly,
871
962
  disabled,
963
+ showDirtyState,
872
964
  ...rest,
873
965
  children: (field) => /* @__PURE__ */ jsx(
874
966
  Switch,
@@ -901,6 +993,7 @@ function TextareaField({
901
993
  textareaProps,
902
994
  readOnly,
903
995
  disabled,
996
+ showDirtyState,
904
997
  ...rest
905
998
  } = props;
906
999
  return /* @__PURE__ */ jsx(
@@ -910,8 +1003,9 @@ function TextareaField({
910
1003
  label,
911
1004
  readOnly,
912
1005
  disabled,
1006
+ showDirtyState,
913
1007
  ...rest,
914
- children: (field) => /* @__PURE__ */ jsx(
1008
+ children: (field, { isDirty }) => /* @__PURE__ */ jsx(
915
1009
  Textarea,
916
1010
  {
917
1011
  ...field,
@@ -921,6 +1015,8 @@ function TextareaField({
921
1015
  readOnly,
922
1016
  disabled,
923
1017
  opacity: readOnly ? 0.8 : 1,
1018
+ borderColor: isDirty ? "yellow.400" : void 0,
1019
+ bg: isDirty ? "yellow.50" : void 0,
924
1020
  ref,
925
1021
  ...textareaProps
926
1022
  }
@@ -929,7 +1025,14 @@ function TextareaField({
929
1025
  );
930
1026
  }
931
1027
  TextareaField.displayName = "TextareaField";
1028
+ function useFieldDirty(name, opts = {}) {
1029
+ const ctx = useFormContext();
1030
+ const { showDirtyState = true } = opts;
1031
+ if (!showDirtyState || !ctx) return false;
1032
+ const dirty = ctx.formState.dirtyFields;
1033
+ return Boolean(dirty[name]);
1034
+ }
932
1035
 
933
- export { ArrayField, CheckboxField, CodeField, ColorPickerField, ControlledFormField, DatePickerField, DirtyFormGuard, FileField, FormField, InlineEdit, InputField, MarkdownField, NumberInputField2 as NumberInputField, RadioGroupField, SelectField, SwitchField, TextareaField };
1036
+ export { ArrayField, CheckboxField, CodeField, ColorPickerField, ControlledFormField, DatePickerField, DirtyCounter, DirtyFormGuard, FileField, FormField, InlineEdit, InputField, MarkdownField, NumberInputField2 as NumberInputField, RadioGroupField, SelectField, SwitchField, TextareaField, useFieldDirty };
934
1037
  //# sourceMappingURL=index.js.map
935
1038
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/forms/form-field.tsx","../../src/forms/array-field.tsx","../../src/forms/checkbox-field.tsx","../../src/forms/code-field.tsx","../../src/forms/color-picker-field.tsx","../../src/forms/controlled-form-field.tsx","../../src/forms/date-picker-field.tsx","../../src/forms/dirty-form-guard.tsx","../../src/forms/file-field.tsx","../../src/forms/inline-edit.tsx","../../src/forms/input-field.tsx","../../src/forms/markdown-field.tsx","../../src/forms/number-input-field.tsx","../../src/forms/radio-group-field.tsx","../../src/forms/select-field.tsx","../../src/forms/switch-field.tsx","../../src/forms/textarea-field.tsx"],"names":["jsx","useFormContext","jsxs","Controller","Field","IconButton","useId","Input","useCallback","Button","ButtonGroup","NumberInputField"],"mappings":"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","file":"index.js","sourcesContent":["import { Field } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport { useId } from \"react\";\nimport {\n\tController,\n\ttype ControllerRenderProps,\n\ttype FieldValues,\n\ttype Path,\n\tuseFormContext,\n} from \"react-hook-form\";\nimport { HStack } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\n\nexport interface FormFieldProps<T extends FieldValues> {\n\tname: Path<T>;\n\tlabel?: React.ReactNode;\n\thelperText?: React.ReactNode;\n\t/** Persistent description that shows even when there's an error. */\n\tdescription?: React.ReactNode;\n\trequired?: boolean;\n\tdisabled?: boolean;\n\treadOnly?: boolean;\n\tactions?: React.ReactNode;\n\tchildren: (\n\t\tfield: ControllerRenderProps<T, Path<T>> & {\n\t\t\t/** Computed aria-describedby linking to helper/description/error elements. */\n\t\t\t\"aria-describedby\"?: string;\n\t\t},\n\t) => React.ReactNode;\n}\n\nexport function FormField<T extends FieldValues>({\n\tname,\n\tlabel,\n\thelperText,\n\tdescription,\n\trequired,\n\tdisabled,\n\treadOnly,\n\tactions,\n\tchildren,\n}: FormFieldProps<T>) {\n\tconst { control } = useFormContext<T>();\n\tconst uid = useId();\n\tconst descriptionId = `${uid}-description`;\n\tconst helperId = `${uid}-helper`;\n\tconst errorId = `${uid}-error`;\n\n\treturn (\n\t\t<Controller\n\t\t\tname={name}\n\t\t\tcontrol={control}\n\t\t\trender={({ field, fieldState }) => {\n\t\t\t\tconst describedBy =\n\t\t\t\t\t[\n\t\t\t\t\t\tdescription ? descriptionId : null,\n\t\t\t\t\t\thelperText ? helperId : null,\n\t\t\t\t\t\tfieldState.error ? errorId : null,\n\t\t\t\t\t]\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(\" \") || undefined;\n\n\t\t\t\treturn (\n\t\t\t\t\t<Field.Root\n\t\t\t\t\t\tinvalid={!!fieldState.error}\n\t\t\t\t\t\trequired={required}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t>\n\t\t\t\t\t\t{label &&\n\t\t\t\t\t\t\t(typeof label === \"string\" ? (\n\t\t\t\t\t\t\t\t<HStack>\n\t\t\t\t\t\t\t\t\t<Field.Label flex=\"1\" htmlFor={name}>\n\t\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t\t{actions}\n\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tlabel\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t{children({ ...field, \"aria-describedby\": describedBy })}\n\t\t\t\t\t\t{description && (\n\t\t\t\t\t\t\t<Text id={descriptionId} fontSize=\"xs\" color=\"muted\">\n\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{helperText &&\n\t\t\t\t\t\t\t(typeof helperText === \"string\" ? (\n\t\t\t\t\t\t\t\t<Field.HelperText id={helperId}>{helperText}</Field.HelperText>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span id={helperId}>{helperText}</span>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t{fieldState.error && (\n\t\t\t\t\t\t\t<Field.ErrorText id={errorId} aria-live=\"polite\">\n\t\t\t\t\t\t\t\t{fieldState.error.message}\n\t\t\t\t\t\t\t</Field.ErrorText>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Field.Root>\n\t\t\t\t);\n\t\t\t}}\n\t\t/>\n\t);\n}\n(FormField as { displayName?: string }).displayName = \"FormField\";\n","import { Button, ButtonGroup, IconButton, Input } from \"@chakra-ui/react\";\nimport { Plus, Trash2 } from \"lucide-react\";\nimport React from \"react\";\nimport {\n\ttype FieldValues,\n\tuseFieldArray,\n\tuseFormContext,\n} from \"react-hook-form\";\nimport { Box, Grid, GridItem, Stack } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface ArrayFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/**\n\t * The mode of the array field.\n\t * - `dynamic` — add/remove key-value pairs\n\t * - `keyed` — fixed keys, editable values\n\t * @default \"dynamic\"\n\t */\n\tmode?: \"dynamic\" | \"keyed\";\n\t/** Header label for the value column. @default \"Value\" */\n\tvalueHeader?: string;\n\t/** Header label for the key column. @default \"Key\" */\n\tkeyHeader?: string;\n\t/** Fixed keys when mode is \"keyed\". */\n\tkeys?: Array<{ key: string; value: string }>;\n\t/** Label for the add button. @default \"Add Field\" */\n\taddLabel?: string;\n\t/** Aria label for the remove button. @default \"Remove Item\" */\n\tremoveLabel?: string;\n\t/** Content to display when there are no items. */\n\temptyState?: React.ReactNode;\n}\n\nexport function ArrayField<T extends FieldValues>(props: ArrayFieldProps<T>) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tmode = \"dynamic\",\n\t\tvalueHeader = \"Value\",\n\t\tkeyHeader = \"Key\",\n\t\tkeys = [],\n\t\taddLabel = \"Add Field\",\n\t\tremoveLabel = \"Remove Item\",\n\t\treadOnly,\n\t\temptyState,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(/* field */) => (\n\t\t\t\t<Box py={4} px={4} bg=\"bg\" rounded=\"md\">\n\t\t\t\t\t{mode === \"dynamic\" ? (\n\t\t\t\t\t\t<DynamicArray\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tvalueHeader={valueHeader}\n\t\t\t\t\t\t\tkeyHeader={keyHeader}\n\t\t\t\t\t\t\taddLabel={addLabel}\n\t\t\t\t\t\t\tremoveLabel={removeLabel}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t\temptyState={emptyState}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<KeyedArray\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tvalueHeader={valueHeader}\n\t\t\t\t\t\t\tkeyHeader={keyHeader}\n\t\t\t\t\t\t\tkeys={keys}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</Box>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n\nArrayField.displayName = \"ArrayField\";\n\ninterface DynamicArrayProps {\n\tname: string;\n\tvalueHeader: string;\n\tkeyHeader: string;\n\taddLabel: string;\n\tremoveLabel: string;\n\treadOnly?: boolean;\n\temptyState?: React.ReactNode;\n}\n\nconst DynamicArray: React.FC<DynamicArrayProps> = React.memo((props) => {\n\tconst {\n\t\tname,\n\t\tvalueHeader,\n\t\tkeyHeader,\n\t\taddLabel,\n\t\tremoveLabel,\n\t\treadOnly,\n\t\temptyState,\n\t} = props;\n\n\tconst { control, register } = useFormContext();\n\tconst { fields, append, remove } = useFieldArray({\n\t\tcontrol,\n\t\tname: name as any,\n\t});\n\n\treturn (\n\t\t<Stack gap={4}>\n\t\t\t<Grid templateColumns=\"200px 1fr 50px\" gap={2}>\n\t\t\t\t<GridItem>\n\t\t\t\t\t<Text fontWeight={500}>{keyHeader}</Text>\n\t\t\t\t</GridItem>\n\t\t\t\t<GridItem colSpan={2}>\n\t\t\t\t\t<Text fontWeight={500}>{valueHeader}</Text>\n\t\t\t\t</GridItem>\n\n\t\t\t\t{fields.map((item, index) => (\n\t\t\t\t\t<React.Fragment key={item.id}>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t{...register(`${name}.${index}.key` as any)}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t{...register(`${name}.${index}.value` as any)}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tcolorPalette=\"red\"\n\t\t\t\t\t\t\taria-label={removeLabel}\n\t\t\t\t\t\t\tonClick={() => remove(index)}\n\t\t\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Trash2 size={16} />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t))}\n\t\t\t</Grid>\n\t\t\t{fields.length === 0 && emptyState && (\n\t\t\t\t<Box py={4} textAlign=\"center\">\n\t\t\t\t\t{emptyState}\n\t\t\t\t</Box>\n\t\t\t)}\n\t\t\t<ButtonGroup>\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tonClick={() => append({ key: \"\", value: \"\" })}\n\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t>\n\t\t\t\t\t<Plus size={16} />\n\t\t\t\t\t{addLabel}\n\t\t\t\t</Button>\n\t\t\t</ButtonGroup>\n\t\t</Stack>\n\t);\n});\n\nDynamicArray.displayName = \"DynamicArray\";\n\ninterface KeyedArrayProps {\n\tname: string;\n\tvalueHeader: string;\n\tkeyHeader: string;\n\tkeys: Array<{ key: string; value: string }>;\n\treadOnly?: boolean;\n}\n\nconst KeyedArray: React.FC<KeyedArrayProps> = React.memo((props) => {\n\tconst { name, valueHeader, keyHeader, keys, readOnly } = props;\n\tconst { register } = useFormContext();\n\n\treturn (\n\t\t<Stack gap={4}>\n\t\t\t<Grid templateColumns=\"200px 1fr\" gap={2}>\n\t\t\t\t<GridItem>\n\t\t\t\t\t<Text fontWeight={500}>{keyHeader}</Text>\n\t\t\t\t</GridItem>\n\t\t\t\t<GridItem>\n\t\t\t\t\t<Text fontWeight={500}>{valueHeader}</Text>\n\t\t\t\t</GridItem>\n\t\t\t\t{keys.map((keyItem) => (\n\t\t\t\t\t<React.Fragment key={keyItem.key}>\n\t\t\t\t\t\t<Text py={2}>{keyItem.value ?? keyItem.key}</Text>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t{...register(`${name}.${keyItem.key}` as any)}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t))}\n\t\t\t</Grid>\n\t\t</Stack>\n\t);\n});\n\nKeyedArray.displayName = \"KeyedArray\";\n","import { Checkbox, Field } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport {\n\tController,\n\ttype FieldValues,\n\ttype Path,\n\tuseFormContext,\n} from \"react-hook-form\";\n\nexport interface CheckboxFieldProps<T extends FieldValues> {\n\tname: Path<T>;\n\tlabel?: string;\n\t/** When provided, the field is treated as an array of checked values. */\n\tvalue?: string | number;\n\tdisabled?: boolean;\n\thelperText?: React.ReactNode;\n\tchildren?: React.ReactNode;\n}\n\nexport function CheckboxField<T extends FieldValues>({\n\tref,\n\t...props\n}: CheckboxFieldProps<T> & { ref?: React.Ref<HTMLLabelElement> }) {\n\tconst { name, label, value, disabled, helperText, children } = props;\n\tconst { control } = useFormContext<T>();\n\n\treturn (\n\t\t<Controller\n\t\t\tname={name}\n\t\t\tcontrol={control}\n\t\t\trender={({ field, fieldState }) => {\n\t\t\t\t// Array mode: field.value is an array, value prop identifies the item\n\t\t\t\tconst isArrayMode = value !== undefined;\n\n\t\t\t\tconst isChecked = isArrayMode\n\t\t\t\t\t? Array.isArray(field.value) && field.value.includes(value)\n\t\t\t\t\t: !!field.value;\n\n\t\t\t\tconst handleCheckedChange = (details: {\n\t\t\t\t\tchecked: boolean | \"indeterminate\";\n\t\t\t\t}) => {\n\t\t\t\t\tif (isArrayMode) {\n\t\t\t\t\t\tconst currentValue = Array.isArray(field.value)\n\t\t\t\t\t\t\t? [...field.value]\n\t\t\t\t\t\t\t: [];\n\t\t\t\t\t\tif (details.checked) {\n\t\t\t\t\t\t\tif (!currentValue.includes(value)) {\n\t\t\t\t\t\t\t\tcurrentValue.push(value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst idx = currentValue.indexOf(value);\n\t\t\t\t\t\t\tif (idx > -1) currentValue.splice(idx, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfield.onChange(currentValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfield.onChange(!!details.checked);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst uniqueId = isArrayMode ? `${name}-${String(value)}` : name;\n\n\t\t\t\treturn (\n\t\t\t\t\t<Field.Root invalid={!!fieldState.error} disabled={disabled}>\n\t\t\t\t\t\t<Checkbox.Root\n\t\t\t\t\t\t\tid={uniqueId}\n\t\t\t\t\t\t\tname={field.name}\n\t\t\t\t\t\t\tvalue={isArrayMode ? String(value) : undefined}\n\t\t\t\t\t\t\tinvalid={!!fieldState.error}\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\tchecked={isChecked}\n\t\t\t\t\t\t\tonCheckedChange={handleCheckedChange}\n\t\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Checkbox.HiddenInput />\n\t\t\t\t\t\t\t<Checkbox.Control>\n\t\t\t\t\t\t\t\t<Checkbox.Indicator />\n\t\t\t\t\t\t\t</Checkbox.Control>\n\t\t\t\t\t\t\t{(label || children) && (\n\t\t\t\t\t\t\t\t<Checkbox.Label>\n\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t\t\t</Checkbox.Label>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Checkbox.Root>\n\t\t\t\t\t\t{helperText && <Field.HelperText>{helperText}</Field.HelperText>}\n\t\t\t\t\t\t{fieldState.error && (\n\t\t\t\t\t\t\t<Field.ErrorText aria-live=\"polite\">\n\t\t\t\t\t\t\t\t{fieldState.error.message}\n\t\t\t\t\t\t\t</Field.ErrorText>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Field.Root>\n\t\t\t\t);\n\t\t\t}}\n\t\t/>\n\t);\n}\n(CheckboxField as { displayName?: string }).displayName = \"CheckboxField\";\n","import type React from \"react\";\nimport { useCallback } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// @monaco-editor/react is an optional peer dependency\ntype MonacoEditorProps = {\n\tvalue?: string;\n\tlanguage?: string;\n\tonChange?: (value: string | undefined) => void;\n\tonMount?: (editor: any, monaco: any) => void;\n\theight?: string;\n\toptions?: Record<string, any>;\n};\n\nexport interface CodeFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tlanguage?: string;\n\tplaceholder?: string;\n\theight?: string;\n\tindentWithTab?: boolean;\n\t/** The Monaco Editor component. Pass it to avoid hard dependency on @monaco-editor/react. */\n\tEditor?: React.ComponentType<MonacoEditorProps>;\n}\n\nexport function CodeField<T extends FieldValues>({\n\tref,\n\t...props\n}: CodeFieldProps<T> & { ref?: React.Ref<any> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tlanguage = \"typescript\",\n\t\theight = \"400px\",\n\t\tindentWithTab = true,\n\t\treadOnly,\n\t\tEditor,\n\t\t...rest\n\t} = props;\n\n\tconst onMount = useCallback(\n\t\t(editorInstance: any, _monaco: any) => {\n\t\t\tif (typeof ref === \"function\") {\n\t\t\t\tref(editorInstance);\n\t\t\t} else if (ref && typeof ref === \"object\") {\n\t\t\t\t(ref as React.MutableRefObject<any>).current = editorInstance;\n\t\t\t}\n\t\t\teditorInstance.updateOptions?.({\n\t\t\t\ttabCompletion: indentWithTab ? \"on\" : \"off\",\n\t\t\t});\n\t\t},\n\t\t[ref, indentWithTab],\n\t);\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(field) =>\n\t\t\t\tEditor ? (\n\t\t\t\t\t<Editor\n\t\t\t\t\t\tvalue={field.value}\n\t\t\t\t\t\tlanguage={language}\n\t\t\t\t\t\tonChange={(value) => field.onChange(value ?? \"\")}\n\t\t\t\t\t\tonMount={onMount}\n\t\t\t\t\t\theight={height}\n\t\t\t\t\t\toptions={{\n\t\t\t\t\t\t\treadOnly,\n\t\t\t\t\t\t\twordWrap: \"on\",\n\t\t\t\t\t\t\tminimap: { enabled: false },\n\t\t\t\t\t\t\tscrollBeyondLastLine: false,\n\t\t\t\t\t\t\ttabCompletion: indentWithTab ? \"on\" : \"off\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontFamily: \"monospace\",\n\t\t\t\t\t\t\tfontSize: \"0.875rem\",\n\t\t\t\t\t\t\tpadding: \"0.75rem\",\n\t\t\t\t\t\t\tborder: \"1px solid var(--chakra-colors-border)\",\n\t\t\t\t\t\t\tborderRadius: \"0.375rem\",\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\tminHeight: height,\n\t\t\t\t\t\t\tresize: \"vertical\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t}\n\t\t</FormField>\n\t);\n}\n(CodeField as { displayName?: string }).displayName = \"CodeField\";\n","import { type ButtonProps, IconButton, Square } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport {\n\tPopover,\n\tPopoverBody,\n\tPopoverContent,\n\tPopoverTrigger,\n} from \"../primitives/popover\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// react-colorful is an optional peer dependency\ntype HexColorPickerProps = {\n\tcolor?: string;\n\tonChange?: (color: string) => void;\n};\n\nexport interface ColorPickerFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tsize?: ButtonProps[\"size\"];\n\t/** The HexColorPicker component from react-colorful. Pass it to avoid hard dependency. */\n\tColorPicker?: React.ComponentType<HexColorPickerProps>;\n}\n\nexport function ColorPickerField<T extends FieldValues>({\n\tref,\n\t...props\n}: ColorPickerFieldProps<T> & { ref?: React.Ref<HTMLButtonElement> }) {\n\tconst { name, label, size = \"md\", readOnly, ColorPicker, ...rest } = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(field) => (\n\t\t\t\t<Popover>\n\t\t\t\t\t<PopoverTrigger asChild>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\tw=\"fit-content\"\n\t\t\t\t\t\t\tborderWidth=\"1px\"\n\t\t\t\t\t\t\trounded=\"md\"\n\t\t\t\t\t\t\tp={1}\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t\t\t\taria-label={`Color: ${field.value || \"none\"}`}\n\t\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Square rounded=\"sm\" bg={field.value} size={6} />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</PopoverTrigger>\n\t\t\t\t\t<PopoverContent width=\"auto\" showArrow>\n\t\t\t\t\t\t<PopoverBody>\n\t\t\t\t\t\t\t{ColorPicker ? (\n\t\t\t\t\t\t\t\t<ColorPicker\n\t\t\t\t\t\t\t\t\tcolor={field.value}\n\t\t\t\t\t\t\t\t\tonChange={(color) => field.onChange(color)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\t\t\t\tvalue={field.value || \"#000000\"}\n\t\t\t\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\twidth: 200,\n\t\t\t\t\t\t\t\t\t\theight: 200,\n\t\t\t\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</PopoverBody>\n\t\t\t\t\t</PopoverContent>\n\t\t\t\t</Popover>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(ColorPickerField as { displayName?: string }).displayName = \"ColorPickerField\";\n","import { Field } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport { useId } from \"react\";\nimport { HStack } from \"../primitives/layout\";\n\nexport interface ControlledFormFieldProps {\n\tname: string;\n\tlabel?: React.ReactNode;\n\thelperText?: React.ReactNode;\n\terrorMessage?: React.ReactNode;\n\trequired?: boolean;\n\tdisabled?: boolean;\n\treadOnly?: boolean;\n\tactions?: React.ReactNode;\n\tchildren: React.ReactNode;\n}\n\nexport const ControlledFormField: React.FC<ControlledFormFieldProps> = ({\n\tname,\n\tlabel,\n\thelperText,\n\terrorMessage,\n\trequired,\n\tdisabled,\n\treadOnly,\n\tactions,\n\tchildren,\n}) => {\n\tconst uid = useId();\n\tconst helperId = `${uid}-helper`;\n\tconst errorId = `${uid}-error`;\n\n\treturn (\n\t\t<Field.Root\n\t\t\tinvalid={!!errorMessage}\n\t\t\trequired={required}\n\t\t\tdisabled={disabled}\n\t\t\treadOnly={readOnly}\n\t\t>\n\t\t\t{label &&\n\t\t\t\t(typeof label === \"string\" ? (\n\t\t\t\t\t<HStack>\n\t\t\t\t\t\t<Field.Label flex=\"1\" htmlFor={name}>\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t{actions}\n\t\t\t\t\t</HStack>\n\t\t\t\t) : (\n\t\t\t\t\tlabel\n\t\t\t\t))}\n\t\t\t{/* aria-describedby must be set manually by the consumer since children is ReactNode, not a render function. */}\n\t\t\t{children}\n\t\t\t{helperText &&\n\t\t\t\t(typeof helperText === \"string\" ? (\n\t\t\t\t\t<Field.HelperText id={helperId}>{helperText}</Field.HelperText>\n\t\t\t\t) : (\n\t\t\t\t\t<span id={helperId}>{helperText}</span>\n\t\t\t\t))}\n\t\t\t{errorMessage && (\n\t\t\t\t<Field.ErrorText id={errorId} aria-live=\"polite\">\n\t\t\t\t\t{errorMessage}\n\t\t\t\t</Field.ErrorText>\n\t\t\t)}\n\t\t</Field.Root>\n\t);\n};\nControlledFormField.displayName = \"ControlledFormField\";\n","import { Input } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface DatePickerFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** Minimum date in YYYY-MM-DD format */\n\tmin?: string;\n\t/** Maximum date in YYYY-MM-DD format */\n\tmax?: string;\n\t/** Input type: \"date\", \"datetime-local\", or \"time\" */\n\ttype?: \"date\" | \"datetime-local\" | \"time\";\n}\n\nexport function DatePickerField<T extends FieldValues>({\n\tref,\n\t...props\n}: DatePickerFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tmin,\n\t\tmax,\n\t\ttype = \"date\",\n\t\treadOnly,\n\t\tdisabled,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<Input\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\ttype={type}\n\t\t\t\t\tid={name}\n\t\t\t\t\tmin={min}\n\t\t\t\t\tmax={max}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tref={ref}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(DatePickerField as { displayName?: string }).displayName = \"DatePickerField\";\n","import type React from \"react\";\nimport { useFormContext } from \"react-hook-form\";\nimport { useBlocker } from \"react-router-dom\";\nimport { LeavePageConfirmation } from \"../primitives/leave-page-confirmation\";\n\nexport interface DirtyFormGuardProps {\n\t/** Dialog title. @default \"You have unsaved changes\" */\n\ttitle?: string;\n\t/** Dialog message body. @default \"Are you sure you want to leave this page? You have unsaved changes.\" */\n\tmessage?: string;\n\t/** Label for the confirm/leave button. @default \"Leave\" */\n\tconfirmLabel?: string;\n\t/** Label for the cancel/stay button. @default \"Stay\" */\n\tcancelLabel?: string;\n}\n\nexport const DirtyFormGuard: React.FC<DirtyFormGuardProps> = ({\n\ttitle,\n\tmessage,\n\tconfirmLabel,\n\tcancelLabel,\n}) => {\n\tconst { formState } = useFormContext();\n\tconst blocker = useBlocker(formState.isDirty);\n\n\treturn (\n\t\t<LeavePageConfirmation\n\t\t\tblocked={blocker.state === \"blocked\"}\n\t\t\tonConfirmLeave={() => blocker.proceed?.()}\n\t\t\tonCancelLeave={() => blocker.reset?.()}\n\t\t\ttitle={title}\n\t\t\tmessage={message}\n\t\t\tconfirmLabel={confirmLabel}\n\t\t\tcancelLabel={cancelLabel}\n\t\t/>\n\t);\n};\nDirtyFormGuard.displayName = \"DirtyFormGuard\";\n","import { Button } from \"@chakra-ui/react\";\nimport { Upload } from \"lucide-react\";\nimport type React from \"react\";\nimport { useCallback, useEffect } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Box, Flex } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// react-dropzone is an optional peer dependency\ntype DropzoneOptions = {\n\tnoClick?: boolean;\n\tmultiple?: boolean;\n\tdisabled?: boolean;\n\taccept?: Record<string, string[]>;\n\tonDrop?: (files: File[]) => void;\n};\n\ntype UseDropzoneReturn = {\n\tgetRootProps: () => Record<string, any>;\n\tgetInputProps: () => Record<string, any>;\n\tisDragActive: boolean;\n\topen: () => void;\n};\n\nexport interface FileFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** Accept configuration for file types, e.g. { \"image/*\": [\".png\", \".jpg\"] } */\n\taccept?: Record<string, string[]>;\n\t/** Allow multiple file selection. @default false */\n\tmultiple?: boolean;\n\t/** Text shown when dragging files over. @default \"Release to upload\" */\n\tdragActiveText?: string;\n\t/** Text shown below the file preview. @default \"Drag & drop a file to upload\" */\n\tdropHintText?: string;\n\t/** Label for the upload button. @default \"Choose File\" */\n\tbuttonLabel?: string;\n\t/** The useDropzone hook from react-dropzone. Pass it to avoid hard dependency. */\n\tuseDropzone?: (options: DropzoneOptions) => UseDropzoneReturn;\n}\n\nexport function FileField<T extends FieldValues>(props: FileFieldProps<T>) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\taccept,\n\t\tmultiple = false,\n\t\tdisabled,\n\t\tdragActiveText = \"Release to upload\",\n\t\tdropHintText = \"Drag & drop a file to upload\",\n\t\tbuttonLabel = \"Choose File\",\n\t\tuseDropzone,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} disabled={disabled} {...rest}>\n\t\t\t{(field) => {\n\t\t\t\tif (useDropzone) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<DropzoneContent\n\t\t\t\t\t\t\tfield={field}\n\t\t\t\t\t\t\taccept={accept}\n\t\t\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tdragActiveText={dragActiveText}\n\t\t\t\t\t\t\tdropHintText={dropHintText}\n\t\t\t\t\t\t\tbuttonLabel={buttonLabel}\n\t\t\t\t\t\t\tuseDropzone={useDropzone}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Fallback: native file input\n\t\t\t\treturn (\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\t\taccept={\n\t\t\t\t\t\t\t\taccept ? Object.values(accept).flat().join(\",\") : undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\tconst files = e.target.files;\n\t\t\t\t\t\t\t\tif (!files) return;\n\t\t\t\t\t\t\t\tif (multiple) {\n\t\t\t\t\t\t\t\t\tfield.onChange(Array.from(files));\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield.onChange(files[0] || null);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{field.value && (\n\t\t\t\t\t\t\t<Text mt={2} fontSize=\"sm\" color=\"fg.muted\">\n\t\t\t\t\t\t\t\t{(field.value as File)?.name ?? \"File selected\"}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Box>\n\t\t\t\t);\n\t\t\t}}\n\t\t</FormField>\n\t);\n}\n\nFileField.displayName = \"FileField\";\n\ninterface DropzoneContentProps {\n\tfield: {\n\t\tvalue: any;\n\t\tonChange: (...event: any[]) => void;\n\t\tonBlur: () => void;\n\t\tref: React.Ref<any>;\n\t\tname: string;\n\t};\n\taccept?: Record<string, string[]>;\n\tmultiple: boolean;\n\tdisabled?: boolean;\n\tdragActiveText: string;\n\tdropHintText: string;\n\tbuttonLabel: string;\n\tuseDropzone: (options: DropzoneOptions) => UseDropzoneReturn;\n}\n\nconst DropzoneContent: React.FC<DropzoneContentProps> = ({\n\tfield,\n\taccept,\n\tmultiple,\n\tdisabled,\n\tdragActiveText,\n\tdropHintText,\n\tbuttonLabel,\n\tuseDropzone,\n}) => {\n\tconst handleDrop = useCallback(\n\t\t(files: File[]) => {\n\t\t\tif (multiple) {\n\t\t\t\tfield.onChange(files);\n\t\t\t} else {\n\t\t\t\tconst file = files[0];\n\t\t\t\tif (file) {\n\t\t\t\t\tfield.onChange(\n\t\t\t\t\t\tObject.assign(file, {\n\t\t\t\t\t\t\tpreview: URL.createObjectURL(file),\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[field, multiple],\n\t);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (field.value?.preview) {\n\t\t\t\tURL.revokeObjectURL(field.value.preview);\n\t\t\t}\n\t\t};\n\t}, [field.value]);\n\n\tconst { getRootProps, getInputProps, isDragActive, open } = useDropzone({\n\t\tnoClick: true,\n\t\tmultiple,\n\t\tdisabled,\n\t\taccept,\n\t\tonDrop: handleDrop,\n\t});\n\n\treturn (\n\t\t<Box {...getRootProps()}>\n\t\t\t<Box display=\"none\" {...getInputProps()} asChild>\n\t\t\t\t<input />\n\t\t\t</Box>\n\t\t\t<Box\n\t\t\t\tbgColor=\"bg.muted\"\n\t\t\t\tp={4}\n\t\t\t\trounded=\"md\"\n\t\t\t\toverflow=\"hidden\"\n\t\t\t\tposition=\"relative\"\n\t\t\t\ttextAlign=\"center\"\n\t\t\t>\n\t\t\t\t{isDragActive && (\n\t\t\t\t\t<Flex\n\t\t\t\t\t\tpointerEvents=\"none\"\n\t\t\t\t\t\ttop=\"0\"\n\t\t\t\t\t\tinsetInlineStart=\"0\"\n\t\t\t\t\t\tposition=\"absolute\"\n\t\t\t\t\t\tbackgroundColor=\"blackAlpha.400\"\n\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t\tzIndex={1}\n\t\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\t\tjustifyContent=\"center\"\n\t\t\t\t\t\tdirection=\"column\"\n\t\t\t\t\t\tcolor=\"white\"\n\t\t\t\t\t\tgap=\"3\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Upload size={48} />\n\t\t\t\t\t\t<Text fontSize=\"lg\" fontWeight=\"bold\">\n\t\t\t\t\t\t\t{dragActiveText}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</Flex>\n\t\t\t\t)}\n\t\t\t\t{field.value?.name && (\n\t\t\t\t\t<Text fontSize=\"sm\" color=\"fg.muted\">\n\t\t\t\t\t\t{field.value.name}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t<Text color=\"fg.muted\" fontSize=\"xs\" mt={2}>\n\t\t\t\t\t{dropHintText}\n\t\t\t\t</Text>\n\t\t\t\t<Button mt={2} size=\"sm\" variant=\"outline\" onClick={open}>\n\t\t\t\t\t<Upload size={14} />\n\t\t\t\t\t{buttonLabel}\n\t\t\t\t</Button>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n};\n","import {\n\tButtonGroup,\n\tEditable,\n\tIconButton,\n\tuseEditableContext,\n} from \"@chakra-ui/react\";\nimport { Pencil } from \"lucide-react\";\nimport type React from \"react\";\nimport { useRef } from \"react\";\n\nexport interface InlineEditProps {\n\tvalue?: string;\n\tonSubmit?: (nextValue: string) => void;\n\tonChange?: (nextValue: string) => void;\n\tonCancel?: (previousValue: string) => void;\n\t/** @default \"input\" */\n\tvariant?: \"input\" | \"textarea\";\n\tplaceholder?: string;\n\t/** @default \"md\" */\n\tfontSize?: string;\n\tfontWeight?: string;\n\tmaxW?: string;\n\tdisabled?: boolean;\n\t/** When false, submitting an empty value reverts to the previous value. @default false */\n\tallowEmpty?: boolean;\n\t/** Number of rows used to calculate minH for textarea variant. @default 3 */\n\trows?: number;\n\t/** Aria label for the edit button. @default \"Edit\" */\n\teditLabel?: string;\n}\n\ninterface CancelRefCaptureProps {\n\tcancelRef: React.MutableRefObject<(() => void) | null>;\n}\n\nconst CancelRefCapture: React.FC<CancelRefCaptureProps> = ({ cancelRef }) => {\n\tconst { cancel } = useEditableContext();\n\tcancelRef.current = cancel;\n\treturn null;\n};\n\nconst EditControls: React.FC<{ editLabel: string }> = ({ editLabel }) => {\n\tconst { editing } = useEditableContext();\n\n\tif (editing) return null;\n\n\treturn (\n\t\t<ButtonGroup>\n\t\t\t<Editable.EditTrigger asChild>\n\t\t\t\t<IconButton\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tmarginInlineStart={2}\n\t\t\t\t\taria-label={editLabel}\n\t\t\t\t>\n\t\t\t\t\t<Pencil size={16} />\n\t\t\t\t</IconButton>\n\t\t\t</Editable.EditTrigger>\n\t\t</ButtonGroup>\n\t);\n};\n\nexport const InlineEdit: React.FC<InlineEditProps> = ({\n\tvalue,\n\tonSubmit,\n\tonChange,\n\tonCancel,\n\tvariant = \"input\",\n\tplaceholder,\n\tfontSize = \"md\",\n\tfontWeight,\n\tmaxW,\n\tdisabled,\n\tallowEmpty = false,\n\trows = 3,\n\teditLabel = \"Edit\",\n}) => {\n\tconst cancelRef = useRef<(() => void) | null>(null);\n\n\tconst handleSubmit = (details: { value: string }) => {\n\t\tconst trimmed = details.value.trim();\n\t\tif (!allowEmpty && trimmed === \"\") {\n\t\t\tcancelRef.current?.();\n\t\t\treturn;\n\t\t}\n\t\tonSubmit?.(trimmed);\n\t};\n\n\treturn (\n\t\t<Editable.Root\n\t\t\tfontSize={fontSize}\n\t\t\tfontWeight={fontWeight}\n\t\t\tmaxW={maxW}\n\t\t\tvalue={String(value ?? \"\")}\n\t\t\tonValueChange={(d) => onChange?.(d.value)}\n\t\t\tonValueRevert={(d) => onCancel?.(d.value)}\n\t\t\tonValueCommit={handleSubmit}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={placeholder}\n\t\t>\n\t\t\t<CancelRefCapture cancelRef={cancelRef} />\n\t\t\t<Editable.Preview />\n\t\t\t{variant === \"textarea\" ? (\n\t\t\t\t<Editable.Textarea minH={`${rows * 1.5}em`} />\n\t\t\t) : (\n\t\t\t\t<Editable.Input />\n\t\t\t)}\n\t\t\t<EditControls editLabel={editLabel} />\n\t\t</Editable.Root>\n\t);\n};\nInlineEdit.displayName = \"InlineEdit\";\n","import type { InputProps } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport TextInput from \"../atoms/text-input/text-input\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface InputFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tplaceholder?: string;\n\ttype?: InputProps[\"type\"];\n\tappend?: string | React.ReactElement;\n\tprepend?: string | React.ReactElement;\n\tinputProps?: InputProps;\n}\n\nexport function InputField<T extends FieldValues>({\n\tref,\n\t...props\n}: InputFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tplaceholder,\n\t\ttype,\n\t\tappend,\n\t\tprepend,\n\t\tinputProps,\n\t\treadOnly,\n\t\tdisabled,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<TextInput\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\tid={name}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\ttype={type}\n\t\t\t\t\tappend={append}\n\t\t\t\t\tprepend={prepend}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...inputProps}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(InputField as { displayName?: string }).displayName = \"InputField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// @uiw/react-md-editor is an optional peer dependency\ntype MDEditorProps = {\n\tvalue?: string;\n\tonChange?: (value?: string) => void;\n\tminHeight?: number;\n\tmaxHeight?: number;\n\tvisibleDragbar?: boolean;\n};\n\ntype MDEditorComponent = React.ComponentType<MDEditorProps> & {\n\tMarkdown?: React.ComponentType<{ source?: string }>;\n};\n\nexport interface MarkdownFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** The MDEditor component from @uiw/react-md-editor. Pass it to avoid hard dependency. */\n\tMDEditor?: MDEditorComponent;\n\tminHeight?: number;\n\tmaxHeight?: number;\n}\n\nexport function MarkdownField<T extends FieldValues>(\n\tprops: MarkdownFieldProps<T>,\n) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\treadOnly,\n\t\tMDEditor,\n\t\tminHeight = 200,\n\t\tmaxHeight = 600,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(field) => {\n\t\t\t\tif (MDEditor) {\n\t\t\t\t\tif (readOnly && MDEditor.Markdown) {\n\t\t\t\t\t\treturn <MDEditor.Markdown source={field.value} />;\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<MDEditor\n\t\t\t\t\t\t\tvalue={field.value}\n\t\t\t\t\t\t\tonChange={(value) => field.onChange(value ?? \"\")}\n\t\t\t\t\t\t\tminHeight={minHeight}\n\t\t\t\t\t\t\tmaxHeight={maxHeight}\n\t\t\t\t\t\t\tvisibleDragbar\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Fallback: plain textarea\n\t\t\t\treturn (\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tpadding: \"0.75rem\",\n\t\t\t\t\t\t\tborder: \"1px solid var(--chakra-colors-border)\",\n\t\t\t\t\t\t\tborderRadius: \"0.375rem\",\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\tminHeight: `${minHeight}px`,\n\t\t\t\t\t\t\tresize: \"vertical\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}}\n\t\t</FormField>\n\t);\n}\n(MarkdownField as { displayName?: string }).displayName = \"MarkdownField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport {\n\tNumberInputField as NumberInputInput,\n\ttype NumberInputProps,\n\tNumberInputRoot,\n} from \"../primitives/number-input\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface NumberInputFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tmin?: number;\n\tmax?: number;\n\tstep?: number;\n\tshowStepper?: boolean;\n\tnumberInputProps?: NumberInputProps;\n}\n\nexport function NumberInputField<T extends FieldValues>({\n\tref,\n\t...props\n}: NumberInputFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tmin,\n\t\tmax,\n\t\tstep,\n\t\tshowStepper = true,\n\t\tnumberInputProps,\n\t\treadOnly,\n\t\tdisabled,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<NumberInputRoot\n\t\t\t\t\tmin={min}\n\t\t\t\t\tmax={max}\n\t\t\t\t\tstep={step}\n\t\t\t\t\tvalue={String(field.value ?? 0)}\n\t\t\t\t\tonValueChange={(details) => {\n\t\t\t\t\t\tfield.onChange(\n\t\t\t\t\t\t\tdetails.value === \"\" ? 0 : Number.parseFloat(details.value),\n\t\t\t\t\t\t);\n\t\t\t\t\t}}\n\t\t\t\t\tid={name}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tshowStepper={showStepper && !readOnly}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\t{...numberInputProps}\n\t\t\t\t>\n\t\t\t\t\t<NumberInputInput\n\t\t\t\t\t\tname={field.name}\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t/>\n\t\t\t\t</NumberInputRoot>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(NumberInputField as { displayName?: string }).displayName = \"NumberInputField\";\n","import type { RadioGroupRootProps } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Stack, type StackProps } from \"../primitives/layout\";\nimport { Radio, RadioGroup } from \"../primitives/radio\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface RadioOption {\n\tlabel: React.ReactNode;\n\tvalue: string;\n}\n\nexport interface RadioGroupFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\toptions: RadioOption[];\n\tradioGroupProps?: RadioGroupRootProps;\n\tstackProps?: StackProps;\n}\n\nexport function RadioGroupField<T extends FieldValues>(\n\tprops: RadioGroupFieldProps<T>,\n) {\n\tconst { name, label, options, radioGroupProps, stackProps, ...rest } = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} {...rest}>\n\t\t\t{(field) => (\n\t\t\t\t<RadioGroup\n\t\t\t\t\tvalue={String(field.value ?? \"\")}\n\t\t\t\t\tonValueChange={(e) => field.onChange(e.value)}\n\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t{...radioGroupProps}\n\t\t\t\t>\n\t\t\t\t\t<Stack direction=\"row\" {...stackProps}>\n\t\t\t\t\t\t{options.map((option) => (\n\t\t\t\t\t\t\t<Radio key={option.value} value={option.value}>\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</Radio>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Stack>\n\t\t\t\t</RadioGroup>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(RadioGroupField as { displayName?: string }).displayName = \"RadioGroupField\";\n","import type { NativeSelectFieldProps } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { NativeSelect } from \"../primitives/native-select\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface SelectFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tplaceholder?: string;\n\tselectProps?: NativeSelectFieldProps;\n\tchildren: React.ReactNode;\n}\n\nexport function SelectField<T extends FieldValues>({\n\tref,\n\t...props\n}: SelectFieldProps<T> & { ref?: React.Ref<HTMLSelectElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tplaceholder,\n\t\tselectProps,\n\t\tchildren,\n\t\treadOnly,\n\t\tdisabled,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<NativeSelect\n\t\t\t\t\tdisabled={readOnly || disabled}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={String(field.value ?? \"\")}\n\t\t\t\t\tid={name}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...selectProps}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</NativeSelect>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(SelectField as { displayName?: string }).displayName = \"SelectField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Switch, type SwitchProps } from \"../primitives/switch\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface SwitchFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tswitchProps?: SwitchProps;\n}\n\nexport function SwitchField<T extends FieldValues>({\n\tref,\n\t...props\n}: SwitchFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst { name, label, readOnly, disabled, switchProps, ...rest } = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<Switch\n\t\t\t\t\tid={name}\n\t\t\t\t\tname={field.name}\n\t\t\t\t\tchecked={field.value || false}\n\t\t\t\t\tonCheckedChange={(details) => field.onChange(!!details.checked)}\n\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...switchProps}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(SwitchField as { displayName?: string }).displayName = \"SwitchField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Textarea, type TextareaProps } from \"../primitives/textarea\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface TextareaFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tplaceholder?: string;\n\ttextareaProps?: TextareaProps;\n}\n\nexport function TextareaField<T extends FieldValues>({\n\tref,\n\t...props\n}: TextareaFieldProps<T> & { ref?: React.Ref<HTMLTextAreaElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tplaceholder,\n\t\ttextareaProps,\n\t\treadOnly,\n\t\tdisabled,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<Textarea\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={String(field.value ?? \"\")}\n\t\t\t\t\tid={name}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...textareaProps}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(TextareaField as { displayName?: string }).displayName = \"TextareaField\";\n"]}
1
+ {"version":3,"sources":["../../src/forms/form-field.tsx","../../src/forms/array-field.tsx","../../src/forms/checkbox-field.tsx","../../src/forms/code-field.tsx","../../src/forms/color-picker-field.tsx","../../src/forms/controlled-form-field.tsx","../../src/forms/date-picker-field.tsx","../../src/forms/dirty-counter.tsx","../../src/forms/dirty-form-guard.tsx","../../src/forms/file-field.tsx","../../src/forms/inline-edit.tsx","../../src/forms/input-field.tsx","../../src/forms/markdown-field.tsx","../../src/forms/number-input-field.tsx","../../src/forms/radio-group-field.tsx","../../src/forms/select-field.tsx","../../src/forms/switch-field.tsx","../../src/forms/textarea-field.tsx","../../src/forms/use-field-dirty.ts"],"names":["jsx","useFormContext","jsxs","IconButton","useId","Field","Input","useCallback","Button","ButtonGroup","NumberInputField"],"mappings":"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","file":"index.js","sourcesContent":["import { Field } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport { useId } from \"react\";\nimport {\n\tController,\n\ttype ControllerRenderProps,\n\ttype FieldValues,\n\ttype Path,\n\tuseFormContext,\n} from \"react-hook-form\";\nimport { Box, HStack } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\n\nexport interface FormFieldProps<T extends FieldValues> {\n\tname: Path<T>;\n\tlabel?: React.ReactNode;\n\thelperText?: React.ReactNode;\n\t/** Persistent description that shows even when there's an error. */\n\tdescription?: React.ReactNode;\n\trequired?: boolean;\n\tdisabled?: boolean;\n\treadOnly?: boolean;\n\tactions?: React.ReactNode;\n\t/** When false, the dirty-marker on the label is suppressed and the\n\t * children-callback's `meta.isDirty` is forced to false. @default true */\n\tshowDirtyState?: boolean;\n\tchildren: (\n\t\tfield: ControllerRenderProps<T, Path<T>> & {\n\t\t\t/** Computed aria-describedby linking to helper/description/error elements. */\n\t\t\t\"aria-describedby\"?: string;\n\t\t},\n\t\tmeta: { isDirty: boolean },\n\t) => React.ReactNode;\n}\n\nexport function FormField<T extends FieldValues>({\n\tname,\n\tlabel,\n\thelperText,\n\tdescription,\n\trequired,\n\tdisabled,\n\treadOnly,\n\tactions,\n\tshowDirtyState = true,\n\tchildren,\n}: FormFieldProps<T>) {\n\tconst { control } = useFormContext<T>();\n\tconst uid = useId();\n\tconst descriptionId = `${uid}-description`;\n\tconst helperId = `${uid}-helper`;\n\tconst errorId = `${uid}-error`;\n\n\treturn (\n\t\t<Controller\n\t\t\tname={name}\n\t\t\tcontrol={control}\n\t\t\trender={({ field, fieldState }) => {\n\t\t\t\tconst describedBy =\n\t\t\t\t\t[\n\t\t\t\t\t\tdescription ? descriptionId : null,\n\t\t\t\t\t\thelperText ? helperId : null,\n\t\t\t\t\t\tfieldState.error ? errorId : null,\n\t\t\t\t\t]\n\t\t\t\t\t\t.filter(Boolean)\n\t\t\t\t\t\t.join(\" \") || undefined;\n\t\t\t\tconst isDirty = Boolean(showDirtyState && fieldState.isDirty);\n\n\t\t\t\treturn (\n\t\t\t\t\t<Field.Root\n\t\t\t\t\t\tinvalid={!!fieldState.error}\n\t\t\t\t\t\trequired={required}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\tdata-dirty={isDirty ? \"true\" : undefined}\n\t\t\t\t\t>\n\t\t\t\t\t\t{label &&\n\t\t\t\t\t\t\t(typeof label === \"string\" ? (\n\t\t\t\t\t\t\t\t<HStack>\n\t\t\t\t\t\t\t\t\t<Field.Label flex=\"1\" htmlFor={name}>\n\t\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t\t\t{isDirty && (\n\t\t\t\t\t\t\t\t\t\t\t<Box\n\t\t\t\t\t\t\t\t\t\t\t\tas=\"span\"\n\t\t\t\t\t\t\t\t\t\t\t\tdisplay=\"inline-block\"\n\t\t\t\t\t\t\t\t\t\t\t\twidth=\"6px\"\n\t\t\t\t\t\t\t\t\t\t\t\theight=\"6px\"\n\t\t\t\t\t\t\t\t\t\t\t\tborderRadius=\"full\"\n\t\t\t\t\t\t\t\t\t\t\t\tbg=\"yellow.500\"\n\t\t\t\t\t\t\t\t\t\t\t\tml=\"2\"\n\t\t\t\t\t\t\t\t\t\t\t\taria-label=\"ungespeicherte Änderung\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t\t{actions}\n\t\t\t\t\t\t\t\t</HStack>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\tlabel\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t{children(\n\t\t\t\t\t\t\t{ ...field, \"aria-describedby\": describedBy },\n\t\t\t\t\t\t\t{ isDirty },\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{description && (\n\t\t\t\t\t\t\t<Text id={descriptionId} fontSize=\"xs\" color=\"muted\">\n\t\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{helperText &&\n\t\t\t\t\t\t\t(typeof helperText === \"string\" ? (\n\t\t\t\t\t\t\t\t<Field.HelperText id={helperId}>{helperText}</Field.HelperText>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<span id={helperId}>{helperText}</span>\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t{fieldState.error && (\n\t\t\t\t\t\t\t<Field.ErrorText id={errorId} aria-live=\"polite\">\n\t\t\t\t\t\t\t\t{fieldState.error.message}\n\t\t\t\t\t\t\t</Field.ErrorText>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Field.Root>\n\t\t\t\t);\n\t\t\t}}\n\t\t/>\n\t);\n}\n(FormField as { displayName?: string }).displayName = \"FormField\";\n","import { Button, ButtonGroup, IconButton, Input } from \"@chakra-ui/react\";\nimport { Plus, Trash2 } from \"lucide-react\";\nimport React from \"react\";\nimport {\n\ttype FieldValues,\n\tuseFieldArray,\n\tuseFormContext,\n} from \"react-hook-form\";\nimport { Box, Grid, GridItem, Stack } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface ArrayFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/**\n\t * The mode of the array field.\n\t * - `dynamic` — add/remove key-value pairs\n\t * - `keyed` — fixed keys, editable values\n\t * @default \"dynamic\"\n\t */\n\tmode?: \"dynamic\" | \"keyed\";\n\t/** Header label for the value column. @default \"Value\" */\n\tvalueHeader?: string;\n\t/** Header label for the key column. @default \"Key\" */\n\tkeyHeader?: string;\n\t/** Fixed keys when mode is \"keyed\". */\n\tkeys?: Array<{ key: string; value: string }>;\n\t/** Label for the add button. @default \"Add Field\" */\n\taddLabel?: string;\n\t/** Aria label for the remove button. @default \"Remove Item\" */\n\tremoveLabel?: string;\n\t/** Content to display when there are no items. */\n\temptyState?: React.ReactNode;\n}\n\nexport function ArrayField<T extends FieldValues>(props: ArrayFieldProps<T>) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tmode = \"dynamic\",\n\t\tvalueHeader = \"Value\",\n\t\tkeyHeader = \"Key\",\n\t\tkeys = [],\n\t\taddLabel = \"Add Field\",\n\t\tremoveLabel = \"Remove Item\",\n\t\treadOnly,\n\t\tshowDirtyState,\n\t\temptyState,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(/* field */) => (\n\t\t\t\t<Box py={4} px={4} bg=\"bg\" rounded=\"md\">\n\t\t\t\t\t{mode === \"dynamic\" ? (\n\t\t\t\t\t\t<DynamicArray\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tvalueHeader={valueHeader}\n\t\t\t\t\t\t\tkeyHeader={keyHeader}\n\t\t\t\t\t\t\taddLabel={addLabel}\n\t\t\t\t\t\t\tremoveLabel={removeLabel}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t\temptyState={emptyState}\n\t\t\t\t\t\t/>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<KeyedArray\n\t\t\t\t\t\t\tname={name}\n\t\t\t\t\t\t\tvalueHeader={valueHeader}\n\t\t\t\t\t\t\tkeyHeader={keyHeader}\n\t\t\t\t\t\t\tkeys={keys}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t</Box>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n\nArrayField.displayName = \"ArrayField\";\n\ninterface DynamicArrayProps {\n\tname: string;\n\tvalueHeader: string;\n\tkeyHeader: string;\n\taddLabel: string;\n\tremoveLabel: string;\n\treadOnly?: boolean;\n\temptyState?: React.ReactNode;\n}\n\nconst DynamicArray: React.FC<DynamicArrayProps> = React.memo((props) => {\n\tconst {\n\t\tname,\n\t\tvalueHeader,\n\t\tkeyHeader,\n\t\taddLabel,\n\t\tremoveLabel,\n\t\treadOnly,\n\t\temptyState,\n\t} = props;\n\n\tconst { control, register } = useFormContext();\n\tconst { fields, append, remove } = useFieldArray({\n\t\tcontrol,\n\t\tname: name as any,\n\t});\n\n\treturn (\n\t\t<Stack gap={4}>\n\t\t\t<Grid templateColumns=\"200px 1fr 50px\" gap={2}>\n\t\t\t\t<GridItem>\n\t\t\t\t\t<Text fontWeight={500}>{keyHeader}</Text>\n\t\t\t\t</GridItem>\n\t\t\t\t<GridItem colSpan={2}>\n\t\t\t\t\t<Text fontWeight={500}>{valueHeader}</Text>\n\t\t\t\t</GridItem>\n\n\t\t\t\t{fields.map((item, index) => (\n\t\t\t\t\t<React.Fragment key={item.id}>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t{...register(`${name}.${index}.key` as any)}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t{...register(`${name}.${index}.value` as any)}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\tcolorPalette=\"red\"\n\t\t\t\t\t\t\taria-label={removeLabel}\n\t\t\t\t\t\t\tonClick={() => remove(index)}\n\t\t\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Trash2 size={16} />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t))}\n\t\t\t</Grid>\n\t\t\t{fields.length === 0 && emptyState && (\n\t\t\t\t<Box py={4} textAlign=\"center\">\n\t\t\t\t\t{emptyState}\n\t\t\t\t</Box>\n\t\t\t)}\n\t\t\t<ButtonGroup>\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tonClick={() => append({ key: \"\", value: \"\" })}\n\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t>\n\t\t\t\t\t<Plus size={16} />\n\t\t\t\t\t{addLabel}\n\t\t\t\t</Button>\n\t\t\t</ButtonGroup>\n\t\t</Stack>\n\t);\n});\n\nDynamicArray.displayName = \"DynamicArray\";\n\ninterface KeyedArrayProps {\n\tname: string;\n\tvalueHeader: string;\n\tkeyHeader: string;\n\tkeys: Array<{ key: string; value: string }>;\n\treadOnly?: boolean;\n}\n\nconst KeyedArray: React.FC<KeyedArrayProps> = React.memo((props) => {\n\tconst { name, valueHeader, keyHeader, keys, readOnly } = props;\n\tconst { register } = useFormContext();\n\n\treturn (\n\t\t<Stack gap={4}>\n\t\t\t<Grid templateColumns=\"200px 1fr\" gap={2}>\n\t\t\t\t<GridItem>\n\t\t\t\t\t<Text fontWeight={500}>{keyHeader}</Text>\n\t\t\t\t</GridItem>\n\t\t\t\t<GridItem>\n\t\t\t\t\t<Text fontWeight={500}>{valueHeader}</Text>\n\t\t\t\t</GridItem>\n\t\t\t\t{keys.map((keyItem) => (\n\t\t\t\t\t<React.Fragment key={keyItem.key}>\n\t\t\t\t\t\t<Text py={2}>{keyItem.value ?? keyItem.key}</Text>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t{...register(`${name}.${keyItem.key}` as any)}\n\t\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</React.Fragment>\n\t\t\t\t))}\n\t\t\t</Grid>\n\t\t</Stack>\n\t);\n});\n\nKeyedArray.displayName = \"KeyedArray\";\n","import { Checkbox } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport type { FormFieldProps } from \"./form-field\";\nimport { FormField } from \"./form-field\";\n\nexport interface CheckboxFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** When provided, the field is treated as an array of checked values. */\n\tvalue?: string | number;\n\t/** Content to display after the checkbox. */\n\tchildren?: React.ReactNode;\n}\n\nexport function CheckboxField<T extends FieldValues>({\n\t...props\n}: CheckboxFieldProps<T>) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tvalue,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\thelperText,\n\t\tchildren,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\thelperText={helperText}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => {\n\t\t\t\t// Array mode: field.value is an array, value prop identifies the item\n\t\t\t\tconst isArrayMode = value !== undefined;\n\n\t\t\t\tconst isChecked = isArrayMode\n\t\t\t\t\t? Array.isArray(field.value) && field.value.includes(value)\n\t\t\t\t\t: !!field.value;\n\n\t\t\t\tconst handleCheckedChange = (details: {\n\t\t\t\t\tchecked: boolean | \"indeterminate\";\n\t\t\t\t}) => {\n\t\t\t\t\tif (isArrayMode) {\n\t\t\t\t\t\tconst currentValue = Array.isArray(field.value)\n\t\t\t\t\t\t\t? [...field.value]\n\t\t\t\t\t\t\t: [];\n\t\t\t\t\t\tif (details.checked) {\n\t\t\t\t\t\t\tif (!currentValue.includes(value)) {\n\t\t\t\t\t\t\t\tcurrentValue.push(value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst idx = currentValue.indexOf(value);\n\t\t\t\t\t\t\tif (idx > -1) currentValue.splice(idx, 1);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfield.onChange(currentValue);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tfield.onChange(!!details.checked);\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tconst uniqueId = isArrayMode ? `${name}-${String(value)}` : name;\n\n\t\t\t\treturn (\n\t\t\t\t\t<Checkbox.Root\n\t\t\t\t\t\tid={uniqueId}\n\t\t\t\t\t\tname={field.name}\n\t\t\t\t\t\tvalue={isArrayMode ? String(value) : undefined}\n\t\t\t\t\t\tchecked={isChecked}\n\t\t\t\t\t\tonCheckedChange={handleCheckedChange}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Checkbox.HiddenInput />\n\t\t\t\t\t\t<Checkbox.Control>\n\t\t\t\t\t\t\t<Checkbox.Indicator />\n\t\t\t\t\t\t</Checkbox.Control>\n\t\t\t\t\t\t{(label || children) && <Checkbox.Label>{children}</Checkbox.Label>}\n\t\t\t\t\t</Checkbox.Root>\n\t\t\t\t);\n\t\t\t}}\n\t\t</FormField>\n\t);\n}\n(CheckboxField as { displayName?: string }).displayName = \"CheckboxField\";\n","import type React from \"react\";\nimport { useCallback } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// @monaco-editor/react is an optional peer dependency\ntype MonacoEditorProps = {\n\tvalue?: string;\n\tlanguage?: string;\n\tonChange?: (value: string | undefined) => void;\n\tonMount?: (editor: any, monaco: any) => void;\n\theight?: string;\n\toptions?: Record<string, any>;\n};\n\nexport interface CodeFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tlanguage?: string;\n\tplaceholder?: string;\n\theight?: string;\n\tindentWithTab?: boolean;\n\t/** The Monaco Editor component. Pass it to avoid hard dependency on @monaco-editor/react. */\n\tEditor?: React.ComponentType<MonacoEditorProps>;\n}\n\nexport function CodeField<T extends FieldValues>({\n\tref,\n\t...props\n}: CodeFieldProps<T> & { ref?: React.Ref<any> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tlanguage = \"typescript\",\n\t\theight = \"400px\",\n\t\tindentWithTab = true,\n\t\treadOnly,\n\t\tEditor,\n\t\t...rest\n\t} = props;\n\n\tconst onMount = useCallback(\n\t\t(editorInstance: any, _monaco: any) => {\n\t\t\tif (typeof ref === \"function\") {\n\t\t\t\tref(editorInstance);\n\t\t\t} else if (ref && typeof ref === \"object\") {\n\t\t\t\t(ref as React.MutableRefObject<any>).current = editorInstance;\n\t\t\t}\n\t\t\teditorInstance.updateOptions?.({\n\t\t\t\ttabCompletion: indentWithTab ? \"on\" : \"off\",\n\t\t\t});\n\t\t},\n\t\t[ref, indentWithTab],\n\t);\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(field) =>\n\t\t\t\tEditor ? (\n\t\t\t\t\t<Editor\n\t\t\t\t\t\tvalue={field.value}\n\t\t\t\t\t\tlanguage={language}\n\t\t\t\t\t\tonChange={(value) => field.onChange(value ?? \"\")}\n\t\t\t\t\t\tonMount={onMount}\n\t\t\t\t\t\theight={height}\n\t\t\t\t\t\toptions={{\n\t\t\t\t\t\t\treadOnly,\n\t\t\t\t\t\t\twordWrap: \"on\",\n\t\t\t\t\t\t\tminimap: { enabled: false },\n\t\t\t\t\t\t\tscrollBeyondLastLine: false,\n\t\t\t\t\t\t\ttabCompletion: indentWithTab ? \"on\" : \"off\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tfontFamily: \"monospace\",\n\t\t\t\t\t\t\tfontSize: \"0.875rem\",\n\t\t\t\t\t\t\tpadding: \"0.75rem\",\n\t\t\t\t\t\t\tborder: \"1px solid var(--chakra-colors-border)\",\n\t\t\t\t\t\t\tborderRadius: \"0.375rem\",\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\tminHeight: height,\n\t\t\t\t\t\t\tresize: \"vertical\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t}\n\t\t</FormField>\n\t);\n}\n(CodeField as { displayName?: string }).displayName = \"CodeField\";\n","import { type ButtonProps, IconButton, Square } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport {\n\tPopover,\n\tPopoverBody,\n\tPopoverContent,\n\tPopoverTrigger,\n} from \"../primitives/popover\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// react-colorful is an optional peer dependency\ntype HexColorPickerProps = {\n\tcolor?: string;\n\tonChange?: (color: string) => void;\n};\n\nexport interface ColorPickerFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tsize?: ButtonProps[\"size\"];\n\t/** The HexColorPicker component from react-colorful. Pass it to avoid hard dependency. */\n\tColorPicker?: React.ComponentType<HexColorPickerProps>;\n}\n\nexport function ColorPickerField<T extends FieldValues>({\n\tref,\n\t...props\n}: ColorPickerFieldProps<T> & { ref?: React.Ref<HTMLButtonElement> }) {\n\tconst { name, label, size = \"md\", readOnly, ColorPicker, ...rest } = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(field) => (\n\t\t\t\t<Popover>\n\t\t\t\t\t<PopoverTrigger asChild>\n\t\t\t\t\t\t<IconButton\n\t\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\t\tsize={size}\n\t\t\t\t\t\t\tw=\"fit-content\"\n\t\t\t\t\t\t\tborderWidth=\"1px\"\n\t\t\t\t\t\t\trounded=\"md\"\n\t\t\t\t\t\t\tp={1}\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tdisabled={readOnly}\n\t\t\t\t\t\t\taria-label={`Color: ${field.value || \"none\"}`}\n\t\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Square rounded=\"sm\" bg={field.value} size={6} />\n\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t</PopoverTrigger>\n\t\t\t\t\t<PopoverContent width=\"auto\" showArrow>\n\t\t\t\t\t\t<PopoverBody>\n\t\t\t\t\t\t\t{ColorPicker ? (\n\t\t\t\t\t\t\t\t<ColorPicker\n\t\t\t\t\t\t\t\t\tcolor={field.value}\n\t\t\t\t\t\t\t\t\tonChange={(color) => field.onChange(color)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\t\ttype=\"color\"\n\t\t\t\t\t\t\t\t\tvalue={field.value || \"#000000\"}\n\t\t\t\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\n\t\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\t\twidth: 200,\n\t\t\t\t\t\t\t\t\t\theight: 200,\n\t\t\t\t\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\t\t\t\t\tcursor: \"pointer\",\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</PopoverBody>\n\t\t\t\t\t</PopoverContent>\n\t\t\t\t</Popover>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(ColorPickerField as { displayName?: string }).displayName = \"ColorPickerField\";\n","import { Field } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport { useId } from \"react\";\nimport { HStack } from \"../primitives/layout\";\n\nexport interface ControlledFormFieldProps {\n\tname: string;\n\tlabel?: React.ReactNode;\n\thelperText?: React.ReactNode;\n\terrorMessage?: React.ReactNode;\n\trequired?: boolean;\n\tdisabled?: boolean;\n\treadOnly?: boolean;\n\tactions?: React.ReactNode;\n\tchildren: React.ReactNode;\n}\n\nexport const ControlledFormField: React.FC<ControlledFormFieldProps> = ({\n\tname,\n\tlabel,\n\thelperText,\n\terrorMessage,\n\trequired,\n\tdisabled,\n\treadOnly,\n\tactions,\n\tchildren,\n}) => {\n\tconst uid = useId();\n\tconst helperId = `${uid}-helper`;\n\tconst errorId = `${uid}-error`;\n\n\treturn (\n\t\t<Field.Root\n\t\t\tinvalid={!!errorMessage}\n\t\t\trequired={required}\n\t\t\tdisabled={disabled}\n\t\t\treadOnly={readOnly}\n\t\t>\n\t\t\t{label &&\n\t\t\t\t(typeof label === \"string\" ? (\n\t\t\t\t\t<HStack>\n\t\t\t\t\t\t<Field.Label flex=\"1\" htmlFor={name}>\n\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t{actions}\n\t\t\t\t\t</HStack>\n\t\t\t\t) : (\n\t\t\t\t\tlabel\n\t\t\t\t))}\n\t\t\t{/* aria-describedby must be set manually by the consumer since children is ReactNode, not a render function. */}\n\t\t\t{children}\n\t\t\t{helperText &&\n\t\t\t\t(typeof helperText === \"string\" ? (\n\t\t\t\t\t<Field.HelperText id={helperId}>{helperText}</Field.HelperText>\n\t\t\t\t) : (\n\t\t\t\t\t<span id={helperId}>{helperText}</span>\n\t\t\t\t))}\n\t\t\t{errorMessage && (\n\t\t\t\t<Field.ErrorText id={errorId} aria-live=\"polite\">\n\t\t\t\t\t{errorMessage}\n\t\t\t\t</Field.ErrorText>\n\t\t\t)}\n\t\t</Field.Root>\n\t);\n};\nControlledFormField.displayName = \"ControlledFormField\";\n","import { Input } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface DatePickerFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** Minimum date in YYYY-MM-DD format */\n\tmin?: string;\n\t/** Maximum date in YYYY-MM-DD format */\n\tmax?: string;\n\t/** Input type: \"date\", \"datetime-local\", or \"time\" */\n\ttype?: \"date\" | \"datetime-local\" | \"time\";\n}\n\nexport function DatePickerField<T extends FieldValues>({\n\tref,\n\t...props\n}: DatePickerFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tmin,\n\t\tmax,\n\t\ttype = \"date\",\n\t\treadOnly,\n\t\tdisabled,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<Input\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\ttype={type}\n\t\t\t\t\tid={name}\n\t\t\t\t\tmin={min}\n\t\t\t\t\tmax={max}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tref={ref}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(DatePickerField as { displayName?: string }).displayName = \"DatePickerField\";\n","import { useFormContext } from \"react-hook-form\";\nimport { Box, HStack } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\n\nexport interface DirtyCounterProps {\n\t/**\n\t * Label template. The literal `{count}` is replaced with the dirty\n\t * field count. @default \"{count} ungespeicherte Änderungen\"\n\t */\n\tlabel?: string;\n\t/** Render nothing when no fields are dirty. @default true */\n\thideWhenClean?: boolean;\n}\n\nexport function DirtyCounter({\n\tlabel = \"{count} ungespeicherte Änderungen\",\n\thideWhenClean = true,\n}: DirtyCounterProps) {\n\tconst ctx = useFormContext();\n\tconst dirty = ctx\n\t\t? (ctx.formState.dirtyFields as Record<string, unknown>)\n\t\t: {};\n\tconst count = Object.keys(dirty).length;\n\tif (count === 0 && hideWhenClean) return null;\n\treturn (\n\t\t<HStack gap=\"2\" fontSize=\"sm\" color=\"yellow.700\">\n\t\t\t<Box\n\t\t\t\twidth=\"6px\"\n\t\t\t\theight=\"6px\"\n\t\t\t\tborderRadius=\"full\"\n\t\t\t\tbg=\"yellow.500\"\n\t\t\t\taria-hidden\n\t\t\t/>\n\t\t\t<Text>{label.replace(\"{count}\", String(count))}</Text>\n\t\t</HStack>\n\t);\n}\nDirtyCounter.displayName = \"DirtyCounter\";\n","import type React from \"react\";\nimport { useFormContext } from \"react-hook-form\";\nimport { useBlocker } from \"react-router-dom\";\nimport { LeavePageConfirmation } from \"../primitives/leave-page-confirmation\";\n\nexport interface DirtyFormGuardProps {\n\t/** Dialog title. @default \"You have unsaved changes\" */\n\ttitle?: string;\n\t/** Dialog message body. @default \"Are you sure you want to leave this page? You have unsaved changes.\" */\n\tmessage?: string;\n\t/** Label for the confirm/leave button. @default \"Leave\" */\n\tconfirmLabel?: string;\n\t/** Label for the cancel/stay button. @default \"Stay\" */\n\tcancelLabel?: string;\n}\n\nexport const DirtyFormGuard: React.FC<DirtyFormGuardProps> = ({\n\ttitle,\n\tmessage,\n\tconfirmLabel,\n\tcancelLabel,\n}) => {\n\tconst { formState } = useFormContext();\n\tconst blocker = useBlocker(formState.isDirty);\n\n\treturn (\n\t\t<LeavePageConfirmation\n\t\t\tblocked={blocker.state === \"blocked\"}\n\t\t\tonConfirmLeave={() => blocker.proceed?.()}\n\t\t\tonCancelLeave={() => blocker.reset?.()}\n\t\t\ttitle={title}\n\t\t\tmessage={message}\n\t\t\tconfirmLabel={confirmLabel}\n\t\t\tcancelLabel={cancelLabel}\n\t\t/>\n\t);\n};\nDirtyFormGuard.displayName = \"DirtyFormGuard\";\n","import { Button } from \"@chakra-ui/react\";\nimport { Upload } from \"lucide-react\";\nimport type React from \"react\";\nimport { useCallback, useEffect } from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Box, Flex } from \"../primitives/layout\";\nimport { Text } from \"../primitives/typography\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// react-dropzone is an optional peer dependency\ntype DropzoneOptions = {\n\tnoClick?: boolean;\n\tmultiple?: boolean;\n\tdisabled?: boolean;\n\taccept?: Record<string, string[]>;\n\tonDrop?: (files: File[]) => void;\n};\n\ntype UseDropzoneReturn = {\n\tgetRootProps: () => Record<string, any>;\n\tgetInputProps: () => Record<string, any>;\n\tisDragActive: boolean;\n\topen: () => void;\n};\n\nexport interface FileFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** Accept configuration for file types, e.g. { \"image/*\": [\".png\", \".jpg\"] } */\n\taccept?: Record<string, string[]>;\n\t/** Allow multiple file selection. @default false */\n\tmultiple?: boolean;\n\t/** Text shown when dragging files over. @default \"Release to upload\" */\n\tdragActiveText?: string;\n\t/** Text shown below the file preview. @default \"Drag & drop a file to upload\" */\n\tdropHintText?: string;\n\t/** Label for the upload button. @default \"Choose File\" */\n\tbuttonLabel?: string;\n\t/** The useDropzone hook from react-dropzone. Pass it to avoid hard dependency. */\n\tuseDropzone?: (options: DropzoneOptions) => UseDropzoneReturn;\n}\n\nexport function FileField<T extends FieldValues>(props: FileFieldProps<T>) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\taccept,\n\t\tmultiple = false,\n\t\tdisabled,\n\t\tdragActiveText = \"Release to upload\",\n\t\tdropHintText = \"Drag & drop a file to upload\",\n\t\tbuttonLabel = \"Choose File\",\n\t\tuseDropzone,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} disabled={disabled} {...rest}>\n\t\t\t{(field) => {\n\t\t\t\tif (useDropzone) {\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<DropzoneContent\n\t\t\t\t\t\t\tfield={field}\n\t\t\t\t\t\t\taccept={accept}\n\t\t\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tdragActiveText={dragActiveText}\n\t\t\t\t\t\t\tdropHintText={dropHintText}\n\t\t\t\t\t\t\tbuttonLabel={buttonLabel}\n\t\t\t\t\t\t\tuseDropzone={useDropzone}\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Fallback: native file input\n\t\t\t\treturn (\n\t\t\t\t\t<Box>\n\t\t\t\t\t\t<input\n\t\t\t\t\t\t\ttype=\"file\"\n\t\t\t\t\t\t\taccept={\n\t\t\t\t\t\t\t\taccept ? Object.values(accept).flat().join(\",\") : undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\t\tonChange={(e) => {\n\t\t\t\t\t\t\t\tconst files = e.target.files;\n\t\t\t\t\t\t\t\tif (!files) return;\n\t\t\t\t\t\t\t\tif (multiple) {\n\t\t\t\t\t\t\t\t\tfield.onChange(Array.from(files));\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfield.onChange(files[0] || null);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{field.value && (\n\t\t\t\t\t\t\t<Text mt={2} fontSize=\"sm\" color=\"fg.muted\">\n\t\t\t\t\t\t\t\t{(field.value as File)?.name ?? \"File selected\"}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</Box>\n\t\t\t\t);\n\t\t\t}}\n\t\t</FormField>\n\t);\n}\n\nFileField.displayName = \"FileField\";\n\ninterface DropzoneContentProps {\n\tfield: {\n\t\tvalue: any;\n\t\tonChange: (...event: any[]) => void;\n\t\tonBlur: () => void;\n\t\tref: React.Ref<any>;\n\t\tname: string;\n\t};\n\taccept?: Record<string, string[]>;\n\tmultiple: boolean;\n\tdisabled?: boolean;\n\tdragActiveText: string;\n\tdropHintText: string;\n\tbuttonLabel: string;\n\tuseDropzone: (options: DropzoneOptions) => UseDropzoneReturn;\n}\n\nconst DropzoneContent: React.FC<DropzoneContentProps> = ({\n\tfield,\n\taccept,\n\tmultiple,\n\tdisabled,\n\tdragActiveText,\n\tdropHintText,\n\tbuttonLabel,\n\tuseDropzone,\n}) => {\n\tconst handleDrop = useCallback(\n\t\t(files: File[]) => {\n\t\t\tif (multiple) {\n\t\t\t\tfield.onChange(files);\n\t\t\t} else {\n\t\t\t\tconst file = files[0];\n\t\t\t\tif (file) {\n\t\t\t\t\tfield.onChange(\n\t\t\t\t\t\tObject.assign(file, {\n\t\t\t\t\t\t\tpreview: URL.createObjectURL(file),\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[field, multiple],\n\t);\n\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (field.value?.preview) {\n\t\t\t\tURL.revokeObjectURL(field.value.preview);\n\t\t\t}\n\t\t};\n\t}, [field.value]);\n\n\tconst { getRootProps, getInputProps, isDragActive, open } = useDropzone({\n\t\tnoClick: true,\n\t\tmultiple,\n\t\tdisabled,\n\t\taccept,\n\t\tonDrop: handleDrop,\n\t});\n\n\treturn (\n\t\t<Box {...getRootProps()}>\n\t\t\t<Box display=\"none\" {...getInputProps()} asChild>\n\t\t\t\t<input />\n\t\t\t</Box>\n\t\t\t<Box\n\t\t\t\tbgColor=\"bg.muted\"\n\t\t\t\tp={4}\n\t\t\t\trounded=\"md\"\n\t\t\t\toverflow=\"hidden\"\n\t\t\t\tposition=\"relative\"\n\t\t\t\ttextAlign=\"center\"\n\t\t\t>\n\t\t\t\t{isDragActive && (\n\t\t\t\t\t<Flex\n\t\t\t\t\t\tpointerEvents=\"none\"\n\t\t\t\t\t\ttop=\"0\"\n\t\t\t\t\t\tinsetInlineStart=\"0\"\n\t\t\t\t\t\tposition=\"absolute\"\n\t\t\t\t\t\tbackgroundColor=\"blackAlpha.400\"\n\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\theight=\"100%\"\n\t\t\t\t\t\tzIndex={1}\n\t\t\t\t\t\talignItems=\"center\"\n\t\t\t\t\t\tjustifyContent=\"center\"\n\t\t\t\t\t\tdirection=\"column\"\n\t\t\t\t\t\tcolor=\"white\"\n\t\t\t\t\t\tgap=\"3\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Upload size={48} />\n\t\t\t\t\t\t<Text fontSize=\"lg\" fontWeight=\"bold\">\n\t\t\t\t\t\t\t{dragActiveText}\n\t\t\t\t\t\t</Text>\n\t\t\t\t\t</Flex>\n\t\t\t\t)}\n\t\t\t\t{field.value?.name && (\n\t\t\t\t\t<Text fontSize=\"sm\" color=\"fg.muted\">\n\t\t\t\t\t\t{field.value.name}\n\t\t\t\t\t</Text>\n\t\t\t\t)}\n\t\t\t\t<Text color=\"fg.muted\" fontSize=\"xs\" mt={2}>\n\t\t\t\t\t{dropHintText}\n\t\t\t\t</Text>\n\t\t\t\t<Button mt={2} size=\"sm\" variant=\"outline\" onClick={open}>\n\t\t\t\t\t<Upload size={14} />\n\t\t\t\t\t{buttonLabel}\n\t\t\t\t</Button>\n\t\t\t</Box>\n\t\t</Box>\n\t);\n};\n","import {\n\tButtonGroup,\n\tEditable,\n\tIconButton,\n\tuseEditableContext,\n} from \"@chakra-ui/react\";\nimport { Pencil } from \"lucide-react\";\nimport type React from \"react\";\nimport { useRef } from \"react\";\n\nexport interface InlineEditProps {\n\tvalue?: string;\n\tonSubmit?: (nextValue: string) => void;\n\tonChange?: (nextValue: string) => void;\n\tonCancel?: (previousValue: string) => void;\n\t/** @default \"input\" */\n\tvariant?: \"input\" | \"textarea\";\n\tplaceholder?: string;\n\t/** @default \"md\" */\n\tfontSize?: string;\n\tfontWeight?: string;\n\tmaxW?: string;\n\tdisabled?: boolean;\n\t/** When false, submitting an empty value reverts to the previous value. @default false */\n\tallowEmpty?: boolean;\n\t/** Number of rows used to calculate minH for textarea variant. @default 3 */\n\trows?: number;\n\t/** Aria label for the edit button. @default \"Edit\" */\n\teditLabel?: string;\n}\n\ninterface CancelRefCaptureProps {\n\tcancelRef: React.MutableRefObject<(() => void) | null>;\n}\n\nconst CancelRefCapture: React.FC<CancelRefCaptureProps> = ({ cancelRef }) => {\n\tconst { cancel } = useEditableContext();\n\tcancelRef.current = cancel;\n\treturn null;\n};\n\nconst EditControls: React.FC<{ editLabel: string }> = ({ editLabel }) => {\n\tconst { editing } = useEditableContext();\n\n\tif (editing) return null;\n\n\treturn (\n\t\t<ButtonGroup>\n\t\t\t<Editable.EditTrigger asChild>\n\t\t\t\t<IconButton\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tmarginInlineStart={2}\n\t\t\t\t\taria-label={editLabel}\n\t\t\t\t>\n\t\t\t\t\t<Pencil size={16} />\n\t\t\t\t</IconButton>\n\t\t\t</Editable.EditTrigger>\n\t\t</ButtonGroup>\n\t);\n};\n\nexport const InlineEdit: React.FC<InlineEditProps> = ({\n\tvalue,\n\tonSubmit,\n\tonChange,\n\tonCancel,\n\tvariant = \"input\",\n\tplaceholder,\n\tfontSize = \"md\",\n\tfontWeight,\n\tmaxW,\n\tdisabled,\n\tallowEmpty = false,\n\trows = 3,\n\teditLabel = \"Edit\",\n}) => {\n\tconst cancelRef = useRef<(() => void) | null>(null);\n\n\tconst handleSubmit = (details: { value: string }) => {\n\t\tconst trimmed = details.value.trim();\n\t\tif (!allowEmpty && trimmed === \"\") {\n\t\t\tcancelRef.current?.();\n\t\t\treturn;\n\t\t}\n\t\tonSubmit?.(trimmed);\n\t};\n\n\treturn (\n\t\t<Editable.Root\n\t\t\tfontSize={fontSize}\n\t\t\tfontWeight={fontWeight}\n\t\t\tmaxW={maxW}\n\t\t\tvalue={String(value ?? \"\")}\n\t\t\tonValueChange={(d) => onChange?.(d.value)}\n\t\t\tonValueRevert={(d) => onCancel?.(d.value)}\n\t\t\tonValueCommit={handleSubmit}\n\t\t\tdisabled={disabled}\n\t\t\tplaceholder={placeholder}\n\t\t>\n\t\t\t<CancelRefCapture cancelRef={cancelRef} />\n\t\t\t<Editable.Preview />\n\t\t\t{variant === \"textarea\" ? (\n\t\t\t\t<Editable.Textarea minH={`${rows * 1.5}em`} />\n\t\t\t) : (\n\t\t\t\t<Editable.Input />\n\t\t\t)}\n\t\t\t<EditControls editLabel={editLabel} />\n\t\t</Editable.Root>\n\t);\n};\nInlineEdit.displayName = \"InlineEdit\";\n","import type { InputProps } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport TextInput from \"../atoms/text-input/text-input\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface InputFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tplaceholder?: string;\n\ttype?: InputProps[\"type\"];\n\tappend?: string | React.ReactElement;\n\tprepend?: string | React.ReactElement;\n\tinputProps?: InputProps;\n}\n\nexport function InputField<T extends FieldValues>({\n\tref,\n\t...props\n}: InputFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tplaceholder,\n\t\ttype,\n\t\tappend,\n\t\tprepend,\n\t\tinputProps,\n\t\treadOnly,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field, { isDirty }) => (\n\t\t\t\t<TextInput\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\tid={name}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\ttype={type}\n\t\t\t\t\tappend={append}\n\t\t\t\t\tprepend={prepend}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\tborderColor={isDirty ? \"yellow.400\" : undefined}\n\t\t\t\t\tbg={isDirty ? \"yellow.50\" : undefined}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...inputProps}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(InputField as { displayName?: string }).displayName = \"InputField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\n// @uiw/react-md-editor is an optional peer dependency\ntype MDEditorProps = {\n\tvalue?: string;\n\tonChange?: (value?: string) => void;\n\tminHeight?: number;\n\tmaxHeight?: number;\n\tvisibleDragbar?: boolean;\n};\n\ntype MDEditorComponent = React.ComponentType<MDEditorProps> & {\n\tMarkdown?: React.ComponentType<{ source?: string }>;\n};\n\nexport interface MarkdownFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\t/** The MDEditor component from @uiw/react-md-editor. Pass it to avoid hard dependency. */\n\tMDEditor?: MDEditorComponent;\n\tminHeight?: number;\n\tmaxHeight?: number;\n}\n\nexport function MarkdownField<T extends FieldValues>(\n\tprops: MarkdownFieldProps<T>,\n) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\treadOnly,\n\t\tMDEditor,\n\t\tminHeight = 200,\n\t\tmaxHeight = 600,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T> name={name} label={label} readOnly={readOnly} {...rest}>\n\t\t\t{(field) => {\n\t\t\t\tif (MDEditor) {\n\t\t\t\t\tif (readOnly && MDEditor.Markdown) {\n\t\t\t\t\t\treturn <MDEditor.Markdown source={field.value} />;\n\t\t\t\t\t}\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<MDEditor\n\t\t\t\t\t\t\tvalue={field.value}\n\t\t\t\t\t\t\tonChange={(value) => field.onChange(value ?? \"\")}\n\t\t\t\t\t\t\tminHeight={minHeight}\n\t\t\t\t\t\t\tmaxHeight={maxHeight}\n\t\t\t\t\t\t\tvisibleDragbar\n\t\t\t\t\t\t/>\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Fallback: plain textarea\n\t\t\t\treturn (\n\t\t\t\t\t<textarea\n\t\t\t\t\t\tvalue={field.value ?? \"\"}\n\t\t\t\t\t\tonChange={(e) => field.onChange(e.target.value)}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tpadding: \"0.75rem\",\n\t\t\t\t\t\t\tborder: \"1px solid var(--chakra-colors-border)\",\n\t\t\t\t\t\t\tborderRadius: \"0.375rem\",\n\t\t\t\t\t\t\twidth: \"100%\",\n\t\t\t\t\t\t\tminHeight: `${minHeight}px`,\n\t\t\t\t\t\t\tresize: \"vertical\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}}\n\t\t</FormField>\n\t);\n}\n(MarkdownField as { displayName?: string }).displayName = \"MarkdownField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport {\n\tNumberInputField as NumberInputInput,\n\ttype NumberInputProps,\n\tNumberInputRoot,\n} from \"../primitives/number-input\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface NumberInputFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tmin?: number;\n\tmax?: number;\n\tstep?: number;\n\tshowStepper?: boolean;\n\tnumberInputProps?: NumberInputProps;\n}\n\nexport function NumberInputField<T extends FieldValues>({\n\tref,\n\t...props\n}: NumberInputFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tmin,\n\t\tmax,\n\t\tstep,\n\t\tshowStepper = true,\n\t\tnumberInputProps,\n\t\treadOnly,\n\t\tdisabled,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<NumberInputRoot\n\t\t\t\t\tmin={min}\n\t\t\t\t\tmax={max}\n\t\t\t\t\tstep={step}\n\t\t\t\t\tvalue={String(field.value ?? 0)}\n\t\t\t\t\tonValueChange={(details) => {\n\t\t\t\t\t\tfield.onChange(\n\t\t\t\t\t\t\tdetails.value === \"\" ? 0 : Number.parseFloat(details.value),\n\t\t\t\t\t\t);\n\t\t\t\t\t}}\n\t\t\t\t\tid={name}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tshowStepper={showStepper && !readOnly}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\t{...numberInputProps}\n\t\t\t\t>\n\t\t\t\t\t<NumberInputInput\n\t\t\t\t\t\tname={field.name}\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t/>\n\t\t\t\t</NumberInputRoot>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(NumberInputField as { displayName?: string }).displayName = \"NumberInputField\";\n","import type { RadioGroupRootProps } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Stack, type StackProps } from \"../primitives/layout\";\nimport { Radio, RadioGroup } from \"../primitives/radio\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface RadioOption {\n\tlabel: React.ReactNode;\n\tvalue: string;\n}\n\nexport interface RadioGroupFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\toptions: RadioOption[];\n\tradioGroupProps?: RadioGroupRootProps;\n\tstackProps?: StackProps;\n}\n\nexport function RadioGroupField<T extends FieldValues>(\n\tprops: RadioGroupFieldProps<T>,\n) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\toptions,\n\t\tshowDirtyState,\n\t\tradioGroupProps,\n\t\tstackProps,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<RadioGroup\n\t\t\t\t\tvalue={String(field.value ?? \"\")}\n\t\t\t\t\tonValueChange={(e) => field.onChange(e.value)}\n\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\t{...radioGroupProps}\n\t\t\t\t>\n\t\t\t\t\t<Stack direction=\"row\" {...stackProps}>\n\t\t\t\t\t\t{options.map((option) => (\n\t\t\t\t\t\t\t<Radio key={option.value} value={option.value}>\n\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t</Radio>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Stack>\n\t\t\t\t</RadioGroup>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(RadioGroupField as { displayName?: string }).displayName = \"RadioGroupField\";\n","import type { NativeSelectFieldProps } from \"@chakra-ui/react\";\nimport type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { NativeSelect } from \"../primitives/native-select\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface SelectFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tplaceholder?: string;\n\tselectProps?: NativeSelectFieldProps;\n\tchildren: React.ReactNode;\n}\n\nexport function SelectField<T extends FieldValues>({\n\tref,\n\t...props\n}: SelectFieldProps<T> & { ref?: React.Ref<HTMLSelectElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tplaceholder,\n\t\tselectProps,\n\t\tchildren,\n\t\treadOnly,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field, { isDirty }) => (\n\t\t\t\t<NativeSelect\n\t\t\t\t\tdisabled={readOnly || disabled}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={String(field.value ?? \"\")}\n\t\t\t\t\tid={name}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tborderColor={isDirty ? \"yellow.400\" : undefined}\n\t\t\t\t\tbg={isDirty ? \"yellow.50\" : undefined}\n\t\t\t\t\t{...selectProps}\n\t\t\t\t>\n\t\t\t\t\t{children}\n\t\t\t\t</NativeSelect>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(SelectField as { displayName?: string }).displayName = \"SelectField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Switch, type SwitchProps } from \"../primitives/switch\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface SwitchFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tswitchProps?: SwitchProps;\n}\n\nexport function SwitchField<T extends FieldValues>({\n\tref,\n\t...props\n}: SwitchFieldProps<T> & { ref?: React.Ref<HTMLInputElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\treadOnly,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\tswitchProps,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field) => (\n\t\t\t\t<Switch\n\t\t\t\t\tid={name}\n\t\t\t\t\tname={field.name}\n\t\t\t\t\tchecked={field.value || false}\n\t\t\t\t\tonCheckedChange={(details) => field.onChange(!!details.checked)}\n\t\t\t\t\tonBlur={field.onBlur}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\taria-describedby={field[\"aria-describedby\"]}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...switchProps}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(SwitchField as { displayName?: string }).displayName = \"SwitchField\";\n","import type React from \"react\";\nimport type { FieldValues } from \"react-hook-form\";\nimport { Textarea, type TextareaProps } from \"../primitives/textarea\";\nimport { FormField, type FormFieldProps } from \"./form-field\";\n\nexport interface TextareaFieldProps<T extends FieldValues>\n\textends Omit<FormFieldProps<T>, \"children\"> {\n\tplaceholder?: string;\n\ttextareaProps?: TextareaProps;\n}\n\nexport function TextareaField<T extends FieldValues>({\n\tref,\n\t...props\n}: TextareaFieldProps<T> & { ref?: React.Ref<HTMLTextAreaElement> }) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tplaceholder,\n\t\ttextareaProps,\n\t\treadOnly,\n\t\tdisabled,\n\t\tshowDirtyState,\n\t\t...rest\n\t} = props;\n\n\treturn (\n\t\t<FormField<T>\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\treadOnly={readOnly}\n\t\t\tdisabled={disabled}\n\t\t\tshowDirtyState={showDirtyState}\n\t\t\t{...rest}\n\t\t>\n\t\t\t{(field, { isDirty }) => (\n\t\t\t\t<Textarea\n\t\t\t\t\t{...field}\n\t\t\t\t\tvalue={String(field.value ?? \"\")}\n\t\t\t\t\tid={name}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\topacity={readOnly ? 0.8 : 1}\n\t\t\t\t\tborderColor={isDirty ? \"yellow.400\" : undefined}\n\t\t\t\t\tbg={isDirty ? \"yellow.50\" : undefined}\n\t\t\t\t\tref={ref}\n\t\t\t\t\t{...textareaProps}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</FormField>\n\t);\n}\n(TextareaField as { displayName?: string }).displayName = \"TextareaField\";\n","import { useFormContext } from \"react-hook-form\";\n\nexport interface UseFieldDirtyOptions {\n\t/** Set to false to never report dirty (opt-out per field). */\n\tshowDirtyState?: boolean;\n}\n\n/**\n * useFieldDirty returns true when the field at `name` is dirty (changed\n * from its react-hook-form default) AND visual marking isn't suppressed.\n * Safe to call outside a FormProvider — returns false in that case.\n */\nexport function useFieldDirty(\n\tname: string,\n\topts: UseFieldDirtyOptions = {},\n): boolean {\n\t// useFormContext must be called unconditionally before any branch\n\t// (rules of hooks). Apply showDirtyState gate after.\n\tconst ctx = useFormContext();\n\tconst { showDirtyState = true } = opts;\n\tif (!showDirtyState || !ctx) return false;\n\tconst dirty = ctx.formState.dirtyFields as Record<string, unknown>;\n\treturn Boolean(dirty[name]);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@knkcs/anker",
3
- "version": "2.4.0",
3
+ "version": "2.5.1",
4
4
  "description": "UI component library for the knk software group",
5
5
  "repository": {
6
6
  "type": "git",