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
package/docs/css.md
ADDED
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
# Willa CSS Guide
|
|
2
|
+
|
|
3
|
+
This document defines CSS responsibilities, theme variable ownership, and
|
|
4
|
+
component styling rules across Willa packages. When adding a component,
|
|
5
|
+
migrating a component, or changing themes, use this document to decide where
|
|
6
|
+
variables should live. Overall module relationships are documented in
|
|
7
|
+
[Willa Architecture](./architecture.md). Component file organization, exports,
|
|
8
|
+
and example docs are documented in [Willa Component Guide](./component.md).
|
|
9
|
+
|
|
10
|
+
## Principles
|
|
11
|
+
|
|
12
|
+
- Component CSS owns structure, layout, interaction states, and variable
|
|
13
|
+
references.
|
|
14
|
+
- Theme CSS owns colors, backgrounds, border colors, shadows, accents, and
|
|
15
|
+
other visual tokens.
|
|
16
|
+
- Variables are defined only in the package that owns the component.
|
|
17
|
+
- Aggregate packages only compose CSS; they do not redefine concrete component
|
|
18
|
+
variables.
|
|
19
|
+
- Single-component CSS must provide component structure, but must not embed
|
|
20
|
+
theme colors.
|
|
21
|
+
|
|
22
|
+
## Theme Variable Ownership
|
|
23
|
+
|
|
24
|
+
Variables live in the theme files of the package that owns the component:
|
|
25
|
+
|
|
26
|
+
- base visual tokens, such as fonts, text colors, lines, surfaces, panel
|
|
27
|
+
backgrounds, accent colors, and focus rings, live in
|
|
28
|
+
`packages/willa-layout/src/themes/light.css` and
|
|
29
|
+
`packages/willa-layout/src/themes/dark.css`.
|
|
30
|
+
- layout component variables live in
|
|
31
|
+
`packages/willa-layout/src/themes/light.css` and
|
|
32
|
+
`packages/willa-layout/src/themes/dark.css`.
|
|
33
|
+
- content component variables live in
|
|
34
|
+
`packages/willa-content/src/themes/light.css` and
|
|
35
|
+
`packages/willa-content/src/themes/dark.css`.
|
|
36
|
+
- form component variables live in `packages/willa-form/src/themes/light.css`
|
|
37
|
+
and `packages/willa-form/src/themes/dark.css`.
|
|
38
|
+
- AI component variables live in `packages/willa-ai/src/themes/light.css` and
|
|
39
|
+
`packages/willa-ai/src/themes/dark.css`.
|
|
40
|
+
- widgets component variables live in
|
|
41
|
+
`packages/willa-widgets/src/themes/light.css` and
|
|
42
|
+
`packages/willa-widgets/src/themes/dark.css`.
|
|
43
|
+
- `Mdx` prose, heading, and inline-code variables belong to widgets.
|
|
44
|
+
- `Lightbox` variables still belong to content, even though Lightbox renders
|
|
45
|
+
through a portal into `document.body`.
|
|
46
|
+
|
|
47
|
+
Do not copy layout or content variables into form, AI, or widgets themes.
|
|
48
|
+
These packages already depend on layout and content CSS through
|
|
49
|
+
`styles.dependencies`, so they should reuse the owning package as the variable
|
|
50
|
+
source.
|
|
51
|
+
|
|
52
|
+
When adding or migrating a component, decide ownership by where the component
|
|
53
|
+
source lives, not by which package uses the component. For example, `Mdx`
|
|
54
|
+
renders `Image`, `Callout`, and `CodeBlock`, but those variables still belong
|
|
55
|
+
to content; only `Mdx`'s own prose and heading variables belong to widgets.
|
|
56
|
+
Likewise, a form or AI component that renders `Card`, `Button`, `CodeBlock`,
|
|
57
|
+
or `FileCard` should reuse layout and content variables instead of redefining
|
|
58
|
+
them.
|
|
59
|
+
|
|
60
|
+
AI package themes should keep large surfaces neutral. Layout shells, composer
|
|
61
|
+
containers, prompt inputs, message lists, and process cards should use neutral
|
|
62
|
+
surface tokens first. In light theme, pure white can be used for focused input
|
|
63
|
+
areas, cards, and message bubbles when it matches the product surface language,
|
|
64
|
+
but it must not be the only source of hierarchy. Use opaque surface layers,
|
|
65
|
+
subtle borders, spacing, text weight, and state accents to keep component
|
|
66
|
+
boundaries visible on white pages. Role colors such as user, assistant,
|
|
67
|
+
developer, tool, success, and warning should remain accents on borders, marks,
|
|
68
|
+
selected states, or compact status surfaces instead of dominant page
|
|
69
|
+
backgrounds or broad gradients. Avoid translucent white for primary AI
|
|
70
|
+
surfaces because it makes layering and contrast unpredictable across host
|
|
71
|
+
pages.
|
|
72
|
+
|
|
73
|
+
AI themes should define shared semantic tokens before component variables and
|
|
74
|
+
map component variables to those tokens where possible. Use names such as
|
|
75
|
+
`--willa-ai-surface`, `--willa-ai-surface-hover`, `--willa-ai-border`,
|
|
76
|
+
`--willa-ai-muted`, and `--willa-ai-accent` for repeated AI package surfaces,
|
|
77
|
+
text, borders, and accents. New AI components should prefer these shared tokens
|
|
78
|
+
over introducing new per-component colors for the same visual role.
|
|
79
|
+
|
|
80
|
+
## Component CSS
|
|
81
|
+
|
|
82
|
+
Component `index.css` files can contain:
|
|
83
|
+
|
|
84
|
+
- display, position, grid, flex, gap, padding, and margin.
|
|
85
|
+
- width, height, border-radius, z-index, and overflow.
|
|
86
|
+
- animation, transition, and transform.
|
|
87
|
+
- `transparent`, `currentColor`, and `inherit`.
|
|
88
|
+
- Component-local variables, such as `--willa-skeleton-line-width` injected from
|
|
89
|
+
props.
|
|
90
|
+
|
|
91
|
+
Component `index.css` files should not contain:
|
|
92
|
+
|
|
93
|
+
- Theme color values, such as `#fff`, `#111827`, or `rgba(...)`.
|
|
94
|
+
- Theme shadow values.
|
|
95
|
+
- Light/dark theme selectors.
|
|
96
|
+
- Variables for components owned by other packages.
|
|
97
|
+
|
|
98
|
+
Component CSS should reference variables:
|
|
99
|
+
|
|
100
|
+
```css
|
|
101
|
+
.willa-lightbox {
|
|
102
|
+
background: var(--willa-lightbox-bg);
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Theme CSS should define variables:
|
|
107
|
+
|
|
108
|
+
```css
|
|
109
|
+
.willa-shell,
|
|
110
|
+
.willa-lightbox {
|
|
111
|
+
--willa-lightbox-bg: rgba(248, 250, 252, 0.68);
|
|
112
|
+
--willa-lightbox-solid-bg: #f8fafc;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
:root[data-wk-theme="dark"] .willa-shell,
|
|
116
|
+
:root[data-wk-theme="dark"] .willa-lightbox {
|
|
117
|
+
--willa-lightbox-bg: rgba(17, 19, 23, 0.68);
|
|
118
|
+
--willa-lightbox-solid-bg: #111317;
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Responsive Breakpoints
|
|
123
|
+
|
|
124
|
+
Package component CSS should reuse a small breakpoint set so components fold at
|
|
125
|
+
predictable viewport widths:
|
|
126
|
+
|
|
127
|
+
- `900px`: application shells, sidebars, large navigation, and multi-column
|
|
128
|
+
marketing or footer layouts.
|
|
129
|
+
- `767px`: the default mobile boundary for component layout changes.
|
|
130
|
+
- `640px`: compact content and action layouts that need to stack before narrow
|
|
131
|
+
phones.
|
|
132
|
+
- `520px`: dense popovers, pickers, calendars, and fixed-width panels that need
|
|
133
|
+
extra narrow-screen treatment.
|
|
134
|
+
- `480px`: final small-phone adjustments for spacing or very short labels.
|
|
135
|
+
|
|
136
|
+
Avoid adding nearby one-off values such as `720px`, `760px`, or `768px` unless a
|
|
137
|
+
component has a measured layout threshold that cannot fit one of the existing
|
|
138
|
+
breakpoints. When an exception is necessary, keep it local to that component and
|
|
139
|
+
prefer documenting the reason in the related code review or component notes.
|
|
140
|
+
|
|
141
|
+
## Portal Components
|
|
142
|
+
|
|
143
|
+
If a component renders outside `.willa-shell` through a portal, such as
|
|
144
|
+
`Lightbox`, theme variables cannot live only on `.willa-shell`.
|
|
145
|
+
|
|
146
|
+
Include the component root selector in the variable scope:
|
|
147
|
+
|
|
148
|
+
```css
|
|
149
|
+
.willa-shell,
|
|
150
|
+
.willa-lightbox {
|
|
151
|
+
--willa-lightbox-bg: rgba(248, 250, 252, 0.68);
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
The dark theme should do the same:
|
|
156
|
+
|
|
157
|
+
```css
|
|
158
|
+
:root[data-wk-theme="dark"] .willa-shell,
|
|
159
|
+
:root[data-wk-theme="dark"] .willa-lightbox {
|
|
160
|
+
--willa-lightbox-bg: rgba(17, 19, 23, 0.68);
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Do not copy variables into another package theme just to support a portal
|
|
165
|
+
component.
|
|
166
|
+
|
|
167
|
+
Portal components also need to avoid covering the whole backdrop with child
|
|
168
|
+
backgrounds. For example, an image preview can use `--willa-lightbox-bg` on the
|
|
169
|
+
overlay, but the image itself should not use a viewport-sized background that
|
|
170
|
+
blocks the translucent backdrop.
|
|
171
|
+
|
|
172
|
+
## Cross-Package CSS Dependencies
|
|
173
|
+
|
|
174
|
+
Cross-package CSS dependencies are declared through `auklet.config.mjs`.
|
|
175
|
+
|
|
176
|
+
`@willa-ui/content`, `@willa-ui/form`, `@willa-ui/ai`, and
|
|
177
|
+
`@willa-ui/widgets` depend on layout. Packages that compose content components
|
|
178
|
+
also depend on content. AI and widgets should also declare the form CSS
|
|
179
|
+
dependency when they compose form components. A typical higher-level dependency
|
|
180
|
+
block looks like this:
|
|
181
|
+
|
|
182
|
+
```js
|
|
183
|
+
styles: {
|
|
184
|
+
dependencies: {
|
|
185
|
+
"@willa-ui/layout": {
|
|
186
|
+
entry: "/style.css",
|
|
187
|
+
components: "/components/**.css",
|
|
188
|
+
themes: {
|
|
189
|
+
dark: "/themes/dark.css",
|
|
190
|
+
light: "/themes/light.css",
|
|
191
|
+
},
|
|
192
|
+
},
|
|
193
|
+
"@willa-ui/content": {
|
|
194
|
+
entry: "/style.css",
|
|
195
|
+
components: "/components/**.css",
|
|
196
|
+
themes: {
|
|
197
|
+
dark: "/themes/dark.css",
|
|
198
|
+
light: "/themes/light.css",
|
|
199
|
+
},
|
|
200
|
+
},
|
|
201
|
+
},
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
This means higher-level packages can use base layout tokens and component
|
|
206
|
+
styles provided by their dependencies. Their themes should only add variables
|
|
207
|
+
owned by their own package.
|
|
208
|
+
|
|
209
|
+
If content, form, AI, or widgets directly imports a layout component, it should
|
|
210
|
+
declare the layout CSS dependency. If form, AI, or widgets directly imports a
|
|
211
|
+
content component, it should also declare the content CSS dependency. If AI or
|
|
212
|
+
widgets directly imports a form component, it should declare the form CSS
|
|
213
|
+
dependency. Do this instead of copying upstream styles or theme variables. This
|
|
214
|
+
keeps CSS sources consistent when building that package alone, building the
|
|
215
|
+
willa aggregate package, and using single-component entries.
|
|
216
|
+
|
|
217
|
+
The `willa` aggregate package composes public package CSS into entries such as:
|
|
218
|
+
|
|
219
|
+
- `willa/style.css`
|
|
220
|
+
- `willa/themes/light.css`
|
|
221
|
+
- `willa/themes/dark.css`
|
|
222
|
+
- `willa/ComponentName.css`
|
|
223
|
+
|
|
224
|
+
## Naming
|
|
225
|
+
|
|
226
|
+
Variable names should follow component meaning:
|
|
227
|
+
|
|
228
|
+
- `Lightbox` uses `--willa-lightbox-*`.
|
|
229
|
+
- `WebEmbed` uses `--willa-web-embed-*`.
|
|
230
|
+
- `EnglishCards` uses `--willa-english-*`.
|
|
231
|
+
- `GitHubRepo` and `GitHubMention` can share `--willa-github-*`.
|
|
232
|
+
|
|
233
|
+
Do not make unrelated components reuse another component's variable names. For
|
|
234
|
+
example, `Citation` should not use `--willa-github-pill-bg`.
|
|
235
|
+
|
|
236
|
+
Generic tokens can use short names:
|
|
237
|
+
|
|
238
|
+
- `--willa-text`
|
|
239
|
+
- `--willa-text-strong`
|
|
240
|
+
- `--willa-line`
|
|
241
|
+
- `--willa-focus-ring`
|
|
242
|
+
- `--willa-panel-bg`
|
|
243
|
+
|
|
244
|
+
Generic tokens are provided by the layout theme. Content, form, AI, and widgets
|
|
245
|
+
can reference them but must not redefine them.
|
|
246
|
+
|
|
247
|
+
## CSS Imports
|
|
248
|
+
|
|
249
|
+
For aggregate package usage:
|
|
250
|
+
|
|
251
|
+
```tsx
|
|
252
|
+
import "willa/external.css";
|
|
253
|
+
import "willa/themes/light.css";
|
|
254
|
+
import "willa/themes/dark.css";
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
For single-component usage:
|
|
258
|
+
|
|
259
|
+
```tsx
|
|
260
|
+
import { Lightbox } from "willa/Lightbox";
|
|
261
|
+
import "willa/Lightbox.css";
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Do not require users to import the full `style.css` just to get
|
|
265
|
+
single-component structure styles. Component structure should be available
|
|
266
|
+
through single-component CSS, while theme variables come from theme CSS.
|
|
267
|
+
|
|
268
|
+
## CSS Checklist for New Components
|
|
269
|
+
|
|
270
|
+
When adding a content component:
|
|
271
|
+
|
|
272
|
+
1. Write structural styles in
|
|
273
|
+
`packages/willa-content/src/components/ComponentName/index.css`.
|
|
274
|
+
2. Add theme variables in `packages/willa-content/src/themes/light.css` and
|
|
275
|
+
`dark.css` when needed.
|
|
276
|
+
3. Confirm `packages/willa-content/src/index.ts` and
|
|
277
|
+
`packages/willa/src/ComponentName/index.tsx` export the component.
|
|
278
|
+
4. Confirm single-component CSS works through `willa/ComponentName.css`.
|
|
279
|
+
|
|
280
|
+
When adding a widgets component:
|
|
281
|
+
|
|
282
|
+
1. Write structural styles in
|
|
283
|
+
`packages/willa-widgets/src/components/ComponentName/index.css`.
|
|
284
|
+
2. Add widgets-owned theme variables in
|
|
285
|
+
`packages/willa-widgets/src/themes/light.css` and `dark.css`.
|
|
286
|
+
3. If it composes content components, reuse content theme variables instead of
|
|
287
|
+
copying them.
|
|
288
|
+
4. Confirm `packages/willa-widgets/src/index.ts` and
|
|
289
|
+
`packages/willa/src/ComponentName/index.tsx` export the component.
|
|
290
|
+
|
|
291
|
+
When adding a form component:
|
|
292
|
+
|
|
293
|
+
1. Write structural styles in
|
|
294
|
+
`packages/willa-form/src/components/ComponentName/index.css`.
|
|
295
|
+
2. Add form-owned theme variables in
|
|
296
|
+
`packages/willa-form/src/themes/light.css` and `dark.css`.
|
|
297
|
+
3. If it composes content components, reuse content theme variables instead of
|
|
298
|
+
copying them.
|
|
299
|
+
4. Confirm `packages/willa-form/src/index.ts` and
|
|
300
|
+
`packages/willa/src/ComponentName/index.tsx` export the component.
|
|
301
|
+
|
|
302
|
+
When adding an AI component:
|
|
303
|
+
|
|
304
|
+
1. Write structural styles in
|
|
305
|
+
`packages/willa-ai/src/components/ComponentName/index.css`.
|
|
306
|
+
2. Add AI-owned theme variables in `packages/willa-ai/src/themes/light.css` and
|
|
307
|
+
`dark.css`.
|
|
308
|
+
3. If it composes content components, reuse content theme variables instead of
|
|
309
|
+
copying them.
|
|
310
|
+
4. Confirm `packages/willa-ai/src/index.ts` exports the component and update
|
|
311
|
+
`packages/willa/src/ComponentName/index.tsx` if it should be exposed through
|
|
312
|
+
the aggregate package.
|
|
313
|
+
|
|
314
|
+
When migrating a component:
|
|
315
|
+
|
|
316
|
+
- Variables move with the package that owns the component.
|
|
317
|
+
- Remove stale variables from the old package theme.
|
|
318
|
+
- Do not add duplicate variables to the `willa` aggregate package; update only
|
|
319
|
+
exports or dependency configuration.
|
|
320
|
+
|
|
321
|
+
## Local Variables
|
|
322
|
+
|
|
323
|
+
Some CSS variables are not theme variables. They are component-local variables,
|
|
324
|
+
defined in component CSS or injected through React inline styles.
|
|
325
|
+
|
|
326
|
+
For example, `Skeleton`:
|
|
327
|
+
|
|
328
|
+
```css
|
|
329
|
+
.willa-prose-skeleton-line {
|
|
330
|
+
width: var(--willa-skeleton-line-width, 100%);
|
|
331
|
+
height: var(--willa-skeleton-line-height, 0.9rem);
|
|
332
|
+
}
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
`--willa-skeleton-line-width` and `--willa-skeleton-line-height` come from props
|
|
336
|
+
and do not need to live in theme files.
|
|
337
|
+
|
|
338
|
+
Use this rule:
|
|
339
|
+
|
|
340
|
+
- Variables that affect theme visuals belong in theme files.
|
|
341
|
+
- Variables produced by props, layout state, or component-local calculations can
|
|
342
|
+
stay local.
|
|
343
|
+
- Component-local variables must have reasonable fallbacks.
|
|
344
|
+
|
|
345
|
+
For prop-driven layout components, keep each layout value in one source of
|
|
346
|
+
truth. If a component computes `display`, `gap`, `align-items`, or similar
|
|
347
|
+
values from props, do not mirror the same matrix in CSS modifier classes unless
|
|
348
|
+
those classes are the only source of the behavior. CSS should still own
|
|
349
|
+
structural selectors that cannot be expressed on the root element.
|
|
350
|
+
|
|
351
|
+
## FAQ
|
|
352
|
+
|
|
353
|
+
What should a content, form, AI, or widgets component do if it needs base
|
|
354
|
+
visual tokens?
|
|
355
|
+
|
|
356
|
+
Reference variables provided by the layout theme, such as
|
|
357
|
+
`--willa-text-strong`, `--willa-line`, and `--willa-focus-ring`. Do not redefine
|
|
358
|
+
these base tokens in content, form, AI, or widgets themes.
|
|
359
|
+
|
|
360
|
+
Should higher-level packages copy layout or content variables when composing
|
|
361
|
+
upstream components?
|
|
362
|
+
|
|
363
|
+
No. Declare the dependency through `styles.dependencies` in `auklet.config.mjs`
|
|
364
|
+
so the build output combines upstream CSS.
|
|
365
|
+
|
|
366
|
+
Can component CSS contain a special color such as `rgba(...)`?
|
|
367
|
+
|
|
368
|
+
If the value is part of the visual theme, no. Extract it into a theme variable.
|
|
369
|
+
Only keep it in component CSS when it is a technical value for animation,
|
|
370
|
+
masking, transparency, or structure that is not theme-specific. Functional
|
|
371
|
+
colors such as the ColorPicker spectrum or Separator dashed gradient can stay
|
|
372
|
+
in component CSS when they represent the rendered control itself rather than a
|
|
373
|
+
theme surface, border, text, or status color.
|
|
374
|
+
|
|
375
|
+
Generated content can keep functional rendering defaults when they are part of
|
|
376
|
+
the generated artifact instead of the component skin. For example, `QRCode`
|
|
377
|
+
`color` and `bgColor` defaults are QR rendering parameters, and `Watermark`
|
|
378
|
+
canvas colors are fallback ink values for generated image output. These
|
|
379
|
+
exceptions do not apply to themeable decorative visuals. For example,
|
|
380
|
+
`BorderBeam`'s default gradient belongs in the layout theme because it is the
|
|
381
|
+
component's visible skin and needs light/dark variants.
|
|
382
|
+
|
|
383
|
+
Should a variable live in theme files even if only one component uses it?
|
|
384
|
+
|
|
385
|
+
Yes, if it represents theme visuals. Reuse is not the deciding factor; theme
|
|
386
|
+
ownership is.
|
|
387
|
+
|
|
388
|
+
## Checklist
|
|
389
|
+
|
|
390
|
+
Before adding or changing CSS, confirm:
|
|
391
|
+
|
|
392
|
+
- Variables are defined in the package that owns the component.
|
|
393
|
+
- Component CSS does not hardcode theme colors.
|
|
394
|
+
- Content, form, AI, and widgets do not copy upstream variables.
|
|
395
|
+
- Portal component variable scope covers the actual DOM location.
|
|
396
|
+
- The `willa` aggregate package composes CSS through `styles.dependencies`
|
|
397
|
+
instead of hand-writing duplicate variables.
|
|
398
|
+
- `pnpm run typecheck` and the relevant build command pass. Run
|
|
399
|
+
`pnpm run build:packages` for first-time public component additions, package
|
|
400
|
+
entry changes, package migration, or build config changes.
|
package/docs/style.md
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Willa Style Guide
|
|
2
|
+
|
|
3
|
+
This document defines TypeScript, React, and documentation code style for Willa.
|
|
4
|
+
Component file organization and export flow are documented in
|
|
5
|
+
[Willa Component Guide](./component.md). CSS and theme rules are documented in
|
|
6
|
+
[Willa CSS Guide](./css.md).
|
|
7
|
+
|
|
8
|
+
## Function Declarations
|
|
9
|
+
|
|
10
|
+
Exported functions must use function declarations:
|
|
11
|
+
|
|
12
|
+
```tsx
|
|
13
|
+
export function CodeBlock(props: CodeBlockProps) {
|
|
14
|
+
return <pre />;
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Non-exported helpers should use arrow functions by default:
|
|
19
|
+
|
|
20
|
+
```tsx
|
|
21
|
+
const resolveLabel = (value: string | undefined) => value?.trim() ?? "";
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Avoid manually declaring return types when TypeScript can infer them. Add return
|
|
25
|
+
types only when inference causes errors, public API clarity needs it, or
|
|
26
|
+
inference is unstable.
|
|
27
|
+
|
|
28
|
+
## Component Exports
|
|
29
|
+
|
|
30
|
+
Components should export the component itself directly. Do not use `createXxx`
|
|
31
|
+
as a component export. `createXxx` is only appropriate for real factory
|
|
32
|
+
functions or utilities.
|
|
33
|
+
|
|
34
|
+
```tsx
|
|
35
|
+
export function AudioLink(props: AudioLinkProps) {
|
|
36
|
+
return <a href={props.href}>{props.children}</a>;
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Single-component entries must export both the component and its types:
|
|
41
|
+
|
|
42
|
+
```tsx
|
|
43
|
+
export { AudioLink } from "@willa-ui/widgets/components/AudioLink";
|
|
44
|
+
export type { AudioLinkProps } from "@willa-ui/widgets/components/AudioLink";
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Shared types can live in `@willa-ui/shared`, but component entries should still
|
|
48
|
+
provide convenient type exports.
|
|
49
|
+
|
|
50
|
+
## Imports
|
|
51
|
+
|
|
52
|
+
When a module needs both React runtime values and React types, keep them in one
|
|
53
|
+
import statement with inline `type` specifiers:
|
|
54
|
+
|
|
55
|
+
```tsx
|
|
56
|
+
import { useEffect, useState, type MouseEvent, type ReactNode } from "react";
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Do not split the same React module into adjacent value and type imports:
|
|
60
|
+
|
|
61
|
+
```tsx
|
|
62
|
+
import type { MouseEvent, ReactNode } from "react";
|
|
63
|
+
import { useState } from "react";
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Pure type-only React imports are still fine when no runtime React value is
|
|
67
|
+
needed.
|
|
68
|
+
|
|
69
|
+
## Naming
|
|
70
|
+
|
|
71
|
+
Component names should describe general meaning and should not carry historical
|
|
72
|
+
source prefixes. Unless a component is specifically MDX-related, do not prefix
|
|
73
|
+
it with `Mdx`.
|
|
74
|
+
|
|
75
|
+
Do not name components after HTML wrapper tags, such as renaming `CodeBlock` to
|
|
76
|
+
`Pre`.
|
|
77
|
+
|
|
78
|
+
Internal helpers should describe business intent instead of implementation
|
|
79
|
+
details:
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
const normalizeLanguage = (language: string | undefined) =>
|
|
83
|
+
language?.trim().toLowerCase() ?? "";
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Do not sacrifice readability just to shorten names. Cross-package exported
|
|
87
|
+
types and functions should use complete semantic names.
|
|
88
|
+
|
|
89
|
+
## Types
|
|
90
|
+
|
|
91
|
+
Public component props use the `ComponentNameProps` naming pattern and should
|
|
92
|
+
live near the component definition.
|
|
93
|
+
|
|
94
|
+
```tsx
|
|
95
|
+
export interface ImageGalleryProps {
|
|
96
|
+
images: Array<ImageItem>;
|
|
97
|
+
columns?: number;
|
|
98
|
+
}
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
Array types should use `Array<T>` instead of bracket array syntax so nested and
|
|
102
|
+
union arrays stay visually consistent in public props and docs.
|
|
103
|
+
|
|
104
|
+
Only types reused across packages, or public types unrelated to a specific
|
|
105
|
+
component, should move to `@willa-ui/shared`. Do not move component-private
|
|
106
|
+
types to shared just for uniformity.
|
|
107
|
+
|
|
108
|
+
Prefer `export type` for type exports. Keep runtime exports and type exports
|
|
109
|
+
separate so bundlers do not misread side effects.
|
|
110
|
+
|
|
111
|
+
## Comments
|
|
112
|
+
|
|
113
|
+
Do not add comments that merely explain what the code does. Add comments when:
|
|
114
|
+
|
|
115
|
+
- A component uses an internal protocol, such as a marker attached to a
|
|
116
|
+
component object.
|
|
117
|
+
- Logic exists to handle external platform or browser behavior.
|
|
118
|
+
- A seemingly unnecessary guard protects a real boundary condition.
|
|
119
|
+
- A type shape works around tooling constraints or preserves public API
|
|
120
|
+
stability.
|
|
121
|
+
|
|
122
|
+
Comments should explain why, not restate what.
|
|
123
|
+
|
|
124
|
+
## Example Code
|
|
125
|
+
|
|
126
|
+
Demo text is primarily Chinese, and example code should reflect realistic use.
|
|
127
|
+
Prefer `defineDoc` to generate previews and code. Use explicit `code` only for
|
|
128
|
+
complex scenarios.
|
|
129
|
+
|
|
130
|
+
Example code should be copyable:
|
|
131
|
+
|
|
132
|
+
- Import paths use public entries, such as `willa/CodeBlock`.
|
|
133
|
+
- CSS imports use public CSS entries, such as `willa/CodeBlock.css`.
|
|
134
|
+
- Example data must not depend on local development environments or private
|
|
135
|
+
URLs.
|
|
136
|
+
- Required markers in prop docs belong on prop names.
|
|
137
|
+
|
|
138
|
+
## Maintenance Principles
|
|
139
|
+
|
|
140
|
+
Before adding a style rule, confirm it can be followed by existing code and
|
|
141
|
+
that it reduces real maintenance cost. Do not add rules that only express
|
|
142
|
+
personal preference.
|
|
143
|
+
|
|
144
|
+
When old code conflicts with this document, new code should follow this
|
|
145
|
+
document. Old code can be aligned while making related changes, but do not do
|
|
146
|
+
large style-only rewrites unless the task explicitly asks for that scope.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>Willa Example</title>
|
|
7
|
+
</head>
|
|
8
|
+
<body>
|
|
9
|
+
<div id="root"></div>
|
|
10
|
+
<script type="module" src="/src/main.tsx"></script>
|
|
11
|
+
</body>
|
|
12
|
+
</html>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "willa-example",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"private": true,
|
|
5
|
+
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "vite --host 0.0.0.0",
|
|
8
|
+
"build": "vite build",
|
|
9
|
+
"preview": "vite preview --host 0.0.0.0",
|
|
10
|
+
"typecheck": "tsc -p ../tsconfig.json --noEmit"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"willa": "workspace:*",
|
|
14
|
+
"@radix-ui/react-icons": "catalog:",
|
|
15
|
+
"aidly": "catalog:",
|
|
16
|
+
"react": "catalog:",
|
|
17
|
+
"react-dom": "catalog:",
|
|
18
|
+
"classnames": "catalog:"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@types/react": "catalog:",
|
|
22
|
+
"@types/react-dom": "catalog:",
|
|
23
|
+
"vite-tsconfig-paths": "catalog:",
|
|
24
|
+
"vite": "catalog:",
|
|
25
|
+
"auklet": "catalog:",
|
|
26
|
+
"typescript": "catalog:"
|
|
27
|
+
}
|
|
28
|
+
}
|