@godxjp/ui 19.0.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/app-provider.d.ts +1 -1
- package/dist/app/app-provider.js +3 -0
- 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/cascader.js +3 -1
- package/dist/components/data-entry/checkbox-group.js +12 -5
- package/dist/components/data-entry/checkbox.js +30 -21
- 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 +12 -3
- package/dist/components/data-entry/date-range-picker.d.ts +1 -1
- package/dist/components/data-entry/date-range-picker.js +17 -6
- package/dist/components/data-entry/form-errors.d.ts +7 -18
- package/dist/components/data-entry/form-field.d.ts +1 -1
- package/dist/components/data-entry/form-field.js +15 -6
- 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 +13 -3
- package/dist/components/data-entry/month-picker.js +6 -4
- package/dist/components/data-entry/month-range-picker.d.ts +4 -6
- package/dist/components/data-entry/month-range-picker.js +11 -5
- 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 +19 -6
- package/dist/components/data-entry/search-select.d.ts +3 -5
- package/dist/components/data-entry/search-select.js +8 -2
- package/dist/components/data-entry/select.d.ts +15 -2
- package/dist/components/data-entry/select.js +57 -10
- package/dist/components/data-entry/switch.js +9 -2
- package/dist/components/data-entry/textarea.d.ts +10 -16
- package/dist/components/data-entry/textarea.js +8 -1
- package/dist/components/data-entry/time-picker.d.ts +3 -5
- package/dist/components/data-entry/tree-select.js +3 -1
- 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 +31 -36
- package/dist/lib/field-a11y.js +16 -2
- 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 +19 -27
- 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 +41 -30
- 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 +10 -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
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
import { formatDate } from "@godxjp/ui/datetime";
|
|
2
|
+
import {
|
|
3
|
+
Avatar,
|
|
4
|
+
AvatarFallback,
|
|
5
|
+
Badge,
|
|
6
|
+
Card,
|
|
7
|
+
CardContent,
|
|
8
|
+
CardDescription,
|
|
9
|
+
CardHeader,
|
|
10
|
+
CardTitle,
|
|
11
|
+
} from "@godxjp/ui/data-display";
|
|
12
|
+
import { Button, Text } from "@godxjp/ui/general";
|
|
13
|
+
import { Flex, PageContainer, Separator } from "@godxjp/ui/layout";
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Separator · Radix UI Separator wrapper for tokenized dividers. Default is
|
|
17
|
+
* horizontal (section breaks). Set orientation="vertical" only when the parent
|
|
18
|
+
* gives it a stable height (e.g. a row Flex with align="stretch"). decorative
|
|
19
|
+
* defaults to true · set false only when the divider carries semantic meaning for
|
|
20
|
+
* a11y.
|
|
21
|
+
*
|
|
22
|
+
* gh#308 — `label` INTERRUPTS the rule: a message stream's day divider, a "new messages"
|
|
23
|
+
* watermark, an auth conjunction. A labelled rule flips `decorative` to false, so it is a real
|
|
24
|
+
* role="separator" NAMED by the label (the visible node is aria-hidden, so the string is announced
|
|
25
|
+
* exactly once). `labelAlign` is a controlled vocabulary value — start | center | end, logical, so
|
|
26
|
+
* it flips under dir="rtl" — and `tone` moves the rule AND the label together, never colour alone.
|
|
27
|
+
*
|
|
28
|
+
* Composed only from real @godxjp/ui components; every date below is formatted with the package's
|
|
29
|
+
* Intl/CLDR date subsystem on the active locale, never hand-built.
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
/** Fixed ISO-8601 instants so the page is deterministic across runs and locales. */
|
|
33
|
+
const YESTERDAY_ISO = "2026-08-21";
|
|
34
|
+
const TODAY_ISO = "2026-08-22";
|
|
35
|
+
|
|
36
|
+
const LABEL_ALIGNMENTS = ["start", "center", "end"] as const;
|
|
37
|
+
const TONES = ["default", "muted", "primary", "success", "warning", "destructive", "info"] as const;
|
|
38
|
+
|
|
39
|
+
/** Stream fixtures — plain data, split by the calendar boundary each divider marks. */
|
|
40
|
+
const BEFORE_YESTERDAY = [
|
|
41
|
+
{
|
|
42
|
+
initial: "佐",
|
|
43
|
+
name: "佐藤 智",
|
|
44
|
+
time: "09:12",
|
|
45
|
+
body: "おはようございます。昨夜のデプロイは無事完了しました。",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
initial: "Ng",
|
|
49
|
+
name: "Nguyễn Minh",
|
|
50
|
+
time: "09:20",
|
|
51
|
+
body: "Cảm ơn anh. Em sẽ theo dõi log trong buổi sáng.",
|
|
52
|
+
},
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
const YESTERDAY = [
|
|
56
|
+
{
|
|
57
|
+
initial: "佐",
|
|
58
|
+
name: "佐藤 智",
|
|
59
|
+
time: "14:03",
|
|
60
|
+
body: "請求バッチの再実行を 15:00 に予定しています。",
|
|
61
|
+
},
|
|
62
|
+
];
|
|
63
|
+
|
|
64
|
+
const TODAY = [
|
|
65
|
+
{
|
|
66
|
+
initial: "Ng",
|
|
67
|
+
name: "Nguyễn Minh",
|
|
68
|
+
time: "08:41",
|
|
69
|
+
body: "Batch đã chạy xong, không có bản ghi lỗi nào.",
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
initial: "佐",
|
|
73
|
+
name: "佐藤 智",
|
|
74
|
+
time: "09:02",
|
|
75
|
+
body: "ありがとうございます。今週分のレポートにまとめます。",
|
|
76
|
+
},
|
|
77
|
+
];
|
|
78
|
+
|
|
79
|
+
export default function Demo() {
|
|
80
|
+
return (
|
|
81
|
+
<PageContainer
|
|
82
|
+
title="Separator"
|
|
83
|
+
subtitle="水平・垂直区切り線 · セクション分割・ツールバーグループ・ラベル付き区切り"
|
|
84
|
+
>
|
|
85
|
+
<Flex direction="col" gap="lg">
|
|
86
|
+
<Card>
|
|
87
|
+
<CardHeader>
|
|
88
|
+
<CardTitle level={2}>水平区切り(既定)</CardTitle>
|
|
89
|
+
<CardDescription>
|
|
90
|
+
orientation を省略すると horizontal。セクション間やフォームグループの分割に使う。 raw
|
|
91
|
+
border div は使わない。
|
|
92
|
+
</CardDescription>
|
|
93
|
+
</CardHeader>
|
|
94
|
+
<CardContent>
|
|
95
|
+
<Flex direction="col" gap="md">
|
|
96
|
+
<Flex direction="col" gap="xs">
|
|
97
|
+
<Text weight="medium">基本情報</Text>
|
|
98
|
+
<Text tone="muted">取引先名・登録番号・請求先住所</Text>
|
|
99
|
+
</Flex>
|
|
100
|
+
<Separator />
|
|
101
|
+
<Flex direction="col" gap="xs">
|
|
102
|
+
<Text weight="medium">支払条件</Text>
|
|
103
|
+
<Text tone="muted">支払サイト・通貨・消費税区分</Text>
|
|
104
|
+
</Flex>
|
|
105
|
+
<Separator />
|
|
106
|
+
<Flex direction="col" gap="xs">
|
|
107
|
+
<Text weight="medium">銀行口座</Text>
|
|
108
|
+
<Text tone="muted">振込先金融機関・口座番号</Text>
|
|
109
|
+
</Flex>
|
|
110
|
+
</Flex>
|
|
111
|
+
</CardContent>
|
|
112
|
+
</Card>
|
|
113
|
+
|
|
114
|
+
<Card>
|
|
115
|
+
<CardHeader>
|
|
116
|
+
<CardTitle level={2}>垂直区切り · ツールバーグループ</CardTitle>
|
|
117
|
+
<CardDescription>
|
|
118
|
+
orientation="vertical" は親が安定した高さを与えているときのみ使用。
|
|
119
|
+
align="stretch" の Flex 行で自然な高さを継承する。
|
|
120
|
+
</CardDescription>
|
|
121
|
+
</CardHeader>
|
|
122
|
+
<CardContent>
|
|
123
|
+
<Flex direction="row" gap="sm" align="stretch" wrap>
|
|
124
|
+
<Flex direction="row" gap="sm">
|
|
125
|
+
<Button variant="outline" size="sm">
|
|
126
|
+
インポート
|
|
127
|
+
</Button>
|
|
128
|
+
<Button variant="outline" size="sm">
|
|
129
|
+
エクスポート
|
|
130
|
+
</Button>
|
|
131
|
+
</Flex>
|
|
132
|
+
<Separator orientation="vertical" className="hidden sm:block" />
|
|
133
|
+
<Flex direction="row" gap="sm">
|
|
134
|
+
<Button variant="outline" size="sm">
|
|
135
|
+
一括承認
|
|
136
|
+
</Button>
|
|
137
|
+
<Button variant="outline" size="sm">
|
|
138
|
+
一括却下
|
|
139
|
+
</Button>
|
|
140
|
+
</Flex>
|
|
141
|
+
<Separator orientation="vertical" className="hidden sm:block" />
|
|
142
|
+
<Button size="sm">新規作成</Button>
|
|
143
|
+
</Flex>
|
|
144
|
+
</CardContent>
|
|
145
|
+
</Card>
|
|
146
|
+
|
|
147
|
+
<Card>
|
|
148
|
+
<CardHeader>
|
|
149
|
+
<CardTitle level={2}>decorative={false} · セマンティック区切り</CardTitle>
|
|
150
|
+
<CardDescription>
|
|
151
|
+
decorative={false} にすると role="separator" が付与され
|
|
152
|
+
スクリーンリーダーが読み上げる。意味のある区切りにのみ使う。
|
|
153
|
+
</CardDescription>
|
|
154
|
+
</CardHeader>
|
|
155
|
+
<CardContent>
|
|
156
|
+
<Flex direction="col" gap="md">
|
|
157
|
+
<Flex direction="row" gap="sm" align="center" justify="between">
|
|
158
|
+
<Text weight="medium">承認済み請求書</Text>
|
|
159
|
+
<Badge tone="success">12件</Badge>
|
|
160
|
+
</Flex>
|
|
161
|
+
<Separator decorative={false} />
|
|
162
|
+
<Flex direction="row" gap="sm" align="center" justify="between">
|
|
163
|
+
<Text weight="medium">保留中請求書</Text>
|
|
164
|
+
<Badge tone="warning">4件</Badge>
|
|
165
|
+
</Flex>
|
|
166
|
+
<Separator decorative={false} />
|
|
167
|
+
<Flex direction="row" gap="sm" align="center" justify="between">
|
|
168
|
+
<Text weight="medium">却下済み請求書</Text>
|
|
169
|
+
<Badge tone="destructive">2件</Badge>
|
|
170
|
+
</Flex>
|
|
171
|
+
</Flex>
|
|
172
|
+
</CardContent>
|
|
173
|
+
</Card>
|
|
174
|
+
|
|
175
|
+
{/* ── gh#308 — the real screen the labelled rule exists for ─────────────────────────── */}
|
|
176
|
+
<Card>
|
|
177
|
+
<CardHeader>
|
|
178
|
+
<CardTitle level={2}>実画面 · チャンネルの投稿ストリーム</CardTitle>
|
|
179
|
+
<CardDescription>
|
|
180
|
+
日付が変わる境目に label 付きの区切りを置き、未読の先頭に "新しいメッセージ"
|
|
181
|
+
の透かしを置く(Slack / Mattermost の慣例)。日付は必ず Intl / CLDR
|
|
182
|
+
の日付サブシステムで整形する。未読の透かしは tone="primary"
|
|
183
|
+
で線とラベルの両方が動くので、色だけの区別にならない。
|
|
184
|
+
</CardDescription>
|
|
185
|
+
</CardHeader>
|
|
186
|
+
<CardContent>
|
|
187
|
+
<Flex direction="col" gap="md">
|
|
188
|
+
{BEFORE_YESTERDAY.map((post) => (
|
|
189
|
+
<Flex key={post.time} direction="row" gap="sm" align="start">
|
|
190
|
+
<Avatar>
|
|
191
|
+
<AvatarFallback>{post.initial}</AvatarFallback>
|
|
192
|
+
</Avatar>
|
|
193
|
+
<Flex direction="col" gap="xs">
|
|
194
|
+
<Flex direction="row" gap="sm" align="baseline">
|
|
195
|
+
<Text weight="medium">{post.name}</Text>
|
|
196
|
+
<Text size="xs" tone="muted">
|
|
197
|
+
{post.time}
|
|
198
|
+
</Text>
|
|
199
|
+
</Flex>
|
|
200
|
+
<Text>{post.body}</Text>
|
|
201
|
+
</Flex>
|
|
202
|
+
</Flex>
|
|
203
|
+
))}
|
|
204
|
+
|
|
205
|
+
{/* Day divider — the label is the calendar boundary, formatted on the active locale. */}
|
|
206
|
+
<Separator label={formatDate(YESTERDAY_ISO, { kind: "long" })} labelAlign="start" />
|
|
207
|
+
|
|
208
|
+
{YESTERDAY.map((post) => (
|
|
209
|
+
<Flex key={post.time} direction="row" gap="sm" align="start">
|
|
210
|
+
<Avatar>
|
|
211
|
+
<AvatarFallback>{post.initial}</AvatarFallback>
|
|
212
|
+
</Avatar>
|
|
213
|
+
<Flex direction="col" gap="xs">
|
|
214
|
+
<Flex direction="row" gap="sm" align="baseline">
|
|
215
|
+
<Text weight="medium">{post.name}</Text>
|
|
216
|
+
<Text size="xs" tone="muted">
|
|
217
|
+
{post.time}
|
|
218
|
+
</Text>
|
|
219
|
+
</Flex>
|
|
220
|
+
<Text>{post.body}</Text>
|
|
221
|
+
</Flex>
|
|
222
|
+
</Flex>
|
|
223
|
+
))}
|
|
224
|
+
|
|
225
|
+
{/* Unread watermark — content, not decoration, so it is announced. */}
|
|
226
|
+
<Separator label="新しいメッセージ" tone="primary" />
|
|
227
|
+
<Separator label={formatDate(TODAY_ISO, { kind: "long" })} labelAlign="start" />
|
|
228
|
+
|
|
229
|
+
{TODAY.map((post) => (
|
|
230
|
+
<Flex key={post.time} direction="row" gap="sm" align="start">
|
|
231
|
+
<Avatar>
|
|
232
|
+
<AvatarFallback>{post.initial}</AvatarFallback>
|
|
233
|
+
</Avatar>
|
|
234
|
+
<Flex direction="col" gap="xs">
|
|
235
|
+
<Flex direction="row" gap="sm" align="baseline">
|
|
236
|
+
<Text weight="medium">{post.name}</Text>
|
|
237
|
+
<Text size="xs" tone="muted">
|
|
238
|
+
{post.time}
|
|
239
|
+
</Text>
|
|
240
|
+
</Flex>
|
|
241
|
+
<Text>{post.body}</Text>
|
|
242
|
+
</Flex>
|
|
243
|
+
</Flex>
|
|
244
|
+
))}
|
|
245
|
+
</Flex>
|
|
246
|
+
</CardContent>
|
|
247
|
+
</Card>
|
|
248
|
+
|
|
249
|
+
<Card>
|
|
250
|
+
<CardHeader>
|
|
251
|
+
<CardTitle level={2}>labelAlign · start | center | end</CardTitle>
|
|
252
|
+
<CardDescription>
|
|
253
|
+
boolean ではなく controlled vocabulary。短い側の線だけが --separator-label-inset
|
|
254
|
+
で測られるグリッドトラックなので、dir="rtl" では start と end
|
|
255
|
+
が自動的に入れ替わる。
|
|
256
|
+
</CardDescription>
|
|
257
|
+
</CardHeader>
|
|
258
|
+
<CardContent>
|
|
259
|
+
<Flex direction="col" gap="lg">
|
|
260
|
+
{LABEL_ALIGNMENTS.map((align) => (
|
|
261
|
+
<Flex key={align} direction="col" gap="xs">
|
|
262
|
+
<Text size="xs" tone="muted">
|
|
263
|
+
labelAlign="{align}"
|
|
264
|
+
</Text>
|
|
265
|
+
<Separator label="2026年8月22日" labelAlign={align} />
|
|
266
|
+
</Flex>
|
|
267
|
+
))}
|
|
268
|
+
<Flex direction="col" gap="xs">
|
|
269
|
+
<Text size="xs" tone="muted">
|
|
270
|
+
dir="rtl" · labelAlign="start"(短い側が右に反転)
|
|
271
|
+
</Text>
|
|
272
|
+
<div dir="rtl">
|
|
273
|
+
<Separator label="رسائل جديدة" labelAlign="start" />
|
|
274
|
+
</div>
|
|
275
|
+
</Flex>
|
|
276
|
+
</Flex>
|
|
277
|
+
</CardContent>
|
|
278
|
+
</Card>
|
|
279
|
+
|
|
280
|
+
<Card>
|
|
281
|
+
<CardHeader>
|
|
282
|
+
<CardTitle level={2}>tone · 線とラベルが一緒に動く</CardTitle>
|
|
283
|
+
<CardDescription>
|
|
284
|
+
tone は線の色だけでなくラベルの色も変える。色だけの区別にしないことで forced-colors
|
|
285
|
+
や色覚特性のある読者にも意味が残る(WCAG 1.4.1)。
|
|
286
|
+
</CardDescription>
|
|
287
|
+
</CardHeader>
|
|
288
|
+
<CardContent>
|
|
289
|
+
<Flex direction="col" gap="lg">
|
|
290
|
+
{TONES.map((tone) => (
|
|
291
|
+
<Flex key={tone} direction="col" gap="xs">
|
|
292
|
+
<Text size="xs" tone="muted">
|
|
293
|
+
tone="{tone}"
|
|
294
|
+
</Text>
|
|
295
|
+
<Separator label="新しいメッセージ" tone={tone} />
|
|
296
|
+
</Flex>
|
|
297
|
+
))}
|
|
298
|
+
</Flex>
|
|
299
|
+
</CardContent>
|
|
300
|
+
</Card>
|
|
301
|
+
|
|
302
|
+
<Card>
|
|
303
|
+
<CardHeader>
|
|
304
|
+
<CardTitle level={2}>content stress · 長いラベル・空ラベル</CardTitle>
|
|
305
|
+
<CardDescription>
|
|
306
|
+
両側の線は minmax(0, 1fr)
|
|
307
|
+
なので、翻訳が伸びても線が潰れるだけでコンテナからはみ出さない。 空文字や空白だけの
|
|
308
|
+
label はラベル無しと同じ扱いになり、素の線に戻る。
|
|
309
|
+
</CardDescription>
|
|
310
|
+
</CardHeader>
|
|
311
|
+
<CardContent>
|
|
312
|
+
<Flex direction="col" gap="lg">
|
|
313
|
+
<Separator label="ここから新しいメッセージが表示されています" />
|
|
314
|
+
<Separator label="Đây là nơi bắt đầu những tin nhắn chưa đọc của bạn" />
|
|
315
|
+
<Flex direction="col" gap="xs">
|
|
316
|
+
<Text size="xs" tone="muted">
|
|
317
|
+
label=" "(空白のみ)→ 素の区切り線
|
|
318
|
+
</Text>
|
|
319
|
+
<Separator label=" " />
|
|
320
|
+
</Flex>
|
|
321
|
+
</Flex>
|
|
322
|
+
</CardContent>
|
|
323
|
+
</Card>
|
|
324
|
+
</Flex>
|
|
325
|
+
</PageContainer>
|
|
326
|
+
);
|
|
327
|
+
}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ServiceRolePanel — ロール一覧 ⇄ 詳細 (canonical master-detail roles surface, gh#257).
|
|
3
|
+
*
|
|
4
|
+
* MasterDetail (rail=master) underneath owns all geometry: two tracks at 1440/1024, stacked
|
|
5
|
+
* list-then-detail at 390. The panel adds selection (aria-current rows), locked system roles,
|
|
6
|
+
* the built-in destructive AlertDialog (onDeleteRole fires only after confirm) and #216
|
|
7
|
+
* lifecycle states. The detail body is consumer-composed — here a PermissionMatrix.
|
|
8
|
+
*/
|
|
9
|
+
import * as React from "react";
|
|
10
|
+
|
|
11
|
+
import {
|
|
12
|
+
Card,
|
|
13
|
+
CardContent,
|
|
14
|
+
CardDescription,
|
|
15
|
+
CardHeader,
|
|
16
|
+
CardTitle,
|
|
17
|
+
Descriptions,
|
|
18
|
+
PermissionMatrix,
|
|
19
|
+
} from "@godxjp/ui/data-display";
|
|
20
|
+
import { Flex, PageContainer, ServiceRolePanel } from "@godxjp/ui/layout";
|
|
21
|
+
import { toast } from "@godxjp/ui/feedback";
|
|
22
|
+
import { grantKey } from "@godxjp/ui/lib/permission-grid";
|
|
23
|
+
|
|
24
|
+
const ROLES = [
|
|
25
|
+
{
|
|
26
|
+
id: "owner",
|
|
27
|
+
name: "オーナー",
|
|
28
|
+
description: "契約・請求を含む全操作",
|
|
29
|
+
memberCount: 1,
|
|
30
|
+
locked: true,
|
|
31
|
+
},
|
|
32
|
+
{ id: "operator", name: "オペレーター", description: "日常運用の操作", memberCount: 12 },
|
|
33
|
+
{ id: "analyst", name: "アナリスト", description: "閲覧とレポート出力", memberCount: 34 },
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
const PERMISSIONS = [
|
|
37
|
+
{ id: "instance.manage", name: "インスタンス管理", group: "運用" },
|
|
38
|
+
{ id: "member.invite", name: "メンバー招待", group: "管理" },
|
|
39
|
+
{ id: "report.export", name: "レポート出力", group: "レポート" },
|
|
40
|
+
];
|
|
41
|
+
|
|
42
|
+
const GRANTS = new Set<string>([
|
|
43
|
+
...PERMISSIONS.map((p) => grantKey("owner", p.id)),
|
|
44
|
+
grantKey("operator", "instance.manage"),
|
|
45
|
+
grantKey("operator", "member.invite"),
|
|
46
|
+
grantKey("analyst", "report.export"),
|
|
47
|
+
]);
|
|
48
|
+
|
|
49
|
+
export default function Demo() {
|
|
50
|
+
const [selected, setSelected] = React.useState("operator");
|
|
51
|
+
|
|
52
|
+
return (
|
|
53
|
+
<PageContainer
|
|
54
|
+
title="ServiceRolePanel"
|
|
55
|
+
subtitle="ロールの一覧(レール)と選択中ロールの詳細。削除は破壊的確認ダイアログの後にのみ発火。"
|
|
56
|
+
density="compact"
|
|
57
|
+
>
|
|
58
|
+
<Flex direction="col" gap="lg">
|
|
59
|
+
<Card>
|
|
60
|
+
<CardHeader>
|
|
61
|
+
<CardTitle level={2}>選択 + 削除確認</CardTitle>
|
|
62
|
+
<CardDescription>
|
|
63
|
+
locked の「オーナー」に削除ボタンは出ない。削除は AlertDialog で確認後に
|
|
64
|
+
onDeleteRole。
|
|
65
|
+
</CardDescription>
|
|
66
|
+
</CardHeader>
|
|
67
|
+
<CardContent>
|
|
68
|
+
{/* Two panels share this page, so each names its regions DISTINCTLY —
|
|
69
|
+
duplicate landmark names fail axe landmark-unique (same pattern as the
|
|
70
|
+
master-detail docs page). Single-instance apps keep the localized defaults. */}
|
|
71
|
+
<ServiceRolePanel
|
|
72
|
+
roles={ROLES}
|
|
73
|
+
value={selected}
|
|
74
|
+
onValueChange={setSelected}
|
|
75
|
+
onDeleteRole={(roleId) => toast.success(`ロール ${roleId} を削除しました(デモ)`)}
|
|
76
|
+
masterViewport="compact"
|
|
77
|
+
masterLabel="ロール一覧(編集可)"
|
|
78
|
+
detailLabel="選択中ロールの詳細"
|
|
79
|
+
>
|
|
80
|
+
{(role) =>
|
|
81
|
+
role && (
|
|
82
|
+
<Flex direction="col" gap="md">
|
|
83
|
+
<Descriptions>
|
|
84
|
+
<Descriptions.Item label="ロール名">{role.name}</Descriptions.Item>
|
|
85
|
+
<Descriptions.Item label="説明">{role.description ?? "—"}</Descriptions.Item>
|
|
86
|
+
<Descriptions.Item label="メンバー数">
|
|
87
|
+
{String(role.memberCount ?? 0)}
|
|
88
|
+
</Descriptions.Item>
|
|
89
|
+
</Descriptions>
|
|
90
|
+
<PermissionMatrix
|
|
91
|
+
roles={[role]}
|
|
92
|
+
permissions={PERMISSIONS}
|
|
93
|
+
grants={GRANTS}
|
|
94
|
+
readOnly
|
|
95
|
+
/>
|
|
96
|
+
</Flex>
|
|
97
|
+
)
|
|
98
|
+
}
|
|
99
|
+
</ServiceRolePanel>
|
|
100
|
+
</CardContent>
|
|
101
|
+
</Card>
|
|
102
|
+
|
|
103
|
+
<Card>
|
|
104
|
+
<CardHeader>
|
|
105
|
+
<CardTitle level={2}>読み取り専用</CardTitle>
|
|
106
|
+
<CardDescription>readOnly では削除などの変更系アフォーダンスが消える。</CardDescription>
|
|
107
|
+
</CardHeader>
|
|
108
|
+
<CardContent>
|
|
109
|
+
<ServiceRolePanel
|
|
110
|
+
roles={ROLES}
|
|
111
|
+
onDeleteRole={() => {}}
|
|
112
|
+
readOnly
|
|
113
|
+
masterLabel="ロール一覧(読み取り専用)"
|
|
114
|
+
detailLabel="ロールの詳細(読み取り専用)"
|
|
115
|
+
>
|
|
116
|
+
{(role) =>
|
|
117
|
+
role && (
|
|
118
|
+
<Descriptions>
|
|
119
|
+
<Descriptions.Item label="ロール名">{role.name}</Descriptions.Item>
|
|
120
|
+
</Descriptions>
|
|
121
|
+
)
|
|
122
|
+
}
|
|
123
|
+
</ServiceRolePanel>
|
|
124
|
+
</CardContent>
|
|
125
|
+
</Card>
|
|
126
|
+
|
|
127
|
+
<Card>
|
|
128
|
+
<CardHeader>
|
|
129
|
+
<CardTitle level={2}>ライフサイクル状態(#216 の語彙)</CardTitle>
|
|
130
|
+
<CardDescription>loading → denied → error → empty の優先順位。</CardDescription>
|
|
131
|
+
</CardHeader>
|
|
132
|
+
<CardContent>
|
|
133
|
+
<Flex direction="col" gap="md">
|
|
134
|
+
<ServiceRolePanel roles={[]} loading />
|
|
135
|
+
<ServiceRolePanel roles={[]} denied />
|
|
136
|
+
<ServiceRolePanel roles={[]} error onRetry={() => {}} />
|
|
137
|
+
<ServiceRolePanel roles={[]} />
|
|
138
|
+
</Flex>
|
|
139
|
+
</CardContent>
|
|
140
|
+
</Card>
|
|
141
|
+
</Flex>
|
|
142
|
+
</PageContainer>
|
|
143
|
+
);
|
|
144
|
+
}
|