@godxjp/ui 5.0.2 → 6.0.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.
- package/README.md +101 -142
- package/package.json +124 -128
- package/scripts/ui-audit.mjs +179 -0
- package/src/app/__tests__/app-provider.test.tsx +232 -0
- package/src/app/__tests__/date-format-labels.test.ts +36 -0
- package/src/app/__tests__/date-formats.test.ts +44 -0
- package/src/app/__tests__/timezones.test.ts +65 -0
- package/src/app/app-provider.tsx +227 -0
- package/src/app/date-format-labels.ts +21 -0
- package/src/app/date-formats.ts +30 -0
- package/src/app/index.ts +40 -0
- package/src/app/locales.ts +32 -0
- package/src/app/request-headers.ts +31 -0
- package/src/app/storage.ts +44 -0
- package/src/app/time-format-labels.ts +19 -0
- package/src/app/time-formats.ts +15 -0
- package/src/app/timezones.ts +208 -0
- package/src/app/types.ts +39 -0
- package/src/app/use-formatting.ts +47 -0
- package/src/components/__tests__/accessibility-primitives.test.tsx +65 -0
- package/src/components/__tests__/docs-parity.test.ts +41 -0
- package/src/components/__tests__/shadcn-release-guardrails.test.ts +71 -0
- package/src/components/__tests__/theme-axes-integration.test.tsx +242 -0
- package/src/components/admin/index.ts +76 -0
- package/src/components/data-display/__tests__/card-table.test.tsx +328 -0
- package/src/components/data-display/__tests__/data-display.test.tsx +73 -0
- package/src/components/data-display/__tests__/data-table.test.tsx +84 -0
- package/src/components/data-display/__tests__/popover.test.tsx +92 -0
- package/src/components/data-display/__tests__/scroll-area-collapsible.test.tsx +66 -0
- package/src/components/data-display/badge.tsx +27 -0
- package/src/components/data-display/card.tsx +194 -0
- package/src/components/data-display/code-badge.tsx +28 -0
- package/src/components/data-display/collapsible.tsx +5 -0
- package/src/components/data-display/data-table.tsx +476 -0
- package/src/components/data-display/empty-state.tsx +22 -0
- package/src/components/data-display/index.ts +41 -0
- package/src/components/data-display/key-value-grid.tsx +46 -0
- package/src/components/data-display/popover.tsx +62 -0
- package/src/components/data-display/progress-meter.tsx +20 -0
- package/src/components/data-display/scan-panel.tsx +16 -0
- package/src/components/data-display/scroll-area.tsx +42 -0
- package/src/components/data-display/status-badge.tsx +83 -0
- package/src/components/data-display/table.tsx +59 -0
- package/src/components/data-display/timeline.tsx +42 -0
- package/src/components/data-display/tree-list.tsx +42 -0
- package/src/components/data-entry/__fixtures__/tree-options.ts +80 -0
- package/src/components/data-entry/__tests__/cascader-tree-transfer.test.tsx +417 -0
- package/src/components/data-entry/__tests__/checkbox-group.test.tsx +40 -0
- package/src/components/data-entry/__tests__/checkbox.test.tsx +20 -0
- package/src/components/data-entry/__tests__/date-autocomplete.test.tsx +94 -0
- package/src/components/data-entry/__tests__/form-field.test.tsx +49 -0
- package/src/components/data-entry/__tests__/input-textarea.test.tsx +38 -0
- package/src/components/data-entry/__tests__/label-select.test.tsx +62 -0
- package/src/components/data-entry/__tests__/pickers.test.tsx +74 -0
- package/src/components/data-entry/__tests__/radio.test.tsx +46 -0
- package/src/components/data-entry/__tests__/search-input.test.tsx +32 -0
- package/src/components/data-entry/__tests__/switch-field.test.tsx +52 -0
- package/src/components/data-entry/__tests__/upload.test.tsx +125 -0
- package/src/components/data-entry/autocomplete.tsx +91 -0
- package/src/components/data-entry/calendar.tsx +90 -0
- package/src/components/data-entry/cascader.tsx +305 -0
- package/src/components/data-entry/checkbox-group.tsx +90 -0
- package/src/components/data-entry/checkbox.tsx +30 -0
- package/src/components/data-entry/choice-field.tsx +27 -0
- package/src/components/data-entry/choice-option.ts +20 -0
- package/src/components/data-entry/color-picker.tsx +75 -0
- package/src/components/data-entry/command.tsx +56 -0
- package/src/components/data-entry/country-select.tsx +88 -0
- package/src/components/data-entry/date-picker.tsx +69 -0
- package/src/components/data-entry/date-range-picker.tsx +75 -0
- package/src/components/data-entry/form-field.tsx +59 -0
- package/src/components/data-entry/index.ts +62 -0
- package/src/components/data-entry/input.tsx +26 -0
- package/src/components/data-entry/label.tsx +25 -0
- package/src/components/data-entry/radio.tsx +109 -0
- package/src/components/data-entry/search-input.tsx +103 -0
- package/src/components/data-entry/select.tsx +149 -0
- package/src/components/data-entry/slider.tsx +38 -0
- package/src/components/data-entry/switch-field.tsx +91 -0
- package/src/components/data-entry/switch.tsx +24 -0
- package/src/components/data-entry/textarea.tsx +12 -0
- package/src/components/data-entry/time-picker.tsx +214 -0
- package/src/components/data-entry/transfer.tsx +231 -0
- package/src/components/data-entry/tree-select-strategy.ts +6 -0
- package/src/components/data-entry/tree-select.tsx +279 -0
- package/src/components/data-entry/tree-utils.ts +221 -0
- package/src/components/data-entry/upload-crop-dialog.tsx +109 -0
- package/src/components/data-entry/upload-types.ts +86 -0
- package/src/components/data-entry/upload.tsx +498 -0
- package/src/components/data-entry/use-upload-draft.ts +93 -0
- package/src/components/feedback/__tests__/alert.test.tsx +127 -0
- package/src/components/feedback/__tests__/dialog.test.tsx +290 -0
- package/src/components/feedback/__tests__/sheet.test.tsx +94 -0
- package/src/components/feedback/__tests__/skeleton.test.tsx +25 -0
- package/src/components/feedback/__tests__/toast.test.tsx +52 -0
- package/src/components/feedback/alert.tsx +167 -0
- package/src/components/feedback/dialog.tsx +325 -0
- package/src/components/feedback/index.ts +53 -0
- package/src/components/feedback/sheet.tsx +130 -0
- package/src/components/feedback/skeleton.tsx +95 -0
- package/src/components/feedback/sonner.tsx +54 -0
- package/src/components/feedback/toaster.tsx +1 -0
- package/src/components/feedback/use-toast.ts +62 -0
- package/src/components/general/__tests__/button.test.tsx +71 -0
- package/src/components/general/button.tsx +61 -0
- package/src/components/general/index.ts +2 -0
- package/src/components/layout/__tests__/page-container.test.tsx +69 -0
- package/src/components/layout/__tests__/page-inset.test.tsx +14 -0
- package/src/components/layout/__tests__/stack-inline.test.tsx +39 -0
- package/src/components/layout/app-shell.tsx +42 -0
- package/src/components/layout/breadcrumb.tsx +35 -0
- package/src/components/layout/index.ts +31 -0
- package/src/components/layout/inline.tsx +13 -0
- package/src/components/layout/menu.tsx +34 -0
- package/src/components/layout/mobile-frame.tsx +57 -0
- package/src/components/layout/page-container.tsx +81 -0
- package/src/components/layout/page-inset.tsx +16 -0
- package/src/components/layout/responsive-grid.tsx +14 -0
- package/src/components/layout/shell-app.tsx +30 -0
- package/src/components/layout/sidebar.tsx +98 -0
- package/src/components/layout/split-pane.tsx +16 -0
- package/src/components/layout/stack.tsx +13 -0
- package/src/components/layout/topbar.tsx +108 -0
- package/src/components/navigation/__tests__/app-pickers.test.tsx +118 -0
- package/src/components/navigation/__tests__/dropdown-menu.test.tsx +104 -0
- package/src/components/navigation/__tests__/navigation.test.tsx +61 -0
- package/src/components/navigation/__tests__/pagination-steps-tabs.test.tsx +76 -0
- package/src/components/navigation/date-format-picker.tsx +55 -0
- package/src/components/navigation/dropdown-menu.tsx +190 -0
- package/src/components/navigation/filter-bar.tsx +38 -0
- package/src/components/navigation/index.ts +28 -0
- package/src/components/navigation/locale-picker.tsx +49 -0
- package/src/components/navigation/page-header.tsx +50 -0
- package/src/components/navigation/pagination-utils.ts +35 -0
- package/src/components/navigation/pagination.tsx +168 -0
- package/src/components/navigation/steps.tsx +163 -0
- package/src/components/navigation/tabs-items.tsx +69 -0
- package/src/components/navigation/tabs.tsx +67 -0
- package/src/components/navigation/time-format-picker.tsx +55 -0
- package/src/components/navigation/timezone-picker.tsx +63 -0
- package/src/components/query/__tests__/data-state.test.tsx +214 -0
- package/src/components/query/__tests__/infinite-prefetch.test.tsx +105 -0
- package/src/components/query/__tests__/query-helpers.test.tsx +61 -0
- package/src/components/query/data-state.tsx +58 -0
- package/src/components/query/index.ts +10 -0
- package/src/components/query/infinite-query-state.tsx +99 -0
- package/src/components/query/mutation-feedback.tsx +31 -0
- package/src/components/query/prefetch-link.tsx +45 -0
- package/src/components/query/query-refetch-button.tsx +41 -0
- package/src/components/ui/alert-dialog.tsx +1 -0
- package/src/components/ui/alert.tsx +1 -0
- package/src/components/ui/autocomplete.tsx +1 -0
- package/src/components/ui/badge.tsx +1 -0
- package/src/components/ui/button.tsx +1 -0
- package/src/components/ui/calendar.tsx +1 -0
- package/src/components/ui/card.tsx +1 -0
- package/src/components/ui/checkbox.tsx +1 -0
- package/src/components/ui/color-picker.tsx +1 -0
- package/src/components/ui/command.tsx +1 -0
- package/src/components/ui/date-picker.tsx +1 -0
- package/src/components/ui/date-range-picker.tsx +1 -0
- package/src/components/ui/dialog.tsx +1 -0
- package/src/components/ui/dropdown-menu.tsx +1 -0
- package/src/components/ui/index.tsx +31 -0
- package/src/components/ui/input.tsx +1 -0
- package/src/components/ui/label.tsx +1 -0
- package/src/components/ui/pagination.tsx +1 -0
- package/src/components/ui/popover.tsx +1 -0
- package/src/components/ui/radio.tsx +1 -0
- package/src/components/ui/scroll-area.tsx +1 -0
- package/src/components/ui/select.tsx +1 -0
- package/src/components/ui/sheet.tsx +1 -0
- package/src/components/ui/slider.tsx +1 -0
- package/src/components/ui/sonner.tsx +1 -0
- package/src/components/ui/switch.tsx +1 -0
- package/src/components/ui/table.tsx +1 -0
- package/src/components/ui/tabs-items.tsx +1 -0
- package/src/components/ui/tabs.tsx +1 -0
- package/src/components/ui/textarea.tsx +1 -0
- package/src/components/ui/time-picker.tsx +1 -0
- package/src/components/ui/upload.tsx +1 -0
- package/src/form/__tests__/use-zod-form.test.tsx +97 -0
- package/src/form/form-field-control.tsx +44 -0
- package/src/form/form-root.tsx +29 -0
- package/src/form/index.ts +7 -0
- package/src/form/use-zod-form.ts +29 -0
- package/src/i18n/__tests__/translate.test.ts +23 -0
- package/src/i18n/index.ts +9 -0
- package/src/i18n/messages/en.json +171 -0
- package/src/i18n/messages/ja.json +171 -0
- package/src/i18n/messages/vi.json +171 -0
- package/src/i18n/translate.ts +74 -0
- package/src/i18n/use-translation.ts +53 -0
- package/src/index.ts +3 -0
- package/src/lib/__tests__/control-styles.test.ts +78 -0
- package/src/lib/__tests__/datetime.test.ts +77 -0
- package/src/lib/__tests__/format-date.test.ts +97 -0
- package/src/lib/__tests__/format.test.ts +62 -0
- package/src/lib/__tests__/theme-tokens-audit.test.ts +176 -0
- package/src/lib/__tests__/theme-tokens-css.test.ts +118 -0
- package/src/lib/__tests__/token-governance.test.ts +191 -0
- package/src/lib/__tests__/variants.test.ts +18 -0
- package/src/lib/control-styles.ts +33 -0
- package/src/lib/datetime/detect.ts +25 -0
- package/src/lib/datetime/format-date.ts +100 -0
- package/src/lib/datetime/format.ts +140 -0
- package/src/lib/datetime/index.ts +25 -0
- package/src/lib/datetime/parse.ts +51 -0
- package/src/lib/datetime/sync.ts +48 -0
- package/src/lib/format.ts +114 -0
- package/src/lib/hooks.ts +54 -0
- package/src/lib/utils.ts +6 -0
- package/src/lib/variants.ts +40 -0
- package/src/props/components/app.prop.ts +99 -0
- package/src/props/components/data-display.prop.ts +73 -0
- package/src/props/components/data-entry.prop.ts +334 -0
- package/src/props/components/feedback.prop.ts +80 -0
- package/src/props/components/form.prop.ts +46 -0
- package/src/props/components/general.prop.ts +18 -0
- package/src/props/components/index.ts +99 -0
- package/src/props/components/layout.prop.ts +130 -0
- package/src/props/components/navigation.prop.ts +88 -0
- package/src/props/components/query.prop.ts +94 -0
- package/src/props/index.ts +17 -0
- package/src/props/registry.ts +603 -0
- package/src/props/vocabulary/content.prop.ts +35 -0
- package/src/props/vocabulary/data.prop.ts +46 -0
- package/src/props/vocabulary/index.ts +73 -0
- package/src/props/vocabulary/interaction.prop.ts +42 -0
- package/src/props/vocabulary/layout.prop.ts +25 -0
- package/src/props/vocabulary/navigation.prop.ts +19 -0
- package/src/props/vocabulary/shared.prop.ts +59 -0
- package/src/styles/alert-layout.css +191 -0
- package/src/styles/badge-layout.css +22 -0
- package/src/styles/card-layout.css +373 -0
- package/src/styles/control.css +504 -0
- package/src/styles/data-display-layout.css +246 -0
- package/src/styles/density.css +43 -0
- package/src/styles/dialog-layout.css +84 -0
- package/src/styles/index.css +105 -0
- package/src/styles/layout.css +479 -0
- package/src/styles/shell-layout.css +604 -0
- package/src/styles/table-layout.css +109 -0
- package/src/test/__tests__/render-loop-guard.test.tsx +38 -0
- package/src/test/jest-dom.d.ts +4 -0
- package/src/test/render-loop-guard.tsx +50 -0
- package/src/test/render.tsx +29 -0
- package/src/test/theme-globals.test.ts +77 -0
- package/src/test/theme-globals.ts +134 -0
- package/src/test/theme-test-utils.tsx +67 -0
- package/src/theme/example.service.css +37 -0
- package/src/tokens/base.css +13 -0
- package/src/tokens/foundation.css +151 -0
- package/src/tokens/primitives/badge.css +13 -0
- package/src/tokens/primitives/card.css +29 -0
- package/src/tokens/primitives/control.css +55 -0
- package/src/tokens/primitives/feedback.css +17 -0
- package/src/tokens/primitives/layout.css +20 -0
- package/src/tokens/primitives/navigation.css +13 -0
- package/src/tokens/primitives/table.css +10 -0
- package/BRAND.md +0 -296
- package/CHANGELOG.md +0 -668
- package/config/eslint.js +0 -54
- package/config/prettier.cjs +0 -20
- package/config/tsconfig.base.json +0 -22
- package/config/vitest.base.ts +0 -26
- package/dist/MiniMonth-YAmPGEpC.d.ts +0 -143
- package/dist/Table.types-BbsxoIYE.d.ts +0 -352
- package/dist/color-DO0qqUAb.d.ts +0 -38
- package/dist/components/composites.d.ts +0 -963
- package/dist/components/composites.js +0 -7343
- package/dist/components/composites.js.map +0 -1
- package/dist/components/primitives.d.ts +0 -2744
- package/dist/components/primitives.js +0 -7356
- package/dist/components/primitives.js.map +0 -1
- package/dist/components/shell.d.ts +0 -182
- package/dist/components/shell.js +0 -774
- package/dist/components/shell.js.map +0 -1
- package/dist/hooks.d.ts +0 -100
- package/dist/hooks.js +0 -558
- package/dist/hooks.js.map +0 -1
- package/dist/i18n.d.ts +0 -61
- package/dist/i18n.js +0 -860
- package/dist/i18n.js.map +0 -1
- package/dist/index.d.ts +0 -33
- package/dist/index.js +0 -13062
- package/dist/index.js.map +0 -1
- package/dist/padding-DY0JV5Ja.d.ts +0 -16
- package/dist/preferences.d.ts +0 -132
- package/dist/preferences.js +0 -262
- package/dist/preferences.js.map +0 -1
- package/dist/props.d.ts +0 -86
- package/dist/props.js +0 -16
- package/dist/props.js.map +0 -1
- package/dist/size-CQwNvOWd.d.ts +0 -19
- package/dist/types-LTj-2bl-.d.ts +0 -30
- package/dist/useTableViews-D5NIAJ7h.d.ts +0 -154
- package/src/tokens/tailwind.css +0 -158
package/README.md
CHANGED
|
@@ -1,181 +1,140 @@
|
|
|
1
1
|
# @godxjp/ui
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
The shared React UI framework for every godx surface (admin, agency portal,
|
|
4
|
+
handheld). Built on shadcn + Radix UI + Tailwind CSS v4.
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
[](src/)
|
|
8
|
-
|
|
9
|
-
`@godxjp/ui` is the **single source of visual truth** for the GoDX platform.
|
|
10
|
-
Every service frontend (admin-platform, forge-service, console-service, me-service,
|
|
11
|
-
chat-service, knowledge-service, …) consumes this package. No service reimplements
|
|
12
|
-
a button, dialog, sidebar, or design token.
|
|
13
|
-
|
|
14
|
-
The framework enforces three Japanese-enterprise design principles:
|
|
15
|
-
|
|
16
|
-
| Principle | Meaning | What it enforces |
|
|
17
|
-
|---|---|---|
|
|
18
|
-
| **渋み** (shibumi) | Restrained elegance | OKLCH primary chroma ≤ 0.18. No neon. No gradients on functional UI. |
|
|
19
|
-
| **間** (ma) | Vertical breathing room | Body `line-height: 1.7`. Generous spacing. Density toggle for dense tables. |
|
|
20
|
-
| **簡素** (kanso) | Simplicity | Three font weights: 400 (body), 500 (heading), 700 (emphasis). No 600 in new code. |
|
|
6
|
+
Location: `packages/godx-ui/` (linked into the app as a `file:` dependency at
|
|
7
|
+
`@godxjp/ui`).
|
|
21
8
|
|
|
22
9
|
---
|
|
23
10
|
|
|
24
|
-
##
|
|
11
|
+
## Role & boundary — read this first
|
|
25
12
|
|
|
26
|
-
|
|
13
|
+
This package is **the single source of UI truth**. It is shared, versioned
|
|
14
|
+
infrastructure, which means two things are non-negotiable:
|
|
27
15
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
<BrowserRouter>
|
|
38
|
-
<AppShell sidebar={<Sidebar nav={MY_NAV} />} topbar={<Topbar />}>
|
|
39
|
-
<Routes>{/* service-specific routes */}</Routes>
|
|
40
|
-
</AppShell>
|
|
41
|
-
</BrowserRouter>,
|
|
42
|
-
)
|
|
43
|
-
```
|
|
16
|
+
- **Editing it requires explicit session permission** (the hard gate — see
|
|
17
|
+
[DEVELOPMENT.md](./docs/DEVELOPMENT.md#0-what-this-package-is--and-the-boundary-it-must-keep)).
|
|
18
|
+
By default the package is off-limits; consumers _compose_ its primitives, they
|
|
19
|
+
don't fork them.
|
|
20
|
+
- **It is generic and presentational only.** No app i18n (`useTranslation`), no
|
|
21
|
+
Inertia (`router`/`<Form>`), no Wayfinder routes, no business entities or domain
|
|
22
|
+
logic, no product copy, no raw colors. Those are **consumer-layer** concerns — they
|
|
23
|
+
must never leak into this package. The framework ships **its own theme**, so a
|
|
24
|
+
consumer imports the styles and needs **zero** extra theme configuration.
|
|
44
25
|
|
|
45
|
-
|
|
26
|
+
> Deciding whether a component belongs here vs. app-level? Use the
|
|
27
|
+
> **`godx-ui-component-placement`** skill.
|
|
46
28
|
|
|
47
|
-
|
|
29
|
+
Full contributor rules: **[docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)**.
|
|
48
30
|
|
|
49
|
-
|
|
31
|
+
---
|
|
50
32
|
|
|
51
|
-
|
|
52
|
-
inherit the full toolchain from this package:
|
|
33
|
+
## Architecture (bottom-up)
|
|
53
34
|
|
|
54
|
-
```js
|
|
55
|
-
// eslint.config.js — one line
|
|
56
|
-
export { default } from "@godxjp/ui/eslint-config"
|
|
57
35
|
```
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
36
|
+
src/tokens/ Design tokens — the single source of values
|
|
37
|
+
foundation.css :root + .dark: colors, fonts, type scale, spacing, radius, wa-iro
|
|
38
|
+
primitives/ Per-domain primitive tokens (card, table, control, badge, …)
|
|
39
|
+
src/styles/ CSS that styles components by [data-slot]; density.css = the one density knob
|
|
40
|
+
index.css Entry: fontsource → tailwindcss → @theme (token→utility map) → *-layout.css
|
|
41
|
+
src/components/ React components by group (data-display, data-entry, layout, feedback, …)
|
|
42
|
+
src/props/ Prop type system: vocabulary/ (atomic) + components/ + registry.ts
|
|
43
|
+
src/lib/ cn(), control-styles, variants
|
|
44
|
+
examples/ *.preview.tsx — Storybook-style stories
|
|
45
|
+
docs/primitives/ <component>/index.tsx demo + examples/ + generated .md
|
|
46
|
+
preview/ The preview app (vite, :6008) rendering examples + docs
|
|
62
47
|
```
|
|
63
48
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
```ts
|
|
70
|
-
// vitest.config.ts
|
|
71
|
-
import base from "@godxjp/ui/vitest-config"
|
|
72
|
-
import { mergeConfig } from "vitest/config"
|
|
73
|
-
export default mergeConfig(base, { test: {} })
|
|
74
|
-
```
|
|
49
|
+
A value is defined **once** as a CSS var (`--primary`), mapped to a utility in the
|
|
50
|
+
`@theme` block (`--color-primary: hsl(var(--primary))`), and consumed as `bg-primary`.
|
|
51
|
+
Components emit `data-slot` / `data-*`; the look lives in `styles/*-layout.css`. See
|
|
52
|
+
[DEVELOPMENT.md §1](./docs/DEVELOPMENT.md#1-architecture--the-layers-bottom-up).
|
|
75
53
|
|
|
76
54
|
---
|
|
77
55
|
|
|
78
|
-
##
|
|
79
|
-
|
|
80
|
-
| Import
|
|
81
|
-
|
|
82
|
-
| `@godxjp/ui`
|
|
83
|
-
| `@godxjp/ui/
|
|
84
|
-
| `@godxjp/ui/
|
|
85
|
-
| `@godxjp/ui/
|
|
86
|
-
| `@godxjp/ui/
|
|
87
|
-
| `@godxjp/ui/
|
|
88
|
-
| `@godxjp/ui/
|
|
89
|
-
| `@godxjp/ui/
|
|
90
|
-
| `@godxjp/ui/
|
|
91
|
-
| `@godxjp/ui/
|
|
92
|
-
| `@godxjp/ui/
|
|
93
|
-
| `@godxjp/ui/eslint-config` | Shared ESLint flat config |
|
|
94
|
-
| `@godxjp/ui/prettier-config` | Shared Prettier config |
|
|
95
|
-
| `@godxjp/ui/tsconfig` | Strict TypeScript base |
|
|
96
|
-
| `@godxjp/ui/vitest-config` | Vitest base with jsdom + coverage thresholds |
|
|
56
|
+
## Component groups
|
|
57
|
+
|
|
58
|
+
| Group | Import | Examples |
|
|
59
|
+
| ------------------ | ------------------------- | ------------------------------------------------------------------------------- |
|
|
60
|
+
| **Layout** | `@godxjp/ui/layout` | `PageContainer`, `Stack`, `Inline`, `ResponsiveGrid` |
|
|
61
|
+
| **General** | `@godxjp/ui/general` | `Button` |
|
|
62
|
+
| **Data Entry** | `@godxjp/ui/data-entry` | `Input`, `Select`, `FormField`, `DatePicker`, `Switch` |
|
|
63
|
+
| **Data Display** | `@godxjp/ui/data-display` | `Table`, `DataTable`, `Card`, `Badge`, `KeyValueGrid`, `Timeline`, `EmptyState` |
|
|
64
|
+
| **Feedback** | `@godxjp/ui/feedback` | `Dialog`, `Sheet`, `Toast`, `Skeleton`, `Alert` |
|
|
65
|
+
| **Query** | `@godxjp/ui/query` | `DataState`, `InfiniteQueryState`, `PrefetchLink`, `MutationFeedback` |
|
|
66
|
+
| **Navigation** | `@godxjp/ui/navigation` | `Tabs`, `FilterBar`, `DropdownMenu`, `Steps`, `Pagination`, `LocalePicker` |
|
|
67
|
+
| **App** | `@godxjp/ui/app` | `AppProvider`, `useDateTime` |
|
|
68
|
+
| **Datetime** | `@godxjp/ui/datetime` | `formatDate` (mandatory for display) |
|
|
69
|
+
| **shadcn paths** | `@godxjp/ui/ui` | Thin re-exports for shadcn-style imports |
|
|
70
|
+
| **Admin (legacy)** | `@godxjp/ui/admin` | Compound admin exports |
|
|
97
71
|
|
|
98
72
|
---
|
|
99
73
|
|
|
100
|
-
##
|
|
101
|
-
|
|
102
|
-
| Component | Radix backing | A11y | Status |
|
|
103
|
-
|---|---|---|---|
|
|
104
|
-
| `Badge` | — | WCAG 2.1 AA | production |
|
|
105
|
-
| `Button` | `@radix-ui/react-slot` | focus-visible, keyboard | production |
|
|
106
|
-
| `Card` | — | — | production |
|
|
107
|
-
| `Input`, `Textarea` | — | aria-invalid, label wire | production |
|
|
108
|
-
| `Label` | `@radix-ui/react-label` | for/id | production |
|
|
109
|
-
| `Tabs`, `Tabs`, `Tabs`, `Tabs` | `@radix-ui/react-tabs` | roving tabindex | production |
|
|
110
|
-
| `Avatar` | — | aria-label | production |
|
|
111
|
-
| `Separator` | `@radix-ui/react-separator` | role separator | production |
|
|
112
|
-
| `Popover`, `Popover`, `Popover` | `@radix-ui/react-popover` | focus trap | production |
|
|
113
|
-
| `DropdownMenu` family | `@radix-ui/react-dropdown-menu` | keyboard nav | production |
|
|
114
|
-
| `Calendar` | `react-day-picker` | ARIA grid | production |
|
|
115
|
-
| `TimeInput` | — | aria-invalid | production |
|
|
116
|
-
| `Dialog` family | `@radix-ui/react-dialog` | focus trap, aria-modal | production |
|
|
117
|
-
| `Sheet` family | `@radix-ui/react-dialog` | focus trap, aria-modal | production |
|
|
118
|
-
| `AlertDialog` family | `@radix-ui/react-alert-dialog` | focus trap | production |
|
|
119
|
-
| `Select` family | `@radix-ui/react-select` | keyboard nav | production |
|
|
120
|
-
| `Switch` | `@radix-ui/react-switch` | role switch | production |
|
|
121
|
-
| `Checkbox` | `@radix-ui/react-checkbox` | role checkbox | production |
|
|
122
|
-
| `Table` family | — | role table | production |
|
|
123
|
-
| `Combobox` family | `cmdk` + Popover | keyboard nav | production |
|
|
124
|
-
| `Toaster`, `toast` | `sonner` | aria-live | production |
|
|
125
|
-
| `Skeleton` | — | aria-hidden | production |
|
|
126
|
-
| `Breadcrumb`, `Breadcrumb`, `Breadcrumb` | — | aria-label, aria-current | production |
|
|
74
|
+
## Consumer setup — theme is self-contained
|
|
127
75
|
|
|
128
|
-
|
|
76
|
+
The framework ships colors, fonts (M PLUS 2 via `@fontsource`), the type scale, and
|
|
77
|
+
the wa-iro palette. A consumer's entire styling surface is **one import + content
|
|
78
|
+
sources** — no `:root` overrides, no font `<link>`:
|
|
129
79
|
|
|
130
|
-
|
|
80
|
+
```css
|
|
81
|
+
/* resources/css/app.css */
|
|
82
|
+
@import "@godxjp/ui/styles";
|
|
83
|
+
@source '../js/**/*.{ts,tsx}';
|
|
84
|
+
@source '../views';
|
|
85
|
+
```
|
|
131
86
|
|
|
132
|
-
|
|
87
|
+
```tsx
|
|
88
|
+
import { AppProvider } from "@godxjp/ui/app"; // locale, tz, date/time format
|
|
89
|
+
import { PageContainer } from "@godxjp/ui/layout"; // every page wraps in this
|
|
90
|
+
```
|
|
133
91
|
|
|
134
|
-
|
|
135
|
-
|---|---|
|
|
136
|
-
| `ja` | production (primary) |
|
|
137
|
-
| `en` | production |
|
|
138
|
-
| `vi` | production |
|
|
139
|
-
| `fil` | production (added v3.0.0) |
|
|
92
|
+
### Mandatory consumer rules
|
|
140
93
|
|
|
141
|
-
|
|
94
|
+
1. **Every page** uses `<PageContainer title subtitle extra footer>`.
|
|
95
|
+
2. **Mobile-first** — verify at 320–390px in preview / browser.
|
|
96
|
+
3. **Spacing via `Stack`/`Inline` `gap` + `ResponsiveGrid`** — no Tailwind `p-*` /
|
|
97
|
+
`gap-*` / `space-x|y-*` for app layout (see `docs/SPACING.md`).
|
|
98
|
+
4. **Semantic tokens only** — no raw colors / hex / `dark:` overrides.
|
|
99
|
+
5. **Dates** display via `formatDate` from `@godxjp/ui/datetime`.
|
|
100
|
+
6. **`AppProvider`** wraps the app for locale / timezone / date-time format.
|
|
101
|
+
7. **Audit** — `npm run ui:audit` must report 0 errors for touched files.
|
|
102
|
+
|
|
103
|
+
Full app-developer rules: [ui-standardization.md](../../.claude/skills/frontend-design/rules/ui-standardization.md).
|
|
142
104
|
|
|
143
105
|
---
|
|
144
106
|
|
|
145
|
-
##
|
|
107
|
+
## Golden ratio (φ ≈ 1.618)
|
|
146
108
|
|
|
147
|
-
|
|
148
|
-
|
|
109
|
+
One token `--phi-unit` drives page/section/card spacing; micro control gaps use the
|
|
110
|
+
4px grid. Density (`compact` | `default` | `comfortable`) retunes `--phi-unit` with
|
|
111
|
+
control + table heights together.
|
|
149
112
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
113
|
+
| App API | φ level |
|
|
114
|
+
| ------------------- | ------------------- |
|
|
115
|
+
| `<Stack gap="md">` | φ⁰ (default) |
|
|
116
|
+
| `<Stack gap="lg">` | φ¹ |
|
|
117
|
+
| `<Stack gap="xl">` | φ² |
|
|
118
|
+
| Card shell / footer | base × φ / base ÷ φ |
|
|
156
119
|
|
|
157
120
|
---
|
|
158
121
|
|
|
159
|
-
##
|
|
160
|
-
|
|
161
|
-
| Service | Status | Notes |
|
|
162
|
-
|---|---|---|
|
|
163
|
-
| `calendar-service/frontend` | adopted | Greenfield; compliant from first commit. |
|
|
164
|
-
| `forge-service/frontend` | adopting (phase 1) | Reference implementation for migration pattern. |
|
|
165
|
-
| `admin-platform/frontend` | partial | Omnify tokens overlap ~90%; full migration pending. |
|
|
166
|
-
| `me-service/frontend` | adopting | Plan #31 R6 — active migration. |
|
|
167
|
-
| `console-service/frontend` | adopting | Epic #1412; AppShell + tokens wired. |
|
|
168
|
-
| `agent-service/frontend` | not started | Plan #21 G17. |
|
|
169
|
-
| `knowledge-service/frontend` | not started | Plan #18 K-phase. |
|
|
170
|
-
| `chat-service/frontend` | adopting | Plan #30 completion phase. |
|
|
122
|
+
## Working on the framework
|
|
171
123
|
|
|
172
|
-
|
|
124
|
+
```bash
|
|
125
|
+
pnpm preview # preview app → http://localhost:6008 (fixed port, kills stale)
|
|
126
|
+
pnpm preview:build # static build — the integration test for examples + docs
|
|
127
|
+
pnpm docs:sync-primitives # regenerate docs/primitives/**/*.md from source
|
|
128
|
+
pnpm typecheck && pnpm audit && pnpm test
|
|
129
|
+
```
|
|
173
130
|
|
|
174
|
-
|
|
131
|
+
→ **[docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)** is the contributor guideline (the
|
|
132
|
+
boundary, the layers, how to add/extend a component, verification).
|
|
175
133
|
|
|
176
|
-
|
|
177
|
-
Breaking changes require a cross-service audit + major bump.
|
|
178
|
-
See [`CHANGELOG.md`](CHANGELOG.md) for the full history.
|
|
134
|
+
## Docs index
|
|
179
135
|
|
|
180
|
-
|
|
181
|
-
|
|
136
|
+
- [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md) — contributor guideline (start here to edit the package)
|
|
137
|
+
- [docs/COMPONENTS.md](./docs/COMPONENTS.md) · [docs/TOKENS.md](./docs/TOKENS.md) · [docs/SPACING.md](./docs/SPACING.md)
|
|
138
|
+
- [docs/PROPS-VOCABULARY.md](./docs/PROPS-VOCABULARY.md) · [docs/PROPS-REGISTRY.md](./docs/PROPS-REGISTRY.md)
|
|
139
|
+
- [docs/DATETIME.md](./docs/DATETIME.md) · [docs/FORMS.md](./docs/FORMS.md) · [docs/TESTING.md](./docs/TESTING.md)
|
|
140
|
+
- MCP: **godxjp-ui-mcp** (`.mcp.json`)
|
package/package.json
CHANGED
|
@@ -1,162 +1,158 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@godxjp/ui",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "GoDX professional UI framework — design tokens, primitives, shell, i18n, hooks, and toolchain config shared across every service frontend. Source of truth for the GoDX visual language.",
|
|
3
|
+
"version": "6.0.0",
|
|
5
4
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
"module": "./dist/index.js",
|
|
8
|
-
"types": "./dist/index.d.ts",
|
|
9
|
-
"sideEffects": [
|
|
10
|
-
"**/*.css"
|
|
11
|
-
],
|
|
12
|
-
"publishConfig": {
|
|
13
|
-
"registry": "https://registry.npmjs.org/",
|
|
14
|
-
"access": "public"
|
|
15
|
-
},
|
|
16
|
-
"repository": {
|
|
17
|
-
"type": "git",
|
|
18
|
-
"url": "git+https://github.com/godx-jp/godxjp-ui.git"
|
|
19
|
-
},
|
|
20
|
-
"homepage": "https://github.com/godx-jp/godxjp-ui#readme",
|
|
21
|
-
"license": "Apache-2.0",
|
|
5
|
+
"description": "@godxjp/ui — shared React UI framework (shadcn + Radix + Tailwind v4).",
|
|
22
6
|
"files": [
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"BRAND.md",
|
|
27
|
-
"CHANGELOG.md"
|
|
7
|
+
"src",
|
|
8
|
+
"scripts/ui-audit.mjs",
|
|
9
|
+
"README.md"
|
|
28
10
|
],
|
|
11
|
+
"main": "./src/index.ts",
|
|
12
|
+
"types": "./src/index.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": "./src/index.ts",
|
|
15
|
+
"./styles": "./src/styles/index.css",
|
|
16
|
+
"./tokens": "./src/tokens/base.css",
|
|
17
|
+
"./admin": "./src/components/admin/index.ts",
|
|
18
|
+
"./layout": "./src/components/layout/index.ts",
|
|
19
|
+
"./general": "./src/components/general/index.ts",
|
|
20
|
+
"./data-entry": "./src/components/data-entry/index.ts",
|
|
21
|
+
"./data-display": "./src/components/data-display/index.ts",
|
|
22
|
+
"./feedback": "./src/components/feedback/index.ts",
|
|
23
|
+
"./query": "./src/components/query/index.ts",
|
|
24
|
+
"./ui": "./src/components/ui/index.tsx",
|
|
25
|
+
"./navigation": "./src/components/navigation/index.ts",
|
|
26
|
+
"./props": "./src/props/index.ts",
|
|
27
|
+
"./props/vocabulary": "./src/props/vocabulary/index.ts",
|
|
28
|
+
"./props/components": "./src/props/components/index.ts",
|
|
29
|
+
"./props/registry": "./src/props/registry.ts",
|
|
30
|
+
"./form": "./src/form/index.ts",
|
|
31
|
+
"./app": "./src/app/index.ts",
|
|
32
|
+
"./datetime": "./src/lib/datetime/index.ts",
|
|
33
|
+
"./i18n": "./src/i18n/index.ts",
|
|
34
|
+
"./lib/utils": "./src/lib/utils.ts",
|
|
35
|
+
"./ui/button": "./src/components/general/button.tsx",
|
|
36
|
+
"./ui/badge": "./src/components/data-display/badge.tsx",
|
|
37
|
+
"./ui/card": "./src/components/data-display/card.tsx",
|
|
38
|
+
"./ui/table": "./src/components/data-display/table.tsx",
|
|
39
|
+
"./ui/input": "./src/components/data-entry/input.tsx",
|
|
40
|
+
"./ui/label": "./src/components/data-entry/label.tsx",
|
|
41
|
+
"./ui/select": "./src/components/data-entry/select.tsx",
|
|
42
|
+
"./ui/checkbox": "./src/components/data-entry/checkbox.tsx",
|
|
43
|
+
"./ui/radio": "./src/components/data-entry/radio.tsx",
|
|
44
|
+
"./ui/switch": "./src/components/data-entry/switch.tsx",
|
|
45
|
+
"./ui/slider": "./src/components/data-entry/slider.tsx",
|
|
46
|
+
"./ui/calendar": "./src/components/data-entry/calendar.tsx",
|
|
47
|
+
"./ui/date-picker": "./src/components/data-entry/date-picker.tsx",
|
|
48
|
+
"./ui/date-range-picker": "./src/components/data-entry/date-range-picker.tsx",
|
|
49
|
+
"./ui/time-picker": "./src/components/data-entry/time-picker.tsx",
|
|
50
|
+
"./ui/color-picker": "./src/components/data-entry/color-picker.tsx",
|
|
51
|
+
"./ui/autocomplete": "./src/components/data-entry/autocomplete.tsx",
|
|
52
|
+
"./ui/upload": "./src/components/data-entry/upload.tsx",
|
|
53
|
+
"./ui/cascader": "./src/components/data-entry/cascader.tsx",
|
|
54
|
+
"./ui/tree-select": "./src/components/data-entry/tree-select.tsx",
|
|
55
|
+
"./ui/transfer": "./src/components/data-entry/transfer.tsx",
|
|
56
|
+
"./ui/command": "./src/components/data-entry/command.tsx",
|
|
57
|
+
"./ui/scroll-area": "./src/components/data-display/scroll-area.tsx",
|
|
58
|
+
"./ui/popover": "./src/components/data-display/popover.tsx",
|
|
59
|
+
"./ui/textarea": "./src/components/data-entry/textarea.tsx",
|
|
60
|
+
"./ui/dialog": "./src/components/feedback/dialog.tsx",
|
|
61
|
+
"./ui/alert-dialog": "./src/components/feedback/dialog.tsx",
|
|
62
|
+
"./ui/alert": "./src/components/feedback/alert.tsx",
|
|
63
|
+
"./ui/sonner": "./src/components/feedback/sonner.tsx",
|
|
64
|
+
"./ui/tabs": "./src/components/navigation/tabs.tsx",
|
|
65
|
+
"./ui/tabs-items": "./src/components/navigation/tabs-items.tsx",
|
|
66
|
+
"./ui/pagination": "./src/components/navigation/pagination.tsx",
|
|
67
|
+
"./ui/steps": "./src/components/navigation/steps.tsx",
|
|
68
|
+
"./ui/sheet": "./src/components/feedback/sheet.tsx",
|
|
69
|
+
"./ui/dropdown-menu": "./src/components/navigation/dropdown-menu.tsx"
|
|
70
|
+
},
|
|
29
71
|
"scripts": {
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
72
|
+
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
73
|
+
"lint": "eslint .",
|
|
74
|
+
"lint:fix": "eslint . --fix",
|
|
75
|
+
"format": "prettier --check .",
|
|
76
|
+
"format:fix": "prettier --write .",
|
|
35
77
|
"test": "vitest run",
|
|
36
78
|
"test:watch": "vitest",
|
|
37
|
-
"test:
|
|
38
|
-
"
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"sync
|
|
43
|
-
"
|
|
44
|
-
"prepublishOnly": "npm run build",
|
|
45
|
-
"prepare": "husky"
|
|
79
|
+
"test:coverage": "vitest run --coverage",
|
|
80
|
+
"verify": "pnpm typecheck && pnpm lint && pnpm format && pnpm test",
|
|
81
|
+
"verify:release": "pnpm typecheck && pnpm lint && pnpm preview:build && pnpm test",
|
|
82
|
+
"preview": "node preview/scripts/kill-port.mjs && vite --config preview/vite.config.ts --port 6008 --strictPort",
|
|
83
|
+
"preview:build": "vite build --config preview/vite.config.ts",
|
|
84
|
+
"docs:sync-primitives": "node preview/scripts/sync-primitive-docs.mjs && prettier --write \"docs/primitives/**/*.tsx\"",
|
|
85
|
+
"audit": "node scripts/ui-audit.mjs"
|
|
46
86
|
},
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
-
"
|
|
55
|
-
"
|
|
56
|
-
"./styles/theme.css": "./src/styles/theme.css",
|
|
57
|
-
"./styles/base.css": "./src/styles/base.css",
|
|
58
|
-
"./styles/shell.css": "./src/styles/shell.css",
|
|
59
|
-
"./styles/sonner.css": "./src/styles/sonner.css",
|
|
60
|
-
"./tokens": "./src/styles/theme.css",
|
|
61
|
-
"./tokens.css": "./src/styles/theme.css",
|
|
62
|
-
"./tokens-ext.css": "./src/styles/shell.css",
|
|
63
|
-
"./sonner.css": "./src/styles/sonner.css",
|
|
64
|
-
"./i18n": {
|
|
65
|
-
"types": "./dist/i18n.d.ts",
|
|
66
|
-
"import": "./dist/i18n.js"
|
|
67
|
-
},
|
|
68
|
-
"./hooks": {
|
|
69
|
-
"types": "./dist/hooks.d.ts",
|
|
70
|
-
"import": "./dist/hooks.js"
|
|
71
|
-
},
|
|
72
|
-
"./props": {
|
|
73
|
-
"types": "./dist/props.d.ts",
|
|
74
|
-
"import": "./dist/props.js"
|
|
75
|
-
},
|
|
76
|
-
"./primitives": {
|
|
77
|
-
"types": "./dist/components/primitives.d.ts",
|
|
78
|
-
"import": "./dist/components/primitives.js"
|
|
79
|
-
},
|
|
80
|
-
"./components/primitives": {
|
|
81
|
-
"types": "./dist/components/primitives.d.ts",
|
|
82
|
-
"import": "./dist/components/primitives.js"
|
|
83
|
-
},
|
|
84
|
-
"./components/shell": {
|
|
85
|
-
"types": "./dist/components/shell.d.ts",
|
|
86
|
-
"import": "./dist/components/shell.js"
|
|
87
|
-
},
|
|
88
|
-
"./components/composites": {
|
|
89
|
-
"types": "./dist/components/composites.d.ts",
|
|
90
|
-
"import": "./dist/components/composites.js"
|
|
91
|
-
},
|
|
92
|
-
"./preferences": {
|
|
93
|
-
"types": "./dist/preferences.d.ts",
|
|
94
|
-
"import": "./dist/preferences.js"
|
|
95
|
-
},
|
|
96
|
-
"./eslint-config": "./config/eslint.js",
|
|
97
|
-
"./prettier-config": "./config/prettier.cjs",
|
|
98
|
-
"./tsconfig": "./config/tsconfig.base.json",
|
|
99
|
-
"./vitest-config": "./config/vitest.base.ts"
|
|
87
|
+
"peerDependencies": {
|
|
88
|
+
"@hookform/resolvers": "^5.2.0",
|
|
89
|
+
"@tanstack/react-query": ">=5.0.0",
|
|
90
|
+
"react": ">=19.0.0",
|
|
91
|
+
"react-dom": ">=19.0.0",
|
|
92
|
+
"react-hook-form": "^7.76.0",
|
|
93
|
+
"react-router-dom": ">=7.0.0",
|
|
94
|
+
"tailwindcss": ">=4.0.0",
|
|
95
|
+
"zod": "^4.4.0"
|
|
100
96
|
},
|
|
101
97
|
"dependencies": {
|
|
102
|
-
"@hookform/resolvers": "^5.2.2",
|
|
103
|
-
"@internationalized/date": "^3.10.0",
|
|
104
98
|
"@radix-ui/react-alert-dialog": "^1.1.15",
|
|
105
99
|
"@radix-ui/react-checkbox": "^1.3.3",
|
|
100
|
+
"@radix-ui/react-context": "^1.1.2",
|
|
106
101
|
"@radix-ui/react-dialog": "^1.1.15",
|
|
107
102
|
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
108
103
|
"@radix-ui/react-label": "^2.1.8",
|
|
109
104
|
"@radix-ui/react-popover": "^1.1.15",
|
|
110
105
|
"@radix-ui/react-radio-group": "^1.3.8",
|
|
106
|
+
"@radix-ui/react-scroll-area": "^1.2.10",
|
|
107
|
+
"@radix-ui/react-collapsible": "^1.1.12",
|
|
111
108
|
"@radix-ui/react-select": "^2.2.6",
|
|
112
|
-
"@radix-ui/react-separator": "^1.1.8",
|
|
113
109
|
"@radix-ui/react-slider": "^1.3.6",
|
|
114
110
|
"@radix-ui/react-slot": "^1.2.4",
|
|
115
111
|
"@radix-ui/react-switch": "^1.2.6",
|
|
116
112
|
"@radix-ui/react-tabs": "^1.1.13",
|
|
117
|
-
"@radix-ui/react-tooltip": "^1.2.8",
|
|
118
|
-
"@radix-ui/react-visually-hidden": "^1.2.4",
|
|
119
|
-
"@tanstack/react-table": "^8.21.3",
|
|
120
113
|
"class-variance-authority": "^0.7.1",
|
|
121
114
|
"clsx": "^2.1.1",
|
|
122
115
|
"cmdk": "^1.1.1",
|
|
123
|
-
"
|
|
124
|
-
"
|
|
125
|
-
"lucide-react": "^1.
|
|
126
|
-
"
|
|
127
|
-
"react-aria-components": "^1.13.0",
|
|
128
|
-
"react-easy-crop": "^5.5.7",
|
|
129
|
-
"react-hook-form": "^7.76.0",
|
|
130
|
-
"react-i18next": "^17.0.8",
|
|
116
|
+
"@date-fns/tz": "^1.5.0",
|
|
117
|
+
"date-fns": "^4.1.0",
|
|
118
|
+
"lucide-react": "^1.14.0",
|
|
119
|
+
"react-day-picker": "^10.0.1",
|
|
131
120
|
"sonner": "^2.0.7",
|
|
132
|
-
"tailwind-merge": "^3.
|
|
133
|
-
"
|
|
134
|
-
|
|
135
|
-
"peerDependencies": {
|
|
136
|
-
"react": "^18 || ^19",
|
|
137
|
-
"react-dom": "^18 || ^19",
|
|
138
|
-
"tailwindcss": "^4"
|
|
121
|
+
"tailwind-merge": "^3.5.0",
|
|
122
|
+
"tailwindcss-animate": "^1.0.7",
|
|
123
|
+
"@fontsource/m-plus-2": "^5.2.9"
|
|
139
124
|
},
|
|
140
125
|
"devDependencies": {
|
|
141
|
-
"@
|
|
142
|
-
"@
|
|
143
|
-
"@
|
|
144
|
-
"@
|
|
145
|
-
"@
|
|
146
|
-
"@
|
|
126
|
+
"@eslint/js": "^9.39.4",
|
|
127
|
+
"@hookform/resolvers": "^5.2.2",
|
|
128
|
+
"@tailwindcss/vite": "^4.2.4",
|
|
129
|
+
"@tanstack/react-query": "^5.100.9",
|
|
130
|
+
"@testing-library/jest-dom": "^6.9.1",
|
|
131
|
+
"@testing-library/react": "^16.3.2",
|
|
132
|
+
"@testing-library/user-event": "^14.6.1",
|
|
147
133
|
"@types/react": "^19.2.14",
|
|
148
134
|
"@types/react-dom": "^19.2.3",
|
|
149
|
-
"@vitejs/plugin-react": "^6.0.
|
|
150
|
-
"@vitest/
|
|
151
|
-
"
|
|
152
|
-
"
|
|
153
|
-
"
|
|
154
|
-
"
|
|
155
|
-
"
|
|
156
|
-
"
|
|
157
|
-
"
|
|
135
|
+
"@vitejs/plugin-react": "^6.0.1",
|
|
136
|
+
"@vitest/coverage-v8": "^4.1.5",
|
|
137
|
+
"eslint": "^9.39.2",
|
|
138
|
+
"eslint-plugin-react": "^7.37.5",
|
|
139
|
+
"eslint-plugin-react-hooks": "^7.1.1",
|
|
140
|
+
"globals": "^15.15.0",
|
|
141
|
+
"jsdom": "^29.1.1",
|
|
142
|
+
"prettier": "^3.6.2",
|
|
143
|
+
"prettier-plugin-tailwindcss": "^0.6.14",
|
|
144
|
+
"react": "^19.2.6",
|
|
145
|
+
"react-dom": "^19.2.6",
|
|
146
|
+
"react-hook-form": "^7.76.0",
|
|
147
|
+
"react-router-dom": "^7.15.0",
|
|
148
|
+
"tailwindcss": "^4.2.4",
|
|
158
149
|
"typescript": "^6.0.3",
|
|
159
|
-
"
|
|
160
|
-
"
|
|
150
|
+
"typescript-eslint": "^8.60.0",
|
|
151
|
+
"vite": "^8.0.10",
|
|
152
|
+
"vitest": "^4.1.5",
|
|
153
|
+
"zod": "^4.4.3"
|
|
154
|
+
},
|
|
155
|
+
"bin": {
|
|
156
|
+
"godxjp-ui-audit": "scripts/ui-audit.mjs"
|
|
161
157
|
}
|
|
162
158
|
}
|