shadow-claw 1.59.6 → 1.59.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/.well-known/mcp/server-card.json +12 -4
- package/.well-known/mcp.json +12 -4
- package/dist/cli/build/build.js +1 -1
- package/dist/cli/{chunk-DM4xsTry.js → chunk-3vNYrs_L.js} +1 -1
- package/dist/cli/{chunk-Ctg5L55n.js → chunk-66BvqAV0.js} +1 -1
- package/dist/cli/{chunk-Bq38OubR.js → chunk-B0qusANw.js} +1 -1
- package/dist/cli/{chunk-yiVdvGCJ.js → chunk-B3TrWbca.js} +7 -7
- package/dist/cli/{chunk-C8DBACtx.js → chunk-B88Z8T_9.js} +1 -1
- package/dist/cli/chunk-BCjL0JXf.js +1 -0
- package/dist/cli/chunk-BNcu1oiT.js +1 -0
- package/dist/cli/{chunk-gvNsvav0.js → chunk-C5ypckWC.js} +7 -7
- package/dist/cli/{chunk-Dw8GndPD.js → chunk-CAAeGOdy.js} +1 -1
- package/dist/cli/chunk-CFxww5Yz.js +1 -0
- package/dist/cli/chunk-CGIgtL6R.js +1 -0
- package/dist/cli/{chunk-DJqHK-qS.js → chunk-CQaCgswD.js} +7 -7
- package/dist/cli/chunk-CZdCRqNe.js +7 -0
- package/dist/cli/chunk-CafdvLx-.js +1 -0
- package/dist/cli/{chunk-Bc_weULz.js → chunk-CncW6_WL.js} +1 -1
- package/dist/cli/chunk-DDvuLVfW.js +1 -0
- package/dist/cli/{chunk-Cq_kQohv.js → chunk-DMs7kREC.js} +1 -1
- package/dist/cli/{chunk-CX2itile.js → chunk-D_te8ufL.js} +1 -1
- package/dist/cli/{chunk-3wTukVof.js → chunk-DhOU6GYX.js} +1 -1
- package/dist/cli/chunk-Dhap1VwA.js +1 -0
- package/dist/cli/chunk-DwvavohW.js +1 -0
- package/dist/cli/{chunk-DLde6nuO.js → chunk-SRBRVorc.js} +1 -1
- package/dist/cli/{chunk-D3y7h9Xe.js → chunk-SxK79JmB.js} +1 -1
- package/dist/cli/chunk-_a0CkUNS.js +139 -0
- package/dist/cli/{chunk-C9o6lXP3.js → chunk-hVf839t7.js} +1 -1
- package/dist/cli/chunk-iB8OoMmW.js +7 -0
- package/dist/cli/cli.js +1 -1
- package/dist/headless-agent.js +1 -1
- package/dist/lib/{app-routes-DJdIjp2V.js → app-routes-BXiRvlNl.js} +7 -25
- package/dist/lib/{app-routes-DJdIjp2V.js.map → app-routes-BXiRvlNl.js.map} +1 -1
- package/dist/lib/{attachment-capabilities-Dbb-4ZP5.js → attachment-capabilities-BjkEPip8.js} +2 -2
- package/dist/lib/{attachment-capabilities-Dbb-4ZP5.js.map → attachment-capabilities-BjkEPip8.js.map} +1 -1
- package/dist/lib/{channel-Dlru5ofR.js → channel-mmdGzPkT.js} +3 -3
- package/dist/lib/{channel-Dlru5ofR.js.map → channel-mmdGzPkT.js.map} +1 -1
- package/dist/lib/{chat-template-BuuLY8l7.js → chat-template-DPEKGJhB.js} +2 -2
- package/dist/lib/{chat-template-BuuLY8l7.js.map → chat-template-DPEKGJhB.js.map} +1 -1
- package/dist/lib/{compact-context-BtR55YPU.js → compact-context-CY9BBlUQ.js} +19 -19
- package/dist/lib/{compact-context-BtR55YPU.js.map → compact-context-CY9BBlUQ.js.map} +1 -1
- package/dist/lib/components/common/shadow-claw-provider-model-picker.js +1 -1
- package/dist/lib/components/index.js +27 -27
- package/dist/lib/components/settings/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/settings/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/settings/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/settings/shadow-claw-git.js +1 -1
- package/dist/lib/components/settings/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/settings/shadow-claw-llm.js +1 -1
- package/dist/lib/components/settings/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/settings/shadow-claw-networking.js +1 -1
- package/dist/lib/components/settings/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/settings/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/settings/shadow-claw-storage.js +1 -1
- package/dist/lib/components/settings/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/settings/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw-a2ui.js +1 -1
- package/dist/lib/components/shadow-claw-accounts.js +1 -1
- package/dist/lib/components/shadow-claw-channel-config.js +1 -1
- package/dist/lib/components/shadow-claw-channels.js +1 -1
- package/dist/lib/components/shadow-claw-chat.js +1 -1
- package/dist/lib/components/shadow-claw-control-plane.js +1 -1
- package/dist/lib/components/shadow-claw-conversations.js +1 -1
- package/dist/lib/components/shadow-claw-file-viewer.js +1 -1
- package/dist/lib/components/shadow-claw-files.js +1 -1
- package/dist/lib/components/shadow-claw-git.js +1 -1
- package/dist/lib/components/shadow-claw-integrations.js +1 -1
- package/dist/lib/components/shadow-claw-llm.js +1 -1
- package/dist/lib/components/shadow-claw-mcp-remote.js +1 -1
- package/dist/lib/components/shadow-claw-networking.js +1 -1
- package/dist/lib/components/shadow-claw-notifications.js +1 -1
- package/dist/lib/components/shadow-claw-page-header.js +1 -1
- package/dist/lib/components/shadow-claw-pages.js +1 -1
- package/dist/lib/components/shadow-claw-peerjs.js +1 -1
- package/dist/lib/components/shadow-claw-provider-model-picker.js +1 -1
- package/dist/lib/components/shadow-claw-settings.js +1 -1
- package/dist/lib/components/shadow-claw-storage.js +1 -1
- package/dist/lib/components/shadow-claw-task-server.js +1 -1
- package/dist/lib/components/shadow-claw-tasks.js +1 -1
- package/dist/lib/components/shadow-claw-terminal.js +1 -1
- package/dist/lib/components/shadow-claw-tools.js +1 -1
- package/dist/lib/components/shadow-claw-webvm.js +1 -1
- package/dist/lib/components/shadow-claw.js +1 -1
- package/dist/lib/{config-DxNI3TlW.js → config-BrHR97zt.js} +2 -2
- package/dist/lib/{config-DxNI3TlW.js.map → config-BrHR97zt.js.map} +1 -1
- package/dist/lib/{configure-peer-js-ChDhOZU4.js → configure-peer-js-ccNvax2N.js} +3 -3
- package/dist/lib/{configure-peer-js-ChDhOZU4.js.map → configure-peer-js-ccNvax2N.js.map} +1 -1
- package/dist/lib/{connections-DC4NZkJE.js → connections-C1FWsBsE.js} +2 -2
- package/dist/lib/{connections-DC4NZkJE.js.map → connections-C1FWsBsE.js.map} +1 -1
- package/dist/lib/{credentials-5vpz0XPk.js → credentials-CZbngHXW.js} +2 -2
- package/dist/lib/{credentials-5vpz0XPk.js.map → credentials-CZbngHXW.js.map} +1 -1
- package/dist/lib/{discover-skills-CD0sKvAI.js → discover-skills-OwlQ2sXA.js} +13 -13
- package/dist/lib/{discover-skills-CD0sKvAI.js.map → discover-skills-OwlQ2sXA.js.map} +1 -1
- package/dist/lib/{download-group-file-Dk3qaxhJ.js → download-group-file-D0wgg10Q.js} +2 -2
- package/dist/lib/{download-group-file-Dk3qaxhJ.js.map → download-group-file-D0wgg10Q.js.map} +1 -1
- package/dist/lib/{file-viewer-B4pRW-_G.js → file-viewer-DOfvX6yy.js} +5 -5
- package/dist/lib/{file-viewer-B4pRW-_G.js.map → file-viewer-DOfvX6yy.js.map} +1 -1
- package/dist/lib/{get-or-create-subscriber-id-HCcgDEPz.js → get-or-create-subscriber-id-wyzaML7Z.js} +2 -2
- package/dist/lib/{get-or-create-subscriber-id-HCcgDEPz.js.map → get-or-create-subscriber-id-wyzaML7Z.js.map} +1 -1
- package/dist/lib/{git-B3Q1euc5.js → git-D2J_j9X9.js} +5 -5
- package/dist/lib/{git-B3Q1euc5.js.map → git-D2J_j9X9.js.map} +1 -1
- package/dist/lib/{iframe-bridge-scripts-D8iuFhUk.js → iframe-bridge-scripts-Dx825LLG.js} +2 -2
- package/dist/lib/{iframe-bridge-scripts-D8iuFhUk.js.map → iframe-bridge-scripts-Dx825LLG.js.map} +1 -1
- package/dist/lib/index.js +28 -28
- package/dist/lib/{init-chat-split-resize-B0ODULx9.js → init-chat-split-resize-Cc0bd2z9.js} +2 -2
- package/dist/lib/{init-chat-split-resize-B0ODULx9.js.map → init-chat-split-resize-Cc0bd2z9.js.map} +1 -1
- package/dist/lib/{init-control-plane-C1FRRmjC.js → init-control-plane-B7blDVIE.js} +15 -15
- package/dist/lib/{init-control-plane-C1FRRmjC.js.map → init-control-plane-B7blDVIE.js.map} +1 -1
- package/dist/lib/{invoke-agent-CzN7sVh-.js → invoke-agent-SxvudiDT.js} +11 -11
- package/dist/lib/{invoke-agent-CzN7sVh-.js.map → invoke-agent-SxvudiDT.js.map} +1 -1
- package/dist/lib/{markdown-mbNo7cV3.js → markdown--6vTAPEH.js} +2 -2
- package/dist/lib/{markdown-mbNo7cV3.js.map → markdown--6vTAPEH.js.map} +1 -1
- package/dist/lib/{mcp-reconnect-3T7yWGEY.js → mcp-reconnect-BeqQvNWO.js} +3 -3
- package/dist/lib/{mcp-reconnect-3T7yWGEY.js.map → mcp-reconnect-BeqQvNWO.js.map} +1 -1
- package/dist/lib/{model-ranking-DGNSWYwN.js → model-ranking-BhsJV7vb.js} +2 -2
- package/dist/lib/{model-ranking-DGNSWYwN.js.map → model-ranking-BhsJV7vb.js.map} +1 -1
- package/dist/lib/{move-group-entry-NMTJ59M9.js → move-group-entry-DDpjxa10.js} +5 -5
- package/dist/lib/{move-group-entry-NMTJ59M9.js.map → move-group-entry-DDpjxa10.js.map} +1 -1
- package/dist/lib/{orchestrator-B8FV1V7x.js → orchestrator-C7fkh7T7.js} +24 -24
- package/dist/lib/{orchestrator-B8FV1V7x.js.map → orchestrator-C7fkh7T7.js.map} +1 -1
- package/dist/lib/{orchestrator-i_QJ-o22.js → orchestrator-CCARkxQC.js} +11 -11
- package/dist/lib/orchestrator-CCARkxQC.js.map +1 -0
- package/dist/lib/{parse-path-DPCn-HwI.js → parse-path-BOHQP_IQ.js} +3 -3
- package/dist/lib/{parse-path-DPCn-HwI.js.map → parse-path-BOHQP_IQ.js.map} +1 -1
- package/dist/lib/{peerjs-z5zeioPV.js → peerjs-Bfw_FWLB.js} +8 -8
- package/dist/lib/{peerjs-z5zeioPV.js.map → peerjs-Bfw_FWLB.js.map} +1 -1
- package/dist/lib/{process-peer-query-param-CJp7w7AU.js → process-peer-query-param-BxYiZNdf.js} +5 -5
- package/dist/lib/{process-peer-query-param-CJp7w7AU.js.map → process-peer-query-param-BxYiZNdf.js.map} +1 -1
- package/dist/lib/{process-pending-shared-payloads-B6_TlBFA.js → process-pending-shared-payloads-DPIbwRb3.js} +4 -4
- package/dist/lib/{process-pending-shared-payloads-B6_TlBFA.js.map → process-pending-shared-payloads-DPIbwRb3.js.map} +1 -1
- package/dist/lib/{process-room-query-param-C3FFGGn6.js → process-room-query-param-B2_d50nE.js} +4 -4
- package/dist/lib/{process-room-query-param-C3FFGGn6.js.map → process-room-query-param-B2_d50nE.js.map} +1 -1
- package/dist/lib/{provider-DcQZypu5.js → provider-BC9KPI14.js} +3 -3
- package/dist/lib/{provider-DcQZypu5.js.map → provider-BC9KPI14.js.map} +1 -1
- package/dist/lib/{push-client-Cx5rMs6J.js → push-client-rrjTdc-U.js} +5 -5
- package/dist/lib/{push-client-Cx5rMs6J.js.map → push-client-rrjTdc-U.js.map} +1 -1
- package/dist/lib/{read-group-file-bytes-CXOG_YyM.js → read-group-file-bytes-UQIk1eJG.js} +2 -2
- package/dist/lib/{read-group-file-bytes-CXOG_YyM.js.map → read-group-file-bytes-UQIk1eJG.js.map} +1 -1
- package/dist/lib/{rooms-CwlkYLDU.js → rooms-bwGoYb1q.js} +2 -2
- package/dist/lib/{rooms-CwlkYLDU.js.map → rooms-bwGoYb1q.js.map} +1 -1
- package/dist/lib/{shadow-claw-DoQ7fgl5.js → shadow-claw-CypGVlVO.js} +17 -20
- package/dist/lib/shadow-claw-CypGVlVO.js.map +1 -0
- package/dist/lib/{shadow-claw-a2ui-Br6qJMs1.js → shadow-claw-a2ui-lG0vQbW8.js} +2 -2
- package/dist/lib/{shadow-claw-a2ui-Br6qJMs1.js.map → shadow-claw-a2ui-lG0vQbW8.js.map} +1 -1
- package/dist/lib/{shadow-claw-accounts-BTDILfWw.js → shadow-claw-accounts-CkqyCxwp.js} +3 -3
- package/dist/lib/{shadow-claw-accounts-BTDILfWw.js.map → shadow-claw-accounts-CkqyCxwp.js.map} +1 -1
- package/dist/lib/{shadow-claw-channel-config-IKiL34tI.js → shadow-claw-channel-config-DJpDovkF.js} +4 -4
- package/dist/lib/{shadow-claw-channel-config-IKiL34tI.js.map → shadow-claw-channel-config-DJpDovkF.js.map} +1 -1
- package/dist/lib/{shadow-claw-channels-JgEzuHWK.js → shadow-claw-channels-DJLwRovH.js} +3 -3
- package/dist/lib/{shadow-claw-channels-JgEzuHWK.js.map → shadow-claw-channels-DJLwRovH.js.map} +1 -1
- package/dist/lib/{shadow-claw-chat-SGUDT31r.js → shadow-claw-chat-B92cPaft.js} +15 -15
- package/dist/lib/{shadow-claw-chat-SGUDT31r.js.map → shadow-claw-chat-B92cPaft.js.map} +1 -1
- package/dist/lib/{shadow-claw-control-plane-CRWFZ3vD.js → shadow-claw-control-plane-fvn-qyHj.js} +7 -7
- package/dist/lib/{shadow-claw-control-plane-CRWFZ3vD.js.map → shadow-claw-control-plane-fvn-qyHj.js.map} +1 -1
- package/dist/lib/{shadow-claw-conversations-D23GJ7qo.js → shadow-claw-conversations-CsVyDOny.js} +7 -7
- package/dist/lib/{shadow-claw-conversations-D23GJ7qo.js.map → shadow-claw-conversations-CsVyDOny.js.map} +1 -1
- package/dist/lib/{shadow-claw-file-viewer-C1V8WTiU.js → shadow-claw-file-viewer-DFfyP7s5.js} +10 -10
- package/dist/lib/{shadow-claw-file-viewer-C1V8WTiU.js.map → shadow-claw-file-viewer-DFfyP7s5.js.map} +1 -1
- package/dist/lib/{shadow-claw-files-DN7irmE1.js → shadow-claw-files-cT6HL7ye.js} +11 -11
- package/dist/lib/{shadow-claw-files-DN7irmE1.js.map → shadow-claw-files-cT6HL7ye.js.map} +1 -1
- package/dist/lib/{shadow-claw-git-D-1oIh65.js → shadow-claw-git-Cv9mQgTx.js} +6 -6
- package/dist/lib/{shadow-claw-git-D-1oIh65.js.map → shadow-claw-git-Cv9mQgTx.js.map} +1 -1
- package/dist/lib/{shadow-claw-integrations-CZjnm7cM.js → shadow-claw-integrations-RZZ-m-Id.js} +4 -4
- package/dist/lib/{shadow-claw-integrations-CZjnm7cM.js.map → shadow-claw-integrations-RZZ-m-Id.js.map} +1 -1
- package/dist/lib/{shadow-claw-llm-4Gefh5FN.js → shadow-claw-llm-CKOYzPDp.js} +9 -9
- package/dist/lib/{shadow-claw-llm-4Gefh5FN.js.map → shadow-claw-llm-CKOYzPDp.js.map} +1 -1
- package/dist/lib/{shadow-claw-mcp-remote-B9ssb3YV.js → shadow-claw-mcp-remote-BKFROurv.js} +4 -4
- package/dist/lib/{shadow-claw-mcp-remote-B9ssb3YV.js.map → shadow-claw-mcp-remote-BKFROurv.js.map} +1 -1
- package/dist/lib/{shadow-claw-networking-BN5BB4hb.js → shadow-claw-networking-DYfiUQaH.js} +2 -2
- package/dist/lib/{shadow-claw-networking-BN5BB4hb.js.map → shadow-claw-networking-DYfiUQaH.js.map} +1 -1
- package/dist/lib/{shadow-claw-notifications-71KARtkY.js → shadow-claw-notifications-JJlzriuX.js} +3 -3
- package/dist/lib/{shadow-claw-notifications-71KARtkY.js.map → shadow-claw-notifications-JJlzriuX.js.map} +1 -1
- package/dist/lib/{shadow-claw-page-header-DMGO-TSe.js → shadow-claw-page-header-C_Qr3xZM.js} +2 -2
- package/dist/lib/{shadow-claw-page-header-DMGO-TSe.js.map → shadow-claw-page-header-C_Qr3xZM.js.map} +1 -1
- package/dist/lib/{shadow-claw-pages-BiRM6qiA.js → shadow-claw-pages-BCo3ihZI.js} +11 -11
- package/dist/lib/{shadow-claw-pages-BiRM6qiA.js.map → shadow-claw-pages-BCo3ihZI.js.map} +1 -1
- package/dist/lib/{shadow-claw-peerjs-BZu7jNSe.js → shadow-claw-peerjs-CFNjfrY5.js} +6 -6
- package/dist/lib/{shadow-claw-peerjs-BZu7jNSe.js.map → shadow-claw-peerjs-CFNjfrY5.js.map} +1 -1
- package/dist/lib/{shadow-claw-provider-model-picker-BXYXEobD.js → shadow-claw-provider-model-picker-B-Ct4yW-.js} +2 -2
- package/dist/lib/{shadow-claw-provider-model-picker-BXYXEobD.js.map → shadow-claw-provider-model-picker-B-Ct4yW-.js.map} +1 -1
- package/dist/lib/{shadow-claw-settings-CcT5EK08.js → shadow-claw-settings-BMwne0bh.js} +7 -7
- package/dist/lib/{shadow-claw-settings-CcT5EK08.js.map → shadow-claw-settings-BMwne0bh.js.map} +1 -1
- package/dist/lib/{shadow-claw-storage-eTOpbvpi.js → shadow-claw-storage-DUY8B9m-.js} +5 -5
- package/dist/lib/{shadow-claw-storage-eTOpbvpi.js.map → shadow-claw-storage-DUY8B9m-.js.map} +1 -1
- package/dist/lib/{shadow-claw-task-server-DFImTUbw.js → shadow-claw-task-server-yWeoA3eL.js} +2 -2
- package/dist/lib/{shadow-claw-task-server-DFImTUbw.js.map → shadow-claw-task-server-yWeoA3eL.js.map} +1 -1
- package/dist/lib/{shadow-claw-tasks-BjaxsmUx.js → shadow-claw-tasks-Bg0uM15I.js} +9 -9
- package/dist/lib/{shadow-claw-tasks-BjaxsmUx.js.map → shadow-claw-tasks-Bg0uM15I.js.map} +1 -1
- package/dist/lib/{shadow-claw-terminal-C-4wreFe.js → shadow-claw-terminal-fyJPppY_.js} +2 -2
- package/dist/lib/{shadow-claw-terminal-C-4wreFe.js.map → shadow-claw-terminal-fyJPppY_.js.map} +1 -1
- package/dist/lib/{shadow-claw-tools-COdrGZJk.js → shadow-claw-tools-D0T8m3go.js} +7 -7
- package/dist/lib/{shadow-claw-tools-COdrGZJk.js.map → shadow-claw-tools-D0T8m3go.js.map} +1 -1
- package/dist/lib/{shadow-claw-webvm-sxqVjO0L.js → shadow-claw-webvm-CQvzJwKI.js} +3 -3
- package/dist/lib/{shadow-claw-webvm-sxqVjO0L.js.map → shadow-claw-webvm-CQvzJwKI.js.map} +1 -1
- package/dist/lib/{sync-web-mcp-registration-D4hdUwtv.js → sync-web-mcp-registration-BFtG_4kx.js} +6 -6
- package/dist/lib/{sync-web-mcp-registration-D4hdUwtv.js.map → sync-web-mcp-registration-BFtG_4kx.js.map} +1 -1
- package/dist/lib/{system-prompt-DT_KeYaL.js → system-prompt-bhGRLoL2.js} +7 -7
- package/dist/lib/{system-prompt-DT_KeYaL.js.map → system-prompt-bhGRLoL2.js.map} +1 -1
- package/dist/lib/{tools-Beuyh8y1.js → tools-B8OJ4sMF.js} +4 -4
- package/dist/lib/{tools-Beuyh8y1.js.map → tools-B8OJ4sMF.js.map} +1 -1
- package/dist/lib/{transformers-DydnReu4.js → transformers-BMURofG6.js} +2 -2
- package/dist/lib/{transformers-DydnReu4.js.map → transformers-BMURofG6.js.map} +1 -1
- package/dist/lib/{trusted-types-CfwZl_rr.js → trusted-types-HwsGS5Nj.js} +19 -17
- package/dist/lib/{trusted-types-CfwZl_rr.js.map → trusted-types-HwsGS5Nj.js.map} +1 -1
- package/dist/lib/{upload-group-file-BbBzjTcN.js → upload-group-file-CJpoNjEb.js} +3 -3
- package/dist/lib/{upload-group-file-BbBzjTcN.js.map → upload-group-file-CJpoNjEb.js.map} +1 -1
- package/dist/lib/utils/index.js +1 -1
- package/dist/lib/utils/namespaced-storage.js +1 -1
- package/dist/lib/utils/runtime-assets.js +1 -1
- package/dist/lib/utils/utils.js +1 -1
- package/dist/lib/{webmcp-DCfAFiIO.js → webmcp-BoMTvgmX.js} +3 -3
- package/dist/lib/{webmcp-DCfAFiIO.js.map → webmcp-BoMTvgmX.js.map} +1 -1
- package/dist/lib/{write-group-file-bytes-Ccn-VFUU.js → write-group-file-bytes-CNT7DqOZ.js} +3 -3
- package/dist/lib/{write-group-file-bytes-Ccn-VFUU.js.map → write-group-file-bytes-CNT7DqOZ.js.map} +1 -1
- package/dist/public/.well-known/mcp/server-card.json +12 -4
- package/dist/public/.well-known/mcp.json +12 -4
- package/dist/public/agent.worker.js +1 -1
- package/dist/public/attachment-capabilities-AdwXt3--.js +1 -0
- package/dist/public/{channel-BylT3rJC.js → channel-Dk7wl-Av.js} +1 -1
- package/dist/public/{chat-template-DPHJy7tr.js → chat-template-BwAnTFKf.js} +1 -1
- package/dist/public/{compact-context-BINQh64w.js → compact-context-fOTqwKF6.js} +2 -2
- package/dist/public/config-C16fFWtP.js +1 -0
- package/dist/public/{configure-peer-js-DChhcOfe.js → configure-peer-js-BOV0tR6G.js} +1 -1
- package/dist/public/{connections-CHaw0VqP.js → connections-Dxwj8yK_.js} +1 -1
- package/dist/public/{create-model-cache-fetch-DQebkoPL.js → create-model-cache-fetch-DSAFjOwc.js} +1 -1
- package/dist/public/{credentials-CgVqS119.js → credentials-CJUQ5Ep2.js} +1 -1
- package/dist/public/{custom-element-security-kiDhPfb8.js → custom-element-security-B2daIE5r.js} +2 -2
- package/dist/public/{discover-skills-Cvmx5I9V.js → discover-skills-D1sNTy2r.js} +6 -6
- package/dist/public/docs/example/article/index.html +28 -29
- package/dist/public/docs/example/article.html +28 -29
- package/dist/public/docs/publishing/index.html +28 -29
- package/dist/public/docs/publishing.html +28 -29
- package/dist/public/docs/skill-creator/index.html +28 -29
- package/dist/public/docs/skill-creator.html +28 -29
- package/dist/public/{download-group-file-BapoRgfU.js → download-group-file-BkMH-JKi.js} +1 -1
- package/dist/public/{e2e-bridge-C0g8vZKr.js → e2e-bridge-Cz95DLlb.js} +1 -1
- package/dist/public/get-group-dir-D--BiEyk.js +1 -0
- package/dist/public/{get-or-create-subscriber-id-GvRZYXwA.js → get-or-create-subscriber-id-jVHnQfbr.js} +1 -1
- package/dist/public/{git-CaAAZfVd.js → git-BmMlwIMP.js} +2 -2
- package/dist/public/{iframe-bridge-scripts-BnqtKhE4.js → iframe-bridge-scripts-Cibg0m6A.js} +1 -1
- package/dist/public/index.html +28 -29
- package/dist/public/index.js +1 -1
- package/dist/public/{init-chat-split-resize-Btonoy8u.js → init-chat-split-resize-C8AqCCiK.js} +1 -1
- package/dist/public/init-control-plane-Cb31yLTY.js +1 -0
- package/dist/public/{invoke-agent-B3Osw6K7.js → invoke-agent-CN7mSV0Z.js} +1 -1
- package/dist/public/main/index.html +28 -29
- package/dist/public/main/memory/index.html +28 -29
- package/dist/public/main/memory.html +28 -29
- package/dist/public/main.html +28 -29
- package/dist/public/{markdown-CPbU4r1U.js → markdown-CDSb5Hrl.js} +1 -1
- package/dist/public/{mcp-reconnect-CzROVsXG.js → mcp-reconnect-iPZPihwX.js} +1 -1
- package/dist/public/{memory-storage-BkoMlxOr.js → memory-storage-2m7KZ-aP.js} +1 -1
- package/dist/public/{model-ranking-CK0iBo3Z.js → model-ranking-BgOSaNIy.js} +1 -1
- package/dist/public/{move-group-entry-CTxoq7lw.js → move-group-entry-CXneuNVa.js} +1 -1
- package/dist/public/orchestrator-DBO4NZqd.js +63 -0
- package/dist/public/{orchestrator-BrDjQbGf.js → orchestrator-Dyylc8IU.js} +2 -2
- package/dist/public/{peerjs-CgF4Iz5W.js → peerjs-l0jiBoh6.js} +1 -1
- package/dist/public/{process-peer-query-param-BL2k0Hu-.js → process-peer-query-param-s-aSP1Rq.js} +1 -1
- package/dist/public/{process-pending-shared-payloads-C1AgGvn8.js → process-pending-shared-payloads-BN3GigPT.js} +1 -1
- package/dist/public/{process-room-query-param-DM0QCq3_.js → process-room-query-param-B2Qe0F0M.js} +1 -1
- package/dist/public/provider-YPZmsuHR.js +1 -0
- package/dist/public/{push-client-DJEOz7bi.js → push-client-B2LC8Qp9.js} +1 -1
- package/dist/public/{rooms-C6LXIJl4.js → rooms-ChCEOvkw.js} +1 -1
- package/dist/public/service-worker.js +1 -1
- package/dist/public/shadow-claw-Br8mWDUx.js +1176 -0
- package/dist/public/{shadow-claw-accounts--4hd_oCz.js → shadow-claw-accounts-Dm6G7KMP.js} +1 -1
- package/dist/public/{shadow-claw-card-IbNlZAdK.js → shadow-claw-card-CggS8uSa.js} +1 -1
- package/dist/public/{shadow-claw-channels-Vq_pPGa2.js → shadow-claw-channels-088vhuWO.js} +1 -1
- package/dist/public/{shadow-claw-chat-D7_GS25e.js → shadow-claw-chat-BRwRlq-n.js} +3 -3
- package/dist/public/{shadow-claw-control-plane-WTMEV8_p.js → shadow-claw-control-plane-rhKACK85.js} +2 -2
- package/dist/public/{shadow-claw-conversations-CLQgU1IT.js → shadow-claw-conversations-CF_yUfKl.js} +1 -1
- package/dist/public/{shadow-claw-empty-state-D4CrFGsN.js → shadow-claw-empty-state-CkpOSXCS.js} +1 -1
- package/dist/public/{shadow-claw-file-viewer-BhqiqLWQ.js → shadow-claw-file-viewer-DWCejuY3.js} +4 -4
- package/dist/public/{shadow-claw-files-senDiG9l.js → shadow-claw-files-L6_ioyzh.js} +2 -2
- package/dist/public/{shadow-claw-git-DOOCqY23.js → shadow-claw-git-DsdkwLqQ.js} +2 -2
- package/dist/public/{shadow-claw-integrations-Bsvc3Agq.js → shadow-claw-integrations-CSbRTOm3.js} +1 -1
- package/dist/public/{shadow-claw-llm-actYICAk.js → shadow-claw-llm-BitaeAVc.js} +2 -2
- package/dist/public/{shadow-claw-mcp-remote-BYUgrK3v.js → shadow-claw-mcp-remote-gSbV5riy.js} +1 -1
- package/dist/public/{shadow-claw-networking-Dk3p5Ny_.js → shadow-claw-networking-Dn_y6Cl9.js} +1 -1
- package/dist/public/{shadow-claw-notifications-CzPAlay8.js → shadow-claw-notifications-Cj4Lqx8U.js} +1 -1
- package/dist/public/{shadow-claw-page-header-CjJpVkyL.js → shadow-claw-page-header-DR4OZFt2.js} +1 -1
- package/dist/public/{shadow-claw-page-header-action-button-2DH5O1TD.js → shadow-claw-page-header-action-button-BnCV_2Kb.js} +1 -1
- package/dist/public/{shadow-claw-pages-3r5I-wI8.js → shadow-claw-pages-mpDOtNYj.js} +6 -6
- package/dist/public/{shadow-claw-pdf-viewer-BiCEwsoY.js → shadow-claw-pdf-viewer-DZ_84qJH.js} +1 -1
- package/dist/public/{shadow-claw-settings-DgB9RSZN.js → shadow-claw-settings-CfFTYTEy.js} +2 -2
- package/dist/public/{shadow-claw-storage-JB_43nd8.js → shadow-claw-storage-DLmiT4bG.js} +1 -1
- package/dist/public/{shadow-claw-task-server-oi5UIxdA.js → shadow-claw-task-server-BoMBCsiS.js} +1 -1
- package/dist/public/{shadow-claw-tasks-CnyiOt81.js → shadow-claw-tasks-ChEp1j7x.js} +3 -3
- package/dist/public/{shadow-claw-terminal-BC3RynHt.js → shadow-claw-terminal-BaoVbOda.js} +1 -1
- package/dist/public/{shadow-claw-toast-YjG--2Za.js → shadow-claw-toast-e8oz7z6Z.js} +1 -1
- package/dist/public/{shadow-claw-tools-Bbwk4vlT.js → shadow-claw-tools-BYjUBiJz.js} +1 -1
- package/dist/public/{shadow-claw-webvm-HZqzl2H5.js → shadow-claw-webvm-xGb13TME.js} +1 -1
- package/dist/public/{sync-web-mcp-registration-BaH2nAP0.js → sync-web-mcp-registration-CQluj-Kz.js} +1 -1
- package/dist/public/{system-prompt-Dck3N8T0.js → system-prompt-CTJn0tK-.js} +1 -1
- package/dist/public/{tools-DHA1dK2I.js → tools-D-52Zmfc.js} +1 -1
- package/dist/public/{transformers-C-DuTM2K.js → transformers-CQ9ss9rD.js} +1 -1
- package/dist/public/{upload-group-file-Cejr3zo1.js → upload-group-file-A8kB7lvO.js} +1 -1
- package/dist/public/{webmcp-CMRtu57-.js → webmcp-DIUZjVF5.js} +1 -1
- package/dist/public/{write-group-file-CmJuVQNO.js → write-group-file-R67DjJ-q.js} +1 -1
- package/dist/public/{write-group-file-bytes-Cejr3zo1.js → write-group-file-bytes-A8kB7lvO.js} +1 -1
- package/dist/public/{zip-reader-CuQ13eLe.js → zip-reader-DN7FB-Q0.js} +1 -1
- package/dist/server.js +1 -1
- package/package.json +1 -1
- package/dist/cli/chunk-BFziiMKt.js +0 -7
- package/dist/cli/chunk-BM3llsxb.js +0 -1
- package/dist/cli/chunk-Bj5qFsDi.js +0 -7
- package/dist/cli/chunk-Bj95zm-y.js +0 -1
- package/dist/cli/chunk-BpyP-esT.js +0 -1
- package/dist/cli/chunk-CX696s3_.js +0 -1
- package/dist/cli/chunk-DRxCrCAA.js +0 -139
- package/dist/cli/chunk-DjbCHa0h.js +0 -1
- package/dist/cli/chunk-DsQhAF31.js +0 -1
- package/dist/cli/chunk-VM-dECyG.js +0 -1
- package/dist/cli/chunk-heu2xRw1.js +0 -1
- package/dist/lib/orchestrator-i_QJ-o22.js.map +0 -1
- package/dist/lib/shadow-claw-DoQ7fgl5.js.map +0 -1
- package/dist/public/app-routes-V_-URXc5.js +0 -1
- package/dist/public/attachment-capabilities-B6ibLwQB.js +0 -1
- package/dist/public/config-C-YdSFZB.js +0 -1
- package/dist/public/get-group-dir-DL44kvqW.js +0 -1
- package/dist/public/init-control-plane-BoJijVtf.js +0 -1
- package/dist/public/orchestrator-CaUpEVkQ.js +0 -63
- package/dist/public/provider-DNIL4-Hw.js +0 -1
- package/dist/public/shadow-claw-DdgeYPg5.js +0 -1176
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{p as e}from"./custom-element-security-
|
|
1
|
+
import{p as e}from"./custom-element-security-B2daIE5r.js";import{b as t,r as n}from"./config-C16fFWtP.js";import{n as r}from"./db-BUuJo1Gf.js";import{t as i}from"./get-config-Bkvl__ZS.js";import{t as a}from"./html-BwtE_7wp.js";import{t as o}from"./orchestrator-DBO4NZqd.js";import{a as s,r as c}from"./toast-CtIuHprH.js";import"./shadow-claw-card-CggS8uSa.js";import"./shadow-claw-empty-state-CkpOSXCS.js";import{i as l,n as u}from"./credentials-CJUQ5Ep2.js";import{o as d}from"./shadow-claw-Br8mWDUx.js";const f=new CSSStyleSheet;f.replaceSync(`*,
|
|
2
2
|
*::before,
|
|
3
3
|
*::after {
|
|
4
4
|
font-family: var(--shadow-claw-font-sans);
|
|
@@ -444,4 +444,4 @@ import{p as e}from"./custom-element-security-kiDhPfb8.js";import{b as t,r as n}f
|
|
|
444
444
|
</button>
|
|
445
445
|
<button class="cancel-btn" data-action="cancel-account-form">Cancel</button>
|
|
446
446
|
</div>
|
|
447
|
-
</div>`),p.querySelector(`[data-action="save-account"]`)?.addEventListener(`click`,()=>this.saveAccountForm()),p.querySelector(`[data-action="cancel-account-form"]`)?.addEventListener(`click`,()=>this.hideAccountForm()),p.querySelector(`[data-field="acct-auth-mode"]`)?.addEventListener(`change`,()=>this.updateAuthModeVisibility(p)),p.querySelector(`[data-action="connect-oauth"]`)?.addEventListener(`click`,()=>void this.connectOAuthFromForm(p)),this.updateAuthModeVisibility(p))}updateAuthModeVisibility(e){let t=e.querySelector(`[data-field="acct-auth-mode"]`)?.value===`oauth`,n=e.querySelector(`[data-region="oauth-fields"]`),r=e.querySelector(`[data-region="pat-fields"]`);n instanceof HTMLElement&&(n.style.display=t?`block`:`none`),r instanceof HTMLElement&&(r.style.display=t?`none`:`block`)}updateCustomProxyVisibility(){let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="git-proxy-custom"]`),n=e.querySelector(`[data-region="git-custom-proxy-field"]`);n instanceof HTMLElement&&(n.style.display=t?.checked?`block`:`none`)}async connectOAuthFromForm(e){let t=e.querySelector(`[data-field="acct-oauth-provider"]`)?.value,n=e.querySelector(`[data-field="acct-oauth-client-id"]`)?.value.trim(),r=e.querySelector(`[data-field="acct-oauth-client-secret"]`)?.value.trim(),i=e.querySelector(`[data-field="acct-oauth-scope"]`)?.value.trim();if(!t){c(`OAuth provider is required.`,4e3);return}if(!n){c(`OAuth client ID is required.`,4e3);return}let a=e.querySelector(`[data-region="oauth-status"]`),o=e.querySelector(`[data-action="connect-oauth"]`);a&&(a.textContent=`Starting OAuth...`),o&&(o.disabled=!0);try{let e=i?i.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean):void 0,o=await fetch(`/oauth/authorize`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({providerId:t,clientId:n,clientSecret:r||void 0,redirectUri:`${window.location.origin}/oauth/callback`,scope:e})}),c=await o.json();if(!o.ok||!c.state||!c.authorizeUrl)throw Error(c.error||`OAuth authorize failed`);window.open(c.authorizeUrl,`shadowclaw-oauth`,`popup=yes,width=540,height=720`);let l=c.state,u=`pending`;for(let e=0;e<60;e++){let e=await fetch(`/oauth/session/${encodeURIComponent(l)}`),t=await e.json();if(!e.ok)throw Error(t.error||`OAuth session not found`);if(u=t.status||`pending`,u===`authorized`)break;if(u===`error`)throw Error(t.error||`OAuth authorization failed`);await new Promise(e=>setTimeout(e,1e3))}if(u!==`authorized`)throw Error(`OAuth authorization timed out`);let d=await fetch(`/oauth/token`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({state:l})}),f=await d.json();if(!d.ok||!f.accessToken)throw Error(f.error||`OAuth token exchange failed`);this.pendingOauthResult={providerId:t,accessToken:f.accessToken,refreshToken:f.refreshToken,expiresAt:f.expiresIn?Date.now()+f.expiresIn*1e3:void 0,scope:f.scope,tokenType:f.tokenType},a&&(a.textContent=`OAuth connected`),s(`OAuth connected`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);a&&(a.textContent=`OAuth failed`),c(`OAuth connect failed: ${t}`,6e3)}finally{o&&(o.disabled=!1)}}async deleteAccount(e){if(this.db){this.accounts=this.accounts.filter(t=>t.id!==e),this.defaultAccountId===e&&(this.defaultAccountId=this.accounts[0]?.id||``);try{let{setConfig:e}=await import(`./set-config-DSiuMe0k.js`).then(e=>e.n);await e(this.db,n.GIT_ACCOUNTS,this.accounts),await e(this.db,n.GIT_DEFAULT_ACCOUNT,this.defaultAccountId)}catch(e){console.warn(`Error persisting account deletion:`,e)}this.renderAccountList(),this.updateGitWarning(),s(`Account deleted`,3e3)}}async migrateLegacyAccount(){if(!this.db)return;let e=await i(this.db,n.GIT_TOKEN),t=await i(this.db,n.GIT_USERNAME);if(!e&&!t)return;let r=await i(this.db,n.GIT_PASSWORD)||``,a={id:`legacy-migrated`,label:`GitHub`,hostPattern:`github.com`,token:e||``,username:t||``,password:r,authorName:``,authorEmail:``};this.accounts=[a],this.defaultAccountId=a.id;let{setConfig:o}=await import(`./set-config-DSiuMe0k.js`).then(e=>e.n);await o(this.db,n.GIT_ACCOUNTS,this.accounts),await o(this.db,n.GIT_DEFAULT_ACCOUNT,a.id)}async render(){let e=this.shadowRoot;if(e)try{let t=await i(this.db,n.GIT_CORS_PROXY)||`local`,r=e.querySelector(`[data-setting="git-proxy-local"]`),a=e.querySelector(`[data-setting="git-proxy-public"]`),s=e.querySelector(`[data-setting="git-proxy-custom"]`),c=e.querySelector(`[data-setting="git-proxy-url-input"]`);r&&a&&s&&(r.checked=t===`local`,a.checked=t===`public`,s.checked=t===`custom`),c&&(c.value=o.gitProxyUrl||`/git-proxy`),this.updateCustomProxyVisibility();let l=e.querySelector(`[data-setting="git-author-name-input"]`);l&&(l.value=await i(this.db,n.GIT_AUTHOR_NAME)||`ShadowClaw`);let u=e.querySelector(`[data-setting="git-author-email-input"]`);u&&(u.value=await i(this.db,n.GIT_AUTHOR_EMAIL)||`agent@example.com`);let d=await i(this.db,n.GIT_ACCOUNTS);this.accounts=Array.isArray(d)?d:[],this.defaultAccountId=await i(this.db,n.GIT_DEFAULT_ACCOUNT)||``,this.accounts.length===0&&await this.migrateLegacyAccount(),this.renderAccountList(),this.updateGitWarning()}catch(e){console.warn(`Could not load git settings:`,e)}}async saveAccountForm(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-region="account-form-slot"]`);if(!t)return;let r=t.querySelector(`[data-field="acct-label"]`)?.value.trim(),i=t.querySelector(`[data-field="acct-host"]`)?.value.trim(),a=t.querySelector(`[data-field="acct-auth-mode"]`)?.value;if(!r||!i)c(`Label and Host Pattern are required.`,4e3);else try{let{encryptValue:e}=await import(`./crypto-4ETeplbS.js`).then(e=>e.t),{setConfig:o}=await import(`./set-config-DSiuMe0k.js`).then(e=>e.n),l=t.querySelector(`[data-field="acct-token"]`)?.value.trim(),u=t.querySelector(`[data-field="acct-password"]`)?.value.trim(),d=t.querySelector(`[data-field="acct-username"]`)?.value.trim()||``,f=t.querySelector(`[data-field="acct-author-name"]`)?.value.trim()||``,p=t.querySelector(`[data-field="acct-author-email"]`)?.value.trim()||``,m=this.editingAccountId===`new`,h=m?null:this.accounts.find(e=>e.id===this.editingAccountId),g=h?.token||``,_=h?.password||``,v=h?.oauthProviderId,y=h?.oauthClientId,b=h?.oauthClientSecret,x=h?.accessTokenExpiresAt,S=h?.refreshToken,C=h?.scopes,w=h?.tokenType,T=h?.oauthRefreshFailureCount,E=h?.oauthReauthRequired,D=h?.oauthReauthRequiredAt;if(a===`oauth`){v=t.querySelector(`[data-field="acct-oauth-provider"]`)?.value,y=t.querySelector(`[data-field="acct-oauth-client-id"]`)?.value.trim();let n=t.querySelector(`[data-field="acct-oauth-client-secret"]`)?.value.trim(),r=t.querySelector(`[data-field="acct-oauth-scope"]`)?.value.trim(),i=r?r.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean):void 0;if(!v){c(`OAuth provider is required for OAuth mode.`,4e3);return}if(!y){c(`OAuth client ID is required for OAuth mode.`,4e3);return}if(n){let t=await e(n);t&&(b=t)}if(this.pendingOauthResult?.accessToken){let t=await e(this.pendingOauthResult.accessToken);if(t&&(g=t),this.pendingOauthResult.refreshToken){let t=await e(this.pendingOauthResult.refreshToken);t&&(S=t)}x=this.pendingOauthResult.expiresAt,C=this.pendingOauthResult.scope?this.pendingOauthResult.scope.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean):i||C,w=this.pendingOauthResult.tokenType,T=0,E=!1,D=void 0}else C=i||C;if(!g){c(`Connect OAuth first to obtain an access token for this account.`,5e3);return}_=``}else{if(l){let t=await e(l);t&&(g=t)}if(u){let t=await e(u);t&&(_=t)}v=void 0,y=void 0,b=void 0,x=void 0,S=void 0,C=void 0,w=void 0,T=void 0,E=void 0,D=void 0}if(m){let{ulid:e}=await import(`./ulid-BSJxYh6W.js`).then(e=>e.n),t={id:e(),label:r,hostPattern:i,token:g,username:a===`oauth`?``:d,password:_,authorName:f,authorEmail:p,authMode:a||`token`,oauthProviderId:v,oauthClientId:y,oauthClientSecret:b,accessTokenExpiresAt:x,refreshToken:S,scopes:C,tokenType:w,oauthRefreshFailureCount:T,oauthReauthRequired:E,oauthReauthRequiredAt:D};this.accounts.push(t),this.accounts.length===1&&(this.defaultAccountId=t.id,await o(this.db,n.GIT_DEFAULT_ACCOUNT,t.id))}else h&&(h.label=r,h.hostPattern=i,h.token=g,h.username=a===`oauth`?``:d,h.password=_,h.authorName=f,h.authorEmail=p,h.authMode=a||`token`,h.oauthProviderId=v,h.oauthClientId=y,h.oauthClientSecret=b,h.accessTokenExpiresAt=x,h.refreshToken=S,h.scopes=C,h.tokenType=w,h.oauthRefreshFailureCount=T,h.oauthReauthRequired=E,h.oauthReauthRequiredAt=D);await o(this.db,n.GIT_ACCOUNTS,this.accounts),this.hideAccountForm(),this.renderAccountList(),this.updateGitWarning(),s(m?`Account added`:`Account updated`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);c(`Error saving account: `+t,6e3)}}async saveGitSettings(){if(!this.db)return;let e=this.shadowRoot;if(e)try{let{setConfig:t}=await import(`./set-config-DSiuMe0k.js`).then(e=>e.n),r=e.querySelector(`[data-setting="git-proxy-public"]`),i=e.querySelector(`[data-setting="git-proxy-custom"]`),a=r?.checked?`public`:i?.checked?`custom`:`local`;if(await t(this.db,n.GIT_CORS_PROXY,a),a===`custom`){let t=e.querySelector(`[data-setting="git-proxy-url-input"]`)?.value.trim()||`/git-proxy`,{orchestratorStore:n}=await import(`./orchestrator-CaUpEVkQ.js`).then(e=>e.n);await n.setGitProxyUrl(this.db,t)}let o=e.querySelector(`[data-setting="git-author-name-input"]`);o&&await t(this.db,n.GIT_AUTHOR_NAME,o.value.trim()||`ShadowClaw`);let c=e.querySelector(`[data-setting="git-author-email-input"]`);c&&await t(this.db,n.GIT_AUTHOR_EMAIL,c.value.trim()||`agent@example.com`),s(`Git settings saved`,3e3),this.updateGitWarning()}catch(e){let t=e instanceof Error?e.message:String(e);c(`Error saving Git settings: `+t,6e3)}}async setDefaultAccount(e){if(this.db){this.defaultAccountId=e;try{let{setConfig:t}=await import(`./set-config-DSiuMe0k.js`).then(e=>e.n);await t(this.db,n.GIT_DEFAULT_ACCOUNT,e)}catch(e){console.warn(`Error setting default account:`,e)}this.renderAccountList(),s(`Default account updated`,3e3)}}async updateGitWarning(){let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="git-proxy-warning"]`);if(!t)return;let n=e.querySelector(`[data-setting="git-proxy-public"]`),r=this.accounts.some(e=>!!e.token);t.style.display=n?.checked&&r?`block`:`none`}};customElements.get(_)||customElements.define(_,x);export{x as ShadowClawGit};
|
|
447
|
+
</div>`),p.querySelector(`[data-action="save-account"]`)?.addEventListener(`click`,()=>this.saveAccountForm()),p.querySelector(`[data-action="cancel-account-form"]`)?.addEventListener(`click`,()=>this.hideAccountForm()),p.querySelector(`[data-field="acct-auth-mode"]`)?.addEventListener(`change`,()=>this.updateAuthModeVisibility(p)),p.querySelector(`[data-action="connect-oauth"]`)?.addEventListener(`click`,()=>void this.connectOAuthFromForm(p)),this.updateAuthModeVisibility(p))}updateAuthModeVisibility(e){let t=e.querySelector(`[data-field="acct-auth-mode"]`)?.value===`oauth`,n=e.querySelector(`[data-region="oauth-fields"]`),r=e.querySelector(`[data-region="pat-fields"]`);n instanceof HTMLElement&&(n.style.display=t?`block`:`none`),r instanceof HTMLElement&&(r.style.display=t?`none`:`block`)}updateCustomProxyVisibility(){let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="git-proxy-custom"]`),n=e.querySelector(`[data-region="git-custom-proxy-field"]`);n instanceof HTMLElement&&(n.style.display=t?.checked?`block`:`none`)}async connectOAuthFromForm(e){let t=e.querySelector(`[data-field="acct-oauth-provider"]`)?.value,n=e.querySelector(`[data-field="acct-oauth-client-id"]`)?.value.trim(),r=e.querySelector(`[data-field="acct-oauth-client-secret"]`)?.value.trim(),i=e.querySelector(`[data-field="acct-oauth-scope"]`)?.value.trim();if(!t){c(`OAuth provider is required.`,4e3);return}if(!n){c(`OAuth client ID is required.`,4e3);return}let a=e.querySelector(`[data-region="oauth-status"]`),o=e.querySelector(`[data-action="connect-oauth"]`);a&&(a.textContent=`Starting OAuth...`),o&&(o.disabled=!0);try{let e=i?i.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean):void 0,o=await fetch(`/oauth/authorize`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({providerId:t,clientId:n,clientSecret:r||void 0,redirectUri:`${window.location.origin}/oauth/callback`,scope:e})}),c=await o.json();if(!o.ok||!c.state||!c.authorizeUrl)throw Error(c.error||`OAuth authorize failed`);window.open(c.authorizeUrl,`shadowclaw-oauth`,`popup=yes,width=540,height=720`);let l=c.state,u=`pending`;for(let e=0;e<60;e++){let e=await fetch(`/oauth/session/${encodeURIComponent(l)}`),t=await e.json();if(!e.ok)throw Error(t.error||`OAuth session not found`);if(u=t.status||`pending`,u===`authorized`)break;if(u===`error`)throw Error(t.error||`OAuth authorization failed`);await new Promise(e=>setTimeout(e,1e3))}if(u!==`authorized`)throw Error(`OAuth authorization timed out`);let d=await fetch(`/oauth/token`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({state:l})}),f=await d.json();if(!d.ok||!f.accessToken)throw Error(f.error||`OAuth token exchange failed`);this.pendingOauthResult={providerId:t,accessToken:f.accessToken,refreshToken:f.refreshToken,expiresAt:f.expiresIn?Date.now()+f.expiresIn*1e3:void 0,scope:f.scope,tokenType:f.tokenType},a&&(a.textContent=`OAuth connected`),s(`OAuth connected`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);a&&(a.textContent=`OAuth failed`),c(`OAuth connect failed: ${t}`,6e3)}finally{o&&(o.disabled=!1)}}async deleteAccount(e){if(this.db){this.accounts=this.accounts.filter(t=>t.id!==e),this.defaultAccountId===e&&(this.defaultAccountId=this.accounts[0]?.id||``);try{let{setConfig:e}=await import(`./set-config-DSiuMe0k.js`).then(e=>e.n);await e(this.db,n.GIT_ACCOUNTS,this.accounts),await e(this.db,n.GIT_DEFAULT_ACCOUNT,this.defaultAccountId)}catch(e){console.warn(`Error persisting account deletion:`,e)}this.renderAccountList(),this.updateGitWarning(),s(`Account deleted`,3e3)}}async migrateLegacyAccount(){if(!this.db)return;let e=await i(this.db,n.GIT_TOKEN),t=await i(this.db,n.GIT_USERNAME);if(!e&&!t)return;let r=await i(this.db,n.GIT_PASSWORD)||``,a={id:`legacy-migrated`,label:`GitHub`,hostPattern:`github.com`,token:e||``,username:t||``,password:r,authorName:``,authorEmail:``};this.accounts=[a],this.defaultAccountId=a.id;let{setConfig:o}=await import(`./set-config-DSiuMe0k.js`).then(e=>e.n);await o(this.db,n.GIT_ACCOUNTS,this.accounts),await o(this.db,n.GIT_DEFAULT_ACCOUNT,a.id)}async render(){let e=this.shadowRoot;if(e)try{let t=await i(this.db,n.GIT_CORS_PROXY)||`local`,r=e.querySelector(`[data-setting="git-proxy-local"]`),a=e.querySelector(`[data-setting="git-proxy-public"]`),s=e.querySelector(`[data-setting="git-proxy-custom"]`),c=e.querySelector(`[data-setting="git-proxy-url-input"]`);r&&a&&s&&(r.checked=t===`local`,a.checked=t===`public`,s.checked=t===`custom`),c&&(c.value=o.gitProxyUrl||`/git-proxy`),this.updateCustomProxyVisibility();let l=e.querySelector(`[data-setting="git-author-name-input"]`);l&&(l.value=await i(this.db,n.GIT_AUTHOR_NAME)||`ShadowClaw`);let u=e.querySelector(`[data-setting="git-author-email-input"]`);u&&(u.value=await i(this.db,n.GIT_AUTHOR_EMAIL)||`agent@example.com`);let d=await i(this.db,n.GIT_ACCOUNTS);this.accounts=Array.isArray(d)?d:[],this.defaultAccountId=await i(this.db,n.GIT_DEFAULT_ACCOUNT)||``,this.accounts.length===0&&await this.migrateLegacyAccount(),this.renderAccountList(),this.updateGitWarning()}catch(e){console.warn(`Could not load git settings:`,e)}}async saveAccountForm(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-region="account-form-slot"]`);if(!t)return;let r=t.querySelector(`[data-field="acct-label"]`)?.value.trim(),i=t.querySelector(`[data-field="acct-host"]`)?.value.trim(),a=t.querySelector(`[data-field="acct-auth-mode"]`)?.value;if(!r||!i)c(`Label and Host Pattern are required.`,4e3);else try{let{encryptValue:e}=await import(`./crypto-4ETeplbS.js`).then(e=>e.t),{setConfig:o}=await import(`./set-config-DSiuMe0k.js`).then(e=>e.n),l=t.querySelector(`[data-field="acct-token"]`)?.value.trim(),u=t.querySelector(`[data-field="acct-password"]`)?.value.trim(),d=t.querySelector(`[data-field="acct-username"]`)?.value.trim()||``,f=t.querySelector(`[data-field="acct-author-name"]`)?.value.trim()||``,p=t.querySelector(`[data-field="acct-author-email"]`)?.value.trim()||``,m=this.editingAccountId===`new`,h=m?null:this.accounts.find(e=>e.id===this.editingAccountId),g=h?.token||``,_=h?.password||``,v=h?.oauthProviderId,y=h?.oauthClientId,b=h?.oauthClientSecret,x=h?.accessTokenExpiresAt,S=h?.refreshToken,C=h?.scopes,w=h?.tokenType,T=h?.oauthRefreshFailureCount,E=h?.oauthReauthRequired,D=h?.oauthReauthRequiredAt;if(a===`oauth`){v=t.querySelector(`[data-field="acct-oauth-provider"]`)?.value,y=t.querySelector(`[data-field="acct-oauth-client-id"]`)?.value.trim();let n=t.querySelector(`[data-field="acct-oauth-client-secret"]`)?.value.trim(),r=t.querySelector(`[data-field="acct-oauth-scope"]`)?.value.trim(),i=r?r.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean):void 0;if(!v){c(`OAuth provider is required for OAuth mode.`,4e3);return}if(!y){c(`OAuth client ID is required for OAuth mode.`,4e3);return}if(n){let t=await e(n);t&&(b=t)}if(this.pendingOauthResult?.accessToken){let t=await e(this.pendingOauthResult.accessToken);if(t&&(g=t),this.pendingOauthResult.refreshToken){let t=await e(this.pendingOauthResult.refreshToken);t&&(S=t)}x=this.pendingOauthResult.expiresAt,C=this.pendingOauthResult.scope?this.pendingOauthResult.scope.split(/[\s,]+/).map(e=>e.trim()).filter(Boolean):i||C,w=this.pendingOauthResult.tokenType,T=0,E=!1,D=void 0}else C=i||C;if(!g){c(`Connect OAuth first to obtain an access token for this account.`,5e3);return}_=``}else{if(l){let t=await e(l);t&&(g=t)}if(u){let t=await e(u);t&&(_=t)}v=void 0,y=void 0,b=void 0,x=void 0,S=void 0,C=void 0,w=void 0,T=void 0,E=void 0,D=void 0}if(m){let{ulid:e}=await import(`./ulid-BSJxYh6W.js`).then(e=>e.n),t={id:e(),label:r,hostPattern:i,token:g,username:a===`oauth`?``:d,password:_,authorName:f,authorEmail:p,authMode:a||`token`,oauthProviderId:v,oauthClientId:y,oauthClientSecret:b,accessTokenExpiresAt:x,refreshToken:S,scopes:C,tokenType:w,oauthRefreshFailureCount:T,oauthReauthRequired:E,oauthReauthRequiredAt:D};this.accounts.push(t),this.accounts.length===1&&(this.defaultAccountId=t.id,await o(this.db,n.GIT_DEFAULT_ACCOUNT,t.id))}else h&&(h.label=r,h.hostPattern=i,h.token=g,h.username=a===`oauth`?``:d,h.password=_,h.authorName=f,h.authorEmail=p,h.authMode=a||`token`,h.oauthProviderId=v,h.oauthClientId=y,h.oauthClientSecret=b,h.accessTokenExpiresAt=x,h.refreshToken=S,h.scopes=C,h.tokenType=w,h.oauthRefreshFailureCount=T,h.oauthReauthRequired=E,h.oauthReauthRequiredAt=D);await o(this.db,n.GIT_ACCOUNTS,this.accounts),this.hideAccountForm(),this.renderAccountList(),this.updateGitWarning(),s(m?`Account added`:`Account updated`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);c(`Error saving account: `+t,6e3)}}async saveGitSettings(){if(!this.db)return;let e=this.shadowRoot;if(e)try{let{setConfig:t}=await import(`./set-config-DSiuMe0k.js`).then(e=>e.n),r=e.querySelector(`[data-setting="git-proxy-public"]`),i=e.querySelector(`[data-setting="git-proxy-custom"]`),a=r?.checked?`public`:i?.checked?`custom`:`local`;if(await t(this.db,n.GIT_CORS_PROXY,a),a===`custom`){let t=e.querySelector(`[data-setting="git-proxy-url-input"]`)?.value.trim()||`/git-proxy`,{orchestratorStore:n}=await import(`./orchestrator-DBO4NZqd.js`).then(e=>e.n);await n.setGitProxyUrl(this.db,t)}let o=e.querySelector(`[data-setting="git-author-name-input"]`);o&&await t(this.db,n.GIT_AUTHOR_NAME,o.value.trim()||`ShadowClaw`);let c=e.querySelector(`[data-setting="git-author-email-input"]`);c&&await t(this.db,n.GIT_AUTHOR_EMAIL,c.value.trim()||`agent@example.com`),s(`Git settings saved`,3e3),this.updateGitWarning()}catch(e){let t=e instanceof Error?e.message:String(e);c(`Error saving Git settings: `+t,6e3)}}async setDefaultAccount(e){if(this.db){this.defaultAccountId=e;try{let{setConfig:t}=await import(`./set-config-DSiuMe0k.js`).then(e=>e.n);await t(this.db,n.GIT_DEFAULT_ACCOUNT,e)}catch(e){console.warn(`Error setting default account:`,e)}this.renderAccountList(),s(`Default account updated`,3e3)}}async updateGitWarning(){let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="git-proxy-warning"]`);if(!t)return;let n=e.querySelector(`[data-setting="git-proxy-public"]`),r=this.accounts.some(e=>!!e.token);t.style.display=n?.checked&&r?`block`:`none`}};customElements.get(_)||customElements.define(_,x);export{x as ShadowClawGit};
|
package/dist/public/{shadow-claw-integrations-Bsvc3Agq.js → shadow-claw-integrations-CSbRTOm3.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{p as e}from"./custom-element-security-
|
|
1
|
+
import{p as e}from"./custom-element-security-B2daIE5r.js";import{r as t}from"./config-C16fFWtP.js";import{n}from"./db-BUuJo1Gf.js";import{t as r}from"./get-config-Bkvl__ZS.js";import{t as i}from"./set-config-DSiuMe0k.js";import{t as a}from"./ulid-BSJxYh6W.js";import{a as o,r as s}from"./toast-CtIuHprH.js";import{r as c}from"./crypto-4ETeplbS.js";import{a as l,i as u,n as d,o as f,s as p,t as m}from"./connections-Dxwj8yK_.js";import{o as h}from"./shadow-claw-Br8mWDUx.js";function g(e){if(e.authMode===`oauth`){let t=(e.pendingOauthAccessToken||``).trim();return t?{authType:`oauth`,accessToken:t}:{error:`OAuth access token is missing. Click Connect OAuth first (or save and reconnect).`}}let t=(e.passwordInput||``).trim();return t?{authType:`basic_userpass`,password:t}:{error:`Password/app password is missing. Enter it to test this connection.`}}const _=new CSSStyleSheet;_.replaceSync(`*,
|
|
2
2
|
*::before,
|
|
3
3
|
*::after {
|
|
4
4
|
font-family: var(--shadow-claw-font-sans);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{p as e}from"./custom-element-security-
|
|
1
|
+
import{p as e}from"./custom-element-security-B2daIE5r.js";import{P as t,c as n,et as r,r as i,u as a}from"./config-C16fFWtP.js";import{n as o}from"./db-BUuJo1Gf.js";import{t as s}from"./get-config-Bkvl__ZS.js";import{A as c,F as l,I as u,L as d,M as f,P as p,j as m,t as h}from"./orchestrator-DBO4NZqd.js";import{t as g}from"./set-config-DSiuMe0k.js";import{a as _,r as v,s as y}from"./toast-CtIuHprH.js";import{S as b,c as x,f as S,h as C,i as w,m as T,o as E,p as D,s as O,v as k}from"./provider-YPZmsuHR.js";import{t as A}from"./chat-template-BwAnTFKf.js";import{f as j,p as M}from"./transformers-CQ9ss9rD.js";import{i as N,n as P,r as F,t as I}from"./model-ranking-BgOSaNIy.js";import{a as L,i as R,o as z,r as B}from"./shadow-claw-Br8mWDUx.js";const V=[{pattern:`gemma-3-1b-it-ONNX-GQA`,contextWindow:128e3},{pattern:`gemma-3-1b-it-ONNX`,contextWindow:128e3},{pattern:`Qwen3-0.6B-ONNX`,contextWindow:131072},{pattern:`Qwen3.5`,contextWindow:32768},{pattern:`Llama-3.2`,contextWindow:128e3},{pattern:`Phi-4`,contextWindow:128e3},{pattern:`Phi-3.5`,contextWindow:128e3},{pattern:`SmolLM`,contextWindow:8192},{pattern:`DeepSeek-R1`,contextWindow:128e3},{pattern:`LFM2`,contextWindow:32768},{pattern:`gpt-oss`,contextWindow:32768},{pattern:`gemma-4`,contextWindow:128e3},{pattern:`browser-built-in`,contextWindow:4096}];function H(e){let t=r.getModelInfo(e);if(t&&typeof t.contextWindow==`number`&&t.contextWindow>0)return t.contextWindow;for(let{pattern:t,contextWindow:n}of V)if(e.includes(t))return n;return null}function U(e,r,i){let a=r;e===`prompt_api`&&(r===`browser-built-in`||!r)&&(i?a=i:b()||(a=n));let o=t(a),s=typeof navigator>`u`?null:navigator,c=typeof s?.deviceMemory==`number`?s.deviceMemory:null,l=typeof s?.hardwareConcurrency==`number`?s.hardwareConcurrency:null;if(e===`prompt_api`||e===`transformers_js_browser`||e===`litert_lm_browser`||e===`ollama`){let e=H(a),t=o;c!==null&&(t=c>=32?Math.min(t,16384):c>=16?Math.min(t,8192):c>=8?Math.min(t,4096):Math.min(t,2048)),l!==null&&(l<=4?t=Math.min(t,2048):l>=16?t=Math.min(o,Math.max(t,8192)):l>=8&&(t=Math.min(o,Math.max(t,4096)))),/thinking|reasoning/i.test(a)&&(t=Math.min(t,4096)),t=Math.max(512,Math.min(t,o));let n=[];return e!==null&&n.push(`native context: ${e.toLocaleString()} tokens`),c!==null&&n.push(`${c} GB browser-reported memory`),l!==null&&n.push(`${l} CPU threads`),/thinking|reasoning/i.test(a)&&n.push(`reasoning model`),{recommended:t,detail:n.length>0?`Recommended for this device: ${t.toLocaleString()} tokens (${n.join(`, `)}). Model ceiling: ${o.toLocaleString()}.`:`Recommended for local inference: ${t.toLocaleString()} tokens. Model ceiling: ${o.toLocaleString()}.`}}return{recommended:o,detail:`Model-aware ceiling: ${o.toLocaleString()} tokens.`}}const W=new CSSStyleSheet;W.replaceSync(`*,
|
|
2
2
|
*::before,
|
|
3
3
|
*::after {
|
|
4
4
|
font-family: var(--shadow-claw-font-sans);
|
|
@@ -671,4 +671,4 @@ import{p as e}from"./custom-element-security-kiDhPfb8.js";import{P as t,c as n,r
|
|
|
671
671
|
</button>
|
|
672
672
|
</div>
|
|
673
673
|
</template>
|
|
674
|
-
`,`text/html`),K=G.querySelector(`template`);let q=[];q=K?Array.from(K.content.children):Array.from(G.head.children).concat(Array.from(G.body.children));var J=q;const Y=`shadow-claw-llm`;var X=class extends z{static styles=W;static template=J;db;lastLlamafileHelpKey;llamafileDiscoveredModelIds;llamafileModelLoadError;modelFetchToken;orchestrator;constructor(){super(),this.db=null,this.orchestrator=null,this.llamafileDiscoveredModelIds=[],this.llamafileModelLoadError=null,this.lastLlamafileHelpKey=``,this.modelFetchToken=0}async connectedCallback(){if(!this.shadowRoot)throw Error(`shadowRoot not found`);this.db=await o(),this.orchestrator=h.orchestrator,this.bindEventListeners(),this.setupEffects()}applyRecommendedMaxTokens(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="max-tokens-input"]`);if(!t)return;let n=this.orchestrator.provider,r=this.orchestrator.model,i;n===`prompt_api`&&(i=e.querySelector(`[data-setting="prompt-api-fallback-select"]`)?.value||`onnx-community/Qwen3-0.6B-ONNX`);let a=U(n,r,i);t.value=String(a.recommended)}bindEventListeners(){let e=this.shadowRoot;e&&(e.querySelector(`[data-setting="provider-select"]`)?.addEventListener(`change`,()=>this.onProviderChange()),e.querySelector(`[data-setting="prompt-api-fallback-select"]`)?.addEventListener(`change`,e=>{let t=e.target;t?.value&&A(t.value).then(()=>this.updateMaxTokensUI()).catch(()=>{}),this.updateMaxTokensUI()}),e.querySelector(`[data-action="save-llm-provider"]`)?.addEventListener(`click`,()=>this.saveApiKey()),e.querySelector(`[data-action="save-model"]`)?.addEventListener(`click`,()=>this.saveModel()),e.querySelector(`[data-action="refresh-models"]`)?.addEventListener(`click`,()=>this.updateModelSelector()),e.querySelector(`[data-setting="model-select"]`)?.addEventListener(`change`,t=>{let n=e.querySelector(`[data-setting="custom-model-input"]`),r=t.target;n&&r&&(n.style.display=r.value===`__custom__`?`block`:`none`)}),e.querySelector(`[data-setting="streaming-toggle"]`)?.addEventListener(`change`,e=>{e.target instanceof HTMLInputElement&&this.onStreamingToggle(e.target.checked)}),e.querySelector(`[data-setting="context-compression-toggle"]`)?.addEventListener(`change`,e=>{e.target instanceof HTMLInputElement&&this.onContextCompressionToggle(e.target.checked)}),e.querySelector(`[data-action="save-max-iterations"]`)?.addEventListener(`click`,()=>this.saveMaxIterations()),e.querySelector(`[data-action="save-subagent-max-parallel"]`)?.addEventListener(`click`,()=>this.saveSubagentMaxParallel()),e.querySelector(`[data-action="save-subagent-workspace-mode"]`)?.addEventListener(`click`,()=>this.saveSubagentWorkspaceMode()),e.querySelector(`[data-action="save-rate-limit-settings"]`)?.addEventListener(`click`,()=>this.saveRateLimitSettings()),e.querySelector(`[data-action="save-max-tokens"]`)?.addEventListener(`click`,()=>this.saveMaxTokens()),e.querySelector(`[data-action="save-reasoning-effort"]`)?.addEventListener(`click`,()=>this.saveReasoningEffort()),e.querySelector(`[data-action="apply-recommended-max-tokens"]`)?.addEventListener(`click`,()=>this.applyRecommendedMaxTokens()),e.querySelector(`[data-action="save-llamafile-settings"]`)?.addEventListener(`click`,()=>this.saveLlamafileSettings()),e.querySelector(`[data-action="save-bedrock-settings"]`)?.addEventListener(`click`,()=>this.saveBedrockSettings()),e.querySelector(`[data-action="save-mesh-llm-settings"]`)?.addEventListener(`click`,()=>this.saveMeshLlmSettings()),e.querySelector(`[data-action="save-transformers-js-settings"]`)?.addEventListener(`click`,()=>this.saveTransformersJsSettings()),e.querySelector(`[data-action="save-builtin-ai-settings"]`)?.addEventListener(`click`,()=>this.saveBuiltinAiSettings()),e.querySelector(`[data-setting="llamafile-mode"]`)?.addEventListener(`change`,()=>{this.updateLlamafileModeVisibility(),this.updateLlamafileModelSectionVisibility(),this.updateModelSelector()}))}renderBedrockSettings(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=this.orchestrator?O(this.orchestrator):null,n=e.querySelector(`[data-setting="bedrock-region-input"]`),r=e.querySelector(`[data-setting="bedrock-profile-input"]`),i=e.querySelector(`[data-setting="bedrock-auth-mode"], [data-setting="bedrock-auth-mode-select"]`);n&&(n.value=t?.region||``),r&&(r.value=t?.profile||``),i&&(i.value=t?.authMode||`provider_chain`)}renderLlamafileSettings(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=x(this.orchestrator);if(!t)return;let n=e.querySelector(`[data-setting="llamafile-mode"], [data-setting="llamafile-mode-select"]`),r=e.querySelector(`[data-setting="llamafile-host"], [data-setting="llamafile-host-input"]`),i=e.querySelector(`[data-setting="llamafile-port"], [data-setting="llamafile-port-input"]`),a=e.querySelector(`[data-setting="llamafile-offline"], [data-setting="llamafile-offline-toggle"]`);n&&(n.value=t.mode),r&&(r.value=t.host),i&&(i.value=String(t.port)),a&&(a.checked=t.offline)}renderMeshLlmSettings(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=this.orchestrator.getMeshLlmSettings?.(),n=e.querySelector(`[data-setting="mesh-llm-host-input"]`);n&&(n.value=t?.host||``)}setupEffects(){L(()=>{h.ready&&(this.orchestrator=h.orchestrator,this.render())})}updateBedrockSettingsVisibility(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="bedrock-settings"]`);n&&(n.style.display=e===`bedrock_proxy`?`block`:`none`)}updateLlamafileModelSectionVisibility(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="model-settings"]`);if(!t)return;let n=x(this.orchestrator);t.style.display=n?.mode===`server`?`none`:`block`}updateLlamafileModeVisibility(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="llamafile-server-only"]`),n=e.querySelector(`[data-setting="llamafile-cli-only"]`);if(!t&&!n)return;let r=this.orchestrator.provider===`llamafile`&&x(this.orchestrator)?.mode===`server`;t&&(t.style.display=r?`block`:`none`),n&&(n.style.display=r?`none`:`block`)}updateLlamafileSettingsVisibility(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="llamafile-settings"]`);n&&(n.style.display=e===`llamafile`?`block`:`none`)}updateMaxTokensUI(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="max-tokens-input"]`),n=e.querySelector(`[data-setting="max-tokens-helper"]`),r=this.orchestrator.provider,i=this.orchestrator.model,a;r===`prompt_api`&&(a=e.querySelector(`[data-setting="prompt-api-fallback-select"]`)?.value||`onnx-community/Qwen3-0.6B-ONNX`);let o=this.orchestrator.maxTokens,s=U(r,i,a);t&&(t.value=String(o),t.removeAttribute(`max`)),n&&(n.textContent=`${s.detail} Current value: ${o.toLocaleString()}.`)}updateMeshLlmSettingsVisibility(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="mesh-llm-settings"]`);n&&(n.style.display=e===`mesh-llm`?`block`:`none`)}updateModelProviderHelperText(){let e=this.shadowRoot;if(!e||!this.orchestrator)return;let t=e.querySelector(`[data-setting="model-provider-helper"]`);if(!t)return;let n=this.orchestrator.provider,r=x(this.orchestrator);n!==`llamafile`||r?.mode===`server`?(t.hidden=!0,t.textContent=``):(t.hidden=!1,t.textContent=this.llamafileDiscoveredModelIds.length>0?`Discovered ${this.llamafileDiscoveredModelIds.length} *.llamafile model${this.llamafileDiscoveredModelIds.length===1?``:`s`} in ${j}. Choose Custom Model ID to target a file name that is not listed yet.`:this.llamafileModelLoadError?`Could not load llamafile models from ${j}. You can still enter a custom model id, but the file must exist there.`:`ShadowClaw looks for *.llamafile binaries in ${j}.`)}updateModelSelector(){if(!this.orchestrator)return;let t=this.shadowRoot;if(!t)return;let n=E(),r=this.orchestrator.provider,i=n.find(e=>e.id===r),a=++this.modelFetchToken;r!==`llamafile`&&(this.llamafileDiscoveredModelIds=[],this.llamafileModelLoadError=null);let o=!1;if(r===`llamafile`&&x(this.orchestrator)?.mode===`server`){let n=t.querySelector(`[data-setting="model-select"]`);n&&(e(n,`<option value="">Model is served by local llamafile server</option>`),n.disabled=!0),o=!0}this.updateModelProviderHelperText();let s=t.querySelector(`[data-setting="prompt-api-fallback-group"]`);if(s){let e=R();s.style.display=r===`prompt_api`&&!e?`block`:`none`,B().then(e=>{this.orchestrator?.provider===`prompt_api`&&(s.style.display=e?`none`:`block`)})}let c=t.querySelector(`[data-setting="model-select"]`),l=t.querySelector(`[data-setting="custom-model-input"]`),u=this.orchestrator.model,d=/* @__PURE__ */ new Set([`transformers_js_local`,`transformers_js_browser`,`ollama`,`llamafile`,`prompt_api`]),f=e=>e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/\"/g,`"`).replace(/'/g,`'`),p=e=>d.has(r)||r===`mesh-llm`?!0:typeof e==`string`?!1:Array.isArray(e.providers)?e.providers.some(e=>e.provider===`hf-inference`||!e.pricing||parseFloat(String(e.pricing.input||e.pricing.prompt||0))===0&&parseFloat(String(e.pricing.output||e.pricing.completion||0))===0):e.pricing?parseFloat(String(e.pricing.prompt||0))===0&&parseFloat(String(e.pricing.completion||0))===0:!1,m=e=>{let t=typeof e==`string`?e:e.id||e.name;return d.has(r)?F(t):typeof e==`string`?!1:e.supports_tools===!0||e.supportsTools===!0?!0:Array.isArray(e.providers)?e.providers.some(e=>e.supports_tools===!0):Array.isArray(e.supported_parameters)?e.supported_parameters.includes(`tools`):!1},h=e=>{let t=typeof e==`string`?e:e.id||e.name;if(d.has(r))return F(t)?` 🛠️`:` ❔🛠️`;if(typeof e==`string`)return` ❔🛠️`;if(e.supports_tools===!0||e.supportsTools===!0)return` 🛠️`;if(e.supports_tools===!1||e.supportsTools===!1)return` 🚫🛠️`;if(Array.isArray(e.providers)){let t=e.providers.some(e=>e.supports_tools===!0),n=e.providers.some(e=>e.supports_tools===!1);if(t)return` 🛠️`;if(n)return` 🚫🛠️`}return Array.isArray(e.supported_parameters)?e.supported_parameters.includes(`tools`)?` 🛠️`:` 🚫🛠️`:` ❔🛠️`},g=e=>typeof e==`string`?0:typeof e.context_length==`number`?e.context_length:typeof e.context_window==`number`?e.context_window:Array.isArray(e.providers)?Math.max(...e.providers.map(e=>e.context_length||0),0):0,_=t=>{if(!c||!l)return;if(!Array.isArray(t)||t.length===0){let t=this.orchestrator?.model||``,n=r===`llamafile`?`No *.llamafile models found in ${j}`:`No models available`;e(c,[`<option value="" ${t?``:`selected`}>${f(n)}</option>`,`<option value="__custom__">-- Custom Model ID --</option>`].join(``)),t?(c.value=`__custom__`,l.value=t,l.style.display=`block`):(c.value=``,l.value=``,l.style.display=`none`),r===`llamafile`&&!t&&this.showLlamafileHelpDialog(this.llamafileModelLoadError?`Failed to load *.llamafile models: ${this.llamafileModelLoadError}`:`No *.llamafile files were found in ${j}.`),this.updateModelProviderHelperText();return}let n=[],i=[];for(let e of t)e&&(typeof e==`string`||e.id)&&(p(e)?n.push(e):i.push(e));let a=(e,t)=>{if(d.has(r)){let n=typeof e==`string`?e:e.id||e.name,i=typeof t==`string`?t:t.id||t.name;return I({id:n,supportsTools:m(e),contextLength:g(e)},{id:i,supportsTools:m(t),contextLength:g(t)},r)}let n=m(e),i=m(t);if(n!==i)return i?1:-1;let a=g(e),o=g(t);if(a!==o)return o-a;let s=typeof e==`string`?e:e.id||e.name,c=typeof t==`string`?t:t.id||t.name;return s.localeCompare(c)};n.sort(a),i.sort(a);let o=e=>{let t=typeof e==`string`?e:e.id||e.name,n=typeof e==`string`?t:typeof e.displayName==`string`&&e.displayName.trim()?e.displayName.trim():typeof e.name==`string`&&e.name.trim()?e.name.trim():t,r=h(e),i=g(e),a=``;i>=1e6?a=` (${(i/1e6).toFixed(1)}M)`:i>=1e3?a=` (${Math.round(i/1024)}k)`:i>0&&(a=` (${i})`);let o=n===t?t:`${n} - ${t}`;return`<option value="${f(t)}">${f(o)}${a}${r}</option>`},s=``;if(r===`transformers_js_browser`)s=N(u,t,{includeCustom:!0});else if(d.has(r)){let e=[...n,...i].sort(a);e.length>0&&(s+=`<optgroup label="${r===`prompt_api`?`Built-in`:`Local / Self-hosted`}">`,s+=e.map(o).join(``),s+=`</optgroup>`),s+=`<option value="__custom__">-- Custom Model ID --</option>`}else n.length>0&&(s+=`<optgroup label="Free / Included">`,s+=n.map(o).join(``),s+=`</optgroup>`),i.length>0&&(s+=`<optgroup label="Paid / Pro">`,s+=i.map(o).join(``),s+=`</optgroup>`),s+=`<option value="__custom__">-- Custom Model ID --</option>`;e(c,s),(r===`transformers_js_browser`?P(t):t.map(e=>typeof e==`string`?e:e.id||e.name)).includes(u)?(c.value=u,l.style.display=`none`):(c.value=`__custom__`,l.value=u||``,l.style.display=`block`),this.updateModelProviderHelperText()};if(!o){if(i?.modelsUrl&&c){let t=a;e(c,`<option>Loading models…</option>`),c.disabled=!0;let n={...i.headers};if(r===`llamafile`){let e=x(this.orchestrator);e&&(n[`x-llamafile-mode`]=e.mode,n[`x-llamafile-host`]=e.host,n[`x-llamafile-port`]=String(e.port),n[`x-llamafile-offline`]=e.offline?`true`:`false`)}else if(r===`bedrock_proxy`){let e=this.orchestrator?O(this.orchestrator):null;e?.region&&(n[`x-bedrock-region`]=e.region),e?.profile&&(n[`x-bedrock-profile`]=e.profile),e?.authMode&&(n[`x-bedrock-auth-mode`]=e.authMode)}w(this.orchestrator).then(a=>{if(a&&i.apiKeyHeader){let e=(i.apiKeyHeaderFormat||`{key}`).replace(`{key}`,a);n[i.apiKeyHeader]=e}i.modelsUrl&&fetch(i.modelsUrl,{headers:n}).then(e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return e.json()}).then(e=>{if(t!==this.modelFetchToken||this.orchestrator?.provider!==r)return;let n=[];if(Array.isArray(e))n=e;else if(e&&typeof e==`object`){if(n=e.models||e.data||[],n.length===0){for(let t in e)if(Array.isArray(e[t])&&e[t].length>0){n=e[t];break}}n.length===0&&e.id&&(n=[e])}if(Array.isArray(i.models)){let e=new Set(n.map(e=>typeof e==`string`?e:e.id||e.name));n=[...i.models.filter(t=>{let n=typeof t==`string`?t:t.id||t.name;return!e.has(n)}),...n]}r===`llamafile`&&(this.llamafileModelLoadError=null,this.llamafileDiscoveredModelIds=n.map(e=>typeof e==`string`?e:String(e?.id||e?.name||``)).filter(Boolean)),c.disabled=!1,_(n)}).catch(n=>{if(t!==this.modelFetchToken||this.orchestrator?.provider!==r)return;console.error(`[ShadowClaw] Failed to load models from`,i.modelsUrl,n);let a=n instanceof Error?n.message:String(n);r===`llamafile`?(this.llamafileDiscoveredModelIds=[],this.llamafileModelLoadError=a,c.disabled=!1,_([])):(e(c,`<option>Failed to load models</option>`),i?.models?(console.warn(`Falling back to statically configured models due to fetch failure.`),c.disabled=!1,_(i.models)):v(`Could not reach the model server — or proxy configuration is wrong`,5e3))})})}else i?.models&&c?(c.disabled=!1,_(i.models)):c&&(c.disabled=!1,_([]))}let y=t.querySelector(`[data-setting="api-key-helper"]`),b=t.querySelector(`[data-setting="provider-select"]`);if(y&&b){let e=b.selectedOptions[0]?.text||`Provider`,t=i?.requiresApiKey!==!1;y.textContent=r===`llamafile`?`Runs local .llamafile binaries through the local proxy. No API key required.`:t?`Enter your ${e} API key. It is encrypted and stored locally.`:`This provider does not require an API key.`}let S=t.querySelector(`[data-setting="api-key-input"]`);if(S){let e=i?.requiresApiKey===!1;S.disabled=e,S.placeholder=e?`No API key required`:`sk-...`}}updateTransformersJsSettingsVisibility(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="transformers-js-settings"]`);n&&(n.style.display=e===`transformers_js_browser`?`block`:`none`)}async onContextCompressionToggle(e){if(this.orchestrator&&this.db)try{await c(this.orchestrator,this.db,e),_(e?`Context compression enabled`:`Context compression disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving context compression setting: `+t,6e3)}}async onProviderChange(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="provider-select"]`);if(!t)return;let n=t.value,r=this.orchestrator.provider;if(n!==r)try{await k(this.orchestrator,this.db,n,{loadApiKeyForProvider:this.orchestrator.loadApiKeyForProvider.bind(this.orchestrator),getApiKeyForHeaders:()=>w(this.orchestrator)}),this.updateModelSelector(),this.updateMaxTokensUI(),this.updateLlamafileSettingsVisibility(n),this.renderLlamafileSettings(),this.updateLlamafileModeVisibility(),this.updateLlamafileModelSectionVisibility(),this.updateBedrockSettingsVisibility(n),this.updateBedrockSettingsVisibility(n),this.updateMeshLlmSettingsVisibility(n),this.updateTransformersJsSettingsVisibility(n),await this.renderTransformersJsSettings();let e=t.selectedOptions[0]?.text||n;_(`Switched to ${e}`,3e3)}catch(e){let n=e instanceof Error?e.message:String(e);v(`Error switching provider: `+n,6e3),t.value=r}}async onStreamingToggle(e){if(this.orchestrator&&this.db)try{await d(this.orchestrator,this.db,e),_(e?`Streaming enabled`:`Streaming disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving streaming setting: `+t,6e3)}}async render(){let t=this.shadowRoot;if(!t||!this.orchestrator||!this.db)return;this.bindEventListeners();let n=E(),a=this.orchestrator.provider,o=t.querySelector(`[data-setting="provider-select"]`);o&&e(o,n.map(e=>`<option value="${e.id}" ${e.id===a?`selected`:``}>${e.name}</option>`).join(``)),this.updateModelSelector(),this.updateLlamafileSettingsVisibility(a),this.renderLlamafileSettings(),this.updateLlamafileModeVisibility(),this.updateLlamafileModelSectionVisibility(),this.updateModelProviderHelperText(),this.updateBedrockSettingsVisibility(a),this.renderBedrockSettings(),this.updateMeshLlmSettingsVisibility(a),this.renderMeshLlmSettings(),this.updateTransformersJsSettingsVisibility(a),await this.renderTransformersJsSettings(),this.renderBuiltinAiSettings();let c=t.querySelector(`[data-setting="prompt-api-fallback-select"]`);c&&(c.value=await s(this.db,r.PROMPT_API_FALLBACK_MODEL)||`onnx-community/Qwen3-0.6B-ONNX`,this.updateMaxTokensUI(),c.value&&A(c.value).then(()=>{this.updateMaxTokensUI()}).catch(()=>{}));let l=t.querySelector(`[data-setting="prompt-api-device-select"]`);l&&(l.value=await s(this.db,r.PROMPT_API_BACKEND)||`auto`);let u=t.querySelector(`[data-setting="prompt-api-dtype-select"]`);u&&(u.value=await s(this.db,r.PROMPT_API_DTYPE_STRATEGY)||`auto`);let d=t.querySelector(`[data-setting="streaming-toggle"]`);d&&(d.checked=this.orchestrator.streamingEnabled);let f=t.querySelector(`[data-setting="context-compression-toggle"]`);f&&(f.checked=this.orchestrator.contextCompressionEnabled);let p=t.querySelector(`[data-setting="reasoning-effort-select"]`);p&&(p.value=this.orchestrator.reasoningEffort||`none`);let m=t.querySelector(`[data-setting="max-iterations-input"]`);m&&this.orchestrator&&(m.value=String(this.orchestrator.maxIterations));let h=t.querySelector(`[data-setting="subagent-max-parallel-input"]`);if(h){let e=await s(this.db,r.SUBAGENT_MAX_PARALLEL),t=Number(e);h.value=String(Number.isFinite(t)&&t>0?t:5)}let g=t.querySelector(`[data-setting="subagent-workspace-mode-select"]`);if(g){let e=await s(this.db,r.SUBAGENT_WORKSPACE_MODE);g.value=e===`parent`||e===`isolated`||e===`automatic`?e:i}let _=t.querySelector(`[data-setting="rate-limit-calls-per-minute-input"]`);_&&this.orchestrator&&(_.value=String(this.orchestrator.rateLimitCallsPerMinute||0));let v=t.querySelector(`[data-setting="rate-limit-auto-adapt-toggle"]`);v&&this.orchestrator&&(v.checked=this.orchestrator.rateLimitAutoAdapt!==!1),this.updateMaxTokensUI()}async renderBuiltinAiSettings(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="compaction-engine-select"]`),n=e.querySelector(`[data-setting="builtin-ai-tools-backend-select"]`),i=await s(this.db,r.COMPACTION_ENGINE_PREFERENCE),a=await s(this.db,r.BUILTIN_AI_TOOLS_BACKEND);t&&(t.value=i||`auto`),n&&(n.value=a||`active_provider`)}async renderTransformersJsSettings(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let{getConfig:t}=await import(`./get-config-Bkvl__ZS.js`).then(e=>e.n),{CONFIG_KEYS:n}=await import(`./config-C-YdSFZB.js`).then(e=>e.k),r=await t(this.db,n.TRANSFORMERS_JS_BACKEND)||`auto`,i=await t(this.db,n.TRANSFORMERS_JS_DTYPE_STRATEGY)||`auto`,a=e.querySelector(`[data-setting="transformers-js-backend"], [data-setting="transformers-js-device-select"]`);a&&(a.value=r);let o=e.querySelector(`[data-setting="transformers-js-dtype-strategy"], [data-setting="transformers-js-dtype-select"]`);o&&(o.value=i)}async requestAppDialog(e){let t=document.querySelector(`shadow-claw`);return t&&typeof t.requestDialog==`function`?await t.requestDialog(e):!1}async saveApiKey(){if(!this.orchestrator||!this.db){v(`Orchestrator not initialized`,5e3);return}let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="api-key-input"]`),n=e.querySelector(`[data-setting="provider-select"]`);if(!t||!n)return;let r=t.value.trim(),i=n.value;if(E().find(e=>e.id===i)?.requiresApiKey===!1)try{await k(this.orchestrator,this.db,i,{loadApiKeyForProvider:this.orchestrator.loadApiKeyForProvider.bind(this.orchestrator),getApiKeyForHeaders:()=>w(this.orchestrator)}),t.value=``,_(`Provider saved (no API key required)`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving provider: `+t,6e3)}else if(!r)y(`Please enter an API key`,3e3);else try{await this.orchestrator.setApiKey(this.db,r),t.value=``,_(`API key and provider saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving API key: `+t,6e3)}}async saveBedrockSettings(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="bedrock-region-input"]`),n=e.querySelector(`[data-setting="bedrock-profile-input"]`),r=e.querySelector(`[data-setting="bedrock-auth-mode"], [data-setting="bedrock-auth-mode-select"]`);if(!t||!n)return;let i=t.value.trim(),a=n.value.trim(),o=r?.value||`provider_chain`;if(i&&!a||!i&&a)y(`Enter both Bedrock region and profile (or leave both blank to rely on environment variables)`,4e3);else try{await S(this.orchestrator,this.db,{region:i,profile:a,authMode:o}),_(`Bedrock fallback settings saved`,3e3),this.orchestrator.provider===`bedrock_proxy`&&this.updateModelSelector()}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving Bedrock fallback settings: `+t,6e3)}}async saveBuiltinAiSettings(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="compaction-engine-select"]`),n=e.querySelector(`[data-setting="builtin-ai-tools-backend-select"]`);try{t&&await g(this.db,r.COMPACTION_ENGINE_PREFERENCE,t.value),n&&await g(this.db,r.BUILTIN_AI_TOOLS_BACKEND,n.value),_(`Built-in AI settings saved successfully`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving Built-in AI settings: `+t,5e3)}}async saveLlamafileSettings(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="llamafile-mode"], [data-setting="llamafile-mode-select"]`),n=e.querySelector(`[data-setting="llamafile-host"], [data-setting="llamafile-host-input"]`),r=e.querySelector(`[data-setting="llamafile-port"], [data-setting="llamafile-port-input"]`),i=e.querySelector(`[data-setting="llamafile-offline"], [data-setting="llamafile-offline-toggle"]`);if(!t||!n||!r||!i)return;let a=t.value===`cli`?`cli`:`server`,o=n.value.trim(),s=parseInt(r.value,10);if(!o)y(`Please enter a host`,3e3);else if(!Number.isFinite(s)||s<1||s>65535)y(`Please enter a valid port (1-65535)`,3e3);else try{if(await D(this.orchestrator,this.db,{mode:a,host:o,port:s,offline:i.checked}),this.updateLlamafileModeVisibility(),this.updateLlamafileModelSectionVisibility(),this.updateModelSelector(),this.orchestrator.provider===`llamafile`){let e=await h.restartCurrentRequest();_(e?`Llamafile settings saved, request restarted`:`Llamafile settings saved`,3e3);return}_(`Llamafile settings saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving llamafile settings: `+t,6e3)}}async saveMaxIterations(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="max-iterations-input"]`);if(!t)return;let n=parseInt(t.value,10);if(!n||n<1)y(`Please enter a valid number (1 or higher)`,3e3);else try{await m(this.orchestrator,this.db,n),_(`Max iterations saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving max iterations: `+t,6e3)}}async saveMaxTokens(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="max-tokens-input"]`);if(!t)return;let n=parseInt(t.value,10);if(!n||n<1)y(`Please enter a valid number (1 or higher)`,3e3);else try{await f(this.orchestrator,this.db,n),this.updateMaxTokensUI(),_(`Max tokens saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving max tokens: `+t,6e3)}}async saveMeshLlmSettings(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="mesh-llm-host-input"]`);if(!t)return;let n=t.value.trim();try{this.orchestrator&&(await T(this.orchestrator,this.db,{host:n}),_(`Mesh LLM settings saved`,3e3),this.orchestrator.provider===`mesh-llm`&&this.updateModelSelector())}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving Mesh LLM settings: `+t,6e3)}}async saveModel(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="model-select"]`),n=e.querySelector(`[data-setting="custom-model-input"]`);if(!t||!n)return;let i=t.value;if(i===`__custom__`&&(i=n.value.trim()),this.orchestrator.provider===`llamafile`&&x(this.orchestrator).mode===`cli`&&!i)await this.showLlamafileHelpDialog(`Select a discovered *.llamafile model or enter a custom model id that matches a file in the ${j} folder.`);else{if(this.orchestrator.provider===`prompt_api`){let t=e.querySelector(`[data-setting="prompt-api-fallback-select"]`);if(t)try{await g(this.db,r.PROMPT_API_FALLBACK_MODEL,t.value)}catch(e){console.warn(`Error saving prompt api fallback model`,e)}let n=e.querySelector(`[data-setting="prompt-api-device-select"]`);if(n)try{await g(this.db,r.PROMPT_API_BACKEND,n.value)}catch(e){console.warn(`Error saving prompt api backend`,e)}let i=e.querySelector(`[data-setting="prompt-api-dtype-select"]`);if(i)try{await g(this.db,r.PROMPT_API_DTYPE_STRATEGY,i.value)}catch(e){console.warn(`Error saving prompt api dtype strategy`,e)}}try{if(await C(this.orchestrator,this.db,i),this.updateMaxTokensUI(),this.orchestrator.provider===`llamafile`){let e=await h.restartCurrentRequest();_(e?`Model saved, request restarted`:`Model saved`,3e3);return}_(`Model saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving model: `+t,6e3)}}}async saveRateLimitSettings(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="rate-limit-calls-per-minute-input"]`),n=e.querySelector(`[data-setting="rate-limit-auto-adapt-toggle"]`);if(!t||!n)return;let r=parseInt(t.value,10);if(!Number.isFinite(r)||r<0)y(`Please enter a valid non-negative calls-per-minute value`,3e3);else try{await l(this.orchestrator,this.db,r),await p(this.orchestrator,this.db,n.checked),_(`Rate limit settings saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving rate limit settings: `+t,6e3)}}async saveReasoningEffort(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="reasoning-effort-select"]`);if(t)try{await u(this.orchestrator,this.db,t.value||`none`),_(`Reasoning effort saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving reasoning effort: `+t,6e3)}}async saveSubagentMaxParallel(){if(!this.db){v(`Database not initialized`,3e3);return}let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="subagent-max-parallel-input"]`);if(!t)return;let n=parseInt(t.value,10);if(!n||n<1)y(`Please enter a valid number (1 or higher)`,3e3);else try{await g(this.db,r.SUBAGENT_MAX_PARALLEL,String(n)),_(`Subagent limit saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving subagent limit: `+t,6e3)}}async saveSubagentWorkspaceMode(){if(!this.db){v(`Database not initialized`,3e3);return}let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="subagent-workspace-mode-select"]`);if(!t)return;let n=t.value;if(n!==`automatic`&&n!==`parent`&&n!==`isolated`)y(`Please select a valid subagent workspace mode`,3e3);else try{await g(this.db,r.SUBAGENT_WORKSPACE_MODE,n),_(`Subagent workspace mode saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving subagent workspace mode: `+t,6e3)}}async saveTransformersJsSettings(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="transformers-js-backend"], [data-setting="transformers-js-device-select"]`)?.value||`auto`,n=e.querySelector(`[data-setting="transformers-js-dtype-strategy"], [data-setting="transformers-js-dtype-select"]`)?.value||`auto`,{setConfig:r}=await import(`./set-config-DSiuMe0k.js`).then(e=>e.n),{CONFIG_KEYS:i}=await import(`./config-C-YdSFZB.js`).then(e=>e.k);await r(this.db,i.TRANSFORMERS_JS_BACKEND,t),await r(this.db,i.TRANSFORMERS_JS_DTYPE_STRATEGY,n),_(`Transformers.js settings saved.`)}async showLlamafileHelpDialog(e){let t=`${e||``}|${this.orchestrator?.model||``}`;this.lastLlamafileHelpKey!==t&&(this.lastLlamafileHelpKey=t,await this.requestAppDialog(M(e)))}};customElements.get(Y)||customElements.define(Y,X);export{X as ShadowClawLlm};
|
|
674
|
+
`,`text/html`),K=G.querySelector(`template`);let q=[];q=K?Array.from(K.content.children):Array.from(G.head.children).concat(Array.from(G.body.children));var J=q;const Y=`shadow-claw-llm`;var X=class extends z{static styles=W;static template=J;db;lastLlamafileHelpKey;llamafileDiscoveredModelIds;llamafileModelLoadError;modelFetchToken;orchestrator;constructor(){super(),this.db=null,this.orchestrator=null,this.llamafileDiscoveredModelIds=[],this.llamafileModelLoadError=null,this.lastLlamafileHelpKey=``,this.modelFetchToken=0}async connectedCallback(){if(!this.shadowRoot)throw Error(`shadowRoot not found`);this.db=await o(),this.orchestrator=h.orchestrator,this.bindEventListeners(),this.setupEffects()}applyRecommendedMaxTokens(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="max-tokens-input"]`);if(!t)return;let n=this.orchestrator.provider,r=this.orchestrator.model,i;n===`prompt_api`&&(i=e.querySelector(`[data-setting="prompt-api-fallback-select"]`)?.value||`onnx-community/Qwen3-0.6B-ONNX`);let a=U(n,r,i);t.value=String(a.recommended)}bindEventListeners(){let e=this.shadowRoot;e&&(e.querySelector(`[data-setting="provider-select"]`)?.addEventListener(`change`,()=>this.onProviderChange()),e.querySelector(`[data-setting="prompt-api-fallback-select"]`)?.addEventListener(`change`,e=>{let t=e.target;t?.value&&A(t.value).then(()=>this.updateMaxTokensUI()).catch(()=>{}),this.updateMaxTokensUI()}),e.querySelector(`[data-action="save-llm-provider"]`)?.addEventListener(`click`,()=>this.saveApiKey()),e.querySelector(`[data-action="save-model"]`)?.addEventListener(`click`,()=>this.saveModel()),e.querySelector(`[data-action="refresh-models"]`)?.addEventListener(`click`,()=>this.updateModelSelector()),e.querySelector(`[data-setting="model-select"]`)?.addEventListener(`change`,t=>{let n=e.querySelector(`[data-setting="custom-model-input"]`),r=t.target;n&&r&&(n.style.display=r.value===`__custom__`?`block`:`none`)}),e.querySelector(`[data-setting="streaming-toggle"]`)?.addEventListener(`change`,e=>{e.target instanceof HTMLInputElement&&this.onStreamingToggle(e.target.checked)}),e.querySelector(`[data-setting="context-compression-toggle"]`)?.addEventListener(`change`,e=>{e.target instanceof HTMLInputElement&&this.onContextCompressionToggle(e.target.checked)}),e.querySelector(`[data-action="save-max-iterations"]`)?.addEventListener(`click`,()=>this.saveMaxIterations()),e.querySelector(`[data-action="save-subagent-max-parallel"]`)?.addEventListener(`click`,()=>this.saveSubagentMaxParallel()),e.querySelector(`[data-action="save-subagent-workspace-mode"]`)?.addEventListener(`click`,()=>this.saveSubagentWorkspaceMode()),e.querySelector(`[data-action="save-rate-limit-settings"]`)?.addEventListener(`click`,()=>this.saveRateLimitSettings()),e.querySelector(`[data-action="save-max-tokens"]`)?.addEventListener(`click`,()=>this.saveMaxTokens()),e.querySelector(`[data-action="save-reasoning-effort"]`)?.addEventListener(`click`,()=>this.saveReasoningEffort()),e.querySelector(`[data-action="apply-recommended-max-tokens"]`)?.addEventListener(`click`,()=>this.applyRecommendedMaxTokens()),e.querySelector(`[data-action="save-llamafile-settings"]`)?.addEventListener(`click`,()=>this.saveLlamafileSettings()),e.querySelector(`[data-action="save-bedrock-settings"]`)?.addEventListener(`click`,()=>this.saveBedrockSettings()),e.querySelector(`[data-action="save-mesh-llm-settings"]`)?.addEventListener(`click`,()=>this.saveMeshLlmSettings()),e.querySelector(`[data-action="save-transformers-js-settings"]`)?.addEventListener(`click`,()=>this.saveTransformersJsSettings()),e.querySelector(`[data-action="save-builtin-ai-settings"]`)?.addEventListener(`click`,()=>this.saveBuiltinAiSettings()),e.querySelector(`[data-setting="llamafile-mode"]`)?.addEventListener(`change`,()=>{this.updateLlamafileModeVisibility(),this.updateLlamafileModelSectionVisibility(),this.updateModelSelector()}))}renderBedrockSettings(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=this.orchestrator?O(this.orchestrator):null,n=e.querySelector(`[data-setting="bedrock-region-input"]`),r=e.querySelector(`[data-setting="bedrock-profile-input"]`),i=e.querySelector(`[data-setting="bedrock-auth-mode"], [data-setting="bedrock-auth-mode-select"]`);n&&(n.value=t?.region||``),r&&(r.value=t?.profile||``),i&&(i.value=t?.authMode||`provider_chain`)}renderLlamafileSettings(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=x(this.orchestrator);if(!t)return;let n=e.querySelector(`[data-setting="llamafile-mode"], [data-setting="llamafile-mode-select"]`),r=e.querySelector(`[data-setting="llamafile-host"], [data-setting="llamafile-host-input"]`),i=e.querySelector(`[data-setting="llamafile-port"], [data-setting="llamafile-port-input"]`),a=e.querySelector(`[data-setting="llamafile-offline"], [data-setting="llamafile-offline-toggle"]`);n&&(n.value=t.mode),r&&(r.value=t.host),i&&(i.value=String(t.port)),a&&(a.checked=t.offline)}renderMeshLlmSettings(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=this.orchestrator.getMeshLlmSettings?.(),n=e.querySelector(`[data-setting="mesh-llm-host-input"]`);n&&(n.value=t?.host||``)}setupEffects(){L(()=>{h.ready&&(this.orchestrator=h.orchestrator,this.render())})}updateBedrockSettingsVisibility(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="bedrock-settings"]`);n&&(n.style.display=e===`bedrock_proxy`?`block`:`none`)}updateLlamafileModelSectionVisibility(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="model-settings"]`);if(!t)return;let n=x(this.orchestrator);t.style.display=n?.mode===`server`?`none`:`block`}updateLlamafileModeVisibility(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="llamafile-server-only"]`),n=e.querySelector(`[data-setting="llamafile-cli-only"]`);if(!t&&!n)return;let r=this.orchestrator.provider===`llamafile`&&x(this.orchestrator)?.mode===`server`;t&&(t.style.display=r?`block`:`none`),n&&(n.style.display=r?`none`:`block`)}updateLlamafileSettingsVisibility(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="llamafile-settings"]`);n&&(n.style.display=e===`llamafile`?`block`:`none`)}updateMaxTokensUI(){if(!this.orchestrator)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="max-tokens-input"]`),n=e.querySelector(`[data-setting="max-tokens-helper"]`),r=this.orchestrator.provider,i=this.orchestrator.model,a;r===`prompt_api`&&(a=e.querySelector(`[data-setting="prompt-api-fallback-select"]`)?.value||`onnx-community/Qwen3-0.6B-ONNX`);let o=this.orchestrator.maxTokens,s=U(r,i,a);t&&(t.value=String(o),t.removeAttribute(`max`)),n&&(n.textContent=`${s.detail} Current value: ${o.toLocaleString()}.`)}updateMeshLlmSettingsVisibility(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="mesh-llm-settings"]`);n&&(n.style.display=e===`mesh-llm`?`block`:`none`)}updateModelProviderHelperText(){let e=this.shadowRoot;if(!e||!this.orchestrator)return;let t=e.querySelector(`[data-setting="model-provider-helper"]`);if(!t)return;let n=this.orchestrator.provider,r=x(this.orchestrator);n!==`llamafile`||r?.mode===`server`?(t.hidden=!0,t.textContent=``):(t.hidden=!1,t.textContent=this.llamafileDiscoveredModelIds.length>0?`Discovered ${this.llamafileDiscoveredModelIds.length} *.llamafile model${this.llamafileDiscoveredModelIds.length===1?``:`s`} in ${j}. Choose Custom Model ID to target a file name that is not listed yet.`:this.llamafileModelLoadError?`Could not load llamafile models from ${j}. You can still enter a custom model id, but the file must exist there.`:`ShadowClaw looks for *.llamafile binaries in ${j}.`)}updateModelSelector(){if(!this.orchestrator)return;let t=this.shadowRoot;if(!t)return;let n=E(),r=this.orchestrator.provider,i=n.find(e=>e.id===r),a=++this.modelFetchToken;r!==`llamafile`&&(this.llamafileDiscoveredModelIds=[],this.llamafileModelLoadError=null);let o=!1;if(r===`llamafile`&&x(this.orchestrator)?.mode===`server`){let n=t.querySelector(`[data-setting="model-select"]`);n&&(e(n,`<option value="">Model is served by local llamafile server</option>`),n.disabled=!0),o=!0}this.updateModelProviderHelperText();let s=t.querySelector(`[data-setting="prompt-api-fallback-group"]`);if(s){let e=R();s.style.display=r===`prompt_api`&&!e?`block`:`none`,B().then(e=>{this.orchestrator?.provider===`prompt_api`&&(s.style.display=e?`none`:`block`)})}let c=t.querySelector(`[data-setting="model-select"]`),l=t.querySelector(`[data-setting="custom-model-input"]`),u=this.orchestrator.model,d=/* @__PURE__ */ new Set([`transformers_js_local`,`transformers_js_browser`,`ollama`,`llamafile`,`prompt_api`]),f=e=>e.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`).replace(/\"/g,`"`).replace(/'/g,`'`),p=e=>d.has(r)||r===`mesh-llm`?!0:typeof e==`string`?!1:Array.isArray(e.providers)?e.providers.some(e=>e.provider===`hf-inference`||!e.pricing||parseFloat(String(e.pricing.input||e.pricing.prompt||0))===0&&parseFloat(String(e.pricing.output||e.pricing.completion||0))===0):e.pricing?parseFloat(String(e.pricing.prompt||0))===0&&parseFloat(String(e.pricing.completion||0))===0:!1,m=e=>{let t=typeof e==`string`?e:e.id||e.name;return d.has(r)?F(t):typeof e==`string`?!1:e.supports_tools===!0||e.supportsTools===!0?!0:Array.isArray(e.providers)?e.providers.some(e=>e.supports_tools===!0):Array.isArray(e.supported_parameters)?e.supported_parameters.includes(`tools`):!1},h=e=>{let t=typeof e==`string`?e:e.id||e.name;if(d.has(r))return F(t)?` 🛠️`:` ❔🛠️`;if(typeof e==`string`)return` ❔🛠️`;if(e.supports_tools===!0||e.supportsTools===!0)return` 🛠️`;if(e.supports_tools===!1||e.supportsTools===!1)return` 🚫🛠️`;if(Array.isArray(e.providers)){let t=e.providers.some(e=>e.supports_tools===!0),n=e.providers.some(e=>e.supports_tools===!1);if(t)return` 🛠️`;if(n)return` 🚫🛠️`}return Array.isArray(e.supported_parameters)?e.supported_parameters.includes(`tools`)?` 🛠️`:` 🚫🛠️`:` ❔🛠️`},g=e=>typeof e==`string`?0:typeof e.context_length==`number`?e.context_length:typeof e.context_window==`number`?e.context_window:Array.isArray(e.providers)?Math.max(...e.providers.map(e=>e.context_length||0),0):0,_=t=>{if(!c||!l)return;if(!Array.isArray(t)||t.length===0){let t=this.orchestrator?.model||``,n=r===`llamafile`?`No *.llamafile models found in ${j}`:`No models available`;e(c,[`<option value="" ${t?``:`selected`}>${f(n)}</option>`,`<option value="__custom__">-- Custom Model ID --</option>`].join(``)),t?(c.value=`__custom__`,l.value=t,l.style.display=`block`):(c.value=``,l.value=``,l.style.display=`none`),r===`llamafile`&&!t&&this.showLlamafileHelpDialog(this.llamafileModelLoadError?`Failed to load *.llamafile models: ${this.llamafileModelLoadError}`:`No *.llamafile files were found in ${j}.`),this.updateModelProviderHelperText();return}let n=[],i=[];for(let e of t)e&&(typeof e==`string`||e.id)&&(p(e)?n.push(e):i.push(e));let a=(e,t)=>{if(d.has(r)){let n=typeof e==`string`?e:e.id||e.name,i=typeof t==`string`?t:t.id||t.name;return I({id:n,supportsTools:m(e),contextLength:g(e)},{id:i,supportsTools:m(t),contextLength:g(t)},r)}let n=m(e),i=m(t);if(n!==i)return i?1:-1;let a=g(e),o=g(t);if(a!==o)return o-a;let s=typeof e==`string`?e:e.id||e.name,c=typeof t==`string`?t:t.id||t.name;return s.localeCompare(c)};n.sort(a),i.sort(a);let o=e=>{let t=typeof e==`string`?e:e.id||e.name,n=typeof e==`string`?t:typeof e.displayName==`string`&&e.displayName.trim()?e.displayName.trim():typeof e.name==`string`&&e.name.trim()?e.name.trim():t,r=h(e),i=g(e),a=``;i>=1e6?a=` (${(i/1e6).toFixed(1)}M)`:i>=1e3?a=` (${Math.round(i/1024)}k)`:i>0&&(a=` (${i})`);let o=n===t?t:`${n} - ${t}`;return`<option value="${f(t)}">${f(o)}${a}${r}</option>`},s=``;if(r===`transformers_js_browser`)s=N(u,t,{includeCustom:!0});else if(d.has(r)){let e=[...n,...i].sort(a);e.length>0&&(s+=`<optgroup label="${r===`prompt_api`?`Built-in`:`Local / Self-hosted`}">`,s+=e.map(o).join(``),s+=`</optgroup>`),s+=`<option value="__custom__">-- Custom Model ID --</option>`}else n.length>0&&(s+=`<optgroup label="Free / Included">`,s+=n.map(o).join(``),s+=`</optgroup>`),i.length>0&&(s+=`<optgroup label="Paid / Pro">`,s+=i.map(o).join(``),s+=`</optgroup>`),s+=`<option value="__custom__">-- Custom Model ID --</option>`;e(c,s),(r===`transformers_js_browser`?P(t):t.map(e=>typeof e==`string`?e:e.id||e.name)).includes(u)?(c.value=u,l.style.display=`none`):(c.value=`__custom__`,l.value=u||``,l.style.display=`block`),this.updateModelProviderHelperText()};if(!o){if(i?.modelsUrl&&c){let t=a;e(c,`<option>Loading models…</option>`),c.disabled=!0;let n={...i.headers};if(r===`llamafile`){let e=x(this.orchestrator);e&&(n[`x-llamafile-mode`]=e.mode,n[`x-llamafile-host`]=e.host,n[`x-llamafile-port`]=String(e.port),n[`x-llamafile-offline`]=e.offline?`true`:`false`)}else if(r===`bedrock_proxy`){let e=this.orchestrator?O(this.orchestrator):null;e?.region&&(n[`x-bedrock-region`]=e.region),e?.profile&&(n[`x-bedrock-profile`]=e.profile),e?.authMode&&(n[`x-bedrock-auth-mode`]=e.authMode)}w(this.orchestrator).then(a=>{if(a&&i.apiKeyHeader){let e=(i.apiKeyHeaderFormat||`{key}`).replace(`{key}`,a);n[i.apiKeyHeader]=e}i.modelsUrl&&fetch(i.modelsUrl,{headers:n}).then(e=>{if(!e.ok)throw Error(`HTTP ${e.status}`);return e.json()}).then(e=>{if(t!==this.modelFetchToken||this.orchestrator?.provider!==r)return;let n=[];if(Array.isArray(e))n=e;else if(e&&typeof e==`object`){if(n=e.models||e.data||[],n.length===0){for(let t in e)if(Array.isArray(e[t])&&e[t].length>0){n=e[t];break}}n.length===0&&e.id&&(n=[e])}if(Array.isArray(i.models)){let e=new Set(n.map(e=>typeof e==`string`?e:e.id||e.name));n=[...i.models.filter(t=>{let n=typeof t==`string`?t:t.id||t.name;return!e.has(n)}),...n]}r===`llamafile`&&(this.llamafileModelLoadError=null,this.llamafileDiscoveredModelIds=n.map(e=>typeof e==`string`?e:String(e?.id||e?.name||``)).filter(Boolean)),c.disabled=!1,_(n)}).catch(n=>{if(t!==this.modelFetchToken||this.orchestrator?.provider!==r)return;console.error(`[ShadowClaw] Failed to load models from`,i.modelsUrl,n);let a=n instanceof Error?n.message:String(n);r===`llamafile`?(this.llamafileDiscoveredModelIds=[],this.llamafileModelLoadError=a,c.disabled=!1,_([])):(e(c,`<option>Failed to load models</option>`),i?.models?(console.warn(`Falling back to statically configured models due to fetch failure.`),c.disabled=!1,_(i.models)):v(`Could not reach the model server — or proxy configuration is wrong`,5e3))})})}else i?.models&&c?(c.disabled=!1,_(i.models)):c&&(c.disabled=!1,_([]))}let y=t.querySelector(`[data-setting="api-key-helper"]`),b=t.querySelector(`[data-setting="provider-select"]`);if(y&&b){let e=b.selectedOptions[0]?.text||`Provider`,t=i?.requiresApiKey!==!1;y.textContent=r===`llamafile`?`Runs local .llamafile binaries through the local proxy. No API key required.`:t?`Enter your ${e} API key. It is encrypted and stored locally.`:`This provider does not require an API key.`}let S=t.querySelector(`[data-setting="api-key-input"]`);if(S){let e=i?.requiresApiKey===!1;S.disabled=e,S.placeholder=e?`No API key required`:`sk-...`}}updateTransformersJsSettingsVisibility(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-setting="transformers-js-settings"]`);n&&(n.style.display=e===`transformers_js_browser`?`block`:`none`)}async onContextCompressionToggle(e){if(this.orchestrator&&this.db)try{await c(this.orchestrator,this.db,e),_(e?`Context compression enabled`:`Context compression disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving context compression setting: `+t,6e3)}}async onProviderChange(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="provider-select"]`);if(!t)return;let n=t.value,r=this.orchestrator.provider;if(n!==r)try{await k(this.orchestrator,this.db,n,{loadApiKeyForProvider:this.orchestrator.loadApiKeyForProvider.bind(this.orchestrator),getApiKeyForHeaders:()=>w(this.orchestrator)}),this.updateModelSelector(),this.updateMaxTokensUI(),this.updateLlamafileSettingsVisibility(n),this.renderLlamafileSettings(),this.updateLlamafileModeVisibility(),this.updateLlamafileModelSectionVisibility(),this.updateBedrockSettingsVisibility(n),this.updateBedrockSettingsVisibility(n),this.updateMeshLlmSettingsVisibility(n),this.updateTransformersJsSettingsVisibility(n),await this.renderTransformersJsSettings();let e=t.selectedOptions[0]?.text||n;_(`Switched to ${e}`,3e3)}catch(e){let n=e instanceof Error?e.message:String(e);v(`Error switching provider: `+n,6e3),t.value=r}}async onStreamingToggle(e){if(this.orchestrator&&this.db)try{await d(this.orchestrator,this.db,e),_(e?`Streaming enabled`:`Streaming disabled`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving streaming setting: `+t,6e3)}}async render(){let t=this.shadowRoot;if(!t||!this.orchestrator||!this.db)return;this.bindEventListeners();let n=E(),r=this.orchestrator.provider,o=t.querySelector(`[data-setting="provider-select"]`);o&&e(o,n.map(e=>`<option value="${e.id}" ${e.id===r?`selected`:``}>${e.name}</option>`).join(``)),this.updateModelSelector(),this.updateLlamafileSettingsVisibility(r),this.renderLlamafileSettings(),this.updateLlamafileModeVisibility(),this.updateLlamafileModelSectionVisibility(),this.updateModelProviderHelperText(),this.updateBedrockSettingsVisibility(r),this.renderBedrockSettings(),this.updateMeshLlmSettingsVisibility(r),this.renderMeshLlmSettings(),this.updateTransformersJsSettingsVisibility(r),await this.renderTransformersJsSettings(),this.renderBuiltinAiSettings();let c=t.querySelector(`[data-setting="prompt-api-fallback-select"]`);c&&(c.value=await s(this.db,i.PROMPT_API_FALLBACK_MODEL)||`onnx-community/Qwen3-0.6B-ONNX`,this.updateMaxTokensUI(),c.value&&A(c.value).then(()=>{this.updateMaxTokensUI()}).catch(()=>{}));let l=t.querySelector(`[data-setting="prompt-api-device-select"]`);l&&(l.value=await s(this.db,i.PROMPT_API_BACKEND)||`auto`);let u=t.querySelector(`[data-setting="prompt-api-dtype-select"]`);u&&(u.value=await s(this.db,i.PROMPT_API_DTYPE_STRATEGY)||`auto`);let d=t.querySelector(`[data-setting="streaming-toggle"]`);d&&(d.checked=this.orchestrator.streamingEnabled);let f=t.querySelector(`[data-setting="context-compression-toggle"]`);f&&(f.checked=this.orchestrator.contextCompressionEnabled);let p=t.querySelector(`[data-setting="reasoning-effort-select"]`);p&&(p.value=this.orchestrator.reasoningEffort||`none`);let m=t.querySelector(`[data-setting="max-iterations-input"]`);m&&this.orchestrator&&(m.value=String(this.orchestrator.maxIterations));let h=t.querySelector(`[data-setting="subagent-max-parallel-input"]`);if(h){let e=await s(this.db,i.SUBAGENT_MAX_PARALLEL),t=Number(e);h.value=String(Number.isFinite(t)&&t>0?t:5)}let g=t.querySelector(`[data-setting="subagent-workspace-mode-select"]`);if(g){let e=await s(this.db,i.SUBAGENT_WORKSPACE_MODE);g.value=e===`parent`||e===`isolated`||e===`automatic`?e:a}let _=t.querySelector(`[data-setting="rate-limit-calls-per-minute-input"]`);_&&this.orchestrator&&(_.value=String(this.orchestrator.rateLimitCallsPerMinute||0));let v=t.querySelector(`[data-setting="rate-limit-auto-adapt-toggle"]`);v&&this.orchestrator&&(v.checked=this.orchestrator.rateLimitAutoAdapt!==!1),this.updateMaxTokensUI()}async renderBuiltinAiSettings(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="compaction-engine-select"]`),n=e.querySelector(`[data-setting="builtin-ai-tools-backend-select"]`),r=await s(this.db,i.COMPACTION_ENGINE_PREFERENCE),a=await s(this.db,i.BUILTIN_AI_TOOLS_BACKEND);t&&(t.value=r||`auto`),n&&(n.value=a||`active_provider`)}async renderTransformersJsSettings(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let{getConfig:t}=await import(`./get-config-Bkvl__ZS.js`).then(e=>e.n),{CONFIG_KEYS:n}=await import(`./config-C16fFWtP.js`).then(e=>e.k),r=await t(this.db,n.TRANSFORMERS_JS_BACKEND)||`auto`,i=await t(this.db,n.TRANSFORMERS_JS_DTYPE_STRATEGY)||`auto`,a=e.querySelector(`[data-setting="transformers-js-backend"], [data-setting="transformers-js-device-select"]`);a&&(a.value=r);let o=e.querySelector(`[data-setting="transformers-js-dtype-strategy"], [data-setting="transformers-js-dtype-select"]`);o&&(o.value=i)}async requestAppDialog(e){let t=document.querySelector(`shadow-claw`);return t&&typeof t.requestDialog==`function`?await t.requestDialog(e):!1}async saveApiKey(){if(!this.orchestrator||!this.db){v(`Orchestrator not initialized`,5e3);return}let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="api-key-input"]`),n=e.querySelector(`[data-setting="provider-select"]`);if(!t||!n)return;let r=t.value.trim(),i=n.value;if(E().find(e=>e.id===i)?.requiresApiKey===!1)try{await k(this.orchestrator,this.db,i,{loadApiKeyForProvider:this.orchestrator.loadApiKeyForProvider.bind(this.orchestrator),getApiKeyForHeaders:()=>w(this.orchestrator)}),t.value=``,_(`Provider saved (no API key required)`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving provider: `+t,6e3)}else if(!r)y(`Please enter an API key`,3e3);else try{await this.orchestrator.setApiKey(this.db,r),t.value=``,_(`API key and provider saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving API key: `+t,6e3)}}async saveBedrockSettings(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="bedrock-region-input"]`),n=e.querySelector(`[data-setting="bedrock-profile-input"]`),r=e.querySelector(`[data-setting="bedrock-auth-mode"], [data-setting="bedrock-auth-mode-select"]`);if(!t||!n)return;let i=t.value.trim(),a=n.value.trim(),o=r?.value||`provider_chain`;if(i&&!a||!i&&a)y(`Enter both Bedrock region and profile (or leave both blank to rely on environment variables)`,4e3);else try{await S(this.orchestrator,this.db,{region:i,profile:a,authMode:o}),_(`Bedrock fallback settings saved`,3e3),this.orchestrator.provider===`bedrock_proxy`&&this.updateModelSelector()}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving Bedrock fallback settings: `+t,6e3)}}async saveBuiltinAiSettings(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="compaction-engine-select"]`),n=e.querySelector(`[data-setting="builtin-ai-tools-backend-select"]`);try{t&&await g(this.db,i.COMPACTION_ENGINE_PREFERENCE,t.value),n&&await g(this.db,i.BUILTIN_AI_TOOLS_BACKEND,n.value),_(`Built-in AI settings saved successfully`,2500)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving Built-in AI settings: `+t,5e3)}}async saveLlamafileSettings(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="llamafile-mode"], [data-setting="llamafile-mode-select"]`),n=e.querySelector(`[data-setting="llamafile-host"], [data-setting="llamafile-host-input"]`),r=e.querySelector(`[data-setting="llamafile-port"], [data-setting="llamafile-port-input"]`),i=e.querySelector(`[data-setting="llamafile-offline"], [data-setting="llamafile-offline-toggle"]`);if(!t||!n||!r||!i)return;let a=t.value===`cli`?`cli`:`server`,o=n.value.trim(),s=parseInt(r.value,10);if(!o)y(`Please enter a host`,3e3);else if(!Number.isFinite(s)||s<1||s>65535)y(`Please enter a valid port (1-65535)`,3e3);else try{if(await D(this.orchestrator,this.db,{mode:a,host:o,port:s,offline:i.checked}),this.updateLlamafileModeVisibility(),this.updateLlamafileModelSectionVisibility(),this.updateModelSelector(),this.orchestrator.provider===`llamafile`){let e=await h.restartCurrentRequest();_(e?`Llamafile settings saved, request restarted`:`Llamafile settings saved`,3e3);return}_(`Llamafile settings saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving llamafile settings: `+t,6e3)}}async saveMaxIterations(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="max-iterations-input"]`);if(!t)return;let n=parseInt(t.value,10);if(!n||n<1)y(`Please enter a valid number (1 or higher)`,3e3);else try{await m(this.orchestrator,this.db,n),_(`Max iterations saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving max iterations: `+t,6e3)}}async saveMaxTokens(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="max-tokens-input"]`);if(!t)return;let n=parseInt(t.value,10);if(!n||n<1)y(`Please enter a valid number (1 or higher)`,3e3);else try{await f(this.orchestrator,this.db,n),this.updateMaxTokensUI(),_(`Max tokens saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving max tokens: `+t,6e3)}}async saveMeshLlmSettings(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="mesh-llm-host-input"]`);if(!t)return;let n=t.value.trim();try{this.orchestrator&&(await T(this.orchestrator,this.db,{host:n}),_(`Mesh LLM settings saved`,3e3),this.orchestrator.provider===`mesh-llm`&&this.updateModelSelector())}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving Mesh LLM settings: `+t,6e3)}}async saveModel(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="model-select"]`),n=e.querySelector(`[data-setting="custom-model-input"]`);if(!t||!n)return;let r=t.value;if(r===`__custom__`&&(r=n.value.trim()),this.orchestrator.provider===`llamafile`&&x(this.orchestrator).mode===`cli`&&!r)await this.showLlamafileHelpDialog(`Select a discovered *.llamafile model or enter a custom model id that matches a file in the ${j} folder.`);else{if(this.orchestrator.provider===`prompt_api`){let t=e.querySelector(`[data-setting="prompt-api-fallback-select"]`);if(t)try{await g(this.db,i.PROMPT_API_FALLBACK_MODEL,t.value)}catch(e){console.warn(`Error saving prompt api fallback model`,e)}let n=e.querySelector(`[data-setting="prompt-api-device-select"]`);if(n)try{await g(this.db,i.PROMPT_API_BACKEND,n.value)}catch(e){console.warn(`Error saving prompt api backend`,e)}let r=e.querySelector(`[data-setting="prompt-api-dtype-select"]`);if(r)try{await g(this.db,i.PROMPT_API_DTYPE_STRATEGY,r.value)}catch(e){console.warn(`Error saving prompt api dtype strategy`,e)}}try{if(await C(this.orchestrator,this.db,r),this.updateMaxTokensUI(),this.orchestrator.provider===`llamafile`){let e=await h.restartCurrentRequest();_(e?`Model saved, request restarted`:`Model saved`,3e3);return}_(`Model saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving model: `+t,6e3)}}}async saveRateLimitSettings(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="rate-limit-calls-per-minute-input"]`),n=e.querySelector(`[data-setting="rate-limit-auto-adapt-toggle"]`);if(!t||!n)return;let r=parseInt(t.value,10);if(!Number.isFinite(r)||r<0)y(`Please enter a valid non-negative calls-per-minute value`,3e3);else try{await l(this.orchestrator,this.db,r),await p(this.orchestrator,this.db,n.checked),_(`Rate limit settings saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving rate limit settings: `+t,6e3)}}async saveReasoningEffort(){if(!this.orchestrator||!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="reasoning-effort-select"]`);if(t)try{await u(this.orchestrator,this.db,t.value||`none`),_(`Reasoning effort saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving reasoning effort: `+t,6e3)}}async saveSubagentMaxParallel(){if(!this.db){v(`Database not initialized`,3e3);return}let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="subagent-max-parallel-input"]`);if(!t)return;let n=parseInt(t.value,10);if(!n||n<1)y(`Please enter a valid number (1 or higher)`,3e3);else try{await g(this.db,i.SUBAGENT_MAX_PARALLEL,String(n)),_(`Subagent limit saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving subagent limit: `+t,6e3)}}async saveSubagentWorkspaceMode(){if(!this.db){v(`Database not initialized`,3e3);return}let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="subagent-workspace-mode-select"]`);if(!t)return;let n=t.value;if(n!==`automatic`&&n!==`parent`&&n!==`isolated`)y(`Please select a valid subagent workspace mode`,3e3);else try{await g(this.db,i.SUBAGENT_WORKSPACE_MODE,n),_(`Subagent workspace mode saved`,3e3)}catch(e){let t=e instanceof Error?e.message:String(e);v(`Error saving subagent workspace mode: `+t,6e3)}}async saveTransformersJsSettings(){if(!this.db)return;let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`[data-setting="transformers-js-backend"], [data-setting="transformers-js-device-select"]`)?.value||`auto`,n=e.querySelector(`[data-setting="transformers-js-dtype-strategy"], [data-setting="transformers-js-dtype-select"]`)?.value||`auto`,{setConfig:r}=await import(`./set-config-DSiuMe0k.js`).then(e=>e.n),{CONFIG_KEYS:i}=await import(`./config-C16fFWtP.js`).then(e=>e.k);await r(this.db,i.TRANSFORMERS_JS_BACKEND,t),await r(this.db,i.TRANSFORMERS_JS_DTYPE_STRATEGY,n),_(`Transformers.js settings saved.`)}async showLlamafileHelpDialog(e){let t=`${e||``}|${this.orchestrator?.model||``}`;this.lastLlamafileHelpKey!==t&&(this.lastLlamafileHelpKey=t,await this.requestAppDialog(M(e)))}};customElements.get(Y)||customElements.define(Y,X);export{X as ShadowClawLlm};
|
package/dist/public/{shadow-claw-mcp-remote-BYUgrK3v.js → shadow-claw-mcp-remote-gSbV5riy.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{p as e}from"./custom-element-security-
|
|
1
|
+
import{p as e}from"./custom-element-security-B2daIE5r.js";import{r as t}from"./config-C16fFWtP.js";import{n}from"./db-BUuJo1Gf.js";import{t as r}from"./get-config-Bkvl__ZS.js";import{t as i}from"./html-BwtE_7wp.js";import{a,r as o}from"./toast-CtIuHprH.js";import"./shadow-claw-card-CggS8uSa.js";import"./shadow-claw-empty-state-CkpOSXCS.js";import{r as s}from"./crypto-4ETeplbS.js";import{a as c,c as l,d as u,s as d,t as f,u as p}from"./mcp-reconnect-iPZPihwX.js";import{o as m}from"./shadow-claw-Br8mWDUx.js";const h=new CSSStyleSheet;h.replaceSync(`*,
|
|
2
2
|
*::before,
|
|
3
3
|
*::after {
|
|
4
4
|
font-family: var(--shadow-claw-font-sans);
|
package/dist/public/{shadow-claw-networking-Dk3p5Ny_.js → shadow-claw-networking-Dn_y6Cl9.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{n as e}from"./db-BUuJo1Gf.js";import{B as t,N as n,t as r}from"./orchestrator-
|
|
1
|
+
import{n as e}from"./db-BUuJo1Gf.js";import{B as t,N as n,t as r}from"./orchestrator-DBO4NZqd.js";import{a as i,r as a,s as o}from"./toast-CtIuHprH.js";import{a as s,o as c}from"./shadow-claw-Br8mWDUx.js";const l=new CSSStyleSheet;l.replaceSync(`*,
|
|
2
2
|
*::before,
|
|
3
3
|
*::after {
|
|
4
4
|
font-family: var(--shadow-claw-font-sans);
|
package/dist/public/{shadow-claw-notifications-CzPAlay8.js → shadow-claw-notifications-Cj4Lqx8U.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{r as e}from"./config-
|
|
1
|
+
import{r as e}from"./config-C16fFWtP.js";import{n as t}from"./db-BUuJo1Gf.js";import{t as n}from"./get-config-Bkvl__ZS.js";import{t as r}from"./set-config-DSiuMe0k.js";import{a as i,r as a}from"./toast-CtIuHprH.js";import"./shadow-claw-empty-state-CkpOSXCS.js";import{i as o,n as s,o as c,r as l,t as u}from"./push-client-B2LC8Qp9.js";import{o as d}from"./shadow-claw-Br8mWDUx.js";const f=new CSSStyleSheet;f.replaceSync(`*,
|
|
2
2
|
*::before,
|
|
3
3
|
*::after {
|
|
4
4
|
font-family: var(--shadow-claw-font-sans);
|
package/dist/public/{shadow-claw-page-header-CjJpVkyL.js → shadow-claw-page-header-DR4OZFt2.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{p as e}from"./custom-element-security-
|
|
1
|
+
import{p as e}from"./custom-element-security-B2daIE5r.js";import{o as t}from"./shadow-claw-Br8mWDUx.js";const n=new CSSStyleSheet;n.replaceSync(`*,
|
|
2
2
|
*::before,
|
|
3
3
|
*::after {
|
|
4
4
|
box-sizing: border-box;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-DBVvNlSN.js";import{a as t,c as n,f as r,i,m as a,o,p as s,r as c,s as l,w as u}from"./custom-element-security-
|
|
1
|
+
import{i as e}from"./rolldown-runtime-DBVvNlSN.js";import{a as t,c as n,f as r,i,m as a,o,p as s,r as c,s as l,w as u}from"./custom-element-security-B2daIE5r.js";import{t as d}from"./browser-B1SoUj6D.js";import{B as f,G as p,K as m,W as h,X as g,q as _,r as v,z as y}from"./config-C16fFWtP.js";import{n as b}from"./db-BUuJo1Gf.js";import{t as x}from"./get-config-Bkvl__ZS.js";import{n as S}from"./html-BwtE_7wp.js";import{t as C}from"./dist-CeFyqf9k.js";import{f as ee,h as w,m as te,o as ne,r as re,s as T,t as E}from"./orchestrator-DBO4NZqd.js";import{s as ie,t as ae}from"./tools-D-52Zmfc.js";import{t as oe}from"./write-group-file-R67DjJ-q.js";import{a as se,r as D,s as ce}from"./toast-CtIuHprH.js";import{t as le}from"./parse-boolean-config-BigJ9U46.js";import{a as ue}from"./transformers-CQ9ss9rD.js";import"./shadow-claw-page-header-action-button-BnCV_2Kb.js";import"./shadow-claw-page-header-DR4OZFt2.js";import{t as O}from"./mime-ClqNyXPc.js";import{r as k}from"./frontmatter-BH0hi8ok.js";import{a as de,c as A,d as fe,f as j,i as pe,l as me,n as he,o as ge,r as M,s as _e,t as ve,u as ye}from"./iframe-bridge-scripts-Cibg0m6A.js";import{i as be}from"./coerce-44KevvoY.js";import{n as xe}from"./base64-Cwcsjvcj.js";import{a as N,n as Se,o as Ce}from"./shadow-claw-Br8mWDUx.js";var we=/* @__PURE__ */ e(d(),1);function P(e){return e.replace(/^\.?\//,``).replace(/^pages\/main\//,``).toLowerCase().trim()}function F(e){return(e.split(`/`).pop()||``).toLowerCase().trim()}function I(e){return F(e).replace(/\.(js|mjs|cjs|ts)$/i,``).toLowerCase().trim()}function L(e=[],t,n){if(!Array.isArray(e)||e.length===0)return[];let r=e.map(e=>typeof e==`string`?{src:e}:e&&typeof e==`object`&&typeof e.src==`string`?e:null).filter(e=>e!==null),i=[],a=/* @__PURE__ */ new Set;for(let e of r)(e.global===!0||e.autoload===!0)&&(a.has(e.src)||(a.add(e.src),i.push(e)));if(!t&&!n)return i;let o=[];if(Array.isArray(t))o.push(...t);else if(typeof t==`string`)o.push(...t.split(/[,;\s]+/));else if(typeof t==`object`&&t){let e=t;Array.isArray(e.dependencies)?o.push(...e.dependencies):typeof e.dependencies==`string`&&o.push(...e.dependencies.split(/[,;\s]+/)),Array.isArray(e.scripts)?o.push(...e.scripts):typeof e.scripts==`string`&&o.push(...e.scripts.split(/[,;\s]+/))}if(typeof n==`string`&&n){let e=n.matchAll(/<script\b[^>]*src=["']([^"']+)["'][^>]*>/gi);for(let t of e)t[1]&&o.push(t[1]);for(let e of r){let t=[e.id,e.name,I(e.src),F(e.src)].filter(Boolean);for(let e of t)if(e.includes(`-`)&&RegExp(`<${e}[\\s>/]`,`i`).test(n)){o.push(e);break}}}let s=[];for(let e of o)if(typeof e==`string`){let t=e.trim();t&&s.push(t)}else if(e&&typeof e==`object`){let t=e.id||e.name||e.src;typeof t==`string`&&t.trim()&&s.push(t.trim())}for(let e of s){let t=e.toLowerCase(),n=P(e),o=F(e),s=I(e),c=r.find(r=>{if(r.id&&r.id.toLowerCase()===t||r.name&&r.name.toLowerCase()===t||r.src===e||r.src.toLowerCase()===t||P(r.src)===n)return!0;let i=F(r.src);if(i&&(i===o||i===t))return!0;let a=I(r.src);return!(!a||a!==s&&a!==t)});c?a.has(c.src)||(a.add(c.src),i.push(c)):console.warn(`[ShadowClaw] Script dependency "${e}" declared in page frontmatter was not found in approved customElements.scripts config.`)}return i}function Te(e){let t=(e.siteTitle||``).trim(),n=e.pageTitle?S(e.pageTitle).trim():``;if(e.isHome||!n)return t;if(!t)return n;if(n.toLowerCase()===t.toLowerCase())return t;let r=e.separator==null?` - `:e.separator;r&&!r.startsWith(` `)&&!r.endsWith(` `)&&(r=` ${r} `);let i=r.trim();return RegExp(`(?:\\s*[-|—•·]\\s*|\\s+${R(i)}\\s+)${R(t)}$`,`i`).test(n)?n:e.titleTemplate?e.titleTemplate.replace(/%%title%%|%title%/g,n).replace(/%%sitename%%|%%site%%|%sitename%|%site%/g,t).replace(/%%sep%%|%sep%/g,i).replace(/%%sitedesc%%|%%description%%|%sitedesc%|%description%/g,(e.siteDescription||``).trim()).replace(/\s+/g,` `).trim():`${n}${r}${t}`}function R(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Ee(e,t,n){n&&(n.textContent=`Navigated to page: ${t||e.path}`)}function z(e,t){if(e===t||e===`main`&&t===`br:main`||e===`br:main`&&t===`main`)return!0;if(!e.includes(`:`)&&!t.includes(`:`))return!1;let n=e=>e.trim().replace(/:/g,`-`);return n(e)===n(t)}function B(e,t,n,r=typeof window<`u`?window.location.origin:``){let i=e.trim();if(!i||i.startsWith(`#`))return null;let a=i.split(/[?#]/,1)[0],o=a.replace(/^(?:\.\/)+/u,``),s=[];if(o.startsWith(`files/`)&&s.push(`/${o}`),a.startsWith(`/`)){let e=a.lastIndexOf(`/files/`);e>0&&s.push(a.slice(e)),s.push(a)}for(let e of s){let t=p(e);if(t&&z(t.groupId,n))return t.path}let c=y(h(n,t)),l=g(i,c,r||(typeof window<`u`?window.location.origin:``));if(!l||r&&l.origin!==r)return null;let u=p(l.pathname);return!u||!z(u.groupId,n)?null:u.path}function V(e,t,n,r,i=typeof window<`u`?window.location.origin:``){if(!e)return e;let a=i||(typeof window<`u`?window.location.origin:``),o=new DOMParser().parseFromString(e,`text/html`),s=(e,i)=>{let s=Array.from(o.querySelectorAll(e));for(let e of s){let o=(e.getAttribute(i)||``).trim();if(!o||o.startsWith(`#`)||o.startsWith(`javascript:`))continue;let s=g(o,n,a);!s||a&&s.origin!==a||(i!==`href`||_(s.pathname)||B(o,t,r,a))&&e.setAttribute(i,`${s.pathname}${s.search}${s.hash}`)}};return s(`a[href]`,`href`),s(`img[src]`,`src`),s(`audio[src]`,`src`),s(`video[src]`,`src`),s(`source[src]`,`src`),o.body.innerHTML}const De={ALLOWED_URI_REGEXP:/^(?:(?:https?|mailto|ftp|tel|file|blob|data):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,ADD_TAGS:[`iframe`,`figure`,`figcaption`],CUSTOM_ELEMENT_HANDLING:{tagNameCheck:e=>u(e),attributeNameCheck:()=>!0,allowCustomizedBuiltInElements:!1},ADD_ATTR:[`allow`,`allowfullscreen`,`frameborder`,`scrolling`,`referrerpolicy`,`loading`]};async function Oe({content:e,filePath:t,searchParams:n=``,groupId:a,origin:s=typeof window<`u`?window.location?.origin:``,sanitizeOptions:l=De,resolveRelativeImagesInHtmlFn:u}){let d=y(h(a,t)),f=V(e,t,d,a,s),p=u?await u(f,t,a):f,m=r(p,l),g=crypto.randomUUID().replace(/-/g,``),_=c(),v=i(g),b=typeof document<`u`?document.getElementById(`shadow-claw-site-config`):null,x=b&&b.textContent?`<script id="shadow-claw-site-config" type="application/json">${b.textContent}<\/script>`:``,S=n?`<script nonce="${g}">(function(){try{Object.defineProperty(globalThis.location,"search",{get:function(){return ${JSON.stringify(n)};},configurable:true});}catch(e){}})();<\/script>`:``,C=_.filter(e=>!e.global),ee=C.length>0&&o(m)?C.map(({src:e,hasInit:t})=>{let n=e.startsWith(`http://`)||e.startsWith(`https://`)||e.startsWith(`//`)?e:y(e.startsWith(`/`)?e:`/${e.replace(/^pages\/main\//,``)}`),r=[`<script type="module" src="${n}" nonce="${g}"><\/script>`];return t&&r.push(`<script type="module" nonce="${g}">import("${n}").then((m) => { try { if (typeof m?.init === "function") m.init(); } catch (e) { console.error("[ShadowClaw] Error executing init for " + ${JSON.stringify(n)}, e); } }).catch(() => {});<\/script>`),r.join(`
|
|
2
2
|
`)}).join(`
|
|
3
|
-
`):``,w=j();return[`<!doctype html>`,`<html class="${ye()}"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">`,`<meta http-equiv="Content-Security-Policy" content="${y}">`,`<base href="${d}" target="_blank">`,S,x,`<script nonce="${g}">${M(he)}<\/script>`,`<script nonce="${g}">${M(ve)}<\/script>`,fe(),w,ee,`</head><body class="${ye()}">`,m,`</body></html>`].join(``)}function ke(e,t){return t===0?{isPrevDisabled:!0,isNextDisabled:!0}:{isPrevDisabled:e<=0,isNextDisabled:e<0||e>=t-1}}async function Ae(e,t,n=e=>E.removeAllPages(e)){return!e||!await t({title:`Remove All Pages`,message:`Remove ALL saved pages from Pages? This cannot be undone!`,confirmLabel:`Remove All`,cancelLabel:`Cancel`})?!1:(await n(e),!0)}const H={setItem:A,deleteItem:de,clear:pe,getAll:_e,getItem:ge,putItem:A};async function je(e,t,n,r=H){switch(e){case`setItem`:await r.setItem(n,String(t.key||``),t.value);return;case`removeItem`:await r.deleteItem(n,String(t.key||``));return;case`clear`:await r.clear(n);return;case`getAllItems`:return await r.getAll(n);case`idb-get`:return await r.getItem(`${n}::idb::${t.dbName}::${t.storeName}`,String(t.key||``));case`idb-getAll`:return await r.getAll(`${n}::idb::${t.dbName}::${t.storeName}`);case`idb-put`:{let e=t.key==null?`__auto_${Date.now()}`:String(t.key);return await r.putItem(`${n}::idb::${t.dbName}::${t.storeName}`,e,t.value),e}case`idb-delete`:await r.deleteItem(`${n}::idb::${t.dbName}::${t.storeName}`,String(t.key||``));return;case`idb-clear`:await r.clear(`${n}::idb::${t.dbName}::${t.storeName}`);return;case`idb-deleteDatabase`:await r.clear(`${n}::idb::${t.dbName}::__default__`);return;case`idb-count`:{let e=await r.getAll(`${n}::idb::${t.dbName}::${t.storeName}`);return Object.keys(e).length}default:throw Error(`Unknown storage proxy method: ${e}`)}}async function Me(e,t,n,r,i,a=H){if(t)try{let o=await je(n,r,i,a);e.postMessage({type:`shadow-claw-storage-proxy-result`,requestId:t,result:o??null},`*`)}catch(n){e.postMessage({type:`shadow-claw-storage-proxy-result`,requestId:t,error:n instanceof Error?n.message:String(n)},`*`)}}function Ne({root:e,rendered:n,selectedPath:r,onIframeLoad:i}){let a=e.querySelector(`[data-pages-iframe]`);if(a instanceof HTMLIFrameElement)return a;let o=document.createElement(`iframe`);return o.className=`pages__iframe`,o.setAttribute(`data-pages-iframe`,``),o.setAttribute(`title`,r?`Preview: ${r}`:`Page preview`),o.setAttribute(`sandbox`,t()),o.setAttribute(`allow`,`fullscreen; clipboard-write`),o.hidden=!0,i&&o.addEventListener(`load`,()=>{i(o.contentWindow)}),n.before(o),o}function U(e){if(typeof e!=`string`&&typeof e!=`number`)return 0;let t=parseInt(String(e),10);return isNaN(t)||t<0?0:be(t,0,{min:0,max:86400})}async function Pe(e,t=x){if(!e)return 0;try{return U(await t(e,f.PAGES_AUTO_REFRESH_INTERVAL))}catch{return 0}}function W(e){if(!e)return``;let t=e.groupId;return t===`main`&&(t=`br:main`),`${t}\u0000${e.path}`}function G(e,t=[]){if(!e)return-1;let n=W(e);return t.findIndex(e=>W(e)===n)}function Fe(e=[]){let t=/* @__PURE__ */ new Map;return e.forEach(e=>{let n=t.get(e.groupId)||[];n.push(e),t.set(e.groupId,n)}),t}function Ie(e,t,n){if(!e)return!1;let r=e.replace(/^#/,``);if(!r)return!1;if(t&&!t.hidden){let e=t.querySelector(`[id="${r}"]`)||t.querySelector(`a[name="${r}"]`);if(e){typeof e.scrollIntoView==`function`&&e.scrollIntoView({behavior:`smooth`,block:`start`});let n=Array.from(t.querySelectorAll(`img`)).filter(e=>!e.complete);if(n.length>0){let t,r=()=>{clearTimeout(t),t=setTimeout(()=>{typeof e.scrollIntoView==`function`&&e.scrollIntoView({behavior:`smooth`,block:`start`})},50)};for(let e of n)e.addEventListener(`load`,r,{once:!0}),e.addEventListener(`error`,r,{once:!0})}return!0}}if(n&&!n.hidden){try{let e=n.contentDocument;if(e){let t=e.querySelector(`[id="${r}"]`)||e.querySelector(`a[name="${r}"]`);if(t)return typeof t.scrollIntoView==`function`&&t.scrollIntoView({behavior:`smooth`,block:`start`}),!0}}catch{}try{n.contentWindow?.postMessage({type:`shadow-claw-scroll-to-anchor`,anchor:r},`*`)}catch{}}return!1}function Le(e){let t=e.detail;return t&&t.interval!==void 0?U(t.interval):null}function Re(e,t){return!e||!t||!e.groupId||!e.path||e.path!==t.path?!1:e.groupId===t.groupId||z(e.groupId,t.groupId)}function ze(e,t){let n=e.detail;return Re(n,t)}function K(e,t){let n=[`data-no-nav`,`data-no-swipe`,`data-no-page-nav`,`data-prevent-nav`,`data-prevent-page-nav`,`data-isolate-input`,`data-isolate-navigation`,`data-game-controls`],r=e=>{if(!e||!(e instanceof HTMLElement))return!1;let t=e.tagName.toLowerCase();return!!(t===`input`||t===`textarea`||t===`select`||t===`option`||t===`iframe`||e.classList.contains(`pages__preview-frame`)||e.isContentEditable||e.contentEditable===`true`||e.getAttribute(`contenteditable`)===`true`||e.hasAttribute(`contenteditable`)||e.closest(`[data-pages-list]`)||e.closest(`[data-pages-dropdown]`)||e.closest(`.pages__sidebar`)||e.closest(`.pages__preview-frame`)||e.closest(`iframe`)||n.some(t=>e.closest(`[${t}]`)))};if(t&&r(t))return!0;if(e){let t=typeof e.composedPath==`function`?e.composedPath():[];for(let e of t)if(e instanceof HTMLElement){let t=e.tagName.toLowerCase();if(n.some(t=>e.hasAttribute(t))||t===`input`||t===`textarea`||t===`select`||t===`option`||t===`iframe`||e.classList.contains(`pages__preview-frame`)||e.isContentEditable||e.contentEditable===`true`||e.getAttribute(`contenteditable`)===`true`||e.hasAttribute(`contenteditable`))return!0}if(e.target&&r(e.target))return!0}return!1}function Be(e,t){return t||e.key!==`ArrowLeft`&&e.key!==`ArrowRight`||e.ctrlKey||e.altKey||e.metaKey?null:e.key===`ArrowLeft`?`previous`:`next`}function Ve(e,t,n,r,i,a=300,o=Date.now()){let s=i??{lastNavigationTime:0,lastDirection:null};if(!t)return s;let c=n?.activeElement||document.activeElement,l=Be(e,K(e,e.target||null)||K(void 0,c));return!l||(e.preventDefault(),s.lastDirection===l&&o-s.lastNavigationTime<a)||(s.lastNavigationTime=o,s.lastDirection=l,r(l)),s}function He(e,t,n=Date.now()){return e.button!==0||t?{mouseStartX:0,mouseStartY:0,mouseStartTime:0,isMouseDown:!1}:{mouseStartX:e.clientX,mouseStartY:e.clientY,mouseStartTime:n,isMouseDown:!0}}function Ue(e,t,n,r,i,a=Date.now(),o=50,s=600){let c=n-e,l=r-t,u=a-i;return Math.abs(c)>=o&&Math.abs(c)>Math.abs(l)&&u<=s?c<0?`next`:`previous`:null}function We(e,t,n,r,i=Date.now()){return!t.isMouseDown||n||r?null:Ue(t.mouseStartX,t.mouseStartY,e.clientX,e.clientY,t.mouseStartTime,i)}function Ge(e,t,n){if(t===n||t<0||t>=e.length||n<0||n>=e.length)return e;let r=[...e],[i]=r.splice(t,1);return r.splice(n,0,i),r}async function Ke({db:e,currentPages:t,fromIndex:n,toIndex:r,reorderStoreFn:i=(e,t)=>E.reorderPages(e,t)}){if(!e||n===r)return{reordered:!1,reorderedPages:t,movedToFirst:null};let a=Ge(t,n,r);if(a===t)return{reordered:!1,reorderedPages:t,movedToFirst:null};await i(e,a);let o=a[r]||null;return{reordered:!0,reorderedPages:a,movedToFirst:r===0?o:null}}function qe(e,t,n,r=Date.now()){if(!t.touchStartTime||n)return null;if(e.changedTouches&&e.changedTouches.length===1){let n=e.changedTouches[0].clientX,i=e.changedTouches[0].clientY;return Ue(t.touchStartX,t.touchStartY,n,i,t.touchStartTime,r)}return null}function Je(e,t,n=Date.now()){return t?{touchStartX:0,touchStartY:0,touchStartTime:0}:e.touches&&e.touches.length===1?{touchStartX:e.touches[0].clientX,touchStartY:e.touches[0].clientY,touchStartTime:n}:null}function Ye(e,t,n){return!e&&t?`render-and-timer`:e&&n?`clear-timer`:`noop`}function Xe(e,t){return!e&&t}function q(e){return/\.(html?|xhtml)$/iu.test(e)}function J(e){return/\.(md|markdown)$/iu.test(e)}function Ze(e,t,n){if(!e||!q(e))return!1;if(t&&typeof t==`object`){if(typeof t.iframe==`boolean`)return t.iframe;if(typeof t.iframe==`string`){let e=t.iframe.trim().toLowerCase();if(e===`false`||e===`0`||e===`no`)return!1;if(e===`true`||e===`1`||e===`yes`)return!0}if(typeof t.render==`string`){let e=t.render.trim().toLowerCase();if(e===`shadow`||e===`direct`||e===`shadowdom`)return!1;if(e===`iframe`)return!0}if(typeof t.shadowDom==`boolean`)return!t.shadowDom}let r=n;if(!r&&typeof document<`u`)try{let e=document.getElementById(`shadow-claw-site-config`);e?.textContent&&(r=JSON.parse(e.textContent))}catch{}if(r?.pages&&typeof r.pages==`object`){let t=r.pages,n=e.replace(/^\/+/,``).replace(/^pages\/[^/]+\//,``);if((Array.isArray(t.directPages)||Array.isArray(t.shadowDomPages))&&(t.directPages||t.shadowDomPages).some(t=>{let r=String(t).replace(/^\/+/,``).replace(/^pages\/[^/]+\//,``);return r===n||r===e}))return!1;if(Array.isArray(t.iframePages)&&t.iframePages.some(t=>{let r=String(t).replace(/^\/+/,``).replace(/^pages\/[^/]+\//,``);return r===n||r===e}))return!0;if(typeof t.iframe==`boolean`)return t.iframe;if(typeof t.iframe==`string`){let e=t.iframe.trim().toLowerCase();if(e===`false`||e===`0`||e===`no`)return!1;if(e===`true`||e===`1`||e===`yes`)return!0}if(typeof t.render==`string`){let e=t.render.trim().toLowerCase();if(e===`shadow`||e===`direct`||e===`shadowdom`)return!1;if(e===`iframe`)return!0}if(typeof t.shadowDom==`boolean`)return!t.shadowDom}return!0}function Qe(e){if(!e||typeof e!=`object`)return null;let t=e;return t.type===`shadow-claw-broadcast-result`&&typeof t.channel==`string`?{kind:`broadcast-result`,channel:t.channel,payload:t.payload}:t.type===`shadow-claw-storage-proxy`?{kind:`storage-proxy`,requestId:String(t.requestId||``),method:String(t.method||``),args:t.args&&typeof t.args==`object`?t.args:{}}:t.type===`shadow-claw-swipe`&&typeof t.direction==`string`?{kind:`swipe`,direction:t.direction}:t.type===`shadow-claw-iframe-resize`&&typeof t.height==`number`?{kind:`iframe-resize`,height:t.height}:t.type===`shadow-claw-file-viewer-link`&&typeof t.href==`string`?{kind:`file-viewer-link`,href:t.href,target:typeof t.target==`string`?t.target:void 0}:null}async function $e({db:e,groupId:t,workspacePath:n,readGroupFileBytesFn:r=ue,writeGroupFileFn:i=oe,fetchFn:a=typeof fetch<`u`?fetch:void 0}){if(e)try{let i=await r(e,t,n),a=O(n)||`image/jpeg`,o=new Uint8Array(i.byteLength);return o.set(new Uint8Array(i)),`data:${a};base64,${xe(o)}`}catch{}if(!a)return null;try{let r=n.replace(/^\/+/,``),o=[h(`/files/main/${r}`),h(`/static-main/${r}`),h(`/pages/main/${r}`)];for(let r of o)try{let o=await a(typeof window<`u`&&window.location?.origin?new URL(r,window.location.origin).toString():r);if(o.ok){let r=await o.blob();if(e)try{let a=await r.arrayBuffer();await i(e,t,n,new Uint8Array(a))}catch{}if(typeof FileReader<`u`)return await new Promise((e,t)=>{let n=new FileReader;n.onload=()=>e(n.result),n.onerror=t,n.readAsDataURL(r)});let a=await r.arrayBuffer(),s=xe(new Uint8Array(a));return`data:${r.type||O(n)||`image/jpeg`};base64,${s}`}}catch{}}catch{}return null}function Y(e){let t=e.querySelector(`[data-pages-iframe]`);if(t instanceof HTMLIFrameElement){t.removeAttribute(`srcdoc`);try{t.src=`about:blank`}catch{}t.remove()}}async function et(e,t=typeof document<`u`?document.querySelector(`shadow-claw`):null,n=ce){return t&&typeof t.requestDialog==`function`?await t.requestDialog({mode:`confirm`,...e}):(n(e.message,4500),!1)}async function X(e,t,n=x){if(!e||typeof e.transaction!=`function`)return!0;try{return le(await n(e,t),!0)}catch{return!0}}function tt(e,t,n=[]){if(e===t||z(e,t))return t;let r=n.find(t=>t.groupId===e);if(r)return r.groupId;let i=n.find(t=>z(e,t.groupId));return i?i.groupId:e||null}function nt(e,t,n,r=[],i=typeof window<`u`?window.location.origin:``){let a=e.trim();if(!a||a.startsWith(`#`))return null;let o=[],s=a.split(/[?#]/,1)[0];if(/^[a-zA-Z][a-zA-Z\d+.-]*:/u.test(s)||s.startsWith(`//`)){let e;try{e=new URL(s,i||(typeof window<`u`?window.location.origin:``))}catch{return null}if(i&&e.origin!==i)return null;s=e.pathname}let c=s.replace(/^(?:\.\/)+/u,``);if(c.startsWith(`files/`)&&o.push(`/${c}`),s.startsWith(`/`)){let e=s.lastIndexOf(`/files/`);e>0&&o.push(s.slice(e)),o.push(s)}for(let e of o){let t=p(e);if(!t)continue;let i=tt(t.groupId,n,r);if(i)return{groupId:i,path:t.path}}let l=B(a,t,n,i);return l?{groupId:n,path:l}:null}async function rt({container:e,groupId:t,filePath:n,groups:r,readImageAsDataUrlFn:i}){let a=Array.from(e.querySelectorAll(`img[src]`));a.length!==0&&await Promise.all(a.map(async e=>{let a=e.getAttribute(`src`)||``;if(!a||/^(?:blob:|data:|#)/u.test(a))return;let o=nt(a,n,t,r);if(!o)return;let s=await i(o.groupId,o.path);s&&e.setAttribute(`src`,s)}))}function it(e,t,n){return e>0&&!t&&n}function at(e){if(!e)return;let t=typeof document<`u`&&document.documentElement.classList.contains(`dark-mode`),n={};if(typeof document<`u`&&typeof getComputedStyle<`u`){let e=getComputedStyle(document.documentElement);for(let t=0;t<e.length;t++){let r=e[t];r.startsWith(`--`)&&(n[r]=e.getPropertyValue(r))}}e.postMessage({type:`shadow-claw-theme-update`,theme:t?`dark`:`light`,customProperties:n},`*`)}function ot({root:e,currentOpen:t,force:n}){if(!e)return t;let r=e.querySelector(`[data-pages-dropdown]`),i=r instanceof HTMLDetailsElement&&r.open,a;a=n===void 0?!(i||t):n;let o=e.querySelector(`.pages__sidebar`),s=e.querySelector(`.pages__content`);return o&&o.classList.toggle(`collapsed`,!a),s&&s.classList.toggle(`pages__content--sidebar-collapsed`,!a),r instanceof HTMLDetailsElement&&(a?r.setAttribute(`open`,``):r.removeAttribute(`open`)),a}const st=new CSSStyleSheet;st.replaceSync(`* {
|
|
3
|
+
`):``,w=j();return[`<!doctype html>`,`<html class="${ye()}"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">`,`<meta http-equiv="Content-Security-Policy" content="${v}">`,`<base href="${d}" target="_blank">`,S,x,`<script nonce="${g}">${M(he)}<\/script>`,`<script nonce="${g}">${M(ve)}<\/script>`,fe(),w,ee,`</head><body class="${ye()}">`,m,`</body></html>`].join(``)}function ke(e,t){return t===0?{isPrevDisabled:!0,isNextDisabled:!0}:{isPrevDisabled:e<=0,isNextDisabled:e<0||e>=t-1}}async function Ae(e,t,n=e=>E.removeAllPages(e)){return!e||!await t({title:`Remove All Pages`,message:`Remove ALL saved pages from Pages? This cannot be undone!`,confirmLabel:`Remove All`,cancelLabel:`Cancel`})?!1:(await n(e),!0)}const H={setItem:A,deleteItem:de,clear:pe,getAll:_e,getItem:ge,putItem:A};async function je(e,t,n,r=H){switch(e){case`setItem`:await r.setItem(n,String(t.key||``),t.value);return;case`removeItem`:await r.deleteItem(n,String(t.key||``));return;case`clear`:await r.clear(n);return;case`getAllItems`:return await r.getAll(n);case`idb-get`:return await r.getItem(`${n}::idb::${t.dbName}::${t.storeName}`,String(t.key||``));case`idb-getAll`:return await r.getAll(`${n}::idb::${t.dbName}::${t.storeName}`);case`idb-put`:{let e=t.key==null?`__auto_${Date.now()}`:String(t.key);return await r.putItem(`${n}::idb::${t.dbName}::${t.storeName}`,e,t.value),e}case`idb-delete`:await r.deleteItem(`${n}::idb::${t.dbName}::${t.storeName}`,String(t.key||``));return;case`idb-clear`:await r.clear(`${n}::idb::${t.dbName}::${t.storeName}`);return;case`idb-deleteDatabase`:await r.clear(`${n}::idb::${t.dbName}::__default__`);return;case`idb-count`:{let e=await r.getAll(`${n}::idb::${t.dbName}::${t.storeName}`);return Object.keys(e).length}default:throw Error(`Unknown storage proxy method: ${e}`)}}async function Me(e,t,n,r,i,a=H){if(t)try{let o=await je(n,r,i,a);e.postMessage({type:`shadow-claw-storage-proxy-result`,requestId:t,result:o??null},`*`)}catch(n){e.postMessage({type:`shadow-claw-storage-proxy-result`,requestId:t,error:n instanceof Error?n.message:String(n)},`*`)}}function Ne({root:e,rendered:n,selectedPath:r,onIframeLoad:i}){let a=e.querySelector(`[data-pages-iframe]`);if(a instanceof HTMLIFrameElement)return a;let o=document.createElement(`iframe`);return o.className=`pages__iframe`,o.setAttribute(`data-pages-iframe`,``),o.setAttribute(`title`,r?`Preview: ${r}`:`Page preview`),o.setAttribute(`sandbox`,t()),o.setAttribute(`allow`,`fullscreen; clipboard-write`),o.hidden=!0,i&&o.addEventListener(`load`,()=>{i(o.contentWindow)}),n.before(o),o}function U(e){if(typeof e!=`string`&&typeof e!=`number`)return 0;let t=parseInt(String(e),10);return isNaN(t)||t<0?0:be(t,0,{min:0,max:86400})}async function Pe(e,t=x){if(!e)return 0;try{return U(await t(e,v.PAGES_AUTO_REFRESH_INTERVAL))}catch{return 0}}function W(e){if(!e)return``;let t=e.groupId;return t===`main`&&(t=`br:main`),`${t}\u0000${e.path}`}function G(e,t=[]){if(!e)return-1;let n=W(e);return t.findIndex(e=>W(e)===n)}function Fe(e=[]){let t=/* @__PURE__ */ new Map;return e.forEach(e=>{let n=t.get(e.groupId)||[];n.push(e),t.set(e.groupId,n)}),t}function Ie(e,t,n){if(!e)return!1;let r=e.replace(/^#/,``);if(!r)return!1;if(t&&!t.hidden){let e=t.querySelector(`[id="${r}"]`)||t.querySelector(`a[name="${r}"]`);if(e){typeof e.scrollIntoView==`function`&&e.scrollIntoView({behavior:`smooth`,block:`start`});let n=Array.from(t.querySelectorAll(`img`)).filter(e=>!e.complete);if(n.length>0){let t,r=()=>{clearTimeout(t),t=setTimeout(()=>{typeof e.scrollIntoView==`function`&&e.scrollIntoView({behavior:`smooth`,block:`start`})},50)};for(let e of n)e.addEventListener(`load`,r,{once:!0}),e.addEventListener(`error`,r,{once:!0})}return!0}}if(n&&!n.hidden){try{let e=n.contentDocument;if(e){let t=e.querySelector(`[id="${r}"]`)||e.querySelector(`a[name="${r}"]`);if(t)return typeof t.scrollIntoView==`function`&&t.scrollIntoView({behavior:`smooth`,block:`start`}),!0}}catch{}try{n.contentWindow?.postMessage({type:`shadow-claw-scroll-to-anchor`,anchor:r},`*`)}catch{}}return!1}function Le(e){let t=e.detail;return t&&t.interval!==void 0?U(t.interval):null}function Re(e,t){return!e||!t||!e.groupId||!e.path||e.path!==t.path?!1:e.groupId===t.groupId||z(e.groupId,t.groupId)}function ze(e,t){let n=e.detail;return Re(n,t)}function K(e,t){let n=[`data-no-nav`,`data-no-swipe`,`data-no-page-nav`,`data-prevent-nav`,`data-prevent-page-nav`,`data-isolate-input`,`data-isolate-navigation`,`data-game-controls`],r=e=>{if(!e||!(e instanceof HTMLElement))return!1;let t=e.tagName.toLowerCase();return!!(t===`input`||t===`textarea`||t===`select`||t===`option`||t===`iframe`||e.classList.contains(`pages__preview-frame`)||e.isContentEditable||e.contentEditable===`true`||e.getAttribute(`contenteditable`)===`true`||e.hasAttribute(`contenteditable`)||e.closest(`[data-pages-list]`)||e.closest(`[data-pages-dropdown]`)||e.closest(`.pages__sidebar`)||e.closest(`.pages__preview-frame`)||e.closest(`iframe`)||n.some(t=>e.closest(`[${t}]`)))};if(t&&r(t))return!0;if(e){let t=typeof e.composedPath==`function`?e.composedPath():[];for(let e of t)if(e instanceof HTMLElement){let t=e.tagName.toLowerCase();if(n.some(t=>e.hasAttribute(t))||t===`input`||t===`textarea`||t===`select`||t===`option`||t===`iframe`||e.classList.contains(`pages__preview-frame`)||e.isContentEditable||e.contentEditable===`true`||e.getAttribute(`contenteditable`)===`true`||e.hasAttribute(`contenteditable`))return!0}if(e.target&&r(e.target))return!0}return!1}function Be(e,t){return t||e.key!==`ArrowLeft`&&e.key!==`ArrowRight`||e.ctrlKey||e.altKey||e.metaKey?null:e.key===`ArrowLeft`?`previous`:`next`}function Ve(e,t,n,r,i,a=300,o=Date.now()){let s=i??{lastNavigationTime:0,lastDirection:null};if(!t)return s;let c=n?.activeElement||document.activeElement,l=Be(e,K(e,e.target||null)||K(void 0,c));return!l||(e.preventDefault(),s.lastDirection===l&&o-s.lastNavigationTime<a)||(s.lastNavigationTime=o,s.lastDirection=l,r(l)),s}function He(e,t,n=Date.now()){return e.button!==0||t?{mouseStartX:0,mouseStartY:0,mouseStartTime:0,isMouseDown:!1}:{mouseStartX:e.clientX,mouseStartY:e.clientY,mouseStartTime:n,isMouseDown:!0}}function Ue(e,t,n,r,i,a=Date.now(),o=50,s=600){let c=n-e,l=r-t,u=a-i;return Math.abs(c)>=o&&Math.abs(c)>Math.abs(l)&&u<=s?c<0?`next`:`previous`:null}function We(e,t,n,r,i=Date.now()){return!t.isMouseDown||n||r?null:Ue(t.mouseStartX,t.mouseStartY,e.clientX,e.clientY,t.mouseStartTime,i)}function Ge(e,t,n){if(t===n||t<0||t>=e.length||n<0||n>=e.length)return e;let r=[...e],[i]=r.splice(t,1);return r.splice(n,0,i),r}async function Ke({db:e,currentPages:t,fromIndex:n,toIndex:r,reorderStoreFn:i=(e,t)=>E.reorderPages(e,t)}){if(!e||n===r)return{reordered:!1,reorderedPages:t,movedToFirst:null};let a=Ge(t,n,r);if(a===t)return{reordered:!1,reorderedPages:t,movedToFirst:null};await i(e,a);let o=a[r]||null;return{reordered:!0,reorderedPages:a,movedToFirst:r===0?o:null}}function qe(e,t,n,r=Date.now()){if(!t.touchStartTime||n)return null;if(e.changedTouches&&e.changedTouches.length===1){let n=e.changedTouches[0].clientX,i=e.changedTouches[0].clientY;return Ue(t.touchStartX,t.touchStartY,n,i,t.touchStartTime,r)}return null}function Je(e,t,n=Date.now()){return t?{touchStartX:0,touchStartY:0,touchStartTime:0}:e.touches&&e.touches.length===1?{touchStartX:e.touches[0].clientX,touchStartY:e.touches[0].clientY,touchStartTime:n}:null}function Ye(e,t,n){return!e&&t?`render-and-timer`:e&&n?`clear-timer`:`noop`}function Xe(e,t){return!e&&t}function q(e){return/\.(html?|xhtml)$/iu.test(e)}function J(e){return/\.(md|markdown)$/iu.test(e)}function Ze(e,t,n){if(!e||!q(e))return!1;if(t&&typeof t==`object`){if(typeof t.iframe==`boolean`)return t.iframe;if(typeof t.iframe==`string`){let e=t.iframe.trim().toLowerCase();if(e===`false`||e===`0`||e===`no`)return!1;if(e===`true`||e===`1`||e===`yes`)return!0}if(typeof t.render==`string`){let e=t.render.trim().toLowerCase();if(e===`shadow`||e===`direct`||e===`shadowdom`)return!1;if(e===`iframe`)return!0}if(typeof t.shadowDom==`boolean`)return!t.shadowDom}let r=n;if(!r&&typeof document<`u`)try{let e=document.getElementById(`shadow-claw-site-config`);e?.textContent&&(r=JSON.parse(e.textContent))}catch{}if(r?.pages&&typeof r.pages==`object`){let t=r.pages,n=e.replace(/^\/+/,``).replace(/^pages\/[^/]+\//,``);if((Array.isArray(t.directPages)||Array.isArray(t.shadowDomPages))&&(t.directPages||t.shadowDomPages).some(t=>{let r=String(t).replace(/^\/+/,``).replace(/^pages\/[^/]+\//,``);return r===n||r===e}))return!1;if(Array.isArray(t.iframePages)&&t.iframePages.some(t=>{let r=String(t).replace(/^\/+/,``).replace(/^pages\/[^/]+\//,``);return r===n||r===e}))return!0;if(typeof t.iframe==`boolean`)return t.iframe;if(typeof t.iframe==`string`){let e=t.iframe.trim().toLowerCase();if(e===`false`||e===`0`||e===`no`)return!1;if(e===`true`||e===`1`||e===`yes`)return!0}if(typeof t.render==`string`){let e=t.render.trim().toLowerCase();if(e===`shadow`||e===`direct`||e===`shadowdom`)return!1;if(e===`iframe`)return!0}if(typeof t.shadowDom==`boolean`)return!t.shadowDom}return!0}function Qe(e){if(!e||typeof e!=`object`)return null;let t=e;return t.type===`shadow-claw-broadcast-result`&&typeof t.channel==`string`?{kind:`broadcast-result`,channel:t.channel,payload:t.payload}:t.type===`shadow-claw-storage-proxy`?{kind:`storage-proxy`,requestId:String(t.requestId||``),method:String(t.method||``),args:t.args&&typeof t.args==`object`?t.args:{}}:t.type===`shadow-claw-swipe`&&typeof t.direction==`string`?{kind:`swipe`,direction:t.direction}:t.type===`shadow-claw-iframe-resize`&&typeof t.height==`number`?{kind:`iframe-resize`,height:t.height}:t.type===`shadow-claw-file-viewer-link`&&typeof t.href==`string`?{kind:`file-viewer-link`,href:t.href,target:typeof t.target==`string`?t.target:void 0}:null}async function $e({db:e,groupId:t,workspacePath:n,readGroupFileBytesFn:r=ue,writeGroupFileFn:i=oe,fetchFn:a=typeof fetch<`u`?fetch:void 0}){if(e)try{let i=await r(e,t,n),a=O(n)||`image/jpeg`,o=new Uint8Array(i.byteLength);return o.set(new Uint8Array(i)),`data:${a};base64,${xe(o)}`}catch{}if(!a)return null;try{let r=n.replace(/^\/+/,``),o=[y(`/files/main/${r}`),y(`/static-main/${r}`),y(`/pages/main/${r}`)];for(let r of o)try{let o=await a(typeof window<`u`&&window.location?.origin?new URL(r,window.location.origin).toString():r);if(o.ok){let r=await o.blob();if(e)try{let a=await r.arrayBuffer();await i(e,t,n,new Uint8Array(a))}catch{}if(typeof FileReader<`u`)return await new Promise((e,t)=>{let n=new FileReader;n.onload=()=>e(n.result),n.onerror=t,n.readAsDataURL(r)});let a=await r.arrayBuffer(),s=xe(new Uint8Array(a));return`data:${r.type||O(n)||`image/jpeg`};base64,${s}`}}catch{}}catch{}return null}function Y(e){let t=e.querySelector(`[data-pages-iframe]`);if(t instanceof HTMLIFrameElement){t.removeAttribute(`srcdoc`);try{t.src=`about:blank`}catch{}t.remove()}}async function et(e,t=typeof document<`u`?document.querySelector(`shadow-claw`):null,n=ce){return t&&typeof t.requestDialog==`function`?await t.requestDialog({mode:`confirm`,...e}):(n(e.message,4500),!1)}async function X(e,t,n=x){if(!e||typeof e.transaction!=`function`)return!0;try{return le(await n(e,t),!0)}catch{return!0}}function tt(e,t,n=[]){if(e===t||z(e,t))return t;let r=n.find(t=>t.groupId===e);if(r)return r.groupId;let i=n.find(t=>z(e,t.groupId));return i?i.groupId:e||null}function nt(e,t,n,r=[],i=typeof window<`u`?window.location.origin:``){let a=e.trim();if(!a||a.startsWith(`#`))return null;let o=[],s=a.split(/[?#]/,1)[0];if(/^[a-zA-Z][a-zA-Z\d+.-]*:/u.test(s)||s.startsWith(`//`)){let e;try{e=new URL(s,i||(typeof window<`u`?window.location.origin:``))}catch{return null}if(i&&e.origin!==i)return null;s=e.pathname}let c=s.replace(/^(?:\.\/)+/u,``);if(c.startsWith(`files/`)&&o.push(`/${c}`),s.startsWith(`/`)){let e=s.lastIndexOf(`/files/`);e>0&&o.push(s.slice(e)),o.push(s)}for(let e of o){let t=p(e);if(!t)continue;let i=tt(t.groupId,n,r);if(i)return{groupId:i,path:t.path}}let l=B(a,t,n,i);return l?{groupId:n,path:l}:null}async function rt({container:e,groupId:t,filePath:n,groups:r,readImageAsDataUrlFn:i}){let a=Array.from(e.querySelectorAll(`img[src]`));a.length!==0&&await Promise.all(a.map(async e=>{let a=e.getAttribute(`src`)||``;if(!a||/^(?:blob:|data:|#)/u.test(a))return;let o=nt(a,n,t,r);if(!o)return;let s=await i(o.groupId,o.path);s&&e.setAttribute(`src`,s)}))}function it(e,t,n){return e>0&&!t&&n}function at(e){if(!e)return;let t=typeof document<`u`&&document.documentElement.classList.contains(`dark-mode`),n={};if(typeof document<`u`&&typeof getComputedStyle<`u`){let e=getComputedStyle(document.documentElement);for(let t=0;t<e.length;t++){let r=e[t];r.startsWith(`--`)&&(n[r]=e.getPropertyValue(r))}}e.postMessage({type:`shadow-claw-theme-update`,theme:t?`dark`:`light`,customProperties:n},`*`)}function ot({root:e,currentOpen:t,force:n}){if(!e)return t;let r=e.querySelector(`[data-pages-dropdown]`),i=r instanceof HTMLDetailsElement&&r.open,a;a=n===void 0?!(i||t):n;let o=e.querySelector(`.pages__sidebar`),s=e.querySelector(`.pages__content`);return o&&o.classList.toggle(`collapsed`,!a),s&&s.classList.toggle(`pages__content--sidebar-collapsed`,!a),r instanceof HTMLDetailsElement&&(a?r.setAttribute(`open`,``):r.removeAttribute(`open`)),a}const st=new CSSStyleSheet;st.replaceSync(`* {
|
|
4
4
|
box-sizing: border-box;
|
|
5
5
|
}
|
|
6
6
|
|
|
@@ -663,10 +663,10 @@ ul {
|
|
|
663
663
|
</div>
|
|
664
664
|
</section>
|
|
665
665
|
</template>
|
|
666
|
-
`,`text/html`),Q=Z.querySelector(`template`);let ct=[];ct=Q?Array.from(Q.content.children):Array.from(Z.head.children).concat(Array.from(Z.body.children));var lt=ct;const ut={ALLOWED_URI_REGEXP:/^(?:(?:https?|mailto|ftp|tel|file|blob|data):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,ADD_TAGS:[`iframe`,`figure`,`figcaption`,`script`],CUSTOM_ELEMENT_HANDLING:{tagNameCheck:e=>u(e),attributeNameCheck:()=>!0,allowCustomizedBuiltInElements:!1},ADD_ATTR:[`allow`,`allowfullscreen`,`frameborder`,`scrolling`,`referrerpolicy`,`loading`,`src`,`type`,`async`,`defer`]},dt=`shadow-claw-pages`;function $(e,t){return!e||!t?!1:e===t||e.replace(/^\/+/,``).replace(/^pages\/[^/]+\//,``)===t.replace(/^\/+/,``).replace(/^pages\/[^/]+\//,``)}var ft=class extends Ce{static styles=st;static template=lt;autoRefreshIntervalSec=0;autoRefreshTimer=null;broadcastProxy=null;db=null;draggedPageIndex=null;isMouseDown=!1;keyNavState={lastNavigationTime:0,lastDirection:null};mouseStartTime=0;mouseStartX=0;mouseStartY=0;navFadeTimer=null;pageFrontmatter=new C.State(null);previewFrameWindow=null;renderToken=0;sidebarOpen=!1;themeObserver=null;touchStartTime=0;touchStartX=0;touchStartY=0;dsdInitialPath=null;dsdInitialHtml=null;renderedContent=null;renderedFrontmatterToggle=null;renderedKey=null;routingReady=!1;constructor(){super()}async connectedCallback(){let e=this.shadowRoot;if(!e)throw Error(`shadowRoot not found`);if(this.ensureThemeStylesheet(),document.documentElement.classList.contains(`sc-prerender-override`)){let t=e.querySelector(`[data-pages-rendered]`);t instanceof HTMLElement&&(t.hidden=!0,t.textContent=``)}else{let t=e.querySelector(`[data-pages-rendered]`),n=t instanceof HTMLElement?t.getAttribute(`data-initial-path`)?.trim():null,r=e.querySelector(`[data-pages-dropdown-selected]`)?.textContent?.trim();n?this.dsdInitialPath=n:r&&r!==`Select a page...`&&(this.dsdInitialPath=r),t instanceof HTMLElement&&t.innerHTML.trim()&&(this.dsdInitialHtml=t.innerHTML)}this.db=await b(),await E.whenInitialized,this.broadcastProxy=new me(()=>this.previewFrameWindow||this.shadowRoot?.querySelector(`[data-pages-iframe]`)?.contentWindow||null),window.addEventListener(`message`,this.handleIframeMessage),document.addEventListener(`visibilitychange`,this.handleVisibilityChange),window.addEventListener(`focus`,this.handleWindowFocus),window.addEventListener(`shadow-claw-pages-auto-refresh-change`,this.handleAutoRefreshConfigChange),document.addEventListener(`shadow-claw-file-saved`,this.handleFileSaved),document.addEventListener(`keydown`,this.handleKeyDown),e.addEventListener(`click`,t=>{let n=e.querySelector(`[data-pages-dropdown]`);if(n instanceof HTMLDetailsElement&&n.open){let r=t.target,i=e.querySelector(`[data-pages-sidebar-toggle]`);!n.contains(r)&&(!i||!i.contains(r))&&n.removeAttribute(`open`)}});let t=e.querySelector(`.pages__viewer`),n=e.querySelector(`.pages__viewer-scroll`),r=()=>{this.showNavButtonsTemporarily(2e3)};t instanceof HTMLElement&&(t.addEventListener(`pointermove`,r,{passive:!0}),t.addEventListener(`pointerdown`,r,{passive:!0}),t.addEventListener(`touchstart`,r,{passive:!0}),t.addEventListener(`touchstart`,this.handleTouchStart,{passive:!0}),t.addEventListener(`touchend`,this.handleTouchEnd,{passive:!0}),t.addEventListener(`mousedown`,this.handleMouseDown,{passive:!0}),t.addEventListener(`mouseup`,this.handleMouseUp,{passive:!0}),t.addEventListener(`click`,r,{passive:!0}),t.addEventListener(`focusin`,r,{passive:!0})),n instanceof HTMLElement&&n.addEventListener(`scroll`,r,{passive:!0});let i=e.querySelector(`[data-pages-sidebar-toggle]`);i&&i.addEventListener(`click`,()=>{this.toggleSidebar()});let a=e.querySelector(`.pages__remove-all-btn`);a&&a.addEventListener(`click`,()=>{this.handleRemoveAll()});let o=e.querySelector(`[data-pages-prev]`);o&&o.addEventListener(`click`,()=>{this.goToPreviousPage()});let s=e.querySelector(`[data-pages-next]`);s&&s.addEventListener(`click`,()=>{this.goToNextPage()}),this.toggleSidebar(this.sidebarOpen),this.setupEffects(),this.themeObserver=new MutationObserver(e=>{for(let t of e)t.type===`attributes`&&t.attributeName===`class`&&this.syncIframeTheme()}),this.themeObserver.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`]}),await E.whenReady,this.routingReady=!0,this.renderSelectedPage(),this.setupAutoRefreshTimer()}disconnectedCallback(){this.renderedKey=null,this.renderedContent=null,this.renderedFrontmatterToggle=null,this.dsdInitialPath=null,this.themeObserver&&=(this.themeObserver.disconnect(),null),this.navFadeTimer!==null&&(clearTimeout(this.navFadeTimer),this.navFadeTimer=null),this.autoRefreshTimer!==null&&(clearInterval(this.autoRefreshTimer),this.autoRefreshTimer=null),window.removeEventListener(`message`,this.handleIframeMessage),document.removeEventListener(`visibilitychange`,this.handleVisibilityChange),window.removeEventListener(`focus`,this.handleWindowFocus),window.removeEventListener(`shadow-claw-pages-auto-refresh-change`,this.handleAutoRefreshConfigChange),document.removeEventListener(`shadow-claw-file-saved`,this.handleFileSaved),document.removeEventListener(`keydown`,this.handleKeyDown),this.keyNavState={lastNavigationTime:0,lastDirection:null},this.broadcastProxy?.dispose(),this.broadcastProxy=null,this.previewFrameWindow=null,super.disconnectedCallback?.()}announcePageChange(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-pages-announcer]`);n instanceof HTMLElement&&Ee(e,this.pageFrontmatter.get()?.title,n)}goToNextPage(){let e=E.pages,t=G(this.selectedPage,e);t>=0&&t<e.length-1&&this.navigateToPage(e[t+1])}goToPreviousPage(){let e=E.pages,t=G(this.selectedPage,e);t>0&&this.navigateToPage(e[t-1])}handleAnchorNavigation(e){let t=this.shadowRoot;return t?Ie(e,t.querySelector(`[data-pages-rendered]`),t.querySelector(`[data-pages-iframe]`)):!1}handleAutoRefreshConfigChange=e=>{let t=Le(e);t!==null&&(this.autoRefreshIntervalSec=t),this.setupAutoRefreshTimer()};handleFileSaved=e=>{ze(e,this.selectedPage)&&this.renderSelectedPage()};handleIframeMessage=e=>{let t=Qe(e.data);if(!t)return;if(t.kind===`broadcast-result`){this.broadcastProxy?.handleResultFromIframe(e.source,t.channel,t.payload);return}if(t.kind===`storage-proxy`){if(this.previewFrameWindow&&e.source!==this.previewFrameWindow)return;let n=this.selectedPage?.path||`__default__`;Me(e.source,t.requestId,t.method,t.args,n);return}if(t.kind===`swipe`){if(this.previewFrameWindow&&e.source!==this.previewFrameWindow)return;this.showNavButtonsTemporarily(2e3),t.direction===`left`?this.goToNextPage():t.direction===`right`&&this.goToPreviousPage();return}if(t.kind===`iframe-resize`){let n=this.shadowRoot?.querySelector(`[data-pages-iframe]`);n instanceof HTMLIFrameElement&&(!this.previewFrameWindow||e.source===this.previewFrameWindow||n.contentWindow&&e.source===n.contentWindow)&&(this.previewFrameWindow=n.contentWindow,n.style.setProperty(`height`,`${t.height}px`,`important`));return}if(!this.db||t.kind!==`file-viewer-link`||this.previewFrameWindow&&e.source!==this.previewFrameWindow)return;let n=this.selectedPage?.path||``,r=this.selectedPage?.groupId||E.activeGroupId,i=h(v(r,n)),a=g(t.href,i,window.location.origin);if(!a)return;if(a.searchParams.has(`gameSave`)){this.reloadPreviewWithSearchParams(a.search);return}if(a.origin!==window.location.origin||m(a.pathname)||!y(a.pathname)&&!B(t.href,n,r)){if(m(a.pathname)){window.location.assign(a.href);return}window.open(a.href,`_blank`,`noopener,noreferrer`);return}let o=`${a.pathname}${a.search}${a.hash}`,s=window.navigation;s&&typeof s.navigate==`function`?s.navigate(o):(window.history.pushState({},``,o),window.dispatchEvent(new PopStateEvent(`popstate`)))};handleKeyDown=e=>{Ve(e,this.isConnected,this.shadowRoot,e=>{this.showNavButtonsTemporarily(2e3),e===`previous`?this.goToPreviousPage():this.goToNextPage()},this.keyNavState)};handleMouseDown=e=>{let t=He(e,K(e));this.mouseStartX=t.mouseStartX,this.mouseStartY=t.mouseStartY,this.mouseStartTime=t.mouseStartTime,this.isMouseDown=t.isMouseDown};handleMouseUp=e=>{let t=window.getSelection(),n=!!(t&&t.toString().length>0),r=We(e,{mouseStartX:this.mouseStartX,mouseStartY:this.mouseStartY,mouseStartTime:this.mouseStartTime,isMouseDown:this.isMouseDown},K(e),n);this.isMouseDown=!1,r&&(this.showNavButtonsTemporarily(2e3),r===`next`?this.goToNextPage():this.goToPreviousPage())};handleTouchEnd=e=>{let t=qe(e,{touchStartX:this.touchStartX,touchStartY:this.touchStartY,touchStartTime:this.touchStartTime},K(e));t&&(this.showNavButtonsTemporarily(2e3),t===`next`?this.goToNextPage():this.goToPreviousPage()),this.touchStartTime=0};handleTouchStart=e=>{let t=Je(e,K(e));t&&(this.touchStartX=t.touchStartX,this.touchStartY=t.touchStartY,this.touchStartTime=t.touchStartTime)};handleVisibilityChange=()=>{let e=Ye(document.hidden,this.isConnected,this.autoRefreshTimer!==null);e===`render-and-timer`?(this.renderSelectedPage(),this.setupAutoRefreshTimer()):e===`clear-timer`&&this.autoRefreshTimer!==null&&(clearInterval(this.autoRefreshTimer),this.autoRefreshTimer=null)};handleWindowFocus=()=>{Xe(document.hidden,this.isConnected)&&this.renderSelectedPage()};navigateToPage(e){(typeof E.isPageAllowed!=`function`||E.isPageAllowed(e.path,e.groupId))&&(this.selectedPage=e,this.showNavButtonsTemporarily(2500),this.announcePageChange(e),document.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`pages`,groupId:e.groupId,path:e.path},bubbles:!0,composed:!0})))}renderPageList(e,t){let n=this.shadowRoot;if(!n)return;let r=n.querySelector(`[data-pages-status]`);r instanceof HTMLElement&&(r.textContent=e.length===1?`1 saved page`:`${e.length} saved pages`);let i=n.querySelector(`.pages__remove-all-btn`);i&&i.toggleAttribute(`disabled`,e.length===0);let a=n.querySelector(`[data-pages-dropdown-selected]`);a instanceof HTMLElement&&(a.textContent=this.selectedPage?this.selectedPage.path:`Select a page...`);let o=n.querySelectorAll(`[data-pages-list]`);if(o.length===0)return;o.forEach(e=>{e instanceof HTMLElement&&e.replaceChildren()});let s=n.querySelector(`[data-pages-prev]`),c=n.querySelector(`[data-pages-next]`),l=n.querySelector(`shadow-claw-page-header`),u=this.pageFrontmatter.get();if(l){if(u&&u.title){if(this.selectedPage){let e=h(_({page:`pages`,groupId:this.selectedPage.groupId,path:this.selectedPage.path})),t=e;if(typeof window<`u`&&window.location?.origin)try{t=new URL(e,window.location.origin).href}catch{}l.setAttribute(`page-title`,`<a href="${t}">${u.title}</a>`),l.setAttribute(`title`,u.title)}else l.setAttribute(`page-title`,u.title),l.setAttribute(`title`,u.title)}else l.setAttribute(`page-title`,`Pages`),l.setAttribute(`title`,`Pages`)}if(typeof document<`u`){let e=ne(),t=u?.title||(this.selectedPage?``:void 0);document.title=Te({pageTitle:t,siteTitle:e.siteTitle,separator:e.separator,titleTemplate:e.titleTemplate,isHome:!this.selectedPage})}if(s instanceof HTMLButtonElement&&c instanceof HTMLButtonElement){let{isPrevDisabled:t,isNextDisabled:n}=ke(G(this.selectedPage,e),e.length);s.disabled=t,s.hidden=t,c.disabled=n,c.hidden=n}if(e.length===0)return;let d=new Map(t.map(e=>[e.groupId,e.name])),f=Fe(e);o.forEach(t=>{if(!(t instanceof HTMLElement))return;let n=document.createDocumentFragment();for(let[r,i]of f){let a=document.createElement(`details`);a.className=`pages__group-details`;let o=`shadow-claw-pages-group-collapsed-${r}`,s=!1;try{s=ee(o)===`true`}catch{}s||(a.open=!0),a.addEventListener(`toggle`,()=>{try{a.open?te(o):w(o,`true`)}catch{}});let c=document.createElement(`summary`);c.className=`pages__group-label`;let l=document.createElement(`span`);l.textContent=d.get(r)||r;let u=document.createElement(`span`);u.className=`pages__group-icon`,u.textContent=`▼`,c.appendChild(l),c.appendChild(u),a.appendChild(c);let f=document.createElement(`div`);f.className=`pages__group-pages`,i.forEach(n=>{let i=n.path,a=e.findIndex(e=>e.path===n.path&&e.groupId===n.groupId),o=document.createElement(`div`);o.className=`pages__list-item`,this.selectedPage&&W(n)===W(this.selectedPage)&&o.classList.add(`active`);let s=document.createElement(`span`);s.className=`pages__drag-handle`,s.setAttribute(`draggable`,`true`),s.title=`Drag to reorder`,s.textContent=`⠿`,s.addEventListener(`dragstart`,e=>{this.draggedPageIndex=a,o.classList.add(`dragging`),e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`)}),o.addEventListener(`dragend`,()=>{this.draggedPageIndex=null,o.classList.remove(`dragging`)}),o.addEventListener(`dragover`,e=>{e.preventDefault(),this.draggedPageIndex!==null&&this.draggedPageIndex!==a&&o.classList.add(`drag-over`)}),o.addEventListener(`dragleave`,()=>{o.classList.remove(`drag-over`)}),o.addEventListener(`drop`,e=>{e.preventDefault(),o.classList.remove(`drag-over`),this.draggedPageIndex!==null&&this.draggedPageIndex!==a&&this.handleReorder(this.draggedPageIndex,a)});let c=E.effectiveDefaultPage,l=c&&c.path===n.path&&c.groupId===n.groupId,u=document.createElement(`button`);u.type=`button`,u.className=`pages__select`,u.title=`Open ${i}`;let p=document.createElement(`span`);p.className=`pages__list-path`,p.textContent=i,u.appendChild(p),u.addEventListener(`click`,()=>{this.selectedPage=n,this.renderPageList(E.pages,E.groups),this.renderSelectedPage(),this.sidebarOpen=!1;let e=t.closest(`details`);e&&e.removeAttribute(`open`),document.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`pages`,groupId:n.groupId,path:n.path},bubbles:!0,composed:!0}))});let m=document.createElement(`button`);m.className=`pages__edit`,m.type=`button`,m.title=`Edit in file editor`,m.setAttribute(`aria-label`,`Edit ${i} in file editor`),m.textContent=`✏️`,m.addEventListener(`click`,async e=>{if(e.stopPropagation(),this.db)try{await Se.openFile(this.db,i,r)}catch(e){let t=e instanceof Error?e.message:String(e);D(`Failed to edit file: ${t}`,4500)}});let h=document.createElement(`button`);if(h.className=`pages__remove`,h.type=`button`,h.title=`Remove from Pages`,h.setAttribute(`aria-label`,`Remove ${i} from Pages in ${d.get(r)||r}`),h.textContent=`✕`,h.addEventListener(`click`,async e=>{if(e.stopPropagation(),this.db&&await et({title:`Remove Page`,message:`Are you sure you want to remove this page from Pages?\n\n${i}`,confirmLabel:`Remove`,cancelLabel:`Cancel`}))try{await E.removePage(this.db,i,r),se(`Removed ${i} from Pages`,2400)}catch(e){let t=e instanceof Error?e.message:String(e);D(`Failed to remove page: ${t}`,4500)}}),o.appendChild(s),l){let e=document.createElement(`span`);e.className=`pages__default-btn is-default`,e.title=`Default page`,e.textContent=`⭐`,o.appendChild(e)}o.appendChild(u),o.appendChild(m),o.appendChild(h),f.appendChild(o)}),a.appendChild(f),n.appendChild(a)}t.appendChild(n)})}rewriteWorkspacePreviewHtml(e,t){let n=this.selectedPage?.groupId||E.activeGroupId;return V(e,t,h(v(n,t)),n,window.location.origin)}get selectedPage(){return E.activePinnedPage}set selectedPage(e){W(e)!==W(this.selectedPage)&&(this.db?E.setActivePinnedPage(this.db,e):E._activePinnedPage.set(e),e&&this.announcePageChange(e),this.renderPageList(E.pages,E.groups),this.renderSelectedPage())}setupEffects(){this.addCleanup(N(()=>{let e=ae.declarativeTools;this.broadcastProxy&&e.length>0&&this.broadcastProxy.registerChannelsFromTools(e)})),this.addCleanup(N(()=>{let e=E.pages,t=E.groups;this.renderPageList(e,t)})),this.addCleanup(N(()=>{let e=E.pages,t=E.activePinnedPage;e.length===0?t!==null&&(this.selectedPage=null):t?e.some(e=>W(e)===W(t))||typeof E.isPageAllowed==`function`&&!E.isPageAllowed(t.path,t.groupId)&&(this.selectedPage=E.effectiveDefaultPage||e[0]):this.selectedPage=E.effectiveDefaultPage||e[0],this.routingReady&&this.renderSelectedPage()}))}showNavButtonsTemporarily(e=2500){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`.pages__viewer`);n instanceof HTMLElement&&n.classList.add(`pages__viewer--nav-visible`),this.navFadeTimer!==null&&clearTimeout(this.navFadeTimer),this.navFadeTimer=setTimeout(()=>{this.navFadeTimer=null,n instanceof HTMLElement&&n.classList.remove(`pages__viewer--nav-visible`)},e)}toggleSidebar(e){this.sidebarOpen=ot({root:this.shadowRoot,currentOpen:this.sidebarOpen,force:e})}async buildHtmlPageSrcdoc(e,t,n=``){return await Oe({content:e,filePath:t,searchParams:n,groupId:this.selectedPage?.groupId||E.activeGroupId,origin:typeof window<`u`?window.location?.origin:``,resolveRelativeImagesInHtmlFn:(e,t,n)=>this.resolveRelativeImagesInHtml(e,t,n)})}async handleRemoveAll(){let e=this.shadowRoot?.querySelector(`.pages__remove-all-btn`);try{e?.toggleAttribute(`disabled`,!0),e&&(e.textContent=`⏳`),await Ae(this.db,e=>et(e))&&se(`Removed all pages from Pages`,2400)}catch(e){let t=e instanceof Error?e.message:String(e);D(`Failed to remove all pages: ${t}`,4500),console.error(`Remove all pages error:`,e)}finally{e?.toggleAttribute(`disabled`,!1),e&&(e.textContent=`🗑️ Remove All`)}}async handleReorder(e,t){let n=await Ke({db:this.db,currentPages:E.pages,fromIndex:e,toIndex:t});n.movedToFirst&&(this.selectedPage=n.movedToFirst,this.renderSelectedPage(),document.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`pages`,groupId:n.movedToFirst.groupId,path:n.movedToFirst.path},bubbles:!0,composed:!0})))}async renderSelectedPage(){let e=this.shadowRoot;if(!e)return;this.ensureThemeStylesheet(),this.db||=await b();let t=e.querySelector(`[data-pages-empty]`),r=e.querySelector(`[data-pages-rendered]`);if(!(t instanceof HTMLElement)||!(r instanceof HTMLElement))return;let i=this.selectedPage;if(!this.db||!i||typeof E.isPageAllowed==`function`&&!E.isPageAllowed(i.path,i.groupId)){this.renderedKey=null,this.renderedContent=null,this.renderedFrontmatterToggle=null,t.hidden=!1,r.hidden=!0,r.textContent=``,this.pageFrontmatter.set(null),Y(e);return}let o=++this.renderToken,u=`${i.groupId}:${i.path}`,d=q(i.path)&&Ze(i.path,this.pageFrontmatter.get()),p=J(i.path)||q(i.path)&&!d;if(this.renderedKey===u&&this.dsdInitialPath&&$(this.dsdInitialPath,i.path)&&p&&r.children.length>0&&!r.hidden)this.showNavButtonsTemporarily(2500);else if(!this.renderedKey&&this.dsdInitialPath&&$(this.dsdInitialPath,i.path)&&r.children.length>0&&!r.hidden&&p)this.renderedKey=u,t.hidden=!0,r.hidden=!1,this.renderedFrontmatterToggle=null,Y(e),this.showNavButtonsTemporarily(2500),(async()=>{try{let e;try{e=await ie(this.db,i.groupId,i.path)}catch{let t=await T(i.path);if(typeof t==`string`)e=t;else return}if(o===this.renderToken){this.renderedContent=e;let t=k(e);if(Object.keys(t.data).length>0&&this.pageFrontmatter.set(t.data),J(i.path)){let e=await X(this.db,f.MARKDOWN_FRONTMATTER_PAGES);this.renderedFrontmatterToggle=e,await this.resolveMarkdownImages(r,i.groupId,i.path)}}}catch{}})();else try{let u;try{u=await ie(this.db,i.groupId,i.path)}catch(e){try{let t=await T(i.path);if(typeof t==`string`)u=t,Promise.resolve(oe(this.db,i.groupId,i.path,u)).catch(()=>{});else throw e}catch{throw e}}if(o!==this.renderToken)return;t.hidden=!0;let d=`${i.groupId}:${i.path}`,p=k(u),m=Object.keys(p.data).length>0?p.data:null,g=this.pageFrontmatter.get();JSON.stringify(g)!==JSON.stringify(m)&&this.pageFrontmatter.set(m);let _=Ze(i.path,m);if(!this.renderedKey&&this.dsdInitialPath&&$(this.dsdInitialPath,i.path)&&r.children.length>0&&!r.hidden&&(J(i.path)||q(i.path)&&!_)){if(this.renderedKey=d,this.renderedContent=u,J(i.path)){let e=await X(this.db,f.MARKDOWN_FRONTMATTER_PAGES);this.renderedFrontmatterToggle=e,await this.resolveMarkdownImages(r,i.groupId,i.path)}if(Y(e),this.showNavButtonsTemporarily(2500),q(i.path)){let e=c().filter(e=>(e.global===!0||e.autoload===!0)&&e.hasInit);await Promise.all(e.map(async e=>{let t=e.src.startsWith(`http://`)||e.src.startsWith(`https://`)||e.src.startsWith(`//`),i=t?e.src:h(e.src.startsWith(`/`)?e.src:`/${e.src.replace(/^pages\/main\//,``)}`),a=t?e.src:new URL(i,window.location.origin).href;try{await n(i)}catch{}try{let e=await import(
|
|
666
|
+
`,`text/html`),Q=Z.querySelector(`template`);let ct=[];ct=Q?Array.from(Q.content.children):Array.from(Z.head.children).concat(Array.from(Z.body.children));var lt=ct;const ut={ALLOWED_URI_REGEXP:/^(?:(?:https?|mailto|ftp|tel|file|blob|data):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i,ADD_TAGS:[`iframe`,`figure`,`figcaption`,`script`],CUSTOM_ELEMENT_HANDLING:{tagNameCheck:e=>u(e),attributeNameCheck:()=>!0,allowCustomizedBuiltInElements:!1},ADD_ATTR:[`allow`,`allowfullscreen`,`frameborder`,`scrolling`,`referrerpolicy`,`loading`,`src`,`type`,`async`,`defer`]},dt=`shadow-claw-pages`;function $(e,t){return!e||!t?!1:e===t||e.replace(/^\/+/,``).replace(/^pages\/[^/]+\//,``)===t.replace(/^\/+/,``).replace(/^pages\/[^/]+\//,``)}var ft=class extends Ce{static styles=st;static template=lt;autoRefreshIntervalSec=0;autoRefreshTimer=null;broadcastProxy=null;db=null;draggedPageIndex=null;isMouseDown=!1;keyNavState={lastNavigationTime:0,lastDirection:null};mouseStartTime=0;mouseStartX=0;mouseStartY=0;navFadeTimer=null;pageFrontmatter=new C.State(null);previewFrameWindow=null;renderToken=0;sidebarOpen=!1;themeObserver=null;touchStartTime=0;touchStartX=0;touchStartY=0;dsdInitialPath=null;dsdInitialHtml=null;renderedContent=null;renderedFrontmatterToggle=null;renderedKey=null;routingReady=!1;constructor(){super()}async connectedCallback(){let e=this.shadowRoot;if(!e)throw Error(`shadowRoot not found`);if(this.ensureThemeStylesheet(),document.documentElement.classList.contains(`sc-prerender-override`)){let t=e.querySelector(`[data-pages-rendered]`);t instanceof HTMLElement&&(t.hidden=!0,t.textContent=``)}else{let t=e.querySelector(`[data-pages-rendered]`),n=t instanceof HTMLElement?t.getAttribute(`data-initial-path`)?.trim():null,r=e.querySelector(`[data-pages-dropdown-selected]`)?.textContent?.trim();n?this.dsdInitialPath=n:r&&r!==`Select a page...`&&(this.dsdInitialPath=r),t instanceof HTMLElement&&t.innerHTML.trim()&&(this.dsdInitialHtml=t.innerHTML)}this.db=await b(),await E.whenInitialized,this.broadcastProxy=new me(()=>this.previewFrameWindow||this.shadowRoot?.querySelector(`[data-pages-iframe]`)?.contentWindow||null),window.addEventListener(`message`,this.handleIframeMessage),document.addEventListener(`visibilitychange`,this.handleVisibilityChange),window.addEventListener(`focus`,this.handleWindowFocus),window.addEventListener(`shadow-claw-pages-auto-refresh-change`,this.handleAutoRefreshConfigChange),document.addEventListener(`shadow-claw-file-saved`,this.handleFileSaved),document.addEventListener(`keydown`,this.handleKeyDown),e.addEventListener(`click`,t=>{let n=e.querySelector(`[data-pages-dropdown]`);if(n instanceof HTMLDetailsElement&&n.open){let r=t.target,i=e.querySelector(`[data-pages-sidebar-toggle]`);!n.contains(r)&&(!i||!i.contains(r))&&n.removeAttribute(`open`)}});let t=e.querySelector(`.pages__viewer`),n=e.querySelector(`.pages__viewer-scroll`),r=()=>{this.showNavButtonsTemporarily(2e3)};t instanceof HTMLElement&&(t.addEventListener(`pointermove`,r,{passive:!0}),t.addEventListener(`pointerdown`,r,{passive:!0}),t.addEventListener(`touchstart`,r,{passive:!0}),t.addEventListener(`touchstart`,this.handleTouchStart,{passive:!0}),t.addEventListener(`touchend`,this.handleTouchEnd,{passive:!0}),t.addEventListener(`mousedown`,this.handleMouseDown,{passive:!0}),t.addEventListener(`mouseup`,this.handleMouseUp,{passive:!0}),t.addEventListener(`click`,r,{passive:!0}),t.addEventListener(`focusin`,r,{passive:!0})),n instanceof HTMLElement&&n.addEventListener(`scroll`,r,{passive:!0});let i=e.querySelector(`[data-pages-sidebar-toggle]`);i&&i.addEventListener(`click`,()=>{this.toggleSidebar()});let a=e.querySelector(`.pages__remove-all-btn`);a&&a.addEventListener(`click`,()=>{this.handleRemoveAll()});let o=e.querySelector(`[data-pages-prev]`);o&&o.addEventListener(`click`,()=>{this.goToPreviousPage()});let s=e.querySelector(`[data-pages-next]`);s&&s.addEventListener(`click`,()=>{this.goToNextPage()}),this.toggleSidebar(this.sidebarOpen),this.setupEffects(),this.themeObserver=new MutationObserver(e=>{for(let t of e)t.type===`attributes`&&t.attributeName===`class`&&this.syncIframeTheme()}),this.themeObserver.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`]}),await E.whenReady,this.routingReady=!0,this.renderSelectedPage(),this.setupAutoRefreshTimer()}disconnectedCallback(){this.renderedKey=null,this.renderedContent=null,this.renderedFrontmatterToggle=null,this.dsdInitialPath=null,this.themeObserver&&=(this.themeObserver.disconnect(),null),this.navFadeTimer!==null&&(clearTimeout(this.navFadeTimer),this.navFadeTimer=null),this.autoRefreshTimer!==null&&(clearInterval(this.autoRefreshTimer),this.autoRefreshTimer=null),window.removeEventListener(`message`,this.handleIframeMessage),document.removeEventListener(`visibilitychange`,this.handleVisibilityChange),window.removeEventListener(`focus`,this.handleWindowFocus),window.removeEventListener(`shadow-claw-pages-auto-refresh-change`,this.handleAutoRefreshConfigChange),document.removeEventListener(`shadow-claw-file-saved`,this.handleFileSaved),document.removeEventListener(`keydown`,this.handleKeyDown),this.keyNavState={lastNavigationTime:0,lastDirection:null},this.broadcastProxy?.dispose(),this.broadcastProxy=null,this.previewFrameWindow=null,super.disconnectedCallback?.()}announcePageChange(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`[data-pages-announcer]`);n instanceof HTMLElement&&Ee(e,this.pageFrontmatter.get()?.title,n)}goToNextPage(){let e=E.pages,t=G(this.selectedPage,e);t>=0&&t<e.length-1&&this.navigateToPage(e[t+1])}goToPreviousPage(){let e=E.pages,t=G(this.selectedPage,e);t>0&&this.navigateToPage(e[t-1])}handleAnchorNavigation(e){let t=this.shadowRoot;return t?Ie(e,t.querySelector(`[data-pages-rendered]`),t.querySelector(`[data-pages-iframe]`)):!1}handleAutoRefreshConfigChange=e=>{let t=Le(e);t!==null&&(this.autoRefreshIntervalSec=t),this.setupAutoRefreshTimer()};handleFileSaved=e=>{ze(e,this.selectedPage)&&this.renderSelectedPage()};handleIframeMessage=e=>{let t=Qe(e.data);if(!t)return;if(t.kind===`broadcast-result`){this.broadcastProxy?.handleResultFromIframe(e.source,t.channel,t.payload);return}if(t.kind===`storage-proxy`){if(this.previewFrameWindow&&e.source!==this.previewFrameWindow)return;let n=this.selectedPage?.path||`__default__`;Me(e.source,t.requestId,t.method,t.args,n);return}if(t.kind===`swipe`){if(this.previewFrameWindow&&e.source!==this.previewFrameWindow)return;this.showNavButtonsTemporarily(2e3),t.direction===`left`?this.goToNextPage():t.direction===`right`&&this.goToPreviousPage();return}if(t.kind===`iframe-resize`){let n=this.shadowRoot?.querySelector(`[data-pages-iframe]`);n instanceof HTMLIFrameElement&&(!this.previewFrameWindow||e.source===this.previewFrameWindow||n.contentWindow&&e.source===n.contentWindow)&&(this.previewFrameWindow=n.contentWindow,n.style.setProperty(`height`,`${t.height}px`,`important`));return}if(!this.db||t.kind!==`file-viewer-link`||this.previewFrameWindow&&e.source!==this.previewFrameWindow)return;let n=this.selectedPage?.path||``,r=this.selectedPage?.groupId||E.activeGroupId,i=y(h(r,n)),a=g(t.href,i,window.location.origin);if(!a)return;if(a.searchParams.has(`gameSave`)){this.reloadPreviewWithSearchParams(a.search);return}if(a.origin!==window.location.origin||m(a.pathname)||!_(a.pathname)&&!B(t.href,n,r)){if(m(a.pathname)){window.location.assign(a.href);return}window.open(a.href,`_blank`,`noopener,noreferrer`);return}let o=`${a.pathname}${a.search}${a.hash}`,s=window.navigation;s&&typeof s.navigate==`function`?s.navigate(o):(window.history.pushState({},``,o),window.dispatchEvent(new PopStateEvent(`popstate`)))};handleKeyDown=e=>{Ve(e,this.isConnected,this.shadowRoot,e=>{this.showNavButtonsTemporarily(2e3),e===`previous`?this.goToPreviousPage():this.goToNextPage()},this.keyNavState)};handleMouseDown=e=>{let t=He(e,K(e));this.mouseStartX=t.mouseStartX,this.mouseStartY=t.mouseStartY,this.mouseStartTime=t.mouseStartTime,this.isMouseDown=t.isMouseDown};handleMouseUp=e=>{let t=window.getSelection(),n=!!(t&&t.toString().length>0),r=We(e,{mouseStartX:this.mouseStartX,mouseStartY:this.mouseStartY,mouseStartTime:this.mouseStartTime,isMouseDown:this.isMouseDown},K(e),n);this.isMouseDown=!1,r&&(this.showNavButtonsTemporarily(2e3),r===`next`?this.goToNextPage():this.goToPreviousPage())};handleTouchEnd=e=>{let t=qe(e,{touchStartX:this.touchStartX,touchStartY:this.touchStartY,touchStartTime:this.touchStartTime},K(e));t&&(this.showNavButtonsTemporarily(2e3),t===`next`?this.goToNextPage():this.goToPreviousPage()),this.touchStartTime=0};handleTouchStart=e=>{let t=Je(e,K(e));t&&(this.touchStartX=t.touchStartX,this.touchStartY=t.touchStartY,this.touchStartTime=t.touchStartTime)};handleVisibilityChange=()=>{let e=Ye(document.hidden,this.isConnected,this.autoRefreshTimer!==null);e===`render-and-timer`?(this.renderSelectedPage(),this.setupAutoRefreshTimer()):e===`clear-timer`&&this.autoRefreshTimer!==null&&(clearInterval(this.autoRefreshTimer),this.autoRefreshTimer=null)};handleWindowFocus=()=>{Xe(document.hidden,this.isConnected)&&this.renderSelectedPage()};navigateToPage(e){(typeof E.isPageAllowed!=`function`||E.isPageAllowed(e.path,e.groupId))&&(this.selectedPage=e,this.showNavButtonsTemporarily(2500),this.announcePageChange(e),document.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`pages`,groupId:e.groupId,path:e.path},bubbles:!0,composed:!0})))}renderPageList(e,t){let n=this.shadowRoot;if(!n)return;let r=n.querySelector(`[data-pages-status]`);r instanceof HTMLElement&&(r.textContent=e.length===1?`1 saved page`:`${e.length} saved pages`);let i=n.querySelector(`.pages__remove-all-btn`);i&&i.toggleAttribute(`disabled`,e.length===0);let a=n.querySelector(`[data-pages-dropdown-selected]`);a instanceof HTMLElement&&(a.textContent=this.selectedPage?this.selectedPage.path:`Select a page...`);let o=n.querySelectorAll(`[data-pages-list]`);if(o.length===0)return;o.forEach(e=>{e instanceof HTMLElement&&e.replaceChildren()});let s=n.querySelector(`[data-pages-prev]`),c=n.querySelector(`[data-pages-next]`),l=n.querySelector(`shadow-claw-page-header`),u=this.pageFrontmatter.get();if(l){if(u&&u.title){if(this.selectedPage){let e=y(f({page:`pages`,groupId:this.selectedPage.groupId,path:this.selectedPage.path})),t=e;if(typeof window<`u`&&window.location?.origin)try{t=new URL(e,window.location.origin).href}catch{}l.setAttribute(`page-title`,`<a href="${t}">${u.title}</a>`),l.setAttribute(`title`,u.title)}else l.setAttribute(`page-title`,u.title),l.setAttribute(`title`,u.title)}else l.setAttribute(`page-title`,`Pages`),l.setAttribute(`title`,`Pages`)}if(typeof document<`u`){let e=ne(),t=u?.title||(this.selectedPage?``:void 0);document.title=Te({pageTitle:t,siteTitle:e.siteTitle,separator:e.separator,titleTemplate:e.titleTemplate,isHome:!this.selectedPage})}if(s instanceof HTMLButtonElement&&c instanceof HTMLButtonElement){let{isPrevDisabled:t,isNextDisabled:n}=ke(G(this.selectedPage,e),e.length);s.disabled=t,s.hidden=t,c.disabled=n,c.hidden=n}if(e.length===0)return;let d=new Map(t.map(e=>[e.groupId,e.name])),p=Fe(e);o.forEach(t=>{if(!(t instanceof HTMLElement))return;let n=document.createDocumentFragment();for(let[r,i]of p){let a=document.createElement(`details`);a.className=`pages__group-details`;let o=`shadow-claw-pages-group-collapsed-${r}`,s=!1;try{s=ee(o)===`true`}catch{}s||(a.open=!0),a.addEventListener(`toggle`,()=>{try{a.open?te(o):w(o,`true`)}catch{}});let c=document.createElement(`summary`);c.className=`pages__group-label`;let l=document.createElement(`span`);l.textContent=d.get(r)||r;let u=document.createElement(`span`);u.className=`pages__group-icon`,u.textContent=`▼`,c.appendChild(l),c.appendChild(u),a.appendChild(c);let f=document.createElement(`div`);f.className=`pages__group-pages`,i.forEach(n=>{let i=n.path,a=e.findIndex(e=>e.path===n.path&&e.groupId===n.groupId),o=document.createElement(`div`);o.className=`pages__list-item`,this.selectedPage&&W(n)===W(this.selectedPage)&&o.classList.add(`active`);let s=document.createElement(`span`);s.className=`pages__drag-handle`,s.setAttribute(`draggable`,`true`),s.title=`Drag to reorder`,s.textContent=`⠿`,s.addEventListener(`dragstart`,e=>{this.draggedPageIndex=a,o.classList.add(`dragging`),e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`)}),o.addEventListener(`dragend`,()=>{this.draggedPageIndex=null,o.classList.remove(`dragging`)}),o.addEventListener(`dragover`,e=>{e.preventDefault(),this.draggedPageIndex!==null&&this.draggedPageIndex!==a&&o.classList.add(`drag-over`)}),o.addEventListener(`dragleave`,()=>{o.classList.remove(`drag-over`)}),o.addEventListener(`drop`,e=>{e.preventDefault(),o.classList.remove(`drag-over`),this.draggedPageIndex!==null&&this.draggedPageIndex!==a&&this.handleReorder(this.draggedPageIndex,a)});let c=E.effectiveDefaultPage,l=c&&c.path===n.path&&c.groupId===n.groupId,u=document.createElement(`button`);u.type=`button`,u.className=`pages__select`,u.title=`Open ${i}`;let p=document.createElement(`span`);p.className=`pages__list-path`,p.textContent=i,u.appendChild(p),u.addEventListener(`click`,()=>{this.selectedPage=n,this.renderPageList(E.pages,E.groups),this.renderSelectedPage(),this.sidebarOpen=!1;let e=t.closest(`details`);e&&e.removeAttribute(`open`),document.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`pages`,groupId:n.groupId,path:n.path},bubbles:!0,composed:!0}))});let m=document.createElement(`button`);m.className=`pages__edit`,m.type=`button`,m.title=`Edit in file editor`,m.setAttribute(`aria-label`,`Edit ${i} in file editor`),m.textContent=`✏️`,m.addEventListener(`click`,async e=>{if(e.stopPropagation(),this.db)try{await Se.openFile(this.db,i,r)}catch(e){let t=e instanceof Error?e.message:String(e);D(`Failed to edit file: ${t}`,4500)}});let h=document.createElement(`button`);if(h.className=`pages__remove`,h.type=`button`,h.title=`Remove from Pages`,h.setAttribute(`aria-label`,`Remove ${i} from Pages in ${d.get(r)||r}`),h.textContent=`✕`,h.addEventListener(`click`,async e=>{if(e.stopPropagation(),this.db&&await et({title:`Remove Page`,message:`Are you sure you want to remove this page from Pages?\n\n${i}`,confirmLabel:`Remove`,cancelLabel:`Cancel`}))try{await E.removePage(this.db,i,r),se(`Removed ${i} from Pages`,2400)}catch(e){let t=e instanceof Error?e.message:String(e);D(`Failed to remove page: ${t}`,4500)}}),o.appendChild(s),l){let e=document.createElement(`span`);e.className=`pages__default-btn is-default`,e.title=`Default page`,e.textContent=`⭐`,o.appendChild(e)}o.appendChild(u),o.appendChild(m),o.appendChild(h),f.appendChild(o)}),a.appendChild(f),n.appendChild(a)}t.appendChild(n)})}rewriteWorkspacePreviewHtml(e,t){let n=this.selectedPage?.groupId||E.activeGroupId;return V(e,t,y(h(n,t)),n,window.location.origin)}get selectedPage(){return E.activePinnedPage}set selectedPage(e){W(e)!==W(this.selectedPage)&&(this.db?E.setActivePinnedPage(this.db,e):E._activePinnedPage.set(e),e&&this.announcePageChange(e),this.renderPageList(E.pages,E.groups),this.renderSelectedPage())}setupEffects(){this.addCleanup(N(()=>{let e=ae.declarativeTools;this.broadcastProxy&&e.length>0&&this.broadcastProxy.registerChannelsFromTools(e)})),this.addCleanup(N(()=>{let e=E.pages,t=E.groups;this.renderPageList(e,t)})),this.addCleanup(N(()=>{let e=E.pages,t=E.activePinnedPage;e.length===0?t!==null&&(this.selectedPage=null):t?e.some(e=>W(e)===W(t))||typeof E.isPageAllowed==`function`&&!E.isPageAllowed(t.path,t.groupId)&&(this.selectedPage=E.effectiveDefaultPage||e[0]):this.selectedPage=E.effectiveDefaultPage||e[0],this.routingReady&&this.renderSelectedPage()}))}showNavButtonsTemporarily(e=2500){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`.pages__viewer`);n instanceof HTMLElement&&n.classList.add(`pages__viewer--nav-visible`),this.navFadeTimer!==null&&clearTimeout(this.navFadeTimer),this.navFadeTimer=setTimeout(()=>{this.navFadeTimer=null,n instanceof HTMLElement&&n.classList.remove(`pages__viewer--nav-visible`)},e)}toggleSidebar(e){this.sidebarOpen=ot({root:this.shadowRoot,currentOpen:this.sidebarOpen,force:e})}async buildHtmlPageSrcdoc(e,t,n=``){return await Oe({content:e,filePath:t,searchParams:n,groupId:this.selectedPage?.groupId||E.activeGroupId,origin:typeof window<`u`?window.location?.origin:``,resolveRelativeImagesInHtmlFn:(e,t,n)=>this.resolveRelativeImagesInHtml(e,t,n)})}async handleRemoveAll(){let e=this.shadowRoot?.querySelector(`.pages__remove-all-btn`);try{e?.toggleAttribute(`disabled`,!0),e&&(e.textContent=`⏳`),await Ae(this.db,e=>et(e))&&se(`Removed all pages from Pages`,2400)}catch(e){let t=e instanceof Error?e.message:String(e);D(`Failed to remove all pages: ${t}`,4500),console.error(`Remove all pages error:`,e)}finally{e?.toggleAttribute(`disabled`,!1),e&&(e.textContent=`🗑️ Remove All`)}}async handleReorder(e,t){let n=await Ke({db:this.db,currentPages:E.pages,fromIndex:e,toIndex:t});n.movedToFirst&&(this.selectedPage=n.movedToFirst,this.renderSelectedPage(),document.dispatchEvent(new CustomEvent(`shadow-claw-navigate`,{detail:{page:`pages`,groupId:n.movedToFirst.groupId,path:n.movedToFirst.path},bubbles:!0,composed:!0})))}async renderSelectedPage(){let e=this.shadowRoot;if(!e)return;this.ensureThemeStylesheet(),this.db||=await b();let t=e.querySelector(`[data-pages-empty]`),r=e.querySelector(`[data-pages-rendered]`);if(!(t instanceof HTMLElement)||!(r instanceof HTMLElement))return;let i=this.selectedPage;if(!this.db||!i||typeof E.isPageAllowed==`function`&&!E.isPageAllowed(i.path,i.groupId)){this.renderedKey=null,this.renderedContent=null,this.renderedFrontmatterToggle=null,t.hidden=!1,r.hidden=!0,r.textContent=``,this.pageFrontmatter.set(null),Y(e);return}let o=++this.renderToken,u=`${i.groupId}:${i.path}`,d=q(i.path)&&Ze(i.path,this.pageFrontmatter.get()),f=J(i.path)||q(i.path)&&!d;if(this.renderedKey===u&&this.dsdInitialPath&&$(this.dsdInitialPath,i.path)&&f&&r.children.length>0&&!r.hidden)this.showNavButtonsTemporarily(2500);else if(!this.renderedKey&&this.dsdInitialPath&&$(this.dsdInitialPath,i.path)&&r.children.length>0&&!r.hidden&&f)this.renderedKey=u,t.hidden=!0,r.hidden=!1,this.renderedFrontmatterToggle=null,Y(e),this.showNavButtonsTemporarily(2500),(async()=>{try{let e;try{e=await ie(this.db,i.groupId,i.path)}catch{let t=await T(i.path);if(typeof t==`string`)e=t;else return}if(o===this.renderToken){this.renderedContent=e;let t=k(e);if(Object.keys(t.data).length>0&&this.pageFrontmatter.set(t.data),J(i.path)){let e=await X(this.db,v.MARKDOWN_FRONTMATTER_PAGES);this.renderedFrontmatterToggle=e,await this.resolveMarkdownImages(r,i.groupId,i.path)}}}catch{}})();else try{let u;try{u=await ie(this.db,i.groupId,i.path)}catch(e){try{let t=await T(i.path);if(typeof t==`string`)u=t,Promise.resolve(oe(this.db,i.groupId,i.path,u)).catch(()=>{});else throw e}catch{throw e}}if(o!==this.renderToken)return;t.hidden=!0;let d=`${i.groupId}:${i.path}`,f=k(u),p=Object.keys(f.data).length>0?f.data:null,m=this.pageFrontmatter.get();JSON.stringify(m)!==JSON.stringify(p)&&this.pageFrontmatter.set(p);let g=Ze(i.path,p);if(!this.renderedKey&&this.dsdInitialPath&&$(this.dsdInitialPath,i.path)&&r.children.length>0&&!r.hidden&&(J(i.path)||q(i.path)&&!g)){if(this.renderedKey=d,this.renderedContent=u,J(i.path)){let e=await X(this.db,v.MARKDOWN_FRONTMATTER_PAGES);this.renderedFrontmatterToggle=e,await this.resolveMarkdownImages(r,i.groupId,i.path)}if(Y(e),this.showNavButtonsTemporarily(2500),q(i.path)){let e=c().filter(e=>(e.global===!0||e.autoload===!0)&&e.hasInit);await Promise.all(e.map(async e=>{let t=e.src.startsWith(`http://`)||e.src.startsWith(`https://`)||e.src.startsWith(`//`),i=t?e.src:y(e.src.startsWith(`/`)?e.src:`/${e.src.replace(/^pages\/main\//,``)}`),a=t?e.src:new URL(i,window.location.origin).href;try{await n(i)}catch{}try{let e=await import(
|
|
667
667
|
/* @vite-ignore */
|
|
668
|
-
a);if(typeof e?.cleanup==`function`)try{await e.cleanup()}catch{}typeof e?.init==`function`&&await e.init(r)}catch(t){console.error(`[ShadowClaw] Error executing init for `+e.src,t)}}))}return}if(q(i.path)){if(!
|
|
668
|
+
a);if(typeof e?.cleanup==`function`)try{await e.cleanup()}catch{}typeof e?.init==`function`&&await e.init(r)}catch(t){console.error(`[ShadowClaw] Error executing init for `+e.src,t)}}))}return}if(q(i.path)){if(!g){let t=!!(this.dsdInitialPath&&$(this.dsdInitialPath,i.path));if(this.renderedKey===d&&this.renderedContent===u&&r.children.length>0&&!r.hidden){if(this.showNavButtonsTemporarily(2500),!window.location.hash){let t=e.querySelector(`.pages__viewer-scroll`);t instanceof HTMLElement&&(typeof t.scrollTo==`function`?t.scrollTo({top:0,behavior:`smooth`}):t.scrollTop=0)}return}Y(e),r.hidden=!1;let a=[],p=/<script\b[^>]*\bsrc=["']([^"']+)["'][^>]*>/gi,m;for(;(m=p.exec(u))!==null;){let e=m[1];e&&l(e)&&a.push(e)}let g=L(c(),{...f?.data||{},scripts:[...Array.isArray(f?.data?.scripts)?f.data.scripts:f?.data?.scripts?[f.data.scripts]:[],...a]},u);if(await Promise.all(g.map(async e=>{let t=e.src.startsWith(`http://`)||e.src.startsWith(`https://`)||e.src.startsWith(`//`)?e.src:y(e.src.startsWith(`/`)?e.src:`/${e.src.replace(/^pages\/main\//,``)}`);try{await n(t)}catch(t){console.warn(`[ShadowClaw] Error loading custom element script ${e.src}:`,t)}})),o!==this.renderToken)return;let _=y(h(i.groupId,i.path)),v=V(f.content,i.path,_,i.groupId,window.location.origin);if(o!==this.renderToken||(t&&this.dsdInitialHtml?r.innerHTML=this.dsdInitialHtml:s(r,v,ut),await this.resolveMarkdownImages(r,i.groupId,i.path),await Promise.all(g.map(async e=>{if(e.hasInit){let t=e.src.startsWith(`http://`)||e.src.startsWith(`https://`)||e.src.startsWith(`//`),n=t?e.src:y(e.src.startsWith(`/`)?e.src:`/${e.src.replace(/^pages\/main\//,``)}`),i=t?e.src:new URL(n,window.location.origin).href;try{let e=await import(
|
|
669
669
|
/* @vite-ignore */
|
|
670
|
-
i);if(typeof e?.cleanup==`function`)try{await e.cleanup()}catch{}typeof e?.init==`function`&&await e.init(r)}catch(t){console.error(`[ShadowClaw] Error executing init for `+e.src,t)}}})),o!==this.renderToken))return;if(this.renderedKey=d,this.renderedContent=u,this.renderedFrontmatterToggle=null,this.showNavButtonsTemporarily(2500),!window.location.hash){let t=e.querySelector(`.pages__viewer-scroll`);t instanceof HTMLElement&&(typeof t.scrollTo==`function`?t.scrollTo(0,0):t.scrollTop=0)}return}if(this.renderedKey===d&&(this.renderedContent===u||this.renderedContent===null)&&e.querySelector(`[data-pages-iframe]`)){this.renderedContent===null&&(this.renderedContent=u),this.showNavButtonsTemporarily(2500);return}let t=this.ensurePreviewIframe(e,r);this.previewFrameWindow=null;let
|
|
670
|
+
i);if(typeof e?.cleanup==`function`)try{await e.cleanup()}catch{}typeof e?.init==`function`&&await e.init(r)}catch(t){console.error(`[ShadowClaw] Error executing init for `+e.src,t)}}})),o!==this.renderToken))return;if(this.renderedKey=d,this.renderedContent=u,this.renderedFrontmatterToggle=null,this.showNavButtonsTemporarily(2500),!window.location.hash){let t=e.querySelector(`.pages__viewer-scroll`);t instanceof HTMLElement&&(typeof t.scrollTo==`function`?t.scrollTo(0,0):t.scrollTop=0)}return}if(this.renderedKey===d&&(this.renderedContent===u||this.renderedContent===null)&&e.querySelector(`[data-pages-iframe]`)){this.renderedContent===null&&(this.renderedContent=u),this.showNavButtonsTemporarily(2500);return}let t=this.ensurePreviewIframe(e,r);this.previewFrameWindow=null;let p=await this.buildHtmlPageSrcdoc(f.content,i.path);if(o!==this.renderToken)return;a(t,p);let m=r.children.length>0&&!r.hidden;if(m&&r.offsetHeight>0&&(t.style.height=`${r.offsetHeight}px`),m&&(we.default===void 0||1)?await new Promise(e=>{let n=!1,i=()=>{n||(n=!0,t.removeEventListener(`load`,i),t.removeEventListener(`error`,i),r.hidden=!0,t.hidden=!1,e())};t.addEventListener(`load`,i,{once:!0}),t.addEventListener(`error`,i,{once:!0}),setTimeout(i,3e3)}):(r.hidden=!0,t.hidden=!1),o!==this.renderToken)return;this.renderedKey=d,this.renderedContent=u,this.renderedFrontmatterToggle=null,this.showNavButtonsTemporarily(2500);return}if(Y(e),J(i.path)){let e=k(u),t=Object.keys(e.data).length>0?e.data:null,a=this.pageFrontmatter.get();JSON.stringify(a)!==JSON.stringify(t)&&this.pageFrontmatter.set(t);let f=await X(this.db,v.MARKDOWN_FRONTMATTER_PAGES);if(this.renderedKey===d&&this.renderedContent===u&&this.renderedFrontmatterToggle===f&&r.children.length>0&&!r.hidden){this.showNavButtonsTemporarily(2500);return}r.hidden=!1;let{renderMarkdown:p}=await import(`./markdown-CDSb5Hrl.js`),m=await p(u,{renderFrontmatter:f});if(o!==this.renderToken)return;let g=[],_=/<script\b[^>]*\bsrc=["']([^"']+)["'][^>]*>/gi,b;for(;(b=_.exec(u))!==null;){let e=b[1];e&&l(e)&&g.push(e)}let x=L(c(),{...e?.data||{},scripts:[...Array.isArray(e?.data?.scripts)?e.data.scripts:e?.data?.scripts?[e.data.scripts]:[],...g]},u);if(await Promise.all(x.map(async e=>{try{if(await n(e.src),e.hasInit)try{let t=await import(
|
|
671
671
|
/* @vite-ignore */
|
|
672
|
-
e.src);typeof t?.init==`function`&&await t.init()}catch(t){console.error(`[ShadowClaw] Error executing init for `+e.src,t)}}catch(t){console.warn(`[ShadowClaw] Error loading custom element script ${e.src}:`,t)}})),o!==this.renderToken)return;let S=h(
|
|
672
|
+
e.src);typeof t?.init==`function`&&await t.init()}catch(t){console.error(`[ShadowClaw] Error executing init for `+e.src,t)}}catch(t){console.warn(`[ShadowClaw] Error loading custom element script ${e.src}:`,t)}})),o!==this.renderToken)return;let S=y(h(i.groupId,i.path)),C=V(m,i.path,S,i.groupId,window.location.origin);if(o!==this.renderToken||(s(r,C,ut),await this.resolveMarkdownImages(r,i.groupId,i.path),o!==this.renderToken))return;this.renderedKey=d,this.renderedContent=u,this.renderedFrontmatterToggle=f,this.showNavButtonsTemporarily(2500);return}if(this.renderedKey===d&&this.renderedContent===u&&!r.hidden){this.showNavButtonsTemporarily(2500);return}if(o!==this.renderToken)return;r.hidden=!1,r.textContent=u,this.renderedKey=d,this.renderedContent=u,this.renderedFrontmatterToggle=null,this.pageFrontmatter.set(null),this.showNavButtonsTemporarily(2500)}catch(n){this.renderedKey=null,this.renderedContent=null,this.renderedFrontmatterToggle=null,t.hidden=!1,r.hidden=!0,r.textContent=``,this.pageFrontmatter.set(null),Y(e);let a=n instanceof Error?n.message:String(n);D(`Failed to load page ${i.path}: ${a}`,5e3)}}async resolveMarkdownImages(e,t,n){await rt({container:e,groupId:t,filePath:n,groups:Array.isArray(E.groups)?E.groups:[],readImageAsDataUrlFn:(e,t)=>$e({db:this.db,groupId:e,workspacePath:t})})}async resolveRelativeImagesInHtml(e,t,n){if(!e)return e;let r=new DOMParser().parseFromString(e,`text/html`);return await this.resolveMarkdownImages(r.body,n,t),r.body.innerHTML}async setupAutoRefreshTimer(){if(this.autoRefreshTimer!==null&&(clearInterval(this.autoRefreshTimer),this.autoRefreshTimer=null),!this.db)return;let e=await Pe(this.db,x);this.autoRefreshIntervalSec=e,it(e,document.hidden,this.isConnected)&&(this.autoRefreshTimer=setInterval(()=>{it(e,document.hidden,this.isConnected)&&this.renderSelectedPage()},e*1e3))}ensurePreviewIframe(e,t){return Ne({root:e,rendered:t,selectedPath:this.selectedPage?.path,onIframeLoad:e=>{this.previewFrameWindow=e,this.syncIframeTheme()}})}syncIframeTheme(){at(this.previewFrameWindow)}ensureThemeStylesheet(){let e=this.shadowRoot;if(!e)return;if(!e.querySelector(`style[data-theme-style]`)&&typeof document<`u`){let t=re(this),n=`shadow-claw-theme`;if(t&&typeof t==`object`){let e=t.theme?.styleElement;typeof e==`string`&&e.trim()&&(n=e.trim())}let r=document.getElementById(n)||document.querySelector(`style[data-shadow-claw-theme]`);if(r?.textContent){let t=document.createElement(`style`);t.setAttribute(`data-theme-style`,`true`),t.textContent=r.textContent,e.appendChild(t)}}if(e.querySelector(`link[data-theme-stylesheet]`))return;let t=j();if(!t)return;let n=/href="([^"]+)"/i.exec(t);if(n&&n[1]){let t=document.createElement(`link`);t.rel=`stylesheet`,t.setAttribute(`data-theme-stylesheet`,`true`),t.href=n[1],e.appendChild(t)}}async reloadPreviewWithSearchParams(e){if(!this.selectedPage||!this.renderedContent)return;let t=this.shadowRoot,n=t?.querySelector(`[data-pages-rendered]`)||t?.querySelector(`#rendered`);if(!t||!n)return;let r=k(this.renderedContent),i=this.ensurePreviewIframe(t,n);i.hidden=!1,this.previewFrameWindow=null,a(i,await this.buildHtmlPageSrcdoc(r.content,this.selectedPage.path,e))}};customElements.get(dt)||customElements.define(dt,ft);export{ft as ShadowClawPages};
|