@godxjp/ui 32.6.0 → 32.7.1
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.
- package/DESIGN.md +12 -2
- package/README.md +3 -3
- package/agent/DESIGN.md +12 -2
- package/agent/START-HERE.md +4 -4
- package/agent/components/Anchor.json +1 -1
- package/agent/components/ChatSuggestion.json +1 -1
- package/agent/components/LegalDocumentShell.json +7 -1
- package/agent/components/PageContainer.json +1 -2
- package/agent/components/Progress.json +1 -1
- package/agent/components-index.json +1 -1
- package/agent/components.json +11 -6
- package/agent/index.json +5 -5
- package/agent/llms.txt +6 -6
- package/agent/tokens.json +12 -0
- package/dist/components/layout/page-container.js +14 -8
- package/dist/contracts/measurement.json +1 -1
- package/dist/i18n/messages/en.json +2 -1
- package/dist/i18n/messages/ja.json +2 -1
- package/dist/i18n/messages/vi.json +2 -1
- package/dist/lab/legal-document-shell.js +7 -3
- package/dist/props/components/layout.prop.d.ts +13 -1
- package/dist/props/registry.d.ts +4 -0
- package/dist/props/registry.js +5 -0
- package/dist/styles/layers.json +1 -1
- package/dist/styles/layout.css +26 -0
- package/dist/styles.css +1 -1
- package/dist/tokens/components/legal-document.css +4 -0
- package/docs/CONSUMER-RULES.md +3 -3
- package/docs/migrations/v32.md +10 -5
- package/package.json +2 -2
- package/scripts/_agent-setup.mjs +110 -17
- package/scripts/cli.mjs +8 -0
- package/scripts/consumer-rule.md +9 -9
- package/scripts/ui-audit.mjs +44 -10
package/DESIGN.md
CHANGED
|
@@ -102,7 +102,7 @@ Colour is scarce. Most of the screen is canvas, ink and hairline.
|
|
|
102
102
|
|
|
103
103
|
## Typography
|
|
104
104
|
|
|
105
|
-
- One family. Hierarchy from size steps, weight 400/500/700 and `ink` vs `ink-muted`. Page title ~20px; anything larger belongs on a marketing page.
|
|
105
|
+
- One family. Hierarchy from size steps, weight 400/500/700 and `ink` vs `ink-muted`. Page title ~20px; anything larger belongs on a marketing page. One exception: a long-form document title (Reader) is ~22px, two steps above its ~17.6px section headings, because one step reads flat there.
|
|
106
106
|
- Body 14px / 1.7. Captions and meta 12.5px muted. `Text tabular` on every number, time and money column.
|
|
107
107
|
- Japanese prose: `Text break="phrase"` so lines break between phrases.
|
|
108
108
|
- Copy is quiet and factual: no praise, no alarm, no emoji, no em dash in UI strings. A success message states the fact (「承認しました」).
|
|
@@ -123,7 +123,7 @@ Colour is scarce. Most of the screen is canvas, ink and hairline.
|
|
|
123
123
|
|
|
124
124
|
## Components
|
|
125
125
|
|
|
126
|
-
- **PageContainer** is the page shell: `title`, optional `subtitle`, `breadcrumb`, `extra` (page actions, primary last), `toolbar`, `footer`.
|
|
126
|
+
- **PageContainer** is the page shell: `title`, optional `subtitle`, `breadcrumb`, `extra` (page actions, primary last), `toolbar`, `footer`. Omit `title` only when the content draws the page's one `<h1>` (a document reader); PageContainer then renders no heading.
|
|
127
127
|
- **Card** only for a real boundary: a table with its own toolbar and pagination, a list of setting rows, a dashboard panel, a danger zone (`accent="destructive"`), a selectable item. Not around every section, never nested. `CardContent flush` for tables and row lists.
|
|
128
128
|
- **Toolbar** (+ `ToolbarGroup`) is the filter strip: search, labelled filters, clear-all, result count. It sits above the table, never in the page header.
|
|
129
129
|
- **DataTable** for lists: sort, selection with `DataTable.BulkActions`, density, empty/loading/error states. Row actions in one kebab `DropdownMenu`.
|
|
@@ -146,6 +146,14 @@ Header: record name as title, status `Badge` beside it, actions in `extra` (one
|
|
|
146
146
|
|
|
147
147
|
`Form` in a narrow measure; fields grouped by Heading sections, not Cards. Labels via `FormField`; helper text only when it adds information. One primary submit and a secondary cancel at the end, or in a sticky footer for long forms. Errors inline on the field plus `FormErrors` summary on submit.
|
|
148
148
|
|
|
149
|
+
### Editor
|
|
150
|
+
|
|
151
|
+
Edit (or create) one document or record. Header: record name as title, status `Badge` beside it, a subtitle only for a fact such as when it was last saved, and ONE primary Save in `extra` (`Button type="submit" form=<form id>`), Cancel `outline` before it. Body: one `Form` in a `SplitPane`: the main column holds the title field and a large body editor (`BlockEditor`, or `Textarea autoSize`); the aside holds metadata fields and read-only facts in `Descriptions`. The change note goes either directly under the body (where the writer finishes) or last in the aside — pick one per app and keep it. Name each aside group with a `Heading level={2}` one step above its field labels. A part that is its own controlled component with its own `Form` (forms cannot nest) stays a separate form; the header Save then submits by handler (`onClick`) instead of `form=<id>`, still one Save. No Card per field group, no second Save at the bottom.
|
|
152
|
+
|
|
153
|
+
### Reader
|
|
154
|
+
|
|
155
|
+
A long-form document to read. The document owns the page's one `<h1>`: `PageContainer` gets `breadcrumb` and `extra` (Edit) and no `title`. `LegalDocumentShell` draws the reading column: title two steps above the section headings, one metadata line (version, date with `dateKind="updated"` for a revision), the contents rail, and prose at a reading measure with `Text break="phrase"` for Japanese. No Card around the article, no subtitle, no icon per heading.
|
|
156
|
+
|
|
149
157
|
### Settings
|
|
150
158
|
|
|
151
159
|
Each section is a Heading (plus one muted line if it adds a fact) over its content: `Descriptions` for read-only values, `ListRow` rows in one `Card` with `CardContent flush` for controls (`trailing` holds the control). Separate sections with spacing or a `Separator`. Changes that apply instantly need no Save button; a page with a Save button applies nothing until saved. Destructive actions last, in one `Card accent="destructive"`, each behind `AlertDialog`.
|
|
@@ -197,5 +205,7 @@ A list whose rows are decisions. Show requester, target, reason, submitted time;
|
|
|
197
205
|
|
|
198
206
|
- The default primary is neutral by design; a product without a brand colour looks monochrome until one is set.
|
|
199
207
|
- `ui-audit` checks primitives and tokens, not structure: a page can pass it and still show every Don't above.
|
|
208
|
+
- `card-per-section` counts Cards per file, so a screen split across components can pass with a Card around every section.
|
|
200
209
|
- Exemplar previews deploy on release tags, so they can lag `main`. On GitHub Pages a showcase URL answers HTTP 404 and renders through `404.html`, so open it in a browser; a plain fetch sees the 404.
|
|
201
210
|
- Dark theme (`data-theme="dark"`) is supported; the exemplars are reviewed in light.
|
|
211
|
+
- On narrow screens the `PageContainer` title steps down (≈17.6px) while body h2 stays ≈15.7px — one step apart. A document page not built on `LegalDocumentShell` keeps only that step on phones; there is no intermediate page-title size yet.
|
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ npm i @godxjp/ui
|
|
|
18
18
|
|
|
19
19
|
<!-- agent-catalog-counts:start -->
|
|
20
20
|
|
|
21
|
-
The catalog — 161 components,
|
|
21
|
+
The catalog — 161 components, 2197 tokens, 43 cardinal rules — is published in two forms from one
|
|
22
22
|
source. **Entry point for either: [`AGENTS.md`](AGENTS.md).**
|
|
23
23
|
<!-- agent-catalog-counts:end -->
|
|
24
24
|
|
|
@@ -51,12 +51,12 @@ static files straight from this public repo — no hosting, no deploy step:
|
|
|
51
51
|
| --- | --- | --- |
|
|
52
52
|
| [`agent/START-HERE.md`](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/START-HERE.md) | 11 KB | **read first** — self-contained: the four rules, the token override model, a page that passes review |
|
|
53
53
|
| [`agent/llms.txt`](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/llms.txt) | 3 KB | the [llms.txt](https://llmstxt.org/) entry point |
|
|
54
|
-
| [`agent/DESIGN.md`](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/DESIGN.md) |
|
|
54
|
+
| [`agent/DESIGN.md`](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/DESIGN.md) | 14 KB | the visual spec: tokens, colour scarcity, admin screen anatomy, do/don't |
|
|
55
55
|
| [`agent/index.json`](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/index.json) | 3 KB | manifest: version, counts, every file's URL |
|
|
56
56
|
| [`agent/components-index.json`](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components-index.json) | 47 KB | all 161 as name + group + tagline — **fetch this first** |
|
|
57
57
|
| [`agent/components/<Name>.json`](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components/Select.json) | 1 KB–37 KB | one file per component, each with its `importPath` — **this is the route to take** |
|
|
58
58
|
| [`agent/components.json`](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components.json) | 1.2 MB | all 161 entries in one file — most URL fetchers truncate this silently; prefer the per-component files |
|
|
59
|
-
| [`agent/tokens.json`](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/tokens.json) | 846 KB | all
|
|
59
|
+
| [`agent/tokens.json`](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/tokens.json) | 846 KB | all 2197 design tokens, their values and why they exist |
|
|
60
60
|
| [`agent/vocabulary.json`](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/vocabulary.json) | 7 KB | the controlled prop vocabulary |
|
|
61
61
|
| [`agent/rules.json`](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/rules.json) | 21 KB | the 43 cardinal rules |
|
|
62
62
|
<!-- prettier-ignore-end -->
|
package/agent/DESIGN.md
CHANGED
|
@@ -102,7 +102,7 @@ Colour is scarce. Most of the screen is canvas, ink and hairline.
|
|
|
102
102
|
|
|
103
103
|
## Typography
|
|
104
104
|
|
|
105
|
-
- One family. Hierarchy from size steps, weight 400/500/700 and `ink` vs `ink-muted`. Page title ~20px; anything larger belongs on a marketing page.
|
|
105
|
+
- One family. Hierarchy from size steps, weight 400/500/700 and `ink` vs `ink-muted`. Page title ~20px; anything larger belongs on a marketing page. One exception: a long-form document title (Reader) is ~22px, two steps above its ~17.6px section headings, because one step reads flat there.
|
|
106
106
|
- Body 14px / 1.7. Captions and meta 12.5px muted. `Text tabular` on every number, time and money column.
|
|
107
107
|
- Japanese prose: `Text break="phrase"` so lines break between phrases.
|
|
108
108
|
- Copy is quiet and factual: no praise, no alarm, no emoji, no em dash in UI strings. A success message states the fact (「承認しました」).
|
|
@@ -123,7 +123,7 @@ Colour is scarce. Most of the screen is canvas, ink and hairline.
|
|
|
123
123
|
|
|
124
124
|
## Components
|
|
125
125
|
|
|
126
|
-
- **PageContainer** is the page shell: `title`, optional `subtitle`, `breadcrumb`, `extra` (page actions, primary last), `toolbar`, `footer`.
|
|
126
|
+
- **PageContainer** is the page shell: `title`, optional `subtitle`, `breadcrumb`, `extra` (page actions, primary last), `toolbar`, `footer`. Omit `title` only when the content draws the page's one `<h1>` (a document reader); PageContainer then renders no heading.
|
|
127
127
|
- **Card** only for a real boundary: a table with its own toolbar and pagination, a list of setting rows, a dashboard panel, a danger zone (`accent="destructive"`), a selectable item. Not around every section, never nested. `CardContent flush` for tables and row lists.
|
|
128
128
|
- **Toolbar** (+ `ToolbarGroup`) is the filter strip: search, labelled filters, clear-all, result count. It sits above the table, never in the page header.
|
|
129
129
|
- **DataTable** for lists: sort, selection with `DataTable.BulkActions`, density, empty/loading/error states. Row actions in one kebab `DropdownMenu`.
|
|
@@ -146,6 +146,14 @@ Header: record name as title, status `Badge` beside it, actions in `extra` (one
|
|
|
146
146
|
|
|
147
147
|
`Form` in a narrow measure; fields grouped by Heading sections, not Cards. Labels via `FormField`; helper text only when it adds information. One primary submit and a secondary cancel at the end, or in a sticky footer for long forms. Errors inline on the field plus `FormErrors` summary on submit.
|
|
148
148
|
|
|
149
|
+
### Editor
|
|
150
|
+
|
|
151
|
+
Edit (or create) one document or record. Header: record name as title, status `Badge` beside it, a subtitle only for a fact such as when it was last saved, and ONE primary Save in `extra` (`Button type="submit" form=<form id>`), Cancel `outline` before it. Body: one `Form` in a `SplitPane`: the main column holds the title field and a large body editor (`BlockEditor`, or `Textarea autoSize`); the aside holds metadata fields and read-only facts in `Descriptions`. The change note goes either directly under the body (where the writer finishes) or last in the aside — pick one per app and keep it. Name each aside group with a `Heading level={2}` one step above its field labels. A part that is its own controlled component with its own `Form` (forms cannot nest) stays a separate form; the header Save then submits by handler (`onClick`) instead of `form=<id>`, still one Save. No Card per field group, no second Save at the bottom.
|
|
152
|
+
|
|
153
|
+
### Reader
|
|
154
|
+
|
|
155
|
+
A long-form document to read. The document owns the page's one `<h1>`: `PageContainer` gets `breadcrumb` and `extra` (Edit) and no `title`. `LegalDocumentShell` draws the reading column: title two steps above the section headings, one metadata line (version, date with `dateKind="updated"` for a revision), the contents rail, and prose at a reading measure with `Text break="phrase"` for Japanese. No Card around the article, no subtitle, no icon per heading.
|
|
156
|
+
|
|
149
157
|
### Settings
|
|
150
158
|
|
|
151
159
|
Each section is a Heading (plus one muted line if it adds a fact) over its content: `Descriptions` for read-only values, `ListRow` rows in one `Card` with `CardContent flush` for controls (`trailing` holds the control). Separate sections with spacing or a `Separator`. Changes that apply instantly need no Save button; a page with a Save button applies nothing until saved. Destructive actions last, in one `Card accent="destructive"`, each behind `AlertDialog`.
|
|
@@ -197,5 +205,7 @@ A list whose rows are decisions. Show requester, target, reason, submitted time;
|
|
|
197
205
|
|
|
198
206
|
- The default primary is neutral by design; a product without a brand colour looks monochrome until one is set.
|
|
199
207
|
- `ui-audit` checks primitives and tokens, not structure: a page can pass it and still show every Don't above.
|
|
208
|
+
- `card-per-section` counts Cards per file, so a screen split across components can pass with a Card around every section.
|
|
200
209
|
- Exemplar previews deploy on release tags, so they can lag `main`. On GitHub Pages a showcase URL answers HTTP 404 and renders through `404.html`, so open it in a browser; a plain fetch sees the 404.
|
|
201
210
|
- Dark theme (`data-theme="dark"`) is supported; the exemplars are reviewed in light.
|
|
211
|
+
- On narrow screens the `PageContainer` title steps down (≈17.6px) while body h2 stays ≈15.7px — one step apart. A document page not built on `LegalDocumentShell` keeps only that step on phones; there is no intermediate page-title size yet.
|
package/agent/START-HERE.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
You are about to write code against a design system you did not author. This file is the whole
|
|
4
4
|
contract. Read it before you write JSX.
|
|
5
5
|
|
|
6
|
-
**This catalog describes `@godxjp/ui` 32.
|
|
6
|
+
**This catalog describes `@godxjp/ui` 32.7.1.** If the project you are editing has a different
|
|
7
7
|
version in its `package.json`, read the pinned catalog for THAT version instead
|
|
8
8
|
(`…/v<their-version>/agent/…`). A catalog newer than the installed package describes props that do
|
|
9
9
|
not exist yet; older, and it hides props that do. Neither failure announces itself.
|
|
@@ -59,10 +59,10 @@ screen anatomy, the visual target the rules below do not give you. Then fetch in
|
|
|
59
59
|
its `importPath`, and its examples. Fetch only the handful you picked in step 1.
|
|
60
60
|
3. `rules.json` — 43 cardinal rules. The ones about raw HTML and hardcoded colour are not
|
|
61
61
|
style advice.
|
|
62
|
-
4. `tokens.json` —
|
|
62
|
+
4. `tokens.json` — 2197 design tokens, each tagged with its `tier`. **If you were handed a
|
|
63
63
|
brand, read the 211 `foundation` entries first** — `--primary`, `--background`,
|
|
64
64
|
`--radius`, `--font-size-base` are the handful everything else derives from. The
|
|
65
|
-
|
|
65
|
+
1874 `component` entries are per-part knobs; reach for one only when a role is
|
|
66
66
|
right everywhere except one component.
|
|
67
67
|
5. `anti-ai-tells.json` — 35 shapes that make generated UI look generated, each with the
|
|
68
68
|
fix. Read before you reach for a gradient hero or a wall of coloured chips.
|
|
@@ -148,7 +148,7 @@ has stopped following the brand.
|
|
|
148
148
|
|---|---|---|---|
|
|
149
149
|
| `foundation` | 211 | the seeds — `--primary`, `--background`, `--foreground`, `--radius`, `--font-size-base`, `--shadow-color`. Everything below is derived from these | **yes — this is the main road.** The default `--primary` is a neutral placeholder: set it (`:root { --primary: <H> <S>% <L>%; }`, HSL components, no `hsl()` wrapper) or import a theme preset such as `@godxjp/ui/themes/godx.css` |
|
|
150
150
|
| `semantic` | 112 | named roles that follow the seeds — `--ring`, `--text-link`, `--primary-hover`, `--overlay-background` | only when the seed is right and ONE role must differ. That role then stops following a later brand change |
|
|
151
|
-
| `component` |
|
|
151
|
+
| `component` | 1874 | per-part knobs, `--{component}-{part}-{property}` | rarely. Most are declared `initial` with the real default at the call site — deliberate, so a scoped override re-resolves instead of freezing at `:root` |
|
|
152
152
|
|
|
153
153
|
A token whose `value` is `initial` is not empty and not broken: `initial` is the guaranteed-invalid
|
|
154
154
|
value, so the real default is computed where the element paints it. Set it and yours wins.
|
|
@@ -71,7 +71,7 @@
|
|
|
71
71
|
"type": "(event: React.MouseEvent<HTMLAnchorElement>, item: AnchorItemProp) => void"
|
|
72
72
|
},
|
|
73
73
|
{
|
|
74
|
-
"description": "
|
|
74
|
+
"description": "SCREEN-READER-ONLY accessible name of the <nav> landmark — it is never drawn (unlike Progress `label`, which is a visible caption). Need a visible heading over the links? Render a Heading yourself and keep this as the landmark name. antd ships an unnamed <div>; a page routinely carries a breadcrumb, a rail and this, so a localized default (\"On this page\") applies when omitted.",
|
|
75
75
|
"name": "label",
|
|
76
76
|
"type": "string"
|
|
77
77
|
},
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
6
|
|
93
93
|
],
|
|
94
94
|
"storyPath": "data-entry/chat-composer.tsx",
|
|
95
|
-
"tagline": "Trigger-character autocomplete over a ChatComposer (Ant Design X Suggestion): type / at a word boundary and a Command list opens against the composer, driven from the textarea without ever taking focus off it.",
|
|
95
|
+
"tagline": "In @godxjp/chat since v32, not @godxjp/ui: add @godxjp/chat as a dependency at the same version as @godxjp/ui. Trigger-character autocomplete over a ChatComposer (Ant Design X Suggestion): type / at a word boundary and a Command list opens against the composer, driven from the textarea without ever taking focus off it.",
|
|
96
96
|
"usage": [
|
|
97
97
|
"DO wire BOTH halves of the render prop: `onTrigger` from the composer's onValueChange and `onKeyDown` from its onKeyDown. With only one wired the list either never opens or cannot be driven.",
|
|
98
98
|
"DO decide yourself what a pick does to the draft — onValueChange hands you the value; the typed /query is still in the box, so replace it or append to it as your screen needs.",
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"name": "LegalDocumentShell",
|
|
6
6
|
"props": [
|
|
7
7
|
{
|
|
8
|
-
"description": "Document title — the <h1> that names the <article> (e.g. 'Terms of Service').",
|
|
8
|
+
"description": "Document title — the <h1> that names the <article> (e.g. 'Terms of Service'). Sized two type steps above the section <h2>s (--legal-document-title-font-size, default the --font-size-2xl step) so the page does not read flat. Around it, PageContainer may omit `title` so this stays the page's only <h1>.",
|
|
9
9
|
"name": "title",
|
|
10
10
|
"required": true,
|
|
11
11
|
"type": "ReactNode"
|
|
@@ -26,6 +26,12 @@
|
|
|
26
26
|
"name": "effectiveDate",
|
|
27
27
|
"type": "string"
|
|
28
28
|
},
|
|
29
|
+
{
|
|
30
|
+
"defaultValue": "\"effective\"",
|
|
31
|
+
"description": "What the date means, which picks its localized caption: 'effective' (施行日 / Effective, a policy in force from that date) or 'updated' (更新日 / Updated, a wiki page or help article last revised). Never prefix a label of your own to the date: word order differs per locale.",
|
|
32
|
+
"name": "dateKind",
|
|
33
|
+
"type": "\"effective\" | \"updated\""
|
|
34
|
+
},
|
|
29
35
|
{
|
|
30
36
|
"description": "Short plain-language summary rendered under the metadata, above the contents.",
|
|
31
37
|
"name": "summary",
|
|
@@ -20,9 +20,8 @@
|
|
|
20
20
|
"type": "string"
|
|
21
21
|
},
|
|
22
22
|
{
|
|
23
|
-
"description": "Page heading rendered as <h1>.",
|
|
23
|
+
"description": "Page heading rendered as <h1>. OPTIONAL when the content draws its own heading (a document reader, LegalDocumentShell): omitted, no <h1> is rendered and a header with no other slot is dropped. The page must then still have exactly one <h1> from its content; `titleRef` has nothing to attach to.",
|
|
24
24
|
"name": "title",
|
|
25
|
-
"required": true,
|
|
26
25
|
"type": "string"
|
|
27
26
|
},
|
|
28
27
|
{
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"type": "string"
|
|
27
27
|
},
|
|
28
28
|
{
|
|
29
|
-
"description": "
|
|
29
|
+
"description": "VISIBLE caption beside/below the bar; it also becomes the accessible name. (Unlike Anchor `label`, which is screen-reader-only: there the name is never drawn.) Pass `aria-labelledby` instead when the name is ALREADY on screen (a row's company name, a card heading) — the bar then borrows it rather than repeating it.",
|
|
30
30
|
"name": "label",
|
|
31
31
|
"type": "string"
|
|
32
32
|
},
|
|
@@ -812,7 +812,7 @@
|
|
|
812
812
|
{
|
|
813
813
|
"group": "data-entry",
|
|
814
814
|
"name": "ChatSuggestion",
|
|
815
|
-
"tagline": "Trigger-character autocomplete over a ChatComposer (Ant Design X Suggestion): type / at a word boundary and a Command list opens against the composer, driven from the textarea without ever taking focus off it."
|
|
815
|
+
"tagline": "In @godxjp/chat since v32, not @godxjp/ui: add @godxjp/chat as a dependency at the same version as @godxjp/ui. Trigger-character autocomplete over a ChatComposer (Ant Design X Suggestion): type / at a word boundary and a Command list opens against the composer, driven from the textarea without ever taking focus off it."
|
|
816
816
|
},
|
|
817
817
|
{
|
|
818
818
|
"group": "navigation",
|
package/agent/components.json
CHANGED
|
@@ -665,9 +665,8 @@
|
|
|
665
665
|
"type": "string"
|
|
666
666
|
},
|
|
667
667
|
{
|
|
668
|
-
"description": "Page heading rendered as <h1>.",
|
|
668
|
+
"description": "Page heading rendered as <h1>. OPTIONAL when the content draws its own heading (a document reader, LegalDocumentShell): omitted, no <h1> is rendered and a header with no other slot is dropped. The page must then still have exactly one <h1> from its content; `titleRef` has nothing to attach to.",
|
|
669
669
|
"name": "title",
|
|
670
|
-
"required": true,
|
|
671
670
|
"type": "string"
|
|
672
671
|
},
|
|
673
672
|
{
|
|
@@ -2317,7 +2316,7 @@
|
|
|
2317
2316
|
"name": "LegalDocumentShell",
|
|
2318
2317
|
"props": [
|
|
2319
2318
|
{
|
|
2320
|
-
"description": "Document title — the <h1> that names the <article> (e.g. 'Terms of Service').",
|
|
2319
|
+
"description": "Document title — the <h1> that names the <article> (e.g. 'Terms of Service'). Sized two type steps above the section <h2>s (--legal-document-title-font-size, default the --font-size-2xl step) so the page does not read flat. Around it, PageContainer may omit `title` so this stays the page's only <h1>.",
|
|
2321
2320
|
"name": "title",
|
|
2322
2321
|
"required": true,
|
|
2323
2322
|
"type": "ReactNode"
|
|
@@ -2338,6 +2337,12 @@
|
|
|
2338
2337
|
"name": "effectiveDate",
|
|
2339
2338
|
"type": "string"
|
|
2340
2339
|
},
|
|
2340
|
+
{
|
|
2341
|
+
"defaultValue": "\"effective\"",
|
|
2342
|
+
"description": "What the date means, which picks its localized caption: 'effective' (施行日 / Effective, a policy in force from that date) or 'updated' (更新日 / Updated, a wiki page or help article last revised). Never prefix a label of your own to the date: word order differs per locale.",
|
|
2343
|
+
"name": "dateKind",
|
|
2344
|
+
"type": "\"effective\" | \"updated\""
|
|
2345
|
+
},
|
|
2341
2346
|
{
|
|
2342
2347
|
"description": "Short plain-language summary rendered under the metadata, above the contents.",
|
|
2343
2348
|
"name": "summary",
|
|
@@ -4727,7 +4732,7 @@
|
|
|
4727
4732
|
"type": "string"
|
|
4728
4733
|
},
|
|
4729
4734
|
{
|
|
4730
|
-
"description": "
|
|
4735
|
+
"description": "VISIBLE caption beside/below the bar; it also becomes the accessible name. (Unlike Anchor `label`, which is screen-reader-only: there the name is never drawn.) Pass `aria-labelledby` instead when the name is ALREADY on screen (a row's company name, a card heading) — the bar then borrows it rather than repeating it.",
|
|
4731
4736
|
"name": "label",
|
|
4732
4737
|
"type": "string"
|
|
4733
4738
|
},
|
|
@@ -14902,7 +14907,7 @@
|
|
|
14902
14907
|
6
|
|
14903
14908
|
],
|
|
14904
14909
|
"storyPath": "data-entry/chat-composer.tsx",
|
|
14905
|
-
"tagline": "Trigger-character autocomplete over a ChatComposer (Ant Design X Suggestion): type / at a word boundary and a Command list opens against the composer, driven from the textarea without ever taking focus off it.",
|
|
14910
|
+
"tagline": "In @godxjp/chat since v32, not @godxjp/ui: add @godxjp/chat as a dependency at the same version as @godxjp/ui. Trigger-character autocomplete over a ChatComposer (Ant Design X Suggestion): type / at a word boundary and a Command list opens against the composer, driven from the textarea without ever taking focus off it.",
|
|
14906
14911
|
"usage": [
|
|
14907
14912
|
"DO wire BOTH halves of the render prop: `onTrigger` from the composer's onValueChange and `onKeyDown` from its onKeyDown. With only one wired the list either never opens or cannot be driven.",
|
|
14908
14913
|
"DO decide yourself what a pick does to the draft — onValueChange hands you the value; the typed /query is still in the box, so replace it or append to it as your screen needs.",
|
|
@@ -15932,7 +15937,7 @@
|
|
|
15932
15937
|
"type": "(event: React.MouseEvent<HTMLAnchorElement>, item: AnchorItemProp) => void"
|
|
15933
15938
|
},
|
|
15934
15939
|
{
|
|
15935
|
-
"description": "
|
|
15940
|
+
"description": "SCREEN-READER-ONLY accessible name of the <nav> landmark — it is never drawn (unlike Progress `label`, which is a visible caption). Need a visible heading over the links? Render a Heading yourself and keep this as the landmark name. antd ships an unnamed <div>; a page routinely carries a breadcrumb, a rail and this, so a localized default (\"On this page\") applies when omitted.",
|
|
15936
15941
|
"name": "label",
|
|
15937
15942
|
"type": "string"
|
|
15938
15943
|
},
|
package/agent/index.json
CHANGED
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
"components": 161,
|
|
5
5
|
"patterns": 24,
|
|
6
6
|
"rules": 43,
|
|
7
|
-
"tokens":
|
|
7
|
+
"tokens": 2197,
|
|
8
8
|
"vocabulary": 14
|
|
9
9
|
},
|
|
10
10
|
"design": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/DESIGN.md",
|
|
11
11
|
"files": [
|
|
12
12
|
{
|
|
13
13
|
"file": "DESIGN.md",
|
|
14
|
-
"note": "
|
|
14
|
+
"note": "14 KB — the visual spec: tokens, colour scarcity, admin screen anatomy (list, detail, form, settings, dashboard), do/don't. Read before composing a screen.",
|
|
15
15
|
"url": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/DESIGN.md"
|
|
16
16
|
},
|
|
17
17
|
{
|
|
@@ -54,19 +54,19 @@
|
|
|
54
54
|
"note": "Pin to the tag that matches the @godxjp/ui version you installed. A catalog newer than your package describes props you do not have; older, and it hides props you do.",
|
|
55
55
|
"read": {
|
|
56
56
|
"live": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/index.json",
|
|
57
|
-
"pinned": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/v32.
|
|
57
|
+
"pinned": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/v32.7.1/agent/index.json"
|
|
58
58
|
},
|
|
59
59
|
"source": "mcp/src/data — the same data @godxjp/ui-mcp serves — plus the foundation and semantic token tiers, read from src/tokens/*.css",
|
|
60
60
|
"start": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/START-HERE.md",
|
|
61
61
|
"tokenTiers": {
|
|
62
62
|
"component": "per-part knobs, --{component}-{part}-{property}; usually leave these alone",
|
|
63
63
|
"counts": {
|
|
64
|
-
"component":
|
|
64
|
+
"component": 1874,
|
|
65
65
|
"foundation": 211,
|
|
66
66
|
"semantic": 112
|
|
67
67
|
},
|
|
68
68
|
"foundation": "the seeds a consumer is invited to set — --primary, --background, --radius",
|
|
69
69
|
"semantic": "named roles that follow the seeds — --ring, --text-link, --overlay-background"
|
|
70
70
|
},
|
|
71
|
-
"version": "32.
|
|
71
|
+
"version": "32.7.1"
|
|
72
72
|
}
|
package/agent/llms.txt
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# @godxjp/ui
|
|
2
2
|
|
|
3
|
-
> A Japanese-enterprise React design system: 161 components,
|
|
4
|
-
> 43 cardinal rules. This file is the entry point for AI agents. Catalog version 32.
|
|
3
|
+
> A Japanese-enterprise React design system: 161 components, 2197 design tokens,
|
|
4
|
+
> 43 cardinal rules. This file is the entry point for AI agents. Catalog version 32.7.1.
|
|
5
5
|
|
|
6
6
|
If your client can run a process, do not read these files — run the MCP server instead
|
|
7
|
-
(`npx @godxjp/ui-mcp@32.
|
|
7
|
+
(`npx @godxjp/ui-mcp@32.7.1`). It is searchable and version-locked. These files exist for agents
|
|
8
8
|
that can only fetch URLs.
|
|
9
9
|
|
|
10
10
|
## Start
|
|
11
11
|
|
|
12
12
|
- [START-HERE.md](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/START-HERE.md): the whole contract — the four rules, the token override model, a page that passes review. Read this first; it is self-contained.
|
|
13
13
|
- [index.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/index.json): version, counts, and the URL of every file.
|
|
14
|
-
- [DESIGN.md](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/DESIGN.md):
|
|
14
|
+
- [DESIGN.md](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/DESIGN.md): 14 KB — the visual spec: tokens, colour scarcity, admin screen anatomy (list, detail, form, settings, dashboard), do/don't. Read it before composing a screen.
|
|
15
15
|
|
|
16
16
|
## Catalog
|
|
17
17
|
|
|
@@ -19,7 +19,7 @@ that can only fetch URLs.
|
|
|
19
19
|
- [components-index.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components-index.json): 47 KB — all 161 components as name, group, tagline, plus `absorbed`: the names that do NOT exist and map to it (`Combobox` → `Select`).
|
|
20
20
|
- [components/<Name>.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components/Select.json): one file per component (1 KB–37 KB, median 6 KB). Read the index, then fetch only the ones you chose — this is the selective route, and the reason you do not need the blob.
|
|
21
21
|
- [components.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components.json): 1.2 MB — every entry in one file. Most URL fetchers truncate a response this size without saying so; prefer the per-component files.
|
|
22
|
-
- [tokens.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/tokens.json): every design token with its value, the reason it exists, and its `tier` — 211 `foundation` seeds (`--primary`, `--background`, `--radius`: set these when you are handed a brand), 112 `semantic` roles,
|
|
22
|
+
- [tokens.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/tokens.json): every design token with its value, the reason it exists, and its `tier` — 211 `foundation` seeds (`--primary`, `--background`, `--radius`: set these when you are handed a brand), 112 `semantic` roles, 1874 `component` knobs.
|
|
23
23
|
- [vocabulary.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/vocabulary.json): the controlled prop vocabulary — which prop name means what, across every component.
|
|
24
24
|
- [rules.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/rules.json): 43 cardinal rules.
|
|
25
25
|
- [anti-ai-tells.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/anti-ai-tells.json): 35 shapes that make generated UI look generated, each with its fix.
|
|
@@ -27,7 +27,7 @@ that can only fetch URLs.
|
|
|
27
27
|
## Pinning
|
|
28
28
|
|
|
29
29
|
Every URL above tracks `main`. To pin to the release a project actually installed, swap `main` for
|
|
30
|
-
the tag: `.../godx-jp/godxjp-ui/v32.
|
|
30
|
+
the tag: `.../godx-jp/godxjp-ui/v32.7.1/agent/...`. A catalog that does not match the installed
|
|
31
31
|
package describes props that are absent, or hides props that are present, and says nothing either way.
|
|
32
32
|
|
|
33
33
|
Pinned catalogs only exist for releases whose tag actually contains `agent/`. If `…/v<version>/agent/index.json` returns 404, that release predates this catalog: read `…/main/…` instead and compare `index.json` → `version` against the package you have, so you at least know which way it drifted.
|
package/agent/tokens.json
CHANGED
|
@@ -7877,6 +7877,18 @@
|
|
|
7877
7877
|
"tier": "component",
|
|
7878
7878
|
"value": "15rem"
|
|
7879
7879
|
},
|
|
7880
|
+
{
|
|
7881
|
+
"description": "Page inline margin of a shell used BARE, the way a public reader page uses it (gh#1296): default = --space-page-x, --space-page-compact-x at ≤720px, resolved at the call site because both re-derive under a density scope. Inside PageContainer / CenteredShell, which already pad, it resolves to 0 so the gutter is never doubled.",
|
|
7882
|
+
"name": "--legal-document-page-padding-inline",
|
|
7883
|
+
"tier": "component",
|
|
7884
|
+
"value": "initial"
|
|
7885
|
+
},
|
|
7886
|
+
{
|
|
7887
|
+
"description": "Document title size — two type-scale steps above a section heading, so the h1 reads as the page title and not as one more section (gh#1296). Default = the --font-size-2xl step.",
|
|
7888
|
+
"name": "--legal-document-title-font-size",
|
|
7889
|
+
"tier": "component",
|
|
7890
|
+
"value": "initial"
|
|
7891
|
+
},
|
|
7880
7892
|
{
|
|
7881
7893
|
"description": "Distance the pinned rail keeps from the top of the scrollport.",
|
|
7882
7894
|
"name": "--legal-document-toc-inset-block-start",
|
|
@@ -61,12 +61,18 @@ function PageContainerRoot({
|
|
|
61
61
|
children,
|
|
62
62
|
className
|
|
63
63
|
}) {
|
|
64
|
-
const
|
|
64
|
+
const hasTitle = title != null && title !== false && title !== "";
|
|
65
|
+
const hasIcon = icon != null && icon !== false;
|
|
66
|
+
const { start: extraStart, end: extraEnd } = resolvePageExtra(extra);
|
|
67
|
+
const hasHeading = headerLoading || hasTitle || hasIcon || status != null || !!subtitle;
|
|
68
|
+
const hasBreadcrumb = !!breadcrumb && breadcrumb.length > 0;
|
|
69
|
+
const hasEyecatch = isValidElement(cover) && cover.props.variant === "eyecatch";
|
|
70
|
+
const hasHeader = hasHeading || hasBreadcrumb || hasEyecatch || extraStart != null || extraEnd != null;
|
|
71
|
+
const reveal = stickyFooter && footer != null && footerReveal === "onScroll" && hasHeader;
|
|
65
72
|
const { headerRef, revealed } = useFooterReveal(reveal);
|
|
66
73
|
const footerRef = useRef(null);
|
|
67
74
|
useToastStickyBarClearance([footerRef], stickyFooter && !!footer && (!reveal || revealed));
|
|
68
75
|
const { t } = useTranslation();
|
|
69
|
-
const { start: extraStart, end: extraEnd } = resolvePageExtra(extra);
|
|
70
76
|
const titleFocus = titleRef === void 0 ? void 0 : { ref: titleRef, tabIndex: -1 };
|
|
71
77
|
const coverVariant = cover == null || cover === false ? void 0 : isValidElement(cover) && cover.props.variant === "eyecatch" ? "eyecatch" : "banner";
|
|
72
78
|
return /* @__PURE__ */ jsxs(
|
|
@@ -90,7 +96,7 @@ function PageContainerRoot({
|
|
|
90
96
|
),
|
|
91
97
|
children: [
|
|
92
98
|
coverVariant === "banner" ? /* @__PURE__ */ jsx("div", { className: "ui-page-cover-slot", children: cover }) : null,
|
|
93
|
-
/* @__PURE__ */ jsxs(
|
|
99
|
+
hasHeader && /* @__PURE__ */ jsxs(
|
|
94
100
|
"header",
|
|
95
101
|
{
|
|
96
102
|
ref: headerRef,
|
|
@@ -98,7 +104,7 @@ function PageContainerRoot({
|
|
|
98
104
|
"data-layout": headerLayout,
|
|
99
105
|
"aria-busy": headerLoading ? "true" : void 0,
|
|
100
106
|
children: [
|
|
101
|
-
|
|
107
|
+
hasBreadcrumb && /* @__PURE__ */ jsx(
|
|
102
108
|
"nav",
|
|
103
109
|
{
|
|
104
110
|
"aria-label": breadcrumbLabel ?? breadcrumbAriaLabel ?? t("navigation.breadcrumb.ariaLabel"),
|
|
@@ -144,8 +150,8 @@ function PageContainerRoot({
|
|
|
144
150
|
),
|
|
145
151
|
coverVariant === "eyecatch" ? /* @__PURE__ */ jsx("div", { className: "ui-page-cover-slot", children: cover }) : null,
|
|
146
152
|
/* @__PURE__ */ jsxs("div", { className: "ui-page-header-row", children: [
|
|
147
|
-
/* @__PURE__ */ jsxs("div", { className: "ui-page-header-heading", children: [
|
|
148
|
-
|
|
153
|
+
hasHeading && /* @__PURE__ */ jsxs("div", { className: "ui-page-header-heading", children: [
|
|
154
|
+
hasIcon ? /* @__PURE__ */ jsx("div", { className: "ui-page-header-icon", children: icon }) : null,
|
|
149
155
|
headerLoading ? /* @__PURE__ */ jsx(
|
|
150
156
|
"h1",
|
|
151
157
|
{
|
|
@@ -154,9 +160,9 @@ function PageContainerRoot({
|
|
|
154
160
|
children: /* @__PURE__ */ jsx("span", { className: "sr-only", children: t("layout.pageHeader.loading") })
|
|
155
161
|
}
|
|
156
162
|
) : status != null ? /* @__PURE__ */ jsxs("div", { className: "ui-page-header-title-row", children: [
|
|
157
|
-
/* @__PURE__ */ jsx("h1", { ...titleFocus, className: "ui-page-title", children: title }),
|
|
163
|
+
hasTitle && /* @__PURE__ */ jsx("h1", { ...titleFocus, className: "ui-page-title", children: title }),
|
|
158
164
|
/* @__PURE__ */ jsx("div", { className: "ui-page-header-status", children: status })
|
|
159
|
-
] }) : /* @__PURE__ */ jsx("h1", { ...titleFocus, className: "ui-page-title", children: title }),
|
|
165
|
+
] }) : hasTitle ? /* @__PURE__ */ jsx("h1", { ...titleFocus, className: "ui-page-title", children: title }) : null,
|
|
160
166
|
headerLoading ? (
|
|
161
167
|
// Decorative only — the pending state is already announced once by the heading above,
|
|
162
168
|
// so a second live placeholder here would double-announce it.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$comment": "AUTO-GENERATED by scripts/gen-measurement-contract.mjs — do not edit. Read this instead of guessing: docs/MEASUREMENT-CONTRACT.md.",
|
|
3
|
-
"version": "32.
|
|
3
|
+
"version": "32.7.1",
|
|
4
4
|
"targetSize": {
|
|
5
5
|
"standard": "WCAG 2.2 SC 2.5.8 Target Size (Minimum), level AA — 24×24 CSS px",
|
|
6
6
|
"min": 24,
|
|
@@ -324,7 +324,8 @@
|
|
|
324
324
|
"legalDocumentShell": {
|
|
325
325
|
"contents": "Contents",
|
|
326
326
|
"version": "Version {version}",
|
|
327
|
-
"effectiveDate": "Effective {date}"
|
|
327
|
+
"effectiveDate": "Effective {date}",
|
|
328
|
+
"updatedDate": "Updated {date}"
|
|
328
329
|
},
|
|
329
330
|
"errorSurface": {
|
|
330
331
|
"statusLabel": "HTTP status {status}",
|
|
@@ -319,7 +319,8 @@
|
|
|
319
319
|
"legalDocumentShell": {
|
|
320
320
|
"contents": "目次",
|
|
321
321
|
"version": "バージョン {version}",
|
|
322
|
-
"effectiveDate": "施行日 {date}"
|
|
322
|
+
"effectiveDate": "施行日 {date}",
|
|
323
|
+
"updatedDate": "更新日 {date}"
|
|
323
324
|
},
|
|
324
325
|
"errorSurface": {
|
|
325
326
|
"statusLabel": "HTTP ステータス {status}",
|
|
@@ -320,7 +320,8 @@
|
|
|
320
320
|
"legalDocumentShell": {
|
|
321
321
|
"contents": "Mục lục",
|
|
322
322
|
"version": "Phiên bản {version}",
|
|
323
|
-
"effectiveDate": "Hiệu lực từ {date}"
|
|
323
|
+
"effectiveDate": "Hiệu lực từ {date}",
|
|
324
|
+
"updatedDate": "Cập nhật {date}"
|
|
324
325
|
},
|
|
325
326
|
"errorSurface": {
|
|
326
327
|
"statusLabel": "Trạng thái HTTP {status}",
|
|
@@ -33,6 +33,7 @@ const LegalDocumentShell = React.forwardRef(
|
|
|
33
33
|
title,
|
|
34
34
|
version,
|
|
35
35
|
effectiveDate,
|
|
36
|
+
dateKind = "effective",
|
|
36
37
|
summary,
|
|
37
38
|
contentsLabel,
|
|
38
39
|
sections,
|
|
@@ -135,9 +136,12 @@ const LegalDocumentShell = React.forwardRef(
|
|
|
135
136
|
version !== void 0 && /* @__PURE__ */ jsx("span", { children: t("layout.legalDocumentShell.version", { version }) }),
|
|
136
137
|
effectiveDate !== void 0 && // <time dateTime> keeps the MACHINE-readable value as the ISO 8601 input while
|
|
137
138
|
// the visible text is the Intl-formatted, locale-correct rendering.
|
|
138
|
-
/* @__PURE__ */ jsx("time", { dateTime: effectiveDate, children: t(
|
|
139
|
-
|
|
140
|
-
|
|
139
|
+
/* @__PURE__ */ jsx("time", { dateTime: effectiveDate, children: t(
|
|
140
|
+
dateKind === "updated" ? "layout.legalDocumentShell.updatedDate" : "layout.legalDocumentShell.effectiveDate",
|
|
141
|
+
{
|
|
142
|
+
date: formatEffectiveDate(effectiveDate, locale)
|
|
143
|
+
}
|
|
144
|
+
) })
|
|
141
145
|
] }),
|
|
142
146
|
summary !== void 0 && // A <div> (not <p>): the summary slot may carry block content, and a <p> inside a <p>
|
|
143
147
|
// is invalid HTML the browser silently un-nests.
|
|
@@ -44,7 +44,13 @@ export type PageContainerExtraProp = ExtraProp | {
|
|
|
44
44
|
export type PageContainerProp = {
|
|
45
45
|
toolbarPad?: PadProp;
|
|
46
46
|
footerPad?: PadProp;
|
|
47
|
-
|
|
47
|
+
/**
|
|
48
|
+
* The page's `<h1>`. Optional for a page whose CONTENT draws its own heading (a document reader,
|
|
49
|
+
* a LegalDocumentShell): omitted, PageContainer renders no `<h1>` at all, and a header with no
|
|
50
|
+
* other slot is not rendered. The page must then still have exactly one `<h1>` — from the
|
|
51
|
+
* content (WCAG 1.3.1 / 2.4.6); `titleRef` has nothing to attach to.
|
|
52
|
+
*/
|
|
53
|
+
title?: TitleProp;
|
|
48
54
|
subtitle?: SubtitleProp;
|
|
49
55
|
/**
|
|
50
56
|
* Status/meta band rendered beside the title inside the heading — StatusBadge, environment tag,
|
|
@@ -1676,6 +1682,12 @@ export type LegalDocumentShellProp = {
|
|
|
1676
1682
|
* `<time dateTime={effectiveDate}>`, so the machine-readable value is always the ISO input.
|
|
1677
1683
|
*/
|
|
1678
1684
|
effectiveDate?: string;
|
|
1685
|
+
/**
|
|
1686
|
+
* What the date in `effectiveDate` means, which picks its localized caption: `"effective"`
|
|
1687
|
+
* (default — 「施行日」 / "Effective", a policy in force from that date) or `"updated"`
|
|
1688
|
+
* (「更新日」 / "Updated", a wiki page or help article last revised on that date).
|
|
1689
|
+
*/
|
|
1690
|
+
dateKind?: "effective" | "updated";
|
|
1679
1691
|
/** Short plain-language summary rendered under the metadata, above the contents. */
|
|
1680
1692
|
summary?: ReactNode;
|
|
1681
1693
|
/** Accessible name + visible caption of the contents `<nav>` (e.g. "Contents"). */
|
package/dist/props/registry.d.ts
CHANGED
|
@@ -1309,6 +1309,10 @@ export declare const COMPONENT_PROP_REGISTRY: {
|
|
|
1309
1309
|
readonly field: "effectiveDate";
|
|
1310
1310
|
readonly local: true;
|
|
1311
1311
|
readonly reason: "ISO 8601 date input formatted via Intl.DateTimeFormat in the active locale.";
|
|
1312
|
+
}, {
|
|
1313
|
+
readonly field: "dateKind";
|
|
1314
|
+
readonly local: true;
|
|
1315
|
+
readonly reason: "Meaning of the date (effective | updated) — selects the localized caption, so the consumer never concatenates a label with a formatted date.";
|
|
1312
1316
|
}, {
|
|
1313
1317
|
readonly field: "summary";
|
|
1314
1318
|
readonly local: true;
|
package/dist/props/registry.js
CHANGED
|
@@ -1402,6 +1402,11 @@ const COMPONENT_PROP_REGISTRY = {
|
|
|
1402
1402
|
local: true,
|
|
1403
1403
|
reason: "ISO 8601 date input formatted via Intl.DateTimeFormat in the active locale."
|
|
1404
1404
|
},
|
|
1405
|
+
{
|
|
1406
|
+
field: "dateKind",
|
|
1407
|
+
local: true,
|
|
1408
|
+
reason: "Meaning of the date (effective | updated) \u2014 selects the localized caption, so the consumer never concatenates a label with a formatted date."
|
|
1409
|
+
},
|
|
1405
1410
|
{
|
|
1406
1411
|
field: "summary",
|
|
1407
1412
|
local: true,
|
package/dist/styles/layers.json
CHANGED