@akinon/akiform-builder 0.5.0 → 0.7.0

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 (77) hide show
  1. package/dist/cjs/akiform-builder.d.ts +6 -0
  2. package/dist/cjs/akiform-builder.d.ts.map +1 -0
  3. package/dist/cjs/akiform-builder.js +283 -0
  4. package/dist/cjs/field-builder.d.ts +35 -0
  5. package/dist/cjs/field-builder.d.ts.map +1 -0
  6. package/dist/cjs/field-builder.js +87 -0
  7. package/dist/cjs/i18n/index.d.ts +5 -0
  8. package/dist/cjs/i18n/index.d.ts.map +1 -0
  9. package/dist/cjs/i18n/index.js +14 -0
  10. package/dist/cjs/i18n/translations/en.d.ts +7 -0
  11. package/dist/cjs/i18n/translations/en.d.ts.map +1 -0
  12. package/dist/cjs/i18n/translations/en.js +8 -0
  13. package/dist/cjs/i18n/translations/tr.d.ts +7 -0
  14. package/dist/cjs/i18n/translations/tr.d.ts.map +1 -0
  15. package/dist/cjs/i18n/translations/tr.js +8 -0
  16. package/dist/cjs/index.d.ts +2 -4
  17. package/dist/cjs/index.d.ts.map +1 -1
  18. package/dist/cjs/index.js +4 -9
  19. package/dist/cjs/types.d.ts +62 -62
  20. package/dist/cjs/types.d.ts.map +1 -1
  21. package/dist/esm/akiform-builder.d.ts +6 -0
  22. package/dist/esm/akiform-builder.d.ts.map +1 -0
  23. package/dist/esm/akiform-builder.js +280 -0
  24. package/dist/esm/field-builder.d.ts +35 -0
  25. package/dist/esm/field-builder.d.ts.map +1 -0
  26. package/dist/esm/field-builder.js +84 -0
  27. package/dist/esm/i18n/index.d.ts +5 -0
  28. package/dist/esm/i18n/index.d.ts.map +1 -0
  29. package/dist/esm/i18n/index.js +11 -0
  30. package/dist/esm/i18n/translations/en.d.ts +7 -0
  31. package/dist/esm/i18n/translations/en.d.ts.map +1 -0
  32. package/dist/esm/i18n/translations/en.js +6 -0
  33. package/dist/esm/i18n/translations/tr.d.ts +7 -0
  34. package/dist/esm/i18n/translations/tr.d.ts.map +1 -0
  35. package/dist/esm/i18n/translations/tr.js +6 -0
  36. package/dist/esm/index.d.ts +2 -4
  37. package/dist/esm/index.d.ts.map +1 -1
  38. package/dist/esm/index.js +2 -4
  39. package/dist/esm/types.d.ts +62 -62
  40. package/dist/esm/types.d.ts.map +1 -1
  41. package/package.json +15 -17
  42. package/dist/cjs/FormBuilderWatch.d.ts +0 -16
  43. package/dist/cjs/FormBuilderWatch.d.ts.map +0 -1
  44. package/dist/cjs/FormBuilderWatch.js +0 -75
  45. package/dist/cjs/RenderField.d.ts +0 -5
  46. package/dist/cjs/RenderField.d.ts.map +0 -1
  47. package/dist/cjs/RenderField.js +0 -45
  48. package/dist/cjs/component.d.ts +0 -4
  49. package/dist/cjs/component.d.ts.map +0 -1
  50. package/dist/cjs/component.js +0 -46
  51. package/dist/cjs/hook.d.ts +0 -3
  52. package/dist/cjs/hook.d.ts.map +0 -1
  53. package/dist/cjs/hook.js +0 -38
  54. package/dist/cjs/transformers/index.d.ts +0 -4
  55. package/dist/cjs/transformers/index.d.ts.map +0 -1
  56. package/dist/cjs/transformers/index.js +0 -77
  57. package/dist/cjs/transformers/types.d.ts +0 -22
  58. package/dist/cjs/transformers/types.d.ts.map +0 -1
  59. package/dist/cjs/transformers/types.js +0 -18
  60. package/dist/esm/FormBuilderWatch.d.ts +0 -16
  61. package/dist/esm/FormBuilderWatch.d.ts.map +0 -1
  62. package/dist/esm/FormBuilderWatch.js +0 -71
  63. package/dist/esm/RenderField.d.ts +0 -5
  64. package/dist/esm/RenderField.d.ts.map +0 -1
  65. package/dist/esm/RenderField.js +0 -41
  66. package/dist/esm/component.d.ts +0 -4
  67. package/dist/esm/component.d.ts.map +0 -1
  68. package/dist/esm/component.js +0 -42
  69. package/dist/esm/hook.d.ts +0 -3
  70. package/dist/esm/hook.d.ts.map +0 -1
  71. package/dist/esm/hook.js +0 -34
  72. package/dist/esm/transformers/index.d.ts +0 -4
  73. package/dist/esm/transformers/index.d.ts.map +0 -1
  74. package/dist/esm/transformers/index.js +0 -73
  75. package/dist/esm/transformers/types.d.ts +0 -22
  76. package/dist/esm/transformers/types.d.ts.map +0 -1
  77. package/dist/esm/transformers/types.js +0 -15
@@ -0,0 +1,6 @@
1
+ import { FieldValues } from '@akinon/akiform';
2
+ import React from 'react';
3
+ import { AkiformBuilderProps, AkiformBuilderRef } from './types';
4
+ export declare const THROTTLE_DELAY = 300;
5
+ export declare const AkiformBuilder: React.ForwardRefExoticComponent<AkiformBuilderProps<FieldValues> & React.RefAttributes<AkiformBuilderRef<FieldValues>>>;
6
+ //# sourceMappingURL=akiform-builder.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,283 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.AkiformBuilder = exports.THROTTLE_DELAY = void 0;
15
+ const akiform_1 = require("@akinon/akiform");
16
+ const akival_1 = require("@akinon/akival");
17
+ const ui_button_1 = require("@akinon/ui-button");
18
+ const ui_checkbox_1 = require("@akinon/ui-checkbox");
19
+ const ui_collapse_1 = require("@akinon/ui-collapse");
20
+ const ui_date_picker_1 = require("@akinon/ui-date-picker");
21
+ const ui_input_1 = require("@akinon/ui-input");
22
+ const ui_input_number_1 = require("@akinon/ui-input-number");
23
+ const ui_select_1 = require("@akinon/ui-select");
24
+ const ui_space_1 = require("@akinon/ui-space");
25
+ const react_1 = require("react");
26
+ const i18n_1 = require("./i18n");
27
+ exports.THROTTLE_DELAY = 300; // ms
28
+ 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
+ ] }));
45
+ };
46
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
+ const renderField = (field, control, formValues,
48
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
49
+ formState, layout, layoutOptions) => {
50
+ const commonProps = {
51
+ 'aria-required': field.validation ? true : false,
52
+ 'aria-invalid': formState.errors[field.key] ? true : false
53
+ };
54
+ switch (field.type) {
55
+ case 'text':
56
+ return react_1.default.createElement(ui_input_1.Input, Object.assign({ placeholder: field.placeholder }, commonProps));
57
+ case 'number':
58
+ return react_1.default.createElement(ui_input_number_1.InputNumber, Object.assign({ placeholder: field.placeholder }, commonProps));
59
+ case 'select':
60
+ return (react_1.default.createElement(ui_select_1.Select, Object.assign({ placeholder: field.placeholder, options: field.options }, commonProps)));
61
+ case 'checkbox':
62
+ return (react_1.default.createElement(ui_checkbox_1.Checkbox, Object.assign({ checked: formValues[field.key] }, commonProps), field.label));
63
+ case 'date':
64
+ return react_1.default.createElement(ui_date_picker_1.DatePicker, Object.assign({ placeholder: field.placeholder }, commonProps));
65
+ case 'textarea':
66
+ return react_1.default.createElement(ui_input_1.InputTextArea, Object.assign({ placeholder: field.placeholder }, commonProps));
67
+ case 'fieldArray':
68
+ return (react_1.default.createElement(FieldArrayComponent, { field: field, control: control, formValues: formValues, formState: formState, layout: layout, layoutOptions: layoutOptions }));
69
+ case 'custom':
70
+ if (typeof field.render === 'function') {
71
+ return field.render({ field, formValues, control, formState });
72
+ }
73
+ console.warn(`Custom field "${field.key}" has no render function`);
74
+ return react_1.default.createElement(react_1.Fragment, null);
75
+ case 'section':
76
+ return (react_1.default.createElement(SectionComponent, { field: field, control: control, formValues: formValues, formState: formState, layout: layout, layoutOptions: layoutOptions }));
77
+ default:
78
+ return react_1.default.createElement(react_1.Fragment, null);
79
+ }
80
+ };
81
+ exports.AkiformBuilder = (0, react_1.forwardRef)((_a, ref) => {
82
+ 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"]);
84
+ const validationSchema = (0, react_1.useMemo)(() => {
85
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
86
+ const schema = {};
87
+ fields.forEach(field => {
88
+ if (field.validation) {
89
+ schema[field.key] = field.validation;
90
+ }
91
+ if (field.type === 'fieldArray') {
92
+ schema[field.key] = akival_1.akival.array().of(akival_1.akival.object().shape(field.fields.reduce((acc, nestedField) => {
93
+ if (nestedField.validation) {
94
+ acc[nestedField.key] = nestedField.validation;
95
+ }
96
+ return acc;
97
+ },
98
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
99
+ {})));
100
+ }
101
+ });
102
+ return akival_1.akival.object().shape(schema);
103
+ }, [fields]);
104
+ const { control, handleSubmit, reset, setValue, formState } = (0, akiform_1.useForm)(Object.assign({
105
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
106
+ resolver: (0, akiform_1.akivalResolver)(validationSchema),
107
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
108
+ defaultValues: rest.initialValues }, (controlled && { values: values })));
109
+ const formValues = (0, akiform_1.useWatch)({ control });
110
+ const prevFormValuesRef = (0, react_1.useRef)(null);
111
+ const isInitialRenderRef = (0, react_1.useRef)(true);
112
+ const throttleTimeoutRef = (0, react_1.useRef)(null);
113
+ const handleValueChange = (0, react_1.useCallback)((values) => {
114
+ if (!controlled) {
115
+ if (throttleTimeoutRef.current) {
116
+ clearTimeout(throttleTimeoutRef.current);
117
+ }
118
+ throttleTimeoutRef.current = setTimeout(() => {
119
+ onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(values);
120
+ }, exports.THROTTLE_DELAY);
121
+ }
122
+ else {
123
+ onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(values);
124
+ }
125
+ }, [controlled, onValueChange]);
126
+ (0, react_1.useEffect)(() => {
127
+ if (isInitialRenderRef.current) {
128
+ isInitialRenderRef.current = false;
129
+ prevFormValuesRef.current = Object.assign({}, formValues);
130
+ return;
131
+ }
132
+ if (formState.isDirty ||
133
+ Object.keys(formState.touchedFields).length > 0) {
134
+ const hasChanged = JSON.stringify(formValues) !==
135
+ JSON.stringify(prevFormValuesRef.current);
136
+ if (hasChanged) {
137
+ handleValueChange(formValues);
138
+ prevFormValuesRef.current = Object.assign({}, formValues);
139
+ }
140
+ }
141
+ }, [
142
+ formValues,
143
+ formState.isDirty,
144
+ formState.touchedFields,
145
+ handleValueChange
146
+ ]);
147
+ (0, react_1.useEffect)(() => {
148
+ return () => {
149
+ if (throttleTimeoutRef.current) {
150
+ clearTimeout(throttleTimeoutRef.current);
151
+ }
152
+ };
153
+ }, []);
154
+ (0, react_1.useEffect)(() => {
155
+ if (controlled && onValueChange) {
156
+ onValueChange(formValues);
157
+ }
158
+ }, [controlled, onValueChange, formValues]);
159
+ const formItemLayout = (0, react_1.useMemo)(() => {
160
+ const defaultHorizontalLayout = {
161
+ labelCol: { span: 6 },
162
+ wrapperCol: { span: 18 }
163
+ };
164
+ const defaultInlineLayout = {
165
+ wrapperCol: { span: 24 }
166
+ };
167
+ switch (layout) {
168
+ case 'horizontal':
169
+ return {
170
+ labelCol: (layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.labelCol) || defaultHorizontalLayout.labelCol,
171
+ wrapperCol: (layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.wrapperCol) || defaultHorizontalLayout.wrapperCol
172
+ };
173
+ case 'inline':
174
+ return {
175
+ wrapperCol: (layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.wrapperCol) || defaultInlineLayout.wrapperCol
176
+ };
177
+ case 'vertical':
178
+ default:
179
+ return {};
180
+ }
181
+ }, [layout, layoutOptions]);
182
+ const handleReset = (event) => {
183
+ event.preventDefault();
184
+ reset();
185
+ if (onReset) {
186
+ // Create a synthetic FormEvent if the event is a MouseEvent
187
+ const formEvent = event.type === 'click'
188
+ ? {
189
+ preventDefault: () => { },
190
+ target: event.target.closest('form')
191
+ }
192
+ : event;
193
+ onReset(formEvent);
194
+ }
195
+ };
196
+ (0, react_1.useImperativeHandle)(ref, () => ({
197
+ reset: (values) => {
198
+ if (values) {
199
+ // Partial reset: only reset specified fields
200
+ Object.keys(values).forEach(key => {
201
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
202
+ setValue(key, values[key]);
203
+ });
204
+ }
205
+ else {
206
+ // Full reset
207
+ reset();
208
+ }
209
+ if (onReset) {
210
+ const syntheticEvent = {
211
+ preventDefault: () => { },
212
+ target: { reset: () => { } }
213
+ };
214
+ onReset(syntheticEvent);
215
+ }
216
+ }
217
+ }));
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 }));
232
+ }
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
239
+ }
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')))))));
246
+ });
247
+ exports.AkiformBuilder.displayName = 'AkiformBuilder';
248
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
249
+ const FieldArrayComponent = ({ field, control, formValues, formState, layout, layoutOptions }) => {
250
+ const { fields, append, remove } = (0, akiform_1.useFieldArray)({
251
+ control,
252
+ name: field.key
253
+ });
254
+ const createInitialValue = () => {
255
+ return field.fields.reduce((acc, nestedField) => {
256
+ acc[nestedField.key] = nestedField.defaultValue || '';
257
+ return acc;
258
+ },
259
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
260
+ {});
261
+ };
262
+ 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")));
283
+ };
@@ -0,0 +1,35 @@
1
+ import { FieldPath, FieldValues } from '@akinon/akiform';
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>;
5
+ declare class BaseFieldBuilder<TFieldValues extends FieldValues = FieldValues> {
6
+ protected field: Partial<FormField<TFieldValues>>;
7
+ key(key: FieldPath<TFieldValues>): this;
8
+ label(label: string): this;
9
+ type<T extends FieldType>(type: T): FieldTypeToBuilder<T, TFieldValues>;
10
+ placeholder(placeholder: string): this;
11
+ defaultValue(value: any): this;
12
+ validation(schema: AnySchema): this;
13
+ config(config: FieldConfig<TFieldValues>): this;
14
+ build(): FormField<TFieldValues>;
15
+ }
16
+ declare class SelectFieldBuilder<TFieldValues extends FieldValues = FieldValues> extends BaseFieldBuilder<TFieldValues> {
17
+ options(options: Array<{
18
+ value: string | number;
19
+ label: string;
20
+ }>): this;
21
+ }
22
+ declare class CustomFieldBuilder<TFieldValues extends FieldValues = FieldValues> extends BaseFieldBuilder<TFieldValues> {
23
+ render(renderFn: (props: {
24
+ field: FormField<TFieldValues>;
25
+ formValues: TFieldValues;
26
+ control: any;
27
+ }) => React.ReactElement): this;
28
+ }
29
+ declare class SectionFieldBuilder<TFieldValues extends FieldValues = FieldValues> extends BaseFieldBuilder<TFieldValues> {
30
+ fields(fields: FormField<TFieldValues>[]): this;
31
+ defaultExpanded(expanded: boolean): this;
32
+ }
33
+ export declare function field<TFieldValues extends FieldValues = FieldValues>(): BaseFieldBuilder<TFieldValues> & SelectFieldBuilder<TFieldValues> & CustomFieldBuilder<TFieldValues> & SectionFieldBuilder<TFieldValues>;
34
+ export {};
35
+ //# sourceMappingURL=field-builder.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.field = field;
4
+ class BaseFieldBuilder {
5
+ constructor() {
6
+ this.field = {};
7
+ }
8
+ key(key) {
9
+ this.field.key = key;
10
+ return this;
11
+ }
12
+ label(label) {
13
+ this.field.label = label;
14
+ return this;
15
+ }
16
+ type(type) {
17
+ this.field.type = type;
18
+ return this;
19
+ }
20
+ placeholder(placeholder) {
21
+ this.field.placeholder = placeholder;
22
+ return this;
23
+ }
24
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
25
+ defaultValue(value) {
26
+ this.field.defaultValue = value;
27
+ return this;
28
+ }
29
+ validation(schema) {
30
+ this.field.validation = schema;
31
+ return this;
32
+ }
33
+ config(config) {
34
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
+ this.field.config = config;
36
+ return this;
37
+ }
38
+ 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');
41
+ }
42
+ return this.field;
43
+ }
44
+ }
45
+ class SelectFieldBuilder extends BaseFieldBuilder {
46
+ options(options) {
47
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
48
+ this.field.options = options;
49
+ return this;
50
+ }
51
+ }
52
+ class CustomFieldBuilder extends BaseFieldBuilder {
53
+ render(renderFn) {
54
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
55
+ this.field.render = renderFn;
56
+ return this;
57
+ }
58
+ }
59
+ class SectionFieldBuilder extends BaseFieldBuilder {
60
+ fields(fields) {
61
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
62
+ this.field.fields = fields;
63
+ return this;
64
+ }
65
+ defaultExpanded(expanded) {
66
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
+ this.field.defaultExpanded = expanded;
68
+ return this;
69
+ }
70
+ }
71
+ function field() {
72
+ return new Proxy(new BaseFieldBuilder(), {
73
+ 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];
82
+ }
83
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
84
+ return target[prop];
85
+ }
86
+ });
87
+ }
@@ -0,0 +1,5 @@
1
+ export declare const i18n: {
2
+ t: (key: string, options?: import("i18next").TOptions) => string;
3
+ lng: string;
4
+ };
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/i18n/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,IAAI;4BAQszB,CAAC;;CADt0B,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.i18n = void 0;
4
+ const akilocale_1 = require("@akinon/akilocale");
5
+ const en_1 = require("./translations/en");
6
+ const tr_1 = require("./translations/tr");
7
+ exports.i18n = akilocale_1.Akilocale.createInstance({
8
+ debug: false,
9
+ fallbackLng: 'en',
10
+ translations: {
11
+ en: en_1.default,
12
+ tr: tr_1.default
13
+ }
14
+ });
@@ -0,0 +1,7 @@
1
+ declare const translations: {
2
+ readonly reset: "Reset";
3
+ readonly submit: "Submit";
4
+ readonly formLabel: "Form";
5
+ };
6
+ export default translations;
7
+ //# sourceMappingURL=en.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"en.d.ts","sourceRoot":"","sources":["../../../../src/i18n/translations/en.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,YAAY;;;;CAIR,CAAC;AAEX,eAAe,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const translations = {
4
+ reset: 'Reset',
5
+ submit: 'Submit',
6
+ formLabel: 'Form'
7
+ };
8
+ exports.default = translations;
@@ -0,0 +1,7 @@
1
+ declare const translations: {
2
+ readonly reset: "Temizle";
3
+ readonly submit: "Gönder";
4
+ readonly formLabel: "Form";
5
+ };
6
+ export default translations;
7
+ //# sourceMappingURL=tr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tr.d.ts","sourceRoot":"","sources":["../../../../src/i18n/translations/tr.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,YAAY;;;;CAIR,CAAC;AAEX,eAAe,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const translations = {
4
+ reset: 'Temizle',
5
+ submit: 'Gönder',
6
+ formLabel: 'Form'
7
+ };
8
+ exports.default = translations;
@@ -1,6 +1,4 @@
1
- export { FormBuilder } from './component';
2
- export { FormBuilderWatch } from './FormBuilderWatch';
3
- export { useFormBuilder } from './hook';
4
- export { transformToFormFields } from './transformers';
1
+ export * from './akiform-builder';
2
+ export { field } from './field-builder';
5
3
  export * from './types';
6
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,cAAc,SAAS,CAAC"}
package/dist/cjs/index.js CHANGED
@@ -14,13 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.transformToFormFields = exports.useFormBuilder = exports.FormBuilderWatch = exports.FormBuilder = void 0;
18
- var component_1 = require("./component");
19
- Object.defineProperty(exports, "FormBuilder", { enumerable: true, get: function () { return component_1.FormBuilder; } });
20
- var FormBuilderWatch_1 = require("./FormBuilderWatch");
21
- Object.defineProperty(exports, "FormBuilderWatch", { enumerable: true, get: function () { return FormBuilderWatch_1.FormBuilderWatch; } });
22
- var hook_1 = require("./hook");
23
- Object.defineProperty(exports, "useFormBuilder", { enumerable: true, get: function () { return hook_1.useFormBuilder; } });
24
- var transformers_1 = require("./transformers");
25
- Object.defineProperty(exports, "transformToFormFields", { enumerable: true, get: function () { return transformers_1.transformToFormFields; } });
17
+ exports.field = void 0;
18
+ __exportStar(require("./akiform-builder"), exports);
19
+ var field_builder_1 = require("./field-builder");
20
+ Object.defineProperty(exports, "field", { enumerable: true, get: function () { return field_builder_1.field; } });
26
21
  __exportStar(require("./types"), exports);