@openc3/vue-common 6.7.0 → 6.8.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 (416) hide show
  1. package/dist/{ArrayWidget-B__t3xOt.cjs → ArrayWidget-CiW5R8HE.cjs} +2 -2
  2. package/dist/{ArrayWidget-B__t3xOt.cjs.map → ArrayWidget-CiW5R8HE.cjs.map} +1 -1
  3. package/dist/{ArrayWidget-BSG8KEtf.js → ArrayWidget-FGjLmPfG.js} +4 -4
  4. package/dist/{ArrayWidget-BSG8KEtf.js.map → ArrayWidget-FGjLmPfG.js.map} +1 -1
  5. package/dist/{ArrayplotWidget-WVu76Kqn.js → ArrayplotWidget-Cfo18TYm.js} +7 -7
  6. package/dist/{ArrayplotWidget-WVu76Kqn.js.map → ArrayplotWidget-Cfo18TYm.js.map} +1 -1
  7. package/dist/{ArrayplotWidget-BduWyJlL.cjs → ArrayplotWidget-V5C4JRhx.cjs} +2 -2
  8. package/dist/{ArrayplotWidget-BduWyJlL.cjs.map → ArrayplotWidget-V5C4JRhx.cjs.map} +1 -1
  9. package/dist/{BarColumn-DVn9f2WO.cjs → BarColumn-B4naVXS_.cjs} +2 -2
  10. package/dist/{BarColumn-DVn9f2WO.cjs.map → BarColumn-B4naVXS_.cjs.map} +1 -1
  11. package/dist/{BarColumn-Cflh9pUz.js → BarColumn-BuJ6MTYG.js} +3 -3
  12. package/dist/{BarColumn-Cflh9pUz.js.map → BarColumn-BuJ6MTYG.js.map} +1 -1
  13. package/dist/{BlockWidget-CRqA09Ve.cjs → BlockWidget-BJWENVXd.cjs} +2 -2
  14. package/dist/{BlockWidget-CRqA09Ve.cjs.map → BlockWidget-BJWENVXd.cjs.map} +1 -1
  15. package/dist/{BlockWidget-B7ryWGCq.js → BlockWidget-B_JwY8-N.js} +4 -4
  16. package/dist/{BlockWidget-B7ryWGCq.js.map → BlockWidget-B_JwY8-N.js.map} +1 -1
  17. package/dist/{ButtonWidget-Bb46aUCR.cjs → ButtonWidget-C2IS6q9D.cjs} +3 -3
  18. package/dist/{ButtonWidget-Bb46aUCR.cjs.map → ButtonWidget-C2IS6q9D.cjs.map} +1 -1
  19. package/dist/{ButtonWidget-BKih3ix9.js → ButtonWidget-Cd4M3aBD.js} +18 -22
  20. package/dist/{ButtonWidget-BKih3ix9.js.map → ButtonWidget-Cd4M3aBD.js.map} +1 -1
  21. package/dist/{CanvasWidget-DT_vPAoc.cjs → CanvasWidget-BIIhyH_l.cjs} +2 -2
  22. package/dist/{CanvasWidget-DT_vPAoc.cjs.map → CanvasWidget-BIIhyH_l.cjs.map} +1 -1
  23. package/dist/{CanvasWidget-DT9xMSfb.js → CanvasWidget-CpKdOgTG.js} +2 -2
  24. package/dist/{CanvasWidget-DT9xMSfb.js.map → CanvasWidget-CpKdOgTG.js.map} +1 -1
  25. package/dist/{CanvasdotWidget-DNSQriVo.cjs → CanvasdotWidget-BVlIdbvL.cjs} +2 -2
  26. package/dist/{CanvasdotWidget-DNSQriVo.cjs.map → CanvasdotWidget-BVlIdbvL.cjs.map} +1 -1
  27. package/dist/{CanvasdotWidget-7H5Hvcn-.js → CanvasdotWidget-zYbI5LAw.js} +2 -2
  28. package/dist/{CanvasdotWidget-7H5Hvcn-.js.map → CanvasdotWidget-zYbI5LAw.js.map} +1 -1
  29. package/dist/{CanvasimageWidget-BbWYx6Gj.js → CanvasimageWidget--ORQEPj6.js} +3 -3
  30. package/dist/{CanvasimageWidget-BbWYx6Gj.js.map → CanvasimageWidget--ORQEPj6.js.map} +1 -1
  31. package/dist/{CanvasimageWidget-CfleScIF.cjs → CanvasimageWidget-SNXRh4TB.cjs} +2 -2
  32. package/dist/{CanvasimageWidget-CfleScIF.cjs.map → CanvasimageWidget-SNXRh4TB.cjs.map} +1 -1
  33. package/dist/{CanvasimagevalueWidget-Blvoe2X4.js → CanvasimagevalueWidget-CtAtYHRm.js} +3 -3
  34. package/dist/{CanvasimagevalueWidget-Blvoe2X4.js.map → CanvasimagevalueWidget-CtAtYHRm.js.map} +1 -1
  35. package/dist/{CanvasimagevalueWidget-ouM4DBeD.cjs → CanvasimagevalueWidget-DcXjMEYO.cjs} +2 -2
  36. package/dist/{CanvasimagevalueWidget-ouM4DBeD.cjs.map → CanvasimagevalueWidget-DcXjMEYO.cjs.map} +1 -1
  37. package/dist/{CanvaslabelWidget-DB3qox5N.cjs → CanvaslabelWidget-8MMfV594.cjs} +2 -2
  38. package/dist/{CanvaslabelWidget-DB3qox5N.cjs.map → CanvaslabelWidget-8MMfV594.cjs.map} +1 -1
  39. package/dist/{CanvaslabelWidget-BPx_Rm4o.js → CanvaslabelWidget-DWoROb6o.js} +2 -2
  40. package/dist/{CanvaslabelWidget-BPx_Rm4o.js.map → CanvaslabelWidget-DWoROb6o.js.map} +1 -1
  41. package/dist/{CanvaslabelvalueWidget-DzdWvL0W.js → CanvaslabelvalueWidget-A4UbtwEc.js} +2 -2
  42. package/dist/{CanvaslabelvalueWidget-DzdWvL0W.js.map → CanvaslabelvalueWidget-A4UbtwEc.js.map} +1 -1
  43. package/dist/{CanvaslabelvalueWidget-2k6TjSNj.cjs → CanvaslabelvalueWidget-hDxHrErw.cjs} +2 -2
  44. package/dist/{CanvaslabelvalueWidget-2k6TjSNj.cjs.map → CanvaslabelvalueWidget-hDxHrErw.cjs.map} +1 -1
  45. package/dist/{CanvaslineWidget-CqskilGk.js → CanvaslineWidget-BBGi0nrb.js} +2 -2
  46. package/dist/{CanvaslineWidget-CqskilGk.js.map → CanvaslineWidget-BBGi0nrb.js.map} +1 -1
  47. package/dist/{CanvaslineWidget-oAoznYZP.cjs → CanvaslineWidget-grGKrpPw.cjs} +2 -2
  48. package/dist/{CanvaslineWidget-oAoznYZP.cjs.map → CanvaslineWidget-grGKrpPw.cjs.map} +1 -1
  49. package/dist/{CanvaslinevalueWidget-C0JIKdvZ.js → CanvaslinevalueWidget-C_9OkL7f.js} +2 -2
  50. package/dist/{CanvaslinevalueWidget-C0JIKdvZ.js.map → CanvaslinevalueWidget-C_9OkL7f.js.map} +1 -1
  51. package/dist/{CanvaslinevalueWidget-BmyIxGNz.cjs → CanvaslinevalueWidget-DMIWLqT-.cjs} +2 -2
  52. package/dist/{CanvaslinevalueWidget-BmyIxGNz.cjs.map → CanvaslinevalueWidget-DMIWLqT-.cjs.map} +1 -1
  53. package/dist/{CheckbuttonWidget-C548xrRy.cjs → CheckbuttonWidget-BMYkeGyw.cjs} +2 -2
  54. package/dist/{CheckbuttonWidget-C548xrRy.cjs.map → CheckbuttonWidget-BMYkeGyw.cjs.map} +1 -1
  55. package/dist/{CheckbuttonWidget-C9FbJx2v.js → CheckbuttonWidget-CTJg8Ypg.js} +2 -2
  56. package/dist/{CheckbuttonWidget-C9FbJx2v.js.map → CheckbuttonWidget-CTJg8Ypg.js.map} +1 -1
  57. package/dist/{ClassificationBanners-BTdLBSfy.cjs → ClassificationBanners-De_CDp9I.cjs} +2 -2
  58. package/dist/{ClassificationBanners-BTdLBSfy.cjs.map → ClassificationBanners-De_CDp9I.cjs.map} +1 -1
  59. package/dist/{ClassificationBanners-CgJiwgTp.js → ClassificationBanners-Dz5-_h_0.js} +2 -2
  60. package/dist/{ClassificationBanners-CgJiwgTp.js.map → ClassificationBanners-Dz5-_h_0.js.map} +1 -1
  61. package/dist/{ComboboxWidget-AErojGw0.cjs → ComboboxWidget-CZMUsBRC.cjs} +2 -2
  62. package/dist/{ComboboxWidget-AErojGw0.cjs.map → ComboboxWidget-CZMUsBRC.cjs.map} +1 -1
  63. package/dist/{ComboboxWidget-BbNKT0s8.js → ComboboxWidget-DWiMZZk8.js} +2 -2
  64. package/dist/{ComboboxWidget-BbNKT0s8.js.map → ComboboxWidget-DWiMZZk8.js.map} +1 -1
  65. package/dist/CriticalCmdDialog-ByiHBnFL.cjs +2 -0
  66. package/dist/{CriticalCmdDialog-N06JxCHg.cjs.map → CriticalCmdDialog-ByiHBnFL.cjs.map} +1 -1
  67. package/dist/{CriticalCmdDialog-CF7Sqjdm.js → CriticalCmdDialog-CD72VN-P.js} +10 -13
  68. package/dist/{CriticalCmdDialog-CF7Sqjdm.js.map → CriticalCmdDialog-CD72VN-P.js.map} +1 -1
  69. package/dist/{DateWidget-CBMsdRUE.js → DateWidget-C7GSh68_.js} +2 -2
  70. package/dist/{DateWidget-CBMsdRUE.js.map → DateWidget-C7GSh68_.js.map} +1 -1
  71. package/dist/{DateWidget-CCIkDM9_.cjs → DateWidget-CR4OfvjB.cjs} +2 -2
  72. package/dist/{DateWidget-CCIkDM9_.cjs.map → DateWidget-CR4OfvjB.cjs.map} +1 -1
  73. package/dist/{DetailsDialog-DRVahE5z.js → DetailsDialog-B2l0BNc2.js} +126 -158
  74. package/dist/{DetailsDialog-DRVahE5z.js.map → DetailsDialog-B2l0BNc2.js.map} +1 -1
  75. package/dist/DetailsDialog-CrfaoIk5.cjs +2 -0
  76. package/dist/{DetailsDialog-CVYBgZll.cjs.map → DetailsDialog-CrfaoIk5.cjs.map} +1 -1
  77. package/dist/{EventListDialog-DDWL9gIQ.js → EventListDialog-1NXp1MLg.js} +53 -68
  78. package/dist/{EventListDialog-DDWL9gIQ.js.map → EventListDialog-1NXp1MLg.js.map} +1 -1
  79. package/dist/EventListDialog-BwSJXEhw.cjs +2 -0
  80. package/dist/{EventListDialog-CjYLRdkb.cjs.map → EventListDialog-BwSJXEhw.cjs.map} +1 -1
  81. package/dist/{FormatvalueWidget-BLWsqhIZ.js → FormatvalueWidget-CZJdsUAq.js} +3 -3
  82. package/dist/{FormatvalueWidget-BLWsqhIZ.js.map → FormatvalueWidget-CZJdsUAq.js.map} +1 -1
  83. package/dist/{FormatvalueWidget-BiaqheLJ.cjs → FormatvalueWidget-zoY5Fzwr.cjs} +2 -2
  84. package/dist/{FormatvalueWidget-BiaqheLJ.cjs.map → FormatvalueWidget-zoY5Fzwr.cjs.map} +1 -1
  85. package/dist/Graph-BuKXPKyK.cjs +2 -0
  86. package/dist/Graph-BuKXPKyK.cjs.map +1 -0
  87. package/dist/{Graph-BiU56Qj2.js → Graph-DZBpdSgR.js} +384 -391
  88. package/dist/Graph-DZBpdSgR.js.map +1 -0
  89. package/dist/{GraphWidget-Ga0AEfrJ.js → GraphWidget-CHm4bhMI.js} +2 -2
  90. package/dist/{GraphWidget-Ga0AEfrJ.js.map → GraphWidget-CHm4bhMI.js.map} +1 -1
  91. package/dist/{GraphWidget-cfgX_skM.cjs → GraphWidget-P-EUkwbI.cjs} +2 -2
  92. package/dist/{GraphWidget-cfgX_skM.cjs.map → GraphWidget-P-EUkwbI.cjs.map} +1 -1
  93. package/dist/{HorizontalWidget-i6aqMSRv.cjs → HorizontalWidget-1Gd93-D7.cjs} +2 -2
  94. package/dist/{HorizontalWidget-i6aqMSRv.cjs.map → HorizontalWidget-1Gd93-D7.cjs.map} +1 -1
  95. package/dist/{HorizontalWidget-CsVhLwZO.js → HorizontalWidget-B2skpV1m.js} +2 -2
  96. package/dist/{HorizontalWidget-CsVhLwZO.js.map → HorizontalWidget-B2skpV1m.js.map} +1 -1
  97. package/dist/{HorizontalboxWidget-xC6PADl3.js → HorizontalboxWidget-BI0WZP5M.js} +5 -5
  98. package/dist/{HorizontalboxWidget-xC6PADl3.js.map → HorizontalboxWidget-BI0WZP5M.js.map} +1 -1
  99. package/dist/{HorizontalboxWidget-B_S8mswF.cjs → HorizontalboxWidget-CHFz7lCJ.cjs} +2 -2
  100. package/dist/{HorizontalboxWidget-B_S8mswF.cjs.map → HorizontalboxWidget-CHFz7lCJ.cjs.map} +1 -1
  101. package/dist/{HorizontallineWidget-NZIxmRVN.js → HorizontallineWidget-AmxVeXcU.js} +2 -2
  102. package/dist/{HorizontallineWidget-NZIxmRVN.js.map → HorizontallineWidget-AmxVeXcU.js.map} +1 -1
  103. package/dist/{HorizontallineWidget-Cpys-185.cjs → HorizontallineWidget-CCuEqHsc.cjs} +2 -2
  104. package/dist/{HorizontallineWidget-Cpys-185.cjs.map → HorizontallineWidget-CCuEqHsc.cjs.map} +1 -1
  105. package/dist/{IframeWidget-CCdvd8rg.cjs → IframeWidget-DG7yUYb3.cjs} +2 -2
  106. package/dist/{IframeWidget-CCdvd8rg.cjs.map → IframeWidget-DG7yUYb3.cjs.map} +1 -1
  107. package/dist/{IframeWidget-BgzjSfag.js → IframeWidget-DcqRMhyW.js} +2 -2
  108. package/dist/{IframeWidget-BgzjSfag.js.map → IframeWidget-DcqRMhyW.js.map} +1 -1
  109. package/dist/{ImageLoader-BIKl6vGc.cjs → ImageLoader-BaDVKIBu.cjs} +2 -2
  110. package/dist/{ImageLoader-BIKl6vGc.cjs.map → ImageLoader-BaDVKIBu.cjs.map} +1 -1
  111. package/dist/{ImageLoader-DbFVK1Ui.js → ImageLoader-ly4zoGpO.js} +2 -2
  112. package/dist/{ImageLoader-DbFVK1Ui.js.map → ImageLoader-ly4zoGpO.js.map} +1 -1
  113. package/dist/{ImageviewerWidget-lnralJZa.cjs → ImageviewerWidget-BgMpAFvG.cjs} +2 -2
  114. package/dist/{ImageviewerWidget-lnralJZa.cjs.map → ImageviewerWidget-BgMpAFvG.cjs.map} +1 -1
  115. package/dist/{ImageviewerWidget-BnT5m-nw.js → ImageviewerWidget-cmDHcmW4.js} +2 -2
  116. package/dist/{ImageviewerWidget-BnT5m-nw.js.map → ImageviewerWidget-cmDHcmW4.js.map} +1 -1
  117. package/dist/{InterfacesTab-Cd_RITVP.js → InterfacesTab-BSCFzmW1.js} +6 -6
  118. package/dist/{InterfacesTab-Cd_RITVP.js.map → InterfacesTab-BSCFzmW1.js.map} +1 -1
  119. package/dist/{InterfacesTab-DjlzjJYG.cjs → InterfacesTab-K7odu5gi.cjs} +2 -2
  120. package/dist/{InterfacesTab-DjlzjJYG.cjs.map → InterfacesTab-K7odu5gi.cjs.map} +1 -1
  121. package/dist/{LabelWidget-DSDYmz6X.js → LabelWidget-Bemw8Erq.js} +2 -2
  122. package/dist/{LabelWidget-DSDYmz6X.js.map → LabelWidget-Bemw8Erq.js.map} +1 -1
  123. package/dist/{LabelWidget-CRHSFVPT.cjs → LabelWidget-D6B4JzLR.cjs} +2 -2
  124. package/dist/{LabelWidget-CRHSFVPT.cjs.map → LabelWidget-D6B4JzLR.cjs.map} +1 -1
  125. package/dist/{LabelledWidget-DMb-myxs.js → LabelledWidget-Cb7EvtUG.js} +4 -4
  126. package/dist/{LabelledWidget-DMb-myxs.js.map → LabelledWidget-Cb7EvtUG.js.map} +1 -1
  127. package/dist/{LabelledWidget-BXf9cTf_.cjs → LabelledWidget-Dg1pZiON.cjs} +2 -2
  128. package/dist/{LabelledWidget-BXf9cTf_.cjs.map → LabelledWidget-Dg1pZiON.cjs.map} +1 -1
  129. package/dist/{LabelprogressbarWidget-BNHaAUXq.cjs → LabelprogressbarWidget-DrVVuiXa.cjs} +2 -2
  130. package/dist/{LabelprogressbarWidget-BNHaAUXq.cjs.map → LabelprogressbarWidget-DrVVuiXa.cjs.map} +1 -1
  131. package/dist/{LabelprogressbarWidget-CkjDJBao.js → LabelprogressbarWidget-qYgrGqLY.js} +4 -4
  132. package/dist/{LabelprogressbarWidget-CkjDJBao.js.map → LabelprogressbarWidget-qYgrGqLY.js.map} +1 -1
  133. package/dist/{LabelsparklineWidget-BpHMkt-L.cjs → LabelsparklineWidget-Bht80Ncq.cjs} +2 -2
  134. package/dist/{LabelsparklineWidget-BpHMkt-L.cjs.map → LabelsparklineWidget-Bht80Ncq.cjs.map} +1 -1
  135. package/dist/{LabelsparklineWidget-DBYPFz3Y.js → LabelsparklineWidget-CMklq9-f.js} +4 -4
  136. package/dist/{LabelsparklineWidget-DBYPFz3Y.js.map → LabelsparklineWidget-CMklq9-f.js.map} +1 -1
  137. package/dist/{LabelvalueWidget-BFHYb64m.cjs → LabelvalueWidget-DKx6dV8b.cjs} +2 -2
  138. package/dist/{LabelvalueWidget-BFHYb64m.cjs.map → LabelvalueWidget-DKx6dV8b.cjs.map} +1 -1
  139. package/dist/{LabelvalueWidget-DlTkJC4i.js → LabelvalueWidget-NjCMgiYL.js} +4 -4
  140. package/dist/{LabelvalueWidget-DlTkJC4i.js.map → LabelvalueWidget-NjCMgiYL.js.map} +1 -1
  141. package/dist/{LabelvaluedescWidget-CUld9MqE.cjs → LabelvaluedescWidget-D8N6KdzA.cjs} +2 -2
  142. package/dist/{LabelvaluedescWidget-CUld9MqE.cjs.map → LabelvaluedescWidget-D8N6KdzA.cjs.map} +1 -1
  143. package/dist/{LabelvaluedescWidget-dRqnGZub.js → LabelvaluedescWidget-Dflulqm7.js} +10 -10
  144. package/dist/{LabelvaluedescWidget-dRqnGZub.js.map → LabelvaluedescWidget-Dflulqm7.js.map} +1 -1
  145. package/dist/{LabelvaluelimitsbarWidget-Br_PXH0r.cjs → LabelvaluelimitsbarWidget-DbwVdsfd.cjs} +2 -2
  146. package/dist/{LabelvaluelimitsbarWidget-Br_PXH0r.cjs.map → LabelvaluelimitsbarWidget-DbwVdsfd.cjs.map} +1 -1
  147. package/dist/{LabelvaluelimitsbarWidget-CS4NAPJ1.js → LabelvaluelimitsbarWidget-M34NDk2S.js} +4 -4
  148. package/dist/{LabelvaluelimitsbarWidget-CS4NAPJ1.js.map → LabelvaluelimitsbarWidget-M34NDk2S.js.map} +1 -1
  149. package/dist/{LabelvaluelimitscolumnWidget-DjLG10C5.cjs → LabelvaluelimitscolumnWidget-1LXrtBFT.cjs} +2 -2
  150. package/dist/{LabelvaluelimitscolumnWidget-DjLG10C5.cjs.map → LabelvaluelimitscolumnWidget-1LXrtBFT.cjs.map} +1 -1
  151. package/dist/{LabelvaluelimitscolumnWidget-D9x4Ppv8.js → LabelvaluelimitscolumnWidget-Cchaw_-k.js} +5 -5
  152. package/dist/{LabelvaluelimitscolumnWidget-D9x4Ppv8.js.map → LabelvaluelimitscolumnWidget-Cchaw_-k.js.map} +1 -1
  153. package/dist/{LabelvaluerangebarWidget-Dhyng4-n.js → LabelvaluerangebarWidget-7pEykAm3.js} +4 -4
  154. package/dist/{LabelvaluerangebarWidget-Dhyng4-n.js.map → LabelvaluerangebarWidget-7pEykAm3.js.map} +1 -1
  155. package/dist/{LabelvaluerangebarWidget-CsUfrGAM.cjs → LabelvaluerangebarWidget-Ca6lJAZV.cjs} +2 -2
  156. package/dist/{LabelvaluerangebarWidget-CsUfrGAM.cjs.map → LabelvaluerangebarWidget-Ca6lJAZV.cjs.map} +1 -1
  157. package/dist/{Layout-mWR35VAD.js → Layout-BNvQKlyy.js} +2 -2
  158. package/dist/{Layout-mWR35VAD.js.map → Layout-BNvQKlyy.js.map} +1 -1
  159. package/dist/Layout-CXwcgFxa.cjs +2 -0
  160. package/dist/{Layout-DDktMnzb.cjs.map → Layout-CXwcgFxa.cjs.map} +1 -1
  161. package/dist/{LedWidget-CCQWCw80.cjs → LedWidget-CafSb6jG.cjs} +2 -2
  162. package/dist/{LedWidget-CCQWCw80.cjs.map → LedWidget-CafSb6jG.cjs.map} +1 -1
  163. package/dist/{LedWidget-D8cq4pUv.js → LedWidget-_EA7ZKM8.js} +4 -4
  164. package/dist/{LedWidget-D8cq4pUv.js.map → LedWidget-_EA7ZKM8.js.map} +1 -1
  165. package/dist/LimitsbarWidget-B4E6eQgY.cjs +2 -0
  166. package/dist/{LimitsbarWidget-D4O0LWuC.cjs.map → LimitsbarWidget-B4E6eQgY.cjs.map} +1 -1
  167. package/dist/{LimitsbarWidget-VGJnDuVM.js → LimitsbarWidget-DdoQf46y.js} +4 -4
  168. package/dist/{LimitsbarWidget-VGJnDuVM.js.map → LimitsbarWidget-DdoQf46y.js.map} +1 -1
  169. package/dist/{LimitscolorWidget-BvxsopUs.cjs → LimitscolorWidget-B-ESO_oy.cjs} +2 -2
  170. package/dist/{LimitscolorWidget-BvxsopUs.cjs.map → LimitscolorWidget-B-ESO_oy.cjs.map} +1 -1
  171. package/dist/{LimitscolorWidget-CG6Pqi12.js → LimitscolorWidget-Cv0umnVo.js} +2 -2
  172. package/dist/{LimitscolorWidget-CG6Pqi12.js.map → LimitscolorWidget-Cv0umnVo.js.map} +1 -1
  173. package/dist/{LimitscolumnWidget-DjovQdiT.js → LimitscolumnWidget-CnCQtxim.js} +4 -4
  174. package/dist/{LimitscolumnWidget-DjovQdiT.js.map → LimitscolumnWidget-CnCQtxim.js.map} +1 -1
  175. package/dist/{LimitscolumnWidget-Z9JnMlDS.cjs → LimitscolumnWidget-PbEe5NP1.cjs} +2 -2
  176. package/dist/{LimitscolumnWidget-Z9JnMlDS.cjs.map → LimitscolumnWidget-PbEe5NP1.cjs.map} +1 -1
  177. package/dist/{LinegraphWidget-B_ECNLzU.cjs → LinegraphWidget-Bto_2lSc.cjs} +2 -2
  178. package/dist/{LinegraphWidget-B_ECNLzU.cjs.map → LinegraphWidget-Bto_2lSc.cjs.map} +1 -1
  179. package/dist/{LinegraphWidget-DSWAhXgZ.js → LinegraphWidget-ekyQoR7x.js} +4 -4
  180. package/dist/{LinegraphWidget-DSWAhXgZ.js.map → LinegraphWidget-ekyQoR7x.js.map} +1 -1
  181. package/dist/{MatrixbycolumnsWidget-C3cuhRxz.js → MatrixbycolumnsWidget-IBUcGNF7.js} +3 -3
  182. package/dist/{MatrixbycolumnsWidget-C3cuhRxz.js.map → MatrixbycolumnsWidget-IBUcGNF7.js.map} +1 -1
  183. package/dist/{MatrixbycolumnsWidget-CPFzRQN5.cjs → MatrixbycolumnsWidget-bMjMlQYz.cjs} +2 -2
  184. package/dist/{MatrixbycolumnsWidget-CPFzRQN5.cjs.map → MatrixbycolumnsWidget-bMjMlQYz.cjs.map} +1 -1
  185. package/dist/{MicroservicesTab-BGgwT56M.cjs → MicroservicesTab-BXb4TPjR.cjs} +2 -2
  186. package/dist/{MicroservicesTab-BGgwT56M.cjs.map → MicroservicesTab-BXb4TPjR.cjs.map} +1 -1
  187. package/dist/{MicroservicesTab-Dbp02UlV.js → MicroservicesTab-CUqp5uFH.js} +4 -4
  188. package/dist/{MicroservicesTab-Dbp02UlV.js.map → MicroservicesTab-CUqp5uFH.js.map} +1 -1
  189. package/dist/{Openc3Screen-CkdegNDJ.js → Openc3Screen-B31-mKUZ.js} +403 -398
  190. package/dist/Openc3Screen-B31-mKUZ.js.map +1 -0
  191. package/dist/Openc3Screen-ByRi15VK.cjs +6 -0
  192. package/dist/Openc3Screen-ByRi15VK.cjs.map +1 -0
  193. package/dist/{OutputDialog-2CmOBAEE.cjs → OutputDialog-CXQ5-PgU.cjs} +2 -2
  194. package/dist/{OutputDialog-2CmOBAEE.cjs.map → OutputDialog-CXQ5-PgU.cjs.map} +1 -1
  195. package/dist/{OutputDialog-M5Xc_DqH.js → OutputDialog-wBy-sg3k.js} +12 -13
  196. package/dist/{OutputDialog-M5Xc_DqH.js.map → OutputDialog-wBy-sg3k.js.map} +1 -1
  197. package/dist/{PackagesTab-HQCOIGZK.js → PackagesTab-BSVPTVe7.js} +30 -36
  198. package/dist/{PackagesTab-HQCOIGZK.js.map → PackagesTab-BSVPTVe7.js.map} +1 -1
  199. package/dist/PackagesTab-oOtpCEIX.cjs +2 -0
  200. package/dist/{PackagesTab-Dwp6g8W0.cjs.map → PackagesTab-oOtpCEIX.cjs.map} +1 -1
  201. package/dist/PluginsTab-D2-nxcCZ.cjs +6 -0
  202. package/dist/PluginsTab-D2-nxcCZ.cjs.map +1 -0
  203. package/dist/{PluginsTab-CZApRILr.js → PluginsTab-DShjzJVP.js} +462 -410
  204. package/dist/PluginsTab-DShjzJVP.js.map +1 -0
  205. package/dist/{ProgressbarWidget-oCgAEFBO.js → ProgressbarWidget-CnveFZVh.js} +2 -2
  206. package/dist/{ProgressbarWidget-oCgAEFBO.js.map → ProgressbarWidget-CnveFZVh.js.map} +1 -1
  207. package/dist/{ProgressbarWidget-BADSYuUN.cjs → ProgressbarWidget-KBhRifXc.cjs} +2 -2
  208. package/dist/{ProgressbarWidget-BADSYuUN.cjs.map → ProgressbarWidget-KBhRifXc.cjs.map} +1 -1
  209. package/dist/{RadiobuttonWidget-Bklx2_Au.cjs → RadiobuttonWidget-Dt1lTgs1.cjs} +2 -2
  210. package/dist/{RadiobuttonWidget-Bklx2_Au.cjs.map → RadiobuttonWidget-Dt1lTgs1.cjs.map} +1 -1
  211. package/dist/{RadiobuttonWidget-D4Dak3lc.js → RadiobuttonWidget-hWLrCb8W.js} +2 -2
  212. package/dist/{RadiobuttonWidget-D4Dak3lc.js.map → RadiobuttonWidget-hWLrCb8W.js.map} +1 -1
  213. package/dist/{RadiogroupWidget-Z2S2tgjG.cjs → RadiogroupWidget-CT4otlQS.cjs} +2 -2
  214. package/dist/{RadiogroupWidget-Z2S2tgjG.cjs.map → RadiogroupWidget-CT4otlQS.cjs.map} +1 -1
  215. package/dist/{RadiogroupWidget-Dbe9T4fp.js → RadiogroupWidget-DK1fphkh.js} +2 -2
  216. package/dist/{RadiogroupWidget-Dbe9T4fp.js.map → RadiogroupWidget-DK1fphkh.js.map} +1 -1
  217. package/dist/{RangebarWidget-C0TpxFDi.cjs → RangebarWidget-DquzegM5.cjs} +2 -2
  218. package/dist/{RangebarWidget-C0TpxFDi.cjs.map → RangebarWidget-DquzegM5.cjs.map} +1 -1
  219. package/dist/{RangebarWidget-CIVrgqrW.js → RangebarWidget-vspY8CGV.js} +4 -4
  220. package/dist/{RangebarWidget-CIVrgqrW.js.map → RangebarWidget-vspY8CGV.js.map} +1 -1
  221. package/dist/RedisTab-B28s52_T.js +171 -0
  222. package/dist/RedisTab-B28s52_T.js.map +1 -0
  223. package/dist/RedisTab-DBbLlP9e.cjs +2 -0
  224. package/dist/RedisTab-DBbLlP9e.cjs.map +1 -0
  225. package/dist/{RollupWidget-CH1-XNLV.js → RollupWidget-07pNcXQV.js} +2 -2
  226. package/dist/{RollupWidget-CH1-XNLV.js.map → RollupWidget-07pNcXQV.js.map} +1 -1
  227. package/dist/{RollupWidget-BEDf-mfg.cjs → RollupWidget-CoxNKLcv.cjs} +2 -2
  228. package/dist/{RollupWidget-BEDf-mfg.cjs.map → RollupWidget-CoxNKLcv.cjs.map} +1 -1
  229. package/dist/{RoutersTab-BA-KlYIm.cjs → RoutersTab-DEtxUph7.cjs} +2 -2
  230. package/dist/{RoutersTab-BA-KlYIm.cjs.map → RoutersTab-DEtxUph7.cjs.map} +1 -1
  231. package/dist/{RoutersTab-WKa6K7B8.js → RoutersTab-DX_r6FEQ.js} +6 -6
  232. package/dist/{RoutersTab-WKa6K7B8.js.map → RoutersTab-DX_r6FEQ.js.map} +1 -1
  233. package/dist/{ScriptChooser-LsboGSgh.cjs → ScriptChooser-BZMnm4SX.cjs} +2 -2
  234. package/dist/{ScriptChooser-LsboGSgh.cjs.map → ScriptChooser-BZMnm4SX.cjs.map} +1 -1
  235. package/dist/{ScriptChooser-B5TkGuZ4.js → ScriptChooser-Ci_3uZDo.js} +2 -2
  236. package/dist/{ScriptChooser-B5TkGuZ4.js.map → ScriptChooser-Ci_3uZDo.js.map} +1 -1
  237. package/dist/{ScrollwindowWidget-BwFG6Wn8.js → ScrollwindowWidget-BcbyrYUo.js} +3 -3
  238. package/dist/{ScrollwindowWidget-BwFG6Wn8.js.map → ScrollwindowWidget-BcbyrYUo.js.map} +1 -1
  239. package/dist/{ScrollwindowWidget-DWxDmpFB.cjs → ScrollwindowWidget-Djvcd1yX.cjs} +2 -2
  240. package/dist/{ScrollwindowWidget-DWxDmpFB.cjs.map → ScrollwindowWidget-Djvcd1yX.cjs.map} +1 -1
  241. package/dist/{SecretsTab-Vtvbb_1U.js → SecretsTab-BNFEqrT1.js} +13 -15
  242. package/dist/{SecretsTab-Vtvbb_1U.js.map → SecretsTab-BNFEqrT1.js.map} +1 -1
  243. package/dist/{SecretsTab-DKX5gLH_.cjs → SecretsTab-cG1U2SyL.cjs} +2 -2
  244. package/dist/{SecretsTab-DKX5gLH_.cjs.map → SecretsTab-cG1U2SyL.cjs.map} +1 -1
  245. package/dist/{SettingsTab-DilFIQ3K.js → SettingsTab-C4T8ecIZ.js} +261 -315
  246. package/dist/{SettingsTab-DilFIQ3K.js.map → SettingsTab-C4T8ecIZ.js.map} +1 -1
  247. package/dist/SettingsTab-DvUFxNoM.cjs +3 -0
  248. package/dist/{SettingsTab-Ch52foLm.cjs.map → SettingsTab-DvUFxNoM.cjs.map} +1 -1
  249. package/dist/{SignalWidget-1WqQFVq9.cjs → SignalWidget-9IqQEM4M.cjs} +2 -2
  250. package/dist/{SignalWidget-1WqQFVq9.cjs.map → SignalWidget-9IqQEM4M.cjs.map} +1 -1
  251. package/dist/{SignalWidget-Gz2gHrUm.js → SignalWidget-BDp5sUHj.js} +2 -2
  252. package/dist/{SignalWidget-Gz2gHrUm.js.map → SignalWidget-BDp5sUHj.js.map} +1 -1
  253. package/dist/{SimpleTextDialog-BwOVWhRY.cjs → SimpleTextDialog-C1trfMSJ.cjs} +2 -2
  254. package/dist/{SimpleTextDialog-BwOVWhRY.cjs.map → SimpleTextDialog-C1trfMSJ.cjs.map} +1 -1
  255. package/dist/{SimpleTextDialog-Cmtrmt79.js → SimpleTextDialog-LQJdcAXX.js} +10 -11
  256. package/dist/{SimpleTextDialog-Cmtrmt79.js.map → SimpleTextDialog-LQJdcAXX.js.map} +1 -1
  257. package/dist/{SpacerWidget-Bzp3aI40.cjs → SpacerWidget-BS_oBLMC.cjs} +2 -2
  258. package/dist/{SpacerWidget-Bzp3aI40.cjs.map → SpacerWidget-BS_oBLMC.cjs.map} +1 -1
  259. package/dist/{SpacerWidget-Bg7VDB0k.js → SpacerWidget-DcOnQ1yI.js} +2 -2
  260. package/dist/{SpacerWidget-Bg7VDB0k.js.map → SpacerWidget-DcOnQ1yI.js.map} +1 -1
  261. package/dist/{SparklineWidget-D_b5rfJv.js → SparklineWidget-CVglnlAm.js} +4 -4
  262. package/dist/{SparklineWidget-D_b5rfJv.js.map → SparklineWidget-CVglnlAm.js.map} +1 -1
  263. package/dist/{SparklineWidget-kMWjVDrm.cjs → SparklineWidget-CciCNv5R.cjs} +2 -2
  264. package/dist/{SparklineWidget-kMWjVDrm.cjs.map → SparklineWidget-CciCNv5R.cjs.map} +1 -1
  265. package/dist/{TabbookWidget-DlVrU3wK.cjs → TabbookWidget-hCZ5AcLk.cjs} +2 -2
  266. package/dist/{TabbookWidget-DlVrU3wK.cjs.map → TabbookWidget-hCZ5AcLk.cjs.map} +1 -1
  267. package/dist/{TabbookWidget-C30f9B6z.js → TabbookWidget-p51Oa7Ru.js} +2 -2
  268. package/dist/{TabbookWidget-C30f9B6z.js.map → TabbookWidget-p51Oa7Ru.js.map} +1 -1
  269. package/dist/{TargetsTab-CEPId9dL.js → TargetsTab-CBagO3CX.js} +7 -8
  270. package/dist/{TargetsTab-CEPId9dL.js.map → TargetsTab-CBagO3CX.js.map} +1 -1
  271. package/dist/TargetsTab-CTzQTnuk.cjs +2 -0
  272. package/dist/{TargetsTab-uqjueXlq.cjs.map → TargetsTab-CTzQTnuk.cjs.map} +1 -1
  273. package/dist/{TextBoxDialog-BlZ6MBoW.js → TextBoxDialog-CdFHdj5W.js} +4 -5
  274. package/dist/{TextBoxDialog-BlZ6MBoW.js.map → TextBoxDialog-CdFHdj5W.js.map} +1 -1
  275. package/dist/{TextBoxDialog--uIDsNPU.cjs → TextBoxDialog-DbD8P4Xc.cjs} +2 -2
  276. package/dist/{TextBoxDialog--uIDsNPU.cjs.map → TextBoxDialog-DbD8P4Xc.cjs.map} +1 -1
  277. package/dist/{TextboxWidget-BJka_3dT.cjs → TextboxWidget-BhtvlFuj.cjs} +2 -2
  278. package/dist/{TextboxWidget-BJka_3dT.cjs.map → TextboxWidget-BhtvlFuj.cjs.map} +1 -1
  279. package/dist/{TextboxWidget-CDqxsgys.js → TextboxWidget-DM-XX97e.js} +4 -4
  280. package/dist/{TextboxWidget-CDqxsgys.js.map → TextboxWidget-DM-XX97e.js.map} +1 -1
  281. package/dist/{TextfieldWidget-CAyjKJs6.js → TextfieldWidget-7cYHAgH8.js} +2 -2
  282. package/dist/{TextfieldWidget-CAyjKJs6.js.map → TextfieldWidget-7cYHAgH8.js.map} +1 -1
  283. package/dist/{TextfieldWidget-C7_48W7n.cjs → TextfieldWidget-ChH9glbY.cjs} +2 -2
  284. package/dist/{TextfieldWidget-C7_48W7n.cjs.map → TextfieldWidget-ChH9glbY.cjs.map} +1 -1
  285. package/dist/{TimeWidget-WPWiADCI.cjs → TimeWidget-CUm-LMyL.cjs} +2 -2
  286. package/dist/{TimeWidget-WPWiADCI.cjs.map → TimeWidget-CUm-LMyL.cjs.map} +1 -1
  287. package/dist/{TimeWidget-BQsP0G2X.js → TimeWidget-EvQJyu6x.js} +2 -2
  288. package/dist/{TimeWidget-BQsP0G2X.js.map → TimeWidget-EvQJyu6x.js.map} +1 -1
  289. package/dist/{TitleWidget-DXVba53S.js → TitleWidget-6ddfJuqd.js} +2 -2
  290. package/dist/{TitleWidget-DXVba53S.js.map → TitleWidget-6ddfJuqd.js.map} +1 -1
  291. package/dist/{TitleWidget-DavRJ5B5.cjs → TitleWidget-Es1lfe61.cjs} +2 -2
  292. package/dist/{TitleWidget-DavRJ5B5.cjs.map → TitleWidget-Es1lfe61.cjs.map} +1 -1
  293. package/dist/{ToolsTab-CSmjz1H7.js → ToolsTab-ClJNvp8z.js} +6 -7
  294. package/dist/{ToolsTab-CSmjz1H7.js.map → ToolsTab-ClJNvp8z.js.map} +1 -1
  295. package/dist/ToolsTab-PKUy_HaM.cjs +7 -0
  296. package/dist/{ToolsTab-DUwXt5hn.cjs.map → ToolsTab-PKUy_HaM.cjs.map} +1 -1
  297. package/dist/{TopBar-D_2lT9RB.js → TopBar-CmP-ZyVe.js} +18 -20
  298. package/dist/{TopBar-D_2lT9RB.js.map → TopBar-CmP-ZyVe.js.map} +1 -1
  299. package/dist/TopBar-xyBcJsNc.cjs +2 -0
  300. package/dist/{TopBar-C5lQcY1W.cjs.map → TopBar-xyBcJsNc.cjs.map} +1 -1
  301. package/dist/UpgradeToEnterpriseDialog-CViAJs_M.cjs +2 -0
  302. package/dist/{UpgradeToEnterpriseDialog-BHDDrj0t.cjs.map → UpgradeToEnterpriseDialog-CViAJs_M.cjs.map} +1 -1
  303. package/dist/{UpgradeToEnterpriseDialog-Cvt5MMTj.js → UpgradeToEnterpriseDialog-DpWUa84S.js} +13 -16
  304. package/dist/{UpgradeToEnterpriseDialog-Cvt5MMTj.js.map → UpgradeToEnterpriseDialog-DpWUa84S.js.map} +1 -1
  305. package/dist/{UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-DWYRspHE.js → UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-BuwHe3dn.js} +10089 -9899
  306. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-BuwHe3dn.js.map +1 -0
  307. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NN0zFL7Z.cjs +1498 -0
  308. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-NN0zFL7Z.cjs.map +1 -0
  309. package/dist/VWidget-3jbGZ8Dh.cjs +2 -0
  310. package/dist/VWidget-3jbGZ8Dh.cjs.map +1 -0
  311. package/dist/VWidget-P-X9ffkl.js +190 -0
  312. package/dist/VWidget-P-X9ffkl.js.map +1 -0
  313. package/dist/{ValueWidget-5ulSOrPw.cjs → ValueWidget-D3yaN8DJ.cjs} +2 -2
  314. package/dist/{ValueWidget-5ulSOrPw.cjs.map → ValueWidget-D3yaN8DJ.cjs.map} +1 -1
  315. package/dist/{ValueWidget-B-TWLPdM.js → ValueWidget-DAUGuQ9f.js} +4 -4
  316. package/dist/{ValueWidget-B-TWLPdM.js.map → ValueWidget-DAUGuQ9f.js.map} +1 -1
  317. package/dist/{ValuelimitsbarWidget-CTFVDwcL.cjs → ValuelimitsbarWidget-DGwtzXt6.cjs} +2 -2
  318. package/dist/{ValuelimitsbarWidget-CTFVDwcL.cjs.map → ValuelimitsbarWidget-DGwtzXt6.cjs.map} +1 -1
  319. package/dist/{ValuelimitsbarWidget-jsDXdPdC.js → ValuelimitsbarWidget-DmLUXw0I.js} +4 -4
  320. package/dist/{ValuelimitsbarWidget-jsDXdPdC.js.map → ValuelimitsbarWidget-DmLUXw0I.js.map} +1 -1
  321. package/dist/{ValuelimitscolumnWidget-Du3Baz6G.cjs → ValuelimitscolumnWidget-BRYnKfQk.cjs} +2 -2
  322. package/dist/{ValuelimitscolumnWidget-Du3Baz6G.cjs.map → ValuelimitscolumnWidget-BRYnKfQk.cjs.map} +1 -1
  323. package/dist/{ValuelimitscolumnWidget-I-uwnXM2.js → ValuelimitscolumnWidget-DDmo8wHJ.js} +4 -4
  324. package/dist/{ValuelimitscolumnWidget-I-uwnXM2.js.map → ValuelimitscolumnWidget-DDmo8wHJ.js.map} +1 -1
  325. package/dist/{ValuerangebarWidget-OyhSTScu.js → ValuerangebarWidget-CbzWSWq3.js} +4 -4
  326. package/dist/{ValuerangebarWidget-OyhSTScu.js.map → ValuerangebarWidget-CbzWSWq3.js.map} +1 -1
  327. package/dist/{ValuerangebarWidget-BjXDCLm3.cjs → ValuerangebarWidget-hi5jZvo8.cjs} +2 -2
  328. package/dist/{ValuerangebarWidget-BjXDCLm3.cjs.map → ValuerangebarWidget-hi5jZvo8.cjs.map} +1 -1
  329. package/dist/{VerticalWidget-CkFbX1Gq.js → VerticalWidget-BuKinn_c.js} +2 -2
  330. package/dist/{VerticalWidget-CkFbX1Gq.js.map → VerticalWidget-BuKinn_c.js.map} +1 -1
  331. package/dist/{VerticalWidget-CKDTGmhp.cjs → VerticalWidget-CRFI8Dq6.cjs} +2 -2
  332. package/dist/{VerticalWidget-CKDTGmhp.cjs.map → VerticalWidget-CRFI8Dq6.cjs.map} +1 -1
  333. package/dist/{VerticalboxWidget-D09UbA0I.cjs → VerticalboxWidget-1qp7u87Q.cjs} +2 -2
  334. package/dist/{VerticalboxWidget-D09UbA0I.cjs.map → VerticalboxWidget-1qp7u87Q.cjs.map} +1 -1
  335. package/dist/{VerticalboxWidget-FEQgPM9r.js → VerticalboxWidget-C0zD5h0O.js} +5 -5
  336. package/dist/{VerticalboxWidget-FEQgPM9r.js.map → VerticalboxWidget-C0zD5h0O.js.map} +1 -1
  337. package/dist/{Widget-C3-TBgP7.js → Widget-BIXl-Pk5.js} +2 -2
  338. package/dist/{Widget-C3-TBgP7.js.map → Widget-BIXl-Pk5.js.map} +1 -1
  339. package/dist/{Widget-CSBtgNwA.cjs → Widget-wEcPyNXg.cjs} +2 -2
  340. package/dist/{Widget-CSBtgNwA.cjs.map → Widget-wEcPyNXg.cjs.map} +1 -1
  341. package/dist/cmdUtilities-BMsSNjt_.js +46 -0
  342. package/dist/cmdUtilities-BMsSNjt_.js.map +1 -0
  343. package/dist/cmdUtilities-ChD8v8-7.cjs +2 -0
  344. package/dist/cmdUtilities-ChD8v8-7.cjs.map +1 -0
  345. package/dist/components.cjs +3 -3
  346. package/dist/components.cjs.map +1 -1
  347. package/dist/components.js +656 -247
  348. package/dist/components.js.map +1 -1
  349. package/dist/index-DS1ACWVr.js +1755 -0
  350. package/dist/index-DS1ACWVr.js.map +1 -0
  351. package/dist/index-Nd4O4kac.cjs +7 -0
  352. package/dist/index-Nd4O4kac.cjs.map +1 -0
  353. package/dist/plugins.cjs +2 -2
  354. package/dist/plugins.cjs.map +1 -1
  355. package/dist/plugins.js +6 -8
  356. package/dist/plugins.js.map +1 -1
  357. package/dist/{settings-BboN1VLt.cjs → settings-CUg4_VNE.cjs} +2 -2
  358. package/dist/{settings-BboN1VLt.cjs.map → settings-CUg4_VNE.cjs.map} +1 -1
  359. package/dist/{settings-spKii1fI.js → settings-DToCplG_.js} +2 -2
  360. package/dist/{settings-spKii1fI.js.map → settings-DToCplG_.js.map} +1 -1
  361. package/dist/tools/admin.cjs +2 -2
  362. package/dist/tools/admin.cjs.map +1 -1
  363. package/dist/tools/admin.js +76 -99
  364. package/dist/tools/admin.js.map +1 -1
  365. package/dist/tools/base.cjs +1 -1
  366. package/dist/tools/base.cjs.map +1 -1
  367. package/dist/tools/base.js +74 -99
  368. package/dist/tools/base.js.map +1 -1
  369. package/dist/tools/calendar.cjs +1 -1
  370. package/dist/tools/calendar.js +1 -1
  371. package/dist/tools/scriptrunner.cjs +34 -34
  372. package/dist/tools/scriptrunner.cjs.map +1 -1
  373. package/dist/tools/scriptrunner.js +853 -835
  374. package/dist/tools/scriptrunner.js.map +1 -1
  375. package/dist/util.cjs +1 -1
  376. package/dist/util.js +4 -2
  377. package/dist/util.js.map +1 -1
  378. package/dist/vue-common.css +1 -1
  379. package/dist/widgets.cjs +1 -1
  380. package/dist/widgets.js +63 -63
  381. package/package.json +9 -9
  382. package/dist/CriticalCmdDialog-N06JxCHg.cjs +0 -2
  383. package/dist/DetailsDialog-CVYBgZll.cjs +0 -2
  384. package/dist/EventListDialog-CjYLRdkb.cjs +0 -2
  385. package/dist/Graph-BiU56Qj2.js.map +0 -1
  386. package/dist/Graph-CWjf71TK.cjs +0 -2
  387. package/dist/Graph-CWjf71TK.cjs.map +0 -1
  388. package/dist/Layout-DDktMnzb.cjs +0 -2
  389. package/dist/LimitsbarWidget-D4O0LWuC.cjs +0 -2
  390. package/dist/Openc3Screen-BP2oW88G.cjs +0 -6
  391. package/dist/Openc3Screen-BP2oW88G.cjs.map +0 -1
  392. package/dist/Openc3Screen-CkdegNDJ.js.map +0 -1
  393. package/dist/PackagesTab-Dwp6g8W0.cjs +0 -2
  394. package/dist/PluginsTab-COKDXShE.cjs +0 -6
  395. package/dist/PluginsTab-COKDXShE.cjs.map +0 -1
  396. package/dist/PluginsTab-CZApRILr.js.map +0 -1
  397. package/dist/RedisTab-B8U-vEQZ.js +0 -138
  398. package/dist/RedisTab-B8U-vEQZ.js.map +0 -1
  399. package/dist/RedisTab-cgicWb81.cjs +0 -2
  400. package/dist/RedisTab-cgicWb81.cjs.map +0 -1
  401. package/dist/SettingsTab-Ch52foLm.cjs +0 -3
  402. package/dist/TargetsTab-uqjueXlq.cjs +0 -2
  403. package/dist/ToolsTab-DUwXt5hn.cjs +0 -7
  404. package/dist/TopBar-C5lQcY1W.cjs +0 -2
  405. package/dist/UpgradeToEnterpriseDialog-BHDDrj0t.cjs +0 -2
  406. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-DWYRspHE.js.map +0 -1
  407. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-mEnslAi4.cjs +0 -1498
  408. package/dist/UpgradeToEnterpriseDialog.vue_vue_type_style_index_0_scoped_2c757408_lang-mEnslAi4.cjs.map +0 -1
  409. package/dist/VWidget-C7V6pKTg.cjs +0 -2
  410. package/dist/VWidget-C7V6pKTg.cjs.map +0 -1
  411. package/dist/VWidget-CFTCukCL.js +0 -332
  412. package/dist/VWidget-CFTCukCL.js.map +0 -1
  413. package/dist/index-DDjz5VQq.js +0 -1721
  414. package/dist/index-DDjz5VQq.js.map +0 -1
  415. package/dist/index-DZh4NjG5.cjs +0 -7
  416. package/dist/index-DZh4NjG5.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"admin.cjs","sources":["../../src/tools/admin/DownloadDialog.vue","../../src/tools/admin/EditDialog.vue","../../src/tools/admin/ModifiedPluginDialog.vue","../../src/tools/admin/tabs/index.js","../../src/tools/admin/OpenC3Admin.vue","../../../../node_modules/@sanity/diff-match-patch/dist/index.js","../../../../node_modules/@openc3/ace-diff/dist/module.js","../../src/tools/admin/PluginDialog.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"600\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Download Gems </span>\n <v-spacer />\n </v-toolbar>\n <v-card-text>\n <div class=\"pa-3\">\n <v-row class=\"my-2\"> Select a download option </v-row>\n <v-row>\n <v-col>\n <div class=\"px-2\">\n <v-btn\n block\n data-test=\"searchGithub\"\n color=\"primary\"\n :disabled=\"disableSearch\"\n @click=\"searchGithub\"\n >\n Github\n <v-icon end theme=\"dark\"> mdi-github </v-icon>\n </v-btn>\n </div>\n </v-col>\n </v-row>\n <!---\n <v-row>\n <v-col>\n <div class=\"px-2\">\n <v-btn\n @click=\"searchRuby\"\n block\n data-test=\"searchRuby\"\n color=\"primary\"\n :disabled=\"disableSearch\"\n >\n RubyGems\n <v-icon right dark> mdi-heart </v-icon>\n </v-btn>\n </div>\n </v-col>\n </v-row>\n --->\n <v-row class=\"mt-5\"> Community Gems </v-row>\n <div v-if=\"listData.length < 1\" class=\"mt-4\">\n <v-row class=\"mx-2\">\n <span> I’m sorry, Dave. No gems available.... </span>\n </v-row>\n </div>\n <div v-else class=\"mt-4\">\n <div v-for=\"(data, index) in listData\" :key=\"index\">\n <v-list-item>\n <v-list-item-title>{{ data.name }}</v-list-item-title>\n\n <v-list-item icon>\n <v-progress-circular\n v-if=\"activeDownload\"\n indeterminate\n color=\"primary\"\n />\n <v-btn\n v-else\n icon=\"mdi-cloud-download\"\n variant=\"text\"\n :disabled=\"activeDownload\"\n @click=\"downloadGem(data)\"\n />\n </v-list-item>\n </v-list-item>\n <v-divider v-if=\"index < listData.length - 1\" :key=\"index\" />\n </div>\n </div>\n </div>\n </v-card-text>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\n// Directly use axios since we need no authentication or scope\nimport axios from 'axios'\n\nexport default {\n props: {\n modelValue: Boolean,\n },\n data() {\n return {\n url: '',\n type: null,\n response: null,\n activeDownload: false,\n disableSearch: false,\n expanded: [],\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n listData: function () {\n if (!this.response) return []\n if (this.type === 'github') {\n return this.parseGithub()\n } else {\n return this.parseRuby()\n }\n },\n },\n methods: {\n parseGithub: function () {\n const gemRegEx = /\\w+.gem/\n return this.response.tree\n .filter((f) => gemRegEx.exec(f.path))\n .map((f) => {\n return {\n name: f.path,\n url: `https://raw.github.com/OpenC3/openc3-tools/main/${f.path}`,\n }\n })\n },\n getResponse: function () {\n this.disableSearch = true\n axios.get(this.url).then((response) => {\n this.response = response.data\n })\n setTimeout(() => {\n this.disableSearch = false\n }, 10000)\n },\n searchGithub: function () {\n this.type = 'github'\n this.url =\n 'https://api.github.com/repos/OpenC3/openc3-tools/git/trees/main?recursive=1'\n this.getResponse()\n },\n downloadGem: function (gem) {\n const link = document.createElement('a')\n link.href = gem.url\n link.setAttribute('download', gem.name)\n link.click()\n link.remove()\n },\n },\n}\n</script>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" :persistent=\"!readonly\" width=\"80vw\">\n <v-card>\n <form @submit.prevent=\"submit\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-text=\"title\" />\n <v-spacer />\n <v-btn\n class=\"mx-2\"\n icon=\"mdi-download\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"downloadIcon\"\n @click=\"download\"\n />\n </v-toolbar>\n\n <v-card-text>\n <div class=\"pa-3\">\n <div v-if=\"!readonly\">\n <v-row class=\"mt-3\"> Upload a file. </v-row>\n <v-row no-gutters align=\"center\">\n <v-col cols=\"3\">\n <v-btn\n block\n color=\"success\"\n :disabled=\"!file || loadingFile || readonly\"\n :loading=\"loadingFile\"\n data-test=\"editScreenLoadBtn\"\n @click=\"loadFile\"\n >\n Load\n <template #loader>\n <span>Loading...</span>\n </template>\n </v-btn>\n </v-col>\n <v-col cols=\"9\">\n <v-file-input\n v-model=\"file\"\n accept=\".json\"\n label=\"Click to select .json file.\"\n :disabled=\"readonly\"\n />\n </v-col>\n </v-row>\n </div>\n <v-row no-gutters>\n <pre\n ref=\"editor\"\n class=\"editor\"\n @contextmenu.prevent=\"showContextMenu\"\n ></pre>\n <v-menu v-model=\"contextMenu\" :target=\"[menuX, menuY]\">\n <v-list>\n <v-list-item\n title=\"Toggle Vim mode\"\n prepend-icon=\"extras:vim\"\n @click=\"toggleVimMode\"\n />\n </v-list>\n </v-menu>\n </v-row>\n <v-row class=\"my-3\">\n <span v-show=\"error\" class=\"text-red\" v-text=\"error\" />\n </v-row>\n <v-row>\n <v-spacer />\n <v-btn\n variant=\"outlined\"\n class=\"mx-2\"\n data-test=\"editCancelBtn\"\n @click.prevent=\"close\"\n >\n Cancel\n </v-btn>\n <v-btn\n v-if=\"!readonly\"\n class=\"mx-2\"\n color=\"primary\"\n type=\"submit\"\n data-test=\"editSubmitBtn\"\n :disabled=\"!!error || readonly\"\n >\n Save\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-ruby'\nimport 'ace-builds/src-min-noconflict/mode-json'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport 'ace-builds/src-min-noconflict/ext-language_tools'\nimport 'ace-builds/src-min-noconflict/ext-searchbox'\nimport { AceEditorUtils } from '../../components/ace'\n\nexport default {\n props: {\n content: {\n type: String,\n required: true,\n },\n type: String,\n name: String,\n modelValue: Boolean,\n readonly: Boolean,\n },\n data() {\n return {\n editor: null,\n contextMenu: false,\n menuX: 0,\n menuY: 0,\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n title: function () {\n return `${this.type}: ${this.name}`\n },\n error: function () {\n if (this.editor && this.editor.getValue() === '' && !this.file) {\n return 'Input can not be blank.'\n }\n return null\n },\n },\n mounted() {\n const openPluginMode = this.buildPluginMode()\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n this.editor.session.setMode(new openPluginMode())\n this.editor.session.setTabSize(2)\n this.editor.session.setUseWrapMode(true)\n this.editor.$blockScrolling = Infinity\n this.editor.setHighlightActiveLine(false)\n this.editor.setValue(this.content)\n this.editor.clearSelection()\n AceEditorUtils.applyVimModeIfEnabled(this.editor)\n this.editor.focus()\n if (this.readonly) {\n this.editor.setReadOnly(true)\n }\n },\n beforeUnmount() {\n if (this.editor) {\n this.editor.destroy()\n }\n },\n methods: {\n submit: function () {\n this.$emit('submit', this.editor.getValue())\n this.show = !this.show\n },\n close: function () {\n this.show = !this.show\n },\n download: function () {\n const blob = new Blob([this.editor.getValue()], {\n type: 'text/plain',\n })\n // Make a link and then 'click' on it to start the download\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute(\n 'download',\n `${this.type.toLowerCase()}_${this.name.toLowerCase()}.json`,\n )\n link.click()\n },\n buildPluginMode() {\n let oop = ace.require('ace/lib/oop')\n let JsonHighlightRules = ace.require(\n 'ace/mode/json_highlight_rules',\n ).JsonHighlightRules\n\n let MatchingBraceOutdent = ace.require(\n 'ace/mode/matching_brace_outdent',\n ).MatchingBraceOutdent\n let CstyleBehaviour = ace.require(\n 'ace/mode/behaviour/cstyle',\n ).CstyleBehaviour\n let FoldMode = ace.require('ace/mode/folding/ruby').FoldMode\n let Mode = function () {\n this.HighlightRules = JsonHighlightRules\n this.$outdent = new MatchingBraceOutdent()\n this.$behaviour = new CstyleBehaviour()\n this.foldingRules = new FoldMode()\n this.indentKeywords = this.foldingRules.indentKeywords\n }\n let RubyMode = ace.require('ace/mode/ruby').Mode\n oop.inherits(Mode, RubyMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n showContextMenu: function (event) {\n this.menuX = event.pageX\n this.menuY = event.pageY\n\n let position = this.editor.getCursorPosition()\n let token = this.editor.session.getTokenAt(position.row, position.column)\n if (token) {\n let value = token.value.trim()\n if (value.includes(' ')) {\n this.docsKeyword = value.split(' ')[0]\n } else {\n this.docsKeyword = value\n }\n this.contextMenu = true\n }\n },\n toggleVimMode: function () {\n AceEditorUtils.toggleVimMode(this.editor)\n },\n },\n}\n</script>\n\n<style scoped>\n.editor {\n height: 50vh;\n width: 75vw;\n position: relative;\n font-size: 16px;\n}\n\n.v-textarea :deep(textarea) {\n padding: 5px;\n}\n</style>\n","<!--\n# Copyright 2024 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"600\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Modified Plugin </span>\n <v-spacer />\n </v-toolbar>\n <v-card-text class=\"pa-3\">\n <div>\n Plugin {{ plugin }} was modified. Would you like to delete the\n existing modified files?\n </div>\n <v-list-item\n v-for=\"(target, index) in modifiedTargets\"\n :key=\"index\"\n lines=\"two\"\n >\n <v-list-item-title>{{ target.name }}</v-list-item-title>\n <v-list-item-subtitle\n v-for=\"(file, itemIndex) in target.files\"\n :key=\"itemIndex\"\n >{{ file }}</v-list-item-subtitle\n >\n </v-list-item>\n <v-checkbox\n v-model=\"deleteModified\"\n label=\"DELETE MODIFIED! THIS CAN NOT BE UNDONE!!!\"\n color=\"error\"\n data-test=\"modified-plugin-delete-checkbox\"\n />\n </v-card-text>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn\n variant=\"outlined\"\n data-test=\"modified-plugin-cancel\"\n @click=\"\n () => {\n show = false\n $emit('cancel')\n }\n \"\n >\n Cancel\n </v-btn>\n <v-btn\n variant=\"flat\"\n data-test=\"modified-plugin-submit\"\n @click=\"\n () => {\n show = false\n $emit('submit', deleteModified)\n }\n \"\n >\n Confirm\n </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\n\nexport default {\n props: {\n modelValue: Boolean,\n plugin: String,\n targets: Array,\n pluginDelete: Boolean,\n },\n data() {\n return {\n modifiedTargets: [],\n deleteModified: false,\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n created() {\n for (const target of this.targets) {\n Api.get(`/openc3-api/targets/${target.name}/modified_files`).then(\n (response) => {\n if (response.data.length !== 0) {\n // Only push targets which actually have modified files\n this.modifiedTargets.push({\n name: target.name,\n files: response.data,\n })\n }\n },\n )\n }\n },\n}\n</script>\n\n<style scoped></style>\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nconst TabsList = [\n {\n displayName: 'Plugins',\n name: 'PluginsTab',\n path: 'plugins',\n component: () => import('./PluginsTab.vue'),\n },\n {\n displayName: 'Targets',\n name: 'TargetsTab',\n path: 'targets',\n component: () => import('./TargetsTab.vue'),\n },\n {\n displayName: 'Interfaces',\n name: 'InterfacesTab',\n path: 'interfaces',\n component: () => import('./InterfacesTab.vue'),\n },\n {\n displayName: 'Routers',\n name: 'RoutersTab',\n path: 'routers',\n component: () => import('./RoutersTab.vue'),\n },\n {\n displayName: 'Microservices',\n name: 'MicroservicesTab',\n path: 'microservices',\n component: () => import('./MicroservicesTab.vue'),\n },\n {\n displayName: 'Packages',\n name: 'PackagesTab',\n path: 'packages',\n component: () => import('./PackagesTab.vue'),\n },\n {\n displayName: 'Tools',\n name: 'ToolsTab',\n path: 'tools',\n component: () => import('./ToolsTab.vue'),\n },\n {\n displayName: 'Redis',\n name: 'RedisTab',\n path: 'redis',\n component: () => import('./RedisTab.vue'),\n },\n {\n displayName: 'Secrets',\n name: 'SecretsTab',\n path: 'secrets',\n component: () => import('./SecretsTab.vue'),\n },\n {\n displayName: 'Settings',\n name: 'SettingsTab',\n path: 'settings',\n component: () => import('./SettingsTab.vue'),\n },\n]\n\nexport { TabsList }\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <top-bar :title=\"title\" />\n <v-card>\n <v-tabs v-model=\"curTab\" fixed-tabs>\n <v-tab v-for=\"(tab, index) in tabs\" :key=\"index\" :to=\"tab.path\">\n {{ tab.displayName }}\n </v-tab>\n </v-tabs>\n <router-view />\n </v-card>\n </div>\n</template>\n\n<script>\nimport { TopBar } from '@/components'\nimport { TabsList } from './tabs'\n\nexport default {\n components: {\n TopBar,\n },\n data() {\n return {\n title: 'Administrator Console',\n curTab: null,\n }\n },\n computed: {\n tabs: function () {\n return TabsList.map((tab) => {\n return {\n displayName: tab.displayName,\n path: { name: tab.name },\n }\n })\n },\n },\n}\n</script>\n","function cloneDiff(diff2) {\n const [type, patch] = diff2;\n return [type, patch];\n}\nfunction getCommonOverlap(textA, textB) {\n let text1 = textA, text2 = textB;\n const text1Length = text1.length, text2Length = text2.length;\n if (text1Length === 0 || text2Length === 0)\n return 0;\n text1Length > text2Length ? text1 = text1.substring(text1Length - text2Length) : text1Length < text2Length && (text2 = text2.substring(0, text1Length));\n const textLength = Math.min(text1Length, text2Length);\n if (text1 === text2)\n return textLength;\n let best = 0, length = 1;\n for (let found = 0; found !== -1; ) {\n const pattern = text1.substring(textLength - length);\n if (found = text2.indexOf(pattern), found === -1)\n return best;\n length += found, (found === 0 || text1.substring(textLength - length) === text2.substring(0, length)) && (best = length, length++);\n }\n return best;\n}\nfunction getCommonPrefix(text1, text2) {\n if (!text1 || !text2 || text1[0] !== text2[0])\n return 0;\n let pointerMin = 0, pointerMax = Math.min(text1.length, text2.length), pointerMid = pointerMax, pointerStart = 0;\n for (; pointerMin < pointerMid; )\n text1.substring(pointerStart, pointerMid) === text2.substring(pointerStart, pointerMid) ? (pointerMin = pointerMid, pointerStart = pointerMin) : pointerMax = pointerMid, pointerMid = Math.floor((pointerMax - pointerMin) / 2 + pointerMin);\n return pointerMid;\n}\nfunction getCommonSuffix(text1, text2) {\n if (!text1 || !text2 || text1[text1.length - 1] !== text2[text2.length - 1])\n return 0;\n let pointerMin = 0, pointerMax = Math.min(text1.length, text2.length), pointerMid = pointerMax, pointerEnd = 0;\n for (; pointerMin < pointerMid; )\n text1.substring(text1.length - pointerMid, text1.length - pointerEnd) === text2.substring(text2.length - pointerMid, text2.length - pointerEnd) ? (pointerMin = pointerMid, pointerEnd = pointerMin) : pointerMax = pointerMid, pointerMid = Math.floor((pointerMax - pointerMin) / 2 + pointerMin);\n return pointerMid;\n}\nfunction isHighSurrogate(char) {\n const charCode = char.charCodeAt(0);\n return charCode >= 55296 && charCode <= 56319;\n}\nfunction isLowSurrogate(char) {\n const charCode = char.charCodeAt(0);\n return charCode >= 56320 && charCode <= 57343;\n}\nfunction bisect(text1, text2, deadline) {\n const text1Length = text1.length, text2Length = text2.length, maxD = Math.ceil((text1Length + text2Length) / 2), vOffset = maxD, vLength = 2 * maxD, v1 = new Array(vLength), v2 = new Array(vLength);\n for (let x = 0; x < vLength; x++)\n v1[x] = -1, v2[x] = -1;\n v1[vOffset + 1] = 0, v2[vOffset + 1] = 0;\n const delta = text1Length - text2Length, front = delta % 2 !== 0;\n let k1start = 0, k1end = 0, k2start = 0, k2end = 0;\n for (let d = 0; d < maxD && !(Date.now() > deadline); d++) {\n for (let k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n const k1Offset = vOffset + k1;\n let x1;\n k1 === -d || k1 !== d && v1[k1Offset - 1] < v1[k1Offset + 1] ? x1 = v1[k1Offset + 1] : x1 = v1[k1Offset - 1] + 1;\n let y1 = x1 - k1;\n for (; x1 < text1Length && y1 < text2Length && text1.charAt(x1) === text2.charAt(y1); )\n x1++, y1++;\n if (v1[k1Offset] = x1, x1 > text1Length)\n k1end += 2;\n else if (y1 > text2Length)\n k1start += 2;\n else if (front) {\n const k2Offset = vOffset + delta - k1;\n if (k2Offset >= 0 && k2Offset < vLength && v2[k2Offset] !== -1) {\n const x2 = text1Length - v2[k2Offset];\n if (x1 >= x2)\n return bisectSplit(text1, text2, x1, y1, deadline);\n }\n }\n }\n for (let k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n const k2Offset = vOffset + k2;\n let x2;\n k2 === -d || k2 !== d && v2[k2Offset - 1] < v2[k2Offset + 1] ? x2 = v2[k2Offset + 1] : x2 = v2[k2Offset - 1] + 1;\n let y2 = x2 - k2;\n for (; x2 < text1Length && y2 < text2Length && text1.charAt(text1Length - x2 - 1) === text2.charAt(text2Length - y2 - 1); )\n x2++, y2++;\n if (v2[k2Offset] = x2, x2 > text1Length)\n k2end += 2;\n else if (y2 > text2Length)\n k2start += 2;\n else if (!front) {\n const k1Offset = vOffset + delta - k2;\n if (k1Offset >= 0 && k1Offset < vLength && v1[k1Offset] !== -1) {\n const x1 = v1[k1Offset], y1 = vOffset + x1 - k1Offset;\n if (x2 = text1Length - x2, x1 >= x2)\n return bisectSplit(text1, text2, x1, y1, deadline);\n }\n }\n }\n }\n return [\n [DIFF_DELETE, text1],\n [DIFF_INSERT, text2]\n ];\n}\nfunction bisectSplit(text1, text2, x, y, deadline) {\n const text1a = text1.substring(0, x), text2a = text2.substring(0, y), text1b = text1.substring(x), text2b = text2.substring(y), diffs = doDiff(text1a, text2a, { checkLines: !1, deadline }), diffsb = doDiff(text1b, text2b, { checkLines: !1, deadline });\n return diffs.concat(diffsb);\n}\nfunction findHalfMatch(text1, text2, timeout = 1) {\n if (timeout <= 0)\n return null;\n const longText = text1.length > text2.length ? text1 : text2, shortText = text1.length > text2.length ? text2 : text1;\n if (longText.length < 4 || shortText.length * 2 < longText.length)\n return null;\n const halfMatch1 = halfMatchI(longText, shortText, Math.ceil(longText.length / 4)), halfMatch2 = halfMatchI(longText, shortText, Math.ceil(longText.length / 2));\n let halfMatch;\n if (halfMatch1 && halfMatch2)\n halfMatch = halfMatch1[4].length > halfMatch2[4].length ? halfMatch1 : halfMatch2;\n else {\n if (!halfMatch1 && !halfMatch2)\n return null;\n halfMatch2 ? halfMatch1 || (halfMatch = halfMatch2) : halfMatch = halfMatch1;\n }\n if (!halfMatch)\n throw new Error(\"Unable to find a half match.\");\n let text1A, text1B, text2A, text2B;\n text1.length > text2.length ? (text1A = halfMatch[0], text1B = halfMatch[1], text2A = halfMatch[2], text2B = halfMatch[3]) : (text2A = halfMatch[0], text2B = halfMatch[1], text1A = halfMatch[2], text1B = halfMatch[3]);\n const midCommon = halfMatch[4];\n return [text1A, text1B, text2A, text2B, midCommon];\n}\nfunction halfMatchI(longText, shortText, i) {\n const seed = longText.slice(i, i + Math.floor(longText.length / 4));\n let j = -1, bestCommon = \"\", bestLongTextA, bestLongTextB, bestShortTextA, bestShortTextB;\n for (; (j = shortText.indexOf(seed, j + 1)) !== -1; ) {\n const prefixLength = getCommonPrefix(longText.slice(i), shortText.slice(j)), suffixLength = getCommonSuffix(longText.slice(0, i), shortText.slice(0, j));\n bestCommon.length < suffixLength + prefixLength && (bestCommon = shortText.slice(j - suffixLength, j) + shortText.slice(j, j + prefixLength), bestLongTextA = longText.slice(0, i - suffixLength), bestLongTextB = longText.slice(i + prefixLength), bestShortTextA = shortText.slice(0, j - suffixLength), bestShortTextB = shortText.slice(j + prefixLength));\n }\n return bestCommon.length * 2 >= longText.length ? [\n bestLongTextA || \"\",\n bestLongTextB || \"\",\n bestShortTextA || \"\",\n bestShortTextB || \"\",\n bestCommon || \"\"\n ] : null;\n}\nfunction charsToLines(diffs, lineArray) {\n for (let x = 0; x < diffs.length; x++) {\n const chars = diffs[x][1], text = [];\n for (let y = 0; y < chars.length; y++)\n text[y] = lineArray[chars.charCodeAt(y)];\n diffs[x][1] = text.join(\"\");\n }\n}\nfunction linesToChars(textA, textB) {\n const lineArray = [], lineHash = {};\n lineArray[0] = \"\";\n function diffLinesToMunge(text) {\n let chars = \"\", lineStart = 0, lineEnd = -1, lineArrayLength = lineArray.length;\n for (; lineEnd < text.length - 1; ) {\n lineEnd = text.indexOf(`\n`, lineStart), lineEnd === -1 && (lineEnd = text.length - 1);\n let line = text.slice(lineStart, lineEnd + 1);\n (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) : lineHash[line] !== void 0) ? chars += String.fromCharCode(lineHash[line]) : (lineArrayLength === maxLines && (line = text.slice(lineStart), lineEnd = text.length), chars += String.fromCharCode(lineArrayLength), lineHash[line] = lineArrayLength, lineArray[lineArrayLength++] = line), lineStart = lineEnd + 1;\n }\n return chars;\n }\n let maxLines = 4e4;\n const chars1 = diffLinesToMunge(textA);\n maxLines = 65535;\n const chars2 = diffLinesToMunge(textB);\n return { chars1, chars2, lineArray };\n}\nfunction doLineModeDiff(textA, textB, opts) {\n let text1 = textA, text2 = textB;\n const a = linesToChars(text1, text2);\n text1 = a.chars1, text2 = a.chars2;\n const linearray = a.lineArray;\n let diffs = doDiff(text1, text2, {\n checkLines: !1,\n deadline: opts.deadline\n });\n charsToLines(diffs, linearray), diffs = cleanupSemantic(diffs), diffs.push([DIFF_EQUAL, \"\"]);\n let pointer = 0, countDelete = 0, countInsert = 0, textDelete = \"\", textInsert = \"\";\n for (; pointer < diffs.length; ) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n countInsert++, textInsert += diffs[pointer][1];\n break;\n case DIFF_DELETE:\n countDelete++, textDelete += diffs[pointer][1];\n break;\n case DIFF_EQUAL:\n if (countDelete >= 1 && countInsert >= 1) {\n diffs.splice(pointer - countDelete - countInsert, countDelete + countInsert), pointer = pointer - countDelete - countInsert;\n const aa = doDiff(textDelete, textInsert, {\n checkLines: !1,\n deadline: opts.deadline\n });\n for (let j = aa.length - 1; j >= 0; j--)\n diffs.splice(pointer, 0, aa[j]);\n pointer += aa.length;\n }\n countInsert = 0, countDelete = 0, textDelete = \"\", textInsert = \"\";\n break;\n default:\n throw new Error(\"Unknown diff operation.\");\n }\n pointer++;\n }\n return diffs.pop(), diffs;\n}\nfunction computeDiff(text1, text2, opts) {\n let diffs;\n if (!text1)\n return [[DIFF_INSERT, text2]];\n if (!text2)\n return [[DIFF_DELETE, text1]];\n const longtext = text1.length > text2.length ? text1 : text2, shorttext = text1.length > text2.length ? text2 : text1, i = longtext.indexOf(shorttext);\n if (i !== -1)\n return diffs = [\n [DIFF_INSERT, longtext.substring(0, i)],\n [DIFF_EQUAL, shorttext],\n [DIFF_INSERT, longtext.substring(i + shorttext.length)]\n ], text1.length > text2.length && (diffs[0][0] = DIFF_DELETE, diffs[2][0] = DIFF_DELETE), diffs;\n if (shorttext.length === 1)\n return [\n [DIFF_DELETE, text1],\n [DIFF_INSERT, text2]\n ];\n const halfMatch = findHalfMatch(text1, text2);\n if (halfMatch) {\n const text1A = halfMatch[0], text1B = halfMatch[1], text2A = halfMatch[2], text2B = halfMatch[3], midCommon = halfMatch[4], diffsA = doDiff(text1A, text2A, opts), diffsB = doDiff(text1B, text2B, opts);\n return diffsA.concat([[DIFF_EQUAL, midCommon]], diffsB);\n }\n return opts.checkLines && text1.length > 100 && text2.length > 100 ? doLineModeDiff(text1, text2, opts) : bisect(text1, text2, opts.deadline);\n}\nvar __defProp$2 = Object.defineProperty, __getOwnPropSymbols$2 = Object.getOwnPropertySymbols, __hasOwnProp$2 = Object.prototype.hasOwnProperty, __propIsEnum$2 = Object.prototype.propertyIsEnumerable, __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value, __spreadValues$2 = (a, b) => {\n for (var prop in b || (b = {}))\n __hasOwnProp$2.call(b, prop) && __defNormalProp$2(a, prop, b[prop]);\n if (__getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(b))\n __propIsEnum$2.call(b, prop) && __defNormalProp$2(a, prop, b[prop]);\n return a;\n};\nconst DIFF_DELETE = -1, DIFF_INSERT = 1, DIFF_EQUAL = 0;\nfunction diff(textA, textB, opts) {\n if (textA === null || textB === null)\n throw new Error(\"Null input. (diff)\");\n const diffs = doDiff(textA, textB, createInternalOpts(opts || {}));\n return adjustDiffForSurrogatePairs(diffs), diffs;\n}\nfunction doDiff(textA, textB, options) {\n let text1 = textA, text2 = textB;\n if (text1 === text2)\n return text1 ? [[DIFF_EQUAL, text1]] : [];\n let commonlength = getCommonPrefix(text1, text2);\n const commonprefix = text1.substring(0, commonlength);\n text1 = text1.substring(commonlength), text2 = text2.substring(commonlength), commonlength = getCommonSuffix(text1, text2);\n const commonsuffix = text1.substring(text1.length - commonlength);\n text1 = text1.substring(0, text1.length - commonlength), text2 = text2.substring(0, text2.length - commonlength);\n let diffs = computeDiff(text1, text2, options);\n return commonprefix && diffs.unshift([DIFF_EQUAL, commonprefix]), commonsuffix && diffs.push([DIFF_EQUAL, commonsuffix]), diffs = cleanupMerge(diffs), diffs;\n}\nfunction createDeadLine(timeout) {\n let t = 1;\n return typeof timeout < \"u\" && (t = timeout <= 0 ? Number.MAX_VALUE : timeout), Date.now() + t * 1e3;\n}\nfunction createInternalOpts(opts) {\n return __spreadValues$2({\n checkLines: !0,\n deadline: createDeadLine(opts.timeout || 1)\n }, opts);\n}\nfunction combineChar(data, char, dir) {\n return dir === 1 ? data + char : char + data;\n}\nfunction splitChar(data, dir) {\n return dir === 1 ? [data.substring(0, data.length - 1), data[data.length - 1]] : [data.substring(1), data[0]];\n}\nfunction hasSharedChar(diffs, i, j, dir) {\n return dir === 1 ? diffs[i][1][diffs[i][1].length - 1] === diffs[j][1][diffs[j][1].length - 1] : diffs[i][1][0] === diffs[j][1][0];\n}\nfunction deisolateChar(diffs, i, dir) {\n const inv = dir === 1 ? -1 : 1;\n let insertIdx = null, deleteIdx = null, j = i + dir;\n for (; j >= 0 && j < diffs.length && (insertIdx === null || deleteIdx === null); j += dir) {\n const [op, text2] = diffs[j];\n if (text2.length !== 0) {\n if (op === DIFF_INSERT) {\n insertIdx === null && (insertIdx = j);\n continue;\n } else if (op === DIFF_DELETE) {\n deleteIdx === null && (deleteIdx = j);\n continue;\n } else if (op === DIFF_EQUAL) {\n if (insertIdx === null && deleteIdx === null) {\n const [rest, char2] = splitChar(diffs[i][1], dir);\n diffs[i][1] = rest, diffs[j][1] = combineChar(diffs[j][1], char2, inv);\n return;\n }\n break;\n }\n }\n }\n if (insertIdx !== null && deleteIdx !== null && hasSharedChar(diffs, insertIdx, deleteIdx, dir)) {\n const [insertText, insertChar] = splitChar(diffs[insertIdx][1], inv), [deleteText] = splitChar(diffs[deleteIdx][1], inv);\n diffs[insertIdx][1] = insertText, diffs[deleteIdx][1] = deleteText, diffs[i][1] = combineChar(diffs[i][1], insertChar, dir);\n return;\n }\n const [text, char] = splitChar(diffs[i][1], dir);\n diffs[i][1] = text, insertIdx === null ? (diffs.splice(j, 0, [DIFF_INSERT, char]), deleteIdx !== null && deleteIdx >= j && deleteIdx++) : diffs[insertIdx][1] = combineChar(diffs[insertIdx][1], char, inv), deleteIdx === null ? diffs.splice(j, 0, [DIFF_DELETE, char]) : diffs[deleteIdx][1] = combineChar(diffs[deleteIdx][1], char, inv);\n}\nfunction adjustDiffForSurrogatePairs(diffs) {\n for (let i = 0; i < diffs.length; i++) {\n const [diffType, diffText] = diffs[i];\n if (diffText.length === 0) continue;\n const firstChar = diffText[0], lastChar = diffText[diffText.length - 1];\n isHighSurrogate(lastChar) && diffType === DIFF_EQUAL && deisolateChar(diffs, i, 1), isLowSurrogate(firstChar) && diffType === DIFF_EQUAL && deisolateChar(diffs, i, -1);\n }\n for (let i = 0; i < diffs.length; i++)\n diffs[i][1].length === 0 && diffs.splice(i, 1);\n}\nfunction cleanupSemantic(rawDiffs) {\n let diffs = rawDiffs.map((diff2) => cloneDiff(diff2)), hasChanges = !1;\n const equalities = [];\n let equalitiesLength = 0, lastEquality = null, pointer = 0, lengthInsertions1 = 0, lengthDeletions1 = 0, lengthInsertions2 = 0, lengthDeletions2 = 0;\n for (; pointer < diffs.length; )\n diffs[pointer][0] === DIFF_EQUAL ? (equalities[equalitiesLength++] = pointer, lengthInsertions1 = lengthInsertions2, lengthDeletions1 = lengthDeletions2, lengthInsertions2 = 0, lengthDeletions2 = 0, lastEquality = diffs[pointer][1]) : (diffs[pointer][0] === DIFF_INSERT ? lengthInsertions2 += diffs[pointer][1].length : lengthDeletions2 += diffs[pointer][1].length, lastEquality && lastEquality.length <= Math.max(lengthInsertions1, lengthDeletions1) && lastEquality.length <= Math.max(lengthInsertions2, lengthDeletions2) && (diffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastEquality]), diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT, equalitiesLength--, equalitiesLength--, pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1, lengthInsertions1 = 0, lengthDeletions1 = 0, lengthInsertions2 = 0, lengthDeletions2 = 0, lastEquality = null, hasChanges = !0)), pointer++;\n for (hasChanges && (diffs = cleanupMerge(diffs)), diffs = cleanupSemanticLossless(diffs), pointer = 1; pointer < diffs.length; ) {\n if (diffs[pointer - 1][0] === DIFF_DELETE && diffs[pointer][0] === DIFF_INSERT) {\n const deletion = diffs[pointer - 1][1], insertion = diffs[pointer][1], overlapLength1 = getCommonOverlap(deletion, insertion), overlapLength2 = getCommonOverlap(insertion, deletion);\n overlapLength1 >= overlapLength2 ? (overlapLength1 >= deletion.length / 2 || overlapLength1 >= insertion.length / 2) && (diffs.splice(pointer, 0, [DIFF_EQUAL, insertion.substring(0, overlapLength1)]), diffs[pointer - 1][1] = deletion.substring(0, deletion.length - overlapLength1), diffs[pointer + 1][1] = insertion.substring(overlapLength1), pointer++) : (overlapLength2 >= deletion.length / 2 || overlapLength2 >= insertion.length / 2) && (diffs.splice(pointer, 0, [DIFF_EQUAL, deletion.substring(0, overlapLength2)]), diffs[pointer - 1][0] = DIFF_INSERT, diffs[pointer - 1][1] = insertion.substring(0, insertion.length - overlapLength2), diffs[pointer + 1][0] = DIFF_DELETE, diffs[pointer + 1][1] = deletion.substring(overlapLength2), pointer++), pointer++;\n }\n pointer++;\n }\n return diffs;\n}\nconst nonAlphaNumericRegex = /[^a-zA-Z0-9]/, whitespaceRegex = /\\s/, linebreakRegex = /[\\r\\n]/, blanklineEndRegex = /\\n\\r?\\n$/, blanklineStartRegex = /^\\r?\\n\\r?\\n/;\nfunction cleanupSemanticLossless(rawDiffs) {\n const diffs = rawDiffs.map((diff2) => cloneDiff(diff2));\n function diffCleanupSemanticScore(one, two) {\n if (!one || !two)\n return 6;\n const char1 = one.charAt(one.length - 1), char2 = two.charAt(0), nonAlphaNumeric1 = char1.match(nonAlphaNumericRegex), nonAlphaNumeric2 = char2.match(nonAlphaNumericRegex), whitespace1 = nonAlphaNumeric1 && char1.match(whitespaceRegex), whitespace2 = nonAlphaNumeric2 && char2.match(whitespaceRegex), lineBreak1 = whitespace1 && char1.match(linebreakRegex), lineBreak2 = whitespace2 && char2.match(linebreakRegex), blankLine1 = lineBreak1 && one.match(blanklineEndRegex), blankLine2 = lineBreak2 && two.match(blanklineStartRegex);\n return blankLine1 || blankLine2 ? 5 : lineBreak1 || lineBreak2 ? 4 : nonAlphaNumeric1 && !whitespace1 && whitespace2 ? 3 : whitespace1 || whitespace2 ? 2 : nonAlphaNumeric1 || nonAlphaNumeric2 ? 1 : 0;\n }\n let pointer = 1;\n for (; pointer < diffs.length - 1; ) {\n if (diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL) {\n let equality1 = diffs[pointer - 1][1], edit = diffs[pointer][1], equality2 = diffs[pointer + 1][1];\n const commonOffset = getCommonSuffix(equality1, edit);\n if (commonOffset) {\n const commonString = edit.substring(edit.length - commonOffset);\n equality1 = equality1.substring(0, equality1.length - commonOffset), edit = commonString + edit.substring(0, edit.length - commonOffset), equality2 = commonString + equality2;\n }\n let bestEquality1 = equality1, bestEdit = edit, bestEquality2 = equality2, bestScore = diffCleanupSemanticScore(equality1, edit) + diffCleanupSemanticScore(edit, equality2);\n for (; edit.charAt(0) === equality2.charAt(0); ) {\n equality1 += edit.charAt(0), edit = edit.substring(1) + equality2.charAt(0), equality2 = equality2.substring(1);\n const score = diffCleanupSemanticScore(equality1, edit) + diffCleanupSemanticScore(edit, equality2);\n score >= bestScore && (bestScore = score, bestEquality1 = equality1, bestEdit = edit, bestEquality2 = equality2);\n }\n diffs[pointer - 1][1] !== bestEquality1 && (bestEquality1 ? diffs[pointer - 1][1] = bestEquality1 : (diffs.splice(pointer - 1, 1), pointer--), diffs[pointer][1] = bestEdit, bestEquality2 ? diffs[pointer + 1][1] = bestEquality2 : (diffs.splice(pointer + 1, 1), pointer--));\n }\n pointer++;\n }\n return diffs;\n}\nfunction cleanupMerge(rawDiffs) {\n let diffs = rawDiffs.map((diff2) => cloneDiff(diff2));\n diffs.push([DIFF_EQUAL, \"\"]);\n let pointer = 0, countDelete = 0, countInsert = 0, textDelete = \"\", textInsert = \"\", commonlength;\n for (; pointer < diffs.length; )\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n countInsert++, textInsert += diffs[pointer][1], pointer++;\n break;\n case DIFF_DELETE:\n countDelete++, textDelete += diffs[pointer][1], pointer++;\n break;\n case DIFF_EQUAL:\n countDelete + countInsert > 1 ? (countDelete !== 0 && countInsert !== 0 && (commonlength = getCommonPrefix(textInsert, textDelete), commonlength !== 0 && (pointer - countDelete - countInsert > 0 && diffs[pointer - countDelete - countInsert - 1][0] === DIFF_EQUAL ? diffs[pointer - countDelete - countInsert - 1][1] += textInsert.substring(\n 0,\n commonlength\n ) : (diffs.splice(0, 0, [DIFF_EQUAL, textInsert.substring(0, commonlength)]), pointer++), textInsert = textInsert.substring(commonlength), textDelete = textDelete.substring(commonlength)), commonlength = getCommonSuffix(textInsert, textDelete), commonlength !== 0 && (diffs[pointer][1] = textInsert.substring(textInsert.length - commonlength) + diffs[pointer][1], textInsert = textInsert.substring(0, textInsert.length - commonlength), textDelete = textDelete.substring(0, textDelete.length - commonlength))), pointer -= countDelete + countInsert, diffs.splice(pointer, countDelete + countInsert), textDelete.length && (diffs.splice(pointer, 0, [DIFF_DELETE, textDelete]), pointer++), textInsert.length && (diffs.splice(pointer, 0, [DIFF_INSERT, textInsert]), pointer++), pointer++) : pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL ? (diffs[pointer - 1][1] += diffs[pointer][1], diffs.splice(pointer, 1)) : pointer++, countInsert = 0, countDelete = 0, textDelete = \"\", textInsert = \"\";\n break;\n default:\n throw new Error(\"Unknown diff operation\");\n }\n diffs[diffs.length - 1][1] === \"\" && diffs.pop();\n let hasChanges = !1;\n for (pointer = 1; pointer < diffs.length - 1; )\n diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL && (diffs[pointer][1].substring(diffs[pointer][1].length - diffs[pointer - 1][1].length) === diffs[pointer - 1][1] ? (diffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length), diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1], diffs.splice(pointer - 1, 1), hasChanges = !0) : diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) === diffs[pointer + 1][1] && (diffs[pointer - 1][1] += diffs[pointer + 1][1], diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1], diffs.splice(pointer + 1, 1), hasChanges = !0)), pointer++;\n return hasChanges && (diffs = cleanupMerge(diffs)), diffs;\n}\nfunction trueCount(...args) {\n return args.reduce((n, bool) => n + (bool ? 1 : 0), 0);\n}\nfunction cleanupEfficiency(rawDiffs, editCost = 4) {\n let diffs = rawDiffs.map((diff2) => cloneDiff(diff2)), hasChanges = !1;\n const equalities = [];\n let equalitiesLength = 0, lastEquality = null, pointer = 0, preIns = !1, preDel = !1, postIns = !1, postDel = !1;\n for (; pointer < diffs.length; )\n diffs[pointer][0] === DIFF_EQUAL ? (diffs[pointer][1].length < editCost && (postIns || postDel) ? (equalities[equalitiesLength++] = pointer, preIns = postIns, preDel = postDel, lastEquality = diffs[pointer][1]) : (equalitiesLength = 0, lastEquality = null), postIns = !1, postDel = !1) : (diffs[pointer][0] === DIFF_DELETE ? postDel = !0 : postIns = !0, lastEquality && (preIns && preDel && postIns && postDel || lastEquality.length < editCost / 2 && trueCount(preIns, preDel, postIns, postDel) === 3) && (diffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastEquality]), diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT, equalitiesLength--, lastEquality = null, preIns && preDel ? (postIns = !0, postDel = !0, equalitiesLength = 0) : (equalitiesLength--, pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1, postIns = !1, postDel = !1), hasChanges = !0)), pointer++;\n return hasChanges && (diffs = cleanupMerge(diffs)), diffs;\n}\nvar __defProp$1 = Object.defineProperty, __getOwnPropSymbols$1 = Object.getOwnPropertySymbols, __hasOwnProp$1 = Object.prototype.hasOwnProperty, __propIsEnum$1 = Object.prototype.propertyIsEnumerable, __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value, __spreadValues$1 = (a, b) => {\n for (var prop in b || (b = {}))\n __hasOwnProp$1.call(b, prop) && __defNormalProp$1(a, prop, b[prop]);\n if (__getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(b))\n __propIsEnum$1.call(b, prop) && __defNormalProp$1(a, prop, b[prop]);\n return a;\n};\nconst DEFAULT_OPTIONS = {\n /**\n * At what point is no match declared (0.0 = perfection, 1.0 = very loose).\n */\n threshold: 0.5,\n /**\n * How far to search for a match (0 = exact location, 1000+ = broad match).\n * A match this many characters away from the expected location will add\n * 1.0 to the score (0.0 is a perfect match).\n */\n distance: 1e3\n};\nfunction applyDefaults(options) {\n return __spreadValues$1(__spreadValues$1({}, DEFAULT_OPTIONS), options);\n}\nconst MAX_BITS$1 = 32;\nfunction bitap(text, pattern, loc, opts = {}) {\n if (pattern.length > MAX_BITS$1)\n throw new Error(\"Pattern too long for this browser.\");\n const options = applyDefaults(opts), s = getAlphabetFromPattern(pattern);\n function getBitapScore(e, x) {\n const accuracy = e / pattern.length, proximity = Math.abs(loc - x);\n return options.distance ? accuracy + proximity / options.distance : proximity ? 1 : accuracy;\n }\n let scoreThreshold = options.threshold, bestLoc = text.indexOf(pattern, loc);\n bestLoc !== -1 && (scoreThreshold = Math.min(getBitapScore(0, bestLoc), scoreThreshold), bestLoc = text.lastIndexOf(pattern, loc + pattern.length), bestLoc !== -1 && (scoreThreshold = Math.min(getBitapScore(0, bestLoc), scoreThreshold)));\n const matchmask = 1 << pattern.length - 1;\n bestLoc = -1;\n let binMin, binMid, binMax = pattern.length + text.length, lastRd = [];\n for (let d = 0; d < pattern.length; d++) {\n for (binMin = 0, binMid = binMax; binMin < binMid; )\n getBitapScore(d, loc + binMid) <= scoreThreshold ? binMin = binMid : binMax = binMid, binMid = Math.floor((binMax - binMin) / 2 + binMin);\n binMax = binMid;\n let start = Math.max(1, loc - binMid + 1);\n const finish = Math.min(loc + binMid, text.length) + pattern.length, rd = new Array(finish + 2);\n rd[finish + 1] = (1 << d) - 1;\n for (let j = finish; j >= start; j--) {\n const charMatch = s[text.charAt(j - 1)];\n if (d === 0 ? rd[j] = (rd[j + 1] << 1 | 1) & charMatch : rd[j] = (rd[j + 1] << 1 | 1) & charMatch | ((lastRd[j + 1] | lastRd[j]) << 1 | 1) | lastRd[j + 1], rd[j] & matchmask) {\n const score = getBitapScore(d, j - 1);\n if (score <= scoreThreshold)\n if (scoreThreshold = score, bestLoc = j - 1, bestLoc > loc)\n start = Math.max(1, 2 * loc - bestLoc);\n else\n break;\n }\n }\n if (getBitapScore(d + 1, loc) > scoreThreshold)\n break;\n lastRd = rd;\n }\n return bestLoc;\n}\nfunction getAlphabetFromPattern(pattern) {\n const s = {};\n for (let i = 0; i < pattern.length; i++)\n s[pattern.charAt(i)] = 0;\n for (let i = 0; i < pattern.length; i++)\n s[pattern.charAt(i)] |= 1 << pattern.length - i - 1;\n return s;\n}\nfunction match(text, pattern, searchLocation, options = {}) {\n if (text === null || pattern === null || searchLocation === null)\n throw new Error(\"Null input. (match())\");\n const loc = Math.max(0, Math.min(searchLocation, text.length));\n if (text === pattern)\n return 0;\n if (text.length) {\n if (text.substring(loc, loc + pattern.length) === pattern)\n return loc;\n } else return -1;\n return bitap(text, pattern, loc, options);\n}\nfunction diffText1(diffs) {\n const text = [];\n for (let x = 0; x < diffs.length; x++)\n diffs[x][0] !== DIFF_INSERT && (text[x] = diffs[x][1]);\n return text.join(\"\");\n}\nfunction diffText2(diffs) {\n const text = [];\n for (let x = 0; x < diffs.length; x++)\n diffs[x][0] !== DIFF_DELETE && (text[x] = diffs[x][1]);\n return text.join(\"\");\n}\nfunction levenshtein(diffs) {\n let leven = 0, insertions = 0, deletions = 0;\n for (let x = 0; x < diffs.length; x++) {\n const op = diffs[x][0], data = diffs[x][1];\n switch (op) {\n case DIFF_INSERT:\n insertions += data.length;\n break;\n case DIFF_DELETE:\n deletions += data.length;\n break;\n case DIFF_EQUAL:\n leven += Math.max(insertions, deletions), insertions = 0, deletions = 0;\n break;\n default:\n throw new Error(\"Unknown diff operation.\");\n }\n }\n return leven += Math.max(insertions, deletions), leven;\n}\nfunction xIndex(diffs, location) {\n let chars1 = 0, chars2 = 0, lastChars1 = 0, lastChars2 = 0, x;\n for (x = 0; x < diffs.length && (diffs[x][0] !== DIFF_INSERT && (chars1 += diffs[x][1].length), diffs[x][0] !== DIFF_DELETE && (chars2 += diffs[x][1].length), !(chars1 > location)); x++)\n lastChars1 = chars1, lastChars2 = chars2;\n return diffs.length !== x && diffs[x][0] === DIFF_DELETE ? lastChars2 : lastChars2 + (location - lastChars1);\n}\nfunction countUtf8Bytes(str) {\n let bytes = 0;\n for (let i = 0; i < str.length; i++) {\n const codePoint = str.codePointAt(i);\n if (typeof codePoint > \"u\")\n throw new Error(\"Failed to get codepoint\");\n bytes += utf8len(codePoint);\n }\n return bytes;\n}\nfunction adjustIndiciesToUcs2(patches, base, options = {}) {\n let byteOffset = 0, idx = 0;\n function advanceTo(target) {\n for (; byteOffset < target; ) {\n const codePoint = base.codePointAt(idx);\n if (typeof codePoint > \"u\")\n return idx;\n byteOffset += utf8len(codePoint), codePoint > 65535 ? idx += 2 : idx += 1;\n }\n if (!options.allowExceedingIndices && byteOffset !== target)\n throw new Error(\"Failed to determine byte offset\");\n return idx;\n }\n const adjusted = [];\n for (const patch of patches)\n adjusted.push({\n diffs: patch.diffs.map((diff2) => cloneDiff(diff2)),\n start1: advanceTo(patch.start1),\n start2: advanceTo(patch.start2),\n utf8Start1: patch.utf8Start1,\n utf8Start2: patch.utf8Start2,\n length1: patch.length1,\n length2: patch.length2,\n utf8Length1: patch.utf8Length1,\n utf8Length2: patch.utf8Length2\n });\n return adjusted;\n}\nfunction utf8len(codePoint) {\n return codePoint <= 127 ? 1 : codePoint <= 2047 ? 2 : codePoint <= 65535 ? 3 : 4;\n}\nconst MAX_BITS = 32, DEFAULT_MARGIN = 4;\nfunction addPadding(patches, margin = DEFAULT_MARGIN) {\n const paddingLength = margin;\n let nullPadding = \"\";\n for (let x = 1; x <= paddingLength; x++)\n nullPadding += String.fromCharCode(x);\n for (const p of patches)\n p.start1 += paddingLength, p.start2 += paddingLength, p.utf8Start1 += paddingLength, p.utf8Start2 += paddingLength;\n let patch = patches[0], diffs = patch.diffs;\n if (diffs.length === 0 || diffs[0][0] !== DIFF_EQUAL)\n diffs.unshift([DIFF_EQUAL, nullPadding]), patch.start1 -= paddingLength, patch.start2 -= paddingLength, patch.utf8Start1 -= paddingLength, patch.utf8Start2 -= paddingLength, patch.length1 += paddingLength, patch.length2 += paddingLength, patch.utf8Length1 += paddingLength, patch.utf8Length2 += paddingLength;\n else if (paddingLength > diffs[0][1].length) {\n const firstDiffLength = diffs[0][1].length, extraLength = paddingLength - firstDiffLength;\n diffs[0][1] = nullPadding.substring(firstDiffLength) + diffs[0][1], patch.start1 -= extraLength, patch.start2 -= extraLength, patch.utf8Start1 -= extraLength, patch.utf8Start2 -= extraLength, patch.length1 += extraLength, patch.length2 += extraLength, patch.utf8Length1 += extraLength, patch.utf8Length2 += extraLength;\n }\n if (patch = patches[patches.length - 1], diffs = patch.diffs, diffs.length === 0 || diffs[diffs.length - 1][0] !== DIFF_EQUAL)\n diffs.push([DIFF_EQUAL, nullPadding]), patch.length1 += paddingLength, patch.length2 += paddingLength, patch.utf8Length1 += paddingLength, patch.utf8Length2 += paddingLength;\n else if (paddingLength > diffs[diffs.length - 1][1].length) {\n const extraLength = paddingLength - diffs[diffs.length - 1][1].length;\n diffs[diffs.length - 1][1] += nullPadding.substring(0, extraLength), patch.length1 += extraLength, patch.length2 += extraLength, patch.utf8Length1 += extraLength, patch.utf8Length2 += extraLength;\n }\n return nullPadding;\n}\nfunction createPatchObject(start1, start2) {\n return {\n diffs: [],\n start1,\n start2,\n utf8Start1: start1,\n utf8Start2: start2,\n length1: 0,\n length2: 0,\n utf8Length1: 0,\n utf8Length2: 0\n };\n}\nfunction splitMax(patches, margin = DEFAULT_MARGIN) {\n const patchSize = MAX_BITS;\n for (let x = 0; x < patches.length; x++) {\n if (patches[x].length1 <= patchSize)\n continue;\n const bigpatch = patches[x];\n patches.splice(x--, 1);\n let start1 = bigpatch.start1, start2 = bigpatch.start2, preContext = \"\";\n for (; bigpatch.diffs.length !== 0; ) {\n const patch = createPatchObject(start1 - preContext.length, start2 - preContext.length);\n let empty = !0;\n if (preContext !== \"\") {\n const precontextByteCount = countUtf8Bytes(preContext);\n patch.length1 = preContext.length, patch.utf8Length1 = precontextByteCount, patch.length2 = preContext.length, patch.utf8Length2 = precontextByteCount, patch.diffs.push([DIFF_EQUAL, preContext]);\n }\n for (; bigpatch.diffs.length !== 0 && patch.length1 < patchSize - margin; ) {\n const diffType = bigpatch.diffs[0][0];\n let diffText = bigpatch.diffs[0][1], diffTextByteCount = countUtf8Bytes(diffText);\n if (diffType === DIFF_INSERT) {\n patch.length2 += diffText.length, patch.utf8Length2 += diffTextByteCount, start2 += diffText.length;\n const diff2 = bigpatch.diffs.shift();\n diff2 && patch.diffs.push(diff2), empty = !1;\n } else diffType === DIFF_DELETE && patch.diffs.length === 1 && patch.diffs[0][0] === DIFF_EQUAL && diffText.length > 2 * patchSize ? (patch.length1 += diffText.length, patch.utf8Length1 += diffTextByteCount, start1 += diffText.length, empty = !1, patch.diffs.push([diffType, diffText]), bigpatch.diffs.shift()) : (diffText = diffText.substring(0, patchSize - patch.length1 - margin), diffTextByteCount = countUtf8Bytes(diffText), patch.length1 += diffText.length, patch.utf8Length1 += diffTextByteCount, start1 += diffText.length, diffType === DIFF_EQUAL ? (patch.length2 += diffText.length, patch.utf8Length2 += diffTextByteCount, start2 += diffText.length) : empty = !1, patch.diffs.push([diffType, diffText]), diffText === bigpatch.diffs[0][1] ? bigpatch.diffs.shift() : bigpatch.diffs[0][1] = bigpatch.diffs[0][1].substring(diffText.length));\n }\n preContext = diffText2(patch.diffs), preContext = preContext.substring(preContext.length - margin);\n const postContext = diffText1(bigpatch.diffs).substring(0, margin), postContextByteCount = countUtf8Bytes(postContext);\n postContext !== \"\" && (patch.length1 += postContext.length, patch.length2 += postContext.length, patch.utf8Length1 += postContextByteCount, patch.utf8Length2 += postContextByteCount, patch.diffs.length !== 0 && patch.diffs[patch.diffs.length - 1][0] === DIFF_EQUAL ? patch.diffs[patch.diffs.length - 1][1] += postContext : patch.diffs.push([DIFF_EQUAL, postContext])), empty || patches.splice(++x, 0, patch);\n }\n }\n}\nfunction apply(patches, originalText, opts = {}) {\n if (typeof patches == \"string\")\n throw new Error(\"Patches must be an array - pass the patch to `parsePatch()` first\");\n let text = originalText;\n if (patches.length === 0)\n return [text, []];\n const parsed = adjustIndiciesToUcs2(patches, text, {\n allowExceedingIndices: opts.allowExceedingIndices\n }), margin = opts.margin || DEFAULT_MARGIN, deleteThreshold = opts.deleteThreshold || 0.4, nullPadding = addPadding(parsed, margin);\n text = nullPadding + text + nullPadding, splitMax(parsed, margin);\n let delta = 0;\n const results = [];\n for (let x = 0; x < parsed.length; x++) {\n const expectedLoc = parsed[x].start2 + delta, text1 = diffText1(parsed[x].diffs);\n let startLoc, endLoc = -1;\n if (text1.length > MAX_BITS ? (startLoc = match(text, text1.substring(0, MAX_BITS), expectedLoc), startLoc !== -1 && (endLoc = match(\n text,\n text1.substring(text1.length - MAX_BITS),\n expectedLoc + text1.length - MAX_BITS\n ), (endLoc === -1 || startLoc >= endLoc) && (startLoc = -1))) : startLoc = match(text, text1, expectedLoc), startLoc === -1)\n results[x] = !1, delta -= parsed[x].length2 - parsed[x].length1;\n else {\n results[x] = !0, delta = startLoc - expectedLoc;\n let text2;\n if (endLoc === -1 ? text2 = text.substring(startLoc, startLoc + text1.length) : text2 = text.substring(startLoc, endLoc + MAX_BITS), text1 === text2)\n text = text.substring(0, startLoc) + diffText2(parsed[x].diffs) + text.substring(startLoc + text1.length);\n else {\n let diffs = diff(text1, text2, { checkLines: !1 });\n if (text1.length > MAX_BITS && levenshtein(diffs) / text1.length > deleteThreshold)\n results[x] = !1;\n else {\n diffs = cleanupSemanticLossless(diffs);\n let index1 = 0, index2 = 0;\n for (let y = 0; y < parsed[x].diffs.length; y++) {\n const mod = parsed[x].diffs[y];\n mod[0] !== DIFF_EQUAL && (index2 = xIndex(diffs, index1)), mod[0] === DIFF_INSERT ? text = text.substring(0, startLoc + index2) + mod[1] + text.substring(startLoc + index2) : mod[0] === DIFF_DELETE && (text = text.substring(0, startLoc + index2) + text.substring(startLoc + xIndex(diffs, index1 + mod[1].length))), mod[0] !== DIFF_DELETE && (index1 += mod[1].length);\n }\n }\n }\n }\n }\n return text = text.substring(nullPadding.length, text.length - nullPadding.length), [text, results];\n}\nvar __defProp = Object.defineProperty, __getOwnPropSymbols = Object.getOwnPropertySymbols, __hasOwnProp = Object.prototype.hasOwnProperty, __propIsEnum = Object.prototype.propertyIsEnumerable, __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value, __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n __hasOwnProp.call(b, prop) && __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b))\n __propIsEnum.call(b, prop) && __defNormalProp(a, prop, b[prop]);\n return a;\n};\nconst DEFAULT_OPTS = {\n margin: 4\n};\nfunction getDefaultOpts(opts = {}) {\n return __spreadValues(__spreadValues({}, DEFAULT_OPTS), opts);\n}\nfunction make(a, b, options) {\n if (typeof a == \"string\" && typeof b == \"string\") {\n let diffs = diff(a, b, { checkLines: !0 });\n return diffs.length > 2 && (diffs = cleanupSemantic(diffs), diffs = cleanupEfficiency(diffs)), _make(a, diffs, getDefaultOpts(options));\n }\n if (a && Array.isArray(a) && typeof b > \"u\")\n return _make(diffText1(a), a, getDefaultOpts(options));\n if (typeof a == \"string\" && b && Array.isArray(b))\n return _make(a, b, getDefaultOpts(options));\n throw new Error(\"Unknown call format to make()\");\n}\nfunction _make(textA, diffs, options) {\n if (diffs.length === 0)\n return [];\n const patches = [];\n let patch = createPatchObject(0, 0), patchDiffLength = 0, charCount1 = 0, charCount2 = 0, utf8Count1 = 0, utf8Count2 = 0, prepatchText = textA, postpatchText = textA;\n for (let x = 0; x < diffs.length; x++) {\n const currentDiff = diffs[x], [diffType, diffText] = currentDiff, diffTextLength = diffText.length, diffByteLength = countUtf8Bytes(diffText);\n switch (!patchDiffLength && diffType !== DIFF_EQUAL && (patch.start1 = charCount1, patch.start2 = charCount2, patch.utf8Start1 = utf8Count1, patch.utf8Start2 = utf8Count2), diffType) {\n case DIFF_INSERT:\n patch.diffs[patchDiffLength++] = currentDiff, patch.length2 += diffTextLength, patch.utf8Length2 += diffByteLength, postpatchText = postpatchText.substring(0, charCount2) + diffText + postpatchText.substring(charCount2);\n break;\n case DIFF_DELETE:\n patch.length1 += diffTextLength, patch.utf8Length1 += diffByteLength, patch.diffs[patchDiffLength++] = currentDiff, postpatchText = postpatchText.substring(0, charCount2) + postpatchText.substring(charCount2 + diffTextLength);\n break;\n case DIFF_EQUAL:\n diffTextLength <= 2 * options.margin && patchDiffLength && diffs.length !== x + 1 ? (patch.diffs[patchDiffLength++] = currentDiff, patch.length1 += diffTextLength, patch.length2 += diffTextLength, patch.utf8Length1 += diffByteLength, patch.utf8Length2 += diffByteLength) : diffTextLength >= 2 * options.margin && patchDiffLength && (addContext(patch, prepatchText, options), patches.push(patch), patch = createPatchObject(-1, -1), patchDiffLength = 0, prepatchText = postpatchText, charCount1 = charCount2, utf8Count1 = utf8Count2);\n break;\n default:\n throw new Error(\"Unknown diff type\");\n }\n diffType !== DIFF_INSERT && (charCount1 += diffTextLength, utf8Count1 += diffByteLength), diffType !== DIFF_DELETE && (charCount2 += diffTextLength, utf8Count2 += diffByteLength);\n }\n return patchDiffLength && (addContext(patch, prepatchText, options), patches.push(patch)), patches;\n}\nfunction addContext(patch, text, opts) {\n if (text.length === 0)\n return;\n let pattern = text.substring(patch.start2, patch.start2 + patch.length1), padding = 0;\n for (; text.indexOf(pattern) !== text.lastIndexOf(pattern) && pattern.length < MAX_BITS - opts.margin - opts.margin; )\n padding += opts.margin, pattern = text.substring(patch.start2 - padding, patch.start2 + patch.length1 + padding);\n padding += opts.margin;\n let prefixStart = patch.start2 - padding;\n prefixStart >= 1 && isLowSurrogate(text[prefixStart]) && prefixStart--;\n const prefix = text.substring(prefixStart, patch.start2);\n prefix && patch.diffs.unshift([DIFF_EQUAL, prefix]);\n const prefixLength = prefix.length, prefixUtf8Length = countUtf8Bytes(prefix);\n let suffixEnd = patch.start2 + patch.length1 + padding;\n suffixEnd < text.length && isLowSurrogate(text[suffixEnd]) && suffixEnd++;\n const suffix = text.substring(patch.start2 + patch.length1, suffixEnd);\n suffix && patch.diffs.push([DIFF_EQUAL, suffix]);\n const suffixLength = suffix.length, suffixUtf8Length = countUtf8Bytes(suffix);\n patch.start1 -= prefixLength, patch.start2 -= prefixLength, patch.utf8Start1 -= prefixUtf8Length, patch.utf8Start2 -= prefixUtf8Length, patch.length1 += prefixLength + suffixLength, patch.length2 += prefixLength + suffixLength, patch.utf8Length1 += prefixUtf8Length + suffixUtf8Length, patch.utf8Length2 += prefixUtf8Length + suffixUtf8Length;\n}\nconst patchHeader = /^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;\nfunction parse(textline) {\n if (!textline)\n return [];\n const patches = [], lines = textline.split(`\n`);\n let textPointer = 0;\n for (; textPointer < lines.length; ) {\n const m = lines[textPointer].match(patchHeader);\n if (!m)\n throw new Error(`Invalid patch string: ${lines[textPointer]}`);\n const patch = createPatchObject(toInt(m[1]), toInt(m[3]));\n for (patches.push(patch), m[2] === \"\" ? (patch.start1--, patch.utf8Start1--, patch.length1 = 1, patch.utf8Length1 = 1) : m[2] === \"0\" ? (patch.length1 = 0, patch.utf8Length1 = 0) : (patch.start1--, patch.utf8Start1--, patch.utf8Length1 = toInt(m[2]), patch.length1 = patch.utf8Length1), m[4] === \"\" ? (patch.start2--, patch.utf8Start2--, patch.length2 = 1, patch.utf8Length2 = 1) : m[4] === \"0\" ? (patch.length2 = 0, patch.utf8Length2 = 0) : (patch.start2--, patch.utf8Start2--, patch.utf8Length2 = toInt(m[4]), patch.length2 = patch.utf8Length2), textPointer++; textPointer < lines.length; ) {\n const currentLine = lines[textPointer], sign = currentLine.charAt(0);\n if (sign === \"@\")\n break;\n if (sign === \"\") {\n textPointer++;\n continue;\n }\n let line;\n try {\n line = decodeURI(currentLine.slice(1));\n } catch (ex) {\n throw new Error(`Illegal escape in parse: ${currentLine}`);\n }\n const utf8Diff = countUtf8Bytes(line) - line.length;\n if (sign === \"-\")\n patch.diffs.push([DIFF_DELETE, line]), patch.length1 -= utf8Diff;\n else if (sign === \"+\")\n patch.diffs.push([DIFF_INSERT, line]), patch.length2 -= utf8Diff;\n else if (sign === \" \")\n patch.diffs.push([DIFF_EQUAL, line]), patch.length1 -= utf8Diff, patch.length2 -= utf8Diff;\n else\n throw new Error(`Invalid patch mode \"${sign}\" in: ${line}`);\n textPointer++;\n }\n }\n return patches;\n}\nfunction toInt(num) {\n return parseInt(num, 10);\n}\nfunction stringify(patches) {\n return patches.map(stringifyPatch).join(\"\");\n}\nfunction stringifyPatch(patch) {\n const { utf8Length1, utf8Length2, utf8Start1, utf8Start2, diffs } = patch;\n let coords1;\n utf8Length1 === 0 ? coords1 = `${utf8Start1},0` : utf8Length1 === 1 ? coords1 = `${utf8Start1 + 1}` : coords1 = `${utf8Start1 + 1},${utf8Length1}`;\n let coords2;\n utf8Length2 === 0 ? coords2 = `${utf8Start2},0` : utf8Length2 === 1 ? coords2 = `${utf8Start2 + 1}` : coords2 = `${utf8Start2 + 1},${utf8Length2}`;\n const text = [`@@ -${coords1} +${coords2} @@\n`];\n let op;\n for (let x = 0; x < diffs.length; x++) {\n switch (diffs[x][0]) {\n case DIFF_INSERT:\n op = \"+\";\n break;\n case DIFF_DELETE:\n op = \"-\";\n break;\n case DIFF_EQUAL:\n op = \" \";\n break;\n default:\n throw new Error(\"Unknown patch operation.\");\n }\n text[x + 1] = `${op + encodeURI(diffs[x][1])}\n`;\n }\n return text.join(\"\").replace(/%20/g, \" \");\n}\nexport {\n DIFF_DELETE,\n DIFF_EQUAL,\n DIFF_INSERT,\n adjustIndiciesToUcs2,\n apply as applyPatches,\n cleanupEfficiency,\n cleanupSemantic,\n diff as makeDiff,\n make as makePatches,\n match,\n parse as parsePatch,\n stringifyPatch,\n stringify as stringifyPatches,\n xIndex\n};\n//# sourceMappingURL=index.js.map\n","import \"./module.css\";\nimport {cleanupSemantic as $haT8Y$cleanupSemantic, makeDiff as $haT8Y$makeDiff} from \"@sanity/diff-match-patch\";\n\n/* eslint-disable no-console */ /* Using local update by @dmsnell:\nhttps://github.com/dmsnell/diff-match-patch/blob/issues/69-broken-surrogate-pairs/javascript/diff_match_patch_uncompressed.js\n*/ \n/**\n * Simple is object check.\n * @param item\n * @returns {boolean}\n */ function $d0b82e0396560011$var$isObject(item) {\n return item && typeof item === 'object' && !Array.isArray(item) && item !== null;\n}\nfunction $d0b82e0396560011$export$2e2bcd8739ae039(target, source) {\n if ($d0b82e0396560011$var$isObject(target) && $d0b82e0396560011$var$isObject(source)) Object.keys(source).forEach((key)=>{\n if (key === '__proto__' || key === 'constructor') return;\n if ($d0b82e0396560011$var$isObject(source[key])) {\n if (!target[key] || !$d0b82e0396560011$var$isObject(target[key])) target[key] = source[key];\n $d0b82e0396560011$export$2e2bcd8739ae039(target[key], source[key]);\n } else Object.assign(target, {\n [key]: source[key]\n });\n });\n return target;\n}\n\n\nfunction $a61894d52139a1b7$export$2e2bcd8739ae039(callback, wait, immediate = false) {\n let timeout = null;\n let initialCall = true;\n return (...args)=>{\n const callNow = immediate && initialCall;\n const next = ()=>{\n callback.apply(this, args);\n timeout = null;\n };\n if (callNow) {\n initialCall = false;\n next();\n }\n if (!timeout) timeout = setTimeout(next, wait);\n };\n}\n\n\nfunction $20710ff753814db4$export$2e2bcd8739ae039(callback, wait) {\n let timeout;\n return (...args)=>{\n const context = this;\n clearTimeout(timeout);\n timeout = setTimeout(()=>callback.apply(context, args), wait);\n };\n}\n\n\nfunction $f81fe5d88190aca6$export$2e2bcd8739ae039(value = '') {\n const normalized = value.replace(/\\r\\n/g, '\\n');\n return normalized;\n}\n\n\n// generates a Bezier curve in SVG format\nfunction $238bad4938ddde7c$export$2e2bcd8739ae039(startX, startY, endX, endY) {\n const w = endX - startX;\n const halfWidth = startX + w / 2;\n // now create the curve\n // position it at the initial x,y coords\n // This is of the form \"C M,N O,P Q,R\" where C is a directive for SVG (\"curveto\"),\n // M,N are the first curve control point, O,P the second control point\n // and Q,R are the final coords\n return `M ${startX} ${startY} C ${halfWidth},${startY} ${halfWidth},${endY} ${endX},${endY}`;\n}\n\n\nvar $b5c286a254b261e6$export$2e2bcd8739ae039 = {\n DIFF_EQUAL: 0,\n DIFF_DELETE: -1,\n DIFF_INSERT: 1,\n EDITOR_RIGHT: 'right',\n EDITOR_LEFT: 'left',\n RTL: 'rtl',\n LTR: 'ltr',\n SVG_NS: 'http://www.w3.org/2000/svg',\n DIFF_GRANULARITY_SPECIFIC: 'specific',\n DIFF_GRANULARITY_BROAD: 'broad'\n};\n\n\nfunction $3d931e456f0d108c$export$2e2bcd8739ae039(acediff, editor) {\n let { mode: mode } = acediff.options;\n if (editor === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_LEFT && acediff.options.left.mode !== null) mode = acediff.options.left.mode;\n if (editor === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_RIGHT && acediff.options.right.mode !== null) mode = acediff.options.right.mode;\n return mode;\n}\n\n\n\nfunction $893f0e07a87dd83c$export$2e2bcd8739ae039(acediff, editor) {\n let { theme: theme } = acediff.options;\n if (editor === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_LEFT && acediff.options.left.theme !== null) theme = acediff.options.left.theme;\n if (editor === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_RIGHT && acediff.options.right.theme !== null) theme = acediff.options.right.theme;\n return theme;\n}\n\n\nfunction $fc0df9ae77cc2f56$export$2e2bcd8739ae039(editor, line) {\n return editor.ace.getSession().doc.getLine(line);\n}\n\n\nfunction $7eb2da7d8a00890b$export$2e2bcd8739ae039(acediff) {\n // editorHeight: document.getElementById(acediff.options.left.id).clientHeight\n return document.getElementById(acediff.options.left.id).offsetHeight;\n}\n\n\nfunction $c0c16fed0f3352bb$export$2e2bcd8739ae039(info) {\n const el = document.createElement('div');\n const props = {\n class: info.className,\n style: `top:${info.topOffset}px`,\n title: info.tooltip,\n 'data-diff-index': info.diffIndex\n };\n for(const key in props)el.setAttribute(key, props[key]);\n el.innerHTML = info.arrowContent;\n return el;\n}\n\n\n/**\n * Search for element in parent and create it if it can't be found\n * @param {*HTMLElement} parent\n * @param {string} elClass Element class\n *\n * Returns ID of the element\n */ function $419710df3593df8d$export$2e2bcd8739ae039(parent, elClass) {\n const guid = Math.random().toString(36).substr(2, 5);\n const newId = `js-${elClass}-${guid}`;\n const currentEl = parent.querySelector(`.${elClass}`);\n if (currentEl) {\n currentEl.id = currentEl.id || newId;\n return currentEl.id;\n }\n const el = document.createElement('div');\n parent.appendChild(el);\n el.className = elClass;\n el.id = newId;\n return el.id;\n}\n\n\nfunction $e485cb2ed1808217$export$2e2bcd8739ae039(elSelector, eventName, selector, fn) {\n const element = elSelector === 'document' ? document : document.querySelector(elSelector);\n element.addEventListener(eventName, (event)=>{\n const possibleTargets = element.querySelectorAll(selector);\n const { target: target } = event;\n for(let i = 0, l = possibleTargets.length; i < l; i += 1){\n let el = target;\n const p = possibleTargets[i];\n while(el && el !== element){\n if (el === p) fn.call(p, event);\n el = el.parentNode;\n }\n }\n });\n}\n\n\n\n\n\n// Range module placeholder\nlet $cd537e9fa9c12db2$var$Range;\nfunction $cd537e9fa9c12db2$var$getRangeModule(ace) {\n if (ace.Range) return ace.Range;\n const requireFunc = ace.acequire || ace.require;\n if (requireFunc) return requireFunc('ace/range');\n return false;\n}\nfunction $cd537e9fa9c12db2$export$2e2bcd8739ae039(options = {}) {\n // Ensure instance is a constructor with `new`\n if (!(this instanceof $cd537e9fa9c12db2$export$2e2bcd8739ae039)) return new $cd537e9fa9c12db2$export$2e2bcd8739ae039(options);\n // Current instance we pass around to other functions\n const acediff = this;\n const getDefaultAce = ()=>window ? window.ace : undefined;\n acediff.options = (0, $d0b82e0396560011$export$2e2bcd8739ae039)({\n ace: getDefaultAce(),\n mode: null,\n theme: null,\n element: null,\n diffGranularity: (0, $b5c286a254b261e6$export$2e2bcd8739ae039).DIFF_GRANULARITY_BROAD,\n lockScrolling: false,\n showDiffs: true,\n showConnectors: true,\n maxDiffs: 5000,\n left: {\n id: null,\n content: null,\n mode: null,\n theme: null,\n editable: true,\n copyLinkEnabled: true\n },\n right: {\n id: null,\n content: null,\n mode: null,\n theme: null,\n editable: true,\n copyLinkEnabled: true\n },\n classes: {\n gutterID: 'acediff__gutter',\n diff: 'acediff__diffLine',\n connector: 'acediff__connector',\n newCodeConnectorLink: 'acediff__newCodeConnector',\n newCodeConnectorLinkContent: '&#8594;',\n deletedCodeConnectorLink: 'acediff__deletedCodeConnector',\n deletedCodeConnectorLinkContent: '&#8592;',\n copyRightContainer: 'acediff__copy--right',\n copyLeftContainer: 'acediff__copy--left'\n },\n connectorYOffset: 0\n }, options);\n const { ace: ace } = acediff.options;\n if (!ace) {\n const errMessage = 'No ace editor found nor supplied - `options.ace` or `window.ace` is missing';\n console.error(errMessage);\n return new Error(errMessage);\n }\n $cd537e9fa9c12db2$var$Range = $cd537e9fa9c12db2$var$getRangeModule(ace);\n if (!$cd537e9fa9c12db2$var$Range) {\n const errMessage = 'Could not require Range module for Ace. Depends on your bundling strategy, but it usually comes with Ace itself. See https://ace.c9.io/api/range.html, open an issue on GitHub ace-diff/ace-diff';\n console.error(errMessage);\n return new Error(errMessage);\n }\n if (acediff.options.element === null) {\n const errMessage = 'You need to specify an element for Ace-diff - `options.element` is missing';\n console.error(errMessage);\n return new Error(errMessage);\n }\n if (acediff.options.element instanceof HTMLElement) acediff.el = acediff.options.element;\n else acediff.el = document.body.querySelector(acediff.options.element);\n if (!acediff.el) {\n const errMessage = `Can't find the specified element ${acediff.options.element}`;\n console.error(errMessage);\n return new Error(errMessage);\n }\n acediff.options.left.id = (0, $419710df3593df8d$export$2e2bcd8739ae039)(acediff.el, 'acediff__left');\n acediff.options.classes.gutterID = (0, $419710df3593df8d$export$2e2bcd8739ae039)(acediff.el, 'acediff__gutter');\n acediff.options.right.id = (0, $419710df3593df8d$export$2e2bcd8739ae039)(acediff.el, 'acediff__right');\n acediff.el.innerHTML = `<div class=\"acediff__wrap\">${acediff.el.innerHTML}</div>`;\n // instantiate the editors in an internal data structure\n // that will store a little info about the diffs and\n // editor content\n acediff.editors = {\n left: {\n ace: ace.edit(acediff.options.left.id),\n markers: [],\n lineLengths: []\n },\n right: {\n ace: ace.edit(acediff.options.right.id),\n markers: [],\n lineLengths: []\n },\n editorHeight: null\n };\n // set up the editors\n acediff.editors.left.ace.getSession().setMode((0, $3d931e456f0d108c$export$2e2bcd8739ae039)(acediff, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_LEFT));\n acediff.editors.right.ace.getSession().setMode((0, $3d931e456f0d108c$export$2e2bcd8739ae039)(acediff, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_RIGHT));\n acediff.editors.left.ace.setReadOnly(!acediff.options.left.editable);\n acediff.editors.right.ace.setReadOnly(!acediff.options.right.editable);\n acediff.editors.left.ace.setTheme((0, $893f0e07a87dd83c$export$2e2bcd8739ae039)(acediff, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_LEFT));\n acediff.editors.right.ace.setTheme((0, $893f0e07a87dd83c$export$2e2bcd8739ae039)(acediff, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_RIGHT));\n acediff.editors.left.ace.setValue((0, $f81fe5d88190aca6$export$2e2bcd8739ae039)(acediff.options.left.content), -1);\n acediff.editors.right.ace.setValue((0, $f81fe5d88190aca6$export$2e2bcd8739ae039)(acediff.options.right.content), -1);\n // store the visible height of the editors (assumed the same)\n acediff.editors.editorHeight = (0, $7eb2da7d8a00890b$export$2e2bcd8739ae039)(acediff);\n // The lineHeight is set to 0 initially and we need to wait for another tick to get it\n // Thus moving the diff() with it\n setTimeout(()=>{\n // assumption: both editors have same line heights\n acediff.lineHeight = acediff.editors.left.ace.renderer.lineHeight;\n $cd537e9fa9c12db2$var$addEventHandlers(acediff);\n $cd537e9fa9c12db2$var$createCopyContainers(acediff);\n $cd537e9fa9c12db2$var$createGutter(acediff);\n acediff.diff();\n }, 1);\n}\n// our public API\n$cd537e9fa9c12db2$export$2e2bcd8739ae039.prototype = {\n // allows on-the-fly changes to the AceDiff instance settings\n setOptions (options) {\n (0, $d0b82e0396560011$export$2e2bcd8739ae039)(this.options, options);\n this.diff();\n },\n getNumDiffs () {\n return this.diffs.length;\n },\n // exposes the Ace editors in case the dev needs it\n getEditors () {\n return {\n left: this.editors.left.ace,\n right: this.editors.right.ace\n };\n },\n // our main diffing function. I actually don't think this needs to exposed:\n // it's called automatically, but just to be safe, it's included\n diff () {\n const val1 = this.editors.left.ace.getSession().getValue();\n const val2 = this.editors.right.ace.getSession().getValue();\n // Main diff method that calculates the diffs\n const diff = (0, $haT8Y$cleanupSemantic)((0, $haT8Y$makeDiff)(val2, val1));\n this.editors.left.lineLengths = $cd537e9fa9c12db2$var$getLineLengths(this.editors.left);\n this.editors.right.lineLengths = $cd537e9fa9c12db2$var$getLineLengths(this.editors.right);\n // parse the raw diff into something a little more palatable\n const diffs = [];\n const offset = {\n left: 0,\n right: 0\n };\n diff.forEach((chunk)=>{\n const chunkType = chunk[0];\n let text = chunk[1];\n // oddly, occasionally the algorithm returns a diff with no changes made\n if (text.length === 0) return;\n if (chunkType === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).DIFF_EQUAL) {\n offset.left += text.length;\n offset.right += text.length;\n } else if (chunkType === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).DIFF_DELETE) {\n diffs.push($cd537e9fa9c12db2$var$computeDiff(this, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).DIFF_DELETE, offset.left, offset.right, text));\n offset.right += text.length;\n } else if (chunkType === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).DIFF_INSERT) {\n diffs.push($cd537e9fa9c12db2$var$computeDiff(this, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).DIFF_INSERT, offset.left, offset.right, text));\n offset.left += text.length;\n }\n }, this);\n // simplify our computed diffs; this groups together multiple diffs on subsequent lines\n this.diffs = $cd537e9fa9c12db2$var$simplifyDiffs(this, diffs);\n // if we're dealing with too many diffs, fail silently\n if (this.diffs.length > this.options.maxDiffs) return;\n $cd537e9fa9c12db2$var$clearDiffs(this);\n $cd537e9fa9c12db2$var$decorate(this);\n },\n destroy () {\n // destroy the two editors\n const leftValue = this.editors.left.ace.getValue();\n this.editors.left.ace.destroy();\n let oldDiv = this.editors.left.ace.container;\n let newDiv = oldDiv.cloneNode(false);\n newDiv.textContent = leftValue;\n oldDiv.parentNode.replaceChild(newDiv, oldDiv);\n const rightValue = this.editors.right.ace.getValue();\n this.editors.right.ace.destroy();\n oldDiv = this.editors.right.ace.container;\n newDiv = oldDiv.cloneNode(false);\n newDiv.textContent = rightValue;\n oldDiv.parentNode.replaceChild(newDiv, oldDiv);\n const elementById = document.getElementById(this.options.classes.gutterID);\n if (elementById) elementById.innerHTML = '';\n this.removeEventHandlers();\n }\n};\nfunction $cd537e9fa9c12db2$var$addEventHandlers(acediff) {\n acediff.editors.left.ace.getSession().on('changeScrollTop', (0, $a61894d52139a1b7$export$2e2bcd8739ae039)(()=>{\n $cd537e9fa9c12db2$var$updateGap(acediff);\n }, 16));\n acediff.editors.right.ace.getSession().on('changeScrollTop', (0, $a61894d52139a1b7$export$2e2bcd8739ae039)(()=>{\n $cd537e9fa9c12db2$var$updateGap(acediff);\n }, 16));\n const diff = acediff.diff.bind(acediff);\n acediff.editors.left.ace.on('change', diff);\n acediff.editors.right.ace.on('change', diff);\n if (acediff.options.left.copyLinkEnabled) (0, $e485cb2ed1808217$export$2e2bcd8739ae039)(`#${acediff.options.classes.gutterID}`, 'click', `.${acediff.options.classes.newCodeConnectorLink}`, (e)=>{\n $cd537e9fa9c12db2$var$copy(acediff, e, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).LTR);\n });\n if (acediff.options.right.copyLinkEnabled) (0, $e485cb2ed1808217$export$2e2bcd8739ae039)(`#${acediff.options.classes.gutterID}`, 'click', `.${acediff.options.classes.deletedCodeConnectorLink}`, (e)=>{\n $cd537e9fa9c12db2$var$copy(acediff, e, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).RTL);\n });\n const onResize = (0, $20710ff753814db4$export$2e2bcd8739ae039)(()=>{\n acediff.editors.availableHeight = document.getElementById(acediff.options.left.id).offsetHeight;\n // TODO this should re-init gutter\n acediff.diff();\n }, 250);\n window.addEventListener('resize', onResize);\n acediff.removeEventHandlers = ()=>{\n window.removeEventListener('resize', onResize);\n };\n}\nfunction $cd537e9fa9c12db2$var$copy(acediff, e, dir) {\n const diffIndex = parseInt(e.target.getAttribute('data-diff-index'), 10);\n const diff = acediff.diffs[diffIndex];\n let sourceEditor;\n let targetEditor;\n let startLine;\n let endLine;\n let targetStartLine;\n let targetEndLine;\n if (dir === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).LTR) {\n sourceEditor = acediff.editors.left;\n targetEditor = acediff.editors.right;\n startLine = diff.leftStartLine;\n endLine = diff.leftEndLine;\n targetStartLine = diff.rightStartLine;\n targetEndLine = diff.rightEndLine;\n } else {\n sourceEditor = acediff.editors.right;\n targetEditor = acediff.editors.left;\n startLine = diff.rightStartLine;\n endLine = diff.rightEndLine;\n targetStartLine = diff.leftStartLine;\n targetEndLine = diff.leftEndLine;\n }\n let contentToInsert = '';\n for(let i = startLine; i < endLine; i += 1){\n contentToInsert += (0, $fc0df9ae77cc2f56$export$2e2bcd8739ae039)(sourceEditor, i);\n // JMT: If the first line is blank we add an extra newline\n // because when it is inserted the first one is effectively eaten\n // by the replace and merging of the lines\n // However if the targetStartLine is the very top then we don't\n // if (i === startLine && contentToInsert === '' && targetStartLine != 0) {\n // contentToInsert += '\\n'\n // }\n // Only add a trailing newline if we're not on the final line\n if (i < sourceEditor.ace.getSession().getLength() - 1) contentToInsert += '\\n';\n }\n // keep track of the scroll height\n const h = targetEditor.ace.getSession().getScrollTop();\n targetEditor.ace.getSession().replace(new $cd537e9fa9c12db2$var$Range(targetStartLine, 0, targetEndLine, 0), contentToInsert);\n targetEditor.ace.getSession().setScrollTop(parseInt(h, 10));\n acediff.diff();\n}\nfunction $cd537e9fa9c12db2$var$getLineLengths(editor) {\n // getAllLines() returns an array of strings, each string is a line in the editor\n // however the lines do not include the newline character at the end, so we need to add 1\n const lines = editor.ace.getSession().doc.getAllLines();\n const lineLengths = [];\n lines.forEach((line)=>{\n lineLengths.push(line.length + 1) // +1 for the newline char\n ;\n });\n return lineLengths;\n}\n// shows a diff in one of the two editors.\nfunction $cd537e9fa9c12db2$var$showDiff(acediff, editor, startLine, endLine, className) {\n const editorInstance = acediff.editors[editor];\n if (endLine < startLine) // can this occur? Just in case.\n endLine = startLine;\n const classNames = `${className} ${endLine > startLine ? 'lines' : 'targetOnly'}`;\n if (endLine > startLine) endLine -= 1 /* because endLine is usually + 1 */ ;\n // to get Ace to highlight the full row we just set the start and end chars to 0 and 1\n editorInstance.markers.push(editorInstance.ace.session.addMarker(new $cd537e9fa9c12db2$var$Range(startLine, 0, endLine, 1), classNames, 'fullLine'));\n}\n// called onscroll. Updates the gap to ensure the connectors are all lining up\nfunction $cd537e9fa9c12db2$var$updateGap(acediff) {\n $cd537e9fa9c12db2$var$clearDiffs(acediff);\n $cd537e9fa9c12db2$var$decorate(acediff);\n // reposition the copy containers containing all the arrows\n $cd537e9fa9c12db2$var$positionCopyContainers(acediff);\n}\nfunction $cd537e9fa9c12db2$var$clearDiffs(acediff) {\n acediff.editors.left.markers.forEach((marker)=>{\n acediff.editors.left.ace.getSession().removeMarker(marker);\n }, acediff);\n acediff.editors.right.markers.forEach((marker)=>{\n acediff.editors.right.ace.getSession().removeMarker(marker);\n }, acediff);\n}\nfunction $cd537e9fa9c12db2$var$addConnector(acediff, leftStartLine, leftEndLine, rightStartLine, rightEndLine) {\n const leftScrollTop = acediff.editors.left.ace.getSession().getScrollTop();\n const rightScrollTop = acediff.editors.right.ace.getSession().getScrollTop();\n // All connectors, regardless of ltr or rtl\n // have the same point system, even if p1 === p3 or p2 === p4\n // p1 p2\n //\n // p3 p4\n acediff.connectorYOffset = 1;\n const p1_x = -1;\n const p1_y = leftStartLine * acediff.lineHeight - leftScrollTop + 0.5;\n const p2_x = acediff.gutterWidth + 1;\n const p2_y = rightStartLine * acediff.lineHeight - rightScrollTop + 0.5;\n const p3_x = -1;\n const p3_y = leftEndLine * acediff.lineHeight - leftScrollTop + acediff.connectorYOffset + 0.5;\n const p4_x = acediff.gutterWidth + 1;\n const p4_y = rightEndLine * acediff.lineHeight - rightScrollTop + acediff.connectorYOffset + 0.5;\n const curve1 = (0, $238bad4938ddde7c$export$2e2bcd8739ae039)(p1_x, p1_y, p2_x, p2_y);\n const curve2 = (0, $238bad4938ddde7c$export$2e2bcd8739ae039)(p4_x, p4_y, p3_x, p3_y);\n const verticalLine1 = `L${p2_x},${p2_y} ${p4_x},${p4_y}`;\n const verticalLine2 = `L${p3_x},${p3_y} ${p1_x},${p1_y}`;\n const d = `${curve1} ${verticalLine1} ${curve2} ${verticalLine2}`;\n const el = document.createElementNS((0, $b5c286a254b261e6$export$2e2bcd8739ae039).SVG_NS, 'path');\n el.setAttribute('d', d);\n el.setAttribute('class', acediff.options.classes.connector);\n acediff.gutterSVG.appendChild(el);\n}\nfunction $cd537e9fa9c12db2$var$addCopyArrows(acediff, info, diffIndex) {\n if (info.leftEndLine > info.leftStartLine && acediff.options.left.copyLinkEnabled) {\n const arrow = (0, $c0c16fed0f3352bb$export$2e2bcd8739ae039)({\n className: acediff.options.classes.newCodeConnectorLink,\n topOffset: info.leftStartLine * acediff.lineHeight,\n tooltip: 'Copy to right',\n diffIndex: diffIndex,\n arrowContent: acediff.options.classes.newCodeConnectorLinkContent\n });\n acediff.copyRightContainer.appendChild(arrow);\n }\n if (info.rightEndLine > info.rightStartLine && acediff.options.right.copyLinkEnabled) {\n const arrow = (0, $c0c16fed0f3352bb$export$2e2bcd8739ae039)({\n className: acediff.options.classes.deletedCodeConnectorLink,\n topOffset: info.rightStartLine * acediff.lineHeight,\n tooltip: 'Copy to left',\n diffIndex: diffIndex,\n arrowContent: acediff.options.classes.deletedCodeConnectorLinkContent\n });\n acediff.copyLeftContainer.appendChild(arrow);\n }\n}\nfunction $cd537e9fa9c12db2$var$positionCopyContainers(acediff) {\n const leftTopOffset = acediff.editors.left.ace.getSession().getScrollTop();\n const rightTopOffset = acediff.editors.right.ace.getSession().getScrollTop();\n acediff.copyRightContainer.style.cssText = `top: ${-leftTopOffset}px`;\n acediff.copyLeftContainer.style.cssText = `top: ${-rightTopOffset}px`;\n}\n/**\n // eslint-disable-next-line max-len\n * This method takes the raw diffing info from the Google lib and returns a nice clean object of the following\n * form:\n * {\n * leftStartLine:\n * leftEndLine:\n * rightStartLine:\n * rightEndLine:\n * }\n *\n * Ultimately, that's all the info we need to highlight the appropriate lines in the left + right editor, add the\n * SVG connectors, and include the appropriate <<, >> arrows.\n *\n * Note: leftEndLine and rightEndLine are always the start of the NEXT line, so for a single line diff, there will\n * be 1 separating the startLine and endLine values. So if leftStartLine === leftEndLine or rightStartLine ===\n * rightEndLine, it means that new content from the other editor is being inserted and a single 1px line will be\n * drawn.\n */ function $cd537e9fa9c12db2$var$computeDiff(acediff, diffType, offsetLeft, offsetRight, diffText) {\n let lineInfo = {};\n if (diffType === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).DIFF_INSERT) {\n // pretty confident this returns the right stuff for the left editor: start & end line & char\n let info = $cd537e9fa9c12db2$var$getSingleDiffInfo(acediff.editors.left, offsetLeft, diffText);\n // this is the ACTUAL undoctored current line in the other editor. It's always right. Doesn't mean it's\n // going to be used as the start line for the diff though.\n let currentLineOtherEditor = $cd537e9fa9c12db2$var$getLineForCharPosition(acediff.editors.right, offsetRight);\n let numCharsOnLineOtherEditor = $cd537e9fa9c12db2$var$getCharsOnLine(acediff.editors.right, currentLineOtherEditor);\n const numCharsOnLeftEditorStartLine = $cd537e9fa9c12db2$var$getCharsOnLine(acediff.editors.left, info.startLine);\n let rightStartLine = currentLineOtherEditor;\n let sameLineInsert = info.startLine === info.endLine;\n // whether or not this diff is a plain INSERT into the other editor, or overwrites a line take a little work to\n // figure out. This feels like the hardest part of the entire script.\n let numRows = 0;\n if (// dense, but this accommodates two scenarios:\n // 1. where a completely fresh new line is being inserted in left editor, we want the line on right to stay a 1px line\n // 2. where a new character is inserted at the start of a newline on the left but the line contains other stuff,\n // we DO want to make it a full line\n (info.startChar > 0 || sameLineInsert && diffText.length < numCharsOnLeftEditorStartLine) && // if the right editor line was empty, it's ALWAYS a single line insert [not an OR above?]\n numCharsOnLineOtherEditor > 0 && // if the text being inserted starts mid-line\n info.startChar < numCharsOnLeftEditorStartLine) numRows++;\n lineInfo = {\n leftStartLine: info.startLine,\n leftEndLine: info.endLine + 1,\n rightStartLine: rightStartLine,\n rightEndLine: rightStartLine + numRows\n };\n } else {\n let info = $cd537e9fa9c12db2$var$getSingleDiffInfo(acediff.editors.right, offsetRight, diffText);\n let currentLineOtherEditor = $cd537e9fa9c12db2$var$getLineForCharPosition(acediff.editors.left, offsetLeft);\n let numCharsOnLineOtherEditor = $cd537e9fa9c12db2$var$getCharsOnLine(acediff.editors.left, currentLineOtherEditor);\n const numCharsOnRightEditorStartLine = $cd537e9fa9c12db2$var$getCharsOnLine(acediff.editors.right, info.startLine);\n let leftStartLine = currentLineOtherEditor;\n let sameLineInsert = info.startLine === info.endLine;\n let numRows = 0;\n if (// dense, but this accommodates two scenarios:\n // 1. where a completely fresh new line is being inserted in left editor, we want the line on right to stay a 1px line\n // 2. where a new character is inserted at the start of a newline on the left but the line contains other stuff,\n // we DO want to make it a full line\n (info.startChar > 0 || sameLineInsert && diffText.length < numCharsOnRightEditorStartLine) && // if the right editor line was empty, it's ALWAYS a single line insert [not an OR above?]\n numCharsOnLineOtherEditor > 0 && // if the text being inserted starts mid-line\n info.startChar < numCharsOnRightEditorStartLine) numRows++;\n lineInfo = {\n leftStartLine: leftStartLine,\n leftEndLine: leftStartLine + numRows,\n rightStartLine: info.startLine,\n rightEndLine: info.endLine + 1\n };\n }\n return lineInfo;\n}\n// helper to return the startline, endline, startChar and endChar for a diff in a particular editor. Pretty\n// fussy function\nfunction $cd537e9fa9c12db2$var$getSingleDiffInfo(editor, offset, diffString) {\n const info = {\n startLine: 0,\n startChar: 0,\n endLine: 0,\n endChar: 0\n };\n const endCharNum = offset + diffString.length;\n let runningTotal = 0;\n let startLineSet = false;\n let endLineSet = false;\n editor.lineLengths.forEach((lineLength, lineIndex)=>{\n runningTotal += lineLength;\n if (!startLineSet && offset < runningTotal) {\n info.startLine = lineIndex;\n info.startChar = offset - runningTotal + lineLength;\n startLineSet = true;\n }\n if (!endLineSet && endCharNum <= runningTotal) {\n info.endLine = lineIndex;\n info.endChar = endCharNum - runningTotal + lineLength;\n endLineSet = true;\n }\n });\n // if the start char is the final char on the line, it's a newline & we ignore it\n if (info.startChar > 0 && $cd537e9fa9c12db2$var$getCharsOnLine(editor, info.startLine) === info.startChar) {\n info.startLine++;\n info.startChar = 0;\n }\n // if the end char is the first char on the line, we don't want to highlight that extra line\n if (info.endChar === 0) info.endLine--;\n const endsWithNewline = /\\n$/.test(diffString);\n if (info.startChar > 0 && endsWithNewline) info.endLine++;\n return info;\n}\n// note that this and everything else in this script uses 0-indexed row numbers\nfunction $cd537e9fa9c12db2$var$getCharsOnLine(editor, line) {\n return (0, $fc0df9ae77cc2f56$export$2e2bcd8739ae039)(editor, line).length;\n}\nfunction $cd537e9fa9c12db2$var$getLineForCharPosition(editor, offsetChars) {\n const lines = editor.ace.getSession().doc.getAllLines();\n let foundLine = 0;\n let runningTotal = 0;\n for(let i = 0; i < lines.length; i += 1){\n runningTotal += lines[i].length + 1 // +1 needed for newline char\n ;\n if (offsetChars <= runningTotal) {\n foundLine = i;\n if (offsetChars === runningTotal && i < lines.length - 1) foundLine += 1;\n break;\n }\n }\n // If we're past the end of the buffer then we need to bump the line total\n // because we're basically inserting after the last line\n if (runningTotal >= editor.ace.getSession().getValue().length) foundLine += 1;\n return foundLine;\n}\nfunction $cd537e9fa9c12db2$var$createGutter(acediff) {\n acediff.gutterHeight = document.getElementById(acediff.options.classes.gutterID).clientHeight;\n acediff.gutterWidth = document.getElementById(acediff.options.classes.gutterID).clientWidth;\n const leftHeight = $cd537e9fa9c12db2$var$getTotalHeight(acediff, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_LEFT);\n const rightHeight = $cd537e9fa9c12db2$var$getTotalHeight(acediff, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_RIGHT);\n const height = Math.max(leftHeight, rightHeight, acediff.gutterHeight);\n acediff.gutterSVG = document.createElementNS((0, $b5c286a254b261e6$export$2e2bcd8739ae039).SVG_NS, 'svg');\n acediff.gutterSVG.setAttribute('width', acediff.gutterWidth);\n acediff.gutterSVG.setAttribute('height', height);\n document.getElementById(acediff.options.classes.gutterID).appendChild(acediff.gutterSVG);\n}\n// acediff.editors.left.ace.getSession().getLength() * acediff.lineHeight\nfunction $cd537e9fa9c12db2$var$getTotalHeight(acediff, editor) {\n const ed = editor === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_LEFT ? acediff.editors.left : acediff.editors.right;\n return ed.ace.getSession().getLength() * acediff.lineHeight;\n}\n// creates two contains for positioning the copy left + copy right arrows\nfunction $cd537e9fa9c12db2$var$createCopyContainers(acediff) {\n acediff.copyRightContainer = document.createElement('div');\n acediff.copyRightContainer.setAttribute('class', acediff.options.classes.copyRightContainer);\n acediff.copyLeftContainer = document.createElement('div');\n acediff.copyLeftContainer.setAttribute('class', acediff.options.classes.copyLeftContainer);\n document.getElementById(acediff.options.classes.gutterID).appendChild(acediff.copyRightContainer);\n document.getElementById(acediff.options.classes.gutterID).appendChild(acediff.copyLeftContainer);\n}\nfunction $cd537e9fa9c12db2$var$clearGutter(acediff) {\n // gutter.innerHTML = '';\n const gutterEl = document.getElementById(acediff.options.classes.gutterID);\n gutterEl.removeChild(acediff.gutterSVG);\n $cd537e9fa9c12db2$var$createGutter(acediff);\n}\nfunction $cd537e9fa9c12db2$var$clearArrows(acediff) {\n acediff.copyLeftContainer.innerHTML = '';\n acediff.copyRightContainer.innerHTML = '';\n}\n/*\n * This combines multiple rows where, say, line 1 => line 1, line 2 => line 2, line 3-4 => line 3. That could be\n * reduced to a single connector line 1=4 => line 1-3\n */ function $cd537e9fa9c12db2$var$simplifyDiffs(acediff, diffs) {\n const groupedDiffs = [];\n function compare(val) {\n return acediff.options.diffGranularity === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).DIFF_GRANULARITY_SPECIFIC ? val < 1 : val <= 1;\n }\n diffs.forEach((diff, index)=>{\n if (index === 0) {\n groupedDiffs.push(diff);\n return;\n }\n // loop through all grouped diffs. If this new diff lies between an existing one, we'll just add to it, rather\n // than create a new one\n let isGrouped = false;\n for(let i = 0; i < groupedDiffs.length; i += 1)if (compare(Math.abs(diff.leftStartLine - groupedDiffs[i].leftEndLine)) && compare(Math.abs(diff.rightStartLine - groupedDiffs[i].rightEndLine))) {\n // update the existing grouped diff to expand its horizons to include this new diff start + end lines\n groupedDiffs[i].leftStartLine = Math.min(diff.leftStartLine, groupedDiffs[i].leftStartLine);\n groupedDiffs[i].rightStartLine = Math.min(diff.rightStartLine, groupedDiffs[i].rightStartLine);\n groupedDiffs[i].leftEndLine = Math.max(diff.leftEndLine, groupedDiffs[i].leftEndLine);\n groupedDiffs[i].rightEndLine = Math.max(diff.rightEndLine, groupedDiffs[i].rightEndLine);\n isGrouped = true;\n break;\n }\n if (!isGrouped) groupedDiffs.push(diff);\n });\n // clear out any single line diffs (i.e. single line on both editors)\n const fullDiffs = [];\n groupedDiffs.forEach((diff)=>{\n if (diff.leftStartLine === diff.leftEndLine && diff.rightStartLine === diff.rightEndLine) return;\n fullDiffs.push(diff);\n });\n return fullDiffs;\n}\nfunction $cd537e9fa9c12db2$var$decorate(acediff) {\n $cd537e9fa9c12db2$var$clearGutter(acediff);\n $cd537e9fa9c12db2$var$clearArrows(acediff);\n acediff.diffs.forEach((info, diffIndex)=>{\n if (acediff.options.showDiffs) {\n $cd537e9fa9c12db2$var$showDiff(acediff, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_LEFT, info.leftStartLine, info.leftEndLine, acediff.options.classes.diff);\n $cd537e9fa9c12db2$var$showDiff(acediff, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_RIGHT, info.rightStartLine, info.rightEndLine, acediff.options.classes.diff);\n if (acediff.options.showConnectors) $cd537e9fa9c12db2$var$addConnector(acediff, info.leftStartLine, info.leftEndLine, info.rightStartLine, info.rightEndLine);\n $cd537e9fa9c12db2$var$addCopyArrows(acediff, info, diffIndex);\n }\n }, acediff);\n}\n\n\nexport {$cd537e9fa9c12db2$export$2e2bcd8739ae039 as default};\n//# sourceMappingURL=module.js.map\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" persistent width=\"80vw\">\n <v-card>\n <v-card-text>\n <v-card-title>{{ pluginName }} </v-card-title>\n <v-row v-if=\"existingPluginTxt !== null\" class=\"notice d-flex flex-row\">\n <v-icon size=\"x-large\" start color=\"yellow\"> mdi-alert-box </v-icon>\n <div style=\"flex: 1\">\n The existing plugin.txt is different from the {{ pluginName }}'s\n plugin.txt. Navigate the diffs making whatever edits you want before\n installing. You may want to update {{ pluginName }}'s plugin.txt\n going forward.\n </div>\n </v-row>\n <v-row class=\"pb-3 pr-3\">\n <v-tabs v-model=\"tab\" class=\"ml-3\">\n <v-tab :key=\"0\"> Variables </v-tab>\n <v-tab :key=\"1\"> plugin.txt </v-tab>\n </v-tabs>\n </v-row>\n <form @submit.prevent=\"onSubmit\">\n <v-window v-model=\"tab\">\n <v-window-item :key=\"0\" eager=\"true\" class=\"tab\">\n <div class=\"pa-3\">\n <v-row class=\"mt-3\">\n <div v-for=\"(value, name) in localVariables\" :key=\"name\">\n <v-col style=\"width: 220px\">\n <v-text-field\n v-model=\"localVariables[name]\"\n clearable\n type=\"text\"\n :label=\"name\"\n />\n </v-col>\n </div>\n </v-row>\n </div>\n </v-window-item>\n <v-window-item\n v-if=\"existingPluginTxt === null\"\n :key=\"1 + '-new'\"\n eager=\"true\"\n class=\"tab\"\n >\n <v-row class=\"pa-3\">\n <v-col> This can be edited before installation. </v-col>\n </v-row>\n <pre\n ref=\"editor\"\n class=\"editor\"\n @contextmenu.prevent=\"showContextMenu\"\n ></pre>\n <v-menu v-model=\"contextMenu\" :target=\"[menuX, menuY]\">\n <v-list>\n <v-list-item link>\n <v-list-item-title @click=\"openDocumentation\">\n {{ docsKeyword }} documentation\n </v-list-item-title>\n </v-list-item>\n <v-divider />\n <v-list-item\n title=\"Toggle Vim mode\"\n prepend-icon=\"extras:vim\"\n @click=\"toggleVimMode\"\n />\n </v-list>\n </v-menu>\n </v-window-item>\n <v-window-item\n v-else\n :key=\"1 + '-existing'\"\n eager=\"true\"\n class=\"tab\"\n >\n <v-row class=\"pa-3\">\n <v-col>\n Existing plugin.txt. This can be edited before installation.\n </v-col>\n <v-col class=\"ml-6\">\n Uneditable plugin.txt from the new plugin.\n </v-col>\n </v-row>\n <pre ref=\"editor\" class=\"editor\"></pre>\n </v-window-item>\n </v-window>\n\n <v-card-actions class=\"px-2 mt-2\">\n <div v-if=\"existingPluginTxt !== null\">\n <v-btn variant=\"text\" @click=\"nextDiff\"> Next Diff </v-btn>\n <v-btn variant=\"text\" @click=\"previousDiff\">\n Previous Diff\n </v-btn>\n </div>\n <v-spacer />\n <v-btn\n variant=\"outlined\"\n data-test=\"edit-cancel\"\n @click.prevent=\"close\"\n >\n Cancel\n </v-btn>\n <v-btn variant=\"flat\" data-test=\"edit-submit\" @click=\"submit\">\n Install\n </v-btn>\n </v-card-actions>\n </form>\n </v-card-text>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-ruby'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport 'ace-builds/src-min-noconflict/ext-language_tools'\nimport 'ace-builds/src-min-noconflict/ext-searchbox'\nimport AceDiff from '@openc3/ace-diff'\nimport '@openc3/ace-diff/dist/ace-diff-dark.min.css'\nimport { toRaw } from 'vue'\nimport { AceEditorUtils } from '../../components/ace'\n\nexport default {\n props: {\n pluginName: {\n type: String,\n required: true,\n },\n variables: {\n type: Object,\n required: true,\n },\n pluginTxt: {\n type: String,\n required: true,\n },\n existingPluginTxt: {\n type: String,\n required: false,\n default: null,\n },\n storeId: {\n type: Number,\n required: false,\n default: null,\n },\n modelValue: Boolean, // modelValue is the default prop when using v-model\n },\n emits: ['callback', 'update:modelValue'],\n data() {\n return {\n tab: 0,\n localVariables: [],\n localPluginTxt: '',\n localExistingPluginTxt: null,\n editor: null,\n differ: null,\n contextMenu: false,\n menuX: 0,\n menuY: 0,\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n watch: {\n value: {\n immediate: true,\n handler: function () {\n this.localVariables = JSON.parse(JSON.stringify(this.variables)) // deep copy\n this.localPluginTxt = this.pluginTxt.slice()\n if (this.existingPluginTxt !== null) {\n this.localExistingPluginTxt = this.existingPluginTxt.slice()\n }\n },\n },\n },\n mounted() {\n const pluginMode = this.buildPluginMode()\n if (this.existingPluginTxt === null) {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n this.editor.session.setMode(new pluginMode())\n this.editor.session.setTabSize(2)\n this.editor.session.setUseWrapMode(true)\n this.editor.$blockScrolling = Infinity\n this.editor.setHighlightActiveLine(false)\n this.editor.setValue(this.localPluginTxt)\n this.editor.clearSelection()\n AceEditorUtils.applyVimModeIfEnabled(this.editor)\n this.editor.focus()\n } else {\n this.tab = 1 // Show the diff right off the bat\n this.differ = new AceDiff({\n element: this.$refs.editor,\n mode: new pluginMode(),\n theme: 'ace/theme/twilight',\n left: {\n content: this.localExistingPluginTxt,\n copyLinkEnabled: false,\n },\n right: {\n content: this.localPluginTxt,\n editable: false,\n },\n })\n // Match our existing editors\n this.differ.getEditors().left.setFontSize(16)\n this.differ.getEditors().right.setFontSize(16)\n\n // Apply vim mode if enabled to both editor instances\n AceEditorUtils.applyVimModeIfEnabled(this.differ.getEditors().left)\n AceEditorUtils.applyVimModeIfEnabled(this.differ.getEditors().right)\n\n this.curDiff = -1 // so the first will be 0\n }\n },\n beforeUnmount() {\n if (this.editor) {\n this.editor.destroy()\n }\n if (this.differ) {\n this.differ.destroy()\n }\n },\n methods: {\n previousDiff() {\n this.curDiff--\n if (this.curDiff < 0) {\n this.curDiff = this.differ.diffs.length - 1\n }\n this.scrollToCurDiff()\n },\n nextDiff() {\n this.curDiff++\n if (this.curDiff >= this.differ.diffs.length) {\n this.curDiff = 0\n }\n this.scrollToCurDiff()\n },\n scrollToCurDiff() {\n if (this.differ.diffs.length === 0) return\n let lrow = this.differ.diffs[this.curDiff].leftStartLine\n let rrow = this.differ.diffs[this.curDiff].rightStartLine\n // Give it a little breathing room\n if (lrow > 5) {\n lrow -= 5\n }\n if (rrow > 5) {\n rrow -= 5\n }\n this.differ.getEditors().left.scrollToLine(lrow)\n this.differ.getEditors().right.scrollToLine(rrow)\n },\n buildPluginMode() {\n let oop = ace.require('ace/lib/oop')\n let RubyHighlightRules = ace.require(\n 'ace/mode/ruby_highlight_rules',\n ).RubyHighlightRules\n\n // TODO: Grab from code\n let keywords = ['VARIABLE']\n let regex = new RegExp(`(\\\\b${keywords.join('\\\\b|\\\\b')}\\\\b)`)\n let PluginHighlightRules = function () {\n RubyHighlightRules.call(this)\n // add openc3 rules to the ruby rules\n for (let rule in this.$rules) {\n this.$rules[rule].unshift({\n regex: regex,\n token: 'support.function',\n })\n }\n }\n oop.inherits(PluginHighlightRules, RubyHighlightRules)\n\n let MatchingBraceOutdent = ace.require(\n 'ace/mode/matching_brace_outdent',\n ).MatchingBraceOutdent\n let CstyleBehaviour = ace.require(\n 'ace/mode/behaviour/cstyle',\n ).CstyleBehaviour\n let FoldMode = ace.require('ace/mode/folding/ruby').FoldMode\n let Mode = function () {\n this.HighlightRules = PluginHighlightRules\n this.$outdent = new MatchingBraceOutdent()\n this.$behaviour = new CstyleBehaviour()\n this.foldingRules = new FoldMode()\n this.indentKeywords = this.foldingRules.indentKeywords\n }\n let RubyMode = ace.require('ace/mode/ruby').Mode\n oop.inherits(Mode, RubyMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n submit: function () {\n if (this.existingPluginTxt === null) {\n this.emitSubmit(this.editor.getValue().split('\\n'))\n } else {\n // Existing plugin.txt with all diffs resolved\n if (this.differ.diffs.length === 0) {\n this.emitSubmit(this.differ.getEditors().left.getValue().split('\\n'))\n } else {\n // Existing plugin.txt with unresolved diffs\n this.$dialog\n .confirm(\n `Diffs still detected! Install using 'Existing plugin.txt' (left) and ignore additional changes in the new plugin.txt (right)?`,\n {\n okText: 'Install',\n cancelText: 'Cancel',\n },\n )\n .then((dialog) => {\n this.emitSubmit(\n this.differ.getEditors().left.getValue().split('\\n'),\n )\n })\n .catch((error) => {\n // Cancelled, do nothing\n })\n }\n }\n },\n emitSubmit(lines) {\n let pluginHash = {\n name: this.pluginName,\n variables: toRaw(this.localVariables),\n plugin_txt_lines: lines,\n store_id: this.storeId,\n }\n this.$emit('callback', pluginHash)\n },\n close: function () {\n this.show = !this.show\n },\n showContextMenu: function (event) {\n this.menuX = event.pageX\n this.menuY = event.pageY\n\n let position = this.editor.getCursorPosition()\n let token = this.editor.session.getTokenAt(position.row, position.column)\n if (token) {\n let value = token.value.trim()\n if (value.includes(' ')) {\n this.docsKeyword = value.split(' ')[0]\n } else {\n this.docsKeyword = value\n }\n this.contextMenu = true\n }\n },\n toggleVimMode: function () {\n if (this.editor) {\n AceEditorUtils.toggleVimMode(this.editor)\n // don't worry about this.differ since AceDiff replaces the editor anyway, and thus there's no context menu\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.editor {\n height: 50vh;\n position: relative;\n font-size: 16px;\n}\n\n.notice {\n font-size: 20px;\n margin: 10px;\n}\n.tab {\n background-color: var(--color-background-surface-default);\n}\n.v-textarea :deep(textarea) {\n padding: 5px;\n}\n</style>\n"],"names":["_sfc_main","value","gemRegEx","f","axios","response","gem","link","_hoisted_1","_hoisted_2","_createBlock","_component_v_dialog","$options","$event","_createVNode","_component_v_card","_component_v_toolbar","_component_v_spacer","_cache","_createElementVNode","_component_v_card_text","_component_v_row","_component_v_col","_component_v_btn","$data","_component_v_icon","_openBlock","_createElementBlock","_hoisted_3","_hoisted_4","_Fragment","_renderList","data","index","_component_v_list_item","_component_v_list_item_title","_createTextVNode","_toDisplayString","_component_v_progress_circular","_component_v_divider","openPluginMode","ace.edit","AceEditorUtils","blob","oop","ace.require","JsonHighlightRules","MatchingBraceOutdent","CstyleBehaviour","FoldMode","Mode","RubyMode","event","position","token","$props","args","_ctx","_component_v_file_input","_component_v_menu","_component_v_list","target","Api","file","itemIndex","_component_v_list_item_subtitle","_component_v_checkbox","_component_v_card_actions","TabsList","TopBar","tab","_component_top_bar","_component_v_tabs","_component_v_tab","_component_router_view","cloneDiff","diff2","type","patch","getCommonOverlap","textA","textB","text1","text2","text1Length","text2Length","textLength","best","length","found","pattern","getCommonPrefix","pointerMin","pointerMax","pointerMid","pointerStart","getCommonSuffix","pointerEnd","isHighSurrogate","char","charCode","isLowSurrogate","bisect","deadline","maxD","vOffset","vLength","v1","v2","x","delta","front","k1start","k1end","k2start","k2end","d","k1","k1Offset","x1","y1","k2Offset","x2","bisectSplit","k2","y2","DIFF_DELETE","DIFF_INSERT","y","text1a","text2a","text1b","text2b","diffs","doDiff","diffsb","findHalfMatch","timeout","longText","shortText","halfMatch1","halfMatchI","halfMatch2","halfMatch","text1A","text1B","text2A","text2B","midCommon","i","seed","j","bestCommon","bestLongTextA","bestLongTextB","bestShortTextA","bestShortTextB","prefixLength","suffixLength","charsToLines","lineArray","chars","text","linesToChars","lineHash","diffLinesToMunge","lineStart","lineEnd","lineArrayLength","line","maxLines","chars1","chars2","doLineModeDiff","opts","a","linearray","cleanupSemantic","DIFF_EQUAL","pointer","countDelete","countInsert","textDelete","textInsert","aa","computeDiff","longtext","shorttext","diffsA","diffsB","__defProp$2","__getOwnPropSymbols$2","__hasOwnProp$2","__propIsEnum$2","__defNormalProp$2","obj","key","__spreadValues$2","b","prop","diff","createInternalOpts","adjustDiffForSurrogatePairs","options","commonlength","commonprefix","commonsuffix","cleanupMerge","createDeadLine","t","combineChar","dir","splitChar","hasSharedChar","deisolateChar","inv","insertIdx","deleteIdx","op","rest","char2","insertText","insertChar","deleteText","diffType","diffText","firstChar","lastChar","rawDiffs","hasChanges","equalities","equalitiesLength","lastEquality","lengthInsertions1","lengthDeletions1","lengthInsertions2","lengthDeletions2","cleanupSemanticLossless","deletion","insertion","overlapLength1","overlapLength2","nonAlphaNumericRegex","whitespaceRegex","linebreakRegex","blanklineEndRegex","blanklineStartRegex","diffCleanupSemanticScore","one","two","char1","nonAlphaNumeric1","nonAlphaNumeric2","whitespace1","whitespace2","lineBreak1","lineBreak2","blankLine1","blankLine2","equality1","edit","equality2","commonOffset","commonString","bestEquality1","bestEdit","bestEquality2","bestScore","score","$d0b82e0396560011$var$isObject","item","$d0b82e0396560011$export$2e2bcd8739ae039","source","$a61894d52139a1b7$export$2e2bcd8739ae039","callback","wait","immediate","initialCall","callNow","next","$20710ff753814db4$export$2e2bcd8739ae039","context","$f81fe5d88190aca6$export$2e2bcd8739ae039","$238bad4938ddde7c$export$2e2bcd8739ae039","startX","startY","endX","endY","w","halfWidth","$b5c286a254b261e6$export$2e2bcd8739ae039","$3d931e456f0d108c$export$2e2bcd8739ae039","acediff","editor","mode","$893f0e07a87dd83c$export$2e2bcd8739ae039","theme","$fc0df9ae77cc2f56$export$2e2bcd8739ae039","$7eb2da7d8a00890b$export$2e2bcd8739ae039","$c0c16fed0f3352bb$export$2e2bcd8739ae039","info","el","props","$419710df3593df8d$export$2e2bcd8739ae039","parent","elClass","guid","newId","currentEl","$e485cb2ed1808217$export$2e2bcd8739ae039","elSelector","eventName","selector","fn","element","possibleTargets","l","p","$cd537e9fa9c12db2$var$Range","$cd537e9fa9c12db2$var$getRangeModule","ace","requireFunc","$cd537e9fa9c12db2$export$2e2bcd8739ae039","getDefaultAce","errMessage","$cd537e9fa9c12db2$var$addEventHandlers","$cd537e9fa9c12db2$var$createCopyContainers","$cd537e9fa9c12db2$var$createGutter","val1","val2","$haT8Y$cleanupSemantic","$haT8Y$makeDiff","$cd537e9fa9c12db2$var$getLineLengths","offset","chunk","chunkType","$cd537e9fa9c12db2$var$computeDiff","$cd537e9fa9c12db2$var$simplifyDiffs","$cd537e9fa9c12db2$var$clearDiffs","$cd537e9fa9c12db2$var$decorate","leftValue","oldDiv","newDiv","rightValue","elementById","$cd537e9fa9c12db2$var$updateGap","e","$cd537e9fa9c12db2$var$copy","onResize","diffIndex","sourceEditor","targetEditor","startLine","endLine","targetStartLine","targetEndLine","contentToInsert","h","lines","lineLengths","$cd537e9fa9c12db2$var$showDiff","className","editorInstance","classNames","$cd537e9fa9c12db2$var$positionCopyContainers","marker","$cd537e9fa9c12db2$var$addConnector","leftStartLine","leftEndLine","rightStartLine","rightEndLine","leftScrollTop","rightScrollTop","p1_x","p1_y","p2_x","p2_y","p3_x","p3_y","p4_x","p4_y","curve1","curve2","verticalLine1","verticalLine2","$cd537e9fa9c12db2$var$addCopyArrows","arrow","leftTopOffset","rightTopOffset","offsetLeft","offsetRight","lineInfo","$cd537e9fa9c12db2$var$getSingleDiffInfo","currentLineOtherEditor","$cd537e9fa9c12db2$var$getLineForCharPosition","numCharsOnLineOtherEditor","$cd537e9fa9c12db2$var$getCharsOnLine","numCharsOnLeftEditorStartLine","sameLineInsert","numRows","numCharsOnRightEditorStartLine","diffString","endCharNum","runningTotal","startLineSet","endLineSet","lineLength","lineIndex","endsWithNewline","offsetChars","foundLine","leftHeight","$cd537e9fa9c12db2$var$getTotalHeight","rightHeight","height","$cd537e9fa9c12db2$var$clearGutter","$cd537e9fa9c12db2$var$clearArrows","groupedDiffs","compare","val","isGrouped","fullDiffs","pluginMode","AceDiff","lrow","rrow","RubyHighlightRules","keywords","regex","PluginHighlightRules","rule","dialog","error","pluginHash","toRaw","_component_v_card_title","_component_v_window","_component_v_window_item","name","_component_v_text_field"],"mappings":"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","x_google_ignoreList":[5,6]}
1
+ {"version":3,"file":"admin.cjs","sources":["../../src/tools/admin/DownloadDialog.vue","../../src/tools/admin/EditDialog.vue","../../src/tools/admin/ModifiedPluginDialog.vue","../../src/tools/admin/tabs/index.js","../../src/tools/admin/OpenC3Admin.vue","../../../../node_modules/@sanity/diff-match-patch/dist/index.js","../../../../node_modules/@openc3/ace-diff/dist/module.js","../../src/tools/admin/PluginDialog.vue"],"sourcesContent":["<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"600\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Download Gems </span>\n <v-spacer />\n </v-toolbar>\n <v-card-text>\n <div class=\"pa-3\">\n <v-row class=\"my-2\"> Select a download option </v-row>\n <v-row>\n <v-col>\n <div class=\"px-2\">\n <v-btn\n block\n data-test=\"searchGithub\"\n color=\"primary\"\n :disabled=\"disableSearch\"\n @click=\"searchGithub\"\n >\n Github\n <v-icon end theme=\"dark\"> mdi-github </v-icon>\n </v-btn>\n </div>\n </v-col>\n </v-row>\n <!---\n <v-row>\n <v-col>\n <div class=\"px-2\">\n <v-btn\n @click=\"searchRuby\"\n block\n data-test=\"searchRuby\"\n color=\"primary\"\n :disabled=\"disableSearch\"\n >\n RubyGems\n <v-icon right dark> mdi-heart </v-icon>\n </v-btn>\n </div>\n </v-col>\n </v-row>\n --->\n <v-row class=\"mt-5\"> Community Gems </v-row>\n <div v-if=\"listData.length < 1\" class=\"mt-4\">\n <v-row class=\"mx-2\">\n <span> I’m sorry, Dave. No gems available.... </span>\n </v-row>\n </div>\n <div v-else class=\"mt-4\">\n <div v-for=\"(data, index) in listData\" :key=\"index\">\n <v-list-item>\n <v-list-item-title>{{ data.name }}</v-list-item-title>\n\n <v-list-item icon>\n <v-progress-circular\n v-if=\"activeDownload\"\n indeterminate\n color=\"primary\"\n />\n <v-btn\n v-else\n icon=\"mdi-cloud-download\"\n variant=\"text\"\n :disabled=\"activeDownload\"\n @click=\"downloadGem(data)\"\n />\n </v-list-item>\n </v-list-item>\n <v-divider v-if=\"index < listData.length - 1\" :key=\"index\" />\n </div>\n </div>\n </div>\n </v-card-text>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\n// Directly use axios since we need no authentication or scope\nimport axios from 'axios'\n\nexport default {\n props: {\n modelValue: Boolean,\n },\n data() {\n return {\n url: '',\n type: null,\n response: null,\n activeDownload: false,\n disableSearch: false,\n expanded: [],\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n listData: function () {\n if (!this.response) return []\n if (this.type === 'github') {\n return this.parseGithub()\n } else {\n return this.parseRuby()\n }\n },\n },\n methods: {\n parseGithub: function () {\n const gemRegEx = /\\w+.gem/\n return this.response.tree\n .filter((f) => gemRegEx.exec(f.path))\n .map((f) => {\n return {\n name: f.path,\n url: `https://raw.github.com/OpenC3/openc3-tools/main/${f.path}`,\n }\n })\n },\n getResponse: function () {\n this.disableSearch = true\n axios.get(this.url).then((response) => {\n this.response = response.data\n })\n setTimeout(() => {\n this.disableSearch = false\n }, 10000)\n },\n searchGithub: function () {\n this.type = 'github'\n this.url =\n 'https://api.github.com/repos/OpenC3/openc3-tools/git/trees/main?recursive=1'\n this.getResponse()\n },\n downloadGem: function (gem) {\n const link = document.createElement('a')\n link.href = gem.url\n link.setAttribute('download', gem.name)\n link.click()\n link.remove()\n },\n },\n}\n</script>\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" :persistent=\"!readonly\" width=\"80vw\">\n <v-card>\n <form @submit.prevent=\"submit\">\n <v-toolbar height=\"24\">\n <v-spacer />\n <span v-text=\"title\" />\n <v-spacer />\n <v-btn\n class=\"mx-2\"\n icon=\"mdi-download\"\n variant=\"text\"\n density=\"compact\"\n data-test=\"downloadIcon\"\n @click=\"download\"\n />\n </v-toolbar>\n\n <v-card-text>\n <div class=\"pa-3\">\n <div v-if=\"!readonly\">\n <v-row class=\"mt-3\"> Upload a file. </v-row>\n <v-row no-gutters align=\"center\">\n <v-col cols=\"3\">\n <v-btn\n block\n color=\"success\"\n :disabled=\"!file || loadingFile || readonly\"\n :loading=\"loadingFile\"\n data-test=\"editScreenLoadBtn\"\n @click=\"loadFile\"\n >\n Load\n <template #loader>\n <span>Loading...</span>\n </template>\n </v-btn>\n </v-col>\n <v-col cols=\"9\">\n <v-file-input\n v-model=\"file\"\n accept=\".json\"\n label=\"Click to select .json file.\"\n :disabled=\"readonly\"\n />\n </v-col>\n </v-row>\n </div>\n <v-row no-gutters>\n <pre\n ref=\"editor\"\n class=\"editor\"\n @contextmenu.prevent=\"showContextMenu\"\n ></pre>\n <v-menu v-model=\"contextMenu\" :target=\"[menuX, menuY]\">\n <v-list>\n <v-list-item\n title=\"Toggle Vim mode\"\n prepend-icon=\"extras:vim\"\n @click=\"toggleVimMode\"\n />\n </v-list>\n </v-menu>\n </v-row>\n <v-row class=\"my-3\">\n <span v-show=\"error\" class=\"text-red\" v-text=\"error\" />\n </v-row>\n <v-row>\n <v-spacer />\n <v-btn\n variant=\"outlined\"\n class=\"mx-2\"\n data-test=\"editCancelBtn\"\n @click.prevent=\"close\"\n >\n Cancel\n </v-btn>\n <v-btn\n v-if=\"!readonly\"\n class=\"mx-2\"\n color=\"primary\"\n type=\"submit\"\n data-test=\"editSubmitBtn\"\n :disabled=\"!!error || readonly\"\n >\n Save\n </v-btn>\n </v-row>\n </div>\n </v-card-text>\n </form>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-ruby'\nimport 'ace-builds/src-min-noconflict/mode-json'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport 'ace-builds/src-min-noconflict/ext-language_tools'\nimport 'ace-builds/src-min-noconflict/ext-searchbox'\nimport { AceEditorUtils } from '../../components/ace'\n\nexport default {\n props: {\n content: {\n type: String,\n required: true,\n },\n type: String,\n name: String,\n modelValue: Boolean,\n readonly: Boolean,\n },\n data() {\n return {\n editor: null,\n contextMenu: false,\n menuX: 0,\n menuY: 0,\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n title: function () {\n return `${this.type}: ${this.name}`\n },\n error: function () {\n if (this.editor && this.editor.getValue() === '' && !this.file) {\n return 'Input can not be blank.'\n }\n return null\n },\n },\n mounted() {\n const openPluginMode = this.buildPluginMode()\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n this.editor.session.setMode(new openPluginMode())\n this.editor.session.setTabSize(2)\n this.editor.session.setUseWrapMode(true)\n this.editor.$blockScrolling = Infinity\n this.editor.setHighlightActiveLine(false)\n this.editor.setValue(this.content)\n this.editor.clearSelection()\n AceEditorUtils.applyVimModeIfEnabled(this.editor)\n this.editor.focus()\n if (this.readonly) {\n this.editor.setReadOnly(true)\n }\n },\n beforeUnmount() {\n if (this.editor) {\n this.editor.destroy()\n }\n },\n methods: {\n submit: function () {\n this.$emit('submit', this.editor.getValue())\n this.show = !this.show\n },\n close: function () {\n this.show = !this.show\n },\n download: function () {\n const blob = new Blob([this.editor.getValue()], {\n type: 'text/plain',\n })\n // Make a link and then 'click' on it to start the download\n const link = document.createElement('a')\n link.href = URL.createObjectURL(blob)\n link.setAttribute(\n 'download',\n `${this.type.toLowerCase()}_${this.name.toLowerCase()}.json`,\n )\n link.click()\n },\n buildPluginMode() {\n let oop = ace.require('ace/lib/oop')\n let JsonHighlightRules = ace.require(\n 'ace/mode/json_highlight_rules',\n ).JsonHighlightRules\n\n let MatchingBraceOutdent = ace.require(\n 'ace/mode/matching_brace_outdent',\n ).MatchingBraceOutdent\n let CstyleBehaviour = ace.require(\n 'ace/mode/behaviour/cstyle',\n ).CstyleBehaviour\n let FoldMode = ace.require('ace/mode/folding/ruby').FoldMode\n let Mode = function () {\n this.HighlightRules = JsonHighlightRules\n this.$outdent = new MatchingBraceOutdent()\n this.$behaviour = new CstyleBehaviour()\n this.foldingRules = new FoldMode()\n this.indentKeywords = this.foldingRules.indentKeywords\n }\n let RubyMode = ace.require('ace/mode/ruby').Mode\n oop.inherits(Mode, RubyMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n showContextMenu: function (event) {\n this.menuX = event.pageX\n this.menuY = event.pageY\n\n let position = this.editor.getCursorPosition()\n let token = this.editor.session.getTokenAt(position.row, position.column)\n if (token) {\n let value = token.value.trim()\n if (value.includes(' ')) {\n this.docsKeyword = value.split(' ')[0]\n } else {\n this.docsKeyword = value\n }\n this.contextMenu = true\n }\n },\n toggleVimMode: function () {\n AceEditorUtils.toggleVimMode(this.editor)\n },\n },\n}\n</script>\n\n<style scoped>\n.editor {\n height: 50vh;\n width: 75vw;\n position: relative;\n font-size: 16px;\n}\n\n.v-textarea :deep(textarea) {\n padding: 5px;\n}\n</style>\n","<!--\n# Copyright 2024 OpenC3, Inc.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" width=\"600\">\n <v-card>\n <v-toolbar height=\"24\">\n <v-spacer />\n <span> Modified Plugin </span>\n <v-spacer />\n </v-toolbar>\n <v-card-text class=\"pa-3\">\n <div>\n Plugin {{ plugin }} was modified. Would you like to delete the\n existing modified files?\n </div>\n <v-list-item\n v-for=\"(target, index) in modifiedTargets\"\n :key=\"index\"\n lines=\"two\"\n >\n <v-list-item-title>{{ target.name }}</v-list-item-title>\n <v-list-item-subtitle\n v-for=\"(file, itemIndex) in target.files\"\n :key=\"itemIndex\"\n >{{ file }}</v-list-item-subtitle\n >\n </v-list-item>\n <v-checkbox\n v-model=\"deleteModified\"\n label=\"DELETE MODIFIED! THIS CAN NOT BE UNDONE!!!\"\n color=\"error\"\n data-test=\"modified-plugin-delete-checkbox\"\n />\n </v-card-text>\n <v-card-actions class=\"px-2\">\n <v-spacer />\n <v-btn\n variant=\"outlined\"\n data-test=\"modified-plugin-cancel\"\n @click=\"\n () => {\n show = false\n $emit('cancel')\n }\n \"\n >\n Cancel\n </v-btn>\n <v-btn\n variant=\"flat\"\n data-test=\"modified-plugin-submit\"\n @click=\"\n () => {\n show = false\n $emit('submit', deleteModified)\n }\n \"\n >\n Confirm\n </v-btn>\n </v-card-actions>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { Api } from '@openc3/js-common/services'\n\nexport default {\n props: {\n modelValue: Boolean,\n plugin: String,\n targets: Array,\n pluginDelete: Boolean,\n },\n data() {\n return {\n modifiedTargets: [],\n deleteModified: false,\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n created() {\n for (const target of this.targets) {\n Api.get(`/openc3-api/targets/${target.name}/modified_files`).then(\n (response) => {\n if (response.data.length !== 0) {\n // Only push targets which actually have modified files\n this.modifiedTargets.push({\n name: target.name,\n files: response.data,\n })\n }\n },\n )\n }\n },\n}\n</script>\n\n<style scoped></style>\n","/*\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2024, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n*/\n\nconst TabsList = [\n {\n displayName: 'Plugins',\n name: 'PluginsTab',\n path: 'plugins',\n component: () => import('./PluginsTab.vue'),\n },\n {\n displayName: 'Targets',\n name: 'TargetsTab',\n path: 'targets',\n component: () => import('./TargetsTab.vue'),\n },\n {\n displayName: 'Interfaces',\n name: 'InterfacesTab',\n path: 'interfaces',\n component: () => import('./InterfacesTab.vue'),\n },\n {\n displayName: 'Routers',\n name: 'RoutersTab',\n path: 'routers',\n component: () => import('./RoutersTab.vue'),\n },\n {\n displayName: 'Microservices',\n name: 'MicroservicesTab',\n path: 'microservices',\n component: () => import('./MicroservicesTab.vue'),\n },\n {\n displayName: 'Packages',\n name: 'PackagesTab',\n path: 'packages',\n component: () => import('./PackagesTab.vue'),\n },\n {\n displayName: 'Tools',\n name: 'ToolsTab',\n path: 'tools',\n component: () => import('./ToolsTab.vue'),\n },\n {\n displayName: 'Redis',\n name: 'RedisTab',\n path: 'redis',\n component: () => import('./RedisTab.vue'),\n },\n {\n displayName: 'Secrets',\n name: 'SecretsTab',\n path: 'secrets',\n component: () => import('./SecretsTab.vue'),\n },\n {\n displayName: 'Settings',\n name: 'SettingsTab',\n path: 'settings',\n component: () => import('./SettingsTab.vue'),\n },\n]\n\nexport { TabsList }\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2022, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <div>\n <top-bar :title=\"title\" />\n <v-card>\n <v-tabs v-model=\"curTab\" fixed-tabs>\n <v-tab v-for=\"(tab, index) in tabs\" :key=\"index\" :to=\"tab.path\">\n {{ tab.displayName }}\n </v-tab>\n </v-tabs>\n <router-view />\n </v-card>\n </div>\n</template>\n\n<script>\nimport { TopBar } from '@/components'\nimport { TabsList } from './tabs'\n\nexport default {\n components: {\n TopBar,\n },\n data() {\n return {\n title: 'Administrator Console',\n curTab: null,\n }\n },\n computed: {\n tabs: function () {\n return TabsList.map((tab) => {\n return {\n displayName: tab.displayName,\n path: { name: tab.name },\n }\n })\n },\n },\n}\n</script>\n","function cloneDiff(diff2) {\n const [type, patch] = diff2;\n return [type, patch];\n}\nfunction getCommonOverlap(textA, textB) {\n let text1 = textA, text2 = textB;\n const text1Length = text1.length, text2Length = text2.length;\n if (text1Length === 0 || text2Length === 0)\n return 0;\n text1Length > text2Length ? text1 = text1.substring(text1Length - text2Length) : text1Length < text2Length && (text2 = text2.substring(0, text1Length));\n const textLength = Math.min(text1Length, text2Length);\n if (text1 === text2)\n return textLength;\n let best = 0, length = 1;\n for (let found = 0; found !== -1; ) {\n const pattern = text1.substring(textLength - length);\n if (found = text2.indexOf(pattern), found === -1)\n return best;\n length += found, (found === 0 || text1.substring(textLength - length) === text2.substring(0, length)) && (best = length, length++);\n }\n return best;\n}\nfunction getCommonPrefix(text1, text2) {\n if (!text1 || !text2 || text1[0] !== text2[0])\n return 0;\n let pointerMin = 0, pointerMax = Math.min(text1.length, text2.length), pointerMid = pointerMax, pointerStart = 0;\n for (; pointerMin < pointerMid; )\n text1.substring(pointerStart, pointerMid) === text2.substring(pointerStart, pointerMid) ? (pointerMin = pointerMid, pointerStart = pointerMin) : pointerMax = pointerMid, pointerMid = Math.floor((pointerMax - pointerMin) / 2 + pointerMin);\n return pointerMid;\n}\nfunction getCommonSuffix(text1, text2) {\n if (!text1 || !text2 || text1[text1.length - 1] !== text2[text2.length - 1])\n return 0;\n let pointerMin = 0, pointerMax = Math.min(text1.length, text2.length), pointerMid = pointerMax, pointerEnd = 0;\n for (; pointerMin < pointerMid; )\n text1.substring(text1.length - pointerMid, text1.length - pointerEnd) === text2.substring(text2.length - pointerMid, text2.length - pointerEnd) ? (pointerMin = pointerMid, pointerEnd = pointerMin) : pointerMax = pointerMid, pointerMid = Math.floor((pointerMax - pointerMin) / 2 + pointerMin);\n return pointerMid;\n}\nfunction isHighSurrogate(char) {\n const charCode = char.charCodeAt(0);\n return charCode >= 55296 && charCode <= 56319;\n}\nfunction isLowSurrogate(char) {\n const charCode = char.charCodeAt(0);\n return charCode >= 56320 && charCode <= 57343;\n}\nfunction bisect(text1, text2, deadline) {\n const text1Length = text1.length, text2Length = text2.length, maxD = Math.ceil((text1Length + text2Length) / 2), vOffset = maxD, vLength = 2 * maxD, v1 = new Array(vLength), v2 = new Array(vLength);\n for (let x = 0; x < vLength; x++)\n v1[x] = -1, v2[x] = -1;\n v1[vOffset + 1] = 0, v2[vOffset + 1] = 0;\n const delta = text1Length - text2Length, front = delta % 2 !== 0;\n let k1start = 0, k1end = 0, k2start = 0, k2end = 0;\n for (let d = 0; d < maxD && !(Date.now() > deadline); d++) {\n for (let k1 = -d + k1start; k1 <= d - k1end; k1 += 2) {\n const k1Offset = vOffset + k1;\n let x1;\n k1 === -d || k1 !== d && v1[k1Offset - 1] < v1[k1Offset + 1] ? x1 = v1[k1Offset + 1] : x1 = v1[k1Offset - 1] + 1;\n let y1 = x1 - k1;\n for (; x1 < text1Length && y1 < text2Length && text1.charAt(x1) === text2.charAt(y1); )\n x1++, y1++;\n if (v1[k1Offset] = x1, x1 > text1Length)\n k1end += 2;\n else if (y1 > text2Length)\n k1start += 2;\n else if (front) {\n const k2Offset = vOffset + delta - k1;\n if (k2Offset >= 0 && k2Offset < vLength && v2[k2Offset] !== -1) {\n const x2 = text1Length - v2[k2Offset];\n if (x1 >= x2)\n return bisectSplit(text1, text2, x1, y1, deadline);\n }\n }\n }\n for (let k2 = -d + k2start; k2 <= d - k2end; k2 += 2) {\n const k2Offset = vOffset + k2;\n let x2;\n k2 === -d || k2 !== d && v2[k2Offset - 1] < v2[k2Offset + 1] ? x2 = v2[k2Offset + 1] : x2 = v2[k2Offset - 1] + 1;\n let y2 = x2 - k2;\n for (; x2 < text1Length && y2 < text2Length && text1.charAt(text1Length - x2 - 1) === text2.charAt(text2Length - y2 - 1); )\n x2++, y2++;\n if (v2[k2Offset] = x2, x2 > text1Length)\n k2end += 2;\n else if (y2 > text2Length)\n k2start += 2;\n else if (!front) {\n const k1Offset = vOffset + delta - k2;\n if (k1Offset >= 0 && k1Offset < vLength && v1[k1Offset] !== -1) {\n const x1 = v1[k1Offset], y1 = vOffset + x1 - k1Offset;\n if (x2 = text1Length - x2, x1 >= x2)\n return bisectSplit(text1, text2, x1, y1, deadline);\n }\n }\n }\n }\n return [\n [DIFF_DELETE, text1],\n [DIFF_INSERT, text2]\n ];\n}\nfunction bisectSplit(text1, text2, x, y, deadline) {\n const text1a = text1.substring(0, x), text2a = text2.substring(0, y), text1b = text1.substring(x), text2b = text2.substring(y), diffs = doDiff(text1a, text2a, { checkLines: !1, deadline }), diffsb = doDiff(text1b, text2b, { checkLines: !1, deadline });\n return diffs.concat(diffsb);\n}\nfunction findHalfMatch(text1, text2, timeout = 1) {\n if (timeout <= 0)\n return null;\n const longText = text1.length > text2.length ? text1 : text2, shortText = text1.length > text2.length ? text2 : text1;\n if (longText.length < 4 || shortText.length * 2 < longText.length)\n return null;\n const halfMatch1 = halfMatchI(longText, shortText, Math.ceil(longText.length / 4)), halfMatch2 = halfMatchI(longText, shortText, Math.ceil(longText.length / 2));\n let halfMatch;\n if (halfMatch1 && halfMatch2)\n halfMatch = halfMatch1[4].length > halfMatch2[4].length ? halfMatch1 : halfMatch2;\n else {\n if (!halfMatch1 && !halfMatch2)\n return null;\n halfMatch2 ? halfMatch1 || (halfMatch = halfMatch2) : halfMatch = halfMatch1;\n }\n if (!halfMatch)\n throw new Error(\"Unable to find a half match.\");\n let text1A, text1B, text2A, text2B;\n text1.length > text2.length ? (text1A = halfMatch[0], text1B = halfMatch[1], text2A = halfMatch[2], text2B = halfMatch[3]) : (text2A = halfMatch[0], text2B = halfMatch[1], text1A = halfMatch[2], text1B = halfMatch[3]);\n const midCommon = halfMatch[4];\n return [text1A, text1B, text2A, text2B, midCommon];\n}\nfunction halfMatchI(longText, shortText, i) {\n const seed = longText.slice(i, i + Math.floor(longText.length / 4));\n let j = -1, bestCommon = \"\", bestLongTextA, bestLongTextB, bestShortTextA, bestShortTextB;\n for (; (j = shortText.indexOf(seed, j + 1)) !== -1; ) {\n const prefixLength = getCommonPrefix(longText.slice(i), shortText.slice(j)), suffixLength = getCommonSuffix(longText.slice(0, i), shortText.slice(0, j));\n bestCommon.length < suffixLength + prefixLength && (bestCommon = shortText.slice(j - suffixLength, j) + shortText.slice(j, j + prefixLength), bestLongTextA = longText.slice(0, i - suffixLength), bestLongTextB = longText.slice(i + prefixLength), bestShortTextA = shortText.slice(0, j - suffixLength), bestShortTextB = shortText.slice(j + prefixLength));\n }\n return bestCommon.length * 2 >= longText.length ? [\n bestLongTextA || \"\",\n bestLongTextB || \"\",\n bestShortTextA || \"\",\n bestShortTextB || \"\",\n bestCommon || \"\"\n ] : null;\n}\nfunction charsToLines(diffs, lineArray) {\n for (let x = 0; x < diffs.length; x++) {\n const chars = diffs[x][1], text = [];\n for (let y = 0; y < chars.length; y++)\n text[y] = lineArray[chars.charCodeAt(y)];\n diffs[x][1] = text.join(\"\");\n }\n}\nfunction linesToChars(textA, textB) {\n const lineArray = [], lineHash = {};\n lineArray[0] = \"\";\n function diffLinesToMunge(text) {\n let chars = \"\", lineStart = 0, lineEnd = -1, lineArrayLength = lineArray.length;\n for (; lineEnd < text.length - 1; ) {\n lineEnd = text.indexOf(`\n`, lineStart), lineEnd === -1 && (lineEnd = text.length - 1);\n let line = text.slice(lineStart, lineEnd + 1);\n (lineHash.hasOwnProperty ? lineHash.hasOwnProperty(line) : lineHash[line] !== void 0) ? chars += String.fromCharCode(lineHash[line]) : (lineArrayLength === maxLines && (line = text.slice(lineStart), lineEnd = text.length), chars += String.fromCharCode(lineArrayLength), lineHash[line] = lineArrayLength, lineArray[lineArrayLength++] = line), lineStart = lineEnd + 1;\n }\n return chars;\n }\n let maxLines = 4e4;\n const chars1 = diffLinesToMunge(textA);\n maxLines = 65535;\n const chars2 = diffLinesToMunge(textB);\n return { chars1, chars2, lineArray };\n}\nfunction doLineModeDiff(textA, textB, opts) {\n let text1 = textA, text2 = textB;\n const a = linesToChars(text1, text2);\n text1 = a.chars1, text2 = a.chars2;\n const linearray = a.lineArray;\n let diffs = doDiff(text1, text2, {\n checkLines: !1,\n deadline: opts.deadline\n });\n charsToLines(diffs, linearray), diffs = cleanupSemantic(diffs), diffs.push([DIFF_EQUAL, \"\"]);\n let pointer = 0, countDelete = 0, countInsert = 0, textDelete = \"\", textInsert = \"\";\n for (; pointer < diffs.length; ) {\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n countInsert++, textInsert += diffs[pointer][1];\n break;\n case DIFF_DELETE:\n countDelete++, textDelete += diffs[pointer][1];\n break;\n case DIFF_EQUAL:\n if (countDelete >= 1 && countInsert >= 1) {\n diffs.splice(pointer - countDelete - countInsert, countDelete + countInsert), pointer = pointer - countDelete - countInsert;\n const aa = doDiff(textDelete, textInsert, {\n checkLines: !1,\n deadline: opts.deadline\n });\n for (let j = aa.length - 1; j >= 0; j--)\n diffs.splice(pointer, 0, aa[j]);\n pointer += aa.length;\n }\n countInsert = 0, countDelete = 0, textDelete = \"\", textInsert = \"\";\n break;\n default:\n throw new Error(\"Unknown diff operation.\");\n }\n pointer++;\n }\n return diffs.pop(), diffs;\n}\nfunction computeDiff(text1, text2, opts) {\n let diffs;\n if (!text1)\n return [[DIFF_INSERT, text2]];\n if (!text2)\n return [[DIFF_DELETE, text1]];\n const longtext = text1.length > text2.length ? text1 : text2, shorttext = text1.length > text2.length ? text2 : text1, i = longtext.indexOf(shorttext);\n if (i !== -1)\n return diffs = [\n [DIFF_INSERT, longtext.substring(0, i)],\n [DIFF_EQUAL, shorttext],\n [DIFF_INSERT, longtext.substring(i + shorttext.length)]\n ], text1.length > text2.length && (diffs[0][0] = DIFF_DELETE, diffs[2][0] = DIFF_DELETE), diffs;\n if (shorttext.length === 1)\n return [\n [DIFF_DELETE, text1],\n [DIFF_INSERT, text2]\n ];\n const halfMatch = findHalfMatch(text1, text2);\n if (halfMatch) {\n const text1A = halfMatch[0], text1B = halfMatch[1], text2A = halfMatch[2], text2B = halfMatch[3], midCommon = halfMatch[4], diffsA = doDiff(text1A, text2A, opts), diffsB = doDiff(text1B, text2B, opts);\n return diffsA.concat([[DIFF_EQUAL, midCommon]], diffsB);\n }\n return opts.checkLines && text1.length > 100 && text2.length > 100 ? doLineModeDiff(text1, text2, opts) : bisect(text1, text2, opts.deadline);\n}\nvar __defProp$2 = Object.defineProperty, __getOwnPropSymbols$2 = Object.getOwnPropertySymbols, __hasOwnProp$2 = Object.prototype.hasOwnProperty, __propIsEnum$2 = Object.prototype.propertyIsEnumerable, __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value, __spreadValues$2 = (a, b) => {\n for (var prop in b || (b = {}))\n __hasOwnProp$2.call(b, prop) && __defNormalProp$2(a, prop, b[prop]);\n if (__getOwnPropSymbols$2)\n for (var prop of __getOwnPropSymbols$2(b))\n __propIsEnum$2.call(b, prop) && __defNormalProp$2(a, prop, b[prop]);\n return a;\n};\nconst DIFF_DELETE = -1, DIFF_INSERT = 1, DIFF_EQUAL = 0;\nfunction diff(textA, textB, opts) {\n if (textA === null || textB === null)\n throw new Error(\"Null input. (diff)\");\n const diffs = doDiff(textA, textB, createInternalOpts(opts || {}));\n return adjustDiffForSurrogatePairs(diffs), diffs;\n}\nfunction doDiff(textA, textB, options) {\n let text1 = textA, text2 = textB;\n if (text1 === text2)\n return text1 ? [[DIFF_EQUAL, text1]] : [];\n let commonlength = getCommonPrefix(text1, text2);\n const commonprefix = text1.substring(0, commonlength);\n text1 = text1.substring(commonlength), text2 = text2.substring(commonlength), commonlength = getCommonSuffix(text1, text2);\n const commonsuffix = text1.substring(text1.length - commonlength);\n text1 = text1.substring(0, text1.length - commonlength), text2 = text2.substring(0, text2.length - commonlength);\n let diffs = computeDiff(text1, text2, options);\n return commonprefix && diffs.unshift([DIFF_EQUAL, commonprefix]), commonsuffix && diffs.push([DIFF_EQUAL, commonsuffix]), diffs = cleanupMerge(diffs), diffs;\n}\nfunction createDeadLine(timeout) {\n let t = 1;\n return typeof timeout < \"u\" && (t = timeout <= 0 ? Number.MAX_VALUE : timeout), Date.now() + t * 1e3;\n}\nfunction createInternalOpts(opts) {\n return __spreadValues$2({\n checkLines: !0,\n deadline: createDeadLine(opts.timeout || 1)\n }, opts);\n}\nfunction combineChar(data, char, dir) {\n return dir === 1 ? data + char : char + data;\n}\nfunction splitChar(data, dir) {\n return dir === 1 ? [data.substring(0, data.length - 1), data[data.length - 1]] : [data.substring(1), data[0]];\n}\nfunction hasSharedChar(diffs, i, j, dir) {\n return dir === 1 ? diffs[i][1][diffs[i][1].length - 1] === diffs[j][1][diffs[j][1].length - 1] : diffs[i][1][0] === diffs[j][1][0];\n}\nfunction deisolateChar(diffs, i, dir) {\n const inv = dir === 1 ? -1 : 1;\n let insertIdx = null, deleteIdx = null, j = i + dir;\n for (; j >= 0 && j < diffs.length && (insertIdx === null || deleteIdx === null); j += dir) {\n const [op, text2] = diffs[j];\n if (text2.length !== 0) {\n if (op === DIFF_INSERT) {\n insertIdx === null && (insertIdx = j);\n continue;\n } else if (op === DIFF_DELETE) {\n deleteIdx === null && (deleteIdx = j);\n continue;\n } else if (op === DIFF_EQUAL) {\n if (insertIdx === null && deleteIdx === null) {\n const [rest, char2] = splitChar(diffs[i][1], dir);\n diffs[i][1] = rest, diffs[j][1] = combineChar(diffs[j][1], char2, inv);\n return;\n }\n break;\n }\n }\n }\n if (insertIdx !== null && deleteIdx !== null && hasSharedChar(diffs, insertIdx, deleteIdx, dir)) {\n const [insertText, insertChar] = splitChar(diffs[insertIdx][1], inv), [deleteText] = splitChar(diffs[deleteIdx][1], inv);\n diffs[insertIdx][1] = insertText, diffs[deleteIdx][1] = deleteText, diffs[i][1] = combineChar(diffs[i][1], insertChar, dir);\n return;\n }\n const [text, char] = splitChar(diffs[i][1], dir);\n diffs[i][1] = text, insertIdx === null ? (diffs.splice(j, 0, [DIFF_INSERT, char]), deleteIdx !== null && deleteIdx >= j && deleteIdx++) : diffs[insertIdx][1] = combineChar(diffs[insertIdx][1], char, inv), deleteIdx === null ? diffs.splice(j, 0, [DIFF_DELETE, char]) : diffs[deleteIdx][1] = combineChar(diffs[deleteIdx][1], char, inv);\n}\nfunction adjustDiffForSurrogatePairs(diffs) {\n for (let i = 0; i < diffs.length; i++) {\n const [diffType, diffText] = diffs[i];\n if (diffText.length === 0) continue;\n const firstChar = diffText[0], lastChar = diffText[diffText.length - 1];\n isHighSurrogate(lastChar) && diffType === DIFF_EQUAL && deisolateChar(diffs, i, 1), isLowSurrogate(firstChar) && diffType === DIFF_EQUAL && deisolateChar(diffs, i, -1);\n }\n for (let i = 0; i < diffs.length; i++)\n diffs[i][1].length === 0 && diffs.splice(i, 1);\n}\nfunction cleanupSemantic(rawDiffs) {\n let diffs = rawDiffs.map((diff2) => cloneDiff(diff2)), hasChanges = !1;\n const equalities = [];\n let equalitiesLength = 0, lastEquality = null, pointer = 0, lengthInsertions1 = 0, lengthDeletions1 = 0, lengthInsertions2 = 0, lengthDeletions2 = 0;\n for (; pointer < diffs.length; )\n diffs[pointer][0] === DIFF_EQUAL ? (equalities[equalitiesLength++] = pointer, lengthInsertions1 = lengthInsertions2, lengthDeletions1 = lengthDeletions2, lengthInsertions2 = 0, lengthDeletions2 = 0, lastEquality = diffs[pointer][1]) : (diffs[pointer][0] === DIFF_INSERT ? lengthInsertions2 += diffs[pointer][1].length : lengthDeletions2 += diffs[pointer][1].length, lastEquality && lastEquality.length <= Math.max(lengthInsertions1, lengthDeletions1) && lastEquality.length <= Math.max(lengthInsertions2, lengthDeletions2) && (diffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastEquality]), diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT, equalitiesLength--, equalitiesLength--, pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1, lengthInsertions1 = 0, lengthDeletions1 = 0, lengthInsertions2 = 0, lengthDeletions2 = 0, lastEquality = null, hasChanges = !0)), pointer++;\n for (hasChanges && (diffs = cleanupMerge(diffs)), diffs = cleanupSemanticLossless(diffs), pointer = 1; pointer < diffs.length; ) {\n if (diffs[pointer - 1][0] === DIFF_DELETE && diffs[pointer][0] === DIFF_INSERT) {\n const deletion = diffs[pointer - 1][1], insertion = diffs[pointer][1], overlapLength1 = getCommonOverlap(deletion, insertion), overlapLength2 = getCommonOverlap(insertion, deletion);\n overlapLength1 >= overlapLength2 ? (overlapLength1 >= deletion.length / 2 || overlapLength1 >= insertion.length / 2) && (diffs.splice(pointer, 0, [DIFF_EQUAL, insertion.substring(0, overlapLength1)]), diffs[pointer - 1][1] = deletion.substring(0, deletion.length - overlapLength1), diffs[pointer + 1][1] = insertion.substring(overlapLength1), pointer++) : (overlapLength2 >= deletion.length / 2 || overlapLength2 >= insertion.length / 2) && (diffs.splice(pointer, 0, [DIFF_EQUAL, deletion.substring(0, overlapLength2)]), diffs[pointer - 1][0] = DIFF_INSERT, diffs[pointer - 1][1] = insertion.substring(0, insertion.length - overlapLength2), diffs[pointer + 1][0] = DIFF_DELETE, diffs[pointer + 1][1] = deletion.substring(overlapLength2), pointer++), pointer++;\n }\n pointer++;\n }\n return diffs;\n}\nconst nonAlphaNumericRegex = /[^a-zA-Z0-9]/, whitespaceRegex = /\\s/, linebreakRegex = /[\\r\\n]/, blanklineEndRegex = /\\n\\r?\\n$/, blanklineStartRegex = /^\\r?\\n\\r?\\n/;\nfunction cleanupSemanticLossless(rawDiffs) {\n const diffs = rawDiffs.map((diff2) => cloneDiff(diff2));\n function diffCleanupSemanticScore(one, two) {\n if (!one || !two)\n return 6;\n const char1 = one.charAt(one.length - 1), char2 = two.charAt(0), nonAlphaNumeric1 = char1.match(nonAlphaNumericRegex), nonAlphaNumeric2 = char2.match(nonAlphaNumericRegex), whitespace1 = nonAlphaNumeric1 && char1.match(whitespaceRegex), whitespace2 = nonAlphaNumeric2 && char2.match(whitespaceRegex), lineBreak1 = whitespace1 && char1.match(linebreakRegex), lineBreak2 = whitespace2 && char2.match(linebreakRegex), blankLine1 = lineBreak1 && one.match(blanklineEndRegex), blankLine2 = lineBreak2 && two.match(blanklineStartRegex);\n return blankLine1 || blankLine2 ? 5 : lineBreak1 || lineBreak2 ? 4 : nonAlphaNumeric1 && !whitespace1 && whitespace2 ? 3 : whitespace1 || whitespace2 ? 2 : nonAlphaNumeric1 || nonAlphaNumeric2 ? 1 : 0;\n }\n let pointer = 1;\n for (; pointer < diffs.length - 1; ) {\n if (diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL) {\n let equality1 = diffs[pointer - 1][1], edit = diffs[pointer][1], equality2 = diffs[pointer + 1][1];\n const commonOffset = getCommonSuffix(equality1, edit);\n if (commonOffset) {\n const commonString = edit.substring(edit.length - commonOffset);\n equality1 = equality1.substring(0, equality1.length - commonOffset), edit = commonString + edit.substring(0, edit.length - commonOffset), equality2 = commonString + equality2;\n }\n let bestEquality1 = equality1, bestEdit = edit, bestEquality2 = equality2, bestScore = diffCleanupSemanticScore(equality1, edit) + diffCleanupSemanticScore(edit, equality2);\n for (; edit.charAt(0) === equality2.charAt(0); ) {\n equality1 += edit.charAt(0), edit = edit.substring(1) + equality2.charAt(0), equality2 = equality2.substring(1);\n const score = diffCleanupSemanticScore(equality1, edit) + diffCleanupSemanticScore(edit, equality2);\n score >= bestScore && (bestScore = score, bestEquality1 = equality1, bestEdit = edit, bestEquality2 = equality2);\n }\n diffs[pointer - 1][1] !== bestEquality1 && (bestEquality1 ? diffs[pointer - 1][1] = bestEquality1 : (diffs.splice(pointer - 1, 1), pointer--), diffs[pointer][1] = bestEdit, bestEquality2 ? diffs[pointer + 1][1] = bestEquality2 : (diffs.splice(pointer + 1, 1), pointer--));\n }\n pointer++;\n }\n return diffs;\n}\nfunction cleanupMerge(rawDiffs) {\n let diffs = rawDiffs.map((diff2) => cloneDiff(diff2));\n diffs.push([DIFF_EQUAL, \"\"]);\n let pointer = 0, countDelete = 0, countInsert = 0, textDelete = \"\", textInsert = \"\", commonlength;\n for (; pointer < diffs.length; )\n switch (diffs[pointer][0]) {\n case DIFF_INSERT:\n countInsert++, textInsert += diffs[pointer][1], pointer++;\n break;\n case DIFF_DELETE:\n countDelete++, textDelete += diffs[pointer][1], pointer++;\n break;\n case DIFF_EQUAL:\n countDelete + countInsert > 1 ? (countDelete !== 0 && countInsert !== 0 && (commonlength = getCommonPrefix(textInsert, textDelete), commonlength !== 0 && (pointer - countDelete - countInsert > 0 && diffs[pointer - countDelete - countInsert - 1][0] === DIFF_EQUAL ? diffs[pointer - countDelete - countInsert - 1][1] += textInsert.substring(\n 0,\n commonlength\n ) : (diffs.splice(0, 0, [DIFF_EQUAL, textInsert.substring(0, commonlength)]), pointer++), textInsert = textInsert.substring(commonlength), textDelete = textDelete.substring(commonlength)), commonlength = getCommonSuffix(textInsert, textDelete), commonlength !== 0 && (diffs[pointer][1] = textInsert.substring(textInsert.length - commonlength) + diffs[pointer][1], textInsert = textInsert.substring(0, textInsert.length - commonlength), textDelete = textDelete.substring(0, textDelete.length - commonlength))), pointer -= countDelete + countInsert, diffs.splice(pointer, countDelete + countInsert), textDelete.length && (diffs.splice(pointer, 0, [DIFF_DELETE, textDelete]), pointer++), textInsert.length && (diffs.splice(pointer, 0, [DIFF_INSERT, textInsert]), pointer++), pointer++) : pointer !== 0 && diffs[pointer - 1][0] === DIFF_EQUAL ? (diffs[pointer - 1][1] += diffs[pointer][1], diffs.splice(pointer, 1)) : pointer++, countInsert = 0, countDelete = 0, textDelete = \"\", textInsert = \"\";\n break;\n default:\n throw new Error(\"Unknown diff operation\");\n }\n diffs[diffs.length - 1][1] === \"\" && diffs.pop();\n let hasChanges = !1;\n for (pointer = 1; pointer < diffs.length - 1; )\n diffs[pointer - 1][0] === DIFF_EQUAL && diffs[pointer + 1][0] === DIFF_EQUAL && (diffs[pointer][1].substring(diffs[pointer][1].length - diffs[pointer - 1][1].length) === diffs[pointer - 1][1] ? (diffs[pointer][1] = diffs[pointer - 1][1] + diffs[pointer][1].substring(0, diffs[pointer][1].length - diffs[pointer - 1][1].length), diffs[pointer + 1][1] = diffs[pointer - 1][1] + diffs[pointer + 1][1], diffs.splice(pointer - 1, 1), hasChanges = !0) : diffs[pointer][1].substring(0, diffs[pointer + 1][1].length) === diffs[pointer + 1][1] && (diffs[pointer - 1][1] += diffs[pointer + 1][1], diffs[pointer][1] = diffs[pointer][1].substring(diffs[pointer + 1][1].length) + diffs[pointer + 1][1], diffs.splice(pointer + 1, 1), hasChanges = !0)), pointer++;\n return hasChanges && (diffs = cleanupMerge(diffs)), diffs;\n}\nfunction trueCount(...args) {\n return args.reduce((n, bool) => n + (bool ? 1 : 0), 0);\n}\nfunction cleanupEfficiency(rawDiffs, editCost = 4) {\n let diffs = rawDiffs.map((diff2) => cloneDiff(diff2)), hasChanges = !1;\n const equalities = [];\n let equalitiesLength = 0, lastEquality = null, pointer = 0, preIns = !1, preDel = !1, postIns = !1, postDel = !1;\n for (; pointer < diffs.length; )\n diffs[pointer][0] === DIFF_EQUAL ? (diffs[pointer][1].length < editCost && (postIns || postDel) ? (equalities[equalitiesLength++] = pointer, preIns = postIns, preDel = postDel, lastEquality = diffs[pointer][1]) : (equalitiesLength = 0, lastEquality = null), postIns = !1, postDel = !1) : (diffs[pointer][0] === DIFF_DELETE ? postDel = !0 : postIns = !0, lastEquality && (preIns && preDel && postIns && postDel || lastEquality.length < editCost / 2 && trueCount(preIns, preDel, postIns, postDel) === 3) && (diffs.splice(equalities[equalitiesLength - 1], 0, [DIFF_DELETE, lastEquality]), diffs[equalities[equalitiesLength - 1] + 1][0] = DIFF_INSERT, equalitiesLength--, lastEquality = null, preIns && preDel ? (postIns = !0, postDel = !0, equalitiesLength = 0) : (equalitiesLength--, pointer = equalitiesLength > 0 ? equalities[equalitiesLength - 1] : -1, postIns = !1, postDel = !1), hasChanges = !0)), pointer++;\n return hasChanges && (diffs = cleanupMerge(diffs)), diffs;\n}\nvar __defProp$1 = Object.defineProperty, __getOwnPropSymbols$1 = Object.getOwnPropertySymbols, __hasOwnProp$1 = Object.prototype.hasOwnProperty, __propIsEnum$1 = Object.prototype.propertyIsEnumerable, __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value, __spreadValues$1 = (a, b) => {\n for (var prop in b || (b = {}))\n __hasOwnProp$1.call(b, prop) && __defNormalProp$1(a, prop, b[prop]);\n if (__getOwnPropSymbols$1)\n for (var prop of __getOwnPropSymbols$1(b))\n __propIsEnum$1.call(b, prop) && __defNormalProp$1(a, prop, b[prop]);\n return a;\n};\nconst DEFAULT_OPTIONS = {\n /**\n * At what point is no match declared (0.0 = perfection, 1.0 = very loose).\n */\n threshold: 0.5,\n /**\n * How far to search for a match (0 = exact location, 1000+ = broad match).\n * A match this many characters away from the expected location will add\n * 1.0 to the score (0.0 is a perfect match).\n */\n distance: 1e3\n};\nfunction applyDefaults(options) {\n return __spreadValues$1(__spreadValues$1({}, DEFAULT_OPTIONS), options);\n}\nconst MAX_BITS$1 = 32;\nfunction bitap(text, pattern, loc, opts = {}) {\n if (pattern.length > MAX_BITS$1)\n throw new Error(\"Pattern too long for this browser.\");\n const options = applyDefaults(opts), s = getAlphabetFromPattern(pattern);\n function getBitapScore(e, x) {\n const accuracy = e / pattern.length, proximity = Math.abs(loc - x);\n return options.distance ? accuracy + proximity / options.distance : proximity ? 1 : accuracy;\n }\n let scoreThreshold = options.threshold, bestLoc = text.indexOf(pattern, loc);\n bestLoc !== -1 && (scoreThreshold = Math.min(getBitapScore(0, bestLoc), scoreThreshold), bestLoc = text.lastIndexOf(pattern, loc + pattern.length), bestLoc !== -1 && (scoreThreshold = Math.min(getBitapScore(0, bestLoc), scoreThreshold)));\n const matchmask = 1 << pattern.length - 1;\n bestLoc = -1;\n let binMin, binMid, binMax = pattern.length + text.length, lastRd = [];\n for (let d = 0; d < pattern.length; d++) {\n for (binMin = 0, binMid = binMax; binMin < binMid; )\n getBitapScore(d, loc + binMid) <= scoreThreshold ? binMin = binMid : binMax = binMid, binMid = Math.floor((binMax - binMin) / 2 + binMin);\n binMax = binMid;\n let start = Math.max(1, loc - binMid + 1);\n const finish = Math.min(loc + binMid, text.length) + pattern.length, rd = new Array(finish + 2);\n rd[finish + 1] = (1 << d) - 1;\n for (let j = finish; j >= start; j--) {\n const charMatch = s[text.charAt(j - 1)];\n if (d === 0 ? rd[j] = (rd[j + 1] << 1 | 1) & charMatch : rd[j] = (rd[j + 1] << 1 | 1) & charMatch | ((lastRd[j + 1] | lastRd[j]) << 1 | 1) | lastRd[j + 1], rd[j] & matchmask) {\n const score = getBitapScore(d, j - 1);\n if (score <= scoreThreshold)\n if (scoreThreshold = score, bestLoc = j - 1, bestLoc > loc)\n start = Math.max(1, 2 * loc - bestLoc);\n else\n break;\n }\n }\n if (getBitapScore(d + 1, loc) > scoreThreshold)\n break;\n lastRd = rd;\n }\n return bestLoc;\n}\nfunction getAlphabetFromPattern(pattern) {\n const s = {};\n for (let i = 0; i < pattern.length; i++)\n s[pattern.charAt(i)] = 0;\n for (let i = 0; i < pattern.length; i++)\n s[pattern.charAt(i)] |= 1 << pattern.length - i - 1;\n return s;\n}\nfunction match(text, pattern, searchLocation, options = {}) {\n if (text === null || pattern === null || searchLocation === null)\n throw new Error(\"Null input. (match())\");\n const loc = Math.max(0, Math.min(searchLocation, text.length));\n if (text === pattern)\n return 0;\n if (text.length) {\n if (text.substring(loc, loc + pattern.length) === pattern)\n return loc;\n } else return -1;\n return bitap(text, pattern, loc, options);\n}\nfunction diffText1(diffs) {\n const text = [];\n for (let x = 0; x < diffs.length; x++)\n diffs[x][0] !== DIFF_INSERT && (text[x] = diffs[x][1]);\n return text.join(\"\");\n}\nfunction diffText2(diffs) {\n const text = [];\n for (let x = 0; x < diffs.length; x++)\n diffs[x][0] !== DIFF_DELETE && (text[x] = diffs[x][1]);\n return text.join(\"\");\n}\nfunction levenshtein(diffs) {\n let leven = 0, insertions = 0, deletions = 0;\n for (let x = 0; x < diffs.length; x++) {\n const op = diffs[x][0], data = diffs[x][1];\n switch (op) {\n case DIFF_INSERT:\n insertions += data.length;\n break;\n case DIFF_DELETE:\n deletions += data.length;\n break;\n case DIFF_EQUAL:\n leven += Math.max(insertions, deletions), insertions = 0, deletions = 0;\n break;\n default:\n throw new Error(\"Unknown diff operation.\");\n }\n }\n return leven += Math.max(insertions, deletions), leven;\n}\nfunction xIndex(diffs, location) {\n let chars1 = 0, chars2 = 0, lastChars1 = 0, lastChars2 = 0, x;\n for (x = 0; x < diffs.length && (diffs[x][0] !== DIFF_INSERT && (chars1 += diffs[x][1].length), diffs[x][0] !== DIFF_DELETE && (chars2 += diffs[x][1].length), !(chars1 > location)); x++)\n lastChars1 = chars1, lastChars2 = chars2;\n return diffs.length !== x && diffs[x][0] === DIFF_DELETE ? lastChars2 : lastChars2 + (location - lastChars1);\n}\nfunction countUtf8Bytes(str) {\n let bytes = 0;\n for (let i = 0; i < str.length; i++) {\n const codePoint = str.codePointAt(i);\n if (typeof codePoint > \"u\")\n throw new Error(\"Failed to get codepoint\");\n bytes += utf8len(codePoint);\n }\n return bytes;\n}\nfunction adjustIndiciesToUcs2(patches, base, options = {}) {\n let byteOffset = 0, idx = 0;\n function advanceTo(target) {\n for (; byteOffset < target; ) {\n const codePoint = base.codePointAt(idx);\n if (typeof codePoint > \"u\")\n return idx;\n byteOffset += utf8len(codePoint), codePoint > 65535 ? idx += 2 : idx += 1;\n }\n if (!options.allowExceedingIndices && byteOffset !== target)\n throw new Error(\"Failed to determine byte offset\");\n return idx;\n }\n const adjusted = [];\n for (const patch of patches)\n adjusted.push({\n diffs: patch.diffs.map((diff2) => cloneDiff(diff2)),\n start1: advanceTo(patch.start1),\n start2: advanceTo(patch.start2),\n utf8Start1: patch.utf8Start1,\n utf8Start2: patch.utf8Start2,\n length1: patch.length1,\n length2: patch.length2,\n utf8Length1: patch.utf8Length1,\n utf8Length2: patch.utf8Length2\n });\n return adjusted;\n}\nfunction utf8len(codePoint) {\n return codePoint <= 127 ? 1 : codePoint <= 2047 ? 2 : codePoint <= 65535 ? 3 : 4;\n}\nconst MAX_BITS = 32, DEFAULT_MARGIN = 4;\nfunction addPadding(patches, margin = DEFAULT_MARGIN) {\n const paddingLength = margin;\n let nullPadding = \"\";\n for (let x = 1; x <= paddingLength; x++)\n nullPadding += String.fromCharCode(x);\n for (const p of patches)\n p.start1 += paddingLength, p.start2 += paddingLength, p.utf8Start1 += paddingLength, p.utf8Start2 += paddingLength;\n let patch = patches[0], diffs = patch.diffs;\n if (diffs.length === 0 || diffs[0][0] !== DIFF_EQUAL)\n diffs.unshift([DIFF_EQUAL, nullPadding]), patch.start1 -= paddingLength, patch.start2 -= paddingLength, patch.utf8Start1 -= paddingLength, patch.utf8Start2 -= paddingLength, patch.length1 += paddingLength, patch.length2 += paddingLength, patch.utf8Length1 += paddingLength, patch.utf8Length2 += paddingLength;\n else if (paddingLength > diffs[0][1].length) {\n const firstDiffLength = diffs[0][1].length, extraLength = paddingLength - firstDiffLength;\n diffs[0][1] = nullPadding.substring(firstDiffLength) + diffs[0][1], patch.start1 -= extraLength, patch.start2 -= extraLength, patch.utf8Start1 -= extraLength, patch.utf8Start2 -= extraLength, patch.length1 += extraLength, patch.length2 += extraLength, patch.utf8Length1 += extraLength, patch.utf8Length2 += extraLength;\n }\n if (patch = patches[patches.length - 1], diffs = patch.diffs, diffs.length === 0 || diffs[diffs.length - 1][0] !== DIFF_EQUAL)\n diffs.push([DIFF_EQUAL, nullPadding]), patch.length1 += paddingLength, patch.length2 += paddingLength, patch.utf8Length1 += paddingLength, patch.utf8Length2 += paddingLength;\n else if (paddingLength > diffs[diffs.length - 1][1].length) {\n const extraLength = paddingLength - diffs[diffs.length - 1][1].length;\n diffs[diffs.length - 1][1] += nullPadding.substring(0, extraLength), patch.length1 += extraLength, patch.length2 += extraLength, patch.utf8Length1 += extraLength, patch.utf8Length2 += extraLength;\n }\n return nullPadding;\n}\nfunction createPatchObject(start1, start2) {\n return {\n diffs: [],\n start1,\n start2,\n utf8Start1: start1,\n utf8Start2: start2,\n length1: 0,\n length2: 0,\n utf8Length1: 0,\n utf8Length2: 0\n };\n}\nfunction splitMax(patches, margin = DEFAULT_MARGIN) {\n const patchSize = MAX_BITS;\n for (let x = 0; x < patches.length; x++) {\n if (patches[x].length1 <= patchSize)\n continue;\n const bigpatch = patches[x];\n patches.splice(x--, 1);\n let start1 = bigpatch.start1, start2 = bigpatch.start2, preContext = \"\";\n for (; bigpatch.diffs.length !== 0; ) {\n const patch = createPatchObject(start1 - preContext.length, start2 - preContext.length);\n let empty = !0;\n if (preContext !== \"\") {\n const precontextByteCount = countUtf8Bytes(preContext);\n patch.length1 = preContext.length, patch.utf8Length1 = precontextByteCount, patch.length2 = preContext.length, patch.utf8Length2 = precontextByteCount, patch.diffs.push([DIFF_EQUAL, preContext]);\n }\n for (; bigpatch.diffs.length !== 0 && patch.length1 < patchSize - margin; ) {\n const diffType = bigpatch.diffs[0][0];\n let diffText = bigpatch.diffs[0][1], diffTextByteCount = countUtf8Bytes(diffText);\n if (diffType === DIFF_INSERT) {\n patch.length2 += diffText.length, patch.utf8Length2 += diffTextByteCount, start2 += diffText.length;\n const diff2 = bigpatch.diffs.shift();\n diff2 && patch.diffs.push(diff2), empty = !1;\n } else diffType === DIFF_DELETE && patch.diffs.length === 1 && patch.diffs[0][0] === DIFF_EQUAL && diffText.length > 2 * patchSize ? (patch.length1 += diffText.length, patch.utf8Length1 += diffTextByteCount, start1 += diffText.length, empty = !1, patch.diffs.push([diffType, diffText]), bigpatch.diffs.shift()) : (diffText = diffText.substring(0, patchSize - patch.length1 - margin), diffTextByteCount = countUtf8Bytes(diffText), patch.length1 += diffText.length, patch.utf8Length1 += diffTextByteCount, start1 += diffText.length, diffType === DIFF_EQUAL ? (patch.length2 += diffText.length, patch.utf8Length2 += diffTextByteCount, start2 += diffText.length) : empty = !1, patch.diffs.push([diffType, diffText]), diffText === bigpatch.diffs[0][1] ? bigpatch.diffs.shift() : bigpatch.diffs[0][1] = bigpatch.diffs[0][1].substring(diffText.length));\n }\n preContext = diffText2(patch.diffs), preContext = preContext.substring(preContext.length - margin);\n const postContext = diffText1(bigpatch.diffs).substring(0, margin), postContextByteCount = countUtf8Bytes(postContext);\n postContext !== \"\" && (patch.length1 += postContext.length, patch.length2 += postContext.length, patch.utf8Length1 += postContextByteCount, patch.utf8Length2 += postContextByteCount, patch.diffs.length !== 0 && patch.diffs[patch.diffs.length - 1][0] === DIFF_EQUAL ? patch.diffs[patch.diffs.length - 1][1] += postContext : patch.diffs.push([DIFF_EQUAL, postContext])), empty || patches.splice(++x, 0, patch);\n }\n }\n}\nfunction apply(patches, originalText, opts = {}) {\n if (typeof patches == \"string\")\n throw new Error(\"Patches must be an array - pass the patch to `parsePatch()` first\");\n let text = originalText;\n if (patches.length === 0)\n return [text, []];\n const parsed = adjustIndiciesToUcs2(patches, text, {\n allowExceedingIndices: opts.allowExceedingIndices\n }), margin = opts.margin || DEFAULT_MARGIN, deleteThreshold = opts.deleteThreshold || 0.4, nullPadding = addPadding(parsed, margin);\n text = nullPadding + text + nullPadding, splitMax(parsed, margin);\n let delta = 0;\n const results = [];\n for (let x = 0; x < parsed.length; x++) {\n const expectedLoc = parsed[x].start2 + delta, text1 = diffText1(parsed[x].diffs);\n let startLoc, endLoc = -1;\n if (text1.length > MAX_BITS ? (startLoc = match(text, text1.substring(0, MAX_BITS), expectedLoc), startLoc !== -1 && (endLoc = match(\n text,\n text1.substring(text1.length - MAX_BITS),\n expectedLoc + text1.length - MAX_BITS\n ), (endLoc === -1 || startLoc >= endLoc) && (startLoc = -1))) : startLoc = match(text, text1, expectedLoc), startLoc === -1)\n results[x] = !1, delta -= parsed[x].length2 - parsed[x].length1;\n else {\n results[x] = !0, delta = startLoc - expectedLoc;\n let text2;\n if (endLoc === -1 ? text2 = text.substring(startLoc, startLoc + text1.length) : text2 = text.substring(startLoc, endLoc + MAX_BITS), text1 === text2)\n text = text.substring(0, startLoc) + diffText2(parsed[x].diffs) + text.substring(startLoc + text1.length);\n else {\n let diffs = diff(text1, text2, { checkLines: !1 });\n if (text1.length > MAX_BITS && levenshtein(diffs) / text1.length > deleteThreshold)\n results[x] = !1;\n else {\n diffs = cleanupSemanticLossless(diffs);\n let index1 = 0, index2 = 0;\n for (let y = 0; y < parsed[x].diffs.length; y++) {\n const mod = parsed[x].diffs[y];\n mod[0] !== DIFF_EQUAL && (index2 = xIndex(diffs, index1)), mod[0] === DIFF_INSERT ? text = text.substring(0, startLoc + index2) + mod[1] + text.substring(startLoc + index2) : mod[0] === DIFF_DELETE && (text = text.substring(0, startLoc + index2) + text.substring(startLoc + xIndex(diffs, index1 + mod[1].length))), mod[0] !== DIFF_DELETE && (index1 += mod[1].length);\n }\n }\n }\n }\n }\n return text = text.substring(nullPadding.length, text.length - nullPadding.length), [text, results];\n}\nvar __defProp = Object.defineProperty, __getOwnPropSymbols = Object.getOwnPropertySymbols, __hasOwnProp = Object.prototype.hasOwnProperty, __propIsEnum = Object.prototype.propertyIsEnumerable, __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: !0, configurable: !0, writable: !0, value }) : obj[key] = value, __spreadValues = (a, b) => {\n for (var prop in b || (b = {}))\n __hasOwnProp.call(b, prop) && __defNormalProp(a, prop, b[prop]);\n if (__getOwnPropSymbols)\n for (var prop of __getOwnPropSymbols(b))\n __propIsEnum.call(b, prop) && __defNormalProp(a, prop, b[prop]);\n return a;\n};\nconst DEFAULT_OPTS = {\n margin: 4\n};\nfunction getDefaultOpts(opts = {}) {\n return __spreadValues(__spreadValues({}, DEFAULT_OPTS), opts);\n}\nfunction make(a, b, options) {\n if (typeof a == \"string\" && typeof b == \"string\") {\n let diffs = diff(a, b, { checkLines: !0 });\n return diffs.length > 2 && (diffs = cleanupSemantic(diffs), diffs = cleanupEfficiency(diffs)), _make(a, diffs, getDefaultOpts(options));\n }\n if (a && Array.isArray(a) && typeof b > \"u\")\n return _make(diffText1(a), a, getDefaultOpts(options));\n if (typeof a == \"string\" && b && Array.isArray(b))\n return _make(a, b, getDefaultOpts(options));\n throw new Error(\"Unknown call format to make()\");\n}\nfunction _make(textA, diffs, options) {\n if (diffs.length === 0)\n return [];\n const patches = [];\n let patch = createPatchObject(0, 0), patchDiffLength = 0, charCount1 = 0, charCount2 = 0, utf8Count1 = 0, utf8Count2 = 0, prepatchText = textA, postpatchText = textA;\n for (let x = 0; x < diffs.length; x++) {\n const currentDiff = diffs[x], [diffType, diffText] = currentDiff, diffTextLength = diffText.length, diffByteLength = countUtf8Bytes(diffText);\n switch (!patchDiffLength && diffType !== DIFF_EQUAL && (patch.start1 = charCount1, patch.start2 = charCount2, patch.utf8Start1 = utf8Count1, patch.utf8Start2 = utf8Count2), diffType) {\n case DIFF_INSERT:\n patch.diffs[patchDiffLength++] = currentDiff, patch.length2 += diffTextLength, patch.utf8Length2 += diffByteLength, postpatchText = postpatchText.substring(0, charCount2) + diffText + postpatchText.substring(charCount2);\n break;\n case DIFF_DELETE:\n patch.length1 += diffTextLength, patch.utf8Length1 += diffByteLength, patch.diffs[patchDiffLength++] = currentDiff, postpatchText = postpatchText.substring(0, charCount2) + postpatchText.substring(charCount2 + diffTextLength);\n break;\n case DIFF_EQUAL:\n diffTextLength <= 2 * options.margin && patchDiffLength && diffs.length !== x + 1 ? (patch.diffs[patchDiffLength++] = currentDiff, patch.length1 += diffTextLength, patch.length2 += diffTextLength, patch.utf8Length1 += diffByteLength, patch.utf8Length2 += diffByteLength) : diffTextLength >= 2 * options.margin && patchDiffLength && (addContext(patch, prepatchText, options), patches.push(patch), patch = createPatchObject(-1, -1), patchDiffLength = 0, prepatchText = postpatchText, charCount1 = charCount2, utf8Count1 = utf8Count2);\n break;\n default:\n throw new Error(\"Unknown diff type\");\n }\n diffType !== DIFF_INSERT && (charCount1 += diffTextLength, utf8Count1 += diffByteLength), diffType !== DIFF_DELETE && (charCount2 += diffTextLength, utf8Count2 += diffByteLength);\n }\n return patchDiffLength && (addContext(patch, prepatchText, options), patches.push(patch)), patches;\n}\nfunction addContext(patch, text, opts) {\n if (text.length === 0)\n return;\n let pattern = text.substring(patch.start2, patch.start2 + patch.length1), padding = 0;\n for (; text.indexOf(pattern) !== text.lastIndexOf(pattern) && pattern.length < MAX_BITS - opts.margin - opts.margin; )\n padding += opts.margin, pattern = text.substring(patch.start2 - padding, patch.start2 + patch.length1 + padding);\n padding += opts.margin;\n let prefixStart = patch.start2 - padding;\n prefixStart >= 1 && isLowSurrogate(text[prefixStart]) && prefixStart--;\n const prefix = text.substring(prefixStart, patch.start2);\n prefix && patch.diffs.unshift([DIFF_EQUAL, prefix]);\n const prefixLength = prefix.length, prefixUtf8Length = countUtf8Bytes(prefix);\n let suffixEnd = patch.start2 + patch.length1 + padding;\n suffixEnd < text.length && isLowSurrogate(text[suffixEnd]) && suffixEnd++;\n const suffix = text.substring(patch.start2 + patch.length1, suffixEnd);\n suffix && patch.diffs.push([DIFF_EQUAL, suffix]);\n const suffixLength = suffix.length, suffixUtf8Length = countUtf8Bytes(suffix);\n patch.start1 -= prefixLength, patch.start2 -= prefixLength, patch.utf8Start1 -= prefixUtf8Length, patch.utf8Start2 -= prefixUtf8Length, patch.length1 += prefixLength + suffixLength, patch.length2 += prefixLength + suffixLength, patch.utf8Length1 += prefixUtf8Length + suffixUtf8Length, patch.utf8Length2 += prefixUtf8Length + suffixUtf8Length;\n}\nconst patchHeader = /^@@ -(\\d+),?(\\d*) \\+(\\d+),?(\\d*) @@$/;\nfunction parse(textline) {\n if (!textline)\n return [];\n const patches = [], lines = textline.split(`\n`);\n let textPointer = 0;\n for (; textPointer < lines.length; ) {\n const m = lines[textPointer].match(patchHeader);\n if (!m)\n throw new Error(`Invalid patch string: ${lines[textPointer]}`);\n const patch = createPatchObject(toInt(m[1]), toInt(m[3]));\n for (patches.push(patch), m[2] === \"\" ? (patch.start1--, patch.utf8Start1--, patch.length1 = 1, patch.utf8Length1 = 1) : m[2] === \"0\" ? (patch.length1 = 0, patch.utf8Length1 = 0) : (patch.start1--, patch.utf8Start1--, patch.utf8Length1 = toInt(m[2]), patch.length1 = patch.utf8Length1), m[4] === \"\" ? (patch.start2--, patch.utf8Start2--, patch.length2 = 1, patch.utf8Length2 = 1) : m[4] === \"0\" ? (patch.length2 = 0, patch.utf8Length2 = 0) : (patch.start2--, patch.utf8Start2--, patch.utf8Length2 = toInt(m[4]), patch.length2 = patch.utf8Length2), textPointer++; textPointer < lines.length; ) {\n const currentLine = lines[textPointer], sign = currentLine.charAt(0);\n if (sign === \"@\")\n break;\n if (sign === \"\") {\n textPointer++;\n continue;\n }\n let line;\n try {\n line = decodeURI(currentLine.slice(1));\n } catch (ex) {\n throw new Error(`Illegal escape in parse: ${currentLine}`);\n }\n const utf8Diff = countUtf8Bytes(line) - line.length;\n if (sign === \"-\")\n patch.diffs.push([DIFF_DELETE, line]), patch.length1 -= utf8Diff;\n else if (sign === \"+\")\n patch.diffs.push([DIFF_INSERT, line]), patch.length2 -= utf8Diff;\n else if (sign === \" \")\n patch.diffs.push([DIFF_EQUAL, line]), patch.length1 -= utf8Diff, patch.length2 -= utf8Diff;\n else\n throw new Error(`Invalid patch mode \"${sign}\" in: ${line}`);\n textPointer++;\n }\n }\n return patches;\n}\nfunction toInt(num) {\n return parseInt(num, 10);\n}\nfunction stringify(patches) {\n return patches.map(stringifyPatch).join(\"\");\n}\nfunction stringifyPatch(patch) {\n const { utf8Length1, utf8Length2, utf8Start1, utf8Start2, diffs } = patch;\n let coords1;\n utf8Length1 === 0 ? coords1 = `${utf8Start1},0` : utf8Length1 === 1 ? coords1 = `${utf8Start1 + 1}` : coords1 = `${utf8Start1 + 1},${utf8Length1}`;\n let coords2;\n utf8Length2 === 0 ? coords2 = `${utf8Start2},0` : utf8Length2 === 1 ? coords2 = `${utf8Start2 + 1}` : coords2 = `${utf8Start2 + 1},${utf8Length2}`;\n const text = [`@@ -${coords1} +${coords2} @@\n`];\n let op;\n for (let x = 0; x < diffs.length; x++) {\n switch (diffs[x][0]) {\n case DIFF_INSERT:\n op = \"+\";\n break;\n case DIFF_DELETE:\n op = \"-\";\n break;\n case DIFF_EQUAL:\n op = \" \";\n break;\n default:\n throw new Error(\"Unknown patch operation.\");\n }\n text[x + 1] = `${op + encodeURI(diffs[x][1])}\n`;\n }\n return text.join(\"\").replace(/%20/g, \" \");\n}\nexport {\n DIFF_DELETE,\n DIFF_EQUAL,\n DIFF_INSERT,\n adjustIndiciesToUcs2,\n apply as applyPatches,\n cleanupEfficiency,\n cleanupSemantic,\n diff as makeDiff,\n make as makePatches,\n match,\n parse as parsePatch,\n stringifyPatch,\n stringify as stringifyPatches,\n xIndex\n};\n//# sourceMappingURL=index.js.map\n","import \"./module.css\";\nimport {cleanupSemantic as $haT8Y$cleanupSemantic, makeDiff as $haT8Y$makeDiff} from \"@sanity/diff-match-patch\";\n\n/* eslint-disable no-console */ /* Using local update by @dmsnell:\nhttps://github.com/dmsnell/diff-match-patch/blob/issues/69-broken-surrogate-pairs/javascript/diff_match_patch_uncompressed.js\n*/ \n/**\n * Simple is object check.\n * @param item\n * @returns {boolean}\n */ function $d0b82e0396560011$var$isObject(item) {\n return item && typeof item === 'object' && !Array.isArray(item) && item !== null;\n}\nfunction $d0b82e0396560011$export$2e2bcd8739ae039(target, source) {\n if ($d0b82e0396560011$var$isObject(target) && $d0b82e0396560011$var$isObject(source)) Object.keys(source).forEach((key)=>{\n if (key === '__proto__' || key === 'constructor') return;\n if ($d0b82e0396560011$var$isObject(source[key])) {\n if (!target[key] || !$d0b82e0396560011$var$isObject(target[key])) target[key] = source[key];\n $d0b82e0396560011$export$2e2bcd8739ae039(target[key], source[key]);\n } else Object.assign(target, {\n [key]: source[key]\n });\n });\n return target;\n}\n\n\nfunction $a61894d52139a1b7$export$2e2bcd8739ae039(callback, wait, immediate = false) {\n let timeout = null;\n let initialCall = true;\n return (...args)=>{\n const callNow = immediate && initialCall;\n const next = ()=>{\n callback.apply(this, args);\n timeout = null;\n };\n if (callNow) {\n initialCall = false;\n next();\n }\n if (!timeout) timeout = setTimeout(next, wait);\n };\n}\n\n\nfunction $20710ff753814db4$export$2e2bcd8739ae039(callback, wait) {\n let timeout;\n return (...args)=>{\n const context = this;\n clearTimeout(timeout);\n timeout = setTimeout(()=>callback.apply(context, args), wait);\n };\n}\n\n\nfunction $f81fe5d88190aca6$export$2e2bcd8739ae039(value = '') {\n const normalized = value.replace(/\\r\\n/g, '\\n');\n return normalized;\n}\n\n\n// generates a Bezier curve in SVG format\nfunction $238bad4938ddde7c$export$2e2bcd8739ae039(startX, startY, endX, endY) {\n const w = endX - startX;\n const halfWidth = startX + w / 2;\n // now create the curve\n // position it at the initial x,y coords\n // This is of the form \"C M,N O,P Q,R\" where C is a directive for SVG (\"curveto\"),\n // M,N are the first curve control point, O,P the second control point\n // and Q,R are the final coords\n return `M ${startX} ${startY} C ${halfWidth},${startY} ${halfWidth},${endY} ${endX},${endY}`;\n}\n\n\nvar $b5c286a254b261e6$export$2e2bcd8739ae039 = {\n DIFF_EQUAL: 0,\n DIFF_DELETE: -1,\n DIFF_INSERT: 1,\n EDITOR_RIGHT: 'right',\n EDITOR_LEFT: 'left',\n RTL: 'rtl',\n LTR: 'ltr',\n SVG_NS: 'http://www.w3.org/2000/svg',\n DIFF_GRANULARITY_SPECIFIC: 'specific',\n DIFF_GRANULARITY_BROAD: 'broad'\n};\n\n\nfunction $3d931e456f0d108c$export$2e2bcd8739ae039(acediff, editor) {\n let { mode: mode } = acediff.options;\n if (editor === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_LEFT && acediff.options.left.mode !== null) mode = acediff.options.left.mode;\n if (editor === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_RIGHT && acediff.options.right.mode !== null) mode = acediff.options.right.mode;\n return mode;\n}\n\n\n\nfunction $893f0e07a87dd83c$export$2e2bcd8739ae039(acediff, editor) {\n let { theme: theme } = acediff.options;\n if (editor === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_LEFT && acediff.options.left.theme !== null) theme = acediff.options.left.theme;\n if (editor === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_RIGHT && acediff.options.right.theme !== null) theme = acediff.options.right.theme;\n return theme;\n}\n\n\nfunction $fc0df9ae77cc2f56$export$2e2bcd8739ae039(editor, line) {\n return editor.ace.getSession().doc.getLine(line);\n}\n\n\nfunction $7eb2da7d8a00890b$export$2e2bcd8739ae039(acediff) {\n // editorHeight: document.getElementById(acediff.options.left.id).clientHeight\n return document.getElementById(acediff.options.left.id).offsetHeight;\n}\n\n\nfunction $c0c16fed0f3352bb$export$2e2bcd8739ae039(info) {\n const el = document.createElement('div');\n const props = {\n class: info.className,\n style: `top:${info.topOffset}px`,\n title: info.tooltip,\n 'data-diff-index': info.diffIndex\n };\n for(const key in props)el.setAttribute(key, props[key]);\n el.innerHTML = info.arrowContent;\n return el;\n}\n\n\n/**\n * Search for element in parent and create it if it can't be found\n * @param {*HTMLElement} parent\n * @param {string} elClass Element class\n *\n * Returns ID of the element\n */ function $419710df3593df8d$export$2e2bcd8739ae039(parent, elClass) {\n const guid = Math.random().toString(36).substr(2, 5);\n const newId = `js-${elClass}-${guid}`;\n const currentEl = parent.querySelector(`.${elClass}`);\n if (currentEl) {\n currentEl.id = currentEl.id || newId;\n return currentEl.id;\n }\n const el = document.createElement('div');\n parent.appendChild(el);\n el.className = elClass;\n el.id = newId;\n return el.id;\n}\n\n\nfunction $e485cb2ed1808217$export$2e2bcd8739ae039(elSelector, eventName, selector, fn) {\n const element = elSelector === 'document' ? document : document.querySelector(elSelector);\n element.addEventListener(eventName, (event)=>{\n const possibleTargets = element.querySelectorAll(selector);\n const { target: target } = event;\n for(let i = 0, l = possibleTargets.length; i < l; i += 1){\n let el = target;\n const p = possibleTargets[i];\n while(el && el !== element){\n if (el === p) fn.call(p, event);\n el = el.parentNode;\n }\n }\n });\n}\n\n\n\n\n\n// Range module placeholder\nlet $cd537e9fa9c12db2$var$Range;\nfunction $cd537e9fa9c12db2$var$getRangeModule(ace) {\n if (ace.Range) return ace.Range;\n const requireFunc = ace.acequire || ace.require;\n if (requireFunc) return requireFunc('ace/range');\n return false;\n}\nfunction $cd537e9fa9c12db2$export$2e2bcd8739ae039(options = {}) {\n // Ensure instance is a constructor with `new`\n if (!(this instanceof $cd537e9fa9c12db2$export$2e2bcd8739ae039)) return new $cd537e9fa9c12db2$export$2e2bcd8739ae039(options);\n // Current instance we pass around to other functions\n const acediff = this;\n const getDefaultAce = ()=>window ? window.ace : undefined;\n acediff.options = (0, $d0b82e0396560011$export$2e2bcd8739ae039)({\n ace: getDefaultAce(),\n mode: null,\n theme: null,\n element: null,\n diffGranularity: (0, $b5c286a254b261e6$export$2e2bcd8739ae039).DIFF_GRANULARITY_BROAD,\n lockScrolling: false,\n showDiffs: true,\n showConnectors: true,\n maxDiffs: 5000,\n left: {\n id: null,\n content: null,\n mode: null,\n theme: null,\n editable: true,\n copyLinkEnabled: true\n },\n right: {\n id: null,\n content: null,\n mode: null,\n theme: null,\n editable: true,\n copyLinkEnabled: true\n },\n classes: {\n gutterID: 'acediff__gutter',\n diff: 'acediff__diffLine',\n connector: 'acediff__connector',\n newCodeConnectorLink: 'acediff__newCodeConnector',\n newCodeConnectorLinkContent: '&#8594;',\n deletedCodeConnectorLink: 'acediff__deletedCodeConnector',\n deletedCodeConnectorLinkContent: '&#8592;',\n copyRightContainer: 'acediff__copy--right',\n copyLeftContainer: 'acediff__copy--left'\n },\n connectorYOffset: 0\n }, options);\n const { ace: ace } = acediff.options;\n if (!ace) {\n const errMessage = 'No ace editor found nor supplied - `options.ace` or `window.ace` is missing';\n console.error(errMessage);\n return new Error(errMessage);\n }\n $cd537e9fa9c12db2$var$Range = $cd537e9fa9c12db2$var$getRangeModule(ace);\n if (!$cd537e9fa9c12db2$var$Range) {\n const errMessage = 'Could not require Range module for Ace. Depends on your bundling strategy, but it usually comes with Ace itself. See https://ace.c9.io/api/range.html, open an issue on GitHub ace-diff/ace-diff';\n console.error(errMessage);\n return new Error(errMessage);\n }\n if (acediff.options.element === null) {\n const errMessage = 'You need to specify an element for Ace-diff - `options.element` is missing';\n console.error(errMessage);\n return new Error(errMessage);\n }\n if (acediff.options.element instanceof HTMLElement) acediff.el = acediff.options.element;\n else acediff.el = document.body.querySelector(acediff.options.element);\n if (!acediff.el) {\n const errMessage = `Can't find the specified element ${acediff.options.element}`;\n console.error(errMessage);\n return new Error(errMessage);\n }\n acediff.options.left.id = (0, $419710df3593df8d$export$2e2bcd8739ae039)(acediff.el, 'acediff__left');\n acediff.options.classes.gutterID = (0, $419710df3593df8d$export$2e2bcd8739ae039)(acediff.el, 'acediff__gutter');\n acediff.options.right.id = (0, $419710df3593df8d$export$2e2bcd8739ae039)(acediff.el, 'acediff__right');\n acediff.el.innerHTML = `<div class=\"acediff__wrap\">${acediff.el.innerHTML}</div>`;\n // instantiate the editors in an internal data structure\n // that will store a little info about the diffs and\n // editor content\n acediff.editors = {\n left: {\n ace: ace.edit(acediff.options.left.id),\n markers: [],\n lineLengths: []\n },\n right: {\n ace: ace.edit(acediff.options.right.id),\n markers: [],\n lineLengths: []\n },\n editorHeight: null\n };\n // set up the editors\n acediff.editors.left.ace.getSession().setMode((0, $3d931e456f0d108c$export$2e2bcd8739ae039)(acediff, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_LEFT));\n acediff.editors.right.ace.getSession().setMode((0, $3d931e456f0d108c$export$2e2bcd8739ae039)(acediff, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_RIGHT));\n acediff.editors.left.ace.setReadOnly(!acediff.options.left.editable);\n acediff.editors.right.ace.setReadOnly(!acediff.options.right.editable);\n acediff.editors.left.ace.setTheme((0, $893f0e07a87dd83c$export$2e2bcd8739ae039)(acediff, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_LEFT));\n acediff.editors.right.ace.setTheme((0, $893f0e07a87dd83c$export$2e2bcd8739ae039)(acediff, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_RIGHT));\n acediff.editors.left.ace.setValue((0, $f81fe5d88190aca6$export$2e2bcd8739ae039)(acediff.options.left.content), -1);\n acediff.editors.right.ace.setValue((0, $f81fe5d88190aca6$export$2e2bcd8739ae039)(acediff.options.right.content), -1);\n // store the visible height of the editors (assumed the same)\n acediff.editors.editorHeight = (0, $7eb2da7d8a00890b$export$2e2bcd8739ae039)(acediff);\n // The lineHeight is set to 0 initially and we need to wait for another tick to get it\n // Thus moving the diff() with it\n setTimeout(()=>{\n // assumption: both editors have same line heights\n acediff.lineHeight = acediff.editors.left.ace.renderer.lineHeight;\n $cd537e9fa9c12db2$var$addEventHandlers(acediff);\n $cd537e9fa9c12db2$var$createCopyContainers(acediff);\n $cd537e9fa9c12db2$var$createGutter(acediff);\n acediff.diff();\n }, 1);\n}\n// our public API\n$cd537e9fa9c12db2$export$2e2bcd8739ae039.prototype = {\n // allows on-the-fly changes to the AceDiff instance settings\n setOptions (options) {\n (0, $d0b82e0396560011$export$2e2bcd8739ae039)(this.options, options);\n this.diff();\n },\n getNumDiffs () {\n return this.diffs.length;\n },\n // exposes the Ace editors in case the dev needs it\n getEditors () {\n return {\n left: this.editors.left.ace,\n right: this.editors.right.ace\n };\n },\n // our main diffing function. I actually don't think this needs to exposed:\n // it's called automatically, but just to be safe, it's included\n diff () {\n const val1 = this.editors.left.ace.getSession().getValue();\n const val2 = this.editors.right.ace.getSession().getValue();\n // Main diff method that calculates the diffs\n const diff = (0, $haT8Y$cleanupSemantic)((0, $haT8Y$makeDiff)(val2, val1));\n this.editors.left.lineLengths = $cd537e9fa9c12db2$var$getLineLengths(this.editors.left);\n this.editors.right.lineLengths = $cd537e9fa9c12db2$var$getLineLengths(this.editors.right);\n // parse the raw diff into something a little more palatable\n const diffs = [];\n const offset = {\n left: 0,\n right: 0\n };\n diff.forEach((chunk)=>{\n const chunkType = chunk[0];\n let text = chunk[1];\n // oddly, occasionally the algorithm returns a diff with no changes made\n if (text.length === 0) return;\n if (chunkType === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).DIFF_EQUAL) {\n offset.left += text.length;\n offset.right += text.length;\n } else if (chunkType === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).DIFF_DELETE) {\n diffs.push($cd537e9fa9c12db2$var$computeDiff(this, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).DIFF_DELETE, offset.left, offset.right, text));\n offset.right += text.length;\n } else if (chunkType === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).DIFF_INSERT) {\n diffs.push($cd537e9fa9c12db2$var$computeDiff(this, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).DIFF_INSERT, offset.left, offset.right, text));\n offset.left += text.length;\n }\n }, this);\n // simplify our computed diffs; this groups together multiple diffs on subsequent lines\n this.diffs = $cd537e9fa9c12db2$var$simplifyDiffs(this, diffs);\n // if we're dealing with too many diffs, fail silently\n if (this.diffs.length > this.options.maxDiffs) return;\n $cd537e9fa9c12db2$var$clearDiffs(this);\n $cd537e9fa9c12db2$var$decorate(this);\n },\n destroy () {\n // destroy the two editors\n const leftValue = this.editors.left.ace.getValue();\n this.editors.left.ace.destroy();\n let oldDiv = this.editors.left.ace.container;\n let newDiv = oldDiv.cloneNode(false);\n newDiv.textContent = leftValue;\n oldDiv.parentNode.replaceChild(newDiv, oldDiv);\n const rightValue = this.editors.right.ace.getValue();\n this.editors.right.ace.destroy();\n oldDiv = this.editors.right.ace.container;\n newDiv = oldDiv.cloneNode(false);\n newDiv.textContent = rightValue;\n oldDiv.parentNode.replaceChild(newDiv, oldDiv);\n const elementById = document.getElementById(this.options.classes.gutterID);\n if (elementById) elementById.innerHTML = '';\n this.removeEventHandlers();\n }\n};\nfunction $cd537e9fa9c12db2$var$addEventHandlers(acediff) {\n acediff.editors.left.ace.getSession().on('changeScrollTop', (0, $a61894d52139a1b7$export$2e2bcd8739ae039)(()=>{\n $cd537e9fa9c12db2$var$updateGap(acediff);\n }, 16));\n acediff.editors.right.ace.getSession().on('changeScrollTop', (0, $a61894d52139a1b7$export$2e2bcd8739ae039)(()=>{\n $cd537e9fa9c12db2$var$updateGap(acediff);\n }, 16));\n const diff = acediff.diff.bind(acediff);\n acediff.editors.left.ace.on('change', diff);\n acediff.editors.right.ace.on('change', diff);\n if (acediff.options.left.copyLinkEnabled) (0, $e485cb2ed1808217$export$2e2bcd8739ae039)(`#${acediff.options.classes.gutterID}`, 'click', `.${acediff.options.classes.newCodeConnectorLink}`, (e)=>{\n $cd537e9fa9c12db2$var$copy(acediff, e, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).LTR);\n });\n if (acediff.options.right.copyLinkEnabled) (0, $e485cb2ed1808217$export$2e2bcd8739ae039)(`#${acediff.options.classes.gutterID}`, 'click', `.${acediff.options.classes.deletedCodeConnectorLink}`, (e)=>{\n $cd537e9fa9c12db2$var$copy(acediff, e, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).RTL);\n });\n const onResize = (0, $20710ff753814db4$export$2e2bcd8739ae039)(()=>{\n acediff.editors.availableHeight = document.getElementById(acediff.options.left.id).offsetHeight;\n // TODO this should re-init gutter\n acediff.diff();\n }, 250);\n window.addEventListener('resize', onResize);\n acediff.removeEventHandlers = ()=>{\n window.removeEventListener('resize', onResize);\n };\n}\nfunction $cd537e9fa9c12db2$var$copy(acediff, e, dir) {\n const diffIndex = parseInt(e.target.getAttribute('data-diff-index'), 10);\n const diff = acediff.diffs[diffIndex];\n let sourceEditor;\n let targetEditor;\n let startLine;\n let endLine;\n let targetStartLine;\n let targetEndLine;\n if (dir === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).LTR) {\n sourceEditor = acediff.editors.left;\n targetEditor = acediff.editors.right;\n startLine = diff.leftStartLine;\n endLine = diff.leftEndLine;\n targetStartLine = diff.rightStartLine;\n targetEndLine = diff.rightEndLine;\n } else {\n sourceEditor = acediff.editors.right;\n targetEditor = acediff.editors.left;\n startLine = diff.rightStartLine;\n endLine = diff.rightEndLine;\n targetStartLine = diff.leftStartLine;\n targetEndLine = diff.leftEndLine;\n }\n let contentToInsert = '';\n for(let i = startLine; i < endLine; i += 1){\n contentToInsert += (0, $fc0df9ae77cc2f56$export$2e2bcd8739ae039)(sourceEditor, i);\n // JMT: If the first line is blank we add an extra newline\n // because when it is inserted the first one is effectively eaten\n // by the replace and merging of the lines\n // However if the targetStartLine is the very top then we don't\n // if (i === startLine && contentToInsert === '' && targetStartLine != 0) {\n // contentToInsert += '\\n'\n // }\n // Only add a trailing newline if we're not on the final line\n if (i < sourceEditor.ace.getSession().getLength() - 1) contentToInsert += '\\n';\n }\n // keep track of the scroll height\n const h = targetEditor.ace.getSession().getScrollTop();\n targetEditor.ace.getSession().replace(new $cd537e9fa9c12db2$var$Range(targetStartLine, 0, targetEndLine, 0), contentToInsert);\n targetEditor.ace.getSession().setScrollTop(parseInt(h, 10));\n acediff.diff();\n}\nfunction $cd537e9fa9c12db2$var$getLineLengths(editor) {\n // getAllLines() returns an array of strings, each string is a line in the editor\n // however the lines do not include the newline character at the end, so we need to add 1\n const lines = editor.ace.getSession().doc.getAllLines();\n const lineLengths = [];\n lines.forEach((line)=>{\n lineLengths.push(line.length + 1) // +1 for the newline char\n ;\n });\n return lineLengths;\n}\n// shows a diff in one of the two editors.\nfunction $cd537e9fa9c12db2$var$showDiff(acediff, editor, startLine, endLine, className) {\n const editorInstance = acediff.editors[editor];\n if (endLine < startLine) // can this occur? Just in case.\n endLine = startLine;\n const classNames = `${className} ${endLine > startLine ? 'lines' : 'targetOnly'}`;\n if (endLine > startLine) endLine -= 1 /* because endLine is usually + 1 */ ;\n // to get Ace to highlight the full row we just set the start and end chars to 0 and 1\n editorInstance.markers.push(editorInstance.ace.session.addMarker(new $cd537e9fa9c12db2$var$Range(startLine, 0, endLine, 1), classNames, 'fullLine'));\n}\n// called onscroll. Updates the gap to ensure the connectors are all lining up\nfunction $cd537e9fa9c12db2$var$updateGap(acediff) {\n $cd537e9fa9c12db2$var$clearDiffs(acediff);\n $cd537e9fa9c12db2$var$decorate(acediff);\n // reposition the copy containers containing all the arrows\n $cd537e9fa9c12db2$var$positionCopyContainers(acediff);\n}\nfunction $cd537e9fa9c12db2$var$clearDiffs(acediff) {\n acediff.editors.left.markers.forEach((marker)=>{\n acediff.editors.left.ace.getSession().removeMarker(marker);\n }, acediff);\n acediff.editors.right.markers.forEach((marker)=>{\n acediff.editors.right.ace.getSession().removeMarker(marker);\n }, acediff);\n}\nfunction $cd537e9fa9c12db2$var$addConnector(acediff, leftStartLine, leftEndLine, rightStartLine, rightEndLine) {\n const leftScrollTop = acediff.editors.left.ace.getSession().getScrollTop();\n const rightScrollTop = acediff.editors.right.ace.getSession().getScrollTop();\n // All connectors, regardless of ltr or rtl\n // have the same point system, even if p1 === p3 or p2 === p4\n // p1 p2\n //\n // p3 p4\n acediff.connectorYOffset = 1;\n const p1_x = -1;\n const p1_y = leftStartLine * acediff.lineHeight - leftScrollTop + 0.5;\n const p2_x = acediff.gutterWidth + 1;\n const p2_y = rightStartLine * acediff.lineHeight - rightScrollTop + 0.5;\n const p3_x = -1;\n const p3_y = leftEndLine * acediff.lineHeight - leftScrollTop + acediff.connectorYOffset + 0.5;\n const p4_x = acediff.gutterWidth + 1;\n const p4_y = rightEndLine * acediff.lineHeight - rightScrollTop + acediff.connectorYOffset + 0.5;\n const curve1 = (0, $238bad4938ddde7c$export$2e2bcd8739ae039)(p1_x, p1_y, p2_x, p2_y);\n const curve2 = (0, $238bad4938ddde7c$export$2e2bcd8739ae039)(p4_x, p4_y, p3_x, p3_y);\n const verticalLine1 = `L${p2_x},${p2_y} ${p4_x},${p4_y}`;\n const verticalLine2 = `L${p3_x},${p3_y} ${p1_x},${p1_y}`;\n const d = `${curve1} ${verticalLine1} ${curve2} ${verticalLine2}`;\n const el = document.createElementNS((0, $b5c286a254b261e6$export$2e2bcd8739ae039).SVG_NS, 'path');\n el.setAttribute('d', d);\n el.setAttribute('class', acediff.options.classes.connector);\n acediff.gutterSVG.appendChild(el);\n}\nfunction $cd537e9fa9c12db2$var$addCopyArrows(acediff, info, diffIndex) {\n if (info.leftEndLine > info.leftStartLine && acediff.options.left.copyLinkEnabled) {\n const arrow = (0, $c0c16fed0f3352bb$export$2e2bcd8739ae039)({\n className: acediff.options.classes.newCodeConnectorLink,\n topOffset: info.leftStartLine * acediff.lineHeight,\n tooltip: 'Copy to right',\n diffIndex: diffIndex,\n arrowContent: acediff.options.classes.newCodeConnectorLinkContent\n });\n acediff.copyRightContainer.appendChild(arrow);\n }\n if (info.rightEndLine > info.rightStartLine && acediff.options.right.copyLinkEnabled) {\n const arrow = (0, $c0c16fed0f3352bb$export$2e2bcd8739ae039)({\n className: acediff.options.classes.deletedCodeConnectorLink,\n topOffset: info.rightStartLine * acediff.lineHeight,\n tooltip: 'Copy to left',\n diffIndex: diffIndex,\n arrowContent: acediff.options.classes.deletedCodeConnectorLinkContent\n });\n acediff.copyLeftContainer.appendChild(arrow);\n }\n}\nfunction $cd537e9fa9c12db2$var$positionCopyContainers(acediff) {\n const leftTopOffset = acediff.editors.left.ace.getSession().getScrollTop();\n const rightTopOffset = acediff.editors.right.ace.getSession().getScrollTop();\n acediff.copyRightContainer.style.cssText = `top: ${-leftTopOffset}px`;\n acediff.copyLeftContainer.style.cssText = `top: ${-rightTopOffset}px`;\n}\n/**\n // eslint-disable-next-line max-len\n * This method takes the raw diffing info from the Google lib and returns a nice clean object of the following\n * form:\n * {\n * leftStartLine:\n * leftEndLine:\n * rightStartLine:\n * rightEndLine:\n * }\n *\n * Ultimately, that's all the info we need to highlight the appropriate lines in the left + right editor, add the\n * SVG connectors, and include the appropriate <<, >> arrows.\n *\n * Note: leftEndLine and rightEndLine are always the start of the NEXT line, so for a single line diff, there will\n * be 1 separating the startLine and endLine values. So if leftStartLine === leftEndLine or rightStartLine ===\n * rightEndLine, it means that new content from the other editor is being inserted and a single 1px line will be\n * drawn.\n */ function $cd537e9fa9c12db2$var$computeDiff(acediff, diffType, offsetLeft, offsetRight, diffText) {\n let lineInfo = {};\n if (diffType === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).DIFF_INSERT) {\n // pretty confident this returns the right stuff for the left editor: start & end line & char\n let info = $cd537e9fa9c12db2$var$getSingleDiffInfo(acediff.editors.left, offsetLeft, diffText);\n // this is the ACTUAL undoctored current line in the other editor. It's always right. Doesn't mean it's\n // going to be used as the start line for the diff though.\n let currentLineOtherEditor = $cd537e9fa9c12db2$var$getLineForCharPosition(acediff.editors.right, offsetRight);\n let numCharsOnLineOtherEditor = $cd537e9fa9c12db2$var$getCharsOnLine(acediff.editors.right, currentLineOtherEditor);\n const numCharsOnLeftEditorStartLine = $cd537e9fa9c12db2$var$getCharsOnLine(acediff.editors.left, info.startLine);\n let rightStartLine = currentLineOtherEditor;\n let sameLineInsert = info.startLine === info.endLine;\n // whether or not this diff is a plain INSERT into the other editor, or overwrites a line take a little work to\n // figure out. This feels like the hardest part of the entire script.\n let numRows = 0;\n if (// dense, but this accommodates two scenarios:\n // 1. where a completely fresh new line is being inserted in left editor, we want the line on right to stay a 1px line\n // 2. where a new character is inserted at the start of a newline on the left but the line contains other stuff,\n // we DO want to make it a full line\n (info.startChar > 0 || sameLineInsert && diffText.length < numCharsOnLeftEditorStartLine) && // if the right editor line was empty, it's ALWAYS a single line insert [not an OR above?]\n numCharsOnLineOtherEditor > 0 && // if the text being inserted starts mid-line\n info.startChar < numCharsOnLeftEditorStartLine) numRows++;\n lineInfo = {\n leftStartLine: info.startLine,\n leftEndLine: info.endLine + 1,\n rightStartLine: rightStartLine,\n rightEndLine: rightStartLine + numRows\n };\n } else {\n let info = $cd537e9fa9c12db2$var$getSingleDiffInfo(acediff.editors.right, offsetRight, diffText);\n let currentLineOtherEditor = $cd537e9fa9c12db2$var$getLineForCharPosition(acediff.editors.left, offsetLeft);\n let numCharsOnLineOtherEditor = $cd537e9fa9c12db2$var$getCharsOnLine(acediff.editors.left, currentLineOtherEditor);\n const numCharsOnRightEditorStartLine = $cd537e9fa9c12db2$var$getCharsOnLine(acediff.editors.right, info.startLine);\n let leftStartLine = currentLineOtherEditor;\n let sameLineInsert = info.startLine === info.endLine;\n let numRows = 0;\n if (// dense, but this accommodates two scenarios:\n // 1. where a completely fresh new line is being inserted in left editor, we want the line on right to stay a 1px line\n // 2. where a new character is inserted at the start of a newline on the left but the line contains other stuff,\n // we DO want to make it a full line\n (info.startChar > 0 || sameLineInsert && diffText.length < numCharsOnRightEditorStartLine) && // if the right editor line was empty, it's ALWAYS a single line insert [not an OR above?]\n numCharsOnLineOtherEditor > 0 && // if the text being inserted starts mid-line\n info.startChar < numCharsOnRightEditorStartLine) numRows++;\n lineInfo = {\n leftStartLine: leftStartLine,\n leftEndLine: leftStartLine + numRows,\n rightStartLine: info.startLine,\n rightEndLine: info.endLine + 1\n };\n }\n return lineInfo;\n}\n// helper to return the startline, endline, startChar and endChar for a diff in a particular editor. Pretty\n// fussy function\nfunction $cd537e9fa9c12db2$var$getSingleDiffInfo(editor, offset, diffString) {\n const info = {\n startLine: 0,\n startChar: 0,\n endLine: 0,\n endChar: 0\n };\n const endCharNum = offset + diffString.length;\n let runningTotal = 0;\n let startLineSet = false;\n let endLineSet = false;\n editor.lineLengths.forEach((lineLength, lineIndex)=>{\n runningTotal += lineLength;\n if (!startLineSet && offset < runningTotal) {\n info.startLine = lineIndex;\n info.startChar = offset - runningTotal + lineLength;\n startLineSet = true;\n }\n if (!endLineSet && endCharNum <= runningTotal) {\n info.endLine = lineIndex;\n info.endChar = endCharNum - runningTotal + lineLength;\n endLineSet = true;\n }\n });\n // if the start char is the final char on the line, it's a newline & we ignore it\n if (info.startChar > 0 && $cd537e9fa9c12db2$var$getCharsOnLine(editor, info.startLine) === info.startChar) {\n info.startLine++;\n info.startChar = 0;\n }\n // if the end char is the first char on the line, we don't want to highlight that extra line\n if (info.endChar === 0) info.endLine--;\n const endsWithNewline = /\\n$/.test(diffString);\n if (info.startChar > 0 && endsWithNewline) info.endLine++;\n return info;\n}\n// note that this and everything else in this script uses 0-indexed row numbers\nfunction $cd537e9fa9c12db2$var$getCharsOnLine(editor, line) {\n return (0, $fc0df9ae77cc2f56$export$2e2bcd8739ae039)(editor, line).length;\n}\nfunction $cd537e9fa9c12db2$var$getLineForCharPosition(editor, offsetChars) {\n const lines = editor.ace.getSession().doc.getAllLines();\n let foundLine = 0;\n let runningTotal = 0;\n for(let i = 0; i < lines.length; i += 1){\n runningTotal += lines[i].length + 1 // +1 needed for newline char\n ;\n if (offsetChars <= runningTotal) {\n foundLine = i;\n if (offsetChars === runningTotal && i < lines.length - 1) foundLine += 1;\n break;\n }\n }\n // If we're past the end of the buffer then we need to bump the line total\n // because we're basically inserting after the last line\n if (runningTotal >= editor.ace.getSession().getValue().length) foundLine += 1;\n return foundLine;\n}\nfunction $cd537e9fa9c12db2$var$createGutter(acediff) {\n acediff.gutterHeight = document.getElementById(acediff.options.classes.gutterID).clientHeight;\n acediff.gutterWidth = document.getElementById(acediff.options.classes.gutterID).clientWidth;\n const leftHeight = $cd537e9fa9c12db2$var$getTotalHeight(acediff, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_LEFT);\n const rightHeight = $cd537e9fa9c12db2$var$getTotalHeight(acediff, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_RIGHT);\n const height = Math.max(leftHeight, rightHeight, acediff.gutterHeight);\n acediff.gutterSVG = document.createElementNS((0, $b5c286a254b261e6$export$2e2bcd8739ae039).SVG_NS, 'svg');\n acediff.gutterSVG.setAttribute('width', acediff.gutterWidth);\n acediff.gutterSVG.setAttribute('height', height);\n document.getElementById(acediff.options.classes.gutterID).appendChild(acediff.gutterSVG);\n}\n// acediff.editors.left.ace.getSession().getLength() * acediff.lineHeight\nfunction $cd537e9fa9c12db2$var$getTotalHeight(acediff, editor) {\n const ed = editor === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_LEFT ? acediff.editors.left : acediff.editors.right;\n return ed.ace.getSession().getLength() * acediff.lineHeight;\n}\n// creates two contains for positioning the copy left + copy right arrows\nfunction $cd537e9fa9c12db2$var$createCopyContainers(acediff) {\n acediff.copyRightContainer = document.createElement('div');\n acediff.copyRightContainer.setAttribute('class', acediff.options.classes.copyRightContainer);\n acediff.copyLeftContainer = document.createElement('div');\n acediff.copyLeftContainer.setAttribute('class', acediff.options.classes.copyLeftContainer);\n document.getElementById(acediff.options.classes.gutterID).appendChild(acediff.copyRightContainer);\n document.getElementById(acediff.options.classes.gutterID).appendChild(acediff.copyLeftContainer);\n}\nfunction $cd537e9fa9c12db2$var$clearGutter(acediff) {\n // gutter.innerHTML = '';\n const gutterEl = document.getElementById(acediff.options.classes.gutterID);\n gutterEl.removeChild(acediff.gutterSVG);\n $cd537e9fa9c12db2$var$createGutter(acediff);\n}\nfunction $cd537e9fa9c12db2$var$clearArrows(acediff) {\n acediff.copyLeftContainer.innerHTML = '';\n acediff.copyRightContainer.innerHTML = '';\n}\n/*\n * This combines multiple rows where, say, line 1 => line 1, line 2 => line 2, line 3-4 => line 3. That could be\n * reduced to a single connector line 1=4 => line 1-3\n */ function $cd537e9fa9c12db2$var$simplifyDiffs(acediff, diffs) {\n const groupedDiffs = [];\n function compare(val) {\n return acediff.options.diffGranularity === (0, $b5c286a254b261e6$export$2e2bcd8739ae039).DIFF_GRANULARITY_SPECIFIC ? val < 1 : val <= 1;\n }\n diffs.forEach((diff, index)=>{\n if (index === 0) {\n groupedDiffs.push(diff);\n return;\n }\n // loop through all grouped diffs. If this new diff lies between an existing one, we'll just add to it, rather\n // than create a new one\n let isGrouped = false;\n for(let i = 0; i < groupedDiffs.length; i += 1)if (compare(Math.abs(diff.leftStartLine - groupedDiffs[i].leftEndLine)) && compare(Math.abs(diff.rightStartLine - groupedDiffs[i].rightEndLine))) {\n // update the existing grouped diff to expand its horizons to include this new diff start + end lines\n groupedDiffs[i].leftStartLine = Math.min(diff.leftStartLine, groupedDiffs[i].leftStartLine);\n groupedDiffs[i].rightStartLine = Math.min(diff.rightStartLine, groupedDiffs[i].rightStartLine);\n groupedDiffs[i].leftEndLine = Math.max(diff.leftEndLine, groupedDiffs[i].leftEndLine);\n groupedDiffs[i].rightEndLine = Math.max(diff.rightEndLine, groupedDiffs[i].rightEndLine);\n isGrouped = true;\n break;\n }\n if (!isGrouped) groupedDiffs.push(diff);\n });\n // clear out any single line diffs (i.e. single line on both editors)\n const fullDiffs = [];\n groupedDiffs.forEach((diff)=>{\n if (diff.leftStartLine === diff.leftEndLine && diff.rightStartLine === diff.rightEndLine) return;\n fullDiffs.push(diff);\n });\n return fullDiffs;\n}\nfunction $cd537e9fa9c12db2$var$decorate(acediff) {\n $cd537e9fa9c12db2$var$clearGutter(acediff);\n $cd537e9fa9c12db2$var$clearArrows(acediff);\n acediff.diffs.forEach((info, diffIndex)=>{\n if (acediff.options.showDiffs) {\n $cd537e9fa9c12db2$var$showDiff(acediff, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_LEFT, info.leftStartLine, info.leftEndLine, acediff.options.classes.diff);\n $cd537e9fa9c12db2$var$showDiff(acediff, (0, $b5c286a254b261e6$export$2e2bcd8739ae039).EDITOR_RIGHT, info.rightStartLine, info.rightEndLine, acediff.options.classes.diff);\n if (acediff.options.showConnectors) $cd537e9fa9c12db2$var$addConnector(acediff, info.leftStartLine, info.leftEndLine, info.rightStartLine, info.rightEndLine);\n $cd537e9fa9c12db2$var$addCopyArrows(acediff, info, diffIndex);\n }\n }, acediff);\n}\n\n\nexport {$cd537e9fa9c12db2$export$2e2bcd8739ae039 as default};\n//# sourceMappingURL=module.js.map\n","<!--\n# Copyright 2022 Ball Aerospace & Technologies Corp.\n# All Rights Reserved.\n#\n# This program is free software; you can modify and/or redistribute it\n# under the terms of the GNU Affero General Public License\n# as published by the Free Software Foundation; version 3 with\n# attribution addendums as found in the LICENSE.txt\n#\n# This program is distributed in the hope that it will be useful,\n# but WITHOUT ANY WARRANTY; without even the implied warranty of\n# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n# GNU Affero General Public License for more details.\n\n# Modified by OpenC3, Inc.\n# All changes Copyright 2025, OpenC3, Inc.\n# All Rights Reserved\n#\n# This file may also be used under the terms of a commercial license\n# if purchased from OpenC3, Inc.\n-->\n\n<template>\n <v-dialog v-model=\"show\" persistent width=\"80vw\">\n <v-card>\n <v-card-text>\n <v-card-title>{{ pluginName }} </v-card-title>\n <v-row v-if=\"existingPluginTxt !== null\" class=\"notice d-flex flex-row\">\n <v-icon size=\"x-large\" start color=\"yellow\"> mdi-alert-box </v-icon>\n <div style=\"flex: 1\">\n The existing plugin.txt is different from the {{ pluginName }}'s\n plugin.txt. Navigate the diffs making whatever edits you want before\n installing. You may want to update {{ pluginName }}'s plugin.txt\n going forward.\n </div>\n </v-row>\n <v-row class=\"pb-3 pr-3\">\n <v-tabs v-model=\"tab\" class=\"ml-3\">\n <v-tab :key=\"0\"> Variables </v-tab>\n <v-tab :key=\"1\"> plugin.txt </v-tab>\n </v-tabs>\n </v-row>\n <form @submit.prevent=\"onSubmit\">\n <v-window v-model=\"tab\">\n <v-window-item :key=\"0\" eager=\"true\" class=\"tab\">\n <div class=\"pa-3\">\n <v-row class=\"mt-3\">\n <div v-for=\"(value, name) in localVariables\" :key=\"name\">\n <v-col style=\"width: 220px\">\n <v-text-field\n v-model=\"localVariables[name]\"\n clearable\n type=\"text\"\n :label=\"name\"\n />\n </v-col>\n </div>\n </v-row>\n </div>\n </v-window-item>\n <v-window-item\n v-if=\"existingPluginTxt === null\"\n :key=\"1 + '-new'\"\n eager=\"true\"\n class=\"tab\"\n >\n <v-row class=\"pa-3\">\n <v-col> This can be edited before installation. </v-col>\n </v-row>\n <pre\n ref=\"editor\"\n class=\"editor\"\n @contextmenu.prevent=\"showContextMenu\"\n ></pre>\n <v-menu v-model=\"contextMenu\" :target=\"[menuX, menuY]\">\n <v-list>\n <v-list-item link>\n <v-list-item-title @click=\"openDocumentation\">\n {{ docsKeyword }} documentation\n </v-list-item-title>\n </v-list-item>\n <v-divider />\n <v-list-item\n title=\"Toggle Vim mode\"\n prepend-icon=\"extras:vim\"\n @click=\"toggleVimMode\"\n />\n </v-list>\n </v-menu>\n </v-window-item>\n <v-window-item\n v-else\n :key=\"1 + '-existing'\"\n eager=\"true\"\n class=\"tab\"\n >\n <v-row class=\"pa-3\">\n <v-col>\n Existing plugin.txt. This can be edited before installation.\n </v-col>\n <v-col class=\"ml-6\">\n Uneditable plugin.txt from the new plugin.\n </v-col>\n </v-row>\n <pre ref=\"editor\" class=\"editor\"></pre>\n </v-window-item>\n </v-window>\n\n <v-card-actions class=\"px-2 mt-2\">\n <div v-if=\"existingPluginTxt !== null\">\n <v-btn variant=\"text\" @click=\"nextDiff\"> Next Diff </v-btn>\n <v-btn variant=\"text\" @click=\"previousDiff\">\n Previous Diff\n </v-btn>\n </div>\n <v-spacer />\n <v-btn\n variant=\"outlined\"\n data-test=\"edit-cancel\"\n @click.prevent=\"close\"\n >\n Cancel\n </v-btn>\n <v-btn variant=\"flat\" data-test=\"edit-submit\" @click=\"submit\">\n Install\n </v-btn>\n </v-card-actions>\n </form>\n </v-card-text>\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport * as ace from 'ace-builds'\nimport 'ace-builds/src-min-noconflict/mode-ruby'\nimport 'ace-builds/src-min-noconflict/theme-twilight'\nimport 'ace-builds/src-min-noconflict/ext-language_tools'\nimport 'ace-builds/src-min-noconflict/ext-searchbox'\nimport AceDiff from '@openc3/ace-diff'\nimport '@openc3/ace-diff/dist/ace-diff-dark.min.css'\nimport { toRaw } from 'vue'\nimport { AceEditorUtils } from '../../components/ace'\n\nexport default {\n props: {\n pluginName: {\n type: String,\n required: true,\n },\n variables: {\n type: Object,\n required: true,\n },\n pluginTxt: {\n type: String,\n required: true,\n },\n existingPluginTxt: {\n type: String,\n required: false,\n default: null,\n },\n storeId: {\n type: Number,\n required: false,\n default: null,\n },\n modelValue: Boolean, // modelValue is the default prop when using v-model\n },\n emits: ['callback', 'update:modelValue'],\n data() {\n return {\n tab: 0,\n localVariables: [],\n localPluginTxt: '',\n localExistingPluginTxt: null,\n editor: null,\n differ: null,\n contextMenu: false,\n menuX: 0,\n menuY: 0,\n }\n },\n computed: {\n show: {\n get() {\n return this.modelValue\n },\n set(value) {\n this.$emit('update:modelValue', value)\n },\n },\n },\n watch: {\n value: {\n immediate: true,\n handler: function () {\n this.localVariables = JSON.parse(JSON.stringify(this.variables)) // deep copy\n this.localPluginTxt = this.pluginTxt.slice()\n if (this.existingPluginTxt !== null) {\n this.localExistingPluginTxt = this.existingPluginTxt.slice()\n }\n },\n },\n },\n mounted() {\n const pluginMode = this.buildPluginMode()\n if (this.existingPluginTxt === null) {\n this.editor = ace.edit(this.$refs.editor)\n this.editor.setTheme('ace/theme/twilight')\n this.editor.session.setMode(new pluginMode())\n this.editor.session.setTabSize(2)\n this.editor.session.setUseWrapMode(true)\n this.editor.$blockScrolling = Infinity\n this.editor.setHighlightActiveLine(false)\n this.editor.setValue(this.localPluginTxt)\n this.editor.clearSelection()\n AceEditorUtils.applyVimModeIfEnabled(this.editor)\n this.editor.focus()\n } else {\n this.tab = 1 // Show the diff right off the bat\n this.differ = new AceDiff({\n element: this.$refs.editor,\n mode: new pluginMode(),\n theme: 'ace/theme/twilight',\n left: {\n content: this.localExistingPluginTxt,\n copyLinkEnabled: false,\n },\n right: {\n content: this.localPluginTxt,\n editable: false,\n },\n })\n // Match our existing editors\n this.differ.getEditors().left.setFontSize(16)\n this.differ.getEditors().right.setFontSize(16)\n\n // Apply vim mode if enabled to both editor instances\n AceEditorUtils.applyVimModeIfEnabled(this.differ.getEditors().left)\n AceEditorUtils.applyVimModeIfEnabled(this.differ.getEditors().right)\n\n this.curDiff = -1 // so the first will be 0\n }\n },\n beforeUnmount() {\n if (this.editor) {\n this.editor.destroy()\n }\n if (this.differ) {\n this.differ.destroy()\n }\n },\n methods: {\n previousDiff() {\n this.curDiff--\n if (this.curDiff < 0) {\n this.curDiff = this.differ.diffs.length - 1\n }\n this.scrollToCurDiff()\n },\n nextDiff() {\n this.curDiff++\n if (this.curDiff >= this.differ.diffs.length) {\n this.curDiff = 0\n }\n this.scrollToCurDiff()\n },\n scrollToCurDiff() {\n if (this.differ.diffs.length === 0) return\n let lrow = this.differ.diffs[this.curDiff].leftStartLine\n let rrow = this.differ.diffs[this.curDiff].rightStartLine\n // Give it a little breathing room\n if (lrow > 5) {\n lrow -= 5\n }\n if (rrow > 5) {\n rrow -= 5\n }\n this.differ.getEditors().left.scrollToLine(lrow)\n this.differ.getEditors().right.scrollToLine(rrow)\n },\n buildPluginMode() {\n let oop = ace.require('ace/lib/oop')\n let RubyHighlightRules = ace.require(\n 'ace/mode/ruby_highlight_rules',\n ).RubyHighlightRules\n\n // TODO: Grab from code\n let keywords = ['VARIABLE']\n let regex = new RegExp(`(\\\\b${keywords.join('\\\\b|\\\\b')}\\\\b)`)\n let PluginHighlightRules = function () {\n RubyHighlightRules.call(this)\n // add openc3 rules to the ruby rules\n for (let rule in this.$rules) {\n this.$rules[rule].unshift({\n regex: regex,\n token: 'support.function',\n })\n }\n }\n oop.inherits(PluginHighlightRules, RubyHighlightRules)\n\n let MatchingBraceOutdent = ace.require(\n 'ace/mode/matching_brace_outdent',\n ).MatchingBraceOutdent\n let CstyleBehaviour = ace.require(\n 'ace/mode/behaviour/cstyle',\n ).CstyleBehaviour\n let FoldMode = ace.require('ace/mode/folding/ruby').FoldMode\n let Mode = function () {\n this.HighlightRules = PluginHighlightRules\n this.$outdent = new MatchingBraceOutdent()\n this.$behaviour = new CstyleBehaviour()\n this.foldingRules = new FoldMode()\n this.indentKeywords = this.foldingRules.indentKeywords\n }\n let RubyMode = ace.require('ace/mode/ruby').Mode\n oop.inherits(Mode, RubyMode)\n ;(function () {\n this.$id = 'ace/mode/openc3'\n }).call(Mode.prototype)\n return Mode\n },\n submit: function () {\n if (this.existingPluginTxt === null) {\n this.emitSubmit(this.editor.getValue().split('\\n'))\n } else {\n // Existing plugin.txt with all diffs resolved\n if (this.differ.diffs.length === 0) {\n this.emitSubmit(this.differ.getEditors().left.getValue().split('\\n'))\n } else {\n // Existing plugin.txt with unresolved diffs\n this.$dialog\n .confirm(\n `Diffs still detected! Install using 'Existing plugin.txt' (left) and ignore additional changes in the new plugin.txt (right)?`,\n {\n okText: 'Install',\n cancelText: 'Cancel',\n },\n )\n .then((dialog) => {\n this.emitSubmit(\n this.differ.getEditors().left.getValue().split('\\n'),\n )\n })\n .catch((error) => {\n // Cancelled, do nothing\n })\n }\n }\n },\n emitSubmit(lines) {\n let pluginHash = {\n name: this.pluginName,\n variables: toRaw(this.localVariables),\n plugin_txt_lines: lines,\n store_id: this.storeId,\n }\n this.$emit('callback', pluginHash)\n },\n close: function () {\n this.show = !this.show\n },\n showContextMenu: function (event) {\n this.menuX = event.pageX\n this.menuY = event.pageY\n\n let position = this.editor.getCursorPosition()\n let token = this.editor.session.getTokenAt(position.row, position.column)\n if (token) {\n let value = token.value.trim()\n if (value.includes(' ')) {\n this.docsKeyword = value.split(' ')[0]\n } else {\n this.docsKeyword = value\n }\n this.contextMenu = true\n }\n },\n toggleVimMode: function () {\n if (this.editor) {\n AceEditorUtils.toggleVimMode(this.editor)\n // don't worry about this.differ since AceDiff replaces the editor anyway, and thus there's no context menu\n }\n },\n },\n}\n</script>\n\n<style scoped>\n.editor {\n height: 50vh;\n position: relative;\n font-size: 16px;\n}\n\n.notice {\n font-size: 20px;\n margin: 10px;\n}\n.tab {\n background-color: var(--color-background-surface-default);\n}\n.v-textarea :deep(textarea) {\n padding: 5px;\n}\n</style>\n"],"names":["_sfc_main","value","gemRegEx","f","axios","response","gem","link","_hoisted_1","_hoisted_2","_createBlock","_component_v_dialog","$options","$event","_createVNode","_component_v_card","_component_v_toolbar","_component_v_spacer","_cache","_createElementVNode","_component_v_card_text","_component_v_row","_component_v_col","_component_v_btn","$data","_component_v_icon","_openBlock","_createElementBlock","_hoisted_3","_hoisted_4","_Fragment","_renderList","data","index","_component_v_list_item","_component_v_list_item_title","_createTextVNode","_toDisplayString","_component_v_progress_circular","_component_v_divider","openPluginMode","ace.edit","AceEditorUtils","blob","oop","ace.require","JsonHighlightRules","MatchingBraceOutdent","CstyleBehaviour","FoldMode","Mode","RubyMode","event","position","token","$props","args","_ctx","_component_v_file_input","_component_v_menu","_component_v_list","target","Api","file","itemIndex","_component_v_list_item_subtitle","_component_v_checkbox","_component_v_card_actions","TabsList","TopBar","tab","_component_top_bar","_component_v_tabs","_component_v_tab","_component_router_view","cloneDiff","diff2","type","patch","getCommonOverlap","textA","textB","text1","text2","text1Length","text2Length","textLength","best","length","found","pattern","getCommonPrefix","pointerMin","pointerMax","pointerMid","pointerStart","getCommonSuffix","pointerEnd","isHighSurrogate","char","charCode","isLowSurrogate","bisect","deadline","maxD","vOffset","vLength","v1","v2","x","delta","front","k1start","k1end","k2start","k2end","d","k1","k1Offset","x1","y1","k2Offset","x2","bisectSplit","k2","y2","DIFF_DELETE","DIFF_INSERT","y","text1a","text2a","text1b","text2b","diffs","doDiff","diffsb","findHalfMatch","timeout","longText","shortText","halfMatch1","halfMatchI","halfMatch2","halfMatch","text1A","text1B","text2A","text2B","midCommon","i","seed","j","bestCommon","bestLongTextA","bestLongTextB","bestShortTextA","bestShortTextB","prefixLength","suffixLength","charsToLines","lineArray","chars","text","linesToChars","lineHash","diffLinesToMunge","lineStart","lineEnd","lineArrayLength","line","maxLines","chars1","chars2","doLineModeDiff","opts","a","linearray","cleanupSemantic","DIFF_EQUAL","pointer","countDelete","countInsert","textDelete","textInsert","aa","computeDiff","longtext","shorttext","diffsA","diffsB","__defProp$2","__getOwnPropSymbols$2","__hasOwnProp$2","__propIsEnum$2","__defNormalProp$2","obj","key","__spreadValues$2","b","prop","diff","createInternalOpts","adjustDiffForSurrogatePairs","options","commonlength","commonprefix","commonsuffix","cleanupMerge","createDeadLine","t","combineChar","dir","splitChar","hasSharedChar","deisolateChar","inv","insertIdx","deleteIdx","op","rest","char2","insertText","insertChar","deleteText","diffType","diffText","firstChar","lastChar","rawDiffs","hasChanges","equalities","equalitiesLength","lastEquality","lengthInsertions1","lengthDeletions1","lengthInsertions2","lengthDeletions2","cleanupSemanticLossless","deletion","insertion","overlapLength1","overlapLength2","nonAlphaNumericRegex","whitespaceRegex","linebreakRegex","blanklineEndRegex","blanklineStartRegex","diffCleanupSemanticScore","one","two","char1","nonAlphaNumeric1","nonAlphaNumeric2","whitespace1","whitespace2","lineBreak1","lineBreak2","blankLine1","blankLine2","equality1","edit","equality2","commonOffset","commonString","bestEquality1","bestEdit","bestEquality2","bestScore","score","$d0b82e0396560011$var$isObject","item","$d0b82e0396560011$export$2e2bcd8739ae039","source","$a61894d52139a1b7$export$2e2bcd8739ae039","callback","wait","immediate","initialCall","callNow","next","$20710ff753814db4$export$2e2bcd8739ae039","context","$f81fe5d88190aca6$export$2e2bcd8739ae039","$238bad4938ddde7c$export$2e2bcd8739ae039","startX","startY","endX","endY","w","halfWidth","$b5c286a254b261e6$export$2e2bcd8739ae039","$3d931e456f0d108c$export$2e2bcd8739ae039","acediff","editor","mode","$893f0e07a87dd83c$export$2e2bcd8739ae039","theme","$fc0df9ae77cc2f56$export$2e2bcd8739ae039","$7eb2da7d8a00890b$export$2e2bcd8739ae039","$c0c16fed0f3352bb$export$2e2bcd8739ae039","info","el","props","$419710df3593df8d$export$2e2bcd8739ae039","parent","elClass","guid","newId","currentEl","$e485cb2ed1808217$export$2e2bcd8739ae039","elSelector","eventName","selector","fn","element","possibleTargets","l","p","$cd537e9fa9c12db2$var$Range","$cd537e9fa9c12db2$var$getRangeModule","ace","requireFunc","$cd537e9fa9c12db2$export$2e2bcd8739ae039","getDefaultAce","errMessage","$cd537e9fa9c12db2$var$addEventHandlers","$cd537e9fa9c12db2$var$createCopyContainers","$cd537e9fa9c12db2$var$createGutter","val1","val2","$haT8Y$cleanupSemantic","$haT8Y$makeDiff","$cd537e9fa9c12db2$var$getLineLengths","offset","chunk","chunkType","$cd537e9fa9c12db2$var$computeDiff","$cd537e9fa9c12db2$var$simplifyDiffs","$cd537e9fa9c12db2$var$clearDiffs","$cd537e9fa9c12db2$var$decorate","leftValue","oldDiv","newDiv","rightValue","elementById","$cd537e9fa9c12db2$var$updateGap","e","$cd537e9fa9c12db2$var$copy","onResize","diffIndex","sourceEditor","targetEditor","startLine","endLine","targetStartLine","targetEndLine","contentToInsert","h","lines","lineLengths","$cd537e9fa9c12db2$var$showDiff","className","editorInstance","classNames","$cd537e9fa9c12db2$var$positionCopyContainers","marker","$cd537e9fa9c12db2$var$addConnector","leftStartLine","leftEndLine","rightStartLine","rightEndLine","leftScrollTop","rightScrollTop","p1_x","p1_y","p2_x","p2_y","p3_x","p3_y","p4_x","p4_y","curve1","curve2","verticalLine1","verticalLine2","$cd537e9fa9c12db2$var$addCopyArrows","arrow","leftTopOffset","rightTopOffset","offsetLeft","offsetRight","lineInfo","$cd537e9fa9c12db2$var$getSingleDiffInfo","currentLineOtherEditor","$cd537e9fa9c12db2$var$getLineForCharPosition","numCharsOnLineOtherEditor","$cd537e9fa9c12db2$var$getCharsOnLine","numCharsOnLeftEditorStartLine","sameLineInsert","numRows","numCharsOnRightEditorStartLine","diffString","endCharNum","runningTotal","startLineSet","endLineSet","lineLength","lineIndex","endsWithNewline","offsetChars","foundLine","leftHeight","$cd537e9fa9c12db2$var$getTotalHeight","rightHeight","height","$cd537e9fa9c12db2$var$clearGutter","$cd537e9fa9c12db2$var$clearArrows","groupedDiffs","compare","val","isGrouped","fullDiffs","pluginMode","AceDiff","lrow","rrow","RubyHighlightRules","keywords","regex","PluginHighlightRules","rule","dialog","error","pluginHash","toRaw","_component_v_card_title","_component_v_window","_component_v_window_item","name","_component_v_text_field"],"mappings":"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","x_google_ignoreList":[5,6]}