@openpalm/ui 0.12.18 → 0.12.23

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 (382) hide show
  1. package/build/.openpalm-ui-version +1 -1
  2. package/build/client/_app/immutable/assets/4.DQdAwaDZ.css +1 -0
  3. package/build/client/_app/immutable/assets/4.DQdAwaDZ.css.br +0 -0
  4. package/build/client/_app/immutable/assets/4.DQdAwaDZ.css.gz +0 -0
  5. package/build/client/_app/immutable/chunks/B88bDQ93.js +1 -0
  6. package/build/client/_app/immutable/chunks/B88bDQ93.js.br +2 -0
  7. package/build/client/_app/immutable/chunks/B88bDQ93.js.gz +0 -0
  8. package/build/client/_app/immutable/chunks/{B8C5qi9U.js → BjCyXDZy.js} +1 -1
  9. package/build/client/_app/immutable/chunks/BjCyXDZy.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/BjCyXDZy.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/CAAiIhwC.js +3 -0
  12. package/build/client/_app/immutable/chunks/CAAiIhwC.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/CAAiIhwC.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/{DYXGFYr6.js → CP1N4Jy5.js} +1 -1
  15. package/build/client/_app/immutable/chunks/CP1N4Jy5.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/CP1N4Jy5.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/{Dcw6L0GF.js → CgDyA2Qw.js} +2 -2
  18. package/build/client/_app/immutable/chunks/CgDyA2Qw.js.br +0 -0
  19. package/build/client/_app/immutable/chunks/CgDyA2Qw.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/{CLgRRUN_.js → DpHEXvQk.js} +1 -1
  21. package/build/client/_app/immutable/chunks/DpHEXvQk.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/DpHEXvQk.js.gz +0 -0
  23. package/build/client/_app/immutable/chunks/Dr8nRIOR.js +1 -0
  24. package/build/client/_app/immutable/chunks/Dr8nRIOR.js.br +0 -0
  25. package/build/client/_app/immutable/chunks/Dr8nRIOR.js.gz +0 -0
  26. package/build/client/_app/immutable/entry/{app.CVxCoIFs.js → app.BcL08IcT.js} +2 -2
  27. package/build/client/_app/immutable/entry/app.BcL08IcT.js.br +0 -0
  28. package/build/client/_app/immutable/entry/app.BcL08IcT.js.gz +0 -0
  29. package/build/client/_app/immutable/entry/start.CAuRWqZB.js +1 -0
  30. package/build/client/_app/immutable/entry/start.CAuRWqZB.js.br +0 -0
  31. package/build/client/_app/immutable/entry/start.CAuRWqZB.js.gz +0 -0
  32. package/build/client/_app/immutable/nodes/{0.Bb8qAGW8.js → 0.AZnG4POF.js} +1 -1
  33. package/build/client/_app/immutable/nodes/0.AZnG4POF.js.br +0 -0
  34. package/build/client/_app/immutable/nodes/0.AZnG4POF.js.gz +0 -0
  35. package/build/client/_app/immutable/nodes/{1.Co_TaqLI.js → 1.uNWROKRa.js} +1 -1
  36. package/build/client/_app/immutable/nodes/1.uNWROKRa.js.br +2 -0
  37. package/build/client/_app/immutable/nodes/1.uNWROKRa.js.gz +0 -0
  38. package/build/client/_app/immutable/nodes/4.CNN_a8JB.js +126 -0
  39. package/build/client/_app/immutable/nodes/4.CNN_a8JB.js.br +0 -0
  40. package/build/client/_app/immutable/nodes/4.CNN_a8JB.js.gz +0 -0
  41. package/build/client/_app/immutable/nodes/{5.Fw13EXte.js → 5.rZSa9V3W.js} +2 -2
  42. package/build/client/_app/immutable/nodes/5.rZSa9V3W.js.br +0 -0
  43. package/build/client/_app/immutable/nodes/5.rZSa9V3W.js.gz +0 -0
  44. package/build/client/_app/immutable/nodes/{6.CWy0yXnu.js → 6.DUAMcwSm.js} +1 -1
  45. package/build/client/_app/immutable/nodes/6.DUAMcwSm.js.br +0 -0
  46. package/build/client/_app/immutable/nodes/6.DUAMcwSm.js.gz +0 -0
  47. package/build/client/_app/immutable/nodes/{7.CsM4M8Ul.js → 7.B1u5a8yO.js} +1 -1
  48. package/build/client/_app/immutable/nodes/7.B1u5a8yO.js.br +0 -0
  49. package/build/client/_app/immutable/nodes/7.B1u5a8yO.js.gz +0 -0
  50. package/build/client/_app/immutable/nodes/{8.V6hY0p8a.js → 8.DW8zKXS4.js} +1 -1
  51. package/build/client/_app/immutable/nodes/8.DW8zKXS4.js.br +0 -0
  52. package/build/client/_app/immutable/nodes/8.DW8zKXS4.js.gz +0 -0
  53. package/build/client/_app/version.json +1 -1
  54. package/build/client/_app/version.json.br +1 -1
  55. package/build/client/_app/version.json.gz +0 -0
  56. package/build/server/chunks/{0-DrD9dfbN.js → 0-DL6Jfu7F.js} +3 -3
  57. package/build/server/chunks/{0-DrD9dfbN.js.map → 0-DL6Jfu7F.js.map} +1 -1
  58. package/build/server/chunks/1-B2LhxwPN.js +9 -0
  59. package/build/server/chunks/{1-DvZDBGww.js.map → 1-B2LhxwPN.js.map} +1 -1
  60. package/build/server/chunks/{10-C96Thueb.js → 10-DQCiYDxy.js} +5 -5
  61. package/build/server/chunks/10-DQCiYDxy.js.map +1 -0
  62. package/build/server/chunks/4-2GARyIXu.js +9 -0
  63. package/build/server/chunks/{4-BYdi8hv_.js.map → 4-2GARyIXu.js.map} +1 -1
  64. package/build/server/chunks/{5-DIQyHPcz.js → 5-BPq_SUbr.js} +3 -3
  65. package/build/server/chunks/{5-DIQyHPcz.js.map → 5-BPq_SUbr.js.map} +1 -1
  66. package/build/server/chunks/6-Bnw_JRXO.js +9 -0
  67. package/build/server/chunks/{6-BsZngRIA.js.map → 6-Bnw_JRXO.js.map} +1 -1
  68. package/build/server/chunks/{7-CXWUMHvV.js → 7-ZktGMDHm.js} +3 -3
  69. package/build/server/chunks/{7-CXWUMHvV.js.map → 7-ZktGMDHm.js.map} +1 -1
  70. package/build/server/chunks/{8-l173yBhm.js → 8-V3DHLq7L.js} +3 -3
  71. package/build/server/chunks/{8-l173yBhm.js.map → 8-V3DHLq7L.js.map} +1 -1
  72. package/build/server/chunks/{IconMic-BM_3hm2T.js → IconMic-DK0ZRKNm.js} +2 -2
  73. package/build/server/chunks/{IconMic-BM_3hm2T.js.map → IconMic-DK0ZRKNm.js.map} +1 -1
  74. package/build/server/chunks/{Navbar-BZ_eb99a.js → Navbar-CRs8Q1Ed.js} +5 -5
  75. package/build/server/chunks/{Navbar-BZ_eb99a.js.map → Navbar-CRs8Q1Ed.js.map} +1 -1
  76. package/build/server/chunks/{_layout.svelte-Dd-1jqRZ.js → _layout.svelte-CtPb7AoM.js} +2 -2
  77. package/build/server/chunks/{_layout.svelte-Dd-1jqRZ.js.map → _layout.svelte-CtPb7AoM.js.map} +1 -1
  78. package/build/server/chunks/{_page.svelte-Bbooaanj.js → _page.svelte-BtDkjht-.js} +7 -7
  79. package/build/server/chunks/{_page.svelte-Bbooaanj.js.map → _page.svelte-BtDkjht-.js.map} +1 -1
  80. package/build/server/chunks/{_page.svelte-D0wEoV5A.js → _page.svelte-CXr3izpr.js} +5 -5
  81. package/build/server/chunks/{_page.svelte-D0wEoV5A.js.map → _page.svelte-CXr3izpr.js.map} +1 -1
  82. package/build/server/chunks/{_page.svelte-WYgjKj38.js → _page.svelte-D6dWiRVl.js} +31 -715
  83. package/build/server/chunks/_page.svelte-D6dWiRVl.js.map +1 -0
  84. package/build/server/chunks/{_page.svelte-C4jw4RUN.js → _page.svelte-Lhm6ya_b.js} +3 -3
  85. package/build/server/chunks/{_page.svelte-C4jw4RUN.js.map → _page.svelte-Lhm6ya_b.js.map} +1 -1
  86. package/build/server/chunks/{_page.svelte-E9h2ASFv.js → _page.svelte-m5t0OVcz.js} +7 -7
  87. package/build/server/chunks/{_page.svelte-E9h2ASFv.js.map → _page.svelte-m5t0OVcz.js.map} +1 -1
  88. package/build/server/chunks/{_server.ts-_qXm__Gf.js → _server.ts-7h410aJe.js} +5 -5
  89. package/build/server/chunks/{_server.ts-_qXm__Gf.js.map → _server.ts-7h410aJe.js.map} +1 -1
  90. package/build/server/chunks/{_server.ts-Baeek88H.js → _server.ts-B-io71lH.js} +5 -5
  91. package/build/server/chunks/_server.ts-B-io71lH.js.map +1 -0
  92. package/build/server/chunks/{_server.ts-BnNG0uRK.js → _server.ts-B7oFBy_Y.js} +6 -6
  93. package/build/server/chunks/{_server.ts-BnNG0uRK.js.map → _server.ts-B7oFBy_Y.js.map} +1 -1
  94. package/build/server/chunks/{_server.ts-B8D1t67g.js → _server.ts-BEsxh5-r.js} +7 -7
  95. package/build/server/chunks/_server.ts-BEsxh5-r.js.map +1 -0
  96. package/build/server/chunks/{_server.ts-DM6Jm6KP.js → _server.ts-BFQCNuCf.js} +5 -5
  97. package/build/server/chunks/_server.ts-BFQCNuCf.js.map +1 -0
  98. package/build/server/chunks/{_server.ts-DXoq1VzO.js → _server.ts-BIJomr8k.js} +5 -5
  99. package/build/server/chunks/_server.ts-BIJomr8k.js.map +1 -0
  100. package/build/server/chunks/{_server.ts-CU5_9yaM.js → _server.ts-BJd_BeRX.js} +5 -5
  101. package/build/server/chunks/{_server.ts-CU5_9yaM.js.map → _server.ts-BJd_BeRX.js.map} +1 -1
  102. package/build/server/chunks/{_server.ts-BlVBulWB.js → _server.ts-BLnGiLfS.js} +4 -4
  103. package/build/server/chunks/_server.ts-BLnGiLfS.js.map +1 -0
  104. package/build/server/chunks/{_server.ts-Decw7JxO.js → _server.ts-BMTnompE.js} +5 -5
  105. package/build/server/chunks/_server.ts-BMTnompE.js.map +1 -0
  106. package/build/server/chunks/_server.ts-BTeSTLAx.js +89 -0
  107. package/build/server/chunks/_server.ts-BTeSTLAx.js.map +1 -0
  108. package/build/server/chunks/{_server.ts-DFV-gf9Q.js → _server.ts-BaqsSmFS.js} +5 -5
  109. package/build/server/chunks/{_server.ts-DFV-gf9Q.js.map → _server.ts-BaqsSmFS.js.map} +1 -1
  110. package/build/server/chunks/{_server.ts-C5jyYbFm.js → _server.ts-BcIPGO7x.js} +17 -8
  111. package/build/server/chunks/_server.ts-BcIPGO7x.js.map +1 -0
  112. package/build/server/chunks/{_server.ts-Bxk1V3Ev.js → _server.ts-BdPGrcpF.js} +5 -5
  113. package/build/server/chunks/{_server.ts-Bxk1V3Ev.js.map → _server.ts-BdPGrcpF.js.map} +1 -1
  114. package/build/server/chunks/{_server.ts-Bx3uIrpl.js → _server.ts-BeXMVrJG.js} +5 -5
  115. package/build/server/chunks/{_server.ts-Bx3uIrpl.js.map → _server.ts-BeXMVrJG.js.map} +1 -1
  116. package/build/server/chunks/{_server.ts-DBQ7TD4o.js → _server.ts-BghreOti.js} +5 -5
  117. package/build/server/chunks/_server.ts-BghreOti.js.map +1 -0
  118. package/build/server/chunks/{_server.ts-D4tyRvFi.js → _server.ts-Bi33i7c7.js} +2 -2
  119. package/build/server/chunks/{_server.ts-D4tyRvFi.js.map → _server.ts-Bi33i7c7.js.map} +1 -1
  120. package/build/server/chunks/{_server.ts-C_dk6ZLP.js → _server.ts-BjSX-JsT.js} +6 -6
  121. package/build/server/chunks/{_server.ts-C_dk6ZLP.js.map → _server.ts-BjSX-JsT.js.map} +1 -1
  122. package/build/server/chunks/{_server.ts-CuBCKbP8.js → _server.ts-BokcuCWE.js} +6 -6
  123. package/build/server/chunks/{_server.ts-CuBCKbP8.js.map → _server.ts-BokcuCWE.js.map} +1 -1
  124. package/build/server/chunks/{_server.ts-2fxcxBzC.js → _server.ts-BwQSiREZ.js} +5 -5
  125. package/build/server/chunks/_server.ts-BwQSiREZ.js.map +1 -0
  126. package/build/server/chunks/{_server.ts-CzgA6LXe.js → _server.ts-Bw_r9OtK.js} +5 -5
  127. package/build/server/chunks/{_server.ts-CzgA6LXe.js.map → _server.ts-Bw_r9OtK.js.map} +1 -1
  128. package/build/server/chunks/{_server.ts-DYsP_lpr.js → _server.ts-Byn8EbtL.js} +7 -7
  129. package/build/server/chunks/_server.ts-Byn8EbtL.js.map +1 -0
  130. package/build/server/chunks/{_server.ts-BRTk2wfW.js → _server.ts-C0b2kLwv.js} +5 -5
  131. package/build/server/chunks/{_server.ts-BRTk2wfW.js.map → _server.ts-C0b2kLwv.js.map} +1 -1
  132. package/build/server/chunks/{_server.ts-CFNWzRBr.js → _server.ts-C2dpWx7K.js} +4 -4
  133. package/build/server/chunks/{_server.ts-CFNWzRBr.js.map → _server.ts-C2dpWx7K.js.map} +1 -1
  134. package/build/server/chunks/{_server.ts-F0nw0UvB.js → _server.ts-C3asto5q.js} +5 -5
  135. package/build/server/chunks/{_server.ts-F0nw0UvB.js.map → _server.ts-C3asto5q.js.map} +1 -1
  136. package/build/server/chunks/{_server.ts-YRWN3sJm.js → _server.ts-C4WOD37G.js} +5 -5
  137. package/build/server/chunks/{_server.ts-YRWN3sJm.js.map → _server.ts-C4WOD37G.js.map} +1 -1
  138. package/build/server/chunks/{_server.ts-DilgsSMu.js → _server.ts-C8LFsdDG.js} +5 -5
  139. package/build/server/chunks/{_server.ts-DilgsSMu.js.map → _server.ts-C8LFsdDG.js.map} +1 -1
  140. package/build/server/chunks/{_server.ts-wvbMWir6.js → _server.ts-C8xyXBY5.js} +6 -6
  141. package/build/server/chunks/{_server.ts-wvbMWir6.js.map → _server.ts-C8xyXBY5.js.map} +1 -1
  142. package/build/server/chunks/{_server.ts-Dq8RxTkW.js → _server.ts-CAlt9gW0.js} +5 -5
  143. package/build/server/chunks/{_server.ts-Dq8RxTkW.js.map → _server.ts-CAlt9gW0.js.map} +1 -1
  144. package/build/server/chunks/{_server.ts-DPDQh75Z.js → _server.ts-CBEVK-Yt.js} +2 -2
  145. package/build/server/chunks/{_server.ts-DPDQh75Z.js.map → _server.ts-CBEVK-Yt.js.map} +1 -1
  146. package/build/server/chunks/_server.ts-CGzgULKV.js +84 -0
  147. package/build/server/chunks/_server.ts-CGzgULKV.js.map +1 -0
  148. package/build/server/chunks/{_server.ts-B9iU6foL.js → _server.ts-CJWPhww2.js} +5 -5
  149. package/build/server/chunks/{_server.ts-B9iU6foL.js.map → _server.ts-CJWPhww2.js.map} +1 -1
  150. package/build/server/chunks/{_server.ts-ChH8nHr7.js → _server.ts-CLt4mqCt.js} +7 -7
  151. package/build/server/chunks/{_server.ts-ChH8nHr7.js.map → _server.ts-CLt4mqCt.js.map} +1 -1
  152. package/build/server/chunks/{_server.ts-CM1BFa2O.js → _server.ts-CQH5FEPp.js} +6 -6
  153. package/build/server/chunks/_server.ts-CQH5FEPp.js.map +1 -0
  154. package/build/server/chunks/{_server.ts-IW-zQmmb.js → _server.ts-CRY9d7-F.js} +5 -5
  155. package/build/server/chunks/_server.ts-CRY9d7-F.js.map +1 -0
  156. package/build/server/chunks/{_server.ts-DR7y5OQ3.js → _server.ts-CWNf8Ve1.js} +5 -5
  157. package/build/server/chunks/{_server.ts-DR7y5OQ3.js.map → _server.ts-CWNf8Ve1.js.map} +1 -1
  158. package/build/server/chunks/{_server.ts-CmyqMhn9.js → _server.ts-C_qyw2yL.js} +5 -5
  159. package/build/server/chunks/{_server.ts-CmyqMhn9.js.map → _server.ts-C_qyw2yL.js.map} +1 -1
  160. package/build/server/chunks/{_server.ts-CRVqyjYH.js → _server.ts-CaZ1wy9x.js} +7 -7
  161. package/build/server/chunks/{_server.ts-CRVqyjYH.js.map → _server.ts-CaZ1wy9x.js.map} +1 -1
  162. package/build/server/chunks/{_server.ts-kfc0Us0E.js → _server.ts-Cdq3e7xA.js} +5 -5
  163. package/build/server/chunks/{_server.ts-kfc0Us0E.js.map → _server.ts-Cdq3e7xA.js.map} +1 -1
  164. package/build/server/chunks/{_server.ts-WePF2DAq.js → _server.ts-ChI4fTd4.js} +5 -5
  165. package/build/server/chunks/_server.ts-ChI4fTd4.js.map +1 -0
  166. package/build/server/chunks/{_server.ts-DzCUdAPH.js → _server.ts-CiWKQbiz.js} +5 -5
  167. package/build/server/chunks/{_server.ts-DzCUdAPH.js.map → _server.ts-CiWKQbiz.js.map} +1 -1
  168. package/build/server/chunks/{_server.ts-Dcawi9b4.js → _server.ts-CtVWuskm.js} +2 -2
  169. package/build/server/chunks/_server.ts-CtVWuskm.js.map +1 -0
  170. package/build/server/chunks/{_server.ts-FPubTa2q.js → _server.ts-CwPqNJOY.js} +5 -5
  171. package/build/server/chunks/{_server.ts-FPubTa2q.js.map → _server.ts-CwPqNJOY.js.map} +1 -1
  172. package/build/server/chunks/{_server.ts-DdzFOqZm.js → _server.ts-D-pLD7Xu.js} +5 -5
  173. package/build/server/chunks/{_server.ts-DdzFOqZm.js.map → _server.ts-D-pLD7Xu.js.map} +1 -1
  174. package/build/server/chunks/{_server.ts-CQM2RG5K.js → _server.ts-D0RXp78c.js} +5 -5
  175. package/build/server/chunks/{_server.ts-CQM2RG5K.js.map → _server.ts-D0RXp78c.js.map} +1 -1
  176. package/build/server/chunks/{_server.ts-DRvqTDLx.js → _server.ts-D9jCVXyy.js} +5 -5
  177. package/build/server/chunks/_server.ts-D9jCVXyy.js.map +1 -0
  178. package/build/server/chunks/{_server.ts-BMCfB7xN.js → _server.ts-DBFkIfX3.js} +5 -5
  179. package/build/server/chunks/{_server.ts-BMCfB7xN.js.map → _server.ts-DBFkIfX3.js.map} +1 -1
  180. package/build/server/chunks/{_server.ts-D-jGSj8O.js → _server.ts-DBRLxv1J.js} +6 -6
  181. package/build/server/chunks/{_server.ts-D-jGSj8O.js.map → _server.ts-DBRLxv1J.js.map} +1 -1
  182. package/build/server/chunks/{_server.ts-Cap2Myq0.js → _server.ts-DH2KwFMm.js} +9 -6
  183. package/build/server/chunks/_server.ts-DH2KwFMm.js.map +1 -0
  184. package/build/server/chunks/{_server.ts-0UwoVmus.js → _server.ts-DN9DIE7V.js} +6 -6
  185. package/build/server/chunks/{_server.ts-0UwoVmus.js.map → _server.ts-DN9DIE7V.js.map} +1 -1
  186. package/build/server/chunks/{_server.ts-Brb7lRFE.js → _server.ts-DNQDl4In.js} +5 -5
  187. package/build/server/chunks/_server.ts-DNQDl4In.js.map +1 -0
  188. package/build/server/chunks/{_server.ts-D07mQlNk.js → _server.ts-DQCc-bcg.js} +5 -5
  189. package/build/server/chunks/{_server.ts-D07mQlNk.js.map → _server.ts-DQCc-bcg.js.map} +1 -1
  190. package/build/server/chunks/{_server.ts-VvJjpVtp.js → _server.ts-DVJYo8_h.js} +6 -6
  191. package/build/server/chunks/{_server.ts-VvJjpVtp.js.map → _server.ts-DVJYo8_h.js.map} +1 -1
  192. package/build/server/chunks/{_server.ts-5M6DY-PN.js → _server.ts-DXMBj9CH.js} +8 -8
  193. package/build/server/chunks/{_server.ts-5M6DY-PN.js.map → _server.ts-DXMBj9CH.js.map} +1 -1
  194. package/build/server/chunks/{_server.ts-DX3B53H8.js → _server.ts-DY8vqCzu.js} +5 -5
  195. package/build/server/chunks/{_server.ts-DX3B53H8.js.map → _server.ts-DY8vqCzu.js.map} +1 -1
  196. package/build/server/chunks/{_server.ts-C9-ewPaY.js → _server.ts-D_iVYIT5.js} +5 -5
  197. package/build/server/chunks/_server.ts-D_iVYIT5.js.map +1 -0
  198. package/build/server/chunks/{_server.ts-Dg4ouUjZ.js → _server.ts-Dc-DuHRl.js} +5 -5
  199. package/build/server/chunks/_server.ts-Dc-DuHRl.js.map +1 -0
  200. package/build/server/chunks/{_server.ts-CQt3NLuS.js → _server.ts-DeDvsRmd.js} +5 -5
  201. package/build/server/chunks/{_server.ts-CQt3NLuS.js.map → _server.ts-DeDvsRmd.js.map} +1 -1
  202. package/build/server/chunks/{_server.ts-Bi5ToBtl.js → _server.ts-DgU1uBsl.js} +5 -5
  203. package/build/server/chunks/{_server.ts-Bi5ToBtl.js.map → _server.ts-DgU1uBsl.js.map} +1 -1
  204. package/build/server/chunks/{_server.ts-DSfVK8xc.js → _server.ts-DiUBKtYa.js} +5 -5
  205. package/build/server/chunks/{_server.ts-DSfVK8xc.js.map → _server.ts-DiUBKtYa.js.map} +1 -1
  206. package/build/server/chunks/{_server.ts-CwPiZPmZ.js → _server.ts-DlONqa0N.js} +6 -6
  207. package/build/server/chunks/{_server.ts-CwPiZPmZ.js.map → _server.ts-DlONqa0N.js.map} +1 -1
  208. package/build/server/chunks/{_server.ts-Cb-e8WyG.js → _server.ts-Do8_4nUh.js} +5 -5
  209. package/build/server/chunks/{_server.ts-Cb-e8WyG.js.map → _server.ts-Do8_4nUh.js.map} +1 -1
  210. package/build/server/chunks/{_server.ts-lK-oXISB.js → _server.ts-DtVcRD5A.js} +5 -5
  211. package/build/server/chunks/{_server.ts-lK-oXISB.js.map → _server.ts-DtVcRD5A.js.map} +1 -1
  212. package/build/server/chunks/{_server.ts-hAoIbHpc.js → _server.ts-DueQnU1L.js} +6 -6
  213. package/build/server/chunks/{_server.ts-hAoIbHpc.js.map → _server.ts-DueQnU1L.js.map} +1 -1
  214. package/build/server/chunks/{_server.ts-aw8KYE5U.js → _server.ts-DvsmHJew.js} +5 -5
  215. package/build/server/chunks/{_server.ts-aw8KYE5U.js.map → _server.ts-DvsmHJew.js.map} +1 -1
  216. package/build/server/chunks/{_server.ts-DUy4kkr_.js → _server.ts-DxYoYjKM.js} +5 -5
  217. package/build/server/chunks/{_server.ts-DUy4kkr_.js.map → _server.ts-DxYoYjKM.js.map} +1 -1
  218. package/build/server/chunks/{_server.ts-BDe-TnAi.js → _server.ts-Eq4SzuV_.js} +5 -5
  219. package/build/server/chunks/{_server.ts-BDe-TnAi.js.map → _server.ts-Eq4SzuV_.js.map} +1 -1
  220. package/build/server/chunks/{_server.ts-DDCEmU_P.js → _server.ts-KuD8Wpms.js} +6 -10
  221. package/build/server/chunks/_server.ts-KuD8Wpms.js.map +1 -0
  222. package/build/server/chunks/{_server.ts-BnL3TLuz.js → _server.ts-Q60q44Je.js} +5 -5
  223. package/build/server/chunks/{_server.ts-BnL3TLuz.js.map → _server.ts-Q60q44Je.js.map} +1 -1
  224. package/build/server/chunks/{_server.ts-DMj9WYdv.js → _server.ts-RfzeE7tM.js} +2 -2
  225. package/build/server/chunks/{_server.ts-DMj9WYdv.js.map → _server.ts-RfzeE7tM.js.map} +1 -1
  226. package/build/server/chunks/{_server.ts-B6AN-mYa.js → _server.ts-Rigt7lcd.js} +7 -7
  227. package/build/server/chunks/{_server.ts-B6AN-mYa.js.map → _server.ts-Rigt7lcd.js.map} +1 -1
  228. package/build/server/chunks/{_server.ts-C7Scn_Ur.js → _server.ts-XhNvTVYt.js} +5 -5
  229. package/build/server/chunks/_server.ts-XhNvTVYt.js.map +1 -0
  230. package/build/server/chunks/{_server.ts-BETcFeB8.js → _server.ts-Zui06dcA.js} +5 -5
  231. package/build/server/chunks/_server.ts-Zui06dcA.js.map +1 -0
  232. package/build/server/chunks/{_server.ts-BwnoppTC.js → _server.ts-a1r-EHX0.js} +6 -6
  233. package/build/server/chunks/{_server.ts-BwnoppTC.js.map → _server.ts-a1r-EHX0.js.map} +1 -1
  234. package/build/server/chunks/{_server.ts-CosKSZGO.js → _server.ts-cHc1drrp.js} +2 -2
  235. package/build/server/chunks/{_server.ts-CosKSZGO.js.map → _server.ts-cHc1drrp.js.map} +1 -1
  236. package/build/server/chunks/{_server.ts-B5PHfuR5.js → _server.ts-eYpUsioT.js} +6 -6
  237. package/build/server/chunks/{_server.ts-B5PHfuR5.js.map → _server.ts-eYpUsioT.js.map} +1 -1
  238. package/build/server/chunks/{_server.ts-CGMuaSY3.js → _server.ts-iKClbuyO.js} +5 -5
  239. package/build/server/chunks/{_server.ts-CGMuaSY3.js.map → _server.ts-iKClbuyO.js.map} +1 -1
  240. package/build/server/chunks/{_server.ts-C37SDJxC.js → _server.ts-j1haXquD.js} +5 -5
  241. package/build/server/chunks/{_server.ts-C37SDJxC.js.map → _server.ts-j1haXquD.js.map} +1 -1
  242. package/build/server/chunks/{_server.ts-BW46dP9B.js → _server.ts-k5rG5cUI.js} +7 -7
  243. package/build/server/chunks/{_server.ts-BW46dP9B.js.map → _server.ts-k5rG5cUI.js.map} +1 -1
  244. package/build/server/chunks/{_server.ts-5aqdy9Zn.js → _server.ts-k9P3ZBDK.js} +25 -17
  245. package/build/server/chunks/_server.ts-k9P3ZBDK.js.map +1 -0
  246. package/build/server/chunks/{_server.ts-CcyVh5fg.js → _server.ts-ll-0r5dM.js} +5 -5
  247. package/build/server/chunks/{_server.ts-CcyVh5fg.js.map → _server.ts-ll-0r5dM.js.map} +1 -1
  248. package/build/server/chunks/{_server.ts-r07PDC8q.js → _server.ts-m1RQkdUW.js} +5 -5
  249. package/build/server/chunks/{_server.ts-r07PDC8q.js.map → _server.ts-m1RQkdUW.js.map} +1 -1
  250. package/build/server/chunks/{_server.ts-avgx1pPX.js → _server.ts-nVEAwKYe.js} +5 -5
  251. package/build/server/chunks/{_server.ts-avgx1pPX.js.map → _server.ts-nVEAwKYe.js.map} +1 -1
  252. package/build/server/chunks/{_server.ts-DP28Ocqs.js → _server.ts-vZTWdH4v.js} +5 -5
  253. package/build/server/chunks/{_server.ts-DP28Ocqs.js.map → _server.ts-vZTWdH4v.js.map} +1 -1
  254. package/build/server/chunks/{_server.ts-DiDI1Ie6.js → _server.ts-vpAn0Uxn.js} +6 -6
  255. package/build/server/chunks/{_server.ts-DiDI1Ie6.js.map → _server.ts-vpAn0Uxn.js.map} +1 -1
  256. package/build/server/chunks/{addon-helpers-ChYTbRSK.js → addon-helpers-kNrSUlMe.js} +3 -3
  257. package/build/server/chunks/addon-helpers-kNrSUlMe.js.map +1 -0
  258. package/build/server/chunks/{akm-BLz9zl09.js → akm-IP8X7RlR.js} +2 -2
  259. package/build/server/chunks/{akm-BLz9zl09.js.map → akm-IP8X7RlR.js.map} +1 -1
  260. package/build/server/chunks/{catalog-CY6FvvAs.js → catalog-DcLI63rn.js} +5 -5
  261. package/build/server/chunks/{catalog-CY6FvvAs.js.map → catalog-DcLI63rn.js.map} +1 -1
  262. package/build/server/chunks/{client-FcHtkEV-.js → client-CIUwkogU.js} +2 -2
  263. package/build/server/chunks/{client-FcHtkEV-.js.map → client-CIUwkogU.js.map} +1 -1
  264. package/build/server/chunks/{config-WS3yDsjb.js → config-EKy5PAZU.js} +2 -2
  265. package/build/server/chunks/{config-WS3yDsjb.js.map → config-EKy5PAZU.js.map} +1 -1
  266. package/build/server/chunks/{docker-CDcBV4aX.js → docker-BhJS_Y28.js} +2 -2
  267. package/build/server/chunks/{docker-CDcBV4aX.js.map → docker-BhJS_Y28.js.map} +1 -1
  268. package/build/server/chunks/{endpoints-BnI8UQUm.js → endpoints-Dq-IqF1t.js} +2 -2
  269. package/build/server/chunks/{endpoints-BnI8UQUm.js.map → endpoints-Dq-IqF1t.js.map} +1 -1
  270. package/build/server/chunks/{error.svelte-DeB-Po5T.js → error.svelte-Dbj-WAaz.js} +4 -4
  271. package/build/server/chunks/{error.svelte-DeB-Po5T.js.map → error.svelte-Dbj-WAaz.js.map} +1 -1
  272. package/build/server/chunks/{helpers-uzTc9A0Q.js → helpers-s8d3gE38.js} +3 -3
  273. package/build/server/chunks/{helpers-uzTc9A0Q.js.map → helpers-s8d3gE38.js.map} +1 -1
  274. package/build/server/chunks/{hooks.server-DaC85A-N.js → hooks.server-Cy1D3efR.js} +7 -7
  275. package/build/server/chunks/hooks.server-Cy1D3efR.js.map +1 -0
  276. package/build/server/chunks/{http-DWCniA5n.js → http-BCF8LO-V.js} +2 -2
  277. package/build/server/chunks/{http-DWCniA5n.js.map → http-BCF8LO-V.js.map} +1 -1
  278. package/build/server/chunks/{internal-DRthfYRK.js → internal-CcLms467.js} +3 -3
  279. package/build/server/chunks/{internal-DRthfYRK.js.map → internal-CcLms467.js.map} +1 -1
  280. package/build/server/chunks/{migration-status-Blvg_RFt.js → migration-status-BgiG_Rm6.js} +2 -2
  281. package/build/server/chunks/{migration-status-Blvg_RFt.js.map → migration-status-BgiG_Rm6.js.map} +1 -1
  282. package/build/server/chunks/{session-cookie-DOONPnJ5.js → session-cookie-F6DkHp5H.js} +2 -2
  283. package/build/server/chunks/{session-cookie-DOONPnJ5.js.map → session-cookie-F6DkHp5H.js.map} +1 -1
  284. package/build/server/chunks/{setup-deploy-CeeF_6ze.js → setup-deploy-BtgW_nbb.js} +2 -2
  285. package/build/server/chunks/{setup-deploy-CeeF_6ze.js.map → setup-deploy-BtgW_nbb.js.map} +1 -1
  286. package/build/server/chunks/{src-B3g4Ry1X.js → src-BN-m14sE.js} +198 -639
  287. package/build/server/chunks/src-BN-m14sE.js.map +1 -0
  288. package/build/server/chunks/{state-CL9Kv-vm.js → state-BjAIjYtQ.js} +2 -2
  289. package/build/server/chunks/{state-CL9Kv-vm.js.map → state-BjAIjYtQ.js.map} +1 -1
  290. package/build/server/chunks/{state2-Cim9_nHe.js → state2-CeseXnTO.js} +2 -2
  291. package/build/server/chunks/{state2-Cim9_nHe.js.map → state2-CeseXnTO.js.map} +1 -1
  292. package/build/server/chunks/{theme-state.svelte-BgBXJ060.js → theme-state.svelte-DshW_ZYI.js} +2 -81
  293. package/build/server/chunks/theme-state.svelte-DshW_ZYI.js.map +1 -0
  294. package/build/server/index.js +32 -2
  295. package/build/server/index.js.map +1 -1
  296. package/build/server/manifest.js +93 -107
  297. package/build/server/manifest.js.map +1 -1
  298. package/package.json +2 -2
  299. package/build/client/_app/immutable/assets/4.BLk6Mqyj.css +0 -1
  300. package/build/client/_app/immutable/assets/4.BLk6Mqyj.css.br +0 -0
  301. package/build/client/_app/immutable/assets/4.BLk6Mqyj.css.gz +0 -0
  302. package/build/client/_app/immutable/chunks/B8C5qi9U.js.br +0 -0
  303. package/build/client/_app/immutable/chunks/B8C5qi9U.js.gz +0 -0
  304. package/build/client/_app/immutable/chunks/Br6Mrpf0.js +0 -3
  305. package/build/client/_app/immutable/chunks/Br6Mrpf0.js.br +0 -0
  306. package/build/client/_app/immutable/chunks/Br6Mrpf0.js.gz +0 -0
  307. package/build/client/_app/immutable/chunks/CLgRRUN_.js.br +0 -0
  308. package/build/client/_app/immutable/chunks/CLgRRUN_.js.gz +0 -0
  309. package/build/client/_app/immutable/chunks/Ch85wCT5.js +0 -1
  310. package/build/client/_app/immutable/chunks/Ch85wCT5.js.br +0 -2
  311. package/build/client/_app/immutable/chunks/Ch85wCT5.js.gz +0 -0
  312. package/build/client/_app/immutable/chunks/DRHnoVLf.js +0 -1
  313. package/build/client/_app/immutable/chunks/DRHnoVLf.js.br +0 -0
  314. package/build/client/_app/immutable/chunks/DRHnoVLf.js.gz +0 -0
  315. package/build/client/_app/immutable/chunks/DYXGFYr6.js.br +0 -0
  316. package/build/client/_app/immutable/chunks/DYXGFYr6.js.gz +0 -0
  317. package/build/client/_app/immutable/chunks/Dcw6L0GF.js.br +0 -0
  318. package/build/client/_app/immutable/chunks/Dcw6L0GF.js.gz +0 -0
  319. package/build/client/_app/immutable/entry/app.CVxCoIFs.js.br +0 -0
  320. package/build/client/_app/immutable/entry/app.CVxCoIFs.js.gz +0 -0
  321. package/build/client/_app/immutable/entry/start.CQqNtgHJ.js +0 -1
  322. package/build/client/_app/immutable/entry/start.CQqNtgHJ.js.br +0 -0
  323. package/build/client/_app/immutable/entry/start.CQqNtgHJ.js.gz +0 -0
  324. package/build/client/_app/immutable/nodes/0.Bb8qAGW8.js.br +0 -0
  325. package/build/client/_app/immutable/nodes/0.Bb8qAGW8.js.gz +0 -0
  326. package/build/client/_app/immutable/nodes/1.Co_TaqLI.js.br +0 -2
  327. package/build/client/_app/immutable/nodes/1.Co_TaqLI.js.gz +0 -0
  328. package/build/client/_app/immutable/nodes/4.agNu3Ryl.js +0 -130
  329. package/build/client/_app/immutable/nodes/4.agNu3Ryl.js.br +0 -0
  330. package/build/client/_app/immutable/nodes/4.agNu3Ryl.js.gz +0 -0
  331. package/build/client/_app/immutable/nodes/5.Fw13EXte.js.br +0 -0
  332. package/build/client/_app/immutable/nodes/5.Fw13EXte.js.gz +0 -0
  333. package/build/client/_app/immutable/nodes/6.CWy0yXnu.js.br +0 -0
  334. package/build/client/_app/immutable/nodes/6.CWy0yXnu.js.gz +0 -0
  335. package/build/client/_app/immutable/nodes/7.CsM4M8Ul.js.br +0 -0
  336. package/build/client/_app/immutable/nodes/7.CsM4M8Ul.js.gz +0 -0
  337. package/build/client/_app/immutable/nodes/8.V6hY0p8a.js.br +0 -0
  338. package/build/client/_app/immutable/nodes/8.V6hY0p8a.js.gz +0 -0
  339. package/build/server/chunks/1-DvZDBGww.js +0 -9
  340. package/build/server/chunks/10-C96Thueb.js.map +0 -1
  341. package/build/server/chunks/4-BYdi8hv_.js +0 -9
  342. package/build/server/chunks/6-BsZngRIA.js +0 -9
  343. package/build/server/chunks/_page.svelte-WYgjKj38.js.map +0 -1
  344. package/build/server/chunks/_server.ts-2fxcxBzC.js.map +0 -1
  345. package/build/server/chunks/_server.ts-5aqdy9Zn.js.map +0 -1
  346. package/build/server/chunks/_server.ts-B8D1t67g.js.map +0 -1
  347. package/build/server/chunks/_server.ts-BETcFeB8.js.map +0 -1
  348. package/build/server/chunks/_server.ts-BM0AExGa.js +0 -121
  349. package/build/server/chunks/_server.ts-BM0AExGa.js.map +0 -1
  350. package/build/server/chunks/_server.ts-Baeek88H.js.map +0 -1
  351. package/build/server/chunks/_server.ts-BlVBulWB.js.map +0 -1
  352. package/build/server/chunks/_server.ts-Brb7lRFE.js.map +0 -1
  353. package/build/server/chunks/_server.ts-C5jyYbFm.js.map +0 -1
  354. package/build/server/chunks/_server.ts-C7Scn_Ur.js.map +0 -1
  355. package/build/server/chunks/_server.ts-C9-ewPaY.js.map +0 -1
  356. package/build/server/chunks/_server.ts-CM1BFa2O.js.map +0 -1
  357. package/build/server/chunks/_server.ts-Cap2Myq0.js.map +0 -1
  358. package/build/server/chunks/_server.ts-DBQ7TD4o.js.map +0 -1
  359. package/build/server/chunks/_server.ts-DDCEmU_P.js.map +0 -1
  360. package/build/server/chunks/_server.ts-DLLNA3jY.js +0 -47
  361. package/build/server/chunks/_server.ts-DLLNA3jY.js.map +0 -1
  362. package/build/server/chunks/_server.ts-DM6Jm6KP.js.map +0 -1
  363. package/build/server/chunks/_server.ts-DRvqTDLx.js.map +0 -1
  364. package/build/server/chunks/_server.ts-DXoq1VzO.js.map +0 -1
  365. package/build/server/chunks/_server.ts-DYsP_lpr.js.map +0 -1
  366. package/build/server/chunks/_server.ts-DZ-yNYeI.js +0 -64
  367. package/build/server/chunks/_server.ts-DZ-yNYeI.js.map +0 -1
  368. package/build/server/chunks/_server.ts-Dcawi9b4.js.map +0 -1
  369. package/build/server/chunks/_server.ts-Decw7JxO.js.map +0 -1
  370. package/build/server/chunks/_server.ts-Dg4ouUjZ.js.map +0 -1
  371. package/build/server/chunks/_server.ts-IW-zQmmb.js.map +0 -1
  372. package/build/server/chunks/_server.ts-WePF2DAq.js.map +0 -1
  373. package/build/server/chunks/_server.ts-k339Bhm3.js +0 -88
  374. package/build/server/chunks/_server.ts-k339Bhm3.js.map +0 -1
  375. package/build/server/chunks/addon-helpers-ChYTbRSK.js.map +0 -1
  376. package/build/server/chunks/environment-D-dkDBwd.js +0 -36
  377. package/build/server/chunks/environment-D-dkDBwd.js.map +0 -1
  378. package/build/server/chunks/hooks.server-DaC85A-N.js.map +0 -1
  379. package/build/server/chunks/src-B3g4Ry1X.js.map +0 -1
  380. package/build/server/chunks/theme-state.svelte-BgBXJ060.js.map +0 -1
  381. package/build/server/chunks/version-cache-CSnmLqxQ.js +0 -54
  382. package/build/server/chunks/version-cache-CSnmLqxQ.js.map +0 -1
@@ -1,22 +1,21 @@
1
- import { v as version } from './environment-D-dkDBwd.js';
2
- import { F as head, p as derived, q as ensure_array_like, e as attr_class, d as attr, s as escape_html, a9 as stringify, g as bind_props } from './dev-D85DamNs.js';
3
- import { o as onDestroy, g as goto } from './client-FcHtkEV-.js';
1
+ import { F as head, q as ensure_array_like, e as attr_class, d as attr, s as escape_html, a9 as stringify, p as derived, g as bind_props } from './dev-D85DamNs.js';
2
+ import { o as onDestroy, g as goto } from './client-CIUwkogU.js';
4
3
  import { r as require_dist } from './dist-DOFcG0Zp.js';
5
- import { g as fetchContainers, f as fetchAutomations, C as voiceState, b as buildHeaders, j as fetchServiceLogs, a as detectAkmEmbedding, z as testAkmEmbedding, p as notifications, B as upgradeStack, e as downloadUiVersion, v as setUnitImageTag, D as DowngradeConfirmationRequiredError, l as fetchVersions, n as invalidateVersionCache, i as fetchReleases, k as fetchUiVersions } from './theme-state.svelte-BgBXJ060.js';
6
- import { I as IconDone } from './IconDone-YB1DYJFs.js';
4
+ import { e as fetchContainers, f as fetchAutomations, v as voiceState, b as buildHeaders, h as fetchServiceLogs, a as detectAkmEmbedding, t as testAkmEmbedding, n as notifications } from './theme-state.svelte-DshW_ZYI.js';
7
5
  import { I as IconInfo } from './IconInfo-yYiI9uGe.js';
8
- import { c as IconMic, p as formatTime, o as endpointsService, a as IconClose } from './IconMic-BM_3hm2T.js';
9
- import { N as Navbar, I as IconServer, D as Drawer } from './Navbar-BZ_eb99a.js';
6
+ import { c as IconMic, p as formatTime, o as endpointsService } from './IconMic-DK0ZRKNm.js';
7
+ import { N as Navbar, I as IconServer, D as Drawer } from './Navbar-CRs8Q1Ed.js';
10
8
  import { S as Spinner } from './Spinner-jfNKSy3m.js';
11
9
  import { c as IconLink, I as IconAgent, a as IconAlert, b as IconDoneCircle, d as IconTerminal, T as ToolStrip, C as ChatMessage } from './ChatMessage-6KR_zJHH.js';
12
10
  import { I as IconLock } from './IconLock-DHiqGiiZ.js';
13
- import './internal-DRthfYRK.js';
11
+ import './internal-CcLms467.js';
14
12
  import './utils-BSRjJDrZ.js';
15
13
  import 'node:module';
16
14
  import './chunk-CLZ62Ad-.js';
17
15
  import './features.svelte-DsfDrPnq.js';
18
- import './state2-Cim9_nHe.js';
16
+ import './state2-CeseXnTO.js';
19
17
  import './IconLogo-Iv-7q8aY.js';
18
+ import './IconDone-YB1DYJFs.js';
20
19
 
21
20
  //#region src/lib/components/icons/IconOverview.svelte
22
21
  function IconOverview($$renderer, $$props) {
@@ -233,13 +232,7 @@ function StatusHero($$renderer, $$props) {
233
232
  //#endregion
234
233
  //#region src/lib/components/admin/overview/OperationOutput.svelte
235
234
  function OperationOutput($$renderer, $$props) {
236
- let { operationResult, operationResultType} = $$props;
237
- if (operationResult) {
238
- $$renderer.push("<!--[0-->");
239
- $$renderer.push(`<section${attr_class(`output-section output-section--${stringify(operationResultType)}`, "svelte-10sij3c")}><div class="output-header svelte-10sij3c"><h3 class="svelte-10sij3c">Operation output</h3> <button class="btn-ghost" aria-label="Dismiss">`);
240
- IconClose($$renderer, { size: 14 });
241
- $$renderer.push(`<!----></button></div> <pre class="output-code svelte-10sij3c">${escape_html(operationResult)}</pre></section>`);
242
- } else $$renderer.push("<!--[-1-->");
235
+ $$renderer.push("<!--[-1-->");
243
236
  $$renderer.push(`<!--]-->`);
244
237
  }
245
238
  //#endregion
@@ -318,7 +311,7 @@ function OverviewTab($$renderer, $$props) {
318
311
  * never deploys (e.g. guardian on a no-portal install) is never counted as
319
312
  * a failed container. Falls back to the merged container keys when empty.
320
313
  */
321
- let { operationResult, operationResultType, healthLoading, anyDangerousLoading, mergedServices, managedServices, onNavigate } = $$props;
314
+ let { healthLoading, anyDangerousLoading, mergedServices, managedServices, onNavigate } = $$props;
322
315
  let akmBadge = derived(() => {
323
316
  return {
324
317
  label: "Unavailable",
@@ -362,9 +355,7 @@ function OverviewTab($$renderer, $$props) {
362
355
  healthLoading,
363
356
  anyDangerousLoading});
364
357
  $$renderer.push(`<!----> `);
365
- OperationOutput($$renderer, {
366
- operationResult,
367
- operationResultType});
358
+ OperationOutput($$renderer);
368
359
  $$renderer.push(`<!----> <div class="tile-grid svelte-xz862u">`);
369
360
  MetricTile($$renderer, {
370
361
  label: "Services running",
@@ -405,509 +396,27 @@ function OverviewTab($$renderer, $$props) {
405
396
  });
406
397
  }
407
398
  //#endregion
408
- //#region src/lib/version-compare.ts
409
- /** True when `v` parses as a comparable semver (optionally `v`-prefixed). */
410
- function isSemver(v) {
411
- if (!v) return false;
412
- return /^v?\d+\.\d+\.\d+(?:[-+].*)?$/.test(v.trim());
413
- }
414
- function isPrerelease(v) {
415
- return v.replace(/^v/, "").split("+")[0].includes("-");
416
- }
417
- /**
418
- * Client-safe mirror of @openpalm/lib's `formatForDisplay` (#503): one canonical
419
- * user-facing spelling regardless of whether the value arrived as a Docker tag
420
- * (`v0.12.0`) or an npm version (`0.12.0`). Drops a single leading `v`; leaves
421
- * a moving tag like `latest`/`dev` untouched. The lib helper is server-only
422
- * (its module imports package.json), so this stays a tiny dependency-free copy
423
- * used everywhere the browser renders a version label.
424
- */
425
- function formatVersionForDisplay(v) {
426
- return (v ?? "").trim().replace(/^v/, "");
427
- }
428
- /** Active release channel for `current`: pre-release installs ride the
429
- * prerelease channel, everything else the stable channel. Non-semver (a moving
430
- * `latest` tag, or no data) → 'unknown' so the UI shows nothing misleading. */
431
- function channelOf(current) {
432
- if (!isSemver(current)) return "unknown";
433
- return isPrerelease(current) ? "prerelease" : "stable";
434
- }
435
- /** Returns 1 if a > b, -1 if a < b, 0 if equal. Strips a leading `v`. */
436
- function compareVersions(a, b) {
437
- const parse = (v) => {
438
- const clean = v.trim().replace(/^v/, "").split("+")[0];
439
- const dashIdx = clean.indexOf("-");
440
- const main = dashIdx === -1 ? clean : clean.slice(0, dashIdx);
441
- const pre = dashIdx === -1 ? null : clean.slice(dashIdx + 1);
442
- const parts = main.split(".").map(Number);
443
- return [
444
- parts[0] ?? 0,
445
- parts[1] ?? 0,
446
- parts[2] ?? 0,
447
- pre
448
- ];
449
- };
450
- const comparePre = (x, y) => {
451
- const xp = x.split(".");
452
- const yp = y.split(".");
453
- for (let i = 0; i < Math.max(xp.length, yp.length); i++) {
454
- if (i >= xp.length) return -1;
455
- if (i >= yp.length) return 1;
456
- const xn = Number(xp[i]);
457
- const yn = Number(yp[i]);
458
- const xIsNum = !isNaN(xn);
459
- const yIsNum = !isNaN(yn);
460
- if (xIsNum && yIsNum) {
461
- if (xn !== yn) return xn > yn ? 1 : -1;
462
- } else if (xIsNum !== yIsNum) return xIsNum ? -1 : 1;
463
- else if (xp[i] !== yp[i]) return xp[i] > yp[i] ? 1 : -1;
464
- }
465
- return 0;
466
- };
467
- const [aM, am, ap, aPre] = parse(a);
468
- const [bM, bm, bp, bPre] = parse(b);
469
- if (aM !== bM) return aM > bM ? 1 : -1;
470
- if (am !== bm) return am > bm ? 1 : -1;
471
- if (ap !== bp) return ap > bp ? 1 : -1;
472
- if (aPre === null && bPre !== null) return 1;
473
- if (aPre !== null && bPre === null) return -1;
474
- if (aPre !== null && bPre !== null) return comparePre(aPre, bPre);
475
- return 0;
476
- }
477
- /**
478
- * Status of `current` against the newest `candidate` on the same channel.
479
- * Returns 'unknown' when either side isn't a comparable semver (e.g. a moving
480
- * `latest` image tag, or no release data yet) so the UI shows a neutral state
481
- * instead of a misleading "up to date".
482
- */
483
- function updateStatus(current, latest) {
484
- if (!isSemver(current) || !isSemver(latest)) return "unknown";
485
- return compareVersions(latest, current) > 0 ? "update" : "current";
486
- }
487
- /**
488
- * Newest version from `candidates` on `current`'s release channel: a
489
- * pre-release current sees all candidates; a stable current only sees stable
490
- * ones (so a stable user is never nudged onto an rc). Returns null when no
491
- * candidate qualifies. `candidates` need not be pre-sorted.
492
- */
493
- function latestForChannel(current, candidates) {
494
- const wantPre = isSemver(current) ? isPrerelease(current) : true;
495
- const pool = candidates.filter((c) => isSemver(c.version) && (wantPre || !c.prerelease));
496
- if (pool.length === 0) return null;
497
- return pool.reduce((best, c) => compareVersions(c.version, best.version) > 0 ? c : best).version;
498
- }
499
- //#endregion
500
399
  //#region src/lib/components/admin/updates/UpdatesTab.svelte
501
400
  function UpdatesTab($$renderer, $$props) {
502
401
  $$renderer.component(($$renderer) => {
503
- /** Every configured stack piece (assistant, guardian, chat portal, voice,
504
- * ollama as applicable) + the tag it actually runs. Each carries its own
505
- * best-effort latest tag (latestVersion) from Docker Hub so the rows
506
- * compare per-unit, not against a single shared tag. */
507
- /** Desktop (Electron) app version — null when not running in Electron. */
508
- /** Newer desktop version from the app's GitHub update check, if any. */
509
- /** Download URL for the newer desktop release. */
510
- /** True when the native harness moved and the app must be RE-DOWNLOADED
511
- * (the control plane self-updates; the harness does not). */
512
- /** Running @openpalm/ui version (the build currently serving this page). */
513
- /** Supervisor is respawning the UI server against the new build; the page
514
- * will auto-reload once it's back up (design §6.2). */
515
- /** Per-unit available Docker Hub tags for the per-unit version pickers,
516
- * keyed by service id (assistant/guardian/portal/voice). Bare semver,
517
- * v-prefixed as Docker Hub returns them; the UI strips the v for display. */
518
- /** Running control-plane version (PLATFORM_VERSION). The dropdown is already
519
- * filtered to tags ≤ this server-side (#492); used to label "you are on X"
520
- * and for the active-channel indicator. */
521
- /** Latest published @openpalm/lib on npm — the "is the platform itself up to
522
- * date?" signal, separate from the container image latest tags. */
523
- /** Latest published assistant image tag from Docker Hub (bare semver, no
524
- * v-prefix). Backward-compat signal; the per-unit rows use each service's
525
- * own latestVersion. */
526
- /** Per-unit image pin: the unit currently being installed (null when idle).
527
- * Any unit install disables the others so two pins can't race on stack.env. */
528
- /** #501 per-unit downgrade confirmation: set when pinning a unit to an older
529
- * tag; the UI shows a plain warning + confirm, then re-applies. */
530
- let { currentImageTag, services = [], anyDangerousLoading, tokenStored, upgradeLoading, inElectron, electronVersion, electronLatestVersion, electronLatestUrl, harnessUpdateAvailable = false, uiVersion, uiVersions, uiVersionsLoading, selectedUiTag, uiDownloadLoading, uiDownloadReady, uiDownloadRestarting, releases, unitTags = {}, releasesLoading, platformVersion = "", platformLatest = null, latestImageTag = null, unitInstallLoading = null, unitDowngradePrompt = null, onSetUnitImageTag, onConfirmUnitDowngrade, onCancelUnitDowngrade, onUpgradeStack, onSelectedUiTagChange, onDownloadUiVersion, onRestartApp, onRefreshReleases } = $$props;
531
- function uiVersionLabel(v) {
532
- const tags = [];
533
- if (v.distTag) tags.push(v.distTag);
534
- else if (v.prerelease) tags.push("pre-release");
535
- return tags.length ? `${v.version} (${tags.join(", ")})` : v.version;
536
- }
537
- const RELEASES_URL = "https://github.com/itlackey/openpalm/releases";
538
- const releaseCandidates = derived(() => releases.filter((r) => r.hasElectronBuild).map((r) => ({
539
- version: r.tag,
540
- prerelease: r.prerelease
541
- })));
542
- const uiCandidates = derived(() => uiVersions.map((v) => ({
543
- version: v.version,
544
- prerelease: v.prerelease
545
- })));
546
- function serviceStatus(version, latestVersion) {
547
- const target = latestVersion ?? latestImageTag ?? platformVersion;
548
- if (!isSemver(version) || !isSemver(target)) return "unknown";
549
- return compareVersions(version, target) < 0 ? "update" : "current";
550
- }
551
- const serviceRows = derived(() => services.map((s) => ({
552
- ...s,
553
- status: serviceStatus(s.version, s.latestVersion)
554
- })));
555
- const stackVersion = derived(() => serviceRows().find((s) => s.id === "assistant")?.version ?? currentImageTag);
556
- const servicesBehind = derived(() => serviceRows().some((s) => s.status === "update"));
557
- const SERVICE_ID_TO_UNIT = {
558
- assistant: "assistant",
559
- guardian: "guardian",
560
- portal: "portals",
561
- voice: "voice"
562
- };
563
- let selectedUnitTags = {};
564
- function unitSelectedTag(unit) {
565
- return selectedUnitTags[unit] ?? "latest";
566
- }
567
- function setUnitSelectedTag(unit, tag) {
568
- selectedUnitTags[unit] = tag;
569
- }
570
- function unitTagList(serviceId) {
571
- return unitTags[serviceId] ?? [];
572
- }
573
- const unitRows = derived(() => serviceRows().map((s) => {
574
- return {
575
- service: s,
576
- unit: SERVICE_ID_TO_UNIT[s.id] ?? s.id,
577
- tags: unitTagList(s.id)
578
- };
579
- }));
580
- const appLatest = derived(() => electronLatestVersion ?? latestForChannel(electronVersion, releaseCandidates()));
581
- const appStatus = derived(() => inElectron ? updateStatus(electronVersion, appLatest()) : "unknown");
582
- const appDownloadUrl = derived(() => electronLatestUrl ?? RELEASES_URL);
583
- const uiLatest = derived(() => latestForChannel(uiVersion, uiCandidates()));
584
- const uiStatus = derived(() => updateStatus(uiVersion, uiLatest()));
585
- const activeChannel = derived(() => channelOf(platformVersion));
586
- let notificationsEnabled = false;
587
- let replyPreviewEnabled = false;
588
- let launchOnLoginEnabled = false;
589
- function hasStatusIcon(s) {
590
- return s === "current" || s === "update";
591
- }
592
- function statusTitle(s) {
593
- return s === "current" ? "Up to date" : s === "update" ? "Update available" : "Update status unknown";
594
- }
595
- const statusText = derived(() => upgradeLoading ? "Updating OpenPalm to the latest version…" : unitInstallLoading !== null ? "Installing the selected version and restarting…" : uiDownloadLoading ? "Downloading the admin interface…" : releasesLoading || uiVersionsLoading ? "Checking for updates…" : "");
596
- $$renderer.push(`<div class="panel svelte-7mkeya" role="tabpanel"><div class="panel-header svelte-7mkeya"><div class="svelte-7mkeya"><h2 class="svelte-7mkeya">Check-up</h2> <p class="panel-subtitle svelte-7mkeya">Keep OpenPalm up to date</p> `);
597
- if (activeChannel() !== "unknown") {
598
- $$renderer.push("<!--[0-->");
599
- $$renderer.push(`<p class="channel-indicator svelte-7mkeya">You're on the <strong class="svelte-7mkeya">${escape_html(activeChannel() === "prerelease" ? "prerelease" : "stable")}</strong> channel. `);
600
- if (activeChannel() === "prerelease") {
601
- $$renderer.push("<!--[0-->");
602
- $$renderer.push(`Prereleases get new features early and may be less stable.`);
603
- } else {
604
- $$renderer.push("<!--[-1-->");
605
- $$renderer.push(`You'll only be offered stable releases.`);
606
- }
607
- $$renderer.push(`<!--]--></p>`);
608
- } else $$renderer.push("<!--[-1-->");
609
- $$renderer.push(`<!--]--></div> <button class="btn btn-sm btn-secondary refresh-releases svelte-7mkeya"${attr("disabled", releasesLoading || uiVersionsLoading, true)}${attr("aria-busy", releasesLoading || uiVersionsLoading)} title="Check for newer versions">`);
610
- if (releasesLoading || uiVersionsLoading) {
611
- $$renderer.push("<!--[0-->");
612
- Spinner($$renderer, {});
613
- $$renderer.push(`<!----> Checking…`);
614
- } else {
615
- $$renderer.push("<!--[-1-->");
616
- $$renderer.push(`<svg aria-hidden="true" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="svelte-7mkeya"><path d="M23 4v6h-6" class="svelte-7mkeya"></path><path d="M1 20v-6h6" class="svelte-7mkeya"></path><path d="M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15" class="svelte-7mkeya"></path></svg> Check for updates`);
617
- }
618
- $$renderer.push(`<!--]--></button></div> <p class="status-live svelte-7mkeya" role="status" aria-live="polite">${escape_html(statusText())}</p> <div class="panel-body svelte-7mkeya"><section${attr_class("update-card svelte-7mkeya", void 0, {
619
- "update-card-ok": !servicesBehind(),
620
- "alert": servicesBehind()
621
- })} aria-labelledby="update-primary-title"><div class="update-card-text svelte-7mkeya">`);
622
- if (servicesBehind()) {
623
- $$renderer.push("<!--[0-->");
624
- $$renderer.push(`<h3 id="update-primary-title" class="update-title svelte-7mkeya">Your services are on ${escape_html(formatVersionForDisplay(stackVersion()) || "—")} — update to ${escape_html(formatVersionForDisplay(latestImageTag ?? platformVersion) || "the latest version")}</h3> <p class="update-desc svelte-7mkeya">Brings every stack service up to the version of OpenPalm you're running. Your settings
625
- are backed up first, then your assistant restarts — offline for about a minute. Your data is kept.</p>`);
626
- } else {
627
- $$renderer.push("<!--[-1-->");
628
- $$renderer.push(`<h3 id="update-primary-title" class="update-title svelte-7mkeya">You're up to date</h3> <p class="update-desc svelte-7mkeya">Every service matches the latest available version (${escape_html(formatVersionForDisplay(latestImageTag ?? platformVersion) || "the current version")}).
629
- An update backs up your settings first, then briefly restarts your assistant.</p>`);
630
- }
402
+ let uiBuildTag = "";
403
+ let uiBuildBusy = false;
404
+ const statusText = derived(() => "Loading versions…");
405
+ $$renderer.push(`<div class="panel" role="tabpanel"><div class="panel-header"><div><h2>Versions</h2> <p class="panel-subtitle">Pin the version of each container image and bundled tool.</p> <p class="control-plane-line svelte-7mkeya">Control plane: <strong class="svelte-7mkeya">${escape_html("—")}</strong></p></div></div> <p class="status-live svelte-7mkeya" role="status" aria-live="polite">${escape_html(statusText())}</p> <div class="panel-body">`);
406
+ $$renderer.push("<!--[-1-->");
631
407
  $$renderer.push(`<!--]--> `);
632
- if (harnessUpdateAvailable) {
633
- $$renderer.push("<!--[0-->");
634
- $$renderer.push(`<p class="update-harness-note svelte-7mkeya" role="status">A new version of the OpenPalm app is available — this one updates by <strong class="svelte-7mkeya">re-downloading the app</strong>,
635
- not in place. `);
636
- if (inElectron && electronLatestUrl) {
637
- $$renderer.push("<!--[0-->");
638
- $$renderer.push(`<a${attr("href", electronLatestUrl)} target="_blank" rel="noopener noreferrer" class="svelte-7mkeya">Download it</a>.`);
639
- } else {
640
- $$renderer.push("<!--[-1-->");
641
- $$renderer.push(`Download the latest release to update.`);
642
- }
643
- $$renderer.push(`<!--]--></p>`);
644
- } else $$renderer.push("<!--[-1-->");
645
- $$renderer.push(`<!--]--></div> <button class="btn btn-primary update-go svelte-7mkeya"${attr("disabled", anyDangerousLoading || !tokenStored, true)}${attr("aria-busy", upgradeLoading)}>`);
646
- if (upgradeLoading) {
647
- $$renderer.push("<!--[0-->");
648
- Spinner($$renderer, {});
649
- $$renderer.push(`<!----> Updating…`);
650
- } else if (servicesBehind()) {
651
- $$renderer.push("<!--[1-->");
652
- $$renderer.push(`Update now`);
653
- } else {
654
- $$renderer.push("<!--[-1-->");
655
- $$renderer.push(`Check &amp; update`);
656
- }
657
- $$renderer.push(`<!--]--></button></section> <div class="versions-group svelte-7mkeya" aria-labelledby="versions-platform-title"><h3 id="versions-platform-title" class="versions-group-title svelte-7mkeya">OpenPalm ${escape_html(formatVersionForDisplay(platformVersion) || "—")} <span class="versions-group-sub svelte-7mkeya">control plane</span></h3></div> <dl class="versions svelte-7mkeya"><div class="versions-subhead svelte-7mkeya"><dt class="svelte-7mkeya">Services</dt><dd class="svelte-7mkeya"></dd></div> <!--[-->`);
658
- const each_array = ensure_array_like(serviceRows());
659
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
660
- let s = each_array[$$index];
661
- $$renderer.push(`<div class="versions-row svelte-7mkeya"><dt class="svelte-7mkeya">${escape_html(s.label)}</dt> <dd class="svelte-7mkeya"><span class="version-cell svelte-7mkeya"><code${attr_class(`version-value status-${stringify(s.status)}`, "svelte-7mkeya")}>${escape_html(formatVersionForDisplay(s.version) || "—")}</code> `);
662
- if (hasStatusIcon(s.status)) {
663
- $$renderer.push("<!--[0-->");
664
- $$renderer.push(`<span class="status-icon svelte-7mkeya"${attr("aria-label", statusTitle(s.status))}${attr("title", statusTitle(s.status))}>`);
665
- if (s.status === "current") {
666
- $$renderer.push("<!--[0-->");
667
- IconDone($$renderer, { size: 13 });
668
- } else {
669
- $$renderer.push("<!--[-1-->");
670
- IconCloudDownload($$renderer, { size: 13 });
671
- }
672
- $$renderer.push(`<!--]--></span>`);
673
- } else $$renderer.push("<!--[-1-->");
674
- $$renderer.push(`<!--]--></span> `);
675
- if (s.status === "update") {
676
- $$renderer.push("<!--[0-->");
677
- $$renderer.push(`<button class="btn btn-sm btn-secondary version-action svelte-7mkeya"${attr("disabled", anyDangerousLoading || !tokenStored, true)}${attr("aria-busy", upgradeLoading)}>`);
678
- if (upgradeLoading) {
679
- $$renderer.push("<!--[0-->");
680
- Spinner($$renderer, {});
681
- $$renderer.push(`<!----> Updating…`);
682
- } else {
683
- $$renderer.push("<!--[-1-->");
684
- $$renderer.push(`Update to ${escape_html(formatVersionForDisplay(s.latestVersion ?? latestImageTag ?? platformVersion))}`);
685
- }
686
- $$renderer.push(`<!--]--></button>`);
687
- } else $$renderer.push("<!--[-1-->");
688
- $$renderer.push(`<!--]--></dd></div>`);
689
- }
690
- $$renderer.push(`<!--]--> <div class="versions-subhead svelte-7mkeya"><dt class="svelte-7mkeya">App</dt><dd class="svelte-7mkeya"></dd></div> <div class="versions-row svelte-7mkeya"><dt class="svelte-7mkeya">OpenPalm App</dt> <dd class="svelte-7mkeya"><span class="version-cell svelte-7mkeya"><code${attr_class(`version-value status-${stringify(appStatus())}`, "svelte-7mkeya")}>${escape_html(formatVersionForDisplay(electronVersion) || "—")}</code> `);
691
- if (hasStatusIcon(appStatus())) {
692
- $$renderer.push("<!--[0-->");
693
- $$renderer.push(`<span class="status-icon svelte-7mkeya"${attr("aria-label", statusTitle(appStatus()))}${attr("title", statusTitle(appStatus()))}>`);
694
- if (appStatus() === "current") {
695
- $$renderer.push("<!--[0-->");
696
- IconDone($$renderer, { size: 13 });
697
- } else {
698
- $$renderer.push("<!--[-1-->");
699
- IconCloudDownload($$renderer, { size: 13 });
700
- }
701
- $$renderer.push(`<!--]--></span>`);
702
- } else $$renderer.push("<!--[-1-->");
703
- $$renderer.push(`<!--]--></span> `);
704
- if (appStatus() === "update") {
705
- $$renderer.push("<!--[0-->");
706
- $$renderer.push(`<a class="btn btn-sm btn-secondary version-action svelte-7mkeya"${attr("href", appDownloadUrl())} target="_blank" rel="noopener noreferrer">Download ${escape_html(formatVersionForDisplay(appLatest()))}</a>`);
707
- } else $$renderer.push("<!--[-1-->");
708
- $$renderer.push(`<!--]--></dd></div> <div class="versions-row svelte-7mkeya"><dt class="svelte-7mkeya">Admin interface</dt> <dd class="svelte-7mkeya"><span class="version-cell svelte-7mkeya"><code${attr_class(`version-value status-${stringify(uiStatus())}`, "svelte-7mkeya")}>${escape_html(formatVersionForDisplay(uiVersion) || "—")}</code> `);
709
- if (hasStatusIcon(uiStatus())) {
710
- $$renderer.push("<!--[0-->");
711
- $$renderer.push(`<span class="status-icon svelte-7mkeya"${attr("aria-label", statusTitle(uiStatus()))}${attr("title", statusTitle(uiStatus()))}>`);
712
- if (uiStatus() === "current") {
713
- $$renderer.push("<!--[0-->");
714
- IconDone($$renderer, { size: 13 });
715
- } else {
716
- $$renderer.push("<!--[-1-->");
717
- IconCloudDownload($$renderer, { size: 13 });
718
- }
719
- $$renderer.push(`<!--]--></span>`);
720
- } else $$renderer.push("<!--[-1-->");
721
- $$renderer.push(`<!--]--></span> `);
722
- if (uiStatus() === "update") {
723
- $$renderer.push("<!--[0-->");
724
- if (uiDownloadRestarting) {
725
- $$renderer.push("<!--[0-->");
726
- $$renderer.push(`<span class="version-action-note svelte-7mkeya" role="status">`);
727
- Spinner($$renderer, {});
728
- $$renderer.push(`<!----> Admin interface updated — reconnecting…</span>`);
729
- } else if (uiDownloadReady) {
730
- $$renderer.push("<!--[1-->");
731
- $$renderer.push(`<span class="version-action-note svelte-7mkeya">Downloaded. `);
732
- if (inElectron) {
733
- $$renderer.push("<!--[0-->");
734
- $$renderer.push(`<button class="btn btn-sm btn-primary svelte-7mkeya">Restart app</button>`);
735
- } else {
736
- $$renderer.push("<!--[-1-->");
737
- $$renderer.push(`Restart OpenPalm to apply.`);
738
- }
739
- $$renderer.push(`<!--]--></span>`);
740
- } else {
741
- $$renderer.push("<!--[-1-->");
742
- $$renderer.push(`<button class="btn btn-sm btn-secondary version-action svelte-7mkeya"${attr("disabled", uiDownloadLoading || !uiLatest(), true)}${attr("aria-busy", uiDownloadLoading)}>`);
743
- if (uiDownloadLoading) {
744
- $$renderer.push("<!--[0-->");
745
- Spinner($$renderer, {});
746
- $$renderer.push(`<!----> Downloading…`);
747
- } else {
748
- $$renderer.push("<!--[-1-->");
749
- $$renderer.push(`Download ${escape_html(formatVersionForDisplay(uiLatest()))}`);
750
- }
751
- $$renderer.push(`<!--]--></button>`);
752
- }
753
- $$renderer.push(`<!--]-->`);
754
- } else $$renderer.push("<!--[-1-->");
755
- $$renderer.push(`<!--]--></dd></div></dl> <section class="version-pin-section svelte-7mkeya" aria-labelledby="stack-pin-title"><div class="version-pin-header svelte-7mkeya"><h3 id="stack-pin-title" class="version-pin-title svelte-7mkeya">Stack images</h3> <p class="version-pin-subtitle svelte-7mkeya">Install a specific version per unit — roll a single image back to a known-good release or pin it to a tested build.
756
- Each unit is released independently.</p></div> <!--[-->`);
757
- const each_array_1 = ensure_array_like(unitRows());
758
- for (let $$index_2 = 0, $$length = each_array_1.length; $$index_2 < $$length; $$index_2++) {
759
- let row = each_array_1[$$index_2];
760
- $$renderer.push(`<div class="version-section version-unit-row svelte-7mkeya"><div class="version-unit-head svelte-7mkeya"><label class="version-label svelte-7mkeya"${attr("for", `unit-version-select-${stringify(row.unit)}`)}>${escape_html(row.service.label)}</label> <span class="version-cell svelte-7mkeya"><code${attr_class(`version-value status-${stringify(row.service.status)}`, "svelte-7mkeya")}>${escape_html(formatVersionForDisplay(row.service.version) || "—")}</code> `);
761
- if (hasStatusIcon(row.service.status)) {
762
- $$renderer.push("<!--[0-->");
763
- $$renderer.push(`<span class="status-icon svelte-7mkeya"${attr("aria-label", statusTitle(row.service.status))}${attr("title", statusTitle(row.service.status))}>`);
764
- if (row.service.status === "current") {
765
- $$renderer.push("<!--[0-->");
766
- IconDone($$renderer, { size: 13 });
767
- } else {
768
- $$renderer.push("<!--[-1-->");
769
- IconCloudDownload($$renderer, { size: 13 });
770
- }
771
- $$renderer.push(`<!--]--></span>`);
772
- } else $$renderer.push("<!--[-1-->");
773
- $$renderer.push(`<!--]--></span></div> <div class="version-input-row svelte-7mkeya">`);
774
- if (releasesLoading) {
775
- $$renderer.push("<!--[0-->");
776
- $$renderer.push(`<div class="version-select-skeleton svelte-7mkeya"></div>`);
777
- } else if (row.tags.length > 0) {
778
- $$renderer.push("<!--[1-->");
779
- $$renderer.select({
780
- id: `unit-version-select-${stringify(row.unit)}`,
781
- class: "version-select",
782
- "aria-label": `${stringify(row.service.label)} version to install`,
783
- value: unitSelectedTag(row.unit),
784
- onchange: (e) => setUnitSelectedTag(row.unit, e.currentTarget.value),
785
- disabled: unitInstallLoading !== null || anyDangerousLoading
786
- }, ($$renderer) => {
787
- $$renderer.option({
788
- value: "latest",
789
- class: ""
790
- }, ($$renderer) => {
791
- $$renderer.push(`latest`);
792
- }, "svelte-7mkeya");
793
- $$renderer.push(`<!--[-->`);
794
- const each_array_2 = ensure_array_like(row.tags);
795
- for (let $$index_1 = 0, $$length = each_array_2.length; $$index_1 < $$length; $$index_1++) {
796
- let tag = each_array_2[$$index_1];
797
- $$renderer.option({
798
- value: tag,
799
- class: ""
800
- }, ($$renderer) => {
801
- $$renderer.push(`${escape_html(tag)}`);
802
- }, "svelte-7mkeya");
803
- }
804
- $$renderer.push(`<!--]-->`);
805
- }, "svelte-7mkeya");
806
- } else {
807
- $$renderer.push("<!--[-1-->");
808
- $$renderer.push(`<input${attr("id", `unit-version-select-${stringify(row.unit)}`)} class="version-input svelte-7mkeya" type="text"${attr("aria-label", `${stringify(row.service.label)} version to install`)} placeholder="e.g. 0.12.5 or latest"${attr("value", unitSelectedTag(row.unit))}${attr("disabled", unitInstallLoading !== null || anyDangerousLoading, true)}/>`);
809
- }
810
- $$renderer.push(`<!--]--> <button class="btn btn-sm btn-secondary svelte-7mkeya"${attr("disabled", !unitSelectedTag(row.unit).trim() || unitInstallLoading !== null || anyDangerousLoading, true)}${attr("aria-busy", unitInstallLoading === row.unit)}>`);
811
- if (unitInstallLoading === row.unit) {
812
- $$renderer.push("<!--[0-->");
813
- Spinner($$renderer, {});
814
- $$renderer.push(`<!----> Installing…`);
815
- } else {
816
- $$renderer.push("<!--[-1-->");
817
- $$renderer.push(`Install &amp; restart`);
818
- }
819
- $$renderer.push(`<!--]--></button></div> <p class="version-hint svelte-7mkeya">Pins the ${escape_html(row.service.label.toLowerCase())} image and restarts services (about a minute offline).</p> `);
820
- if (unitDowngradePrompt && unitDowngradePrompt.unit === row.unit) {
821
- $$renderer.push("<!--[0-->");
822
- $$renderer.push(`<div class="downgrade-warning svelte-7mkeya" role="alertdialog" aria-label="Confirm downgrade"><p class="downgrade-warning-title svelte-7mkeya">This is a downgrade.</p> <p class="svelte-7mkeya">You're moving ${escape_html(row.service.label)} from ${escape_html(unitDowngradePrompt.currentVersion)} back to ${escape_html(unitDowngradePrompt.targetVersion)}.
823
- Release migrations don't run backward; your data may not be compatible with the older
824
- version — restore from a backup if needed.</p> <div class="downgrade-actions svelte-7mkeya"><button class="btn btn-sm btn-secondary svelte-7mkeya"${attr("disabled", unitInstallLoading !== null, true)}>Cancel</button> <button class="btn btn-sm btn-danger svelte-7mkeya"${attr("disabled", unitInstallLoading !== null, true)}${attr("aria-busy", unitInstallLoading === row.unit)}>`);
825
- if (unitInstallLoading === row.unit) {
826
- $$renderer.push("<!--[0-->");
827
- Spinner($$renderer, {});
828
- $$renderer.push(`<!----> Downgrading…`);
829
- } else {
830
- $$renderer.push("<!--[-1-->");
831
- $$renderer.push(`Downgrade anyway`);
832
- }
833
- $$renderer.push(`<!--]--></button></div></div>`);
834
- } else $$renderer.push("<!--[-1-->");
835
- $$renderer.push(`<!--]--></div>`);
836
- }
408
+ $$renderer.push("<!--[0-->");
409
+ $$renderer.push(`<p class="loading-line svelte-7mkeya">`);
410
+ Spinner($$renderer, {});
411
+ $$renderer.push(`<!----> Loading versions…</p>`);
412
+ $$renderer.push(`<!--]--> <section class="version-group svelte-7mkeya" aria-labelledby="ui-build-title"><h3 id="ui-build-title" class="version-group-title svelte-7mkeya">Admin UI build</h3> <p class="version-group-subtitle svelte-7mkeya">Install a specific <code>@openpalm/ui</code> npm version. The new build takes effect after the
413
+ admin UI restarts — done automatically in the desktop app; reload the page otherwise.</p> <div class="ui-build-row svelte-7mkeya"><label class="version-label svelte-7mkeya" for="ui-build-tag">Version tag</label> <input id="ui-build-tag" class="version-input svelte-7mkeya" type="text" autocomplete="off" spellcheck="false" placeholder="e.g. 0.12.19 or latest"${attr("value", uiBuildTag)}${attr("disabled", uiBuildBusy, true)}/> <button class="btn btn-secondary svelte-7mkeya"${attr("disabled", !uiBuildTag.trim(), true)}${attr("aria-busy", uiBuildBusy)}>`);
414
+ $$renderer.push("<!--[-1-->");
415
+ $$renderer.push(`Install`);
416
+ $$renderer.push(`<!--]--></button></div> `);
417
+ $$renderer.push("<!--[-1-->");
837
418
  $$renderer.push(`<!--]--></section> `);
838
- if (inElectron) {
839
- $$renderer.push("<!--[0-->");
840
- $$renderer.push(`<section class="version-pin-section svelte-7mkeya" aria-labelledby="ui-pin-title"><div class="version-pin-header svelte-7mkeya"><h3 id="ui-pin-title" class="version-pin-title svelte-7mkeya">Admin interface</h3> <p class="version-pin-subtitle svelte-7mkeya">Install a specific build of the admin interface — useful for testing a pre-release or rolling back after an update.</p></div> <div class="version-section svelte-7mkeya"><label class="version-label svelte-7mkeya" for="ui-version-select">Version</label> <div class="version-input-row svelte-7mkeya">`);
841
- if (uiVersionsLoading) {
842
- $$renderer.push("<!--[0-->");
843
- $$renderer.push(`<div class="version-select-skeleton svelte-7mkeya"></div>`);
844
- } else if (uiVersions.length > 0) {
845
- $$renderer.push("<!--[1-->");
846
- $$renderer.select({
847
- id: "ui-version-select",
848
- class: "version-select",
849
- "aria-label": "Admin interface version to download",
850
- value: selectedUiTag,
851
- onchange: (e) => onSelectedUiTagChange(e.currentTarget.value),
852
- disabled: uiDownloadLoading
853
- }, ($$renderer) => {
854
- $$renderer.push(`<!--[-->`);
855
- const each_array_3 = ensure_array_like(uiVersions);
856
- for (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) {
857
- let v = each_array_3[$$index_3];
858
- $$renderer.option({
859
- value: v.version,
860
- class: ""
861
- }, ($$renderer) => {
862
- $$renderer.push(`${escape_html(uiVersionLabel(v))}`);
863
- }, "svelte-7mkeya");
864
- }
865
- $$renderer.push(`<!--]-->`);
866
- }, "svelte-7mkeya");
867
- } else {
868
- $$renderer.push("<!--[-1-->");
869
- $$renderer.push(`<input id="ui-version-select" class="version-input svelte-7mkeya" type="text" aria-label="Admin interface version to download" placeholder="e.g. 0.11.0-beta.7"${attr("value", selectedUiTag)}${attr("disabled", uiDownloadLoading, true)}/>`);
870
- }
871
- $$renderer.push(`<!--]--> <button class="btn btn-sm btn-secondary svelte-7mkeya"${attr("disabled", !selectedUiTag.trim() || uiDownloadLoading, true)}${attr("aria-busy", uiDownloadLoading)}>`);
872
- if (uiDownloadLoading) {
873
- $$renderer.push("<!--[0-->");
874
- Spinner($$renderer, {});
875
- $$renderer.push(`<!----> Downloading…`);
876
- } else {
877
- $$renderer.push("<!--[-1-->");
878
- $$renderer.push(`Download`);
879
- }
880
- $$renderer.push(`<!--]--></button></div> `);
881
- if (uiDownloadRestarting) {
882
- $$renderer.push("<!--[0-->");
883
- $$renderer.push(`<div class="version-restart-prompt svelte-7mkeya" role="status">`);
884
- Spinner($$renderer, {});
885
- $$renderer.push(`<!----> Admin interface updated — reconnecting…</div>`);
886
- } else if (uiDownloadReady) {
887
- $$renderer.push("<!--[1-->");
888
- $$renderer.push(`<div class="version-restart-prompt svelte-7mkeya">Admin interface updated. <button class="btn btn-sm btn-primary svelte-7mkeya">Restart app</button></div>`);
889
- } else {
890
- $$renderer.push("<!--[-1-->");
891
- $$renderer.push(`<p class="version-hint svelte-7mkeya">Downloads and replaces the admin interface. Takes effect after restart.</p>`);
892
- }
893
- $$renderer.push(`<!--]--></div></section>`);
894
- } else $$renderer.push("<!--[-1-->");
895
- $$renderer.push(`<!--]--> `);
896
- if (inElectron) {
897
- $$renderer.push("<!--[0-->");
898
- $$renderer.push(`<section class="desktop-settings svelte-7mkeya" aria-labelledby="desktop-settings-title"><h3 id="desktop-settings-title" class="desktop-settings-title svelte-7mkeya">Desktop settings</h3> <div class="desktop-setting-row svelte-7mkeya"><div class="version-label svelte-7mkeya">Launch on login</div> <label class="desktop-toggle svelte-7mkeya"><input type="checkbox"${attr("checked", launchOnLoginEnabled, true)}${attr("disabled", true, true)} class="svelte-7mkeya"/> <span class="svelte-7mkeya">Start OpenPalm automatically when you sign in on this device.</span></label> <p class="version-hint svelte-7mkeya">`);
899
- $$renderer.push("<!--[-1-->");
900
- $$renderer.push(`Not wired on this platform yet. The current desktop build only exposes this safely on macOS and Windows.`);
901
- $$renderer.push(`<!--]--></p></div> <div class="desktop-setting-row svelte-7mkeya"><div class="version-label svelte-7mkeya">Desktop notifications</div> `);
902
- if (typeof window !== "undefined" && typeof window.openpalm?.notify === "function") {
903
- $$renderer.push("<!--[0-->");
904
- $$renderer.push(`<label class="desktop-toggle svelte-7mkeya"><input type="checkbox"${attr("checked", notificationsEnabled, true)} class="svelte-7mkeya"/> <span class="svelte-7mkeya">Notify when the assistant replies or errors while the app is in the background.</span></label> <label class="desktop-toggle desktop-toggle--nested svelte-7mkeya"><input type="checkbox"${attr("checked", replyPreviewEnabled, true)}${attr("disabled", true, true)} class="svelte-7mkeya"/> <span class="svelte-7mkeya">Include reply preview in the notification body.</span></label> <p class="version-hint svelte-7mkeya">Reply previews stay off by default because desktop notifications can persist outside the app.</p>`);
905
- } else {
906
- $$renderer.push("<!--[-1-->");
907
- $$renderer.push(`<label class="desktop-toggle svelte-7mkeya"><input type="checkbox" disabled="" class="svelte-7mkeya"/> <span class="svelte-7mkeya">Notify when the assistant replies or errors while the app is in the background.</span></label> <label class="desktop-toggle desktop-toggle--nested svelte-7mkeya"><input type="checkbox" disabled="" class="svelte-7mkeya"/> <span class="svelte-7mkeya">Include reply preview in the notification body.</span></label> <p class="version-hint svelte-7mkeya">Desktop notifications are available in the OpenPalm desktop app.</p>`);
908
- }
909
- $$renderer.push(`<!--]--></div></section>`);
910
- } else $$renderer.push("<!--[-1-->");
419
+ $$renderer.push("<!--[-1-->");
911
420
  $$renderer.push(`<!--]--></div></div>`);
912
421
  });
913
422
  }
@@ -3524,11 +3033,9 @@ function VoiceTab($$renderer, $$props) {
3524
3033
  function _page($$renderer, $$props) {
3525
3034
  $$renderer.component(($$renderer) => {
3526
3035
  let healthLoading = false;
3527
- let upgradeLoading = false;
3036
+ let applyLoading = false;
3528
3037
  let containersLoading = false;
3529
3038
  let automationsLoading = false;
3530
- let operationResult = "";
3531
- let operationResultType = "info";
3532
3039
  let containerData = null;
3533
3040
  let containerError = "";
3534
3041
  let containersLastUpdated = null;
@@ -3536,31 +3043,9 @@ function _page($$renderer, $$props) {
3536
3043
  let automationsError = "";
3537
3044
  let selectedContainerId = null;
3538
3045
  let activeTab = "overview";
3539
- let currentImageTag = "";
3540
- let services = [];
3541
- let inElectron = false;
3542
- let electronVersion = null;
3543
- let electronLatestVersion = null;
3544
- let electronLatestUrl = null;
3545
- let harnessUpdateAvailable = false;
3546
- let unitInstallLoading = null;
3547
- let unitDowngradePrompt = null;
3548
- let uiDownloadLoading = false;
3549
- let uiDownloadReady = false;
3550
- let uiDownloadRestarting = false;
3551
- let selectedUiTag = "";
3552
- let releases = [];
3553
- let unitTags = {};
3554
- let releasesLoading = false;
3555
- let platformVersion = "";
3556
- let platformLatest = null;
3557
- let latestImageTag = null;
3558
- let uiVersions = [];
3559
- let uiVersionsLoading = false;
3560
- const updateAvailable = derived(() => services.some((s) => isSemver(s.version) && isSemver(s.latestVersion ?? null) && compareVersions(s.version, s.latestVersion) < 0));
3561
3046
  onDestroy(() => {
3562
3047
  });
3563
- let anyDangerousLoading = derived(() => upgradeLoading);
3048
+ let anyDangerousLoading = derived(() => applyLoading);
3564
3049
  /** Merged service → state map (used by OverviewTab for health indicators) */
3565
3050
  let mergedServices = derived(() => {
3566
3051
  if (!containerData) return /* @__PURE__ */ new Map();
@@ -3632,132 +3117,6 @@ function _page($$renderer, $$props) {
3632
3117
  }
3633
3118
  automationsLoading = false;
3634
3119
  }
3635
- async function loadVersions() {
3636
- try {
3637
- const data = await fetchVersions();
3638
- currentImageTag = data.imageTag;
3639
- services = data.services;
3640
- inElectron = data.inElectron;
3641
- electronVersion = data.electronVersion;
3642
- electronLatestVersion = data.electronLatestVersion;
3643
- electronLatestUrl = data.electronLatestUrl;
3644
- harnessUpdateAvailable = data.harnessUpdateAvailable;
3645
- platformVersion = data.platformVersion;
3646
- platformLatest = data.platformLatest ?? null;
3647
- latestImageTag = data.latestImageTag ?? null;
3648
- unitTags = data.unitTags ?? {};
3649
- } catch {}
3650
- }
3651
- async function loadReleases() {
3652
- releasesLoading = true;
3653
- uiVersionsLoading = true;
3654
- try {
3655
- const [releaseData, uiData] = await Promise.all([fetchReleases(), fetchUiVersions()]);
3656
- releases = releaseData.releases;
3657
- uiVersions = uiData.versions;
3658
- if (!selectedUiTag) {
3659
- const channelPick = uiData.versions.find((v) => v.distTag === "next" || v.distTag === "latest") ?? uiData.versions[0];
3660
- if (channelPick) selectedUiTag = channelPick.version;
3661
- }
3662
- } catch {}
3663
- releasesLoading = false;
3664
- uiVersionsLoading = false;
3665
- }
3666
- /** "Check for updates" button: invalidate server-side caches, then re-fetch
3667
- * versions (Docker Hub tags + npm platform latest) + releases (GitHub app
3668
- * releases) + UI versions (npm @openpalm/ui) in parallel. The invalidate
3669
- * call runs first so the GETs see a cold cache and hit the upstreams once. */
3670
- async function handleRefreshReleases() {
3671
- releasesLoading = true;
3672
- uiVersionsLoading = true;
3673
- await invalidateVersionCache();
3674
- await Promise.all([loadVersions(), loadReleases()]);
3675
- }
3676
- async function handleUpgradeStack() {
3677
- if (anyDangerousLoading()) return;
3678
- upgradeLoading = true;
3679
- try {
3680
- const result = await upgradeStack();
3681
- operationResult = `Upgrade complete (image: ${result.imageTag}). ${result.assetsUpdated.length} asset(s) updated, ${result.restarted.length} service(s) restarted.`;
3682
- operationResultType = "success";
3683
- } catch (e) {
3684
- const err = e;
3685
- if (err.status === 401) applyInvalidTokenState();
3686
- else {
3687
- operationResult = `Error upgrading stack: ${err.message ?? e}`;
3688
- operationResultType = "error";
3689
- }
3690
- }
3691
- upgradeLoading = false;
3692
- }
3693
- async function handleSetUnitImageTag(unit, tag, confirmDowngrade = false) {
3694
- if (unitInstallLoading !== null) return;
3695
- unitInstallLoading = unit;
3696
- try {
3697
- const result = await setUnitImageTag(unit, tag, { confirmDowngrade });
3698
- operationResult = `${unit} image tag set to ${result.imageTag}. Restarted: ${result.restarted.join(", ") || "none"}.`;
3699
- operationResultType = "success";
3700
- unitDowngradePrompt = null;
3701
- await loadVersions();
3702
- } catch (e) {
3703
- if (e instanceof DowngradeConfirmationRequiredError) unitDowngradePrompt = {
3704
- unit,
3705
- tag,
3706
- currentVersion: e.currentVersion,
3707
- targetVersion: e.targetVersion,
3708
- message: e.message
3709
- };
3710
- else {
3711
- operationResult = `Failed to apply ${unit} image tag: ${e.message ?? e}`;
3712
- operationResultType = "error";
3713
- }
3714
- }
3715
- unitInstallLoading = null;
3716
- }
3717
- function handleConfirmUnitDowngrade() {
3718
- if (!unitDowngradePrompt) return;
3719
- handleSetUnitImageTag(unitDowngradePrompt.unit, unitDowngradePrompt.tag, true);
3720
- }
3721
- function handleCancelUnitDowngrade() {
3722
- unitDowngradePrompt = null;
3723
- }
3724
- async function handleDownloadUiVersion(tag) {
3725
- if (uiDownloadLoading) return;
3726
- uiDownloadLoading = true;
3727
- uiDownloadReady = false;
3728
- uiDownloadRestarting = false;
3729
- try {
3730
- const result = await downloadUiVersion(tag);
3731
- selectedUiTag = tag;
3732
- uiDownloadReady = true;
3733
- if (result.restarting) {
3734
- uiDownloadRestarting = true;
3735
- waitForUiServerAndReload();
3736
- }
3737
- } catch (e) {
3738
- operationResult = `Failed to download UI version: ${e.message ?? e}`;
3739
- operationResultType = "error";
3740
- }
3741
- uiDownloadLoading = false;
3742
- }
3743
- async function waitForUiServerAndReload() {
3744
- const deadline = Date.now() + 3e4;
3745
- await new Promise((r) => setTimeout(r, 1500));
3746
- while (Date.now() < deadline) {
3747
- try {
3748
- const res = await fetch("/health", { signal: AbortSignal.timeout(1e3) });
3749
- if (res.ok || res.status === 401) {
3750
- window.location.reload();
3751
- return;
3752
- }
3753
- } catch {}
3754
- await new Promise((r) => setTimeout(r, 750));
3755
- }
3756
- uiDownloadRestarting = false;
3757
- }
3758
- function handleRestartApp() {
3759
- window.openpalm?.restart?.();
3760
- }
3761
3120
  /** Derive service names from container data for the logs tab */
3762
3121
  let serviceNames = derived(() => {
3763
3122
  if (!containerData) return [];
@@ -3780,19 +3139,12 @@ function _page($$renderer, $$props) {
3780
3139
  });
3781
3140
  Navbar($$renderer);
3782
3141
  $$renderer.push(`<!----> `);
3783
- if (updateAvailable() && activeTab !== "updates") {
3784
- $$renderer.push("<!--[0-->");
3785
- $$renderer.push(`<div class="update-banner svelte-1jef3w8" role="status"><span class="update-banner-text svelte-1jef3w8">An OpenPalm update is available.</span> <button class="update-banner-action svelte-1jef3w8">Review it</button></div>`);
3786
- } else $$renderer.push("<!--[-1-->");
3787
- $$renderer.push(`<!--]--> `);
3788
3142
  TabBar($$renderer, {
3789
3143
  active: activeTab});
3790
3144
  $$renderer.push(`<!----> <main class="svelte-1jef3w8">`);
3791
3145
  if (activeTab === "overview") {
3792
3146
  $$renderer.push("<!--[0-->");
3793
3147
  OverviewTab($$renderer, {
3794
- operationResult,
3795
- operationResultType,
3796
3148
  healthLoading,
3797
3149
  anyDangerousLoading: anyDangerousLoading(),
3798
3150
  mergedServices: mergedServices(),
@@ -3801,43 +3153,7 @@ function _page($$renderer, $$props) {
3801
3153
  });
3802
3154
  } else if (activeTab === "updates") {
3803
3155
  $$renderer.push("<!--[1-->");
3804
- UpdatesTab($$renderer, {
3805
- currentImageTag,
3806
- services,
3807
- anyDangerousLoading: anyDangerousLoading(),
3808
- tokenStored: true,
3809
- upgradeLoading,
3810
- inElectron,
3811
- electronVersion,
3812
- electronLatestVersion,
3813
- electronLatestUrl,
3814
- harnessUpdateAvailable,
3815
- uiVersion: version,
3816
- uiVersions,
3817
- uiVersionsLoading,
3818
- selectedUiTag,
3819
- uiDownloadLoading,
3820
- uiDownloadReady,
3821
- uiDownloadRestarting,
3822
- releases,
3823
- unitTags,
3824
- releasesLoading,
3825
- platformVersion,
3826
- platformLatest,
3827
- latestImageTag,
3828
- unitInstallLoading,
3829
- unitDowngradePrompt,
3830
- onSetUnitImageTag: (unit, tag) => handleSetUnitImageTag(unit, tag),
3831
- onConfirmUnitDowngrade: handleConfirmUnitDowngrade,
3832
- onCancelUnitDowngrade: handleCancelUnitDowngrade,
3833
- onUpgradeStack: handleUpgradeStack,
3834
- onSelectedUiTagChange: (t) => {
3835
- selectedUiTag = t;
3836
- },
3837
- onDownloadUiVersion: handleDownloadUiVersion,
3838
- onRestartApp: handleRestartApp,
3839
- onRefreshReleases: handleRefreshReleases
3840
- });
3156
+ UpdatesTab($$renderer);
3841
3157
  } else if (activeTab === "recovery") {
3842
3158
  $$renderer.push("<!--[2-->");
3843
3159
  RecoveryTab($$renderer);
@@ -3894,4 +3210,4 @@ function _page($$renderer, $$props) {
3894
3210
  }
3895
3211
 
3896
3212
  export { _page as default };
3897
- //# sourceMappingURL=_page.svelte-WYgjKj38.js.map
3213
+ //# sourceMappingURL=_page.svelte-D6dWiRVl.js.map