@ticatec/uniface-element 0.2.3 → 0.3.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 (178) hide show
  1. package/dist/accordion/README.md +169 -0
  2. package/dist/accordion/README_CN.md +176 -0
  3. package/dist/action-bar/README.md +275 -0
  4. package/dist/action-bar/README_CN.md +285 -0
  5. package/dist/app-layout/README.md +374 -0
  6. package/dist/app-layout/README_CN.md +381 -0
  7. package/dist/app-top-bar/README.md +357 -0
  8. package/dist/app-top-bar/README_CN.md +365 -0
  9. package/dist/attachment-files/AttachmentFilesField.svelte +67 -1
  10. package/dist/attachment-files/AttachmentFilesField.svelte.d.ts +8 -1
  11. package/dist/base-calendar/CalendarBase.svelte +0 -3
  12. package/dist/box/README.md +385 -0
  13. package/dist/box/README_CN.md +393 -0
  14. package/dist/breadcrumbs/README.md +442 -0
  15. package/dist/breadcrumbs/README_CN.md +442 -0
  16. package/dist/button/Button.svelte +27 -7
  17. package/dist/button/Button.svelte.d.ts +3 -1
  18. package/dist/button/IconButton.svelte +26 -6
  19. package/dist/button/IconButton.svelte.d.ts +3 -1
  20. package/dist/button/IconButton_README.md +513 -0
  21. package/dist/button/IconButton_README_CN.md +513 -0
  22. package/dist/button/README.md +428 -0
  23. package/dist/button/README_CN.md +428 -0
  24. package/dist/button/TextButton.svelte +26 -6
  25. package/dist/button/TextButton.svelte.d.ts +3 -1
  26. package/dist/button/TextButton_README.md +571 -0
  27. package/dist/button/TextButton_README_CN.md +571 -0
  28. package/dist/card/README.md +666 -0
  29. package/dist/card/README_CN.md +666 -0
  30. package/dist/cascade-options-select/CascadeOptionSelect.svelte +43 -7
  31. package/dist/cascade-options-select/CascadeOptionSelect.svelte.d.ts +3 -4
  32. package/dist/cascade-options-select/README.md +663 -2
  33. package/dist/cascade-options-select/README_CN.md +664 -0
  34. package/dist/checkbox/CheckBox.svelte +20 -6
  35. package/dist/checkbox/CheckBox.svelte.d.ts +4 -2
  36. package/dist/checkbox/README.md +562 -0
  37. package/dist/checkbox/README_CN.md +727 -0
  38. package/dist/common-editor/NumberInput.svelte +39 -26
  39. package/dist/common-editor/NumberInput.svelte.d.ts +5 -1
  40. package/dist/concise-data-table/ConciseListTable.svelte +133 -36
  41. package/dist/concise-data-table/ConciseListTable.svelte.d.ts +8 -1
  42. package/dist/concise-data-table/DataCell.svelte +5 -6
  43. package/dist/concise-data-table/DataRow.svelte +22 -2
  44. package/dist/concise-data-table/DataRow.svelte.d.ts +1 -0
  45. package/dist/concise-data-table/README.md +606 -0
  46. package/dist/concise-data-table/README_CN.md +611 -0
  47. package/dist/context-menu/ContextMenu.svelte +138 -21
  48. package/dist/context-menu/ContextMenu.svelte.d.ts +5 -0
  49. package/dist/context-menu/ContextMenuItem.d.ts +20 -4
  50. package/dist/context-menu/README.md +551 -0
  51. package/dist/context-menu/README_CN.md +551 -0
  52. package/dist/criteria-field/CriteriaField.svelte +3 -5
  53. package/dist/criteria-field/README.md +532 -0
  54. package/dist/criteria-field/README_CN.md +532 -0
  55. package/dist/data-table/README.md +712 -0
  56. package/dist/data-table/README_CN.md +712 -0
  57. package/dist/date-picker/DatePicker.svelte +44 -7
  58. package/dist/date-picker/DatePicker.svelte.d.ts +3 -4
  59. package/dist/date-picker/DateTimePicker.svelte +32 -8
  60. package/dist/date-picker/DateTimePicker.svelte.d.ts +3 -4
  61. package/dist/date-picker/README.md +326 -0
  62. package/dist/date-picker/README_CN.md +316 -0
  63. package/dist/date-picker/ScrollBar.svelte +18 -8
  64. package/dist/date-picker/ScrollBar.svelte.d.ts +1 -1
  65. package/dist/date-picker/TimePanel.svelte +5 -5
  66. package/dist/date-picker/TimePanel.svelte.d.ts +1 -1
  67. package/dist/date-range/README.md +374 -0
  68. package/dist/date-range/README_CN.md +374 -0
  69. package/dist/dialog/DialogBoard.svelte +1 -1
  70. package/dist/dialog/README.md +596 -0
  71. package/dist/dialog/README_CN.md +596 -0
  72. package/dist/drawer/README.md +679 -1
  73. package/dist/drawer/README_CN.md +679 -0
  74. package/dist/group-box/group-check-box/GroupCheckBox.svelte +62 -5
  75. package/dist/group-box/group-check-box/GroupCheckBox.svelte.d.ts +7 -2
  76. package/dist/group-box/group-check-box/README.md +749 -0
  77. package/dist/group-box/group-check-box/README_CN.md +750 -0
  78. package/dist/group-box/group-radio-box/GroupRadioBox.svelte +69 -4
  79. package/dist/group-box/group-radio-box/GroupRadioBox.svelte.d.ts +8 -2
  80. package/dist/group-box/group-radio-box/README.md +920 -0
  81. package/dist/group-box/group-radio-box/README_CN.md +920 -0
  82. package/dist/image-files/README.md +1346 -0
  83. package/dist/image-files/README_CN.md +1346 -0
  84. package/dist/input-options-select/InputOptionsSelect.svelte +161 -65
  85. package/dist/input-options-select/InputOptionsSelect.svelte.d.ts +4 -1
  86. package/dist/lib/forwardAllEvents.d.ts +3 -0
  87. package/dist/lib/forwardAllEvents.js +24 -0
  88. package/dist/list-box/README.md +579 -0
  89. package/dist/list-box/README_CN.md +682 -0
  90. package/dist/lookup-editor/LookupEditor.svelte +15 -3
  91. package/dist/lookup-editor/LookupEditor.svelte.d.ts +3 -4
  92. package/dist/lookup-editor/README.md +684 -0
  93. package/dist/lookup-editor/README_CN.md +684 -0
  94. package/dist/memo-editor/MemoEditor.svelte +77 -27
  95. package/dist/memo-editor/MemoEditor.svelte.d.ts +6 -3
  96. package/dist/memo-editor/README.md +819 -0
  97. package/dist/memo-editor/README_CN.md +819 -0
  98. package/dist/message-box/README.md +398 -0
  99. package/dist/message-box/README_CN.md +398 -0
  100. package/dist/number-editor/NumberEditor.svelte +2 -2
  101. package/dist/number-editor/NumberEditor.svelte.d.ts +1 -1
  102. package/dist/number-editor/README.md +353 -22
  103. package/dist/number-editor/README_CN.md +357 -0
  104. package/dist/number-range/README.md +443 -0
  105. package/dist/number-range/README_CN.md +443 -0
  106. package/dist/options-multi-select/OptionsMultiSelect.svelte +87 -12
  107. package/dist/options-multi-select/OptionsMultiSelect.svelte.d.ts +3 -1
  108. package/dist/options-multi-select/README.md +480 -0
  109. package/dist/options-multi-select/README_CN.md +480 -0
  110. package/dist/options-select/OptionsSelect.svelte +36 -5
  111. package/dist/options-select/OptionsSelect.svelte.d.ts +3 -4
  112. package/dist/options-select/README.md +632 -0
  113. package/dist/options-select/README_CN.md +632 -0
  114. package/dist/page/README.md +605 -0
  115. package/dist/page/README_CN.md +605 -0
  116. package/dist/pagination/README.md +946 -0
  117. package/dist/pagination/README_CN.md +946 -0
  118. package/dist/pagination-panel/README.md +1075 -0
  119. package/dist/pagination-panel/README_CN.md +1075 -0
  120. package/dist/popup-hint/README.md +841 -0
  121. package/dist/popup-hint/README_CN.md +840 -0
  122. package/dist/progress-bar/README.md +242 -0
  123. package/dist/progress-bar/README_CN.md +242 -0
  124. package/dist/progress-step-bar/README.md +316 -0
  125. package/dist/progress-step-bar/README_CN.md +316 -0
  126. package/dist/prompts-text-editor/PromptsTextEditor.svelte +6 -3
  127. package/dist/prompts-text-editor/PromptsTextEditor.svelte.d.ts +3 -1
  128. package/dist/prompts-text-editor/README.md +329 -0
  129. package/dist/prompts-text-editor/README_CN.md +329 -0
  130. package/dist/property-editor/README.md +969 -0
  131. package/dist/property-editor/README_CN.md +969 -0
  132. package/dist/radio-button/README.md +372 -0
  133. package/dist/radio-button/README_CN.md +372 -0
  134. package/dist/radio-button/RadioButton.svelte +32 -3
  135. package/dist/radio-button/RadioButton.svelte.d.ts +12 -1
  136. package/dist/search-box/README.md +425 -0
  137. package/dist/search-box/README_CN.md +424 -0
  138. package/dist/search-box/SearchBox.svelte +22 -6
  139. package/dist/search-box/SearchBox.svelte.d.ts +4 -1
  140. package/dist/tabs/README.md +919 -0
  141. package/dist/tabs/README_CN.md +920 -0
  142. package/dist/tag/README.md +922 -0
  143. package/dist/tag/README_CN.md +922 -0
  144. package/dist/text-editor/PasswordEditor.svelte +17 -2
  145. package/dist/text-editor/PasswordEditor.svelte.d.ts +3 -3
  146. package/dist/text-editor/PasswordEditor_README.md +551 -0
  147. package/dist/text-editor/PasswordEditor_README_CN.md +551 -0
  148. package/dist/text-editor/README.md +466 -0
  149. package/dist/text-editor/README_CN.md +466 -0
  150. package/dist/text-editor/TextEditor.svelte +51 -19
  151. package/dist/text-editor/TextEditor.svelte.d.ts +0 -1
  152. package/dist/ticatec-uniface-web.css +1 -0
  153. package/dist/time-editor/README.md +498 -24
  154. package/dist/time-editor/README_CN.md +498 -0
  155. package/dist/time-editor/TimeEditor.svelte +7 -3
  156. package/dist/time-editor/TimeEditor.svelte.d.ts +3 -1
  157. package/dist/toast/README.md +667 -0
  158. package/dist/toast/README_CN.md +667 -0
  159. package/dist/transfer/README.md +795 -0
  160. package/dist/transfer/Transfer.svelte +6 -4
  161. package/dist/transfer/Transfer.svelte.d.ts +3 -1
  162. package/dist/tree-view/README.md +761 -0
  163. package/dist/tree-view/README_CN.md +761 -0
  164. package/dist/tree-view/TreeView.svelte +5 -3
  165. package/dist/tree-view/TreeView.svelte.d.ts +3 -1
  166. package/dist/unit-number-editor/README.md +546 -20
  167. package/dist/unit-number-editor/README_CN.md +525 -0
  168. package/dist/unit-number-editor/UnitNumberEditor.svelte +62 -8
  169. package/dist/unit-number-editor/UnitNumberEditor.svelte.d.ts +5 -1
  170. package/docs/form-field/cn/README_CN.md +364 -0
  171. package/docs/form-field/en/README.md +364 -0
  172. package/docs/form-panel/flex-form/cn/README_CN.md +586 -0
  173. package/docs/form-panel/flex-form/en/README.md +586 -0
  174. package/docs/form-panel/flex-row-form/cn/README_CN.md +787 -0
  175. package/docs/form-panel/flex-row-form/en/README.md +787 -0
  176. package/docs/form-panel/grid-form/en/README.md +744 -0
  177. package/package.json +1 -1
  178. package/dist/drawer/README-CN.md +0 -1
@@ -0,0 +1,586 @@
1
+ # FlexForm
2
+
3
+ A flexible grid-based form layout system that allows you to create responsive forms with automatic row wrapping and column spanning.
4
+
5
+ ## Features
6
+
7
+ - **Grid-Based Layout**: 12-column grid system for flexible form layouts
8
+ - **Responsive Design**: Automatic wrapping and responsive behavior
9
+ - **Column Spanning**: Cells can span multiple columns (1-12)
10
+ - **Layout Modes**: Supports both vertical and horizontal field layouts
11
+ - **Form Field Integration**: Built-in FormField integration for labels and validation
12
+ - **Empty Cell Support**: Placeholder cells for layout alignment
13
+ - **Row Breaking**: Manual row breaks for precise layout control
14
+
15
+ ## Installation
16
+
17
+ ```bash
18
+ npm install @ticatec/uniface-element
19
+ ```
20
+
21
+ ## Usage
22
+
23
+ ### Basic Usage
24
+
25
+ ```svelte
26
+ <script>
27
+ import FlexForm, { CellField } from '@ticatec/uniface-element/flex-form';
28
+ import TextEditor from '@ticatec/uniface-element/text-editor';
29
+
30
+ let formData = {};
31
+ </script>
32
+
33
+ <FlexForm>
34
+ <CellField span={6} label="First Name" required>
35
+ <TextEditor bind:value={formData.firstName} />
36
+ </CellField>
37
+
38
+ <CellField span={6} label="Last Name" required>
39
+ <TextEditor bind:value={formData.lastName} />
40
+ </CellField>
41
+
42
+ <CellField span={12} label="Email Address">
43
+ <TextEditor bind:value={formData.email} />
44
+ </CellField>
45
+ </FlexForm>
46
+ ```
47
+
48
+ ### Complete Form Example
49
+
50
+ ```svelte
51
+ <script>
52
+ import FlexForm, { CellField, EmptyCell, RowBreak } from '@ticatec/uniface-element/flex-form';
53
+ import TextEditor from '@ticatec/uniface-element/text-editor';
54
+ import DatePicker from '@ticatec/uniface-element/date-picker';
55
+ import OptionsSelect from '@ticatec/uniface-element/options-select';
56
+ import MemoEditor from '@ticatec/uniface-element/memo-editor';
57
+
58
+ let formData = {};
59
+ let errors = {};
60
+
61
+ const genderOptions = [
62
+ { code: 'F', text: 'Female' },
63
+ { code: 'M', text: 'Male' }
64
+ ];
65
+
66
+ const countries = [
67
+ { code: 'AU', text: 'Australia' },
68
+ { code: 'NZ', text: 'New Zealand' },
69
+ { code: 'US', text: 'United States' }
70
+ ];
71
+ </script>
72
+
73
+ <FlexForm style="max-width: 800px; margin: 0 auto;">
74
+ <CellField span={4} label="Full Name" required error={errors.name}>
75
+ <TextEditor
76
+ bind:value={formData.name}
77
+ variant="filled"
78
+ placeholder="Enter full name"
79
+ />
80
+ </CellField>
81
+
82
+ <CellField span={4} label="Date of Birth" required error={errors.dob}>
83
+ <DatePicker
84
+ bind:value={formData.dob}
85
+ variant="filled"
86
+ max={new Date()}
87
+ />
88
+ </CellField>
89
+
90
+ <CellField span={4} label="Gender" required error={errors.gender}>
91
+ <OptionsSelect
92
+ bind:value={formData.gender}
93
+ variant="filled"
94
+ options={genderOptions}
95
+ />
96
+ </CellField>
97
+
98
+ <CellField span={6} label="Nationality" error={errors.nationality}>
99
+ <OptionsSelect
100
+ bind:value={formData.nationality}
101
+ variant="filled"
102
+ options={countries}
103
+ />
104
+ </CellField>
105
+
106
+ <EmptyCell span={6} />
107
+
108
+ <CellField span={12} label="Additional Notes" error={errors.notes}>
109
+ <MemoEditor
110
+ bind:value={formData.notes}
111
+ variant="filled"
112
+ input$rows={4}
113
+ input$maxLength={300}
114
+ showIndicator
115
+ />
116
+ </CellField>
117
+ </FlexForm>
118
+ ```
119
+
120
+ ### Horizontal Layout
121
+
122
+ ```svelte
123
+ <FlexForm fieldLayout="horizontal">
124
+ <CellField span={6} label="Start Date">
125
+ <DatePicker bind:value={startDate} variant="filled" />
126
+ </CellField>
127
+
128
+ <CellField span={6} label="End Date">
129
+ <DatePicker bind:value={endDate} variant="filled" />
130
+ </CellField>
131
+ </FlexForm>
132
+ ```
133
+
134
+ ## API Reference
135
+
136
+ ### FlexForm
137
+
138
+ Main container component for the flexible form layout.
139
+
140
+ #### Props
141
+
142
+ | Prop | Type | Default | Description |
143
+ |------|------|---------|-------------|
144
+ | `style` | `string` | `''` | Custom CSS styles for the form container |
145
+ | `fieldLayout` | `'vertical' \| 'horizontal'` | `'vertical'` | Layout mode for form fields |
146
+
147
+ #### Slots
148
+
149
+ | Slot | Description |
150
+ |------|-------------|
151
+ | default | Form content including CellField, EmptyCell, and RowBreak components |
152
+
153
+ ### CellField
154
+
155
+ A form field component that spans specified columns in the grid.
156
+
157
+ #### Props
158
+
159
+ | Prop | Type | Default | Description |
160
+ |------|------|---------|-------------|
161
+ | `span` | `number` | `1` | Number of columns to span (1-12) |
162
+ | `label` | `string` | `"Label:"` | Label text for the form field |
163
+ | `style` | `string` | `''` | Custom CSS styles for the field |
164
+ | `label$style` | `string` | `''` | Custom CSS styles for the label |
165
+ | `required` | `boolean` | `false` | Whether the field is required |
166
+ | `error` | `string \| null` | `null` | Error message to display |
167
+ | `labelSuffix` | `string` | `':'` | Text to append to the label |
168
+
169
+ #### Slots
170
+
171
+ | Slot | Description |
172
+ |------|-------------|
173
+ | default | Form control content (input, select, etc.) |
174
+
175
+ ### EmptyCell
176
+
177
+ A placeholder cell for layout spacing and alignment.
178
+
179
+ #### Props
180
+
181
+ | Prop | Type | Default | Description |
182
+ |------|------|---------|-------------|
183
+ | `span` | `number` | `1` | Number of columns to span (1-12) |
184
+
185
+ ### RowBreak
186
+
187
+ Forces a new row in the form layout.
188
+
189
+ ## Grid System
190
+
191
+ The FlexForm uses a 12-column grid system where each CellField can span 1-12 columns:
192
+
193
+ - **span={1}**: 8.33% width (1/12)
194
+ - **span={2}**: 16.67% width (2/12)
195
+ - **span={3}**: 25% width (3/12)
196
+ - **span={4}**: 33.33% width (4/12)
197
+ - **span={6}**: 50% width (6/12)
198
+ - **span={8}**: 66.67% width (8/12)
199
+ - **span={12}**: 100% width (12/12)
200
+
201
+ ## Layout Examples
202
+
203
+ ### Three Column Layout
204
+
205
+ ```svelte
206
+ <FlexForm>
207
+ <CellField span={4} label="Field 1">
208
+ <TextEditor bind:value={field1} />
209
+ </CellField>
210
+
211
+ <CellField span={4} label="Field 2">
212
+ <TextEditor bind:value={field2} />
213
+ </CellField>
214
+
215
+ <CellField span={4} label="Field 3">
216
+ <TextEditor bind:value={field3} />
217
+ </CellField>
218
+ </FlexForm>
219
+ ```
220
+
221
+ ### Mixed Width Layout
222
+
223
+ ```svelte
224
+ <FlexForm>
225
+ <CellField span={8} label="Primary Field">
226
+ <TextEditor bind:value={primary} />
227
+ </CellField>
228
+
229
+ <CellField span={4} label="Secondary">
230
+ <TextEditor bind:value={secondary} />
231
+ </CellField>
232
+
233
+ <CellField span={3} label="Small">
234
+ <TextEditor bind:value={small1} />
235
+ </CellField>
236
+
237
+ <CellField span={3} label="Small">
238
+ <TextEditor bind:value={small2} />
239
+ </CellField>
240
+
241
+ <CellField span={6} label="Medium">
242
+ <TextEditor bind:value={medium} />
243
+ </CellField>
244
+ </FlexForm>
245
+ ```
246
+
247
+ ### Layout with Empty Cells
248
+
249
+ ```svelte
250
+ <FlexForm>
251
+ <CellField span={4} label="Left Field">
252
+ <TextEditor bind:value={left} />
253
+ </CellField>
254
+
255
+ <EmptyCell span={4} />
256
+
257
+ <CellField span={4} label="Right Field">
258
+ <TextEditor bind:value={right} />
259
+ </CellField>
260
+ </FlexForm>
261
+ ```
262
+
263
+ ### Manual Row Breaks
264
+
265
+ ```svelte
266
+ <FlexForm>
267
+ <CellField span={6} label="Field 1">
268
+ <TextEditor bind:value={field1} />
269
+ </CellField>
270
+
271
+ <CellField span={4} label="Field 2">
272
+ <TextEditor bind:value={field2} />
273
+ </CellField>
274
+
275
+ <RowBreak />
276
+
277
+ <CellField span={8} label="New Row Field">
278
+ <TextEditor bind:value={field3} />
279
+ </CellField>
280
+ </FlexForm>
281
+ ```
282
+
283
+ ## Responsive Design
284
+
285
+ The FlexForm automatically adapts to different screen sizes. You can enhance responsiveness with custom CSS:
286
+
287
+ ```svelte
288
+ <FlexForm style="max-width: 1200px; margin: 0 auto;">
289
+ <CellField span={6} label="Responsive Field">
290
+ <TextEditor bind:value={value} />
291
+ </CellField>
292
+ </FlexForm>
293
+
294
+ <style>
295
+ @media (max-width: 768px) {
296
+ :global(.flex-form .form-cell) {
297
+ width: 100% !important;
298
+ }
299
+ }
300
+ </style>
301
+ ```
302
+
303
+ ## Validation and Error Handling
304
+
305
+ ```svelte
306
+ <script>
307
+ let formData = {
308
+ name: '',
309
+ email: '',
310
+ phone: ''
311
+ };
312
+
313
+ let errors = {};
314
+
315
+ function validateForm() {
316
+ errors = {};
317
+
318
+ if (!formData.name) {
319
+ errors.name = 'Name is required';
320
+ }
321
+
322
+ if (!formData.email) {
323
+ errors.email = 'Email is required';
324
+ } else if (!/\S+@\S+\.\S+/.test(formData.email)) {
325
+ errors.email = 'Please enter a valid email address';
326
+ }
327
+
328
+ if (!formData.phone) {
329
+ errors.phone = 'Phone number is required';
330
+ }
331
+
332
+ return Object.keys(errors).length === 0;
333
+ }
334
+
335
+ function handleSubmit() {
336
+ if (validateForm()) {
337
+ console.log('Form submitted:', formData);
338
+ }
339
+ }
340
+ </script>
341
+
342
+ <FlexForm>
343
+ <CellField span={12} label="Full Name" required error={errors.name}>
344
+ <TextEditor
345
+ bind:value={formData.name}
346
+ variant="filled"
347
+ placeholder="Enter your full name"
348
+ />
349
+ </CellField>
350
+
351
+ <CellField span={6} label="Email Address" required error={errors.email}>
352
+ <TextEditor
353
+ bind:value={formData.email}
354
+ variant="filled"
355
+ placeholder="Enter email address"
356
+ />
357
+ </CellField>
358
+
359
+ <CellField span={6} label="Phone Number" required error={errors.phone}>
360
+ <TextEditor
361
+ bind:value={formData.phone}
362
+ variant="filled"
363
+ placeholder="Enter phone number"
364
+ />
365
+ </CellField>
366
+
367
+ <CellField span={12}>
368
+ <button type="button" on:click={handleSubmit}>
369
+ Submit Form
370
+ </button>
371
+ </CellField>
372
+ </FlexForm>
373
+ ```
374
+
375
+ ## Styling
376
+
377
+ ### Custom Form Styling
378
+
379
+ ```svelte
380
+ <FlexForm
381
+ style="
382
+ border: 1px solid #e1e5e9;
383
+ border-radius: 8px;
384
+ padding: 24px;
385
+ background: #fafbfc;
386
+ "
387
+ >
388
+ <CellField
389
+ span={6}
390
+ label="Styled Field"
391
+ label$style="color: #2563eb; font-weight: 600;"
392
+ >
393
+ <TextEditor bind:value={value} variant="filled" />
394
+ </CellField>
395
+ </FlexForm>
396
+ ```
397
+
398
+ ### CSS Classes
399
+
400
+ ```css
401
+ .custom-flex-form {
402
+ max-width: 800px;
403
+ margin: 2rem auto;
404
+ padding: 2rem;
405
+ border: 1px solid #e2e8f0;
406
+ border-radius: 0.5rem;
407
+ background: white;
408
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
409
+ }
410
+
411
+ .custom-flex-form .form-cell {
412
+ margin-bottom: 1rem;
413
+ }
414
+ ```
415
+
416
+ ## Best Practices
417
+
418
+ ### 1. Consistent Spanning
419
+
420
+ Use consistent column spans for similar field types:
421
+
422
+ ```svelte
423
+ <FlexForm>
424
+ <!-- Personal Information -->
425
+ <CellField span={6} label="First Name" required>
426
+ <TextEditor bind:value={firstName} />
427
+ </CellField>
428
+
429
+ <CellField span={6} label="Last Name" required>
430
+ <TextEditor bind:value={lastName} />
431
+ </CellField>
432
+
433
+ <!-- Contact Information -->
434
+ <CellField span={6} label="Email" required>
435
+ <TextEditor bind:value={email} />
436
+ </CellField>
437
+
438
+ <CellField span={6} label="Phone">
439
+ <TextEditor bind:value={phone} />
440
+ </CellField>
441
+ </FlexForm>
442
+ ```
443
+
444
+ ### 2. Logical Grouping
445
+
446
+ Group related fields together and use full-width fields for important data:
447
+
448
+ ```svelte
449
+ <FlexForm>
450
+ <!-- Full-width for primary identifier -->
451
+ <CellField span={12} label="Company Name" required>
452
+ <TextEditor bind:value={companyName} />
453
+ </CellField>
454
+
455
+ <!-- Address fields in smaller columns -->
456
+ <CellField span={8} label="Street Address">
457
+ <TextEditor bind:value={address} />
458
+ </CellField>
459
+
460
+ <CellField span={4} label="Postal Code">
461
+ <TextEditor bind:value={postalCode} />
462
+ </CellField>
463
+ </FlexForm>
464
+ ```
465
+
466
+ ### 3. Responsive Considerations
467
+
468
+ Consider how your layout will appear on mobile devices:
469
+
470
+ ```svelte
471
+ <FlexForm class="responsive-form">
472
+ <CellField span={4} label="Field 1">
473
+ <TextEditor bind:value={field1} />
474
+ </CellField>
475
+
476
+ <CellField span={4} label="Field 2">
477
+ <TextEditor bind:value={field2} />
478
+ </CellField>
479
+
480
+ <CellField span={4} label="Field 3">
481
+ <TextEditor bind:value={field3} />
482
+ </CellField>
483
+ </FlexForm>
484
+
485
+ <style>
486
+ @media (max-width: 768px) {
487
+ :global(.responsive-form .form-cell) {
488
+ width: 100% !important;
489
+ }
490
+ }
491
+ </style>
492
+ ```
493
+
494
+ ### 4. Error State Management
495
+
496
+ Maintain consistent error handling across all fields:
497
+
498
+ ```svelte
499
+ <script>
500
+ function validateField(field, value) {
501
+ if (!value || value.trim() === '') {
502
+ return `${field} is required`;
503
+ }
504
+ return null;
505
+ }
506
+
507
+ $: errors = {
508
+ name: validateField('Name', formData.name),
509
+ email: validateField('Email', formData.email)
510
+ };
511
+ </script>
512
+ ```
513
+
514
+ ## Integration with Other Components
515
+
516
+ ### With DatePicker
517
+
518
+ ```svelte
519
+ <FlexForm>
520
+ <CellField span={4} label="Start Date" required>
521
+ <DatePicker
522
+ bind:value={startDate}
523
+ variant="filled"
524
+ max={endDate}
525
+ />
526
+ </CellField>
527
+
528
+ <CellField span={4} label="End Date" required>
529
+ <DatePicker
530
+ bind:value={endDate}
531
+ variant="filled"
532
+ min={startDate}
533
+ />
534
+ </CellField>
535
+ </FlexForm>
536
+ ```
537
+
538
+ ### With OptionsSelect
539
+
540
+ ```svelte
541
+ <FlexForm>
542
+ <CellField span={6} label="Country" required>
543
+ <OptionsSelect
544
+ bind:value={country}
545
+ variant="filled"
546
+ options={countryOptions}
547
+ placeholder="Select a country"
548
+ />
549
+ </CellField>
550
+
551
+ <CellField span={6} label="State/Province">
552
+ <OptionsSelect
553
+ bind:value={state}
554
+ variant="filled"
555
+ options={stateOptions}
556
+ disabled={!country}
557
+ />
558
+ </CellField>
559
+ </FlexForm>
560
+ ```
561
+
562
+ ## Accessibility Features
563
+
564
+ - **Semantic Structure**: Proper form field labeling and association
565
+ - **Keyboard Navigation**: Standard form navigation patterns
566
+ - **Screen Reader Support**: Proper ARIA attributes and roles
567
+ - **Error Announcements**: Clear error message association
568
+ - **Focus Management**: Logical tab order through fields
569
+
570
+ ## Browser Support
571
+
572
+ - **Modern Browsers**: Chrome, Firefox, Safari, Edge (latest versions)
573
+ - **Mobile Browsers**: iOS Safari, Chrome Mobile, Firefox Mobile
574
+ - **CSS Flexbox**: Required for layout functionality
575
+
576
+ ## Related Components
577
+
578
+ - **FormField**: Base form field component
579
+ - **TextEditor**: Single-line text input
580
+ - **MemoEditor**: Multi-line text area
581
+ - **DatePicker**: Date selection component
582
+ - **OptionsSelect**: Dropdown selection component
583
+
584
+ ## License
585
+
586
+ MIT License - see LICENSE file for details.