@godxjp/ui 18.1.0 → 18.2.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 (98) hide show
  1. package/dist/app/app-provider.d.ts +2 -1
  2. package/dist/components/charts/area-chart.d.ts +1 -1
  3. package/dist/components/charts/bar-chart.d.ts +1 -1
  4. package/dist/components/charts/chart-cartesian.d.ts +1 -1
  5. package/dist/components/charts/chart-frame.d.ts +1 -1
  6. package/dist/components/charts/line-chart.d.ts +1 -1
  7. package/dist/components/charts/pie-chart.d.ts +1 -1
  8. package/dist/components/data-display/badge.d.ts +1 -1
  9. package/dist/components/data-display/card.d.ts +1 -1
  10. package/dist/components/data-display/credential-reveal.d.ts +2 -0
  11. package/dist/components/data-display/credential-reveal.js +5 -0
  12. package/dist/components/data-display/data-table.d.ts +10 -10
  13. package/dist/components/data-display/descriptions.d.ts +2 -2
  14. package/dist/components/data-display/empty-state.d.ts +1 -1
  15. package/dist/components/data-display/index.d.ts +2 -0
  16. package/dist/components/data-display/index.js +2 -0
  17. package/dist/components/data-display/popover.d.ts +6 -6
  18. package/dist/components/data-display/progress.d.ts +2 -1
  19. package/dist/components/data-display/timeline.d.ts +1 -1
  20. package/dist/components/data-display/tree-list.d.ts +1 -1
  21. package/dist/components/data-entry/calendar.d.ts +1 -1
  22. package/dist/components/data-entry/cascader.d.ts +2 -1
  23. package/dist/components/data-entry/checkbox-group.d.ts +2 -1
  24. package/dist/components/data-entry/color-picker.d.ts +2 -1
  25. package/dist/components/data-entry/date-picker.d.ts +2 -1
  26. package/dist/components/data-entry/date-range-picker.d.ts +2 -1
  27. package/dist/components/data-entry/field.d.ts +2 -1
  28. package/dist/components/data-entry/form-field.d.ts +2 -1
  29. package/dist/components/data-entry/month-picker.d.ts +2 -1
  30. package/dist/components/data-entry/month-range-picker.d.ts +2 -1
  31. package/dist/components/data-entry/password-strength.d.ts +1 -1
  32. package/dist/components/data-entry/radio.d.ts +1 -1
  33. package/dist/components/data-entry/search-input.d.ts +1 -1
  34. package/dist/components/data-entry/search-select.d.ts +2 -1
  35. package/dist/components/data-entry/select.d.ts +3 -3
  36. package/dist/components/data-entry/time-picker.d.ts +2 -1
  37. package/dist/components/data-entry/transfer.d.ts +2 -1
  38. package/dist/components/data-entry/tree-select.d.ts +2 -1
  39. package/dist/components/data-entry/upload-crop-dialog.d.ts +2 -1
  40. package/dist/components/data-entry/upload.d.ts +2 -1
  41. package/dist/components/feedback/alert.d.ts +1 -1
  42. package/dist/components/feedback/dialog.d.ts +21 -14
  43. package/dist/components/feedback/dialog.js +43 -11
  44. package/dist/components/feedback/sheet.d.ts +7 -7
  45. package/dist/components/feedback/skeleton.d.ts +5 -5
  46. package/dist/components/feedback/sonner.d.ts +2 -1
  47. package/dist/components/feedback/tooltip.d.ts +2 -2
  48. package/dist/components/general/button.js +1 -1
  49. package/dist/components/general/reveal.d.ts +1 -1
  50. package/dist/components/layout/app-shell.d.ts +2 -1
  51. package/dist/components/layout/app-shell.js +1 -1
  52. package/dist/components/layout/auth-shell.d.ts +1 -1
  53. package/dist/components/layout/breadcrumb.d.ts +1 -1
  54. package/dist/components/layout/centered-shell.d.ts +1 -1
  55. package/dist/components/layout/flex.d.ts +1 -1
  56. package/dist/components/layout/page-container.d.ts +2 -2
  57. package/dist/components/layout/resizable.d.ts +3 -3
  58. package/dist/components/layout/responsive-grid.d.ts +1 -1
  59. package/dist/components/layout/sidebar.d.ts +4 -4
  60. package/dist/components/layout/split-pane.d.ts +1 -1
  61. package/dist/components/layout/topbar.d.ts +1 -1
  62. package/dist/components/navigation/context-menu.d.ts +2 -2
  63. package/dist/components/navigation/dropdown-menu.d.ts +7 -7
  64. package/dist/components/navigation/filter-bar.d.ts +2 -2
  65. package/dist/components/navigation/filter-bar.js +8 -2
  66. package/dist/components/navigation/menubar.d.ts +3 -3
  67. package/dist/components/navigation/pagination.d.ts +2 -2
  68. package/dist/components/navigation/steps.d.ts +2 -1
  69. package/dist/components/navigation/tabs.d.ts +1 -1
  70. package/dist/components/query/data-state.d.ts +2 -1
  71. package/dist/components/query/infinite-query-state.d.ts +2 -1
  72. package/dist/components/query/mutation-feedback.d.ts +1 -1
  73. package/dist/components/query/prefetch-link.d.ts +2 -1
  74. package/dist/components/query/query-refetch-button.d.ts +1 -1
  75. package/dist/components/ui/credential-reveal.d.ts +12 -0
  76. package/dist/components/ui/credential-reveal.js +160 -0
  77. package/dist/components/ui/hover-card.d.ts +1 -1
  78. package/dist/form/form-field-control.d.ts +1 -1
  79. package/dist/form/form-root.d.ts +1 -1
  80. package/dist/i18n/messages/en.json +14 -1
  81. package/dist/i18n/messages/ja.json +14 -1
  82. package/dist/i18n/messages/vi.json +14 -1
  83. package/dist/lib/permission-grid.d.ts +59 -0
  84. package/dist/lib/permission-grid.js +32 -0
  85. package/dist/props/components/data-display.prop.d.ts +49 -1
  86. package/dist/props/components/feedback.prop.d.ts +4 -0
  87. package/dist/props/components/navigation.prop.d.ts +8 -1
  88. package/dist/props/registry.d.ts +19 -1
  89. package/dist/props/registry.js +35 -1
  90. package/dist/props/vocabulary/data.prop.d.ts +6 -0
  91. package/dist/props/vocabulary/index.d.ts +1 -1
  92. package/dist/styles/control.css +9 -1
  93. package/dist/styles/data-display-layout.css +50 -0
  94. package/dist/styles/layout.css +10 -0
  95. package/dist/styles/shell-layout.css +19 -11
  96. package/dist/tokens/components/navigation.css +7 -0
  97. package/dist/tokens/foundation.css +8 -4
  98. package/package.json +55 -46
@@ -484,4 +484,54 @@
484
484
  gap: var(--space-2);
485
485
  margin-inline-start: auto;
486
486
  }
487
+
488
+ /* CredentialReveal — one-time secret surface: caution banner, masked/revealed value row with
489
+ * copy/reveal/download actions, and an optional acknowledge footer. Density-aware via the
490
+ * --control-height tier; colours/spacing read semantic role tokens only. */
491
+ .ui-credential-reveal {
492
+ display: flex;
493
+ flex-direction: column;
494
+ gap: var(--space-stack-sm);
495
+ }
496
+ .ui-credential-reveal-warning {
497
+ margin-block-end: var(--space-1);
498
+ }
499
+ .ui-credential-reveal-surface {
500
+ display: flex;
501
+ flex-direction: column;
502
+ gap: var(--space-1);
503
+ }
504
+ .ui-credential-reveal-label {
505
+ display: inline-block;
506
+ }
507
+ .ui-credential-reveal-row {
508
+ display: flex;
509
+ align-items: center;
510
+ gap: var(--space-inline-sm);
511
+ min-height: var(--control-height);
512
+ padding-block: var(--space-1);
513
+ padding-inline: var(--space-3);
514
+ border: 1px solid hsl(var(--border));
515
+ border-radius: var(--control-radius);
516
+ background: hsl(var(--muted) / 0.4);
517
+ }
518
+ .ui-credential-reveal-secret {
519
+ flex: 1 1 auto;
520
+ min-width: 0;
521
+ letter-spacing: 0.02em;
522
+ word-break: break-all;
523
+ }
524
+ .ui-credential-reveal-secret[data-state="masked"] {
525
+ color: hsl(var(--muted-foreground));
526
+ }
527
+ .ui-credential-reveal-actions {
528
+ display: inline-flex;
529
+ flex-shrink: 0;
530
+ align-items: center;
531
+ gap: var(--space-inline-xs);
532
+ }
533
+ .ui-credential-reveal-footer {
534
+ display: flex;
535
+ justify-content: flex-end;
536
+ }
487
537
  }
@@ -717,6 +717,16 @@
717
717
  }
718
718
  }
719
719
 
720
+ /* Toolbar `sticky` (#197): pin the filter strip while the list scrolls beneath it.
721
+ * `inset-block-start` (not `top`) keeps it RTL/vertical-writing-mode safe; the fill only
722
+ * paints in this pinned variant so a non-sticky toolbar stays transparent chrome. */
723
+ .ui-toolbar-sticky {
724
+ position: sticky;
725
+ inset-block-start: var(--filter-bar-sticky-offset);
726
+ z-index: 20;
727
+ background: hsl(var(--filter-bar-sticky-background, var(--background)));
728
+ }
729
+
720
730
  .ui-toolbar-clear {
721
731
  width: 100%;
722
732
  }
@@ -235,7 +235,7 @@
235
235
  font-size: var(--font-size-base);
236
236
  }
237
237
 
238
- @media (max-width: 1023px) {
238
+ @media (width < 64rem) {
239
239
  .app-root,
240
240
  .app-root[data-collapsed="true"] {
241
241
  grid-template-areas:
@@ -602,26 +602,34 @@
602
602
  color: hsl(var(--muted-foreground));
603
603
  }
604
604
 
605
- [data-collapsed="true"] .sb-user-meta,
606
- [data-collapsed="true"] .sb-user-menu {
605
+ :is(.app-root[data-collapsed="true"] > .app-sidebar, .sb-root[data-collapsed="true"])
606
+ .sb-user-meta,
607
+ :is(.app-root[data-collapsed="true"] > .app-sidebar, .sb-root[data-collapsed="true"])
608
+ .sb-user-menu {
607
609
  display: none;
608
610
  }
609
611
 
610
- [data-collapsed="true"] .sb-product-name,
611
- [data-collapsed="true"] .sb-product-tenant,
612
- [data-collapsed="true"] .sb-product-caret,
613
- [data-collapsed="true"] .sb-section-label,
614
- [data-collapsed="true"] .sb-label,
615
- [data-collapsed="true"] .sb-badge {
612
+ :is(.app-root[data-collapsed="true"] > .app-sidebar, .sb-root[data-collapsed="true"])
613
+ .sb-product-name,
614
+ :is(.app-root[data-collapsed="true"] > .app-sidebar, .sb-root[data-collapsed="true"])
615
+ .sb-product-tenant,
616
+ :is(.app-root[data-collapsed="true"] > .app-sidebar, .sb-root[data-collapsed="true"])
617
+ .sb-product-caret,
618
+ :is(.app-root[data-collapsed="true"] > .app-sidebar, .sb-root[data-collapsed="true"])
619
+ .sb-section-label,
620
+ :is(.app-root[data-collapsed="true"] > .app-sidebar, .sb-root[data-collapsed="true"]) .sb-label,
621
+ :is(.app-root[data-collapsed="true"] > .app-sidebar, .sb-root[data-collapsed="true"]) .sb-badge {
616
622
  display: none;
617
623
  }
618
624
 
619
- [data-collapsed="true"] .sb-product {
625
+ :is(.app-root[data-collapsed="true"] > .app-sidebar, .sb-root[data-collapsed="true"])
626
+ .sb-product {
620
627
  justify-content: center;
621
628
  padding: 0;
622
629
  }
623
630
 
624
- [data-collapsed="true"] .sb-nav-item {
631
+ :is(.app-root[data-collapsed="true"] > .app-sidebar, .sb-root[data-collapsed="true"])
632
+ .sb-nav-item {
625
633
  width: var(--control-height);
626
634
  justify-content: center;
627
635
  margin-inline: auto;
@@ -20,4 +20,11 @@
20
20
  * Defaults = hsl(var(--accent)) fill · hsl(var(--accent-foreground)) text. */
21
21
  --menubar-item-hover-background: initial;
22
22
  --menubar-item-hover-foreground: initial;
23
+
24
+ /* Sticky offset for the pinned filter strip (Toolbar `sticky`, #197). Default 0 (chrome,
25
+ * rule #44); raise it so the strip parks below a fixed topbar. */
26
+ --filter-bar-sticky-offset: 0px;
27
+ /* Fill painted only when the filter strip is pinned. Role-mirror knob (rule #45): `initial`
28
+ * so --background re-resolves at the call site under a scoped [data-tenant]/.dark theme. */
29
+ --filter-bar-sticky-background: initial;
23
30
  }
@@ -359,8 +359,12 @@
359
359
  --muted-foreground: 44 6% 64%;
360
360
  --accent: 45 7% 22%;
361
361
  --accent-foreground: 60 20% 96%;
362
- --destructive: 357 55% 52%;
363
- --destructive-foreground: 60 20% 96%;
362
+ /* Filled destructive surfaces (button/badge/step) must clear WCAG AA (4.5:1) with comfortable
363
+ * margin, not sit on the floor (gh#199 — dark default was 4.54:1). Base darkened 52%→48% and the
364
+ * on-fill text lifted to pure white → ~5.5:1; states go DARKER (never lighter, which cut contrast
365
+ * against the light label). Error TEXT on dark surfaces uses --text-error, not this fill token. */
366
+ --destructive: 357 55% 48%;
367
+ --destructive-foreground: 0 0% 100%;
364
368
  --border: 45 6% 22%;
365
369
  --input: 45 6% 22%;
366
370
  --ring: 204 90% 60%;
@@ -388,6 +392,6 @@
388
392
  --primary-active: 204 90% 72%;
389
393
  --secondary-hover: 45 6% 22%;
390
394
  --secondary-active: 45 6% 26%;
391
- --destructive-hover: 357 55% 58%;
392
- --destructive-active: 357 55% 64%;
395
+ --destructive-hover: 357 55% 43%;
396
+ --destructive-active: 357 55% 38%;
393
397
  }
package/package.json CHANGED
@@ -1,9 +1,14 @@
1
1
  {
2
2
  "name": "@godxjp/ui",
3
- "version": "18.1.0",
4
- "godxUiMcp": "18.0.3",
3
+ "version": "18.2.0",
4
+ "godxUiMcp": "18.2.0",
5
5
  "type": "module",
6
6
  "packageManager": "pnpm@10.29.1",
7
+ "pnpm": {
8
+ "overrides": {
9
+ "esbuild": ">=0.28.1"
10
+ }
11
+ },
7
12
  "sideEffects": false,
8
13
  "description": "@godxjp/ui — shared React UI framework (shadcn + Radix + Tailwind v4).",
9
14
  "files": [
@@ -108,6 +113,10 @@
108
113
  "types": "./dist/lib/utils.d.ts",
109
114
  "import": "./dist/lib/utils.js"
110
115
  },
116
+ "./lib/permission-grid": {
117
+ "types": "./dist/lib/permission-grid.d.ts",
118
+ "import": "./dist/lib/permission-grid.js"
119
+ },
111
120
  "./hooks": {
112
121
  "types": "./dist/lib/hooks.d.ts",
113
122
  "import": "./dist/lib/hooks.js"
@@ -367,32 +376,32 @@
367
376
  "@date-fns/tz": "^1.5.0",
368
377
  "@fontsource/montserrat": "^5.2.8",
369
378
  "@fontsource/noto-sans-jp": "^5.2.9",
370
- "@radix-ui/react-accordion": "^1.2.12",
371
- "@radix-ui/react-alert-dialog": "^1.1.15",
372
- "@radix-ui/react-aspect-ratio": "^1.1.8",
373
- "@radix-ui/react-avatar": "^1.1.11",
374
- "@radix-ui/react-checkbox": "^1.3.3",
375
- "@radix-ui/react-collapsible": "^1.1.12",
376
- "@radix-ui/react-context": "^1.1.2",
377
- "@radix-ui/react-context-menu": "^2.2.16",
378
- "@radix-ui/react-dialog": "^1.1.15",
379
- "@radix-ui/react-dropdown-menu": "^2.1.16",
380
- "@radix-ui/react-hover-card": "^1.1.15",
381
- "@radix-ui/react-label": "^2.1.8",
382
- "@radix-ui/react-menubar": "^1.1.16",
383
- "@radix-ui/react-navigation-menu": "^1.2.14",
384
- "@radix-ui/react-popover": "^1.1.15",
385
- "@radix-ui/react-radio-group": "^1.3.8",
386
- "@radix-ui/react-scroll-area": "^1.2.10",
387
- "@radix-ui/react-select": "^2.2.6",
388
- "@radix-ui/react-separator": "^1.1.8",
389
- "@radix-ui/react-slider": "^1.3.6",
390
- "@radix-ui/react-slot": "^1.2.4",
391
- "@radix-ui/react-switch": "^1.2.6",
392
- "@radix-ui/react-tabs": "^1.1.13",
393
- "@radix-ui/react-toggle": "^1.1.10",
394
- "@radix-ui/react-toggle-group": "^1.1.11",
395
- "@radix-ui/react-tooltip": "^1.2.8",
379
+ "@radix-ui/react-accordion": "^1.2.16",
380
+ "@radix-ui/react-alert-dialog": "^1.1.19",
381
+ "@radix-ui/react-aspect-ratio": "^1.1.11",
382
+ "@radix-ui/react-avatar": "^1.2.2",
383
+ "@radix-ui/react-checkbox": "^1.3.7",
384
+ "@radix-ui/react-collapsible": "^1.1.16",
385
+ "@radix-ui/react-context": "^1.2.0",
386
+ "@radix-ui/react-context-menu": "^2.3.3",
387
+ "@radix-ui/react-dialog": "^1.1.19",
388
+ "@radix-ui/react-dropdown-menu": "^2.1.20",
389
+ "@radix-ui/react-hover-card": "^1.1.19",
390
+ "@radix-ui/react-label": "^2.1.11",
391
+ "@radix-ui/react-menubar": "^1.1.20",
392
+ "@radix-ui/react-navigation-menu": "^1.2.18",
393
+ "@radix-ui/react-popover": "^1.1.19",
394
+ "@radix-ui/react-radio-group": "^1.4.3",
395
+ "@radix-ui/react-scroll-area": "^1.2.14",
396
+ "@radix-ui/react-select": "^2.3.3",
397
+ "@radix-ui/react-separator": "^1.1.11",
398
+ "@radix-ui/react-slider": "^1.4.3",
399
+ "@radix-ui/react-slot": "^1.3.0",
400
+ "@radix-ui/react-switch": "^1.3.3",
401
+ "@radix-ui/react-tabs": "^1.1.17",
402
+ "@radix-ui/react-toggle": "^1.1.14",
403
+ "@radix-ui/react-toggle-group": "^1.1.15",
404
+ "@radix-ui/react-tooltip": "^1.2.12",
396
405
  "@tanstack/react-table": "^8.21.3",
397
406
  "class-variance-authority": "^0.7.1",
398
407
  "clsx": "^2.1.1",
@@ -400,9 +409,9 @@
400
409
  "date-fns": "^4.1.0",
401
410
  "embla-carousel-react": "^8.6.0",
402
411
  "input-otp": "^1.4.2",
403
- "lucide-react": "^1.14.0",
412
+ "lucide-react": "^1.25.0",
404
413
  "react-day-picker": "^10.0.1",
405
- "react-resizable-panels": "^4.11.2",
414
+ "react-resizable-panels": "^4.12.2",
406
415
  "sonner": "^2.0.7",
407
416
  "tailwind-merge": "^3.5.0",
408
417
  "tailwindcss-animate": "^1.0.7",
@@ -411,17 +420,17 @@
411
420
  "devDependencies": {
412
421
  "@axe-core/playwright": "^4.12.1",
413
422
  "@eslint/js": "^9.39.4",
414
- "@hookform/resolvers": "^5.2.2",
415
- "@tailwindcss/vite": "^4.2.4",
416
- "@tanstack/react-query": "^5.100.9",
423
+ "@hookform/resolvers": "^5.4.0",
424
+ "@tailwindcss/vite": "^4.3.3",
425
+ "@tanstack/react-query": "^5.101.2",
417
426
  "@testing-library/jest-dom": "^6.9.1",
418
427
  "@testing-library/react": "^16.3.2",
419
428
  "@testing-library/user-event": "^14.6.1",
420
429
  "@types/node": "^22.19.19",
421
- "@types/react": "^19.2.14",
430
+ "@types/react": "^19.2.17",
422
431
  "@types/react-dom": "^19.2.3",
423
- "@vitejs/plugin-react": "^6.0.1",
424
- "@vitest/coverage-v8": "^4.1.5",
432
+ "@vitejs/plugin-react": "^6.0.3",
433
+ "@vitest/coverage-v8": "^4.1.10",
425
434
  "axe-core": "^4.12.1",
426
435
  "eslint": "^9.39.2",
427
436
  "eslint-plugin-react": "^7.37.5",
@@ -429,19 +438,19 @@
429
438
  "globals": "^15.15.0",
430
439
  "jsdom": "^29.1.1",
431
440
  "playwright": "^1.61.1",
432
- "prettier": "^3.6.2",
441
+ "prettier": "^3.9.5",
433
442
  "prettier-plugin-tailwindcss": "^0.6.14",
434
- "react": "^19.2.6",
435
- "react-dom": "^19.2.6",
436
- "react-hook-form": "^7.76.0",
437
- "react-router-dom": "^7.15.0",
438
- "recharts": "^3.8.1",
439
- "tailwindcss": "^4.2.4",
443
+ "react": "^19.2.7",
444
+ "react-dom": "^19.2.7",
445
+ "react-hook-form": "^7.81.0",
446
+ "react-router-dom": "^7.18.1",
447
+ "recharts": "^3.9.2",
448
+ "tailwindcss": "^4.3.3",
440
449
  "tsup": "^8.5.1",
441
450
  "typescript": "^6.0.3",
442
- "typescript-eslint": "^8.60.0",
443
- "vite": "^8.0.10",
444
- "vitest": "^4.1.5",
451
+ "typescript-eslint": "^8.64.0",
452
+ "vite": "^8.1.5",
453
+ "vitest": "^4.1.10",
445
454
  "vitest-axe": "1.0.0-pre.5",
446
455
  "zod": "^4.4.3"
447
456
  },