@akinon/akiform-builder 1.2.1 → 1.3.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.
Files changed (53) hide show
  1. package/dist/cjs/__tests__/akiform-builder.test.js +345 -354
  2. package/dist/cjs/akiform-builder.d.ts +2 -1
  3. package/dist/cjs/akiform-builder.d.ts.map +1 -1
  4. package/dist/cjs/akiform-builder.js +243 -68
  5. package/dist/cjs/field-builder.d.ts +25 -6
  6. package/dist/cjs/field-builder.d.ts.map +1 -1
  7. package/dist/cjs/field-builder.js +83 -17
  8. package/dist/cjs/i18n/index.d.ts +1 -4
  9. package/dist/cjs/i18n/index.d.ts.map +1 -1
  10. package/dist/cjs/i18n/translations/en.d.ts +9 -2
  11. package/dist/cjs/i18n/translations/en.d.ts.map +1 -1
  12. package/dist/cjs/i18n/translations/en.js +10 -3
  13. package/dist/cjs/i18n/translations/tr.d.ts +9 -2
  14. package/dist/cjs/i18n/translations/tr.d.ts.map +1 -1
  15. package/dist/cjs/i18n/translations/tr.js +10 -3
  16. package/dist/cjs/src/akiform-builder.d.ts +1 -1
  17. package/dist/cjs/src/akiform-builder.d.ts.map +1 -1
  18. package/dist/cjs/src/akiform-builder.js +1 -1
  19. package/dist/cjs/src/field-builder.d.ts +3 -3
  20. package/dist/cjs/src/field-builder.d.ts.map +1 -1
  21. package/dist/cjs/src/i18n/index.d.ts +1 -4
  22. package/dist/cjs/src/i18n/index.d.ts.map +1 -1
  23. package/dist/cjs/src/types.d.ts +4 -4
  24. package/dist/cjs/src/types.d.ts.map +1 -1
  25. package/dist/cjs/types.d.ts +30 -6
  26. package/dist/cjs/types.d.ts.map +1 -1
  27. package/dist/esm/__tests__/akiform-builder.test.js +345 -354
  28. package/dist/esm/akiform-builder.d.ts +2 -1
  29. package/dist/esm/akiform-builder.d.ts.map +1 -1
  30. package/dist/esm/akiform-builder.js +243 -68
  31. package/dist/esm/field-builder.d.ts +25 -6
  32. package/dist/esm/field-builder.d.ts.map +1 -1
  33. package/dist/esm/field-builder.js +83 -17
  34. package/dist/esm/i18n/index.d.ts +1 -4
  35. package/dist/esm/i18n/index.d.ts.map +1 -1
  36. package/dist/esm/i18n/translations/en.d.ts +9 -2
  37. package/dist/esm/i18n/translations/en.d.ts.map +1 -1
  38. package/dist/esm/i18n/translations/en.js +10 -3
  39. package/dist/esm/i18n/translations/tr.d.ts +9 -2
  40. package/dist/esm/i18n/translations/tr.d.ts.map +1 -1
  41. package/dist/esm/i18n/translations/tr.js +10 -3
  42. package/dist/esm/src/akiform-builder.d.ts +1 -1
  43. package/dist/esm/src/akiform-builder.d.ts.map +1 -1
  44. package/dist/esm/src/akiform-builder.js +1 -1
  45. package/dist/esm/src/field-builder.d.ts +3 -3
  46. package/dist/esm/src/field-builder.d.ts.map +1 -1
  47. package/dist/esm/src/i18n/index.d.ts +1 -4
  48. package/dist/esm/src/i18n/index.d.ts.map +1 -1
  49. package/dist/esm/src/types.d.ts +4 -4
  50. package/dist/esm/src/types.d.ts.map +1 -1
  51. package/dist/esm/types.d.ts +30 -6
  52. package/dist/esm/types.d.ts.map +1 -1
  53. package/package.json +28 -23
@@ -1,6 +1,7 @@
1
+ import './index.css';
1
2
  import { FieldValues } from '@akinon/akiform';
2
3
  import React from 'react';
3
- import { AkiformBuilderProps, AkiformBuilderRef } from './types';
4
+ import type { AkiformBuilderProps, AkiformBuilderRef } from './types';
4
5
  export declare const THROTTLE_DELAY = 300;
5
6
  export declare const AkiformBuilder: React.ForwardRefExoticComponent<AkiformBuilderProps<FieldValues> & React.RefAttributes<AkiformBuilderRef<FieldValues>>>;
6
7
  //# sourceMappingURL=akiform-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"akiform-builder.d.ts","sourceRoot":"","sources":["../../src/akiform-builder.tsx"],"names":[],"mappings":"AAAA,OAAO,EAKL,WAAW,EAMZ,MAAM,iBAAiB,CAAC;AAUzB,OAAO,KAWN,MAAM,OAAO,CAAC;AAGf,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EAMlB,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,cAAc,MAAM,CAAC;AAkIlC,eAAO,MAAM,cAAc,yHA8Q1B,CAAC"}
1
+ {"version":3,"file":"akiform-builder.d.ts","sourceRoot":"","sources":["../../src/akiform-builder.tsx"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC;AAErB,OAAO,EAML,WAAW,EAMZ,MAAM,iBAAiB,CAAC;AAczB,OAAO,KAWN,MAAM,OAAO,CAAC;AAGf,OAAO,KAAK,EACV,mBAAmB,EACnB,iBAAiB,EAQlB,MAAM,SAAS,CAAC;AAEjB,eAAO,MAAM,cAAc,MAAM,CAAC;AAgXlC,eAAO,MAAM,cAAc,yHA+V1B,CAAC"}
@@ -9,36 +9,123 @@ var __rest = (this && this.__rest) || function (s, e) {
9
9
  }
10
10
  return t;
11
11
  };
12
+ import './index.css';
12
13
  import { Akiform, akivalResolver, FormItem, useFieldArray, useForm, useWatch } from '@akinon/akiform';
13
14
  import { akival } from '@akinon/akival';
15
+ import { Icon } from '@akinon/icons';
14
16
  import { Button } from '@akinon/ui-button';
15
17
  import { Checkbox } from '@akinon/ui-checkbox';
16
18
  import { Collapse } from '@akinon/ui-collapse';
17
19
  import { DatePicker } from '@akinon/ui-date-picker';
20
+ import { Divider } from '@akinon/ui-divider';
18
21
  import { Input, InputTextArea } from '@akinon/ui-input';
19
22
  import { InputNumber } from '@akinon/ui-input-number';
23
+ import { Col, Row } from '@akinon/ui-layout';
20
24
  import { Select } from '@akinon/ui-select';
21
- import { Space } from '@akinon/ui-space';
25
+ import { Text } from '@akinon/ui-typography';
26
+ import clsx from 'clsx';
22
27
  import React, { forwardRef, Fragment, useCallback, useEffect, useImperativeHandle, useMemo, useRef } from 'react';
23
28
  import { i18n } from './i18n';
24
29
  export const THROTTLE_DELAY = 300; // ms
30
+ const checkIsDisabled = ({ field, formValues }) => {
31
+ var _a;
32
+ const configDisabledProperty = (_a = field.config) === null || _a === void 0 ? void 0 : _a.disabled;
33
+ return typeof configDisabledProperty === 'function'
34
+ ? configDisabledProperty(formValues)
35
+ : !!configDisabledProperty;
36
+ };
37
+ const checkIsVisible = ({ field, formValues }) => {
38
+ var _a;
39
+ const configVisibleProperty = (_a = field.config) === null || _a === void 0 ? void 0 : _a.visible;
40
+ return typeof configVisibleProperty === 'function'
41
+ ? configVisibleProperty(formValues)
42
+ : configVisibleProperty !== false;
43
+ };
25
44
  const SectionComponent = ({ field, control, formValues, formState, layout, layoutOptions }) => {
26
- return (React.createElement(Collapse, { defaultActiveKey: field.defaultExpanded ? [field.key] : [], items: [
27
- {
28
- label: field.label,
29
- key: field.key,
30
- children: field.fields.map(nestedField => {
31
- var _a, _b;
32
- const isVisible = typeof ((_a = nestedField.config) === null || _a === void 0 ? void 0 : _a.visible) === 'function'
33
- ? nestedField.config.visible(formValues)
34
- : ((_b = nestedField.config) === null || _b === void 0 ? void 0 : _b.visible) !== false;
35
- if (!isVisible) {
36
- return null;
37
- }
38
- return (React.createElement(FormItem, { key: nestedField.key, control: control, name: nestedField.key, label: nestedField.label }, renderField(nestedField, control, formValues, formState, layout, layoutOptions)));
39
- })
40
- }
41
- ] }));
45
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
+ const { errors } = formState;
47
+ if (field.collapsible) {
48
+ return (React.createElement(Collapse, { defaultActiveKey: field.defaultExpanded ? [field.key] : [], expandIcon: panelProps => ({
49
+ name: 'circle-down',
50
+ style: {
51
+ color: 'var(--color-azure-500)',
52
+ transform: panelProps.isActive ? 'rotate(-180deg)' : 'rotate(0deg)',
53
+ transition: 'transform 0.3s'
54
+ },
55
+ size: 20
56
+ }), items: [
57
+ {
58
+ label: (React.createElement("div", { className: "akiform-builder-form-actions" },
59
+ React.createElement(Text, { strong: true }, field.label),
60
+ Object.keys(errors).length > 0 ? (React.createElement(Text, { strong: true, type: "danger" }, i18n.t('an_error_occurred'))) : null)),
61
+ key: field.key,
62
+ children: field.fields.map(nestedField => {
63
+ return renderFormItem({
64
+ field: nestedField,
65
+ control,
66
+ formValues,
67
+ formState,
68
+ layout,
69
+ layoutOptions
70
+ });
71
+ })
72
+ }
73
+ ] }));
74
+ }
75
+ else {
76
+ return (React.createElement(React.Fragment, null,
77
+ React.createElement(Divider, { orientation: "left", plain: true, plainOffset: 40 }, field.label),
78
+ field.fields.map(nestedField => {
79
+ return renderFormItem({
80
+ field: nestedField,
81
+ control,
82
+ formValues,
83
+ formState,
84
+ layout,
85
+ layoutOptions
86
+ });
87
+ })));
88
+ }
89
+ };
90
+ const RowComponent = ({ field, control, formValues, formState, layout, layoutOptions }) => {
91
+ const { columnFields, rowProps } = field;
92
+ if (!(columnFields === null || columnFields === void 0 ? void 0 : columnFields.length))
93
+ return;
94
+ return (React.createElement(Row, Object.assign({}, rowProps), columnFields.map(columnField => {
95
+ const { columnProps } = columnField;
96
+ const isVisible = checkIsVisible({
97
+ field: columnField,
98
+ formValues
99
+ });
100
+ if (!isVisible)
101
+ return null;
102
+ return (React.createElement(Col, Object.assign({ key: columnField.key, flex: "1" }, columnProps),
103
+ React.createElement(ColumnComponent, { field: columnField, control: control, formValues: formValues, formState: formState, layout: layout, layoutOptions: layoutOptions })));
104
+ })));
105
+ };
106
+ const ColumnComponent = ({ field, control, formValues, formState, layout, layoutOptions }) => {
107
+ const { fields } = field;
108
+ if (!(fields === null || fields === void 0 ? void 0 : fields.length))
109
+ return;
110
+ return fields.map(rowField => {
111
+ const isVisible = checkIsVisible({
112
+ field: rowField,
113
+ formValues
114
+ });
115
+ if (!isVisible)
116
+ return null;
117
+ const isRowField = rowField.type === 'row';
118
+ return isRowField
119
+ ? renderField(rowField, control, formValues, formState, layout, layoutOptions)
120
+ : renderFormItem({
121
+ field: rowField,
122
+ control,
123
+ formValues,
124
+ formState,
125
+ layout,
126
+ layoutOptions
127
+ });
128
+ });
42
129
  };
43
130
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
44
131
  const renderField = (field, control, formValues,
@@ -50,15 +137,15 @@ formState, layout, layoutOptions) => {
50
137
  };
51
138
  switch (field.type) {
52
139
  case 'text':
53
- return React.createElement(Input, Object.assign({ placeholder: field.placeholder }, commonProps));
140
+ return (React.createElement(Input, Object.assign({ placeholder: field.placeholder, size: "large" }, commonProps)));
54
141
  case 'number':
55
- return React.createElement(InputNumber, Object.assign({ placeholder: field.placeholder }, commonProps));
142
+ return (React.createElement(InputNumber, Object.assign({ placeholder: field.placeholder, size: "large" }, commonProps)));
56
143
  case 'select':
57
144
  return (React.createElement(Select, Object.assign({ placeholder: field.placeholder, options: field.options }, commonProps)));
58
145
  case 'checkbox':
59
146
  return (React.createElement(Checkbox, Object.assign({ checked: formValues[field.key] }, commonProps), field.label));
60
147
  case 'date':
61
- return React.createElement(DatePicker, Object.assign({ placeholder: field.placeholder }, commonProps));
148
+ return (React.createElement(DatePicker, Object.assign({ placeholder: field.placeholder, showTime: field.showTime, suffixIcon: "calendar", suffixIconColor: "var(--color-azure-500)", suffixIconSize: "16" }, commonProps)));
62
149
  case 'textarea':
63
150
  return React.createElement(InputTextArea, Object.assign({ placeholder: field.placeholder }, commonProps));
64
151
  case 'fieldArray':
@@ -71,13 +158,32 @@ formState, layout, layoutOptions) => {
71
158
  return React.createElement(Fragment, null);
72
159
  case 'section':
73
160
  return (React.createElement(SectionComponent, { field: field, control: control, formValues: formValues, formState: formState, layout: layout, layoutOptions: layoutOptions }));
161
+ case 'row':
162
+ return (React.createElement(RowComponent, { field: field, control: control, formValues: formValues, formState: formState, layout: layout, layoutOptions: layoutOptions }));
163
+ case 'column':
164
+ return (React.createElement(ColumnComponent, { field: field, control: control, formValues: formValues, formState: formState, layout: layout, layoutOptions: layoutOptions }));
74
165
  default:
75
166
  return React.createElement(Fragment, null);
76
167
  }
77
168
  };
169
+ const renderFormItem = ({ field, control, formValues, formState, layout, layoutOptions, customVisibleCheck }) => {
170
+ const isVisible = customVisibleCheck
171
+ ? customVisibleCheck()
172
+ : checkIsVisible({
173
+ field,
174
+ formValues
175
+ });
176
+ if (!isVisible)
177
+ return null;
178
+ const isDisabled = checkIsDisabled({
179
+ field,
180
+ formValues
181
+ });
182
+ return (React.createElement(FormItem, { key: field.key, control: control, name: field.key, label: field.label, required: field.validation ? true : false, tooltip: field.tooltip, disabled: isDisabled, help: field.help, labelDescription: field.labelDescription }, renderField(field, control, formValues, formState, layout, layoutOptions)));
183
+ };
78
184
  export const AkiformBuilder = forwardRef((_a, ref) => {
79
185
  var _b, _c;
80
- var { fields, onSubmit, layout = 'vertical', layoutOptions, showResetButton = false, onReset, controlled = false, values, onValueChange } = _a, rest = __rest(_a, ["fields", "onSubmit", "layout", "layoutOptions", "showResetButton", "onReset", "controlled", "values", "onValueChange"]);
186
+ var { fields, onSubmit, layout = 'vertical', layoutOptions, showResetButton = false, onReset, controlled = false, values, onValueChange, submitButtonProps, resetButtonProps } = _a, rest = __rest(_a, ["fields", "onSubmit", "layout", "layoutOptions", "showResetButton", "onReset", "controlled", "values", "onValueChange", "submitButtonProps", "resetButtonProps"]);
81
187
  const validationSchema = useMemo(() => {
82
188
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
83
189
  const schema = {};
@@ -107,6 +213,8 @@ export const AkiformBuilder = forwardRef((_a, ref) => {
107
213
  const prevFormValuesRef = useRef(null);
108
214
  const isInitialRenderRef = useRef(true);
109
215
  const throttleTimeoutRef = useRef(null);
216
+ const hasSubmitButton = !!onSubmit;
217
+ const hasFormActions = hasSubmitButton || showResetButton;
110
218
  const handleValueChange = useCallback((values) => {
111
219
  if (!controlled) {
112
220
  if (throttleTimeoutRef.current) {
@@ -212,39 +320,78 @@ export const AkiformBuilder = forwardRef((_a, ref) => {
212
320
  }
213
321
  }
214
322
  }));
215
- return (React.createElement(Akiform, Object.assign({ onFinish: handleSubmit(onSubmit), onReset: handleReset, layout: layout }, formItemLayout, rest, { "data-testid": "akiform-builder", role: "form", "aria-label": i18n.t('formLabel') }),
216
- fields.map(field => {
217
- var _a, _b, _c, _d;
218
- const isDisabled = typeof ((_a = field.config) === null || _a === void 0 ? void 0 : _a.disabled) === 'function'
219
- ? field.config.disabled(formValues)
220
- : (_b = field.config) === null || _b === void 0 ? void 0 : _b.disabled;
221
- const isVisible = typeof ((_c = field.config) === null || _c === void 0 ? void 0 : _c.visible) === 'function'
222
- ? field.config.visible(formValues)
223
- : ((_d = field.config) === null || _d === void 0 ? void 0 : _d.visible) !== false;
224
- if (!isVisible) {
225
- return null;
226
- }
227
- if (field.type === 'section') {
228
- return (React.createElement(SectionComponent, { key: field.key, field: field, control: control, formValues: formValues, formState: formState, layout: layout, layoutOptions: layoutOptions }));
323
+ const renderSubmitButton = () => {
324
+ const _a = submitButtonProps || {}, { children, block = false, className } = _a, otherSubmitButtonProps = __rest(_a, ["children", "block", "className"]);
325
+ const submitButtonClassName = clsx(className, {
326
+ 'w-full': block
327
+ });
328
+ return (React.createElement(Button, Object.assign({ className: submitButtonClassName, type: "primary" }, otherSubmitButtonProps, { htmlType: "submit" }), children || i18n.t('submit')));
329
+ };
330
+ const renderShowResetButton = () => {
331
+ const _a = resetButtonProps || {}, { children, block = false, className, onClick } = _a, otherResetButtonProps = __rest(_a, ["children", "block", "className", "onClick"]);
332
+ const resetButtonClassName = clsx(className, {
333
+ 'w-full': block
334
+ });
335
+ const handleOnClickReset = event => {
336
+ handleReset(event);
337
+ if (onClick) {
338
+ onClick(event);
229
339
  }
230
- return (React.createElement(FormItem, { key: field.key, control: control, name: field.key, label: field.label, disabled: isDisabled }, renderField(field, control, formValues, formState, layout, layoutOptions)));
231
- }),
232
- React.createElement(FormItem, { control: control, name: 'form_actions', wrapperCol: layout === 'horizontal'
233
- ? {
234
- offset: (_b = formItemLayout.labelCol) === null || _b === void 0 ? void 0 : _b.span,
235
- span: (_c = formItemLayout.wrapperCol) === null || _c === void 0 ? void 0 : _c.span
340
+ };
341
+ return (React.createElement(Button
342
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
343
+ , Object.assign({
344
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
345
+ onClick: handleOnClickReset, className: resetButtonClassName, type: "default" }, otherResetButtonProps, { htmlType: "reset" }), children || i18n.t('reset')));
346
+ };
347
+ const renderFormActions = () => {
348
+ return (React.createElement("div", { className: "akiform-builder-form-actions" },
349
+ hasSubmitButton && renderSubmitButton(),
350
+ showResetButton && renderShowResetButton()));
351
+ };
352
+ return (React.createElement("div", { className: "akiform-builder" },
353
+ React.createElement(Akiform, Object.assign({}, (hasSubmitButton && { onFinish: handleSubmit(onSubmit) }), { onReset: handleReset, layout: layout }, formItemLayout, rest, { "data-testid": "akiform-builder", role: "form", "aria-label": i18n.t('formLabel'), requiredMark: true }),
354
+ fields.map(field => {
355
+ const isVisible = checkIsVisible({
356
+ field,
357
+ formValues
358
+ });
359
+ if (!isVisible) {
360
+ return null;
236
361
  }
237
- : undefined },
238
- React.createElement(Space, null,
239
- React.createElement(Button, { type: "primary", htmlType: "submit" }, i18n.t('submit')),
240
- showResetButton && (
241
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
242
- React.createElement(Button, { onClick: handleReset, htmlType: "reset" }, i18n.t('reset')))))));
362
+ switch (field.type) {
363
+ case 'section':
364
+ return (React.createElement(SectionComponent, { key: field.key, field: field, control: control, formValues: formValues, formState: formState, layout: layout, layoutOptions: layoutOptions }));
365
+ case 'fieldArray':
366
+ return (React.createElement("div", { className: "akiform-builder-field-array", key: field.key },
367
+ React.createElement(Divider, { orientation: "left", plain: true, plainOffset: 40 },
368
+ React.createElement("span", { id: `${field.key}-label` }, field.label)),
369
+ renderField(field, control, formValues, formState, layout, layoutOptions)));
370
+ case 'row':
371
+ return renderField(field, control, formValues, formState, layout, layoutOptions);
372
+ default:
373
+ return renderFormItem({
374
+ field,
375
+ control,
376
+ formValues,
377
+ formState,
378
+ layout,
379
+ layoutOptions
380
+ });
381
+ }
382
+ }),
383
+ hasFormActions && (React.createElement(FormItem, { control: control, name: 'form_actions', wrapperCol: layout === 'horizontal'
384
+ ? {
385
+ offset: (_b = formItemLayout.labelCol) === null || _b === void 0 ? void 0 : _b.span,
386
+ span: (_c = formItemLayout.wrapperCol) === null || _c === void 0 ? void 0 : _c.span
387
+ }
388
+ : undefined }, renderFormActions())))));
243
389
  });
244
390
  AkiformBuilder.displayName = 'AkiformBuilder';
245
391
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
246
392
  const FieldArrayComponent = ({ field, control, formValues, formState, layout, layoutOptions }) => {
247
- const { fields, append, remove } = useFieldArray({
393
+ const { errors } = formState;
394
+ const { fields, append, remove, insert } = useFieldArray({
248
395
  control,
249
396
  name: field.key
250
397
  });
@@ -257,24 +404,52 @@ const FieldArrayComponent = ({ field, control, formValues, formState, layout, la
257
404
  {});
258
405
  };
259
406
  return (React.createElement("div", { role: "group", "aria-labelledby": `${field.key}-label` },
260
- React.createElement("div", { id: `${field.key}-label`, className: "sr-only" }, field.label),
261
- fields.map((item, index) => (React.createElement("div", { key: item.id },
262
- field.fields.map(nestedField => {
263
- var _a, _b;
264
- const isVisible = typeof ((_a = nestedField.config) === null || _a === void 0 ? void 0 : _a.visible) === 'function'
265
- ? nestedField.config.visible(((_b = formValues[field.key]) === null || _b === void 0 ? void 0 : _b[index]) || {})
266
- : true;
267
- if (!isVisible) {
268
- return null;
269
- }
270
- return (React.createElement(FormItem, { key: `${field.key}.${index}.${nestedField.key}`, control: control, name: `${field.key}.${index}.${nestedField.key}`, label: nestedField.label }, renderField(Object.assign(Object.assign({}, nestedField), {
271
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
272
- key: `${field.key}.${index}.${nestedField.key}` }), control, formValues, formState, layout, layoutOptions)));
273
- }),
274
- React.createElement(Button, { onClick: () => remove(index), "aria-label": `Remove ${field.label} ${index + 1}` }, "Remove")))),
275
- React.createElement(Button
276
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
277
- , {
278
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
279
- onClick: () => append(createInitialValue()), "aria-label": `Add ${field.label}` }, "Add")));
407
+ !fields.length && (React.createElement("div", { className: "akiform-builder-form-actions akiform-builder-action-icon", "data-testid": `${field.key}-add-button`, onClick: () => append(createInitialValue()) },
408
+ React.createElement(Icon, { icon: "plus", size: 20, color: "var(--color-green-500)", "aria-label": i18n.t('add', { label: field.label }) }),
409
+ React.createElement(Text, { strong: true }, i18n.t('add', { label: field.label })))),
410
+ fields.map((item, index) => {
411
+ var _a;
412
+ return (React.createElement(Fragment, { key: item.id },
413
+ React.createElement(Collapse, { collapsible: "icon", defaultActiveKey: field.defaultExpanded ? [item.id] : [], expandIcon: panelProps => ({
414
+ name: 'circle-down',
415
+ style: {
416
+ color: 'var(--color-azure-500)',
417
+ transform: panelProps.isActive
418
+ ? 'rotate(-180deg)'
419
+ : 'rotate(0deg)',
420
+ transition: 'transform 0.3s'
421
+ },
422
+ size: 20
423
+ }), items: [
424
+ {
425
+ label: (React.createElement("div", { className: "akiform-builder-form-actions" },
426
+ React.createElement(Text, { strong: true }, i18n.t('itemof', {
427
+ label: field.label,
428
+ count: index + 1,
429
+ ordinal: true
430
+ })),
431
+ React.createElement(Icon, { className: "akiform-builder-action-icon", onClick: () => remove(index), icon: "minus", size: 20, color: "var(--color-red-500)", "aria-label": i18n.t('remove', { label: field.label }) }),
432
+ React.createElement(Icon, { className: "akiform-builder-action-icon", onClick: () => insert(index + 1, createInitialValue()), icon: "plus", size: 20, color: "var(--color-green-500)", "aria-label": i18n.t('add', { label: field.label }) }),
433
+ ((_a = errors[field.key]) === null || _a === void 0 ? void 0 : _a[index]) ? (React.createElement(Text, { strong: true, type: "danger" }, i18n.t('an_error_occurred'))) : null)),
434
+ key: field.key,
435
+ children: field.fields.map(nestedField => {
436
+ return renderFormItem({
437
+ field: Object.assign(Object.assign({}, nestedField), { key: `${field.key}.${index}.${nestedField.key}` }),
438
+ control,
439
+ formValues,
440
+ formState,
441
+ layout,
442
+ layoutOptions,
443
+ customVisibleCheck: () => {
444
+ var _a, _b;
445
+ return typeof ((_a = nestedField.config) === null || _a === void 0 ? void 0 : _a.visible) === 'function'
446
+ ? nestedField.config.visible(((_b = formValues[field.key]) === null || _b === void 0 ? void 0 : _b[index]) || {})
447
+ : true;
448
+ }
449
+ });
450
+ })
451
+ }
452
+ ] }),
453
+ React.createElement(Divider, { plain: true })));
454
+ })));
280
455
  };
@@ -1,9 +1,11 @@
1
1
  import { FieldPath, FieldValues } from '@akinon/akiform';
2
2
  import { AnySchema } from '@akinon/akival';
3
- import { FieldConfig, FieldType, FormField } from './types';
4
- type FieldTypeToBuilder<T extends FieldType, TFieldValues extends FieldValues = FieldValues> = T extends 'select' ? SelectFieldBuilder<TFieldValues> : T extends 'custom' ? CustomFieldBuilder<TFieldValues> : T extends 'section' ? SectionFieldBuilder<TFieldValues> : BaseFieldBuilder<TFieldValues>;
3
+ import type { ColProps, RowProps } from '@akinon/ui-layout';
4
+ import type { TooltipProps } from '@akinon/ui-tooltip';
5
+ import type { FieldConfig, FieldType, FormField } from './types';
6
+ type FieldTypeToBuilder<T extends FieldType, TFieldValues extends FieldValues = FieldValues> = T extends 'select' ? SelectFieldBuilder<TFieldValues> : T extends 'date' ? DateFieldBuilder<TFieldValues> : T extends 'custom' ? CustomFieldBuilder<TFieldValues> : T extends 'section' ? SectionFieldBuilder<TFieldValues> : T extends 'fieldArray' ? FieldArrayOrSectionFieldBuilder<TFieldValues> : T extends 'row' ? RowFieldBuilder<TFieldValues> : T extends 'column' ? ColumnFieldBuilder<TFieldValues> : BaseFieldBuilder<TFieldValues>;
5
7
  declare class BaseFieldBuilder<TFieldValues extends FieldValues = FieldValues> {
6
- protected field: Partial<FormField<TFieldValues>>;
8
+ field: Partial<FormField<TFieldValues>>;
7
9
  key(key: FieldPath<TFieldValues>): this;
8
10
  label(label: string): this;
9
11
  type<T extends FieldType>(type: T): FieldTypeToBuilder<T, TFieldValues>;
@@ -11,6 +13,9 @@ declare class BaseFieldBuilder<TFieldValues extends FieldValues = FieldValues> {
11
13
  defaultValue(value: any): this;
12
14
  validation(schema: AnySchema): this;
13
15
  config(config: FieldConfig<TFieldValues>): this;
16
+ tooltip(tooltipProps: TooltipProps | string): this;
17
+ help(help: string): this;
18
+ labelDescription(labelDescription: string): this;
14
19
  build(): FormField<TFieldValues>;
15
20
  }
16
21
  declare class SelectFieldBuilder<TFieldValues extends FieldValues = FieldValues> extends BaseFieldBuilder<TFieldValues> {
@@ -19,6 +24,9 @@ declare class SelectFieldBuilder<TFieldValues extends FieldValues = FieldValues>
19
24
  label: string;
20
25
  }>): this;
21
26
  }
27
+ declare class DateFieldBuilder<TFieldValues extends FieldValues = FieldValues> extends BaseFieldBuilder<TFieldValues> {
28
+ showTime(showTime: boolean): this;
29
+ }
22
30
  declare class CustomFieldBuilder<TFieldValues extends FieldValues = FieldValues> extends BaseFieldBuilder<TFieldValues> {
23
31
  render(renderFn: (props: {
24
32
  field: FormField<TFieldValues>;
@@ -26,10 +34,21 @@ declare class CustomFieldBuilder<TFieldValues extends FieldValues = FieldValues>
26
34
  control: any;
27
35
  }) => React.ReactElement): this;
28
36
  }
29
- declare class SectionFieldBuilder<TFieldValues extends FieldValues = FieldValues> extends BaseFieldBuilder<TFieldValues> {
30
- fields(fields: FormField<TFieldValues>[]): this;
37
+ declare class FieldArrayOrSectionFieldBuilder<TFieldValues extends FieldValues = FieldValues> extends BaseFieldBuilder<TFieldValues> {
31
38
  defaultExpanded(expanded: boolean): this;
39
+ fields(fields: FormField<TFieldValues>[]): this;
40
+ }
41
+ declare class SectionFieldBuilder<TFieldValues extends FieldValues = FieldValues> extends FieldArrayOrSectionFieldBuilder<TFieldValues> {
42
+ collapsible(collapsible: boolean): this;
43
+ }
44
+ declare class RowFieldBuilder<TFieldValues extends FieldValues = FieldValues> extends BaseFieldBuilder<TFieldValues> {
45
+ columnFields(columnFields: FormField<TFieldValues>[]): this;
46
+ rowProps(rowProps: RowProps): this;
47
+ }
48
+ declare class ColumnFieldBuilder<TFieldValues extends FieldValues = FieldValues> extends BaseFieldBuilder<TFieldValues> {
49
+ fields(fields: FormField<TFieldValues>[]): this;
50
+ columnProps(columnProps: ColProps): this;
32
51
  }
33
- export declare function field<TFieldValues extends FieldValues = FieldValues>(): BaseFieldBuilder<TFieldValues> & SelectFieldBuilder<TFieldValues> & CustomFieldBuilder<TFieldValues> & SectionFieldBuilder<TFieldValues>;
52
+ export declare function field<TFieldValues extends FieldValues = FieldValues>(): BaseFieldBuilder<TFieldValues> & SelectFieldBuilder<TFieldValues> & DateFieldBuilder<TFieldValues> & CustomFieldBuilder<TFieldValues> & SectionFieldBuilder<TFieldValues> & FieldArrayOrSectionFieldBuilder<TFieldValues>;
34
53
  export {};
35
54
  //# sourceMappingURL=field-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-builder.d.ts","sourceRoot":"","sources":["../../src/field-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE5D,KAAK,kBAAkB,CACrB,CAAC,SAAS,SAAS,EACnB,YAAY,SAAS,WAAW,GAAG,WAAW,IAC5C,CAAC,SAAS,QAAQ,GAClB,kBAAkB,CAAC,YAAY,CAAC,GAChC,CAAC,SAAS,QAAQ,GAChB,kBAAkB,CAAC,YAAY,CAAC,GAChC,CAAC,SAAS,SAAS,GACjB,mBAAmB,CAAC,YAAY,CAAC,GACjC,gBAAgB,CAAC,YAAY,CAAC,CAAC;AAEvC,cAAM,gBAAgB,CAAC,YAAY,SAAS,WAAW,GAAG,WAAW;IACnE,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAM;IAEvD,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,YAAY,CAAC,GAAG,IAAI;IAKvC,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1B,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,GAAG,kBAAkB,CAAC,CAAC,EAAE,YAAY,CAAC;IAKvE,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAMtC,YAAY,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI;IAK9B,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI;IAKnC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,YAAY,CAAC,GAAG,IAAI;IAM/C,KAAK,IAAI,SAAS,CAAC,YAAY,CAAC;CAMjC;AAED,cAAM,kBAAkB,CACtB,YAAY,SAAS,WAAW,GAAG,WAAW,CAC9C,SAAQ,gBAAgB,CAAC,YAAY,CAAC;IACtC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;CAKzE;AAED,cAAM,kBAAkB,CACtB,YAAY,SAAS,WAAW,GAAG,WAAW,CAC9C,SAAQ,gBAAgB,CAAC,YAAY,CAAC;IACtC,MAAM,CACJ,QAAQ,EAAE,CAAC,KAAK,EAAE;QAChB,KAAK,EAAE,SAAS,CAAC,YAAY,CAAC,CAAC;QAC/B,UAAU,EAAE,YAAY,CAAC;QAEzB,OAAO,EAAE,GAAG,CAAC;KACd,KAAK,KAAK,CAAC,YAAY,GACvB,IAAI;CAKR;AAED,cAAM,mBAAmB,CACvB,YAAY,SAAS,WAAW,GAAG,WAAW,CAC9C,SAAQ,gBAAgB,CAAC,YAAY,CAAC;IACtC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,YAAY,CAAC,EAAE,GAAG,IAAI;IAM/C,eAAe,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI;CAKzC;AAED,wBAAgB,KAAK,CACnB,YAAY,SAAS,WAAW,GAAG,WAAW,KAC3C,gBAAgB,CAAC,YAAY,CAAC,GACjC,kBAAkB,CAAC,YAAY,CAAC,GAChC,kBAAkB,CAAC,YAAY,CAAC,GAChC,mBAAmB,CAAC,YAAY,CAAC,CAmBlC"}
1
+ {"version":3,"file":"field-builder.d.ts","sourceRoot":"","sources":["../../src/field-builder.ts"],"names":[],"mappings":"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"}
@@ -32,9 +32,21 @@ class BaseFieldBuilder {
32
32
  this.field.config = config;
33
33
  return this;
34
34
  }
35
+ tooltip(tooltipProps) {
36
+ this.field.tooltip = tooltipProps;
37
+ return this;
38
+ }
39
+ help(help) {
40
+ this.field.help = help;
41
+ return this;
42
+ }
43
+ labelDescription(labelDescription) {
44
+ this.field.labelDescription = labelDescription;
45
+ return this;
46
+ }
35
47
  build() {
36
- if (!this.field.key || !this.field.label || !this.field.type) {
37
- throw new Error('Field must have at least a key, label, and type');
48
+ if (!this.field.key || !this.field.type) {
49
+ throw new Error('Field must have at least a key and type');
38
50
  }
39
51
  return this.field;
40
52
  }
@@ -46,6 +58,13 @@ class SelectFieldBuilder extends BaseFieldBuilder {
46
58
  return this;
47
59
  }
48
60
  }
61
+ class DateFieldBuilder extends BaseFieldBuilder {
62
+ showTime(showTime) {
63
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
64
+ this.field.showTime = showTime;
65
+ return this;
66
+ }
67
+ }
49
68
  class CustomFieldBuilder extends BaseFieldBuilder {
50
69
  render(renderFn) {
51
70
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -53,32 +72,79 @@ class CustomFieldBuilder extends BaseFieldBuilder {
53
72
  return this;
54
73
  }
55
74
  }
56
- class SectionFieldBuilder extends BaseFieldBuilder {
75
+ class FieldArrayOrSectionFieldBuilder extends BaseFieldBuilder {
76
+ defaultExpanded(expanded) {
77
+ this.field.defaultExpanded = expanded;
78
+ return this;
79
+ }
80
+ fields(fields) {
81
+ if (this.field.type === 'fieldArray' || this.field.type === 'section') {
82
+ this.field.fields = fields;
83
+ }
84
+ else {
85
+ console.warn(`Fields can only be set for 'fieldArray' or 'section' types. Current type: ${this.field.type}`);
86
+ }
87
+ return this;
88
+ }
89
+ }
90
+ class SectionFieldBuilder extends FieldArrayOrSectionFieldBuilder {
91
+ collapsible(collapsible) {
92
+ this.field.collapsible = collapsible;
93
+ return this;
94
+ }
95
+ }
96
+ class RowFieldBuilder extends BaseFieldBuilder {
97
+ columnFields(columnFields) {
98
+ this.field.columnFields =
99
+ columnFields;
100
+ return this;
101
+ }
102
+ rowProps(rowProps) {
103
+ this.field.rowProps = rowProps;
104
+ return this;
105
+ }
106
+ }
107
+ class ColumnFieldBuilder extends BaseFieldBuilder {
57
108
  fields(fields) {
58
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
59
109
  this.field.fields = fields;
60
110
  return this;
61
111
  }
62
- defaultExpanded(expanded) {
63
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
64
- this.field.defaultExpanded = expanded;
112
+ columnProps(columnProps) {
113
+ this.field.columnProps = columnProps;
65
114
  return this;
66
115
  }
67
116
  }
68
117
  export function field() {
69
118
  return new Proxy(new BaseFieldBuilder(), {
70
119
  get(target, prop) {
71
- if (prop === 'options') {
72
- return SelectFieldBuilder.prototype.options;
73
- }
74
- if (prop === 'render') {
75
- return CustomFieldBuilder.prototype.render;
76
- }
77
- if (prop === 'fields' || prop === 'defaultExpanded') {
78
- return SectionFieldBuilder.prototype[prop];
120
+ switch (prop) {
121
+ case 'options':
122
+ return SelectFieldBuilder.prototype.options;
123
+ case 'showTime':
124
+ return DateFieldBuilder.prototype.showTime;
125
+ case 'render':
126
+ return CustomFieldBuilder.prototype.render;
127
+ case 'defaultExpanded':
128
+ return FieldArrayOrSectionFieldBuilder.prototype.defaultExpanded;
129
+ case 'fields': {
130
+ const fieldType = target.field.type;
131
+ if (fieldType === 'column') {
132
+ return ColumnFieldBuilder.prototype.fields;
133
+ }
134
+ return FieldArrayOrSectionFieldBuilder.prototype.fields;
135
+ }
136
+ case 'collapsible':
137
+ return SectionFieldBuilder.prototype.collapsible;
138
+ case 'columnFields':
139
+ return RowFieldBuilder.prototype.columnFields;
140
+ case 'rowProps':
141
+ return RowFieldBuilder.prototype.rowProps;
142
+ case 'columnProps':
143
+ return ColumnFieldBuilder.prototype.columnProps;
144
+ default:
145
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
146
+ return target[prop];
79
147
  }
80
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
81
- return target[prop];
82
148
  }
83
149
  });
84
150
  }
@@ -1,5 +1,2 @@
1
- export declare const i18n: {
2
- t: (key: string, options?: import("i18next").TOptions) => string;
3
- lng: string;
4
- };
1
+ export declare const i18n: import("@akinon/akilocale").AkilocaleInstance;
5
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/i18n/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,IAAI;4BAQszB,CAAC;;CADt0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/i18n/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,IAAI,+CAOf,CAAC"}