@knpkv/control-center 0.9.0 → 0.9.1

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 (227) hide show
  1. package/README.md +3 -2
  2. package/dist/client/.vite/manifest.json +430 -430
  3. package/dist/client/assets/{ActiveWorkPage-Upg00yYW.js → ActiveWorkPage-zWJnB-Cc.js} +2 -2
  4. package/dist/client/assets/{ActiveWorkPage-Upg00yYW.js.map → ActiveWorkPage-zWJnB-Cc.js.map} +1 -1
  5. package/dist/client/assets/{AgentPage-BCtDk8yR.js → AgentPage-DCrGAe9-.js} +2 -2
  6. package/dist/client/assets/{AgentPage-BCtDk8yR.js.map → AgentPage-DCrGAe9-.js.map} +1 -1
  7. package/dist/client/assets/{AtlassianOAuthCallbackPage-ChTCY_Un.js → AtlassianOAuthCallbackPage-DiYS-wZV.js} +2 -2
  8. package/dist/client/assets/{AtlassianOAuthCallbackPage-ChTCY_Un.js.map → AtlassianOAuthCallbackPage-DiYS-wZV.js.map} +1 -1
  9. package/dist/client/assets/{AuthorizedSharePage-BEk1V9hS.js → AuthorizedSharePage-D69hX3jN.js} +2 -2
  10. package/dist/client/assets/{AuthorizedSharePage-BEk1V9hS.js.map → AuthorizedSharePage-D69hX3jN.js.map} +1 -1
  11. package/dist/client/assets/{BrowserSessionHydrator-CB9DxOnS.js → BrowserSessionHydrator-DuScelRj.js} +2 -2
  12. package/dist/client/assets/{BrowserSessionHydrator-CB9DxOnS.js.map → BrowserSessionHydrator-DuScelRj.js.map} +1 -1
  13. package/dist/client/assets/{CommandSearch-ZtucgGqT.js → CommandSearch-BxhhZB25.js} +2 -2
  14. package/dist/client/assets/{CommandSearch-ZtucgGqT.js.map → CommandSearch-BxhhZB25.js.map} +1 -1
  15. package/dist/client/assets/{Dialog-CplGpe1F-DvPHUaxb.js → Dialog-CplGpe1F-DeMJtg-H.js} +2 -2
  16. package/dist/client/assets/{Dialog-CplGpe1F-DvPHUaxb.js.map → Dialog-CplGpe1F-DeMJtg-H.js.map} +1 -1
  17. package/dist/client/assets/{ItemsPage-rWXr2AYt.js → ItemsPage-BoSTawlJ.js} +2 -2
  18. package/dist/client/assets/{ItemsPage-rWXr2AYt.js.map → ItemsPage-BoSTawlJ.js.map} +1 -1
  19. package/dist/client/assets/{OpenPullRequestPage-C7Uo5MRd.js → OpenPullRequestPage-BfzPMfn_.js} +2 -2
  20. package/dist/client/assets/{OpenPullRequestPage-C7Uo5MRd.js.map → OpenPullRequestPage-BfzPMfn_.js.map} +1 -1
  21. package/dist/client/assets/{Pages-D2qsa2F2.js → Pages-DGc7_0RQ.js} +2 -2
  22. package/dist/client/assets/{Pages-D2qsa2F2.js.map → Pages-DGc7_0RQ.js.map} +1 -1
  23. package/dist/client/assets/{PairPage-DhpqcT8c.js → PairPage-DCNv3CTt.js} +2 -2
  24. package/dist/client/assets/{PairPage-DhpqcT8c.js.map → PairPage-DCNv3CTt.js.map} +1 -1
  25. package/dist/client/assets/{PortfolioOverview-mX6k5nL-.js → PortfolioOverview-Cnnxhgpt.js} +2 -2
  26. package/dist/client/assets/{PortfolioOverview-mX6k5nL-.js.map → PortfolioOverview-Cnnxhgpt.js.map} +1 -1
  27. package/dist/client/assets/{PullRequestReviewPanel-DoI2jcWK.js → PullRequestReviewPanel-Blbjn1Ns.js} +4 -4
  28. package/dist/client/assets/{PullRequestReviewPanel-DoI2jcWK.js.map → PullRequestReviewPanel-Blbjn1Ns.js.map} +1 -1
  29. package/dist/client/assets/{ReleaseRoute-C80uadO-.js → ReleaseRoute-0QrCZbE4.js} +2 -2
  30. package/dist/client/assets/{ReleaseRoute-C80uadO-.js.map → ReleaseRoute-0QrCZbE4.js.map} +1 -1
  31. package/dist/client/assets/{ReleaseWorkset-D2Q-pMv0.js → ReleaseWorkset-DxZ0mgJC.js} +2 -2
  32. package/dist/client/assets/{ReleaseWorkset-D2Q-pMv0.js.map → ReleaseWorkset-DxZ0mgJC.js.map} +1 -1
  33. package/dist/client/assets/{ReviewSuggestionOverview-BMy26AXn.js → ReviewSuggestionOverview-CZyq_yfx.js} +2 -2
  34. package/dist/client/assets/{ReviewSuggestionOverview-BMy26AXn.js.map → ReviewSuggestionOverview-CZyq_yfx.js.map} +1 -1
  35. package/dist/client/assets/{ReviewSuggestionPublicationSurface-CRWl9aYb.js → ReviewSuggestionPublicationSurface-B6b8PzT8.js} +2 -2
  36. package/dist/client/assets/{ReviewSuggestionPublicationSurface-CRWl9aYb.js.map → ReviewSuggestionPublicationSurface-B6b8PzT8.js.map} +1 -1
  37. package/dist/client/assets/{ServicesPage-Bfr3sYg7.js → ServicesPage-zCaWYAK6.js} +2 -2
  38. package/dist/client/assets/{ServicesPage-Bfr3sYg7.js.map → ServicesPage-zCaWYAK6.js.map} +1 -1
  39. package/dist/client/assets/{TimelinePage-52RmwoTM.js → TimelinePage-5cMSPV9K.js} +2 -2
  40. package/dist/client/assets/{TimelinePage-52RmwoTM.js.map → TimelinePage-5cMSPV9K.js.map} +1 -1
  41. package/dist/client/assets/{WorkspaceEntityLink-DwxZwXwT.js → WorkspaceEntityLink-CW3XgIHd.js} +2 -2
  42. package/dist/client/assets/{WorkspaceEntityLink-DwxZwXwT.js.map → WorkspaceEntityLink-CW3XgIHd.js.map} +1 -1
  43. package/dist/client/assets/{WorkspaceEntityRoute-BWvMo9IK.js → WorkspaceEntityRoute-HlXUP8jk.js} +4 -4
  44. package/dist/client/assets/{WorkspaceEntityRoute-BWvMo9IK.js.map → WorkspaceEntityRoute-HlXUP8jk.js.map} +1 -1
  45. package/dist/client/assets/WorkspaceHomeLink-Bkd98CxT.js +2 -0
  46. package/dist/client/assets/{WorkspaceHomeLink-Vs72lXwi.js.map → WorkspaceHomeLink-Bkd98CxT.js.map} +1 -1
  47. package/dist/client/assets/{WorkspacePullRequestDetails-yNQRd79F.js → WorkspacePullRequestDetails-mIv0fssg.js} +3 -3
  48. package/dist/client/assets/{WorkspacePullRequestDetails-yNQRd79F.js.map → WorkspacePullRequestDetails-mIv0fssg.js.map} +1 -1
  49. package/dist/client/assets/{WorkspaceReleaseLayout-Ci-HsUIO.js → WorkspaceReleaseLayout-D2RrmuSp.js} +2 -2
  50. package/dist/client/assets/{WorkspaceReleaseLayout-Ci-HsUIO.js.map → WorkspaceReleaseLayout-D2RrmuSp.js.map} +1 -1
  51. package/dist/client/assets/{WorkspaceSettingsPage-CiQKaJv2.js → WorkspaceSettingsPage-CiVpUW2n.js} +2 -2
  52. package/dist/client/assets/{WorkspaceSettingsPage-CiQKaJv2.js.map → WorkspaceSettingsPage-CiVpUW2n.js.map} +1 -1
  53. package/dist/client/assets/{angular-html-B-gwpVlh-Cq4vjMyj.js → angular-html-B-gwpVlh-Cymx1bgk.js} +2 -2
  54. package/dist/client/assets/{angular-html-B-gwpVlh-Cq4vjMyj.js.map → angular-html-B-gwpVlh-Cymx1bgk.js.map} +1 -1
  55. package/dist/client/assets/{angular-ts-BdaH9qH_-e9JuDelg.js → angular-ts-BdaH9qH_-DfV0rlVi.js} +2 -2
  56. package/dist/client/assets/{angular-ts-BdaH9qH_-e9JuDelg.js.map → angular-ts-BdaH9qH_-DfV0rlVi.js.map} +1 -1
  57. package/dist/client/assets/{apl-BLTDDucx-BzhLkVBd.js → apl-BLTDDucx-QGqL8Zyu.js} +2 -2
  58. package/dist/client/assets/{apl-BLTDDucx-BzhLkVBd.js.map → apl-BLTDDucx-QGqL8Zyu.js.map} +1 -1
  59. package/dist/client/assets/{astro-CM3EIsEH-Ow1Hk5_H.js → astro-CM3EIsEH-UPw08TJg.js} +2 -2
  60. package/dist/client/assets/{astro-CM3EIsEH-Ow1Hk5_H.js.map → astro-CM3EIsEH-UPw08TJg.js.map} +1 -1
  61. package/dist/client/assets/{blade-BuLZ1b4i-BEq2hRPF.js → blade-BuLZ1b4i-DveZJd7d.js} +2 -2
  62. package/dist/client/assets/{blade-BuLZ1b4i-BEq2hRPF.js.map → blade-BuLZ1b4i-DveZJd7d.js.map} +1 -1
  63. package/dist/client/assets/{c-BOe7FNWg-b0CPmvGq.js → c-BOe7FNWg-C6rvzF2w.js} +2 -2
  64. package/dist/client/assets/{c-BOe7FNWg-b0CPmvGq.js.map → c-BOe7FNWg-C6rvzF2w.js.map} +1 -1
  65. package/dist/client/assets/{chapel-DS426I0C-Bdl9gjGU.js → chapel-DS426I0C-CyMEywxj.js} +2 -2
  66. package/dist/client/assets/{chapel-DS426I0C-Bdl9gjGU.js.map → chapel-DS426I0C-CyMEywxj.js.map} +1 -1
  67. package/dist/client/assets/{cobol-D88xw2SU-B-tWRYTQ.js → cobol-D88xw2SU-CJdybb9y.js} +2 -2
  68. package/dist/client/assets/{cobol-D88xw2SU-B-tWRYTQ.js.map → cobol-D88xw2SU-CJdybb9y.js.map} +1 -1
  69. package/dist/client/assets/{coffee-9O-pYXz5-CIYW8apR.js → coffee-9O-pYXz5-CwYHswTW.js} +2 -2
  70. package/dist/client/assets/{coffee-9O-pYXz5-CIYW8apR.js.map → coffee-9O-pYXz5-CwYHswTW.js.map} +1 -1
  71. package/dist/client/assets/{controlCenterRelayDock-zaVoWYIC.js → controlCenterRelayDock-BJGzwNRb.js} +3 -3
  72. package/dist/client/assets/{controlCenterRelayDock-zaVoWYIC.js.map → controlCenterRelayDock-BJGzwNRb.js.map} +1 -1
  73. package/dist/client/assets/{controlCenterRelayDockChrome-BYmBsXTg.js → controlCenterRelayDockChrome-NY7Yy3Wd.js} +2 -2
  74. package/dist/client/assets/{controlCenterRelayDockChrome-BYmBsXTg.js.map → controlCenterRelayDockChrome-NY7Yy3Wd.js.map} +1 -1
  75. package/dist/client/assets/{cpp-CPk7VU6o-BaDGXMSE.js → cpp-CPk7VU6o-meCcDOMv.js} +2 -2
  76. package/dist/client/assets/{cpp-CPk7VU6o-BaDGXMSE.js.map → cpp-CPk7VU6o-meCcDOMv.js.map} +1 -1
  77. package/dist/client/assets/{crystal-CRftOMVe-DHnKmVfR.js → crystal-CRftOMVe-BqF5ZH9X.js} +2 -2
  78. package/dist/client/assets/{crystal-CRftOMVe-DHnKmVfR.js.map → crystal-CRftOMVe-BqF5ZH9X.js.map} +1 -1
  79. package/dist/client/assets/{css-DKjIhbA_-CHqfnemG.js → css-DKjIhbA_-bArDG2fj.js} +2 -2
  80. package/dist/client/assets/{css-DKjIhbA_-CHqfnemG.js.map → css-DKjIhbA_-bArDG2fj.js.map} +1 -1
  81. package/dist/client/assets/{diff-BeVL1ItO.js → diff-BwuHSQEv.js} +3 -3
  82. package/dist/client/assets/{diff-BeVL1ItO.js.map → diff-BwuHSQEv.js.map} +1 -1
  83. package/dist/client/assets/{edge-CZci3foK-BGBPQtXV.js → edge-CZci3foK-Baej4bS3.js} +2 -2
  84. package/dist/client/assets/{edge-CZci3foK-BGBPQtXV.js.map → edge-CZci3foK-Baej4bS3.js.map} +1 -1
  85. package/dist/client/assets/{elixir-BFbWRTPN-D8ufalD-.js → elixir-BFbWRTPN-BWJLR11U.js} +2 -2
  86. package/dist/client/assets/{elixir-BFbWRTPN-D8ufalD-.js.map → elixir-BFbWRTPN-BWJLR11U.js.map} +1 -1
  87. package/dist/client/assets/{elm-BFCSOEGh-BWI2TEHg.js → elm-BFCSOEGh-CpyI6Neq.js} +2 -2
  88. package/dist/client/assets/{elm-BFCSOEGh-BWI2TEHg.js.map → elm-BFCSOEGh-CpyI6Neq.js.map} +1 -1
  89. package/dist/client/assets/{erb-C0EkZJvn-CGeW6FLC.js → erb-C0EkZJvn-Beo0qNuA.js} +2 -2
  90. package/dist/client/assets/{erb-C0EkZJvn-CGeW6FLC.js.map → erb-C0EkZJvn-Beo0qNuA.js.map} +1 -1
  91. package/dist/client/assets/{git-rebase-DBDs07B2-C__RuUYe.js → git-rebase-DBDs07B2-Br9li6by.js} +2 -2
  92. package/dist/client/assets/{git-rebase-DBDs07B2-C__RuUYe.js.map → git-rebase-DBDs07B2-Br9li6by.js.map} +1 -1
  93. package/dist/client/assets/{glimmer-js-oqYt1Bty-vrJ7QEYA.js → glimmer-js-oqYt1Bty-CI97juJO.js} +2 -2
  94. package/dist/client/assets/{glimmer-js-oqYt1Bty-vrJ7QEYA.js.map → glimmer-js-oqYt1Bty-CI97juJO.js.map} +1 -1
  95. package/dist/client/assets/{glimmer-ts-CjmgbZTn-CZyNz47e.js → glimmer-ts-CjmgbZTn-CFc8doTi.js} +2 -2
  96. package/dist/client/assets/{glimmer-ts-CjmgbZTn-CZyNz47e.js.map → glimmer-ts-CjmgbZTn-CFc8doTi.js.map} +1 -1
  97. package/dist/client/assets/{glsl-BqUMGrwT-BZCkTWpI.js → glsl-BqUMGrwT-BVf1nX6P.js} +2 -2
  98. package/dist/client/assets/{glsl-BqUMGrwT-BZCkTWpI.js.map → glsl-BqUMGrwT-BVf1nX6P.js.map} +1 -1
  99. package/dist/client/assets/{graphql-CEJryLGF-DDeR3BFq.js → graphql-CEJryLGF-CfFuHqok.js} +2 -2
  100. package/dist/client/assets/{graphql-CEJryLGF-DDeR3BFq.js.map → graphql-CEJryLGF-CfFuHqok.js.map} +1 -1
  101. package/dist/client/assets/{hack-DwBIwaGr-BeH7XNPv.js → hack-DwBIwaGr-BPMqrtdG.js} +2 -2
  102. package/dist/client/assets/{hack-DwBIwaGr-BeH7XNPv.js.map → hack-DwBIwaGr-BPMqrtdG.js.map} +1 -1
  103. package/dist/client/assets/{haml-BgD6GFV2-CCEflW5Z.js → haml-BgD6GFV2-Di-RgCFS.js} +2 -2
  104. package/dist/client/assets/{haml-BgD6GFV2-CCEflW5Z.js.map → haml-BgD6GFV2-Di-RgCFS.js.map} +1 -1
  105. package/dist/client/assets/{handlebars-DAEAtsmp-Dqwx0Kwh.js → handlebars-DAEAtsmp-BpuAuOPs.js} +2 -2
  106. package/dist/client/assets/{handlebars-DAEAtsmp-Dqwx0Kwh.js.map → handlebars-DAEAtsmp-BpuAuOPs.js.map} +1 -1
  107. package/dist/client/assets/{html-B63qAdeQ-BjlpEcyt.js → html-B63qAdeQ-Bp_oaeLi.js} +2 -2
  108. package/dist/client/assets/{html-B63qAdeQ-BjlpEcyt.js.map → html-B63qAdeQ-Bp_oaeLi.js.map} +1 -1
  109. package/dist/client/assets/{html-derivative-DliF0Izh-Dq9RKlA8.js → html-derivative-DliF0Izh-Bw81poXH.js} +2 -2
  110. package/dist/client/assets/{html-derivative-DliF0Izh-Dq9RKlA8.js.map → html-derivative-DliF0Izh-Bw81poXH.js.map} +1 -1
  111. package/dist/client/assets/{http-BPdteiK2-Cj-CMxKK.js → http-BPdteiK2-BBjGiW6O.js} +2 -2
  112. package/dist/client/assets/{http-BPdteiK2-Cj-CMxKK.js.map → http-BPdteiK2-BBjGiW6O.js.map} +1 -1
  113. package/dist/client/assets/{hurl-y6bQoMbn-DeXMgrrh.js → hurl-y6bQoMbn-CGKICVmL.js} +2 -2
  114. package/dist/client/assets/{hurl-y6bQoMbn-DeXMgrrh.js.map → hurl-y6bQoMbn-CGKICVmL.js.map} +1 -1
  115. package/dist/client/assets/{index-E-cqUXMY.js → index-fW9vMAFR.js} +3 -3
  116. package/dist/client/assets/{index-E-cqUXMY.js.map → index-fW9vMAFR.js.map} +1 -1
  117. package/dist/client/assets/{java-HDTZqoJ--BO-Jj0c5.js → java-HDTZqoJ--BeIYdX-t.js} +2 -2
  118. package/dist/client/assets/{java-HDTZqoJ--BO-Jj0c5.js.map → java-HDTZqoJ--BeIYdX-t.js.map} +1 -1
  119. package/dist/client/assets/{javascript-B8-PXjxO-CNlEZ_U-.js → javascript-B8-PXjxO-C4s21pIs.js} +2 -2
  120. package/dist/client/assets/{javascript-B8-PXjxO-CNlEZ_U-.js.map → javascript-B8-PXjxO-C4s21pIs.js.map} +1 -1
  121. package/dist/client/assets/{jinja-Li2helwk-CViXQJpU.js → jinja-Li2helwk-BCopqVIq.js} +2 -2
  122. package/dist/client/assets/{jinja-Li2helwk-CViXQJpU.js.map → jinja-Li2helwk-BCopqVIq.js.map} +1 -1
  123. package/dist/client/assets/{jison-D4pd2L4r-BoCbGSBL.js → jison-D4pd2L4r-CTDGIVzo.js} +2 -2
  124. package/dist/client/assets/{jison-D4pd2L4r-BoCbGSBL.js.map → jison-D4pd2L4r-CTDGIVzo.js.map} +1 -1
  125. package/dist/client/assets/{json-CHeq_08V-B5PDP4--.js → json-CHeq_08V-CdHymei0.js} +2 -2
  126. package/dist/client/assets/{json-CHeq_08V-B5PDP4--.js.map → json-CHeq_08V-CdHymei0.js.map} +1 -1
  127. package/dist/client/assets/{jsx-CTDAtxCE-YPyPyysB.js → jsx-CTDAtxCE-BKJFk7NT.js} +2 -2
  128. package/dist/client/assets/{jsx-CTDAtxCE-YPyPyysB.js.map → jsx-CTDAtxCE-BKJFk7NT.js.map} +1 -1
  129. package/dist/client/assets/{julia-B8HGxjvO-B7cty-kU.js → julia-B8HGxjvO-DbZcmZnq.js} +2 -2
  130. package/dist/client/assets/{julia-B8HGxjvO-B7cty-kU.js.map → julia-B8HGxjvO-DbZcmZnq.js.map} +1 -1
  131. package/dist/client/assets/{just-C1IY8eCo-BHAYLNfG.js → just-C1IY8eCo-DnzjlI44.js} +2 -2
  132. package/dist/client/assets/{just-C1IY8eCo-BHAYLNfG.js.map → just-C1IY8eCo-DnzjlI44.js.map} +1 -1
  133. package/dist/client/assets/{latex-CWjLpLhK-D7HTZDbj.js → latex-CWjLpLhK-BRJ7QYc1.js} +2 -2
  134. package/dist/client/assets/{latex-CWjLpLhK-D7HTZDbj.js.map → latex-CWjLpLhK-BRJ7QYc1.js.map} +1 -1
  135. package/dist/client/assets/{liquid-DO0vm52w-lvCobhXx.js → liquid-DO0vm52w-COb7GO7S.js} +2 -2
  136. package/dist/client/assets/{liquid-DO0vm52w-lvCobhXx.js.map → liquid-DO0vm52w-COb7GO7S.js.map} +1 -1
  137. package/dist/client/assets/{lua-rOZn354j-ODMkPdxs.js → lua-rOZn354j-B2CBXdd4.js} +2 -2
  138. package/dist/client/assets/{lua-rOZn354j-ODMkPdxs.js.map → lua-rOZn354j-B2CBXdd4.js.map} +1 -1
  139. package/dist/client/assets/{marko-CiZdnOV9-D9_XzPtX.js → marko-CiZdnOV9-CrlbLtbs.js} +2 -2
  140. package/dist/client/assets/{marko-CiZdnOV9-D9_XzPtX.js.map → marko-CiZdnOV9-CrlbLtbs.js.map} +1 -1
  141. package/dist/client/assets/{mdc-D1ADfxGi-B9kHGPaY.js → mdc-D1ADfxGi-5tloi5Ku.js} +2 -2
  142. package/dist/client/assets/{mdc-D1ADfxGi-B9kHGPaY.js.map → mdc-D1ADfxGi-5tloi5Ku.js.map} +1 -1
  143. package/dist/client/assets/{nginx-8KXIzHX2-8svBtm3U.js → nginx-8KXIzHX2-Y9gA2lux.js} +2 -2
  144. package/dist/client/assets/{nginx-8KXIzHX2-8svBtm3U.js.map → nginx-8KXIzHX2-Y9gA2lux.js.map} +1 -1
  145. package/dist/client/assets/{nim-CbBDSJf5-Ba_yd7rp.js → nim-CbBDSJf5-1Pnbq29n.js} +2 -2
  146. package/dist/client/assets/{nim-CbBDSJf5-Ba_yd7rp.js.map → nim-CbBDSJf5-1Pnbq29n.js.map} +1 -1
  147. package/dist/client/assets/{org-BlnOvN6p-Dvs9aaDc.js → org-BlnOvN6p-CUznrYZp.js} +2 -2
  148. package/dist/client/assets/{org-BlnOvN6p-Dvs9aaDc.js.map → org-BlnOvN6p-CUznrYZp.js.map} +1 -1
  149. package/dist/client/assets/{patterns-C3f2OP8b.js → patterns-Bc4kz9tn.js} +2 -2
  150. package/dist/client/assets/{patterns-C3f2OP8b.js.map → patterns-Bc4kz9tn.js.map} +1 -1
  151. package/dist/client/assets/{perl-CntHWu4k-2uoQgsvj.js → perl-CntHWu4k-BhS1nQNx.js} +2 -2
  152. package/dist/client/assets/{perl-CntHWu4k-2uoQgsvj.js.map → perl-CntHWu4k-BhS1nQNx.js.map} +1 -1
  153. package/dist/client/assets/{php-VF06KE26-Cy5BNgCu.js → php-VF06KE26-DTPzSju2.js} +2 -2
  154. package/dist/client/assets/{php-VF06KE26-Cy5BNgCu.js.map → php-VF06KE26-DTPzSju2.js.map} +1 -1
  155. package/dist/client/assets/{primitives-BnTwQBvt-Wa0KbeR5.js → primitives-BXWPLy2C-mP10m9L8.js} +2 -2
  156. package/dist/client/assets/{primitives-BnTwQBvt-Wa0KbeR5.js.map → primitives-BXWPLy2C-mP10m9L8.js.map} +1 -1
  157. package/dist/client/assets/{pug-DeZwH1tK-sFeyNqLq.js → pug-DeZwH1tK-B9No4pnM.js} +2 -2
  158. package/dist/client/assets/{pug-DeZwH1tK-sFeyNqLq.js.map → pug-DeZwH1tK-B9No4pnM.js.map} +1 -1
  159. package/dist/client/assets/{pullRequestReviewThreadReplay-CZK0ojth.js → pullRequestReviewThreadReplay-GsJkHDmp.js} +2 -2
  160. package/dist/client/assets/{pullRequestReviewThreadReplay-CZK0ojth.js.map → pullRequestReviewThreadReplay-GsJkHDmp.js.map} +1 -1
  161. package/dist/client/assets/{qml-CQhAR2tt-ghxlEb6L.js → qml-CQhAR2tt-XfN_XeIY.js} +2 -2
  162. package/dist/client/assets/{qml-CQhAR2tt-ghxlEb6L.js.map → qml-CQhAR2tt-XfN_XeIY.js.map} +1 -1
  163. package/dist/client/assets/{r-CGShpgkr-BnDtomVK.js → r-CGShpgkr-CSPdymwb.js} +2 -2
  164. package/dist/client/assets/{r-CGShpgkr-BnDtomVK.js.map → r-CGShpgkr-CSPdymwb.js.map} +1 -1
  165. package/dist/client/assets/{razor-CgB2QCs6-Du0sH0Qv.js → razor-CgB2QCs6-CpnEe0o4.js} +2 -2
  166. package/dist/client/assets/{razor-CgB2QCs6-Du0sH0Qv.js.map → razor-CgB2QCs6-CpnEe0o4.js.map} +1 -1
  167. package/dist/client/assets/{regexp-go_CdRjx-DZsiR-xj.js → regexp-go_CdRjx-CygQCdLU.js} +2 -2
  168. package/dist/client/assets/{regexp-go_CdRjx-DZsiR-xj.js.map → regexp-go_CdRjx-CygQCdLU.js.map} +1 -1
  169. package/dist/client/assets/{releaseRoutes-DLfDmfqe.js → releaseRoutes-Dk8MT0in.js} +2 -2
  170. package/dist/client/assets/{releaseRoutes-DLfDmfqe.js.map → releaseRoutes-Dk8MT0in.js.map} +1 -1
  171. package/dist/client/assets/{rst-CbWMI8ou-frdHzckK.js → rst-CbWMI8ou-GxcerOld.js} +2 -2
  172. package/dist/client/assets/{rst-CbWMI8ou-frdHzckK.js.map → rst-CbWMI8ou-GxcerOld.js.map} +1 -1
  173. package/dist/client/assets/{ruby-DsGwIs06-DFbM8woV.js → ruby-DsGwIs06-DFlD6ccB.js} +2 -2
  174. package/dist/client/assets/{ruby-DsGwIs06-DFbM8woV.js.map → ruby-DsGwIs06-DFlD6ccB.js.map} +1 -1
  175. package/dist/client/assets/{sas-DjxN8J4Z-Fo0Jhar_.js → sas-DjxN8J4Z-O-nhpylU.js} +2 -2
  176. package/dist/client/assets/{sas-DjxN8J4Z-Fo0Jhar_.js.map → sas-DjxN8J4Z-O-nhpylU.js.map} +1 -1
  177. package/dist/client/assets/{scss-bkiiULjK-jVZWZBbu.js → scss-bkiiULjK-BCCx5Vl_.js} +2 -2
  178. package/dist/client/assets/{scss-bkiiULjK-jVZWZBbu.js.map → scss-bkiiULjK-BCCx5Vl_.js.map} +1 -1
  179. package/dist/client/assets/{shellscript-Cuh1SIPr-Dbirzu6D.js → shellscript-Cuh1SIPr-CHsx4a67.js} +2 -2
  180. package/dist/client/assets/{shellscript-Cuh1SIPr-Dbirzu6D.js.map → shellscript-Cuh1SIPr-CHsx4a67.js.map} +1 -1
  181. package/dist/client/assets/{shellsession-C4UOwxb7-7CJWgYuy.js → shellsession-C4UOwxb7-D6bkncqE.js} +2 -2
  182. package/dist/client/assets/{shellsession-C4UOwxb7-7CJWgYuy.js.map → shellsession-C4UOwxb7-D6bkncqE.js.map} +1 -1
  183. package/dist/client/assets/{soy-CeGFXpLT-D9dc77z6.js → soy-CeGFXpLT-9HOh-Ygc.js} +2 -2
  184. package/dist/client/assets/{soy-CeGFXpLT-D9dc77z6.js.map → soy-CeGFXpLT-9HOh-Ygc.js.map} +1 -1
  185. package/dist/client/assets/{sql-qDYmMTO1-uEsSySDj.js → sql-qDYmMTO1-CEdQ0v3n.js} +2 -2
  186. package/dist/client/assets/{sql-qDYmMTO1-uEsSySDj.js.map → sql-qDYmMTO1-CEdQ0v3n.js.map} +1 -1
  187. package/dist/client/assets/{stata-Dzus_rwP-BH7vam06.js → stata-Dzus_rwP-BuG1u1jJ.js} +2 -2
  188. package/dist/client/assets/{stata-Dzus_rwP-BH7vam06.js.map → stata-Dzus_rwP-BuG1u1jJ.js.map} +1 -1
  189. package/dist/client/assets/{surrealql-DmTrf8uR-CWkOYJpX.js → surrealql-DmTrf8uR-CSBOHXCO.js} +2 -2
  190. package/dist/client/assets/{surrealql-DmTrf8uR-CWkOYJpX.js.map → surrealql-DmTrf8uR-CSBOHXCO.js.map} +1 -1
  191. package/dist/client/assets/{svelte-CWlRonoS-BlW_D3qk.js → svelte-CWlRonoS-DgXWzKbz.js} +2 -2
  192. package/dist/client/assets/{svelte-CWlRonoS-BlW_D3qk.js.map → svelte-CWlRonoS-DgXWzKbz.js.map} +1 -1
  193. package/dist/client/assets/{templ-EuFg1gKs-BPpn997C.js → templ-EuFg1gKs-Gm_jX91q.js} +2 -2
  194. package/dist/client/assets/{templ-EuFg1gKs-BPpn997C.js.map → templ-EuFg1gKs-Gm_jX91q.js.map} +1 -1
  195. package/dist/client/assets/{tex-Cbbx1SXS-BYnCXVUj.js → tex-Cbbx1SXS-UHGl4s7W.js} +2 -2
  196. package/dist/client/assets/{tex-Cbbx1SXS-BYnCXVUj.js.map → tex-Cbbx1SXS-UHGl4s7W.js.map} +1 -1
  197. package/dist/client/assets/{ts-tags-DOHpIWV2-DGGUehb1.js → ts-tags-DOHpIWV2-BFeQ2_qS.js} +2 -2
  198. package/dist/client/assets/{ts-tags-DOHpIWV2-DGGUehb1.js.map → ts-tags-DOHpIWV2-BFeQ2_qS.js.map} +1 -1
  199. package/dist/client/assets/{tsx-DmRL3u_2-BuphZRb1.js → tsx-DmRL3u_2-XbmtCpCA.js} +2 -2
  200. package/dist/client/assets/{tsx-DmRL3u_2-BuphZRb1.js.map → tsx-DmRL3u_2-XbmtCpCA.js.map} +1 -1
  201. package/dist/client/assets/{twig-BzcHspK1-BHSYcxkL.js → twig-BzcHspK1-taTu1Drs.js} +2 -2
  202. package/dist/client/assets/{twig-BzcHspK1-BHSYcxkL.js.map → twig-BzcHspK1-taTu1Drs.js.map} +1 -1
  203. package/dist/client/assets/{typescript-BYTx4UxO-BWghQV1V.js → typescript-BYTx4UxO-kK2df6yp.js} +2 -2
  204. package/dist/client/assets/{typescript-BYTx4UxO-BWghQV1V.js.map → typescript-BYTx4UxO-kK2df6yp.js.map} +1 -1
  205. package/dist/client/assets/{typst-BrfC91e7-D-qhUyZC.js → typst-BrfC91e7-D77xpI_O.js} +2 -2
  206. package/dist/client/assets/{typst-BrfC91e7-D-qhUyZC.js.map → typst-BrfC91e7-D77xpI_O.js.map} +1 -1
  207. package/dist/client/assets/{useWorkspaceDefaultLanding-DaE2YGNd.js → useWorkspaceDefaultLanding-CHavgP2x.js} +2 -2
  208. package/dist/client/assets/{useWorkspaceDefaultLanding-DaE2YGNd.js.map → useWorkspaceDefaultLanding-CHavgP2x.js.map} +1 -1
  209. package/dist/client/assets/{vue-B92PIQFm-CoGWLOqg.js → vue-B92PIQFm-CxfWUGFO.js} +2 -2
  210. package/dist/client/assets/{vue-B92PIQFm-CoGWLOqg.js.map → vue-B92PIQFm-CxfWUGFO.js.map} +1 -1
  211. package/dist/client/assets/{vue-html-EDHI-aeE-CC2k9uRQ.js → vue-html-EDHI-aeE-uPrIvgh4.js} +2 -2
  212. package/dist/client/assets/{vue-html-EDHI-aeE-CC2k9uRQ.js.map → vue-html-EDHI-aeE-uPrIvgh4.js.map} +1 -1
  213. package/dist/client/assets/{vue-vine-CmMdgoEY-_zZ7pZf1.js → vue-vine-CmMdgoEY-eCdJx6AS.js} +2 -2
  214. package/dist/client/assets/{vue-vine-CmMdgoEY-_zZ7pZf1.js.map → vue-vine-CmMdgoEY-eCdJx6AS.js.map} +1 -1
  215. package/dist/client/assets/{workspaceEntityRoutes-BUuMTdMr.js → workspaceEntityRoutes-DeWAeNbF.js} +2 -2
  216. package/dist/client/assets/{workspaceEntityRoutes-BUuMTdMr.js.map → workspaceEntityRoutes-DeWAeNbF.js.map} +1 -1
  217. package/dist/client/assets/{workspaceScrollCapture-DllLzjf8.js → workspaceScrollCapture-Cr6uBq-z.js} +2 -2
  218. package/dist/client/assets/{workspaceScrollCapture-DllLzjf8.js.map → workspaceScrollCapture-Cr6uBq-z.js.map} +1 -1
  219. package/dist/client/assets/{xml-Bz9Nzp99-B0ZZBRFq.js → xml-Bz9Nzp99-DniaQ-4l.js} +2 -2
  220. package/dist/client/assets/{xml-Bz9Nzp99-B0ZZBRFq.js.map → xml-Bz9Nzp99-DniaQ-4l.js.map} +1 -1
  221. package/dist/client/assets/{xsl-D0pOnfMq-DJSuRtxm.js → xsl-D0pOnfMq-DIsX5RIx.js} +2 -2
  222. package/dist/client/assets/{xsl-D0pOnfMq-DJSuRtxm.js.map → xsl-D0pOnfMq-DIsX5RIx.js.map} +1 -1
  223. package/dist/client/assets/{yaml-DKDHNCIP-CkHFy1FE.js → yaml-DKDHNCIP-DZpgjsVZ.js} +2 -2
  224. package/dist/client/assets/{yaml-DKDHNCIP-CkHFy1FE.js.map → yaml-DKDHNCIP-DZpgjsVZ.js.map} +1 -1
  225. package/dist/client/index.html +1 -1
  226. package/package.json +8 -8
  227. package/dist/client/assets/WorkspaceHomeLink-Vs72lXwi.js +0 -2
@@ -1,2 +1,2 @@
1
- import{i as e,t}from"./react-DB-4Zxce.js";import{c as n,m as r,s as i,u as a}from"./hooks-D2zmMoSa.js";import{r as o}from"./Dialog-CplGpe1F-DvPHUaxb.js";import{M as s,R as c,h as l,k as u,m as d}from"./index-E-cqUXMY.js";import{i as f,n as p,o as m,r as h}from"./releaseRoutes-DLfDmfqe.js";import{PortfolioOverviewView as g,usePortfolioOverviewController as _}from"./PortfolioOverview-mX6k5nL-.js";import{n as v}from"./useCompactReleasePreview-CmOBEC-K.js";var y=e(t(),1),b={state:`_state_1or46_1`},x=u(),S=()=>(0,x.jsx)(`section`,{className:b.state,children:(0,x.jsx)(o,{action:(0,x.jsx)(s,{to:`/`,children:`Return to Control Center`}),description:`This workspace is unavailable to the current browser session. Check the address or return home.`,title:`Workspace not found`})}),C=(e,t)=>e._tag!==`ready`||e.portfolio.workspaceId===t,w=()=>{let e=_(),t=i(),o=a(),s=v(),u=(0,y.useRef)(null),b=r(),[w,T]=(0,y.useState)(null),E=h(b.workspaceId),D=n(`/w/:workspaceId/overview`)!==null,O=n(`/w/:workspaceId/releases/:releaseId/preview`),k=p(O?.params.releaseId),A=E!==null&&k!==null&&e.state._tag===`ready`&&e.state.portfolio.releases.some(e=>e.id===k),j=D||A;if((0,y.useEffect)(()=>{w!==null&&E!==null&&e.state._tag===`ready`&&t.pathname===d(E)&&([...u.current?.querySelectorAll(`[data-portfolio-release-id]`)??[]].find(e=>e.dataset.portfolioReleaseId===w)?.querySelector(`button`)?.focus(),T(null))},[e.state,t.pathname,w,E]),E===null||!C(e.state,E))return(0,x.jsx)(S,{});let M=e=>{let n=f(E,e,m(t));o(l(E,e),{preventScrollReset:!0,state:n,viewTransition:!s})},N={controller:e,requestReleaseFocus:T,workspaceId:E};return(0,x.jsxs)(x.Fragment,{children:[j?(0,x.jsx)(`div`,{ref:u,children:(0,x.jsx)(g,{onPreviewRelease:M,onRetry:e.onRetry,previewPathForRelease:e=>l(E,e),state:e.state})}):null,(0,x.jsx)(c,{context:N})]})},T=()=>null,E=()=>{let e=r(),t=h(e.workspaceId);return(0,x.jsx)(`section`,{className:b.state,children:(0,x.jsx)(o,{action:t===null?(0,x.jsx)(s,{to:`/`,children:`Return to Control Center`}):(0,x.jsx)(s,{to:d(t),children:`Open workspace overview`}),description:`The requested Control Center page does not exist.`,title:`Page not found`})})};export{E as WorkspaceNotFoundRoute,T as WorkspaceOverviewRoute,w as WorkspaceReleaseLayout};
2
- //# sourceMappingURL=WorkspaceReleaseLayout-Ci-HsUIO.js.map
1
+ import{i as e,t}from"./react-DB-4Zxce.js";import{c as n,m as r,s as i,u as a}from"./hooks-D2zmMoSa.js";import{r as o}from"./Dialog-CplGpe1F-DeMJtg-H.js";import{M as s,R as c,h as l,k as u,m as d}from"./index-fW9vMAFR.js";import{i as f,n as p,o as m,r as h}from"./releaseRoutes-Dk8MT0in.js";import{PortfolioOverviewView as g,usePortfolioOverviewController as _}from"./PortfolioOverview-Cnnxhgpt.js";import{n as v}from"./useCompactReleasePreview-CmOBEC-K.js";var y=e(t(),1),b={state:`_state_1or46_1`},x=u(),S=()=>(0,x.jsx)(`section`,{className:b.state,children:(0,x.jsx)(o,{action:(0,x.jsx)(s,{to:`/`,children:`Return to Control Center`}),description:`This workspace is unavailable to the current browser session. Check the address or return home.`,title:`Workspace not found`})}),C=(e,t)=>e._tag!==`ready`||e.portfolio.workspaceId===t,w=()=>{let e=_(),t=i(),o=a(),s=v(),u=(0,y.useRef)(null),b=r(),[w,T]=(0,y.useState)(null),E=h(b.workspaceId),D=n(`/w/:workspaceId/overview`)!==null,O=n(`/w/:workspaceId/releases/:releaseId/preview`),k=p(O?.params.releaseId),A=E!==null&&k!==null&&e.state._tag===`ready`&&e.state.portfolio.releases.some(e=>e.id===k),j=D||A;if((0,y.useEffect)(()=>{w!==null&&E!==null&&e.state._tag===`ready`&&t.pathname===d(E)&&([...u.current?.querySelectorAll(`[data-portfolio-release-id]`)??[]].find(e=>e.dataset.portfolioReleaseId===w)?.querySelector(`button`)?.focus(),T(null))},[e.state,t.pathname,w,E]),E===null||!C(e.state,E))return(0,x.jsx)(S,{});let M=e=>{let n=f(E,e,m(t));o(l(E,e),{preventScrollReset:!0,state:n,viewTransition:!s})},N={controller:e,requestReleaseFocus:T,workspaceId:E};return(0,x.jsxs)(x.Fragment,{children:[j?(0,x.jsx)(`div`,{ref:u,children:(0,x.jsx)(g,{onPreviewRelease:M,onRetry:e.onRetry,previewPathForRelease:e=>l(E,e),state:e.state})}):null,(0,x.jsx)(c,{context:N})]})},T=()=>null,E=()=>{let e=r(),t=h(e.workspaceId);return(0,x.jsx)(`section`,{className:b.state,children:(0,x.jsx)(o,{action:t===null?(0,x.jsx)(s,{to:`/`,children:`Return to Control Center`}):(0,x.jsx)(s,{to:d(t),children:`Open workspace overview`}),description:`The requested Control Center page does not exist.`,title:`Page not found`})})};export{E as WorkspaceNotFoundRoute,T as WorkspaceOverviewRoute,w as WorkspaceReleaseLayout};
2
+ //# sourceMappingURL=WorkspaceReleaseLayout-D2RrmuSp.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"WorkspaceReleaseLayout-Ci-HsUIO.js","names":["styles","StatePanel","useRef","useState","_Fragment","__toESM","useMatch","useParams","useLocation","useNavigate","He","Link","Outlet","releasePreviewPath","require_jsx_runtime","releaseParentPath","makeReleaseRouteState","decodeReleaseRouteId","releaseOriginFromLocation","decodeWorkspaceRouteId","usePrefersReducedReleaseMotion","import_react","require_react","WorkspaceReleaseLayout_module_default","import_jsx_runtime","WorkspaceNotFound","isMatchingWorkspace","state","workspaceId","WorkspaceReleaseLayout","controller","usePortfolioOverviewController","location","navigate","prefersReducedMotion","overviewRef","params","pendingReleaseFocus","setPendingReleaseFocus","isOverview","previewMatch","previewReleaseId","isKnownPreview","release","shouldRenderPortfolio","entry","onPreviewRelease","releaseId","outletContext","PortfolioOverviewView","WorkspaceOverviewRoute","WorkspaceNotFoundRoute"],"sources":["../../../src/client/releases/WorkspaceReleaseLayout.module.css","../../../src/client/releases/WorkspaceReleaseLayout.tsx"],"sourcesContent":[".state {\n display: grid;\n min-block-size: 60dvh;\n place-items: center;\n}\n\n.state a {\n color: inherit;\n font: var(--rly-type-label-weight) var(--rly-type-label-size) / var(--rly-type-label-line-height)\n var(--rly-type-label-font);\n}\n","import { StatePanel } from \"@knpkv/rly/primitives\"\nimport { type ReactElement, useEffect, useRef, useState } from \"react\"\nimport { Link, Outlet, useLocation, useMatch, useNavigate, useParams } from \"react-router\"\n\nimport {\n PortfolioOverviewView,\n type PortfolioOverviewController,\n type PortfolioOverviewState,\n usePortfolioOverviewController\n} from \"../portfolio/PortfolioOverview.js\"\nimport type { PortfolioReleasePresentation } from \"../portfolio/presentPortfolio.js\"\nimport {\n decodeReleaseRouteId,\n decodeWorkspaceRouteId,\n makeReleaseRouteState,\n releaseOriginFromLocation,\n releaseParentPath,\n releasePreviewPath\n} from \"./releaseRoutes.js\"\nimport styles from \"./WorkspaceReleaseLayout.module.css\"\nimport { usePrefersReducedReleaseMotion } from \"./useCompactReleasePreview.js\"\n\nexport interface WorkspaceReleaseOutletContext {\n readonly controller: PortfolioOverviewController\n readonly requestReleaseFocus: (releaseId: PortfolioReleasePresentation[\"id\"]) => void\n readonly workspaceId: NonNullable<ReturnType<typeof decodeWorkspaceRouteId>>\n}\n\nconst WorkspaceNotFound = (): ReactElement => (\n <section className={styles.state}>\n <StatePanel\n action={<Link to=\"/\">Return to Control Center</Link>}\n description=\"This workspace is unavailable to the current browser session. Check the address or return home.\"\n title=\"Workspace not found\"\n />\n </section>\n)\n\nconst isMatchingWorkspace = (\n state: PortfolioOverviewState,\n workspaceId: NonNullable<ReturnType<typeof decodeWorkspaceRouteId>>\n): boolean => state._tag !== \"ready\" || state.portfolio.workspaceId === workspaceId\n\n/** Keep the canonical workspace overview mounted behind route-owned release previews. */\nexport const WorkspaceReleaseLayout = (): ReactElement => {\n const controller = usePortfolioOverviewController()\n const location = useLocation()\n const navigate = useNavigate()\n const prefersReducedMotion = usePrefersReducedReleaseMotion()\n const overviewRef = useRef<HTMLDivElement>(null)\n const params = useParams()\n const [pendingReleaseFocus, setPendingReleaseFocus] = useState<PortfolioReleasePresentation[\"id\"] | null>(null)\n const workspaceId = decodeWorkspaceRouteId(params.workspaceId)\n const isOverview = useMatch(\"/w/:workspaceId/overview\") !== null\n const previewMatch = useMatch(\"/w/:workspaceId/releases/:releaseId/preview\")\n\n const previewReleaseId = decodeReleaseRouteId(previewMatch?.params.releaseId)\n const isKnownPreview =\n workspaceId !== null &&\n previewReleaseId !== null &&\n controller.state._tag === \"ready\" &&\n controller.state.portfolio.releases.some((release) => release.id === previewReleaseId)\n const shouldRenderPortfolio = isOverview || isKnownPreview\n\n useEffect(() => {\n if (\n pendingReleaseFocus === null ||\n workspaceId === null ||\n controller.state._tag !== \"ready\" ||\n location.pathname !== releaseParentPath(workspaceId)\n ) {\n return\n }\n const releaseEntry = [\n ...(overviewRef.current?.querySelectorAll<HTMLElement>(\"[data-portfolio-release-id]\") ?? [])\n ].find((entry) => entry.dataset.portfolioReleaseId === pendingReleaseFocus)\n releaseEntry?.querySelector<HTMLButtonElement>(\"button\")?.focus()\n setPendingReleaseFocus(null)\n }, [controller.state, location.pathname, pendingReleaseFocus, workspaceId])\n\n if (workspaceId === null || !isMatchingWorkspace(controller.state, workspaceId)) return <WorkspaceNotFound />\n\n const onPreviewRelease = (releaseId: PortfolioReleasePresentation[\"id\"]): void => {\n const state = makeReleaseRouteState(workspaceId, releaseId, releaseOriginFromLocation(location))\n navigate(releasePreviewPath(workspaceId, releaseId), {\n preventScrollReset: true,\n state,\n viewTransition: !prefersReducedMotion\n })\n }\n const outletContext = {\n controller,\n requestReleaseFocus: setPendingReleaseFocus,\n workspaceId\n } satisfies WorkspaceReleaseOutletContext\n\n return (\n <>\n {shouldRenderPortfolio ? (\n <div ref={overviewRef}>\n <PortfolioOverviewView\n onPreviewRelease={onPreviewRelease}\n onRetry={controller.onRetry}\n previewPathForRelease={(releaseId) => releasePreviewPath(workspaceId, releaseId)}\n state={controller.state}\n />\n </div>\n ) : null}\n <Outlet context={outletContext} />\n </>\n )\n}\n\n/** Render no extra content for the overview child because its layout owns the live view. */\nexport const WorkspaceOverviewRoute = (): null => null\n\n/** Keep an unknown workspace child URL stable instead of substituting another route. */\nexport const WorkspaceNotFoundRoute = (): ReactElement => {\n const params = useParams()\n const workspaceId = decodeWorkspaceRouteId(params.workspaceId)\n return (\n <section className={styles.state}>\n <StatePanel\n action={\n workspaceId === null ? (\n <Link to=\"/\">Return to Control Center</Link>\n ) : (\n <Link to={releaseParentPath(workspaceId)}>Open workspace overview</Link>\n )\n }\n description=\"The requested Control Center page does not exist.\"\n title=\"Page not found\"\n />\n </section>\n )\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"WorkspaceReleaseLayout-D2RrmuSp.js","names":["styles","StatePanel","useRef","useState","_Fragment","__toESM","useMatch","useParams","useLocation","useNavigate","He","Link","Outlet","releasePreviewPath","require_jsx_runtime","releaseParentPath","makeReleaseRouteState","decodeReleaseRouteId","releaseOriginFromLocation","decodeWorkspaceRouteId","usePrefersReducedReleaseMotion","import_react","require_react","WorkspaceReleaseLayout_module_default","import_jsx_runtime","WorkspaceNotFound","isMatchingWorkspace","state","workspaceId","WorkspaceReleaseLayout","controller","usePortfolioOverviewController","location","navigate","prefersReducedMotion","overviewRef","params","pendingReleaseFocus","setPendingReleaseFocus","isOverview","previewMatch","previewReleaseId","isKnownPreview","release","shouldRenderPortfolio","entry","onPreviewRelease","releaseId","outletContext","PortfolioOverviewView","WorkspaceOverviewRoute","WorkspaceNotFoundRoute"],"sources":["../../../src/client/releases/WorkspaceReleaseLayout.module.css","../../../src/client/releases/WorkspaceReleaseLayout.tsx"],"sourcesContent":[".state {\n display: grid;\n min-block-size: 60dvh;\n place-items: center;\n}\n\n.state a {\n color: inherit;\n font: var(--rly-type-label-weight) var(--rly-type-label-size) / var(--rly-type-label-line-height)\n var(--rly-type-label-font);\n}\n","import { StatePanel } from \"@knpkv/rly/primitives\"\nimport { type ReactElement, useEffect, useRef, useState } from \"react\"\nimport { Link, Outlet, useLocation, useMatch, useNavigate, useParams } from \"react-router\"\n\nimport {\n PortfolioOverviewView,\n type PortfolioOverviewController,\n type PortfolioOverviewState,\n usePortfolioOverviewController\n} from \"../portfolio/PortfolioOverview.js\"\nimport type { PortfolioReleasePresentation } from \"../portfolio/presentPortfolio.js\"\nimport {\n decodeReleaseRouteId,\n decodeWorkspaceRouteId,\n makeReleaseRouteState,\n releaseOriginFromLocation,\n releaseParentPath,\n releasePreviewPath\n} from \"./releaseRoutes.js\"\nimport styles from \"./WorkspaceReleaseLayout.module.css\"\nimport { usePrefersReducedReleaseMotion } from \"./useCompactReleasePreview.js\"\n\nexport interface WorkspaceReleaseOutletContext {\n readonly controller: PortfolioOverviewController\n readonly requestReleaseFocus: (releaseId: PortfolioReleasePresentation[\"id\"]) => void\n readonly workspaceId: NonNullable<ReturnType<typeof decodeWorkspaceRouteId>>\n}\n\nconst WorkspaceNotFound = (): ReactElement => (\n <section className={styles.state}>\n <StatePanel\n action={<Link to=\"/\">Return to Control Center</Link>}\n description=\"This workspace is unavailable to the current browser session. Check the address or return home.\"\n title=\"Workspace not found\"\n />\n </section>\n)\n\nconst isMatchingWorkspace = (\n state: PortfolioOverviewState,\n workspaceId: NonNullable<ReturnType<typeof decodeWorkspaceRouteId>>\n): boolean => state._tag !== \"ready\" || state.portfolio.workspaceId === workspaceId\n\n/** Keep the canonical workspace overview mounted behind route-owned release previews. */\nexport const WorkspaceReleaseLayout = (): ReactElement => {\n const controller = usePortfolioOverviewController()\n const location = useLocation()\n const navigate = useNavigate()\n const prefersReducedMotion = usePrefersReducedReleaseMotion()\n const overviewRef = useRef<HTMLDivElement>(null)\n const params = useParams()\n const [pendingReleaseFocus, setPendingReleaseFocus] = useState<PortfolioReleasePresentation[\"id\"] | null>(null)\n const workspaceId = decodeWorkspaceRouteId(params.workspaceId)\n const isOverview = useMatch(\"/w/:workspaceId/overview\") !== null\n const previewMatch = useMatch(\"/w/:workspaceId/releases/:releaseId/preview\")\n\n const previewReleaseId = decodeReleaseRouteId(previewMatch?.params.releaseId)\n const isKnownPreview =\n workspaceId !== null &&\n previewReleaseId !== null &&\n controller.state._tag === \"ready\" &&\n controller.state.portfolio.releases.some((release) => release.id === previewReleaseId)\n const shouldRenderPortfolio = isOverview || isKnownPreview\n\n useEffect(() => {\n if (\n pendingReleaseFocus === null ||\n workspaceId === null ||\n controller.state._tag !== \"ready\" ||\n location.pathname !== releaseParentPath(workspaceId)\n ) {\n return\n }\n const releaseEntry = [\n ...(overviewRef.current?.querySelectorAll<HTMLElement>(\"[data-portfolio-release-id]\") ?? [])\n ].find((entry) => entry.dataset.portfolioReleaseId === pendingReleaseFocus)\n releaseEntry?.querySelector<HTMLButtonElement>(\"button\")?.focus()\n setPendingReleaseFocus(null)\n }, [controller.state, location.pathname, pendingReleaseFocus, workspaceId])\n\n if (workspaceId === null || !isMatchingWorkspace(controller.state, workspaceId)) return <WorkspaceNotFound />\n\n const onPreviewRelease = (releaseId: PortfolioReleasePresentation[\"id\"]): void => {\n const state = makeReleaseRouteState(workspaceId, releaseId, releaseOriginFromLocation(location))\n navigate(releasePreviewPath(workspaceId, releaseId), {\n preventScrollReset: true,\n state,\n viewTransition: !prefersReducedMotion\n })\n }\n const outletContext = {\n controller,\n requestReleaseFocus: setPendingReleaseFocus,\n workspaceId\n } satisfies WorkspaceReleaseOutletContext\n\n return (\n <>\n {shouldRenderPortfolio ? (\n <div ref={overviewRef}>\n <PortfolioOverviewView\n onPreviewRelease={onPreviewRelease}\n onRetry={controller.onRetry}\n previewPathForRelease={(releaseId) => releasePreviewPath(workspaceId, releaseId)}\n state={controller.state}\n />\n </div>\n ) : null}\n <Outlet context={outletContext} />\n </>\n )\n}\n\n/** Render no extra content for the overview child because its layout owns the live view. */\nexport const WorkspaceOverviewRoute = (): null => null\n\n/** Keep an unknown workspace child URL stable instead of substituting another route. */\nexport const WorkspaceNotFoundRoute = (): ReactElement => {\n const params = useParams()\n const workspaceId = decodeWorkspaceRouteId(params.workspaceId)\n return (\n <section className={styles.state}>\n <StatePanel\n action={\n workspaceId === null ? (\n <Link to=\"/\">Return to Control Center</Link>\n ) : (\n <Link to={releaseParentPath(workspaceId)}>Open workspace overview</Link>\n )\n }\n description=\"The requested Control Center page does not exist.\"\n title=\"Page not found\"\n />\n </section>\n )\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{i as e,t}from"./react-DB-4Zxce.js";import{m as n}from"./hooks-D2zmMoSa.js";import{_ as r,f as i,r as a}from"./Dialog-CplGpe1F-DvPHUaxb.js";import{a as o,b as s,k as c,v as l,y as u}from"./index-E-cqUXMY.js";import{n as d,t as f}from"./primitives-BnTwQBvt-Wa0KbeR5.js";import{Ei as p,Hr as m,Ka as h,Si as g,Wr as _,Yr as v,er as y,mi as b}from"./agent-api-D_ViR39X.js";import{a as x,i as S,n as C,r as w,t as T}from"./client-DWkZYpso.js";import{t as E}from"./authenticatedMutationClient-D_5YP1Kc.js";import{browserWorkspaceSettingsTransport as D}from"./workspaceSettingsTransport-BFOjKgeP.js";var O=e(t(),1),k={panel:`_panel_lh4p3_1`,heading:`_heading_lh4p3_7`,pairing:`_pairing_lh4p3_8`,codeCard:`_codeCard_lh4p3_9`,session:`_session_lh4p3_10`,permission:`_permission_lh4p3_29`,code:`_code_lh4p3_9`,sessions:`_sessions_lh4p3_66`},A={issuePairingCode:(e,t)=>p(b(function*(){return yield*(yield*E).session.issueBrowserPairingCode({payload:{permission:e}})}).pipe(g(x)),{signal:t}),list:e=>p(b(function*(){return yield*(yield*T()).session.list()}).pipe(g(x)),{signal:e}),revoke:(e,t)=>p(b(function*(){yield*(yield*E).session.revoke({params:{sessionId:e}})}).pipe(g(x)),{signal:t})},j=c(),M=e=>e===`workspace-owner`?`Workspace owner`:e===`workspace-approver`?`Workspace approver`:e,N=(e,t=v())=>m(t,e.idleExpiresAt)>=0||m(t,e.absoluteExpiresAt)>=0,P=(e,t=v())=>e.revokedAt===null?N(e,t)?`Expired · last used ${_(e.lastSeenAt)}`:`Active · last used ${_(e.lastSeenAt)}`:`Revoked ${_(e.revokedAt)}`,F=async e=>{try{return await navigator.clipboard.writeText(e),!0}catch{return!1}},I=({canManage:e,currentSession:t,onSessionExpired:n,sessionKey:r,transport:a=A})=>{let[o,s]=(0,O.useState)({_tag:`loading`}),[c,l]=(0,O.useState)(`workspace-owner`),[u,p]=(0,O.useState)(null),[m,g]=(0,O.useState)(`idle`),[v,y]=(0,O.useState)(!1),[b,x]=(0,O.useState)(null),S=(0,O.useCallback)(e=>{s({_tag:`loading`}),a.list(e).then(e=>s({_tag:`ready`,sessions:e}),t=>{e.aborted||(h(`UnauthorizedApiError`)(t)&&n(r),s({_tag:`failed`}))})},[n,r,a]);(0,O.useEffect)(()=>{let e=new AbortController;return S(e.signal),()=>e.abort()},[S]);let C=()=>{let e=new AbortController;g(`issuing`),p(null),y(!1),a.issuePairingCode(c,e.signal).then(e=>{p(e),g(`idle`)},e=>{h(`UnauthorizedApiError`)(e)&&n(r),g(`failed`)})},w=e=>{let t=new AbortController;x(e),a.revoke(e,t.signal).then(()=>{x(null),p(null),S(new AbortController().signal)},e=>{h(`UnauthorizedApiError`)(e)&&n(r),x(null)})};return(0,j.jsxs)(d,{as:`section`,className:k.panel,padding:`default`,form:`grouped`,children:[(0,j.jsxs)(`div`,{className:k.heading,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(f,{as:`h2`,variant:`section-title`,children:`Browsers`}),(0,j.jsx)(f,{as:`p`,tone:`secondary`,children:`Pair more browsers with a single-use code. Every browser gets its own session and can be revoked independently.`})]}),o._tag===`failed`?(0,j.jsx)(i,{onClick:()=>S(new AbortController().signal),children:`Retry`}):null]}),e?(0,j.jsxs)(`div`,{className:k.pairing,children:[(0,j.jsxs)(`label`,{className:k.permission,children:[(0,j.jsx)(`span`,{children:`New browser access`}),(0,j.jsxs)(`select`,{disabled:m===`issuing`,onChange:e=>{let t=e.currentTarget.value;(t===`workspace-owner`||t===`workspace-approver`)&&l(t)},value:c,children:[(0,j.jsx)(`option`,{value:`workspace-owner`,children:`Workspace owner`}),(0,j.jsx)(`option`,{value:`workspace-approver`,children:`Workspace approver`})]})]}),(0,j.jsx)(i,{loading:m===`issuing`,onClick:C,variant:`primary`,children:`Add browser`})]}):(0,j.jsx)(f,{as:`p`,tone:`secondary`,children:`A workspace owner can add or revoke browsers.`}),m===`failed`?(0,j.jsx)(f,{as:`p`,role:`alert`,tone:`secondary`,children:`The pairing code could not be created. Try again.`}):null,u===null?null:(0,j.jsxs)(`div`,{className:k.codeCard,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(f,{as:`h3`,variant:`label`,children:`Pairing code`}),(0,j.jsxs)(f,{as:`p`,tone:`secondary`,children:[`In the other browser, open `,(0,j.jsx)(`strong`,{children:`/pair`}),` and paste this code before`,` `,_(u.expiresAt),`.`]})]}),(0,j.jsx)(`code`,{className:k.code,children:u.pairingCode}),(0,j.jsx)(i,{onClick:()=>{F(u.pairingCode).then(y)},children:v?`Copied`:`Copy code`})]}),(0,j.jsx)(`div`,{className:k.sessions,"aria-live":`polite`,children:o._tag===`loading`?(0,j.jsx)(f,{as:`p`,tone:`secondary`,children:`Loading paired browsers…`}):o._tag===`failed`?(0,j.jsx)(f,{as:`p`,tone:`secondary`,children:`Paired browsers could not be loaded.`}):o.sessions.map(n=>{let r=n.sessionId===t.sessionId;return(0,j.jsxs)(`article`,{className:k.session,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(f,{as:`h3`,variant:`label`,children:[M(n.permission),r?` · This browser`:``]}),(0,j.jsx)(f,{as:`p`,tone:`secondary`,children:P(n)})]}),e&&!r&&n.revokedAt===null&&!N(n)?(0,j.jsx)(i,{loading:b===n.sessionId,onClick:()=>w(n.sessionId),children:`Revoke`}):null]},n.sessionId)})})]})},L={page:`_page_1cf73_1`,heading:`_heading_1cf73_9`,theme:`_theme_1cf73_10`,save:`_save_1cf73_11`,actions:`_actions_1cf73_12`,notice:`_notice_1cf73_34`,governance:`_governance_1cf73_39`,sections:`_sections_1cf73_47`,section:`_section_1cf73_47`,sectionHeading:`_sectionHeading_1cf73_60`,fields:`_fields_1cf73_61`,field:`_field_1cf73_61`,checkbox:`_checkbox_1cf73_79`,control:`_control_1cf73_92`},R=h(`ConflictApiError`),z=h(`UnauthorizedApiError`),B=(e,t,n,r=Object.is)=>r(e,t)?n:t,V=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]),H=(e,t,n)=>{let r={schemaVersion:1,agent:{allowedProviders:B(e.agent.allowedProviders,t.agent.allowedProviders,n.agent.allowedProviders,V),defaultModel:B(e.agent.defaultModel,t.agent.defaultModel,n.agent.defaultModel),defaultProvider:B(e.agent.defaultProvider,t.agent.defaultProvider,n.agent.defaultProvider),profilePolicy:B(e.agent.profilePolicy,t.agent.profilePolicy,n.agent.profilePolicy),toolPolicy:B(e.agent.toolPolicy,t.agent.toolPolicy,n.agent.toolPolicy)},inference:{enabled:B(e.inference.enabled,t.inference.enabled,n.inference.enabled),minimumConfidencePercent:B(e.inference.minimumConfidencePercent,t.inference.minimumConfidencePercent,n.inference.minimumConfidencePercent)},investigation:{consecutiveFailureThreshold:B(e.investigation.consecutiveFailureThreshold,t.investigation.consecutiveFailureThreshold,n.investigation.consecutiveFailureThreshold),mode:B(e.investigation.mode,t.investigation.mode,n.investigation.mode)},jira:{commentMode:B(e.jira.commentMode,t.jira.commentMode,n.jira.commentMode),includeControlCenterAttribution:B(e.jira.includeControlCenterAttribution,t.jira.includeControlCenterAttribution,n.jira.includeControlCenterAttribution)},pipeline:{maximumAttempts:B(e.pipeline.maximumAttempts,t.pipeline.maximumAttempts,n.pipeline.maximumAttempts),retryMode:B(e.pipeline.retryMode,t.pipeline.retryMode,n.pipeline.retryMode)},presentation:{defaultLanding:B(e.presentation.defaultLanding,t.presentation.defaultLanding,n.presentation.defaultLanding),density:B(e.presentation.density,t.presentation.density,n.presentation.density)},retention:{agentActivityDays:B(e.retention.agentActivityDays,t.retention.agentActivityDays,n.retention.agentActivityDays),auditDays:B(e.retention.auditDays,t.retention.auditDays,n.retention.auditDays),contentDays:B(e.retention.contentDays,t.retention.contentDays,n.retention.contentDays),evidenceDays:B(e.retention.evidenceDays,t.retention.evidenceDays,n.retention.evidenceDays),sandboxArtifactDays:B(e.retention.sandboxArtifactDays,t.retention.sandboxArtifactDays,n.retention.sandboxArtifactDays)},synchronization:{cadence:B(e.synchronization.cadence,t.synchronization.cadence,n.synchronization.cadence),intervalMinutes:B(e.synchronization.intervalMinutes,t.synchronization.intervalMinutes,n.synchronization.intervalMinutes),staleAfterMinutes:B(e.synchronization.staleAfterMinutes,t.synchronization.staleAfterMinutes,n.synchronization.staleAfterMinutes)}};return y(C)(r)?r:null},U=(e,t,n=D)=>{let[r,i]=(0,O.useState)({_tag:`idle`}),a=(0,O.useRef)(r),[s,c]=(0,O.useState)(0),l=(0,O.useRef)(null),u=(0,O.useCallback)(e=>{a.current=e,i(e)},[]);(0,O.useEffect)(()=>{if(l.current?.abort(),e===null){u({_tag:`idle`});return}let r=new AbortController;return l.current=r,u({_tag:`loading`}),n.load(r.signal).then(e=>{r.signal.aborted||(o(e),u({_tag:`ready`,draft:e.settings,pendingMutationId:null,server:e,status:`saved`}))},n=>{r.signal.aborted||(z(n)&&t(e),u({_tag:`failed`}))}),()=>r.abort()},[t,s,e,u,n]);let d=(0,O.useCallback)(e=>{let t=a.current;t._tag===`ready`&&t.status!==`saving`&&u({...t,draft:e,pendingMutationId:null,status:w(t.server.settings,e).length===0?`saved`:`dirty`})},[u]),f=(0,O.useCallback)(()=>{if(e===null)return;let r=a.current;if(r._tag!==`ready`||r.status!==`dirty`&&r.status!==`failed`)return;let i=new AbortController;l.current?.abort(),l.current=i;let s=r.server,c=r.draft,d=w(s.settings,c).filter(S);u({...r,status:`saving`}),(r.pendingMutationId===null?n.makeMutationId():Promise.resolve(r.pendingMutationId)).then(r=>{n.update({mutationId:r,expectedRevision:s.revision,settings:c,acknowledgedGovernedSections:d},i.signal).then(e=>{i.signal.aborted||(o(e),u({_tag:`ready`,draft:e.settings,pendingMutationId:null,server:e,status:`saved`}))},a=>{if(!i.signal.aborted){if(z(a)){t(e),u({_tag:`failed`});return}if(!R(a)){u({_tag:`ready`,draft:c,pendingMutationId:r,server:s,status:`failed`});return}n.load(i.signal).then(e=>{i.signal.aborted||(o(e),u({_tag:`conflict`,base:s,candidate:c,latest:e,reapplyFailed:!1}))},n=>{if(!i.signal.aborted){if(z(n)){t(e),u({_tag:`failed`});return}u({_tag:`conflict-recovery-failed`,base:s,candidate:c})}})}})},()=>{i.signal.aborted||u({_tag:`ready`,draft:c,pendingMutationId:null,server:s,status:`failed`})})},[t,e,u,n]);return{discardConflict:(0,O.useCallback)(()=>{let e=a.current;e._tag===`conflict`&&u({_tag:`ready`,draft:e.latest.settings,pendingMutationId:null,server:e.latest,status:`saved`})},[u]),edit:d,reapplyConflict:(0,O.useCallback)(()=>{let e=a.current;if(e._tag!==`conflict`)return;let t=H(e.base.settings,e.candidate,e.latest.settings);if(t===null){u({...e,reapplyFailed:!0});return}u({_tag:`ready`,draft:t,pendingMutationId:null,server:e.latest,status:w(e.latest.settings,t).length===0?`saved`:`dirty`})},[u]),retry:()=>c(e=>e+1),retryConflict:(0,O.useCallback)(()=>{let r=a.current;if(r._tag!==`conflict-recovery-failed`)return;let i=new AbortController;l.current?.abort(),l.current=i;let{base:s,candidate:c}=r;u({_tag:`conflict-recovery-loading`,base:s,candidate:c}),n.load(i.signal).then(e=>{i.signal.aborted||(o(e),u({_tag:`conflict`,base:s,candidate:c,latest:e,reapplyFailed:!1}))},n=>{if(!i.signal.aborted){if(e!==null&&z(n)){t(e),u({_tag:`failed`});return}u({_tag:`conflict-recovery-failed`,base:s,candidate:c})}})},[t,e,u,n]),save:f,state:r}},W=(e,t)=>{let n=Number.parseInt(e.currentTarget.value,10);return Number.isNaN(n)?t:n},G=e=>[...new Set(e.split(`,`).map(e=>e.trim().toLowerCase()).filter(e=>e.length>0))].sort(),K=e=>e===null?`Not set`:e===!0?`Enabled`:e===!1?`Disabled`:String(e),q=(e,t,n)=>t===n?[]:[{after:K(n),before:K(t),label:e}],ee=(e,t,n)=>{switch(e){case`agent`:return[...q(`Allowed providers`,t.agent.allowedProviders.join(`, `),n.agent.allowedProviders.join(`, `)),...q(`Default provider`,t.agent.defaultProvider,n.agent.defaultProvider),...q(`Default model`,t.agent.defaultModel,n.agent.defaultModel),...q(`Tool access`,t.agent.toolPolicy,n.agent.toolPolicy),...q(`Runtime isolation`,t.agent.profilePolicy,n.agent.profilePolicy)];case`jira`:return[...q(`Comment publishing`,t.jira.commentMode,n.jira.commentMode),...q(`Control Center attribution`,t.jira.includeControlCenterAttribution,n.jira.includeControlCenterAttribution)];case`pipeline`:return[...q(`Retry policy`,t.pipeline.retryMode,n.pipeline.retryMode),...q(`Maximum attempts`,t.pipeline.maximumAttempts,n.pipeline.maximumAttempts)];case`retention`:return[...q(`Evidence (days)`,t.retention.evidenceDays,n.retention.evidenceDays),...q(`Content (days)`,t.retention.contentDays,n.retention.contentDays),...q(`Audit history (days)`,t.retention.auditDays,n.retention.auditDays),...q(`Agent activity (days)`,t.retention.agentActivityDays,n.retention.agentActivityDays),...q(`Sandbox artifacts (days)`,t.retention.sandboxArtifactDays,n.retention.sandboxArtifactDays)]}},J=({children:e,description:t,title:n})=>(0,j.jsxs)(d,{className:L.section,padding:`default`,form:`grouped`,children:[(0,j.jsxs)(`div`,{className:L.sectionHeading,children:[(0,j.jsx)(f,{as:`h2`,variant:`section-title`,children:n}),(0,j.jsx)(f,{as:`p`,tone:`secondary`,children:t})]}),(0,j.jsx)(`div`,{className:L.fields,children:e})]}),Y=({children:e,controlId:t,error:n,hint:r,label:i})=>(0,j.jsxs)(`label`,{className:L.field,htmlFor:t,children:[(0,j.jsx)(`span`,{children:i}),e,r===void 0?null:(0,j.jsx)(`small`,{children:r}),n===void 0?null:(0,j.jsx)(`small`,{id:t===void 0?void 0:`${t}-error`,role:`alert`,children:n})]}),X=({checked:e,disabled:t,label:n,onChange:r})=>(0,j.jsxs)(`label`,{className:L.checkbox,children:[(0,j.jsx)(`input`,{checked:e,disabled:t,onChange:e=>r(e.currentTarget.checked),type:`checkbox`}),(0,j.jsx)(`span`,{children:n})]}),Z=({disabled:e,label:t,onChange:n,options:r,value:i})=>(0,j.jsx)(Y,{label:t,children:(0,j.jsx)(`select`,{className:L.control,disabled:e,onChange:e=>{let t=r.find(([t])=>t===e.currentTarget.value);t!==void 0&&n(t[0])},value:i,children:r.map(([e,t])=>(0,j.jsx)(`option`,{value:e,children:t},e))})}),te=[[`evidenceDays`,`Evidence (days)`,3650],[`contentDays`,`Content (days)`,3650],[`auditDays`,`Audit history (days)`,3650],[`agentActivityDays`,`Agent activity (days)`,365],[`sandboxArtifactDays`,`Sandbox artifacts (days)`,30]],Q=({disabled:e,error:t,label:n,maximum:r,minimum:i,onChange:a,value:o})=>{let s=(0,O.useId)(),c=t??(!Number.isInteger(o)||o<i||o>r?`${n} must be a whole number from ${String(i)} to ${String(r)}.`:void 0);return(0,j.jsx)(Y,{controlId:s,...c===void 0?{}:{error:c},label:n,children:(0,j.jsx)(`input`,{"aria-describedby":c===void 0?void 0:`${s}-error`,"aria-invalid":c!==void 0||void 0,className:L.control,disabled:e,id:s,max:r,min:i,onChange:e=>a(W(e,o)),type:`number`,value:o})})},$=({canEdit:e,draft:t,onChange:n})=>{let r=!e,i=t.agent.allowedProviders.join(`, `),[a,o]=(0,O.useState)(i),s=(0,O.useRef)(i),c=(0,O.useRef)(!1),l=(e,r)=>n({...t,[e]:r}),u=e=>{let n=G(e);s.current=n.join(`, `),l(`agent`,{...t.agent,allowedProviders:n,defaultProvider:t.agent.defaultProvider!==null&&n.includes(t.agent.defaultProvider)?t.agent.defaultProvider:null,defaultModel:t.agent.defaultProvider!==null&&n.includes(t.agent.defaultProvider)?t.agent.defaultModel:null})};return(0,O.useEffect)(()=>{i!==s.current&&o(i),s.current=i},[i]),(0,j.jsxs)(`div`,{className:L.sections,children:[(0,j.jsxs)(J,{description:`Controls whether inferred delivery relationships are proposed and the confidence floor.`,title:`Inference`,children:[(0,j.jsx)(X,{checked:t.inference.enabled,disabled:r,label:`Enable relationship inference`,onChange:e=>l(`inference`,{...t.inference,enabled:e})}),(0,j.jsx)(Q,{disabled:r,label:`Minimum confidence (%)`,maximum:100,minimum:0,onChange:e=>l(`inference`,{...t.inference,minimumConfidencePercent:e}),value:t.inference.minimumConfidencePercent})]}),(0,j.jsxs)(J,{description:`Records the intended synchronization cadence; Sync now remains the active execution path. Also sets the age at which source data is stale.`,title:`Synchronization`,children:[(0,j.jsx)(Z,{disabled:r,label:`Cadence`,onChange:e=>l(`synchronization`,{...t.synchronization,cadence:e,intervalMinutes:e===`manual`?null:t.synchronization.intervalMinutes??60}),options:[[`manual`,`Manual`],[`interval`,`Scheduled interval`]],value:t.synchronization.cadence}),t.synchronization.intervalMinutes===null?null:(0,j.jsx)(Q,{disabled:r,label:`Interval (minutes)`,maximum:10080,minimum:5,onChange:e=>l(`synchronization`,{...t.synchronization,intervalMinutes:e}),value:t.synchronization.intervalMinutes}),(0,j.jsx)(Q,{disabled:r,label:`Stale after (minutes)`,maximum:43200,minimum:5,onChange:e=>l(`synchronization`,{...t.synchronization,staleAfterMinutes:e}),value:t.synchronization.staleAfterMinutes})]}),(0,j.jsx)(J,{description:`Governed lifecycle policy. Evidence expiry applies to new materialization; bounded final-class sweeps run through lifecycle operations.`,title:`Retention`,children:te.map(([e,n,i])=>(0,O.createElement)(Q,{disabled:r,...(()=>{let n=(e===`evidenceDays`||e===`auditDays`)&&t.retention.auditDays<t.retention.evidenceDays?`Audit retention must be at least as long as evidence retention.`:(e===`agentActivityDays`||e===`sandboxArtifactDays`)&&t.retention.agentActivityDays<t.retention.sandboxArtifactDays?`Agent activity retention must be at least as long as sandbox artifact retention.`:void 0;return n===void 0?{}:{error:n}})(),key:e,label:n,maximum:i,minimum:1,onChange:n=>l(`retention`,{...t.retention,[e]:n}),value:t.retention[e]}))}),(0,j.jsxs)(J,{description:`Records the threshold for investigation automation; investigation creation currently remains manual.`,title:`Investigation`,children:[(0,j.jsx)(Z,{disabled:r,label:`Mode`,onChange:e=>l(`investigation`,{...t.investigation,mode:e}),options:[[`manual`,`Manual`],[`automatic`,`Automatic`]],value:t.investigation.mode}),(0,j.jsx)(Q,{disabled:r,label:`Consecutive failure threshold`,maximum:20,minimum:1,onChange:e=>l(`investigation`,{...t.investigation,consecutiveFailureThreshold:e}),value:t.investigation.consecutiveFailureThreshold})]}),(0,j.jsxs)(J,{description:`Governed publishing defaults. Credentials and tokens never belong in workspace settings.`,title:`Jira`,children:[(0,j.jsx)(Z,{disabled:r,label:`Comment publishing`,onChange:e=>l(`jira`,{...t.jira,commentMode:e}),options:[[`manual-only`,`Manual only`],[`confirm-before-publish`,`Confirm before publishing`]],value:t.jira.commentMode}),(0,j.jsx)(X,{checked:t.jira.includeControlCenterAttribution,disabled:r,label:`Include Control Center attribution`,onChange:e=>l(`jira`,{...t.jira,includeControlCenterAttribution:e})})]}),(0,j.jsxs)(J,{description:`Governed retry defaults for pipeline operations.`,title:`Pipeline`,children:[(0,j.jsx)(Z,{disabled:r,label:`Retry behavior`,onChange:e=>l(`pipeline`,{...t.pipeline,retryMode:e}),options:[[`manual-only`,`Manual only`],[`confirm-before-retry`,`Confirm before retry`]],value:t.pipeline.retryMode}),(0,j.jsx)(Q,{disabled:r,label:`Maximum attempts`,maximum:10,minimum:1,onChange:e=>l(`pipeline`,{...t.pipeline,maximumAttempts:e}),value:t.pipeline.maximumAttempts})]}),(0,j.jsxs)(J,{description:`Choose which server-configured review runners this workspace may use. This does not install or authenticate a runner.`,title:`Agent`,children:[(0,j.jsx)(Y,{hint:`Comma-separated lowercase identifiers; saved in canonical order.`,label:`Allowed providers`,children:(0,j.jsx)(`input`,{className:L.control,disabled:r,onBlur:()=>o(i),onCompositionEnd:e=>{c.current=!1,u(e.currentTarget.value)},onCompositionStart:()=>{c.current=!0},onChange:e=>{let t=e.currentTarget.value;o(t),c.current||u(t)},type:`text`,value:a})}),(0,j.jsx)(Y,{label:`Default provider`,children:(0,j.jsx)(`input`,{className:L.control,disabled:r,list:`allowed-agent-providers`,onChange:e=>{let n=e.currentTarget.value.trim().toLowerCase()||null;l(`agent`,{...t.agent,defaultProvider:n,defaultModel:n===null?null:t.agent.defaultModel})},type:`text`,value:t.agent.defaultProvider??``})}),(0,j.jsx)(`datalist`,{id:`allowed-agent-providers`,children:t.agent.allowedProviders.map(e=>(0,j.jsx)(`option`,{value:e},e))}),(0,j.jsx)(Y,{label:`Default model`,children:(0,j.jsx)(`input`,{className:L.control,disabled:r||t.agent.defaultProvider===null,onChange:e=>l(`agent`,{...t.agent,defaultModel:e.currentTarget.value.trim()||null}),type:`text`,value:t.agent.defaultModel??``})}),(0,j.jsx)(Z,{disabled:r,label:`Tool policy`,onChange:e=>l(`agent`,{...t.agent,toolPolicy:e}),options:[[`read-only`,`Read only`],[`review-sandbox`,`Review sandbox, required for PR review`]],value:t.agent.toolPolicy}),(0,j.jsx)(Z,{disabled:r,label:`Profile policy`,onChange:e=>l(`agent`,{...t.agent,profilePolicy:e}),options:t.agent.profilePolicy===`local-profile`?[[`isolated`,`Isolated, required for PR review`],[`local-profile`,`Local profile (unsupported)`]]:[[`isolated`,`Isolated, required for PR review`]],value:t.agent.profilePolicy})]}),(0,j.jsxs)(J,{description:`Workspace presentation defaults shared by collaborators.`,title:`Presentation`,children:[(0,j.jsx)(Z,{disabled:r,label:`Density`,onChange:e=>l(`presentation`,{...t.presentation,density:e}),options:[[`comfortable`,`Comfortable`],[`compact`,`Compact`]],value:t.presentation.density}),(0,j.jsx)(Z,{disabled:r,label:`Default landing`,onChange:e=>l(`presentation`,{...t.presentation,defaultLanding:e}),options:[[`overview`,`Overview`],[`active-work`,`Active work`]],value:t.presentation.defaultLanding})]})]})},ne=({browserSessionTransport:e,transport:t=D}={})=>{let o=s(),c=n().workspaceId,p=o.state._tag===`authenticated`||o.state._tag===`storage-unavailable`?o.state.session:null,m=p===null||c===p.workspaceId,h=m?u(o.state):null,g=U(h,o.invalidateSession,t),_=l(),[v,b]=(0,O.useState)(!1),x=o.state._tag===`authenticated`&&p?.permission===`workspace-owner`;if(!m)return(0,j.jsx)(a,{description:`This route does not match the workspace authorized for the current browser session.`,title:`Workspace not found`,tone:`critical`});if(h===null&&o.state._tag!==`checking`){let e=o.state._tag===`anonymous`;return(0,j.jsx)(a,{description:e?`Sign in to inspect the settings authorized for this workspace.`:`The current browser session cannot read workspace settings.`,title:e?`Authentication required`:`Settings unavailable`,tone:e?`caution`:`critical`})}if(g.state._tag===`idle`||g.state._tag===`loading`)return(0,j.jsx)(a,{title:`Loading workspace settings`});if(g.state._tag===`failed`)return(0,j.jsx)(a,{action:(0,j.jsx)(i,{onClick:g.retry,children:`Retry`}),description:`The current settings document could not be loaded.`,title:`Settings unavailable`,tone:`critical`});if(g.state._tag===`conflict-recovery-failed`)return(0,j.jsx)(a,{action:(0,j.jsx)(i,{onClick:g.retryConflict,children:`Retry latest revision`}),description:`Your unsaved draft is retained, but the latest server revision could not be loaded.`,title:`Conflict recovery interrupted`,tone:`critical`});if(g.state._tag===`conflict-recovery-loading`)return(0,j.jsx)(a,{description:`Your unsaved draft is retained while the latest server revision is loaded.`,title:`Retrying conflict recovery`});if(g.state._tag===`conflict`)return(0,j.jsx)(`div`,{className:L.page,children:(0,j.jsx)(a,{action:(0,j.jsxs)(`div`,{className:L.actions,children:[(0,j.jsx)(i,{onClick:g.discardConflict,children:`Use latest`}),g.state.reapplyFailed?null:(0,j.jsx)(i,{onClick:g.reapplyConflict,variant:`primary`,children:`Reapply my changes`})]}),description:g.state.reapplyFailed?`Your changed fields cannot be combined safely with the latest settings. Use the latest document, then re-enter and review your changes.`:`Another session saved revision ${String(g.state.latest.revision)}. Choose the latest document or reapply only the fields you changed, then review and save.`,title:g.state.reapplyFailed?`Settings conflict needs manual recovery`:`Settings changed in another session`,tone:`caution`})});let{draft:T,server:E,status:k}=g.state,A=w(E.settings,T).filter(S),M=A.length>0,N=y(C)(T),P=T.agent.profilePolicy===`local-profile`;return(0,j.jsxs)(`div`,{className:L.page,children:[(0,j.jsxs)(`header`,{className:L.heading,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(f,{as:`h1`,variant:`page-title`,children:`Workspace settings`}),(0,j.jsxs)(f,{as:`p`,tone:`secondary`,children:[`Revision `,E.revision,`. Changes are protected against stale writes and attributable to the current session.`]})]}),(0,j.jsxs)(`div`,{className:L.save,children:[(0,j.jsx)(`span`,{"aria-live":`polite`,children:k===`saving`?`Saving…`:k===`failed`?`Save failed — retry when ready`:k===`dirty`?`Unsaved changes`:`Saved`}),(0,j.jsx)(i,{disabled:!x||k!==`dirty`&&k!==`failed`||!N||P,loading:k===`saving`,onClick:()=>M?b(!0):g.save(),variant:`primary`,children:`Save settings`})]})]}),x?null:(0,j.jsx)(f,{as:`p`,className:L.notice,tone:`secondary`,children:p?.permission===`workspace-approver`?`Approvers can inspect settings. A workspace owner must save changes.`:`A workspace-owner session with mutation storage is required to change settings.`}),x&&!N?(0,j.jsx)(f,{as:`p`,className:L.notice,tone:`secondary`,children:`Correct the highlighted bounds and policy relationships before saving. Audit retention must cover evidence, sandbox artifacts must expire before agent activity, and default agent providers must be allowed.`}):null,x&&P?(0,j.jsx)(f,{as:`p`,className:L.notice,tone:`secondary`,children:`Local profile is unavailable: no installed CLI capability generation proves that hooks, plugins, MCP servers, browser control, and extra writable roots are disabled. Compared with isolated mode, those surfaces would be added and must be verified before this governed policy can be saved.`}):null,(0,j.jsx)(r.Root,{onOpenChange:b,open:v,children:(0,j.jsx)(r.Content,{description:`Revision ${String(E.revision)} changes policy enforced for every workspace collaborator.`,title:`Review governed changes`,children:(0,j.jsxs)(`div`,{className:L.governance,children:[(0,j.jsx)(f,{as:`p`,children:`Confirm the exact policy changes:`}),(0,j.jsx)(`ul`,{children:A.map(e=>(0,j.jsxs)(`li`,{children:[(0,j.jsxs)(`strong`,{children:[e[0]?.toUpperCase(),e.slice(1)]}),(0,j.jsx)(`ul`,{children:ee(e,E.settings,T).map(e=>(0,j.jsxs)(`li`,{children:[e.label,`: `,e.before,` → `,e.after]},e.label))})]},e))}),(0,j.jsxs)(`div`,{className:L.actions,children:[(0,j.jsx)(r.Close,{children:`Cancel`}),(0,j.jsx)(r.Close,{onClick:g.save,children:`Save governed changes`})]})]})})}),p===null||h===null?null:(0,j.jsx)(I,{canManage:x,currentSession:p,onSessionExpired:o.invalidateSession,sessionKey:h,...e===void 0?{}:{transport:e}}),(0,j.jsxs)(d,{className:L.theme,padding:`default`,form:`grouped`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(f,{as:`h2`,variant:`section-title`,children:`Theme`}),(0,j.jsx)(f,{as:`p`,tone:`secondary`,children:`This preference is browser-local and is never sent to the server.`})]}),(0,j.jsxs)(`select`,{"aria-label":`Theme`,className:L.control,onChange:e=>{let t=e.currentTarget.value;(t===`dark`||t===`light`||t===`system`)&&_.setTheme(t)},value:_.theme,children:[(0,j.jsx)(`option`,{value:`system`,children:`System`}),(0,j.jsx)(`option`,{value:`light`,children:`Light`}),(0,j.jsx)(`option`,{value:`dark`,children:`Dark`})]})]}),(0,j.jsx)($,{canEdit:x&&k!==`saving`,draft:T,onChange:e=>{b(!1),g.edit(e)}})]})};export{$ as SettingsForm,ne as WorkspaceSettingsPage};
2
- //# sourceMappingURL=WorkspaceSettingsPage-CiQKaJv2.js.map
1
+ import{i as e,t}from"./react-DB-4Zxce.js";import{m as n}from"./hooks-D2zmMoSa.js";import{_ as r,f as i,r as a}from"./Dialog-CplGpe1F-DeMJtg-H.js";import{a as o,b as s,k as c,v as l,y as u}from"./index-fW9vMAFR.js";import{n as d,t as f}from"./primitives-BXWPLy2C-mP10m9L8.js";import{Ei as p,Hr as m,Ka as h,Si as g,Wr as _,Yr as v,er as y,mi as b}from"./agent-api-D_ViR39X.js";import{a as x,i as S,n as C,r as w,t as T}from"./client-DWkZYpso.js";import{t as E}from"./authenticatedMutationClient-D_5YP1Kc.js";import{browserWorkspaceSettingsTransport as D}from"./workspaceSettingsTransport-BFOjKgeP.js";var O=e(t(),1),k={panel:`_panel_lh4p3_1`,heading:`_heading_lh4p3_7`,pairing:`_pairing_lh4p3_8`,codeCard:`_codeCard_lh4p3_9`,session:`_session_lh4p3_10`,permission:`_permission_lh4p3_29`,code:`_code_lh4p3_9`,sessions:`_sessions_lh4p3_66`},A={issuePairingCode:(e,t)=>p(b(function*(){return yield*(yield*E).session.issueBrowserPairingCode({payload:{permission:e}})}).pipe(g(x)),{signal:t}),list:e=>p(b(function*(){return yield*(yield*T()).session.list()}).pipe(g(x)),{signal:e}),revoke:(e,t)=>p(b(function*(){yield*(yield*E).session.revoke({params:{sessionId:e}})}).pipe(g(x)),{signal:t})},j=c(),M=e=>e===`workspace-owner`?`Workspace owner`:e===`workspace-approver`?`Workspace approver`:e,N=(e,t=v())=>m(t,e.idleExpiresAt)>=0||m(t,e.absoluteExpiresAt)>=0,P=(e,t=v())=>e.revokedAt===null?N(e,t)?`Expired · last used ${_(e.lastSeenAt)}`:`Active · last used ${_(e.lastSeenAt)}`:`Revoked ${_(e.revokedAt)}`,F=async e=>{try{return await navigator.clipboard.writeText(e),!0}catch{return!1}},I=({canManage:e,currentSession:t,onSessionExpired:n,sessionKey:r,transport:a=A})=>{let[o,s]=(0,O.useState)({_tag:`loading`}),[c,l]=(0,O.useState)(`workspace-owner`),[u,p]=(0,O.useState)(null),[m,g]=(0,O.useState)(`idle`),[v,y]=(0,O.useState)(!1),[b,x]=(0,O.useState)(null),S=(0,O.useCallback)(e=>{s({_tag:`loading`}),a.list(e).then(e=>s({_tag:`ready`,sessions:e}),t=>{e.aborted||(h(`UnauthorizedApiError`)(t)&&n(r),s({_tag:`failed`}))})},[n,r,a]);(0,O.useEffect)(()=>{let e=new AbortController;return S(e.signal),()=>e.abort()},[S]);let C=()=>{let e=new AbortController;g(`issuing`),p(null),y(!1),a.issuePairingCode(c,e.signal).then(e=>{p(e),g(`idle`)},e=>{h(`UnauthorizedApiError`)(e)&&n(r),g(`failed`)})},w=e=>{let t=new AbortController;x(e),a.revoke(e,t.signal).then(()=>{x(null),p(null),S(new AbortController().signal)},e=>{h(`UnauthorizedApiError`)(e)&&n(r),x(null)})};return(0,j.jsxs)(d,{as:`section`,className:k.panel,padding:`default`,form:`grouped`,children:[(0,j.jsxs)(`div`,{className:k.heading,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(f,{as:`h2`,variant:`section-title`,children:`Browsers`}),(0,j.jsx)(f,{as:`p`,tone:`secondary`,children:`Pair more browsers with a single-use code. Every browser gets its own session and can be revoked independently.`})]}),o._tag===`failed`?(0,j.jsx)(i,{onClick:()=>S(new AbortController().signal),children:`Retry`}):null]}),e?(0,j.jsxs)(`div`,{className:k.pairing,children:[(0,j.jsxs)(`label`,{className:k.permission,children:[(0,j.jsx)(`span`,{children:`New browser access`}),(0,j.jsxs)(`select`,{disabled:m===`issuing`,onChange:e=>{let t=e.currentTarget.value;(t===`workspace-owner`||t===`workspace-approver`)&&l(t)},value:c,children:[(0,j.jsx)(`option`,{value:`workspace-owner`,children:`Workspace owner`}),(0,j.jsx)(`option`,{value:`workspace-approver`,children:`Workspace approver`})]})]}),(0,j.jsx)(i,{loading:m===`issuing`,onClick:C,variant:`primary`,children:`Add browser`})]}):(0,j.jsx)(f,{as:`p`,tone:`secondary`,children:`A workspace owner can add or revoke browsers.`}),m===`failed`?(0,j.jsx)(f,{as:`p`,role:`alert`,tone:`secondary`,children:`The pairing code could not be created. Try again.`}):null,u===null?null:(0,j.jsxs)(`div`,{className:k.codeCard,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(f,{as:`h3`,variant:`label`,children:`Pairing code`}),(0,j.jsxs)(f,{as:`p`,tone:`secondary`,children:[`In the other browser, open `,(0,j.jsx)(`strong`,{children:`/pair`}),` and paste this code before`,` `,_(u.expiresAt),`.`]})]}),(0,j.jsx)(`code`,{className:k.code,children:u.pairingCode}),(0,j.jsx)(i,{onClick:()=>{F(u.pairingCode).then(y)},children:v?`Copied`:`Copy code`})]}),(0,j.jsx)(`div`,{className:k.sessions,"aria-live":`polite`,children:o._tag===`loading`?(0,j.jsx)(f,{as:`p`,tone:`secondary`,children:`Loading paired browsers…`}):o._tag===`failed`?(0,j.jsx)(f,{as:`p`,tone:`secondary`,children:`Paired browsers could not be loaded.`}):o.sessions.map(n=>{let r=n.sessionId===t.sessionId;return(0,j.jsxs)(`article`,{className:k.session,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(f,{as:`h3`,variant:`label`,children:[M(n.permission),r?` · This browser`:``]}),(0,j.jsx)(f,{as:`p`,tone:`secondary`,children:P(n)})]}),e&&!r&&n.revokedAt===null&&!N(n)?(0,j.jsx)(i,{loading:b===n.sessionId,onClick:()=>w(n.sessionId),children:`Revoke`}):null]},n.sessionId)})})]})},L={page:`_page_1cf73_1`,heading:`_heading_1cf73_9`,theme:`_theme_1cf73_10`,save:`_save_1cf73_11`,actions:`_actions_1cf73_12`,notice:`_notice_1cf73_34`,governance:`_governance_1cf73_39`,sections:`_sections_1cf73_47`,section:`_section_1cf73_47`,sectionHeading:`_sectionHeading_1cf73_60`,fields:`_fields_1cf73_61`,field:`_field_1cf73_61`,checkbox:`_checkbox_1cf73_79`,control:`_control_1cf73_92`},R=h(`ConflictApiError`),z=h(`UnauthorizedApiError`),B=(e,t,n,r=Object.is)=>r(e,t)?n:t,V=(e,t)=>e.length===t.length&&e.every((e,n)=>e===t[n]),H=(e,t,n)=>{let r={schemaVersion:1,agent:{allowedProviders:B(e.agent.allowedProviders,t.agent.allowedProviders,n.agent.allowedProviders,V),defaultModel:B(e.agent.defaultModel,t.agent.defaultModel,n.agent.defaultModel),defaultProvider:B(e.agent.defaultProvider,t.agent.defaultProvider,n.agent.defaultProvider),profilePolicy:B(e.agent.profilePolicy,t.agent.profilePolicy,n.agent.profilePolicy),toolPolicy:B(e.agent.toolPolicy,t.agent.toolPolicy,n.agent.toolPolicy)},inference:{enabled:B(e.inference.enabled,t.inference.enabled,n.inference.enabled),minimumConfidencePercent:B(e.inference.minimumConfidencePercent,t.inference.minimumConfidencePercent,n.inference.minimumConfidencePercent)},investigation:{consecutiveFailureThreshold:B(e.investigation.consecutiveFailureThreshold,t.investigation.consecutiveFailureThreshold,n.investigation.consecutiveFailureThreshold),mode:B(e.investigation.mode,t.investigation.mode,n.investigation.mode)},jira:{commentMode:B(e.jira.commentMode,t.jira.commentMode,n.jira.commentMode),includeControlCenterAttribution:B(e.jira.includeControlCenterAttribution,t.jira.includeControlCenterAttribution,n.jira.includeControlCenterAttribution)},pipeline:{maximumAttempts:B(e.pipeline.maximumAttempts,t.pipeline.maximumAttempts,n.pipeline.maximumAttempts),retryMode:B(e.pipeline.retryMode,t.pipeline.retryMode,n.pipeline.retryMode)},presentation:{defaultLanding:B(e.presentation.defaultLanding,t.presentation.defaultLanding,n.presentation.defaultLanding),density:B(e.presentation.density,t.presentation.density,n.presentation.density)},retention:{agentActivityDays:B(e.retention.agentActivityDays,t.retention.agentActivityDays,n.retention.agentActivityDays),auditDays:B(e.retention.auditDays,t.retention.auditDays,n.retention.auditDays),contentDays:B(e.retention.contentDays,t.retention.contentDays,n.retention.contentDays),evidenceDays:B(e.retention.evidenceDays,t.retention.evidenceDays,n.retention.evidenceDays),sandboxArtifactDays:B(e.retention.sandboxArtifactDays,t.retention.sandboxArtifactDays,n.retention.sandboxArtifactDays)},synchronization:{cadence:B(e.synchronization.cadence,t.synchronization.cadence,n.synchronization.cadence),intervalMinutes:B(e.synchronization.intervalMinutes,t.synchronization.intervalMinutes,n.synchronization.intervalMinutes),staleAfterMinutes:B(e.synchronization.staleAfterMinutes,t.synchronization.staleAfterMinutes,n.synchronization.staleAfterMinutes)}};return y(C)(r)?r:null},U=(e,t,n=D)=>{let[r,i]=(0,O.useState)({_tag:`idle`}),a=(0,O.useRef)(r),[s,c]=(0,O.useState)(0),l=(0,O.useRef)(null),u=(0,O.useCallback)(e=>{a.current=e,i(e)},[]);(0,O.useEffect)(()=>{if(l.current?.abort(),e===null){u({_tag:`idle`});return}let r=new AbortController;return l.current=r,u({_tag:`loading`}),n.load(r.signal).then(e=>{r.signal.aborted||(o(e),u({_tag:`ready`,draft:e.settings,pendingMutationId:null,server:e,status:`saved`}))},n=>{r.signal.aborted||(z(n)&&t(e),u({_tag:`failed`}))}),()=>r.abort()},[t,s,e,u,n]);let d=(0,O.useCallback)(e=>{let t=a.current;t._tag===`ready`&&t.status!==`saving`&&u({...t,draft:e,pendingMutationId:null,status:w(t.server.settings,e).length===0?`saved`:`dirty`})},[u]),f=(0,O.useCallback)(()=>{if(e===null)return;let r=a.current;if(r._tag!==`ready`||r.status!==`dirty`&&r.status!==`failed`)return;let i=new AbortController;l.current?.abort(),l.current=i;let s=r.server,c=r.draft,d=w(s.settings,c).filter(S);u({...r,status:`saving`}),(r.pendingMutationId===null?n.makeMutationId():Promise.resolve(r.pendingMutationId)).then(r=>{n.update({mutationId:r,expectedRevision:s.revision,settings:c,acknowledgedGovernedSections:d},i.signal).then(e=>{i.signal.aborted||(o(e),u({_tag:`ready`,draft:e.settings,pendingMutationId:null,server:e,status:`saved`}))},a=>{if(!i.signal.aborted){if(z(a)){t(e),u({_tag:`failed`});return}if(!R(a)){u({_tag:`ready`,draft:c,pendingMutationId:r,server:s,status:`failed`});return}n.load(i.signal).then(e=>{i.signal.aborted||(o(e),u({_tag:`conflict`,base:s,candidate:c,latest:e,reapplyFailed:!1}))},n=>{if(!i.signal.aborted){if(z(n)){t(e),u({_tag:`failed`});return}u({_tag:`conflict-recovery-failed`,base:s,candidate:c})}})}})},()=>{i.signal.aborted||u({_tag:`ready`,draft:c,pendingMutationId:null,server:s,status:`failed`})})},[t,e,u,n]);return{discardConflict:(0,O.useCallback)(()=>{let e=a.current;e._tag===`conflict`&&u({_tag:`ready`,draft:e.latest.settings,pendingMutationId:null,server:e.latest,status:`saved`})},[u]),edit:d,reapplyConflict:(0,O.useCallback)(()=>{let e=a.current;if(e._tag!==`conflict`)return;let t=H(e.base.settings,e.candidate,e.latest.settings);if(t===null){u({...e,reapplyFailed:!0});return}u({_tag:`ready`,draft:t,pendingMutationId:null,server:e.latest,status:w(e.latest.settings,t).length===0?`saved`:`dirty`})},[u]),retry:()=>c(e=>e+1),retryConflict:(0,O.useCallback)(()=>{let r=a.current;if(r._tag!==`conflict-recovery-failed`)return;let i=new AbortController;l.current?.abort(),l.current=i;let{base:s,candidate:c}=r;u({_tag:`conflict-recovery-loading`,base:s,candidate:c}),n.load(i.signal).then(e=>{i.signal.aborted||(o(e),u({_tag:`conflict`,base:s,candidate:c,latest:e,reapplyFailed:!1}))},n=>{if(!i.signal.aborted){if(e!==null&&z(n)){t(e),u({_tag:`failed`});return}u({_tag:`conflict-recovery-failed`,base:s,candidate:c})}})},[t,e,u,n]),save:f,state:r}},W=(e,t)=>{let n=Number.parseInt(e.currentTarget.value,10);return Number.isNaN(n)?t:n},G=e=>[...new Set(e.split(`,`).map(e=>e.trim().toLowerCase()).filter(e=>e.length>0))].sort(),K=e=>e===null?`Not set`:e===!0?`Enabled`:e===!1?`Disabled`:String(e),q=(e,t,n)=>t===n?[]:[{after:K(n),before:K(t),label:e}],ee=(e,t,n)=>{switch(e){case`agent`:return[...q(`Allowed providers`,t.agent.allowedProviders.join(`, `),n.agent.allowedProviders.join(`, `)),...q(`Default provider`,t.agent.defaultProvider,n.agent.defaultProvider),...q(`Default model`,t.agent.defaultModel,n.agent.defaultModel),...q(`Tool access`,t.agent.toolPolicy,n.agent.toolPolicy),...q(`Runtime isolation`,t.agent.profilePolicy,n.agent.profilePolicy)];case`jira`:return[...q(`Comment publishing`,t.jira.commentMode,n.jira.commentMode),...q(`Control Center attribution`,t.jira.includeControlCenterAttribution,n.jira.includeControlCenterAttribution)];case`pipeline`:return[...q(`Retry policy`,t.pipeline.retryMode,n.pipeline.retryMode),...q(`Maximum attempts`,t.pipeline.maximumAttempts,n.pipeline.maximumAttempts)];case`retention`:return[...q(`Evidence (days)`,t.retention.evidenceDays,n.retention.evidenceDays),...q(`Content (days)`,t.retention.contentDays,n.retention.contentDays),...q(`Audit history (days)`,t.retention.auditDays,n.retention.auditDays),...q(`Agent activity (days)`,t.retention.agentActivityDays,n.retention.agentActivityDays),...q(`Sandbox artifacts (days)`,t.retention.sandboxArtifactDays,n.retention.sandboxArtifactDays)]}},J=({children:e,description:t,title:n})=>(0,j.jsxs)(d,{className:L.section,padding:`default`,form:`grouped`,children:[(0,j.jsxs)(`div`,{className:L.sectionHeading,children:[(0,j.jsx)(f,{as:`h2`,variant:`section-title`,children:n}),(0,j.jsx)(f,{as:`p`,tone:`secondary`,children:t})]}),(0,j.jsx)(`div`,{className:L.fields,children:e})]}),Y=({children:e,controlId:t,error:n,hint:r,label:i})=>(0,j.jsxs)(`label`,{className:L.field,htmlFor:t,children:[(0,j.jsx)(`span`,{children:i}),e,r===void 0?null:(0,j.jsx)(`small`,{children:r}),n===void 0?null:(0,j.jsx)(`small`,{id:t===void 0?void 0:`${t}-error`,role:`alert`,children:n})]}),X=({checked:e,disabled:t,label:n,onChange:r})=>(0,j.jsxs)(`label`,{className:L.checkbox,children:[(0,j.jsx)(`input`,{checked:e,disabled:t,onChange:e=>r(e.currentTarget.checked),type:`checkbox`}),(0,j.jsx)(`span`,{children:n})]}),Z=({disabled:e,label:t,onChange:n,options:r,value:i})=>(0,j.jsx)(Y,{label:t,children:(0,j.jsx)(`select`,{className:L.control,disabled:e,onChange:e=>{let t=r.find(([t])=>t===e.currentTarget.value);t!==void 0&&n(t[0])},value:i,children:r.map(([e,t])=>(0,j.jsx)(`option`,{value:e,children:t},e))})}),te=[[`evidenceDays`,`Evidence (days)`,3650],[`contentDays`,`Content (days)`,3650],[`auditDays`,`Audit history (days)`,3650],[`agentActivityDays`,`Agent activity (days)`,365],[`sandboxArtifactDays`,`Sandbox artifacts (days)`,30]],Q=({disabled:e,error:t,label:n,maximum:r,minimum:i,onChange:a,value:o})=>{let s=(0,O.useId)(),c=t??(!Number.isInteger(o)||o<i||o>r?`${n} must be a whole number from ${String(i)} to ${String(r)}.`:void 0);return(0,j.jsx)(Y,{controlId:s,...c===void 0?{}:{error:c},label:n,children:(0,j.jsx)(`input`,{"aria-describedby":c===void 0?void 0:`${s}-error`,"aria-invalid":c!==void 0||void 0,className:L.control,disabled:e,id:s,max:r,min:i,onChange:e=>a(W(e,o)),type:`number`,value:o})})},$=({canEdit:e,draft:t,onChange:n})=>{let r=!e,i=t.agent.allowedProviders.join(`, `),[a,o]=(0,O.useState)(i),s=(0,O.useRef)(i),c=(0,O.useRef)(!1),l=(e,r)=>n({...t,[e]:r}),u=e=>{let n=G(e);s.current=n.join(`, `),l(`agent`,{...t.agent,allowedProviders:n,defaultProvider:t.agent.defaultProvider!==null&&n.includes(t.agent.defaultProvider)?t.agent.defaultProvider:null,defaultModel:t.agent.defaultProvider!==null&&n.includes(t.agent.defaultProvider)?t.agent.defaultModel:null})};return(0,O.useEffect)(()=>{i!==s.current&&o(i),s.current=i},[i]),(0,j.jsxs)(`div`,{className:L.sections,children:[(0,j.jsxs)(J,{description:`Controls whether inferred delivery relationships are proposed and the confidence floor.`,title:`Inference`,children:[(0,j.jsx)(X,{checked:t.inference.enabled,disabled:r,label:`Enable relationship inference`,onChange:e=>l(`inference`,{...t.inference,enabled:e})}),(0,j.jsx)(Q,{disabled:r,label:`Minimum confidence (%)`,maximum:100,minimum:0,onChange:e=>l(`inference`,{...t.inference,minimumConfidencePercent:e}),value:t.inference.minimumConfidencePercent})]}),(0,j.jsxs)(J,{description:`Records the intended synchronization cadence; Sync now remains the active execution path. Also sets the age at which source data is stale.`,title:`Synchronization`,children:[(0,j.jsx)(Z,{disabled:r,label:`Cadence`,onChange:e=>l(`synchronization`,{...t.synchronization,cadence:e,intervalMinutes:e===`manual`?null:t.synchronization.intervalMinutes??60}),options:[[`manual`,`Manual`],[`interval`,`Scheduled interval`]],value:t.synchronization.cadence}),t.synchronization.intervalMinutes===null?null:(0,j.jsx)(Q,{disabled:r,label:`Interval (minutes)`,maximum:10080,minimum:5,onChange:e=>l(`synchronization`,{...t.synchronization,intervalMinutes:e}),value:t.synchronization.intervalMinutes}),(0,j.jsx)(Q,{disabled:r,label:`Stale after (minutes)`,maximum:43200,minimum:5,onChange:e=>l(`synchronization`,{...t.synchronization,staleAfterMinutes:e}),value:t.synchronization.staleAfterMinutes})]}),(0,j.jsx)(J,{description:`Governed lifecycle policy. Evidence expiry applies to new materialization; bounded final-class sweeps run through lifecycle operations.`,title:`Retention`,children:te.map(([e,n,i])=>(0,O.createElement)(Q,{disabled:r,...(()=>{let n=(e===`evidenceDays`||e===`auditDays`)&&t.retention.auditDays<t.retention.evidenceDays?`Audit retention must be at least as long as evidence retention.`:(e===`agentActivityDays`||e===`sandboxArtifactDays`)&&t.retention.agentActivityDays<t.retention.sandboxArtifactDays?`Agent activity retention must be at least as long as sandbox artifact retention.`:void 0;return n===void 0?{}:{error:n}})(),key:e,label:n,maximum:i,minimum:1,onChange:n=>l(`retention`,{...t.retention,[e]:n}),value:t.retention[e]}))}),(0,j.jsxs)(J,{description:`Records the threshold for investigation automation; investigation creation currently remains manual.`,title:`Investigation`,children:[(0,j.jsx)(Z,{disabled:r,label:`Mode`,onChange:e=>l(`investigation`,{...t.investigation,mode:e}),options:[[`manual`,`Manual`],[`automatic`,`Automatic`]],value:t.investigation.mode}),(0,j.jsx)(Q,{disabled:r,label:`Consecutive failure threshold`,maximum:20,minimum:1,onChange:e=>l(`investigation`,{...t.investigation,consecutiveFailureThreshold:e}),value:t.investigation.consecutiveFailureThreshold})]}),(0,j.jsxs)(J,{description:`Governed publishing defaults. Credentials and tokens never belong in workspace settings.`,title:`Jira`,children:[(0,j.jsx)(Z,{disabled:r,label:`Comment publishing`,onChange:e=>l(`jira`,{...t.jira,commentMode:e}),options:[[`manual-only`,`Manual only`],[`confirm-before-publish`,`Confirm before publishing`]],value:t.jira.commentMode}),(0,j.jsx)(X,{checked:t.jira.includeControlCenterAttribution,disabled:r,label:`Include Control Center attribution`,onChange:e=>l(`jira`,{...t.jira,includeControlCenterAttribution:e})})]}),(0,j.jsxs)(J,{description:`Governed retry defaults for pipeline operations.`,title:`Pipeline`,children:[(0,j.jsx)(Z,{disabled:r,label:`Retry behavior`,onChange:e=>l(`pipeline`,{...t.pipeline,retryMode:e}),options:[[`manual-only`,`Manual only`],[`confirm-before-retry`,`Confirm before retry`]],value:t.pipeline.retryMode}),(0,j.jsx)(Q,{disabled:r,label:`Maximum attempts`,maximum:10,minimum:1,onChange:e=>l(`pipeline`,{...t.pipeline,maximumAttempts:e}),value:t.pipeline.maximumAttempts})]}),(0,j.jsxs)(J,{description:`Choose which server-configured review runners this workspace may use. This does not install or authenticate a runner.`,title:`Agent`,children:[(0,j.jsx)(Y,{hint:`Comma-separated lowercase identifiers; saved in canonical order.`,label:`Allowed providers`,children:(0,j.jsx)(`input`,{className:L.control,disabled:r,onBlur:()=>o(i),onCompositionEnd:e=>{c.current=!1,u(e.currentTarget.value)},onCompositionStart:()=>{c.current=!0},onChange:e=>{let t=e.currentTarget.value;o(t),c.current||u(t)},type:`text`,value:a})}),(0,j.jsx)(Y,{label:`Default provider`,children:(0,j.jsx)(`input`,{className:L.control,disabled:r,list:`allowed-agent-providers`,onChange:e=>{let n=e.currentTarget.value.trim().toLowerCase()||null;l(`agent`,{...t.agent,defaultProvider:n,defaultModel:n===null?null:t.agent.defaultModel})},type:`text`,value:t.agent.defaultProvider??``})}),(0,j.jsx)(`datalist`,{id:`allowed-agent-providers`,children:t.agent.allowedProviders.map(e=>(0,j.jsx)(`option`,{value:e},e))}),(0,j.jsx)(Y,{label:`Default model`,children:(0,j.jsx)(`input`,{className:L.control,disabled:r||t.agent.defaultProvider===null,onChange:e=>l(`agent`,{...t.agent,defaultModel:e.currentTarget.value.trim()||null}),type:`text`,value:t.agent.defaultModel??``})}),(0,j.jsx)(Z,{disabled:r,label:`Tool policy`,onChange:e=>l(`agent`,{...t.agent,toolPolicy:e}),options:[[`read-only`,`Read only`],[`review-sandbox`,`Review sandbox, required for PR review`]],value:t.agent.toolPolicy}),(0,j.jsx)(Z,{disabled:r,label:`Profile policy`,onChange:e=>l(`agent`,{...t.agent,profilePolicy:e}),options:t.agent.profilePolicy===`local-profile`?[[`isolated`,`Isolated, required for PR review`],[`local-profile`,`Local profile (unsupported)`]]:[[`isolated`,`Isolated, required for PR review`]],value:t.agent.profilePolicy})]}),(0,j.jsxs)(J,{description:`Workspace presentation defaults shared by collaborators.`,title:`Presentation`,children:[(0,j.jsx)(Z,{disabled:r,label:`Density`,onChange:e=>l(`presentation`,{...t.presentation,density:e}),options:[[`comfortable`,`Comfortable`],[`compact`,`Compact`]],value:t.presentation.density}),(0,j.jsx)(Z,{disabled:r,label:`Default landing`,onChange:e=>l(`presentation`,{...t.presentation,defaultLanding:e}),options:[[`overview`,`Overview`],[`active-work`,`Active work`]],value:t.presentation.defaultLanding})]})]})},ne=({browserSessionTransport:e,transport:t=D}={})=>{let o=s(),c=n().workspaceId,p=o.state._tag===`authenticated`||o.state._tag===`storage-unavailable`?o.state.session:null,m=p===null||c===p.workspaceId,h=m?u(o.state):null,g=U(h,o.invalidateSession,t),_=l(),[v,b]=(0,O.useState)(!1),x=o.state._tag===`authenticated`&&p?.permission===`workspace-owner`;if(!m)return(0,j.jsx)(a,{description:`This route does not match the workspace authorized for the current browser session.`,title:`Workspace not found`,tone:`critical`});if(h===null&&o.state._tag!==`checking`){let e=o.state._tag===`anonymous`;return(0,j.jsx)(a,{description:e?`Sign in to inspect the settings authorized for this workspace.`:`The current browser session cannot read workspace settings.`,title:e?`Authentication required`:`Settings unavailable`,tone:e?`caution`:`critical`})}if(g.state._tag===`idle`||g.state._tag===`loading`)return(0,j.jsx)(a,{title:`Loading workspace settings`});if(g.state._tag===`failed`)return(0,j.jsx)(a,{action:(0,j.jsx)(i,{onClick:g.retry,children:`Retry`}),description:`The current settings document could not be loaded.`,title:`Settings unavailable`,tone:`critical`});if(g.state._tag===`conflict-recovery-failed`)return(0,j.jsx)(a,{action:(0,j.jsx)(i,{onClick:g.retryConflict,children:`Retry latest revision`}),description:`Your unsaved draft is retained, but the latest server revision could not be loaded.`,title:`Conflict recovery interrupted`,tone:`critical`});if(g.state._tag===`conflict-recovery-loading`)return(0,j.jsx)(a,{description:`Your unsaved draft is retained while the latest server revision is loaded.`,title:`Retrying conflict recovery`});if(g.state._tag===`conflict`)return(0,j.jsx)(`div`,{className:L.page,children:(0,j.jsx)(a,{action:(0,j.jsxs)(`div`,{className:L.actions,children:[(0,j.jsx)(i,{onClick:g.discardConflict,children:`Use latest`}),g.state.reapplyFailed?null:(0,j.jsx)(i,{onClick:g.reapplyConflict,variant:`primary`,children:`Reapply my changes`})]}),description:g.state.reapplyFailed?`Your changed fields cannot be combined safely with the latest settings. Use the latest document, then re-enter and review your changes.`:`Another session saved revision ${String(g.state.latest.revision)}. Choose the latest document or reapply only the fields you changed, then review and save.`,title:g.state.reapplyFailed?`Settings conflict needs manual recovery`:`Settings changed in another session`,tone:`caution`})});let{draft:T,server:E,status:k}=g.state,A=w(E.settings,T).filter(S),M=A.length>0,N=y(C)(T),P=T.agent.profilePolicy===`local-profile`;return(0,j.jsxs)(`div`,{className:L.page,children:[(0,j.jsxs)(`header`,{className:L.heading,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(f,{as:`h1`,variant:`page-title`,children:`Workspace settings`}),(0,j.jsxs)(f,{as:`p`,tone:`secondary`,children:[`Revision `,E.revision,`. Changes are protected against stale writes and attributable to the current session.`]})]}),(0,j.jsxs)(`div`,{className:L.save,children:[(0,j.jsx)(`span`,{"aria-live":`polite`,children:k===`saving`?`Saving…`:k===`failed`?`Save failed — retry when ready`:k===`dirty`?`Unsaved changes`:`Saved`}),(0,j.jsx)(i,{disabled:!x||k!==`dirty`&&k!==`failed`||!N||P,loading:k===`saving`,onClick:()=>M?b(!0):g.save(),variant:`primary`,children:`Save settings`})]})]}),x?null:(0,j.jsx)(f,{as:`p`,className:L.notice,tone:`secondary`,children:p?.permission===`workspace-approver`?`Approvers can inspect settings. A workspace owner must save changes.`:`A workspace-owner session with mutation storage is required to change settings.`}),x&&!N?(0,j.jsx)(f,{as:`p`,className:L.notice,tone:`secondary`,children:`Correct the highlighted bounds and policy relationships before saving. Audit retention must cover evidence, sandbox artifacts must expire before agent activity, and default agent providers must be allowed.`}):null,x&&P?(0,j.jsx)(f,{as:`p`,className:L.notice,tone:`secondary`,children:`Local profile is unavailable: no installed CLI capability generation proves that hooks, plugins, MCP servers, browser control, and extra writable roots are disabled. Compared with isolated mode, those surfaces would be added and must be verified before this governed policy can be saved.`}):null,(0,j.jsx)(r.Root,{onOpenChange:b,open:v,children:(0,j.jsx)(r.Content,{description:`Revision ${String(E.revision)} changes policy enforced for every workspace collaborator.`,title:`Review governed changes`,children:(0,j.jsxs)(`div`,{className:L.governance,children:[(0,j.jsx)(f,{as:`p`,children:`Confirm the exact policy changes:`}),(0,j.jsx)(`ul`,{children:A.map(e=>(0,j.jsxs)(`li`,{children:[(0,j.jsxs)(`strong`,{children:[e[0]?.toUpperCase(),e.slice(1)]}),(0,j.jsx)(`ul`,{children:ee(e,E.settings,T).map(e=>(0,j.jsxs)(`li`,{children:[e.label,`: `,e.before,` → `,e.after]},e.label))})]},e))}),(0,j.jsxs)(`div`,{className:L.actions,children:[(0,j.jsx)(r.Close,{children:`Cancel`}),(0,j.jsx)(r.Close,{onClick:g.save,children:`Save governed changes`})]})]})})}),p===null||h===null?null:(0,j.jsx)(I,{canManage:x,currentSession:p,onSessionExpired:o.invalidateSession,sessionKey:h,...e===void 0?{}:{transport:e}}),(0,j.jsxs)(d,{className:L.theme,padding:`default`,form:`grouped`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(f,{as:`h2`,variant:`section-title`,children:`Theme`}),(0,j.jsx)(f,{as:`p`,tone:`secondary`,children:`This preference is browser-local and is never sent to the server.`})]}),(0,j.jsxs)(`select`,{"aria-label":`Theme`,className:L.control,onChange:e=>{let t=e.currentTarget.value;(t===`dark`||t===`light`||t===`system`)&&_.setTheme(t)},value:_.theme,children:[(0,j.jsx)(`option`,{value:`system`,children:`System`}),(0,j.jsx)(`option`,{value:`light`,children:`Light`}),(0,j.jsx)(`option`,{value:`dark`,children:`Dark`})]})]}),(0,j.jsx)($,{canEdit:x&&k!==`saving`,draft:T,onChange:e=>{b(!1),g.edit(e)}})]})};export{$ as SettingsForm,ne as WorkspaceSettingsPage};
2
+ //# sourceMappingURL=WorkspaceSettingsPage-CiVpUW2n.js.map