@baishuyun/ai-design 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (366) hide show
  1. package/.storybook/main.ts +29 -0
  2. package/.storybook/preview.ts +16 -0
  3. package/.turbo/turbo-build.log +14 -0
  4. package/CHANGELOG.md +12 -0
  5. package/components.json +22 -0
  6. package/debug-storybook.log +88 -0
  7. package/dist/ai-design.js +20482 -0
  8. package/dist/ai-design.js.map +1 -0
  9. package/dist/ai-design.umd.cjs +260 -0
  10. package/dist/ai-design.umd.cjs.map +1 -0
  11. package/dist/src/components/abs-fullscreen-gradient-bg.d.ts +10 -0
  12. package/dist/src/components/abs-fullscreen-gradient-bg.d.ts.map +1 -0
  13. package/dist/src/components/agent-scroll-selector.d.ts +11 -0
  14. package/dist/src/components/agent-scroll-selector.d.ts.map +1 -0
  15. package/dist/src/components/agent-select.d.ts +16 -0
  16. package/dist/src/components/agent-select.d.ts.map +1 -0
  17. package/dist/src/components/attachment-part-group.d.ts +16 -0
  18. package/dist/src/components/attachment-part-group.d.ts.map +1 -0
  19. package/dist/src/components/attachment-part.d.ts +19 -0
  20. package/dist/src/components/attachment-part.d.ts.map +1 -0
  21. package/dist/src/components/attachments-previewer.d.ts +18 -0
  22. package/dist/src/components/attachments-previewer.d.ts.map +1 -0
  23. package/dist/src/components/base-button.d.ts +8 -0
  24. package/dist/src/components/base-button.d.ts.map +1 -0
  25. package/dist/src/components/border-animation.d.ts +23 -0
  26. package/dist/src/components/border-animation.d.ts.map +1 -0
  27. package/dist/src/components/border-color-animation.d.ts +11 -0
  28. package/dist/src/components/border-color-animation.d.ts.map +1 -0
  29. package/dist/src/components/bot-avatar-name.d.ts +6 -0
  30. package/dist/src/components/bot-avatar-name.d.ts.map +1 -0
  31. package/dist/src/components/bot-icon.d.ts +5 -0
  32. package/dist/src/components/bot-icon.d.ts.map +1 -0
  33. package/dist/src/components/bs-entry-select.d.ts +18 -0
  34. package/dist/src/components/bs-entry-select.d.ts.map +1 -0
  35. package/dist/src/components/bs-icons.d.ts +75 -0
  36. package/dist/src/components/bs-icons.d.ts.map +1 -0
  37. package/dist/src/components/card-field.d.ts +11 -0
  38. package/dist/src/components/card-field.d.ts.map +1 -0
  39. package/dist/src/components/card.d.ts +11 -0
  40. package/dist/src/components/card.d.ts.map +1 -0
  41. package/dist/src/components/chat-area-header.d.ts +13 -0
  42. package/dist/src/components/chat-area-header.d.ts.map +1 -0
  43. package/dist/src/components/circle-checker.d.ts +10 -0
  44. package/dist/src/components/circle-checker.d.ts.map +1 -0
  45. package/dist/src/components/collapsible-txt-msg.d.ts +11 -0
  46. package/dist/src/components/collapsible-txt-msg.d.ts.map +1 -0
  47. package/dist/src/components/confirm-dialog.d.ts +26 -0
  48. package/dist/src/components/confirm-dialog.d.ts.map +1 -0
  49. package/dist/src/components/fake-bot-msg.d.ts +8 -0
  50. package/dist/src/components/fake-bot-msg.d.ts.map +1 -0
  51. package/dist/src/components/fields-design-info-table.d.ts +7 -0
  52. package/dist/src/components/fields-design-info-table.d.ts.map +1 -0
  53. package/dist/src/components/fields-generating-indicator.d.ts +6 -0
  54. package/dist/src/components/fields-generating-indicator.d.ts.map +1 -0
  55. package/dist/src/components/fields-portal.d.ts +8 -0
  56. package/dist/src/components/fields-portal.d.ts.map +1 -0
  57. package/dist/src/components/fields-previewer.d.ts +19 -0
  58. package/dist/src/components/fields-previewer.d.ts.map +1 -0
  59. package/dist/src/components/font-icon.d.ts +6 -0
  60. package/dist/src/components/font-icon.d.ts.map +1 -0
  61. package/dist/src/components/form-info-editor.d.ts +31 -0
  62. package/dist/src/components/form-info-editor.d.ts.map +1 -0
  63. package/dist/src/components/formula-tag.d.ts +8 -0
  64. package/dist/src/components/formula-tag.d.ts.map +1 -0
  65. package/dist/src/components/generate-animation.d.ts +5 -0
  66. package/dist/src/components/generate-animation.d.ts.map +1 -0
  67. package/dist/src/components/icon-btn.d.ts +9 -0
  68. package/dist/src/components/icon-btn.d.ts.map +1 -0
  69. package/dist/src/components/img-part.d.ts +10 -0
  70. package/dist/src/components/img-part.d.ts.map +1 -0
  71. package/dist/src/components/legacy-slot.d.ts +11 -0
  72. package/dist/src/components/legacy-slot.d.ts.map +1 -0
  73. package/dist/src/components/line-checker.d.ts +19 -0
  74. package/dist/src/components/line-checker.d.ts.map +1 -0
  75. package/dist/src/components/linear-gradient-border-btn.d.ts +10 -0
  76. package/dist/src/components/linear-gradient-border-btn.d.ts.map +1 -0
  77. package/dist/src/components/linear-gradient-color-bg-animation.d.ts +8 -0
  78. package/dist/src/components/linear-gradient-color-bg-animation.d.ts.map +1 -0
  79. package/dist/src/components/memoized-markdown.d.ts +5 -0
  80. package/dist/src/components/memoized-markdown.d.ts.map +1 -0
  81. package/dist/src/components/message-content.d.ts +6 -0
  82. package/dist/src/components/message-content.d.ts.map +1 -0
  83. package/dist/src/components/number-part.d.ts +9 -0
  84. package/dist/src/components/number-part.d.ts.map +1 -0
  85. package/dist/src/components/office-container.d.ts +12 -0
  86. package/dist/src/components/office-container.d.ts.map +1 -0
  87. package/dist/src/components/option-item.d.ts +9 -0
  88. package/dist/src/components/option-item.d.ts.map +1 -0
  89. package/dist/src/components/previewer-header.d.ts +21 -0
  90. package/dist/src/components/previewer-header.d.ts.map +1 -0
  91. package/dist/src/components/primary-confirm-btn.d.ts +10 -0
  92. package/dist/src/components/primary-confirm-btn.d.ts.map +1 -0
  93. package/dist/src/components/primary-entry-btn.d.ts +9 -0
  94. package/dist/src/components/primary-entry-btn.d.ts.map +1 -0
  95. package/dist/src/components/scroll-to-bottom-btn.d.ts +6 -0
  96. package/dist/src/components/scroll-to-bottom-btn.d.ts.map +1 -0
  97. package/dist/src/components/split-line.d.ts +5 -0
  98. package/dist/src/components/split-line.d.ts.map +1 -0
  99. package/dist/src/components/square-checker.d.ts +15 -0
  100. package/dist/src/components/square-checker.d.ts.map +1 -0
  101. package/dist/src/components/tab-radio-group.d.ts +20 -0
  102. package/dist/src/components/tab-radio-group.d.ts.map +1 -0
  103. package/dist/src/components/tooltip.d.ts +6 -0
  104. package/dist/src/components/tooltip.d.ts.map +1 -0
  105. package/dist/src/components/ui/button.d.ts +12 -0
  106. package/dist/src/components/ui/button.d.ts.map +1 -0
  107. package/dist/src/components/ui/dialog.d.ts +24 -0
  108. package/dist/src/components/ui/dialog.d.ts.map +1 -0
  109. package/dist/src/components/ui/icons.d.ts +176 -0
  110. package/dist/src/components/ui/icons.d.ts.map +1 -0
  111. package/dist/src/components/ui/popover.d.ts +10 -0
  112. package/dist/src/components/ui/popover.d.ts.map +1 -0
  113. package/dist/src/components/ui/spinner.d.ts +3 -0
  114. package/dist/src/components/ui/spinner.d.ts.map +1 -0
  115. package/dist/src/components/ui/tooltip.d.ts +13 -0
  116. package/dist/src/components/ui/tooltip.d.ts.map +1 -0
  117. package/dist/src/components/user-txt-msg-bubble.d.ts +6 -0
  118. package/dist/src/components/user-txt-msg-bubble.d.ts.map +1 -0
  119. package/dist/src/components/warning-msg.d.ts +6 -0
  120. package/dist/src/components/warning-msg.d.ts.map +1 -0
  121. package/dist/src/const/ui.d.ts +7 -0
  122. package/dist/src/const/ui.d.ts.map +1 -0
  123. package/dist/src/hooks/use-resizable-width.d.ts +24 -0
  124. package/dist/src/hooks/use-resizable-width.d.ts.map +1 -0
  125. package/dist/src/hooks/use-shadow.d.ts +25 -0
  126. package/dist/src/hooks/use-shadow.d.ts.map +1 -0
  127. package/dist/src/index.d.ts +66 -0
  128. package/dist/src/index.d.ts.map +1 -0
  129. package/dist/src/lib/utils.d.ts +4 -0
  130. package/dist/src/lib/utils.d.ts.map +1 -0
  131. package/dist/src/stories/AbsFullscreenGradientBg.stories.d.ts +17 -0
  132. package/dist/src/stories/AbsFullscreenGradientBg.stories.d.ts.map +1 -0
  133. package/dist/src/stories/AgentScrollSelector.stories.d.ts +11 -0
  134. package/dist/src/stories/AgentScrollSelector.stories.d.ts.map +1 -0
  135. package/dist/src/stories/AgentSelect.stories.d.ts +14 -0
  136. package/dist/src/stories/AgentSelect.stories.d.ts.map +1 -0
  137. package/dist/src/stories/AttachmentPart.stories.d.ts +23 -0
  138. package/dist/src/stories/AttachmentPart.stories.d.ts.map +1 -0
  139. package/dist/src/stories/AttachmentPartGroup.stories.d.ts +21 -0
  140. package/dist/src/stories/AttachmentPartGroup.stories.d.ts.map +1 -0
  141. package/dist/src/stories/AttachmentsPreviewer.stories.d.ts +20 -0
  142. package/dist/src/stories/AttachmentsPreviewer.stories.d.ts.map +1 -0
  143. package/dist/src/stories/BaseButton.stories.d.ts +18 -0
  144. package/dist/src/stories/BaseButton.stories.d.ts.map +1 -0
  145. package/dist/src/stories/BorderAnimation.stories.d.ts +21 -0
  146. package/dist/src/stories/BorderAnimation.stories.d.ts.map +1 -0
  147. package/dist/src/stories/BorderColorAnimation.stories.d.ts +26 -0
  148. package/dist/src/stories/BorderColorAnimation.stories.d.ts.map +1 -0
  149. package/dist/src/stories/BotAvatarAndName.stories.d.ts +18 -0
  150. package/dist/src/stories/BotAvatarAndName.stories.d.ts.map +1 -0
  151. package/dist/src/stories/BotIcon.stories.d.ts +17 -0
  152. package/dist/src/stories/BotIcon.stories.d.ts.map +1 -0
  153. package/dist/src/stories/BsEntrySelect.stories.d.ts +13 -0
  154. package/dist/src/stories/BsEntrySelect.stories.d.ts.map +1 -0
  155. package/dist/src/stories/BsTooltip.stories.d.ts +7 -0
  156. package/dist/src/stories/BsTooltip.stories.d.ts.map +1 -0
  157. package/dist/src/stories/Card.stories.d.ts +14 -0
  158. package/dist/src/stories/Card.stories.d.ts.map +1 -0
  159. package/dist/src/stories/CardField.stories.d.ts +13 -0
  160. package/dist/src/stories/CardField.stories.d.ts.map +1 -0
  161. package/dist/src/stories/ChatAreaHeader.stories.d.ts +14 -0
  162. package/dist/src/stories/ChatAreaHeader.stories.d.ts.map +1 -0
  163. package/dist/src/stories/CircleChecker.stories.d.ts +21 -0
  164. package/dist/src/stories/CircleChecker.stories.d.ts.map +1 -0
  165. package/dist/src/stories/CollapsibleTextMsg.stories.d.ts +16 -0
  166. package/dist/src/stories/CollapsibleTextMsg.stories.d.ts.map +1 -0
  167. package/dist/src/stories/ConfirmDialog.stories.d.ts +61 -0
  168. package/dist/src/stories/ConfirmDialog.stories.d.ts.map +1 -0
  169. package/dist/src/stories/FakeBotMsg.stories.d.ts +21 -0
  170. package/dist/src/stories/FakeBotMsg.stories.d.ts.map +1 -0
  171. package/dist/src/stories/FormInfoEditor.stories.d.ts +15 -0
  172. package/dist/src/stories/FormInfoEditor.stories.d.ts.map +1 -0
  173. package/dist/src/stories/FormulaTag.stories.d.ts +37 -0
  174. package/dist/src/stories/FormulaTag.stories.d.ts.map +1 -0
  175. package/dist/src/stories/GenerateAnimation.stories.d.ts +17 -0
  176. package/dist/src/stories/GenerateAnimation.stories.d.ts.map +1 -0
  177. package/dist/src/stories/IconBtn.stories.d.ts +15 -0
  178. package/dist/src/stories/IconBtn.stories.d.ts.map +1 -0
  179. package/dist/src/stories/IconLib.d.ts +12 -0
  180. package/dist/src/stories/IconLib.d.ts.map +1 -0
  181. package/dist/src/stories/Icons.stories.d.ts +24 -0
  182. package/dist/src/stories/Icons.stories.d.ts.map +1 -0
  183. package/dist/src/stories/ImgMsgPart.stories.d.ts +20 -0
  184. package/dist/src/stories/ImgMsgPart.stories.d.ts.map +1 -0
  185. package/dist/src/stories/LegacySlot.stories.d.ts +16 -0
  186. package/dist/src/stories/LegacySlot.stories.d.ts.map +1 -0
  187. package/dist/src/stories/LineChecker.stories.d.ts +23 -0
  188. package/dist/src/stories/LineChecker.stories.d.ts.map +1 -0
  189. package/dist/src/stories/LinearGradientBorderBtn.stories.d.ts +22 -0
  190. package/dist/src/stories/LinearGradientBorderBtn.stories.d.ts.map +1 -0
  191. package/dist/src/stories/LinearGradientColorBgAnimation.stories.d.ts +23 -0
  192. package/dist/src/stories/LinearGradientColorBgAnimation.stories.d.ts.map +1 -0
  193. package/dist/src/stories/MemoizedMarkdown.stories.d.ts +23 -0
  194. package/dist/src/stories/MemoizedMarkdown.stories.d.ts.map +1 -0
  195. package/dist/src/stories/MessageContent.stories.d.ts +16 -0
  196. package/dist/src/stories/MessageContent.stories.d.ts.map +1 -0
  197. package/dist/src/stories/NumbersMsgPart.stories.d.ts +19 -0
  198. package/dist/src/stories/NumbersMsgPart.stories.d.ts.map +1 -0
  199. package/dist/src/stories/OfficeContainer.stories.d.ts +8 -0
  200. package/dist/src/stories/OfficeContainer.stories.d.ts.map +1 -0
  201. package/dist/src/stories/OptionItem.stories.d.ts +20 -0
  202. package/dist/src/stories/OptionItem.stories.d.ts.map +1 -0
  203. package/dist/src/stories/PreviewerHeader.stories.d.ts +12 -0
  204. package/dist/src/stories/PreviewerHeader.stories.d.ts.map +1 -0
  205. package/dist/src/stories/PrimaryConfirmBtn.stories.d.ts +19 -0
  206. package/dist/src/stories/PrimaryConfirmBtn.stories.d.ts.map +1 -0
  207. package/dist/src/stories/PrimaryEntryBtn.stories.d.ts +26 -0
  208. package/dist/src/stories/PrimaryEntryBtn.stories.d.ts.map +1 -0
  209. package/dist/src/stories/ScrollToBottom.stories.d.ts +15 -0
  210. package/dist/src/stories/ScrollToBottom.stories.d.ts.map +1 -0
  211. package/dist/src/stories/SplitLine.stories.d.ts +9 -0
  212. package/dist/src/stories/SplitLine.stories.d.ts.map +1 -0
  213. package/dist/src/stories/SquareChecker.stories.d.ts +26 -0
  214. package/dist/src/stories/SquareChecker.stories.d.ts.map +1 -0
  215. package/dist/src/stories/TabRadioGroup.stories.d.ts +18 -0
  216. package/dist/src/stories/TabRadioGroup.stories.d.ts.map +1 -0
  217. package/dist/src/stories/UserTextMsgBubble.stories.d.ts +14 -0
  218. package/dist/src/stories/UserTextMsgBubble.stories.d.ts.map +1 -0
  219. package/dist/src/stories/WarningMessage.stories.d.ts +16 -0
  220. package/dist/src/stories/WarningMessage.stories.d.ts.map +1 -0
  221. package/dist/src/stories/fields-design-info-table.stories.d.ts +14 -0
  222. package/dist/src/stories/fields-design-info-table.stories.d.ts.map +1 -0
  223. package/dist/src/stories/fields-generating.stories.d.ts +20 -0
  224. package/dist/src/stories/fields-generating.stories.d.ts.map +1 -0
  225. package/dist/src/stories/fields-previewer.stories.d.ts +19 -0
  226. package/dist/src/stories/fields-previewer.stories.d.ts.map +1 -0
  227. package/dist/src/types.d.ts +8 -0
  228. package/dist/src/types.d.ts.map +1 -0
  229. package/package.json +80 -0
  230. package/src/components/abs-fullscreen-gradient-bg.tsx +35 -0
  231. package/src/components/agent-scroll-selector.tsx +181 -0
  232. package/src/components/agent-select.tsx +149 -0
  233. package/src/components/attachment-part-group.tsx +35 -0
  234. package/src/components/attachment-part.tsx +179 -0
  235. package/src/components/attachments-previewer.tsx +324 -0
  236. package/src/components/base-button.tsx +49 -0
  237. package/src/components/border-animation.tsx +107 -0
  238. package/src/components/border-color-animation.tsx +66 -0
  239. package/src/components/bot-avatar-name.tsx +36 -0
  240. package/src/components/bot-icon.tsx +23 -0
  241. package/src/components/bs-entry-select.tsx +724 -0
  242. package/src/components/bs-icons.tsx +1201 -0
  243. package/src/components/card-field.tsx +23 -0
  244. package/src/components/card.tsx +36 -0
  245. package/src/components/chat-area-header.tsx +65 -0
  246. package/src/components/circle-checker.tsx +66 -0
  247. package/src/components/collapsible-txt-msg.tsx +63 -0
  248. package/src/components/confirm-dialog.tsx +139 -0
  249. package/src/components/fake-bot-msg.tsx +49 -0
  250. package/src/components/fields-design-info-table.tsx +160 -0
  251. package/src/components/fields-generating-indicator.tsx +95 -0
  252. package/src/components/fields-portal.tsx +18 -0
  253. package/src/components/fields-previewer.tsx +216 -0
  254. package/src/components/font-icon.tsx +17 -0
  255. package/src/components/form-info-editor.tsx +253 -0
  256. package/src/components/formula-tag.tsx +32 -0
  257. package/src/components/generate-animation.tsx +56 -0
  258. package/src/components/icon-btn.tsx +43 -0
  259. package/src/components/img-part.tsx +27 -0
  260. package/src/components/legacy-slot.tsx +103 -0
  261. package/src/components/line-checker.tsx +160 -0
  262. package/src/components/linear-gradient-border-btn.tsx +48 -0
  263. package/src/components/linear-gradient-color-bg-animation.tsx +103 -0
  264. package/src/components/memoized-markdown.tsx +32 -0
  265. package/src/components/message-content.tsx +21 -0
  266. package/src/components/number-part.tsx +46 -0
  267. package/src/components/office-container.tsx +83 -0
  268. package/src/components/option-item.tsx +28 -0
  269. package/src/components/previewer-header.tsx +270 -0
  270. package/src/components/primary-confirm-btn.tsx +58 -0
  271. package/src/components/primary-entry-btn.tsx +48 -0
  272. package/src/components/scroll-to-bottom-btn.tsx +28 -0
  273. package/src/components/split-line.tsx +9 -0
  274. package/src/components/square-checker.tsx +87 -0
  275. package/src/components/tab-radio-group.tsx +83 -0
  276. package/src/components/tooltip.tsx +53 -0
  277. package/src/components/ui/button.tsx +51 -0
  278. package/src/components/ui/dialog.tsx +104 -0
  279. package/src/components/ui/icons.tsx +1267 -0
  280. package/src/components/ui/popover.tsx +50 -0
  281. package/src/components/ui/spinner.tsx +17 -0
  282. package/src/components/ui/tooltip.tsx +53 -0
  283. package/src/components/user-txt-msg-bubble.tsx +19 -0
  284. package/src/components/warning-msg.tsx +27 -0
  285. package/src/const/ui.ts +52 -0
  286. package/src/hooks/use-resizable-width.ts +92 -0
  287. package/src/hooks/use-shadow.ts +127 -0
  288. package/src/index.ts +76 -0
  289. package/src/lib/utils.ts +52 -0
  290. package/src/stories/AbsFullscreenGradientBg.stories.tsx +36 -0
  291. package/src/stories/AgentScrollSelector.stories.tsx +95 -0
  292. package/src/stories/AgentSelect.stories.tsx +134 -0
  293. package/src/stories/AttachmentPart.stories.tsx +122 -0
  294. package/src/stories/AttachmentPartGroup.stories.tsx +152 -0
  295. package/src/stories/AttachmentsPreviewer.stories.tsx +306 -0
  296. package/src/stories/BaseButton.stories.tsx +33 -0
  297. package/src/stories/BorderAnimation.stories.tsx +116 -0
  298. package/src/stories/BorderColorAnimation.stories.tsx +63 -0
  299. package/src/stories/BotAvatarAndName.stories.ts +24 -0
  300. package/src/stories/BotIcon.stories.ts +22 -0
  301. package/src/stories/BsEntrySelect.stories.tsx +261 -0
  302. package/src/stories/BsTooltip.stories.tsx +32 -0
  303. package/src/stories/Card.stories.tsx +28 -0
  304. package/src/stories/CardField.stories.tsx +87 -0
  305. package/src/stories/ChatAreaHeader.stories.ts +26 -0
  306. package/src/stories/CircleChecker.stories.tsx +89 -0
  307. package/src/stories/CollapsibleTextMsg.stories.ts +44 -0
  308. package/src/stories/ConfirmDialog.stories.tsx +123 -0
  309. package/src/stories/FakeBotMsg.stories.tsx +36 -0
  310. package/src/stories/FormInfoEditor.stories.tsx +173 -0
  311. package/src/stories/FormulaTag.stories.tsx +68 -0
  312. package/src/stories/GenerateAnimation.stories.ts +20 -0
  313. package/src/stories/IconBtn.stories.tsx +32 -0
  314. package/src/stories/IconLib.tsx +45 -0
  315. package/src/stories/Icons.stories.ts +22 -0
  316. package/src/stories/ImgMsgPart.stories.tsx +42 -0
  317. package/src/stories/LegacySlot.stories.tsx +56 -0
  318. package/src/stories/LineChecker.stories.tsx +134 -0
  319. package/src/stories/LinearGradientBorderBtn.stories.tsx +86 -0
  320. package/src/stories/LinearGradientColorBgAnimation.stories.tsx +60 -0
  321. package/src/stories/MemoizedMarkdown.stories.tsx +102 -0
  322. package/src/stories/MessageContent.stories.tsx +36 -0
  323. package/src/stories/NumbersMsgPart.stories.tsx +42 -0
  324. package/src/stories/OfficeContainer.stories.tsx +82 -0
  325. package/src/stories/OptionItem.stories.tsx +77 -0
  326. package/src/stories/PreviewerHeader.stories.tsx +91 -0
  327. package/src/stories/PrimaryConfirmBtn.stories.tsx +60 -0
  328. package/src/stories/PrimaryEntryBtn.stories.tsx +74 -0
  329. package/src/stories/ScrollToBottom.stories.tsx +24 -0
  330. package/src/stories/SplitLine.stories.tsx +40 -0
  331. package/src/stories/SquareChecker.stories.tsx +96 -0
  332. package/src/stories/TabRadioGroup.stories.tsx +84 -0
  333. package/src/stories/UserTextMsgBubble.stories.ts +24 -0
  334. package/src/stories/WarningMessage.stories.tsx +23 -0
  335. package/src/stories/assets/accessibility.png +0 -0
  336. package/src/stories/assets/accessibility.svg +1 -0
  337. package/src/stories/assets/addon-library.png +0 -0
  338. package/src/stories/assets/assets.png +0 -0
  339. package/src/stories/assets/avif-test-image.avif +0 -0
  340. package/src/stories/assets/context.png +0 -0
  341. package/src/stories/assets/demo.css +539 -0
  342. package/src/stories/assets/demo_index.html +7988 -0
  343. package/src/stories/assets/discord.svg +1 -0
  344. package/src/stories/assets/docs.png +0 -0
  345. package/src/stories/assets/figma-plugin.png +0 -0
  346. package/src/stories/assets/github.svg +1 -0
  347. package/src/stories/assets/iconfont.css +1377 -0
  348. package/src/stories/assets/iconfont.eot +0 -0
  349. package/src/stories/assets/iconfont.json +2382 -0
  350. package/src/stories/assets/iconfont.svg +697 -0
  351. package/src/stories/assets/iconfont.ttf +0 -0
  352. package/src/stories/assets/iconfont.woff +0 -0
  353. package/src/stories/assets/iconfont.woff2 +0 -0
  354. package/src/stories/assets/share.png +0 -0
  355. package/src/stories/assets/styling.png +0 -0
  356. package/src/stories/assets/testing.png +0 -0
  357. package/src/stories/assets/theming.png +0 -0
  358. package/src/stories/assets/tutorials.svg +1 -0
  359. package/src/stories/assets/youtube.svg +1 -0
  360. package/src/stories/fields-design-info-table.stories.tsx +203 -0
  361. package/src/stories/fields-generating.stories.tsx +41 -0
  362. package/src/stories/fields-previewer.stories.tsx +77 -0
  363. package/src/style.css +223 -0
  364. package/src/types.ts +8 -0
  365. package/tsconfig.json +12 -0
  366. package/vite.config.ts +42 -0
@@ -0,0 +1,50 @@
1
+ import * as React from 'react';
2
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
3
+
4
+ import { cn } from '../../lib/utils';
5
+
6
+ const Popover = PopoverPrimitive.Root;
7
+
8
+ const PopoverTrigger = PopoverPrimitive.Trigger;
9
+
10
+ const PopoverAnchor = PopoverPrimitive.Anchor;
11
+
12
+ type PopoverContentProps = React.ComponentPropsWithoutRef<
13
+ typeof PopoverPrimitive.Content
14
+ > & {
15
+ portalContainer?: HTMLElement | null;
16
+ };
17
+
18
+ const PopoverContent = React.forwardRef<
19
+ React.ElementRef<typeof PopoverPrimitive.Content>,
20
+ PopoverContentProps
21
+ >(
22
+ (
23
+ { className, align = 'start', sideOffset = 4, portalContainer, ...props },
24
+ ref
25
+ ) => (
26
+ <PopoverPrimitive.Portal container={portalContainer ?? undefined}>
27
+ <PopoverPrimitive.Content
28
+ ref={ref}
29
+ align={align}
30
+ sideOffset={sideOffset}
31
+ className={cn(
32
+ 'z-50 w-60 rounded-[4px] border bg-white p-1 text-[#121111] shadow-[0_0_16px_rgba(0,0,0,0.1)] outline-none',
33
+ 'data-[state=open]:animate-in data-[state=closed]:animate-out',
34
+ 'data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',
35
+ 'data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95',
36
+ 'data-[side=bottom]:slide-in-from-top-2',
37
+ 'data-[side=left]:slide-in-from-right-2',
38
+ 'data-[side=right]:slide-in-from-left-2',
39
+ 'data-[side=top]:slide-in-from-bottom-2',
40
+ 'origin-[--radix-popover-content-transform-origin]',
41
+ className
42
+ )}
43
+ {...props}
44
+ />
45
+ </PopoverPrimitive.Portal>
46
+ )
47
+ );
48
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName;
49
+
50
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };
@@ -0,0 +1,17 @@
1
+ import { Loader2Icon } from "lucide-react";
2
+
3
+ import { cn } from "../../lib/utils";
4
+
5
+ function Spinner({ className, ...props }: React.ComponentProps<"svg">) {
6
+ return (
7
+ // @ts-ignore
8
+ <Loader2Icon
9
+ role="status"
10
+ aria-label="Loading"
11
+ className={cn("size-4 animate-spin", className)}
12
+ {...props}
13
+ />
14
+ );
15
+ }
16
+
17
+ export { Spinner };
@@ -0,0 +1,53 @@
1
+ import * as React from 'react';
2
+ import * as TooltipPrimitive from '@radix-ui/react-tooltip';
3
+
4
+ import { cn } from '../../lib/utils';
5
+
6
+ const TooltipZIndexContext = React.createContext<number | undefined>(undefined);
7
+
8
+ type TooltipProviderProps = React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Provider> & {
9
+ zIndex?: number;
10
+ };
11
+
12
+ const TooltipProvider = ({ zIndex, children, ...props }: TooltipProviderProps) => (
13
+ <TooltipZIndexContext.Provider value={zIndex}>
14
+ <TooltipPrimitive.Provider {...props}>{children}</TooltipPrimitive.Provider>
15
+ </TooltipZIndexContext.Provider>
16
+ );
17
+
18
+ const Tooltip = TooltipPrimitive.Root;
19
+
20
+ const TooltipTrigger = TooltipPrimitive.Trigger;
21
+
22
+ type TooltipContentProps = React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> & {
23
+ portalContainer?: HTMLElement | null;
24
+ };
25
+
26
+ const TooltipContent = React.forwardRef<
27
+ React.ElementRef<typeof TooltipPrimitive.Content>,
28
+ TooltipContentProps
29
+ >(({ className, sideOffset = 4, portalContainer, style, ...props }, ref) => {
30
+ const zIndexFromProvider = React.useContext(TooltipZIndexContext);
31
+
32
+ return (
33
+ <TooltipPrimitive.Portal container={portalContainer ?? undefined}>
34
+ <TooltipPrimitive.Content
35
+ ref={ref}
36
+ sideOffset={sideOffset}
37
+ className={cn(
38
+ // 'z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-tooltip-content-transform-origin]',
39
+ className
40
+ )}
41
+ style={zIndexFromProvider != null ? { ...style, zIndex: zIndexFromProvider } : style}
42
+ {...props}
43
+ >
44
+ {props.children}
45
+ <TooltipPrimitive.Arrow className="fill-[#525867] stroke-[#525867] stroke-[2px] stroke-linejoin-round [paint-order:stroke_fill]" />
46
+ </TooltipPrimitive.Content>
47
+ </TooltipPrimitive.Portal>
48
+ );
49
+ });
50
+
51
+ TooltipContent.displayName = TooltipPrimitive.Content.displayName;
52
+
53
+ export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };
@@ -0,0 +1,19 @@
1
+ export interface UserTextMsgBubbleProps {
2
+ text?: string;
3
+ children?: string;
4
+ }
5
+
6
+ export const UserTextMsgBubble = ({ text, children }: UserTextMsgBubbleProps) => {
7
+ return (
8
+ <div
9
+ className="px-2.5 py-[7px] text-[#0265FF] text-[14px] w-fit"
10
+ style={{
11
+ borderRadius: `10px 0 10px 10px`,
12
+ wordWrap: 'break-word',
13
+ background: `linear-gradient(180deg, #DBE9FF 0%, #E9FFFD 100%)`,
14
+ }}
15
+ >
16
+ {text || children}
17
+ </div>
18
+ );
19
+ };
@@ -0,0 +1,27 @@
1
+ import { cn } from '../lib/utils';
2
+ import { WarningImgUrl } from '../const/ui';
3
+
4
+ export interface WarningMessageProps {
5
+ message?: string;
6
+ className?: string;
7
+ }
8
+
9
+ export const WarningMessage = ({
10
+ message = '程序错误,请刷新页面重试',
11
+ className,
12
+ }: WarningMessageProps) => {
13
+ return (
14
+ <div className={cn('flex flex-col items-center gap-[10px]', className)}>
15
+ <div
16
+ className="bg-no-repeat bg-center"
17
+ style={{
18
+ backgroundImage: WarningImgUrl,
19
+ backgroundSize: '100% 100%',
20
+ width: 120,
21
+ height: 77,
22
+ }}
23
+ />
24
+ <p className="text-[12px] text-[#999] leading-normal">{message}</p>
25
+ </div>
26
+ );
27
+ };
@@ -0,0 +1,52 @@
1
+ import { FormIconOption } from "../types";
2
+
3
+ export const BotImgUrl = `
4
+ url(data:image/png;base64,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)
5
+ `;
6
+
7
+ export const WarningImgUrl = `
8
+ url(data:image/png;base64,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)`;
9
+
10
+ export const ChatHeaderBgImgUrl = `url(data:image/png;base64,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)`;
11
+
12
+ export const transCls = 'transition-all duration-200 ease-out';
13
+ // Form icon data from iconfont.json (icons with name starting with "表单")
14
+
15
+ export const FORM_ICON_OPTIONS: FormIconOption[] = [
16
+ { id: 'biaodan1', code: '&#xe814;', label: '表单1', value: 25 },
17
+ { id: 'biaodan2', code: '&#xe81d;', label: '表单2', value: 26 },
18
+ { id: 'biaodan3', code: '&#xe81c;', label: '表单3', value: 27 },
19
+ { id: 'biaodan4', code: '&#xe81a;', label: '表单4', value: 28 },
20
+ { id: 'biaodan5', code: '&#xe813;', label: '表单5', value: 29 },
21
+ { id: 'biaodan6', code: '&#xe81b;', label: '表单6', value: 30 },
22
+ { id: 'biaodan7', code: '&#xe818;', label: '表单7', value: 31 },
23
+ { id: 'biaodan8', code: '&#xe819;', label: '表单8', value: 32 },
24
+ { id: 'biaodan9', code: '&#xe817;', label: '表单9', value: 33 },
25
+ { id: 'biaodan10', code: '&#xe816;', label: '表单10', value: 34 },
26
+ { id: 'biaodan11', code: '&#xe810;', label: '表单11', value: 35 },
27
+ { id: 'biaodan12', code: '&#xe815;', label: '表单12', value: 36 },
28
+ { id: 'biaodan13', code: '&#xe812;', label: '表单13', value: 37 },
29
+ { id: 'biaodan14', code: '&#xe811;', label: '表单14', value: 38 },
30
+ { id: 'biaodan15', code: '&#xe80e;', label: '表单15', value: 39 },
31
+ { id: 'biaodan16', code: '&#xe80f;', label: '表单16', value: 40 },
32
+ { id: 'biaodan17', code: '&#xe80d;', label: '表单17', value: 41 },
33
+ { id: 'biaodan18', code: '&#xe807;', label: '表单18', value: 42 },
34
+ { id: 'biaodan19', code: '&#xe80b;', label: '表单19', value: 43 },
35
+ { id: 'biaodan20', code: '&#xe80a;', label: '表单20', value: 44 },
36
+ { id: 'biaodan21', code: '&#xe80c;', label: '表单21', value: 45 },
37
+ { id: 'biaodan22', code: '&#xe809;', label: '表单22', value: 46 },
38
+ { id: 'biaodan23', code: '&#xe808;', label: '表单23', value: 47 },
39
+ { id: 'biaodan24', code: '&#xe805;', label: '表单24', value: 48 },
40
+ { id: 'biaodan25', code: '&#xe7ff;', label: '表单25', value: 49 },
41
+ { id: 'biaodan26', code: '&#xe803;', label: '表单26', value: 50 },
42
+ { id: 'biaodan27', code: '&#xe806;', label: '表单27', value: 51 },
43
+ { id: 'biaodan28', code: '&#xe802;', label: '表单28', value: 52 },
44
+ { id: 'biaodan29', code: '&#xe800;', label: '表单29', value: 53 },
45
+ { id: 'biaodan30', code: '&#xe804;', label: '表单30', value: 54 },
46
+ { id: 'biaodan31', code: '&#xe801;', label: '表单31', value: 55 },
47
+ { id: 'biaodan32', code: '&#xe7fe;', label: '表单32', value: 56 },
48
+ { id: 'biaodan33', code: '&#xe7fc;', label: '表单33', value: 57 },
49
+ { id: 'biaodan34', code: '&#xe7fd;', label: '表单34', value: 58 },
50
+ { id: 'biaodan35', code: '&#xe7fb;', label: '表单35', value: 59 },
51
+ { id: 'biaodan36', code: '&#xe7fa;', label: '表单36', value: 60 },
52
+ ];
@@ -0,0 +1,92 @@
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
+
3
+ interface UseResizableWidthOptions {
4
+ /** 宽度范围 [min, max],单位 px */
5
+ range: [number, number];
6
+ /** 初始宽度,未指定时取 range 上限 */
7
+ initialWidth?: number;
8
+ }
9
+
10
+ interface UseResizableWidthResult {
11
+ /** 当前宽度 */
12
+ width: number;
13
+ /** 拖拽手柄的 onMouseDown 处理器 */
14
+ handleMouseDown: (e: React.MouseEvent) => void;
15
+ /** 是否正在拖拽 */
16
+ isDragging: boolean;
17
+ /** 是否到达边缘(最小或最大值) */
18
+ isAtEdge: boolean;
19
+ }
20
+
21
+ /**
22
+ * 支持通过拖拽调整宽度的 Hook
23
+ * @param options 配置项:宽度范围、初始宽度
24
+ * @returns 当前宽度、拖拽处理器、拖拽状态
25
+ */
26
+ export const useResizableWidth = ({
27
+ range,
28
+ initialWidth,
29
+ }: UseResizableWidthOptions): UseResizableWidthResult => {
30
+ const [minWidth, maxWidth] = range;
31
+ const [width, setWidth] = useState<number>(initialWidth ?? maxWidth);
32
+ const [isDragging, setIsDragging] = useState(false);
33
+
34
+ const stateRef = useRef({
35
+ startX: 0,
36
+ startWidth: 0,
37
+ });
38
+
39
+ const handleMouseMove = useCallback(
40
+ (e: MouseEvent) => {
41
+ const delta = e.clientX - stateRef.current.startX;
42
+ const newWidth = Math.min(Math.max(stateRef.current.startWidth + delta, minWidth), maxWidth);
43
+
44
+ setWidth(newWidth);
45
+ },
46
+ [minWidth, maxWidth]
47
+ );
48
+
49
+ const handleMouseUp = useCallback(() => {
50
+ setIsDragging(false);
51
+ document.body.style.userSelect = '';
52
+ document.removeEventListener('mousemove', handleMouseMove);
53
+ document.removeEventListener('mouseup', handleMouseUp);
54
+
55
+ document.body.style.cursor = ''; // 恢复默认光标
56
+ }, [handleMouseMove]);
57
+
58
+ const handleMouseDown = useCallback(
59
+ (e: React.MouseEvent) => {
60
+ setIsDragging(true);
61
+ stateRef.current = {
62
+ startX: e.clientX,
63
+ startWidth: width,
64
+ };
65
+ document.body.style.userSelect = 'none';
66
+ document.addEventListener('mousemove', handleMouseMove);
67
+ document.addEventListener('mouseup', handleMouseUp);
68
+
69
+ document.body.style.cursor = 'col-resize'; // 设置全局拖拽光标
70
+ },
71
+ [width, handleMouseMove, handleMouseUp]
72
+ );
73
+
74
+ useEffect(() => {
75
+ return () => {
76
+ document.removeEventListener('mousemove', handleMouseMove);
77
+ document.removeEventListener('mouseup', handleMouseUp);
78
+ document.body.style.userSelect = '';
79
+
80
+ document.body.style.cursor = ''; // 清理光标样式
81
+ };
82
+ }, [handleMouseMove, handleMouseUp]);
83
+
84
+ const isAtEdge = width === minWidth || width === maxWidth;
85
+
86
+ return {
87
+ width,
88
+ handleMouseDown,
89
+ isDragging,
90
+ isAtEdge,
91
+ };
92
+ };
@@ -0,0 +1,127 @@
1
+ import { useState, useEffect, useRef } from 'react';
2
+
3
+ interface UseShadowOptions {
4
+ /** Shadow DOM挂载的根元素(默认挂到body) */
5
+ rootEl?: HTMLElement;
6
+ /** 要注入到Shadow DOM中的样式文本 */
7
+ style?: string;
8
+ /** Shadow内部容器的类名 */
9
+ containerClasses?: string[];
10
+ /** 包裹Shadow的外层元素类名 */
11
+ wrapperClasses?: string[];
12
+ /** 包裹元素的内联样式 */
13
+ wrapperStyle?: React.CSSProperties;
14
+
15
+ extraHtml?: string;
16
+
17
+ id: string;
18
+ }
19
+
20
+ /**
21
+ * 通用的创建Shadow DOM的Hook
22
+ * @param options 配置项:样式、根元素、类名等
23
+ * @returns Shadow DOM内部的容器元素(用于React Portal挂载)
24
+ */
25
+ export const useShadow = ({
26
+ id,
27
+ style = '',
28
+ rootEl,
29
+ containerClasses = [],
30
+ wrapperClasses = [],
31
+ wrapperStyle = {},
32
+ extraHtml = '',
33
+ }: UseShadowOptions): { shadowContainer: HTMLElement | null; destroy: () => void } => {
34
+ const [shadowContainer, setShadowContainer] = useState<HTMLElement | null>(null);
35
+ const wrapperRef = useRef<HTMLDivElement | null>(null);
36
+
37
+ useEffect(() => {
38
+ wrapperRef.current?.classList.add(...wrapperClasses);
39
+ shadowContainer?.classList.add(...containerClasses);
40
+ }, [wrapperClasses, containerClasses]);
41
+
42
+ useEffect(() => {
43
+ if (wrapperRef.current) {
44
+ Object.entries(wrapperStyle).forEach(([key, value]) => {
45
+ if (value !== undefined) {
46
+ // @ts-ignore
47
+ wrapperRef.current!.style[key as any] = value;
48
+ }
49
+ });
50
+ }
51
+ }, [wrapperStyle]);
52
+
53
+ useEffect(() => {
54
+ // Cleanup previous shadow container if it exists
55
+ if (wrapperRef.current && wrapperRef.current.parentNode) {
56
+ wrapperRef.current.parentNode.removeChild(wrapperRef.current);
57
+ wrapperRef.current = null;
58
+ }
59
+
60
+ try {
61
+ // 1. 创建外层包裹元素(挂载Shadow Root的载体)
62
+ const wrapperEl = document.createElement('div');
63
+ wrapperEl.classList.add(...wrapperClasses, 'wrapper');
64
+ // wrapperEl.style.height = '100%';
65
+ wrapperRef.current = wrapperEl;
66
+
67
+ // apply wrapper styles
68
+ Object.entries(wrapperStyle).forEach(([key, value]) => {
69
+ if (value !== undefined) {
70
+ // @ts-ignore
71
+ wrapperEl.style[key as any] = value;
72
+ }
73
+ });
74
+
75
+ // 2. 创建并挂载Shadow Root
76
+ const shadowRoot = wrapperEl.attachShadow({ mode: 'open' });
77
+
78
+ // 注入额外的HTML内容
79
+ if (extraHtml) {
80
+ shadowRoot.innerHTML = extraHtml;
81
+ }
82
+
83
+ // 3. 注入样式到Shadow DOM
84
+ if (style) {
85
+ const styleEl = document.createElement('style');
86
+ styleEl.textContent = style;
87
+ shadowRoot.appendChild(styleEl);
88
+ }
89
+
90
+ // 4. 创建Shadow内部的容器(最终挂载React Portal的元素)
91
+ const containerEl = document.createElement('div');
92
+ containerEl.classList.add(...containerClasses, 'shadow-container');
93
+ shadowRoot.appendChild(containerEl);
94
+
95
+ // 5. 将外层元素挂载到指定根节点
96
+ const mountRoot = rootEl || document.body;
97
+ mountRoot.appendChild(wrapperEl);
98
+
99
+ setShadowContainer(containerEl);
100
+ } catch (error) {
101
+ console.error('创建Shadow DOM失败:', error);
102
+ setShadowContainer(null);
103
+ }
104
+
105
+ // Cleanup on unmount or when rootEl changes
106
+ // return () => {
107
+ // if (wrapperRef.current && wrapperRef.current.parentNode) {
108
+ // wrapperRef.current.parentNode.removeChild(wrapperRef.current);
109
+ // wrapperRef.current = null;
110
+ // }
111
+ // };
112
+ }, [rootEl]); // Recreate when rootEl changes
113
+
114
+ if (shadowContainer) {
115
+ shadowContainer.id = id;
116
+ }
117
+
118
+ return {
119
+ shadowContainer,
120
+ destroy: () => {
121
+ if (wrapperRef.current && wrapperRef.current.parentNode) {
122
+ wrapperRef.current.parentNode.removeChild(wrapperRef.current);
123
+ wrapperRef.current = null;
124
+ }
125
+ },
126
+ };
127
+ };
package/src/index.ts ADDED
@@ -0,0 +1,76 @@
1
+ // Utils
2
+ export { cn, copyTextToClipboard } from './lib/utils';
3
+
4
+ // Hooks
5
+ export { useShadow } from './hooks/use-shadow';
6
+
7
+ // Constants
8
+ export { transCls, BotImgUrl, WarningImgUrl, ChatHeaderBgImgUrl, FORM_ICON_OPTIONS } from './const/ui';
9
+
10
+ // Types
11
+ export type { FormIconOption, LegacySlotRenderer } from './types';
12
+
13
+ // UI primitives (shadcn)
14
+ export * from './components/ui/button';
15
+ export * from './components/ui/dialog';
16
+ export * from './components/ui/popover';
17
+ export * from './components/ui/tooltip';
18
+ export * from './components/ui/spinner';
19
+
20
+ // AI Design Components
21
+ export { AbsFullscreenGradientBg } from './components/abs-fullscreen-gradient-bg';
22
+ export { AgentSelect } from './components/agent-select';
23
+ export type { AgentSelectAgent, AgentSelectProps } from './components/agent-select';
24
+ export { AgentScrollSelector } from './components/agent-scroll-selector';
25
+ export type { AgentScrollSelectorProps } from './components/agent-scroll-selector';
26
+ export { AttachmentPartGroup } from './components/attachment-part-group';
27
+ export { AttachmentPart } from './components/attachment-part';
28
+ export type { FilePart } from './components/attachment-part';
29
+ export { AttachmentsPreviewer } from './components/attachments-previewer';
30
+ export { BaseButton } from './components/base-button';
31
+ export { BsEntrySelect } from './components/bs-entry-select';
32
+ export type { BsEntrySelectProps, BsEntrySelectChangeResult } from './components/bs-entry-select';
33
+ export { BorderAnimation } from './components/border-animation';
34
+ export { BorderColorAnimation } from './components/border-color-animation';
35
+ export { BotAvatarAndName } from './components/bot-avatar-name';
36
+ export { BotIcon } from './components/bot-icon';
37
+ export * from './components/bs-icons';
38
+ export { CardFieldsWrapper, CardField } from './components/card-field';
39
+ export { Card } from './components/card';
40
+ export { ChatAreaHeader } from './components/chat-area-header';
41
+ export { CircleChecker } from './components/circle-checker';
42
+ export { CollapsibleTxtMsg } from './components/collapsible-txt-msg';
43
+ export { ConfirmDialog } from './components/confirm-dialog';
44
+ export { FieldsDesignInfoTable } from './components/fields-design-info-table';
45
+ export { FieldsGeneratingIndicator } from './components/fields-generating-indicator';
46
+ export { FakeBotMessage } from './components/fake-bot-msg';
47
+ export { FieldsPortal } from './components/fields-portal';
48
+ export { FieldsPreviewer } from './components/fields-previewer';
49
+ export { FontIcon } from './components/font-icon';
50
+ export { FormInfoEditor } from './components/form-info-editor';
51
+ export { FormulaTag } from './components/formula-tag';
52
+ export { GenerateAnimation } from './components/generate-animation';
53
+ export { IconBtn } from './components/icon-btn';
54
+ export { ImgMsgPart } from './components/img-part';
55
+ export { LineChecker } from './components/line-checker';
56
+ export { LegacySlot } from './components/legacy-slot';
57
+ export type { LegacySlotProps } from './components/legacy-slot';
58
+ export { LinearGradientBorderBtn } from './components/linear-gradient-border-btn';
59
+ export { MemoizedMarkdown } from './components/memoized-markdown';
60
+ export { MessageContent } from './components/message-content';
61
+ export type { MessageContentProps } from './components/message-content';
62
+ export { LinearGradientColorBgAnimation } from './components/linear-gradient-color-bg-animation';
63
+ export { NumbersMsgPart } from './components/number-part';
64
+ export { OptionItem } from './components/option-item';
65
+ export { PreviewerHeader } from './components/previewer-header';
66
+ export { PrimaryConfirmBtn } from './components/primary-confirm-btn';
67
+ export { PrimaryEntryBtn } from './components/primary-entry-btn';
68
+ export { ScrollToBottomBtn } from './components/scroll-to-bottom-btn';
69
+ export { SplitLine } from './components/split-line';
70
+ export { SquareChecker } from './components/square-checker';
71
+ export { TabRadioGroup, TabRadioItem } from './components/tab-radio-group';
72
+ export { BsTooltip } from './components/tooltip';
73
+ export { UserTextMsgBubble } from './components/user-txt-msg-bubble';
74
+ export { OfficeContainer } from './components/office-container';
75
+ export type { IOfficeContainerProps } from './components/office-container';
76
+ export { WarningMessage } from './components/warning-msg';
@@ -0,0 +1,52 @@
1
+ import { clsx, type ClassValue } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs));
6
+ }
7
+
8
+ // 复制文本的核心函数(TypeScript 版本)
9
+ export async function copyTextToClipboard(text: string): Promise<boolean> {
10
+ // 校验输入:确保复制的文本是字符串且非空
11
+ if (typeof text !== 'string' || text.trim() === '') {
12
+ console.error('要复制的文本必须是非空字符串');
13
+ return false;
14
+ }
15
+
16
+ try {
17
+ // 方案1:优先使用现代浏览器的 Clipboard API(更安全、无DOM操作)
18
+ if (navigator.clipboard && window.isSecureContext) {
19
+ await navigator.clipboard.writeText(text);
20
+ console.log('文本复制成功(Clipboard API)');
21
+ return true;
22
+ }
23
+
24
+ // 方案2:降级使用 execCommand(兼容旧浏览器,需创建临时DOM元素)
25
+ // 1. 创建临时textarea元素(隐藏,避免影响页面布局)
26
+ const textarea = document.createElement('textarea');
27
+ textarea.value = text;
28
+ textarea.style.position = 'fixed'; // 避免滚动条偏移
29
+ textarea.style.left = '-9999px';
30
+ textarea.style.top = '-9999px';
31
+ document.body.appendChild(textarea);
32
+
33
+ // 2. 选中文本并执行复制
34
+ textarea.focus();
35
+ textarea.select();
36
+ const success = document.execCommand('copy');
37
+
38
+ // 3. 移除临时元素
39
+ document.body.removeChild(textarea);
40
+
41
+ if (success) {
42
+ console.log('文本复制成功(execCommand 降级方案)');
43
+ return true;
44
+ } else {
45
+ throw new Error('execCommand 复制失败');
46
+ }
47
+ } catch (error) {
48
+ // 捕获复制失败的异常(如用户拒绝权限、浏览器不支持等)
49
+ console.error('文本复制失败:', error);
50
+ return false;
51
+ }
52
+ }
@@ -0,0 +1,36 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+
3
+ import { AbsFullscreenGradientBg } from '../components/abs-fullscreen-gradient-bg';
4
+
5
+ const meta = {
6
+ title: 'Example/Chat/AbsFullscreenGradientBg',
7
+ component: AbsFullscreenGradientBg,
8
+ tags: ['autodocs'],
9
+ parameters: {
10
+ layout: 'fullscreen',
11
+ },
12
+ args: {
13
+ zIndex: 1,
14
+ },
15
+ } satisfies Meta<typeof AbsFullscreenGradientBg>;
16
+
17
+ export default meta;
18
+ type Story = StoryObj<typeof meta>;
19
+
20
+ export const Default: Story = {
21
+ args: {
22
+ zIndex: 1,
23
+ },
24
+ };
25
+
26
+ export const WithContent: Story = {
27
+ args: {
28
+ zIndex: 1,
29
+ children: (
30
+ <div style={{ position: 'relative', zIndex: 1, padding: '40px', color: '#333' }}>
31
+ <h1>Content over gradient background</h1>
32
+ <p>This demonstrates how content can be placed over the gradient background.</p>
33
+ </div>
34
+ ),
35
+ },
36
+ };