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,894 @@
1
+ import { useState } from "react";
2
+ import { Badge } from "willa/Badge";
3
+ import { Avatar } from "willa/Avatar";
4
+ import { Button } from "willa/Button";
5
+ import { CommentInput } from "willa/CommentInput";
6
+ import { List } from "willa/List";
7
+ import { Group } from "willa/Group";
8
+ import "willa/Badge.css";
9
+ import "willa/Avatar.css";
10
+ import "willa/Button.css";
11
+ import "willa/CommentInput.css";
12
+ import "willa/List.css";
13
+ import "willa/Group.css";
14
+
15
+ import { defineDoc } from "#example/catalog/defineDoc";
16
+
17
+ const inputFrameStyle = {
18
+ display: "grid",
19
+ gap: "0.85rem",
20
+ width: "min(100%, 52rem)",
21
+ margin: "0 auto",
22
+ } as const;
23
+
24
+ type CommentOption = {
25
+ id: string;
26
+ label: string;
27
+ value: string;
28
+ avatarSrc: string;
29
+ team?: string;
30
+ role?: string;
31
+ };
32
+
33
+ const mentionOptions: Array<CommentOption> = [
34
+ {
35
+ id: "tom",
36
+ label: "Tom",
37
+ value: "@tom ",
38
+ avatarSrc: "https://i.pravatar.cc/64?img=11",
39
+ team: "设计",
40
+ },
41
+ {
42
+ id: "lucy",
43
+ label: "Lucy",
44
+ value: "@lucy ",
45
+ avatarSrc: "https://i.pravatar.cc/64?img=47",
46
+ team: "产品",
47
+ },
48
+ {
49
+ id: "nate",
50
+ label: "Nate",
51
+ value: "@nate ",
52
+ avatarSrc: "https://i.pravatar.cc/64?img=12",
53
+ },
54
+ {
55
+ id: "willa",
56
+ label: "Willa",
57
+ value: "@willa ",
58
+ avatarSrc: "https://i.pravatar.cc/64?img=50",
59
+ },
60
+ {
61
+ id: "zoe",
62
+ label: "Zoe",
63
+ value: "@zoe ",
64
+ avatarSrc: "https://i.pravatar.cc/64?img=33",
65
+ },
66
+ {
67
+ id: "harry",
68
+ label: "Harry",
69
+ value: "@harry ",
70
+ avatarSrc: "https://i.pravatar.cc/64?img=69",
71
+ },
72
+ {
73
+ id: "luna",
74
+ label: "Luna",
75
+ value: "@luna ",
76
+ avatarSrc: "https://i.pravatar.cc/64?img=63",
77
+ role: "文案",
78
+ },
79
+ {
80
+ id: "mona",
81
+ label: "Mona",
82
+ value: "@mona ",
83
+ avatarSrc: "https://i.pravatar.cc/64?img=67",
84
+ },
85
+ {
86
+ id: "neo",
87
+ label: "Neo",
88
+ value: "@neo ",
89
+ avatarSrc: "https://i.pravatar.cc/64?img=69",
90
+ },
91
+ {
92
+ id: "ava",
93
+ label: "Ava",
94
+ value: "@ava ",
95
+ avatarSrc: "https://i.pravatar.cc/64?img=55",
96
+ },
97
+ {
98
+ id: "finn",
99
+ label: "Finn",
100
+ value: "@finn ",
101
+ avatarSrc: "https://i.pravatar.cc/64?img=53",
102
+ },
103
+ {
104
+ id: "ivy",
105
+ label: "Ivy",
106
+ value: "@ivy ",
107
+ avatarSrc: "https://i.pravatar.cc/64?img=48",
108
+ },
109
+ {
110
+ id: "joel",
111
+ label: "Joel",
112
+ value: "@joel ",
113
+ avatarSrc: "https://i.pravatar.cc/64?img=51",
114
+ },
115
+ {
116
+ id: "kim",
117
+ label: "Kim",
118
+ value: "@kim ",
119
+ avatarSrc: "https://i.pravatar.cc/64?img=56",
120
+ },
121
+ {
122
+ id: "lara",
123
+ label: "Lara",
124
+ value: "@lara ",
125
+ avatarSrc: "https://i.pravatar.cc/64?img=65",
126
+ },
127
+ {
128
+ id: "mike",
129
+ label: "Mike",
130
+ value: "@mike ",
131
+ avatarSrc: "https://i.pravatar.cc/64?img=57",
132
+ },
133
+ {
134
+ id: "nina",
135
+ label: "Nina",
136
+ value: "@nina ",
137
+ avatarSrc: "https://i.pravatar.cc/64?img=58",
138
+ role: "前端",
139
+ },
140
+ {
141
+ id: "owen",
142
+ label: "Owen",
143
+ value: "@owen ",
144
+ avatarSrc: "https://i.pravatar.cc/64?img=60",
145
+ team: "设计",
146
+ },
147
+ {
148
+ id: "peter",
149
+ label: "Peter",
150
+ value: "@peter ",
151
+ avatarSrc: "https://i.pravatar.cc/64?img=59",
152
+ team: "产品",
153
+ },
154
+ {
155
+ id: "quinn",
156
+ label: "Quinn",
157
+ value: "@quinn ",
158
+ avatarSrc: "https://i.pravatar.cc/64?img=61",
159
+ role: "运营",
160
+ },
161
+ {
162
+ id: "rosie",
163
+ label: "Rosie",
164
+ value: "@rosie ",
165
+ avatarSrc: "https://i.pravatar.cc/64?img=62",
166
+ team: "测试",
167
+ },
168
+ {
169
+ id: "simon",
170
+ label: "Simon",
171
+ value: "@simon ",
172
+ avatarSrc: "https://i.pravatar.cc/64?img=64",
173
+ team: "后端",
174
+ },
175
+ {
176
+ id: "tracy",
177
+ label: "Tracy",
178
+ value: "@tracy ",
179
+ avatarSrc: "https://i.pravatar.cc/64?img=66",
180
+ role: "运营",
181
+ },
182
+ {
183
+ id: "ursula",
184
+ label: "Ursula",
185
+ value: "@ursula ",
186
+ avatarSrc: "https://i.pravatar.cc/64?img=68",
187
+ team: "文案",
188
+ },
189
+ {
190
+ id: "vincent",
191
+ label: "Vincent",
192
+ value: "@vincent ",
193
+ avatarSrc: "https://i.pravatar.cc/64?img=70",
194
+ role: "研发",
195
+ },
196
+ {
197
+ id: "wren",
198
+ label: "Wren",
199
+ value: "@wren ",
200
+ avatarSrc: "https://i.pravatar.cc/64?img=71",
201
+ team: "支持",
202
+ },
203
+ {
204
+ id: "yuki",
205
+ label: "Yuki",
206
+ value: "@yuki ",
207
+ avatarSrc: "https://i.pravatar.cc/64?img=72",
208
+ role: "前端",
209
+ },
210
+ {
211
+ id: "zane",
212
+ label: "Zane",
213
+ value: "@zane ",
214
+ avatarSrc: "https://i.pravatar.cc/64?img=73",
215
+ team: "客服",
216
+ },
217
+ ] as const;
218
+
219
+ const mentionUserStyle = {
220
+ display: "grid",
221
+ gridTemplateColumns: "auto minmax(0, 1fr)",
222
+ alignItems: "center",
223
+ gap: "0.58rem",
224
+ width: "100%",
225
+ minHeight: "2.4rem",
226
+ padding: "0.12rem 0.42rem",
227
+ border: "0",
228
+ borderRadius: "0.58rem",
229
+ background: "transparent",
230
+ color: "inherit",
231
+ textAlign: "left",
232
+ font: "inherit",
233
+ cursor: "pointer",
234
+ transition: "background-color 160ms ease",
235
+ } as const;
236
+
237
+ const mentionUserInfoStyle = {
238
+ display: "grid",
239
+ minWidth: 0,
240
+ gap: "0.12rem",
241
+ } as const;
242
+
243
+ const mentionUserNameStyle = {
244
+ overflow: "hidden",
245
+ color: "var(--willa-comment-input-text)",
246
+ fontSize: "0.87rem",
247
+ fontWeight: 650,
248
+ lineHeight: 1.35,
249
+ textOverflow: "ellipsis",
250
+ whiteSpace: "nowrap",
251
+ } as const;
252
+
253
+ const mentionUserMetaStyle = {
254
+ overflow: "hidden",
255
+ color: "var(--willa-comment-input-muted)",
256
+ fontSize: "0.76rem",
257
+ lineHeight: 1.35,
258
+ textOverflow: "ellipsis",
259
+ whiteSpace: "nowrap",
260
+ } as const;
261
+
262
+ const CommentInputPreview = () => {
263
+ const [value, setValue] = useState("");
264
+ const [submitted, setSubmitted] = useState("");
265
+
266
+ return (
267
+ <div style={inputFrameStyle}>
268
+ <CommentInput
269
+ value={value}
270
+ onValueChange={setValue}
271
+ maxLength={180}
272
+ onSubmit={(nextValue, context) => {
273
+ setSubmitted(nextValue);
274
+ context.clear();
275
+ }}
276
+ />
277
+ {submitted ? <Badge tone="success">已发布:{submitted}</Badge> : null}
278
+ </div>
279
+ );
280
+ };
281
+
282
+ const CommentExtensionPreview = () => {
283
+ const [hint, setHint] = useState("");
284
+ const [mentionHint, setMentionHint] = useState("");
285
+
286
+ return (
287
+ <div style={inputFrameStyle}>
288
+ <CommentInput
289
+ placeholder="回复这条评论..."
290
+ quote={{
291
+ author: "产品设计",
292
+ content: "这个输入区需要支持评论扩展能力。",
293
+ }}
294
+ onMentionClick={() => setHint("打开成员选择面板")}
295
+ mentionListProps={{
296
+ virtualScroll: true,
297
+ onItemClick: (item) => {
298
+ const target = mentionOptions.find(
299
+ (option) => (option.id ?? option.value) === item.id,
300
+ );
301
+
302
+ if (!target) return;
303
+ setMentionHint(`已插入 ${String(target.label ?? target.value)}`);
304
+ },
305
+ }}
306
+ actions={
307
+ <Button
308
+ size="sm"
309
+ variant="ghost"
310
+ onClick={() => setHint("打开业务自己的表情包面板")}
311
+ >
312
+ 表情
313
+ </Button>
314
+ }
315
+ mentionOptions={mentionOptions}
316
+ mentionMaxSuggestions={30}
317
+ onMentionQuery={(context) => {
318
+ if (!context) {
319
+ setMentionHint("");
320
+ return;
321
+ }
322
+
323
+ setMentionHint(`正在匹配 ${context.trigger} 开头的候选项`);
324
+ }}
325
+ footer={
326
+ mentionHint ||
327
+ hint ||
328
+ "输入 @ 可弹出候选人,或点击 @ 图标触发外部面板"
329
+ }
330
+ />
331
+ </div>
332
+ );
333
+ };
334
+
335
+ const MentionRenderOptionsPreview = () => {
336
+ const [hint, setHint] = useState("");
337
+
338
+ return (
339
+ <div style={inputFrameStyle}>
340
+ <CommentInput
341
+ placeholder="输入 @ 可以展示自定义候选项"
342
+ quote={{
343
+ author: "产品开发",
344
+ content: "这个列表只负责演示 renderMentionOptions 自定义渲染。",
345
+ }}
346
+ onMentionClick={() => setHint("打开业务自己的成员弹窗")}
347
+ renderMentionOptions={(context, options, onSelect) => {
348
+ const optionById = new Map(
349
+ options.map((option) => [option.id ?? option.value, option]),
350
+ );
351
+
352
+ return (
353
+ <List
354
+ size="sm"
355
+ variant="plain"
356
+ split={false}
357
+ itemLayout="horizontal"
358
+ maxHeight="13.8rem"
359
+ renderItem={(item) => {
360
+ const targetOption = optionById.get(item.id);
361
+ if (!targetOption) return null;
362
+
363
+ return (
364
+ <button
365
+ type="button"
366
+ style={mentionUserStyle}
367
+ onMouseDown={(event) => event.preventDefault()}
368
+ onClick={() => onSelect(targetOption)}
369
+ >
370
+ {targetOption.avatarSrc ? (
371
+ <Avatar
372
+ size="sm"
373
+ name={String(targetOption.label ?? targetOption.value)}
374
+ src={targetOption.avatarSrc}
375
+ />
376
+ ) : null}
377
+ <span style={mentionUserInfoStyle}>
378
+ <span style={mentionUserNameStyle}>
379
+ {targetOption.label}
380
+ </span>
381
+ <span style={mentionUserMetaStyle}>
382
+ {String(
383
+ targetOption.role ??
384
+ targetOption.team ??
385
+ `匹配: ${context.query || "全部"}`,
386
+ )}
387
+ </span>
388
+ </span>
389
+ </button>
390
+ );
391
+ }}
392
+ items={options.map((option) => {
393
+ const id = option.id ?? option.value;
394
+ const label = String(option.label ?? option.value);
395
+
396
+ return {
397
+ id,
398
+ title: label,
399
+ description: context.query
400
+ ? `${label} 包含 ${context.query}`
401
+ : label,
402
+ };
403
+ })}
404
+ />
405
+ );
406
+ }}
407
+ mentionOptions={Array.from(mentionOptions)}
408
+ mentionMaxSuggestions={30}
409
+ onMentionQuery={(context) => {
410
+ if (!context) {
411
+ setHint("");
412
+ return;
413
+ }
414
+
415
+ setHint(
416
+ `命中 ${context.trigger},查询关键字:${context.query || "未输入"}`,
417
+ );
418
+ }}
419
+ actions={
420
+ <Button
421
+ size="sm"
422
+ variant="ghost"
423
+ onClick={() => setHint("自定义成员选择弹层已触发")}
424
+ >
425
+ 表情
426
+ </Button>
427
+ }
428
+ footer={hint || "renderMentionOptions:支持全量接管弹层内容和交互"}
429
+ />
430
+ </div>
431
+ );
432
+ };
433
+
434
+ export default defineDoc({
435
+ id: "comment-input",
436
+ name: "CommentInput",
437
+ category: "content",
438
+ packageName: "willa/CommentInput",
439
+ description: "用于评论、批注和反馈场景的轻量输入组件。",
440
+ imports: [{ name: "CommentInput", from: "willa/CommentInput" }],
441
+ css: "willa/CommentInput.css",
442
+ demo: {
443
+ name: "CommentInputPreview",
444
+ component: CommentInputPreview,
445
+ },
446
+ code: `
447
+ import { useState } from "react";
448
+ import { CommentInput } from "willa/CommentInput";
449
+ import "willa/CommentInput.css";
450
+
451
+ const Demo = () => {
452
+ const [value, setValue] = useState("");
453
+
454
+ return (
455
+ <CommentInput
456
+ value={value}
457
+ onValueChange={setValue}
458
+ maxLength={180}
459
+ onSubmit={(nextValue, context) => {
460
+ console.log(nextValue);
461
+ context.clear();
462
+ }}
463
+ />
464
+ );
465
+ };
466
+ `,
467
+ sections: [
468
+ {
469
+ title: "附加操作",
470
+ code: `
471
+ <CommentInput
472
+ placeholder="写下批注意见..."
473
+ actions={
474
+ <Group gap="xs">
475
+ <Button size="sm" variant="ghost">
476
+ 引用段落
477
+ </Button>
478
+ <Button size="sm" variant="ghost">
479
+ 添加截图
480
+ </Button>
481
+ </Group>
482
+ }
483
+ footer="支持 ⌘ Enter 快捷发布"
484
+ />;
485
+ `,
486
+ content: (
487
+ <div style={inputFrameStyle}>
488
+ <CommentInput
489
+ placeholder="写下批注意见..."
490
+ actions={
491
+ <Group gap="xs">
492
+ <Button size="sm" variant="ghost">
493
+ 引用段落
494
+ </Button>
495
+ <Button size="sm" variant="ghost">
496
+ 添加截图
497
+ </Button>
498
+ </Group>
499
+ }
500
+ footer="支持 ⌘ Enter 快捷发布"
501
+ />
502
+ </div>
503
+ ),
504
+ },
505
+ {
506
+ title: "提及、表情和引用",
507
+ code: `
508
+ const [hint, setHint] = useState("");
509
+ const [mentionHint, setMentionHint] = useState("");
510
+
511
+ <CommentInput
512
+ placeholder="回复这条评论..."
513
+ quote={{
514
+ author: "产品设计",
515
+ content: "这个输入区需要支持评论扩展能力。",
516
+ }}
517
+ onMentionClick={() => setHint("打开成员选择面板")}
518
+ actions={
519
+ <Button
520
+ size="sm"
521
+ variant="ghost"
522
+ onClick={() => setHint("打开业务自己的表情包面板")}
523
+ >
524
+ 表情
525
+ </Button>
526
+ }
527
+ mentionOptions={mentionOptions}
528
+ mentionMaxSuggestions={30}
529
+ onMentionQuery={(context) => {
530
+ if (!context) {
531
+ setMentionHint("");
532
+ return;
533
+ }
534
+
535
+ setMentionHint(
536
+ "正在匹配 " + context.trigger + " 开头的候选项",
537
+ );
538
+ }}
539
+ footer={mentionHint || hint || "输入 @ 可弹出候选人,或点击 @ 图标触发外部面板"}
540
+ />;
541
+ `,
542
+ content: <CommentExtensionPreview />,
543
+ },
544
+ {
545
+ title: "renderMentionOptions 自定义提及弹层",
546
+ code: `
547
+ import { Avatar } from "willa/Avatar";
548
+ import { Button } from "willa/Button";
549
+ import { CommentInput } from "willa/CommentInput";
550
+ import { List } from "willa/List";
551
+ import "willa/Avatar.css";
552
+ import "willa/Button.css";
553
+ import "willa/List.css";
554
+ import "willa/CommentInput.css";
555
+
556
+ const mentionOptions = [
557
+ { id: "tom", label: "Tom", value: "@tom ", avatarSrc: "https://i.pravatar.cc/64?img=11", role: "设计" },
558
+ { id: "lucy", label: "Lucy", value: "@lucy ", avatarSrc: "https://i.pravatar.cc/64?img=47", team: "产品" },
559
+ ];
560
+
561
+ <CommentInput
562
+ placeholder="输入 @ 可以展示自定义候选项"
563
+ renderMentionOptions={(context, options, onSelect) => {
564
+ const optionById = new Map(
565
+ options.map((option) => [option.id ?? option.value, option]),
566
+ );
567
+
568
+ return (
569
+ <List
570
+ size="sm"
571
+ variant="plain"
572
+ split={false}
573
+ itemLayout="horizontal"
574
+ maxHeight="13.8rem"
575
+ renderItem={(item) => {
576
+ const target = optionById.get(item.id);
577
+ if (!target) return null;
578
+
579
+ return (
580
+ <button
581
+ type="button"
582
+ style={{ display: "grid", gridTemplateColumns: "auto minmax(0, 1fr)", alignItems: "center", gap: "0.58rem", width: "100%", minHeight: "2.4rem", padding: "0.12rem 0.42rem", border: 0, borderRadius: "0.58rem", background: "transparent", textAlign: "left", font: "inherit", cursor: "pointer" }}
583
+ onMouseDown={(event) => event.preventDefault()}
584
+ onClick={() => onSelect(target)}
585
+ >
586
+ <Avatar size="sm" name={String(target.label ?? target.value)} src={target.avatarSrc} />
587
+ <span style={{ display: "grid", minWidth: 0, gap: "0.12rem" }}>
588
+ <span style={{ overflow: "hidden", color: "var(--willa-comment-input-text)", fontSize: "0.87rem", fontWeight: 650, lineHeight: 1.35, textOverflow: "ellipsis", whiteSpace: "nowrap" }}>
589
+ {target.label}
590
+ </span>
591
+ <span style={{ overflow: "hidden", color: "var(--willa-comment-input-muted)", fontSize: "0.76rem", lineHeight: 1.35, textOverflow: "ellipsis", whiteSpace: "nowrap" }}>
592
+ {String(
593
+ target.role ||
594
+ target.team ||
595
+ "匹配: " + (context.query || "全部"),
596
+ )}
597
+ </span>
598
+ </span>
599
+ </button>
600
+ );
601
+ }}
602
+ items={options.map((option) => ({
603
+ id: option.id ?? option.value,
604
+ title: String(option.label ?? option.value),
605
+ description: context.query
606
+ ? context.query + " 相关"
607
+ : undefined,
608
+ }))}
609
+ />
610
+ );
611
+ }}
612
+ mentionOptions={mentionOptions}
613
+ mentionMaxSuggestions={30}
614
+ onMentionQuery={(context) => {
615
+ if (!context) return;
616
+ console.log(context.query);
617
+ }}
618
+ footer="renderMentionOptions 用于彻底接管候选弹层"
619
+ />;
620
+ `,
621
+ content: <MentionRenderOptionsPreview />,
622
+ },
623
+ {
624
+ title: "提交状态",
625
+ code: `
626
+ <div style={inputFrameStyle}>
627
+ <CommentInput
628
+ loading
629
+ defaultValue="正在提交这条评论..."
630
+ />
631
+ <CommentInput
632
+ disabled
633
+ placeholder="当前内容已锁定,不能继续评论。"
634
+ />
635
+ </div>;
636
+ `,
637
+ content: (
638
+ <div style={inputFrameStyle}>
639
+ <CommentInput loading defaultValue="正在提交这条评论..." />
640
+ <CommentInput disabled placeholder="当前内容已锁定,不能继续评论。" />
641
+ </div>
642
+ ),
643
+ },
644
+ ],
645
+ propGroups: [
646
+ {
647
+ title: "基础能力",
648
+ description:
649
+ "CommentInput 的评论场景能力。包含输入、提交、引用、附加操作等行为。",
650
+ },
651
+ {
652
+ title: "提及能力(透传至 MentionInput)",
653
+ description:
654
+ "以下属性来自 MentionInput。CommentInput 本身会 Omit 掉 beforeInput 与 mentionSources,仅复用其余提及能力。",
655
+ },
656
+ ],
657
+ props: [
658
+ {
659
+ name: "value",
660
+ type: "string",
661
+ group: "基础能力",
662
+ description: "受控输入值。",
663
+ },
664
+ {
665
+ name: "defaultValue",
666
+ type: "string",
667
+ defaultValue: '""',
668
+ group: "基础能力",
669
+ description: "非受控默认值。",
670
+ },
671
+ {
672
+ name: "onValueChange",
673
+ type: "(value: string) => void",
674
+ group: "基础能力",
675
+ description: "输入值变化回调。",
676
+ },
677
+ {
678
+ name: "onSubmit",
679
+ type: "(value: string, context: CommentInputSubmitContext) => void",
680
+ group: "基础能力",
681
+ description: "提交回调,context.clear 可清空输入。",
682
+ },
683
+ {
684
+ name: "placeholder",
685
+ type: "string",
686
+ defaultValue: '"写下你的评论..."',
687
+ group: "基础能力",
688
+ description: "占位文案。",
689
+ },
690
+ {
691
+ name: "submitLabel",
692
+ type: "ReactNode",
693
+ defaultValue: '"发布"',
694
+ group: "基础能力",
695
+ description: "提交按钮文案。",
696
+ },
697
+ {
698
+ name: "submitIcon",
699
+ type: "ReactNode",
700
+ group: "基础能力",
701
+ description: "提交按钮图标。",
702
+ },
703
+ {
704
+ name: "submitShortcut",
705
+ type: '"enter" | "mod-enter" | "none"',
706
+ defaultValue: '"mod-enter"',
707
+ group: "基础能力",
708
+ description: "提交快捷键,默认使用 Cmd/Ctrl + Enter。",
709
+ },
710
+ {
711
+ name: "allowEmptySubmit",
712
+ type: "boolean",
713
+ defaultValue: "false",
714
+ group: "基础能力",
715
+ description: "是否允许提交空内容。",
716
+ },
717
+ {
718
+ name: "disabled",
719
+ type: "boolean",
720
+ defaultValue: "false",
721
+ group: "基础能力",
722
+ description: "是否禁用。",
723
+ },
724
+ {
725
+ name: "loading",
726
+ type: "boolean",
727
+ defaultValue: "false",
728
+ group: "基础能力",
729
+ description: "是否处于提交中。",
730
+ },
731
+ {
732
+ name: "minRows",
733
+ type: "number",
734
+ defaultValue: "3",
735
+ group: "基础能力",
736
+ description: "输入框最小行数,默认 3。",
737
+ },
738
+ {
739
+ name: "maxRows",
740
+ type: "number",
741
+ group: "基础能力",
742
+ description: "输入框最大行数。",
743
+ },
744
+ {
745
+ name: "autoResize",
746
+ type: "boolean",
747
+ group: "基础能力",
748
+ description: "是否按内容自动调整高度。",
749
+ },
750
+ {
751
+ name: "size",
752
+ type: '"md" | "lg"',
753
+ group: "基础能力",
754
+ description: "输入区域尺寸。",
755
+ },
756
+ {
757
+ name: "maxLength",
758
+ type: "number",
759
+ group: "基础能力",
760
+ description: "最大输入长度。",
761
+ },
762
+ {
763
+ name: "autoFocus",
764
+ type: "boolean",
765
+ defaultValue: "false",
766
+ group: "基础能力",
767
+ description: "是否自动聚焦。",
768
+ },
769
+ {
770
+ name: "avatarSrc",
771
+ type: "string",
772
+ group: "基础能力",
773
+ description: "输入者头像地址。",
774
+ },
775
+ {
776
+ name: "quote",
777
+ type: "CommentInputQuote",
778
+ group: "基础能力",
779
+ description: "引用内容,包含被引用作者和正文内容。",
780
+ },
781
+ {
782
+ name: "actions",
783
+ type: "ReactNode",
784
+ group: "基础能力",
785
+ description: "输入区附加操作,适合接入业务自己的表情、附件或快捷操作。",
786
+ },
787
+ {
788
+ name: "footer",
789
+ type: "ReactNode",
790
+ group: "基础能力",
791
+ description: "底部说明。",
792
+ },
793
+ {
794
+ name: "className",
795
+ type: "string",
796
+ group: "基础能力",
797
+ description: "透传到根容器的 className。",
798
+ },
799
+ {
800
+ name: "style",
801
+ type: "CSSProperties",
802
+ group: "基础能力",
803
+ description: "透传给根容器的内联样式。",
804
+ },
805
+ {
806
+ name: "slotClassNames",
807
+ type: "InputPanelSlotClassNames",
808
+ group: "基础能力",
809
+ description: "传给输入面板内部插槽的 className 配置。",
810
+ },
811
+ {
812
+ name: "textareaProps",
813
+ type: "TextareaHTMLAttributes<HTMLTextAreaElement>",
814
+ group: "基础能力",
815
+ description: "透传到底层 textarea 的属性。",
816
+ },
817
+ {
818
+ name: "mentionLabel",
819
+ type: "ReactNode",
820
+ defaultValue: '"@"',
821
+ group: "提及能力(透传至 MentionInput)",
822
+ description: "@ 提及入口的展示内容,默认 @。",
823
+ },
824
+ {
825
+ name: "mentionTriggers",
826
+ type: "Array<string>",
827
+ defaultValue: '["@","#","$"]',
828
+ group: "提及能力(透传至 MentionInput)",
829
+ description: "提及触发字符集合,默认支持 @ / # / $。",
830
+ },
831
+ {
832
+ name: "users",
833
+ type: "Array<CommentInputMentionItem>",
834
+ group: "提及能力(透传至 MentionInput)",
835
+ description: "@ 提及入口的候选数据,默认来源之一。",
836
+ },
837
+ {
838
+ name: "resources",
839
+ type: "Array<CommentInputMentionItem>",
840
+ group: "提及能力(透传至 MentionInput)",
841
+ description: "# 提及入口的候选数据。",
842
+ },
843
+ {
844
+ name: "variables",
845
+ type: "Array<CommentInputMentionItem>",
846
+ group: "提及能力(透传至 MentionInput)",
847
+ description: "$ 提及入口的候选数据。",
848
+ },
849
+ {
850
+ name: "mentionMaxSuggestions",
851
+ type: "number",
852
+ defaultValue: "6",
853
+ group: "提及能力(透传至 MentionInput)",
854
+ description: "候选项展示上限。",
855
+ },
856
+ {
857
+ name: "mentionOptions",
858
+ type: "Array<CommentInputMentionItem>",
859
+ group: "提及能力(透传至 MentionInput)",
860
+ description: "自定义提及候选项,优先级高于 users/resources/variables。",
861
+ },
862
+ {
863
+ name: "onMentionQuery",
864
+ type: "(context: CommentInputMentionContext | null) => void",
865
+ group: "提及能力(透传至 MentionInput)",
866
+ description: "每次提及输入变化回调,context 为空表示退出提及态。",
867
+ },
868
+ {
869
+ name: "renderMentionOptions",
870
+ type: "(context: { trigger: string; query: string; start: number; end: number }, options: Array<CommentInputMentionItem>, onSelect: (item: CommentInputMentionItem) => void) => ReactNode",
871
+ group: "提及能力(透传至 MentionInput)",
872
+ description: "可选覆盖默认提及候选展示,适配业务自己的弹层样式。",
873
+ },
874
+ {
875
+ name: "mentionListProps",
876
+ type: "CommentInputMentionListProps",
877
+ group: "提及能力(透传至 MentionInput)",
878
+ description:
879
+ "默认提及列表复用 List 的参数,支持 virtualScroll、infiniteScroll、onItemsChange 等。",
880
+ },
881
+ {
882
+ name: "renderMentionItem",
883
+ type: "(context: { trigger: string; query: string; start: number; end: number }, item: CommentInputMentionItem, onSelect: (item: CommentInputMentionItem) => void) => ReactNode",
884
+ group: "提及能力(透传至 MentionInput)",
885
+ description: "可选覆盖单个提及项渲染,适配头像/机构/分组等业务信息。",
886
+ },
887
+ {
888
+ name: "onMentionClick",
889
+ type: "() => void",
890
+ group: "提及能力(透传至 MentionInput)",
891
+ description: "点击提及入口时触发,用于打开外部成员/资源选择器。",
892
+ },
893
+ ],
894
+ });