@baishuyun/ai-design 1.0.9 → 1.1.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 (312) hide show
  1. package/.turbo/turbo-build.log +570 -26
  2. package/CHANGELOG.md +18 -0
  3. package/dist/ai-design.css +4 -3
  4. package/dist/ai-design.js +9554 -9498
  5. package/dist/ai-design.js.map +1 -1
  6. package/dist/ai-design.umd.cjs +82 -94
  7. package/dist/ai-design.umd.cjs.map +1 -1
  8. package/dist/src/components/agent-helper/agent-category-select-menu/index.d.ts +1 -1
  9. package/dist/src/components/agent-helper/agent-category-select-menu/index.d.ts.map +1 -1
  10. package/dist/src/components/agent-helper/agent-entry-card/index.d.ts +1 -1
  11. package/dist/src/components/agent-helper/agent-entry-card/index.d.ts.map +1 -1
  12. package/dist/src/components/agent-helper/agent-helper-card/index.d.ts +1 -1
  13. package/dist/src/components/agent-helper/agent-helper-card/index.d.ts.map +1 -1
  14. package/dist/src/components/agent-helper/agent-helper-card-list/index.d.ts +1 -1
  15. package/dist/src/components/agent-helper/agent-helper-card-list/index.d.ts.map +1 -1
  16. package/dist/src/components/agent-helper/agent-helper-main-layout/index.d.ts +5 -5
  17. package/dist/src/components/agent-helper/agent-sort-select/index.d.ts +8 -0
  18. package/dist/src/components/agent-helper/agent-sort-select/index.d.ts.map +1 -0
  19. package/dist/src/components/agent-helper/agent-tag/index.d.ts +1 -1
  20. package/dist/src/components/agent-helper/agent-tag/index.d.ts.map +1 -1
  21. package/dist/src/components/agent-helper/app-select/index.d.ts +1 -1
  22. package/dist/src/components/agent-helper/app-select/index.d.ts.map +1 -1
  23. package/dist/src/components/agent-helper/condition-group/index.d.ts +1 -1
  24. package/dist/src/components/agent-helper/condition-input/index.d.ts +2 -2
  25. package/dist/src/components/agent-helper/condition-input/index.d.ts.map +1 -1
  26. package/dist/src/components/agent-helper/condition-item/index.d.ts +1 -1
  27. package/dist/src/components/agent-helper/condition-quantifier-select/index.d.ts +1 -1
  28. package/dist/src/components/agent-helper/condition-quantifier-select/index.d.ts.map +1 -1
  29. package/dist/src/components/agent-helper/condition-trigger-description/index.d.ts +1 -1
  30. package/dist/src/components/agent-helper/condition-trigger-description/index.d.ts.map +1 -1
  31. package/dist/src/components/agent-helper/date-picker/calendar-panel.d.ts +1 -1
  32. package/dist/src/components/agent-helper/date-picker/calendar-panel.d.ts.map +1 -1
  33. package/dist/src/components/agent-helper/date-picker/date-input.d.ts +1 -1
  34. package/dist/src/components/agent-helper/date-picker/date-input.d.ts.map +1 -1
  35. package/dist/src/components/agent-helper/date-picker/date-picker.d.ts +1 -1
  36. package/dist/src/components/agent-helper/date-picker/date-picker.d.ts.map +1 -1
  37. package/dist/src/components/agent-helper/date-picker/footer-panel.d.ts +1 -1
  38. package/dist/src/components/agent-helper/date-picker/footer-panel.d.ts.map +1 -1
  39. package/dist/src/components/agent-helper/date-picker/month-panel.d.ts +1 -1
  40. package/dist/src/components/agent-helper/date-picker/month-panel.d.ts.map +1 -1
  41. package/dist/src/components/agent-helper/date-picker/time-panel.d.ts +1 -1
  42. package/dist/src/components/agent-helper/date-picker/time-panel.d.ts.map +1 -1
  43. package/dist/src/components/agent-helper/date-picker/year-panel.d.ts +1 -1
  44. package/dist/src/components/agent-helper/date-picker/year-panel.d.ts.map +1 -1
  45. package/dist/src/components/agent-helper/exec-log-filter/index.d.ts +1 -1
  46. package/dist/src/components/agent-helper/exec-log-filter/index.d.ts.map +1 -1
  47. package/dist/src/components/agent-helper/field-edit-preference-select/index.d.ts +1 -1
  48. package/dist/src/components/agent-helper/field-edit-preference-select/index.d.ts.map +1 -1
  49. package/dist/src/components/agent-helper/field-select/index.d.ts +2 -2
  50. package/dist/src/components/agent-helper/field-select/index.d.ts.map +1 -1
  51. package/dist/src/components/agent-helper/field-value-input/display.d.ts +4 -4
  52. package/dist/src/components/agent-helper/field-value-input/display.d.ts.map +1 -1
  53. package/dist/src/components/agent-helper/field-value-input/icons.d.ts +5 -5
  54. package/dist/src/components/agent-helper/field-value-input/icons.d.ts.map +1 -1
  55. package/dist/src/components/agent-helper/field-value-input/index.d.ts +2 -2
  56. package/dist/src/components/agent-helper/field-value-input/index.d.ts.map +1 -1
  57. package/dist/src/components/agent-helper/field-value-input/inputs.d.ts +8 -8
  58. package/dist/src/components/agent-helper/field-value-input/inputs.d.ts.map +1 -1
  59. package/dist/src/components/agent-helper/field-value-input/picker-inputs.d.ts +8 -8
  60. package/dist/src/components/agent-helper/field-value-input/picker-inputs.d.ts.map +1 -1
  61. package/dist/src/components/agent-helper/flow-node-action-trigger-select/index.d.ts +1 -1
  62. package/dist/src/components/agent-helper/flow-node-action-trigger-select/index.d.ts.map +1 -1
  63. package/dist/src/components/agent-helper/form-action-trigger-select/index.d.ts +1 -1
  64. package/dist/src/components/agent-helper/form-action-trigger-select/index.d.ts.map +1 -1
  65. package/dist/src/components/agent-helper/form-divider/index.d.ts +1 -1
  66. package/dist/src/components/agent-helper/form-divider/index.d.ts.map +1 -1
  67. package/dist/src/components/agent-helper/monthdays-select/index.d.ts +1 -1
  68. package/dist/src/components/agent-helper/monthdays-select/index.d.ts.map +1 -1
  69. package/dist/src/components/agent-helper/offset-preference-select/index.d.ts +1 -1
  70. package/dist/src/components/agent-helper/offset-preference-select/index.d.ts.map +1 -1
  71. package/dist/src/components/agent-helper/offset-type-select/index.d.ts +1 -1
  72. package/dist/src/components/agent-helper/offset-type-select/index.d.ts.map +1 -1
  73. package/dist/src/components/agent-helper/offset-unit-select/index.d.ts +1 -1
  74. package/dist/src/components/agent-helper/offset-unit-select/index.d.ts.map +1 -1
  75. package/dist/src/components/agent-helper/placeholder-card/index.d.ts +1 -1
  76. package/dist/src/components/agent-helper/placeholder-card/index.d.ts.map +1 -1
  77. package/dist/src/components/agent-helper/prompt-input/index.d.ts +1 -1
  78. package/dist/src/components/agent-helper/prompt-input/index.d.ts.map +1 -1
  79. package/dist/src/components/agent-helper/relational-operator-select/index.d.ts +1 -1
  80. package/dist/src/components/agent-helper/relational-operator-select/index.d.ts.map +1 -1
  81. package/dist/src/components/agent-helper/repeat-by-type-select/index.d.ts +1 -1
  82. package/dist/src/components/agent-helper/repeat-by-type-select/index.d.ts.map +1 -1
  83. package/dist/src/components/agent-helper/repeat-preference-select/index.d.ts +1 -1
  84. package/dist/src/components/agent-helper/repeat-preference-select/index.d.ts.map +1 -1
  85. package/dist/src/components/agent-helper/repeat-preference-type-select/index.d.ts +1 -1
  86. package/dist/src/components/agent-helper/repeat-preference-type-select/index.d.ts.map +1 -1
  87. package/dist/src/components/agent-helper/search-input/index.d.ts +1 -1
  88. package/dist/src/components/agent-helper/search-input/index.d.ts.map +1 -1
  89. package/dist/src/components/agent-helper/table/index.d.ts +1 -1
  90. package/dist/src/components/agent-helper/table/index.d.ts.map +1 -1
  91. package/dist/src/components/agent-helper/trigger-select/index.d.ts +2 -2
  92. package/dist/src/components/agent-helper/trigger-select/index.d.ts.map +1 -1
  93. package/dist/src/components/agent-helper/trigger-time-preference-select/index.d.ts +1 -1
  94. package/dist/src/components/agent-helper/trigger-time-preference-select/index.d.ts.map +1 -1
  95. package/dist/src/components/agent-helper/trigger-time-source-type-select/index.d.ts +1 -1
  96. package/dist/src/components/agent-helper/trigger-time-source-type-select/index.d.ts.map +1 -1
  97. package/dist/src/components/agent-helper/weekdays-select/index.d.ts +1 -1
  98. package/dist/src/components/agent-helper/weekdays-select/index.d.ts.map +1 -1
  99. package/dist/src/components/agent-scroll-selector.d.ts +1 -1
  100. package/dist/src/components/agent-scroll-selector.d.ts.map +1 -1
  101. package/dist/src/components/agent-select.d.ts +1 -1
  102. package/dist/src/components/agent-select.d.ts.map +1 -1
  103. package/dist/src/components/attachment-part-group.d.ts +1 -1
  104. package/dist/src/components/attachment-part-group.d.ts.map +1 -1
  105. package/dist/src/components/attachment-part.d.ts +1 -1
  106. package/dist/src/components/attachment-part.d.ts.map +1 -1
  107. package/dist/src/components/attachments-previewer.d.ts +1 -1
  108. package/dist/src/components/attachments-previewer.d.ts.map +1 -1
  109. package/dist/src/components/border-color-animation.d.ts +1 -1
  110. package/dist/src/components/border-color-animation.d.ts.map +1 -1
  111. package/dist/src/components/bot-avatar-name.d.ts +1 -1
  112. package/dist/src/components/bot-avatar-name.d.ts.map +1 -1
  113. package/dist/src/components/bot-icon.d.ts +1 -1
  114. package/dist/src/components/bot-icon.d.ts.map +1 -1
  115. package/dist/src/components/bs-entry-select/app-group-folder.d.ts +1 -1
  116. package/dist/src/components/bs-entry-select/app-group-folder.d.ts.map +1 -1
  117. package/dist/src/components/bs-entry-select/bs-entry-select.d.ts.map +1 -1
  118. package/dist/src/components/bs-entry-select/entry-item.d.ts +1 -1
  119. package/dist/src/components/bs-entry-select/entry-item.d.ts.map +1 -1
  120. package/dist/src/components/bs-entry-select/entry-popover.d.ts +3 -2
  121. package/dist/src/components/bs-entry-select/entry-popover.d.ts.map +1 -1
  122. package/dist/src/components/bs-entry-select/other-app-section.d.ts +1 -1
  123. package/dist/src/components/bs-entry-select/other-app-section.d.ts.map +1 -1
  124. package/dist/src/components/bs-entry-select/scroll-slider.d.ts +3 -2
  125. package/dist/src/components/bs-entry-select/scroll-slider.d.ts.map +1 -1
  126. package/dist/src/components/bs-entry-select/search-input.d.ts +1 -1
  127. package/dist/src/components/bs-entry-select/search-input.d.ts.map +1 -1
  128. package/dist/src/components/bs-entry-select/tree-item-node.d.ts +1 -1
  129. package/dist/src/components/bs-entry-select/tree-item-node.d.ts.map +1 -1
  130. package/dist/src/components/bs-entry-select/types.d.ts +1 -0
  131. package/dist/src/components/bs-entry-select/types.d.ts.map +1 -1
  132. package/dist/src/components/bs-icons.d.ts +72 -72
  133. package/dist/src/components/bs-icons.d.ts.map +1 -1
  134. package/dist/src/components/card-field.d.ts +2 -2
  135. package/dist/src/components/card-field.d.ts.map +1 -1
  136. package/dist/src/components/card.d.ts +1 -1
  137. package/dist/src/components/card.d.ts.map +1 -1
  138. package/dist/src/components/chat-area-header.d.ts +1 -1
  139. package/dist/src/components/chat-area-header.d.ts.map +1 -1
  140. package/dist/src/components/check-card.d.ts +1 -1
  141. package/dist/src/components/check-card.d.ts.map +1 -1
  142. package/dist/src/components/circle-checker.d.ts +1 -1
  143. package/dist/src/components/circle-checker.d.ts.map +1 -1
  144. package/dist/src/components/collapsible-txt-msg.d.ts +1 -1
  145. package/dist/src/components/collapsible-txt-msg.d.ts.map +1 -1
  146. package/dist/src/components/confirm-dialog.d.ts +1 -1
  147. package/dist/src/components/confirm-dialog.d.ts.map +1 -1
  148. package/dist/src/components/date-range-picker.d.ts +1 -1
  149. package/dist/src/components/date-range-picker.d.ts.map +1 -1
  150. package/dist/src/components/fake-bot-msg.d.ts +1 -1
  151. package/dist/src/components/fake-bot-msg.d.ts.map +1 -1
  152. package/dist/src/components/field-checker-list-msg.d.ts +3 -3
  153. package/dist/src/components/field-checker-list-msg.d.ts.map +1 -1
  154. package/dist/src/components/field-checker.d.ts +4 -6
  155. package/dist/src/components/field-checker.d.ts.map +1 -1
  156. package/dist/src/components/field-icon.d.ts +1 -1
  157. package/dist/src/components/field-icon.d.ts.map +1 -1
  158. package/dist/src/components/field-value-checker.d.ts +4 -6
  159. package/dist/src/components/field-value-checker.d.ts.map +1 -1
  160. package/dist/src/components/fields-design-info-table.d.ts +1 -1
  161. package/dist/src/components/fields-design-info-table.d.ts.map +1 -1
  162. package/dist/src/components/fields-generating-indicator.d.ts +2 -2
  163. package/dist/src/components/fields-generating-indicator.d.ts.map +1 -1
  164. package/dist/src/components/font-icon.d.ts +2 -2
  165. package/dist/src/components/font-icon.d.ts.map +1 -1
  166. package/dist/src/components/form-info-editor.d.ts +1 -1
  167. package/dist/src/components/form-info-editor.d.ts.map +1 -1
  168. package/dist/src/components/formula-tag.d.ts +1 -1
  169. package/dist/src/components/formula-tag.d.ts.map +1 -1
  170. package/dist/src/components/generate-animation.d.ts +1 -1
  171. package/dist/src/components/generate-animation.d.ts.map +1 -1
  172. package/dist/src/components/icon-card.d.ts +1 -1
  173. package/dist/src/components/icon-card.d.ts.map +1 -1
  174. package/dist/src/components/icons/calendar-icon.d.ts +1 -1
  175. package/dist/src/components/icons/calendar-icon.d.ts.map +1 -1
  176. package/dist/src/components/icons/clear-all-icon.d.ts +1 -1
  177. package/dist/src/components/icons/clear-all-icon.d.ts.map +1 -1
  178. package/dist/src/components/icons/empty-table-icon.d.ts +1 -1
  179. package/dist/src/components/icons/empty-table-icon.d.ts.map +1 -1
  180. package/dist/src/components/icons/grids-icon.d.ts +1 -1
  181. package/dist/src/components/icons/grids-icon.d.ts.map +1 -1
  182. package/dist/src/components/img-part.d.ts +1 -1
  183. package/dist/src/components/img-part.d.ts.map +1 -1
  184. package/dist/src/components/legacy-slot.d.ts +1 -1
  185. package/dist/src/components/legacy-slot.d.ts.map +1 -1
  186. package/dist/src/components/linear-gradient-color-bg-animation.d.ts +1 -1
  187. package/dist/src/components/linear-gradient-color-bg-animation.d.ts.map +1 -1
  188. package/dist/src/components/memoized-markdown.d.ts +1 -1
  189. package/dist/src/components/memoized-markdown.d.ts.map +1 -1
  190. package/dist/src/components/message-content.d.ts +1 -1
  191. package/dist/src/components/message-content.d.ts.map +1 -1
  192. package/dist/src/components/number-part.d.ts +1 -1
  193. package/dist/src/components/number-part.d.ts.map +1 -1
  194. package/dist/src/components/office-container.d.ts +2 -0
  195. package/dist/src/components/office-container.d.ts.map +1 -1
  196. package/dist/src/components/option-item.d.ts +1 -1
  197. package/dist/src/components/option-item.d.ts.map +1 -1
  198. package/dist/src/components/output-config-editor.d.ts +6 -11
  199. package/dist/src/components/output-config-editor.d.ts.map +1 -1
  200. package/dist/src/components/previewer-header.d.ts +1 -1
  201. package/dist/src/components/previewer-header.d.ts.map +1 -1
  202. package/dist/src/components/primary-confirm-btn.d.ts +1 -1
  203. package/dist/src/components/primary-confirm-btn.d.ts.map +1 -1
  204. package/dist/src/components/primary-entry-btn.d.ts +1 -1
  205. package/dist/src/components/primary-entry-btn.d.ts.map +1 -1
  206. package/dist/src/components/radio-card.d.ts +1 -1
  207. package/dist/src/components/radio-card.d.ts.map +1 -1
  208. package/dist/src/components/scroll-to-bottom-btn.d.ts +1 -1
  209. package/dist/src/components/scroll-to-bottom-btn.d.ts.map +1 -1
  210. package/dist/src/components/split-line.d.ts +1 -1
  211. package/dist/src/components/split-line.d.ts.map +1 -1
  212. package/dist/src/components/subform-fields-value-checker.d.ts +4 -6
  213. package/dist/src/components/subform-fields-value-checker.d.ts.map +1 -1
  214. package/dist/src/components/tooltip.d.ts +1 -1
  215. package/dist/src/components/tooltip.d.ts.map +1 -1
  216. package/dist/src/components/ui/calendar.d.ts +1 -1
  217. package/dist/src/components/ui/calendar.d.ts.map +1 -1
  218. package/dist/src/components/ui/dialog.d.ts +2 -2
  219. package/dist/src/components/ui/drawer.d.ts +11 -11
  220. package/dist/src/components/ui/drawer.d.ts.map +1 -1
  221. package/dist/src/components/ui/form.d.ts +1 -1
  222. package/dist/src/components/ui/form.d.ts.map +1 -1
  223. package/dist/src/components/ui/icons.d.ts +63 -63
  224. package/dist/src/components/ui/icons.d.ts.map +1 -1
  225. package/dist/src/components/ui/spinner.d.ts +1 -1
  226. package/dist/src/components/ui/spinner.d.ts.map +1 -1
  227. package/dist/src/components/ui/switch.d.ts +1 -1
  228. package/dist/src/components/ui/switch.d.ts.map +1 -1
  229. package/dist/src/components/ui/tooltip.d.ts +1 -1
  230. package/dist/src/components/ui/tooltip.d.ts.map +1 -1
  231. package/dist/src/components/user-txt-msg-bubble.d.ts +1 -1
  232. package/dist/src/components/user-txt-msg-bubble.d.ts.map +1 -1
  233. package/dist/src/components/warning-msg.d.ts +1 -1
  234. package/dist/src/components/warning-msg.d.ts.map +1 -1
  235. package/dist/src/index.d.ts +3 -1
  236. package/dist/src/index.d.ts.map +1 -1
  237. package/dist/src/stories/AgentCategorySelectMenu.stories.d.ts +1 -1
  238. package/dist/src/stories/AgentEntryCard.stories.d.ts +1 -1
  239. package/dist/src/stories/AgentHelperCard.stories.d.ts +1 -1
  240. package/dist/src/stories/AgentHelperCardList.stories.d.ts +1 -1
  241. package/dist/src/stories/AgentTag.stories.d.ts +1 -1
  242. package/dist/src/stories/AttachmentPart.stories.d.ts +2 -2
  243. package/dist/src/stories/AttachmentPartGroup.stories.d.ts +2 -2
  244. package/dist/src/stories/BaseButton.stories.d.ts +1 -1
  245. package/dist/src/stories/BorderColorAnimation.stories.d.ts +1 -1
  246. package/dist/src/stories/BotAvatarAndName.stories.d.ts +1 -1
  247. package/dist/src/stories/BotIcon.stories.d.ts +1 -1
  248. package/dist/src/stories/BsEntrySelect.stories.d.ts +1 -0
  249. package/dist/src/stories/BsEntrySelect.stories.d.ts.map +1 -1
  250. package/dist/src/stories/Card.stories.d.ts +1 -1
  251. package/dist/src/stories/ChatAreaHeader.stories.d.ts +1 -1
  252. package/dist/src/stories/CheckCard.stories.d.ts +1 -1
  253. package/dist/src/stories/CircleChecker.stories.d.ts +1 -1
  254. package/dist/src/stories/CollapsibleTextMsg.stories.d.ts +1 -1
  255. package/dist/src/stories/ConditonQuantifierSelect.stories.d.ts +1 -1
  256. package/dist/src/stories/ConditonTriggerDescription.stories.d.ts +1 -1
  257. package/dist/src/stories/FakeBotMsg.stories.d.ts +1 -1
  258. package/dist/src/stories/FlowNodeActionTriggerSelect.stories.d.ts +1 -1
  259. package/dist/src/stories/FormActionTriggerSelect.stories.d.ts +1 -1
  260. package/dist/src/stories/FormDivider.stories.d.ts +1 -1
  261. package/dist/src/stories/FormulaTag.stories.d.ts +1 -1
  262. package/dist/src/stories/GenerateAnimation.stories.d.ts +1 -1
  263. package/dist/src/stories/IconCard.stories.d.ts +1 -1
  264. package/dist/src/stories/IconLib.d.ts +1 -1
  265. package/dist/src/stories/Icons.stories.d.ts +1 -1
  266. package/dist/src/stories/ImgMsgPart.stories.d.ts +1 -1
  267. package/dist/src/stories/LinearGradientColorBgAnimation.stories.d.ts +1 -1
  268. package/dist/src/stories/MemoizedMarkdown.stories.d.ts +1 -1
  269. package/dist/src/stories/MessageContent.stories.d.ts +1 -1
  270. package/dist/src/stories/NumbersMsgPart.stories.d.ts +1 -1
  271. package/dist/src/stories/OfficeContainer.stories.d.ts +1 -0
  272. package/dist/src/stories/OfficeContainer.stories.d.ts.map +1 -1
  273. package/dist/src/stories/OptionItem.stories.d.ts +1 -1
  274. package/dist/src/stories/OutputConfigEditor.stories.d.ts.map +1 -1
  275. package/dist/src/stories/PlaceholderCard.stories.d.ts +14 -1
  276. package/dist/src/stories/PlaceholderCard.stories.d.ts.map +1 -1
  277. package/dist/src/stories/PrimaryConfirmBtn.stories.d.ts +1 -1
  278. package/dist/src/stories/PrimaryEntryBtn.stories.d.ts +1 -1
  279. package/dist/src/stories/PromptInput.stories.d.ts.map +1 -1
  280. package/dist/src/stories/RadioCard.stories.d.ts +1 -1
  281. package/dist/src/stories/RelationalOperatorSelect.stories.d.ts +1 -1
  282. package/dist/src/stories/ScrollToBottom.stories.d.ts +1 -1
  283. package/dist/src/stories/SearchInput.stories.d.ts +1 -1
  284. package/dist/src/stories/TriggerSelect.stories.d.ts +1 -1
  285. package/dist/src/stories/UserTextMsgBubble.stories.d.ts +1 -1
  286. package/dist/src/stories/WarningMessage.stories.d.ts +1 -1
  287. package/dist/src/stories/fields-generating.stories.d.ts +1 -1
  288. package/package.json +24 -22
  289. package/src/components/agent-helper/agent-entry-card/index.tsx +3 -3
  290. package/src/components/agent-helper/agent-sort-select/index.tsx +89 -0
  291. package/src/components/agent-helper/condition-input/index.tsx +13 -2
  292. package/src/components/agent-helper/field-select/index.tsx +35 -12
  293. package/src/components/agent-helper/field-value-input/picker-inputs.tsx +4 -3
  294. package/src/components/agent-helper/placeholder-card/index.tsx +14 -11
  295. package/src/components/agent-helper/prompt-input/index.tsx +44 -33
  296. package/src/components/agent-scroll-selector.tsx +1 -1
  297. package/src/components/bs-entry-select/bs-entry-select.tsx +12 -4
  298. package/src/components/bs-entry-select/entry-popover.tsx +3 -1
  299. package/src/components/bs-entry-select/other-app-section.tsx +1 -1
  300. package/src/components/bs-entry-select/scroll-slider.tsx +12 -2
  301. package/src/components/bs-entry-select/types.ts +1 -0
  302. package/src/components/field-checker.tsx +5 -7
  303. package/src/components/field-value-checker.tsx +3 -5
  304. package/src/components/office-container.tsx +67 -4
  305. package/src/components/output-config-editor.tsx +259 -241
  306. package/src/components/subform-fields-value-checker.tsx +10 -11
  307. package/src/index.ts +3 -1
  308. package/src/stories/BsEntrySelect.stories.tsx +10 -0
  309. package/src/stories/OfficeContainer.stories.tsx +56 -0
  310. package/src/stories/OutputConfigEditor.stories.tsx +43 -23
  311. package/src/stories/PromptInput.stories.tsx +12 -1
  312. package/style.css +4 -3
@@ -1,9 +1,10 @@
1
- import { useState, useCallback, useRef, useEffect } from 'react';
2
- import type { OutputParam, FieldType } from '@baishuyun/types';
1
+ import { useState, useCallback } from 'react';
2
+ import type { FieldType, IAgentHelperOutputConfig, OutputParam, IField, ISubformField } from '@baishuyun/types';
3
3
  import { cn } from '../lib/utils';
4
- import { transCls, FieldTypeNameMap } from '../const/ui';
4
+ import { transCls } from '../const/ui';
5
5
  import { TrashIcon, SearchIcon } from '../components/bs-icons';
6
- import { FieldIcon } from '../components/field-icon';
6
+ import { Popover, PopoverTrigger, PopoverContent } from './ui/popover';
7
+ import { usePortalContainer } from '../hooks/use-portal-container';
7
8
 
8
9
  const PlusIcon = () => (
9
10
  <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
@@ -23,77 +24,113 @@ const ExpandArrowIcon = ({ className }: { className?: string }) => (
23
24
  </svg>
24
25
  );
25
26
 
26
- export interface OutputFieldOption {
27
+ interface OutputFieldOption {
27
28
  fieldName: string;
28
29
  fieldDesc: string;
29
- type: FieldType;
30
+ type: FieldType | '';
30
31
  children?: OutputFieldOption[];
31
32
  }
32
33
 
33
- type DropdownTarget = { index: number; field: 'name' | 'type' } | null;
34
+ type DropdownTarget = { index: number; field: 'source' | 'target' } | null;
34
35
 
35
36
  export interface OutputConfigEditorProps {
36
- value: OutputParam[];
37
- onChange?: (value: OutputParam[]) => void;
38
- availableFields?: OutputFieldOption[];
37
+ value: Array<IAgentHelperOutputConfig>;
38
+ onChange?: (value: Array<IAgentHelperOutputConfig>) => void;
39
+
40
+ sourceFields?: OutputParam[];
41
+ targetFields?: IField[];
39
42
  className?: string;
40
43
  }
41
44
 
42
- export function OutputConfigEditor({ value, onChange, availableFields, className }: OutputConfigEditorProps) {
45
+ function outputParamsToOptions(params: OutputParam[]): OutputFieldOption[] {
46
+ return params.map(p => ({
47
+ fieldName: p.name,
48
+ fieldDesc: p.description || p.name,
49
+ type: p.type,
50
+ children: p.subformParams?.map(s => ({
51
+ fieldName: s.name,
52
+ fieldDesc: s.name,
53
+ type: s.type,
54
+ })),
55
+ }));
56
+ }
57
+
58
+ function fieldsToOptions(fields: IField[]): OutputFieldOption[] {
59
+ return fields.map(f => {
60
+ const subformItems = f.widget.items?.filter(
61
+ (item): item is ISubformField => 'widget' in item
62
+ );
63
+ return {
64
+ fieldName: f.widget.widgetName,
65
+ fieldDesc: f.label,
66
+ type: f.widget.type,
67
+ children: subformItems?.length ? subformItems.map(s => ({
68
+ fieldName: s.widget.widgetName,
69
+ fieldDesc: s.label,
70
+ type: s.widget.type,
71
+ })) : undefined,
72
+ };
73
+ });
74
+ }
75
+
76
+ function flattenSourceFields(fields: OutputFieldOption[]): OutputFieldOption[] {
77
+ const result: OutputFieldOption[] = [];
78
+ for (const field of fields) {
79
+ result.push(field);
80
+ if (field.children) {
81
+ for (const child of field.children) {
82
+ result.push({
83
+ ...child,
84
+ fieldName: `${field.fieldName}.${child.fieldName}`,
85
+ fieldDesc: `${field.fieldDesc}.${child.fieldDesc}`,
86
+ });
87
+ }
88
+ }
89
+ }
90
+ return result;
91
+ }
92
+
93
+ export function OutputConfigEditor({ value, onChange, sourceFields, targetFields, className }: OutputConfigEditorProps) {
43
94
  const [dropdownTarget, setDropdownTarget] = useState<DropdownTarget>(null);
44
95
  const [searchText, setSearchText] = useState('');
45
96
  const [collapsedParents, setCollapsedParents] = useState<Set<string>>(new Set());
46
- const dropdownRef = useRef<HTMLDivElement>(null);
47
- const searchInputRef = useRef<HTMLInputElement>(null);
48
-
49
- useEffect(() => {
50
- if (!dropdownTarget) return;
51
- const handleClickOutside = (e: MouseEvent) => {
52
- if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node)) {
53
- setDropdownTarget(null);
54
- setSearchText('');
55
- setCollapsedParents(new Set());
56
- }
57
- };
58
- document.addEventListener('mousedown', handleClickOutside);
59
- return () => document.removeEventListener('mousedown', handleClickOutside);
60
- }, [dropdownTarget]);
61
97
 
62
- useEffect(() => {
63
- if (dropdownTarget && searchInputRef.current) {
64
- setTimeout(() => searchInputRef.current?.focus(), 0);
98
+ const { portalContainer, setTriggerRef } = usePortalContainer('data-bs-output-config-portal');
99
+
100
+ const sourceOptions = sourceFields ? outputParamsToOptions(sourceFields) : [];
101
+ const targetOptions = targetFields ? fieldsToOptions(targetFields) : [];
102
+
103
+ const handleDropdownOpenChange = useCallback((index: number, field: 'source' | 'target', open: boolean) => {
104
+ if (open) {
105
+ setDropdownTarget({ index, field });
106
+ setSearchText('');
107
+ setCollapsedParents(new Set());
108
+ } else {
109
+ setDropdownTarget(null);
110
+ setSearchText('');
111
+ setCollapsedParents(new Set());
65
112
  }
66
- }, [dropdownTarget]);
113
+ }, []);
67
114
 
68
115
  const handleAdd = useCallback(() => {
69
- onChange?.([...value, { name: '', type: '', description: '' }]);
116
+ onChange?.([...value, { sourceField: { fieldName: '', fieldDesc: '' }, targetField: { fieldName: '', fieldDesc: '' } }]);
70
117
  }, [value, onChange]);
71
118
 
72
119
  const handleDelete = useCallback((index: number) => {
73
120
  onChange?.(value.filter((_, i) => i !== index));
74
121
  }, [value, onChange]);
75
122
 
76
- const handleOpenDropdown = useCallback((index: number, field: 'name' | 'type') => {
77
- setDropdownTarget({ index, field });
78
- setSearchText('');
79
- setCollapsedParents(new Set());
80
- }, []);
81
-
82
- const handleSelectField = useCallback((index: number, field: OutputFieldOption) => {
123
+ const handleSelectSourceField = useCallback((index: number, field: OutputFieldOption) => {
83
124
  const newValue = [...value];
84
- newValue[index] = { ...newValue[index], name: field.fieldDesc };
125
+ newValue[index] = { ...newValue[index], sourceField: { fieldName: field.fieldName, fieldDesc: field.fieldDesc } };
85
126
  onChange?.(newValue);
86
127
  setDropdownTarget(null);
87
128
  setSearchText('');
88
129
  }, [value, onChange]);
89
130
 
90
- const handleSelectType = useCallback((index: number, type: FieldType | '') => {
131
+ const handleSelectTargetField = useCallback((index: number, field: OutputFieldOption) => {
91
132
  const newValue = [...value];
92
- newValue[index] = {
93
- ...newValue[index],
94
- type,
95
- subformParams: type === 'subform' ? (newValue[index].subformParams || []) : undefined,
96
- };
133
+ newValue[index] = { ...newValue[index], targetField: { fieldName: field.fieldName, fieldDesc: field.fieldDesc } };
97
134
  onChange?.(newValue);
98
135
  setDropdownTarget(null);
99
136
  setSearchText('');
@@ -114,10 +151,6 @@ export function OutputConfigEditor({ value, onChange, availableFields, className
114
151
  const matchSearch = (text: string) =>
115
152
  !searchText || text?.toLowerCase().includes(searchText.toLowerCase());
116
153
 
117
- const filteredTypes = Object.entries(FieldTypeNameMap).filter(([, name]) =>
118
- matchSearch(name),
119
- );
120
-
121
154
  const filterFields = (fields: OutputFieldOption[]): OutputFieldOption[] =>
122
155
  fields.reduce<OutputFieldOption[]>((acc, f) => {
123
156
  const selfMatches = matchSearch(f.fieldDesc) || matchSearch(f.fieldName);
@@ -128,7 +161,12 @@ export function OutputConfigEditor({ value, onChange, availableFields, className
128
161
  return acc;
129
162
  }, []);
130
163
 
131
- const filteredFields = availableFields ? filterFields(availableFields) : [];
164
+ const flatSourceFields = flattenSourceFields(sourceOptions);
165
+ const filteredSourceFields = flatSourceFields.filter(
166
+ f => matchSearch(f.fieldDesc) || matchSearch(f.fieldName)
167
+ );
168
+
169
+ const filteredTargetFields = filterFields(targetOptions);
132
170
 
133
171
  const fieldRowCls = cn(
134
172
  'bg-white border border-[#e0e0e0] rounded-[4px] h-[34px] px-[10px] py-[7px]',
@@ -138,7 +176,7 @@ export function OutputConfigEditor({ value, onChange, availableFields, className
138
176
  transCls,
139
177
  );
140
178
 
141
- const isDropdownOpen = (index: number, field: 'name' | 'type') =>
179
+ const isDropdownOpen = (index: number, field: 'source' | 'target') =>
142
180
  dropdownTarget?.index === index && dropdownTarget?.field === field;
143
181
 
144
182
  if (value.length === 0) {
@@ -163,219 +201,199 @@ export function OutputConfigEditor({ value, onChange, availableFields, className
163
201
  }
164
202
 
165
203
  return (
166
- <div className={cn(
204
+ <div ref={setTriggerRef} className={cn(
167
205
  'bg-[#f5f5f5] border border-[#e0e0e0] border-dashed rounded-[4px] p-[10px]',
168
206
  'flex flex-col gap-[10px]',
169
207
  className,
170
208
  )}>
171
- {value.map((param, index) => (
209
+ {value.map((item, index) => (
172
210
  <div key={index} className="flex gap-[10px] items-center">
173
- {/* Name selector */}
174
- <div className="relative flex-1 min-w-0">
175
- <button
176
- type="button"
177
- onClick={() => handleOpenDropdown(index, 'name')}
178
- className={cn(
179
- fieldRowCls,
180
- 'w-full justify-between cursor-pointer',
181
- isDropdownOpen(index, 'name') ? 'border-[#0265ff]' : 'border-[#e0e0e0]',
182
- )}
183
- >
184
- <span className="text-[14px] text-[#030303] leading-normal truncate">
185
- {param.name || <span className="text-[#999]">请选择字段</span>}
186
- </span>
187
- <CaretIcon className={cn(
188
- 'shrink-0 text-[#666]',
189
- isDropdownOpen(index, 'name') && 'rotate-180',
190
- transCls,
191
- )} />
192
- </button>
193
-
194
- {isDropdownOpen(index, 'name') && (
195
- <div
196
- ref={dropdownRef}
211
+ {/* Source field selector (JSON output field) */}
212
+ <Popover open={isDropdownOpen(index, 'source')} onOpenChange={(open) => handleDropdownOpenChange(index, 'source', open)}>
213
+ <PopoverTrigger asChild>
214
+ <button
215
+ type="button"
197
216
  className={cn(
198
- 'absolute top-[38px] left-0 z-10 w-[216px]',
199
- 'bg-white rounded-[4px] p-[4px]',
200
- 'shadow-[0px_0px_16px_0px_rgba(0,0,0,0.1)]',
217
+ fieldRowCls,
218
+ 'w-full justify-between cursor-pointer',
219
+ isDropdownOpen(index, 'source') ? 'border-[#0265ff]' : 'border-[#e0e0e0]',
201
220
  )}
202
221
  >
203
- <div className="relative flex items-center border border-[#e0e0e0] rounded-[4px] mb-[4px]">
204
- <span className="absolute left-[10px] top-1/2 -translate-y-1/2">
205
- <SearchIcon />
206
- </span>
207
- <input
208
- ref={searchInputRef}
209
- type="text"
210
- value={searchText}
211
- onChange={e => setSearchText(e.target.value)}
212
- placeholder="搜索"
222
+ <span className="text-[14px] text-[#030303] leading-normal truncate">
223
+ {item.sourceField.fieldDesc || <span className="text-[#999]">请选择字段</span>}
224
+ </span>
225
+ <CaretIcon className={cn(
226
+ 'shrink-0 text-[#666]',
227
+ isDropdownOpen(index, 'source') && 'rotate-180',
228
+ transCls,
229
+ )} />
230
+ </button>
231
+ </PopoverTrigger>
232
+ <PopoverContent
233
+ align="start"
234
+ sideOffset={4}
235
+ portalContainer={portalContainer}
236
+ className="w-[216px] rounded-[4px] p-[4px] shadow-[0px_0px_16px_0px_rgba(0,0,0,0.1)]"
237
+ >
238
+ <div className="relative flex items-center border border-[#e0e0e0] rounded-[4px] mb-[4px]">
239
+ <span className="absolute left-[10px] top-1/2 -translate-y-1/2">
240
+ <SearchIcon />
241
+ </span>
242
+ <input
243
+ type="text"
244
+ value={searchText}
245
+ onChange={e => setSearchText(e.target.value)}
246
+ placeholder="搜索"
247
+ className={cn(
248
+ 'w-full h-[34px] pl-[32px] pr-[10px]',
249
+ 'text-[14px] text-[#030303] leading-normal outline-none',
250
+ 'bg-transparent border-0 rounded-[4px]',
251
+ 'placeholder:text-[#999]',
252
+ )}
253
+ />
254
+ </div>
255
+ <div className="max-h-[210px] overflow-auto">
256
+ {filteredSourceFields.map((field) => (
257
+ <button
258
+ key={field.fieldName}
259
+ type="button"
260
+ onClick={() => handleSelectSourceField(index, field)}
213
261
  className={cn(
214
- 'w-full h-[34px] pl-[32px] pr-[10px]',
215
- 'text-[14px] text-[#030303] leading-normal outline-none',
216
- 'bg-transparent border-0 rounded-[4px]',
217
- 'placeholder:text-[#999]',
262
+ 'flex items-center w-full px-[10px] py-[7px] h-[34px] rounded-[4px]',
263
+ 'text-[14px] text-[#030303] leading-normal',
264
+ 'hover:bg-[#EFF0F6] bg-transparent border-0 cursor-pointer',
265
+ item.sourceField.fieldDesc === field.fieldDesc && 'bg-[#EFF0F6] text-[#0265ff]',
266
+ transCls,
218
267
  )}
219
- />
220
- </div>
221
- <div className="max-h-[210px] overflow-auto">
222
- {filteredFields.map((field) => {
223
- const isParent = field.children && field.children.length > 0;
224
- const isCollapsed = collapsedParents.has(field.fieldName);
225
-
226
- return (
227
- <div key={field.fieldName}>
228
- {isParent ? (
229
- <button
230
- type="button"
231
- onClick={() => toggleParent(field.fieldName)}
232
- className={cn(
233
- 'flex items-center gap-[6px] w-full px-[10px] py-[7px] h-[34px] rounded-[4px]',
234
- 'text-[14px] text-[#030303] leading-normal',
235
- 'hover:bg-[#EFF0F6] bg-transparent border-0 cursor-pointer',
236
- transCls,
237
- )}
238
- >
239
- <ExpandArrowIcon className={cn(
240
- 'shrink-0 text-[#999]',
241
- !isCollapsed && 'rotate-90',
242
- transCls,
243
- )} />
244
- <span className="truncate">{field.fieldDesc}</span>
245
- </button>
246
- ) : (
247
- <button
248
- type="button"
249
- onClick={() => handleSelectField(index, field)}
250
- className={cn(
251
- 'flex items-center w-full px-[10px] py-[7px] h-[34px] rounded-[4px]',
252
- 'text-[14px] text-[#030303] leading-normal',
253
- 'hover:bg-[#EFF0F6] bg-transparent border-0 cursor-pointer',
254
- param.name === field.fieldDesc && 'bg-[#EFF0F6] text-[#0265ff]',
255
- transCls,
256
- )}
257
- >
258
- <span className="truncate">{field.fieldDesc}</span>
259
- </button>
260
- )}
261
- {isParent && !isCollapsed && field.children!.map((child) => (
262
- <button
263
- key={child.fieldName}
264
- type="button"
265
- onClick={() => handleSelectField(index, child)}
266
- className={cn(
267
- 'flex items-center w-full pl-[34px] pr-[10px] py-[7px] h-[34px] rounded-[4px]',
268
- 'text-[14px] text-[#030303] leading-normal',
269
- 'hover:bg-[#EFF0F6] bg-transparent border-0 cursor-pointer',
270
- param.name === child.fieldDesc && 'bg-[#EFF0F6] text-[#0265ff]',
271
- transCls,
272
- )}
273
- >
274
- <span className="truncate">{child.fieldDesc}</span>
275
- </button>
276
- ))}
277
- </div>
278
- );
279
- })}
280
- {filteredFields.length === 0 && (
281
- <div className="px-[10px] py-[7px] text-[14px] text-[#999] leading-normal">
282
- 无匹配结果
283
- </div>
284
- )}
285
- </div>
268
+ >
269
+ <span className="truncate">{field.fieldDesc}</span>
270
+ </button>
271
+ ))}
272
+ {filteredSourceFields.length === 0 && (
273
+ <div className="px-[10px] py-[7px] text-[14px] text-[#999] leading-normal">
274
+ 无匹配结果
275
+ </div>
276
+ )}
286
277
  </div>
287
- )}
288
- </div>
278
+ </PopoverContent>
279
+ </Popover>
289
280
 
290
281
  {/* "设置为" label */}
291
282
  <div className="bg-[#d9d9d9] rounded-[4px] h-[34px] w-[98px] shrink-0 flex items-center justify-center">
292
283
  <span className="text-[14px] text-[#030303] leading-normal whitespace-nowrap">设置为</span>
293
284
  </div>
294
285
 
295
- {/* Type selector */}
296
- <div className="relative flex-1 min-w-0">
297
- <button
298
- type="button"
299
- onClick={() => handleOpenDropdown(index, 'type')}
300
- className={cn(
301
- fieldRowCls,
302
- 'w-full justify-between cursor-pointer',
303
- isDropdownOpen(index, 'type') ? 'border-[#0265ff]' : 'border-[#e0e0e0]',
304
- )}
305
- >
306
- <span className="flex items-center gap-[6px] min-w-0">
307
- {param.type ? (
308
- <>
309
- <FieldIcon type={param.type} />
310
- <span className="text-[14px] text-[#030303] leading-normal truncate">
311
- {FieldTypeNameMap[param.type]}
312
- </span>
313
- </>
314
- ) : (
315
- <span className="text-[14px] text-[#999] leading-normal">请选择</span>
316
- )}
317
- </span>
318
- <CaretIcon className={cn(
319
- 'shrink-0 text-[#666]',
320
- isDropdownOpen(index, 'type') && 'rotate-180',
321
- transCls,
322
- )} />
323
- </button>
324
-
325
- {isDropdownOpen(index, 'type') && (
326
- <div
327
- ref={dropdownRef}
286
+ {/* Target field selector (Form field) */}
287
+ <Popover open={isDropdownOpen(index, 'target')} onOpenChange={(open) => handleDropdownOpenChange(index, 'target', open)}>
288
+ <PopoverTrigger asChild>
289
+ <button
290
+ type="button"
328
291
  className={cn(
329
- 'absolute top-[38px] left-0 z-10 w-[216px]',
330
- 'bg-white rounded-[4px] p-[4px]',
331
- 'shadow-[0px_0px_16px_0px_rgba(0,0,0,0.1)]',
292
+ fieldRowCls,
293
+ 'w-full justify-between cursor-pointer',
294
+ isDropdownOpen(index, 'target') ? 'border-[#0265ff]' : 'border-[#e0e0e0]',
332
295
  )}
333
296
  >
334
- <div className="relative flex items-center border border-[#e0e0e0] rounded-[4px] mb-[4px]">
335
- <span className="absolute left-[10px] top-1/2 -translate-y-1/2">
336
- <SearchIcon />
337
- </span>
338
- <input
339
- ref={searchInputRef}
340
- type="text"
341
- value={searchText}
342
- onChange={e => setSearchText(e.target.value)}
343
- placeholder="搜索"
344
- className={cn(
345
- 'w-full h-[34px] pl-[32px] pr-[10px]',
346
- 'text-[14px] text-[#030303] leading-normal outline-none',
347
- 'bg-transparent border-0 rounded-[4px]',
348
- 'placeholder:text-[#999]',
349
- )}
350
- />
351
- </div>
352
- <div className="max-h-[210px] overflow-auto">
353
- {filteredTypes.map(([type, name]) => (
354
- <button
355
- key={type}
356
- type="button"
357
- onClick={() => handleSelectType(index, type as FieldType)}
358
- className={cn(
359
- 'flex items-center gap-[6px] w-full px-[10px] py-[7px] h-[34px] rounded-[4px]',
360
- 'text-[14px] text-[#030303] leading-normal',
361
- 'hover:bg-[#EFF0F6] bg-transparent border-0 cursor-pointer',
362
- param.type === type && 'bg-[#EFF0F6] text-[#0265ff]',
363
- transCls,
297
+ <span className="text-[14px] text-[#030303] leading-normal truncate">
298
+ {item.targetField.fieldDesc || <span className="text-[#999]">请选择表单字段</span>}
299
+ </span>
300
+ <CaretIcon className={cn(
301
+ 'shrink-0 text-[#666]',
302
+ isDropdownOpen(index, 'target') && 'rotate-180',
303
+ transCls,
304
+ )} />
305
+ </button>
306
+ </PopoverTrigger>
307
+ <PopoverContent
308
+ align="start"
309
+ sideOffset={4}
310
+ portalContainer={portalContainer}
311
+ className="w-[216px] rounded-[4px] p-[4px] shadow-[0px_0px_16px_0px_rgba(0,0,0,0.1)]"
312
+ >
313
+ <div className="relative flex items-center border border-[#e0e0e0] rounded-[4px] mb-[4px]">
314
+ <span className="absolute left-[10px] top-1/2 -translate-y-1/2">
315
+ <SearchIcon />
316
+ </span>
317
+ <input
318
+ type="text"
319
+ value={searchText}
320
+ onChange={e => setSearchText(e.target.value)}
321
+ placeholder="搜索"
322
+ className={cn(
323
+ 'w-full h-[34px] pl-[32px] pr-[10px]',
324
+ 'text-[14px] text-[#030303] leading-normal outline-none',
325
+ 'bg-transparent border-0 rounded-[4px]',
326
+ 'placeholder:text-[#999]',
327
+ )}
328
+ />
329
+ </div>
330
+ <div className="max-h-[210px] overflow-auto">
331
+ {filteredTargetFields.map((field) => {
332
+ const isParent = field.children && field.children.length > 0;
333
+ const isCollapsed = collapsedParents.has(field.fieldName);
334
+
335
+ return (
336
+ <div key={field.fieldName}>
337
+ {isParent ? (
338
+ <button
339
+ type="button"
340
+ onClick={() => toggleParent(field.fieldName)}
341
+ className={cn(
342
+ 'flex items-center gap-[6px] w-full px-[10px] py-[7px] h-[34px] rounded-[4px]',
343
+ 'text-[14px] text-[#030303] leading-normal',
344
+ 'hover:bg-[#EFF0F6] bg-transparent border-0 cursor-pointer',
345
+ transCls,
346
+ )}
347
+ >
348
+ <ExpandArrowIcon className={cn(
349
+ 'shrink-0 text-[#999]',
350
+ !isCollapsed && 'rotate-90',
351
+ transCls,
352
+ )} />
353
+ <span className="truncate">{field.fieldDesc}</span>
354
+ </button>
355
+ ) : (
356
+ <button
357
+ type="button"
358
+ onClick={() => handleSelectTargetField(index, field)}
359
+ className={cn(
360
+ 'flex items-center w-full px-[10px] py-[7px] h-[34px] rounded-[4px]',
361
+ 'text-[14px] text-[#030303] leading-normal',
362
+ 'hover:bg-[#EFF0F6] bg-transparent border-0 cursor-pointer',
363
+ item.targetField.fieldDesc === field.fieldDesc && 'bg-[#EFF0F6] text-[#0265ff]',
364
+ transCls,
365
+ )}
366
+ >
367
+ <span className="truncate">{field.fieldDesc}</span>
368
+ </button>
364
369
  )}
365
- >
366
- <FieldIcon type={type as FieldType} />
367
- <span className="truncate">{name}</span>
368
- </button>
369
- ))}
370
- {filteredTypes.length === 0 && (
371
- <div className="px-[10px] py-[7px] text-[14px] text-[#999] leading-normal">
372
- 无匹配结果
370
+ {isParent && !isCollapsed && field.children!.map((child) => (
371
+ <button
372
+ key={child.fieldName}
373
+ type="button"
374
+ onClick={() => handleSelectTargetField(index, child)}
375
+ className={cn(
376
+ 'flex items-center w-full pl-[34px] pr-[10px] py-[7px] h-[34px] rounded-[4px]',
377
+ 'text-[14px] text-[#030303] leading-normal',
378
+ 'hover:bg-[#EFF0F6] bg-transparent border-0 cursor-pointer',
379
+ item.targetField.fieldDesc === child.fieldDesc && 'bg-[#EFF0F6] text-[#0265ff]',
380
+ transCls,
381
+ )}
382
+ >
383
+ <span className="truncate">{child.fieldDesc}</span>
384
+ </button>
385
+ ))}
373
386
  </div>
374
- )}
375
- </div>
387
+ );
388
+ })}
389
+ {filteredTargetFields.length === 0 && (
390
+ <div className="px-[10px] py-[7px] text-[14px] text-[#999] leading-normal">
391
+ 无匹配结果
392
+ </div>
393
+ )}
376
394
  </div>
377
- )}
378
- </div>
395
+ </PopoverContent>
396
+ </Popover>
379
397
 
380
398
  {/* Delete button */}
381
399
  <button
@@ -1,8 +1,6 @@
1
1
  import { memo, useCallback, useEffect, useState } from 'react';
2
- import { FieldType, ValueOf } from '@baishuyun/types';
2
+ import { FieldType, IField } from '@baishuyun/types';
3
3
  import { FieldTypeNameMap } from '../const/ui';
4
- import { ToolUIPart } from 'ai';
5
- import { FieldsTools } from '@baishuyun/agents';
6
4
  import { toHumanReadable } from '../lib/utils';
7
5
  import { Collapsible, CollapsibleContent } from './collapsible';
8
6
  import LineChecker from './line-checker';
@@ -47,11 +45,11 @@ const SubFieldChecker = memo(
47
45
  }: {
48
46
  onCheckedChange: (
49
47
  checked: boolean,
50
- field: ValueOf<Pick<ToolUIPart<FieldsTools>, 'output'>>
48
+ field: IField,
51
49
  ) => void;
52
50
  readonly?: boolean;
53
51
  streaming?: boolean;
54
- field: ValueOf<Pick<ToolUIPart<FieldsTools>, 'output'>>;
52
+ field: IField;
55
53
  }) => {
56
54
  const { widget, label } = field;
57
55
  if (!widget) {
@@ -100,12 +98,12 @@ const SubFieldChecker = memo(
100
98
  }
101
99
  );
102
100
 
103
- type F = ValueOf<Pick<ToolUIPart<FieldsTools>, 'output'>>;
101
+ type F = IField;
104
102
 
105
103
  interface generatedField {
106
104
  label: string;
107
105
  fieldName: string;
108
- fieldType: string;
106
+ fieldType: FieldType;
109
107
  value: any;
110
108
  }
111
109
 
@@ -127,15 +125,16 @@ export const SubformFieldsValueChecker = ({
127
125
  readonly,
128
126
  }: {
129
127
  onChange: (p: onSubformFieldChangeParam) => void;
130
- subformField: ValueOf<Pick<ToolUIPart<FieldsTools>, 'output'>>;
128
+ subformField: IField;
131
129
  streaming?: boolean;
132
130
  readonly?: boolean;
133
131
  }) => {
134
- if (!subformField.widget.value || !subformField.widget.value.length) {
132
+ const subformValue = subformField.widget?.value;
133
+ if (!Array.isArray(subformValue) || subformValue.length === 0) {
135
134
  return null;
136
135
  }
137
136
 
138
- const subformRecords = subformField.widget.value;
137
+ const subformRecords = subformValue as generatedField[][];
139
138
 
140
139
  // 默认展开
141
140
  const [openAll, setOpenAll] = useState(true);
@@ -169,7 +168,7 @@ export const SubformFieldsValueChecker = ({
169
168
  field,
170
169
  row,
171
170
  col,
172
- parentFieldName: subformField.widget.widgetName,
171
+ parentFieldName: subformField.widget?.widgetName ?? "",
173
172
  });
174
173
  }}
175
174
  />