@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.
- package/CHANGELOG.md +18 -0
- package/dist/ai-design.js +8751 -8666
- package/dist/ai-design.js.map +1 -1
- package/dist/ai-design.umd.cjs +50 -50
- package/dist/ai-design.umd.cjs.map +1 -1
- package/dist/index.css +1 -0
- package/package.json +4 -4
- package/src/components/agent-helper/agent-helper-card/index.tsx +3 -14
- package/src/components/agent-helper/agent-helper-card-list/index.tsx +4 -5
- package/src/components/agent-scroll-selector.tsx +8 -3
- package/src/components/agent-select.tsx +3 -1
- package/src/components/bs-entry-select/build-tree.ts +49 -0
- package/src/components/bs-entry-select/entry-item.tsx +5 -3
- package/src/components/bs-entry-select/scroll-slider.tsx +443 -71
- package/src/components/bs-entry-select/types.ts +12 -0
- package/src/components/fake-bot-msg.tsx +6 -4
- package/src/components/fields-previewer.tsx +2 -2
- package/src/components/generate-animation.tsx +1 -1
- package/src/components/icons/empty-agent-icon.tsx +94 -0
- package/src/components/output-config-editor.tsx +1 -0
- package/src/index.ts +1 -0
- package/dist/ai-design.css +0 -4179
- package/dist/src/components/abs-fullscreen-gradient-bg.d.ts +0 -10
- package/dist/src/components/abs-fullscreen-gradient-bg.d.ts.map +0 -1
- package/dist/src/components/agent-helper/agent-category-select-menu/index.d.ts +0 -8
- package/dist/src/components/agent-helper/agent-category-select-menu/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/agent-entry-card/index.d.ts +0 -9
- package/dist/src/components/agent-helper/agent-entry-card/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/agent-helper-card/index.d.ts +0 -15
- package/dist/src/components/agent-helper/agent-helper-card/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/agent-helper-card-list/index.d.ts +0 -15
- package/dist/src/components/agent-helper/agent-helper-card-list/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/agent-helper-main-layout/index.d.ts +0 -30
- package/dist/src/components/agent-helper/agent-helper-main-layout/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/agent-sort-select/index.d.ts +0 -8
- package/dist/src/components/agent-helper/agent-sort-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/agent-tag/index.d.ts +0 -7
- package/dist/src/components/agent-helper/agent-tag/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/app-select/index.d.ts +0 -43
- package/dist/src/components/agent-helper/app-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/condition-group/index.d.ts +0 -15
- package/dist/src/components/agent-helper/condition-group/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/condition-input/index.d.ts +0 -30
- package/dist/src/components/agent-helper/condition-input/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/condition-item/index.d.ts +0 -16
- package/dist/src/components/agent-helper/condition-item/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/condition-quantifier-select/index.d.ts +0 -10
- package/dist/src/components/agent-helper/condition-quantifier-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/condition-trigger-description/index.d.ts +0 -12
- package/dist/src/components/agent-helper/condition-trigger-description/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/date-picker/calendar-panel.d.ts +0 -19
- package/dist/src/components/agent-helper/date-picker/calendar-panel.d.ts.map +0 -1
- package/dist/src/components/agent-helper/date-picker/date-input.d.ts +0 -4
- package/dist/src/components/agent-helper/date-picker/date-input.d.ts.map +0 -1
- package/dist/src/components/agent-helper/date-picker/date-picker.d.ts +0 -4
- package/dist/src/components/agent-helper/date-picker/date-picker.d.ts.map +0 -1
- package/dist/src/components/agent-helper/date-picker/footer-panel.d.ts +0 -10
- package/dist/src/components/agent-helper/date-picker/footer-panel.d.ts.map +0 -1
- package/dist/src/components/agent-helper/date-picker/index.d.ts +0 -4
- package/dist/src/components/agent-helper/date-picker/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/date-picker/month-panel.d.ts +0 -16
- package/dist/src/components/agent-helper/date-picker/month-panel.d.ts.map +0 -1
- package/dist/src/components/agent-helper/date-picker/time-panel.d.ts +0 -20
- package/dist/src/components/agent-helper/date-picker/time-panel.d.ts.map +0 -1
- package/dist/src/components/agent-helper/date-picker/types.d.ts +0 -28
- package/dist/src/components/agent-helper/date-picker/types.d.ts.map +0 -1
- package/dist/src/components/agent-helper/date-picker/utils.d.ts +0 -14
- package/dist/src/components/agent-helper/date-picker/utils.d.ts.map +0 -1
- package/dist/src/components/agent-helper/date-picker/year-panel.d.ts +0 -14
- package/dist/src/components/agent-helper/date-picker/year-panel.d.ts.map +0 -1
- package/dist/src/components/agent-helper/exec-log-filter/index.d.ts +0 -24
- package/dist/src/components/agent-helper/exec-log-filter/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/field-edit-preference-select/index.d.ts +0 -11
- package/dist/src/components/agent-helper/field-edit-preference-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/field-select/index.d.ts +0 -25
- package/dist/src/components/agent-helper/field-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/field-value-input/china-address-data.d.ts +0 -2
- package/dist/src/components/agent-helper/field-value-input/china-address-data.d.ts.map +0 -1
- package/dist/src/components/agent-helper/field-value-input/display.d.ts +0 -19
- package/dist/src/components/agent-helper/field-value-input/display.d.ts.map +0 -1
- package/dist/src/components/agent-helper/field-value-input/icons.d.ts +0 -8
- package/dist/src/components/agent-helper/field-value-input/icons.d.ts.map +0 -1
- package/dist/src/components/agent-helper/field-value-input/index.d.ts +0 -24
- package/dist/src/components/agent-helper/field-value-input/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/field-value-input/inputs.d.ts +0 -10
- package/dist/src/components/agent-helper/field-value-input/inputs.d.ts.map +0 -1
- package/dist/src/components/agent-helper/field-value-input/picker-inputs.d.ts +0 -16
- package/dist/src/components/agent-helper/field-value-input/picker-inputs.d.ts.map +0 -1
- package/dist/src/components/agent-helper/flow-node-action-trigger-select/index.d.ts +0 -12
- package/dist/src/components/agent-helper/flow-node-action-trigger-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/form-action-trigger-select/index.d.ts +0 -12
- package/dist/src/components/agent-helper/form-action-trigger-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/form-divider/index.d.ts +0 -7
- package/dist/src/components/agent-helper/form-divider/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/form-select/index.d.ts +0 -26
- package/dist/src/components/agent-helper/form-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/monthdays-select/index.d.ts +0 -15
- package/dist/src/components/agent-helper/monthdays-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/offset-preference-select/index.d.ts +0 -10
- package/dist/src/components/agent-helper/offset-preference-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/offset-type-select/index.d.ts +0 -17
- package/dist/src/components/agent-helper/offset-type-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/offset-unit-select/index.d.ts +0 -15
- package/dist/src/components/agent-helper/offset-unit-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/placeholder-card/index.d.ts +0 -9
- package/dist/src/components/agent-helper/placeholder-card/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/prompt-input/index.d.ts +0 -12
- package/dist/src/components/agent-helper/prompt-input/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/relational-operator-select/index.d.ts +0 -12
- package/dist/src/components/agent-helper/relational-operator-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/repeat-by-type-select/index.d.ts +0 -15
- package/dist/src/components/agent-helper/repeat-by-type-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/repeat-preference-select/index.d.ts +0 -9
- package/dist/src/components/agent-helper/repeat-preference-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/repeat-preference-type-select/index.d.ts +0 -15
- package/dist/src/components/agent-helper/repeat-preference-type-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/search-input/index.d.ts +0 -8
- package/dist/src/components/agent-helper/search-input/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/table/index.d.ts +0 -12
- package/dist/src/components/agent-helper/table/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/trigger-select/index.d.ts +0 -18
- package/dist/src/components/agent-helper/trigger-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/trigger-time-preference-select/index.d.ts +0 -14
- package/dist/src/components/agent-helper/trigger-time-preference-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/trigger-time-source-type-select/index.d.ts +0 -15
- package/dist/src/components/agent-helper/trigger-time-source-type-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-helper/weekdays-select/index.d.ts +0 -15
- package/dist/src/components/agent-helper/weekdays-select/index.d.ts.map +0 -1
- package/dist/src/components/agent-scroll-selector.d.ts +0 -12
- package/dist/src/components/agent-scroll-selector.d.ts.map +0 -1
- package/dist/src/components/agent-select.d.ts +0 -12
- package/dist/src/components/agent-select.d.ts.map +0 -1
- package/dist/src/components/attachment-part-group.d.ts +0 -16
- package/dist/src/components/attachment-part-group.d.ts.map +0 -1
- package/dist/src/components/attachment-part.d.ts +0 -19
- package/dist/src/components/attachment-part.d.ts.map +0 -1
- package/dist/src/components/attachments-previewer.d.ts +0 -18
- package/dist/src/components/attachments-previewer.d.ts.map +0 -1
- package/dist/src/components/base-button.d.ts +0 -8
- package/dist/src/components/base-button.d.ts.map +0 -1
- package/dist/src/components/border-animation.d.ts +0 -23
- package/dist/src/components/border-animation.d.ts.map +0 -1
- package/dist/src/components/border-color-animation.d.ts +0 -11
- package/dist/src/components/border-color-animation.d.ts.map +0 -1
- package/dist/src/components/bot-avatar-name.d.ts +0 -6
- package/dist/src/components/bot-avatar-name.d.ts.map +0 -1
- package/dist/src/components/bot-icon.d.ts +0 -5
- package/dist/src/components/bot-icon.d.ts.map +0 -1
- package/dist/src/components/bs-entry-select/app-group-folder.d.ts +0 -6
- package/dist/src/components/bs-entry-select/app-group-folder.d.ts.map +0 -1
- package/dist/src/components/bs-entry-select/bs-entry-select.d.ts +0 -4
- package/dist/src/components/bs-entry-select/bs-entry-select.d.ts.map +0 -1
- package/dist/src/components/bs-entry-select/build-tree.d.ts +0 -11
- package/dist/src/components/bs-entry-select/build-tree.d.ts.map +0 -1
- package/dist/src/components/bs-entry-select/entry-item.d.ts +0 -8
- package/dist/src/components/bs-entry-select/entry-item.d.ts.map +0 -1
- package/dist/src/components/bs-entry-select/entry-popover.d.ts +0 -18
- package/dist/src/components/bs-entry-select/entry-popover.d.ts.map +0 -1
- package/dist/src/components/bs-entry-select/index.d.ts +0 -4
- package/dist/src/components/bs-entry-select/index.d.ts.map +0 -1
- package/dist/src/components/bs-entry-select/other-app-section.d.ts +0 -11
- package/dist/src/components/bs-entry-select/other-app-section.d.ts.map +0 -1
- package/dist/src/components/bs-entry-select/scroll-slider.d.ts +0 -12
- package/dist/src/components/bs-entry-select/scroll-slider.d.ts.map +0 -1
- package/dist/src/components/bs-entry-select/search-input.d.ts +0 -4
- package/dist/src/components/bs-entry-select/search-input.d.ts.map +0 -1
- package/dist/src/components/bs-entry-select/tree-item-node.d.ts +0 -9
- package/dist/src/components/bs-entry-select/tree-item-node.d.ts.map +0 -1
- package/dist/src/components/bs-entry-select/types.d.ts +0 -31
- package/dist/src/components/bs-entry-select/types.d.ts.map +0 -1
- package/dist/src/components/bs-icons.d.ts +0 -99
- package/dist/src/components/bs-icons.d.ts.map +0 -1
- package/dist/src/components/card-field.d.ts +0 -11
- package/dist/src/components/card-field.d.ts.map +0 -1
- package/dist/src/components/card.d.ts +0 -11
- package/dist/src/components/card.d.ts.map +0 -1
- package/dist/src/components/chat-area-header.d.ts +0 -13
- package/dist/src/components/chat-area-header.d.ts.map +0 -1
- package/dist/src/components/check-card.d.ts +0 -7
- package/dist/src/components/check-card.d.ts.map +0 -1
- package/dist/src/components/circle-checker.d.ts +0 -10
- package/dist/src/components/circle-checker.d.ts.map +0 -1
- package/dist/src/components/collapsible-txt-msg.d.ts +0 -11
- package/dist/src/components/collapsible-txt-msg.d.ts.map +0 -1
- package/dist/src/components/collapsible.d.ts +0 -6
- package/dist/src/components/collapsible.d.ts.map +0 -1
- package/dist/src/components/confirm-dialog.d.ts +0 -26
- package/dist/src/components/confirm-dialog.d.ts.map +0 -1
- package/dist/src/components/date-range-picker.d.ts +0 -8
- package/dist/src/components/date-range-picker.d.ts.map +0 -1
- package/dist/src/components/fake-bot-msg.d.ts +0 -8
- package/dist/src/components/fake-bot-msg.d.ts.map +0 -1
- package/dist/src/components/field-checker-list-msg.d.ts +0 -19
- package/dist/src/components/field-checker-list-msg.d.ts.map +0 -1
- package/dist/src/components/field-checker.d.ts +0 -17
- package/dist/src/components/field-checker.d.ts.map +0 -1
- package/dist/src/components/field-icon.d.ts +0 -5
- package/dist/src/components/field-icon.d.ts.map +0 -1
- package/dist/src/components/field-value-checker.d.ts +0 -14
- package/dist/src/components/field-value-checker.d.ts.map +0 -1
- package/dist/src/components/fields-design-info-table.d.ts +0 -7
- package/dist/src/components/fields-design-info-table.d.ts.map +0 -1
- package/dist/src/components/fields-generating-indicator.d.ts +0 -6
- package/dist/src/components/fields-generating-indicator.d.ts.map +0 -1
- package/dist/src/components/fields-portal.d.ts +0 -8
- package/dist/src/components/fields-portal.d.ts.map +0 -1
- package/dist/src/components/fields-previewer.d.ts +0 -19
- package/dist/src/components/fields-previewer.d.ts.map +0 -1
- package/dist/src/components/font-icon.d.ts +0 -11
- package/dist/src/components/font-icon.d.ts.map +0 -1
- package/dist/src/components/form-info-editor.d.ts +0 -31
- package/dist/src/components/form-info-editor.d.ts.map +0 -1
- package/dist/src/components/formula-tag.d.ts +0 -8
- package/dist/src/components/formula-tag.d.ts.map +0 -1
- package/dist/src/components/generate-animation.d.ts +0 -5
- package/dist/src/components/generate-animation.d.ts.map +0 -1
- package/dist/src/components/icon-btn.d.ts +0 -9
- package/dist/src/components/icon-btn.d.ts.map +0 -1
- package/dist/src/components/icon-card.d.ts +0 -13
- package/dist/src/components/icon-card.d.ts.map +0 -1
- package/dist/src/components/icons/calendar-icon.d.ts +0 -4
- package/dist/src/components/icons/calendar-icon.d.ts.map +0 -1
- package/dist/src/components/icons/clear-all-icon.d.ts +0 -4
- package/dist/src/components/icons/clear-all-icon.d.ts.map +0 -1
- package/dist/src/components/icons/empty-table-icon.d.ts +0 -2
- package/dist/src/components/icons/empty-table-icon.d.ts.map +0 -1
- package/dist/src/components/icons/grids-icon.d.ts +0 -2
- package/dist/src/components/icons/grids-icon.d.ts.map +0 -1
- package/dist/src/components/img-part.d.ts +0 -10
- package/dist/src/components/img-part.d.ts.map +0 -1
- package/dist/src/components/legacy-slot.d.ts +0 -11
- package/dist/src/components/legacy-slot.d.ts.map +0 -1
- package/dist/src/components/line-checker.d.ts +0 -19
- package/dist/src/components/line-checker.d.ts.map +0 -1
- package/dist/src/components/linear-gradient-border-btn.d.ts +0 -10
- package/dist/src/components/linear-gradient-border-btn.d.ts.map +0 -1
- package/dist/src/components/linear-gradient-color-bg-animation.d.ts +0 -8
- package/dist/src/components/linear-gradient-color-bg-animation.d.ts.map +0 -1
- package/dist/src/components/memoized-markdown.d.ts +0 -5
- package/dist/src/components/memoized-markdown.d.ts.map +0 -1
- package/dist/src/components/message-content.d.ts +0 -6
- package/dist/src/components/message-content.d.ts.map +0 -1
- package/dist/src/components/number-part.d.ts +0 -9
- package/dist/src/components/number-part.d.ts.map +0 -1
- package/dist/src/components/office-container.d.ts +0 -22
- package/dist/src/components/office-container.d.ts.map +0 -1
- package/dist/src/components/option-item.d.ts +0 -9
- package/dist/src/components/option-item.d.ts.map +0 -1
- package/dist/src/components/output-config-editor.d.ts +0 -10
- package/dist/src/components/output-config-editor.d.ts.map +0 -1
- package/dist/src/components/previewer-header.d.ts +0 -21
- package/dist/src/components/previewer-header.d.ts.map +0 -1
- package/dist/src/components/primary-confirm-btn.d.ts +0 -10
- package/dist/src/components/primary-confirm-btn.d.ts.map +0 -1
- package/dist/src/components/primary-entry-btn.d.ts +0 -9
- package/dist/src/components/primary-entry-btn.d.ts.map +0 -1
- package/dist/src/components/radio-card.d.ts +0 -7
- package/dist/src/components/radio-card.d.ts.map +0 -1
- package/dist/src/components/scroll-to-bottom-btn.d.ts +0 -6
- package/dist/src/components/scroll-to-bottom-btn.d.ts.map +0 -1
- package/dist/src/components/split-line.d.ts +0 -5
- package/dist/src/components/split-line.d.ts.map +0 -1
- package/dist/src/components/square-checker.d.ts +0 -15
- package/dist/src/components/square-checker.d.ts.map +0 -1
- package/dist/src/components/subform-fields-value-checker.d.ts +0 -20
- package/dist/src/components/subform-fields-value-checker.d.ts.map +0 -1
- package/dist/src/components/tab-radio-group.d.ts +0 -20
- package/dist/src/components/tab-radio-group.d.ts.map +0 -1
- package/dist/src/components/tooltip.d.ts +0 -6
- package/dist/src/components/tooltip.d.ts.map +0 -1
- package/dist/src/components/ui/button.d.ts +0 -12
- package/dist/src/components/ui/button.d.ts.map +0 -1
- package/dist/src/components/ui/calendar.d.ts +0 -5
- package/dist/src/components/ui/calendar.d.ts.map +0 -1
- package/dist/src/components/ui/dialog.d.ts +0 -24
- package/dist/src/components/ui/dialog.d.ts.map +0 -1
- package/dist/src/components/ui/drawer.d.ts +0 -22
- package/dist/src/components/ui/drawer.d.ts.map +0 -1
- package/dist/src/components/ui/form.d.ts +0 -25
- package/dist/src/components/ui/form.d.ts.map +0 -1
- package/dist/src/components/ui/icons.d.ts +0 -176
- package/dist/src/components/ui/icons.d.ts.map +0 -1
- package/dist/src/components/ui/input.d.ts +0 -4
- package/dist/src/components/ui/input.d.ts.map +0 -1
- package/dist/src/components/ui/label.d.ts +0 -9
- package/dist/src/components/ui/label.d.ts.map +0 -1
- package/dist/src/components/ui/popover.d.ts +0 -10
- package/dist/src/components/ui/popover.d.ts.map +0 -1
- package/dist/src/components/ui/select.d.ts +0 -16
- package/dist/src/components/ui/select.d.ts.map +0 -1
- package/dist/src/components/ui/spinner.d.ts +0 -3
- package/dist/src/components/ui/spinner.d.ts.map +0 -1
- package/dist/src/components/ui/switch.d.ts +0 -7
- package/dist/src/components/ui/switch.d.ts.map +0 -1
- package/dist/src/components/ui/tabs.d.ts +0 -8
- package/dist/src/components/ui/tabs.d.ts.map +0 -1
- package/dist/src/components/ui/textarea.d.ts +0 -4
- package/dist/src/components/ui/textarea.d.ts.map +0 -1
- package/dist/src/components/ui/tooltip.d.ts +0 -13
- package/dist/src/components/ui/tooltip.d.ts.map +0 -1
- package/dist/src/components/user-txt-msg-bubble.d.ts +0 -6
- package/dist/src/components/user-txt-msg-bubble.d.ts.map +0 -1
- package/dist/src/components/warning-msg.d.ts +0 -6
- package/dist/src/components/warning-msg.d.ts.map +0 -1
- package/dist/src/const/ui.d.ts +0 -10
- package/dist/src/const/ui.d.ts.map +0 -1
- package/dist/src/hooks/use-column-appear.d.ts +0 -22
- package/dist/src/hooks/use-column-appear.d.ts.map +0 -1
- package/dist/src/hooks/use-portal-container.d.ts +0 -5
- package/dist/src/hooks/use-portal-container.d.ts.map +0 -1
- package/dist/src/hooks/use-resizable-width.d.ts +0 -28
- package/dist/src/hooks/use-resizable-width.d.ts.map +0 -1
- package/dist/src/hooks/use-select-popover-position.d.ts +0 -16
- package/dist/src/hooks/use-select-popover-position.d.ts.map +0 -1
- package/dist/src/hooks/use-shadow.d.ts +0 -25
- package/dist/src/hooks/use-shadow.d.ts.map +0 -1
- package/dist/src/index.d.ts +0 -155
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/lib/utils.d.ts +0 -7
- package/dist/src/lib/utils.d.ts.map +0 -1
- package/dist/src/stories/AbsFullscreenGradientBg.stories.d.ts +0 -17
- package/dist/src/stories/AbsFullscreenGradientBg.stories.d.ts.map +0 -1
- package/dist/src/stories/AgentCategorySelectMenu.stories.d.ts +0 -19
- package/dist/src/stories/AgentCategorySelectMenu.stories.d.ts.map +0 -1
- package/dist/src/stories/AgentEntryCard.stories.d.ts +0 -25
- package/dist/src/stories/AgentEntryCard.stories.d.ts.map +0 -1
- package/dist/src/stories/AgentHelperCard.stories.d.ts +0 -31
- package/dist/src/stories/AgentHelperCard.stories.d.ts.map +0 -1
- package/dist/src/stories/AgentHelperCardList.stories.d.ts +0 -21
- package/dist/src/stories/AgentHelperCardList.stories.d.ts.map +0 -1
- package/dist/src/stories/AgentHelperMainLayout.stories.d.ts +0 -9
- package/dist/src/stories/AgentHelperMainLayout.stories.d.ts.map +0 -1
- package/dist/src/stories/AgentScrollSelector.stories.d.ts +0 -11
- package/dist/src/stories/AgentScrollSelector.stories.d.ts.map +0 -1
- package/dist/src/stories/AgentSelect.stories.d.ts +0 -14
- package/dist/src/stories/AgentSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/AgentTag.stories.d.ts +0 -19
- package/dist/src/stories/AgentTag.stories.d.ts.map +0 -1
- package/dist/src/stories/AppSelect.stories.d.ts +0 -20
- package/dist/src/stories/AppSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/AttachmentPart.stories.d.ts +0 -23
- package/dist/src/stories/AttachmentPart.stories.d.ts.map +0 -1
- package/dist/src/stories/AttachmentPartGroup.stories.d.ts +0 -21
- package/dist/src/stories/AttachmentPartGroup.stories.d.ts.map +0 -1
- package/dist/src/stories/AttachmentsPreviewer.stories.d.ts +0 -20
- package/dist/src/stories/AttachmentsPreviewer.stories.d.ts.map +0 -1
- package/dist/src/stories/BaseButton.stories.d.ts +0 -18
- package/dist/src/stories/BaseButton.stories.d.ts.map +0 -1
- package/dist/src/stories/BorderAnimation.stories.d.ts +0 -21
- package/dist/src/stories/BorderAnimation.stories.d.ts.map +0 -1
- package/dist/src/stories/BorderColorAnimation.stories.d.ts +0 -26
- package/dist/src/stories/BorderColorAnimation.stories.d.ts.map +0 -1
- package/dist/src/stories/BotAvatarAndName.stories.d.ts +0 -18
- package/dist/src/stories/BotAvatarAndName.stories.d.ts.map +0 -1
- package/dist/src/stories/BotIcon.stories.d.ts +0 -17
- package/dist/src/stories/BotIcon.stories.d.ts.map +0 -1
- package/dist/src/stories/BsConditionInput.stories.d.ts +0 -13
- package/dist/src/stories/BsConditionInput.stories.d.ts.map +0 -1
- package/dist/src/stories/BsEntrySelect.stories.d.ts +0 -20
- package/dist/src/stories/BsEntrySelect.stories.d.ts.map +0 -1
- package/dist/src/stories/BsTooltip.stories.d.ts +0 -7
- package/dist/src/stories/BsTooltip.stories.d.ts.map +0 -1
- package/dist/src/stories/Card.stories.d.ts +0 -14
- package/dist/src/stories/Card.stories.d.ts.map +0 -1
- package/dist/src/stories/CardField.stories.d.ts +0 -13
- package/dist/src/stories/CardField.stories.d.ts.map +0 -1
- package/dist/src/stories/ChatAreaHeader.stories.d.ts +0 -14
- package/dist/src/stories/ChatAreaHeader.stories.d.ts.map +0 -1
- package/dist/src/stories/CheckCard.stories.d.ts +0 -20
- package/dist/src/stories/CheckCard.stories.d.ts.map +0 -1
- package/dist/src/stories/CircleChecker.stories.d.ts +0 -21
- package/dist/src/stories/CircleChecker.stories.d.ts.map +0 -1
- package/dist/src/stories/CollapsibleTextMsg.stories.d.ts +0 -16
- package/dist/src/stories/CollapsibleTextMsg.stories.d.ts.map +0 -1
- package/dist/src/stories/ConditionGroup.stories.d.ts +0 -11
- package/dist/src/stories/ConditionGroup.stories.d.ts.map +0 -1
- package/dist/src/stories/ConditionInput.stories.d.ts +0 -15
- package/dist/src/stories/ConditionInput.stories.d.ts.map +0 -1
- package/dist/src/stories/ConditionItem.stories.d.ts +0 -12
- package/dist/src/stories/ConditionItem.stories.d.ts.map +0 -1
- package/dist/src/stories/ConditonQuantifierSelect.stories.d.ts +0 -20
- package/dist/src/stories/ConditonQuantifierSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/ConditonTriggerDescription.stories.d.ts +0 -20
- package/dist/src/stories/ConditonTriggerDescription.stories.d.ts.map +0 -1
- package/dist/src/stories/ConfirmDialog.stories.d.ts +0 -61
- package/dist/src/stories/ConfirmDialog.stories.d.ts.map +0 -1
- package/dist/src/stories/DataTable.stories.d.ts +0 -47
- package/dist/src/stories/DataTable.stories.d.ts.map +0 -1
- package/dist/src/stories/DatePicker.stories.d.ts +0 -28
- package/dist/src/stories/DatePicker.stories.d.ts.map +0 -1
- package/dist/src/stories/ExecLogFilter.stories.d.ts +0 -13
- package/dist/src/stories/ExecLogFilter.stories.d.ts.map +0 -1
- package/dist/src/stories/FakeBotMsg.stories.d.ts +0 -21
- package/dist/src/stories/FakeBotMsg.stories.d.ts.map +0 -1
- package/dist/src/stories/FieldEditPreferenceSelect.stories.d.ts +0 -15
- package/dist/src/stories/FieldEditPreferenceSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/FieldSelect.stories.d.ts +0 -14
- package/dist/src/stories/FieldSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/FieldValueInput.stories.d.ts +0 -47
- package/dist/src/stories/FieldValueInput.stories.d.ts.map +0 -1
- package/dist/src/stories/FlowNodeActionTriggerSelect.stories.d.ts +0 -18
- package/dist/src/stories/FlowNodeActionTriggerSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/Form.stories.d.ts +0 -18
- package/dist/src/stories/Form.stories.d.ts.map +0 -1
- package/dist/src/stories/FormActionTriggerSelect.stories.d.ts +0 -18
- package/dist/src/stories/FormActionTriggerSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/FormDivider.stories.d.ts +0 -16
- package/dist/src/stories/FormDivider.stories.d.ts.map +0 -1
- package/dist/src/stories/FormInfoEditor.stories.d.ts +0 -15
- package/dist/src/stories/FormInfoEditor.stories.d.ts.map +0 -1
- package/dist/src/stories/FormSelect.stories.d.ts +0 -13
- package/dist/src/stories/FormSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/FormulaTag.stories.d.ts +0 -37
- package/dist/src/stories/FormulaTag.stories.d.ts.map +0 -1
- package/dist/src/stories/GenerateAnimation.stories.d.ts +0 -17
- package/dist/src/stories/GenerateAnimation.stories.d.ts.map +0 -1
- package/dist/src/stories/IconBtn.stories.d.ts +0 -15
- package/dist/src/stories/IconBtn.stories.d.ts.map +0 -1
- package/dist/src/stories/IconCard.stories.d.ts +0 -15
- package/dist/src/stories/IconCard.stories.d.ts.map +0 -1
- package/dist/src/stories/IconLib.d.ts +0 -12
- package/dist/src/stories/IconLib.d.ts.map +0 -1
- package/dist/src/stories/Icons.stories.d.ts +0 -24
- package/dist/src/stories/Icons.stories.d.ts.map +0 -1
- package/dist/src/stories/ImgMsgPart.stories.d.ts +0 -20
- package/dist/src/stories/ImgMsgPart.stories.d.ts.map +0 -1
- package/dist/src/stories/Input.stories.d.ts +0 -23
- package/dist/src/stories/Input.stories.d.ts.map +0 -1
- package/dist/src/stories/Label.stories.d.ts +0 -18
- package/dist/src/stories/Label.stories.d.ts.map +0 -1
- package/dist/src/stories/LegacySlot.stories.d.ts +0 -16
- package/dist/src/stories/LegacySlot.stories.d.ts.map +0 -1
- package/dist/src/stories/LineChecker.stories.d.ts +0 -23
- package/dist/src/stories/LineChecker.stories.d.ts.map +0 -1
- package/dist/src/stories/LinearGradientBorderBtn.stories.d.ts +0 -22
- package/dist/src/stories/LinearGradientBorderBtn.stories.d.ts.map +0 -1
- package/dist/src/stories/LinearGradientColorBgAnimation.stories.d.ts +0 -23
- package/dist/src/stories/LinearGradientColorBgAnimation.stories.d.ts.map +0 -1
- package/dist/src/stories/MemoizedMarkdown.stories.d.ts +0 -23
- package/dist/src/stories/MemoizedMarkdown.stories.d.ts.map +0 -1
- package/dist/src/stories/MessageContent.stories.d.ts +0 -16
- package/dist/src/stories/MessageContent.stories.d.ts.map +0 -1
- package/dist/src/stories/MonthdaysSelect.stories.d.ts +0 -14
- package/dist/src/stories/MonthdaysSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/NumbersMsgPart.stories.d.ts +0 -19
- package/dist/src/stories/NumbersMsgPart.stories.d.ts.map +0 -1
- package/dist/src/stories/OfficeContainer.stories.d.ts +0 -14
- package/dist/src/stories/OfficeContainer.stories.d.ts.map +0 -1
- package/dist/src/stories/OffsetPreferenceSelect.stories.d.ts +0 -11
- package/dist/src/stories/OffsetPreferenceSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/OffsetTypeSelect.stories.d.ts +0 -12
- package/dist/src/stories/OffsetTypeSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/OffsetUnitSelect.stories.d.ts +0 -11
- package/dist/src/stories/OffsetUnitSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/OptionItem.stories.d.ts +0 -20
- package/dist/src/stories/OptionItem.stories.d.ts.map +0 -1
- package/dist/src/stories/OutputConfigEditor.stories.d.ts +0 -9
- package/dist/src/stories/OutputConfigEditor.stories.d.ts.map +0 -1
- package/dist/src/stories/PlaceholderCard.stories.d.ts +0 -21
- package/dist/src/stories/PlaceholderCard.stories.d.ts.map +0 -1
- package/dist/src/stories/PreviewerHeader.stories.d.ts +0 -12
- package/dist/src/stories/PreviewerHeader.stories.d.ts.map +0 -1
- package/dist/src/stories/PrimaryConfirmBtn.stories.d.ts +0 -19
- package/dist/src/stories/PrimaryConfirmBtn.stories.d.ts.map +0 -1
- package/dist/src/stories/PrimaryEntryBtn.stories.d.ts +0 -26
- package/dist/src/stories/PrimaryEntryBtn.stories.d.ts.map +0 -1
- package/dist/src/stories/PromptInput.stories.d.ts +0 -14
- package/dist/src/stories/PromptInput.stories.d.ts.map +0 -1
- package/dist/src/stories/RadioCard.stories.d.ts +0 -19
- package/dist/src/stories/RadioCard.stories.d.ts.map +0 -1
- package/dist/src/stories/RelationalOperatorSelect.stories.d.ts +0 -21
- package/dist/src/stories/RelationalOperatorSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/RepeatByTypeSelect.stories.d.ts +0 -11
- package/dist/src/stories/RepeatByTypeSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/RepeatPreferenceSelect.stories.d.ts +0 -13
- package/dist/src/stories/RepeatPreferenceSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/RepeatPreferenceTypeSelect.stories.d.ts +0 -11
- package/dist/src/stories/RepeatPreferenceTypeSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/ScrollToBottom.stories.d.ts +0 -15
- package/dist/src/stories/ScrollToBottom.stories.d.ts.map +0 -1
- package/dist/src/stories/SearchInput.stories.d.ts +0 -21
- package/dist/src/stories/SearchInput.stories.d.ts.map +0 -1
- package/dist/src/stories/Select.stories.d.ts +0 -19
- package/dist/src/stories/Select.stories.d.ts.map +0 -1
- package/dist/src/stories/SplitLine.stories.d.ts +0 -9
- package/dist/src/stories/SplitLine.stories.d.ts.map +0 -1
- package/dist/src/stories/SquareChecker.stories.d.ts +0 -26
- package/dist/src/stories/SquareChecker.stories.d.ts.map +0 -1
- package/dist/src/stories/TabRadioGroup.stories.d.ts +0 -18
- package/dist/src/stories/TabRadioGroup.stories.d.ts.map +0 -1
- package/dist/src/stories/Textarea.stories.d.ts +0 -19
- package/dist/src/stories/Textarea.stories.d.ts.map +0 -1
- package/dist/src/stories/TriggerSelect.stories.d.ts +0 -16
- package/dist/src/stories/TriggerSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/TriggerTimePreferenceSelect.stories.d.ts +0 -10
- package/dist/src/stories/TriggerTimePreferenceSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/TriggerTimeSourceTypeSelect.stories.d.ts +0 -12
- package/dist/src/stories/TriggerTimeSourceTypeSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/UserTextMsgBubble.stories.d.ts +0 -14
- package/dist/src/stories/UserTextMsgBubble.stories.d.ts.map +0 -1
- package/dist/src/stories/WarningMessage.stories.d.ts +0 -16
- package/dist/src/stories/WarningMessage.stories.d.ts.map +0 -1
- package/dist/src/stories/WeekdaysSelect.stories.d.ts +0 -12
- package/dist/src/stories/WeekdaysSelect.stories.d.ts.map +0 -1
- package/dist/src/stories/collapsible.stories.d.ts +0 -8
- package/dist/src/stories/collapsible.stories.d.ts.map +0 -1
- package/dist/src/stories/drawer.stories.d.ts +0 -18
- package/dist/src/stories/drawer.stories.d.ts.map +0 -1
- package/dist/src/stories/field-checker-list-msg.stories.d.ts +0 -11
- package/dist/src/stories/field-checker-list-msg.stories.d.ts.map +0 -1
- package/dist/src/stories/field-checker.stories.d.ts +0 -13
- package/dist/src/stories/field-checker.stories.d.ts.map +0 -1
- package/dist/src/stories/field-icon.stories.d.ts +0 -15
- package/dist/src/stories/field-icon.stories.d.ts.map +0 -1
- package/dist/src/stories/field-value-checker.stories.d.ts +0 -13
- package/dist/src/stories/field-value-checker.stories.d.ts.map +0 -1
- package/dist/src/stories/fields-design-info-table.stories.d.ts +0 -14
- package/dist/src/stories/fields-design-info-table.stories.d.ts.map +0 -1
- package/dist/src/stories/fields-generating.stories.d.ts +0 -20
- package/dist/src/stories/fields-generating.stories.d.ts.map +0 -1
- package/dist/src/stories/fields-previewer.stories.d.ts +0 -19
- package/dist/src/stories/fields-previewer.stories.d.ts.map +0 -1
- package/dist/src/stories/subform-fields-value-checker.stories.d.ts +0 -9
- package/dist/src/stories/subform-fields-value-checker.stories.d.ts.map +0 -1
- package/dist/src/types.d.ts +0 -8
- 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
|
-
|
|
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
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
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
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
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
|
-
|
|
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
|
-
|
|
234
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
317
|
-
|
|
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
|
-
<
|
|
330
|
-
|
|
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
|
|
570
|
+
'flex items-center shrink-0 max-w-[240px]',
|
|
340
571
|
transCls,
|
|
341
572
|
isTabs
|
|
342
573
|
? [
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
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
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
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
|
-
|
|
678
|
+
{...(!isTabs
|
|
679
|
+
? {
|
|
680
|
+
onClick: (e: React.MouseEvent) => openGroupPopover(flatNode, e),
|
|
681
|
+
}
|
|
682
|
+
: {})}
|
|
379
683
|
className={cn(
|
|
380
|
-
'flex items-center
|
|
684
|
+
'flex items-center shrink-0 max-w-[240px]',
|
|
381
685
|
transCls,
|
|
382
686
|
isTabs
|
|
383
687
|
? [
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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}
|