@godxjp/ui 30.6.0 → 30.7.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.
@@ -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` 30.6.0.** If the project you are editing has a different
6
+ **This catalog describes `@godxjp/ui` 30.7.0.** 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.
@@ -47,7 +47,7 @@ Then ask it: `search_components`, `get_component`, `get_tokens`, `get_rule`, `li
47
47
  task is a task** — "build a settings page", "confirm a destructive delete", "a list page with
48
48
  filters" — start HERE, not at the components. Then fetch `patterns/<name>.json` for complete,
49
49
  copy-paste-ready code. A component index answers "does X exist"; it cannot answer "build Y".
50
- 1. `components-index.json` — 46 KB, all 173 components as name + group +
50
+ 1. `components-index.json` — 46 KB, all 175 components as name + group +
51
51
  tagline. Read this when you already know the SHAPE you need. Each entry may carry `absorbed`:
52
52
  names that **do not exist** and map to it — `Combobox`, `Autocomplete`, `CountrySelect` and
53
53
  `SearchSelect` are all `Select`. If you are about to hand-roll something, search this field
@@ -38,10 +38,6 @@
38
38
  31
39
39
  ],
40
40
  "storyPath": "feedback/Skeleton.stories.tsx",
41
- "subParts": [
42
- "SkeletonDetail",
43
- "SkeletonStat"
44
- ],
45
41
  "tagline": "Base pulsing skeleton block, and the namespace the shaped presets hang off (Skeleton.Avatar / .Button / .Input / .Node / .Image / .Article).",
46
42
  "usage": [
47
43
  "DO use Skeleton for a custom block when SkeletonRows/Table/Stat/Article do not match the final layout.",
@@ -0,0 +1,31 @@
1
+ {
2
+ "example": "import { SkeletonDetail } from \"@godxjp/ui/feedback\";\n\n<SkeletonDetail />",
3
+ "group": "feedback",
4
+ "importPath": "@godxjp/ui/feedback",
5
+ "name": "SkeletonDetail",
6
+ "props": [],
7
+ "related": [
8
+ "SkeletonStat — the same propless treatment for a KPI tile.",
9
+ "SkeletonRows — flat list lines, not label/value pairs.",
10
+ "SkeletonTable — tabular placeholder with a header band.",
11
+ "Skeleton — the bare block this preset is built from; reach for it when you need a shape this one does not draw.",
12
+ "Descriptions — the component this placeholder is standing in for."
13
+ ],
14
+ "rules": [
15
+ 3,
16
+ 31
17
+ ],
18
+ "storyPath": "feedback/Skeleton.stories.tsx",
19
+ "tagline": "Fixed-shape placeholder for a RECORD page — title, subtitle, then a bordered box of six label/value pairs. Takes no props: the shape IS the contract, so every detail screen loads identically.",
20
+ "usage": [
21
+ "DO use it while a single record's data resolves — a detail page, a drawer showing one entity, a Descriptions block.",
22
+ "DO leave it propless. It has no `rows` knob on purpose: a record page that loads with a different number of lines each time reads as a layout bug, and `Skeleton` is there for a bespoke shape.",
23
+ "DON'T use it for a list or a table — SkeletonRows draws flat lines, SkeletonTable draws a header band.",
24
+ "Import from `@godxjp/ui/feedback` (canonical). `@godxjp/ui/admin` re-exports it for admin pages."
25
+ ],
26
+ "useCases": [
27
+ "Detail page body before the record arrives",
28
+ "Drawer or sheet opened on a row while its full entity loads",
29
+ "Descriptions block placeholder"
30
+ ]
31
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "example": "import { SkeletonStat } from \"@godxjp/ui/feedback\";\nimport { ResponsiveGrid } from \"@godxjp/ui/layout\";\n\n<ResponsiveGrid columns={{ base: 1, sm: 2, lg: 4 }} gap=\"md\">\n {Array.from({ length: 4 }).map((_, i) => (\n <SkeletonStat key={i} />\n ))}\n</ResponsiveGrid>",
3
+ "group": "feedback",
4
+ "importPath": "@godxjp/ui/feedback",
5
+ "name": "SkeletonStat",
6
+ "props": [],
7
+ "related": [
8
+ "StatCard — the loaded component this stands in for; match the grid, not just the size.",
9
+ "SkeletonDetail — the same propless treatment for a record page.",
10
+ "SkeletonRows — flat list lines.",
11
+ "Skeleton — the bare block this preset is built from."
12
+ ],
13
+ "rules": [
14
+ 3,
15
+ 31
16
+ ],
17
+ "storyPath": "feedback/Skeleton.stories.tsx",
18
+ "tagline": "Fixed-shape placeholder for ONE KPI tile — label, big value, caption. Takes no props, so a row of tiles loads at a uniform height and nothing reflows when the numbers arrive.",
19
+ "usage": [
20
+ "DO render one per StatCard while the figures load, inside the same grid the loaded tiles use.",
21
+ "DO leave it propless — it mirrors StatCard's three-line rhythm exactly, which is what stops the row jumping on hydration.",
22
+ "DON'T wrap it in a Card yourself if the loaded state uses StatCard; put it where the StatCard goes so the surface is identical.",
23
+ "Import from `@godxjp/ui/feedback` (canonical). `@godxjp/ui/admin` re-exports it for admin pages."
24
+ ],
25
+ "useCases": [
26
+ "Dashboard KPI row before the metrics query resolves",
27
+ "A single figure on a detail page loading separately from the record",
28
+ "Placeholder inside a ResponsiveGrid of StatCards"
29
+ ]
30
+ }
@@ -607,6 +607,16 @@
607
607
  "name": "Skeleton",
608
608
  "tagline": "Base pulsing skeleton block, and the namespace the shaped presets hang off (Skeleton.Avatar / .Button / .Input / .Node / .Image / .Article)."
609
609
  },
610
+ {
611
+ "group": "feedback",
612
+ "name": "SkeletonDetail",
613
+ "tagline": "Fixed-shape placeholder for a RECORD page — title, subtitle, then a bordered box of six label/value pairs. Takes no props: the shape IS the contract, so every detail screen loads identically."
614
+ },
615
+ {
616
+ "group": "feedback",
617
+ "name": "SkeletonStat",
618
+ "tagline": "Fixed-shape placeholder for ONE KPI tile — label, big value, caption. Takes no props, so a row of tiles loads at a uniform height and nothing reflows when the numbers arrive."
619
+ },
610
620
  {
611
621
  "group": "feedback",
612
622
  "name": "SkeletonArticle",
@@ -11480,10 +11480,6 @@
11480
11480
  31
11481
11481
  ],
11482
11482
  "storyPath": "feedback/Skeleton.stories.tsx",
11483
- "subParts": [
11484
- "SkeletonDetail",
11485
- "SkeletonStat"
11486
- ],
11487
11483
  "tagline": "Base pulsing skeleton block, and the namespace the shaped presets hang off (Skeleton.Avatar / .Button / .Input / .Node / .Image / .Article).",
11488
11484
  "usage": [
11489
11485
  "DO use Skeleton for a custom block when SkeletonRows/Table/Stat/Article do not match the final layout.",
@@ -11497,6 +11493,67 @@
11497
11493
  "Inline metadata placeholder"
11498
11494
  ]
11499
11495
  },
11496
+ {
11497
+ "example": "import { SkeletonDetail } from \"@godxjp/ui/feedback\";\n\n<SkeletonDetail />",
11498
+ "group": "feedback",
11499
+ "importPath": "@godxjp/ui/feedback",
11500
+ "name": "SkeletonDetail",
11501
+ "props": [],
11502
+ "related": [
11503
+ "SkeletonStat — the same propless treatment for a KPI tile.",
11504
+ "SkeletonRows — flat list lines, not label/value pairs.",
11505
+ "SkeletonTable — tabular placeholder with a header band.",
11506
+ "Skeleton — the bare block this preset is built from; reach for it when you need a shape this one does not draw.",
11507
+ "Descriptions — the component this placeholder is standing in for."
11508
+ ],
11509
+ "rules": [
11510
+ 3,
11511
+ 31
11512
+ ],
11513
+ "storyPath": "feedback/Skeleton.stories.tsx",
11514
+ "tagline": "Fixed-shape placeholder for a RECORD page — title, subtitle, then a bordered box of six label/value pairs. Takes no props: the shape IS the contract, so every detail screen loads identically.",
11515
+ "usage": [
11516
+ "DO use it while a single record's data resolves — a detail page, a drawer showing one entity, a Descriptions block.",
11517
+ "DO leave it propless. It has no `rows` knob on purpose: a record page that loads with a different number of lines each time reads as a layout bug, and `Skeleton` is there for a bespoke shape.",
11518
+ "DON'T use it for a list or a table — SkeletonRows draws flat lines, SkeletonTable draws a header band.",
11519
+ "Import from `@godxjp/ui/feedback` (canonical). `@godxjp/ui/admin` re-exports it for admin pages."
11520
+ ],
11521
+ "useCases": [
11522
+ "Detail page body before the record arrives",
11523
+ "Drawer or sheet opened on a row while its full entity loads",
11524
+ "Descriptions block placeholder"
11525
+ ]
11526
+ },
11527
+ {
11528
+ "example": "import { SkeletonStat } from \"@godxjp/ui/feedback\";\nimport { ResponsiveGrid } from \"@godxjp/ui/layout\";\n\n<ResponsiveGrid columns={{ base: 1, sm: 2, lg: 4 }} gap=\"md\">\n {Array.from({ length: 4 }).map((_, i) => (\n <SkeletonStat key={i} />\n ))}\n</ResponsiveGrid>",
11529
+ "group": "feedback",
11530
+ "importPath": "@godxjp/ui/feedback",
11531
+ "name": "SkeletonStat",
11532
+ "props": [],
11533
+ "related": [
11534
+ "StatCard — the loaded component this stands in for; match the grid, not just the size.",
11535
+ "SkeletonDetail — the same propless treatment for a record page.",
11536
+ "SkeletonRows — flat list lines.",
11537
+ "Skeleton — the bare block this preset is built from."
11538
+ ],
11539
+ "rules": [
11540
+ 3,
11541
+ 31
11542
+ ],
11543
+ "storyPath": "feedback/Skeleton.stories.tsx",
11544
+ "tagline": "Fixed-shape placeholder for ONE KPI tile — label, big value, caption. Takes no props, so a row of tiles loads at a uniform height and nothing reflows when the numbers arrive.",
11545
+ "usage": [
11546
+ "DO render one per StatCard while the figures load, inside the same grid the loaded tiles use.",
11547
+ "DO leave it propless — it mirrors StatCard's three-line rhythm exactly, which is what stops the row jumping on hydration.",
11548
+ "DON'T wrap it in a Card yourself if the loaded state uses StatCard; put it where the StatCard goes so the surface is identical.",
11549
+ "Import from `@godxjp/ui/feedback` (canonical). `@godxjp/ui/admin` re-exports it for admin pages."
11550
+ ],
11551
+ "useCases": [
11552
+ "Dashboard KPI row before the metrics query resolves",
11553
+ "A single figure on a detail page loading separately from the record",
11554
+ "Placeholder inside a ResponsiveGrid of StatCards"
11555
+ ]
11556
+ },
11500
11557
  {
11501
11558
  "example": "import { SkeletonArticle } from \"@godxjp/ui/feedback\";\n\n<SkeletonArticle avatar active paragraph={{ rows: 3 }} />",
11502
11559
  "group": "feedback",
package/agent/index.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "counts": {
3
3
  "anti-ai-tells": 26,
4
- "components": 173,
4
+ "components": 175,
5
5
  "patterns": 21,
6
6
  "rules": 50,
7
7
  "tokens": 2074,
@@ -10,7 +10,7 @@
10
10
  "files": [
11
11
  {
12
12
  "file": "components-index.json",
13
- "note": "46 KB — name + group + tagline for all 173. FETCH THIS FIRST, then fetch only the components you chose.",
13
+ "note": "46 KB — name + group + tagline for all 175. FETCH THIS FIRST, then fetch only the components you chose.",
14
14
  "url": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components-index.json"
15
15
  },
16
16
  {
@@ -48,7 +48,7 @@
48
48
  "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.",
49
49
  "read": {
50
50
  "live": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/index.json",
51
- "pinned": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/v30.6.0/agent/index.json"
51
+ "pinned": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/v30.7.0/agent/index.json"
52
52
  },
53
53
  "source": "mcp/src/data — the same data @godxjp/ui-mcp serves — plus the foundation and semantic token tiers, read from src/tokens/*.css",
54
54
  "start": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/START-HERE.md",
@@ -62,5 +62,5 @@
62
62
  "foundation": "the seeds a consumer is invited to set — --primary, --background, --radius",
63
63
  "semantic": "named roles that follow the seeds — --ring, --text-link, --overlay-background"
64
64
  },
65
- "version": "30.6.0"
65
+ "version": "30.7.0"
66
66
  }
package/agent/llms.txt CHANGED
@@ -1,10 +1,10 @@
1
1
  # @godxjp/ui
2
2
 
3
- > A Japanese-enterprise React design system: 173 components, 2074 design tokens,
4
- > 50 cardinal rules. This file is the entry point for AI agents. Catalog version 30.6.0.
3
+ > A Japanese-enterprise React design system: 175 components, 2074 design tokens,
4
+ > 50 cardinal rules. This file is the entry point for AI agents. Catalog version 30.7.0.
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@30.6.0`). It is searchable and version-locked. These files exist for agents
7
+ (`npx @godxjp/ui-mcp@30.7.0`). It is searchable and version-locked. These files exist for agents
8
8
  that can only fetch URLs.
9
9
 
10
10
  ## Start
@@ -15,7 +15,7 @@ that can only fetch URLs.
15
15
  ## Catalog
16
16
 
17
17
  - [patterns-index.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/patterns-index.json): 21 whole-task patterns (name, tagline, tags). Start here when the task is a TASK — "build a settings page" — then fetch `patterns/<name>.json` for complete code.
18
- - [components-index.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components-index.json): 46 KB — all 173 components as name, group, tagline, plus `absorbed`: the names that do NOT exist and map to it (`Combobox` → `Select`).
18
+ - [components-index.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components-index.json): 46 KB — all 175 components as name, group, tagline, plus `absorbed`: the names that do NOT exist and map to it (`Combobox` → `Select`).
19
19
  - [components/&lt;Name&gt;.json](https://raw.githubusercontent.com/godx-jp/godxjp-ui/main/agent/components/Select.json): one file per component (1 KB–34 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.
20
20
  - [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.
21
21
  - [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), 103 `semantic` roles, 1760 `component` knobs.
@@ -26,7 +26,7 @@ that can only fetch URLs.
26
26
  ## Pinning
27
27
 
28
28
  Every URL above tracks `main`. To pin to the release a project actually installed, swap `main` for
29
- the tag: `.../godx-jp/godxjp-ui/v30.6.0/agent/...`. A catalog that does not match the installed
29
+ the tag: `.../godx-jp/godxjp-ui/v30.7.0/agent/...`. A catalog that does not match the installed
30
30
  package describes props that are absent, or hides props that are present, and says nothing either way.
31
31
 
32
32
  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.
@@ -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": "30.6.0",
3
+ "version": "30.7.0",
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,
@@ -3,8 +3,8 @@
3
3
  > Generated by `scripts/frame-coverage.mjs` (issue #163). Do not edit by hand — run `pnpm check:frame-coverage`.
4
4
  > Standard: [FRAME-COVERAGE-STANDARD.md](./FRAME-COVERAGE-STANDARD.md). A missing dimension is **UNTESTED**, never a pass.
5
5
 
6
- - Public components: **173**
7
- - With ≥1 frame: **152** · zero-frame: **21**
6
+ - Public components: **175**
7
+ - With ≥1 frame: **152** · zero-frame: **23**
8
8
  - Fully covered (every contract axis declared): **0**
9
9
 
10
10
  ## UNTESTED — no `/frame/**` route
@@ -22,6 +22,8 @@
22
22
  - [ ] `ServiceCatalogCta`
23
23
  - [ ] `SkeletonRows`
24
24
  - [ ] `OverlayPortalProvider`
25
+ - [ ] `SkeletonDetail`
26
+ - [ ] `SkeletonStat`
25
27
  - [ ] `SkeletonArticle`
26
28
  - [ ] `SkeletonAvatar`
27
29
  - [ ] `SkeletonButton`
@@ -154,6 +156,8 @@ Legend: ✓ covered · N/A reasoned skip · · UNTESTED (blank cell = UNTESTED).
154
156
  | Avatar | ✓ | ✓ | N/A | N/A | · | · | · | · | · | · |
155
157
  | Separator | ✓ | · | N/A | N/A | · | · | · | · | · | · |
156
158
  | Skeleton | ✓ | N/A | · | N/A | · | · | · | · | · | · |
159
+ | SkeletonDetail | **✗** | N/A | N/A | N/A | · | · | · | · | · | · |
160
+ | SkeletonStat | **✗** | N/A | N/A | N/A | · | · | · | · | · | · |
157
161
  | SkeletonArticle | **✗** | N/A | · | N/A | · | · | · | · | · | · |
158
162
  | SkeletonAvatar | **✗** | ✓ | N/A | N/A | · | · | · | · | · | · |
159
163
  | SkeletonButton | **✗** | ✓ | N/A | N/A | · | · | · | · | · | · |
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@godxjp/ui",
3
- "version": "30.6.0",
4
- "godxUiMcp": "30.6.0",
3
+ "version": "30.7.0",
4
+ "godxUiMcp": "30.7.0",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
7
7
  "type": "git",