@godxjp/ui 18.9.0 → 18.11.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 (73) hide show
  1. package/LICENSE +202 -0
  2. package/dist/components/data-display/badge.d.ts +7 -0
  3. package/dist/components/data-display/badge.js +1 -1
  4. package/dist/components/data-display/data-table.js +2 -2
  5. package/dist/components/data-display/index.d.ts +2 -0
  6. package/dist/components/data-display/index.js +2 -0
  7. package/dist/components/data-display/permission-matrix.d.ts +26 -0
  8. package/dist/components/data-display/permission-matrix.js +219 -0
  9. package/dist/components/data-display/table.d.ts +12 -0
  10. package/dist/components/data-entry/branch-scope-picker.d.ts +43 -0
  11. package/dist/components/data-entry/branch-scope-picker.js +200 -0
  12. package/dist/components/data-entry/index.d.ts +2 -0
  13. package/dist/components/data-entry/index.js +2 -0
  14. package/dist/components/data-entry/select.d.ts +7 -1
  15. package/dist/components/data-entry/select.js +46 -26
  16. package/dist/components/feedback/alert.d.ts +2 -20
  17. package/dist/components/feedback/alert.js +1 -11
  18. package/dist/components/feedback/banner.d.ts +21 -0
  19. package/dist/components/feedback/banner.js +19 -0
  20. package/dist/components/feedback/index.d.ts +4 -2
  21. package/dist/components/feedback/index.js +2 -2
  22. package/dist/components/general/typography.d.ts +1 -0
  23. package/dist/components/general/typography.js +32 -13
  24. package/dist/components/layout/auth-shell.d.ts +2 -2
  25. package/dist/components/layout/index.d.ts +2 -2
  26. package/dist/components/layout/index.js +2 -2
  27. package/dist/components/layout/page-container.d.ts +1 -1
  28. package/dist/components/layout/page-container.js +61 -15
  29. package/dist/components/layout/resizable.d.ts +1 -1
  30. package/dist/components/layout/resizable.js +26 -8
  31. package/dist/components/layout/service-role-panel.d.ts +25 -0
  32. package/dist/components/layout/service-role-panel.js +206 -0
  33. package/dist/components/navigation/filter-bar.d.ts +2 -2
  34. package/dist/components/navigation/filter-bar.js +113 -34
  35. package/dist/components/navigation/index.d.ts +1 -1
  36. package/dist/components/navigation/pagination.js +20 -1
  37. package/dist/components/navigation/tabs.js +6 -1
  38. package/dist/i18n/messages/en.json +59 -4
  39. package/dist/i18n/messages/ja.json +54 -5
  40. package/dist/i18n/messages/vi.json +53 -4
  41. package/dist/lib/field-a11y.d.ts +7 -0
  42. package/dist/lib/field-a11y.js +6 -0
  43. package/dist/lib/hooks.d.ts +15 -0
  44. package/dist/lib/hooks.js +37 -0
  45. package/dist/props/components/data-display.prop.d.ts +66 -0
  46. package/dist/props/components/data-entry.prop.d.ts +54 -0
  47. package/dist/props/components/feedback.prop.d.ts +3 -3
  48. package/dist/props/components/general.prop.d.ts +8 -1
  49. package/dist/props/components/layout.prop.d.ts +80 -51
  50. package/dist/props/components/navigation.prop.d.ts +77 -50
  51. package/dist/props/registry.d.ts +274 -54
  52. package/dist/props/registry.js +362 -73
  53. package/dist/props/vocabulary/content.prop.d.ts +5 -0
  54. package/dist/props/vocabulary/index.d.ts +1 -1
  55. package/dist/props/vocabulary/interaction.prop.d.ts +4 -7
  56. package/dist/props/vocabulary/layout.prop.d.ts +2 -2
  57. package/dist/styles/alert-layout.css +15 -32
  58. package/dist/styles/badge-layout.css +5 -0
  59. package/dist/styles/control.css +5 -0
  60. package/dist/styles/layout.css +118 -108
  61. package/dist/styles/shell-layout.css +16 -7
  62. package/dist/styles/table-layout.css +92 -2
  63. package/dist/styles/text-layout.css +13 -0
  64. package/dist/tokens/base.css +1 -0
  65. package/dist/tokens/components/badge.css +5 -0
  66. package/dist/tokens/components/banner.css +16 -0
  67. package/dist/tokens/components/navigation.css +10 -25
  68. package/dist/tokens/components/shell.css +20 -9
  69. package/dist/tokens/components/table.css +41 -1
  70. package/dist/tokens/semantic/layout.css +8 -7
  71. package/package.json +15 -2
  72. package/dist/components/layout/page-header.d.ts +0 -22
  73. package/dist/components/layout/page-header.js +0 -89
@@ -124,6 +124,11 @@ export declare const VOCABULARY_REGISTRY: {
124
124
  readonly category: "content";
125
125
  readonly description: "Secondary line under title";
126
126
  };
127
+ readonly StatusProp: {
128
+ readonly file: "vocabulary/content.prop.ts";
129
+ readonly category: "content";
130
+ readonly description: "Status/meta band beside a title (StatusBadge, meta text)";
131
+ };
127
132
  readonly DescriptionProp: {
128
133
  readonly file: "vocabulary/content.prop.ts";
129
134
  readonly category: "content";
@@ -222,7 +227,7 @@ export declare const VOCABULARY_REGISTRY: {
222
227
  readonly AuthShellPresetProp: {
223
228
  readonly file: "vocabulary/layout.prop.ts";
224
229
  readonly category: "layout";
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)";
230
+ readonly description: "AuthShell named flow geometry — default | login (stable SCR-001 identity/card/footer anchor) | registration (360px SCR-002 sign-up measure, start-aligned long-form scroll, own footer clearance, 15px mobile gutter) | 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)";
226
231
  };
227
232
  readonly GapProp: {
228
233
  readonly file: "vocabulary/layout.prop.ts";
@@ -322,7 +327,7 @@ export declare const VOCABULARY_REGISTRY: {
322
327
  readonly AlertVariantProp: {
323
328
  readonly file: "vocabulary/interaction.prop.ts";
324
329
  readonly category: "interaction";
325
- readonly description: "Inline Alert banner tone";
330
+ readonly description: "Alert structural axis: default inline card | banner full-bleed strip";
326
331
  };
327
332
  readonly SortDirectionProp: {
328
333
  readonly file: "vocabulary/interaction.prop.ts";
@@ -461,34 +466,13 @@ export declare const COMPONENT_PROP_REGISTRY: {
461
466
  readonly file: "components/layout.prop.ts";
462
467
  readonly vocabulary: readonly [];
463
468
  };
464
- readonly PageHeaderProp: {
465
- readonly group: "layout";
466
- readonly file: "components/layout.prop.ts";
467
- readonly vocabulary: readonly ["TitleProp", "SubtitleProp", "ExtraProp", "BreadcrumbProp", {
468
- readonly field: "meta";
469
- readonly local: true;
470
- readonly reason: "Status/meta band rendered inline with the `<h1>` (a Badge tone, a record id, a timestamp). A free ReactNode slot, not a controlled value — the header never interprets what it holds.";
471
- }, {
472
- readonly field: "layout";
473
- readonly local: true;
474
- readonly reason: "Header ARRANGEMENT of the title band vs the extra slot below the 640px step (stack | responsive-inline) — the standalone spelling of PageContainer's `headerLayout`.";
475
- }, {
476
- readonly field: "loading";
477
- readonly local: true;
478
- readonly reason: "Pending state of the TITLE BAND only (skeleton title/subtitle + aria-busy), distinct from a page-wide DataState: breadcrumbs and actions come from the route and stay live while the record resolves.";
479
- }];
480
- };
481
469
  readonly PageContainerProp: {
482
470
  readonly group: "layout";
483
471
  readonly file: "components/layout.prop.ts";
484
- readonly vocabulary: readonly ["TitleProp", "SubtitleProp", "ExtraProp", "FooterProp", "BreadcrumbProp", "DensityProp", "PageContainerVariantProp", {
485
- readonly field: "meta";
486
- readonly local: true;
487
- readonly reason: "Forwarded verbatim to PageHeader's `meta` slot — see PageHeaderProp.";
488
- }, {
472
+ readonly vocabulary: readonly ["TitleProp", "SubtitleProp", "StatusProp", "ExtraProp", "FooterProp", "BreadcrumbProp", "DensityProp", "PageContainerVariantProp", {
489
473
  readonly field: "headerLoading";
490
474
  readonly local: true;
491
- readonly reason: "Forwarded to PageHeader's `loading`. Named for the BAND it skeletonises, so it can never be read as a page-wide loading flag (that is DataState's job).";
475
+ readonly reason: "Pending state of the TITLE BAND only (skeleton title/subtitle + aria-busy on the header). Named for the BAND it skeletonises, so it can never be read as a page-wide loading flag (that is DataState's job); breadcrumbs and `extra` come from the route and stay live while the record resolves.";
492
476
  }, {
493
477
  readonly field: "headerLayout";
494
478
  readonly local: true;
@@ -1418,41 +1402,27 @@ export declare const COMPONENT_PROP_REGISTRY: {
1418
1402
  readonly ToolbarProp: {
1419
1403
  readonly group: "navigation";
1420
1404
  readonly file: "components/navigation.prop.ts";
1421
- readonly vocabulary: readonly ["OnClearFiltersProp", "HasActiveFiltersProp", "StickyProp", "ClassNameProp", "ChildrenProp", {
1422
- readonly field: "search";
1423
- readonly local: true;
1424
- readonly reason: "SLOT for the caller's own search control, positioned at the start of the row and measured by --filter-bar-search-width. Not a value/onValueChange pair: the bar owns the search's PLACE and WIDTH, never its state (gh#258).";
1425
- }, {
1426
- readonly field: "chips";
1427
- readonly local: true;
1428
- readonly reason: "APPLIED filters as removable chips — the visible record of filters already in effect, distinct from the controls that set them. A bar-specific shape (id/label/onRemove), not a shared vocabulary type (gh#258).";
1429
- }, {
1430
- readonly field: "onChipRemove";
1431
- readonly local: true;
1432
- readonly reason: "Chip-removal callback keyed by chip id. Not `onValueChange`: it reports ONE lifted filter rather than the bar's whole value, which the bar deliberately does not hold (gh#258).";
1433
- }, {
1434
- readonly field: "resultCount";
1435
- readonly local: true;
1436
- readonly reason: "Number of records the current filters resolve to, announced in a polite live region and formatted via Intl.NumberFormat + CLDR plurals. Presentational output, not a controlled value (gh#258).";
1437
- }, {
1438
- readonly field: "actions";
1439
- readonly local: true;
1440
- readonly reason: "Trailing action SLOT (export, column settings, saved views), ordered AFTER the reset control by the bar so `clear filters` never sits beside an unrelated primary action (gh#258).";
1441
- }];
1405
+ readonly vocabulary: readonly ["OnClearFiltersProp", "HasActiveFiltersProp", "StickyProp", "ActionsProp", "PendingProp", "DisabledProp", "ErrorProp", "ClassNameProp", "ChildrenProp"];
1442
1406
  };
1443
- readonly FilterBarChipProp: {
1407
+ readonly FilterBarOverflowProp: {
1444
1408
  readonly group: "navigation";
1445
1409
  readonly file: "components/navigation.prop.ts";
1446
- readonly vocabulary: readonly ["IdProp", "LabelProp", {
1447
- readonly field: "onRemove";
1448
- readonly local: true;
1449
- readonly reason: "Per-chip removal. Omitting it is meaningful — the chip renders with NO remove control (a filter the user may not lift), rather than a disabled button that is a dead tab stop (gh#258).";
1450
- }];
1410
+ readonly vocabulary: readonly [];
1451
1411
  };
1452
- readonly FilterBarOverflowProp: {
1412
+ readonly FilterBarSearchProp: {
1453
1413
  readonly group: "navigation";
1454
1414
  readonly file: "components/navigation.prop.ts";
1455
- readonly vocabulary: readonly [];
1415
+ readonly vocabulary: readonly ["PlaceholderProp", "IdProp", "DisabledProp"];
1416
+ };
1417
+ readonly FilterBarFilterProp: {
1418
+ readonly group: "navigation";
1419
+ readonly file: "components/navigation.prop.ts";
1420
+ readonly vocabulary: readonly ["LabelProp", "PlaceholderProp", "DisabledProp"];
1421
+ };
1422
+ readonly FilterBarChipProp: {
1423
+ readonly group: "navigation";
1424
+ readonly file: "components/navigation.prop.ts";
1425
+ readonly vocabulary: readonly ["DisabledProp"];
1456
1426
  };
1457
1427
  readonly ToolbarGroupProp: {
1458
1428
  readonly group: "navigation";
@@ -1664,6 +1634,256 @@ export declare const COMPONENT_PROP_REGISTRY: {
1664
1634
  readonly file: "components/layout/split-pane.tsx";
1665
1635
  readonly vocabulary: readonly ["ClassNameProp", "ChildrenProp"];
1666
1636
  };
1637
+ readonly PermissionMatrixRoleProp: {
1638
+ readonly group: "data-display";
1639
+ readonly file: "components/data-display.prop.ts";
1640
+ readonly vocabulary: readonly ["IdProp", {
1641
+ readonly field: "name";
1642
+ readonly local: true;
1643
+ readonly reason: "Consumer-supplied role display name; a plain string so it can label cells for AT.";
1644
+ }, {
1645
+ readonly field: "description";
1646
+ readonly local: true;
1647
+ readonly reason: "Secondary caption under the role column header.";
1648
+ }, {
1649
+ readonly field: "locked";
1650
+ readonly local: true;
1651
+ readonly reason: "Per-role read-only flag — a locked role keeps ✓/— cells in an editable matrix.";
1652
+ }];
1653
+ };
1654
+ readonly PermissionMatrixPermissionProp: {
1655
+ readonly group: "data-display";
1656
+ readonly file: "components/data-display.prop.ts";
1657
+ readonly vocabulary: readonly ["IdProp", {
1658
+ readonly field: "name";
1659
+ readonly local: true;
1660
+ readonly reason: "Consumer-supplied permission display name; plain string for accessible labels.";
1661
+ }, {
1662
+ readonly field: "description";
1663
+ readonly local: true;
1664
+ readonly reason: "Secondary line under the permission name.";
1665
+ }, {
1666
+ readonly field: "group";
1667
+ readonly local: true;
1668
+ readonly reason: "Optional category caption for the permission row.";
1669
+ }];
1670
+ };
1671
+ readonly PermissionMatrixGrantsProp: {
1672
+ readonly group: "data-display";
1673
+ readonly file: "components/data-display.prop.ts";
1674
+ readonly vocabulary: readonly [{
1675
+ readonly field: "grants";
1676
+ readonly local: true;
1677
+ readonly reason: "The role×permission grant relation — the grantKey Set from lib/permission-grid or a pair array normalized through the same encoding.";
1678
+ }];
1679
+ };
1680
+ readonly PermissionMatrixProp: {
1681
+ readonly group: "data-display";
1682
+ readonly file: "components/data-display.prop.ts";
1683
+ readonly vocabulary: readonly ["LabelProp", "HandlerProp", "ClassNameProp", "IdProp", {
1684
+ readonly field: "roles";
1685
+ readonly local: true;
1686
+ readonly reason: "Consumer-supplied role columns (see PermissionMatrixRoleProp).";
1687
+ }, {
1688
+ readonly field: "permissions";
1689
+ readonly local: true;
1690
+ readonly reason: "Consumer-supplied permission rows (see PermissionMatrixPermissionProp).";
1691
+ }, {
1692
+ readonly field: "grants";
1693
+ readonly local: true;
1694
+ readonly reason: "The grant relation (see PermissionMatrixGrantsProp).";
1695
+ }, {
1696
+ readonly field: "onGrantChange";
1697
+ readonly local: true;
1698
+ readonly reason: "Cell toggle handler carrying the (roleId, permissionId, granted) triple; its presence switches the grid from read-only ✓/— to editable checkboxes.";
1699
+ }, {
1700
+ readonly field: "readOnly";
1701
+ readonly local: true;
1702
+ readonly reason: "Forces the read-only grid even when onGrantChange is present (viewer permission).";
1703
+ }, {
1704
+ readonly field: "compare";
1705
+ readonly local: true;
1706
+ readonly reason: "Two role ids compared side by side — the lib/permission-grid ComparePair.";
1707
+ }, {
1708
+ readonly field: "diffOnly";
1709
+ readonly local: true;
1710
+ readonly reason: "差分のみ filter: with compare set, keep only the rows where the two roles differ.";
1711
+ }, {
1712
+ readonly field: "loading";
1713
+ readonly local: true;
1714
+ readonly reason: "Read-lifecycle skeleton state mirroring DataTable #216 (precedence loading → denied → error → empty).";
1715
+ }, {
1716
+ readonly field: "empty";
1717
+ readonly local: true;
1718
+ readonly reason: "Custom empty content override, mirroring DataTable's empty slot.";
1719
+ }, {
1720
+ readonly field: "error";
1721
+ readonly local: true;
1722
+ readonly reason: "Read-failure state mirroring DataTable #216 (true = built-in localized message).";
1723
+ }, {
1724
+ readonly field: "denied";
1725
+ readonly local: true;
1726
+ readonly reason: "Permission-denied read state mirroring DataTable #216 — refused, not failed.";
1727
+ }, {
1728
+ readonly field: "onRetry";
1729
+ readonly local: true;
1730
+ readonly reason: "Retry affordance for the built-in error state, mirroring DataTable #216.";
1731
+ }];
1732
+ };
1733
+ readonly BranchScopeModeProp: {
1734
+ readonly group: "data-entry";
1735
+ readonly file: "components/data-entry.prop.ts";
1736
+ readonly vocabulary: readonly [{
1737
+ readonly field: "mode";
1738
+ readonly local: true;
1739
+ readonly reason: "Closed scope vocabulary: all branches vs an explicit subset.";
1740
+ }];
1741
+ };
1742
+ readonly BranchScopeValueProp: {
1743
+ readonly group: "data-entry";
1744
+ readonly file: "components/data-entry.prop.ts";
1745
+ readonly vocabulary: readonly [{
1746
+ readonly field: "mode";
1747
+ readonly local: true;
1748
+ readonly reason: "The selected scope mode (see BranchScopeModeProp).";
1749
+ }, {
1750
+ readonly field: "branchIds";
1751
+ readonly local: true;
1752
+ readonly reason: "Checked branch ids, meaningful only when mode = selected.";
1753
+ }];
1754
+ };
1755
+ readonly BranchScopeOptionProp: {
1756
+ readonly group: "data-entry";
1757
+ readonly file: "components/data-entry.prop.ts";
1758
+ readonly vocabulary: readonly ["IdProp", "DisabledProp", {
1759
+ readonly field: "name";
1760
+ readonly local: true;
1761
+ readonly reason: "Consumer-supplied branch display name; plain string so it is searchable.";
1762
+ }, {
1763
+ readonly field: "description";
1764
+ readonly local: true;
1765
+ readonly reason: "Secondary line under the branch name.";
1766
+ }];
1767
+ };
1768
+ readonly BranchScopePickerProp: {
1769
+ readonly group: "data-entry";
1770
+ readonly file: "components/data-entry.prop.ts";
1771
+ readonly vocabulary: readonly ["ValueProp", "DefaultValueProp", "OnValueChangeProp", "DisabledProp", "ErrorProp", "NameProp", "IdProp", "ClassNameProp", {
1772
+ readonly field: "branches";
1773
+ readonly local: true;
1774
+ readonly reason: "Consumer-supplied selectable branches (see BranchScopeOptionProp).";
1775
+ }, {
1776
+ readonly field: "readOnly";
1777
+ readonly local: true;
1778
+ readonly reason: "Locked view: render the current scope without editable affordances.";
1779
+ }, {
1780
+ readonly field: "searchable";
1781
+ readonly local: true;
1782
+ readonly reason: "Toggle for the built-in branch SearchInput above the checkbox list.";
1783
+ }, {
1784
+ readonly field: "loading";
1785
+ readonly local: true;
1786
+ readonly reason: "Read-lifecycle skeleton state (precedence loading → denied → listError → empty).";
1787
+ }, {
1788
+ readonly field: "empty";
1789
+ readonly local: true;
1790
+ readonly reason: "Custom empty content when there are no branches.";
1791
+ }, {
1792
+ readonly field: "listError";
1793
+ readonly local: true;
1794
+ readonly reason: "Branch-collection READ failure — deliberately distinct from ErrorProp `error`, which stays field validation.";
1795
+ }, {
1796
+ readonly field: "denied";
1797
+ readonly local: true;
1798
+ readonly reason: "Permission-denied read state — the branch collection was refused, not failed.";
1799
+ }, {
1800
+ readonly field: "allLabel";
1801
+ readonly local: true;
1802
+ readonly reason: "Override for the localized all-branches radio label.";
1803
+ }, {
1804
+ readonly field: "selectedLabel";
1805
+ readonly local: true;
1806
+ readonly reason: "Override for the localized selected-branches radio label.";
1807
+ }];
1808
+ };
1809
+ readonly ServiceRoleItemProp: {
1810
+ readonly group: "layout";
1811
+ readonly file: "components/layout.prop.ts";
1812
+ readonly vocabulary: readonly ["IdProp", {
1813
+ readonly field: "name";
1814
+ readonly local: true;
1815
+ readonly reason: "Consumer-supplied role display name; plain string for accessible labels.";
1816
+ }, {
1817
+ readonly field: "description";
1818
+ readonly local: true;
1819
+ readonly reason: "Secondary line under the role name in the master rail.";
1820
+ }, {
1821
+ readonly field: "memberCount";
1822
+ readonly local: true;
1823
+ readonly reason: "Member count caption, pluralized via CLDR categories.";
1824
+ }, {
1825
+ readonly field: "locked";
1826
+ readonly local: true;
1827
+ readonly reason: "System-role flag: lock badge, no delete affordance ever.";
1828
+ }];
1829
+ };
1830
+ readonly ServiceRolePanelProp: {
1831
+ readonly group: "layout";
1832
+ readonly file: "components/layout.prop.ts";
1833
+ readonly vocabulary: readonly ["ValueProp", "DefaultValueProp", "OnValueChangeProp", "ChildrenProp", "BreakpointProp", "IdProp", "ClassNameProp", {
1834
+ readonly field: "roles";
1835
+ readonly local: true;
1836
+ readonly reason: "Consumer-supplied role collection (see ServiceRoleItemProp).";
1837
+ }, {
1838
+ readonly field: "onDeleteRole";
1839
+ readonly local: true;
1840
+ readonly reason: "Confirmed-deletion handler; its presence arms the built-in destructive AlertDialog per non-locked role.";
1841
+ }, {
1842
+ readonly field: "readOnly";
1843
+ readonly local: true;
1844
+ readonly reason: "Locked view: hides every mutating affordance.";
1845
+ }, {
1846
+ readonly field: "loading";
1847
+ readonly local: true;
1848
+ readonly reason: "Read-lifecycle skeleton state (precedence loading → denied → error → empty).";
1849
+ }, {
1850
+ readonly field: "empty";
1851
+ readonly local: true;
1852
+ readonly reason: "Custom empty content when there are no roles.";
1853
+ }, {
1854
+ readonly field: "error";
1855
+ readonly local: true;
1856
+ readonly reason: "Read-failure state (true = built-in localized message, node replaces it).";
1857
+ }, {
1858
+ readonly field: "denied";
1859
+ readonly local: true;
1860
+ readonly reason: "Permission-denied read state — refused, not failed.";
1861
+ }, {
1862
+ readonly field: "onRetry";
1863
+ readonly local: true;
1864
+ readonly reason: "Retry affordance for the built-in error state.";
1865
+ }, {
1866
+ readonly field: "masterLabel";
1867
+ readonly local: true;
1868
+ readonly reason: "Accessible name override for the roles region (localized default otherwise).";
1869
+ }, {
1870
+ readonly field: "detailLabel";
1871
+ readonly local: true;
1872
+ readonly reason: "Accessible name override for the detail region (localized default otherwise).";
1873
+ }, {
1874
+ readonly field: "railWidth";
1875
+ readonly local: true;
1876
+ readonly reason: "Forwarded MasterDetail rail geometry preset.";
1877
+ }, {
1878
+ readonly field: "masterViewport";
1879
+ readonly local: true;
1880
+ readonly reason: "Forwarded MasterDetail bounded-collection preset.";
1881
+ }, {
1882
+ readonly field: "collapseBelow";
1883
+ readonly local: true;
1884
+ readonly reason: "Forwarded MasterDetail stacking threshold override.";
1885
+ }];
1886
+ };
1667
1887
  };
1668
1888
  export type ComponentPropName = keyof typeof COMPONENT_PROP_REGISTRY;
1669
1889
  /** Forbidden duplicate concepts — use the canonical name on the left. */