@nocobase/plugin-ai 2.1.0-beta.15 → 2.1.0-beta.16

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 (303) hide show
  1. package/dist/ai/ai-employees/atlas/index.d.ts +10 -0
  2. package/dist/{server/ai-employees/built-in/ai-coding/prompt.js → ai/ai-employees/atlas/index.js} +29 -20
  3. package/dist/ai/ai-employees/atlas/prompt.md +84 -0
  4. package/dist/ai/ai-employees/dara.d.ts +10 -0
  5. package/dist/{server/ai-employees/built-in/data-visualization/prompt.js → ai/ai-employees/dara.js} +21 -13
  6. package/dist/ai/ai-employees/dex.d.ts +10 -0
  7. package/dist/{server/ai-employees/built-in/data-organizer/prompt.js → ai/ai-employees/dex.js} +15 -7
  8. package/dist/ai/ai-employees/ellis.d.ts +10 -0
  9. package/dist/{server/ai-employees/built-in/email-assistant/prompt.js → ai/ai-employees/ellis.js} +19 -11
  10. package/dist/ai/ai-employees/lexi.d.ts +10 -0
  11. package/dist/{server/ai-employees/built-in/translator/prompt.js → ai/ai-employees/lexi.js} +15 -7
  12. package/dist/ai/ai-employees/vera.d.ts +10 -0
  13. package/dist/{server/ai-employees/built-in/research-analyst/prompt.js → ai/ai-employees/vera.js} +16 -8
  14. package/dist/ai/ai-employees/viz.d.ts +10 -0
  15. package/dist/{server/ai-employees/built-in/insights-analyst/prompt.js → ai/ai-employees/viz.js} +15 -7
  16. package/dist/ai/skills/business-analysis-report/SKILLS.md +88 -0
  17. package/dist/{server/ai-employees/built-in/ai-coding/prompt.d.ts → ai/skills/business-analysis-report/tools/businessReportGenerator.d.ts} +1 -3
  18. package/dist/ai/skills/business-analysis-report/tools/businessReportGenerator.js +98 -0
  19. package/dist/ai/skills/document-search/SKILLS.md +69 -0
  20. package/dist/ai/tools/chartGenerator.js +15 -3
  21. package/dist/ai/tools/formFiller.js +13 -2
  22. package/dist/{server/ai-employees/built-in/data-modeling/prompt.d.ts → ai/tools/getSkill.d.ts} +1 -3
  23. package/dist/{server/ai-employees/built-in/data-modeling/index.js → ai/tools/getSkill.js} +39 -32
  24. package/dist/{server/ai-employees/built-in/data-organizer/prompt.d.ts → ai/tools/knowledge-base-retrieve.d.ts} +1 -3
  25. package/dist/ai/tools/knowledge-base-retrieve.js +94 -0
  26. package/dist/{server/ai-employees/built-in/data-visualization/prompt.d.ts → ai/tools/sub-agents/dispatch-sub-agent-task.d.ts} +1 -3
  27. package/dist/ai/tools/sub-agents/dispatch-sub-agent-task.js +108 -0
  28. package/dist/ai/tools/sub-agents/get-ai-employee.d.ts +10 -0
  29. package/dist/{server/ai-employees/built-in/translator/profile.js → ai/tools/sub-agents/get-ai-employee.js} +28 -21
  30. package/dist/ai/tools/sub-agents/list-ai-employees.d.ts +10 -0
  31. package/dist/{server/ai-employees/built-in/email-assistant/profile.js → ai/tools/sub-agents/list-ai-employees.js} +25 -21
  32. package/dist/ai/tools/sub-agents/shared.d.ts +33 -0
  33. package/dist/ai/tools/sub-agents/shared.js +169 -0
  34. package/dist/ai/tools/suggestions.js +15 -4
  35. package/dist/client/170.d98eacdc00d9d527.js +10 -0
  36. package/dist/client/228.b18148eb1009d2fb.js +10 -0
  37. package/dist/client/280.029428b83d62155f.js +10 -0
  38. package/dist/client/290.0888139e33c9b7cb.js +10 -0
  39. package/dist/client/{524.954f96ec4fc2fd7a.js → 331.d547c95410476a69.js} +1 -1
  40. package/dist/client/343.83f7d96664e4e038.js +10 -0
  41. package/dist/client/406.15c09d98faa2ccf1.js +10 -0
  42. package/dist/client/428.e9f38da3b0d8b498.js +10 -0
  43. package/dist/client/486.77c26e2e7f8daf28.js +10 -0
  44. package/dist/client/502.2b4a51e0a8122e52.js +10 -0
  45. package/dist/client/525.33a9c8ec28be4ec4.js +10 -0
  46. package/dist/client/559.133d286a0a0a1d93.js +10 -0
  47. package/dist/client/{91.90e7098b7fbd5d00.js → 561.776886c5308e3c26.js} +1 -1
  48. package/dist/client/580.e75f97fb883ad042.js +10 -0
  49. package/dist/client/597.aa363881a325b5c0.js +10 -0
  50. package/dist/client/604.de96f3ec4d471afd.js +10 -0
  51. package/dist/client/614.aa766080f6b99aab.js +10 -0
  52. package/dist/client/646.ef9d7c2ea8641044.js +10 -0
  53. package/dist/client/687.224e569a99cae4bb.js +10 -0
  54. package/dist/client/699.57c0a1acb723202a.js +10 -0
  55. package/dist/client/711.266b8f1c520d467a.js +10 -0
  56. package/dist/client/758.a9741e81911e53c3.js +10 -0
  57. package/dist/client/768.973ce32e15099a48.js +10 -0
  58. package/dist/client/792.ae8ad1fcae9fd974.js +10 -0
  59. package/dist/client/820.6a26239ea96c075a.js +10 -0
  60. package/dist/client/832.0cf69e3f43c320b2.js +10 -0
  61. package/dist/client/927.ff5cd05b14901ae6.js +10 -0
  62. package/dist/client/ai-employees/admin/SkillSettings.d.ts +7 -5
  63. package/dist/client/ai-employees/admin/ToolsSettings.d.ts +17 -0
  64. package/dist/client/ai-employees/admin/mcp/MCPSettings.d.ts +10 -0
  65. package/dist/client/ai-employees/admin/mcp/MCPToolsList.d.ts +19 -0
  66. package/dist/client/ai-employees/admin/mcp/context.d.ts +15 -0
  67. package/dist/client/ai-employees/admin/mcp/schemas.d.ts +1286 -0
  68. package/dist/client/ai-employees/built-in/utils.d.ts +1 -0
  69. package/dist/client/ai-employees/business-report/tools/index.d.ts +10 -0
  70. package/dist/client/ai-employees/business-report/ui/BusinessReportCard.d.ts +12 -0
  71. package/dist/client/ai-employees/business-report/ui/BusinessReportModal.d.ts +17 -0
  72. package/dist/client/ai-employees/business-report/ui/report-utils.d.ts +38 -0
  73. package/dist/client/ai-employees/chatbox/AIEmployeeSwitch.d.ts +3 -2
  74. package/dist/client/ai-employees/chatbox/HintMessageHeader.d.ts +10 -0
  75. package/dist/client/ai-employees/chatbox/ModelSwitcher.d.ts +3 -1
  76. package/dist/client/ai-employees/chatbox/SearchSwitch.d.ts +3 -1
  77. package/dist/client/ai-employees/chatbox/Upload.d.ts +3 -1
  78. package/dist/client/ai-employees/chatbox/conversations/ConversationsList.d.ts +27 -0
  79. package/dist/client/ai-employees/chatbox/conversations/WorkflowTasksList.d.ts +31 -0
  80. package/dist/client/ai-employees/chatbox/conversations/common.d.ts +43 -0
  81. package/dist/client/ai-employees/chatbox/conversations/index.d.ts +9 -0
  82. package/dist/client/ai-employees/chatbox/hooks/useChatBoxActions.d.ts +5 -3
  83. package/dist/client/ai-employees/chatbox/hooks/useWorkflowTasks.d.ts +24 -0
  84. package/dist/client/ai-employees/chatbox/markdown/ECharts.d.ts +1 -2
  85. package/dist/client/ai-employees/chatbox/markdown/Markdown.d.ts +1 -1
  86. package/dist/client/ai-employees/chatbox/roles.d.ts +1 -0
  87. package/dist/client/ai-employees/chatbox/stores/chat-box.d.ts +8 -0
  88. package/dist/client/ai-employees/chatbox/stores/chat-conversations.d.ts +4 -0
  89. package/dist/client/ai-employees/chatbox/stores/chat-messages.d.ts +8 -0
  90. package/dist/client/ai-employees/chatbox/stores/workflow-tasks.d.ts +41 -0
  91. package/dist/client/ai-employees/chatbox/utils.d.ts +17 -7
  92. package/dist/client/ai-employees/sub-agents/tools/index.d.ts +10 -0
  93. package/dist/client/ai-employees/sub-agents/ui/SubAgentDispatchCard.d.ts +21 -0
  94. package/dist/client/ai-employees/types.d.ts +24 -4
  95. package/dist/{server/ai-employees/built-in/ai-coding/document/example/js-filter → client/ai-employees/workflow-tasks/tools}/index.d.ts +2 -7
  96. package/dist/client/ai-employees/workflow-tasks/ui/WorkflowTaskOutputCard.d.ts +11 -0
  97. package/dist/client/components/ListCollapse.d.ts +28 -0
  98. package/dist/client/index.js +7 -7
  99. package/dist/client/manager/ai-manager.d.ts +4 -23
  100. package/dist/client/repositories/AIConfigRepository.d.ts +11 -3
  101. package/dist/client/workflow/nodes/employee/components/AIEmployeeSelect.d.ts +10 -0
  102. package/dist/client/workflow/nodes/employee/components/assigness.d.ts +11 -0
  103. package/dist/client/workflow/nodes/employee/components/file-inputs.d.ts +10 -0
  104. package/dist/client/workflow/nodes/employee/components/message-inputs.d.ts +12 -0
  105. package/dist/client/workflow/nodes/employee/components/model-options.d.ts +10 -0
  106. package/dist/client/workflow/nodes/employee/components/skill-settings.d.ts +10 -0
  107. package/dist/client/workflow/nodes/employee/components/structured-output.d.ts +10 -0
  108. package/dist/client/workflow/nodes/employee/components/users-select.d.ts +15 -0
  109. package/dist/client/workflow/nodes/employee/components/web-search-options.d.ts +10 -0
  110. package/dist/client/workflow/nodes/employee/configuration.d.ts +12 -0
  111. package/dist/client/workflow/nodes/employee/flow-models/feedback.d.ts +13 -0
  112. package/dist/client/workflow/nodes/employee/flow-models/task.d.ts +13 -0
  113. package/dist/client/workflow/nodes/employee/index.d.ts +7 -31
  114. package/dist/collections/ai-employees.js +2 -1
  115. package/dist/collections/ai-mcp-clients.d.ts +51 -0
  116. package/dist/collections/ai-mcp-clients.js +111 -0
  117. package/dist/externalVersion.js +17 -15
  118. package/dist/locale/en-US.json +136 -8
  119. package/dist/locale/zh-CN.json +138 -9
  120. package/dist/node_modules/fast-glob/out/index.js +8 -8
  121. package/dist/node_modules/fast-glob/package.json +1 -1
  122. package/dist/node_modules/flexsearch/dist/flexsearch.bundle.min.js +2 -2
  123. package/dist/node_modules/flexsearch/package.json +1 -1
  124. package/dist/node_modules/fs-extra/lib/index.js +1 -1
  125. package/dist/node_modules/fs-extra/package.json +1 -1
  126. package/dist/node_modules/nodejs-snowflake/nodejs_snowflake.js +1 -1
  127. package/dist/node_modules/nodejs-snowflake/package.json +1 -1
  128. package/dist/node_modules/openai/index.js +1 -1
  129. package/dist/node_modules/openai/package.json +1 -1
  130. package/dist/node_modules/zod/index.cjs +1 -1
  131. package/dist/node_modules/zod/package.json +1 -1
  132. package/dist/server/ai-employees/ai-conversations.d.ts +70 -0
  133. package/dist/server/ai-employees/ai-conversations.js +325 -0
  134. package/dist/server/ai-employees/ai-employee.d.ts +100 -19
  135. package/dist/server/ai-employees/ai-employee.js +484 -261
  136. package/dist/server/ai-employees/ai-knowledge-base.d.ts +28 -0
  137. package/dist/server/ai-employees/ai-knowledge-base.js +167 -0
  138. package/dist/server/ai-employees/middleware/conversation.d.ts +2 -0
  139. package/dist/server/ai-employees/middleware/conversation.js +38 -5
  140. package/dist/server/ai-employees/middleware/index.d.ts +2 -0
  141. package/dist/server/ai-employees/middleware/index.js +5 -1
  142. package/dist/server/ai-employees/middleware/skill-tools.d.ts +12 -0
  143. package/dist/server/ai-employees/middleware/skill-tools.js +88 -0
  144. package/dist/server/ai-employees/middleware/tools.js +37 -10
  145. package/dist/server/ai-employees/middleware/workflow-history.d.ts +22 -0
  146. package/dist/server/ai-employees/middleware/workflow-history.js +173 -0
  147. package/dist/server/ai-employees/prompts.d.ts +16 -1
  148. package/dist/server/ai-employees/prompts.js +37 -1
  149. package/dist/server/ai-employees/sub-agents/dispatcher.d.ts +36 -0
  150. package/dist/server/ai-employees/sub-agents/dispatcher.js +225 -0
  151. package/dist/server/ai-employees/sub-agents/index.d.ts +9 -0
  152. package/dist/server/{migrations/20250923221107-setup-build-in.js → ai-employees/sub-agents/index.js} +9 -13
  153. package/dist/server/ai-employees/templates/form-assistant.d.ts +2 -2
  154. package/dist/server/ai-employees/templates/form-assistant.js +2 -2
  155. package/dist/server/ai-employees/utils.js +2 -2
  156. package/dist/server/collections/ai-conversations.js +18 -0
  157. package/dist/server/{ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_contacts_en.d.ts → collections/ai-mcp-clients.d.ts} +1 -4
  158. package/dist/server/{ai-employees/built-in/nocobase-assistant/index.js → collections/ai-mcp-clients.js} +12 -13
  159. package/dist/server/{ai-employees/built-in/ai-coding/document/basic/flow-resource.d.ts → collections/ai-skills.d.ts} +1 -4
  160. package/dist/server/{ai-employees/built-in/email-assistant/index.js → collections/ai-skills.js} +46 -23
  161. package/dist/server/{ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_opportunities_en.d.ts → collections/ai-workflow-tasks.d.ts} +1 -4
  162. package/dist/server/collections/ai-workflow-tasks.js +112 -0
  163. package/dist/server/{ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_accounts_en.d.ts → collections/users-ai-workflow-tasks.d.ts} +1 -4
  164. package/dist/server/collections/users-ai-workflow-tasks.js +44 -0
  165. package/dist/server/llm-providers/anthropic.d.ts +1 -0
  166. package/dist/server/llm-providers/anthropic.js +2 -1
  167. package/dist/server/llm-providers/dashscope.d.ts +1 -0
  168. package/dist/server/llm-providers/deepseek.d.ts +1 -0
  169. package/dist/server/llm-providers/google-genai.d.ts +1 -0
  170. package/dist/server/llm-providers/google-genai.js +2 -1
  171. package/dist/server/llm-providers/kimi/provider.d.ts +1 -0
  172. package/dist/server/llm-providers/openai/responses.d.ts +1 -0
  173. package/dist/server/llm-providers/openai/responses.js +2 -1
  174. package/dist/server/llm-providers/provider.d.ts +1 -10
  175. package/dist/server/llm-providers/provider.js +3 -34
  176. package/dist/server/manager/ai-coding-manager.d.ts +1 -2
  177. package/dist/server/manager/ai-coding-manager.js +0 -41
  178. package/dist/server/manager/ai-context-datasource-manager.js +30 -1
  179. package/dist/server/manager/built-in-manager.d.ts +2 -4
  180. package/dist/server/manager/built-in-manager.js +8 -117
  181. package/dist/server/migrations/20260306000001-migrate-skill-settings-tools.js +68 -0
  182. package/dist/server/migrations/20260319000000-add-ai-conversations-from.d.ts +14 -0
  183. package/dist/server/migrations/20260319000000-add-ai-conversations-from.js +63 -0
  184. package/dist/server/plugin.d.ts +6 -1
  185. package/dist/server/plugin.js +31 -8
  186. package/dist/server/resource/aiConversations.js +112 -188
  187. package/dist/server/resource/aiEmployees.js +5 -7
  188. package/dist/server/resource/aiMcpClients.d.ts +11 -0
  189. package/dist/server/resource/aiMcpClients.js +78 -0
  190. package/dist/server/{ai-employees/built-in/ai-coding/document/example/js-column/index.d.ts → resource/aiSkills.d.ts} +3 -7
  191. package/dist/server/resource/aiSkills.js +71 -0
  192. package/dist/server/resource/aiTools.js +4 -6
  193. package/dist/server/resource/aiWorkflowTasks.d.ts +12 -0
  194. package/dist/server/resource/aiWorkflowTasks.js +290 -0
  195. package/dist/server/tools/docs.js +4 -3
  196. package/dist/server/tools/workflow-caller.js +1 -0
  197. package/dist/server/types/ai-chat-conversation.type.d.ts +8 -2
  198. package/dist/server/types/ai-message.type.d.ts +7 -0
  199. package/dist/server/utils.d.ts +3 -0
  200. package/dist/server/utils.js +28 -3
  201. package/dist/server/workflow/nodes/employee/files.d.ts +16 -0
  202. package/dist/server/workflow/nodes/employee/files.js +125 -0
  203. package/dist/server/workflow/nodes/employee/handler.d.ts +11 -0
  204. package/dist/server/workflow/nodes/employee/handler.js +107 -0
  205. package/dist/server/workflow/nodes/employee/index.d.ts +17 -0
  206. package/dist/server/workflow/nodes/employee/index.js +391 -0
  207. package/dist/server/workflow/nodes/employee/tools.d.ts +12 -0
  208. package/dist/server/workflow/nodes/employee/tools.js +133 -0
  209. package/dist/server/workflow/nodes/employee/types.d.ts +35 -0
  210. package/dist/server/workflow/nodes/employee/types.js +24 -0
  211. package/dist/server/workflow/utils.d.ts +14 -0
  212. package/dist/server/workflow/utils.js +111 -0
  213. package/package.json +4 -2
  214. package/dist/client/107.64d9efa24d6b9143.js +0 -10
  215. package/dist/client/124.768c8aa5d6e6b461.js +0 -10
  216. package/dist/client/159.d52107c7a34ce2da.js +0 -10
  217. package/dist/client/192.0419770b69678994.js +0 -10
  218. package/dist/client/204.91be8cfc54d91a59.js +0 -10
  219. package/dist/client/238.9f784a7cdb751999.js +0 -10
  220. package/dist/client/263.6e1dfb1cbb1964f5.js +0 -10
  221. package/dist/client/35.5ee7503d9c09daa8.js +0 -10
  222. package/dist/client/47.6bd245f2140efd24.js +0 -10
  223. package/dist/client/481.03b3d2306d409933.js +0 -10
  224. package/dist/client/586.6a1510cabaa84f23.js +0 -10
  225. package/dist/client/650.8871a07b31c307ea.js +0 -10
  226. package/dist/client/755.e295bbd2b2a1cc21.js +0 -10
  227. package/dist/client/772.d51f683c55e18dd4.js +0 -10
  228. package/dist/client/870.84187dcb8c89b4dc.js +0 -10
  229. package/dist/client/933.baab3aa75f30e020.js +0 -10
  230. package/dist/client/987.3aee964e7f406939.js +0 -10
  231. package/dist/server/ai-employees/built-in/ai-coding/document/basic/flow-resource.js +0 -256
  232. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-column/index.js +0 -48
  233. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_accounts_en.js +0 -452
  234. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_contacts_en.js +0 -363
  235. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_opportunities_en.js +0 -270
  236. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_quotations_en.d.ts +0 -13
  237. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_quotations_en.js +0 -219
  238. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_tickets_en.d.ts +0 -13
  239. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-column/js_columns_for_tickets_en.js +0 -409
  240. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/accounts_filter_ant_style.d.ts +0 -13
  241. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/accounts_filter_ant_style.js +0 -324
  242. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/contacts_filter_ant_style.d.ts +0 -13
  243. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/contacts_filter_ant_style.js +0 -309
  244. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/index.js +0 -50
  245. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/leads_filter_ant_style.d.ts +0 -13
  246. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/leads_filter_ant_style.js +0 -345
  247. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/opportunities_filter_ant_style.d.ts +0 -13
  248. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/opportunities_filter_ant_style.js +0 -381
  249. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/product_categories_ant_style.d.ts +0 -13
  250. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/product_categories_ant_style.js +0 -545
  251. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/tickets_filter_ant_style.d.ts +0 -13
  252. package/dist/server/ai-employees/built-in/ai-coding/document/example/js-filter/tickets_filter_ant_style.js +0 -346
  253. package/dist/server/ai-employees/built-in/ai-coding/document/js-action.d.ts +0 -13
  254. package/dist/server/ai-employees/built-in/ai-coding/document/js-action.js +0 -102
  255. package/dist/server/ai-employees/built-in/ai-coding/document/js-block.d.ts +0 -13
  256. package/dist/server/ai-employees/built-in/ai-coding/document/js-block.js +0 -314
  257. package/dist/server/ai-employees/built-in/ai-coding/document/js-column.d.ts +0 -13
  258. package/dist/server/ai-employees/built-in/ai-coding/document/js-column.js +0 -113
  259. package/dist/server/ai-employees/built-in/ai-coding/document/js-field.d.ts +0 -13
  260. package/dist/server/ai-employees/built-in/ai-coding/document/js-field.js +0 -498
  261. package/dist/server/ai-employees/built-in/ai-coding/document/js-item.d.ts +0 -13
  262. package/dist/server/ai-employees/built-in/ai-coding/document/js-item.js +0 -184
  263. package/dist/server/ai-employees/built-in/ai-coding/index.d.ts +0 -37
  264. package/dist/server/ai-employees/built-in/ai-coding/index.js +0 -99
  265. package/dist/server/ai-employees/built-in/ai-coding/profile.d.ts +0 -27
  266. package/dist/server/ai-employees/built-in/ai-coding/profile.js +0 -60
  267. package/dist/server/ai-employees/built-in/ai-coding/prompt_en.md +0 -110
  268. package/dist/server/ai-employees/built-in/data-modeling/index.d.ts +0 -37
  269. package/dist/server/ai-employees/built-in/data-modeling/profile.d.ts +0 -27
  270. package/dist/server/ai-employees/built-in/data-modeling/profile.js +0 -60
  271. package/dist/server/ai-employees/built-in/data-modeling/prompt.js +0 -283
  272. package/dist/server/ai-employees/built-in/data-organizer/index.d.ts +0 -37
  273. package/dist/server/ai-employees/built-in/data-organizer/index.js +0 -63
  274. package/dist/server/ai-employees/built-in/data-organizer/profile.d.ts +0 -27
  275. package/dist/server/ai-employees/built-in/data-organizer/profile.js +0 -60
  276. package/dist/server/ai-employees/built-in/data-visualization/index.d.ts +0 -37
  277. package/dist/server/ai-employees/built-in/data-visualization/index.js +0 -58
  278. package/dist/server/ai-employees/built-in/data-visualization/profile.d.ts +0 -27
  279. package/dist/server/ai-employees/built-in/data-visualization/profile.js +0 -60
  280. package/dist/server/ai-employees/built-in/email-assistant/index.d.ts +0 -34
  281. package/dist/server/ai-employees/built-in/email-assistant/profile.d.ts +0 -27
  282. package/dist/server/ai-employees/built-in/email-assistant/prompt.d.ts +0 -12
  283. package/dist/server/ai-employees/built-in/insights-analyst/index.d.ts +0 -37
  284. package/dist/server/ai-employees/built-in/insights-analyst/index.js +0 -63
  285. package/dist/server/ai-employees/built-in/insights-analyst/profile.d.ts +0 -27
  286. package/dist/server/ai-employees/built-in/insights-analyst/profile.js +0 -60
  287. package/dist/server/ai-employees/built-in/insights-analyst/prompt.d.ts +0 -12
  288. package/dist/server/ai-employees/built-in/nocobase-assistant/index.d.ts +0 -34
  289. package/dist/server/ai-employees/built-in/nocobase-assistant/profile.d.ts +0 -27
  290. package/dist/server/ai-employees/built-in/nocobase-assistant/profile.js +0 -60
  291. package/dist/server/ai-employees/built-in/nocobase-assistant/prompt.d.ts +0 -12
  292. package/dist/server/ai-employees/built-in/nocobase-assistant/prompt.js +0 -52
  293. package/dist/server/ai-employees/built-in/research-analyst/index.d.ts +0 -37
  294. package/dist/server/ai-employees/built-in/research-analyst/index.js +0 -63
  295. package/dist/server/ai-employees/built-in/research-analyst/profile.d.ts +0 -27
  296. package/dist/server/ai-employees/built-in/research-analyst/profile.js +0 -60
  297. package/dist/server/ai-employees/built-in/research-analyst/prompt.d.ts +0 -12
  298. package/dist/server/ai-employees/built-in/translator/index.d.ts +0 -37
  299. package/dist/server/ai-employees/built-in/translator/index.js +0 -67
  300. package/dist/server/ai-employees/built-in/translator/profile.d.ts +0 -27
  301. package/dist/server/ai-employees/built-in/translator/prompt.d.ts +0 -12
  302. /package/dist/client/ai-employees/chatbox/{Conversations.d.ts → conversations/Conversations.d.ts} +0 -0
  303. /package/dist/server/migrations/{20250923221107-setup-build-in.d.ts → 20260306000001-migrate-skill-settings-tools.d.ts} +0 -0
@@ -1,498 +0,0 @@
1
- /**
2
- * This file is part of the NocoBase (R) project.
3
- * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
- * Authors: NocoBase Team.
5
- *
6
- * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
- * For more information, please refer to: https://www.nocobase.com/agreement.
8
- */
9
-
10
- var __defProp = Object.defineProperty;
11
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
12
- var __getOwnPropNames = Object.getOwnPropertyNames;
13
- var __hasOwnProp = Object.prototype.hasOwnProperty;
14
- var __export = (target, all) => {
15
- for (var name in all)
16
- __defProp(target, name, { get: all[name], enumerable: true });
17
- };
18
- var __copyProps = (to, from, except, desc) => {
19
- if (from && typeof from === "object" || typeof from === "function") {
20
- for (let key of __getOwnPropNames(from))
21
- if (!__hasOwnProp.call(to, key) && key !== except)
22
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
23
- }
24
- return to;
25
- };
26
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
27
- var js_field_exports = {};
28
- __export(js_field_exports, {
29
- default: () => js_field_default
30
- });
31
- module.exports = __toCommonJS(js_field_exports);
32
- var js_field_default = {
33
- name: "js-field-model",
34
- content: String.raw`# JSFieldModel
35
-
36
- 用于以 JavaScript 自定义字段的只读展示。典型用于:
37
- - 表格列中的字段只读渲染(搭配 TableBlock)。
38
- - 详情页的字段只读渲染(搭配 DetailsBlock)。
39
-
40
- 支持在“JavaScript settings”中编写并运行脚本,脚本通过 \`ctx\` 上下文读写容器、读取当前字段值与记录,并可结合视图能力(drawer/dialog)实现交互扩展。
41
-
42
- ## JSFieldModel 可用上下文(常用)
43
- - \`ctx.element\`:ElementProxy(安全封装的 DOM 容器)。常用 \`innerHTML\` 写入内容,或 \`addEventListener\` 绑定事件。
44
- - \`ctx.value\`:当前字段值(只读形态)。
45
- - \`ctx.record\`:当前记录数据对象(在表格/详情中可用)。
46
- - \`ctx.collection\`:当前集合对象,可获取字段定义、主键等元信息。
47
- - \`ctx.viewer\`:视图控制器,支持 \`drawer\`、\`dialog\`、\`popover\`、\`embed\` 等能力。
48
- - \`ctx.api\`:API 客户端,可发起请求(如读取/更新数据)。
49
- - \`ctx.t\`:国际化函数,用于界面文案翻译。
50
-
51
- 说明:
52
- - JSFieldModel 在运行时会为容器注册 \`ctx.element\`,并在只读场景下提供 \`ctx.value\`;所在区块为集合块时会透传 \`ctx.collection\`、\`ctx.record\` 等。
53
- - 所有 DOM 操作务必在 \`ctx.element\` 内进行,避免直接访问 \`document\` 带来的 XSS 风险。
54
-
55
- ## 常见场景
56
- - 详情页:格式化金额/时间、拼接多个字段展示、生成只读的富文本展示。
57
- - 表格列:根据值动态着色、组合多个字段生成标签、显示状态图标和说明。
58
-
59
- ## 示例:详情页字段格式化(金额 + 折扣)
60
- \`\`\`javascript
61
- const price = Number(ctx.value ?? ctx.record?.price) || 0;
62
- const discount = Number(ctx.record?.discount || 0);
63
- const finalPrice = price * (1 - discount);
64
- const fmt = (n) => '¥' + (Number(n) || 0).toFixed(2);
65
-
66
- ctx.element.innerHTML =
67
- '<div style="font:14px/1.6 -apple-system,BlinkMacSystemFont,system-ui,Roboto,sans-serif;">' +
68
- '<div><strong>应付金额:</strong><span style="color:#52c41a;">' + fmt(finalPrice) + '</span></div>' +
69
- '<div style="color:#999">原价 ' + fmt(price) + ',折扣 ' + (discount * 100).toFixed(0) + '%</div>' +
70
- '</div>';
71
- \`\`\`
72
-
73
- ## 示例:表格列只读渲染(状态徽标)
74
- \`\`\`javascript
75
- const status = String(ctx.value ?? ctx.record?.status ?? '').toLowerCase();
76
- const color = status === 'done' ? '#52c41a' : status === 'pending' ? '#faad14' : '#ff4d4f';
77
- const text = status || 'unknown';
78
- const html = '<span style="display:inline-flex;align-items:center;gap:6px;">'
79
- + '<i style="width:8px;height:8px;border-radius:50%;background:' + color + ';display:inline-block;"></i>'
80
- + '<span style="color:' + color + ';text-transform:capitalize;">' + text + '</span>'
81
- + '</span>';
82
- ctx.element.innerHTML = html;
83
- \`\`\`
84
-
85
- ## 进阶提示
86
- - 可通过 \`ctx.viewer.drawer({ content: ... })\` 打开抽屉查看扩展信息;
87
- - 如需跨字段取值,可用 \`ctx.record\` 拼接显示;
88
- - 需要在表单中“可编辑”的 JS 字段,请使用 JSEditableFieldModel。
89
-
90
- ## 跨区块弹窗(openView)
91
- 可通过 \`ctx.openView(viewId, { ... })\` 打开视图,可以用于跨区块跨页面打开抽屉/对话框。
92
-
93
- 示例
94
- \`\`\`javascript
95
- ctx.element.innerHTML = '<a href="javascript:;" style="color:#1677ff;">打开按钮弹窗</a>';
96
- ctx.element.querySelector('a')?.addEventListener('click', () => {
97
- ctx.openView('targetViewId', {
98
- from: 'JSFieldModel',
99
- time: new Date().toISOString(),
100
- note: '通过 openView 打开按钮的弹窗',
101
- });
102
- });
103
- \`\`\`
104
-
105
- 示例
106
-
107
- \`\`\`javascript
108
- const targetUid = '<目标按钮UID>'; // 替换成目标按钮uid
109
-
110
- ctx.element.innerHTML = '<a href="javascript:;" style="color:#1677ff;">查看详情</a>';
111
- ctx.element.querySelector('a')?.addEventListener('click', async () => {
112
- await ctx.openView('targetViewId', {
113
- from: 'JSFieldModel',
114
- time: new Date().toISOString(),
115
- note: '通过 openView 打开按钮的弹窗',
116
- });
117
- });
118
- \`\`\`
119
-
120
- 示例(目标区块:监听事件并打开抽屉)
121
-
122
- \`\`\`typescript
123
- // 在目标区块的模型中注册监听(伪代码/示意)
124
- MyBlockModel.registerFlow({
125
- key: 'demo',
126
- on: 'click',
127
- steps: {
128
- show: {
129
- async handler(ctx) {
130
- await ctx.viewer.drawer({
131
- width: '56%',
132
- content: \`<div style="padding:16px"><pre>Hello NocoBase!</pre></div>\`,
133
- });
134
- },
135
- },
136
- },
137
- });
138
- \`\`\`
139
-
140
- # JSEditableFieldModel
141
-
142
- 用于在表单项中以 JavaScript 自定义“可编辑字段”的输入体验。典型用于:
143
- - 自定义输入控件(原生 input/select、第三方库封装等);
144
- - 通过 API 动态加载可选项、联动刷新;
145
- - 复杂的校验、格式化与与表单的双向同步。
146
-
147
- 可在“JavaScript settings”中编写脚本,运行时通过 \`ctx\` 上下文读写容器与表单值。
148
-
149
- ## JSEditableFieldModel 可用上下文(常用)
150
- - \`ctx.element\`:ElementProxy(容器),脚本内用它读写 DOM。
151
- - \`ctx.getValue()\` / \`ctx.setValue(v)\`:获取/设置当前字段值(与表单双向绑定)。
152
- - \`ctx.namePath\`:当前字段的 \`namePath\`。
153
- - \`ctx.disabled\`、\`ctx.readOnly\`:禁用/只读状态。
154
- - \`ctx.form\`:AntD Form 实例,可读写其它字段或做校验。
155
- - \`ctx.api\`:API 客户端,可发起 HTTP 请求(可搭配 Mock 使用)。
156
- - \`ctx.viewer\`:视图控制器(drawer/dialog/popover/embed)。
157
-
158
- 说明:
159
- - 所有 DOM 操作需在 \`ctx.element\` 下进行,避免直接访问 \`document\` 导致 XSS 风险;
160
- - 需要只读展示时请使用 \`JSFieldModel\`。
161
-
162
- ## 示例:通过 API 加载下拉可选项
163
- \`\`\`javascript
164
- // 初始化容器结构(使用字符串拼接避免模板字符串嵌套)
165
- ctx.element.innerHTML =
166
- '<div style="display:flex;gap:8px;align-items:center;width:100%">' +
167
- ' <select class="js-select" style="flex:1;padding:4px 8px;border:1px solid #d9d9d9;border-radius:6px;height:32px"></select>' +
168
- ' <button type="button" class="js-refresh" style="height:32px;padding:0 10px;border:1px solid #1677ff;background:#1677ff;color:#fff;border-radius:6px;cursor:pointer;">刷新</button>' +
169
- '</div>';
170
-
171
- var selectEl = ctx.element.querySelector('.js-select');
172
- var refreshBtn = ctx.element.querySelector('.js-refresh');
173
-
174
- // 渲染下拉选项(避免使用反引号与模板占位符嵌套)
175
- var renderOptions = function(items) {
176
- var current = String(ctx.getValue() == null ? '' : ctx.getValue());
177
- selectEl.innerHTML = (Array.isArray(items) ? items : []).map(function(it) {
178
- return '<option value="' + it.value + '">' + it.label + '</option>';
179
- }).join('');
180
- // 恢复当前已选值(如仍存在)
181
- if (current) {
182
- var exists = items.some(function(it) { return String(it.value) === current; });
183
- if (exists) selectEl.value = current;
184
- }
185
- };
186
-
187
- // 远程加载 options(可扩展为携带 keyword 等参数)
188
- var loadOptions = async function() {
189
- // 简单的加载态
190
- selectEl.innerHTML = '<option>加载中...</option>';
191
- try {
192
- var res = await ctx.request({ url: 'categories:list', method: 'get', params: {} });
193
- var items = (res && res.data) || [];
194
- renderOptions(Array.isArray(items) ? items : (items.data || []));
195
- } catch (e) {
196
- // 失败兜底
197
- renderOptions([]);
198
- }
199
- };
200
-
201
- // 绑定交互:变更时写回表单;外部值变化时更新选中
202
- selectEl && selectEl.addEventListener('change', function(e) { ctx.setValue(e.target.value); });
203
- ctx.element.addEventListener('js-field:value-change', function(ev) {
204
- if (!selectEl) return;
205
- var v = ev.detail == null ? '' : String(ev.detail);
206
- selectEl.value = v;
207
- });
208
- refreshBtn && refreshBtn.addEventListener('click', function() { loadOptions(); });
209
-
210
- // 初次加载
211
- loadOptions();
212
- \`\`\`
213
-
214
- ## 示例:远程搜索(防抖 + 实时建议)
215
- \`\`\`javascript
216
- // 结构:输入关键词 -> 防抖搜索 -> 渲染下方下拉框 -> 选择写回值
217
- ctx.element.innerHTML =
218
- '<div style="display:flex;gap:8px;align-items:center;width:100%">' +
219
- ' <input class="js-keyword" placeholder="输入关键词搜索" style="flex:1;padding:4px 8px;border:1px solid #d9d9d9;border-radius:6px;height:32px" />' +
220
- '</div>' +
221
- '<div style="margin-top:8px">' +
222
- ' <select class="js-results" style="width:100%;padding:4px 8px;border:1px solid #d9d9d9;border-radius:6px;height:32px"></select>' +
223
- '</div>';
224
-
225
- var inputEl = ctx.element.querySelector('.js-keyword');
226
- var selectEl = ctx.element.querySelector('.js-results');
227
-
228
- // 简单防抖
229
- var debounce = function(fn, delay) {
230
- var timer = null; return function() { var args = arguments, self = this; clearTimeout(timer); timer = setTimeout(function(){ fn.apply(self, args); }, delay); };
231
- };
232
-
233
- var renderOptions = function(items) {
234
- var current = String(ctx.getValue() == null ? '' : ctx.getValue());
235
- selectEl.innerHTML = (Array.isArray(items) ? items : []).map(function(it){
236
- return '<option value="' + it.value + '">' + it.label + '</option>';
237
- }).join('');
238
- if (current) selectEl.value = current;
239
- };
240
-
241
- var doSearch = async function(keyword) {
242
- selectEl.innerHTML = '<option>搜索中...</option>';
243
- try {
244
- var res = await ctx.request({ url: 'categories:search', method: 'get', params: { q: keyword || '' } });
245
- var items = (res && res.data) || [];
246
- renderOptions(Array.isArray(items) ? items : (items.data || []));
247
- } catch (e) {
248
- renderOptions([]);
249
- }
250
- };
251
-
252
- // 交互绑定
253
- inputEl && inputEl.addEventListener('input', debounce(function(e){ doSearch(e.target.value); }, 300));
254
- selectEl && selectEl.addEventListener('change', function(e){ ctx.setValue(e.target.value); });
255
- ctx.element.addEventListener('js-field:value-change', function(ev){ if (selectEl) selectEl.value = String(ev.detail == null ? '' : ev.detail); });
256
-
257
- // 初次加载
258
- doSearch('');
259
- \`\`\`
260
-
261
- ## 示例:远程搜索(虚拟滚动列表)
262
- \`\`\`javascript
263
- // 结构:输入框 + 可滚动容器(虚拟列表)
264
- ctx.element.innerHTML =
265
- '<div style="display:flex;gap:8px;align-items:center;width:100%">' +
266
- ' <input class="js-keyword" placeholder="搜索 Item" style="flex:1;padding:4px 8px;border:1px solid #d9d9d9;border-radius:6px;height:32px" />' +
267
- '</div>' +
268
- '<div class="js-viewport" style="margin-top:8px;position:relative;height:240px;overflow:auto;border:1px solid #eee;border-radius:6px">' +
269
- ' <div class="js-spacer" style="height:0"></div>' +
270
- ' <div class="js-list" style="position:absolute;left:0;right:0;top:0"></div>' +
271
- '</div>';
272
-
273
- var inputEl = ctx.element.querySelector('.js-keyword');
274
- var viewport = ctx.element.querySelector('.js-viewport');
275
- var spacer = ctx.element.querySelector('.js-spacer');
276
- var list = ctx.element.querySelector('.js-list');
277
-
278
- var all = [];
279
- var itemHeight = 32; // 每项高度(需与 render 一致)
280
- var buffer = 5; // 预加载 Buffer
281
-
282
- var debounce = function(fn, delay){ var timer=null; return function(){ var args=arguments,self=this; clearTimeout(timer); timer=setTimeout(function(){ fn.apply(self,args); }, delay); } };
283
-
284
- var renderSlice = function(start){
285
- var viewportHeight = viewport.clientHeight || 240;
286
- var visibleCount = Math.ceil(viewportHeight / itemHeight) + buffer;
287
- var end = Math.min(start + visibleCount, all.length);
288
- // 偏移定位
289
- var offsetY = start * itemHeight;
290
- list.style.transform = 'translateY(' + offsetY + 'px)';
291
- // 构造 HTML 片段
292
- var html = '';
293
- for (var i = start; i < end; i++) {
294
- var it = all[i];
295
- var selected = String(ctx.getValue()==null?'':ctx.getValue()) === String(it.value);
296
- html += '<div class="js-row" data-value="' + it.value + '" style="height:' + itemHeight + 'px;line-height:' + itemHeight + 'px;padding:0 8px;cursor:pointer;' + (selected?'background:#e6f4ff;':'') + '">' + it.label + '</div>';
297
- }
298
- list.innerHTML = html;
299
- };
300
-
301
- var updateVirtual = function(){
302
- var scrollTop = viewport.scrollTop || 0;
303
- var start = Math.floor(scrollTop / itemHeight);
304
- renderSlice(start);
305
- };
306
-
307
- var renderData = function(items){
308
- all = Array.isArray(items) ? items : [];
309
- spacer.style.height = String(all.length * itemHeight) + 'px';
310
- viewport.scrollTop = 0;
311
- renderSlice(0);
312
- };
313
-
314
- var doSearch = async function(keyword){
315
- list.innerHTML = '<div style="padding:8px;color:#999;">加载中...</div>';
316
- try { var res = await ctx.request({ url: 'biglist:search', method: 'get', params: { q: keyword || '' } }); var items = (res && res.data) || []; renderData(Array.isArray(items) ? items : (items.data || [])); } catch(e) { renderData([]); }
317
- };
318
-
319
- // 事件绑定
320
- inputEl && inputEl.addEventListener('input', debounce(function(e){ doSearch(e.target.value); }, 300));
321
- viewport && viewport.addEventListener('scroll', function(){ updateVirtual(); });
322
- list && list.addEventListener('click', function(e){
323
- var target = e.target || e.srcElement; if (!target) return; var row = target.closest ? target.closest('.js-row') : null; if (!row) return;
324
- var v = row.getAttribute('data-value'); ctx.setValue(v);
325
- updateVirtual(); // 重新渲染以体现选中态
326
- });
327
- ctx.element.addEventListener('js-field:value-change', function(){ updateVirtual(); });
328
-
329
- // 初次加载
330
- doSearch('');
331
- \`\`\`
332
-
333
- ## 示例:级联下拉(父子联动 + 监听表单变更)
334
- \`\`\`javascript
335
- ctx.element.innerHTML = '<select class="js-parent" style="width:100%;padding:4px 8px;border:1px solid #d9d9d9;border-radius:6px;height:32px"></select>';
336
- var el = ctx.element.querySelector('.js-parent');
337
- var renderOptions = function(items) {
338
- var current = String(ctx.getValue() == null ? '' : ctx.getValue());
339
- var list = Array.isArray(items) ? items : [];
340
- el.innerHTML = list.map(function(it){ return '<option value="' + it.value + '">' + it.label + '</option>'; }).join('');
341
- if (current) {
342
- el.value = current;
343
- } else if (list.length) {
344
- var first = String(list[0].value);
345
- el.value = first;
346
- ctx.setValue(first);
347
- }
348
- };
349
- var loadParents = async function(){
350
- el.innerHTML = '<option>加载中...</option>';
351
- try { var res = await ctx.request({ url: 'categories:parents', method: 'get', params: {} }); var items = (res && res.data) || []; renderOptions(Array.isArray(items) ? items : (items.data || [])); } catch(e) { renderOptions([]); }
352
- };
353
- el && el.addEventListener('change', function(e){ ctx.setValue(e.target.value); });
354
- ctx.element.addEventListener('js-field:value-change', function(ev){ if (el) el.value = String(ev.detail == null ? '' : ev.detail); });
355
- loadParents();
356
- \`\`\`
357
-
358
- ## 示例:跨区块联动(Block 间同步)
359
- \`\`\`javascript
360
- // 渲染父类选择框
361
- ctx.element.innerHTML = '<select class="js-parent" style="width:100%;padding:4px 8px;border:1px solid #d9d9d9;border-radius:6px;height:32px"></select>';
362
- var selectEl = ctx.element.querySelector('.js-parent');
363
- var peerUid = '\${RIGHT_BLOCK_UID}';
364
-
365
- // 通知子区块刷新子类列表
366
- var notifyPeer = function(parentId){
367
- var peerBlock = ctx.engine.getModel(peerUid);
368
- if (!peerBlock.getFlow('syncFromParent')) {
369
- setTimeout(function(){ notifyPeer(parentId); }, 0);
370
- return;
371
- }
372
- peerBlock.applyFlow('syncFromParent', { parentId: parentId });
373
- };
374
-
375
- // 渲染父类选项并同步表单/子区块
376
- var renderOptions = function(items){
377
- var list = Array.isArray(items) ? items : [];
378
- var current = String(ctx.getValue() == null ? '' : ctx.getValue());
379
- selectEl.innerHTML = list.map(function(it){ return '<option value="' + it.value + '">' + it.label + '</option>'; }).join('');
380
- if (current && list.some(function(it){ return String(it.value) === current; })) {
381
- selectEl.value = current;
382
- } else if (list.length) {
383
- var first = String(list[0].value);
384
- selectEl.value = first;
385
- ctx.setValue(first);
386
- notifyPeer(first);
387
- return;
388
- } else {
389
- selectEl.value = '';
390
- ctx.setValue('');
391
- notifyPeer('');
392
- }
393
- notifyPeer(selectEl.value);
394
- };
395
-
396
- // 加载父类列表
397
- var loadParents = async function(){
398
- selectEl.innerHTML = '<option>加载中...</option>';
399
- try {
400
- var res = await ctx.request({ url: 'categories:parents', method: 'get', params: {} });
401
- var items = (res && res.data) || [];
402
- renderOptions(Array.isArray(items) ? items : (items.data || []));
403
- } catch (err) {
404
- renderOptions([]);
405
- }
406
- };
407
-
408
- if (selectEl) {
409
- selectEl.addEventListener('change', function(e){
410
- var value = e.target.value;
411
- ctx.setValue(value);
412
- notifyPeer(value);
413
- });
414
- }
415
-
416
- ctx.element.addEventListener('js-field:value-change', function(ev){
417
- var next = ev.detail == null ? '' : String(ev.detail);
418
- if (selectEl) {
419
- var prev = selectEl.value;
420
- if (prev !== next) {
421
- selectEl.value = next;
422
- notifyPeer(next);
423
- }
424
- }
425
- });
426
-
427
- loadParents();
428
- \`\`\`
429
-
430
- ## 示例:多选标签(可创建)
431
- \`\`\`javascript
432
- // 结构:已选标签 + 输入框 + 建议面板
433
- ctx.element.innerHTML =
434
- '<div class="js-tags" style="display:flex;flex-wrap:wrap;gap:6px;margin-bottom:8px"></div>' +
435
- '<div style="display:flex;gap:8px;align-items:center;width:100%">' +
436
- ' <input class="js-input" placeholder="输入后回车创建或选择" style="flex:1;padding:4px 8px;border:1px solid #d9d9d9;border-radius:6px;height:32px" />' +
437
- ' <button type="button" class="js-add" style="height:32px;padding:0 10px;border:1px solid #1677ff;background:#1677ff;color:#fff;border-radius:6px;cursor:pointer;">添加</button>' +
438
- '</div>' +
439
- '<div class="js-suggest" style="margin-top:8px;border:1px solid #eee;border-radius:6px;display:none"></div>';
440
-
441
- var tagsWrap = ctx.element.querySelector('.js-tags');
442
- var inputEl = ctx.element.querySelector('.js-input');
443
- var addBtn = ctx.element.querySelector('.js-add');
444
- var suggest = ctx.element.querySelector('.js-suggest');
445
-
446
- var debounce = function(fn, delay){ var timer=null; return function(){ var args=arguments,self=this; clearTimeout(timer); timer=setTimeout(function(){ fn.apply(self,args); }, delay); } };
447
-
448
- var getValueArr = function(){ var v = ctx.getValue(); return Array.isArray(v) ? v.slice() : (v ? [v] : []); };
449
- var setValueArr = function(arr){ ctx.setValue(arr); };
450
-
451
- var renderTags = function(){
452
- var arr = getValueArr();
453
- if (!tagsWrap) return;
454
- var html = arr.map(function(t){
455
- return '<span class="js-tag" data-v="' + t + '" style="display:inline-flex;align-items:center;gap:6px;background:#f5f5f5;border:1px solid #d9d9d9;border-radius:999px;padding:0 8px;height:24px;line-height:24px;">' +
456
- '<span>' + t + '</span>' +
457
- '<i class="js-remove" style="cursor:pointer;color:#999">×</i>' +
458
- '</span>';
459
- }).join('');
460
- tagsWrap.innerHTML = html;
461
- };
462
-
463
- var addTag = function(t){
464
- var v = String(t || '').trim(); if (!v) return;
465
- var arr = getValueArr(); if (arr.indexOf(v) === -1) { arr.push(v); setValueArr(arr); renderTags(); }
466
- if (inputEl) inputEl.value=''; hideSuggest();
467
- };
468
-
469
- var removeTag = function(t){
470
- var arr = getValueArr().filter(function(x){ return x !== t; }); setValueArr(arr); renderTags();
471
- };
472
-
473
- var showSuggest = function(items){
474
- if (!suggest) return;
475
- var arr = Array.isArray(items) ? items : [];
476
- if (!arr.length) { hideSuggest(); return; }
477
- suggest.style.display = 'block';
478
- suggest.innerHTML = arr.map(function(x){ return '<div class="js-opt" data-v="' + x + '" style="padding:6px 8px;cursor:pointer">' + x + '</div>'; }).join('');
479
- };
480
- var hideSuggest = function(){ if (!suggest) return; suggest.style.display = 'none'; suggest.innerHTML = ''; };
481
-
482
- var search = async function(q){
483
- if (!q) { hideSuggest(); return; }
484
- try { var res = await ctx.request({ url: 'tags:search', method: 'get', params: { q: q } }); var items = (res && res.data) || []; showSuggest(Array.isArray(items) ? items : (items.data || [])); } catch(e) { hideSuggest(); }
485
- };
486
-
487
- // 初始化标签
488
- renderTags();
489
-
490
- // 交互
491
- tagsWrap && tagsWrap.addEventListener('click', function(e){ var t = e.target || e.srcElement; if (!t) return; var tag = t.closest ? t.closest('.js-tag') : null; if (!tag) return; if ((t.className||'').indexOf('js-remove')>-1){ removeTag(tag.getAttribute('data-v')); } });
492
- addBtn && addBtn.addEventListener('click', function(){ addTag(inputEl ? inputEl.value : ''); });
493
- inputEl && inputEl.addEventListener('keydown', function(e){ if (e.key === 'Enter') { e.preventDefault(); addTag(inputEl.value); } });
494
- inputEl && inputEl.addEventListener('input', debounce(function(e){ search(e.target.value); }, 300));
495
- suggest && suggest.addEventListener('click', function(e){ var t = e.target || e.srcElement; if (!t) return; var opt = t.closest ? t.closest('.js-opt') : null; if (!opt) return; addTag(opt.getAttribute('data-v')); });
496
- ctx.element.addEventListener('js-field:value-change', function(){ renderTags(); });
497
- \`\`\``
498
- };
@@ -1,13 +0,0 @@
1
- /**
2
- * This file is part of the NocoBase (R) project.
3
- * Copyright (c) 2020-2024 NocoBase Co., Ltd.
4
- * Authors: NocoBase Team.
5
- *
6
- * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
7
- * For more information, please refer to: https://www.nocobase.com/agreement.
8
- */
9
- declare const _default: {
10
- name: string;
11
- content: string;
12
- };
13
- export default _default;