@pb33f/cowboy-components 0.14.1 → 0.15.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 (171) hide show
  1. package/dist/{_baseUniq-Co8RB71y.cjs → _baseUniq-CcxAQehO.cjs} +1 -1
  2. package/dist/{_baseUniq-CcG8uZM_.js → _baseUniq-D4rJF50w.js} +1 -1
  3. package/dist/{arc-CZ9OyfV-.js → arc-BBcL5DDo.js} +2 -2
  4. package/dist/{arc-D5LG9aVl.cjs → arc-DRXUQifE.cjs} +1 -1
  5. package/dist/{architecture-YZFGNWBL-CuyaOcgJ.cjs → architecture-YZFGNWBL-3WXQ3I4D.cjs} +1 -1
  6. package/dist/{architecture-YZFGNWBL-ne59NWt0.js → architecture-YZFGNWBL-6bXiGt6C.js} +1 -1
  7. package/dist/{architectureDiagram-Q4EWVU46-CxErVIKm.cjs → architectureDiagram-Q4EWVU46-BTMeQ3OF.cjs} +1 -1
  8. package/dist/{architectureDiagram-Q4EWVU46-ibaXfmmT.js → architectureDiagram-Q4EWVU46-DUvNnA5F.js} +4 -4
  9. package/dist/{blockDiagram-DXYQGD6D-D5vqojm8.js → blockDiagram-DXYQGD6D-DC7S-9ly.js} +6 -6
  10. package/dist/{blockDiagram-DXYQGD6D-iFIpSW7Y.cjs → blockDiagram-DXYQGD6D-DKjoamdG.cjs} +1 -1
  11. package/dist/{c4Diagram-AHTNJAMY-Av_INk2v.cjs → c4Diagram-AHTNJAMY-1cZN1b1j.cjs} +1 -1
  12. package/dist/{c4Diagram-AHTNJAMY-B7t5p6jA.js → c4Diagram-AHTNJAMY-C2HM5L5y.js} +2 -2
  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-BvR-WhLo.js → channel-BKDLVUWb.js} +1 -1
  16. package/dist/{channel-DO31wbvk.cjs → channel-BlCJ7xlY.cjs} +1 -1
  17. package/dist/{chunk-4BX2VUAB-DQ4rU_AZ.js → chunk-4BX2VUAB-CnfyXlfw.js} +1 -1
  18. package/dist/{chunk-4BX2VUAB-DHdTrTTD.cjs → chunk-4BX2VUAB-NW_XCCwP.cjs} +1 -1
  19. package/dist/{chunk-4TB4RGXK-BlskfrH8.cjs → chunk-4TB4RGXK-BJ99eS9b.cjs} +1 -1
  20. package/dist/{chunk-4TB4RGXK-BK_uuzSP.js → chunk-4TB4RGXK-gKPXAguU.js} +5 -5
  21. package/dist/{chunk-55IACEB6-BauZDeFH.js → chunk-55IACEB6-CU9_jSXF.js} +1 -1
  22. package/dist/{chunk-55IACEB6-CRJ5yCrP.cjs → chunk-55IACEB6-DDpMGjZ2.cjs} +1 -1
  23. package/dist/{chunk-EDXVE4YY-BrlRuHp3.cjs → chunk-EDXVE4YY-_kGe71HQ.cjs} +1 -1
  24. package/dist/{chunk-EDXVE4YY-DPpXfrr8.js → chunk-EDXVE4YY-hC5XWKZE.js} +1 -1
  25. package/dist/{chunk-FMBD7UC4-CtyzUnzx.js → chunk-FMBD7UC4-B3Zm2tua.js} +1 -1
  26. package/dist/{chunk-FMBD7UC4-0x38b8wg.cjs → chunk-FMBD7UC4-BeU0NsyZ.cjs} +1 -1
  27. package/dist/{chunk-OYMX7WX6-DU4Zqa7r.cjs → chunk-OYMX7WX6-BS0iw8z2.cjs} +1 -1
  28. package/dist/{chunk-OYMX7WX6-U53KZXxw.js → chunk-OYMX7WX6-N_-WeqFw.js} +3 -3
  29. package/dist/{chunk-QZHKN3VN-Dyhr8mWm.cjs → chunk-QZHKN3VN-BXMAYBIS.cjs} +1 -1
  30. package/dist/{chunk-QZHKN3VN-BhntY1rB.js → chunk-QZHKN3VN-mAIfp7aM.js} +1 -1
  31. package/dist/{chunk-YZCP3GAM--UtgfYoK.js → chunk-YZCP3GAM-BA9Cb_dj.js} +1 -1
  32. package/dist/{chunk-YZCP3GAM-B_2rYHHe.cjs → chunk-YZCP3GAM-yP8Rfi4-.cjs} +1 -1
  33. package/dist/{classDiagram-v2-HSJHXN6E-DX5nDbg5.js → classDiagram-6PBFFD2Q-DmBjAksk.js} +2 -2
  34. package/dist/{classDiagram-6PBFFD2Q-w916JDya.cjs → classDiagram-6PBFFD2Q-SGFXmgLD.cjs} +1 -1
  35. package/dist/{classDiagram-6PBFFD2Q-DX5nDbg5.js → classDiagram-v2-HSJHXN6E-DmBjAksk.js} +2 -2
  36. package/dist/{classDiagram-v2-HSJHXN6E-w916JDya.cjs → classDiagram-v2-HSJHXN6E-SGFXmgLD.cjs} +1 -1
  37. package/dist/clone-HA7BKYTg.cjs +1 -0
  38. package/dist/{clone-DFz4YXr3.js → clone-txbrtOfE.js} +1 -1
  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-pending.css.d.ts +2 -0
  54. package/dist/components/the-doctor/printing-press-docs-pending.css.js +47 -0
  55. package/dist/components/the-doctor/printing-press-docs-pending.d.ts +12 -0
  56. package/dist/components/the-doctor/printing-press-docs-pending.js +41 -0
  57. package/dist/components/the-doctor/printing-press-docs-unavailable.css.d.ts +2 -0
  58. package/dist/components/the-doctor/printing-press-docs-unavailable.css.js +34 -0
  59. package/dist/components/the-doctor/printing-press-docs-unavailable.d.ts +12 -0
  60. package/dist/components/the-doctor/printing-press-docs-unavailable.js +35 -0
  61. package/dist/components/the-doctor/printing-press-export-controls.css.d.ts +2 -0
  62. package/dist/components/the-doctor/printing-press-export-controls.css.js +26 -0
  63. package/dist/components/the-doctor/printing-press-export-controls.d.ts +16 -0
  64. package/dist/components/the-doctor/printing-press-export-controls.js +75 -0
  65. package/dist/components/the-doctor/the-doctor.css.js +101 -8
  66. package/dist/components/the-doctor/the-doctor.d.ts +54 -2
  67. package/dist/components/the-doctor/the-doctor.js +603 -23
  68. package/dist/components/workspaces/workspace-view.d.ts +1 -5
  69. package/dist/components/workspaces/workspace-view.js +4 -11
  70. package/dist/controllers/diagnostic-controller.d.ts +2 -0
  71. package/dist/controllers/diagnostic-controller.js +40 -1
  72. package/dist/controllers/node-clicker-controller.d.ts +2 -3
  73. package/dist/controllers/spec-controller.js +1 -1
  74. package/dist/controllers/workspace-controller.d.ts +1 -2
  75. package/dist/controllers/workspace-controller.js +2 -2
  76. package/dist/{cose-bilkent-S5V4N54A-DcUKlxlF.js → cose-bilkent-S5V4N54A-DBJqJbCC.js} +2 -2
  77. package/dist/{cose-bilkent-S5V4N54A-CKHB3cR8.cjs → cose-bilkent-S5V4N54A-DKrIstpT.cjs} +1 -1
  78. package/dist/{cowboy-components-CxawaKWM.js → cowboy-components-BkbVjFUn.js} +12442 -12772
  79. package/dist/{cowboy-components-CjgqXqkM.cjs → cowboy-components-CC8oMHf-.cjs} +1517 -1637
  80. package/dist/{dagre-KV5264BT-Nl_VfI8a.js → dagre-KV5264BT-6ivm8x2F.js} +5 -5
  81. package/dist/{dagre-KV5264BT-B2JWO01l.cjs → dagre-KV5264BT-DcOLPle_.cjs} +1 -1
  82. package/dist/{diagram-5BDNPKRD-TI1X3fNz.js → diagram-5BDNPKRD-D8TDw4p9.js} +4 -4
  83. package/dist/{diagram-5BDNPKRD-BKI_3vWy.cjs → diagram-5BDNPKRD-blWzHQZ7.cjs} +1 -1
  84. package/dist/{diagram-G4DWMVQ6-CFqOAmuK.js → diagram-G4DWMVQ6-Dn6dxIqX.js} +4 -4
  85. package/dist/{diagram-G4DWMVQ6-DFBdN4sf.cjs → diagram-G4DWMVQ6-fvPAIer2.cjs} +1 -1
  86. package/dist/{diagram-MMDJMWI5-CFuTCrVQ.cjs → diagram-MMDJMWI5-DsAWXLaB.cjs} +1 -1
  87. package/dist/{diagram-MMDJMWI5-BSsV2xaN.js → diagram-MMDJMWI5-DxjVFVuv.js} +3 -3
  88. package/dist/{diagram-TYMM5635-CrgW2ZZO.cjs → diagram-TYMM5635-B4DB8EDE.cjs} +1 -1
  89. package/dist/{diagram-TYMM5635-BP1f-EB_.js → diagram-TYMM5635-BmR3CaLC.js} +3 -3
  90. package/dist/{erDiagram-SMLLAGMA-rVfyZdO4.js → erDiagram-SMLLAGMA-CYtgB5bQ.js} +4 -4
  91. package/dist/{erDiagram-SMLLAGMA-C3caLNRz.cjs → erDiagram-SMLLAGMA-DgaR7ydl.cjs} +1 -1
  92. package/dist/events/doctor.d.ts +2 -0
  93. package/dist/events/doctor.js +2 -0
  94. package/dist/{flowDiagram-DWJPFMVM-DqFXC8zL.js → flowDiagram-DWJPFMVM-BnkLG0fX.js} +6 -6
  95. package/dist/{flowDiagram-DWJPFMVM-Ce_HVRt5.cjs → flowDiagram-DWJPFMVM-lSCRydu7.cjs} +1 -1
  96. package/dist/{ganttDiagram-T4ZO3ILL-HHFgf8w4.cjs → ganttDiagram-T4ZO3ILL-CV7stMVQ.cjs} +1 -1
  97. package/dist/{ganttDiagram-T4ZO3ILL-BmNOX7yf.js → ganttDiagram-T4ZO3ILL-DDbZ3aVk.js} +3 -3
  98. package/dist/{gitGraph-7Q5UKJZL-kCDkIMWc.js → gitGraph-7Q5UKJZL-Bh_-qrDd.js} +1 -1
  99. package/dist/{gitGraph-7Q5UKJZL-DgndfdDH.cjs → gitGraph-7Q5UKJZL-C48W9r-6.cjs} +1 -1
  100. package/dist/{gitGraphDiagram-UUTBAWPF-C-Ahhj_h.js → gitGraphDiagram-UUTBAWPF-7dOdrwvn.js} +4 -4
  101. package/dist/{gitGraphDiagram-UUTBAWPF-DaVjvjth.cjs → gitGraphDiagram-UUTBAWPF-BFDetPjA.cjs} +1 -1
  102. package/dist/{graph-Dfys1tzR.js → graph-BEwWEKyK.js} +2 -2
  103. package/dist/{graph-DyZUkQBU.cjs → graph-CMqpo-tH.cjs} +1 -1
  104. package/dist/{info-OMHHGYJF-Cb_sFFZS.cjs → info-OMHHGYJF-tWjJ6Rfi.cjs} +1 -1
  105. package/dist/info-OMHHGYJF-yksB7HGd.js +5 -0
  106. package/dist/{infoDiagram-42DDH7IO-C09CiT2v.cjs → infoDiagram-42DDH7IO-B-zDHJLg.cjs} +1 -1
  107. package/dist/{infoDiagram-42DDH7IO-BP_YOQpC.js → infoDiagram-42DDH7IO-CbGARbXr.js} +2 -2
  108. package/dist/interfaces/doctor-interfaces.d.ts +10 -2
  109. package/dist/{ishikawaDiagram-UXIWVN3A-DwW6fn0e.js → ishikawaDiagram-UXIWVN3A-DQSJwN_Z.js} +1 -1
  110. package/dist/{ishikawaDiagram-UXIWVN3A-CjAoGU0v.cjs → ishikawaDiagram-UXIWVN3A-qVeMqm60.cjs} +1 -1
  111. package/dist/{journeyDiagram-VCZTEJTY-Bk7z4VA2.js → journeyDiagram-VCZTEJTY-CG--P4FG.js} +4 -4
  112. package/dist/{journeyDiagram-VCZTEJTY-CZnSwt6p.cjs → journeyDiagram-VCZTEJTY-CHaChybV.cjs} +1 -1
  113. package/dist/{kanban-definition-6JOO6SKY-BiN4nM1i.js → kanban-definition-6JOO6SKY-Buc_IGxV.js} +2 -2
  114. package/dist/{kanban-definition-6JOO6SKY-DZF8xgYV.cjs → kanban-definition-6JOO6SKY-C7CBEjZ_.cjs} +1 -1
  115. package/dist/{layout-BDanDonD.js → layout-CKSgi94P.js} +4 -4
  116. package/dist/{layout-rTQtAIwn.cjs → layout-CLgC5_hw.cjs} +1 -1
  117. package/dist/{linear-CuHSYSeN.cjs → linear-BfsPvbL_.cjs} +1 -1
  118. package/dist/{linear-DFB2dCGq.js → linear-BkA_W1oB.js} +1 -1
  119. package/dist/{mermaid-parser.core-CCHvxUQl.js → mermaid-parser.core-BMlbf7rO.js} +13 -13
  120. package/dist/{mermaid-parser.core-fjh_cn2l.cjs → mermaid-parser.core-luq90wBd.cjs} +2 -2
  121. package/dist/{min-rDRC9KDF.js → min-CVydceyS.js} +2 -2
  122. package/dist/{min-h6fs1hPk.cjs → min-Q2bX8h_x.cjs} +1 -1
  123. package/dist/{mindmap-definition-QFDTVHPH-CZMHHnKO.js → mindmap-definition-QFDTVHPH-DOvuLetv.js} +3 -3
  124. package/dist/{mindmap-definition-QFDTVHPH-BbUJ3LHd.cjs → mindmap-definition-QFDTVHPH-znF9YoVM.cjs} +1 -1
  125. package/dist/model/api-response.d.ts +1 -0
  126. package/dist/model/feature-flags.d.ts +1 -0
  127. package/dist/model/feature-flags.js +1 -0
  128. package/dist/model/roundup-stats.d.ts +7 -0
  129. package/dist/{packet-4T2RLAQJ-Bl5gBk4Q.js → packet-4T2RLAQJ-1cYABjJF.js} +1 -1
  130. package/dist/{packet-4T2RLAQJ-BRTuQgpj.cjs → packet-4T2RLAQJ-DXCBVGay.cjs} +1 -1
  131. package/dist/{pie-ZZUOXDRM-BbZyrtOg.cjs → pie-ZZUOXDRM-Bd5PsUhQ.cjs} +1 -1
  132. package/dist/pie-ZZUOXDRM-cNX2KOuy.js +5 -0
  133. package/dist/{pieDiagram-DEJITSTG-BNTE6R98.js → pieDiagram-DEJITSTG-DhMF4gRo.js} +5 -5
  134. package/dist/{pieDiagram-DEJITSTG-BpiMiYGL.cjs → pieDiagram-DEJITSTG-Pt_uCJhK.cjs} +1 -1
  135. package/dist/{quadrantDiagram-34T5L4WZ-JjtOrhxB.js → quadrantDiagram-34T5L4WZ-AM3AGl4y.js} +2 -2
  136. package/dist/{quadrantDiagram-34T5L4WZ-DODOOGae.cjs → quadrantDiagram-34T5L4WZ-DYMJdqM0.cjs} +1 -1
  137. package/dist/radar-PYXPWWZC-B1JaCxpR.js +5 -0
  138. package/dist/{radar-PYXPWWZC-CSH1N71W.cjs → radar-PYXPWWZC-vHL8avm6.cjs} +1 -1
  139. package/dist/{requirementDiagram-MS252O5E-CwV2UGNb.js → requirementDiagram-MS252O5E-6YPm5TWd.js} +3 -3
  140. package/dist/{requirementDiagram-MS252O5E-CjMpy00l.cjs → requirementDiagram-MS252O5E-Bx9DltXy.cjs} +1 -1
  141. package/dist/{sankeyDiagram-XADWPNL6-BzayPzy0.cjs → sankeyDiagram-XADWPNL6-DbrWa1O_.cjs} +1 -1
  142. package/dist/{sankeyDiagram-XADWPNL6-rri4GWAM.js → sankeyDiagram-XADWPNL6-Djyd85aw.js} +1 -1
  143. package/dist/{sequenceDiagram-FGHM5R23-BwBriXF1.js → sequenceDiagram-FGHM5R23-B-n2cTwl.js} +3 -3
  144. package/dist/{sequenceDiagram-FGHM5R23-D-YegsL-.cjs → sequenceDiagram-FGHM5R23-DAb44NgC.cjs} +1 -1
  145. package/dist/services/linting-service.d.ts +1 -0
  146. package/dist/services/linting-service.js +3 -0
  147. package/dist/services/printing-press-service.d.ts +27 -0
  148. package/dist/services/printing-press-service.js +125 -0
  149. package/dist/{stateDiagram-FHFEXIEX-Cq2H2XQO.cjs → stateDiagram-FHFEXIEX-BYBTQ_pK.cjs} +1 -1
  150. package/dist/{stateDiagram-FHFEXIEX-jfwjGp1O.js → stateDiagram-FHFEXIEX-_XKcbiJh.js} +5 -5
  151. package/dist/{stateDiagram-v2-QKLJ7IA2-Bw4Xgr7w.js → stateDiagram-v2-QKLJ7IA2-B9GVD-oD.js} +2 -2
  152. package/dist/{stateDiagram-v2-QKLJ7IA2-DKL73VEs.cjs → stateDiagram-v2-QKLJ7IA2-Bok2OiPQ.cjs} +1 -1
  153. package/dist/{timeline-definition-GMOUNBTQ-CpABxKM5.js → timeline-definition-GMOUNBTQ-BWw9gtnV.js} +2 -2
  154. package/dist/{timeline-definition-GMOUNBTQ-DP1yCayj.cjs → timeline-definition-GMOUNBTQ-BoEUyzb6.cjs} +1 -1
  155. package/dist/{treeView-SZITEDCU-BtaLEQ3S.js → treeView-SZITEDCU-BeYLCd-q.js} +1 -1
  156. package/dist/{treeView-SZITEDCU-BizNBkAv.cjs → treeView-SZITEDCU-D33mqIWv.cjs} +1 -1
  157. package/dist/{treemap-W4RFUUIX-Cbbx2tbB.cjs → treemap-W4RFUUIX-CRpxSKWx.cjs} +1 -1
  158. package/dist/{treemap-W4RFUUIX-CmVVUeZj.js → treemap-W4RFUUIX-D_S9Y3yp.js} +1 -1
  159. package/dist/{vennDiagram-DHZGUBPP-Dv3ZX8SJ.cjs → vennDiagram-DHZGUBPP-BPRTzpYw.cjs} +1 -1
  160. package/dist/{vennDiagram-DHZGUBPP-C0edoxsg.js → vennDiagram-DHZGUBPP-Cc0seIj8.js} +1 -1
  161. package/dist/{wardley-RL74JXVD-BndLe7vL.cjs → wardley-RL74JXVD-DkU-i349.cjs} +1 -1
  162. package/dist/{wardley-RL74JXVD-DdQvN9q5.js → wardley-RL74JXVD-osjJIQZA.js} +1 -1
  163. package/dist/{wardleyDiagram-NUSXRM2D-DCChf1Y2.js → wardleyDiagram-NUSXRM2D-Ci85jUQ0.js} +3 -3
  164. package/dist/{wardleyDiagram-NUSXRM2D-DpluOG7a.cjs → wardleyDiagram-NUSXRM2D-D-zT1fG0.cjs} +1 -1
  165. package/dist/{xychartDiagram-5P7HB3ND-B7y6-7BP.cjs → xychartDiagram-5P7HB3ND-DElLnXxW.cjs} +1 -1
  166. package/dist/{xychartDiagram-5P7HB3ND-BWvz1AY8.js → xychartDiagram-5P7HB3ND-jPkDnp93.js} +3 -3
  167. package/package.json +1 -1
  168. package/dist/clone-D_c-FYGd.cjs +0 -1
  169. package/dist/info-OMHHGYJF-KL9K6Ofp.js +0 -5
  170. package/dist/pie-ZZUOXDRM-CpENjo0C.js +0 -5
  171. 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,9 @@ 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-pending.js';
54
+ import './printing-press-docs-unavailable.js';
55
+ import './printing-press-export-controls.js';
52
56
  import tooltipCss from "../../css/tooltip.css.js";
53
57
  import { NukeWorkspaceComponent } from "./nuke-workspace.js";
54
58
  import { CreditTicker } from "../credit-ticker/credit-ticker.js";
@@ -76,13 +80,14 @@ import { GitHubController } from "../../controllers/github-controller.js";
76
80
  import { DiagramatronController } from "../../controllers/diagramatron-controller.js";
77
81
  import { TimelineController } from "../../controllers/timeline-controller.js";
78
82
  import { BundleController } from "../../controllers/bundle-controller.js";
79
- import { ApiKeyController } from "../../controllers/api-key-controller.js";
83
+ import { PB33F_THEME, DarkTheme } from "../theme-switcher/theme-switcher.js";
84
+ import { PB33F_THEME_CHANGE } from "../../events/theme.js";
80
85
  import '../bundle-toolbar/bundle-toolbar.js';
81
86
  import { WorkspaceService } from '../../services/workspace-service.js';
82
87
  import { WalletService } from '../../services/wallet-service.js';
83
88
  import { GlobalTaskService } from '../../services/global-task-service.js';
84
89
  import { GitHubService } from '../../services/github-service.js';
85
- import { ApiKeyService } from '../../services/api-key-service.js';
90
+ import { PrintingPressService } from '../../services/printing-press-service.js';
86
91
  import { GenericDetailsDrawer } from '../details-drawer/generic-details-drawer.js';
87
92
  import { DrawerContentRegistry } from '../../services/drawer-content-registry.js';
88
93
  import { TabCacheController } from '../../controllers/tab-cache-controller.js';
@@ -128,13 +133,18 @@ export const GitHubStateBag = "pb33f-doctor-github-state";
128
133
  export const DefaultDocument = "pb33f-doctor-document";
129
134
  export const DocumentProblems = "pb33f-doctor-problems";
130
135
  export const DoctorEndpoint = "doctor-endpoint";
131
- let TheDoctor = class TheDoctor extends LitElement {
136
+ let TheDoctor = TheDoctor_1 = class TheDoctor extends LitElement {
132
137
  constructor(doctorEndpoint = "https://doctor.pb33f.io") {
133
138
  super();
134
139
  this.toolsEditorHasContent = false;
135
140
  this.editorDirty = false;
136
141
  this.bundleLoading = false;
137
142
  this.isBundled = false;
143
+ this.printingPressDocsPending = false;
144
+ this.printingPressDocsReady = false;
145
+ this.printingPressDocsAccessDenied = false;
146
+ this.printingPressDocsRetryableError = false;
147
+ this.docsTakeoverApplied = false;
138
148
  // Use ref directives instead of @query for better control
139
149
  this.tardisControlRef = createRef();
140
150
  this.editorRef = createRef();
@@ -168,7 +178,6 @@ let TheDoctor = class TheDoctor extends LitElement {
168
178
  WalletService.doctorEndpoint = this.doctorEndpoint;
169
179
  GlobalTaskService.doctorEndpoint = this.doctorEndpoint;
170
180
  GitHubService.doctorEndpoint = this.doctorEndpoint;
171
- ApiKeyService.doctorEndpoint = this.doctorEndpoint;
172
181
  // bus it up
173
182
  this.bus = CreateBus();
174
183
  this.events = createDoctorEventChannels(this.bus);
@@ -235,12 +244,7 @@ let TheDoctor = class TheDoctor extends LitElement {
235
244
  requestUpdate: () => this.requestUpdate(),
236
245
  getOriginalFileName: () => this.rolodexRootPath || 'openapi'
237
246
  });
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);
247
+ this.workspaceController.initializeView(this.githubController);
244
248
  this.globalTaskView = new GlobalTaskView();
245
249
  //this.globalTaskView.mockMode = true; // Enable mock mode for demo
246
250
  this.globalTaskView.setController(this.globalTaskController);
@@ -388,6 +392,10 @@ let TheDoctor = class TheDoctor extends LitElement {
388
392
  this.addTrackedListener(this, BundleRequested, this.handleBundleRequested.bind(this));
389
393
  this.addTrackedListener(this, BundleDownloadRequested, this.handleBundleDownload.bind(this));
390
394
  this.addTrackedListener(this, BundleCopyRequested, this.handleBundleCopy.bind(this));
395
+ this.addTrackedListener(this, PrintingPressZipExportRequested, this.handlePrintingPressZipExport.bind(this));
396
+ this.addTrackedListener(this, PrintingPressTarballExportRequested, this.handlePrintingPressTarballExport.bind(this));
397
+ this.addTrackedListener(window, 'message', this.handlePrintingPressMessage.bind(this));
398
+ this.addTrackedListener(window, PB33F_THEME_CHANGE, this.handleThemeChangeForPrintingPress.bind(this));
391
399
  // hijack navigation buttons - store reference for cleanup
392
400
  this.popstateHandler = (e) => {
393
401
  const state = e.state;
@@ -448,7 +456,9 @@ let TheDoctor = class TheDoctor extends LitElement {
448
456
  'feedback': 'Feedback'
449
457
  };
450
458
  this.currentViewName = viewNames[tabName] || tabName;
451
- this.managePanelFocus(this.sidebarPanel, tabName);
459
+ if (event.detail.focusPanel !== false) {
460
+ this.managePanelFocus(this.sidebarPanel, tabName);
461
+ }
452
462
  }
453
463
  openSidebar() {
454
464
  if (this.sidebarClosed && this.sidebarPanel) {
@@ -490,6 +500,7 @@ let TheDoctor = class TheDoctor extends LitElement {
490
500
  'spec': 'Specification Editor',
491
501
  'explorer': 'Explorer',
492
502
  'tardis': 'Timeline',
503
+ 'docs': 'API Docs',
493
504
  'workspaces': 'Workspaces'
494
505
  };
495
506
  this.currentViewName = viewNames[tabName] || tabName;
@@ -529,6 +540,7 @@ let TheDoctor = class TheDoctor extends LitElement {
529
540
  case 'docs':
530
541
  this.hideMinimapIcon();
531
542
  this.hideDiagnosisButton();
543
+ this.preloadPrintingPressDocs();
532
544
  break;
533
545
  }
534
546
  }
@@ -661,6 +673,12 @@ let TheDoctor = class TheDoctor extends LitElement {
661
673
  // Don't fetch history here - wait until doctor is fully booted
662
674
  }
663
675
  });
676
+ this.syncDocsTakeoverLayout();
677
+ }
678
+ updated(changedProperties) {
679
+ if (changedProperties.has('selectedEditorTab')) {
680
+ this.syncDocsTakeoverLayout();
681
+ }
664
682
  }
665
683
  disconnectedCallback() {
666
684
  super.disconnectedCallback();
@@ -730,8 +748,54 @@ let TheDoctor = class TheDoctor extends LitElement {
730
748
  sendToast(toast) {
731
749
  this.toastManager.addToastManually(toast);
732
750
  }
733
- updateInspectorDivider() { this.panelDividerManager.updateInspectorDivider(); }
734
- updateExplorerDivider() { this.panelDividerManager.updateExplorerDivider(); }
751
+ updateInspectorDivider() {
752
+ if (this.selectedEditorTab === 'docs')
753
+ return;
754
+ this.panelDividerManager.updateInspectorDivider();
755
+ }
756
+ updateExplorerDivider() {
757
+ if (this.selectedEditorTab === 'docs')
758
+ return;
759
+ this.panelDividerManager.updateExplorerDivider();
760
+ }
761
+ syncDocsTakeoverLayout() {
762
+ const docsActive = this.selectedEditorTab === 'docs';
763
+ const explorerPanel = this.splitPanelExplorer;
764
+ const inspectorPanel = this.splitPanelInspector;
765
+ if (!explorerPanel || !inspectorPanel) {
766
+ return;
767
+ }
768
+ if (docsActive) {
769
+ if (!this.docsTakeoverApplied) {
770
+ this.explorerPositionBeforeDocs = explorerPanel.position > 0 ? explorerPanel.position : 12;
771
+ this.inspectorPositionBeforeDocs = inspectorPanel.position > 0 ? inspectorPanel.position : 50;
772
+ this.docsTakeoverApplied = true;
773
+ }
774
+ explorerPanel.style.setProperty('--min', '0');
775
+ explorerPanel.style.setProperty('--max', '100%');
776
+ explorerPanel.position = 0;
777
+ explorerPanel.disabled = true;
778
+ inspectorPanel.style.setProperty('--min', '0');
779
+ inspectorPanel.style.setProperty('--max', '100%');
780
+ inspectorPanel.position = 100;
781
+ inspectorPanel.disabled = true;
782
+ return;
783
+ }
784
+ if (!this.docsTakeoverApplied) {
785
+ return;
786
+ }
787
+ explorerPanel.style.removeProperty('--min');
788
+ explorerPanel.style.removeProperty('--max');
789
+ explorerPanel.disabled = false;
790
+ explorerPanel.position = this.explorerPositionBeforeDocs ?? 12;
791
+ inspectorPanel.style.removeProperty('--min');
792
+ inspectorPanel.style.removeProperty('--max');
793
+ inspectorPanel.disabled = false;
794
+ inspectorPanel.position = this.inspectorPositionBeforeDocs ?? 50;
795
+ this.docsTakeoverApplied = false;
796
+ this.explorerPositionBeforeDocs = undefined;
797
+ this.inspectorPositionBeforeDocs = undefined;
798
+ }
735
799
  updateRefmapBag(currentPath, result) {
736
800
  let refMap = this.referenceMapBag?.get(ReferenceMapBag);
737
801
  let cp = currentPath ?? "";
@@ -831,6 +895,489 @@ let TheDoctor = class TheDoctor extends LitElement {
831
895
  handleBundleCopy() {
832
896
  this.bundleController.copyToClipboard();
833
897
  }
898
+ async handlePrintingPressZipExport() {
899
+ await this.handlePrintingPressExport('zip');
900
+ }
901
+ async handlePrintingPressTarballExport() {
902
+ await this.handlePrintingPressExport('tar.gz');
903
+ }
904
+ async handlePrintingPressExport(format) {
905
+ try {
906
+ await PrintingPressService.exportDocs(format, this.brokerController?.brokerConnectionId);
907
+ this.sendToast({
908
+ id: crypto.randomUUID(),
909
+ type: ToastType.SUCCESS,
910
+ title: "docs exported",
911
+ body: `Printing Press docs exported as ${format}.`
912
+ });
913
+ }
914
+ catch (error) {
915
+ this.sendToast({
916
+ id: crypto.randomUUID(),
917
+ type: ToastType.ERROR,
918
+ title: "docs export failed",
919
+ body: error?.detail || error?.title || 'Unable to export generated docs.'
920
+ });
921
+ }
922
+ }
923
+ handlePrintingPressTask(taskId) {
924
+ this.clearPrintingPressDocsReadyWatchdog();
925
+ this.printingPressDocsTaskId = taskId;
926
+ this.printingPressDocsPending = true;
927
+ this.printingPressDocsReady = false;
928
+ this.printingPressDocsError = undefined;
929
+ this.printingPressDocsAccessDenied = false;
930
+ this.printingPressDocsRetryableError = false;
931
+ this.printingPressDocsUrl = undefined;
932
+ this.printingPressDocsExpectedOrigin = undefined;
933
+ this.requestUpdate();
934
+ this.globalTaskController.waitForTask(taskId).then(async (task) => {
935
+ if (this.printingPressDocsTaskId !== taskId) {
936
+ return;
937
+ }
938
+ if (task.status !== 'completed') {
939
+ this.printingPressDocsPending = false;
940
+ this.printingPressDocsReady = false;
941
+ this.printingPressDocsUrl = undefined;
942
+ this.printingPressDocsExpectedOrigin = undefined;
943
+ this.printingPressDocsError = task.error || task.message || 'Printing Press failed to build generated docs.';
944
+ this.printingPressDocsAccessDenied = this.isPrintingPressAccessDeniedError(task);
945
+ this.printingPressDocsRetryableError = true;
946
+ this.requestUpdate();
947
+ return;
948
+ }
949
+ await this.loadPrintingPressDocsForTask(taskId);
950
+ });
951
+ }
952
+ preloadPrintingPressDocs(options = {}) {
953
+ this.tabCache.markEditorTabLoaded('docs');
954
+ if (this.printingPressDocsPending && !options.refresh) {
955
+ return;
956
+ }
957
+ if (!options.refresh && this.printingPressDocsUrl && !this.printingPressDocsError) {
958
+ return;
959
+ }
960
+ if (!options.refresh && this.printingPressDocsError && !this.printingPressDocsRetryableError) {
961
+ return;
962
+ }
963
+ this.clearPrintingPressDocsReadyWatchdog();
964
+ const requestId = this.createPrintingPressRequestId();
965
+ this.printingPressDocsTaskId = requestId;
966
+ this.printingPressDocsPending = true;
967
+ this.printingPressDocsReady = false;
968
+ this.printingPressDocsError = undefined;
969
+ this.printingPressDocsAccessDenied = false;
970
+ this.printingPressDocsRetryableError = false;
971
+ this.printingPressDocsUrl = undefined;
972
+ this.printingPressDocsExpectedOrigin = undefined;
973
+ this.requestUpdate();
974
+ void this.loadCurrentPrintingPressDocs(requestId);
975
+ }
976
+ markPrintingPressDocsUnavailable(detail) {
977
+ this.clearPrintingPressDocsReadyWatchdog();
978
+ this.printingPressDocsTaskId = undefined;
979
+ this.printingPressDocsPending = false;
980
+ this.printingPressDocsReady = false;
981
+ this.printingPressDocsError = detail;
982
+ this.printingPressDocsAccessDenied = this.isPrintingPressAccessDeniedError({ detail });
983
+ this.printingPressDocsRetryableError = false;
984
+ this.printingPressDocsUrl = undefined;
985
+ this.printingPressDocsExpectedOrigin = undefined;
986
+ this.requestUpdate();
987
+ }
988
+ resetPrintingPressDocsState() {
989
+ this.clearPrintingPressDocsReadyWatchdog();
990
+ this.printingPressDocsTaskId = undefined;
991
+ this.printingPressDocsPending = false;
992
+ this.printingPressDocsReady = false;
993
+ this.printingPressDocsError = undefined;
994
+ this.printingPressDocsAccessDenied = false;
995
+ this.printingPressDocsRetryableError = false;
996
+ this.printingPressDocsUrl = undefined;
997
+ this.printingPressDocsExpectedOrigin = undefined;
998
+ }
999
+ async loadCurrentPrintingPressDocs(requestId) {
1000
+ try {
1001
+ const brokerId = this.brokerController?.brokerConnectionId;
1002
+ const result = await PrintingPressService.ensureWorkspaceDocs(brokerId);
1003
+ if (this.printingPressDocsTaskId !== requestId) {
1004
+ return;
1005
+ }
1006
+ if (result.status !== 'completed') {
1007
+ if (!result.taskId) {
1008
+ throw new Error('Printing Press did not return a task ID.');
1009
+ }
1010
+ this.handlePrintingPressTask(result.taskId);
1011
+ return;
1012
+ }
1013
+ await this.loadPrintingPressDocsFromResult(requestId, result, brokerId);
1014
+ }
1015
+ catch (error) {
1016
+ if (this.printingPressDocsTaskId !== requestId) {
1017
+ return;
1018
+ }
1019
+ this.printingPressDocsPending = false;
1020
+ this.printingPressDocsReady = false;
1021
+ this.printingPressDocsExpectedOrigin = undefined;
1022
+ this.printingPressDocsError = error?.detail || error?.message || 'Unable to load generated docs.';
1023
+ this.printingPressDocsAccessDenied = this.isPrintingPressAccessDeniedError(error);
1024
+ this.printingPressDocsRetryableError = true;
1025
+ this.requestUpdate();
1026
+ }
1027
+ }
1028
+ async loadPrintingPressDocsForTask(taskId) {
1029
+ try {
1030
+ const brokerId = this.brokerController?.brokerConnectionId;
1031
+ const result = await PrintingPressService.fetchTaskResult(taskId, brokerId);
1032
+ if (this.printingPressDocsTaskId !== taskId) {
1033
+ return;
1034
+ }
1035
+ await this.loadPrintingPressDocsFromResult(taskId, result, brokerId);
1036
+ }
1037
+ catch (error) {
1038
+ if (this.printingPressDocsTaskId !== taskId) {
1039
+ return;
1040
+ }
1041
+ this.printingPressDocsPending = false;
1042
+ this.printingPressDocsReady = false;
1043
+ this.printingPressDocsExpectedOrigin = undefined;
1044
+ this.printingPressDocsError = error?.detail || error?.message || 'Unable to load generated docs.';
1045
+ this.printingPressDocsAccessDenied = this.isPrintingPressAccessDeniedError(error);
1046
+ this.printingPressDocsRetryableError = true;
1047
+ this.requestUpdate();
1048
+ }
1049
+ }
1050
+ async loadPrintingPressDocsFromResult(requestId, result, brokerId) {
1051
+ const docsUrl = result.docsUrl || result.url;
1052
+ if (!docsUrl) {
1053
+ throw new Error('Printing Press did not return a docs URL.');
1054
+ }
1055
+ const absoluteUrl = PrintingPressService.absoluteDocsUrl(docsUrl);
1056
+ const preflight = await PrintingPressService.preflightDocs(absoluteUrl, brokerId);
1057
+ if (this.printingPressDocsTaskId !== requestId) {
1058
+ return;
1059
+ }
1060
+ if (!preflight.ok) {
1061
+ const accessDenied = preflight.status === 401 || preflight.status === 403;
1062
+ this.printingPressDocsPending = false;
1063
+ this.printingPressDocsReady = false;
1064
+ this.printingPressDocsUrl = undefined;
1065
+ this.printingPressDocsExpectedOrigin = undefined;
1066
+ this.printingPressDocsAccessDenied = accessDenied;
1067
+ this.printingPressDocsRetryableError = true;
1068
+ this.printingPressDocsError = accessDenied
1069
+ ? 'Access denied. Sign in with access to this workspace to view these docs.'
1070
+ : `Unable to load generated docs (${preflight.status}).`;
1071
+ this.requestUpdate();
1072
+ return;
1073
+ }
1074
+ this.printingPressDocsUrl = absoluteUrl;
1075
+ try {
1076
+ this.printingPressDocsExpectedOrigin = new URL(absoluteUrl).origin;
1077
+ }
1078
+ catch {
1079
+ this.printingPressDocsExpectedOrigin = undefined;
1080
+ }
1081
+ this.printingPressDocsReady = false;
1082
+ this.printingPressDocsPending = true;
1083
+ this.printingPressDocsError = undefined;
1084
+ this.printingPressDocsAccessDenied = false;
1085
+ this.printingPressDocsRetryableError = false;
1086
+ this.armPrintingPressDocsReadyWatchdog(requestId);
1087
+ this.tabCache.markEditorTabLoaded('docs');
1088
+ this.requestUpdate();
1089
+ }
1090
+ handlePrintingPressMessage(event) {
1091
+ if (!this.printingPressDocsExpectedOrigin) {
1092
+ return;
1093
+ }
1094
+ if (event.origin !== this.printingPressDocsExpectedOrigin) {
1095
+ return;
1096
+ }
1097
+ const frameWindow = this.findPrintingPressIframeWindow();
1098
+ if (!frameWindow || event.source !== frameWindow) {
1099
+ return;
1100
+ }
1101
+ const data = event.data;
1102
+ if (!data || typeof data !== 'object') {
1103
+ return;
1104
+ }
1105
+ if (data.type === 'ppress:ready') {
1106
+ this.clearPrintingPressDocsReadyWatchdog();
1107
+ this.printingPressDocsPending = false;
1108
+ this.printingPressDocsReady = true;
1109
+ this.printingPressDocsError = undefined;
1110
+ this.printingPressDocsAccessDenied = false;
1111
+ this.printingPressDocsRetryableError = false;
1112
+ this.sendCurrentThemeToPrintingPress(event.source);
1113
+ this.sendPrintingPressArchiveControls(event.source);
1114
+ this.requestUpdate();
1115
+ return;
1116
+ }
1117
+ if (data.type === 'ppress:export') {
1118
+ const source = event.source;
1119
+ const requestId = typeof data.requestId === 'number' ? data.requestId : undefined;
1120
+ void this.handlePrintingPressDocumentExport(data.format, data.diagnostics === true, data.llm === true)
1121
+ .then((exported) => {
1122
+ this.sendPrintingPressArchiveExportResult(source, exported, requestId);
1123
+ })
1124
+ .catch((error) => {
1125
+ this.sendPrintingPressArchiveExportResult(source, false, requestId, error?.message);
1126
+ });
1127
+ return;
1128
+ }
1129
+ if (data.type === 'ppress:error') {
1130
+ this.clearPrintingPressDocsReadyWatchdog();
1131
+ this.printingPressDocsPending = false;
1132
+ this.printingPressDocsReady = false;
1133
+ this.printingPressDocsUrl = undefined;
1134
+ this.printingPressDocsExpectedOrigin = undefined;
1135
+ this.printingPressDocsError = data.message || 'Unable to load generated docs.';
1136
+ this.printingPressDocsAccessDenied = data.status === 401 || data.status === 403;
1137
+ this.printingPressDocsRetryableError = true;
1138
+ this.requestUpdate();
1139
+ }
1140
+ }
1141
+ async handlePrintingPressDocumentExport(format, diagnostics = false, llm = false) {
1142
+ const archiveFormat = format === 'tar.gz' ? 'tar.gz' : 'zip';
1143
+ if (!this.printingPressDocsUrl) {
1144
+ this.sendToast({
1145
+ id: crypto.randomUUID(),
1146
+ type: ToastType.ERROR,
1147
+ title: "docs export failed",
1148
+ body: 'Generated docs are not loaded yet.'
1149
+ });
1150
+ return false;
1151
+ }
1152
+ if (!this.authController?.authenticated) {
1153
+ this.openPrintingPressExportGate();
1154
+ return false;
1155
+ }
1156
+ try {
1157
+ await PrintingPressService.exportDocumentDocs(this.printingPressDocsUrl, {
1158
+ format: archiveFormat,
1159
+ diagnostics,
1160
+ llm,
1161
+ brokerId: this.brokerController?.brokerConnectionId
1162
+ });
1163
+ this.sendToast({
1164
+ id: crypto.randomUUID(),
1165
+ type: ToastType.SUCCESS,
1166
+ title: "docs exported",
1167
+ body: `Printing Press docs exported as ${archiveFormat}.`
1168
+ });
1169
+ return true;
1170
+ }
1171
+ catch (error) {
1172
+ if (this.shouldOpenPrintingPressExportGate(error)) {
1173
+ this.openPrintingPressExportGate();
1174
+ return false;
1175
+ }
1176
+ this.sendToast({
1177
+ id: crypto.randomUUID(),
1178
+ type: ToastType.ERROR,
1179
+ title: "docs export failed",
1180
+ body: error?.detail || error?.title || error?.message || 'Unable to export generated docs.'
1181
+ });
1182
+ return false;
1183
+ }
1184
+ }
1185
+ shouldOpenPrintingPressExportGate(error) {
1186
+ const status = Number(error?.status ?? error?.response?.status ?? 0);
1187
+ return status === 401 || (!this.authController?.authenticated && this.isPrintingPressAccessDeniedError(error));
1188
+ }
1189
+ openPrintingPressExportGate() {
1190
+ this.printingPressExportGate?.openGate('unauthenticated');
1191
+ }
1192
+ armPrintingPressDocsReadyWatchdog(taskId) {
1193
+ this.clearPrintingPressDocsReadyWatchdog();
1194
+ this.printingPressDocsReadyTimeout = setTimeout(() => {
1195
+ this.printingPressDocsReadyTimeout = undefined;
1196
+ if (this.printingPressDocsTaskId !== taskId) {
1197
+ return;
1198
+ }
1199
+ if (this.printingPressDocsReady) {
1200
+ return;
1201
+ }
1202
+ this.printingPressDocsPending = false;
1203
+ this.printingPressDocsReady = false;
1204
+ this.printingPressDocsUrl = undefined;
1205
+ this.printingPressDocsExpectedOrigin = undefined;
1206
+ this.printingPressDocsError = 'Generated docs did not finish loading.';
1207
+ this.printingPressDocsAccessDenied = false;
1208
+ this.printingPressDocsRetryableError = true;
1209
+ this.requestUpdate();
1210
+ }, TheDoctor_1.PRINTING_PRESS_DOCS_READY_TIMEOUT_MS);
1211
+ }
1212
+ clearPrintingPressDocsReadyWatchdog() {
1213
+ if (this.printingPressDocsReadyTimeout !== undefined) {
1214
+ clearTimeout(this.printingPressDocsReadyTimeout);
1215
+ this.printingPressDocsReadyTimeout = undefined;
1216
+ }
1217
+ }
1218
+ createPrintingPressRequestNonce() {
1219
+ if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {
1220
+ return crypto.randomUUID();
1221
+ }
1222
+ return `${Date.now()}-${Math.random().toString(36).slice(2)}`;
1223
+ }
1224
+ createPrintingPressRequestId() {
1225
+ return `preload:${this.createPrintingPressRequestNonce()}`;
1226
+ }
1227
+ handlePrintingPressDocsIframeError() {
1228
+ this.clearPrintingPressDocsReadyWatchdog();
1229
+ this.printingPressDocsPending = false;
1230
+ this.printingPressDocsReady = false;
1231
+ this.printingPressDocsUrl = undefined;
1232
+ this.printingPressDocsExpectedOrigin = undefined;
1233
+ this.printingPressDocsError = 'Unable to load generated docs.';
1234
+ this.printingPressDocsAccessDenied = false;
1235
+ this.printingPressDocsRetryableError = true;
1236
+ this.requestUpdate();
1237
+ }
1238
+ handlePrintingPressDocsIframeLoad() {
1239
+ this.sendPrintingPressArchiveControls();
1240
+ window.setTimeout(() => this.sendPrintingPressArchiveControls(), 50);
1241
+ }
1242
+ handleThemeChangeForPrintingPress(event) {
1243
+ const detail = event.detail;
1244
+ if (!detail?.theme) {
1245
+ return;
1246
+ }
1247
+ this.sendThemeToPrintingPress(detail.theme);
1248
+ }
1249
+ sendCurrentThemeToPrintingPress(target) {
1250
+ const stored = (typeof localStorage !== 'undefined' && localStorage.getItem(PB33F_THEME)) || DarkTheme;
1251
+ this.sendThemeToPrintingPress(stored, target ?? undefined);
1252
+ }
1253
+ sendThemeToPrintingPress(theme, target) {
1254
+ if (!this.printingPressDocsExpectedOrigin) {
1255
+ return;
1256
+ }
1257
+ const win = target || this.findPrintingPressIframeWindow();
1258
+ if (!win) {
1259
+ return;
1260
+ }
1261
+ try {
1262
+ win.postMessage({ type: 'doctor:theme', theme }, this.printingPressDocsExpectedOrigin);
1263
+ }
1264
+ catch {
1265
+ // intentional: failure to post a theme update is not user-actionable
1266
+ }
1267
+ }
1268
+ sendPrintingPressArchiveControls(target) {
1269
+ if (!this.printingPressDocsExpectedOrigin) {
1270
+ return;
1271
+ }
1272
+ const win = target || this.findPrintingPressIframeWindow();
1273
+ if (!win) {
1274
+ return;
1275
+ }
1276
+ try {
1277
+ win.postMessage({ type: 'doctor:archive-controls', enabled: true }, this.printingPressDocsExpectedOrigin);
1278
+ }
1279
+ catch {
1280
+ // intentional: export controls are a hosted enhancement, docs remain usable without them
1281
+ }
1282
+ }
1283
+ sendPrintingPressArchiveExportResult(target, exported, requestId, message) {
1284
+ if (!this.printingPressDocsExpectedOrigin) {
1285
+ return;
1286
+ }
1287
+ const win = target || this.findPrintingPressIframeWindow();
1288
+ if (!win) {
1289
+ return;
1290
+ }
1291
+ try {
1292
+ win.postMessage({
1293
+ type: exported ? 'doctor:archive-export-complete' : 'doctor:archive-export-error',
1294
+ requestId,
1295
+ message,
1296
+ }, this.printingPressDocsExpectedOrigin);
1297
+ }
1298
+ catch {
1299
+ // intentional: export status is only used to clear hosted button state
1300
+ }
1301
+ }
1302
+ findPrintingPressIframeWindow() {
1303
+ const root = this.renderRoot ?? this;
1304
+ const iframe = root.querySelector('iframe.printing-press-docs-frame');
1305
+ return iframe?.contentWindow ?? null;
1306
+ }
1307
+ renderPrintingPressDocsPanel() {
1308
+ if (!this.tabCache.shouldRenderEditorTab('docs')) {
1309
+ return nothing;
1310
+ }
1311
+ return html `
1312
+ <div class="printing-press-docs-panel">
1313
+ <div class="printing-press-docs-content">
1314
+ ${this.renderPrintingPressDocs()}
1315
+ </div>
1316
+ </div>
1317
+ `;
1318
+ }
1319
+ renderPrintingPressDocs() {
1320
+ if (!this.tabCache.shouldRenderEditorTab('docs')) {
1321
+ return nothing;
1322
+ }
1323
+ if (this.printingPressDocsError) {
1324
+ if (this.printingPressDocsAccessDenied) {
1325
+ return this.renderPrintingPressAccessDenied();
1326
+ }
1327
+ return html `
1328
+ <pb33f-printing-press-docs-unavailable
1329
+ .detail=${this.printingPressDocsError}>
1330
+ </pb33f-printing-press-docs-unavailable>
1331
+ `;
1332
+ }
1333
+ if (!this.printingPressDocsUrl) {
1334
+ return this.printingPressDocsPending ? this.renderPrintingPressDocsPending() : nothing;
1335
+ }
1336
+ return html `
1337
+ <div class="printing-press-docs-shell">
1338
+ <iframe
1339
+ class="printing-press-docs-frame ${this.printingPressDocsReady ? 'ready' : 'loading'}"
1340
+ src="${this.printingPressDocsUrl}"
1341
+ width="100%"
1342
+ height="100%"
1343
+ style="border: none"
1344
+ @load=${this.handlePrintingPressDocsIframeLoad}
1345
+ @error=${this.handlePrintingPressDocsIframeError}>
1346
+ </iframe>
1347
+ ${this.printingPressDocsPending ? html `
1348
+ <div class="printing-press-docs-overlay">
1349
+ ${this.renderPrintingPressDocsPending()}
1350
+ </div>
1351
+ ` : nothing}
1352
+ </div>
1353
+ `;
1354
+ }
1355
+ renderPrintingPressAccessDenied() {
1356
+ const accessDeniedUrl = new URL('/access-denied', ModelService.doctorEndpoint).toString();
1357
+ return html `
1358
+ <iframe
1359
+ class="printing-press-docs-access-denied-frame"
1360
+ src="${accessDeniedUrl}"
1361
+ width="100%"
1362
+ height="100%"
1363
+ style="border: none"
1364
+ title="access denied">
1365
+ </iframe>
1366
+ `;
1367
+ }
1368
+ isPrintingPressAccessDeniedError(error) {
1369
+ const status = Number(error?.status ?? error?.response?.status ?? 0);
1370
+ if (status === 401 || status === 403) {
1371
+ return true;
1372
+ }
1373
+ const text = `${error?.title ?? ''} ${error?.detail ?? ''} ${error?.message ?? ''} ${error?.error ?? ''}`.toLowerCase();
1374
+ return text.includes('access denied') || text.includes('authentication required') || text.includes('requires authentication');
1375
+ }
1376
+ renderPrintingPressDocsPending() {
1377
+ return html `
1378
+ <pb33f-printing-press-docs-pending></pb33f-printing-press-docs-pending>
1379
+ `;
1380
+ }
834
1381
  handleEditorUpdatedForBundle(event) {
835
1382
  if (event.detail.id === 'spec' && this.isBundled) {
836
1383
  this.bundleController.reset();
@@ -862,6 +1409,7 @@ let TheDoctor = class TheDoctor extends LitElement {
862
1409
  this.modelController.renderedNodeComponent.node = null;
863
1410
  this.sidebarPanel?.showTab('overview');
864
1411
  this.bundleController.reset();
1412
+ this.resetPrintingPressDocsState();
865
1413
  this.isBundled = false;
866
1414
  this.modelTree.isBundled = false;
867
1415
  this.importDisabled = false;
@@ -878,6 +1426,9 @@ let TheDoctor = class TheDoctor extends LitElement {
878
1426
  this.docBag?.set(DefaultDocument, result);
879
1427
  this.diagnosticController.loadStoredDiagnostics();
880
1428
  this.updateWorkspaceReadOnlyState();
1429
+ if (this.selectedEditorTab === 'docs') {
1430
+ this.preloadPrintingPressDocs();
1431
+ }
881
1432
  }).finally(() => {
882
1433
  this.isRebooting = false;
883
1434
  });
@@ -1092,8 +1643,8 @@ let TheDoctor = class TheDoctor extends LitElement {
1092
1643
  }
1093
1644
  return this._controlTabs;
1094
1645
  }
1095
- _showControlTab(panel) {
1096
- this.sidebarPanel?.showTab(panel);
1646
+ _showControlTab(panel, options) {
1647
+ this.sidebarPanel?.showTab(panel, options);
1097
1648
  }
1098
1649
  _getSelectedControlTab() {
1099
1650
  const activeTab = this.sidebarPanel?.tabGroup?.querySelector('sl-tab[active]');
@@ -1108,7 +1659,7 @@ let TheDoctor = class TheDoctor extends LitElement {
1108
1659
  }
1109
1660
  return this._editorTabs;
1110
1661
  }
1111
- _showEditorTab(panel) {
1662
+ _showEditorTab(panel, _options) {
1112
1663
  this.editorPanel?.showTab(panel);
1113
1664
  }
1114
1665
  _getSelectedEditorTab() {
@@ -1123,7 +1674,7 @@ let TheDoctor = class TheDoctor extends LitElement {
1123
1674
  }
1124
1675
  return this._navigatorTabs;
1125
1676
  }
1126
- _showNavigatorTab(panel) {
1677
+ _showNavigatorTab(panel, _options) {
1127
1678
  this.navigatorPanel?.showTab(panel);
1128
1679
  }
1129
1680
  _getSelectedNavigatorTab() {
@@ -1238,7 +1789,8 @@ let TheDoctor = class TheDoctor extends LitElement {
1238
1789
  overlay = html `
1239
1790
  <div class="overlay" @click="return false"></div>`;
1240
1791
  }
1241
- const mainPanelView = html `
1792
+ const docsActive = this.selectedEditorTab === 'docs';
1793
+ const mainPanelView = docsActive ? nothing : html `
1242
1794
  <pb33f-doctor-sidebar-panel
1243
1795
  slot="end"
1244
1796
  role="complementary"
@@ -1265,6 +1817,12 @@ let TheDoctor = class TheDoctor extends LitElement {
1265
1817
  ${this.nukeWorkspace}
1266
1818
  ${this.toastManager}
1267
1819
  ${this.globalTaskView}
1820
+ <pb33f-premium-gate
1821
+ id="printing-press-export-gate"
1822
+ dialogTitle="Show us your credentials, partner"
1823
+ featureName="Export API Docs"
1824
+ 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.">
1825
+ </pb33f-premium-gate>
1268
1826
  <sl-dialog open id="loading-overlay" class="dialog-overview"
1269
1827
  style="--width: 30vw" no-header>
1270
1828
  <h3 class="loading">OpenAPI Doctor is booting...</h3>
@@ -1291,7 +1849,7 @@ let TheDoctor = class TheDoctor extends LitElement {
1291
1849
  <div class="doctor">
1292
1850
  ${this.errorBanner}
1293
1851
  ${overlay}
1294
- <sl-split-panel id="explorer-split-panel" class="split-panel-explorer" position="12"
1852
+ <sl-split-panel id="explorer-split-panel" class="split-panel-explorer ${docsActive ? 'docs-takeover' : ''}" position="12"
1295
1853
  @sl-reposition="${this.updateExplorerDivider}">
1296
1854
  <sl-icon id="split-divider-tree" slot="divider" name="grip-vertical" class="divider-vert" aria-hidden="true"></sl-icon>
1297
1855
  <div slot="start" class="model-tree" role="navigation" aria-label="Document navigation">
@@ -1321,7 +1879,7 @@ let TheDoctor = class TheDoctor extends LitElement {
1321
1879
  <div slot="end">
1322
1880
  <sl-split-panel id="inspector-split-panel"
1323
1881
  @sl-reposition="${this.updateInspectorDivider}"
1324
- class="split-panel ${this.unavailable ? 'unavailable' : ''}">
1882
+ class="split-panel ${this.unavailable ? 'unavailable' : ''} ${docsActive ? 'docs-mode' : ''}">
1325
1883
  <sl-icon id="split-divider" slot="divider" name="grip-vertical"
1326
1884
  class="divider-vert" aria-hidden="true"></sl-icon>
1327
1885
  <div class="editor" slot="start" role="main" aria-label="API specification editor">
@@ -1353,7 +1911,7 @@ let TheDoctor = class TheDoctor extends LitElement {
1353
1911
  </div>
1354
1912
  </pb33f-tardis-control>
1355
1913
  ` : 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>
1914
+ <div slot="docs" class="docs-slot">${this.renderPrintingPressDocsPanel()}</div>
1357
1915
  <div slot="workspaces">${this.tabCache.shouldRenderEditorTab('workspaces') ? this.workspaceController.workspaceView : nothing}</div>
1358
1916
  </pb33f-doctor-editor-panel>
1359
1917
  </div>
@@ -1408,6 +1966,7 @@ TheDoctor.styles = [theDoctorCss,
1408
1966
  tooltipCss,
1409
1967
  panelsCss,
1410
1968
  nukeCss];
1969
+ TheDoctor.PRINTING_PRESS_DOCS_READY_TIMEOUT_MS = 12000;
1411
1970
  __decorate([
1412
1971
  query('sl-radio-group#export-ruleset-radio')
1413
1972
  ], TheDoctor.prototype, "exportSelection", void 0);
@@ -1417,6 +1976,9 @@ __decorate([
1417
1976
  __decorate([
1418
1977
  query('sl-dialog#loading-overlay')
1419
1978
  ], TheDoctor.prototype, "loadingOverlay", void 0);
1979
+ __decorate([
1980
+ query('pb33f-premium-gate#printing-press-export-gate')
1981
+ ], TheDoctor.prototype, "printingPressExportGate", void 0);
1420
1982
  __decorate([
1421
1983
  query('#url-input-button')
1422
1984
  ], TheDoctor.prototype, "urlInputButton", void 0);
@@ -1504,13 +2066,31 @@ __decorate([
1504
2066
  __decorate([
1505
2067
  state()
1506
2068
  ], TheDoctor.prototype, "isBundled", void 0);
2069
+ __decorate([
2070
+ state()
2071
+ ], TheDoctor.prototype, "printingPressDocsPending", void 0);
2072
+ __decorate([
2073
+ state()
2074
+ ], TheDoctor.prototype, "printingPressDocsUrl", void 0);
2075
+ __decorate([
2076
+ state()
2077
+ ], TheDoctor.prototype, "printingPressDocsReady", void 0);
2078
+ __decorate([
2079
+ state()
2080
+ ], TheDoctor.prototype, "printingPressDocsError", void 0);
2081
+ __decorate([
2082
+ state()
2083
+ ], TheDoctor.prototype, "printingPressDocsAccessDenied", void 0);
2084
+ __decorate([
2085
+ state()
2086
+ ], TheDoctor.prototype, "selectedEditorTab", void 0);
1507
2087
  __decorate([
1508
2088
  state()
1509
2089
  ], TheDoctor.prototype, "rolodexDividerPosition", void 0);
1510
2090
  __decorate([
1511
2091
  state()
1512
2092
  ], TheDoctor.prototype, "currentViewName", void 0);
1513
- TheDoctor = __decorate([
2093
+ TheDoctor = TheDoctor_1 = __decorate([
1514
2094
  customElement("pb33f-doctor")
1515
2095
  ], TheDoctor);
1516
2096
  export { TheDoctor };