@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"}
@@ -12,36 +12,123 @@ var __rest = (this && this.__rest) || function (s, e) {
12
12
  };
13
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.AkiformBuilder = exports.THROTTLE_DELAY = void 0;
15
+ require("./index.css");
15
16
  const akiform_1 = require("@akinon/akiform");
16
17
  const akival_1 = require("@akinon/akival");
18
+ const icons_1 = require("@akinon/icons");
17
19
  const ui_button_1 = require("@akinon/ui-button");
18
20
  const ui_checkbox_1 = require("@akinon/ui-checkbox");
19
21
  const ui_collapse_1 = require("@akinon/ui-collapse");
20
22
  const ui_date_picker_1 = require("@akinon/ui-date-picker");
23
+ const ui_divider_1 = require("@akinon/ui-divider");
21
24
  const ui_input_1 = require("@akinon/ui-input");
22
25
  const ui_input_number_1 = require("@akinon/ui-input-number");
26
+ const ui_layout_1 = require("@akinon/ui-layout");
23
27
  const ui_select_1 = require("@akinon/ui-select");
24
- const ui_space_1 = require("@akinon/ui-space");
28
+ const ui_typography_1 = require("@akinon/ui-typography");
29
+ const clsx_1 = require("clsx");
25
30
  const react_1 = require("react");
26
31
  const i18n_1 = require("./i18n");
27
32
  exports.THROTTLE_DELAY = 300; // ms
33
+ const checkIsDisabled = ({ field, formValues }) => {
34
+ var _a;
35
+ const configDisabledProperty = (_a = field.config) === null || _a === void 0 ? void 0 : _a.disabled;
36
+ return typeof configDisabledProperty === 'function'
37
+ ? configDisabledProperty(formValues)
38
+ : !!configDisabledProperty;
39
+ };
40
+ const checkIsVisible = ({ field, formValues }) => {
41
+ var _a;
42
+ const configVisibleProperty = (_a = field.config) === null || _a === void 0 ? void 0 : _a.visible;
43
+ return typeof configVisibleProperty === 'function'
44
+ ? configVisibleProperty(formValues)
45
+ : configVisibleProperty !== false;
46
+ };
28
47
  const SectionComponent = ({ field, control, formValues, formState, layout, layoutOptions }) => {
29
- return (react_1.default.createElement(ui_collapse_1.Collapse, { defaultActiveKey: field.defaultExpanded ? [field.key] : [], items: [
30
- {
31
- label: field.label,
32
- key: field.key,
33
- children: field.fields.map(nestedField => {
34
- var _a, _b;
35
- const isVisible = typeof ((_a = nestedField.config) === null || _a === void 0 ? void 0 : _a.visible) === 'function'
36
- ? nestedField.config.visible(formValues)
37
- : ((_b = nestedField.config) === null || _b === void 0 ? void 0 : _b.visible) !== false;
38
- if (!isVisible) {
39
- return null;
40
- }
41
- return (react_1.default.createElement(akiform_1.FormItem, { key: nestedField.key, control: control, name: nestedField.key, label: nestedField.label }, renderField(nestedField, control, formValues, formState, layout, layoutOptions)));
42
- })
43
- }
44
- ] }));
48
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
49
+ const { errors } = formState;
50
+ if (field.collapsible) {
51
+ return (react_1.default.createElement(ui_collapse_1.Collapse, { defaultActiveKey: field.defaultExpanded ? [field.key] : [], expandIcon: panelProps => ({
52
+ name: 'circle-down',
53
+ style: {
54
+ color: 'var(--color-azure-500)',
55
+ transform: panelProps.isActive ? 'rotate(-180deg)' : 'rotate(0deg)',
56
+ transition: 'transform 0.3s'
57
+ },
58
+ size: 20
59
+ }), items: [
60
+ {
61
+ label: (react_1.default.createElement("div", { className: "akiform-builder-form-actions" },
62
+ react_1.default.createElement(ui_typography_1.Text, { strong: true }, field.label),
63
+ Object.keys(errors).length > 0 ? (react_1.default.createElement(ui_typography_1.Text, { strong: true, type: "danger" }, i18n_1.i18n.t('an_error_occurred'))) : null)),
64
+ key: field.key,
65
+ children: field.fields.map(nestedField => {
66
+ return renderFormItem({
67
+ field: nestedField,
68
+ control,
69
+ formValues,
70
+ formState,
71
+ layout,
72
+ layoutOptions
73
+ });
74
+ })
75
+ }
76
+ ] }));
77
+ }
78
+ else {
79
+ return (react_1.default.createElement(react_1.default.Fragment, null,
80
+ react_1.default.createElement(ui_divider_1.Divider, { orientation: "left", plain: true, plainOffset: 40 }, field.label),
81
+ field.fields.map(nestedField => {
82
+ return renderFormItem({
83
+ field: nestedField,
84
+ control,
85
+ formValues,
86
+ formState,
87
+ layout,
88
+ layoutOptions
89
+ });
90
+ })));
91
+ }
92
+ };
93
+ const RowComponent = ({ field, control, formValues, formState, layout, layoutOptions }) => {
94
+ const { columnFields, rowProps } = field;
95
+ if (!(columnFields === null || columnFields === void 0 ? void 0 : columnFields.length))
96
+ return;
97
+ return (react_1.default.createElement(ui_layout_1.Row, Object.assign({}, rowProps), columnFields.map(columnField => {
98
+ const { columnProps } = columnField;
99
+ const isVisible = checkIsVisible({
100
+ field: columnField,
101
+ formValues
102
+ });
103
+ if (!isVisible)
104
+ return null;
105
+ return (react_1.default.createElement(ui_layout_1.Col, Object.assign({ key: columnField.key, flex: "1" }, columnProps),
106
+ react_1.default.createElement(ColumnComponent, { field: columnField, control: control, formValues: formValues, formState: formState, layout: layout, layoutOptions: layoutOptions })));
107
+ })));
108
+ };
109
+ const ColumnComponent = ({ field, control, formValues, formState, layout, layoutOptions }) => {
110
+ const { fields } = field;
111
+ if (!(fields === null || fields === void 0 ? void 0 : fields.length))
112
+ return;
113
+ return fields.map(rowField => {
114
+ const isVisible = checkIsVisible({
115
+ field: rowField,
116
+ formValues
117
+ });
118
+ if (!isVisible)
119
+ return null;
120
+ const isRowField = rowField.type === 'row';
121
+ return isRowField
122
+ ? renderField(rowField, control, formValues, formState, layout, layoutOptions)
123
+ : renderFormItem({
124
+ field: rowField,
125
+ control,
126
+ formValues,
127
+ formState,
128
+ layout,
129
+ layoutOptions
130
+ });
131
+ });
45
132
  };
46
133
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
134
  const renderField = (field, control, formValues,
@@ -53,15 +140,15 @@ formState, layout, layoutOptions) => {
53
140
  };
54
141
  switch (field.type) {
55
142
  case 'text':
56
- return react_1.default.createElement(ui_input_1.Input, Object.assign({ placeholder: field.placeholder }, commonProps));
143
+ return (react_1.default.createElement(ui_input_1.Input, Object.assign({ placeholder: field.placeholder, size: "large" }, commonProps)));
57
144
  case 'number':
58
- return react_1.default.createElement(ui_input_number_1.InputNumber, Object.assign({ placeholder: field.placeholder }, commonProps));
145
+ return (react_1.default.createElement(ui_input_number_1.InputNumber, Object.assign({ placeholder: field.placeholder, size: "large" }, commonProps)));
59
146
  case 'select':
60
147
  return (react_1.default.createElement(ui_select_1.Select, Object.assign({ placeholder: field.placeholder, options: field.options }, commonProps)));
61
148
  case 'checkbox':
62
149
  return (react_1.default.createElement(ui_checkbox_1.Checkbox, Object.assign({ checked: formValues[field.key] }, commonProps), field.label));
63
150
  case 'date':
64
- return react_1.default.createElement(ui_date_picker_1.DatePicker, Object.assign({ placeholder: field.placeholder }, commonProps));
151
+ return (react_1.default.createElement(ui_date_picker_1.DatePicker, Object.assign({ placeholder: field.placeholder, showTime: field.showTime, suffixIcon: "calendar", suffixIconColor: "var(--color-azure-500)", suffixIconSize: "16" }, commonProps)));
65
152
  case 'textarea':
66
153
  return react_1.default.createElement(ui_input_1.InputTextArea, Object.assign({ placeholder: field.placeholder }, commonProps));
67
154
  case 'fieldArray':
@@ -74,13 +161,32 @@ formState, layout, layoutOptions) => {
74
161
  return react_1.default.createElement(react_1.Fragment, null);
75
162
  case 'section':
76
163
  return (react_1.default.createElement(SectionComponent, { field: field, control: control, formValues: formValues, formState: formState, layout: layout, layoutOptions: layoutOptions }));
164
+ case 'row':
165
+ return (react_1.default.createElement(RowComponent, { field: field, control: control, formValues: formValues, formState: formState, layout: layout, layoutOptions: layoutOptions }));
166
+ case 'column':
167
+ return (react_1.default.createElement(ColumnComponent, { field: field, control: control, formValues: formValues, formState: formState, layout: layout, layoutOptions: layoutOptions }));
77
168
  default:
78
169
  return react_1.default.createElement(react_1.Fragment, null);
79
170
  }
80
171
  };
172
+ const renderFormItem = ({ field, control, formValues, formState, layout, layoutOptions, customVisibleCheck }) => {
173
+ const isVisible = customVisibleCheck
174
+ ? customVisibleCheck()
175
+ : checkIsVisible({
176
+ field,
177
+ formValues
178
+ });
179
+ if (!isVisible)
180
+ return null;
181
+ const isDisabled = checkIsDisabled({
182
+ field,
183
+ formValues
184
+ });
185
+ return (react_1.default.createElement(akiform_1.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)));
186
+ };
81
187
  exports.AkiformBuilder = (0, react_1.forwardRef)((_a, ref) => {
82
188
  var _b, _c;
83
- 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"]);
189
+ 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"]);
84
190
  const validationSchema = (0, react_1.useMemo)(() => {
85
191
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
192
  const schema = {};
@@ -110,6 +216,8 @@ exports.AkiformBuilder = (0, react_1.forwardRef)((_a, ref) => {
110
216
  const prevFormValuesRef = (0, react_1.useRef)(null);
111
217
  const isInitialRenderRef = (0, react_1.useRef)(true);
112
218
  const throttleTimeoutRef = (0, react_1.useRef)(null);
219
+ const hasSubmitButton = !!onSubmit;
220
+ const hasFormActions = hasSubmitButton || showResetButton;
113
221
  const handleValueChange = (0, react_1.useCallback)((values) => {
114
222
  if (!controlled) {
115
223
  if (throttleTimeoutRef.current) {
@@ -215,39 +323,78 @@ exports.AkiformBuilder = (0, react_1.forwardRef)((_a, ref) => {
215
323
  }
216
324
  }
217
325
  }));
218
- return (react_1.default.createElement(akiform_1.Akiform, Object.assign({ onFinish: handleSubmit(onSubmit), onReset: handleReset, layout: layout }, formItemLayout, rest, { "data-testid": "akiform-builder", role: "form", "aria-label": i18n_1.i18n.t('formLabel') }),
219
- fields.map(field => {
220
- var _a, _b, _c, _d;
221
- const isDisabled = typeof ((_a = field.config) === null || _a === void 0 ? void 0 : _a.disabled) === 'function'
222
- ? field.config.disabled(formValues)
223
- : (_b = field.config) === null || _b === void 0 ? void 0 : _b.disabled;
224
- const isVisible = typeof ((_c = field.config) === null || _c === void 0 ? void 0 : _c.visible) === 'function'
225
- ? field.config.visible(formValues)
226
- : ((_d = field.config) === null || _d === void 0 ? void 0 : _d.visible) !== false;
227
- if (!isVisible) {
228
- return null;
229
- }
230
- if (field.type === 'section') {
231
- return (react_1.default.createElement(SectionComponent, { key: field.key, field: field, control: control, formValues: formValues, formState: formState, layout: layout, layoutOptions: layoutOptions }));
326
+ const renderSubmitButton = () => {
327
+ const _a = submitButtonProps || {}, { children, block = false, className } = _a, otherSubmitButtonProps = __rest(_a, ["children", "block", "className"]);
328
+ const submitButtonClassName = (0, clsx_1.default)(className, {
329
+ 'w-full': block
330
+ });
331
+ return (react_1.default.createElement(ui_button_1.Button, Object.assign({ className: submitButtonClassName, type: "primary" }, otherSubmitButtonProps, { htmlType: "submit" }), children || i18n_1.i18n.t('submit')));
332
+ };
333
+ const renderShowResetButton = () => {
334
+ const _a = resetButtonProps || {}, { children, block = false, className, onClick } = _a, otherResetButtonProps = __rest(_a, ["children", "block", "className", "onClick"]);
335
+ const resetButtonClassName = (0, clsx_1.default)(className, {
336
+ 'w-full': block
337
+ });
338
+ const handleOnClickReset = event => {
339
+ handleReset(event);
340
+ if (onClick) {
341
+ onClick(event);
232
342
  }
233
- return (react_1.default.createElement(akiform_1.FormItem, { key: field.key, control: control, name: field.key, label: field.label, disabled: isDisabled }, renderField(field, control, formValues, formState, layout, layoutOptions)));
234
- }),
235
- react_1.default.createElement(akiform_1.FormItem, { control: control, name: 'form_actions', wrapperCol: layout === 'horizontal'
236
- ? {
237
- offset: (_b = formItemLayout.labelCol) === null || _b === void 0 ? void 0 : _b.span,
238
- span: (_c = formItemLayout.wrapperCol) === null || _c === void 0 ? void 0 : _c.span
343
+ };
344
+ return (react_1.default.createElement(ui_button_1.Button
345
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
346
+ , Object.assign({
347
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
348
+ onClick: handleOnClickReset, className: resetButtonClassName, type: "default" }, otherResetButtonProps, { htmlType: "reset" }), children || i18n_1.i18n.t('reset')));
349
+ };
350
+ const renderFormActions = () => {
351
+ return (react_1.default.createElement("div", { className: "akiform-builder-form-actions" },
352
+ hasSubmitButton && renderSubmitButton(),
353
+ showResetButton && renderShowResetButton()));
354
+ };
355
+ return (react_1.default.createElement("div", { className: "akiform-builder" },
356
+ react_1.default.createElement(akiform_1.Akiform, Object.assign({}, (hasSubmitButton && { onFinish: handleSubmit(onSubmit) }), { onReset: handleReset, layout: layout }, formItemLayout, rest, { "data-testid": "akiform-builder", role: "form", "aria-label": i18n_1.i18n.t('formLabel'), requiredMark: true }),
357
+ fields.map(field => {
358
+ const isVisible = checkIsVisible({
359
+ field,
360
+ formValues
361
+ });
362
+ if (!isVisible) {
363
+ return null;
239
364
  }
240
- : undefined },
241
- react_1.default.createElement(ui_space_1.Space, null,
242
- react_1.default.createElement(ui_button_1.Button, { type: "primary", htmlType: "submit" }, i18n_1.i18n.t('submit')),
243
- showResetButton && (
244
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
245
- react_1.default.createElement(ui_button_1.Button, { onClick: handleReset, htmlType: "reset" }, i18n_1.i18n.t('reset')))))));
365
+ switch (field.type) {
366
+ case 'section':
367
+ return (react_1.default.createElement(SectionComponent, { key: field.key, field: field, control: control, formValues: formValues, formState: formState, layout: layout, layoutOptions: layoutOptions }));
368
+ case 'fieldArray':
369
+ return (react_1.default.createElement("div", { className: "akiform-builder-field-array", key: field.key },
370
+ react_1.default.createElement(ui_divider_1.Divider, { orientation: "left", plain: true, plainOffset: 40 },
371
+ react_1.default.createElement("span", { id: `${field.key}-label` }, field.label)),
372
+ renderField(field, control, formValues, formState, layout, layoutOptions)));
373
+ case 'row':
374
+ return renderField(field, control, formValues, formState, layout, layoutOptions);
375
+ default:
376
+ return renderFormItem({
377
+ field,
378
+ control,
379
+ formValues,
380
+ formState,
381
+ layout,
382
+ layoutOptions
383
+ });
384
+ }
385
+ }),
386
+ hasFormActions && (react_1.default.createElement(akiform_1.FormItem, { control: control, name: 'form_actions', wrapperCol: layout === 'horizontal'
387
+ ? {
388
+ offset: (_b = formItemLayout.labelCol) === null || _b === void 0 ? void 0 : _b.span,
389
+ span: (_c = formItemLayout.wrapperCol) === null || _c === void 0 ? void 0 : _c.span
390
+ }
391
+ : undefined }, renderFormActions())))));
246
392
  });
247
393
  exports.AkiformBuilder.displayName = 'AkiformBuilder';
248
394
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
249
395
  const FieldArrayComponent = ({ field, control, formValues, formState, layout, layoutOptions }) => {
250
- const { fields, append, remove } = (0, akiform_1.useFieldArray)({
396
+ const { errors } = formState;
397
+ const { fields, append, remove, insert } = (0, akiform_1.useFieldArray)({
251
398
  control,
252
399
  name: field.key
253
400
  });
@@ -260,24 +407,52 @@ const FieldArrayComponent = ({ field, control, formValues, formState, layout, la
260
407
  {});
261
408
  };
262
409
  return (react_1.default.createElement("div", { role: "group", "aria-labelledby": `${field.key}-label` },
263
- react_1.default.createElement("div", { id: `${field.key}-label`, className: "sr-only" }, field.label),
264
- fields.map((item, index) => (react_1.default.createElement("div", { key: item.id },
265
- field.fields.map(nestedField => {
266
- var _a, _b;
267
- const isVisible = typeof ((_a = nestedField.config) === null || _a === void 0 ? void 0 : _a.visible) === 'function'
268
- ? nestedField.config.visible(((_b = formValues[field.key]) === null || _b === void 0 ? void 0 : _b[index]) || {})
269
- : true;
270
- if (!isVisible) {
271
- return null;
272
- }
273
- return (react_1.default.createElement(akiform_1.FormItem, { key: `${field.key}.${index}.${nestedField.key}`, control: control, name: `${field.key}.${index}.${nestedField.key}`, label: nestedField.label }, renderField(Object.assign(Object.assign({}, nestedField), {
274
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
275
- key: `${field.key}.${index}.${nestedField.key}` }), control, formValues, formState, layout, layoutOptions)));
276
- }),
277
- react_1.default.createElement(ui_button_1.Button, { onClick: () => remove(index), "aria-label": `Remove ${field.label} ${index + 1}` }, "Remove")))),
278
- react_1.default.createElement(ui_button_1.Button
279
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
280
- , {
281
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
282
- onClick: () => append(createInitialValue()), "aria-label": `Add ${field.label}` }, "Add")));
410
+ !fields.length && (react_1.default.createElement("div", { className: "akiform-builder-form-actions akiform-builder-action-icon", "data-testid": `${field.key}-add-button`, onClick: () => append(createInitialValue()) },
411
+ react_1.default.createElement(icons_1.Icon, { icon: "plus", size: 20, color: "var(--color-green-500)", "aria-label": i18n_1.i18n.t('add', { label: field.label }) }),
412
+ react_1.default.createElement(ui_typography_1.Text, { strong: true }, i18n_1.i18n.t('add', { label: field.label })))),
413
+ fields.map((item, index) => {
414
+ var _a;
415
+ return (react_1.default.createElement(react_1.Fragment, { key: item.id },
416
+ react_1.default.createElement(ui_collapse_1.Collapse, { collapsible: "icon", defaultActiveKey: field.defaultExpanded ? [item.id] : [], expandIcon: panelProps => ({
417
+ name: 'circle-down',
418
+ style: {
419
+ color: 'var(--color-azure-500)',
420
+ transform: panelProps.isActive
421
+ ? 'rotate(-180deg)'
422
+ : 'rotate(0deg)',
423
+ transition: 'transform 0.3s'
424
+ },
425
+ size: 20
426
+ }), items: [
427
+ {
428
+ label: (react_1.default.createElement("div", { className: "akiform-builder-form-actions" },
429
+ react_1.default.createElement(ui_typography_1.Text, { strong: true }, i18n_1.i18n.t('itemof', {
430
+ label: field.label,
431
+ count: index + 1,
432
+ ordinal: true
433
+ })),
434
+ react_1.default.createElement(icons_1.Icon, { className: "akiform-builder-action-icon", onClick: () => remove(index), icon: "minus", size: 20, color: "var(--color-red-500)", "aria-label": i18n_1.i18n.t('remove', { label: field.label }) }),
435
+ react_1.default.createElement(icons_1.Icon, { className: "akiform-builder-action-icon", onClick: () => insert(index + 1, createInitialValue()), icon: "plus", size: 20, color: "var(--color-green-500)", "aria-label": i18n_1.i18n.t('add', { label: field.label }) }),
436
+ ((_a = errors[field.key]) === null || _a === void 0 ? void 0 : _a[index]) ? (react_1.default.createElement(ui_typography_1.Text, { strong: true, type: "danger" }, i18n_1.i18n.t('an_error_occurred'))) : null)),
437
+ key: field.key,
438
+ children: field.fields.map(nestedField => {
439
+ return renderFormItem({
440
+ field: Object.assign(Object.assign({}, nestedField), { key: `${field.key}.${index}.${nestedField.key}` }),
441
+ control,
442
+ formValues,
443
+ formState,
444
+ layout,
445
+ layoutOptions,
446
+ customVisibleCheck: () => {
447
+ var _a, _b;
448
+ return typeof ((_a = nestedField.config) === null || _a === void 0 ? void 0 : _a.visible) === 'function'
449
+ ? nestedField.config.visible(((_b = formValues[field.key]) === null || _b === void 0 ? void 0 : _b[index]) || {})
450
+ : true;
451
+ }
452
+ });
453
+ })
454
+ }
455
+ ] }),
456
+ react_1.default.createElement(ui_divider_1.Divider, { plain: true })));
457
+ })));
283
458
  };
@@ -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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"}
@@ -35,9 +35,21 @@ class BaseFieldBuilder {
35
35
  this.field.config = config;
36
36
  return this;
37
37
  }
38
+ tooltip(tooltipProps) {
39
+ this.field.tooltip = tooltipProps;
40
+ return this;
41
+ }
42
+ help(help) {
43
+ this.field.help = help;
44
+ return this;
45
+ }
46
+ labelDescription(labelDescription) {
47
+ this.field.labelDescription = labelDescription;
48
+ return this;
49
+ }
38
50
  build() {
39
- if (!this.field.key || !this.field.label || !this.field.type) {
40
- throw new Error('Field must have at least a key, label, and type');
51
+ if (!this.field.key || !this.field.type) {
52
+ throw new Error('Field must have at least a key and type');
41
53
  }
42
54
  return this.field;
43
55
  }
@@ -49,6 +61,13 @@ class SelectFieldBuilder extends BaseFieldBuilder {
49
61
  return this;
50
62
  }
51
63
  }
64
+ class DateFieldBuilder extends BaseFieldBuilder {
65
+ showTime(showTime) {
66
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
+ this.field.showTime = showTime;
68
+ return this;
69
+ }
70
+ }
52
71
  class CustomFieldBuilder extends BaseFieldBuilder {
53
72
  render(renderFn) {
54
73
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -56,32 +75,79 @@ class CustomFieldBuilder extends BaseFieldBuilder {
56
75
  return this;
57
76
  }
58
77
  }
59
- class SectionFieldBuilder extends BaseFieldBuilder {
78
+ class FieldArrayOrSectionFieldBuilder extends BaseFieldBuilder {
79
+ defaultExpanded(expanded) {
80
+ this.field.defaultExpanded = expanded;
81
+ return this;
82
+ }
83
+ fields(fields) {
84
+ if (this.field.type === 'fieldArray' || this.field.type === 'section') {
85
+ this.field.fields = fields;
86
+ }
87
+ else {
88
+ console.warn(`Fields can only be set for 'fieldArray' or 'section' types. Current type: ${this.field.type}`);
89
+ }
90
+ return this;
91
+ }
92
+ }
93
+ class SectionFieldBuilder extends FieldArrayOrSectionFieldBuilder {
94
+ collapsible(collapsible) {
95
+ this.field.collapsible = collapsible;
96
+ return this;
97
+ }
98
+ }
99
+ class RowFieldBuilder extends BaseFieldBuilder {
100
+ columnFields(columnFields) {
101
+ this.field.columnFields =
102
+ columnFields;
103
+ return this;
104
+ }
105
+ rowProps(rowProps) {
106
+ this.field.rowProps = rowProps;
107
+ return this;
108
+ }
109
+ }
110
+ class ColumnFieldBuilder extends BaseFieldBuilder {
60
111
  fields(fields) {
61
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
62
112
  this.field.fields = fields;
63
113
  return this;
64
114
  }
65
- defaultExpanded(expanded) {
66
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
- this.field.defaultExpanded = expanded;
115
+ columnProps(columnProps) {
116
+ this.field.columnProps = columnProps;
68
117
  return this;
69
118
  }
70
119
  }
71
120
  function field() {
72
121
  return new Proxy(new BaseFieldBuilder(), {
73
122
  get(target, prop) {
74
- if (prop === 'options') {
75
- return SelectFieldBuilder.prototype.options;
76
- }
77
- if (prop === 'render') {
78
- return CustomFieldBuilder.prototype.render;
79
- }
80
- if (prop === 'fields' || prop === 'defaultExpanded') {
81
- return SectionFieldBuilder.prototype[prop];
123
+ switch (prop) {
124
+ case 'options':
125
+ return SelectFieldBuilder.prototype.options;
126
+ case 'showTime':
127
+ return DateFieldBuilder.prototype.showTime;
128
+ case 'render':
129
+ return CustomFieldBuilder.prototype.render;
130
+ case 'defaultExpanded':
131
+ return FieldArrayOrSectionFieldBuilder.prototype.defaultExpanded;
132
+ case 'fields': {
133
+ const fieldType = target.field.type;
134
+ if (fieldType === 'column') {
135
+ return ColumnFieldBuilder.prototype.fields;
136
+ }
137
+ return FieldArrayOrSectionFieldBuilder.prototype.fields;
138
+ }
139
+ case 'collapsible':
140
+ return SectionFieldBuilder.prototype.collapsible;
141
+ case 'columnFields':
142
+ return RowFieldBuilder.prototype.columnFields;
143
+ case 'rowProps':
144
+ return RowFieldBuilder.prototype.rowProps;
145
+ case 'columnProps':
146
+ return ColumnFieldBuilder.prototype.columnProps;
147
+ default:
148
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
149
+ return target[prop];
82
150
  }
83
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
84
- return target[prop];
85
151
  }
86
152
  });
87
153
  }
@@ -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"}