@godxjp/ui 31.31.7 → 32.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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/tokens.generated.d.ts +6 -6
- package/dist/email/tokens.generated.js +6 -6
- 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/dialog-layout.css +4 -0
- 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.css +43 -0
- package/dist/themes/godx.d.ts +13 -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 +98 -0
- package/package.json +58 -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 +522 -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/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
|
-
};
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import * as React from "react";
|
|
2
|
-
import type { WelcomeProp } from "../../props/components/data-display.prop.js";
|
|
3
|
-
export type { WelcomeProp, WelcomeProp as WelcomeProps, WelcomeVariantProp, } from "../../props/components/data-display.prop.js";
|
|
4
|
-
/**
|
|
5
|
-
* Welcome — the greeting block at the head of an empty conversation (Ant Design X `Welcome`).
|
|
6
|
-
*
|
|
7
|
-
* ## Why this is a component and not four lines of composition
|
|
8
|
-
*
|
|
9
|
-
* It is close to the line, and the honest answer is that the SHAPE is the value: an assistant's
|
|
10
|
-
* first screen is the same object in every product — glyph, greeting, one line under it, one
|
|
11
|
-
* trailing action — and Ant X named it, so every consumer that builds a chat now expects the name.
|
|
12
|
-
* What it owns beyond a `Flex` is the `extra` slot's placement (on the TITLE row, not below the
|
|
13
|
-
* description, which is where a hand-roll puts it) and the `icon`-as-URL rule below.
|
|
14
|
-
*
|
|
15
|
-
* ## Two deliberate differences from Ant X, both in the same direction
|
|
16
|
-
*
|
|
17
|
-
* - **The image icon is decorative.** Ant renders `alt="icon"` — a screen reader then reads the
|
|
18
|
-
* word "icon" beside a title the glyph is only decorating. Here it is `alt=""`, which is what an
|
|
19
|
-
* image that duplicates adjacent text is supposed to be.
|
|
20
|
-
* - **The heading level is Ant's.** Ant hardcodes `Typography.Title level={4}`, so this renders an
|
|
21
|
-
* `<h4>`. Hardcoding a level is a document-structure decision a component should not normally
|
|
22
|
-
* make, but the alternative — inventing a `level` prop Ant does not have — is a second spelling
|
|
23
|
-
* of an axis the issue asked to port verbatim. Wrap it in your own heading hierarchy if the page
|
|
24
|
-
* needs a different rung.
|
|
25
|
-
*/
|
|
26
|
-
export declare const Welcome: React.ForwardRefExoticComponent<WelcomeProp & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import * as React from "react";
|
|
4
|
-
import { cn } from "../../lib/utils.js";
|
|
5
|
-
import { Heading, Text } from "../general/typography.js";
|
|
6
|
-
function isImageUrl(icon) {
|
|
7
|
-
return typeof icon === "string" && icon.startsWith("http");
|
|
8
|
-
}
|
|
9
|
-
const Welcome = React.forwardRef(
|
|
10
|
-
({ icon, title, description, extra, variant = "filled", id, className, ...rest }, ref) => {
|
|
11
|
-
return /* @__PURE__ */ jsxs(
|
|
12
|
-
"div",
|
|
13
|
-
{
|
|
14
|
-
ref,
|
|
15
|
-
id,
|
|
16
|
-
"data-slot": "welcome",
|
|
17
|
-
"data-variant": variant,
|
|
18
|
-
className: cn("ui-welcome", className),
|
|
19
|
-
...rest,
|
|
20
|
-
children: [
|
|
21
|
-
icon ? /* @__PURE__ */ jsx("div", { "data-slot": "welcome-icon", className: "ui-welcome-icon", "aria-hidden": "true", children: isImageUrl(icon) ? /* @__PURE__ */ jsx("img", { src: icon, alt: "" }) : icon }) : null,
|
|
22
|
-
/* @__PURE__ */ jsxs("div", { "data-slot": "welcome-content", className: "ui-welcome-content", children: [
|
|
23
|
-
title || extra ? /* @__PURE__ */ jsxs("div", { "data-slot": "welcome-title-row", className: "ui-welcome-title-row", children: [
|
|
24
|
-
title ? /* @__PURE__ */ jsx(Heading, { level: 4, className: "ui-welcome-title", children: title }) : null,
|
|
25
|
-
extra ? /* @__PURE__ */ jsx("div", { "data-slot": "welcome-extra", className: "ui-welcome-extra", children: extra }) : null
|
|
26
|
-
] }) : null,
|
|
27
|
-
description ? /* @__PURE__ */ jsx(Text, { size: "sm", tone: "muted", className: "ui-welcome-description", children: description }) : null
|
|
28
|
-
] })
|
|
29
|
-
]
|
|
30
|
-
}
|
|
31
|
-
);
|
|
32
|
-
}
|
|
33
|
-
);
|
|
34
|
-
Welcome.displayName = "Welcome";
|
|
35
|
-
export {
|
|
36
|
-
Welcome
|
|
37
|
-
};
|