@godxjp/ui 19.1.0 → 19.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.
- package/README.md +25 -128
- package/dist/app/theme-axes.d.ts +4 -15
- package/dist/app/timezones.d.ts +1 -4
- package/dist/components/charts/area-chart.d.ts +2 -3
- package/dist/components/charts/bar-chart.d.ts +2 -3
- package/dist/components/charts/chart-frame.d.ts +7 -16
- package/dist/components/charts/chart-summary.d.ts +2 -2
- package/dist/components/charts/compact-bar-trend.d.ts +9 -24
- package/dist/components/charts/index.d.ts +1 -6
- package/dist/components/data-display/badge.d.ts +2 -12
- package/dist/components/data-display/card.d.ts +21 -41
- package/dist/components/data-display/carousel.d.ts +1 -2
- package/dist/components/data-display/code-block.d.ts +4 -0
- package/dist/components/data-display/code-block.js +24 -0
- package/dist/components/data-display/data-table.d.ts +15 -37
- package/dist/components/data-display/data-table.js +1 -3
- package/dist/components/data-display/descriptions.d.ts +2 -6
- package/dist/components/data-display/descriptions.js +0 -2
- package/dist/components/data-display/index.d.ts +4 -0
- package/dist/components/data-display/index.js +4 -0
- package/dist/components/data-display/list-row.d.ts +3 -22
- package/dist/components/data-display/permission-matrix.d.ts +7 -20
- package/dist/components/data-display/progress.d.ts +1 -1
- package/dist/components/data-display/prose.d.ts +4 -0
- package/dist/components/data-display/prose.js +20 -0
- package/dist/components/data-display/service-launcher-card.d.ts +3 -10
- package/dist/components/data-display/table.d.ts +20 -80
- package/dist/components/data-display/table.js +0 -3
- package/dist/components/data-display/timeline.d.ts +3 -5
- package/dist/components/data-entry/branch-scope-picker.d.ts +2 -19
- package/dist/components/data-entry/branch-scope-picker.js +0 -1
- package/dist/components/data-entry/calendar.d.ts +3 -2
- package/dist/components/data-entry/calendar.js +58 -3
- package/dist/components/data-entry/command-palette.d.ts +8 -22
- package/dist/components/data-entry/date-picker.d.ts +4 -5
- package/dist/components/data-entry/date-picker.js +6 -1
- package/dist/components/data-entry/date-range-picker.d.ts +1 -1
- package/dist/components/data-entry/date-range-picker.js +8 -3
- package/dist/components/data-entry/form-errors.d.ts +7 -18
- package/dist/components/data-entry/form-field.js +1 -5
- package/dist/components/data-entry/form.d.ts +1 -9
- package/dist/components/data-entry/input.d.ts +16 -14
- package/dist/components/data-entry/input.js +3 -0
- package/dist/components/data-entry/month-picker.js +2 -2
- package/dist/components/data-entry/month-range-picker.d.ts +4 -6
- package/dist/components/data-entry/month-range-picker.js +2 -2
- package/dist/components/data-entry/number-input.d.ts +1 -5
- package/dist/components/data-entry/number-input.js +1 -0
- package/dist/components/data-entry/radio.js +0 -1
- package/dist/components/data-entry/search-select.d.ts +2 -4
- package/dist/components/data-entry/select.d.ts +11 -6
- package/dist/components/data-entry/select.js +4 -2
- package/dist/components/data-entry/switch.js +0 -1
- package/dist/components/data-entry/textarea.d.ts +10 -16
- package/dist/components/data-entry/time-picker.d.ts +3 -5
- package/dist/components/data-entry/upload-types.d.ts +1 -5
- package/dist/components/data-entry/use-upload-draft.d.ts +0 -4
- package/dist/components/feedback/dialog.d.ts +6 -15
- package/dist/components/feedback/overlay-header-tone.d.ts +1 -1
- package/dist/components/feedback/sheet.d.ts +3 -10
- package/dist/components/feedback/sheet.js +1 -1
- package/dist/components/feedback/sonner.js +2 -3
- package/dist/components/general/activity.d.ts +4 -30
- package/dist/components/general/button.js +1 -10
- package/dist/components/general/logo.d.ts +6 -28
- package/dist/components/general/reveal.d.ts +3 -9
- package/dist/components/general/typography.d.ts +1 -3
- package/dist/components/layout/account-chip.d.ts +8 -0
- package/dist/components/layout/account-chip.js +45 -0
- package/dist/components/layout/auth-divider.d.ts +2 -9
- package/dist/components/layout/auth-shell.d.ts +1 -14
- package/dist/components/layout/breadcrumb.d.ts +1 -5
- package/dist/components/layout/centered-shell.d.ts +4 -18
- package/dist/components/layout/error-surface.d.ts +11 -28
- package/dist/components/layout/error-surface.js +4 -1
- package/dist/components/layout/index.d.ts +2 -0
- package/dist/components/layout/index.js +2 -0
- package/dist/components/layout/legal-document-shell.d.ts +5 -28
- package/dist/components/layout/master-detail.d.ts +2 -18
- package/dist/components/layout/page-container.js +0 -1
- package/dist/components/layout/responsive-grid.d.ts +6 -1
- package/dist/components/layout/responsive-grid.js +9 -2
- package/dist/components/layout/service-role-panel.d.ts +7 -19
- package/dist/components/layout/sidebar.d.ts +5 -27
- package/dist/components/layout/sidebar.js +0 -1
- package/dist/components/layout/split-pane.d.ts +0 -7
- package/dist/components/layout/topbar.d.ts +1 -14
- package/dist/components/navigation/app-setting-picker.js +1 -3
- package/dist/components/navigation/filter-bar.d.ts +1 -6
- package/dist/components/navigation/pagination-utils.d.ts +2 -12
- package/dist/components/navigation/tabs-scroll.d.ts +2 -36
- package/dist/components/navigation/tabs.js +4 -8
- package/dist/components/query/data-state.d.ts +2 -2
- package/dist/components/ui/credential-reveal.d.ts +1 -4
- package/dist/components/ui/hover-card.d.ts +1 -2
- package/dist/components/ui/separator.d.ts +2 -15
- package/dist/components/ui/toggle-group.d.ts +1 -5
- package/dist/components/ui/toggle.d.ts +6 -31
- package/dist/email/brand-mark.d.ts +6 -34
- package/dist/email/color.d.ts +7 -17
- package/dist/email/geometry.d.ts +4 -8
- package/dist/email/index.d.ts +4 -48
- package/dist/email/inline-style.d.ts +3 -9
- package/dist/email/urgency.d.ts +2 -7
- package/dist/form/form-context.d.ts +2 -5
- package/dist/form/form-root.d.ts +1 -2
- package/dist/i18n/messages/en.json +4 -0
- package/dist/i18n/messages/ja.json +4 -0
- package/dist/i18n/messages/vi.json +4 -0
- package/dist/inertia/index.d.ts +2 -10
- package/dist/lib/control-styles.d.ts +10 -21
- package/dist/lib/control-styles.js +4 -6
- package/dist/lib/datetime/format-date.d.ts +1 -4
- package/dist/lib/field-a11y.d.ts +11 -68
- package/dist/lib/field-a11y.js +0 -1
- package/dist/lib/format.d.ts +4 -8
- package/dist/lib/hooks.d.ts +6 -12
- package/dist/lib/permission-grid.d.ts +3 -18
- package/dist/lib/query-error.d.ts +3 -3
- package/dist/props/components/app.prop.d.ts +15 -38
- package/dist/props/components/charts.prop.d.ts +2 -3
- package/dist/props/components/data-display.prop.d.ts +48 -72
- package/dist/props/components/data-entry.prop.d.ts +35 -40
- package/dist/props/components/form.prop.d.ts +2 -6
- package/dist/props/components/general.prop.d.ts +11 -27
- package/dist/props/components/layout.prop.d.ts +89 -260
- package/dist/props/components/navigation.prop.d.ts +27 -42
- package/dist/props/registry.d.ts +31 -0
- package/dist/props/registry.js +33 -0
- package/dist/props/vocabulary/data.prop.d.ts +18 -49
- package/dist/props/vocabulary/index.d.ts +1 -1
- package/dist/props/vocabulary/interaction.prop.d.ts +10 -12
- package/dist/props/vocabulary/layout.prop.d.ts +8 -30
- package/dist/props/vocabulary/shared.prop.d.ts +3 -2
- package/dist/styles/alert-layout.css +1 -32
- package/dist/styles/badge-layout.css +4 -18
- package/dist/styles/base.css +14 -113
- package/dist/styles/card-layout.css +6 -128
- package/dist/styles/chart-layout.css +2 -17
- package/dist/styles/control.css +380 -458
- package/dist/styles/core.css +21 -0
- package/dist/styles/data-display-layout.css +175 -94
- package/dist/styles/data-entry-layout.css +0 -45
- package/dist/styles/density.css +1 -30
- package/dist/styles/dialog-layout.css +5 -69
- package/dist/styles/focus-ring.css +13 -87
- package/dist/styles/fonts.css +1 -31
- package/dist/styles/form-layout.css +7 -91
- package/dist/styles/index.css +2 -20
- package/dist/styles/layout.css +38 -456
- package/dist/styles/logo-layout.css +1 -35
- package/dist/styles/motion.css +3 -42
- package/dist/styles/navigation-layout.css +3 -50
- package/dist/styles/shell-layout.css +37 -403
- package/dist/styles/table-layout.css +16 -274
- package/dist/styles/text-layout.css +7 -21
- package/dist/styles/toggle.css +1 -23
- package/dist/theme/dxs.canonical.css +1 -55
- package/dist/theme/example.service.css +1 -26
- package/dist/theme/famgia.service.css +5 -15
- package/dist/tokens/axes.css +3 -40
- package/dist/tokens/base.css +1 -4
- package/dist/tokens/components/activity.css +6 -42
- package/dist/tokens/components/badge.css +4 -13
- package/dist/tokens/components/banner.css +4 -9
- package/dist/tokens/components/card.css +32 -88
- package/dist/tokens/components/chart.css +9 -26
- package/dist/tokens/components/control.css +37 -222
- package/dist/tokens/components/data-display.css +28 -79
- package/dist/tokens/components/data-entry.css +5 -19
- package/dist/tokens/components/descriptions.css +7 -27
- package/dist/tokens/components/email.css +38 -84
- package/dist/tokens/components/error-surface.css +2 -18
- package/dist/tokens/components/feedback.css +27 -124
- package/dist/tokens/components/form.css +13 -45
- package/dist/tokens/components/legal-document.css +16 -41
- package/dist/tokens/components/list-row.css +11 -36
- package/dist/tokens/components/logo.css +2 -57
- package/dist/tokens/components/navigation.css +16 -94
- package/dist/tokens/components/scroll-area.css +2 -18
- package/dist/tokens/components/separator.css +8 -30
- package/dist/tokens/components/sheet.css +3 -14
- package/dist/tokens/components/shell.css +53 -307
- package/dist/tokens/components/sidebar.css +5 -22
- package/dist/tokens/components/table.css +19 -140
- package/dist/tokens/components/toggle.css +3 -65
- package/dist/tokens/components/upload.css +7 -43
- package/dist/tokens/foundation.css +108 -383
- package/dist/tokens/semantic/layout.css +33 -207
- package/docs/CANONICAL-CONTRACTS.md +206 -0
- package/docs/COMPONENTS.md +157 -0
- package/docs/COMPOSITION-VS-COMPONENT.md +105 -0
- package/docs/CONSUMER-RULES.md +14 -0
- package/docs/CUSTOMER-THEMING.md +162 -0
- package/docs/DATETIME.md +69 -0
- package/docs/DEVELOPMENT.md +173 -0
- package/docs/FORMS.md +143 -0
- package/docs/FRAME-A11Y-CI.md +267 -0
- package/docs/FRAME-COVERAGE-LEDGER.md +123 -0
- package/docs/FRAME-COVERAGE-REPORT.md +140 -0
- package/docs/FRAME-COVERAGE-STANDARD.md +65 -0
- package/docs/FRAME-COVERAGE.md +29 -0
- package/docs/PROPS-REGISTRY.md +61 -0
- package/docs/PROPS-VOCABULARY.md +100 -0
- package/docs/README.md +60 -0
- package/docs/REGISTRY.md +70 -0
- package/docs/SPACING.md +56 -0
- package/docs/STANDARDS-vocabulary-tokens.md +48 -0
- package/docs/TESTING.md +98 -0
- package/docs/TOKENS.md +347 -0
- package/docs/asset-modules.d.ts +46 -0
- package/docs/assets/cover-terrain.svg +6 -0
- package/docs/assets/portrait-amber.svg +5 -0
- package/docs/assets/portrait-clay.svg +5 -0
- package/docs/assets/portrait-indigo.svg +5 -0
- package/docs/assets/portrait-iris.svg +5 -0
- package/docs/assets/portrait-moss.svg +5 -0
- package/docs/assets/portrait-plum.svg +5 -0
- package/docs/assets/portrait-slate.svg +5 -0
- package/docs/charts/compact-bar-trend.tsx +328 -0
- package/docs/charts/size-tiers.tsx +192 -0
- package/docs/data-display/accordion.tsx +99 -0
- package/docs/data-display/avatar.tsx +355 -0
- package/docs/data-display/badge.tsx +247 -0
- package/docs/data-display/card/examples/detail-panel.tsx +106 -0
- package/docs/data-display/card/index.md +3 -0
- package/docs/data-display/card/index.tsx +285 -0
- package/docs/data-display/carousel.tsx +156 -0
- package/docs/data-display/charts.tsx +198 -0
- package/docs/data-display/code-block.tsx +90 -0
- package/docs/data-display/collapsible.tsx +162 -0
- package/docs/data-display/credential-reveal.tsx +145 -0
- package/docs/data-display/data-table/examples/approval-queue.tsx +212 -0
- package/docs/data-display/data-table/examples/grid-features.tsx +158 -0
- package/docs/data-display/data-table/examples/list-page.tsx +175 -0
- package/docs/data-display/data-table/index.md +5 -0
- package/docs/data-display/data-table/index.tsx +295 -0
- package/docs/data-display/descriptions.tsx +143 -0
- package/docs/data-display/empty-state.tsx +164 -0
- package/docs/data-display/hover-card.tsx +181 -0
- package/docs/data-display/list-row.tsx +420 -0
- package/docs/data-display/permission-matrix.tsx +184 -0
- package/docs/data-display/popover-touch.tsx +27 -0
- package/docs/data-display/popover.tsx +245 -0
- package/docs/data-display/progress.tsx +84 -0
- package/docs/data-display/prose.tsx +105 -0
- package/docs/data-display/qr-code.tsx +68 -0
- package/docs/data-display/scroll-area.tsx +271 -0
- package/docs/data-display/service-launcher-card.tsx +145 -0
- package/docs/data-display/stat-card.tsx +99 -0
- package/docs/data-display/table.tsx +251 -0
- package/docs/data-display/timeline.tsx +112 -0
- package/docs/data-display/touch-actions.tsx +36 -0
- package/docs/data-display/tree-list.tsx +107 -0
- package/docs/data-entry/branch-scope-picker.tsx +123 -0
- package/docs/data-entry/calendar.tsx +180 -0
- package/docs/data-entry/cascader.tsx +378 -0
- package/docs/data-entry/checkbox.tsx +256 -0
- package/docs/data-entry/color-picker.tsx +117 -0
- package/docs/data-entry/command-palette.tsx +179 -0
- package/docs/data-entry/command.tsx +262 -0
- package/docs/data-entry/country-picker-recipe.tsx +170 -0
- package/docs/data-entry/date-picker.tsx +191 -0
- package/docs/data-entry/date-range-picker.tsx +149 -0
- package/docs/data-entry/form/examples/employee-settings.tsx +267 -0
- package/docs/data-entry/form/examples/invoice-form.tsx +387 -0
- package/docs/data-entry/form-field/examples/a11y-contract.tsx +240 -0
- package/docs/data-entry/form-field/examples/create-form.tsx +105 -0
- package/docs/data-entry/form-field/index.md +8 -0
- package/docs/data-entry/form-field/index.tsx +326 -0
- package/docs/data-entry/form-inertia.tsx +80 -0
- package/docs/data-entry/form-root.tsx +102 -0
- package/docs/data-entry/form.tsx +724 -0
- package/docs/data-entry/input-otp.tsx +231 -0
- package/docs/data-entry/input.tsx +114 -0
- package/docs/data-entry/label.tsx +100 -0
- package/docs/data-entry/month-picker.tsx +101 -0
- package/docs/data-entry/month-range-picker.tsx +115 -0
- package/docs/data-entry/number-input.tsx +240 -0
- package/docs/data-entry/password-input.tsx +106 -0
- package/docs/data-entry/password-strength.tsx +97 -0
- package/docs/data-entry/radio-group.tsx +95 -0
- package/docs/data-entry/rating.tsx +87 -0
- package/docs/data-entry/search-input.tsx +120 -0
- package/docs/data-entry/select-async-contracts.tsx +108 -0
- package/docs/data-entry/select-matrix.tsx +204 -0
- package/docs/data-entry/select.tsx +369 -0
- package/docs/data-entry/slider.tsx +130 -0
- package/docs/data-entry/switch.tsx +67 -0
- package/docs/data-entry/tag-input.tsx +108 -0
- package/docs/data-entry/textarea.tsx +209 -0
- package/docs/data-entry/time-picker.tsx +99 -0
- package/docs/data-entry/toggle-count.tsx +293 -0
- package/docs/data-entry/toggle-group.tsx +225 -0
- package/docs/data-entry/toggle.tsx +127 -0
- package/docs/data-entry/transfer.tsx +97 -0
- package/docs/data-entry/tree-select.tsx +204 -0
- package/docs/data-entry/upload.tsx +184 -0
- package/docs/feedback/alert-dialog.tsx +270 -0
- package/docs/feedback/alert.tsx +248 -0
- package/docs/feedback/banner.tsx +183 -0
- package/docs/feedback/danger-confirm.tsx +88 -0
- package/docs/feedback/dialog-touch.tsx +24 -0
- package/docs/feedback/dialog.tsx +193 -0
- package/docs/feedback/sheet.tsx +410 -0
- package/docs/feedback/skeleton.tsx +111 -0
- package/docs/feedback/toast.tsx +135 -0
- package/docs/feedback/tooltip.tsx +171 -0
- package/docs/feedback/two-factor-setup.tsx +68 -0
- package/docs/foundation/_email-specimen.ts +274 -0
- package/docs/foundation/colors.tsx +202 -0
- package/docs/foundation/density.tsx +232 -0
- package/docs/foundation/email-tokens.tsx +306 -0
- package/docs/foundation/radius-shadow.tsx +152 -0
- package/docs/foundation/spacing.tsx +211 -0
- package/docs/foundation/typography.tsx +147 -0
- package/docs/general/activity.tsx +224 -0
- package/docs/general/button/examples/destructive-confirm.tsx +90 -0
- package/docs/general/button/examples/form-actions.tsx +85 -0
- package/docs/general/button/examples/toolbar.tsx +160 -0
- package/docs/general/button/index.md +12 -0
- package/docs/general/button/index.tsx +211 -0
- package/docs/general/logo.tsx +131 -0
- package/docs/general/reveal.tsx +41 -0
- package/docs/general/typography.tsx +152 -0
- package/docs/layout/account-chip.tsx +72 -0
- package/docs/layout/admin-collection.tsx +122 -0
- package/docs/layout/app-shell.tsx +374 -0
- package/docs/layout/aspect-ratio.tsx +119 -0
- package/docs/layout/auth-account-summary.tsx +103 -0
- package/docs/layout/auth-divider.tsx +28 -0
- package/docs/layout/auth-footer.tsx +37 -0
- package/docs/layout/auth-identity.tsx +36 -0
- package/docs/layout/auth-recovery/examples/mfa-challenge.md +41 -0
- package/docs/layout/auth-recovery/examples/mfa-challenge.tsx +254 -0
- package/docs/layout/auth-recovery/examples/mobile-390.md +25 -0
- package/docs/layout/auth-recovery/examples/mobile-390.tsx +82 -0
- package/docs/layout/auth-recovery/examples/password-recovery.md +24 -0
- package/docs/layout/auth-recovery/examples/password-recovery.tsx +197 -0
- package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.md +27 -0
- package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.tsx +156 -0
- package/docs/layout/auth-recovery/index.md +140 -0
- package/docs/layout/auth-recovery/index.tsx +96 -0
- package/docs/layout/auth-shell-context.tsx +103 -0
- package/docs/layout/auth-shell-device.tsx +112 -0
- package/docs/layout/auth-shell-registration.tsx +335 -0
- package/docs/layout/auth-shell-variants.tsx +139 -0
- package/docs/layout/auth-shell.tsx +59 -0
- package/docs/layout/auth-stack.tsx +40 -0
- package/docs/layout/centered-shell.tsx +102 -0
- package/docs/layout/error-surface/examples/application-403.tsx +84 -0
- package/docs/layout/error-surface/examples/application-404.tsx +77 -0
- package/docs/layout/error-surface/examples/system-500.tsx +47 -0
- package/docs/layout/error-surface/examples/system-503.tsx +48 -0
- package/docs/layout/error-surface/index.md +153 -0
- package/docs/layout/error-surface/index.tsx +239 -0
- package/docs/layout/flex.tsx +262 -0
- package/docs/layout/legal-document-shell/_data.ts +110 -0
- package/docs/layout/legal-document-shell/examples/desktop-1440.md +12 -0
- package/docs/layout/legal-document-shell/examples/desktop-1440.tsx +83 -0
- package/docs/layout/legal-document-shell/examples/mobile-390.md +22 -0
- package/docs/layout/legal-document-shell/examples/mobile-390.tsx +70 -0
- package/docs/layout/legal-document-shell/examples/tablet-1024.md +3 -0
- package/docs/layout/legal-document-shell/examples/tablet-1024.tsx +84 -0
- package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.md +18 -0
- package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.tsx +61 -0
- package/docs/layout/legal-document-shell/index.md +51 -0
- package/docs/layout/legal-document-shell/index.tsx +101 -0
- package/docs/layout/master-detail.tsx +387 -0
- package/docs/layout/org-switcher.tsx +131 -0
- package/docs/layout/page-container.tsx +946 -0
- package/docs/layout/resizable-panel.tsx +419 -0
- package/docs/layout/responsive-grid.tsx +235 -0
- package/docs/layout/separator.tsx +327 -0
- package/docs/layout/service-role-panel.tsx +144 -0
- package/docs/layout/sidebar.tsx +586 -0
- package/docs/layout/split-pane.tsx +451 -0
- package/docs/layout/topbar.tsx +347 -0
- package/docs/navigation/app-setting-picker.tsx +141 -0
- package/docs/navigation/breadcrumb.tsx +128 -0
- package/docs/navigation/context-menu.tsx +117 -0
- package/docs/navigation/dropdown-menu.tsx +213 -0
- package/docs/navigation/filter-bar.tsx +227 -0
- package/docs/navigation/menubar.tsx +141 -0
- package/docs/navigation/navigation-menu.tsx +165 -0
- package/docs/navigation/pagination.tsx +241 -0
- package/docs/navigation/steps.tsx +263 -0
- package/docs/navigation/tabs-rtl.tsx +28 -0
- package/docs/navigation/tabs.tsx +308 -0
- package/docs/navigation/toolbar.tsx +339 -0
- package/docs/providers/app-provider.tsx +191 -0
- package/docs/providers/format-date.tsx +230 -0
- package/docs/query/button-refetch.tsx +160 -0
- package/docs/query/data-state.tsx +192 -0
- package/docs/query/infinite-query-state.tsx +93 -0
- package/docs/query/mutation-feedback.tsx +70 -0
- package/docs/query/prefetch-link.tsx +262 -0
- package/docs/query/touch-actions.tsx +68 -0
- package/docs/showcase/acme-portal.tsx +441 -0
- package/docs/showcase/acme-website.tsx +455 -0
- package/docs/showcase/case1-warehouse-dashboard.tsx +343 -0
- package/docs/showcase/case2-employee-me.tsx +441 -0
- package/docs/showcase/case3-approval-workflow.tsx +527 -0
- package/docs/showcase/case4-login.tsx +307 -0
- package/docs/showcase/case5-shift-calendar.tsx +795 -0
- package/docs/showcase/case6-agency-handy.tsx +1072 -0
- package/docs/showcase/futurelastic-web.tsx +390 -0
- package/docs/showcase/org-switcher.tsx +313 -0
- package/docs/showcase/permission-matrix.tsx +343 -0
- package/docs/showcase/public-landing.tsx +210 -0
- package/docs/showcase/settings-account-sections.tsx +559 -0
- package/docs/showcase/settings-security-mfa.tsx +145 -0
- package/docs/showcase/table-approval-queue.tsx +199 -0
- package/docs/showcase/table-bulk-actions.tsx +460 -0
- package/docs/showcase/table-compact-kintone.tsx +438 -0
- package/docs/showcase/table-conditional-format.tsx +367 -0
- package/docs/showcase/table-crud-list.tsx +544 -0
- package/docs/showcase/table-density.tsx +340 -0
- package/docs/showcase/table-expandable-rows.tsx +471 -0
- package/docs/showcase/table-filter-chips.tsx +461 -0
- package/docs/showcase/table-footer-totals.tsx +311 -0
- package/docs/showcase/table-grouped-subtotals.tsx +388 -0
- package/docs/showcase/table-master-detail.tsx +479 -0
- package/docs/showcase/table-pagination.tsx +320 -0
- package/docs/showcase/table-states.tsx +363 -0
- package/docs/showcase/table-sticky-columns.tsx +373 -0
- package/docs/showcase/table-tree-rows.tsx +444 -0
- package/docs/showcase/table-view-tabs.tsx +488 -0
- package/package.json +9 -11
- package/scripts/_agent-setup.mjs +16 -2
- package/scripts/audit-hook.mjs +3 -13
- package/scripts/init-agent-kit.mjs +1 -14
- package/scripts/postinstall.mjs +12 -12
- package/scripts/ui-audit.mjs +93 -31
- package/scripts/visual-audit-rules.mjs +51 -7
- package/scripts/visual-audit.mjs +118 -47
package/README.md
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# @godxjp/ui
|
|
2
2
|
|
|
3
|
-
The shared React UI framework for every godx surface (admin, agency portal,
|
|
4
|
-
handheld). Built on shadcn + Radix UI + Tailwind CSS v4. **~98 components**, fully catalogued.
|
|
3
|
+
The shared React UI framework for every godx surface (admin, agency portal, handheld).
|
|
5
4
|
|
|
6
5
|
- 📦 **npm:** `@godxjp/ui` (published) · MCP server `@godxjp/ui-mcp`
|
|
7
6
|
- 🌐 **Live preview / catalog:** **https://godx-jp.github.io/godxjp-ui/** (components · tokens · props)
|
|
@@ -15,23 +14,9 @@ npm i @godxjp/ui
|
|
|
15
14
|
|
|
16
15
|
## Role & boundary — read this first
|
|
17
16
|
|
|
18
|
-
This package is **the single source of UI truth**. It is shared, versioned
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
- **Editing it requires explicit session permission** (the hard gate — see
|
|
22
|
-
[DEVELOPMENT.md](./docs/DEVELOPMENT.md#0-what-this-package-is--and-the-boundary-it-must-keep)).
|
|
23
|
-
By default the package is off-limits; consumers _compose_ its primitives, they
|
|
24
|
-
don't fork them.
|
|
25
|
-
- **It is generic and presentational only.** No app i18n (`useTranslation`), no
|
|
26
|
-
Inertia (`router`/`<Form>`), no Wayfinder routes, no business entities or domain
|
|
27
|
-
logic, no product copy, no raw colors. Those are **consumer-layer** concerns — they
|
|
28
|
-
must never leak into this package. The framework ships **its own theme**, so a
|
|
29
|
-
consumer imports the styles and needs **zero** extra theme configuration.
|
|
30
|
-
- **The root export is runtime-neutral.** Importing `@godxjp/ui` (or its primitive
|
|
31
|
-
subpaths) forces **no** foreign runtime — React Router, TanStack Query, react-hook-form
|
|
32
|
-
and the i18n singleton live ONLY on their adapter subpaths (`./form`, `./query`, `./app`).
|
|
33
|
-
A CI guard (`pnpm check:core-isolation`) traces the root dist graph and fails the build if
|
|
34
|
-
an adapter ever leaks into the root barrel.
|
|
17
|
+
This package is **the single source of UI truth**. It is shared, versioned infrastructure, which means two things are non-negotiable:
|
|
18
|
+
|
|
19
|
+
- **Editing it requires explicit session permission** (the hard gate — see [DEVELOPMENT.md](./docs/DEVELOPMENT.md#0-what-this-package-is--and-the-boundary-it-must-keep)). By default the package is off-limits; consumers _compose_ its primitives, they don't fork them. - **It is generic and presentational only.** No app i18n (`useTranslation`), no Inertia (`router`/`<Form>`), no Wayfinder routes, no business entities or domain logic, no product copy, no raw colors. Those are **consumer-layer** concerns — they must never leak into this package.
|
|
35
20
|
|
|
36
21
|
> Deciding whether a component belongs here vs. app-level? Use the
|
|
37
22
|
> **`godx-ui-component-placement`** skill.
|
|
@@ -56,10 +41,7 @@ examples/ *.preview.tsx — Storybook-style stories (rendered by the prev
|
|
|
56
41
|
preview/ The preview app (vite, :6008) → also deployed to GitHub Pages
|
|
57
42
|
```
|
|
58
43
|
|
|
59
|
-
A value is defined **once** as a CSS var (`--primary`), mapped to a utility in the
|
|
60
|
-
`@theme` block (`--color-primary: hsl(var(--primary))`), and consumed as `bg-primary`.
|
|
61
|
-
Components emit `data-slot` / `data-*`; the look lives in `styles/*-layout.css`. See
|
|
62
|
-
[DEVELOPMENT.md §1](./docs/DEVELOPMENT.md#1-architecture--the-layers-bottom-up).
|
|
44
|
+
A value is defined **once** as a CSS var (`--primary`), mapped to a utility in the `@theme` block (`--color-primary: hsl(var(--primary))`), and consumed as `bg-primary`. Components emit `data-slot` / `data-*`; the look lives in `styles/*-layout.css`. See [DEVELOPMENT.md §1](./docs/DEVELOPMENT.md#1-architecture--the-layers-bottom-up).
|
|
63
45
|
|
|
64
46
|
---
|
|
65
47
|
|
|
@@ -81,21 +63,16 @@ Components emit `data-slot` / `data-*`; the look lives in `styles/*-layout.css`.
|
|
|
81
63
|
| **shadcn paths** | `@godxjp/ui/ui` | Thin re-exports for shadcn-style imports (tree-shakeable) |
|
|
82
64
|
| **Admin (legacy)** | `@godxjp/ui/admin` | Compound admin exports |
|
|
83
65
|
|
|
84
|
-
> **Renamed / removed** — use the new names; the old aliases were **removed in v11** (they are no
|
|
85
|
-
> longer exported at runtime). See the [migration table](#migrating-6--11) below.
|
|
86
|
-
|
|
87
66
|
---
|
|
88
67
|
|
|
89
68
|
## Migrating 6 → 11
|
|
90
69
|
|
|
91
|
-
|
|
92
|
-
at runtime, and their leftover `*Prop` types and README references have now been removed too (issue
|
|
93
|
-
#99). Replace these at the call site:
|
|
70
|
+
Replace these at the call site:
|
|
94
71
|
|
|
95
72
|
| Removed / renamed (≤ v8) | Replacement (v11) |
|
|
96
73
|
| ----------------------------------------- | --------------------------------------------------- |
|
|
97
|
-
| `Stack` | `Flex direction="col"`
|
|
98
|
-
| `Inline` | `Flex direction="row"`
|
|
74
|
+
| `Stack` | `Flex direction="col"` |
|
|
75
|
+
| `Inline` | `Flex` (default `direction="row"`) |
|
|
99
76
|
| `Autocomplete` | `Select` with `showSearch` + `options` |
|
|
100
77
|
| `CountrySelect` | `AppSettingPicker kind="country"` |
|
|
101
78
|
| `LocalePicker` | `AppSettingPicker kind="language"` |
|
|
@@ -110,103 +87,38 @@ at runtime, and their leftover `*Prop` types and README references have now been
|
|
|
110
87
|
| `StatusBadge` | `Badge` (`status` / `tone`) |
|
|
111
88
|
| `DialogConfirm` / `Dialog mode="confirm"` | `AlertDialog` |
|
|
112
89
|
|
|
113
|
-
The full data-grid feature set (sort / search / column visibility / paging) is now
|
|
114
|
-
built into the one `DataTable` (`@godxjp/ui/data-display`) — TanStack-powered, with
|
|
115
|
-
the lean `data` + `columns` API for the common case and the compound parts
|
|
116
|
-
(`DataTable.Search` / `.ViewOptions` / `.Pagination` …) for the rich chrome. The
|
|
117
|
-
separate `@godxjp/ui/data-grid` (`DataGrid`) subpath has been merged in and removed.
|
|
90
|
+
The full data-grid feature set (sort / search / column visibility / paging) is now built into the one `DataTable` (`@godxjp/ui/data-display`) — TanStack-powered, with the lean `data` + `columns` API for the common case and the compound parts (`DataTable.Search` / `.ViewOptions` / `.Pagination` …) for the rich chrome. The separate `@godxjp/ui/data-grid` (`DataGrid`) subpath has been merged in and removed.
|
|
118
91
|
|
|
119
92
|
---
|
|
120
93
|
|
|
121
94
|
## Consumer setup — theme is self-contained
|
|
122
95
|
|
|
123
|
-
The framework ships colors, the type scale, the wa-iro palette, and (opt-in)
|
|
124
|
-
bundled fonts (M PLUS 2 + Noto Sans JP fallback via `@fontsource`). A consumer's entire
|
|
125
|
-
styling surface is **one import + content sources** — no `:root` overrides, no
|
|
126
|
-
font `<link>`:
|
|
96
|
+
The framework ships colors, the type scale, the wa-iro palette, and (opt-in) bundled fonts (M PLUS 2 + Noto Sans JP fallback via `@fontsource`). A consumer's entire styling surface is **one import + content sources** — no `:root` overrides, no font `<link>`:
|
|
127
97
|
|
|
128
98
|
```css
|
|
129
99
|
/* resources/css/app.css */
|
|
130
100
|
@import "@godxjp/ui/styles";
|
|
131
|
-
@source
|
|
132
|
-
@source
|
|
101
|
+
@source "../js/**/*.{ts,tsx}";
|
|
102
|
+
@source "../views";
|
|
133
103
|
```
|
|
134
104
|
|
|
135
105
|
### Slim build — ship only the CSS you use
|
|
136
106
|
|
|
137
|
-
`@godxjp/ui/styles` is the zero-config all-in-one (every component's CSS +
|
|
138
|
-
bundled fonts). To ship only what you render, import the foundation plus the
|
|
139
|
-
per-layer files you need (mirrors the JS subpaths — the CSS tree-shakes too):
|
|
140
|
-
|
|
141
|
-
```css
|
|
142
|
-
@import "@godxjp/ui/styles/base"; /* required: tokens + tailwind + base layer */
|
|
143
|
-
@import "@godxjp/ui/styles/control"; /* Button, Input, Select, Textarea, toggles */
|
|
144
|
-
@import "@godxjp/ui/styles/form-layout"; /* FormField */
|
|
145
|
-
@import "@godxjp/ui/styles/dialog-layout"; /* Dialog */
|
|
146
|
-
/* …only the layers you use. Layer files need `base` first (they use @layer/@apply). */
|
|
147
|
-
@import "@godxjp/ui/styles/fonts"; /* optional bundled faces — MUST come after `base` */
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
Skip `@godxjp/ui/styles/fonts` when you manage fonts yourself (next/font, etc.)
|
|
151
|
-
and set the font tokens instead (see below). A marketing site using ~10
|
|
152
|
-
components typically drops component CSS from ~142K → ~26K gzip.
|
|
153
|
-
|
|
154
|
-
> **Import order rule — `fonts` after `base`.** `styles/base` pulls in the token
|
|
155
|
-
> layers, whose font-agnostic `:root { --font-sans-base: <system stack> }` sits at
|
|
156
|
-
> the same specificity (0,1,0) as the bundle's fill, so the later import wins.
|
|
157
|
-
> Import `styles/fonts` first and the bundled faces silently never apply while the
|
|
158
|
-
> ~800 KB of `@font-face` still ships. The all-in-one `@godxjp/ui/styles` entry
|
|
159
|
-
> already orders this correctly.
|
|
160
|
-
|
|
161
|
-
### Fonts — token-driven, per-language, no library hardcoding
|
|
162
|
-
|
|
163
|
-
The base ships NO hardcoded brand face. Supply your own faces and set tokens —
|
|
164
|
-
one face everywhere, or per-language (no `[lang]` selectors to write):
|
|
107
|
+
`@godxjp/ui/styles` is the zero-config all-in-one (every component's CSS + bundled fonts). Managing fonts yourself (next/font, a system stack, an extension that must not ship font files)? Load the same layers without the faces:
|
|
165
108
|
|
|
166
109
|
```css
|
|
167
|
-
|
|
168
|
-
--font-sans-base: var(--my-latin), system-ui, sans-serif; /* default face */
|
|
169
|
-
--font-sans-ja: "Noto Sans JP", var(--font-sans-base); /* lang="ja" */
|
|
170
|
-
--font-sans-vi: "Montserrat", var(--font-sans-base); /* lang="vi" */
|
|
171
|
-
/* also: --font-sans-ko, --font-sans-zh-hans, --font-sans-zh-hant */
|
|
172
|
-
}
|
|
110
|
+
@import "@godxjp/ui/styles/core"; /* every component layer, no @font-face */
|
|
173
111
|
```
|
|
174
112
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
> **The bundled faces changed in v18.** v16 bundled Noto Sans JP + Montserrat;
|
|
181
|
-
> v18 bundles M PLUS 2 (primary, incl. Vietnamese coverage) + Noto Sans JP (CJK
|
|
182
|
-
> fallback). If your design spec named the v16 faces, set the tokens yourself
|
|
183
|
-
> instead of relying on the bundle.
|
|
184
|
-
|
|
185
|
-
```tsx
|
|
186
|
-
import { AppProvider } from "@godxjp/ui/app"; // locale, tz, date/time format
|
|
187
|
-
import { PageContainer } from "@godxjp/ui/layout"; // every page wraps in this
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
### Mandatory consumer rules
|
|
191
|
-
|
|
192
|
-
1. **Every page** uses `<PageContainer title subtitle extra footer>`.
|
|
193
|
-
2. **Mobile-first** — verify at 320–390px in preview / browser.
|
|
194
|
-
3. **Spacing via `Flex` `gap` + `ResponsiveGrid`** — no Tailwind `p-*` /
|
|
195
|
-
`gap-*` / `space-x|y-*` for app layout (see `docs/SPACING.md`).
|
|
196
|
-
4. **Semantic tokens only** — no raw colors / hex / `dark:` overrides.
|
|
197
|
-
5. **Dates** display via `formatDate` from `@godxjp/ui/datetime`.
|
|
198
|
-
6. **`AppProvider`** wraps the app for locale / timezone / date-time format.
|
|
199
|
-
7. **Audit** — `npm run ui:audit` must report 0 errors for touched files.
|
|
200
|
-
|
|
201
|
-
Full app-developer rules: [ui-standardization.md](../../.claude/skills/frontend-design/rules/ui-standardization.md).
|
|
202
|
-
|
|
203
|
-
---
|
|
113
|
+
> **Do not cherry-pick `*-layout.css` files.** Layers depend on each other (a
|
|
114
|
+
> Select's rows, a menu's surface, a form's rhythm live in shared rules) and a
|
|
115
|
+
> missing layer fails silently: menus render with no background, rows with no
|
|
116
|
+
> height. `styles` and `styles/core` are the two supported entries; the runtime
|
|
117
|
+
> `visual-audit` flags a page whose layers are incomplete (`css-layers-missing`).
|
|
204
118
|
|
|
205
119
|
## Golden ratio (φ ≈ 1.618)
|
|
206
120
|
|
|
207
|
-
One token `--phi-unit` drives page/section/card spacing; micro control gaps use the
|
|
208
|
-
4px grid. Density (`compact` | `default` | `comfortable`) retunes `--phi-unit` with
|
|
209
|
-
control + table heights together.
|
|
121
|
+
One token `--phi-unit` drives page/section/card spacing; micro control gaps use the 4px grid. Density (`compact` | `default` | `comfortable`) retunes `--phi-unit` with control + table heights together.
|
|
210
122
|
|
|
211
123
|
| App API | φ level |
|
|
212
124
|
| --------------------------------- | ------------------- |
|
|
@@ -238,10 +150,7 @@ pnpm release --ui <patch|minor|major> --mcp <…|skip> # publish lib + MCP in
|
|
|
238
150
|
|
|
239
151
|
### Runtime visual audit (Playwright + axe-core)
|
|
240
152
|
|
|
241
|
-
`scripts/visual-audit.mjs` drives a **real browser** over a running app and runs axe-core plus
|
|
242
|
-
computed-style heuristics (target size, OKLCH accent chroma, rendered emoji, mis-laid-out alerts) —
|
|
243
|
-
catching what the static `pnpm audit` (source regexes) can't see. Playwright + `@axe-core/playwright`
|
|
244
|
-
are **optional peers**, installed only by apps that run the audit.
|
|
153
|
+
`scripts/visual-audit.mjs` drives a **real browser** over a running app and runs axe-core plus computed-style heuristics (target size, OKLCH accent chroma, rendered emoji, mis-laid-out alerts) — catching what the static `pnpm audit` (source regexes) can't see. Playwright + `@axe-core/playwright` are **optional peers**, installed only by apps that run the audit.
|
|
245
154
|
|
|
246
155
|
```bash
|
|
247
156
|
# from a consumer, against its running dev/preview server:
|
|
@@ -250,30 +159,18 @@ node node_modules/@godxjp/ui/scripts/visual-audit.mjs http://localhost:5173 --fo
|
|
|
250
159
|
node node_modules/@godxjp/ui/scripts/visual-audit.mjs --strict http://localhost:5173 # CI gate
|
|
251
160
|
```
|
|
252
161
|
|
|
253
|
-
**Tested peer range** (pin one of these): `playwright >=1.55 <2` (tested 1.61.1) ·
|
|
254
|
-
`@axe-core/playwright >=4.10 <5` (tested 4.12.1) · `axe-core >=4.10 <5` (tested 4.12.1). Playwright
|
|
255
|
-
1.55+ is required for the `browser.newContext()` → `context.newPage()` flow axe expects; older
|
|
256
|
-
`browser.newPage()` throws _"Please use browser.newContext()"_.
|
|
162
|
+
**Tested peer range** (pin one of these): `playwright >=1.55 <2` (tested 1.61.1) · `@axe-core/playwright >=4.10 <5` (tested 4.12.1) · `axe-core >=4.10 <5` (tested 4.12.1). Playwright 1.55+ is required for the `browser.newContext()` → `context.newPage()` flow axe expects; older `browser.newPage()` throws _"Please use browser.newContext()"_.
|
|
257
163
|
|
|
258
|
-
`--format json` **always** emits valid JSON — even on bootstrap failure — with a `status`
|
|
259
|
-
(`ok` · `partial` · `error`) that separates **infrastructure errors** (missing peers, page won't
|
|
260
|
-
load, axe won't inject → `errors[]`, `summary: null`/flagged) from **product findings** (`findings[]`).
|
|
261
|
-
A tool failure can therefore never be misread as "zero violations". `pnpm check:visual-audit` is the
|
|
262
|
-
CI smoke test: it serves a fixture page tripping all five rule families and asserts each one fires.
|
|
164
|
+
`--format json` **always** emits valid JSON — even on bootstrap failure — with a `status` (`ok` · `partial` · `error`) that separates **infrastructure errors** (missing peers, page won't load, axe won't inject → `errors[]`, `summary: null`/flagged) from **product findings** (`findings[]`). A tool failure can therefore never be misread as "zero violations". `pnpm check:visual-audit` is the CI smoke test: it serves a fixture page tripping all five rule families and asserts each one fires.
|
|
263
165
|
|
|
264
|
-
This repo ships two packages — `@godxjp/ui` (this dir) and `@godxjp/ui-mcp` (`mcp/`). They keep
|
|
265
|
-
separate version lines but release together via `pnpm release`; see DEVELOPMENT.md §6.
|
|
266
|
-
The **preview app auto-deploys to [GitHub Pages](https://godx-jp.github.io/godxjp-ui/)** on every push to `main`
|
|
267
|
-
(`.github/workflows/preview-pages.yml`) — which doubles as the CI gate for `preview:build`.
|
|
166
|
+
This repo ships two packages — `@godxjp/ui` (this dir) and `@godxjp/ui-mcp` (`mcp/`). They keep separate version lines but release together via `pnpm release`; see DEVELOPMENT.md §6. The **preview app auto-deploys to [GitHub Pages](https://godx-jp.github.io/godxjp-ui/)** on every push to `main` (`.github/workflows/preview-pages.yml`) — which doubles as the CI gate for `preview:build`.
|
|
268
167
|
|
|
269
|
-
→ **[docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)** is the contributor guideline (the
|
|
270
|
-
boundary, the layers, how to add/extend a component, verification).
|
|
168
|
+
→ **[docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md)** is the contributor guideline (the boundary, the layers, how to add/extend a component, verification).
|
|
271
169
|
|
|
272
170
|
## Docs index
|
|
273
171
|
|
|
274
172
|
- [docs/DEVELOPMENT.md](./docs/DEVELOPMENT.md) — contributor guideline (start here to edit the package)
|
|
275
173
|
- [docs/STANDARDS-vocabulary-tokens.md](./docs/STANDARDS-vocabulary-tokens.md) — the 22 vocabulary + token rules (CI-enforced)
|
|
276
|
-
- [docs/roadmap/post-7.0.0.md](./docs/roadmap/post-7.0.0.md) — shipped log (7.0→9.2) + key decisions
|
|
277
174
|
- [docs/COMPONENTS.md](./docs/COMPONENTS.md) · [docs/TOKENS.md](./docs/TOKENS.md) · [docs/SPACING.md](./docs/SPACING.md)
|
|
278
175
|
- [docs/PROPS-VOCABULARY.md](./docs/PROPS-VOCABULARY.md) · [docs/PROPS-REGISTRY.md](./docs/PROPS-REGISTRY.md)
|
|
279
176
|
- [docs/DATETIME.md](./docs/DATETIME.md) · [docs/FORMS.md](./docs/FORMS.md) · [docs/TESTING.md](./docs/TESTING.md)
|
package/dist/app/theme-axes.d.ts
CHANGED
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import type { PageDensityProp } from "../props/vocabulary/layout.prop.js";
|
|
2
2
|
/** Light / dark spine — `data-theme` (alias of the legacy `.dark` class). */
|
|
3
3
|
export type AppTheme = "light" | "dark";
|
|
4
|
-
/**
|
|
5
|
-
* Primary-palette preset — `data-brand`. `null` = keep the app's own `--primary`.
|
|
6
|
-
*
|
|
7
|
-
* `"dxs"` is the CANONICAL DXS preset: unlike the per-vertical tints it also binds the canonical
|
|
8
|
-
* hosted-identity surface contract (auth measure/density/insets + the brand-green identity mark),
|
|
9
|
-
* so every surface matches the canonical artboards with no consumer page CSS (gh#214). See
|
|
10
|
-
* `src/tokens/axes.css` for the bindings and `@godxjp/ui/theme/dxs.canonical.css` for the
|
|
11
|
-
* copy-free stylesheet entry point.
|
|
12
|
-
*/
|
|
4
|
+
/** Primary-palette preset — `data-brand`. `null` = keep the app's own `--primary`. */
|
|
13
5
|
export type AppBrand = "brand" | "crm" | "logistics" | "partner" | "slate" | "dxs";
|
|
14
6
|
/** Control / table / spacing density — `data-density` (same vocab as PageContainer). */
|
|
15
7
|
export type AppDensity = PageDensityProp;
|
|
@@ -19,9 +11,7 @@ export declare const APP_THEMES: readonly ["light", "dark"];
|
|
|
19
11
|
export declare const APP_BRANDS: readonly ["brand", "crm", "logistics", "partner", "slate", "dxs"];
|
|
20
12
|
export declare const APP_DENSITIES: readonly ["compact", "default", "comfortable"];
|
|
21
13
|
export declare const APP_FONT_SIZES: readonly ["sm", "default", "lg"];
|
|
22
|
-
/** The axes as held by AppProvider. `brand: null` opts out (app token wins).
|
|
23
|
-
* `scaling: null` defers to the density preset; a number is the continuous global
|
|
24
|
-
* size multiplier (the `--scaling` factor / Radix model) and overrides the preset. */
|
|
14
|
+
/** The axes as held by AppProvider. `brand: null` opts out (app token wins). */
|
|
25
15
|
export type AppThemeAxes = {
|
|
26
16
|
theme: AppTheme;
|
|
27
17
|
brand: AppBrand | null;
|
|
@@ -34,8 +24,7 @@ export declare const isAppBrand: (v: unknown) => v is AppBrand;
|
|
|
34
24
|
export declare const isAppDensity: (v: unknown) => v is AppDensity;
|
|
35
25
|
export declare const isAppFontSize: (v: unknown) => v is AppFontSize;
|
|
36
26
|
/**
|
|
37
|
-
* Write the axis attributes onto a root element (default `<html>`). Pass `brand: null`
|
|
38
|
-
*
|
|
39
|
-
* guard `typeof document`. Exported for non-React / imperative consumers too.
|
|
27
|
+
* Write the axis attributes onto a root element (default `<html>`). Pass `brand: null` to remove
|
|
28
|
+
* `data-brand` so the app's own `--primary` token applies.
|
|
40
29
|
*/
|
|
41
30
|
export declare function applyThemeAxes(el: HTMLElement, axes: Partial<AppThemeAxes>): void;
|
package/dist/app/timezones.d.ts
CHANGED
|
@@ -2,10 +2,7 @@ import type { AppLocale } from "./types.js";
|
|
|
2
2
|
/** Curated preset — pass to `<AppProvider timezoneOptions={APP_TIMEZONE_PRESET} />`. */
|
|
3
3
|
export declare const APP_TIMEZONE_PRESET: readonly ["UTC", "Asia/Ho_Chi_Minh", "Asia/Bangkok", "Asia/Singapore", "Asia/Jakarta", "Asia/Manila", "Asia/Kuala_Lumpur", "Asia/Yangon", "Asia/Phnom_Penh", "Asia/Vientiane", "Asia/Brunei", "Asia/Tokyo", "Asia/Seoul", "Asia/Shanghai", "Asia/Hong_Kong", "Asia/Taipei", "Asia/Ulaanbaatar", "Asia/Kolkata", "Asia/Karachi", "Asia/Dhaka", "Asia/Colombo", "Asia/Dubai", "Asia/Riyadh", "Asia/Qatar", "Asia/Tehran", "Asia/Jerusalem", "Europe/London", "Europe/Paris", "Europe/Berlin", "Europe/Amsterdam", "Europe/Rome", "Europe/Madrid", "Europe/Moscow", "Europe/Istanbul", "America/New_York", "America/Chicago", "America/Denver", "America/Los_Angeles", "America/Toronto", "America/Vancouver", "America/Mexico_City", "America/Sao_Paulo", "America/Buenos_Aires", "Australia/Sydney", "Australia/Melbourne", "Australia/Perth", "Pacific/Auckland"];
|
|
4
4
|
export type AppTimezonePreset = (typeof APP_TIMEZONE_PRESET)[number];
|
|
5
|
-
/**
|
|
6
|
-
* Preferred IANA ids not returned by all runtimes (e.g. Node lists `Asia/Saigon` only).
|
|
7
|
-
* Keys are app-facing ids; values are Intl-canonical ids for offset lookup.
|
|
8
|
-
*/
|
|
5
|
+
/** Preferred IANA ids not returned by all runtimes (e.g. Node lists `Asia/Saigon` only). */
|
|
9
6
|
export declare const TIMEZONE_ALIASES: Record<string, string>;
|
|
10
7
|
/** Map app id → Intl id for `DateTimeFormat` / validation. */
|
|
11
8
|
export declare function resolveTimezoneForIntl(timezone: string): string;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { AreaChartProp } from "../../props/components/charts.prop.js";
|
|
2
2
|
export type { AreaChartProp, AreaChartProp as AreaChartProps, } from "../../props/components/charts.prop.js";
|
|
3
3
|
/**
|
|
4
|
-
* Area chart — magnitude over an ordered category axis. `stacked` accumulates
|
|
5
|
-
*
|
|
6
|
-
* `@godxjp/ui/charts` entry; requires the `recharts` optional peer.
|
|
4
|
+
* Area chart — magnitude over an ordered category axis. `stacked` accumulates series; `curved`
|
|
5
|
+
* smooths the line.
|
|
7
6
|
*/
|
|
8
7
|
export declare function AreaChart(props: AreaChartProp): import("react").JSX.Element;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { BarChartProp } from "../../props/components/charts.prop.js";
|
|
2
2
|
export type { BarChartProp, BarChartProp as BarChartProps, } from "../../props/components/charts.prop.js";
|
|
3
3
|
/**
|
|
4
|
-
* Bar chart — compare a value across categories. `stacked` stacks series into one
|
|
5
|
-
*
|
|
6
|
-
* tree-shaken `@godxjp/ui/charts` entry; requires the `recharts` optional peer.
|
|
4
|
+
* Bar chart — compare a value across categories. `stacked` stacks series into one bar;
|
|
5
|
+
* `horizontal` puts the category axis on the left.
|
|
7
6
|
*/
|
|
8
7
|
export declare function BarChart(props: BarChartProp): import("react").JSX.Element;
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
/**
|
|
3
|
-
* Shared chart chrome — owns the cross-cutting concerns every chart needs so the
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* - tokens: the `--chart-1..6` palette + size→height tiers.
|
|
10
|
-
*
|
|
11
|
-
* Internal — NOT a public catalog primitive (re-exported only through the chart
|
|
12
|
-
* wrappers). See check-mcp-orphans ALLOWLIST.
|
|
3
|
+
* Shared chart chrome — owns the cross-cutting concerns every chart needs so the individual chart
|
|
4
|
+
* wrappers stay tiny: - a11y: a `<figure>` with a visible `<figcaption>` title and a screen-reader
|
|
5
|
+
* text alternative (WCAG 1.1.1) describing the plotted data, with the SVG itself marked
|
|
6
|
+
* `role="img"` so AT announces one labelled graphic. - i18n: a locale-aware `Intl.NumberFormat`
|
|
7
|
+
* shared by axis ticks + tooltips. - tokens: the `--chart-1..6` palette + size→height tiers.
|
|
8
|
+
* Internal — NOT a public catalog primitive (re-exported only through the chart wrappers).
|
|
13
9
|
*/
|
|
14
10
|
/** Canonical decorative chart palette (foundation tokens). */
|
|
15
11
|
export declare const CHART_COLORS: readonly ["var(--chart-1)", "var(--chart-2)", "var(--chart-3)", "var(--chart-4)", "var(--chart-5)", "var(--chart-6)"];
|
|
@@ -30,12 +26,7 @@ type ChartFrameProps = {
|
|
|
30
26
|
imgSummary: string;
|
|
31
27
|
/** True when there is data to plot (otherwise children render an empty state). */
|
|
32
28
|
hasData: boolean;
|
|
33
|
-
/**
|
|
34
|
-
* Canvas height in px. OPTIONAL: recharts needs a measured pixel box, but a
|
|
35
|
-
* CSS-drawn chart leaves it undefined and sizes its plot from a token tier
|
|
36
|
-
* instead (`size` → `data-size` → `--*-plot-height`), so no geometry is baked
|
|
37
|
-
* into an inline style.
|
|
38
|
-
*/
|
|
29
|
+
/** Canvas height in px. */
|
|
39
30
|
height?: number;
|
|
40
31
|
/** Mirrored onto the figure as `data-size` so CSS can pick a token height tier. */
|
|
41
32
|
size?: "xs" | "sm" | "md" | "lg";
|
|
@@ -35,8 +35,8 @@ export declare function buildTrendSummary(data: ChartDatum[], categoryKey: strin
|
|
|
35
35
|
*/
|
|
36
36
|
export declare function trendRatios(data: ChartDatum[], valueKey: string): number[];
|
|
37
37
|
/**
|
|
38
|
-
* Resolve `emphasizedIndex` against a row count. Negative counts from the end
|
|
39
|
-
*
|
|
38
|
+
* Resolve `emphasizedIndex` against a row count. Negative counts from the end (`-1` = the latest
|
|
39
|
+
* datum).
|
|
40
40
|
*/
|
|
41
41
|
export declare function resolveEmphasizedIndex(index: number | undefined, length: number): number;
|
|
42
42
|
export {};
|
|
@@ -2,29 +2,14 @@ import * as React from "react";
|
|
|
2
2
|
import type { CompactBarTrendProp } from "../../props/components/charts.prop.js";
|
|
3
3
|
export type { CompactBarTrendProp, CompactBarTrendProp as CompactBarTrendProps, } from "../../props/components/charts.prop.js";
|
|
4
4
|
/**
|
|
5
|
-
* CompactBarTrend — a **dependency-free** compact vertical bar trend for dashboard
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* -
|
|
13
|
-
*
|
|
14
|
-
* the datum itself (`--chart-trend-bar-value`, a 0..1 ratio of the largest bar).
|
|
15
|
-
* - **Colour is token-owned** — muted marks read `--chart-trend-bar-background`
|
|
16
|
-
* (default `hsl(var(--muted-foreground) / .75)`), the emphasized mark reads
|
|
17
|
-
* `--chart-trend-bar-emphasis-background` (default `hsl(var(--primary))`).
|
|
18
|
-
* - **a11y** — reuses `ChartFrame`: a `<figure>` with a visible `<figcaption>`, a
|
|
19
|
-
* `role="img"` plot named by a localized one-line summary, and a visually-hidden
|
|
20
|
-
* per-category value list referenced through `aria-describedby` (WCAG 1.1.1). The
|
|
21
|
-
* emphasized bar is ALSO named in that list, so the highlight is never
|
|
22
|
-
* colour-only (WCAG 1.4.1). The graphic holds no focusable elements — anything
|
|
23
|
-
* interactive belongs in `footer`, which renders outside the graphic.
|
|
24
|
-
* - **i18n** — values are formatted with the active locale's `Intl.NumberFormat`;
|
|
25
|
-
* every generated string comes from `t()`.
|
|
26
|
-
*
|
|
27
|
-
* Import from `@godxjp/ui/charts/compact-bar-trend`. The isolated public entry keeps
|
|
28
|
-
* consumers without the optional `recharts` peer away from the peer-backed charts barrel.
|
|
5
|
+
* CompactBarTrend — a **dependency-free** compact vertical bar trend for dashboard summary cards
|
|
6
|
+
* (a seven-day "new organizations" strip, a weekly activity pulse…). The only inline value is the
|
|
7
|
+
* datum itself (`--chart-trend-bar-value`, a 0..1 ratio of the largest bar). - **Colour is
|
|
8
|
+
* token-owned** — muted marks read `--chart-trend-bar-background` (default
|
|
9
|
+
* `hsl(var(--muted-foreground) / .75)`), the emphasized mark reads
|
|
10
|
+
* `--chart-trend-bar-emphasis-background` (default `hsl(var(--primary))`). - **a11y** — reuses
|
|
11
|
+
* `ChartFrame`: a `<figure>` with a visible `<figcaption>`, a `role="img"` plot named by a
|
|
12
|
+
* localized one-line summary, and a visually-hidden per-category value list referenced through
|
|
13
|
+
* `aria-describedby` (WCAG 1.1.1).
|
|
29
14
|
*/
|
|
30
15
|
export declare function CompactBarTrend({ data, categoryKey, valueKey, label, description, size, emphasizedIndex, showCategoryLabels, numberFormat, footer, emptyMessage, className, id, ref, }: CompactBarTrendProp): React.JSX.Element;
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Charts entry — `@godxjp/ui/charts`. Isolated from the main barrel so the
|
|
3
|
-
* `recharts` dependency is only pulled in when a consumer imports a chart
|
|
4
|
-
* (tree-shaking: `sideEffects: false` + a dedicated tsup entry + recharts as an
|
|
5
|
-
* optional peer dependency).
|
|
6
|
-
*/
|
|
1
|
+
/** Charts entry — `@godxjp/ui/charts`. */
|
|
7
2
|
export { LineChart } from "./line-chart.js";
|
|
8
3
|
export type { LineChartProp, LineChartProps } from "./line-chart.js";
|
|
9
4
|
export { BarChart } from "./bar-chart.js";
|
|
@@ -8,13 +8,6 @@ export type BadgeVariant = "default" | "secondary" | "outline" | "dashed";
|
|
|
8
8
|
* for a SOLID brand fill use `variant="default"`.
|
|
9
9
|
*/
|
|
10
10
|
export type BadgeTone = ToneProp | "primary";
|
|
11
|
-
/**
|
|
12
|
-
* NO `text-xs` here (gh#260): a font-size utility lands in `@layer utilities`, which always beats
|
|
13
|
-
* the `@layer components` rule in badge-layout.css — making the documented `--badge-font-size`
|
|
14
|
-
* knob structurally inert. Font-size (and the line-height `text-xs` used to carry) are owned by
|
|
15
|
-
* badge-layout.css via `--badge-font-size` / `--badge-line-height`, whose defaults reproduce the
|
|
16
|
-
* old `text-xs` rendering exactly.
|
|
17
|
-
*/
|
|
18
11
|
declare const badgeVariants: (props?: ({
|
|
19
12
|
variant?: "dashed" | "default" | "outline" | "secondary" | null | undefined;
|
|
20
13
|
shape?: "default" | "pill" | "sharp" | null | undefined;
|
|
@@ -32,11 +25,8 @@ export interface BadgeProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "
|
|
|
32
25
|
}
|
|
33
26
|
export declare function Badge({ className, variant, shape, tone, icon, status, children, ...props }: BadgeProps): React.JSX.Element;
|
|
34
27
|
/**
|
|
35
|
-
* Status-aware badge with the shared domain-status-to-tone mapping.
|
|
36
|
-
*
|
|
37
|
-
* `Badge` remains the general-purpose primitive. Prefer `StatusBadge` when the
|
|
38
|
-
* `status` prop drives presentation so status colours remain consistent across
|
|
39
|
-
* products.
|
|
28
|
+
* Status-aware badge with the shared domain-status-to-tone mapping. `Badge` remains the
|
|
29
|
+
* general-purpose primitive.
|
|
40
30
|
*/
|
|
41
31
|
export declare const StatusBadge: typeof Badge;
|
|
42
32
|
export {};
|
|
@@ -5,15 +5,11 @@ import type { HeadingLevelProp } from "../../props/vocabulary/index.js";
|
|
|
5
5
|
* stripe (default) or the full perimeter. */
|
|
6
6
|
type CardAccent = "primary" | "success" | "warning" | "info" | "attention" | "destructive";
|
|
7
7
|
/**
|
|
8
|
-
* Where the semantic `accent` tone is drawn.
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* tone, measured by `--card-accent-perimeter-width` + `--card-accent-perimeter-ring-width`.
|
|
14
|
-
* This is what `variant="featured"` does, except the tone is yours instead of `--primary`,
|
|
15
|
-
* so a card can shout "action required" (`accent="attention"`) or "this failed"
|
|
16
|
-
* (`accent="destructive"`) without borrowing the brand colour.
|
|
8
|
+
* Where the semantic `accent` tone is drawn. - `"edge"` (default) — the leading-edge stripe on
|
|
9
|
+
* `border-inline-start` only, at the `--card-accent-rail-width` measure (6px). This is what
|
|
10
|
+
* `variant="featured"` does, except the tone is yours instead of `--primary`, so a card can shout
|
|
11
|
+
* "action required" (`accent="attention"`) or "this failed" (`accent="destructive"`) without
|
|
12
|
+
* borrowing the brand colour.
|
|
17
13
|
*/
|
|
18
14
|
type CardAccentPlacement = "edge" | "perimeter";
|
|
19
15
|
/** Surface fill — plain card, muted band, borderless outline, or emphasized featured ring. */
|
|
@@ -52,38 +48,22 @@ export declare const CardHeader: React.ForwardRefExoticComponent<React.HTMLAttri
|
|
|
52
48
|
banded?: boolean;
|
|
53
49
|
} & React.RefAttributes<HTMLDivElement>>;
|
|
54
50
|
export type CardTitleProps = React.HTMLAttributes<HTMLHeadingElement> & {
|
|
55
|
-
/**
|
|
56
|
-
* Semantic heading level (`h1`–`h4`). Default `3`. Choose it to keep the
|
|
57
|
-
* document outline valid (`h1 → h2 → h3`, no skipped levels) for the page the
|
|
58
|
-
* card sits on — NOT for visual size: the title's size is fixed by the
|
|
59
|
-
* `--card-title-*` tokens and does not change with `level`. A section card
|
|
60
|
-
* directly under a page `h1` uses `level={2}`; a card nested inside an
|
|
61
|
-
* already-`h2` section uses `level={3}` (the default).
|
|
62
|
-
*/
|
|
51
|
+
/** Semantic heading level (`h1`–`h4`). Default `3`. */
|
|
63
52
|
level?: HeadingLevelProp;
|
|
64
53
|
/**
|
|
65
|
-
* Render a different element than the `level` heading. Use `"p"` / `"div"`
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
* Overrides `level`.
|
|
54
|
+
* Render a different element than the `level` heading. Use `"p"` / `"div"` when the card title
|
|
55
|
+
* is a styled label rather than a section heading in the outline (so it is not announced as a
|
|
56
|
+
* heading and cannot skip a level).
|
|
69
57
|
*/
|
|
70
58
|
as?: "h1" | "h2" | "h3" | "h4" | "p" | "div";
|
|
71
59
|
};
|
|
72
60
|
export declare const CardTitle: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLHeadingElement> & {
|
|
73
|
-
/**
|
|
74
|
-
* Semantic heading level (`h1`–`h4`). Default `3`. Choose it to keep the
|
|
75
|
-
* document outline valid (`h1 → h2 → h3`, no skipped levels) for the page the
|
|
76
|
-
* card sits on — NOT for visual size: the title's size is fixed by the
|
|
77
|
-
* `--card-title-*` tokens and does not change with `level`. A section card
|
|
78
|
-
* directly under a page `h1` uses `level={2}`; a card nested inside an
|
|
79
|
-
* already-`h2` section uses `level={3}` (the default).
|
|
80
|
-
*/
|
|
61
|
+
/** Semantic heading level (`h1`–`h4`). Default `3`. */
|
|
81
62
|
level?: HeadingLevelProp;
|
|
82
63
|
/**
|
|
83
|
-
* Render a different element than the `level` heading. Use `"p"` / `"div"`
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
* Overrides `level`.
|
|
64
|
+
* Render a different element than the `level` heading. Use `"p"` / `"div"` when the card title
|
|
65
|
+
* is a styled label rather than a section heading in the outline (so it is not announced as a
|
|
66
|
+
* heading and cannot skip a level).
|
|
87
67
|
*/
|
|
88
68
|
as?: "h1" | "h2" | "h3" | "h4" | "p" | "div";
|
|
89
69
|
} & React.RefAttributes<HTMLHeadingElement>>;
|
|
@@ -121,12 +101,10 @@ export type CardBarProps = React.HTMLAttributes<HTMLDivElement> & {
|
|
|
121
101
|
extra?: React.ReactNode;
|
|
122
102
|
};
|
|
123
103
|
/**
|
|
124
|
-
* CardBar — a horizontal bar (view tabs, toolbar, filter chips) that can sit at
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
*
|
|
128
|
-
* area scrolls horizontally; the `extra` slot is pinned to the inline-end edge
|
|
129
|
-
* for actions (column settings, save view, …).
|
|
104
|
+
* CardBar — a horizontal bar (view tabs, toolbar, filter chips) that can sit at ANY position
|
|
105
|
+
* inside a Card. It draws its own separators FROM its position: a top bar gets a bottom border, a
|
|
106
|
+
* bottom bar gets a top border, a middle bar gets both, and a sole child gets none (the card
|
|
107
|
+
* border is enough).
|
|
130
108
|
*/
|
|
131
109
|
export declare const CardBar: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & {
|
|
132
110
|
/** Right-aligned actions slot (settings/save), Ant `tabBarExtraContent`-style. */
|
|
@@ -136,8 +114,10 @@ export type StatCardProps = React.HTMLAttributes<HTMLDivElement> & {
|
|
|
136
114
|
label: React.ReactNode;
|
|
137
115
|
value: React.ReactNode;
|
|
138
116
|
hint?: React.ReactNode;
|
|
139
|
-
/**
|
|
140
|
-
*
|
|
117
|
+
/**
|
|
118
|
+
* Optional leading icon, rendered as a tinted medallion above the metric. Decorative
|
|
119
|
+
* (aria-hidden) — the label carries the meaning.
|
|
120
|
+
*/
|
|
141
121
|
icon?: LucideIcon;
|
|
142
122
|
/** Optional compact trend text beside the value. Avoid badge-like deltas. */
|
|
143
123
|
delta?: React.ReactNode;
|
|
@@ -27,8 +27,7 @@ export declare const CarouselNext: React.ForwardRefExoticComponent<Omit<React.De
|
|
|
27
27
|
/**
|
|
28
28
|
* Dot indicators — one round dot per scroll snap, the active one widened + filled. Reads the Embla
|
|
29
29
|
* api from context (no `setApi` plumbing needed); each dot is a real `<button>` with an i18n
|
|
30
|
-
* accessible name and `aria-current` on the active slide, calling `scrollTo(i)`.
|
|
31
|
-
* `<Carousel>` after the track: `<CarouselContent/> … <CarouselDots/>`.
|
|
30
|
+
* accessible name and `aria-current` on the active slide, calling `scrollTo(i)`.
|
|
32
31
|
*/
|
|
33
32
|
export declare const CarouselDots: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
|
|
34
33
|
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { CodeBlockProp } from "../../props/components/data-display.prop.js";
|
|
3
|
+
export type { CodeBlockProp, CodeBlockProp as CodeBlockProps };
|
|
4
|
+
export declare const CodeBlock: React.ForwardRefExoticComponent<CodeBlockProp & Omit<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLPreElement>, HTMLPreElement>, "ref">, keyof CodeBlockProp> & React.RefAttributes<HTMLPreElement>>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { cn } from "../../lib/utils.js";
|
|
4
|
+
const CodeBlock = React.forwardRef(function CodeBlock2({ children, wrap = true, maxHeight = "none", size = "sm", language, className, ...rest }, ref) {
|
|
5
|
+
const scrolls = maxHeight !== "none" || !wrap;
|
|
6
|
+
return /* @__PURE__ */ jsx(
|
|
7
|
+
"pre",
|
|
8
|
+
{
|
|
9
|
+
ref,
|
|
10
|
+
"data-slot": "code-block",
|
|
11
|
+
"data-wrap": wrap ? void 0 : "false",
|
|
12
|
+
"data-max-height": maxHeight === "none" ? void 0 : maxHeight,
|
|
13
|
+
"data-size": size === "sm" ? void 0 : size,
|
|
14
|
+
"data-language": language,
|
|
15
|
+
tabIndex: scrolls ? 0 : void 0,
|
|
16
|
+
className: cn("ui-code-block", className),
|
|
17
|
+
...rest,
|
|
18
|
+
children: /* @__PURE__ */ jsx("code", { children })
|
|
19
|
+
}
|
|
20
|
+
);
|
|
21
|
+
});
|
|
22
|
+
export {
|
|
23
|
+
CodeBlock
|
|
24
|
+
};
|