@jingyi0605/codingns4dsh 0.2.1-beta.6 → 0.2.1-beta.7
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/README.en.md +4 -4
- package/README.md +19 -5
- package/THIRD_PARTY_NOTICES +5 -0
- package/assets/provider-icons/r4.svg +4 -0
- package/data/build/dist/bootstrap/dsh-connection-adapter.d.ts +1 -1
- package/data/build/dist/bootstrap/index.d.ts +1 -1
- package/data/build/dist/client/assistant-settings-styles.d.ts.map +1 -1
- package/data/build/dist/client/assistant-settings-styles.js +3 -2
- package/data/build/dist/client/assistant-settings-styles.js.map +1 -1
- package/data/build/dist/client/avatar/catalog-panel.d.ts.map +1 -1
- package/data/build/dist/client/avatar/catalog-panel.js +7 -5
- package/data/build/dist/client/avatar/catalog-panel.js.map +1 -1
- package/data/build/dist/client/avatar/catalog-picker.d.ts.map +1 -1
- package/data/build/dist/client/avatar/catalog-picker.js +2 -1
- package/data/build/dist/client/avatar/catalog-picker.js.map +1 -1
- package/data/build/dist/client/avatar/desktop-bridge.d.ts +7 -3
- package/data/build/dist/client/avatar/desktop-bridge.d.ts.map +1 -1
- package/data/build/dist/client/avatar/desktop-bridge.js +64 -5
- package/data/build/dist/client/avatar/desktop-bridge.js.map +1 -1
- package/data/build/dist/client/avatar/desktop-view.d.ts +4 -0
- package/data/build/dist/client/avatar/desktop-view.d.ts.map +1 -1
- package/data/build/dist/client/avatar/desktop-view.js +82 -5
- package/data/build/dist/client/avatar/desktop-view.js.map +1 -1
- package/data/build/dist/client/avatar/engine.d.ts.map +1 -1
- package/data/build/dist/client/avatar/engine.js +3 -2
- package/data/build/dist/client/avatar/engine.js.map +1 -1
- package/data/build/dist/client/avatar/floating.d.ts +5 -3
- package/data/build/dist/client/avatar/floating.d.ts.map +1 -1
- package/data/build/dist/client/avatar/floating.js +11 -4
- package/data/build/dist/client/avatar/floating.js.map +1 -1
- package/data/build/dist/client/avatar/image.d.ts +1 -1
- package/data/build/dist/client/avatar/image.d.ts.map +1 -1
- package/data/build/dist/client/avatar/image.js +2 -2
- package/data/build/dist/client/avatar/image.js.map +1 -1
- package/data/build/dist/client/avatar/live2d.d.ts +14 -3
- package/data/build/dist/client/avatar/live2d.d.ts.map +1 -1
- package/data/build/dist/client/avatar/live2d.js +62 -9
- package/data/build/dist/client/avatar/live2d.js.map +1 -1
- package/data/build/dist/client/avatar/loading.d.ts.map +1 -1
- package/data/build/dist/client/avatar/loading.js +3 -2
- package/data/build/dist/client/avatar/loading.js.map +1 -1
- package/data/build/dist/client/avatar/notification-bubble.d.ts +26 -0
- package/data/build/dist/client/avatar/notification-bubble.d.ts.map +1 -0
- package/data/build/dist/client/avatar/notification-bubble.js +201 -0
- package/data/build/dist/client/avatar/notification-bubble.js.map +1 -0
- package/data/build/dist/client/avatar/reaction-badge.d.ts +7 -0
- package/data/build/dist/client/avatar/reaction-badge.d.ts.map +1 -0
- package/data/build/dist/client/avatar/reaction-badge.js +11 -0
- package/data/build/dist/client/avatar/reaction-badge.js.map +1 -0
- package/data/build/dist/client/avatar/registry.d.ts +2 -1
- package/data/build/dist/client/avatar/registry.d.ts.map +1 -1
- package/data/build/dist/client/avatar/registry.js.map +1 -1
- package/data/build/dist/client/avatar/settings-panel.d.ts.map +1 -1
- package/data/build/dist/client/avatar/settings-panel.js +7 -5
- package/data/build/dist/client/avatar/settings-panel.js.map +1 -1
- package/data/build/dist/client/avatar/slot.d.ts +2 -1
- package/data/build/dist/client/avatar/slot.d.ts.map +1 -1
- package/data/build/dist/client/avatar/slot.js +5 -4
- package/data/build/dist/client/avatar/slot.js.map +1 -1
- package/data/build/dist/client/avatar/spritesheet.d.ts +4 -2
- package/data/build/dist/client/avatar/spritesheet.d.ts.map +1 -1
- package/data/build/dist/client/avatar/spritesheet.js +18 -9
- package/data/build/dist/client/avatar/spritesheet.js.map +1 -1
- package/data/build/dist/client/bundle.js +5815 -1449
- package/data/build/dist/client/bundle.js.map +1 -1
- package/data/build/dist/client/cli-catalog.d.ts +1 -1
- package/data/build/dist/client/cli-catalog.d.ts.map +1 -1
- package/data/build/dist/client/cli-catalog.js +2 -0
- package/data/build/dist/client/cli-catalog.js.map +1 -1
- package/data/build/dist/client/cli-session-config-cache.d.ts +17 -0
- package/data/build/dist/client/cli-session-config-cache.d.ts.map +1 -0
- package/data/build/dist/client/cli-session-config-cache.js +56 -0
- package/data/build/dist/client/cli-session-config-cache.js.map +1 -0
- package/data/build/dist/client/cli-settings-rpc.d.ts +5 -0
- package/data/build/dist/client/cli-settings-rpc.d.ts.map +1 -0
- package/data/build/dist/client/cli-settings-rpc.js +60 -0
- package/data/build/dist/client/cli-settings-rpc.js.map +1 -0
- package/data/build/dist/client/cli-slots.d.ts.map +1 -1
- package/data/build/dist/client/cli-slots.js +24 -40
- package/data/build/dist/client/cli-slots.js.map +1 -1
- package/data/build/dist/client/client.assistant-configuration-view.js +264 -55
- package/data/build/dist/client/client.assistant-configuration-view.js.map +1 -1
- package/data/build/dist/client/client.assistant-debug-workbench.js +4 -4
- package/data/build/dist/client/client.assistant-debug-workbench.js.map +1 -1
- package/data/build/dist/client/{client.assistant-prompts.js → client.assistant-notifications.js} +63 -2
- package/data/build/dist/client/client.assistant-notifications.js.map +1 -0
- package/data/build/dist/client/client.assistant-prompt-editor.js +4 -4
- package/data/build/dist/client/client.assistant-prompt-editor.js.map +1 -1
- package/data/build/dist/client/client.assistant-workbench.js +57 -57
- package/data/build/dist/client/client.assistant-workbench.js.map +1 -1
- package/data/build/dist/client/client.delegate-command.js +12 -25
- package/data/build/dist/client/client.delegate-command.js.map +1 -1
- package/data/build/dist/client/client.manager.js +164 -25
- package/data/build/dist/client/client.manager.js.map +1 -1
- package/data/build/dist/client/client.model-catalog-cache.js +2 -1
- package/data/build/dist/client/client.model-catalog-cache.js.map +1 -1
- package/data/build/dist/client/client.native-workspace-store.js +42 -11
- package/data/build/dist/client/client.native-workspace-store.js.map +1 -1
- package/data/build/dist/client/client.primitives-adapter.js.map +1 -1
- package/data/build/dist/client/client.react-dom.js +250 -0
- package/data/build/dist/client/client.react-dom.js.map +1 -1
- package/data/build/dist/client/client.theme.js +56 -12
- package/data/build/dist/client/client.theme.js.map +1 -1
- package/data/build/dist/client/client.transport.js +312 -44
- package/data/build/dist/client/client.transport.js.map +1 -1
- package/data/build/dist/client/debug/ui.d.ts.map +1 -1
- package/data/build/dist/client/debug/ui.js +30 -29
- package/data/build/dist/client/debug/ui.js.map +1 -1
- package/data/build/dist/client/delegate-command.d.ts.map +1 -1
- package/data/build/dist/client/delegate-command.js +12 -21
- package/data/build/dist/client/delegate-command.js.map +1 -1
- package/data/build/dist/client/desktop-assistant.js +4348 -31
- package/data/build/dist/client/external-tool-stream.d.ts.map +1 -1
- package/data/build/dist/client/external-tool-stream.js +2 -1
- package/data/build/dist/client/external-tool-stream.js.map +1 -1
- package/data/build/dist/client/features/assistant-configuration-session.js +3 -3
- package/data/build/dist/client/features/assistant-configuration-session.js.map +1 -1
- package/data/build/dist/client/features/assistant-configuration-tabs.d.ts.map +1 -1
- package/data/build/dist/client/features/assistant-configuration-tabs.js +2 -1
- package/data/build/dist/client/features/assistant-configuration-tabs.js.map +1 -1
- package/data/build/dist/client/features/assistant-configuration-view.d.ts +8 -0
- package/data/build/dist/client/features/assistant-configuration-view.d.ts.map +1 -1
- package/data/build/dist/client/features/assistant-configuration-view.js +99 -3
- package/data/build/dist/client/features/assistant-configuration-view.js.map +1 -1
- package/data/build/dist/client/features/assistant-conversation-message.d.ts.map +1 -1
- package/data/build/dist/client/features/assistant-conversation-message.js +9 -8
- package/data/build/dist/client/features/assistant-conversation-message.js.map +1 -1
- package/data/build/dist/client/features/assistant-debug-workbench.d.ts.map +1 -1
- package/data/build/dist/client/features/assistant-debug-workbench.js +3 -2
- package/data/build/dist/client/features/assistant-debug-workbench.js.map +1 -1
- package/data/build/dist/client/features/assistant-floating-call.d.ts.map +1 -1
- package/data/build/dist/client/features/assistant-floating-call.js +4 -3
- package/data/build/dist/client/features/assistant-floating-call.js.map +1 -1
- package/data/build/dist/client/features/assistant-notification-store.d.ts +66 -0
- package/data/build/dist/client/features/assistant-notification-store.d.ts.map +1 -0
- package/data/build/dist/client/features/assistant-notification-store.js +395 -0
- package/data/build/dist/client/features/assistant-notification-store.js.map +1 -0
- package/data/build/dist/client/features/assistant-realtime-call.d.ts.map +1 -1
- package/data/build/dist/client/features/assistant-realtime-call.js +13 -12
- package/data/build/dist/client/features/assistant-realtime-call.js.map +1 -1
- package/data/build/dist/client/features/assistant-voice-initialization.d.ts.map +1 -1
- package/data/build/dist/client/features/assistant-voice-initialization.js +4 -2
- package/data/build/dist/client/features/assistant-voice-initialization.js.map +1 -1
- package/data/build/dist/client/features/assistant-voice-settings-group.d.ts.map +1 -1
- package/data/build/dist/client/features/assistant-voice-settings-group.js +2 -1
- package/data/build/dist/client/features/assistant-voice-settings-group.js.map +1 -1
- package/data/build/dist/client/features/assistant-voice-settings.d.ts.map +1 -1
- package/data/build/dist/client/features/assistant-voice-settings.js +4 -3
- package/data/build/dist/client/features/assistant-voice-settings.js.map +1 -1
- package/data/build/dist/client/features/assistant-workbench-controls.d.ts.map +1 -1
- package/data/build/dist/client/features/assistant-workbench-controls.js +6 -5
- package/data/build/dist/client/features/assistant-workbench-controls.js.map +1 -1
- package/data/build/dist/client/features/assistant-workbench.d.ts.map +1 -1
- package/data/build/dist/client/features/assistant-workbench.js +11 -9
- package/data/build/dist/client/features/assistant-workbench.js.map +1 -1
- package/data/build/dist/client/features/cli-adapters.d.ts.map +1 -1
- package/data/build/dist/client/features/cli-adapters.js +140 -35
- package/data/build/dist/client/features/cli-adapters.js.map +1 -1
- package/data/build/dist/client/features/file-management-panel.d.ts.map +1 -1
- package/data/build/dist/client/features/file-management-panel.js +3 -10
- package/data/build/dist/client/features/file-management-panel.js.map +1 -1
- package/data/build/dist/client/features/global-voice-assistant.d.ts +6 -0
- package/data/build/dist/client/features/global-voice-assistant.d.ts.map +1 -1
- package/data/build/dist/client/features/global-voice-assistant.js +85 -3
- package/data/build/dist/client/features/global-voice-assistant.js.map +1 -1
- package/data/build/dist/client/features/index.d.ts +1 -0
- package/data/build/dist/client/features/index.d.ts.map +1 -1
- package/data/build/dist/client/features/index.js +3 -0
- package/data/build/dist/client/features/index.js.map +1 -1
- package/data/build/dist/client/features/lan-access-panel.d.ts.map +1 -1
- package/data/build/dist/client/features/lan-access-panel.js +6 -4
- package/data/build/dist/client/features/lan-access-panel.js.map +1 -1
- package/data/build/dist/client/features/login-protection-panel.d.ts.map +1 -1
- package/data/build/dist/client/features/login-protection-panel.js +7 -2
- package/data/build/dist/client/features/login-protection-panel.js.map +1 -1
- package/data/build/dist/client/features/mobile-access-panel.d.ts.map +1 -1
- package/data/build/dist/client/features/mobile-access-panel.js +19 -13
- package/data/build/dist/client/features/mobile-access-panel.js.map +1 -1
- package/data/build/dist/client/features/peer-host.d.ts +3 -0
- package/data/build/dist/client/features/peer-host.d.ts.map +1 -1
- package/data/build/dist/client/features/peer-host.js +412 -26
- package/data/build/dist/client/features/peer-host.js.map +1 -1
- package/data/build/dist/client/features/reverse-proxy-panel.d.ts.map +1 -1
- package/data/build/dist/client/features/reverse-proxy-panel.js +5 -4
- package/data/build/dist/client/features/reverse-proxy-panel.js.map +1 -1
- package/data/build/dist/client/features/subagent-collapsed-lineage.d.ts +9 -0
- package/data/build/dist/client/features/subagent-collapsed-lineage.d.ts.map +1 -0
- package/data/build/dist/client/features/subagent-collapsed-lineage.js +28 -0
- package/data/build/dist/client/features/subagent-collapsed-lineage.js.map +1 -0
- package/data/build/dist/client/features/subscription-usage-panel.d.ts.map +1 -1
- package/data/build/dist/client/features/subscription-usage-panel.js +4 -3
- package/data/build/dist/client/features/subscription-usage-panel.js.map +1 -1
- package/data/build/dist/client/features/terminal-enhancement-panel.d.ts.map +1 -1
- package/data/build/dist/client/features/terminal-enhancement-panel.js +6 -4
- package/data/build/dist/client/features/terminal-enhancement-panel.js.map +1 -1
- package/data/build/dist/client/features/types.d.ts +8 -0
- package/data/build/dist/client/features/types.d.ts.map +1 -1
- package/data/build/dist/client/features/voice-conversation-dialog.d.ts.map +1 -1
- package/data/build/dist/client/features/voice-conversation-dialog.js +7 -6
- package/data/build/dist/client/features/voice-conversation-dialog.js.map +1 -1
- package/data/build/dist/client/features/voice-initialization-dialog.d.ts.map +1 -1
- package/data/build/dist/client/features/voice-initialization-dialog.js +7 -6
- package/data/build/dist/client/features/voice-initialization-dialog.js.map +1 -1
- package/data/build/dist/client/features/workspace-session-enhancement-panel.d.ts.map +1 -1
- package/data/build/dist/client/features/workspace-session-enhancement-panel.js +44 -96
- package/data/build/dist/client/features/workspace-session-enhancement-panel.js.map +1 -1
- package/data/build/dist/client/file-management-dom.d.ts.map +1 -1
- package/data/build/dist/client/file-management-dom.js +42 -28
- package/data/build/dist/client/file-management-dom.js.map +1 -1
- package/data/build/dist/client/font-scale.d.ts +37 -0
- package/data/build/dist/client/font-scale.d.ts.map +1 -0
- package/data/build/dist/client/font-scale.js +56 -0
- package/data/build/dist/client/font-scale.js.map +1 -0
- package/data/build/dist/client/git-management.d.ts.map +1 -1
- package/data/build/dist/client/git-management.js +80 -37
- package/data/build/dist/client/git-management.js.map +1 -1
- package/data/build/dist/client/index.d.ts +1 -1
- package/data/build/dist/client/index.d.ts.map +1 -1
- package/data/build/dist/client/index.js +43 -1
- package/data/build/dist/client/index.js.map +1 -1
- package/data/build/dist/client/locale.d.ts.map +1 -1
- package/data/build/dist/client/locale.js +27 -2
- package/data/build/dist/client/locale.js.map +1 -1
- package/data/build/dist/client/locales/assistantWorkbench.d.ts +31 -0
- package/data/build/dist/client/locales/assistantWorkbench.d.ts.map +1 -1
- package/data/build/dist/client/locales/assistantWorkbench.js +22 -2
- package/data/build/dist/client/locales/assistantWorkbench.js.map +1 -1
- package/data/build/dist/client/locales/peerHost.d.ts.map +1 -1
- package/data/build/dist/client/locales/peerHost.js +10 -0
- package/data/build/dist/client/locales/peerHost.js.map +1 -1
- package/data/build/dist/client/locales/peerHostWorkspace.d.ts.map +1 -1
- package/data/build/dist/client/locales/peerHostWorkspace.js +16 -0
- package/data/build/dist/client/locales/peerHostWorkspace.js.map +1 -1
- package/data/build/dist/client/locales/subagentCollapsed.d.ts +53 -0
- package/data/build/dist/client/locales/subagentCollapsed.d.ts.map +1 -0
- package/data/build/dist/client/locales/subagentCollapsed.js +95 -0
- package/data/build/dist/client/locales/subagentCollapsed.js.map +1 -0
- package/data/build/dist/client/locales/terminalAuth.js +2 -2
- package/data/build/dist/client/locales/terminalAuth.js.map +1 -1
- package/data/build/dist/client/locales/usage.d.ts.map +1 -1
- package/data/build/dist/client/locales/usage.js +48 -0
- package/data/build/dist/client/locales/usage.js.map +1 -1
- package/data/build/dist/client/native-workspace-store.d.ts +10 -0
- package/data/build/dist/client/native-workspace-store.d.ts.map +1 -1
- package/data/build/dist/client/native-workspace-store.js +22 -1
- package/data/build/dist/client/native-workspace-store.js.map +1 -1
- package/data/build/dist/client/peer-host-color.d.ts +3 -0
- package/data/build/dist/client/peer-host-color.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-color.js +16 -0
- package/data/build/dist/client/peer-host-color.js.map +1 -1
- package/data/build/dist/client/peer-host-file-links.d.ts +8 -0
- package/data/build/dist/client/peer-host-file-links.d.ts.map +1 -0
- package/data/build/dist/client/peer-host-file-links.js +43 -0
- package/data/build/dist/client/peer-host-file-links.js.map +1 -0
- package/data/build/dist/client/peer-host-management-api.d.ts +2 -1
- package/data/build/dist/client/peer-host-management-api.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-management-api.js +2 -1
- package/data/build/dist/client/peer-host-management-api.js.map +1 -1
- package/data/build/dist/client/peer-host-native-projection.d.ts +16 -8
- package/data/build/dist/client/peer-host-native-projection.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-native-projection.js +88 -15
- package/data/build/dist/client/peer-host-native-projection.js.map +1 -1
- package/data/build/dist/client/peer-host-native-store-projection.d.ts +2 -0
- package/data/build/dist/client/peer-host-native-store-projection.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-native-store-projection.js +52 -13
- package/data/build/dist/client/peer-host-native-store-projection.js.map +1 -1
- package/data/build/dist/client/peer-host-reference-source.d.ts +18 -0
- package/data/build/dist/client/peer-host-reference-source.d.ts.map +1 -0
- package/data/build/dist/client/peer-host-reference-source.js +174 -0
- package/data/build/dist/client/peer-host-reference-source.js.map +1 -0
- package/data/build/dist/client/peer-host-remote-events.d.ts +34 -0
- package/data/build/dist/client/peer-host-remote-events.d.ts.map +1 -0
- package/data/build/dist/client/peer-host-remote-events.js +239 -0
- package/data/build/dist/client/peer-host-remote-events.js.map +1 -0
- package/data/build/dist/client/peer-host-scoped-client.d.ts +3 -0
- package/data/build/dist/client/peer-host-scoped-client.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-scoped-client.js +5 -2
- package/data/build/dist/client/peer-host-scoped-client.js.map +1 -1
- package/data/build/dist/client/peer-host-workspace-tab.d.ts +2 -0
- package/data/build/dist/client/peer-host-workspace-tab.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-workspace-tab.js +62 -29
- package/data/build/dist/client/peer-host-workspace-tab.js.map +1 -1
- package/data/build/dist/client/peer-host-workspace-tag.d.ts +5 -0
- package/data/build/dist/client/peer-host-workspace-tag.d.ts.map +1 -1
- package/data/build/dist/client/peer-host-workspace-tag.js +57 -14
- package/data/build/dist/client/peer-host-workspace-tag.js.map +1 -1
- package/data/build/dist/client/provider-icons.d.ts.map +1 -1
- package/data/build/dist/client/provider-icons.js +2 -1
- package/data/build/dist/client/provider-icons.js.map +1 -1
- package/data/build/dist/client/quick-phrase-slot.d.ts.map +1 -1
- package/data/build/dist/client/quick-phrase-slot.js +12 -11
- package/data/build/dist/client/quick-phrase-slot.js.map +1 -1
- package/data/build/dist/client/serial-polling.d.ts +1 -0
- package/data/build/dist/client/serial-polling.d.ts.map +1 -1
- package/data/build/dist/client/serial-polling.js +4 -2
- package/data/build/dist/client/serial-polling.js.map +1 -1
- package/data/build/dist/client/session-adapter-cache.d.ts +2 -0
- package/data/build/dist/client/session-adapter-cache.d.ts.map +1 -1
- package/data/build/dist/client/session-adapter-cache.js +11 -0
- package/data/build/dist/client/session-adapter-cache.js.map +1 -1
- package/data/build/dist/client/session-changed-files-view.d.ts +15 -0
- package/data/build/dist/client/session-changed-files-view.d.ts.map +1 -1
- package/data/build/dist/client/session-changed-files-view.js +73 -29
- package/data/build/dist/client/session-changed-files-view.js.map +1 -1
- package/data/build/dist/client/settings-controls.d.ts +29 -0
- package/data/build/dist/client/settings-controls.d.ts.map +1 -0
- package/data/build/dist/client/settings-controls.js +80 -0
- package/data/build/dist/client/settings-controls.js.map +1 -0
- package/data/build/dist/client/settings-section.d.ts.map +1 -1
- package/data/build/dist/client/settings-section.js +7 -11
- package/data/build/dist/client/settings-section.js.map +1 -1
- package/data/build/dist/client/skill-command.d.ts.map +1 -1
- package/data/build/dist/client/skill-command.js +2 -1
- package/data/build/dist/client/skill-command.js.map +1 -1
- package/data/build/dist/client/subagent-collapsed-lineage.d.ts +103 -0
- package/data/build/dist/client/subagent-collapsed-lineage.d.ts.map +1 -0
- package/data/build/dist/client/subagent-collapsed-lineage.js +664 -0
- package/data/build/dist/client/subagent-collapsed-lineage.js.map +1 -0
- package/data/build/dist/client/subscription-slot.d.ts +8 -2
- package/data/build/dist/client/subscription-slot.d.ts.map +1 -1
- package/data/build/dist/client/subscription-slot.js +50 -33
- package/data/build/dist/client/subscription-slot.js.map +1 -1
- package/data/build/dist/client/terminal/ui.d.ts.map +1 -1
- package/data/build/dist/client/terminal/ui.js +26 -8
- package/data/build/dist/client/terminal/ui.js.map +1 -1
- package/data/build/dist/client/theme.d.ts.map +1 -1
- package/data/build/dist/client/theme.js +17 -12
- package/data/build/dist/client/theme.js.map +1 -1
- package/data/build/dist/dsh-capabilities/client/assistant-session-navigation-adapter.d.ts +7 -0
- package/data/build/dist/dsh-capabilities/client/assistant-session-navigation-adapter.d.ts.map +1 -0
- package/data/build/dist/dsh-capabilities/client/assistant-session-navigation-adapter.js +47 -0
- package/data/build/dist/dsh-capabilities/client/assistant-session-navigation-adapter.js.map +1 -0
- package/data/build/dist/dsh-capabilities/host/session-title-adapter.d.ts +10 -0
- package/data/build/dist/dsh-capabilities/host/session-title-adapter.d.ts.map +1 -0
- package/data/build/dist/dsh-capabilities/host/session-title-adapter.js +199 -0
- package/data/build/dist/dsh-capabilities/host/session-title-adapter.js.map +1 -0
- package/data/build/dist/dsh-capabilities/host/sidebar-session-compat.d.ts +1 -1
- package/data/build/dist/dsh-capabilities/host/sidebar-session-compat.d.ts.map +1 -1
- package/data/build/dist/dsh-capabilities/host/sidebar-session-compat.js +8 -2
- package/data/build/dist/dsh-capabilities/host/sidebar-session-compat.js.map +1 -1
- package/data/build/dist/dsh-capabilities/matrix.d.ts.map +1 -1
- package/data/build/dist/dsh-capabilities/matrix.js +13 -3
- package/data/build/dist/dsh-capabilities/matrix.js.map +1 -1
- package/data/build/dist/dsh-capabilities/routes.js +37 -3
- package/data/build/dist/dsh-capabilities/routes.js.map +1 -1
- package/data/build/dist/dsh-capabilities/types.d.ts +1 -1
- package/data/build/dist/dsh-capabilities/types.d.ts.map +1 -1
- package/data/build/dist/dsh-capabilities/types.js.map +1 -1
- package/data/build/dist/host/avatar/materials.d.ts.map +1 -1
- package/data/build/dist/host/avatar/materials.js +3 -1
- package/data/build/dist/host/avatar/materials.js.map +1 -1
- package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts +13 -0
- package/data/build/dist/host/cli-adapters/acp-cli-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/acp-cli-driver.js +136 -11
- package/data/build/dist/host/cli-adapters/acp-cli-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/claude-driver.js +1 -1
- package/data/build/dist/host/cli-adapters/claude-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/codebuddy-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/codebuddy-driver.js +65 -31
- package/data/build/dist/host/cli-adapters/codebuddy-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/codex-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/codex-driver.js +29 -9
- package/data/build/dist/host/cli-adapters/codex-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/command-code-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/command-code-driver.js +136 -16
- package/data/build/dist/host/cli-adapters/command-code-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/delegate-dispatch.d.ts +4 -3
- package/data/build/dist/host/cli-adapters/delegate-dispatch.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/delegate-dispatch.js +7 -6
- package/data/build/dist/host/cli-adapters/delegate-dispatch.js.map +1 -1
- package/data/build/dist/host/cli-adapters/doubao-app.d.ts +32 -11
- package/data/build/dist/host/cli-adapters/doubao-app.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/doubao-app.js +195 -24
- package/data/build/dist/host/cli-adapters/doubao-app.js.map +1 -1
- package/data/build/dist/host/cli-adapters/doubao-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/doubao-driver.js +3 -1
- package/data/build/dist/host/cli-adapters/doubao-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/dsh-config.d.ts +16 -0
- package/data/build/dist/host/cli-adapters/dsh-config.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/dsh-config.js +153 -0
- package/data/build/dist/host/cli-adapters/dsh-config.js.map +1 -0
- package/data/build/dist/host/cli-adapters/dsh-tool-history.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/dsh-tool-history.js +23 -3
- package/data/build/dist/host/cli-adapters/dsh-tool-history.js.map +1 -1
- package/data/build/dist/host/cli-adapters/feature.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/feature.js +71 -28
- package/data/build/dist/host/cli-adapters/feature.js.map +1 -1
- package/data/build/dist/host/cli-adapters/model-catalog.d.ts +1 -0
- package/data/build/dist/host/cli-adapters/model-catalog.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/model-catalog.js +22 -0
- package/data/build/dist/host/cli-adapters/model-catalog.js.map +1 -1
- package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts +24 -2
- package/data/build/dist/host/cli-adapters/native-subagent-dispatch.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js +113 -4
- package/data/build/dist/host/cli-adapters/native-subagent-dispatch.js.map +1 -1
- package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts +63 -18
- package/data/build/dist/host/cli-adapters/native-team-subagent.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/native-team-subagent.js +35 -1
- package/data/build/dist/host/cli-adapters/native-team-subagent.js.map +1 -1
- package/data/build/dist/host/cli-adapters/new-api-subscription.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/new-api-subscription.js +2 -45
- package/data/build/dist/host/cli-adapters/new-api-subscription.js.map +1 -1
- package/data/build/dist/host/cli-adapters/opencode-driver.d.ts +6 -0
- package/data/build/dist/host/cli-adapters/opencode-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/opencode-driver.js +10 -3
- package/data/build/dist/host/cli-adapters/opencode-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/opencode-v2-protocol.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/opencode-v2-protocol.js +317 -62
- package/data/build/dist/host/cli-adapters/opencode-v2-protocol.js.map +1 -1
- package/data/build/dist/host/cli-adapters/pi-driver.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/pi-driver.js +134 -14
- package/data/build/dist/host/cli-adapters/pi-driver.js.map +1 -1
- package/data/build/dist/host/cli-adapters/provider-subscription.d.ts +3 -0
- package/data/build/dist/host/cli-adapters/provider-subscription.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/provider-subscription.js +13 -45
- package/data/build/dist/host/cli-adapters/provider-subscription.js.map +1 -1
- package/data/build/dist/host/cli-adapters/r4-subscription.d.ts +13 -0
- package/data/build/dist/host/cli-adapters/r4-subscription.d.ts.map +1 -0
- package/data/build/dist/host/cli-adapters/r4-subscription.js +111 -0
- package/data/build/dist/host/cli-adapters/r4-subscription.js.map +1 -0
- package/data/build/dist/host/cli-adapters/registry.d.ts +2 -0
- package/data/build/dist/host/cli-adapters/registry.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/registry.js +14 -3
- package/data/build/dist/host/cli-adapters/registry.js.map +1 -1
- package/data/build/dist/host/cli-adapters/stream-normalizer.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/stream-normalizer.js +7 -0
- package/data/build/dist/host/cli-adapters/stream-normalizer.js.map +1 -1
- package/data/build/dist/host/cli-adapters/subagent-tool.d.ts.map +1 -1
- package/data/build/dist/host/cli-adapters/subagent-tool.js +28 -7
- package/data/build/dist/host/cli-adapters/subagent-tool.js.map +1 -1
- package/data/build/dist/host/cli-bridge/bridge-server.d.ts +1 -0
- package/data/build/dist/host/cli-bridge/bridge-server.d.ts.map +1 -1
- package/data/build/dist/host/cli-bridge/bridge-server.js.map +1 -1
- package/data/build/dist/host/cli-bridge/command-code-mod.d.ts +24 -1
- package/data/build/dist/host/cli-bridge/command-code-mod.d.ts.map +1 -1
- package/data/build/dist/host/cli-bridge/command-code-mod.js +121 -23
- package/data/build/dist/host/cli-bridge/command-code-mod.js.map +1 -1
- package/data/build/dist/host/cli-bridge/dispatch.d.ts.map +1 -1
- package/data/build/dist/host/cli-bridge/dispatch.js +26 -6
- package/data/build/dist/host/cli-bridge/dispatch.js.map +1 -1
- package/data/build/dist/host/cli-bridge/injections.d.ts +45 -4
- package/data/build/dist/host/cli-bridge/injections.d.ts.map +1 -1
- package/data/build/dist/host/cli-bridge/injections.js +129 -14
- package/data/build/dist/host/cli-bridge/injections.js.map +1 -1
- package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js +20 -5
- package/data/build/dist/host/cli-bridge/mcp-stdio-entry.js.map +1 -1
- package/data/build/dist/host/desktop-assistant/controller.d.ts +25 -2
- package/data/build/dist/host/desktop-assistant/controller.d.ts.map +1 -1
- package/data/build/dist/host/desktop-assistant/controller.js +170 -7
- package/data/build/dist/host/desktop-assistant/controller.js.map +1 -1
- package/data/build/dist/host/desktop-assistant/feature.d.ts.map +1 -1
- package/data/build/dist/host/desktop-assistant/feature.js +41 -4
- package/data/build/dist/host/desktop-assistant/feature.js.map +1 -1
- package/data/build/dist/host/desktop-assistant/launcher.d.ts.map +1 -1
- package/data/build/dist/host/desktop-assistant/launcher.js +3 -1
- package/data/build/dist/host/desktop-assistant/launcher.js.map +1 -1
- package/data/build/dist/host/desktop-assistant/mac-agent.d.ts.map +1 -1
- package/data/build/dist/host/desktop-assistant/mac-agent.js +41 -10
- package/data/build/dist/host/desktop-assistant/mac-agent.js.map +1 -1
- package/data/build/dist/host/desktop-assistant/notifications.d.ts +16 -0
- package/data/build/dist/host/desktop-assistant/notifications.d.ts.map +1 -0
- package/data/build/dist/host/desktop-assistant/notifications.js +45 -0
- package/data/build/dist/host/desktop-assistant/notifications.js.map +1 -0
- package/data/build/dist/host/desktop-assistant/win-agent.d.ts.map +1 -1
- package/data/build/dist/host/desktop-assistant/win-agent.js +95 -8
- package/data/build/dist/host/desktop-assistant/win-agent.js.map +1 -1
- package/data/build/dist/host/features/assistant-lifecycle-settings.js +1 -1
- package/data/build/dist/host/features/assistant-lifecycle-settings.js.map +1 -1
- package/data/build/dist/host/features/assistant-notification-events.d.ts +77 -0
- package/data/build/dist/host/features/assistant-notification-events.d.ts.map +1 -0
- package/data/build/dist/host/features/assistant-notification-events.js +574 -0
- package/data/build/dist/host/features/assistant-notification-events.js.map +1 -0
- package/data/build/dist/host/features/assistant-notification-source.d.ts +32 -0
- package/data/build/dist/host/features/assistant-notification-source.d.ts.map +1 -0
- package/data/build/dist/host/features/assistant-notification-source.js +101 -0
- package/data/build/dist/host/features/assistant-notification-source.js.map +1 -0
- package/data/build/dist/host/features/assistant-notification-stream.d.ts +26 -0
- package/data/build/dist/host/features/assistant-notification-stream.d.ts.map +1 -0
- package/data/build/dist/host/features/assistant-notification-stream.js +179 -0
- package/data/build/dist/host/features/assistant-notification-stream.js.map +1 -0
- package/data/build/dist/host/features/assistant-notifications.d.ts +71 -0
- package/data/build/dist/host/features/assistant-notifications.d.ts.map +1 -0
- package/data/build/dist/host/features/assistant-notifications.js +342 -0
- package/data/build/dist/host/features/assistant-notifications.js.map +1 -0
- package/data/build/dist/host/features/assistant-peer-notifications.d.ts +53 -0
- package/data/build/dist/host/features/assistant-peer-notifications.d.ts.map +1 -0
- package/data/build/dist/host/features/assistant-peer-notifications.js +197 -0
- package/data/build/dist/host/features/assistant-peer-notifications.js.map +1 -0
- package/data/build/dist/host/features/assistant-tts-service.d.ts.map +1 -1
- package/data/build/dist/host/features/assistant-tts-service.js +2 -2
- package/data/build/dist/host/features/assistant-tts-service.js.map +1 -1
- package/data/build/dist/host/features/assistant-voice-initialization.js +1 -1
- package/data/build/dist/host/features/assistant-voice-initialization.js.map +1 -1
- package/data/build/dist/host/features/git-management.js +2 -1
- package/data/build/dist/host/features/git-management.js.map +1 -1
- package/data/build/dist/host/features/global-voice-rpc.d.ts.map +1 -1
- package/data/build/dist/host/features/global-voice-rpc.js +90 -2
- package/data/build/dist/host/features/global-voice-rpc.js.map +1 -1
- package/data/build/dist/host/features/index.d.ts +1 -0
- package/data/build/dist/host/features/index.d.ts.map +1 -1
- package/data/build/dist/host/features/index.js +3 -0
- package/data/build/dist/host/features/index.js.map +1 -1
- package/data/build/dist/host/features/peer-host.d.ts.map +1 -1
- package/data/build/dist/host/features/peer-host.js +159 -70
- package/data/build/dist/host/features/peer-host.js.map +1 -1
- package/data/build/dist/host/features/session-title-optimization.d.ts +5 -0
- package/data/build/dist/host/features/session-title-optimization.d.ts.map +1 -0
- package/data/build/dist/host/features/session-title-optimization.js +26 -0
- package/data/build/dist/host/features/session-title-optimization.js.map +1 -0
- package/data/build/dist/host/features/types.d.ts +6 -0
- package/data/build/dist/host/features/types.d.ts.map +1 -1
- package/data/build/dist/host/index.d.ts.map +1 -1
- package/data/build/dist/host/index.js +23 -1
- package/data/build/dist/host/index.js.map +1 -1
- package/data/build/dist/host/lan-access-dsh.d.ts.map +1 -1
- package/data/build/dist/host/lan-access-dsh.js +9 -1
- package/data/build/dist/host/lan-access-dsh.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/aggregated-host-transport.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/aggregated-host-transport.js +8 -2
- package/data/build/dist/host/modules/peer-host/aggregated-host-transport.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/host-api-proxy-service.d.ts +5 -1
- package/data/build/dist/host/modules/peer-host/host-api-proxy-service.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/host-api-proxy-service.js +72 -23
- package/data/build/dist/host/modules/peer-host/host-api-proxy-service.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/host-ws-proxy-service.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/host-ws-proxy-service.js +7 -5
- package/data/build/dist/host/modules/peer-host/host-ws-proxy-service.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.d.ts +6 -1
- package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.js +7 -0
- package/data/build/dist/host/modules/peer-host/peer-host-aggregate-service.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-handshake.d.ts +2 -1
- package/data/build/dist/host/modules/peer-host/peer-host-handshake.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-handshake.js +11 -10
- package/data/build/dist/host/modules/peer-host/peer-host-handshake.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js +43 -0
- package/data/build/dist/host/modules/peer-host/peer-host-native-dispatch.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts +6 -3
- package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js +92 -5
- package/data/build/dist/host/modules/peer-host/peer-host-native-protocol.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-streams.d.ts +15 -0
- package/data/build/dist/host/modules/peer-host/peer-host-native-streams.d.ts.map +1 -0
- package/data/build/dist/host/modules/peer-host/peer-host-native-streams.js +101 -0
- package/data/build/dist/host/modules/peer-host/peer-host-native-streams.js.map +1 -0
- package/data/build/dist/host/modules/peer-host/peer-host-native-transport.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-native-transport.js +44 -11
- package/data/build/dist/host/modules/peer-host/peer-host-native-transport.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js +75 -20
- package/data/build/dist/host/modules/peer-host/peer-host-remote-summary-source.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-request-errors.d.ts +31 -0
- package/data/build/dist/host/modules/peer-host/peer-host-request-errors.d.ts.map +1 -0
- package/data/build/dist/host/modules/peer-host/peer-host-request-errors.js +60 -0
- package/data/build/dist/host/modules/peer-host/peer-host-request-errors.js.map +1 -0
- package/data/build/dist/host/modules/peer-host/peer-host-session.d.ts +12 -4
- package/data/build/dist/host/modules/peer-host/peer-host-session.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-session.js +28 -18
- package/data/build/dist/host/modules/peer-host/peer-host-session.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.d.ts +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.d.ts.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.js +15 -4
- package/data/build/dist/host/modules/peer-host/peer-host-virtual-registry.js.map +1 -1
- package/data/build/dist/host/modules/peer-host/peer-host-workspace-cache.d.ts +22 -0
- package/data/build/dist/host/modules/peer-host/peer-host-workspace-cache.d.ts.map +1 -0
- package/data/build/dist/host/modules/peer-host/peer-host-workspace-cache.js +133 -0
- package/data/build/dist/host/modules/peer-host/peer-host-workspace-cache.js.map +1 -0
- package/data/build/dist/host/native-session-bridge.d.ts +2 -0
- package/data/build/dist/host/native-session-bridge.d.ts.map +1 -1
- package/data/build/dist/host/native-session-bridge.js +67 -0
- package/data/build/dist/host/native-session-bridge.js.map +1 -1
- package/data/build/dist/host/rpc.d.ts.map +1 -1
- package/data/build/dist/host/rpc.js +11 -2
- package/data/build/dist/host/rpc.js.map +1 -1
- package/data/build/dist/host/settings.d.ts.map +1 -1
- package/data/build/dist/host/settings.js +14 -3
- package/data/build/dist/host/settings.js.map +1 -1
- package/data/build/dist/host/terminal/controller-factory.d.ts +1 -0
- package/data/build/dist/host/terminal/controller-factory.d.ts.map +1 -1
- package/data/build/dist/host/terminal/controller-factory.js +3 -0
- package/data/build/dist/host/terminal/controller-factory.js.map +1 -1
- package/data/build/dist/host/terminal/startup.d.ts +3 -0
- package/data/build/dist/host/terminal/startup.d.ts.map +1 -1
- package/data/build/dist/host/terminal/startup.js +1 -0
- package/data/build/dist/host/terminal/startup.js.map +1 -1
- package/data/build/dist/host/terminal/terminal-controller.d.ts +8 -0
- package/data/build/dist/host/terminal/terminal-controller.d.ts.map +1 -1
- package/data/build/dist/host/terminal/terminal-controller.js +2 -1
- package/data/build/dist/host/terminal/terminal-controller.js.map +1 -1
- package/data/build/dist/shared/assistant-avatar-adapters.d.ts.map +1 -1
- package/data/build/dist/shared/assistant-avatar-adapters.js +3 -0
- package/data/build/dist/shared/assistant-avatar-adapters.js.map +1 -1
- package/data/build/dist/shared/assistant-avatar.d.ts +11 -1
- package/data/build/dist/shared/assistant-avatar.d.ts.map +1 -1
- package/data/build/dist/shared/assistant-avatar.js +31 -1
- package/data/build/dist/shared/assistant-avatar.js.map +1 -1
- package/data/build/dist/shared/assistant-notification-feed.d.ts +44 -0
- package/data/build/dist/shared/assistant-notification-feed.d.ts.map +1 -0
- package/data/build/dist/shared/assistant-notification-feed.js +88 -0
- package/data/build/dist/shared/assistant-notification-feed.js.map +1 -0
- package/data/build/dist/shared/assistant-notifications.d.ts +107 -0
- package/data/build/dist/shared/assistant-notifications.d.ts.map +1 -0
- package/data/build/dist/shared/assistant-notifications.js +24 -0
- package/data/build/dist/shared/assistant-notifications.js.map +1 -0
- package/data/build/dist/shared/assistant-tts.js +1 -1
- package/data/build/dist/shared/contracts/cli-adapter.d.ts +5 -1
- package/data/build/dist/shared/contracts/cli-adapter.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/config.d.ts +5 -0
- package/data/build/dist/shared/contracts/config.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/config.js +3 -0
- package/data/build/dist/shared/contracts/config.js.map +1 -1
- package/data/build/dist/shared/contracts/errors.d.ts +2 -2
- package/data/build/dist/shared/contracts/peer-host.d.ts +15 -0
- package/data/build/dist/shared/contracts/peer-host.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/peer-host.js.map +1 -1
- package/data/build/dist/shared/contracts/subscription.d.ts +31 -0
- package/data/build/dist/shared/contracts/subscription.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/subscription.js.map +1 -1
- package/data/build/dist/shared/contracts/version.d.ts +12 -8
- package/data/build/dist/shared/contracts/version.d.ts.map +1 -1
- package/data/build/dist/shared/contracts/version.js +11 -7
- package/data/build/dist/shared/contracts/version.js.map +1 -1
- package/data/build/dist/shared/desktop-assistant.d.ts +73 -1
- package/data/build/dist/shared/desktop-assistant.d.ts.map +1 -1
- package/data/build/dist/shared/desktop-assistant.js +189 -2
- package/data/build/dist/shared/desktop-assistant.js.map +1 -1
- package/data/build/dist/shared/index.d.ts +2 -2
- package/data/build/dist/shared/index.d.ts.map +1 -1
- package/data/build/dist/shared/index.js.map +1 -1
- package/data/build/dist/shared/peer-host-file-location.d.ts +11 -0
- package/data/build/dist/shared/peer-host-file-location.d.ts.map +1 -0
- package/data/build/dist/shared/peer-host-file-location.js +20 -0
- package/data/build/dist/shared/peer-host-file-location.js.map +1 -0
- package/data/build/dist/shared/peer-host-http-routes.d.ts +10 -0
- package/data/build/dist/shared/peer-host-http-routes.d.ts.map +1 -1
- package/data/build/dist/shared/peer-host-http-routes.js +7 -1
- package/data/build/dist/shared/peer-host-http-routes.js.map +1 -1
- package/data/build/dist/shared/provider-icon-resources.d.ts.map +1 -1
- package/data/build/dist/shared/provider-icon-resources.js +1 -0
- package/data/build/dist/shared/provider-icon-resources.js.map +1 -1
- package/data/build/dist/shared/session-reference.d.ts +11 -0
- package/data/build/dist/shared/session-reference.d.ts.map +1 -0
- package/data/build/dist/shared/session-reference.js +29 -0
- package/data/build/dist/shared/session-reference.js.map +1 -0
- package/data/build/dist/shared/session-title.d.ts +12 -0
- package/data/build/dist/shared/session-title.d.ts.map +1 -0
- package/data/build/dist/shared/session-title.js +65 -0
- package/data/build/dist/shared/session-title.js.map +1 -0
- package/data/build/dist/shared/voice-initialization.d.ts +1 -1
- package/data/build/dist/shared/voice-initialization.d.ts.map +1 -1
- package/data/build/dist/shared/voice-initialization.js +1 -1
- package/data/build/dist/shared/voice-initialization.js.map +1 -1
- package/data/build/dist/shared/voice-models.d.ts +2 -2
- package/data/build/dist/shared/voice-models.d.ts.map +1 -1
- package/data/build/dist/shared/voice-models.js +9 -9
- package/data/build/dist/shared/voice-models.js.map +1 -1
- package/data/build/dist/typert.host.d.ts +18 -1
- package/data/build/dist/typert.host.d.ts.map +1 -1
- package/data/build/dist/typert.host.js +28 -3
- package/data/build/dist/typert.host.js.map +1 -1
- package/data/build/dist/typert.notifications-client.d.ts +5 -0
- package/data/build/dist/typert.notifications-client.d.ts.map +1 -0
- package/data/build/dist/typert.notifications-client.js +7 -0
- package/data/build/dist/typert.notifications-client.js.map +1 -0
- package/data/build/dist/typert.remote-client.js +1 -1
- package/data/build/dist/typert.remote-client.js.map +1 -1
- package/package.json +32 -26
- package/profile/README.md +2 -2
- package/profile/package.json +3 -3
- package/profile/version.json +3 -3
- package/version.json +3 -3
- package/data/build/dist/client/client.assistant-prompts.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.assistant-configuration-view.js","names":["Cropper","React","normalizeWheel","CropperComponent","getAssistantAvatarRegistry","resolveAssistantAvatarAsset","useCallback","useSyncExternalStore","createElement","assistantAvatarPortraitKey","getAssistantAvatarPortraitService","useState","useRef","initialAssistantAvatarPortraitArea","cropAssistantAvatarPortrait","assistantSettingTextStyle","AssistantAvatarPortrait","dshSettingsButtonStyle","dshSettingsHelpStyle","dshThemeColor","dshSettingsPrimaryButtonStyle","listAssistantAvatars","builtinAssistantAvatarLabelKey","getAssistantAvatarPreset","createElement","useState","useId","dshSettingsFieldStyle","resolveChevronDownIcon","assistantSettingFieldStyle","DshMenu","useCodingNsTranslator","useState","useRef","errorMessage","hasAssistantAvatarEngineConsent","useId","createElement","dshThemeColor","ASSISTANT_AVATAR_ENGINE_CONSENT_VERSION","dshSettingsHelpStyle","assistantSettingCheckboxStyle","dshSettingsButtonStyle","dshSettingsPrimaryButtonStyle","dshSettingsButtonStyle","helpStyle","dshSettingsHelpStyle","assistantSettingCheckboxStyle","useCodingNsTranslator","useState","hasAssistantAvatarConsent","selectedAssistantAvatar","errorMessage","createElement","assistantSettingTextStyle","dshThemeColor","createPortal","assistantSettingSwitchStyle","useRef","useId","ASSISTANT_AVATAR_CONSENT_VERSION","dshSettingsPrimaryButtonStyle","AssistantAvatarLoading","AssistantAvatarSlot","useCallback","useSyncExternalStore","useState","createElement","dshThemeColor","useCodingNsTranslator","getAssistantAvatarManager","selectedAssistantAvatar","getAssistantAvatarRegistry","useRef","isAssistantAvatarSource","assistantSettingFieldStyle","assistantSettingSwitchStyle","dshSettingsFieldStyle","assistantSettingTextStyle","dshSettingsHelpStyle","getBuiltinAssistantAvatar","dshSettingsButtonStyle","useCodingNsTranslator","useState","DEFAULT_ASSISTANT_TTS_PARAMETERS","useRef","MossVoiceOutput","MOSS_BUILTIN_VOICES","ASSISTANT_VOICE_SITES","useCallback","CODINGNS_RPC_CHANNEL","message","readAssistantTtsParameters","validateAssistantTtsParameters","createElement","dshSettingsButtonStyle","assistantSettingFieldStyle","dshSettingsFieldStyle","ASSISTANT_TTS_PARAMETER_LIMITS","assistantSettingTextStyle","dshThemeColor","dshSettingsHelpStyle","useState","createElement","dshThemeColor","useCodingNsTranslator","useState","useRef","MossVoiceOutput","useCallback","CODINGNS_RPC_CHANNEL","message","createElement","dshThemeColor","dshSettingsHelpStyle","dshSettingsPrimaryButtonStyle","dshSettingsButtonStyle","CODINGNS_RPC_CHANNEL","createElement","useCodingNsTranslator","useState","findAssistantVoiceModel","useRef","useCallback","CODINGNS_RPC_CHANNEL","dshThemeColor","ASSISTANT_VOICE_MODEL_CATALOG","assistantSettingCheckboxStyle","assistantSettingTextStyle","dshSettingsPrimaryButtonStyle","dshSettingsButtonStyle","getAssistantAvatarManager","createElement","listAssistantAvatars","ASSISTANT_PERSONALITY_MAX_CHARS","dshThemeColor","dshSettingsButtonStyle","assistantSettingCheckboxStyle","readAssistantPrompts","AssistantPromptEditor","getGlobalVoiceAdapter","useState","dshSettingsFieldStyle","dshSettingsHelpStyle","assistantSettingFieldStyle"],"sources":["../../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../../../node_modules/.pnpm/normalize-wheel@1.0.1/node_modules/normalize-wheel/src/UserAgent_DEPRECATED.js","../../../../node_modules/.pnpm/normalize-wheel@1.0.1/node_modules/normalize-wheel/src/ExecutionEnvironment.js","../../../../node_modules/.pnpm/normalize-wheel@1.0.1/node_modules/normalize-wheel/src/isEventSupported.js","../../../../node_modules/.pnpm/normalize-wheel@1.0.1/node_modules/normalize-wheel/src/normalizeWheel.js","../../../../node_modules/.pnpm/normalize-wheel@1.0.1/node_modules/normalize-wheel/index.js","../../../../node_modules/.pnpm/react-easy-crop@5.5.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-easy-crop/index.module.mjs","../../../../src/client/avatar/portrait-editor.ts","../../../../src/client/avatar/catalog-picker.ts","../../../../src/client/avatar/engine.ts","../../../../src/client/avatar/temporary-preview.ts","../../../../src/client/avatar/catalog-panel.ts","../../../../src/client/avatar/settings-panel.ts","../../../../src/client/features/assistant-voice-settings.ts","../../../../src/client/features/assistant-voice-settings-group.ts","../../../../src/client/features/assistant-voice-initialization.ts","../../../../src/client/voice-model-setup-progress.ts","../../../../src/client/features/voice-initialization-dialog.ts","../../../../src/client/features/assistant-configuration-view.ts"],"sourcesContent":["/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n *\n * @providesModule UserAgent_DEPRECATED\n */\n\n/**\n * Provides entirely client-side User Agent and OS detection. You should prefer\n * the non-deprecated UserAgent module when possible, which exposes our\n * authoritative server-side PHP-based detection to the client.\n *\n * Usage is straightforward:\n *\n * if (UserAgent_DEPRECATED.ie()) {\n * // IE\n * }\n *\n * You can also do version checks:\n *\n * if (UserAgent_DEPRECATED.ie() >= 7) {\n * // IE7 or better\n * }\n *\n * The browser functions will return NaN if the browser does not match, so\n * you can also do version compares the other way:\n *\n * if (UserAgent_DEPRECATED.ie() < 7) {\n * // IE6 or worse\n * }\n *\n * Note that the version is a float and may include a minor version number,\n * so you should always use range operators to perform comparisons, not\n * strict equality.\n *\n * **Note:** You should **strongly** prefer capability detection to browser\n * version detection where it's reasonable:\n *\n * http://www.quirksmode.org/js/support.html\n *\n * Further, we have a large number of mature wrapper functions and classes\n * which abstract away many browser irregularities. Check the documentation,\n * grep for things, or ask on javascript@lists.facebook.com before writing yet\n * another copy of \"event || window.event\".\n *\n */\n\nvar _populated = false;\n\n// Browsers\nvar _ie, _firefox, _opera, _webkit, _chrome;\n\n// Actual IE browser for compatibility mode\nvar _ie_real_version;\n\n// Platforms\nvar _osx, _windows, _linux, _android;\n\n// Architectures\nvar _win64;\n\n// Devices\nvar _iphone, _ipad, _native;\n\nvar _mobile;\n\nfunction _populate() {\n if (_populated) {\n return;\n }\n\n _populated = true;\n\n // To work around buggy JS libraries that can't handle multi-digit\n // version numbers, Opera 10's user agent string claims it's Opera\n // 9, then later includes a Version/X.Y field:\n //\n // Opera/9.80 (foo) Presto/2.2.15 Version/10.10\n var uas = navigator.userAgent;\n var agent = /(?:MSIE.(\\d+\\.\\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\\d+\\.\\d+))|(?:Opera(?:.+Version.|.)(\\d+\\.\\d+))|(?:AppleWebKit.(\\d+(?:\\.\\d+)?))|(?:Trident\\/\\d+\\.\\d+.*rv:(\\d+\\.\\d+))/.exec(uas);\n var os = /(Mac OS X)|(Windows)|(Linux)/.exec(uas);\n\n _iphone = /\\b(iPhone|iP[ao]d)/.exec(uas);\n _ipad = /\\b(iP[ao]d)/.exec(uas);\n _android = /Android/i.exec(uas);\n _native = /FBAN\\/\\w+;/i.exec(uas);\n _mobile = /Mobile/i.exec(uas);\n\n // Note that the IE team blog would have you believe you should be checking\n // for 'Win64; x64'. But MSDN then reveals that you can actually be coming\n // from either x64 or ia64; so ultimately, you should just check for Win64\n // as in indicator of whether you're in 64-bit IE. 32-bit IE on 64-bit\n // Windows will send 'WOW64' instead.\n _win64 = !!(/Win64/.exec(uas));\n\n if (agent) {\n _ie = agent[1] ? parseFloat(agent[1]) : (\n agent[5] ? parseFloat(agent[5]) : NaN);\n // IE compatibility mode\n if (_ie && document && document.documentMode) {\n _ie = document.documentMode;\n }\n // grab the \"true\" ie version from the trident token if available\n var trident = /(?:Trident\\/(\\d+.\\d+))/.exec(uas);\n _ie_real_version = trident ? parseFloat(trident[1]) + 4 : _ie;\n\n _firefox = agent[2] ? parseFloat(agent[2]) : NaN;\n _opera = agent[3] ? parseFloat(agent[3]) : NaN;\n _webkit = agent[4] ? parseFloat(agent[4]) : NaN;\n if (_webkit) {\n // We do not add the regexp to the above test, because it will always\n // match 'safari' only since 'AppleWebKit' appears before 'Chrome' in\n // the userAgent string.\n agent = /(?:Chrome\\/(\\d+\\.\\d+))/.exec(uas);\n _chrome = agent && agent[1] ? parseFloat(agent[1]) : NaN;\n } else {\n _chrome = NaN;\n }\n } else {\n _ie = _firefox = _opera = _chrome = _webkit = NaN;\n }\n\n if (os) {\n if (os[1]) {\n // Detect OS X version. If no version number matches, set _osx to true.\n // Version examples: 10, 10_6_1, 10.7\n // Parses version number as a float, taking only first two sets of\n // digits. If only one set of digits is found, returns just the major\n // version number.\n var ver = /(?:Mac OS X (\\d+(?:[._]\\d+)?))/.exec(uas);\n\n _osx = ver ? parseFloat(ver[1].replace('_', '.')) : true;\n } else {\n _osx = false;\n }\n _windows = !!os[2];\n _linux = !!os[3];\n } else {\n _osx = _windows = _linux = false;\n }\n}\n\nvar UserAgent_DEPRECATED = {\n\n /**\n * Check if the UA is Internet Explorer.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n ie: function() {\n return _populate() || _ie;\n },\n\n /**\n * Check if we're in Internet Explorer compatibility mode.\n *\n * @return bool true if in compatibility mode, false if\n * not compatibility mode or not ie\n */\n ieCompatibilityMode: function() {\n return _populate() || (_ie_real_version > _ie);\n },\n\n\n /**\n * Whether the browser is 64-bit IE. Really, this is kind of weak sauce; we\n * only need this because Skype can't handle 64-bit IE yet. We need to remove\n * this when we don't need it -- tracked by #601957.\n */\n ie64: function() {\n return UserAgent_DEPRECATED.ie() && _win64;\n },\n\n /**\n * Check if the UA is Firefox.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n firefox: function() {\n return _populate() || _firefox;\n },\n\n\n /**\n * Check if the UA is Opera.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n opera: function() {\n return _populate() || _opera;\n },\n\n\n /**\n * Check if the UA is WebKit.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n webkit: function() {\n return _populate() || _webkit;\n },\n\n /**\n * For Push\n * WILL BE REMOVED VERY SOON. Use UserAgent_DEPRECATED.webkit\n */\n safari: function() {\n return UserAgent_DEPRECATED.webkit();\n },\n\n /**\n * Check if the UA is a Chrome browser.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n chrome : function() {\n return _populate() || _chrome;\n },\n\n\n /**\n * Check if the user is running Windows.\n *\n * @return bool `true' if the user's OS is Windows.\n */\n windows: function() {\n return _populate() || _windows;\n },\n\n\n /**\n * Check if the user is running Mac OS X.\n *\n * @return float|bool Returns a float if a version number is detected,\n * otherwise true/false.\n */\n osx: function() {\n return _populate() || _osx;\n },\n\n /**\n * Check if the user is running Linux.\n *\n * @return bool `true' if the user's OS is some flavor of Linux.\n */\n linux: function() {\n return _populate() || _linux;\n },\n\n /**\n * Check if the user is running on an iPhone or iPod platform.\n *\n * @return bool `true' if the user is running some flavor of the\n * iPhone OS.\n */\n iphone: function() {\n return _populate() || _iphone;\n },\n\n mobile: function() {\n return _populate() || (_iphone || _ipad || _android || _mobile);\n },\n\n nativeApp: function() {\n // webviews inside of the native apps\n return _populate() || _native;\n },\n\n android: function() {\n return _populate() || _android;\n },\n\n ipad: function() {\n return _populate() || _ipad;\n }\n};\n\nmodule.exports = UserAgent_DEPRECATED;\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ExecutionEnvironment\n */\n\n/*jslint evil: true */\n\n'use strict';\n\nvar canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners:\n canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n useHasFeature =\n document.implementation &&\n document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n if (!ExecutionEnvironment.canUseDOM ||\n capture && !('addEventListener' in document)) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = eventName in document;\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\n\nmodule.exports = isEventSupported;\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule normalizeWheel\n * @typechecks\n */\n\n'use strict';\n\nvar UserAgent_DEPRECATED = require('./UserAgent_DEPRECATED');\n\nvar isEventSupported = require('./isEventSupported');\n\n\n// Reasonable defaults\nvar PIXEL_STEP = 10;\nvar LINE_HEIGHT = 40;\nvar PAGE_HEIGHT = 800;\n\n/**\n * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is\n * complicated, thus this doc is long and (hopefully) detailed enough to answer\n * your questions.\n *\n * If you need to react to the mouse wheel in a predictable way, this code is\n * like your bestest friend. * hugs *\n *\n * As of today, there are 4 DOM event types you can listen to:\n *\n * 'wheel' -- Chrome(31+), FF(17+), IE(9+)\n * 'mousewheel' -- Chrome, IE(6+), Opera, Safari\n * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother!\n * 'DOMMouseScroll' -- FF(0.9.7+) since 2003\n *\n * So what to do? The is the best:\n *\n * normalizeWheel.getEventType();\n *\n * In your event callback, use this code to get sane interpretation of the\n * deltas. This code will return an object with properties:\n *\n * spinX -- normalized spin speed (use for zoom) - x plane\n * spinY -- \" - y plane\n * pixelX -- normalized distance (to pixels) - x plane\n * pixelY -- \" - y plane\n *\n * Wheel values are provided by the browser assuming you are using the wheel to\n * scroll a web page by a number of lines or pixels (or pages). Values can vary\n * significantly on different platforms and browsers, forgetting that you can\n * scroll at different speeds. Some devices (like trackpads) emit more events\n * at smaller increments with fine granularity, and some emit massive jumps with\n * linear speed or acceleration.\n *\n * This code does its best to normalize the deltas for you:\n *\n * - spin is trying to normalize how far the wheel was spun (or trackpad\n * dragged). This is super useful for zoom support where you want to\n * throw away the chunky scroll steps on the PC and make those equal to\n * the slow and smooth tiny steps on the Mac. Key data: This code tries to\n * resolve a single slow step on a wheel to 1.\n *\n * - pixel is normalizing the desired scroll delta in pixel units. You'll\n * get the crazy differences between browsers, but at least it'll be in\n * pixels!\n *\n * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This\n * should translate to positive value zooming IN, negative zooming OUT.\n * This matches the newer 'wheel' event.\n *\n * Why are there spinX, spinY (or pixels)?\n *\n * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn\n * with a mouse. It results in side-scrolling in the browser by default.\n *\n * - spinY is what you expect -- it's the classic axis of a mouse wheel.\n *\n * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and\n * probably is by browsers in conjunction with fancy 3D controllers .. but\n * you know.\n *\n * Implementation info:\n *\n * Examples of 'wheel' event if you scroll slowly (down) by one step with an\n * average mouse:\n *\n * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120)\n * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12)\n * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A)\n * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120)\n * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120)\n *\n * On the trackpad:\n *\n * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6)\n * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A)\n *\n * On other/older browsers.. it's more complicated as there can be multiple and\n * also missing delta values.\n *\n * The 'wheel' event is more standard:\n *\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents\n *\n * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and\n * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain\n * backward compatibility with older events. Those other values help us\n * better normalize spin speed. Example of what the browsers provide:\n *\n * | event.wheelDelta | event.detail\n * ------------------+------------------+--------------\n * Safari v5/OS X | -120 | 0\n * Safari v5/Win7 | -120 | 0\n * Chrome v17/OS X | -120 | 0\n * Chrome v17/Win7 | -120 | 0\n * IE9/Win7 | -120 | undefined\n * Firefox v4/OS X | undefined | 1\n * Firefox v4/Win7 | undefined | 3\n *\n */\nfunction normalizeWheel(/*object*/ event) /*object*/ {\n var sX = 0, sY = 0, // spinX, spinY\n pX = 0, pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in event) { sY = event.detail; }\n if ('wheelDelta' in event) { sY = -event.wheelDelta / 120; }\n if ('wheelDeltaY' in event) { sY = -event.wheelDeltaY / 120; }\n if ('wheelDeltaX' in event) { sX = -event.wheelDeltaX / 120; }\n\n // side scrolling on FF with DOMMouseScroll\n if ( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in event) { pY = event.deltaY; }\n if ('deltaX' in event) { pX = event.deltaX; }\n\n if ((pX || pY) && event.deltaMode) {\n if (event.deltaMode == 1) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) { sX = (pX < 1) ? -1 : 1; }\n if (pY && !sY) { sY = (pY < 1) ? -1 : 1; }\n\n return { spinX : sX,\n spinY : sY,\n pixelX : pX,\n pixelY : pY };\n}\n\n\n/**\n * The best combination if you prefer spinX + spinY normalization. It favors\n * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with\n * 'wheel' event, making spin speed determination impossible.\n */\nnormalizeWheel.getEventType = function() /*string*/ {\n return (UserAgent_DEPRECATED.firefox())\n ? 'DOMMouseScroll'\n : (isEventSupported('wheel'))\n ? 'wheel'\n : 'mousewheel';\n};\n\nmodule.exports = normalizeWheel;\n","module.exports = require('./src/normalizeWheel.js');\n","import { __assign, __extends } from 'tslib';\nimport * as React from 'react';\nimport normalizeWheel from 'normalize-wheel';\n\n/**\r\n * Compute the dimension of the crop area based on media size,\r\n * aspect ratio and optionally rotation\r\n */\nfunction getCropSize(mediaWidth, mediaHeight, containerWidth, containerHeight, aspect, rotation) {\n if (rotation === void 0) {\n rotation = 0;\n }\n var _a = rotateSize(mediaWidth, mediaHeight, rotation),\n width = _a.width,\n height = _a.height;\n var fittingWidth = Math.min(width, containerWidth);\n var fittingHeight = Math.min(height, containerHeight);\n if (fittingWidth > fittingHeight * aspect) {\n return {\n width: fittingHeight * aspect,\n height: fittingHeight\n };\n }\n return {\n width: fittingWidth,\n height: fittingWidth / aspect\n };\n}\n/**\r\n * Compute media zoom.\r\n * We fit the media into the container with \"max-width: 100%; max-height: 100%;\"\r\n */\nfunction getMediaZoom(mediaSize) {\n // Take the axis with more pixels to improve accuracy\n return mediaSize.width > mediaSize.height ? mediaSize.width / mediaSize.naturalWidth : mediaSize.height / mediaSize.naturalHeight;\n}\n/**\r\n * Ensure a new media position stays in the crop area.\r\n */\nfunction restrictPosition(position, mediaSize, cropSize, zoom, rotation) {\n if (rotation === void 0) {\n rotation = 0;\n }\n var _a = rotateSize(mediaSize.width, mediaSize.height, rotation),\n width = _a.width,\n height = _a.height;\n return {\n x: restrictPositionCoord(position.x, width, cropSize.width, zoom),\n y: restrictPositionCoord(position.y, height, cropSize.height, zoom)\n };\n}\nfunction restrictPositionCoord(position, mediaSize, cropSize, zoom) {\n var maxPosition = mediaSize * zoom / 2 - cropSize / 2;\n return clamp(position, -maxPosition, maxPosition);\n}\nfunction getDistanceBetweenPoints(pointA, pointB) {\n return Math.sqrt(Math.pow(pointA.y - pointB.y, 2) + Math.pow(pointA.x - pointB.x, 2));\n}\nfunction getRotationBetweenPoints(pointA, pointB) {\n return Math.atan2(pointB.y - pointA.y, pointB.x - pointA.x) * 180 / Math.PI;\n}\n/**\r\n * Compute the output cropped area of the media in percentages and pixels.\r\n * x/y are the top-left coordinates on the src media\r\n */\nfunction computeCroppedArea(crop, mediaSize, cropSize, aspect, zoom, rotation, restrictPosition) {\n if (rotation === void 0) {\n rotation = 0;\n }\n if (restrictPosition === void 0) {\n restrictPosition = true;\n }\n // if the media is rotated by the user, we cannot limit the position anymore\n // as it might need to be negative.\n var limitAreaFn = restrictPosition ? limitArea : noOp;\n var mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation);\n var mediaNaturalBBoxSize = rotateSize(mediaSize.naturalWidth, mediaSize.naturalHeight, rotation);\n // calculate the crop area in percentages\n // in the rotated space\n var croppedAreaPercentages = {\n x: limitAreaFn(100, ((mediaBBoxSize.width - cropSize.width / zoom) / 2 - crop.x / zoom) / mediaBBoxSize.width * 100),\n y: limitAreaFn(100, ((mediaBBoxSize.height - cropSize.height / zoom) / 2 - crop.y / zoom) / mediaBBoxSize.height * 100),\n width: limitAreaFn(100, cropSize.width / mediaBBoxSize.width * 100 / zoom),\n height: limitAreaFn(100, cropSize.height / mediaBBoxSize.height * 100 / zoom)\n };\n // we compute the pixels size naively\n var widthInPixels = Math.round(limitAreaFn(mediaNaturalBBoxSize.width, croppedAreaPercentages.width * mediaNaturalBBoxSize.width / 100));\n var heightInPixels = Math.round(limitAreaFn(mediaNaturalBBoxSize.height, croppedAreaPercentages.height * mediaNaturalBBoxSize.height / 100));\n var isImgWiderThanHigh = mediaNaturalBBoxSize.width >= mediaNaturalBBoxSize.height * aspect;\n // then we ensure the width and height exactly match the aspect (to avoid rounding approximations)\n // if the media is wider than high, when zoom is 0, the crop height will be equals to image height\n // thus we want to compute the width from the height and aspect for accuracy.\n // Otherwise, we compute the height from width and aspect.\n var sizePixels = isImgWiderThanHigh ? {\n width: Math.round(heightInPixels * aspect),\n height: heightInPixels\n } : {\n width: widthInPixels,\n height: Math.round(widthInPixels / aspect)\n };\n var croppedAreaPixels = __assign(__assign({}, sizePixels), {\n x: Math.round(limitAreaFn(mediaNaturalBBoxSize.width - sizePixels.width, croppedAreaPercentages.x * mediaNaturalBBoxSize.width / 100)),\n y: Math.round(limitAreaFn(mediaNaturalBBoxSize.height - sizePixels.height, croppedAreaPercentages.y * mediaNaturalBBoxSize.height / 100))\n });\n return {\n croppedAreaPercentages: croppedAreaPercentages,\n croppedAreaPixels: croppedAreaPixels\n };\n}\n/**\r\n * Ensure the returned value is between 0 and max\r\n */\nfunction limitArea(max, value) {\n return Math.min(max, Math.max(0, value));\n}\nfunction noOp(_max, value) {\n return value;\n}\n/**\r\n * Compute crop and zoom from the croppedAreaPercentages.\r\n */\nfunction getInitialCropFromCroppedAreaPercentages(croppedAreaPercentages, mediaSize, rotation, cropSize, minZoom, maxZoom) {\n var mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation);\n // This is the inverse process of computeCroppedArea\n var zoom = clamp(cropSize.width / mediaBBoxSize.width * (100 / croppedAreaPercentages.width), minZoom, maxZoom);\n var crop = {\n x: zoom * mediaBBoxSize.width / 2 - cropSize.width / 2 - mediaBBoxSize.width * zoom * (croppedAreaPercentages.x / 100),\n y: zoom * mediaBBoxSize.height / 2 - cropSize.height / 2 - mediaBBoxSize.height * zoom * (croppedAreaPercentages.y / 100)\n };\n return {\n crop: crop,\n zoom: zoom\n };\n}\n/**\r\n * Compute zoom from the croppedAreaPixels\r\n */\nfunction getZoomFromCroppedAreaPixels(croppedAreaPixels, mediaSize, cropSize) {\n var mediaZoom = getMediaZoom(mediaSize);\n return cropSize.height > cropSize.width ? cropSize.height / (croppedAreaPixels.height * mediaZoom) : cropSize.width / (croppedAreaPixels.width * mediaZoom);\n}\n/**\r\n * Compute crop and zoom from the croppedAreaPixels\r\n */\nfunction getInitialCropFromCroppedAreaPixels(croppedAreaPixels, mediaSize, rotation, cropSize, minZoom, maxZoom) {\n if (rotation === void 0) {\n rotation = 0;\n }\n var mediaNaturalBBoxSize = rotateSize(mediaSize.naturalWidth, mediaSize.naturalHeight, rotation);\n var zoom = clamp(getZoomFromCroppedAreaPixels(croppedAreaPixels, mediaSize, cropSize), minZoom, maxZoom);\n var cropZoom = cropSize.height > cropSize.width ? cropSize.height / croppedAreaPixels.height : cropSize.width / croppedAreaPixels.width;\n var crop = {\n x: ((mediaNaturalBBoxSize.width - croppedAreaPixels.width) / 2 - croppedAreaPixels.x) * cropZoom,\n y: ((mediaNaturalBBoxSize.height - croppedAreaPixels.height) / 2 - croppedAreaPixels.y) * cropZoom\n };\n return {\n crop: crop,\n zoom: zoom\n };\n}\n/**\r\n * Return the point that is the center of point a and b\r\n */\nfunction getCenter(a, b) {\n return {\n x: (b.x + a.x) / 2,\n y: (b.y + a.y) / 2\n };\n}\nfunction getRadianAngle(degreeValue) {\n return degreeValue * Math.PI / 180;\n}\n/**\r\n * Returns the new bounding area of a rotated rectangle.\r\n */\nfunction rotateSize(width, height, rotation) {\n var rotRad = getRadianAngle(rotation);\n return {\n width: Math.abs(Math.cos(rotRad) * width) + Math.abs(Math.sin(rotRad) * height),\n height: Math.abs(Math.sin(rotRad) * width) + Math.abs(Math.cos(rotRad) * height)\n };\n}\n/**\r\n * Clamp value between min and max\r\n */\nfunction clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n/**\r\n * Combine multiple class names into a single string.\r\n */\nfunction classNames() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return args.filter(function (value) {\n if (typeof value === 'string' && value.length > 0) {\n return true;\n }\n return false;\n }).join(' ').trim();\n}\n\nvar css_248z = \".reactEasyCrop_Container {\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n overflow: hidden;\\n user-select: none;\\n touch-action: none;\\n cursor: move;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n\\n.reactEasyCrop_Image,\\n.reactEasyCrop_Video {\\n will-change: transform; /* this improves performances and prevent painting issues on iOS Chrome */\\n}\\n\\n.reactEasyCrop_Contain {\\n max-width: 100%;\\n max-height: 100%;\\n margin: auto;\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n}\\n.reactEasyCrop_Cover_Horizontal {\\n width: 100%;\\n height: auto;\\n}\\n.reactEasyCrop_Cover_Vertical {\\n width: auto;\\n height: 100%;\\n}\\n\\n.reactEasyCrop_CropArea {\\n position: absolute;\\n left: 50%;\\n top: 50%;\\n transform: translate(-50%, -50%);\\n border: 1px solid rgba(255, 255, 255, 0.5);\\n box-sizing: border-box;\\n box-shadow: 0 0 0 9999em;\\n color: rgba(0, 0, 0, 0.5);\\n overflow: hidden;\\n}\\n\\n.reactEasyCrop_CropAreaRound {\\n border-radius: 50%;\\n}\\n\\n.reactEasyCrop_CropAreaGrid::before {\\n content: ' ';\\n box-sizing: border-box;\\n position: absolute;\\n border: 1px solid rgba(255, 255, 255, 0.5);\\n top: 0;\\n bottom: 0;\\n left: 33.33%;\\n right: 33.33%;\\n border-top: 0;\\n border-bottom: 0;\\n}\\n\\n.reactEasyCrop_CropAreaGrid::after {\\n content: ' ';\\n box-sizing: border-box;\\n position: absolute;\\n border: 1px solid rgba(255, 255, 255, 0.5);\\n top: 33.33%;\\n bottom: 33.33%;\\n left: 0;\\n right: 0;\\n border-left: 0;\\n border-right: 0;\\n}\\n\";\n\nvar MIN_ZOOM = 1;\nvar MAX_ZOOM = 3;\nvar KEYBOARD_STEP = 1;\nvar Cropper = /** @class */function (_super) {\n __extends(Cropper, _super);\n function Cropper() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.cropperRef = React.createRef();\n _this.imageRef = React.createRef();\n _this.videoRef = React.createRef();\n _this.containerPosition = {\n x: 0,\n y: 0\n };\n _this.containerRef = null;\n _this.styleRef = null;\n _this.containerRect = null;\n _this.mediaSize = {\n width: 0,\n height: 0,\n naturalWidth: 0,\n naturalHeight: 0\n };\n _this.dragStartPosition = {\n x: 0,\n y: 0\n };\n _this.dragStartCrop = {\n x: 0,\n y: 0\n };\n _this.gestureZoomStart = 0;\n _this.gestureRotationStart = 0;\n _this.isTouching = false;\n _this.lastPinchDistance = 0;\n _this.lastPinchRotation = 0;\n _this.rafDragTimeout = null;\n _this.rafPinchTimeout = null;\n _this.wheelTimer = null;\n _this.currentDoc = typeof document !== 'undefined' ? document : null;\n _this.currentWindow = typeof window !== 'undefined' ? window : null;\n _this.resizeObserver = null;\n _this.previousCropSize = null;\n _this.isInitialized = false;\n _this.state = {\n cropSize: null,\n hasWheelJustStarted: false,\n mediaObjectFit: undefined\n };\n _this.initResizeObserver = function () {\n if (typeof window.ResizeObserver === 'undefined' || !_this.containerRef) {\n return;\n }\n var isFirstResize = true;\n _this.resizeObserver = new window.ResizeObserver(function (entries) {\n if (isFirstResize) {\n isFirstResize = false; // observe() is called on mount, we don't want to trigger a recompute on mount\n return;\n }\n _this.computeSizes();\n });\n _this.resizeObserver.observe(_this.containerRef);\n };\n // this is to prevent Safari on iOS >= 10 to zoom the page\n _this.preventZoomSafari = function (e) {\n return e.preventDefault();\n };\n _this.cleanEvents = function () {\n if (!_this.currentDoc) return;\n _this.currentDoc.removeEventListener('mousemove', _this.onMouseMove);\n _this.currentDoc.removeEventListener('mouseup', _this.onDragStopped);\n _this.currentDoc.removeEventListener('touchmove', _this.onTouchMove);\n _this.currentDoc.removeEventListener('touchend', _this.onDragStopped);\n _this.currentDoc.removeEventListener('gesturechange', _this.onGestureChange);\n _this.currentDoc.removeEventListener('gestureend', _this.onGestureEnd);\n _this.currentDoc.removeEventListener('scroll', _this.onScroll);\n };\n _this.clearScrollEvent = function () {\n if (_this.containerRef) _this.containerRef.removeEventListener('wheel', _this.onWheel);\n if (_this.wheelTimer) {\n clearTimeout(_this.wheelTimer);\n }\n };\n _this.onMediaLoad = function () {\n var cropSize = _this.computeSizes();\n if (cropSize) {\n _this.previousCropSize = cropSize;\n _this.emitCropData();\n _this.setInitialCrop(cropSize);\n _this.isInitialized = true;\n }\n if (_this.props.onMediaLoaded) {\n _this.props.onMediaLoaded(_this.mediaSize);\n }\n };\n _this.setInitialCrop = function (cropSize) {\n if (_this.props.initialCroppedAreaPercentages) {\n var _a = getInitialCropFromCroppedAreaPercentages(_this.props.initialCroppedAreaPercentages, _this.mediaSize, _this.props.rotation, cropSize, _this.props.minZoom, _this.props.maxZoom),\n crop = _a.crop,\n zoom = _a.zoom;\n _this.props.onCropChange(crop);\n _this.props.onZoomChange && _this.props.onZoomChange(zoom);\n } else if (_this.props.initialCroppedAreaPixels) {\n var _b = getInitialCropFromCroppedAreaPixels(_this.props.initialCroppedAreaPixels, _this.mediaSize, _this.props.rotation, cropSize, _this.props.minZoom, _this.props.maxZoom),\n crop = _b.crop,\n zoom = _b.zoom;\n _this.props.onCropChange(crop);\n _this.props.onZoomChange && _this.props.onZoomChange(zoom);\n }\n };\n _this.computeSizes = function () {\n var _a, _b, _c, _d, _e, _f;\n var mediaRef = _this.imageRef.current || _this.videoRef.current;\n if (mediaRef && _this.containerRef) {\n _this.containerRect = _this.containerRef.getBoundingClientRect();\n _this.saveContainerPosition();\n var containerAspect = _this.containerRect.width / _this.containerRect.height;\n var naturalWidth = ((_a = _this.imageRef.current) === null || _a === void 0 ? void 0 : _a.naturalWidth) || ((_b = _this.videoRef.current) === null || _b === void 0 ? void 0 : _b.videoWidth) || 0;\n var naturalHeight = ((_c = _this.imageRef.current) === null || _c === void 0 ? void 0 : _c.naturalHeight) || ((_d = _this.videoRef.current) === null || _d === void 0 ? void 0 : _d.videoHeight) || 0;\n var isMediaScaledDown = mediaRef.offsetWidth < naturalWidth || mediaRef.offsetHeight < naturalHeight;\n var mediaAspect = naturalWidth / naturalHeight;\n // We do not rely on the offsetWidth/offsetHeight if the media is scaled down\n // as the values they report are rounded. That will result in precision losses\n // when calculating zoom. We use the fact that the media is positionned relative\n // to the container. That allows us to use the container's dimensions\n // and natural aspect ratio of the media to calculate accurate media size.\n // However, for this to work, the container should not be rotated\n var renderedMediaSize = void 0;\n if (isMediaScaledDown) {\n switch (_this.state.mediaObjectFit) {\n default:\n case 'contain':\n renderedMediaSize = containerAspect > mediaAspect ? {\n width: _this.containerRect.height * mediaAspect,\n height: _this.containerRect.height\n } : {\n width: _this.containerRect.width,\n height: _this.containerRect.width / mediaAspect\n };\n break;\n case 'horizontal-cover':\n renderedMediaSize = {\n width: _this.containerRect.width,\n height: _this.containerRect.width / mediaAspect\n };\n break;\n case 'vertical-cover':\n renderedMediaSize = {\n width: _this.containerRect.height * mediaAspect,\n height: _this.containerRect.height\n };\n break;\n }\n } else {\n renderedMediaSize = {\n width: mediaRef.offsetWidth,\n height: mediaRef.offsetHeight\n };\n }\n _this.mediaSize = __assign(__assign({}, renderedMediaSize), {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight\n });\n // set media size in the parent\n if (_this.props.setMediaSize) {\n _this.props.setMediaSize(_this.mediaSize);\n }\n var cropSize = _this.props.cropSize ? _this.props.cropSize : getCropSize(_this.mediaSize.width, _this.mediaSize.height, _this.containerRect.width, _this.containerRect.height, _this.props.aspect, _this.props.rotation);\n if (((_e = _this.state.cropSize) === null || _e === void 0 ? void 0 : _e.height) !== cropSize.height || ((_f = _this.state.cropSize) === null || _f === void 0 ? void 0 : _f.width) !== cropSize.width) {\n _this.props.onCropSizeChange && _this.props.onCropSizeChange(cropSize);\n }\n _this.setState({\n cropSize: cropSize\n }, _this.recomputeCropPosition);\n // pass crop size to parent\n if (_this.props.setCropSize) {\n _this.props.setCropSize(cropSize);\n }\n return cropSize;\n }\n };\n _this.saveContainerPosition = function () {\n if (_this.containerRef) {\n var bounds = _this.containerRef.getBoundingClientRect();\n _this.containerPosition = {\n x: bounds.left,\n y: bounds.top\n };\n }\n };\n _this.onMouseDown = function (e) {\n if (!_this.currentDoc) return;\n e.preventDefault();\n _this.currentDoc.addEventListener('mousemove', _this.onMouseMove);\n _this.currentDoc.addEventListener('mouseup', _this.onDragStopped);\n _this.saveContainerPosition();\n _this.onDragStart(Cropper.getMousePoint(e));\n };\n _this.onMouseMove = function (e) {\n return _this.onDrag(Cropper.getMousePoint(e));\n };\n _this.onScroll = function (e) {\n if (!_this.currentDoc) return;\n e.preventDefault();\n _this.saveContainerPosition();\n };\n _this.onTouchStart = function (e) {\n if (!_this.currentDoc) return;\n _this.isTouching = true;\n if (_this.props.onTouchRequest && !_this.props.onTouchRequest(e)) {\n return;\n }\n _this.currentDoc.addEventListener('touchmove', _this.onTouchMove, {\n passive: false\n }); // iOS 11 now defaults to passive: true\n _this.currentDoc.addEventListener('touchend', _this.onDragStopped);\n _this.saveContainerPosition();\n if (e.touches.length === 2) {\n _this.onPinchStart(e);\n } else if (e.touches.length === 1) {\n _this.onDragStart(Cropper.getTouchPoint(e.touches[0]));\n }\n };\n _this.onTouchMove = function (e) {\n // Prevent whole page from scrolling on iOS.\n e.preventDefault();\n if (e.touches.length === 2) {\n _this.onPinchMove(e);\n } else if (e.touches.length === 1) {\n _this.onDrag(Cropper.getTouchPoint(e.touches[0]));\n }\n };\n _this.onGestureStart = function (e) {\n if (!_this.currentDoc) return;\n e.preventDefault();\n _this.currentDoc.addEventListener('gesturechange', _this.onGestureChange);\n _this.currentDoc.addEventListener('gestureend', _this.onGestureEnd);\n _this.gestureZoomStart = _this.props.zoom;\n _this.gestureRotationStart = _this.props.rotation;\n };\n _this.onGestureChange = function (e) {\n e.preventDefault();\n if (_this.isTouching) {\n // this is to avoid conflict between gesture and touch events\n return;\n }\n var point = Cropper.getMousePoint(e);\n var newZoom = _this.gestureZoomStart - 1 + e.scale;\n _this.setNewZoom(newZoom, point, {\n shouldUpdatePosition: true\n });\n if (_this.props.onRotationChange) {\n var newRotation = _this.gestureRotationStart + e.rotation;\n _this.props.onRotationChange(newRotation);\n }\n };\n _this.onGestureEnd = function (e) {\n _this.cleanEvents();\n };\n _this.onDragStart = function (_a) {\n var _b, _c;\n var x = _a.x,\n y = _a.y;\n _this.dragStartPosition = {\n x: x,\n y: y\n };\n _this.dragStartCrop = __assign({}, _this.props.crop);\n (_c = (_b = _this.props).onInteractionStart) === null || _c === void 0 ? void 0 : _c.call(_b);\n };\n _this.onDrag = function (_a) {\n var x = _a.x,\n y = _a.y;\n if (!_this.currentWindow) return;\n if (_this.rafDragTimeout) _this.currentWindow.cancelAnimationFrame(_this.rafDragTimeout);\n _this.rafDragTimeout = _this.currentWindow.requestAnimationFrame(function () {\n if (!_this.state.cropSize) return;\n if (x === undefined || y === undefined) return;\n var offsetX = x - _this.dragStartPosition.x;\n var offsetY = y - _this.dragStartPosition.y;\n var requestedPosition = {\n x: _this.dragStartCrop.x + offsetX,\n y: _this.dragStartCrop.y + offsetY\n };\n var newPosition = _this.props.restrictPosition ? restrictPosition(requestedPosition, _this.mediaSize, _this.state.cropSize, _this.props.zoom, _this.props.rotation) : requestedPosition;\n _this.props.onCropChange(newPosition);\n });\n };\n _this.onDragStopped = function () {\n var _a, _b;\n _this.isTouching = false;\n _this.cleanEvents();\n _this.emitCropData();\n (_b = (_a = _this.props).onInteractionEnd) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n _this.onWheel = function (e) {\n if (!_this.currentWindow) return;\n if (_this.props.onWheelRequest && !_this.props.onWheelRequest(e)) {\n return;\n }\n e.preventDefault();\n var point = Cropper.getMousePoint(e);\n var pixelY = normalizeWheel(e).pixelY;\n var newZoom = _this.props.zoom - pixelY * _this.props.zoomSpeed / 200;\n _this.setNewZoom(newZoom, point, {\n shouldUpdatePosition: true\n });\n if (!_this.state.hasWheelJustStarted) {\n _this.setState({\n hasWheelJustStarted: true\n }, function () {\n var _a, _b;\n return (_b = (_a = _this.props).onInteractionStart) === null || _b === void 0 ? void 0 : _b.call(_a);\n });\n }\n if (_this.wheelTimer) {\n clearTimeout(_this.wheelTimer);\n }\n _this.wheelTimer = _this.currentWindow.setTimeout(function () {\n return _this.setState({\n hasWheelJustStarted: false\n }, function () {\n var _a, _b;\n return (_b = (_a = _this.props).onInteractionEnd) === null || _b === void 0 ? void 0 : _b.call(_a);\n });\n }, 250);\n };\n _this.getPointOnContainer = function (_a, containerTopLeft) {\n var x = _a.x,\n y = _a.y;\n if (!_this.containerRect) {\n throw new Error('The Cropper is not mounted');\n }\n return {\n x: _this.containerRect.width / 2 - (x - containerTopLeft.x),\n y: _this.containerRect.height / 2 - (y - containerTopLeft.y)\n };\n };\n _this.getPointOnMedia = function (_a) {\n var x = _a.x,\n y = _a.y;\n var _b = _this.props,\n crop = _b.crop,\n zoom = _b.zoom;\n return {\n x: (x + crop.x) / zoom,\n y: (y + crop.y) / zoom\n };\n };\n _this.setNewZoom = function (zoom, point, _a) {\n var _b = _a === void 0 ? {} : _a,\n _c = _b.shouldUpdatePosition,\n shouldUpdatePosition = _c === void 0 ? true : _c;\n if (!_this.state.cropSize || !_this.props.onZoomChange) return;\n var newZoom = clamp(zoom, _this.props.minZoom, _this.props.maxZoom);\n if (shouldUpdatePosition) {\n var zoomPoint = _this.getPointOnContainer(point, _this.containerPosition);\n var zoomTarget = _this.getPointOnMedia(zoomPoint);\n var requestedPosition = {\n x: zoomTarget.x * newZoom - zoomPoint.x,\n y: zoomTarget.y * newZoom - zoomPoint.y\n };\n var newPosition = _this.props.restrictPosition ? restrictPosition(requestedPosition, _this.mediaSize, _this.state.cropSize, newZoom, _this.props.rotation) : requestedPosition;\n _this.props.onCropChange(newPosition);\n }\n _this.props.onZoomChange(newZoom);\n };\n _this.getCropData = function () {\n if (!_this.state.cropSize) {\n return null;\n }\n // this is to ensure the crop is correctly restricted after a zoom back (https://github.com/ValentinH/react-easy-crop/issues/6)\n var restrictedPosition = _this.props.restrictPosition ? restrictPosition(_this.props.crop, _this.mediaSize, _this.state.cropSize, _this.props.zoom, _this.props.rotation) : _this.props.crop;\n return computeCroppedArea(restrictedPosition, _this.mediaSize, _this.state.cropSize, _this.getAspect(), _this.props.zoom, _this.props.rotation, _this.props.restrictPosition);\n };\n _this.emitCropData = function () {\n var cropData = _this.getCropData();\n if (!cropData) return;\n var croppedAreaPercentages = cropData.croppedAreaPercentages,\n croppedAreaPixels = cropData.croppedAreaPixels;\n if (_this.props.onCropComplete) {\n _this.props.onCropComplete(croppedAreaPercentages, croppedAreaPixels);\n }\n if (_this.props.onCropAreaChange) {\n _this.props.onCropAreaChange(croppedAreaPercentages, croppedAreaPixels);\n }\n };\n _this.emitCropAreaChange = function () {\n var cropData = _this.getCropData();\n if (!cropData) return;\n var croppedAreaPercentages = cropData.croppedAreaPercentages,\n croppedAreaPixels = cropData.croppedAreaPixels;\n if (_this.props.onCropAreaChange) {\n _this.props.onCropAreaChange(croppedAreaPercentages, croppedAreaPixels);\n }\n };\n _this.recomputeCropPosition = function () {\n var _a, _b;\n if (!_this.state.cropSize) return;\n var adjustedCrop = _this.props.crop;\n // Only scale if we're initialized and this is a legitimate resize\n if (_this.isInitialized && ((_a = _this.previousCropSize) === null || _a === void 0 ? void 0 : _a.width) && ((_b = _this.previousCropSize) === null || _b === void 0 ? void 0 : _b.height)) {\n var sizeChanged = Math.abs(_this.previousCropSize.width - _this.state.cropSize.width) > 1e-6 || Math.abs(_this.previousCropSize.height - _this.state.cropSize.height) > 1e-6;\n if (sizeChanged) {\n var scaleX = _this.state.cropSize.width / _this.previousCropSize.width;\n var scaleY = _this.state.cropSize.height / _this.previousCropSize.height;\n adjustedCrop = {\n x: _this.props.crop.x * scaleX,\n y: _this.props.crop.y * scaleY\n };\n }\n }\n var newPosition = _this.props.restrictPosition ? restrictPosition(adjustedCrop, _this.mediaSize, _this.state.cropSize, _this.props.zoom, _this.props.rotation) : adjustedCrop;\n _this.previousCropSize = _this.state.cropSize;\n _this.props.onCropChange(newPosition);\n _this.emitCropData();\n };\n _this.onKeyDown = function (event) {\n var _a, _b;\n var _c = _this.props,\n crop = _c.crop,\n onCropChange = _c.onCropChange,\n keyboardStep = _c.keyboardStep,\n zoom = _c.zoom,\n rotation = _c.rotation;\n var step = keyboardStep;\n if (!_this.state.cropSize) return;\n // if the shift key is pressed, reduce the step to allow finer control\n if (event.shiftKey) {\n step *= 0.2;\n }\n var newCrop = __assign({}, crop);\n switch (event.key) {\n case 'ArrowUp':\n newCrop.y -= step;\n event.preventDefault();\n break;\n case 'ArrowDown':\n newCrop.y += step;\n event.preventDefault();\n break;\n case 'ArrowLeft':\n newCrop.x -= step;\n event.preventDefault();\n break;\n case 'ArrowRight':\n newCrop.x += step;\n event.preventDefault();\n break;\n default:\n return;\n }\n if (_this.props.restrictPosition) {\n newCrop = restrictPosition(newCrop, _this.mediaSize, _this.state.cropSize, zoom, rotation);\n }\n if (!event.repeat) {\n (_b = (_a = _this.props).onInteractionStart) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n onCropChange(newCrop);\n };\n _this.onKeyUp = function (event) {\n var _a, _b;\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowDown':\n case 'ArrowLeft':\n case 'ArrowRight':\n event.preventDefault();\n break;\n default:\n return;\n }\n _this.emitCropData();\n (_b = (_a = _this.props).onInteractionEnd) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n return _this;\n }\n Cropper.prototype.componentDidMount = function () {\n if (!this.currentDoc || !this.currentWindow) return;\n if (this.containerRef) {\n if (this.containerRef.ownerDocument) {\n this.currentDoc = this.containerRef.ownerDocument;\n }\n if (this.currentDoc.defaultView) {\n this.currentWindow = this.currentDoc.defaultView;\n }\n this.initResizeObserver();\n // only add window resize listener if ResizeObserver is not supported. Otherwise, it would be redundant\n if (typeof window.ResizeObserver === 'undefined') {\n this.currentWindow.addEventListener('resize', this.computeSizes);\n }\n this.props.zoomWithScroll && this.containerRef.addEventListener('wheel', this.onWheel, {\n passive: false\n });\n this.containerRef.addEventListener('gesturestart', this.onGestureStart);\n }\n this.currentDoc.addEventListener('scroll', this.onScroll);\n if (!this.props.disableAutomaticStylesInjection) {\n this.styleRef = this.currentDoc.createElement('style');\n this.styleRef.setAttribute('type', 'text/css');\n if (this.props.nonce) {\n this.styleRef.setAttribute('nonce', this.props.nonce);\n }\n this.styleRef.innerHTML = css_248z;\n this.currentDoc.head.appendChild(this.styleRef);\n }\n // when rendered via SSR, the image can already be loaded and its onLoad callback will never be called\n if (this.imageRef.current && this.imageRef.current.complete) {\n this.onMediaLoad();\n }\n // set image and video refs in the parent if the callbacks exist\n if (this.props.setImageRef) {\n this.props.setImageRef(this.imageRef);\n }\n if (this.props.setVideoRef) {\n this.props.setVideoRef(this.videoRef);\n }\n if (this.props.setCropperRef) {\n this.props.setCropperRef(this.cropperRef);\n }\n };\n Cropper.prototype.componentWillUnmount = function () {\n var _a, _b;\n if (!this.currentDoc || !this.currentWindow) return;\n if (typeof window.ResizeObserver === 'undefined') {\n this.currentWindow.removeEventListener('resize', this.computeSizes);\n }\n (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\n if (this.containerRef) {\n this.containerRef.removeEventListener('gesturestart', this.preventZoomSafari);\n }\n if (this.styleRef) {\n (_b = this.styleRef.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(this.styleRef);\n }\n this.cleanEvents();\n this.props.zoomWithScroll && this.clearScrollEvent();\n };\n Cropper.prototype.componentDidUpdate = function (prevProps) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n if (prevProps.rotation !== this.props.rotation) {\n this.computeSizes();\n this.recomputeCropPosition();\n } else if (prevProps.aspect !== this.props.aspect) {\n this.computeSizes();\n } else if (prevProps.objectFit !== this.props.objectFit) {\n this.computeSizes();\n } else if (prevProps.zoom !== this.props.zoom) {\n this.recomputeCropPosition();\n } else if (((_a = prevProps.cropSize) === null || _a === void 0 ? void 0 : _a.height) !== ((_b = this.props.cropSize) === null || _b === void 0 ? void 0 : _b.height) || ((_c = prevProps.cropSize) === null || _c === void 0 ? void 0 : _c.width) !== ((_d = this.props.cropSize) === null || _d === void 0 ? void 0 : _d.width)) {\n this.computeSizes();\n } else if (((_e = prevProps.crop) === null || _e === void 0 ? void 0 : _e.x) !== ((_f = this.props.crop) === null || _f === void 0 ? void 0 : _f.x) || ((_g = prevProps.crop) === null || _g === void 0 ? void 0 : _g.y) !== ((_h = this.props.crop) === null || _h === void 0 ? void 0 : _h.y)) {\n this.emitCropAreaChange();\n }\n if (prevProps.zoomWithScroll !== this.props.zoomWithScroll && this.containerRef) {\n this.props.zoomWithScroll ? this.containerRef.addEventListener('wheel', this.onWheel, {\n passive: false\n }) : this.clearScrollEvent();\n }\n if (prevProps.video !== this.props.video) {\n (_j = this.videoRef.current) === null || _j === void 0 ? void 0 : _j.load();\n }\n var objectFit = this.getObjectFit();\n if (objectFit !== this.state.mediaObjectFit) {\n this.setState({\n mediaObjectFit: objectFit\n }, this.computeSizes);\n }\n };\n Cropper.prototype.getAspect = function () {\n var _a = this.props,\n cropSize = _a.cropSize,\n aspect = _a.aspect;\n if (cropSize) {\n return cropSize.width / cropSize.height;\n }\n return aspect;\n };\n Cropper.prototype.getObjectFit = function () {\n var _a, _b, _c, _d;\n if (this.props.objectFit === 'cover') {\n var mediaRef = this.imageRef.current || this.videoRef.current;\n if (mediaRef && this.containerRef) {\n this.containerRect = this.containerRef.getBoundingClientRect();\n var containerAspect = this.containerRect.width / this.containerRect.height;\n var naturalWidth = ((_a = this.imageRef.current) === null || _a === void 0 ? void 0 : _a.naturalWidth) || ((_b = this.videoRef.current) === null || _b === void 0 ? void 0 : _b.videoWidth) || 0;\n var naturalHeight = ((_c = this.imageRef.current) === null || _c === void 0 ? void 0 : _c.naturalHeight) || ((_d = this.videoRef.current) === null || _d === void 0 ? void 0 : _d.videoHeight) || 0;\n var mediaAspect = naturalWidth / naturalHeight;\n return mediaAspect < containerAspect ? 'horizontal-cover' : 'vertical-cover';\n }\n return 'horizontal-cover';\n }\n return this.props.objectFit;\n };\n Cropper.prototype.onPinchStart = function (e) {\n var pointA = Cropper.getTouchPoint(e.touches[0]);\n var pointB = Cropper.getTouchPoint(e.touches[1]);\n this.lastPinchDistance = getDistanceBetweenPoints(pointA, pointB);\n this.lastPinchRotation = getRotationBetweenPoints(pointA, pointB);\n this.onDragStart(getCenter(pointA, pointB));\n };\n Cropper.prototype.onPinchMove = function (e) {\n var _this = this;\n if (!this.currentDoc || !this.currentWindow) return;\n var pointA = Cropper.getTouchPoint(e.touches[0]);\n var pointB = Cropper.getTouchPoint(e.touches[1]);\n var center = getCenter(pointA, pointB);\n this.onDrag(center);\n if (this.rafPinchTimeout) this.currentWindow.cancelAnimationFrame(this.rafPinchTimeout);\n this.rafPinchTimeout = this.currentWindow.requestAnimationFrame(function () {\n var distance = getDistanceBetweenPoints(pointA, pointB);\n var newZoom = _this.props.zoom * (distance / _this.lastPinchDistance);\n _this.setNewZoom(newZoom, center, {\n shouldUpdatePosition: false\n });\n _this.lastPinchDistance = distance;\n var rotation = getRotationBetweenPoints(pointA, pointB);\n var newRotation = _this.props.rotation + (rotation - _this.lastPinchRotation);\n _this.props.onRotationChange && _this.props.onRotationChange(newRotation);\n _this.lastPinchRotation = rotation;\n });\n };\n Cropper.prototype.render = function () {\n var _this = this;\n var _a;\n var _b = this.props,\n image = _b.image,\n video = _b.video,\n mediaProps = _b.mediaProps,\n cropperProps = _b.cropperProps,\n transform = _b.transform,\n _c = _b.crop,\n x = _c.x,\n y = _c.y,\n rotation = _b.rotation,\n zoom = _b.zoom,\n cropShape = _b.cropShape,\n showGrid = _b.showGrid,\n roundCropAreaPixels = _b.roundCropAreaPixels,\n _d = _b.style,\n containerStyle = _d.containerStyle,\n cropAreaStyle = _d.cropAreaStyle,\n mediaStyle = _d.mediaStyle,\n _e = _b.classes,\n containerClassName = _e.containerClassName,\n cropAreaClassName = _e.cropAreaClassName,\n mediaClassName = _e.mediaClassName;\n var objectFit = (_a = this.state.mediaObjectFit) !== null && _a !== void 0 ? _a : this.getObjectFit();\n return React.createElement(\"div\", {\n onMouseDown: this.onMouseDown,\n onTouchStart: this.onTouchStart,\n ref: function ref(el) {\n return _this.containerRef = el;\n },\n \"data-testid\": \"container\",\n style: containerStyle,\n className: classNames('reactEasyCrop_Container', containerClassName)\n }, image ? React.createElement(\"img\", __assign({\n alt: \"\",\n className: classNames('reactEasyCrop_Image', objectFit === 'contain' && 'reactEasyCrop_Contain', objectFit === 'horizontal-cover' && 'reactEasyCrop_Cover_Horizontal', objectFit === 'vertical-cover' && 'reactEasyCrop_Cover_Vertical', mediaClassName)\n }, mediaProps, {\n src: image,\n ref: this.imageRef,\n style: __assign(__assign({}, mediaStyle), {\n transform: transform || \"translate(\".concat(x, \"px, \").concat(y, \"px) rotate(\").concat(rotation, \"deg) scale(\").concat(zoom, \")\")\n }),\n onLoad: this.onMediaLoad\n })) : video && React.createElement(\"video\", __assign({\n autoPlay: true,\n playsInline: true,\n loop: true,\n muted: true,\n className: classNames('reactEasyCrop_Video', objectFit === 'contain' && 'reactEasyCrop_Contain', objectFit === 'horizontal-cover' && 'reactEasyCrop_Cover_Horizontal', objectFit === 'vertical-cover' && 'reactEasyCrop_Cover_Vertical', mediaClassName)\n }, mediaProps, {\n ref: this.videoRef,\n onLoadedMetadata: this.onMediaLoad,\n style: __assign(__assign({}, mediaStyle), {\n transform: transform || \"translate(\".concat(x, \"px, \").concat(y, \"px) rotate(\").concat(rotation, \"deg) scale(\").concat(zoom, \")\")\n }),\n controls: false\n }), (Array.isArray(video) ? video : [{\n src: video\n }]).map(function (item) {\n return React.createElement(\"source\", __assign({\n key: item.src\n }, item));\n })), this.state.cropSize && React.createElement(\"div\", __assign({\n ref: this.cropperRef,\n style: __assign(__assign({}, cropAreaStyle), {\n width: roundCropAreaPixels ? Math.round(this.state.cropSize.width) : this.state.cropSize.width,\n height: roundCropAreaPixels ? Math.round(this.state.cropSize.height) : this.state.cropSize.height\n }),\n tabIndex: 0,\n onKeyDown: this.onKeyDown,\n onKeyUp: this.onKeyUp,\n \"data-testid\": \"cropper\",\n className: classNames('reactEasyCrop_CropArea', cropShape === 'round' && 'reactEasyCrop_CropAreaRound', showGrid && 'reactEasyCrop_CropAreaGrid', cropAreaClassName)\n }, cropperProps)));\n };\n Cropper.defaultProps = {\n zoom: 1,\n rotation: 0,\n aspect: 4 / 3,\n maxZoom: MAX_ZOOM,\n minZoom: MIN_ZOOM,\n cropShape: 'rect',\n objectFit: 'contain',\n showGrid: true,\n style: {},\n classes: {},\n mediaProps: {},\n cropperProps: {},\n zoomSpeed: 1,\n restrictPosition: true,\n zoomWithScroll: true,\n keyboardStep: KEYBOARD_STEP\n };\n Cropper.getMousePoint = function (e) {\n return {\n x: Number(e.clientX),\n y: Number(e.clientY)\n };\n };\n Cropper.getTouchPoint = function (touch) {\n return {\n x: Number(touch.clientX),\n y: Number(touch.clientY)\n };\n };\n return Cropper;\n}(React.Component);\n\nexport { Cropper as default, getInitialCropFromCroppedAreaPercentages, getInitialCropFromCroppedAreaPixels };\n//# sourceMappingURL=index.module.mjs.map\n","import { createElement, useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react'\nimport type { ComponentType, ReactElement } from 'react'\nimport CropperComponent from 'react-easy-crop'\nimport type { Area, CropperProps } from 'react-easy-crop'\nimport { resolveAssistantAvatarAsset } from '../../shared/assistant-avatar.js'\nimport type { AssistantAvatarModel } from '../../shared/assistant-avatar.js'\nimport type { CodingNsClientServices } from '../features/types.js'\nimport type { CodingNsTranslator } from '../locale.js'\nimport { dshSettingsButtonStyle, dshSettingsPrimaryButtonStyle, dshSettingsHelpStyle, dshThemeColor } from '../theme.js'\nimport { assistantSettingTextStyle } from '../assistant-settings-styles.js'\nimport { AssistantAvatarPortrait } from './portrait.js'\nimport { getAssistantAvatarRegistry } from './registry.js'\nimport type { AssistantAvatarRenderer } from './registry.js'\nimport { assistantAvatarPortraitKey, getAssistantAvatarPortraitService } from './portrait-service.js'\nimport type { AssistantAvatarPreview } from './preview-store.js'\nimport { cropAssistantAvatarPortrait, initialAssistantAvatarPortraitArea } from './portrait-capture.js'\n\n// 上游 ESM 入口默认导出组件,但其 CommonJS 声明被 NodeNext 判为命名空间。\nconst Cropper = CropperComponent as unknown as ComponentType<Partial<CropperProps> & Pick<CropperProps, 'crop' | 'onCropChange'>>\n\ninterface EditorProps {\n readonly services: CodingNsClientServices; readonly model: AssistantAvatarModel\n readonly disabled: boolean; readonly t: CodingNsTranslator\n}\n/** 与名称同一行的头像设置;资源或渲染器变化时销毁未确认的裁剪会话。 */\nexport function AssistantAvatarPortraitEditor(props: EditorProps): ReactElement {\n const registry = getAssistantAvatarRegistry(props.services), id = resolveAssistantAvatarAsset(props.model, 'dialog').renderer\n const read = useCallback(() => registry.get(id), [registry, id])\n const renderer = useSyncExternalStore(registry.subscribe, read, read)\n return createElement(PortraitEditorContent, { ...props, renderer, key: assistantAvatarPortraitKey(props.model, renderer) })\n}\nfunction PortraitEditorContent({ services, model, renderer, disabled, t }: EditorProps & { readonly renderer: AssistantAvatarRenderer | undefined }): ReactElement {\n const service = getAssistantAvatarPortraitService(services)\n const [open, setOpen] = useState(false), [pending, setPending] = useState(false), [error, setError] = useState('')\n const [source, setSource] = useState<{ preview: AssistantAvatarPreview; url: string; initial?: Area }>()\n const [area, setArea] = useState<Area>(), [crop, setCrop] = useState({ x: 0, y: 0 }), [zoom, setZoom] = useState(1)\n const [percentages, setPercentages] = useState<Area>()\n const session = useRef<{ controller: AbortController; url?: string }>()\n const release = useCallback((): void => {\n session.current?.controller.abort()\n if (session.current?.url !== undefined) URL.revokeObjectURL(session.current.url)\n session.current = undefined\n }, [])\n const close = useCallback((): void => { release(); setOpen(false); setSource(undefined); setArea(undefined); setPercentages(undefined); setPending(false); setError('') }, [release])\n useEffect(() => release, [release])\n useEffect(() => { if (disabled) close() }, [disabled, close])\n const edit = async (): Promise<void> => {\n if (disabled || pending) return\n close(); setOpen(true); setPending(true); setCrop({ x: 0, y: 0 }); setZoom(1)\n const active: NonNullable<typeof session.current> = { controller: new AbortController() }; session.current = active\n try {\n const preview = await service.getSource(model, renderer, active.controller.signal)\n if (preview === undefined) throw new Error('avatar_portrait_source_unavailable')\n const initial = preview.cropAreaPercentages ?? await initialAssistantAvatarPortraitArea(preview, active.controller.signal)\n if (active.controller.signal.aborted || session.current !== active) return\n active.url = URL.createObjectURL(preview.blob)\n setSource({ preview, url: active.url, ...(initial === undefined ? {} : { initial }) })\n } catch { if (!active.controller.signal.aborted) setError(t('avatar.portraitSourceFailed')) }\n finally { if (session.current === active) setPending(false) }\n }\n const save = async (): Promise<void> => {\n const active = session.current\n if (disabled || pending || source === undefined || area === undefined || active === undefined) return\n setPending(true); setError('')\n try {\n const preview = await cropAssistantAvatarPortrait(source.preview, area, active.controller.signal)\n if (preview === undefined) throw new Error('avatar_portrait_crop_failed')\n await service.setPortrait(model, renderer, { ...preview, ...(percentages === undefined ? {} : { cropAreaPercentages: percentages }) }, active.controller.signal)\n if (session.current === active) close()\n } catch { if (!active.controller.signal.aborted) setError(t('avatar.portraitSaveFailed')) }\n finally { if (session.current === active) setPending(false) }\n }\n const changedArea = useCallback((percent: Area, pixels: Area) => { setArea(pixels); setPercentages(percent) }, [])\n const locked = disabled || pending && source !== undefined\n // 让头像字段占右列,说明和编辑面板参与父级网格并使用整行宽度。\n return createElement('div', { 'data-codingns-portrait-settings': model.id, style: { ...assistantSettingTextStyle, display: 'contents' } },\n createElement('div', { 'data-codingns-portrait-controls': true, style: { display: 'grid', gap: 6, minWidth: 0 } },\n createElement('span', null, t('avatar.portraitTitle')),\n createElement('div', { style: { display: 'flex', alignItems: 'center', flexWrap: 'wrap', gap: 12 } },\n createElement(AssistantAvatarPortrait, { services, model, size: 44 }),\n createElement('button', { type: 'button', disabled: disabled || pending, 'aria-expanded': open, 'data-codingns-portrait-edit': true,\n style: dshSettingsButtonStyle, onClick: () => { void edit() } }, t('avatar.portraitEdit')))),\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0, gridColumn: '1 / -1' } }, t(services.configurationDraft ? 'avatar.portraitDraftHint' : 'avatar.portraitLocalHint')),\n !open ? null : createElement('div', { 'data-codingns-portrait-editor': true, 'aria-busy': pending, style: { display: 'grid', gap: 12, padding: 12,\n gridColumn: '1 / -1', border: `1px solid ${dshThemeColor.border}`, borderRadius: 10, minWidth: 0 } },\n source === undefined ? null : createElement('div', { 'data-codingns-portrait-cropper': true, style: { position: 'relative', height: 270, width: '100%', minWidth: 0,\n overflow: 'hidden', borderRadius: 8, background: dshThemeColor.surfaceSubtle, pointerEvents: locked ? 'none' : 'auto' } },\n createElement(Cropper, { image: source.url, crop, zoom, aspect: 1, cropShape: 'round', showGrid: false, minZoom: 1, maxZoom: 8,\n zoomWithScroll: false, onCropChange: (next) => { if (!locked) setCrop(next) }, onZoomChange: (next) => { if (!locked) setZoom(next) }, onCropAreaChange: changedArea,\n ...(source.initial === undefined ? {} : { initialCroppedAreaPercentages: source.initial }),\n cropperProps: { 'aria-label': t('avatar.portraitCropArea'), 'aria-disabled': locked, tabIndex: locked ? -1 : 0 } })),\n source === undefined ? null : createElement('label', { style: { display: 'grid', gap: 6 } }, t('avatar.portraitZoom'),\n createElement('input', { type: 'range', min: 1, max: 8, step: .01, value: zoom, disabled: locked,\n 'data-codingns-portrait-zoom': true, onChange: (event: { currentTarget: { value: string } }) => setZoom(Number(event.currentTarget.value)), style: { width: '100%', margin: 0 } })),\n source === undefined || area === undefined ? null : createElement('div', { style: { display: 'flex', alignItems: 'center', gap: 10 } },\n createElement('span', { 'data-codingns-portrait-crop-preview': true, 'aria-hidden': true, style: { position: 'relative', overflow: 'hidden', borderRadius: '50%', width: 56, height: 56, flex: '0 0 56px' } },\n createElement('img', { src: source.url, alt: '', draggable: false, style: { position: 'absolute', maxWidth: 'none',\n width: source.preview.width / area.width * 56, height: source.preview.height / area.height * 56,\n left: -area.x / area.width * 56, top: -area.y / area.height * 56 } })),\n createElement('span', { style: dshSettingsHelpStyle }, t('avatar.portraitDragHint'))),\n !pending ? null : createElement('span', { role: 'status', style: dshSettingsHelpStyle }, t(source === undefined ? 'avatar.portraitLoading' : 'avatar.portraitSaving')),\n error === '' ? null : createElement('span', { role: 'alert', style: { ...dshSettingsHelpStyle, color: dshThemeColor.error } }, error),\n createElement('div', { style: { display: 'flex', flexWrap: 'wrap', justifyContent: 'flex-end', gap: 8 } },\n createElement('button', { type: 'button', disabled: locked, style: dshSettingsButtonStyle, onClick: close }, t('avatar.portraitCancel')),\n createElement('button', { type: 'button', disabled: disabled || pending || area === undefined, style: dshSettingsPrimaryButtonStyle,\n 'data-codingns-portrait-save': true, onClick: () => { void save() } }, t(services.configurationDraft ? 'avatar.portraitConfirm' : 'avatar.portraitSave')))))\n}\n","import { createElement, useEffect, useId, useState } from 'react'\nimport type { ReactElement } from 'react'\nimport { DshMenu, resolveChevronDownIcon } from '../../dsh-capabilities/client/primitives-adapter.js'\nimport { builtinAssistantAvatarLabelKey, listAssistantAvatars } from '../../shared/assistant-avatar.js'\nimport type { AssistantAppearanceSettings } from '../../shared/assistant-avatar.js'\nimport type { AssistantAvatarCatalogEntry } from '../../shared/assistant-avatar-catalog.js'\nimport { getAssistantAvatarPreset } from '../../shared/assistant-avatar-presets.js'\nimport type { CodingNsTranslator } from '../locale.js'\nimport { dshSettingsFieldStyle } from '../theme.js'\nimport { assistantSettingFieldStyle } from '../assistant-settings-styles.js'\n\nexport interface AssistantAvatarChoice {\n readonly id: string\n readonly label: string\n /** 来源单独保存,名称不再拼接标记,避免用户命名影响标签显示。 */\n readonly thirdParty: boolean\n readonly disabled?: boolean\n /** 仅未登记条目携带目录信息,选择后预览;已登记角色直接切换。 */\n readonly catalog?: AssistantAvatarCatalogEntry\n}\n\n/** 合并展示选项,沿用安装后的模型 ID 去重,不把目录元数据写进设置清单。 */\nexport function assistantAvatarChoices(appearance: AssistantAppearanceSettings, entries: readonly AssistantAvatarCatalogEntry[], t: CodingNsTranslator, includeLegacy = true): readonly AssistantAvatarChoice[] {\n const choices = new Map<string, AssistantAvatarChoice>()\n for (const model of listAssistantAvatars(appearance, includeLegacy)) {\n const builtinLabel = builtinAssistantAvatarLabelKey(model.id)\n const labelKey = builtinLabel ?? (appearance.models.some((registered) => registered.id === model.id) ? undefined : getAssistantAvatarPreset(model.id)?.labelKey)\n const name = labelKey === undefined ? model.name : t(labelKey)\n choices.set(model.id, { id: model.id, label: name, thirdParty: builtinLabel === undefined })\n }\n for (const entry of entries) {\n const id = `catalog-${entry.id}`\n if (!choices.has(id)) choices.set(id, { id, label: entry.name, thirdParty: true, catalog: entry })\n }\n return [...choices.values()]\n}\n\ninterface AssistantAvatarPickerProps {\n readonly choices: readonly AssistantAvatarChoice[]; readonly value: string; readonly disabled: boolean\n readonly t: CodingNsTranslator; readonly onChoose: (choice: AssistantAvatarChoice) => void\n readonly label?: string\n}\n\n/** 内置形象只有名称,第三方形象在名称旁显示独立彩色标签。 */\nexport function AssistantAvatarChoiceLabel({ choice, t }: { readonly choice: AssistantAvatarChoice; readonly t: CodingNsTranslator }): ReactElement {\n return createElement('span', { style: { display: 'flex', alignItems: 'center', gap: 8, minWidth: 0 } },\n createElement('span', { style: { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' } }, choice.label),\n !choice.thirdParty ? null : createElement('span', { 'data-codingns-avatar-third-party-badge': true,\n // 固定高对比蓝底白字,明暗主题中均可读;标签不随长名称收缩。\n style: { flexShrink: 0, padding: '1px 6px', borderRadius: 4, background: '#2563eb', color: '#fff', fontSize: 11, fontWeight: 500, lineHeight: '18px', whiteSpace: 'nowrap' } }, t('avatar.thirdPartyBadge')))\n}\n\n/** 一个选择入口同时服务内置、已安装和待安装形象。 */\nexport function AssistantAvatarPicker(props: AssistantAvatarPickerProps): ReactElement {\n const [open, setOpen] = useState(false)\n const id = useId()\n useEffect(() => { if (props.disabled) setOpen(false) }, [props.disabled])\n return createElement(AssistantAvatarPickerView, { ...props, id, open, onOpenChange: setOpen })\n}\n\n/** 展开状态与展示分离;菜单行为由 DSH 原语负责,业务只处理有效选择。 */\nexport function AssistantAvatarPickerView({ choices, value, disabled, t, onChoose, label = t('avatar.selected'), id, open, onOpenChange }: AssistantAvatarPickerProps & {\n readonly id: string; readonly open: boolean; readonly onOpenChange: (open: boolean) => void\n}): ReactElement {\n const selected = choices.find((choice) => choice.id === value)\n const expanded = open && !disabled\n const name = selected === undefined ? value : selected.thirdParty ? t('avatar.externalName', { name: selected.label }) : selected.label\n const anchor = createElement('button', { id, type: 'button', disabled, 'aria-label': `${label}: ${name}`, 'aria-haspopup': 'menu', 'aria-expanded': expanded,\n 'data-codingns-avatar-list': true, 'data-codingns-avatar-selected': value,\n style: { ...dshSettingsFieldStyle, display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 8, textAlign: 'left', cursor: disabled ? 'default' : 'pointer' },\n onClick: () => { if (!disabled) onOpenChange(!expanded) },\n onKeyDown: (event: { key: string; preventDefault: () => void }) => {\n if (disabled || expanded || (event.key !== 'ArrowDown' && event.key !== 'ArrowUp')) return\n event.preventDefault(); onOpenChange(true)\n } },\n selected === undefined ? name : createElement(AssistantAvatarChoiceLabel, { choice: selected, t }),\n createElement('span', { 'aria-hidden': true, style: { display: 'flex', flexShrink: 0 } }, createElement(resolveChevronDownIcon(), { size: 14 })))\n return createElement('label', { htmlFor: id, style: assistantSettingFieldStyle }, createElement('span', null, label),\n // 弹层高于助理对话框,窄屏限制在视口内;原语负责菜单滚动与边缘定位。\n createElement('style', null, '.codingns4dsh-avatar-picker{width:100%;min-width:0}.codingns4dsh-avatar-menu{z-index:10002;width:min(360px,calc(100vw - 24px));max-width:calc(100vw - 24px)}'),\n createElement(DshMenu, { open: expanded, anchor, portal: true, autoFocus: true, className: 'codingns4dsh-avatar-picker', listClassName: 'codingns4dsh-avatar-menu',\n selectedId: value, items: choices.map((choice) => ({ id: choice.id, label: createElement(AssistantAvatarChoiceLabel, { choice, t }), disabled: disabled || choice.disabled === true })),\n onClose: () => onOpenChange(false), onSelect: (choiceId: string) => {\n const choice = choices.find((item) => item.id === choiceId)\n if (disabled || choice === undefined || choice.disabled) return\n onOpenChange(false); onChoose(choice)\n } }))\n}\n","import { createElement, useEffect, useId, useRef, useState } from 'react'\nimport type { ReactElement } from 'react'\nimport { ASSISTANT_AVATAR_ENGINE_CONSENT_VERSION, hasAssistantAvatarEngineConsent } from '../../shared/assistant-avatar-engine.js'\nimport type { AssistantAvatarEngineStatus } from '../../shared/assistant-avatar-engine.js'\nimport type { AssistantAppearanceSettings } from '../../shared/assistant-avatar.js'\nimport type { CodingNsClientServices, SettingsNotice } from '../features/types.js'\nimport { useCodingNsTranslator, type CodingNsTranslator } from '../locale.js'\nimport { dshSettingsButtonStyle, dshSettingsHelpStyle, dshSettingsPrimaryButtonStyle, dshThemeColor } from '../theme.js'\nimport { assistantSettingCheckboxStyle } from '../assistant-settings-styles.js'\nimport type { AssistantAvatarManager } from './manager.js'\n\nexport interface AssistantAvatarEngineController {\n readonly status: AssistantAvatarEngineStatus | undefined\n readonly installing: boolean\n readonly cancelled: boolean\n readonly error: string\n readonly consentOpen: boolean\n readonly agreed: boolean\n /** 选择 Live2D 形象时调用:已就绪或安装成功返回 true,需要确认许可或失败返回 false。 */\n ensure(onReady: () => Promise<void> | void): Promise<boolean>\n setAgreed(agreed: boolean): void\n acceptConsent(): Promise<void>\n cancelConsent(): void\n cancelInstall(): void\n retry(): void\n}\n\ninterface AssistantAvatarEngineOptions {\n readonly services: CodingNsClientServices\n readonly manager: AssistantAvatarManager\n readonly appearance: AssistantAppearanceSettings\n readonly disabled: boolean\n readonly notify?: (notice: SettingsNotice) => void\n}\n\n/**\n * 引擎只在用户选择 Live2D 形象时准备:先探测 Host 已就绪的引擎,\n * 未安装则确认许可后自动下载安装;安装失败不改变当前形象。\n */\nexport function useAssistantAvatarEngine(options: AssistantAvatarEngineOptions): AssistantAvatarEngineController {\n const { services, manager, appearance, disabled, notify } = options\n const t = useCodingNsTranslator(services.locale)\n const [status, setStatus] = useState<AssistantAvatarEngineStatus | undefined>()\n const [installing, setInstalling] = useState(false)\n const [cancelled, setCancelled] = useState(false)\n const [error, setError] = useState('')\n const [consentOpen, setConsentOpen] = useState(false)\n const [agreed, setAgreed] = useState(false)\n const installer = useRef<AbortController | undefined>()\n const probe = useRef<AbortController | undefined>()\n const pending = useRef<(() => Promise<void> | void) | undefined>()\n const mounted = useRef(true)\n // 开发模式会重复挂载同一组件;每次挂载都恢复标记,避免卸载后不再更新界面。\n useEffect(() => { mounted.current = true; return () => {\n mounted.current = false; probe.current?.abort(); installer.current?.abort()\n } }, [])\n useEffect(() => {\n const controller = new AbortController()\n void manager.engineStatus(controller.signal).then((value) => {\n if (!controller.signal.aborted && mounted.current) setStatus(value)\n }).catch(() => undefined)\n return () => controller.abort()\n }, [manager])\n const runInstall = async (onReady: () => Promise<void> | void): Promise<boolean> => {\n // React 状态刷新之前也要防止重复点击排入多份安装,取消始终对应唯一请求。\n if (disabled || !mounted.current || installer.current !== undefined) return false\n const controller = new AbortController()\n installer.current = controller\n pending.current = onReady\n setInstalling(true); setError(''); setCancelled(false)\n try {\n const next = await manager.installEngine(controller.signal)\n if (controller.signal.aborted) return false\n setStatus(next)\n await onReady()\n pending.current = undefined\n notify?.({ kind: 'success', message: t('avatar.engineInstalled') })\n return true\n } catch (failure) {\n // 取消不是失败:保留原选择与待办,用户可以直接重试。\n if (!controller.signal.aborted && mounted.current) setError(errorMessage(failure))\n return false\n } finally {\n if (installer.current === controller) installer.current = undefined\n if (mounted.current) setInstalling(false)\n }\n }\n const ensure = async (onReady: () => Promise<void> | void): Promise<boolean> => {\n if (disabled || installing || !mounted.current || installer.current !== undefined) return false\n // 状态读取也归窗口生命周期所有;新选择覆盖旧查询,迟到结果不能恢复旧选择。\n probe.current?.abort()\n const controller = new AbortController()\n probe.current = controller\n setError('')\n let current = status\n try {\n current = await manager.engineStatus(controller.signal)\n } catch { /* 探测失败仍继续尝试安装,真实错误由安装接口返回。 */ }\n finally { if (probe.current === controller) probe.current = undefined }\n if (controller.signal.aborted || !mounted.current) return false\n if (current !== undefined) setStatus(current)\n if (current?.installed === true) { await onReady(); return true }\n if (!hasAssistantAvatarEngineConsent(appearance.engineConsent)) {\n pending.current = onReady; setAgreed(false); setConsentOpen(true); return false\n }\n return await runInstall(onReady)\n }\n return {\n status, installing, cancelled, error, consentOpen, agreed, ensure,\n setAgreed: (value: boolean) => { setAgreed(value) },\n acceptConsent: async (): Promise<void> => {\n try {\n await manager.setEngineEnabled(true)\n if (!mounted.current) return\n setConsentOpen(false); setAgreed(false)\n const next = pending.current\n if (next !== undefined) await runInstall(next)\n } catch (failure) { if (mounted.current) setError(errorMessage(failure)) }\n },\n cancelConsent: (): void => { pending.current = undefined; setAgreed(false); setConsentOpen(false) },\n cancelInstall: (): void => { if (installer.current !== undefined) { setCancelled(true); installer.current.abort() } },\n retry: (): void => { const next = pending.current; if (next !== undefined) void runInstall(next) },\n }\n}\n\n/** 许可确认使用原生模态;未同意时不产生任何下载或设置写入。 */\nexport function AssistantAvatarEngineDialog({ controller, t }: {\n readonly controller: AssistantAvatarEngineController; readonly t: CodingNsTranslator\n}): ReactElement | null {\n const ref = useRef<HTMLDialogElement>(null)\n const id = useId()\n const open = controller.consentOpen\n useEffect(() => {\n if (!open) return\n const opener = document.activeElement as HTMLElement | null\n const dialog = ref.current\n dialog?.showModal()\n return () => { if (dialog?.open) dialog.close(); if (opener?.isConnected) opener.focus() }\n }, [open])\n if (!open) return null\n return createElement('dialog', { ref, 'aria-labelledby': id, 'data-codingns-avatar-engine-dialog': true,\n onCancel: (event: { preventDefault(): void }) => { event.preventDefault(); controller.cancelConsent() },\n onKeyDown: (event: { key: string; preventDefault(): void; stopPropagation(): void }) => {\n if (event.key === 'Escape') { event.preventDefault(); event.stopPropagation(); controller.cancelConsent() }\n },\n style: { maxWidth: 'min(480px, calc(100vw - 32px))', maxHeight: 'calc(100dvh - 32px)', overflowY: 'auto',\n boxSizing: 'border-box', padding: 24, borderRadius: 16, margin: 'auto', border: `1px solid ${dshThemeColor.border}`,\n background: dshThemeColor.pageBackground, color: dshThemeColor.labelPrimary, boxShadow: dshThemeColor.subtleShadow } },\n createElement('strong', { id, style: { fontSize: 16 } }, t('avatar.engineTerms', { version: ASSISTANT_AVATAR_ENGINE_CONSENT_VERSION })),\n createElement('div', { style: { display: 'grid', gap: 16, marginTop: 14 } },\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0, lineHeight: 1.7 } }, t('avatar.engineTermsContent')),\n createElement('label', { style: assistantSettingCheckboxStyle },\n createElement('input', { type: 'checkbox', checked: controller.agreed,\n onChange: (event: { currentTarget: { checked: boolean } }) => controller.setAgreed(event.currentTarget.checked) }), t('avatar.engineAgree')),\n createElement('div', { style: { display: 'flex', justifyContent: 'flex-end', gap: 8 } },\n createElement('button', { type: 'button', autoFocus: true, style: dshSettingsButtonStyle, onClick: controller.cancelConsent }, t('avatar.cancel')),\n createElement('button', { type: 'button', disabled: !controller.agreed, style: dshSettingsPrimaryButtonStyle,\n onClick: () => { if (controller.agreed) void controller.acceptConsent() } }, t('avatar.engineConfirm')))))\n}\n\n/** 安装中显示不确定进度与取消;失败显示原因和重试,不改变当前形象。 */\nexport function AssistantAvatarEngineProgress({ controller, t }: {\n readonly controller: AssistantAvatarEngineController; readonly t: CodingNsTranslator\n}): ReactElement | null {\n if (controller.installing) {\n return createElement('div', { role: 'status', 'data-codingns-avatar-engine-progress': true, style: { display: 'grid', gap: 8 } },\n createElement('span', null, t('avatar.engineInstalling')),\n createElement('progress', { 'aria-label': t('avatar.engineInstalling'), style: { width: '100%' } }),\n createElement('button', { type: 'button', style: { ...dshSettingsButtonStyle, justifySelf: 'start' },\n onClick: controller.cancelInstall }, t('avatar.engineCancel')))\n }\n if (controller.error === '') {\n // 取消后保留待办,用户不必重新选择形象即可重试。\n if (!controller.cancelled) return null\n return createElement('div', { role: 'status', 'data-codingns-avatar-engine-cancelled': true, style: { display: 'grid', gap: 8 } },\n createElement('span', null, t('avatar.engineCancelled')),\n createElement('button', { type: 'button', style: { ...dshSettingsButtonStyle, justifySelf: 'start' },\n onClick: controller.retry }, t('avatar.engineRetry')))\n }\n return createElement('div', { role: 'alert', 'data-codingns-avatar-engine-error': true, style: { display: 'grid', gap: 8, color: dshThemeColor.error, fontSize: 13 } },\n createElement('span', { style: { overflowWrap: 'anywhere' } }, t('avatar.engineInstallFailed', { reason: controller.error })),\n createElement('button', { type: 'button', style: { ...dshSettingsButtonStyle, justifySelf: 'start', color: dshThemeColor.error },\n onClick: controller.retry }, t('avatar.engineRetry')))\n}\n\nfunction errorMessage(error: unknown): string { return error instanceof Error ? error.message : String(error) }\n","import type { AssistantAvatarCatalogEntry, AssistantAvatarTemporaryPreview } from '../../shared/assistant-avatar-catalog.js'\nimport type { AssistantAvatarManager } from './manager.js'\n\ntype PreviewManager = Pick<AssistantAvatarManager, 'previewCatalog' | 'releasePreview' | 'keepPreview'>\n\n/** 挂载即启动预览;离开后隔离所有回调,避免旧下载覆盖新形象或关闭后的界面。 */\nexport function startAssistantAvatarTemporaryPreview(manager: PreviewManager, entry: Pick<AssistantAvatarCatalogEntry, 'id' | 'revision'>, observer: {\n readonly onLoaded: (preview: AssistantAvatarTemporaryPreview) => void\n readonly onError: (error: unknown) => void\n readonly onSettled: () => void\n}): { dispose(): Promise<void> } {\n let active = true\n const session = new AssistantAvatarTemporaryPreviewSession(manager, (error) => { if (active) observer.onError(error) })\n void session.load(entry).then((preview) => { if (active) observer.onLoaded(preview) })\n .catch((error) => { if (active) observer.onError(error) })\n .finally(() => { if (active) observer.onSettled() })\n return { dispose: async () => { active = false; await session.dispose() } }\n}\n\n/** 客户端拥有一个临时预览租约,取消先释放,迟到答复再次释放,绝不登记到设置。 */\nexport class AssistantAvatarTemporaryPreviewSession {\n readonly lease: string\n private readonly controller = new AbortController()\n private disposed = false\n private timer: ReturnType<typeof setInterval> | undefined\n constructor(private readonly manager: PreviewManager,\n private readonly onExpired: (error: unknown) => void = () => {}, lease = crypto.randomUUID()) { this.lease = lease }\n\n async load(entry: Pick<AssistantAvatarCatalogEntry, 'id' | 'revision'>): Promise<AssistantAvatarTemporaryPreview> {\n this.controller.signal.throwIfAborted()\n try {\n // 下载期间也保持租约,避免慢网络下尚未加载完成就被超时清理。\n this.timer = setInterval(() => {\n void this.manager.keepPreview(this.lease).catch((error) => {\n if (this.disposed) return\n this.onExpired(error); void this.dispose().catch(() => undefined)\n })\n }, 60_000)\n const preview = await this.manager.previewCatalog(entry.id, entry.revision, this.lease, this.controller.signal)\n if (this.disposed) { await this.manager.releasePreview(this.lease); this.controller.signal.throwIfAborted() }\n return preview\n } catch (error) { await this.dispose().catch(() => undefined); throw error }\n }\n async dispose(): Promise<void> {\n if (this.disposed) return\n this.disposed = true; this.controller.abort()\n if (this.timer !== undefined) clearInterval(this.timer)\n await this.manager.releasePreview(this.lease)\n }\n}\n","import { createElement, useEffect, useId, useRef, useState } from 'react'\nimport type { ReactElement } from 'react'\nimport { createPortal } from 'react-dom'\nimport { ASSISTANT_AVATAR_CONSENT_VERSION, hasAssistantAvatarConsent } from '../../shared/assistant-avatar-catalog.js'\nimport type { AssistantAvatarCatalogEntry, AssistantAvatarTemporaryPreview } from '../../shared/assistant-avatar-catalog.js'\nimport { ASSISTANT_AVATAR_MAX_MODELS, selectedAssistantAvatar } from '../../shared/assistant-avatar.js'\nimport type { AssistantAppearanceSettings } from '../../shared/assistant-avatar.js'\nimport type { CodingNsClientServices, SettingsNotice } from '../features/types.js'\nimport { useCodingNsTranslator, type CodingNsTranslator } from '../locale.js'\nimport { dshSettingsButtonStyle, dshSettingsPrimaryButtonStyle, dshSettingsHelpStyle, dshThemeColor } from '../theme.js'\nimport type { AssistantAvatarManager } from './manager.js'\nimport { assistantSettingCheckboxStyle, assistantSettingSwitchStyle, assistantSettingTextStyle } from '../assistant-settings-styles.js'\nimport { AssistantAvatarPicker, assistantAvatarChoices, type AssistantAvatarChoice } from './catalog-picker.js'\nimport { AssistantAvatarEngineDialog, AssistantAvatarEngineProgress, useAssistantAvatarEngine } from './engine.js'\nimport { AssistantAvatarSlot } from './slot.js'\nimport { AssistantAvatarLoading } from './loading.js'\nimport { startAssistantAvatarTemporaryPreview } from './temporary-preview.js'\n\nexport interface AssistantAvatarPreviewTargetProps {\n readonly active?: boolean\n readonly previewTarget?: Element | null\n readonly onPreviewChange?: (entry: AssistantAvatarCatalogEntry | undefined) => void\n}\n\ninterface CatalogPanelProps extends AssistantAvatarPreviewTargetProps {\n readonly services: CodingNsClientServices\n readonly manager: AssistantAvatarManager\n readonly appearance: AssistantAppearanceSettings\n readonly disabled: boolean\n readonly notify: (notice: SettingsNotice) => void\n}\nconst buttonStyle = { ...dshSettingsButtonStyle, justifySelf: 'start' }\nconst helpStyle = { ...dshSettingsHelpStyle, margin: 0 }\nconst checkStyle = assistantSettingCheckboxStyle\n\n/** 目录与已登记角色共用选择入口,协议和素材安装仍分别确认。 */\nexport function AssistantAvatarCatalogPanel(props: CatalogPanelProps): ReactElement {\n const { services, manager, appearance, disabled, notify, active = true, previewTarget, onPreviewChange } = props\n const t = useCodingNsTranslator(services.locale)\n const [agreed, setAgreed] = useState(false)\n const [agreementOpen, setAgreementOpen] = useState(false)\n const [pending, setPending] = useState(false)\n const [installing, setInstalling] = useState(false)\n const [preview, setPreview] = useState<{ readonly id: string; readonly consent: string; readonly selection: number } | undefined>()\n const [error, setError] = useState('')\n const accepted = hasAssistantAvatarConsent(appearance.thirdPartyConsent)\n const consent = accepted ? `${appearance.thirdPartyConsent!.version}:${appearance.thirdPartyConsent!.acceptedAt}` : ''\n const catalog = useAssistantAvatarCatalog(manager, consent)\n const engine = useAssistantAvatarEngine({ services, manager, appearance, disabled, notify })\n const current = selectedAssistantAvatar(appearance)\n const choices = assistantAvatarChoices(appearance, catalog.entries, t)\n const selected = preview?.consent === consent ? catalog.entries.find((entry) => entry.id === preview.id) : undefined\n useEffect(() => {\n onPreviewChange?.(active ? selected : undefined)\n return () => onPreviewChange?.(undefined)\n }, [active, selected, onPreviewChange])\n const busy = disabled || pending || installing || engine.installing\n const choose = async (choice: AssistantAvatarChoice): Promise<void> => {\n if (busy) return\n setError('')\n setPending(true)\n try {\n const select = async (): Promise<void> => {\n if (choice.catalog !== undefined) {\n const id = choice.catalog.id\n // 引擎就绪后才挂载临时预览;重新选择同一条目也能重试。\n setPreview((current) => ({ id, consent, selection: (current?.selection ?? 0) + 1 })); return\n }\n setPreview(undefined)\n await manager.select(choice.id)\n if (!services.configurationDraft) notify({ kind: 'success', message: t('avatar.saved') })\n }\n // 目录预览、已登记角色和旧预设共享同一引擎检查,避免首次预览直接请求缺失运行时。\n const needsEngine = choice.catalog === undefined ? manager.list().find((model) => model.id === choice.id)?.renderer === 'live2d'\n : ['dsh-live2d-pet', 'cubism-model'].includes(choice.catalog.format)\n if (needsEngine) await engine.ensure(select)\n else await select()\n }\n catch (failure) { setError(errorMessage(failure)); notify({ kind: 'error', message: errorMessage(failure) }) }\n finally { setPending(false) }\n }\n const changeConsent = async (enabled: boolean): Promise<void> => {\n if (busy || (enabled && !agreed)) return\n setPending(true); setError('')\n try { await manager.setThirdPartyEnabled(enabled); setAgreed(false); setAgreementOpen(false) }\n catch (failure) { setError(errorMessage(failure)); notify({ kind: 'error', message: errorMessage(failure) }) }\n finally { setPending(false) }\n }\n const previewNode = selected === undefined || !active ? null : createElement(AssistantAvatarCatalogPreview, { ...props, selected, disabled: disabled || pending,\n key: `${consent}:${selected.id}:${selected.revision}:${preview?.selection}`, onPending: setInstalling, onInstalled: () => setPreview(undefined) })\n return createElement('section', { 'data-codingns-third-party-avatars': true, 'aria-label': t('avatar.thirdPartyTitle'),\n style: { ...assistantSettingTextStyle, display: 'grid', gap: 20,\n ...(previewNode !== null && !previewTarget ? { gridTemplateColumns: 'repeat(auto-fit,minmax(min(100%,260px),1fr))' } : {}) } },\n createElement('div', { style: { display: 'grid', gap: 12, alignContent: 'start' } },\n createElement(AssistantAvatarPicker, { choices, value: selected === undefined ? appearance.selectedId : `catalog-${selected.id}`,\n disabled: busy, t, onChoose: (choice) => { void choose(choice) } }),\n // 当前形象是 Live2D 而引擎缺失时保留恢复入口,不要求用户重新切换形象。\n current.renderer !== 'live2d' || engine.status?.installed !== false ? null : createElement('div', { 'data-codingns-avatar-engine-missing': true, style: { display: 'grid', gap: 8 } },\n createElement('p', { style: helpStyle }, t('avatar.engineMissing')),\n createElement('button', { type: 'button', disabled: busy, style: buttonStyle, onClick: () => { void engine.ensure(() => undefined) } }, t('avatar.engineInstall'))),\n createElement(AssistantAvatarEngineProgress, { controller: engine, t }),\n createElement(AssistantAvatarThirdPartyToggle, { accepted, disabled: busy, t,\n onRequest: () => { setAgreed(false); setAgreementOpen(true) }, onDisable: () => { void changeConsent(false) } }),\n !agreementOpen ? null : createElement(AssistantAvatarConsentDialog, { agreed, disabled: busy, t,\n onChange: setAgreed, onAccept: () => { void changeConsent(true) },\n onCancel: () => { if (!pending) { setAgreementOpen(false); setAgreed(false) } } }),\n !catalog.loading ? null : createElement('div', { role: 'status', style: helpStyle }, t('avatar.catalogLoading')),\n !accepted || catalog.loading || catalog.entries.length > 0 || catalog.error ? null : createElement('p', { style: helpStyle }, t('avatar.catalogEmpty')),\n !catalog.error ? null : createElement('div', { role: 'alert', style: { display: 'grid', gap: 8, color: dshThemeColor.error, fontSize: 13 } }, catalog.error,\n createElement('button', { type: 'button', disabled: busy || catalog.loading, style: buttonStyle, onClick: catalog.reload }, t('avatar.catalogRetry'))),\n !error ? null : createElement('div', { role: 'alert', style: { color: dshThemeColor.error, fontSize: 13 } }, error),\n createElement(AssistantAvatarEngineDialog, { controller: engine, t })),\n // 工作台使用右侧唯一形象区域;独立设置入口也采用左右分栏,窄屏自然换行。\n previewNode === null ? null : createElement(AssistantAvatarCatalogPreviewRegion, { target: previewTarget, children: previewNode }))\n}\n\n/** 预览 DOM 归右侧目标所有,独立设置入口则提供同级侧栏。 */\nexport function AssistantAvatarCatalogPreviewRegion({ target, children }: { readonly target: Element | null | undefined; readonly children: ReactElement }): ReactElement {\n return target ? createPortal(children, target) : createElement('aside', { 'data-codingns-avatar-preview-region': true }, children)\n}\n\n/** 仅有效协议允许读取元数据;协议变化和卸载会取消旧请求并隔离迟到答复。 */\nfunction useAssistantAvatarCatalog(manager: AssistantAvatarManager, consent: string) {\n const [retry, setRetry] = useState(0)\n const [catalog, setCatalog] = useState<{ consent: string; entries: readonly AssistantAvatarCatalogEntry[]; loading: boolean; error: string }>({\n consent: '', entries: [], loading: false, error: '',\n })\n useEffect(() => {\n if (!consent) return\n const controller = new AbortController()\n setCatalog({ consent, entries: [], loading: true, error: '' })\n void manager.getCatalog(controller.signal).then((entries) => {\n if (!controller.signal.aborted) setCatalog({ consent, entries, loading: false, error: '' })\n }).catch((failure) => {\n if (!controller.signal.aborted) setCatalog({ consent, entries: [], loading: false, error: errorMessage(failure) })\n })\n return () => controller.abort()\n }, [manager, consent, retry])\n const current = consent !== '' && catalog.consent === consent\n return { entries: current ? catalog.entries : [], loading: consent !== '' && (!current || catalog.loading),\n error: current ? catalog.error : '', reload: () => setRetry((value) => value + 1) }\n}\n\n/** 勾选只请求展示协议,明确同意后立即加载目录;取消不会产生任何设置写入。 */\nexport function AssistantAvatarThirdPartyToggle({ accepted, disabled, t, onRequest, onDisable }: {\n readonly accepted: boolean; readonly disabled: boolean; readonly t: CodingNsTranslator\n readonly onRequest: () => void; readonly onDisable: () => void\n}): ReactElement {\n return createElement('label', { style: assistantSettingSwitchStyle },\n createElement('span', null, t('avatar.thirdPartyEnable')),\n createElement('input', { type: 'checkbox', role: 'switch', 'aria-label': t('avatar.thirdPartyEnable'), checked: accepted, disabled, 'data-codingns-third-party-enabled': true,\n onChange: (event: { currentTarget: { checked: boolean } }) => { if (!disabled) { if (event.currentTarget.checked) onRequest(); else onDisable() } } }))\n}\n\ninterface ConsentPromptProps {\n readonly agreed: boolean; readonly disabled: boolean; readonly t: CodingNsTranslator\n readonly onChange: (agreed: boolean) => void; readonly onAccept: () => void; readonly onCancel: () => void\n}\n/** 原生模态对话框限制背景焦点,关闭后恢复到触发协议的复选框。 */\nfunction AssistantAvatarConsentDialog(props: ConsentPromptProps): ReactElement {\n const ref = useRef<HTMLDialogElement>(null)\n const id = useId()\n useEffect(() => {\n const opener = document.activeElement as HTMLElement | null\n const dialog = ref.current\n dialog?.showModal()\n return () => { if (dialog?.open) dialog.close(); if (opener?.isConnected) opener.focus() }\n }, [])\n return createElement('dialog', { ref, 'aria-labelledby': id, 'data-codingns-avatar-consent-dialog': true,\n onCancel: (event: { preventDefault(): void }) => { event.preventDefault(); props.onCancel() },\n onKeyDown: (event: { key: string; preventDefault(): void; stopPropagation(): void }) => {\n if (event.key === 'Escape') { event.preventDefault(); event.stopPropagation(); props.onCancel() }\n },\n style: { maxWidth: 'min(480px, calc(100vw - 32px))', maxHeight: 'calc(100dvh - 32px)', overflowY: 'auto',\n boxSizing: 'border-box', padding: 24, borderRadius: 16, margin: 'auto', border: `1px solid ${dshThemeColor.border}`,\n background: dshThemeColor.pageBackground, color: dshThemeColor.labelPrimary, boxShadow: dshThemeColor.subtleShadow } },\n createElement('strong', { id, style: { fontSize: 16 } }, props.t('avatar.thirdPartyTerms', { version: ASSISTANT_AVATAR_CONSENT_VERSION })),\n createElement(AssistantAvatarConsentPrompt, props))\n}\n\nexport function AssistantAvatarConsentPrompt({ agreed, disabled, t, onChange, onAccept, onCancel }: ConsentPromptProps): ReactElement {\n return createElement('div', { style: { display: 'grid', gap: 16, marginTop: 14 } },\n createElement('p', { style: { ...helpStyle, lineHeight: 1.7 } }, t('avatar.thirdPartyTermsContent')),\n createElement('label', { style: checkStyle },\n createElement('input', { type: 'checkbox', checked: agreed, disabled,\n onChange: (event: { currentTarget: { checked: boolean } }) => { if (!disabled) onChange(event.currentTarget.checked) } }), t('avatar.thirdPartyAgree')),\n createElement('div', { style: { display: 'flex', justifyContent: 'flex-end', gap: 8 } },\n createElement('button', { type: 'button', autoFocus: true, disabled, style: dshSettingsButtonStyle, onClick: onCancel }, t('avatar.cancel')),\n createElement('button', { type: 'button', disabled: disabled || !agreed, style: dshSettingsPrimaryButtonStyle,\n onClick: () => { if (!disabled && agreed) onAccept() } }, t('avatar.thirdPartyConfirm'))))\n}\n\nexport function AssistantAvatarCatalogPreview({ services, manager, appearance, disabled, notify, selected, onPending, onInstalled }: CatalogPanelProps & {\n readonly selected: AssistantAvatarCatalogEntry\n readonly onPending: (pending: boolean) => void\n readonly onInstalled: () => void\n}): ReactElement {\n const t = useCodingNsTranslator(services.locale)\n const [licenseAccepted, setLicenseAccepted] = useState(false)\n const [temporary, setTemporary] = useState<AssistantAvatarTemporaryPreview | undefined>()\n const [previewLoading, setPreviewLoading] = useState(!disabled)\n const [pending, setPending] = useState(false)\n const [error, setError] = useState('')\n const installer = useRef<AbortController | undefined>()\n useEffect(() => () => {\n installer.current?.abort()\n onPending(false)\n }, [manager, onPending])\n useEffect(() => {\n setTemporary(undefined); setPreviewLoading(!disabled); setError('')\n if (disabled) return\n // 选择即自动下载临时预览;素材许可只限制正式采用,不锁住左侧选择器。\n const preview = startAssistantAvatarTemporaryPreview(manager, { id: selected.id, revision: selected.revision }, {\n onLoaded: setTemporary,\n onError: (failure) => { setTemporary(undefined); setPreviewLoading(false); setError(errorMessage(failure)) },\n onSettled: () => setPreviewLoading(false),\n })\n return () => { void preview.dispose().catch(() => undefined) }\n }, [manager, disabled, selected.id, selected.revision])\n const installed = appearance.models.some((model) => model.id === `catalog-${selected.id}` && model.package?.installationId !== undefined)\n const full = appearance.models.length >= ASSISTANT_AVATAR_MAX_MODELS && !installed\n const install = async (): Promise<void> => {\n if (disabled || pending || previewLoading || !licenseAccepted || full) return\n const controller = new AbortController()\n installer.current = controller; setPending(true); onPending(true); setError('')\n try {\n await manager.installCatalog(selected.id, selected.revision, licenseAccepted, controller.signal, temporary?.lease)\n if (!controller.signal.aborted) { setLicenseAccepted(false); if (!services.configurationDraft) notify({ kind: 'success', message: t('avatar.saved') }); onInstalled() }\n } catch (failure) {\n if (!controller.signal.aborted) { setError(errorMessage(failure)); notify({ kind: 'error', message: errorMessage(failure) }) }\n } finally {\n if (installer.current === controller) installer.current = undefined\n if (!controller.signal.aborted) { setPending(false); onPending(false) }\n }\n }\n return createElement('div', { style: { display: 'grid', gap: 12 }, 'data-codingns-avatar-catalog-preview': true },\n createElement('div', { style: { display: 'grid', gap: 10 }, 'data-codingns-avatar-catalog-selection': selected.id },\n createElement('div', { 'data-codingns-avatar-temporary-preview': true, 'aria-busy': previewLoading || pending,\n style: { minHeight: 182, display: 'grid', justifyItems: 'center', alignItems: 'center' } },\n temporary === undefined ? previewLoading || pending\n // 下载与渲染占用同一预览位置,只显示动画,避免出现第二份进度界面。\n ? createElement('div', { style: { position: 'relative', width: 168, height: 182, maxWidth: '100%' } },\n createElement(AssistantAvatarLoading, { progress: { phase: 'resources' }, size: 168, t, animationOnly: true }))\n : createElement('p', { role: 'status', style: { ...helpStyle, textAlign: 'center' } },\n t(error ? 'avatar.temporaryLoadFailed' : 'avatar.temporaryUnavailable'))\n : createElement(AssistantAvatarSlot, { services, model: temporary.model, state: 'idle', surface: 'dialog', size: 168, transient: true, showDiagnostics: false })),\n createElement('p', { style: helpStyle }, t('avatar.catalogPreviewHint')),\n createElement('strong', null, selected.name),\n createElement('p', { style: helpStyle }, selected.description),\n createElement('div', { style: helpStyle }, t('avatar.packageAuthor', { author: selected.author })),\n createElement('div', { style: helpStyle }, t('avatar.packageLicense', { license: selected.license })),\n createElement('p', { style: helpStyle }, selected.remarks),\n createElement('div', { style: helpStyle }, t('avatar.catalogSize', { size: `${(selected.bytes / 1024 / 1024).toFixed(2)} MB`, files: selected.files })),\n createElement('div', { style: { display: 'flex', flexWrap: 'wrap', gap: 14, fontSize: 13 } },\n createElement('a', { href: selected.repositoryUrl, target: '_blank', rel: 'noopener noreferrer' }, t('avatar.packageSource')),\n createElement('a', { href: selected.licenseUrl, target: '_blank', rel: 'noopener noreferrer' }, t('avatar.catalogLicenseLink')),\n createElement('a', { href: selected.homepage, target: '_blank', rel: 'noopener noreferrer' }, t('avatar.packageHomepage'))),\n selected.format === 'codex-pet' ? null : createElement('p', { style: helpStyle }, t('avatar.live2dDependencyHint')),\n installed ? createElement('span', { style: { color: dshThemeColor.success, fontSize: 13 } }, t('avatar.catalogInstalled')) : null,\n createElement('label', { style: checkStyle },\n createElement('input', { type: 'checkbox', checked: licenseAccepted, disabled: disabled || pending,\n onChange: (event: { currentTarget: { checked: boolean } }) => setLicenseAccepted(event.currentTarget.checked) }), t('avatar.catalogLicenseAgree')),\n createElement('button', { type: 'button', disabled: disabled || pending || previewLoading || !licenseAccepted || full, style: buttonStyle,\n onClick: () => { void install() } }, t('avatar.temporaryUse'))),\n !error ? null : createElement('div', { role: 'alert', style: { color: dshThemeColor.error, fontSize: 13 } }, error))\n}\nfunction errorMessage(error: unknown): string { return error instanceof Error ? error.message : String(error) }\n","import { createElement, useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react'\nimport type { ReactElement } from 'react'\nimport { ASSISTANT_AVATAR_FLOATING_MINI_SIZE, ASSISTANT_AVATAR_FLOATING_STANDARD_SIZE, ASSISTANT_AVATAR_MAX_MODELS, getBuiltinAssistantAvatar, isAssistantAvatarSource, selectedAssistantAvatar } from '../../shared/assistant-avatar.js'\nimport type { AssistantAvatarModel } from '../../shared/assistant-avatar.js'\nimport type { CodingNsClientServices, FeaturePanelProps, SettingsNotice } from '../features/types.js'\nimport { useCodingNsTranslator, type CodingNsTranslator } from '../locale.js'\nimport { dshSettingsButtonStyle, dshSettingsHelpStyle, dshSettingsFieldStyle, dshThemeColor } from '../theme.js'\nimport { getAssistantAvatarManager } from './manager.js'\nimport { getAssistantAvatarRegistry } from './registry.js'\nimport type { AssistantAvatarCandidate } from '../../shared/assistant-avatar-installation.js'\nimport { AssistantAvatarCatalogPanel } from './catalog-panel.js'\nimport type { AssistantAvatarPreviewTargetProps } from './catalog-panel.js'\nimport { AssistantAvatarEngineDialog, AssistantAvatarEngineProgress, useAssistantAvatarEngine } from './engine.js'\nimport { assistantSettingFieldStyle, assistantSettingSwitchStyle, assistantSettingTextStyle } from '../assistant-settings-styles.js'\n\n/** 对话内复用设置页表单;订阅同一存储并把保存反馈留在当前窗口。 */\nexport function AssistantAppearanceEditor({ services, enabled, ...previewProps }: {\n readonly services: CodingNsClientServices\n readonly enabled: boolean\n} & AssistantAvatarPreviewTargetProps): ReactElement {\n const store = services.settings\n const subscribe = useCallback((listener: () => void) => store.subscribe(listener), [store])\n const getSnapshot = useCallback(() => store.getSnapshot(), [store])\n const snapshot = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n const [notice, setNotice] = useState<SettingsNotice | undefined>()\n return createElement('div', { 'data-codingns-avatar-settings-editor': true, style: { display: 'grid', gap: 10 } },\n createElement(AssistantAppearancePanel, { services, enabled, snapshot, notify: setNotice, ...previewProps }),\n // 表单本身已显示失败信息,外层只补充保存成功反馈,避免重复错误提示。\n notice?.kind !== 'success' ? null : createElement('div', { role: 'status',\n style: { fontSize: 13, color: dshThemeColor.success } }, notice.message),\n )\n}\n\n/** 保存只写 appearance 子字段,不覆盖其他窗口刚改过的语音或受管范围。 */\nexport function AssistantAppearancePanel({ services, enabled, snapshot, notify, ...previewProps }: FeaturePanelProps & AssistantAvatarPreviewTargetProps): ReactElement {\n const t = useCodingNsTranslator(services.locale)\n const manager = getAssistantAvatarManager(services)\n const appearance = useSyncExternalStore(manager.subscribe, manager.getSnapshot, manager.getSnapshot)\n const selected = selectedAssistantAvatar(appearance)\n const registry = getAssistantAvatarRegistry(services)\n const adapters = useSyncExternalStore(manager.adapters.subscribe, manager.adapters.getSnapshot, manager.adapters.getSnapshot)\n const renderers = useSyncExternalStore(registry.subscribe, registry.getSnapshot, registry.getSnapshot)\n const [pending, setPending] = useState(false)\n const [name, setName] = useState('')\n const [source, setSource] = useState('')\n const [renderer, setRenderer] = useState('image')\n const [version, setVersion] = useState<1 | 2>(2)\n const [error, setError] = useState('')\n const [manifestUrl, setManifestUrl] = useState('')\n const [adapterId, setAdapterId] = useState('auto')\n const [candidates, setCandidates] = useState<readonly AssistantAvatarCandidate[]>([])\n const [candidateUrl, setCandidateUrl] = useState('')\n const [addMode, setAddMode] = useState<'package' | 'custom'>('package')\n const [customSize, setCustomSize] = useState(false)\n const importer = useRef<AbortController | undefined>()\n useEffect(() => () => importer.current?.abort(), [manager])\n const selectedAdapterId = adapters.some((adapter) => adapter.id === adapterId) ? adapterId : 'auto'\n const selectedRenderer = renderers.some((item) => item.id === renderer && item.id !== 'builtin') ? renderer : 'image'\n const disabled = !enabled || pending || snapshot.status !== 'ready' || !snapshot.writable\n const engine = useAssistantAvatarEngine({ services, manager, appearance, disabled, notify })\n const save = async (action: () => Promise<unknown>, message = t('avatar.saved')): Promise<boolean> => {\n if (disabled) return false\n setPending(true); setError('')\n try {\n await action()\n if (!services.configurationDraft) notify({ kind: 'success', message })\n return true\n } catch (failure) {\n if (failure instanceof Error && failure.name === 'AbortError') { notify({ kind: 'info', message: t('avatar.cancelled') }); return false }\n const message = failure instanceof Error ? failure.message : String(failure)\n setError(message); notify({ kind: 'error', message })\n return false\n } finally { setPending(false) }\n }\n const add = async (): Promise<void> => {\n if (!isAssistantAvatarSource(source.trim())) { setError(t('avatar.invalidSource')); return }\n const id = `avatar-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 7)}`\n const model: AssistantAvatarModel = { id, name: name.trim() || t('avatar.customName'), renderer: selectedRenderer,\n source: source.trim(), spriteVersion: version }\n // 自定义 Live2D 素材同样需要引擎:确认许可后自动安装,失败不写入形象。\n const accepted = selectedRenderer === 'live2d'\n ? await engine.ensure(async () => {\n await manager.add(model)\n if (!services.configurationDraft) notify({ kind: 'success', message: t('avatar.saved') })\n })\n : await save(() => manager.add(model))\n if (accepted) { setName(''); setSource('') }\n }\n const importPackage = async (): Promise<void> => {\n if (!isAssistantAvatarSource(manifestUrl.trim())) { setError(t('avatar.invalidSource')); return }\n const controller = new AbortController()\n importer.current = controller\n const accepted = await save(async () => {\n const discovered = await manager.discover(manifestUrl.trim(), controller.signal)\n setCandidates(discovered); setCandidateUrl(discovered[0]?.url ?? '')\n }, t('avatar.discovered'))\n if (importer.current === controller) importer.current = undefined\n if (!accepted) { setCandidates([]); setCandidateUrl('') }\n }\n const installPackage = async (url: string): Promise<void> => {\n const controller = new AbortController()\n importer.current = controller\n const accepted = await save(() => manager.installPackage(url, selectedAdapterId, controller.signal))\n if (importer.current === controller) importer.current = undefined\n if (accepted) { setManifestUrl(''); setCandidates([]); setCandidateUrl('') }\n }\n const field = (label: string, input: ReactElement): ReactElement => createElement('label', { style: assistantSettingFieldStyle },\n createElement('span', null, label), input)\n const toggle = (key: 'floatingEnabled' | 'dialogEnabled', label: string): ReactElement => createElement('label', {\n style: assistantSettingSwitchStyle },\n createElement('span', null, label), createElement('input', { type: 'checkbox', role: 'switch', 'aria-label': label,\n checked: appearance[key], disabled, onChange: (event: { currentTarget: { checked: boolean } }) => { const checked = event.currentTarget.checked; void save(() => manager.configure({ [key]: checked })) } }))\n const sizeField = (key: 'floatingSize' | 'dialogSize', min: number, max: number, label: string): ReactElement => field(label,\n createElement('input', { key: appearance[key], type: 'number', min, max, step: 1, defaultValue: appearance[key], disabled, 'aria-label': label, style: dshSettingsFieldStyle,\n onBlur: (event: { currentTarget: { value: string } }) => { const value = Number(event.currentTarget.value); if (Number.isInteger(value) && value >= min && value <= max && value !== appearance[key]) void save(() => manager.configure({ [key]: value })); else event.currentTarget.value = String(appearance[key]) } }))\n return createElement('section', { 'aria-label': t('avatar.settingsTitle'), style: { ...assistantSettingTextStyle, display: 'grid', gap: 12, borderTop: `1px solid ${dshThemeColor.border}`, paddingTop: 14 } },\n createElement('strong', { style: { fontSize: 14 } }, t('avatar.settingsTitle')),\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('avatar.settingsDescription')),\n createElement(AssistantAvatarCatalogPanel, { services, manager, appearance, disabled, notify, ...previewProps }),\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('avatar.externalHint')),\n selected.renderer !== 'live2d' ? null : createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('avatar.live2dDependencyHint')),\n selected.package === undefined ? null : createElement('div', { 'data-codingns-avatar-package-info': true, style: { ...dshSettingsHelpStyle, overflowWrap: 'anywhere' } },\n createElement('div', null, t('avatar.packageAuthor', { author: selected.package.author || t('avatar.notDeclared') })),\n createElement('div', null, t('avatar.packageLicense', { license: selected.package.license || t('avatar.notDeclared') })),\n selected.package.manifestUrl === undefined ? null : createElement('a', { href: selected.package.manifestUrl, target: '_blank', rel: 'noopener noreferrer' }, t('avatar.packageSource')),\n selected.package.homepage === undefined ? null : createElement('div', null, createElement('a', { href: selected.package.homepage, target: '_blank', rel: 'noopener noreferrer' }, t('avatar.packageHomepage')))),\n toggle('floatingEnabled', t('avatar.floatingEnabled')),\n createElement(AssistantFloatingSizeControl, { size: appearance.floatingSize, custom: customSize, disabled, t,\n onPreset: (preset) => { setCustomSize(preset === 'custom'); if (preset !== 'custom') void save(() => manager.configure({ floatingSize: preset === 'mini' ? ASSISTANT_AVATAR_FLOATING_MINI_SIZE : ASSISTANT_AVATAR_FLOATING_STANDARD_SIZE })) },\n onSize: (floatingSize) => { void save(() => manager.configure({ floatingSize })) } }),\n toggle('dialogEnabled', t('avatar.dialogEnabled')),\n sizeField('dialogSize', 120, 480, t('avatar.dialogSize')),\n getBuiltinAssistantAvatar(appearance.selectedId) !== undefined ? null : createElement('button', { type: 'button', disabled, style: { ...dshSettingsButtonStyle, justifySelf: 'start' },\n onClick: () => { const id = appearance.selectedId; void save(() => manager.remove(id)) } }, t('avatar.remove')),\n selected.package?.manifestUrl === undefined || selected.package.installationId !== undefined ? null : createElement('button', {\n type: 'button', disabled, style: { ...dshSettingsButtonStyle, justifySelf: 'start' },\n onClick: () => { void installPackage(selected.package!.manifestUrl!) },\n }, t('avatar.installCurrent')),\n createElement('details', { 'data-codingns-avatar-add': true }, createElement('summary', { style: { cursor: 'pointer', fontSize: 13 } }, t('avatar.add')),\n field(t('avatar.addMode'), createElement('select', { value: addMode, disabled, style: { ...dshSettingsFieldStyle, marginTop: 12 },\n 'data-codingns-avatar-add-mode': true,\n onChange: (event: { currentTarget: { value: string } }) => setAddMode(event.currentTarget.value === 'custom' ? 'custom' : 'package') },\n createElement('option', { value: 'package' }, t('avatar.importPackage')), createElement('option', { value: 'custom' }, t('avatar.customMaterial')))),\n addMode !== 'package' ? null : createElement('div', { 'data-codingns-avatar-package-import': true, style: { display: 'grid', gap: 12, marginTop: 12 } },\n field(t('avatar.adapter'), createElement('select', { value: selectedAdapterId, disabled, style: dshSettingsFieldStyle,\n onChange: (event: { currentTarget: { value: string } }) => setAdapterId(event.currentTarget.value) },\n createElement('option', { value: 'auto' }, t('avatar.adapter.auto')),\n ...adapters.map((adapter) => createElement('option', { key: adapter.id, value: adapter.id }, adapter.labelKey === undefined ? adapter.name ?? adapter.id : t(adapter.labelKey))))),\n field(t('avatar.manifestUrl'), createElement('input', { value: manifestUrl, disabled, maxLength: 2048, style: dshSettingsFieldStyle,\n onChange: (event: { currentTarget: { value: string } }) => { setManifestUrl(event.currentTarget.value); setCandidates([]); setCandidateUrl('') } })),\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('avatar.importHint')),\n createElement('button', { type: 'button', disabled, style: { ...dshSettingsButtonStyle, justifySelf: 'start' }, onClick: () => { void importPackage() } }, pending && importer.current !== undefined ? t('avatar.importing') : t('avatar.discover')),\n candidates.length === 0 ? null : field(t('avatar.installCandidate'), createElement('select', { value: candidateUrl, disabled,\n style: dshSettingsFieldStyle, onChange: (event: { currentTarget: { value: string } }) => setCandidateUrl(event.currentTarget.value) },\n ...candidates.map((candidate) => createElement('option', { key: candidate.url, value: candidate.url }, candidate.name)))),\n candidates.length === 0 ? null : createElement('button', { type: 'button', disabled: disabled || appearance.models.length >= ASSISTANT_AVATAR_MAX_MODELS,\n style: { ...dshSettingsButtonStyle, justifySelf: 'start' }, onClick: () => { void installPackage(candidateUrl) } }, t('avatar.importUse')),\n !pending || importer.current === undefined ? null : createElement('div', { role: 'status', style: { display: 'grid', gap: 8 } },\n createElement('span', null, t('avatar.installProgress')),\n createElement('progress', { 'aria-label': t('avatar.installProgress'), style: { width: '100%' } }),\n createElement('button', { type: 'button', style: { ...dshSettingsButtonStyle, justifySelf: 'start' },\n onClick: () => importer.current?.abort() }, t('avatar.cancel')))),\n addMode !== 'custom' ? null : createElement('div', { 'data-codingns-avatar-custom-add': true, style: { display: 'grid', gap: 12, marginTop: 12 } },\n field(t('avatar.name'), createElement('input', { value: name, disabled, maxLength: 80, style: dshSettingsFieldStyle, onChange: (event: { currentTarget: { value: string } }) => setName(event.currentTarget.value) })),\n field(t('avatar.type'), createElement('select', { value: selectedRenderer, disabled, style: dshSettingsFieldStyle, onChange: (event: { currentTarget: { value: string } }) => setRenderer(event.currentTarget.value) },\n ...renderers.filter((item) => item.id !== 'builtin').map((item) => createElement('option', { key: item.id, value: item.id }, item.labelKey === undefined ? item.name ?? item.id : t(item.labelKey))))),\n field(t('avatar.source'), createElement('input', { value: source, disabled, maxLength: 2048, type: 'text', style: dshSettingsFieldStyle, onChange: (event: { currentTarget: { value: string } }) => setSource(event.currentTarget.value) })),\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t(['image', 'spritesheet', 'live2d'].includes(selectedRenderer) ? `avatar.sourceHint.${selectedRenderer}` : 'avatar.sourceHint.custom')),\n selectedRenderer !== 'live2d' ? null : createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('avatar.live2dDependencyHint')),\n selectedRenderer !== 'spritesheet' ? null : field(t('avatar.spriteVersion'), createElement('select', { value: version, disabled, style: dshSettingsFieldStyle,\n onChange: (event: { currentTarget: { value: string } }) => setVersion(event.currentTarget.value === '1' ? 1 : 2) },\n createElement('option', { value: 1 }, 'v1 · 1536×1872'), createElement('option', { value: 2 }, 'v2 · 1536×2288'))),\n createElement('button', { type: 'button', disabled: disabled || appearance.models.length >= ASSISTANT_AVATAR_MAX_MODELS, onClick: () => { void add() }, style: { ...dshSettingsButtonStyle, justifySelf: 'start' } }, t('avatar.addUse')),\n )),\n createElement(AssistantAvatarEngineProgress, { controller: engine, t }),\n error === '' ? null : createElement('div', { role: 'alert', style: { color: dshThemeColor.error, fontSize: 13 } }, error),\n createElement(AssistantAvatarEngineDialog, { controller: engine, t }),\n )\n}\n\n/** 以数值判断旧配置的档位;选择自定义时才展开输入框,不增加持久字段。 */\nexport function AssistantFloatingSizeControl({ size, custom, disabled, t, onPreset, onSize }: {\n readonly size: number; readonly custom: boolean; readonly disabled: boolean; readonly t: CodingNsTranslator\n readonly onPreset: (preset: 'mini' | 'standard' | 'custom') => void; readonly onSize: (size: number) => void\n}): ReactElement {\n const preset = custom ? 'custom' : size === ASSISTANT_AVATAR_FLOATING_MINI_SIZE ? 'mini' : size === ASSISTANT_AVATAR_FLOATING_STANDARD_SIZE ? 'standard' : 'custom'\n const label = t('avatar.floatingSize')\n return createElement('div', { 'data-codingns-avatar-floating-size': true, style: { display: 'grid', gap: 8 } },\n createElement('label', { style: assistantSettingFieldStyle }, label,\n createElement('select', { value: preset, disabled, 'aria-label': label, style: dshSettingsFieldStyle,\n onChange: (event: { currentTarget: { value: string } }) => { const next = event.currentTarget.value; if (next === 'mini' || next === 'standard' || next === 'custom') onPreset(next) } },\n createElement('option', { value: 'mini' }, t('avatar.size.mini')), createElement('option', { value: 'standard' }, t('avatar.size.standard')),\n createElement('option', { value: 'custom' }, t('avatar.size.custom')))),\n preset !== 'custom' ? null : createElement('label', { style: assistantSettingFieldStyle }, t('avatar.customSize'),\n createElement('input', { key: size, type: 'number', min: ASSISTANT_AVATAR_FLOATING_MINI_SIZE, max: 320, step: 1,\n defaultValue: size, disabled, 'aria-label': t('avatar.customSize'), style: dshSettingsFieldStyle,\n onBlur: (event: { currentTarget: { value: string } }) => {\n const value = Number(event.currentTarget.value)\n if (!disabled && Number.isInteger(value) && value >= ASSISTANT_AVATAR_FLOATING_MINI_SIZE && value <= 320 && value !== size) onSize(value)\n else event.currentTarget.value = String(size)\n } })))\n}\n","import { createElement, useCallback, useEffect, useRef, useState } from 'react'\nimport type { ReactElement } from 'react'\nimport { ASSISTANT_TTS_PARAMETER_LIMITS, ASSISTANT_VOICE_SITES, DEFAULT_ASSISTANT_TTS_PARAMETERS, MOSS_BUILTIN_VOICES, readAssistantTtsParameters, validateAssistantTtsParameters, type AssistantTtsParameters, type AssistantTtsSnapshot, type AssistantTtsVoice } from '../../shared/assistant-tts.js'\nimport { CODINGNS_RPC_CHANNEL } from '../../shared/contracts/transport.js'\nimport { MossVoiceOutput } from '../moss-voice-output.js'\nimport { useCodingNsTranslator, type CodingNsTranslator } from '../locale.js'\nimport { dshSettingsButtonStyle, dshSettingsFieldStyle, dshSettingsHelpStyle, dshThemeColor } from '../theme.js'\nimport type { CodingNsClientServices } from './types.js'\nimport { assistantSettingFieldStyle, assistantSettingTextStyle } from '../assistant-settings-styles.js'\n\n/** 设置页和对话窗口共用独立音色编辑器,不与形象包或识别模型混合。 */\nexport function AssistantVoiceSettings({ services, enabled = true, active = true, embedded = false }: {\n readonly services: CodingNsClientServices; readonly enabled?: boolean; readonly active?: boolean; readonly embedded?: boolean\n}): ReactElement {\n const t = useCodingNsTranslator(services.locale)\n const [snapshot, setSnapshot] = useState<AssistantTtsSnapshot | undefined>()\n const [selectedId, setSelectedId] = useState('moss:Junhao')\n const [parameters, setParameters] = useState<AssistantTtsParameters>({ ...DEFAULT_ASSISTANT_TTS_PARAMETERS })\n const [siteId, setSiteId] = useState<string>('kyutai')\n const [source, setSource] = useState('')\n const [name, setName] = useState('')\n const [language, setLanguage] = useState('unknown')\n const [gender, setGender] = useState('unknown')\n const [busy, setBusy] = useState<string | undefined>()\n const [error, setError] = useState('')\n const [writable, setWritable] = useState(() => services.settings.getSnapshot().writable)\n const alive = useRef(false)\n const pending = useRef(false)\n const reading = useRef(false)\n const abort = useRef<AbortController | undefined>()\n const player = useRef<MossVoiceOutput | undefined>()\n if (player.current === undefined) player.current = new MossVoiceOutput()\n useEffect(() => {\n // 折叠时保留导入和参数草稿,但停止合成试听。\n if (!active) player.current?.cancel()\n }, [active])\n const voices = snapshot?.voices ?? MOSS_BUILTIN_VOICES\n const selected = voices.find((voice) => voice.id === selectedId) ?? voices[0]!\n const site = ASSISTANT_VOICE_SITES.find((site) => site.id === siteId) ?? ASSISTANT_VOICE_SITES[0]!\n const disabled = !enabled || !writable || busy !== undefined || snapshot?.status.busy === true\n const ready = snapshot?.status.ready === true\n const backend = snapshot?.settings.backend ?? services.settings.getSnapshot().value?.assistant?.tts?.backend ?? 'browser'\n const moss = backend === 'moss-onnx'\n\n const refresh = useCallback(async (): Promise<void> => {\n if (reading.current) return\n reading.current = true\n try {\n const result = await services.rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/tts/catalog', {}, abort.current?.signal)\n if (!result.ok) throw new Error(result.error.message)\n if (alive.current) setSnapshot(result.value as AssistantTtsSnapshot)\n } catch (error) { if (alive.current) setError(message(error)) }\n finally { reading.current = false }\n }, [services.rpc])\n\n useEffect(() => {\n alive.current = true; abort.current = new AbortController()\n void refresh()\n const changed = (): void => { setWritable(services.settings.getSnapshot().writable); void refresh() }\n const dispose = services.settings.subscribe(changed)\n window.addEventListener('focus', changed)\n return () => { alive.current = false; abort.current?.abort(); player.current?.dispose(); dispose(); window.removeEventListener('focus', changed) }\n }, [refresh, services.settings])\n useEffect(() => { if (snapshot !== undefined) setSelectedId(snapshot.settings.selectedId) }, [snapshot?.settings.selectedId])\n useEffect(() => {\n if (snapshot !== undefined) setParameters(services.configurationDraft ? { ...DEFAULT_ASSISTANT_TTS_PARAMETERS, ...snapshot.settings.parameters } : readAssistantTtsParameters(snapshot.settings.parameters))\n }, [snapshot?.settings.parameters?.rate, snapshot?.settings.parameters?.volume, snapshot?.settings.parameters?.segmentPauseMs, snapshot?.settings.parameters?.chunkTokens, snapshot?.settings.parameters?.seed])\n useEffect(() => {\n if (busy !== 'setup' && snapshot?.status.busy !== true) return undefined\n const timer = setInterval(() => { void refresh() }, 1000)\n return () => clearInterval(timer)\n }, [busy, snapshot?.status.busy, refresh])\n useEffect(() => { if (!enabled || !moss) player.current?.cancel() }, [enabled, moss])\n\n const run = async (action: string, value: Record<string, unknown>): Promise<void> => {\n if (pending.current || disabled) return\n pending.current = true; setBusy(action); setError(''); player.current?.cancel()\n try {\n const result = await services.rpc.call(CODINGNS_RPC_CHANNEL, `assistant/tts/${action}`, value, abort.current?.signal)\n if (!result.ok) throw new Error(result.error.message)\n if (alive.current) { setSnapshot(result.value as AssistantTtsSnapshot); if (action === 'import') { setSource(''); setName('') } }\n // 配置窗口重读时保留内存草稿;独立设置入口仍读取 Host 保存结果。\n if (services.settings.reload !== undefined) await services.settings.reload()\n else await services.settings.load?.()\n } catch (error) { if (alive.current) setError(message(error)) }\n finally { pending.current = false; if (alive.current) { setBusy(undefined); await refresh() } }\n }\n\n const preview = async (): Promise<void> => {\n if (pending.current || disabled || !active || !moss || !ready) return\n pending.current = true; setBusy('preview'); setError('')\n // 固定试听文本留在词典中,不再要求用户填写;使用当前音色和未保存的播报参数。\n try { await player.current!.speak(t('tts.defaultText'), selected.id, undefined, validateAssistantTtsParameters(parameters)) }\n catch (error) { if (alive.current) setError(message(error)) }\n finally { pending.current = false; if (alive.current) setBusy(undefined) }\n }\n const button = (label: string, action: () => void, locked = false): ReactElement => createElement('button', { type: 'button', disabled: disabled || locked, style: dshSettingsButtonStyle, onClick: action }, label)\n const field = (label: string, content: ReactElement): ReactElement => createElement('label', { style: assistantSettingFieldStyle }, createElement('span', null, label), content)\n const input = (value: string, change: (value: string) => void, maxLength = 2048): ReactElement => createElement('input', { value, disabled, maxLength, style: dshSettingsFieldStyle, onChange: (event: { currentTarget: { value: string } }) => change(event.currentTarget.value) })\n const options = (value: string, change: (value: string) => void, values: readonly string[]): ReactElement => createElement('select', { value, disabled, style: dshSettingsFieldStyle, onChange: (event: { currentTarget: { value: string } }) => change(event.currentTarget.value) },\n ...values.map((item) => createElement('option', { key: item, value: item }, t(`tts.${item}`))))\n const number = (key: keyof AssistantTtsParameters, scale = 1, slider = false): ReactElement => {\n const limits = ASSISTANT_TTS_PARAMETER_LIMITS[key]\n const value = parameters[key]\n const change = (event: { currentTarget: { value: string } }): void => {\n const raw = event.currentTarget.value\n const next = { ...parameters, [key]: raw === '' ? key === 'seed' ? null : Number.NaN : Number(raw) / scale }\n setParameters(next)\n if (services.configurationDraft) void services.settings.mutate([{ op: 'set', path: ['assistant', 'tts', 'parameters'], value: next }]).catch((cause) => setError(message(cause)))\n }\n const props = { disabled, min: limits.min * scale, max: limits.max * scale, step: limits.step * scale, onChange: change }\n return field(t(`tts.${key}`), createElement('div', { style: { display: 'grid', gridTemplateColumns: slider ? 'minmax(0, 1fr) 90px' : '1fr', gap: 10, alignItems: 'center' } },\n slider ? createElement('input', { ...props, type: 'range', 'aria-label': t(`tts.${key}`), value: value === null || !Number.isFinite(value) ? DEFAULT_ASSISTANT_TTS_PARAMETERS[key]! * scale : Number((value * scale).toFixed(4)) }) : null,\n createElement('input', { ...props, type: 'number', value: value === null || !Number.isFinite(value) ? '' : Number((value * scale).toFixed(4)),\n placeholder: key === 'seed' ? t('tts.autoSeed') : undefined, 'aria-label': t(`tts.${key}`), style: dshSettingsFieldStyle, 'data-codingns-tts-parameter': key })))\n }\n return createElement('section', { 'aria-label': t('tts.title'), 'data-codingns-voice-settings': true, style: { ...assistantSettingTextStyle, display: 'grid', gap: 12,\n ...(embedded ? {} : { borderTop: `1px solid ${dshThemeColor.border}`, paddingTop: 14 }) } },\n createElement('strong', null, t('tts.title')),\n moss ? createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('tts.description')) : null,\n field(t('tts.backend'), createElement('select', { value: backend, disabled: disabled || snapshot === undefined, style: dshSettingsFieldStyle,\n onChange: (event: { currentTarget: { value: string } }) => { void run('select', { id: selectedId, backend: event.currentTarget.value }) } },\n createElement('option', { value: 'browser' }, t('tts.browser')), createElement('option', { value: 'moss-onnx', disabled: !ready }, t('tts.moss')))),\n createElement('div', { style: { display: 'flex', flexWrap: 'wrap', gap: 8 } }, button(t(services.configurationDraft ? 'tts.prepare' : 'tts.setup'), () => { void run('setup', {}) }),\n moss ? button(t('tts.refresh'), () => { void refresh() }) : null),\n !moss && !snapshot?.status.busy && busy !== 'setup' ? null : createElement('div', { role: 'status', style: dshSettingsHelpStyle },\n snapshot?.status.busy ? snapshot.status.phase : busy === 'setup' ? t('tts.busy') : ready ? t('tts.ready') : t('tts.notReady')),\n snapshot?.status.busy ? createElement('progress', { max: snapshot.status.totalBytes ?? undefined, value: snapshot.status.totalBytes === null ? undefined : snapshot.status.downloadedBytes, style: { width: '100%' }, 'aria-label': snapshot.status.phase }) : null,\n moss ? createElement('div', { 'data-codingns-moss-voices': true, style: { display: 'grid', gap: 12 } },\n field(t('tts.selected'), createElement('select', { value: selectedId, disabled, style: dshSettingsFieldStyle, 'data-codingns-voice-list': true,\n onChange: (event: { currentTarget: { value: string } }) => {\n const id = event.currentTarget.value\n player.current?.cancel(); setSelectedId(id)\n if (services.configurationDraft) void services.settings.mutate([{ op: 'set', path: ['assistant', 'tts', 'selectedId'], value: id }]).catch((cause) => setError(message(cause)))\n } },\n ...voices.map((voice) => createElement('option', { key: voice.id, value: voice.id }, voiceLabel(voice, t))))),\n createElement('div', { style: { ...dshSettingsHelpStyle, overflowWrap: 'anywhere' } }, t('tts.license', { license: selected.license }), ' · ',\n createElement('a', { href: selected.source, target: '_blank', rel: 'noopener noreferrer' }, t('tts.sourceLink'))),\n createElement('div', { style: { display: 'flex', flexWrap: 'wrap', gap: 8 } },\n services.configurationDraft ? null : button(t('tts.apply'), () => { void run('select', { id: selectedId }) }, !ready),\n button(t('tts.preview'), () => { void preview() }, !ready),\n busy !== 'preview' ? null : createElement('button', { type: 'button', style: dshSettingsButtonStyle, onClick: () => player.current?.cancel() }, t('tts.stop')),\n selected.kind !== 'reference' ? null : button(t('tts.remove'), () => { void run('remove', { id: selected.id }) }))) : null,\n createElement('div', { 'data-codingns-tts-controls': true, style: { display: 'grid', gap: 12 } },\n createElement('strong', null, t('tts.playbackSettings')),\n number('rate', 1, true), number('volume', 100, true),\n moss ? createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('tts.rateHint')) : null,\n moss ? createElement('details', null, createElement('summary', { style: { cursor: 'pointer' } }, t('tts.advanced')),\n createElement('div', { style: { display: 'grid', gap: 12, marginTop: 12 } },\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('tts.advancedHint')),\n number('segmentPauseMs'), number('chunkTokens'), number('seed'),\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('tts.seedHint')))) : null,\n moss ? createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('tts.parametersHint')) : null,\n createElement('div', { style: { display: 'flex', flexWrap: 'wrap', gap: 8 } },\n services.configurationDraft ? null : button(t('tts.saveParameters'), () => { void run('configure', { parameters }) }, snapshot === undefined),\n button(t(services.configurationDraft ? 'tts.resetDraftParameters' : 'tts.resetParameters'), () => {\n // 浏览器模式只恢复可见的语速和音量,保留隐藏的 MOSS 高级参数。\n const next = moss ? { ...DEFAULT_ASSISTANT_TTS_PARAMETERS } : { ...parameters, rate: DEFAULT_ASSISTANT_TTS_PARAMETERS.rate, volume: DEFAULT_ASSISTANT_TTS_PARAMETERS.volume }\n setParameters(next)\n if (services.configurationDraft) void services.settings.mutate([{ op: 'set', path: ['assistant', 'tts', 'parameters'], value: next }]).catch((cause) => setError(message(cause)))\n else void run('configure', { parameters: next }) }, snapshot === undefined))),\n moss ? createElement('details', { 'data-codingns-voice-import': true }, createElement('summary', { style: { cursor: 'pointer' } }, t(services.configurationDraft ? 'tts.importDraft' : 'tts.import')),\n createElement('div', { style: { display: 'grid', gap: 12, marginTop: 12 } },\n field(t('tts.site'), createElement('select', { value: siteId, disabled, style: dshSettingsFieldStyle, onChange: (event: { currentTarget: { value: string } }) => setSiteId(event.currentTarget.value) },\n ...ASSISTANT_VOICE_SITES.map((site) => createElement('option', { key: site.id, value: site.id }, site.name)))),\n createElement('a', { href: site.url, target: '_blank', rel: 'noopener noreferrer', 'aria-disabled': !enabled, onClick: (event: { preventDefault: () => void }) => { if (!enabled) event.preventDefault() }, style: { ...dshSettingsButtonStyle, justifySelf: 'start', textDecoration: 'none' } }, t('tts.openSite')),\n createElement('a', { href: siteId === 'aishell' ? 'https://huggingface.co/datasets/AISHELL/AISHELL-3/tree/main/train/wav' : 'https://huggingface.co/kyutai/tts-voices/tree/main/voice-donations', target: '_blank', rel: 'noopener noreferrer', 'aria-disabled': !enabled,\n onClick: (event: { preventDefault: () => void }) => { if (!enabled) event.preventDefault() } }, t('tts.openRecordings')),\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t(siteId === 'aishell' ? 'tts.aishellHint' : 'tts.kyutaiHint')),\n field(t('tts.source'), input(source, setSource)), field(t('tts.name'), input(name, setName, 80)),\n field(t('tts.language'), options(language, setLanguage, ['unknown', 'zh', 'en', 'ja', 'fr'])),\n field(t('tts.gender'), options(gender, setGender, ['unknown', 'male', 'female'])),\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('tts.sourceHint')),\n button(t(services.configurationDraft ? 'tts.importDraft' : 'tts.import'), () => { const reference = siteId === 'aishell' && !source.includes(':') ? `aishell:${source}` : source; void run('import', { source: reference, name, language, gender }) }, !ready || source.trim() === ''))) : null,\n error || snapshot?.status.error ? createElement('div', { role: 'alert', style: { color: dshThemeColor.error, fontSize: 13, overflowWrap: 'anywhere' } }, error || snapshot?.status.error) : null)\n}\n\nexport function voiceLabel(voice: AssistantTtsVoice, t: CodingNsTranslator): string {\n const language = ['zh', 'en', 'ja', 'fr', 'unknown'].includes(voice.language) ? t(`tts.${voice.language}`) : voice.language\n return `${voice.name} · ${language} · ${t(`tts.${voice.gender}`)}`\n}\nfunction message(error: unknown): string { return error instanceof Error ? error.message : String(error) }\n","import { createElement, useState } from 'react'\nimport type { ReactElement, ReactNode } from 'react'\nimport type { CodingNsTranslator } from '../locale.js'\nimport { dshThemeColor } from '../theme.js'\n\ninterface VoiceSettingsGroupProps {\n readonly kind: 'input' | 'output'; readonly hint: string; readonly active: boolean; readonly disabled: boolean\n readonly t: CodingNsTranslator; readonly renderContent: (active: boolean) => ReactNode\n}\n\n/** 两组独立收起,保留子组件实例,避免关闭卡片丢失草稿或中断下载。 */\nexport function AssistantVoiceSettingsGroup(props: VoiceSettingsGroupProps): ReactElement {\n const [expanded, setExpanded] = useState(false)\n return createElement(AssistantVoiceSettingsGroupView, { ...props, expanded, onToggle: setExpanded })\n}\n\n/** 原生折叠语义支持键盘操作;内容保留,隐藏后通过 active 停止试听和闲置查询。 */\nexport function AssistantVoiceSettingsGroupView({ kind, hint, active, disabled, expanded, t, renderContent, onToggle }: VoiceSettingsGroupProps & {\n readonly expanded: boolean; readonly onToggle: (expanded: boolean) => void\n}): ReactElement {\n return createElement('details', { open: expanded, 'data-codingns-voice-settings-group': kind,\n onToggle: (event: { currentTarget: { open: boolean } }) => onToggle(event.currentTarget.open),\n style: { minWidth: 0, border: `1px solid ${dshThemeColor.border}`, borderRadius: 14,\n color: dshThemeColor.labelPrimary, background: dshThemeColor.cardBackground } },\n createElement('summary', { style: { display: 'flex', alignItems: 'center', gap: 12, padding: '16px 18px', minWidth: 0,\n cursor: 'pointer', listStyle: 'none', borderRadius: expanded ? '14px 14px 0 0' : 14 } },\n createElement('span', { 'aria-hidden': true, style: { width: 36, height: 36, flexShrink: 0, display: 'flex', alignItems: 'center',\n justifyContent: 'center', borderRadius: 10, color: dshThemeColor.accent, background: dshThemeColor.surfaceSubtle } }, groupIcon(kind)),\n createElement('span', { style: { display: 'grid', gap: 4, flex: '1 1 auto', minWidth: 0 } },\n createElement('strong', { style: { fontSize: 14, fontWeight: 600, lineHeight: 1.4 } }, t(`voice.settings.${kind}`)),\n createElement('span', { title: hint, style: { fontSize: 12, lineHeight: 1.5, color: dshThemeColor.labelSecondary,\n whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' } }, hint)),\n createElement('svg', { 'aria-hidden': true, width: 18, height: 18, viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', strokeWidth: 1.8,\n style: { flexShrink: 0, color: dshThemeColor.labelSecondary, transform: expanded ? 'rotate(180deg)' : 'none' } },\n createElement('path', { d: 'm6 9 6 6 6-6', strokeLinecap: 'round', strokeLinejoin: 'round' }))),\n createElement('fieldset', { disabled, style: { display: 'grid', gap: 18, margin: 0, padding: 18, minWidth: 0,\n border: 0, borderTop: `1px solid ${dshThemeColor.border}` } }, createElement('style', null, groupCss), renderContent(active && expanded)))\n}\n\nfunction groupIcon(kind: 'input' | 'output'): ReactElement {\n return createElement('svg', { width: 20, height: 20, viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', strokeWidth: 1.6,\n strokeLinecap: 'round', strokeLinejoin: 'round' }, kind === 'input'\n ? [createElement('rect', { key: 'mic', x: 9, y: 2, width: 6, height: 12, rx: 3 }),\n createElement('path', { key: 'stand', d: 'M5 10v2a7 7 0 0 0 14 0v-2M12 19v3M8 22h8' })]\n : [createElement('path', { key: 'speaker', d: 'm11 4-6 5H2v6h3l6 5V4Z' }),\n createElement('path', { key: 'sound', d: 'M15 8a6 6 0 0 1 0 8m3-11a10 10 0 0 1 0 14' })])\n}\n\n// 只覆盖这两张卡片:原生三角由统一箭头替代,悬停和键盘焦点沿用宿主主题。\nconst groupCss = `\n[data-codingns-voice-settings-group]>summary::-webkit-details-marker{display:none}\n[data-codingns-voice-settings-group]>summary:hover{background:var(--dsw-alias-interactive-bg-hover,rgba(127,127,127,.06))}\n[data-codingns-voice-settings-group]>summary:focus-visible{outline:2px solid var(--dsw-alias-button-info-fill,#1677ff);outline-offset:2px}\n`\n","import { createElement, useCallback, useEffect, useRef, useState } from 'react'\nimport type { ReactElement, ReactNode } from 'react'\nimport type { AssistantVoiceInitializationSnapshot } from '../../shared/voice-initialization.js'\nimport { CODINGNS_RPC_CHANNEL } from '../../shared/contracts/transport.js'\nimport { MossVoiceOutput } from '../moss-voice-output.js'\nimport { useCodingNsTranslator, type CodingNsTranslator } from '../locale.js'\nimport { dshSettingsButtonStyle, dshSettingsPrimaryButtonStyle, dshSettingsHelpStyle, dshThemeColor } from '../theme.js'\nimport type { CodingNsClientServices } from './types.js'\nimport { AssistantVoiceSettingsGroup } from './assistant-voice-settings-group.js'\n\n/** 打开面板只检查缓存,用户点击启用后才安装;首次不展示技术参数或要求填写字段。 */\nexport function AssistantVoiceInitializationPanel({ services, enabled, active, inputSettings, outputSettings }: {\n readonly services: CodingNsClientServices; readonly enabled: boolean; readonly active: boolean\n readonly inputSettings: (active: boolean) => ReactNode; readonly outputSettings: (active: boolean) => ReactNode\n}): ReactElement {\n const t = useCodingNsTranslator(services.locale)\n const [snapshot, setSnapshot] = useState<AssistantVoiceInitializationSnapshot>()\n const [pending, setPending] = useState(false)\n const [error, setError] = useState('')\n const [speaking, setSpeaking] = useState(false)\n const [writable, setWritable] = useState(() => services.settings.getSnapshot().writable)\n const mounted = useRef(false); const submitting = useRef(false); const reading = useRef(false)\n const revision = useRef(0); const abort = useRef<AbortController>()\n const player = useRef<MossVoiceOutput>()\n if (player.current === undefined) player.current = new MossVoiceOutput()\n const refresh = useCallback(async (): Promise<void> => {\n if (reading.current) return\n reading.current = true\n const current = revision.current\n try {\n const result = await services.rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/voice/initialization', {}, abort.current?.signal)\n if (!result.ok) throw new Error(result.error.message)\n if (mounted.current && current === revision.current) { setSnapshot(result.value as AssistantVoiceInitializationSnapshot); setError('') }\n } catch (cause) { if (mounted.current && current === revision.current) setError(message(cause)) }\n finally { reading.current = false }\n }, [services.rpc])\n useEffect(() => {\n mounted.current = true; abort.current = new AbortController()\n const dispose = services.settings.subscribe(() => { setWritable(services.settings.getSnapshot().writable); void refresh() })\n return () => { mounted.current = false; revision.current++; abort.current?.abort(); player.current?.dispose(); dispose() }\n }, [services.settings, refresh])\n useEffect(() => {\n if (!active && !pending && !snapshot?.busy) return undefined\n void refresh()\n const timer = setInterval(() => { void refresh() }, pending || snapshot?.busy ? 1000 : 5000)\n return () => clearInterval(timer)\n }, [active, pending, snapshot?.busy, refresh])\n useEffect(() => { if (!active || !enabled) { player.current?.cancel(); setSpeaking(false) } }, [active, enabled])\n\n const initialize = async (): Promise<void> => {\n if (submitting.current || !enabled || !writable || snapshot === undefined || snapshot.busy) return\n submitting.current = true; revision.current++; setPending(true); setError(''); player.current?.cancel(); setSpeaking(false)\n try {\n const result = await services.rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/voice/initialize', {}, abort.current?.signal)\n if (!result.ok) throw new Error(result.error.message)\n revision.current++\n if (mounted.current) setSnapshot(result.value as AssistantVoiceInitializationSnapshot)\n // 配置窗口保留待保存的模型与后端;独立入口重读 Host 保存结果。\n if (services.settings.reload !== undefined) await services.settings.reload()\n else await services.settings.load?.()\n } catch (cause) { if (mounted.current) setError(message(cause)) }\n finally { submitting.current = false; if (mounted.current) setPending(false) }\n }\n const listen = async (): Promise<void> => {\n if (speaking) { player.current?.cancel(); setSpeaking(false); return }\n if (!enabled || !writable || !snapshot?.ready) return\n setSpeaking(true); setError('')\n try { await player.current!.speak(t('tts.defaultText'), snapshot.tts.settings.selectedId, undefined, snapshot.tts.settings.parameters) }\n catch (cause) { if (mounted.current) setError(message(cause)) }\n finally { if (mounted.current) setSpeaking(false) }\n }\n return createElement('div', { style: { display: 'grid', gap: 18 } },\n createElement(AssistantVoiceInitializationView, { snapshot, pending, error, disabled: !enabled || !writable, speaking, draft: services.configurationDraft === true, t,\n onInitialize: () => { void initialize() }, onListen: () => { void listen() }, onRefresh: () => { void refresh() } }),\n createElement(AssistantVoiceSettingsGroup, { kind: 'input', hint: snapshot?.modelLabel ?? t('voice.settings.inputDescription'),\n active, disabled: !enabled || !writable || pending || snapshot?.busy === true, t, renderContent: inputSettings }),\n createElement(AssistantVoiceSettingsGroup, { kind: 'output', hint: snapshot?.tts.settings.backend === 'browser' ? t('tts.browser')\n : snapshot?.tts.voices.find((voice) => voice.id === snapshot.tts.settings.selectedId)?.name ?? t('voice.settings.outputDescription'),\n active, disabled: !enabled || !writable || pending || snapshot?.busy === true, t, renderContent: outputSettings }))\n}\n\n/** 纯展示层覆盖未配置、准备中、失败与完成四态,重试仍只有一个入口。 */\nexport function AssistantVoiceInitializationView({ snapshot, pending, error, disabled, speaking, draft = false, t, onInitialize, onListen, onRefresh }: {\n readonly snapshot: AssistantVoiceInitializationSnapshot | undefined; readonly pending: boolean; readonly error: string\n readonly disabled: boolean; readonly speaking: boolean; readonly t: CodingNsTranslator\n readonly draft?: boolean\n readonly onInitialize: () => void; readonly onListen: () => void; readonly onRefresh: () => void\n}): ReactElement {\n const busy = pending || snapshot?.busy === true\n const ready = snapshot?.ready === true\n const failure = error || snapshot?.error\n const voice = snapshot?.tts.voices.find((voice) => voice.id === snapshot.tts.settings.selectedId)\n const label = busy ? t(snapshot?.phase === 'speech' || snapshot?.tts.status.busy ? 'tts.wizardSpeech' : 'tts.wizardRecognition')\n : ready ? t(draft ? 'tts.wizardDraftReady' : 'tts.wizardReady') : snapshot === undefined ? t('tts.wizardChecking') : t('tts.wizardDescription')\n const progress = snapshot?.progress\n const value = busy && progress?.totalBytes != null && progress.totalBytes > 0 ? Math.min(progress.downloadedBytes, progress.totalBytes) : undefined\n return createElement('section', { 'data-codingns-voice-initialization': ready ? 'ready' : busy ? 'preparing' : failure ? 'failed' : 'initial',\n 'aria-label': t('tts.wizardTitle'), style: { display: 'grid', gap: 12, padding: 18, borderRadius: 12,\n border: `1px solid ${dshThemeColor.border}`, background: dshThemeColor.surfaceSubtle } },\n createElement('strong', null, t(ready ? 'tts.wizardReady' : 'tts.wizardTitle')),\n createElement('p', { role: 'status', 'aria-live': 'polite', style: { ...dshSettingsHelpStyle, margin: 0 } }, label),\n ready ? null : createElement('div', { style: { display: 'grid', gap: 5, fontSize: 13, overflowWrap: 'anywhere' } },\n createElement('span', null, t('tts.wizardModel', { model: snapshot?.modelId === 'custom' ? t('voice.models.custom') : snapshot?.modelLabel ?? t('tts.wizardDefault') })),\n createElement('span', null, t('tts.wizardVoice', { voice: voice?.name ?? 'Junhao' }))),\n busy ? createElement('div', { style: { display: 'grid', gap: 6 } },\n createElement('progress', { max: progress?.totalBytes ?? 1, ...(value === undefined ? {} : { value }), 'aria-label': label, style: { width: '100%' } }),\n snapshot?.phase !== 'speech' || progress === null || progress === undefined ? null : createElement('small', { style: dshSettingsHelpStyle }, progress.label)) : null,\n ready ? null : createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('tts.wizardHint')),\n createElement('div', { style: { display: 'flex', flexWrap: 'wrap', gap: 8 } },\n createElement('button', { type: 'button', disabled: disabled || busy || snapshot === undefined,\n onClick: ready ? onListen : onInitialize, style: dshSettingsPrimaryButtonStyle },\n t(ready ? speaking ? 'tts.stop' : 'tts.wizardListen' : busy ? 'tts.wizardPreparing' : failure ? 'tts.wizardRetry' : draft ? 'tts.wizardPrepareResources' : 'tts.wizardEnable')),\n snapshot !== undefined && !failure ? null : createElement('button', { type: 'button', disabled: busy, onClick: onRefresh, style: dshSettingsButtonStyle }, t('tts.refresh'))),\n failure ? createElement('div', { role: 'alert', style: { color: dshThemeColor.error, fontSize: 13, overflowWrap: 'anywhere' } }, failure) : null)\n}\nfunction message(cause: unknown): string { return cause instanceof Error ? cause.message : String(cause) }\n","import { CODINGNS_RPC_CHANNEL } from '../shared/contracts/transport.js'\nimport type { AssistantVoiceModelProgress } from '../shared/voice-models.js'\nimport type { CodingNsRpcClient } from './features/types.js'\n\n/** 复用页面 RPC 查询下载状态;每次查询返回后再安排下一次,避免请求积压。 */\nexport function watchVoiceModelSetupProgress(\n rpc: CodingNsRpcClient,\n request: { readonly modelId: string; readonly requestId: string },\n onProgress: (progress: AssistantVoiceModelProgress) => void,\n): () => void {\n let active = true\n let timer: ReturnType<typeof setTimeout> | undefined\n const controller = new AbortController()\n const poll = async (): Promise<void> => {\n try {\n const result = await rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/voice/setup-progress', request, controller.signal)\n const progress = result.ok ? result.value as AssistantVoiceModelProgress | null : null\n if (active && progress != null && progress.modelId === request.modelId) onProgress(progress)\n } catch {\n // 查询暂时失败时保留最后的进度;初始化请求本身负责报告最终错误。\n }\n if (active) timer = setTimeout(() => void poll(), 300)\n }\n void poll()\n return () => {\n active = false\n clearTimeout(timer)\n controller.abort()\n }\n}\n","import { createElement, useCallback, useEffect, useRef, useState } from 'react'\nimport type { CSSProperties, ReactElement } from 'react'\nimport { CODINGNS_RPC_CHANNEL } from '../../shared/contracts/transport.js'\nimport type { AssistantVoiceSettings } from '../../shared/contracts/config.js'\nimport { ASSISTANT_VOICE_MODEL_CATALOG, findAssistantVoiceModel, type AssistantVoiceModel, type AssistantVoiceModelProgress, type AssistantVoiceModelStatus, type AssistantVoiceModelsSnapshot } from '../../shared/voice-models.js'\nimport { watchVoiceModelSetupProgress } from '../voice-model-setup-progress.js'\nimport type { CodingNsClientServices } from './types.js'\nimport { dshSettingsButtonStyle, dshSettingsPrimaryButtonStyle, dshThemeColor } from '../theme.js'\nimport { useCodingNsTranslator, type CodingNsTranslator } from '../locale.js'\nimport { assistantSettingCheckboxStyle, assistantSettingTextStyle } from '../assistant-settings-styles.js'\nimport { DEFAULT_VOICE_MODEL_ID } from '../../shared/voice-initialization.js'\n\n/** 旧入口继续使用弹窗,与声音页共用同一套模型操作。 */\nexport function VoiceInitializationDialog({ services, value, onClose }: {\n readonly services: CodingNsClientServices; readonly value: AssistantVoiceSettings; readonly onClose: () => void\n}): ReactElement {\n return createElement(VoiceModelManager, { services, value, onClose })\n}\n\n/** 识别模型独立展示,不依赖 MOSS 初始化或高级声音设置的展开状态。 */\nexport function VoiceModelManagerPanel({ services, value, enabled, active }: {\n readonly services: CodingNsClientServices; readonly value: AssistantVoiceSettings\n readonly enabled: boolean; readonly active: boolean\n}): ReactElement {\n return createElement(VoiceModelManager, { services, value, enabled, active })\n}\n\n/** 选中的卡片与 Host 当前配置分开保存,操作完成后重新读取文件事实。 */\nfunction VoiceModelManager({ services, value, enabled = true, active = true, onClose }: {\n readonly services: CodingNsClientServices; readonly value: AssistantVoiceSettings\n readonly enabled?: boolean; readonly active?: boolean; readonly onClose?: () => void\n}): ReactElement {\n const t = useCodingNsTranslator(services.locale)\n const [modelId, setModelId] = useState(() => findAssistantVoiceModel(value.modelId ?? '')?.id ?? DEFAULT_VOICE_MODEL_ID)\n const [snapshot, setSnapshot] = useState<AssistantVoiceModelsSnapshot | undefined>()\n const [refreshing, setRefreshing] = useState(true)\n const [busy, setBusy] = useState<'setup' | 'verify' | 'repair' | undefined>()\n const [progress, setProgress] = useState<AssistantVoiceModelProgress | undefined>()\n const [error, setError] = useState<string | undefined>()\n const [loadError, setLoadError] = useState<string | undefined>()\n const [success, setSuccess] = useState<string | undefined>()\n const mounted = useRef(true)\n const readAbort = useRef<AbortController | undefined>()\n const stopProgress = useRef<(() => void) | undefined>()\n const pending = useRef(false)\n const [settings, setSettings] = useState(() => services.settings.getSnapshot())\n\n const refresh = useCallback(async (): Promise<void> => {\n readAbort.current?.abort()\n const controller = new AbortController()\n readAbort.current = controller\n setRefreshing(true)\n try {\n const result = await services.rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/voice/models', {}, controller.signal)\n if (!mounted.current || controller.signal.aborted) return\n if (!result.ok) throw new Error(result.error.message)\n setSnapshot(result.value as AssistantVoiceModelsSnapshot)\n setLoadError(undefined)\n } catch (cause) {\n if (mounted.current && !controller.signal.aborted) setLoadError(errorMessage(cause))\n } finally {\n if (mounted.current && !controller.signal.aborted) setRefreshing(false)\n }\n }, [services.rpc])\n\n useEffect(() => {\n mounted.current = true\n return () => { mounted.current = false; readAbort.current?.abort(); stopProgress.current?.() }\n }, [services.rpc])\n\n useEffect(() => {\n if (active) void refresh()\n const onFocus = (): void => { if (active) void refresh() }\n window.addEventListener('focus', onFocus)\n const unsubscribe = services.settings.subscribe(() => {\n setSettings(services.settings.getSnapshot())\n if (active || pending.current) void refresh()\n })\n return () => { window.removeEventListener('focus', onFocus); unsubscribe() }\n }, [active, refresh, services.settings])\n\n // 向导或其他窗口改变当前模型后同步选中项;普通状态刷新保留用户尚未应用的选择。\n useEffect(() => {\n const current = findAssistantVoiceModel((services.configurationDraft ? value.modelId : snapshot?.currentModelId) ?? '')\n if (current !== undefined) setModelId(current.id)\n }, [snapshot?.currentModelId, services.configurationDraft, value.modelId])\n\n useEffect(() => {\n if (!active || snapshot?.operation == null || busy !== undefined) return undefined\n const timer = setTimeout(() => void refresh(), 1000)\n return () => clearTimeout(timer)\n }, [active, snapshot, busy, refresh])\n\n useEffect(() => {\n if (onClose === undefined) return undefined\n const onEscape = (event: KeyboardEvent): void => { if (event.key === 'Escape' && !pending.current) onClose() }\n document.addEventListener('keydown', onEscape)\n return () => document.removeEventListener('keydown', onEscape)\n }, [onClose])\n\n const run = async (kind: 'setup' | 'verify' | 'repair'): Promise<void> => {\n if (!active || !enabled || pending.current || snapshot === undefined || snapshot.operation !== null) return\n if (kind !== 'verify' && (snapshot.runtimeRunning || !settings.writable || settings.status === 'loading')) return\n pending.current = true\n setBusy(kind); setError(undefined); setSuccess(undefined); setProgress(undefined)\n try {\n const request = { modelId, requestId: `voice-model-${Date.now()}-${Math.random().toString(36).slice(2)}`, repair: kind === 'repair' }\n if (kind !== 'verify') stopProgress.current = watchVoiceModelSetupProgress(services.rpc, request, (next) => { if (mounted.current) setProgress(next) })\n const result = await services.rpc.call(CODINGNS_RPC_CHANNEL, kind === 'verify' ? 'assistant/voice/model/verify' : 'assistant/voice/setup', request)\n if (!mounted.current) return\n if (!result.ok) throw new Error(result.error.message)\n if (kind !== 'verify') {\n // 工作台仅更新资源草稿;独立模型管理仍重读 Host 保存结果。\n if (services.settings.reload !== undefined) await services.settings.reload()\n else await services.settings.load?.()\n }\n if (!mounted.current) return\n setSuccess(t(kind === 'verify' ? 'voice.models.verified' : services.configurationDraft ? 'voice.models.prepared' : 'voice.models.applied'))\n } catch (cause) { if (mounted.current) setError(errorMessage(cause)) }\n finally {\n stopProgress.current?.(); stopProgress.current = undefined; pending.current = false\n if (mounted.current) { setBusy(undefined); await refresh() }\n }\n }\n const choose = (id: string): void => { setModelId(id); setError(undefined); setSuccess(undefined); setProgress(undefined) }\n const manager = createElement(VoiceModelManagerView, { snapshot, modelId, refreshing, busy, progress, error: error ?? loadError, success,\n enabled, writable: settings.writable && settings.status !== 'loading', onSelect: choose, onRefresh: () => void refresh(), onRun: (kind) => void run(kind), ...(onClose === undefined ? {} : { onClose }), t })\n if (onClose === undefined) return createElement('section', {\n 'data-codingns-voice-model-manager': true, 'aria-label': t('awb.asr'), 'aria-busy': refreshing || busy !== undefined,\n style: { display: 'grid', minWidth: 0 },\n }, manager)\n return createElement('div', {\n role: 'presentation', onPointerDown: () => { if (!pending.current) onClose() },\n style: { position: 'fixed', inset: 0, zIndex: 10000, display: 'flex', alignItems: 'center', justifyContent: 'center', padding: 16, background: dshThemeColor.overlay, boxSizing: 'border-box' },\n }, createElement('div', {\n role: 'dialog', 'aria-modal': true, 'aria-label': t('voice.setup.title'), 'aria-busy': busy !== undefined,\n onPointerDown: (event: { stopPropagation: () => void }) => event.stopPropagation(),\n style: { display: 'flex', flexDirection: 'column', width: 'min(680px, 100%)', maxHeight: 'min(780px, 100%)', color: dshThemeColor.labelPrimary, background: dshThemeColor.menuBackground, border: `1px solid ${dshThemeColor.border}`, borderRadius: 14, boxShadow: dshThemeColor.prominentShadow, overflow: 'hidden', boxSizing: 'border-box' },\n }, manager))\n}\n\n/** 展示层保留下载、配置和验证三个维度,避免把选择动作显示成启用成功。 */\nexport function VoiceModelManagerView({ snapshot, modelId, refreshing, busy, progress, error, success, writable, enabled = true, onSelect, onRefresh, onRun, onClose, t }: {\n readonly snapshot: AssistantVoiceModelsSnapshot | undefined; readonly modelId: string; readonly refreshing: boolean\n readonly busy: 'setup' | 'verify' | 'repair' | undefined; readonly progress: AssistantVoiceModelProgress | undefined\n readonly error: string | undefined; readonly success: string | undefined; readonly writable: boolean\n readonly enabled?: boolean\n readonly onSelect: (id: string) => void; readonly onRefresh: () => void; readonly onRun: (kind: 'setup' | 'verify' | 'repair') => void; readonly onClose?: () => void\n readonly t: CodingNsTranslator\n}): ReactElement {\n const current = findAssistantVoiceModel(snapshot?.currentModelId ?? '')\n const selected = snapshot?.models.find((model) => model.modelId === modelId)\n const locked = !enabled || busy !== undefined || snapshot?.operation != null\n const canApply = snapshot !== undefined && !locked && writable && !snapshot.runtimeRunning\n const alreadyUsed = selected?.current === true && selected.validation.state === 'passed' && selected.state === 'downloaded'\n const action = selected?.state === 'partial' ? t('voice.models.completeDownload') : selected?.state === 'downloaded'\n ? alreadyUsed ? t('voice.models.inUse') : t('voice.models.use') : t('voice.models.downloadUse')\n return createElement('div', { style: { display: 'contents' } },\n createElement('div', { style: { padding: onClose === undefined ? '0 0 12px' : '20px 22px 16px', display: 'grid', gap: 6 } },\n createElement('div', { style: { ...rowStyle, flexWrap: 'wrap' } }, createElement('strong', { style: { fontSize: onClose === undefined ? 14 : 19, lineHeight: 1.4 } }, t(onClose === undefined ? 'awb.asr' : 'voice.setup.title')),\n button(t(refreshing ? 'voice.models.refreshing' : 'voice.models.refresh'), refreshing || busy !== undefined, onRefresh)),\n createElement('span', { style: helpStyle }, t('voice.models.description')),\n onClose === undefined ? createElement('span', { style: helpStyle }, t('voice.models.recognitionHint')) : null,\n ),\n createElement('div', { style: { ...(onClose === undefined ? {} : { overflowY: 'auto' }), minHeight: 0,\n padding: onClose === undefined ? '0 0 16px' : '0 22px 18px', display: 'grid', gap: 12 } },\n createElement('div', { style: { ...noticeStyle, display: 'grid', gap: 5 } },\n createElement('span', { style: helpStyle }, t('voice.models.current')),\n createElement('strong', { style: { fontSize: 14, overflowWrap: 'anywhere' } }, snapshot === undefined ? t('voice.models.unknown') : current?.label ?? (snapshot.currentModelId ? t('voice.models.custom') : t('voice.models.none'))),\n snapshot === undefined ? null : createElement('span', { style: helpStyle }, t(snapshot.runtimeRunning ? 'voice.models.running' : snapshot.runtimeReady ? 'voice.models.ready' : 'voice.models.stopped')),\n ),\n snapshot === undefined && error === undefined ? createElement('div', { role: 'status', style: helpStyle }, t('voice.models.loading')) : null,\n createElement('div', { role: 'radiogroup', 'aria-label': t('voice.setup.model'), style: { display: 'grid', gap: 10 } },\n ...ASSISTANT_VOICE_MODEL_CATALOG.map((model) => createElement(VoiceModelCard, { key: model.id, model, status: snapshot?.models.find((status) => status.modelId === model.id), selected: model.id === modelId, disabled: locked || snapshot === undefined, onSelect, t }))),\n busy === undefined ? null : createElement('div', { style: noticeStyle }, createElement(VoiceModelSetupProgress, { progress: busy === 'verify'\n ? { modelId, phase: 'verifying', fileName: null, fileIndex: 0, fileCount: 0, downloadedBytes: 0, totalBytes: null } : progress, t })),\n snapshot?.operation == null || busy !== undefined ? null : createElement('div', { role: 'status', style: noticeStyle }, t('voice.models.otherOperation')),\n snapshot?.runtimeRunning ? createElement('div', { style: helpStyle }, t('voice.models.stopBeforeSwitch')) : null,\n success === undefined ? null : createElement('div', { role: 'status', style: { ...noticeStyle, color: dshThemeColor.success } }, success),\n error === undefined ? null : createElement('div', { role: 'alert', style: { ...noticeStyle, color: dshThemeColor.error, overflowWrap: 'anywhere', whiteSpace: 'pre-wrap' } }, error),\n createElement('span', { style: helpStyle }, t('voice.models.localHint')),\n ),\n createElement('div', { style: { display: 'flex', justifyContent: 'flex-end', flexWrap: 'wrap', gap: 8,\n padding: onClose === undefined ? '14px 0 0' : '14px 22px', borderTop: `1px solid ${dshThemeColor.border}` } },\n onClose === undefined ? null : button(t('voice.models.close'), busy !== undefined, onClose),\n selected?.state === 'missing' || selected === undefined ? null : button(t('voice.models.redownload'), !canApply, () => onRun('repair')),\n button(t('voice.models.verify'), locked || selected?.state !== 'downloaded', () => onRun('verify')),\n button(action, !canApply || alreadyUsed || selected === undefined, () => onRun('setup'), true)),\n )\n}\n\n/** 文件详情按需展开,模型下载状态与最近验证结果始终可见。 */\nexport function VoiceModelCard({ model, status, selected, disabled, onSelect, t }: {\n readonly model: AssistantVoiceModel; readonly status: AssistantVoiceModelStatus | undefined; readonly selected: boolean\n readonly disabled: boolean; readonly onSelect: (id: string) => void; readonly t: CodingNsTranslator\n}): ReactElement {\n const state = status === undefined ? t('voice.models.unknown') : t(status.state === 'downloaded' ? 'voice.models.downloaded' : status.state === 'partial' ? 'voice.models.partial' : 'voice.models.missing')\n const validation = status?.validation.state === 'passed' ? t('voice.models.passed') : status?.validation.state === 'failed' ? t('voice.models.failed') : t('voice.models.unchecked')\n return createElement('div', { style: { border: `1px solid ${selected ? dshThemeColor.accent : dshThemeColor.border}`, borderRadius: 9, padding: '12px 14px', background: selected ? dshThemeColor.surfaceSubtle : dshThemeColor.menuBackground, display: 'grid', gap: 8 } },\n createElement('label', { style: { ...assistantSettingCheckboxStyle, cursor: disabled ? 'default' : 'pointer' } },\n createElement('input', { type: 'radio', name: 'voice-model', value: model.id, checked: selected, disabled, onChange: () => onSelect(model.id), style: { margin: '3px 0 0', accentColor: dshThemeColor.accent, flexShrink: 0 } }),\n createElement('span', { style: { display: 'grid', gap: 5, minWidth: 0, flex: 1 } },\n createElement('span', { style: { ...assistantSettingTextStyle, overflowWrap: 'anywhere' } }, model.label),\n createElement('span', { style: helpStyle }, model.description),\n createElement('span', { style: { display: 'flex', flexWrap: 'wrap', gap: 6 } },\n badge(state, status?.state === 'downloaded' ? dshThemeColor.success : dshThemeColor.labelSecondary),\n status?.current ? badge(t('voice.models.inUse'), dshThemeColor.accent) : null,\n status?.state === 'downloaded' ? badge(validation, status.validation.state === 'passed' ? dshThemeColor.success : status.validation.state === 'failed' ? dshThemeColor.error : dshThemeColor.labelSecondary) : null))),\n status === undefined ? null : createElement('div', { style: { paddingLeft: 23, display: 'grid', gap: 6 } },\n createElement('span', { style: helpStyle }, t('voice.models.fileCount', { count: status.files.filter((file) => file.present).length, total: status.files.length, size: formatDownloadSize(status.totalBytes) })),\n status.validation.checkedAt === null ? null : createElement('span', { style: helpStyle }, t('voice.models.checkedAt', { time: new Date(status.validation.checkedAt).toLocaleString() })),\n status.validation.error === null ? null : createElement('span', { style: { ...helpStyle, color: dshThemeColor.error, overflowWrap: 'anywhere' } }, status.validation.error),\n createElement('details', null, createElement('summary', { style: { ...helpStyle, cursor: 'pointer' } }, t('voice.models.fileDetails')),\n createElement('div', { style: { display: 'grid', gap: 9, marginTop: 9 } }, ...status.files.map((file) => createElement('div', { key: file.name, style: { display: 'grid', gap: 2 } },\n createElement('span', { style: { ...rowStyle, fontSize: 12 } }, createElement('span', { style: { overflowWrap: 'anywhere' } }, file.name),\n createElement('span', { style: { flexShrink: 0, color: file.present ? dshThemeColor.labelSecondary : dshThemeColor.error } }, file.present ? formatDownloadSize(file.bytes) : file.partialBytes > 0 ? t('voice.models.partialSize', { size: formatDownloadSize(file.partialBytes) }) : t('voice.models.fileMissing'))),\n createElement('span', { style: { ...helpStyle, fontSize: 11, overflowWrap: 'anywhere', fontFamily: dshThemeColor.codeFont } }, file.path)))))))\n}\n\n/** 已下载的字节进度与模型验证、配置阶段分别显示。 */\nexport function VoiceModelSetupProgress({ progress, t }: { readonly progress: AssistantVoiceModelProgress | undefined; readonly t: CodingNsTranslator }): ReactElement {\n const downloading = progress?.phase === 'downloading'\n const downloaded = progress?.phase === 'initializing' || progress?.phase === 'completed'\n const percent = downloaded ? 100 : downloading && progress.totalBytes !== null && progress.totalBytes > 0 ? Math.min(100, Math.floor(progress.downloadedBytes / progress.totalBytes * 100)) : undefined\n const label = downloading ? t('voice.setup.downloadFile', { index: progress.fileIndex, count: progress.fileCount }) : progress?.phase === 'verifying' ? t('voice.models.verifying')\n : progress?.phase === 'initializing' ? t('voice.setup.initializing') : progress?.phase === 'completed' ? t('voice.setup.completed') : t('voice.setup.checking')\n const bytes = downloading ? progress.totalBytes === null ? t('voice.setup.downloadedSize', { size: formatDownloadSize(progress.downloadedBytes) }) : `${formatDownloadSize(progress.downloadedBytes)} / ${formatDownloadSize(progress.totalBytes)}` : undefined\n return createElement('div', { role: 'status', 'aria-live': 'polite', style: { display: 'grid', gap: 7, color: dshThemeColor.labelSecondary, fontSize: 13, lineHeight: 1.5 } },\n createElement('div', { style: rowStyle }, createElement('span', null, label), percent === undefined ? null : createElement('span', { style: { flexShrink: 0, fontVariantNumeric: 'tabular-nums' } }, downloading ? t('voice.setup.filePercent', { percent }) : '100%')),\n createElement('progress', { max: 100, ...(percent === undefined ? {} : { value: percent }), 'aria-label': downloading ? t('voice.setup.fileProgress') : label, style: { display: 'block', width: '100%', height: 10, accentColor: dshThemeColor.accent } }),\n downloading ? createElement('span', { style: { overflowWrap: 'anywhere' } }, progress.fileName) : null,\n bytes === undefined ? null : createElement('span', { style: { fontVariantNumeric: 'tabular-nums' } }, bytes))\n}\n\nfunction formatDownloadSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\nfunction errorMessage(cause: unknown): string { return cause instanceof Error ? cause.message : String(cause) }\nfunction button(label: string, disabled: boolean, onClick: () => void, primary = false): ReactElement {\n return createElement('button', { type: 'button', disabled, onClick, style: {\n ...(primary ? dshSettingsPrimaryButtonStyle : dshSettingsButtonStyle), whiteSpace: 'nowrap', flexShrink: 0,\n ...(disabled ? { opacity: 0.5, cursor: 'default' } : {}),\n } }, label)\n}\nfunction badge(label: string, color: string): ReactElement { return createElement('span', { style: { padding: '2px 7px', border: `1px solid ${dshThemeColor.border}`, borderRadius: 5, fontSize: 11, lineHeight: 1.4, color } }, label) }\nconst rowStyle: CSSProperties = { display: 'flex', justifyContent: 'space-between', alignItems: 'center', gap: 12 }\nconst helpStyle: CSSProperties = { color: dshThemeColor.labelSecondary, fontSize: 12, lineHeight: 1.55 }\nconst noticeStyle: CSSProperties = { padding: '11px 13px', borderRadius: 8, background: dshThemeColor.surfaceSubtle, fontSize: 13, lineHeight: 1.55 }\n","import { createElement, useEffect, useState } from 'react'\nimport type { CSSProperties, ReactElement } from 'react'\nimport type { AssistantChatCatalog } from '../../shared/contracts/assistant.js'\nimport { ASSISTANT_PERSONALITY_MAX_CHARS } from '../../shared/assistant-lifecycle.js'\nimport { listAssistantAvatars, normalizeAssistantAppearance } from '../../shared/assistant-avatar.js'\nimport type { AssistantTtsSnapshot } from '../../shared/assistant-tts.js'\nimport { readAssistantPrompts } from '../../shared/assistant-prompts.js'\nimport type { CodingNsTranslator } from '../locale.js'\nimport { dshSettingsButtonStyle, dshSettingsFieldStyle, dshSettingsHelpStyle, dshThemeColor } from '../theme.js'\nimport { AssistantAvatarPortraitEditor } from '../avatar/portrait-editor.js'\nimport type { AssistantAvatarModel } from '../../shared/assistant-avatar.js'\nimport { AssistantAppearanceEditor } from '../avatar/settings-panel.js'\nimport { AssistantAvatarPicker, assistantAvatarChoices } from '../avatar/catalog-picker.js'\nimport { getAssistantAvatarManager } from '../avatar/manager.js'\nimport { AssistantAvatarEngineDialog, AssistantAvatarEngineProgress, useAssistantAvatarEngine } from '../avatar/engine.js'\nimport type { AssistantAvatarPreviewTargetProps } from '../avatar/catalog-panel.js'\nimport { AssistantVoiceSettings } from './assistant-voice-settings.js'\nimport { AssistantVoiceInitializationPanel } from './assistant-voice-initialization.js'\nimport { VoiceModelManagerPanel } from './voice-initialization-dialog.js'\nimport { AssistantPromptEditor } from './assistant-prompt-editor.js'\nimport { getGlobalVoiceAdapter } from '../global-voice-runtime-registry.js'\nimport type { AssistantConfigurationTab } from './assistant-configuration-tabs.js'\nimport { assistantSettingCheckboxStyle, assistantSettingFieldStyle } from '../assistant-settings-styles.js'\nimport type { CodingNsClientServices } from './types.js'\nimport type { AssistantDraft } from './assistant-workbench.js'\n\nimport type { AssistantSettings } from '../../shared/contracts/config.js'\nimport type { NativeWorkspaceRecord } from '../native-workspace-store.js'\n\n/** 创建与配置共用形象选择:选中 Live2D 时先确认引擎许可并自动安装,成功后才改草稿。 */\nfunction AssistantAvatarSelectionField({ services, appearance, avatarId, avatars, includeLegacy, disabled, t, onChange }: {\n readonly services: CodingNsClientServices\n readonly appearance: ReturnType<typeof normalizeAssistantAppearance>\n readonly avatarId: string\n readonly avatars: readonly AssistantAvatarModel[]\n readonly includeLegacy: boolean\n readonly disabled: boolean\n readonly t: CodingNsTranslator\n readonly onChange: (patch: Partial<AssistantDraft>) => void\n}): ReactElement {\n const manager = getAssistantAvatarManager(services)\n const engine = useAssistantAvatarEngine({ services, manager, appearance, disabled })\n const choices = assistantAvatarChoices(appearance, [], t, includeLegacy)\n const avatar = avatars.find((model) => model.id === avatarId)\n const list = choices.some((choice) => choice.id === avatarId) ? choices\n : [{ id: avatarId, label: t('awb.unavailableSelection', { id: avatarId }), thirdParty: false, disabled: true }, ...choices]\n const choose = (choice: { readonly id: string }): void => {\n if (disabled || !avatars.some((model) => model.id === choice.id)) return\n const model = avatars.find((item) => item.id === choice.id)\n if (model?.renderer === 'live2d') { void engine.ensure(() => onChange({ avatarId: choice.id })); return }\n onChange({ avatarId: choice.id })\n }\n return createElement('div', { style: { display: 'grid', gap: 8 } },\n createElement(AssistantAvatarPicker, { label: t('awb.avatar'), value: avatarId, disabled: disabled || engine.installing, t, choices: list, onChoose: choose }),\n createElement(AssistantAvatarEngineProgress, { controller: engine, t }),\n createElement('p', { style: help }, t('avatar.externalHint')),\n avatar?.renderer !== 'live2d' ? null : createElement('p', { style: help }, t('avatar.live2dDependencyHint')),\n createElement(AssistantAvatarEngineDialog, { controller: engine, t }))\n}\n\nexport function AssistantConfigurationFields({ draft, catalog, appearance, initializing = false, includeAvatar = true, services, t, disabled, onChange }: {\n readonly draft: AssistantDraft; readonly catalog: AssistantChatCatalog | undefined\n readonly appearance: ReturnType<typeof normalizeAssistantAppearance>; readonly t: CodingNsTranslator\n readonly initializing?: boolean\n readonly includeAvatar?: boolean\n readonly services?: CodingNsClientServices\n readonly disabled: boolean; readonly onChange: (patch: Partial<AssistantDraft>) => void\n}): ReactElement {\n const models = catalog?.models ?? []; const avatars = listAssistantAvatars(appearance, !initializing)\n const avatar = avatars.find((model) => model.id === draft.avatarId)\n const avatarChoices = assistantAvatarChoices(appearance, [], t, !initializing)\n const input = (label: string, node: ReactElement): ReactElement => createElement('label', { style: field }, createElement('span', null, label), node)\n const select = (label: string, value: string, change: (value: string) => void, options: ReactElement[]): ReactElement => input(label, createElement('select', { value, disabled, style: identityFieldStyle, onChange: (event: { currentTarget: { value: string } }) => change(event.currentTarget.value) }, ...options))\n const missing = (id: string): ReactElement => createElement('option', { key: id, value: id }, t('awb.unavailableSelection', { id }))\n return createElement('div', { 'data-codingns-assistant-identity': true, style: { display: 'grid', gap: 11 } },\n // 名称与头像始终左右排列,裁剪面板和本地保存说明跨两列展开。\n createElement('div', { 'data-codingns-assistant-identity-row': true, style: { display: 'grid', alignItems: 'start',\n gridTemplateColumns: services === undefined || avatar === undefined ? 'minmax(0, 1fr)' : 'minmax(0, 1fr) minmax(0, 176px)', columnGap: 16, rowGap: 8, minWidth: 0 } },\n input(t('awb.name'), createElement('input', { value: draft.name, maxLength: 80, disabled, placeholder: t('awb.namePlaceholder'), style: identityFieldStyle, onChange: (event: { currentTarget: { value: string } }) => onChange({ name: event.currentTarget.value }) })),\n services === undefined || avatar === undefined ? null : createElement(AssistantAvatarPortraitEditor, { services, model: avatar, disabled, t })),\n select(t('awb.model'), draft.modelKey, (modelKey) => onChange({ modelKey }), [createElement('option', { key: '', value: '' }, t('awb.defaultModel')),\n ...(draft.modelKey && !models.some((model) => JSON.stringify([model.provider, model.model]) === draft.modelKey) ? [missing(draft.modelKey)] : []),\n ...models.map((model) => createElement('option', { key: JSON.stringify([model.provider, model.model]), value: JSON.stringify([model.provider, model.model]) }, `${model.label} · ${model.provider}`))]),\n catalog?.models.length === 0 ? createElement('p', { style: help }, t('awb.noModel'), ...catalog.errors.map((error) => createElement('span', { key: error, style: { display: 'block' } }, error))) : null,\n input(t('awb.personality'), createElement('textarea', { value: draft.personality, maxLength: ASSISTANT_PERSONALITY_MAX_CHARS, rows: 4, disabled, placeholder: t('awb.personalityPlaceholder'),\n style: { ...identityFieldStyle, minHeight: 96, maxHeight: 200, resize: 'vertical', lineHeight: 1.65 }, onChange: (event: { currentTarget: { value: string } }) => onChange({ personality: event.currentTarget.value }) })),\n !includeAvatar ? null : services === undefined ? createElement('div', { style: { display: 'grid', gap: 8 } },\n createElement(AssistantAvatarPicker, { label: t('awb.avatar'), value: draft.avatarId, disabled, t,\n choices: avatarChoices.some((choice) => choice.id === draft.avatarId) ? avatarChoices\n : [{ id: draft.avatarId, label: t('awb.unavailableSelection', { id: draft.avatarId }), thirdParty: false, disabled: true }, ...avatarChoices],\n onChoose: (choice) => { if (avatars.some((avatar) => avatar.id === choice.id)) onChange({ avatarId: choice.id }) } }),\n createElement('p', { style: help }, t('avatar.externalHint')),\n avatar?.renderer !== 'live2d' ? null : createElement('p', { style: help }, t('avatar.live2dDependencyHint')))\n : createElement(AssistantAvatarSelectionField, { services, appearance, avatarId: draft.avatarId, avatars, includeLegacy: !initializing, disabled, t, onChange }))\n}\n\n/** 创建后的各页只装配自己的字段;页面切换不持有或重置父级草稿。 */\nexport function AssistantConfigurationPage({ tab, active = true, services, value, draft, catalog, appearance, tts, workspaces, t, disabled, onChange, onDebug, onError, onReset, ...previewProps }: {\n readonly tab: AssistantConfigurationTab; readonly services: CodingNsClientServices; readonly value: AssistantSettings\n readonly active?: boolean\n readonly draft: AssistantDraft; readonly catalog: AssistantChatCatalog | undefined\n readonly appearance: ReturnType<typeof normalizeAssistantAppearance>; readonly tts: AssistantTtsSnapshot | undefined\n readonly workspaces: readonly NativeWorkspaceRecord[]; readonly t: CodingNsTranslator; readonly disabled: boolean\n readonly onChange: (patch: Partial<AssistantDraft>) => void\n readonly onDebug: () => void; readonly onError: (error: string) => void\n readonly onReset?: () => void\n} & Omit<AssistantAvatarPreviewTargetProps, 'active'>): ReactElement {\n switch (tab) {\n case 'basic': return createElement(AssistantConfigurationFields, { draft, catalog, appearance, includeAvatar: false, services, t, disabled, onChange })\n case 'appearance': return createElement('div', { style: { display: 'grid', gap: 11 } },\n createElement(AssistantAppearanceEditor, { services, enabled: !disabled, active, ...previewProps }))\n case 'voice': return createElement('div', { style: { display: 'grid', gap: 11 } },\n createElement(AssistantVoiceInitializationPanel, { services, enabled: !disabled, active,\n inputSettings: (groupActive) => createElement('div', { style: { display: 'grid', gap: 11 } },\n createElement(AssistantAudioDevice, { services, direction: 'input', active: groupActive, disabled, t, onError }),\n createElement(VoiceModelManagerPanel, { services, value: value.voice, enabled: !disabled, active: groupActive })),\n outputSettings: (groupActive) => createElement('div', { style: { display: 'grid', gap: 11 } },\n createElement(AssistantAudioDevice, { services, direction: 'output', active: groupActive, disabled, t, onError }),\n createElement(AssistantVoiceSettings, { services, enabled: !disabled, active: groupActive, embedded: true })) }))\n case 'more': return createElement('div', { style: { display: 'grid', gap: 11 } },\n createElement(AssistantWorkspaceFields, { draft, workspaces, t, disabled, onChange }),\n createElement(AssistantAdvancedSettings, { services, value, disabled, t, onDebug, onError }),\n createElement('div', { style: { paddingTop: 16, borderTop: `1px solid ${dshThemeColor.border}` } },\n createElement('button', { type: 'button', 'data-codingns-assistant-reset': true, disabled: disabled || onReset === undefined,\n style: { ...dshSettingsButtonStyle, color: dshThemeColor.error }, onClick: onReset }, t('awb.reset'))))\n }\n}\n\n/** 兼容原能力表单入口;实际配置页分别装配项目字段与声音字段。 */\nexport function AssistantCapabilityFields({ draft, tts, workspaces, t, disabled, onChange }: {\n readonly draft: AssistantDraft; readonly tts: AssistantTtsSnapshot | undefined; readonly workspaces: readonly NativeWorkspaceRecord[]; readonly t: CodingNsTranslator\n readonly disabled: boolean; readonly onChange: (patch: Partial<AssistantDraft>) => void\n}): ReactElement {\n return createElement('div', { style: { display: 'grid', gap: 18 } },\n AssistantWorkspaceFields({ draft, workspaces, t, disabled, onChange }), AssistantVoiceFields({ draft, tts, t, disabled, onChange }))\n}\n\n/** 项目范围放到更多设置,保留暂不可用项目以避免编辑时丢失原有选择。 */\nexport function AssistantWorkspaceFields({ draft, workspaces, t, disabled, onChange }: {\n readonly draft: AssistantDraft; readonly workspaces: readonly NativeWorkspaceRecord[]; readonly t: CodingNsTranslator\n readonly disabled: boolean; readonly onChange: (patch: Partial<AssistantDraft>) => void\n}): ReactElement {\n const knownWorkspaces = new Set(workspaces.map((workspace) => workspace.workspaceId))\n return createElement('fieldset', { 'data-codingns-assistant-projects': true, style: { border: 0, padding: 0, margin: 0, minWidth: 0 }, disabled },\n createElement('legend', { style: { fontSize: 14, fontWeight: 600, padding: 0, marginBottom: 8 } }, t('awb.workspaces')),\n createElement('p', { style: help }, t('awb.scopeHint')),\n createElement('div', { style: { display: 'grid', gap: 8, maxHeight: 180, overflowY: 'auto', marginTop: 8 } },\n ...[...workspaces, ...draft.managedWorkspaceIds.filter((id) => !knownWorkspaces.has(id)).map((workspaceId) => ({ workspaceId, title: t('awb.offlineWorkspace', { id: workspaceId }) }))].map((workspace) => createElement('label', { key: workspace.workspaceId, style: assistantSettingCheckboxStyle },\n createElement('input', { type: 'checkbox', checked: draft.managedWorkspaceIds.includes(workspace.workspaceId), onChange: (event: { currentTarget: { checked: boolean } }) => onChange({ managedWorkspaceIds: event.currentTarget.checked ? [...draft.managedWorkspaceIds, workspace.workspaceId] : draft.managedWorkspaceIds.filter((id) => id !== workspace.workspaceId) }) }), workspace.title))))\n}\n\n/** 没有安装 MOSS 时只有浏览器声音可选,不因标签拆分而放宽可用性校验。 */\nexport function AssistantVoiceFields({ draft, tts, t, disabled, onChange }: {\n readonly draft: AssistantDraft; readonly tts: AssistantTtsSnapshot | undefined; readonly t: CodingNsTranslator\n readonly disabled: boolean; readonly onChange: (patch: Partial<AssistantDraft>) => void\n}): ReactElement {\n const mossReady = tts?.status.ready === true\n const voices = mossReady ? tts.voices : []\n return createElement('div', { 'data-codingns-assistant-voice-selection': true, style: { display: 'grid', gap: 10 } },\n createElement('label', { style: field }, createElement('span', null, t('awb.voice')),\n createElement('select', { value: draft.ttsBackend === 'browser' || !mossReady ? 'browser' : draft.voiceId, disabled, style: identityFieldStyle,\n onChange: (event: { currentTarget: { value: string } }) => { const voice = event.currentTarget.value; if (voice === 'browser') onChange({ ttsBackend: 'browser' }); else if (mossReady && voices.some((item) => item.id === voice)) onChange({ ttsBackend: 'moss-onnx', voiceId: voice }) } },\n createElement('option', { value: 'browser' }, t('awb.browserVoice')), ...voices.map((voice) => createElement('option', { key: voice.id, value: voice.id }, voice.name)))),\n mossReady ? null : createElement('p', { style: help }, t('awb.mossSetupHint')))\n}\nfunction AssistantAdvancedSettings({ services, value, disabled, t, onDebug, onError }: { readonly services: CodingNsClientServices; readonly value: AssistantSettings; readonly disabled: boolean; readonly t: CodingNsTranslator; readonly onDebug: () => void; readonly onError: (error: string) => void }): ReactElement {\n const defaults = readAssistantPrompts(value.prompts)\n const prompts = services.configurationDraft ? { ...defaults, ...value.prompts } : defaults\n const savePrompt = async (kind: 'index' | 'chat', text: string): Promise<void> => {\n // 提示词是单字段绝对值,不依赖旧快照计算;后台索引变化不应阻止保存。\n try { if (!await services.settings.mutate([{ op: 'set', path: ['assistant', 'prompts', kind], value: text }])) throw new Error(t('settings.moduleWriteRejected')) }\n catch (cause) { onError(message(cause)); throw cause }\n }\n return createElement('div', { style: { display: 'grid', gap: 14, marginTop: 14 } },\n createElement('p', { style: help }, t('awb.moreHint')),\n ...(['index', 'chat'] as const).map((kind) => createElement(AssistantPromptEditor, { key: kind, kind, value: prompts[kind], disabled, onSave: savePrompt,\n ...(services.configurationDraft ? { onChange: savePrompt } : {}), t })),\n createElement('button', { type: 'button', disabled, style: dshSettingsButtonStyle, onClick: onDebug }, t('assistant.debug.open')))\n}\n\n/** 设备按输入、输出分组枚举,折叠时保留选择但停止设备查询。 */\nfunction AssistantAudioDevice({ services, direction, active, disabled, t, onError }: {\n readonly services: CodingNsClientServices; readonly direction: 'input' | 'output'; readonly active: boolean\n readonly disabled: boolean; readonly t: CodingNsTranslator; readonly onError: (error: string) => void\n}): ReactElement | null {\n const adapter = getGlobalVoiceAdapter(services)\n const output = direction === 'output'\n const [devices, setDevices] = useState<readonly { deviceId: string; label: string }[]>([])\n const [selectedId, setSelectedId] = useState((output ? adapter?.outputDeviceId : adapter?.inputDeviceId) ?? '')\n useEffect(() => {\n if (!active || (output && !adapter?.outputDeviceSupported)) return undefined\n let stopped = false\n const refresh = (): void => { void (output ? adapter?.enumerateOutputDevices() : adapter?.enumerateInputDevices())?.then((devices) => { if (!stopped) setDevices(devices) }).catch(() => undefined) }\n refresh(); globalThis.navigator?.mediaDevices?.addEventListener?.('devicechange', refresh)\n return () => { stopped = true; globalThis.navigator?.mediaDevices?.removeEventListener?.('devicechange', refresh) }\n }, [active, adapter, output])\n if (output && !adapter?.outputDeviceSupported) return null\n return createElement('label', { style: field }, t(output ? 'voice.outputDevice' : 'voice.inputDevice'),\n createElement('select', { disabled, value: selectedId, style: dshSettingsFieldStyle, onChange: (event: { currentTarget: { value: string } }) => {\n const id = event.currentTarget.value\n void (output ? adapter?.selectOutputDevice(id) : adapter?.selectInputDevice(id))?.then(() => setSelectedId(id)).catch((cause) => onError(message(cause)))\n } }, createElement('option', { value: '' }, t(output ? 'voice.defaultOutput' : 'voice.defaultMicrophone')), ...devices.map((device) => createElement('option', { key: device.deviceId, value: device.deviceId }, device.label || t(output ? 'voice.unnamedOutput' : 'voice.unnamedMicrophone')))))\n}\n\nfunction message(error: unknown): string { return error instanceof Error ? error.message : String(error) }\nconst help: CSSProperties = { ...dshSettingsHelpStyle, margin: 0 }\nconst field: CSSProperties = assistantSettingFieldStyle\nconst identityFieldStyle: CSSProperties = { ...dshSettingsFieldStyle, borderRadius: 8 }\n"],"x_google_ignoreList":[0,1,2,3,4,5,6],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.assistant-configuration-view.js","names":["Cropper","React","normalizeWheel","CropperComponent","getAssistantAvatarRegistry","resolveAssistantAvatarAsset","useCallback","useSyncExternalStore","createElement","assistantAvatarPortraitKey","getAssistantAvatarPortraitService","useState","useRef","initialAssistantAvatarPortraitArea","cropAssistantAvatarPortrait","assistantSettingTextStyle","AssistantAvatarPortrait","dshSettingsButtonStyle","dshSettingsHelpStyle","dshThemeColor","dshSettingsPrimaryButtonStyle","listAssistantAvatars","builtinAssistantAvatarLabelKey","getAssistantAvatarPreset","createElement","uiFontSize","useState","useId","dshSettingsFieldStyle","resolveChevronDownIcon","assistantSettingFieldStyle","DshMenu","useCodingNsTranslator","useState","useRef","errorMessage","hasAssistantAvatarEngineConsent","useId","createElement","dshThemeColor","uiFontSize","ASSISTANT_AVATAR_ENGINE_CONSENT_VERSION","dshSettingsHelpStyle","assistantSettingCheckboxStyle","dshSettingsButtonStyle","dshSettingsPrimaryButtonStyle","dshSettingsButtonStyle","helpStyle","dshSettingsHelpStyle","assistantSettingCheckboxStyle","useCodingNsTranslator","useState","hasAssistantAvatarConsent","selectedAssistantAvatar","errorMessage","createElement","assistantSettingTextStyle","dshThemeColor","uiFontSize","createPortal","assistantSettingSwitchStyle","SettingsSwitch","useRef","useId","ASSISTANT_AVATAR_CONSENT_VERSION","dshSettingsPrimaryButtonStyle","AssistantAvatarLoading","AssistantAvatarSlot","useCallback","useSyncExternalStore","useState","createElement","uiFontSize","dshThemeColor","useCodingNsTranslator","getAssistantAvatarManager","selectedAssistantAvatar","getAssistantAvatarRegistry","useRef","isAssistantAvatarSource","assistantSettingFieldStyle","assistantSettingSwitchStyle","SettingsSwitch","dshSettingsFieldStyle","assistantSettingTextStyle","dshSettingsHelpStyle","getBuiltinAssistantAvatar","dshSettingsButtonStyle","useCodingNsTranslator","useState","DEFAULT_ASSISTANT_TTS_SETTINGS","DEFAULT_ASSISTANT_TTS_PARAMETERS","useRef","MossVoiceOutput","MOSS_BUILTIN_VOICES","ASSISTANT_VOICE_SITES","useCallback","CODINGNS_RPC_CHANNEL","message","readAssistantTtsParameters","validateAssistantTtsParameters","createElement","dshSettingsButtonStyle","assistantSettingFieldStyle","dshSettingsFieldStyle","ASSISTANT_TTS_PARAMETER_LIMITS","assistantSettingTextStyle","dshThemeColor","dshSettingsHelpStyle","uiFontSize","useState","createElement","dshThemeColor","uiFontSize","useCodingNsTranslator","useState","useRef","MossVoiceOutput","useCallback","CODINGNS_RPC_CHANNEL","message","createElement","dshThemeColor","dshSettingsHelpStyle","uiFontSize","MOSS_BUILTIN_VOICES","DEFAULT_ASSISTANT_TTS_SETTINGS","dshSettingsPrimaryButtonStyle","dshSettingsButtonStyle","CODINGNS_RPC_CHANNEL","createElement","useCodingNsTranslator","useState","findAssistantVoiceModel","useRef","useCallback","CODINGNS_RPC_CHANNEL","dshThemeColor","uiFontSize","ASSISTANT_VOICE_MODEL_CATALOG","assistantSettingCheckboxStyle","assistantSettingTextStyle","dshSettingsPrimaryButtonStyle","dshSettingsButtonStyle","getAssistantAvatarManager","createElement","listAssistantAvatars","ASSISTANT_PERSONALITY_MAX_CHARS","dshThemeColor","dshSettingsButtonStyle","normalizeAssistantNotificationSettings","SettingsToggleRow","ASSISTANT_NOTIFICATION_AUTO_CLOSE_SECONDS","uiFontSize","dshSettingsHelpStyle","dshSettingsFieldStyle","peerHostTagStyle","resolvePeerHostColor","readAssistantPrompts","AssistantPromptEditor","getGlobalVoiceAdapter","useState","assistantSettingFieldStyle"],"sources":["../../../../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs","../../../../node_modules/.pnpm/normalize-wheel@1.0.1/node_modules/normalize-wheel/src/UserAgent_DEPRECATED.js","../../../../node_modules/.pnpm/normalize-wheel@1.0.1/node_modules/normalize-wheel/src/ExecutionEnvironment.js","../../../../node_modules/.pnpm/normalize-wheel@1.0.1/node_modules/normalize-wheel/src/isEventSupported.js","../../../../node_modules/.pnpm/normalize-wheel@1.0.1/node_modules/normalize-wheel/src/normalizeWheel.js","../../../../node_modules/.pnpm/normalize-wheel@1.0.1/node_modules/normalize-wheel/index.js","../../../../node_modules/.pnpm/react-easy-crop@5.5.6_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/react-easy-crop/index.module.mjs","../../../../src/client/avatar/portrait-editor.ts","../../../../src/client/avatar/catalog-picker.ts","../../../../src/client/avatar/engine.ts","../../../../src/client/avatar/temporary-preview.ts","../../../../src/client/avatar/catalog-panel.ts","../../../../src/client/avatar/settings-panel.ts","../../../../src/client/features/assistant-voice-settings.ts","../../../../src/client/features/assistant-voice-settings-group.ts","../../../../src/client/features/assistant-voice-initialization.ts","../../../../src/client/voice-model-setup-progress.ts","../../../../src/client/features/voice-initialization-dialog.ts","../../../../src/client/features/assistant-configuration-view.ts"],"sourcesContent":["/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","/**\n * Copyright 2004-present Facebook. All Rights Reserved.\n *\n * @providesModule UserAgent_DEPRECATED\n */\n\n/**\n * Provides entirely client-side User Agent and OS detection. You should prefer\n * the non-deprecated UserAgent module when possible, which exposes our\n * authoritative server-side PHP-based detection to the client.\n *\n * Usage is straightforward:\n *\n * if (UserAgent_DEPRECATED.ie()) {\n * // IE\n * }\n *\n * You can also do version checks:\n *\n * if (UserAgent_DEPRECATED.ie() >= 7) {\n * // IE7 or better\n * }\n *\n * The browser functions will return NaN if the browser does not match, so\n * you can also do version compares the other way:\n *\n * if (UserAgent_DEPRECATED.ie() < 7) {\n * // IE6 or worse\n * }\n *\n * Note that the version is a float and may include a minor version number,\n * so you should always use range operators to perform comparisons, not\n * strict equality.\n *\n * **Note:** You should **strongly** prefer capability detection to browser\n * version detection where it's reasonable:\n *\n * http://www.quirksmode.org/js/support.html\n *\n * Further, we have a large number of mature wrapper functions and classes\n * which abstract away many browser irregularities. Check the documentation,\n * grep for things, or ask on javascript@lists.facebook.com before writing yet\n * another copy of \"event || window.event\".\n *\n */\n\nvar _populated = false;\n\n// Browsers\nvar _ie, _firefox, _opera, _webkit, _chrome;\n\n// Actual IE browser for compatibility mode\nvar _ie_real_version;\n\n// Platforms\nvar _osx, _windows, _linux, _android;\n\n// Architectures\nvar _win64;\n\n// Devices\nvar _iphone, _ipad, _native;\n\nvar _mobile;\n\nfunction _populate() {\n if (_populated) {\n return;\n }\n\n _populated = true;\n\n // To work around buggy JS libraries that can't handle multi-digit\n // version numbers, Opera 10's user agent string claims it's Opera\n // 9, then later includes a Version/X.Y field:\n //\n // Opera/9.80 (foo) Presto/2.2.15 Version/10.10\n var uas = navigator.userAgent;\n var agent = /(?:MSIE.(\\d+\\.\\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\\d+\\.\\d+))|(?:Opera(?:.+Version.|.)(\\d+\\.\\d+))|(?:AppleWebKit.(\\d+(?:\\.\\d+)?))|(?:Trident\\/\\d+\\.\\d+.*rv:(\\d+\\.\\d+))/.exec(uas);\n var os = /(Mac OS X)|(Windows)|(Linux)/.exec(uas);\n\n _iphone = /\\b(iPhone|iP[ao]d)/.exec(uas);\n _ipad = /\\b(iP[ao]d)/.exec(uas);\n _android = /Android/i.exec(uas);\n _native = /FBAN\\/\\w+;/i.exec(uas);\n _mobile = /Mobile/i.exec(uas);\n\n // Note that the IE team blog would have you believe you should be checking\n // for 'Win64; x64'. But MSDN then reveals that you can actually be coming\n // from either x64 or ia64; so ultimately, you should just check for Win64\n // as in indicator of whether you're in 64-bit IE. 32-bit IE on 64-bit\n // Windows will send 'WOW64' instead.\n _win64 = !!(/Win64/.exec(uas));\n\n if (agent) {\n _ie = agent[1] ? parseFloat(agent[1]) : (\n agent[5] ? parseFloat(agent[5]) : NaN);\n // IE compatibility mode\n if (_ie && document && document.documentMode) {\n _ie = document.documentMode;\n }\n // grab the \"true\" ie version from the trident token if available\n var trident = /(?:Trident\\/(\\d+.\\d+))/.exec(uas);\n _ie_real_version = trident ? parseFloat(trident[1]) + 4 : _ie;\n\n _firefox = agent[2] ? parseFloat(agent[2]) : NaN;\n _opera = agent[3] ? parseFloat(agent[3]) : NaN;\n _webkit = agent[4] ? parseFloat(agent[4]) : NaN;\n if (_webkit) {\n // We do not add the regexp to the above test, because it will always\n // match 'safari' only since 'AppleWebKit' appears before 'Chrome' in\n // the userAgent string.\n agent = /(?:Chrome\\/(\\d+\\.\\d+))/.exec(uas);\n _chrome = agent && agent[1] ? parseFloat(agent[1]) : NaN;\n } else {\n _chrome = NaN;\n }\n } else {\n _ie = _firefox = _opera = _chrome = _webkit = NaN;\n }\n\n if (os) {\n if (os[1]) {\n // Detect OS X version. If no version number matches, set _osx to true.\n // Version examples: 10, 10_6_1, 10.7\n // Parses version number as a float, taking only first two sets of\n // digits. If only one set of digits is found, returns just the major\n // version number.\n var ver = /(?:Mac OS X (\\d+(?:[._]\\d+)?))/.exec(uas);\n\n _osx = ver ? parseFloat(ver[1].replace('_', '.')) : true;\n } else {\n _osx = false;\n }\n _windows = !!os[2];\n _linux = !!os[3];\n } else {\n _osx = _windows = _linux = false;\n }\n}\n\nvar UserAgent_DEPRECATED = {\n\n /**\n * Check if the UA is Internet Explorer.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n ie: function() {\n return _populate() || _ie;\n },\n\n /**\n * Check if we're in Internet Explorer compatibility mode.\n *\n * @return bool true if in compatibility mode, false if\n * not compatibility mode or not ie\n */\n ieCompatibilityMode: function() {\n return _populate() || (_ie_real_version > _ie);\n },\n\n\n /**\n * Whether the browser is 64-bit IE. Really, this is kind of weak sauce; we\n * only need this because Skype can't handle 64-bit IE yet. We need to remove\n * this when we don't need it -- tracked by #601957.\n */\n ie64: function() {\n return UserAgent_DEPRECATED.ie() && _win64;\n },\n\n /**\n * Check if the UA is Firefox.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n firefox: function() {\n return _populate() || _firefox;\n },\n\n\n /**\n * Check if the UA is Opera.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n opera: function() {\n return _populate() || _opera;\n },\n\n\n /**\n * Check if the UA is WebKit.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n webkit: function() {\n return _populate() || _webkit;\n },\n\n /**\n * For Push\n * WILL BE REMOVED VERY SOON. Use UserAgent_DEPRECATED.webkit\n */\n safari: function() {\n return UserAgent_DEPRECATED.webkit();\n },\n\n /**\n * Check if the UA is a Chrome browser.\n *\n *\n * @return float|NaN Version number (if match) or NaN.\n */\n chrome : function() {\n return _populate() || _chrome;\n },\n\n\n /**\n * Check if the user is running Windows.\n *\n * @return bool `true' if the user's OS is Windows.\n */\n windows: function() {\n return _populate() || _windows;\n },\n\n\n /**\n * Check if the user is running Mac OS X.\n *\n * @return float|bool Returns a float if a version number is detected,\n * otherwise true/false.\n */\n osx: function() {\n return _populate() || _osx;\n },\n\n /**\n * Check if the user is running Linux.\n *\n * @return bool `true' if the user's OS is some flavor of Linux.\n */\n linux: function() {\n return _populate() || _linux;\n },\n\n /**\n * Check if the user is running on an iPhone or iPod platform.\n *\n * @return bool `true' if the user is running some flavor of the\n * iPhone OS.\n */\n iphone: function() {\n return _populate() || _iphone;\n },\n\n mobile: function() {\n return _populate() || (_iphone || _ipad || _android || _mobile);\n },\n\n nativeApp: function() {\n // webviews inside of the native apps\n return _populate() || _native;\n },\n\n android: function() {\n return _populate() || _android;\n },\n\n ipad: function() {\n return _populate() || _ipad;\n }\n};\n\nmodule.exports = UserAgent_DEPRECATED;\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule ExecutionEnvironment\n */\n\n/*jslint evil: true */\n\n'use strict';\n\nvar canUseDOM = !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\n/**\n * Simple, lightweight module assisting with the detection and context of\n * Worker. Helps avoid circular dependencies and allows code to reason about\n * whether or not they are in a Worker, even if they never include the main\n * `ReactWorker` dependency.\n */\nvar ExecutionEnvironment = {\n\n canUseDOM: canUseDOM,\n\n canUseWorkers: typeof Worker !== 'undefined',\n\n canUseEventListeners:\n canUseDOM && !!(window.addEventListener || window.attachEvent),\n\n canUseViewport: canUseDOM && !!window.screen,\n\n isInWorker: !canUseDOM // For now, this is true - might change in the future.\n\n};\n\nmodule.exports = ExecutionEnvironment;\n","/**\n * Copyright 2013-2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule isEventSupported\n */\n\n'use strict';\n\nvar ExecutionEnvironment = require('./ExecutionEnvironment');\n\nvar useHasFeature;\nif (ExecutionEnvironment.canUseDOM) {\n useHasFeature =\n document.implementation &&\n document.implementation.hasFeature &&\n // always returns true in newer browsers as per the standard.\n // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature\n document.implementation.hasFeature('', '') !== true;\n}\n\n/**\n * Checks if an event is supported in the current execution environment.\n *\n * NOTE: This will not work correctly for non-generic events such as `change`,\n * `reset`, `load`, `error`, and `select`.\n *\n * Borrows from Modernizr.\n *\n * @param {string} eventNameSuffix Event name, e.g. \"click\".\n * @param {?boolean} capture Check if the capture phase is supported.\n * @return {boolean} True if the event is supported.\n * @internal\n * @license Modernizr 3.0.0pre (Custom Build) | MIT\n */\nfunction isEventSupported(eventNameSuffix, capture) {\n if (!ExecutionEnvironment.canUseDOM ||\n capture && !('addEventListener' in document)) {\n return false;\n }\n\n var eventName = 'on' + eventNameSuffix;\n var isSupported = eventName in document;\n\n if (!isSupported) {\n var element = document.createElement('div');\n element.setAttribute(eventName, 'return;');\n isSupported = typeof element[eventName] === 'function';\n }\n\n if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {\n // This is the only way to test support for the `wheel` event in IE9+.\n isSupported = document.implementation.hasFeature('Events.wheel', '3.0');\n }\n\n return isSupported;\n}\n\nmodule.exports = isEventSupported;\n","/**\n * Copyright (c) 2015, Facebook, Inc.\n * All rights reserved.\n *\n * This source code is licensed under the BSD-style license found in the\n * LICENSE file in the root directory of this source tree. An additional grant\n * of patent rights can be found in the PATENTS file in the same directory.\n *\n * @providesModule normalizeWheel\n * @typechecks\n */\n\n'use strict';\n\nvar UserAgent_DEPRECATED = require('./UserAgent_DEPRECATED');\n\nvar isEventSupported = require('./isEventSupported');\n\n\n// Reasonable defaults\nvar PIXEL_STEP = 10;\nvar LINE_HEIGHT = 40;\nvar PAGE_HEIGHT = 800;\n\n/**\n * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is\n * complicated, thus this doc is long and (hopefully) detailed enough to answer\n * your questions.\n *\n * If you need to react to the mouse wheel in a predictable way, this code is\n * like your bestest friend. * hugs *\n *\n * As of today, there are 4 DOM event types you can listen to:\n *\n * 'wheel' -- Chrome(31+), FF(17+), IE(9+)\n * 'mousewheel' -- Chrome, IE(6+), Opera, Safari\n * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother!\n * 'DOMMouseScroll' -- FF(0.9.7+) since 2003\n *\n * So what to do? The is the best:\n *\n * normalizeWheel.getEventType();\n *\n * In your event callback, use this code to get sane interpretation of the\n * deltas. This code will return an object with properties:\n *\n * spinX -- normalized spin speed (use for zoom) - x plane\n * spinY -- \" - y plane\n * pixelX -- normalized distance (to pixels) - x plane\n * pixelY -- \" - y plane\n *\n * Wheel values are provided by the browser assuming you are using the wheel to\n * scroll a web page by a number of lines or pixels (or pages). Values can vary\n * significantly on different platforms and browsers, forgetting that you can\n * scroll at different speeds. Some devices (like trackpads) emit more events\n * at smaller increments with fine granularity, and some emit massive jumps with\n * linear speed or acceleration.\n *\n * This code does its best to normalize the deltas for you:\n *\n * - spin is trying to normalize how far the wheel was spun (or trackpad\n * dragged). This is super useful for zoom support where you want to\n * throw away the chunky scroll steps on the PC and make those equal to\n * the slow and smooth tiny steps on the Mac. Key data: This code tries to\n * resolve a single slow step on a wheel to 1.\n *\n * - pixel is normalizing the desired scroll delta in pixel units. You'll\n * get the crazy differences between browsers, but at least it'll be in\n * pixels!\n *\n * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This\n * should translate to positive value zooming IN, negative zooming OUT.\n * This matches the newer 'wheel' event.\n *\n * Why are there spinX, spinY (or pixels)?\n *\n * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn\n * with a mouse. It results in side-scrolling in the browser by default.\n *\n * - spinY is what you expect -- it's the classic axis of a mouse wheel.\n *\n * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and\n * probably is by browsers in conjunction with fancy 3D controllers .. but\n * you know.\n *\n * Implementation info:\n *\n * Examples of 'wheel' event if you scroll slowly (down) by one step with an\n * average mouse:\n *\n * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120)\n * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12)\n * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A)\n * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120)\n * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120)\n *\n * On the trackpad:\n *\n * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6)\n * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A)\n *\n * On other/older browsers.. it's more complicated as there can be multiple and\n * also missing delta values.\n *\n * The 'wheel' event is more standard:\n *\n * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents\n *\n * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and\n * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain\n * backward compatibility with older events. Those other values help us\n * better normalize spin speed. Example of what the browsers provide:\n *\n * | event.wheelDelta | event.detail\n * ------------------+------------------+--------------\n * Safari v5/OS X | -120 | 0\n * Safari v5/Win7 | -120 | 0\n * Chrome v17/OS X | -120 | 0\n * Chrome v17/Win7 | -120 | 0\n * IE9/Win7 | -120 | undefined\n * Firefox v4/OS X | undefined | 1\n * Firefox v4/Win7 | undefined | 3\n *\n */\nfunction normalizeWheel(/*object*/ event) /*object*/ {\n var sX = 0, sY = 0, // spinX, spinY\n pX = 0, pY = 0; // pixelX, pixelY\n\n // Legacy\n if ('detail' in event) { sY = event.detail; }\n if ('wheelDelta' in event) { sY = -event.wheelDelta / 120; }\n if ('wheelDeltaY' in event) { sY = -event.wheelDeltaY / 120; }\n if ('wheelDeltaX' in event) { sX = -event.wheelDeltaX / 120; }\n\n // side scrolling on FF with DOMMouseScroll\n if ( 'axis' in event && event.axis === event.HORIZONTAL_AXIS ) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if ('deltaY' in event) { pY = event.deltaY; }\n if ('deltaX' in event) { pX = event.deltaX; }\n\n if ((pX || pY) && event.deltaMode) {\n if (event.deltaMode == 1) { // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else { // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) { sX = (pX < 1) ? -1 : 1; }\n if (pY && !sY) { sY = (pY < 1) ? -1 : 1; }\n\n return { spinX : sX,\n spinY : sY,\n pixelX : pX,\n pixelY : pY };\n}\n\n\n/**\n * The best combination if you prefer spinX + spinY normalization. It favors\n * the older DOMMouseScroll for Firefox, as FF does not include wheelDelta with\n * 'wheel' event, making spin speed determination impossible.\n */\nnormalizeWheel.getEventType = function() /*string*/ {\n return (UserAgent_DEPRECATED.firefox())\n ? 'DOMMouseScroll'\n : (isEventSupported('wheel'))\n ? 'wheel'\n : 'mousewheel';\n};\n\nmodule.exports = normalizeWheel;\n","module.exports = require('./src/normalizeWheel.js');\n","import { __assign, __extends } from 'tslib';\nimport * as React from 'react';\nimport normalizeWheel from 'normalize-wheel';\n\n/**\r\n * Compute the dimension of the crop area based on media size,\r\n * aspect ratio and optionally rotation\r\n */\nfunction getCropSize(mediaWidth, mediaHeight, containerWidth, containerHeight, aspect, rotation) {\n if (rotation === void 0) {\n rotation = 0;\n }\n var _a = rotateSize(mediaWidth, mediaHeight, rotation),\n width = _a.width,\n height = _a.height;\n var fittingWidth = Math.min(width, containerWidth);\n var fittingHeight = Math.min(height, containerHeight);\n if (fittingWidth > fittingHeight * aspect) {\n return {\n width: fittingHeight * aspect,\n height: fittingHeight\n };\n }\n return {\n width: fittingWidth,\n height: fittingWidth / aspect\n };\n}\n/**\r\n * Compute media zoom.\r\n * We fit the media into the container with \"max-width: 100%; max-height: 100%;\"\r\n */\nfunction getMediaZoom(mediaSize) {\n // Take the axis with more pixels to improve accuracy\n return mediaSize.width > mediaSize.height ? mediaSize.width / mediaSize.naturalWidth : mediaSize.height / mediaSize.naturalHeight;\n}\n/**\r\n * Ensure a new media position stays in the crop area.\r\n */\nfunction restrictPosition(position, mediaSize, cropSize, zoom, rotation) {\n if (rotation === void 0) {\n rotation = 0;\n }\n var _a = rotateSize(mediaSize.width, mediaSize.height, rotation),\n width = _a.width,\n height = _a.height;\n return {\n x: restrictPositionCoord(position.x, width, cropSize.width, zoom),\n y: restrictPositionCoord(position.y, height, cropSize.height, zoom)\n };\n}\nfunction restrictPositionCoord(position, mediaSize, cropSize, zoom) {\n var maxPosition = mediaSize * zoom / 2 - cropSize / 2;\n return clamp(position, -maxPosition, maxPosition);\n}\nfunction getDistanceBetweenPoints(pointA, pointB) {\n return Math.sqrt(Math.pow(pointA.y - pointB.y, 2) + Math.pow(pointA.x - pointB.x, 2));\n}\nfunction getRotationBetweenPoints(pointA, pointB) {\n return Math.atan2(pointB.y - pointA.y, pointB.x - pointA.x) * 180 / Math.PI;\n}\n/**\r\n * Compute the output cropped area of the media in percentages and pixels.\r\n * x/y are the top-left coordinates on the src media\r\n */\nfunction computeCroppedArea(crop, mediaSize, cropSize, aspect, zoom, rotation, restrictPosition) {\n if (rotation === void 0) {\n rotation = 0;\n }\n if (restrictPosition === void 0) {\n restrictPosition = true;\n }\n // if the media is rotated by the user, we cannot limit the position anymore\n // as it might need to be negative.\n var limitAreaFn = restrictPosition ? limitArea : noOp;\n var mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation);\n var mediaNaturalBBoxSize = rotateSize(mediaSize.naturalWidth, mediaSize.naturalHeight, rotation);\n // calculate the crop area in percentages\n // in the rotated space\n var croppedAreaPercentages = {\n x: limitAreaFn(100, ((mediaBBoxSize.width - cropSize.width / zoom) / 2 - crop.x / zoom) / mediaBBoxSize.width * 100),\n y: limitAreaFn(100, ((mediaBBoxSize.height - cropSize.height / zoom) / 2 - crop.y / zoom) / mediaBBoxSize.height * 100),\n width: limitAreaFn(100, cropSize.width / mediaBBoxSize.width * 100 / zoom),\n height: limitAreaFn(100, cropSize.height / mediaBBoxSize.height * 100 / zoom)\n };\n // we compute the pixels size naively\n var widthInPixels = Math.round(limitAreaFn(mediaNaturalBBoxSize.width, croppedAreaPercentages.width * mediaNaturalBBoxSize.width / 100));\n var heightInPixels = Math.round(limitAreaFn(mediaNaturalBBoxSize.height, croppedAreaPercentages.height * mediaNaturalBBoxSize.height / 100));\n var isImgWiderThanHigh = mediaNaturalBBoxSize.width >= mediaNaturalBBoxSize.height * aspect;\n // then we ensure the width and height exactly match the aspect (to avoid rounding approximations)\n // if the media is wider than high, when zoom is 0, the crop height will be equals to image height\n // thus we want to compute the width from the height and aspect for accuracy.\n // Otherwise, we compute the height from width and aspect.\n var sizePixels = isImgWiderThanHigh ? {\n width: Math.round(heightInPixels * aspect),\n height: heightInPixels\n } : {\n width: widthInPixels,\n height: Math.round(widthInPixels / aspect)\n };\n var croppedAreaPixels = __assign(__assign({}, sizePixels), {\n x: Math.round(limitAreaFn(mediaNaturalBBoxSize.width - sizePixels.width, croppedAreaPercentages.x * mediaNaturalBBoxSize.width / 100)),\n y: Math.round(limitAreaFn(mediaNaturalBBoxSize.height - sizePixels.height, croppedAreaPercentages.y * mediaNaturalBBoxSize.height / 100))\n });\n return {\n croppedAreaPercentages: croppedAreaPercentages,\n croppedAreaPixels: croppedAreaPixels\n };\n}\n/**\r\n * Ensure the returned value is between 0 and max\r\n */\nfunction limitArea(max, value) {\n return Math.min(max, Math.max(0, value));\n}\nfunction noOp(_max, value) {\n return value;\n}\n/**\r\n * Compute crop and zoom from the croppedAreaPercentages.\r\n */\nfunction getInitialCropFromCroppedAreaPercentages(croppedAreaPercentages, mediaSize, rotation, cropSize, minZoom, maxZoom) {\n var mediaBBoxSize = rotateSize(mediaSize.width, mediaSize.height, rotation);\n // This is the inverse process of computeCroppedArea\n var zoom = clamp(cropSize.width / mediaBBoxSize.width * (100 / croppedAreaPercentages.width), minZoom, maxZoom);\n var crop = {\n x: zoom * mediaBBoxSize.width / 2 - cropSize.width / 2 - mediaBBoxSize.width * zoom * (croppedAreaPercentages.x / 100),\n y: zoom * mediaBBoxSize.height / 2 - cropSize.height / 2 - mediaBBoxSize.height * zoom * (croppedAreaPercentages.y / 100)\n };\n return {\n crop: crop,\n zoom: zoom\n };\n}\n/**\r\n * Compute zoom from the croppedAreaPixels\r\n */\nfunction getZoomFromCroppedAreaPixels(croppedAreaPixels, mediaSize, cropSize) {\n var mediaZoom = getMediaZoom(mediaSize);\n return cropSize.height > cropSize.width ? cropSize.height / (croppedAreaPixels.height * mediaZoom) : cropSize.width / (croppedAreaPixels.width * mediaZoom);\n}\n/**\r\n * Compute crop and zoom from the croppedAreaPixels\r\n */\nfunction getInitialCropFromCroppedAreaPixels(croppedAreaPixels, mediaSize, rotation, cropSize, minZoom, maxZoom) {\n if (rotation === void 0) {\n rotation = 0;\n }\n var mediaNaturalBBoxSize = rotateSize(mediaSize.naturalWidth, mediaSize.naturalHeight, rotation);\n var zoom = clamp(getZoomFromCroppedAreaPixels(croppedAreaPixels, mediaSize, cropSize), minZoom, maxZoom);\n var cropZoom = cropSize.height > cropSize.width ? cropSize.height / croppedAreaPixels.height : cropSize.width / croppedAreaPixels.width;\n var crop = {\n x: ((mediaNaturalBBoxSize.width - croppedAreaPixels.width) / 2 - croppedAreaPixels.x) * cropZoom,\n y: ((mediaNaturalBBoxSize.height - croppedAreaPixels.height) / 2 - croppedAreaPixels.y) * cropZoom\n };\n return {\n crop: crop,\n zoom: zoom\n };\n}\n/**\r\n * Return the point that is the center of point a and b\r\n */\nfunction getCenter(a, b) {\n return {\n x: (b.x + a.x) / 2,\n y: (b.y + a.y) / 2\n };\n}\nfunction getRadianAngle(degreeValue) {\n return degreeValue * Math.PI / 180;\n}\n/**\r\n * Returns the new bounding area of a rotated rectangle.\r\n */\nfunction rotateSize(width, height, rotation) {\n var rotRad = getRadianAngle(rotation);\n return {\n width: Math.abs(Math.cos(rotRad) * width) + Math.abs(Math.sin(rotRad) * height),\n height: Math.abs(Math.sin(rotRad) * width) + Math.abs(Math.cos(rotRad) * height)\n };\n}\n/**\r\n * Clamp value between min and max\r\n */\nfunction clamp(value, min, max) {\n return Math.min(Math.max(value, min), max);\n}\n/**\r\n * Combine multiple class names into a single string.\r\n */\nfunction classNames() {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return args.filter(function (value) {\n if (typeof value === 'string' && value.length > 0) {\n return true;\n }\n return false;\n }).join(' ').trim();\n}\n\nvar css_248z = \".reactEasyCrop_Container {\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n overflow: hidden;\\n user-select: none;\\n touch-action: none;\\n cursor: move;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n}\\n\\n.reactEasyCrop_Image,\\n.reactEasyCrop_Video {\\n will-change: transform; /* this improves performances and prevent painting issues on iOS Chrome */\\n}\\n\\n.reactEasyCrop_Contain {\\n max-width: 100%;\\n max-height: 100%;\\n margin: auto;\\n position: absolute;\\n top: 0;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n}\\n.reactEasyCrop_Cover_Horizontal {\\n width: 100%;\\n height: auto;\\n}\\n.reactEasyCrop_Cover_Vertical {\\n width: auto;\\n height: 100%;\\n}\\n\\n.reactEasyCrop_CropArea {\\n position: absolute;\\n left: 50%;\\n top: 50%;\\n transform: translate(-50%, -50%);\\n border: 1px solid rgba(255, 255, 255, 0.5);\\n box-sizing: border-box;\\n box-shadow: 0 0 0 9999em;\\n color: rgba(0, 0, 0, 0.5);\\n overflow: hidden;\\n}\\n\\n.reactEasyCrop_CropAreaRound {\\n border-radius: 50%;\\n}\\n\\n.reactEasyCrop_CropAreaGrid::before {\\n content: ' ';\\n box-sizing: border-box;\\n position: absolute;\\n border: 1px solid rgba(255, 255, 255, 0.5);\\n top: 0;\\n bottom: 0;\\n left: 33.33%;\\n right: 33.33%;\\n border-top: 0;\\n border-bottom: 0;\\n}\\n\\n.reactEasyCrop_CropAreaGrid::after {\\n content: ' ';\\n box-sizing: border-box;\\n position: absolute;\\n border: 1px solid rgba(255, 255, 255, 0.5);\\n top: 33.33%;\\n bottom: 33.33%;\\n left: 0;\\n right: 0;\\n border-left: 0;\\n border-right: 0;\\n}\\n\";\n\nvar MIN_ZOOM = 1;\nvar MAX_ZOOM = 3;\nvar KEYBOARD_STEP = 1;\nvar Cropper = /** @class */function (_super) {\n __extends(Cropper, _super);\n function Cropper() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.cropperRef = React.createRef();\n _this.imageRef = React.createRef();\n _this.videoRef = React.createRef();\n _this.containerPosition = {\n x: 0,\n y: 0\n };\n _this.containerRef = null;\n _this.styleRef = null;\n _this.containerRect = null;\n _this.mediaSize = {\n width: 0,\n height: 0,\n naturalWidth: 0,\n naturalHeight: 0\n };\n _this.dragStartPosition = {\n x: 0,\n y: 0\n };\n _this.dragStartCrop = {\n x: 0,\n y: 0\n };\n _this.gestureZoomStart = 0;\n _this.gestureRotationStart = 0;\n _this.isTouching = false;\n _this.lastPinchDistance = 0;\n _this.lastPinchRotation = 0;\n _this.rafDragTimeout = null;\n _this.rafPinchTimeout = null;\n _this.wheelTimer = null;\n _this.currentDoc = typeof document !== 'undefined' ? document : null;\n _this.currentWindow = typeof window !== 'undefined' ? window : null;\n _this.resizeObserver = null;\n _this.previousCropSize = null;\n _this.isInitialized = false;\n _this.state = {\n cropSize: null,\n hasWheelJustStarted: false,\n mediaObjectFit: undefined\n };\n _this.initResizeObserver = function () {\n if (typeof window.ResizeObserver === 'undefined' || !_this.containerRef) {\n return;\n }\n var isFirstResize = true;\n _this.resizeObserver = new window.ResizeObserver(function (entries) {\n if (isFirstResize) {\n isFirstResize = false; // observe() is called on mount, we don't want to trigger a recompute on mount\n return;\n }\n _this.computeSizes();\n });\n _this.resizeObserver.observe(_this.containerRef);\n };\n // this is to prevent Safari on iOS >= 10 to zoom the page\n _this.preventZoomSafari = function (e) {\n return e.preventDefault();\n };\n _this.cleanEvents = function () {\n if (!_this.currentDoc) return;\n _this.currentDoc.removeEventListener('mousemove', _this.onMouseMove);\n _this.currentDoc.removeEventListener('mouseup', _this.onDragStopped);\n _this.currentDoc.removeEventListener('touchmove', _this.onTouchMove);\n _this.currentDoc.removeEventListener('touchend', _this.onDragStopped);\n _this.currentDoc.removeEventListener('gesturechange', _this.onGestureChange);\n _this.currentDoc.removeEventListener('gestureend', _this.onGestureEnd);\n _this.currentDoc.removeEventListener('scroll', _this.onScroll);\n };\n _this.clearScrollEvent = function () {\n if (_this.containerRef) _this.containerRef.removeEventListener('wheel', _this.onWheel);\n if (_this.wheelTimer) {\n clearTimeout(_this.wheelTimer);\n }\n };\n _this.onMediaLoad = function () {\n var cropSize = _this.computeSizes();\n if (cropSize) {\n _this.previousCropSize = cropSize;\n _this.emitCropData();\n _this.setInitialCrop(cropSize);\n _this.isInitialized = true;\n }\n if (_this.props.onMediaLoaded) {\n _this.props.onMediaLoaded(_this.mediaSize);\n }\n };\n _this.setInitialCrop = function (cropSize) {\n if (_this.props.initialCroppedAreaPercentages) {\n var _a = getInitialCropFromCroppedAreaPercentages(_this.props.initialCroppedAreaPercentages, _this.mediaSize, _this.props.rotation, cropSize, _this.props.minZoom, _this.props.maxZoom),\n crop = _a.crop,\n zoom = _a.zoom;\n _this.props.onCropChange(crop);\n _this.props.onZoomChange && _this.props.onZoomChange(zoom);\n } else if (_this.props.initialCroppedAreaPixels) {\n var _b = getInitialCropFromCroppedAreaPixels(_this.props.initialCroppedAreaPixels, _this.mediaSize, _this.props.rotation, cropSize, _this.props.minZoom, _this.props.maxZoom),\n crop = _b.crop,\n zoom = _b.zoom;\n _this.props.onCropChange(crop);\n _this.props.onZoomChange && _this.props.onZoomChange(zoom);\n }\n };\n _this.computeSizes = function () {\n var _a, _b, _c, _d, _e, _f;\n var mediaRef = _this.imageRef.current || _this.videoRef.current;\n if (mediaRef && _this.containerRef) {\n _this.containerRect = _this.containerRef.getBoundingClientRect();\n _this.saveContainerPosition();\n var containerAspect = _this.containerRect.width / _this.containerRect.height;\n var naturalWidth = ((_a = _this.imageRef.current) === null || _a === void 0 ? void 0 : _a.naturalWidth) || ((_b = _this.videoRef.current) === null || _b === void 0 ? void 0 : _b.videoWidth) || 0;\n var naturalHeight = ((_c = _this.imageRef.current) === null || _c === void 0 ? void 0 : _c.naturalHeight) || ((_d = _this.videoRef.current) === null || _d === void 0 ? void 0 : _d.videoHeight) || 0;\n var isMediaScaledDown = mediaRef.offsetWidth < naturalWidth || mediaRef.offsetHeight < naturalHeight;\n var mediaAspect = naturalWidth / naturalHeight;\n // We do not rely on the offsetWidth/offsetHeight if the media is scaled down\n // as the values they report are rounded. That will result in precision losses\n // when calculating zoom. We use the fact that the media is positionned relative\n // to the container. That allows us to use the container's dimensions\n // and natural aspect ratio of the media to calculate accurate media size.\n // However, for this to work, the container should not be rotated\n var renderedMediaSize = void 0;\n if (isMediaScaledDown) {\n switch (_this.state.mediaObjectFit) {\n default:\n case 'contain':\n renderedMediaSize = containerAspect > mediaAspect ? {\n width: _this.containerRect.height * mediaAspect,\n height: _this.containerRect.height\n } : {\n width: _this.containerRect.width,\n height: _this.containerRect.width / mediaAspect\n };\n break;\n case 'horizontal-cover':\n renderedMediaSize = {\n width: _this.containerRect.width,\n height: _this.containerRect.width / mediaAspect\n };\n break;\n case 'vertical-cover':\n renderedMediaSize = {\n width: _this.containerRect.height * mediaAspect,\n height: _this.containerRect.height\n };\n break;\n }\n } else {\n renderedMediaSize = {\n width: mediaRef.offsetWidth,\n height: mediaRef.offsetHeight\n };\n }\n _this.mediaSize = __assign(__assign({}, renderedMediaSize), {\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight\n });\n // set media size in the parent\n if (_this.props.setMediaSize) {\n _this.props.setMediaSize(_this.mediaSize);\n }\n var cropSize = _this.props.cropSize ? _this.props.cropSize : getCropSize(_this.mediaSize.width, _this.mediaSize.height, _this.containerRect.width, _this.containerRect.height, _this.props.aspect, _this.props.rotation);\n if (((_e = _this.state.cropSize) === null || _e === void 0 ? void 0 : _e.height) !== cropSize.height || ((_f = _this.state.cropSize) === null || _f === void 0 ? void 0 : _f.width) !== cropSize.width) {\n _this.props.onCropSizeChange && _this.props.onCropSizeChange(cropSize);\n }\n _this.setState({\n cropSize: cropSize\n }, _this.recomputeCropPosition);\n // pass crop size to parent\n if (_this.props.setCropSize) {\n _this.props.setCropSize(cropSize);\n }\n return cropSize;\n }\n };\n _this.saveContainerPosition = function () {\n if (_this.containerRef) {\n var bounds = _this.containerRef.getBoundingClientRect();\n _this.containerPosition = {\n x: bounds.left,\n y: bounds.top\n };\n }\n };\n _this.onMouseDown = function (e) {\n if (!_this.currentDoc) return;\n e.preventDefault();\n _this.currentDoc.addEventListener('mousemove', _this.onMouseMove);\n _this.currentDoc.addEventListener('mouseup', _this.onDragStopped);\n _this.saveContainerPosition();\n _this.onDragStart(Cropper.getMousePoint(e));\n };\n _this.onMouseMove = function (e) {\n return _this.onDrag(Cropper.getMousePoint(e));\n };\n _this.onScroll = function (e) {\n if (!_this.currentDoc) return;\n e.preventDefault();\n _this.saveContainerPosition();\n };\n _this.onTouchStart = function (e) {\n if (!_this.currentDoc) return;\n _this.isTouching = true;\n if (_this.props.onTouchRequest && !_this.props.onTouchRequest(e)) {\n return;\n }\n _this.currentDoc.addEventListener('touchmove', _this.onTouchMove, {\n passive: false\n }); // iOS 11 now defaults to passive: true\n _this.currentDoc.addEventListener('touchend', _this.onDragStopped);\n _this.saveContainerPosition();\n if (e.touches.length === 2) {\n _this.onPinchStart(e);\n } else if (e.touches.length === 1) {\n _this.onDragStart(Cropper.getTouchPoint(e.touches[0]));\n }\n };\n _this.onTouchMove = function (e) {\n // Prevent whole page from scrolling on iOS.\n e.preventDefault();\n if (e.touches.length === 2) {\n _this.onPinchMove(e);\n } else if (e.touches.length === 1) {\n _this.onDrag(Cropper.getTouchPoint(e.touches[0]));\n }\n };\n _this.onGestureStart = function (e) {\n if (!_this.currentDoc) return;\n e.preventDefault();\n _this.currentDoc.addEventListener('gesturechange', _this.onGestureChange);\n _this.currentDoc.addEventListener('gestureend', _this.onGestureEnd);\n _this.gestureZoomStart = _this.props.zoom;\n _this.gestureRotationStart = _this.props.rotation;\n };\n _this.onGestureChange = function (e) {\n e.preventDefault();\n if (_this.isTouching) {\n // this is to avoid conflict between gesture and touch events\n return;\n }\n var point = Cropper.getMousePoint(e);\n var newZoom = _this.gestureZoomStart - 1 + e.scale;\n _this.setNewZoom(newZoom, point, {\n shouldUpdatePosition: true\n });\n if (_this.props.onRotationChange) {\n var newRotation = _this.gestureRotationStart + e.rotation;\n _this.props.onRotationChange(newRotation);\n }\n };\n _this.onGestureEnd = function (e) {\n _this.cleanEvents();\n };\n _this.onDragStart = function (_a) {\n var _b, _c;\n var x = _a.x,\n y = _a.y;\n _this.dragStartPosition = {\n x: x,\n y: y\n };\n _this.dragStartCrop = __assign({}, _this.props.crop);\n (_c = (_b = _this.props).onInteractionStart) === null || _c === void 0 ? void 0 : _c.call(_b);\n };\n _this.onDrag = function (_a) {\n var x = _a.x,\n y = _a.y;\n if (!_this.currentWindow) return;\n if (_this.rafDragTimeout) _this.currentWindow.cancelAnimationFrame(_this.rafDragTimeout);\n _this.rafDragTimeout = _this.currentWindow.requestAnimationFrame(function () {\n if (!_this.state.cropSize) return;\n if (x === undefined || y === undefined) return;\n var offsetX = x - _this.dragStartPosition.x;\n var offsetY = y - _this.dragStartPosition.y;\n var requestedPosition = {\n x: _this.dragStartCrop.x + offsetX,\n y: _this.dragStartCrop.y + offsetY\n };\n var newPosition = _this.props.restrictPosition ? restrictPosition(requestedPosition, _this.mediaSize, _this.state.cropSize, _this.props.zoom, _this.props.rotation) : requestedPosition;\n _this.props.onCropChange(newPosition);\n });\n };\n _this.onDragStopped = function () {\n var _a, _b;\n _this.isTouching = false;\n _this.cleanEvents();\n _this.emitCropData();\n (_b = (_a = _this.props).onInteractionEnd) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n _this.onWheel = function (e) {\n if (!_this.currentWindow) return;\n if (_this.props.onWheelRequest && !_this.props.onWheelRequest(e)) {\n return;\n }\n e.preventDefault();\n var point = Cropper.getMousePoint(e);\n var pixelY = normalizeWheel(e).pixelY;\n var newZoom = _this.props.zoom - pixelY * _this.props.zoomSpeed / 200;\n _this.setNewZoom(newZoom, point, {\n shouldUpdatePosition: true\n });\n if (!_this.state.hasWheelJustStarted) {\n _this.setState({\n hasWheelJustStarted: true\n }, function () {\n var _a, _b;\n return (_b = (_a = _this.props).onInteractionStart) === null || _b === void 0 ? void 0 : _b.call(_a);\n });\n }\n if (_this.wheelTimer) {\n clearTimeout(_this.wheelTimer);\n }\n _this.wheelTimer = _this.currentWindow.setTimeout(function () {\n return _this.setState({\n hasWheelJustStarted: false\n }, function () {\n var _a, _b;\n return (_b = (_a = _this.props).onInteractionEnd) === null || _b === void 0 ? void 0 : _b.call(_a);\n });\n }, 250);\n };\n _this.getPointOnContainer = function (_a, containerTopLeft) {\n var x = _a.x,\n y = _a.y;\n if (!_this.containerRect) {\n throw new Error('The Cropper is not mounted');\n }\n return {\n x: _this.containerRect.width / 2 - (x - containerTopLeft.x),\n y: _this.containerRect.height / 2 - (y - containerTopLeft.y)\n };\n };\n _this.getPointOnMedia = function (_a) {\n var x = _a.x,\n y = _a.y;\n var _b = _this.props,\n crop = _b.crop,\n zoom = _b.zoom;\n return {\n x: (x + crop.x) / zoom,\n y: (y + crop.y) / zoom\n };\n };\n _this.setNewZoom = function (zoom, point, _a) {\n var _b = _a === void 0 ? {} : _a,\n _c = _b.shouldUpdatePosition,\n shouldUpdatePosition = _c === void 0 ? true : _c;\n if (!_this.state.cropSize || !_this.props.onZoomChange) return;\n var newZoom = clamp(zoom, _this.props.minZoom, _this.props.maxZoom);\n if (shouldUpdatePosition) {\n var zoomPoint = _this.getPointOnContainer(point, _this.containerPosition);\n var zoomTarget = _this.getPointOnMedia(zoomPoint);\n var requestedPosition = {\n x: zoomTarget.x * newZoom - zoomPoint.x,\n y: zoomTarget.y * newZoom - zoomPoint.y\n };\n var newPosition = _this.props.restrictPosition ? restrictPosition(requestedPosition, _this.mediaSize, _this.state.cropSize, newZoom, _this.props.rotation) : requestedPosition;\n _this.props.onCropChange(newPosition);\n }\n _this.props.onZoomChange(newZoom);\n };\n _this.getCropData = function () {\n if (!_this.state.cropSize) {\n return null;\n }\n // this is to ensure the crop is correctly restricted after a zoom back (https://github.com/ValentinH/react-easy-crop/issues/6)\n var restrictedPosition = _this.props.restrictPosition ? restrictPosition(_this.props.crop, _this.mediaSize, _this.state.cropSize, _this.props.zoom, _this.props.rotation) : _this.props.crop;\n return computeCroppedArea(restrictedPosition, _this.mediaSize, _this.state.cropSize, _this.getAspect(), _this.props.zoom, _this.props.rotation, _this.props.restrictPosition);\n };\n _this.emitCropData = function () {\n var cropData = _this.getCropData();\n if (!cropData) return;\n var croppedAreaPercentages = cropData.croppedAreaPercentages,\n croppedAreaPixels = cropData.croppedAreaPixels;\n if (_this.props.onCropComplete) {\n _this.props.onCropComplete(croppedAreaPercentages, croppedAreaPixels);\n }\n if (_this.props.onCropAreaChange) {\n _this.props.onCropAreaChange(croppedAreaPercentages, croppedAreaPixels);\n }\n };\n _this.emitCropAreaChange = function () {\n var cropData = _this.getCropData();\n if (!cropData) return;\n var croppedAreaPercentages = cropData.croppedAreaPercentages,\n croppedAreaPixels = cropData.croppedAreaPixels;\n if (_this.props.onCropAreaChange) {\n _this.props.onCropAreaChange(croppedAreaPercentages, croppedAreaPixels);\n }\n };\n _this.recomputeCropPosition = function () {\n var _a, _b;\n if (!_this.state.cropSize) return;\n var adjustedCrop = _this.props.crop;\n // Only scale if we're initialized and this is a legitimate resize\n if (_this.isInitialized && ((_a = _this.previousCropSize) === null || _a === void 0 ? void 0 : _a.width) && ((_b = _this.previousCropSize) === null || _b === void 0 ? void 0 : _b.height)) {\n var sizeChanged = Math.abs(_this.previousCropSize.width - _this.state.cropSize.width) > 1e-6 || Math.abs(_this.previousCropSize.height - _this.state.cropSize.height) > 1e-6;\n if (sizeChanged) {\n var scaleX = _this.state.cropSize.width / _this.previousCropSize.width;\n var scaleY = _this.state.cropSize.height / _this.previousCropSize.height;\n adjustedCrop = {\n x: _this.props.crop.x * scaleX,\n y: _this.props.crop.y * scaleY\n };\n }\n }\n var newPosition = _this.props.restrictPosition ? restrictPosition(adjustedCrop, _this.mediaSize, _this.state.cropSize, _this.props.zoom, _this.props.rotation) : adjustedCrop;\n _this.previousCropSize = _this.state.cropSize;\n _this.props.onCropChange(newPosition);\n _this.emitCropData();\n };\n _this.onKeyDown = function (event) {\n var _a, _b;\n var _c = _this.props,\n crop = _c.crop,\n onCropChange = _c.onCropChange,\n keyboardStep = _c.keyboardStep,\n zoom = _c.zoom,\n rotation = _c.rotation;\n var step = keyboardStep;\n if (!_this.state.cropSize) return;\n // if the shift key is pressed, reduce the step to allow finer control\n if (event.shiftKey) {\n step *= 0.2;\n }\n var newCrop = __assign({}, crop);\n switch (event.key) {\n case 'ArrowUp':\n newCrop.y -= step;\n event.preventDefault();\n break;\n case 'ArrowDown':\n newCrop.y += step;\n event.preventDefault();\n break;\n case 'ArrowLeft':\n newCrop.x -= step;\n event.preventDefault();\n break;\n case 'ArrowRight':\n newCrop.x += step;\n event.preventDefault();\n break;\n default:\n return;\n }\n if (_this.props.restrictPosition) {\n newCrop = restrictPosition(newCrop, _this.mediaSize, _this.state.cropSize, zoom, rotation);\n }\n if (!event.repeat) {\n (_b = (_a = _this.props).onInteractionStart) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n onCropChange(newCrop);\n };\n _this.onKeyUp = function (event) {\n var _a, _b;\n switch (event.key) {\n case 'ArrowUp':\n case 'ArrowDown':\n case 'ArrowLeft':\n case 'ArrowRight':\n event.preventDefault();\n break;\n default:\n return;\n }\n _this.emitCropData();\n (_b = (_a = _this.props).onInteractionEnd) === null || _b === void 0 ? void 0 : _b.call(_a);\n };\n return _this;\n }\n Cropper.prototype.componentDidMount = function () {\n if (!this.currentDoc || !this.currentWindow) return;\n if (this.containerRef) {\n if (this.containerRef.ownerDocument) {\n this.currentDoc = this.containerRef.ownerDocument;\n }\n if (this.currentDoc.defaultView) {\n this.currentWindow = this.currentDoc.defaultView;\n }\n this.initResizeObserver();\n // only add window resize listener if ResizeObserver is not supported. Otherwise, it would be redundant\n if (typeof window.ResizeObserver === 'undefined') {\n this.currentWindow.addEventListener('resize', this.computeSizes);\n }\n this.props.zoomWithScroll && this.containerRef.addEventListener('wheel', this.onWheel, {\n passive: false\n });\n this.containerRef.addEventListener('gesturestart', this.onGestureStart);\n }\n this.currentDoc.addEventListener('scroll', this.onScroll);\n if (!this.props.disableAutomaticStylesInjection) {\n this.styleRef = this.currentDoc.createElement('style');\n this.styleRef.setAttribute('type', 'text/css');\n if (this.props.nonce) {\n this.styleRef.setAttribute('nonce', this.props.nonce);\n }\n this.styleRef.innerHTML = css_248z;\n this.currentDoc.head.appendChild(this.styleRef);\n }\n // when rendered via SSR, the image can already be loaded and its onLoad callback will never be called\n if (this.imageRef.current && this.imageRef.current.complete) {\n this.onMediaLoad();\n }\n // set image and video refs in the parent if the callbacks exist\n if (this.props.setImageRef) {\n this.props.setImageRef(this.imageRef);\n }\n if (this.props.setVideoRef) {\n this.props.setVideoRef(this.videoRef);\n }\n if (this.props.setCropperRef) {\n this.props.setCropperRef(this.cropperRef);\n }\n };\n Cropper.prototype.componentWillUnmount = function () {\n var _a, _b;\n if (!this.currentDoc || !this.currentWindow) return;\n if (typeof window.ResizeObserver === 'undefined') {\n this.currentWindow.removeEventListener('resize', this.computeSizes);\n }\n (_a = this.resizeObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\n if (this.containerRef) {\n this.containerRef.removeEventListener('gesturestart', this.preventZoomSafari);\n }\n if (this.styleRef) {\n (_b = this.styleRef.parentNode) === null || _b === void 0 ? void 0 : _b.removeChild(this.styleRef);\n }\n this.cleanEvents();\n this.props.zoomWithScroll && this.clearScrollEvent();\n };\n Cropper.prototype.componentDidUpdate = function (prevProps) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n if (prevProps.rotation !== this.props.rotation) {\n this.computeSizes();\n this.recomputeCropPosition();\n } else if (prevProps.aspect !== this.props.aspect) {\n this.computeSizes();\n } else if (prevProps.objectFit !== this.props.objectFit) {\n this.computeSizes();\n } else if (prevProps.zoom !== this.props.zoom) {\n this.recomputeCropPosition();\n } else if (((_a = prevProps.cropSize) === null || _a === void 0 ? void 0 : _a.height) !== ((_b = this.props.cropSize) === null || _b === void 0 ? void 0 : _b.height) || ((_c = prevProps.cropSize) === null || _c === void 0 ? void 0 : _c.width) !== ((_d = this.props.cropSize) === null || _d === void 0 ? void 0 : _d.width)) {\n this.computeSizes();\n } else if (((_e = prevProps.crop) === null || _e === void 0 ? void 0 : _e.x) !== ((_f = this.props.crop) === null || _f === void 0 ? void 0 : _f.x) || ((_g = prevProps.crop) === null || _g === void 0 ? void 0 : _g.y) !== ((_h = this.props.crop) === null || _h === void 0 ? void 0 : _h.y)) {\n this.emitCropAreaChange();\n }\n if (prevProps.zoomWithScroll !== this.props.zoomWithScroll && this.containerRef) {\n this.props.zoomWithScroll ? this.containerRef.addEventListener('wheel', this.onWheel, {\n passive: false\n }) : this.clearScrollEvent();\n }\n if (prevProps.video !== this.props.video) {\n (_j = this.videoRef.current) === null || _j === void 0 ? void 0 : _j.load();\n }\n var objectFit = this.getObjectFit();\n if (objectFit !== this.state.mediaObjectFit) {\n this.setState({\n mediaObjectFit: objectFit\n }, this.computeSizes);\n }\n };\n Cropper.prototype.getAspect = function () {\n var _a = this.props,\n cropSize = _a.cropSize,\n aspect = _a.aspect;\n if (cropSize) {\n return cropSize.width / cropSize.height;\n }\n return aspect;\n };\n Cropper.prototype.getObjectFit = function () {\n var _a, _b, _c, _d;\n if (this.props.objectFit === 'cover') {\n var mediaRef = this.imageRef.current || this.videoRef.current;\n if (mediaRef && this.containerRef) {\n this.containerRect = this.containerRef.getBoundingClientRect();\n var containerAspect = this.containerRect.width / this.containerRect.height;\n var naturalWidth = ((_a = this.imageRef.current) === null || _a === void 0 ? void 0 : _a.naturalWidth) || ((_b = this.videoRef.current) === null || _b === void 0 ? void 0 : _b.videoWidth) || 0;\n var naturalHeight = ((_c = this.imageRef.current) === null || _c === void 0 ? void 0 : _c.naturalHeight) || ((_d = this.videoRef.current) === null || _d === void 0 ? void 0 : _d.videoHeight) || 0;\n var mediaAspect = naturalWidth / naturalHeight;\n return mediaAspect < containerAspect ? 'horizontal-cover' : 'vertical-cover';\n }\n return 'horizontal-cover';\n }\n return this.props.objectFit;\n };\n Cropper.prototype.onPinchStart = function (e) {\n var pointA = Cropper.getTouchPoint(e.touches[0]);\n var pointB = Cropper.getTouchPoint(e.touches[1]);\n this.lastPinchDistance = getDistanceBetweenPoints(pointA, pointB);\n this.lastPinchRotation = getRotationBetweenPoints(pointA, pointB);\n this.onDragStart(getCenter(pointA, pointB));\n };\n Cropper.prototype.onPinchMove = function (e) {\n var _this = this;\n if (!this.currentDoc || !this.currentWindow) return;\n var pointA = Cropper.getTouchPoint(e.touches[0]);\n var pointB = Cropper.getTouchPoint(e.touches[1]);\n var center = getCenter(pointA, pointB);\n this.onDrag(center);\n if (this.rafPinchTimeout) this.currentWindow.cancelAnimationFrame(this.rafPinchTimeout);\n this.rafPinchTimeout = this.currentWindow.requestAnimationFrame(function () {\n var distance = getDistanceBetweenPoints(pointA, pointB);\n var newZoom = _this.props.zoom * (distance / _this.lastPinchDistance);\n _this.setNewZoom(newZoom, center, {\n shouldUpdatePosition: false\n });\n _this.lastPinchDistance = distance;\n var rotation = getRotationBetweenPoints(pointA, pointB);\n var newRotation = _this.props.rotation + (rotation - _this.lastPinchRotation);\n _this.props.onRotationChange && _this.props.onRotationChange(newRotation);\n _this.lastPinchRotation = rotation;\n });\n };\n Cropper.prototype.render = function () {\n var _this = this;\n var _a;\n var _b = this.props,\n image = _b.image,\n video = _b.video,\n mediaProps = _b.mediaProps,\n cropperProps = _b.cropperProps,\n transform = _b.transform,\n _c = _b.crop,\n x = _c.x,\n y = _c.y,\n rotation = _b.rotation,\n zoom = _b.zoom,\n cropShape = _b.cropShape,\n showGrid = _b.showGrid,\n roundCropAreaPixels = _b.roundCropAreaPixels,\n _d = _b.style,\n containerStyle = _d.containerStyle,\n cropAreaStyle = _d.cropAreaStyle,\n mediaStyle = _d.mediaStyle,\n _e = _b.classes,\n containerClassName = _e.containerClassName,\n cropAreaClassName = _e.cropAreaClassName,\n mediaClassName = _e.mediaClassName;\n var objectFit = (_a = this.state.mediaObjectFit) !== null && _a !== void 0 ? _a : this.getObjectFit();\n return React.createElement(\"div\", {\n onMouseDown: this.onMouseDown,\n onTouchStart: this.onTouchStart,\n ref: function ref(el) {\n return _this.containerRef = el;\n },\n \"data-testid\": \"container\",\n style: containerStyle,\n className: classNames('reactEasyCrop_Container', containerClassName)\n }, image ? React.createElement(\"img\", __assign({\n alt: \"\",\n className: classNames('reactEasyCrop_Image', objectFit === 'contain' && 'reactEasyCrop_Contain', objectFit === 'horizontal-cover' && 'reactEasyCrop_Cover_Horizontal', objectFit === 'vertical-cover' && 'reactEasyCrop_Cover_Vertical', mediaClassName)\n }, mediaProps, {\n src: image,\n ref: this.imageRef,\n style: __assign(__assign({}, mediaStyle), {\n transform: transform || \"translate(\".concat(x, \"px, \").concat(y, \"px) rotate(\").concat(rotation, \"deg) scale(\").concat(zoom, \")\")\n }),\n onLoad: this.onMediaLoad\n })) : video && React.createElement(\"video\", __assign({\n autoPlay: true,\n playsInline: true,\n loop: true,\n muted: true,\n className: classNames('reactEasyCrop_Video', objectFit === 'contain' && 'reactEasyCrop_Contain', objectFit === 'horizontal-cover' && 'reactEasyCrop_Cover_Horizontal', objectFit === 'vertical-cover' && 'reactEasyCrop_Cover_Vertical', mediaClassName)\n }, mediaProps, {\n ref: this.videoRef,\n onLoadedMetadata: this.onMediaLoad,\n style: __assign(__assign({}, mediaStyle), {\n transform: transform || \"translate(\".concat(x, \"px, \").concat(y, \"px) rotate(\").concat(rotation, \"deg) scale(\").concat(zoom, \")\")\n }),\n controls: false\n }), (Array.isArray(video) ? video : [{\n src: video\n }]).map(function (item) {\n return React.createElement(\"source\", __assign({\n key: item.src\n }, item));\n })), this.state.cropSize && React.createElement(\"div\", __assign({\n ref: this.cropperRef,\n style: __assign(__assign({}, cropAreaStyle), {\n width: roundCropAreaPixels ? Math.round(this.state.cropSize.width) : this.state.cropSize.width,\n height: roundCropAreaPixels ? Math.round(this.state.cropSize.height) : this.state.cropSize.height\n }),\n tabIndex: 0,\n onKeyDown: this.onKeyDown,\n onKeyUp: this.onKeyUp,\n \"data-testid\": \"cropper\",\n className: classNames('reactEasyCrop_CropArea', cropShape === 'round' && 'reactEasyCrop_CropAreaRound', showGrid && 'reactEasyCrop_CropAreaGrid', cropAreaClassName)\n }, cropperProps)));\n };\n Cropper.defaultProps = {\n zoom: 1,\n rotation: 0,\n aspect: 4 / 3,\n maxZoom: MAX_ZOOM,\n minZoom: MIN_ZOOM,\n cropShape: 'rect',\n objectFit: 'contain',\n showGrid: true,\n style: {},\n classes: {},\n mediaProps: {},\n cropperProps: {},\n zoomSpeed: 1,\n restrictPosition: true,\n zoomWithScroll: true,\n keyboardStep: KEYBOARD_STEP\n };\n Cropper.getMousePoint = function (e) {\n return {\n x: Number(e.clientX),\n y: Number(e.clientY)\n };\n };\n Cropper.getTouchPoint = function (touch) {\n return {\n x: Number(touch.clientX),\n y: Number(touch.clientY)\n };\n };\n return Cropper;\n}(React.Component);\n\nexport { Cropper as default, getInitialCropFromCroppedAreaPercentages, getInitialCropFromCroppedAreaPixels };\n//# sourceMappingURL=index.module.mjs.map\n","import { createElement, useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react'\nimport type { ComponentType, ReactElement } from 'react'\nimport CropperComponent from 'react-easy-crop'\nimport type { Area, CropperProps } from 'react-easy-crop'\nimport { resolveAssistantAvatarAsset } from '../../shared/assistant-avatar.js'\nimport type { AssistantAvatarModel } from '../../shared/assistant-avatar.js'\nimport type { CodingNsClientServices } from '../features/types.js'\nimport type { CodingNsTranslator } from '../locale.js'\nimport { dshSettingsButtonStyle, dshSettingsPrimaryButtonStyle, dshSettingsHelpStyle, dshThemeColor } from '../theme.js'\nimport { assistantSettingTextStyle } from '../assistant-settings-styles.js'\nimport { AssistantAvatarPortrait } from './portrait.js'\nimport { getAssistantAvatarRegistry } from './registry.js'\nimport type { AssistantAvatarRenderer } from './registry.js'\nimport { assistantAvatarPortraitKey, getAssistantAvatarPortraitService } from './portrait-service.js'\nimport type { AssistantAvatarPreview } from './preview-store.js'\nimport { cropAssistantAvatarPortrait, initialAssistantAvatarPortraitArea } from './portrait-capture.js'\n\n// 上游 ESM 入口默认导出组件,但其 CommonJS 声明被 NodeNext 判为命名空间。\nconst Cropper = CropperComponent as unknown as ComponentType<Partial<CropperProps> & Pick<CropperProps, 'crop' | 'onCropChange'>>\n\ninterface EditorProps {\n readonly services: CodingNsClientServices; readonly model: AssistantAvatarModel\n readonly disabled: boolean; readonly t: CodingNsTranslator\n}\n/** 与名称同一行的头像设置;资源或渲染器变化时销毁未确认的裁剪会话。 */\nexport function AssistantAvatarPortraitEditor(props: EditorProps): ReactElement {\n const registry = getAssistantAvatarRegistry(props.services), id = resolveAssistantAvatarAsset(props.model, 'dialog').renderer\n const read = useCallback(() => registry.get(id), [registry, id])\n const renderer = useSyncExternalStore(registry.subscribe, read, read)\n return createElement(PortraitEditorContent, { ...props, renderer, key: assistantAvatarPortraitKey(props.model, renderer) })\n}\nfunction PortraitEditorContent({ services, model, renderer, disabled, t }: EditorProps & { readonly renderer: AssistantAvatarRenderer | undefined }): ReactElement {\n const service = getAssistantAvatarPortraitService(services)\n const [open, setOpen] = useState(false), [pending, setPending] = useState(false), [error, setError] = useState('')\n const [source, setSource] = useState<{ preview: AssistantAvatarPreview; url: string; initial?: Area }>()\n const [area, setArea] = useState<Area>(), [crop, setCrop] = useState({ x: 0, y: 0 }), [zoom, setZoom] = useState(1)\n const [percentages, setPercentages] = useState<Area>()\n const session = useRef<{ controller: AbortController; url?: string }>()\n const release = useCallback((): void => {\n session.current?.controller.abort()\n if (session.current?.url !== undefined) URL.revokeObjectURL(session.current.url)\n session.current = undefined\n }, [])\n const close = useCallback((): void => { release(); setOpen(false); setSource(undefined); setArea(undefined); setPercentages(undefined); setPending(false); setError('') }, [release])\n useEffect(() => release, [release])\n useEffect(() => { if (disabled) close() }, [disabled, close])\n const edit = async (): Promise<void> => {\n if (disabled || pending) return\n close(); setOpen(true); setPending(true); setCrop({ x: 0, y: 0 }); setZoom(1)\n const active: NonNullable<typeof session.current> = { controller: new AbortController() }; session.current = active\n try {\n const preview = await service.getSource(model, renderer, active.controller.signal)\n if (preview === undefined) throw new Error('avatar_portrait_source_unavailable')\n const initial = preview.cropAreaPercentages ?? await initialAssistantAvatarPortraitArea(preview, active.controller.signal)\n if (active.controller.signal.aborted || session.current !== active) return\n active.url = URL.createObjectURL(preview.blob)\n setSource({ preview, url: active.url, ...(initial === undefined ? {} : { initial }) })\n } catch { if (!active.controller.signal.aborted) setError(t('avatar.portraitSourceFailed')) }\n finally { if (session.current === active) setPending(false) }\n }\n const save = async (): Promise<void> => {\n const active = session.current\n if (disabled || pending || source === undefined || area === undefined || active === undefined) return\n setPending(true); setError('')\n try {\n const preview = await cropAssistantAvatarPortrait(source.preview, area, active.controller.signal)\n if (preview === undefined) throw new Error('avatar_portrait_crop_failed')\n await service.setPortrait(model, renderer, { ...preview, ...(percentages === undefined ? {} : { cropAreaPercentages: percentages }) }, active.controller.signal)\n if (session.current === active) close()\n } catch { if (!active.controller.signal.aborted) setError(t('avatar.portraitSaveFailed')) }\n finally { if (session.current === active) setPending(false) }\n }\n const changedArea = useCallback((percent: Area, pixels: Area) => { setArea(pixels); setPercentages(percent) }, [])\n const locked = disabled || pending && source !== undefined\n // 让头像字段占右列,说明和编辑面板参与父级网格并使用整行宽度。\n return createElement('div', { 'data-codingns-portrait-settings': model.id, style: { ...assistantSettingTextStyle, display: 'contents' } },\n createElement('div', { 'data-codingns-portrait-controls': true, style: { display: 'grid', gap: 6, minWidth: 0 } },\n createElement('span', null, t('avatar.portraitTitle')),\n createElement('div', { style: { display: 'flex', alignItems: 'center', flexWrap: 'wrap', gap: 12 } },\n createElement(AssistantAvatarPortrait, { services, model, size: 44 }),\n createElement('button', { type: 'button', disabled: disabled || pending, 'aria-expanded': open, 'data-codingns-portrait-edit': true,\n style: dshSettingsButtonStyle, onClick: () => { void edit() } }, t('avatar.portraitEdit')))),\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0, gridColumn: '1 / -1' } }, t(services.configurationDraft ? 'avatar.portraitDraftHint' : 'avatar.portraitLocalHint')),\n !open ? null : createElement('div', { 'data-codingns-portrait-editor': true, 'aria-busy': pending, style: { display: 'grid', gap: 12, padding: 12,\n gridColumn: '1 / -1', border: `1px solid ${dshThemeColor.border}`, borderRadius: 10, minWidth: 0 } },\n source === undefined ? null : createElement('div', { 'data-codingns-portrait-cropper': true, style: { position: 'relative', height: 270, width: '100%', minWidth: 0,\n overflow: 'hidden', borderRadius: 8, background: dshThemeColor.surfaceSubtle, pointerEvents: locked ? 'none' : 'auto' } },\n createElement(Cropper, { image: source.url, crop, zoom, aspect: 1, cropShape: 'round', showGrid: false, minZoom: 1, maxZoom: 8,\n zoomWithScroll: false, onCropChange: (next) => { if (!locked) setCrop(next) }, onZoomChange: (next) => { if (!locked) setZoom(next) }, onCropAreaChange: changedArea,\n ...(source.initial === undefined ? {} : { initialCroppedAreaPercentages: source.initial }),\n cropperProps: { 'aria-label': t('avatar.portraitCropArea'), 'aria-disabled': locked, tabIndex: locked ? -1 : 0 } })),\n source === undefined ? null : createElement('label', { style: { display: 'grid', gap: 6 } }, t('avatar.portraitZoom'),\n createElement('input', { type: 'range', min: 1, max: 8, step: .01, value: zoom, disabled: locked,\n 'data-codingns-portrait-zoom': true, onChange: (event: { currentTarget: { value: string } }) => setZoom(Number(event.currentTarget.value)), style: { width: '100%', margin: 0 } })),\n source === undefined || area === undefined ? null : createElement('div', { style: { display: 'flex', alignItems: 'center', gap: 10 } },\n createElement('span', { 'data-codingns-portrait-crop-preview': true, 'aria-hidden': true, style: { position: 'relative', overflow: 'hidden', borderRadius: '50%', width: 56, height: 56, flex: '0 0 56px' } },\n createElement('img', { src: source.url, alt: '', draggable: false, style: { position: 'absolute', maxWidth: 'none',\n width: source.preview.width / area.width * 56, height: source.preview.height / area.height * 56,\n left: -area.x / area.width * 56, top: -area.y / area.height * 56 } })),\n createElement('span', { style: dshSettingsHelpStyle }, t('avatar.portraitDragHint'))),\n !pending ? null : createElement('span', { role: 'status', style: dshSettingsHelpStyle }, t(source === undefined ? 'avatar.portraitLoading' : 'avatar.portraitSaving')),\n error === '' ? null : createElement('span', { role: 'alert', style: { ...dshSettingsHelpStyle, color: dshThemeColor.error } }, error),\n createElement('div', { style: { display: 'flex', flexWrap: 'wrap', justifyContent: 'flex-end', gap: 8 } },\n createElement('button', { type: 'button', disabled: locked, style: dshSettingsButtonStyle, onClick: close }, t('avatar.portraitCancel')),\n createElement('button', { type: 'button', disabled: disabled || pending || area === undefined, style: dshSettingsPrimaryButtonStyle,\n 'data-codingns-portrait-save': true, onClick: () => { void save() } }, t(services.configurationDraft ? 'avatar.portraitConfirm' : 'avatar.portraitSave')))))\n}\n","import { createElement, useEffect, useId, useState } from 'react'\nimport type { ReactElement } from 'react'\nimport { DshMenu, resolveChevronDownIcon } from '../../dsh-capabilities/client/primitives-adapter.js'\nimport { builtinAssistantAvatarLabelKey, listAssistantAvatars } from '../../shared/assistant-avatar.js'\nimport type { AssistantAppearanceSettings } from '../../shared/assistant-avatar.js'\nimport type { AssistantAvatarCatalogEntry } from '../../shared/assistant-avatar-catalog.js'\nimport { getAssistantAvatarPreset } from '../../shared/assistant-avatar-presets.js'\nimport type { CodingNsTranslator } from '../locale.js'\nimport { dshSettingsFieldStyle } from '../theme.js'\nimport { assistantSettingFieldStyle } from '../assistant-settings-styles.js'\nimport { uiFontSize } from '../font-scale.js'\n\nexport interface AssistantAvatarChoice {\n readonly id: string\n readonly label: string\n /** 来源单独保存,名称不再拼接标记,避免用户命名影响标签显示。 */\n readonly thirdParty: boolean\n readonly disabled?: boolean\n /** 仅未登记条目携带目录信息,选择后预览;已登记角色直接切换。 */\n readonly catalog?: AssistantAvatarCatalogEntry\n}\n\n/** 合并展示选项,沿用安装后的模型 ID 去重,不把目录元数据写进设置清单。 */\nexport function assistantAvatarChoices(appearance: AssistantAppearanceSettings, entries: readonly AssistantAvatarCatalogEntry[], t: CodingNsTranslator, includeLegacy = true): readonly AssistantAvatarChoice[] {\n const choices = new Map<string, AssistantAvatarChoice>()\n for (const model of listAssistantAvatars(appearance, includeLegacy)) {\n const builtinLabel = builtinAssistantAvatarLabelKey(model.id)\n const labelKey = builtinLabel ?? (appearance.models.some((registered) => registered.id === model.id) ? undefined : getAssistantAvatarPreset(model.id)?.labelKey)\n const name = labelKey === undefined ? model.name : t(labelKey)\n choices.set(model.id, { id: model.id, label: name, thirdParty: builtinLabel === undefined })\n }\n for (const entry of entries) {\n const id = `catalog-${entry.id}`\n if (!choices.has(id)) choices.set(id, { id, label: entry.name, thirdParty: true, catalog: entry })\n }\n return [...choices.values()]\n}\n\ninterface AssistantAvatarPickerProps {\n readonly choices: readonly AssistantAvatarChoice[]; readonly value: string; readonly disabled: boolean\n readonly t: CodingNsTranslator; readonly onChoose: (choice: AssistantAvatarChoice) => void\n readonly label?: string\n}\n\n/** 内置形象只有名称,第三方形象在名称旁显示独立彩色标签。 */\nexport function AssistantAvatarChoiceLabel({ choice, t }: { readonly choice: AssistantAvatarChoice; readonly t: CodingNsTranslator }): ReactElement {\n return createElement('span', { style: { display: 'flex', alignItems: 'center', gap: 8, minWidth: 0 } },\n createElement('span', { style: { overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' } }, choice.label),\n !choice.thirdParty ? null : createElement('span', { 'data-codingns-avatar-third-party-badge': true,\n // 固定高对比蓝底白字,明暗主题中均可读;标签不随长名称收缩。\n style: { flexShrink: 0, padding: '1px 6px', borderRadius: 4, background: '#2563eb', color: '#fff', fontSize: uiFontSize(11), fontWeight: 500, lineHeight: '18px', whiteSpace: 'nowrap' } }, t('avatar.thirdPartyBadge')))\n}\n\n/** 一个选择入口同时服务内置、已安装和待安装形象。 */\nexport function AssistantAvatarPicker(props: AssistantAvatarPickerProps): ReactElement {\n const [open, setOpen] = useState(false)\n const id = useId()\n useEffect(() => { if (props.disabled) setOpen(false) }, [props.disabled])\n return createElement(AssistantAvatarPickerView, { ...props, id, open, onOpenChange: setOpen })\n}\n\n/** 展开状态与展示分离;菜单行为由 DSH 原语负责,业务只处理有效选择。 */\nexport function AssistantAvatarPickerView({ choices, value, disabled, t, onChoose, label = t('avatar.selected'), id, open, onOpenChange }: AssistantAvatarPickerProps & {\n readonly id: string; readonly open: boolean; readonly onOpenChange: (open: boolean) => void\n}): ReactElement {\n const selected = choices.find((choice) => choice.id === value)\n const expanded = open && !disabled\n const name = selected === undefined ? value : selected.thirdParty ? t('avatar.externalName', { name: selected.label }) : selected.label\n const anchor = createElement('button', { id, type: 'button', disabled, 'aria-label': `${label}: ${name}`, 'aria-haspopup': 'menu', 'aria-expanded': expanded,\n 'data-codingns-avatar-list': true, 'data-codingns-avatar-selected': value,\n style: { ...dshSettingsFieldStyle, display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 8, textAlign: 'left', cursor: disabled ? 'default' : 'pointer' },\n onClick: () => { if (!disabled) onOpenChange(!expanded) },\n onKeyDown: (event: { key: string; preventDefault: () => void }) => {\n if (disabled || expanded || (event.key !== 'ArrowDown' && event.key !== 'ArrowUp')) return\n event.preventDefault(); onOpenChange(true)\n } },\n selected === undefined ? name : createElement(AssistantAvatarChoiceLabel, { choice: selected, t }),\n createElement('span', { 'aria-hidden': true, style: { display: 'flex', flexShrink: 0 } }, createElement(resolveChevronDownIcon(), { size: 14 })))\n return createElement('label', { htmlFor: id, style: assistantSettingFieldStyle }, createElement('span', null, label),\n // 弹层高于助理对话框,窄屏限制在视口内;原语负责菜单滚动与边缘定位。\n createElement('style', null, '.codingns4dsh-avatar-picker{width:100%;min-width:0}.codingns4dsh-avatar-menu{z-index:10002;width:min(360px,calc(100vw - 24px));max-width:calc(100vw - 24px)}'),\n createElement(DshMenu, { open: expanded, anchor, portal: true, autoFocus: true, className: 'codingns4dsh-avatar-picker', listClassName: 'codingns4dsh-avatar-menu',\n selectedId: value, items: choices.map((choice) => ({ id: choice.id, label: createElement(AssistantAvatarChoiceLabel, { choice, t }), disabled: disabled || choice.disabled === true })),\n onClose: () => onOpenChange(false), onSelect: (choiceId: string) => {\n const choice = choices.find((item) => item.id === choiceId)\n if (disabled || choice === undefined || choice.disabled) return\n onOpenChange(false); onChoose(choice)\n } }))\n}\n","import { createElement, useEffect, useId, useRef, useState } from 'react'\nimport type { ReactElement } from 'react'\nimport { ASSISTANT_AVATAR_ENGINE_CONSENT_VERSION, hasAssistantAvatarEngineConsent } from '../../shared/assistant-avatar-engine.js'\nimport type { AssistantAvatarEngineStatus } from '../../shared/assistant-avatar-engine.js'\nimport type { AssistantAppearanceSettings } from '../../shared/assistant-avatar.js'\nimport type { CodingNsClientServices, SettingsNotice } from '../features/types.js'\nimport { useCodingNsTranslator, type CodingNsTranslator } from '../locale.js'\nimport { dshSettingsButtonStyle, dshSettingsHelpStyle, dshSettingsPrimaryButtonStyle, dshThemeColor } from '../theme.js'\nimport { assistantSettingCheckboxStyle } from '../assistant-settings-styles.js'\nimport type { AssistantAvatarManager } from './manager.js'\nimport { uiFontSize } from '../font-scale.js'\n\nexport interface AssistantAvatarEngineController {\n readonly status: AssistantAvatarEngineStatus | undefined\n readonly installing: boolean\n readonly cancelled: boolean\n readonly error: string\n readonly consentOpen: boolean\n readonly agreed: boolean\n /** 选择 Live2D 形象时调用:已就绪或安装成功返回 true,需要确认许可或失败返回 false。 */\n ensure(onReady: () => Promise<void> | void): Promise<boolean>\n setAgreed(agreed: boolean): void\n acceptConsent(): Promise<void>\n cancelConsent(): void\n cancelInstall(): void\n retry(): void\n}\n\ninterface AssistantAvatarEngineOptions {\n readonly services: CodingNsClientServices\n readonly manager: AssistantAvatarManager\n readonly appearance: AssistantAppearanceSettings\n readonly disabled: boolean\n readonly notify?: (notice: SettingsNotice) => void\n}\n\n/**\n * 引擎只在用户选择 Live2D 形象时准备:先探测 Host 已就绪的引擎,\n * 未安装则确认许可后自动下载安装;安装失败不改变当前形象。\n */\nexport function useAssistantAvatarEngine(options: AssistantAvatarEngineOptions): AssistantAvatarEngineController {\n const { services, manager, appearance, disabled, notify } = options\n const t = useCodingNsTranslator(services.locale)\n const [status, setStatus] = useState<AssistantAvatarEngineStatus | undefined>()\n const [installing, setInstalling] = useState(false)\n const [cancelled, setCancelled] = useState(false)\n const [error, setError] = useState('')\n const [consentOpen, setConsentOpen] = useState(false)\n const [agreed, setAgreed] = useState(false)\n const installer = useRef<AbortController | undefined>()\n const probe = useRef<AbortController | undefined>()\n const pending = useRef<(() => Promise<void> | void) | undefined>()\n const mounted = useRef(true)\n // 开发模式会重复挂载同一组件;每次挂载都恢复标记,避免卸载后不再更新界面。\n useEffect(() => { mounted.current = true; return () => {\n mounted.current = false; probe.current?.abort(); installer.current?.abort()\n } }, [])\n useEffect(() => {\n const controller = new AbortController()\n void manager.engineStatus(controller.signal).then((value) => {\n if (!controller.signal.aborted && mounted.current) setStatus(value)\n }).catch(() => undefined)\n return () => controller.abort()\n }, [manager])\n const runInstall = async (onReady: () => Promise<void> | void): Promise<boolean> => {\n // React 状态刷新之前也要防止重复点击排入多份安装,取消始终对应唯一请求。\n if (disabled || !mounted.current || installer.current !== undefined) return false\n const controller = new AbortController()\n installer.current = controller\n pending.current = onReady\n setInstalling(true); setError(''); setCancelled(false)\n try {\n const next = await manager.installEngine(controller.signal)\n if (controller.signal.aborted) return false\n setStatus(next)\n await onReady()\n pending.current = undefined\n notify?.({ kind: 'success', message: t('avatar.engineInstalled') })\n return true\n } catch (failure) {\n // 取消不是失败:保留原选择与待办,用户可以直接重试。\n if (!controller.signal.aborted && mounted.current) setError(errorMessage(failure))\n return false\n } finally {\n if (installer.current === controller) installer.current = undefined\n if (mounted.current) setInstalling(false)\n }\n }\n const ensure = async (onReady: () => Promise<void> | void): Promise<boolean> => {\n if (disabled || installing || !mounted.current || installer.current !== undefined) return false\n // 状态读取也归窗口生命周期所有;新选择覆盖旧查询,迟到结果不能恢复旧选择。\n probe.current?.abort()\n const controller = new AbortController()\n probe.current = controller\n setError('')\n let current = status\n try {\n current = await manager.engineStatus(controller.signal)\n } catch { /* 探测失败仍继续尝试安装,真实错误由安装接口返回。 */ }\n finally { if (probe.current === controller) probe.current = undefined }\n if (controller.signal.aborted || !mounted.current) return false\n if (current !== undefined) setStatus(current)\n if (current?.installed === true) { await onReady(); return true }\n if (!hasAssistantAvatarEngineConsent(appearance.engineConsent)) {\n pending.current = onReady; setAgreed(false); setConsentOpen(true); return false\n }\n return await runInstall(onReady)\n }\n return {\n status, installing, cancelled, error, consentOpen, agreed, ensure,\n setAgreed: (value: boolean) => { setAgreed(value) },\n acceptConsent: async (): Promise<void> => {\n try {\n await manager.setEngineEnabled(true)\n if (!mounted.current) return\n setConsentOpen(false); setAgreed(false)\n const next = pending.current\n if (next !== undefined) await runInstall(next)\n } catch (failure) { if (mounted.current) setError(errorMessage(failure)) }\n },\n cancelConsent: (): void => { pending.current = undefined; setAgreed(false); setConsentOpen(false) },\n cancelInstall: (): void => { if (installer.current !== undefined) { setCancelled(true); installer.current.abort() } },\n retry: (): void => { const next = pending.current; if (next !== undefined) void runInstall(next) },\n }\n}\n\n/** 许可确认使用原生模态;未同意时不产生任何下载或设置写入。 */\nexport function AssistantAvatarEngineDialog({ controller, t }: {\n readonly controller: AssistantAvatarEngineController; readonly t: CodingNsTranslator\n}): ReactElement | null {\n const ref = useRef<HTMLDialogElement>(null)\n const id = useId()\n const open = controller.consentOpen\n useEffect(() => {\n if (!open) return\n const opener = document.activeElement as HTMLElement | null\n const dialog = ref.current\n dialog?.showModal()\n return () => { if (dialog?.open) dialog.close(); if (opener?.isConnected) opener.focus() }\n }, [open])\n if (!open) return null\n return createElement('dialog', { ref, 'aria-labelledby': id, 'data-codingns-avatar-engine-dialog': true,\n onCancel: (event: { preventDefault(): void }) => { event.preventDefault(); controller.cancelConsent() },\n onKeyDown: (event: { key: string; preventDefault(): void; stopPropagation(): void }) => {\n if (event.key === 'Escape') { event.preventDefault(); event.stopPropagation(); controller.cancelConsent() }\n },\n style: { maxWidth: 'min(480px, calc(100vw - 32px))', maxHeight: 'calc(100dvh - 32px)', overflowY: 'auto',\n boxSizing: 'border-box', padding: 24, borderRadius: 16, margin: 'auto', border: `1px solid ${dshThemeColor.border}`,\n background: dshThemeColor.pageBackground, color: dshThemeColor.labelPrimary, boxShadow: dshThemeColor.subtleShadow } },\n createElement('strong', { id, style: { fontSize: uiFontSize(16) } }, t('avatar.engineTerms', { version: ASSISTANT_AVATAR_ENGINE_CONSENT_VERSION })),\n createElement('div', { style: { display: 'grid', gap: 16, marginTop: 14 } },\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0, lineHeight: 1.7 } }, t('avatar.engineTermsContent')),\n createElement('label', { style: assistantSettingCheckboxStyle },\n createElement('input', { type: 'checkbox', checked: controller.agreed,\n onChange: (event: { currentTarget: { checked: boolean } }) => controller.setAgreed(event.currentTarget.checked) }), t('avatar.engineAgree')),\n createElement('div', { style: { display: 'flex', justifyContent: 'flex-end', gap: 8 } },\n createElement('button', { type: 'button', autoFocus: true, style: dshSettingsButtonStyle, onClick: controller.cancelConsent }, t('avatar.cancel')),\n createElement('button', { type: 'button', disabled: !controller.agreed, style: dshSettingsPrimaryButtonStyle,\n onClick: () => { if (controller.agreed) void controller.acceptConsent() } }, t('avatar.engineConfirm')))))\n}\n\n/** 安装中显示不确定进度与取消;失败显示原因和重试,不改变当前形象。 */\nexport function AssistantAvatarEngineProgress({ controller, t }: {\n readonly controller: AssistantAvatarEngineController; readonly t: CodingNsTranslator\n}): ReactElement | null {\n if (controller.installing) {\n return createElement('div', { role: 'status', 'data-codingns-avatar-engine-progress': true, style: { display: 'grid', gap: 8 } },\n createElement('span', null, t('avatar.engineInstalling')),\n createElement('progress', { 'aria-label': t('avatar.engineInstalling'), style: { width: '100%' } }),\n createElement('button', { type: 'button', style: { ...dshSettingsButtonStyle, justifySelf: 'start' },\n onClick: controller.cancelInstall }, t('avatar.engineCancel')))\n }\n if (controller.error === '') {\n // 取消后保留待办,用户不必重新选择形象即可重试。\n if (!controller.cancelled) return null\n return createElement('div', { role: 'status', 'data-codingns-avatar-engine-cancelled': true, style: { display: 'grid', gap: 8 } },\n createElement('span', null, t('avatar.engineCancelled')),\n createElement('button', { type: 'button', style: { ...dshSettingsButtonStyle, justifySelf: 'start' },\n onClick: controller.retry }, t('avatar.engineRetry')))\n }\n return createElement('div', { role: 'alert', 'data-codingns-avatar-engine-error': true, style: { display: 'grid', gap: 8, color: dshThemeColor.error, fontSize: uiFontSize(13) } },\n createElement('span', { style: { overflowWrap: 'anywhere' } }, t('avatar.engineInstallFailed', { reason: controller.error })),\n createElement('button', { type: 'button', style: { ...dshSettingsButtonStyle, justifySelf: 'start', color: dshThemeColor.error },\n onClick: controller.retry }, t('avatar.engineRetry')))\n}\n\nfunction errorMessage(error: unknown): string { return error instanceof Error ? error.message : String(error) }\n","import type { AssistantAvatarCatalogEntry, AssistantAvatarTemporaryPreview } from '../../shared/assistant-avatar-catalog.js'\nimport type { AssistantAvatarManager } from './manager.js'\n\ntype PreviewManager = Pick<AssistantAvatarManager, 'previewCatalog' | 'releasePreview' | 'keepPreview'>\n\n/** 挂载即启动预览;离开后隔离所有回调,避免旧下载覆盖新形象或关闭后的界面。 */\nexport function startAssistantAvatarTemporaryPreview(manager: PreviewManager, entry: Pick<AssistantAvatarCatalogEntry, 'id' | 'revision'>, observer: {\n readonly onLoaded: (preview: AssistantAvatarTemporaryPreview) => void\n readonly onError: (error: unknown) => void\n readonly onSettled: () => void\n}): { dispose(): Promise<void> } {\n let active = true\n const session = new AssistantAvatarTemporaryPreviewSession(manager, (error) => { if (active) observer.onError(error) })\n void session.load(entry).then((preview) => { if (active) observer.onLoaded(preview) })\n .catch((error) => { if (active) observer.onError(error) })\n .finally(() => { if (active) observer.onSettled() })\n return { dispose: async () => { active = false; await session.dispose() } }\n}\n\n/** 客户端拥有一个临时预览租约,取消先释放,迟到答复再次释放,绝不登记到设置。 */\nexport class AssistantAvatarTemporaryPreviewSession {\n readonly lease: string\n private readonly controller = new AbortController()\n private disposed = false\n private timer: ReturnType<typeof setInterval> | undefined\n constructor(private readonly manager: PreviewManager,\n private readonly onExpired: (error: unknown) => void = () => {}, lease = crypto.randomUUID()) { this.lease = lease }\n\n async load(entry: Pick<AssistantAvatarCatalogEntry, 'id' | 'revision'>): Promise<AssistantAvatarTemporaryPreview> {\n this.controller.signal.throwIfAborted()\n try {\n // 下载期间也保持租约,避免慢网络下尚未加载完成就被超时清理。\n this.timer = setInterval(() => {\n void this.manager.keepPreview(this.lease).catch((error) => {\n if (this.disposed) return\n this.onExpired(error); void this.dispose().catch(() => undefined)\n })\n }, 60_000)\n const preview = await this.manager.previewCatalog(entry.id, entry.revision, this.lease, this.controller.signal)\n if (this.disposed) { await this.manager.releasePreview(this.lease); this.controller.signal.throwIfAborted() }\n return preview\n } catch (error) { await this.dispose().catch(() => undefined); throw error }\n }\n async dispose(): Promise<void> {\n if (this.disposed) return\n this.disposed = true; this.controller.abort()\n if (this.timer !== undefined) clearInterval(this.timer)\n await this.manager.releasePreview(this.lease)\n }\n}\n","import { createElement, useEffect, useId, useRef, useState } from 'react'\nimport type { ReactElement } from 'react'\nimport { createPortal } from 'react-dom'\nimport { ASSISTANT_AVATAR_CONSENT_VERSION, hasAssistantAvatarConsent } from '../../shared/assistant-avatar-catalog.js'\nimport type { AssistantAvatarCatalogEntry, AssistantAvatarTemporaryPreview } from '../../shared/assistant-avatar-catalog.js'\nimport { ASSISTANT_AVATAR_MAX_MODELS, selectedAssistantAvatar } from '../../shared/assistant-avatar.js'\nimport type { AssistantAppearanceSettings } from '../../shared/assistant-avatar.js'\nimport type { CodingNsClientServices, SettingsNotice } from '../features/types.js'\nimport { useCodingNsTranslator, type CodingNsTranslator } from '../locale.js'\nimport { dshSettingsButtonStyle, dshSettingsPrimaryButtonStyle, dshSettingsHelpStyle, dshThemeColor } from '../theme.js'\nimport type { AssistantAvatarManager } from './manager.js'\nimport { assistantSettingCheckboxStyle, assistantSettingSwitchStyle, assistantSettingTextStyle } from '../assistant-settings-styles.js'\nimport { AssistantAvatarPicker, assistantAvatarChoices, type AssistantAvatarChoice } from './catalog-picker.js'\nimport { AssistantAvatarEngineDialog, AssistantAvatarEngineProgress, useAssistantAvatarEngine } from './engine.js'\nimport { AssistantAvatarSlot } from './slot.js'\nimport { AssistantAvatarLoading } from './loading.js'\nimport { startAssistantAvatarTemporaryPreview } from './temporary-preview.js'\nimport { SettingsSwitch } from '../settings-controls.js'\nimport { uiFontSize } from '../font-scale.js'\n\nexport interface AssistantAvatarPreviewTargetProps {\n readonly active?: boolean\n readonly previewTarget?: Element | null\n readonly onPreviewChange?: (entry: AssistantAvatarCatalogEntry | undefined) => void\n}\n\ninterface CatalogPanelProps extends AssistantAvatarPreviewTargetProps {\n readonly services: CodingNsClientServices\n readonly manager: AssistantAvatarManager\n readonly appearance: AssistantAppearanceSettings\n readonly disabled: boolean\n readonly notify: (notice: SettingsNotice) => void\n}\nconst buttonStyle = { ...dshSettingsButtonStyle, justifySelf: 'start' }\nconst helpStyle = { ...dshSettingsHelpStyle, margin: 0 }\nconst checkStyle = assistantSettingCheckboxStyle\n\n/** 目录与已登记角色共用选择入口,协议和素材安装仍分别确认。 */\nexport function AssistantAvatarCatalogPanel(props: CatalogPanelProps): ReactElement {\n const { services, manager, appearance, disabled, notify, active = true, previewTarget, onPreviewChange } = props\n const t = useCodingNsTranslator(services.locale)\n const [agreed, setAgreed] = useState(false)\n const [agreementOpen, setAgreementOpen] = useState(false)\n const [pending, setPending] = useState(false)\n const [installing, setInstalling] = useState(false)\n const [preview, setPreview] = useState<{ readonly id: string; readonly consent: string; readonly selection: number } | undefined>()\n const [error, setError] = useState('')\n const accepted = hasAssistantAvatarConsent(appearance.thirdPartyConsent)\n const consent = accepted ? `${appearance.thirdPartyConsent!.version}:${appearance.thirdPartyConsent!.acceptedAt}` : ''\n const catalog = useAssistantAvatarCatalog(manager, consent)\n const engine = useAssistantAvatarEngine({ services, manager, appearance, disabled, notify })\n const current = selectedAssistantAvatar(appearance)\n const choices = assistantAvatarChoices(appearance, catalog.entries, t)\n const selected = preview?.consent === consent ? catalog.entries.find((entry) => entry.id === preview.id) : undefined\n useEffect(() => {\n onPreviewChange?.(active ? selected : undefined)\n return () => onPreviewChange?.(undefined)\n }, [active, selected, onPreviewChange])\n const busy = disabled || pending || installing || engine.installing\n const choose = async (choice: AssistantAvatarChoice): Promise<void> => {\n if (busy) return\n setError('')\n setPending(true)\n try {\n const select = async (): Promise<void> => {\n if (choice.catalog !== undefined) {\n const id = choice.catalog.id\n // 引擎就绪后才挂载临时预览;重新选择同一条目也能重试。\n setPreview((current) => ({ id, consent, selection: (current?.selection ?? 0) + 1 })); return\n }\n setPreview(undefined)\n await manager.select(choice.id)\n if (!services.configurationDraft) notify({ kind: 'success', message: t('avatar.saved') })\n }\n // 目录预览、已登记角色和旧预设共享同一引擎检查,避免首次预览直接请求缺失运行时。\n const needsEngine = choice.catalog === undefined ? manager.list().find((model) => model.id === choice.id)?.renderer === 'live2d'\n : ['dsh-live2d-pet', 'cubism-model'].includes(choice.catalog.format)\n if (needsEngine) await engine.ensure(select)\n else await select()\n }\n catch (failure) { setError(errorMessage(failure)); notify({ kind: 'error', message: errorMessage(failure) }) }\n finally { setPending(false) }\n }\n const changeConsent = async (enabled: boolean): Promise<void> => {\n if (busy || (enabled && !agreed)) return\n setPending(true); setError('')\n try { await manager.setThirdPartyEnabled(enabled); setAgreed(false); setAgreementOpen(false) }\n catch (failure) { setError(errorMessage(failure)); notify({ kind: 'error', message: errorMessage(failure) }) }\n finally { setPending(false) }\n }\n const previewNode = selected === undefined || !active ? null : createElement(AssistantAvatarCatalogPreview, { ...props, selected, disabled: disabled || pending,\n key: `${consent}:${selected.id}:${selected.revision}:${preview?.selection}`, onPending: setInstalling, onInstalled: () => setPreview(undefined) })\n return createElement('section', { 'data-codingns-third-party-avatars': true, 'aria-label': t('avatar.thirdPartyTitle'),\n style: { ...assistantSettingTextStyle, display: 'grid', gap: 20,\n ...(previewNode !== null && !previewTarget ? { gridTemplateColumns: 'repeat(auto-fit,minmax(min(100%,260px),1fr))' } : {}) } },\n createElement('div', { style: { display: 'grid', gap: 12, alignContent: 'start' } },\n createElement(AssistantAvatarPicker, { choices, value: selected === undefined ? appearance.selectedId : `catalog-${selected.id}`,\n disabled: busy, t, onChoose: (choice) => { void choose(choice) } }),\n // 当前形象是 Live2D 而引擎缺失时保留恢复入口,不要求用户重新切换形象。\n current.renderer !== 'live2d' || engine.status?.installed !== false ? null : createElement('div', { 'data-codingns-avatar-engine-missing': true, style: { display: 'grid', gap: 8 } },\n createElement('p', { style: helpStyle }, t('avatar.engineMissing')),\n createElement('button', { type: 'button', disabled: busy, style: buttonStyle, onClick: () => { void engine.ensure(() => undefined) } }, t('avatar.engineInstall'))),\n createElement(AssistantAvatarEngineProgress, { controller: engine, t }),\n createElement(AssistantAvatarThirdPartyToggle, { accepted, disabled: busy, t,\n onRequest: () => { setAgreed(false); setAgreementOpen(true) }, onDisable: () => { void changeConsent(false) } }),\n !agreementOpen ? null : createElement(AssistantAvatarConsentDialog, { agreed, disabled: busy, t,\n onChange: setAgreed, onAccept: () => { void changeConsent(true) },\n onCancel: () => { if (!pending) { setAgreementOpen(false); setAgreed(false) } } }),\n !catalog.loading ? null : createElement('div', { role: 'status', style: helpStyle }, t('avatar.catalogLoading')),\n !accepted || catalog.loading || catalog.entries.length > 0 || catalog.error ? null : createElement('p', { style: helpStyle }, t('avatar.catalogEmpty')),\n !catalog.error ? null : createElement('div', { role: 'alert', style: { display: 'grid', gap: 8, color: dshThemeColor.error, fontSize: uiFontSize(13) } }, catalog.error,\n createElement('button', { type: 'button', disabled: busy || catalog.loading, style: buttonStyle, onClick: catalog.reload }, t('avatar.catalogRetry'))),\n !error ? null : createElement('div', { role: 'alert', style: { color: dshThemeColor.error, fontSize: uiFontSize(13) } }, error),\n createElement(AssistantAvatarEngineDialog, { controller: engine, t })),\n // 工作台使用右侧唯一形象区域;独立设置入口也采用左右分栏,窄屏自然换行。\n previewNode === null ? null : createElement(AssistantAvatarCatalogPreviewRegion, { target: previewTarget, children: previewNode }))\n}\n\n/** 预览 DOM 归右侧目标所有,独立设置入口则提供同级侧栏。 */\nexport function AssistantAvatarCatalogPreviewRegion({ target, children }: { readonly target: Element | null | undefined; readonly children: ReactElement }): ReactElement {\n return target ? createPortal(children, target) : createElement('aside', { 'data-codingns-avatar-preview-region': true }, children)\n}\n\n/** 仅有效协议允许读取元数据;协议变化和卸载会取消旧请求并隔离迟到答复。 */\nfunction useAssistantAvatarCatalog(manager: AssistantAvatarManager, consent: string) {\n const [retry, setRetry] = useState(0)\n const [catalog, setCatalog] = useState<{ consent: string; entries: readonly AssistantAvatarCatalogEntry[]; loading: boolean; error: string }>({\n consent: '', entries: [], loading: false, error: '',\n })\n useEffect(() => {\n if (!consent) return\n const controller = new AbortController()\n setCatalog({ consent, entries: [], loading: true, error: '' })\n void manager.getCatalog(controller.signal).then((entries) => {\n if (!controller.signal.aborted) setCatalog({ consent, entries, loading: false, error: '' })\n }).catch((failure) => {\n if (!controller.signal.aborted) setCatalog({ consent, entries: [], loading: false, error: errorMessage(failure) })\n })\n return () => controller.abort()\n }, [manager, consent, retry])\n const current = consent !== '' && catalog.consent === consent\n return { entries: current ? catalog.entries : [], loading: consent !== '' && (!current || catalog.loading),\n error: current ? catalog.error : '', reload: () => setRetry((value) => value + 1) }\n}\n\n/** 勾选只请求展示协议,明确同意后立即加载目录;取消不会产生任何设置写入。 */\nexport function AssistantAvatarThirdPartyToggle({ accepted, disabled, t, onRequest, onDisable }: {\n readonly accepted: boolean; readonly disabled: boolean; readonly t: CodingNsTranslator\n readonly onRequest: () => void; readonly onDisable: () => void\n}): ReactElement {\n return createElement('label', { style: assistantSettingSwitchStyle },\n createElement('span', null, t('avatar.thirdPartyEnable')),\n createElement(SettingsSwitch, { 'aria-label': t('avatar.thirdPartyEnable'), checked: accepted, disabled, 'data-codingns-third-party-enabled': true,\n onChange: (event: { currentTarget: { checked: boolean } }) => { if (!disabled) { if (event.currentTarget.checked) onRequest(); else onDisable() } } }))\n}\n\ninterface ConsentPromptProps {\n readonly agreed: boolean; readonly disabled: boolean; readonly t: CodingNsTranslator\n readonly onChange: (agreed: boolean) => void; readonly onAccept: () => void; readonly onCancel: () => void\n}\n/** 原生模态对话框限制背景焦点,关闭后恢复到触发协议的复选框。 */\nfunction AssistantAvatarConsentDialog(props: ConsentPromptProps): ReactElement {\n const ref = useRef<HTMLDialogElement>(null)\n const id = useId()\n useEffect(() => {\n const opener = document.activeElement as HTMLElement | null\n const dialog = ref.current\n dialog?.showModal()\n return () => { if (dialog?.open) dialog.close(); if (opener?.isConnected) opener.focus() }\n }, [])\n return createElement('dialog', { ref, 'aria-labelledby': id, 'data-codingns-avatar-consent-dialog': true,\n onCancel: (event: { preventDefault(): void }) => { event.preventDefault(); props.onCancel() },\n onKeyDown: (event: { key: string; preventDefault(): void; stopPropagation(): void }) => {\n if (event.key === 'Escape') { event.preventDefault(); event.stopPropagation(); props.onCancel() }\n },\n style: { maxWidth: 'min(480px, calc(100vw - 32px))', maxHeight: 'calc(100dvh - 32px)', overflowY: 'auto',\n boxSizing: 'border-box', padding: 24, borderRadius: 16, margin: 'auto', border: `1px solid ${dshThemeColor.border}`,\n background: dshThemeColor.pageBackground, color: dshThemeColor.labelPrimary, boxShadow: dshThemeColor.subtleShadow } },\n createElement('strong', { id, style: { fontSize: uiFontSize(16) } }, props.t('avatar.thirdPartyTerms', { version: ASSISTANT_AVATAR_CONSENT_VERSION })),\n createElement(AssistantAvatarConsentPrompt, props))\n}\n\nexport function AssistantAvatarConsentPrompt({ agreed, disabled, t, onChange, onAccept, onCancel }: ConsentPromptProps): ReactElement {\n return createElement('div', { style: { display: 'grid', gap: 16, marginTop: 14 } },\n createElement('p', { style: { ...helpStyle, lineHeight: 1.7 } }, t('avatar.thirdPartyTermsContent')),\n createElement('label', { style: checkStyle },\n createElement('input', { type: 'checkbox', checked: agreed, disabled,\n onChange: (event: { currentTarget: { checked: boolean } }) => { if (!disabled) onChange(event.currentTarget.checked) } }), t('avatar.thirdPartyAgree')),\n createElement('div', { style: { display: 'flex', justifyContent: 'flex-end', gap: 8 } },\n createElement('button', { type: 'button', autoFocus: true, disabled, style: dshSettingsButtonStyle, onClick: onCancel }, t('avatar.cancel')),\n createElement('button', { type: 'button', disabled: disabled || !agreed, style: dshSettingsPrimaryButtonStyle,\n onClick: () => { if (!disabled && agreed) onAccept() } }, t('avatar.thirdPartyConfirm'))))\n}\n\nexport function AssistantAvatarCatalogPreview({ services, manager, appearance, disabled, notify, selected, onPending, onInstalled }: CatalogPanelProps & {\n readonly selected: AssistantAvatarCatalogEntry\n readonly onPending: (pending: boolean) => void\n readonly onInstalled: () => void\n}): ReactElement {\n const t = useCodingNsTranslator(services.locale)\n const [licenseAccepted, setLicenseAccepted] = useState(false)\n const [temporary, setTemporary] = useState<AssistantAvatarTemporaryPreview | undefined>()\n const [previewLoading, setPreviewLoading] = useState(!disabled)\n const [pending, setPending] = useState(false)\n const [error, setError] = useState('')\n const installer = useRef<AbortController | undefined>()\n useEffect(() => () => {\n installer.current?.abort()\n onPending(false)\n }, [manager, onPending])\n useEffect(() => {\n setTemporary(undefined); setPreviewLoading(!disabled); setError('')\n if (disabled) return\n // 选择即自动下载临时预览;素材许可只限制正式采用,不锁住左侧选择器。\n const preview = startAssistantAvatarTemporaryPreview(manager, { id: selected.id, revision: selected.revision }, {\n onLoaded: setTemporary,\n onError: (failure) => { setTemporary(undefined); setPreviewLoading(false); setError(errorMessage(failure)) },\n onSettled: () => setPreviewLoading(false),\n })\n return () => { void preview.dispose().catch(() => undefined) }\n }, [manager, disabled, selected.id, selected.revision])\n const installed = appearance.models.some((model) => model.id === `catalog-${selected.id}` && model.package?.installationId !== undefined)\n const full = appearance.models.length >= ASSISTANT_AVATAR_MAX_MODELS && !installed\n const install = async (): Promise<void> => {\n if (disabled || pending || previewLoading || !licenseAccepted || full) return\n const controller = new AbortController()\n installer.current = controller; setPending(true); onPending(true); setError('')\n try {\n await manager.installCatalog(selected.id, selected.revision, licenseAccepted, controller.signal, temporary?.lease)\n if (!controller.signal.aborted) { setLicenseAccepted(false); if (!services.configurationDraft) notify({ kind: 'success', message: t('avatar.saved') }); onInstalled() }\n } catch (failure) {\n if (!controller.signal.aborted) { setError(errorMessage(failure)); notify({ kind: 'error', message: errorMessage(failure) }) }\n } finally {\n if (installer.current === controller) installer.current = undefined\n if (!controller.signal.aborted) { setPending(false); onPending(false) }\n }\n }\n return createElement('div', { style: { display: 'grid', gap: 12 }, 'data-codingns-avatar-catalog-preview': true },\n createElement('div', { style: { display: 'grid', gap: 10 }, 'data-codingns-avatar-catalog-selection': selected.id },\n createElement('div', { 'data-codingns-avatar-temporary-preview': true, 'aria-busy': previewLoading || pending,\n style: { minHeight: 182, display: 'grid', justifyItems: 'center', alignItems: 'center' } },\n temporary === undefined ? previewLoading || pending\n // 下载与渲染占用同一预览位置,只显示动画,避免出现第二份进度界面。\n ? createElement('div', { style: { position: 'relative', width: 168, height: 182, maxWidth: '100%' } },\n createElement(AssistantAvatarLoading, { progress: { phase: 'resources' }, size: 168, t, animationOnly: true }))\n : createElement('p', { role: 'status', style: { ...helpStyle, textAlign: 'center' } },\n t(error ? 'avatar.temporaryLoadFailed' : 'avatar.temporaryUnavailable'))\n : createElement(AssistantAvatarSlot, { services, model: temporary.model, state: 'idle', surface: 'dialog', size: 168, transient: true, showDiagnostics: false })),\n createElement('p', { style: helpStyle }, t('avatar.catalogPreviewHint')),\n createElement('strong', null, selected.name),\n createElement('p', { style: helpStyle }, selected.description),\n createElement('div', { style: helpStyle }, t('avatar.packageAuthor', { author: selected.author })),\n createElement('div', { style: helpStyle }, t('avatar.packageLicense', { license: selected.license })),\n createElement('p', { style: helpStyle }, selected.remarks),\n createElement('div', { style: helpStyle }, t('avatar.catalogSize', { size: `${(selected.bytes / 1024 / 1024).toFixed(2)} MB`, files: selected.files })),\n createElement('div', { style: { display: 'flex', flexWrap: 'wrap', gap: 14, fontSize: uiFontSize(13) } },\n createElement('a', { href: selected.repositoryUrl, target: '_blank', rel: 'noopener noreferrer' }, t('avatar.packageSource')),\n createElement('a', { href: selected.licenseUrl, target: '_blank', rel: 'noopener noreferrer' }, t('avatar.catalogLicenseLink')),\n createElement('a', { href: selected.homepage, target: '_blank', rel: 'noopener noreferrer' }, t('avatar.packageHomepage'))),\n selected.format === 'codex-pet' ? null : createElement('p', { style: helpStyle }, t('avatar.live2dDependencyHint')),\n installed ? createElement('span', { style: { color: dshThemeColor.success, fontSize: uiFontSize(13) } }, t('avatar.catalogInstalled')) : null,\n createElement('label', { style: checkStyle },\n createElement('input', { type: 'checkbox', checked: licenseAccepted, disabled: disabled || pending,\n onChange: (event: { currentTarget: { checked: boolean } }) => setLicenseAccepted(event.currentTarget.checked) }), t('avatar.catalogLicenseAgree')),\n createElement('button', { type: 'button', disabled: disabled || pending || previewLoading || !licenseAccepted || full, style: buttonStyle,\n onClick: () => { void install() } }, t('avatar.temporaryUse'))),\n !error ? null : createElement('div', { role: 'alert', style: { color: dshThemeColor.error, fontSize: uiFontSize(13) } }, error))\n}\nfunction errorMessage(error: unknown): string { return error instanceof Error ? error.message : String(error) }\n","import { createElement, useCallback, useEffect, useRef, useState, useSyncExternalStore } from 'react'\nimport type { ReactElement } from 'react'\nimport { ASSISTANT_AVATAR_FLOATING_MINI_SIZE, ASSISTANT_AVATAR_FLOATING_STANDARD_SIZE, ASSISTANT_AVATAR_MAX_MODELS, getBuiltinAssistantAvatar, isAssistantAvatarSource, selectedAssistantAvatar } from '../../shared/assistant-avatar.js'\nimport type { AssistantAvatarModel } from '../../shared/assistant-avatar.js'\nimport type { CodingNsClientServices, FeaturePanelProps, SettingsNotice } from '../features/types.js'\nimport { useCodingNsTranslator, type CodingNsTranslator } from '../locale.js'\nimport { dshSettingsButtonStyle, dshSettingsHelpStyle, dshSettingsFieldStyle, dshThemeColor } from '../theme.js'\nimport { getAssistantAvatarManager } from './manager.js'\nimport { getAssistantAvatarRegistry } from './registry.js'\nimport type { AssistantAvatarCandidate } from '../../shared/assistant-avatar-installation.js'\nimport { AssistantAvatarCatalogPanel } from './catalog-panel.js'\nimport type { AssistantAvatarPreviewTargetProps } from './catalog-panel.js'\nimport { AssistantAvatarEngineDialog, AssistantAvatarEngineProgress, useAssistantAvatarEngine } from './engine.js'\nimport { assistantSettingFieldStyle, assistantSettingSwitchStyle, assistantSettingTextStyle } from '../assistant-settings-styles.js'\nimport { SettingsSwitch } from '../settings-controls.js'\nimport { uiFontSize } from '../font-scale.js'\n\n/** 对话内复用设置页表单;订阅同一存储并把保存反馈留在当前窗口。 */\nexport function AssistantAppearanceEditor({ services, enabled, ...previewProps }: {\n readonly services: CodingNsClientServices\n readonly enabled: boolean\n} & AssistantAvatarPreviewTargetProps): ReactElement {\n const store = services.settings\n const subscribe = useCallback((listener: () => void) => store.subscribe(listener), [store])\n const getSnapshot = useCallback(() => store.getSnapshot(), [store])\n const snapshot = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)\n const [notice, setNotice] = useState<SettingsNotice | undefined>()\n return createElement('div', { 'data-codingns-avatar-settings-editor': true, style: { display: 'grid', gap: 10 } },\n createElement(AssistantAppearancePanel, { services, enabled, snapshot, notify: setNotice, ...previewProps }),\n // 表单本身已显示失败信息,外层只补充保存成功反馈,避免重复错误提示。\n notice?.kind !== 'success' ? null : createElement('div', { role: 'status',\n style: { fontSize: uiFontSize(13), color: dshThemeColor.success } }, notice.message),\n )\n}\n\n/** 保存只写 appearance 子字段,不覆盖其他窗口刚改过的语音或受管范围。 */\nexport function AssistantAppearancePanel({ services, enabled, snapshot, notify, ...previewProps }: FeaturePanelProps & AssistantAvatarPreviewTargetProps): ReactElement {\n const t = useCodingNsTranslator(services.locale)\n const manager = getAssistantAvatarManager(services)\n const appearance = useSyncExternalStore(manager.subscribe, manager.getSnapshot, manager.getSnapshot)\n const selected = selectedAssistantAvatar(appearance)\n const registry = getAssistantAvatarRegistry(services)\n const adapters = useSyncExternalStore(manager.adapters.subscribe, manager.adapters.getSnapshot, manager.adapters.getSnapshot)\n const renderers = useSyncExternalStore(registry.subscribe, registry.getSnapshot, registry.getSnapshot)\n const [pending, setPending] = useState(false)\n const [name, setName] = useState('')\n const [source, setSource] = useState('')\n const [renderer, setRenderer] = useState('image')\n const [version, setVersion] = useState<1 | 2>(2)\n const [error, setError] = useState('')\n const [manifestUrl, setManifestUrl] = useState('')\n const [adapterId, setAdapterId] = useState('auto')\n const [candidates, setCandidates] = useState<readonly AssistantAvatarCandidate[]>([])\n const [candidateUrl, setCandidateUrl] = useState('')\n const [addMode, setAddMode] = useState<'package' | 'custom'>('package')\n const [customSize, setCustomSize] = useState(false)\n const importer = useRef<AbortController | undefined>()\n useEffect(() => () => importer.current?.abort(), [manager])\n const selectedAdapterId = adapters.some((adapter) => adapter.id === adapterId) ? adapterId : 'auto'\n const selectedRenderer = renderers.some((item) => item.id === renderer && item.id !== 'builtin') ? renderer : 'image'\n const disabled = !enabled || pending || snapshot.status !== 'ready' || !snapshot.writable\n const engine = useAssistantAvatarEngine({ services, manager, appearance, disabled, notify })\n const save = async (action: () => Promise<unknown>, message = t('avatar.saved')): Promise<boolean> => {\n if (disabled) return false\n setPending(true); setError('')\n try {\n await action()\n if (!services.configurationDraft) notify({ kind: 'success', message })\n return true\n } catch (failure) {\n if (failure instanceof Error && failure.name === 'AbortError') { notify({ kind: 'info', message: t('avatar.cancelled') }); return false }\n const message = failure instanceof Error ? failure.message : String(failure)\n setError(message); notify({ kind: 'error', message })\n return false\n } finally { setPending(false) }\n }\n const add = async (): Promise<void> => {\n if (!isAssistantAvatarSource(source.trim())) { setError(t('avatar.invalidSource')); return }\n const id = `avatar-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 7)}`\n const model: AssistantAvatarModel = { id, name: name.trim() || t('avatar.customName'), renderer: selectedRenderer,\n source: source.trim(), spriteVersion: version }\n // 自定义 Live2D 素材同样需要引擎:确认许可后自动安装,失败不写入形象。\n const accepted = selectedRenderer === 'live2d'\n ? await engine.ensure(async () => {\n await manager.add(model)\n if (!services.configurationDraft) notify({ kind: 'success', message: t('avatar.saved') })\n })\n : await save(() => manager.add(model))\n if (accepted) { setName(''); setSource('') }\n }\n const importPackage = async (): Promise<void> => {\n if (!isAssistantAvatarSource(manifestUrl.trim())) { setError(t('avatar.invalidSource')); return }\n const controller = new AbortController()\n importer.current = controller\n const accepted = await save(async () => {\n const discovered = await manager.discover(manifestUrl.trim(), controller.signal)\n setCandidates(discovered); setCandidateUrl(discovered[0]?.url ?? '')\n }, t('avatar.discovered'))\n if (importer.current === controller) importer.current = undefined\n if (!accepted) { setCandidates([]); setCandidateUrl('') }\n }\n const installPackage = async (url: string): Promise<void> => {\n const controller = new AbortController()\n importer.current = controller\n const accepted = await save(() => manager.installPackage(url, selectedAdapterId, controller.signal))\n if (importer.current === controller) importer.current = undefined\n if (accepted) { setManifestUrl(''); setCandidates([]); setCandidateUrl('') }\n }\n const field = (label: string, input: ReactElement): ReactElement => createElement('label', { style: assistantSettingFieldStyle },\n createElement('span', null, label), input)\n const toggle = (key: 'floatingEnabled' | 'dialogEnabled', label: string): ReactElement => createElement('label', {\n style: assistantSettingSwitchStyle },\n createElement('span', { style: { minWidth: 0, overflowWrap: 'anywhere' } }, label), createElement(SettingsSwitch, { 'aria-label': label,\n checked: appearance[key], disabled, onChange: (event: { currentTarget: { checked: boolean } }) => { const checked = event.currentTarget.checked; void save(() => manager.configure({ [key]: checked })) } }))\n const sizeField = (key: 'floatingSize' | 'dialogSize', min: number, max: number, label: string): ReactElement => field(label,\n createElement('input', { key: appearance[key], type: 'number', min, max, step: 1, defaultValue: appearance[key], disabled, 'aria-label': label, style: dshSettingsFieldStyle,\n onBlur: (event: { currentTarget: { value: string } }) => { const value = Number(event.currentTarget.value); if (Number.isInteger(value) && value >= min && value <= max && value !== appearance[key]) void save(() => manager.configure({ [key]: value })); else event.currentTarget.value = String(appearance[key]) } }))\n return createElement('section', { 'aria-label': t('avatar.settingsTitle'), style: { ...assistantSettingTextStyle, display: 'grid', gap: 12, borderTop: `1px solid ${dshThemeColor.border}`, paddingTop: 14 } },\n createElement('strong', { style: { fontSize: uiFontSize(14) } }, t('avatar.settingsTitle')),\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('avatar.settingsDescription')),\n createElement(AssistantAvatarCatalogPanel, { services, manager, appearance, disabled, notify, ...previewProps }),\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('avatar.externalHint')),\n selected.renderer !== 'live2d' ? null : createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('avatar.live2dDependencyHint')),\n selected.package === undefined ? null : createElement('div', { 'data-codingns-avatar-package-info': true, style: { ...dshSettingsHelpStyle, overflowWrap: 'anywhere' } },\n createElement('div', null, t('avatar.packageAuthor', { author: selected.package.author || t('avatar.notDeclared') })),\n createElement('div', null, t('avatar.packageLicense', { license: selected.package.license || t('avatar.notDeclared') })),\n selected.package.manifestUrl === undefined ? null : createElement('a', { href: selected.package.manifestUrl, target: '_blank', rel: 'noopener noreferrer' }, t('avatar.packageSource')),\n selected.package.homepage === undefined ? null : createElement('div', null, createElement('a', { href: selected.package.homepage, target: '_blank', rel: 'noopener noreferrer' }, t('avatar.packageHomepage')))),\n toggle('floatingEnabled', t('avatar.floatingEnabled')),\n createElement(AssistantFloatingSizeControl, { size: appearance.floatingSize, custom: customSize, disabled, t,\n onPreset: (preset) => { setCustomSize(preset === 'custom'); if (preset !== 'custom') void save(() => manager.configure({ floatingSize: preset === 'mini' ? ASSISTANT_AVATAR_FLOATING_MINI_SIZE : ASSISTANT_AVATAR_FLOATING_STANDARD_SIZE })) },\n onSize: (floatingSize) => { void save(() => manager.configure({ floatingSize })) } }),\n toggle('dialogEnabled', t('avatar.dialogEnabled')),\n sizeField('dialogSize', 120, 480, t('avatar.dialogSize')),\n getBuiltinAssistantAvatar(appearance.selectedId) !== undefined ? null : createElement('button', { type: 'button', disabled, style: { ...dshSettingsButtonStyle, justifySelf: 'start' },\n onClick: () => { const id = appearance.selectedId; void save(() => manager.remove(id)) } }, t('avatar.remove')),\n selected.package?.manifestUrl === undefined || selected.package.installationId !== undefined ? null : createElement('button', {\n type: 'button', disabled, style: { ...dshSettingsButtonStyle, justifySelf: 'start' },\n onClick: () => { void installPackage(selected.package!.manifestUrl!) },\n }, t('avatar.installCurrent')),\n createElement('details', { 'data-codingns-avatar-add': true }, createElement('summary', { style: { cursor: 'pointer', fontSize: uiFontSize(13) } }, t('avatar.add')),\n field(t('avatar.addMode'), createElement('select', { value: addMode, disabled, style: { ...dshSettingsFieldStyle, marginTop: 12 },\n 'data-codingns-avatar-add-mode': true,\n onChange: (event: { currentTarget: { value: string } }) => setAddMode(event.currentTarget.value === 'custom' ? 'custom' : 'package') },\n createElement('option', { value: 'package' }, t('avatar.importPackage')), createElement('option', { value: 'custom' }, t('avatar.customMaterial')))),\n addMode !== 'package' ? null : createElement('div', { 'data-codingns-avatar-package-import': true, style: { display: 'grid', gap: 12, marginTop: 12 } },\n field(t('avatar.adapter'), createElement('select', { value: selectedAdapterId, disabled, style: dshSettingsFieldStyle,\n onChange: (event: { currentTarget: { value: string } }) => setAdapterId(event.currentTarget.value) },\n createElement('option', { value: 'auto' }, t('avatar.adapter.auto')),\n ...adapters.map((adapter) => createElement('option', { key: adapter.id, value: adapter.id }, adapter.labelKey === undefined ? adapter.name ?? adapter.id : t(adapter.labelKey))))),\n field(t('avatar.manifestUrl'), createElement('input', { value: manifestUrl, disabled, maxLength: 2048, style: dshSettingsFieldStyle,\n onChange: (event: { currentTarget: { value: string } }) => { setManifestUrl(event.currentTarget.value); setCandidates([]); setCandidateUrl('') } })),\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('avatar.importHint')),\n createElement('button', { type: 'button', disabled, style: { ...dshSettingsButtonStyle, justifySelf: 'start' }, onClick: () => { void importPackage() } }, pending && importer.current !== undefined ? t('avatar.importing') : t('avatar.discover')),\n candidates.length === 0 ? null : field(t('avatar.installCandidate'), createElement('select', { value: candidateUrl, disabled,\n style: dshSettingsFieldStyle, onChange: (event: { currentTarget: { value: string } }) => setCandidateUrl(event.currentTarget.value) },\n ...candidates.map((candidate) => createElement('option', { key: candidate.url, value: candidate.url }, candidate.name)))),\n candidates.length === 0 ? null : createElement('button', { type: 'button', disabled: disabled || appearance.models.length >= ASSISTANT_AVATAR_MAX_MODELS,\n style: { ...dshSettingsButtonStyle, justifySelf: 'start' }, onClick: () => { void installPackage(candidateUrl) } }, t('avatar.importUse')),\n !pending || importer.current === undefined ? null : createElement('div', { role: 'status', style: { display: 'grid', gap: 8 } },\n createElement('span', null, t('avatar.installProgress')),\n createElement('progress', { 'aria-label': t('avatar.installProgress'), style: { width: '100%' } }),\n createElement('button', { type: 'button', style: { ...dshSettingsButtonStyle, justifySelf: 'start' },\n onClick: () => importer.current?.abort() }, t('avatar.cancel')))),\n addMode !== 'custom' ? null : createElement('div', { 'data-codingns-avatar-custom-add': true, style: { display: 'grid', gap: 12, marginTop: 12 } },\n field(t('avatar.name'), createElement('input', { value: name, disabled, maxLength: 80, style: dshSettingsFieldStyle, onChange: (event: { currentTarget: { value: string } }) => setName(event.currentTarget.value) })),\n field(t('avatar.type'), createElement('select', { value: selectedRenderer, disabled, style: dshSettingsFieldStyle, onChange: (event: { currentTarget: { value: string } }) => setRenderer(event.currentTarget.value) },\n ...renderers.filter((item) => item.id !== 'builtin').map((item) => createElement('option', { key: item.id, value: item.id }, item.labelKey === undefined ? item.name ?? item.id : t(item.labelKey))))),\n field(t('avatar.source'), createElement('input', { value: source, disabled, maxLength: 2048, type: 'text', style: dshSettingsFieldStyle, onChange: (event: { currentTarget: { value: string } }) => setSource(event.currentTarget.value) })),\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t(['image', 'spritesheet', 'live2d'].includes(selectedRenderer) ? `avatar.sourceHint.${selectedRenderer}` : 'avatar.sourceHint.custom')),\n selectedRenderer !== 'live2d' ? null : createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('avatar.live2dDependencyHint')),\n selectedRenderer !== 'spritesheet' ? null : field(t('avatar.spriteVersion'), createElement('select', { value: version, disabled, style: dshSettingsFieldStyle,\n onChange: (event: { currentTarget: { value: string } }) => setVersion(event.currentTarget.value === '1' ? 1 : 2) },\n createElement('option', { value: 1 }, 'v1 · 1536×1872'), createElement('option', { value: 2 }, 'v2 · 1536×2288'))),\n createElement('button', { type: 'button', disabled: disabled || appearance.models.length >= ASSISTANT_AVATAR_MAX_MODELS, onClick: () => { void add() }, style: { ...dshSettingsButtonStyle, justifySelf: 'start' } }, t('avatar.addUse')),\n )),\n createElement(AssistantAvatarEngineProgress, { controller: engine, t }),\n error === '' ? null : createElement('div', { role: 'alert', style: { color: dshThemeColor.error, fontSize: uiFontSize(13) } }, error),\n createElement(AssistantAvatarEngineDialog, { controller: engine, t }),\n )\n}\n\n/** 以数值判断旧配置的档位;选择自定义时才展开输入框,不增加持久字段。 */\nexport function AssistantFloatingSizeControl({ size, custom, disabled, t, onPreset, onSize }: {\n readonly size: number; readonly custom: boolean; readonly disabled: boolean; readonly t: CodingNsTranslator\n readonly onPreset: (preset: 'mini' | 'standard' | 'custom') => void; readonly onSize: (size: number) => void\n}): ReactElement {\n const preset = custom ? 'custom' : size === ASSISTANT_AVATAR_FLOATING_MINI_SIZE ? 'mini' : size === ASSISTANT_AVATAR_FLOATING_STANDARD_SIZE ? 'standard' : 'custom'\n const label = t('avatar.floatingSize')\n return createElement('div', { 'data-codingns-avatar-floating-size': true, style: { display: 'grid', gap: 8 } },\n createElement('label', { style: assistantSettingFieldStyle }, label,\n createElement('select', { value: preset, disabled, 'aria-label': label, style: dshSettingsFieldStyle,\n onChange: (event: { currentTarget: { value: string } }) => { const next = event.currentTarget.value; if (next === 'mini' || next === 'standard' || next === 'custom') onPreset(next) } },\n createElement('option', { value: 'mini' }, t('avatar.size.mini')), createElement('option', { value: 'standard' }, t('avatar.size.standard')),\n createElement('option', { value: 'custom' }, t('avatar.size.custom')))),\n preset !== 'custom' ? null : createElement('label', { style: assistantSettingFieldStyle }, t('avatar.customSize'),\n createElement('input', { key: size, type: 'number', min: ASSISTANT_AVATAR_FLOATING_MINI_SIZE, max: 320, step: 1,\n defaultValue: size, disabled, 'aria-label': t('avatar.customSize'), style: dshSettingsFieldStyle,\n onBlur: (event: { currentTarget: { value: string } }) => {\n const value = Number(event.currentTarget.value)\n if (!disabled && Number.isInteger(value) && value >= ASSISTANT_AVATAR_FLOATING_MINI_SIZE && value <= 320 && value !== size) onSize(value)\n else event.currentTarget.value = String(size)\n } })))\n}\n","import { createElement, useCallback, useEffect, useRef, useState } from 'react'\nimport type { ReactElement } from 'react'\nimport { ASSISTANT_TTS_PARAMETER_LIMITS, ASSISTANT_VOICE_SITES, DEFAULT_ASSISTANT_TTS_PARAMETERS, DEFAULT_ASSISTANT_TTS_SETTINGS, MOSS_BUILTIN_VOICES, readAssistantTtsParameters, validateAssistantTtsParameters, type AssistantTtsParameters, type AssistantTtsSnapshot, type AssistantTtsVoice } from '../../shared/assistant-tts.js'\nimport { CODINGNS_RPC_CHANNEL } from '../../shared/contracts/transport.js'\nimport { MossVoiceOutput } from '../moss-voice-output.js'\nimport { useCodingNsTranslator, type CodingNsTranslator } from '../locale.js'\nimport { dshSettingsButtonStyle, dshSettingsFieldStyle, dshSettingsHelpStyle, dshThemeColor } from '../theme.js'\nimport type { CodingNsClientServices } from './types.js'\nimport { assistantSettingFieldStyle, assistantSettingTextStyle } from '../assistant-settings-styles.js'\nimport { uiFontSize } from '../font-scale.js'\n\n/** 设置页和对话窗口共用独立音色编辑器,不与形象包或识别模型混合。 */\nexport function AssistantVoiceSettings({ services, enabled = true, active = true, embedded = false }: {\n readonly services: CodingNsClientServices; readonly enabled?: boolean; readonly active?: boolean; readonly embedded?: boolean\n}): ReactElement {\n const t = useCodingNsTranslator(services.locale)\n const [snapshot, setSnapshot] = useState<AssistantTtsSnapshot | undefined>()\n const [selectedId, setSelectedId] = useState(DEFAULT_ASSISTANT_TTS_SETTINGS.selectedId)\n const [parameters, setParameters] = useState<AssistantTtsParameters>({ ...DEFAULT_ASSISTANT_TTS_PARAMETERS })\n const [siteId, setSiteId] = useState<string>('kyutai')\n const [source, setSource] = useState('')\n const [name, setName] = useState('')\n const [language, setLanguage] = useState('unknown')\n const [gender, setGender] = useState('unknown')\n const [busy, setBusy] = useState<string | undefined>()\n const [error, setError] = useState('')\n const [writable, setWritable] = useState(() => services.settings.getSnapshot().writable)\n const alive = useRef(false)\n const pending = useRef(false)\n const reading = useRef(false)\n const abort = useRef<AbortController | undefined>()\n const player = useRef<MossVoiceOutput | undefined>()\n if (player.current === undefined) player.current = new MossVoiceOutput()\n useEffect(() => {\n // 折叠时保留导入和参数草稿,但停止合成试听。\n if (!active) player.current?.cancel()\n }, [active])\n const voices = snapshot?.voices ?? MOSS_BUILTIN_VOICES\n const selected = voices.find((voice) => voice.id === selectedId) ?? voices[0]!\n const site = ASSISTANT_VOICE_SITES.find((site) => site.id === siteId) ?? ASSISTANT_VOICE_SITES[0]!\n const disabled = !enabled || !writable || busy !== undefined || snapshot?.status.busy === true\n const ready = snapshot?.status.ready === true\n const backend = snapshot?.settings.backend ?? services.settings.getSnapshot().value?.assistant?.tts?.backend ?? 'browser'\n const moss = backend === 'moss-onnx'\n\n const refresh = useCallback(async (): Promise<void> => {\n if (reading.current) return\n reading.current = true\n try {\n const result = await services.rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/tts/catalog', {}, abort.current?.signal)\n if (!result.ok) throw new Error(result.error.message)\n if (alive.current) setSnapshot(result.value as AssistantTtsSnapshot)\n } catch (error) { if (alive.current) setError(message(error)) }\n finally { reading.current = false }\n }, [services.rpc])\n\n useEffect(() => {\n alive.current = true; abort.current = new AbortController()\n void refresh()\n const changed = (): void => { setWritable(services.settings.getSnapshot().writable); void refresh() }\n const dispose = services.settings.subscribe(changed)\n window.addEventListener('focus', changed)\n return () => { alive.current = false; abort.current?.abort(); player.current?.dispose(); dispose(); window.removeEventListener('focus', changed) }\n }, [refresh, services.settings])\n useEffect(() => { if (snapshot !== undefined) setSelectedId(snapshot.settings.selectedId) }, [snapshot?.settings.selectedId])\n useEffect(() => {\n if (snapshot !== undefined) setParameters(services.configurationDraft ? { ...DEFAULT_ASSISTANT_TTS_PARAMETERS, ...snapshot.settings.parameters } : readAssistantTtsParameters(snapshot.settings.parameters))\n }, [snapshot?.settings.parameters?.rate, snapshot?.settings.parameters?.volume, snapshot?.settings.parameters?.segmentPauseMs, snapshot?.settings.parameters?.chunkTokens, snapshot?.settings.parameters?.seed])\n useEffect(() => {\n if (busy !== 'setup' && snapshot?.status.busy !== true) return undefined\n const timer = setInterval(() => { void refresh() }, 1000)\n return () => clearInterval(timer)\n }, [busy, snapshot?.status.busy, refresh])\n useEffect(() => { if (!enabled || !moss) player.current?.cancel() }, [enabled, moss])\n\n const run = async (action: string, value: Record<string, unknown>): Promise<void> => {\n if (pending.current || disabled) return\n pending.current = true; setBusy(action); setError(''); player.current?.cancel()\n try {\n const result = await services.rpc.call(CODINGNS_RPC_CHANNEL, `assistant/tts/${action}`, value, abort.current?.signal)\n if (!result.ok) throw new Error(result.error.message)\n if (alive.current) { setSnapshot(result.value as AssistantTtsSnapshot); if (action === 'import') { setSource(''); setName('') } }\n // 配置窗口重读时保留内存草稿;独立设置入口仍读取 Host 保存结果。\n if (services.settings.reload !== undefined) await services.settings.reload()\n else await services.settings.load?.()\n } catch (error) { if (alive.current) setError(message(error)) }\n finally { pending.current = false; if (alive.current) { setBusy(undefined); await refresh() } }\n }\n\n const preview = async (): Promise<void> => {\n if (pending.current || disabled || !active || !moss || !ready) return\n pending.current = true; setBusy('preview'); setError('')\n // 固定试听文本留在词典中,不再要求用户填写;使用当前音色和未保存的播报参数。\n try { await player.current!.speak(t('tts.defaultText'), selected.id, undefined, validateAssistantTtsParameters(parameters)) }\n catch (error) { if (alive.current) setError(message(error)) }\n finally { pending.current = false; if (alive.current) setBusy(undefined) }\n }\n const button = (label: string, action: () => void, locked = false): ReactElement => createElement('button', { type: 'button', disabled: disabled || locked, style: dshSettingsButtonStyle, onClick: action }, label)\n const field = (label: string, content: ReactElement): ReactElement => createElement('label', { style: assistantSettingFieldStyle }, createElement('span', null, label), content)\n const input = (value: string, change: (value: string) => void, maxLength = 2048): ReactElement => createElement('input', { value, disabled, maxLength, style: dshSettingsFieldStyle, onChange: (event: { currentTarget: { value: string } }) => change(event.currentTarget.value) })\n const options = (value: string, change: (value: string) => void, values: readonly string[]): ReactElement => createElement('select', { value, disabled, style: dshSettingsFieldStyle, onChange: (event: { currentTarget: { value: string } }) => change(event.currentTarget.value) },\n ...values.map((item) => createElement('option', { key: item, value: item }, t(`tts.${item}`))))\n const number = (key: keyof AssistantTtsParameters, scale = 1, slider = false): ReactElement => {\n const limits = ASSISTANT_TTS_PARAMETER_LIMITS[key]\n const value = parameters[key]\n const change = (event: { currentTarget: { value: string } }): void => {\n const raw = event.currentTarget.value\n const next = { ...parameters, [key]: raw === '' ? key === 'seed' ? null : Number.NaN : Number(raw) / scale }\n setParameters(next)\n if (services.configurationDraft) void services.settings.mutate([{ op: 'set', path: ['assistant', 'tts', 'parameters'], value: next }]).catch((cause) => setError(message(cause)))\n }\n const props = { disabled, min: limits.min * scale, max: limits.max * scale, step: limits.step * scale, onChange: change }\n return field(t(`tts.${key}`), createElement('div', { style: { display: 'grid', gridTemplateColumns: slider ? 'minmax(0, 1fr) 90px' : '1fr', gap: 10, alignItems: 'center' } },\n slider ? createElement('input', { ...props, type: 'range', 'aria-label': t(`tts.${key}`), value: value === null || !Number.isFinite(value) ? DEFAULT_ASSISTANT_TTS_PARAMETERS[key]! * scale : Number((value * scale).toFixed(4)) }) : null,\n createElement('input', { ...props, type: 'number', value: value === null || !Number.isFinite(value) ? '' : Number((value * scale).toFixed(4)),\n placeholder: key === 'seed' ? t('tts.autoSeed') : undefined, 'aria-label': t(`tts.${key}`), style: dshSettingsFieldStyle, 'data-codingns-tts-parameter': key })))\n }\n return createElement('section', { 'aria-label': t('tts.title'), 'data-codingns-voice-settings': true, style: { ...assistantSettingTextStyle, display: 'grid', gap: 12,\n ...(embedded ? {} : { borderTop: `1px solid ${dshThemeColor.border}`, paddingTop: 14 }) } },\n createElement('strong', null, t('tts.title')),\n moss ? createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('tts.description')) : null,\n field(t('tts.backend'), createElement('select', { value: backend, disabled: disabled || snapshot === undefined, style: dshSettingsFieldStyle,\n onChange: (event: { currentTarget: { value: string } }) => { void run('select', { id: selectedId, backend: event.currentTarget.value }) } },\n createElement('option', { value: 'browser' }, t('tts.browser')), createElement('option', { value: 'moss-onnx', disabled: !ready }, t('tts.moss')))),\n createElement('div', { style: { display: 'flex', flexWrap: 'wrap', gap: 8 } }, button(t(services.configurationDraft ? 'tts.prepare' : 'tts.setup'), () => { void run('setup', {}) }),\n moss ? button(t('tts.refresh'), () => { void refresh() }) : null),\n !moss && !snapshot?.status.busy && busy !== 'setup' ? null : createElement('div', { role: 'status', style: dshSettingsHelpStyle },\n snapshot?.status.busy ? snapshot.status.phase : busy === 'setup' ? t('tts.busy') : ready ? t('tts.ready') : t('tts.notReady')),\n snapshot?.status.busy ? createElement('progress', { max: snapshot.status.totalBytes ?? undefined, value: snapshot.status.totalBytes === null ? undefined : snapshot.status.downloadedBytes, style: { width: '100%' }, 'aria-label': snapshot.status.phase }) : null,\n moss ? createElement('div', { 'data-codingns-moss-voices': true, style: { display: 'grid', gap: 12 } },\n field(t('tts.selected'), createElement('select', { value: selectedId, disabled, style: dshSettingsFieldStyle, 'data-codingns-voice-list': true,\n onChange: (event: { currentTarget: { value: string } }) => {\n const id = event.currentTarget.value\n player.current?.cancel(); setSelectedId(id)\n if (services.configurationDraft) void services.settings.mutate([{ op: 'set', path: ['assistant', 'tts', 'selectedId'], value: id }]).catch((cause) => setError(message(cause)))\n } },\n ...voices.map((voice) => createElement('option', { key: voice.id, value: voice.id }, voiceLabel(voice, t))))),\n createElement('div', { style: { ...dshSettingsHelpStyle, overflowWrap: 'anywhere' } }, t('tts.license', { license: selected.license }), ' · ',\n createElement('a', { href: selected.source, target: '_blank', rel: 'noopener noreferrer' }, t('tts.sourceLink'))),\n createElement('div', { style: { display: 'flex', flexWrap: 'wrap', gap: 8 } },\n services.configurationDraft ? null : button(t('tts.apply'), () => { void run('select', { id: selectedId }) }, !ready),\n button(t('tts.preview'), () => { void preview() }, !ready),\n busy !== 'preview' ? null : createElement('button', { type: 'button', style: dshSettingsButtonStyle, onClick: () => player.current?.cancel() }, t('tts.stop')),\n selected.kind !== 'reference' ? null : button(t('tts.remove'), () => { void run('remove', { id: selected.id }) }))) : null,\n createElement('div', { 'data-codingns-tts-controls': true, style: { display: 'grid', gap: 12 } },\n createElement('strong', null, t('tts.playbackSettings')),\n number('rate', 1, true), number('volume', 100, true),\n moss ? createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('tts.rateHint')) : null,\n moss ? createElement('details', null, createElement('summary', { style: { cursor: 'pointer' } }, t('tts.advanced')),\n createElement('div', { style: { display: 'grid', gap: 12, marginTop: 12 } },\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('tts.advancedHint')),\n number('segmentPauseMs'), number('chunkTokens'), number('seed'),\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('tts.seedHint')))) : null,\n moss ? createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('tts.parametersHint')) : null,\n createElement('div', { style: { display: 'flex', flexWrap: 'wrap', gap: 8 } },\n services.configurationDraft ? null : button(t('tts.saveParameters'), () => { void run('configure', { parameters }) }, snapshot === undefined),\n button(t(services.configurationDraft ? 'tts.resetDraftParameters' : 'tts.resetParameters'), () => {\n // 浏览器模式只恢复可见的语速和音量,保留隐藏的 MOSS 高级参数。\n const next = moss ? { ...DEFAULT_ASSISTANT_TTS_PARAMETERS } : { ...parameters, rate: DEFAULT_ASSISTANT_TTS_PARAMETERS.rate, volume: DEFAULT_ASSISTANT_TTS_PARAMETERS.volume }\n setParameters(next)\n if (services.configurationDraft) void services.settings.mutate([{ op: 'set', path: ['assistant', 'tts', 'parameters'], value: next }]).catch((cause) => setError(message(cause)))\n else void run('configure', { parameters: next }) }, snapshot === undefined))),\n moss ? createElement('details', { 'data-codingns-voice-import': true }, createElement('summary', { style: { cursor: 'pointer' } }, t(services.configurationDraft ? 'tts.importDraft' : 'tts.import')),\n createElement('div', { style: { display: 'grid', gap: 12, marginTop: 12 } },\n field(t('tts.site'), createElement('select', { value: siteId, disabled, style: dshSettingsFieldStyle, onChange: (event: { currentTarget: { value: string } }) => setSiteId(event.currentTarget.value) },\n ...ASSISTANT_VOICE_SITES.map((site) => createElement('option', { key: site.id, value: site.id }, site.name)))),\n createElement('a', { href: site.url, target: '_blank', rel: 'noopener noreferrer', 'aria-disabled': !enabled, onClick: (event: { preventDefault: () => void }) => { if (!enabled) event.preventDefault() }, style: { ...dshSettingsButtonStyle, justifySelf: 'start', textDecoration: 'none' } }, t('tts.openSite')),\n createElement('a', { href: siteId === 'aishell' ? 'https://huggingface.co/datasets/AISHELL/AISHELL-3/tree/main/train/wav' : 'https://huggingface.co/kyutai/tts-voices/tree/main/voice-donations', target: '_blank', rel: 'noopener noreferrer', 'aria-disabled': !enabled,\n onClick: (event: { preventDefault: () => void }) => { if (!enabled) event.preventDefault() } }, t('tts.openRecordings')),\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t(siteId === 'aishell' ? 'tts.aishellHint' : 'tts.kyutaiHint')),\n field(t('tts.source'), input(source, setSource)), field(t('tts.name'), input(name, setName, 80)),\n field(t('tts.language'), options(language, setLanguage, ['unknown', 'zh', 'en', 'ja', 'fr'])),\n field(t('tts.gender'), options(gender, setGender, ['unknown', 'male', 'female'])),\n createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('tts.sourceHint')),\n button(t(services.configurationDraft ? 'tts.importDraft' : 'tts.import'), () => { const reference = siteId === 'aishell' && !source.includes(':') ? `aishell:${source}` : source; void run('import', { source: reference, name, language, gender }) }, !ready || source.trim() === ''))) : null,\n error || snapshot?.status.error ? createElement('div', { role: 'alert', style: { color: dshThemeColor.error, fontSize: uiFontSize(13), overflowWrap: 'anywhere' } }, error || snapshot?.status.error) : null)\n}\n\nexport function voiceLabel(voice: AssistantTtsVoice, t: CodingNsTranslator): string {\n const language = ['zh', 'en', 'ja', 'fr', 'unknown'].includes(voice.language) ? t(`tts.${voice.language}`) : voice.language\n return `${voice.name} · ${language} · ${t(`tts.${voice.gender}`)}`\n}\nfunction message(error: unknown): string { return error instanceof Error ? error.message : String(error) }\n","import { createElement, useState } from 'react'\nimport type { ReactElement, ReactNode } from 'react'\nimport type { CodingNsTranslator } from '../locale.js'\nimport { dshThemeColor } from '../theme.js'\nimport { uiFontSize } from '../font-scale.js'\n\ninterface VoiceSettingsGroupProps {\n readonly kind: 'input' | 'output'; readonly hint: string; readonly active: boolean; readonly disabled: boolean\n readonly t: CodingNsTranslator; readonly renderContent: (active: boolean) => ReactNode\n}\n\n/** 两组独立收起,保留子组件实例,避免关闭卡片丢失草稿或中断下载。 */\nexport function AssistantVoiceSettingsGroup(props: VoiceSettingsGroupProps): ReactElement {\n const [expanded, setExpanded] = useState(false)\n return createElement(AssistantVoiceSettingsGroupView, { ...props, expanded, onToggle: setExpanded })\n}\n\n/** 原生折叠语义支持键盘操作;内容保留,隐藏后通过 active 停止试听和闲置查询。 */\nexport function AssistantVoiceSettingsGroupView({ kind, hint, active, disabled, expanded, t, renderContent, onToggle }: VoiceSettingsGroupProps & {\n readonly expanded: boolean; readonly onToggle: (expanded: boolean) => void\n}): ReactElement {\n return createElement('details', { open: expanded, 'data-codingns-voice-settings-group': kind,\n onToggle: (event: { currentTarget: { open: boolean } }) => onToggle(event.currentTarget.open),\n style: { minWidth: 0, border: `1px solid ${dshThemeColor.border}`, borderRadius: 14,\n color: dshThemeColor.labelPrimary, background: dshThemeColor.cardBackground } },\n createElement('summary', { style: { display: 'flex', alignItems: 'center', gap: 12, padding: '16px 18px', minWidth: 0,\n cursor: 'pointer', listStyle: 'none', borderRadius: expanded ? '14px 14px 0 0' : 14 } },\n createElement('span', { 'aria-hidden': true, style: { width: 36, height: 36, flexShrink: 0, display: 'flex', alignItems: 'center',\n justifyContent: 'center', borderRadius: 10, color: dshThemeColor.accent, background: dshThemeColor.surfaceSubtle } }, groupIcon(kind)),\n createElement('span', { style: { display: 'grid', gap: 4, flex: '1 1 auto', minWidth: 0 } },\n createElement('strong', { style: { fontSize: uiFontSize(14), fontWeight: 600, lineHeight: 1.4 } }, t(`voice.settings.${kind}`)),\n createElement('span', { title: hint, style: { fontSize: uiFontSize(12), lineHeight: 1.5, color: dshThemeColor.labelSecondary,\n whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' } }, hint)),\n createElement('svg', { 'aria-hidden': true, width: 18, height: 18, viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', strokeWidth: 1.8,\n style: { flexShrink: 0, color: dshThemeColor.labelSecondary, transform: expanded ? 'rotate(180deg)' : 'none' } },\n createElement('path', { d: 'm6 9 6 6 6-6', strokeLinecap: 'round', strokeLinejoin: 'round' }))),\n createElement('fieldset', { disabled, style: { display: 'grid', gap: 18, margin: 0, padding: 18, minWidth: 0,\n border: 0, borderTop: `1px solid ${dshThemeColor.border}` } }, createElement('style', null, groupCss), renderContent(active && expanded)))\n}\n\nfunction groupIcon(kind: 'input' | 'output'): ReactElement {\n return createElement('svg', { width: 20, height: 20, viewBox: '0 0 24 24', fill: 'none', stroke: 'currentColor', strokeWidth: 1.6,\n strokeLinecap: 'round', strokeLinejoin: 'round' }, kind === 'input'\n ? [createElement('rect', { key: 'mic', x: 9, y: 2, width: 6, height: 12, rx: 3 }),\n createElement('path', { key: 'stand', d: 'M5 10v2a7 7 0 0 0 14 0v-2M12 19v3M8 22h8' })]\n : [createElement('path', { key: 'speaker', d: 'm11 4-6 5H2v6h3l6 5V4Z' }),\n createElement('path', { key: 'sound', d: 'M15 8a6 6 0 0 1 0 8m3-11a10 10 0 0 1 0 14' })])\n}\n\n// 只覆盖这两张卡片:原生三角由统一箭头替代,悬停和键盘焦点沿用宿主主题。\nconst groupCss = `\n[data-codingns-voice-settings-group]>summary::-webkit-details-marker{display:none}\n[data-codingns-voice-settings-group]>summary:hover{background:var(--dsw-alias-interactive-bg-hover,rgba(127,127,127,.06))}\n[data-codingns-voice-settings-group]>summary:focus-visible{outline:2px solid var(--dsw-alias-button-info-fill,#1677ff);outline-offset:2px}\n`\n","import { createElement, useCallback, useEffect, useRef, useState } from 'react'\nimport type { ReactElement, ReactNode } from 'react'\nimport type { AssistantVoiceInitializationSnapshot } from '../../shared/voice-initialization.js'\nimport { DEFAULT_ASSISTANT_TTS_SETTINGS, MOSS_BUILTIN_VOICES } from '../../shared/assistant-tts.js'\nimport { CODINGNS_RPC_CHANNEL } from '../../shared/contracts/transport.js'\nimport { MossVoiceOutput } from '../moss-voice-output.js'\nimport { useCodingNsTranslator, type CodingNsTranslator } from '../locale.js'\nimport { dshSettingsButtonStyle, dshSettingsPrimaryButtonStyle, dshSettingsHelpStyle, dshThemeColor } from '../theme.js'\nimport type { CodingNsClientServices } from './types.js'\nimport { AssistantVoiceSettingsGroup } from './assistant-voice-settings-group.js'\nimport { uiFontSize } from '../font-scale.js'\n\n/** 打开面板只检查缓存,用户点击启用后才安装;首次不展示技术参数或要求填写字段。 */\nexport function AssistantVoiceInitializationPanel({ services, enabled, active, inputSettings, outputSettings }: {\n readonly services: CodingNsClientServices; readonly enabled: boolean; readonly active: boolean\n readonly inputSettings: (active: boolean) => ReactNode; readonly outputSettings: (active: boolean) => ReactNode\n}): ReactElement {\n const t = useCodingNsTranslator(services.locale)\n const [snapshot, setSnapshot] = useState<AssistantVoiceInitializationSnapshot>()\n const [pending, setPending] = useState(false)\n const [error, setError] = useState('')\n const [speaking, setSpeaking] = useState(false)\n const [writable, setWritable] = useState(() => services.settings.getSnapshot().writable)\n const mounted = useRef(false); const submitting = useRef(false); const reading = useRef(false)\n const revision = useRef(0); const abort = useRef<AbortController>()\n const player = useRef<MossVoiceOutput>()\n if (player.current === undefined) player.current = new MossVoiceOutput()\n const refresh = useCallback(async (): Promise<void> => {\n if (reading.current) return\n reading.current = true\n const current = revision.current\n try {\n const result = await services.rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/voice/initialization', {}, abort.current?.signal)\n if (!result.ok) throw new Error(result.error.message)\n if (mounted.current && current === revision.current) { setSnapshot(result.value as AssistantVoiceInitializationSnapshot); setError('') }\n } catch (cause) { if (mounted.current && current === revision.current) setError(message(cause)) }\n finally { reading.current = false }\n }, [services.rpc])\n useEffect(() => {\n mounted.current = true; abort.current = new AbortController()\n const dispose = services.settings.subscribe(() => { setWritable(services.settings.getSnapshot().writable); void refresh() })\n return () => { mounted.current = false; revision.current++; abort.current?.abort(); player.current?.dispose(); dispose() }\n }, [services.settings, refresh])\n useEffect(() => {\n if (!active && !pending && !snapshot?.busy) return undefined\n void refresh()\n const timer = setInterval(() => { void refresh() }, pending || snapshot?.busy ? 1000 : 5000)\n return () => clearInterval(timer)\n }, [active, pending, snapshot?.busy, refresh])\n useEffect(() => { if (!active || !enabled) { player.current?.cancel(); setSpeaking(false) } }, [active, enabled])\n\n const initialize = async (): Promise<void> => {\n if (submitting.current || !enabled || !writable || snapshot === undefined || snapshot.busy) return\n submitting.current = true; revision.current++; setPending(true); setError(''); player.current?.cancel(); setSpeaking(false)\n try {\n const result = await services.rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/voice/initialize', {}, abort.current?.signal)\n if (!result.ok) throw new Error(result.error.message)\n revision.current++\n if (mounted.current) setSnapshot(result.value as AssistantVoiceInitializationSnapshot)\n // 配置窗口保留待保存的模型与后端;独立入口重读 Host 保存结果。\n if (services.settings.reload !== undefined) await services.settings.reload()\n else await services.settings.load?.()\n } catch (cause) { if (mounted.current) setError(message(cause)) }\n finally { submitting.current = false; if (mounted.current) setPending(false) }\n }\n const listen = async (): Promise<void> => {\n if (speaking) { player.current?.cancel(); setSpeaking(false); return }\n if (!enabled || !writable || !snapshot?.ready) return\n setSpeaking(true); setError('')\n try { await player.current!.speak(t('tts.defaultText'), snapshot.tts.settings.selectedId, undefined, snapshot.tts.settings.parameters) }\n catch (cause) { if (mounted.current) setError(message(cause)) }\n finally { if (mounted.current) setSpeaking(false) }\n }\n return createElement('div', { style: { display: 'grid', gap: 18 } },\n createElement(AssistantVoiceInitializationView, { snapshot, pending, error, disabled: !enabled || !writable, speaking, draft: services.configurationDraft === true, t,\n onInitialize: () => { void initialize() }, onListen: () => { void listen() }, onRefresh: () => { void refresh() } }),\n createElement(AssistantVoiceSettingsGroup, { kind: 'input', hint: snapshot?.modelLabel ?? t('voice.settings.inputDescription'),\n active, disabled: !enabled || !writable || pending || snapshot?.busy === true, t, renderContent: inputSettings }),\n createElement(AssistantVoiceSettingsGroup, { kind: 'output', hint: snapshot?.tts.settings.backend === 'browser' ? t('tts.browser')\n : snapshot?.tts.voices.find((voice) => voice.id === snapshot.tts.settings.selectedId)?.name ?? t('voice.settings.outputDescription'),\n active, disabled: !enabled || !writable || pending || snapshot?.busy === true, t, renderContent: outputSettings }))\n}\n\n/** 纯展示层覆盖未配置、准备中、失败与完成四态,重试仍只有一个入口。 */\nexport function AssistantVoiceInitializationView({ snapshot, pending, error, disabled, speaking, draft = false, t, onInitialize, onListen, onRefresh }: {\n readonly snapshot: AssistantVoiceInitializationSnapshot | undefined; readonly pending: boolean; readonly error: string\n readonly disabled: boolean; readonly speaking: boolean; readonly t: CodingNsTranslator\n readonly draft?: boolean\n readonly onInitialize: () => void; readonly onListen: () => void; readonly onRefresh: () => void\n}): ReactElement {\n const busy = pending || snapshot?.busy === true\n const ready = snapshot?.ready === true\n const failure = error || snapshot?.error\n const voice = snapshot?.tts.voices.find((voice) => voice.id === snapshot.tts.settings.selectedId)\n const label = busy ? t(snapshot?.phase === 'speech' || snapshot?.tts.status.busy ? 'tts.wizardSpeech' : 'tts.wizardRecognition')\n : ready ? t(draft ? 'tts.wizardDraftReady' : 'tts.wizardReady') : snapshot === undefined ? t('tts.wizardChecking') : t('tts.wizardDescription')\n const progress = snapshot?.progress\n const value = busy && progress?.totalBytes != null && progress.totalBytes > 0 ? Math.min(progress.downloadedBytes, progress.totalBytes) : undefined\n return createElement('section', { 'data-codingns-voice-initialization': ready ? 'ready' : busy ? 'preparing' : failure ? 'failed' : 'initial',\n 'aria-label': t('tts.wizardTitle'), style: { display: 'grid', gap: 12, padding: 18, borderRadius: 12,\n border: `1px solid ${dshThemeColor.border}`, background: dshThemeColor.surfaceSubtle } },\n createElement('strong', null, t(ready ? 'tts.wizardReady' : 'tts.wizardTitle')),\n createElement('p', { role: 'status', 'aria-live': 'polite', style: { ...dshSettingsHelpStyle, margin: 0 } }, label),\n ready ? null : createElement('div', { style: { display: 'grid', gap: 5, fontSize: uiFontSize(13), overflowWrap: 'anywhere' } },\n createElement('span', null, t('tts.wizardModel', { model: snapshot?.modelId === 'custom' ? t('voice.models.custom') : snapshot?.modelLabel ?? t('tts.wizardDefault') })),\n createElement('span', null, t('tts.wizardVoice', { voice: voice?.name ?? MOSS_BUILTIN_VOICES.find((item) => item.id === DEFAULT_ASSISTANT_TTS_SETTINGS.selectedId)?.name ?? 'Yuewen' }))),\n busy ? createElement('div', { style: { display: 'grid', gap: 6 } },\n createElement('progress', { max: progress?.totalBytes ?? 1, ...(value === undefined ? {} : { value }), 'aria-label': label, style: { width: '100%' } }),\n snapshot?.phase !== 'speech' || progress === null || progress === undefined ? null : createElement('small', { style: dshSettingsHelpStyle }, progress.label)) : null,\n ready ? null : createElement('p', { style: { ...dshSettingsHelpStyle, margin: 0 } }, t('tts.wizardHint')),\n createElement('div', { style: { display: 'flex', flexWrap: 'wrap', gap: 8 } },\n createElement('button', { type: 'button', disabled: disabled || busy || snapshot === undefined,\n onClick: ready ? onListen : onInitialize, style: dshSettingsPrimaryButtonStyle },\n t(ready ? speaking ? 'tts.stop' : 'tts.wizardListen' : busy ? 'tts.wizardPreparing' : failure ? 'tts.wizardRetry' : draft ? 'tts.wizardPrepareResources' : 'tts.wizardEnable')),\n snapshot !== undefined && !failure ? null : createElement('button', { type: 'button', disabled: busy, onClick: onRefresh, style: dshSettingsButtonStyle }, t('tts.refresh'))),\n failure ? createElement('div', { role: 'alert', style: { color: dshThemeColor.error, fontSize: uiFontSize(13), overflowWrap: 'anywhere' } }, failure) : null)\n}\nfunction message(cause: unknown): string { return cause instanceof Error ? cause.message : String(cause) }\n","import { CODINGNS_RPC_CHANNEL } from '../shared/contracts/transport.js'\nimport type { AssistantVoiceModelProgress } from '../shared/voice-models.js'\nimport type { CodingNsRpcClient } from './features/types.js'\n\n/** 复用页面 RPC 查询下载状态;每次查询返回后再安排下一次,避免请求积压。 */\nexport function watchVoiceModelSetupProgress(\n rpc: CodingNsRpcClient,\n request: { readonly modelId: string; readonly requestId: string },\n onProgress: (progress: AssistantVoiceModelProgress) => void,\n): () => void {\n let active = true\n let timer: ReturnType<typeof setTimeout> | undefined\n const controller = new AbortController()\n const poll = async (): Promise<void> => {\n try {\n const result = await rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/voice/setup-progress', request, controller.signal)\n const progress = result.ok ? result.value as AssistantVoiceModelProgress | null : null\n if (active && progress != null && progress.modelId === request.modelId) onProgress(progress)\n } catch {\n // 查询暂时失败时保留最后的进度;初始化请求本身负责报告最终错误。\n }\n if (active) timer = setTimeout(() => void poll(), 300)\n }\n void poll()\n return () => {\n active = false\n clearTimeout(timer)\n controller.abort()\n }\n}\n","import { createElement, useCallback, useEffect, useRef, useState } from 'react'\nimport type { CSSProperties, ReactElement } from 'react'\nimport { CODINGNS_RPC_CHANNEL } from '../../shared/contracts/transport.js'\nimport type { AssistantVoiceSettings } from '../../shared/contracts/config.js'\nimport { ASSISTANT_VOICE_MODEL_CATALOG, findAssistantVoiceModel, type AssistantVoiceModel, type AssistantVoiceModelProgress, type AssistantVoiceModelStatus, type AssistantVoiceModelsSnapshot } from '../../shared/voice-models.js'\nimport { watchVoiceModelSetupProgress } from '../voice-model-setup-progress.js'\nimport type { CodingNsClientServices } from './types.js'\nimport { dshSettingsButtonStyle, dshSettingsPrimaryButtonStyle, dshThemeColor } from '../theme.js'\nimport { useCodingNsTranslator, type CodingNsTranslator } from '../locale.js'\nimport { assistantSettingCheckboxStyle, assistantSettingTextStyle } from '../assistant-settings-styles.js'\nimport { DEFAULT_VOICE_MODEL_ID } from '../../shared/voice-initialization.js'\nimport { uiFontSize } from '../font-scale.js'\n\n/** 旧入口继续使用弹窗,与声音页共用同一套模型操作。 */\nexport function VoiceInitializationDialog({ services, value, onClose }: {\n readonly services: CodingNsClientServices; readonly value: AssistantVoiceSettings; readonly onClose: () => void\n}): ReactElement {\n return createElement(VoiceModelManager, { services, value, onClose })\n}\n\n/** 识别模型独立展示,不依赖 MOSS 初始化或高级声音设置的展开状态。 */\nexport function VoiceModelManagerPanel({ services, value, enabled, active }: {\n readonly services: CodingNsClientServices; readonly value: AssistantVoiceSettings\n readonly enabled: boolean; readonly active: boolean\n}): ReactElement {\n return createElement(VoiceModelManager, { services, value, enabled, active })\n}\n\n/** 选中的卡片与 Host 当前配置分开保存,操作完成后重新读取文件事实。 */\nfunction VoiceModelManager({ services, value, enabled = true, active = true, onClose }: {\n readonly services: CodingNsClientServices; readonly value: AssistantVoiceSettings\n readonly enabled?: boolean; readonly active?: boolean; readonly onClose?: () => void\n}): ReactElement {\n const t = useCodingNsTranslator(services.locale)\n const [modelId, setModelId] = useState(() => findAssistantVoiceModel(value.modelId ?? '')?.id ?? DEFAULT_VOICE_MODEL_ID)\n const [snapshot, setSnapshot] = useState<AssistantVoiceModelsSnapshot | undefined>()\n const [refreshing, setRefreshing] = useState(true)\n const [busy, setBusy] = useState<'setup' | 'verify' | 'repair' | undefined>()\n const [progress, setProgress] = useState<AssistantVoiceModelProgress | undefined>()\n const [error, setError] = useState<string | undefined>()\n const [loadError, setLoadError] = useState<string | undefined>()\n const [success, setSuccess] = useState<string | undefined>()\n const mounted = useRef(true)\n const readAbort = useRef<AbortController | undefined>()\n const stopProgress = useRef<(() => void) | undefined>()\n const pending = useRef(false)\n const [settings, setSettings] = useState(() => services.settings.getSnapshot())\n\n const refresh = useCallback(async (): Promise<void> => {\n readAbort.current?.abort()\n const controller = new AbortController()\n readAbort.current = controller\n setRefreshing(true)\n try {\n const result = await services.rpc.call(CODINGNS_RPC_CHANNEL, 'assistant/voice/models', {}, controller.signal)\n if (!mounted.current || controller.signal.aborted) return\n if (!result.ok) throw new Error(result.error.message)\n setSnapshot(result.value as AssistantVoiceModelsSnapshot)\n setLoadError(undefined)\n } catch (cause) {\n if (mounted.current && !controller.signal.aborted) setLoadError(errorMessage(cause))\n } finally {\n if (mounted.current && !controller.signal.aborted) setRefreshing(false)\n }\n }, [services.rpc])\n\n useEffect(() => {\n mounted.current = true\n return () => { mounted.current = false; readAbort.current?.abort(); stopProgress.current?.() }\n }, [services.rpc])\n\n useEffect(() => {\n if (active) void refresh()\n const onFocus = (): void => { if (active) void refresh() }\n window.addEventListener('focus', onFocus)\n const unsubscribe = services.settings.subscribe(() => {\n setSettings(services.settings.getSnapshot())\n if (active || pending.current) void refresh()\n })\n return () => { window.removeEventListener('focus', onFocus); unsubscribe() }\n }, [active, refresh, services.settings])\n\n // 向导或其他窗口改变当前模型后同步选中项;普通状态刷新保留用户尚未应用的选择。\n useEffect(() => {\n const current = findAssistantVoiceModel((services.configurationDraft ? value.modelId : snapshot?.currentModelId) ?? '')\n if (current !== undefined) setModelId(current.id)\n }, [snapshot?.currentModelId, services.configurationDraft, value.modelId])\n\n useEffect(() => {\n if (!active || snapshot?.operation == null || busy !== undefined) return undefined\n const timer = setTimeout(() => void refresh(), 1000)\n return () => clearTimeout(timer)\n }, [active, snapshot, busy, refresh])\n\n useEffect(() => {\n if (onClose === undefined) return undefined\n const onEscape = (event: KeyboardEvent): void => { if (event.key === 'Escape' && !pending.current) onClose() }\n document.addEventListener('keydown', onEscape)\n return () => document.removeEventListener('keydown', onEscape)\n }, [onClose])\n\n const run = async (kind: 'setup' | 'verify' | 'repair'): Promise<void> => {\n if (!active || !enabled || pending.current || snapshot === undefined || snapshot.operation !== null) return\n if (kind !== 'verify' && (snapshot.runtimeRunning || !settings.writable || settings.status === 'loading')) return\n pending.current = true\n setBusy(kind); setError(undefined); setSuccess(undefined); setProgress(undefined)\n try {\n const request = { modelId, requestId: `voice-model-${Date.now()}-${Math.random().toString(36).slice(2)}`, repair: kind === 'repair' }\n if (kind !== 'verify') stopProgress.current = watchVoiceModelSetupProgress(services.rpc, request, (next) => { if (mounted.current) setProgress(next) })\n const result = await services.rpc.call(CODINGNS_RPC_CHANNEL, kind === 'verify' ? 'assistant/voice/model/verify' : 'assistant/voice/setup', request)\n if (!mounted.current) return\n if (!result.ok) throw new Error(result.error.message)\n if (kind !== 'verify') {\n // 工作台仅更新资源草稿;独立模型管理仍重读 Host 保存结果。\n if (services.settings.reload !== undefined) await services.settings.reload()\n else await services.settings.load?.()\n }\n if (!mounted.current) return\n setSuccess(t(kind === 'verify' ? 'voice.models.verified' : services.configurationDraft ? 'voice.models.prepared' : 'voice.models.applied'))\n } catch (cause) { if (mounted.current) setError(errorMessage(cause)) }\n finally {\n stopProgress.current?.(); stopProgress.current = undefined; pending.current = false\n if (mounted.current) { setBusy(undefined); await refresh() }\n }\n }\n const choose = (id: string): void => { setModelId(id); setError(undefined); setSuccess(undefined); setProgress(undefined) }\n const manager = createElement(VoiceModelManagerView, { snapshot, modelId, refreshing, busy, progress, error: error ?? loadError, success,\n enabled, writable: settings.writable && settings.status !== 'loading', onSelect: choose, onRefresh: () => void refresh(), onRun: (kind) => void run(kind), ...(onClose === undefined ? {} : { onClose }), t })\n if (onClose === undefined) return createElement('section', {\n 'data-codingns-voice-model-manager': true, 'aria-label': t('awb.asr'), 'aria-busy': refreshing || busy !== undefined,\n style: { display: 'grid', minWidth: 0 },\n }, manager)\n return createElement('div', {\n role: 'presentation', onPointerDown: () => { if (!pending.current) onClose() },\n style: { position: 'fixed', inset: 0, zIndex: 10000, display: 'flex', alignItems: 'center', justifyContent: 'center', padding: 16, background: dshThemeColor.overlay, boxSizing: 'border-box' },\n }, createElement('div', {\n role: 'dialog', 'aria-modal': true, 'aria-label': t('voice.setup.title'), 'aria-busy': busy !== undefined,\n onPointerDown: (event: { stopPropagation: () => void }) => event.stopPropagation(),\n style: { display: 'flex', flexDirection: 'column', width: 'min(680px, 100%)', maxHeight: 'min(780px, 100%)', color: dshThemeColor.labelPrimary, background: dshThemeColor.menuBackground, border: `1px solid ${dshThemeColor.border}`, borderRadius: 14, boxShadow: dshThemeColor.prominentShadow, overflow: 'hidden', boxSizing: 'border-box' },\n }, manager))\n}\n\n/** 展示层保留下载、配置和验证三个维度,避免把选择动作显示成启用成功。 */\nexport function VoiceModelManagerView({ snapshot, modelId, refreshing, busy, progress, error, success, writable, enabled = true, onSelect, onRefresh, onRun, onClose, t }: {\n readonly snapshot: AssistantVoiceModelsSnapshot | undefined; readonly modelId: string; readonly refreshing: boolean\n readonly busy: 'setup' | 'verify' | 'repair' | undefined; readonly progress: AssistantVoiceModelProgress | undefined\n readonly error: string | undefined; readonly success: string | undefined; readonly writable: boolean\n readonly enabled?: boolean\n readonly onSelect: (id: string) => void; readonly onRefresh: () => void; readonly onRun: (kind: 'setup' | 'verify' | 'repair') => void; readonly onClose?: () => void\n readonly t: CodingNsTranslator\n}): ReactElement {\n const current = findAssistantVoiceModel(snapshot?.currentModelId ?? '')\n const selected = snapshot?.models.find((model) => model.modelId === modelId)\n const locked = !enabled || busy !== undefined || snapshot?.operation != null\n const canApply = snapshot !== undefined && !locked && writable && !snapshot.runtimeRunning\n const alreadyUsed = selected?.current === true && selected.validation.state === 'passed' && selected.state === 'downloaded'\n const action = selected?.state === 'partial' ? t('voice.models.completeDownload') : selected?.state === 'downloaded'\n ? alreadyUsed ? t('voice.models.inUse') : t('voice.models.use') : t('voice.models.downloadUse')\n return createElement('div', { style: { display: 'contents' } },\n createElement('div', { style: { padding: onClose === undefined ? '0 0 12px' : '20px 22px 16px', display: 'grid', gap: 6 } },\n createElement('div', { style: { ...rowStyle, flexWrap: 'wrap' } }, createElement('strong', { style: { fontSize: onClose === undefined ? 14 : 19, lineHeight: 1.4 } }, t(onClose === undefined ? 'awb.asr' : 'voice.setup.title')),\n button(t(refreshing ? 'voice.models.refreshing' : 'voice.models.refresh'), refreshing || busy !== undefined, onRefresh)),\n createElement('span', { style: helpStyle }, t('voice.models.description')),\n onClose === undefined ? createElement('span', { style: helpStyle }, t('voice.models.recognitionHint')) : null,\n ),\n createElement('div', { style: { ...(onClose === undefined ? {} : { overflowY: 'auto' }), minHeight: 0,\n padding: onClose === undefined ? '0 0 16px' : '0 22px 18px', display: 'grid', gap: 12 } },\n createElement('div', { style: { ...noticeStyle, display: 'grid', gap: 5 } },\n createElement('span', { style: helpStyle }, t('voice.models.current')),\n createElement('strong', { style: { fontSize: uiFontSize(14), overflowWrap: 'anywhere' } }, snapshot === undefined ? t('voice.models.unknown') : current?.label ?? (snapshot.currentModelId ? t('voice.models.custom') : t('voice.models.none'))),\n snapshot === undefined ? null : createElement('span', { style: helpStyle }, t(snapshot.runtimeRunning ? 'voice.models.running' : snapshot.runtimeReady ? 'voice.models.ready' : 'voice.models.stopped')),\n ),\n snapshot === undefined && error === undefined ? createElement('div', { role: 'status', style: helpStyle }, t('voice.models.loading')) : null,\n createElement('div', { role: 'radiogroup', 'aria-label': t('voice.setup.model'), style: { display: 'grid', gap: 10 } },\n ...ASSISTANT_VOICE_MODEL_CATALOG.map((model) => createElement(VoiceModelCard, { key: model.id, model, status: snapshot?.models.find((status) => status.modelId === model.id), selected: model.id === modelId, disabled: locked || snapshot === undefined, onSelect, t }))),\n busy === undefined ? null : createElement('div', { style: noticeStyle }, createElement(VoiceModelSetupProgress, { progress: busy === 'verify'\n ? { modelId, phase: 'verifying', fileName: null, fileIndex: 0, fileCount: 0, downloadedBytes: 0, totalBytes: null } : progress, t })),\n snapshot?.operation == null || busy !== undefined ? null : createElement('div', { role: 'status', style: noticeStyle }, t('voice.models.otherOperation')),\n snapshot?.runtimeRunning ? createElement('div', { style: helpStyle }, t('voice.models.stopBeforeSwitch')) : null,\n success === undefined ? null : createElement('div', { role: 'status', style: { ...noticeStyle, color: dshThemeColor.success } }, success),\n error === undefined ? null : createElement('div', { role: 'alert', style: { ...noticeStyle, color: dshThemeColor.error, overflowWrap: 'anywhere', whiteSpace: 'pre-wrap' } }, error),\n createElement('span', { style: helpStyle }, t('voice.models.localHint')),\n ),\n createElement('div', { style: { display: 'flex', justifyContent: 'flex-end', flexWrap: 'wrap', gap: 8,\n padding: onClose === undefined ? '14px 0 0' : '14px 22px', borderTop: `1px solid ${dshThemeColor.border}` } },\n onClose === undefined ? null : button(t('voice.models.close'), busy !== undefined, onClose),\n selected?.state === 'missing' || selected === undefined ? null : button(t('voice.models.redownload'), !canApply, () => onRun('repair')),\n button(t('voice.models.verify'), locked || selected?.state !== 'downloaded', () => onRun('verify')),\n button(action, !canApply || alreadyUsed || selected === undefined, () => onRun('setup'), true)),\n )\n}\n\n/** 文件详情按需展开,模型下载状态与最近验证结果始终可见。 */\nexport function VoiceModelCard({ model, status, selected, disabled, onSelect, t }: {\n readonly model: AssistantVoiceModel; readonly status: AssistantVoiceModelStatus | undefined; readonly selected: boolean\n readonly disabled: boolean; readonly onSelect: (id: string) => void; readonly t: CodingNsTranslator\n}): ReactElement {\n const state = status === undefined ? t('voice.models.unknown') : t(status.state === 'downloaded' ? 'voice.models.downloaded' : status.state === 'partial' ? 'voice.models.partial' : 'voice.models.missing')\n const validation = status?.validation.state === 'passed' ? t('voice.models.passed') : status?.validation.state === 'failed' ? t('voice.models.failed') : t('voice.models.unchecked')\n return createElement('div', { style: { border: `1px solid ${selected ? dshThemeColor.accent : dshThemeColor.border}`, borderRadius: 9, padding: '12px 14px', background: selected ? dshThemeColor.surfaceSubtle : dshThemeColor.menuBackground, display: 'grid', gap: 8 } },\n createElement('label', { style: { ...assistantSettingCheckboxStyle, cursor: disabled ? 'default' : 'pointer' } },\n createElement('input', { type: 'radio', name: 'voice-model', value: model.id, checked: selected, disabled, onChange: () => onSelect(model.id), style: { margin: '3px 0 0', accentColor: dshThemeColor.accent, flexShrink: 0 } }),\n createElement('span', { style: { display: 'grid', gap: 5, minWidth: 0, flex: 1 } },\n createElement('span', { style: { ...assistantSettingTextStyle, overflowWrap: 'anywhere' } }, model.label),\n createElement('span', { style: helpStyle }, model.description),\n createElement('span', { style: { display: 'flex', flexWrap: 'wrap', gap: 6 } },\n badge(state, status?.state === 'downloaded' ? dshThemeColor.success : dshThemeColor.labelSecondary),\n status?.current ? badge(t('voice.models.inUse'), dshThemeColor.accent) : null,\n status?.state === 'downloaded' ? badge(validation, status.validation.state === 'passed' ? dshThemeColor.success : status.validation.state === 'failed' ? dshThemeColor.error : dshThemeColor.labelSecondary) : null))),\n status === undefined ? null : createElement('div', { style: { paddingLeft: 23, display: 'grid', gap: 6 } },\n createElement('span', { style: helpStyle }, t('voice.models.fileCount', { count: status.files.filter((file) => file.present).length, total: status.files.length, size: formatDownloadSize(status.totalBytes) })),\n status.validation.checkedAt === null ? null : createElement('span', { style: helpStyle }, t('voice.models.checkedAt', { time: new Date(status.validation.checkedAt).toLocaleString() })),\n status.validation.error === null ? null : createElement('span', { style: { ...helpStyle, color: dshThemeColor.error, overflowWrap: 'anywhere' } }, status.validation.error),\n createElement('details', null, createElement('summary', { style: { ...helpStyle, cursor: 'pointer' } }, t('voice.models.fileDetails')),\n createElement('div', { style: { display: 'grid', gap: 9, marginTop: 9 } }, ...status.files.map((file) => createElement('div', { key: file.name, style: { display: 'grid', gap: 2 } },\n createElement('span', { style: { ...rowStyle, fontSize: uiFontSize(12) } }, createElement('span', { style: { overflowWrap: 'anywhere' } }, file.name),\n createElement('span', { style: { flexShrink: 0, color: file.present ? dshThemeColor.labelSecondary : dshThemeColor.error } }, file.present ? formatDownloadSize(file.bytes) : file.partialBytes > 0 ? t('voice.models.partialSize', { size: formatDownloadSize(file.partialBytes) }) : t('voice.models.fileMissing'))),\n createElement('span', { style: { ...helpStyle, fontSize: uiFontSize(11), overflowWrap: 'anywhere', fontFamily: dshThemeColor.codeFont } }, file.path)))))))\n}\n\n/** 已下载的字节进度与模型验证、配置阶段分别显示。 */\nexport function VoiceModelSetupProgress({ progress, t }: { readonly progress: AssistantVoiceModelProgress | undefined; readonly t: CodingNsTranslator }): ReactElement {\n const downloading = progress?.phase === 'downloading'\n const downloaded = progress?.phase === 'initializing' || progress?.phase === 'completed'\n const percent = downloaded ? 100 : downloading && progress.totalBytes !== null && progress.totalBytes > 0 ? Math.min(100, Math.floor(progress.downloadedBytes / progress.totalBytes * 100)) : undefined\n const label = downloading ? t('voice.setup.downloadFile', { index: progress.fileIndex, count: progress.fileCount }) : progress?.phase === 'verifying' ? t('voice.models.verifying')\n : progress?.phase === 'initializing' ? t('voice.setup.initializing') : progress?.phase === 'completed' ? t('voice.setup.completed') : t('voice.setup.checking')\n const bytes = downloading ? progress.totalBytes === null ? t('voice.setup.downloadedSize', { size: formatDownloadSize(progress.downloadedBytes) }) : `${formatDownloadSize(progress.downloadedBytes)} / ${formatDownloadSize(progress.totalBytes)}` : undefined\n return createElement('div', { role: 'status', 'aria-live': 'polite', style: { display: 'grid', gap: 7, color: dshThemeColor.labelSecondary, fontSize: uiFontSize(13), lineHeight: 1.5 } },\n createElement('div', { style: rowStyle }, createElement('span', null, label), percent === undefined ? null : createElement('span', { style: { flexShrink: 0, fontVariantNumeric: 'tabular-nums' } }, downloading ? t('voice.setup.filePercent', { percent }) : '100%')),\n createElement('progress', { max: 100, ...(percent === undefined ? {} : { value: percent }), 'aria-label': downloading ? t('voice.setup.fileProgress') : label, style: { display: 'block', width: '100%', height: 10, accentColor: dshThemeColor.accent } }),\n downloading ? createElement('span', { style: { overflowWrap: 'anywhere' } }, progress.fileName) : null,\n bytes === undefined ? null : createElement('span', { style: { fontVariantNumeric: 'tabular-nums' } }, bytes))\n}\n\nfunction formatDownloadSize(bytes: number): string {\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n}\nfunction errorMessage(cause: unknown): string { return cause instanceof Error ? cause.message : String(cause) }\nfunction button(label: string, disabled: boolean, onClick: () => void, primary = false): ReactElement {\n return createElement('button', { type: 'button', disabled, onClick, style: {\n ...(primary ? dshSettingsPrimaryButtonStyle : dshSettingsButtonStyle), whiteSpace: 'nowrap', flexShrink: 0,\n ...(disabled ? { opacity: 0.5, cursor: 'default' } : {}),\n } }, label)\n}\nfunction badge(label: string, color: string): ReactElement { return createElement('span', { style: { padding: '2px 7px', border: `1px solid ${dshThemeColor.border}`, borderRadius: 5, fontSize: uiFontSize(11), lineHeight: 1.4, color } }, label) }\nconst rowStyle: CSSProperties = { display: 'flex', justifyContent: 'space-between', alignItems: 'center', gap: 12 }\nconst helpStyle: CSSProperties = { color: dshThemeColor.labelSecondary, fontSize: uiFontSize(12), lineHeight: 1.55 }\nconst noticeStyle: CSSProperties = { padding: '11px 13px', borderRadius: 8, background: dshThemeColor.surfaceSubtle, fontSize: uiFontSize(13), lineHeight: 1.55 }\n","import { createElement, useEffect, useState } from 'react'\nimport type { CSSProperties, ReactElement } from 'react'\nimport type { AssistantChatCatalog } from '../../shared/contracts/assistant.js'\nimport { ASSISTANT_PERSONALITY_MAX_CHARS } from '../../shared/assistant-lifecycle.js'\nimport { listAssistantAvatars, normalizeAssistantAppearance } from '../../shared/assistant-avatar.js'\nimport type { AssistantTtsSnapshot } from '../../shared/assistant-tts.js'\nimport { readAssistantPrompts } from '../../shared/assistant-prompts.js'\nimport type { CodingNsTranslator } from '../locale.js'\nimport { dshSettingsButtonStyle, dshSettingsFieldStyle, dshSettingsHelpStyle, dshThemeColor } from '../theme.js'\nimport { peerHostTagStyle, resolvePeerHostColor } from '../peer-host-color.js'\nimport { AssistantAvatarPortraitEditor } from '../avatar/portrait-editor.js'\nimport type { AssistantAvatarModel } from '../../shared/assistant-avatar.js'\nimport { AssistantAppearanceEditor } from '../avatar/settings-panel.js'\nimport { AssistantAvatarPicker, assistantAvatarChoices } from '../avatar/catalog-picker.js'\nimport { getAssistantAvatarManager } from '../avatar/manager.js'\nimport { AssistantAvatarEngineDialog, AssistantAvatarEngineProgress, useAssistantAvatarEngine } from '../avatar/engine.js'\nimport type { AssistantAvatarPreviewTargetProps } from '../avatar/catalog-panel.js'\nimport { AssistantVoiceSettings } from './assistant-voice-settings.js'\nimport { AssistantVoiceInitializationPanel } from './assistant-voice-initialization.js'\nimport { VoiceModelManagerPanel } from './voice-initialization-dialog.js'\nimport { AssistantPromptEditor } from './assistant-prompt-editor.js'\nimport { getGlobalVoiceAdapter } from '../global-voice-runtime-registry.js'\nimport type { AssistantConfigurationTab } from './assistant-configuration-tabs.js'\nimport { assistantSettingFieldStyle } from '../assistant-settings-styles.js'\nimport type { CodingNsClientServices } from './types.js'\nimport type { AssistantDraft } from './assistant-workbench.js'\n\nimport type { AssistantSettings } from '../../shared/contracts/config.js'\nimport type { NativeWorkspaceRecord } from '../native-workspace-store.js'\nimport { SettingsToggleRow } from '../settings-controls.js'\nimport { ASSISTANT_NOTIFICATION_AUTO_CLOSE_SECONDS, normalizeAssistantNotificationSettings, type AssistantNotificationAutoCloseSeconds } from '../../shared/assistant-notifications.js'\nimport { uiFontSize } from '../font-scale.js'\n\n/** 创建与配置共用形象选择:选中 Live2D 时先确认引擎许可并自动安装,成功后才改草稿。 */\nfunction AssistantAvatarSelectionField({ services, appearance, avatarId, avatars, includeLegacy, disabled, t, onChange }: {\n readonly services: CodingNsClientServices\n readonly appearance: ReturnType<typeof normalizeAssistantAppearance>\n readonly avatarId: string\n readonly avatars: readonly AssistantAvatarModel[]\n readonly includeLegacy: boolean\n readonly disabled: boolean\n readonly t: CodingNsTranslator\n readonly onChange: (patch: Partial<AssistantDraft>) => void\n}): ReactElement {\n const manager = getAssistantAvatarManager(services)\n const engine = useAssistantAvatarEngine({ services, manager, appearance, disabled })\n const choices = assistantAvatarChoices(appearance, [], t, includeLegacy)\n const avatar = avatars.find((model) => model.id === avatarId)\n const list = choices.some((choice) => choice.id === avatarId) ? choices\n : [{ id: avatarId, label: t('awb.unavailableSelection', { id: avatarId }), thirdParty: false, disabled: true }, ...choices]\n const choose = (choice: { readonly id: string }): void => {\n if (disabled || !avatars.some((model) => model.id === choice.id)) return\n const model = avatars.find((item) => item.id === choice.id)\n if (model?.renderer === 'live2d') { void engine.ensure(() => onChange({ avatarId: choice.id })); return }\n onChange({ avatarId: choice.id })\n }\n return createElement('div', { style: { display: 'grid', gap: 8 } },\n createElement(AssistantAvatarPicker, { label: t('awb.avatar'), value: avatarId, disabled: disabled || engine.installing, t, choices: list, onChoose: choose }),\n createElement(AssistantAvatarEngineProgress, { controller: engine, t }),\n createElement('p', { style: help }, t('avatar.externalHint')),\n avatar?.renderer !== 'live2d' ? null : createElement('p', { style: help }, t('avatar.live2dDependencyHint')),\n createElement(AssistantAvatarEngineDialog, { controller: engine, t }))\n}\n\nexport function AssistantConfigurationFields({ draft, catalog, appearance, initializing = false, includeAvatar = true, services, t, disabled, onChange }: {\n readonly draft: AssistantDraft; readonly catalog: AssistantChatCatalog | undefined\n readonly appearance: ReturnType<typeof normalizeAssistantAppearance>; readonly t: CodingNsTranslator\n readonly initializing?: boolean\n readonly includeAvatar?: boolean\n readonly services?: CodingNsClientServices\n readonly disabled: boolean; readonly onChange: (patch: Partial<AssistantDraft>) => void\n}): ReactElement {\n const models = catalog?.models ?? []; const avatars = listAssistantAvatars(appearance, !initializing)\n const avatar = avatars.find((model) => model.id === draft.avatarId)\n const avatarChoices = assistantAvatarChoices(appearance, [], t, !initializing)\n const input = (label: string, node: ReactElement): ReactElement => createElement('label', { style: field }, createElement('span', null, label), node)\n const select = (label: string, value: string, change: (value: string) => void, options: ReactElement[]): ReactElement => input(label, createElement('select', { value, disabled, style: identityFieldStyle, onChange: (event: { currentTarget: { value: string } }) => change(event.currentTarget.value) }, ...options))\n const missing = (id: string): ReactElement => createElement('option', { key: id, value: id }, t('awb.unavailableSelection', { id }))\n return createElement('div', { 'data-codingns-assistant-identity': true, style: { display: 'grid', gap: 11 } },\n // 名称与头像始终左右排列,裁剪面板和本地保存说明跨两列展开。\n createElement('div', { 'data-codingns-assistant-identity-row': true, style: { display: 'grid', alignItems: 'start',\n gridTemplateColumns: services === undefined || avatar === undefined ? 'minmax(0, 1fr)' : 'minmax(0, 1fr) minmax(0, 176px)', columnGap: 16, rowGap: 8, minWidth: 0 } },\n input(t('awb.name'), createElement('input', { value: draft.name, maxLength: 80, disabled, placeholder: t('awb.namePlaceholder'), style: identityFieldStyle, onChange: (event: { currentTarget: { value: string } }) => onChange({ name: event.currentTarget.value }) })),\n services === undefined || avatar === undefined ? null : createElement(AssistantAvatarPortraitEditor, { services, model: avatar, disabled, t })),\n select(t('awb.model'), draft.modelKey, (modelKey) => onChange({ modelKey }), [createElement('option', { key: '', value: '' }, t('awb.defaultModel')),\n ...(draft.modelKey && !models.some((model) => JSON.stringify([model.provider, model.model]) === draft.modelKey) ? [missing(draft.modelKey)] : []),\n ...models.map((model) => createElement('option', { key: JSON.stringify([model.provider, model.model]), value: JSON.stringify([model.provider, model.model]) }, `${model.label} · ${model.provider}`))]),\n catalog?.models.length === 0 ? createElement('p', { style: help }, t('awb.noModel'), ...catalog.errors.map((error) => createElement('span', { key: error, style: { display: 'block' } }, error))) : null,\n input(t('awb.personality'), createElement('textarea', { value: draft.personality, maxLength: ASSISTANT_PERSONALITY_MAX_CHARS, rows: 4, disabled, placeholder: t('awb.personalityPlaceholder'),\n style: { ...identityFieldStyle, minHeight: 96, maxHeight: 200, resize: 'vertical', lineHeight: 1.65 }, onChange: (event: { currentTarget: { value: string } }) => onChange({ personality: event.currentTarget.value }) })),\n !includeAvatar ? null : services === undefined ? createElement('div', { style: { display: 'grid', gap: 8 } },\n createElement(AssistantAvatarPicker, { label: t('awb.avatar'), value: draft.avatarId, disabled, t,\n choices: avatarChoices.some((choice) => choice.id === draft.avatarId) ? avatarChoices\n : [{ id: draft.avatarId, label: t('awb.unavailableSelection', { id: draft.avatarId }), thirdParty: false, disabled: true }, ...avatarChoices],\n onChoose: (choice) => { if (avatars.some((avatar) => avatar.id === choice.id)) onChange({ avatarId: choice.id }) } }),\n createElement('p', { style: help }, t('avatar.externalHint')),\n avatar?.renderer !== 'live2d' ? null : createElement('p', { style: help }, t('avatar.live2dDependencyHint')))\n : createElement(AssistantAvatarSelectionField, { services, appearance, avatarId: draft.avatarId, avatars, includeLegacy: !initializing, disabled, t, onChange }))\n}\n\n/** 创建后的各页只装配自己的字段;页面切换不持有或重置父级草稿。 */\nexport function AssistantConfigurationPage({ tab, active = true, services, value, draft, catalog, appearance, tts, workspaces, t, disabled, onChange, onDebug, onError, onReset, ...previewProps }: {\n readonly tab: AssistantConfigurationTab; readonly services: CodingNsClientServices; readonly value: AssistantSettings\n readonly active?: boolean\n readonly draft: AssistantDraft; readonly catalog: AssistantChatCatalog | undefined\n readonly appearance: ReturnType<typeof normalizeAssistantAppearance>; readonly tts: AssistantTtsSnapshot | undefined\n readonly workspaces: readonly NativeWorkspaceRecord[]; readonly t: CodingNsTranslator; readonly disabled: boolean\n readonly onChange: (patch: Partial<AssistantDraft>) => void\n readonly onDebug: () => void; readonly onError: (error: string) => void\n readonly onReset?: () => void\n} & Omit<AssistantAvatarPreviewTargetProps, 'active'>): ReactElement {\n switch (tab) {\n case 'basic': return createElement(AssistantConfigurationFields, { draft, catalog, appearance, includeAvatar: false, services, t, disabled, onChange })\n case 'appearance': return createElement('div', { style: { display: 'grid', gap: 11 } },\n createElement(AssistantAppearanceEditor, { services, enabled: !disabled, active, ...previewProps }))\n case 'voice': return createElement('div', { style: { display: 'grid', gap: 11 } },\n createElement(AssistantVoiceInitializationPanel, { services, enabled: !disabled, active,\n inputSettings: (groupActive) => createElement('div', { style: { display: 'grid', gap: 11 } },\n createElement(AssistantAudioDevice, { services, direction: 'input', active: groupActive, disabled, t, onError }),\n createElement(VoiceModelManagerPanel, { services, value: value.voice, enabled: !disabled, active: groupActive })),\n outputSettings: (groupActive) => createElement('div', { style: { display: 'grid', gap: 11 } },\n createElement(AssistantAudioDevice, { services, direction: 'output', active: groupActive, disabled, t, onError }),\n createElement(AssistantVoiceSettings, { services, enabled: !disabled, active: groupActive, embedded: true })) }))\n case 'more': return createElement('div', { style: { display: 'grid', gap: 11 } },\n createElement(AssistantWorkspaceFields, { draft, workspaces, t, disabled, onChange }),\n createElement(AssistantNotificationSettings, { services, value, disabled, t, onError }),\n createElement(AssistantAdvancedSettings, { services, value, disabled, t, onDebug, onError }),\n createElement('div', { style: { paddingTop: 16, borderTop: `1px solid ${dshThemeColor.border}` } },\n createElement('button', { type: 'button', 'data-codingns-assistant-reset': true, disabled: disabled || onReset === undefined,\n style: { ...dshSettingsButtonStyle, color: dshThemeColor.error }, onClick: onReset }, t('awb.reset'))))\n }\n}\n\n/** 通知开关和自动关闭选项写入配置窗口的统一草稿,底部保存前不改变运行中的助理。 */\nexport function AssistantNotificationSettings({ services, value, disabled, t, onError }: {\n readonly services: CodingNsClientServices; readonly value: AssistantSettings; readonly disabled: boolean\n readonly t: CodingNsTranslator; readonly onError: (error: string) => void\n}): ReactElement {\n const settings = normalizeAssistantNotificationSettings(value.notifications)\n const compactRowStyle: CSSProperties = { minHeight: 40, padding: '5px 0' }\n type BooleanSettingKey = keyof Omit<typeof settings, 'autoCloseSeconds'>\n const set = (key: BooleanSettingKey, checked: boolean): void => {\n void services.settings.set(`assistant.notifications.${key}`, checked)\n .catch((cause: unknown) => onError(message(cause)))\n }\n const row = (key: BooleanSettingKey, style: CSSProperties, description?: string): ReactElement => createElement(SettingsToggleRow, {\n key, label: t(`awb.notifications.${key}`), checked: settings[key],\n ...(description === undefined ? {} : { description }),\n disabled: disabled || (key !== 'enabled' && !settings.enabled), style,\n onChange: (checked) => set(key, checked),\n })\n const setSeconds = (value: number): void => {\n if (!ASSISTANT_NOTIFICATION_AUTO_CLOSE_SECONDS.includes(value as AssistantNotificationAutoCloseSeconds)) return\n void services.settings.set('assistant.notifications.autoCloseSeconds', value)\n .catch((cause: unknown) => onError(message(cause)))\n }\n const durationRow = createElement('div', { style: {\n display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 12, width: '100%', minWidth: 0,\n minHeight: 40, padding: '5px 0', borderBottom: `0.5px solid ${dshThemeColor.menuBorder}`, boxSizing: 'border-box',\n } },\n createElement('label', { htmlFor: 'codingns-assistant-notification-auto-close-seconds', style: { flex: '1 1 auto', minWidth: 0, cursor: disabled || !settings.enabled || !settings.autoClose ? 'default' : 'pointer', overflowWrap: 'anywhere' } },\n createElement('span', { style: { display: 'block', fontSize: uiFontSize(13), fontWeight: 500, lineHeight: 1.4 } }, t('awb.notifications.autoCloseDuration')),\n createElement('span', { style: dshSettingsHelpStyle }, t('awb.notifications.autoCloseDurationHint'))),\n createElement('select', {\n id: 'codingns-assistant-notification-auto-close-seconds',\n value: String(settings.autoCloseSeconds), disabled: disabled || !settings.enabled || !settings.autoClose,\n 'aria-label': t('awb.notifications.autoCloseDuration'),\n style: { ...dshSettingsFieldStyle, flex: '0 0 auto', width: 112, minHeight: 32, padding: '5px 8px' },\n onChange: (event: { currentTarget: { value: string } }) => setSeconds(Number(event.currentTarget.value)),\n }, ...ASSISTANT_NOTIFICATION_AUTO_CLOSE_SECONDS.map((seconds) => createElement('option', { key: seconds, value: String(seconds) }, `${seconds}${t('awb.notifications.seconds')}`))))\n return createElement('fieldset', { disabled, 'data-codingns-assistant-notification-settings': true,\n style: { border: 0, padding: 0, margin: 0, minWidth: 0 } },\n createElement('legend', { style: { fontWeight: 600, marginBottom: 6 } }, t('awb.notifications.title')),\n createElement('p', { style: help }, t('awb.notifications.hint')),\n row('enabled', { minHeight: 44, padding: '5px 0' }),\n row('autoClose', compactRowStyle, t('awb.notifications.autoCloseHint')),\n durationRow,\n createElement('div', { style: {\n display: 'grid', gridTemplateColumns: 'repeat(auto-fit, minmax(220px, 1fr))',\n columnGap: 20, rowGap: 0, marginTop: 2,\n } },\n row('completed', compactRowStyle), row('error', compactRowStyle),\n row('question', compactRowStyle), row('approval', compactRowStyle)))\n}\n\n/** 兼容原能力表单入口;实际配置页分别装配项目字段与声音字段。 */\nexport function AssistantCapabilityFields({ draft, tts, workspaces, t, disabled, onChange }: {\n readonly draft: AssistantDraft; readonly tts: AssistantTtsSnapshot | undefined; readonly workspaces: readonly NativeWorkspaceRecord[]; readonly t: CodingNsTranslator\n readonly disabled: boolean; readonly onChange: (patch: Partial<AssistantDraft>) => void\n}): ReactElement {\n return createElement('div', { style: { display: 'grid', gap: 18 } },\n AssistantWorkspaceFields({ draft, workspaces, t, disabled, onChange }), AssistantVoiceFields({ draft, tts, t, disabled, onChange }))\n}\n\n/** 项目范围放到更多设置,保留暂不可用项目以避免编辑时丢失原有选择。 */\nexport function AssistantWorkspaceFields({ draft, workspaces, t, disabled, onChange }: {\n readonly draft: AssistantDraft; readonly workspaces: readonly NativeWorkspaceRecord[]; readonly t: CodingNsTranslator\n readonly disabled: boolean; readonly onChange: (patch: Partial<AssistantDraft>) => void\n}): ReactElement {\n const knownWorkspaces = new Set(workspaces.map((workspace) => workspace.workspaceId))\n const options = [...workspaces, ...draft.managedWorkspaceIds\n .filter((id) => !knownWorkspaces.has(id))\n .map((workspaceId) => ({ workspaceId, title: t('awb.offlineWorkspace', { id: workspaceId }) }))]\n const row = (workspace: (typeof options)[number], index: number): ReactElement => {\n const remote = 'hostLabel' in workspace || 'hostId' in workspace\n const host = remote ? workspace.hostLabel ?? workspace.hostId : undefined\n const hostColor = remote ? workspace.hostColor : undefined\n const sessionCount = 'sessionIds' in workspace ? workspace.sessionIds.length : 0\n const path = 'workspacePath' in workspace ? workspace.workspacePath ?? workspace.path ?? workspace.workspaceId\n : 'path' in workspace ? workspace.path ?? workspace.workspaceId : workspace.workspaceId\n const tag = host === undefined ? createElement('span', { style: workspaceTableEmptyStyle }, '—')\n : createElement('span', { title: host, style: { ...peerHostTagStyle(resolvePeerHostColor(hostColor, host)), maxWidth: '100%' } }, host)\n return createElement('label', { key: workspace.workspaceId, role: 'row', style: { ...workspaceTableRowStyle, ...(index === options.length - 1 ? {} : { borderBottom: `1px solid ${dshThemeColor.border}` }) } },\n createElement('span', { role: 'cell', style: workspaceTableCheckboxCellStyle },\n createElement('input', { type: 'checkbox', 'aria-label': workspace.title, checked: draft.managedWorkspaceIds.includes(workspace.workspaceId), onChange: (event: { currentTarget: { checked: boolean } }) => onChange({ managedWorkspaceIds: event.currentTarget.checked ? [...draft.managedWorkspaceIds, workspace.workspaceId] : draft.managedWorkspaceIds.filter((id) => id !== workspace.workspaceId) }) })),\n createElement('span', { role: 'cell', style: workspaceTableNameCellStyle }, workspace.title),\n createElement('span', { role: 'cell', style: workspaceTableCountCellStyle }, String(sessionCount)),\n createElement('span', { role: 'cell', title: path, style: workspaceTablePathCellStyle }, path),\n createElement('span', { role: 'cell', style: workspaceTableHostCellStyle }, tag))\n }\n return createElement('fieldset', { 'data-codingns-assistant-projects': true, style: { border: 0, padding: 0, margin: 0, minWidth: 0 }, disabled },\n createElement('legend', { style: { fontSize: uiFontSize(14), fontWeight: 600, padding: 0, marginBottom: 8 } }, t('awb.workspaces')),\n createElement('p', { style: help }, t('awb.scopeHint')),\n createElement('div', { role: 'table', 'aria-label': t('awb.workspaces'), style: workspaceTableStyle },\n createElement('div', { role: 'row', style: workspaceTableHeaderStyle },\n createElement('span', { role: 'columnheader', style: workspaceTableCheckboxCellStyle }),\n createElement('span', { role: 'columnheader' }, t('awb.workspaceColumn')),\n createElement('span', { role: 'columnheader' }, t('awb.workspaceCountColumn')),\n createElement('span', { role: 'columnheader' }, t('awb.workspacePathColumn')),\n createElement('span', { role: 'columnheader' }, t('awb.workspaceHostColumn'))),\n ...options.map(row),\n options.length === 0 ? createElement('div', { role: 'row', style: workspaceTableEmptyRowStyle }, t('assistant.noWorkspaces')) : null),\n )\n}\n\n/** 没有安装 MOSS 时只有浏览器声音可选,不因标签拆分而放宽可用性校验。 */\nexport function AssistantVoiceFields({ draft, tts, t, disabled, onChange }: {\n readonly draft: AssistantDraft; readonly tts: AssistantTtsSnapshot | undefined; readonly t: CodingNsTranslator\n readonly disabled: boolean; readonly onChange: (patch: Partial<AssistantDraft>) => void\n}): ReactElement {\n const mossReady = tts?.status.ready === true\n const voices = mossReady ? tts.voices : []\n return createElement('div', { 'data-codingns-assistant-voice-selection': true, style: { display: 'grid', gap: 10 } },\n createElement('label', { style: field }, createElement('span', null, t('awb.voice')),\n createElement('select', { value: draft.ttsBackend === 'browser' || !mossReady ? 'browser' : draft.voiceId, disabled, style: identityFieldStyle,\n onChange: (event: { currentTarget: { value: string } }) => { const voice = event.currentTarget.value; if (voice === 'browser') onChange({ ttsBackend: 'browser' }); else if (mossReady && voices.some((item) => item.id === voice)) onChange({ ttsBackend: 'moss-onnx', voiceId: voice }) } },\n createElement('option', { value: 'browser' }, t('awb.browserVoice')), ...voices.map((voice) => createElement('option', { key: voice.id, value: voice.id }, voice.name)))),\n mossReady ? null : createElement('p', { style: help }, t('awb.mossSetupHint')))\n}\nfunction AssistantAdvancedSettings({ services, value, disabled, t, onDebug, onError }: { readonly services: CodingNsClientServices; readonly value: AssistantSettings; readonly disabled: boolean; readonly t: CodingNsTranslator; readonly onDebug: () => void; readonly onError: (error: string) => void }): ReactElement {\n const defaults = readAssistantPrompts(value.prompts)\n const prompts = services.configurationDraft ? { ...defaults, ...value.prompts } : defaults\n const savePrompt = async (kind: 'index' | 'chat', text: string): Promise<void> => {\n // 提示词是单字段绝对值,不依赖旧快照计算;后台索引变化不应阻止保存。\n try { if (!await services.settings.mutate([{ op: 'set', path: ['assistant', 'prompts', kind], value: text }])) throw new Error(t('settings.moduleWriteRejected')) }\n catch (cause) { onError(message(cause)); throw cause }\n }\n return createElement('div', { style: { display: 'grid', gap: 14, marginTop: 14 } },\n createElement('p', { style: help }, t('awb.moreHint')),\n ...(['index', 'chat'] as const).map((kind) => createElement(AssistantPromptEditor, { key: kind, kind, value: prompts[kind], disabled, onSave: savePrompt,\n ...(services.configurationDraft ? { onChange: savePrompt } : {}), t })),\n createElement('button', { type: 'button', disabled, style: dshSettingsButtonStyle, onClick: onDebug }, t('assistant.debug.open')))\n}\n\n/** 设备按输入、输出分组枚举,折叠时保留选择但停止设备查询。 */\nfunction AssistantAudioDevice({ services, direction, active, disabled, t, onError }: {\n readonly services: CodingNsClientServices; readonly direction: 'input' | 'output'; readonly active: boolean\n readonly disabled: boolean; readonly t: CodingNsTranslator; readonly onError: (error: string) => void\n}): ReactElement | null {\n const adapter = getGlobalVoiceAdapter(services)\n const output = direction === 'output'\n const [devices, setDevices] = useState<readonly { deviceId: string; label: string }[]>([])\n const [selectedId, setSelectedId] = useState((output ? adapter?.outputDeviceId : adapter?.inputDeviceId) ?? '')\n useEffect(() => {\n if (!active || (output && !adapter?.outputDeviceSupported)) return undefined\n let stopped = false\n const refresh = (): void => { void (output ? adapter?.enumerateOutputDevices() : adapter?.enumerateInputDevices())?.then((devices) => { if (!stopped) setDevices(devices) }).catch(() => undefined) }\n refresh(); globalThis.navigator?.mediaDevices?.addEventListener?.('devicechange', refresh)\n return () => { stopped = true; globalThis.navigator?.mediaDevices?.removeEventListener?.('devicechange', refresh) }\n }, [active, adapter, output])\n if (output && !adapter?.outputDeviceSupported) return null\n return createElement('label', { style: field }, t(output ? 'voice.outputDevice' : 'voice.inputDevice'),\n createElement('select', { disabled, value: selectedId, style: dshSettingsFieldStyle, onChange: (event: { currentTarget: { value: string } }) => {\n const id = event.currentTarget.value\n void (output ? adapter?.selectOutputDevice(id) : adapter?.selectInputDevice(id))?.then(() => setSelectedId(id)).catch((cause) => onError(message(cause)))\n } }, createElement('option', { value: '' }, t(output ? 'voice.defaultOutput' : 'voice.defaultMicrophone')), ...devices.map((device) => createElement('option', { key: device.deviceId, value: device.deviceId }, device.label || t(output ? 'voice.unnamedOutput' : 'voice.unnamedMicrophone')))))\n}\n\nfunction message(error: unknown): string { return error instanceof Error ? error.message : String(error) }\nconst help: CSSProperties = { ...dshSettingsHelpStyle, margin: 0 }\nconst field: CSSProperties = assistantSettingFieldStyle\nconst identityFieldStyle: CSSProperties = { ...dshSettingsFieldStyle, borderRadius: 8 }\nconst workspaceTableStyle: CSSProperties = {\n display: 'grid',\n overflow: 'hidden',\n maxHeight: 240,\n overflowY: 'auto',\n marginTop: 8,\n border: `1px solid ${dshThemeColor.border}`,\n borderRadius: 10,\n background: dshThemeColor.cardBackground,\n boxShadow: dshThemeColor.subtleShadow,\n}\nconst workspaceTableGridStyle: CSSProperties = {\n display: 'grid',\n gridTemplateColumns: '38px minmax(140px, 1fr) 72px minmax(180px, 1fr) minmax(120px, 0.42fr)',\n alignItems: 'center',\n columnGap: 10,\n padding: '0 12px',\n minWidth: 0,\n}\nconst workspaceTableHeaderStyle: CSSProperties = {\n ...workspaceTableGridStyle,\n minHeight: 34,\n color: dshThemeColor.labelSecondary,\n background: dshThemeColor.surfaceSubtle,\n borderBottom: `1px solid ${dshThemeColor.border}`,\n fontSize: uiFontSize(11),\n fontWeight: 600,\n}\nconst workspaceTableRowStyle: CSSProperties = {\n ...workspaceTableGridStyle,\n minHeight: 48,\n color: dshThemeColor.labelPrimary,\n fontSize: uiFontSize(13),\n cursor: 'pointer',\n}\nconst workspaceTableCheckboxCellStyle: CSSProperties = { display: 'flex', alignItems: 'center', minWidth: 0 }\nconst workspaceTableNameCellStyle: CSSProperties = { minWidth: 0, overflow: 'hidden', overflowWrap: 'anywhere' }\nconst workspaceTableCountCellStyle: CSSProperties = { color: dshThemeColor.labelSecondary, fontVariantNumeric: 'tabular-nums' }\nconst workspaceTablePathCellStyle: CSSProperties = { minWidth: 0, overflow: 'hidden', overflowWrap: 'anywhere', color: dshThemeColor.labelSecondary, fontSize: uiFontSize(12) }\nconst workspaceTableHostCellStyle: CSSProperties = { display: 'flex', alignItems: 'center', minWidth: 0, overflow: 'hidden' }\nconst workspaceTableEmptyStyle: CSSProperties = { color: dshThemeColor.labelTertiary, fontSize: uiFontSize(12) }\nconst workspaceTableEmptyRowStyle: CSSProperties = { padding: '16px 12px', color: dshThemeColor.labelSecondary, textAlign: 'center', fontSize: uiFontSize(12) }\n"],"x_google_ignoreList":[0,1,2,3,4,5,6],"mappings":"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"}
|