@godxjp/ui 33.6.0 → 33.6.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.
@@ -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` 33.6.0.** If the project you are editing has a different
6
+ **This catalog describes `@godxjp/ui` 33.6.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.
package/agent/index.json CHANGED
@@ -54,7 +54,7 @@
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/v33.6.0/agent/index.json"
57
+ "pinned": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/v33.6.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",
@@ -68,5 +68,5 @@
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": "33.6.0"
71
+ "version": "33.6.1"
72
72
  }
package/agent/llms.txt CHANGED
@@ -1,10 +1,10 @@
1
1
  # @godxjp/ui
2
2
 
3
3
  > A Japanese-enterprise React design system: 166 components, 2232 design tokens,
4
- > 44 cardinal rules. This file is the entry point for AI agents. Catalog version 33.6.0.
4
+ > 44 cardinal rules. This file is the entry point for AI agents. Catalog version 33.6.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@33.6.0`). It is searchable and version-locked. These files exist for agents
7
+ (`npx @godxjp/ui-mcp@33.6.1`). It is searchable and version-locked. These files exist for agents
8
8
  that can only fetch URLs.
9
9
 
10
10
  ## Start
@@ -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/v33.6.0/agent/...`. A catalog that does not match the installed
30
+ the tag: `.../godx-jp/godxjp-ui/v33.6.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.
@@ -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": "33.6.0",
3
+ "version": "33.6.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,
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "33.6.0",
2
+ "version": "33.6.1",
3
3
  "generatedBy": "scripts/gen-style-layers.mjs — do not edit by hand; run `pnpm gen:style-layers`",
4
4
  "base": "base.css",
5
5
  "fonts": "fonts.css",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@godxjp/ui",
3
- "version": "33.6.0",
4
- "godxUiMcp": "33.6.0",
3
+ "version": "33.6.1",
4
+ "godxUiMcp": "33.6.1",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
7
7
  "type": "git",
@@ -1839,9 +1839,27 @@ const NO_OP_SUBMIT =
1839
1839
  * create sub-component with no PageContainer of its own still pairs with the page's list) —
1840
1840
  * neither inside an overlay, the list not inside the
1841
1841
  * Form (an editor with a line-items Table is a form, not a list page), and the Form actually
1842
- * submitting (see NO_OP_SUBMIT). One finding per such Form.
1842
+ * submitting (see NO_OP_SUBMIT), and not the page's own editor: a Form whose `id` a Button
1843
+ * submits from elsewhere (`<Button type="submit" form={FORM_ID}>` in the header, the page-editor
1844
+ * exemplar's shape) IS the page, so a read-only list beside it is part of that editor — gino-cloud
1845
+ * 実習終了 listed the filings the chosen reason triggers next to its form. One finding per such Form.
1843
1846
  */
1844
1847
  function* formOnListPageMatches(source) {
1848
+ // The tag's OWN `name=` value (topLevelAttrs blanks nested braces but keeps offsets): a string
1849
+ // literal or a bare identifier, normalized so `form={FORM_ID}` pairs with `id={FORM_ID}`.
1850
+ const attrValue = (openTag, name) => {
1851
+ const at = new RegExp(`\\b${name}\\s*=\\s*`).exec(topLevelAttrs(openTag));
1852
+ if (!at) return null;
1853
+ const lit = /^(?:"([^"]*)"|'([^']*)'|\{\s*([\w.$]+)\s*\})/.exec(
1854
+ openTag.slice(at.index + at[0].length),
1855
+ );
1856
+ return lit ? (lit[1] ?? lit[2] ?? `{${lit[3]}}`) : null;
1857
+ };
1858
+ const submitTargets = new Set();
1859
+ for (const { tag, openTag } of jsxElements(source)) {
1860
+ const target = tag === "Button" ? attrValue(openTag, "form") : null;
1861
+ if (target !== null) submitTargets.add(target);
1862
+ }
1845
1863
  const opened = []; // Forms whose children frame has not been seen yet
1846
1864
  const byFrame = new Map(); // a Form's children-frame id → { index, openTag, scope, skip, fields }
1847
1865
  const listScopes = new Set(); // PageContainer children-frame ids (or "file") holding a list
@@ -1865,7 +1883,9 @@ function* formOnListPageMatches(source) {
1865
1883
  // `role="search"` marks a 検索条件フォーム: a submitting SEARCH over the list, not a create
1866
1884
  // form inlined beside it (the same shape SearchForm renders).
1867
1885
  const search = /\brole\s*=\s*\{?\s*["']search["']/.test(attrs);
1868
- const skip = overlay || !submits || search || NO_OP_SUBMIT.test(openTag);
1886
+ const id = attrValue(openTag, "id");
1887
+ const editor = id !== null && submitTargets.has(id);
1888
+ const skip = overlay || !submits || search || editor || NO_OP_SUBMIT.test(openTag);
1869
1889
  opened.push({ index, openTag, scope, skip, fields: 0 });
1870
1890
  }
1871
1891
  } else if (tag === "FormField") {