@opensesame-labs/web-pwa 0.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. package/README.md +5 -0
  2. package/bin/serve.mjs +60 -0
  3. package/dist/404.html +35 -0
  4. package/dist/about.html +37 -0
  5. package/dist/assets/AmbientAuthPanel-CwFZygJY.js +1 -0
  6. package/dist/assets/AppShell-OiN-7dB4.css +1 -0
  7. package/dist/assets/AppShell-xqEu_Cfz.js +1 -0
  8. package/dist/assets/ApproveScreen-Dj995x0T.js +1 -0
  9. package/dist/assets/BackupEnableSwitch-DwKTWzBG.js +1 -0
  10. package/dist/assets/CoachHud-9Bqu4Gtl.css +1 -0
  11. package/dist/assets/CoachHud-DHqFf7ez.js +1 -0
  12. package/dist/assets/Crumbs-BQsauYj_.js +1 -0
  13. package/dist/assets/DraftSuggestions-DT51r14S.js +2 -0
  14. package/dist/assets/DraftSuggestions-DuLxCyqM.css +1 -0
  15. package/dist/assets/EmptyTip-DnxQjLsP.js +1 -0
  16. package/dist/assets/FeatureSections-BG-JsWID.js +1 -0
  17. package/dist/assets/FormatHintMatch-QX0JkGnd.js +1 -0
  18. package/dist/assets/HealthPanel-DXnPgdo5.js +1 -0
  19. package/dist/assets/IdentityConnectionSignIn-Bg53RjtJ.js +2 -0
  20. package/dist/assets/InteractionScreen-BCh2d-a4.js +1 -0
  21. package/dist/assets/InvokeScreen-C-kFFYVF.js +1 -0
  22. package/dist/assets/InvokeScreen-CsvSkues.css +1 -0
  23. package/dist/assets/ItemDetail-DCzWiS4b.js +1 -0
  24. package/dist/assets/ItemEditor-BQp0D0PB.js +1 -0
  25. package/dist/assets/KeybindingsPanels-Buh32SBq.css +1 -0
  26. package/dist/assets/KeybindingsPanels-CAhCFduu.js +1 -0
  27. package/dist/assets/MethodPicker-CqQTyAaT.js +1 -0
  28. package/dist/assets/MfaStep-DvSV4q5P.js +1 -0
  29. package/dist/assets/OpenFileKey-DKFq5mOf.js +1 -0
  30. package/dist/assets/PageTreeBranch-OgsaK684.js +1 -0
  31. package/dist/assets/SaveRequestScreen-exu7HwhA.js +1 -0
  32. package/dist/assets/SettingsSection-BHTAhGaz.css +1 -0
  33. package/dist/assets/SettingsSection-BfxiCHWn.js +2 -0
  34. package/dist/assets/SiopAuthorize-D_OIu8gb.js +1 -0
  35. package/dist/assets/SupportLauncher-DgUajogl.css +1 -0
  36. package/dist/assets/SupportLauncher-DlkkaWxf.js +2 -0
  37. package/dist/assets/SupportPanel-W7lTTCHo.js +1 -0
  38. package/dist/assets/VaultSection-BUcbIjl5.css +1 -0
  39. package/dist/assets/VaultSection-DuzGVD_1.js +1 -0
  40. package/dist/assets/WalletSection-C4CTvIi9.js +1 -0
  41. package/dist/assets/agent-ag-ui-DRbKYcn6.js +2 -0
  42. package/dist/assets/agent-boundary-D0s3Xear.js +2 -0
  43. package/dist/assets/agent-prompt-api-BiYrmT5D.js +1 -0
  44. package/dist/assets/agent-provider-BiJcKH7o.js +1 -0
  45. package/dist/assets/binary-encoding-D9rJ9tvs.js +1 -0
  46. package/dist/assets/bitwarden-native.worker-CFoAF-yw.js +1 -0
  47. package/dist/assets/bitwarden-secrets.worker-BfAQLREw.js +1 -0
  48. package/dist/assets/bitwarden_wasm_bg.wasm-B2_HqYUA.gz +0 -0
  49. package/dist/assets/browser-pslP6-1t.js +1 -0
  50. package/dist/assets/bucket-boot-4cPKWVva.js +1 -0
  51. package/dist/assets/bucket-saved-vQCiVvN_.js +1 -0
  52. package/dist/assets/byo-B-SNpHiS.js +1 -0
  53. package/dist/assets/byo-CDLRauwG.css +1 -0
  54. package/dist/assets/canary-owner-effects-CY2GR4d-.js +1 -0
  55. package/dist/assets/cap-access.authority-D-B2rtcO.js +1 -0
  56. package/dist/assets/cap-agents.surrogate-credentials-7eqyWZfT.js +1 -0
  57. package/dist/assets/cap-agents.webmcp-Bve0G9t3.js +2 -0
  58. package/dist/assets/cap-ai.password-reset-rh9CIhu-.js +1 -0
  59. package/dist/assets/cap-connectors.external-dKuiKE5J.js +1 -0
  60. package/dist/assets/cap-enterprise.ca-administration-CirJdAWC.js +1 -0
  61. package/dist/assets/cap-enterprise.directory-provisioning-ixTSdLjk.js +1 -0
  62. package/dist/assets/cap-identity.ambient-sso-Bfz5okEX.js +1 -0
  63. package/dist/assets/cap-identity.claim-different-link-C0NXeZQE.js +1 -0
  64. package/dist/assets/cap-identity.federation-Di6GjTkh.js +1 -0
  65. package/dist/assets/cap-identity.local-iam-DdhiDQdb.js +2 -0
  66. package/dist/assets/cap-identity.siop-C80liHvH.js +1 -0
  67. package/dist/assets/cap-networking.tailnet-c5h7F7pL.js +1 -0
  68. package/dist/assets/cap-networking.tailnet-devices-BeZz-plo.js +1 -0
  69. package/dist/assets/cap-notifications.local-QwuLGxJM.js +1 -0
  70. package/dist/assets/cap-notifications.routing-CF-Wp35c.js +1 -0
  71. package/dist/assets/cap-notifications.web-push-DAddcIp-.js +1 -0
  72. package/dist/assets/cap-sharing.household-BeYPmwj5.js +1 -0
  73. package/dist/assets/cap-sharing.live-BkP10O4Q.js +2 -0
  74. package/dist/assets/cap-sharing.relay-Clx_tuEX.js +1 -0
  75. package/dist/assets/cap-sharing.trusted-contacts-D7bWujCh.js +1 -0
  76. package/dist/assets/cap-storage.encrypted-search-PLxhoql0.js +1 -0
  77. package/dist/assets/cap-support.local-ai-3PHedffw.js +1 -0
  78. package/dist/assets/cap-support.remote-ai-CmtCh9L6.js +1 -0
  79. package/dist/assets/cap-telemetry.external-BF6Csk9L.js +1 -0
  80. package/dist/assets/cap-vault.browser-autofill-CdS4F8Xw.js +1 -0
  81. package/dist/assets/cap-vault.certificate-records-Br6SdLtm.js +1 -0
  82. package/dist/assets/cap-vault.derived-records-CJXFAVNG.js +1 -0
  83. package/dist/assets/cap-vault.environments-CfpmRCF-.js +1 -0
  84. package/dist/assets/cap-vault.passkey-records-kB9UoKJ4.js +1 -0
  85. package/dist/assets/cap-vault.security-checks-BXzOBUjO.js +1 -0
  86. package/dist/assets/cap-wallet.spending-BGifVwmx.js +1 -0
  87. package/dist/assets/catalog-Y21H0gVA.js +1 -0
  88. package/dist/assets/certification_request-yoK4-cIl.js +1 -0
  89. package/dist/assets/certs-CDCfMuEi.js +1 -0
  90. package/dist/assets/cli-app-integration-crypto-TwyER0q4.js +2 -0
  91. package/dist/assets/commonjs-runtime-R6OqCcd0.js +1 -0
  92. package/dist/assets/compartment-guard-D3FuKM8N.js +1 -0
  93. package/dist/assets/configured-runtime-qg0cjMOO.js +1 -0
  94. package/dist/assets/connect-plan-ClXbb_FT.js +1 -0
  95. package/dist/assets/connections-CNmhCNAV.js +1 -0
  96. package/dist/assets/connectivity-monitor-B0ueE5HQ.js +1 -0
  97. package/dist/assets/connector-directory-D47kqlDJ.css +1 -0
  98. package/dist/assets/connector-directory-gjDOqgWh.js +1 -0
  99. package/dist/assets/connector-marks-BsMcGRbV.js +1 -0
  100. package/dist/assets/connector-settings-CBJ6GX5X.js +1 -0
  101. package/dist/assets/consent-CcqmRPoB.js +1 -0
  102. package/dist/assets/context-CL4-cwvA.js +1 -0
  103. package/dist/assets/context-DQQZvpeW.js +1 -0
  104. package/dist/assets/device-identity-carry-XMZRU4oW.js +1 -0
  105. package/dist/assets/device-identity-host-Bc5g7ie-.js +1 -0
  106. package/dist/assets/device-inbox-BoaNI30L.js +1 -0
  107. package/dist/assets/directory-panels-DNhzC0ld.js +1 -0
  108. package/dist/assets/directory-panels-DiZjkKtX.css +1 -0
  109. package/dist/assets/directory-signin-model-BfxENbC3.js +1 -0
  110. package/dist/assets/drop-open-BjgdLxWM.js +2 -0
  111. package/dist/assets/entra-instances-NyEKYI5c.js +1 -0
  112. package/dist/assets/features-9FeW22VH.js +1 -0
  113. package/dist/assets/federation-configured-restoration-DWAXgzcz.js +1 -0
  114. package/dist/assets/files-Bc2ZE3YH.js +1 -0
  115. package/dist/assets/gate-seat-D6oRkKUH.css +1 -0
  116. package/dist/assets/gate-seat-DHBrLaMG.js +2 -0
  117. package/dist/assets/github-app-local-B-4pPsY4.js +1 -0
  118. package/dist/assets/hosted-identity-rail-CUw0rn2T.css +1 -0
  119. package/dist/assets/hosted-identity-rail-Dv05NPNo.js +1 -0
  120. package/dist/assets/hosted-model-authority-CcNPE44H.js +1 -0
  121. package/dist/assets/hosted-model-protocol-B8j_voAG.js +1 -0
  122. package/dist/assets/iam-0IMZ11b6.css +1 -0
  123. package/dist/assets/iam-zBfzStfy.js +1 -0
  124. package/dist/assets/identity-BVf8yWa4.js +1 -0
  125. package/dist/assets/identity-DrfyABP-.css +1 -0
  126. package/dist/assets/identity-view-paths-Bi1yigZk.js +1 -0
  127. package/dist/assets/idp-presets-B1M-P0Ek.js +1 -0
  128. package/dist/assets/index-B6LVfIPY.js +1 -0
  129. package/dist/assets/index-BDSP-mCB.js +1 -0
  130. package/dist/assets/index-DGpAAq0f.js +1 -0
  131. package/dist/assets/index-browser-Cl3nb4Uk.js +1 -0
  132. package/dist/assets/install-DvNMSThj.js +1 -0
  133. package/dist/assets/item-contributions-BNmtlrGT.js +2 -0
  134. package/dist/assets/item-contributions-DNpnHRuL.css +1 -0
  135. package/dist/assets/item-secret-update-BGxSkyWF.js +1 -0
  136. package/dist/assets/item-type-pack-account-CoqotdBn.js +1 -0
  137. package/dist/assets/item-type-pack-address-CuEhIEN8.js +1 -0
  138. package/dist/assets/item-type-pack-api-credential-2taJJvyo.js +1 -0
  139. package/dist/assets/item-type-pack-api-key-BtsbWNqK.js +1 -0
  140. package/dist/assets/item-type-pack-authenticator-C10FbI_v.js +1 -0
  141. package/dist/assets/item-type-pack-bank-account-C7tahN_l.js +1 -0
  142. package/dist/assets/item-type-pack-card-DI2dXCYa.js +1 -0
  143. package/dist/assets/item-type-pack-contact-C8PeT6f9.js +1 -0
  144. package/dist/assets/item-type-pack-crypto-wallet-Sfg8ziqc.js +1 -0
  145. package/dist/assets/item-type-pack-database-Dy7ScLs9.js +1 -0
  146. package/dist/assets/item-type-pack-drivers-license-vMew977g.js +1 -0
  147. package/dist/assets/item-type-pack-health-insurance-DUixDMZj.js +1 -0
  148. package/dist/assets/item-type-pack-identity-document-FU9zx609.js +1 -0
  149. package/dist/assets/item-type-pack-membership-D_NYNr9q.js +1 -0
  150. package/dist/assets/item-type-pack-note-B3DY9bUR.js +1 -0
  151. package/dist/assets/item-type-pack-oauth-client-DMhUuM7e.js +1 -0
  152. package/dist/assets/item-type-pack-passport-B8VaXkBH.js +1 -0
  153. package/dist/assets/item-type-pack-password-D--bKPPZ.js +1 -0
  154. package/dist/assets/item-type-pack-server-BwQMhxjI.js +1 -0
  155. package/dist/assets/item-type-pack-software-license-CG2Bi2-4.js +1 -0
  156. package/dist/assets/item-type-pack-ssh-key-Cf4KqR5v.js +1 -0
  157. package/dist/assets/item-type-pack-token-Cfp58zHW.js +1 -0
  158. package/dist/assets/item-type-pack-wifi-DlJBEYLH.js +1 -0
  159. package/dist/assets/kdbxweb-Deb8D9Lv.js +1 -0
  160. package/dist/assets/linearRedirect-Cac5chv5.js +1 -0
  161. package/dist/assets/listing-page-B-c8QQVp.js +1 -0
  162. package/dist/assets/live-mqtt-BaSKU8QX.js +1 -0
  163. package/dist/assets/live-nats-CsIvuPj3.js +1 -0
  164. package/dist/assets/live-nostr-BfmabjiE.js +1 -0
  165. package/dist/assets/live-transport-files-DQCGPnPz.js +1 -0
  166. package/dist/assets/live-transport-files-Zxaw-sAI.css +1 -0
  167. package/dist/assets/local-ai-sdk-entry-Dq4Sm2_e.js +1 -0
  168. package/dist/assets/local-applications-rigvedS6.js +2 -0
  169. package/dist/assets/local-directory-bootstrap-NwIMPDrD.js +1 -0
  170. package/dist/assets/local-notifications-files-CWGvPHb8.js +1 -0
  171. package/dist/assets/local-share-grants-approvals-C89RIn08.js +1 -0
  172. package/dist/assets/local-vault-sessions-CGv9AsFj.js +1 -0
  173. package/dist/assets/main-BKK5N8Uh.css +1 -0
  174. package/dist/assets/main-BrkS-iow.js +2 -0
  175. package/dist/assets/merge-C8VYouYu.js +1 -0
  176. package/dist/assets/model-key-state-NiiWojtT.js +1 -0
  177. package/dist/assets/model-provider-B6oAnQX9.js +1 -0
  178. package/dist/assets/msalRedirect-CsZOSL-b.js +1 -0
  179. package/dist/assets/native-auth-return-BTXjvSvx.js +1 -0
  180. package/dist/assets/native-catalog-status-INsDvLpU.js +1 -0
  181. package/dist/assets/native-google-capability-BVj1mBPb.js +1 -0
  182. package/dist/assets/native-identity-admission-C4ZFillF.js +1 -0
  183. package/dist/assets/native-implicit-session-B9CuYTBA.js +1 -0
  184. package/dist/assets/native-oauth-http-BDqv664F.js +1 -0
  185. package/dist/assets/native-oauth-resource-runtime-D9u6_l-d.js +1 -0
  186. package/dist/assets/native-saml-DgVO7f2_.js +1 -0
  187. package/dist/assets/native-worker-bitwarden-native-contract-4175b124-DCuX5Y-I.js +1 -0
  188. package/dist/assets/native-worker-bitwarden-native-network-protocol-2ec12c2c-DdlqONg5.js +1 -0
  189. package/dist/assets/native-worker-bitwarden-native-worker-protocol-f491b626-C1Dz2Mxy.js +1 -0
  190. package/dist/assets/native-worker-bitwarden-worker-protocol-c9bedea4-CgZDhS6p.js +1 -0
  191. package/dist/assets/native-worker-bytes-a0e18d71-DFmKzL3P.js +1 -0
  192. package/dist/assets/native-worker-hash-wasm-9cbb16de-Bp4uJJy_.js +1 -0
  193. package/dist/assets/native-worker-levischuck-tiny-cbor-d8381e8f-BEl3rArG.js +1 -0
  194. package/dist/assets/native-worker-noble-ciphers-708367a7-BPuD3lXB.js +1 -0
  195. package/dist/assets/native-worker-noble-hashes-b1a58353-IgGIMWEC.js +1 -0
  196. package/dist/assets/native-worker-wasm-gzip-asset-47456844-DSWTIKdX.js +1 -0
  197. package/dist/assets/native-worker-zod-5c0ed887-B342B6ko.js +1 -0
  198. package/dist/assets/native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js +1 -0
  199. package/dist/assets/nativeConnectorRedirect-Cac5chv5.js +1 -0
  200. package/dist/assets/nativeGoogleConsent-By04fGU0.js +1 -0
  201. package/dist/assets/nativeImplicitRedirect-CSQMi-YW.js +1 -0
  202. package/dist/assets/noble-crypto-Mv8l2A7D.js +1 -0
  203. package/dist/assets/notifications-CJoypYjy.css +1 -0
  204. package/dist/assets/notifications-DlWvurGh.js +1 -0
  205. package/dist/assets/onepassword-artifacts-DnlvryeZ.js +1 -0
  206. package/dist/assets/onepassword-sdk.worker-CcSZlR8e.js +1 -0
  207. package/dist/assets/os-logo-Dhy2KbxY.ttf +0 -0
  208. package/dist/assets/pane-trail-dW-2RSUm.js +1 -0
  209. package/dist/assets/password-workflows-Cmir8qky.js +1 -0
  210. package/dist/assets/payload-CVz3G9cA.js +1 -0
  211. package/dist/assets/peer-trust-CZzPSQ-X.js +1 -0
  212. package/dist/assets/plugin-activation-BLVTpDLX.css +1 -0
  213. package/dist/assets/plugin-activation-B_0fIk_I.js +1 -0
  214. package/dist/assets/portable-drop-CD_3kpqo.js +1 -0
  215. package/dist/assets/post-wire-DZbVz-_e.js +1 -0
  216. package/dist/assets/projection-read-9xClzF-E.js +1 -0
  217. package/dist/assets/react-dom-BwC4eQlG.js +1 -0
  218. package/dist/assets/react-router-XsJY84ug.js +1 -0
  219. package/dist/assets/reflect-metadata-DF0mcVP2.js +1 -0
  220. package/dist/assets/retired-owner-authentication-work-J-86Ved1.js +1 -0
  221. package/dist/assets/rotation-relay-DCS7Aa59.js +1 -0
  222. package/dist/assets/runtime-2tzejM54.js +1 -0
  223. package/dist/assets/runtime-BFa23LKn.css +1 -0
  224. package/dist/assets/runtime-BUihkTjL.js +1 -0
  225. package/dist/assets/runtime-BzHz3H7U.css +1 -0
  226. package/dist/assets/runtime-CXh-BOHA.js +1 -0
  227. package/dist/assets/runtime-CtH6kdhA.js +1 -0
  228. package/dist/assets/runtime-Dfzb5fxj.js +2 -0
  229. package/dist/assets/runtime-_4MyTTJ2.js +1 -0
  230. package/dist/assets/s3-CXe7JlAr.js +1 -0
  231. package/dist/assets/saved-model-agent-Cdn954wf.js +2 -0
  232. package/dist/assets/scroll-renderer-CPup0pR-.css +1 -0
  233. package/dist/assets/scroll-renderer-CPxIcBzQ.js +1 -0
  234. package/dist/assets/seams-DJ_lslby.js +1 -0
  235. package/dist/assets/secret-backend-onepassword-sdk-hhTb3tZb.js +1 -0
  236. package/dist/assets/secret-backends-_-CBukTJ.js +1 -0
  237. package/dist/assets/section-nav-goals-B_N-ZW2I.js +1 -0
  238. package/dist/assets/session-connections-WQ2L1zGG.js +2 -0
  239. package/dist/assets/session-connections-oSO_RMA1.css +1 -0
  240. package/dist/assets/settings-CHnpwTwf.css +1 -0
  241. package/dist/assets/settings-files-NL7VAn-D.css +1 -0
  242. package/dist/assets/settings-files-OnHfWPp_.js +1 -0
  243. package/dist/assets/sha3-Bm70HrE3.js +1 -0
  244. package/dist/assets/shared-Ck7e2FJN.js +1 -0
  245. package/dist/assets/signaling-BgALI1Na.js +1 -0
  246. package/dist/assets/signals-DdOHdr--.js +1 -0
  247. package/dist/assets/support-context-DrcseTKK.js +1 -0
  248. package/dist/assets/tailnet-devices-B4-KR7Lk.css +1 -0
  249. package/dist/assets/tailnet-devices-CRKI2IIc.js +1 -0
  250. package/dist/assets/tailnet-plugin-pairing-DTK4jAlP.js +1 -0
  251. package/dist/assets/tailscale-artifacts-FyY85j_Y.js +1 -0
  252. package/dist/assets/tailscale-node-Bxh73eIz.js +1 -0
  253. package/dist/assets/trusted-contacts-BUPioBSb.css +1 -0
  254. package/dist/assets/trusted-contacts-QkvTYGDn.js +1 -0
  255. package/dist/assets/types-Ctz6L20B.js +1 -0
  256. package/dist/assets/use-access-book-1e-Lb3_j.css +1 -0
  257. package/dist/assets/use-access-book-BusjdJX8.js +2 -0
  258. package/dist/assets/use-integrations-drawn-DYzpglrK.js +1 -0
  259. package/dist/assets/use-password-reset-generate-B11XaeM6.js +2 -0
  260. package/dist/assets/use-password-reset-generate-D7yK7QdU.css +1 -0
  261. package/dist/assets/use-settings-category-Ci1J38pa.css +1 -0
  262. package/dist/assets/use-settings-category-Dy0gsCtF.js +1 -0
  263. package/dist/assets/use-vault-search-C7u00nrc.js +1 -0
  264. package/dist/assets/use-vault-search-Cy48_tAA.css +1 -0
  265. package/dist/assets/useLocalConsent-LY9hCn8F.js +2 -0
  266. package/dist/assets/vault-credential-custody-DpnBb4qo.js +1 -0
  267. package/dist/assets/vault-list-path-Bh2_KZkq.js +1 -0
  268. package/dist/assets/vault-menu-CqO_AStq.js +1 -0
  269. package/dist/assets/vault-ui-seam-BQGS7RR6.js +1 -0
  270. package/dist/assets/vaults-B043odav.js +1 -0
  271. package/dist/assets/vendor-1password-save-bVqbF-cI.js +1 -0
  272. package/dist/assets/vendor-ag-ui-DapcFk1d.js +1 -0
  273. package/dist/assets/vendor-ai-sdk-D8TnA_ou.js +1 -0
  274. package/dist/assets/vendor-msal-D-SCQ_ve.js +1 -0
  275. package/dist/assets/wake-lock-C_y0fQco.js +1 -0
  276. package/dist/assets/webmcp-sdk-Brp7pH5M.js +1 -0
  277. package/dist/assets/website-pattern.worker-CHLdQLlR.js +1 -0
  278. package/dist/auth/linear.html +17 -0
  279. package/dist/auth/native-client.json +17 -0
  280. package/dist/auth/native-connector.html +17 -0
  281. package/dist/auth/native-google.html +29 -0
  282. package/dist/auth/native-implicit.html +18 -0
  283. package/dist/auth/redirect.html +15 -0
  284. package/dist/auth.js +1 -0
  285. package/dist/auth.js.sha384 +1 -0
  286. package/dist/browser-schema-config.js +5 -0
  287. package/dist/capability-distribution.json +108 -0
  288. package/dist/capability-graph.json +1 -0
  289. package/dist/contact.html +37 -0
  290. package/dist/icon-192.png +0 -0
  291. package/dist/icon-512.png +0 -0
  292. package/dist/icon.svg +1 -0
  293. package/dist/index.html +150 -0
  294. package/dist/index.md +22 -0
  295. package/dist/licenses/saml-xml.txt +315 -0
  296. package/dist/llms.txt +35 -0
  297. package/dist/manifest.webmanifest +1 -0
  298. package/dist/onepassword/LICENSE-0.5.0.txt +21 -0
  299. package/dist/onepassword/core-0.5.0-764c359d.mjs +822 -0
  300. package/dist/onepassword/core-0.5.0-7cc0e700.wasm.gz +0 -0
  301. package/dist/os-runtime-config.json +1 -0
  302. package/dist/privacy.html +39 -0
  303. package/dist/release.json +9 -0
  304. package/dist/robots.txt +4 -0
  305. package/dist/save-button.js +220 -0
  306. package/dist/security-profile.json +6 -0
  307. package/dist/siop-metadata.json +39 -0
  308. package/dist/sitemap.xml +9 -0
  309. package/dist/static-auth/1.0.3/opensesame-auth.min.js +1 -0
  310. package/dist/static-auth/1.0.3/opensesame-auth.min.js.sha384 +1 -0
  311. package/dist/static-auth/1.0.4/opensesame-auth.min.js +1 -0
  312. package/dist/static-auth/1.0.4/opensesame-auth.min.js.sha384 +1 -0
  313. package/dist/static-auth/1.0.5/opensesame-auth.min.js +1 -0
  314. package/dist/static-auth/1.0.5/opensesame-auth.min.js.sha384 +1 -0
  315. package/dist/static-auth/manifest.json +24 -0
  316. package/dist/sw-push.js +1 -0
  317. package/dist/sw.js +1 -0
  318. package/dist/tailscale/LICENSE.txt +86 -0
  319. package/dist/tailscale/OPEN-SOURCE-LICENSES.md +109 -0
  320. package/dist/tailscale/go-runtime-3e61b3267aa67a55.js +3 -0
  321. package/dist/tailscale/main-7b2a0868bcb7f638.wasm.gz +0 -0
  322. package/dist/tailscale/native-http-1992487ea59d7d17.js +1 -0
  323. package/package.json +26 -0
@@ -0,0 +1 @@
1
+ import{j as e,r as s}from"./react-dom-BwC4eQlG.js";import{n,q as t,s as a,M as o,t as l,h as r,F as i,N as c,e as u,p as d,v as m,w as p,x as b,y as f,z as h,B as j,L as x,C as k,D as g,o as y,S as v,E as w,H as N,I as _,J as $}from"./pane-trail-dW-2RSUm.js";import{u as C}from"./react-router-XsJY84ug.js";import{dF as S,m as q,n as R,bW as E,ck as M,o as z,v as D,z as K,dG as T,w as F,x as A,dH as L,S as O,a0 as P,y as I,dI as W}from"./main-BrkS-iow.js";import{b as B,r as Q,g as H,a as G,p as Y,e as J,K as U,C as Z,i as V,k as X,c as ee,t as se,d as ne,f as te,u as ae,h as oe,j as le,l as re,m as ie}from"./support-context-DrcseTKK.js";import{S as ce}from"./InvokeScreen-C-kFFYVF.js";import{s as ue,m as de,r as me,k as pe}from"./use-password-reset-generate-B11XaeM6.js";import{n as be,o as fe,p as he,q as je,t as xe,v as ke}from"./gate-seat-DHBrLaMG.js";import{h as ge}from"./listing-page-B-c8QQVp.js";import"./identity-view-paths-Bi1yigZk.js";import"./drop-open-BjgdLxWM.js";import"./vault-ui-seam-BQGS7RR6.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./hosted-model-authority-CcNPE44H.js";import"./model-provider-B6oAnQX9.js";import"./signals-DdOHdr--.js";import"./identity-BVf8yWa4.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./seams-DJ_lslby.js";import"./vault-menu-CqO_AStq.js";import"./MethodPicker-CqQTyAaT.js";import"./vault-list-path-Bh2_KZkq.js";import"./wake-lock-C_y0fQco.js";import"./idp-presets-B1M-P0Ek.js";import"./payload-CVz3G9cA.js";import"./compartment-guard-D3FuKM8N.js";import"./section-nav-goals-B_N-ZW2I.js";import"./vaults-B043odav.js";import"./connectivity-monitor-B0ueE5HQ.js";import"./IdentityConnectionSignIn-Bg53RjtJ.js";import"./federation-configured-restoration-DWAXgzcz.js";import"./entra-instances-NyEKYI5c.js";import"./bucket-saved-vQCiVvN_.js";import"./certs-CDCfMuEi.js";import"./tailscale-artifacts-FyY85j_Y.js";import"./vault-credential-custody-DpnBb4qo.js";import"./native-auth-return-BTXjvSvx.js";import"./scroll-renderer-CPxIcBzQ.js";import"./features-9FeW22VH.js";import"./rotation-relay-DCS7Aa59.js";import"./native-identity-admission-C4ZFillF.js";import"./byo-B-SNpHiS.js";import"./FeatureSections-BG-JsWID.js";import"./iam-zBfzStfy.js";import"./consent-CcqmRPoB.js";import"./directory-signin-model-BfxENbC3.js";const ye={"two-finger-swipe-up":0,"two-finger-swipe-right":90,"two-finger-swipe-down":180,"two-finger-swipe-left":270};function ve(s){return e.jsxs(S,{...s,children:[e.jsx("rect",{x:"8",y:"4.5",width:"8",height:"15",rx:"1.5"}),e.jsx("path",{d:"M4.5 9.5v5M2.5 11v2M19.5 9.5v5M21.5 11v2"})]})}function we({id:s,...n}){return"shake"===s?e.jsx(ve,{...n}):"two-finger-tap"===s?e.jsxs(S,{...n,children:[e.jsx("circle",{cx:"7.5",cy:"12",r:"1.6",fill:"currentColor",stroke:"none"}),e.jsx("circle",{cx:"16.5",cy:"12",r:"1.6",fill:"currentColor",stroke:"none"}),e.jsx("circle",{cx:"7.5",cy:"12",r:"4"}),e.jsx("circle",{cx:"16.5",cy:"12",r:"4"})]}):e.jsx(S,{...n,children:e.jsxs("g",{transform:`rotate(${ye[s]} 12 12)`,children:[e.jsx("circle",{cx:"9.5",cy:"17",r:"1.6",fill:"currentColor",stroke:"none"}),e.jsx("circle",{cx:"14.5",cy:"17",r:"1.6",fill:"currentColor",stroke:"none"}),e.jsx("path",{d:"M12 13V5M8.5 8.5 12 5l3.5 3.5"})]})})}function Ne({row:s,groups:n,state:t,onRefused:a}){const{config:o,save:l}=t,r=function(e,s){return null===e||function(e,s){return s.some(s=>s.options.some(s=>s.id===e))}(e,s)?s:[{id:"unavailable",label:"Not on this plan",options:[{id:e,label:e}]},...s]}(s.target,n),i=s.target??"",c=e=>{const s=l(e);s&&a(s)},u=`Reset ${s.label} to its default`;return e.jsxs("li",{className:"kb-row kb-row--gesture","data-gesture":s.id,"data-changed":s.changed?"":void 0,children:[e.jsxs("span",{className:"kb-gesture",children:[e.jsx("span",{className:"kb-gesture__glyph",children:e.jsx(we,{id:s.id,size:22})}),e.jsxs("span",{className:"kb-row__name",children:[e.jsx("span",{className:"kb-row__label",children:s.label}),e.jsx("code",{className:"kb-row__id",children:s.id})]})]}),e.jsxs("select",{className:"kb-target","aria-label":`${s.label} runs`,title:`${s.label} runs`,value:i,onChange:e=>{const n=e.target.value;c(B(o,s.id,""===n?null:n))},children:[e.jsx("option",{value:"",children:"No action"}),r.map(s=>e.jsx("optgroup",{label:s.label,children:s.options.map(s=>e.jsx("option",{value:s.id,children:s.label},s.id))},s.id))]}),e.jsxs("span",{className:"kb-row__end",children:[s.off?e.jsx(ce,{tone:"idle",label:"Motion is off: a shake does nothing"}):null,s.changed?e.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":u,title:u,"data-resets":"",onClick:()=>c(Q(o,s.id)),children:e.jsx(q,{size:14})}):null]})]})}const _e="Gestures made by moving the phone";function $e({access:s}){if("needs-permission"===s){const s="Allow this site to read the phone's motion";return e.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":s,title:s,"data-allow-motion":"",onClick:()=>{me()},children:e.jsx(ve,{size:14})})}return"denied"===s?e.jsx(ce,{tone:"err",label:"Motion is blocked for this site: allow it in the browser's site settings"}):"granted"===s?e.jsx(R,{size:14}):null}function Ce({state:n}){const t=s.useSyncExternalStore(ue,de,()=>"unsupported");if("unsupported"===t)return null;const a=!1!==n.config.motion,o=a?{...n.config,motion:!1}:function({config:e}){const{motion:s,...n}=e;return n}(n);return e.jsxs("div",{className:"sw kb-single",children:[e.jsx("span",{className:"sw__name",children:"Shake"}),e.jsxs("span",{className:"kb-single__end",children:[a?e.jsx($e,{access:t}):null,e.jsx("button",{type:"button",className:"toggle",role:"switch","aria-checked":a,"aria-label":_e,title:a?_e:"Off: a shake does nothing",onClick:()=>n.save(o)})]})]})}function Se({message:s,n}){return e.jsxs(e.Fragment,{children:[e.jsx(ce,{tone:"err",label:s}),e.jsx("span",{className:"visually-hidden",role:"alert",children:s},n)]})}function qe(){return e.jsxs("section",{className:"kb-group","aria-labelledby":"kb-group-fixed-gestures",children:[e.jsxs("h3",{className:"kb-group__label",id:"kb-group-fixed-gestures",children:[e.jsx(E,{size:12}),"Fixed"]}),e.jsx("ul",{className:"kb-rows",children:i.map(([s,n])=>e.jsxs("li",{className:"kb-row kb-row--fixed",children:[e.jsx("span",{className:"kb-row__name",children:e.jsx("span",{className:"kb-row__label",children:s})}),e.jsx("span",{className:"kb-row__label",children:n}),e.jsx("span",{className:"kb-row__end"})]},s))})]})}function Re({state:i}){const[c,u]=s.useState(null),d=s.useRef(0),m=H(i.config),p=(j=i.config,x=i.commands,[...n.map(e=>({id:e,label:t[e],options:x.filter(s=>s.group===e&&(e=>"nop"!==e.kind&&!e.id.startsWith(l)&&null===r(e.id,x,j.macros))(s)).map(e=>({id:e.id,label:a(e.label)}))})),{id:"macros-yours",label:"Your macros",options:Object.keys(j.macros).sort().map(e=>({id:`${o}${e}`,label:`@${e}`}))}].filter(e=>e.options.length>0)),b=m.some(e=>e.changed)||!1===i.config.motion,f=e=>{d.current+=1,u({message:e,n:d.current})},h="Reset every gesture to its default";var j,x;return e.jsxs("section",{className:"panel kb",id:"settings-gestures",children:[e.jsxs("div",{className:"panel__head",children:[e.jsx("div",{children:e.jsx("h2",{children:"Gestures"})}),e.jsxs("div",{className:"actions",children:[c?e.jsx(Se,{message:c.message,n:c.n}):null,b?e.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":h,title:h,"data-resets":"",onClick:()=>{const e=i.save(G(i.config));e?f(e):u(null)},children:e.jsx(q,{size:14})}):null]})]}),e.jsxs("div",{className:"panel__body",children:[e.jsx(Ce,{state:i}),e.jsxs("section",{className:"kb-group","aria-labelledby":"kb-group-gestures",children:[e.jsx("h3",{className:"kb-group__label",id:"kb-group-gestures",children:"Two fingers and the phone"}),e.jsx("ul",{className:"kb-rows",children:m.map(s=>e.jsx(Ne,{row:s,groups:p,state:i,onRefused:f},s.id))})]}),e.jsx(qe,{})]})]})}const Ee=[{id:"all",label:"every command"},{id:"changed",label:"changed"},{id:"unbound",label:"no key"},{id:"waits",label:"shared prefix"}],Me=[{id:"everywhere",label:"everywhere"},...U.map(e=>({id:e,label:Z[e]}))];function ze(e){return"everywhere"===e?void 0:e}function De(e){return[{scope:void 0,bindings:e.bindings},...U.map(s=>({scope:s,bindings:e.contexts?.[s]??{}}))]}function Ke(e,s){const n=new Set(s.map(e=>e.id)),t=[];for(const{scope:a,bindings:l}of De(e))for(const[e,s]of Object.entries(l))s===c||s.startsWith(o)||n.has(s)||t.push(a?{sequence:e,target:s,scope:a}:{sequence:e,target:s});return t}function Te({sequence:s}){const n=d(s)??[s];return e.jsx(e.Fragment,{children:n.map((s,n)=>e.jsx("kbd",{className:"keycap",children:m(s)},`${n}-${s}`))})}function Fe({sequence:n,holder:t,commands:a,canSwap:o,problem:l,onSwap:r,onReplace:i,onCancel:c}){const u=s.useRef(null);s.useEffect(()=>{u.current?.focus()},[]);const m=p(d(n)??[n]),b=se(t,a);return e.jsxs("fieldset",{className:"kb-conflict","aria-label":`${m} is taken by ${b}`,onKeyDown:e=>{"Escape"===e.key&&(e.preventDefault(),c())},"data-key-capture":"",children:[e.jsx(ce,{tone:"warn",label:`${m} is taken by ${b}`}),e.jsxs("span",{className:"kb-conflict__what",children:[e.jsx(Te,{sequence:n}),e.jsx("span",{className:"kb-conflict__holder",children:b})]}),l?e.jsx(Se,{...l}):null,e.jsxs("span",{className:"actions",children:[o?e.jsx("button",{ref:u,type:"button",className:"icon-btn icon-btn--sm","aria-label":`Swap: ${b} takes the key you replaced`,title:`Swap: ${b} takes the key you replaced`,onClick:r,children:e.jsx(M,{size:14})}):null,e.jsx("button",{ref:o?void 0:u,type:"button",className:"icon-btn icon-btn--sm","aria-label":`Take ${m}: ${b} loses it`,title:`Take ${m}: ${b} loses it`,onClick:i,children:e.jsx(R,{size:14})}),e.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":"Keep things as they were",title:"Keep things as they were (Esc)",onClick:c,children:e.jsx(z,{size:14})})]})]})}function Ae(e){return p(d(e)??[e])}function Le(e){return e?` ${Z[e]}`:""}function Oe({cell:s,label:n,locked:t,scope:a,onChange:o,onRestore:l}){const r=Ae(s.sequence);if(t){const n="removed"===s.source,t=n?`${r} — taken by another command`:r;return e.jsx("span",{className:"keycap-btn keycap-btn--fixed"+(n?" keycap-btn--removed":""),role:"img","aria-label":t,title:t,children:e.jsx(Te,{sequence:s.sequence})})}if("removed"===s.source)return e.jsx("button",{type:"button",className:"keycap-btn keycap-btn--removed"+(s.scope?" keycap-btn--scoped":""),"data-sequence":s.sequence,"aria-label":`Restore ${r} for ${n}${Le(a)}`,title:s.scope?`Restore ${r} — taken away${Le(s.scope)}`:`Restore ${r}${Le(a)} — a default you took away`,onClick:l,children:e.jsx(Te,{sequence:s.sequence})});const i=["user"===s.source?`yours${Le(s.scope)}`:"default",s.waits?"waits for a longer key":"",s.off?"off while single-character keys are off":""].filter(Boolean);return e.jsx("button",{type:"button",className:(c=s,["keycap-btn","user"===c.source?"keycap-btn--user":"",c.scope?"keycap-btn--scoped":"",c.waits?"keycap-btn--waits":"",c.off?"keycap-btn--off":""].filter(Boolean).join(" ")),"data-sequence":s.sequence,"aria-label":`Change ${r} for ${n}${Le(s.scope)}`,title:`${r} · ${i.join(", ")} — press to record another`,onClick:o,children:e.jsx(Te,{sequence:s.sequence})});var c}function Pe(e){e.preventDefault()}function Ie({label:n,problem:t,onCommit:a,onCancel:o,children:l}){const r=s.useRef(null),i=s.useRef(null),c=s.useRef(!1),{tokens:u,text:p,setText:j,onKeyDown:x,clear:k}=function(e,n,t){const[a,o]=s.useState([]),[l,r]=s.useState(""),i=s.useRef(e);i.current=e,s.useEffect(()=>{t&&o([])},[t]);const c=()=>{o([]),r("")};return s.useEffect(()=>{if(0===a.length)return;if(a.length>=b)return void i.current(f(a));const e=setTimeout(()=>i.current(f(a)),pe.goTimeoutMs);return()=>clearTimeout(e)},[a]),{tokens:a,text:l,setText:r,onKeyDown:s=>{const t=s.nativeEvent;if("Tab"===t.key)return void c();if(t.isComposing)return;if("Escape"===t.key)return s.preventDefault(),void n();if("Enter"===t.key){s.preventDefault();const n=a.length>0?a:d(l);return void(n&&n.length>0&&e(f(n)))}const i=h(t);null!==i&&(s.preventDefault(),r(""),o(e=>[...e,i].slice(0,b)))},clear:c}}(a,o,t);s.useEffect(()=>{r.current?.focus()},[]),s.useEffect(()=>{const e=()=>{c.current=!1},s=["pointerup","pointercancel","mouseup","dragend"];for(const n of s)window.addEventListener(n,e);return()=>{for(const n of s)window.removeEventListener(n,e)}},[]);const g=u.length>0?u.map(m).join(" "):p;return e.jsxs("span",{ref:i,className:"kb-capture","data-key-capture":"",onBlur:()=>queueMicrotask(()=>{const e=i.current;e?.isConnected&&!c.current&&(e.contains(document.activeElement)||o())}),onPointerDown:()=>{c.current=!0},onMouseDown:()=>{c.current=!0},children:[e.jsxs("span",{className:"kb-capture__field",children:[e.jsx("input",{ref:r,className:"kb-capture__input","aria-label":n,"aria-invalid":!!t||void 0,placeholder:"press keys",autoComplete:"off",autoCapitalize:"off",spellCheck:!1,value:g,onChange:e=>{0===u.length&&j(e.target.value)},onKeyDown:x,onBlur:k}),u.length>0?e.jsx("span",{className:"kb-capture__drain",style:{"--kb-drain-ms":`${pe.goTimeoutMs}ms`},"aria-hidden":"true"},u.length):null]}),t?e.jsx(Se,{...t}):null,l]})}function We({flow:s,label:n,previous:t}){const a=t??"+";return e.jsxs(Ie,{label:t?`New key in place of ${Ae(t)} for ${n}`:`New key for ${n}`,problem:s.problem,onCommit:s.propose,onCancel:()=>s.close(a),children:[t?e.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":`Remove ${Ae(t)} from ${n}`,title:`Remove ${Ae(t)}`,onPointerDown:Pe,onMouseDown:Pe,onClick:()=>s.remove(t),children:e.jsx(K,{size:14})}):null,e.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":"Cancel",title:"Cancel (Esc)",onPointerDown:Pe,onMouseDown:Pe,onClick:()=>s.close(a),children:e.jsx(z,{size:14})})]})}function Be({target:n,label:t,keys:a,locked:o=!1,state:l}){const r=function(e,n){const{config:t,commands:a,bindings:o,save:l,scope:r}=n,[i,c]=s.useState(null),[u,d]=s.useState(null),[m,p]=s.useState(null),b=s.useRef(0),f=e=>{b.current+=1,p({message:e,n:b.current})},[h,j]=s.useState(null),x=s.useRef(null);s.useEffect(()=>{if(null===h)return;const e=[...x.current?.querySelectorAll("[data-sequence]")??[]].find(e=>e.dataset.sequence===h)??x.current?.querySelector("[data-add-key]"),s=document.activeElement;(null===s||s===document.body||x.current?.contains(s))&&e?.focus(),j(null)},[h]);const k=e=>{c(null),d(null),p(null),j(e)},g=(e,s)=>{const n=l(e);n?f(n):k(s)},y=(s,n,o)=>g(te(t,a,s,e,{previous:n,mode:o,context:r}),s);return{cell:x,editing:i,pending:u,problem:m,start:e=>{p(null),c(void 0===e?{}:{previous:e})},close:k,commit:y,propose:s=>{const n=i?.previous,t=oe(s);if(t)return void f(t);if(s===n)return void k(s);const a=le(s,e,o);"taken"===a.kind?(c(null),p(null),d({sequence:s,holder:a.target,previous:n})):y(s,n)},remove:e=>g(ae(t,a,e,r),"+"),restore:(s,n)=>g(n||void 0===r?ne(t,s,r):te(t,a,s,e,{context:r}),s)}}(n,l),{editing:i,pending:c}=r,d=l.scope?`${t} ${Z[l.scope]}`:t,m=null!==c&&"authority"===u(c.holder,l.commands)?.kind;return e.jsxs("div",{className:"kb-keys",ref:r.cell,children:[a.map(s=>i?.previous===s.sequence?e.jsx(We,{flow:r,label:d,previous:s.sequence},s.sequence):e.jsx(Oe,{cell:s,label:t,locked:o,scope:l.scope,onChange:()=>r.start(s.sequence),onRestore:()=>r.restore(s.sequence,void 0!==s.scope)},s.sequence)),i&&void 0===i.previous?e.jsx(We,{flow:r,label:d}):null,o||null!==i||null!==c?null:e.jsx("button",{type:"button",className:"icon-btn icon-btn--sm kb-keys__add","data-add-key":"","aria-label":`Add a key for ${d}`,title:`Add a key for ${d}`,onClick:()=>r.start(),children:e.jsx(D,{size:14})}),c?e.jsx(Fe,{sequence:c.sequence,holder:c.holder,commands:l.commands,canSwap:void 0!==c.previous&&!m,problem:r.problem,onSwap:()=>r.commit(c.sequence,c.previous,"swap"),onReplace:()=>r.commit(c.sequence,c.previous),onCancel:()=>r.close(c.previous??"+")}):null]})}function Qe({shown:n,signal:t}){const[a,o]=s.useState({signal:t,odd:!1});return a.signal!==t&&o({signal:t,odd:!a.odd}),e.jsxs("output",{className:"kb-count","aria-live":"polite",children:[n," ",1===n?"command":"commands",a.odd?"​":""]})}function He({query:n,onQuery:t,recorded:a,onRecorded:o}){const l=s.useRef(null),r=s.useRef(0),i=null!==a,c=i?(d(a)??[]).map(m).join(" "):n;return e.jsxs("div",{className:"field-inline kb-find",children:[e.jsx("input",{ref:l,type:i?"text":"search",className:i?"kb-find__keys":void 0,"data-key-capture":i?"":void 0,"aria-label":i?"Press the keys to find":"Find a command",placeholder:i?"press keys":"find a command",autoComplete:"off",spellCheck:!1,value:c,readOnly:i,onChange:e=>t(e.target.value),onKeyDown:e=>{if(!i)return;const s=e.nativeEvent;if("Tab"===s.key)return;if(e.preventDefault(),"Escape"===s.key)return void o(null);const n=h(s);if(null===n)return;const t=Date.now(),l=t-r.current>pe.goTimeoutMs;r.current=t;const c=l||""===a?[]:d(a)??[];o(f([...c,n].slice(-b)))}}),e.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-pressed":i,"aria-label":"Find by pressing keys",title:"Find by pressing keys",onClick:()=>{r.current=0,o(i?null:""),l.current?.focus()},children:e.jsx(T,{size:14})})]})}function Ge({binding:s,state:n,onRemoved:t}){const a=s.scope?` ${Z[s.scope]}`:"",o=`${Ae(s.sequence)}${a}`;return e.jsxs("li",{className:"kb-row kb-row--unavailable",children:[e.jsx("span",{className:"kb-row__name",children:e.jsx("code",{className:"kb-row__id",children:s.target})}),e.jsx("span",{className:"kb-keys",children:e.jsx("span",{className:"keycap-btn keycap-btn--fixed"+(s.scope?" keycap-btn--scoped":""),role:"img","aria-label":o,title:o,children:e.jsx(Te,{sequence:s.sequence})})}),e.jsxs("span",{className:"kb-row__end",children:[e.jsx(ce,{tone:"idle",label:`${s.target} is not available on this plan`}),e.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":`Remove ${o} from ${s.target}`,title:`Remove ${o} from ${s.target}`,onClick:()=>{null===n.save(ne(n.config,s.sequence,s.scope))&&t()},children:e.jsx(K,{size:14})})]})]})}function Ye({bindings:n,state:t}){const a=s.useRef(null),[o,l]=s.useState(null);return s.useEffect(()=>{if(null===o)return;const e=a.current?.querySelectorAll("button"),s=e?.[Math.min(o,e.length-1)]??document.querySelector("#settings-keymap .head-filter");s?.focus(),l(null)},[o]),0===n.length?null:e.jsxs("section",{className:"kb-group","aria-labelledby":"kb-group-unavailable",children:[e.jsx("h3",{className:"kb-group__label",id:"kb-group-unavailable",children:"Unavailable"}),e.jsx("ul",{className:"kb-rows",ref:a,children:n.map((s,n)=>e.jsx(Ge,{binding:s,state:t,onRemoved:()=>l(n)},`${s.scope??""}:${s.sequence}`))})]})}const Je='[data-land="filter"]';function Ue({row:s,state:n,onLand:t}){const{command:a}=s;return e.jsxs("li",{className:"kb-row","data-command":a.id,"data-changed":s.changed?"":void 0,children:[e.jsxs("span",{className:"kb-row__name",children:[e.jsx("span",{className:"kb-row__label",children:a.label}),e.jsx("code",{className:"kb-row__id",children:a.id})]}),e.jsx(Be,{target:a.id,label:a.label,keys:s.keys,locked:s.locked,state:n}),e.jsxs("span",{className:"kb-row__end",children:[s.locked?e.jsx(ce,{tone:"idle",label:"Asks before it acts: no key can be moved onto it"}):null,s.changed?e.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":`Reset ${a.label} to its default keys`,title:`Reset ${a.label} to its default keys`,"data-resets":"",onClick:()=>{n.save(re(n.config,n.commands,a.id,n.scope)),t([`[data-command="${a.id}"] [data-add-key]`,Je])},children:e.jsx(q,{size:14})}):null]})]})}function Ze(e){return"ContextMenu"===e?m(e):e.replace("Shift+","Shift-")}function Ve(){return e.jsxs("section",{className:"kb-group","aria-labelledby":"kb-group-fixed",children:[e.jsxs("h3",{className:"kb-group__label",id:"kb-group-fixed",children:[e.jsx(E,{size:12}),"Fixed"]}),e.jsx("ul",{className:"kb-rows",children:j.map(([s,n])=>e.jsxs("li",{className:"kb-row kb-row--fixed",children:[e.jsx("span",{className:"kb-row__name",children:e.jsx("span",{className:"kb-row__label",children:n})}),e.jsx("span",{className:"kb-keys",children:s.split(" / ").map(s=>e.jsx("span",{className:"keycap-btn keycap-btn--fixed",children:e.jsx("kbd",{className:"keycap",children:Ze(s)})},s))}),e.jsx("span",{className:"kb-row__end"})]},s))})]})}function Xe({state:n,onLand:t}){const[a,l]=s.useState(!1),[r,i]=s.useState(null),u=s.useRef(0),d=null!==r&&r.config===n.config?r:null,m=0===function(e,s){const n=new Set;for(const{bindings:t}of De(e))for(const[e,a]of Object.entries(t)){if(n.add(a),a!==c)continue;const t=s.find(s=>s.defaults.includes(e));t&&n.add(t.id)}return n.delete(c),[...n].filter(e=>!e.startsWith(o)).length}(n.config,n.commands)+Object.keys(n.config.macros).length&&n.config.singleKeys,p=a?"Press again to forget every change and macro":"Reset every key and macro";return e.jsxs(e.Fragment,{children:[d?e.jsx(Se,{message:d.message,n:d.n}):null,m?null:e.jsx("button",{type:"button",className:"icon-btn icon-btn--sm"+(a?" is-armed":""),"aria-label":p,title:p,"aria-pressed":a,"data-resets":"",onBlur:()=>l(!1),onClick:()=>{if(!a)return i(null),void l(!0);const e=he();if(l(!1),!e.ok)return u.current+=1,void i({message:e.message,n:u.current,config:n.config});i(null),t([Je])},children:e.jsx(q,{size:14})})]})}function es({state:s}){const n=s.config.singleKeys,t="Single-character keys run commands";return e.jsxs("div",{className:"sw kb-single",children:[e.jsx("span",{className:"sw__name",children:"Single-character keys"}),e.jsx("button",{type:"button",className:"toggle",role:"switch","aria-checked":n,"aria-label":t,title:n?t:"Off: only Control, arrows and named keys run commands",onClick:()=>s.save({...s.config,singleKeys:!n})})]})}function ss({label:s,land:n,value:t,options:a,onChange:o}){return e.jsx("select",{className:"head-filter","aria-label":s,title:s,"data-land":n,value:t,onChange:e=>{const s=a.find(s=>s.id===e.target.value);s&&o(s.id)},children:a.map(s=>e.jsx("option",{value:s.id,children:s.label},s.id))})}function ns({state:a,scope:o,onScope:l}){const[r,i]=s.useState(""),[c,u]=s.useState(null),[d,m]=s.useState("all"),p=s.useRef(null),b=function(e){const[n,t]=s.useState(null);return s.useEffect(()=>{if(null===n)return;const s=document.activeElement;if(null===s||s===document.body||s.hasAttribute("data-resets"))for(const t of n){const s=e.current?.querySelector(t);if(s){s.focus();break}}t(null)},[n,e]),t}(p),f=function(e,s,a){const{query:o="",recorded:l=null,filter:r="all"}=a,i=ze(a.scope??"everywhere"),c=Y(J({...e,singleKeys:!0},s,i));return n.map(n=>({id:n,label:t[n],rows:s.filter(e=>e.group===n).map(n=>function(e,s,n,t,a){return{command:e,keys:X(e.id,s,n,a).map(e=>({...e,waits:"removed"!==e.source&&t.has(e.sequence),off:!s.singleKeys&&ee(e.sequence)})),changed:V(e.id,s,n,a),locked:"authority"===e.kind}}(n,e,s,c,i)).filter(e=>function(e,s){const n=s.trim().toLowerCase();return""===n||e.label.toLowerCase().includes(n)||e.id.toLowerCase().includes(n)}(e.command,o)&&(null===l||""===l||function(e,s){return e.keys.some(e=>"removed"!==e.source&&(e.sequence===s||e.sequence.startsWith(`${s} `)))}(e,l))&&function(e,s){return"changed"===s?e.changed:"unbound"===s?!e.keys.some(e=>"removed"!==e.source):"waits"!==s||e.keys.some(e=>e.waits)}(e,r))})).filter(e=>e.rows.length>0)}(a.config,a.commands,{query:r,recorded:c,filter:d,scope:o}),h=""===r&&null===c,j=f.reduce((e,s)=>e+s.rows.length,0);return e.jsxs("section",{className:"panel kb",id:"settings-keymap",ref:p,children:[e.jsxs("div",{className:"panel__head",children:[e.jsx("div",{children:e.jsx("h2",{children:"Keymap"})}),e.jsxs("div",{className:"actions",children:[e.jsx(ss,{label:"Keys that hold",value:o,options:Me,onChange:l}),e.jsx(ss,{label:"Show",land:"filter",value:d,options:Ee,onChange:m}),e.jsx(Xe,{state:a,onLand:b})]})]}),e.jsxs("div",{className:"panel__body",children:[e.jsx(He,{query:r,onQuery:i,recorded:c,onRecorded:u}),e.jsx(es,{state:a}),e.jsx(Qe,{shown:j,signal:[r,c,d,o].join("\0")}),f.map(s=>e.jsxs("section",{className:"kb-group","aria-labelledby":`kb-group-${s.id}`,children:[e.jsx("h3",{className:"kb-group__label",id:`kb-group-${s.id}`,children:s.label}),e.jsx("ul",{className:"kb-rows",children:s.rows.map(s=>e.jsx(Ue,{row:s,state:a,onLand:b},s.command.id))})]},s.id)),!h||"all"!==d&&"changed"!==d?null:e.jsx(Ye,{bindings:Ke(a.config,a.commands),state:a}),h&&"all"===d?e.jsx(Ve,{}):null]})]})}const ts=e=>`kb-tab-${e}`,as=e=>`kb-loadout-${e}`;function os({selected:n,onSelect:t}){const a=s.useRef([]);return e.jsx("div",{className:"kb-tabs",role:"tablist","aria-label":"Input loadout",children:x.map((s,o)=>e.jsx("button",{ref:e=>{a.current[o]=e},type:"button",role:"tab",id:ts(s.id),"aria-controls":as(s.id),"aria-selected":n===s.id,tabIndex:n===s.id?0:-1,className:"kb-tab"+(n===s.id?" is-active":""),"data-loadout":s.id,onClick:()=>t(s.id),onKeyDown:e=>((e,s)=>{const n="ArrowRight"===e.key?1:"ArrowLeft"===e.key?-1:0,o="Home"===e.key?0:"End"===e.key?x.length-1:null;if(0===n&&null===o)return;e.preventDefault();const l=o??(s+n+x.length)%x.length,r=x[l];r&&(t(r.id),a.current[l]?.focus())})(e,o),children:s.label},s.id))})}function ls({tokens:s,onToken:n,onStop:t}){return e.jsx("input",{autoFocus:!0,className:"kb-steps__recorder","data-key-capture":"","aria-label":"Recording: press the keys the macro should press",placeholder:"press keys · Enter stops",readOnly:!0,value:s.map(m).join(" "),onKeyDown:e=>{const s=e.nativeEvent;if("Tab"===s.key)return void t(!1);if(e.preventDefault(),"Enter"===s.key||"Escape"===s.key)return void t(!0);const a=h(s);null!==a&&n(a)}})}function rs({step:s,index:n,last:a,problem:o,choices:l,onStep:r,onMove:i,onRemove:c}){const u=n+1,d=l.some(e=>e.commands.some(e=>e.id===s.command));return e.jsxs("li",{className:"kb-step","data-step":n,children:[e.jsx("input",{type:"number",className:"kb-step__count",min:1,max:k.count,"aria-label":`Times for step ${u}`,value:s.count,onChange:e=>{return r({...s,count:(n=e.target.value,Math.max(1,Math.min(k.count,Number(n)||1)))});var n}}),e.jsx("span",{className:"kb-step__times","aria-hidden":"true",children:"×"}),e.jsxs("select",{className:"kb-step__command","aria-label":`Command for step ${u}`,value:s.command,onChange:e=>r({...s,command:e.target.value}),children:[d?null:e.jsx("option",{value:s.command,children:s.command}),l.map(s=>e.jsx("optgroup",{label:t[s.group],children:s.commands.map(s=>e.jsx("option",{value:s.id,children:s.label},s.id))},s.group))]}),o?e.jsx(ce,{tone:"err",label:o}):null,e.jsxs("span",{className:"actions",children:[0===n?null:e.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":`Move step ${u} up`,title:"Move up","data-move":"up",onClick:()=>i(n-1),children:e.jsx(F,{size:14})}),a?null:e.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":`Move step ${u} down`,title:"Move down","data-move":"down",onClick:()=>i(n+1),children:e.jsx(A,{size:14})}),e.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":`Remove step ${u}`,title:"Remove step",onClick:c,children:e.jsx(K,{size:14})})]})]})}function is({steps:s,choices:n,recorder:t,addRef:a,onChange:o}){const l=s.length>=k.steps,{recording:r}=t;return e.jsxs("div",{className:"kb-steps__foot",children:[l||r?null:e.jsx("button",{ref:a,type:"button",className:"icon-btn icon-btn--sm","aria-label":"Add a step",title:"Add a step",onClick:()=>o([...s,{command:n[0]?.commands[0]?.id??"listing.next",count:1}]),children:e.jsx(D,{size:14})}),l&&!r?null:e.jsx("button",{type:"button",className:"icon-btn icon-btn--sm"+(r?" is-armed":""),"aria-pressed":r,"aria-label":r?"Stop recording":"Record steps by pressing keys",title:r?"Stop recording (Enter)":"Record steps by pressing keys",onClick:t.toggle,children:e.jsx(L,{size:14})}),r?e.jsx(ls,{tokens:t.tokens,onToken:t.add,onStop:t.finish}):null,!r&&t.skipped.length>0?e.jsx(ce,{tone:"warn",label:`Left out: ${t.skipped.join(", ")} — not something this macro may run`}):null]})}function cs({steps:t,on:a,state:l,onChange:r}){const i=s.useRef(null),c=s.useRef(null),d=function(e){const[n,t]=s.useState(null);return s.useEffect(()=>{if(null===n)return;const s=document.activeElement;if(null===s||s===document.body||e.current?.contains(s)){const s=e.current?.querySelector(`[data-step="${n.index}"]`),t=e=>s?.querySelector(`[data-move="${e}"]`),a="up"===n.dir?"down":"up",o=[t(n.dir),t(a)].find(e=>e&&!e.disabled);o?.focus()}t(null)},[n,e]),t}(c),[m,p]=s.useState(0),f=s.useRef(!1),h=()=>{f.current=!0,p(e=>e+1)};s.useEffect(()=>{const e=document.activeElement,s=null===e||e===document.body;if(f.current&&i.current)return f.current=!1,void((s||c.current?.contains(e))&&i.current.focus());s&&!i.current&&t.length>=k.steps&&(f.current=!1,c.current?.querySelector("li:last-child select")?.focus())},[m,t.length]);const j=function(e,n,t,a,l){const[r,i]=s.useState(!1),[c,d]=s.useState([]),[m,p]=s.useState([]),f=(s=!0)=>{const r=function(e,s,n){const t=J(s,n);let a=[];const l=[];let r=0,i=[];const c=(e,s)=>{const t=u(e,n)?.kind;e.startsWith(o)||be(e)||"authority"===t?l.push(s):a=fe(a,{command:e,count:r}),r=0},d=e=>[...t.keys()].some(s=>s.startsWith(`${e} `)),m=e=>{const s=i;let a=[...s,e].join(" ");if(s.length>0&&!t.has(a)&&!d(a)&&/^[A-Z]$/.test(e)&&(a=[...s,e.toLowerCase()].join(" ")),d(a))return void(i=a.split(" "));i=[];const o=t.get(a);if(void 0!==o)return void c(o,a);const p=t.get(e),b=0===s.length||1===e.length&&!(void 0!==p&&(e=>"move"===u(e,n)?.group)(p));if(b)return l.push(a),void(r=0);l.push(s.join(" ")),m(e)};for(const o of e)/^[1-9]$/.test(o)?r=Math.min(10*r+Number(o),99):"0"===o&&r>0?r=Math.min(10*r,99):m(o);if(i.length>0){const e=i.join(" "),s=t.get(e);void 0!==s?c(s,e):l.push(e)}return{steps:a,skipped:l}}(c,t.config,t.commands),m=r.steps.filter(e=>null===g(e,n,t.commands)),b=r.steps.filter(e=>!m.includes(e)).map(e=>e.command);p([...r.skipped,...b]),m.length>0&&a([...e,...m].slice(0,k.steps)),d([]),i(!1),s&&l()};return{recording:r,tokens:c,skipped:m,toggle:()=>{r?f():(p([]),i(!0))},finish:f,add:e=>d(s=>s.length>=k.steps*b?s:[...s,e])}}(t,a,l,r,h),x=function(e,s){return n.map(n=>({group:n,commands:e.filter(t=>t.group===n&&null===g({command:t.id,count:1},s,e))})).filter(e=>e.commands.length>0)}(l.commands,a);return e.jsxs("div",{className:"kb-steps",children:[e.jsx("ol",{className:"kb-steps__list",ref:c,children:t.map((s,n)=>e.jsx(rs,{step:s,index:n,last:n===t.length-1,problem:g(s,a,l.commands),choices:x,onStep:e=>r(t.map((s,t)=>t===n?e:s)),onMove:e=>{r(function(e,s,n){const t=[...e],[a]=t.splice(s,1);return void 0!==a&&t.splice(n,0,a),t}(t,n,e)),d({index:e,dir:e>n?"down":"up"})},onRemove:()=>{r(t.filter((e,s)=>s!==n)),h()}},n))}),e.jsx(is,{steps:t,choices:x,recorder:j,addRef:i,onChange:r})]})}const us=/^[a-z][a-z0-9-]{0,23}$/;function ds(e){return[{id:"unlock",label:"the vault unlocks"},...e.commands.filter(e=>e.id.startsWith(v)).map(e=>({id:w(e.id.slice(v.length)),label:`${e.label} opens`}))]}function ms({id:n,name:t,problem:a,onName:o}){const l=""!==t&&null!==a,r=s.useRef(null);return s.useEffect(()=>{r.current?.focus()},[]),e.jsxs("div",{className:"kb-editor__row",children:[e.jsx("label",{htmlFor:`macro-name-${n}`,children:"Name"}),e.jsxs("span",{className:"kb-editor__value",children:[e.jsx("span",{className:"kb-editor__at","aria-hidden":"true",children:"@"}),e.jsx("input",{id:`macro-name-${n}`,ref:r,value:t,autoComplete:"off",spellCheck:!1,"aria-invalid":!!l||void 0,onChange:e=>o(e.target.value.toLowerCase())}),l?e.jsx(ce,{tone:"err",label:a}):null]})]})}function ps({id:s,on:n,events:t,onOn:a}){return e.jsxs("div",{className:"kb-editor__row",children:[e.jsx("label",{htmlFor:`macro-on-${s}`,children:"Runs when"}),e.jsxs("select",{id:`macro-on-${s}`,value:n??"",onChange:e=>a(t.find(s=>s.id===e.target.value)?.id),children:[e.jsx("option",{value:"",children:"its keys are pressed"}),t.map(s=>e.jsx("option",{value:s.id,children:s.label},s.id))]})]})}function bs({name:n,onDelete:t}){const[a,o]=s.useState(!1),l=a?`Press again to delete @${n}`:`Delete @${n}`;return e.jsx("button",{type:"button",className:"icon-btn"+(a?" is-armed":""),"aria-label":l,title:l,onBlur:()=>o(!1),onClick:()=>{a?t():o(!0)},children:e.jsx(K,{size:16})})}function fs({name:n,macro:t,state:a,onDone:l}){const r=n??"new",[i,c]=s.useState(n??""),[u,d]=s.useState(t?.on),[m,p]=s.useState([...t?.steps??[]]),[b,f]=s.useState(null),h=function(e,s,n){return us.test(e)?e!==s&&void 0!==y(n.config.macros,e)?`There is already a macro named ${e}`:null:"A name is lowercase letters, digits and dashes"}(i,n,a),j=null!==h||0===m.length||m.some(e=>null!==g(e,u,a.commands)),x=(e,s)=>{const n=a.save(e);n?f(n):l(s)};return e.jsxs("form",{className:"kb-editor",onSubmit:e=>{e.preventDefault(),j||x(function(e,s,n,t){const a={...e.macros};return void 0!==s&&delete a[s],a[n]=t,{...void 0===s?e:ie(e,`${o}${s}`,`${o}${n}`),macros:a}}(a.config,n,i,u?{steps:m,on:u}:{steps:m}),i)},"aria-label":n?`Edit @${n}`:"New macro",children:[e.jsx(ms,{id:r,name:i,problem:h,onName:c}),e.jsx(ps,{id:r,on:u,events:ds(a),onOn:d}),e.jsxs("div",{className:"kb-editor__row kb-editor__row--steps",children:[e.jsx("span",{className:"kb-editor__label",children:"Steps"}),e.jsx(cs,{steps:m,on:u,state:a,onChange:p})]}),e.jsxs(O,{label:"Save macro",disabled:j,children:[e.jsx("button",{type:"button",className:"icon-btn","aria-label":"Cancel",title:"Cancel","data-pane-close":"",onClick:()=>l(null),children:e.jsx(z,{size:16})}),void 0!==n?e.jsx(bs,{name:n,onDelete:()=>x(function(e,s){const n={...e.macros};return delete n[s],{...ie(e,`${o}${s}`,null),macros:n}}(a.config,n),null)}):null,b?e.jsx(ce,{tone:"err",label:b}):null]})]})}function hs({macro:s,state:n}){return e.jsx("span",{className:"kb-macro__steps",title:s.steps.map(N).join(", "),children:s.steps.map((s,t)=>e.jsxs("span",{className:"kb-macro__step",children:[t>0?e.jsx("span",{className:"kb-macro__then","aria-hidden":"true",children:"→"}):null,s.count>1?`${s.count}× `:"",u(s.command,n.commands)?.label??s.command]},t))})}function js({name:s,macro:n,state:t,editing:a,onEdit:l,onDone:r,waiting:i}){const c=`${o}${s}`,u=X(c,t.config,t.commands,t.scope).map(e=>({...e,waits:i.has(e.sequence)})),d=ds(t).find(e=>e.id===n.on);return e.jsxs("li",{className:"kb-row kb-macro","data-macro":s,children:[e.jsxs("span",{className:"kb-row__name",children:[e.jsxs("span",{className:"kb-row__label",children:["@",s]}),e.jsx(hs,{macro:n,state:t})]}),e.jsx(Be,{target:c,label:`@${s}`,keys:u,state:t}),e.jsxs("span",{className:"kb-row__end",children:[d?e.jsxs("span",{className:"kb-macro__on",role:"img","aria-label":`Runs when ${d.label}`,title:`Runs when ${d.label}`,children:[e.jsx(P,{size:12}),n.on]}):null,a?null:e.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","data-edit-macro":s,"aria-label":`Edit @${s}`,title:`Edit @${s}`,onClick:l,children:e.jsx(I,{size:14})})]}),a?e.jsx(fs,{name:s,macro:n,state:t,onDone:r}):null]})}function xs({state:n}){const[t,a]=s.useState(null),[o,l]=s.useState(null),r=s.useRef(null),i=Object.entries(n.config.macros).sort(([e],[s])=>e.localeCompare(s)),c=Y(n.bindings);s.useEffect(()=>{if(null===o)return;const e="+"===o?r.current?.querySelector("[data-new-macro]"):[...r.current?.querySelectorAll("[data-edit-macro]")??[]].find(e=>e.dataset.editMacro===o);(null===document.activeElement||document.activeElement===document.body||r.current?.contains(document.activeElement))&&e?.focus(),l(null)},[o]);const u=e=>s=>{a(null),l(s??(""===e?"+":e))};return e.jsxs("section",{className:"panel kb",id:"settings-macros",ref:r,children:[e.jsxs("div",{className:"panel__head",children:[e.jsx("div",{children:e.jsx("h2",{children:"Macros"})}),null!==t?null:e.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","data-new-macro":"","aria-label":"New macro",title:"New macro",onClick:()=>a(""),children:e.jsx(D,{size:14})})]}),e.jsxs("div",{className:"panel__body",children:[""===t?e.jsx(fs,{state:n,onDone:u("")}):null,0===i.length&&""!==t?e.jsx("p",{className:"empty",children:"No macros yet."}):null,i.length>0?e.jsx("ul",{className:"kb-rows",children:i.map(([s,o])=>e.jsx(js,{name:s,macro:o,state:n,editing:t===s,onEdit:()=>a(s),onDone:u(s),waiting:c},s))}):null]})]})}function ks(e){return"#settings-gestures"===e?"gestures":"#settings-keymap"===e?"keyboard":null}function gs(){const{hash:n}=C(),[t,a]=s.useState("everywhere"),[o,l]=s.useState(()=>ks(n)??$(W())),r=function(e,n){const t=ze(n);return s.useMemo(()=>void 0===t?e:{...e,scope:t,bindings:J({...e.config,singleKeys:!0},e.commands,t)},[e,t])}(function(){const e=s.useSyncExternalStore(je,xe,xe),n=ge("keymap-jump"),t=ge("section"),a=s.useMemo(()=>_(),[n,t]),o=s.useMemo(()=>J({...e,singleKeys:!0},a),[e,a]),l=s.useCallback(e=>{const s=ke(e);return s.ok?null:s.message},[]);return{config:e,commands:a,bindings:o,save:l}}(),t);return s.useEffect(()=>{const e=ks(n);e&&l(e)},[n]),e.jsxs(e.Fragment,{children:[e.jsx(os,{selected:o,onSelect:l}),e.jsx("div",{role:"tabpanel",id:as(o),"aria-labelledby":ts(o),className:"kb-loadout",children:"gestures"===o?e.jsx(Re,{state:r}):e.jsx(ns,{state:r,scope:t,onScope:a})}),e.jsx(xs,{state:r})]})}export{gs as KeybindingsPanels};
@@ -0,0 +1 @@
1
+ import{r as e,j as t}from"./react-dom-BwC4eQlG.js";import{a as s}from"./vault-list-path-Bh2_KZkq.js";import{o as n}from"./main-BrkS-iow.js";import{cG as a}from"./drop-open-BjgdLxWM.js";function o({title:a,mark:o,onClose:i,initialFocus:l,children:r}){const c=e.useRef(null),d=e.useRef(null);return s(!0,c,l??d,i,d),t.jsxs("div",{className:"sheet-layer",children:[t.jsx("button",{type:"button",className:"scrim","aria-label":"Close",onClick:i}),t.jsxs("div",{ref:c,className:"sheet",role:"dialog","aria-label":a,"aria-modal":"true",children:[t.jsxs("div",{className:"sheet__head",children:[t.jsx("span",{className:"sheet__mark","aria-hidden":"true",children:o}),t.jsx("div",{className:"sheet__grow",children:t.jsx("h2",{children:a})}),t.jsx("button",{ref:d,type:"button",className:"icon-btn","aria-label":"Close",title:"Close",onClick:i,children:t.jsx(n,{size:18})})]}),t.jsx("div",{className:"sheet__body",children:r})]})]})}const i={password:"Password","api-key":"API key",token:"Token",oauth:"OAuth",authenticator:"Authenticator"};function l(e,t){const s=e.filter(e=>e.type===t.type),n=i[t.type];return s.length>1?`${n} ${s.indexOf(t)+1}`:n}function r(e,t,s=new Date){return a(t,e.id,s)}function c({opener:s,types:n,existing:a,onPick:o,onBind:l,onClose:r}){const c=e.useRef(null);return e.useEffect(()=>{c.current?.querySelector("button")?.focus()},[]),t.jsxs("fieldset",{ref:c,className:"method__picker","aria-label":"Login method type",onKeyDown:e=>{"Escape"===e.key&&(e.preventDefault(),e.stopPropagation(),r(),s.current?.focus())},children:[n.map(e=>t.jsx("button",{type:"button",className:"btn btn--sm choice",onClick:()=>o(e),children:i[e]},e)),a.length>0?t.jsx("fieldset",{className:"method__existing","aria-label":"Existing credentials",children:a.map(e=>t.jsx("button",{type:"button",className:"btn btn--sm choice",onClick:()=>l(e),children:e.name||i[e.method.type]},e.id))}):null]})}export{o as C,i as M,c as a,l as m,r as n};
@@ -0,0 +1 @@
1
+ import{d as e,x as t,I as n,f as s,y as i,l as a,z as o,A as r,B as c,C as l,D as d,s as u,E as p,b as m,F as h,G as b,H as f}from"./identity-BVf8yWa4.js";import{aB as y,aC as x,aD as g,v as j}from"./drop-open-BjgdLxWM.js";import{i as v}from"./vault-ui-seam-BQGS7RR6.js";import{r as k,j as I}from"./react-dom-BwC4eQlG.js";import{I as _,p as w,i as C,G as S}from"./idp-presets-B1M-P0Ek.js";import{b$ as N,c0 as A,c1 as O,U as z,f as T,z as D,X as R,n as $,Y as U,c2 as E,a1 as L,S as P,v as F,c3 as M,c4 as B,c5 as H,K as G,a2 as K}from"./main-BrkS-iow.js";import{S as W}from"./InvokeScreen-C-kFFYVF.js";import{S as V}from"./identity-view-paths-Bi1yigZk.js";import{f as q}from"./native-catalog-status-INsDvLpU.js";import{l as J,o as X,c as Y,a as Z,b as Q}from"./connections-CNmhCNAV.js";import{i as ee}from"./signals-DdOHdr--.js";import"./iam-zBfzStfy.js";const te={name:"opensesame_identity_read",capabilityIds:["identity.whoami","identity.admin"],scope:"session",readOnly:!0,description:"Read-only identity summary: whether a session is active and, when signed in, the principal with its linked identities. Never returns tokens.",inputSchema:{type:"object",properties:{},additionalProperties:!1},execute:async()=>{if(!e())return{signedIn:!1};const n=await t();return{signedIn:!0,principal:{id:n.id,state:n.state,assurance:n.assurance,createdAt:n.createdAt,identities:n.identities.map(e=>({kind:e.kind,issuer:e.issuer,displayHint:e.displayHint??null,assurance:e.assurance}))}}}};function ne(e){return e.trim().toLowerCase()}async function se(e){const t=ne(e);if(!x.test(t))throw new n("Enter an organization slug like acme-corp.",400);if(!s())throw new n("No sign-in service is connected.",0);return i(`/v1/organizations/tenants/${encodeURIComponent(t)}`)}async function ie(e){if(!s())throw new n("No sign-in service is connected.",0);try{return await i(`/v1/organizations/by-domain/${encodeURIComponent(e)}`)}catch(t){if(t instanceof n&&404===t.status)return null;throw t}}async function ae(){const e=await i("/v1/organizations");return Array.isArray(e?.organizations)?e.organizations:[]}async function oe(e,t,n){const s=ne(e),a=await i(`/v1/organizations/tenants/${encodeURIComponent(s)}/join`,{method:"POST",body:JSON.stringify({method:t,idToken:n})});return v(a.id)&&g(a.id),a}function re(){const e={lookupOrgTenant:y.lookupOrgTenant,lookupOrgByDomain:y.lookupOrgByDomain,listOrgMemberships:y.listOrgMemberships,joinOrgTenant:y.joinOrgTenant};y.lookupOrgTenant=se,y.lookupOrgByDomain=ie,y.listOrgMemberships=ae,y.joinOrgTenant=oe;let t=!1;return()=>{t||(t=!0,Object.assign(y,e))}}const ce={"better-auth":"self-hosted",workos:"AuthKit",okta:"enterprise SSO",auth0:"enterprise SSO"},le={"better-auth":"The OIDC client id from your Better Auth provider config.",workos:"Your WorkOS Client ID, from the dashboard's API keys.",okta:"The Client ID of an Okta app of type SPA.",auth0:"The Client ID of an Auth0 Single Page Application."},de=/^[a-z0-9][a-z0-9.-]*$/,ue=[{id:"google",brandId:"google",label:"Google",kind:"Google accounts",field:null,issuerFor:()=>({ok:!0,issuer:"https://accounts.google.com"}),clientIdHint:"The Web application OAuth client ID from Google Cloud Console. Add this page's origin to its Authorized JavaScript origins."},{id:"entra",brandId:"microsoft",label:"Microsoft Entra ID",kind:"Microsoft 365",field:{label:"Directory (tenant) ID",placeholder:"contoso.onmicrosoft.com",hint:"The tenant ID or domain from the Entra admin centre."},issuerFor:function(e){const t=e.trim().toLowerCase();return de.test(t)?{ok:!0,issuer:`https://login.microsoftonline.com/${t}/v2.0`}:{ok:!1,error:"Use your tenant ID or domain, like contoso.onmicrosoft.com."}},clientIdHint:"The Application (client) ID of an app registration with a Single-page application redirect."},..._.map(e=>({id:e.type,brandId:"",label:e.label,kind:ce[e.type],field:e.field,issuerFor:t=>w(e.type,t),clientIdHint:le[e.type]})),{id:"oidc",brandId:"",label:"Other OIDC",kind:"any issuer",field:{label:"Issuer URL",placeholder:"https://idp.acme.com",hint:"Whatever the provider publishes /.well-known/openid-configuration under."},issuerFor:e=>C(e),clientIdHint:"The client id of a public client with PKCE enabled."}],pe={loadSettings:a,saveSettings:r,pageIsLoopback:o,defaultUpstream:O,discover:A,redirectUri:N},me=/\/$/;function he(){const[e,t]=k.useState(null),[n,s]=k.useState(""),[i,a]=k.useState(""),[o,r]=k.useState(!1),[u,p]=k.useState(!1),[m,h]=k.useState(null),[,b]=k.useReducer(e=>e+1,0),f=pe.loadSettings(),y=c(f),[x,g]=k.useState(f.identityApi),j=pe.defaultUpstream(),v=e?(_=e,ue.find(e=>e.id===_)??null):null;var _;const w=pe.pageIsLoopback()?l:"",C=pe.redirectUri(),S=x.trim();function N(e){const t=pe.loadSettings();pe.saveSettings(B(t,e)),b()}function A(e){const t=e.trim().replace(me,"");g(t),pe.loadSettings().identityApi!==t&&N({identityApi:t})}const O=[...y.builtin?[{key:"builtin",name:z(j.id)?.label??j.accountKind.charAt(0).toUpperCase()+j.accountKind.slice(1),kind:"built in",brandId:j.id,remove:()=>N({builtin:!1})}]:[],...y.providers.map(e=>({key:e.issuer,name:e.label,kind:new URL(e.issuer).hostname,brandId:e.providerId,remove:()=>{return t=e.issuer,N({providers:c().providers.filter(e=>e.issuer!==t)}),void h(null);var t}})),...S?[{key:"service",name:"OpenSesame identity service",kind:S.replace(/^https?:\/\//,""),brandId:"",remove:()=>A("")}]:[]];return I.jsxs("div",{className:"setup__stack",children:[I.jsx("div",{className:"ways",children:0===O.length?null:I.jsx("ul",{className:"ways__list","aria-label":"Ways in",children:O.map(e=>{const t=e.brandId?z(e.brandId):null;return I.jsxs("li",{className:"ways__item",children:[I.jsx("span",{className:"ways__mark","aria-hidden":"true",children:I.jsx(t?t.Icon:T,{size:18})}),I.jsxs("span",{className:"ways__body",children:[I.jsx("span",{className:"ways__name",children:e.name}),I.jsx("span",{className:"ways__kind",children:e.kind})]}),I.jsx("button",{type:"button",className:"icon-btn","aria-label":`Remove ${e.name}`,title:`Remove ${e.name}`,onClick:e.remove,children:I.jsx(D,{size:17})})]},e.key)})})}),I.jsxs("div",{className:"setup__stack",children:[I.jsx("div",{className:"preset","aria-label":"Add a provider",children:ue.map(n=>I.jsxs("button",{type:"button",className:e===n.id?"preset__opt is-on":"preset__opt","aria-pressed":e===n.id,disabled:o,onClick:()=>{t(n.id),s(""),a(""),h(null)},children:[I.jsx("span",{className:"preset__name",children:n.label}),I.jsx("span",{className:"preset__kind",children:n.kind})]},n.id))}),v?I.jsxs(I.Fragment,{children:[I.jsx(R,{id:"setup-callback",label:"Redirect URI to register",type:"url",mono:!0,readOnly:!0,lead:I.jsx(E,{size:17}),value:C,tail:I.jsx("button",{type:"button",className:"icon-btn","aria-label":"Copy the redirect URI",title:"Copy the redirect URI",onClick:function(){navigator.clipboard?.writeText(C).then(()=>{p(!0),setTimeout(()=>p(!1),1500)},()=>{})},children:I.jsx(u?$:U,{size:17})})}),v.field?I.jsx(R,{id:"setup-issuer",label:v.field.label,type:"text",mono:!0,lead:I.jsx(E,{size:17}),placeholder:v.field.placeholder,value:n,disabled:o,onValueChange:s}):null,I.jsx(R,{id:"setup-client-id",label:"Client ID",type:"text",mono:!0,lead:I.jsx(L,{size:17}),placeholder:"0oa1b2c3d4EXAMPLE",value:i,disabled:o,onValueChange:a}),I.jsx(P,{label:o?"Checking…":`Add ${v.label}`,icon:I.jsx(F,{size:18}),busy:o,disabled:o||!i.trim()||Boolean(v.field)&&!n.trim(),onClick:function(){if(!v)return;const e=v.issuerFor(n);if(!e.ok)return void h({tone:"err",text:e.error});const o=d(v.brandId||v.id,e.issuer,i,v.label);o?y.providers.some(e=>e.issuer===o.issuer)?h({tone:"warn",text:`${o.label} is already a way in. Remove it first to change its client id.`}):(r(!0),h(null),(async()=>{try{await pe.discover(o.issuer),N({providers:[...c().providers,o]}),t(null),s(""),a(""),h({tone:"ok",text:`${o.label} added. It will be on the sign-in screen.`})}catch(e){h({tone:"err",text:e instanceof H||e instanceof Error?e.message:"That issuer could not be reached."})}finally{r(!1)}})()):h({tone:"err",text:"That needs both an issuer and a client id."})}})]}):null,I.jsx(V,{message:m})]}),I.jsx("div",{className:"setup__stack",children:I.jsx(R,{id:"setup-identity-api",label:"Identity service",type:"url",mono:!0,lead:I.jsx(M,{size:17}),placeholder:"https://id.example.com",value:x,status:S?I.jsx(W,{tone:"ok",label:"Will connect"}):null,onValueChange:g,onCommit:A,fills:w&&x.trim()!==w?[{label:w,onPick:()=>A(w)}]:[]})})]})}function be(){return I.jsx(S,{id:"setup.ways",children:I.jsx(he,{})})}function fe(e){const t=j.subscribe(e),n=ee(e);return()=>{t(),n()}}function ye({providerId:e,needsAuth:t,selected:n,connected:s,as:i,busy:a,reconnect:o,onConnect:r}){if(!t)return I.jsx(W,{tone:n?"ok":"idle",label:n?"Ready":"Instant"});if(s)return I.jsx(W,{tone:"ok",label:i?`Connected as ${i}`:"Connected"});if(null===q(e,"oauth2_authorization_code"))return null;const c=f(e);return I.jsx("button",{type:"button",className:"icon-btn",disabled:a,"aria-busy":a,"aria-label":a?"Authorizing":o?`Reconnect ${c}`:`Connect ${c}`,title:o?"Reconnect":"Connect",onClick:r,children:I.jsx(K,{size:17})})}function xe({capability:e,providerId:t,connection:n}){const s=b(e),[i,o]=function(e){const t=k.useSyncExternalStore(u,p,p),n=k.useSyncExternalStore(fe,m,m),s=h(a().capabilityConnectors)[e],[i,o]=k.useState(null);return[null!==i&&i.tomb===n&&i.epoch===t&&i.id===e?i.binding:s,(s,i)=>{const c=a(),l=h(c.capabilityConnectors),d=l[e],u={providerId:s};i?.trim()?u.connectionId=i.trim():d.providerId===s&&d.connectionId&&(u.connectionId=d.connectionId),d.providerId===s&&d.remote&&(u.remote=d.remote),r({...c,capabilityConnectors:{...l,[e]:u}}),o({tomb:n,epoch:t,id:e,binding:u})}]}(e),[c,l]=function(e,t,n,s){const i=b(e),[a,o]=k.useState({phase:"idle"});return[a,async()=>{o({phase:"busy"});const e=X("about:blank");try{const a=i.authScopes?.(t),r=n&&"revoked"!==n.status?n:await Y({providerId:t,displayName:`${f(t)} (${i.title.toLowerCase()})`,scopes:a}),{authorizationUrl:c}=await Z(r.connectionId,a);e?e.location.href=c:window.location.href=c;const l=await Q(r.connectionId,e);"active"===l.result?(s(t,l.connection.connectionId),o({phase:"connected",as:l.connection.accountLabel??void 0})):o({phase:"error",text:"failed"===l.result?l.connection.statusDetail??"The provider refused authorization.":"Consent was not finished — the tab closed first. Connect again when ready."})}catch(a){e?.close(),o({phase:"error",text:a instanceof Error?a.message:"Could not authorize this connector."})}}]}(e,t,n,o),d=i.providerId===t,y=s.requiresAuth(t),x="active"===n?.status;return I.jsxs("li",{className:"xcard"+(d?" is-on":""),children:[I.jsxs("button",{type:"button",className:"xcard__pick","aria-pressed":d,onClick:()=>o(t),children:[I.jsx("span",{className:"xcard__name",children:f(t)}),I.jsx("span",{className:"xcard__kind",children:y?"account required":"no account needed"})]}),I.jsx("span",{className:"xcard__side",children:I.jsx(ye,{providerId:t,needsAuth:y,selected:d,connected:x||"connected"===c.phase,as:"connected"===c.phase?c.as:void 0,busy:"busy"===c.phase,reconnect:void 0!==n,onConnect:()=>{l()}})}),I.jsx(G,{id:`setup:connector:${t}`,title:f(t),message:"error"===c.phase?c.text:null})]})}function ge({id:e}){const t=b(e),[n,s]=k.useState([]);return k.useEffect(()=>{let e=!0;return J().then(t=>{e&&s(t)}).catch(()=>{e&&s([])}),()=>{e=!1}},[]),I.jsx("ul",{className:"xcards","aria-label":t.title,children:t.connectorIds.map(t=>I.jsx(xe,{capability:e,providerId:t,connection:n.find(e=>e.providerId===t&&"active"===e.status)},t))})}function je(){return I.jsxs(I.Fragment,{children:[I.jsxs("section",{className:"setup__stack","aria-labelledby":"setup-mfa-authenticator",children:[I.jsx("h3",{id:"setup-mfa-authenticator",className:"setup__group-title",children:"Authenticator app"}),I.jsx(ge,{id:"mfa_authenticator"})]}),I.jsxs("section",{className:"setup__stack","aria-labelledby":"setup-mfa-email",children:[I.jsx("h3",{id:"setup-mfa-email",className:"setup__group-title",children:"Email code"}),I.jsx(ge,{id:"mfa_email"})]}),I.jsxs("section",{className:"setup__stack","aria-labelledby":"setup-mfa-sms",children:[I.jsx("h3",{id:"setup-mfa-sms",className:"setup__group-title",children:"Text message"}),I.jsx(ge,{id:"mfa_sms"})]})]})}export{be as I,je as M,te as a,re as i};
@@ -0,0 +1 @@
1
+ import{r as n,j as t}from"./react-dom-BwC4eQlG.js";import{b3 as e}from"./main-BrkS-iow.js";const o=n.createContext(null);function s(){return n.useContext(o)?.openFile??null}function a({path:n,name:o}){const a=s();return null===a?null:t.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":`Open ${o}`,title:`Open ${n}`,onClick:()=>a(n),children:t.jsx(e,{size:16})})}export{a as O,o as S,s as u};
@@ -0,0 +1 @@
1
+ import{r as e,j as n}from"./react-dom-BwC4eQlG.js";import{c as l}from"./react-router-XsJY84ug.js";import{b as r}from"./InvokeScreen-C-kFFYVF.js";import{a as t}from"./idp-presets-B1M-P0Ek.js";import{b8 as s}from"./main-BrkS-iow.js";import{T as i}from"./listing-page-B-c8QQVp.js";const a=e.createContext(null);function c({children:l}){const[r,t]=e.useState(()=>new Map),s=e.useCallback(e=>{t(n=>new Map(n).set(e,!n.get(e)))},[]),i=e.useMemo(()=>({choices:r,toggle:s}),[r,s]);return n.jsx(a.Provider,{value:i,children:l})}function o(e,n){return!e||!n}function d(e,n){return e===n.href||e===n.selectTo}function u({open:e}){return n.jsx(s,{size:12,className:"railtree__caret"+(e?" is-open":"")})}function h({node:e,level:l,current:r}){const s=d(r,e),a=t(e.guide);return n.jsxs(i,{child:!0,level:l,to:e.href,label:e.title??e.label,title:e.title,navRef:a,selectTo:e.selectTo,selected:s,isActive:s,kind:e.kind,hidden:e.hidden,children:[n.jsxs("span",{className:"railtree__name",children:[e.label,e.dir?n.jsx("span",{className:"railtree__dim",children:"/"}):null]}),void 0!==e.count?n.jsx("span",{className:"railtree__count",children:e.count||"-"}):null]})}function m({node:s,level:c,current:o,children:p,empty:f}){const g=l(),{expanded:j,toggle:x}=function(n){const l=e.useContext(a),[r,t]=e.useState(!1);return{expanded:l?l.choices.get(n)??!1:r,toggle:()=>l?l.toggle(n):t(e=>!e)}}(s.href),v=d(o,s)||!j&&o===s.config,_=r(s)||"-",b=t(s.guide);return p||f||s.collection||0!==s.children.length?n.jsxs(n.Fragment,{children:[n.jsxs(i,{child:!0,level:c,to:s.href,label:s.label,navRef:b,expanded:j,selected:v,isActive:v,config:s.config,onToggle:()=>{x(),g(s.href)},children:[n.jsx(u,{open:j}),n.jsx("span",{className:"railtree__name",children:s.label}),n.jsx("span",{className:"railtree__count",children:_})]}),j?n.jsxs("div",{className:"railtree__kids",id:`${s.id}-tree`,children:[p??s.children.map(e=>n.jsx(e.branch?m:h,{node:e,level:c+1,current:o},e.id)),p||0!==s.children.length?null:f]}):null]}):n.jsx(h,{node:s,level:c,current:o})}export{m as P,h as a,c as b,o as n};
@@ -0,0 +1 @@
1
+ import{r as e,j as t}from"./react-dom-BwC4eQlG.js";import{c as n,i as s}from"./vault-ui-seam-BQGS7RR6.js";import{d as a}from"./wake-lock-C_y0fQco.js";import{f as r,ag as o,ah as i,ai as l,aj as c,a as u}from"./drop-open-BjgdLxWM.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./main-BrkS-iow.js";import"./signals-DdOHdr--.js";import"./model-provider-B6oAnQX9.js";import"./identity-BVf8yWa4.js";import"./hosted-model-authority-CcNPE44H.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./seams-DJ_lslby.js";import"./react-router-XsJY84ug.js";function d(e,t){return s(e)&&e.length>0&&e.length<=t?e:null}function m(e){if(!n(e))return null;const t=d(e.autocomplete,100),s=d(e.value,8192);return null===t||null===s?null:{autocomplete:t,value:s}}function p(e,t){return e.fields.find(e=>e.autocomplete===t)?.value}function h(e,t){const n=r("account",e.title);n.username=p(e,"username")??"",n.notes=e.notes??"",n.uris=[{id:o(),uri:t,match:"domain"}];const s=p(e,"current-password")??p(e,"password"),a=n.methods[0];s&&"password"===a?.type&&(n.methods[0]={...a,secret:s,changedAt:(new Date).toISOString()});const l=p(e,"one-time-code");if(l)try{i(l),n.methods.push({id:o(),type:"authenticator",secret:l})}catch{}return n}function f(e){const t=r("card",e.title),n=(p(e,"cc-number")??"").replaceAll(/[ -]/gu,"");t.number=n,t.brand=l(n)?.name??"",t.cardholder=p(e,"cc-name")??"",t.code=p(e,"cc-csc")??"";const s=function(e){if(!e)return null;const t=/^(\d{4})[-/](\d{1,2})$|^(\d{1,2})[-/](\d{2,4})$/u.exec(e.trim());if(!t)return null;const n=t[1]??t[4]??"",s=t[2]??t[3]??"";if(!n||!s)return null;const a=2===n.length?`20${n}`:n;return{month:s.padStart(2,"0"),year:a}}(p(e,"cc-exp"));s&&(t.expMonth=s.month,t.expYear=s.year);const a=function(e){const t=new Map([["street-address","Address"],["address-level1","State"],["address-level2","City"],["postal-code","Postal code"],["country","Country"]]),n=[];for(const s of e.fields){const e=t.get(s.autocomplete);e&&n.push(`${e}: ${s.value}`)}return n.join("\n")}(e);return t.notes=[e.notes,a].filter(Boolean).join("\n\n"),t}const v=new Set(["current-password","password","cc-number","cc-csc","crypto-recovery-seed","one-time-code"]),w=new Set(["login","credit-card","crypto-wallet"]);function g(e){return e.replaceAll(/[-_]/gu," ").replace(/\b\w/gu,e=>e.toUpperCase())}function y(){const r=a(),[o,i]=e.useState(null),[l,d]=e.useState("login"),[y,j]=e.useState(""),[b,x]=e.useState(""),[S,N]=e.useState(new Set),[_,k]=e.useState(!1),[C,$]=e.useState(null),[A,M]=e.useState(null);function O(){A||window.opener?.postMessage({type:"opensesame.save.failed",message:"Save cancelled."},y||"*"),window.close()}return e.useEffect(()=>{const e=window.opener;if(!e)return void $("Open this page from a site's Save in OpenSesame button.");const t=t=>{if(t.source!==e)return;const a=function(e){try{const t=new URL(e);return"https:"===t.protocol||"http:"===t.protocol?t.origin:null}catch{return null}}(t.origin);if(!a)return;const r=t.data;if("opensesame.save.request"===r?.type){const t=function(e){const t=function(e){if(!s(e)||e.length>131072)return null;try{const t=atob(e),n=Uint8Array.from(t,e=>e.charCodeAt(0));return JSON.parse(new TextDecoder("utf-8",{fatal:!0}).decode(n))}catch{return null}}(e);if(!n(t))return null;const a=s(t.title)?t.title.trim():"";if(0===a.length||a.length>200)return null;const r=function(e){if(!Array.isArray(e)||0===e.length)return null;if(e.length>64)return null;const t=[];for(const n of e){const e=m(n);if(null===e)return null;t.push(e)}return t}(t.fields),o=function(e){if(void 0!==e)return s(e)&&e.length<=16384?e:null}(t.notes);return null===r||null===o?null:void 0===o?{title:a,fields:r}:{title:a,fields:r,notes:o}}(String(r.request??""));if(!t||!s(o=r.itemType)||!w.has(o))return e.postMessage({type:"opensesame.save.failed",message:"The save request could not be read."},a),void $("The save request could not be read. Ask the site to try again.");i(t),x(t.title),d(r.itemType),j(a)}var o};return window.addEventListener("message",t),e.postMessage({type:"opensesame.save.ready"},"*"),()=>window.removeEventListener("message",t)},[]),t.jsxs("div",{className:"section__inner",children:[t.jsx("header",{className:"section__head",children:t.jsx("h1",{children:"Save in OpenSesame"})}),C?t.jsx("p",{className:"hint",role:"alert",children:C}):null,o||C?null:t.jsx("p",{className:"hint",children:"Waiting for the site to send the item…"}),o&&!A?t.jsxs(t.Fragment,{children:[t.jsxs("p",{className:"hint",children:["From ",t.jsx("strong",{children:y}),". Review it before saving."]}),t.jsx("label",{className:"label",htmlFor:"save-title",children:"Name"}),t.jsx("input",{id:"save-title",className:"input",value:b,maxLength:200,onChange:e=>x(e.target.value)}),t.jsxs("section",{className:"detail__group","aria-label":"Fields to save",children:[t.jsx("h2",{className:"detail__grouphead",children:"Fields"}),o.fields.map((e,n)=>{const s=`${n}:${e.autocomplete}`,a=v.has(e.autocomplete);return t.jsxs("div",{className:"frow",children:[t.jsx("span",{className:"frow__label",children:g(e.autocomplete)}),t.jsx("span",{className:"frow__value",children:a&&!S.has(s)?"••••••••":e.value}),a?t.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":`${S.has(s)?"Hide":"Show"} ${g(e.autocomplete)}`,onClick:()=>(e=>N(t=>{const n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}))(s),children:S.has(s)?"Hide":"Show"}):null]},s)})]}),o.notes?t.jsxs("section",{className:"detail__group",children:[t.jsx("h2",{className:"detail__grouphead",children:"Notes"}),t.jsx("p",{className:"frow__notes",children:o.notes})]}):null,t.jsxs("div",{className:"actions",children:[t.jsx("button",{type:"button",className:"btn btn--sm",disabled:_,onClick:()=>{!async function(){if(o&&y){k(!0),$(null);try{const e=await async function(e,t,n){if("login"===t)return{item:h(e,n)};if("credit-card"===t)return{item:f(e)};try{const t=await async function(e){const t=await c("crypto-wallet");return u(t,{walletName:e.title,network:"",recoveryPhrase:p(e,"crypto-recovery-seed")??"",privateKey:"",pin:"",addresses:p(e,"crypto-address")?[p(e,"crypto-address")??""]:[],derivationPath:""},e.title)}(e);return t?{item:t}:{error:"This build cannot install the crypto-wallet item type."}}catch{return{error:"This build cannot install the crypto-wallet item type."}}}({...o,title:b.trim()||o.title},l,y);if("error"in e)return $(e.error),void window.opener?.postMessage({type:"opensesame.save.failed",message:e.error},y);await r.saveItem(e.item),M(e.item.id),window.opener?.postMessage({type:"opensesame.save.saved",itemId:e.item.id},y)}catch{const e="The item could not be saved. Nothing was changed.";$(e),window.opener?.postMessage({type:"opensesame.save.failed",message:e},y)}finally{k(!1)}}}()},children:_?"Saving…":"Save"}),t.jsx("button",{type:"button",className:"btn btn--ghost btn--sm",disabled:_,onClick:O,children:"Cancel"})]})]}):null,A?t.jsxs("div",{className:"actions",children:[t.jsx("output",{className:"hint",children:"Saved to this vault."}),t.jsx("a",{className:"btn btn--sm",href:`/OpenSesame/vault/${A}`,children:"Open item"}),t.jsx("button",{type:"button",className:"btn btn--ghost btn--sm",onClick:O,children:"Close"})]}):null]})}export{y as SaveRequestScreen};
@@ -0,0 +1 @@
1
+ .capspanel{display:grid;gap:.75rem;min-width:0;margin:0;padding:0;list-style:none}.capspanel__notice{display:flex;align-items:center;gap:.5rem;margin:0;font-family:var(--mono);font-size:.8125rem}.capspanel__head{display:flex;align-items:center;justify-content:space-between;gap:.6rem;flex-wrap:wrap;min-width:0}.capsections{display:grid;gap:1.5rem;min-width:0}.capsection{display:grid;gap:0;min-width:0}.capsection>*+*{margin-top:.75rem}.capsection>.capsection__caps{margin-top:0}.capsection__head{display:flex;align-items:center;gap:.75rem;padding:.2rem 0 .6rem;border-bottom:1px solid var(--line)}.capsection__title{margin:0;font-size:.9375rem;color:var(--ink)}.capsection__titlelink{display:inline-flex;flex:1;align-items:center;gap:.35rem;min-width:0;color:inherit;text-decoration:none}.capsection__titlelink:hover .capsection__title{text-decoration:underline;text-underline-offset:2px}.capsection__head>:last-child:not(.capsection__title):not(.capsection__titlelink){margin-left:auto}.capsection__link{display:flex;align-items:center;gap:.35rem;width:100%;min-width:0;color:inherit;text-decoration:none}.capsection__link:hover .sw__name{text-decoration:underline;text-underline-offset:2px}.capsection__go{flex:none;color:var(--ink-3)}.capsection__link:hover .capsection__go,.capsection__titlelink:hover .capsection__go{color:var(--ink)}.capsection__controls{display:inline-flex;align-items:center;gap:.4rem}.capsection__all{color:var(--ink-2);font-size:.8125rem}.capsection__caps{display:grid;margin:0;padding:0;list-style:none}.capsection__cap{margin:0;padding:.7rem 0}.capsection__cap:last-child{border-bottom:0}.capsections+.capsection{margin-top:1.5rem}.feature-config__back{display:inline-flex;align-items:center;gap:.3rem;margin-bottom:.35rem;color:var(--ink-2);font-size:.8125rem;text-decoration:none}.feature-config__back:hover{color:var(--ink)}.feature-config .panel__head{align-items:flex-start}.feature-config .panel__head h2{margin-top:0}@media(pointer:coarse),(max-width:900px){.capsection__titlelink{min-height:2.75rem}}@media(max-width:900px){.capsection__cap .sw__name{overflow-wrap:anywhere}}.feature-config #trusted-contacts>.panel__head{display:none}.itype-panel{min-width:0}.itype-panel .panel__head{align-items:baseline}.itype-panel .panel__head h2{flex:none}.itype-head__end{display:inline-flex;flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.5rem;min-width:0;text-align:right}.itype-count{font-family:var(--mono);font-size:.75rem;color:var(--ink-3);font-variant-numeric:tabular-nums}.itype-tabpanel{display:grid;gap:1.25rem}.itype-list{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}.itype,.itype-source{border-bottom:1px solid var(--line)}.itype__row,.itype-source{display:grid;grid-template-columns:5.5rem minmax(0,1fr) auto;align-items:center;gap:.25rem .75rem;min-height:3.25rem;padding:.5rem 0}.itype__ext{align-self:start;padding-top:.1rem;font-family:var(--mono);font-size:.8125rem;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.itype__text{display:flex;min-width:0;flex-direction:column;gap:2px}.itype__name{font-size:.9rem;font-weight:600;color:var(--ink)}.itype__name--mono{font-family:var(--mono);font-size:.8125rem;overflow-wrap:anywhere}.itype__summary{max-width:58ch;font-family:var(--font);font-size:.8125rem;line-height:1.45;color:var(--ink-2)}.itype__meta{font-family:var(--mono);font-size:.75rem;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.itype__end{display:inline-flex;align-items:center;gap:.25rem}.itype__end .status-mark{margin-right:.25rem}@media(pointer:coarse),(max-width:900px){.itype__end .status-mark[data-touch-twin]{margin-right:-.5rem}}.itype__fields{display:grid;grid-template-columns:repeat(auto-fill,minmax(14rem,1fr));gap:.2rem 1.25rem;margin:0 0 .75rem 6.25rem;padding:.5rem 0 0;list-style:none;border-top:1px dashed var(--line);font-size:.8125rem}.itype__fields li{display:flex;align-items:center;gap:.5rem;min-width:0}.itype__fields code{font-family:var(--mono);font-size:.75rem;color:var(--ink-3)}.itype__concealed{display:inline-flex;color:var(--ink-3)}.itype-sources{display:grid;gap:.75rem}.itype-source{grid-template-columns:2rem minmax(0,1fr) auto}.itype-source__mark{display:grid;place-items:center;width:2rem;height:2rem;border:1px solid var(--line-strong);border-radius:var(--radius);color:var(--ink-2)}.itype-source[aria-busy=true] .itype__meta{color:var(--ink-2)}.itype-sources__file{display:flex;align-items:center;gap:.4rem;font-family:var(--mono);font-size:.8125rem;color:var(--ink-2)}.itype-sources__foot{display:flex;align-items:flex-end;gap:.5rem}.itype-add{flex:1;min-width:0}.itype-offers{display:grid;gap:.35rem}.itype-offers__head{display:flex;align-items:baseline;gap:.5rem;margin:0;font-family:var(--mono);font-size:.8125rem;font-weight:600;color:var(--ink)}.itype-empty{max-width:58ch;margin:0;font-size:.875rem;color:var(--ink-2)}@media(max-width:560px){.itype__row,.itype-source{grid-template-columns:4rem minmax(0,1fr)}.itype-source{grid-template-columns:2rem minmax(0,1fr)}.itype__end{grid-column:2;justify-self:start;flex-wrap:wrap}.itype__fields{grid-template-columns:minmax(0,1fr);margin-left:4.75rem}}.pack-list{display:grid;gap:1.25rem;min-width:0}.pack-group{display:grid;min-width:0}.pack-group__head{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.pack-group__label{margin:0 0 .35rem;font-family:var(--mono);font-size:.75rem;font-weight:600;color:var(--ink-3)}.pack-group__head .pack-group__label{margin:0}.pack{border-bottom:1px solid var(--line)}.pack__hit{display:grid;grid-template-columns:5.5rem minmax(0,1fr) auto;align-items:center;gap:.25rem .75rem;width:100%;min-height:3.5rem;padding:.5rem 0;border:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}.pack--fixed .pack__hit{cursor:default}.pack__hit:active{background:var(--surface-3)}.pack--fixed .pack__hit:active{background:transparent}.pack__summary{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pack__end{display:inline-flex;align-items:center;gap:.6rem}.pack__track{position:relative;flex:none;width:2.4rem;height:1.4rem;border:1px solid var(--line-strong);border-radius:0;background:var(--surface-3);transition:background .14s var(--ease),border-color .14s var(--ease)}.pack__track:after{content:"";position:absolute;top:1px;left:1px;width:1.15rem;height:1.15rem;border-radius:0;background:var(--surface);box-shadow:var(--shadow-sm);transition:transform .16s var(--ease)}.pack__hit[aria-checked=true] .pack__track{background:var(--accent);border-color:transparent}.pack__hit[aria-checked=true] .pack__track:after{transform:translate(1rem)}.pack__hit[aria-busy=true] .pack__track{opacity:.55}.pack__spin{flex:none;width:.9rem;height:.9rem;border:2px solid var(--line-strong);border-top-color:var(--ink);border-radius:0;animation:pack-spin .8s linear infinite}@keyframes pack-spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.pack__spin{animation:none;border-style:dotted;border-top-color:var(--line-strong)}.pack__track,.pack__track:after{transition:none}}.pack__held{min-width:2.4rem;font-family:var(--mono);font-size:.8125rem;font-variant-numeric:tabular-nums;text-align:center;color:var(--ink-2)}@media(max-width:560px){.pack__hit{grid-template-columns:4rem minmax(0,1fr) auto;gap:.25rem .6rem}.pack__summary{display:none}}.pack-search .f__labelrow{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.travel__list{display:grid;gap:.4rem;margin:0;padding:0;list-style:none}.travel__row{display:grid;grid-template-columns:1fr auto;align-items:center;gap:.35rem .6rem;padding:.55rem .6rem .55rem .75rem;border:1px solid var(--line);border-radius:var(--radius);background:var(--surface)}.travel__name{display:grid;gap:.1rem;min-width:0}.travel__name strong{font-size:.9375rem;overflow-wrap:anywhere}.travel__name span{font-family:var(--mono);font-size:.75rem;color:var(--ink-3)}.travel__side{display:inline-flex;align-items:center;gap:.4rem}.travel__code{margin:0;font-family:var(--mono);font-size:1.0625rem;letter-spacing:.06em;overflow-wrap:anywhere;-webkit-user-select:all;user-select:all}.travel__file{position:relative;overflow:hidden}.travel__file input[type=file]{position:absolute;inset:-1px;width:calc(100% + 2px);height:calc(100% + 2px);opacity:0;cursor:pointer}.travel__ack{display:flex;align-items:flex-start;gap:.5rem;font-size:.9375rem}
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/main-BKK5N8Uh.css","assets/InvokeScreen-CsvSkues.css","assets/gate-seat-D6oRkKUH.css","assets/scroll-renderer-CPup0pR-.css","assets/byo-CDLRauwG.css","assets/iam-0IMZ11b6.css","assets/use-password-reset-generate-D7yK7QdU.css","assets/KeybindingsPanels-Buh32SBq.css"])))=>i.map(i=>d[i]);
2
+ import{_ as e}from"./hosted-model-authority-CcNPE44H.js";import{r as t,j as n}from"./react-dom-BwC4eQlG.js";import{L as s,c as a,u as i,a as r}from"./react-router-XsJY84ug.js";import{C as o,B as l,g as c,b as d,I as u,P as p}from"./BackupEnableSwitch-DwKTWzBG.js";import{h as f,k as m,u as h}from"./listing-page-B-c8QQVp.js";import{b,l as g,M as y,A as v,c as j,d as k,K as x,I as w,e as _,f as N,D as $,g as S,a as C,h as I,i as A,j as T,k as O,u as z,m as R,n as P}from"./use-settings-category-Dy0gsCtF.js";import{V as L,L as E,B as M,a6 as F,a7 as B,t as D}from"./identity-view-paths-Bi1yigZk.js";import{B as K,I as V,p as U,u as J}from"./use-integrations-drawn-DYzpglrK.js";import{i as q,X as H,at as W,e as G,z as Y,o as Q,m as Z,K as X,O as ee,Q as te,v as ne,y as se,en as ae,dm as ie,dV as re,W as oe,aF as le,b8 as ce,bF as de,u as ue,d3 as pe,aA as fe,_ as me,eo as he,ep as be,eq as ge,ek as ye,g as ve,bV as je,er as ke,es as xe,et as we,eu as _e,ev as Ne,ew as $e,aj as Se,bW as Ce,aE as Ie,be as Ae,ex as Te,ai as Oe,b9 as ze,dL as Re,dK as Pe,cl as Le,bY as Ee,cz as Me,ey as Fe,ez as Be,eA as De,eB as Ke,bo as Ve,eC as Ue,eD as Je,eE as qe,eF as He,eG as We,eH as Ge,eI as Ye,eJ as Qe,eK as Ze,bd as Xe,a8 as et,eL as tt}from"./main-BrkS-iow.js";import{u as nt,z as st,G as at}from"./idp-presets-B1M-P0Ek.js";import{l as it,b as rt,r as ot,s as lt,v as ct}from"./vaults-B043odav.js";import{u as dt,d as ut,F as pt}from"./wake-lock-C_y0fQco.js";import{o as ft,c as mt,i as ht,a as bt,b as gt,B as yt,a6 as vt,l as jt}from"./vault-ui-seam-BQGS7RR6.js";import{e as kt,s as xt,O as wt,a9 as _t,W as Nt,a0 as $t,S as St,aa as Ct,ab as It,ac as At}from"./signals-DdOHdr--.js";import{u as Tt,k as Ot,w as zt,r as Rt,V as Pt,m as Lt,R as Et,y as Mt,v as Ft,a1 as Bt,a2 as Dt,a3 as Kt,j as Vt,a4 as Ut}from"./model-provider-B6oAnQX9.js";import{aE as Jt,aF as qt,cF as Ht,x as Wt,cC as Gt,dU as Yt,dV as Qt,H as Zt,dA as Xt,ek as en,fb as tn,d as nn,s as sn,fc as an,fd as rn,an as on,fe as ln,ff as cn,fg as dn,fh as un,fi as pn,fj as fn,fk as mn,c as hn,aJ as bn,fl as gn,aK as yn,i as vn,fm as jn,fn as kn,fo as xn,fp as wn,G as _n,a_ as Nn,fq as $n,a2 as Sn,fr as Cn,fs as In,ft as An,v as Tn,cK as On,fu as zn,fv as Rn,c$ as Pn,af as Ln,ae as En}from"./drop-open-BjgdLxWM.js";import{C as Mn}from"./MethodPicker-CqQTyAaT.js";import{C as Fn,S as Bn,a as Dn,f as Kn}from"./InvokeScreen-C-kFFYVF.js";import{P as Vn,o as Un}from"./vault-menu-CqO_AStq.js";import{p as Jn,e as qn,V as Hn,f as Wn,g as Gn,h as Yn,i as Qn,j as Zn,P as Xn,l as es,n as ts,t as ns,o as ss}from"./use-password-reset-generate-B11XaeM6.js";import{f as as,Q as is,a6 as rs,a7 as os}from"./identity-BVf8yWa4.js";import{v as ls,i as cs,j as ds,k as us,l as ps,u as fs}from"./payload-CVz3G9cA.js";import{c as ms,u as hs,F as bs,s as gs,n as ys,d as vs,b as js,f as ks,h as xs,a as ws,w as _s}from"./features-9FeW22VH.js";import{a as Ns}from"./catalog-Y21H0gVA.js";import{a as $s,S as Ss,u as Cs,C as Is,s as As,t as Ts,c as Os,B as zs,F as Rs,W as Ps}from"./FeatureSections-BG-JsWID.js";import{L as Ls,S as Es,v as Ms,i as Fs,j as Bs}from"./section-nav-goals-B_N-ZW2I.js";import{g as Ds,b as Ks}from"./local-vault-sessions-CGv9AsFj.js";import{u as Vs,c as Us}from"./shared-Ck7e2FJN.js";import{j as Js}from"./native-catalog-status-INsDvLpU.js";import"./connector-directory-gjDOqgWh.js";import{O as qs,u as Hs,S as Ws}from"./OpenFileKey-DKFq5mOf.js";import{b as Gs,g as Ys}from"./native-worker-noble-hashes-b1a58353-IgGIMWEC.js";import{V as Qs,s as Zs}from"./settings-files-OnHfWPp_.js";import"./pane-trail-dW-2RSUm.js";import{s as Xs,k as ea}from"./vault-list-path-Bh2_KZkq.js";/* empty css */import"./github-app-local-B-4pPsY4.js";import"./native-worker-zod-5c0ed887-B342B6ko.js";import"./native-worker-zod-jitless-ba55e4a3-DZHC6DC7.js";import"./certs-CDCfMuEi.js";import"./bucket-saved-vQCiVvN_.js";import"./native-worker-bytes-a0e18d71-DFmKzL3P.js";import"./runtime-2tzejM54.js";import"./compartment-guard-D3FuKM8N.js";import"./seams-DJ_lslby.js";import"./native-worker-noble-ciphers-708367a7-BPuD3lXB.js";import"./connectivity-monitor-B0ueE5HQ.js";import"./IdentityConnectionSignIn-Bg53RjtJ.js";import"./federation-configured-restoration-DWAXgzcz.js";import"./entra-instances-NyEKYI5c.js";import"./tailscale-artifacts-FyY85j_Y.js";import"./vault-credential-custody-DpnBb4qo.js";import"./native-auth-return-BTXjvSvx.js";import"./gate-seat-DHBrLaMG.js";import"./support-context-DrcseTKK.js";import"./consent-CcqmRPoB.js";import"./scroll-renderer-CPxIcBzQ.js";import"./rotation-relay-DCS7Aa59.js";import"./native-identity-admission-C4ZFillF.js";import"./byo-B-SNpHiS.js";import"./iam-zBfzStfy.js";import"./directory-signin-model-BfxENbC3.js";const ta=new Set(["__proto__","constructor","prototype"]);function na(e){return e.length<=128?e:[...e.slice(0,128),{severity:"error",code:"too_many_diagnostics",message:"Stopped after 128 diagnostics."}]}function sa(e,t,n){e.length>128||e.push({severity:"error",code:t,message:n})}function aa(e,t){if(t>32)return 4097;if(cs(e)){const n=e;let s=n.items.length;for(const e of n.items)s+=aa(ft(e.value),t+1);return s}if(ds(e)){const n=e;let s=n.items.length;for(const e of n.items)s+=aa(ft(e),t+1);return s}return 0}function ia(e,t){if(null==e)return null;if(us(e))return sa(t,"alias_forbidden","YAML aliases and anchors are not supported."),null;if(ps(e)){const t=ft(e);return ft(t.value??null)}if(cs(e)){const n=Object.create(null),s=e;for(const e of s.items){if(!ps(e.key)){sa(t,"non_string_key","Mapping keys must be strings.");continue}const s=ft(e.key.value);if(!ht(s)){const e=JSON.stringify(String(s));sa(t,"non_string_key",`Mapping keys must be strings: write ${e} in quotes.`);continue}const a=s;ta.has(a)?sa(t,"dangerous_key",`Key "${a}" is not allowed.`):n[a]=ia(ft(e.value),t)}return n}return ds(e)?e.items.map(e=>ia(ft(e),t)):null}function ra(e){const t=[];if((new TextEncoder).encode(e).byteLength>262144)return sa(t,"too_large","Document exceeds 262144 bytes."),{ok:!1,diagnostics:na(t)};const n={prettyErrors:!0,uniqueKeys:!0,schema:"core",logLevel:"silent",strict:!0,merge:!1},s=Jn(e,n);if(s.length>1)return sa(t,"multi_document","Multi-document YAML streams are not supported."),{ok:!1,diagnostics:na(t)};const a=1===s.length?s[0]:qn(e,n);for(const l of a.errors)sa(t,"yaml_error",l.message);ls(a,{Pair(e,n){const s=ft(n),a=function(e){if(!bt(e)||null===e||Array.isArray(e))return;if(!("tag"in e))return;const t=ft(e).tag;return ht(t)?t:void 0}(ft(s.value));void 0===a||"!"===a||a.startsWith("tag:yaml.org,2002:")||sa(t,"custom_tag",`Custom YAML tag "${a}" is not supported.`),ps(s.key)&&"<<"===ft(s.key).value&&sa(t,"merge_key","YAML merge keys are not supported.")}}),a.contents&&aa(ft(a.contents),0)>4096&&sa(t,"too_many_entries","Collections exceed 4096 entries.");const i=t.some(e=>"error"===e.severity);if(!cs(a.contents)&&null!==a.contents)return sa(t,"root_not_map","The document root must be a mapping."),{ok:!1,diagnostics:na(t)};const r=ia(ft(a.contents),t),o=mt(r)?r:{};return i||t.some(e=>"error"===e.severity)?{ok:!1,diagnostics:na(t),value:o}:{ok:!0,document:a,value:o,diagnostics:na(t)}}const oa=new Map([["backups","backups"],["cloud-secrets","cloud-secret-storage"]]),la=new Set(V.flatMap(e=>e.providerCategories));function ca(e,t,n){return`/settings/${e}${t}${n?`#${n}`:""}`}function da(e){return"person"===e.kind&&e.enabled&&!Qt(e)}function ua(e){const t=new Set(e.memberships.filter(e=>"owner"===e.role).map(e=>e.principalId));return e.entries.filter(e=>"person"===e.kind&&e.enabled&&t.has(e.id))}async function pa(t,n){const s=ua(n);try{const{currentLocalIdentitySession:n,listLocalIdentitySessions:a}=await e(async()=>{const{currentLocalIdentitySession:e,listLocalIdentitySessions:t}=await import("./local-applications-rigvedS6.js").then(e=>e.z);return{currentLocalIdentitySession:e,listLocalIdentitySessions:t}},[]);for(const e of await a(t)){const a=await n(t,e.principalId);if(a)return s.find(e=>e.id===a.principalId)}}catch{}return 1===s.length?s[0]:void 0}function fa({label:e,recipients:s,onClose:a}){const{tomb:i}=dt(),[r,o]=t.useState(null),[l,c]=t.useState(""),[d,u]=t.useState(!1),[p,f]=t.useState(null);q("vault-transfer","Ownership not transferred",p);const m=s.find(e=>e.id===r),h=void 0!==m&&l===m.name,b=()=>{m&&i&&(u(!0),f(null),async function(e,t){await Ht(e,"manage_memberships");const n=await pa(e,await Wt(e));if(!n)throw new kt("Only the vault's owner can transfer it.");return Gt(e,async()=>{let s=await Wt(e);if(!ua(s).some(e=>e.id===n.id))throw new kt("Only the vault's owner can transfer it.");const a=s.entries.find(e=>e.id===t);if(!a||!da(a))throw new kt("Choose a registered user of this vault.");if(a.id===n.id)throw new kt("That user already owns this vault.");const i=s.memberships.filter(e=>e.principalId===n.id&&"owner"===e.role);for(const t of i)s=await Yt(e,s.revision,{action:"membership",organizationId:t.organizationId,principalId:a.id,role:"owner"});const r=Qt(n)?"member":"admin";for(const t of i)s.memberships.some(e=>e.organizationId===t.organizationId&&e.principalId===n.id&&"owner"===e.role)&&(s=await Yt(e,s.revision,{action:"membership",organizationId:t.organizationId,principalId:n.id,role:r}));return s})}(i,m.id).then(a).catch(e=>{f(e instanceof kt?e.message:"The vault's ownership could not be transferred."),u(!1)}))};return n.jsx(Mn,{title:"Transfer ownership",mark:n.jsx(W,{size:20}),onClose:a,children:n.jsxs(Fn,{name:e,facts:[{key:"New owner",value:m?.name??"—"},{key:"You become",value:"admin"},{key:"Vault key",value:"not moved"}],primary:{label:"Transfer ownership",icon:n.jsx(W,{size:16}),tone:"danger",busy:d,disabled:!h,onClick:b},children:[n.jsx("div",{className:"transfer-choices",role:"radiogroup","aria-label":"New owner",children:s.map(e=>n.jsx("button",{type:"button",className:"transfer-choice","aria-pressed":e.id===r,onClick:()=>{o(e.id),c("")},children:e.name},e.id))}),m?n.jsx(H,{id:"transfer-vault-confirm",label:`Type ${m.name} to confirm`,autoComplete:"off",value:l,onValueChange:c,onEnter:()=>{h&&b()}}):null]})})}function ma(){const e=function(){const{tomb:e}=dt(),[n,s]=t.useState([]);return t.useEffect(()=>{let t=!0;const n=()=>{e?Wt(e).then(async n=>{const a=await async function(e,t){const n=await pa(e,t);if(!n)return[];const s=await Jt(e);return qt(s,"manage_memberships")?function(e,t){return e.entries.filter(e=>da(e)&&e.id!==t)}(t,n.id):[]}(e,n);t&&s(a)}).catch(()=>{t&&s([])}):s([])},a=xt(n);return n(),()=>{t=!1,a()}},[e]),n}(),[s,a]=t.useState(!1);if(0===e.length)return null;const i=it().find(e=>"open"===e.state)?.label??"this vault";return n.jsxs("section",{className:"panel set__danger",id:"settings-transfer-vault",children:[n.jsx("div",{className:"panel__head",children:n.jsx("div",{children:n.jsx("h2",{children:"Transfer ownership"})})}),n.jsx("div",{className:"panel__body",children:n.jsxs("div",{className:"keyed-row",children:[n.jsxs("p",{className:"set__danger-target",children:[n.jsx("strong",{children:i}),` · ${e.length} ${1===e.length?"user":"users"} can receive it`]}),n.jsx(G,{label:"Transfer ownership",onClick:()=>a(!0),children:n.jsx(W,{size:16})})]})}),s?n.jsx(fa,{label:i,recipients:e,onClose:()=>a(!1)}):null]})}function ha(e){return null!=e.deletedAt}function ba({confirmDestroy:e,count:t,onArm:s,onCancel:a,onDestroy:i}){return n.jsxs("section",{className:"panel set__danger",id:"settings-delete-vault",children:[n.jsx("div",{className:"panel__head",children:n.jsx("div",{children:n.jsx("h2",{children:"Delete this vault"})})}),n.jsx("div",{className:"panel__body",children:n.jsxs("div",{className:"keyed-row",children:[n.jsxs("p",{className:"set__danger-target",children:[n.jsx("strong",{children:it().find(e=>"open"===e.state)?.label??"this vault"}),e?` · ${t} will be unrecoverable. Export first if you are not certain.`:` · ${t}`]}),e?n.jsxs(n.Fragment,{children:[n.jsx(G,{label:"Delete permanently",armed:!0,onClick:i,children:n.jsx(Y,{size:16})}),n.jsx(G,{label:"Cancel",onClick:a,children:n.jsx(Q,{size:16})})]}):n.jsx(G,{label:"Delete this vault",onClick:s,children:n.jsx(Y,{size:16})})]})})]})}function ga({armPurge:e,purgeArmedId:t,purge:s,restore:a,trashed:i}){return n.jsx("ul",{className:"set__trash-list",children:i.map(i=>{const r=t===i.id;return n.jsxs("li",{className:"set__trash-row",children:[n.jsx("span",{className:"set__trash-name",children:i.name}),n.jsx("span",{className:"set__trash-when",children:new Date(i.deletedAt??"").toLocaleDateString()}),n.jsxs("span",{className:"set__trash-keys",children:[n.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":`Restore ${i.name}`,title:`Restore ${i.name}`,onClick:()=>a(i.id),children:n.jsx(Z,{size:15})}),n.jsx("button",{type:"button",className:"icon-btn icon-btn--sm"+(r?" is-armed":""),"aria-label":r?Vn:`Delete ${i.name} permanently`,title:r?Vn:`Delete ${i.name} permanently`,onClick:()=>{r?s(i.id):e(i.id)},children:n.jsx(Y,{size:15})})]})]},i.id)})})}function ya(){const{items:e}=dt(),s=ut(),[a,i]=t.useState(!1),[r,o]=t.useState(!1),[l,c]=t.useState(null),d=Zt(e),u=d.filter(ha),p=`${d.length} ${1===d.length?"item":"items"} (${u.length} in trash)`,f=`${u.length} ${1===u.length?"item":"items"}`;return n.jsxs(n.Fragment,{children:[n.jsx(ma,{}),n.jsx(ba,{confirmDestroy:a,count:p,onArm:()=>i(!0),onCancel:()=>i(!1),onDestroy:()=>{s.destroy()}}),n.jsxs("section",{className:"panel set__danger",id:"settings-trash",children:[n.jsx("div",{className:"panel__head",children:n.jsx("div",{children:n.jsx("h2",{children:"Trash"})})}),n.jsx("div",{className:"panel__body",children:0===u.length?n.jsx("p",{className:"set__danger-target",children:"Trash is empty."}):n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"keyed-row",children:[n.jsxs("p",{className:"set__danger-target",children:[f," in the trash",r?" · emptying is unrecoverable. Export first if you are not certain.":""]}),r?n.jsxs(n.Fragment,{children:[n.jsx(G,{label:"Empty the trash",armed:!0,onClick:()=>{o(!1),c(null),s.emptyTrash()},children:n.jsx(Y,{size:16})}),n.jsx(G,{label:"Cancel",onClick:()=>o(!1),children:n.jsx(Q,{size:16})})]}):n.jsx(G,{label:"Empty the trash",onClick:()=>{c(null),o(!0)},children:n.jsx(Y,{size:16})})]}),n.jsx(ga,{armPurge:e=>{o(!1),c(e)},purgeArmedId:l,purge:e=>{c(null),s.purgeItem(e)},restore:e=>{c(null),s.restoreItem(e)},trashed:u})]})})]})]})}function va(e,t=16){const n=e.parentElement;if(!n||n.scrollWidth<=n.clientWidth)return;const s=n.getBoundingClientRect(),a=e.getBoundingClientRect();a.left>=s.left+t&&a.right<=s.right-t||(n.scrollLeft+=a.left-(s.left+t))}function ja(e){const t=e.id.slice(-4);return e.createdAt?`Added ${new Date(e.createdAt).toLocaleDateString(void 0,{day:"numeric",month:"short",year:"numeric"})} · key ${t}`:`Key ${t}`}function ka({busy:e,closed:s,onOpen:a}){const i=b(),r=nt("settings.account-factors"),{list:o,refusal:l}=function(e,n){const[s,a]=t.useState(null),[i,r]=t.useState(null);return t.useEffect(()=>{if(!e)return;let t=!0;return g().then(e=>{t&&(a(e),r(null))},e=>{t&&(a(null),r(e instanceof Error?e.message:String(e)))}),()=>{t=!1}},[e,n]),{list:s,refusal:i}}(i,s),c=t.useRef(null);!function(e,n,s){t.useEffect(()=>{if(0===s||!n)return;const t=document.activeElement;t&&t!==document.body||ee(te(e.current))},[e,n,s])}(c,o,s);const d=i?st():null;return n.jsxs(n.Fragment,{children:[n.jsx(X,{id:"settings:account-factors",title:"Account factors",message:i?l:null}),i?n.jsxs("section",{className:"panel set__security",id:"account-factors","aria-label":"Your account",ref:r,children:[n.jsxs("div",{className:"panel__head",children:[n.jsxs("div",{children:[n.jsx("h2",{children:"Your account"}),d?n.jsxs("p",{className:"hint",children:["Signed in as ",d.name,"."]}):null]}),l?n.jsx(Bn,{tone:"err",label:l}):null]}),n.jsx("div",{className:"panel__body",ref:c,children:o?n.jsx(wa,{list:o,busy:e,onOpen:a}):null})]}):null]})}function xa(e,t,s){return n.jsx(G,{label:e?"Remove":"Add",small:!0,disabled:t,onClick:s,children:n.jsx(e?Y:ne,{size:16})})}function wa({list:e,busy:t,onOpen:s}){const a=e.factors.filter(e=>"passkey"===e.kind),i=e.factors.find(e=>"totp"===e.kind),r=t=>e.enrollable.includes(t),o=[...a.length>0?["passkey"]:[],...i?["totp"]:[]];return n.jsxs(n.Fragment,{children:[a.map(e=>n.jsx(y,{kind:"account-passkey",label:v["account-passkey"],state:"On",on:!0,sub:ja(e),action:xa(!0,t,()=>s({kind:"account-passkey",view:"remove",factor:{id:e.id,name:`Passkey · ${ja(e)}`,proofs:o}}))},e.id)),r("passkey")?n.jsx(y,{kind:"account-passkey",label:a.length>0?"Another account passkey":v["account-passkey"],state:"Off",on:!1,sub:"Face, fingerprint or a security key, for your account.",action:xa(!1,t,()=>s({kind:"account-passkey",view:"add"}))}):null,i||r("totp")?n.jsx(y,{kind:"account-totp",label:v["account-totp"],state:i?"On":"Off",on:Boolean(i),sub:i?"Codes from the app on your phone, for your account.":"Codes from an app on your phone, for your account.",action:xa(Boolean(i),t,()=>s(i?{kind:"account-totp",view:"remove",factor:{id:i.id,name:"Authenticator app · your account",proofs:o}}:{kind:"account-totp",view:"add"}))}):null]})}function _a({secondSteps:e,hasService:t,service:s,busy:a,open:i}){const r=e.includes("email")||e.includes("sms");return n.jsxs(n.Fragment,{children:[n.jsx(Na,{channel:"email",label:"Email code",on:e.includes("email"),hasService:t,busy:a,open:i}),n.jsx(Na,{channel:"sms",label:"Text message",on:e.includes("sms"),hasService:t,busy:a,open:i}),n.jsx(y,{kind:"service",label:"Sign-in service",state:t?"Set":"Off",on:t,sub:t?`${s}. Sends email and text codes.`:"Where email and text codes are requested from.",action:t?n.jsxs("div",{className:"actions",children:[r?null:n.jsx(G,{label:"Change",small:!0,disabled:a,onClick:i("service","change"),children:n.jsx(se,{size:16})}),r||ae()?null:n.jsx(G,{label:"Remove",small:!0,disabled:a,onClick:i("service","remove"),children:n.jsx(Y,{size:16})})]}):n.jsx(G,{label:"Add",small:!0,disabled:a,onClick:i("service","add"),children:n.jsx(ne,{size:16})})})]})}function Na({channel:e,label:t,on:s,hasService:a,busy:i,open:r}){return n.jsx(y,{kind:e,label:t,state:s?"On":"Off",on:s,sub:a?s?"Offered at step 2. Sent by your sign-in service.":"For a lost phone. Sent by your sign-in service to an address you confirm.":"Needs a sign-in service to send it.",action:n.jsx(G,{label:s?"Remove":a?"Add":"Set sign-in service",small:!0,disabled:i,onClick:a?r(e,s?"remove":"add"):r("service","add"),children:n.jsx(s?Y:ne,{size:16})})})}function $a({busy:e,onAddKey:t}){const s=n.jsx(G,{label:"Add",small:!0,disabled:e,onClick:t,children:n.jsx(ne,{size:16})});return n.jsxs(n.Fragment,{children:[n.jsxs("section",{className:"panel set__security",id:"duress-after-key",children:[n.jsx("div",{className:"panel__head",children:n.jsx("div",{children:n.jsx("h2",{children:"Duress"})})}),n.jsx("div",{className:"panel__body",children:n.jsx(y,{kind:"duress",label:"Duress code",state:"Off",on:!1,sub:"After a key. Add sets the key first.",action:s})})]}),n.jsxs("section",{className:"panel set__security",id:"travel-after-key",children:[n.jsx("div",{className:"panel__head",children:n.jsx("div",{children:n.jsx("h2",{children:"Travel"})})}),n.jsx("div",{className:"panel__body",children:n.jsx(Dn,{icon:n.jsx(ie,{size:16}),label:"Leave items at home",mark:null,sub:"After a key. Add sets the key first.",action:s})})]})]})}const Sa="enroll-passkey",Ca="unlock-methods";function Ia(){const{header:e,guest:s,decoy:a}=dt(),i=ut(),r=Xt(e),o=en(e),l=Boolean(e?.unlocks?.recovery),c=as(),d=re(),u=r.length>0,p=oe()?.email??null,[f,m]=t.useState(!1),[h,b]=t.useState(""),[g,v]=t.useState(null),[w,_]=t.useState(0),[N,$]=t.useState(()=>tn()),S=nt("settings.second-step"),C=nt("settings.recovery");t.useEffect(()=>{$(tn())},[]);const I=t.useCallback(async(e,t)=>{nn(Ca),b(""),m(!0);try{await e(),null!==t&&b(t)}catch(n){sn({id:Ca,tone:"err",title:"Unlock methods",body:n instanceof an||n instanceof j?n.message:rn(n instanceof Error?n:"Unknown WebAuthn error")})}finally{m(!1)}},[]),A=r.includes("passkey");t.useEffect(()=>{if(A||f)return;const e=new URL(window.location.href);"1"===e.searchParams.get(Sa)&&tn().ok&&(e.searchParams.delete(Sa),window.history.replaceState(null,"",e),I(()=>i.enrollPasskey(),"Passkey unlock enrolled."))},[A,f,i,I]);const T=(e,t)=>()=>{nn(Ca),v({kind:e,view:t})},O=(e,t,s)=>{const a=r.includes(e);return n.jsx(y,{kind:e,label:x[e],state:a?"Enrolled":"Off",on:a,sub:a?s:t,action:n.jsx(G,a?{label:"pin"===e?"Change":"Remove",small:!0,disabled:f,onClick:T(e,"passkey"===e||"password"===e?"remove":"change"),children:n.jsx("pin"===e?se:Y,{size:16})}:{label:"Add",small:!0,disabled:f,onClick:T(e,"add"),children:n.jsx(ne,{size:16})})})},z=o.includes("totp");return n.jsxs(n.Fragment,{children:[n.jsxs("section",{className:"panel set__security",id:"unlock-methods",children:[n.jsx("div",{className:"panel__head",children:n.jsxs("div",{children:[n.jsx("h2",{children:"Unlock methods"}),n.jsx("p",{className:"hint",children:"Replace a sign-in method. This does not unwrap the vault."})]})}),n.jsxs("div",{className:"panel__body",children:[n.jsx("output",{className:"visually-hidden","aria-live":"polite",children:h}),s&&!a&&0===r.length?n.jsx("p",{className:"hint",title:`Until this vault has a key it is not kept on this device. Start with a ${N.ok?"passkey":"PIN"}.`,children:"You are a guest."}):null,O("passkey","Face, fingerprint or the device PIN, through this browser.",`This browser, ${N.hostname}. Face, fingerprint or the device PIN.`),O("pin","Four to twelve digits, held on this device.","Four to twelve digits, held on this device."),r.includes("password")?O("password","",e?.hint?"The reminder you saved shows at unlock.":"Master password."):null]})]}),n.jsxs("section",{className:"panel set__security",id:"second-step",ref:S,children:[n.jsx("div",{className:"panel__head",children:n.jsx("div",{children:n.jsx("h2",{children:"Second step"})})}),n.jsxs("div",{className:"panel__body",children:[n.jsx(y,{kind:"totp",label:"Authenticator app",state:z?"On":"Off",on:z,sub:0===r.length?"After a key. Add sets the key first, then scans.":z?"Codes from the app on your phone.":"Codes from an app on your phone.",action:n.jsx(G,{label:z?"Remove":"Add",small:!0,disabled:f,onClick:T("totp",z?"remove":"add"),children:n.jsx(z?Y:ne,{size:16})})}),u?n.jsx(_a,{secondSteps:o,hasService:c,service:d,busy:f,open:T}):null]})]}),s&&!a&&0===r.length?n.jsx($a,{busy:f,onAddKey:T(N.ok?"passkey":"pin","add")}):null,l?n.jsxs("section",{className:"panel set__security",id:"recovery",ref:C,children:[n.jsx("div",{className:"panel__head",children:n.jsx("div",{children:n.jsx("h2",{children:"Recovery"})})}),n.jsx("div",{className:"panel__body",children:n.jsx(y,{kind:"recovery",label:"Recovery codes",state:"Made",on:!0,sub:"Each stands in for the second step once.",action:n.jsx(G,{label:"View recovery codes",small:!0,disabled:f,onClick:T("recovery","add"),children:n.jsx(le,{size:16})})})})]}):null,n.jsx(ka,{busy:f,closed:w,onOpen:e=>{nn(Ca),v(e)}}),g?n.jsx(k,{request:g,enrolled:r,host:N,busy:f,run:I,accountEmail:p,onClose:()=>{v(null),_(e=>e+1)}}):null]})}function Aa({label:e,busy:t,onDelete:s,onClose:a}){return n.jsx(Mn,{title:"Delete a vault",mark:n.jsx(Y,{size:20}),onClose:a,children:n.jsx(Fn,{name:e,facts:[{key:"Cleared",value:"its files in this browser"},{key:"Read first",value:"nothing; it is locked"}],primary:{label:"Delete vault",tone:"danger",busy:t,onClick:s}})})}const Ta="Its own key",Oa="This vault's key";function za({canShareKey:e,busy:s,onSeal:a,onClose:i}){const[r,o]=t.useState(""),[l,c]=t.useState(e),d=l&&e,u=r.trim().length>0,p=()=>{u&&a(r,d)};return n.jsx(Mn,{title:"Seal a new vault",mark:n.jsx(ie,{size:20}),onClose:i,children:n.jsx("form",{"aria-label":"Seal a new vault",onSubmit:e=>{e.preventDefault(),p()},children:n.jsxs(Fn,{ok:!0,name:"New vault",facts:[{key:"Opens",value:d?"with this vault's key, no extra prompt":"with a passkey, PIN or password of its own"},{key:"Name",value:d?"listed with your vaults":"sealed inside it"}],primary:{label:"Seal vault",submit:!0,busy:s,disabled:!u,onClick:p},children:[n.jsx(H,{id:"vaults-new-name",label:"Name",autoComplete:"off",value:r,disabled:s,onValueChange:o}),e?n.jsx("div",{className:"set__view",role:"radiogroup","aria-label":"Key",children:[{id:!0,label:Oa},{id:!1,label:Ta}].map(e=>n.jsx("button",{type:"button",className:"set__view-btn","aria-pressed":l===e.id,disabled:s,onClick:()=>c(e.id),children:e.label},e.label))}):null]})})})}function Ra({guideId:e,to:a,label:i,current:r}){const o=function(e,n){const s=t.useRef(null);return t.useEffect(()=>{const t=s.current,n=t?.parentElement;if(!e||!t||!n)return;va(t);const a=()=>va(t),i="undefined"==typeof MutationObserver?null:new MutationObserver(a);i?.observe(n,{childList:!0});const r="undefined"==typeof ResizeObserver?null:new ResizeObserver(a);return r?.observe(n),()=>{i?.disconnect(),r?.disconnect()}},[e]),t.useCallback(e=>{s.current=e,n?.(e)},[n])}(r,nt(e));return n.jsx(s,{ref:o,to:a,className:"set__nav-link","aria-current":r?"page":void 0,children:i})}function Pa({title:e,tabs:t,category:s}){return n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"section__head",children:n.jsx("h1",{children:e})}),n.jsx("nav",{className:"set__nav","aria-label":"Settings sections",children:t.map(e=>n.jsx(Ra,{guideId:e.guideId,to:M(e.id),label:e.label,current:s===e.id},e.id))})]})}const La={UnlockMethodsPanel:function(){return n.jsx(n.Fragment,{children:n.jsx(Ia,{})})},InstallPanel:w,VaultsPanel:function(){const{status:e,guest:s}=dt(),a=fs(),i="unlocked"===e&&!s,[r,o]=t.useState(!1),[l,c]=t.useState(null),[d,u]=t.useState(!1),[p,f]=t.useState(null);function m(e){f(null),u(!0),e().catch(e=>{f(e instanceof Error?e.message:String(e))}).finally(()=>u(!1))}return n.jsxs("section",{className:"panel",id:"vaults",children:[n.jsxs("div",{className:"panel__head",children:[n.jsx("div",{children:n.jsx("h2",{children:"Vaults on this device"})}),n.jsxs("div",{className:"actions",children:[p?n.jsx(Bn,{tone:"err",label:p}):null,n.jsx(X,{id:"settings:vaults",title:"Vaults",message:p}),n.jsx(G,{small:!0,label:"Seal a new vault",disabled:d,"aria-haspopup":"dialog",onClick:()=>o(!0),children:n.jsx(ne,{size:16})})]})]}),n.jsx("div",{className:"panel__body",children:n.jsx(at,{id:"vaults.list",children:n.jsx(Hn,{vaults:a,disabled:d,onPick:e=>m(()=>rt(e.id)),trailing:e=>(e=>"project"===e.kind&&"open"!==e.state)(e)?n.jsx("button",{type:"button",className:"icon-btn vault-row__delete","aria-label":`Delete vault ${e.label}`,title:"Delete this vault from this device",disabled:d,onClick:()=>c(e.id),children:n.jsx(Y,{size:16})}):null})})}),l?n.jsx(Aa,{label:a.find(e=>e.id===l)?.label??l,busy:d,onDelete:()=>{const e=l;c(null),m(()=>ot(e))},onClose:()=>c(null)}):null,r?n.jsx(za,{canShareKey:i,busy:d,onSeal:(e,t)=>{o(!1),m(()=>lt(e,{shareKey:t}))},onClose:()=>o(!1)}):null]})}},Ea=new Map([["key-vault","vault-key-protection"],["key-sop","vault-key-protection"],["encryption-keys","vault-key-protection"],["duress","duress-profiles"]]);function Ma(e){return{snapshot:()=>ms.compositionStore.getSnapshot(),catalog:()=>ms.CAPABILITY_CATALOG,previewPlan:e=>ms.previewPlan(e),commitSelection:(e,t)=>ms.compositionStore.commit(e,t),invalidate:e=>ms.compositionStore.invalidate(e),now:()=>(new Date).toISOString(),readKey:Ot,writeKey:Tt,tomb:e}}function Fa(e,t){return"effective-plan"!==e&&("instance-policy"!==e||"personal-local"===t.provenance)}function Ba(e){return`${e.generation}:${e.policy?.revision??"-"}:${e.selection?.revision??"-"}`}function Da(e){return gt(e)&&Number.isFinite(e)?String(e):yt(e)?e?"true":"false":null===e?"null":ht(e)?""===e||/[:#\n\r]/.test(e)||e!==e.trim()?JSON.stringify(e):e:JSON.stringify(e)}function Ka(e){const t=e.range;return t?[t[0],t[1]]:null}function Va(e,t){const n=ra(e),s=ra(t);return!(!n.ok||!s.ok)&&JSON.stringify(n.value)===JSON.stringify(s.value)}function Ua(e,t){const n=t.snapshot();if("effective-plan"===e)return n.plan?Yn(n.plan):"";if("instance-policy"===e)return Qn(ft(n.policy??{schemaVersion:1,kind:"InstanceCapabilityPolicy",instanceId:n.plan?.identity.instanceId??"personal-local",revision:"0",presetProvenance:null,capabilities:{default:"deny",required:[],optional:[],prohibited:[]},network:{externalServices:"allow",allowedServiceOrigins:[]},updates:{unknownCapabilities:"deny",expandedExposure:"require-approval"}}));if("installation-selection"===e)return n.selection?Qn(ft(n.selection)):"";const s=t.tomb(),a=s?t.readKey(Ms(s)):null;if(!a)return"";const i=Zn(a.trim().startsWith("{")?function(e){try{const t=JSON.parse(e);return mt(t)?Qn(t):""}catch{return""}}(a):a);return i.ok?Qn(ft(i.value)):""}function Ja(e,t){const n=Ua(e,t),s=function(e,t){return"instance-policy"===e?Ls:"installation-selection"===e?Es:"vault-restriction"===e&&t?Bs(t):null}(e,t.tomb()),a=s?t.readKey(s):null;return a&&n&&Va(n,a)?a:n}function qa(e){return{status:"refused",message:e}}function Ha(e,t,n){const s=e.snapshot();return{status:"session-only"===s.durability?"applied_ephemeral":"applied_durable",revisionToken:Ba(s),message:t?"Saved source comments. Nothing else changed.":n}}async function Wa(e,t,n){const s=t.snapshot();return Fa(e,s)?n.baseRevision!==Ba(s)?{status:"conflict",message:"This document changed in another session.",originalSource:n.source,localSource:n.source,currentSource:Ja(e,t)}:null:qa("This document is read-only here.")}async function Ga(e,t){if("personal-local"!==e.snapshot().provenance)throw new Error("A managed instance policy cannot be edited on a device.");await e.writeKey(Fs,JSON.stringify(t)),e.invalidate("local-policy-updated")}const Ya={now:()=>(new Date).toISOString(),save:Ga};function Qa({bare:e=!1}={}){const s=hs(),{tomb:a}=dt(),[i,r]=t.useState(null);if(!$s())return null;const o=s.plan,l=n.jsxs(n.Fragment,{children:[n.jsx(X,{id:"settings:instance-policy",title:"Instance policy",message:i}),n.jsx(Xn,{presets:ms.PRESETS,chosen:s.policy?.presetProvenance?.id??null,onChoose:e=>{!async function(e){const t=Ma(()=>a),n=o?.identity.instanceId??"personal-local";try{await Ya.save(t,ms.presetToInstancePolicy(e,n,`preset-${e.id}-${Ya.now()}`)),r(null)}catch(s){r(s instanceof Error?s.message:"not saved")}}(e)}})]});return e?l:n.jsxs("section",{className:"capsection",id:"instance-policy","aria-labelledby":"instance-policy-title","data-testid":"instance-capabilities-panel",children:[n.jsx(Ss,{id:"instance-policy-title",title:"Instance policy",children:null===i?null:n.jsx(Bn,{tone:"err",label:i})}),l]})}function Za(){return $s()?n.jsx("section",{className:"capsection",id:"instance-policy",children:n.jsx("div",{className:"capsection__head",children:n.jsxs(s,{className:"capsection__titlelink",to:de("instance-policy"),children:[n.jsx("h3",{className:"capsection__title",children:"Instance policy"}),n.jsx(ce,{className:"capsection__go",size:14})]})})}):null}const Xa=new Map(Object.entries({"support.local-ai":["model-provider"],"support.remote-ai":["model-provider"],"sharing.relay":["org-vault-directory"],"vault.security-checks":["capability-security-checks"],"ai.password-reset":["password-reset-mail"],"notifications.local":["local-notifications"],"networking.tailnet":["tailnet-sync"],"networking.tailnet-devices":["tailnet-sync"],"sharing.trusted-contacts":["trusted-contacts"]}));function ei(){return n.jsxs(s,{className:"feature-config__back",to:"/settings/features",children:[n.jsx(fe,{size:14}),"Features"]})}function ti({feature:e,current:t,onPropose:s,plan:a}){const i=ks(e,a),r=i.on?xs(a,e):[];if(r.length>0)return n.jsx(Bn,{tone:"ok",label:`needed by ${r.map(Ts).join(", ")}`});if(!i.on&&0===i.available.length){const t=Os(a?.capabilities[e.capabilities[0]??""],void 0);return n.jsx(Bn,{tone:t.tone,label:t.label})}return n.jsxs("span",{className:"capsection__controls",children:[n.jsx(zs,{id:e.capabilities[0]}),n.jsx(Is,{label:e.title,on:i.on,onToggle:()=>s(ws(t,e,!i.on,a,ms.CAPABILITY_CATALOG))})]})}function ni({feature:e,capabilityId:t,current:s,onPropose:a}){const i=hs();if(void 0===t)return n.jsx(ti,{feature:e,current:s,onPropose:a,plan:i.plan});const r=t,o=i.plan?.capabilities[r],l=!0===o?.approved,c=l?[...new Set([...ys(s,r,ms.CAPABILITY_CATALOG),...vs(i.plan,r)])]:[];if(0!==c.length||!(l||!0===o?.distributed&&o.permitted)){const e=c.length>0?{tone:"ok",label:`needed by ${c.map(Ts).join(", ")}`}:Os(o,i.lifecycle[r]);return n.jsx(Bn,{tone:e.tone,label:e.label})}return n.jsxs("span",{className:"capsection__controls",children:[n.jsx(zs,{id:r}),n.jsx(Is,{label:Ts(r),capabilityTitle:Ts(r),on:l,onToggle:()=>a(js(s,e,r,!l,i.plan,ms.CAPABILITY_CATALOG))})]})}function si({title:e,back:t=!0,children:s,action:a}){return n.jsxs("section",{className:"panel feature-config",children:[n.jsxs("div",{className:"panel__head",children:[n.jsxs("div",{children:[t?n.jsx(ei,{}):null,n.jsx("h2",{children:e})]}),a]}),n.jsx("div",{className:"panel__body",children:s})]})}function ai(){const e=pe();return Cs()?n.jsxs(si,{title:"Guests",action:n.jsx(Is,{label:"Allow guests",on:e,onToggle:()=>{is(!e)}}),children:[n.jsx(pt,{label:"Guest vault",children:n.jsx("span",{className:"frow__value",children:"Separate · ephemeral"})}),n.jsx(pt,{label:"This vault",children:n.jsx("span",{className:"frow__value",children:"Key and items stay private"})})]}):n.jsx(si,{title:"Guests",children:n.jsx(Bn,{tone:"warn",label:"Guests are not available in this vault."})})}function ii(){return n.jsx(si,{title:"Instance policy",back:!0,children:n.jsx(Qa,{bare:!0})})}function ri({feature:e,selectedCapability:t}){const s=es(),a=f("settings-panel"),i=void 0===t?null:function(e){const t=Xa.get(e)??[],n=Ns(e);return[...t,...n?[`plugin-${n.id}`]:[]]}(t),r=a.filter(null===i?t=>t.category===As(`feature-${e.id}`):e=>i.includes(e.id)),o=void 0===t?e.title:Ts(t);return n.jsxs(si,{title:o,action:n.jsx(ni,{feature:e,capabilityId:t,current:s.current,onPropose:s.propose}),children:[s.notice?n.jsx(Bn,{tone:"err",label:s.notice}):null,r.map(({id:e,Panel:t})=>n.jsx(t,{},e))]})}function oi({featureId:e,capabilityId:t}){const s=hs(),a=ue();if("guests"===e)return n.jsx(ai,{});if("instance-policy"===e)return n.jsx(ii,{});const i=bs.find(t=>t.id===e),r=i?gs(i,s.plan,{identityApi:a}):void 0;if(!r||0===r.capabilities.length)return n.jsx(si,{title:"Feature not found",children:n.jsx(Bn,{tone:"warn",label:"This feature is not installed on this device."})});const o=void 0!==t&&r.capabilities.includes(t)?t:void 0;return void 0!==t&&void 0===o?n.jsx(si,{title:"Feature not found",children:n.jsx(Bn,{tone:"warn",label:`${r.title} has no ${t} capability.`})}):n.jsx(ri,{feature:r,selectedCapability:o})}function li({change:e}){return Object.values(e.snapshot.plan?.capabilities??{}).some(e=>e.restartRequired)?n.jsxs("p",{className:"capspanel__notice","data-testid":"capabilities-restart",children:[n.jsx(Bn,{tone:"warn",label:"restart required"}),n.jsx("span",{children:"reload to finish unloading"}),n.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":"Reload now",title:"Reload now",onClick:()=>ts.reload(),children:n.jsx(Z,{size:14})})]}):null}function ci({change:e}){const t=_s(e.snapshot.plan);if(0===t.length)return null;const s=`withdrawn by operator: ${t.map(e=>ms.CAPABILITY_CATALOG.capabilities.find(t=>t.id===e)?.title??e).join(", ")}`;return n.jsxs("p",{className:"capspanel__notice","data-testid":"capabilities-withdrawn",children:[n.jsx(Bn,{tone:"err",label:s}),n.jsx("span",{children:s})]})}function di({change:e}){return n.jsxs(n.Fragment,{children:[n.jsx(Rs,{current:e.current,onPropose:e.propose}),n.jsx(Za,{})]})}function ui(){const e=es();return n.jsxs("section",{className:"panel","data-testid":"features-panel",children:[n.jsx("div",{className:"panel__head capspanel__head",children:n.jsx("h2",{children:"Features"})}),n.jsxs("div",{className:"panel__body capspanel",children:[n.jsx(li,{change:e}),n.jsx(ci,{change:e}),e.notice?n.jsx(Bn,{tone:"err",label:e.notice}):null,n.jsx(X,{id:"settings:features",title:"Features",message:e.notice}),n.jsx(di,{change:e})]})]})}const pi=[{id:"system",label:"System",Icon:me},{id:"light",label:"Day",Icon:he},{id:"dark",label:"Night",Icon:be}],fi=[{value:0,label:"only when I ask"},{value:60,label:"after 1 hour idle"},{value:240,label:"after 4 hours idle"},{value:480,label:"after 8 hours idle"},{value:1440,label:"after 24 hours idle"},{value:30,label:"after 30 minutes idle"},{value:15,label:"after 15 minutes idle"},{value:5,label:"after 5 minutes idle"},{value:1,label:"after 1 minute idle"}],mi=[{value:10,label:"for 10 seconds"},{value:30,label:"for 30 seconds"},{value:60,label:"for 1 minute"},{value:0,label:"until something replaces them"}];function hi(e){return n.jsxs("section",{className:"panel",id:"settings-appearance",children:[n.jsx("div",{className:"panel__head",children:n.jsx("div",{children:n.jsx("h2",{children:"Appearance"})})}),n.jsx("div",{className:"panel__body",children:n.jsx("fieldset",{className:"set__themes","aria-label":"Theme",children:pi.map(({id:t,label:s,Icon:a})=>n.jsxs("button",{type:"button",className:"set__theme","aria-pressed":e.prefs.theme===t,onClick:()=>{ge(t),e.onTheme(t)},children:[n.jsx(a,{size:18}),s]},t))})})]})}function bi({id:e,name:t,label:s,value:a,options:i,onChange:r,selectRef:o}){return n.jsxs("div",{className:"sw",children:[n.jsx("label",{className:"sw__name",htmlFor:e,children:t}),n.jsx("select",{id:e,ref:o,className:"sw__select","aria-label":s,value:a,onChange:e=>r(Number(e.target.value)),children:i.map(e=>n.jsx("option",{value:e.value,children:e.label},e.value))})]})}function gi(e){const t=nt("settings.auto-lock"),{prefs:s}=e,a=fi.some(e=>e.value===s.autoLockMinutes)?fi:[...fi,{value:s.autoLockMinutes,label:`after ${s.autoLockMinutes} minutes idle`}];return n.jsxs("section",{className:"panel",id:"settings-locking",children:[n.jsx("div",{className:"panel__head",children:n.jsx("div",{children:n.jsx("h2",{children:"Locking"})})}),n.jsxs("div",{className:"panel__body",children:[n.jsx(bi,{id:"settings-auto-lock",name:"Lock the vault",label:"Lock after inactivity",selectRef:t,value:s.autoLockMinutes,options:a,onChange:t=>e.onNumber("autoLockMinutes",t)}),n.jsx(bi,{id:"settings-clipboard",name:"Keep copied secrets",label:"Clear copied secrets after",value:s.clipboardClearSeconds,options:mi,onChange:t=>e.onNumber("clipboardClearSeconds",t)}),n.jsxs("div",{className:"sw",children:[n.jsx("span",{className:"sw__name",children:"Lock when this tab goes to the background"}),n.jsx("button",{type:"button",className:"toggle",role:"switch","aria-checked":s.lockOnHide,"aria-label":"Lock when this tab goes to the background",onClick:()=>e.onToggle("lockOnHide",!s.lockOnHide)})]}),e.identity?n.jsxs("div",{className:"sw",children:[n.jsx("span",{className:"sw__name",children:"Sign out of Identity too"}),n.jsx("button",{type:"button",className:"toggle",role:"switch","aria-checked":s.signOutOnLock,"aria-label":"Also sign out of Identity when the vault locks",onClick:()=>e.onToggle("signOutOnLock",!s.signOutOnLock)})]}):null]})]})}function yi(e){return n.jsxs(n.Fragment,{children:[n.jsx(hi,{...e}),n.jsx(gi,{...e})]})}function vi(){const e=ut(),{prefs:t}=dt(),s=ye(),a=ve(),i=t=>{e.commitPrefs(t)};return n.jsx(yi,{prefs:t,identity:"remote"===s||null!==a,onTheme:e=>i({theme:e}),onNumber:(e,t)=>{i("autoLockMinutes"!==e?{clipboardClearSeconds:t}:{autoLockMinutes:t})},onToggle:(e,t)=>{i("lockOnHide"!==e?{signOutOnLock:t}:{lockOnHide:t})}})}function ji({provider:e,href:t,target:a}){const i=null!==a,r=!i&&Js(e.id),c=i?a.enabled:r&&on(e.id),d=i?function(e){return e.owner&&e.repo?`${e.owner}/${e.repo}`:null}(a):r?function(e){const t=ln().find(t=>t.providerId===e)?.remote?.trim();return t||null}(e.id):null,u=i||r,p=n.jsxs(n.Fragment,{children:[n.jsx(o,{providerId:e.id,displayName:e.displayName,size:32}),n.jsxs("span",{className:"conn-tile__copy",children:[n.jsx("span",{className:"conn-tile__name",children:e.displayName}),d?n.jsx("span",{className:"conn-tile__kind",children:d}):null]}),c&&!d?n.jsx(Bn,{tone:"warn",label:"No repository yet — nothing is backed up"}):null]});return n.jsx("li",{className:"conn-tile"+(c?" is-on":""),children:n.jsxs("div",{className:"conn-tile__row",children:[null===t?n.jsx("span",{className:"conn-tile__face",children:p}):n.jsxs(s,{className:"conn-tile__link",to:t,children:[p,n.jsx(ce,{className:"conn-tile__go",size:14})]}),u?n.jsx(l,{providerId:e.id,displayName:e.displayName}):null]})})}const ki=u;function xi({id:e,name:t}){return n.jsx("li",{className:"conn-tile",children:n.jsx("div",{className:"conn-tile__row",children:n.jsxs("span",{className:"conn-tile__face",children:[n.jsx(o,{providerId:e,displayName:t,size:32}),n.jsx("span",{className:"conn-tile__copy",children:n.jsx("span",{className:"conn-tile__name",children:t})})]})})})}function wi(){const e=Vs(),t=new Map(Ds().map(e=>[e.id,e]));return n.jsx("ul",{className:"conn-grid",id:"ai_model_provider","aria-label":"AI providers",children:ki.map(s=>{const a=t.get(s.id),i=a?e.tile(a):null;return a&&"page"===i?n.jsx(ji,{provider:{...a,displayName:s.name},href:Us(a.id,void 0,"/settings/connections"),target:null},s.id):n.jsx(xi,{id:s.id,name:s.name},s.id)})})}function _i({category:e,label:s}){const a=function(e=!0){const[n,s]=t.useState(null);return t.useEffect(()=>{if(!e)return;let t=!0;return c("github").then(e=>{t&&s(e.target)}).catch(()=>{t&&s(null)}),()=>{t=!1}},[e]),n}("backup_recovery"===e),i=Vs();je();const r=function(e){return e?d(e):null}(a),o=U(e,i.tile);return 0===o.length?null:n.jsx("ul",{className:"conn-grid",id:e,"aria-label":s,children:o.map(({provider:e,href:t})=>n.jsx(ji,{provider:e,href:t,target:r===e.id?a:null},e.id))})}function Ni({integration:e,first:s,sectionRef:a}){const i=nt(`integration.${e.id}`),r=nt("settings.integrations-list"),o=t.useCallback(e=>{i(e),s&&r(e)},[i,r,s]),l=`integration-${e.id}`;return n.jsxs("section",{className:"conn-group capsection",id:l,"aria-labelledby":`${l}-title`,ref:a,children:[n.jsx(Ss,{id:`${l}-title`,title:e.title,headRef:o,children:n.jsx(Ps,{backedBy:e.backedBy})}),e.providerCategories.map(t=>"ai_model_provider"===t?n.jsx(wi,{},t):n.jsx(_i,{category:t,label:"agent_harnesses"===t?"Agent harnesses":e.title.endsWith("providers")?e.title:`${e.title} providers`},t))]})}function $i(e){return n.jsx(Ni,{...e,sectionRef:nt("settings.backup")})}function Si(){const e=J();return n.jsx("div",{className:"capsections",id:"settings-integrations",children:e.map(({integration:e},t)=>n.jsx("backups"===e.id?$i:Ni,{integration:e,first:0===t},e.id))})}function Ci(){return n.jsxs("section",{className:"panel","data-testid":"integrations-panel",children:[n.jsx("div",{className:"panel__head capspanel__head",children:n.jsx("h2",{children:"Integrations"})}),n.jsx("div",{className:"panel__body capspanel",children:n.jsx(Si,{})})]})}const Ii=["access","developer","finance","identity","documents"];function Ai(e){return`${n=e.fields,1===n?"1 field":`${n} fields`} · ${t=e.bytes,t<1e3?`${t} B`:`${(t/1024).toFixed(1)} KB`}`;var t,n}function Ti(e){return e.categories[0]??"other"}function Oi(e){return(e??"it did not install").replace(/\.+$/,"")}function zi(e,t,n,s,a,i){if("held"===n&&0===s&&null!==i)return`${e} stays on: ${i} needs it.`;if("held"===n)return 1===s?`${e} stays on: this vault has 1 item of it.`:`${e} stays on: this vault has ${s} items of it.`;if("managed"===n)return`${e} is on through a capability in Settings › Features.`;switch(t){case"queued":return`${e} is waiting to download.`;case"downloading":return`Downloading ${e}.`;case"installing":return`Installing ${e}.`;case"on":return`${e} is on.`;case"failed":return`${e} did not install: ${Oi(a)}.`;default:return`${e} is off.`}}function Ri(e,t,n){const s=ke(e.id,t),a=t.counts.get(e.id)??0,i="on"===s.phase,r=xe(e.id,e=>"on"===ke(e,t).phase),o=i&&(a>0||null!==r)?"held":n.has(e.id)?"managed":"switch",l=s.reason??null;return{id:e.id,title:e.title,extension:e.extension,summary:e.summary,facts:Ai(e),phase:s.phase,checked:i||we(s.phase),busy:we(s.phase),control:o,held:a,reason:l,sentence:zi(e.title,s.phase,o,a,l,r)}}function Pi(e,t,n){if(""===n)return!0;const s=`${e.title} ${e.extension} ${e.summary} ${t}`;return n.toLowerCase().split(/\s+/).every(e=>s.toLowerCase().includes(e))}function Li(e){const t=cn();return`${t.filter(t=>{const{phase:n}=ke(t.id,e);return"on"===n}).length} of ${t.length} on`}function Ei(e,t,n,s){return t===n?null:"on"===n?`${e} installed.`:"failed"===n?`${e} did not install: ${Oi(s)}.`:"off"!==n||"on"!==t&&!we(t)?"downloading"===n?`Downloading ${e}.`:null:"on"===t?`${e} removed.`:`${e} cancelled.`}const Mi="settings/features",Fi=`${Mi}/installation-selection.yaml`,Bi=`${Mi}/instance-policy.yaml`,Di=`${Mi}/effective-plan.yaml`,Ki=new Map([[Fi,"installation-selection"],[Bi,"instance-policy"],[Di,"effective-plan"]]),Vi="This file is read-only.",Ui=new Set(["applied_durable","applied_ephemeral"]),Ji=".opensesame/marketplace.json",qi="github:OpenSesame-Labs/OpenSesame#main",Hi=/^[A-Za-z0-9_.-]{1,100}$/,Wi=/^[A-Za-z0-9_./-]{1,128}$/,Gi=/^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?(\.[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)+(:\d{1,5})?$/,Yi={github:["github","github.com"],gitlab:["gitlab","gitlab.com"],codeberg:["gitea","codeberg.org"],bitbucket:["bitbucket","bitbucket.org"]},Qi={"github.com":"github","gitlab.com":"gitlab","codeberg.org":"gitea","bitbucket.org":"bitbucket"};function Zi(e,t=256){return!(""===e||e.length>t)&&e.split("/").every(e=>Hi.test(e)&&"."!==e&&".."!==e)}function Xi(e,t,n,s,a){const i=function(e,t){const n=[...t],s=n.at(-1);return void 0!==s&&(n[n.length-1]=s.replace(/\.git$/,"")),!("gitlab"===e?n.length>=2:2===n.length)||n.length>8?null:n.every(e=>Hi.test(e)&&!/^\.+$/.test(e))?n.join("/"):null}(e,n),r=function(e){return void 0===e||""===e||"HEAD"===e?null:Wi.test(e)&&Zi(e,128)?e:void 0}(s),o=function(e){const t=(e??"").replace(/^\/+|\/+$/g,"");return""===t?"":Zi(t)?t:void 0}(a);if(null===i||void 0===r||void 0===o)return null;if(!Gi.test(t))return null;if(void 0!==vt(`https://${t}/`))return null;const l=er[e];return void 0!==l&&t!==l?null:{forge:e,host:t,repo:i,ref:r,root:o}}const er={github:"github.com",bitbucket:"bitbucket.org"},tr={github:["tree","blob","raw"],gitlab:["-"],gitea:["src","raw"],bitbucket:["src"]};function nr(e,t,n){const s=e.host.toLowerCase(),a=e.pathname.split("/").filter(e=>""!==e),i=e.pathname.endsWith(`/${Ji}`),r=t??Qi[s]??sr(s);if(void 0===r)return i?function(e){return""!==e.search||""!==e.hash||void 0!==vt(e.href)?null:{forge:"raw",base:e.href.slice(0,-28)}}(e):null;const o=function(e,t){const n=t.findIndex((t,n)=>n>=2&&tr[e].includes(t));if(n<0)return{repo:[...t]};let s=t.slice(n+1);return"gitlab"===e&&["tree","blob","raw"].includes(s[0]??"")&&(s=s.slice(1)),"gitea"===e&&["branch","tag","commit"].includes(s[0]??"")&&(s=s.slice(1)),{repo:t.slice(0,n),ref:s[0],root:s.slice(1).join("/")}}(r,a),l=i?(o.root??"").slice(0,-28):o.root;return Xi(r,s,o.repo,n??o.ref,l)}function sr(e){return e.includes("gitlab")?"gitlab":e.includes("gitea")||e.includes("forgejo")?"gitea":void 0}function ar(e){try{const t=new URL(e);return"https:"!==t.protocol||t.username||t.password?null:t}catch{return null}}function ir(e){const t=e.trim();if(""===t||t.length>512||/\s/.test(t))return null;const n=t.lastIndexOf("#"),s=n<0?t:t.slice(0,n),a=n<0?void 0:t.slice(n+1);if(""===a)return null;const i=/^([a-z]+)\+(https:\/\/.+)$/.exec(s);if(i?.[1]&&i[2])return function(e,t,n){const s="forgejo"===e?"gitea":e;if(!["github","gitlab","gitea","bitbucket"].includes(s))return null;const a=ar(t);return null===a?null:nr(a,s,n??void 0)}(i[1],i[2],a);if(s.startsWith("git@"))return function(e,t){const n=/^git@([^:/]+):(.+)$/.exec(e);if(!n?.[1]||!n[2])return null;const s=n[1].toLowerCase(),a=Qi[s]??sr(s);return void 0===a?null:Xi(a,s,n[2].split("/"),t)}(s,a);if(/^[a-z]+:\/\//.test(s)){const e=ar(s);return null===e?null:nr(e,void 0,a)}return function(e,t){const n=/^([a-z]+):(?!\/\/)(.+)$/.exec(e),s=n?.[1]?Yi[n[1]]:void 0,a=n?n[2]:e,[i,r]=s??["github","github.com"];return n&&!s?null:Xi(i,r,(a??"").split("/"),t)}(s,a)}const rr={github:"tree",gitlab:"-/tree",gitea:"src/branch",bitbucket:"src"};function or(e){if("raw"===e.forge){const t=new URL(e.base);return`${t.host}${t.pathname.replace(/\/$/,"")}`}return`${e.host}/${e.repo}${""===e.root?"":`/${e.root}`}${null===e.ref?"":`@${e.ref}`}`}function lr(e){return"raw"===e.forge?e.base:`https://${e.host}/${e.repo}`}function cr(e){return e.split("/").map(encodeURIComponent).join("/")}function dr(e,t,n=("raw"===e.forge?null:e.ref)){if(!Zi(t,512))throw new Error("marketplace path is not a safe relative path");if("raw"===e.forge)return`${e.base}${cr(t)}`;const s=""===e.root?t:`${e.root}/${t}`,a=e.repo;switch(e.forge){case"github":return`https://raw.githubusercontent.com/${a}/${cr(n??"HEAD")}/${cr(s)}`;case"gitlab":return`https://${e.host}/api/v4/projects/${encodeURIComponent(a)}/repository/files/${encodeURIComponent(s)}/raw?ref=${encodeURIComponent(n??"HEAD")}`;case"gitea":return`https://${e.host}/api/v1/repos/${a}/raw/${cr(s)}${null===n?"":`?ref=${encodeURIComponent(n)}`}`;case"bitbucket":return`https://api.bitbucket.org/2.0/repositories/${a}/src/${cr(n??"HEAD")}/${cr(s)}`}}function ur(e){const t=ir(e);return null===t?null:function(e){if("raw"===e.forge)return`${e.base}${Ji}`;const t=Object.entries(Yi).find(([,[t,n]])=>t===e.forge&&n===e.host)?.[0],n=null===e.ref?"":`#${e.ref}`;return""===e.root?`${t?`${t}:${e.repo}`:`${e.forge}+https://${e.host}/${e.repo}`}${n}`:`${e.forge}+https://${e.host}/${e.repo}/${rr[e.forge]}/HEAD/${e.root}${n}`}(t)}function pr(e){return`${JSON.stringify({marketplaces:e},null,2)}\n`}const fr=pr([ur(qi)??qi]);function mr(e){return{ok:!1,message:e}}function hr(e){if((new TextEncoder).encode(e).byteLength>16384)return mr("The file exceeds 16384 bytes.");let t;try{t=JSON.parse(e)}catch{return mr("The file is not JSON.")}if(!mt(t))return mr("The file is not an object.");const n=Object.keys(t).find(e=>"marketplaces"!==e);if(void 0!==n)return mr(`${n} is not allowed.`);const s=t.marketplaces;return Array.isArray(s)?function(e){if(e.length>8)return mr("At most 8 marketplaces.");const t=[];for(const[n,s]of e.entries()){const e=ht(s)?ur(s):null;if(null===e)return mr(`marketplaces[${n}] is not a repository this page can read.`);if(t.includes(e))return mr(`marketplaces[${n}] repeats ${e}.`);t.push(e)}return{ok:!0,sources:t}}(s):mr("marketplaces must be a list.")}function br(e){const t=hr(e);if(!t.ok)return t;const n=ur(qi)??qi,s=t.sources.filter(e=>e!==n);return s.length>=8?{ok:!1,message:"At most 8 marketplaces."}:{ok:!0,reference:n,text:pr([n,...s])}}function gr(e){return e===ur(qi)}function yr(e){const t=e.lastIndexOf("/");return t<0?"":e.slice(0,t)}function vr(e){return e.slice(e.lastIndexOf("/")+1)}const jr="No provider keeps this file.";function kr(e){const t=t=>e.find(e=>e.list().some(e=>e.path===t))??e.find(e=>void 0!==e.creates),n=e.find(e=>void 0!==e.creates)?.creates,s={list:()=>e.flatMap(e=>e.list()),read:async e=>{const n=t(e);if(!n)throw new Error(jr);return n.read(e)},check:(e,n)=>t(e)?.check(e,n)??{ok:!1,message:jr},write:async(e,n)=>await(t(e)?.write(e,n))??{ok:!1,message:jr},remove:async e=>await(t(e)?.remove(e))??{ok:!1,message:jr}};return void 0===n?s:{...s,creates:n}}const xr=vr(wt),wr="This file is not shown or changed here.";function _r(e){let t=e;try{t=decodeURIComponent(e)}catch{}return t.split(/[\\/]+/).some(e=>e.trim().toLowerCase()===xr)}const Nr="settings/item-types",$r=`${Nr}/marketplaces.json`,Sr=`${Nr}/installed`,Cr=`${Nr}/builtin`,Ir=`${Sr}/new.json`,Ar="config/item-types/marketplaces.json";function Tr(e){return`${Sr}/${e}.json`}function Or(e,t){if(yr(e)!==t)return null;const n=vr(e);return n.endsWith(".json")?n.slice(0,-5):null}function zr(){const e=new Map(Object.entries(pn));for(const{id:t}of cn()){const n=fn(t);void 0!==n&&e.set(t,n)}return e}const Rr=`${JSON.stringify({apiVersion:"opensesame.dev/v1alpha1",kind:"VaultItemType",metadata:{id:"",version:"1.0.0",publisher:"https://"},spec:{title:"",plural:"",extension:".",summary:"",categories:[],sections:[{id:"main",title:"",fields:[]}],native:{secret:"",trailer:[]},cxf:{credential:"custom-fields"},subtitle:[],search:[]}},null,2)}\n`;function Pr(e,t,n){return{path:e,language:"json",readOnly:t,removable:n}}function Lr(e,t){const n=un(t,"community");if(!n.ok)return{ok:!1,message:mn(n.errors)};const s=n.definition.metadata.id,a=Or(e,Sr);return null!==a&&Object.hasOwn(dn(),a)&&a!==s?{ok:!1,message:`metadata.id is ${s}; this file is ${a}.json. A new id is a new file.`}:a!==s&&Object.hasOwn(dn(),s)?{ok:!1,message:`${s} is already installed; change it in ${s}.json.`}:{ok:!0}}const Er="settings/security/duress/status.json",Mr={path:Er,language:"json",readOnly:!0,removable:!1,readOnlyLabel:"Changed in the Duress sheet; read-only"},Fr="This file is read-only.",Br="settings/security/travel/safe.json",Dr={path:Br,language:"json",readOnly:!1,removable:!1};function Kr(e){return`${JSON.stringify({safe:[...e].sort()},null,2)}\n`}function Vr(e,t){let n;try{n=JSON.parse(e)}catch{return{ok:!1,message:"The file is not valid JSON."}}if(!mt(n))return{ok:!1,message:'Expected an object: {"safe": [...]}.'};const s=Object.keys(n);if(1!==s.length||"safe"!==s[0])return{ok:!1,message:'Only the key "safe" is kept here.'};const a=n.safe;if(!Array.isArray(a)||!a.every(ht))return{ok:!1,message:'"safe" lists vault ids, as strings.'};const i=new Set(t);return a.every(e=>i.has(e))?{ok:!0,safe:new Set(a)}:{ok:!1,message:"A vault listed in safe is not on this device."}}function Ur(e){const t=(t,n)=>{if(t!==Br||!e.owner())return{ok:!1,message:"There is no such file."};if(e.held())return{ok:!1,message:"This device is held; travel changes are refused."};const s=Vr(n,e.vaultIds());return s.ok?{ok:!0}:{ok:!1,message:s.message}};return{list:()=>e.owner()?[Dr]:[],read:async t=>{if(t!==Br||!e.owner())throw new Error(`No file at ${t}.`);return Kr(e.read(e.vaultIds()))},check:t,async write(n,s){const a=t(n,s);if(!a.ok)return a;const i=Vr(s,e.vaultIds());if(!i.ok)return i;try{await e.write(i.safe)}catch{return{ok:!1,message:"The browser would not keep it."}}const r={ok:!0,path:n,text:Kr(i.safe)};return e.durable()?r:{...r,tone:"warn",message:"Kept for this session only."}},remove:async()=>({ok:!1,message:"This file cannot be removed."})}}function Jr(){const e=ut(),{tomb:n,status:s}=dt();return $e(),t.useMemo(()=>{const t=function(e){const t=(e,t)=>{if(e===$r){const e=hr(t);return e.ok?{ok:!0}:e}return null!==Or(e,Sr)?Lr(e,t):{ok:!1,message:"This file is part of the build."}};return{creates:{directory:Sr,draftPath:Ir,template:Rr},list:()=>[Pr($r,!1,!1),...Object.keys(dn()).sort().map(e=>Pr(Tr(e),!1,!0)),...[...zr().keys()].sort().map(e=>Pr(`${Cr}/${e}.json`,!0,!1))],async read(t){if(t===$r)return async function(e){if(null===e)return fr;try{return(new TextDecoder).decode(await Rt(e,Ar))}catch(t){if(t instanceof Pt)return fr;throw t}}(e.tomb());const n=Or(t,Sr);if(null!==n){const e=dn();return Object.hasOwn(e,n)?e[n]:""}const s=Or(t,Cr);return null!==s?zr().get(s)??"":""},check:t,async write(n,s){if(null!==Or(n,Sr))return(async(t,n)=>{const s=Lr(t,n);if(!s.ok)return s;const a=await e.install(n);if(!a.ok)return a;const i=un(n,"community");return i.ok?{ok:!0,path:Tr(i.definition.metadata.id)}:{ok:!0,path:t}})(n,s);const a=t(n,s);if(!a.ok)return a;const i=e.tomb();return null===i?{ok:!1,message:"Open a vault to keep this file."}:(await zt(i,Ar,(new TextEncoder).encode(s)),{ok:!0,path:n})},async remove(t){const n=Or(t,Sr);return null===n?{ok:!1,message:"This file cannot be removed."}:await e.uninstall(n)?{ok:!0,path:t}:{ok:!1,message:`${n} is not installed.`}}}}({tomb:()=>function(e){const t="function"==typeof e.activeTomb?e.activeTomb():null;return t&&Et(t)?t:null}(e),install:async t=>{const n=await e.installItemTypeDefinition(t);return n.ok?{ok:!0}:{ok:!1,message:n.message}},uninstall:t=>e.uninstallItemTypeDefinition(t)});return{...t,write:async(e,n)=>{const s=await t.write(e,n);return s.ok&&Se(),s},remove:async e=>{const n=await t.remove(e);return n.ok&&Se(),n}}},[e,n,s])}function qr(e){const n=Jr(),s=function(){const{tomb:e}=dt(),n=$s();return t.useMemo(()=>function(e){const t=new Map,n=t=>"instance-policy"!==t||e.operator(),s=t=>n(t)&&Fa(t,e.ports().snapshot());return{list:function(){const t=[{path:Fi,language:"yaml",readOnly:!1,removable:!1}];return e.operator()&&t.push({path:Bi,language:"yaml",readOnly:!1,removable:!1}),t.push({path:Di,language:"yaml",readOnly:!0,readOnlyLabel:"What the selection and policy resolve to; read-only",removable:!1}),t},async read(s){const a=Ki.get(s);if(void 0===a||!n(a))return"";const i=e.ports();t.set(s,Ba(i.snapshot()));const r=Ja(a,i);return"installation-selection"===a&&""===r?Qn(ft((o=i.snapshot(),{schemaVersion:1,kind:"InstallationCapabilitySelection",instanceId:o.plan?.identity.instanceId??o.policy?.instanceId??"personal-local",installationId:o.plan?.identity.installationId??"",basePolicyRevision:o.plan?.identity.policyRevision??o.policy?.revision??"0",revision:"draft-initial",acceptedRequired:[],selectedOptional:[],chosenAlternatives:{},delivery:{prefetch:"none",offlineCache:"shell-only"}}))):r;var o},check(e,t){const n=Ki.get(e);return void 0!==n&&s(n)?function(e,t){if("effective-plan"===e)return{ok:!1,message:Vi};const n="instance-policy"===e?Wn(t):Gn(t);return n.ok?{ok:!0}:{ok:!1,message:n.diagnostics[0]?.message??"Refused."}}(n,t):{ok:!1,message:Vi}},async write(n,a){const i=Ki.get(n);if(void 0===i||"effective-plan"===i||!s(i))return{ok:!1,message:Vi};const r=e.ports(),o="installation-selection"===i?function(e,t){const n=e.snapshot().selection,s=Gn(t);if(!n||!s.ok||s.value.revision!==n.revision)return t;if(Va(Qn(ft(n)),t))return t;const a=`draft-${e.now()}-${crypto.randomUUID().slice(0,8)}`;try{return function(e,t,n){const s=ra(e);if(!s.ok)throw new Error(s.diagnostics[0]?.message??"invalid YAML");const a=qn(e,{uniqueKeys:!0,schema:"core",merge:!1});if(!cs(a.contents)){const s=`${t}: ${Da(n)}\n`;return""===e.trim()?s:`${e}\n${s}`}for(const r of a.contents.items){if(!ps(r.key)||r.key.value!==t)continue;if(!r.value)break;const s=Ka(r.value);if(!s)break;return e.slice(0,s[0])+Da(n)+e.slice(s[1])}const i=e.endsWith("\n")||""===e?"":"\n";return`${e}${i}${t}: ${Da(n)}\n`}(t,"revision",a)}catch{return Qn(ft({...s.value,revision:a}))}}(r,a):a,l={source:o,baseRevision:t.get(n)??Ba(r.snapshot())},c="instance-policy"===i?await async function(e,t){const n=await Wa("instance-policy",e,t);if(n)return n;const s=Wn(t.source);if(!s.ok)return qa(s.diagnostics[0]?.message??"Invalid policy.");const a=Va(Ua("instance-policy",e),t.source);try{a||await Ga(e,s.value),await e.writeKey(Ls,t.source)}catch(i){return qa(i instanceof Error?i.message:"Policy was not stored.")}return Ha(e,a,"Instance policy saved on this device.")}(r,l):await async function(e,t){const n=await Wa("installation-selection",e,t);if(n)return n;const s=Gn(t.source);if(!s.ok)return qa(s.diagnostics[0]?.message??"Invalid selection.");if(Va(Ua("installation-selection",e),t.source))return await e.writeKey(Es,t.source),Ha(e,!0,"");const a=e.previewPlan(s.value),i=ms.buildConsentReceipt(a,e.catalog(),e.now()),r=ms.viewOutcome(await e.commitSelection(s.value,i),e.snapshot().durability);return"conflict"===r.status?{status:"conflict",message:`The selection changed in another session (${r.message||"revision"}).`,originalSource:t.source,localSource:t.source,currentSource:Ja("installation-selection",e)}:"refused"===r.status?qa(`The selection was not accepted (${r.message||"refused"}).`):(await e.writeKey(Es,t.source),{status:"durable"===r.status?"applied_durable":"applied_ephemeral",revisionToken:Ba(e.snapshot()),message:"Installation selection saved."})}(r,l);return Ui.has(c.status)?(t.set(n,c.revisionToken??Ba(r.snapshot())),function(e,t,n){return"applied_ephemeral"!==e.status?{ok:!0,path:t,message:e.message,tone:"ok",text:n}:{ok:!0,path:t,message:`${e.message} Kept for this session only.`,tone:"warn",text:n}}(c,n,o)):{ok:!1,message:c.message}},remove:async()=>({ok:!1,message:"This file cannot be removed."})}}({ports:()=>Ma(()=>e),operator:()=>n}),[e,n])}(),a=function(){const e=S();return $e(),t.useMemo(()=>{const t=kr([Ur({owner:s=()=>e,vaultIds:()=>it().filter(e=>"guest"!==e.kind).map(e=>e.id),read:Ne,write:_e,held:()=>N().incidents>0,durable:()=>"memory"!==Lt()}),(n={owner:s,status:N,profileId:$},{list:()=>n.owner()?[Mr]:[],read:async e=>{if(e!==Er||!n.owner())throw new Error(`No file at ${e}.`);return function(e){const{armed:t,incidents:n}=e.status();return`${JSON.stringify({armed:t,profile:t?e.profileId:null,incident_fence:n>0},null,2)}\n`}(n)},check:()=>({ok:!1,message:Fr}),write:async()=>({ok:!1,message:Fr}),remove:async()=>({ok:!1,message:Fr})})]);var n,s;return{...t,write:async(e,n)=>{const s=await t.write(e,n);return s.ok&&Se(),s}}},[e])}(),i=f("settings-category").find(t=>t.id===e)?.files,r=function(e){return f("settings-panel").filter(t=>t.category===e||t.category.startsWith(`${e}.`)).flatMap(e=>e.files?[e.files]:[])}(e),o="item-types"===e?n:"features"===e?s:"security"===e&&a.list().length>0?a:i??null;return function(e){const n=t.useRef({members:[],merged:null});if(n.current.members.length!==e.length||!e.every((e,t)=>n.current.members[t]===e)){const[t]=e;n.current={members:e,merged:0===e.length?null:(s=1===e.length&&t?t:kr(e),{...s,list:()=>s.list().filter(e=>!_r(e.path)),read:async e=>{if(_r(e))throw new Error(wr);return s.read(e)},check:(e,t)=>_r(e)?{ok:!1,message:wr}:s.check(e,t),write:async(e,t)=>_r(e)?{ok:!1,message:wr}:s.write(e,t),remove:async e=>_r(e)?{ok:!1,message:wr}:s.remove(e)})}}var s;return n.current.merged}(null===o?r:[o,...r])}function Hr(e,t){if(!t.ok)return{kind:"invalid",reason:t.problem};const n=t.definition,s=n.metadata.id;if(e.isBuiltin(s))return{kind:"builtin"};const a=e.get(s);if(void 0!==a){const e=function(e,t){if(e.metadata.publisher!==t.metadata.publisher)return{kind:"conflict",reason:`Installed from ${Gr(e.metadata.publisher)}`}}(a,n);if(void 0!==e)return e;if(!(hn(n.metadata.version,a.metadata.version)>0))return{kind:"installed",version:a.metadata.version}}const i=e.check(t.text);return i.ok?void 0===a?{kind:"available"}:{kind:"update",from:a.metadata.version}:{kind:"conflict",reason:mn(i.errors)}}function Wr(e){switch(e.kind){case"available":return"Not installed";case"installed":return`Installed, ${e.version}`;case"update":return`Update from ${e.from}`;case"builtin":return"Built in";case"conflict":case"invalid":return e.reason}}function Gr(e){try{return new URL(e).host||e}catch{return e}}function Yr(e){return{update:0,available:1,installed:2,conflict:3,builtin:4,invalid:5}[e.kind]}function Qr(e){const t=bn(e).length;return[Gr(e.metadata.publisher),e.metadata.version,1===t?"1 field":`${t} fields`].join(" · ")}function Zr({definition:e,summary:t=!1,trailing:s,children:a}){return n.jsxs("li",{className:"itype",children:[n.jsxs("div",{className:"itype__row",children:[n.jsx("span",{className:"itype__ext",children:e.spec.extension}),n.jsxs("span",{className:"itype__text",children:[n.jsx("span",{className:"itype__name",children:e.spec.title}),t?n.jsx("span",{className:"itype__summary",children:e.spec.summary}):null,n.jsx("span",{className:"itype__meta",children:Qr(e)})]}),s?n.jsx("span",{className:"itype__end",children:s}):null]}),a]})}function Xr({fields:e,label:t}){return n.jsx("ul",{className:"itype__fields","aria-label":t,children:e.map(e=>{return n.jsxs("li",{children:[n.jsx("span",{children:e.label}),n.jsx("code",{children:e.type}),(t=e.type,gn(t)&&yn(t)?n.jsx("span",{className:"itype__concealed",role:"img","aria-label":"Concealed, never searchable",title:"Concealed, never searchable",children:n.jsx(Ce,{size:12})}):null)]},e.id);var t})})}function eo({title:e,armed:t,busy:s,onArm:a,onRemove:i,onKeep:r}){return t?n.jsxs(n.Fragment,{children:[n.jsx("button",{type:"button",className:"icon-btn icon-btn--sm is-armed",disabled:s,"aria-label":`Remove ${e}; its items keep their values`,title:"Remove; items keep their values",onClick:i,children:n.jsx(Y,{size:16})}),n.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":`Keep ${e}`,title:"Keep it",onClick:r,children:n.jsx(Q,{size:16})})]}):n.jsx("button",{type:"button",className:"icon-btn icon-btn--sm",disabled:s,"aria-label":`Remove ${e}`,title:`Remove ${e}`,onClick:a,children:n.jsx(Y,{size:16})})}function to(){const e=Hs();return e?n.jsx(G,{small:!0,label:"Write a new item type",onClick:()=>e(Ir),children:n.jsx(ne,{size:16})}):null}function no({files:e,busy:s,onRemove:a}){const[i,r]=t.useState(null),o=function(e,t){const n=vn();return e.list().filter(e=>yr(e.path)===t).flatMap(e=>{const t=n.get(vr(e.path).replace(/\.json$/,""));return t?[t]:[]}).sort((e,t)=>e.spec.title.localeCompare(t.spec.title))}(e,Sr);return n.jsxs("section",{className:"pack-group","aria-labelledby":"pack-group-yours",children:[n.jsxs("div",{className:"pack-group__head",children:[n.jsx("h3",{className:"pack-group__label",id:"pack-group-yours",children:"Yours"}),n.jsx(to,{})]}),0===o.length?null:n.jsx("ul",{className:"itype-list","aria-label":"Types you added",children:o.map(e=>{const t=e.metadata.id,o=e.spec.title;return n.jsx(Zr,{definition:e,trailing:n.jsxs(n.Fragment,{children:[n.jsx(qs,{path:Tr(t),name:`${t}.json`}),n.jsx(eo,{title:o,armed:i===t,busy:s,onArm:()=>r(t),onKeep:()=>r(null),onRemove:()=>{r(null),a(t)}})]})},t)})})]})}function so(e){return"installed"===e.kind?"ok":"update"===e.kind||"conflict"===e.kind?"warn":"invalid"===e.kind?"err":"idle"}function ao({offer:e,state:t,busy:s,onInstall:a}){const i=e.definition.spec.title;if("available"===t.kind||"update"===t.kind){const r="update"===t.kind?`Update ${i} to ${e.definition.metadata.version}`:`Install ${i}`;return n.jsx("button",{type:"button",className:"icon-btn icon-btn--sm",disabled:s,"aria-label":r,title:r,onClick:()=>a(e),children:n.jsx("update"===t.kind?Z:Ae,{size:16})})}return null}function io({offer:e,busy:s,onInstall:a}){const[i,r]=t.useState(!1),o=Hr(vn(),e),l=e.definition.spec.title,c=i?`Hide ${l}'s fields`:`Inspect ${l}'s fields`,d=bn(e.definition).map(e=>({id:e.id,label:e.label,type:e.type}));return n.jsx(Zr,{definition:e.definition,summary:!0,trailing:n.jsxs(n.Fragment,{children:["available"===o.kind?null:n.jsx(Bn,{tone:so(o),label:Wr(o)}),n.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-expanded":i,"aria-label":c,title:c,onClick:()=>r(!i),children:n.jsx(i?Ie:le,{size:16})}),n.jsx(ao,{offer:e,state:o,busy:s,onInstall:a})]}),children:i?n.jsx(Xr,{fields:d,label:`${l} fields`}):null})}function ro({offer:e}){return n.jsx("li",{className:"itype",children:n.jsxs("div",{className:"itype__row",children:[n.jsx("span",{className:"itype__ext",children:"—"}),n.jsxs("span",{className:"itype__text",children:[n.jsx("span",{className:"itype__name itype__name--mono",children:e.path}),n.jsx("span",{className:"itype__meta",children:"cannot be installed"})]}),n.jsx("span",{className:"itype__end",children:n.jsx(Bn,{tone:"err",label:e.problem})})]})})}function oo(e){const t=vn();return[...e].sort((e,n)=>{const s=Yr(Hr(t,e))-Yr(Hr(t,n));return 0===s&&e.ok&&n.ok?e.definition.spec.title.localeCompare(n.definition.spec.title):s})}function lo({market:e,busy:t,onInstall:s}){const a=e.sources.flatMap(t=>{const n=e.stateOf(t),s=ir(t);return"ok"!==n.status||null===s?[]:[{reference:t,label:or(s),listing:n.listing}]});return 0===a.length?null:n.jsx(n.Fragment,{children:a.map(({reference:e,label:a,listing:i})=>n.jsxs("section",{className:"itype-offers","aria-label":`${i.name} — ${a}`,children:[n.jsxs("h3",{className:"itype-offers__head",children:[n.jsx("span",{children:i.name}),n.jsx("span",{className:"itype-count",children:i.offers.length})]}),0===i.offers.length?n.jsx("p",{className:"itype-empty",children:"This marketplace lists no item types."}):n.jsx("ul",{className:"itype-list","aria-label":`Offered by ${i.name}`,children:oo(i.offers).map(e=>e.ok?n.jsx(io,{offer:e,busy:t,onInstall:s},e.path):n.jsx(ro,{offer:e},e.path))})]},e))})}function co(e){switch(e.status){case"ok":{const t=e.listing.offers.length;return n.jsx(Bn,{tone:"ok",label:`Read: ${t} ${1===t?"type":"types"}`})}case"err":return n.jsx(Bn,{tone:"err",label:e.message});case"loading":return n.jsx(Bn,{tone:"idle",label:"Reading"});default:return n.jsx(Bn,{tone:"idle",label:"Not read yet"})}}function uo(e,t){const n=gr(e)?"default · ":"";if("ok"===t.status){const e=t.listing.offers.length;return`${n}${t.listing.name} · ${e} ${1===e?"type":"types"}`}return"err"===t.status?`${n}not read`:"loading"===t.status?`${n}reading…`:`${n}not read yet`}function po({reference:e,market:t,report:s}){const a=ir(e),i=t.stateOf(e),r=n.jsx(X,{id:`item-types:marketplace:${e}`,title:"Marketplace",message:"err"===i.status?i.message:null});if(null===a)return r;const o=or(a);return n.jsxs("li",{className:"itype-source","aria-busy":"loading"===i.status,children:[n.jsx("span",{className:"itype-source__mark","aria-hidden":"true",children:n.jsx(Te,{size:16})}),n.jsxs("span",{className:"itype__text",children:[n.jsx("span",{className:"itype__name itype__name--mono",children:o}),n.jsx("span",{className:"itype__meta",children:uo(e,i)})]}),r,n.jsxs("span",{className:"itype__end",children:[co(i),n.jsx("button",{type:"button",className:"icon-btn icon-btn--sm",disabled:"loading"===i.status,"aria-label":`Read ${o} again`,title:"Read again",onClick:()=>t.load(e),children:n.jsx(Z,{size:16})}),n.jsx("a",{className:"icon-btn icon-btn--sm",href:lr(a),target:"_blank",rel:"noopener noreferrer","aria-label":`Open ${o} in a new tab`,title:"Open the repository",children:n.jsx(Oe,{size:16})}),n.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":`Stop reading ${o}`,title:"Remove this marketplace",onClick:()=>{t.remove(e).then(t=>{t.ok&&nn(`item-types:marketplace:${e}`),s(t)})},children:n.jsx(Y,{size:16})})]})]})}function fo({market:e}){const[s,a]=t.useState(""),[i,r]=t.useState(null);return n.jsxs("form",{className:"itype-add",onSubmit:t=>{t.preventDefault(),e.add(s).then(e=>{e.ok?(a(""),r(null)):r(e.message)})},children:[n.jsx(X,{id:"item-types:marketplace-add",title:"Marketplace",message:i}),n.jsx(H,{id:"item-type-marketplace",label:"Add a marketplace",mono:!0,lead:n.jsx(Te,{size:17}),placeholder:"owner/repo or a git URL",value:s,status:i?n.jsx(Bn,{tone:"err",label:i}):void 0,onValueChange:e=>{a(e),r(null)},tail:n.jsx("button",{type:"submit",className:"icon-btn",disabled:!e.ready||""===s.trim(),"aria-label":"Add marketplace",title:"Add marketplace",children:n.jsx(ne,{size:16})})})]})}function mo({market:e}){const s=e.sources.some(gr),[a,i]=t.useState(null),r=e=>i(e.ok?null:e.message),o=e.fileProblem??a;return n.jsxs("div",{className:"itype-sources",children:[n.jsxs("div",{className:"itype-sources__file",children:[n.jsx("code",{children:"marketplaces.json"}),n.jsx(X,{id:"item-types:marketplaces-file",title:"marketplaces.json",message:o}),o?n.jsx(Bn,{tone:"err",label:o}):null,n.jsx(qs,{path:$r,name:"marketplaces.json"})]}),e.sources.length>0?n.jsx("ul",{className:"itype-list","aria-label":"Marketplaces",children:e.sources.map(t=>n.jsx(po,{reference:t,market:e,report:r},t))}):e.ready?n.jsx("p",{className:"itype-empty",children:"No marketplaces listed."}):null,n.jsxs("div",{className:"itype-sources__foot",children:[n.jsx(fo,{market:e}),s?null:n.jsx("button",{type:"button",className:"icon-btn","aria-label":"List the OpenSesame marketplace again",title:"Restore the default marketplace",onClick:()=>{e.restore().then(r)},children:n.jsx(Z,{size:16})})]})]})}function ho({row:e}){return"held"===e.control&&0===e.held?n.jsx(Bn,{tone:"ok",label:e.sentence}):"held"===e.control?n.jsx("span",{className:"pack__held",role:"img","aria-label":e.sentence,title:e.sentence,children:e.held}):"managed"===e.control?n.jsx(Bn,{tone:"ok",label:e.sentence}):n.jsxs(n.Fragment,{children:[e.busy?n.jsx("span",{className:"pack__spin","aria-hidden":"true"}):"failed"===e.phase?n.jsx(Bn,{tone:"err",label:e.sentence}):null,n.jsx("span",{className:"pack__track","aria-hidden":"true"})]})}function bo({row:e}){return n.jsxs(n.Fragment,{children:[n.jsx("span",{className:"itype__ext",children:e.extension}),n.jsxs("span",{className:"itype__text",children:[n.jsx("span",{className:"itype__name",children:e.title}),n.jsx("span",{className:"itype__summary pack__summary",children:e.summary}),n.jsx("span",{className:"itype__meta",children:e.facts})]}),n.jsx("span",{className:"pack__end",children:n.jsx(ho,{row:e})})]})}function go({row:e,onToggle:t}){const s=`pack-${e.id}-sentence`;return"switch"!==e.control?n.jsx("li",{className:"pack pack--fixed","data-phase":e.phase,children:n.jsx("div",{className:"pack__hit",children:n.jsx(bo,{row:e})})}):n.jsxs("li",{className:"pack","data-phase":e.phase,children:[n.jsx("button",{type:"button",role:"switch",className:"pack__hit","aria-checked":e.checked,"aria-busy":e.busy,"aria-label":e.title,"aria-describedby":s,onClick:()=>t(e),children:n.jsx(bo,{row:e})}),n.jsx("span",{id:s,className:"visually-hidden",children:e.sentence})]})}function yo({groups:e,query:t,onQuery:s,onToggle:a}){return n.jsxs("div",{className:"pack-list",children:[n.jsx("div",{className:"pack-search",children:n.jsx(H,{id:"item-type-search",label:"Search item types",mono:!0,type:"text",placeholder:"Search item types",lead:n.jsx(ze,{size:17}),value:t,onValueChange:s,tail:""===t?void 0:n.jsx("button",{type:"button",className:"icon-btn","aria-label":"Clear search",title:"Clear search",onClick:()=>s(""),children:n.jsx(Q,{size:16})})})}),0===e.length?n.jsxs("p",{className:"itype-empty",children:["No item type matches “",t.trim(),"”."]}):e.map(e=>n.jsxs("section",{className:"pack-group","aria-labelledby":`pack-group-${e.id}`,children:[n.jsx("h3",{className:"pack-group__label",id:`pack-group-${e.id}`,children:e.label}),n.jsx("ul",{className:"itype-list",children:e.rows.map(e=>n.jsx(go,{row:e,onToggle:a},e.id))})]},e.id))]})}const vo="opensesame.dev/v1alpha1",jo="Marketplace",ko=/^[0-9a-f]{64}$/;function xo(e){return{ok:!1,message:e}}function wo(e,t){return Object.keys(e).find(e=>!t.includes(e))}function _o(e,t){return void 0===e?"":ht(e)&&e.length<=t?e.trim():null}function No(e,t){if(!mt(e))return`itemTypes[${t}] is not an object`;const n=wo(e,["path","sha256"]);if(void 0!==n)return`itemTypes[${t}].${n} is not allowed`;const s=e.path;if(!ht(s)||!Zi(s)||!s.endsWith(".json"))return`itemTypes[${t}].path must be a relative .json path in the repository`;const a=e.sha256;return void 0===a||ht(a)&&ko.test(a)?{path:s,sha256:a??null}:`itemTypes[${t}].sha256 must be 64 lowercase hex characters`}class $o extends Error{name="MarketplaceError";failure;constructor(e,t){super(t),this.failure=e}}async function So(e,t){if(void 0!==vt(e))throw new $o("unanswered","The repository addresses a private or loopback host.");const n=new AbortController,s=setTimeout(()=>n.abort(),8e3);try{let s;try{s=await((...e)=>fetch(...e))(e,{method:"GET",credentials:"omit",mode:"cors",redirect:"error",referrerPolicy:"no-referrer",cache:"no-cache",signal:n.signal})}catch{throw new $o("unanswered","The repository did not answer.")}if(404===s.status)throw new $o("missing","Not found in the repository.");if(!s.ok)throw new $o("unanswered",`The repository answered ${s.status}.`);try{return await async function(e,t){const n=e.body;if(!n)return"";const s=n.getReader(),a=new TextDecoder("utf-8",{fatal:!0,ignoreBOM:!0});let i="",r=0;for(;;){const e=await s.read();if(e.done)break;if(r+=e.value.byteLength,r>t)throw await s.cancel(),new $o("malformed",`a file exceeds ${t} bytes`);i+=a.decode(e.value,{stream:!0})}return i+a.decode()}(s,t)}catch(a){if(a instanceof $o)throw a;throw new $o("unanswered","The repository did not answer.")}}finally{clearTimeout(s)}}async function Co(e,t,n){const s=n.path;let a;try{a=await So(dr(e,s,t),jn)}catch(o){return{ok:!1,path:s,problem:o instanceof Error?o.message:"Unreadable."}}const i=Gs(Ys((new TextEncoder).encode(a)));if(null!==n.sha256&&n.sha256!==i)return{ok:!1,path:s,problem:"Does not match the pinned SHA-256."};if(a.startsWith("\ufeff"))return{ok:!1,path:s,problem:"Starts with a byte-order mark; save it as UTF-8 without one."};const r=un(a,"community");return r.ok?{ok:!0,path:s,text:a,sha256:i,definition:r.definition}:{ok:!1,path:s,problem:mn(r.errors)}}const Io=new Map;function Ao(){const e=Jr(),s=nt("settings.item-types"),[a,i]=t.useState("types"),[r,o]=t.useState(""),l=m(),c=function(e){const[n,s]=t.useState(null),[a,i]=t.useState(""),r=t.useRef(new Map);return t.useEffect(()=>{const t=function(e,t){for(const n of cn()){const s=ke(n.id,t),a=Ei(n.title,e.get(n.id)??"off",s.phase,s.reason??null);if(null!==a)return a}return null}(r.current,e);r.current=new Map(cn().map(t=>[t.id,ke(t.id,e).phase])),null!==t&&i(t)},[e]),{toggle:e=>{s(null),e.checked?Pe(e.id).then(e=>{e.ok||s({tone:"err",text:e.reason})}):Re(e.id)},outcome:n,said:a}}(l),d=function(e,n){const{text:s,unreadable:a}=function(e){const n=$e(),[s,a]=t.useState({files:null,revision:-1,text:null,unreadable:!1});t.useEffect(()=>{let t=!0;return e.read($r).then(s=>{t&&a({files:e,revision:n,text:s,unreadable:!1})},()=>{t&&a({files:e,revision:n,text:null,unreadable:!0})}),()=>{t=!1}},[e,n]);const i=s.files===e&&s.revision===n;return{text:i?s.text:null,unreadable:i&&s.unreadable}}(n),i=null===s?null:hr(s),r=i?.ok?i.sources:[],[,o]=t.useState(0),l=t.useCallback(()=>o(e=>e+1),[]),c=t.useCallback(e=>{const t=ir(e);null!==t&&(Io.set(e,{status:"loading"}),l(),async function(e){const t=await async function(e){if("bitbucket"!==e.forge||null!==e.ref)return"raw"===e.forge?null:e.ref;const t=await So(function(e){return`https://api.bitbucket.org/2.0/repositories/${e.repo}`}(e),262144);try{const e=JSON.parse(t),n=mt(e)?e.mainbranch:void 0;if(mt(n)&&ht(n.name))return n.name}catch{}throw new $o("malformed","Bitbucket named no main branch.")}(e);let n;try{n=await So(dr(e,Ji,t),65536)}catch(i){if(i instanceof $o&&"missing"===i.failure)throw new $o("missing",`No ${Ji} in that repository.`);throw i}const s=function(e){if((new TextEncoder).encode(e).byteLength>65536)return xo("the index exceeds 65536 bytes");let t;try{t=JSON.parse(e)}catch{return xo("the index is not JSON")}if(!mt(t))return xo("the index is not an object");const n=wo(t,["apiVersion","kind","metadata","spec"]);if(void 0!==n)return xo(`${n} is not allowed`);if(t.apiVersion!==vo)return xo(`apiVersion must be ${vo}`);if(t.kind!==jo)return xo(`kind must be ${jo}`);const s=function(e){if(!mt(e))return"metadata is required";const t=wo(e,["name","description"]);if(void 0!==t)return`metadata.${t} is not allowed`;const n=_o(e.name,64),s=_o(e.description,200);return n?null===s?"metadata.description is up to 200 characters":{name:n,description:s}:"metadata.name is required, up to 64 characters"}(t.metadata);if("string"==typeof s)return xo(s);if(!mt(t.spec))return xo("spec is required");const a=function(e){if(void 0===e)return[];if(!Array.isArray(e)||e.length>64)return"spec.itemTypes must list at most 64 definitions";const t=[];for(const[n,s]of e.entries()){const e=No(s,n);if("string"==typeof e)return e;if(t.some(t=>t.path===e.path))return`itemTypes[${n}].path is listed twice`;t.push(e)}return t}(t.spec.itemTypes);return"string"==typeof a?xo(a):{ok:!0,index:{...s,itemTypes:a}}}(n);if(!s.ok)throw new $o("malformed",s.message);const a=await async function(e,t,n){const s=new Array(n.itemTypes.length);let a=0;return await Promise.all(Array.from({length:6},async()=>{for(;a<n.itemTypes.length;){const i=a;a+=1;const r=n.itemTypes[i];r&&(s[i]=await Co(e,t,r))}})),s}(e,t,s.index);return{name:s.index.name,description:s.index.description,offers:a}}(t).then(t=>Io.set(e,{status:"ok",listing:t})).catch(t=>Io.set(e,{status:"err",message:t instanceof Error?t.message:"Could not read it."})).finally(l))},[l]),d=r.join("\n");t.useEffect(()=>{if(e)for(const e of""===d?[]:d.split("\n"))"idle"===(Io.get(e)?.status??"idle")&&c(e)},[e,d,c]);const u=a?"marketplaces.json could not be opened with this vault's key.":"marketplaces.json is still being read.",p=async e=>{if(null===s)return{ok:!1,message:u};const t=e(s);if(!t.ok)return t;const a=await n.write($r,t.text);return a.ok?{ok:!0}:a};return{sources:r,ready:null!==s,fileProblem:a?"marketplaces.json could not be opened with this vault's key.":i&&!i.ok?i.message:null,stateOf:e=>Io.get(e)??{status:"idle"},load:c,add:e=>p(t=>function(e,t){const n=hr(e);if(!n.ok)return n;const s=ur(t);return null===s?{ok:!1,message:"Not a repository this page can read. Use owner/repo, a GitHub, GitLab, Codeberg or Bitbucket address, gitea+https://host/owner/repo, or the raw address of .opensesame/marketplace.json."}:n.sources.includes(s)?{ok:!1,message:"That marketplace is already listed."}:n.sources.length>=8?{ok:!1,message:"At most 8 marketplaces."}:{ok:!0,reference:s,text:pr([...n.sources,s])}}(t,e)),remove:e=>(Io.delete(e),p(t=>function(e,t){const n=hr(e);return n.ok?{ok:!0,reference:t,text:pr(n.sources.filter(e=>e!==t))}:n}(t,e))),restore:()=>p(br)}}("marketplace"===a,e),{busy:u,outcome:p,install:h,remove:b}=function(e){const[n,s]=t.useState(!1),[a,i]=t.useState(null),r=async e=>{s(!0),i(null);try{i({tone:"ok",text:await e()})}catch(t){i({tone:"err",text:t instanceof Error?t.message:"It did not save."})}finally{s(!1)}};return{busy:n,outcome:a,install:t=>{r(async()=>{const n=un(t,"community");if(!n.ok)throw new Error("That definition does not parse.");const{id:s}=n.definition.metadata,a=await e.write(Tr(s),t);if(!a.ok)throw new Error(a.message);return`${n.definition.spec.title} installed as ${s}.json.`})},remove:t=>{r(async()=>{const n=vn().get(t)?.spec.title??t,s=await e.remove(Tr(t));if(!s.ok)throw new Error(s.message);return`${n} removed. Its items keep their values.`})}}}(e),g=c.outcome??p,y=function(e,t={}){const n=(t.query??"").trim(),s=t.managed??new Set,a=new Map;for(const r of cn()){const t=Ti(r),i=Ri(r,e,s);Pi(i,t,n)&&a.set(t,[...a.get(t)??[],i])}const i=e=>{const t=Ii.indexOf(e);return-1===t?Ii.length:t};return[...a.entries()].sort(([e],[t])=>i(e)-i(t)||e.localeCompare(t)).map(([e,t])=>{return{id:e,label:(n=e,n.charAt(0).toUpperCase()+n.slice(1)),rows:[...t].sort((e,t)=>e.title.localeCompare(t.title))};var n})}(l,{query:r,managed:new Set(f("item-kind").map(e=>e.kind))}),v=vn().list().filter(({source:e})=>"builtin"!==e).length;return n.jsxs("section",{className:"panel itype-panel",id:"item-types",children:[n.jsxs("div",{ref:s,className:"panel__head",children:[n.jsx("h2",{children:"Item types"}),n.jsxs("span",{className:"itype-head__end",children:[n.jsx("span",{className:"itype-count",children:Li(l)}),l.pending>0?n.jsx("span",{className:"pack__spin",role:"img","aria-label":`Installing ${l.pending} item ${1===l.pending?"type":"types"}`,title:`Installing ${l.pending} item ${1===l.pending?"type":"types"}`}):null,g?n.jsx(Bn,{tone:g.tone,label:g.text}):null,n.jsx(G,"types"===a?{small:!0,label:"Find more item types",onClick:()=>i("marketplace"),children:n.jsx(Te,{size:16})}:{small:!0,label:"Back to item types",onClick:()=>i("types"),children:n.jsx(fe,{size:16})})]})]}),n.jsx(X,{id:"settings:item-types:outcome",title:"Item types",message:"err"===g?.tone?g.text:null}),n.jsx("output",{className:"visually-hidden","aria-live":"polite",children:"ok"===g?.tone?g.text:c.said}),n.jsx("div",{className:"panel__body",children:n.jsxs("div","types"===a?{className:"itype-tabpanel",children:[n.jsx(yo,{groups:y,query:r,onQuery:o,onToggle:c.toggle}),v>0||""===r?n.jsx(no,{files:e,busy:u,onRemove:b}):null]}:{className:"itype-tabpanel",children:[n.jsx(mo,{market:d}),n.jsx(lo,{market:d,busy:u,onInstall:e=>h(e.text)})]})})]})}function To(e){return n.jsx(Bn,"verified"===e.proofStatus?{tone:"ok",label:"Verified"}:"stale"===e.proofStatus?{tone:"warn",label:"Stale"}:{tone:"idle",label:"Untested"})}function Oo({row:e,preferred:t,onTest:s,onPreferred:a,onRemove:i}){const r=kn(e),o=xn(e);return n.jsxs("div",{className:"sw sw--method","data-protector-id":e.protectorId,children:[n.jsxs("div",{children:[n.jsxs("div",{className:"sw__name",children:[e.mechanismLabel,To(e),e.dependsOnVault&&"verified"===e.proofStatus?n.jsx(Bn,{tone:"idle",label:"Its credential is sealed in this vault, so it is not a way back in"}):null,t?n.jsx(Bn,{tone:"ok",label:"Preferred unlock"}):null]}),n.jsx("p",{className:"sw__sub",children:e.identityLabel})]}),n.jsxs("div",{className:"actions",children:[wn(e.kind)?n.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":`Test ${e.mechanismLabel}`,title:`Test ${e.mechanismLabel}`,onClick:()=>s(e.protectorId),children:n.jsx(Z,{size:16})}):null,r&&!t?n.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":`Preferred unlock ${e.mechanismLabel}`,title:`Preferred unlock ${e.mechanismLabel}`,onClick:()=>a(e.protectorId),children:n.jsx(Le,{size:16})}):null,o?null:n.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":`Remove ${e.mechanismLabel}`,title:`Remove ${e.mechanismLabel}`,onClick:()=>i(e.protectorId),children:n.jsx(Y,{size:16})})]})]})}const zo={testCloudFlow:ns};function Ro(e,t,n){sn({id:"vault-key-protection",tone:e,title:t,body:n})}async function Po(e,t){try{await e()}catch(n){if(n instanceof Nn||n instanceof Error)return void Ro("err","Vault key protection",n.message);Ro("err","Vault key protection",t)}}function Lo({actions:e}={}){const{header:s,guest:a}=dt(),i=ut(),[r,o]=t.useState(null),l=nt("settings.vault-key-protection"),c=t.useMemo(()=>$n({header:a?null:s}),[a,s]),d=function(e){const t=ut(),{status:n,guest:s,tomb:a}=dt(),i=a??"";if("unlocked"===n&&!s&&!_n(a??null))return{onAdd:()=>e.openSheet({kind:"add"}),onTest:n=>{const s=e.methodKind(n);"recovery-key"!==s?"age-recipient"!==s?Po(async()=>{"aws-kms"===s||"gcp-kms"===s?await zo.testCloudFlow({protection:t.protection,tomb:i,protectorId:n,kind:s}):await t.protection.testProtector(n),Ro("info","Vault key protection","Protector proof succeeded.")},"Protector proof failed."):e.openSheet({kind:"test-age",protectorId:n}):e.openSheet({kind:"test-recovery",protectorId:n})},onPreferred:e=>{Po(async()=>{await t.protection.setPreferred(e),Ro("info","Vault key protection","Preferred protector updated.")},"Could not set preferred protector.")},onRemove:e=>{Po(async()=>{await t.protection.removeProtector(e),Ro("info","Vault key protection","Protector removed.")},"Could not remove protector.")},onRotateCompromised:()=>e.openSheet({kind:"rotate"})}}({openSheet:o,methodKind:e=>c.methods.find(t=>t.protectorId===e)?.kind}),u=e??d,p=void 0!==u;return t.useEffect(()=>{p&&s&&i.protection.ensureProtectionProjected().catch(()=>{})},[p,s,i]),u?n.jsxs(n.Fragment,{children:[n.jsxs("section",{className:"panel set__security",id:"vault-key-protection",ref:l,"aria-labelledby":"vault-key-protection-title",children:[n.jsxs("div",{className:"panel__head",children:[n.jsx("div",{children:n.jsx("h2",{id:"vault-key-protection-title",children:"Vault key protection"})}),n.jsxs("div",{className:"actions",children:[n.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":"Add key protection method",title:"Add key protection method",onClick:u.onAdd,children:n.jsx(ne,{size:16})}),n.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":"Rotate compromised vault key",title:"Rotate compromised vault key",onClick:u.onRotateCompromised,children:n.jsx(Ee,{size:16})})]})]}),n.jsx("div",{className:"panel__body",children:c.methods.map(e=>n.jsx(Oo,{row:e,preferred:c.preferredProtectorId===e.protectorId,onTest:u.onTest,onPreferred:u.onPreferred,onRemove:u.onRemove},e.protectorId))})]}),r?n.jsx(ss,{request:r,onClose:()=>o(null)}):null]}):null}const Eo=new Set([Fi,Bi,Di]);function Mo(e,t){return t===L||t===function(e){return`settings/${e}/${L}`}(e)||"features"===e&&Eo.has(t)}function Fo(e){const t=[];for(const n of e){const e=yr(n.path),s=t.find(t=>t.directory===e);s?s.files.push(n):t.push({directory:e,files:[n]})}return t}function Bo(e){return{paddingLeft:.9*(e.split("/").length-1)+"rem"}}function Do(e,t){if(void 0===t||e.some(e=>e.directory===t))return e;const n=e.findIndex(e=>e.files.every(e=>e.readOnly)),s=[...e];return s.splice(n<0?s.length:n,0,{directory:t,files:[]}),s}function Ko({file:e,selected:t,onSelect:s}){return n.jsx("li",{children:n.jsxs("button",{type:"button",className:"vfiles__file"+(t?" is-open":""),"aria-current":t?"true":void 0,onClick:()=>s(e.path),children:[n.jsx("span",{children:vr(e.path)}),e.readOnly?n.jsx("span",{className:"vfiles__ro",role:"img","aria-label":"read-only",title:"read-only",children:n.jsx(Ce,{size:11})}):null]})})}function Vo({files:e,selected:t,creates:s,onSelect:a}){return n.jsx("nav",{className:"vfiles__list","aria-label":"Files",children:Do(Fo(e),s?.directory).map(({directory:e,files:i})=>{const r=i.length>0&&i.every(e=>e.readOnly),o=!r||e===yr(t),l=n.jsx("ul",{children:i.map(e=>n.jsx(Ko,{file:e,selected:e.path===t,onSelect:a},e.path))}),c=n.jsxs(n.Fragment,{children:[n.jsxs("span",{title:`${e}/`,children:[vr(e),"/"]}),n.jsx("span",{className:"vfiles__count",children:i.length})]});return r?n.jsxs("details",{className:"vfiles__dir",style:Bo(e),open:o,children:[n.jsx("summary",{className:"vfiles__dirname",children:c}),l]},e):n.jsxs("div",{className:"vfiles__dir",style:Bo(e),children:[n.jsxs("div",{className:"vfiles__dirname",children:[c,s?.directory===e?n.jsx("button",{type:"button",className:"icon-btn icon-btn--sm","aria-label":`New file in ${e}/`,title:"New file",onClick:()=>a(s.draftPath),children:n.jsx(ne,{size:14})}):null]}),l]},e)})})}function Uo({category:e,selected:t,onSelect:s}){const a=qr(e);if(null===a)return null;const i=a.list().filter(t=>!Mo(e,t.path)),r=a.creates?.draftPath,o=i.find(e=>e.path===t)??(t===r&&void 0!==r?{path:r,language:"json",readOnly:!1,removable:!1}:i[0]);return void 0===o?null:n.jsxs("div",{className:"vfiles",children:[n.jsx(Vo,{files:i,selected:o.path,creates:a.creates,onSelect:s}),n.jsx("div",{className:"vfiles__open",children:n.jsx(Qs,{file:o,files:a,initial:o.path===r?a.creates?.template:void 0,onMoved:e=>s(e)},o.path)})]})}const Jo=new Map([["owner_not_present","Open one of your own vaults first"],["open_vault_departs","The open vault travels — mark it safe, or open another"],["nothing_departs","Every vault is marked safe; nothing would leave"],["unknown_vault","That vault is no longer on this device"],["duress_active","Not while a duress response holds this device"],["storage_not_durable","This browser is not keeping files for this site"],["vault_has_no_files","A vault marked to leave has nothing stored"],["vault_needs_opening","A vault is in the old format; open it once, then pack again"],["self_check_failed","The bundle did not open with its own code; nothing was removed"],["changed_since_packed","A vault changed after packing; pack again"],["not_acknowledged","Confirm where the bundle and the code are"],["code_malformed","That return code has a typo in it"],["code_mismatch","That return code does not open this bundle"],["foreign_file","This bundle carries files that are not a vault's; refused"],["unsupported_version","This bundle was written by a newer version"],["bundle_too_large","That file is larger than any travel bundle"]]);function qo(e){return Jo.get(e)??"That is not a travel bundle"}function Ho(e,t){return`${e} ${t}${1===e?"":"s"}`}function Wo({name:e,meta:t,side:s}){return n.jsxs("li",{className:"travel__row",children:[n.jsxs("span",{className:"travel__name",children:[n.jsx("strong",{children:e}),t?n.jsx("span",{children:t}):null]}),s?n.jsx("span",{className:"travel__side",children:s}):null]})}function Go(e){const t=`${Ho(e.removedFiles,"file")} removed`,n=`${Ho(e.departed.length,"vault")} left this device`;return"applied_local"===e.completion?{tone:"ok",text:n,meta:t}:{tone:"warn",text:n,meta:`${t} · ${e.leftovers.length} could not be`}}function Yo({pkg:e}){return n.jsxs(n.Fragment,{children:[n.jsx(G,{small:!0,label:"Save the travel bundle",onClick:()=>function(e){const t=new Blob([e.bundleJson],{type:"application/octet-stream"});Xs(t,e.bundleFileName,"Travel bundle").catch(()=>{})}(e),children:n.jsx(Ae,{size:16})}),n.jsx(G,{small:!0,label:"Travel bundle actions","aria-haspopup":"menu",onClick:t=>{const s=t.currentTarget,a=s.getBoundingClientRect();Un({clientX:a.right,clientY:a.bottom,preventDefault:()=>t.preventDefault()},s,"Travel bundle actions",[[{id:"download-travel-bundle",label:"Download the travel bundle",icon:n.jsx(Ae,{size:16}),run:()=>ea(new Blob([e.bundleJson],{type:"application/octet-stream"}),e.bundleFileName)}]])},children:n.jsx(Me,{size:16})})]})}function Qo({notice:e}){return e?n.jsx("p",{className:"vexport__marks",children:n.jsx(Bn,{tone:e.tone,label:e.meta?`${e.text} · ${e.meta}`:e.text})}):null}const Zo="ABCDEFGHIJKLMNOPQRSTUVWXYZ234567";class Xo extends Error{code;constructor(e){super(e),this.name="ReturnCodeError",this.code="code_malformed"}}async function el(e){const t=await crypto.subtle.digest("SHA-256",new Uint8Array(e));return new Uint8Array(t).slice(0,2)}function tl(){return{bytes:crypto.getRandomValues(new Uint8Array(18))}}async function nl(e){const t=new Uint8Array(20);t.set(e.bytes),t.set(await el(e.bytes),18);const n=function(e){let t=0,n=0,s="";for(const a of e)for(n=n<<8|a,t+=8;t>=5;)t-=5,s+=Zo[n>>>t&31];return t>0&&(s+=Zo[n<<5-t&31]),s}(t);return n.match(/.{1,4}/g)?.join("-")??n}async function sl(e){const t=function(e){return e.toUpperCase().replace(/[\s-]/g,"").replace(/0/g,"O").replace(/1/g,"I").replace(/8/g,"B")}(e);if(32!==t.length)throw new Xo(`A return code is 32 characters; this one has ${t.length}.`);const n=function(e){let t=0,n=0;const s=[];for(const a of e){const e=Zo.indexOf(a);if(e<0)throw new Xo(`"${a}" is not part of a return code.`);n=n<<5|e,t+=5,t>=8&&(t-=8,s.push(n>>>t&255))}return new Uint8Array(s)}(t),s=n.slice(0,18),a=await el(s);if(20!==n.length||a.some((e,t)=>e!==n[18+t]))throw new Xo("That return code has a typo in it.");return{bytes:s}}async function al(e,t){const n=await crypto.subtle.importKey("raw",new Uint8Array(e.bytes),"HKDF",!1,["deriveKey"]);return crypto.subtle.deriveKey({name:"HKDF",hash:"SHA-256",salt:(new TextEncoder).encode(t),info:(new TextEncoder).encode("opensesame.travel-bundle.v1")},n,{name:"AES-GCM",length:256},!1,["encrypt","decrypt"])}const il="opensesame.travel-bundle",rl=67108864;class ol extends Error{code;constructor(e,t){super(t),this.name="TravelBundleError",this.code=e}}const ll=/^[a-zA-Z0-9][a-zA-Z0-9._-]*$/,cl=new Set(["guest","guest-scratch"]);function dl(e){return`${il}:v1:${e}`}function ul(){return`trv_${crypto.randomUUID()}`}function pl(e){return`opensesame-${e.replace(/^trv_/,"").slice(0,8)}.travel.json`}function fl(e,t,n){if(!Array.isArray(e))throw new ol("bundle_malformed","Not a travel bundle.");return e.map(e=>{if(!mt(e)||!ht(e.file)||!ht(e.text))throw new ol("bundle_malformed","Not a travel bundle.");if(!n(t,e.file))throw new ol("foreign_file","This bundle carries a file that belongs to no vault in it.");return{file:e.file,text:e.text}})}async function ml(e,t,n){const s=function(e){if(e.length>rl||(new TextEncoder).encode(e).byteLength>rl)throw new ol("bundle_too_large","That file is larger than any travel bundle.");let t;try{t=JSON.parse(e)}catch{throw new ol("bundle_malformed","Not a travel bundle.")}if(!mt(t)||t.format!==il)throw new ol("bundle_malformed","Not a travel bundle.");if(1!==t.v)throw new ol("unsupported_version","This travel bundle was written by a newer version.");const n=t.sealed;if(!(ht(t.bundleId)&&mt(n)&&ht(n.ivB64)&&ht(n.ctB64)))throw new ol("bundle_malformed","Not a travel bundle.");return{bundleId:t.bundleId,sealed:{ivB64:n.ivB64,ctB64:n.ctB64}}}(e),a=await al(t,s.bundleId);let i;try{i=await Mt(a,s.sealed,dl(s.bundleId))}catch{throw new ol("code_mismatch","That return code does not open this bundle.")}if(!mt(i)||1!==i.v||i.bundleId!==s.bundleId||!ht(i.departedAt)||!Array.isArray(i.vaults))throw new ol("bundle_malformed","Not a travel bundle.");const r=i.vaults.map(e=>function(e,t){if(!mt(e)||!ht(e.id)||!ll.test(e.id)||cl.has(e.id)||"personal"!==e.kind&&"project"!==e.kind)throw new ol("bundle_malformed","Not a travel bundle.");return{id:e.id,kind:e.kind,name:ht(e.name)?e.name:null,files:fl(e.files,e.id,t)}}(e,n));if(new Set(r.map(e=>e.id)).size!==r.length)throw new ol("bundle_malformed","Not a travel bundle.");return{v:1,bundleId:s.bundleId,departedAt:i.departedAt,vaults:r}}function hl(e){return Zs((new TextEncoder).encode(e))}async function bl(e){const t={};for(const n of e){const e=await Promise.all(n.files.map(async e=>[e.file,await hl(e.text)]));t[n.id]=Object.fromEntries(e)}return t}async function gl(e,t){const n=await e.listFiles(),s=e.tombs(),a=new Map;for(const i of t){const t=await Promise.all(Be(i,n,s).map(async t=>({file:t,text:await e.read(t)})));a.set(i,t.filter(e=>null!==e.text))}return a}function yl(e){return"personal"===e.kind?"personal":"project"}async function vl(e){return e.ownerPresent()?await e.duressActive()?"duress_active":e.storage.durable()?null:"storage_not_durable":"owner_not_present"}async function jl(){const{duressSessionFence:t}=await e(async()=>{const{duressSessionFence:e}=await import("./compartment-guard-D3FuKM8N.js").then(e=>e.f);return{duressSessionFence:e}},[]),n=t.readFence();return n.activeIncidentIds.length>0||n.retiredDevice}const kl="opensesame.travel-items";function xl(e){return`${kl}:v1:${e}`}function wl(e){return`opensesame-${e.replace(/^trv_/,"").slice(0,8)}.travel-items.json`}const _l=()=>new ol("bundle_malformed","Not a travel bundle.");function Nl(e){if(!(mt(e)&&ht(e.id)&&""!==e.id&&ht(e.kind)&&ht(e.name)&&ht(e.notes)&&ht(e.createdAt)&&ht(e.updatedAt)&&(null===e.folderId||ht(e.folderId))&&(null===e.deletedAt||ht(e.deletedAt))&&yt(e.favorite)&&Array.isArray(e.fields)))throw _l();return ft(e)}function $l(e){if(!(mt(e)&&ht(e.id)&&ht(e.name)&&ht(e.createdAt)))throw _l();return ft(e)}function Sl(e){if(!mt(e)||!ht(e.tomb)||!ht(e.createdAt))throw _l();return{tomb:e.tomb,createdAt:e.createdAt}}function Cl(e){if(!Array.isArray(e))throw _l();return e}async function Il(e,t){const n=function(e){if(e.length>rl||(new TextEncoder).encode(e).byteLength>rl)throw new ol("bundle_too_large","That file is larger than any travel bundle.");let t;try{t=JSON.parse(e)}catch{throw _l()}if(!mt(t)||t.format!==kl)throw _l();if(1!==t.v)throw new ol("unsupported_version","This travel bundle was written by a newer version.");const n=t.sealed;if(!(ht(t.bundleId)&&mt(n)&&ht(n.ivB64)&&ht(n.ctB64)))throw _l();return{bundleId:t.bundleId,sealed:{ivB64:n.ivB64,ctB64:n.ctB64}}}(e),s=await al(t,n.bundleId);let a;try{a=await Mt(s,n.sealed,xl(n.bundleId))}catch{throw new ol("code_mismatch","That return code does not open this bundle.")}if(!mt(a)||1!==a.v||a.bundleId!==n.bundleId||!ht(a.hiddenAt))throw _l();const i=Cl(a.items).map(Nl);if(new Set(i.map(e=>e.id)).size!==i.length)throw _l();return{v:1,bundleId:n.bundleId,hiddenAt:a.hiddenAt,vault:Sl(a.vault),items:i,folders:Cl(a.folders).map($l)}}function Al(e,t=[]){if(ht(e))t.push(e);else if(Array.isArray(e))for(const n of e)Al(n,t);else if(mt(e))for(const n of Object.values(e))Al(n,t);return t}function Tl(e){return"drop"===e.kind||Al(ft(e)).some(e=>null!==Kn(e))}function Ol(e){return""===e.name.trim()?"Untitled":e.name.trim()}async function zl(e){return Promise.all(e.map(e=>Zs((new TextEncoder).encode(`${e.id}\0${Sn(e)}`))))}const Rl=[],Pl=[];function Ll(e,t=Rl,n=Pl){return{ok:!1,code:e,ids:t,copies:n}}async function El(e,t,n){const s={forgotten:0,failed:[]},a=async(e,t)=>{try{s.forgotten+=await t()??0}catch{s.failed.push(e)}};return await a("activity",()=>e.purge.activity(t,new Set(n))),await a("passwords",()=>e.purge.passwords(t,n)),await a("offline_cache",async()=>(await e.purge.offlineCache(t),0)),s}function Ml(e){return"personal"===e?null:e}const Fl={deps:{storage:Ke,duressActive:jl,ownerPresent:()=>{const e=Tn.getSnapshot();return"unlocked"===e.status&&!e.guest},exclusive:async e=>{const t=jt();return t?t.request("opensesame.travel",e):e()},now:()=>new Date,vault:()=>{const e=Tn.getSnapshot();return"unlocked"!==e.status||e.guest||null===e.header?null:{tomb:e.tomb,createdAt:e.header.createdAt,items:e.rawItems??e.items,folders:e.folders}},sharedItems:async function(e){const t=await Ve(e),n=await Ks(e),s=new Set,a=new Set;for(const i of t)"item"===i.resourceKind&&s.add(i.resourceId),"folder"===i.resourceKind&&a.add(i.resourceId);for(const i of n)"item"===i.resourceKind&&s.add(i.resourceId),"folder"===i.resourceKind&&a.add(i.resourceId);if(a.size>0){const t=Tn.getSnapshot();if("unlocked"===t.status&&t.tomb===e)for(const e of t.items)null===e.deletedAt&&null!==e.folderId&&a.has(e.folderId)&&s.add(e.id)}return s},copiesInPlay:async function(e){const t=[];On().some(e=>e.enabled)&&t.push("backup_target"),await async function(){return ln().some(e=>Boolean(e.remote?.trim()||e.connectionId?.trim()))||await Rn()}()&&t.push("history_snapshot"),await async function(e){try{return await Rt(e,"config/tailnet-drive"),!0}catch(t){if(t instanceof Pt&&"not-found"===t.code)return!1;throw t}}(e)&&t.push("paired_drive");const n=Ml(e);return zn().some(e=>e.projectId===n)&&t.push("offline_queue"),t},withdraw:e=>Tn.withdrawItems(e),restore:e=>Tn.restoreWithdrawn(e),purge:{activity:rs,passwords:In,offlineCache:e=>An(Ml(e))}}},Bl={owner_not_present:"Open one of your own vaults first.",duress_active:"Not while a duress response holds this device.",storage_not_durable:"This browser is not keeping files for this site."};function Dl(e,t){return e.items.map(e=>{const n=t.get(e.id),s=void 0===n?"returns":n===Sn(e)?"already_back":"occupied";return{id:e.id,label:""===e.name.trim()?"Untitled":e.name.trim(),kind:e.kind,status:s}})}function Kl(e){const t=e.vault();return t?new Map(t.items.map(e=>[e.id,Sn(e)])):null}function Vl(e,t){const n=e.vault();return null!==n&&n.tomb===t.vault.tomb&&n.createdAt===t.vault.createdAt}function Ul(e){return{consents:Bt(_t(He,e)),policy:Bt(_t(qe,e))}}function Jl(e,t){const n=Ul(e);return t===n.consents||t===n.policy}function ql(e,t){return e.find(e=>e.file===t)?.text??null}function Hl(e,t){const n=Ul(e),s=new Set(Ue(ql(t,n.consents)).map(e=>e.origin));for(const a of Je(ql(t,n.policy)).rules)"whitelist"===a.effect&&s.add(a.domain);return{sites:[...s].sort()}}const Wl=e=>Je(e).rules.filter(e=>"blacklist"===e.effect);async function Gl(e,t,n){null===n?await e.remove(t):await e.write(t,n)}async function Yl(e,t,n,s){const a=Ul(t),i=ql(n,a.policy),r=function(e){const t=new Map;for(const n of e)t.get(n.domain)&&"blacklist"!==n.effect||t.set(n.domain,n);return We([...t.values()])}([...s?Je(i).rules:Wl(i),...Wl(await e.read(a.policy))]),o=s?ql(n,a.consents):null;return await Gl(e,a.consents,o),await Gl(e,a.policy,r.length>0?JSON.stringify({rules:r}):null),[a.consents,a.policy]}function Ql(e,t){return Yl(e,t,[],!1)}const Zl=new Set(Ge);async function Xl(e){const t=await e.storage.listFiles(),n=new Set(t),s=e.storage.tombs(),a=[...new Set([...s,...Ge])];return s.filter(e=>!Zl.has(e)&&!n.has(De(e))&&!n.has(Bt(_t(os[0],e)))).map(e=>({id:e,files:t.filter(t=>t.startsWith(Ye(e))&&Qe(t,a)===e).sort()})).filter(e=>e.files.some(t=>!function(e,t){return[Dt,Kt].some(n=>t===`${Ye(e)}${n}.json`)}(e.id,t)))}const ec={grants:!1},tc={owner_not_present:"Open one of your own vaults first.",duress_active:"Not while a duress response holds this device.",storage_not_durable:"This browser is not keeping files for this site."};function nc(e){return e.files.filter(t=>!Jl(e.id,t.file))}async function sc(e,t,n){const s=null===await e.storage.read(De(t.id)),a=nc(t),i=await Promise.all(a.map(t=>e.storage.read(t.file))),r=[...e.storage.tombs(),t.id],o=Be(t.id,n,r).filter(e=>!Jl(t.id,e)&&!a.some(t=>t.file===e));return a.some((e,t)=>null!==i[t]&&i[t]!==e.text)||o.length>0?"occupied":s?"comes_home":i.every(e=>null!==e)?"already_home":a.some((e,n)=>e.file===Ze(t.id)&&null===i[n])?"comes_home":"occupied"}async function ac(e,t,n){const s=new Map;for(const a of t.vaults)s.set(a.id,await sc(e,a,n));return s}async function ic(e,t,n,s){await e.storage.registerTomb(t.id);const a=[],i=nc(t),r=new Set(i.map(e=>e.file)),o=[...e.storage.tombs(),t.id];for(const d of Be(t.id,n,o))r.has(d)||Jl(t.id,d)||(await e.storage.remove(d),a.push(d));const l=De(t.id),c=[...i.filter(e=>e.file!==l),...i.filter(e=>e.file===l)];for(const d of c)await e.storage.write(d.file,d.text),a.push(d.file);return a.push(...await Yl(e.storage,t.id,t.files,s)),{touched:a,written:c.length}}const rc={deps:{storage:Ke,vaults:()=>it().map(e=>({id:e.id,kind:e.kind,state:e.state,label:e.label,name:e.named&&"guest"!==e.kind?e.label:null})),duressActive:jl,ownerPresent:()=>{const e=Tn.getSnapshot();return"unlocked"===e.status&&!e.guest},legacyVaults:()=>At(St().map(e=>e.id)),async forgetVaults(e){for(const t of e)Ut(t);await It(e)},async welcomeVaults(e){await Vt(e.flatMap(({id:e})=>[...Pn(e),...Nt(e)])),await $t();const t=new Map(St().map(e=>[e.id,e.name]));for(const{id:n,kind:s,name:a}of e)"project"===s&&a&&t.get(n)===n&&await Ct(n,a)},async exclusive(e){const t=jt();return t?t.request("opensesame.travel",e):e()},now:()=>new Date}},oc={backup_target:"a backup target",history_snapshot:"a history backup",paired_drive:"a paired drive",offline_queue:"a queued offline write"},lc=new Map([["nothing_chosen","Choose at least one item to leave home"],["unknown_item","An item you chose is no longer in this vault"],["item_not_hideable","A file or a drop cannot leave on its own"],["item_shared","An item you chose is shared; end the share first"],["purge_failed","Something kept about these items could not be cleared; nothing was removed"],["vault_changed","A different vault is open now; pack again"],["other_vault","These items were left home by a different vault"],["occupied","This vault already holds an item with that id and other content; nothing was changed"]]);function cc(e){return"copies_in_play"===e.code?`${e.copies.map(e=>oc[e]).join(", ")} would hand these items back or keep a copy; not while it is on`:lc.get(e.code)??qo(e.code)}function dc(e){return lc.get(e)??qo(e)}function uc(e){return Zt(e).filter(e=>null===e.deletedAt&&!Tl(e))}function pc(e){return Ln(En(e))}function fc(e){const t=`${Ho(e.hidden.length,"item")} left this vault`;return"applied_local"===e.completion?{tone:"ok",text:t}:{tone:"warn",text:t,meta:`${e.incomplete.length} trace could not be cleared; press again`}}const mc={returns:"Comes back",already_back:"Already here",occupied:"Another item holds this id; left alone"};function hc(e){return e.items.some(e=>"returns"===e.status)&&e.items.every(e=>"occupied"!==e.status)}function bc({flow:e}){const{chosen:t,busy:s,notice:a}=e,i=uc(dt().items);return n.jsxs(Fn,{ok:"err"!==a?.tone,name:"Choose what stays home",facts:[{key:"Stays home",value:Ho(t.size,"item")},{key:"Stays here",value:Ho(i.length-t.size,"item")}],primary:{label:"Pack the items for travel",icon:n.jsx(Ae,{size:18}),busy:s,disabled:0===t.size,onClick:e.packItems},children:[n.jsx("ul",{className:"travel__list","aria-label":"Stays home",children:i.map(a=>{const i=`Stays home: ${a.name.trim()||"Untitled"}`;return n.jsx(Wo,{name:a.name.trim()||"Untitled",meta:pc(a),side:n.jsx("button",{type:"button",className:"toggle",role:"switch","aria-checked":t.has(a.id),"aria-label":i,title:i,disabled:s,onClick:()=>e.toggleItem(a.id)})},a.id)})}),n.jsx(Qo,{notice:a})]})}function gc({flow:e,pkg:t}){const{ack:s,busy:a,copiesKnown:i,notice:r}=e;return n.jsxs(Fn,{ok:"err"!==r?.tone&&"warn"!==r?.tone,top:"Packed",name:"Ready to leave",facts:[{key:"Leaving",value:t.items.map(e=>e.label).join(", ")}],primary:{label:"Take them out of this vault",busy:a,disabled:!s.bundleSaved||!s.codeRecorded||!i,onClick:()=>e.hideItems(t)},children:[n.jsx("ul",{className:"travel__list","aria-label":"The travel bundle",children:n.jsx(Wo,{name:t.bundleFileName,meta:"travel bundle",side:n.jsx(Yo,{pkg:t})})}),n.jsxs("div",{children:[n.jsx("strong",{id:"travel-items-code-label",children:"Return code"}),n.jsx("p",{className:"travel__code","aria-labelledby":"travel-items-code-label",children:t.returnCode})]}),n.jsxs("label",{className:"travel__ack",children:[n.jsx("input",{type:"checkbox",checked:s.bundleSaved,onChange:t=>e.setAck({...s,bundleSaved:t.target.checked})}),n.jsx("span",{children:"The bundle is saved somewhere other than this device"})]}),n.jsxs("label",{className:"travel__ack",children:[n.jsx("input",{type:"checkbox",checked:s.codeRecorded,onChange:t=>e.setAck({...s,codeRecorded:t.target.checked})}),n.jsx("span",{children:"The return code is written down, and it stays home"})]}),n.jsxs("label",{className:"travel__ack",children:[n.jsx("input",{type:"checkbox",checked:i,onChange:t=>e.setCopiesKnown(t.target.checked)}),n.jsx("span",{children:"Other devices, exports and backups still hold these items; losing the bundle and the code loses them here"})]}),n.jsx(Qo,{notice:r})]})}function yc({flow:e,onClose:t}){const{mode:s}=e;return n.jsx(Mn,{title:"Leave items at home",mark:n.jsx(Xe,{size:20}),onClose:t,children:"items_packed"===s.kind?n.jsx(gc,{flow:e,pkg:s.pkg}):n.jsx(bc,{flow:e})})}function vc({flow:e}){const{safe:t,busy:s,notice:a}=e,i=fs().filter(e=>"guest"!==e.kind&&"empty"!==e.state),r=(e,n)=>n||t.has(e),o=i.filter(e=>!r(e.id,"open"===e.state));return n.jsxs(Fn,{ok:"err"!==a?.tone,name:"Choose what travels",facts:[{key:"Travels",value:Ho(i.length-o.length,"vault")},{key:"Leaves",value:Ho(o.length,"vault")}],primary:{label:"Pack the rest for travel",icon:n.jsx(Ae,{size:18}),busy:s,onClick:e.pack},children:[n.jsx("ul",{className:"travel__list","aria-label":"Safe for travel",children:i.map(t=>{const a="open"===t.state,i=r(t.id,a),o=`Safe for travel: ${t.label}`;return n.jsx(Wo,{name:t.label,meta:a?"open · travels":i?"travels":"stays home",side:a?null:n.jsx("button",{type:"button",className:"toggle",role:"switch","aria-checked":i,"aria-label":o,title:o,disabled:s,onClick:()=>e.toggleSafe(t.id)})},t.id)})}),n.jsx(Qo,{notice:a})]})}function jc({flow:e,pkg:t}){const{ack:s,busy:a,notice:i}=e;return n.jsxs(Fn,{ok:"err"!==i?.tone&&"warn"!==i?.tone,top:"Packed",name:"Ready to leave",facts:[{key:"Leaving",value:t.departing.map(e=>`${e.label} · ${Ho(e.files,"file")}`).join(", ")}],primary:{label:"Take them off this device",busy:a,disabled:!s.bundleSaved||!s.codeRecorded,onClick:()=>e.depart(t)},children:[n.jsx("ul",{className:"travel__list","aria-label":"The travel bundle",children:n.jsx(Wo,{name:t.bundleFileName,meta:"travel bundle",side:n.jsx(Yo,{pkg:t})})}),n.jsxs("div",{children:[n.jsx("strong",{id:"travel-code-label",children:"Return code"}),n.jsx("p",{className:"travel__code","aria-labelledby":"travel-code-label",children:t.returnCode})]}),n.jsxs("label",{className:"travel__ack",children:[n.jsx("input",{type:"checkbox",checked:s.bundleSaved,onChange:t=>e.setAck({...s,bundleSaved:t.target.checked})}),n.jsx("span",{children:"The bundle is saved somewhere other than this device"})]}),n.jsxs("label",{className:"travel__ack",children:[n.jsx("input",{type:"checkbox",checked:s.codeRecorded,onChange:t=>e.setAck({...s,codeRecorded:t.target.checked})}),n.jsx("span",{children:"The return code is written down, and it stays home"})]}),n.jsx(Qo,{notice:i})]})}function kc({flow:e,onClose:t}){const{mode:s}=e;return n.jsx(Mn,{title:"Turn on travel mode",mark:n.jsx(Xe,{size:20}),onClose:t,children:"packed"===s.kind?n.jsx(jc,{flow:e,pkg:s.pkg}):n.jsx(vc,{flow:e})})}const xc={comes_home:"Comes home",already_home:"Already home",occupied:"Already here, not the same; left alone"};function wc(e){const t=e.grants.sites.length;return"comes_home"===e.status&&t>0?Ho(t,"site grant"):""}function _c(e){return e.vaults.some(e=>"comes_home"===e.status)}function Nc({flow:e}){const{busy:t,bundle:s,code:a,notice:i}=e;return n.jsx("form",{"aria-label":"Coming home",onSubmit:t=>{t.preventDefault(),e.open()},children:n.jsxs(Fn,{ok:"err"!==i?.tone,name:"Open a travel bundle",primary:{label:"Open the bundle",icon:n.jsx(Xe,{size:18}),submit:!0,busy:t,disabled:!s||0===a.trim().length,onClick:e.open},children:[n.jsx("ul",{className:"travel__list",children:n.jsx(Wo,{name:s?.name??"No bundle chosen",meta:"travel bundle",side:n.jsxs("label",{className:"icon-btn icon-btn--sm travel__file",title:"Choose the travel bundle",children:[n.jsx(Xe,{size:16}),n.jsx("span",{className:"visually-hidden",children:"Choose the travel bundle"}),n.jsx("input",{type:"file",accept:".json,application/json","aria-label":"Choose the travel bundle",onChange:t=>{const n=t.currentTarget.files?.[0];n&&e.chooseBundle(n),t.currentTarget.value=""}})]})})}),n.jsx(H,{id:"travel-return-code",label:"Return code",mono:!0,autoComplete:"off",placeholder:"ABCD-EFGH-…",value:a,readOnly:t,onValueChange:e.typeCode}),n.jsx(Qo,{notice:i})]})})}function $c({flow:e,opened:t}){const{busy:s,grants:a,notice:i}=e,r=function(e){const t=e.vaults.filter(e=>"comes_home"===e.status);return[...new Set(t.flatMap(e=>e.grants.sites))].sort()}(t.preview);return n.jsxs(Fn,{ok:"err"!==i?.tone,top:"Bundle opened",name:"Ready to come home",facts:(o=t.preview,o.vaults.map(e=>({key:ct({id:e.id,name:e.name??e.id}),value:[Ho(e.files,"file"),wc(e),xc[e.status]].filter(Boolean).join(" · ")}))),primary:{label:"Bring them home",busy:s,disabled:!_c(t.preview),onClick:()=>e.bringHome(t)},children:[r.length>0?n.jsxs("label",{className:"travel__ack",children:[n.jsx("input",{type:"checkbox",checked:a,disabled:s,onChange:t=>e.setGrants(t.target.checked)}),n.jsx("span",{children:`Let these sites in again: ${r.join(", ")}`})]}):null,n.jsx(Qo,{notice:i})]});var o}function Sc({flow:e,opened:t}){const{busy:s,notice:a}=e,i=t.preview.items.some(e=>"occupied"===e.status);return n.jsx(Fn,{ok:"err"!==a?.tone&&!i,top:"Bundle opened",name:"Ready to come back",facts:(r=t.preview,r.items.map(e=>({key:e.label,value:mc[e.status]}))),primary:{label:"Bring them back",busy:s,disabled:!hc(t.preview),onClick:()=>e.bringItemsBack(t)},children:n.jsx(Qo,{notice:a})});var r}function Cc({flow:e,onClose:t}){const{mode:s}=e;return n.jsx(Mn,{title:"Turn off travel mode",mark:n.jsx(Ae,{size:20}),onClose:t,children:"items_preview"===s.kind?n.jsx(Sc,{flow:e,opened:s.opened}):"preview"===s.kind?n.jsx($c,{flow:e,opened:s.opened}):n.jsx(Nc,{flow:e})})}const Ic={bundleSaved:!1,codeRecorded:!1},Ac=new Set;function Tc(e,t,n){return{pack:()=>e.run(async()=>{const n=[...e.safe,...t?[t]:[]],s=await function(e){return async function(e,t){const n=await vl(e);if(n)return{ok:!1,code:n,ids:[]};const s=await e.legacyVaults();if(s.length>0)return{ok:!1,code:"vault_needs_opening",ids:s};const a=e.vaults(),i=function(e){const t=e.vaults.filter(e=>"guest"!==e.kind&&"empty"!==e.state),n=new Set(t.map(e=>e.id)),s=e.safe.filter(e=>!n.has(e));if(s.length>0)return{ok:!1,code:"unknown_vault",ids:s};const a=new Set(e.safe),i=t.filter(e=>!a.has(e.id)),r=i.filter(e=>"open"===e.state);return r.length>0?{ok:!1,code:"open_vault_departs",ids:r.map(e=>e.id)}:0===i.length?{ok:!1,code:"nothing_departs",ids:[]}:{ok:!0,plan:{staying:t.filter(e=>a.has(e.id)).map(e=>e.id),departing:i.map(e=>e.id)}}}({vaults:a,safe:t.safe});if(!i.ok)return i;const{plan:r}=i,o=await gl(e.storage,r.departing),l=r.departing.filter(e=>!o.get(e)?.length);if(l.length>0)return{ok:!1,code:"vault_has_no_files",ids:l};const c=new Map(a.map(e=>[e.id,e])),d=r.departing.map(e=>{const t=c.get(e);return{id:e,kind:t?yl(t):"project",name:t?.name??null,files:o.get(e)??[]}}),u=ul(),p=tl(),f=await nl(p),m=await async function(e,t){const n=await al(t,e.bundleId),s={v:e.v,bundleId:e.bundleId,departedAt:e.departedAt,vaults:e.vaults.map(e=>({id:e.id,kind:e.kind,name:e.name,files:e.files.map(e=>({file:e.file,text:e.text}))}))},a=await Ft(n,s,dl(e.bundleId));return JSON.stringify({format:il,v:1,bundleId:e.bundleId,sealed:a})}({v:1,bundleId:u,departedAt:e.now().toISOString(),vaults:d},p),h=await bl(d);try{const t=await ml(m,await sl(f),Fe(e.storage.tombs())),n=await bl(t.vaults);if(JSON.stringify(n)!==JSON.stringify(h))return{ok:!1,code:"self_check_failed",ids:[]}}catch{return{ok:!1,code:"self_check_failed",ids:[]}}return{ok:!0,pkg:{bundleId:u,bundleJson:m,bundleFileName:pl(u),returnCode:f,plan:r,departing:d.map(e=>({id:e.id,label:c.get(e.id)?.label??e.id,files:e.files.length,bytes:e.files.reduce((e,t)=>e+t.text.length,0)})),packed:h}}}(rc.deps,{safe:e})}(n);if(!s.ok)return e.refuse(s.code);e.setAck(Ic),e.setMode({kind:"packed",pkg:s.pkg})}),depart:t=>e.run(async()=>{const s=await function(e,t){return function(e,t,n){return n.bundleSaved&&n.codeRecorded?e.exclusive(()=>async function(e,t){const n=await vl(e);if(n)return{ok:!1,code:n};const s=t.plan.departing,a=await gl(e.storage,s),i=await async function(e,t,n){const s=new Set(t.plan.departing),a=new Set(t.plan.staying);for(const r of e.vaults())if("guest"!==r.kind&&"empty"!==r.state){if(s.has(r.id)&&"open"===r.state)return"open_vault_departs";if(!s.has(r.id)&&!a.has(r.id))return"changed_since_packed"}const i=t.plan.departing.flatMap(e=>(n.get(e)??[]).map(async n=>t.packed[e]?.[n.file]===await hl(n.text)));return(await Promise.all(i)).every(Boolean)?null:"changed_since_packed"}(e,t,a);if(i)return{ok:!1,code:i};const r=await async function(e,t){const n=new Set;for(const[s,a]of t){const t=De(s),i=[...a.filter(e=>e.file===t),...a.filter(e=>e.file!==t)];for(const s of i)try{await e.remove(s.file),n.add(s.file)}catch{}}return n}(e.storage,a);e.storage.forget(r);const o=await e.storage.listFiles(),l=[...e.storage.tombs(),...s],c=new Map(s.map(e=>[e,Be(e,o,l)])),d=s.filter(e=>0===c.get(e)?.length);for(const p of d)await e.storage.unregisterTomb(p);d.length>0&&await e.forgetVaults(d);const u=s.flatMap(e=>c.get(e)??[]);return{ok:!0,receipt:{departed:s,removedFiles:r.size,leftovers:u,completion:0===u.length?"applied_local":"incomplete",assurance:"application_scoped_removal"}}}(e,t)):Promise.resolve({ok:!1,code:"not_acknowledged"})}(rc.deps,e,t)}(t,e.ack);if(!s.ok)return e.refuse(s.code);const{receipt:a}=s;if("incomplete"===a.completion)return e.setNotice(Go(a));e.reset(Go(a)),n()}),toggleSafe:t=>{e.setNotice(null);const n=new Set(e.safe);n.has(t)?n.delete(t):n.add(t),e.setSafe(n)}}}function Oc(e){return{tone:"err",text:e}}function zc(e,t){return{toggleItem:t=>{e.setNotice(null);const n=new Set(e.chosen);n.has(t)?n.delete(t):n.add(t),e.setChosen(n)},packItems:()=>e.run(async()=>{const t=await(n=[...e.chosen],async function(e,t){const n=await vl(e);if(n)return Ll(n);const s=e.vault();if(!s)return Ll("owner_not_present");const a=function(e,t){const n=new Set(t),s=e.flatMap(e=>"credential"===e.kind&&null!==e.accountId&&n.has(e.accountId)?[e.id]:[]);return[...new Set([...t,...s])]}(s.items,[...new Set(t.ids)]),i=await async function(e,t,n){if(0===n.length)return Ll("nothing_chosen");const s=new Map(t.items.map(e=>[e.id,e])),a=n.filter(e=>!s.has(e));if(a.length>0)return Ll("unknown_item",a);const i=t.items.filter(e=>n.includes(e.id)&&Tl(e)).map(e=>e.id);if(i.length>0)return Ll("item_not_hideable",i);const r=await e.sharedItems(t.tomb),o=n.filter(e=>r.has(e));if(o.length>0)return Ll("item_shared",o);const l=await e.copiesInPlay(t.tomb);return l.length>0?Ll("copies_in_play",Rl,l):null}(e,s,a);if(i)return i;const r=new Set(a),o=s.items.filter(e=>r.has(e.id)),{named:l,emptied:c}=function(e,t){const n=new Set(e.items.flatMap(e=>t.has(e.id)?e.folderId??[]:[])),s=new Set(e.items.flatMap(e=>t.has(e.id)?[]:e.folderId??[]));return{named:e.folders.filter(e=>n.has(e.id)),emptied:[...n].filter(e=>!s.has(e))}}(s,r),d=ul(),u=tl(),p=await nl(u),f={tomb:s.tomb,createdAt:s.createdAt},m={v:1,bundleId:d,hiddenAt:e.now().toISOString(),vault:f,items:o,folders:l},h=await async function(e,t){const n=await al(t,e.bundleId),s={v:e.v,bundleId:e.bundleId,hiddenAt:e.hiddenAt,vault:{tomb:e.vault.tomb,createdAt:e.vault.createdAt},items:e.items.map(e=>ft(e)),folders:e.folders.map(e=>ft(e))},a=await Ft(n,s,xl(e.bundleId));return JSON.stringify({format:kl,v:1,bundleId:e.bundleId,sealed:a})}(m,u);try{const e=await Il(h,await sl(p)),[t,n]=await Promise.all([zl(o),zl(e.items)]);if(JSON.stringify(t)!==JSON.stringify(n))return Ll("self_check_failed")}catch{return Ll("self_check_failed")}return{ok:!0,pkg:{bundleId:d,bundleJson:h,bundleFileName:wl(d),returnCode:p,items:o.map(e=>({id:e.id,label:Ol(e),kind:e.kind})),vault:f,withdrawal:{items:Object.fromEntries(o.map(e=>[e.id,Sn(e)])),folderIds:c}}}}(Fl.deps,{ids:n}));var n;if(!t.ok)return e.setNotice(Oc(cc(t)));e.setAck(Ic),e.setCopiesKnown(!1),e.setMode({kind:"items_packed",pkg:t.pkg})}),hideItems:n=>e.run(async()=>{const s=await function(e,t){return function(e,t,n){return n.bundleSaved&&n.codeRecorded?e.exclusive(()=>async function(e,t){const n=await vl(e),s=e.vault(),a=(e,t=Rl,n=Pl)=>({ok:!1,code:e,ids:t,copies:n});if(n)return a(n);if(!s||s.tomb!==t.vault.tomb||s.createdAt!==t.vault.createdAt)return a("vault_changed");const i=Object.keys(t.withdrawal.items),r=await e.sharedItems(s.tomb),o=i.filter(e=>r.has(e));if(o.length>0)return a("item_shared",o);const l=await e.copiesInPlay(s.tomb);if(l.length>0)return a("copies_in_play",Rl,l);const c=await El(e,s.tomb,i);if(c.failed.length>0)return a("purge_failed");const d=s.folders.length;try{await e.withdraw(t.withdrawal)}catch(f){if(f instanceof Cn)return a("changed_since_packed",f.ids);throw f}const u=await El(e,s.tomb,i),p=e.vault();return{ok:!0,receipt:{hidden:i,foldersRemoved:Math.max(0,d-(p?.folders.length??0)),forgotten:c.forgotten+u.forgotten,incomplete:u.failed,completion:0===u.failed.length?"applied_local":"incomplete",assurance:"application_scoped_removal"}}}(e,t)):Promise.resolve({ok:!1,code:"not_acknowledged",ids:Rl,copies:Pl})}(Fl.deps,e,t)}(n,e.ack);return s.ok?"incomplete"===s.receipt.completion?e.setNotice(fc(s.receipt)):(e.reset(fc(s.receipt)),void t()):e.setNotice(Oc(cc(s)))})}}function Rc(e,t){return{open:()=>e.run(async()=>{if(!e.bundle)return;if(function(e){if(e.length>rl)return!1;try{const t=JSON.parse(e);return mt(t)&&t.format===kl}catch{return!1}}(e.bundle.json))return(async t=>{const n=await(s={bundleJson:t,returnCode:e.code},async function(e,t){const n=await vl(e);if(n)return{ok:!1,code:n,message:Bl[n]};let s;try{const e=await sl(t.returnCode);s=await Il(t.bundleJson,e)}catch(i){if(i instanceof Xo||i instanceof ol)return{ok:!1,code:i.code,message:i.message};throw i}const a=Kl(e);return a&&Vl(e,s)?{ok:!0,opened:{payload:s,preview:{bundleId:s.bundleId,hiddenAt:s.hiddenAt,items:Dl(s,a)}}}:{ok:!1,code:"other_vault",message:"These items were left home by a different vault."}}(Fl.deps,s));var s;if(!n.ok)return e.setNotice(Oc(dc(n.code)));e.setMode({kind:"items_preview",opened:n.opened})})(e.bundle.json);const t=await(n={bundleJson:e.bundle.json,returnCode:e.code},async function(e,t){const n=await vl(e);if(n)return{ok:!1,code:n,message:tc[n]};let s;try{const n=await sl(t.returnCode);s=await ml(t.bundleJson,n,Fe(e.storage.tombs()))}catch(r){if(r instanceof Xo||r instanceof ol)return{ok:!1,code:r.code,message:r.message};throw r}if(s.vaults.some(e=>!e.files.some(t=>t.file===De(e.id))))return{ok:!1,code:"bundle_malformed",message:"Not a travel bundle."};const a=await ac(e,s,await e.storage.listFiles()),i=s.vaults.map(e=>({id:e.id,kind:e.kind,name:e.name,files:nc(e).length,status:a.get(e.id)??"occupied",grants:Hl(e.id,e.files)}));return{ok:!0,opened:{preview:{bundleId:s.bundleId,departedAt:s.departedAt,vaults:i},payload:s}}}(rc.deps,n));var n;if(!t.ok)return e.refuse(t.code);e.setMode({kind:"preview",opened:t.opened})}),bringItemsBack:n=>e.run(async()=>{const s=await function(e){return function(e,t){return e.exclusive(async()=>{const n=await vl(e);if(n)return{ok:!1,code:n,ids:[]};const{payload:s}=t,a=Kl(e);if(!a||!Vl(e,s))return{ok:!1,code:"other_vault",ids:[]};const i=Dl(s,a),r=i.filter(e=>"occupied"===e.status);if(r.length>0)return{ok:!1,code:"occupied",ids:r.map(e=>e.id)};try{await e.restore({items:s.items,folders:s.folders})}catch(o){if(o instanceof Cn)return{ok:!1,code:"occupied",ids:o.ids};throw o}return{ok:!0,receipt:{returned:i.filter(e=>"returns"===e.status).map(e=>e.id),alreadyBack:i.filter(e=>"already_back"===e.status).map(e=>e.id)}}})}(Fl.deps,e)}(n);if(!s.ok)return e.setNotice(Oc(dc(s.code)));var a;e.reset({tone:"ok",text:`${Ho((a=s.receipt).returned.length,"item")} came back`,...a.alreadyBack.length>0?{meta:`${a.alreadyBack.length} already here`}:void 0}),t()}),bringHome:n=>e.run(async()=>{const s=await function(e,t={grants:!1}){return function(e,t,n=ec){return e.exclusive(async()=>{const s=await vl(e);if(s)return{ok:!1,code:s};const a=await e.storage.listFiles(),i=await ac(e,t.payload,a),r=[],o=[];let l=0;const c=new Set;for(const u of t.payload.vaults){if("comes_home"!==i.get(u.id))continue;const t=await ic(e,u,a,n.grants);for(const e of t.touched)c.add(e);l+=t.written,r.push(u.id),n.grants&&Hl(u.id,u.files).sites.length>0&&o.push(u.id)}e.storage.forget(c),r.length>0&&await e.welcomeVaults(t.payload.vaults.filter(e=>r.includes(e.id)));const d=e=>[...i].filter(([,t])=>t===e).map(([e])=>e);return{ok:!0,receipt:{restored:r,grantsRestored:o,alreadyHome:d("already_home"),occupied:d("occupied"),writtenFiles:l}}})}(rc.deps,e,t)}(n,{grants:e.grants});if(!s.ok)return e.refuse(s.code);e.reset(function(e){const t=`${Ho(e.restored.length,"vault")} came home`,n=[e.grantsRestored.length>0?"site grants restored":"",e.alreadyHome.length>0?`${Ho(e.alreadyHome.length,"vault")} already here`:"",e.occupied.length>0?`${Ho(e.occupied.length,"vault")} left alone`:""].filter(Boolean);return{tone:e.occupied.length>0?"warn":"ok",text:t,meta:n.join(" · ")||void 0}}(s.receipt)),t()}),chooseBundle:t=>e.run(async()=>{if(t.size>rl)return e.setBundle(null),e.refuse("bundle_too_large");e.setBundle({name:t.name,json:await t.text()})}),typeCode:t=>{e.setCode(t),e.setNotice(null)},startReturn:()=>{e.setNotice(null),e.setMode({kind:"return"})},clearRemnants:t=>e.run(async()=>{const n=await(s=rc.deps,s.exclusive(async()=>{const e=await vl(s);if(e)return{ok:!1,code:e};const t=await Xl(s),n=await async function(e,t){const n=new Set;for(const s of t)try{await e.storage.remove(s),n.add(s)}catch{}return n}(s,t.flatMap(e=>e.files));s.storage.forget(n);const a=t.flatMap(e=>e.files.filter(e=>!n.has(e))),i=t.filter(e=>e.files.every(e=>n.has(e))).map(e=>e.id),r=new Set;for(const o of i){for(const e of await Ql(s.storage,o))r.add(e);await s.storage.unregisterTomb(o)}return s.storage.forget(r),i.length>0&&await s.forgetVaults(i),{ok:!0,cleared:i,leftovers:a}}));var s;if(!n.ok)return e.refuse(n.code);e.setNotice(function(e){return 0===e.leftovers.length?{tone:"ok",text:"Leftovers cleared"}:{tone:"warn",text:"Leftovers cleared",meta:`${Ho(e.leftovers.length,"file")} could not be`}}(n)),t()})}}const Pc={ok:"Done",idle:"Done",warn:"Finished with something left",err:"Refused"};function Lc({icon:e,label:t,sub:s,keyLabel:a,disabled:i,onOpen:r}){return n.jsx(Dn,{icon:e,label:t,sub:s,action:n.jsx(G,{small:!0,label:a,disabled:i,"aria-haspopup":"dialog",onClick:r,children:e})})}function Ec({files:e,busy:t,onClear:s}){return n.jsx(Dn,{icon:n.jsx(Y,{size:16}),label:"Leftovers of a departure",sub:Ho(e,"file"),action:n.jsx(G,{small:!0,label:"Clear leftover files",disabled:t,onClick:s,children:n.jsx(Y,{size:16})})})}function Mc({owner:e,busy:t,carried:s,canLeave:a,hideable:i,onOpen:r}){const o=qo("owner_not_present");return n.jsxs(n.Fragment,{children:[a?n.jsx(Lc,{icon:n.jsx(Xe,{size:16}),label:"Leave for a trip",sub:e?`${Ho(s,"vault")} on this device`:o,keyLabel:"Turn on travel mode",disabled:!e||t,onOpen:()=>r("leave")}):null,i>0?n.jsx(Lc,{icon:n.jsx(ie,{size:16}),label:"Leave items at home",sub:e?Ho(i,"item"):o,keyLabel:"Choose items to leave at home",disabled:!e||t,onOpen:()=>r("items")}):null,n.jsx(Lc,{icon:n.jsx(Ae,{size:16}),label:"Come home from a trip",sub:e?"Needs the bundle and its return code":o,keyLabel:"Turn off travel mode",disabled:!e||t,onOpen:()=>r("return")})]})}function Fc({notice:e}){return n.jsx(X,{id:"settings:travel",title:"Travel",message:"err"===e?.tone||"warn"===e?.tone?e?.meta?`${e.text} · ${e.meta}`:e?.text:null,tone:"warn"===e?.tone?"warn":"err"})}function Bc(){const[e,s]=t.useState(null),a=function(e){const n=function(){const{status:e,guest:n}=dt(),s=t.useRef(!0);t.useEffect(()=>(s.current=!0,()=>{s.current=!1}),[]);const[a,i]=t.useState({kind:"plan"}),r=fs().map(e=>e.id),[o,l]=t.useState(()=>Ne(r)),[c,d]=t.useState(Ic),[u,p]=t.useState(Ac),[f,m]=t.useState(!1),[h,b]=t.useState(null),[g,y]=t.useState(""),[v,j]=t.useState(!1),[k,x]=t.useState(!1),[w,_]=t.useState(null);return{owner:"unlocked"===e&&!n,mode:a,safe:o,ack:c,chosen:u,copiesKnown:f,bundle:h,code:g,grants:v,busy:k,notice:w,setMode:i,setSafe:e=>{l(e),_e(e).catch(()=>{})},setAck:d,setChosen:p,setCopiesKnown:m,setBundle:b,setCode:y,setGrants:j,setNotice:_,run:function(e){x(!0),_(null),e().catch(e=>{s.current&&_({tone:"err",text:e instanceof Error?e.message:String(e)})}).finally(()=>{s.current&&x(!1)})},reset:function(e=null){i({kind:"plan"}),d(Ic),p(Ac),m(!1),b(null),y(""),j(!1),_(e)},refuse:function(e){_({tone:"err",text:qo(e)})}}}(),s=fs().find(e=>"open"===e.state)?.id;return{...n,...Tc(n,s,e),...zc(n,e),...Rc(n,e)}}(()=>s(null)),{owner:i,busy:r,notice:o}=a,{remnants:l,reread:c}=function(e,n){const[s,a]=t.useState([]),[i,r]=t.useState(0);return t.useEffect(()=>{if(!e)return void a([]);let t=!0;return Xl(rc.deps).then(e=>{t&&a(e)}).catch(()=>{t&&a([])}),()=>{t=!1}},[e,n,i]),{remnants:s,reread:t.useCallback(()=>r(e=>e+1),[])}}(i,o),d=fs().filter(e=>"guest"!==e.kind&&"empty"!==e.state),u=d.length,p=d.some(e=>"open"!==e.state),f=uc(dt().items).length,m=l.reduce((e,t)=>e+t.files.length,0),h=()=>{r||(a.reset(),s(null))};return n.jsxs("section",{className:"panel set__security",id:"travel","aria-labelledby":"travel-title",children:[n.jsx("div",{className:"panel__head",children:n.jsx("div",{children:n.jsx("h2",{id:"travel-title",children:"Travel"})})}),n.jsxs("div",{className:"panel__body",children:[n.jsx(Fc,{notice:o}),o&&null===e?n.jsx(Dn,{icon:n.jsx(ie,{size:16}),label:o.text,mark:{tone:o.tone,label:Pc[o.tone]},sub:o.meta??"",action:null}):null,n.jsx(Mc,{owner:i,busy:r,carried:u,canLeave:p,hideable:f,onOpen:e=>{a.reset(),"return"===e&&a.startReturn(),"items"===e&&a.setMode({kind:"items"}),s(e)}}),i&&l.length>0?n.jsx(Ec,{files:m,busy:r,onClear:()=>a.clearRemnants(c)}):null]}),"leave"===e?n.jsx(kc,{flow:a,onClose:h}):null,"items"===e?n.jsx(yc,{flow:a,onClose:h}):null,"return"===e?n.jsx(Cc,{flow:a,onClose:h}):null]})}const Dc=t.lazy(()=>e(()=>import("./KeybindingsPanels-CAhCFduu.js"),__vite__mapDeps([0,1,2,3,4,5,6,7])).then(e=>({default:e.KeybindingsPanels})));function Kc({panels:e=La}={}){const s={...La,...e},{hash:o,pathname:l,search:c}=i(),{featureId:d,capabilityId:u}=r(),p=function(){const e=f("settings-category");return t.useMemo(()=>_(e),[e])}(),m=C(),b=I(m),g=A(p,b.id),y=p.find(e=>e.id===m)?.Panel,v=function(e){return[...f("settings-panel")].filter(t=>t.category===e).sort((e,t)=>e.order-t.order||e.id.localeCompare(t.id))}(m),{openPath:j,setOpenPath:k,fileNav:x}=function(e,n){const s=a();return{openPath:F(n),setOpenPath:t=>{s(null===t?M(e):B(e,t),{replace:!0})},fileNav:t.useMemo(()=>({openFile:t=>{s(B(e,t));const n=document.querySelector(".section__inner");n instanceof HTMLElement&&D(n)}}),[e,s])}}(m,c),w=qr(m),N=null===j||null===w||Mo(m,j)?null:j;!function(e,n,s,i){const r=a();t.useEffect(()=>{const e=function(e,t,n){const s=e.split("/").filter(Boolean);if("settings"!==s[0]||s.length>2)return null;const a=n.replace(/^#/,""),i=s[1]??a,r=E(i);if("features"!==r&&"integrations"!==r)return null;const o=void 0===s[1]?"":a;if("capabilities"===i){const e=function(e){const t=e.startsWith("feature-")?e.slice(8):null;return null!==t&&K.has(t)?{category:"integrations",fragment:`integration-${t}`}:la.has(e)?{category:"integrations",fragment:e}:{category:"features",fragment:e}}(o);return ca(e.category,function(e){const t=new URLSearchParams(e),n=t.get("file");return null!==n&&n.startsWith("settings/capabilities/")?(t.set("file","settings/features/"+n.slice(22)),`?${t.toString()}`):e}(t),e.fragment)}const l=oa.get(i);return ca(r,t,void 0===l?o:`integration-${l}`)}(s,i,n);if(null!==e)return void r(e,{replace:!0});const t=null!==s.match(/\/settings\/[^/]+/)?null:T(n);t&&r(M(t,n),{replace:!0})},[n,r,s,i]),t.useEffect(()=>{if("vaults"!==e)return;const t=()=>{tt()&&r(de("networking"),{replace:!0})};return t(),et(t)},[e,r]),t.useEffect(()=>{"vaults"===e&&"#item-types"===n&&r(M("item-types"),{replace:!0})},[e,n,r]),t.useEffect(()=>{"general"===e&&"#settings-keybindings"===n&&r(M("keybindings"),{replace:!0})},[e,n,r]),t.useEffect(()=>{if("security"!==e)return;const t=n.replace(/^#/,""),s=Ea.get(t);s&&r(M("security",s),{replace:!0})},[e,n,r]),h()}(m,o,l,c);const $=null===N;return n.jsx(Ws.Provider,{value:x,children:n.jsxs("div",{className:"section__inner",children:[n.jsx(Pa,{title:b.label,tabs:g,category:m}),null===N?null:n.jsx(Uo,{category:m,selected:N,onSelect:k}),$?n.jsx(Vc,{category:m}):null,$&&y?n.jsx(y,{}):null,$&&"general"===m?n.jsxs(n.Fragment,{children:[n.jsx(at,{id:"settings.install",children:n.jsx(s.InstallPanel,{})}),n.jsx(vi,{})]}):null,$&&"keybindings"===m?n.jsx(t.Suspense,{fallback:null,children:n.jsx(Dc,{})}):null,$&&"security"===m?n.jsx(Uc,{UnlockMethodsPanel:s.UnlockMethodsPanel,contributed:v}):null,$&&"vaults"===m?n.jsx(s.VaultsPanel,{}):null,$&&"item-types"===m?n.jsx(Ao,{}):null,$&&"security"!==m?v.map(({id:e,Panel:t})=>n.jsx(t,{},e)):null,$&&"features"===m?d?n.jsx(oi,{featureId:d,capabilityId:u}):n.jsx(ui,{}):null,$&&"integrations"===m?n.jsx(Ci,{}):null,$&&"danger"===m?n.jsx(ya,{}):null]})})}function Vc({category:e}){const t=O(z()).find(t=>t.id===e)?.sections??[];return n.jsx(p,{entries:t})}function Uc({UnlockMethodsPanel:e,contributed:t}){const s=S();return n.jsxs(n.Fragment,{children:[n.jsx(Lo,{}),n.jsx(e,{}),t.map(({id:e,Panel:t})=>n.jsx(t,{},e)),n.jsx(R,{}),n.jsx(P,{}),s?n.jsx(Bc,{}):null]})}export{Kc as SettingsSection};