@godxjp/ui 19.2.0 → 19.3.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/dist/components/data-display/badge.d.ts +18 -2
- package/dist/components/data-display/badge.js +18 -4
- package/dist/props/components/data-display.prop.d.ts +7 -0
- package/dist/props/registry.d.ts +5 -1
- package/dist/props/registry.js +12 -1
- package/dist/styles/badge-layout.css +15 -0
- package/dist/tokens/components/badge.css +8 -0
- package/docs/data-display/badge.tsx +36 -0
- package/docs/data-display/carousel.tsx +8 -4
- package/docs/data-display/data-table/examples/grid-features.tsx +1 -1
- package/docs/data-display/permission-matrix.tsx +13 -9
- package/docs/data-display/popover.tsx +2 -1
- package/docs/data-display/scroll-area.tsx +107 -75
- package/docs/data-display/table.tsx +1 -1
- package/docs/data-entry/calendar.tsx +1 -1
- package/docs/data-entry/checkbox.tsx +1 -1
- package/docs/data-entry/country-picker-recipe.tsx +11 -6
- package/docs/data-entry/form-field/index.tsx +33 -29
- package/docs/data-entry/form-root.tsx +1 -1
- package/docs/data-entry/password-input.tsx +1 -5
- package/docs/data-entry/select.tsx +7 -7
- package/docs/data-entry/textarea.tsx +2 -2
- package/docs/feedback/sheet.tsx +112 -102
- package/docs/feedback/skeleton.tsx +2 -2
- package/docs/foundation/colors.tsx +8 -6
- package/docs/foundation/email-tokens.tsx +82 -65
- package/docs/foundation/radius-shadow.tsx +13 -11
- package/docs/layout/app-shell.tsx +2 -2
- package/docs/layout/aspect-ratio.tsx +30 -14
- package/docs/layout/flex.tsx +6 -2
- package/docs/layout/page-container.tsx +9 -1
- package/docs/layout/responsive-grid.tsx +10 -2
- package/docs/layout/sidebar.tsx +169 -146
- package/docs/layout/split-pane.tsx +44 -27
- package/docs/layout/topbar.tsx +17 -15
- package/docs/navigation/app-setting-picker.tsx +5 -4
- package/docs/navigation/breadcrumb.tsx +12 -5
- package/docs/navigation/context-menu.tsx +10 -4
- package/docs/navigation/navigation-menu.tsx +89 -96
- package/docs/navigation/steps.tsx +12 -10
- package/docs/navigation/tabs.tsx +26 -20
- package/docs/navigation/toolbar.tsx +15 -15
- package/docs/providers/format-date.tsx +2 -2
- package/docs/showcase/acme-portal.tsx +41 -27
- package/docs/showcase/acme-website.tsx +60 -54
- package/docs/showcase/case1-warehouse-dashboard.tsx +46 -30
- package/docs/showcase/case2-employee-me.tsx +23 -20
- package/docs/showcase/case3-approval-workflow.tsx +34 -32
- package/docs/showcase/case4-login.tsx +119 -113
- package/docs/showcase/case5-shift-calendar.tsx +3 -3
- package/docs/showcase/case6-agency-handy.tsx +340 -299
- package/docs/showcase/futurelastic-web.tsx +23 -21
- package/docs/showcase/org-switcher.tsx +2 -2
- package/docs/showcase/permission-matrix.tsx +7 -4
- package/docs/showcase/table-conditional-format.tsx +8 -8
- package/docs/showcase/table-crud-list.tsx +3 -3
- package/docs/showcase/table-density.tsx +49 -42
- package/docs/showcase/table-expandable-rows.tsx +24 -15
- package/docs/showcase/table-filter-chips.tsx +2 -7
- package/docs/showcase/table-footer-totals.tsx +7 -4
- package/docs/showcase/table-grouped-subtotals.tsx +25 -22
- package/docs/showcase/table-master-detail.tsx +15 -10
- package/docs/showcase/table-pagination.tsx +34 -27
- package/docs/showcase/table-states.tsx +8 -5
- package/docs/showcase/table-sticky-columns.tsx +8 -5
- package/package.json +2 -3
|
@@ -139,8 +139,12 @@ export default function Demo() {
|
|
|
139
139
|
<iframe
|
|
140
140
|
title="Transactional email specimen at 480px"
|
|
141
141
|
srcDoc={specimen}
|
|
142
|
-
className="
|
|
143
|
-
style={{
|
|
142
|
+
className="bg-background w-full"
|
|
143
|
+
style={{
|
|
144
|
+
border: "1px solid hsl(var(--border))",
|
|
145
|
+
borderRadius: "var(--radius-md)",
|
|
146
|
+
height: 560,
|
|
147
|
+
}}
|
|
144
148
|
/>
|
|
145
149
|
</CardContent>
|
|
146
150
|
</Card>
|
|
@@ -160,8 +164,13 @@ export default function Demo() {
|
|
|
160
164
|
<iframe
|
|
161
165
|
title="Transactional email specimen at 360px"
|
|
162
166
|
srcDoc={specimen}
|
|
163
|
-
className="
|
|
164
|
-
style={{
|
|
167
|
+
className="bg-background"
|
|
168
|
+
style={{
|
|
169
|
+
border: "1px solid hsl(var(--border))",
|
|
170
|
+
borderRadius: "var(--radius-md)",
|
|
171
|
+
width: 360,
|
|
172
|
+
height: 620,
|
|
173
|
+
}}
|
|
165
174
|
/>
|
|
166
175
|
</CardContent>
|
|
167
176
|
</Card>
|
|
@@ -182,39 +191,41 @@ export default function Demo() {
|
|
|
182
191
|
</CardDescription>
|
|
183
192
|
</CardHeader>
|
|
184
193
|
<CardContent>
|
|
185
|
-
<
|
|
186
|
-
{
|
|
187
|
-
{
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
<
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
<
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
194
|
+
<Flex direction="col" gap="md">
|
|
195
|
+
<ResponsiveGrid columns={{ sm: 1, md: 3 }}>
|
|
196
|
+
{[
|
|
197
|
+
{ label: "Inline <svg>", markup: EMAIL_BRAND_MARK.svg },
|
|
198
|
+
{
|
|
199
|
+
// Prose label, not markup: it names the email delivery form. The real delivery
|
|
200
|
+
// on the next line is a self-contained data: URI (email clients block remote
|
|
201
|
+
// images) and it does carry alt="GoDX".
|
|
202
|
+
// ui-audit-disable-next-line img-needs-alt
|
|
203
|
+
label: "data: URL in <img>",
|
|
204
|
+
markup: `<img src="${EMAIL_BRAND_MARK.dataUri}" width="${EMAIL_BRAND_MARK.widthPx}" height="${EMAIL_BRAND_MARK.heightPx}" alt="GoDX">`,
|
|
205
|
+
},
|
|
206
|
+
// Prose label, not markup: a raw <table> is the only brand-mark fallback that
|
|
207
|
+
// renders in email clients without SVG support, so the label names it literally.
|
|
208
|
+
// ui-audit-disable-next-line no-raw-table
|
|
209
|
+
{ label: "<table> fallback", markup: EMAIL_BRAND_MARK.tableHtml },
|
|
210
|
+
].map((item) => (
|
|
211
|
+
<Flex key={item.label} direction="col" gap="sm">
|
|
212
|
+
<div
|
|
213
|
+
// eslint-disable-next-line react/no-danger
|
|
214
|
+
dangerouslySetInnerHTML={{ __html: item.markup }}
|
|
215
|
+
/>
|
|
216
|
+
<Text size="sm" tone="muted">
|
|
217
|
+
{item.label}
|
|
218
|
+
</Text>
|
|
219
|
+
</Flex>
|
|
220
|
+
))}
|
|
221
|
+
</ResponsiveGrid>
|
|
222
|
+
<Flex direction="col" gap="xs">
|
|
223
|
+
<Text size="sm" tone="muted">
|
|
224
|
+
viewBox {EMAIL_BRAND_MARK.viewBox} · {EMAIL_BRAND_MARK.width}×
|
|
225
|
+
{EMAIL_BRAND_MARK.height} · capsule {EMAIL_COLORS.brand} · glyph{" "}
|
|
226
|
+
{EMAIL_COLORS.brandForeground}
|
|
227
|
+
</Text>
|
|
228
|
+
</Flex>
|
|
218
229
|
</Flex>
|
|
219
230
|
</CardContent>
|
|
220
231
|
</Card>
|
|
@@ -235,8 +246,12 @@ export default function Demo() {
|
|
|
235
246
|
{colorRows.map((row) => (
|
|
236
247
|
<Flex key={row.token} direction="col" gap="xs">
|
|
237
248
|
<div
|
|
238
|
-
className="
|
|
239
|
-
style={{
|
|
249
|
+
className="h-12"
|
|
250
|
+
style={{
|
|
251
|
+
border: "1px solid hsl(var(--border))",
|
|
252
|
+
borderRadius: "var(--radius-md)",
|
|
253
|
+
backgroundColor: row.hex,
|
|
254
|
+
}}
|
|
240
255
|
/>
|
|
241
256
|
<Text size="sm">{row.token}</Text>
|
|
242
257
|
<Flex gap="xs" align="center">
|
|
@@ -271,33 +286,35 @@ export default function Demo() {
|
|
|
271
286
|
</CardDescription>
|
|
272
287
|
</CardHeader>
|
|
273
288
|
<CardContent>
|
|
274
|
-
<Flex direction="col" gap="
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
<
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
289
|
+
<Flex direction="col" gap="md">
|
|
290
|
+
<Flex direction="col" gap="xs">
|
|
291
|
+
{fontStacks.map((stack) => (
|
|
292
|
+
<Flex key={stack.label} direction="col" gap="xs">
|
|
293
|
+
<Badge tone="neutral" variant="outline">
|
|
294
|
+
{stack.label}
|
|
295
|
+
</Badge>
|
|
296
|
+
<Text size="sm" tone="muted">
|
|
297
|
+
{stack.value}
|
|
298
|
+
</Text>
|
|
299
|
+
</Flex>
|
|
300
|
+
))}
|
|
301
|
+
</Flex>
|
|
302
|
+
<ResponsiveGrid columns={{ sm: 1, md: 2, lg: 4 }}>
|
|
303
|
+
{geometryGroups.map((group) => (
|
|
304
|
+
<Flex key={group.title} direction="col" gap="xs">
|
|
305
|
+
<Text weight="medium">{group.title}</Text>
|
|
306
|
+
{group.rows.map(([label, value]) => (
|
|
307
|
+
<Flex key={label} justify="between" gap="sm">
|
|
308
|
+
<Text size="sm" tone="muted">
|
|
309
|
+
{label}
|
|
310
|
+
</Text>
|
|
311
|
+
<Text size="sm">{value}</Text>
|
|
312
|
+
</Flex>
|
|
313
|
+
))}
|
|
314
|
+
</Flex>
|
|
315
|
+
))}
|
|
316
|
+
</ResponsiveGrid>
|
|
285
317
|
</Flex>
|
|
286
|
-
<ResponsiveGrid columns={{ sm: 1, md: 2, lg: 4 }}>
|
|
287
|
-
{geometryGroups.map((group) => (
|
|
288
|
-
<Flex key={group.title} direction="col" gap="xs">
|
|
289
|
-
<Text weight="medium">{group.title}</Text>
|
|
290
|
-
{group.rows.map(([label, value]) => (
|
|
291
|
-
<Flex key={label} justify="between" gap="sm">
|
|
292
|
-
<Text size="sm" tone="muted">
|
|
293
|
-
{label}
|
|
294
|
-
</Text>
|
|
295
|
-
<Text size="sm">{value}</Text>
|
|
296
|
-
</Flex>
|
|
297
|
-
))}
|
|
298
|
-
</Flex>
|
|
299
|
-
))}
|
|
300
|
-
</ResponsiveGrid>
|
|
301
318
|
</CardContent>
|
|
302
319
|
</Card>
|
|
303
320
|
</Flex>
|
|
@@ -127,17 +127,19 @@ export default function Demo() {
|
|
|
127
127
|
</Text>
|
|
128
128
|
</Flex>
|
|
129
129
|
<Flex direction="col" gap="xs">
|
|
130
|
-
<
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
130
|
+
<Card>
|
|
131
|
+
<CardContent flush>
|
|
132
|
+
{/* ui-audit-disable-next-line no-utility-spacing — a tile showing the shadow token itself; the box IS the subject */}
|
|
133
|
+
<div className="p-4" style={{ boxShadow: "var(--shadow-lg)" }}>
|
|
134
|
+
<Text as="div" weight="medium">
|
|
135
|
+
Floating(ポップオーバー)
|
|
136
|
+
</Text>
|
|
137
|
+
<Text as="div" size="xs" tone="muted">
|
|
138
|
+
--shadow-lg lifts it off the page
|
|
139
|
+
</Text>
|
|
140
|
+
</div>
|
|
141
|
+
</CardContent>
|
|
142
|
+
</Card>
|
|
141
143
|
<Text as="div" size="xs" tone="muted">
|
|
142
144
|
floating surface · elevated
|
|
143
145
|
</Text>
|
|
@@ -138,7 +138,7 @@ export default function Demo() {
|
|
|
138
138
|
{/* Decorative brand mark — hidden below `sm` where the hamburger already anchors the
|
|
139
139
|
start of a narrow mobile topbar, so functional controls (entity switcher, search)
|
|
140
140
|
keep priority and the bar never overflows. */}
|
|
141
|
-
<Avatar className="
|
|
141
|
+
<Avatar className="rounded-md">
|
|
142
142
|
<AvatarFallback className="bg-primary text-primary-foreground font-bold">
|
|
143
143
|
C
|
|
144
144
|
</AvatarFallback>
|
|
@@ -159,7 +159,7 @@ export default function Demo() {
|
|
|
159
159
|
<DropdownMenuSeparator />
|
|
160
160
|
{ENTITIES.map((e) => (
|
|
161
161
|
<DropdownMenuItem key={e.id} onSelect={() => setActiveEntity(e.name)}>
|
|
162
|
-
<Building2 className="
|
|
162
|
+
<Building2 className="size-4" />
|
|
163
163
|
{e.name}
|
|
164
164
|
</DropdownMenuItem>
|
|
165
165
|
))}
|
|
@@ -27,9 +27,13 @@ export default function Demo() {
|
|
|
27
27
|
</CardHeader>
|
|
28
28
|
<CardContent>
|
|
29
29
|
<AspectRatio ratio={16 / 9}>
|
|
30
|
-
<
|
|
31
|
-
<
|
|
32
|
-
|
|
30
|
+
<Card variant="muted" className="h-full w-full">
|
|
31
|
+
<CardContent flush>
|
|
32
|
+
<Flex align="center" justify="center" gap="xs">
|
|
33
|
+
<Text tone="muted">16:9 動画プレビュー(サンプル)</Text>
|
|
34
|
+
</Flex>
|
|
35
|
+
</CardContent>
|
|
36
|
+
</Card>
|
|
33
37
|
</AspectRatio>
|
|
34
38
|
</CardContent>
|
|
35
39
|
</Card>
|
|
@@ -45,9 +49,13 @@ export default function Demo() {
|
|
|
45
49
|
<CardContent>
|
|
46
50
|
<div className="max-w-xs">
|
|
47
51
|
<AspectRatio ratio={4 / 3}>
|
|
48
|
-
<
|
|
49
|
-
<
|
|
50
|
-
|
|
52
|
+
<Card variant="muted" className="h-full w-full">
|
|
53
|
+
<CardContent flush>
|
|
54
|
+
<Flex align="center" justify="center" gap="xs">
|
|
55
|
+
<Text tone="muted">領収書スキャン 4:3</Text>
|
|
56
|
+
</Flex>
|
|
57
|
+
</CardContent>
|
|
58
|
+
</Card>
|
|
51
59
|
</AspectRatio>
|
|
52
60
|
</div>
|
|
53
61
|
</CardContent>
|
|
@@ -66,11 +74,15 @@ export default function Demo() {
|
|
|
66
74
|
{["株式会社 A", "合同会社 B", "有限会社 C"].map((name) => (
|
|
67
75
|
<div key={name} className="w-28">
|
|
68
76
|
<AspectRatio ratio={1}>
|
|
69
|
-
<
|
|
70
|
-
<
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
77
|
+
<Card variant="muted" className="h-full w-full">
|
|
78
|
+
<CardContent flush>
|
|
79
|
+
<Flex align="center" justify="center" gap="xs">
|
|
80
|
+
<Text size="xs" tone="muted" className="text-center">
|
|
81
|
+
{name}
|
|
82
|
+
</Text>
|
|
83
|
+
</Flex>
|
|
84
|
+
</CardContent>
|
|
85
|
+
</Card>
|
|
74
86
|
</AspectRatio>
|
|
75
87
|
</div>
|
|
76
88
|
))}
|
|
@@ -90,9 +102,13 @@ export default function Demo() {
|
|
|
90
102
|
</CardHeader>
|
|
91
103
|
<CardContent>
|
|
92
104
|
<AspectRatio ratio={21 / 9}>
|
|
93
|
-
<
|
|
94
|
-
<
|
|
95
|
-
|
|
105
|
+
<Card variant="muted" className="h-full w-full">
|
|
106
|
+
<CardContent flush>
|
|
107
|
+
<Flex align="center" justify="center" gap="xs">
|
|
108
|
+
<Text tone="muted">月次売上推移グラフ(21:9)</Text>
|
|
109
|
+
</Flex>
|
|
110
|
+
</CardContent>
|
|
111
|
+
</Card>
|
|
96
112
|
</AspectRatio>
|
|
97
113
|
</CardContent>
|
|
98
114
|
</Card>
|
package/docs/layout/flex.tsx
CHANGED
|
@@ -129,7 +129,8 @@ export default function Demo() {
|
|
|
129
129
|
direction="row"
|
|
130
130
|
gap="sm"
|
|
131
131
|
align={a}
|
|
132
|
-
className="bg-muted min-h-20 rounded-md
|
|
132
|
+
className="bg-muted min-h-20 rounded-md"
|
|
133
|
+
style={{ padding: "var(--space-2)" }}
|
|
133
134
|
>
|
|
134
135
|
<Text size="xs" tone="muted" className="w-16">
|
|
135
136
|
{a}
|
|
@@ -166,7 +167,8 @@ export default function Demo() {
|
|
|
166
167
|
gap="xs"
|
|
167
168
|
align="center"
|
|
168
169
|
justify={j}
|
|
169
|
-
className="bg-muted flex-1 rounded-md
|
|
170
|
+
className="bg-muted flex-1 rounded-md"
|
|
171
|
+
style={{ padding: "var(--space-2)" }}
|
|
170
172
|
>
|
|
171
173
|
<Badge variant="outline">借方</Badge>
|
|
172
174
|
<Badge variant="outline">貸方</Badge>
|
|
@@ -192,6 +194,7 @@ export default function Demo() {
|
|
|
192
194
|
<Text size="xs" tone="muted">
|
|
193
195
|
wrap={false}(既定)
|
|
194
196
|
</Text>
|
|
197
|
+
{/* ui-audit-disable-next-line no-utility-spacing — a tinted tile so the gap between children is visible; the box IS the subject */}
|
|
195
198
|
<Flex direction="row" gap="xs" wrap={false} className="bg-muted rounded-md p-2">
|
|
196
199
|
<Badge variant="outline">勘定科目</Badge>
|
|
197
200
|
<Badge variant="outline">補助科目</Badge>
|
|
@@ -202,6 +205,7 @@ export default function Demo() {
|
|
|
202
205
|
<Text size="xs" tone="muted">
|
|
203
206
|
wrap={true}
|
|
204
207
|
</Text>
|
|
208
|
+
{/* ui-audit-disable-next-line no-utility-spacing — a tinted tile so the gap between children is visible; the box IS the subject */}
|
|
205
209
|
<Flex direction="row" gap="xs" wrap className="bg-muted rounded-md p-2">
|
|
206
210
|
<Badge variant="outline">勘定科目</Badge>
|
|
207
211
|
<Badge variant="outline">補助科目</Badge>
|
|
@@ -411,6 +411,7 @@ export default function Demo() {
|
|
|
411
411
|
<ResponsiveGrid columns={{ sm: 1, md: 2 }}>
|
|
412
412
|
{/* Default: top-packed. Short content does NOT stretch · the space below is
|
|
413
413
|
just neutral page background, never a jarring void. */}
|
|
414
|
+
{/* ui-audit-disable-next-line no-hand-rolled-surface — a bounded viewport so the page-level scroll behaviour is visible in a docs page — a frame around the demo, not product chrome */}
|
|
414
415
|
<div className="h-80 overflow-auto rounded-md border">
|
|
415
416
|
<PageContainer title="既定(top-pack)" subtitle="fill なし · 余白は中立な背景">
|
|
416
417
|
<Card>
|
|
@@ -424,6 +425,7 @@ export default function Demo() {
|
|
|
424
425
|
</div>
|
|
425
426
|
|
|
426
427
|
{/* fill: body grows to fill the shell; the composer footer pins to the bottom. */}
|
|
428
|
+
{/* ui-audit-disable-next-line no-hand-rolled-surface — a bounded viewport so the page-level scroll behaviour is visible in a docs page — a frame around the demo, not product chrome */}
|
|
427
429
|
<div className="h-80 overflow-auto rounded-md border">
|
|
428
430
|
<PageContainer
|
|
429
431
|
fill
|
|
@@ -603,6 +605,7 @@ export default function Demo() {
|
|
|
603
605
|
帯の内側(--page-toolbar-pad-block)だけ。 */}
|
|
604
606
|
<ResponsiveGrid columns={{ sm: 1, md: 2 }}>
|
|
605
607
|
{/* fill · 帯は固定、トランスクリプトだけがその下でスクロールする(帯の下に潜り込まない)。 */}
|
|
608
|
+
{/* ui-audit-disable-next-line no-hand-rolled-surface — a bounded viewport so the page-level scroll behaviour is visible in a docs page — a frame around the demo, not product chrome */}
|
|
606
609
|
<div className="h-80 overflow-auto rounded-md border">
|
|
607
610
|
<PageContainer
|
|
608
611
|
fill
|
|
@@ -739,6 +742,7 @@ export default function Demo() {
|
|
|
739
742
|
footer の上罫線も --page-footer-divider で消せます · 入力欄が自前で枠を持つ Card の
|
|
740
743
|
場合、全幅の罫線がその真上に重なって 2 本目の線になるためです。既定は「引く」のまま
|
|
741
744
|
(フォームの保存/取消バーはこの線で本文と分かれる)。 */}
|
|
745
|
+
{/* ui-audit-disable-next-line no-hand-rolled-surface — a bounded viewport so the page-level scroll behaviour is visible in a docs page — a frame around the demo, not product chrome */}
|
|
742
746
|
<div className="h-80 overflow-auto rounded-md border">
|
|
743
747
|
<PageContainer
|
|
744
748
|
fill
|
|
@@ -803,6 +807,7 @@ export default function Demo() {
|
|
|
803
807
|
テナントごとの再テーマも効かなくなるためです。帯を塗るなら内側の余白も一緒に
|
|
804
808
|
(--page-toolbar-pad-block)· 既定の 0 は「透明な帯には内側がない」ことに由来します。 */}
|
|
805
809
|
<ResponsiveGrid columns={{ sm: 1, md: 2 }}>
|
|
810
|
+
{/* ui-audit-disable-next-line no-hand-rolled-surface — a bounded viewport so the page-level scroll behaviour is visible in a docs page — a frame around the demo, not product chrome */}
|
|
806
811
|
<div className="h-80 overflow-auto rounded-md border">
|
|
807
812
|
<PageContainer
|
|
808
813
|
fill
|
|
@@ -837,6 +842,7 @@ export default function Demo() {
|
|
|
837
842
|
</PageContainer>
|
|
838
843
|
</div>
|
|
839
844
|
|
|
845
|
+
{/* ui-audit-disable-next-line no-hand-rolled-surface — a bounded viewport so the page-level scroll behaviour is visible in a docs page — a frame around the demo, not product chrome */}
|
|
840
846
|
<div className="h-80 overflow-auto rounded-md border" style={TOOLBAR_CHROME_TOKENS}>
|
|
841
847
|
<PageContainer
|
|
842
848
|
fill
|
|
@@ -859,7 +865,7 @@ export default function Demo() {
|
|
|
859
865
|
{[
|
|
860
866
|
"帯がカード面に乗り、本文から分離して読めます。",
|
|
861
867
|
"塗った帯には内側の余白が要るので pad-block も同じテーマで指定します。",
|
|
862
|
-
"
|
|
868
|
+
"呼び出し側で背景色や上下の余白を足す必要はありません · どちらもトークンの仕事です。",
|
|
863
869
|
].map((message) => (
|
|
864
870
|
<Card key={message}>
|
|
865
871
|
<CardContent>
|
|
@@ -881,6 +887,7 @@ export default function Demo() {
|
|
|
881
887
|
--app-shell-bar-height にすると帯は 48px に固定され、タイトル列も extra も帯の中心
|
|
882
888
|
(y=24)に載ります。min なので、より背の高い extra は今までどおり収まります。 */}
|
|
883
889
|
<ResponsiveGrid columns={{ sm: 1, md: 2 }}>
|
|
890
|
+
{/* ui-audit-disable-next-line no-hand-rolled-surface — a bounded viewport so the page-level scroll behaviour is visible in a docs page — a frame around the demo, not product chrome */}
|
|
884
891
|
<div className="h-80 overflow-auto rounded-md border">
|
|
885
892
|
<PageContainer
|
|
886
893
|
fill
|
|
@@ -911,6 +918,7 @@ export default function Demo() {
|
|
|
911
918
|
</PageContainer>
|
|
912
919
|
</div>
|
|
913
920
|
|
|
921
|
+
{/* ui-audit-disable-next-line no-hand-rolled-surface — a bounded viewport so the page-level scroll behaviour is visible in a docs page — a frame around the demo, not product chrome */}
|
|
914
922
|
<div className="h-80 overflow-auto rounded-md border" style={CHROME_BAND_TOKENS}>
|
|
915
923
|
<PageContainer
|
|
916
924
|
fill
|
|
@@ -78,10 +78,18 @@ export default function Demo() {
|
|
|
78
78
|
<CardContent>
|
|
79
79
|
<Flex direction="col" gap="md">
|
|
80
80
|
{["max-w-80", "max-w-3xl"].map((width) => (
|
|
81
|
-
<div
|
|
81
|
+
<div
|
|
82
|
+
key={width}
|
|
83
|
+
className={width}
|
|
84
|
+
style={{ border: "1px solid hsl(var(--border))", padding: "var(--space-2)" }}
|
|
85
|
+
>
|
|
82
86
|
<ResponsiveGrid columns={4}>
|
|
83
87
|
{Array.from({ length: 4 }, (_, index) => (
|
|
84
|
-
<div
|
|
88
|
+
<div
|
|
89
|
+
key={index}
|
|
90
|
+
className="bg-muted rounded text-center"
|
|
91
|
+
style={{ padding: "var(--space-3)" }}
|
|
92
|
+
>
|
|
85
93
|
{index + 1}
|
|
86
94
|
</div>
|
|
87
95
|
))}
|