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.
Files changed (670) hide show
  1. package/.github/workflows/deploy.yml +45 -0
  2. package/.husky/pre-commit +1 -0
  3. package/AGENTS.md +128 -0
  4. package/CONTRIBUTING.md +138 -0
  5. package/README.md +27 -0
  6. package/docs/architecture.md +337 -0
  7. package/docs/component.md +333 -0
  8. package/docs/css.md +400 -0
  9. package/docs/style.md +146 -0
  10. package/example/index.html +12 -0
  11. package/example/package.json +28 -0
  12. package/example/src/App.tsx +613 -0
  13. package/example/src/UsageGuide.tsx +179 -0
  14. package/example/src/catalog/DocView.tsx +413 -0
  15. package/example/src/catalog/defineDoc.tsx +352 -0
  16. package/example/src/catalog/registry.ts +206 -0
  17. package/example/src/catalog/types.ts +38 -0
  18. package/example/src/docs/Alert.demo.tsx +233 -0
  19. package/example/src/docs/Anchor.demo.tsx +244 -0
  20. package/example/src/docs/AppShell.demo.tsx +192 -0
  21. package/example/src/docs/AttachmentList.demo.tsx +425 -0
  22. package/example/src/docs/AudioEmbed.demo.tsx +102 -0
  23. package/example/src/docs/AudioLink.demo.tsx +84 -0
  24. package/example/src/docs/Avatar.demo.tsx +342 -0
  25. package/example/src/docs/Badge.demo.tsx +196 -0
  26. package/example/src/docs/BorderBeam.demo.tsx +261 -0
  27. package/example/src/docs/Breadcrumb.demo.tsx +194 -0
  28. package/example/src/docs/Button.demo.tsx +304 -0
  29. package/example/src/docs/Calendar.demo.tsx +742 -0
  30. package/example/src/docs/Callout.demo.tsx +143 -0
  31. package/example/src/docs/Card.demo.tsx +254 -0
  32. package/example/src/docs/Carousel.demo.tsx +764 -0
  33. package/example/src/docs/ChatMessage.demo.tsx +356 -0
  34. package/example/src/docs/ChatThread.demo.tsx +107 -0
  35. package/example/src/docs/Checkbox.demo.tsx +112 -0
  36. package/example/src/docs/Citation.demo.tsx +297 -0
  37. package/example/src/docs/CodeBlock.demo.tsx +175 -0
  38. package/example/src/docs/CodeTabs.demo.tsx +285 -0
  39. package/example/src/docs/Collapse.demo.tsx +306 -0
  40. package/example/src/docs/ColorPicker.demo.tsx +491 -0
  41. package/example/src/docs/Comment.demo.tsx +333 -0
  42. package/example/src/docs/CommentInput.demo.tsx +894 -0
  43. package/example/src/docs/CommentList.demo.tsx +344 -0
  44. package/example/src/docs/Composer.demo.tsx +435 -0
  45. package/example/src/docs/Container.demo.tsx +125 -0
  46. package/example/src/docs/ContextPanel.demo.tsx +344 -0
  47. package/example/src/docs/ContextWindowMeter.demo.tsx +212 -0
  48. package/example/src/docs/ConversationList.demo.tsx +289 -0
  49. package/example/src/docs/CopyButton.demo.tsx +274 -0
  50. package/example/src/docs/DatePicker.demo.tsx +502 -0
  51. package/example/src/docs/DescriptionList.demo.tsx +265 -0
  52. package/example/src/docs/Dialog.demo.tsx +492 -0
  53. package/example/src/docs/DiffViewer.demo.tsx +307 -0
  54. package/example/src/docs/Download.demo.tsx +182 -0
  55. package/example/src/docs/Drawer.demo.tsx +300 -0
  56. package/example/src/docs/EmptyState.demo.tsx +406 -0
  57. package/example/src/docs/EnglishCards.demo.tsx +133 -0
  58. package/example/src/docs/FeedbackBar.demo.tsx +219 -0
  59. package/example/src/docs/FileCard.demo.tsx +234 -0
  60. package/example/src/docs/FilePreview.demo.tsx +333 -0
  61. package/example/src/docs/FileTree.demo.tsx +463 -0
  62. package/example/src/docs/FilterBar.demo.tsx +290 -0
  63. package/example/src/docs/FloatButton.demo.tsx +726 -0
  64. package/example/src/docs/Form.demo.tsx +278 -0
  65. package/example/src/docs/FormActions.demo.tsx +198 -0
  66. package/example/src/docs/FormField.demo.tsx +193 -0
  67. package/example/src/docs/FormGroup.demo.tsx +188 -0
  68. package/example/src/docs/FormMessage.demo.tsx +158 -0
  69. package/example/src/docs/GenerationCard.demo.tsx +393 -0
  70. package/example/src/docs/GitHubMention.demo.tsx +83 -0
  71. package/example/src/docs/GitHubRepo.demo.tsx +88 -0
  72. package/example/src/docs/Grid.demo.tsx +218 -0
  73. package/example/src/docs/Group.demo.tsx +315 -0
  74. package/example/src/docs/HumanApprovalCard.demo.tsx +275 -0
  75. package/example/src/docs/IconButton.demo.tsx +354 -0
  76. package/example/src/docs/Image.demo.tsx +124 -0
  77. package/example/src/docs/ImageGallery.demo.tsx +206 -0
  78. package/example/src/docs/Input.demo.tsx +238 -0
  79. package/example/src/docs/InputPanel.demo.tsx +255 -0
  80. package/example/src/docs/Kbd.demo.tsx +162 -0
  81. package/example/src/docs/Lightbox.demo.tsx +184 -0
  82. package/example/src/docs/List.demo.tsx +1009 -0
  83. package/example/src/docs/LogoWall.demo.tsx +178 -0
  84. package/example/src/docs/Masonry.demo.tsx +170 -0
  85. package/example/src/docs/MathExpression.demo.tsx +164 -0
  86. package/example/src/docs/Mdx.demo.tsx +343 -0
  87. package/example/src/docs/MentionInput.demo.tsx +543 -0
  88. package/example/src/docs/Menu.demo.tsx +430 -0
  89. package/example/src/docs/MessageActions.demo.tsx +355 -0
  90. package/example/src/docs/MessageList.demo.tsx +410 -0
  91. package/example/src/docs/ModelSelector.demo.tsx +297 -0
  92. package/example/src/docs/NumberInput.demo.tsx +816 -0
  93. package/example/src/docs/PageHeader.demo.tsx +198 -0
  94. package/example/src/docs/Pagination.demo.tsx +257 -0
  95. package/example/src/docs/Panel.demo.tsx +184 -0
  96. package/example/src/docs/Picker.demo.tsx +257 -0
  97. package/example/src/docs/Poem.demo.tsx +98 -0
  98. package/example/src/docs/Popover.demo.tsx +362 -0
  99. package/example/src/docs/ProfileCard.demo.tsx +161 -0
  100. package/example/src/docs/Progress.demo.tsx +243 -0
  101. package/example/src/docs/PromptInput.demo.tsx +497 -0
  102. package/example/src/docs/PromptTemplatePicker.demo.tsx +344 -0
  103. package/example/src/docs/QRCode.demo.tsx +364 -0
  104. package/example/src/docs/Radio.demo.tsx +120 -0
  105. package/example/src/docs/RangeInput.demo.tsx +405 -0
  106. package/example/src/docs/Rate.demo.tsx +396 -0
  107. package/example/src/docs/ReasoningSteps.demo.tsx +470 -0
  108. package/example/src/docs/Result.demo.tsx +121 -0
  109. package/example/src/docs/ScheduleCalendar.demo.tsx +459 -0
  110. package/example/src/docs/SearchInput.demo.tsx +217 -0
  111. package/example/src/docs/SectionHeader.demo.tsx +186 -0
  112. package/example/src/docs/Segmented.demo.tsx +598 -0
  113. package/example/src/docs/Select.demo.tsx +164 -0
  114. package/example/src/docs/SelectionBar.demo.tsx +315 -0
  115. package/example/src/docs/Separator.demo.tsx +179 -0
  116. package/example/src/docs/SidebarLayout.demo.tsx +183 -0
  117. package/example/src/docs/SiteFooter.demo.tsx +189 -0
  118. package/example/src/docs/SiteNav.demo.tsx +168 -0
  119. package/example/src/docs/Skeleton.demo.tsx +154 -0
  120. package/example/src/docs/SourceCard.demo.tsx +241 -0
  121. package/example/src/docs/Spinner.demo.tsx +166 -0
  122. package/example/src/docs/SplitPane.demo.tsx +544 -0
  123. package/example/src/docs/Stack.demo.tsx +135 -0
  124. package/example/src/docs/Statistic.demo.tsx +124 -0
  125. package/example/src/docs/Steps.demo.tsx +88 -0
  126. package/example/src/docs/SuggestionChips.demo.tsx +259 -0
  127. package/example/src/docs/Switch.demo.tsx +110 -0
  128. package/example/src/docs/Table.demo.tsx +2071 -0
  129. package/example/src/docs/Tabs.demo.tsx +285 -0
  130. package/example/src/docs/Tag.demo.tsx +264 -0
  131. package/example/src/docs/TagInput.demo.tsx +385 -0
  132. package/example/src/docs/TextArea.demo.tsx +185 -0
  133. package/example/src/docs/ThinkingIndicator.demo.tsx +248 -0
  134. package/example/src/docs/TimePicker.demo.tsx +464 -0
  135. package/example/src/docs/Timeline.demo.tsx +311 -0
  136. package/example/src/docs/Toast.demo.tsx +351 -0
  137. package/example/src/docs/ToolCallCard.demo.tsx +286 -0
  138. package/example/src/docs/Toolbar.demo.tsx +372 -0
  139. package/example/src/docs/Tooltip.demo.tsx +274 -0
  140. package/example/src/docs/Tour.demo.tsx +423 -0
  141. package/example/src/docs/TraceViewer.demo.tsx +416 -0
  142. package/example/src/docs/Tree.demo.tsx +507 -0
  143. package/example/src/docs/TreeSelect.demo.tsx +476 -0
  144. package/example/src/docs/Typography.demo.tsx +953 -0
  145. package/example/src/docs/Upload.demo.tsx +299 -0
  146. package/example/src/docs/VideoEmbed.demo.tsx +108 -0
  147. package/example/src/docs/VideoLink.demo.tsx +83 -0
  148. package/example/src/docs/Watermark.demo.tsx +352 -0
  149. package/example/src/docs/WebEmbed.demo.tsx +96 -0
  150. package/example/src/docs/XPostEmbed.demo.tsx +57 -0
  151. package/example/src/main.tsx +36 -0
  152. package/example/src/styles.css +919 -0
  153. package/example/src/vite-env.d.ts +1 -0
  154. package/example/vite.config.ts +11 -0
  155. package/package.json +40 -0
  156. package/packages/willa/README.md +47 -0
  157. package/packages/willa/auklet.config.mjs +23 -0
  158. package/packages/willa/package.json +83 -0
  159. package/packages/willa/src/Alert/index.tsx +8 -0
  160. package/packages/willa/src/Anchor/index.tsx +8 -0
  161. package/packages/willa/src/AppShell/index.tsx +2 -0
  162. package/packages/willa/src/AttachmentList/index.tsx +10 -0
  163. package/packages/willa/src/AudioEmbed/index.tsx +4 -0
  164. package/packages/willa/src/AudioLink/index.tsx +4 -0
  165. package/packages/willa/src/Avatar/index.tsx +6 -0
  166. package/packages/willa/src/Badge/index.tsx +7 -0
  167. package/packages/willa/src/BorderBeam/index.tsx +6 -0
  168. package/packages/willa/src/Breadcrumb/index.tsx +6 -0
  169. package/packages/willa/src/Button/index.tsx +6 -0
  170. package/packages/willa/src/Calendar/index.tsx +19 -0
  171. package/packages/willa/src/Callout/index.tsx +5 -0
  172. package/packages/willa/src/Card/index.tsx +6 -0
  173. package/packages/willa/src/Carousel/index.tsx +8 -0
  174. package/packages/willa/src/ChatMessage/index.tsx +6 -0
  175. package/packages/willa/src/ChatThread/index.tsx +4 -0
  176. package/packages/willa/src/Checkbox/index.tsx +5 -0
  177. package/packages/willa/src/Citation/index.tsx +6 -0
  178. package/packages/willa/src/CodeBlock/index.tsx +5 -0
  179. package/packages/willa/src/CodeTabs/index.tsx +6 -0
  180. package/packages/willa/src/Collapse/index.tsx +5 -0
  181. package/packages/willa/src/ColorPicker/index.tsx +12 -0
  182. package/packages/willa/src/Comment/index.tsx +6 -0
  183. package/packages/willa/src/CommentInput/index.tsx +8 -0
  184. package/packages/willa/src/CommentList/index.tsx +5 -0
  185. package/packages/willa/src/Composer/index.tsx +1 -0
  186. package/packages/willa/src/Container/index.tsx +6 -0
  187. package/packages/willa/src/ContextPanel/index.tsx +7 -0
  188. package/packages/willa/src/ContextWindowMeter/index.tsx +7 -0
  189. package/packages/willa/src/ConversationList/index.tsx +8 -0
  190. package/packages/willa/src/CopyButton/index.tsx +6 -0
  191. package/packages/willa/src/DatePicker/index.tsx +15 -0
  192. package/packages/willa/src/DescriptionList/index.tsx +8 -0
  193. package/packages/willa/src/Dialog/index.tsx +6 -0
  194. package/packages/willa/src/DiffViewer/index.tsx +5 -0
  195. package/packages/willa/src/Download/index.tsx +6 -0
  196. package/packages/willa/src/Drawer/index.tsx +6 -0
  197. package/packages/willa/src/EmptyState/index.tsx +7 -0
  198. package/packages/willa/src/EnglishCards/index.tsx +4 -0
  199. package/packages/willa/src/FeedbackBar/index.tsx +7 -0
  200. package/packages/willa/src/FileCard/index.tsx +7 -0
  201. package/packages/willa/src/FilePreview/index.tsx +6 -0
  202. package/packages/willa/src/FileTree/index.tsx +10 -0
  203. package/packages/willa/src/FilterBar/index.tsx +7 -0
  204. package/packages/willa/src/FloatButton/index.tsx +14 -0
  205. package/packages/willa/src/Form/index.tsx +5 -0
  206. package/packages/willa/src/FormActions/index.tsx +6 -0
  207. package/packages/willa/src/FormField/index.tsx +6 -0
  208. package/packages/willa/src/FormGroup/index.tsx +6 -0
  209. package/packages/willa/src/FormMessage/index.tsx +5 -0
  210. package/packages/willa/src/GenerationCard/index.tsx +6 -0
  211. package/packages/willa/src/GitHubMention/index.tsx +4 -0
  212. package/packages/willa/src/GitHubRepo/index.tsx +4 -0
  213. package/packages/willa/src/Grid/index.tsx +8 -0
  214. package/packages/willa/src/Group/index.tsx +9 -0
  215. package/packages/willa/src/HumanApprovalCard/index.tsx +8 -0
  216. package/packages/willa/src/IconButton/index.tsx +7 -0
  217. package/packages/willa/src/Image/index.tsx +1 -0
  218. package/packages/willa/src/ImageGallery/index.tsx +5 -0
  219. package/packages/willa/src/Input/index.tsx +6 -0
  220. package/packages/willa/src/InputPanel/index.tsx +8 -0
  221. package/packages/willa/src/Kbd/index.tsx +9 -0
  222. package/packages/willa/src/Lightbox/index.tsx +7 -0
  223. package/packages/willa/src/List/index.tsx +10 -0
  224. package/packages/willa/src/LogoWall/index.tsx +6 -0
  225. package/packages/willa/src/Masonry/index.tsx +6 -0
  226. package/packages/willa/src/MathExpression/index.tsx +5 -0
  227. package/packages/willa/src/Mdx/index.tsx +1 -0
  228. package/packages/willa/src/MentionInput/index.tsx +5 -0
  229. package/packages/willa/src/Menu/index.tsx +11 -0
  230. package/packages/willa/src/MessageActions/index.tsx +8 -0
  231. package/packages/willa/src/MessageList/index.tsx +4 -0
  232. package/packages/willa/src/ModelSelector/index.tsx +9 -0
  233. package/packages/willa/src/NumberInput/index.tsx +15 -0
  234. package/packages/willa/src/PageHeader/index.tsx +5 -0
  235. package/packages/willa/src/Pagination/index.tsx +6 -0
  236. package/packages/willa/src/Panel/index.tsx +6 -0
  237. package/packages/willa/src/Picker/index.tsx +8 -0
  238. package/packages/willa/src/Poem/index.tsx +1 -0
  239. package/packages/willa/src/Popover/index.tsx +7 -0
  240. package/packages/willa/src/ProfileCard/index.tsx +5 -0
  241. package/packages/willa/src/Progress/index.tsx +6 -0
  242. package/packages/willa/src/PromptInput/index.tsx +6 -0
  243. package/packages/willa/src/PromptTemplatePicker/index.tsx +6 -0
  244. package/packages/willa/src/QRCode/index.tsx +9 -0
  245. package/packages/willa/src/Radio/index.tsx +5 -0
  246. package/packages/willa/src/RangeInput/index.tsx +2 -0
  247. package/packages/willa/src/Rate/index.tsx +6 -0
  248. package/packages/willa/src/ReasoningSteps/index.tsx +8 -0
  249. package/packages/willa/src/ResizablePanel/index.tsx +10 -0
  250. package/packages/willa/src/Result/index.tsx +7 -0
  251. package/packages/willa/src/SearchInput/index.tsx +4 -0
  252. package/packages/willa/src/SectionHeader/index.tsx +6 -0
  253. package/packages/willa/src/Segmented/index.tsx +9 -0
  254. package/packages/willa/src/Select/index.tsx +7 -0
  255. package/packages/willa/src/SelectionBar/index.tsx +5 -0
  256. package/packages/willa/src/Separator/index.tsx +7 -0
  257. package/packages/willa/src/SidebarLayout/index.tsx +7 -0
  258. package/packages/willa/src/SiteFooter/index.tsx +6 -0
  259. package/packages/willa/src/SiteNav/index.tsx +5 -0
  260. package/packages/willa/src/Skeleton/index.tsx +4 -0
  261. package/packages/willa/src/SourceCard/index.tsx +6 -0
  262. package/packages/willa/src/Spinner/index.tsx +7 -0
  263. package/packages/willa/src/SplitPane/index.tsx +10 -0
  264. package/packages/willa/src/Stack/index.tsx +8 -0
  265. package/packages/willa/src/Statistic/index.tsx +7 -0
  266. package/packages/willa/src/Step/index.tsx +1 -0
  267. package/packages/willa/src/Steps/index.tsx +1 -0
  268. package/packages/willa/src/SuggestionChips/index.tsx +7 -0
  269. package/packages/willa/src/Switch/index.tsx +5 -0
  270. package/packages/willa/src/Table/index.tsx +19 -0
  271. package/packages/willa/src/Tabs/index.tsx +6 -0
  272. package/packages/willa/src/Tag/index.tsx +9 -0
  273. package/packages/willa/src/TagInput/index.tsx +8 -0
  274. package/packages/willa/src/TextArea/index.tsx +7 -0
  275. package/packages/willa/src/ThinkingIndicator/index.tsx +7 -0
  276. package/packages/willa/src/TimePicker/index.tsx +10 -0
  277. package/packages/willa/src/Timeline/index.tsx +8 -0
  278. package/packages/willa/src/Toast/index.tsx +10 -0
  279. package/packages/willa/src/ToolCallCard/index.tsx +5 -0
  280. package/packages/willa/src/Toolbar/index.tsx +6 -0
  281. package/packages/willa/src/Tooltip/index.tsx +7 -0
  282. package/packages/willa/src/Tour/index.tsx +10 -0
  283. package/packages/willa/src/TraceViewer/index.tsx +8 -0
  284. package/packages/willa/src/Tree/index.tsx +11 -0
  285. package/packages/willa/src/TreeSelect/index.tsx +8 -0
  286. package/packages/willa/src/Typography/index.tsx +20 -0
  287. package/packages/willa/src/Upload/index.tsx +11 -0
  288. package/packages/willa/src/VideoEmbed/index.tsx +4 -0
  289. package/packages/willa/src/VideoLink/index.tsx +4 -0
  290. package/packages/willa/src/Watermark/index.tsx +5 -0
  291. package/packages/willa/src/WebEmbed/index.tsx +4 -0
  292. package/packages/willa/src/XPostEmbed/index.tsx +4 -0
  293. package/packages/willa/src/index.ts +5 -0
  294. package/packages/willa/vitest.config.ts +9 -0
  295. package/packages/willa-ai/README.md +32 -0
  296. package/packages/willa-ai/auklet.config.mjs +25 -0
  297. package/packages/willa-ai/package.json +84 -0
  298. package/packages/willa-ai/src/components/AttachmentList/index.css +223 -0
  299. package/packages/willa-ai/src/components/AttachmentList/index.tsx +256 -0
  300. package/packages/willa-ai/src/components/ChatMessage/index.css +211 -0
  301. package/packages/willa-ai/src/components/ChatMessage/index.tsx +126 -0
  302. package/packages/willa-ai/src/components/Composer/index.css +137 -0
  303. package/packages/willa-ai/src/components/Composer/index.tsx +92 -0
  304. package/packages/willa-ai/src/components/ContextPanel/index.css +252 -0
  305. package/packages/willa-ai/src/components/ContextPanel/index.tsx +513 -0
  306. package/packages/willa-ai/src/components/ContextWindowMeter/index.css +237 -0
  307. package/packages/willa-ai/src/components/ContextWindowMeter/index.tsx +266 -0
  308. package/packages/willa-ai/src/components/ConversationList/index.css +260 -0
  309. package/packages/willa-ai/src/components/ConversationList/index.tsx +549 -0
  310. package/packages/willa-ai/src/components/FeedbackBar/index.css +83 -0
  311. package/packages/willa-ai/src/components/FeedbackBar/index.tsx +357 -0
  312. package/packages/willa-ai/src/components/GenerationCard/index.css +275 -0
  313. package/packages/willa-ai/src/components/GenerationCard/index.tsx +156 -0
  314. package/packages/willa-ai/src/components/HumanApprovalCard/index.css +205 -0
  315. package/packages/willa-ai/src/components/HumanApprovalCard/index.tsx +262 -0
  316. package/packages/willa-ai/src/components/MessageActions/index.css +174 -0
  317. package/packages/willa-ai/src/components/MessageActions/index.tsx +152 -0
  318. package/packages/willa-ai/src/components/MessageList/index.css +80 -0
  319. package/packages/willa-ai/src/components/MessageList/index.tsx +96 -0
  320. package/packages/willa-ai/src/components/ModelSelector/index.css +177 -0
  321. package/packages/willa-ai/src/components/ModelSelector/index.tsx +421 -0
  322. package/packages/willa-ai/src/components/PromptInput/index.css +12 -0
  323. package/packages/willa-ai/src/components/PromptInput/index.tsx +230 -0
  324. package/packages/willa-ai/src/components/PromptTemplatePicker/index.css +173 -0
  325. package/packages/willa-ai/src/components/PromptTemplatePicker/index.tsx +389 -0
  326. package/packages/willa-ai/src/components/ReasoningSteps/index.css +190 -0
  327. package/packages/willa-ai/src/components/ReasoningSteps/index.tsx +199 -0
  328. package/packages/willa-ai/src/components/SuggestionChips/index.css +164 -0
  329. package/packages/willa-ai/src/components/SuggestionChips/index.tsx +142 -0
  330. package/packages/willa-ai/src/components/ThinkingIndicator/index.css +230 -0
  331. package/packages/willa-ai/src/components/ThinkingIndicator/index.tsx +162 -0
  332. package/packages/willa-ai/src/components/ToolCallCard/index.css +244 -0
  333. package/packages/willa-ai/src/components/ToolCallCard/index.tsx +131 -0
  334. package/packages/willa-ai/src/components/TraceViewer/index.css +438 -0
  335. package/packages/willa-ai/src/components/TraceViewer/index.tsx +445 -0
  336. package/packages/willa-ai/src/index.ts +123 -0
  337. package/packages/willa-ai/src/internal/cardCollapse.tsx +90 -0
  338. package/packages/willa-ai/src/internal/searchText.ts +50 -0
  339. package/packages/willa-ai/src/themes/dark.css +308 -0
  340. package/packages/willa-ai/src/themes/light.css +303 -0
  341. package/packages/willa-ai/vitest.config.ts +15 -0
  342. package/packages/willa-content/README.md +47 -0
  343. package/packages/willa-content/auklet.config.mjs +25 -0
  344. package/packages/willa-content/package.json +86 -0
  345. package/packages/willa-content/src/components/Alert/index.css +158 -0
  346. package/packages/willa-content/src/components/Alert/index.tsx +182 -0
  347. package/packages/willa-content/src/components/Anchor/index.css +131 -0
  348. package/packages/willa-content/src/components/Anchor/index.tsx +253 -0
  349. package/packages/willa-content/src/components/Avatar/index.css +248 -0
  350. package/packages/willa-content/src/components/Avatar/index.tsx +331 -0
  351. package/packages/willa-content/src/components/Badge/index.css +111 -0
  352. package/packages/willa-content/src/components/Badge/index.tsx +56 -0
  353. package/packages/willa-content/src/components/Breadcrumb/index.css +92 -0
  354. package/packages/willa-content/src/components/Breadcrumb/index.tsx +129 -0
  355. package/packages/willa-content/src/components/Button/index.css +215 -0
  356. package/packages/willa-content/src/components/Button/index.tsx +295 -0
  357. package/packages/willa-content/src/components/Callout/index.css +102 -0
  358. package/packages/willa-content/src/components/Callout/index.tsx +61 -0
  359. package/packages/willa-content/src/components/Carousel/index.css +236 -0
  360. package/packages/willa-content/src/components/Carousel/index.tsx +488 -0
  361. package/packages/willa-content/src/components/ChatThread/index.css +141 -0
  362. package/packages/willa-content/src/components/ChatThread/index.tsx +118 -0
  363. package/packages/willa-content/src/components/Citation/index.css +226 -0
  364. package/packages/willa-content/src/components/Citation/index.tsx +135 -0
  365. package/packages/willa-content/src/components/CodeBlock/index.css +267 -0
  366. package/packages/willa-content/src/components/CodeBlock/index.tsx +173 -0
  367. package/packages/willa-content/src/components/CodeTabs/index.css +116 -0
  368. package/packages/willa-content/src/components/CodeTabs/index.tsx +88 -0
  369. package/packages/willa-content/src/components/Collapse/index.css +135 -0
  370. package/packages/willa-content/src/components/Collapse/index.tsx +108 -0
  371. package/packages/willa-content/src/components/Comment/index.css +184 -0
  372. package/packages/willa-content/src/components/Comment/index.tsx +106 -0
  373. package/packages/willa-content/src/components/CommentInput/index.css +96 -0
  374. package/packages/willa-content/src/components/CommentInput/index.tsx +84 -0
  375. package/packages/willa-content/src/components/CommentList/index.css +43 -0
  376. package/packages/willa-content/src/components/CommentList/index.tsx +79 -0
  377. package/packages/willa-content/src/components/CopyButton/index.css +26 -0
  378. package/packages/willa-content/src/components/CopyButton/index.tsx +227 -0
  379. package/packages/willa-content/src/components/DescriptionList/index.css +176 -0
  380. package/packages/willa-content/src/components/DescriptionList/index.tsx +96 -0
  381. package/packages/willa-content/src/components/Dialog/index.css +225 -0
  382. package/packages/willa-content/src/components/Dialog/index.tsx +303 -0
  383. package/packages/willa-content/src/components/DiffViewer/index.css +321 -0
  384. package/packages/willa-content/src/components/DiffViewer/index.tsx +486 -0
  385. package/packages/willa-content/src/components/Download/index.css +118 -0
  386. package/packages/willa-content/src/components/Download/index.tsx +96 -0
  387. package/packages/willa-content/src/components/Drawer/index.css +160 -0
  388. package/packages/willa-content/src/components/Drawer/index.tsx +323 -0
  389. package/packages/willa-content/src/components/EmptyState/index.css +220 -0
  390. package/packages/willa-content/src/components/EmptyState/index.tsx +78 -0
  391. package/packages/willa-content/src/components/FileCard/fileIcon.tsx +215 -0
  392. package/packages/willa-content/src/components/FileCard/index.css +242 -0
  393. package/packages/willa-content/src/components/FileCard/index.tsx +133 -0
  394. package/packages/willa-content/src/components/FilePreview/index.css +589 -0
  395. package/packages/willa-content/src/components/FilePreview/index.tsx +750 -0
  396. package/packages/willa-content/src/components/FileTree/index.css +169 -0
  397. package/packages/willa-content/src/components/FileTree/index.tsx +341 -0
  398. package/packages/willa-content/src/components/FloatButton/index.css +276 -0
  399. package/packages/willa-content/src/components/FloatButton/index.tsx +558 -0
  400. package/packages/willa-content/src/components/IconButton/index.css +196 -0
  401. package/packages/willa-content/src/components/IconButton/index.tsx +272 -0
  402. package/packages/willa-content/src/components/Image/index.css +72 -0
  403. package/packages/willa-content/src/components/Image/index.tsx +141 -0
  404. package/packages/willa-content/src/components/ImageGallery/index.css +82 -0
  405. package/packages/willa-content/src/components/ImageGallery/index.tsx +170 -0
  406. package/packages/willa-content/src/components/InputPanel/index.css +181 -0
  407. package/packages/willa-content/src/components/InputPanel/index.tsx +255 -0
  408. package/packages/willa-content/src/components/Kbd/index.css +61 -0
  409. package/packages/willa-content/src/components/Kbd/index.tsx +102 -0
  410. package/packages/willa-content/src/components/Lightbox/index.css +127 -0
  411. package/packages/willa-content/src/components/Lightbox/index.tsx +328 -0
  412. package/packages/willa-content/src/components/List/index.css +439 -0
  413. package/packages/willa-content/src/components/List/index.tsx +403 -0
  414. package/packages/willa-content/src/components/MathExpression/index.css +65 -0
  415. package/packages/willa-content/src/components/MathExpression/index.tsx +105 -0
  416. package/packages/willa-content/src/components/MentionInput/index.css +92 -0
  417. package/packages/willa-content/src/components/MentionInput/index.tsx +1138 -0
  418. package/packages/willa-content/src/components/Menu/index.css +151 -0
  419. package/packages/willa-content/src/components/Menu/index.tsx +356 -0
  420. package/packages/willa-content/src/components/Pagination/index.css +139 -0
  421. package/packages/willa-content/src/components/Pagination/index.tsx +373 -0
  422. package/packages/willa-content/src/components/Popover/index.css +128 -0
  423. package/packages/willa-content/src/components/Popover/index.tsx +226 -0
  424. package/packages/willa-content/src/components/Progress/index.css +137 -0
  425. package/packages/willa-content/src/components/Progress/index.tsx +117 -0
  426. package/packages/willa-content/src/components/Result/index.css +142 -0
  427. package/packages/willa-content/src/components/Result/index.tsx +85 -0
  428. package/packages/willa-content/src/components/Segmented/index.css +136 -0
  429. package/packages/willa-content/src/components/Segmented/index.tsx +283 -0
  430. package/packages/willa-content/src/components/SelectionBar/index.css +104 -0
  431. package/packages/willa-content/src/components/SelectionBar/index.tsx +120 -0
  432. package/packages/willa-content/src/components/Skeleton/index.css +68 -0
  433. package/packages/willa-content/src/components/Skeleton/index.tsx +126 -0
  434. package/packages/willa-content/src/components/SourceCard/index.css +177 -0
  435. package/packages/willa-content/src/components/SourceCard/index.tsx +108 -0
  436. package/packages/willa-content/src/components/Spinner/index.css +124 -0
  437. package/packages/willa-content/src/components/Spinner/index.tsx +55 -0
  438. package/packages/willa-content/src/components/Statistic/index.css +135 -0
  439. package/packages/willa-content/src/components/Statistic/index.tsx +90 -0
  440. package/packages/willa-content/src/components/Steps/index.css +167 -0
  441. package/packages/willa-content/src/components/Steps/index.tsx +170 -0
  442. package/packages/willa-content/src/components/Table/TableBody.tsx +389 -0
  443. package/packages/willa-content/src/components/Table/TableHeader.tsx +256 -0
  444. package/packages/willa-content/src/components/Table/TablePagination.tsx +46 -0
  445. package/packages/willa-content/src/components/Table/TableView.tsx +341 -0
  446. package/packages/willa-content/src/components/Table/columnState.ts +37 -0
  447. package/packages/willa-content/src/components/Table/columns.ts +63 -0
  448. package/packages/willa-content/src/components/Table/group.ts +114 -0
  449. package/packages/willa-content/src/components/Table/index.css +620 -0
  450. package/packages/willa-content/src/components/Table/index.tsx +100 -0
  451. package/packages/willa-content/src/components/Table/layout.ts +80 -0
  452. package/packages/willa-content/src/components/Table/tree.ts +28 -0
  453. package/packages/willa-content/src/components/Table/types.ts +177 -0
  454. package/packages/willa-content/src/components/Table/useTableColumnResize.ts +227 -0
  455. package/packages/willa-content/src/components/Table/useTableColumnState.ts +153 -0
  456. package/packages/willa-content/src/components/Table/useTableExpansion.ts +69 -0
  457. package/packages/willa-content/src/components/Table/useTableInfiniteScroll.ts +77 -0
  458. package/packages/willa-content/src/components/Table/useTableSelection.ts +102 -0
  459. package/packages/willa-content/src/components/Table/useTableState.ts +436 -0
  460. package/packages/willa-content/src/components/Table/useTableViewModel.ts +222 -0
  461. package/packages/willa-content/src/components/Table/utils.ts +251 -0
  462. package/packages/willa-content/src/components/Tabs/index.css +126 -0
  463. package/packages/willa-content/src/components/Tabs/index.tsx +154 -0
  464. package/packages/willa-content/src/components/Tag/index.css +171 -0
  465. package/packages/willa-content/src/components/Tag/index.tsx +91 -0
  466. package/packages/willa-content/src/components/Timeline/index.css +355 -0
  467. package/packages/willa-content/src/components/Timeline/index.tsx +153 -0
  468. package/packages/willa-content/src/components/Toast/index.css +226 -0
  469. package/packages/willa-content/src/components/Toast/index.tsx +280 -0
  470. package/packages/willa-content/src/components/Toolbar/index.css +59 -0
  471. package/packages/willa-content/src/components/Toolbar/index.tsx +73 -0
  472. package/packages/willa-content/src/components/Tooltip/index.css +83 -0
  473. package/packages/willa-content/src/components/Tooltip/index.tsx +265 -0
  474. package/packages/willa-content/src/components/Tour/index.css +312 -0
  475. package/packages/willa-content/src/components/Tour/index.tsx +788 -0
  476. package/packages/willa-content/src/components/Tree/index.css +274 -0
  477. package/packages/willa-content/src/components/Tree/index.tsx +564 -0
  478. package/packages/willa-content/src/components/Typography/TypographyActions.tsx +125 -0
  479. package/packages/willa-content/src/components/Typography/TypographyContent.tsx +406 -0
  480. package/packages/willa-content/src/components/Typography/TypographyEdit.tsx +161 -0
  481. package/packages/willa-content/src/components/Typography/index.css +575 -0
  482. package/packages/willa-content/src/components/Typography/index.tsx +145 -0
  483. package/packages/willa-content/src/components/Typography/types.ts +144 -0
  484. package/packages/willa-content/src/components/Typography/utils.tsx +192 -0
  485. package/packages/willa-content/src/components/Watermark/index.css +37 -0
  486. package/packages/willa-content/src/components/Watermark/index.tsx +294 -0
  487. package/packages/willa-content/src/index.ts +408 -0
  488. package/packages/willa-content/src/internal/buttonActionUtils.ts +46 -0
  489. package/packages/willa-content/src/internal/syntaxHighlight.css +82 -0
  490. package/packages/willa-content/src/internal/useSingleSelection.ts +80 -0
  491. package/packages/willa-content/src/themes/dark.css +777 -0
  492. package/packages/willa-content/src/themes/light.css +780 -0
  493. package/packages/willa-content/vitest.config.ts +15 -0
  494. package/packages/willa-form/README.md +33 -0
  495. package/packages/willa-form/auklet.config.mjs +24 -0
  496. package/packages/willa-form/package.json +85 -0
  497. package/packages/willa-form/src/components/Calendar/ScheduleCalendar.tsx +1036 -0
  498. package/packages/willa-form/src/components/Calendar/index.css +1081 -0
  499. package/packages/willa-form/src/components/Calendar/index.tsx +876 -0
  500. package/packages/willa-form/src/components/Calendar/utils.ts +67 -0
  501. package/packages/willa-form/src/components/Checkbox/index.css +133 -0
  502. package/packages/willa-form/src/components/Checkbox/index.tsx +104 -0
  503. package/packages/willa-form/src/components/ColorPicker/index.css +617 -0
  504. package/packages/willa-form/src/components/ColorPicker/index.tsx +724 -0
  505. package/packages/willa-form/src/components/ColorPicker/types.ts +21 -0
  506. package/packages/willa-form/src/components/DatePicker/index.css +395 -0
  507. package/packages/willa-form/src/components/DatePicker/index.tsx +631 -0
  508. package/packages/willa-form/src/components/FilterBar/index.css +122 -0
  509. package/packages/willa-form/src/components/FilterBar/index.tsx +98 -0
  510. package/packages/willa-form/src/components/Form/index.css +49 -0
  511. package/packages/willa-form/src/components/Form/index.tsx +50 -0
  512. package/packages/willa-form/src/components/FormActions/index.css +62 -0
  513. package/packages/willa-form/src/components/FormActions/index.tsx +44 -0
  514. package/packages/willa-form/src/components/FormField/index.css +71 -0
  515. package/packages/willa-form/src/components/FormField/index.tsx +85 -0
  516. package/packages/willa-form/src/components/FormGroup/index.css +62 -0
  517. package/packages/willa-form/src/components/FormGroup/index.tsx +64 -0
  518. package/packages/willa-form/src/components/FormMessage/index.css +77 -0
  519. package/packages/willa-form/src/components/FormMessage/index.tsx +57 -0
  520. package/packages/willa-form/src/components/Input/index.css +131 -0
  521. package/packages/willa-form/src/components/Input/index.tsx +116 -0
  522. package/packages/willa-form/src/components/NumberInput/index.css +315 -0
  523. package/packages/willa-form/src/components/NumberInput/index.tsx +567 -0
  524. package/packages/willa-form/src/components/Picker/index.css +323 -0
  525. package/packages/willa-form/src/components/Picker/index.tsx +359 -0
  526. package/packages/willa-form/src/components/Radio/index.css +131 -0
  527. package/packages/willa-form/src/components/Radio/index.tsx +70 -0
  528. package/packages/willa-form/src/components/RangeInput/index.css +224 -0
  529. package/packages/willa-form/src/components/RangeInput/index.tsx +288 -0
  530. package/packages/willa-form/src/components/Rate/index.css +97 -0
  531. package/packages/willa-form/src/components/Rate/index.tsx +378 -0
  532. package/packages/willa-form/src/components/SearchInput/index.css +32 -0
  533. package/packages/willa-form/src/components/SearchInput/index.tsx +101 -0
  534. package/packages/willa-form/src/components/Select/index.css +4 -0
  535. package/packages/willa-form/src/components/Select/index.tsx +79 -0
  536. package/packages/willa-form/src/components/Switch/index.css +133 -0
  537. package/packages/willa-form/src/components/Switch/index.tsx +75 -0
  538. package/packages/willa-form/src/components/TagInput/index.css +209 -0
  539. package/packages/willa-form/src/components/TagInput/index.tsx +497 -0
  540. package/packages/willa-form/src/components/TextArea/index.css +91 -0
  541. package/packages/willa-form/src/components/TextArea/index.tsx +87 -0
  542. package/packages/willa-form/src/components/TimePicker/index.css +485 -0
  543. package/packages/willa-form/src/components/TimePicker/index.tsx +649 -0
  544. package/packages/willa-form/src/components/TimePicker/types.ts +8 -0
  545. package/packages/willa-form/src/components/TreeSelect/index.css +331 -0
  546. package/packages/willa-form/src/components/TreeSelect/index.tsx +497 -0
  547. package/packages/willa-form/src/components/Upload/index.css +345 -0
  548. package/packages/willa-form/src/components/Upload/index.tsx +581 -0
  549. package/packages/willa-form/src/index.ts +176 -0
  550. package/packages/willa-form/src/internal/colorUtils.ts +206 -0
  551. package/packages/willa-form/src/internal/comboboxField.tsx +114 -0
  552. package/packages/willa-form/src/internal/floatingPanelParts.tsx +80 -0
  553. package/packages/willa-form/src/internal/selectablePanelKeyboard.ts +93 -0
  554. package/packages/willa-form/src/internal/selectablePanelParts.tsx +212 -0
  555. package/packages/willa-form/src/internal/timePickerParts.ts +205 -0
  556. package/packages/willa-form/src/internal/useComboboxState.ts +21 -0
  557. package/packages/willa-form/src/internal/useFloatingPanel.ts +114 -0
  558. package/packages/willa-form/src/internal/useSelectablePanel.ts +152 -0
  559. package/packages/willa-form/src/internal/useSelectionModel.ts +115 -0
  560. package/packages/willa-form/src/themes/dark.css +197 -0
  561. package/packages/willa-form/src/themes/light.css +201 -0
  562. package/packages/willa-form/vitest.config.ts +15 -0
  563. package/packages/willa-layout/README.md +33 -0
  564. package/packages/willa-layout/auklet.config.mjs +11 -0
  565. package/packages/willa-layout/package.json +83 -0
  566. package/packages/willa-layout/src/components/AppShell/index.css +100 -0
  567. package/packages/willa-layout/src/components/AppShell/index.tsx +70 -0
  568. package/packages/willa-layout/src/components/BorderBeam/index.css +86 -0
  569. package/packages/willa-layout/src/components/BorderBeam/index.tsx +161 -0
  570. package/packages/willa-layout/src/components/Card/index.css +179 -0
  571. package/packages/willa-layout/src/components/Card/index.tsx +174 -0
  572. package/packages/willa-layout/src/components/Container/index.css +55 -0
  573. package/packages/willa-layout/src/components/Container/index.tsx +43 -0
  574. package/packages/willa-layout/src/components/Grid/index.css +9 -0
  575. package/packages/willa-layout/src/components/Grid/index.tsx +100 -0
  576. package/packages/willa-layout/src/components/Group/index.css +21 -0
  577. package/packages/willa-layout/src/components/Group/index.tsx +146 -0
  578. package/packages/willa-layout/src/components/Masonry/index.css +12 -0
  579. package/packages/willa-layout/src/components/Masonry/index.tsx +71 -0
  580. package/packages/willa-layout/src/components/PageHeader/index.css +130 -0
  581. package/packages/willa-layout/src/components/PageHeader/index.tsx +76 -0
  582. package/packages/willa-layout/src/components/Panel/index.css +123 -0
  583. package/packages/willa-layout/src/components/Panel/index.tsx +63 -0
  584. package/packages/willa-layout/src/components/SectionHeader/index.css +104 -0
  585. package/packages/willa-layout/src/components/SectionHeader/index.tsx +69 -0
  586. package/packages/willa-layout/src/components/Separator/index.css +155 -0
  587. package/packages/willa-layout/src/components/Separator/index.tsx +61 -0
  588. package/packages/willa-layout/src/components/SidebarLayout/index.css +43 -0
  589. package/packages/willa-layout/src/components/SidebarLayout/index.tsx +73 -0
  590. package/packages/willa-layout/src/components/SplitPane/index.css +148 -0
  591. package/packages/willa-layout/src/components/SplitPane/index.tsx +434 -0
  592. package/packages/willa-layout/src/components/Stack/index.css +8 -0
  593. package/packages/willa-layout/src/components/Stack/index.tsx +99 -0
  594. package/packages/willa-layout/src/index.ts +91 -0
  595. package/packages/willa-layout/src/internal/headerBlock.tsx +49 -0
  596. package/packages/willa-layout/src/themes/dark.css +55 -0
  597. package/packages/willa-layout/src/themes/light.css +59 -0
  598. package/packages/willa-layout/vitest.config.ts +15 -0
  599. package/packages/willa-shared/README.md +24 -0
  600. package/packages/willa-shared/package.json +46 -0
  601. package/packages/willa-shared/src/clipboard.ts +23 -0
  602. package/packages/willa-shared/src/codeHighlight.ts +109 -0
  603. package/packages/willa-shared/src/controllableState.ts +42 -0
  604. package/packages/willa-shared/src/copy.ts +79 -0
  605. package/packages/willa-shared/src/css.ts +10 -0
  606. package/packages/willa-shared/src/dom.ts +12 -0
  607. package/packages/willa-shared/src/file.ts +214 -0
  608. package/packages/willa-shared/src/floating.ts +160 -0
  609. package/packages/willa-shared/src/floatingLayer.ts +310 -0
  610. package/packages/willa-shared/src/heading.ts +69 -0
  611. package/packages/willa-shared/src/index.ts +88 -0
  612. package/packages/willa-shared/src/media.ts +23 -0
  613. package/packages/willa-shared/src/nodes.ts +24 -0
  614. package/packages/willa-shared/src/number.ts +9 -0
  615. package/packages/willa-shared/src/refs.ts +16 -0
  616. package/packages/willa-shared/src/request.ts +46 -0
  617. package/packages/willa-shared/src/types.ts +27 -0
  618. package/packages/willa-shared/src/viewport.ts +12 -0
  619. package/packages/willa-shared/src/virtualScroll.ts +137 -0
  620. package/packages/willa-shared/vitest.config.ts +9 -0
  621. package/packages/willa-widgets/README.md +33 -0
  622. package/packages/willa-widgets/auklet.config.mjs +25 -0
  623. package/packages/willa-widgets/package.json +89 -0
  624. package/packages/willa-widgets/src/components/AudioEmbed/index.css +424 -0
  625. package/packages/willa-widgets/src/components/AudioEmbed/index.tsx +270 -0
  626. package/packages/willa-widgets/src/components/AudioLink/index.css +165 -0
  627. package/packages/willa-widgets/src/components/AudioLink/index.tsx +169 -0
  628. package/packages/willa-widgets/src/components/EnglishCards/Card.tsx +116 -0
  629. package/packages/willa-widgets/src/components/EnglishCards/Content.tsx +203 -0
  630. package/packages/willa-widgets/src/components/EnglishCards/Practice.tsx +91 -0
  631. package/packages/willa-widgets/src/components/EnglishCards/Resources.tsx +91 -0
  632. package/packages/willa-widgets/src/components/EnglishCards/index.css +531 -0
  633. package/packages/willa-widgets/src/components/EnglishCards/index.tsx +142 -0
  634. package/packages/willa-widgets/src/components/EnglishCards/speech.ts +29 -0
  635. package/packages/willa-widgets/src/components/EnglishCards/types.ts +43 -0
  636. package/packages/willa-widgets/src/components/GitHubMention/index.css +206 -0
  637. package/packages/willa-widgets/src/components/GitHubMention/index.tsx +168 -0
  638. package/packages/willa-widgets/src/components/GitHubRepo/index.css +194 -0
  639. package/packages/willa-widgets/src/components/GitHubRepo/index.tsx +172 -0
  640. package/packages/willa-widgets/src/components/LogoWall/index.css +122 -0
  641. package/packages/willa-widgets/src/components/LogoWall/index.tsx +104 -0
  642. package/packages/willa-widgets/src/components/Mdx/index.css +273 -0
  643. package/packages/willa-widgets/src/components/Mdx/index.tsx +377 -0
  644. package/packages/willa-widgets/src/components/Poem/index.css +101 -0
  645. package/packages/willa-widgets/src/components/Poem/index.tsx +74 -0
  646. package/packages/willa-widgets/src/components/ProfileCard/index.css +107 -0
  647. package/packages/willa-widgets/src/components/ProfileCard/index.tsx +116 -0
  648. package/packages/willa-widgets/src/components/QRCode/index.css +175 -0
  649. package/packages/willa-widgets/src/components/QRCode/index.tsx +257 -0
  650. package/packages/willa-widgets/src/components/SiteFooter/index.css +109 -0
  651. package/packages/willa-widgets/src/components/SiteFooter/index.tsx +104 -0
  652. package/packages/willa-widgets/src/components/SiteNav/index.css +93 -0
  653. package/packages/willa-widgets/src/components/SiteNav/index.tsx +71 -0
  654. package/packages/willa-widgets/src/components/VideoEmbed/index.css +230 -0
  655. package/packages/willa-widgets/src/components/VideoEmbed/index.tsx +134 -0
  656. package/packages/willa-widgets/src/components/VideoLink/index.css +118 -0
  657. package/packages/willa-widgets/src/components/VideoLink/index.tsx +161 -0
  658. package/packages/willa-widgets/src/components/WebEmbed/index.css +106 -0
  659. package/packages/willa-widgets/src/components/WebEmbed/index.tsx +98 -0
  660. package/packages/willa-widgets/src/components/XPostEmbed/index.css +52 -0
  661. package/packages/willa-widgets/src/components/XPostEmbed/index.tsx +88 -0
  662. package/packages/willa-widgets/src/index.ts +57 -0
  663. package/packages/willa-widgets/src/internal/media.ts +84 -0
  664. package/packages/willa-widgets/src/internal/mediaEmbed.tsx +52 -0
  665. package/packages/willa-widgets/src/internal/useGitHubHoverCardResource.ts +120 -0
  666. package/packages/willa-widgets/src/themes/dark.css +209 -0
  667. package/packages/willa-widgets/src/themes/light.css +207 -0
  668. package/packages/willa-widgets/vitest.config.ts +15 -0
  669. package/pnpm-workspace.yaml +29 -0
  670. package/tsconfig.json +50 -0
@@ -0,0 +1,45 @@
1
+ name: Deploy
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ - main
8
+
9
+ permissions:
10
+ contents: write
11
+
12
+ jobs:
13
+ build-and-deploy:
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - name: Checkout repository
18
+ uses: actions/checkout@v4
19
+
20
+ - name: Install pnpm
21
+ uses: pnpm/action-setup@v4
22
+ with:
23
+ version: 10.27.0
24
+
25
+ - name: Set up Node.js
26
+ uses: actions/setup-node@v4
27
+ with:
28
+ node-version: "22"
29
+ cache: "pnpm"
30
+
31
+ - name: Install dependencies
32
+ run: pnpm install --frozen-lockfile
33
+
34
+ - name: Build packages
35
+ run: pnpm run build:packages
36
+
37
+ - name: Build app
38
+ run: pnpm run build
39
+
40
+ - name: Deploy app to GitHub Pages
41
+ uses: peaceiris/actions-gh-pages@v3
42
+ with:
43
+ github_token: ${{ secrets.GITHUB_TOKEN }}
44
+ publish_dir: ./example/dist
45
+ keep_files: true
@@ -0,0 +1 @@
1
+ pnpm exec lint-staged
package/AGENTS.md ADDED
@@ -0,0 +1,128 @@
1
+ # AGENTS.md
2
+
3
+ This file is the entry point for AI coding agents working in this repository.
4
+ Read it before making changes, then follow the linked project documents for
5
+ details.
6
+
7
+ ## Project Context
8
+
9
+ Willa is a React component library for AI products, blogs, documentation sites,
10
+ content platforms, MDX pages, and rich interactive content rendering.
11
+
12
+ The repository is a pnpm workspace monorepo. Packages are built with `auklet`.
13
+
14
+ ## Document Map
15
+
16
+ - [CONTRIBUTING.md](./CONTRIBUTING.md): contributor overview and common checks.
17
+
18
+ - [docs/architecture.md](./docs/architecture.md): repository structure, module
19
+ responsibilities, dependency flow, build flow, and known pitfalls.
20
+
21
+ - [docs/component.md](./docs/component.md): component creation, migration,
22
+ exports, example docs, and acceptance checklist.
23
+
24
+ - [docs/css.md](./docs/css.md): CSS rules, theme variable ownership, cross-package
25
+ style dependencies, and CSS pitfalls.
26
+ - [docs/style.md](./docs/style.md): TypeScript, React, naming, comments, and demo
27
+ code style.
28
+
29
+ ## Task Routing
30
+
31
+ Read only the documents needed for the change, then follow links if the change
32
+ crosses boundaries.
33
+
34
+ - Architecture, package boundaries, build output, path aliases, or dependency
35
+ direction: read `docs/architecture.md`.
36
+ - Before changing package boundaries, build config, CSS dependency config, or
37
+ component ownership, review the pitfalls in `docs/architecture.md`.
38
+ - New component, component migration, exports, example docs, or public entry
39
+ changes: read `docs/component.md`.
40
+ - Component CSS, theme variables, cross-package CSS dependencies, or portal
41
+ styling: read `docs/css.md`.
42
+ - TypeScript, React implementation style, naming, comments, or demo code style:
43
+ read `docs/style.md`.
44
+ - Contribution workflow, common checks, or commit message format: read
45
+ `CONTRIBUTING.md`.
46
+ - README changes: keep README user-facing; move internal maintenance details to
47
+ `CONTRIBUTING.md` or `docs/`.
48
+
49
+ ## Working Rules
50
+
51
+ - Keep package responsibilities clear. Do not make layout or content depend on
52
+ form, widgets, or AI.
53
+ - Do not copy layout or content theme variables into form, widgets, or AI.
54
+ - Do not add component theme variables to the `willa` aggregate package.
55
+ - Do not add per-package `tsconfig.json` files; use the root `tsconfig.json`.
56
+ - Use `auklet.config.mjs` with `defineConfig`; do not use
57
+ `auklet.config.ts`.
58
+ - Keep README user-facing. Internal maintenance details belong in
59
+ `CONTRIBUTING.md` or `docs/`.
60
+ - Prefer focused changes. Avoid unrelated refactors and package metadata churn
61
+ unless the task explicitly asks for a style or consistency pass in a defined
62
+ scope.
63
+ - Do not copy the same rule into multiple documents. Prefer linking to the
64
+ source-of-truth document.
65
+ - Do not include generated build output in commits unless explicitly requested.
66
+
67
+ ## Change Checklists
68
+
69
+ For new public components:
70
+
71
+ - Confirm the package choice in `docs/architecture.md` and `docs/component.md`.
72
+ - Add package root exports and `willa` aggregate exports.
73
+ - Add component CSS and theme variables in the owning package when needed.
74
+ - Add or update example docs and registry entries.
75
+ - Verify package root import, `willa` root import, single-component import, and
76
+ single-component CSS import.
77
+
78
+ For component migrations:
79
+
80
+ - Remove stale exports, component files, CSS, and theme variables from the old
81
+ package.
82
+ - Move theme variables with the component's owning package.
83
+ - Keep `willa` as an aggregate layer; do not duplicate component theme variables
84
+ there.
85
+ - Update example docs, package names, imports, and CSS entries.
86
+
87
+ For CSS or theme changes:
88
+
89
+ - Keep structural CSS in component `index.css`.
90
+ - Put theme values in the owning package's theme files.
91
+ - Reuse upstream variables through declared CSS dependencies; do not copy them.
92
+ - Check portal components have variable scope where they actually render.
93
+
94
+ For documentation changes:
95
+
96
+ - Keep README focused on external users.
97
+ - Keep `CONTRIBUTING.md` as the overview and workflow entry point.
98
+ - Put detailed rules in one focused document under `docs/`.
99
+ - Update cross-links when renaming or moving documents.
100
+
101
+ ## Verification
102
+
103
+ Use the narrowest check that covers the change, then broaden when shared
104
+ behavior is affected.
105
+
106
+ Common commands:
107
+
108
+ ```bash
109
+ pnpm run format
110
+ pnpm run typecheck
111
+ pnpm run build
112
+ ```
113
+
114
+ Run `pnpm run build:packages` for first-time public component additions,
115
+ package entry changes, package migration, or build config changes. For
116
+ example-only changes and narrow component fixes, use the smaller check that
117
+ covers the touched behavior.
118
+
119
+ For example-only changes:
120
+
121
+ ```bash
122
+ pnpm dev
123
+ pnpm run build
124
+ ```
125
+
126
+ ## Commits
127
+
128
+ Follow the commit message format in [CONTRIBUTING.md](./CONTRIBUTING.md).
@@ -0,0 +1,138 @@
1
+ # Willa Contributor Guide
2
+
3
+ This document is the top-level maintenance entry point for Willa. Detailed
4
+ architecture, component, CSS, and code style rules live in `docs/`. Read the
5
+ relevant documents before making changes, then compare your work with the
6
+ existing implementation patterns.
7
+
8
+ ## Project Scope
9
+
10
+ Willa is a React component library for AI products, blogs, documentation sites,
11
+ content platforms, MDX pages, and rich interactive content rendering.
12
+ Components should support product-style interaction and content rendering while
13
+ preserving single-component imports, single-component CSS imports, and
14
+ composable theme CSS.
15
+
16
+ The repository is a pnpm workspace monorepo. Packages are built with `auklet`.
17
+ Package structure, path aliases, build outputs, and module relationships are
18
+ documented in [Willa Architecture](./docs/architecture.md).
19
+
20
+ ## Guide Map
21
+
22
+ Architecture, file organization, module relationships, build flow, and known
23
+ pitfalls: [Willa Architecture](./docs/architecture.md).
24
+
25
+ Component creation, migration, exports, example docs, and acceptance checks:
26
+ [Willa Component Guide](./docs/component.md).
27
+
28
+ CSS rules, theme variable ownership, cross-package variable reuse, and style
29
+ dependencies: [Willa CSS Guide](./docs/css.md).
30
+
31
+ TypeScript, React, and documentation code style:
32
+ [Willa Style Guide](./docs/style.md).
33
+
34
+ `CONTRIBUTING.md` should stay as a project-level overview. For architecture,
35
+ component, CSS, or code style changes, treat the focused documents in `docs/`
36
+ as the source of truth.
37
+
38
+ ## Pre-Submit Checks
39
+
40
+ Common commands:
41
+
42
+ ```bash
43
+ pnpm run format
44
+ pnpm run typecheck
45
+ pnpm run build
46
+ ```
47
+
48
+ Run `pnpm run build:packages` when adding a first-time public component,
49
+ changing package entries, migrating components between packages, or changing
50
+ build configuration. For example-only changes and narrow component fixes, use
51
+ the smaller check that covers the touched behavior.
52
+
53
+ For example-only changes:
54
+
55
+ ```bash
56
+ pnpm dev
57
+ pnpm run build
58
+ ```
59
+
60
+ Commits run lint-staged formatting on staged files. When adding a dependency,
61
+ explain its purpose before installation.
62
+
63
+ ## Publishing
64
+
65
+ Willa publishes prerelease versions to npm before stable releases. Publish from
66
+ the workspace root so auklet can resolve all workspace packages and sort them by
67
+ internal dependencies.
68
+
69
+ Run with `--dry-run` first:
70
+
71
+ ```bash
72
+ pnpm run publish:alpha -- --dry-run
73
+ ```
74
+
75
+ Then publish the chosen version type with an npm 2FA code when required:
76
+
77
+ ```bash
78
+ pnpm run publish:alpha -- --otp <code>
79
+ pnpm run publish:beta -- --otp <code>
80
+ pnpm run publish:patch -- --otp <code>
81
+ pnpm run publish:minor -- --otp <code>
82
+ pnpm run publish:major -- --otp <code>
83
+ ```
84
+
85
+ For local token-based publishing, create `.env.local` in the workspace root:
86
+
87
+ ```ini
88
+ NPM_TOKEN=<npm-token>
89
+ ```
90
+
91
+ The publish scripts pass `--token env:NPM_TOKEN` to auklet, so the normal publish
92
+ commands read the token from `.env.local`. You can still override the token value
93
+ directly when needed:
94
+
95
+ ```bash
96
+ pnpm run publish:alpha -- --token <npm-token>
97
+ ```
98
+
99
+ The root `.npmrc` only declares the npm registry auth placeholder required by
100
+ npm publish. Keep real npm tokens in `.env.local`, the shell, CI secrets, or a
101
+ local user-level npm config.
102
+
103
+ The publish scripts use auklet workspace publishing. Auklet skips private
104
+ workspace packages, validates internal `workspace:*` dependencies, runs package
105
+ builds, and publishes in dependency order.
106
+
107
+ ## Commit Messages
108
+
109
+ Use conventional commit prefixes:
110
+
111
+ - `feat:` for new user-facing features.
112
+ - `fix:` for bug fixes.
113
+ - `docs:` for documentation-only changes.
114
+ - `chore:` for maintenance changes that do not affect runtime behavior.
115
+ - `refactor:` for code changes that preserve behavior.
116
+ - `test:` for test-only changes.
117
+
118
+ Keep the subject concise and imperative:
119
+
120
+ ```text
121
+ docs: add architecture guide
122
+ fix: preserve theme variables in widgets
123
+ ```
124
+
125
+ ## Maintenance Principles
126
+
127
+ - Keep package responsibilities clear. When migrating components, remove old
128
+ exports, styles, and theme variables from the previous package.
129
+ - Keep single-component imports working. New components must not be available
130
+ only from package root exports.
131
+ - Keep styles composable. Component CSS should not carry theme values directly.
132
+ - Keep example coverage for all public components, especially widgets and
133
+ combined scenarios such as Mdx.
134
+ - Keep broad component reviews focused on composition quality, API minimalism,
135
+ theme consistency, mobile behavior, documentation/demo alignment, and
136
+ self-hosting reuse.
137
+ - Avoid unrelated renames and package configuration churn unless they are part
138
+ of the current task.
package/README.md ADDED
@@ -0,0 +1,27 @@
1
+ <div align="center">
2
+ <h2>willa</h2>
3
+
4
+ [![NPM version](https://img.shields.io/npm/v/willa.svg?style=flat-square)](https://www.npmjs.com/package/willa)
5
+
6
+ </div>
7
+
8
+ Willa UI is a React component library for AI products, blogs, documentation
9
+ sites, content platforms, MDX pages, and rich interactive content rendering.
10
+ It provides layout primitives, form controls, product and content components,
11
+ AI-oriented interaction patterns, small widget integrations, and shared
12
+ utilities for building composable product and content experiences.
13
+
14
+ **Online docs**: https://imtaotao.github.io/willa/
15
+
16
+ ## Development
17
+
18
+ The `example` app demonstrates the public `willa` package and individual
19
+ component imports.
20
+
21
+ ```bash
22
+ # first time setup
23
+ $ pnpm run build:packages
24
+
25
+ # start the example dev server
26
+ $ pnpm dev
27
+ ```
@@ -0,0 +1,337 @@
1
+ # Willa Architecture
2
+
3
+ This document records Willa's repository structure, module responsibilities,
4
+ dependency relationships, build flow, and common pitfalls. For new components,
5
+ see [Willa Component Guide](./component.md). For CSS and theme rules, see
6
+ [Willa CSS Guide](./css.md). For code style, see
7
+ [Willa Style Guide](./style.md).
8
+
9
+ ## Project Scope
10
+
11
+ Willa is a React component library for AI products, blogs, documentation sites,
12
+ content platforms, MDX pages, and rich interactive content rendering. The core
13
+ requirements are:
14
+
15
+ - Components can be imported from package root entries.
16
+ - Components can be imported from single-component entries.
17
+ - Component CSS can be composed per component.
18
+ - Light and dark theme CSS can be composed across packages.
19
+ - Product interaction components and content rendering components can be
20
+ combined without crossing package ownership boundaries.
21
+ - The example app can consume source code directly for development and docs.
22
+
23
+ The repository is a pnpm workspace monorepo. Packages are built with `auklet`.
24
+
25
+ ## File Organization
26
+
27
+ ```text
28
+ .
29
+ package.json
30
+ pnpm-workspace.yaml
31
+ tsconfig.json
32
+ CONTRIBUTING.md
33
+ docs/
34
+ architecture.md
35
+ component.md
36
+ css.md
37
+ style.md
38
+ example/
39
+ src/
40
+ catalog/
41
+ docs/
42
+ packages/
43
+ willa/
44
+ src/
45
+ auklet.config.mjs
46
+ willa-content/
47
+ src/
48
+ components/
49
+ themes/
50
+ auklet.config.mjs
51
+ willa-layout/
52
+ src/
53
+ components/
54
+ themes/
55
+ auklet.config.mjs
56
+ willa-form/
57
+ src/
58
+ components/
59
+ themes/
60
+ auklet.config.mjs
61
+ willa-ai/
62
+ src/
63
+ components/
64
+ themes/
65
+ auklet.config.mjs
66
+ willa-widgets/
67
+ src/
68
+ components/
69
+ themes/
70
+ auklet.config.mjs
71
+ willa-shared/
72
+ src/
73
+ auklet.config.mjs
74
+ ```
75
+
76
+ The root directory contains workspace configuration, shared TypeScript
77
+ configuration, repository documentation, and development commands. Packages do
78
+ not maintain their own `tsconfig.json`; they use the root `tsconfig.json`.
79
+
80
+ `docs` contains focused maintenance documents:
81
+
82
+ - `architecture.md`: overall structure, module relationships, build flow, and
83
+ pitfalls.
84
+ - `component.md`: component creation, migration, exports, and example rules.
85
+ - `css.md`: CSS, theme variables, and cross-package style dependency rules.
86
+ - `style.md`: TypeScript, React, and documentation code style.
87
+
88
+ ## Module Responsibilities
89
+
90
+ `packages/willa` is the public aggregate package, published as `willa`. It
91
+ exports aggregate components and does not export `@willa-ui/shared`. It usually
92
+ does not own component implementations or theme variables; it combines selected
93
+ layout, content, form, AI, and widgets outputs. AI components are implemented
94
+ in `@willa-ui/ai`, then exposed through `willa` for public use.
95
+
96
+ `packages/willa-content` is the base product and content component package,
97
+ published as `@willa-ui/content`. It contains general product and content
98
+ components such as `Button`, `CodeBlock`, `Callout`, `Image`, `Tabs`,
99
+ `Dialog`, and `Steps`.
100
+
101
+ `packages/willa-layout` is the layout component package, published as
102
+ `@willa-ui/layout`. It contains layout primitives such as `Card`, `Group`,
103
+ `Stack`, `Grid`, `Masonry`, `Container`, `Panel`, `Separator`, `SplitPane`,
104
+ `ResizablePanel`, `BorderBeam`, `PageHeader`, `SectionHeader`, `AppShell`, and
105
+ `SidebarLayout`. Layout components own their component-specific layout
106
+ variables and the Willa base visual tokens such as fonts, text colors, lines,
107
+ surfaces, and focus rings.
108
+
109
+ `packages/willa-form` is the form component package, published as
110
+ `@willa-ui/form`. It contains form controls and form layout components such as
111
+ `Input`, `TextArea`, `Select`, `Checkbox`, `Radio`, `Switch`, `DatePicker`,
112
+ `Upload`, `Form`, `FormField`, and `FormActions`. It can compose layout and
113
+ content components and reuse their CSS through `styles.dependencies`, but
114
+ layout and content must not depend on form.
115
+
116
+ `packages/willa-ai` is the AI product component package, published as
117
+ `@willa-ui/ai`. It contains AI-oriented scene components such as prompt inputs,
118
+ chat messages, attachments, tool call displays, reasoning steps, generation
119
+ cards, context panels, trace viewers, and related interaction patterns. It can
120
+ compose layout and content components and reuse their CSS through
121
+ `styles.dependencies`, but it must not make layout or content depend on AI.
122
+
123
+ `packages/willa-widgets` is the scenario component package, published as
124
+ `@willa-ui/widgets`. It contains platform integrations, MDX composition,
125
+ external embeds, media-rich content blocks, and more domain-specific components
126
+ such as `Mdx`, `GitHubRepo`, `XPostEmbed`, `WebEmbed`, `AudioEmbed`,
127
+ `VideoEmbed`, `Poem`, and `EnglishCards`. It can compose layout, content, and
128
+ form components, but layout, content, and form must not depend on widgets.
129
+
130
+ `packages/willa-shared` is the shared utility package, published as
131
+ `@willa-ui/shared`. It contains cross-package types, text utilities, node
132
+ utilities, clipboard helpers, and similar logic. It does not contain React
133
+ components or component CSS.
134
+
135
+ `example` is the component demo and documentation app. In development, it
136
+ consumes package source through tsconfig aliases. The default port is `2333`.
137
+
138
+ ## Dependency Relationships
139
+
140
+ Dependencies must remain one-way:
141
+
142
+ - shared does not depend on content, form, AI, or widgets.
143
+ - content can depend on shared and layout.
144
+ - layout can depend on shared.
145
+ - form can depend on shared, layout, and content.
146
+ - ai can depend on shared, layout, content, and form when it composes form
147
+ inputs.
148
+ - widgets can depend on shared, layout, content, and form.
149
+ - willa depends on layout, content, form, AI, and widgets as the public
150
+ aggregate package.
151
+ - example can depend on all public packages and source aliases.
152
+
153
+ Do not make layout or content depend on form, AI, or widgets. Do not move
154
+ layout-specific, form-specific, AI-specific, or widget-specific variables,
155
+ styles, or components back into content.
156
+
157
+ ```mermaid
158
+ flowchart LR
159
+ shared["@willa-ui/shared"]
160
+ layout["@willa-ui/layout"]
161
+ content["@willa-ui/content"]
162
+ form["@willa-ui/form"]
163
+ ai["@willa-ui/ai"]
164
+ widgets["@willa-ui/widgets"]
165
+ willa["willa"]
166
+ example["example"]
167
+
168
+ content --> shared
169
+ content --> layout
170
+ layout --> shared
171
+ form --> shared
172
+ form --> layout
173
+ form --> content
174
+ ai --> shared
175
+ ai --> layout
176
+ ai --> form
177
+ ai --> content
178
+ widgets --> shared
179
+ widgets --> layout
180
+ widgets --> content
181
+ widgets --> form
182
+ willa --> layout
183
+ willa --> content
184
+ willa --> form
185
+ willa --> ai
186
+ willa --> widgets
187
+ example --> willa
188
+ example --> layout
189
+ example --> content
190
+ example --> form
191
+ example --> ai
192
+ example --> widgets
193
+ example --> shared
194
+ ```
195
+
196
+ ## Path Aliases
197
+
198
+ Prefer source aliases over deep relative paths:
199
+
200
+ - `#content/*` points to `packages/willa-content/src/*`
201
+ - `#layout/*` points to `packages/willa-layout/src/*`
202
+ - `#form/*` points to `packages/willa-form/src/*`
203
+ - `#ai/*` points to `packages/willa-ai/src/*`
204
+ - `#widgets/*` points to `packages/willa-widgets/src/*`
205
+ - `#shared/*` points to `packages/willa-shared/src/*`
206
+ - `#example/*` points to `example/src/*`
207
+ - `@willa-ui/*` points to package source roots
208
+
209
+ `willa/*` maps to single-component entries under `packages/willa/src/*`. When
210
+ adding path rules, prefer wildcard mappings instead of one-off file mappings.
211
+
212
+ ## Build Relationships
213
+
214
+ Every publishable package uses `auklet.config.mjs`. `modules: true` generates
215
+ single-component entries. `styles.themes` declares the package's own theme CSS.
216
+ `styles.dependencies` declares cross-package CSS dependencies.
217
+
218
+ Core build outputs include:
219
+
220
+ - Package root entries, such as `@willa-ui/content`.
221
+ - Single-component entries, such as `willa/CodeBlock`.
222
+ - Package root CSS, such as `willa/style.css`.
223
+ - Single-component CSS, such as `willa/CodeBlock.css`.
224
+ - Theme CSS, such as `willa/themes/light.css` and `willa/themes/dark.css`.
225
+
226
+ ```mermaid
227
+ flowchart TB
228
+ source["src components and themes"]
229
+ auklet["auklet build"]
230
+ js["JS entries"]
231
+ css["CSS entries"]
232
+ root["package root export"]
233
+ modules["single component exports"]
234
+ themes["theme css"]
235
+
236
+ source --> auklet
237
+ auklet --> js
238
+ auklet --> css
239
+ js --> root
240
+ js --> modules
241
+ css --> themes
242
+ css --> modules
243
+ ```
244
+
245
+ ## CSS Composition Flow
246
+
247
+ CSS composition is driven by `styles.dependencies` in `auklet.config.mjs`.
248
+ Content, form, AI, and widgets depend on layout CSS for base visual tokens and
249
+ layout component styles. Form, AI, and widgets also depend on content CSS when
250
+ they compose content components. AI and widgets can also depend on form CSS
251
+ when they compose form components. willa composes public package CSS.
252
+
253
+ ```mermaid
254
+ flowchart LR
255
+ layoutCss["layout CSS and themes"]
256
+ contentOwn["content own CSS and themes"]
257
+ contentCss["content output CSS"]
258
+ formOwn["form own CSS and themes"]
259
+ formCss["form output CSS"]
260
+ aiOwn["AI own CSS and themes"]
261
+ aiCss["AI output CSS"]
262
+ widgetsOwn["widgets own CSS and themes"]
263
+ widgetsCss["widgets output CSS"]
264
+ willaCss["willa output CSS"]
265
+
266
+ layoutCss --> contentCss
267
+ contentOwn --> contentCss
268
+ layoutCss --> formCss
269
+ contentCss --> formCss
270
+ formOwn --> formCss
271
+ layoutCss --> aiCss
272
+ contentCss --> aiCss
273
+ aiOwn --> aiCss
274
+ layoutCss --> widgetsCss
275
+ contentCss --> widgetsCss
276
+ formCss --> widgetsCss
277
+ widgetsOwn --> widgetsCss
278
+ layoutCss --> willaCss
279
+ contentCss --> willaCss
280
+ formCss --> willaCss
281
+ aiCss --> willaCss
282
+ widgetsCss --> willaCss
283
+ ```
284
+
285
+ This means higher-level packages can reference base visual tokens from layout
286
+ and component variables from their direct CSS dependencies. They must not copy
287
+ layout or content variable definitions. willa only composes CSS and does not
288
+ own component theme variables.
289
+
290
+ ## Example Documentation Flow
291
+
292
+ Example documentation data lives in `example/src/docs`. The registry lives in
293
+ `example/src/catalog/registry.ts`. `registry.ts` keeps lightweight entries and
294
+ loads demos dynamically through `load`, so component code and CSS do not all
295
+ enter the initial page.
296
+
297
+ ```mermaid
298
+ flowchart LR
299
+ registry["catalog registry"]
300
+ doc["ComponentName.demo.tsx"]
301
+ defineDoc["defineDoc"]
302
+ view["DocView"]
303
+ preview["live preview"]
304
+ code["generated code"]
305
+
306
+ registry --> doc
307
+ doc --> defineDoc
308
+ defineDoc --> view
309
+ view --> preview
310
+ view --> code
311
+ ```
312
+
313
+ ## Pitfalls
314
+
315
+ - Do not make layout or content depend on form, AI, or widgets. Do not make form
316
+ depend on AI or widgets. layout is the base visual layer, content is the base
317
+ product/content layer, form is the form layer, and AI and widgets are scenario
318
+ layers. Reversing this makes lower packages heavier and breaks
319
+ single-component CSS composition.
320
+ - Do not copy layout or content variables into higher-level package themes.
321
+ They already depend on upstream CSS and themes through
322
+ `styles.dependencies`; duplicate definitions make theme sources inconsistent.
323
+ - Do not add component theme variables to the willa aggregate package. willa
324
+ only combines public package CSS; component variables should follow the
325
+ package that owns the component source.
326
+ - Do not add per-package `tsconfig.json` files. Current aliases, strict checks,
327
+ and example source consumption depend on the root TypeScript config.
328
+ - Do not change `auklet.config.mjs` back to TypeScript. The current auklet
329
+ version does not support `auklet.config.ts`; use `.mjs` and `defineConfig`.
330
+ - Do not validate only package root entries. New public components must verify
331
+ package root imports, willa root imports, willa single-component imports, and
332
+ single-component CSS imports.
333
+ - Do not make `registry.ts` statically import demos. Example demos should load
334
+ only when selected.
335
+ - Portal component theme variables cannot live only on `.willa-shell`. For
336
+ example, `Lightbox` renders into `document.body`, so the variable scope must
337
+ also cover the component root.