@baishuyun/ai-design 2.0.25 → 2.0.27

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 (526) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/ai-design.js +8751 -8666
  3. package/dist/ai-design.js.map +1 -1
  4. package/dist/ai-design.umd.cjs +50 -50
  5. package/dist/ai-design.umd.cjs.map +1 -1
  6. package/dist/index.css +1 -0
  7. package/package.json +4 -4
  8. package/src/components/agent-helper/agent-helper-card/index.tsx +3 -14
  9. package/src/components/agent-helper/agent-helper-card-list/index.tsx +4 -5
  10. package/src/components/agent-scroll-selector.tsx +8 -3
  11. package/src/components/agent-select.tsx +3 -1
  12. package/src/components/bs-entry-select/build-tree.ts +49 -0
  13. package/src/components/bs-entry-select/entry-item.tsx +5 -3
  14. package/src/components/bs-entry-select/scroll-slider.tsx +443 -71
  15. package/src/components/bs-entry-select/types.ts +12 -0
  16. package/src/components/fake-bot-msg.tsx +6 -4
  17. package/src/components/fields-previewer.tsx +2 -2
  18. package/src/components/generate-animation.tsx +1 -1
  19. package/src/components/icons/empty-agent-icon.tsx +94 -0
  20. package/src/components/output-config-editor.tsx +1 -0
  21. package/src/index.ts +1 -0
  22. package/dist/ai-design.css +0 -4179
  23. package/dist/src/components/abs-fullscreen-gradient-bg.d.ts +0 -10
  24. package/dist/src/components/abs-fullscreen-gradient-bg.d.ts.map +0 -1
  25. package/dist/src/components/agent-helper/agent-category-select-menu/index.d.ts +0 -8
  26. package/dist/src/components/agent-helper/agent-category-select-menu/index.d.ts.map +0 -1
  27. package/dist/src/components/agent-helper/agent-entry-card/index.d.ts +0 -9
  28. package/dist/src/components/agent-helper/agent-entry-card/index.d.ts.map +0 -1
  29. package/dist/src/components/agent-helper/agent-helper-card/index.d.ts +0 -15
  30. package/dist/src/components/agent-helper/agent-helper-card/index.d.ts.map +0 -1
  31. package/dist/src/components/agent-helper/agent-helper-card-list/index.d.ts +0 -15
  32. package/dist/src/components/agent-helper/agent-helper-card-list/index.d.ts.map +0 -1
  33. package/dist/src/components/agent-helper/agent-helper-main-layout/index.d.ts +0 -30
  34. package/dist/src/components/agent-helper/agent-helper-main-layout/index.d.ts.map +0 -1
  35. package/dist/src/components/agent-helper/agent-sort-select/index.d.ts +0 -8
  36. package/dist/src/components/agent-helper/agent-sort-select/index.d.ts.map +0 -1
  37. package/dist/src/components/agent-helper/agent-tag/index.d.ts +0 -7
  38. package/dist/src/components/agent-helper/agent-tag/index.d.ts.map +0 -1
  39. package/dist/src/components/agent-helper/app-select/index.d.ts +0 -43
  40. package/dist/src/components/agent-helper/app-select/index.d.ts.map +0 -1
  41. package/dist/src/components/agent-helper/condition-group/index.d.ts +0 -15
  42. package/dist/src/components/agent-helper/condition-group/index.d.ts.map +0 -1
  43. package/dist/src/components/agent-helper/condition-input/index.d.ts +0 -30
  44. package/dist/src/components/agent-helper/condition-input/index.d.ts.map +0 -1
  45. package/dist/src/components/agent-helper/condition-item/index.d.ts +0 -16
  46. package/dist/src/components/agent-helper/condition-item/index.d.ts.map +0 -1
  47. package/dist/src/components/agent-helper/condition-quantifier-select/index.d.ts +0 -10
  48. package/dist/src/components/agent-helper/condition-quantifier-select/index.d.ts.map +0 -1
  49. package/dist/src/components/agent-helper/condition-trigger-description/index.d.ts +0 -12
  50. package/dist/src/components/agent-helper/condition-trigger-description/index.d.ts.map +0 -1
  51. package/dist/src/components/agent-helper/date-picker/calendar-panel.d.ts +0 -19
  52. package/dist/src/components/agent-helper/date-picker/calendar-panel.d.ts.map +0 -1
  53. package/dist/src/components/agent-helper/date-picker/date-input.d.ts +0 -4
  54. package/dist/src/components/agent-helper/date-picker/date-input.d.ts.map +0 -1
  55. package/dist/src/components/agent-helper/date-picker/date-picker.d.ts +0 -4
  56. package/dist/src/components/agent-helper/date-picker/date-picker.d.ts.map +0 -1
  57. package/dist/src/components/agent-helper/date-picker/footer-panel.d.ts +0 -10
  58. package/dist/src/components/agent-helper/date-picker/footer-panel.d.ts.map +0 -1
  59. package/dist/src/components/agent-helper/date-picker/index.d.ts +0 -4
  60. package/dist/src/components/agent-helper/date-picker/index.d.ts.map +0 -1
  61. package/dist/src/components/agent-helper/date-picker/month-panel.d.ts +0 -16
  62. package/dist/src/components/agent-helper/date-picker/month-panel.d.ts.map +0 -1
  63. package/dist/src/components/agent-helper/date-picker/time-panel.d.ts +0 -20
  64. package/dist/src/components/agent-helper/date-picker/time-panel.d.ts.map +0 -1
  65. package/dist/src/components/agent-helper/date-picker/types.d.ts +0 -28
  66. package/dist/src/components/agent-helper/date-picker/types.d.ts.map +0 -1
  67. package/dist/src/components/agent-helper/date-picker/utils.d.ts +0 -14
  68. package/dist/src/components/agent-helper/date-picker/utils.d.ts.map +0 -1
  69. package/dist/src/components/agent-helper/date-picker/year-panel.d.ts +0 -14
  70. package/dist/src/components/agent-helper/date-picker/year-panel.d.ts.map +0 -1
  71. package/dist/src/components/agent-helper/exec-log-filter/index.d.ts +0 -24
  72. package/dist/src/components/agent-helper/exec-log-filter/index.d.ts.map +0 -1
  73. package/dist/src/components/agent-helper/field-edit-preference-select/index.d.ts +0 -11
  74. package/dist/src/components/agent-helper/field-edit-preference-select/index.d.ts.map +0 -1
  75. package/dist/src/components/agent-helper/field-select/index.d.ts +0 -25
  76. package/dist/src/components/agent-helper/field-select/index.d.ts.map +0 -1
  77. package/dist/src/components/agent-helper/field-value-input/china-address-data.d.ts +0 -2
  78. package/dist/src/components/agent-helper/field-value-input/china-address-data.d.ts.map +0 -1
  79. package/dist/src/components/agent-helper/field-value-input/display.d.ts +0 -19
  80. package/dist/src/components/agent-helper/field-value-input/display.d.ts.map +0 -1
  81. package/dist/src/components/agent-helper/field-value-input/icons.d.ts +0 -8
  82. package/dist/src/components/agent-helper/field-value-input/icons.d.ts.map +0 -1
  83. package/dist/src/components/agent-helper/field-value-input/index.d.ts +0 -24
  84. package/dist/src/components/agent-helper/field-value-input/index.d.ts.map +0 -1
  85. package/dist/src/components/agent-helper/field-value-input/inputs.d.ts +0 -10
  86. package/dist/src/components/agent-helper/field-value-input/inputs.d.ts.map +0 -1
  87. package/dist/src/components/agent-helper/field-value-input/picker-inputs.d.ts +0 -16
  88. package/dist/src/components/agent-helper/field-value-input/picker-inputs.d.ts.map +0 -1
  89. package/dist/src/components/agent-helper/flow-node-action-trigger-select/index.d.ts +0 -12
  90. package/dist/src/components/agent-helper/flow-node-action-trigger-select/index.d.ts.map +0 -1
  91. package/dist/src/components/agent-helper/form-action-trigger-select/index.d.ts +0 -12
  92. package/dist/src/components/agent-helper/form-action-trigger-select/index.d.ts.map +0 -1
  93. package/dist/src/components/agent-helper/form-divider/index.d.ts +0 -7
  94. package/dist/src/components/agent-helper/form-divider/index.d.ts.map +0 -1
  95. package/dist/src/components/agent-helper/form-select/index.d.ts +0 -26
  96. package/dist/src/components/agent-helper/form-select/index.d.ts.map +0 -1
  97. package/dist/src/components/agent-helper/monthdays-select/index.d.ts +0 -15
  98. package/dist/src/components/agent-helper/monthdays-select/index.d.ts.map +0 -1
  99. package/dist/src/components/agent-helper/offset-preference-select/index.d.ts +0 -10
  100. package/dist/src/components/agent-helper/offset-preference-select/index.d.ts.map +0 -1
  101. package/dist/src/components/agent-helper/offset-type-select/index.d.ts +0 -17
  102. package/dist/src/components/agent-helper/offset-type-select/index.d.ts.map +0 -1
  103. package/dist/src/components/agent-helper/offset-unit-select/index.d.ts +0 -15
  104. package/dist/src/components/agent-helper/offset-unit-select/index.d.ts.map +0 -1
  105. package/dist/src/components/agent-helper/placeholder-card/index.d.ts +0 -9
  106. package/dist/src/components/agent-helper/placeholder-card/index.d.ts.map +0 -1
  107. package/dist/src/components/agent-helper/prompt-input/index.d.ts +0 -12
  108. package/dist/src/components/agent-helper/prompt-input/index.d.ts.map +0 -1
  109. package/dist/src/components/agent-helper/relational-operator-select/index.d.ts +0 -12
  110. package/dist/src/components/agent-helper/relational-operator-select/index.d.ts.map +0 -1
  111. package/dist/src/components/agent-helper/repeat-by-type-select/index.d.ts +0 -15
  112. package/dist/src/components/agent-helper/repeat-by-type-select/index.d.ts.map +0 -1
  113. package/dist/src/components/agent-helper/repeat-preference-select/index.d.ts +0 -9
  114. package/dist/src/components/agent-helper/repeat-preference-select/index.d.ts.map +0 -1
  115. package/dist/src/components/agent-helper/repeat-preference-type-select/index.d.ts +0 -15
  116. package/dist/src/components/agent-helper/repeat-preference-type-select/index.d.ts.map +0 -1
  117. package/dist/src/components/agent-helper/search-input/index.d.ts +0 -8
  118. package/dist/src/components/agent-helper/search-input/index.d.ts.map +0 -1
  119. package/dist/src/components/agent-helper/table/index.d.ts +0 -12
  120. package/dist/src/components/agent-helper/table/index.d.ts.map +0 -1
  121. package/dist/src/components/agent-helper/trigger-select/index.d.ts +0 -18
  122. package/dist/src/components/agent-helper/trigger-select/index.d.ts.map +0 -1
  123. package/dist/src/components/agent-helper/trigger-time-preference-select/index.d.ts +0 -14
  124. package/dist/src/components/agent-helper/trigger-time-preference-select/index.d.ts.map +0 -1
  125. package/dist/src/components/agent-helper/trigger-time-source-type-select/index.d.ts +0 -15
  126. package/dist/src/components/agent-helper/trigger-time-source-type-select/index.d.ts.map +0 -1
  127. package/dist/src/components/agent-helper/weekdays-select/index.d.ts +0 -15
  128. package/dist/src/components/agent-helper/weekdays-select/index.d.ts.map +0 -1
  129. package/dist/src/components/agent-scroll-selector.d.ts +0 -12
  130. package/dist/src/components/agent-scroll-selector.d.ts.map +0 -1
  131. package/dist/src/components/agent-select.d.ts +0 -12
  132. package/dist/src/components/agent-select.d.ts.map +0 -1
  133. package/dist/src/components/attachment-part-group.d.ts +0 -16
  134. package/dist/src/components/attachment-part-group.d.ts.map +0 -1
  135. package/dist/src/components/attachment-part.d.ts +0 -19
  136. package/dist/src/components/attachment-part.d.ts.map +0 -1
  137. package/dist/src/components/attachments-previewer.d.ts +0 -18
  138. package/dist/src/components/attachments-previewer.d.ts.map +0 -1
  139. package/dist/src/components/base-button.d.ts +0 -8
  140. package/dist/src/components/base-button.d.ts.map +0 -1
  141. package/dist/src/components/border-animation.d.ts +0 -23
  142. package/dist/src/components/border-animation.d.ts.map +0 -1
  143. package/dist/src/components/border-color-animation.d.ts +0 -11
  144. package/dist/src/components/border-color-animation.d.ts.map +0 -1
  145. package/dist/src/components/bot-avatar-name.d.ts +0 -6
  146. package/dist/src/components/bot-avatar-name.d.ts.map +0 -1
  147. package/dist/src/components/bot-icon.d.ts +0 -5
  148. package/dist/src/components/bot-icon.d.ts.map +0 -1
  149. package/dist/src/components/bs-entry-select/app-group-folder.d.ts +0 -6
  150. package/dist/src/components/bs-entry-select/app-group-folder.d.ts.map +0 -1
  151. package/dist/src/components/bs-entry-select/bs-entry-select.d.ts +0 -4
  152. package/dist/src/components/bs-entry-select/bs-entry-select.d.ts.map +0 -1
  153. package/dist/src/components/bs-entry-select/build-tree.d.ts +0 -11
  154. package/dist/src/components/bs-entry-select/build-tree.d.ts.map +0 -1
  155. package/dist/src/components/bs-entry-select/entry-item.d.ts +0 -8
  156. package/dist/src/components/bs-entry-select/entry-item.d.ts.map +0 -1
  157. package/dist/src/components/bs-entry-select/entry-popover.d.ts +0 -18
  158. package/dist/src/components/bs-entry-select/entry-popover.d.ts.map +0 -1
  159. package/dist/src/components/bs-entry-select/index.d.ts +0 -4
  160. package/dist/src/components/bs-entry-select/index.d.ts.map +0 -1
  161. package/dist/src/components/bs-entry-select/other-app-section.d.ts +0 -11
  162. package/dist/src/components/bs-entry-select/other-app-section.d.ts.map +0 -1
  163. package/dist/src/components/bs-entry-select/scroll-slider.d.ts +0 -12
  164. package/dist/src/components/bs-entry-select/scroll-slider.d.ts.map +0 -1
  165. package/dist/src/components/bs-entry-select/search-input.d.ts +0 -4
  166. package/dist/src/components/bs-entry-select/search-input.d.ts.map +0 -1
  167. package/dist/src/components/bs-entry-select/tree-item-node.d.ts +0 -9
  168. package/dist/src/components/bs-entry-select/tree-item-node.d.ts.map +0 -1
  169. package/dist/src/components/bs-entry-select/types.d.ts +0 -31
  170. package/dist/src/components/bs-entry-select/types.d.ts.map +0 -1
  171. package/dist/src/components/bs-icons.d.ts +0 -99
  172. package/dist/src/components/bs-icons.d.ts.map +0 -1
  173. package/dist/src/components/card-field.d.ts +0 -11
  174. package/dist/src/components/card-field.d.ts.map +0 -1
  175. package/dist/src/components/card.d.ts +0 -11
  176. package/dist/src/components/card.d.ts.map +0 -1
  177. package/dist/src/components/chat-area-header.d.ts +0 -13
  178. package/dist/src/components/chat-area-header.d.ts.map +0 -1
  179. package/dist/src/components/check-card.d.ts +0 -7
  180. package/dist/src/components/check-card.d.ts.map +0 -1
  181. package/dist/src/components/circle-checker.d.ts +0 -10
  182. package/dist/src/components/circle-checker.d.ts.map +0 -1
  183. package/dist/src/components/collapsible-txt-msg.d.ts +0 -11
  184. package/dist/src/components/collapsible-txt-msg.d.ts.map +0 -1
  185. package/dist/src/components/collapsible.d.ts +0 -6
  186. package/dist/src/components/collapsible.d.ts.map +0 -1
  187. package/dist/src/components/confirm-dialog.d.ts +0 -26
  188. package/dist/src/components/confirm-dialog.d.ts.map +0 -1
  189. package/dist/src/components/date-range-picker.d.ts +0 -8
  190. package/dist/src/components/date-range-picker.d.ts.map +0 -1
  191. package/dist/src/components/fake-bot-msg.d.ts +0 -8
  192. package/dist/src/components/fake-bot-msg.d.ts.map +0 -1
  193. package/dist/src/components/field-checker-list-msg.d.ts +0 -19
  194. package/dist/src/components/field-checker-list-msg.d.ts.map +0 -1
  195. package/dist/src/components/field-checker.d.ts +0 -17
  196. package/dist/src/components/field-checker.d.ts.map +0 -1
  197. package/dist/src/components/field-icon.d.ts +0 -5
  198. package/dist/src/components/field-icon.d.ts.map +0 -1
  199. package/dist/src/components/field-value-checker.d.ts +0 -14
  200. package/dist/src/components/field-value-checker.d.ts.map +0 -1
  201. package/dist/src/components/fields-design-info-table.d.ts +0 -7
  202. package/dist/src/components/fields-design-info-table.d.ts.map +0 -1
  203. package/dist/src/components/fields-generating-indicator.d.ts +0 -6
  204. package/dist/src/components/fields-generating-indicator.d.ts.map +0 -1
  205. package/dist/src/components/fields-portal.d.ts +0 -8
  206. package/dist/src/components/fields-portal.d.ts.map +0 -1
  207. package/dist/src/components/fields-previewer.d.ts +0 -19
  208. package/dist/src/components/fields-previewer.d.ts.map +0 -1
  209. package/dist/src/components/font-icon.d.ts +0 -11
  210. package/dist/src/components/font-icon.d.ts.map +0 -1
  211. package/dist/src/components/form-info-editor.d.ts +0 -31
  212. package/dist/src/components/form-info-editor.d.ts.map +0 -1
  213. package/dist/src/components/formula-tag.d.ts +0 -8
  214. package/dist/src/components/formula-tag.d.ts.map +0 -1
  215. package/dist/src/components/generate-animation.d.ts +0 -5
  216. package/dist/src/components/generate-animation.d.ts.map +0 -1
  217. package/dist/src/components/icon-btn.d.ts +0 -9
  218. package/dist/src/components/icon-btn.d.ts.map +0 -1
  219. package/dist/src/components/icon-card.d.ts +0 -13
  220. package/dist/src/components/icon-card.d.ts.map +0 -1
  221. package/dist/src/components/icons/calendar-icon.d.ts +0 -4
  222. package/dist/src/components/icons/calendar-icon.d.ts.map +0 -1
  223. package/dist/src/components/icons/clear-all-icon.d.ts +0 -4
  224. package/dist/src/components/icons/clear-all-icon.d.ts.map +0 -1
  225. package/dist/src/components/icons/empty-table-icon.d.ts +0 -2
  226. package/dist/src/components/icons/empty-table-icon.d.ts.map +0 -1
  227. package/dist/src/components/icons/grids-icon.d.ts +0 -2
  228. package/dist/src/components/icons/grids-icon.d.ts.map +0 -1
  229. package/dist/src/components/img-part.d.ts +0 -10
  230. package/dist/src/components/img-part.d.ts.map +0 -1
  231. package/dist/src/components/legacy-slot.d.ts +0 -11
  232. package/dist/src/components/legacy-slot.d.ts.map +0 -1
  233. package/dist/src/components/line-checker.d.ts +0 -19
  234. package/dist/src/components/line-checker.d.ts.map +0 -1
  235. package/dist/src/components/linear-gradient-border-btn.d.ts +0 -10
  236. package/dist/src/components/linear-gradient-border-btn.d.ts.map +0 -1
  237. package/dist/src/components/linear-gradient-color-bg-animation.d.ts +0 -8
  238. package/dist/src/components/linear-gradient-color-bg-animation.d.ts.map +0 -1
  239. package/dist/src/components/memoized-markdown.d.ts +0 -5
  240. package/dist/src/components/memoized-markdown.d.ts.map +0 -1
  241. package/dist/src/components/message-content.d.ts +0 -6
  242. package/dist/src/components/message-content.d.ts.map +0 -1
  243. package/dist/src/components/number-part.d.ts +0 -9
  244. package/dist/src/components/number-part.d.ts.map +0 -1
  245. package/dist/src/components/office-container.d.ts +0 -22
  246. package/dist/src/components/office-container.d.ts.map +0 -1
  247. package/dist/src/components/option-item.d.ts +0 -9
  248. package/dist/src/components/option-item.d.ts.map +0 -1
  249. package/dist/src/components/output-config-editor.d.ts +0 -10
  250. package/dist/src/components/output-config-editor.d.ts.map +0 -1
  251. package/dist/src/components/previewer-header.d.ts +0 -21
  252. package/dist/src/components/previewer-header.d.ts.map +0 -1
  253. package/dist/src/components/primary-confirm-btn.d.ts +0 -10
  254. package/dist/src/components/primary-confirm-btn.d.ts.map +0 -1
  255. package/dist/src/components/primary-entry-btn.d.ts +0 -9
  256. package/dist/src/components/primary-entry-btn.d.ts.map +0 -1
  257. package/dist/src/components/radio-card.d.ts +0 -7
  258. package/dist/src/components/radio-card.d.ts.map +0 -1
  259. package/dist/src/components/scroll-to-bottom-btn.d.ts +0 -6
  260. package/dist/src/components/scroll-to-bottom-btn.d.ts.map +0 -1
  261. package/dist/src/components/split-line.d.ts +0 -5
  262. package/dist/src/components/split-line.d.ts.map +0 -1
  263. package/dist/src/components/square-checker.d.ts +0 -15
  264. package/dist/src/components/square-checker.d.ts.map +0 -1
  265. package/dist/src/components/subform-fields-value-checker.d.ts +0 -20
  266. package/dist/src/components/subform-fields-value-checker.d.ts.map +0 -1
  267. package/dist/src/components/tab-radio-group.d.ts +0 -20
  268. package/dist/src/components/tab-radio-group.d.ts.map +0 -1
  269. package/dist/src/components/tooltip.d.ts +0 -6
  270. package/dist/src/components/tooltip.d.ts.map +0 -1
  271. package/dist/src/components/ui/button.d.ts +0 -12
  272. package/dist/src/components/ui/button.d.ts.map +0 -1
  273. package/dist/src/components/ui/calendar.d.ts +0 -5
  274. package/dist/src/components/ui/calendar.d.ts.map +0 -1
  275. package/dist/src/components/ui/dialog.d.ts +0 -24
  276. package/dist/src/components/ui/dialog.d.ts.map +0 -1
  277. package/dist/src/components/ui/drawer.d.ts +0 -22
  278. package/dist/src/components/ui/drawer.d.ts.map +0 -1
  279. package/dist/src/components/ui/form.d.ts +0 -25
  280. package/dist/src/components/ui/form.d.ts.map +0 -1
  281. package/dist/src/components/ui/icons.d.ts +0 -176
  282. package/dist/src/components/ui/icons.d.ts.map +0 -1
  283. package/dist/src/components/ui/input.d.ts +0 -4
  284. package/dist/src/components/ui/input.d.ts.map +0 -1
  285. package/dist/src/components/ui/label.d.ts +0 -9
  286. package/dist/src/components/ui/label.d.ts.map +0 -1
  287. package/dist/src/components/ui/popover.d.ts +0 -10
  288. package/dist/src/components/ui/popover.d.ts.map +0 -1
  289. package/dist/src/components/ui/select.d.ts +0 -16
  290. package/dist/src/components/ui/select.d.ts.map +0 -1
  291. package/dist/src/components/ui/spinner.d.ts +0 -3
  292. package/dist/src/components/ui/spinner.d.ts.map +0 -1
  293. package/dist/src/components/ui/switch.d.ts +0 -7
  294. package/dist/src/components/ui/switch.d.ts.map +0 -1
  295. package/dist/src/components/ui/tabs.d.ts +0 -8
  296. package/dist/src/components/ui/tabs.d.ts.map +0 -1
  297. package/dist/src/components/ui/textarea.d.ts +0 -4
  298. package/dist/src/components/ui/textarea.d.ts.map +0 -1
  299. package/dist/src/components/ui/tooltip.d.ts +0 -13
  300. package/dist/src/components/ui/tooltip.d.ts.map +0 -1
  301. package/dist/src/components/user-txt-msg-bubble.d.ts +0 -6
  302. package/dist/src/components/user-txt-msg-bubble.d.ts.map +0 -1
  303. package/dist/src/components/warning-msg.d.ts +0 -6
  304. package/dist/src/components/warning-msg.d.ts.map +0 -1
  305. package/dist/src/const/ui.d.ts +0 -10
  306. package/dist/src/const/ui.d.ts.map +0 -1
  307. package/dist/src/hooks/use-column-appear.d.ts +0 -22
  308. package/dist/src/hooks/use-column-appear.d.ts.map +0 -1
  309. package/dist/src/hooks/use-portal-container.d.ts +0 -5
  310. package/dist/src/hooks/use-portal-container.d.ts.map +0 -1
  311. package/dist/src/hooks/use-resizable-width.d.ts +0 -28
  312. package/dist/src/hooks/use-resizable-width.d.ts.map +0 -1
  313. package/dist/src/hooks/use-select-popover-position.d.ts +0 -16
  314. package/dist/src/hooks/use-select-popover-position.d.ts.map +0 -1
  315. package/dist/src/hooks/use-shadow.d.ts +0 -25
  316. package/dist/src/hooks/use-shadow.d.ts.map +0 -1
  317. package/dist/src/index.d.ts +0 -155
  318. package/dist/src/index.d.ts.map +0 -1
  319. package/dist/src/lib/utils.d.ts +0 -7
  320. package/dist/src/lib/utils.d.ts.map +0 -1
  321. package/dist/src/stories/AbsFullscreenGradientBg.stories.d.ts +0 -17
  322. package/dist/src/stories/AbsFullscreenGradientBg.stories.d.ts.map +0 -1
  323. package/dist/src/stories/AgentCategorySelectMenu.stories.d.ts +0 -19
  324. package/dist/src/stories/AgentCategorySelectMenu.stories.d.ts.map +0 -1
  325. package/dist/src/stories/AgentEntryCard.stories.d.ts +0 -25
  326. package/dist/src/stories/AgentEntryCard.stories.d.ts.map +0 -1
  327. package/dist/src/stories/AgentHelperCard.stories.d.ts +0 -31
  328. package/dist/src/stories/AgentHelperCard.stories.d.ts.map +0 -1
  329. package/dist/src/stories/AgentHelperCardList.stories.d.ts +0 -21
  330. package/dist/src/stories/AgentHelperCardList.stories.d.ts.map +0 -1
  331. package/dist/src/stories/AgentHelperMainLayout.stories.d.ts +0 -9
  332. package/dist/src/stories/AgentHelperMainLayout.stories.d.ts.map +0 -1
  333. package/dist/src/stories/AgentScrollSelector.stories.d.ts +0 -11
  334. package/dist/src/stories/AgentScrollSelector.stories.d.ts.map +0 -1
  335. package/dist/src/stories/AgentSelect.stories.d.ts +0 -14
  336. package/dist/src/stories/AgentSelect.stories.d.ts.map +0 -1
  337. package/dist/src/stories/AgentTag.stories.d.ts +0 -19
  338. package/dist/src/stories/AgentTag.stories.d.ts.map +0 -1
  339. package/dist/src/stories/AppSelect.stories.d.ts +0 -20
  340. package/dist/src/stories/AppSelect.stories.d.ts.map +0 -1
  341. package/dist/src/stories/AttachmentPart.stories.d.ts +0 -23
  342. package/dist/src/stories/AttachmentPart.stories.d.ts.map +0 -1
  343. package/dist/src/stories/AttachmentPartGroup.stories.d.ts +0 -21
  344. package/dist/src/stories/AttachmentPartGroup.stories.d.ts.map +0 -1
  345. package/dist/src/stories/AttachmentsPreviewer.stories.d.ts +0 -20
  346. package/dist/src/stories/AttachmentsPreviewer.stories.d.ts.map +0 -1
  347. package/dist/src/stories/BaseButton.stories.d.ts +0 -18
  348. package/dist/src/stories/BaseButton.stories.d.ts.map +0 -1
  349. package/dist/src/stories/BorderAnimation.stories.d.ts +0 -21
  350. package/dist/src/stories/BorderAnimation.stories.d.ts.map +0 -1
  351. package/dist/src/stories/BorderColorAnimation.stories.d.ts +0 -26
  352. package/dist/src/stories/BorderColorAnimation.stories.d.ts.map +0 -1
  353. package/dist/src/stories/BotAvatarAndName.stories.d.ts +0 -18
  354. package/dist/src/stories/BotAvatarAndName.stories.d.ts.map +0 -1
  355. package/dist/src/stories/BotIcon.stories.d.ts +0 -17
  356. package/dist/src/stories/BotIcon.stories.d.ts.map +0 -1
  357. package/dist/src/stories/BsConditionInput.stories.d.ts +0 -13
  358. package/dist/src/stories/BsConditionInput.stories.d.ts.map +0 -1
  359. package/dist/src/stories/BsEntrySelect.stories.d.ts +0 -20
  360. package/dist/src/stories/BsEntrySelect.stories.d.ts.map +0 -1
  361. package/dist/src/stories/BsTooltip.stories.d.ts +0 -7
  362. package/dist/src/stories/BsTooltip.stories.d.ts.map +0 -1
  363. package/dist/src/stories/Card.stories.d.ts +0 -14
  364. package/dist/src/stories/Card.stories.d.ts.map +0 -1
  365. package/dist/src/stories/CardField.stories.d.ts +0 -13
  366. package/dist/src/stories/CardField.stories.d.ts.map +0 -1
  367. package/dist/src/stories/ChatAreaHeader.stories.d.ts +0 -14
  368. package/dist/src/stories/ChatAreaHeader.stories.d.ts.map +0 -1
  369. package/dist/src/stories/CheckCard.stories.d.ts +0 -20
  370. package/dist/src/stories/CheckCard.stories.d.ts.map +0 -1
  371. package/dist/src/stories/CircleChecker.stories.d.ts +0 -21
  372. package/dist/src/stories/CircleChecker.stories.d.ts.map +0 -1
  373. package/dist/src/stories/CollapsibleTextMsg.stories.d.ts +0 -16
  374. package/dist/src/stories/CollapsibleTextMsg.stories.d.ts.map +0 -1
  375. package/dist/src/stories/ConditionGroup.stories.d.ts +0 -11
  376. package/dist/src/stories/ConditionGroup.stories.d.ts.map +0 -1
  377. package/dist/src/stories/ConditionInput.stories.d.ts +0 -15
  378. package/dist/src/stories/ConditionInput.stories.d.ts.map +0 -1
  379. package/dist/src/stories/ConditionItem.stories.d.ts +0 -12
  380. package/dist/src/stories/ConditionItem.stories.d.ts.map +0 -1
  381. package/dist/src/stories/ConditonQuantifierSelect.stories.d.ts +0 -20
  382. package/dist/src/stories/ConditonQuantifierSelect.stories.d.ts.map +0 -1
  383. package/dist/src/stories/ConditonTriggerDescription.stories.d.ts +0 -20
  384. package/dist/src/stories/ConditonTriggerDescription.stories.d.ts.map +0 -1
  385. package/dist/src/stories/ConfirmDialog.stories.d.ts +0 -61
  386. package/dist/src/stories/ConfirmDialog.stories.d.ts.map +0 -1
  387. package/dist/src/stories/DataTable.stories.d.ts +0 -47
  388. package/dist/src/stories/DataTable.stories.d.ts.map +0 -1
  389. package/dist/src/stories/DatePicker.stories.d.ts +0 -28
  390. package/dist/src/stories/DatePicker.stories.d.ts.map +0 -1
  391. package/dist/src/stories/ExecLogFilter.stories.d.ts +0 -13
  392. package/dist/src/stories/ExecLogFilter.stories.d.ts.map +0 -1
  393. package/dist/src/stories/FakeBotMsg.stories.d.ts +0 -21
  394. package/dist/src/stories/FakeBotMsg.stories.d.ts.map +0 -1
  395. package/dist/src/stories/FieldEditPreferenceSelect.stories.d.ts +0 -15
  396. package/dist/src/stories/FieldEditPreferenceSelect.stories.d.ts.map +0 -1
  397. package/dist/src/stories/FieldSelect.stories.d.ts +0 -14
  398. package/dist/src/stories/FieldSelect.stories.d.ts.map +0 -1
  399. package/dist/src/stories/FieldValueInput.stories.d.ts +0 -47
  400. package/dist/src/stories/FieldValueInput.stories.d.ts.map +0 -1
  401. package/dist/src/stories/FlowNodeActionTriggerSelect.stories.d.ts +0 -18
  402. package/dist/src/stories/FlowNodeActionTriggerSelect.stories.d.ts.map +0 -1
  403. package/dist/src/stories/Form.stories.d.ts +0 -18
  404. package/dist/src/stories/Form.stories.d.ts.map +0 -1
  405. package/dist/src/stories/FormActionTriggerSelect.stories.d.ts +0 -18
  406. package/dist/src/stories/FormActionTriggerSelect.stories.d.ts.map +0 -1
  407. package/dist/src/stories/FormDivider.stories.d.ts +0 -16
  408. package/dist/src/stories/FormDivider.stories.d.ts.map +0 -1
  409. package/dist/src/stories/FormInfoEditor.stories.d.ts +0 -15
  410. package/dist/src/stories/FormInfoEditor.stories.d.ts.map +0 -1
  411. package/dist/src/stories/FormSelect.stories.d.ts +0 -13
  412. package/dist/src/stories/FormSelect.stories.d.ts.map +0 -1
  413. package/dist/src/stories/FormulaTag.stories.d.ts +0 -37
  414. package/dist/src/stories/FormulaTag.stories.d.ts.map +0 -1
  415. package/dist/src/stories/GenerateAnimation.stories.d.ts +0 -17
  416. package/dist/src/stories/GenerateAnimation.stories.d.ts.map +0 -1
  417. package/dist/src/stories/IconBtn.stories.d.ts +0 -15
  418. package/dist/src/stories/IconBtn.stories.d.ts.map +0 -1
  419. package/dist/src/stories/IconCard.stories.d.ts +0 -15
  420. package/dist/src/stories/IconCard.stories.d.ts.map +0 -1
  421. package/dist/src/stories/IconLib.d.ts +0 -12
  422. package/dist/src/stories/IconLib.d.ts.map +0 -1
  423. package/dist/src/stories/Icons.stories.d.ts +0 -24
  424. package/dist/src/stories/Icons.stories.d.ts.map +0 -1
  425. package/dist/src/stories/ImgMsgPart.stories.d.ts +0 -20
  426. package/dist/src/stories/ImgMsgPart.stories.d.ts.map +0 -1
  427. package/dist/src/stories/Input.stories.d.ts +0 -23
  428. package/dist/src/stories/Input.stories.d.ts.map +0 -1
  429. package/dist/src/stories/Label.stories.d.ts +0 -18
  430. package/dist/src/stories/Label.stories.d.ts.map +0 -1
  431. package/dist/src/stories/LegacySlot.stories.d.ts +0 -16
  432. package/dist/src/stories/LegacySlot.stories.d.ts.map +0 -1
  433. package/dist/src/stories/LineChecker.stories.d.ts +0 -23
  434. package/dist/src/stories/LineChecker.stories.d.ts.map +0 -1
  435. package/dist/src/stories/LinearGradientBorderBtn.stories.d.ts +0 -22
  436. package/dist/src/stories/LinearGradientBorderBtn.stories.d.ts.map +0 -1
  437. package/dist/src/stories/LinearGradientColorBgAnimation.stories.d.ts +0 -23
  438. package/dist/src/stories/LinearGradientColorBgAnimation.stories.d.ts.map +0 -1
  439. package/dist/src/stories/MemoizedMarkdown.stories.d.ts +0 -23
  440. package/dist/src/stories/MemoizedMarkdown.stories.d.ts.map +0 -1
  441. package/dist/src/stories/MessageContent.stories.d.ts +0 -16
  442. package/dist/src/stories/MessageContent.stories.d.ts.map +0 -1
  443. package/dist/src/stories/MonthdaysSelect.stories.d.ts +0 -14
  444. package/dist/src/stories/MonthdaysSelect.stories.d.ts.map +0 -1
  445. package/dist/src/stories/NumbersMsgPart.stories.d.ts +0 -19
  446. package/dist/src/stories/NumbersMsgPart.stories.d.ts.map +0 -1
  447. package/dist/src/stories/OfficeContainer.stories.d.ts +0 -14
  448. package/dist/src/stories/OfficeContainer.stories.d.ts.map +0 -1
  449. package/dist/src/stories/OffsetPreferenceSelect.stories.d.ts +0 -11
  450. package/dist/src/stories/OffsetPreferenceSelect.stories.d.ts.map +0 -1
  451. package/dist/src/stories/OffsetTypeSelect.stories.d.ts +0 -12
  452. package/dist/src/stories/OffsetTypeSelect.stories.d.ts.map +0 -1
  453. package/dist/src/stories/OffsetUnitSelect.stories.d.ts +0 -11
  454. package/dist/src/stories/OffsetUnitSelect.stories.d.ts.map +0 -1
  455. package/dist/src/stories/OptionItem.stories.d.ts +0 -20
  456. package/dist/src/stories/OptionItem.stories.d.ts.map +0 -1
  457. package/dist/src/stories/OutputConfigEditor.stories.d.ts +0 -9
  458. package/dist/src/stories/OutputConfigEditor.stories.d.ts.map +0 -1
  459. package/dist/src/stories/PlaceholderCard.stories.d.ts +0 -21
  460. package/dist/src/stories/PlaceholderCard.stories.d.ts.map +0 -1
  461. package/dist/src/stories/PreviewerHeader.stories.d.ts +0 -12
  462. package/dist/src/stories/PreviewerHeader.stories.d.ts.map +0 -1
  463. package/dist/src/stories/PrimaryConfirmBtn.stories.d.ts +0 -19
  464. package/dist/src/stories/PrimaryConfirmBtn.stories.d.ts.map +0 -1
  465. package/dist/src/stories/PrimaryEntryBtn.stories.d.ts +0 -26
  466. package/dist/src/stories/PrimaryEntryBtn.stories.d.ts.map +0 -1
  467. package/dist/src/stories/PromptInput.stories.d.ts +0 -14
  468. package/dist/src/stories/PromptInput.stories.d.ts.map +0 -1
  469. package/dist/src/stories/RadioCard.stories.d.ts +0 -19
  470. package/dist/src/stories/RadioCard.stories.d.ts.map +0 -1
  471. package/dist/src/stories/RelationalOperatorSelect.stories.d.ts +0 -21
  472. package/dist/src/stories/RelationalOperatorSelect.stories.d.ts.map +0 -1
  473. package/dist/src/stories/RepeatByTypeSelect.stories.d.ts +0 -11
  474. package/dist/src/stories/RepeatByTypeSelect.stories.d.ts.map +0 -1
  475. package/dist/src/stories/RepeatPreferenceSelect.stories.d.ts +0 -13
  476. package/dist/src/stories/RepeatPreferenceSelect.stories.d.ts.map +0 -1
  477. package/dist/src/stories/RepeatPreferenceTypeSelect.stories.d.ts +0 -11
  478. package/dist/src/stories/RepeatPreferenceTypeSelect.stories.d.ts.map +0 -1
  479. package/dist/src/stories/ScrollToBottom.stories.d.ts +0 -15
  480. package/dist/src/stories/ScrollToBottom.stories.d.ts.map +0 -1
  481. package/dist/src/stories/SearchInput.stories.d.ts +0 -21
  482. package/dist/src/stories/SearchInput.stories.d.ts.map +0 -1
  483. package/dist/src/stories/Select.stories.d.ts +0 -19
  484. package/dist/src/stories/Select.stories.d.ts.map +0 -1
  485. package/dist/src/stories/SplitLine.stories.d.ts +0 -9
  486. package/dist/src/stories/SplitLine.stories.d.ts.map +0 -1
  487. package/dist/src/stories/SquareChecker.stories.d.ts +0 -26
  488. package/dist/src/stories/SquareChecker.stories.d.ts.map +0 -1
  489. package/dist/src/stories/TabRadioGroup.stories.d.ts +0 -18
  490. package/dist/src/stories/TabRadioGroup.stories.d.ts.map +0 -1
  491. package/dist/src/stories/Textarea.stories.d.ts +0 -19
  492. package/dist/src/stories/Textarea.stories.d.ts.map +0 -1
  493. package/dist/src/stories/TriggerSelect.stories.d.ts +0 -16
  494. package/dist/src/stories/TriggerSelect.stories.d.ts.map +0 -1
  495. package/dist/src/stories/TriggerTimePreferenceSelect.stories.d.ts +0 -10
  496. package/dist/src/stories/TriggerTimePreferenceSelect.stories.d.ts.map +0 -1
  497. package/dist/src/stories/TriggerTimeSourceTypeSelect.stories.d.ts +0 -12
  498. package/dist/src/stories/TriggerTimeSourceTypeSelect.stories.d.ts.map +0 -1
  499. package/dist/src/stories/UserTextMsgBubble.stories.d.ts +0 -14
  500. package/dist/src/stories/UserTextMsgBubble.stories.d.ts.map +0 -1
  501. package/dist/src/stories/WarningMessage.stories.d.ts +0 -16
  502. package/dist/src/stories/WarningMessage.stories.d.ts.map +0 -1
  503. package/dist/src/stories/WeekdaysSelect.stories.d.ts +0 -12
  504. package/dist/src/stories/WeekdaysSelect.stories.d.ts.map +0 -1
  505. package/dist/src/stories/collapsible.stories.d.ts +0 -8
  506. package/dist/src/stories/collapsible.stories.d.ts.map +0 -1
  507. package/dist/src/stories/drawer.stories.d.ts +0 -18
  508. package/dist/src/stories/drawer.stories.d.ts.map +0 -1
  509. package/dist/src/stories/field-checker-list-msg.stories.d.ts +0 -11
  510. package/dist/src/stories/field-checker-list-msg.stories.d.ts.map +0 -1
  511. package/dist/src/stories/field-checker.stories.d.ts +0 -13
  512. package/dist/src/stories/field-checker.stories.d.ts.map +0 -1
  513. package/dist/src/stories/field-icon.stories.d.ts +0 -15
  514. package/dist/src/stories/field-icon.stories.d.ts.map +0 -1
  515. package/dist/src/stories/field-value-checker.stories.d.ts +0 -13
  516. package/dist/src/stories/field-value-checker.stories.d.ts.map +0 -1
  517. package/dist/src/stories/fields-design-info-table.stories.d.ts +0 -14
  518. package/dist/src/stories/fields-design-info-table.stories.d.ts.map +0 -1
  519. package/dist/src/stories/fields-generating.stories.d.ts +0 -20
  520. package/dist/src/stories/fields-generating.stories.d.ts.map +0 -1
  521. package/dist/src/stories/fields-previewer.stories.d.ts +0 -19
  522. package/dist/src/stories/fields-previewer.stories.d.ts.map +0 -1
  523. package/dist/src/stories/subform-fields-value-checker.stories.d.ts +0 -9
  524. package/dist/src/stories/subform-fields-value-checker.stories.d.ts.map +0 -1
  525. package/dist/src/types.d.ts +0 -8
  526. package/dist/src/types.d.ts.map +0 -1
@@ -4,16 +4,18 @@ import {
4
4
  useEffect,
5
5
  useCallback,
6
6
  useMemo,
7
+ Fragment,
7
8
  } from 'react';
8
9
  import { createPortal } from 'react-dom';
9
10
  import { cn } from '../../lib/utils';
10
11
  import { transCls } from '../../const/ui';
11
12
  import { IconBtn } from '../icon-btn';
12
- import { LeftArrowIcon, SolidArrowDownIcon } from '../bs-icons';
13
+ import { LeftArrowIcon, SolidArrowDownIcon, DividerIcon } from '../bs-icons';
13
14
  import {
14
15
  buildEntryTreeFromAliasMap,
15
16
  getEntryIconClass,
16
17
  filterTreeBySearch,
18
+ buildFlowCenterTree,
17
19
  } from './build-tree';
18
20
  import { SearchInput } from './search-input';
19
21
  import { TreeItemNode } from './tree-item-node';
@@ -73,10 +75,27 @@ export function ScrollSlider({
73
75
  { estimatedHeight: 340 },
74
76
  );
75
77
 
78
+ const hoverCloseTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);
79
+
76
80
  const isTabs = variant === 'tabs';
81
+ const showFlowCenter = isTabs && (appDetails[currentAppId ?? '']?.isFlow ?? false);
77
82
 
78
83
  // Build first-level nodes from all apps (no search filter)
79
84
  const flatNodes = useMemo<FlatNode[]>(() => {
85
+ const flowCenterNodes: FlatNode[] = [];
86
+
87
+ // Flow center — first tab in tabs mode for flow-type apps
88
+ if (showFlowCenter) {
89
+ const flowTree = buildFlowCenterTree();
90
+ flowCenterNodes.push(
91
+ ...flowTree.map((node) => ({
92
+ node,
93
+ appId: currentAppId ?? '',
94
+ section: 'current' as const,
95
+ })),
96
+ );
97
+ }
98
+
80
99
  const appIds = Object.keys(appDetails);
81
100
  const currentFirst: FlatNode[] = [];
82
101
  const otherNodes: FlatNode[] = [];
@@ -93,12 +112,13 @@ export function ScrollSlider({
93
112
  }
94
113
  }
95
114
 
96
- const merged = [...currentFirst, ...otherNodes];
97
- return showCurrentAppEntriesOnly ? currentFirst : merged;
115
+ const merged = [...flowCenterNodes, ...currentFirst, ...otherNodes];
116
+ return showCurrentAppEntriesOnly ? [...flowCenterNodes, ...currentFirst] : merged;
98
117
  }, [
99
118
  appDetails,
100
119
  currentAppId,
101
120
  showCurrentAppEntriesOnly,
121
+ showFlowCenter,
102
122
  Object.keys(appDetails)
103
123
  .map((id) => (appDetails[id]?.entryList?.length ?? 0))
104
124
  .join(','),
@@ -110,6 +130,17 @@ export function ScrollSlider({
110
130
  return filterTreeBySearch(activeGroup.node.children, groupSearchQuery);
111
131
  }, [activeGroup, groupSearchQuery]);
112
132
 
133
+ // Map from group pill node ID → FlatNode, for native hover delegation
134
+ const groupFlatNodeById = useMemo(() => {
135
+ const map = new Map<string, FlatNode>();
136
+ for (const fn of flatNodes) {
137
+ if (!fn.node.isSelectable) {
138
+ map.set(fn.node.id, fn);
139
+ }
140
+ }
141
+ return map;
142
+ }, [flatNodes]);
143
+
113
144
  const checkScroll = useCallback(() => {
114
145
  const el = scrollRef.current;
115
146
  if (!el) return;
@@ -163,9 +194,52 @@ export function ScrollSlider({
163
194
  ) as HTMLElement | null;
164
195
  }
165
196
  }
166
- if (pill) {
167
- pill.scrollIntoView({ behavior: 'smooth', block: 'nearest', inline: 'nearest' });
168
- }
197
+ if (!pill) return;
198
+
199
+ const container = scrollRef.current;
200
+ const PAD = 12; // matches scrollPaddingInline, covers corner flares
201
+ const start = performance.now();
202
+ let rafId = 0;
203
+
204
+ // Ease toward the pill with the target recomputed EVERY frame. A one-shot
205
+ // scrollIntoView({behavior: 'smooth'}) computes its destination upfront —
206
+ // the selection triggers a host navigation whose follow-up layout changes
207
+ // (content reload, arrow show/hide) shift the container mid-animation and
208
+ // the pill lands clipped. Live recomputation keeps this one continuous
209
+ // ease-out motion that always converges, with no visible second jump.
210
+ const step = () => {
211
+ const containerRect = container.getBoundingClientRect();
212
+ const pillRect = pill.getBoundingClientRect();
213
+ let delta = 0;
214
+ if (pillRect.left < containerRect.left + PAD) {
215
+ delta = pillRect.left - containerRect.left - PAD;
216
+ } else if (pillRect.right > containerRect.right - PAD) {
217
+ delta = pillRect.right - containerRect.right + PAD;
218
+ }
219
+ if (Math.abs(delta) < 1) return; // arrived
220
+ container.scrollLeft += delta * 0.3;
221
+ if (performance.now() - start < 600) {
222
+ rafId = requestAnimationFrame(step);
223
+ }
224
+ };
225
+ rafId = requestAnimationFrame(step);
226
+
227
+ // Stop animating if the user takes over scrolling
228
+ const cancelOnUserScroll = () => cancelAnimationFrame(rafId);
229
+ container.addEventListener('wheel', cancelOnUserScroll, {
230
+ once: true,
231
+ passive: true,
232
+ });
233
+ container.addEventListener('touchstart', cancelOnUserScroll, {
234
+ once: true,
235
+ passive: true,
236
+ });
237
+
238
+ return () => {
239
+ cancelAnimationFrame(rafId);
240
+ container.removeEventListener('wheel', cancelOnUserScroll);
241
+ container.removeEventListener('touchstart', cancelOnUserScroll);
242
+ };
169
243
  }, [selectedEntryId, descendantToGroupId]);
170
244
 
171
245
  useEffect(() => {
@@ -195,46 +269,168 @@ export function ScrollSlider({
195
269
  activeGroupIdRef.current = null;
196
270
  setActiveGroup(null);
197
271
  setGroupSearchQuery('');
272
+ if (hoverCloseTimerRef.current) {
273
+ clearTimeout(hoverCloseTimerRef.current);
274
+ hoverCloseTimerRef.current = null;
275
+ }
198
276
  }, []);
199
277
 
200
- const openGroupPopover = useCallback((flatNode: FlatNode, event: React.MouseEvent) => {
201
- event.stopPropagation();
202
- if (activeGroup?.node.id === flatNode.node.id) {
203
- activeGroupIdRef.current = null;
204
- setActiveGroup(null);
205
- setGroupSearchQuery('');
206
- return;
278
+ const cancelCloseTimer = useCallback(() => {
279
+ if (hoverCloseTimerRef.current) {
280
+ clearTimeout(hoverCloseTimerRef.current);
281
+ hoverCloseTimerRef.current = null;
207
282
  }
208
- setGroupSearchQuery('');
209
- activeGroupIdRef.current = flatNode.node.id;
210
- setActiveGroup(flatNode);
211
-
212
- // Check Shadow DOM portal
213
- const triggerEl = groupPillRefs.current.get(flatNode.node.id);
214
- if (triggerEl) {
215
- const rootNode = triggerEl.getRootNode();
216
- if (rootNode instanceof ShadowRoot) {
217
- const existing = rootNode.querySelector<HTMLElement>(
218
- '[data-bs-entry-select-group-portal]',
219
- );
220
- if (existing) {
221
- setGroupPortalContainer(existing);
283
+ }, []);
284
+
285
+ // Delayed close — cancelled when the mouse re-enters the pill or popover.
286
+ // The :hover guard prevents closing when a transient leave fired but the
287
+ // cursor is still over the pill or popover (e.g. layout-shift artifacts).
288
+ const scheduleClosePopover = useCallback(() => {
289
+ cancelCloseTimer();
290
+ hoverCloseTimerRef.current = setTimeout(() => {
291
+ const pillEl = activeGroupIdRef.current
292
+ ? groupPillRefs.current.get(activeGroupIdRef.current)
293
+ : null;
294
+ if (pillEl?.matches(':hover') || popoverRef.current?.matches(':hover')) {
295
+ return;
296
+ }
297
+ closeGroupPopover();
298
+ }, 200);
299
+ }, [cancelCloseTimer, closeGroupPopover]);
300
+
301
+ // Core open logic shared by click and hover paths
302
+ const openGroupPopoverCore = useCallback(
303
+ (flatNode: FlatNode) => {
304
+ // Clear any pending close timer
305
+ cancelCloseTimer();
306
+
307
+ // Skip if already open for this group (hover keeps it open)
308
+ if (activeGroup?.node.id === flatNode.node.id) return;
309
+
310
+ setGroupSearchQuery('');
311
+ activeGroupIdRef.current = flatNode.node.id;
312
+ setActiveGroup(flatNode);
313
+
314
+ // Check Shadow DOM portal
315
+ const triggerEl = groupPillRefs.current.get(flatNode.node.id);
316
+ if (triggerEl) {
317
+ const rootNode = triggerEl.getRootNode();
318
+ if (rootNode instanceof ShadowRoot) {
319
+ const existing = rootNode.querySelector<HTMLElement>(
320
+ '[data-bs-entry-select-group-portal]',
321
+ );
322
+ if (existing) {
323
+ setGroupPortalContainer(existing);
324
+ } else {
325
+ const container = document.createElement('div');
326
+ container.setAttribute('data-bs-entry-select-group-portal', 'true');
327
+ rootNode.appendChild(container);
328
+ setGroupPortalContainer(container);
329
+ }
222
330
  } else {
223
- const container = document.createElement('div');
224
- container.setAttribute('data-bs-entry-select-group-portal', 'true');
225
- rootNode.appendChild(container);
226
- setGroupPortalContainer(container);
331
+ setGroupPortalContainer(null);
227
332
  }
228
- } else {
229
- setGroupPortalContainer(null);
230
333
  }
231
- }
232
334
 
233
- // Position the popover after the next frame
234
- requestAnimationFrame(() => {
335
+ // Position synchronously — the pill is already mounted, so its rect is
336
+ // available immediately. Batching this with setActiveGroup ensures the
337
+ // popover mounts at the correct position in the same commit; a deferred
338
+ // (rAF) position would render one frame in-flow at the end of the body,
339
+ // shifting layout and firing a spurious mouseleave on the pill.
235
340
  updatePopoverPosition();
236
- });
237
- }, [activeGroup, updatePopoverPosition]);
341
+ },
342
+ [activeGroup, cancelCloseTimer, updatePopoverPosition],
343
+ );
344
+
345
+ const openGroupPopover = useCallback(
346
+ (flatNode: FlatNode, event: React.MouseEvent) => {
347
+ event.stopPropagation();
348
+ if (activeGroup?.node.id === flatNode.node.id) {
349
+ activeGroupIdRef.current = null;
350
+ setActiveGroup(null);
351
+ setGroupSearchQuery('');
352
+ return;
353
+ }
354
+ openGroupPopoverCore(flatNode);
355
+ },
356
+ [activeGroup, openGroupPopoverCore],
357
+ );
358
+
359
+ // Hover handlers for tabs mode.
360
+ //
361
+ // NOTE: these are driven by NATIVE mouseover/mouseout listeners (attached in
362
+ // the effects below), not React's onMouseEnter/onMouseLeave. React's
363
+ // synthetic enter/leave events do not fire when the pointer crosses from
364
+ // light DOM into a shadow root — which is exactly what happens when the
365
+ // mouse enters a tab from the host content area below the tab bar.
366
+ const handleNativeOver = useCallback(
367
+ (e: MouseEvent) => {
368
+ const t = e.target as HTMLElement | null;
369
+ if (!t) return;
370
+ if (popoverRef.current?.contains(t)) {
371
+ cancelCloseTimer();
372
+ return;
373
+ }
374
+ const pillEl = t.closest?.('[data-entry-id]') as HTMLElement | null;
375
+ const flatNode = pillEl
376
+ ? groupFlatNodeById.get(pillEl.getAttribute('data-entry-id') ?? '')
377
+ : undefined;
378
+ if (flatNode) {
379
+ cancelCloseTimer();
380
+ openGroupPopoverCore(flatNode);
381
+ } else {
382
+ // Hovering a leaf pill or empty slider area — close any open group popover
383
+ scheduleClosePopover();
384
+ }
385
+ },
386
+ [cancelCloseTimer, groupFlatNodeById, openGroupPopoverCore, scheduleClosePopover],
387
+ );
388
+
389
+ const handleNativeOut = useCallback(
390
+ (e: MouseEvent) => {
391
+ const to = e.relatedTarget as HTMLElement | null;
392
+ if (to && scrollRef.current?.contains(to)) return;
393
+ if (to && popoverRef.current?.contains(to)) return;
394
+ scheduleClosePopover();
395
+ },
396
+ [scheduleClosePopover],
397
+ );
398
+
399
+ // Keep latest handlers in refs so listeners stay attached across re-renders
400
+ const handleNativeOverRef = useRef(handleNativeOver);
401
+ const handleNativeOutRef = useRef(handleNativeOut);
402
+ useEffect(() => {
403
+ handleNativeOverRef.current = handleNativeOver;
404
+ handleNativeOutRef.current = handleNativeOut;
405
+ });
406
+
407
+ // Native hover listeners on the scroll container (delegated to group pills)
408
+ useEffect(() => {
409
+ const el = scrollRef.current;
410
+ if (!el || !isTabs) return;
411
+ const over = (e: MouseEvent) => handleNativeOverRef.current(e);
412
+ const out = (e: MouseEvent) => handleNativeOutRef.current(e);
413
+ el.addEventListener('mouseover', over);
414
+ el.addEventListener('mouseout', out);
415
+ return () => {
416
+ el.removeEventListener('mouseover', over);
417
+ el.removeEventListener('mouseout', out);
418
+ };
419
+ }, [isTabs]);
420
+
421
+ // Native hover listeners on the group popover (rendered in a portal subtree)
422
+ useEffect(() => {
423
+ const pop = popoverRef.current;
424
+ if (!isTabs || !activeGroup || !pop) return;
425
+ const over = (e: MouseEvent) => handleNativeOverRef.current(e);
426
+ const out = (e: MouseEvent) => handleNativeOutRef.current(e);
427
+ pop.addEventListener('mouseover', over);
428
+ pop.addEventListener('mouseout', out);
429
+ return () => {
430
+ pop.removeEventListener('mouseover', over);
431
+ pop.removeEventListener('mouseout', out);
432
+ };
433
+ }, [isTabs, activeGroup]);
238
434
 
239
435
  const handleGroupPopoverSelect = useCallback(
240
436
  (result: BsEntrySelectChangeResult) => {
@@ -302,19 +498,53 @@ export function ScrollSlider({
302
498
 
303
499
  <div
304
500
  ref={scrollRef}
501
+ // scroll-padding: scrollIntoView aligns pills this far from the
502
+ // container edge, keeping the selected tab's outward corner flares
503
+ // (protruding 9px) fully visible instead of clipped
504
+ style={isTabs ? { scrollPaddingInline: 12 } : undefined}
305
505
  className={cn(
306
506
  'flex-1 overflow-x-auto scrollbar-hide flex min-w-0',
307
507
  isTabs
308
- ? 'items-end gap-0 overflow-y-hidden border-b-[#e0e0e0] before:content-[""] before:absolute before:bottom-[0px] before:left-[-200px] before:right-0 before:h-[1px] before:w-[100vw] before:bg-[#e0e0e0] h-full'
508
+ // px compensates -mx: keeps pills at the same visual position
509
+ // while letting bottom corner flares paint without being clipped
510
+ ? 'items-end gap-0 overflow-y-hidden px-[10px] -mx-[10px] border-b-[#e0e0e0] before:content-[""] before:absolute before:bottom-[0px] before:left-[-200px] before:right-0 before:h-[1px] before:w-[200vw] before:bg-[#e0e0e0] h-full'
309
511
  : 'items-center gap-2.5',
310
512
  )}
311
513
  >
312
- {flatNodes.map((flatNode) => {
514
+ {flatNodes.map((flatNode, index) => {
313
515
  const { node, appId, section } = flatNode;
314
516
  const isLeaf = node.isSelectable;
315
517
  const isSelected = isLeaf && selectedEntryId === node.id;
316
- const isGroupActive = activeGroup?.node.id === node.id
317
- || node?.children.findIndex(c => c.id === selectedEntryId) >= 0;
518
+ // Active tab styling applies only when a descendant entry is
519
+ // selected — hovering/clicking to open the popover must NOT make
520
+ // the group look active (that would show two active tabs at once)
521
+ const isGroupActive = node?.children.findIndex(c => c.id === selectedEntryId) >= 0;
522
+ // Popover-open is a separate, transient state — drives the chevron
523
+ const isGroupPopoverOpen = activeGroup?.node.id === node.id;
524
+
525
+ // Divider between inactive tabs: always rendered in tabs mode so
526
+ // the strip width never shifts on selection change — only its
527
+ // visibility toggles (hidden next to the active tab, which has
528
+ // its own borders)
529
+ const isNodeActive = (fn: FlatNode | null): boolean => {
530
+ if (!fn) return false;
531
+ return fn.node.isSelectable
532
+ ? selectedEntryId === fn.node.id
533
+ : fn.node.children.findIndex((c) => c.id === selectedEntryId) >= 0;
534
+ };
535
+ const dividerVisible =
536
+ !isNodeActive(flatNode) && !isNodeActive(flatNodes[index - 1]);
537
+ const divider = isTabs && index > 0 ? (
538
+ <span
539
+ aria-hidden
540
+ className={cn(
541
+ 'self-center shrink-0 flex items-center justify-center w-[1px]',
542
+ !dividerVisible && 'invisible',
543
+ )}
544
+ >
545
+ <DividerIcon />
546
+ </span>
547
+ ) : null;
318
548
 
319
549
  const setPillRef = (el: HTMLButtonElement | null) => {
320
550
  if (el) {
@@ -326,8 +556,9 @@ export function ScrollSlider({
326
556
 
327
557
  if (isLeaf) {
328
558
  return (
329
- <button
330
- key={node.id}
559
+ <Fragment key={node.id}>
560
+ {divider}
561
+ <button
331
562
  data-entry-id={node.id}
332
563
  type="button"
333
564
  onClick={() => {
@@ -336,65 +567,197 @@ export function ScrollSlider({
336
567
  }
337
568
  }}
338
569
  className={cn(
339
- 'flex items-center gap-[6px] shrink-0 max-w-[240px]',
570
+ 'flex items-center shrink-0 max-w-[240px]',
340
571
  transCls,
341
572
  isTabs
342
573
  ? [
343
- 'px-[16px] py-[8px] relative z-10 border-b-none h-full',
344
- isSelected
345
- ? 'border-r border-t border-l border-[#e0e0e0] bg-[#f6f7fa] text-[#0265FF] rounded-t-[10px] rounded-b-none '
346
- : 'text-[#030303] hover:bg-[#F0F6FF] rounded-t-[8px]',
574
+ // Button stays h-full so text keeps its Y position;
575
+ // the visual tab box is the decorative span below
576
+ 'group px-[10px] py-[8px] relative z-10 h-full',
577
+ isSelected ? 'text-[#0265FF]' : 'text-[#030303]',
347
578
  ]
348
579
  : [
349
- 'px-[10px] py-[7px] rounded-[4px]',
580
+ 'px-[10px] py-[7px] rounded-[4px] gap-[6px]',
350
581
  isSelected
351
582
  ? 'border border-[#F0F6FF] bg-[#F0F6FF] text-[#0265FF]'
352
583
  : 'border border-[#E0E0E0] text-[#030303] hover:bg-[#F0F6FF]',
353
584
  ],
354
585
  )}
355
586
  >
356
- <i
357
- className={
358
- node.entry
359
- ? getEntryIconClass(node.entry)
360
- : 'node-icon icon-bsy-form icon-new-bsy-form-25'
361
- }
362
- style={{ fontSize: 16, lineHeight: 1 }}
363
- />
364
- <span className="text-[14px] leading-[normal] truncate">
365
- {node.name}
587
+ {/* Visual tab box — side borders stop 10px above the bar so
588
+ the concave corner arcs can continue them; transparent
589
+ borders when unselected (decorative only, no layout shift).
590
+ No transCls here: the fill strip and corner flares below
591
+ appear/disappear instantly on selection change, so this
592
+ box must switch instantly too — otherwise its fading
593
+ background leaves a ghost image on the deselected tab */}
594
+ {isTabs && (
595
+ <span
596
+ aria-hidden
597
+ className={cn(
598
+ 'pointer-events-none absolute inset-x-0 top-[6px] bottom-[10px] border-r border-t border-l border-b-none rounded-t-[10px] rounded-b-none',
599
+ isSelected
600
+ ? 'border-[#e0e0e0] bg-[#f6f7fa]'
601
+ : 'border-transparent',
602
+ )}
603
+ />
604
+ )}
605
+ {isTabs && isSelected && (
606
+ <>
607
+ {/* Fill below the tab body — covers the bar line under the tab */}
608
+ <span
609
+ aria-hidden
610
+ className="pointer-events-none absolute inset-x-0 bottom-0 h-[10px] bg-[#f6f7fa]"
611
+ />
612
+ {/* Concave corner flares. The square is shifted 1px
613
+ inward (left/right-[-9px]) so the full border ring —
614
+ including its tangent junctions with the side border
615
+ (vertical tangent) and the bar line (horizontal
616
+ tangent) — fits inside the element and paints above
617
+ the bottom fill strip */}
618
+ <span
619
+ aria-hidden
620
+ className="pointer-events-none absolute left-[-9px] bottom-0 w-[10px] h-[10px]"
621
+ style={{
622
+ background:
623
+ 'radial-gradient(circle at 0% 0%, transparent 9px, #e0e0e0 9px, #e0e0e0 10px, #f6f7fa 10px)',
624
+ }}
625
+ />
626
+ <span
627
+ aria-hidden
628
+ className="pointer-events-none absolute right-[-9px] bottom-0 w-[10px] h-[10px]"
629
+ style={{
630
+ background:
631
+ 'radial-gradient(circle at 100% 0%, transparent 9px, #e0e0e0 9px, #e0e0e0 10px, #f6f7fa 10px)',
632
+ }}
633
+ />
634
+ </>
635
+ )}
636
+ {/* In tabs mode, hover highlights only this icon+text chip —
637
+ the tab background itself stays unchanged. No transCls:
638
+ on selection the hover bg must clear instantly, otherwise
639
+ it fades out slowly and leaves a chip-shaped ghost on the
640
+ newly selected tab */}
641
+ <span
642
+ className={cn(
643
+ 'flex items-center gap-[6px] min-w-0',
644
+ isTabs &&
645
+ cn(
646
+ 'relative rounded-[6px] px-[20px] py-[6px]',
647
+ !isSelected && 'group-hover:bg-[#F0F6FF]',
648
+ ),
649
+ )}
650
+ >
651
+ <i
652
+ className={
653
+ node.iconClass
654
+ ? node.iconClass
655
+ : node.entry
656
+ ? getEntryIconClass(node.entry)
657
+ : 'node-icon icon-bsy-form icon-new-bsy-form-25'
658
+ }
659
+ style={{ fontSize: 16, lineHeight: 1 }}
660
+ />
661
+ <span className="text-[14px] leading-[normal] truncate">
662
+ {node.name}
663
+ </span>
366
664
  </span>
367
665
  </button>
666
+ </Fragment>
368
667
  );
369
668
  }
370
669
 
371
670
  // Group pill (has descendants)
372
671
  return (
672
+ <Fragment key={node.id}>
673
+ {divider}
373
674
  <button
374
- key={node.id}
375
675
  data-entry-id={node.id}
376
676
  ref={setPillRef}
377
677
  type="button"
378
- onClick={(e) => openGroupPopover(flatNode, e)}
678
+ {...(!isTabs
679
+ ? {
680
+ onClick: (e: React.MouseEvent) => openGroupPopover(flatNode, e),
681
+ }
682
+ : {})}
379
683
  className={cn(
380
- 'flex items-center gap-[10px] shrink-0 max-w-[240px]',
684
+ 'flex items-center shrink-0 max-w-[240px]',
381
685
  transCls,
382
686
  isTabs
383
687
  ? [
384
- 'px-[16px] py-[8px] relative z-10 h-full',
385
- isGroupActive
386
- ? 'border-r border-t border-l border-[#e0e0e0] bg-[#f6f7fa] text-[#0265FF] rounded-t-[10px] rounded-b-none '
387
- : 'text-[#030303] hover:bg-[#F0F6FF] rounded-t-[8px]',
688
+ // Button stays h-full so text keeps its Y position;
689
+ // the visual tab box is the decorative span below
690
+ 'group gap-[4px] px-[10px] py-[8px] relative z-10 h-full',
691
+ isGroupActive ? 'text-[#0265FF]' : 'text-[#030303]',
388
692
  ]
389
693
  : [
390
- 'px-[10px] py-[7px] rounded-[4px]',
694
+ 'gap-[10px] px-[10px] py-[7px] rounded-[4px]',
391
695
  isGroupActive
392
696
  ? 'border border-[#0265FF] text-[#030303]'
393
697
  : 'border border-[#E0E0E0] text-[#030303] hover:bg-[#F0F6FF]',
394
698
  ],
395
699
  )}
396
700
  >
397
- <span className="flex items-center gap-[6px] min-w-0 flex-1">
701
+ {/* Visual tab box — side borders stop 10px above the bar so
702
+ the concave corner arcs can continue them; transparent
703
+ borders when inactive (decorative only, no layout shift) */}
704
+ {isTabs && (
705
+ <span
706
+ aria-hidden
707
+ className={cn(
708
+ 'pointer-events-none absolute inset-x-0 top-[6px] bottom-[10px] border-r border-t border-l border-b-none rounded-t-[10px] rounded-b-none',
709
+ isGroupActive
710
+ ? 'border-[#e0e0e0] bg-[#f6f7fa]'
711
+ : 'border-transparent',
712
+ )}
713
+ />
714
+ )}
715
+ {isTabs && isGroupActive && (
716
+ <>
717
+ {/* Fill below the tab body — covers the bar line under the tab */}
718
+ <span
719
+ aria-hidden
720
+ className="pointer-events-none absolute inset-x-0 bottom-0 h-[10px] bg-[#f6f7fa]"
721
+ />
722
+ {/* Concave corner flares. The square is shifted 1px
723
+ inward (left/right-[-9px]) so the full border ring —
724
+ including its tangent junctions with the side border
725
+ (vertical tangent) and the bar line (horizontal
726
+ tangent) — fits inside the element and paints above
727
+ the bottom fill strip */}
728
+ <span
729
+ aria-hidden
730
+ className="pointer-events-none absolute left-[-9px] bottom-0 w-[10px] h-[10px]"
731
+ style={{
732
+ background:
733
+ 'radial-gradient(circle at 0% 0%, transparent 9px, #e0e0e0 9px, #e0e0e0 10px, #f6f7fa 10px)',
734
+ }}
735
+ />
736
+ <span
737
+ aria-hidden
738
+ className="pointer-events-none absolute right-[-9px] bottom-0 w-[10px] h-[10px]"
739
+ style={{
740
+ background:
741
+ 'radial-gradient(circle at 100% 0%, transparent 9px, #e0e0e0 9px, #e0e0e0 10px, #f6f7fa 10px)',
742
+ }}
743
+ />
744
+ </>
745
+ )}
746
+ {/* In tabs mode, hover highlights only this icon+text chip —
747
+ the tab background itself stays unchanged. No transCls:
748
+ on activation the hover bg must clear instantly, otherwise
749
+ it fades out slowly and leaves a chip-shaped ghost on the
750
+ newly activated tab */}
751
+ <span
752
+ className={cn(
753
+ 'flex items-center gap-[6px] min-w-0 flex-1',
754
+ isTabs &&
755
+ cn(
756
+ 'relative rounded-[6px] px-[20px] py-[6px]',
757
+ !isGroupActive && 'group-hover:bg-[#F0F6FF]',
758
+ ),
759
+ )}
760
+ >
398
761
  <i
399
762
  className="icon-bsy-folder-close"
400
763
  style={{ fontSize: 16, lineHeight: 1 }}
@@ -405,14 +768,15 @@ export function ScrollSlider({
405
768
  </span>
406
769
  <span
407
770
  className={cn(
408
- 'shrink-0 flex items-center justify-center w-[16px] h-[16px] text-[#666666]',
771
+ 'relative shrink-0 flex items-center justify-center w-[16px] h-[16px] text-[#666666]',
409
772
  transCls,
410
- isGroupActive && 'rotate-90',
773
+ isGroupPopoverOpen && 'rotate-90',
411
774
  )}
412
775
  >
413
776
  <ChevronRightIcon size={16} />
414
777
  </span>
415
778
  </button>
779
+ </Fragment>
416
780
  );
417
781
  })}
418
782
  </div>
@@ -463,6 +827,14 @@ export function ScrollSlider({
463
827
  transCls,
464
828
  )}
465
829
  >
830
+ {/* Transparent hover bridges: keep the mouse "inside" the popover
831
+ while crossing the gap between pill and popover */}
832
+ {isTabs && (
833
+ <>
834
+ <div className="absolute left-0 right-0 -top-[6px] h-[6px]" />
835
+ <div className="absolute left-0 right-0 -bottom-[6px] h-[6px]" />
836
+ </>
837
+ )}
466
838
  <SearchInput
467
839
  placeholder='搜索表单名称'
468
840
  value={groupSearchQuery}