willa-workspace 0.0.3-alpha.2739b3e
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/.github/workflows/deploy.yml +45 -0
- package/.husky/pre-commit +1 -0
- package/AGENTS.md +128 -0
- package/CONTRIBUTING.md +138 -0
- package/README.md +27 -0
- package/docs/architecture.md +337 -0
- package/docs/component.md +333 -0
- package/docs/css.md +400 -0
- package/docs/style.md +146 -0
- package/example/index.html +12 -0
- package/example/package.json +28 -0
- package/example/src/App.tsx +613 -0
- package/example/src/UsageGuide.tsx +179 -0
- package/example/src/catalog/DocView.tsx +413 -0
- package/example/src/catalog/defineDoc.tsx +352 -0
- package/example/src/catalog/registry.ts +206 -0
- package/example/src/catalog/types.ts +38 -0
- package/example/src/docs/Alert.demo.tsx +233 -0
- package/example/src/docs/Anchor.demo.tsx +244 -0
- package/example/src/docs/AppShell.demo.tsx +192 -0
- package/example/src/docs/AttachmentList.demo.tsx +425 -0
- package/example/src/docs/AudioEmbed.demo.tsx +102 -0
- package/example/src/docs/AudioLink.demo.tsx +84 -0
- package/example/src/docs/Avatar.demo.tsx +342 -0
- package/example/src/docs/Badge.demo.tsx +196 -0
- package/example/src/docs/BorderBeam.demo.tsx +261 -0
- package/example/src/docs/Breadcrumb.demo.tsx +194 -0
- package/example/src/docs/Button.demo.tsx +304 -0
- package/example/src/docs/Calendar.demo.tsx +742 -0
- package/example/src/docs/Callout.demo.tsx +143 -0
- package/example/src/docs/Card.demo.tsx +254 -0
- package/example/src/docs/Carousel.demo.tsx +764 -0
- package/example/src/docs/ChatMessage.demo.tsx +356 -0
- package/example/src/docs/ChatThread.demo.tsx +107 -0
- package/example/src/docs/Checkbox.demo.tsx +112 -0
- package/example/src/docs/Citation.demo.tsx +297 -0
- package/example/src/docs/CodeBlock.demo.tsx +175 -0
- package/example/src/docs/CodeTabs.demo.tsx +285 -0
- package/example/src/docs/Collapse.demo.tsx +306 -0
- package/example/src/docs/ColorPicker.demo.tsx +491 -0
- package/example/src/docs/Comment.demo.tsx +333 -0
- package/example/src/docs/CommentInput.demo.tsx +894 -0
- package/example/src/docs/CommentList.demo.tsx +344 -0
- package/example/src/docs/Composer.demo.tsx +435 -0
- package/example/src/docs/Container.demo.tsx +125 -0
- package/example/src/docs/ContextPanel.demo.tsx +344 -0
- package/example/src/docs/ContextWindowMeter.demo.tsx +212 -0
- package/example/src/docs/ConversationList.demo.tsx +289 -0
- package/example/src/docs/CopyButton.demo.tsx +274 -0
- package/example/src/docs/DatePicker.demo.tsx +502 -0
- package/example/src/docs/DescriptionList.demo.tsx +265 -0
- package/example/src/docs/Dialog.demo.tsx +492 -0
- package/example/src/docs/DiffViewer.demo.tsx +307 -0
- package/example/src/docs/Download.demo.tsx +182 -0
- package/example/src/docs/Drawer.demo.tsx +300 -0
- package/example/src/docs/EmptyState.demo.tsx +406 -0
- package/example/src/docs/EnglishCards.demo.tsx +133 -0
- package/example/src/docs/FeedbackBar.demo.tsx +219 -0
- package/example/src/docs/FileCard.demo.tsx +234 -0
- package/example/src/docs/FilePreview.demo.tsx +333 -0
- package/example/src/docs/FileTree.demo.tsx +463 -0
- package/example/src/docs/FilterBar.demo.tsx +290 -0
- package/example/src/docs/FloatButton.demo.tsx +726 -0
- package/example/src/docs/Form.demo.tsx +278 -0
- package/example/src/docs/FormActions.demo.tsx +198 -0
- package/example/src/docs/FormField.demo.tsx +193 -0
- package/example/src/docs/FormGroup.demo.tsx +188 -0
- package/example/src/docs/FormMessage.demo.tsx +158 -0
- package/example/src/docs/GenerationCard.demo.tsx +393 -0
- package/example/src/docs/GitHubMention.demo.tsx +83 -0
- package/example/src/docs/GitHubRepo.demo.tsx +88 -0
- package/example/src/docs/Grid.demo.tsx +218 -0
- package/example/src/docs/Group.demo.tsx +315 -0
- package/example/src/docs/HumanApprovalCard.demo.tsx +275 -0
- package/example/src/docs/IconButton.demo.tsx +354 -0
- package/example/src/docs/Image.demo.tsx +124 -0
- package/example/src/docs/ImageGallery.demo.tsx +206 -0
- package/example/src/docs/Input.demo.tsx +238 -0
- package/example/src/docs/InputPanel.demo.tsx +255 -0
- package/example/src/docs/Kbd.demo.tsx +162 -0
- package/example/src/docs/Lightbox.demo.tsx +184 -0
- package/example/src/docs/List.demo.tsx +1009 -0
- package/example/src/docs/LogoWall.demo.tsx +178 -0
- package/example/src/docs/Masonry.demo.tsx +170 -0
- package/example/src/docs/MathExpression.demo.tsx +164 -0
- package/example/src/docs/Mdx.demo.tsx +343 -0
- package/example/src/docs/MentionInput.demo.tsx +543 -0
- package/example/src/docs/Menu.demo.tsx +430 -0
- package/example/src/docs/MessageActions.demo.tsx +355 -0
- package/example/src/docs/MessageList.demo.tsx +410 -0
- package/example/src/docs/ModelSelector.demo.tsx +297 -0
- package/example/src/docs/NumberInput.demo.tsx +816 -0
- package/example/src/docs/PageHeader.demo.tsx +198 -0
- package/example/src/docs/Pagination.demo.tsx +257 -0
- package/example/src/docs/Panel.demo.tsx +184 -0
- package/example/src/docs/Picker.demo.tsx +257 -0
- package/example/src/docs/Poem.demo.tsx +98 -0
- package/example/src/docs/Popover.demo.tsx +362 -0
- package/example/src/docs/ProfileCard.demo.tsx +161 -0
- package/example/src/docs/Progress.demo.tsx +243 -0
- package/example/src/docs/PromptInput.demo.tsx +497 -0
- package/example/src/docs/PromptTemplatePicker.demo.tsx +344 -0
- package/example/src/docs/QRCode.demo.tsx +364 -0
- package/example/src/docs/Radio.demo.tsx +120 -0
- package/example/src/docs/RangeInput.demo.tsx +405 -0
- package/example/src/docs/Rate.demo.tsx +396 -0
- package/example/src/docs/ReasoningSteps.demo.tsx +470 -0
- package/example/src/docs/Result.demo.tsx +121 -0
- package/example/src/docs/ScheduleCalendar.demo.tsx +459 -0
- package/example/src/docs/SearchInput.demo.tsx +217 -0
- package/example/src/docs/SectionHeader.demo.tsx +186 -0
- package/example/src/docs/Segmented.demo.tsx +598 -0
- package/example/src/docs/Select.demo.tsx +164 -0
- package/example/src/docs/SelectionBar.demo.tsx +315 -0
- package/example/src/docs/Separator.demo.tsx +179 -0
- package/example/src/docs/SidebarLayout.demo.tsx +183 -0
- package/example/src/docs/SiteFooter.demo.tsx +189 -0
- package/example/src/docs/SiteNav.demo.tsx +168 -0
- package/example/src/docs/Skeleton.demo.tsx +154 -0
- package/example/src/docs/SourceCard.demo.tsx +241 -0
- package/example/src/docs/Spinner.demo.tsx +166 -0
- package/example/src/docs/SplitPane.demo.tsx +544 -0
- package/example/src/docs/Stack.demo.tsx +135 -0
- package/example/src/docs/Statistic.demo.tsx +124 -0
- package/example/src/docs/Steps.demo.tsx +88 -0
- package/example/src/docs/SuggestionChips.demo.tsx +259 -0
- package/example/src/docs/Switch.demo.tsx +110 -0
- package/example/src/docs/Table.demo.tsx +2071 -0
- package/example/src/docs/Tabs.demo.tsx +285 -0
- package/example/src/docs/Tag.demo.tsx +264 -0
- package/example/src/docs/TagInput.demo.tsx +385 -0
- package/example/src/docs/TextArea.demo.tsx +185 -0
- package/example/src/docs/ThinkingIndicator.demo.tsx +248 -0
- package/example/src/docs/TimePicker.demo.tsx +464 -0
- package/example/src/docs/Timeline.demo.tsx +311 -0
- package/example/src/docs/Toast.demo.tsx +351 -0
- package/example/src/docs/ToolCallCard.demo.tsx +286 -0
- package/example/src/docs/Toolbar.demo.tsx +372 -0
- package/example/src/docs/Tooltip.demo.tsx +274 -0
- package/example/src/docs/Tour.demo.tsx +423 -0
- package/example/src/docs/TraceViewer.demo.tsx +416 -0
- package/example/src/docs/Tree.demo.tsx +507 -0
- package/example/src/docs/TreeSelect.demo.tsx +476 -0
- package/example/src/docs/Typography.demo.tsx +953 -0
- package/example/src/docs/Upload.demo.tsx +299 -0
- package/example/src/docs/VideoEmbed.demo.tsx +108 -0
- package/example/src/docs/VideoLink.demo.tsx +83 -0
- package/example/src/docs/Watermark.demo.tsx +352 -0
- package/example/src/docs/WebEmbed.demo.tsx +96 -0
- package/example/src/docs/XPostEmbed.demo.tsx +57 -0
- package/example/src/main.tsx +36 -0
- package/example/src/styles.css +919 -0
- package/example/src/vite-env.d.ts +1 -0
- package/example/vite.config.ts +11 -0
- package/package.json +40 -0
- package/packages/willa/README.md +47 -0
- package/packages/willa/auklet.config.mjs +23 -0
- package/packages/willa/package.json +83 -0
- package/packages/willa/src/Alert/index.tsx +8 -0
- package/packages/willa/src/Anchor/index.tsx +8 -0
- package/packages/willa/src/AppShell/index.tsx +2 -0
- package/packages/willa/src/AttachmentList/index.tsx +10 -0
- package/packages/willa/src/AudioEmbed/index.tsx +4 -0
- package/packages/willa/src/AudioLink/index.tsx +4 -0
- package/packages/willa/src/Avatar/index.tsx +6 -0
- package/packages/willa/src/Badge/index.tsx +7 -0
- package/packages/willa/src/BorderBeam/index.tsx +6 -0
- package/packages/willa/src/Breadcrumb/index.tsx +6 -0
- package/packages/willa/src/Button/index.tsx +6 -0
- package/packages/willa/src/Calendar/index.tsx +19 -0
- package/packages/willa/src/Callout/index.tsx +5 -0
- package/packages/willa/src/Card/index.tsx +6 -0
- package/packages/willa/src/Carousel/index.tsx +8 -0
- package/packages/willa/src/ChatMessage/index.tsx +6 -0
- package/packages/willa/src/ChatThread/index.tsx +4 -0
- package/packages/willa/src/Checkbox/index.tsx +5 -0
- package/packages/willa/src/Citation/index.tsx +6 -0
- package/packages/willa/src/CodeBlock/index.tsx +5 -0
- package/packages/willa/src/CodeTabs/index.tsx +6 -0
- package/packages/willa/src/Collapse/index.tsx +5 -0
- package/packages/willa/src/ColorPicker/index.tsx +12 -0
- package/packages/willa/src/Comment/index.tsx +6 -0
- package/packages/willa/src/CommentInput/index.tsx +8 -0
- package/packages/willa/src/CommentList/index.tsx +5 -0
- package/packages/willa/src/Composer/index.tsx +1 -0
- package/packages/willa/src/Container/index.tsx +6 -0
- package/packages/willa/src/ContextPanel/index.tsx +7 -0
- package/packages/willa/src/ContextWindowMeter/index.tsx +7 -0
- package/packages/willa/src/ConversationList/index.tsx +8 -0
- package/packages/willa/src/CopyButton/index.tsx +6 -0
- package/packages/willa/src/DatePicker/index.tsx +15 -0
- package/packages/willa/src/DescriptionList/index.tsx +8 -0
- package/packages/willa/src/Dialog/index.tsx +6 -0
- package/packages/willa/src/DiffViewer/index.tsx +5 -0
- package/packages/willa/src/Download/index.tsx +6 -0
- package/packages/willa/src/Drawer/index.tsx +6 -0
- package/packages/willa/src/EmptyState/index.tsx +7 -0
- package/packages/willa/src/EnglishCards/index.tsx +4 -0
- package/packages/willa/src/FeedbackBar/index.tsx +7 -0
- package/packages/willa/src/FileCard/index.tsx +7 -0
- package/packages/willa/src/FilePreview/index.tsx +6 -0
- package/packages/willa/src/FileTree/index.tsx +10 -0
- package/packages/willa/src/FilterBar/index.tsx +7 -0
- package/packages/willa/src/FloatButton/index.tsx +14 -0
- package/packages/willa/src/Form/index.tsx +5 -0
- package/packages/willa/src/FormActions/index.tsx +6 -0
- package/packages/willa/src/FormField/index.tsx +6 -0
- package/packages/willa/src/FormGroup/index.tsx +6 -0
- package/packages/willa/src/FormMessage/index.tsx +5 -0
- package/packages/willa/src/GenerationCard/index.tsx +6 -0
- package/packages/willa/src/GitHubMention/index.tsx +4 -0
- package/packages/willa/src/GitHubRepo/index.tsx +4 -0
- package/packages/willa/src/Grid/index.tsx +8 -0
- package/packages/willa/src/Group/index.tsx +9 -0
- package/packages/willa/src/HumanApprovalCard/index.tsx +8 -0
- package/packages/willa/src/IconButton/index.tsx +7 -0
- package/packages/willa/src/Image/index.tsx +1 -0
- package/packages/willa/src/ImageGallery/index.tsx +5 -0
- package/packages/willa/src/Input/index.tsx +6 -0
- package/packages/willa/src/InputPanel/index.tsx +8 -0
- package/packages/willa/src/Kbd/index.tsx +9 -0
- package/packages/willa/src/Lightbox/index.tsx +7 -0
- package/packages/willa/src/List/index.tsx +10 -0
- package/packages/willa/src/LogoWall/index.tsx +6 -0
- package/packages/willa/src/Masonry/index.tsx +6 -0
- package/packages/willa/src/MathExpression/index.tsx +5 -0
- package/packages/willa/src/Mdx/index.tsx +1 -0
- package/packages/willa/src/MentionInput/index.tsx +5 -0
- package/packages/willa/src/Menu/index.tsx +11 -0
- package/packages/willa/src/MessageActions/index.tsx +8 -0
- package/packages/willa/src/MessageList/index.tsx +4 -0
- package/packages/willa/src/ModelSelector/index.tsx +9 -0
- package/packages/willa/src/NumberInput/index.tsx +15 -0
- package/packages/willa/src/PageHeader/index.tsx +5 -0
- package/packages/willa/src/Pagination/index.tsx +6 -0
- package/packages/willa/src/Panel/index.tsx +6 -0
- package/packages/willa/src/Picker/index.tsx +8 -0
- package/packages/willa/src/Poem/index.tsx +1 -0
- package/packages/willa/src/Popover/index.tsx +7 -0
- package/packages/willa/src/ProfileCard/index.tsx +5 -0
- package/packages/willa/src/Progress/index.tsx +6 -0
- package/packages/willa/src/PromptInput/index.tsx +6 -0
- package/packages/willa/src/PromptTemplatePicker/index.tsx +6 -0
- package/packages/willa/src/QRCode/index.tsx +9 -0
- package/packages/willa/src/Radio/index.tsx +5 -0
- package/packages/willa/src/RangeInput/index.tsx +2 -0
- package/packages/willa/src/Rate/index.tsx +6 -0
- package/packages/willa/src/ReasoningSteps/index.tsx +8 -0
- package/packages/willa/src/ResizablePanel/index.tsx +10 -0
- package/packages/willa/src/Result/index.tsx +7 -0
- package/packages/willa/src/SearchInput/index.tsx +4 -0
- package/packages/willa/src/SectionHeader/index.tsx +6 -0
- package/packages/willa/src/Segmented/index.tsx +9 -0
- package/packages/willa/src/Select/index.tsx +7 -0
- package/packages/willa/src/SelectionBar/index.tsx +5 -0
- package/packages/willa/src/Separator/index.tsx +7 -0
- package/packages/willa/src/SidebarLayout/index.tsx +7 -0
- package/packages/willa/src/SiteFooter/index.tsx +6 -0
- package/packages/willa/src/SiteNav/index.tsx +5 -0
- package/packages/willa/src/Skeleton/index.tsx +4 -0
- package/packages/willa/src/SourceCard/index.tsx +6 -0
- package/packages/willa/src/Spinner/index.tsx +7 -0
- package/packages/willa/src/SplitPane/index.tsx +10 -0
- package/packages/willa/src/Stack/index.tsx +8 -0
- package/packages/willa/src/Statistic/index.tsx +7 -0
- package/packages/willa/src/Step/index.tsx +1 -0
- package/packages/willa/src/Steps/index.tsx +1 -0
- package/packages/willa/src/SuggestionChips/index.tsx +7 -0
- package/packages/willa/src/Switch/index.tsx +5 -0
- package/packages/willa/src/Table/index.tsx +19 -0
- package/packages/willa/src/Tabs/index.tsx +6 -0
- package/packages/willa/src/Tag/index.tsx +9 -0
- package/packages/willa/src/TagInput/index.tsx +8 -0
- package/packages/willa/src/TextArea/index.tsx +7 -0
- package/packages/willa/src/ThinkingIndicator/index.tsx +7 -0
- package/packages/willa/src/TimePicker/index.tsx +10 -0
- package/packages/willa/src/Timeline/index.tsx +8 -0
- package/packages/willa/src/Toast/index.tsx +10 -0
- package/packages/willa/src/ToolCallCard/index.tsx +5 -0
- package/packages/willa/src/Toolbar/index.tsx +6 -0
- package/packages/willa/src/Tooltip/index.tsx +7 -0
- package/packages/willa/src/Tour/index.tsx +10 -0
- package/packages/willa/src/TraceViewer/index.tsx +8 -0
- package/packages/willa/src/Tree/index.tsx +11 -0
- package/packages/willa/src/TreeSelect/index.tsx +8 -0
- package/packages/willa/src/Typography/index.tsx +20 -0
- package/packages/willa/src/Upload/index.tsx +11 -0
- package/packages/willa/src/VideoEmbed/index.tsx +4 -0
- package/packages/willa/src/VideoLink/index.tsx +4 -0
- package/packages/willa/src/Watermark/index.tsx +5 -0
- package/packages/willa/src/WebEmbed/index.tsx +4 -0
- package/packages/willa/src/XPostEmbed/index.tsx +4 -0
- package/packages/willa/src/index.ts +5 -0
- package/packages/willa/vitest.config.ts +9 -0
- package/packages/willa-ai/README.md +32 -0
- package/packages/willa-ai/auklet.config.mjs +25 -0
- package/packages/willa-ai/package.json +84 -0
- package/packages/willa-ai/src/components/AttachmentList/index.css +223 -0
- package/packages/willa-ai/src/components/AttachmentList/index.tsx +256 -0
- package/packages/willa-ai/src/components/ChatMessage/index.css +211 -0
- package/packages/willa-ai/src/components/ChatMessage/index.tsx +126 -0
- package/packages/willa-ai/src/components/Composer/index.css +137 -0
- package/packages/willa-ai/src/components/Composer/index.tsx +92 -0
- package/packages/willa-ai/src/components/ContextPanel/index.css +252 -0
- package/packages/willa-ai/src/components/ContextPanel/index.tsx +513 -0
- package/packages/willa-ai/src/components/ContextWindowMeter/index.css +237 -0
- package/packages/willa-ai/src/components/ContextWindowMeter/index.tsx +266 -0
- package/packages/willa-ai/src/components/ConversationList/index.css +260 -0
- package/packages/willa-ai/src/components/ConversationList/index.tsx +549 -0
- package/packages/willa-ai/src/components/FeedbackBar/index.css +83 -0
- package/packages/willa-ai/src/components/FeedbackBar/index.tsx +357 -0
- package/packages/willa-ai/src/components/GenerationCard/index.css +275 -0
- package/packages/willa-ai/src/components/GenerationCard/index.tsx +156 -0
- package/packages/willa-ai/src/components/HumanApprovalCard/index.css +205 -0
- package/packages/willa-ai/src/components/HumanApprovalCard/index.tsx +262 -0
- package/packages/willa-ai/src/components/MessageActions/index.css +174 -0
- package/packages/willa-ai/src/components/MessageActions/index.tsx +152 -0
- package/packages/willa-ai/src/components/MessageList/index.css +80 -0
- package/packages/willa-ai/src/components/MessageList/index.tsx +96 -0
- package/packages/willa-ai/src/components/ModelSelector/index.css +177 -0
- package/packages/willa-ai/src/components/ModelSelector/index.tsx +421 -0
- package/packages/willa-ai/src/components/PromptInput/index.css +12 -0
- package/packages/willa-ai/src/components/PromptInput/index.tsx +230 -0
- package/packages/willa-ai/src/components/PromptTemplatePicker/index.css +173 -0
- package/packages/willa-ai/src/components/PromptTemplatePicker/index.tsx +389 -0
- package/packages/willa-ai/src/components/ReasoningSteps/index.css +190 -0
- package/packages/willa-ai/src/components/ReasoningSteps/index.tsx +199 -0
- package/packages/willa-ai/src/components/SuggestionChips/index.css +164 -0
- package/packages/willa-ai/src/components/SuggestionChips/index.tsx +142 -0
- package/packages/willa-ai/src/components/ThinkingIndicator/index.css +230 -0
- package/packages/willa-ai/src/components/ThinkingIndicator/index.tsx +162 -0
- package/packages/willa-ai/src/components/ToolCallCard/index.css +244 -0
- package/packages/willa-ai/src/components/ToolCallCard/index.tsx +131 -0
- package/packages/willa-ai/src/components/TraceViewer/index.css +438 -0
- package/packages/willa-ai/src/components/TraceViewer/index.tsx +445 -0
- package/packages/willa-ai/src/index.ts +123 -0
- package/packages/willa-ai/src/internal/cardCollapse.tsx +90 -0
- package/packages/willa-ai/src/internal/searchText.ts +50 -0
- package/packages/willa-ai/src/themes/dark.css +308 -0
- package/packages/willa-ai/src/themes/light.css +303 -0
- package/packages/willa-ai/vitest.config.ts +15 -0
- package/packages/willa-content/README.md +47 -0
- package/packages/willa-content/auklet.config.mjs +25 -0
- package/packages/willa-content/package.json +86 -0
- package/packages/willa-content/src/components/Alert/index.css +158 -0
- package/packages/willa-content/src/components/Alert/index.tsx +182 -0
- package/packages/willa-content/src/components/Anchor/index.css +131 -0
- package/packages/willa-content/src/components/Anchor/index.tsx +253 -0
- package/packages/willa-content/src/components/Avatar/index.css +248 -0
- package/packages/willa-content/src/components/Avatar/index.tsx +331 -0
- package/packages/willa-content/src/components/Badge/index.css +111 -0
- package/packages/willa-content/src/components/Badge/index.tsx +56 -0
- package/packages/willa-content/src/components/Breadcrumb/index.css +92 -0
- package/packages/willa-content/src/components/Breadcrumb/index.tsx +129 -0
- package/packages/willa-content/src/components/Button/index.css +215 -0
- package/packages/willa-content/src/components/Button/index.tsx +295 -0
- package/packages/willa-content/src/components/Callout/index.css +102 -0
- package/packages/willa-content/src/components/Callout/index.tsx +61 -0
- package/packages/willa-content/src/components/Carousel/index.css +236 -0
- package/packages/willa-content/src/components/Carousel/index.tsx +488 -0
- package/packages/willa-content/src/components/ChatThread/index.css +141 -0
- package/packages/willa-content/src/components/ChatThread/index.tsx +118 -0
- package/packages/willa-content/src/components/Citation/index.css +226 -0
- package/packages/willa-content/src/components/Citation/index.tsx +135 -0
- package/packages/willa-content/src/components/CodeBlock/index.css +267 -0
- package/packages/willa-content/src/components/CodeBlock/index.tsx +173 -0
- package/packages/willa-content/src/components/CodeTabs/index.css +116 -0
- package/packages/willa-content/src/components/CodeTabs/index.tsx +88 -0
- package/packages/willa-content/src/components/Collapse/index.css +135 -0
- package/packages/willa-content/src/components/Collapse/index.tsx +108 -0
- package/packages/willa-content/src/components/Comment/index.css +184 -0
- package/packages/willa-content/src/components/Comment/index.tsx +106 -0
- package/packages/willa-content/src/components/CommentInput/index.css +96 -0
- package/packages/willa-content/src/components/CommentInput/index.tsx +84 -0
- package/packages/willa-content/src/components/CommentList/index.css +43 -0
- package/packages/willa-content/src/components/CommentList/index.tsx +79 -0
- package/packages/willa-content/src/components/CopyButton/index.css +26 -0
- package/packages/willa-content/src/components/CopyButton/index.tsx +227 -0
- package/packages/willa-content/src/components/DescriptionList/index.css +176 -0
- package/packages/willa-content/src/components/DescriptionList/index.tsx +96 -0
- package/packages/willa-content/src/components/Dialog/index.css +225 -0
- package/packages/willa-content/src/components/Dialog/index.tsx +303 -0
- package/packages/willa-content/src/components/DiffViewer/index.css +321 -0
- package/packages/willa-content/src/components/DiffViewer/index.tsx +486 -0
- package/packages/willa-content/src/components/Download/index.css +118 -0
- package/packages/willa-content/src/components/Download/index.tsx +96 -0
- package/packages/willa-content/src/components/Drawer/index.css +160 -0
- package/packages/willa-content/src/components/Drawer/index.tsx +323 -0
- package/packages/willa-content/src/components/EmptyState/index.css +220 -0
- package/packages/willa-content/src/components/EmptyState/index.tsx +78 -0
- package/packages/willa-content/src/components/FileCard/fileIcon.tsx +215 -0
- package/packages/willa-content/src/components/FileCard/index.css +242 -0
- package/packages/willa-content/src/components/FileCard/index.tsx +133 -0
- package/packages/willa-content/src/components/FilePreview/index.css +589 -0
- package/packages/willa-content/src/components/FilePreview/index.tsx +750 -0
- package/packages/willa-content/src/components/FileTree/index.css +169 -0
- package/packages/willa-content/src/components/FileTree/index.tsx +341 -0
- package/packages/willa-content/src/components/FloatButton/index.css +276 -0
- package/packages/willa-content/src/components/FloatButton/index.tsx +558 -0
- package/packages/willa-content/src/components/IconButton/index.css +196 -0
- package/packages/willa-content/src/components/IconButton/index.tsx +272 -0
- package/packages/willa-content/src/components/Image/index.css +72 -0
- package/packages/willa-content/src/components/Image/index.tsx +141 -0
- package/packages/willa-content/src/components/ImageGallery/index.css +82 -0
- package/packages/willa-content/src/components/ImageGallery/index.tsx +170 -0
- package/packages/willa-content/src/components/InputPanel/index.css +181 -0
- package/packages/willa-content/src/components/InputPanel/index.tsx +255 -0
- package/packages/willa-content/src/components/Kbd/index.css +61 -0
- package/packages/willa-content/src/components/Kbd/index.tsx +102 -0
- package/packages/willa-content/src/components/Lightbox/index.css +127 -0
- package/packages/willa-content/src/components/Lightbox/index.tsx +328 -0
- package/packages/willa-content/src/components/List/index.css +439 -0
- package/packages/willa-content/src/components/List/index.tsx +403 -0
- package/packages/willa-content/src/components/MathExpression/index.css +65 -0
- package/packages/willa-content/src/components/MathExpression/index.tsx +105 -0
- package/packages/willa-content/src/components/MentionInput/index.css +92 -0
- package/packages/willa-content/src/components/MentionInput/index.tsx +1138 -0
- package/packages/willa-content/src/components/Menu/index.css +151 -0
- package/packages/willa-content/src/components/Menu/index.tsx +356 -0
- package/packages/willa-content/src/components/Pagination/index.css +139 -0
- package/packages/willa-content/src/components/Pagination/index.tsx +373 -0
- package/packages/willa-content/src/components/Popover/index.css +128 -0
- package/packages/willa-content/src/components/Popover/index.tsx +226 -0
- package/packages/willa-content/src/components/Progress/index.css +137 -0
- package/packages/willa-content/src/components/Progress/index.tsx +117 -0
- package/packages/willa-content/src/components/Result/index.css +142 -0
- package/packages/willa-content/src/components/Result/index.tsx +85 -0
- package/packages/willa-content/src/components/Segmented/index.css +136 -0
- package/packages/willa-content/src/components/Segmented/index.tsx +283 -0
- package/packages/willa-content/src/components/SelectionBar/index.css +104 -0
- package/packages/willa-content/src/components/SelectionBar/index.tsx +120 -0
- package/packages/willa-content/src/components/Skeleton/index.css +68 -0
- package/packages/willa-content/src/components/Skeleton/index.tsx +126 -0
- package/packages/willa-content/src/components/SourceCard/index.css +177 -0
- package/packages/willa-content/src/components/SourceCard/index.tsx +108 -0
- package/packages/willa-content/src/components/Spinner/index.css +124 -0
- package/packages/willa-content/src/components/Spinner/index.tsx +55 -0
- package/packages/willa-content/src/components/Statistic/index.css +135 -0
- package/packages/willa-content/src/components/Statistic/index.tsx +90 -0
- package/packages/willa-content/src/components/Steps/index.css +167 -0
- package/packages/willa-content/src/components/Steps/index.tsx +170 -0
- package/packages/willa-content/src/components/Table/TableBody.tsx +389 -0
- package/packages/willa-content/src/components/Table/TableHeader.tsx +256 -0
- package/packages/willa-content/src/components/Table/TablePagination.tsx +46 -0
- package/packages/willa-content/src/components/Table/TableView.tsx +341 -0
- package/packages/willa-content/src/components/Table/columnState.ts +37 -0
- package/packages/willa-content/src/components/Table/columns.ts +63 -0
- package/packages/willa-content/src/components/Table/group.ts +114 -0
- package/packages/willa-content/src/components/Table/index.css +620 -0
- package/packages/willa-content/src/components/Table/index.tsx +100 -0
- package/packages/willa-content/src/components/Table/layout.ts +80 -0
- package/packages/willa-content/src/components/Table/tree.ts +28 -0
- package/packages/willa-content/src/components/Table/types.ts +177 -0
- package/packages/willa-content/src/components/Table/useTableColumnResize.ts +227 -0
- package/packages/willa-content/src/components/Table/useTableColumnState.ts +153 -0
- package/packages/willa-content/src/components/Table/useTableExpansion.ts +69 -0
- package/packages/willa-content/src/components/Table/useTableInfiniteScroll.ts +77 -0
- package/packages/willa-content/src/components/Table/useTableSelection.ts +102 -0
- package/packages/willa-content/src/components/Table/useTableState.ts +436 -0
- package/packages/willa-content/src/components/Table/useTableViewModel.ts +222 -0
- package/packages/willa-content/src/components/Table/utils.ts +251 -0
- package/packages/willa-content/src/components/Tabs/index.css +126 -0
- package/packages/willa-content/src/components/Tabs/index.tsx +154 -0
- package/packages/willa-content/src/components/Tag/index.css +171 -0
- package/packages/willa-content/src/components/Tag/index.tsx +91 -0
- package/packages/willa-content/src/components/Timeline/index.css +355 -0
- package/packages/willa-content/src/components/Timeline/index.tsx +153 -0
- package/packages/willa-content/src/components/Toast/index.css +226 -0
- package/packages/willa-content/src/components/Toast/index.tsx +280 -0
- package/packages/willa-content/src/components/Toolbar/index.css +59 -0
- package/packages/willa-content/src/components/Toolbar/index.tsx +73 -0
- package/packages/willa-content/src/components/Tooltip/index.css +83 -0
- package/packages/willa-content/src/components/Tooltip/index.tsx +265 -0
- package/packages/willa-content/src/components/Tour/index.css +312 -0
- package/packages/willa-content/src/components/Tour/index.tsx +788 -0
- package/packages/willa-content/src/components/Tree/index.css +274 -0
- package/packages/willa-content/src/components/Tree/index.tsx +564 -0
- package/packages/willa-content/src/components/Typography/TypographyActions.tsx +125 -0
- package/packages/willa-content/src/components/Typography/TypographyContent.tsx +406 -0
- package/packages/willa-content/src/components/Typography/TypographyEdit.tsx +161 -0
- package/packages/willa-content/src/components/Typography/index.css +575 -0
- package/packages/willa-content/src/components/Typography/index.tsx +145 -0
- package/packages/willa-content/src/components/Typography/types.ts +144 -0
- package/packages/willa-content/src/components/Typography/utils.tsx +192 -0
- package/packages/willa-content/src/components/Watermark/index.css +37 -0
- package/packages/willa-content/src/components/Watermark/index.tsx +294 -0
- package/packages/willa-content/src/index.ts +408 -0
- package/packages/willa-content/src/internal/buttonActionUtils.ts +46 -0
- package/packages/willa-content/src/internal/syntaxHighlight.css +82 -0
- package/packages/willa-content/src/internal/useSingleSelection.ts +80 -0
- package/packages/willa-content/src/themes/dark.css +777 -0
- package/packages/willa-content/src/themes/light.css +780 -0
- package/packages/willa-content/vitest.config.ts +15 -0
- package/packages/willa-form/README.md +33 -0
- package/packages/willa-form/auklet.config.mjs +24 -0
- package/packages/willa-form/package.json +85 -0
- package/packages/willa-form/src/components/Calendar/ScheduleCalendar.tsx +1036 -0
- package/packages/willa-form/src/components/Calendar/index.css +1081 -0
- package/packages/willa-form/src/components/Calendar/index.tsx +876 -0
- package/packages/willa-form/src/components/Calendar/utils.ts +67 -0
- package/packages/willa-form/src/components/Checkbox/index.css +133 -0
- package/packages/willa-form/src/components/Checkbox/index.tsx +104 -0
- package/packages/willa-form/src/components/ColorPicker/index.css +617 -0
- package/packages/willa-form/src/components/ColorPicker/index.tsx +724 -0
- package/packages/willa-form/src/components/ColorPicker/types.ts +21 -0
- package/packages/willa-form/src/components/DatePicker/index.css +395 -0
- package/packages/willa-form/src/components/DatePicker/index.tsx +631 -0
- package/packages/willa-form/src/components/FilterBar/index.css +122 -0
- package/packages/willa-form/src/components/FilterBar/index.tsx +98 -0
- package/packages/willa-form/src/components/Form/index.css +49 -0
- package/packages/willa-form/src/components/Form/index.tsx +50 -0
- package/packages/willa-form/src/components/FormActions/index.css +62 -0
- package/packages/willa-form/src/components/FormActions/index.tsx +44 -0
- package/packages/willa-form/src/components/FormField/index.css +71 -0
- package/packages/willa-form/src/components/FormField/index.tsx +85 -0
- package/packages/willa-form/src/components/FormGroup/index.css +62 -0
- package/packages/willa-form/src/components/FormGroup/index.tsx +64 -0
- package/packages/willa-form/src/components/FormMessage/index.css +77 -0
- package/packages/willa-form/src/components/FormMessage/index.tsx +57 -0
- package/packages/willa-form/src/components/Input/index.css +131 -0
- package/packages/willa-form/src/components/Input/index.tsx +116 -0
- package/packages/willa-form/src/components/NumberInput/index.css +315 -0
- package/packages/willa-form/src/components/NumberInput/index.tsx +567 -0
- package/packages/willa-form/src/components/Picker/index.css +323 -0
- package/packages/willa-form/src/components/Picker/index.tsx +359 -0
- package/packages/willa-form/src/components/Radio/index.css +131 -0
- package/packages/willa-form/src/components/Radio/index.tsx +70 -0
- package/packages/willa-form/src/components/RangeInput/index.css +224 -0
- package/packages/willa-form/src/components/RangeInput/index.tsx +288 -0
- package/packages/willa-form/src/components/Rate/index.css +97 -0
- package/packages/willa-form/src/components/Rate/index.tsx +378 -0
- package/packages/willa-form/src/components/SearchInput/index.css +32 -0
- package/packages/willa-form/src/components/SearchInput/index.tsx +101 -0
- package/packages/willa-form/src/components/Select/index.css +4 -0
- package/packages/willa-form/src/components/Select/index.tsx +79 -0
- package/packages/willa-form/src/components/Switch/index.css +133 -0
- package/packages/willa-form/src/components/Switch/index.tsx +75 -0
- package/packages/willa-form/src/components/TagInput/index.css +209 -0
- package/packages/willa-form/src/components/TagInput/index.tsx +497 -0
- package/packages/willa-form/src/components/TextArea/index.css +91 -0
- package/packages/willa-form/src/components/TextArea/index.tsx +87 -0
- package/packages/willa-form/src/components/TimePicker/index.css +485 -0
- package/packages/willa-form/src/components/TimePicker/index.tsx +649 -0
- package/packages/willa-form/src/components/TimePicker/types.ts +8 -0
- package/packages/willa-form/src/components/TreeSelect/index.css +331 -0
- package/packages/willa-form/src/components/TreeSelect/index.tsx +497 -0
- package/packages/willa-form/src/components/Upload/index.css +345 -0
- package/packages/willa-form/src/components/Upload/index.tsx +581 -0
- package/packages/willa-form/src/index.ts +176 -0
- package/packages/willa-form/src/internal/colorUtils.ts +206 -0
- package/packages/willa-form/src/internal/comboboxField.tsx +114 -0
- package/packages/willa-form/src/internal/floatingPanelParts.tsx +80 -0
- package/packages/willa-form/src/internal/selectablePanelKeyboard.ts +93 -0
- package/packages/willa-form/src/internal/selectablePanelParts.tsx +212 -0
- package/packages/willa-form/src/internal/timePickerParts.ts +205 -0
- package/packages/willa-form/src/internal/useComboboxState.ts +21 -0
- package/packages/willa-form/src/internal/useFloatingPanel.ts +114 -0
- package/packages/willa-form/src/internal/useSelectablePanel.ts +152 -0
- package/packages/willa-form/src/internal/useSelectionModel.ts +115 -0
- package/packages/willa-form/src/themes/dark.css +197 -0
- package/packages/willa-form/src/themes/light.css +201 -0
- package/packages/willa-form/vitest.config.ts +15 -0
- package/packages/willa-layout/README.md +33 -0
- package/packages/willa-layout/auklet.config.mjs +11 -0
- package/packages/willa-layout/package.json +83 -0
- package/packages/willa-layout/src/components/AppShell/index.css +100 -0
- package/packages/willa-layout/src/components/AppShell/index.tsx +70 -0
- package/packages/willa-layout/src/components/BorderBeam/index.css +86 -0
- package/packages/willa-layout/src/components/BorderBeam/index.tsx +161 -0
- package/packages/willa-layout/src/components/Card/index.css +179 -0
- package/packages/willa-layout/src/components/Card/index.tsx +174 -0
- package/packages/willa-layout/src/components/Container/index.css +55 -0
- package/packages/willa-layout/src/components/Container/index.tsx +43 -0
- package/packages/willa-layout/src/components/Grid/index.css +9 -0
- package/packages/willa-layout/src/components/Grid/index.tsx +100 -0
- package/packages/willa-layout/src/components/Group/index.css +21 -0
- package/packages/willa-layout/src/components/Group/index.tsx +146 -0
- package/packages/willa-layout/src/components/Masonry/index.css +12 -0
- package/packages/willa-layout/src/components/Masonry/index.tsx +71 -0
- package/packages/willa-layout/src/components/PageHeader/index.css +130 -0
- package/packages/willa-layout/src/components/PageHeader/index.tsx +76 -0
- package/packages/willa-layout/src/components/Panel/index.css +123 -0
- package/packages/willa-layout/src/components/Panel/index.tsx +63 -0
- package/packages/willa-layout/src/components/SectionHeader/index.css +104 -0
- package/packages/willa-layout/src/components/SectionHeader/index.tsx +69 -0
- package/packages/willa-layout/src/components/Separator/index.css +155 -0
- package/packages/willa-layout/src/components/Separator/index.tsx +61 -0
- package/packages/willa-layout/src/components/SidebarLayout/index.css +43 -0
- package/packages/willa-layout/src/components/SidebarLayout/index.tsx +73 -0
- package/packages/willa-layout/src/components/SplitPane/index.css +148 -0
- package/packages/willa-layout/src/components/SplitPane/index.tsx +434 -0
- package/packages/willa-layout/src/components/Stack/index.css +8 -0
- package/packages/willa-layout/src/components/Stack/index.tsx +99 -0
- package/packages/willa-layout/src/index.ts +91 -0
- package/packages/willa-layout/src/internal/headerBlock.tsx +49 -0
- package/packages/willa-layout/src/themes/dark.css +55 -0
- package/packages/willa-layout/src/themes/light.css +59 -0
- package/packages/willa-layout/vitest.config.ts +15 -0
- package/packages/willa-shared/README.md +24 -0
- package/packages/willa-shared/package.json +46 -0
- package/packages/willa-shared/src/clipboard.ts +23 -0
- package/packages/willa-shared/src/codeHighlight.ts +109 -0
- package/packages/willa-shared/src/controllableState.ts +42 -0
- package/packages/willa-shared/src/copy.ts +79 -0
- package/packages/willa-shared/src/css.ts +10 -0
- package/packages/willa-shared/src/dom.ts +12 -0
- package/packages/willa-shared/src/file.ts +214 -0
- package/packages/willa-shared/src/floating.ts +160 -0
- package/packages/willa-shared/src/floatingLayer.ts +310 -0
- package/packages/willa-shared/src/heading.ts +69 -0
- package/packages/willa-shared/src/index.ts +88 -0
- package/packages/willa-shared/src/media.ts +23 -0
- package/packages/willa-shared/src/nodes.ts +24 -0
- package/packages/willa-shared/src/number.ts +9 -0
- package/packages/willa-shared/src/refs.ts +16 -0
- package/packages/willa-shared/src/request.ts +46 -0
- package/packages/willa-shared/src/types.ts +27 -0
- package/packages/willa-shared/src/viewport.ts +12 -0
- package/packages/willa-shared/src/virtualScroll.ts +137 -0
- package/packages/willa-shared/vitest.config.ts +9 -0
- package/packages/willa-widgets/README.md +33 -0
- package/packages/willa-widgets/auklet.config.mjs +25 -0
- package/packages/willa-widgets/package.json +89 -0
- package/packages/willa-widgets/src/components/AudioEmbed/index.css +424 -0
- package/packages/willa-widgets/src/components/AudioEmbed/index.tsx +270 -0
- package/packages/willa-widgets/src/components/AudioLink/index.css +165 -0
- package/packages/willa-widgets/src/components/AudioLink/index.tsx +169 -0
- package/packages/willa-widgets/src/components/EnglishCards/Card.tsx +116 -0
- package/packages/willa-widgets/src/components/EnglishCards/Content.tsx +203 -0
- package/packages/willa-widgets/src/components/EnglishCards/Practice.tsx +91 -0
- package/packages/willa-widgets/src/components/EnglishCards/Resources.tsx +91 -0
- package/packages/willa-widgets/src/components/EnglishCards/index.css +531 -0
- package/packages/willa-widgets/src/components/EnglishCards/index.tsx +142 -0
- package/packages/willa-widgets/src/components/EnglishCards/speech.ts +29 -0
- package/packages/willa-widgets/src/components/EnglishCards/types.ts +43 -0
- package/packages/willa-widgets/src/components/GitHubMention/index.css +206 -0
- package/packages/willa-widgets/src/components/GitHubMention/index.tsx +168 -0
- package/packages/willa-widgets/src/components/GitHubRepo/index.css +194 -0
- package/packages/willa-widgets/src/components/GitHubRepo/index.tsx +172 -0
- package/packages/willa-widgets/src/components/LogoWall/index.css +122 -0
- package/packages/willa-widgets/src/components/LogoWall/index.tsx +104 -0
- package/packages/willa-widgets/src/components/Mdx/index.css +273 -0
- package/packages/willa-widgets/src/components/Mdx/index.tsx +377 -0
- package/packages/willa-widgets/src/components/Poem/index.css +101 -0
- package/packages/willa-widgets/src/components/Poem/index.tsx +74 -0
- package/packages/willa-widgets/src/components/ProfileCard/index.css +107 -0
- package/packages/willa-widgets/src/components/ProfileCard/index.tsx +116 -0
- package/packages/willa-widgets/src/components/QRCode/index.css +175 -0
- package/packages/willa-widgets/src/components/QRCode/index.tsx +257 -0
- package/packages/willa-widgets/src/components/SiteFooter/index.css +109 -0
- package/packages/willa-widgets/src/components/SiteFooter/index.tsx +104 -0
- package/packages/willa-widgets/src/components/SiteNav/index.css +93 -0
- package/packages/willa-widgets/src/components/SiteNav/index.tsx +71 -0
- package/packages/willa-widgets/src/components/VideoEmbed/index.css +230 -0
- package/packages/willa-widgets/src/components/VideoEmbed/index.tsx +134 -0
- package/packages/willa-widgets/src/components/VideoLink/index.css +118 -0
- package/packages/willa-widgets/src/components/VideoLink/index.tsx +161 -0
- package/packages/willa-widgets/src/components/WebEmbed/index.css +106 -0
- package/packages/willa-widgets/src/components/WebEmbed/index.tsx +98 -0
- package/packages/willa-widgets/src/components/XPostEmbed/index.css +52 -0
- package/packages/willa-widgets/src/components/XPostEmbed/index.tsx +88 -0
- package/packages/willa-widgets/src/index.ts +57 -0
- package/packages/willa-widgets/src/internal/media.ts +84 -0
- package/packages/willa-widgets/src/internal/mediaEmbed.tsx +52 -0
- package/packages/willa-widgets/src/internal/useGitHubHoverCardResource.ts +120 -0
- package/packages/willa-widgets/src/themes/dark.css +209 -0
- package/packages/willa-widgets/src/themes/light.css +207 -0
- package/packages/willa-widgets/vitest.config.ts +15 -0
- package/pnpm-workspace.yaml +29 -0
- package/tsconfig.json +50 -0
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
# Willa Component Guide
|
|
2
|
+
|
|
3
|
+
This document defines component file organization, exports, CSS integration,
|
|
4
|
+
example docs, and acceptance checks for Willa. Package responsibilities and
|
|
5
|
+
dependency relationships are documented in [Willa Architecture](./architecture.md).
|
|
6
|
+
Code style is documented in [Willa Style Guide](./style.md). CSS and theme
|
|
7
|
+
variables are documented in [Willa CSS Guide](./css.md).
|
|
8
|
+
|
|
9
|
+
## Package Ownership
|
|
10
|
+
|
|
11
|
+
Before adding a component, choose its package based on the architecture guide:
|
|
12
|
+
|
|
13
|
+
- `@willa-ui/layout`: layout primitives, such as card surfaces, separators,
|
|
14
|
+
groups, stacks, grids, masonry flows, containers, panels, resizable panes,
|
|
15
|
+
page headers, section headers, decorative border beams, and page shells.
|
|
16
|
+
- `@willa-ui/content`: general content rendering, such as text, lists,
|
|
17
|
+
callouts, code blocks, product primitives, and reusable rich content
|
|
18
|
+
primitives.
|
|
19
|
+
- `@willa-ui/form`: form controls and form layout, such as input, textarea,
|
|
20
|
+
select, checkbox, radio, switch, date picker, time picker, upload, form
|
|
21
|
+
field, and form actions.
|
|
22
|
+
- `@willa-ui/ai`: AI product scenes and AI-specific composition, such as prompt
|
|
23
|
+
inputs, chat messages, attachments, tool call displays, reasoning steps,
|
|
24
|
+
generation cards, context panels, trace viewers, and related interaction
|
|
25
|
+
patterns.
|
|
26
|
+
- `@willa-ui/widgets`: platform integrations, MDX composition, and more
|
|
27
|
+
scenario-specific components, such as GitHub, X, web embeds, audio/video
|
|
28
|
+
embeds, poems, and EnglishCards.
|
|
29
|
+
- `@willa-ui/shared`: cross-package utilities, types, text processing, node
|
|
30
|
+
processing, clipboard helpers, and similar logic. It must not contain React
|
|
31
|
+
components or component CSS.
|
|
32
|
+
- `willa`: the public aggregate package that exposes public components from
|
|
33
|
+
layout, content, form, AI, and widgets.
|
|
34
|
+
|
|
35
|
+
Dependency direction is defined in [Willa Architecture](./architecture.md). A
|
|
36
|
+
component used only by AI or widgets is not automatically owned by that package;
|
|
37
|
+
first judge whether its meaning is general enough for content.
|
|
38
|
+
|
|
39
|
+
## File Organization
|
|
40
|
+
|
|
41
|
+
Component directories use the component name. layout, content, form, AI, and
|
|
42
|
+
widgets use the same shape:
|
|
43
|
+
|
|
44
|
+
```text
|
|
45
|
+
src/components/ComponentName/
|
|
46
|
+
index.tsx
|
|
47
|
+
index.css
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The implementation lives in `index.tsx`. Structural component styles live in
|
|
51
|
+
the colocated `index.css`. If a component needs internal subcomponents, keep
|
|
52
|
+
them in the same component directory first. Move them up only when they are
|
|
53
|
+
shared by multiple components.
|
|
54
|
+
|
|
55
|
+
Component names should describe general meaning and should not carry historical
|
|
56
|
+
source prefixes. Unless a component is specifically MDX-related, do not prefix
|
|
57
|
+
it with `Mdx`. Do not name components after HTML wrapper tags, such as renaming
|
|
58
|
+
`CodeBlock` to `Pre`.
|
|
59
|
+
|
|
60
|
+
## Component Implementation
|
|
61
|
+
|
|
62
|
+
General implementation style is defined in [Willa Style Guide](./style.md).
|
|
63
|
+
This section only covers component-specific structure.
|
|
64
|
+
|
|
65
|
+
Components should be designed toward their stable product shape from the first
|
|
66
|
+
implementation. Do not stop at a demo-only or minimum viable version when the
|
|
67
|
+
component's common production requirements are already clear. Cover the main
|
|
68
|
+
states, interaction model, composition slots, responsive behavior, theme
|
|
69
|
+
variables, accessibility semantics, and documentation examples together. Keep
|
|
70
|
+
the public API focused, but prefer a complete, coherent abstraction over a
|
|
71
|
+
temporary narrow wrapper that must be redesigned immediately after adoption.
|
|
72
|
+
When an existing component already has a broad prop surface, keep new features
|
|
73
|
+
from widening the root props by default. Prefer grouped option objects such as
|
|
74
|
+
`actions`, `labels`, `behavior`, or `positioning`, or expose composition slots
|
|
75
|
+
when the extension belongs to a stable sub-area. Components such as `Tour`
|
|
76
|
+
should keep action text, behavior, positioning, render hooks, and class names in
|
|
77
|
+
purpose-based objects instead of adding more root-level props.
|
|
78
|
+
Feature-rich form controls need the same constraint. `NumberInput` owns value
|
|
79
|
+
limits, stepping, commit timing, keyboard behavior, controls, addons, status,
|
|
80
|
+
formatting, parsing, and event callbacks; it groups related capabilities into
|
|
81
|
+
`constraints`, `stepper`, `behavior`, `format`, and `slots`. Future capabilities
|
|
82
|
+
should extend those purpose-based options or internal sub-abilities instead of
|
|
83
|
+
adding more flat root props.
|
|
84
|
+
|
|
85
|
+
Visual design should stay flat and restrained. Avoid turning every compact icon
|
|
86
|
+
control, status mark, or helper action into a pill. Pills are appropriate for
|
|
87
|
+
tags, badges, selected filters, and clear grouped choices; pure icon actions
|
|
88
|
+
should usually use a small square or soft rounded hit area with minimal fill so
|
|
89
|
+
the interface does not become visually noisy.
|
|
90
|
+
|
|
91
|
+
Prefer extracting a public base component when several components share the
|
|
92
|
+
same interaction model and DOM semantics. For example, `List` is the standard
|
|
93
|
+
content list primitive for item rows with title, description, meta, media,
|
|
94
|
+
actions, selected, disabled, unread, link, and click states. Notification
|
|
95
|
+
centers, system messages, task reminders, and activity feeds should use `List`
|
|
96
|
+
directly unless they add substantial domain behavior. Components with stronger
|
|
97
|
+
semantics, such as comments, chat logs, attachments, trees, or timelines, should
|
|
98
|
+
keep their own structure instead of forcing reuse through `List`.
|
|
99
|
+
|
|
100
|
+
Some public components are scenario presets over a lower-level component. Keep
|
|
101
|
+
their preset identity clear in docs and API design so users do not read them as
|
|
102
|
+
new base primitives:
|
|
103
|
+
|
|
104
|
+
| Preset component | Base component | Boundary |
|
|
105
|
+
| ---------------- | -------------- | ------------------------------------------------------------------------------------------- |
|
|
106
|
+
| `Select` | `Picker` | Single-select dropdown preset; use `Picker` or `TreeSelect` for broader selection behavior. |
|
|
107
|
+
| `PromptInput` | `InputPanel` | AI prompt submission preset; use `InputPanel` for general multiline input composition. |
|
|
108
|
+
|
|
109
|
+
404 and missing-resource pages should be documented as `EmptyState` recipes
|
|
110
|
+
instead of separate public components unless they introduce a distinct
|
|
111
|
+
interaction model.
|
|
112
|
+
|
|
113
|
+
Feedback components are separated by feedback level, not by visual similarity.
|
|
114
|
+
Do not add another generic feedback component before checking whether one of
|
|
115
|
+
these boundaries already covers the use case:
|
|
116
|
+
|
|
117
|
+
| Component | Level | Boundary |
|
|
118
|
+
| ------------- | ------------------------- | --------------------------------------------------------------------------------------------- |
|
|
119
|
+
| `Alert` | Inline operation feedback | Closable or actionable page and section feedback, including banners and async results. |
|
|
120
|
+
| `Callout` | Content semantic note | Documentation, MDX, and article content notes such as info, tip, warning, success, and error. |
|
|
121
|
+
| `FormMessage` | Form feedback | Field or form-level validation, help, and submit state. |
|
|
122
|
+
| `Toast` | Temporary global feedback | Short non-blocking notifications and transient async results. |
|
|
123
|
+
| `Result` | Page-level outcome | Success, failure, empty, or completion states after a workflow or route-level action. |
|
|
124
|
+
|
|
125
|
+
If a component needs an internal protocol marker, such as Lightbox identifying
|
|
126
|
+
`Image` and `ImageGallery` children, attach the marker to the component object
|
|
127
|
+
and add a comment explaining why it exists. Internal markers are not public API.
|
|
128
|
+
|
|
129
|
+
## Exports
|
|
130
|
+
|
|
131
|
+
When adding a content component, usually update:
|
|
132
|
+
|
|
133
|
+
- `packages/willa-content/src/components/ComponentName/index.tsx`
|
|
134
|
+
- `packages/willa-content/src/components/ComponentName/index.css`
|
|
135
|
+
- `packages/willa-content/src/index.ts`
|
|
136
|
+
- `packages/willa/src/ComponentName/index.tsx`
|
|
137
|
+
- `packages/willa-content/src/themes/light.css` and `dark.css`, if the
|
|
138
|
+
component needs theme variables
|
|
139
|
+
- `example/src/docs/ComponentName.demo.tsx`
|
|
140
|
+
- `example/src/catalog/registry.ts`
|
|
141
|
+
|
|
142
|
+
When adding a layout component, replace `willa-content` with `willa-layout` and
|
|
143
|
+
make sure the willa aggregate package exports it.
|
|
144
|
+
|
|
145
|
+
When adding a form component, replace `willa-content` with `willa-form` and
|
|
146
|
+
make sure the willa aggregate package exports it.
|
|
147
|
+
|
|
148
|
+
When adding a widgets component, replace `willa-content` with `willa-widgets`
|
|
149
|
+
and make sure the willa aggregate package exports it.
|
|
150
|
+
|
|
151
|
+
When adding an AI component, usually update:
|
|
152
|
+
|
|
153
|
+
- `packages/willa-ai/src/components/ComponentName/index.tsx`
|
|
154
|
+
- `packages/willa-ai/src/components/ComponentName/index.css`
|
|
155
|
+
- `packages/willa-ai/src/index.ts`
|
|
156
|
+
- `packages/willa/src/ComponentName/index.tsx`
|
|
157
|
+
- `packages/willa-ai/src/themes/light.css` and `dark.css`, if the component
|
|
158
|
+
needs AI-owned theme variables
|
|
159
|
+
- `example/src/docs/ComponentName.demo.tsx`
|
|
160
|
+
- `example/src/catalog/registry.ts`
|
|
161
|
+
|
|
162
|
+
Single-component entries must export both the component and its types:
|
|
163
|
+
|
|
164
|
+
```tsx
|
|
165
|
+
export { AudioLink } from "@willa-ui/widgets/components/AudioLink";
|
|
166
|
+
export type { AudioLinkProps } from "@willa-ui/widgets/components/AudioLink";
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Shared types can live in `@willa-ui/shared`, but component entries should still
|
|
170
|
+
provide convenient type exports.
|
|
171
|
+
|
|
172
|
+
Composite components can expose child component entries when the child is part
|
|
173
|
+
of the public authoring model. For example, `Step` is authored inside `Steps`
|
|
174
|
+
and `ResizablePanel` is authored inside `SplitPane`. These child entries should
|
|
175
|
+
keep their single-component imports and type exports, but they do not need
|
|
176
|
+
separate registry pages when they are not meaningful on their own. Document the
|
|
177
|
+
child props on the parent component page with a prop group named after the
|
|
178
|
+
child component.
|
|
179
|
+
|
|
180
|
+
Complex components can also expose a substantial sub-capability through the
|
|
181
|
+
parent component entry. For example, `ScheduleCalendar` has its own example
|
|
182
|
+
page because the scheduling view has independent usage scenarios, while its
|
|
183
|
+
public import and CSS still come from `Calendar`. Use this pattern when the
|
|
184
|
+
sub-capability is meaningful enough for focused docs but shares the parent's
|
|
185
|
+
implementation boundary, theme variables, and single-component CSS entry.
|
|
186
|
+
|
|
187
|
+
## CSS Integration
|
|
188
|
+
|
|
189
|
+
Every public component needs its own CSS file. Component CSS contains
|
|
190
|
+
structure, layout, state, and variable references. Theme colors, shadows,
|
|
191
|
+
backgrounds, and border colors belong in theme variables. See
|
|
192
|
+
[Willa CSS Guide](./css.md) for details.
|
|
193
|
+
|
|
194
|
+
New component themes should use subtle tints and neutral text instead of heavy
|
|
195
|
+
saturated fills. Blue can be used for default actions, while green should be
|
|
196
|
+
reserved for positive semantic states such as success or copied. Dark theme
|
|
197
|
+
values should follow the existing neutral surface style first and use color
|
|
198
|
+
accents sparingly. When a component introduces theme variables, define both
|
|
199
|
+
light and dark values in the owning package and check contrast, hover, focus,
|
|
200
|
+
disabled, and selected/copied states in both themes.
|
|
201
|
+
|
|
202
|
+
Dark theme surfaces that carry content, such as cards, popovers, tour panels,
|
|
203
|
+
inputs, chat bubbles, and editor/composer containers, should not depend on
|
|
204
|
+
semi-transparent backgrounds for their base fill. If a translucent color is
|
|
205
|
+
needed to match the design, composite it against the expected dark surface and
|
|
206
|
+
store the resulting solid color as the theme variable. Keep transparency for
|
|
207
|
+
overlays, masks, focus rings, borders, decorative highlights, and small status
|
|
208
|
+
tints where seeing the layer underneath is intentional.
|
|
209
|
+
|
|
210
|
+
When adding a component, confirm:
|
|
211
|
+
|
|
212
|
+
- Structural styles live in the component directory's `index.css`.
|
|
213
|
+
- Theme variables live in the owning package's `src/themes/light.css` and
|
|
214
|
+
`src/themes/dark.css`.
|
|
215
|
+
- Dark theme content surfaces use solid base backgrounds, so stacked demos,
|
|
216
|
+
toolbars, cards, and floating panels do not leak the colors of components
|
|
217
|
+
behind them.
|
|
218
|
+
- content components that compose layout components express CSS dependencies
|
|
219
|
+
through `styles.dependencies` in `auklet.config.mjs`; they do not copy layout
|
|
220
|
+
CSS or theme variables.
|
|
221
|
+
- form, AI, and widgets components that compose layout or content components
|
|
222
|
+
follow the same rule: reuse upstream CSS through `styles.dependencies`
|
|
223
|
+
instead of copying upstream CSS or theme variables.
|
|
224
|
+
- Single-component CSS is available through `willa/ComponentName.css`.
|
|
225
|
+
|
|
226
|
+
## Example Docs
|
|
227
|
+
|
|
228
|
+
Every public component needs an example demo in
|
|
229
|
+
`example/src/docs/ComponentName.demo.tsx` and a registry entry in
|
|
230
|
+
`example/src/catalog/registry.ts`.
|
|
231
|
+
|
|
232
|
+
Demo docs are written primarily in Chinese. In development, example consumes
|
|
233
|
+
package source through tsconfig aliases. Component code and component CSS hot
|
|
234
|
+
reload in example; packages do not need to be built first.
|
|
235
|
+
|
|
236
|
+
Example demos should self-host common layout whenever it improves clarity.
|
|
237
|
+
Use layout primitives such as `Group`, `Stack`, `Grid`, `Panel`, `Container`,
|
|
238
|
+
`Separator`, and `Masonry` for demo-only spacing, grouping, sections, and
|
|
239
|
+
preview frames instead of repeating inline `display: flex` or `display: grid`
|
|
240
|
+
wrappers. Keep component-internal CSS inside the owning component when the
|
|
241
|
+
layout is part of that component's own behavior, hit target, overflow model, or
|
|
242
|
+
accessibility structure.
|
|
243
|
+
|
|
244
|
+
Example documentation utilities live in `example/src/catalog`:
|
|
245
|
+
|
|
246
|
+
- `defineDoc.tsx`: converts demo descriptions into previews and code snippets.
|
|
247
|
+
- `DocView.tsx`: renders the documentation view.
|
|
248
|
+
- `registry.ts`: registers component documentation entries.
|
|
249
|
+
- `types.ts`: defines documentation types.
|
|
250
|
+
|
|
251
|
+
Demos should cover:
|
|
252
|
+
|
|
253
|
+
- The most common real usage.
|
|
254
|
+
- Main props and key states.
|
|
255
|
+
- Visual states driven by theme variables.
|
|
256
|
+
- Common composition with other components.
|
|
257
|
+
- Mobile rendering and interaction states for components with dense controls,
|
|
258
|
+
long text, horizontal navigation, floating panels, portals, or media layouts.
|
|
259
|
+
|
|
260
|
+
Dense table-like components, such as schedule calendars, may keep horizontal
|
|
261
|
+
scrolling inside the component on mobile when compressing columns would make
|
|
262
|
+
content unreadable or hard to tap. The scroll must stay inside the component
|
|
263
|
+
container, must not create page-level horizontal overflow, and the demo should
|
|
264
|
+
state this behavior when it is part of the intended design.
|
|
265
|
+
|
|
266
|
+
Prefer a single data definition and let `defineDoc` generate both preview and
|
|
267
|
+
React example code. Complex scenarios can pass explicit `code` and use
|
|
268
|
+
`unindent` from `aidly` to keep indentation readable.
|
|
269
|
+
|
|
270
|
+
`registry.ts` should keep lightweight entries and must not synchronously import
|
|
271
|
+
`*.demo.tsx`. Each entry loads its demo through `load`, so component code and
|
|
272
|
+
CSS only enter the page when selected. Component lists use `sortStrings` from
|
|
273
|
+
`aidly` for alphabetical ordering.
|
|
274
|
+
|
|
275
|
+
Every demo should include:
|
|
276
|
+
|
|
277
|
+
- `id`: URL hash identifier so refreshes keep the current component.
|
|
278
|
+
- `name`: component name.
|
|
279
|
+
- `packageName`: display entry, such as `willa/CodeBlock`.
|
|
280
|
+
- `description`: Chinese description.
|
|
281
|
+
- `imports` and `css`: used to generate code blocks.
|
|
282
|
+
- `demo`: real rendering data.
|
|
283
|
+
- `props`: prop documentation, with required markers on prop names.
|
|
284
|
+
|
|
285
|
+
Component docs are grouped by category:
|
|
286
|
+
|
|
287
|
+
- layout: layout primitives and page structure components.
|
|
288
|
+
- content: base product/content components.
|
|
289
|
+
- form: form controls and form layout components.
|
|
290
|
+
- ai: AI product and AI interaction components.
|
|
291
|
+
- widgets: scenario components.
|
|
292
|
+
|
|
293
|
+
## Acceptance Checklist
|
|
294
|
+
|
|
295
|
+
After adding a public component, confirm:
|
|
296
|
+
|
|
297
|
+
- Package root import works from the owning package, such as
|
|
298
|
+
`import { CodeBlock } from "@willa-ui/content"` or
|
|
299
|
+
`import { Card } from "@willa-ui/layout"`.
|
|
300
|
+
- willa root import works, such as `import { CodeBlock } from "willa"`.
|
|
301
|
+
- willa single-component import works, such as `import { CodeBlock } from "willa/CodeBlock"`.
|
|
302
|
+
- Single-component CSS works, such as `import "willa/CodeBlock.css"`.
|
|
303
|
+
- The example demo renders correctly.
|
|
304
|
+
- Mobile layouts avoid horizontal page overflow, keep interactive targets usable,
|
|
305
|
+
and handle hover-dependent behavior on touch devices.
|
|
306
|
+
- `pnpm run typecheck` passes.
|
|
307
|
+
- Relevant builds pass for the change scope. Run `pnpm run build:packages` for
|
|
308
|
+
first-time public component additions or package entry/config changes; for
|
|
309
|
+
example-only or narrow component fixes, use the smaller check that covers the
|
|
310
|
+
touched behavior.
|
|
311
|
+
|
|
312
|
+
When migrating a component, also confirm:
|
|
313
|
+
|
|
314
|
+
- Old package exports, component directories, styles, and theme variables are
|
|
315
|
+
removed.
|
|
316
|
+
- The new package theme files contain the variables the component needs.
|
|
317
|
+
- The willa aggregate package only updates exports and dependency config; it
|
|
318
|
+
does not copy theme variables.
|
|
319
|
+
- Documentation and example `packageName`, imports, and CSS entries are updated.
|
|
320
|
+
|
|
321
|
+
## Quality Review Checklist
|
|
322
|
+
|
|
323
|
+
Use this checklist for broad component reviews and for batches that add or
|
|
324
|
+
change multiple components.
|
|
325
|
+
|
|
326
|
+
| Area | Review focus |
|
|
327
|
+
| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
328
|
+
| Composition quality | Prefer composing higher-level components from existing primitives. Keep custom structure only when the semantics, ARIA model, or interaction model is different. |
|
|
329
|
+
| API minimalism | Props should cover real high-frequency use cases. Remove aliases, indirect controls, and options that only serve demos. For already broad APIs, group future additions by purpose instead of adding more flat props. |
|
|
330
|
+
| Theme consistency | Structural CSS should not define colors. Theme values belong only in the owning package. Dark themes should not rely on simply inverting light-theme variables. |
|
|
331
|
+
| Mobile support | Touch targets stay usable, text does not overflow, floating layers stay within the viewport, and horizontal scrolling is contained inside the component. |
|
|
332
|
+
| Documentation and demos | Demo previews and source snippets match one-to-one. Props document required fields and default values. Roadmap docs do not keep components that are already public. |
|
|
333
|
+
| Self-hosting reuse | Example pages and documentation site display layouts should prefer layout components. Component internals should not sacrifice semantics just to reuse a layout primitive. |
|