@phpsoftbox/forms 1.0.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.
- package/README.md +15 -0
- package/dist/DynamicFormFields.d.ts +53 -0
- package/dist/DynamicFormFields.js +218 -0
- package/dist/DynamicFormFields.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +37 -0
package/README.md
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# @phpsoftbox/forms
|
|
2
|
+
Компонент для отрисовки форм из компонентов:
|
|
3
|
+
- https://github.com/phpsoftbox/forms
|
|
4
|
+
- https://github.com/phpsoftbox/db-config
|
|
5
|
+
- https://github.com/phpsoftbox/requisites
|
|
6
|
+
|
|
7
|
+
React-утилиты для рендера schema-driven форм поверх `@phpsoftbox/react-softbox`.
|
|
8
|
+
|
|
9
|
+
## Экспорт
|
|
10
|
+
|
|
11
|
+
- `DynamicFormFields`
|
|
12
|
+
- `buildDynamicFormData`
|
|
13
|
+
- `isDynamicFieldRequired`
|
|
14
|
+
- `isDynamicValueFilled`
|
|
15
|
+
- вспомогательные типы/хелперы
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export type DynamicFormFieldOption = {
|
|
2
|
+
label: string;
|
|
3
|
+
value: string | number;
|
|
4
|
+
};
|
|
5
|
+
export type DynamicFormFieldCondition = Record<string, unknown>;
|
|
6
|
+
export type DynamicFormFieldType = 'text' | 'textarea' | 'email' | 'tel' | 'password' | 'file' | 'checkbox' | 'select' | 'radio' | 'number' | 'date' | 'interval' | 'hidden';
|
|
7
|
+
export type DynamicFormValueType = 'string' | 'int' | 'float' | 'bool' | 'array' | 'json' | 'date' | 'datetime';
|
|
8
|
+
export type DynamicFormField = {
|
|
9
|
+
key: string;
|
|
10
|
+
label?: string;
|
|
11
|
+
description?: string;
|
|
12
|
+
required?: boolean;
|
|
13
|
+
field?: DynamicFormFieldType;
|
|
14
|
+
fieldType?: DynamicFormFieldType;
|
|
15
|
+
valueType?: DynamicFormValueType;
|
|
16
|
+
multiple?: boolean;
|
|
17
|
+
searchable?: boolean;
|
|
18
|
+
options?: DynamicFormFieldOption[];
|
|
19
|
+
requiredWhen?: DynamicFormFieldCondition[];
|
|
20
|
+
visibleWhen?: DynamicFormFieldCondition[];
|
|
21
|
+
meta?: Record<string, unknown>;
|
|
22
|
+
};
|
|
23
|
+
export type DynamicFormSchema = {
|
|
24
|
+
id?: string;
|
|
25
|
+
title?: string;
|
|
26
|
+
fields: DynamicFormField[];
|
|
27
|
+
meta?: Record<string, unknown>;
|
|
28
|
+
};
|
|
29
|
+
export type DynamicFormValue = string | number | boolean | null | File | Array<string | number | File>;
|
|
30
|
+
export type DynamicFormData = Record<string, DynamicFormValue>;
|
|
31
|
+
type DynamicFormFieldsProps = {
|
|
32
|
+
schema: DynamicFormSchema;
|
|
33
|
+
data: DynamicFormData;
|
|
34
|
+
errors?: Record<string, unknown>;
|
|
35
|
+
onChange: (key: string, value: DynamicFormValue) => void;
|
|
36
|
+
groupBySection?: boolean;
|
|
37
|
+
sectionLabels?: Record<string, string>;
|
|
38
|
+
sectionClassName?: string;
|
|
39
|
+
sectionTitleClassName?: string;
|
|
40
|
+
fieldClassName?: string;
|
|
41
|
+
labelClassName?: string;
|
|
42
|
+
descriptionClassName?: string;
|
|
43
|
+
};
|
|
44
|
+
export declare const resolveDynamicFieldType: (field: DynamicFormField) => DynamicFormFieldType;
|
|
45
|
+
export declare const resolveDynamicFieldOptions: (field: DynamicFormField) => DynamicFormFieldOption[];
|
|
46
|
+
export declare const resolveDynamicFieldSection: (field: DynamicFormField) => string;
|
|
47
|
+
export declare const isDynamicFieldVisible: (field: DynamicFormField, data: DynamicFormData) => boolean;
|
|
48
|
+
export declare const isDynamicFieldRequired: (field: DynamicFormField, data: DynamicFormData) => boolean;
|
|
49
|
+
export declare const coerceDynamicInitialValue: (field: DynamicFormField, value: unknown) => DynamicFormValue;
|
|
50
|
+
export declare const buildDynamicFormData: (schema: DynamicFormSchema, values: Record<string, unknown>) => DynamicFormData;
|
|
51
|
+
export declare const isDynamicValueFilled: (value: DynamicFormValue | undefined) => boolean;
|
|
52
|
+
export default function DynamicFormFields({ schema, data, errors, onChange, groupBySection, sectionLabels, sectionClassName, sectionTitleClassName, fieldClassName, labelClassName, descriptionClassName, }: DynamicFormFieldsProps): import("react/jsx-runtime").JSX.Element;
|
|
53
|
+
export {};
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Input, Stack, Text } from '@phpsoftbox/react-softbox';
|
|
4
|
+
const normalizeFieldError = (error) => {
|
|
5
|
+
if (typeof error === 'string') {
|
|
6
|
+
return error;
|
|
7
|
+
}
|
|
8
|
+
if (Array.isArray(error)) {
|
|
9
|
+
const first = error.find((item) => typeof item === 'string');
|
|
10
|
+
return typeof first === 'string' ? first : '';
|
|
11
|
+
}
|
|
12
|
+
return '';
|
|
13
|
+
};
|
|
14
|
+
export const resolveDynamicFieldType = (field) => {
|
|
15
|
+
const widget = typeof field.meta?.widget === 'string' ? field.meta.widget : '';
|
|
16
|
+
if (widget === 'file') {
|
|
17
|
+
return 'file';
|
|
18
|
+
}
|
|
19
|
+
return field.fieldType ?? field.field ?? 'text';
|
|
20
|
+
};
|
|
21
|
+
export const resolveDynamicFieldOptions = (field) => {
|
|
22
|
+
if (Array.isArray(field.options)) {
|
|
23
|
+
return field.options;
|
|
24
|
+
}
|
|
25
|
+
const metaOptions = field.meta?.options;
|
|
26
|
+
return Array.isArray(metaOptions) ? metaOptions : [];
|
|
27
|
+
};
|
|
28
|
+
export const resolveDynamicFieldSection = (field) => {
|
|
29
|
+
const section = field.meta?.section;
|
|
30
|
+
return typeof section === 'string' && section !== '' ? section : 'general';
|
|
31
|
+
};
|
|
32
|
+
const normalizeCondition = (condition) => {
|
|
33
|
+
const fieldName = condition.field;
|
|
34
|
+
if (typeof fieldName === 'string' && fieldName !== '') {
|
|
35
|
+
const operator = typeof condition.operator === 'string' && condition.operator !== '' ? condition.operator : '=';
|
|
36
|
+
return [{ field: fieldName, operator, value: condition.value }];
|
|
37
|
+
}
|
|
38
|
+
return Object.entries(condition)
|
|
39
|
+
.filter(([key]) => key !== 'field' && key !== 'operator' && key !== 'value')
|
|
40
|
+
.map(([key, value]) => ({ field: key, operator: '=', value }));
|
|
41
|
+
};
|
|
42
|
+
const matchesCondition = (condition, data) => {
|
|
43
|
+
const entries = normalizeCondition(condition);
|
|
44
|
+
if (entries.length === 0) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
return entries.every(({ field, operator, value }) => {
|
|
48
|
+
const actual = data[field];
|
|
49
|
+
if (operator === '=') {
|
|
50
|
+
return actual === value;
|
|
51
|
+
}
|
|
52
|
+
if (operator === '!=') {
|
|
53
|
+
return actual !== value;
|
|
54
|
+
}
|
|
55
|
+
if (operator === 'in') {
|
|
56
|
+
return Array.isArray(value) ? value.includes(actual) : false;
|
|
57
|
+
}
|
|
58
|
+
if (operator === 'not_in') {
|
|
59
|
+
return Array.isArray(value) ? !value.includes(actual) : false;
|
|
60
|
+
}
|
|
61
|
+
return false;
|
|
62
|
+
});
|
|
63
|
+
};
|
|
64
|
+
const conditionsMatch = (conditions, data) => {
|
|
65
|
+
if (!Array.isArray(conditions) || conditions.length === 0) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
return conditions.every((condition) => matchesCondition(condition, data));
|
|
69
|
+
};
|
|
70
|
+
export const isDynamicFieldVisible = (field, data) => {
|
|
71
|
+
return conditionsMatch(field.visibleWhen, data);
|
|
72
|
+
};
|
|
73
|
+
export const isDynamicFieldRequired = (field, data) => {
|
|
74
|
+
const baseRequired = field.required === true || field.meta?.required === true;
|
|
75
|
+
const requiredWhenMatches = Array.isArray(field.requiredWhen) && field.requiredWhen.length > 0
|
|
76
|
+
? conditionsMatch(field.requiredWhen, data)
|
|
77
|
+
: false;
|
|
78
|
+
return baseRequired || requiredWhenMatches;
|
|
79
|
+
};
|
|
80
|
+
export const coerceDynamicInitialValue = (field, value) => {
|
|
81
|
+
const fieldType = resolveDynamicFieldType(field);
|
|
82
|
+
if (fieldType === 'checkbox' || field.valueType === 'bool') {
|
|
83
|
+
return Boolean(value);
|
|
84
|
+
}
|
|
85
|
+
if (fieldType === 'number' || field.valueType === 'int' || field.valueType === 'float') {
|
|
86
|
+
return value === null || value === undefined ? '' : String(value);
|
|
87
|
+
}
|
|
88
|
+
if (fieldType === 'file') {
|
|
89
|
+
return typeof value === 'string' ? value : null;
|
|
90
|
+
}
|
|
91
|
+
if (fieldType === 'select' && field.multiple) {
|
|
92
|
+
return Array.isArray(value) ? value : [];
|
|
93
|
+
}
|
|
94
|
+
if (fieldType === 'date') {
|
|
95
|
+
return typeof value === 'string' ? value : '';
|
|
96
|
+
}
|
|
97
|
+
return typeof value === 'string' || typeof value === 'number' ? value : '';
|
|
98
|
+
};
|
|
99
|
+
export const buildDynamicFormData = (schema, values) => {
|
|
100
|
+
const data = {};
|
|
101
|
+
schema.fields.forEach((field) => {
|
|
102
|
+
if (typeof field?.key !== 'string' || field.key === '') {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
data[field.key] = coerceDynamicInitialValue(field, values[field.key]);
|
|
106
|
+
});
|
|
107
|
+
return data;
|
|
108
|
+
};
|
|
109
|
+
export const isDynamicValueFilled = (value) => {
|
|
110
|
+
if (value === null || value === undefined) {
|
|
111
|
+
return false;
|
|
112
|
+
}
|
|
113
|
+
if (typeof value === 'boolean') {
|
|
114
|
+
return true;
|
|
115
|
+
}
|
|
116
|
+
if (typeof value === 'number') {
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
if (value instanceof File) {
|
|
120
|
+
return true;
|
|
121
|
+
}
|
|
122
|
+
if (Array.isArray(value)) {
|
|
123
|
+
return value.length > 0;
|
|
124
|
+
}
|
|
125
|
+
return String(value).trim() !== '';
|
|
126
|
+
};
|
|
127
|
+
const defaultSectionLabel = (section) => {
|
|
128
|
+
return section === 'general' ? 'Общие данные' : section;
|
|
129
|
+
};
|
|
130
|
+
export default function DynamicFormFields({ schema, data, errors = {}, onChange, groupBySection = false, sectionLabels = {}, sectionClassName, sectionTitleClassName, fieldClassName, labelClassName, descriptionClassName, }) {
|
|
131
|
+
const visibleFields = React.useMemo(() => {
|
|
132
|
+
return (schema.fields ?? [])
|
|
133
|
+
.filter((field) => typeof field?.key === 'string' && field.key !== '')
|
|
134
|
+
.filter((field) => isDynamicFieldVisible(field, data));
|
|
135
|
+
}, [schema.fields, data]);
|
|
136
|
+
const renderField = (field) => {
|
|
137
|
+
const fieldType = resolveDynamicFieldType(field);
|
|
138
|
+
const required = isDynamicFieldRequired(field, data);
|
|
139
|
+
const label = field.label ?? field.key;
|
|
140
|
+
const description = field.description ?? '';
|
|
141
|
+
const error = normalizeFieldError(errors[field.key]);
|
|
142
|
+
const hasError = error !== '';
|
|
143
|
+
const tooltip = typeof field.meta?.tooltip === 'string' ? field.meta.tooltip : undefined;
|
|
144
|
+
if (fieldType === 'hidden') {
|
|
145
|
+
return _jsx("input", { type: "hidden", name: field.key, value: String(data[field.key] ?? '') }, field.key);
|
|
146
|
+
}
|
|
147
|
+
if (fieldType === 'file') {
|
|
148
|
+
const currentValue = data[field.key];
|
|
149
|
+
const selectedFiles = Array.isArray(currentValue)
|
|
150
|
+
? currentValue.filter((value) => value instanceof File)
|
|
151
|
+
: [];
|
|
152
|
+
const selectedFile = currentValue instanceof File ? currentValue : null;
|
|
153
|
+
const currentPath = typeof currentValue === 'string' ? currentValue : '';
|
|
154
|
+
const accept = typeof field.meta?.accept === 'string' ? field.meta.accept : undefined;
|
|
155
|
+
const requiredForInput = required && currentPath === '' && selectedFile === null && selectedFiles.length === 0;
|
|
156
|
+
return (_jsxs("div", { className: fieldClassName, children: [_jsxs(Input, { children: [_jsx(Input.Label, { required: required, children: label }), _jsx(Input.Field, { name: field.key, type: "file", required: requiredForInput, multiple: field.multiple === true, accept: accept, onChange: (event) => {
|
|
157
|
+
const files = event.target.files;
|
|
158
|
+
if (field.multiple) {
|
|
159
|
+
onChange(field.key, files ? Array.from(files) : []);
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
onChange(field.key, files?.[0] ?? null);
|
|
163
|
+
} }), hasError ? _jsx(Input.ErrorTooltip, { target: "input", content: error, placement: "auto" }) : null] }), selectedFile ? _jsxs(Text, { className: descriptionClassName, children: ["\u0412\u044B\u0431\u0440\u0430\u043D \u0444\u0430\u0439\u043B: ", selectedFile.name] }) : null, !selectedFile && selectedFiles.length > 0 ? (_jsxs(Text, { className: descriptionClassName, children: ["\u0412\u044B\u0431\u0440\u0430\u043D\u043E \u0444\u0430\u0439\u043B\u043E\u0432: ", selectedFiles.length] })) : null, currentPath !== '' ? _jsxs(Text, { className: descriptionClassName, children: ["\u0422\u0435\u043A\u0443\u0449\u0438\u0439 \u0444\u0430\u0439\u043B: ", currentPath] }) : null, description !== '' ? _jsx(Text, { className: descriptionClassName, children: description }) : null] }, field.key));
|
|
164
|
+
}
|
|
165
|
+
if (fieldType === 'checkbox') {
|
|
166
|
+
const widget = typeof field.meta?.widget === 'string' ? field.meta.widget : '';
|
|
167
|
+
return (_jsxs("div", { className: fieldClassName, children: [widget === 'checkbox' ? (_jsx(Input.Checkbox, { name: field.key, label: label, checked: Boolean(data[field.key]), onChange: (event) => onChange(field.key, event.target.checked) })) : (_jsx(Input.Switch, { name: field.key, label: label, checked: Boolean(data[field.key]), hint: tooltip, hintPlacement: "auto", onChange: (event) => onChange(field.key, event.target.checked) })), description !== '' ? _jsx(Text, { className: descriptionClassName, children: description }) : null, hasError ? _jsx(Input.ErrorBag, { children: error }) : null] }, field.key));
|
|
168
|
+
}
|
|
169
|
+
if (fieldType === 'select') {
|
|
170
|
+
const options = resolveDynamicFieldOptions(field);
|
|
171
|
+
if (field.multiple) {
|
|
172
|
+
const selected = Array.isArray(data[field.key]) ? data[field.key] : [];
|
|
173
|
+
return (_jsxs("div", { className: fieldClassName, children: [_jsxs(Input, { children: [_jsx(Input.FloatLabel, { label: label, required: required, hasError: hasError, hint: tooltip, hintPlacement: "auto", children: _jsx(Input.Select, { name: field.key, options: options, value: selected, multiple: true, searchable: Boolean(field.searchable), onChange: (value) => onChange(field.key, value) }) }), hasError ? _jsx(Input.ErrorTooltip, { target: "input", content: error, placement: "auto" }) : null] }), description !== '' ? _jsx(Text, { className: descriptionClassName, children: description }) : null] }, field.key));
|
|
174
|
+
}
|
|
175
|
+
const selected = data[field.key];
|
|
176
|
+
const selectedValue = typeof selected === 'string' || typeof selected === 'number'
|
|
177
|
+
? selected
|
|
178
|
+
: undefined;
|
|
179
|
+
return (_jsxs("div", { className: fieldClassName, children: [_jsxs(Input, { children: [_jsx(Input.FloatLabel, { label: label, required: required, hasError: hasError, hint: tooltip, hintPlacement: "auto", children: _jsx(Input.Select, { name: field.key, options: options, value: selectedValue, searchable: Boolean(field.searchable), onChange: (value) => onChange(field.key, value) }) }), hasError ? _jsx(Input.ErrorTooltip, { target: "input", content: error, placement: "auto" }) : null] }), description !== '' ? _jsx(Text, { className: descriptionClassName, children: description }) : null] }, field.key));
|
|
180
|
+
}
|
|
181
|
+
if (fieldType === 'radio') {
|
|
182
|
+
const options = resolveDynamicFieldOptions(field);
|
|
183
|
+
return (_jsxs("div", { className: fieldClassName, children: [_jsx(Text, { className: labelClassName, children: label }), _jsx(Stack, { gap: "8px", children: options.map((option) => (_jsx(Input.Radio, { name: field.key, label: option.label, checked: data[field.key] === option.value, onChange: () => onChange(field.key, option.value) }, `${field.key}-${option.value}`))) }), description !== '' ? _jsx(Text, { className: descriptionClassName, children: description }) : null, hasError ? _jsx(Input.ErrorBag, { children: error }) : null] }, field.key));
|
|
184
|
+
}
|
|
185
|
+
if (fieldType === 'textarea') {
|
|
186
|
+
return (_jsxs("div", { className: fieldClassName, children: [_jsxs(Input, { children: [_jsx(Input.FloatLabel, { label: label, required: required, hasError: hasError, hint: tooltip, hintPlacement: "auto", children: _jsx(Input.TextArea, { name: field.key, value: String(data[field.key] ?? ''), onChange: (event) => onChange(field.key, event.target.value) }) }), hasError ? _jsx(Input.ErrorTooltip, { target: "input", content: error, placement: "auto" }) : null] }), description !== '' ? _jsx(Text, { className: descriptionClassName, children: description }) : null] }, field.key));
|
|
187
|
+
}
|
|
188
|
+
const inputType = (() => {
|
|
189
|
+
if (fieldType === 'number') {
|
|
190
|
+
return 'number';
|
|
191
|
+
}
|
|
192
|
+
if (fieldType === 'date') {
|
|
193
|
+
return 'date';
|
|
194
|
+
}
|
|
195
|
+
if (fieldType === 'email' || fieldType === 'tel' || fieldType === 'password') {
|
|
196
|
+
return fieldType;
|
|
197
|
+
}
|
|
198
|
+
return 'text';
|
|
199
|
+
})();
|
|
200
|
+
return (_jsxs("div", { className: fieldClassName, children: [_jsxs(Input, { children: [_jsx(Input.FloatLabel, { label: label, required: required, hasError: hasError, hint: tooltip, hintPlacement: "auto", children: _jsx(Input.Field, { name: field.key, type: inputType, required: required, value: String(data[field.key] ?? ''), onChange: (event) => onChange(field.key, event.target.value) }) }), hasError ? _jsx(Input.ErrorTooltip, { target: "input", content: error, placement: "auto" }) : null] }), description !== '' ? _jsx(Text, { className: descriptionClassName, children: description }) : null] }, field.key));
|
|
201
|
+
};
|
|
202
|
+
if (!groupBySection) {
|
|
203
|
+
return _jsx(_Fragment, { children: visibleFields.map(renderField) });
|
|
204
|
+
}
|
|
205
|
+
const grouped = visibleFields.reduce((carry, field) => {
|
|
206
|
+
const section = resolveDynamicFieldSection(field);
|
|
207
|
+
const title = sectionLabels[section] ?? defaultSectionLabel(section);
|
|
208
|
+
const index = carry.findIndex((item) => item.section === section);
|
|
209
|
+
if (index === -1) {
|
|
210
|
+
carry.push({ section, title, fields: [field] });
|
|
211
|
+
return carry;
|
|
212
|
+
}
|
|
213
|
+
carry[index].fields.push(field);
|
|
214
|
+
return carry;
|
|
215
|
+
}, []);
|
|
216
|
+
return (_jsx(_Fragment, { children: grouped.map((group) => (_jsxs("section", { className: sectionClassName, children: [_jsx(Text, { className: sectionTitleClassName, children: group.title }), _jsx(Stack, { gap: "12px", children: group.fields.map(renderField) })] }, group.section))) }));
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=DynamicFormFields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DynamicFormFields.js","sourceRoot":"","sources":["../src/DynamicFormFields.tsx"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { default as DynamicFormFields, resolveDynamicFieldType, resolveDynamicFieldOptions, resolveDynamicFieldSection, isDynamicFieldVisible, isDynamicFieldRequired, coerceDynamicInitialValue, buildDynamicFormData, isDynamicValueFilled, } from './DynamicFormFields';
|
|
2
|
+
export type { DynamicFormFieldOption, DynamicFormFieldCondition, DynamicFormFieldType, DynamicFormValueType, DynamicFormField, DynamicFormSchema, DynamicFormValue, DynamicFormData, } from './DynamicFormFields';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export { default as DynamicFormFields, resolveDynamicFieldType, resolveDynamicFieldOptions, resolveDynamicFieldSection, isDynamicFieldVisible, isDynamicFieldRequired, coerceDynamicInitialValue, buildDynamicFormData, isDynamicValueFilled, } from './DynamicFormFields';
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,IAAI,iBAAiB,EAC5B,uBAAuB,EACvB,0BAA0B,EAC1B,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,qBAAqB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@phpsoftbox/forms",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"README.md"
|
|
12
|
+
],
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"import": "./dist/index.js"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"peerDependencies": {
|
|
20
|
+
"react": "^19.0.0",
|
|
21
|
+
"react-dom": "^19.0.0",
|
|
22
|
+
"@phpsoftbox/react-softbox": "^0.9.0"
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"clean": "rm -rf dist",
|
|
26
|
+
"build": "tsc -p tsconfig.build.json",
|
|
27
|
+
"prepublishOnly": "yarn clean && yarn build"
|
|
28
|
+
},
|
|
29
|
+
"devDependencies": {
|
|
30
|
+
"@phpsoftbox/react-softbox": "^0.9.0",
|
|
31
|
+
"@types/react": "^19.2.0",
|
|
32
|
+
"@types/react-dom": "^19.2.0",
|
|
33
|
+
"react": "^19.2.4",
|
|
34
|
+
"react-dom": "^19.2.4",
|
|
35
|
+
"typescript": "^5.9.3"
|
|
36
|
+
}
|
|
37
|
+
}
|