@tailor-platform/app-shell 1.18.0 → 1.20.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 (55) hide show
  1. package/dist/app-shell-core.css +2 -2
  2. package/dist/app-shell.d.ts +1108 -190
  3. package/dist/app-shell.js +13090 -10783
  4. package/dist/{appshell-Y1AYCuVJ.js → appshell-B4QkQvXF.js} +519 -392
  5. package/dist/fonts/inter.css +7 -7
  6. package/dist/fonts/noto-sans-jp.css +116 -116
  7. package/dist/style-entry.d.ts +1 -656
  8. package/dist/testing.d.ts +132 -97
  9. package/dist/testing.js +1 -1
  10. package/dist/vite-plugin.d.ts +132 -97
  11. package/package.json +15 -10
  12. package/skills/app-shell-patterns/SKILL.md +38 -27
  13. package/skills/app-shell-patterns/references/api/aggregations.md +131 -0
  14. package/skills/app-shell-patterns/references/api/create-ai-gateway-client.md +32 -2
  15. package/skills/app-shell-patterns/references/api/define-module.md +5 -5
  16. package/skills/app-shell-patterns/references/api/router/use-params.md +2 -2
  17. package/skills/app-shell-patterns/references/api/use-ai-chat.md +46 -8
  18. package/skills/app-shell-patterns/references/api/use-app-shell-config.md +4 -4
  19. package/skills/app-shell-patterns/references/api/use-app-shell-data.md +5 -5
  20. package/skills/app-shell-patterns/references/api/use-app-shell.md +2 -2
  21. package/skills/app-shell-patterns/references/api/use-auth.md +3 -3
  22. package/skills/app-shell-patterns/references/api/use-route-error.md +12 -12
  23. package/skills/app-shell-patterns/references/components/action-panel.md +57 -23
  24. package/skills/app-shell-patterns/references/components/activity-card.md +3 -3
  25. package/skills/app-shell-patterns/references/components/ai-chat.md +37 -3
  26. package/skills/app-shell-patterns/references/components/app-shell.md +6 -5
  27. package/skills/app-shell-patterns/references/components/badge.md +7 -3
  28. package/skills/app-shell-patterns/references/components/card.md +2 -2
  29. package/skills/app-shell-patterns/references/components/data-table.md +514 -77
  30. package/skills/app-shell-patterns/references/components/date-picker.md +2 -2
  31. package/skills/app-shell-patterns/references/components/default-sidebar.md +2 -2
  32. package/skills/app-shell-patterns/references/components/dialog.md +8 -0
  33. package/skills/app-shell-patterns/references/components/filter-rail.md +10 -3
  34. package/skills/app-shell-patterns/references/components/form.md +19 -9
  35. package/skills/app-shell-patterns/references/components/global-header-layout.md +31 -8
  36. package/skills/app-shell-patterns/references/components/item-list.md +191 -0
  37. package/skills/app-shell-patterns/references/components/layout.md +24 -17
  38. package/skills/app-shell-patterns/references/components/select.md +18 -0
  39. package/skills/app-shell-patterns/references/components/sidebar-group.md +9 -7
  40. package/skills/app-shell-patterns/references/components/sidebar-layout.md +74 -11
  41. package/skills/app-shell-patterns/references/components/sidebar-section.md +8 -8
  42. package/skills/app-shell-patterns/references/components/tabs.md +32 -2
  43. package/skills/app-shell-patterns/references/components/text.md +75 -38
  44. package/skills/app-shell-patterns/references/components/tree.md +342 -0
  45. package/skills/app-shell-patterns/references/components/with-guard.md +5 -5
  46. package/skills/app-shell-patterns/references/concepts/authentication.md +1 -1
  47. package/skills/app-shell-patterns/references/concepts/routing-navigation.md +3 -3
  48. package/skills/app-shell-patterns/references/concepts/sidebar-navigation.md +16 -14
  49. package/skills/app-shell-patterns/references/concepts/styling-theming.md +28 -20
  50. package/skills/app-shell-patterns/references/migrations.md +22 -2
  51. package/skills/app-shell-patterns/references/pages/document-detail.md +32 -25
  52. package/skills/app-shell-patterns/references/patterns/form-modal.md +4 -1
  53. package/skills/app-shell-patterns/references/patterns/interaction-multi-select.md +1 -1
  54. package/dist/semantic-contrast.test.ts +0 -227
  55. package/dist/theme-bridge.test.ts +0 -182
@@ -16,46 +16,6 @@ declare namespace Root {
16
16
  }
17
17
 
18
18
 
19
- declare namespace Viewport {
20
- var displayName: string;
21
- }
22
-
23
-
24
- declare namespace Row {
25
- var displayName: string;
26
- }
27
-
28
-
29
- declare namespace Interval {
30
- var displayName: string;
31
- }
32
-
33
-
34
- declare namespace TimelineLink {
35
- var displayName: string;
36
- }
37
-
38
-
39
- declare namespace Root {
40
- var displayName: string;
41
- }
42
-
43
-
44
- declare namespace Image {
45
- var displayName: string;
46
- }
47
-
48
-
49
- declare namespace Fallback {
50
- var displayName: string;
51
- }
52
-
53
-
54
- declare namespace Root {
55
- var displayName: string;
56
- }
57
-
58
-
59
19
  declare namespace Title {
60
20
  var displayName: string;
61
21
  }
@@ -66,37 +26,27 @@ declare namespace Description {
66
26
  }
67
27
 
68
28
 
69
- declare namespace Provider {
70
- var displayName: string;
71
- }
72
-
73
-
74
29
  declare namespace Root {
75
30
  var displayName: string;
76
31
  }
77
32
 
78
33
 
79
- declare namespace Header {
34
+ declare namespace Row {
80
35
  var displayName: string;
81
36
  }
82
37
 
83
38
 
84
- declare namespace ClearAll {
39
+ declare namespace Group {
85
40
  var displayName: string;
86
41
  }
87
42
 
88
43
 
89
- declare namespace Sections {
44
+ declare namespace Separator {
90
45
  var displayName: string;
91
46
  }
92
47
 
93
48
 
94
- declare namespace Trigger {
95
- var displayName: string;
96
- }
97
-
98
-
99
- declare namespace Settings {
49
+ declare namespace TextRoot {
100
50
  var displayName: string;
101
51
  }
102
52
 
@@ -106,12 +56,12 @@ declare namespace Root {
106
56
  }
107
57
 
108
58
 
109
- declare namespace Header {
59
+ declare namespace Image {
110
60
  var displayName: string;
111
61
  }
112
62
 
113
63
 
114
- declare namespace Content {
64
+ declare namespace Fallback {
115
65
  var displayName: string;
116
66
  }
117
67
 
@@ -201,6 +151,21 @@ declare namespace Root {
201
151
  }
202
152
 
203
153
 
154
+ declare namespace Header {
155
+ var displayName: string;
156
+ }
157
+
158
+
159
+ declare namespace Content {
160
+ var displayName: string;
161
+ }
162
+
163
+
164
+ declare namespace Root {
165
+ var displayName: string;
166
+ }
167
+
168
+
204
169
  declare namespace Label {
205
170
  var displayName: string;
206
171
  }
@@ -371,167 +336,217 @@ declare namespace Panel {
371
336
  }
372
337
 
373
338
 
339
+ declare namespace Trigger {
340
+ var displayName: string;
341
+ }
342
+
343
+
344
+ declare namespace Provider {
345
+ var displayName: string;
346
+ }
347
+
348
+
374
349
  declare namespace Root {
375
350
  var displayName: string;
376
351
  }
377
352
 
378
353
 
379
- declare namespace Row {
354
+ declare namespace Header {
380
355
  var displayName: string;
381
356
  }
382
357
 
383
358
 
384
- declare namespace Group {
359
+ declare namespace ClearAll {
385
360
  var displayName: string;
386
361
  }
387
362
 
388
363
 
389
- declare namespace Separator {
364
+ declare namespace Sections {
390
365
  var displayName: string;
391
366
  }
392
367
 
393
368
 
394
- declare namespace SelectRoot {
369
+ declare namespace Settings {
395
370
  var displayName: string;
396
371
  }
397
372
 
398
373
 
399
- declare namespace SelectTrigger {
374
+ declare namespace ComboboxRoot {
400
375
  var displayName: string;
401
376
  }
402
377
 
403
378
 
404
- declare namespace SelectValue {
379
+ declare namespace ComboboxInput {
405
380
  var displayName: string;
406
381
  }
407
382
 
408
383
 
409
- declare namespace SelectContent {
384
+ declare namespace ComboboxTrigger {
410
385
  var displayName: string;
411
386
  }
412
387
 
413
388
 
414
- declare namespace SelectItem {
389
+ declare namespace ComboboxInputGroup {
415
390
  var displayName: string;
416
391
  }
417
392
 
418
393
 
419
- declare namespace SelectGroup {
394
+ declare namespace ComboboxContent {
420
395
  var displayName: string;
421
396
  }
422
397
 
423
398
 
424
- declare namespace SelectGroupLabel {
399
+ declare namespace ComboboxList {
425
400
  var displayName: string;
426
401
  }
427
402
 
428
403
 
429
- declare namespace SelectSeparator {
404
+ declare namespace ComboboxItem {
430
405
  var displayName: string;
431
406
  }
432
407
 
433
408
 
434
- declare namespace Provider {
409
+ declare namespace ComboboxEmpty {
435
410
  var displayName: string;
436
411
  }
437
412
 
438
413
 
439
- declare namespace Root {
414
+ declare namespace ComboboxGroup {
440
415
  var displayName: string;
441
416
  }
442
417
 
443
418
 
444
- declare namespace Trigger {
419
+ declare namespace ComboboxGroupLabel {
445
420
  var displayName: string;
446
421
  }
447
422
 
448
423
 
449
- declare namespace Content {
424
+ declare namespace ComboboxClear {
450
425
  var displayName: string;
451
426
  }
452
427
 
453
428
 
454
- declare namespace ComboboxRoot {
429
+ declare namespace ComboboxChips {
455
430
  var displayName: string;
456
431
  }
457
432
 
458
433
 
459
- declare namespace ComboboxInput {
434
+ declare namespace ComboboxChip {
460
435
  var displayName: string;
461
436
  }
462
437
 
463
438
 
464
- declare namespace ComboboxTrigger {
439
+ declare namespace ComboboxChipRemove {
465
440
  var displayName: string;
466
441
  }
467
442
 
468
443
 
469
- declare namespace ComboboxInputGroup {
444
+ declare namespace ComboboxValue {
470
445
  var displayName: string;
471
446
  }
472
447
 
473
448
 
474
- declare namespace ComboboxContent {
449
+ declare namespace ComboboxStatus {
475
450
  var displayName: string;
476
451
  }
477
452
 
478
453
 
479
- declare namespace ComboboxList {
454
+ declare namespace ComboboxCollection {
480
455
  var displayName: string;
481
456
  }
482
457
 
483
458
 
484
- declare namespace ComboboxItem {
459
+ declare namespace Provider {
485
460
  var displayName: string;
486
461
  }
487
462
 
488
463
 
489
- declare namespace ComboboxEmpty {
464
+ declare namespace Root {
490
465
  var displayName: string;
491
466
  }
492
467
 
493
468
 
494
- declare namespace ComboboxGroup {
469
+ declare namespace Trigger {
495
470
  var displayName: string;
496
471
  }
497
472
 
498
473
 
499
- declare namespace ComboboxGroupLabel {
474
+ declare namespace Content {
500
475
  var displayName: string;
501
476
  }
502
477
 
503
478
 
504
- declare namespace ComboboxClear {
479
+ declare namespace SelectRoot {
505
480
  var displayName: string;
506
481
  }
507
482
 
508
483
 
509
- declare namespace ComboboxChips {
484
+ declare namespace SelectTrigger {
510
485
  var displayName: string;
511
486
  }
512
487
 
513
488
 
514
- declare namespace ComboboxChip {
489
+ declare namespace SelectValue {
515
490
  var displayName: string;
516
491
  }
517
492
 
518
493
 
519
- declare namespace ComboboxChipRemove {
494
+ declare namespace SelectContent {
520
495
  var displayName: string;
521
496
  }
522
497
 
523
498
 
524
- declare namespace ComboboxValue {
499
+ declare namespace SelectItem {
525
500
  var displayName: string;
526
501
  }
527
502
 
528
503
 
529
- declare namespace ComboboxStatus {
504
+ declare namespace SelectGroup {
530
505
  var displayName: string;
531
506
  }
532
507
 
533
508
 
534
- declare namespace ComboboxCollection {
509
+ declare namespace SelectGroupLabel {
510
+ var displayName: string;
511
+ }
512
+
513
+
514
+ declare namespace SelectSeparator {
515
+ var displayName: string;
516
+ }
517
+
518
+
519
+ declare namespace Root {
520
+ var displayName: string;
521
+ }
522
+
523
+
524
+ declare namespace Viewport {
525
+ var displayName: string;
526
+ }
527
+
528
+
529
+ declare namespace Row {
530
+ var displayName: string;
531
+ }
532
+
533
+
534
+ declare namespace Interval {
535
+ var displayName: string;
536
+ }
537
+
538
+
539
+ declare namespace TimelineLink {
540
+ var displayName: string;
541
+ }
542
+
543
+
544
+ declare namespace AutocompleteStandalone {
545
+ var displayName: string;
546
+ }
547
+
548
+
549
+ declare namespace AutocompleteAsyncStandalone {
535
550
  var displayName: string;
536
551
  }
537
552
 
@@ -606,12 +621,22 @@ declare namespace AutocompleteStatus {
606
621
  }
607
622
 
608
623
 
609
- declare namespace AutocompleteStandalone {
624
+ declare namespace TreeRow {
610
625
  var displayName: string;
611
626
  }
612
627
 
613
628
 
614
- declare namespace AutocompleteAsyncStandalone {
629
+ declare namespace Root {
630
+ var displayName: string;
631
+ }
632
+
633
+
634
+ declare namespace Items {
635
+ var displayName: string;
636
+ }
637
+
638
+
639
+ declare namespace Item {
615
640
  var displayName: string;
616
641
  }
617
642
 
@@ -626,37 +651,37 @@ declare namespace DataTableTable {
626
651
  }
627
652
 
628
653
 
629
- declare namespace DataTableFooter {
654
+ declare namespace DataTableToolbar {
630
655
  var displayName: string;
631
656
  }
632
657
 
633
658
 
634
- declare namespace Root {
659
+ declare namespace DataTableColumnSettings {
635
660
  var displayName: string;
636
661
  }
637
662
 
638
663
 
639
- declare namespace Items {
664
+ declare namespace DataTableFooter {
640
665
  var displayName: string;
641
666
  }
642
667
 
643
668
 
644
- declare namespace Item {
669
+ declare namespace DataTableFilters {
645
670
  var displayName: string;
646
671
  }
647
672
 
648
673
 
649
- declare namespace DataTableColumnSettings {
674
+ declare namespace DataTableBody {
650
675
  var displayName: string;
651
676
  }
652
677
 
653
678
 
654
- declare namespace DataTableToolbar {
679
+ declare namespace DataTableHeaders {
655
680
  var displayName: string;
656
681
  }
657
682
 
658
683
 
659
- declare namespace DataTableFilters {
684
+ declare namespace AddFilterPanel {
660
685
  var displayName: string;
661
686
  }
662
687
 
@@ -664,3 +689,13 @@ declare namespace DataTableFilters {
664
689
  declare namespace AsyncErrorState {
665
690
  var displayName: string;
666
691
  }
692
+
693
+
694
+ declare namespace DataTableHeaderContextMenu {
695
+ var displayName: string;
696
+ }
697
+
698
+
699
+ declare namespace DataTableCellContextMenu {
700
+ var displayName: string;
701
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tailor-platform/app-shell",
3
- "version": "1.18.0",
3
+ "version": "1.20.0",
4
4
  "description": "An opinionated React application framework for building ERP applications on Tailor Platform",
5
5
  "keywords": [
6
6
  "app-shell",
@@ -65,28 +65,32 @@
65
65
  },
66
66
  "devDependencies": {
67
67
  "@fontsource-variable/noto-sans-jp": "5.3.0",
68
- "@microsoft/api-extractor": "7.58.12",
69
- "@tailwindcss/postcss": "^4.3.3",
68
+ "@microsoft/api-extractor": "7.60.1",
69
+ "@tailor-platform/eslint-plugin-app-shell": "0.3.0",
70
+ "@tailwindcss/postcss": "^4.3.5",
70
71
  "@testing-library/react": "16.3.3",
71
- "@testing-library/user-event": "14.6.7",
72
+ "@testing-library/user-event": "14.6.8",
72
73
  "@types/encoding-japanese": "2.2.1",
73
74
  "@types/node": "^25.9.8",
74
75
  "@types/papaparse": "5.5.2",
75
76
  "@types/react": "^19",
76
77
  "@types/react-dom": "^19",
77
78
  "@vitejs/plugin-react": "^6.1.0",
78
- "@vitest/coverage-v8": "4.1.11",
79
- "happy-dom": "20.14.5",
80
- "postcss": "8.5.30",
79
+ "@vitest/browser-playwright": "4.1.12",
80
+ "@vitest/coverage-v8": "4.1.12",
81
+ "happy-dom": "21.0.4",
82
+ "playwright": "1.63.0",
83
+ "postcss": "8.5.32",
81
84
  "react": "^19.2.7",
82
85
  "react-dom": "^19.2.7",
83
86
  "react-hook-form": "7.71.2",
84
- "tailwindcss": "^4.3.3",
87
+ "tailwindcss": "^4.3.5",
85
88
  "tw-animate-css": "1.4.0",
86
89
  "typescript": "5.9.3",
87
90
  "vite": "^8.2.2",
88
- "vite-plugin-dts": "5.0.3",
89
- "vitest": "^4.1.11"
91
+ "vite-plugin-dts": "5.1.2",
92
+ "vitest": "^4.1.12",
93
+ "zod": "4.6.7"
90
94
  },
91
95
  "peerDependencies": {
92
96
  "react": ">=19.2.7",
@@ -99,6 +103,7 @@
99
103
  "vendor:fonts": "node scripts/sync-noto-fonts.mjs",
100
104
  "lint": "oxlint -c .oxlintrc.jsonc",
101
105
  "test": "vitest run",
106
+ "test:browser": "pnpm build && vitest run --config vitest.browser.config.ts",
102
107
  "type-check": "tsc --incremental"
103
108
  }
104
109
  }
@@ -1,6 +1,8 @@
1
1
  ---
2
2
  name: app-shell-patterns
3
3
  description: "Best-practice UI patterns and correct component usage for building pages in apps that use @tailor-platform/app-shell. Use when: building or editing any screen, page, list, table, detail view, form, modal, dialog, wizard, or bulk/confirm/toast interaction in an app with @tailor-platform/app-shell installed — when choosing the right AppShell component, layout, or design token for a UI — or when upgrading @tailor-platform/app-shell, or diagnosing styling, theming, or dark-mode breakage that appeared after a version bump."
4
+ metadata:
5
+ app-shell-version: "1.20.0"
4
6
  ---
5
7
 
6
8
  # App-Shell Patterns
@@ -9,6 +11,10 @@ description: "Best-practice UI patterns and correct component usage for building
9
11
 
10
12
  Select and implement the correct UI pattern using @tailor-platform/app-shell components.
11
13
 
14
+ ## Version
15
+
16
+ This skill was generated from `@tailor-platform/app-shell` **1.20.0**. Before relying on it, compare that with the version installed in the app you're working on (resolve `@tailor-platform/app-shell/package.json` from that app, not the monorepo root). If they differ, this copy is stale: tell the user and suggest re-syncing it from the installed package's `skills/app-shell-patterns/` directory.
17
+
12
18
  ## Concepts
13
19
 
14
20
  Cross-cutting guides that underpin every screen — styling & theming and the token system, GraphQL data access, building custom components, plus auth and routing. Patterns and components build on these.
@@ -64,6 +70,7 @@ Every AppShell component, its API surface, and usage guidance. Read the entry fo
64
70
  | [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 |
65
71
  | [Grid](references/components/grid.md) | Generic CSS-Grid layout primitive for equal or custom-width columns with responsive reflow, auto-fit, and spanning |
66
72
  | [Input](references/components/input.md) | Styled text input with consistent theming |
73
+ | [ItemList](references/components/item-list.md) | Compact icon-and-label lists for consistent navigation inside and outside the Sidebar |
67
74
  | [Layout](references/components/layout.md) | Responsive column layout component for organizing page content in 1, 2, or 3 columns |
68
75
  | [Menu](references/components/menu.md) | Dropdown menu with a compound component API, supporting checkbox/radio items, groups, separators, and nested sub-menus |
69
76
  | [MetricCard](references/components/metric-card.md) | Compact card for dashboard KPI summaries with title, value, optional trend and description |
@@ -81,39 +88,41 @@ Every AppShell component, its API surface, and usage guidance. Read the entry fo
81
88
  | [Timeline](references/components/timeline.md) | Composable primitives for building time-based layouts with axis guides, row backgrounds, intervals, and dependency links |
82
89
  | [Toolbar](references/components/toolbar.md) | Full-width action bars with composable rows, grouped controls, and keyboard navigation |
83
90
  | [Tooltip](references/components/tooltip.md) | Hover/focus tooltip with configurable placement and shared delay via Tooltip.Provider |
91
+ | [Tree](references/components/tree.md) | Browse, pick one, or tick many items in a hierarchy — inline with Tree, or in a search dialog with TreePicker |
84
92
  | [WithGuard](references/components/with-guard.md) | Conditionally render UI elements based on guard evaluation with support for async permissions checks |
85
93
 
86
94
  ## Available Hooks & Functions
87
95
 
88
96
  Hooks, factory functions, guards, and router utilities exported by AppShell.
89
97
 
90
- | Name | Description |
91
- | ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------- |
92
- | [createAIGatewayClient](references/api/create-ai-gateway-client.md) | Create a low-level AI Gateway client that reuses AppShell authentication |
93
- | [createTypedPaths](references/api/create-typed-paths.md) | Generate type-safe route paths from file-based routing |
94
- | [defineI18nLabels](references/api/define-i18n-labels.md) | Type-safe locale-first labels for component text and localized navigation metadata |
95
- | [defineModule](references/api/define-module.md) | Define a top-level module that appears in the main navigation |
96
- | [defineResource](references/api/define-resource.md) | Define a nested resource (page) within a module |
97
- | [hidden](references/api/guards/hidden.md) | Guard function that denies access and returns 404 Not Found |
98
- | [Guards Overview](references/api/guards/overview.md) | Access control system for routes and components using guard functions |
99
- | [pass](references/api/guards/pass.md) | Guard function that allows access and continues to the next guard |
100
- | [redirectTo](references/api/guards/redirect-to.md) | Guard function that redirects to another page |
101
- | [useLocation](references/api/router/use-location.md) | Hook to access current location object with pathname, search, and state |
102
- | [useNavigate](references/api/router/use-navigate.md) | Hook for programmatic navigation between routes |
103
- | [useParams](references/api/router/use-params.md) | Hook to access dynamic route parameters |
104
- | [useAIChat](references/api/use-ai-chat.md) | Simple text-only chat hook for AI Gateway |
105
- | [useAppShell](references/api/use-app-shell.md) | Hook to access AppShell context data and configuration |
106
- | [useAppShellConfig](references/api/use-app-shell-config.md) | Hook to access AppShell configuration data |
107
- | [useAppShellData](references/api/use-app-shell-data.md) | Hook to access custom context data passed to AppShell |
108
- | [useAuth](references/api/use-auth.md) | Hook for accessing authentication state and methods |
109
- | [useOverrideBreadcrumb](references/api/use-override-breadcrumb.md) | Hook for dynamically overriding breadcrumb titles from within page components |
110
- | [usePageMeta](references/api/use-page-meta.md) | Hook to resolve page metadata from route path |
111
- | [useRegisterCommandPaletteActions](references/api/use-register-command-palette-actions.md) | Hook for registering contextual page actions into the CommandPalette |
112
- | [useResolvedLocale](references/api/use-resolved-locale.md) | Hook to access the full BCP-47 locale and language code from AppShell context |
113
- | [useRouteError](references/api/use-route-error.md) | Hook to access error details in custom error boundaries |
114
- | [useTheme](references/api/use-theme.md) | Hook for accessing and controlling theme (light/dark mode) |
115
- | [useTimeZone](references/api/use-time-zone.md) | Hook to access the configured IANA timezone from AppShell context |
116
- | [useToast](references/api/use-toast.md) | Hook for displaying toast notifications |
98
+ | Name | Description |
99
+ | ------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------- |
100
+ | [Value aggregations](references/api/aggregations.md) | Reusable selector-based sum, average, minimum, maximum, and non-null count over row collections, with optional result-only transformation |
101
+ | [createAIGatewayClient](references/api/create-ai-gateway-client.md) | Create a low-level AI Gateway client that reuses AppShell authentication |
102
+ | [createTypedPaths](references/api/create-typed-paths.md) | Generate type-safe route paths from file-based routing |
103
+ | [defineI18nLabels](references/api/define-i18n-labels.md) | Type-safe locale-first labels for component text and localized navigation metadata |
104
+ | [defineModule](references/api/define-module.md) | Define a top-level module that appears in the main navigation |
105
+ | [defineResource](references/api/define-resource.md) | Define a nested resource (page) within a module |
106
+ | [hidden](references/api/guards/hidden.md) | Guard function that denies access and returns 404 Not Found |
107
+ | [Guards Overview](references/api/guards/overview.md) | Access control system for routes and components using guard functions |
108
+ | [pass](references/api/guards/pass.md) | Guard function that allows access and continues to the next guard |
109
+ | [redirectTo](references/api/guards/redirect-to.md) | Guard function that redirects to another page |
110
+ | [useLocation](references/api/router/use-location.md) | Hook to access current location object with pathname, search, and state |
111
+ | [useNavigate](references/api/router/use-navigate.md) | Hook for programmatic navigation between routes |
112
+ | [useParams](references/api/router/use-params.md) | Hook to access dynamic route parameters |
113
+ | [useAIChat](references/api/use-ai-chat.md) | AI Gateway chat hook with optional local tools |
114
+ | [useAppShell](references/api/use-app-shell.md) | Hook to access AppShell context data and configuration |
115
+ | [useAppShellConfig](references/api/use-app-shell-config.md) | Hook to access AppShell configuration data |
116
+ | [useAppShellData](references/api/use-app-shell-data.md) | Hook to access custom context data passed to AppShell |
117
+ | [useAuth](references/api/use-auth.md) | Hook for accessing authentication state and methods |
118
+ | [useOverrideBreadcrumb](references/api/use-override-breadcrumb.md) | Hook for dynamically overriding breadcrumb titles from within page components |
119
+ | [usePageMeta](references/api/use-page-meta.md) | Hook to resolve page metadata from route path |
120
+ | [useRegisterCommandPaletteActions](references/api/use-register-command-palette-actions.md) | Hook for registering contextual page actions into the CommandPalette |
121
+ | [useResolvedLocale](references/api/use-resolved-locale.md) | Hook to access the full BCP-47 locale and language code from AppShell context |
122
+ | [useRouteError](references/api/use-route-error.md) | Hook to access error details in custom error boundaries |
123
+ | [useTheme](references/api/use-theme.md) | Hook for accessing and controlling theme (light/dark mode) |
124
+ | [useTimeZone](references/api/use-time-zone.md) | Hook to access the configured IANA timezone from AppShell context |
125
+ | [useToast](references/api/use-toast.md) | Hook for displaying toast notifications |
117
126
 
118
127
  ## Available Pages
119
128
 
@@ -179,6 +188,8 @@ Full rationale in [`styling-theming`](references/concepts/styling-theming.md)
179
188
 
180
189
  - **One primary action per view:** at most one primary/filled `Button`; everything else is `outline`/`secondary`/`ghost`.
181
190
  - **Status badges by semantic color:** a **filled** semantic variant for the record's primary/lifecycle status, **`outline-*`** for secondary statuses, **`subtle-*`** for tags; reserve brand `default` for non-status emphasis.
191
+ - **Text uses `Text` and typography roles:** render headings, body copy, labels, and captions with [`Text`](references/components/text.md) and a `variant` (`heading-md`, `body-md`, `body-sm`, `label-md`, …) — never a bare `<p>`, `<h*>`, or `<span>` styled with size and weight utilities such as `text-lg font-semibold` or `text-sm`. Set the heading level with `Text.h1` to `Text.h6` (`<Text.h3 variant="heading-md">`), not by its size, and the color with a token in `className`. For other plain elements use `Text.p`, `Text.span` or `Text.div`; use `render` only to compose with another component. On an element you style yourself, such as a `th`, use the role utility (`text-label-md`). Pick the size with `variant`: a size class such as `text-sm` on `Text` has no effect. `Layout.Header` already renders the page title, and a form field label is [`Field.Label`](references/components/form.md), which already has the label role. Role table and color pairings: [`styling-theming`](references/concepts/styling-theming.md) → Typography.
192
+ - **Status and feedback color by semantic role:** use a component variant first (`Badge`, `Alert`, `Button variant="destructive"`). On your own element, use the roles `{info|success|warning|danger|neutral}-{surface|border|solid|text|contrast|indicator}`, for example `bg-warning-surface text-warning-text border-warning-border`. Error text is `text-danger-text`. Never write the deprecated `--status-*`, `--alert-*` or `--destructive` tokens or their utilities (`bg-status-*`, `text-alert-*`, `bg-destructive`, `text-destructive`) in new code; the next major removes them. When you edit a screen that still uses them, replace them: `text-destructive` → `text-danger-text`, `bg-status-completed` → `bg-success-solid`, `bg-alert-warning-background` → `bg-warning-surface`. Full mapping: [`styling-theming`](references/concepts/styling-theming.md) → Semantic color roles.
182
193
  - **No duplicate actions:** an action lives in exactly one place — never repeat the same action in both `Layout.Header` and `ActionPanel`.
183
194
  - **Action placement:** primary CTA + status in `Layout.Header`; workflow actions in `ActionPanel`; back/navigation in the breadcrumb — never in `ActionPanel`.
184
195
  - **Metric tiles always go in a `Grid`** (`columns={{ initial: 1, md: 2, xl: 4 }}`) — never one-per-row.