@tailor-platform/app-shell 1.13.0 → 1.14.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 +1 -1
- package/dist/app-shell.d.ts +223 -120
- package/dist/app-shell.js +2102 -2065
- package/dist/{appshell-CSQWUk6q.js → appshell-CtS8Y3LW.js} +4 -4
- package/dist/style-entry.d.ts +110 -110
- package/dist/testing.d.ts +110 -110
- package/dist/testing.js +1 -1
- package/dist/vite-plugin.d.ts +117 -111
- package/dist/vite-plugin.js +1 -1
- package/package.json +3 -3
- package/skills/app-shell-patterns/SKILL.md +7 -0
- package/skills/app-shell-patterns/references/fundamental/components.md +94 -4
- package/skills/app-shell-patterns/references/fundamental/graphql.md +1 -1
- package/skills/app-shell-patterns/references/patterns/form-modal.md +84 -30
- package/skills/app-shell-patterns/references/patterns/form-sectioned.md +136 -64
- package/skills/app-shell-patterns/references/patterns/form-single-page.md +57 -25
- package/skills/app-shell-patterns/references/patterns/form-wizard.md +157 -69
package/dist/vite-plugin.d.ts
CHANGED
|
@@ -1,156 +1,177 @@
|
|
|
1
|
-
import { appShellRoutes } from '@tailor-platform/app-shell
|
|
1
|
+
import { appShellRoutes } from '@tailor-platform/vite-plugin-app-shell';
|
|
2
|
+
import { AppShellRoutesPluginOptions } from '@tailor-platform/vite-plugin-app-shell';
|
|
3
|
+
import { TypedRoutesOptions } from '@tailor-platform/vite-plugin-app-shell';
|
|
2
4
|
|
|
3
5
|
export { appShellRoutes }
|
|
4
6
|
|
|
7
|
+
export { AppShellRoutesPluginOptions }
|
|
8
|
+
|
|
9
|
+
export { TypedRoutesOptions }
|
|
10
|
+
|
|
5
11
|
export { }
|
|
6
12
|
|
|
7
13
|
|
|
8
|
-
declare namespace
|
|
14
|
+
declare namespace AutocompleteStandalone {
|
|
9
15
|
var displayName: string;
|
|
10
16
|
}
|
|
11
17
|
|
|
12
18
|
|
|
13
|
-
declare namespace
|
|
19
|
+
declare namespace AutocompleteAsyncStandalone {
|
|
14
20
|
var displayName: string;
|
|
15
21
|
}
|
|
16
22
|
|
|
17
23
|
|
|
18
|
-
declare namespace
|
|
24
|
+
declare namespace AutocompleteRoot {
|
|
19
25
|
var displayName: string;
|
|
20
26
|
}
|
|
21
27
|
|
|
22
28
|
|
|
23
|
-
declare namespace
|
|
29
|
+
declare namespace AutocompleteValue {
|
|
24
30
|
var displayName: string;
|
|
25
31
|
}
|
|
26
32
|
|
|
27
33
|
|
|
28
|
-
declare namespace
|
|
34
|
+
declare namespace AutocompleteInput {
|
|
29
35
|
var displayName: string;
|
|
30
36
|
}
|
|
31
37
|
|
|
32
38
|
|
|
33
|
-
declare namespace
|
|
39
|
+
declare namespace AutocompleteTrigger {
|
|
34
40
|
var displayName: string;
|
|
35
41
|
}
|
|
36
42
|
|
|
37
43
|
|
|
38
|
-
declare namespace
|
|
44
|
+
declare namespace AutocompleteInputGroup {
|
|
39
45
|
var displayName: string;
|
|
40
46
|
}
|
|
41
47
|
|
|
42
48
|
|
|
43
|
-
declare namespace
|
|
49
|
+
declare namespace AutocompleteContent {
|
|
44
50
|
var displayName: string;
|
|
45
51
|
}
|
|
46
52
|
|
|
47
53
|
|
|
48
|
-
declare namespace
|
|
54
|
+
declare namespace AutocompleteList {
|
|
49
55
|
var displayName: string;
|
|
50
56
|
}
|
|
51
57
|
|
|
52
58
|
|
|
53
|
-
declare namespace
|
|
59
|
+
declare namespace AutocompleteItem {
|
|
54
60
|
var displayName: string;
|
|
55
61
|
}
|
|
56
62
|
|
|
57
63
|
|
|
58
|
-
declare namespace
|
|
64
|
+
declare namespace AutocompleteEmpty {
|
|
59
65
|
var displayName: string;
|
|
60
66
|
}
|
|
61
67
|
|
|
62
68
|
|
|
63
|
-
declare namespace
|
|
69
|
+
declare namespace AutocompleteClear {
|
|
64
70
|
var displayName: string;
|
|
65
71
|
}
|
|
66
72
|
|
|
67
73
|
|
|
68
|
-
declare namespace
|
|
74
|
+
declare namespace AutocompleteGroup {
|
|
69
75
|
var displayName: string;
|
|
70
76
|
}
|
|
71
77
|
|
|
72
78
|
|
|
73
|
-
declare namespace
|
|
79
|
+
declare namespace AutocompleteGroupLabel {
|
|
74
80
|
var displayName: string;
|
|
75
81
|
}
|
|
76
82
|
|
|
77
83
|
|
|
78
|
-
declare namespace
|
|
84
|
+
declare namespace AutocompleteCollection {
|
|
79
85
|
var displayName: string;
|
|
80
86
|
}
|
|
81
87
|
|
|
82
88
|
|
|
83
|
-
declare namespace
|
|
89
|
+
declare namespace AutocompleteStatus {
|
|
84
90
|
var displayName: string;
|
|
85
91
|
}
|
|
86
92
|
|
|
87
93
|
|
|
88
|
-
declare namespace
|
|
94
|
+
declare namespace Root {
|
|
89
95
|
var displayName: string;
|
|
90
96
|
}
|
|
91
97
|
|
|
92
98
|
|
|
93
|
-
declare namespace
|
|
99
|
+
declare namespace Viewport {
|
|
94
100
|
var displayName: string;
|
|
95
101
|
}
|
|
96
102
|
|
|
97
103
|
|
|
98
|
-
declare namespace
|
|
104
|
+
declare namespace Row {
|
|
99
105
|
var displayName: string;
|
|
100
106
|
}
|
|
101
107
|
|
|
102
108
|
|
|
103
|
-
declare namespace
|
|
109
|
+
declare namespace Interval {
|
|
104
110
|
var displayName: string;
|
|
105
111
|
}
|
|
106
112
|
|
|
107
113
|
|
|
108
|
-
declare namespace
|
|
114
|
+
declare namespace TimelineLink {
|
|
109
115
|
var displayName: string;
|
|
110
116
|
}
|
|
111
117
|
|
|
112
118
|
|
|
113
|
-
declare namespace
|
|
119
|
+
declare namespace Provider {
|
|
114
120
|
var displayName: string;
|
|
115
121
|
}
|
|
116
122
|
|
|
117
123
|
|
|
118
|
-
declare namespace
|
|
124
|
+
declare namespace Root {
|
|
119
125
|
var displayName: string;
|
|
120
126
|
}
|
|
121
127
|
|
|
122
128
|
|
|
123
|
-
declare namespace
|
|
129
|
+
declare namespace Trigger {
|
|
124
130
|
var displayName: string;
|
|
125
131
|
}
|
|
126
132
|
|
|
127
133
|
|
|
128
|
-
declare namespace
|
|
134
|
+
declare namespace Content {
|
|
129
135
|
var displayName: string;
|
|
130
136
|
}
|
|
131
137
|
|
|
132
138
|
|
|
133
|
-
declare namespace
|
|
139
|
+
declare namespace SelectRoot {
|
|
134
140
|
var displayName: string;
|
|
135
141
|
}
|
|
136
142
|
|
|
137
143
|
|
|
138
|
-
declare namespace
|
|
144
|
+
declare namespace SelectTrigger {
|
|
139
145
|
var displayName: string;
|
|
140
146
|
}
|
|
141
147
|
|
|
142
148
|
|
|
143
|
-
declare namespace
|
|
149
|
+
declare namespace SelectValue {
|
|
144
150
|
var displayName: string;
|
|
145
151
|
}
|
|
146
152
|
|
|
147
153
|
|
|
148
|
-
declare namespace
|
|
154
|
+
declare namespace SelectContent {
|
|
149
155
|
var displayName: string;
|
|
150
156
|
}
|
|
151
157
|
|
|
152
158
|
|
|
153
|
-
declare namespace
|
|
159
|
+
declare namespace SelectItem {
|
|
160
|
+
var displayName: string;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
declare namespace SelectGroup {
|
|
165
|
+
var displayName: string;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
declare namespace SelectGroupLabel {
|
|
170
|
+
var displayName: string;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
declare namespace SelectSeparator {
|
|
154
175
|
var displayName: string;
|
|
155
176
|
}
|
|
156
177
|
|
|
@@ -165,77 +186,82 @@ declare namespace Trigger {
|
|
|
165
186
|
}
|
|
166
187
|
|
|
167
188
|
|
|
168
|
-
declare namespace
|
|
189
|
+
declare namespace Content {
|
|
169
190
|
var displayName: string;
|
|
170
191
|
}
|
|
171
192
|
|
|
172
193
|
|
|
173
|
-
declare namespace
|
|
194
|
+
declare namespace Item {
|
|
174
195
|
var displayName: string;
|
|
175
196
|
}
|
|
176
197
|
|
|
177
198
|
|
|
178
|
-
declare namespace
|
|
199
|
+
declare namespace LinkItem {
|
|
179
200
|
var displayName: string;
|
|
180
201
|
}
|
|
181
202
|
|
|
182
203
|
|
|
183
|
-
declare namespace
|
|
204
|
+
declare namespace CheckboxItem {
|
|
184
205
|
var displayName: string;
|
|
185
206
|
}
|
|
186
207
|
|
|
187
208
|
|
|
188
|
-
declare namespace
|
|
209
|
+
declare namespace CheckboxItemIndicator {
|
|
189
210
|
var displayName: string;
|
|
190
211
|
}
|
|
191
212
|
|
|
192
213
|
|
|
193
|
-
declare namespace
|
|
214
|
+
declare namespace RadioItem {
|
|
194
215
|
var displayName: string;
|
|
195
216
|
}
|
|
196
217
|
|
|
197
218
|
|
|
198
|
-
declare namespace
|
|
219
|
+
declare namespace RadioItemIndicator {
|
|
199
220
|
var displayName: string;
|
|
200
221
|
}
|
|
201
222
|
|
|
202
223
|
|
|
203
|
-
declare namespace
|
|
224
|
+
declare namespace RadioGroup {
|
|
204
225
|
var displayName: string;
|
|
205
226
|
}
|
|
206
227
|
|
|
207
228
|
|
|
208
|
-
declare namespace
|
|
229
|
+
declare namespace Group {
|
|
209
230
|
var displayName: string;
|
|
210
231
|
}
|
|
211
232
|
|
|
212
233
|
|
|
213
|
-
declare namespace
|
|
234
|
+
declare namespace GroupLabel {
|
|
214
235
|
var displayName: string;
|
|
215
236
|
}
|
|
216
237
|
|
|
217
238
|
|
|
218
|
-
declare namespace
|
|
239
|
+
declare namespace MenuSeparator {
|
|
219
240
|
var displayName: string;
|
|
220
241
|
}
|
|
221
242
|
|
|
222
243
|
|
|
223
|
-
declare namespace
|
|
244
|
+
declare namespace SubmenuRoot {
|
|
224
245
|
var displayName: string;
|
|
225
246
|
}
|
|
226
247
|
|
|
227
248
|
|
|
228
|
-
declare namespace
|
|
249
|
+
declare namespace SubmenuTrigger {
|
|
229
250
|
var displayName: string;
|
|
230
251
|
}
|
|
231
252
|
|
|
232
253
|
|
|
233
|
-
declare namespace
|
|
254
|
+
declare namespace Root {
|
|
234
255
|
var displayName: string;
|
|
235
256
|
}
|
|
236
257
|
|
|
237
258
|
|
|
238
|
-
declare namespace
|
|
259
|
+
declare namespace Image {
|
|
260
|
+
var displayName: string;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
|
|
264
|
+
declare namespace Fallback {
|
|
239
265
|
var displayName: string;
|
|
240
266
|
}
|
|
241
267
|
|
|
@@ -245,12 +271,12 @@ declare namespace Root {
|
|
|
245
271
|
}
|
|
246
272
|
|
|
247
273
|
|
|
248
|
-
declare namespace
|
|
274
|
+
declare namespace Title {
|
|
249
275
|
var displayName: string;
|
|
250
276
|
}
|
|
251
277
|
|
|
252
278
|
|
|
253
|
-
declare namespace
|
|
279
|
+
declare namespace Description {
|
|
254
280
|
var displayName: string;
|
|
255
281
|
}
|
|
256
282
|
|
|
@@ -260,7 +286,12 @@ declare namespace Root {
|
|
|
260
286
|
}
|
|
261
287
|
|
|
262
288
|
|
|
263
|
-
declare namespace
|
|
289
|
+
declare namespace Trigger {
|
|
290
|
+
var displayName: string;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
declare namespace Close {
|
|
264
295
|
var displayName: string;
|
|
265
296
|
}
|
|
266
297
|
|
|
@@ -270,82 +301,82 @@ declare namespace Content {
|
|
|
270
301
|
}
|
|
271
302
|
|
|
272
303
|
|
|
273
|
-
declare namespace
|
|
304
|
+
declare namespace Header {
|
|
274
305
|
var displayName: string;
|
|
275
306
|
}
|
|
276
307
|
|
|
277
308
|
|
|
278
|
-
declare namespace
|
|
309
|
+
declare namespace Footer {
|
|
279
310
|
var displayName: string;
|
|
280
311
|
}
|
|
281
312
|
|
|
282
313
|
|
|
283
|
-
declare namespace
|
|
314
|
+
declare namespace Title {
|
|
284
315
|
var displayName: string;
|
|
285
316
|
}
|
|
286
317
|
|
|
287
318
|
|
|
288
|
-
declare namespace
|
|
319
|
+
declare namespace Description {
|
|
289
320
|
var displayName: string;
|
|
290
321
|
}
|
|
291
322
|
|
|
292
323
|
|
|
293
|
-
declare namespace
|
|
324
|
+
declare namespace Root {
|
|
294
325
|
var displayName: string;
|
|
295
326
|
}
|
|
296
327
|
|
|
297
328
|
|
|
298
|
-
declare namespace
|
|
329
|
+
declare namespace Header {
|
|
299
330
|
var displayName: string;
|
|
300
331
|
}
|
|
301
332
|
|
|
302
333
|
|
|
303
|
-
declare namespace
|
|
334
|
+
declare namespace Body {
|
|
304
335
|
var displayName: string;
|
|
305
336
|
}
|
|
306
337
|
|
|
307
338
|
|
|
308
|
-
declare namespace
|
|
339
|
+
declare namespace Footer {
|
|
309
340
|
var displayName: string;
|
|
310
341
|
}
|
|
311
342
|
|
|
312
343
|
|
|
313
|
-
declare namespace
|
|
344
|
+
declare namespace Row {
|
|
314
345
|
var displayName: string;
|
|
315
346
|
}
|
|
316
347
|
|
|
317
348
|
|
|
318
|
-
declare namespace
|
|
349
|
+
declare namespace Head {
|
|
319
350
|
var displayName: string;
|
|
320
351
|
}
|
|
321
352
|
|
|
322
353
|
|
|
323
|
-
declare namespace
|
|
354
|
+
declare namespace Cell {
|
|
324
355
|
var displayName: string;
|
|
325
356
|
}
|
|
326
357
|
|
|
327
358
|
|
|
328
|
-
declare namespace
|
|
359
|
+
declare namespace Caption {
|
|
329
360
|
var displayName: string;
|
|
330
361
|
}
|
|
331
362
|
|
|
332
363
|
|
|
333
|
-
declare namespace
|
|
364
|
+
declare namespace Root {
|
|
334
365
|
var displayName: string;
|
|
335
366
|
}
|
|
336
367
|
|
|
337
368
|
|
|
338
|
-
declare namespace
|
|
369
|
+
declare namespace List {
|
|
339
370
|
var displayName: string;
|
|
340
371
|
}
|
|
341
372
|
|
|
342
373
|
|
|
343
|
-
declare namespace
|
|
374
|
+
declare namespace Tab {
|
|
344
375
|
var displayName: string;
|
|
345
376
|
}
|
|
346
377
|
|
|
347
378
|
|
|
348
|
-
declare namespace
|
|
379
|
+
declare namespace Panel {
|
|
349
380
|
var displayName: string;
|
|
350
381
|
}
|
|
351
382
|
|
|
@@ -435,112 +466,97 @@ declare namespace ComboboxCollection {
|
|
|
435
466
|
}
|
|
436
467
|
|
|
437
468
|
|
|
438
|
-
declare namespace
|
|
439
|
-
var displayName: string;
|
|
440
|
-
}
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
declare namespace Label {
|
|
444
|
-
var displayName: string;
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
declare namespace Control {
|
|
449
|
-
var displayName: string;
|
|
450
|
-
}
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
declare namespace Description {
|
|
469
|
+
declare namespace DataTableRoot {
|
|
454
470
|
var displayName: string;
|
|
455
471
|
}
|
|
456
472
|
|
|
457
473
|
|
|
458
|
-
declare namespace
|
|
474
|
+
declare namespace DataTableTable {
|
|
459
475
|
var displayName: string;
|
|
460
476
|
}
|
|
461
477
|
|
|
462
478
|
|
|
463
|
-
declare namespace
|
|
479
|
+
declare namespace DataTableFooter {
|
|
464
480
|
var displayName: string;
|
|
465
481
|
}
|
|
466
482
|
|
|
467
483
|
|
|
468
|
-
declare namespace
|
|
484
|
+
declare namespace Root {
|
|
469
485
|
var displayName: string;
|
|
470
486
|
}
|
|
471
487
|
|
|
472
488
|
|
|
473
|
-
declare namespace
|
|
489
|
+
declare namespace Label {
|
|
474
490
|
var displayName: string;
|
|
475
491
|
}
|
|
476
492
|
|
|
477
493
|
|
|
478
|
-
declare namespace
|
|
494
|
+
declare namespace Control {
|
|
479
495
|
var displayName: string;
|
|
480
496
|
}
|
|
481
497
|
|
|
482
498
|
|
|
483
|
-
declare namespace
|
|
499
|
+
declare namespace Description {
|
|
484
500
|
var displayName: string;
|
|
485
501
|
}
|
|
486
502
|
|
|
487
503
|
|
|
488
|
-
declare namespace
|
|
504
|
+
declare namespace Error {
|
|
489
505
|
var displayName: string;
|
|
490
506
|
}
|
|
491
507
|
|
|
492
508
|
|
|
493
|
-
declare namespace
|
|
509
|
+
declare namespace Validity {
|
|
494
510
|
var displayName: string;
|
|
495
511
|
}
|
|
496
512
|
|
|
497
513
|
|
|
498
|
-
declare namespace
|
|
514
|
+
declare namespace Root {
|
|
499
515
|
var displayName: string;
|
|
500
516
|
}
|
|
501
517
|
|
|
502
518
|
|
|
503
|
-
declare namespace
|
|
519
|
+
declare namespace Legend {
|
|
504
520
|
var displayName: string;
|
|
505
521
|
}
|
|
506
522
|
|
|
507
523
|
|
|
508
|
-
declare namespace
|
|
524
|
+
declare namespace Root {
|
|
509
525
|
var displayName: string;
|
|
510
526
|
}
|
|
511
527
|
|
|
512
528
|
|
|
513
|
-
declare namespace
|
|
529
|
+
declare namespace Trigger {
|
|
514
530
|
var displayName: string;
|
|
515
531
|
}
|
|
516
532
|
|
|
517
533
|
|
|
518
|
-
declare namespace
|
|
534
|
+
declare namespace Close {
|
|
519
535
|
var displayName: string;
|
|
520
536
|
}
|
|
521
537
|
|
|
522
538
|
|
|
523
|
-
declare namespace
|
|
539
|
+
declare namespace Content {
|
|
524
540
|
var displayName: string;
|
|
525
541
|
}
|
|
526
542
|
|
|
527
543
|
|
|
528
|
-
declare namespace
|
|
544
|
+
declare namespace Header {
|
|
529
545
|
var displayName: string;
|
|
530
546
|
}
|
|
531
547
|
|
|
532
548
|
|
|
533
|
-
declare namespace
|
|
549
|
+
declare namespace Footer {
|
|
534
550
|
var displayName: string;
|
|
535
551
|
}
|
|
536
552
|
|
|
537
553
|
|
|
538
|
-
declare namespace
|
|
554
|
+
declare namespace Title {
|
|
539
555
|
var displayName: string;
|
|
540
556
|
}
|
|
541
557
|
|
|
542
558
|
|
|
543
|
-
declare namespace
|
|
559
|
+
declare namespace Description {
|
|
544
560
|
var displayName: string;
|
|
545
561
|
}
|
|
546
562
|
|
|
@@ -550,22 +566,12 @@ declare namespace Root {
|
|
|
550
566
|
}
|
|
551
567
|
|
|
552
568
|
|
|
553
|
-
declare namespace
|
|
554
|
-
var displayName: string;
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
declare namespace DataTableRoot {
|
|
559
|
-
var displayName: string;
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
declare namespace DataTableTable {
|
|
569
|
+
declare namespace Header {
|
|
564
570
|
var displayName: string;
|
|
565
571
|
}
|
|
566
572
|
|
|
567
573
|
|
|
568
|
-
declare namespace
|
|
574
|
+
declare namespace Content {
|
|
569
575
|
var displayName: string;
|
|
570
576
|
}
|
|
571
577
|
|
package/dist/vite-plugin.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { appShellRoutes as e } from "@tailor-platform/app-shell
|
|
1
|
+
import { appShellRoutes as e } from "@tailor-platform/vite-plugin-app-shell";
|
|
2
2
|
export { e as appShellRoutes };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tailor-platform/app-shell",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.14.0",
|
|
4
4
|
"description": "An opinionated React application framework for building ERP applications on Tailor Platform",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"app-shell",
|
|
@@ -61,14 +61,14 @@
|
|
|
61
61
|
"react-router": "^8.3.0",
|
|
62
62
|
"sonner": "^2.0.7",
|
|
63
63
|
"tailwind-merge": "^3.6.0",
|
|
64
|
-
"@tailor-platform/app-shell
|
|
64
|
+
"@tailor-platform/vite-plugin-app-shell": "0.3.0"
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
67
|
"@fontsource-variable/noto-sans-jp": "5.3.0",
|
|
68
68
|
"@microsoft/api-extractor": "7.58.12",
|
|
69
69
|
"@tailwindcss/postcss": "^4.3.3",
|
|
70
70
|
"@testing-library/react": "16.3.3",
|
|
71
|
-
"@testing-library/user-event": "14.6.
|
|
71
|
+
"@testing-library/user-event": "14.6.7",
|
|
72
72
|
"@types/encoding-japanese": "2.2.1",
|
|
73
73
|
"@types/node": "^25.9.5",
|
|
74
74
|
"@types/papaparse": "5.5.2",
|
|
@@ -25,6 +25,12 @@ These are the foundational rules that underpin all patterns. All patterns build
|
|
|
25
25
|
|
|
26
26
|
Read it when upgrading `@tailor-platform/app-shell`, and whenever styling, theming, or dark mode looks wrong after a version bump. These breakages are silent: the build succeeds and nothing warns, so the cause is not discoverable from the error output. The package ships no CHANGELOG, so this file is the only migration record available locally.
|
|
27
27
|
|
|
28
|
+
## Available Pages
|
|
29
|
+
|
|
30
|
+
A page is the shape of a whole screen — the outer choice, made before picking patterns for the parts inside it. Where a pattern is one recipe, a page compares the layouts a screen could take and says when each applies. Match the screen first, then use the patterns the entry cites for the pieces within it.
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
28
34
|
## Available Patterns
|
|
29
35
|
|
|
30
36
|
### detail
|
|
@@ -83,4 +89,5 @@ Full rationale in [`design-system.md`](references/fundamental/design-system.md)
|
|
|
83
89
|
- **Action placement:** primary CTA + status in `Layout.Header`; workflow actions in `ActionPanel`; back/navigation in the breadcrumb — never in `ActionPanel`.
|
|
84
90
|
- **Metric tiles always go in a `Grid`** (`columns={{ initial: 1, md: 2, xl: 4 }}`) — never one-per-row.
|
|
85
91
|
- **Forms default to `form/modal`** — only build a routed full-page form when the design explicitly calls for one.
|
|
92
|
+
- **Forms use AppShell `Form` + `Field`**, submitting via `onFormSubmit` — never a bare `<form onSubmit>` with `FormData`. `onFormSubmit` reads registered `Field.Root`s, so every control (dropdowns included) just needs a wrapping `Field.Root name="…"` — no `name` on the control, no `useState`. React Hook Form is optional, consumer-installed, and only warranted for cross-field validation, field arrays, or a Zod resolver. Details in [`components.md`](references/fundamental/components.md) → Forms.
|
|
86
93
|
- **Handle every state:** loading (skeleton), empty (labelled empty state), and error (inline + retry) — never ship only the happy path.
|