@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.
Files changed (66) hide show
  1. package/dist/components/data-display/badge.d.ts +18 -2
  2. package/dist/components/data-display/badge.js +18 -4
  3. package/dist/props/components/data-display.prop.d.ts +7 -0
  4. package/dist/props/registry.d.ts +5 -1
  5. package/dist/props/registry.js +12 -1
  6. package/dist/styles/badge-layout.css +15 -0
  7. package/dist/tokens/components/badge.css +8 -0
  8. package/docs/data-display/badge.tsx +36 -0
  9. package/docs/data-display/carousel.tsx +8 -4
  10. package/docs/data-display/data-table/examples/grid-features.tsx +1 -1
  11. package/docs/data-display/permission-matrix.tsx +13 -9
  12. package/docs/data-display/popover.tsx +2 -1
  13. package/docs/data-display/scroll-area.tsx +107 -75
  14. package/docs/data-display/table.tsx +1 -1
  15. package/docs/data-entry/calendar.tsx +1 -1
  16. package/docs/data-entry/checkbox.tsx +1 -1
  17. package/docs/data-entry/country-picker-recipe.tsx +11 -6
  18. package/docs/data-entry/form-field/index.tsx +33 -29
  19. package/docs/data-entry/form-root.tsx +1 -1
  20. package/docs/data-entry/password-input.tsx +1 -5
  21. package/docs/data-entry/select.tsx +7 -7
  22. package/docs/data-entry/textarea.tsx +2 -2
  23. package/docs/feedback/sheet.tsx +112 -102
  24. package/docs/feedback/skeleton.tsx +2 -2
  25. package/docs/foundation/colors.tsx +8 -6
  26. package/docs/foundation/email-tokens.tsx +82 -65
  27. package/docs/foundation/radius-shadow.tsx +13 -11
  28. package/docs/layout/app-shell.tsx +2 -2
  29. package/docs/layout/aspect-ratio.tsx +30 -14
  30. package/docs/layout/flex.tsx +6 -2
  31. package/docs/layout/page-container.tsx +9 -1
  32. package/docs/layout/responsive-grid.tsx +10 -2
  33. package/docs/layout/sidebar.tsx +169 -146
  34. package/docs/layout/split-pane.tsx +44 -27
  35. package/docs/layout/topbar.tsx +17 -15
  36. package/docs/navigation/app-setting-picker.tsx +5 -4
  37. package/docs/navigation/breadcrumb.tsx +12 -5
  38. package/docs/navigation/context-menu.tsx +10 -4
  39. package/docs/navigation/navigation-menu.tsx +89 -96
  40. package/docs/navigation/steps.tsx +12 -10
  41. package/docs/navigation/tabs.tsx +26 -20
  42. package/docs/navigation/toolbar.tsx +15 -15
  43. package/docs/providers/format-date.tsx +2 -2
  44. package/docs/showcase/acme-portal.tsx +41 -27
  45. package/docs/showcase/acme-website.tsx +60 -54
  46. package/docs/showcase/case1-warehouse-dashboard.tsx +46 -30
  47. package/docs/showcase/case2-employee-me.tsx +23 -20
  48. package/docs/showcase/case3-approval-workflow.tsx +34 -32
  49. package/docs/showcase/case4-login.tsx +119 -113
  50. package/docs/showcase/case5-shift-calendar.tsx +3 -3
  51. package/docs/showcase/case6-agency-handy.tsx +340 -299
  52. package/docs/showcase/futurelastic-web.tsx +23 -21
  53. package/docs/showcase/org-switcher.tsx +2 -2
  54. package/docs/showcase/permission-matrix.tsx +7 -4
  55. package/docs/showcase/table-conditional-format.tsx +8 -8
  56. package/docs/showcase/table-crud-list.tsx +3 -3
  57. package/docs/showcase/table-density.tsx +49 -42
  58. package/docs/showcase/table-expandable-rows.tsx +24 -15
  59. package/docs/showcase/table-filter-chips.tsx +2 -7
  60. package/docs/showcase/table-footer-totals.tsx +7 -4
  61. package/docs/showcase/table-grouped-subtotals.tsx +25 -22
  62. package/docs/showcase/table-master-detail.tsx +15 -10
  63. package/docs/showcase/table-pagination.tsx +34 -27
  64. package/docs/showcase/table-states.tsx +8 -5
  65. package/docs/showcase/table-sticky-columns.tsx +8 -5
  66. package/package.json +2 -3
@@ -156,7 +156,11 @@ export default function LoginShowcase() {
156
156
  </Flex>
157
157
 
158
158
  {/* Centered auth area. Split brand panel + card sit side-by-side from lg. */}
159
- <div className="mx-auto flex min-h-[calc(100vh-64px)] w-full max-w-5xl items-center px-4 py-8 sm:px-6">
159
+ <Flex
160
+ align="center"
161
+ gap="xs"
162
+ className="mx-auto min-h-[calc(100vh-64px)] w-full max-w-5xl px-4 py-8 sm:px-6"
163
+ >
160
164
  <ResponsiveGrid
161
165
  columns={{ sm: 1, lg: 2, md: 1 }}
162
166
  gap="xl"
@@ -165,50 +169,54 @@ export default function LoginShowcase() {
165
169
  {/* Split brand panel — hidden on mobile (mobile-first), shown from lg. */}
166
170
  <aside className="hidden lg:flex">
167
171
  <Card className="bg-primary/5 w-full">
168
- <CardContent solo className="flex h-full flex-col justify-between gap-8">
169
- <BrandLockup size="lg" />
170
- <Flex direction="col" gap="md">
171
- <Heading level={2} className="leading-snug">
172
- 打刻から承認まで、ひとつの勤怠基盤で。
173
- </Heading>
174
- <Text as="p" tone="muted" className="leading-relaxed">
175
- 出勤・休憩・残業の打刻、シフト調整、欠勤・遅刻の承認を一元化します。
176
- 多拠点・多テナントに対応し、現場と管理をつなぎます。
177
- </Text>
178
- </Flex>
179
- <dl className="border-border grid grid-cols-3 gap-4 border-t pt-6">
180
- <div>
181
- <Text as="dt" size="2xs" tone="muted">
182
- 導入企業
183
- </Text>
184
- <Text as="dd" size="lg" weight="bold" tabular>
185
- 1,240
186
- </Text>
187
- </div>
188
- <div>
189
- <Text as="dt" size="2xs" tone="muted">
190
- 稼働拠点
191
- </Text>
192
- <Text as="dd" size="lg" weight="bold" tabular>
193
- 8,600
194
- </Text>
195
- </div>
196
- <div>
197
- <Text as="dt" size="2xs" tone="muted">
198
- 月間打刻
172
+ <CardContent solo className="h-full">
173
+ <Flex direction="col" justify="between" gap="xl">
174
+ <BrandLockup size="lg" />
175
+ <Flex direction="col" gap="md">
176
+ <Heading level={2} className="leading-snug">
177
+ 打刻から承認まで、ひとつの勤怠基盤で。
178
+ </Heading>
179
+ <Text as="p" tone="muted" className="leading-relaxed">
180
+ 出勤・休憩・残業の打刻、シフト調整、欠勤・遅刻の承認を一元化します。
181
+ 多拠点・多テナントに対応し、現場と管理をつなぎます。
199
182
  </Text>
200
- <Text as="dd" size="lg" weight="bold" tabular>
201
- 21M
202
- </Text>
203
- </div>
204
- </dl>
183
+ </Flex>
184
+ <dl className="border-border border-t pt-6">
185
+ <ResponsiveGrid columns={3} gap="md">
186
+ <div>
187
+ <Text as="dt" size="2xs" tone="muted">
188
+ 導入企業
189
+ </Text>
190
+ <Text as="dd" size="lg" weight="bold" tabular>
191
+ 1,240
192
+ </Text>
193
+ </div>
194
+ <div>
195
+ <Text as="dt" size="2xs" tone="muted">
196
+ 稼働拠点
197
+ </Text>
198
+ <Text as="dd" size="lg" weight="bold" tabular>
199
+ 8,600
200
+ </Text>
201
+ </div>
202
+ <div>
203
+ <Text as="dt" size="2xs" tone="muted">
204
+ 月間打刻
205
+ </Text>
206
+ <Text as="dd" size="lg" weight="bold" tabular>
207
+ 21M
208
+ </Text>
209
+ </div>
210
+ </ResponsiveGrid>
211
+ </dl>
212
+ </Flex>
205
213
  </CardContent>
206
214
  </Card>
207
215
  </aside>
208
216
 
209
217
  {/* Auth card — the one surface allowed a resting shadow (shadow-lg). */}
210
218
  <Card className="mx-auto w-full max-w-sm self-center shadow-lg lg:mx-0">
211
- <CardHeader className="flex flex-col gap-1.5 pb-2 text-center lg:text-start">
219
+ <CardHeader className="text-center lg:text-start">
212
220
  <Flex justify="center" className="lg:hidden">
213
221
  <BrandLockup />
214
222
  </Flex>
@@ -218,90 +226,88 @@ export default function LoginShowcase() {
218
226
  </CardDescription>
219
227
  </CardHeader>
220
228
 
221
- <CardContent solo className="flex flex-col gap-5">
222
- {/* SSO buttons — outline, full-width, 44px (comfortable). */}
223
- <Flex direction="col" gap="sm">
224
- <Button variant="outline" className="w-full justify-center">
225
- <GoogleMark />
226
- Google で続ける
227
- </Button>
228
- <Button variant="outline" className="w-full justify-center">
229
- シングルサインオン (SSO)
230
- </Button>
231
- </Flex>
229
+ <CardContent solo>
230
+ <Flex direction="col" gap="lg">
231
+ {/* SSO buttons — outline, full-width, 44px (comfortable). */}
232
+ <Flex direction="col" gap="sm">
233
+ <Button variant="outline" className="w-full justify-center">
234
+ <GoogleMark />
235
+ Google で続ける
236
+ </Button>
237
+ <Button variant="outline" className="w-full justify-center">
238
+ シングルサインオン (SSO)
239
+ </Button>
240
+ </Flex>
232
241
 
233
- {/* Divider "または" — Separator pair + centered label. */}
234
- <Flex align="center" gap="md">
235
- <Separator className="flex-1" />
236
- <Text size="xs" tone="muted">
237
- または
238
- </Text>
239
- <Separator className="flex-1" />
240
- </Flex>
242
+ {/* Divider "または" — Separator pair + centered label. */}
243
+ <Flex align="center" gap="md">
244
+ <Separator className="flex-1" />
245
+ <Text size="xs" tone="muted">
246
+ または
247
+ </Text>
248
+ <Separator className="flex-1" />
249
+ </Flex>
241
250
 
242
- {/* Email — uncontrolled, seeded so the filled state shows at rest. */}
243
- <form
244
- className="flex flex-col gap-4"
245
- onSubmit={(e) => {
246
- e.preventDefault();
247
- }}
248
- >
249
- <FormField id="login-email" label="メールアドレス" required>
250
- <Input
251
- type="email"
252
- name="email"
253
- autoComplete="email"
254
- inputMode="email"
255
- placeholder="name@example.com"
256
- defaultValue="m.tanaka@famgia.com"
257
- />
258
- </FormField>
251
+ {/* Email — uncontrolled, seeded so the filled state shows at rest. */}
252
+ <form
253
+ onSubmit={(e) => {
254
+ e.preventDefault();
255
+ }}
256
+ >
257
+ <Flex direction="col" gap="md">
258
+ <FormField id="login-email" label="メールアドレス" required>
259
+ <Input
260
+ type="email"
261
+ name="email"
262
+ autoComplete="email"
263
+ inputMode="email"
264
+ placeholder="name@example.com"
265
+ defaultValue="m.tanaka@famgia.com"
266
+ />
267
+ </FormField>
259
268
 
260
- {/* Password — labelAddon hosts the right-aligned "忘れた場合" link. */}
261
- <FormField
262
- id="login-password"
263
- label="パスワード"
264
- required
265
- labelAddon={
266
- <Button
267
- type="button"
268
- variant="link"
269
- size="sm"
270
- className="ms-auto h-auto p-0 text-xs"
269
+ {/* Password — labelAddon hosts the right-aligned "忘れた場合" link. */}
270
+ <FormField
271
+ id="login-password"
272
+ label="パスワード"
273
+ required
274
+ labelAddon={
275
+ <Button type="button" variant="link" size="sm" className="ms-auto text-xs">
276
+ お忘れの場合
277
+ </Button>
278
+ }
271
279
  >
272
- お忘れの場合
273
- </Button>
274
- }
275
- >
276
- <PasswordInput
277
- name="password"
278
- autoComplete="current-password"
279
- placeholder="パスワードを入力"
280
- defaultValue="example-pass"
281
- />
282
- </FormField>
280
+ <PasswordInput
281
+ name="password"
282
+ autoComplete="current-password"
283
+ placeholder="パスワードを入力"
284
+ defaultValue="example-pass"
285
+ />
286
+ </FormField>
283
287
 
284
- {/* The single --primary action of the view. */}
285
- <Button type="submit" className="w-full justify-center">
286
- ログイン
287
- </Button>
288
- </form>
288
+ {/* The single --primary action of the view. */}
289
+ <Button type="submit" className="w-full justify-center">
290
+ ログイン
291
+ </Button>
292
+ </Flex>
293
+ </form>
289
294
 
290
- <Text as="p" size="2xs" tone="muted" align="center" className="leading-relaxed">
291
- ログインすると{" "}
292
- <Button variant="link" size="sm" className="h-auto p-0 text-[var(--font-size-2xs)]">
293
- 利用規約
294
- </Button>{" "}
295
- ·{" "}
296
- <Button variant="link" size="sm" className="h-auto p-0 text-[var(--font-size-2xs)]">
297
- プライバシーポリシー
298
- </Button>{" "}
299
- に同意したものとみなされます。
300
- </Text>
295
+ <Text as="p" size="2xs" tone="muted" align="center" className="leading-relaxed">
296
+ ログインすると{" "}
297
+ <Button variant="link" size="sm" className="text-[var(--font-size-2xs)]">
298
+ 利用規約
299
+ </Button>{" "}
300
+ ·{" "}
301
+ <Button variant="link" size="sm" className="text-[var(--font-size-2xs)]">
302
+ プライバシーポリシー
303
+ </Button>{" "}
304
+ に同意したものとみなされます。
305
+ </Text>
306
+ </Flex>
301
307
  </CardContent>
302
308
  </Card>
303
309
  </ResponsiveGrid>
304
- </div>
310
+ </Flex>
305
311
  </div>
306
312
  );
307
313
  }
@@ -354,7 +354,7 @@ export default function ShiftCalendarShowcase() {
354
354
  2026年5月
355
355
  </Button>
356
356
  </PopoverTrigger>
357
- <PopoverContent className="w-auto p-0" align="start">
357
+ <PopoverContent className="w-auto" style={{ padding: 0 }} align="start">
358
358
  <Calendar
359
359
  mode="single"
360
360
  selected={jumpMonth}
@@ -572,13 +572,13 @@ function MonthGrid({ onPick }: { onPick: (d: DayCell) => void }) {
572
572
  </Badge>
573
573
  ) : null}
574
574
  </Flex>
575
- <Flex direction="col" className="gap-0.5">
575
+ <Flex direction="col" gap="xs">
576
576
  {cell.holiday ? <ShiftPill kind="holiday" staff={cell.holiday} /> : null}
577
577
  {shown.map((s, i) => (
578
578
  <ShiftPill key={`${s.kind}-${i}`} kind={s.kind} staff={s.staff} />
579
579
  ))}
580
580
  {overflow > 0 ? (
581
- <Text as="span" size="2xs" tone="muted" tabular className="px-1">
581
+ <Text as="span" size="2xs" tone="muted" tabular>
582
582
  +{overflow} 件
583
583
  </Text>
584
584
  ) : null}