@godxjp/ui 18.5.0 → 18.6.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 (91) hide show
  1. package/dist/components/charts/compact-bar-trend.d.ts +2 -1
  2. package/dist/components/charts/index.d.ts +4 -1
  3. package/dist/components/data-display/data-table.d.ts +25 -4
  4. package/dist/components/data-display/data-table.js +13 -2
  5. package/dist/components/data-display/empty-state.js +1 -1
  6. package/dist/components/data-display/index.d.ts +1 -1
  7. package/dist/components/data-display/list-row.d.ts +19 -0
  8. package/dist/components/data-display/list-row.js +2 -0
  9. package/dist/components/data-display/qr-code.d.ts +1 -1
  10. package/dist/components/data-display/table.d.ts +47 -2
  11. package/dist/components/data-display/table.js +29 -4
  12. package/dist/components/data-entry/command.d.ts +10 -10
  13. package/dist/components/data-entry/index.d.ts +1 -0
  14. package/dist/components/data-entry/input-otp.d.ts +1 -0
  15. package/dist/components/feedback/dialog.d.ts +14 -1
  16. package/dist/components/feedback/dialog.js +4 -0
  17. package/dist/components/feedback/index.d.ts +1 -1
  18. package/dist/components/feedback/index.js +2 -0
  19. package/dist/components/general/logo.d.ts +7 -1
  20. package/dist/components/general/logo.js +1 -1
  21. package/dist/components/layout/app-shell.d.ts +1 -1
  22. package/dist/components/layout/app-shell.js +55 -46
  23. package/dist/components/layout/auth-account-summary.d.ts +5 -0
  24. package/dist/components/layout/auth-account-summary.js +31 -0
  25. package/dist/components/layout/auth-shell.d.ts +3 -2
  26. package/dist/components/layout/centered-shell.d.ts +1 -1
  27. package/dist/components/layout/centered-shell.js +28 -19
  28. package/dist/components/layout/error-surface.d.ts +35 -0
  29. package/dist/components/layout/error-surface.js +155 -0
  30. package/dist/components/layout/flex.d.ts +1 -1
  31. package/dist/components/layout/flex.js +4 -0
  32. package/dist/components/layout/index.d.ts +5 -0
  33. package/dist/components/layout/index.js +4 -0
  34. package/dist/components/layout/page-container.d.ts +1 -1
  35. package/dist/components/layout/page-container.js +4 -0
  36. package/dist/components/navigation/steps.js +38 -19
  37. package/dist/components/navigation/tabs.js +12 -3
  38. package/dist/components/ui/avatar.d.ts +2 -1
  39. package/dist/components/ui/avatar.js +2 -1
  40. package/dist/components/ui/input-otp.d.ts +4 -1
  41. package/dist/components/ui/input-otp.js +2 -1
  42. package/dist/components/ui/toggle-group.d.ts +7 -4
  43. package/dist/components/ui/toggle-group.js +32 -21
  44. package/dist/email/brand-mark.d.ts +21 -5
  45. package/dist/email/brand-mark.js +5 -0
  46. package/dist/email/color.d.ts +2 -1
  47. package/dist/email/geometry.d.ts +9 -1
  48. package/dist/email/geometry.js +1 -0
  49. package/dist/email/index.d.ts +6 -1
  50. package/dist/email/index.js +6 -0
  51. package/dist/email/inline-style.d.ts +7 -5
  52. package/dist/email/inline-style.js +5 -0
  53. package/dist/email/tokens.generated.d.ts +40 -20
  54. package/dist/email/tokens.generated.js +40 -20
  55. package/dist/email/urgency.d.ts +22 -0
  56. package/dist/email/urgency.js +14 -0
  57. package/dist/i18n/messages/en.json +15 -1
  58. package/dist/i18n/messages/ja.json +15 -1
  59. package/dist/i18n/messages/vi.json +15 -1
  60. package/dist/props/components/data-display.prop.d.ts +63 -1
  61. package/dist/props/components/data-entry.prop.d.ts +6 -0
  62. package/dist/props/components/index.d.ts +1 -1
  63. package/dist/props/components/layout.prop.d.ts +191 -4
  64. package/dist/props/components/navigation.prop.d.ts +5 -1
  65. package/dist/props/registry.d.ts +145 -4
  66. package/dist/props/registry.js +189 -5
  67. package/dist/props/vocabulary/data.prop.d.ts +27 -0
  68. package/dist/props/vocabulary/index.d.ts +3 -3
  69. package/dist/props/vocabulary/interaction.prop.d.ts +9 -0
  70. package/dist/props/vocabulary/layout.prop.d.ts +38 -7
  71. package/dist/styles/control.css +28 -0
  72. package/dist/styles/data-display-layout.css +26 -0
  73. package/dist/styles/layout.css +99 -0
  74. package/dist/styles/logo-layout.css +42 -9
  75. package/dist/styles/navigation-layout.css +109 -0
  76. package/dist/styles/shell-layout.css +302 -0
  77. package/dist/styles/table-layout.css +164 -1
  78. package/dist/theme/dxs.canonical.css +5 -4
  79. package/dist/tokens/axes.css +4 -3
  80. package/dist/tokens/base.css +1 -0
  81. package/dist/tokens/components/data-display.css +13 -0
  82. package/dist/tokens/components/email.css +43 -16
  83. package/dist/tokens/components/error-surface.css +36 -0
  84. package/dist/tokens/components/list-row.css +20 -0
  85. package/dist/tokens/components/logo.css +52 -10
  86. package/dist/tokens/components/navigation.css +15 -0
  87. package/dist/tokens/components/shell.css +72 -0
  88. package/dist/tokens/components/table.css +45 -0
  89. package/dist/tokens/foundation.css +26 -0
  90. package/dist/tokens/semantic/layout.css +25 -0
  91. package/package.json +8 -2
@@ -194,10 +194,35 @@ export declare const VOCABULARY_REGISTRY: {
194
194
  readonly category: "layout";
195
195
  readonly description: "CenteredShell column block alignment — start (flowing page), center (system surface)";
196
196
  };
197
+ readonly CenteredShellPresetProp: {
198
+ readonly file: "vocabulary/layout.prop.ts";
199
+ readonly category: "layout";
200
+ readonly description: "CenteredShell whole-page preset — default (untouched box) | public-landing (token-owned public landing measure, section rhythm, flat chrome and hero h1 tier)";
201
+ };
202
+ readonly TablePresetProp: {
203
+ readonly file: "vocabulary/data.prop.ts";
204
+ readonly category: "data";
205
+ readonly description: "Table collection preset — default | action-collection (dense approval/action queue: column-priority measures below the collapse step instead of desktop intrinsic widths)";
206
+ };
207
+ readonly TableColumnPriorityProp: {
208
+ readonly file: "vocabulary/data.prop.ts";
209
+ readonly category: "data";
210
+ readonly description: "Table column priority for the action-collection preset — primary | secondary | meta | actions (unset = takes the remaining space)";
211
+ };
212
+ readonly ErrorSurfaceModeProp: {
213
+ readonly file: "vocabulary/layout.prop.ts";
214
+ readonly category: "layout";
215
+ readonly description: "ErrorSurface shell contract — application (403/404 body inside the route's existing AppShell) vs system (500/503 owns the page via CenteredShell align=center)";
216
+ };
217
+ readonly ErrorSurfaceStatusProp: {
218
+ readonly file: "vocabulary/layout.prop.ts";
219
+ readonly category: "layout";
220
+ readonly description: "HTTP status an ErrorSurface presents — 403 | 404 | 500 | 503 (numeric); drives the default icon, tone and mode";
221
+ };
197
222
  readonly AuthShellPresetProp: {
198
223
  readonly file: "vocabulary/layout.prop.ts";
199
224
  readonly category: "layout";
200
- readonly description: "AuthShell named flow measure — default | device-authorization (380px card, 5px mobile gutter) | context-selection (25rem card, edge-to-edge mobile) | account-recovery (432px SCR-008 recovery/MFA panel, 15px mobile gutter)";
225
+ readonly description: "AuthShell named flow geometry — default | login (stable SCR-001 identity/card/footer anchor) | device-authorization (380px card, 5px mobile gutter) | context-selection (25rem card, edge-to-edge mobile) | account-recovery (432px SCR-008 recovery/MFA panel, 15px mobile gutter)";
201
226
  };
202
227
  readonly GapProp: {
203
228
  readonly file: "vocabulary/layout.prop.ts";
@@ -234,6 +259,11 @@ export declare const VOCABULARY_REGISTRY: {
234
259
  readonly category: "interaction";
235
260
  readonly description: "Corner shape default | pill | sharp — shared by Button + Badge (radius tokens)";
236
261
  };
262
+ readonly AvatarShapeProp: {
263
+ readonly file: "vocabulary/interaction.prop.ts";
264
+ readonly category: "interaction";
265
+ readonly description: "Avatar geometry circle (person, --radius-pill) | square (entity-header organization/service mark, --avatar-square-* tokens) — a rounded rect ShapeProp cannot express";
266
+ };
237
267
  readonly TextSizeProp: {
238
268
  readonly file: "vocabulary/interaction.prop.ts";
239
269
  readonly category: "interaction";
@@ -357,7 +387,7 @@ export declare const VOCABULARY_REGISTRY: {
357
387
  readonly ColumnDefProp: {
358
388
  readonly file: "vocabulary/data.prop.ts";
359
389
  readonly category: "data";
360
- readonly description: "DataTable column definition";
390
+ readonly description: "DataTable column definition — key/header/render/sortable/align/width/pin/hiddenOnMobile/enableHiding/ariaLabel plus `priority` (TableColumnPriorityProp), read by DataTable preset=\"action-collection\"";
361
391
  };
362
392
  readonly SelectedIdsProp: {
363
393
  readonly file: "vocabulary/data.prop.ts";
@@ -421,6 +451,16 @@ export declare const COMPONENT_PROP_REGISTRY: {
421
451
  readonly file: "components/layout.prop.ts";
422
452
  readonly vocabulary: readonly [];
423
453
  };
454
+ readonly PageContainerMeasureProp: {
455
+ readonly group: "layout";
456
+ readonly file: "components/layout.prop.ts";
457
+ readonly vocabulary: readonly [];
458
+ };
459
+ readonly PageContainerPresetProp: {
460
+ readonly group: "layout";
461
+ readonly file: "components/layout.prop.ts";
462
+ readonly vocabulary: readonly [];
463
+ };
424
464
  readonly PageContainerProp: {
425
465
  readonly group: "layout";
426
466
  readonly file: "components/layout.prop.ts";
@@ -428,6 +468,10 @@ export declare const COMPONENT_PROP_REGISTRY: {
428
468
  readonly field: "headerLayout";
429
469
  readonly local: true;
430
470
  readonly reason: "Header ARRANGEMENT of the title band vs the extra slot below the 640px step (stack | responsive-inline) — orthogonal to PageContainerVariantProp, which selects the page shell layout.";
471
+ }, {
472
+ readonly field: "measure";
473
+ readonly local: true;
474
+ readonly reason: "Bounded page MEASURE shared by the header and body (default | narrow | medium), backed by --page-measure-*. A third orthogonal axis: PageContainerVariantProp owns page CHROME, this owns the inline cap, so a quiet ghost page can also be measure-bounded.";
431
475
  }];
432
476
  };
433
477
  readonly FlexDirectionProp: {
@@ -464,6 +508,14 @@ export declare const COMPONENT_PROP_REGISTRY: {
464
508
  readonly field: "wrap";
465
509
  readonly local: true;
466
510
  readonly reason: "Flex-specific boolean shorthand for flex-wrap.";
511
+ }, "BreakpointProp", {
512
+ readonly field: "hideBelow";
513
+ readonly local: true;
514
+ readonly reason: "Responsive region visibility at a canonical breakpoint step — the public alternative to a page-local media query (gh#252).";
515
+ }, {
516
+ readonly field: "hideFrom";
517
+ readonly local: true;
518
+ readonly reason: "Inverse of hideBelow — keeps a compact-only region off the wide layout.";
467
519
  }];
468
520
  };
469
521
  readonly ResponsiveGridColumnsProp: {
@@ -581,10 +633,66 @@ export declare const COMPONENT_PROP_REGISTRY: {
581
633
  readonly reason: "Authoritative requesting-client context for a delegated auth flow (device grant / consent).";
582
634
  }];
583
635
  };
636
+ readonly AuthAccountSummaryProp: {
637
+ readonly group: "layout";
638
+ readonly file: "components/layout.prop.ts";
639
+ readonly vocabulary: readonly ["DisabledProp", "ClassNameProp"];
640
+ readonly local: readonly ["email", "avatarSrc", "avatarFallback", "actionLabel", "onAction"];
641
+ };
584
642
  readonly CenteredShellProp: {
585
643
  readonly group: "layout";
586
644
  readonly file: "components/layout.prop.ts";
587
- readonly vocabulary: readonly ["ChildrenProp", "ClassNameProp", "CenteredShellWidthProp", "CenteredShellAlignProp"];
645
+ readonly vocabulary: readonly ["ChildrenProp", "ClassNameProp", "CenteredShellWidthProp", "CenteredShellAlignProp", "CenteredShellPresetProp"];
646
+ };
647
+ readonly ErrorSurfaceMaintenanceProp: {
648
+ readonly group: "layout";
649
+ readonly file: "components/layout.prop.ts";
650
+ readonly vocabulary: readonly [{
651
+ readonly field: "start";
652
+ readonly local: true;
653
+ readonly reason: "ISO 8601 instant starting the maintenance window; formatted via Intl.DateTimeFormat and emitted as the <time dateTime> value.";
654
+ }, {
655
+ readonly field: "end";
656
+ readonly local: true;
657
+ readonly reason: "ISO 8601 instant ending the window; omitted for an open-ended outage.";
658
+ }, {
659
+ readonly field: "timeZone";
660
+ readonly local: true;
661
+ readonly reason: "IANA time zone id the window is presented in — explicit so SSR and client output cannot diverge.";
662
+ }, {
663
+ readonly field: "progress";
664
+ readonly local: true;
665
+ readonly reason: "Server-sent 0–100 completion of the maintenance window; deriving it from the client clock would break hydration.";
666
+ }];
667
+ };
668
+ readonly ErrorSurfaceProp: {
669
+ readonly group: "layout";
670
+ readonly file: "components/layout.prop.ts";
671
+ readonly vocabulary: readonly ["ErrorSurfaceModeProp", "ErrorSurfaceStatusProp", "TitleProp", "DescriptionProp", "ActionProp", "IconProp", "HeadingLevelProp", "FooterProp", "CenteredShellWidthProp", "IdProp", "ClassNameProp", {
672
+ readonly field: "tone";
673
+ readonly local: true;
674
+ readonly reason: "Reuses the EmptyStateToneProp union verbatim (the surface renders an EmptyState) — a status-derived default the consumer may override, not a new tone vocabulary.";
675
+ }, {
676
+ readonly field: "requestId";
677
+ readonly local: true;
678
+ readonly reason: "Support correlation id for the failure, rendered as a mono/tabular metadata row — an identifier, not a LabelProp.";
679
+ }, {
680
+ readonly field: "permission";
681
+ readonly local: true;
682
+ readonly reason: "The permission/role the viewer is missing (403). The localized label is the surface's; the value is the bare permission name.";
683
+ }, {
684
+ readonly field: "organization";
685
+ readonly local: true;
686
+ readonly reason: "The organization/tenant the failed request was scoped to — disambiguates a wrong-workspace 403 from a missing-role 403.";
687
+ }, {
688
+ readonly field: "maintenance";
689
+ readonly local: true;
690
+ readonly reason: "ErrorSurfaceMaintenanceProp timing/progress slot (ISO 8601 + IANA), formatted with Intl.DateTimeFormat.";
691
+ }, {
692
+ readonly field: "brand";
693
+ readonly local: true;
694
+ readonly reason: "system-mode brand slot above the status code (a Logo); the application shell already shows the brand.";
695
+ }];
588
696
  };
589
697
  readonly LegalDocumentSectionProp: {
590
698
  readonly group: "layout";
@@ -925,6 +1033,11 @@ export declare const COMPONENT_PROP_REGISTRY: {
925
1033
  readonly file: "components/data-display.prop.ts";
926
1034
  readonly vocabulary: readonly ["LabelProp", "ValueProp"];
927
1035
  };
1036
+ readonly AvatarProp: {
1037
+ readonly group: "data-display";
1038
+ readonly file: "components/data-display.prop.ts";
1039
+ readonly vocabulary: readonly ["AvatarShapeProp", "ChildrenProp", "ClassNameProp"];
1040
+ };
928
1041
  readonly BadgeProp: {
929
1042
  readonly group: "data-display";
930
1043
  readonly file: "components/data-display.prop.ts";
@@ -933,7 +1046,25 @@ export declare const COMPONENT_PROP_REGISTRY: {
933
1046
  readonly DataTableProp: {
934
1047
  readonly group: "data-display";
935
1048
  readonly file: "components/data-display.prop.ts";
936
- readonly vocabulary: readonly ["ColumnDefProp", "DensityProp", "SortStateProp", "SelectedIdsProp", "HandlerProp"];
1049
+ readonly vocabulary: readonly ["ColumnDefProp", "DensityProp", "SortStateProp", "SelectedIdsProp", "HandlerProp", "TablePresetProp", "TableColumnPriorityProp", "BreakpointProp"];
1050
+ };
1051
+ readonly ListRowDensityProp: {
1052
+ readonly group: "data-display";
1053
+ readonly file: "components/data-display.prop.ts";
1054
+ readonly vocabulary: readonly [];
1055
+ };
1056
+ readonly ListRowProp: {
1057
+ readonly group: "data-display";
1058
+ readonly file: "components/data-display.prop.ts";
1059
+ readonly vocabulary: readonly ["TitleProp", "DescriptionProp", "ClassNameProp", {
1060
+ readonly field: "density";
1061
+ readonly local: true;
1062
+ readonly reason: "ListRow-local density subset (default | compact) — the compact inline-actions geometry (#246). No `comfortable` step, and unrelated to PageDensityProp/TableDensityProp.";
1063
+ }, {
1064
+ readonly field: "overflow";
1065
+ readonly local: true;
1066
+ readonly reason: "Row-local overflow resolution for the title/description column (truncate | wrap, #224).";
1067
+ }];
937
1068
  };
938
1069
  readonly CredentialRevealProp: {
939
1070
  readonly group: "data-display";
@@ -1274,6 +1405,16 @@ export declare const COMPONENT_PROP_REGISTRY: {
1274
1405
  readonly file: "components/navigation.prop.ts";
1275
1406
  readonly vocabulary: readonly ["ValueProp", "DefaultValueProp", "SizeProp", "OnValueChangeProp", "ClassNameProp"];
1276
1407
  };
1408
+ readonly InputOTPGroupProp: {
1409
+ readonly group: "data-entry";
1410
+ readonly file: "components/data-entry.prop.ts";
1411
+ readonly vocabulary: readonly ["ClassNameProp"];
1412
+ };
1413
+ readonly InputOTPGroupAppearanceProp: {
1414
+ readonly group: "data-entry";
1415
+ readonly file: "components/data-entry.prop.ts";
1416
+ readonly vocabulary: readonly [];
1417
+ };
1277
1418
  readonly StepItemProp: {
1278
1419
  readonly group: "navigation";
1279
1420
  readonly file: "components/navigation.prop.ts";
@@ -192,10 +192,35 @@ const VOCABULARY_REGISTRY = {
192
192
  category: "layout",
193
193
  description: "CenteredShell column block alignment \u2014 start (flowing page), center (system surface)"
194
194
  },
195
+ CenteredShellPresetProp: {
196
+ file: "vocabulary/layout.prop.ts",
197
+ category: "layout",
198
+ description: "CenteredShell whole-page preset \u2014 default (untouched box) | public-landing (token-owned public landing measure, section rhythm, flat chrome and hero h1 tier)"
199
+ },
200
+ TablePresetProp: {
201
+ file: "vocabulary/data.prop.ts",
202
+ category: "data",
203
+ description: "Table collection preset \u2014 default | action-collection (dense approval/action queue: column-priority measures below the collapse step instead of desktop intrinsic widths)"
204
+ },
205
+ TableColumnPriorityProp: {
206
+ file: "vocabulary/data.prop.ts",
207
+ category: "data",
208
+ description: "Table column priority for the action-collection preset \u2014 primary | secondary | meta | actions (unset = takes the remaining space)"
209
+ },
210
+ ErrorSurfaceModeProp: {
211
+ file: "vocabulary/layout.prop.ts",
212
+ category: "layout",
213
+ description: "ErrorSurface shell contract \u2014 application (403/404 body inside the route's existing AppShell) vs system (500/503 owns the page via CenteredShell align=center)"
214
+ },
215
+ ErrorSurfaceStatusProp: {
216
+ file: "vocabulary/layout.prop.ts",
217
+ category: "layout",
218
+ description: "HTTP status an ErrorSurface presents \u2014 403 | 404 | 500 | 503 (numeric); drives the default icon, tone and mode"
219
+ },
195
220
  AuthShellPresetProp: {
196
221
  file: "vocabulary/layout.prop.ts",
197
222
  category: "layout",
198
- description: "AuthShell named flow measure \u2014 default | device-authorization (380px card, 5px mobile gutter) | context-selection (25rem card, edge-to-edge mobile) | account-recovery (432px SCR-008 recovery/MFA panel, 15px mobile gutter)"
223
+ description: "AuthShell named flow geometry \u2014 default | login (stable SCR-001 identity/card/footer anchor) | device-authorization (380px card, 5px mobile gutter) | context-selection (25rem card, edge-to-edge mobile) | account-recovery (432px SCR-008 recovery/MFA panel, 15px mobile gutter)"
199
224
  },
200
225
  GapProp: {
201
226
  file: "vocabulary/layout.prop.ts",
@@ -233,6 +258,11 @@ const VOCABULARY_REGISTRY = {
233
258
  category: "interaction",
234
259
  description: "Corner shape default | pill | sharp \u2014 shared by Button + Badge (radius tokens)"
235
260
  },
261
+ AvatarShapeProp: {
262
+ file: "vocabulary/interaction.prop.ts",
263
+ category: "interaction",
264
+ description: "Avatar geometry circle (person, --radius-pill) | square (entity-header organization/service mark, --avatar-square-* tokens) \u2014 a rounded rect ShapeProp cannot express"
265
+ },
236
266
  TextSizeProp: {
237
267
  file: "vocabulary/interaction.prop.ts",
238
268
  category: "interaction",
@@ -358,7 +388,7 @@ const VOCABULARY_REGISTRY = {
358
388
  ColumnDefProp: {
359
389
  file: "vocabulary/data.prop.ts",
360
390
  category: "data",
361
- description: "DataTable column definition"
391
+ description: 'DataTable column definition \u2014 key/header/render/sortable/align/width/pin/hiddenOnMobile/enableHiding/ariaLabel plus `priority` (TableColumnPriorityProp), read by DataTable preset="action-collection"'
362
392
  },
363
393
  SelectedIdsProp: {
364
394
  file: "vocabulary/data.prop.ts",
@@ -425,6 +455,16 @@ const COMPONENT_PROP_REGISTRY = {
425
455
  file: "components/layout.prop.ts",
426
456
  vocabulary: []
427
457
  },
458
+ PageContainerMeasureProp: {
459
+ group: "layout",
460
+ file: "components/layout.prop.ts",
461
+ vocabulary: []
462
+ },
463
+ PageContainerPresetProp: {
464
+ group: "layout",
465
+ file: "components/layout.prop.ts",
466
+ vocabulary: []
467
+ },
428
468
  PageContainerProp: {
429
469
  group: "layout",
430
470
  file: "components/layout.prop.ts",
@@ -440,6 +480,11 @@ const COMPONENT_PROP_REGISTRY = {
440
480
  field: "headerLayout",
441
481
  local: true,
442
482
  reason: "Header ARRANGEMENT of the title band vs the extra slot below the 640px step (stack | responsive-inline) \u2014 orthogonal to PageContainerVariantProp, which selects the page shell layout."
483
+ },
484
+ {
485
+ field: "measure",
486
+ local: true,
487
+ reason: "Bounded page MEASURE shared by the header and body (default | narrow | medium), backed by --page-measure-*. A third orthogonal axis: PageContainerVariantProp owns page CHROME, this owns the inline cap, so a quiet ghost page can also be measure-bounded."
443
488
  }
444
489
  ]
445
490
  },
@@ -454,7 +499,18 @@ const COMPONENT_PROP_REGISTRY = {
454
499
  "GapProp",
455
500
  { field: "align", local: true, reason: "Flex-specific align-items keyword subset." },
456
501
  { field: "justify", local: true, reason: "Flex-specific justify-content keyword subset." },
457
- { field: "wrap", local: true, reason: "Flex-specific boolean shorthand for flex-wrap." }
502
+ { field: "wrap", local: true, reason: "Flex-specific boolean shorthand for flex-wrap." },
503
+ "BreakpointProp",
504
+ {
505
+ field: "hideBelow",
506
+ local: true,
507
+ reason: "Responsive region visibility at a canonical breakpoint step \u2014 the public alternative to a page-local media query (gh#252)."
508
+ },
509
+ {
510
+ field: "hideFrom",
511
+ local: true,
512
+ reason: "Inverse of hideBelow \u2014 keeps a compact-only region off the wide layout."
513
+ }
458
514
  ]
459
515
  },
460
516
  ResponsiveGridColumnsProp: { group: "layout", file: "components/layout.prop.ts", vocabulary: [] },
@@ -596,6 +652,12 @@ const COMPONENT_PROP_REGISTRY = {
596
652
  }
597
653
  ]
598
654
  },
655
+ AuthAccountSummaryProp: {
656
+ group: "layout",
657
+ file: "components/layout.prop.ts",
658
+ vocabulary: ["DisabledProp", "ClassNameProp"],
659
+ local: ["email", "avatarSrc", "avatarFallback", "actionLabel", "onAction"]
660
+ },
599
661
  CenteredShellProp: {
600
662
  group: "layout",
601
663
  file: "components/layout.prop.ts",
@@ -603,7 +665,81 @@ const COMPONENT_PROP_REGISTRY = {
603
665
  "ChildrenProp",
604
666
  "ClassNameProp",
605
667
  "CenteredShellWidthProp",
606
- "CenteredShellAlignProp"
668
+ "CenteredShellAlignProp",
669
+ "CenteredShellPresetProp"
670
+ ]
671
+ },
672
+ ErrorSurfaceMaintenanceProp: {
673
+ group: "layout",
674
+ file: "components/layout.prop.ts",
675
+ vocabulary: [
676
+ {
677
+ field: "start",
678
+ local: true,
679
+ reason: "ISO 8601 instant starting the maintenance window; formatted via Intl.DateTimeFormat and emitted as the <time dateTime> value."
680
+ },
681
+ {
682
+ field: "end",
683
+ local: true,
684
+ reason: "ISO 8601 instant ending the window; omitted for an open-ended outage."
685
+ },
686
+ {
687
+ field: "timeZone",
688
+ local: true,
689
+ reason: "IANA time zone id the window is presented in \u2014 explicit so SSR and client output cannot diverge."
690
+ },
691
+ {
692
+ field: "progress",
693
+ local: true,
694
+ reason: "Server-sent 0\u2013100 completion of the maintenance window; deriving it from the client clock would break hydration."
695
+ }
696
+ ]
697
+ },
698
+ ErrorSurfaceProp: {
699
+ group: "layout",
700
+ file: "components/layout.prop.ts",
701
+ vocabulary: [
702
+ "ErrorSurfaceModeProp",
703
+ "ErrorSurfaceStatusProp",
704
+ "TitleProp",
705
+ "DescriptionProp",
706
+ "ActionProp",
707
+ "IconProp",
708
+ "HeadingLevelProp",
709
+ "FooterProp",
710
+ "CenteredShellWidthProp",
711
+ "IdProp",
712
+ "ClassNameProp",
713
+ {
714
+ field: "tone",
715
+ local: true,
716
+ reason: "Reuses the EmptyStateToneProp union verbatim (the surface renders an EmptyState) \u2014 a status-derived default the consumer may override, not a new tone vocabulary."
717
+ },
718
+ {
719
+ field: "requestId",
720
+ local: true,
721
+ reason: "Support correlation id for the failure, rendered as a mono/tabular metadata row \u2014 an identifier, not a LabelProp."
722
+ },
723
+ {
724
+ field: "permission",
725
+ local: true,
726
+ reason: "The permission/role the viewer is missing (403). The localized label is the surface's; the value is the bare permission name."
727
+ },
728
+ {
729
+ field: "organization",
730
+ local: true,
731
+ reason: "The organization/tenant the failed request was scoped to \u2014 disambiguates a wrong-workspace 403 from a missing-role 403."
732
+ },
733
+ {
734
+ field: "maintenance",
735
+ local: true,
736
+ reason: "ErrorSurfaceMaintenanceProp timing/progress slot (ISO 8601 + IANA), formatted with Intl.DateTimeFormat."
737
+ },
738
+ {
739
+ field: "brand",
740
+ local: true,
741
+ reason: "system-mode brand slot above the status code (a Logo); the application shell already shows the brand."
742
+ }
607
743
  ]
608
744
  },
609
745
  LegalDocumentSectionProp: {
@@ -1048,6 +1184,11 @@ const COMPONENT_PROP_REGISTRY = {
1048
1184
  file: "components/data-display.prop.ts",
1049
1185
  vocabulary: ["LabelProp", "ValueProp"]
1050
1186
  },
1187
+ AvatarProp: {
1188
+ group: "data-display",
1189
+ file: "components/data-display.prop.ts",
1190
+ vocabulary: ["AvatarShapeProp", "ChildrenProp", "ClassNameProp"]
1191
+ },
1051
1192
  BadgeProp: {
1052
1193
  group: "data-display",
1053
1194
  file: "components/data-display.prop.ts",
@@ -1056,7 +1197,40 @@ const COMPONENT_PROP_REGISTRY = {
1056
1197
  DataTableProp: {
1057
1198
  group: "data-display",
1058
1199
  file: "components/data-display.prop.ts",
1059
- vocabulary: ["ColumnDefProp", "DensityProp", "SortStateProp", "SelectedIdsProp", "HandlerProp"]
1200
+ vocabulary: [
1201
+ "ColumnDefProp",
1202
+ "DensityProp",
1203
+ "SortStateProp",
1204
+ "SelectedIdsProp",
1205
+ "HandlerProp",
1206
+ "TablePresetProp",
1207
+ "TableColumnPriorityProp",
1208
+ "BreakpointProp"
1209
+ ]
1210
+ },
1211
+ ListRowDensityProp: {
1212
+ group: "data-display",
1213
+ file: "components/data-display.prop.ts",
1214
+ vocabulary: []
1215
+ },
1216
+ ListRowProp: {
1217
+ group: "data-display",
1218
+ file: "components/data-display.prop.ts",
1219
+ vocabulary: [
1220
+ "TitleProp",
1221
+ "DescriptionProp",
1222
+ "ClassNameProp",
1223
+ {
1224
+ field: "density",
1225
+ local: true,
1226
+ reason: "ListRow-local density subset (default | compact) \u2014 the compact inline-actions geometry (#246). No `comfortable` step, and unrelated to PageDensityProp/TableDensityProp."
1227
+ },
1228
+ {
1229
+ field: "overflow",
1230
+ local: true,
1231
+ reason: "Row-local overflow resolution for the title/description column (truncate | wrap, #224)."
1232
+ }
1233
+ ]
1060
1234
  },
1061
1235
  CredentialRevealProp: {
1062
1236
  group: "data-display",
@@ -1362,6 +1536,16 @@ const COMPONENT_PROP_REGISTRY = {
1362
1536
  file: "components/navigation.prop.ts",
1363
1537
  vocabulary: ["ValueProp", "DefaultValueProp", "SizeProp", "OnValueChangeProp", "ClassNameProp"]
1364
1538
  },
1539
+ InputOTPGroupProp: {
1540
+ group: "data-entry",
1541
+ file: "components/data-entry.prop.ts",
1542
+ vocabulary: ["ClassNameProp"]
1543
+ },
1544
+ InputOTPGroupAppearanceProp: {
1545
+ group: "data-entry",
1546
+ file: "components/data-entry.prop.ts",
1547
+ vocabulary: []
1548
+ },
1365
1549
  StepItemProp: {
1366
1550
  group: "navigation",
1367
1551
  file: "components/navigation.prop.ts",
@@ -40,6 +40,17 @@ export type ColumnDefProp<T> = {
40
40
  * separating shadow. Pin at most one column per table.
41
41
  */
42
42
  pin?: "end";
43
+ /**
44
+ * Relative importance of the column, read ONLY by `DataTable preset="action-collection"`
45
+ * (gh#253). It is the SAME contract the `Table` primitive exposes on `TableHead`/`TableCell`:
46
+ * DataTable stamps it onto both cells of the column for you, so the preset can swap the desktop
47
+ * intrinsic widths for the token-owned priority measures (`--table-action-collection-*`) instead
48
+ * of scrolling a five-column approval queue sideways at 390px. Leave the free-text column
49
+ * unmarked — it takes the remaining space. Emitted as `data-priority` only when set, so an
50
+ * ordinary column gains no attribute. Prefer this over `width` under the preset: an explicit
51
+ * `width` utility wins the cascade and defeats the priority measure.
52
+ */
53
+ priority?: TableColumnPriorityProp;
43
54
  };
44
55
  /** Set of selected row IDs. */
45
56
  export type SelectedIdsProp = Set<string>;
@@ -64,3 +75,19 @@ export type HasActiveFiltersProp = boolean;
64
75
  * offset/background are tuned via the `--filter-bar-sticky-*` theme knobs.
65
76
  */
66
77
  export type StickyProp = boolean;
78
+ /**
79
+ * Table named collection preset. `"default"` keeps the plain table (and emits no attribute).
80
+ * `"action-collection"` is the canonical dense approval / action queue: below `collapseBelow`
81
+ * the desktop intrinsic column widths are replaced by token-owned column-PRIORITY measures under
82
+ * `table-layout: fixed` and cells wrap, so every column — including the row actions — stays inside
83
+ * the initial narrow frame. The real `<table>` semantics are never rewritten.
84
+ */
85
+ export type TablePresetProp = "default" | "action-collection";
86
+ /**
87
+ * Relative importance of a table column, used by `preset="action-collection"` to allocate the
88
+ * narrow-frame measure. `"primary"` is the row's subject, `"secondary"` its object/target,
89
+ * `"meta"` a low-priority stamp (dates, ids), `"actions"` the row-action affordance whose measure
90
+ * is reserved first so it can never be pushed outside the viewport. A column with no priority
91
+ * takes the remaining space (the free-text column).
92
+ */
93
+ export type TableColumnPriorityProp = "primary" | "secondary" | "meta" | "actions";
@@ -1,7 +1,7 @@
1
1
  /** Barrel — all vocabulary prop types. */
2
2
  export type { ClassNameProp, ChildrenProp, IdProp, OpenProp, DefaultOpenProp, OnOpenChangeProp, HandlerProp, PendingProp, RequiredProp, DisabledProp, LabelProp, HelperProp, ErrorProp, PlaceholderProp, NameProp, ValueProp, DefaultValueProp, OnValueChangeProp, OnChangeProp, OnClickProp, AsChildProp, WidthProp, } from "./shared.prop.js";
3
3
  export type { TitleProp, SubtitleProp, DescriptionProp, ExtraProp, FooterProp, ActionProp, IconProp, ConfirmLabelProp, CancelLabelProp, ActionsProp, EmptyMessageProp, } from "./content.prop.js";
4
- export type { PageDensityProp, PageContainerVariantProp, CenteredShellWidthProp, CenteredShellAlignProp, AuthShellPresetProp, TableDensityProp, DensityProp, GapProp, } from "./layout.prop.js";
5
- export type { ButtonVariantProp, ButtonSizeProp, BadgeVariantProp, AppSettingPickerAppearanceProp, ShapeProp, TextSizeProp, TextToneProp, FontWeightProp, HeadingLevelProp, TextAlignProp, SizeProp, FormLayoutProp, BreakpointProp, ConfirmVariantProp, ToneProp, AlertVariantProp, SortDirectionProp, ColumnAlignProp, SortStateProp, RevealDelayProp, } from "./interaction.prop.js";
4
+ export type { PageDensityProp, PageContainerVariantProp, CenteredShellWidthProp, CenteredShellAlignProp, CenteredShellPresetProp, ErrorSurfaceModeProp, ErrorSurfaceStatusProp, AuthShellPresetProp, TableDensityProp, DensityProp, GapProp, } from "./layout.prop.js";
5
+ export type { ButtonVariantProp, ButtonSizeProp, BadgeVariantProp, AppSettingPickerAppearanceProp, ShapeProp, AvatarShapeProp, TextSizeProp, TextToneProp, FontWeightProp, HeadingLevelProp, TextAlignProp, SizeProp, FormLayoutProp, BreakpointProp, ConfirmVariantProp, ToneProp, AlertVariantProp, SortDirectionProp, ColumnAlignProp, SortStateProp, RevealDelayProp, } from "./interaction.prop.js";
6
6
  export type { BreadcrumbItemProp, BreadcrumbProp } from "./navigation.prop.js";
7
- export type { GetRowIdProp, OnRowClickProp, ColumnDefProp, SelectedIdsProp, OnSelectChangeProp, OnTableDensityChangeProp, OnSortChangeProp, OnSearchChangeProp, OnClearFiltersProp, HasActiveFiltersProp, StickyProp, } from "./data.prop.js";
7
+ export type { GetRowIdProp, OnRowClickProp, ColumnDefProp, TablePresetProp, TableColumnPriorityProp, SelectedIdsProp, OnSelectChangeProp, OnTableDensityChangeProp, OnSortChangeProp, OnSearchChangeProp, OnClearFiltersProp, HasActiveFiltersProp, StickyProp, } from "./data.prop.js";
@@ -7,6 +7,15 @@ export type ButtonVariantProp = "default" | "destructive" | "outline" | "dashed"
7
7
  /** Corner shape — maps to the radius tokens (default = control/component radius). Shared by
8
8
  * Button + Badge. `pill` = fully rounded (`--radius-pill`), `sharp` = square (`--radius-sharp`). */
9
9
  export type ShapeProp = "default" | "pill" | "sharp";
10
+ /**
11
+ * Avatar geometry — WHAT the mark represents, not just its corner radius, which is why it is a
12
+ * separate vocabulary from the control `ShapeProp` (`default | pill | sharp`): an entity mark is a
13
+ * ROUNDED rect, a value `ShapeProp` cannot express (its `sharp` = `--radius-sharp` = 0).
14
+ * - `circle` (default) — a person: the fully-round `--radius-pill` identity avatar.
15
+ * - `square` — an organization / service entity mark for an entity header: the compact rounded
16
+ * square on the brand surface (`--avatar-square-*` tokens).
17
+ */
18
+ export type AvatarShapeProp = "circle" | "square";
10
19
  /** Text size — steps of the golden-ratio type scale (NEVER an arbitrary px). `sm` = base. */
11
20
  export type TextSizeProp = "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
12
21
  /** Text colour intent — maps to semantic foreground tokens (no raw palette). */
@@ -17,18 +17,49 @@ export type CenteredShellWidthProp = "sm" | "md" | "lg";
17
17
  * maintenance notice) — the geometry stays package-owned, so no consumer `min-h-dvh` / flex CSS.
18
18
  */
19
19
  export type CenteredShellAlignProp = "start" | "center";
20
+ /**
21
+ * ErrorSurface shell contract — WHERE the exception surface lives, not how it looks.
22
+ *
23
+ * `"application"` (403 / 404): the failure happened INSIDE the authenticated app, so the surface is
24
+ * the page BODY of the `AppShell` the route already renders. It never reconstructs nav chrome — a
25
+ * component cannot manufacture the sidebar/topbar/user menu, which are consumer-owned; it renders
26
+ * as `AppShell`'s children (usually inside a `PageContainer`) so the shell is PRESERVED and the
27
+ * user is never stranded chrome-less.
28
+ *
29
+ * `"system"` (500 / 503): the app itself failed — session and nav data may be gone — so the surface
30
+ * owns the whole page and renders package-owned viewport-centred geometry
31
+ * (`CenteredShell align="center"`), with no consumer `min-h-dvh` / flex CSS at 1440 / 1024 / 390.
32
+ */
33
+ export type ErrorSurfaceModeProp = "application" | "system";
34
+ /**
35
+ * The HTTP status an ErrorSurface presents. Deliberately closed to the four exception pages every
36
+ * app ships (RFC 9110 §15.5.4 / §15.5.5 / §15.6.1 / §15.6.4); it drives the default icon, tone and
37
+ * the recommended `mode`. A number, never a string — it is the numeric status, and it is rendered
38
+ * with tabular figures.
39
+ */
40
+ export type ErrorSurfaceStatusProp = 403 | 404 | 500 | 503;
20
41
  /**
21
42
  * AuthShell named flow preset — the page MEASURE contract for a canonical hosted-identity flow
22
43
  * (card max-width plus the desktop and mobile page gutters), owned by component tokens.
23
- * `"default"` keeps the shell's own measure; `"device-authorization"` is the 380px device-grant
24
- * measure with a 5px mobile inline gutter; `"context-selection"` is the 25rem organisation/context
25
- * picker measure that goes edge-to-edge on mobile; `"account-recovery"` is the 432px SCR-008
26
- * measure shared by the password-recovery and sign-in MFA challenge panels (15px mobile inline
27
- * gutter). Orthogonal to AuthShell's `variant` (which owns control density and heading size)
28
- * combine them.
44
+ * `"default"` keeps the shell's own measure; `"login"` owns SCR-001's stable card anchor for
45
+ * standalone and requester flows; `"device-authorization"` is the 380px device-grant measure with
46
+ * a 5px mobile inline gutter; `"context-selection"` is the 25rem organisation/context picker
47
+ * measure that goes edge-to-edge on mobile; `"account-recovery"` is the 432px SCR-008 measure
48
+ * shared by the password-recovery and sign-in MFA challenge panels (15px mobile inline gutter).
49
+ * Orthogonal to AuthShell's `variant` (which owns control density and heading size) — combine them.
29
50
  */
30
- export type AuthShellPresetProp = "default" | "device-authorization" | "context-selection" | "account-recovery";
51
+ export type AuthShellPresetProp = "default" | "login" | "device-authorization" | "context-selection" | "account-recovery";
31
52
  /** Shared gap between layout children; components may document subsets. */
32
53
  export type GapProp = "xs" | "sm" | "md" | "lg" | "xl";
33
54
  /** DataTable row density subset. */
34
55
  export type TableDensityProp = Exclude<DensityProp, "default">;
56
+ /**
57
+ * CenteredShell named page preset — the token-owned SHELL geometry of a whole page shape.
58
+ * `"default"` keeps the shell's own box (and emits no attribute at all, so it can match no rule).
59
+ * `"public-landing"` is the PUBLIC marketing / product landing contract: one content measure
60
+ * shared by the header bar, the centred column and the footer, the section rhythm between page
61
+ * sections, the flat (elevation-free) public-surface chrome and the hero heading tier — all owned
62
+ * by `--centered-shell-landing-*` knobs so the landing COMPOSITION (hero, nav, sections, footer —
63
+ * each of which fails the Framework-Component Test) needs no page-local CSS.
64
+ */
65
+ export type CenteredShellPresetProp = "default" | "public-landing";
@@ -745,6 +745,34 @@
745
745
  border-start-end-radius: var(--radius-md);
746
746
  border-end-end-radius: var(--radius-md);
747
747
  }
748
+ .ui-otp-group[data-appearance="grouped"] {
749
+ overflow: hidden;
750
+ border: 1px solid hsl(var(--border));
751
+ border-radius: var(--radius-md);
752
+ background: hsl(var(--background));
753
+ }
754
+ .ui-otp-group[data-appearance="grouped"] .ui-otp-slot {
755
+ border: 0;
756
+ border-radius: 0;
757
+ background: transparent;
758
+ }
759
+ .ui-otp-group[data-appearance="grouped"] .ui-otp-slot[data-active="true"] {
760
+ box-shadow: none;
761
+ }
762
+ .ui-otp-group[data-appearance="grouped"]:has(.ui-otp-slot[data-active="true"]) {
763
+ border-color: hsl(var(--focus-ring-color, var(--ring)));
764
+ box-shadow: 0 0 0 var(--focus-ring-width) hsl(var(--focus-ring-color, var(--ring)));
765
+ }
766
+ .ui-otp-container:has(.ui-otp-input[aria-invalid="true"]) .ui-otp-group[data-appearance="grouped"] {
767
+ border-color: hsl(var(--destructive));
768
+ }
769
+ .ui-otp-container:has(.ui-otp-input[aria-invalid="true"])
770
+ .ui-otp-group[data-appearance="grouped"]:has(.ui-otp-slot[data-active="true"]) {
771
+ box-shadow: 0 0 0 var(--focus-ring-width) hsl(var(--destructive));
772
+ }
773
+ .ui-otp-container:has(.ui-otp-input:disabled) .ui-otp-group[data-appearance="grouped"] {
774
+ background: hsl(var(--muted));
775
+ }
748
776
  .ui-otp-slot[data-active="true"] {
749
777
  z-index: 1;
750
778
  box-shadow: 0 0 0 var(--focus-ring-width) hsl(var(--focus-ring-color, var(--ring)));