@k3-universe/react-kit 0.0.2 → 0.0.4

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 (59) hide show
  1. package/dist/kit/builder/form/components/FormBuilder.d.ts +21 -1
  2. package/dist/kit/builder/form/components/FormBuilder.d.ts.map +1 -1
  3. package/dist/kit/builder/form/components/FormBuilderField.d.ts +5 -5
  4. package/dist/kit/builder/form/components/FormBuilderField.d.ts.map +1 -1
  5. package/dist/kit/builder/form/components/fields/ArrayField.d.ts +3 -0
  6. package/dist/kit/builder/form/components/fields/ArrayField.d.ts.map +1 -0
  7. package/dist/kit/builder/form/components/fields/AutocompleteField.d.ts +3 -0
  8. package/dist/kit/builder/form/components/fields/AutocompleteField.d.ts.map +1 -0
  9. package/dist/kit/builder/form/components/fields/CheckboxField.d.ts +3 -0
  10. package/dist/kit/builder/form/components/fields/CheckboxField.d.ts.map +1 -0
  11. package/dist/kit/builder/form/components/fields/DateField.d.ts +3 -0
  12. package/dist/kit/builder/form/components/fields/DateField.d.ts.map +1 -0
  13. package/dist/kit/builder/form/components/fields/FileField.d.ts +3 -0
  14. package/dist/kit/builder/form/components/fields/FileField.d.ts.map +1 -0
  15. package/dist/kit/builder/form/components/fields/NumberField.d.ts +3 -0
  16. package/dist/kit/builder/form/components/fields/NumberField.d.ts.map +1 -0
  17. package/dist/kit/builder/form/components/fields/ObjectField.d.ts +3 -0
  18. package/dist/kit/builder/form/components/fields/ObjectField.d.ts.map +1 -0
  19. package/dist/kit/builder/form/components/fields/RadioField.d.ts +3 -0
  20. package/dist/kit/builder/form/components/fields/RadioField.d.ts.map +1 -0
  21. package/dist/kit/builder/form/components/fields/SelectField.d.ts +3 -0
  22. package/dist/kit/builder/form/components/fields/SelectField.d.ts.map +1 -0
  23. package/dist/kit/builder/form/components/fields/SwitchField.d.ts +3 -0
  24. package/dist/kit/builder/form/components/fields/SwitchField.d.ts.map +1 -0
  25. package/dist/kit/builder/form/components/fields/TextField.d.ts +3 -0
  26. package/dist/kit/builder/form/components/fields/TextField.d.ts.map +1 -0
  27. package/dist/kit/builder/form/components/fields/TextareaField.d.ts +3 -0
  28. package/dist/kit/builder/form/components/fields/TextareaField.d.ts.map +1 -0
  29. package/dist/kit/builder/form/components/fields/index.d.ts +14 -0
  30. package/dist/kit/builder/form/components/fields/index.d.ts.map +1 -0
  31. package/dist/kit/builder/form/components/fields/types.d.ts +14 -0
  32. package/dist/kit/builder/form/components/fields/types.d.ts.map +1 -0
  33. package/dist/kit/builder/form/utils/field-factories.d.ts +1 -0
  34. package/dist/kit/builder/form/utils/field-factories.d.ts.map +1 -1
  35. package/dist/kit/themes/clean-slate.css +1 -1
  36. package/dist/kit/themes/default.css +1 -1
  37. package/dist/kit/themes/minimal-modern.css +1 -1
  38. package/dist/kit/themes/spotify.css +1 -1
  39. package/package.json +1 -1
  40. package/src/kit/builder/form/components/FormBuilder.tsx +24 -1
  41. package/src/kit/builder/form/components/FormBuilderField.tsx +143 -340
  42. package/src/kit/builder/form/components/fields/ArrayField.tsx +222 -0
  43. package/src/kit/builder/form/components/fields/AutocompleteField.tsx +25 -0
  44. package/src/kit/builder/form/components/fields/CheckboxField.tsx +56 -0
  45. package/src/kit/builder/form/components/fields/DateField.tsx +15 -0
  46. package/src/kit/builder/form/components/fields/FileField.tsx +14 -0
  47. package/src/kit/builder/form/components/fields/NumberField.tsx +15 -0
  48. package/src/kit/builder/form/components/fields/ObjectField.tsx +30 -0
  49. package/src/kit/builder/form/components/fields/RadioField.tsx +29 -0
  50. package/src/kit/builder/form/components/fields/SelectField.tsx +31 -0
  51. package/src/kit/builder/form/components/fields/SwitchField.tsx +56 -0
  52. package/src/kit/builder/form/components/fields/TextField.tsx +18 -0
  53. package/src/kit/builder/form/components/fields/TextareaField.tsx +15 -0
  54. package/src/kit/builder/form/components/fields/index.ts +13 -0
  55. package/src/kit/builder/form/components/fields/types.ts +14 -0
  56. package/src/kit/builder/form/utils/field-factories.ts +13 -0
  57. package/src/stories/kit/builder/Form.ArrayLayouts.stories.tsx +153 -0
  58. package/src/stories/kit/builder/Form.Basic.stories.tsx +2 -0
  59. package/src/stories/kit/builder/Form.Simple.stories.tsx +4 -0
@@ -0,0 +1,153 @@
1
+ import type { Meta, StoryObj } from '@storybook/react'
2
+ import { FormBuilder, type FormBuilderProps } from '../../../kit/builder/form/components/FormBuilder'
3
+
4
+ const meta: Meta<typeof FormBuilder> = {
5
+ title: 'Kit/Builder/Form (Array Layouts)',
6
+ component: FormBuilder,
7
+ parameters: {
8
+ controls: { expanded: true },
9
+ backgrounds: { disable: true },
10
+ },
11
+ }
12
+
13
+ export default meta
14
+
15
+ type Story = StoryObj<typeof FormBuilder>
16
+
17
+ export const ArrayCardLayout: Story = {
18
+ name: 'Array - Card layout',
19
+ args: {
20
+ sections: [
21
+ {
22
+ title: 'Card Layout',
23
+ description: 'Array items are displayed as stacked cards',
24
+ layout: 'grid',
25
+ grid: { cols: 1, gap: 'gap-4' },
26
+ fields: [
27
+ {
28
+ name: 'itemsCard',
29
+ type: 'array',
30
+ label: 'Items (card)',
31
+ fields: [
32
+ { name: 'name', label: 'Name', type: 'text', required: true },
33
+ { name: 'qty', label: 'Qty', type: 'number', required: true },
34
+ ],
35
+ },
36
+ ],
37
+ },
38
+ ],
39
+ showActions: true,
40
+ onSubmit: (data: unknown) => console.log('Submit (array-card):', data),
41
+ } satisfies Partial<FormBuilderProps>,
42
+ render: (args) => (
43
+ <div className="max-w-3xl mx-auto p-6">
44
+ <FormBuilder {...(args as FormBuilderProps)} />
45
+ </div>
46
+ ),
47
+ }
48
+
49
+ export const ArrayTableLayout: Story = {
50
+ name: 'Array - Table layout',
51
+ args: {
52
+ sections: [
53
+ {
54
+ title: 'Table Layout',
55
+ description: 'Array items are displayed in a table with configurable colors',
56
+ layout: 'grid',
57
+ grid: { cols: 1, gap: 'gap-4' },
58
+ fields: [
59
+ {
60
+ name: 'itemsTable',
61
+ type: 'array',
62
+ label: 'Items (table)',
63
+ arrayLayout: 'table',
64
+ arrayColors: {
65
+ headerBgClass: 'bg-teal-700',
66
+ headerTextClass: 'text-white',
67
+ rowAltBgClass: 'bg-teal-50',
68
+ },
69
+ fields: [
70
+ { name: 'product', label: 'Product', type: 'text', required: true },
71
+ { name: 'price', label: 'Price', type: 'number', required: true },
72
+ ],
73
+ },
74
+ ],
75
+ },
76
+ ],
77
+ showActions: true,
78
+ onSubmit: (data: unknown) => console.log('Submit (array-table):', data),
79
+ } satisfies Partial<FormBuilderProps>,
80
+ render: (args) => (
81
+ <div className="max-w-4xl mx-auto p-6">
82
+ <FormBuilder {...(args as FormBuilderProps)} />
83
+ </div>
84
+ ),
85
+ }
86
+
87
+ export const ArrayCustomLayout: Story = {
88
+ name: 'Array - Custom renderer',
89
+ args: {
90
+ defaultValues: {
91
+ itemsCustom: [],
92
+ },
93
+ sections: [
94
+ {
95
+ title: 'Custom Layout',
96
+ description: 'Array items with a fully custom renderer',
97
+ layout: 'grid',
98
+ grid: { cols: 1, gap: 'gap-4' },
99
+ fields: [
100
+ {
101
+ name: 'itemsCustom',
102
+ type: 'array',
103
+ label: 'Items (custom)',
104
+ defaultValue: [],
105
+ arrayLayout: 'custom',
106
+ arrayRender: ({ value: _value = [], rows = [], addItem, removeItem, disabled }) => {
107
+ return (
108
+ <div className="space-y-3">
109
+ <div className="flex justify-between items-center">
110
+ <span className="font-medium">Custom Items</span>
111
+ <button
112
+ type="button"
113
+ className="btn btn-primary"
114
+ onClick={() => !disabled && addItem()}
115
+ >
116
+ Add Item
117
+ </button>
118
+ </div>
119
+ <div className="space-y-2">
120
+ <div className="text-xs text-muted-foreground">Rows: {rows.length}</div>
121
+ {Array.isArray(rows) && rows.length > 0 ? (
122
+ rows.map((row: { id: string }, i: number) => (
123
+ <div key={row.id ?? i} className="flex items-center gap-3 border rounded-md p-3">
124
+ <span className="text-sm text-muted-foreground">Row {i + 1}</span>
125
+ <button
126
+ type="button"
127
+ className="ml-auto btn btn-destructive"
128
+ onClick={() => removeItem(i)}
129
+ >
130
+ Remove
131
+ </button>
132
+ </div>
133
+ ))
134
+ ) : (
135
+ <p className="text-sm text-muted-foreground">No items. Click Add Item.</p>
136
+ )}
137
+ </div>
138
+ </div>
139
+ )
140
+ },
141
+ },
142
+ ],
143
+ },
144
+ ],
145
+ showActions: true,
146
+ onSubmit: (data: unknown) => console.log('Submit (array-custom):', data),
147
+ } satisfies Partial<FormBuilderProps>,
148
+ render: (args) => (
149
+ <div className="max-w-3xl mx-auto p-6">
150
+ <FormBuilder {...(args as FormBuilderProps)} />
151
+ </div>
152
+ ),
153
+ }
@@ -29,6 +29,8 @@ export const BasicUsage: Story = {
29
29
  { name: 'lastName', label: 'Last name', type: 'text', required: true },
30
30
  { name: 'email', label: 'Email', type: 'email', required: true },
31
31
  { name: 'newsletter', label: 'Subscribe to newsletter', type: 'checkbox', defaultValue: false, gridCols: 2 },
32
+ { name: 'darkMode', label: 'Enable dark mode', type: 'switch', defaultValue: false, gridCols: 2 },
33
+ { name: 'darkModeStacked', label: 'Enable dark mode (stacked)', type: 'switch', defaultValue: true, labelPlacement: 'stacked', gridCols: 2 },
32
34
  ],
33
35
  },
34
36
  ],
@@ -59,6 +59,10 @@ export const SimpleExample: Story = {
59
59
  defaultValue: false,
60
60
  gridCols: 2,
61
61
  }),
62
+ createField.switch('contactPermission', 'Allow contact by phone', {
63
+ defaultValue: false,
64
+ gridCols: 2,
65
+ }),
62
66
  ]),
63
67
  ];
64
68