@godxjp/ui 31.31.8 → 32.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +102 -121
- package/agent/START-HERE.md +10 -10
- package/agent/components/Accordion.json +2 -2
- package/agent/components/AccountChip.json +1 -1
- package/agent/components/Actions.json +1 -1
- package/agent/components/Activity.json +2 -2
- package/agent/components/Affix.json +1 -1
- package/agent/components/Alert.json +22 -6
- package/agent/components/AlertDialog.json +8 -1
- package/agent/components/Anchor.json +4 -3
- package/agent/components/AppLauncher.json +2 -2
- package/agent/components/AppProvider.json +19 -11
- package/agent/components/AppSettingPicker.json +18 -2
- package/agent/components/AppShell.json +4 -5
- package/agent/components/AreaChart.json +0 -1
- package/agent/components/AspectRatio.json +2 -2
- package/agent/components/Attachments.json +3 -3
- package/agent/components/AuthAccountSummary.json +1 -1
- package/agent/components/AuthDivider.json +1 -1
- package/agent/components/AuthExpiryProvider.json +0 -1
- package/agent/components/AuthFooter.json +2 -2
- package/agent/components/AuthIdentity.json +3 -3
- package/agent/components/AuthStack.json +1 -1
- package/agent/components/Avatar.json +2 -12
- package/agent/components/Badge.json +1 -1
- package/agent/components/BarChart.json +0 -1
- package/agent/components/BranchScopePicker.json +1 -1
- package/agent/components/Breadcrumb.json +1 -1
- package/agent/components/Button.json +3 -3
- package/agent/components/Calendar.json +1 -1
- package/agent/components/Card.json +2 -2
- package/agent/components/CardBar.json +0 -1
- package/agent/components/CardContent.json +0 -1
- package/agent/components/Carousel.json +4 -3
- package/agent/components/Cascader.json +1 -1
- package/agent/components/CenteredShell.json +78 -17
- package/agent/components/ChatBubble.json +3 -3
- package/agent/components/ChatBubbleList.json +3 -3
- package/agent/components/ChatComposer.json +3 -3
- package/agent/components/ChatSuggestion.json +3 -3
- package/agent/components/Checkbox.json +1 -1
- package/agent/components/CheckboxGroup.json +0 -1
- package/agent/components/CodeBlock.json +1 -1
- package/agent/components/Collapsible.json +4 -4
- package/agent/components/ColorPicker.json +1 -1
- package/agent/components/Command.json +5 -5
- package/agent/components/CommandPalette.json +1 -1
- package/agent/components/CompactBarTrend.json +1 -1
- package/agent/components/Conversations.json +3 -3
- package/agent/components/CredentialReveal.json +1 -1
- package/agent/components/DataState.json +2 -2
- package/agent/components/DataTable.json +1 -1
- package/agent/components/DatePicker.json +1 -1
- package/agent/components/Descriptions.json +1 -1
- package/agent/components/Dialog.json +2 -2
- package/agent/components/DraggablePanel.json +5 -4
- package/agent/components/DropdownMenu.json +1 -1
- package/agent/components/EmojiPicker.json +3 -2
- package/agent/components/EmptyState.json +1 -1
- package/agent/components/ErrorSurface.json +3 -3
- package/agent/components/FeatureList.json +1 -1
- package/agent/components/Field.json +0 -1
- package/agent/components/Flex.json +34 -4
- package/agent/components/FloatButton.json +6 -5
- package/agent/components/Form.json +1 -1
- package/agent/components/FormErrors.json +0 -1
- package/agent/components/FormField.json +6 -6
- package/agent/components/FormFieldArray.json +0 -1
- package/agent/components/FormFieldControl.json +0 -1
- package/agent/components/FormRoot.json +1 -1
- package/agent/components/Heading.json +3 -0
- package/agent/components/Icon.json +1 -1
- package/agent/components/Image.json +7 -4
- package/agent/components/InfiniteQueryState.json +1 -1
- package/agent/components/Input.json +1 -1
- package/agent/components/InputOTP.json +2 -2
- package/agent/components/Label.json +3 -3
- package/agent/components/LegalDocumentShell.json +5 -4
- package/agent/components/Legend.json +1 -1
- package/agent/components/LineChart.json +0 -1
- package/agent/components/Link.json +0 -1
- package/agent/components/ListRow.json +1 -1
- package/agent/components/Logo.json +5 -4
- package/agent/components/Marquee.json +4 -3
- package/agent/components/Masonry.json +4 -3
- package/agent/components/MasterDetail.json +1 -1
- package/agent/components/MegaMenu.json +4 -3
- package/agent/components/MobileShell.json +4 -4
- package/agent/components/NavList.json +1 -1
- package/agent/components/NumberInput.json +1 -1
- package/agent/components/OrgChart.json +4 -3
- package/agent/components/OrgSwitcher.json +1 -1
- package/agent/components/OverlayPortalProvider.json +0 -1
- package/agent/components/PageContainer.json +3 -3
- package/agent/components/PageCover.json +3 -2
- package/agent/components/Pagination.json +1 -1
- package/agent/components/PasswordInput.json +1 -1
- package/agent/components/PasswordStrength.json +1 -1
- package/agent/components/PermissionMatrix.json +1 -1
- package/agent/components/PieChart.json +0 -1
- package/agent/components/Popover.json +31 -6
- package/agent/components/PrefetchLink.json +1 -1
- package/agent/components/Progress.json +1 -1
- package/agent/components/Prose.json +1 -1
- package/agent/components/QrCode.json +1 -1
- package/agent/components/Radio.json +0 -1
- package/agent/components/RadioGroup.json +2 -2
- package/agent/components/RangeTimeline.json +2 -1
- package/agent/components/Rating.json +1 -1
- package/agent/components/RecordPicker.json +1 -1
- package/agent/components/ResizablePanel.json +1 -1
- package/agent/components/ResponsiveGrid.json +2 -2
- package/agent/components/Reveal.json +3 -3
- package/agent/components/ScrollArea.json +2 -2
- package/agent/components/SearchInput.json +1 -1
- package/agent/components/Segmented.json +1 -1
- package/agent/components/Select.json +7 -5
- package/agent/components/Separator.json +1 -1
- package/agent/components/ServiceCatalogCta.json +0 -1
- package/agent/components/ServiceLauncherCard.json +1 -1
- package/agent/components/ServiceRolePanel.json +1 -1
- package/agent/components/Sheet.json +5 -5
- package/agent/components/Sidebar.json +1 -1
- package/agent/components/Skeleton.json +26 -12
- package/agent/components/Slider.json +2 -2
- package/agent/components/SortableList.json +3 -2
- package/agent/components/SplitPane.json +1 -1
- package/agent/components/StatCard.json +1 -1
- package/agent/components/Steps.json +1 -1
- package/agent/components/Swatch.json +1 -1
- package/agent/components/Switch.json +1 -1
- package/agent/components/Table.json +1 -1
- package/agent/components/Tabs.json +3 -3
- package/agent/components/Text.json +5 -1
- package/agent/components/TextDiff.json +5 -4
- package/agent/components/Textarea.json +1 -1
- package/agent/components/ThemeScope.json +1 -1
- package/agent/components/ThoughtChain.json +3 -3
- package/agent/components/TimePicker.json +1 -1
- package/agent/components/Timeline.json +1 -1
- package/agent/components/TimelineGrid.json +5 -4
- package/agent/components/Toaster.json +0 -1
- package/agent/components/Toggle.json +3 -3
- package/agent/components/ToggleGroup.json +1 -1
- package/agent/components/Toolbar.json +10 -3
- package/agent/components/Tooltip.json +9 -9
- package/agent/components/Topbar.json +1 -1
- package/agent/components/TopbarItem.json +1 -1
- package/agent/components/Transfer.json +2 -2
- package/agent/components/Tree.json +1 -1
- package/agent/components/TreeSelect.json +1 -1
- package/agent/components/TwoFactorSetup.json +1 -1
- package/agent/components/Upload.json +1 -1
- package/agent/components/UploadCropDialog.json +1 -1
- package/agent/components/Welcome.json +3 -3
- package/agent/components/formatDate.json +2 -2
- package/agent/components/inertiaUpload.json +0 -1
- package/agent/components/useZodForm.json +0 -1
- package/agent/components-index.json +80 -154
- package/agent/components.json +541 -1737
- package/agent/index.json +10 -10
- package/agent/llms.txt +9 -9
- package/agent/patterns/account-recovery-settings.json +1 -1
- package/agent/patterns/auth-recovery-panels.json +2 -2
- package/agent/patterns/error-pages.json +1 -1
- package/agent/patterns/pricing-plans.json +17 -0
- package/agent/patterns-index.json +17 -1
- package/agent/patterns.json +21 -4
- package/agent/rules.json +30 -65
- package/agent/tokens.json +27 -57
- package/agent/vocabulary.json +3 -3
- package/dist/app/app-provider.d.ts +5 -3
- package/dist/app/app-provider.js +47 -12
- package/dist/app/date-format-labels.d.ts +3 -1
- package/dist/app/date-format-labels.js +2 -4
- package/dist/app/date-formats.d.ts +21 -2
- package/dist/app/date-formats.js +51 -2
- package/dist/app/index.d.ts +3 -1
- package/dist/app/index.js +5 -0
- package/dist/app/locales.d.ts +58 -3
- package/dist/app/locales.js +134 -8
- package/dist/app/preset.d.ts +25 -0
- package/dist/app/preset.js +10 -0
- package/dist/app/request-headers.d.ts +3 -3
- package/dist/app/request-headers.js +19 -10
- package/dist/app/settings-scope.d.ts +54 -0
- package/dist/app/settings-scope.js +46 -0
- package/dist/app/tenant-theme.js +8 -3
- package/dist/app/time-format-labels.d.ts +4 -1
- package/dist/app/time-format-labels.js +7 -1
- package/dist/app/types.d.ts +10 -2
- package/dist/app/use-formatting.d.ts +1 -1
- package/dist/components/admin/index.d.ts +1 -1
- package/dist/components/admin/index.js +1 -1
- package/dist/components/data-display/accordion.d.ts +51 -1
- package/dist/components/data-display/accordion.js +247 -1
- package/dist/components/data-display/avatar.d.ts +16 -1
- package/dist/components/data-display/avatar.js +109 -1
- package/dist/components/data-display/credential-reveal.d.ts +9 -2
- package/dist/components/data-display/credential-reveal.js +156 -1
- package/dist/components/data-display/image.js +5 -3
- package/dist/components/data-display/index.d.ts +0 -21
- package/dist/components/data-display/index.js +1 -43
- package/dist/components/data-display/popover.d.ts +15 -3
- package/dist/components/data-display/popover.js +168 -2
- package/dist/components/data-entry/branch-scope-picker.d.ts +1 -1
- package/dist/components/data-entry/index.d.ts +5 -12
- package/dist/components/data-entry/index.js +11 -12
- package/dist/components/data-entry/input-otp.d.ts +48 -2
- package/dist/components/data-entry/input-otp.js +94 -1
- package/dist/components/data-entry/number-input.d.ts +1 -1
- package/dist/components/data-entry/password-input.d.ts +38 -2
- package/dist/components/data-entry/password-input.js +56 -1
- package/dist/components/data-entry/rating.d.ts +38 -2
- package/dist/components/data-entry/rating.js +127 -1
- package/dist/components/data-entry/segmented.d.ts +94 -2
- package/dist/components/data-entry/segmented.js +104 -1
- package/dist/components/{ui/tag-input.d.ts → data-entry/select-tags-inline.d.ts} +7 -4
- package/dist/components/{ui/tag-input.js → data-entry/select-tags-inline.js} +4 -4
- package/dist/components/data-entry/select.js +4 -0
- package/dist/components/data-entry/toggle-group.d.ts +108 -2
- package/dist/components/data-entry/toggle-group.js +189 -1
- package/dist/components/data-entry/toggle.d.ts +86 -2
- package/dist/components/data-entry/toggle.js +153 -2
- package/dist/components/feedback/alert.d.ts +5 -3
- package/dist/components/feedback/alert.js +14 -2
- package/dist/components/feedback/index.d.ts +2 -6
- package/dist/components/feedback/index.js +1 -13
- package/dist/components/feedback/skeleton.d.ts +4 -17
- package/dist/components/feedback/skeleton.js +3 -40
- package/dist/components/general/index.d.ts +2 -4
- package/dist/components/general/index.js +1 -6
- package/dist/components/general/typography.d.ts +4 -58
- package/dist/components/general/typography.js +7 -141
- package/dist/components/layout/aspect-ratio.d.ts +24 -1
- package/dist/components/layout/aspect-ratio.js +18 -1
- package/dist/components/layout/auth-divider.js +1 -1
- package/dist/components/layout/auth-identity.js +6 -2
- package/dist/components/layout/centered-shell.d.ts +13 -8
- package/dist/components/layout/centered-shell.js +43 -1
- package/dist/components/layout/flex.d.ts +1 -1
- package/dist/components/layout/flex.js +73 -1
- package/dist/components/layout/index.d.ts +1 -13
- package/dist/components/layout/index.js +0 -12
- package/dist/components/layout/separator.d.ts +25 -2
- package/dist/components/layout/separator.js +71 -1
- package/dist/components/navigation/{app-setting-toggle.d.ts → app-setting-cycle.d.ts} +3 -4
- package/dist/components/navigation/{app-setting-toggle.js → app-setting-cycle.js} +3 -3
- package/dist/components/navigation/app-setting-picker.d.ts +6 -2
- package/dist/components/navigation/app-setting-picker.js +20 -2
- package/dist/components/navigation/index.d.ts +3 -11
- package/dist/components/navigation/index.js +1 -9
- package/dist/components/navigation/tabs.js +1 -1
- package/dist/components/ui/carousel.d.ts +1 -1
- package/dist/components/ui/carousel.js +1 -1
- package/dist/components/ui/index.d.ts +11 -5
- package/dist/components/ui/index.js +5 -5
- package/dist/contracts/measurement.json +2 -2
- package/dist/email/brand-mark.d.ts +3 -2
- package/dist/email/brand-mark.js +1 -1
- package/dist/email/color.d.ts +7 -0
- package/dist/email/color.js +14 -1
- package/dist/email/index.d.ts +10 -2
- package/dist/email/index.js +23 -2
- package/dist/email/tokens.generated.d.ts +120 -2
- package/dist/email/tokens.generated.js +119 -1
- package/dist/i18n/locale-tags.d.ts +25 -0
- package/dist/i18n/locale-tags.js +59 -0
- package/dist/i18n/translate.d.ts +20 -3
- package/dist/i18n/translate.js +25 -14
- package/dist/i18n/use-translation.d.ts +3 -3
- package/dist/i18n/use-translation.js +4 -2
- package/dist/{components/navigation → lab}/anchor.d.ts +2 -2
- package/dist/{components/navigation → lab}/anchor.js +5 -5
- package/dist/{components/data-display → lab}/carousel.js +2 -2
- package/dist/{components/layout → lab}/draggable-panel.d.ts +8 -8
- package/dist/{components/layout → lab}/draggable-panel.js +2 -2
- package/dist/{components/data-entry → lab}/emoji-picker.d.ts +2 -2
- package/dist/{components/data-entry → lab}/emoji-picker.js +6 -6
- package/dist/{components/general → lab}/float-button.d.ts +8 -8
- package/dist/{components/general → lab}/float-button.js +7 -7
- package/dist/lab/index.d.ts +39 -0
- package/dist/lab/index.js +48 -0
- package/dist/{components/layout → lab}/legal-document-shell.d.ts +2 -2
- package/dist/{components/layout → lab}/legal-document-shell.js +4 -4
- package/dist/{components/data-display → lab}/marquee.d.ts +5 -5
- package/dist/{components/data-display → lab}/marquee.js +5 -5
- package/dist/{components/layout → lab}/masonry.d.ts +2 -2
- package/dist/{components/layout → lab}/masonry.js +3 -3
- package/dist/{components/navigation → lab}/mega-menu.d.ts +4 -4
- package/dist/{components/navigation → lab}/mega-menu.js +2 -2
- package/dist/{components/data-display → lab}/org-chart.d.ts +2 -2
- package/dist/{components/data-display → lab}/org-chart.js +4 -4
- package/dist/{components/layout → lab}/page-cover.d.ts +2 -2
- package/dist/{components/layout → lab}/page-cover.js +2 -2
- package/dist/{components/data-display → lab}/range-timeline.d.ts +1 -1
- package/dist/{components/data-display → lab}/range-timeline.js +6 -6
- package/dist/{components/data-entry → lab}/sortable-list.d.ts +2 -2
- package/dist/{components/data-entry → lab}/sortable-list.js +3 -3
- package/dist/{components/data-display → lab}/text-diff.d.ts +3 -3
- package/dist/{components/data-display → lab}/text-diff.js +4 -4
- package/dist/{components/data-display → lab}/timeline-grid.d.ts +2 -2
- package/dist/{components/data-display → lab}/timeline-grid.js +1 -1
- package/dist/lib/control-styles.js +1 -1
- package/dist/lib/datetime/format.js +20 -6
- package/dist/lib/datetime/sync.d.ts +6 -2
- package/dist/lib/datetime/sync.js +14 -18
- package/dist/lib/platform.d.ts +1 -1
- package/dist/props/components/app.prop.d.ts +28 -13
- package/dist/props/components/data-display.prop.d.ts +19 -29
- package/dist/props/components/feedback.prop.d.ts +15 -44
- package/dist/props/components/general.prop.d.ts +2 -64
- package/dist/props/components/index.d.ts +9 -1
- package/dist/props/components/layout.prop.d.ts +41 -57
- package/dist/props/registry.d.ts +48 -101
- package/dist/props/registry.js +45 -129
- package/dist/props/vocabulary/index.d.ts +1 -1
- package/dist/props/vocabulary/interaction.prop.d.ts +3 -12
- package/dist/styles/alert-layout.css +0 -29
- package/dist/styles/data-display-layout.css +14 -22
- package/dist/styles/fonts/OFL.txt +93 -0
- package/dist/styles/form-layout.css +4 -0
- package/dist/styles/index.css +0 -2
- package/dist/styles/layers.json +44 -179
- package/dist/styles/text-layout.css +0 -15
- package/dist/styles.css +2 -0
- package/dist/themes/godx-tokens.css +41 -0
- package/dist/themes/godx.css +3 -0
- package/dist/themes/godx.d.ts +16 -0
- package/dist/themes/godx.js +12 -0
- package/dist/tokens/components/feedback.css +0 -6
- package/dist/tokens/derived.css +23 -22
- package/dist/tokens/foundation.css +4 -6
- package/docs/COMPOSITION-VS-COMPONENT.md +58 -33
- package/docs/CONSUMER-RULES.md +1 -1
- package/docs/CUSTOMER-THEMING.md +17 -53
- package/docs/migrations/v32.md +105 -0
- package/package.json +59 -19
- package/scripts/_agent-setup.mjs +54 -3
- package/scripts/brand-accent.generated.mjs +15 -2
- package/scripts/cli.mjs +36 -11
- package/scripts/codemod.mjs +542 -0
- package/scripts/consumer-rule.md +21 -43
- package/scripts/postinstall.mjs +10 -47
- package/scripts/prune-css.mjs +1 -1
- package/scripts/ui-audit.mjs +5 -2
- package/dist/components/data-display/chat-bubble.d.ts +0 -30
- package/dist/components/data-display/chat-bubble.js +0 -229
- package/dist/components/data-display/hover-card.d.ts +0 -1
- package/dist/components/data-display/hover-card.js +0 -7
- package/dist/components/data-display/thought-chain.d.ts +0 -42
- package/dist/components/data-display/thought-chain.js +0 -177
- package/dist/components/data-display/thumbnail.d.ts +0 -37
- package/dist/components/data-display/thumbnail.js +0 -20
- package/dist/components/data-display/welcome.d.ts +0 -26
- package/dist/components/data-display/welcome.js +0 -37
- package/dist/components/data-entry/attachments.d.ts +0 -19
- package/dist/components/data-entry/attachments.js +0 -366
- package/dist/components/data-entry/chat-composer.d.ts +0 -51
- package/dist/components/data-entry/chat-composer.js +0 -200
- package/dist/components/data-entry/chat-suggestion.d.ts +0 -28
- package/dist/components/data-entry/chat-suggestion.js +0 -309
- package/dist/components/data-entry/tag-input.d.ts +0 -2
- package/dist/components/data-entry/tag-input.js +0 -5
- package/dist/components/feedback/banner.d.ts +0 -21
- package/dist/components/feedback/banner.js +0 -19
- package/dist/components/feedback/callout.d.ts +0 -23
- package/dist/components/feedback/callout.js +0 -42
- package/dist/components/layout/auth-shell.d.ts +0 -10
- package/dist/components/layout/auth-shell.js +0 -42
- package/dist/components/layout/space-compact.d.ts +0 -65
- package/dist/components/layout/space-compact.js +0 -52
- package/dist/components/navigation/conversations.d.ts +0 -39
- package/dist/components/navigation/conversations.js +0 -371
- package/dist/components/ui/accordion.d.ts +0 -51
- package/dist/components/ui/accordion.js +0 -254
- package/dist/components/ui/aspect-ratio.d.ts +0 -24
- package/dist/components/ui/aspect-ratio.js +0 -21
- package/dist/components/ui/avatar.d.ts +0 -16
- package/dist/components/ui/avatar.js +0 -115
- package/dist/components/ui/credential-reveal.d.ts +0 -9
- package/dist/components/ui/credential-reveal.js +0 -160
- package/dist/components/ui/hover-card.d.ts +0 -47
- package/dist/components/ui/hover-card.js +0 -205
- package/dist/components/ui/input-otp.d.ts +0 -48
- package/dist/components/ui/input-otp.js +0 -101
- package/dist/components/ui/password-input.d.ts +0 -38
- package/dist/components/ui/password-input.js +0 -60
- package/dist/components/ui/rating.d.ts +0 -38
- package/dist/components/ui/rating.js +0 -131
- package/dist/components/ui/segmented.d.ts +0 -94
- package/dist/components/ui/segmented.js +0 -108
- package/dist/components/ui/separator.d.ts +0 -25
- package/dist/components/ui/separator.js +0 -74
- package/dist/components/ui/toggle-group.d.ts +0 -108
- package/dist/components/ui/toggle-group.js +0 -194
- package/dist/components/ui/toggle.d.ts +0 -86
- package/dist/components/ui/toggle.js +0 -156
- package/docs/CANONICAL-CONTRACTS.md +0 -206
- package/docs/COMPONENTS.md +0 -163
- package/docs/DATETIME.md +0 -78
- package/docs/DEVELOPMENT.md +0 -269
- package/docs/FRAME-A11Y-CI.md +0 -287
- package/docs/FRAME-COVERAGE-LEDGER.md +0 -123
- package/docs/FRAME-COVERAGE-REPORT.md +0 -228
- package/docs/FRAME-COVERAGE-STANDARD.md +0 -65
- package/docs/FRAME-COVERAGE.md +0 -29
- package/docs/MEASUREMENT-CONTRACT.md +0 -109
- package/docs/PROPS-REGISTRY.md +0 -61
- package/docs/PROPS-VOCABULARY.md +0 -100
- package/docs/REGISTRY.md +0 -70
- package/docs/TESTING.md +0 -107
- package/docs/THEME-API-COVERAGE.md +0 -538
- package/docs/WHAT-BELONGS-HERE.md +0 -179
- package/docs/asset-modules.d.ts +0 -53
- package/docs/assets/cover-terrain.svg +0 -6
- package/docs/assets/portrait-amber.svg +0 -5
- package/docs/assets/portrait-clay.svg +0 -5
- package/docs/assets/portrait-indigo.svg +0 -5
- package/docs/assets/portrait-iris.svg +0 -5
- package/docs/assets/portrait-moss.svg +0 -5
- package/docs/assets/portrait-plum.svg +0 -5
- package/docs/assets/portrait-slate.svg +0 -5
- package/docs/assets/service-mark-rose.svg +0 -6
- package/docs/assets/service-mark-teal.svg +0 -5
- package/docs/assets/shot-landscape.svg +0 -12
- package/docs/assets/shot-portrait.svg +0 -10
- package/docs/assets/tcgm/card-1.svg +0 -1
- package/docs/assets/tcgm/card-2.svg +0 -1
- package/docs/assets/tcgm/card-3.svg +0 -1
- package/docs/assets/tcgm/card-4.svg +0 -1
- package/docs/assets/tcgm/card-5.svg +0 -1
- package/docs/assets/tcgm/card-6.svg +0 -1
- package/docs/assets/tcgm/hero-prism.svg +0 -1
- package/docs/assets/tcgm/scene-1.svg +0 -1
- package/docs/assets/tcgm/scene-2.svg +0 -1
- package/docs/assets/tcgm/scene-3.svg +0 -1
- package/docs/assets/tcgm/scene-4.svg +0 -1
- package/docs/assets/tcgm/scene-5.svg +0 -1
- package/docs/assets/tcgm/tcgm-lockup-color.svg +0 -1
- package/docs/assets/tcgm/tcgm-symbol-color.svg +0 -1
- package/docs/charts/cjk-category-axis.tsx +0 -81
- package/docs/charts/compact-bar-trend.tsx +0 -327
- package/docs/charts/size-tiers.tsx +0 -192
- package/docs/data-display/accordion.tsx +0 -99
- package/docs/data-display/avatar.tsx +0 -502
- package/docs/data-display/badge.tsx +0 -335
- package/docs/data-display/card/examples/detail-panel.tsx +0 -106
- package/docs/data-display/card/examples/tab-list.tsx +0 -97
- package/docs/data-display/card/index.md +0 -3
- package/docs/data-display/card/index.tsx +0 -390
- package/docs/data-display/carousel.tsx +0 -160
- package/docs/data-display/charts.tsx +0 -278
- package/docs/data-display/chat-bubble.tsx +0 -397
- package/docs/data-display/code-block.tsx +0 -188
- package/docs/data-display/collapsible.tsx +0 -162
- package/docs/data-display/credential-reveal.tsx +0 -148
- package/docs/data-display/data-table/examples/antd-parity.tsx +0 -257
- package/docs/data-display/data-table/examples/approval-queue.tsx +0 -212
- package/docs/data-display/data-table/examples/grid-features.tsx +0 -158
- package/docs/data-display/data-table/examples/list-page.tsx +0 -175
- package/docs/data-display/data-table/examples/selectable-inbox.tsx +0 -113
- package/docs/data-display/data-table/examples/server-paged.tsx +0 -179
- package/docs/data-display/data-table/examples/striped-list.tsx +0 -173
- package/docs/data-display/data-table/index.md +0 -9
- package/docs/data-display/data-table/index.tsx +0 -407
- package/docs/data-display/descriptions.tsx +0 -263
- package/docs/data-display/empty-state.tsx +0 -164
- package/docs/data-display/feature-list.tsx +0 -159
- package/docs/data-display/hover-card.tsx +0 -181
- package/docs/data-display/image.tsx +0 -170
- package/docs/data-display/legend.tsx +0 -158
- package/docs/data-display/list-row.tsx +0 -441
- package/docs/data-display/markdown.tsx +0 -86
- package/docs/data-display/marquee.tsx +0 -254
- package/docs/data-display/org-chart.tsx +0 -165
- package/docs/data-display/permission-matrix.tsx +0 -188
- package/docs/data-display/popover-touch.tsx +0 -27
- package/docs/data-display/popover.tsx +0 -331
- package/docs/data-display/progress.tsx +0 -162
- package/docs/data-display/prose.tsx +0 -169
- package/docs/data-display/qr-code.tsx +0 -68
- package/docs/data-display/scroll-area.tsx +0 -420
- package/docs/data-display/service-launcher-card.tsx +0 -445
- package/docs/data-display/stat-card.tsx +0 -354
- package/docs/data-display/swatch.tsx +0 -107
- package/docs/data-display/table.tsx +0 -362
- package/docs/data-display/text-diff.tsx +0 -89
- package/docs/data-display/thought-chain.tsx +0 -176
- package/docs/data-display/thumbnail.tsx +0 -128
- package/docs/data-display/timeline-grid.tsx +0 -119
- package/docs/data-display/timeline.tsx +0 -671
- package/docs/data-display/touch-actions.tsx +0 -36
- package/docs/data-display/tree.tsx +0 -724
- package/docs/data-display/welcome.tsx +0 -115
- package/docs/data-entry/attachments.tsx +0 -160
- package/docs/data-entry/block-editor.tsx +0 -105
- package/docs/data-entry/branch-scope-picker.tsx +0 -128
- package/docs/data-entry/calendar.tsx +0 -226
- package/docs/data-entry/cascader.tsx +0 -380
- package/docs/data-entry/chat-composer.tsx +0 -619
- package/docs/data-entry/chat-suggestion.tsx +0 -301
- package/docs/data-entry/checkbox.tsx +0 -256
- package/docs/data-entry/color-picker.tsx +0 -189
- package/docs/data-entry/command-palette.tsx +0 -179
- package/docs/data-entry/command.tsx +0 -341
- package/docs/data-entry/country-picker-recipe.tsx +0 -175
- package/docs/data-entry/date-picker.tsx +0 -452
- package/docs/data-entry/emoji-picker.tsx +0 -35
- package/docs/data-entry/form/examples/employee-settings.tsx +0 -267
- package/docs/data-entry/form/examples/invoice-form.tsx +0 -387
- package/docs/data-entry/form-dynamic-fields.tsx +0 -199
- package/docs/data-entry/form-field/examples/a11y-contract.tsx +0 -242
- package/docs/data-entry/form-field/examples/create-form.tsx +0 -107
- package/docs/data-entry/form-field/index.md +0 -8
- package/docs/data-entry/form-field/index.tsx +0 -337
- package/docs/data-entry/form-inertia.tsx +0 -80
- package/docs/data-entry/form-root.tsx +0 -112
- package/docs/data-entry/form.tsx +0 -1498
- package/docs/data-entry/input-otp.tsx +0 -258
- package/docs/data-entry/input.tsx +0 -796
- package/docs/data-entry/label.tsx +0 -102
- package/docs/data-entry/markdown-editor.tsx +0 -69
- package/docs/data-entry/number-input.tsx +0 -279
- package/docs/data-entry/password-input.tsx +0 -102
- package/docs/data-entry/password-strength.tsx +0 -99
- package/docs/data-entry/radio-group.tsx +0 -316
- package/docs/data-entry/rating.tsx +0 -91
- package/docs/data-entry/record-picker.tsx +0 -209
- package/docs/data-entry/search-input.tsx +0 -121
- package/docs/data-entry/segmented-in-filter-row.tsx +0 -60
- package/docs/data-entry/segmented.tsx +0 -300
- package/docs/data-entry/select-async-contracts.tsx +0 -108
- package/docs/data-entry/select-matrix.tsx +0 -209
- package/docs/data-entry/select.tsx +0 -547
- package/docs/data-entry/slider.tsx +0 -212
- package/docs/data-entry/sortable-list.tsx +0 -76
- package/docs/data-entry/switch.tsx +0 -314
- package/docs/data-entry/tag-input.tsx +0 -145
- package/docs/data-entry/textarea.tsx +0 -249
- package/docs/data-entry/time-picker.tsx +0 -187
- package/docs/data-entry/time-range-picker.tsx +0 -55
- package/docs/data-entry/toggle-count.tsx +0 -348
- package/docs/data-entry/toggle-group.tsx +0 -438
- package/docs/data-entry/toggle.tsx +0 -217
- package/docs/data-entry/transfer.tsx +0 -115
- package/docs/data-entry/tree-select.tsx +0 -204
- package/docs/data-entry/upload-crop-dialog.tsx +0 -109
- package/docs/data-entry/upload.tsx +0 -310
- package/docs/feedback/alert-dialog.tsx +0 -270
- package/docs/feedback/alert.tsx +0 -248
- package/docs/feedback/auth-expiry.tsx +0 -104
- package/docs/feedback/banner.tsx +0 -183
- package/docs/feedback/callout.tsx +0 -220
- package/docs/feedback/danger-confirm.tsx +0 -91
- package/docs/feedback/dialog-touch.tsx +0 -24
- package/docs/feedback/dialog.tsx +0 -373
- package/docs/feedback/sheet.tsx +0 -510
- package/docs/feedback/skeleton.tsx +0 -168
- package/docs/feedback/toast.tsx +0 -135
- package/docs/feedback/tooltip.tsx +0 -171
- package/docs/feedback/two-factor-setup.tsx +0 -68
- package/docs/foundation/_email-specimen.ts +0 -274
- package/docs/foundation/_theme-editor-scope.ts +0 -222
- package/docs/foundation/colors.tsx +0 -207
- package/docs/foundation/density.tsx +0 -242
- package/docs/foundation/email-tokens.tsx +0 -323
- package/docs/foundation/radius-shadow.tsx +0 -154
- package/docs/foundation/spacing.tsx +0 -216
- package/docs/foundation/theme-editor.tsx +0 -654
- package/docs/foundation/typography.tsx +0 -147
- package/docs/general/actions.tsx +0 -175
- package/docs/general/activity.tsx +0 -289
- package/docs/general/button/examples/destructive-confirm.tsx +0 -90
- package/docs/general/button/examples/form-actions.tsx +0 -87
- package/docs/general/button/examples/toolbar.tsx +0 -160
- package/docs/general/button/index.md +0 -16
- package/docs/general/button/index.tsx +0 -236
- package/docs/general/float-button.tsx +0 -133
- package/docs/general/icon.tsx +0 -217
- package/docs/general/logo.tsx +0 -194
- package/docs/general/reveal.tsx +0 -309
- package/docs/general/typography.tsx +0 -542
- package/docs/i18n/messages/en.json +0 -1715
- package/docs/i18n/messages/ja.json +0 -1708
- package/docs/i18n/messages/vi.json +0 -1708
- package/docs/layout/account-chip.tsx +0 -72
- package/docs/layout/admin-collection.tsx +0 -122
- package/docs/layout/affix.tsx +0 -209
- package/docs/layout/app-launcher.tsx +0 -211
- package/docs/layout/app-shell-arrangements.tsx +0 -225
- package/docs/layout/app-shell-narrow-bar.tsx +0 -205
- package/docs/layout/app-shell-states.tsx +0 -171
- package/docs/layout/app-shell.tsx +0 -395
- package/docs/layout/aspect-ratio.tsx +0 -135
- package/docs/layout/auth-account-summary.tsx +0 -103
- package/docs/layout/auth-divider.tsx +0 -28
- package/docs/layout/auth-footer.tsx +0 -37
- package/docs/layout/auth-identity.tsx +0 -70
- package/docs/layout/auth-recovery/examples/mfa-challenge.md +0 -41
- package/docs/layout/auth-recovery/examples/mfa-challenge.tsx +0 -254
- package/docs/layout/auth-recovery/examples/mobile-390.md +0 -25
- package/docs/layout/auth-recovery/examples/mobile-390.tsx +0 -82
- package/docs/layout/auth-recovery/examples/password-recovery.md +0 -24
- package/docs/layout/auth-recovery/examples/password-recovery.tsx +0 -197
- package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.md +0 -27
- package/docs/layout/auth-recovery/examples/wrapping-ja-en-vi.tsx +0 -156
- package/docs/layout/auth-recovery/index.md +0 -140
- package/docs/layout/auth-recovery/index.tsx +0 -96
- package/docs/layout/auth-shell-context.tsx +0 -103
- package/docs/layout/auth-shell-device.tsx +0 -112
- package/docs/layout/auth-shell-registration.tsx +0 -338
- package/docs/layout/auth-shell-variants.tsx +0 -143
- package/docs/layout/auth-shell.tsx +0 -59
- package/docs/layout/auth-stack.tsx +0 -40
- package/docs/layout/centered-shell.tsx +0 -102
- package/docs/layout/draggable-panel.tsx +0 -127
- package/docs/layout/error-surface/examples/application-403.tsx +0 -84
- package/docs/layout/error-surface/examples/application-404.tsx +0 -77
- package/docs/layout/error-surface/examples/system-500.tsx +0 -47
- package/docs/layout/error-surface/examples/system-503.tsx +0 -48
- package/docs/layout/error-surface/index.md +0 -153
- package/docs/layout/error-surface/index.tsx +0 -239
- package/docs/layout/flex.tsx +0 -444
- package/docs/layout/legal-document-shell/_data.ts +0 -110
- package/docs/layout/legal-document-shell/examples/desktop-1440.md +0 -12
- package/docs/layout/legal-document-shell/examples/desktop-1440.tsx +0 -83
- package/docs/layout/legal-document-shell/examples/mobile-390.md +0 -22
- package/docs/layout/legal-document-shell/examples/mobile-390.tsx +0 -70
- package/docs/layout/legal-document-shell/examples/tablet-1024.md +0 -3
- package/docs/layout/legal-document-shell/examples/tablet-1024.tsx +0 -84
- package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.md +0 -18
- package/docs/layout/legal-document-shell/examples/wrapping-ja-en-vi.tsx +0 -61
- package/docs/layout/legal-document-shell/index.md +0 -51
- package/docs/layout/legal-document-shell/index.tsx +0 -101
- package/docs/layout/masonry.tsx +0 -291
- package/docs/layout/master-detail.tsx +0 -390
- package/docs/layout/mobile-shell.tsx +0 -106
- package/docs/layout/nav-list.tsx +0 -584
- package/docs/layout/org-switcher.tsx +0 -131
- package/docs/layout/page-container.tsx +0 -1020
- package/docs/layout/page-cover.tsx +0 -56
- package/docs/layout/resizable-panel.tsx +0 -419
- package/docs/layout/responsive-grid.tsx +0 -403
- package/docs/layout/separator.tsx +0 -327
- package/docs/layout/service-role-panel.tsx +0 -144
- package/docs/layout/sidebar.tsx +0 -689
- package/docs/layout/space-compact.tsx +0 -202
- package/docs/layout/split-pane.tsx +0 -532
- package/docs/layout/topbar-item.tsx +0 -233
- package/docs/layout/topbar.tsx +0 -360
- package/docs/navigation/anchor.tsx +0 -295
- package/docs/navigation/app-setting-picker.tsx +0 -178
- package/docs/navigation/app-setting-toggle.tsx +0 -111
- package/docs/navigation/breadcrumb.tsx +0 -207
- package/docs/navigation/card-tabs.tsx +0 -344
- package/docs/navigation/conversations.tsx +0 -176
- package/docs/navigation/dropdown-menu.tsx +0 -345
- package/docs/navigation/filter-bar.tsx +0 -247
- package/docs/navigation/mega-menu-panel.tsx +0 -86
- package/docs/navigation/mega-menu.tsx +0 -254
- package/docs/navigation/pagination.tsx +0 -293
- package/docs/navigation/steps.tsx +0 -315
- package/docs/navigation/tabs-rtl.tsx +0 -28
- package/docs/navigation/tabs.tsx +0 -755
- package/docs/navigation/toolbar.tsx +0 -347
- package/docs/providers/app-provider.tsx +0 -191
- package/docs/providers/format-date.tsx +0 -230
- package/docs/providers/theme-scope.tsx +0 -186
- package/docs/query/button-refetch.tsx +0 -161
- package/docs/query/data-state.tsx +0 -262
- package/docs/query/infinite-query-state.tsx +0 -97
- package/docs/query/mutation-feedback.tsx +0 -128
- package/docs/query/touch-actions.tsx +0 -68
- package/docs/react-router/prefetch-link.tsx +0 -262
- package/docs/roadmap/ai-chat-components.md +0 -206
- package/docs/roadmap/antd-parity.md +0 -155
- package/docs/roadmap/badge-tag-chip-count.md +0 -172
- package/docs/roadmap/list-masonry.md +0 -159
- package/docs/roadmap/parity-audit-data-display-feedback.md +0 -567
- package/docs/roadmap/parity-audit-data-entry.md +0 -368
- package/docs/roadmap/parity-audit-layout-navigation-general.md +0 -459
- package/docs/roadmap/parity-backlog.md +0 -77
- package/docs/roadmap/tree-components.md +0 -151
- package/docs/roadmap/website-components.md +0 -813
- package/docs/showcase/acme-portal.tsx +0 -461
- package/docs/showcase/acme-website.tsx +0 -499
- package/docs/showcase/caimono-price-comparison.tsx +0 -919
- package/docs/showcase/case1-warehouse-dashboard.tsx +0 -358
- package/docs/showcase/case2-employee-me.tsx +0 -438
- package/docs/showcase/case3-approval-workflow.tsx +0 -531
- package/docs/showcase/case4-login.tsx +0 -312
- package/docs/showcase/case5-shift-calendar.tsx +0 -702
- package/docs/showcase/case6-agency-handy.tsx +0 -1120
- package/docs/showcase/futurelastic-web.tsx +0 -441
- package/docs/showcase/marketing-page.tsx +0 -895
- package/docs/showcase/org-switcher.tsx +0 -320
- package/docs/showcase/permission-matrix.tsx +0 -354
- package/docs/showcase/public-landing.tsx +0 -210
- package/docs/showcase/settings-account-sections.tsx +0 -559
- package/docs/showcase/settings-security-mfa.tsx +0 -145
- package/docs/showcase/table-approval-queue.tsx +0 -199
- package/docs/showcase/table-bulk-actions.tsx +0 -468
- package/docs/showcase/table-compact-kintone.tsx +0 -438
- package/docs/showcase/table-conditional-format.tsx +0 -367
- package/docs/showcase/table-crud-list.tsx +0 -544
- package/docs/showcase/table-density.tsx +0 -349
- package/docs/showcase/table-expandable-rows.tsx +0 -496
- package/docs/showcase/table-filter-chips.tsx +0 -468
- package/docs/showcase/table-footer-totals.tsx +0 -328
- package/docs/showcase/table-grouped-subtotals.tsx +0 -398
- package/docs/showcase/table-master-detail.tsx +0 -482
- package/docs/showcase/table-pagination.tsx +0 -409
- package/docs/showcase/table-states.tsx +0 -371
- package/docs/showcase/table-sticky-columns.tsx +0 -377
- package/docs/showcase/table-tree-rows.tsx +0 -451
- package/docs/showcase/table-view-tabs.tsx +0 -488
- package/docs/showcase/tcgm-website.tsx +0 -1047
- package/docs/showcase/tenant-brand-color.tsx +0 -338
- package/docs/showcase/theme-customization.tsx +0 -1292
- package/docs/showcase/theme-lab.tsx +0 -2125
- package/docs/themes/flat.css +0 -466
- package/docs/themes/glassmorphism.css +0 -960
- package/docs/themes/index.ts +0 -219
- package/docs/themes/neubrutalism.css +0 -481
- /package/dist/components/navigation/{filter-bar.d.ts → toolbar.d.ts} +0 -0
- /package/dist/components/navigation/{filter-bar.js → toolbar.js} +0 -0
- /package/dist/{components/data-display → lab}/carousel.d.ts +0 -0
- /package/dist/{components/data-entry → lab}/emoji-data.d.ts +0 -0
- /package/dist/{components/data-entry → lab}/emoji-data.js +0 -0
- /package/dist/{components/data-display → lab}/marquee-reveal.d.ts +0 -0
- /package/dist/{components/data-display → lab}/marquee-reveal.js +0 -0
package/scripts/postinstall.mjs
CHANGED
|
@@ -1,56 +1,19 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Inert install (#1215): this script writes NOTHING into the consumer project. Agent files
|
|
4
|
+
* (.mcp.json, CLAUDE.md block, .claude/godxjp-ui-workflow.md, .ai/rules/godxjp-ui.md) are written
|
|
5
|
+
* only by the explicit `npx godxjp-ui sync-rules` (see `runSyncRules` in _agent-setup.mjs).
|
|
6
|
+
* Silent in CI, when opted out, and when installing the library itself.
|
|
6
7
|
*/
|
|
7
|
-
import {
|
|
8
|
-
ensureClaudeMd,
|
|
9
|
-
ensureMcpJson,
|
|
10
|
-
ensureConsumerRules,
|
|
11
|
-
outOfProjectUiMcpReport,
|
|
12
|
-
refreshGuineaPigSkill,
|
|
13
|
-
shouldSkip,
|
|
14
|
-
writeWorkflowMd,
|
|
15
|
-
} from "./_agent-setup.mjs";
|
|
16
|
-
|
|
17
|
-
const root = process.env.INIT_CWD || process.cwd();
|
|
18
|
-
|
|
19
|
-
const skip = shouldSkip(root);
|
|
20
|
-
if (skip) process.exit(0); // silent: CI / opt-out / self-install / no consumer project
|
|
8
|
+
import { shouldSkip } from "./_agent-setup.mjs";
|
|
21
9
|
|
|
22
10
|
try {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
console.log(`\n @godxjp/ui → .mcp.json ${r}\n`);
|
|
28
|
-
}
|
|
29
|
-
// A registration outside the project is reported whatever the project file says, before any of
|
|
30
|
-
// the quiet exits below: it is live beside ours and nothing here will ever change it (gh#722).
|
|
31
|
-
const outside = outOfProjectUiMcpReport(root);
|
|
32
|
-
if (outside) console.log(outside);
|
|
33
|
-
// The mandate is plain text the agent reads every turn (CLAUDE.md block + workflow file). It
|
|
34
|
-
// changes nothing in the dev loop, so it is installed by default: an agent that never saw the
|
|
35
|
-
// but no mandate). Only the hooks — which DO change the loop — stay behind `init-agent`.
|
|
36
|
-
const md = ensureClaudeMd(root);
|
|
37
|
-
if (md.startsWith("left untouched")) {
|
|
38
|
-
console.log(` @godxjp/ui → CLAUDE.md ${md}\n`);
|
|
11
|
+
if (!shouldSkip(process.env.INIT_CWD || process.cwd())) {
|
|
12
|
+
console.log(
|
|
13
|
+
"\n @godxjp/ui: agent files are not written on install. Run `npx godxjp-ui sync-rules` to set them up (add --dry-run to preview).\n",
|
|
14
|
+
);
|
|
39
15
|
}
|
|
40
|
-
const wf = writeWorkflowMd(root);
|
|
41
|
-
const skill = refreshGuineaPigSkill(root);
|
|
42
|
-
const rules = ensureConsumerRules(root);
|
|
43
|
-
if (r.startsWith("left untouched") || md.startsWith("left untouched")) process.exit(0); // already reported
|
|
44
|
-
if (r === "present" && md === "present" && !wf && !skill && !rules) process.exit(0); // current — stay quiet
|
|
45
|
-
console.log(
|
|
46
|
-
`\n @godxjp/ui → MCP in .mcp.json (${r}); workflow mandate in CLAUDE.md (${md}).\n` +
|
|
47
|
-
(rules ? ` common consumer rules in .ai/rules/godxjp-ui.md (glob ${rules}/**).\n` : "") +
|
|
48
|
-
(skill ? " guinea-pig skill refreshed to this version (your section 8 kept).\n" : "") +
|
|
49
|
-
" Your agent now has live component + audit guidance. Restart it to pick up the MCP.\n" +
|
|
50
|
-
" For auto-audit on every edit (PostToolUse + SessionStart hooks):\n" +
|
|
51
|
-
" npx @godxjp/ui init-agent\n",
|
|
52
|
-
);
|
|
53
16
|
} catch {
|
|
54
|
-
// Never fail an install over optional
|
|
17
|
+
// Never fail an install over an optional hint.
|
|
55
18
|
}
|
|
56
19
|
process.exit(0);
|
package/scripts/prune-css.mjs
CHANGED
|
@@ -128,7 +128,7 @@ let sawNamespace = false;
|
|
|
128
128
|
// `@godxjp/editor` / `@godxjp/markdown` too (gh#1114): their components render kit components, and
|
|
129
129
|
// the manifest maps `MarkdownEditor` to the layers those need.
|
|
130
130
|
const IMPORT =
|
|
131
|
-
/(?:import|export)\s+(type\s+)?([^;'"]*?)\s*from\s*["'](@godxjp\/(?:ui|editor|block-editor|markdown)(?:\/[^"']*)?)["']/g;
|
|
131
|
+
/(?:import|export)\s+(type\s+)?([^;'"]*?)\s*from\s*["'](@godxjp\/(?:ui|editor|block-editor|markdown|chat)(?:\/[^"']*)?)["']/g;
|
|
132
132
|
for (const file of new Set(sources)) {
|
|
133
133
|
const src = readFileSync(file, "utf8");
|
|
134
134
|
for (const m of src.matchAll(IMPORT)) {
|
package/scripts/ui-audit.mjs
CHANGED
|
@@ -1825,8 +1825,11 @@ for (const dir of SCAN_DIRS) {
|
|
|
1825
1825
|
scannedFiles.push(rel);
|
|
1826
1826
|
// A primitive implements native controls; asking Input to render Input recurses.
|
|
1827
1827
|
// Consumer applications and executable docs still receive these composition checks.
|
|
1828
|
+
// `src/lab/` holds primitives too — the opt-in tier (v32 #1223), same gates as core.
|
|
1828
1829
|
const fileRules =
|
|
1829
|
-
SELF &&
|
|
1830
|
+
SELF &&
|
|
1831
|
+
!args.includes("--consumer") &&
|
|
1832
|
+
(rel.startsWith("src/components/") || rel.startsWith("src/lab/"))
|
|
1830
1833
|
? ACTIVE_RULES.filter((rule) => rule.scope !== "consumer-control")
|
|
1831
1834
|
: ACTIVE_RULES;
|
|
1832
1835
|
const content = readFileSync(file, "utf8");
|
|
@@ -2089,7 +2092,7 @@ for (const dir of SCAN_DIRS) {
|
|
|
2089
2092
|
rule: "formfield-needs-form",
|
|
2090
2093
|
severity: "error",
|
|
2091
2094
|
standard: "@godxjp/ui Form (gh#998)",
|
|
2092
|
-
message: `${group.length} FormFields under one parent with no <Form> around them. <Form layout="horizontal" labelWidth controlWidth> is what lines fields up — without it each form picks its own layout, and a row of fields in a hand-rolled <Flex> drops the required field's label out of line. Wrap them in <Form>; a row that belongs together is <
|
|
2095
|
+
message: `${group.length} FormFields under one parent with no <Form> around them. <Form layout="horizontal" labelWidth controlWidth> is what lines fields up — without it each form picks its own layout, and a row of fields in a hand-rolled <Flex> drops the required field's label out of line. Wrap them in <Form>; a row that belongs together is <Flex attached> or <Form columns>. A lone field (a search box, a type-to-confirm input) is not flagged.`,
|
|
2093
2096
|
snippet: scanContent.slice(at, at + 120).replace(/\s+/g, " "),
|
|
2094
2097
|
});
|
|
2095
2098
|
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import type { ChatBubbleListProp, ChatBubbleProp } from "../../props/components/data-display.prop.js";
|
|
3
|
-
export type { ChatBubbleListProp, ChatBubblePlacementProp, ChatBubbleProp, ChatBubbleToneProp, ChatBubbleTypingProp, ChatBubbleVariantProp, ChatMessageProp, } from "../../props/components/data-display.prop.js";
|
|
4
|
-
export type ChatBubbleProps = ChatBubbleProp & Omit<React.HTMLAttributes<HTMLElement>, keyof ChatBubbleProp>;
|
|
5
|
-
/**
|
|
6
|
-
* ChatBubble — ONE message in a conversation: an optional author mark, a header naming the turn,
|
|
7
|
-
* the message body, and a footer for timestamps or per-message actions.
|
|
8
|
-
*
|
|
9
|
-
* It is an `<article>` inside the feed's `role="log"`, and it deliberately owns NO live region of
|
|
10
|
-
* its own: one live region per bubble floods a screen reader on every token of a stream. The feed
|
|
11
|
-
* (`ChatBubbleList`) owns the single `aria-live="polite"` region; a bubble only ever says "I am
|
|
12
|
-
* still being produced" through `aria-busy`.
|
|
13
|
-
*/
|
|
14
|
-
export declare const ChatBubble: React.ForwardRefExoticComponent<ChatBubbleProp & Omit<React.HTMLAttributes<HTMLElement>, keyof ChatBubbleProp> & React.RefAttributes<HTMLElement>>;
|
|
15
|
-
export type ChatBubbleListProps = ChatBubbleListProp & Omit<React.HTMLAttributes<HTMLDivElement>, keyof ChatBubbleListProp>;
|
|
16
|
-
/**
|
|
17
|
-
* ChatBubbleList — the message feed.
|
|
18
|
-
*
|
|
19
|
-
* The behaviour that earns this a component rather than a `ScrollArea` + `map` is STICK-TO-BOTTOM:
|
|
20
|
-
* new messages keep the viewport pinned only while the reader is ALREADY at the bottom. The moment
|
|
21
|
-
* they scroll up to re-read something the pin is revoked and stays revoked until they ask for it
|
|
22
|
-
* back — silently yanking a reader to the newest message mid-sentence is a change of context they
|
|
23
|
-
* did not request (WCAG 3.2.5), and it is the classic chat-UI defect. The way back is a real,
|
|
24
|
-
* focusable button that also says how many messages arrived while they were away.
|
|
25
|
-
*
|
|
26
|
-
* GIVE IT A DEFINITE HEIGHT — `className="h-96"`, or a flex/grid parent that hands it a track.
|
|
27
|
-
* The feed scrolls INSIDE itself; with no height it simply grows to its content, nothing ever
|
|
28
|
-
* overflows, and every behaviour above has nothing to act on.
|
|
29
|
-
*/
|
|
30
|
-
export declare const ChatBubbleList: React.ForwardRefExoticComponent<ChatBubbleListProp & Omit<React.HTMLAttributes<HTMLDivElement>, keyof ChatBubbleListProp> & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import * as React from "react";
|
|
4
|
-
import { ArrowDown } from "lucide-react";
|
|
5
|
-
import { useTranslation } from "../../i18n/use-translation.js";
|
|
6
|
-
import { useMediaQuery } from "../../lib/hooks.js";
|
|
7
|
-
import { cn } from "../../lib/utils.js";
|
|
8
|
-
import { Skeleton } from "../feedback/skeleton.js";
|
|
9
|
-
import { Button } from "../general/button.js";
|
|
10
|
-
import { Text } from "../general/typography.js";
|
|
11
|
-
import { VisuallyHidden } from "../general/visually-hidden.js";
|
|
12
|
-
import { ScrollArea } from "./scroll-area.js";
|
|
13
|
-
const BODY_SIZE = {
|
|
14
|
-
xs: "2xs",
|
|
15
|
-
sm: "xs",
|
|
16
|
-
md: "sm",
|
|
17
|
-
lg: "lg"
|
|
18
|
-
};
|
|
19
|
-
const META_SIZE = {
|
|
20
|
-
xs: "2xs",
|
|
21
|
-
sm: "2xs",
|
|
22
|
-
md: "xs",
|
|
23
|
-
lg: "sm"
|
|
24
|
-
};
|
|
25
|
-
const TYPING_STEP = 1;
|
|
26
|
-
const TYPING_INTERVAL = 50;
|
|
27
|
-
function resolveTyping(typing) {
|
|
28
|
-
if (typing === void 0 || typing === false) {
|
|
29
|
-
return { enabled: false, step: TYPING_STEP, interval: TYPING_INTERVAL };
|
|
30
|
-
}
|
|
31
|
-
if (typing === true) return { enabled: true, step: TYPING_STEP, interval: TYPING_INTERVAL };
|
|
32
|
-
return {
|
|
33
|
-
enabled: true,
|
|
34
|
-
// A non-positive step would never reach the end of the string and a non-positive interval
|
|
35
|
-
// would spin the timer — both are "the animation never completes", which is the one outcome
|
|
36
|
-
// a reader can neither read nor dismiss.
|
|
37
|
-
step: typing.step != null && typing.step > 0 ? Math.floor(typing.step) : TYPING_STEP,
|
|
38
|
-
interval: typing.interval != null && typing.interval > 0 ? typing.interval : TYPING_INTERVAL
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
function useRevealedLength(text, enabled, step, interval) {
|
|
42
|
-
const full = text?.length ?? 0;
|
|
43
|
-
const [revealed, setRevealed] = React.useState(() => enabled ? 0 : full);
|
|
44
|
-
React.useEffect(() => {
|
|
45
|
-
if (!enabled || text === void 0) {
|
|
46
|
-
setRevealed(text?.length ?? 0);
|
|
47
|
-
return void 0;
|
|
48
|
-
}
|
|
49
|
-
setRevealed(0);
|
|
50
|
-
let shown = 0;
|
|
51
|
-
const timer = setInterval(() => {
|
|
52
|
-
shown = Math.min(text.length, shown + step);
|
|
53
|
-
setRevealed(shown);
|
|
54
|
-
if (shown >= text.length) clearInterval(timer);
|
|
55
|
-
}, interval);
|
|
56
|
-
return () => {
|
|
57
|
-
clearInterval(timer);
|
|
58
|
-
};
|
|
59
|
-
}, [text, enabled, step, interval]);
|
|
60
|
-
return Math.min(revealed, full);
|
|
61
|
-
}
|
|
62
|
-
const TONE_KEY = {
|
|
63
|
-
info: "chat.bubble.tone.info",
|
|
64
|
-
success: "chat.bubble.tone.success",
|
|
65
|
-
warning: "chat.bubble.tone.warning",
|
|
66
|
-
destructive: "chat.bubble.tone.destructive"
|
|
67
|
-
};
|
|
68
|
-
const ChatBubble = React.forwardRef(
|
|
69
|
-
({
|
|
70
|
-
children,
|
|
71
|
-
placement = "start",
|
|
72
|
-
variant = "filled",
|
|
73
|
-
avatar,
|
|
74
|
-
header,
|
|
75
|
-
footer,
|
|
76
|
-
loading = false,
|
|
77
|
-
typing,
|
|
78
|
-
size = "md",
|
|
79
|
-
tone = "default",
|
|
80
|
-
className,
|
|
81
|
-
id,
|
|
82
|
-
...props
|
|
83
|
-
}, ref) => {
|
|
84
|
-
const { t } = useTranslation();
|
|
85
|
-
const generatedId = React.useId();
|
|
86
|
-
const headerId = `${id ?? generatedId}-header`;
|
|
87
|
-
const reduceMotion = useMediaQuery("(prefers-reduced-motion: reduce)");
|
|
88
|
-
const text = typeof children === "string" ? children : void 0;
|
|
89
|
-
const { enabled, step, interval } = resolveTyping(typing);
|
|
90
|
-
const animates = enabled && !loading && text !== void 0 && !reduceMotion;
|
|
91
|
-
const revealed = useRevealedLength(text, animates, step, interval);
|
|
92
|
-
const streaming = animates && revealed < (text?.length ?? 0);
|
|
93
|
-
const body = loading ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
94
|
-
/* @__PURE__ */ jsxs("div", { className: "ui-chat-bubble-skeleton", "aria-hidden": "true", children: [
|
|
95
|
-
/* @__PURE__ */ jsx(Skeleton, { className: "ui-chat-bubble-skeleton-line" }),
|
|
96
|
-
/* @__PURE__ */ jsx(Skeleton, { className: "ui-chat-bubble-skeleton-line ui-chat-bubble-skeleton-line--short" })
|
|
97
|
-
] }),
|
|
98
|
-
/* @__PURE__ */ jsx(VisuallyHidden, { children: t("chat.bubble.loading") })
|
|
99
|
-
] }) : streaming ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
100
|
-
/* @__PURE__ */ jsxs(Text, { as: "div", size: BODY_SIZE[size], whitespace: "pre-wrap", "aria-hidden": "true", children: [
|
|
101
|
-
text?.slice(0, revealed),
|
|
102
|
-
/* @__PURE__ */ jsx("span", { className: "ui-chat-bubble-caret" })
|
|
103
|
-
] }),
|
|
104
|
-
/* @__PURE__ */ jsx(VisuallyHidden, { children: t("chat.bubble.typing") })
|
|
105
|
-
] }) : /* @__PURE__ */ jsx(
|
|
106
|
-
Text,
|
|
107
|
-
{
|
|
108
|
-
as: "div",
|
|
109
|
-
size: BODY_SIZE[size],
|
|
110
|
-
whitespace: text !== void 0 ? "pre-wrap" : void 0,
|
|
111
|
-
children
|
|
112
|
-
}
|
|
113
|
-
);
|
|
114
|
-
return /* @__PURE__ */ jsxs(
|
|
115
|
-
"article",
|
|
116
|
-
{
|
|
117
|
-
ref,
|
|
118
|
-
id,
|
|
119
|
-
"data-slot": "chat-bubble",
|
|
120
|
-
"data-placement": placement,
|
|
121
|
-
"data-variant": variant,
|
|
122
|
-
"data-size": size,
|
|
123
|
-
"data-tone": tone,
|
|
124
|
-
"aria-busy": loading || streaming ? true : void 0,
|
|
125
|
-
"aria-labelledby": header != null ? headerId : void 0,
|
|
126
|
-
className: cn("ui-chat-bubble", className),
|
|
127
|
-
...props,
|
|
128
|
-
children: [
|
|
129
|
-
avatar != null ? /* @__PURE__ */ jsx("span", { "data-slot": "chat-bubble-avatar", className: "ui-chat-bubble-avatar", children: avatar }) : null,
|
|
130
|
-
/* @__PURE__ */ jsxs("div", { "data-slot": "chat-bubble-column", className: "ui-chat-bubble-column", children: [
|
|
131
|
-
header != null ? /* @__PURE__ */ jsx(
|
|
132
|
-
Text,
|
|
133
|
-
{
|
|
134
|
-
as: "div",
|
|
135
|
-
id: headerId,
|
|
136
|
-
className: "ui-chat-bubble-header",
|
|
137
|
-
size: META_SIZE[size],
|
|
138
|
-
tone: "muted",
|
|
139
|
-
weight: "medium",
|
|
140
|
-
children: header
|
|
141
|
-
}
|
|
142
|
-
) : null,
|
|
143
|
-
/* @__PURE__ */ jsxs("div", { "data-slot": "chat-bubble-body", className: "ui-chat-bubble-body", children: [
|
|
144
|
-
tone !== "default" ? /* @__PURE__ */ jsx(VisuallyHidden, { children: t(TONE_KEY[tone]) }) : null,
|
|
145
|
-
body
|
|
146
|
-
] }),
|
|
147
|
-
footer != null ? /* @__PURE__ */ jsx(Text, { as: "div", className: "ui-chat-bubble-footer", size: META_SIZE[size], tone: "muted", children: footer }) : null
|
|
148
|
-
] })
|
|
149
|
-
]
|
|
150
|
-
}
|
|
151
|
-
);
|
|
152
|
-
}
|
|
153
|
-
);
|
|
154
|
-
ChatBubble.displayName = "ChatBubble";
|
|
155
|
-
const ChatBubbleList = React.forwardRef(
|
|
156
|
-
({ items, roles, autoScroll = true, label, className, id, ...props }, ref) => {
|
|
157
|
-
const { t } = useTranslation();
|
|
158
|
-
const viewportRef = React.useRef(null);
|
|
159
|
-
const [anchored, setAnchored] = React.useState(true);
|
|
160
|
-
const seen = React.useRef(items.length);
|
|
161
|
-
React.useEffect(() => {
|
|
162
|
-
if (anchored) seen.current = items.length;
|
|
163
|
-
}, [anchored, items.length]);
|
|
164
|
-
const pending = anchored ? 0 : Math.max(0, items.length - seen.current);
|
|
165
|
-
const jumpToLatest = React.useCallback(() => {
|
|
166
|
-
const viewport = viewportRef.current;
|
|
167
|
-
if (viewport) {
|
|
168
|
-
const bottom = Math.max(0, viewport.scrollHeight - viewport.clientHeight);
|
|
169
|
-
if (typeof viewport.scrollTo === "function") {
|
|
170
|
-
viewport.scrollTo({ top: bottom, behavior: "instant" });
|
|
171
|
-
} else {
|
|
172
|
-
viewport.scrollTop = bottom;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
setAnchored(true);
|
|
176
|
-
}, []);
|
|
177
|
-
return /* @__PURE__ */ jsxs(
|
|
178
|
-
"div",
|
|
179
|
-
{
|
|
180
|
-
ref,
|
|
181
|
-
id,
|
|
182
|
-
"data-slot": "chat-bubble-list",
|
|
183
|
-
"data-anchored": anchored ? "" : void 0,
|
|
184
|
-
className: cn("ui-chat-bubble-list", className),
|
|
185
|
-
...props,
|
|
186
|
-
children: [
|
|
187
|
-
/* @__PURE__ */ jsx(
|
|
188
|
-
ScrollArea,
|
|
189
|
-
{
|
|
190
|
-
className: "ui-chat-bubble-list-scroller",
|
|
191
|
-
anchor: autoScroll ? "bottom" : "none",
|
|
192
|
-
viewportRef,
|
|
193
|
-
onAnchoredChange: setAnchored,
|
|
194
|
-
children: /* @__PURE__ */ jsx(
|
|
195
|
-
"div",
|
|
196
|
-
{
|
|
197
|
-
role: "log",
|
|
198
|
-
"aria-live": "polite",
|
|
199
|
-
"aria-label": label ?? t("chat.list.label"),
|
|
200
|
-
"data-slot": "chat-bubble-list-feed",
|
|
201
|
-
className: "ui-chat-bubble-list-feed",
|
|
202
|
-
children: items.map(({ id: messageId, role, content, ...message }) => /* @__PURE__ */ jsx(
|
|
203
|
-
ChatBubble,
|
|
204
|
-
{
|
|
205
|
-
id: messageId,
|
|
206
|
-
...role != null ? roles?.[role] : void 0,
|
|
207
|
-
...message,
|
|
208
|
-
children: content
|
|
209
|
-
},
|
|
210
|
-
messageId
|
|
211
|
-
))
|
|
212
|
-
}
|
|
213
|
-
)
|
|
214
|
-
}
|
|
215
|
-
),
|
|
216
|
-
anchored ? null : /* @__PURE__ */ jsx("div", { "data-slot": "chat-bubble-list-jump", className: "ui-chat-bubble-list-jump", children: /* @__PURE__ */ jsxs(Button, { type: "button", size: "sm", variant: "secondary", shape: "pill", onClick: jumpToLatest, children: [
|
|
217
|
-
/* @__PURE__ */ jsx(ArrowDown, { "aria-hidden": "true" }),
|
|
218
|
-
pending > 0 ? t("chat.list.newMessages", { count: pending }) : t("chat.list.jumpToLatest")
|
|
219
|
-
] }) })
|
|
220
|
-
]
|
|
221
|
-
}
|
|
222
|
-
);
|
|
223
|
-
}
|
|
224
|
-
);
|
|
225
|
-
ChatBubbleList.displayName = "ChatBubbleList";
|
|
226
|
-
export {
|
|
227
|
-
ChatBubble,
|
|
228
|
-
ChatBubbleList
|
|
229
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { HoverCard, HoverCardTrigger, HoverCardContent } from "../ui/hover-card.js";
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import type { ThoughtChainItemProp, ThoughtChainProp } from "../../props/components/data-display.prop.js";
|
|
3
|
-
export type { ThoughtChainProp, ThoughtChainProp as ThoughtChainProps, ThoughtChainItemsProp, ThoughtChainItemProp, ThoughtChainItemProp as ThoughtChainItemProps, ThoughtChainStatusProp, ThoughtChainLineProp, ThoughtChainVariantProp, } from "../../props/components/data-display.prop.js";
|
|
4
|
-
/**
|
|
5
|
-
* ThoughtChain — the assistant's reasoning, step by step (Ant Design X `ThoughtChain`).
|
|
6
|
-
*
|
|
7
|
-
* ## The shape, and why it is an `<ol>`
|
|
8
|
-
*
|
|
9
|
-
* Ant renders the whole chain as nested `<div>`s and paints the step number itself
|
|
10
|
-
* (`index + 1` in `es/thought-chain/Node.js`). The order of the steps IS the content here — step 3
|
|
11
|
-
* only makes sense after step 2 — so the chain is an ordered list and a screen reader gets "list,
|
|
12
|
-
* 4 items" plus each step's position for free. The visible ordinal stays, because the same number
|
|
13
|
-
* has to be on screen for a sighted reader following a long chain.
|
|
14
|
-
*
|
|
15
|
-
* ## The disclosure is a real button
|
|
16
|
-
*
|
|
17
|
-
* A `collapsible` step's title in Ant is a `<div onClick>` with a rotating chevron — no role, no
|
|
18
|
-
* `tabIndex`, no `aria-expanded`. Here it is a `<button aria-expanded aria-controls>` over the
|
|
19
|
-
* body it opens: the WAI-ARIA APG Disclosure pattern, so the step can be opened from the keyboard
|
|
20
|
-
* and its state is announced rather than inferred from a rotation.
|
|
21
|
-
*
|
|
22
|
-
* Everything a caller passes keeps Ant's spelling: `items` (with `icon`, `title`, `description`,
|
|
23
|
-
* `content`, `footer`, `status`, `collapsible`, `blink`, `destroyOnHidden`), the
|
|
24
|
-
* `defaultExpandedKeys` / `expandedKeys` / `onExpand` triad, and `line`. `styles` / `classNames` /
|
|
25
|
-
* `prefixCls` / `rootClassName` are not ported — the standing style-hole decision
|
|
26
|
-
* (docs/WHAT-BELONGS-HERE.md, docs/DESIGN-AUTHORITY.md); the chain is retuned through
|
|
27
|
-
* `src/tokens/components/thought-chain.css`.
|
|
28
|
-
*/
|
|
29
|
-
export declare const ThoughtChain: React.ForwardRefExoticComponent<ThoughtChainProp & React.RefAttributes<HTMLOListElement>>;
|
|
30
|
-
/**
|
|
31
|
-
* ThoughtChainItem — one step OUTSIDE a chain (Ant Design X `ThoughtChain.Item`).
|
|
32
|
-
*
|
|
33
|
-
* A named export rather than `ThoughtChain.Item`, for the same reason `ActionsItem` is: every
|
|
34
|
-
* compound in this library is separate named exports (`CardHeader`, `TabsList`), and attaching
|
|
35
|
-
* statics to one component would be the only instance of it here.
|
|
36
|
-
*
|
|
37
|
-
* ONE DEVIATION: Ant renders the chip as a `<div>` and hangs `onClick` on it, so a clickable step
|
|
38
|
-
* is invisible to the keyboard and to assistive technology. Here an item WITH `onClick` renders a
|
|
39
|
-
* real `<button>` and one without renders a plain `<div>` — the element follows whether the thing
|
|
40
|
-
* is actually a control.
|
|
41
|
-
*/
|
|
42
|
-
export declare const ThoughtChainItem: React.ForwardRefExoticComponent<ThoughtChainItemProp & React.RefAttributes<HTMLElement>>;
|
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import * as React from "react";
|
|
4
|
-
import { ChevronRight, CircleCheck, CircleMinus, CircleX, Loader2 } from "lucide-react";
|
|
5
|
-
import { useTranslation } from "../../i18n/use-translation.js";
|
|
6
|
-
import { cn } from "../../lib/utils.js";
|
|
7
|
-
import { VisuallyHidden } from "../general/visually-hidden.js";
|
|
8
|
-
import { Text } from "../general/typography.js";
|
|
9
|
-
const STATUS_GLYPH = {
|
|
10
|
-
loading: /* @__PURE__ */ jsx(Loader2, { "aria-hidden": "true", className: "ui-thought-chain-spinner" }),
|
|
11
|
-
success: /* @__PURE__ */ jsx(CircleCheck, { "aria-hidden": "true" }),
|
|
12
|
-
error: /* @__PURE__ */ jsx(CircleX, { "aria-hidden": "true" }),
|
|
13
|
-
abort: /* @__PURE__ */ jsx(CircleMinus, { "aria-hidden": "true" })
|
|
14
|
-
};
|
|
15
|
-
function StatusMark({
|
|
16
|
-
status,
|
|
17
|
-
fallback
|
|
18
|
-
}) {
|
|
19
|
-
const { t } = useTranslation();
|
|
20
|
-
if (!status) return /* @__PURE__ */ jsx(Fragment, { children: fallback });
|
|
21
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
22
|
-
STATUS_GLYPH[status],
|
|
23
|
-
/* @__PURE__ */ jsx(VisuallyHidden, { children: t(`dataDisplay.thoughtChain.status.${status}`) })
|
|
24
|
-
] });
|
|
25
|
-
}
|
|
26
|
-
const ThoughtChain = React.forwardRef(
|
|
27
|
-
({
|
|
28
|
-
items = [],
|
|
29
|
-
defaultExpandedKeys,
|
|
30
|
-
expandedKeys,
|
|
31
|
-
onExpand,
|
|
32
|
-
line = true,
|
|
33
|
-
label,
|
|
34
|
-
id,
|
|
35
|
-
className,
|
|
36
|
-
...rest
|
|
37
|
-
}, ref) => {
|
|
38
|
-
const { t } = useTranslation();
|
|
39
|
-
const reactId = React.useId();
|
|
40
|
-
const [uncontrolled, setUncontrolled] = React.useState(() => [
|
|
41
|
-
...defaultExpandedKeys ?? []
|
|
42
|
-
]);
|
|
43
|
-
const open = expandedKeys ? [...expandedKeys] : uncontrolled;
|
|
44
|
-
const toggle = (key) => {
|
|
45
|
-
const next = open.includes(key) ? open.filter((k) => k !== key) : [...open, key];
|
|
46
|
-
if (!expandedKeys) setUncontrolled(next);
|
|
47
|
-
onExpand?.(next);
|
|
48
|
-
};
|
|
49
|
-
return /* @__PURE__ */ jsx(
|
|
50
|
-
"ol",
|
|
51
|
-
{
|
|
52
|
-
ref,
|
|
53
|
-
id,
|
|
54
|
-
"aria-label": label ?? t("dataDisplay.thoughtChain.label"),
|
|
55
|
-
"data-slot": "thought-chain",
|
|
56
|
-
"data-line": line === false ? "none" : line === true ? "solid" : line,
|
|
57
|
-
className: cn("ui-thought-chain", className),
|
|
58
|
-
...rest,
|
|
59
|
-
children: items.map((item, index) => {
|
|
60
|
-
const key = item.key ?? `${reactId}-${index}`;
|
|
61
|
-
const bodyId = `${reactId}-body-${index}`;
|
|
62
|
-
const collapsible = Boolean(item.collapsible && item.content);
|
|
63
|
-
const expanded = collapsible ? open.includes(key) : true;
|
|
64
|
-
const glyph = item.icon === false ? null : item.icon ?? index + 1;
|
|
65
|
-
return /* @__PURE__ */ jsxs(
|
|
66
|
-
"li",
|
|
67
|
-
{
|
|
68
|
-
"data-slot": "thought-chain-node",
|
|
69
|
-
"data-status": item.status,
|
|
70
|
-
className: "ui-thought-chain-node",
|
|
71
|
-
children: [
|
|
72
|
-
glyph === null ? null : /* @__PURE__ */ jsx(
|
|
73
|
-
"span",
|
|
74
|
-
{
|
|
75
|
-
"data-slot": "thought-chain-icon",
|
|
76
|
-
"data-status": item.status,
|
|
77
|
-
className: "ui-thought-chain-icon",
|
|
78
|
-
children: /* @__PURE__ */ jsx(StatusMark, { status: item.status, fallback: glyph })
|
|
79
|
-
}
|
|
80
|
-
),
|
|
81
|
-
/* @__PURE__ */ jsxs("div", { className: "ui-thought-chain-body", children: [
|
|
82
|
-
/* @__PURE__ */ jsxs("div", { className: "ui-thought-chain-header", children: [
|
|
83
|
-
collapsible ? /* @__PURE__ */ jsxs(
|
|
84
|
-
"button",
|
|
85
|
-
{
|
|
86
|
-
type: "button",
|
|
87
|
-
"aria-expanded": expanded,
|
|
88
|
-
"aria-controls": bodyId,
|
|
89
|
-
"data-blink": item.blink ? "" : void 0,
|
|
90
|
-
className: "ui-thought-chain-trigger",
|
|
91
|
-
onClick: () => toggle(key),
|
|
92
|
-
children: [
|
|
93
|
-
/* @__PURE__ */ jsx(
|
|
94
|
-
ChevronRight,
|
|
95
|
-
{
|
|
96
|
-
"aria-hidden": "true",
|
|
97
|
-
"data-expanded": expanded ? "true" : void 0,
|
|
98
|
-
className: "ui-thought-chain-chevron"
|
|
99
|
-
}
|
|
100
|
-
),
|
|
101
|
-
/* @__PURE__ */ jsx(Text, { weight: "medium", children: item.title })
|
|
102
|
-
]
|
|
103
|
-
}
|
|
104
|
-
) : /* @__PURE__ */ jsx(Text, { weight: "medium", "data-blink": item.blink ? "" : void 0, children: item.title }),
|
|
105
|
-
item.description ? /* @__PURE__ */ jsx(Text, { size: "xs", tone: "muted", children: item.description }) : null
|
|
106
|
-
] }),
|
|
107
|
-
item.content && (expanded || item.destroyOnHidden === false) ? /* @__PURE__ */ jsx(
|
|
108
|
-
"div",
|
|
109
|
-
{
|
|
110
|
-
id: bodyId,
|
|
111
|
-
hidden: !expanded,
|
|
112
|
-
"data-blink": item.blink ? "" : void 0,
|
|
113
|
-
className: "ui-thought-chain-content",
|
|
114
|
-
children: item.content
|
|
115
|
-
}
|
|
116
|
-
) : null,
|
|
117
|
-
item.footer ? /* @__PURE__ */ jsx("div", { className: "ui-thought-chain-footer", children: item.footer }) : null
|
|
118
|
-
] })
|
|
119
|
-
]
|
|
120
|
-
},
|
|
121
|
-
key
|
|
122
|
-
);
|
|
123
|
-
})
|
|
124
|
-
}
|
|
125
|
-
);
|
|
126
|
-
}
|
|
127
|
-
);
|
|
128
|
-
ThoughtChain.displayName = "ThoughtChain";
|
|
129
|
-
const ThoughtChainItem = React.forwardRef(
|
|
130
|
-
({
|
|
131
|
-
title,
|
|
132
|
-
description,
|
|
133
|
-
icon,
|
|
134
|
-
status,
|
|
135
|
-
variant = "solid",
|
|
136
|
-
blink,
|
|
137
|
-
disabled,
|
|
138
|
-
onClick,
|
|
139
|
-
id,
|
|
140
|
-
className
|
|
141
|
-
}, ref) => {
|
|
142
|
-
const shared = {
|
|
143
|
-
id,
|
|
144
|
-
"data-slot": "thought-chain-item",
|
|
145
|
-
"data-variant": variant,
|
|
146
|
-
"data-status": status,
|
|
147
|
-
"data-blink": blink ? "" : void 0,
|
|
148
|
-
className: cn("ui-thought-chain-item", className)
|
|
149
|
-
};
|
|
150
|
-
const inner = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
151
|
-
status || icon ? /* @__PURE__ */ jsx("span", { "data-status": status, className: "ui-thought-chain-icon", children: /* @__PURE__ */ jsx(StatusMark, { status, fallback: icon }) }) : null,
|
|
152
|
-
/* @__PURE__ */ jsxs("span", { className: "ui-thought-chain-item-text", children: [
|
|
153
|
-
title ? /* @__PURE__ */ jsx(Text, { weight: "medium", children: title }) : null,
|
|
154
|
-
description ? /* @__PURE__ */ jsx(Text, { size: "xs", tone: "muted", children: description }) : null
|
|
155
|
-
] })
|
|
156
|
-
] });
|
|
157
|
-
if (!onClick) {
|
|
158
|
-
return /* @__PURE__ */ jsx("div", { ref, ...shared, children: inner });
|
|
159
|
-
}
|
|
160
|
-
return /* @__PURE__ */ jsx(
|
|
161
|
-
"button",
|
|
162
|
-
{
|
|
163
|
-
ref,
|
|
164
|
-
type: "button",
|
|
165
|
-
disabled,
|
|
166
|
-
onClick,
|
|
167
|
-
...shared,
|
|
168
|
-
children: inner
|
|
169
|
-
}
|
|
170
|
-
);
|
|
171
|
-
}
|
|
172
|
-
);
|
|
173
|
-
ThoughtChainItem.displayName = "ThoughtChainItem";
|
|
174
|
-
export {
|
|
175
|
-
ThoughtChain,
|
|
176
|
-
ThoughtChainItem
|
|
177
|
-
};
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
export type { ThumbnailProp, ThumbnailProp as ThumbnailProps, ThumbnailSizeProp, } from "../../props/components/data-display.prop.js";
|
|
3
|
-
/**
|
|
4
|
-
* Thumbnail — a framed picture at a FIXED HEIGHT and its OWN intrinsic width.
|
|
5
|
-
*
|
|
6
|
-
* That combination is the whole component. A wrapping row of screenshots holds portrait and
|
|
7
|
-
* landscape shots together; equal heights make the row read as one strip, and letting each
|
|
8
|
-
* width follow its own ratio is what keeps every shot uncropped.
|
|
9
|
-
*
|
|
10
|
-
* ## Why not the four components it is mistaken for
|
|
11
|
-
*
|
|
12
|
-
* - **`AspectRatio`** constrains a RATIO and spans `width: 100%`. Two different intrinsic ratios
|
|
13
|
-
* in one row can only be forced into one number by letterboxing or cropping them, which is the
|
|
14
|
-
* opposite of the requirement. It also draws no frame.
|
|
15
|
-
* - **`Avatar`** is an identity mark (with initials fallback), not a picture.
|
|
16
|
-
* - **`Card`** puts padding between its edge and the picture. The frame here is ON the image.
|
|
17
|
-
* - **`CardCover`** is the full-bleed media slot INSIDE a Card, not a standalone thumbnail.
|
|
18
|
-
*
|
|
19
|
-
* ## The frame is on the `<img>` itself
|
|
20
|
-
*
|
|
21
|
-
* No wrapper element. A wrapper would have to be told the image's width to hug it, which is
|
|
22
|
-
* exactly the number nobody has until the picture loads; a border on the replaced element is
|
|
23
|
-
* flush by construction at every ratio.
|
|
24
|
-
*
|
|
25
|
-
* ## Reserve the width before the picture arrives
|
|
26
|
-
*
|
|
27
|
-
* With an intrinsic width there is nothing to lay out until the bytes land, so a row of these
|
|
28
|
-
* reflows as they load. Pass the file's real pixel `width` and `height` attributes — the browser
|
|
29
|
-
* derives the ratio from them, and with the block size already fixed the frame takes its final
|
|
30
|
-
* width on the first paint (`<Thumbnail width={1280} height={800} … />`).
|
|
31
|
-
*/
|
|
32
|
-
export declare const Thumbnail: React.ForwardRefExoticComponent<Omit<React.ImgHTMLAttributes<HTMLImageElement>, "alt"> & {
|
|
33
|
-
src: string;
|
|
34
|
-
alt: string;
|
|
35
|
-
size?: import("./thumbnail.js").ThumbnailSizeProp;
|
|
36
|
-
className?: import("../../props/index.js").ClassNameProp;
|
|
37
|
-
} & React.RefAttributes<HTMLImageElement>>;
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import * as React from "react";
|
|
3
|
-
import { cn } from "../../lib/utils.js";
|
|
4
|
-
const Thumbnail = React.forwardRef(
|
|
5
|
-
({ size = "md", className, alt, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
6
|
-
"img",
|
|
7
|
-
{
|
|
8
|
-
ref,
|
|
9
|
-
"data-slot": "thumbnail",
|
|
10
|
-
"data-size": size,
|
|
11
|
-
alt,
|
|
12
|
-
className: cn("ui-thumbnail", className),
|
|
13
|
-
...props
|
|
14
|
-
}
|
|
15
|
-
)
|
|
16
|
-
);
|
|
17
|
-
Thumbnail.displayName = "Thumbnail";
|
|
18
|
-
export {
|
|
19
|
-
Thumbnail
|
|
20
|
-
};
|