@tailor-platform/app-shell 1.16.0 → 1.17.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 (42) hide show
  1. package/dist/app-shell-core.css +1 -1
  2. package/dist/app-shell.d.ts +692 -106
  3. package/dist/app-shell.js +6294 -4939
  4. package/dist/{appshell-B0wh5Lq0.js → appshell-CahhZy7v.js} +316 -297
  5. package/dist/semantic-contrast.test.ts +154 -0
  6. package/dist/style-entry.d.ts +117 -82
  7. package/dist/testing.d.ts +122 -85
  8. package/dist/testing.js +1 -1
  9. package/dist/theme-bridge.test.ts +101 -1
  10. package/dist/theme.bridge.css +91 -0
  11. package/dist/theme.css +6 -1
  12. package/dist/themes/_template.css +7 -1
  13. package/dist/themes/bloom.css +0 -6
  14. package/dist/themes/cream.css +0 -6
  15. package/dist/themes/default.css +389 -69
  16. package/dist/vite-plugin.d.ts +117 -82
  17. package/package.json +1 -1
  18. package/skills/app-shell-patterns/SKILL.md +7 -5
  19. package/skills/app-shell-patterns/references/api/define-module.md +2 -2
  20. package/skills/app-shell-patterns/references/api/define-resource.md +2 -2
  21. package/skills/app-shell-patterns/references/api/use-app-shell-config.md +53 -47
  22. package/skills/app-shell-patterns/references/api/use-app-shell-data.md +30 -26
  23. package/skills/app-shell-patterns/references/api/use-app-shell.md +37 -30
  24. package/skills/app-shell-patterns/references/api/use-toast.md +28 -31
  25. package/skills/app-shell-patterns/references/components/app-shell.md +4 -4
  26. package/skills/app-shell-patterns/references/components/card.md +79 -7
  27. package/skills/app-shell-patterns/references/components/data-table.md +267 -52
  28. package/skills/app-shell-patterns/references/components/date-picker.md +32 -21
  29. package/skills/app-shell-patterns/references/components/filter-rail.md +165 -0
  30. package/skills/app-shell-patterns/references/components/sidebar-group.md +6 -0
  31. package/skills/app-shell-patterns/references/components/sidebar-section.md +114 -0
  32. package/skills/app-shell-patterns/references/concepts/custom-components.md +1 -1
  33. package/skills/app-shell-patterns/references/concepts/file-based-routing.md +7 -1
  34. package/skills/app-shell-patterns/references/concepts/graphql.md +20 -14
  35. package/skills/app-shell-patterns/references/concepts/routing-navigation.md +41 -3
  36. package/skills/app-shell-patterns/references/concepts/sidebar-navigation.md +32 -0
  37. package/skills/app-shell-patterns/references/concepts/styling-theming.md +255 -58
  38. package/skills/app-shell-patterns/references/migrations.md +21 -0
  39. package/skills/app-shell-patterns/references/pages/document-detail.md +6 -6
  40. package/skills/app-shell-patterns/references/patterns/form-modal.md +26 -20
  41. package/skills/app-shell-patterns/references/patterns/interaction-multi-select.md +129 -118
  42. package/skills/app-shell-patterns/references/patterns/list-dense-scan.md +2 -2
@@ -41,12 +41,12 @@ declare namespace Root {
41
41
  }
42
42
 
43
43
 
44
- declare namespace Title {
44
+ declare namespace Image {
45
45
  var displayName: string;
46
46
  }
47
47
 
48
48
 
49
- declare namespace Description {
49
+ declare namespace Fallback {
50
50
  var displayName: string;
51
51
  }
52
52
 
@@ -56,32 +56,37 @@ declare namespace Root {
56
56
  }
57
57
 
58
58
 
59
- declare namespace List {
59
+ declare namespace Header {
60
60
  var displayName: string;
61
61
  }
62
62
 
63
63
 
64
- declare namespace Tab {
64
+ declare namespace Body {
65
65
  var displayName: string;
66
66
  }
67
67
 
68
68
 
69
- declare namespace Panel {
69
+ declare namespace Footer {
70
70
  var displayName: string;
71
71
  }
72
72
 
73
73
 
74
- declare namespace Root {
74
+ declare namespace Row {
75
75
  var displayName: string;
76
76
  }
77
77
 
78
78
 
79
- declare namespace Image {
79
+ declare namespace Head {
80
80
  var displayName: string;
81
81
  }
82
82
 
83
83
 
84
- declare namespace Fallback {
84
+ declare namespace Cell {
85
+ var displayName: string;
86
+ }
87
+
88
+
89
+ declare namespace Caption {
85
90
  var displayName: string;
86
91
  }
87
92
 
@@ -96,47 +101,47 @@ declare namespace Header {
96
101
  }
97
102
 
98
103
 
99
- declare namespace Body {
104
+ declare namespace Content {
100
105
  var displayName: string;
101
106
  }
102
107
 
103
108
 
104
- declare namespace Footer {
109
+ declare namespace Root {
105
110
  var displayName: string;
106
111
  }
107
112
 
108
113
 
109
- declare namespace Row {
114
+ declare namespace Trigger {
110
115
  var displayName: string;
111
116
  }
112
117
 
113
118
 
114
- declare namespace Head {
119
+ declare namespace Close {
115
120
  var displayName: string;
116
121
  }
117
122
 
118
123
 
119
- declare namespace Cell {
124
+ declare namespace Content {
120
125
  var displayName: string;
121
126
  }
122
127
 
123
128
 
124
- declare namespace Caption {
129
+ declare namespace Header {
125
130
  var displayName: string;
126
131
  }
127
132
 
128
133
 
129
- declare namespace Root {
134
+ declare namespace Footer {
130
135
  var displayName: string;
131
136
  }
132
137
 
133
138
 
134
- declare namespace Header {
139
+ declare namespace Title {
135
140
  var displayName: string;
136
141
  }
137
142
 
138
143
 
139
- declare namespace Content {
144
+ declare namespace Description {
140
145
  var displayName: string;
141
146
  }
142
147
 
@@ -146,192 +151,197 @@ declare namespace Root {
146
151
  }
147
152
 
148
153
 
149
- declare namespace Trigger {
154
+ declare namespace Legend {
150
155
  var displayName: string;
151
156
  }
152
157
 
153
158
 
154
- declare namespace Close {
159
+ declare namespace ComboboxRoot {
155
160
  var displayName: string;
156
161
  }
157
162
 
158
163
 
159
- declare namespace Content {
164
+ declare namespace ComboboxInput {
160
165
  var displayName: string;
161
166
  }
162
167
 
163
168
 
164
- declare namespace Header {
169
+ declare namespace ComboboxTrigger {
165
170
  var displayName: string;
166
171
  }
167
172
 
168
173
 
169
- declare namespace Footer {
174
+ declare namespace ComboboxInputGroup {
170
175
  var displayName: string;
171
176
  }
172
177
 
173
178
 
174
- declare namespace Title {
179
+ declare namespace ComboboxContent {
175
180
  var displayName: string;
176
181
  }
177
182
 
178
183
 
179
- declare namespace Description {
184
+ declare namespace ComboboxList {
180
185
  var displayName: string;
181
186
  }
182
187
 
183
188
 
184
- declare namespace Root {
189
+ declare namespace ComboboxItem {
185
190
  var displayName: string;
186
191
  }
187
192
 
188
193
 
189
- declare namespace Label {
194
+ declare namespace ComboboxEmpty {
190
195
  var displayName: string;
191
196
  }
192
197
 
193
198
 
194
- declare namespace Control {
199
+ declare namespace ComboboxGroup {
195
200
  var displayName: string;
196
201
  }
197
202
 
198
203
 
199
- declare namespace Description {
204
+ declare namespace ComboboxGroupLabel {
200
205
  var displayName: string;
201
206
  }
202
207
 
203
208
 
204
- declare namespace Error {
209
+ declare namespace ComboboxClear {
205
210
  var displayName: string;
206
211
  }
207
212
 
208
213
 
209
- declare namespace Validity {
214
+ declare namespace ComboboxChips {
210
215
  var displayName: string;
211
216
  }
212
217
 
213
218
 
214
- declare namespace Root {
219
+ declare namespace ComboboxChip {
215
220
  var displayName: string;
216
221
  }
217
222
 
218
223
 
219
- declare namespace Legend {
224
+ declare namespace ComboboxChipRemove {
220
225
  var displayName: string;
221
226
  }
222
227
 
223
228
 
224
- declare namespace Root {
229
+ declare namespace ComboboxValue {
225
230
  var displayName: string;
226
231
  }
227
232
 
228
233
 
229
- declare namespace Trigger {
234
+ declare namespace ComboboxStatus {
230
235
  var displayName: string;
231
236
  }
232
237
 
233
238
 
234
- declare namespace Content {
239
+ declare namespace ComboboxCollection {
235
240
  var displayName: string;
236
241
  }
237
242
 
238
243
 
239
- declare namespace Item {
244
+ declare namespace Root {
240
245
  var displayName: string;
241
246
  }
242
247
 
243
248
 
244
- declare namespace LinkItem {
249
+ declare namespace Label {
245
250
  var displayName: string;
246
251
  }
247
252
 
248
253
 
249
- declare namespace CheckboxItem {
254
+ declare namespace Control {
250
255
  var displayName: string;
251
256
  }
252
257
 
253
258
 
254
- declare namespace CheckboxItemIndicator {
259
+ declare namespace Description {
255
260
  var displayName: string;
256
261
  }
257
262
 
258
263
 
259
- declare namespace RadioItem {
264
+ declare namespace Error {
260
265
  var displayName: string;
261
266
  }
262
267
 
263
268
 
264
- declare namespace RadioItemIndicator {
269
+ declare namespace Validity {
265
270
  var displayName: string;
266
271
  }
267
272
 
268
273
 
269
- declare namespace RadioGroup {
274
+ declare namespace Root {
270
275
  var displayName: string;
271
276
  }
272
277
 
273
278
 
274
- declare namespace Group {
279
+ declare namespace Trigger {
275
280
  var displayName: string;
276
281
  }
277
282
 
278
283
 
279
- declare namespace GroupLabel {
284
+ declare namespace Content {
280
285
  var displayName: string;
281
286
  }
282
287
 
283
288
 
284
- declare namespace MenuSeparator {
289
+ declare namespace Item {
285
290
  var displayName: string;
286
291
  }
287
292
 
288
293
 
289
- declare namespace SubmenuRoot {
294
+ declare namespace LinkItem {
290
295
  var displayName: string;
291
296
  }
292
297
 
293
298
 
294
- declare namespace SubmenuTrigger {
299
+ declare namespace CheckboxItem {
295
300
  var displayName: string;
296
301
  }
297
302
 
298
303
 
299
- declare namespace Root {
304
+ declare namespace CheckboxItemIndicator {
300
305
  var displayName: string;
301
306
  }
302
307
 
303
308
 
304
- declare namespace Trigger {
309
+ declare namespace RadioItem {
305
310
  var displayName: string;
306
311
  }
307
312
 
308
313
 
309
- declare namespace Close {
314
+ declare namespace RadioItemIndicator {
310
315
  var displayName: string;
311
316
  }
312
317
 
313
318
 
314
- declare namespace Content {
319
+ declare namespace RadioGroup {
315
320
  var displayName: string;
316
321
  }
317
322
 
318
323
 
319
- declare namespace Header {
324
+ declare namespace Group {
320
325
  var displayName: string;
321
326
  }
322
327
 
323
328
 
324
- declare namespace Footer {
329
+ declare namespace GroupLabel {
325
330
  var displayName: string;
326
331
  }
327
332
 
328
333
 
329
- declare namespace Title {
334
+ declare namespace MenuSeparator {
330
335
  var displayName: string;
331
336
  }
332
337
 
333
338
 
334
- declare namespace Description {
339
+ declare namespace SubmenuRoot {
340
+ var displayName: string;
341
+ }
342
+
343
+
344
+ declare namespace SubmenuTrigger {
335
345
  var displayName: string;
336
346
  }
337
347
 
@@ -356,47 +366,62 @@ declare namespace Separator {
356
366
  }
357
367
 
358
368
 
359
- declare namespace SelectRoot {
369
+ declare namespace Root {
360
370
  var displayName: string;
361
371
  }
362
372
 
363
373
 
364
- declare namespace SelectTrigger {
374
+ declare namespace Trigger {
365
375
  var displayName: string;
366
376
  }
367
377
 
368
378
 
369
- declare namespace SelectValue {
379
+ declare namespace Close {
370
380
  var displayName: string;
371
381
  }
372
382
 
373
383
 
374
- declare namespace SelectContent {
384
+ declare namespace Content {
375
385
  var displayName: string;
376
386
  }
377
387
 
378
388
 
379
- declare namespace SelectItem {
389
+ declare namespace Header {
380
390
  var displayName: string;
381
391
  }
382
392
 
383
393
 
384
- declare namespace SelectGroup {
394
+ declare namespace Footer {
385
395
  var displayName: string;
386
396
  }
387
397
 
388
398
 
389
- declare namespace SelectGroupLabel {
399
+ declare namespace Title {
390
400
  var displayName: string;
391
401
  }
392
402
 
393
403
 
394
- declare namespace SelectSeparator {
404
+ declare namespace Description {
395
405
  var displayName: string;
396
406
  }
397
407
 
398
408
 
399
- declare namespace Provider {
409
+ declare namespace Root {
410
+ var displayName: string;
411
+ }
412
+
413
+
414
+ declare namespace List {
415
+ var displayName: string;
416
+ }
417
+
418
+
419
+ declare namespace Tab {
420
+ var displayName: string;
421
+ }
422
+
423
+
424
+ declare namespace Panel {
400
425
  var displayName: string;
401
426
  }
402
427
 
@@ -406,97 +431,107 @@ declare namespace Root {
406
431
  }
407
432
 
408
433
 
434
+ declare namespace Title {
435
+ var displayName: string;
436
+ }
437
+
438
+
439
+ declare namespace Description {
440
+ var displayName: string;
441
+ }
442
+
443
+
409
444
  declare namespace Trigger {
410
445
  var displayName: string;
411
446
  }
412
447
 
413
448
 
414
- declare namespace Content {
449
+ declare namespace Settings {
415
450
  var displayName: string;
416
451
  }
417
452
 
418
453
 
419
- declare namespace ComboboxRoot {
454
+ declare namespace Provider {
420
455
  var displayName: string;
421
456
  }
422
457
 
423
458
 
424
- declare namespace ComboboxInput {
459
+ declare namespace Root {
425
460
  var displayName: string;
426
461
  }
427
462
 
428
463
 
429
- declare namespace ComboboxTrigger {
464
+ declare namespace Header {
430
465
  var displayName: string;
431
466
  }
432
467
 
433
468
 
434
- declare namespace ComboboxInputGroup {
469
+ declare namespace ClearAll {
435
470
  var displayName: string;
436
471
  }
437
472
 
438
473
 
439
- declare namespace ComboboxContent {
474
+ declare namespace Sections {
440
475
  var displayName: string;
441
476
  }
442
477
 
443
478
 
444
- declare namespace ComboboxList {
479
+ declare namespace Provider {
445
480
  var displayName: string;
446
481
  }
447
482
 
448
483
 
449
- declare namespace ComboboxItem {
484
+ declare namespace Root {
450
485
  var displayName: string;
451
486
  }
452
487
 
453
488
 
454
- declare namespace ComboboxEmpty {
489
+ declare namespace Trigger {
455
490
  var displayName: string;
456
491
  }
457
492
 
458
493
 
459
- declare namespace ComboboxGroup {
494
+ declare namespace Content {
460
495
  var displayName: string;
461
496
  }
462
497
 
463
498
 
464
- declare namespace ComboboxGroupLabel {
499
+ declare namespace SelectRoot {
465
500
  var displayName: string;
466
501
  }
467
502
 
468
503
 
469
- declare namespace ComboboxClear {
504
+ declare namespace SelectTrigger {
470
505
  var displayName: string;
471
506
  }
472
507
 
473
508
 
474
- declare namespace ComboboxChips {
509
+ declare namespace SelectValue {
475
510
  var displayName: string;
476
511
  }
477
512
 
478
513
 
479
- declare namespace ComboboxChip {
514
+ declare namespace SelectContent {
480
515
  var displayName: string;
481
516
  }
482
517
 
483
518
 
484
- declare namespace ComboboxChipRemove {
519
+ declare namespace SelectItem {
485
520
  var displayName: string;
486
521
  }
487
522
 
488
523
 
489
- declare namespace ComboboxValue {
524
+ declare namespace SelectGroup {
490
525
  var displayName: string;
491
526
  }
492
527
 
493
528
 
494
- declare namespace ComboboxStatus {
529
+ declare namespace SelectGroupLabel {
495
530
  var displayName: string;
496
531
  }
497
532
 
498
533
 
499
- declare namespace ComboboxCollection {
534
+ declare namespace SelectSeparator {
500
535
  var displayName: string;
501
536
  }
502
537
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tailor-platform/app-shell",
3
- "version": "1.16.0",
3
+ "version": "1.17.0",
4
4
  "description": "An opinionated React application framework for building ERP applications on Tailor Platform",
5
5
  "keywords": [
6
6
  "app-shell",
@@ -59,6 +59,7 @@ Every AppShell component, its API surface, and usage guidance. Read the entry fo
59
59
  | [DescriptionCard](references/components/description-card.md) | Display structured key-value information in a responsive grid layout with automatic field rendering |
60
60
  | [Dialog](references/components/dialog.md) | Modal dialog with a compound component API |
61
61
  | [DocumentProgressCard](references/components/document-progress-card.md) | Generic card visualising a document's lifecycle state — optional percentage, stacked progress bar, and status legend |
62
+ | [FilterRail](references/components/filter-rail.md) | An always-visible faceted filter rail with user layout settings, driven by the same CollectionControl as DataTable |
62
63
  | [Form, Field, and Fieldset](references/components/form.md) | Components for building validated forms with automatic accessibility wiring, validation state management, and optional React Hook Form integration |
63
64
  | [GlobalHeaderLayout](references/components/global-header-layout.md) | Opinionated layout with an app-wide header above the whole shell and a sidebar that collapses to a persistent icon rail |
64
65
  | [Grid](references/components/grid.md) | Generic CSS-Grid layout primitive for equal or custom-width columns with responsive reflow, auto-fit, and spanning |
@@ -71,6 +72,7 @@ Every AppShell component, its API surface, and usage guidance. Read the entry fo
71
72
  | [SidebarGroup](references/components/sidebar-group.md) | Collapsible group component for organizing sidebar navigation items with icons and nested structure |
72
73
  | [SidebarItem](references/components/sidebar-item.md) | Individual navigation item for customizing sidebar with icons, active states, and external links |
73
74
  | [SidebarLayout](references/components/sidebar-layout.md) | Default AppShell layout with a built-in sidebar, content header, optional app-wide top bar, and an escape-hatch body slot |
75
+ | [SidebarSection](references/components/sidebar-section.md) | Static, non-collapsible heading for grouping flat sidebar navigation items |
74
76
  | [Spinner](references/components/spinner.md) | Lightweight loading indicator component with accessible defaults and preset sizes |
75
77
  | [Table](references/components/table.md) | Semantic HTML table with pre-styled sub-components |
76
78
  | [Tabs](references/components/tabs.md) | Tab navigation with a compound component API |
@@ -134,11 +136,11 @@ A page is the shape of a whole screen — the outer choice, made before picking
134
136
 
135
137
  ### interaction
136
138
 
137
- | Slug | Name | Description |
138
- | ----------------------------------------------------------------------------- | ------------ | --------------------------------------------------------------------- |
139
- | [`interaction/confirm`](references/patterns/interaction-confirm.md) | Confirm | Confirmation dialog before destructive or irreversible actions |
140
- | [`interaction/multi-select`](references/patterns/interaction-multi-select.md) | Multi Select | Floating bottom action bar for bulk operations on selected list rows |
141
- | [`interaction/toast`](references/patterns/interaction-toast.md) | Toast | Lightweight feedback after mutations — success or error notifications |
139
+ | Slug | Name | Description |
140
+ | ----------------------------------------------------------------------------- | ------------ | --------------------------------------------------------------------------------------- |
141
+ | [`interaction/confirm`](references/patterns/interaction-confirm.md) | Confirm | Confirmation dialog before destructive or irreversible actions |
142
+ | [`interaction/multi-select`](references/patterns/interaction-multi-select.md) | Multi Select | Bulk operations on selected DataTable rows, from a bar that takes over the table footer |
143
+ | [`interaction/toast`](references/patterns/interaction-toast.md) | Toast | Lightweight feedback after mutations — success or error notifications |
142
144
 
143
145
  ### list
144
146
 
@@ -70,8 +70,8 @@ defineModule({
70
70
 
71
71
  **meta.breadcrumbTitle**
72
72
 
73
- - **Type:** `string | ((segment: string) => string)`
74
- - **Description:** Custom breadcrumb segment title override
73
+ - **Type:** `string | ((segment: string) => LocalizedString)`
74
+ - **Description:** Custom breadcrumb segment title override. Pass `labels.t(key)` directly for localization: `breadcrumbTitle: labels.t("dashboard")`. Other callbacks receive the URL segment and may return a `LocalizedString`, resolved using the current locale. The existing `() => labels.t(key)` form remains supported; handwritten locale functions must be returned from an outer callback. When omitted, the breadcrumb uses the localized `meta.title`.
75
75
 
76
76
  ### `guards`
77
77
 
@@ -65,8 +65,8 @@ defineResource({
65
65
 
66
66
  **meta.breadcrumbTitle**
67
67
 
68
- - **Type:** `string | ((segment: string) => string)`
69
- - **Description:** Custom breadcrumb segment title
68
+ - **Type:** `string | ((segment: string) => LocalizedString)`
69
+ - **Description:** Custom breadcrumb segment title. Pass `labels.t(key)` directly for localization: `breadcrumbTitle: labels.t("orders")`. Other callbacks receive the URL segment and may return a `LocalizedString`, for example `breadcrumbTitle: (segment) => labels.t("order", { id: segment })` for a dynamic label. AppShell resolves it using the current locale. The existing `() => labels.t(key)` form remains supported; handwritten locale functions must be returned from an outer callback. When omitted, the breadcrumb uses the localized `meta.title`.
70
70
 
71
71
  ### `subResources`
72
72