@pb33f/cowboy-components 0.14.1 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/dist/{_baseUniq-CcG8uZM_.js → _baseUniq-DkvmJCFv.js} +1 -1
  2. package/dist/{_baseUniq-Co8RB71y.cjs → _baseUniq-FTe2FRsZ.cjs} +1 -1
  3. package/dist/{arc-CZ9OyfV-.js → arc-CYzOnlSi.js} +2 -2
  4. package/dist/{arc-D5LG9aVl.cjs → arc-tHE-eDC1.cjs} +1 -1
  5. package/dist/{architecture-YZFGNWBL-ne59NWt0.js → architecture-YZFGNWBL-CHrkvOqY.js} +1 -1
  6. package/dist/{architecture-YZFGNWBL-CuyaOcgJ.cjs → architecture-YZFGNWBL-CoFOgOkv.cjs} +1 -1
  7. package/dist/{architectureDiagram-Q4EWVU46-CxErVIKm.cjs → architectureDiagram-Q4EWVU46-BNgO6IDb.cjs} +1 -1
  8. package/dist/{architectureDiagram-Q4EWVU46-ibaXfmmT.js → architectureDiagram-Q4EWVU46-BlVPlre4.js} +4 -4
  9. package/dist/{blockDiagram-DXYQGD6D-D5vqojm8.js → blockDiagram-DXYQGD6D-CmuWyVpp.js} +6 -6
  10. package/dist/{blockDiagram-DXYQGD6D-iFIpSW7Y.cjs → blockDiagram-DXYQGD6D-DTH4brTo.cjs} +1 -1
  11. package/dist/{c4Diagram-AHTNJAMY-B7t5p6jA.js → c4Diagram-AHTNJAMY-Bd457Kk0.js} +2 -2
  12. package/dist/{c4Diagram-AHTNJAMY-Av_INk2v.cjs → c4Diagram-AHTNJAMY-D4IMO6iJ.cjs} +1 -1
  13. package/dist/{change-list-item-Bu_mPv-k.js → change-list-item-BRSBlaLu.js} +348 -350
  14. package/dist/{change-list-item-4xBSo3-U.cjs → change-list-item-Dy1GNFQ8.cjs} +91 -91
  15. package/dist/{channel-DO31wbvk.cjs → channel-Ct_j6JZf.cjs} +1 -1
  16. package/dist/{channel-BvR-WhLo.js → channel-rcMAVtNO.js} +1 -1
  17. package/dist/{chunk-4BX2VUAB-DHdTrTTD.cjs → chunk-4BX2VUAB-D4UkiLWV.cjs} +1 -1
  18. package/dist/{chunk-4BX2VUAB-DQ4rU_AZ.js → chunk-4BX2VUAB-XJuJGw_Z.js} +1 -1
  19. package/dist/{chunk-4TB4RGXK-BlskfrH8.cjs → chunk-4TB4RGXK-BxahB5gv.cjs} +1 -1
  20. package/dist/{chunk-4TB4RGXK-BK_uuzSP.js → chunk-4TB4RGXK-CnipwGVI.js} +5 -5
  21. package/dist/{chunk-55IACEB6-CRJ5yCrP.cjs → chunk-55IACEB6-CEDZ87Yr.cjs} +1 -1
  22. package/dist/{chunk-55IACEB6-BauZDeFH.js → chunk-55IACEB6-D2v5xo07.js} +1 -1
  23. package/dist/{chunk-EDXVE4YY-BrlRuHp3.cjs → chunk-EDXVE4YY-CP7pBxXD.cjs} +1 -1
  24. package/dist/{chunk-EDXVE4YY-DPpXfrr8.js → chunk-EDXVE4YY-DtZEtPNM.js} +1 -1
  25. package/dist/{chunk-FMBD7UC4-CtyzUnzx.js → chunk-FMBD7UC4-B2FUllsE.js} +1 -1
  26. package/dist/{chunk-FMBD7UC4-0x38b8wg.cjs → chunk-FMBD7UC4-slHNYrdA.cjs} +1 -1
  27. package/dist/{chunk-OYMX7WX6-U53KZXxw.js → chunk-OYMX7WX6-Cx27mmAN.js} +3 -3
  28. package/dist/{chunk-OYMX7WX6-DU4Zqa7r.cjs → chunk-OYMX7WX6-j5BWPw4q.cjs} +1 -1
  29. package/dist/{chunk-QZHKN3VN-Dyhr8mWm.cjs → chunk-QZHKN3VN-CfbDcaIZ.cjs} +1 -1
  30. package/dist/{chunk-QZHKN3VN-BhntY1rB.js → chunk-QZHKN3VN-CxT_HDdj.js} +1 -1
  31. package/dist/{chunk-YZCP3GAM-B_2rYHHe.cjs → chunk-YZCP3GAM-C2IM6BuV.cjs} +1 -1
  32. package/dist/{chunk-YZCP3GAM--UtgfYoK.js → chunk-YZCP3GAM-DpgFVAJS.js} +1 -1
  33. package/dist/{classDiagram-6PBFFD2Q-w916JDya.cjs → classDiagram-6PBFFD2Q-BJp1AGm6.cjs} +1 -1
  34. package/dist/{classDiagram-v2-HSJHXN6E-DX5nDbg5.js → classDiagram-6PBFFD2Q-CEDs-xzV.js} +2 -2
  35. package/dist/{classDiagram-v2-HSJHXN6E-w916JDya.cjs → classDiagram-v2-HSJHXN6E-BJp1AGm6.cjs} +1 -1
  36. package/dist/{classDiagram-6PBFFD2Q-DX5nDbg5.js → classDiagram-v2-HSJHXN6E-CEDs-xzV.js} +2 -2
  37. package/dist/{clone-DFz4YXr3.js → clone-BYMmv0vr.js} +1 -1
  38. package/dist/clone-CMeAJ3XK.cjs +1 -0
  39. package/dist/components/bundle-toolbar/bundle-toolbar.d.ts +0 -1
  40. package/dist/components/bundle-toolbar/bundle-toolbar.js +1 -3
  41. package/dist/components/editor/editor.js +114 -18
  42. package/dist/components/premium-gate/premium-gate.d.ts +1 -0
  43. package/dist/components/premium-gate/premium-gate.js +6 -0
  44. package/dist/components/rodeo/roundup.d.ts +7 -0
  45. package/dist/components/rodeo/roundup.js +40 -0
  46. package/dist/components/rodeo/user-detail.js +6 -3
  47. package/dist/components/the-doctor/doctor-editor-panel.css.js +67 -30
  48. package/dist/components/the-doctor/doctor-editor-panel.d.ts +1 -0
  49. package/dist/components/the-doctor/doctor-editor-panel.js +9 -1
  50. package/dist/components/the-doctor/doctor-navigator-panel.css.js +1 -0
  51. package/dist/components/the-doctor/doctor-sidebar-panel.d.ts +4 -1
  52. package/dist/components/the-doctor/doctor-sidebar-panel.js +18 -3
  53. package/dist/components/the-doctor/printing-press-docs-unavailable.css.d.ts +2 -0
  54. package/dist/components/the-doctor/printing-press-docs-unavailable.css.js +34 -0
  55. package/dist/components/the-doctor/printing-press-docs-unavailable.d.ts +12 -0
  56. package/dist/components/the-doctor/printing-press-docs-unavailable.js +35 -0
  57. package/dist/components/the-doctor/printing-press-export-controls.css.d.ts +2 -0
  58. package/dist/components/the-doctor/printing-press-export-controls.css.js +26 -0
  59. package/dist/components/the-doctor/printing-press-export-controls.d.ts +16 -0
  60. package/dist/components/the-doctor/printing-press-export-controls.js +75 -0
  61. package/dist/components/the-doctor/the-doctor.css.js +148 -8
  62. package/dist/components/the-doctor/the-doctor.d.ts +52 -2
  63. package/dist/components/the-doctor/the-doctor.js +581 -23
  64. package/dist/components/workspaces/workspace-view.d.ts +1 -5
  65. package/dist/components/workspaces/workspace-view.js +4 -11
  66. package/dist/controllers/diagnostic-controller.d.ts +2 -0
  67. package/dist/controllers/diagnostic-controller.js +40 -1
  68. package/dist/controllers/node-clicker-controller.d.ts +2 -3
  69. package/dist/controllers/spec-controller.js +1 -1
  70. package/dist/controllers/workspace-controller.d.ts +1 -2
  71. package/dist/controllers/workspace-controller.js +2 -2
  72. package/dist/{cose-bilkent-S5V4N54A-DcUKlxlF.js → cose-bilkent-S5V4N54A-8KG9LqBY.js} +2 -2
  73. package/dist/{cose-bilkent-S5V4N54A-CKHB3cR8.cjs → cose-bilkent-S5V4N54A-Tlz_fqGx.cjs} +1 -1
  74. package/dist/{cowboy-components-CxawaKWM.js → cowboy-components-CPx4P290.js} +12249 -12616
  75. package/dist/{cowboy-components-CjgqXqkM.cjs → cowboy-components-DDfCPnUY.cjs} +1349 -1473
  76. package/dist/{dagre-KV5264BT-B2JWO01l.cjs → dagre-KV5264BT-DPqcbQdq.cjs} +1 -1
  77. package/dist/{dagre-KV5264BT-Nl_VfI8a.js → dagre-KV5264BT-DSCWDkcl.js} +5 -5
  78. package/dist/{diagram-5BDNPKRD-TI1X3fNz.js → diagram-5BDNPKRD-D-Y0PkPP.js} +4 -4
  79. package/dist/{diagram-5BDNPKRD-BKI_3vWy.cjs → diagram-5BDNPKRD-Ioi_2Lul.cjs} +1 -1
  80. package/dist/{diagram-G4DWMVQ6-DFBdN4sf.cjs → diagram-G4DWMVQ6-BRmyn8WA.cjs} +1 -1
  81. package/dist/{diagram-G4DWMVQ6-CFqOAmuK.js → diagram-G4DWMVQ6-Cl1WmwJV.js} +4 -4
  82. package/dist/{diagram-MMDJMWI5-CFuTCrVQ.cjs → diagram-MMDJMWI5-CTASKErj.cjs} +1 -1
  83. package/dist/{diagram-MMDJMWI5-BSsV2xaN.js → diagram-MMDJMWI5-vq4gDD7H.js} +3 -3
  84. package/dist/{diagram-TYMM5635-CrgW2ZZO.cjs → diagram-TYMM5635-DEnqo3aX.cjs} +1 -1
  85. package/dist/{diagram-TYMM5635-BP1f-EB_.js → diagram-TYMM5635-DSUFes5l.js} +3 -3
  86. package/dist/{erDiagram-SMLLAGMA-rVfyZdO4.js → erDiagram-SMLLAGMA-BiPGCCxs.js} +4 -4
  87. package/dist/{erDiagram-SMLLAGMA-C3caLNRz.cjs → erDiagram-SMLLAGMA-CyaiSIV2.cjs} +1 -1
  88. package/dist/events/doctor.d.ts +2 -0
  89. package/dist/events/doctor.js +2 -0
  90. package/dist/{flowDiagram-DWJPFMVM-Ce_HVRt5.cjs → flowDiagram-DWJPFMVM-Bqf8cwLG.cjs} +1 -1
  91. package/dist/{flowDiagram-DWJPFMVM-DqFXC8zL.js → flowDiagram-DWJPFMVM-C9rhk5uL.js} +6 -6
  92. package/dist/{ganttDiagram-T4ZO3ILL-BmNOX7yf.js → ganttDiagram-T4ZO3ILL-BP9h2UTv.js} +3 -3
  93. package/dist/{ganttDiagram-T4ZO3ILL-HHFgf8w4.cjs → ganttDiagram-T4ZO3ILL-DaR_t9rW.cjs} +1 -1
  94. package/dist/{gitGraph-7Q5UKJZL-kCDkIMWc.js → gitGraph-7Q5UKJZL-CHmm38gX.js} +1 -1
  95. package/dist/{gitGraph-7Q5UKJZL-DgndfdDH.cjs → gitGraph-7Q5UKJZL-DytqCQiv.cjs} +1 -1
  96. package/dist/{gitGraphDiagram-UUTBAWPF-DaVjvjth.cjs → gitGraphDiagram-UUTBAWPF-BGuOUavm.cjs} +1 -1
  97. package/dist/{gitGraphDiagram-UUTBAWPF-C-Ahhj_h.js → gitGraphDiagram-UUTBAWPF-ecgG5qHi.js} +4 -4
  98. package/dist/{graph-Dfys1tzR.js → graph-Bv4HICS-.js} +2 -2
  99. package/dist/{graph-DyZUkQBU.cjs → graph-DpFK38bp.cjs} +1 -1
  100. package/dist/{info-OMHHGYJF-Cb_sFFZS.cjs → info-OMHHGYJF-CUIG00cp.cjs} +1 -1
  101. package/dist/info-OMHHGYJF-CoTbguMJ.js +5 -0
  102. package/dist/{infoDiagram-42DDH7IO-BP_YOQpC.js → infoDiagram-42DDH7IO--5_30AyR.js} +2 -2
  103. package/dist/{infoDiagram-42DDH7IO-C09CiT2v.cjs → infoDiagram-42DDH7IO-CuAPDz-b.cjs} +1 -1
  104. package/dist/interfaces/doctor-interfaces.d.ts +10 -2
  105. package/dist/{ishikawaDiagram-UXIWVN3A-CjAoGU0v.cjs → ishikawaDiagram-UXIWVN3A-B8zjZXR2.cjs} +1 -1
  106. package/dist/{ishikawaDiagram-UXIWVN3A-DwW6fn0e.js → ishikawaDiagram-UXIWVN3A-BVoGYP0J.js} +1 -1
  107. package/dist/{journeyDiagram-VCZTEJTY-Bk7z4VA2.js → journeyDiagram-VCZTEJTY-CmQ65Rzd.js} +4 -4
  108. package/dist/{journeyDiagram-VCZTEJTY-CZnSwt6p.cjs → journeyDiagram-VCZTEJTY-Cs5uPgLz.cjs} +1 -1
  109. package/dist/{kanban-definition-6JOO6SKY-BiN4nM1i.js → kanban-definition-6JOO6SKY-BUllH7Pr.js} +2 -2
  110. package/dist/{kanban-definition-6JOO6SKY-DZF8xgYV.cjs → kanban-definition-6JOO6SKY-Bpd9pm1_.cjs} +1 -1
  111. package/dist/{layout-BDanDonD.js → layout-B93j_9jn.js} +4 -4
  112. package/dist/{layout-rTQtAIwn.cjs → layout-zdFgePaJ.cjs} +1 -1
  113. package/dist/{linear-CuHSYSeN.cjs → linear-D1T5mBBn.cjs} +1 -1
  114. package/dist/{linear-DFB2dCGq.js → linear-EAwz3euQ.js} +1 -1
  115. package/dist/{mermaid-parser.core-CCHvxUQl.js → mermaid-parser.core-D4IlYn7u.js} +13 -13
  116. package/dist/{mermaid-parser.core-fjh_cn2l.cjs → mermaid-parser.core-S6P-fvNi.cjs} +2 -2
  117. package/dist/{min-rDRC9KDF.js → min-BcEbrjrR.js} +2 -2
  118. package/dist/{min-h6fs1hPk.cjs → min-Cp2y5NY5.cjs} +1 -1
  119. package/dist/{mindmap-definition-QFDTVHPH-CZMHHnKO.js → mindmap-definition-QFDTVHPH-CZXaWtPo.js} +3 -3
  120. package/dist/{mindmap-definition-QFDTVHPH-BbUJ3LHd.cjs → mindmap-definition-QFDTVHPH-CkLdkLZi.cjs} +1 -1
  121. package/dist/model/api-response.d.ts +1 -0
  122. package/dist/model/feature-flags.d.ts +1 -0
  123. package/dist/model/feature-flags.js +1 -0
  124. package/dist/model/roundup-stats.d.ts +7 -0
  125. package/dist/{packet-4T2RLAQJ-BRTuQgpj.cjs → packet-4T2RLAQJ-CWdQm1p_.cjs} +1 -1
  126. package/dist/{packet-4T2RLAQJ-Bl5gBk4Q.js → packet-4T2RLAQJ-CqUj6pUH.js} +1 -1
  127. package/dist/pie-ZZUOXDRM-Dt-GliGo.js +5 -0
  128. package/dist/{pie-ZZUOXDRM-BbZyrtOg.cjs → pie-ZZUOXDRM-DxRGMKj-.cjs} +1 -1
  129. package/dist/{pieDiagram-DEJITSTG-BpiMiYGL.cjs → pieDiagram-DEJITSTG-CeFtWjEL.cjs} +1 -1
  130. package/dist/{pieDiagram-DEJITSTG-BNTE6R98.js → pieDiagram-DEJITSTG-DF8iOEQ1.js} +5 -5
  131. package/dist/{quadrantDiagram-34T5L4WZ-JjtOrhxB.js → quadrantDiagram-34T5L4WZ-DIrQ_CoV.js} +2 -2
  132. package/dist/{quadrantDiagram-34T5L4WZ-DODOOGae.cjs → quadrantDiagram-34T5L4WZ-DbENKFQB.cjs} +1 -1
  133. package/dist/radar-PYXPWWZC-B0qn40ys.js +5 -0
  134. package/dist/{radar-PYXPWWZC-CSH1N71W.cjs → radar-PYXPWWZC-DbQi3NfV.cjs} +1 -1
  135. package/dist/{requirementDiagram-MS252O5E-CwV2UGNb.js → requirementDiagram-MS252O5E-BmJ9tgw2.js} +3 -3
  136. package/dist/{requirementDiagram-MS252O5E-CjMpy00l.cjs → requirementDiagram-MS252O5E-CmwBghn1.cjs} +1 -1
  137. package/dist/{sankeyDiagram-XADWPNL6-rri4GWAM.js → sankeyDiagram-XADWPNL6-D6nKYWbU.js} +1 -1
  138. package/dist/{sankeyDiagram-XADWPNL6-BzayPzy0.cjs → sankeyDiagram-XADWPNL6-_NTd9nNm.cjs} +1 -1
  139. package/dist/{sequenceDiagram-FGHM5R23-D-YegsL-.cjs → sequenceDiagram-FGHM5R23-DvARbSg3.cjs} +1 -1
  140. package/dist/{sequenceDiagram-FGHM5R23-BwBriXF1.js → sequenceDiagram-FGHM5R23-gj6-9UEl.js} +3 -3
  141. package/dist/services/linting-service.d.ts +1 -0
  142. package/dist/services/linting-service.js +3 -0
  143. package/dist/services/printing-press-service.d.ts +27 -0
  144. package/dist/services/printing-press-service.js +125 -0
  145. package/dist/{stateDiagram-FHFEXIEX-jfwjGp1O.js → stateDiagram-FHFEXIEX-CDfhkt5o.js} +5 -5
  146. package/dist/{stateDiagram-FHFEXIEX-Cq2H2XQO.cjs → stateDiagram-FHFEXIEX-CUoMK5qv.cjs} +1 -1
  147. package/dist/{stateDiagram-v2-QKLJ7IA2-Bw4Xgr7w.js → stateDiagram-v2-QKLJ7IA2-DiPwdbAK.js} +2 -2
  148. package/dist/{stateDiagram-v2-QKLJ7IA2-DKL73VEs.cjs → stateDiagram-v2-QKLJ7IA2-DkUny04G.cjs} +1 -1
  149. package/dist/{timeline-definition-GMOUNBTQ-CpABxKM5.js → timeline-definition-GMOUNBTQ-GxzCrHrx.js} +2 -2
  150. package/dist/{timeline-definition-GMOUNBTQ-DP1yCayj.cjs → timeline-definition-GMOUNBTQ-bpnHyBjo.cjs} +1 -1
  151. package/dist/{treeView-SZITEDCU-BtaLEQ3S.js → treeView-SZITEDCU-DIrUF69A.js} +1 -1
  152. package/dist/{treeView-SZITEDCU-BizNBkAv.cjs → treeView-SZITEDCU-zJeBKhxU.cjs} +1 -1
  153. package/dist/{treemap-W4RFUUIX-Cbbx2tbB.cjs → treemap-W4RFUUIX-DIVItjGt.cjs} +1 -1
  154. package/dist/{treemap-W4RFUUIX-CmVVUeZj.js → treemap-W4RFUUIX-De3UvqNM.js} +1 -1
  155. package/dist/{vennDiagram-DHZGUBPP-C0edoxsg.js → vennDiagram-DHZGUBPP-C8gJOl_U.js} +1 -1
  156. package/dist/{vennDiagram-DHZGUBPP-Dv3ZX8SJ.cjs → vennDiagram-DHZGUBPP-CPciBxaz.cjs} +1 -1
  157. package/dist/{wardley-RL74JXVD-DdQvN9q5.js → wardley-RL74JXVD-C7Xl9U8K.js} +1 -1
  158. package/dist/{wardley-RL74JXVD-BndLe7vL.cjs → wardley-RL74JXVD-pImcCh7M.cjs} +1 -1
  159. package/dist/{wardleyDiagram-NUSXRM2D-DCChf1Y2.js → wardleyDiagram-NUSXRM2D-C5cuHNUZ.js} +3 -3
  160. package/dist/{wardleyDiagram-NUSXRM2D-DpluOG7a.cjs → wardleyDiagram-NUSXRM2D-cJNJYk25.cjs} +1 -1
  161. package/dist/{xychartDiagram-5P7HB3ND-B7y6-7BP.cjs → xychartDiagram-5P7HB3ND-Bg7uOCAC.cjs} +1 -1
  162. package/dist/{xychartDiagram-5P7HB3ND-BWvz1AY8.js → xychartDiagram-5P7HB3ND-Ws1GisBM.js} +3 -3
  163. package/package.json +1 -1
  164. package/dist/clone-D_c-FYGd.cjs +0 -1
  165. package/dist/info-OMHHGYJF-KL9K6Ofp.js +0 -5
  166. package/dist/pie-ZZUOXDRM-CpENjo0C.js +0 -5
  167. package/dist/radar-PYXPWWZC-BiAwm-jb.js +0 -5
@@ -4,6 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
+ var TheDoctor_1;
7
8
  import '@shoelace-style/shoelace/dist/components/split-panel/split-panel.js';
8
9
  import '@shoelace-style/shoelace/dist/components/tab-group/tab-group.js';
9
10
  import '@shoelace-style/shoelace/dist/components/tab-panel/tab-panel.js';
@@ -17,7 +18,7 @@ import { customElement, property, query, state } from "lit/decorators.js";
17
18
  import { html, LitElement, nothing } from "lit";
18
19
  import { ref, createRef } from "lit/directives/ref.js";
19
20
  import { SpecEditor } from "../editor/editor.js";
20
- import { ActiveView, AddToast, ArchiveURLRequested, BuiltInRulesetChanged, CreditEmpty, CustomRulesetEnabled, DocumentReferenceClicked, EditorClicked, EditorUpdated, ExplorerEqualizerChanged, ExplorerEqualizerFiltered, ExplorerPovModeExit, ExplorerNodeClicked, ExportRuleset, LoadRenderedNodeIntoInspector, ModelTreeNodeClicked, NodeReferenceClicked, NukeWorkspaceEvent, OpenDrawer, OpenSettings, ProblemClicked, Reboot, RolodexRootFileSelected, RolodexTreeNodeClicked, RuleClicked, RulesetSaved, RuleViolationClicked, StartSessionFailed, CreditStreamUpdated, SocketDisconnected, DiagramRequested, TimelineViolationsLoaded, BundleRequested, BundleDownloadRequested, BundleCopyRequested, } from "../../events/doctor.js";
21
+ import { ActiveView, AddToast, ArchiveURLRequested, BuiltInRulesetChanged, CreditEmpty, CustomRulesetEnabled, DocumentReferenceClicked, EditorClicked, EditorUpdated, ExplorerEqualizerChanged, ExplorerEqualizerFiltered, ExplorerPovModeExit, ExplorerNodeClicked, ExportRuleset, LoadRenderedNodeIntoInspector, ModelTreeNodeClicked, NodeReferenceClicked, NukeWorkspaceEvent, OpenDrawer, OpenSettings, ProblemClicked, Reboot, RolodexRootFileSelected, RolodexTreeNodeClicked, RuleClicked, RulesetSaved, RuleViolationClicked, StartSessionFailed, CreditStreamUpdated, SocketDisconnected, DiagramRequested, TimelineViolationsLoaded, BundleRequested, BundleDownloadRequested, BundleCopyRequested, PrintingPressZipExportRequested, PrintingPressTarballExportRequested, } from "../../events/doctor.js";
21
22
  import { CreateBagManager } from "@pb33f/saddlebag";
22
23
  import { LintingService } from "../../services/linting-service.js";
23
24
  import { ProblemList } from "../problem-list/problem-list.js";
@@ -49,6 +50,8 @@ import spinnerCss from "../../css/spinner.css.js";
49
50
  import { resolveNodeIdFromHash } from "../../utils/node-helpers.js";
50
51
  import { UploadArchiveComponent } from "./upload-archive.js";
51
52
  import '../premium-gate/premium-gate.js';
53
+ import './printing-press-docs-unavailable.js';
54
+ import './printing-press-export-controls.js';
52
55
  import tooltipCss from "../../css/tooltip.css.js";
53
56
  import { NukeWorkspaceComponent } from "./nuke-workspace.js";
54
57
  import { CreditTicker } from "../credit-ticker/credit-ticker.js";
@@ -76,13 +79,14 @@ import { GitHubController } from "../../controllers/github-controller.js";
76
79
  import { DiagramatronController } from "../../controllers/diagramatron-controller.js";
77
80
  import { TimelineController } from "../../controllers/timeline-controller.js";
78
81
  import { BundleController } from "../../controllers/bundle-controller.js";
79
- import { ApiKeyController } from "../../controllers/api-key-controller.js";
82
+ import { PB33F_THEME, DarkTheme } from "../theme-switcher/theme-switcher.js";
83
+ import { PB33F_THEME_CHANGE } from "../../events/theme.js";
80
84
  import '../bundle-toolbar/bundle-toolbar.js';
81
85
  import { WorkspaceService } from '../../services/workspace-service.js';
82
86
  import { WalletService } from '../../services/wallet-service.js';
83
87
  import { GlobalTaskService } from '../../services/global-task-service.js';
84
88
  import { GitHubService } from '../../services/github-service.js';
85
- import { ApiKeyService } from '../../services/api-key-service.js';
89
+ import { PrintingPressService } from '../../services/printing-press-service.js';
86
90
  import { GenericDetailsDrawer } from '../details-drawer/generic-details-drawer.js';
87
91
  import { DrawerContentRegistry } from '../../services/drawer-content-registry.js';
88
92
  import { TabCacheController } from '../../controllers/tab-cache-controller.js';
@@ -128,13 +132,18 @@ export const GitHubStateBag = "pb33f-doctor-github-state";
128
132
  export const DefaultDocument = "pb33f-doctor-document";
129
133
  export const DocumentProblems = "pb33f-doctor-problems";
130
134
  export const DoctorEndpoint = "doctor-endpoint";
131
- let TheDoctor = class TheDoctor extends LitElement {
135
+ let TheDoctor = TheDoctor_1 = class TheDoctor extends LitElement {
132
136
  constructor(doctorEndpoint = "https://doctor.pb33f.io") {
133
137
  super();
134
138
  this.toolsEditorHasContent = false;
135
139
  this.editorDirty = false;
136
140
  this.bundleLoading = false;
137
141
  this.isBundled = false;
142
+ this.printingPressDocsPending = false;
143
+ this.printingPressDocsReady = false;
144
+ this.printingPressDocsAccessDenied = false;
145
+ this.printingPressDocsRetryableError = false;
146
+ this.docsTakeoverApplied = false;
138
147
  // Use ref directives instead of @query for better control
139
148
  this.tardisControlRef = createRef();
140
149
  this.editorRef = createRef();
@@ -168,7 +177,6 @@ let TheDoctor = class TheDoctor extends LitElement {
168
177
  WalletService.doctorEndpoint = this.doctorEndpoint;
169
178
  GlobalTaskService.doctorEndpoint = this.doctorEndpoint;
170
179
  GitHubService.doctorEndpoint = this.doctorEndpoint;
171
- ApiKeyService.doctorEndpoint = this.doctorEndpoint;
172
180
  // bus it up
173
181
  this.bus = CreateBus();
174
182
  this.events = createDoctorEventChannels(this.bus);
@@ -235,12 +243,7 @@ let TheDoctor = class TheDoctor extends LitElement {
235
243
  requestUpdate: () => this.requestUpdate(),
236
244
  getOriginalFileName: () => this.rolodexRootPath || 'openapi'
237
245
  });
238
- this.apiKeyController = new ApiKeyController({
239
- getBrokerId: () => this.brokerController?.brokerConnectionId,
240
- sendToast: (toast) => this.sendToast(toast)
241
- });
242
- // Initialize workspace view after GitHub controller and API key controller are created
243
- this.workspaceController.initializeView(this.githubController, this.apiKeyController);
246
+ this.workspaceController.initializeView(this.githubController);
244
247
  this.globalTaskView = new GlobalTaskView();
245
248
  //this.globalTaskView.mockMode = true; // Enable mock mode for demo
246
249
  this.globalTaskView.setController(this.globalTaskController);
@@ -388,6 +391,10 @@ let TheDoctor = class TheDoctor extends LitElement {
388
391
  this.addTrackedListener(this, BundleRequested, this.handleBundleRequested.bind(this));
389
392
  this.addTrackedListener(this, BundleDownloadRequested, this.handleBundleDownload.bind(this));
390
393
  this.addTrackedListener(this, BundleCopyRequested, this.handleBundleCopy.bind(this));
394
+ this.addTrackedListener(this, PrintingPressZipExportRequested, this.handlePrintingPressZipExport.bind(this));
395
+ this.addTrackedListener(this, PrintingPressTarballExportRequested, this.handlePrintingPressTarballExport.bind(this));
396
+ this.addTrackedListener(window, 'message', this.handlePrintingPressMessage.bind(this));
397
+ this.addTrackedListener(window, PB33F_THEME_CHANGE, this.handleThemeChangeForPrintingPress.bind(this));
391
398
  // hijack navigation buttons - store reference for cleanup
392
399
  this.popstateHandler = (e) => {
393
400
  const state = e.state;
@@ -448,7 +455,9 @@ let TheDoctor = class TheDoctor extends LitElement {
448
455
  'feedback': 'Feedback'
449
456
  };
450
457
  this.currentViewName = viewNames[tabName] || tabName;
451
- this.managePanelFocus(this.sidebarPanel, tabName);
458
+ if (event.detail.focusPanel !== false) {
459
+ this.managePanelFocus(this.sidebarPanel, tabName);
460
+ }
452
461
  }
453
462
  openSidebar() {
454
463
  if (this.sidebarClosed && this.sidebarPanel) {
@@ -490,6 +499,7 @@ let TheDoctor = class TheDoctor extends LitElement {
490
499
  'spec': 'Specification Editor',
491
500
  'explorer': 'Explorer',
492
501
  'tardis': 'Timeline',
502
+ 'docs': 'API Docs',
493
503
  'workspaces': 'Workspaces'
494
504
  };
495
505
  this.currentViewName = viewNames[tabName] || tabName;
@@ -529,6 +539,7 @@ let TheDoctor = class TheDoctor extends LitElement {
529
539
  case 'docs':
530
540
  this.hideMinimapIcon();
531
541
  this.hideDiagnosisButton();
542
+ this.preloadPrintingPressDocs();
532
543
  break;
533
544
  }
534
545
  }
@@ -661,6 +672,12 @@ let TheDoctor = class TheDoctor extends LitElement {
661
672
  // Don't fetch history here - wait until doctor is fully booted
662
673
  }
663
674
  });
675
+ this.syncDocsTakeoverLayout();
676
+ }
677
+ updated(changedProperties) {
678
+ if (changedProperties.has('selectedEditorTab')) {
679
+ this.syncDocsTakeoverLayout();
680
+ }
664
681
  }
665
682
  disconnectedCallback() {
666
683
  super.disconnectedCallback();
@@ -730,8 +747,54 @@ let TheDoctor = class TheDoctor extends LitElement {
730
747
  sendToast(toast) {
731
748
  this.toastManager.addToastManually(toast);
732
749
  }
733
- updateInspectorDivider() { this.panelDividerManager.updateInspectorDivider(); }
734
- updateExplorerDivider() { this.panelDividerManager.updateExplorerDivider(); }
750
+ updateInspectorDivider() {
751
+ if (this.selectedEditorTab === 'docs')
752
+ return;
753
+ this.panelDividerManager.updateInspectorDivider();
754
+ }
755
+ updateExplorerDivider() {
756
+ if (this.selectedEditorTab === 'docs')
757
+ return;
758
+ this.panelDividerManager.updateExplorerDivider();
759
+ }
760
+ syncDocsTakeoverLayout() {
761
+ const docsActive = this.selectedEditorTab === 'docs';
762
+ const explorerPanel = this.splitPanelExplorer;
763
+ const inspectorPanel = this.splitPanelInspector;
764
+ if (!explorerPanel || !inspectorPanel) {
765
+ return;
766
+ }
767
+ if (docsActive) {
768
+ if (!this.docsTakeoverApplied) {
769
+ this.explorerPositionBeforeDocs = explorerPanel.position > 0 ? explorerPanel.position : 12;
770
+ this.inspectorPositionBeforeDocs = inspectorPanel.position > 0 ? inspectorPanel.position : 50;
771
+ this.docsTakeoverApplied = true;
772
+ }
773
+ explorerPanel.style.setProperty('--min', '0');
774
+ explorerPanel.style.setProperty('--max', '100%');
775
+ explorerPanel.position = 0;
776
+ explorerPanel.disabled = true;
777
+ inspectorPanel.style.setProperty('--min', '0');
778
+ inspectorPanel.style.setProperty('--max', '100%');
779
+ inspectorPanel.position = 100;
780
+ inspectorPanel.disabled = true;
781
+ return;
782
+ }
783
+ if (!this.docsTakeoverApplied) {
784
+ return;
785
+ }
786
+ explorerPanel.style.removeProperty('--min');
787
+ explorerPanel.style.removeProperty('--max');
788
+ explorerPanel.disabled = false;
789
+ explorerPanel.position = this.explorerPositionBeforeDocs ?? 12;
790
+ inspectorPanel.style.removeProperty('--min');
791
+ inspectorPanel.style.removeProperty('--max');
792
+ inspectorPanel.disabled = false;
793
+ inspectorPanel.position = this.inspectorPositionBeforeDocs ?? 50;
794
+ this.docsTakeoverApplied = false;
795
+ this.explorerPositionBeforeDocs = undefined;
796
+ this.inspectorPositionBeforeDocs = undefined;
797
+ }
735
798
  updateRefmapBag(currentPath, result) {
736
799
  let refMap = this.referenceMapBag?.get(ReferenceMapBag);
737
800
  let cp = currentPath ?? "";
@@ -831,6 +894,468 @@ let TheDoctor = class TheDoctor extends LitElement {
831
894
  handleBundleCopy() {
832
895
  this.bundleController.copyToClipboard();
833
896
  }
897
+ async handlePrintingPressZipExport() {
898
+ await this.handlePrintingPressExport('zip');
899
+ }
900
+ async handlePrintingPressTarballExport() {
901
+ await this.handlePrintingPressExport('tar.gz');
902
+ }
903
+ async handlePrintingPressExport(format) {
904
+ try {
905
+ await PrintingPressService.exportDocs(format, this.brokerController?.brokerConnectionId);
906
+ this.sendToast({
907
+ id: crypto.randomUUID(),
908
+ type: ToastType.SUCCESS,
909
+ title: "docs exported",
910
+ body: `Printing Press docs exported as ${format}.`
911
+ });
912
+ }
913
+ catch (error) {
914
+ this.sendToast({
915
+ id: crypto.randomUUID(),
916
+ type: ToastType.ERROR,
917
+ title: "docs export failed",
918
+ body: error?.detail || error?.title || 'Unable to export generated docs.'
919
+ });
920
+ }
921
+ }
922
+ handlePrintingPressTask(taskId) {
923
+ this.clearPrintingPressDocsReadyWatchdog();
924
+ this.printingPressDocsTaskId = taskId;
925
+ this.printingPressDocsPending = true;
926
+ this.printingPressDocsReady = false;
927
+ this.printingPressDocsError = undefined;
928
+ this.printingPressDocsAccessDenied = false;
929
+ this.printingPressDocsRetryableError = false;
930
+ this.printingPressDocsUrl = undefined;
931
+ this.printingPressDocsExpectedOrigin = undefined;
932
+ this.requestUpdate();
933
+ this.globalTaskController.waitForTask(taskId).then(async (task) => {
934
+ if (this.printingPressDocsTaskId !== taskId) {
935
+ return;
936
+ }
937
+ if (task.status !== 'completed') {
938
+ this.printingPressDocsPending = false;
939
+ this.printingPressDocsReady = false;
940
+ this.printingPressDocsUrl = undefined;
941
+ this.printingPressDocsExpectedOrigin = undefined;
942
+ this.printingPressDocsError = task.error || task.message || 'Printing Press failed to build generated docs.';
943
+ this.printingPressDocsAccessDenied = this.isPrintingPressAccessDeniedError(task);
944
+ this.printingPressDocsRetryableError = true;
945
+ this.requestUpdate();
946
+ return;
947
+ }
948
+ await this.loadPrintingPressDocsForTask(taskId);
949
+ });
950
+ }
951
+ preloadPrintingPressDocs(options = {}) {
952
+ this.tabCache.markEditorTabLoaded('docs');
953
+ if (this.printingPressDocsPending && !options.refresh) {
954
+ return;
955
+ }
956
+ if (!options.refresh && this.printingPressDocsUrl && !this.printingPressDocsError) {
957
+ return;
958
+ }
959
+ if (!options.refresh && this.printingPressDocsError && !this.printingPressDocsRetryableError) {
960
+ return;
961
+ }
962
+ this.clearPrintingPressDocsReadyWatchdog();
963
+ const requestId = this.createPrintingPressRequestId();
964
+ this.printingPressDocsTaskId = requestId;
965
+ this.printingPressDocsPending = true;
966
+ this.printingPressDocsReady = false;
967
+ this.printingPressDocsError = undefined;
968
+ this.printingPressDocsAccessDenied = false;
969
+ this.printingPressDocsRetryableError = false;
970
+ this.printingPressDocsUrl = undefined;
971
+ this.printingPressDocsExpectedOrigin = undefined;
972
+ this.requestUpdate();
973
+ void this.loadCurrentPrintingPressDocs(requestId);
974
+ }
975
+ markPrintingPressDocsUnavailable(detail) {
976
+ this.clearPrintingPressDocsReadyWatchdog();
977
+ this.printingPressDocsTaskId = undefined;
978
+ this.printingPressDocsPending = false;
979
+ this.printingPressDocsReady = false;
980
+ this.printingPressDocsError = detail;
981
+ this.printingPressDocsAccessDenied = this.isPrintingPressAccessDeniedError({ detail });
982
+ this.printingPressDocsRetryableError = false;
983
+ this.printingPressDocsUrl = undefined;
984
+ this.printingPressDocsExpectedOrigin = undefined;
985
+ this.requestUpdate();
986
+ }
987
+ resetPrintingPressDocsState() {
988
+ this.clearPrintingPressDocsReadyWatchdog();
989
+ this.printingPressDocsTaskId = undefined;
990
+ this.printingPressDocsPending = false;
991
+ this.printingPressDocsReady = false;
992
+ this.printingPressDocsError = undefined;
993
+ this.printingPressDocsAccessDenied = false;
994
+ this.printingPressDocsRetryableError = false;
995
+ this.printingPressDocsUrl = undefined;
996
+ this.printingPressDocsExpectedOrigin = undefined;
997
+ }
998
+ async loadCurrentPrintingPressDocs(requestId) {
999
+ try {
1000
+ const brokerId = this.brokerController?.brokerConnectionId;
1001
+ const result = await PrintingPressService.ensureWorkspaceDocs(brokerId);
1002
+ if (this.printingPressDocsTaskId !== requestId) {
1003
+ return;
1004
+ }
1005
+ if (result.status !== 'completed') {
1006
+ if (!result.taskId) {
1007
+ throw new Error('Printing Press did not return a task ID.');
1008
+ }
1009
+ this.handlePrintingPressTask(result.taskId);
1010
+ return;
1011
+ }
1012
+ await this.loadPrintingPressDocsFromResult(requestId, result, brokerId);
1013
+ }
1014
+ catch (error) {
1015
+ if (this.printingPressDocsTaskId !== requestId) {
1016
+ return;
1017
+ }
1018
+ this.printingPressDocsPending = false;
1019
+ this.printingPressDocsReady = false;
1020
+ this.printingPressDocsExpectedOrigin = undefined;
1021
+ this.printingPressDocsError = error?.detail || error?.message || 'Unable to load generated docs.';
1022
+ this.printingPressDocsAccessDenied = this.isPrintingPressAccessDeniedError(error);
1023
+ this.printingPressDocsRetryableError = true;
1024
+ this.requestUpdate();
1025
+ }
1026
+ }
1027
+ async loadPrintingPressDocsForTask(taskId) {
1028
+ try {
1029
+ const brokerId = this.brokerController?.brokerConnectionId;
1030
+ const result = await PrintingPressService.fetchTaskResult(taskId, brokerId);
1031
+ if (this.printingPressDocsTaskId !== taskId) {
1032
+ return;
1033
+ }
1034
+ await this.loadPrintingPressDocsFromResult(taskId, result, brokerId);
1035
+ }
1036
+ catch (error) {
1037
+ if (this.printingPressDocsTaskId !== taskId) {
1038
+ return;
1039
+ }
1040
+ this.printingPressDocsPending = false;
1041
+ this.printingPressDocsReady = false;
1042
+ this.printingPressDocsExpectedOrigin = undefined;
1043
+ this.printingPressDocsError = error?.detail || error?.message || 'Unable to load generated docs.';
1044
+ this.printingPressDocsAccessDenied = this.isPrintingPressAccessDeniedError(error);
1045
+ this.printingPressDocsRetryableError = true;
1046
+ this.requestUpdate();
1047
+ }
1048
+ }
1049
+ async loadPrintingPressDocsFromResult(requestId, result, brokerId) {
1050
+ const docsUrl = result.docsUrl || result.url;
1051
+ if (!docsUrl) {
1052
+ throw new Error('Printing Press did not return a docs URL.');
1053
+ }
1054
+ const absoluteUrl = PrintingPressService.absoluteDocsUrl(docsUrl);
1055
+ const preflight = await PrintingPressService.preflightDocs(absoluteUrl, brokerId);
1056
+ if (this.printingPressDocsTaskId !== requestId) {
1057
+ return;
1058
+ }
1059
+ if (!preflight.ok) {
1060
+ const accessDenied = preflight.status === 401 || preflight.status === 403;
1061
+ this.printingPressDocsPending = false;
1062
+ this.printingPressDocsReady = false;
1063
+ this.printingPressDocsUrl = undefined;
1064
+ this.printingPressDocsExpectedOrigin = undefined;
1065
+ this.printingPressDocsAccessDenied = accessDenied;
1066
+ this.printingPressDocsRetryableError = true;
1067
+ this.printingPressDocsError = accessDenied
1068
+ ? 'Access denied. Sign in with access to this workspace to view these docs.'
1069
+ : `Unable to load generated docs (${preflight.status}).`;
1070
+ this.requestUpdate();
1071
+ return;
1072
+ }
1073
+ this.printingPressDocsUrl = absoluteUrl;
1074
+ try {
1075
+ this.printingPressDocsExpectedOrigin = new URL(absoluteUrl).origin;
1076
+ }
1077
+ catch {
1078
+ this.printingPressDocsExpectedOrigin = undefined;
1079
+ }
1080
+ this.printingPressDocsReady = false;
1081
+ this.printingPressDocsPending = true;
1082
+ this.printingPressDocsError = undefined;
1083
+ this.printingPressDocsAccessDenied = false;
1084
+ this.printingPressDocsRetryableError = false;
1085
+ this.armPrintingPressDocsReadyWatchdog(requestId);
1086
+ this.tabCache.markEditorTabLoaded('docs');
1087
+ this.requestUpdate();
1088
+ }
1089
+ handlePrintingPressMessage(event) {
1090
+ if (!this.printingPressDocsExpectedOrigin) {
1091
+ return;
1092
+ }
1093
+ if (event.origin !== this.printingPressDocsExpectedOrigin) {
1094
+ return;
1095
+ }
1096
+ const frameWindow = this.findPrintingPressIframeWindow();
1097
+ if (!frameWindow || event.source !== frameWindow) {
1098
+ return;
1099
+ }
1100
+ const data = event.data;
1101
+ if (!data || typeof data !== 'object') {
1102
+ return;
1103
+ }
1104
+ if (data.type === 'ppress:ready') {
1105
+ this.clearPrintingPressDocsReadyWatchdog();
1106
+ this.printingPressDocsPending = false;
1107
+ this.printingPressDocsReady = true;
1108
+ this.printingPressDocsError = undefined;
1109
+ this.printingPressDocsAccessDenied = false;
1110
+ this.printingPressDocsRetryableError = false;
1111
+ this.sendCurrentThemeToPrintingPress(event.source);
1112
+ this.sendPrintingPressArchiveControls(event.source);
1113
+ this.requestUpdate();
1114
+ return;
1115
+ }
1116
+ if (data.type === 'ppress:export') {
1117
+ void this.handlePrintingPressDocumentExport(data.format, data.diagnostics === true, data.llm === true);
1118
+ return;
1119
+ }
1120
+ if (data.type === 'ppress:error') {
1121
+ this.clearPrintingPressDocsReadyWatchdog();
1122
+ this.printingPressDocsPending = false;
1123
+ this.printingPressDocsReady = false;
1124
+ this.printingPressDocsUrl = undefined;
1125
+ this.printingPressDocsExpectedOrigin = undefined;
1126
+ this.printingPressDocsError = data.message || 'Unable to load generated docs.';
1127
+ this.printingPressDocsAccessDenied = data.status === 401 || data.status === 403;
1128
+ this.printingPressDocsRetryableError = true;
1129
+ this.requestUpdate();
1130
+ }
1131
+ }
1132
+ async handlePrintingPressDocumentExport(format, diagnostics = false, llm = false) {
1133
+ const archiveFormat = format === 'tar.gz' ? 'tar.gz' : 'zip';
1134
+ if (!this.printingPressDocsUrl) {
1135
+ this.sendToast({
1136
+ id: crypto.randomUUID(),
1137
+ type: ToastType.ERROR,
1138
+ title: "docs export failed",
1139
+ body: 'Generated docs are not loaded yet.'
1140
+ });
1141
+ return;
1142
+ }
1143
+ if (!this.authController?.authenticated) {
1144
+ this.openPrintingPressExportGate();
1145
+ return;
1146
+ }
1147
+ try {
1148
+ await PrintingPressService.exportDocumentDocs(this.printingPressDocsUrl, {
1149
+ format: archiveFormat,
1150
+ diagnostics,
1151
+ llm,
1152
+ brokerId: this.brokerController?.brokerConnectionId
1153
+ });
1154
+ this.sendToast({
1155
+ id: crypto.randomUUID(),
1156
+ type: ToastType.SUCCESS,
1157
+ title: "docs exported",
1158
+ body: `Printing Press docs exported as ${archiveFormat}.`
1159
+ });
1160
+ }
1161
+ catch (error) {
1162
+ if (this.shouldOpenPrintingPressExportGate(error)) {
1163
+ this.openPrintingPressExportGate();
1164
+ return;
1165
+ }
1166
+ this.sendToast({
1167
+ id: crypto.randomUUID(),
1168
+ type: ToastType.ERROR,
1169
+ title: "docs export failed",
1170
+ body: error?.detail || error?.title || error?.message || 'Unable to export generated docs.'
1171
+ });
1172
+ }
1173
+ }
1174
+ shouldOpenPrintingPressExportGate(error) {
1175
+ const status = Number(error?.status ?? error?.response?.status ?? 0);
1176
+ return status === 401 || (!this.authController?.authenticated && this.isPrintingPressAccessDeniedError(error));
1177
+ }
1178
+ openPrintingPressExportGate() {
1179
+ this.printingPressExportGate?.openGate('unauthenticated');
1180
+ }
1181
+ armPrintingPressDocsReadyWatchdog(taskId) {
1182
+ this.clearPrintingPressDocsReadyWatchdog();
1183
+ this.printingPressDocsReadyTimeout = setTimeout(() => {
1184
+ this.printingPressDocsReadyTimeout = undefined;
1185
+ if (this.printingPressDocsTaskId !== taskId) {
1186
+ return;
1187
+ }
1188
+ if (this.printingPressDocsReady) {
1189
+ return;
1190
+ }
1191
+ this.printingPressDocsPending = false;
1192
+ this.printingPressDocsReady = false;
1193
+ this.printingPressDocsUrl = undefined;
1194
+ this.printingPressDocsExpectedOrigin = undefined;
1195
+ this.printingPressDocsError = 'Generated docs did not finish loading.';
1196
+ this.printingPressDocsAccessDenied = false;
1197
+ this.printingPressDocsRetryableError = true;
1198
+ this.requestUpdate();
1199
+ }, TheDoctor_1.PRINTING_PRESS_DOCS_READY_TIMEOUT_MS);
1200
+ }
1201
+ clearPrintingPressDocsReadyWatchdog() {
1202
+ if (this.printingPressDocsReadyTimeout !== undefined) {
1203
+ clearTimeout(this.printingPressDocsReadyTimeout);
1204
+ this.printingPressDocsReadyTimeout = undefined;
1205
+ }
1206
+ }
1207
+ createPrintingPressRequestNonce() {
1208
+ if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
1209
+ return crypto.randomUUID();
1210
+ }
1211
+ return `${Date.now()}-${Math.random().toString(36).slice(2)}`;
1212
+ }
1213
+ createPrintingPressRequestId() {
1214
+ return `preload:${this.createPrintingPressRequestNonce()}`;
1215
+ }
1216
+ handlePrintingPressDocsIframeError() {
1217
+ this.clearPrintingPressDocsReadyWatchdog();
1218
+ this.printingPressDocsPending = false;
1219
+ this.printingPressDocsReady = false;
1220
+ this.printingPressDocsUrl = undefined;
1221
+ this.printingPressDocsExpectedOrigin = undefined;
1222
+ this.printingPressDocsError = 'Unable to load generated docs.';
1223
+ this.printingPressDocsAccessDenied = false;
1224
+ this.printingPressDocsRetryableError = true;
1225
+ this.requestUpdate();
1226
+ }
1227
+ handlePrintingPressDocsIframeLoad() {
1228
+ this.sendPrintingPressArchiveControls();
1229
+ window.setTimeout(() => this.sendPrintingPressArchiveControls(), 50);
1230
+ }
1231
+ handleThemeChangeForPrintingPress(event) {
1232
+ const detail = event.detail;
1233
+ if (!detail?.theme) {
1234
+ return;
1235
+ }
1236
+ this.sendThemeToPrintingPress(detail.theme);
1237
+ }
1238
+ sendCurrentThemeToPrintingPress(target) {
1239
+ const stored = (typeof localStorage !== 'undefined' && localStorage.getItem(PB33F_THEME)) || DarkTheme;
1240
+ this.sendThemeToPrintingPress(stored, target ?? undefined);
1241
+ }
1242
+ sendThemeToPrintingPress(theme, target) {
1243
+ if (!this.printingPressDocsExpectedOrigin) {
1244
+ return;
1245
+ }
1246
+ const win = target || this.findPrintingPressIframeWindow();
1247
+ if (!win) {
1248
+ return;
1249
+ }
1250
+ try {
1251
+ win.postMessage({ type: 'doctor:theme', theme }, this.printingPressDocsExpectedOrigin);
1252
+ }
1253
+ catch {
1254
+ // intentional: failure to post a theme update is not user-actionable
1255
+ }
1256
+ }
1257
+ sendPrintingPressArchiveControls(target) {
1258
+ if (!this.printingPressDocsExpectedOrigin) {
1259
+ return;
1260
+ }
1261
+ const win = target || this.findPrintingPressIframeWindow();
1262
+ if (!win) {
1263
+ return;
1264
+ }
1265
+ try {
1266
+ win.postMessage({ type: 'doctor:archive-controls', enabled: true }, this.printingPressDocsExpectedOrigin);
1267
+ }
1268
+ catch {
1269
+ // intentional: export controls are a hosted enhancement, docs remain usable without them
1270
+ }
1271
+ }
1272
+ findPrintingPressIframeWindow() {
1273
+ const root = this.renderRoot ?? this;
1274
+ const iframe = root.querySelector('iframe.printing-press-docs-frame');
1275
+ return iframe?.contentWindow ?? null;
1276
+ }
1277
+ renderPrintingPressDocsPanel() {
1278
+ if (!this.tabCache.shouldRenderEditorTab('docs')) {
1279
+ return nothing;
1280
+ }
1281
+ return html `
1282
+ <div class="printing-press-docs-panel">
1283
+ <div class="printing-press-docs-content">
1284
+ ${this.renderPrintingPressDocs()}
1285
+ </div>
1286
+ </div>
1287
+ `;
1288
+ }
1289
+ renderPrintingPressDocs() {
1290
+ if (!this.tabCache.shouldRenderEditorTab('docs')) {
1291
+ return nothing;
1292
+ }
1293
+ if (this.printingPressDocsError) {
1294
+ if (this.printingPressDocsAccessDenied) {
1295
+ return this.renderPrintingPressAccessDenied();
1296
+ }
1297
+ return html `
1298
+ <pb33f-printing-press-docs-unavailable
1299
+ .detail=${this.printingPressDocsError}>
1300
+ </pb33f-printing-press-docs-unavailable>
1301
+ `;
1302
+ }
1303
+ if (!this.printingPressDocsUrl) {
1304
+ return this.printingPressDocsPending ? this.renderPrintingPressDocsPending() : nothing;
1305
+ }
1306
+ return html `
1307
+ <div class="printing-press-docs-shell">
1308
+ <iframe
1309
+ class="printing-press-docs-frame ${this.printingPressDocsReady ? 'ready' : 'loading'}"
1310
+ src="${this.printingPressDocsUrl}"
1311
+ width="100%"
1312
+ height="100%"
1313
+ style="border: none"
1314
+ @load=${this.handlePrintingPressDocsIframeLoad}
1315
+ @error=${this.handlePrintingPressDocsIframeError}>
1316
+ </iframe>
1317
+ ${this.printingPressDocsPending ? html `
1318
+ <div class="printing-press-docs-overlay">
1319
+ ${this.renderPrintingPressDocsPending()}
1320
+ </div>
1321
+ ` : nothing}
1322
+ </div>
1323
+ `;
1324
+ }
1325
+ renderPrintingPressAccessDenied() {
1326
+ const accessDeniedUrl = new URL('/access-denied', ModelService.doctorEndpoint).toString();
1327
+ return html `
1328
+ <iframe
1329
+ class="printing-press-docs-access-denied-frame"
1330
+ src="${accessDeniedUrl}"
1331
+ width="100%"
1332
+ height="100%"
1333
+ style="border: none"
1334
+ title="access denied">
1335
+ </iframe>
1336
+ `;
1337
+ }
1338
+ isPrintingPressAccessDeniedError(error) {
1339
+ const status = Number(error?.status ?? error?.response?.status ?? 0);
1340
+ if (status === 401 || status === 403) {
1341
+ return true;
1342
+ }
1343
+ const text = `${error?.title ?? ''} ${error?.detail ?? ''} ${error?.message ?? ''} ${error?.error ?? ''}`.toLowerCase();
1344
+ return text.includes('access denied') || text.includes('authentication required') || text.includes('requires authentication');
1345
+ }
1346
+ renderPrintingPressDocsPending() {
1347
+ return html `
1348
+ <div class="printing-press-docs-pending" aria-live="polite">
1349
+ <div class="printing-press-docs-pending-nav" aria-hidden="true">
1350
+ <span></span><span></span><span></span><span></span><span></span>
1351
+ </div>
1352
+ <div class="printing-press-docs-pending-main">
1353
+ <h2>building api docs</h2>
1354
+ <p>Printing Press is preparing the static docs.</p>
1355
+ </div>
1356
+ </div>
1357
+ `;
1358
+ }
834
1359
  handleEditorUpdatedForBundle(event) {
835
1360
  if (event.detail.id === 'spec' && this.isBundled) {
836
1361
  this.bundleController.reset();
@@ -862,6 +1387,7 @@ let TheDoctor = class TheDoctor extends LitElement {
862
1387
  this.modelController.renderedNodeComponent.node = null;
863
1388
  this.sidebarPanel?.showTab('overview');
864
1389
  this.bundleController.reset();
1390
+ this.resetPrintingPressDocsState();
865
1391
  this.isBundled = false;
866
1392
  this.modelTree.isBundled = false;
867
1393
  this.importDisabled = false;
@@ -878,6 +1404,9 @@ let TheDoctor = class TheDoctor extends LitElement {
878
1404
  this.docBag?.set(DefaultDocument, result);
879
1405
  this.diagnosticController.loadStoredDiagnostics();
880
1406
  this.updateWorkspaceReadOnlyState();
1407
+ if (this.selectedEditorTab === 'docs') {
1408
+ this.preloadPrintingPressDocs();
1409
+ }
881
1410
  }).finally(() => {
882
1411
  this.isRebooting = false;
883
1412
  });
@@ -1092,8 +1621,8 @@ let TheDoctor = class TheDoctor extends LitElement {
1092
1621
  }
1093
1622
  return this._controlTabs;
1094
1623
  }
1095
- _showControlTab(panel) {
1096
- this.sidebarPanel?.showTab(panel);
1624
+ _showControlTab(panel, options) {
1625
+ this.sidebarPanel?.showTab(panel, options);
1097
1626
  }
1098
1627
  _getSelectedControlTab() {
1099
1628
  const activeTab = this.sidebarPanel?.tabGroup?.querySelector('sl-tab[active]');
@@ -1108,7 +1637,7 @@ let TheDoctor = class TheDoctor extends LitElement {
1108
1637
  }
1109
1638
  return this._editorTabs;
1110
1639
  }
1111
- _showEditorTab(panel) {
1640
+ _showEditorTab(panel, _options) {
1112
1641
  this.editorPanel?.showTab(panel);
1113
1642
  }
1114
1643
  _getSelectedEditorTab() {
@@ -1123,7 +1652,7 @@ let TheDoctor = class TheDoctor extends LitElement {
1123
1652
  }
1124
1653
  return this._navigatorTabs;
1125
1654
  }
1126
- _showNavigatorTab(panel) {
1655
+ _showNavigatorTab(panel, _options) {
1127
1656
  this.navigatorPanel?.showTab(panel);
1128
1657
  }
1129
1658
  _getSelectedNavigatorTab() {
@@ -1238,7 +1767,8 @@ let TheDoctor = class TheDoctor extends LitElement {
1238
1767
  overlay = html `
1239
1768
  <div class="overlay" @click="return false"></div>`;
1240
1769
  }
1241
- const mainPanelView = html `
1770
+ const docsActive = this.selectedEditorTab === 'docs';
1771
+ const mainPanelView = docsActive ? nothing : html `
1242
1772
  <pb33f-doctor-sidebar-panel
1243
1773
  slot="end"
1244
1774
  role="complementary"
@@ -1265,6 +1795,12 @@ let TheDoctor = class TheDoctor extends LitElement {
1265
1795
  ${this.nukeWorkspace}
1266
1796
  ${this.toastManager}
1267
1797
  ${this.globalTaskView}
1798
+ <pb33f-premium-gate
1799
+ id="printing-press-export-gate"
1800
+ dialogTitle="Show us your credentials, partner"
1801
+ featureName="Export API Docs"
1802
+ featureExplanation="Howdy! In order to export generated API docs, we're going to need you to authenticate first. Tell us who you are, and we will give you a bunch of free credit to use.">
1803
+ </pb33f-premium-gate>
1268
1804
  <sl-dialog open id="loading-overlay" class="dialog-overview"
1269
1805
  style="--width: 30vw" no-header>
1270
1806
  <h3 class="loading">OpenAPI Doctor is booting...</h3>
@@ -1291,7 +1827,7 @@ let TheDoctor = class TheDoctor extends LitElement {
1291
1827
  <div class="doctor">
1292
1828
  ${this.errorBanner}
1293
1829
  ${overlay}
1294
- <sl-split-panel id="explorer-split-panel" class="split-panel-explorer" position="12"
1830
+ <sl-split-panel id="explorer-split-panel" class="split-panel-explorer ${docsActive ? 'docs-takeover' : ''}" position="12"
1295
1831
  @sl-reposition="${this.updateExplorerDivider}">
1296
1832
  <sl-icon id="split-divider-tree" slot="divider" name="grip-vertical" class="divider-vert" aria-hidden="true"></sl-icon>
1297
1833
  <div slot="start" class="model-tree" role="navigation" aria-label="Document navigation">
@@ -1321,7 +1857,7 @@ let TheDoctor = class TheDoctor extends LitElement {
1321
1857
  <div slot="end">
1322
1858
  <sl-split-panel id="inspector-split-panel"
1323
1859
  @sl-reposition="${this.updateInspectorDivider}"
1324
- class="split-panel ${this.unavailable ? 'unavailable' : ''}">
1860
+ class="split-panel ${this.unavailable ? 'unavailable' : ''} ${docsActive ? 'docs-mode' : ''}">
1325
1861
  <sl-icon id="split-divider" slot="divider" name="grip-vertical"
1326
1862
  class="divider-vert" aria-hidden="true"></sl-icon>
1327
1863
  <div class="editor" slot="start" role="main" aria-label="API specification editor">
@@ -1353,7 +1889,7 @@ let TheDoctor = class TheDoctor extends LitElement {
1353
1889
  </div>
1354
1890
  </pb33f-tardis-control>
1355
1891
  ` : nothing}</div>
1356
- <div slot="docs" style="height: 100%">${this.tabCache.shouldRenderEditorTab('docs') ? html `<iframe src="${this.doctorEndpoint}/model/scalar-template?z=${Date.now()}" width="100%" height="100%" style="border: none"></iframe>` : nothing}</div>
1892
+ <div slot="docs" class="docs-slot">${this.renderPrintingPressDocsPanel()}</div>
1357
1893
  <div slot="workspaces">${this.tabCache.shouldRenderEditorTab('workspaces') ? this.workspaceController.workspaceView : nothing}</div>
1358
1894
  </pb33f-doctor-editor-panel>
1359
1895
  </div>
@@ -1408,6 +1944,7 @@ TheDoctor.styles = [theDoctorCss,
1408
1944
  tooltipCss,
1409
1945
  panelsCss,
1410
1946
  nukeCss];
1947
+ TheDoctor.PRINTING_PRESS_DOCS_READY_TIMEOUT_MS = 12000;
1411
1948
  __decorate([
1412
1949
  query('sl-radio-group#export-ruleset-radio')
1413
1950
  ], TheDoctor.prototype, "exportSelection", void 0);
@@ -1417,6 +1954,9 @@ __decorate([
1417
1954
  __decorate([
1418
1955
  query('sl-dialog#loading-overlay')
1419
1956
  ], TheDoctor.prototype, "loadingOverlay", void 0);
1957
+ __decorate([
1958
+ query('pb33f-premium-gate#printing-press-export-gate')
1959
+ ], TheDoctor.prototype, "printingPressExportGate", void 0);
1420
1960
  __decorate([
1421
1961
  query('#url-input-button')
1422
1962
  ], TheDoctor.prototype, "urlInputButton", void 0);
@@ -1504,13 +2044,31 @@ __decorate([
1504
2044
  __decorate([
1505
2045
  state()
1506
2046
  ], TheDoctor.prototype, "isBundled", void 0);
2047
+ __decorate([
2048
+ state()
2049
+ ], TheDoctor.prototype, "printingPressDocsPending", void 0);
2050
+ __decorate([
2051
+ state()
2052
+ ], TheDoctor.prototype, "printingPressDocsUrl", void 0);
2053
+ __decorate([
2054
+ state()
2055
+ ], TheDoctor.prototype, "printingPressDocsReady", void 0);
2056
+ __decorate([
2057
+ state()
2058
+ ], TheDoctor.prototype, "printingPressDocsError", void 0);
2059
+ __decorate([
2060
+ state()
2061
+ ], TheDoctor.prototype, "printingPressDocsAccessDenied", void 0);
2062
+ __decorate([
2063
+ state()
2064
+ ], TheDoctor.prototype, "selectedEditorTab", void 0);
1507
2065
  __decorate([
1508
2066
  state()
1509
2067
  ], TheDoctor.prototype, "rolodexDividerPosition", void 0);
1510
2068
  __decorate([
1511
2069
  state()
1512
2070
  ], TheDoctor.prototype, "currentViewName", void 0);
1513
- TheDoctor = __decorate([
2071
+ TheDoctor = TheDoctor_1 = __decorate([
1514
2072
  customElement("pb33f-doctor")
1515
2073
  ], TheDoctor);
1516
2074
  export { TheDoctor };