@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
|
@@ -215,34 +215,38 @@ export default function Demo() {
|
|
|
215
215
|
</CardDescription>
|
|
216
216
|
</CardHeader>
|
|
217
217
|
<CardContent>
|
|
218
|
-
<
|
|
219
|
-
<
|
|
220
|
-
<
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
<
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
218
|
+
<Flex direction="col" gap="lg">
|
|
219
|
+
<div className="max-w-3xl">
|
|
220
|
+
<Form layout="horizontal" labelWidth="12rem" controlWidth="28rem">
|
|
221
|
+
<FormField
|
|
222
|
+
id="matrix-ja"
|
|
223
|
+
label="請求書の送付先メールアドレス"
|
|
224
|
+
required
|
|
225
|
+
helper="確認メールを送信します"
|
|
226
|
+
>
|
|
227
|
+
<Input id="matrix-ja" defaultValue="billing@example.jp" />
|
|
228
|
+
</FormField>
|
|
229
|
+
<FormField
|
|
230
|
+
id="matrix-vi"
|
|
231
|
+
label="Địa chỉ email nhận hóa đơn và thông báo"
|
|
232
|
+
controlWidth="20rem"
|
|
233
|
+
>
|
|
234
|
+
<Input id="matrix-vi" defaultValue="ketoan@example.vn" />
|
|
235
|
+
</FormField>
|
|
236
|
+
</Form>
|
|
237
|
+
</div>
|
|
238
|
+
<Card className="max-w-80" dir="rtl" lang="ar">
|
|
239
|
+
<CardContent>
|
|
240
|
+
<FormField
|
|
241
|
+
id="matrix-rtl"
|
|
242
|
+
label="البريد الإلكتروني لاستلام الفاتورة"
|
|
243
|
+
helper="سيتم إرسال رسالة تأكيد"
|
|
244
|
+
>
|
|
245
|
+
<Input id="matrix-rtl" type="email" placeholder="name@example.com" />
|
|
246
|
+
</FormField>
|
|
247
|
+
</CardContent>
|
|
248
|
+
</Card>
|
|
249
|
+
</Flex>
|
|
246
250
|
</CardContent>
|
|
247
251
|
</Card>
|
|
248
252
|
|
|
@@ -308,7 +312,7 @@ export default function Demo() {
|
|
|
308
312
|
<SheetHeader>
|
|
309
313
|
<SheetTitle>請求先設定</SheetTitle>
|
|
310
314
|
</SheetHeader>
|
|
311
|
-
<Form
|
|
315
|
+
<Form>
|
|
312
316
|
<FormField id="sheet-name" label="宛名" required>
|
|
313
317
|
<Input id="sheet-name" />
|
|
314
318
|
</FormField>
|
|
@@ -92,7 +92,7 @@ export default function Demo() {
|
|
|
92
92
|
</FormRoot>
|
|
93
93
|
</CardContent>
|
|
94
94
|
</Card>
|
|
95
|
-
<p className="text-muted-foreground
|
|
95
|
+
<p className="text-muted-foreground text-sm">
|
|
96
96
|
warning state、form-level error-summary から field への focus link、touched-only timing は
|
|
97
97
|
public wrapper API では未提供。React Hook Form の設定または consumer composition として
|
|
98
98
|
UNTESTED。
|
|
@@ -95,11 +95,7 @@ export default function Demo() {
|
|
|
95
95
|
</FormField>
|
|
96
96
|
</CardContent>
|
|
97
97
|
</Card>
|
|
98
|
-
<PasswordInput
|
|
99
|
-
size="sm"
|
|
100
|
-
placeholder="Compact tier (sm)"
|
|
101
|
-
aria-label="Password (sm)"
|
|
102
|
-
/>
|
|
98
|
+
<PasswordInput size="sm" placeholder="Compact tier (sm)" aria-label="Password (sm)" />
|
|
103
99
|
</Flex>
|
|
104
100
|
</PageContainer>
|
|
105
101
|
);
|
|
@@ -262,18 +262,18 @@ export default function Demo() {
|
|
|
262
262
|
placeholder="担当者を選択"
|
|
263
263
|
options={people}
|
|
264
264
|
renderOption={(option) => (
|
|
265
|
-
<
|
|
265
|
+
<Flex align="center" gap="sm" className="w-full">
|
|
266
266
|
{avatarFor(option.label)}
|
|
267
|
-
<
|
|
267
|
+
<Flex direction="col" gap="xs" className="min-w-0">
|
|
268
268
|
<span className="truncate text-sm font-medium">{option.label}</span>
|
|
269
269
|
<span className="text-muted-foreground truncate text-xs">
|
|
270
270
|
{option.sublabel}
|
|
271
271
|
</span>
|
|
272
|
-
</
|
|
272
|
+
</Flex>
|
|
273
273
|
<Badge tone="success" className="ms-auto">
|
|
274
274
|
VIP
|
|
275
275
|
</Badge>
|
|
276
|
-
</
|
|
276
|
+
</Flex>
|
|
277
277
|
)}
|
|
278
278
|
/>
|
|
279
279
|
</FormField>
|
|
@@ -300,13 +300,13 @@ export default function Demo() {
|
|
|
300
300
|
placeholder="担当者を選択"
|
|
301
301
|
options={people}
|
|
302
302
|
labelRender={({ label }) => (
|
|
303
|
-
<
|
|
303
|
+
<Flex align="center" gap="sm">
|
|
304
304
|
{avatarFor(String(label))}
|
|
305
305
|
<span className="truncate">{label}</span>
|
|
306
|
-
<Badge tone="info" icon={null}
|
|
306
|
+
<Badge tone="info" icon={null}>
|
|
307
307
|
担当
|
|
308
308
|
</Badge>
|
|
309
|
-
</
|
|
309
|
+
</Flex>
|
|
310
310
|
)}
|
|
311
311
|
/>
|
|
312
312
|
</FormField>
|
|
@@ -58,7 +58,7 @@ function Composer() {
|
|
|
58
58
|
value={draft}
|
|
59
59
|
onChange={(event) => setDraft(event.target.value)}
|
|
60
60
|
/>
|
|
61
|
-
<Flex direction="row" justify="end" gap="sm"
|
|
61
|
+
<Flex direction="row" justify="end" gap="sm">
|
|
62
62
|
<Button size="sm" onClick={send}>
|
|
63
63
|
送信
|
|
64
64
|
</Button>
|
|
@@ -109,7 +109,7 @@ export default function Demo() {
|
|
|
109
109
|
aria-label="サーフェス内のテキストエリア"
|
|
110
110
|
placeholder="メッセージを入力..."
|
|
111
111
|
/>
|
|
112
|
-
<Flex direction="row" justify="end"
|
|
112
|
+
<Flex direction="row" justify="end">
|
|
113
113
|
<Button size="sm">送信</Button>
|
|
114
114
|
</Flex>
|
|
115
115
|
</CardContent>
|
package/docs/feedback/sheet.tsx
CHANGED
|
@@ -116,68 +116,70 @@ export default function Demo() {
|
|
|
116
116
|
subtitle="条件を組み合わせて仕訳を絞り込みます。"
|
|
117
117
|
extra={<Badge tone="info">3 条件</Badge>}
|
|
118
118
|
/>
|
|
119
|
-
<SheetBody
|
|
120
|
-
<
|
|
121
|
-
<
|
|
122
|
-
<
|
|
123
|
-
<
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
<
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
<
|
|
135
|
-
<
|
|
136
|
-
<
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
<
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
<
|
|
147
|
-
<
|
|
148
|
-
<
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
<
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
<
|
|
159
|
-
<
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
119
|
+
<SheetBody>
|
|
120
|
+
<Flex direction="col" gap="md">
|
|
121
|
+
<FormField id="filter-account" label="勘定科目">
|
|
122
|
+
<Select value={account} onValueChange={setAccount}>
|
|
123
|
+
<SelectTrigger id="filter-account" aria-label="勘定科目">
|
|
124
|
+
<SelectValue placeholder="すべての勘定科目" />
|
|
125
|
+
</SelectTrigger>
|
|
126
|
+
<SelectContent>
|
|
127
|
+
<SelectItem value="all">すべての勘定科目</SelectItem>
|
|
128
|
+
<SelectItem value="cash">現金</SelectItem>
|
|
129
|
+
<SelectItem value="sales">売上高</SelectItem>
|
|
130
|
+
<SelectItem value="expense">旅費交通費</SelectItem>
|
|
131
|
+
</SelectContent>
|
|
132
|
+
</Select>
|
|
133
|
+
</FormField>
|
|
134
|
+
<FormField id="filter-status" label="ステータス">
|
|
135
|
+
<Select value={status} onValueChange={setStatus}>
|
|
136
|
+
<SelectTrigger id="filter-status" aria-label="ステータス">
|
|
137
|
+
<SelectValue placeholder="すべてのステータス" />
|
|
138
|
+
</SelectTrigger>
|
|
139
|
+
<SelectContent>
|
|
140
|
+
<SelectItem value="all">すべてのステータス</SelectItem>
|
|
141
|
+
<SelectItem value="draft">下書き</SelectItem>
|
|
142
|
+
<SelectItem value="approved">承認済み</SelectItem>
|
|
143
|
+
</SelectContent>
|
|
144
|
+
</Select>
|
|
145
|
+
</FormField>
|
|
146
|
+
<FormField id="filter-source" label="ソース">
|
|
147
|
+
<Select value={source} onValueChange={setSource}>
|
|
148
|
+
<SelectTrigger id="filter-source" aria-label="ソース">
|
|
149
|
+
<SelectValue placeholder="すべてのソース" />
|
|
150
|
+
</SelectTrigger>
|
|
151
|
+
<SelectContent>
|
|
152
|
+
<SelectItem value="all">すべてのソース</SelectItem>
|
|
153
|
+
<SelectItem value="manual">手入力</SelectItem>
|
|
154
|
+
<SelectItem value="import">インポート</SelectItem>
|
|
155
|
+
</SelectContent>
|
|
156
|
+
</Select>
|
|
157
|
+
</FormField>
|
|
158
|
+
<FormField id="filter-amount-min" label="金額">
|
|
159
|
+
<Flex direction="row" gap="sm" align="center">
|
|
160
|
+
<Input
|
|
161
|
+
id="filter-amount-min"
|
|
162
|
+
className="min-w-0 flex-1"
|
|
163
|
+
inputMode="numeric"
|
|
164
|
+
placeholder="最小"
|
|
165
|
+
value={minAmount}
|
|
166
|
+
onChange={(e) => setMinAmount(e.target.value)}
|
|
167
|
+
/>
|
|
168
|
+
<Text tone="muted" aria-hidden="true">
|
|
169
|
+
–
|
|
170
|
+
</Text>
|
|
171
|
+
<Input
|
|
172
|
+
id="filter-amount-max"
|
|
173
|
+
aria-label="最大金額"
|
|
174
|
+
className="min-w-0 flex-1"
|
|
175
|
+
inputMode="numeric"
|
|
176
|
+
placeholder="最大"
|
|
177
|
+
value={maxAmount}
|
|
178
|
+
onChange={(e) => setMaxAmount(e.target.value)}
|
|
179
|
+
/>
|
|
180
|
+
</Flex>
|
|
181
|
+
</FormField>
|
|
182
|
+
</Flex>
|
|
181
183
|
</SheetBody>
|
|
182
184
|
<SheetFooter>
|
|
183
185
|
<Button
|
|
@@ -220,21 +222,23 @@ export default function Demo() {
|
|
|
220
222
|
<SheetTitle>取引先編集 · 株式会社サンプル</SheetTitle>
|
|
221
223
|
<SheetDescription>取引先の基本情報を編集します。</SheetDescription>
|
|
222
224
|
</SheetHeader>
|
|
223
|
-
<SheetBody
|
|
224
|
-
<
|
|
225
|
-
<
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
<
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
225
|
+
<SheetBody>
|
|
226
|
+
<Flex direction="col" gap="md">
|
|
227
|
+
<FormField id="edit-company" label="会社名" required>
|
|
228
|
+
<Input
|
|
229
|
+
id="edit-company"
|
|
230
|
+
value={companyName}
|
|
231
|
+
onChange={(e) => setCompanyName(e.target.value)}
|
|
232
|
+
/>
|
|
233
|
+
</FormField>
|
|
234
|
+
<FormField id="edit-registration" label="登録番号" helper="T + 13桁">
|
|
235
|
+
<Input
|
|
236
|
+
id="edit-registration"
|
|
237
|
+
value={registration}
|
|
238
|
+
onChange={(e) => setRegistration(e.target.value)}
|
|
239
|
+
/>
|
|
240
|
+
</FormField>
|
|
241
|
+
</Flex>
|
|
238
242
|
</SheetBody>
|
|
239
243
|
<SheetFooter>
|
|
240
244
|
<Button variant="outline" onClick={() => setEditOpen(false)}>
|
|
@@ -269,14 +273,16 @@ export default function Demo() {
|
|
|
269
273
|
<SheetTitle>仕訳編集 · #2024-0412</SheetTitle>
|
|
270
274
|
<SheetDescription>摘要を編集します。削除は元に戻せません。</SheetDescription>
|
|
271
275
|
</SheetHeader>
|
|
272
|
-
<SheetBody
|
|
273
|
-
<
|
|
274
|
-
<
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
276
|
+
<SheetBody>
|
|
277
|
+
<Flex direction="col" gap="md">
|
|
278
|
+
<FormField id="record-memo" label="摘要">
|
|
279
|
+
<Input
|
|
280
|
+
id="record-memo"
|
|
281
|
+
value={memo}
|
|
282
|
+
onChange={(e) => setMemo(e.target.value)}
|
|
283
|
+
/>
|
|
284
|
+
</FormField>
|
|
285
|
+
</Flex>
|
|
280
286
|
</SheetBody>
|
|
281
287
|
<SheetFooter>
|
|
282
288
|
<Button
|
|
@@ -328,15 +334,17 @@ export default function Demo() {
|
|
|
328
334
|
subtitle="2026-07-30 発行 · 株式会社サンプル"
|
|
329
335
|
extra={<Badge tone="success">支払済み</Badge>}
|
|
330
336
|
/>
|
|
331
|
-
<SheetBody
|
|
332
|
-
<
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
337
|
+
<SheetBody>
|
|
338
|
+
<Flex direction="col" gap="md">
|
|
339
|
+
<Text size="sm">
|
|
340
|
+
レコードのdetail surfaceはdesktopでは右side panel、mobileではbottom
|
|
341
|
+
sheetとして表示されます。
|
|
342
|
+
</Text>
|
|
343
|
+
<Text size="sm" tone="muted">
|
|
344
|
+
幅は side panel のときだけ適用され、bottom sheet
|
|
345
|
+
では全幅になります(widthはbottomでは無視されます)。
|
|
346
|
+
</Text>
|
|
347
|
+
</Flex>
|
|
340
348
|
</SheetBody>
|
|
341
349
|
<SheetFooter>
|
|
342
350
|
<Button variant="outline" onClick={() => setDetailOpen(false)}>
|
|
@@ -385,14 +393,16 @@ export default function Demo() {
|
|
|
385
393
|
subtitle={`見出し帯は tone="${headerTone}" で描画しています。`}
|
|
386
394
|
extra={<Badge tone={headerTone}>{headerTone}</Badge>}
|
|
387
395
|
/>
|
|
388
|
-
<SheetBody
|
|
389
|
-
<
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
+
<SheetBody>
|
|
397
|
+
<Flex direction="col" gap="md">
|
|
398
|
+
<Text size="sm">
|
|
399
|
+
帯の色だけが tone
|
|
400
|
+
に追従し、見出しと本文の文字色は変わりません。帯は本文と同じ左右インセットで全幅に広がります。
|
|
401
|
+
</Text>
|
|
402
|
+
<Text size="sm" tone="muted">
|
|
403
|
+
extra スロットは帯の右端に固定され、閉じるボタンとは重なりません。
|
|
404
|
+
</Text>
|
|
405
|
+
</Flex>
|
|
396
406
|
</SheetBody>
|
|
397
407
|
<SheetFooter>
|
|
398
408
|
<Button variant="outline" onClick={() => setToneOpen(false)}>
|
|
@@ -37,7 +37,7 @@ export default function Demo() {
|
|
|
37
37
|
<Skeleton className="h-5 w-48" />
|
|
38
38
|
<Skeleton className="h-4 w-72" />
|
|
39
39
|
<Skeleton className="h-4 w-60" />
|
|
40
|
-
<Flex direction="row" gap="sm" align="center"
|
|
40
|
+
<Flex direction="row" gap="sm" align="center">
|
|
41
41
|
<Skeleton className="size-10 rounded-full" />
|
|
42
42
|
<Flex direction="col" gap="xs">
|
|
43
43
|
<Skeleton className="h-4 w-32" />
|
|
@@ -69,7 +69,7 @@ export default function Demo() {
|
|
|
69
69
|
its own structure.
|
|
70
70
|
</CardDescription>
|
|
71
71
|
</CardHeader>
|
|
72
|
-
<CardContent
|
|
72
|
+
<CardContent flush>
|
|
73
73
|
<SkeletonTable rows={6} columns={6} />
|
|
74
74
|
</CardContent>
|
|
75
75
|
</Card>
|
|
@@ -66,6 +66,7 @@ type Swatch = { cls: string; token: string; role: string };
|
|
|
66
66
|
function SwatchTile({ swatch, text }: { swatch: Swatch; text?: boolean }) {
|
|
67
67
|
return (
|
|
68
68
|
<Flex direction="col" gap="xs">
|
|
69
|
+
{/* ui-audit-disable-next-line no-hand-rolled-surface no-utility-layout no-utility-spacing — a swatch showing the token itself; the fill IS the subject */}
|
|
69
70
|
<div className={`border-border flex h-14 items-end rounded-md border p-2 ${swatch.cls}`}>
|
|
70
71
|
{text ? (
|
|
71
72
|
<Text size="xs" mono className="leading-none">
|
|
@@ -102,14 +103,15 @@ function SwatchGroup({ items, text, dark }: { items: Swatch[]; text?: boolean; d
|
|
|
102
103
|
if (!dark) return grid;
|
|
103
104
|
return (
|
|
104
105
|
<Flex direction="col" gap="md">
|
|
105
|
-
<
|
|
106
|
-
<Text as="div" size="xs" tone="muted" weight="medium"
|
|
106
|
+
<Flex direction="col" gap="sm">
|
|
107
|
+
<Text as="div" size="xs" tone="muted" weight="medium">
|
|
107
108
|
Light
|
|
108
109
|
</Text>
|
|
109
110
|
{grid}
|
|
110
|
-
</
|
|
111
|
-
|
|
112
|
-
|
|
111
|
+
</Flex>
|
|
112
|
+
{/* ui-audit-disable-next-line no-utility-spacing — a swatch showing the token itself; the fill IS the subject */}
|
|
113
|
+
<Flex direction="col" gap="sm" className="bg-background text-foreground dark rounded-md p-3">
|
|
114
|
+
<Text as="div" size="xs" tone="muted" weight="medium">
|
|
113
115
|
Dark (.dark)
|
|
114
116
|
</Text>
|
|
115
117
|
<ResponsiveGrid columns={{ sm: 2, md: 3, lg: 4 }}>
|
|
@@ -117,7 +119,7 @@ function SwatchGroup({ items, text, dark }: { items: Swatch[]; text?: boolean; d
|
|
|
117
119
|
<SwatchTile key={s.token} swatch={s} text={text} />
|
|
118
120
|
))}
|
|
119
121
|
</ResponsiveGrid>
|
|
120
|
-
</
|
|
122
|
+
</Flex>
|
|
121
123
|
</Flex>
|
|
122
124
|
);
|
|
123
125
|
}
|