@xopcai/xopc 0.0.144 → 0.0.145
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/dist/browser-ext/manifest.json +1 -1
- package/dist/extensions/feishu/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/src/adapters/streaming-adapter.js +1 -1
- package/dist/extensions/telegram/src/inbound-processor.js +1 -1
- package/dist/extensions/telegram/src/plugin.js +1 -1
- package/dist/extensions/telegram/src/routing-integration.js +2 -2
- package/dist/extensions/telegram/src/workflow-progress.js +1 -1
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/extensions/weixin/src/api/api.js +1 -1
- package/dist/extensions/weixin/src/plugin.js +1 -1
- package/dist/extensions/weixin/src/workflow-progress.js +1 -1
- package/dist/gateway/static/root/assets/Combination-DolwnuKi.js +41 -0
- package/dist/gateway/static/root/assets/{activity-center-store-jITiX2vJ.js → activity-center-store-3l9ahUqb.js} +1 -1
- package/dist/gateway/static/root/assets/{agent-avatar-dicebear-EAVnrCAs.js → agent-avatar-dicebear-BEUxdhZx.js} +1 -1
- package/dist/gateway/static/root/assets/agents-1bpT0xRO.js +2 -0
- package/dist/gateway/static/root/assets/app-management-settings-panel-CRHSZJWi.js +1 -0
- package/dist/gateway/static/root/assets/{appearance-settings-DSkm9bp_.js → appearance-settings-BunADYJb.js} +1 -1
- package/dist/gateway/static/root/assets/apps-page-Cc4JgVUQ.js +1 -0
- package/dist/gateway/static/root/assets/{archive-plugin-C99N0vV6.js → archive-plugin-B6vTkH2A.js} +1 -1
- package/dist/gateway/static/root/assets/{attachment-load-CHTDqME5.js → attachment-load-BjZXzaNv.js} +1 -1
- package/dist/gateway/static/root/assets/{automation-suggestion-card-CBt6U3-S.js → automation-suggestion-card-ZDA-Stg1.js} +1 -1
- package/dist/gateway/static/root/assets/automations-page-mb0fdVpq.js +6 -0
- package/dist/gateway/static/root/assets/{binary-plugins-BRtxOLlM.js → binary-plugins-DYZfLvPz.js} +1 -1
- package/dist/gateway/static/root/assets/{block-editor-CUlXfgXd.js → block-editor-C3MUlYC9.js} +46 -46
- package/dist/gateway/static/root/assets/browser-settings-page-Bb0xhaMN.js +8 -0
- package/dist/gateway/static/root/assets/capability-presets-api-BV76yN9a.js +1 -0
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-CUcGKZqC.js +2 -0
- package/dist/gateway/static/root/assets/channel-recipient-api-fTlTnWB4.js +1 -0
- package/dist/gateway/static/root/assets/channels-settings-BlSDMGdy.js +1 -0
- package/dist/gateway/static/root/assets/channels-status-swr-CJauF1CW.js +1 -0
- package/dist/gateway/static/root/assets/{code-editor--tMO38Tr.js → code-editor-D4_k-6QN.js} +1 -1
- package/dist/gateway/static/root/assets/connector-logo-BVFNT2zW.js +1 -0
- package/dist/gateway/static/root/assets/connectors-page-CMgAFGvb.js +2 -0
- package/dist/gateway/static/root/assets/copy-to-clipboard-HOJ79TWv.js +1 -0
- package/dist/gateway/static/root/assets/{desktop-pet-C-Drhqyk.js → desktop-pet-_jUmoXd3.js} +1 -1
- package/dist/gateway/static/root/assets/{desktop-pet-settings-CRGiolqF.js → desktop-pet-settings-DwGOy4AQ.js} +1 -1
- package/dist/gateway/static/root/assets/{directory-picker-path-field-Dw1L3M84.js → directory-picker-path-field-akvF0F-u.js} +1 -1
- package/dist/gateway/static/root/assets/{dist-SwiI0Xu3.js → dist-C99RGfAH.js} +1 -1
- package/dist/gateway/static/root/assets/dreaming-settings-BLetQiYY.js +3 -0
- package/dist/gateway/static/root/assets/{extension-debug-page-Dcl8LJG_.js → extension-debug-page-Cof2ncxE.js} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-i_BXmO_x.js → extension-page-CwWktRNz.js} +1 -1
- package/dist/gateway/static/root/assets/extension-settings-page-CuggWOIl.js +1 -0
- package/dist/gateway/static/root/assets/gateway-config-api-B7sxIbza.js +1 -0
- package/dist/gateway/static/root/assets/gateway-settings-DIv0eKMf.js +1 -0
- package/dist/gateway/static/root/assets/gateway-startup-retry-DtoLihQE.js +1 -0
- package/dist/gateway/static/root/assets/goal-create-dialog-C4Kw0mfS.js +1 -0
- package/dist/gateway/static/root/assets/goal-detail-page-BMmzYpZL.js +4 -0
- package/dist/gateway/static/root/assets/goals-config-api-B0jm5JaA.js +1 -0
- package/dist/gateway/static/root/assets/goals-page-CGeT77PC.js +2 -0
- package/dist/gateway/static/root/assets/goals-settings-N5_iL7es.js +1 -0
- package/dist/gateway/static/root/assets/heartbeat-settings-XzH3lbRR.js +1 -0
- package/dist/gateway/static/root/assets/{html-workspace-editor-COqmtESs.js → html-workspace-editor-C3DKAkMc.js} +1 -1
- package/dist/gateway/static/root/assets/index-CSLF84-Q.css +1 -0
- package/dist/gateway/static/root/assets/index-I-ZCenVw.js +259 -0
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-x_v0nrIi.js +1 -0
- package/dist/gateway/static/root/assets/locale-store-CiM-D9jA.js +1 -0
- package/dist/gateway/static/root/assets/logs-page-BSh1t8cD.js +7 -0
- package/dist/gateway/static/root/assets/markdown-editor-BvUebh3C.js +2 -0
- package/dist/gateway/static/root/assets/{markdown-split-BTRFTK0w.js → markdown-split-5rJx5flj.js} +1 -1
- package/dist/gateway/static/root/assets/{media-plugins-BABfIZPU.js → media-plugins-DYXccwAd.js} +1 -1
- package/dist/gateway/static/root/assets/messages-Cb1VMeqP.js +5 -0
- package/dist/gateway/static/root/assets/models-hub-panel-BNpTenAI.js +2 -0
- package/dist/gateway/static/root/assets/{notes-page-88QBHW9a.js → notes-page-BgLyndCO.js} +1 -1
- package/dist/gateway/static/root/assets/notes-workbench-teklkhcE.js +4 -0
- package/dist/gateway/static/root/assets/{page-tabs-je95DZOf.js → page-tabs-6Al9_sGz.js} +1 -1
- package/dist/gateway/static/root/assets/{preview-open-alternatives-BJbwi7Rc.js → preview-open-alternatives-Cm3G72Hv.js} +1 -1
- package/dist/gateway/static/root/assets/project-detail-page-CCB_dKoh.js +1 -0
- package/dist/gateway/static/root/assets/projects-page-VOAFAHYj.js +1 -0
- package/dist/gateway/static/root/assets/remote-access-hub-USYu64Ru.js +1 -0
- package/dist/gateway/static/root/assets/{save-bar-controls-qWMQ9mod.js → save-bar-controls-BYtfzu_F.js} +1 -1
- package/dist/gateway/static/root/assets/{schedule-field-kxd270Gs.js → schedule-field-CvIRc6yK.js} +1 -1
- package/dist/gateway/static/root/assets/{schema-form-DLnD-MuD.js → schema-form-CQuKx0n7.js} +1 -1
- package/dist/gateway/static/root/assets/sessions-page-oGC8O5h_.js +1 -0
- package/dist/gateway/static/root/assets/settings-advanced-gate-D4rP66R1.js +1 -0
- package/dist/gateway/static/root/assets/{settings-collapsible-section-DQprvu5J.js → settings-collapsible-section-CF3HHM-t.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-form-section-Cqq7Y98y.js → settings-form-section-CwWjoRN6.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-loading-skeleton-b6rXULL5.js → settings-loading-skeleton-aUFmJa13.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-BtBVz3cX.js → settings-page-B2UUU9TF.js} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-layout-BNJbtklV.js → settings-page-layout-DqpbTWqI.js} +1 -1
- package/dist/gateway/static/root/assets/setup-status-panel-Ck9keROI.js +1 -0
- package/dist/gateway/static/root/assets/share-preview-page-BOhlPsS1.js +2 -0
- package/dist/gateway/static/root/assets/shares-settings-BYLsCuqj.js +1 -0
- package/dist/gateway/static/root/assets/skill-reload-api-BNHUyVML.js +1 -0
- package/dist/gateway/static/root/assets/skills-page-CpXbQH4n.js +2 -0
- package/dist/gateway/static/root/assets/{system-settings-panel-Cq9J7i7v.js → system-settings-panel-CWxSvuwD.js} +1 -1
- package/dist/gateway/static/root/assets/{theme-store-Bt6vAkSB.js → theme-store-C9Dxcppm.js} +1 -1
- package/dist/gateway/static/root/assets/{typed-models-lib-CdSwi1gT.js → typed-models-lib-qROAvqTw.js} +1 -1
- package/dist/gateway/static/root/assets/use-channel-catalog-DE9cpn4G.js +1 -0
- package/dist/gateway/static/root/assets/user-context-page-DbNEK4Yp.js +1 -0
- package/dist/gateway/static/root/assets/user-profile-fields-editor-CWxc0ghP.js +1 -0
- package/dist/gateway/static/root/assets/{user-profile-settings-panel-B8hlamVB.js → user-profile-settings-panel-DW-Up6vt.js} +1 -1
- package/dist/gateway/static/root/assets/{utils-Dx01V8qF.js → utils-D53uRXVr.js} +1 -1
- package/dist/gateway/static/root/assets/{vendor-codemirror-C1WKjCk5.js → vendor-codemirror--gTq3YAI.js} +17 -17
- package/dist/gateway/static/root/assets/voice-api-key-field-Cs7MOrg0.js +1 -0
- package/dist/gateway/static/root/assets/work-item-detail-page-D1ziG1Pp.js +1 -0
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-D_x9ELJp.js +3 -0
- package/dist/gateway/static/root/assets/workflows-page-DHGV_n6i.js +11 -0
- package/dist/gateway/static/root/index.html +10 -10
- package/dist/package.js +1 -1
- package/dist/src/activity/emitter.js +1 -1
- package/dist/src/agent/agent-manager.js +4 -4
- package/dist/src/agent/code-intelligence/binary.js +1 -1
- package/dist/src/agent/context/project-context.js +2 -2
- package/dist/src/agent/context/workspace-seed.js +2 -2
- package/dist/src/agent/embedded/run-for-session.js +1 -1
- package/dist/src/agent/embedded/session-runner.js +3 -3
- package/dist/src/agent/embedded/session-runner.js.map +1 -1
- package/dist/src/agent/embedded/xopc-auth-storage.d.ts +3 -1
- package/dist/src/agent/embedded/xopc-auth-storage.js +11 -1
- package/dist/src/agent/embedded/xopc-auth-storage.js.map +1 -1
- package/dist/src/agent/goals/post-turn.js +2 -2
- package/dist/src/agent/ipc/bus.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-materialize.js +1 -1
- package/dist/src/agent/mcp/bundle-mcp-runtime.js +1 -1
- package/dist/src/agent/mcp/mcp-transport-config.js +1 -1
- package/dist/src/agent/mcp/mcp-transport.js +1 -1
- package/dist/src/agent/memory/dreaming/config.js +1 -1
- package/dist/src/agent/memory/plugin-discovery.js +1 -1
- package/dist/src/agent/models/manager.js +1 -1
- package/dist/src/agent/orchestration/agent-orchestrator.js +1 -1
- package/dist/src/agent/service.js +3 -3
- package/dist/src/agent/session/session-inspector.js +2 -2
- package/dist/src/agent/skills/hub-pull.js +1 -1
- package/dist/src/agent/tools/composio-tool.js +1 -1
- package/dist/src/agent/tools/goal-tool.js +2 -2
- package/dist/src/agent/tools/workflow-tool.js +1 -1
- package/dist/src/agent/tools/xopc-use-tool.js +1 -1
- package/dist/src/agent/workspace-runtime/registry.js +2 -2
- package/dist/src/agent-runtime/index.js +1 -1
- package/dist/src/agent-runtime/runtime-profile.js +1 -1
- package/dist/src/automations/api/routes.js +1 -1
- package/dist/src/automations/service/action-executor.js +2 -2
- package/dist/src/browser/cdp-local-launcher.js +1 -1
- package/dist/src/browser/providers/browser-ext-install.js +3 -3
- package/dist/src/browser/providers/cloakbrowser.js +2 -2
- package/dist/src/browser/providers/playwright-doctor.js +1 -1
- package/dist/src/browser/stealth.js +1 -1
- package/dist/src/capabilities/store-connector.js +1 -1
- package/dist/src/chat-commands/agent-edit.js +1 -1
- package/dist/src/chat-commands/builtins/config.js +1 -1
- package/dist/src/chat-commands/builtins/goal.js +2 -2
- package/dist/src/chat-commands/context.js +1 -1
- package/dist/src/cli/commands/agent.js +1 -1
- package/dist/src/cli/commands/doctor/checks/database-schema.js +2 -2
- package/dist/src/cli/commands/doctor/checks/session-integrity.js +1 -1
- package/dist/src/cli/commands/extension-marketplace.js +1 -1
- package/dist/src/cli/commands/extension-pack.js +1 -1
- package/dist/src/cli/commands/goal.js +2 -2
- package/dist/src/cli/commands/init.js +1 -1
- package/dist/src/cli/commands/project.js +3 -3
- package/dist/src/config/agent-profile.js +1 -1
- package/dist/src/config/gateway-bind.js +1 -1
- package/dist/src/config/index.js +3 -3
- package/dist/src/config/loader.js +1 -1
- package/dist/src/config/models-json.js +1 -1
- package/dist/src/config/schema.d.ts +60 -5
- package/dist/src/config/schema.js +30 -9
- package/dist/src/config/schema.js.map +1 -1
- package/dist/src/connectors/composio-catalog.js +11 -2
- package/dist/src/connectors/composio-catalog.js.map +1 -1
- package/dist/src/connectors/composio-sessions.js +1 -1
- package/dist/src/connectors/composio.js +1 -1
- package/dist/src/connectors/connector-memory-sync.js +135 -26
- package/dist/src/connectors/connector-memory-sync.js.map +1 -1
- package/dist/src/daemon/launchd.js +1 -1
- package/dist/src/daemon/systemd.js +1 -1
- package/dist/src/extensions/discover-extensions.js +1 -1
- package/dist/src/extensions/loader.js +2 -2
- package/dist/src/gateway/agents-admin.js +1 -1
- package/dist/src/gateway/heartbeat/service.js +1 -1
- package/dist/src/gateway/hono/app.js +1 -1
- package/dist/src/gateway/hono/app.js.map +1 -1
- package/dist/src/gateway/hono/lib/config-payload.d.ts +11 -0
- package/dist/src/gateway/hono/lib/config-payload.js +1 -0
- package/dist/src/gateway/hono/lib/config-payload.js.map +1 -1
- package/dist/src/gateway/hono/lib/static-ui.js +1 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js +6 -1
- package/dist/src/gateway/hono/routes/config-patch/misc.js.map +1 -1
- package/dist/src/gateway/hono/routes/home.js +2 -2
- package/dist/src/gateway/hono/routes/memory.js +13 -3
- package/dist/src/gateway/hono/routes/memory.js.map +1 -1
- package/dist/src/gateway/hono/routes/projects.js +5 -5
- package/dist/src/gateway/hono/routes/status.js +3 -0
- package/dist/src/gateway/hono/routes/status.js.map +1 -1
- package/dist/src/gateway/hono/routes/voice.d.ts +5 -5
- package/dist/src/gateway/hono/routes/voice.js +288 -62
- package/dist/src/gateway/hono/routes/voice.js.map +1 -1
- package/dist/src/gateway/hono/routes/workflows.js +1 -1
- package/dist/src/gateway/hono/routes/you.js +11 -7
- package/dist/src/gateway/hono/routes/you.js.map +1 -1
- package/dist/src/gateway/lock.js +1 -1
- package/dist/src/gateway/ports.js +1 -1
- package/dist/src/gateway/service.d.ts +8 -0
- package/dist/src/gateway/service.js +47 -17
- package/dist/src/gateway/service.js.map +1 -1
- package/dist/src/goals/goal-workflow-judge.js +1 -1
- package/dist/src/heartbeat/index.js +1 -1
- package/dist/src/infra/ports.js +1 -1
- package/dist/src/infra/ssh-tunnel.js +1 -1
- package/dist/src/infra/update-check.js +1 -1
- package/dist/src/knowledge/connected-knowledge-pipeline.d.ts +21 -0
- package/dist/src/knowledge/connected-knowledge-pipeline.js +267 -0
- package/dist/src/knowledge/connected-knowledge-pipeline.js.map +1 -0
- package/dist/src/knowledge/coordinator.d.ts +10 -0
- package/dist/src/knowledge/coordinator.js +52 -0
- package/dist/src/knowledge/coordinator.js.map +1 -0
- package/dist/src/knowledge/index.d.ts +2 -0
- package/dist/src/knowledge/index.js +3 -1
- package/dist/src/knowledge/ingestion-service.d.ts +7 -1
- package/dist/src/knowledge/ingestion-service.js +28 -0
- package/dist/src/knowledge/ingestion-service.js.map +1 -1
- package/dist/src/knowledge/types.d.ts +18 -0
- package/dist/src/media-understanding/audio-transcription-runner.js +5 -3
- package/dist/src/media-understanding/audio-transcription-runner.js.map +1 -1
- package/dist/src/media-understanding/runner.js +8 -3
- package/dist/src/media-understanding/runner.js.map +1 -1
- package/dist/src/media-understanding/types.d.ts +7 -0
- package/dist/src/migrations/runner.js +1 -1
- package/dist/src/notes/service.js +3 -3
- package/dist/src/notes/store.js +1 -1
- package/dist/src/projects/project-service.js +1 -1
- package/dist/src/projects/workspace.js +1 -1
- package/dist/src/routing/agent-session-key.js +1 -1
- package/dist/src/routing/resolve-route.js +1 -1
- package/dist/src/routing/resolve-tui-session-key.js +1 -1
- package/dist/src/session/init-session-turn.js +1 -1
- package/dist/src/session/resolve-session.js +1 -1
- package/dist/src/session/session-title.js +2 -2
- package/dist/src/session/store.js +1 -1
- package/dist/src/storage/sqlite/connection.js +1 -1
- package/dist/src/storage/sqlite/index.d.ts +1 -1
- package/dist/src/storage/sqlite/index.js +2 -2
- package/dist/src/storage/sqlite/knowledge-repository.d.ts +26 -1
- package/dist/src/storage/sqlite/knowledge-repository.js +120 -6
- package/dist/src/storage/sqlite/knowledge-repository.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/037_connected_knowledge_pipeline.sql +47 -0
- package/dist/src/storage/sqlite/migrations/runner.d.ts +1 -1
- package/dist/src/storage/sqlite/migrations/runner.js +3 -3
- package/dist/src/storage/sqlite/migrations/runner.js.map +1 -1
- package/dist/src/storage/sqlite/migrations/runner.ts +1 -1
- package/dist/src/storage/sqlite/row-mappers.js +1 -1
- package/dist/src/storage/sqlite/schema.js +1 -1
- package/dist/src/tui/backends/embedded-backend.js +4 -4
- package/dist/src/tui/clipboard-image.js +1 -1
- package/dist/src/tui/tui-command-formatters.js +2 -2
- package/dist/src/tui/tui-commands.js +3 -3
- package/dist/src/tui/tui.js +1 -1
- package/dist/src/user-context/projection.d.ts +13 -4
- package/dist/src/user-context/projection.js +19 -7
- package/dist/src/user-context/projection.js.map +1 -1
- package/dist/src/utils/index.js +1 -1
- package/dist/src/utils/logger/index.js +1 -1
- package/dist/src/utils/logger.js +1 -1
- package/dist/src/voice/language-profile.d.ts +20 -0
- package/dist/src/voice/language-profile.js +156 -0
- package/dist/src/voice/language-profile.js.map +1 -0
- package/dist/src/voice/local/model-files.d.ts +14 -0
- package/dist/src/voice/local/model-files.js +94 -0
- package/dist/src/voice/local/model-files.js.map +1 -0
- package/dist/src/voice/local/model-manager.d.ts +18 -0
- package/dist/src/voice/local/model-manager.js +135 -0
- package/dist/src/voice/local/model-manager.js.map +1 -0
- package/dist/src/voice/local/models.d.ts +28 -0
- package/dist/src/voice/local/models.js +101 -0
- package/dist/src/voice/local/models.js.map +1 -0
- package/dist/src/voice/local/runtime-client.d.ts +26 -0
- package/dist/src/voice/local/runtime-client.js +166 -0
- package/dist/src/voice/local/runtime-client.js.map +1 -0
- package/dist/src/voice/local/runtime-dispatcher.d.ts +9 -0
- package/dist/src/voice/local/runtime-dispatcher.js +22 -0
- package/dist/src/voice/local/runtime-dispatcher.js.map +1 -0
- package/dist/src/voice/local/runtime-worker.d.ts +1 -0
- package/dist/src/voice/local/runtime-worker.js +249 -0
- package/dist/src/voice/local/runtime-worker.js.map +1 -0
- package/dist/src/voice/local/wav.d.ts +6 -0
- package/dist/src/voice/local/wav.js +69 -0
- package/dist/src/voice/local/wav.js.map +1 -0
- package/dist/src/voice/metadata/builtin.js +46 -0
- package/dist/src/voice/metadata/builtin.js.map +1 -1
- package/dist/src/voice/stt/factory.js +8 -2
- package/dist/src/voice/stt/factory.js.map +1 -1
- package/dist/src/voice/stt/providers/alibaba-transcription.js +14 -8
- package/dist/src/voice/stt/providers/alibaba-transcription.js.map +1 -1
- package/dist/src/voice/stt/providers/index.d.ts +1 -0
- package/dist/src/voice/stt/providers/index.js +2 -1
- package/dist/src/voice/stt/providers/local-transcription.d.ts +2 -0
- package/dist/src/voice/stt/providers/local-transcription.js +51 -0
- package/dist/src/voice/stt/providers/local-transcription.js.map +1 -0
- package/dist/src/voice/stt/providers/openai-transcription.js +5 -3
- package/dist/src/voice/stt/providers/openai-transcription.js.map +1 -1
- package/dist/src/voice/stt/transcribe-core.js +5 -4
- package/dist/src/voice/stt/transcribe-core.js.map +1 -1
- package/dist/src/voice/stt/types.d.ts +4 -0
- package/dist/src/voice/stt/types.js +5 -4
- package/dist/src/voice/stt/types.js.map +1 -1
- package/dist/src/voice/tts/providers/edge-speech.js +2 -2
- package/dist/src/voice/tts/providers/edge-speech.js.map +1 -1
- package/dist/src/voice/tts/types.js +3 -3
- package/dist/src/voice/tts/types.js.map +1 -1
- package/dist/src/work-items/work-item-service.js +1 -1
- package/dist/src/workflows/draft/workflow-draft-service.js +1 -1
- package/dist/src/workflows/service/workflow-session-bridge.js +3 -3
- package/package.json +3 -1
- package/dist/gateway/static/root/assets/Combination-HAlzriaz.js +0 -41
- package/dist/gateway/static/root/assets/agents-5rTuJOtT.js +0 -2
- package/dist/gateway/static/root/assets/app-management-settings-panel-Bu568NpC.js +0 -1
- package/dist/gateway/static/root/assets/apps-page-DWetalKp.js +0 -1
- package/dist/gateway/static/root/assets/automations-page-ICUfxeOz.js +0 -4
- package/dist/gateway/static/root/assets/browser-settings-page-D7Bj4MKi.js +0 -8
- package/dist/gateway/static/root/assets/capability-presets-api-Bg1ntFSD.js +0 -1
- package/dist/gateway/static/root/assets/capability-presets-settings-panel-C-8I-Ktn.js +0 -2
- package/dist/gateway/static/root/assets/channel-recipient-api-DuulnhIj.js +0 -1
- package/dist/gateway/static/root/assets/channels-settings-Dm5EqQyK.js +0 -1
- package/dist/gateway/static/root/assets/channels-status-swr-B5lVrUsN.js +0 -1
- package/dist/gateway/static/root/assets/connectors-page-BOzjh-OK.js +0 -2
- package/dist/gateway/static/root/assets/dreaming-settings-CF21cbjo.js +0 -3
- package/dist/gateway/static/root/assets/extension-settings-page-CWIi7xsn.js +0 -1
- package/dist/gateway/static/root/assets/fetch-8QNN25Sh.js +0 -1
- package/dist/gateway/static/root/assets/gateway-config-api-2sLP2kkA.js +0 -1
- package/dist/gateway/static/root/assets/gateway-settings-DMHiZc-2.js +0 -1
- package/dist/gateway/static/root/assets/gateway-startup-retry-5YBnS9Fj.js +0 -1
- package/dist/gateway/static/root/assets/goal-create-dialog-CAODVDiA.js +0 -1
- package/dist/gateway/static/root/assets/goal-detail-page-_d4DjmeX.js +0 -4
- package/dist/gateway/static/root/assets/goals-config-api-B4qeLKQS.js +0 -1
- package/dist/gateway/static/root/assets/goals-page-lgsop664.js +0 -2
- package/dist/gateway/static/root/assets/goals-settings-Dx_1ZNgb.js +0 -1
- package/dist/gateway/static/root/assets/heartbeat-settings-DeTseEk_.js +0 -1
- package/dist/gateway/static/root/assets/index-CphxClbs.css +0 -1
- package/dist/gateway/static/root/assets/index-VWvztcst.js +0 -257
- package/dist/gateway/static/root/assets/keyboard-shortcuts-settings-BpwpMmlk.js +0 -1
- package/dist/gateway/static/root/assets/locale-store-Ba72bFmP.js +0 -1
- package/dist/gateway/static/root/assets/logs-page-9_hbTg3j.js +0 -7
- package/dist/gateway/static/root/assets/markdown-editor-jD1LPiP-.js +0 -2
- package/dist/gateway/static/root/assets/messages-CzKxM6I4.js +0 -5
- package/dist/gateway/static/root/assets/models-hub-panel-B1CUvZxh.js +0 -2
- package/dist/gateway/static/root/assets/notes-workbench-CerZOeLW.js +0 -2
- package/dist/gateway/static/root/assets/project-detail-page-BmrApldl.js +0 -1
- package/dist/gateway/static/root/assets/projects-page-tTn-k76N.js +0 -1
- package/dist/gateway/static/root/assets/remote-access-hub-DeA2-pOi.js +0 -1
- package/dist/gateway/static/root/assets/sessions-page-D4kvvcL1.js +0 -1
- package/dist/gateway/static/root/assets/settings-advanced-gate-CI1OG4gq.js +0 -1
- package/dist/gateway/static/root/assets/setup-status-panel-cmclUJzS.js +0 -1
- package/dist/gateway/static/root/assets/share-preview-page--zO-A1W1.js +0 -2
- package/dist/gateway/static/root/assets/shares-settings-DNJvqA67.js +0 -1
- package/dist/gateway/static/root/assets/skill-reload-api-DWr_0Xgn.js +0 -1
- package/dist/gateway/static/root/assets/skills-page-DEGsTbJx.js +0 -2
- package/dist/gateway/static/root/assets/use-channel-catalog-COXIfXcl.js +0 -1
- package/dist/gateway/static/root/assets/user-context-page-C-V73ZaJ.js +0 -1
- package/dist/gateway/static/root/assets/user-profile-fields-editor-B1cxoGkh.js +0 -1
- package/dist/gateway/static/root/assets/voice-api-key-field-DGpIUelZ.js +0 -1
- package/dist/gateway/static/root/assets/work-item-detail-page-fzWTxF26.js +0 -1
- package/dist/gateway/static/root/assets/workflow-run-setup-panel-Dt_x8LGg.js +0 -3
- package/dist/gateway/static/root/assets/workflows-page-Bg02zEUh.js +0 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edge-speech.js","names":[],"sources":["../../../../../src/voice/tts/providers/edge-speech.ts"],"sourcesContent":["/**\n * Edge TTS provider — wraps the `node-edge-tts` package. Requires no API key\n * (Microsoft's Edge browser endpoint is unauthenticated).\n *\n * Implementation notes:\n * - Temp-file dance (mkdtemp → ttsPromise → readFileSync → rm) is required\n * because `node-edge-tts` does not expose a stream-to-buffer API.\n * - `synthesizeStream` is implemented as \"synthesize + wrap as single-chunk\n * stream\" so callers see uniform behavior. This is not a true network\n * stream; it's buffered-then-wrapped.\n * - `inferEdgeExtension` derives the file extension from Edge's outputFormat\n * string.\n */\n\nimport { mkdtempSync, readFileSync, rmSync, statSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport path from 'node:path';\n\nimport { createLogger } from '../../../utils/logger.js';\nimport { registerSpeechProvider } from '../speech-registry.js';\nimport type {\n SpeechDirectiveTokenParseContext,\n SpeechDirectiveTokenParseResult,\n SpeechProviderConfig,\n SpeechProviderConfiguredContext,\n SpeechProviderPlugin,\n SpeechProviderResolveConfigContext,\n SpeechSynthesisRequest,\n SpeechSynthesisResult,\n SpeechSynthesisStreamRequest,\n SpeechSynthesisStreamResult,\n} from '../speech-provider-types.js';\n\nconst log = createLogger('SpeechProvider:Edge');\n\nconst DEFAULT_VOICE = 'en-US-MichelleNeural';\nconst DEFAULT_LANG = 'en-US';\nconst DEFAULT_OUTPUT_FORMAT = 'audio-24khz-48kbitrate-mono-mp3';\n\ninterface EdgeTtsConfig extends Record<string, unknown> {\n voice: string;\n lang: string;\n outputFormat: string;\n pitch?: string;\n rate?: string;\n volume?: string;\n proxy?: string;\n enabled: boolean;\n}\n\nfunction trimToUndefined(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction asObject(value: unknown): Record<string, unknown> | undefined {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction inferEdgeExtension(outputFormat: string): { ext: string; format: string } {\n const normalized = outputFormat.toLowerCase();\n if (normalized.includes('webm')) return { ext: 'webm', format: 'webm' };\n if (normalized.includes('opus')) return { ext: 'opus', format: 'opus' };\n if (normalized.includes('ogg')) return { ext: 'ogg', format: 'ogg' };\n if (normalized.includes('wav') || normalized.includes('riff') || normalized.includes('pcm')) {\n return { ext: 'wav', format: 'wav' };\n }\n return { ext: 'mp3', format: 'mp3' };\n}\n\nfunction normalizeConfig(rawConfig: Record<string, unknown>): EdgeTtsConfig {\n const raw = asObject(rawConfig.edge) ?? rawConfig;\n return {\n voice: trimToUndefined(raw.voice ?? raw.voiceId) ?? DEFAULT_VOICE,\n lang: trimToUndefined(raw.lang) ?? DEFAULT_LANG,\n outputFormat: trimToUndefined(raw.outputFormat) ?? DEFAULT_OUTPUT_FORMAT,\n pitch: trimToUndefined(raw.pitch),\n rate: trimToUndefined(raw.rate),\n volume: trimToUndefined(raw.volume),\n proxy: trimToUndefined(raw.proxy),\n enabled: raw.enabled !== false, // default-on\n };\n}\n\nfunction readProviderConfig(config: SpeechProviderConfig): EdgeTtsConfig {\n return {\n voice: trimToUndefined(config.voice ?? config.voiceId) ?? DEFAULT_VOICE,\n lang: trimToUndefined(config.lang) ?? DEFAULT_LANG,\n outputFormat: trimToUndefined(config.outputFormat) ?? DEFAULT_OUTPUT_FORMAT,\n pitch: trimToUndefined(config.pitch),\n rate: trimToUndefined(config.rate),\n volume: trimToUndefined(config.volume),\n proxy: trimToUndefined(config.proxy),\n enabled: config.enabled !== false,\n };\n}\n\nfunction parseDirectiveTokenInternal(\n ctx: SpeechDirectiveTokenParseContext,\n): SpeechDirectiveTokenParseResult {\n switch (ctx.key) {\n case 'voice':\n case 'voice_id':\n case 'voiceid':\n case 'edge_voice':\n case 'edgevoice':\n if (!ctx.policy.allowVoice) {\n return { handled: true };\n }\n return { handled: true, overrides: { voice: ctx.value } };\n default:\n return { handled: false };\n }\n}\n\nasync function waitForNonEmptyFile(filePath: string, timeoutMs: number): Promise<void> {\n const deadline = Date.now() + Math.min(Math.max(timeoutMs, 1000), 5000);\n while (Date.now() < deadline) {\n try {\n if (statSync(filePath).size > 0) return;\n } catch {\n // The Edge package may resolve before the file is visible on slower filesystems.\n }\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n}\n\nasync function synthesizeToBuffer(\n text: string,\n config: EdgeTtsConfig,\n voiceOverride: string | undefined,\n timeoutMs: number,\n): Promise<{ buffer: Buffer; outputFormat: string; ext: string }> {\n // Lazy import — node-edge-tts loads ws transitively; skip cost for users that\n // never enable the edge provider.\n const { EdgeTTS } = await import('node-edge-tts');\n\n const voice = voiceOverride ?? config.voice;\n const tempDir = mkdtempSync(path.join(tmpdir(), 'tts-edge-'));\n const { ext, format } = inferEdgeExtension(config.outputFormat);\n const outputPath = path.join(tempDir, `speech-${Date.now()}.${ext}`);\n\n try {\n log.debug(\n { voice, outputFormat: config.outputFormat, textLength: text.length },\n 'Calling Edge TTS',\n );\n const tts = new EdgeTTS({\n voice,\n lang: config.lang,\n outputFormat: config.outputFormat,\n proxy: config.proxy,\n rate: config.rate,\n pitch: config.pitch,\n volume: config.volume,\n timeout: timeoutMs,\n });\n await tts.ttsPromise(text, outputPath);\n await waitForNonEmptyFile(outputPath, timeoutMs);\n const buffer = readFileSync(outputPath);\n if (buffer.length === 0) {\n throw new Error(`Edge TTS produced an empty ${format} file for voice ${voice}`);\n }\n return { buffer, outputFormat: format, ext };\n } finally {\n try {\n rmSync(tempDir, { recursive: true, force: true });\n } catch (cleanupError) {\n log.warn({ err: cleanupError, tempDir }, 'Failed to cleanup Edge TTS temp directory');\n }\n }\n}\n\nexport const edgeSpeechProvider: SpeechProviderPlugin = {\n id: 'edge',\n autoSelectOrder: 100,\n\n resolveConfig: (ctx: SpeechProviderResolveConfigContext) => normalizeConfig(ctx.rawConfig),\n\n isConfigured: (ctx: SpeechProviderConfiguredContext) => readProviderConfig(ctx.providerConfig).enabled,\n\n parseDirectiveToken: parseDirectiveTokenInternal,\n\n // Edge has hundreds of voices; we don't enumerate them statically. UI should\n // call upstream Microsoft endpoint for the full catalog.\n listVoices: async () => [{ id: DEFAULT_VOICE, name: DEFAULT_VOICE, locale: DEFAULT_LANG }],\n\n synthesize: async (req: SpeechSynthesisRequest): Promise<SpeechSynthesisResult> => {\n const config = readProviderConfig(req.providerConfig);\n if (!config.enabled) {\n throw new Error('Edge TTS is disabled in config (messages.tts.providers.edge.enabled = false)');\n }\n const overrides = req.providerOverrides ?? {};\n const voiceOverride = trimToUndefined(overrides.voice ?? overrides.voiceId);\n const { buffer, outputFormat, ext } = await synthesizeToBuffer(\n req.text,\n config,\n voiceOverride,\n req.timeoutMs,\n );\n return {\n audioBuffer: buffer,\n outputFormat,\n fileExtension: ext,\n voiceCompatible: outputFormat === 'opus' || outputFormat === 'ogg',\n };\n },\n\n // True streaming would require a node-edge-tts upstream change. We expose a\n // \"fake stream\" (single chunk) so callers don't fall through to speak-core's\n // wrapBufferAsStream branch and can treat all providers uniformly.\n synthesizeStream: async (req: SpeechSynthesisStreamRequest): Promise<SpeechSynthesisStreamResult> => {\n const config = readProviderConfig(req.providerConfig);\n if (!config.enabled) {\n throw new Error('Edge TTS is disabled in config (messages.tts.providers.edge.enabled = false)');\n }\n const overrides = req.providerOverrides ?? {};\n const voiceOverride = trimToUndefined(overrides.voice ?? overrides.voiceId);\n const { buffer, outputFormat, ext } = await synthesizeToBuffer(\n req.text,\n config,\n voiceOverride,\n req.timeoutMs,\n );\n const audioStream = new ReadableStream<Uint8Array>({\n start(controller) {\n controller.enqueue(new Uint8Array(buffer));\n controller.close();\n },\n });\n return {\n audioStream,\n outputFormat,\n fileExtension: ext,\n voiceCompatible: outputFormat === 'opus' || outputFormat === 'ogg',\n };\n },\n};\n\nregisterSpeechProvider(edgeSpeechProvider);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"edge-speech.js","names":[],"sources":["../../../../../src/voice/tts/providers/edge-speech.ts"],"sourcesContent":["/**\n * Edge TTS provider — wraps the `node-edge-tts` package. Requires no API key\n * (Microsoft's Edge browser endpoint is unauthenticated).\n *\n * Implementation notes:\n * - Temp-file dance (mkdtemp → ttsPromise → readFileSync → rm) is required\n * because `node-edge-tts` does not expose a stream-to-buffer API.\n * - `synthesizeStream` is implemented as \"synthesize + wrap as single-chunk\n * stream\" so callers see uniform behavior. This is not a true network\n * stream; it's buffered-then-wrapped.\n * - `inferEdgeExtension` derives the file extension from Edge's outputFormat\n * string.\n */\n\nimport { mkdtempSync, readFileSync, rmSync, statSync } from 'node:fs';\nimport { tmpdir } from 'node:os';\nimport path from 'node:path';\n\nimport { createLogger } from '../../../utils/logger.js';\nimport { registerSpeechProvider } from '../speech-registry.js';\nimport type {\n SpeechDirectiveTokenParseContext,\n SpeechDirectiveTokenParseResult,\n SpeechProviderConfig,\n SpeechProviderConfiguredContext,\n SpeechProviderPlugin,\n SpeechProviderResolveConfigContext,\n SpeechSynthesisRequest,\n SpeechSynthesisResult,\n SpeechSynthesisStreamRequest,\n SpeechSynthesisStreamResult,\n} from '../speech-provider-types.js';\n\nconst log = createLogger('SpeechProvider:Edge');\n\nconst DEFAULT_VOICE = 'zh-CN-XiaoxiaoNeural';\nconst DEFAULT_LANG = 'zh-CN';\nconst DEFAULT_OUTPUT_FORMAT = 'audio-24khz-48kbitrate-mono-mp3';\n\ninterface EdgeTtsConfig extends Record<string, unknown> {\n voice: string;\n lang: string;\n outputFormat: string;\n pitch?: string;\n rate?: string;\n volume?: string;\n proxy?: string;\n enabled: boolean;\n}\n\nfunction trimToUndefined(value: unknown): string | undefined {\n if (typeof value !== 'string') {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction asObject(value: unknown): Record<string, unknown> | undefined {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nfunction inferEdgeExtension(outputFormat: string): { ext: string; format: string } {\n const normalized = outputFormat.toLowerCase();\n if (normalized.includes('webm')) return { ext: 'webm', format: 'webm' };\n if (normalized.includes('opus')) return { ext: 'opus', format: 'opus' };\n if (normalized.includes('ogg')) return { ext: 'ogg', format: 'ogg' };\n if (normalized.includes('wav') || normalized.includes('riff') || normalized.includes('pcm')) {\n return { ext: 'wav', format: 'wav' };\n }\n return { ext: 'mp3', format: 'mp3' };\n}\n\nfunction normalizeConfig(rawConfig: Record<string, unknown>): EdgeTtsConfig {\n const raw = asObject(rawConfig.edge) ?? rawConfig;\n return {\n voice: trimToUndefined(raw.voice ?? raw.voiceId) ?? DEFAULT_VOICE,\n lang: trimToUndefined(raw.lang) ?? DEFAULT_LANG,\n outputFormat: trimToUndefined(raw.outputFormat) ?? DEFAULT_OUTPUT_FORMAT,\n pitch: trimToUndefined(raw.pitch),\n rate: trimToUndefined(raw.rate),\n volume: trimToUndefined(raw.volume),\n proxy: trimToUndefined(raw.proxy),\n enabled: raw.enabled !== false, // default-on\n };\n}\n\nfunction readProviderConfig(config: SpeechProviderConfig): EdgeTtsConfig {\n return {\n voice: trimToUndefined(config.voice ?? config.voiceId) ?? DEFAULT_VOICE,\n lang: trimToUndefined(config.lang) ?? DEFAULT_LANG,\n outputFormat: trimToUndefined(config.outputFormat) ?? DEFAULT_OUTPUT_FORMAT,\n pitch: trimToUndefined(config.pitch),\n rate: trimToUndefined(config.rate),\n volume: trimToUndefined(config.volume),\n proxy: trimToUndefined(config.proxy),\n enabled: config.enabled !== false,\n };\n}\n\nfunction parseDirectiveTokenInternal(\n ctx: SpeechDirectiveTokenParseContext,\n): SpeechDirectiveTokenParseResult {\n switch (ctx.key) {\n case 'voice':\n case 'voice_id':\n case 'voiceid':\n case 'edge_voice':\n case 'edgevoice':\n if (!ctx.policy.allowVoice) {\n return { handled: true };\n }\n return { handled: true, overrides: { voice: ctx.value } };\n default:\n return { handled: false };\n }\n}\n\nasync function waitForNonEmptyFile(filePath: string, timeoutMs: number): Promise<void> {\n const deadline = Date.now() + Math.min(Math.max(timeoutMs, 1000), 5000);\n while (Date.now() < deadline) {\n try {\n if (statSync(filePath).size > 0) return;\n } catch {\n // The Edge package may resolve before the file is visible on slower filesystems.\n }\n await new Promise((resolve) => setTimeout(resolve, 50));\n }\n}\n\nasync function synthesizeToBuffer(\n text: string,\n config: EdgeTtsConfig,\n voiceOverride: string | undefined,\n timeoutMs: number,\n): Promise<{ buffer: Buffer; outputFormat: string; ext: string }> {\n // Lazy import — node-edge-tts loads ws transitively; skip cost for users that\n // never enable the edge provider.\n const { EdgeTTS } = await import('node-edge-tts');\n\n const voice = voiceOverride ?? config.voice;\n const tempDir = mkdtempSync(path.join(tmpdir(), 'tts-edge-'));\n const { ext, format } = inferEdgeExtension(config.outputFormat);\n const outputPath = path.join(tempDir, `speech-${Date.now()}.${ext}`);\n\n try {\n log.debug(\n { voice, outputFormat: config.outputFormat, textLength: text.length },\n 'Calling Edge TTS',\n );\n const tts = new EdgeTTS({\n voice,\n lang: config.lang,\n outputFormat: config.outputFormat,\n proxy: config.proxy,\n rate: config.rate,\n pitch: config.pitch,\n volume: config.volume,\n timeout: timeoutMs,\n });\n await tts.ttsPromise(text, outputPath);\n await waitForNonEmptyFile(outputPath, timeoutMs);\n const buffer = readFileSync(outputPath);\n if (buffer.length === 0) {\n throw new Error(`Edge TTS produced an empty ${format} file for voice ${voice}`);\n }\n return { buffer, outputFormat: format, ext };\n } finally {\n try {\n rmSync(tempDir, { recursive: true, force: true });\n } catch (cleanupError) {\n log.warn({ err: cleanupError, tempDir }, 'Failed to cleanup Edge TTS temp directory');\n }\n }\n}\n\nexport const edgeSpeechProvider: SpeechProviderPlugin = {\n id: 'edge',\n autoSelectOrder: 100,\n\n resolveConfig: (ctx: SpeechProviderResolveConfigContext) => normalizeConfig(ctx.rawConfig),\n\n isConfigured: (ctx: SpeechProviderConfiguredContext) => readProviderConfig(ctx.providerConfig).enabled,\n\n parseDirectiveToken: parseDirectiveTokenInternal,\n\n // Edge has hundreds of voices; we don't enumerate them statically. UI should\n // call upstream Microsoft endpoint for the full catalog.\n listVoices: async () => [{ id: DEFAULT_VOICE, name: DEFAULT_VOICE, locale: DEFAULT_LANG }],\n\n synthesize: async (req: SpeechSynthesisRequest): Promise<SpeechSynthesisResult> => {\n const config = readProviderConfig(req.providerConfig);\n if (!config.enabled) {\n throw new Error('Edge TTS is disabled in config (messages.tts.providers.edge.enabled = false)');\n }\n const overrides = req.providerOverrides ?? {};\n const voiceOverride = trimToUndefined(overrides.voice ?? overrides.voiceId);\n const { buffer, outputFormat, ext } = await synthesizeToBuffer(\n req.text,\n config,\n voiceOverride,\n req.timeoutMs,\n );\n return {\n audioBuffer: buffer,\n outputFormat,\n fileExtension: ext,\n voiceCompatible: outputFormat === 'opus' || outputFormat === 'ogg',\n };\n },\n\n // True streaming would require a node-edge-tts upstream change. We expose a\n // \"fake stream\" (single chunk) so callers don't fall through to speak-core's\n // wrapBufferAsStream branch and can treat all providers uniformly.\n synthesizeStream: async (req: SpeechSynthesisStreamRequest): Promise<SpeechSynthesisStreamResult> => {\n const config = readProviderConfig(req.providerConfig);\n if (!config.enabled) {\n throw new Error('Edge TTS is disabled in config (messages.tts.providers.edge.enabled = false)');\n }\n const overrides = req.providerOverrides ?? {};\n const voiceOverride = trimToUndefined(overrides.voice ?? overrides.voiceId);\n const { buffer, outputFormat, ext } = await synthesizeToBuffer(\n req.text,\n config,\n voiceOverride,\n req.timeoutMs,\n );\n const audioStream = new ReadableStream<Uint8Array>({\n start(controller) {\n controller.enqueue(new Uint8Array(buffer));\n controller.close();\n },\n });\n return {\n audioStream,\n outputFormat,\n fileExtension: ext,\n voiceCompatible: outputFormat === 'opus' || outputFormat === 'ogg',\n };\n },\n};\n\nregisterSpeechProvider(edgeSpeechProvider);\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
//#region src/voice/tts/types.ts
|
|
2
2
|
const DEFAULT_TTS_CONFIG = {
|
|
3
|
-
enabled:
|
|
3
|
+
enabled: true,
|
|
4
4
|
provider: "edge",
|
|
5
|
-
trigger: "
|
|
5
|
+
trigger: "inbound",
|
|
6
6
|
fallback: {
|
|
7
7
|
enabled: true,
|
|
8
8
|
order: [
|
|
@@ -13,7 +13,7 @@ const DEFAULT_TTS_CONFIG = {
|
|
|
13
13
|
]
|
|
14
14
|
},
|
|
15
15
|
maxTextLength: 512,
|
|
16
|
-
timeoutMs:
|
|
16
|
+
timeoutMs: 6e4,
|
|
17
17
|
summarization: { enabled: true },
|
|
18
18
|
modelOverrides: {
|
|
19
19
|
enabled: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/voice/tts/types.ts"],"sourcesContent":["/**\n * TTS (Text-to-Speech) Types\n */\n\n/** Built-in provider ids shipped in core. Extensions add more at runtime. */\nexport type BuiltinTTSProvider = 'openai' | 'alibaba' | 'edge' | 'minimax' | 'tts-local-cli';\n\n/** Any registered SpeechProviderPlugin id (built-in or extension). */\nexport type TTSProvider = string;\n\nexport type TTSAutoMode = 'off' | 'always' | 'inbound' | 'tagged';\n\nexport interface TTSOptions {\n /** Voice ID */\n voice?: string;\n /** Speed (0.25 - 4.0) */\n speed?: number;\n /** Output format */\n format?: 'opus' | 'mp3' | 'wav';\n /** Model ID (for provider-specific model selection) */\n model?: string;\n /** Request timeout in milliseconds */\n timeoutMs?: number;\n}\n\nexport interface TTSResult {\n /** Audio buffer */\n audio: Buffer;\n /** Format */\n format: string;\n /** Duration in seconds (if available) */\n duration?: number;\n /** Provider that generated the speech */\n provider: string;\n}\n\nexport interface TTSProviderInterface {\n /** Provider name */\n name: string;\n /** Convert text to speech */\n speak(text: string, options?: TTSOptions): Promise<TTSResult>;\n /** Check if provider is configured */\n isConfigured(): boolean;\n}\n\nexport interface TTSModelOverrideConfig {\n /** Enable model-provided overrides for TTS */\n enabled?: boolean;\n /** Allow model-provided TTS text blocks */\n allowText?: boolean;\n /** Allow model-provided provider override (default: false) */\n allowProvider?: boolean;\n /** Allow model-provided voice/voiceId override */\n allowVoice?: boolean;\n /** Allow model-provided modelId override */\n allowModelId?: boolean;\n /** Allow model-provided voice settings override */\n allowVoiceSettings?: boolean;\n /** Allow model-provided normalization or language overrides */\n allowNormalization?: boolean;\n /** Allow model-provided seed override */\n allowSeed?: boolean;\n}\n\nexport interface TTSConfig {\n enabled: boolean;\n provider: TTSProvider;\n /** Trigger mode: auto = reply with voice when user sends voice */\n trigger: TTSAutoMode;\n /** Fallback configuration */\n fallback?: {\n enabled: boolean;\n order: TTSProvider[];\n };\n /** Maximum text length for TTS */\n maxTextLength?: number;\n /** API request timeout (ms) */\n timeoutMs?: number;\n /** Long-text summarization before TTS */\n summarization?: TTSSummarizationConfig;\n /** Allow model to override TTS parameters */\n modelOverrides?: TTSModelOverrideConfig;\n /** Provider settings map (`messages.tts.providers.<id>`). */\n providers?: Record<string, Record<string, unknown>>;\n}\n\nexport interface TTSSummarizationConfig {\n /** When true (default), long text is summarized via LLM before TTS */\n enabled?: boolean;\n targetLength?: number;\n threshold?: number;\n model?: string;\n}\n\nexport const DEFAULT_TTS_CONFIG: TTSConfig = {\n enabled:
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/voice/tts/types.ts"],"sourcesContent":["/**\n * TTS (Text-to-Speech) Types\n */\n\n/** Built-in provider ids shipped in core. Extensions add more at runtime. */\nexport type BuiltinTTSProvider = 'openai' | 'alibaba' | 'edge' | 'minimax' | 'tts-local-cli';\n\n/** Any registered SpeechProviderPlugin id (built-in or extension). */\nexport type TTSProvider = string;\n\nexport type TTSAutoMode = 'off' | 'always' | 'inbound' | 'tagged';\n\nexport interface TTSOptions {\n /** Voice ID */\n voice?: string;\n /** Speed (0.25 - 4.0) */\n speed?: number;\n /** Output format */\n format?: 'opus' | 'mp3' | 'wav';\n /** Model ID (for provider-specific model selection) */\n model?: string;\n /** Request timeout in milliseconds */\n timeoutMs?: number;\n}\n\nexport interface TTSResult {\n /** Audio buffer */\n audio: Buffer;\n /** Format */\n format: string;\n /** Duration in seconds (if available) */\n duration?: number;\n /** Provider that generated the speech */\n provider: string;\n}\n\nexport interface TTSProviderInterface {\n /** Provider name */\n name: string;\n /** Convert text to speech */\n speak(text: string, options?: TTSOptions): Promise<TTSResult>;\n /** Check if provider is configured */\n isConfigured(): boolean;\n}\n\nexport interface TTSModelOverrideConfig {\n /** Enable model-provided overrides for TTS */\n enabled?: boolean;\n /** Allow model-provided TTS text blocks */\n allowText?: boolean;\n /** Allow model-provided provider override (default: false) */\n allowProvider?: boolean;\n /** Allow model-provided voice/voiceId override */\n allowVoice?: boolean;\n /** Allow model-provided modelId override */\n allowModelId?: boolean;\n /** Allow model-provided voice settings override */\n allowVoiceSettings?: boolean;\n /** Allow model-provided normalization or language overrides */\n allowNormalization?: boolean;\n /** Allow model-provided seed override */\n allowSeed?: boolean;\n}\n\nexport interface TTSConfig {\n enabled: boolean;\n provider: TTSProvider;\n /** Trigger mode: auto = reply with voice when user sends voice */\n trigger: TTSAutoMode;\n /** Fallback configuration */\n fallback?: {\n enabled: boolean;\n order: TTSProvider[];\n };\n /** Maximum text length for TTS */\n maxTextLength?: number;\n /** API request timeout (ms) */\n timeoutMs?: number;\n /** Long-text summarization before TTS */\n summarization?: TTSSummarizationConfig;\n /** Allow model to override TTS parameters */\n modelOverrides?: TTSModelOverrideConfig;\n /** Provider settings map (`messages.tts.providers.<id>`). */\n providers?: Record<string, Record<string, unknown>>;\n}\n\nexport interface TTSSummarizationConfig {\n /** When true (default), long text is summarized via LLM before TTS */\n enabled?: boolean;\n targetLength?: number;\n threshold?: number;\n model?: string;\n}\n\nexport const DEFAULT_TTS_CONFIG: TTSConfig = {\n enabled: true,\n provider: 'edge',\n trigger: 'inbound',\n fallback: {\n enabled: true,\n order: ['openai', 'alibaba', 'minimax', 'edge'],\n },\n maxTextLength: 512, // Conservative default to accommodate all providers (Alibaba limit is 512)\n timeoutMs: 60000,\n summarization: {\n enabled: true,\n },\n modelOverrides: {\n enabled: true,\n allowText: true,\n allowProvider: false,\n allowVoice: true,\n allowModelId: true,\n allowVoiceSettings: false,\n allowNormalization: false,\n allowSeed: false,\n },\n providers: {\n alibaba: { model: 'qwen-tts', voice: 'Cherry' },\n openai: { model: 'tts-1', voice: 'alloy' },\n edge: {\n enabled: true,\n voice: 'en-US-MichelleNeural',\n lang: 'en-US',\n outputFormat: 'audio-24khz-48kbitrate-mono-mp3',\n },\n minimax: { model: 'speech-2.8-hd', voice: 'male-qn-qingse' },\n },\n};\n\n/** TTS directive parse result */\nexport interface TtsDirectiveParseResult {\n cleanedText: string;\n ttsText?: string;\n hasDirective: boolean;\n overrides: TtsDirectiveOverrides;\n warnings: string[];\n}\n\n/** TTS directive overrides */\nexport interface TtsDirectiveOverrides {\n ttsText?: string;\n provider?: TTSProvider;\n openai?: {\n voice?: string;\n model?: string;\n };\n alibaba?: {\n voice?: string;\n model?: string;\n };\n edge?: {\n voice?: string;\n };\n minimax?: {\n voice?: string;\n model?: string;\n };\n}\n\n/** Provider attempt result (TTS fallback chain) */\nexport type ProviderAttemptOutcome = 'success' | 'skipped' | 'failed';\n\n/** Provider failure reason classification */\nexport type ProviderFailureReason =\n | 'success'\n | 'not_configured'\n | 'timeout'\n | 'provider_error'\n | 'text_too_long'\n | 'unknown';\n\n/** Single provider attempt in a TTS fallback chain */\nexport interface ProviderAttempt {\n provider: string;\n outcome: ProviderAttemptOutcome;\n reasonCode: ProviderFailureReason;\n latencyMs: number;\n error?: string;\n}\n\n/** TTS result including fallback / preprocessing metadata */\nexport interface TTSResultWithTracking extends TTSResult {\n attempts: ProviderAttempt[];\n fallbackFrom?: string;\n attemptedProviders: string[];\n wasPreprocessed?: boolean;\n ttsText?: string;\n wasSummarized?: boolean;\n}\n\n/** Last TTS call diagnostics (memory-only) */\nexport interface TtsStatusEntry {\n timestamp: number;\n success: boolean;\n provider?: string;\n latencyMs?: number;\n error?: string;\n textLength?: number;\n audioSize?: number;\n audioFormat?: string;\n usedFallback?: boolean;\n wasSummarized?: boolean;\n}\n\nexport interface TtsRuntimeStatus {\n lastAttempt?: TtsStatusEntry;\n recentSuccessRate?: number;\n totalCalls: number;\n totalSuccesses: number;\n totalFailures: number;\n}\n"],"mappings":";AA8FA,MAAa,qBAAgC;CAC3C,SAAS;CACT,UAAU;CACV,SAAS;CACT,UAAU;EACR,SAAS;EACT,OAAO;GAAC;GAAU;GAAW;GAAW;GAAO;EAChD;CACD,eAAe;CACf,WAAW;CACX,eAAe,EACb,SAAS,MACV;CACD,gBAAgB;EACd,SAAS;EACT,WAAW;EACX,eAAe;EACf,YAAY;EACZ,cAAc;EACd,oBAAoB;EACpB,oBAAoB;EACpB,WAAW;EACZ;CACD,WAAW;EACT,SAAS;GAAE,OAAO;GAAY,OAAO;GAAU;EAC/C,QAAQ;GAAE,OAAO;GAAS,OAAO;GAAS;EAC1C,MAAM;GACJ,SAAS;GACT,OAAO;GACP,MAAM;GACN,cAAc;GACf;EACD,SAAS;GAAE,OAAO;GAAiB,OAAO;GAAkB;EAC7D;CACF"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { changedFieldsFromPatch, emitActivity, systemActivityActor, systemActivitySource } from "../activity/emitter.js";
|
|
1
2
|
import { deleteMediaBuffer, mimeTypeFromMediaPath, saveMediaBuffer } from "../media/store.js";
|
|
2
3
|
import { readMediaReference } from "../media/media-reference.js";
|
|
3
|
-
import { changedFieldsFromPatch, emitActivity, systemActivityActor, systemActivitySource } from "../activity/emitter.js";
|
|
4
4
|
import { WorkItemStore } from "./work-item-store.js";
|
|
5
5
|
//#region src/work-items/work-item-service.ts
|
|
6
6
|
const WORK_ITEM_ATTACHMENT_MAX_BYTES = 25 * 1024 * 1024;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
|
|
2
1
|
import { createLogger } from "../../utils/logger/index.js";
|
|
3
2
|
import { init_logger } from "../../utils/logger.js";
|
|
3
|
+
import { getAgentDefaultModelRef, init_schema } from "../../config/schema.js";
|
|
4
4
|
import { getDefaultModelSync, init_providers, resolveModel } from "../../providers/index.js";
|
|
5
5
|
import { completeWithResolvedCredentials } from "../../providers/model-call.js";
|
|
6
6
|
import { resolveModelRef } from "../../config/agent-typed-models.js";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
+
import "../../session/types.js";
|
|
2
|
+
import { upsertMemoryRecord } from "../../storage/sqlite/memory-records-repository.js";
|
|
3
|
+
import "../../storage/sqlite/index.js";
|
|
1
4
|
import { renderWorkflowText } from "../../agent/workflow/snapshot.js";
|
|
2
5
|
import { runViewToSnapshot } from "./run-view-to-snapshot.js";
|
|
3
6
|
import { GoalWorkflowJudge } from "../../goals/goal-workflow-judge.js";
|
|
4
7
|
import "../../goals/index.js";
|
|
5
|
-
import "../../session/types.js";
|
|
6
|
-
import { upsertMemoryRecord } from "../../storage/sqlite/memory-records-repository.js";
|
|
7
|
-
import "../../storage/sqlite/index.js";
|
|
8
8
|
import { isTerminalWorkflowRunStatus } from "../domain/run.js";
|
|
9
9
|
import "../domain/index.js";
|
|
10
10
|
import { WorkItemWorkflowJudge } from "../../work-items/work-item-workflow-judge.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xopcai/xopc",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.145",
|
|
4
4
|
"description": "Local-first AI system that remembers context, coordinates AI, and sustains long-term progress.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -73,6 +73,7 @@
|
|
|
73
73
|
"@earendil-works/pi-tui": "0.80.10",
|
|
74
74
|
"@grammyjs/runner": "^2.0.3",
|
|
75
75
|
"@hono/node-server": "^2.0.4",
|
|
76
|
+
"@huggingface/transformers": "3.8.1",
|
|
76
77
|
"@inquirer/prompts": "^8.5.0",
|
|
77
78
|
"@larksuiteoapi/node-sdk": "^1.66.0",
|
|
78
79
|
"@modelcontextprotocol/sdk": "1.29.0",
|
|
@@ -103,6 +104,7 @@
|
|
|
103
104
|
"playwright-core": "^1.60.0",
|
|
104
105
|
"proper-lockfile": "^4.1.2",
|
|
105
106
|
"semver": "^7.8.1",
|
|
107
|
+
"sherpa-onnx-node": "1.13.4",
|
|
106
108
|
"silk-wasm": "^3.7.1",
|
|
107
109
|
"thread-stream": "^4.2.0",
|
|
108
110
|
"undici": "^8.5.0",
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-aKtaBQYM.js";import{a as t,i as n,t as r}from"./vendor-react-BOUWij0V.js";var i=e(n(),1),a=r(),o=e(t(),1);function s(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function c(...e){return t=>{let n=!1,r=e.map(e=>{let r=s(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t<r.length;t++){let n=r[t];typeof n==`function`?n():s(e[t],null)}}}}function l(...e){return o.useCallback(c(...e),e)}typeof window<`u`&&window.document&&window.document.createElement;function u(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e?.(r),n===!1||!r.defaultPrevented)return t?.(r)}}function d(e,t){let n=o.createContext(t),r=e=>{let{children:t,...r}=e,i=o.useMemo(()=>r,Object.values(r));return(0,a.jsx)(n.Provider,{value:i,children:t})};r.displayName=e+`Provider`;function i(r){let i=o.useContext(n);if(i)return i;if(t!==void 0)return t;throw Error(`\`${r}\` must be used within \`${e}\``)}return[r,i]}function f(e,t=[]){let n=[];function r(t,r){let i=o.createContext(r),s=n.length;n=[...n,r];let c=t=>{let{scope:n,children:r,...c}=t,l=n?.[e]?.[s]||i,u=o.useMemo(()=>c,Object.values(c));return(0,a.jsx)(l.Provider,{value:u,children:r})};c.displayName=t+`Provider`;function l(n,a){let c=a?.[e]?.[s]||i,l=o.useContext(c);if(l)return l;if(r!==void 0)return r;throw Error(`\`${n}\` must be used within \`${t}\``)}return[c,l]}let i=()=>{let t=n.map(e=>o.createContext(e));return function(n){let r=n?.[e]||t;return o.useMemo(()=>({[`__scope${e}`]:{...n,[e]:r}}),[n,r])}};return i.scopeName=e,[r,p(i,...t)]}function p(...e){let t=e[0];if(e.length===1)return t;let n=()=>{let n=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return function(e){let r=n.reduce((t,{useScope:n,scopeName:r})=>{let i=n(e)[`__scope${r}`];return{...t,...i}},{});return o.useMemo(()=>({[`__scope${t.scopeName}`]:r}),[r])}};return n.scopeName=t.scopeName,n}function m(e){let t=h(e),n=o.forwardRef((e,n)=>{let{children:r,...i}=e,s=o.Children.toArray(r),c=s.find(v);if(c){let e=c.props.children,r=s.map(t=>t===c?o.Children.count(e)>1?o.Children.only(null):o.isValidElement(e)?e.props.children:null:t);return(0,a.jsx)(t,{...i,ref:n,children:o.isValidElement(e)?o.cloneElement(e,void 0,r):null})}return(0,a.jsx)(t,{...i,ref:n,children:r})});return n.displayName=`${e}.Slot`,n}function h(e){let t=o.forwardRef((e,t)=>{let{children:n,...r}=e;if(o.isValidElement(n)){let e=b(n),i=y(r,n.props);return n.type!==o.Fragment&&(i.ref=t?c(t,e):e),o.cloneElement(n,i)}return o.Children.count(n)>1?o.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var g=Symbol(`radix.slottable`);function _(e){let t=({children:e})=>(0,a.jsx)(a.Fragment,{children:e});return t.displayName=`${e}.Slottable`,t.__radixId=g,t}function v(e){return o.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===g}function y(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`&&(n[r]=[i,a].filter(Boolean).join(` `))}return{...e,...n}}function b(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var x=[`a`,`button`,`div`,`form`,`h2`,`h3`,`img`,`input`,`label`,`li`,`nav`,`ol`,`p`,`select`,`span`,`svg`,`ul`].reduce((e,t)=>{let n=m(`Primitive.${t}`),r=o.forwardRef((e,r)=>{let{asChild:i,...o}=e,s=i?n:t;return typeof window<`u`&&(window[Symbol.for(`radix-ui`)]=!0),(0,a.jsx)(s,{...o,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function S(e,t){e&&i.flushSync(()=>e.dispatchEvent(t))}function C(e){let t=o.useRef(e);return o.useEffect(()=>{t.current=e}),o.useMemo(()=>(...e)=>t.current?.(...e),[])}function w(e,t=globalThis?.document){let n=C(e);o.useEffect(()=>{let e=e=>{e.key===`Escape`&&n(e)};return t.addEventListener(`keydown`,e,{capture:!0}),()=>t.removeEventListener(`keydown`,e,{capture:!0})},[n,t])}var ee=`DismissableLayer`,T=`dismissableLayer.update`,E=`dismissableLayer.pointerDownOutside`,te=`dismissableLayer.focusOutside`,ne,re=o.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),D=o.forwardRef((e,t)=>{let{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:i,onFocusOutside:s,onInteractOutside:c,onDismiss:d,...f}=e,p=o.useContext(re),[m,h]=o.useState(null),g=m?.ownerDocument??globalThis?.document,[,_]=o.useState({}),v=l(t,e=>h(e)),y=Array.from(p.layers),[b]=[...p.layersWithOutsidePointerEventsDisabled].slice(-1),S=y.indexOf(b),C=m?y.indexOf(m):-1,ee=p.layersWithOutsidePointerEventsDisabled.size>0,E=C>=S,te=oe(e=>{let t=e.target,n=[...p.branches].some(e=>e.contains(t));!E||n||(i?.(e),c?.(e),e.defaultPrevented||d?.())},g),D=se(e=>{let t=e.target;[...p.branches].some(e=>e.contains(t))||(s?.(e),c?.(e),e.defaultPrevented||d?.())},g);return w(e=>{C===p.layers.size-1&&(r?.(e),!e.defaultPrevented&&d&&(e.preventDefault(),d()))},g),o.useEffect(()=>{if(m)return n&&(p.layersWithOutsidePointerEventsDisabled.size===0&&(ne=g.body.style.pointerEvents,g.body.style.pointerEvents=`none`),p.layersWithOutsidePointerEventsDisabled.add(m)),p.layers.add(m),ce(),()=>{n&&p.layersWithOutsidePointerEventsDisabled.size===1&&(g.body.style.pointerEvents=ne)}},[m,g,n,p]),o.useEffect(()=>()=>{m&&(p.layers.delete(m),p.layersWithOutsidePointerEventsDisabled.delete(m),ce())},[m,p]),o.useEffect(()=>{let e=()=>_({});return document.addEventListener(T,e),()=>document.removeEventListener(T,e)},[]),(0,a.jsx)(x.div,{...f,ref:v,style:{pointerEvents:ee?E?`auto`:`none`:void 0,...e.style},onFocusCapture:u(e.onFocusCapture,D.onFocusCapture),onBlurCapture:u(e.onBlurCapture,D.onBlurCapture),onPointerDownCapture:u(e.onPointerDownCapture,te.onPointerDownCapture)})});D.displayName=ee;var ie=`DismissableLayerBranch`,ae=o.forwardRef((e,t)=>{let n=o.useContext(re),r=o.useRef(null),i=l(t,r);return o.useEffect(()=>{let e=r.current;if(e)return n.branches.add(e),()=>{n.branches.delete(e)}},[n.branches]),(0,a.jsx)(x.div,{...e,ref:i})});ae.displayName=ie;function oe(e,t=globalThis?.document){let n=C(e),r=o.useRef(!1),i=o.useRef(()=>{});return o.useEffect(()=>{let e=e=>{if(e.target&&!r.current){let r=function(){le(E,n,a,{discrete:!0})},a={originalEvent:e};e.pointerType===`touch`?(t.removeEventListener(`click`,i.current),i.current=r,t.addEventListener(`click`,i.current,{once:!0})):r()}else t.removeEventListener(`click`,i.current);r.current=!1},a=window.setTimeout(()=>{t.addEventListener(`pointerdown`,e)},0);return()=>{window.clearTimeout(a),t.removeEventListener(`pointerdown`,e),t.removeEventListener(`click`,i.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function se(e,t=globalThis?.document){let n=C(e),r=o.useRef(!1);return o.useEffect(()=>{let e=e=>{e.target&&!r.current&&le(te,n,{originalEvent:e},{discrete:!1})};return t.addEventListener(`focusin`,e),()=>t.removeEventListener(`focusin`,e)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function ce(){let e=new CustomEvent(T);document.dispatchEvent(e)}function le(e,t,n,{discrete:r}){let i=n.originalEvent.target,a=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&i.addEventListener(e,t,{once:!0}),r?S(i,a):i.dispatchEvent(a)}var O=0;function ue(){o.useEffect(()=>{let e=document.querySelectorAll(`[data-radix-focus-guard]`);return document.body.insertAdjacentElement(`afterbegin`,e[0]??de()),document.body.insertAdjacentElement(`beforeend`,e[1]??de()),O++,()=>{O===1&&document.querySelectorAll(`[data-radix-focus-guard]`).forEach(e=>e.remove()),O--}},[])}function de(){let e=document.createElement(`span`);return e.setAttribute(`data-radix-focus-guard`,``),e.tabIndex=0,e.style.outline=`none`,e.style.opacity=`0`,e.style.position=`fixed`,e.style.pointerEvents=`none`,e}var k=`focusScope.autoFocusOnMount`,A=`focusScope.autoFocusOnUnmount`,fe={bubbles:!1,cancelable:!0},pe=`FocusScope`,me=o.forwardRef((e,t)=>{let{loop:n=!1,trapped:r=!1,onMountAutoFocus:i,onUnmountAutoFocus:s,...c}=e,[u,d]=o.useState(null),f=C(i),p=C(s),m=o.useRef(null),h=l(t,e=>d(e)),g=o.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;o.useEffect(()=>{if(r){let e=function(e){if(g.paused||!u)return;let t=e.target;u.contains(t)?m.current=t:j(m.current,{select:!0})},t=function(e){if(g.paused||!u)return;let t=e.relatedTarget;t!==null&&(u.contains(t)||j(m.current,{select:!0}))},n=function(e){if(document.activeElement===document.body)for(let t of e)t.removedNodes.length>0&&j(u)};document.addEventListener(`focusin`,e),document.addEventListener(`focusout`,t);let r=new MutationObserver(n);return u&&r.observe(u,{childList:!0,subtree:!0}),()=>{document.removeEventListener(`focusin`,e),document.removeEventListener(`focusout`,t),r.disconnect()}}},[r,u,g.paused]),o.useEffect(()=>{if(u){M.add(g);let e=document.activeElement;if(!u.contains(e)){let t=new CustomEvent(k,fe);u.addEventListener(k,f),u.dispatchEvent(t),t.defaultPrevented||(he(Se(_e(u)),{select:!0}),document.activeElement===e&&j(u))}return()=>{u.removeEventListener(k,f),setTimeout(()=>{let t=new CustomEvent(A,fe);u.addEventListener(A,p),u.dispatchEvent(t),t.defaultPrevented||j(e??document.body,{select:!0}),u.removeEventListener(A,p),M.remove(g)},0)}}},[u,f,p,g]);let _=o.useCallback(e=>{if(!n&&!r||g.paused)return;let t=e.key===`Tab`&&!e.altKey&&!e.ctrlKey&&!e.metaKey,i=document.activeElement;if(t&&i){let t=e.currentTarget,[r,a]=ge(t);r&&a?!e.shiftKey&&i===a?(e.preventDefault(),n&&j(r,{select:!0})):e.shiftKey&&i===r&&(e.preventDefault(),n&&j(a,{select:!0})):i===t&&e.preventDefault()}},[n,r,g.paused]);return(0,a.jsx)(x.div,{tabIndex:-1,...c,ref:h,onKeyDown:_})});me.displayName=pe;function he(e,{select:t=!1}={}){let n=document.activeElement;for(let r of e)if(j(r,{select:t}),document.activeElement!==n)return}function ge(e){let t=_e(e);return[ve(t,e),ve(t.reverse(),e)]}function _e(e){let t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:e=>{let t=e.tagName===`INPUT`&&e.type===`hidden`;return e.disabled||e.hidden||t?NodeFilter.FILTER_SKIP:e.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function ve(e,t){for(let n of e)if(!ye(n,{upTo:t}))return n}function ye(e,{upTo:t}){if(getComputedStyle(e).visibility===`hidden`)return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display===`none`)return!0;e=e.parentElement}return!1}function be(e){return e instanceof HTMLInputElement&&`select`in e}function j(e,{select:t=!1}={}){if(e&&e.focus){let n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&be(e)&&t&&e.select()}}var M=xe();function xe(){let e=[];return{add(t){let n=e[0];t!==n&&n?.pause(),e=N(e,t),e.unshift(t)},remove(t){e=N(e,t),e[0]?.resume()}}}function N(e,t){let n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function Se(e){return e.filter(e=>e.tagName!==`A`)}var P=globalThis?.document?o.useLayoutEffect:()=>{},Ce=o.useId||(()=>void 0),we=0;function Te(e){let[t,n]=o.useState(Ce());return P(()=>{e||n(e=>e??String(we++))},[e]),e||(t?`radix-${t}`:``)}var Ee=`Portal`,De=o.forwardRef((e,t)=>{let{container:n,...r}=e,[s,c]=o.useState(!1);P(()=>c(!0),[]);let l=n||s&&globalThis?.document?.body;return l?i.createPortal((0,a.jsx)(x.div,{...r,ref:t}),l):null});De.displayName=Ee;function Oe(e,t){return o.useReducer((e,n)=>t[e][n]??e,e)}var ke=e=>{let{present:t,children:n}=e,r=Ae(t),i=typeof n==`function`?n({present:r.isPresent}):o.Children.only(n),a=l(r.ref,je(i));return typeof n==`function`||r.isPresent?o.cloneElement(i,{ref:a}):null};ke.displayName=`Presence`;function Ae(e){let[t,n]=o.useState(),r=o.useRef(null),i=o.useRef(e),a=o.useRef(`none`),[s,c]=Oe(e?`mounted`:`unmounted`,{mounted:{UNMOUNT:`unmounted`,ANIMATION_OUT:`unmountSuspended`},unmountSuspended:{MOUNT:`mounted`,ANIMATION_END:`unmounted`},unmounted:{MOUNT:`mounted`}});return o.useEffect(()=>{let e=F(r.current);a.current=s===`mounted`?e:`none`},[s]),P(()=>{let t=r.current,n=i.current;if(n!==e){let r=a.current,o=F(t);e?c(`MOUNT`):o===`none`||t?.display===`none`?c(`UNMOUNT`):c(n&&r!==o?`ANIMATION_OUT`:`UNMOUNT`),i.current=e}},[e,c]),P(()=>{if(t){let e,n=t.ownerDocument.defaultView??window,o=a=>{let o=F(r.current).includes(CSS.escape(a.animationName));if(a.target===t&&o&&(c(`ANIMATION_END`),!i.current)){let r=t.style.animationFillMode;t.style.animationFillMode=`forwards`,e=n.setTimeout(()=>{t.style.animationFillMode===`forwards`&&(t.style.animationFillMode=r)})}},s=e=>{e.target===t&&(a.current=F(r.current))};return t.addEventListener(`animationstart`,s),t.addEventListener(`animationcancel`,o),t.addEventListener(`animationend`,o),()=>{n.clearTimeout(e),t.removeEventListener(`animationstart`,s),t.removeEventListener(`animationcancel`,o),t.removeEventListener(`animationend`,o)}}else c(`ANIMATION_END`)},[t,c]),{isPresent:[`mounted`,`unmountSuspended`].includes(s),ref:o.useCallback(e=>{r.current=e?getComputedStyle(e):null,n(e)},[])}}function F(e){return e?.animationName||`none`}function je(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var Me=o.useInsertionEffect||P;function Ne({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){let[i,a,s]=Pe({defaultProp:t,onChange:n}),c=e!==void 0,l=c?e:i;{let t=o.useRef(e!==void 0);o.useEffect(()=>{let e=t.current;e!==c&&console.warn(`${r} is changing from ${e?`controlled`:`uncontrolled`} to ${c?`controlled`:`uncontrolled`}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),t.current=c},[c,r])}return[l,o.useCallback(t=>{if(c){let n=Fe(t)?t(e):t;n!==e&&s.current?.(n)}else a(t)},[c,e,a,s])]}function Pe({defaultProp:e,onChange:t}){let[n,r]=o.useState(e),i=o.useRef(n),a=o.useRef(t);return Me(()=>{a.current=t},[t]),o.useEffect(()=>{i.current!==n&&(a.current?.(n),i.current=n)},[n,i]),[n,r,a]}function Fe(e){return typeof e==`function`}var Ie=function(e){return typeof document>`u`?null:(Array.isArray(e)?e[0]:e).ownerDocument.body},I=new WeakMap,L=new WeakMap,R={},z=0,Le=function(e){return e&&(e.host||Le(e.parentNode))},Re=function(e,t){return t.map(function(t){if(e.contains(t))return t;var n=Le(t);return n&&e.contains(n)?n:(console.error(`aria-hidden`,t,`in not contained inside`,e,`. Doing nothing`),null)}).filter(function(e){return!!e})},ze=function(e,t,n,r){var i=Re(t,Array.isArray(e)?e:[e]);R[n]||(R[n]=new WeakMap);var a=R[n],o=[],s=new Set,c=new Set(i),l=function(e){!e||s.has(e)||(s.add(e),l(e.parentNode))};i.forEach(l);var u=function(e){!e||c.has(e)||Array.prototype.forEach.call(e.children,function(e){if(s.has(e))u(e);else try{var t=e.getAttribute(r),i=t!==null&&t!==`false`,c=(I.get(e)||0)+1,l=(a.get(e)||0)+1;I.set(e,c),a.set(e,l),o.push(e),c===1&&i&&L.set(e,!0),l===1&&e.setAttribute(n,`true`),i||e.setAttribute(r,`true`)}catch(t){console.error(`aria-hidden: cannot operate on `,e,t)}})};return u(t),s.clear(),z++,function(){o.forEach(function(e){var t=I.get(e)-1,i=a.get(e)-1;I.set(e,t),a.set(e,i),t||(L.has(e)||e.removeAttribute(r),L.delete(e)),i||e.removeAttribute(n)}),z--,z||(I=new WeakMap,I=new WeakMap,L=new WeakMap,R={})}},Be=function(e,t,n){n===void 0&&(n=`data-aria-hidden`);var r=Array.from(Array.isArray(e)?e:[e]),i=t||Ie(e);return i?(r.push.apply(r,Array.from(i.querySelectorAll(`[aria-live], script`))),ze(r,i,n,`aria-hidden`)):function(){return null}},B=function(){return B=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},B.apply(this,arguments)};function Ve(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols==`function`)for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n}function He(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r<i;r++)(a||!(r in t))&&(a||=Array.prototype.slice.call(t,0,r),a[r]=t[r]);return e.concat(a||Array.prototype.slice.call(t))}var V=`right-scroll-bar-position`,H=`width-before-scroll-bar`,Ue=`with-scroll-bars-hidden`,We=`--removed-body-scroll-bar-size`;function U(e,t){return typeof e==`function`?e(t):e&&(e.current=t),e}function Ge(e,t){var n=(0,o.useState)(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(e){var t=n.value;t!==e&&(n.value=e,n.callback(e,t))}}}})[0];return n.callback=t,n.facade}var Ke=typeof window<`u`?o.useLayoutEffect:o.useEffect,qe=new WeakMap;function Je(e,t){var n=Ge(t||null,function(t){return e.forEach(function(e){return U(e,t)})});return Ke(function(){var t=qe.get(n);if(t){var r=new Set(t),i=new Set(e),a=n.current;r.forEach(function(e){i.has(e)||U(e,null)}),i.forEach(function(e){r.has(e)||U(e,a)})}qe.set(n,e)},[e]),n}function Ye(e){return e}function Xe(e,t){t===void 0&&(t=Ye);var n=[],r=!1;return{read:function(){if(r)throw Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(e){var i=t(e,r);return n.push(i),function(){n=n.filter(function(e){return e!==i})}},assignSyncMedium:function(e){for(r=!0;n.length;){var t=n;n=[],t.forEach(e)}n={push:function(t){return e(t)},filter:function(){return n}}},assignMedium:function(e){r=!0;var t=[];if(n.length){var i=n;n=[],i.forEach(e),t=n}var a=function(){var n=t;t=[],n.forEach(e)},o=function(){return Promise.resolve().then(a)};o(),n={push:function(e){t.push(e),o()},filter:function(e){return t=t.filter(e),n}}}}}function Ze(e){e===void 0&&(e={});var t=Xe(null);return t.options=B({async:!0,ssr:!1},e),t}var Qe=function(e){var t=e.sideCar,n=Ve(e,[`sideCar`]);if(!t)throw Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw Error(`Sidecar medium not found`);return o.createElement(r,B({},n))};Qe.isSideCarExport=!0;function $e(e,t){return e.useMedium(t),Qe}var et=Ze(),W=function(){},G=o.forwardRef(function(e,t){var n=o.useRef(null),r=o.useState({onScrollCapture:W,onWheelCapture:W,onTouchMoveCapture:W}),i=r[0],a=r[1],s=e.forwardProps,c=e.children,l=e.className,u=e.removeScrollBar,d=e.enabled,f=e.shards,p=e.sideCar,m=e.noRelative,h=e.noIsolation,g=e.inert,_=e.allowPinchZoom,v=e.as,y=v===void 0?`div`:v,b=e.gapMode,x=Ve(e,[`forwardProps`,`children`,`className`,`removeScrollBar`,`enabled`,`shards`,`sideCar`,`noRelative`,`noIsolation`,`inert`,`allowPinchZoom`,`as`,`gapMode`]),S=p,C=Je([n,t]),w=B(B({},x),i);return o.createElement(o.Fragment,null,d&&o.createElement(S,{sideCar:et,removeScrollBar:u,shards:f,noRelative:m,noIsolation:h,inert:g,setCallbacks:a,allowPinchZoom:!!_,lockRef:n,gapMode:b}),s?o.cloneElement(o.Children.only(c),B(B({},w),{ref:C})):o.createElement(y,B({},w,{className:l,ref:C}),c))});G.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1},G.classNames={fullWidth:H,zeroRight:V};var tt,nt=function(){if(tt)return tt;if(typeof __webpack_nonce__<`u`)return __webpack_nonce__};function rt(){if(!document)return null;var e=document.createElement(`style`);e.type=`text/css`;var t=nt();return t&&e.setAttribute(`nonce`,t),e}function it(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function at(e){(document.head||document.getElementsByTagName(`head`)[0]).appendChild(e)}var ot=function(){var e=0,t=null;return{add:function(n){e==0&&(t=rt())&&(it(t,n),at(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},st=function(){var e=ot();return function(t,n){o.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},ct=function(){var e=st();return function(t){var n=t.styles,r=t.dynamic;return e(n,r),null}},lt={left:0,top:0,right:0,gap:0},K=function(e){return parseInt(e||``,10)||0},ut=function(e){var t=window.getComputedStyle(document.body),n=t[e===`padding`?`paddingLeft`:`marginLeft`],r=t[e===`padding`?`paddingTop`:`marginTop`],i=t[e===`padding`?`paddingRight`:`marginRight`];return[K(n),K(r),K(i)]},dt=function(e){if(e===void 0&&(e=`margin`),typeof window>`u`)return lt;var t=ut(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},ft=ct(),q=`data-scroll-locked`,pt=function(e,t,n,r){var i=e.left,a=e.top,o=e.right,s=e.gap;return n===void 0&&(n=`margin`),`
|
|
2
|
-
.${Ue} {
|
|
3
|
-
overflow: hidden ${r};
|
|
4
|
-
padding-right: ${s}px ${r};
|
|
5
|
-
}
|
|
6
|
-
body[${q}] {
|
|
7
|
-
overflow: hidden ${r};
|
|
8
|
-
overscroll-behavior: contain;
|
|
9
|
-
${[t&&`position: relative ${r};`,n===`margin`&&`
|
|
10
|
-
padding-left: ${i}px;
|
|
11
|
-
padding-top: ${a}px;
|
|
12
|
-
padding-right: ${o}px;
|
|
13
|
-
margin-left:0;
|
|
14
|
-
margin-top:0;
|
|
15
|
-
margin-right: ${s}px ${r};
|
|
16
|
-
`,n===`padding`&&`padding-right: ${s}px ${r};`].filter(Boolean).join(``)}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
.${V} {
|
|
20
|
-
right: ${s}px ${r};
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
.${H} {
|
|
24
|
-
margin-right: ${s}px ${r};
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.${V} .${V} {
|
|
28
|
-
right: 0 ${r};
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
.${H} .${H} {
|
|
32
|
-
margin-right: 0 ${r};
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
body[${q}] {
|
|
36
|
-
${We}: ${s}px;
|
|
37
|
-
}
|
|
38
|
-
`},mt=function(){var e=parseInt(document.body.getAttribute(`data-scroll-locked`)||`0`,10);return isFinite(e)?e:0},ht=function(){o.useEffect(function(){return document.body.setAttribute(q,(mt()+1).toString()),function(){var e=mt()-1;e<=0?document.body.removeAttribute(q):document.body.setAttribute(q,e.toString())}},[])},gt=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,i=r===void 0?`margin`:r;ht();var a=o.useMemo(function(){return dt(i)},[i]);return o.createElement(ft,{styles:pt(a,!t,i,n?``:`!important`)})},J=!1;if(typeof window<`u`)try{var Y=Object.defineProperty({},"passive",{get:function(){return J=!0,!0}});window.addEventListener(`test`,Y,Y),window.removeEventListener(`test`,Y,Y)}catch{J=!1}var X=J?{passive:!1}:!1,_t=function(e){return e.tagName===`TEXTAREA`},vt=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!==`hidden`&&!(n.overflowY===n.overflowX&&!_t(e)&&n[t]===`visible`)},yt=function(e){return vt(e,`overflowY`)},bt=function(e){return vt(e,`overflowX`)},Z=function(e,t){var n=t.ownerDocument,r=t;do{if(typeof ShadowRoot<`u`&&r instanceof ShadowRoot&&(r=r.host),Ct(e,r)){var i=wt(e,r);if(i[1]>i[2])return!0}r=r.parentNode}while(r&&r!==n.body);return!1},xt=function(e){return[e.scrollTop,e.scrollHeight,e.clientHeight]},St=function(e){return[e.scrollLeft,e.scrollWidth,e.clientWidth]},Ct=function(e,t){return e===`v`?yt(t):bt(t)},wt=function(e,t){return e===`v`?xt(t):St(t)},Tt=function(e,t){return e===`h`&&t===`rtl`?-1:1},Et=function(e,t,n,r,i){var a=Tt(e,window.getComputedStyle(t).direction),o=a*r,s=n.target,c=t.contains(s),l=!1,u=o>0,d=0,f=0;do{if(!s)break;var p=wt(e,s),m=p[0],h=p[1]-p[2]-a*m;(m||h)&&Ct(e,s)&&(d+=h,f+=m);var g=s.parentNode;s=g&&g.nodeType===Node.DOCUMENT_FRAGMENT_NODE?g.host:g}while(!c&&s!==document.body||c&&(t.contains(s)||t===s));return(u&&(i&&Math.abs(d)<1||!i&&o>d)||!u&&(i&&Math.abs(f)<1||!i&&-o>f))&&(l=!0),l},Q=function(e){return`changedTouches`in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},Dt=function(e){return[e.deltaX,e.deltaY]},Ot=function(e){return e&&`current`in e?e.current:e},kt=function(e,t){return e[0]===t[0]&&e[1]===t[1]},At=function(e){return`
|
|
39
|
-
.block-interactivity-${e} {pointer-events: none;}
|
|
40
|
-
.allow-interactivity-${e} {pointer-events: all;}
|
|
41
|
-
`},jt=0,$=[];function Mt(e){var t=o.useRef([]),n=o.useRef([0,0]),r=o.useRef(),i=o.useState(jt++)[0],a=o.useState(ct)[0],s=o.useRef(e);o.useEffect(function(){s.current=e},[e]),o.useEffect(function(){if(e.inert){document.body.classList.add(`block-interactivity-${i}`);var t=He([e.lockRef.current],(e.shards||[]).map(Ot),!0).filter(Boolean);return t.forEach(function(e){return e.classList.add(`allow-interactivity-${i}`)}),function(){document.body.classList.remove(`block-interactivity-${i}`),t.forEach(function(e){return e.classList.remove(`allow-interactivity-${i}`)})}}},[e.inert,e.lockRef.current,e.shards]);var c=o.useCallback(function(e,t){if(`touches`in e&&e.touches.length===2||e.type===`wheel`&&e.ctrlKey)return!s.current.allowPinchZoom;var i=Q(e),a=n.current,o=`deltaX`in e?e.deltaX:a[0]-i[0],c=`deltaY`in e?e.deltaY:a[1]-i[1],l,u=e.target,d=Math.abs(o)>Math.abs(c)?`h`:`v`;if(`touches`in e&&d===`h`&&u.type===`range`)return!1;var f=window.getSelection(),p=f&&f.anchorNode;if(p&&(p===u||p.contains(u)))return!1;var m=Z(d,u);if(!m)return!0;if(m?l=d:(l=d===`v`?`h`:`v`,m=Z(d,u)),!m)return!1;if(!r.current&&`changedTouches`in e&&(o||c)&&(r.current=l),!l)return!0;var h=r.current||l;return Et(h,t,e,h===`h`?o:c,!0)},[]),l=o.useCallback(function(e){var n=e;if(!(!$.length||$[$.length-1]!==a)){var r=`deltaY`in n?Dt(n):Q(n),i=t.current.filter(function(e){return e.name===n.type&&(e.target===n.target||n.target===e.shadowParent)&&kt(e.delta,r)})[0];if(i&&i.should){n.cancelable&&n.preventDefault();return}if(!i){var o=(s.current.shards||[]).map(Ot).filter(Boolean).filter(function(e){return e.contains(n.target)});(o.length>0?c(n,o[0]):!s.current.noIsolation)&&n.cancelable&&n.preventDefault()}}},[]),u=o.useCallback(function(e,n,r,i){var a={name:e,delta:n,target:r,should:i,shadowParent:Nt(r)};t.current.push(a),setTimeout(function(){t.current=t.current.filter(function(e){return e!==a})},1)},[]),d=o.useCallback(function(e){n.current=Q(e),r.current=void 0},[]),f=o.useCallback(function(t){u(t.type,Dt(t),t.target,c(t,e.lockRef.current))},[]),p=o.useCallback(function(t){u(t.type,Q(t),t.target,c(t,e.lockRef.current))},[]);o.useEffect(function(){return $.push(a),e.setCallbacks({onScrollCapture:f,onWheelCapture:f,onTouchMoveCapture:p}),document.addEventListener(`wheel`,l,X),document.addEventListener(`touchmove`,l,X),document.addEventListener(`touchstart`,d,X),function(){$=$.filter(function(e){return e!==a}),document.removeEventListener(`wheel`,l,X),document.removeEventListener(`touchmove`,l,X),document.removeEventListener(`touchstart`,d,X)}},[]);var m=e.removeScrollBar,h=e.inert;return o.createElement(o.Fragment,null,h?o.createElement(a,{styles:At(i)}):null,m?o.createElement(gt,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function Nt(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var Pt=$e(et,Mt),Ft=o.forwardRef(function(e,t){return o.createElement(G,B({},e,{ref:t,sideCar:Pt}))});Ft.classNames=G.classNames;export{f as _,De as a,l as b,me as c,C as d,x as f,d as g,_ as h,ke as i,ue as l,m,Be as n,Te as o,S as p,Ne as r,P as s,Ft as t,D as u,u as v,c as y};
|