@godxjp/ui 18.8.0 → 18.10.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 (83) 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/card.d.ts +3 -27
  5. package/dist/components/data-display/card.js +1 -4
  6. package/dist/components/data-display/data-table.js +2 -2
  7. package/dist/components/data-display/index.d.ts +2 -0
  8. package/dist/components/data-display/index.js +2 -0
  9. package/dist/components/data-display/permission-matrix.d.ts +26 -0
  10. package/dist/components/data-display/permission-matrix.js +219 -0
  11. package/dist/components/data-display/table.d.ts +12 -0
  12. package/dist/components/data-entry/branch-scope-picker.d.ts +43 -0
  13. package/dist/components/data-entry/branch-scope-picker.js +200 -0
  14. package/dist/components/data-entry/command-palette.js +8 -1
  15. package/dist/components/data-entry/index.d.ts +2 -0
  16. package/dist/components/data-entry/index.js +2 -0
  17. package/dist/components/data-entry/input-otp.d.ts +1 -1
  18. package/dist/components/feedback/alert.d.ts +2 -20
  19. package/dist/components/feedback/alert.js +1 -11
  20. package/dist/components/feedback/banner.d.ts +21 -0
  21. package/dist/components/feedback/banner.js +15 -0
  22. package/dist/components/feedback/index.d.ts +4 -2
  23. package/dist/components/feedback/index.js +2 -2
  24. package/dist/components/general/typography.d.ts +1 -0
  25. package/dist/components/general/typography.js +32 -13
  26. package/dist/components/layout/auth-shell.d.ts +2 -2
  27. package/dist/components/layout/index.d.ts +2 -2
  28. package/dist/components/layout/index.js +2 -2
  29. package/dist/components/layout/page-container.d.ts +1 -1
  30. package/dist/components/layout/page-container.js +45 -19
  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/steps.d.ts +2 -2
  37. package/dist/components/navigation/steps.js +2 -4
  38. package/dist/components/ui/avatar.d.ts +1 -1
  39. package/dist/components/ui/avatar.js +1 -2
  40. package/dist/components/ui/input-otp.d.ts +3 -15
  41. package/dist/components/ui/input-otp.js +1 -2
  42. package/dist/email/tokens.generated.d.ts +2 -2
  43. package/dist/email/tokens.generated.js +2 -2
  44. package/dist/i18n/messages/en.json +56 -4
  45. package/dist/i18n/messages/ja.json +51 -5
  46. package/dist/i18n/messages/vi.json +50 -4
  47. package/dist/props/components/data-display.prop.d.ts +66 -16
  48. package/dist/props/components/data-entry.prop.d.ts +54 -7
  49. package/dist/props/components/feedback.prop.d.ts +3 -3
  50. package/dist/props/components/general.prop.d.ts +8 -1
  51. package/dist/props/components/layout.prop.d.ts +75 -54
  52. package/dist/props/components/navigation.prop.d.ts +77 -59
  53. package/dist/props/registry.d.ts +273 -72
  54. package/dist/props/registry.js +361 -92
  55. package/dist/props/vocabulary/content.prop.d.ts +5 -0
  56. package/dist/props/vocabulary/index.d.ts +1 -1
  57. package/dist/props/vocabulary/interaction.prop.d.ts +4 -7
  58. package/dist/props/vocabulary/layout.prop.d.ts +2 -2
  59. package/dist/styles/alert-layout.css +15 -32
  60. package/dist/styles/badge-layout.css +5 -0
  61. package/dist/styles/card-layout.css +13 -49
  62. package/dist/styles/control.css +2 -12
  63. package/dist/styles/data-display-layout.css +0 -16
  64. package/dist/styles/layout.css +102 -108
  65. package/dist/styles/navigation-layout.css +3 -8
  66. package/dist/styles/shell-layout.css +17 -17
  67. package/dist/styles/table-layout.css +77 -2
  68. package/dist/styles/text-layout.css +13 -0
  69. package/dist/tokens/base.css +1 -0
  70. package/dist/tokens/components/badge.css +5 -0
  71. package/dist/tokens/components/banner.css +16 -0
  72. package/dist/tokens/components/card.css +0 -12
  73. package/dist/tokens/components/control.css +0 -16
  74. package/dist/tokens/components/data-display.css +0 -12
  75. package/dist/tokens/components/email.css +2 -8
  76. package/dist/tokens/components/feedback.css +0 -20
  77. package/dist/tokens/components/navigation.css +10 -34
  78. package/dist/tokens/components/shell.css +24 -36
  79. package/dist/tokens/components/table.css +41 -1
  80. package/dist/tokens/semantic/layout.css +5 -12
  81. package/package.json +15 -2
  82. package/dist/components/layout/page-header.d.ts +0 -22
  83. package/dist/components/layout/page-header.js +0 -89
@@ -1,6 +1,7 @@
1
1
  /** Navigation component prop types — @see docs/COMPONENTS.md#navigation */
2
2
  import type * as React from "react";
3
- import type { ChildrenProp, ClassNameProp, DisabledProp, HasActiveFiltersProp, IdProp, LabelProp, OnClearFiltersProp, StickyProp } from "../vocabulary/index.js";
3
+ import type { ActionsProp, ChildrenProp, ClassNameProp, DisabledProp, ErrorProp, HasActiveFiltersProp, IdProp, LabelProp, OnClearFiltersProp, PendingProp, PlaceholderProp, StickyProp } from "../vocabulary/index.js";
4
+ import type { SearchSelectOptionProp } from "./data-entry.prop.js";
4
5
  /**
5
6
  * How a {@link ToolbarProp} strip resolves more filters than fit one row (#216).
6
7
  * `wrap` (default) stacks on narrow viewports then wraps onto extra rows; `scroll` keeps ONE
@@ -8,61 +9,60 @@ import type { ChildrenProp, ClassNameProp, DisabledProp, HasActiveFiltersProp, I
8
9
  */
9
10
  export type FilterBarOverflowProp = "wrap" | "scroll";
10
11
  /**
11
- * One APPLIED filter, rendered as a removable chip under the control row (#258).
12
- *
13
- * The chip is the visible record of a filter that is already in effect — it is NOT the control that
14
- * sets it. `label` is caller-localized text (the bar never interprets or formats domain values);
15
- * omit `onRemove` for a chip the user may not lift (a scope locked by the route or by permission),
16
- * and the chip renders as a static token with no dead button.
12
+ * Typed search slot of the FilterBar model (gh#258). Renders the canonical SearchInput as the
13
+ * FIRST control of the strip, with a token-owned consistent width (`--filter-bar-search-width`,
14
+ * full-width below 640px). Controlled by consumer data via the `value`/`defaultValue`/
15
+ * `onValueChange` triad; `onSearch` mirrors SearchInput's debounced-term callback.
16
+ */
17
+ export type FilterBarSearchProp = {
18
+ value?: string;
19
+ defaultValue?: string;
20
+ /** Fires on EVERY keystroke — required to keep a controlled `value` responsive. */
21
+ onValueChange?: (query: string) => void;
22
+ /** Fires with the DEBOUNCED term. Omit it when filtering is driven off `onValueChange`. */
23
+ onSearch?: (query: string) => void;
24
+ placeholder?: string;
25
+ /** Visible label above the search field. Omit for the placeholder-only compact form. */
26
+ label?: React.ReactNode;
27
+ /** Accessible name when no visible `label` is given (defaults to the localized "Search"). */
28
+ ariaLabel?: string;
29
+ id?: IdProp;
30
+ disabled?: DisabledProp;
31
+ };
32
+ /**
33
+ * One typed filter of the FilterBar model (gh#258): a labelled, domain-neutral Select whose
34
+ * options and selection are consumer data. `value` is the filter's stable identity (never shown);
35
+ * the visible `label` is rendered as the control's real `<label htmlFor>` (WCAG 2.5.3 / 1.3.1).
36
+ * Selection is controlled via `selected`/`defaultSelected`/`onSelectedChange` — the standard
37
+ * triad, renamed so the filter's own identity `value` stays unambiguous.
38
+ */
39
+ export type FilterBarFilterProp = {
40
+ /** Stable filter identity (drives the control id + React key). */
41
+ value: string;
42
+ label: LabelProp;
43
+ options: SearchSelectOptionProp[];
44
+ selected?: string;
45
+ defaultSelected?: string;
46
+ onSelectedChange?: (selected: string) => void;
47
+ placeholder?: PlaceholderProp;
48
+ disabled?: DisabledProp;
49
+ };
50
+ /**
51
+ * One applied-filter chip of the FilterBar model (gh#258). Chips are pure consumer data — the
52
+ * lifecycle is: ADD by including the chip in `chips`, REMOVE via `onChipRemove(value)` (the ×
53
+ * button), CLEAR-ALL via the bar's `onClear`. `label` should be a string when possible so the
54
+ * remove button's accessible name can quote it; otherwise `value` is quoted instead.
17
55
  */
18
56
  export type FilterBarChipProp = {
19
- /** Stable identity — also the argument passed back to {@link ToolbarProp.onChipRemove}. */
20
- id: string;
21
- /** Already-localized chip text, e.g. "状態: 未払い". */
22
- label: string;
23
- /**
24
- * Per-chip removal. Omit for a chip the user cannot lift; the bar then renders no remove control
25
- * rather than a disabled one, so nothing focusable is dead.
26
- */
27
- onRemove?: () => void;
57
+ /** Stable chip identity, passed to `onChipRemove`. */
58
+ value: string;
59
+ label: React.ReactNode;
60
+ disabled?: DisabledProp;
28
61
  };
29
62
  /** @see Toolbar */
30
63
  export type ToolbarProp = {
31
64
  onClear?: OnClearFiltersProp;
32
65
  hasActiveFilters?: HasActiveFiltersProp;
33
- /**
34
- * The search control (#258). A slot, not a rendered input: the bar owns its MEASURE
35
- * (`--filter-bar-search-width`) and its position at the START of the row, while the caller
36
- * still chooses the real primitive (`SearchInput`, or a `Select showSearch` for scoped search)
37
- * and owns its debounce and value. Passing the control as a child instead is what produced the
38
- * inconsistent search widths the issue was filed against.
39
- */
40
- search?: ChildrenProp;
41
- /**
42
- * Applied filters as removable chips (#258). The bar owns the CHIP LIFECYCLE — chips render
43
- * below the control row, each with an accessible remove control, and the row disappears entirely
44
- * when the array is empty (never an empty reserved strip). It owns no state: removing a chip
45
- * calls back and the caller re-renders the array.
46
- */
47
- chips?: readonly FilterBarChipProp[];
48
- /**
49
- * Called with the chip's `id` when its remove control is activated. Fires in addition to that
50
- * chip's own `onRemove`, so a caller may handle removal per chip, centrally, or both.
51
- */
52
- onChipRemove?: (id: string) => void;
53
- /**
54
- * Number of records the current filters resolve to (#258). Rendered in a POLITE LIVE REGION and
55
- * formatted with `Intl.NumberFormat` + CLDR plurals for the active locale — which is the point:
56
- * a sighted user sees the table change, and this is what tells everyone else that filtering
57
- * happened. Omit when the count is unknown or still loading.
58
- */
59
- resultCount?: number;
60
- /**
61
- * Trailing action region (#258) — export, column settings, a saved-view menu. Rendered AFTER the
62
- * reset control, so "clear filters" never sits at the end of the row beside an unrelated primary
63
- * action. The bar owns the ordering; the caller owns the controls.
64
- */
65
- actions?: ChildrenProp;
66
66
  /**
67
67
  * Pin the strip to the top of its scroll container while the list scrolls beneath it
68
68
  * (list-page filter bars, #197). Opt-in — default `false` keeps the toolbar quiet. Tune
@@ -76,8 +76,35 @@ export type ToolbarProp = {
76
76
  * Tune the scrollbar gutter with the `--filter-bar-scroll-padding-y` theme knob.
77
77
  */
78
78
  overflow?: FilterBarOverflowProp;
79
+ /**
80
+ * Typed model (gh#258) — search slot. When ANY model prop (`search`/`filters`/`chips`/
81
+ * `onChipRemove`/`actions`/`resultCount`/`loading`/`disabled`/`error`) is present the bar renders
82
+ * the canonical model layout: strip (search → filters → children → reset → actions) → chips row →
83
+ * result-count/error line, with token-owned widths and stacking. Without any of them the bar
84
+ * stays the plain children-composition toolbar — existing markup is unchanged.
85
+ */
86
+ search?: FilterBarSearchProp;
87
+ /** Typed model — labelled Select filters rendered after the search slot, in array order. */
88
+ filters?: FilterBarFilterProp[];
89
+ /** Typed model — applied-filter chips (consumer data; add = include, remove = `onChipRemove`). */
90
+ chips?: FilterBarChipProp[];
91
+ /** Remove ONE chip by its `value`. Required for chips to render their × remove button. */
92
+ onChipRemove?: (value: string) => void;
93
+ /** Typed model — trailing action slot (e.g. a primary "Add" Button), parked at the inline end. */
94
+ actions?: ActionsProp;
95
+ /**
96
+ * Typed model — localized, pluralized result count ("{count} results") announced politely via a
97
+ * `role="status"` line under the strip. `0` is the rendered empty state, not "hidden".
98
+ */
99
+ resultCount?: number;
100
+ /** Typed model — marks the strip `aria-busy` while results are being (re)fetched. */
101
+ loading?: PendingProp;
102
+ /** Typed model — disables every model-rendered control (search, filters, reset, chip removes). */
103
+ disabled?: DisabledProp;
104
+ /** Typed model — consumer error content, announced via `role="alert"` in place of the count. */
105
+ error?: ErrorProp;
79
106
  className?: ClassNameProp;
80
- children: ChildrenProp;
107
+ children?: ChildrenProp;
81
108
  };
82
109
  /** @see ToolbarGroup */
83
110
  export type ToolbarGroupProp = {
@@ -144,18 +171,9 @@ export type StepsProp = {
144
171
  type?: "default" | "dot" | "inline";
145
172
  size?: "md" | "sm";
146
173
  titlePlacement?: "horizontal" | "vertical";
147
- /**
148
- * The glyph between inline steps (`type="inline"` only). `chevron` (default, `›`) is the
149
- * breadcrumb-flavoured original. `arrow` (`→`) is the canonical hosted-identity progression
150
- * marker: a chevron reads as "drill into", an arrow reads as "then" — which is what a step row
151
- * means. Ignored by every other `type`.
152
- */
153
- separator?: StepsSeparatorProp;
154
174
  onValueChange?: (value: number) => void;
155
175
  className?: ClassNameProp;
156
176
  };
157
- /** @see Steps — inline separator glyph. */
158
- export type StepsSeparatorProp = "chevron" | "arrow";
159
177
  /** Tab pane — Ant Design `items` entry. */
160
178
  export type TabItemProp = {
161
179
  value: string;
@@ -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,35 +466,10 @@ 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
- }, {
489
- readonly field: "headerLoading";
490
- 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).";
492
- }, {
472
+ readonly vocabulary: readonly ["TitleProp", "SubtitleProp", "StatusProp", "ExtraProp", "FooterProp", "BreadcrumbProp", "DensityProp", "PageContainerVariantProp", {
493
473
  readonly field: "headerLayout";
494
474
  readonly local: true;
495
475
  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.";
@@ -1063,11 +1043,6 @@ export declare const COMPONENT_PROP_REGISTRY: {
1063
1043
  readonly file: "components/data-display.prop.ts";
1064
1044
  readonly vocabulary: readonly ["AvatarShapeProp", "ChildrenProp", "ClassNameProp"];
1065
1045
  };
1066
- readonly AvatarAppearanceProp: {
1067
- readonly group: "data-display";
1068
- readonly file: "components/data-display.prop.ts";
1069
- readonly vocabulary: readonly [];
1070
- };
1071
1046
  readonly BadgeProp: {
1072
1047
  readonly group: "data-display";
1073
1048
  readonly file: "components/data-display.prop.ts";
@@ -1418,41 +1393,27 @@ export declare const COMPONENT_PROP_REGISTRY: {
1418
1393
  readonly ToolbarProp: {
1419
1394
  readonly group: "navigation";
1420
1395
  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
- }];
1396
+ readonly vocabulary: readonly ["OnClearFiltersProp", "HasActiveFiltersProp", "StickyProp", "ActionsProp", "PendingProp", "DisabledProp", "ErrorProp", "ClassNameProp", "ChildrenProp"];
1442
1397
  };
1443
- readonly FilterBarChipProp: {
1398
+ readonly FilterBarOverflowProp: {
1444
1399
  readonly group: "navigation";
1445
1400
  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
- }];
1401
+ readonly vocabulary: readonly [];
1451
1402
  };
1452
- readonly FilterBarOverflowProp: {
1403
+ readonly FilterBarSearchProp: {
1453
1404
  readonly group: "navigation";
1454
1405
  readonly file: "components/navigation.prop.ts";
1455
- readonly vocabulary: readonly [];
1406
+ readonly vocabulary: readonly ["PlaceholderProp", "IdProp", "DisabledProp"];
1407
+ };
1408
+ readonly FilterBarFilterProp: {
1409
+ readonly group: "navigation";
1410
+ readonly file: "components/navigation.prop.ts";
1411
+ readonly vocabulary: readonly ["LabelProp", "PlaceholderProp", "DisabledProp"];
1412
+ };
1413
+ readonly FilterBarChipProp: {
1414
+ readonly group: "navigation";
1415
+ readonly file: "components/navigation.prop.ts";
1416
+ readonly vocabulary: readonly ["DisabledProp"];
1456
1417
  };
1457
1418
  readonly ToolbarGroupProp: {
1458
1419
  readonly group: "navigation";
@@ -1479,11 +1440,6 @@ export declare const COMPONENT_PROP_REGISTRY: {
1479
1440
  readonly file: "components/data-entry.prop.ts";
1480
1441
  readonly vocabulary: readonly [];
1481
1442
  };
1482
- readonly InputOTPAlignProp: {
1483
- readonly group: "data-entry";
1484
- readonly file: "components/data-entry.prop.ts";
1485
- readonly vocabulary: readonly [];
1486
- };
1487
1443
  readonly StepItemProp: {
1488
1444
  readonly group: "navigation";
1489
1445
  readonly file: "components/navigation.prop.ts";
@@ -1494,11 +1450,6 @@ export declare const COMPONENT_PROP_REGISTRY: {
1494
1450
  readonly file: "components/navigation.prop.ts";
1495
1451
  readonly vocabulary: readonly [];
1496
1452
  };
1497
- readonly StepsSeparatorProp: {
1498
- readonly group: "navigation";
1499
- readonly file: "components/navigation.prop.ts";
1500
- readonly vocabulary: readonly [];
1501
- };
1502
1453
  readonly TabsProp: {
1503
1454
  readonly group: "navigation";
1504
1455
  readonly file: "components/navigation.prop.ts";
@@ -1664,6 +1615,256 @@ export declare const COMPONENT_PROP_REGISTRY: {
1664
1615
  readonly file: "components/layout/split-pane.tsx";
1665
1616
  readonly vocabulary: readonly ["ClassNameProp", "ChildrenProp"];
1666
1617
  };
1618
+ readonly PermissionMatrixRoleProp: {
1619
+ readonly group: "data-display";
1620
+ readonly file: "components/data-display.prop.ts";
1621
+ readonly vocabulary: readonly ["IdProp", {
1622
+ readonly field: "name";
1623
+ readonly local: true;
1624
+ readonly reason: "Consumer-supplied role display name; a plain string so it can label cells for AT.";
1625
+ }, {
1626
+ readonly field: "description";
1627
+ readonly local: true;
1628
+ readonly reason: "Secondary caption under the role column header.";
1629
+ }, {
1630
+ readonly field: "locked";
1631
+ readonly local: true;
1632
+ readonly reason: "Per-role read-only flag — a locked role keeps ✓/— cells in an editable matrix.";
1633
+ }];
1634
+ };
1635
+ readonly PermissionMatrixPermissionProp: {
1636
+ readonly group: "data-display";
1637
+ readonly file: "components/data-display.prop.ts";
1638
+ readonly vocabulary: readonly ["IdProp", {
1639
+ readonly field: "name";
1640
+ readonly local: true;
1641
+ readonly reason: "Consumer-supplied permission display name; plain string for accessible labels.";
1642
+ }, {
1643
+ readonly field: "description";
1644
+ readonly local: true;
1645
+ readonly reason: "Secondary line under the permission name.";
1646
+ }, {
1647
+ readonly field: "group";
1648
+ readonly local: true;
1649
+ readonly reason: "Optional category caption for the permission row.";
1650
+ }];
1651
+ };
1652
+ readonly PermissionMatrixGrantsProp: {
1653
+ readonly group: "data-display";
1654
+ readonly file: "components/data-display.prop.ts";
1655
+ readonly vocabulary: readonly [{
1656
+ readonly field: "grants";
1657
+ readonly local: true;
1658
+ readonly reason: "The role×permission grant relation — the grantKey Set from lib/permission-grid or a pair array normalized through the same encoding.";
1659
+ }];
1660
+ };
1661
+ readonly PermissionMatrixProp: {
1662
+ readonly group: "data-display";
1663
+ readonly file: "components/data-display.prop.ts";
1664
+ readonly vocabulary: readonly ["LabelProp", "HandlerProp", "ClassNameProp", "IdProp", {
1665
+ readonly field: "roles";
1666
+ readonly local: true;
1667
+ readonly reason: "Consumer-supplied role columns (see PermissionMatrixRoleProp).";
1668
+ }, {
1669
+ readonly field: "permissions";
1670
+ readonly local: true;
1671
+ readonly reason: "Consumer-supplied permission rows (see PermissionMatrixPermissionProp).";
1672
+ }, {
1673
+ readonly field: "grants";
1674
+ readonly local: true;
1675
+ readonly reason: "The grant relation (see PermissionMatrixGrantsProp).";
1676
+ }, {
1677
+ readonly field: "onGrantChange";
1678
+ readonly local: true;
1679
+ readonly reason: "Cell toggle handler carrying the (roleId, permissionId, granted) triple; its presence switches the grid from read-only ✓/— to editable checkboxes.";
1680
+ }, {
1681
+ readonly field: "readOnly";
1682
+ readonly local: true;
1683
+ readonly reason: "Forces the read-only grid even when onGrantChange is present (viewer permission).";
1684
+ }, {
1685
+ readonly field: "compare";
1686
+ readonly local: true;
1687
+ readonly reason: "Two role ids compared side by side — the lib/permission-grid ComparePair.";
1688
+ }, {
1689
+ readonly field: "diffOnly";
1690
+ readonly local: true;
1691
+ readonly reason: "差分のみ filter: with compare set, keep only the rows where the two roles differ.";
1692
+ }, {
1693
+ readonly field: "loading";
1694
+ readonly local: true;
1695
+ readonly reason: "Read-lifecycle skeleton state mirroring DataTable #216 (precedence loading → denied → error → empty).";
1696
+ }, {
1697
+ readonly field: "empty";
1698
+ readonly local: true;
1699
+ readonly reason: "Custom empty content override, mirroring DataTable's empty slot.";
1700
+ }, {
1701
+ readonly field: "error";
1702
+ readonly local: true;
1703
+ readonly reason: "Read-failure state mirroring DataTable #216 (true = built-in localized message).";
1704
+ }, {
1705
+ readonly field: "denied";
1706
+ readonly local: true;
1707
+ readonly reason: "Permission-denied read state mirroring DataTable #216 — refused, not failed.";
1708
+ }, {
1709
+ readonly field: "onRetry";
1710
+ readonly local: true;
1711
+ readonly reason: "Retry affordance for the built-in error state, mirroring DataTable #216.";
1712
+ }];
1713
+ };
1714
+ readonly BranchScopeModeProp: {
1715
+ readonly group: "data-entry";
1716
+ readonly file: "components/data-entry.prop.ts";
1717
+ readonly vocabulary: readonly [{
1718
+ readonly field: "mode";
1719
+ readonly local: true;
1720
+ readonly reason: "Closed scope vocabulary: all branches vs an explicit subset.";
1721
+ }];
1722
+ };
1723
+ readonly BranchScopeValueProp: {
1724
+ readonly group: "data-entry";
1725
+ readonly file: "components/data-entry.prop.ts";
1726
+ readonly vocabulary: readonly [{
1727
+ readonly field: "mode";
1728
+ readonly local: true;
1729
+ readonly reason: "The selected scope mode (see BranchScopeModeProp).";
1730
+ }, {
1731
+ readonly field: "branchIds";
1732
+ readonly local: true;
1733
+ readonly reason: "Checked branch ids, meaningful only when mode = selected.";
1734
+ }];
1735
+ };
1736
+ readonly BranchScopeOptionProp: {
1737
+ readonly group: "data-entry";
1738
+ readonly file: "components/data-entry.prop.ts";
1739
+ readonly vocabulary: readonly ["IdProp", "DisabledProp", {
1740
+ readonly field: "name";
1741
+ readonly local: true;
1742
+ readonly reason: "Consumer-supplied branch display name; plain string so it is searchable.";
1743
+ }, {
1744
+ readonly field: "description";
1745
+ readonly local: true;
1746
+ readonly reason: "Secondary line under the branch name.";
1747
+ }];
1748
+ };
1749
+ readonly BranchScopePickerProp: {
1750
+ readonly group: "data-entry";
1751
+ readonly file: "components/data-entry.prop.ts";
1752
+ readonly vocabulary: readonly ["ValueProp", "DefaultValueProp", "OnValueChangeProp", "DisabledProp", "ErrorProp", "NameProp", "IdProp", "ClassNameProp", {
1753
+ readonly field: "branches";
1754
+ readonly local: true;
1755
+ readonly reason: "Consumer-supplied selectable branches (see BranchScopeOptionProp).";
1756
+ }, {
1757
+ readonly field: "readOnly";
1758
+ readonly local: true;
1759
+ readonly reason: "Locked view: render the current scope without editable affordances.";
1760
+ }, {
1761
+ readonly field: "searchable";
1762
+ readonly local: true;
1763
+ readonly reason: "Toggle for the built-in branch SearchInput above the checkbox list.";
1764
+ }, {
1765
+ readonly field: "loading";
1766
+ readonly local: true;
1767
+ readonly reason: "Read-lifecycle skeleton state (precedence loading → denied → listError → empty).";
1768
+ }, {
1769
+ readonly field: "empty";
1770
+ readonly local: true;
1771
+ readonly reason: "Custom empty content when there are no branches.";
1772
+ }, {
1773
+ readonly field: "listError";
1774
+ readonly local: true;
1775
+ readonly reason: "Branch-collection READ failure — deliberately distinct from ErrorProp `error`, which stays field validation.";
1776
+ }, {
1777
+ readonly field: "denied";
1778
+ readonly local: true;
1779
+ readonly reason: "Permission-denied read state — the branch collection was refused, not failed.";
1780
+ }, {
1781
+ readonly field: "allLabel";
1782
+ readonly local: true;
1783
+ readonly reason: "Override for the localized all-branches radio label.";
1784
+ }, {
1785
+ readonly field: "selectedLabel";
1786
+ readonly local: true;
1787
+ readonly reason: "Override for the localized selected-branches radio label.";
1788
+ }];
1789
+ };
1790
+ readonly ServiceRoleItemProp: {
1791
+ readonly group: "layout";
1792
+ readonly file: "components/layout.prop.ts";
1793
+ readonly vocabulary: readonly ["IdProp", {
1794
+ readonly field: "name";
1795
+ readonly local: true;
1796
+ readonly reason: "Consumer-supplied role display name; plain string for accessible labels.";
1797
+ }, {
1798
+ readonly field: "description";
1799
+ readonly local: true;
1800
+ readonly reason: "Secondary line under the role name in the master rail.";
1801
+ }, {
1802
+ readonly field: "memberCount";
1803
+ readonly local: true;
1804
+ readonly reason: "Member count caption, pluralized via CLDR categories.";
1805
+ }, {
1806
+ readonly field: "locked";
1807
+ readonly local: true;
1808
+ readonly reason: "System-role flag: lock badge, no delete affordance ever.";
1809
+ }];
1810
+ };
1811
+ readonly ServiceRolePanelProp: {
1812
+ readonly group: "layout";
1813
+ readonly file: "components/layout.prop.ts";
1814
+ readonly vocabulary: readonly ["ValueProp", "DefaultValueProp", "OnValueChangeProp", "ChildrenProp", "BreakpointProp", "IdProp", "ClassNameProp", {
1815
+ readonly field: "roles";
1816
+ readonly local: true;
1817
+ readonly reason: "Consumer-supplied role collection (see ServiceRoleItemProp).";
1818
+ }, {
1819
+ readonly field: "onDeleteRole";
1820
+ readonly local: true;
1821
+ readonly reason: "Confirmed-deletion handler; its presence arms the built-in destructive AlertDialog per non-locked role.";
1822
+ }, {
1823
+ readonly field: "readOnly";
1824
+ readonly local: true;
1825
+ readonly reason: "Locked view: hides every mutating affordance.";
1826
+ }, {
1827
+ readonly field: "loading";
1828
+ readonly local: true;
1829
+ readonly reason: "Read-lifecycle skeleton state (precedence loading → denied → error → empty).";
1830
+ }, {
1831
+ readonly field: "empty";
1832
+ readonly local: true;
1833
+ readonly reason: "Custom empty content when there are no roles.";
1834
+ }, {
1835
+ readonly field: "error";
1836
+ readonly local: true;
1837
+ readonly reason: "Read-failure state (true = built-in localized message, node replaces it).";
1838
+ }, {
1839
+ readonly field: "denied";
1840
+ readonly local: true;
1841
+ readonly reason: "Permission-denied read state — refused, not failed.";
1842
+ }, {
1843
+ readonly field: "onRetry";
1844
+ readonly local: true;
1845
+ readonly reason: "Retry affordance for the built-in error state.";
1846
+ }, {
1847
+ readonly field: "masterLabel";
1848
+ readonly local: true;
1849
+ readonly reason: "Accessible name override for the roles region (localized default otherwise).";
1850
+ }, {
1851
+ readonly field: "detailLabel";
1852
+ readonly local: true;
1853
+ readonly reason: "Accessible name override for the detail region (localized default otherwise).";
1854
+ }, {
1855
+ readonly field: "railWidth";
1856
+ readonly local: true;
1857
+ readonly reason: "Forwarded MasterDetail rail geometry preset.";
1858
+ }, {
1859
+ readonly field: "masterViewport";
1860
+ readonly local: true;
1861
+ readonly reason: "Forwarded MasterDetail bounded-collection preset.";
1862
+ }, {
1863
+ readonly field: "collapseBelow";
1864
+ readonly local: true;
1865
+ readonly reason: "Forwarded MasterDetail stacking threshold override.";
1866
+ }];
1867
+ };
1667
1868
  };
1668
1869
  export type ComponentPropName = keyof typeof COMPONENT_PROP_REGISTRY;
1669
1870
  /** Forbidden duplicate concepts — use the canonical name on the left. */