@openpalm/ui 0.12.0-rc.1 → 0.12.0-rc.3

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 (345) hide show
  1. package/build/.openpalm-ui-version +1 -1
  2. package/build/client/_app/immutable/assets/4.4BLkUSeP.css +1 -0
  3. package/build/client/_app/immutable/assets/4.4BLkUSeP.css.br +0 -0
  4. package/build/client/_app/immutable/assets/4.4BLkUSeP.css.gz +0 -0
  5. package/build/client/_app/immutable/chunks/{C5EI77dn.js → 37oeDbOM.js} +1 -1
  6. package/build/client/_app/immutable/chunks/37oeDbOM.js.br +0 -0
  7. package/build/client/_app/immutable/chunks/{C5EI77dn.js.gz → 37oeDbOM.js.gz} +0 -0
  8. package/build/client/_app/immutable/chunks/{D6NbA5vY.js → BMMTxmQF.js} +2 -2
  9. package/build/client/_app/immutable/chunks/BMMTxmQF.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/BMMTxmQF.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/D7U2TZGX.js +5 -0
  12. package/build/client/_app/immutable/chunks/D7U2TZGX.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/D7U2TZGX.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/{BihYGk9Y.js → DhPCzSpa.js} +1 -1
  15. package/build/client/_app/immutable/chunks/DhPCzSpa.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/DhPCzSpa.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/HlgKB0Yv.js +1 -0
  18. package/build/client/_app/immutable/chunks/HlgKB0Yv.js.br +2 -0
  19. package/build/client/_app/immutable/chunks/HlgKB0Yv.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/qjfxE7Kl.js +1 -0
  21. package/build/client/_app/immutable/chunks/qjfxE7Kl.js.br +0 -0
  22. package/build/client/_app/immutable/chunks/qjfxE7Kl.js.gz +0 -0
  23. package/build/client/_app/immutable/entry/{app.D4HjSNXN.js → app.D_h1885H.js} +2 -2
  24. package/build/client/_app/immutable/entry/app.D_h1885H.js.br +0 -0
  25. package/build/client/_app/immutable/entry/app.D_h1885H.js.gz +0 -0
  26. package/build/client/_app/immutable/entry/start.KkDWne9K.js +1 -0
  27. package/build/client/_app/immutable/entry/start.KkDWne9K.js.br +0 -0
  28. package/build/client/_app/immutable/entry/start.KkDWne9K.js.gz +0 -0
  29. package/build/client/_app/immutable/nodes/{0.DEcud9DA.js → 0.CoKytf3n.js} +1 -1
  30. package/build/client/_app/immutable/nodes/0.CoKytf3n.js.br +0 -0
  31. package/build/client/_app/immutable/nodes/0.CoKytf3n.js.gz +0 -0
  32. package/build/client/_app/immutable/nodes/{1.Cv1FI9RA.js → 1.m2br4sx_.js} +1 -1
  33. package/build/client/_app/immutable/nodes/1.m2br4sx_.js.br +0 -0
  34. package/build/client/_app/immutable/nodes/1.m2br4sx_.js.gz +0 -0
  35. package/build/client/_app/immutable/nodes/4.C6POwnGO.js +130 -0
  36. package/build/client/_app/immutable/nodes/4.C6POwnGO.js.br +0 -0
  37. package/build/client/_app/immutable/nodes/4.C6POwnGO.js.gz +0 -0
  38. package/build/client/_app/immutable/nodes/{5.B_jsAXs5.js → 5.BoZ0ezyr.js} +2 -2
  39. package/build/client/_app/immutable/nodes/5.BoZ0ezyr.js.br +0 -0
  40. package/build/client/_app/immutable/nodes/5.BoZ0ezyr.js.gz +0 -0
  41. package/build/client/_app/immutable/nodes/{6.CD18u_qC.js → 6.D3HpNODC.js} +1 -1
  42. package/build/client/_app/immutable/nodes/6.D3HpNODC.js.br +0 -0
  43. package/build/client/_app/immutable/nodes/6.D3HpNODC.js.gz +0 -0
  44. package/build/client/_app/immutable/nodes/{7.BXyjSbT8.js → 7.Cldb-l42.js} +1 -1
  45. package/build/client/_app/immutable/nodes/7.Cldb-l42.js.br +0 -0
  46. package/build/client/_app/immutable/nodes/7.Cldb-l42.js.gz +0 -0
  47. package/build/client/_app/immutable/nodes/{8.CDTwcjzi.js → 8.BWkb2W3i.js} +1 -1
  48. package/build/client/_app/immutable/nodes/8.BWkb2W3i.js.br +0 -0
  49. package/build/client/_app/immutable/nodes/8.BWkb2W3i.js.gz +0 -0
  50. package/build/client/_app/version.json +1 -1
  51. package/build/client/_app/version.json.br +1 -1
  52. package/build/client/_app/version.json.gz +0 -0
  53. package/build/server/chunks/{0-u2E6UMPO.js → 0-_Ek7fSWr.js} +3 -3
  54. package/build/server/chunks/{0-u2E6UMPO.js.map → 0-_Ek7fSWr.js.map} +1 -1
  55. package/build/server/chunks/1-CvpyJciZ.js +9 -0
  56. package/build/server/chunks/{1-CVcQJtBc.js.map → 1-CvpyJciZ.js.map} +1 -1
  57. package/build/server/chunks/{10-W-ONZquv.js → 10-CX8_71GH.js} +4 -4
  58. package/build/server/chunks/{10-W-ONZquv.js.map → 10-CX8_71GH.js.map} +1 -1
  59. package/build/server/chunks/4-CGNm9qY9.js +9 -0
  60. package/build/server/chunks/{4-CTyDAO7N.js.map → 4-CGNm9qY9.js.map} +1 -1
  61. package/build/server/chunks/5-CCrG3Zq1.js +9 -0
  62. package/build/server/chunks/{5-BXILJ_BC.js.map → 5-CCrG3Zq1.js.map} +1 -1
  63. package/build/server/chunks/6-CJd5ozaP.js +9 -0
  64. package/build/server/chunks/{6-HdFbhR1m.js.map → 6-CJd5ozaP.js.map} +1 -1
  65. package/build/server/chunks/7-Bh7s1hZ3.js +9 -0
  66. package/build/server/chunks/{7-k9H-eD_d.js.map → 7-Bh7s1hZ3.js.map} +1 -1
  67. package/build/server/chunks/{8-CQmCVu_8.js → 8-CbIypXYv.js} +3 -3
  68. package/build/server/chunks/{8-CQmCVu_8.js.map → 8-CbIypXYv.js.map} +1 -1
  69. package/build/server/chunks/{ChatMessage-DfLmvrJq.js → ChatMessage-BAWjgbc_.js} +2 -2
  70. package/build/server/chunks/{ChatMessage-DfLmvrJq.js.map → ChatMessage-BAWjgbc_.js.map} +1 -1
  71. package/build/server/chunks/{Navbar-Dnxvfk10.js → Navbar-Bdk7TDAb.js} +4 -4
  72. package/build/server/chunks/{Navbar-Dnxvfk10.js.map → Navbar-Bdk7TDAb.js.map} +1 -1
  73. package/build/server/chunks/{_layout.svelte-DKvvz-xQ.js → _layout.svelte-CFKjimed.js} +2 -2
  74. package/build/server/chunks/{_layout.svelte-DKvvz-xQ.js.map → _layout.svelte-CFKjimed.js.map} +1 -1
  75. package/build/server/chunks/{_page.svelte-Dea_LGsw.js → _page.svelte-2gtLQdWF.js} +6 -6
  76. package/build/server/chunks/{_page.svelte-Dea_LGsw.js.map → _page.svelte-2gtLQdWF.js.map} +1 -1
  77. package/build/server/chunks/{_page.svelte-DnHQefg6.js → _page.svelte-CUeuGP5U.js} +7 -7
  78. package/build/server/chunks/{_page.svelte-DnHQefg6.js.map → _page.svelte-CUeuGP5U.js.map} +1 -1
  79. package/build/server/chunks/{_page.svelte-CqkvpyUV.js → _page.svelte-Cjok9-7E.js} +3 -3
  80. package/build/server/chunks/{_page.svelte-CqkvpyUV.js.map → _page.svelte-Cjok9-7E.js.map} +1 -1
  81. package/build/server/chunks/{_page.svelte-BsDNnBfz.js → _page.svelte-F2VqpLAW.js} +234 -35
  82. package/build/server/chunks/_page.svelte-F2VqpLAW.js.map +1 -0
  83. package/build/server/chunks/{_page.svelte-DMBLB7p4.js → _page.svelte-bfGTUogD.js} +6 -6
  84. package/build/server/chunks/{_page.svelte-DMBLB7p4.js.map → _page.svelte-bfGTUogD.js.map} +1 -1
  85. package/build/server/chunks/{_server.ts-BzEFvvlp.js → _server.ts-0fJZ0VmG.js} +7 -7
  86. package/build/server/chunks/{_server.ts-BzEFvvlp.js.map → _server.ts-0fJZ0VmG.js.map} +1 -1
  87. package/build/server/chunks/{_server.ts-Dbnh0OAK.js → _server.ts-2jjEL-tJ.js} +5 -5
  88. package/build/server/chunks/{_server.ts-Dbnh0OAK.js.map → _server.ts-2jjEL-tJ.js.map} +1 -1
  89. package/build/server/chunks/{_server.ts-BsgERSUa.js → _server.ts-2qYNEWJW.js} +5 -5
  90. package/build/server/chunks/{_server.ts-BsgERSUa.js.map → _server.ts-2qYNEWJW.js.map} +1 -1
  91. package/build/server/chunks/{_server.ts-Z6Jl5czR.js → _server.ts-44XLCjje.js} +5 -5
  92. package/build/server/chunks/{_server.ts-Z6Jl5czR.js.map → _server.ts-44XLCjje.js.map} +1 -1
  93. package/build/server/chunks/{_server.ts-DSn8PZs3.js → _server.ts-5x4EV4ZH.js} +5 -5
  94. package/build/server/chunks/{_server.ts-DSn8PZs3.js.map → _server.ts-5x4EV4ZH.js.map} +1 -1
  95. package/build/server/chunks/{_server.ts-DzFK8bVm.js → _server.ts-70mUxM22.js} +5 -5
  96. package/build/server/chunks/{_server.ts-DzFK8bVm.js.map → _server.ts-70mUxM22.js.map} +1 -1
  97. package/build/server/chunks/{_server.ts-ALC_q9Pv.js → _server.ts-7YO0AJyT.js} +5 -5
  98. package/build/server/chunks/{_server.ts-ALC_q9Pv.js.map → _server.ts-7YO0AJyT.js.map} +1 -1
  99. package/build/server/chunks/_server.ts-B0cdV0wH.js +89 -0
  100. package/build/server/chunks/_server.ts-B0cdV0wH.js.map +1 -0
  101. package/build/server/chunks/{_server.ts-CHC5iyoo.js → _server.ts-B0f-lyzD.js} +4 -4
  102. package/build/server/chunks/{_server.ts-CHC5iyoo.js.map → _server.ts-B0f-lyzD.js.map} +1 -1
  103. package/build/server/chunks/{_server.ts-b0eG_upf.js → _server.ts-B8ExhGgO.js} +5 -5
  104. package/build/server/chunks/{_server.ts-b0eG_upf.js.map → _server.ts-B8ExhGgO.js.map} +1 -1
  105. package/build/server/chunks/{_server.ts-CPzXJpes.js → _server.ts-B8l8YmXh.js} +6 -6
  106. package/build/server/chunks/{_server.ts-CPzXJpes.js.map → _server.ts-B8l8YmXh.js.map} +1 -1
  107. package/build/server/chunks/{_server.ts-BfpKWyaE.js → _server.ts-BBHICsQa.js} +18 -6
  108. package/build/server/chunks/_server.ts-BBHICsQa.js.map +1 -0
  109. package/build/server/chunks/{_server.ts-CfZXoUH1.js → _server.ts-BFfdVNpH.js} +5 -5
  110. package/build/server/chunks/{_server.ts-CfZXoUH1.js.map → _server.ts-BFfdVNpH.js.map} +1 -1
  111. package/build/server/chunks/{_server.ts-tSnumHIh.js → _server.ts-BI0oEp2m.js} +5 -5
  112. package/build/server/chunks/{_server.ts-tSnumHIh.js.map → _server.ts-BI0oEp2m.js.map} +1 -1
  113. package/build/server/chunks/{_server.ts-D53Q4y2U.js → _server.ts-BJPmYqJQ.js} +5 -5
  114. package/build/server/chunks/{_server.ts-D53Q4y2U.js.map → _server.ts-BJPmYqJQ.js.map} +1 -1
  115. package/build/server/chunks/{_server.ts-Df_d0aal.js → _server.ts-BLqWydCg.js} +5 -5
  116. package/build/server/chunks/_server.ts-BLqWydCg.js.map +1 -0
  117. package/build/server/chunks/{_server.ts-BmQi3d-p.js → _server.ts-BPEwLxUz.js} +4 -4
  118. package/build/server/chunks/{_server.ts-BmQi3d-p.js.map → _server.ts-BPEwLxUz.js.map} +1 -1
  119. package/build/server/chunks/{_server.ts-vz7XppYp.js → _server.ts-BQSuiMBy.js} +5 -5
  120. package/build/server/chunks/{_server.ts-vz7XppYp.js.map → _server.ts-BQSuiMBy.js.map} +1 -1
  121. package/build/server/chunks/{_server.ts-Dsl30Kqm.js → _server.ts-BRzEk9EI.js} +5 -5
  122. package/build/server/chunks/{_server.ts-Dsl30Kqm.js.map → _server.ts-BRzEk9EI.js.map} +1 -1
  123. package/build/server/chunks/{_server.ts-LS-MWWTz.js → _server.ts-BTw50Sge.js} +6 -6
  124. package/build/server/chunks/{_server.ts-LS-MWWTz.js.map → _server.ts-BTw50Sge.js.map} +1 -1
  125. package/build/server/chunks/{_server.ts-Bs3oAE6C.js → _server.ts-BVLeyPrV.js} +5 -5
  126. package/build/server/chunks/{_server.ts-Bs3oAE6C.js.map → _server.ts-BVLeyPrV.js.map} +1 -1
  127. package/build/server/chunks/{_server.ts-CSZz4p8L.js → _server.ts-Ba3Y8mZb.js} +5 -5
  128. package/build/server/chunks/{_server.ts-CSZz4p8L.js.map → _server.ts-Ba3Y8mZb.js.map} +1 -1
  129. package/build/server/chunks/{_server.ts-Dbczo4Pv.js → _server.ts-BbXRF71R.js} +2 -2
  130. package/build/server/chunks/{_server.ts-Dbczo4Pv.js.map → _server.ts-BbXRF71R.js.map} +1 -1
  131. package/build/server/chunks/{_server.ts-CERCOBc3.js → _server.ts-BgZqc9BJ.js} +5 -5
  132. package/build/server/chunks/{_server.ts-CERCOBc3.js.map → _server.ts-BgZqc9BJ.js.map} +1 -1
  133. package/build/server/chunks/{_server.ts-anQxgBbg.js → _server.ts-BkgABCm4.js} +5 -5
  134. package/build/server/chunks/{_server.ts-anQxgBbg.js.map → _server.ts-BkgABCm4.js.map} +1 -1
  135. package/build/server/chunks/{_server.ts-DUJObAJG.js → _server.ts-BqNV9SKY.js} +6 -6
  136. package/build/server/chunks/{_server.ts-DUJObAJG.js.map → _server.ts-BqNV9SKY.js.map} +1 -1
  137. package/build/server/chunks/{_server.ts-DhF_U44B.js → _server.ts-Br8Q79vg.js} +5 -5
  138. package/build/server/chunks/{_server.ts-DhF_U44B.js.map → _server.ts-Br8Q79vg.js.map} +1 -1
  139. package/build/server/chunks/{_server.ts-tVOMHVfT.js → _server.ts-BsCi8U0T.js} +6 -6
  140. package/build/server/chunks/{_server.ts-tVOMHVfT.js.map → _server.ts-BsCi8U0T.js.map} +1 -1
  141. package/build/server/chunks/{_server.ts-keJe--oH.js → _server.ts-BtzqRqdc.js} +2 -2
  142. package/build/server/chunks/{_server.ts-keJe--oH.js.map → _server.ts-BtzqRqdc.js.map} +1 -1
  143. package/build/server/chunks/{_server.ts-B2osMaU8.js → _server.ts-BuvcU_rd.js} +5 -5
  144. package/build/server/chunks/{_server.ts-B2osMaU8.js.map → _server.ts-BuvcU_rd.js.map} +1 -1
  145. package/build/server/chunks/{_server.ts-ComhXvuD.js → _server.ts-BvYQG4dt.js} +5 -5
  146. package/build/server/chunks/{_server.ts-ComhXvuD.js.map → _server.ts-BvYQG4dt.js.map} +1 -1
  147. package/build/server/chunks/{_server.ts-WQLovWTW.js → _server.ts-Bvv8P8O9.js} +6 -6
  148. package/build/server/chunks/{_server.ts-WQLovWTW.js.map → _server.ts-Bvv8P8O9.js.map} +1 -1
  149. package/build/server/chunks/{_server.ts-CGlVN30h.js → _server.ts-ByNLf-MM.js} +5 -5
  150. package/build/server/chunks/{_server.ts-CGlVN30h.js.map → _server.ts-ByNLf-MM.js.map} +1 -1
  151. package/build/server/chunks/{_server.ts-C2oIwHOm.js → _server.ts-C1P---qO.js} +5 -5
  152. package/build/server/chunks/{_server.ts-C2oIwHOm.js.map → _server.ts-C1P---qO.js.map} +1 -1
  153. package/build/server/chunks/_server.ts-C6_HX3EG.js +81 -0
  154. package/build/server/chunks/_server.ts-C6_HX3EG.js.map +1 -0
  155. package/build/server/chunks/{_server.ts-D1v6AXVY.js → _server.ts-CGk9ZLGa.js} +2 -2
  156. package/build/server/chunks/{_server.ts-D1v6AXVY.js.map → _server.ts-CGk9ZLGa.js.map} +1 -1
  157. package/build/server/chunks/{_server.ts-DFfzCkBR.js → _server.ts-CIoiPQyf.js} +5 -5
  158. package/build/server/chunks/{_server.ts-DFfzCkBR.js.map → _server.ts-CIoiPQyf.js.map} +1 -1
  159. package/build/server/chunks/{_server.ts-D4lQjUia.js → _server.ts-CRzIDkX8.js} +7 -7
  160. package/build/server/chunks/{_server.ts-D4lQjUia.js.map → _server.ts-CRzIDkX8.js.map} +1 -1
  161. package/build/server/chunks/{_server.ts-BVQjwsMp.js → _server.ts-CSZ5Wh6G.js} +5 -5
  162. package/build/server/chunks/{_server.ts-BVQjwsMp.js.map → _server.ts-CSZ5Wh6G.js.map} +1 -1
  163. package/build/server/chunks/{_server.ts-Cya45Eco.js → _server.ts-CT1eXDu-.js} +5 -5
  164. package/build/server/chunks/{_server.ts-Cya45Eco.js.map → _server.ts-CT1eXDu-.js.map} +1 -1
  165. package/build/server/chunks/{_server.ts-BCfPFzEV.js → _server.ts-CUuJlm00.js} +6 -6
  166. package/build/server/chunks/{_server.ts-BCfPFzEV.js.map → _server.ts-CUuJlm00.js.map} +1 -1
  167. package/build/server/chunks/{_server.ts-D1dT173b.js → _server.ts-CZ-DRZvp.js} +5 -5
  168. package/build/server/chunks/{_server.ts-D1dT173b.js.map → _server.ts-CZ-DRZvp.js.map} +1 -1
  169. package/build/server/chunks/{_server.ts-Bu5_FYA-.js → _server.ts-Cc3N9css.js} +5 -5
  170. package/build/server/chunks/{_server.ts-Bu5_FYA-.js.map → _server.ts-Cc3N9css.js.map} +1 -1
  171. package/build/server/chunks/{_server.ts-DtJPTK6T.js → _server.ts-Cf65eLqq.js} +5 -5
  172. package/build/server/chunks/{_server.ts-DtJPTK6T.js.map → _server.ts-Cf65eLqq.js.map} +1 -1
  173. package/build/server/chunks/{_server.ts-CB1MjjTN.js → _server.ts-Cg6XEPy2.js} +6 -6
  174. package/build/server/chunks/{_server.ts-CB1MjjTN.js.map → _server.ts-Cg6XEPy2.js.map} +1 -1
  175. package/build/server/chunks/{_server.ts-DESj9ag6.js → _server.ts-CnP0tOCJ.js} +5 -5
  176. package/build/server/chunks/{_server.ts-DESj9ag6.js.map → _server.ts-CnP0tOCJ.js.map} +1 -1
  177. package/build/server/chunks/{_server.ts-xxCrP77n.js → _server.ts-CrJINkX_.js} +5 -5
  178. package/build/server/chunks/{_server.ts-xxCrP77n.js.map → _server.ts-CrJINkX_.js.map} +1 -1
  179. package/build/server/chunks/{_server.ts-Ckf8jQdl.js → _server.ts-Crjjd765.js} +6 -6
  180. package/build/server/chunks/{_server.ts-Ckf8jQdl.js.map → _server.ts-Crjjd765.js.map} +1 -1
  181. package/build/server/chunks/{_server.ts-D47IinIP.js → _server.ts-Cv8ofBVh.js} +7 -7
  182. package/build/server/chunks/{_server.ts-D47IinIP.js.map → _server.ts-Cv8ofBVh.js.map} +1 -1
  183. package/build/server/chunks/{_server.ts-BEdChB0B.js → _server.ts-CvjW0prw.js} +14 -7
  184. package/build/server/chunks/_server.ts-CvjW0prw.js.map +1 -0
  185. package/build/server/chunks/{_server.ts-CW_MqxCL.js → _server.ts-CzJEYcNT.js} +7 -7
  186. package/build/server/chunks/{_server.ts-CW_MqxCL.js.map → _server.ts-CzJEYcNT.js.map} +1 -1
  187. package/build/server/chunks/{_server.ts-gBd2rolQ.js → _server.ts-CzxUP04Y.js} +5 -5
  188. package/build/server/chunks/{_server.ts-gBd2rolQ.js.map → _server.ts-CzxUP04Y.js.map} +1 -1
  189. package/build/server/chunks/{_server.ts-B409KD6U.js → _server.ts-D01NZcYW.js} +25 -7
  190. package/build/server/chunks/_server.ts-D01NZcYW.js.map +1 -0
  191. package/build/server/chunks/_server.ts-D1AbREnq.js +78 -0
  192. package/build/server/chunks/_server.ts-D1AbREnq.js.map +1 -0
  193. package/build/server/chunks/{_server.ts-DYU3yoaF.js → _server.ts-D7Jx0nis.js} +5 -5
  194. package/build/server/chunks/{_server.ts-DYU3yoaF.js.map → _server.ts-D7Jx0nis.js.map} +1 -1
  195. package/build/server/chunks/{_server.ts-C40BmZoV.js → _server.ts-D81qWfpG.js} +5 -5
  196. package/build/server/chunks/{_server.ts-C40BmZoV.js.map → _server.ts-D81qWfpG.js.map} +1 -1
  197. package/build/server/chunks/{_server.ts-DMNpdAr1.js → _server.ts-D8cTdweQ.js} +5 -5
  198. package/build/server/chunks/{_server.ts-DMNpdAr1.js.map → _server.ts-D8cTdweQ.js.map} +1 -1
  199. package/build/server/chunks/{_server.ts-Dr56nQwT.js → _server.ts-DAyVdLae.js} +5 -5
  200. package/build/server/chunks/{_server.ts-Dr56nQwT.js.map → _server.ts-DAyVdLae.js.map} +1 -1
  201. package/build/server/chunks/{_server.ts-BP1-cpdO.js → _server.ts-DG6X2pCM.js} +6 -6
  202. package/build/server/chunks/{_server.ts-BP1-cpdO.js.map → _server.ts-DG6X2pCM.js.map} +1 -1
  203. package/build/server/chunks/{_server.ts-D2YDAvSW.js → _server.ts-DIot9Cws.js} +5 -5
  204. package/build/server/chunks/_server.ts-DIot9Cws.js.map +1 -0
  205. package/build/server/chunks/{_server.ts-BfRDa9Ak.js → _server.ts-DLN16A-H.js} +5 -5
  206. package/build/server/chunks/{_server.ts-BfRDa9Ak.js.map → _server.ts-DLN16A-H.js.map} +1 -1
  207. package/build/server/chunks/{_server.ts-DGkBTOLd.js → _server.ts-DNnk_Zxf.js} +5 -5
  208. package/build/server/chunks/{_server.ts-DGkBTOLd.js.map → _server.ts-DNnk_Zxf.js.map} +1 -1
  209. package/build/server/chunks/{_server.ts-Dwhv7KnR.js → _server.ts-DRtWVz82.js} +6 -6
  210. package/build/server/chunks/{_server.ts-Dwhv7KnR.js.map → _server.ts-DRtWVz82.js.map} +1 -1
  211. package/build/server/chunks/{_server.ts--ZXHd_7G.js → _server.ts-DWLgZ0Yv.js} +6 -6
  212. package/build/server/chunks/{_server.ts--ZXHd_7G.js.map → _server.ts-DWLgZ0Yv.js.map} +1 -1
  213. package/build/server/chunks/{_server.ts-CcKpUv9a.js → _server.ts-DWWvdqIf.js} +5 -5
  214. package/build/server/chunks/{_server.ts-CcKpUv9a.js.map → _server.ts-DWWvdqIf.js.map} +1 -1
  215. package/build/server/chunks/{_server.ts-Ou4LHoL0.js → _server.ts-DeYTt0bJ.js} +5 -5
  216. package/build/server/chunks/{_server.ts-Ou4LHoL0.js.map → _server.ts-DeYTt0bJ.js.map} +1 -1
  217. package/build/server/chunks/{_server.ts-Cg_nVcGe.js → _server.ts-DmJBOTT2.js} +6 -6
  218. package/build/server/chunks/{_server.ts-Cg_nVcGe.js.map → _server.ts-DmJBOTT2.js.map} +1 -1
  219. package/build/server/chunks/{_server.ts-BX19lZQE.js → _server.ts-DrOOY95Q.js} +5 -5
  220. package/build/server/chunks/{_server.ts-BX19lZQE.js.map → _server.ts-DrOOY95Q.js.map} +1 -1
  221. package/build/server/chunks/{_server.ts-DErSZ0aB.js → _server.ts-DtH3KC6o.js} +2 -2
  222. package/build/server/chunks/{_server.ts-DErSZ0aB.js.map → _server.ts-DtH3KC6o.js.map} +1 -1
  223. package/build/server/chunks/{_server.ts-DsXYP4wI.js → _server.ts-DwkMC38U.js} +5 -5
  224. package/build/server/chunks/{_server.ts-DsXYP4wI.js.map → _server.ts-DwkMC38U.js.map} +1 -1
  225. package/build/server/chunks/{_server.ts-BOYEjBGJ.js → _server.ts-DxG52eeA.js} +7 -7
  226. package/build/server/chunks/{_server.ts-BOYEjBGJ.js.map → _server.ts-DxG52eeA.js.map} +1 -1
  227. package/build/server/chunks/{_server.ts-JWoayilI.js → _server.ts-Dxuqlt4R.js} +15 -10
  228. package/build/server/chunks/_server.ts-Dxuqlt4R.js.map +1 -0
  229. package/build/server/chunks/{_server.ts-MPKhnT_9.js → _server.ts-DyCjXY9f.js} +5 -5
  230. package/build/server/chunks/{_server.ts-MPKhnT_9.js.map → _server.ts-DyCjXY9f.js.map} +1 -1
  231. package/build/server/chunks/{_server.ts-DJ8dviE4.js → _server.ts-FfM2gx8M.js} +8 -8
  232. package/build/server/chunks/{_server.ts-DJ8dviE4.js.map → _server.ts-FfM2gx8M.js.map} +1 -1
  233. package/build/server/chunks/{_server.ts-DjPUN7lf.js → _server.ts-FgmSApxO.js} +5 -5
  234. package/build/server/chunks/{_server.ts-DjPUN7lf.js.map → _server.ts-FgmSApxO.js.map} +1 -1
  235. package/build/server/chunks/{_server.ts-CI29Cyri.js → _server.ts-LoYAi4N3.js} +6 -6
  236. package/build/server/chunks/{_server.ts-CI29Cyri.js.map → _server.ts-LoYAi4N3.js.map} +1 -1
  237. package/build/server/chunks/{_server.ts-YGPIKWu1.js → _server.ts-UX21CkDV.js} +5 -5
  238. package/build/server/chunks/{_server.ts-YGPIKWu1.js.map → _server.ts-UX21CkDV.js.map} +1 -1
  239. package/build/server/chunks/{_server.ts-BaCAfVqq.js → _server.ts-bY2IL1Nj.js} +7 -7
  240. package/build/server/chunks/{_server.ts-BaCAfVqq.js.map → _server.ts-bY2IL1Nj.js.map} +1 -1
  241. package/build/server/chunks/_server.ts-fMGCvAmz.js +64 -0
  242. package/build/server/chunks/_server.ts-fMGCvAmz.js.map +1 -0
  243. package/build/server/chunks/{_server.ts-Cl0rLFUw.js → _server.ts-jmKRuOrt.js} +6 -6
  244. package/build/server/chunks/{_server.ts-Cl0rLFUw.js.map → _server.ts-jmKRuOrt.js.map} +1 -1
  245. package/build/server/chunks/{_server.ts-B1yfYKPg.js → _server.ts-nxWIvPny.js} +5 -5
  246. package/build/server/chunks/{_server.ts-B1yfYKPg.js.map → _server.ts-nxWIvPny.js.map} +1 -1
  247. package/build/server/chunks/{_server.ts-D30T84pQ.js → _server.ts-plme8zrC.js} +5 -5
  248. package/build/server/chunks/{_server.ts-D30T84pQ.js.map → _server.ts-plme8zrC.js.map} +1 -1
  249. package/build/server/chunks/{_server.ts-0B6ETUr-.js → _server.ts-sTPNb2pN.js} +5 -5
  250. package/build/server/chunks/{_server.ts-0B6ETUr-.js.map → _server.ts-sTPNb2pN.js.map} +1 -1
  251. package/build/server/chunks/{_server.ts-B5hR6mRJ.js → _server.ts-t27XF1J7.js} +2 -2
  252. package/build/server/chunks/{_server.ts-B5hR6mRJ.js.map → _server.ts-t27XF1J7.js.map} +1 -1
  253. package/build/server/chunks/{addon-helpers-CNp09lT6.js → addon-helpers-DY4O9SZB.js} +3 -3
  254. package/build/server/chunks/{addon-helpers-CNp09lT6.js.map → addon-helpers-DY4O9SZB.js.map} +1 -1
  255. package/build/server/chunks/{akm-Du5uQGJQ.js → akm-BSih7eOh.js} +2 -2
  256. package/build/server/chunks/{akm-Du5uQGJQ.js.map → akm-BSih7eOh.js.map} +1 -1
  257. package/build/server/chunks/{catalog-VJdRC16s.js → catalog-DyHJ6nBW.js} +5 -5
  258. package/build/server/chunks/{catalog-VJdRC16s.js.map → catalog-DyHJ6nBW.js.map} +1 -1
  259. package/build/server/chunks/{client-BQEOyapc.js → client-CnOg1BpV.js} +2 -2
  260. package/build/server/chunks/{client-BQEOyapc.js.map → client-CnOg1BpV.js.map} +1 -1
  261. package/build/server/chunks/{config-VQx1c1o2.js → config-BVnL1-S6.js} +2 -2
  262. package/build/server/chunks/{config-VQx1c1o2.js.map → config-BVnL1-S6.js.map} +1 -1
  263. package/build/server/chunks/{docker-DeSRsk_C.js → docker-QQYBC8du.js} +2 -2
  264. package/build/server/chunks/{docker-DeSRsk_C.js.map → docker-QQYBC8du.js.map} +1 -1
  265. package/build/server/chunks/{endpoints-CVaZyXGR.js → endpoints-BOzm3TR9.js} +2 -2
  266. package/build/server/chunks/{endpoints-CVaZyXGR.js.map → endpoints-BOzm3TR9.js.map} +1 -1
  267. package/build/server/chunks/{environment-BTWh1E9j.js → environment-DevEAj_M.js} +2 -2
  268. package/build/server/chunks/{environment-BTWh1E9j.js.map → environment-DevEAj_M.js.map} +1 -1
  269. package/build/server/chunks/{error.svelte-Cz7XJbXh.js → error.svelte-OEdYqdGu.js} +4 -4
  270. package/build/server/chunks/{error.svelte-Cz7XJbXh.js.map → error.svelte-OEdYqdGu.js.map} +1 -1
  271. package/build/server/chunks/{helpers-DEWuEDi5.js → helpers-lf-w8dFi.js} +3 -3
  272. package/build/server/chunks/{helpers-DEWuEDi5.js.map → helpers-lf-w8dFi.js.map} +1 -1
  273. package/build/server/chunks/{hooks.server-D_p0VTSA.js → hooks.server-yeur1GCR.js} +6 -6
  274. package/build/server/chunks/{hooks.server-D_p0VTSA.js.map → hooks.server-yeur1GCR.js.map} +1 -1
  275. package/build/server/chunks/{http-Bz9VDTR1.js → http-Bv92EpMx.js} +2 -2
  276. package/build/server/chunks/{http-Bz9VDTR1.js.map → http-Bv92EpMx.js.map} +1 -1
  277. package/build/server/chunks/{internal-CXonuT4k.js → internal-CQdgWpT6.js} +3 -3
  278. package/build/server/chunks/{internal-CXonuT4k.js.map → internal-CQdgWpT6.js.map} +1 -1
  279. package/build/server/chunks/{session-cookie-CQw8e0tc.js → session-cookie-DhA3swUc.js} +2 -2
  280. package/build/server/chunks/{session-cookie-CQw8e0tc.js.map → session-cookie-DhA3swUc.js.map} +1 -1
  281. package/build/server/chunks/{setup-deploy-BBl1pM-Q.js → setup-deploy-C0hLjImh.js} +2 -2
  282. package/build/server/chunks/{setup-deploy-BBl1pM-Q.js.map → setup-deploy-C0hLjImh.js.map} +1 -1
  283. package/build/server/chunks/{src-CHZNd5cO.js → src-B7oqi9q_.js} +517 -93
  284. package/build/server/chunks/src-B7oqi9q_.js.map +1 -0
  285. package/build/server/chunks/{state-BcQ5v_Ye.js → state-iFW46-kW.js} +2 -2
  286. package/build/server/chunks/{state-BcQ5v_Ye.js.map → state-iFW46-kW.js.map} +1 -1
  287. package/build/server/chunks/{state2-CGTr4dHs.js → state2-DkQitSl6.js} +2 -2
  288. package/build/server/chunks/{state2-CGTr4dHs.js.map → state2-DkQitSl6.js.map} +1 -1
  289. package/build/server/chunks/{theme-state.svelte-CUVpUHOv.js → theme-state.svelte-8qSluhfu.js} +35 -4
  290. package/build/server/chunks/theme-state.svelte-8qSluhfu.js.map +1 -0
  291. package/build/server/index.js +2 -2
  292. package/build/server/manifest.js +117 -89
  293. package/build/server/manifest.js.map +1 -1
  294. package/package.json +4 -2
  295. package/build/client/_app/immutable/assets/4.D-9LGiQD.css +0 -1
  296. package/build/client/_app/immutable/assets/4.D-9LGiQD.css.br +0 -0
  297. package/build/client/_app/immutable/assets/4.D-9LGiQD.css.gz +0 -0
  298. package/build/client/_app/immutable/chunks/BXh0hlRI.js +0 -1
  299. package/build/client/_app/immutable/chunks/BXh0hlRI.js.br +0 -0
  300. package/build/client/_app/immutable/chunks/BXh0hlRI.js.gz +0 -0
  301. package/build/client/_app/immutable/chunks/BihYGk9Y.js.br +0 -0
  302. package/build/client/_app/immutable/chunks/BihYGk9Y.js.gz +0 -0
  303. package/build/client/_app/immutable/chunks/C5EI77dn.js.br +0 -0
  304. package/build/client/_app/immutable/chunks/CMRs-cy6.js +0 -5
  305. package/build/client/_app/immutable/chunks/CMRs-cy6.js.br +0 -0
  306. package/build/client/_app/immutable/chunks/CMRs-cy6.js.gz +0 -0
  307. package/build/client/_app/immutable/chunks/D6NbA5vY.js.br +0 -0
  308. package/build/client/_app/immutable/chunks/D6NbA5vY.js.gz +0 -0
  309. package/build/client/_app/immutable/chunks/lIgyewlB.js +0 -1
  310. package/build/client/_app/immutable/chunks/lIgyewlB.js.br +0 -2
  311. package/build/client/_app/immutable/chunks/lIgyewlB.js.gz +0 -0
  312. package/build/client/_app/immutable/entry/app.D4HjSNXN.js.br +0 -0
  313. package/build/client/_app/immutable/entry/app.D4HjSNXN.js.gz +0 -0
  314. package/build/client/_app/immutable/entry/start.BBmWGrcI.js +0 -1
  315. package/build/client/_app/immutable/entry/start.BBmWGrcI.js.br +0 -0
  316. package/build/client/_app/immutable/entry/start.BBmWGrcI.js.gz +0 -0
  317. package/build/client/_app/immutable/nodes/0.DEcud9DA.js.br +0 -0
  318. package/build/client/_app/immutable/nodes/0.DEcud9DA.js.gz +0 -0
  319. package/build/client/_app/immutable/nodes/1.Cv1FI9RA.js.br +0 -2
  320. package/build/client/_app/immutable/nodes/1.Cv1FI9RA.js.gz +0 -0
  321. package/build/client/_app/immutable/nodes/4.0ZfV2HFJ.js +0 -120
  322. package/build/client/_app/immutable/nodes/4.0ZfV2HFJ.js.br +0 -0
  323. package/build/client/_app/immutable/nodes/4.0ZfV2HFJ.js.gz +0 -0
  324. package/build/client/_app/immutable/nodes/5.B_jsAXs5.js.br +0 -0
  325. package/build/client/_app/immutable/nodes/5.B_jsAXs5.js.gz +0 -0
  326. package/build/client/_app/immutable/nodes/6.CD18u_qC.js.br +0 -0
  327. package/build/client/_app/immutable/nodes/6.CD18u_qC.js.gz +0 -0
  328. package/build/client/_app/immutable/nodes/7.BXyjSbT8.js.br +0 -0
  329. package/build/client/_app/immutable/nodes/7.BXyjSbT8.js.gz +0 -0
  330. package/build/client/_app/immutable/nodes/8.CDTwcjzi.js.br +0 -0
  331. package/build/client/_app/immutable/nodes/8.CDTwcjzi.js.gz +0 -0
  332. package/build/server/chunks/1-CVcQJtBc.js +0 -9
  333. package/build/server/chunks/4-CTyDAO7N.js +0 -9
  334. package/build/server/chunks/5-BXILJ_BC.js +0 -9
  335. package/build/server/chunks/6-HdFbhR1m.js +0 -9
  336. package/build/server/chunks/7-k9H-eD_d.js +0 -9
  337. package/build/server/chunks/_page.svelte-BsDNnBfz.js.map +0 -1
  338. package/build/server/chunks/_server.ts-B409KD6U.js.map +0 -1
  339. package/build/server/chunks/_server.ts-BEdChB0B.js.map +0 -1
  340. package/build/server/chunks/_server.ts-BfpKWyaE.js.map +0 -1
  341. package/build/server/chunks/_server.ts-D2YDAvSW.js.map +0 -1
  342. package/build/server/chunks/_server.ts-Df_d0aal.js.map +0 -1
  343. package/build/server/chunks/_server.ts-JWoayilI.js.map +0 -1
  344. package/build/server/chunks/src-CHZNd5cO.js.map +0 -1
  345. package/build/server/chunks/theme-state.svelte-CUVpUHOv.js.map +0 -1
@@ -1,17 +1,17 @@
1
- import { v as version } from './environment-BTWh1E9j.js';
2
- import { E as head, p as ensure_array_like, e as attr_class, d as attr, r as escape_html, a8 as stringify, F as html, o as derived, g as bind_props } from './dev-B6xUe35c.js';
3
- import { o as onDestroy, g as goto } from './client-BQEOyapc.js';
1
+ import { v as version } from './environment-DevEAj_M.js';
2
+ import { E as head, r as escape_html, o as derived, p as ensure_array_like, e as attr_class, d as attr, a8 as stringify, F as html, g as bind_props } from './dev-B6xUe35c.js';
3
+ import { o as onDestroy, g as goto } from './client-CnOg1BpV.js';
4
4
  import { r as require_dist } from './dist-DOFcG0Zp.js';
5
- import { g as fetchContainers, f as fetchAutomations, A as voiceState, b as buildHeaders, j as fetchServiceLogs, a as detectAkmEmbedding, x as testAkmEmbedding, n as notifications, z as upgradeStack, e as downloadUiVersion, i as fetchReleases, k as fetchUiVersions, t as setStackVersion } from './theme-state.svelte-CUVpUHOv.js';
6
- import { N as Navbar, f as formatTime, e as endpointsService, D as Drawer } from './Navbar-Dnxvfk10.js';
5
+ import { g as fetchContainers, f as fetchAutomations, B as voiceState, b as buildHeaders, j as fetchServiceLogs, a as detectAkmEmbedding, y as testAkmEmbedding, n as notifications, p as previewMigration, A as upgradeStack, e as downloadUiVersion, u as setStackVersion, D as DowngradeConfirmationRequiredError, i as fetchReleases, k as fetchUiVersions } from './theme-state.svelte-8qSluhfu.js';
6
+ import { N as Navbar, f as formatTime, e as endpointsService, D as Drawer } from './Navbar-Bdk7TDAb.js';
7
7
  import { S as Spinner } from './Spinner-Bk6e83RX.js';
8
- import { T as ToolStrip, C as ChatMessage } from './ChatMessage-DfLmvrJq.js';
8
+ import { T as ToolStrip, C as ChatMessage } from './ChatMessage-BAWjgbc_.js';
9
9
  import './provider-constants-DPrj3yBX.js';
10
- import './internal-CXonuT4k.js';
10
+ import './internal-CQdgWpT6.js';
11
11
  import './utils-BSRjJDrZ.js';
12
12
  import 'node:module';
13
13
  import './chunk-CLZ62Ad-.js';
14
- import './state2-CGTr4dHs.js';
14
+ import './state2-DkQitSl6.js';
15
15
 
16
16
  var TTS_OPTIONS = [
17
17
  {
@@ -528,6 +528,24 @@ function isSemver(v) {
528
528
  function isPrerelease(v) {
529
529
  return v.replace(/^v/, "").split("+")[0].includes("-");
530
530
  }
531
+ /**
532
+ * Client-safe mirror of @openpalm/lib's `formatForDisplay` (#503): one canonical
533
+ * user-facing spelling regardless of whether the value arrived as a Docker tag
534
+ * (`v0.12.0`) or an npm version (`0.12.0`). Drops a single leading `v`; leaves
535
+ * a moving tag like `latest`/`dev` untouched. The lib helper is server-only
536
+ * (its module imports package.json), so this stays a tiny dependency-free copy
537
+ * used everywhere the browser renders a version label.
538
+ */
539
+ function formatVersionForDisplay(v) {
540
+ return (v ?? "").trim().replace(/^v/, "");
541
+ }
542
+ /** Active release channel for `current`: pre-release installs ride the
543
+ * prerelease channel, everything else the stable channel. Non-semver (a moving
544
+ * `latest` tag, or no data) → 'unknown' so the UI shows nothing misleading. */
545
+ function channelOf(current) {
546
+ if (!isSemver(current)) return "unknown";
547
+ return isPrerelease(current) ? "prerelease" : "stable";
548
+ }
531
549
  /** Returns 1 if a > b, -1 if a < b, 0 if equal. Strips a leading `v`. */
532
550
  function compareVersions(a, b) {
533
551
  const parse = (v) => {
@@ -600,7 +618,14 @@ function UpdatesTab($$renderer, $$props) {
600
618
  /** Newer desktop version from the app's GitHub update check, if any. */
601
619
  /** Download URL for the newer desktop release. */
602
620
  /** Running @openpalm/ui version (the build currently serving this page). */
603
- let { currentImageTag, selectedImageTag, tagChangeLoading, anyDangerousLoading, tokenStored, upgradeLoading, inElectron, electronVersion, electronLatestVersion, electronLatestUrl, uiVersion, uiVersions, uiVersionsLoading, selectedUiTag, uiDownloadLoading, uiDownloadReady, releases, releasesLoading, onSetImageTag, onSelectedImageTagChange, onUpgradeStack, onSelectedUiTagChange, onDownloadUiVersion, onRestartApp, onRefreshReleases } = $$props;
621
+ /** Supervisor is respawning the UI server against the new build; the page
622
+ * will auto-reload once it's back up (design §6.2). */
623
+ /** Running control-plane version (PLATFORM_VERSION). The dropdown is already
624
+ * filtered to tags ≤ this server-side (#492); used to label "you are on X"
625
+ * and to keep the version picker from offering an unreachable newer tag. */
626
+ /** #497: preview the release migrations the selected tag would run. */
627
+ /** #501: set when the selected tag is a downgrade and needs confirmation. */
628
+ let { currentImageTag, selectedImageTag, tagChangeLoading, anyDangerousLoading, tokenStored, upgradeLoading, inElectron, electronVersion, electronLatestVersion, electronLatestUrl, uiVersion, uiVersions, uiVersionsLoading, selectedUiTag, uiDownloadLoading, uiDownloadReady, uiDownloadRestarting, releases, releasesLoading, platformVersion = "", migratePreviewLoading = false, migratePreview = null, downgradePrompt = null, onSetImageTag, onPreviewMigration, onConfirmDowngrade, onCancelDowngrade, onSelectedImageTagChange, onUpgradeStack, onSelectedUiTagChange, onDownloadUiVersion, onRestartApp, onRefreshReleases } = $$props;
604
629
  function uiVersionLabel(v) {
605
630
  const tags = [];
606
631
  if (v.distTag) tags.push(v.distTag);
@@ -623,6 +648,7 @@ function UpdatesTab($$renderer, $$props) {
623
648
  const appDownloadUrl = derived(() => electronLatestUrl ?? (appLatest() ? `${RELEASES_URL}/tag/v${appLatest()}` : RELEASES_URL));
624
649
  const uiLatest = derived(() => latestForChannel(uiVersion, uiCandidates()));
625
650
  const uiStatus = derived(() => updateStatus(uiVersion, uiLatest()));
651
+ const activeChannel = derived(() => channelOf(currentImageTag));
626
652
  let notificationsEnabled = false;
627
653
  let replyPreviewEnabled = false;
628
654
  let launchOnLoginEnabled = false;
@@ -633,7 +659,20 @@ function UpdatesTab($$renderer, $$props) {
633
659
  return s === "current" ? "Up to date" : s === "update" ? "Update available" : "Update status unknown";
634
660
  }
635
661
  const statusText = derived(() => upgradeLoading ? "Updating OpenPalm to the latest version…" : tagChangeLoading ? "Installing the selected version and restarting…" : uiDownloadLoading ? "Downloading the admin interface…" : releasesLoading || uiVersionsLoading ? "Checking for updates…" : "");
636
- $$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. An update backs up your settings first, then briefly restarts your assistant.</p></div> <button class="btn btn-sm btn-secondary refresh-releases svelte-7mkeya"${attr("disabled", releasesLoading || uiVersionsLoading, true)}${attr("aria-busy", releasesLoading || uiVersionsLoading)} title="Check GitHub for newer versions">`);
662
+ $$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. An update backs up your settings first, then briefly restarts your assistant.</p> `);
663
+ if (activeChannel() !== "unknown") {
664
+ $$renderer.push("<!--[0-->");
665
+ $$renderer.push(`<p class="channel-indicator svelte-7mkeya">You're on the <strong class="svelte-7mkeya">${escape_html(activeChannel() === "prerelease" ? "prerelease" : "stable")}</strong> channel. `);
666
+ if (activeChannel() === "prerelease") {
667
+ $$renderer.push("<!--[0-->");
668
+ $$renderer.push(`Prereleases get new features early and may be less stable.`);
669
+ } else {
670
+ $$renderer.push("<!--[-1-->");
671
+ $$renderer.push(`You'll only be offered stable releases.`);
672
+ }
673
+ $$renderer.push(`<!--]--></p>`);
674
+ } else $$renderer.push("<!--[-1-->");
675
+ $$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 GitHub for newer versions">`);
637
676
  if (releasesLoading || uiVersionsLoading) {
638
677
  $$renderer.push("<!--[0-->");
639
678
  Spinner($$renderer, {});
@@ -642,7 +681,11 @@ function UpdatesTab($$renderer, $$props) {
642
681
  $$renderer.push("<!--[-1-->");
643
682
  $$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`);
644
683
  }
645
- $$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 class="update-card svelte-7mkeya" aria-labelledby="update-primary-title"><div class="update-card-text svelte-7mkeya"><h3 id="update-primary-title" class="update-title svelte-7mkeya">Update to the latest version</h3> <p class="update-desc svelte-7mkeya">Downloads and installs the newest OpenPalm release. Your settings are backed up first,
684
+ $$renderer.push(`<!--]--></button></div> <p class="status-live svelte-7mkeya" role="status" aria-live="polite">${escape_html(statusText())}</p> `);
685
+ $$renderer.push("<!--[-1-->");
686
+ $$renderer.push(`<!--]--> `);
687
+ $$renderer.push("<!--[-1-->");
688
+ $$renderer.push(`<!--]--> <div class="panel-body svelte-7mkeya"><section class="update-card svelte-7mkeya" aria-labelledby="update-primary-title"><div class="update-card-text svelte-7mkeya"><h3 id="update-primary-title" class="update-title svelte-7mkeya">Update to the latest version</h3> <p class="update-desc svelte-7mkeya">Downloads and installs the newest OpenPalm release. Your settings are backed up first,
646
689
  then your assistant restarts — it will be offline for about a minute. Your data is kept.</p></div> <button class="btn btn-primary update-go svelte-7mkeya"${attr("disabled", anyDangerousLoading || !tokenStored, true)}${attr("aria-busy", upgradeLoading)}>`);
647
690
  if (upgradeLoading) {
648
691
  $$renderer.push("<!--[0-->");
@@ -652,7 +695,7 @@ function UpdatesTab($$renderer, $$props) {
652
695
  $$renderer.push("<!--[-1-->");
653
696
  $$renderer.push(`Update now`);
654
697
  }
655
- $$renderer.push(`<!--]--></button></section> <dl class="versions svelte-7mkeya"><div class="versions-row svelte-7mkeya"><dt class="svelte-7mkeya">OpenPalm Assistant</dt> <dd class="svelte-7mkeya"><span class="version-cell svelte-7mkeya"><code${attr_class(`version-value status-${stringify(assistantStatus())}`, "svelte-7mkeya")}>${escape_html(currentImageTag || "—")}</code> `);
698
+ $$renderer.push(`<!--]--></button></section> <dl class="versions svelte-7mkeya"><div class="versions-row svelte-7mkeya"><dt class="svelte-7mkeya">OpenPalm Assistant</dt> <dd class="svelte-7mkeya"><span class="version-cell svelte-7mkeya"><code${attr_class(`version-value status-${stringify(assistantStatus())}`, "svelte-7mkeya")}>${escape_html(formatVersionForDisplay(currentImageTag) || "—")}</code> `);
656
699
  if (statusEmoji(assistantStatus())) {
657
700
  $$renderer.push("<!--[0-->");
658
701
  $$renderer.push(`<span class="status-emoji svelte-7mkeya" role="img"${attr("aria-label", statusTitle(assistantStatus()))}${attr("title", statusTitle(assistantStatus()))}>${escape_html(statusEmoji(assistantStatus()))}</span>`);
@@ -667,11 +710,11 @@ function UpdatesTab($$renderer, $$props) {
667
710
  $$renderer.push(`<!----> Updating…`);
668
711
  } else {
669
712
  $$renderer.push("<!--[-1-->");
670
- $$renderer.push(`Update to ${escape_html(assistantLatest())}`);
713
+ $$renderer.push(`Update to ${escape_html(formatVersionForDisplay(assistantLatest()))}`);
671
714
  }
672
715
  $$renderer.push(`<!--]--></button>`);
673
716
  } else $$renderer.push("<!--[-1-->");
674
- $$renderer.push(`<!--]--></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(electronVersion || "—")}</code> `);
717
+ $$renderer.push(`<!--]--></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> `);
675
718
  if (statusEmoji(appStatus())) {
676
719
  $$renderer.push("<!--[0-->");
677
720
  $$renderer.push(`<span class="status-emoji svelte-7mkeya" role="img"${attr("aria-label", statusTitle(appStatus()))}${attr("title", statusTitle(appStatus()))}>${escape_html(statusEmoji(appStatus()))}</span>`);
@@ -679,9 +722,9 @@ function UpdatesTab($$renderer, $$props) {
679
722
  $$renderer.push(`<!--]--></span> `);
680
723
  if (appStatus() === "update") {
681
724
  $$renderer.push("<!--[0-->");
682
- $$renderer.push(`<a class="btn btn-sm btn-secondary version-action svelte-7mkeya"${attr("href", appDownloadUrl())} target="_blank" rel="noopener noreferrer">Download ${escape_html(appLatest())}</a>`);
725
+ $$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>`);
683
726
  } else $$renderer.push("<!--[-1-->");
684
- $$renderer.push(`<!--]--></dd></div> <div class="versions-row svelte-7mkeya"><dt class="svelte-7mkeya">OpenPalm UI</dt> <dd class="svelte-7mkeya"><span class="version-cell svelte-7mkeya"><code${attr_class(`version-value status-${stringify(uiStatus())}`, "svelte-7mkeya")}>${escape_html(uiVersion || "—")}</code> `);
727
+ $$renderer.push(`<!--]--></dd></div> <div class="versions-row svelte-7mkeya"><dt class="svelte-7mkeya">OpenPalm UI</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> `);
685
728
  if (statusEmoji(uiStatus())) {
686
729
  $$renderer.push("<!--[0-->");
687
730
  $$renderer.push(`<span class="status-emoji svelte-7mkeya" role="img"${attr("aria-label", statusTitle(uiStatus()))}${attr("title", statusTitle(uiStatus()))}>${escape_html(statusEmoji(uiStatus()))}</span>`);
@@ -689,8 +732,13 @@ function UpdatesTab($$renderer, $$props) {
689
732
  $$renderer.push(`<!--]--></span> `);
690
733
  if (uiStatus() === "update") {
691
734
  $$renderer.push("<!--[0-->");
692
- if (uiDownloadReady) {
735
+ if (uiDownloadRestarting) {
693
736
  $$renderer.push("<!--[0-->");
737
+ $$renderer.push(`<span class="version-action-note svelte-7mkeya" role="status">`);
738
+ Spinner($$renderer, {});
739
+ $$renderer.push(`<!----> Admin interface updated — reconnecting…</span>`);
740
+ } else if (uiDownloadReady) {
741
+ $$renderer.push("<!--[1-->");
694
742
  $$renderer.push(`<span class="version-action-note svelte-7mkeya">Downloaded. `);
695
743
  if (inElectron) {
696
744
  $$renderer.push("<!--[0-->");
@@ -709,13 +757,28 @@ function UpdatesTab($$renderer, $$props) {
709
757
  $$renderer.push(`<!----> Downloading…`);
710
758
  } else {
711
759
  $$renderer.push("<!--[-1-->");
712
- $$renderer.push(`Download ${escape_html(uiLatest())}`);
760
+ $$renderer.push(`Download ${escape_html(formatVersionForDisplay(uiLatest()))}`);
713
761
  }
714
762
  $$renderer.push(`<!--]--></button>`);
715
763
  }
716
764
  $$renderer.push(`<!--]-->`);
717
765
  } else $$renderer.push("<!--[-1-->");
718
- $$renderer.push(`<!--]--></dd></div></dl> <details class="advanced svelte-7mkeya"><summary class="svelte-7mkeya">Advanced options</summary> <div class="advanced-body svelte-7mkeya"><div class="version-section svelte-7mkeya"><label class="version-label svelte-7mkeya" for="stack-version-select">Install a specific version</label> <div class="version-input-row svelte-7mkeya">`);
766
+ $$renderer.push(`<!--]--></dd></div></dl> <section class="backups-section svelte-7mkeya" aria-labelledby="backups-title"><div class="backups-header svelte-7mkeya"><h3 id="backups-title" class="backups-title svelte-7mkeya">Backups</h3> `);
767
+ $$renderer.push("<!--[-1-->");
768
+ $$renderer.push(`<!--]--></div> <p class="backups-desc svelte-7mkeya">Each update copies your settings here first. To restore one, point OpenPalm at
769
+ the snapshot directory below (or run <code class="svelte-7mkeya">openpalm rollback</code> for the last update).
770
+ Nothing is ever deleted automatically.</p> `);
771
+ $$renderer.push("<!--[2-->");
772
+ $$renderer.push(`<p class="backups-empty svelte-7mkeya">No backups yet — one is created the first time you update.</p>`);
773
+ $$renderer.push(`<!--]--> `);
774
+ $$renderer.push("<!--[-1-->");
775
+ $$renderer.push(`<!--]--></section> <details class="advanced svelte-7mkeya"><summary class="svelte-7mkeya">Advanced options</summary> <div class="advanced-body svelte-7mkeya"><div class="version-section svelte-7mkeya"><label class="version-label svelte-7mkeya" for="stack-version-select">Install a specific version</label> `);
776
+ if (platformVersion) {
777
+ $$renderer.push("<!--[0-->");
778
+ $$renderer.push(`<p class="version-running-note svelte-7mkeya">You're running OpenPalm ${escape_html(platformVersion)}. Newer versions appear here
779
+ only after you update the app.</p>`);
780
+ } else $$renderer.push("<!--[-1-->");
781
+ $$renderer.push(`<!--]--> <div class="version-input-row svelte-7mkeya">`);
719
782
  if (releasesLoading) {
720
783
  $$renderer.push("<!--[0-->");
721
784
  $$renderer.push(`<div class="version-select-skeleton svelte-7mkeya"></div>`);
@@ -736,9 +799,9 @@ function UpdatesTab($$renderer, $$props) {
736
799
  $$renderer.push(`latest`);
737
800
  }, "svelte-7mkeya");
738
801
  $$renderer.push(`<!--[-->`);
739
- const each_array = ensure_array_like(releases);
740
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
741
- let r = each_array[$$index];
802
+ const each_array_1 = ensure_array_like(releases);
803
+ for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
804
+ let r = each_array_1[$$index_1];
742
805
  $$renderer.option({
743
806
  value: r.tag,
744
807
  class: ""
@@ -752,7 +815,16 @@ function UpdatesTab($$renderer, $$props) {
752
815
  $$renderer.push("<!--[-1-->");
753
816
  $$renderer.push(`<input id="stack-version-select" class="version-input svelte-7mkeya" type="text" aria-label="OpenPalm version to install" placeholder="e.g. 0.11.0 or latest"${attr("value", selectedImageTag)}${attr("disabled", tagChangeLoading || anyDangerousLoading, true)}/>`);
754
817
  }
755
- $$renderer.push(`<!--]--> <button class="btn btn-sm btn-secondary svelte-7mkeya"${attr("disabled", !selectedImageTag.trim() || tagChangeLoading || anyDangerousLoading, true)}${attr("aria-busy", tagChangeLoading)}>`);
818
+ $$renderer.push(`<!--]--> <button class="btn btn-sm btn-secondary version-preview-btn svelte-7mkeya"${attr("disabled", !selectedImageTag.trim() || migratePreviewLoading || tagChangeLoading || anyDangerousLoading, true)}${attr("aria-busy", migratePreviewLoading)}>`);
819
+ if (migratePreviewLoading) {
820
+ $$renderer.push("<!--[0-->");
821
+ Spinner($$renderer, {});
822
+ $$renderer.push(`<!----> Checking…`);
823
+ } else {
824
+ $$renderer.push("<!--[-1-->");
825
+ $$renderer.push(`Preview changes`);
826
+ }
827
+ $$renderer.push(`<!--]--></button> <button class="btn btn-sm btn-secondary svelte-7mkeya"${attr("disabled", !selectedImageTag.trim() || tagChangeLoading || anyDangerousLoading, true)}${attr("aria-busy", tagChangeLoading)}>`);
756
828
  if (tagChangeLoading) {
757
829
  $$renderer.push("<!--[0-->");
758
830
  Spinner($$renderer, {});
@@ -761,7 +833,48 @@ function UpdatesTab($$renderer, $$props) {
761
833
  $$renderer.push("<!--[-1-->");
762
834
  $$renderer.push(`Install &amp; restart`);
763
835
  }
764
- $$renderer.push(`<!--]--></button></div> <p class="version-hint svelte-7mkeya">For rollback or troubleshooting. Installs the chosen version and restarts services (about a minute offline).</p></div> `);
836
+ $$renderer.push(`<!--]--></button></div> <p class="version-hint svelte-7mkeya">For rollback or troubleshooting. Installs the chosen version and restarts services (about a minute offline).</p> `);
837
+ if (migratePreview) {
838
+ $$renderer.push("<!--[0-->");
839
+ $$renderer.push(`<div class="migrate-preview svelte-7mkeya" role="status"><p class="migrate-preview-title svelte-7mkeya">What an update to ${escape_html(migratePreview.targetVersion)} would change to your files:</p> `);
840
+ if (migratePreview.applied.length === 0) {
841
+ $$renderer.push("<!--[0-->");
842
+ $$renderer.push(`<p class="migrate-preview-empty svelte-7mkeya">Nothing — your files are already compatible. Only the images and version are updated.</p>`);
843
+ } else {
844
+ $$renderer.push("<!--[-1-->");
845
+ $$renderer.push(`<ul class="migrate-preview-list svelte-7mkeya"><!--[-->`);
846
+ const each_array_2 = ensure_array_like(migratePreview.lines);
847
+ for (let i = 0, $$length = each_array_2.length; i < $$length; i++) {
848
+ let line = each_array_2[i];
849
+ $$renderer.push(`<li class="svelte-7mkeya">${escape_html(line)}</li>`);
850
+ }
851
+ $$renderer.push(`<!--]--></ul> <p class="version-hint svelte-7mkeya">These are copy-only, backup-first changes. Nothing is deleted. Your settings are backed up before anything is written.</p>`);
852
+ }
853
+ $$renderer.push(`<!--]--> <!--[-->`);
854
+ const each_array_3 = ensure_array_like(migratePreview.notes);
855
+ for (let i = 0, $$length = each_array_3.length; i < $$length; i++) {
856
+ let note = each_array_3[i];
857
+ $$renderer.push(`<p class="migrate-preview-note svelte-7mkeya">Note: ${escape_html(note)}</p>`);
858
+ }
859
+ $$renderer.push(`<!--]--></div>`);
860
+ } else $$renderer.push("<!--[-1-->");
861
+ $$renderer.push(`<!--]--> `);
862
+ if (downgradePrompt) {
863
+ $$renderer.push("<!--[0-->");
864
+ $$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 from ${escape_html(downgradePrompt.currentVersion)} back to ${escape_html(downgradePrompt.targetVersion)}.
865
+ Release migrations don't run backward; your data may not be compatible with the older
866
+ 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", tagChangeLoading, true)}>Cancel</button> <button class="btn btn-sm btn-danger svelte-7mkeya"${attr("disabled", tagChangeLoading, true)}${attr("aria-busy", tagChangeLoading)}>`);
867
+ if (tagChangeLoading) {
868
+ $$renderer.push("<!--[0-->");
869
+ Spinner($$renderer, {});
870
+ $$renderer.push(`<!----> Downgrading…`);
871
+ } else {
872
+ $$renderer.push("<!--[-1-->");
873
+ $$renderer.push(`Downgrade anyway`);
874
+ }
875
+ $$renderer.push(`<!--]--></button></div></div>`);
876
+ } else $$renderer.push("<!--[-1-->");
877
+ $$renderer.push(`<!--]--></div> `);
765
878
  if (inElectron) {
766
879
  $$renderer.push("<!--[0-->");
767
880
  $$renderer.push(`<div class="version-divider svelte-7mkeya"></div> <div class="version-section svelte-7mkeya"><label class="version-label svelte-7mkeya" for="ui-version-select">Admin interface version</label> <div class="version-input-row svelte-7mkeya">`);
@@ -779,9 +892,9 @@ function UpdatesTab($$renderer, $$props) {
779
892
  disabled: uiDownloadLoading
780
893
  }, ($$renderer) => {
781
894
  $$renderer.push(`<!--[-->`);
782
- const each_array_1 = ensure_array_like(uiVersions);
783
- for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
784
- let v = each_array_1[$$index_1];
895
+ const each_array_4 = ensure_array_like(uiVersions);
896
+ for (let $$index_4 = 0, $$length = each_array_4.length; $$index_4 < $$length; $$index_4++) {
897
+ let v = each_array_4[$$index_4];
785
898
  $$renderer.option({
786
899
  value: v.version,
787
900
  class: ""
@@ -805,8 +918,13 @@ function UpdatesTab($$renderer, $$props) {
805
918
  $$renderer.push(`Download`);
806
919
  }
807
920
  $$renderer.push(`<!--]--></button></div> `);
808
- if (uiDownloadReady) {
921
+ if (uiDownloadRestarting) {
809
922
  $$renderer.push("<!--[0-->");
923
+ $$renderer.push(`<div class="version-restart-prompt svelte-7mkeya" role="status">`);
924
+ Spinner($$renderer, {});
925
+ $$renderer.push(`<!----> Admin interface updated — reconnecting…</div>`);
926
+ } else if (uiDownloadReady) {
927
+ $$renderer.push("<!--[1-->");
810
928
  $$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>`);
811
929
  } else {
812
930
  $$renderer.push("<!--[-1-->");
@@ -3410,14 +3528,24 @@ function _page($$renderer, $$props) {
3410
3528
  let electronLatestVersion = null;
3411
3529
  let electronLatestUrl = null;
3412
3530
  let tagChangeLoading = false;
3531
+ let migratePreviewLoading = false;
3532
+ let migratePreview = null;
3533
+ let downgradePrompt = null;
3413
3534
  let uiDownloadLoading = false;
3414
3535
  let uiDownloadReady = false;
3536
+ let uiDownloadRestarting = false;
3415
3537
  let selectedImageTag = "latest";
3416
3538
  let selectedUiTag = "";
3417
3539
  let releases = [];
3418
3540
  let releasesLoading = false;
3541
+ let platformVersion = "";
3419
3542
  let uiVersions = [];
3420
3543
  let uiVersionsLoading = false;
3544
+ const platformLatest = derived(() => latestForChannel(currentImageTag, releases.map((r) => ({
3545
+ version: r.tag,
3546
+ prerelease: r.prerelease
3547
+ }))));
3548
+ const updateAvailable = derived(() => updateStatus(currentImageTag, platformLatest()) === "update");
3421
3549
  onDestroy(() => {
3422
3550
  });
3423
3551
  let anyDangerousLoading = derived(() => upgradeLoading);
@@ -3498,6 +3626,7 @@ function _page($$renderer, $$props) {
3498
3626
  try {
3499
3627
  const [releaseData, uiData] = await Promise.all([fetchReleases(), fetchUiVersions()]);
3500
3628
  releases = releaseData.releases;
3629
+ if (releaseData.platformVersion) platformVersion = releaseData.platformVersion;
3501
3630
  uiVersions = uiData.versions;
3502
3631
  if (!selectedUiTag) {
3503
3632
  const channelPick = uiData.versions.find((v) => v.distTag === "next" || v.distTag === "latest") ?? uiData.versions[0];
@@ -3524,35 +3653,90 @@ function _page($$renderer, $$props) {
3524
3653
  }
3525
3654
  upgradeLoading = false;
3526
3655
  }
3527
- async function handleSetImageTag(tag) {
3656
+ async function handleSetImageTag(tag, confirmDowngrade = false) {
3528
3657
  if (tagChangeLoading) return;
3529
3658
  tagChangeLoading = true;
3530
3659
  try {
3531
- const result = await setStackVersion(tag);
3660
+ const result = await setStackVersion(tag, { confirmDowngrade });
3532
3661
  currentImageTag = result.imageTag;
3533
3662
  selectedImageTag = result.imageTag;
3534
3663
  operationResult = `Image tag set to ${result.imageTag}. Restarted: ${result.restarted.join(", ") || "none"}.`;
3535
3664
  operationResultType = "success";
3665
+ downgradePrompt = null;
3666
+ migratePreview = null;
3536
3667
  } catch (e) {
3537
- operationResult = `Failed to apply image tag: ${e.message ?? e}`;
3538
- operationResultType = "error";
3668
+ if (e instanceof DowngradeConfirmationRequiredError) downgradePrompt = {
3669
+ tag,
3670
+ currentVersion: e.currentVersion,
3671
+ targetVersion: e.targetVersion,
3672
+ message: e.message
3673
+ };
3674
+ else {
3675
+ operationResult = `Failed to apply image tag: ${e.message ?? e}`;
3676
+ operationResultType = "error";
3677
+ }
3539
3678
  }
3540
3679
  tagChangeLoading = false;
3541
3680
  }
3681
+ async function handlePreviewMigration(tag) {
3682
+ if (migratePreviewLoading) return;
3683
+ migratePreviewLoading = true;
3684
+ migratePreview = null;
3685
+ try {
3686
+ const result = await previewMigration(tag);
3687
+ migratePreview = {
3688
+ targetVersion: result.targetVersion,
3689
+ applied: result.applied,
3690
+ lines: result.lines,
3691
+ notes: result.notes
3692
+ };
3693
+ } catch (e) {
3694
+ operationResult = `Failed to preview changes: ${e.message ?? e}`;
3695
+ operationResultType = "error";
3696
+ }
3697
+ migratePreviewLoading = false;
3698
+ }
3699
+ function handleConfirmDowngrade() {
3700
+ if (!downgradePrompt) return;
3701
+ handleSetImageTag(downgradePrompt.tag, true);
3702
+ }
3703
+ function handleCancelDowngrade() {
3704
+ downgradePrompt = null;
3705
+ }
3542
3706
  async function handleDownloadUiVersion(tag) {
3543
3707
  if (uiDownloadLoading) return;
3544
3708
  uiDownloadLoading = true;
3545
3709
  uiDownloadReady = false;
3710
+ uiDownloadRestarting = false;
3546
3711
  try {
3547
- await downloadUiVersion(tag);
3712
+ const result = await downloadUiVersion(tag);
3548
3713
  selectedUiTag = tag;
3549
3714
  uiDownloadReady = true;
3715
+ if (result.restarting) {
3716
+ uiDownloadRestarting = true;
3717
+ waitForUiServerAndReload();
3718
+ }
3550
3719
  } catch (e) {
3551
3720
  operationResult = `Failed to download UI version: ${e.message ?? e}`;
3552
3721
  operationResultType = "error";
3553
3722
  }
3554
3723
  uiDownloadLoading = false;
3555
3724
  }
3725
+ async function waitForUiServerAndReload() {
3726
+ const deadline = Date.now() + 3e4;
3727
+ await new Promise((r) => setTimeout(r, 1500));
3728
+ while (Date.now() < deadline) {
3729
+ try {
3730
+ const res = await fetch("/health", { signal: AbortSignal.timeout(1e3) });
3731
+ if (res.ok || res.status === 401) {
3732
+ window.location.reload();
3733
+ return;
3734
+ }
3735
+ } catch {}
3736
+ await new Promise((r) => setTimeout(r, 750));
3737
+ }
3738
+ uiDownloadRestarting = false;
3739
+ }
3556
3740
  function handleRestartApp() {
3557
3741
  window.openpalm?.restart?.();
3558
3742
  }
@@ -3578,6 +3762,11 @@ function _page($$renderer, $$props) {
3578
3762
  });
3579
3763
  Navbar($$renderer);
3580
3764
  $$renderer.push(`<!----> `);
3765
+ if (updateAvailable() && activeTab !== "updates") {
3766
+ $$renderer.push("<!--[0-->");
3767
+ $$renderer.push(`<div class="update-banner svelte-1jef3w8" role="status"><span class="update-banner-text svelte-1jef3w8">An update is ready${escape_html(platformLatest() ? ` — OpenPalm ${formatVersionForDisplay(platformLatest())}` : "")}.</span> <button class="update-banner-action svelte-1jef3w8">Review it</button></div>`);
3768
+ } else $$renderer.push("<!--[-1-->");
3769
+ $$renderer.push(`<!--]--> `);
3581
3770
  TabBar($$renderer, {
3582
3771
  active: activeTab});
3583
3772
  $$renderer.push(`<!----> <main class="svelte-1jef3w8">`);
@@ -3611,11 +3800,21 @@ function _page($$renderer, $$props) {
3611
3800
  selectedUiTag,
3612
3801
  uiDownloadLoading,
3613
3802
  uiDownloadReady,
3803
+ uiDownloadRestarting,
3614
3804
  releases,
3615
3805
  releasesLoading,
3616
- onSetImageTag: handleSetImageTag,
3806
+ platformVersion,
3807
+ migratePreviewLoading,
3808
+ migratePreview,
3809
+ downgradePrompt,
3810
+ onSetImageTag: (t) => handleSetImageTag(t),
3811
+ onPreviewMigration: handlePreviewMigration,
3812
+ onConfirmDowngrade: handleConfirmDowngrade,
3813
+ onCancelDowngrade: handleCancelDowngrade,
3617
3814
  onSelectedImageTagChange: (t) => {
3618
3815
  selectedImageTag = t;
3816
+ migratePreview = null;
3817
+ downgradePrompt = null;
3619
3818
  },
3620
3819
  onUpgradeStack: handleUpgradeStack,
3621
3820
  onSelectedUiTagChange: (t) => {
@@ -3677,4 +3876,4 @@ function _page($$renderer, $$props) {
3677
3876
  }
3678
3877
 
3679
3878
  export { _page as default };
3680
- //# sourceMappingURL=_page.svelte-BsDNnBfz.js.map
3879
+ //# sourceMappingURL=_page.svelte-F2VqpLAW.js.map