@godxjp/ui 33.16.0 → 33.17.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 (48) hide show
  1. package/README.md +2 -2
  2. package/agent/START-HERE.md +6 -6
  3. package/agent/components/AppShell.json +1 -1
  4. package/agent/components/Card.json +1 -1
  5. package/agent/components/Heading.json +6 -0
  6. package/agent/components/Table.json +1 -0
  7. package/agent/components-index.json +2 -2
  8. package/agent/components.json +9 -2
  9. package/agent/index.json +6 -6
  10. package/agent/llms.txt +5 -5
  11. package/agent/rules.json +1 -1
  12. package/agent/tokens.json +36 -0
  13. package/agent/vocabulary.json +12 -0
  14. package/dist/components/data-display/index.d.ts +1 -1
  15. package/dist/components/data-display/index.js +10 -1
  16. package/dist/components/data-display/table.d.ts +9 -0
  17. package/dist/components/data-display/table.js +3 -0
  18. package/dist/components/general/typography.d.ts +1 -0
  19. package/dist/components/general/typography.js +3 -0
  20. package/dist/contracts/measurement.json +1 -1
  21. package/dist/lib/hooks.d.ts +8 -0
  22. package/dist/lib/hooks.js +20 -21
  23. package/dist/props/components/general.prop.d.ts +8 -1
  24. package/dist/props/registry.d.ts +6 -1
  25. package/dist/props/registry.js +6 -0
  26. package/dist/props/vocabulary/index.d.ts +1 -1
  27. package/dist/props/vocabulary/interaction.prop.d.ts +6 -0
  28. package/dist/styles/badge-layout.css +1 -0
  29. package/dist/styles/base.css +8 -0
  30. package/dist/styles/card-layout.css +8 -0
  31. package/dist/styles/dialog-layout.css +7 -3
  32. package/dist/styles/layers.json +1 -1
  33. package/dist/styles/layout.css +2 -0
  34. package/dist/styles/logo-layout.css +18 -12
  35. package/dist/styles/shell-layout.css +40 -1
  36. package/dist/styles/table-layout.css +30 -0
  37. package/dist/styles/text-layout.css +5 -0
  38. package/dist/styles.css +1 -1
  39. package/dist/theme/famgia.service.css +10 -8
  40. package/dist/themes/godx-tokens.css +20 -16
  41. package/dist/tokens/components/feedback.css +2 -0
  42. package/dist/tokens/components/logo.css +6 -4
  43. package/dist/tokens/components/table.css +4 -0
  44. package/dist/tokens/derived.css +28 -24
  45. package/dist/tokens/foundation.css +62 -56
  46. package/dist/tokens/semantic/layout.css +5 -3
  47. package/docs/TOKENS.md +33 -0
  48. package/package.json +2 -2
@@ -21,12 +21,14 @@
21
21
  "Helvetica Neue", Arial, sans-serif;
22
22
  }
23
23
 
24
- .dark {
25
- --primary: 221 90% 66%;
26
- --primary-foreground: 222 47% 11%;
27
-
28
- --ring: 221 90% 66%;
29
- --text-link: 221 90% 72%;
30
- --text-brand: 221 90% 70%;
31
- --text-primary: 221 90% 68%;
24
+ @media not print {
25
+ .dark {
26
+ --primary: 221 90% 66%;
27
+ --primary-foreground: 222 47% 11%;
28
+
29
+ --ring: 221 90% 66%;
30
+ --text-link: 221 90% 72%;
31
+ --text-brand: 221 90% 70%;
32
+ --text-primary: 221 90% 68%;
33
+ }
32
34
  }
@@ -10,15 +10,17 @@
10
10
  --shadow-color: 18 43 38;
11
11
  }
12
12
 
13
- .dark,
14
- :root[data-theme="dark"] {
13
+ @media not print {
14
+ .dark,
15
+ :root[data-theme="dark"] {
15
16
 
16
- --primary: 168 60% 60%;
17
- --primary-foreground: 48 9% 9%;
18
- --brand: 168 60% 60%;
19
- --brand-foreground: 48 9% 9%;
17
+ --primary: 168 60% 60%;
18
+ --primary-foreground: 48 9% 9%;
19
+ --brand: 168 60% 60%;
20
+ --brand-foreground: 48 9% 9%;
20
21
 
21
- --shadow-color: 6 14 13;
22
+ --shadow-color: 6 14 13;
23
+ }
22
24
  }
23
25
 
24
26
  @supports not (color: hsl(from red h s l)) {
@@ -32,14 +34,16 @@
32
34
  --text-primary: 168 100% 9.5%;
33
35
  }
34
36
 
35
- .dark,
36
- :root[data-theme="dark"] {
37
- --primary-hover: 168 60% 65.8%;
38
- --primary-active: 168 60% 71.6%;
39
- --primary-border: 168 28% 16.2%;
40
- --control-outline: 168 59.4% 34.9%;
41
- --text-link: 168 60% 60%;
42
- --text-brand: 168 60% 60%;
43
- --text-primary: 168 60% 65.8%;
37
+ @media not print {
38
+ .dark,
39
+ :root[data-theme="dark"] {
40
+ --primary-hover: 168 60% 65.8%;
41
+ --primary-active: 168 60% 71.6%;
42
+ --primary-border: 168 28% 16.2%;
43
+ --control-outline: 168 59.4% 34.9%;
44
+ --text-link: 168 60% 60%;
45
+ --text-brand: 168 60% 60%;
46
+ --text-primary: 168 60% 65.8%;
47
+ }
44
48
  }
45
49
  }
@@ -30,6 +30,8 @@
30
30
  --sheet-header-close-space-inline-end: var(--space-8);
31
31
  --dialog-width-default: 32rem;
32
32
 
33
+ --dialog-radius: initial;
34
+
33
35
  --dialog-width: initial;
34
36
 
35
37
  --dialog-motion-duration: initial;
@@ -65,9 +65,11 @@
65
65
  --logo-product-suffix-color: initial;
66
66
  }
67
67
 
68
- .dark,
69
- :root[data-theme="dark"] {
70
- --logo-identity-foreground: 48 9% 9%;
68
+ @media not print {
69
+ .dark,
70
+ :root[data-theme="dark"] {
71
+ --logo-identity-foreground: 48 9% 9%;
71
72
 
72
- --logo-godx-ink-color: 140 23.1% 97.5%;
73
+ --logo-godx-ink-color: 140 23.1% 97.5%;
74
+ }
73
75
  }
@@ -116,4 +116,8 @@
116
116
 
117
117
  --table-row-tone-rail-width: initial;
118
118
  --table-row-tone-wash-alpha: 0.06;
119
+
120
+ --table-caption-color: initial;
121
+ --table-caption-font-size: initial;
122
+ --table-caption-space-y: initial;
119
123
  }
@@ -39,28 +39,30 @@
39
39
  --ring: var(--primary);
40
40
  }
41
41
 
42
- .dark,
43
- :root[data-theme="dark"] {
44
- --primary-hover-channels: var(--primary-hover-lighten-channels);
45
- --primary-active-channels: var(--primary-active-lighten-channels);
42
+ @media not print {
43
+ .dark,
44
+ :root[data-theme="dark"] {
45
+ --primary-hover-channels: var(--primary-hover-lighten-channels);
46
+ --primary-active-channels: var(--primary-active-lighten-channels);
46
47
 
47
- --primary-border-channels: h calc(s * 0.467) calc(l * 0.27043);
48
+ --primary-border-channels: h calc(s * 0.467) calc(l * 0.27043);
48
49
 
49
- --control-outline-channels: h calc(s * 0.99) calc(l - 25.1);
50
- --control-outline-alpha: 0.29;
50
+ --control-outline-channels: h calc(s * 0.99) calc(l - 25.1);
51
+ --control-outline-alpha: 0.29;
51
52
 
52
- --text-link-channels: h s l;
53
- --text-brand-channels: h s l;
53
+ --text-link-channels: h s l;
54
+ --text-brand-channels: h s l;
54
55
 
55
- --text-primary-channels: h s calc(l + 5.8);
56
+ --text-primary-channels: h s calc(l + 5.8);
56
57
 
57
- --destructive-hover: 358.8 42.3% 53.1%;
58
- --destructive-active: 357.3 50.6% 34.1%;
58
+ --destructive-hover: 358.8 42.3% 53.1%;
59
+ --destructive-active: 357.3 50.6% 34.1%;
59
60
 
60
- --control-outline-error: 351.5 98.3% 53.5%;
61
- --control-outline-error-alpha: 0.06;
61
+ --control-outline-error: 351.5 98.3% 53.5%;
62
+ --control-outline-error-alpha: 0.06;
62
63
 
63
- --ring: var(--primary);
64
+ --ring: var(--primary);
65
+ }
64
66
  }
65
67
 
66
68
  @supports not (color: hsl(from red h s l)) {
@@ -74,14 +76,16 @@
74
76
  --text-primary: 240 6% 0%;
75
77
  }
76
78
 
77
- .dark,
78
- :root[data-theme="dark"] {
79
- --primary-hover: 0 0% 92.2%;
80
- --primary-active: 0 0% 86.4%;
81
- --primary-border: 0 0% 26.5%;
82
- --control-outline: 0 0% 72.9%;
83
- --text-link: 0 0% 98%;
84
- --text-brand: 0 0% 98%;
85
- --text-primary: 0 0% 100%;
79
+ @media not print {
80
+ .dark,
81
+ :root[data-theme="dark"] {
82
+ --primary-hover: 0 0% 92.2%;
83
+ --primary-active: 0 0% 86.4%;
84
+ --primary-border: 0 0% 26.5%;
85
+ --control-outline: 0 0% 72.9%;
86
+ --text-link: 0 0% 98%;
87
+ --text-brand: 0 0% 98%;
88
+ --text-primary: 0 0% 100%;
89
+ }
86
90
  }
87
91
  }
@@ -175,6 +175,10 @@
175
175
  --font-family-display: var(--font-family-sans);
176
176
  --font-family-body: var(--font-family-sans);
177
177
 
178
+ --font-family-editorial: initial;
179
+
180
+ --font-family-tabular: initial;
181
+
178
182
  --font-size-base: 0.875rem;
179
183
  --font-size-ratio: 1.1227;
180
184
 
@@ -344,60 +348,62 @@
344
348
  --field-label-gap: var(--space-2);
345
349
  }
346
350
 
347
- .dark,
348
- :root[data-theme="dark"] {
349
-
350
- --background: 48 9% 9%;
351
- --foreground: 60 20% 96%;
352
- --card: 48 8% 12%;
353
- --card-foreground: 60 20% 96%;
354
- --popover: 48 8% 12%;
355
- --popover-foreground: 60 20% 96%;
356
- --primary: 0 0% 98%;
357
- --primary-foreground: 48 9% 9%;
358
- --secondary: 45 6% 18%;
359
- --secondary-foreground: 60 20% 96%;
360
- --muted: 45 6% 18%;
361
- --muted-foreground: 44 6% 64%;
362
- --accent: 45 7% 22%;
363
- --accent-foreground: 60 20% 96%;
364
-
365
- --destructive: 357 55% 48%;
366
- --destructive-foreground: 0 0% 100%;
367
-
368
- --border: 45 6% 19%;
369
-
370
- --input: 45 6% 51%;
371
-
372
- --success: 146 45% 55%;
373
- --success-foreground: 48 9% 9%;
374
- --warning: 44 95% 55%;
375
- --warning-foreground: 48 9% 9%;
376
- --info: 221 55% 62%;
377
- --info-foreground: 48 9% 9%;
378
- --attention: 25 95% 56%;
379
- --attention-foreground: 48 9% 9%;
380
-
381
- --brand: 0 0% 98%;
382
- --brand-foreground: 48 9% 9%;
383
-
384
- --text-tertiary: 44 6% 56%;
385
- --text-disabled: 45 6% 40%;
386
-
387
- --text-success: 146 55% 64%;
388
- --text-warning: 44 95% 62%;
389
- --text-info: 221 70% 72%;
390
- --text-error: 357 75% 68%;
391
-
392
- --secondary-hover: 45 6% 22%;
393
- --secondary-active: 45 6% 26%;
394
-
395
- --chart-2: #008465;
396
- --chart-4: #d43b42;
397
-
398
- --chart-heat-1: #173a52;
399
- --chart-heat-2: #145f92;
400
- --chart-heat-3: #2a88c9;
401
- --chart-heat-4: #6db5e6;
402
- --chart-heat-5: #bfe1f7;
351
+ @media not print {
352
+ .dark,
353
+ :root[data-theme="dark"] {
354
+
355
+ --background: 48 9% 9%;
356
+ --foreground: 60 20% 96%;
357
+ --card: 48 8% 12%;
358
+ --card-foreground: 60 20% 96%;
359
+ --popover: 48 8% 12%;
360
+ --popover-foreground: 60 20% 96%;
361
+ --primary: 0 0% 98%;
362
+ --primary-foreground: 48 9% 9%;
363
+ --secondary: 45 6% 18%;
364
+ --secondary-foreground: 60 20% 96%;
365
+ --muted: 45 6% 18%;
366
+ --muted-foreground: 44 6% 64%;
367
+ --accent: 45 7% 22%;
368
+ --accent-foreground: 60 20% 96%;
369
+
370
+ --destructive: 357 55% 48%;
371
+ --destructive-foreground: 0 0% 100%;
372
+
373
+ --border: 45 6% 19%;
374
+
375
+ --input: 45 6% 51%;
376
+
377
+ --success: 146 45% 55%;
378
+ --success-foreground: 48 9% 9%;
379
+ --warning: 44 95% 55%;
380
+ --warning-foreground: 48 9% 9%;
381
+ --info: 221 55% 62%;
382
+ --info-foreground: 48 9% 9%;
383
+ --attention: 25 95% 56%;
384
+ --attention-foreground: 48 9% 9%;
385
+
386
+ --brand: 0 0% 98%;
387
+ --brand-foreground: 48 9% 9%;
388
+
389
+ --text-tertiary: 44 6% 56%;
390
+ --text-disabled: 45 6% 40%;
391
+
392
+ --text-success: 146 55% 64%;
393
+ --text-warning: 44 95% 62%;
394
+ --text-info: 221 70% 72%;
395
+ --text-error: 357 75% 68%;
396
+
397
+ --secondary-hover: 45 6% 22%;
398
+ --secondary-active: 45 6% 26%;
399
+
400
+ --chart-2: #008465;
401
+ --chart-4: #d43b42;
402
+
403
+ --chart-heat-1: #173a52;
404
+ --chart-heat-2: #145f92;
405
+ --chart-heat-3: #2a88c9;
406
+ --chart-heat-4: #6db5e6;
407
+ --chart-heat-5: #bfe1f7;
408
+ }
403
409
  }
@@ -120,9 +120,11 @@
120
120
  --field-label-gap: var(--space-2);
121
121
  }
122
122
 
123
- .dark,
124
- :root[data-theme="dark"] {
125
- --surface-recessed: hsl(var(--background));
123
+ @media not print {
124
+ .dark,
125
+ :root[data-theme="dark"] {
126
+ --surface-recessed: hsl(var(--background));
127
+ }
126
128
  }
127
129
 
128
130
  :root {
package/docs/TOKENS.md CHANGED
@@ -583,3 +583,36 @@ service override. `allowClear` still replaces the suffix; DatePicker and TimePic
583
583
  clear and open actions. NumberInput lays out its two steppers horizontally on coarse pointers.
584
584
  SearchInput retains its glyph centre while sharing this target token. Fine-pointer geometry is
585
585
  unchanged. Override the token on the field or in the service theme; no new prop is required.
586
+
587
+ ## Editorial, figures, captions and dialog corners
588
+
589
+ `--font-family-editorial` and `--font-family-tabular` are `initial` knobs: unset,
590
+ `Heading family="editorial"` and a display-scale PageContainer title use the display face,
591
+ while `Text tabular`, `Badge tabular` and numeric table cells inherit their surrounding face.
592
+ `Text mono` still takes priority over the figures face. UI headings stay unchanged.
593
+
594
+ `TableCaption` is the first child of `Table` and supplies its accessible name. Its
595
+ `--table-caption-color`, `--table-caption-font-size` and `--table-caption-space-y` knobs
596
+ are `initial`, falling back to muted ink, the small type step and `--space-2`.
597
+ The inline inset follows the cells on desktop and
598
+ `--table-stacked-collection-card-padding-x` (fallback `--card-space-inset`) when stacked;
599
+ logical padding and start alignment follow RTL.
600
+
601
+ `--dialog-radius` is `initial`; from 640px the panel falls back to
602
+ `--radius-lg`, then `--radius`. Below 640px it falls back to the existing square panel;
603
+ an explicit override applies at every width. Dialog uses symmetric logical insets to stay
604
+ centred in both LTR and RTL.
605
+ Set the knob on the theme scope containing the Dialog portal (normally `:root`).
606
+
607
+ ## Printing
608
+
609
+ Paper uses the existing light token declarations: every shipped dark override (including
610
+ brand themes and component tokens) is enclosed in `@media not print`.
611
+ Consumer-authored themes must likewise put all dark overrides inside `@media not print`,
612
+ leaving their light declarations outside it so paper always uses the light palette.
613
+
614
+ In print, AppShell hides sidebar, topbar, navigation rail, breadcrumb and footer.
615
+ Its main area uses the full paper width with natural height, visible overflow and no
616
+ paint containment, so content beyond the screen viewport can print. Card requests
617
+ `break-inside: avoid`; a card taller than a sheet can still fragment. Applications may
618
+ adjust this in their own print stylesheet through the public `data-slot="card"` hook.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@godxjp/ui",
3
- "version": "33.16.0",
4
- "godxUiMcp": "33.16.0",
3
+ "version": "33.17.0",
4
+ "godxUiMcp": "33.17.0",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
7
7
  "type": "git",