@godxjp/ui 33.18.0 → 33.19.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` 33.18.0.** If the project you are editing has a different
6
+ **This catalog describes `@godxjp/ui` 33.19.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.
@@ -95,7 +95,7 @@
95
95
  {
96
96
  "description": "A FIXED column: number = px, string = any CSS length. Comes with flex: none — a width a sibling can still squeeze is a suggestion, and stacked rows would start at different x offsets. Leaves data-width-raw on the DOM so the measurement stays countable, like gapRaw/padRaw.",
97
97
  "name": "width",
98
- "type": "number | string"
98
+ "type": "WidthProp"
99
99
  },
100
100
  {
101
101
  "description": "CENTRE this box and CAP it at a page measure (--page-measure-narrow 42rem / -medium 48rem / -wide 72rem): margin-inline:auto + inline-size:100% + max-inline-size. THE public answer to \"full-bleed outside, measured column inside\" — a marketing <section> paints edge to edge and its inner Flex measure=\"wide\" holds the content on the page measure. Deliberately NOT on PageContainer: that owns page padding and a header/toolbar/footer scaffold, so a full-bleed page cannot consume it, and the refusal left the centred column owned by nobody — three showcases each hand-wrote the same four declarations (gh#839). It adds NO gutter: the page inset is pad={{ inline: 6 }}, and one band with two padding owners drifts. A MAX, so nothing binds below the cap at 390px. An explicit `width` wins. Do not give a READING column \"wide\" — prose stays narrow/medium, which bracket Bringhurst's 45-75 characters. Omitted emits no attribute at all.",
@@ -13,12 +13,12 @@
13
13
  {
14
14
  "description": "Label column width in horizontal layout (number→px). e.g. 120 or '8rem'.",
15
15
  "name": "labelWidth",
16
- "type": "number | string"
16
+ "type": "WidthProp"
17
17
  },
18
18
  {
19
- "description": "Cap the control width (number→px). Omit to fill the column. Caps the control only — the helper and error still span the field column.",
19
+ "description": "Cap the control width: number→px, or a CSS length ('20rem', '50%', 'calc(…)'). Omit to fill the column. Caps the control only — the helper and error still span the field column. A size word ('md', 'lg') is a type error, not a width (gh#1431).",
20
20
  "name": "controlWidth",
21
- "type": "number | string"
21
+ "type": "WidthProp"
22
22
  },
23
23
  {
24
24
  "defaultValue": "\"end\"",
@@ -61,12 +61,12 @@
61
61
  {
62
62
  "description": "Override the Form's label width for this field.",
63
63
  "name": "labelWidth",
64
- "type": "number | string"
64
+ "type": "WidthProp"
65
65
  },
66
66
  {
67
67
  "description": "Override the Form's control width for this field. Caps the control only — the helper and error still span the field column.",
68
68
  "name": "controlWidth",
69
- "type": "number | string"
69
+ "type": "WidthProp"
70
70
  },
71
71
  {
72
72
  "description": "Span N columns when inside a `columns` Form grid.",
@@ -23,7 +23,7 @@
23
23
  {
24
24
  "description": "On SheetContent (side left/right): desired panel width (number→px). Default w-3/4 sm:max-w-md.",
25
25
  "name": "width",
26
- "type": "number | string"
26
+ "type": "WidthProp"
27
27
  },
28
28
  {
29
29
  "description": "On SheetContent (same name as on DialogContent): fires on every close before focus returns to the trigger. Call event.preventDefault() and focus your own target (e.g. the new page's heading after a drawer navigation) to send focus there instead (gh#1134).",
@@ -1020,7 +1020,7 @@
1020
1020
  {
1021
1021
  "description": "A FIXED column: number = px, string = any CSS length. Comes with flex: none — a width a sibling can still squeeze is a suggestion, and stacked rows would start at different x offsets. Leaves data-width-raw on the DOM so the measurement stays countable, like gapRaw/padRaw.",
1022
1022
  "name": "width",
1023
- "type": "number | string"
1023
+ "type": "WidthProp"
1024
1024
  },
1025
1025
  {
1026
1026
  "description": "CENTRE this box and CAP it at a page measure (--page-measure-narrow 42rem / -medium 48rem / -wide 72rem): margin-inline:auto + inline-size:100% + max-inline-size. THE public answer to \"full-bleed outside, measured column inside\" — a marketing <section> paints edge to edge and its inner Flex measure=\"wide\" holds the content on the page measure. Deliberately NOT on PageContainer: that owns page padding and a header/toolbar/footer scaffold, so a full-bleed page cannot consume it, and the refusal left the centred column owned by nobody — three showcases each hand-wrote the same four declarations (gh#839). It adds NO gutter: the page inset is pad={{ inline: 6 }}, and one band with two padding owners drifts. A MAX, so nothing binds below the cap at 390px. An explicit `width` wins. Do not give a READING column \"wide\" — prose stays narrow/medium, which bracket Bringhurst's 45-75 characters. Omitted emits no attribute at all.",
@@ -5960,12 +5960,12 @@
5960
5960
  {
5961
5961
  "description": "Label column width in horizontal layout (number→px). e.g. 120 or '8rem'.",
5962
5962
  "name": "labelWidth",
5963
- "type": "number | string"
5963
+ "type": "WidthProp"
5964
5964
  },
5965
5965
  {
5966
- "description": "Cap the control width (number→px). Omit to fill the column. Caps the control only — the helper and error still span the field column.",
5966
+ "description": "Cap the control width: number→px, or a CSS length ('20rem', '50%', 'calc(…)'). Omit to fill the column. Caps the control only — the helper and error still span the field column. A size word ('md', 'lg') is a type error, not a width (gh#1431).",
5967
5967
  "name": "controlWidth",
5968
- "type": "number | string"
5968
+ "type": "WidthProp"
5969
5969
  },
5970
5970
  {
5971
5971
  "defaultValue": "\"end\"",
@@ -6096,12 +6096,12 @@
6096
6096
  {
6097
6097
  "description": "Override the Form's label width for this field.",
6098
6098
  "name": "labelWidth",
6099
- "type": "number | string"
6099
+ "type": "WidthProp"
6100
6100
  },
6101
6101
  {
6102
6102
  "description": "Override the Form's control width for this field. Caps the control only — the helper and error still span the field column.",
6103
6103
  "name": "controlWidth",
6104
- "type": "number | string"
6104
+ "type": "WidthProp"
6105
6105
  },
6106
6106
  {
6107
6107
  "description": "Span N columns when inside a `columns` Form grid.",
@@ -8349,7 +8349,7 @@
8349
8349
  {
8350
8350
  "description": "On SheetContent (side left/right): desired panel width (number→px). Default w-3/4 sm:max-w-md.",
8351
8351
  "name": "width",
8352
- "type": "number | string"
8352
+ "type": "WidthProp"
8353
8353
  },
8354
8354
  {
8355
8355
  "description": "On SheetContent (same name as on DialogContent): fires on every close before focus returns to the trigger. Call event.preventDefault() and focus your own target (e.g. the new page's heading after a drawer navigation) to send focus there instead (gh#1134).",
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.18.0/agent/index.json"
57
+ "pinned": "https://raw.githubusercontent.com/godx-jp/godxjp-ui/v33.19.0/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.18.0"
71
+ "version": "33.19.0"
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: 171 components, 2263 design tokens,
4
- > 44 cardinal rules. This file is the entry point for AI agents. Catalog version 33.18.0.
4
+ > 44 cardinal rules. This file is the entry point for AI agents. Catalog version 33.19.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@33.18.0`). It is searchable and version-locked. These files exist for agents
7
+ (`npx @godxjp/ui-mcp@33.19.0`). 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.18.0/agent/...`. A catalog that does not match the installed
30
+ the tag: `.../godx-jp/godxjp-ui/v33.19.0/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.18.0",
3
+ "version": "33.19.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,
@@ -122,7 +122,7 @@ export declare const VOCABULARY_REGISTRY: {
122
122
  readonly WidthProp: {
123
123
  readonly file: "vocabulary/shared.prop.ts";
124
124
  readonly category: "shared";
125
- readonly description: "Explicit layout length (number→px | CSS string) — NOT the SizeProp tier";
125
+ readonly description: 'Explicit layout length (number→px | CSS length string: 20rem, 50%, calc()/min()/var()) — NOT the SizeProp tier; "md" is a type error';
126
126
  };
127
127
  readonly ControlWidthProp: {
128
128
  readonly file: "vocabulary/shared.prop.ts";
@@ -118,7 +118,7 @@ const VOCABULARY_REGISTRY = {
118
118
  WidthProp: {
119
119
  file: "vocabulary/shared.prop.ts",
120
120
  category: "shared",
121
- description: "Explicit layout length (number\u2192px | CSS string) \u2014 NOT the SizeProp tier"
121
+ description: 'Explicit layout length (number\u2192px | CSS length string: 20rem, 50%, calc()/min()/var()) \u2014 NOT the SizeProp tier; "md" is a type error'
122
122
  },
123
123
  ControlWidthProp: {
124
124
  file: "vocabulary/shared.prop.ts",
@@ -57,11 +57,21 @@ export type AsChildProp = boolean;
57
57
  * would otherwise write at the call site.
58
58
  */
59
59
  export type FlushProp = boolean;
60
+ /** A CSS length or percentage unit (CSS Values and Units 4 §5–6), as written after a number. */
61
+ type CssLengthUnit = "px" | "rem" | "em" | "%" | "ch" | "ex" | "lh" | "rlh" | "vw" | "vh" | "vi" | "vb" | "vmin" | "vmax" | "svw" | "svh" | "lvw" | "lvh" | "dvw" | "dvh" | "cqw" | "cqh" | "cqi" | "cqb" | "cqmin" | "cqmax" | "cm" | "mm" | "in" | "pt" | "pc";
60
62
  /**
61
63
  * An explicit layout dimension (NOT the `SizeProp` control-height tier). A `number` is treated as
62
- * px; a `string` is any CSS length (`"32rem"`, `"90vw"`, `"50%"`).
64
+ * px; a `string` must be a CSS length the browser can use as written: a number with a unit
65
+ * (`"32rem"`, `"90vw"`, `"50%"`), an intrinsic keyword (`"auto"`, `"max-content"`,
66
+ * `"min-content"`, `"fit-content"`) or a math / custom-property expression (`calc()`, `min()`,
67
+ * `max()`, `clamp()`, `var()`, `fit-content()`).
68
+ *
69
+ * A size-tier word (`"sm"`, `"md"`, `"lg"`) is a type error, not a width: the value is written into
70
+ * CSS as-is, so `controlWidth="md"` was `--form-control-width: md` — invalid at computed-value time,
71
+ * which drops the cap and lets the control fill its column (gh#1431). A component that offers a
72
+ * width SCALE names it with its own union (`CenteredShellWidthProp`, `ControlWidthProp`).
63
73
  */
64
- export type WidthProp = number | string;
74
+ export type WidthProp = number | `${number}${CssLengthUnit}` | "auto" | "max-content" | "min-content" | "fit-content" | `calc(${string})` | `min(${string})` | `max(${string})` | `clamp(${string})` | `var(${string})` | `fit-content(${string})`;
65
75
  /**
66
76
  * How a control sizes on the inline axis: fill its column, hug its label, or sit at a bounded
67
77
  * width the theme owns.
@@ -106,3 +116,4 @@ export type NotFoundContentProp = React.ReactNode;
106
116
  * lets it size to its content, and a number pins it to that many pixels.
107
117
  */
108
118
  export type PopupMatchWidthProp = boolean | number;
119
+ export {};
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "33.18.0",
2
+ "version": "33.19.0",
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.18.0",
4
- "godxUiMcp": "33.18.0",
3
+ "version": "33.19.0",
4
+ "godxUiMcp": "33.19.0",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
7
7
  "type": "git",