@selvajs/selva 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (769) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -0
  3. package/build/client/_app/immutable/assets/0.B0phAlf7.css +1 -0
  4. package/build/client/_app/immutable/assets/0.B0phAlf7.css.br +0 -0
  5. package/build/client/_app/immutable/assets/0.B0phAlf7.css.gz +0 -0
  6. package/build/client/_app/immutable/assets/20.DzF5JyuX.css +1 -0
  7. package/build/client/_app/immutable/assets/20.DzF5JyuX.css.br +0 -0
  8. package/build/client/_app/immutable/assets/20.DzF5JyuX.css.gz +0 -0
  9. package/build/client/_app/immutable/assets/index.CV-KWLNP.css +1 -0
  10. package/build/client/_app/immutable/assets/index.CV-KWLNP.css.br +1 -0
  11. package/build/client/_app/immutable/assets/index.CV-KWLNP.css.gz +0 -0
  12. package/build/client/_app/immutable/chunks/1s2jTHrf.js +1 -0
  13. package/build/client/_app/immutable/chunks/1s2jTHrf.js.br +0 -0
  14. package/build/client/_app/immutable/chunks/1s2jTHrf.js.gz +0 -0
  15. package/build/client/_app/immutable/chunks/2XlIPTRw.js +1 -0
  16. package/build/client/_app/immutable/chunks/2XlIPTRw.js.br +1 -0
  17. package/build/client/_app/immutable/chunks/2XlIPTRw.js.gz +0 -0
  18. package/build/client/_app/immutable/chunks/2_FEXmq1.js +9 -0
  19. package/build/client/_app/immutable/chunks/2_FEXmq1.js.br +0 -0
  20. package/build/client/_app/immutable/chunks/2_FEXmq1.js.gz +0 -0
  21. package/build/client/_app/immutable/chunks/2dX6Wjni.js +1 -0
  22. package/build/client/_app/immutable/chunks/2dX6Wjni.js.br +0 -0
  23. package/build/client/_app/immutable/chunks/2dX6Wjni.js.gz +0 -0
  24. package/build/client/_app/immutable/chunks/4tskcAVN.js +1 -0
  25. package/build/client/_app/immutable/chunks/4tskcAVN.js.br +0 -0
  26. package/build/client/_app/immutable/chunks/4tskcAVN.js.gz +0 -0
  27. package/build/client/_app/immutable/chunks/4y4xLOS_.js +1 -0
  28. package/build/client/_app/immutable/chunks/4y4xLOS_.js.br +0 -0
  29. package/build/client/_app/immutable/chunks/4y4xLOS_.js.gz +0 -0
  30. package/build/client/_app/immutable/chunks/AEyooZaf.js +1 -0
  31. package/build/client/_app/immutable/chunks/AEyooZaf.js.br +0 -0
  32. package/build/client/_app/immutable/chunks/AEyooZaf.js.gz +0 -0
  33. package/build/client/_app/immutable/chunks/B1aRL9Hz.js +1 -0
  34. package/build/client/_app/immutable/chunks/B1aRL9Hz.js.br +0 -0
  35. package/build/client/_app/immutable/chunks/B1aRL9Hz.js.gz +0 -0
  36. package/build/client/_app/immutable/chunks/B8uG8z2c.js +1 -0
  37. package/build/client/_app/immutable/chunks/B8uG8z2c.js.br +0 -0
  38. package/build/client/_app/immutable/chunks/B8uG8z2c.js.gz +0 -0
  39. package/build/client/_app/immutable/chunks/B8zY50Bc.js +1 -0
  40. package/build/client/_app/immutable/chunks/B8zY50Bc.js.br +5 -0
  41. package/build/client/_app/immutable/chunks/B8zY50Bc.js.gz +0 -0
  42. package/build/client/_app/immutable/chunks/BCse3N0b.js +1 -0
  43. package/build/client/_app/immutable/chunks/BCse3N0b.js.br +0 -0
  44. package/build/client/_app/immutable/chunks/BCse3N0b.js.gz +0 -0
  45. package/build/client/_app/immutable/chunks/BFXFuY-o.js +3 -0
  46. package/build/client/_app/immutable/chunks/BFXFuY-o.js.br +0 -0
  47. package/build/client/_app/immutable/chunks/BFXFuY-o.js.gz +0 -0
  48. package/build/client/_app/immutable/chunks/BGxzXVpM.js +1 -0
  49. package/build/client/_app/immutable/chunks/BGxzXVpM.js.br +0 -0
  50. package/build/client/_app/immutable/chunks/BGxzXVpM.js.gz +0 -0
  51. package/build/client/_app/immutable/chunks/BM4_iXSA.js +1 -0
  52. package/build/client/_app/immutable/chunks/BM4_iXSA.js.br +0 -0
  53. package/build/client/_app/immutable/chunks/BM4_iXSA.js.gz +0 -0
  54. package/build/client/_app/immutable/chunks/BMGykAfL.js +2 -0
  55. package/build/client/_app/immutable/chunks/BMGykAfL.js.br +0 -0
  56. package/build/client/_app/immutable/chunks/BMGykAfL.js.gz +0 -0
  57. package/build/client/_app/immutable/chunks/BNScKugQ.js +1 -0
  58. package/build/client/_app/immutable/chunks/BNScKugQ.js.br +0 -0
  59. package/build/client/_app/immutable/chunks/BNScKugQ.js.gz +0 -0
  60. package/build/client/_app/immutable/chunks/BNzEBMy8.js +1 -0
  61. package/build/client/_app/immutable/chunks/BNzEBMy8.js.br +0 -0
  62. package/build/client/_app/immutable/chunks/BNzEBMy8.js.gz +0 -0
  63. package/build/client/_app/immutable/chunks/BU9URCkw.js +1 -0
  64. package/build/client/_app/immutable/chunks/BU9URCkw.js.br +0 -0
  65. package/build/client/_app/immutable/chunks/BU9URCkw.js.gz +0 -0
  66. package/build/client/_app/immutable/chunks/BW4xleRz.js +1 -0
  67. package/build/client/_app/immutable/chunks/BW4xleRz.js.br +0 -0
  68. package/build/client/_app/immutable/chunks/BW4xleRz.js.gz +0 -0
  69. package/build/client/_app/immutable/chunks/BZmrLQwT.js +1 -0
  70. package/build/client/_app/immutable/chunks/BZmrLQwT.js.br +0 -0
  71. package/build/client/_app/immutable/chunks/BZmrLQwT.js.gz +0 -0
  72. package/build/client/_app/immutable/chunks/B_Lmgh7q.js +1 -0
  73. package/build/client/_app/immutable/chunks/B_Lmgh7q.js.br +0 -0
  74. package/build/client/_app/immutable/chunks/B_Lmgh7q.js.gz +0 -0
  75. package/build/client/_app/immutable/chunks/BapAUJpM.js +1 -0
  76. package/build/client/_app/immutable/chunks/BapAUJpM.js.br +0 -0
  77. package/build/client/_app/immutable/chunks/BapAUJpM.js.gz +0 -0
  78. package/build/client/_app/immutable/chunks/Bb9xebuT.js +1 -0
  79. package/build/client/_app/immutable/chunks/Bb9xebuT.js.br +0 -0
  80. package/build/client/_app/immutable/chunks/Bb9xebuT.js.gz +0 -0
  81. package/build/client/_app/immutable/chunks/BjkQG7dw.js +1 -0
  82. package/build/client/_app/immutable/chunks/BjkQG7dw.js.br +0 -0
  83. package/build/client/_app/immutable/chunks/BjkQG7dw.js.gz +0 -0
  84. package/build/client/_app/immutable/chunks/Bmz9gLBz.js +1 -0
  85. package/build/client/_app/immutable/chunks/Bmz9gLBz.js.br +0 -0
  86. package/build/client/_app/immutable/chunks/Bmz9gLBz.js.gz +0 -0
  87. package/build/client/_app/immutable/chunks/Bnpwcepm.js +1 -0
  88. package/build/client/_app/immutable/chunks/Bnpwcepm.js.br +0 -0
  89. package/build/client/_app/immutable/chunks/Bnpwcepm.js.gz +0 -0
  90. package/build/client/_app/immutable/chunks/BoR6OKl6.js +1 -0
  91. package/build/client/_app/immutable/chunks/BoR6OKl6.js.br +0 -0
  92. package/build/client/_app/immutable/chunks/BoR6OKl6.js.gz +0 -0
  93. package/build/client/_app/immutable/chunks/Br5bpmJC.js +1 -0
  94. package/build/client/_app/immutable/chunks/Br5bpmJC.js.br +0 -0
  95. package/build/client/_app/immutable/chunks/Br5bpmJC.js.gz +0 -0
  96. package/build/client/_app/immutable/chunks/BxCHY0iG.js +1 -0
  97. package/build/client/_app/immutable/chunks/BxCHY0iG.js.br +0 -0
  98. package/build/client/_app/immutable/chunks/BxCHY0iG.js.gz +0 -0
  99. package/build/client/_app/immutable/chunks/C1Sz0rtw.js +1 -0
  100. package/build/client/_app/immutable/chunks/C1Sz0rtw.js.br +0 -0
  101. package/build/client/_app/immutable/chunks/C1Sz0rtw.js.gz +0 -0
  102. package/build/client/_app/immutable/chunks/C1aQuqo_.js +2 -0
  103. package/build/client/_app/immutable/chunks/C1aQuqo_.js.br +0 -0
  104. package/build/client/_app/immutable/chunks/C1aQuqo_.js.gz +0 -0
  105. package/build/client/_app/immutable/chunks/C26nmevH.js +1 -0
  106. package/build/client/_app/immutable/chunks/C26nmevH.js.br +0 -0
  107. package/build/client/_app/immutable/chunks/C26nmevH.js.gz +0 -0
  108. package/build/client/_app/immutable/chunks/C8ko2SLk.js +1 -0
  109. package/build/client/_app/immutable/chunks/C8ko2SLk.js.br +0 -0
  110. package/build/client/_app/immutable/chunks/C8ko2SLk.js.gz +0 -0
  111. package/build/client/_app/immutable/chunks/CAMhfNhW.js +1 -0
  112. package/build/client/_app/immutable/chunks/CAMhfNhW.js.br +0 -0
  113. package/build/client/_app/immutable/chunks/CAMhfNhW.js.gz +0 -0
  114. package/build/client/_app/immutable/chunks/CEnIp_6Y.js +1 -0
  115. package/build/client/_app/immutable/chunks/CEnIp_6Y.js.br +3 -0
  116. package/build/client/_app/immutable/chunks/CEnIp_6Y.js.gz +0 -0
  117. package/build/client/_app/immutable/chunks/CMjc_m7Z.js +1 -0
  118. package/build/client/_app/immutable/chunks/CMjc_m7Z.js.br +0 -0
  119. package/build/client/_app/immutable/chunks/CMjc_m7Z.js.gz +0 -0
  120. package/build/client/_app/immutable/chunks/CRRzXoPz.js +5 -0
  121. package/build/client/_app/immutable/chunks/CRRzXoPz.js.br +0 -0
  122. package/build/client/_app/immutable/chunks/CRRzXoPz.js.gz +0 -0
  123. package/build/client/_app/immutable/chunks/CXh1ITwj.js +1 -0
  124. package/build/client/_app/immutable/chunks/CXh1ITwj.js.br +0 -0
  125. package/build/client/_app/immutable/chunks/CXh1ITwj.js.gz +0 -0
  126. package/build/client/_app/immutable/chunks/CZ1oTCKP.js +1 -0
  127. package/build/client/_app/immutable/chunks/CZ1oTCKP.js.br +0 -0
  128. package/build/client/_app/immutable/chunks/CZ1oTCKP.js.gz +0 -0
  129. package/build/client/_app/immutable/chunks/Cbu9Tg11.js +1 -0
  130. package/build/client/_app/immutable/chunks/Cbu9Tg11.js.br +0 -0
  131. package/build/client/_app/immutable/chunks/Cbu9Tg11.js.gz +0 -0
  132. package/build/client/_app/immutable/chunks/CcYNc8-G.js +1 -0
  133. package/build/client/_app/immutable/chunks/CcYNc8-G.js.br +0 -0
  134. package/build/client/_app/immutable/chunks/CcYNc8-G.js.gz +0 -0
  135. package/build/client/_app/immutable/chunks/Cdcajer6.js +1 -0
  136. package/build/client/_app/immutable/chunks/Cdcajer6.js.br +0 -0
  137. package/build/client/_app/immutable/chunks/Cdcajer6.js.gz +0 -0
  138. package/build/client/_app/immutable/chunks/Ce2MupFq.js +1 -0
  139. package/build/client/_app/immutable/chunks/Ce2MupFq.js.br +0 -0
  140. package/build/client/_app/immutable/chunks/Ce2MupFq.js.gz +0 -0
  141. package/build/client/_app/immutable/chunks/CfP1DoGT.js +1 -0
  142. package/build/client/_app/immutable/chunks/CfP1DoGT.js.br +0 -0
  143. package/build/client/_app/immutable/chunks/CfP1DoGT.js.gz +0 -0
  144. package/build/client/_app/immutable/chunks/CfhPDo21.js +1 -0
  145. package/build/client/_app/immutable/chunks/CfhPDo21.js.br +1 -0
  146. package/build/client/_app/immutable/chunks/CfhPDo21.js.gz +0 -0
  147. package/build/client/_app/immutable/chunks/ChSMnQMB.js +2 -0
  148. package/build/client/_app/immutable/chunks/ChSMnQMB.js.br +0 -0
  149. package/build/client/_app/immutable/chunks/ChSMnQMB.js.gz +0 -0
  150. package/build/client/_app/immutable/chunks/CkW8YtSm.js +1 -0
  151. package/build/client/_app/immutable/chunks/CkW8YtSm.js.br +0 -0
  152. package/build/client/_app/immutable/chunks/CkW8YtSm.js.gz +0 -0
  153. package/build/client/_app/immutable/chunks/CoR7xVWs.js +1 -0
  154. package/build/client/_app/immutable/chunks/CoR7xVWs.js.br +0 -0
  155. package/build/client/_app/immutable/chunks/CoR7xVWs.js.gz +0 -0
  156. package/build/client/_app/immutable/chunks/CpGv0MSX.js +1 -0
  157. package/build/client/_app/immutable/chunks/CpGv0MSX.js.br +0 -0
  158. package/build/client/_app/immutable/chunks/CpGv0MSX.js.gz +0 -0
  159. package/build/client/_app/immutable/chunks/Cvr8AlQE.js +1 -0
  160. package/build/client/_app/immutable/chunks/Cvr8AlQE.js.br +0 -0
  161. package/build/client/_app/immutable/chunks/Cvr8AlQE.js.gz +0 -0
  162. package/build/client/_app/immutable/chunks/D0QMYypb.js +1 -0
  163. package/build/client/_app/immutable/chunks/D0QMYypb.js.br +0 -0
  164. package/build/client/_app/immutable/chunks/D0QMYypb.js.gz +0 -0
  165. package/build/client/_app/immutable/chunks/D40b34QZ.js +1 -0
  166. package/build/client/_app/immutable/chunks/D40b34QZ.js.br +0 -0
  167. package/build/client/_app/immutable/chunks/D40b34QZ.js.gz +0 -0
  168. package/build/client/_app/immutable/chunks/D6MI_dhi.js +1 -0
  169. package/build/client/_app/immutable/chunks/D6MI_dhi.js.br +0 -0
  170. package/build/client/_app/immutable/chunks/D6MI_dhi.js.gz +0 -0
  171. package/build/client/_app/immutable/chunks/D7PHp8xb.js +1 -0
  172. package/build/client/_app/immutable/chunks/D7PHp8xb.js.br +0 -0
  173. package/build/client/_app/immutable/chunks/D7PHp8xb.js.gz +0 -0
  174. package/build/client/_app/immutable/chunks/D7l1JayF.js +1 -0
  175. package/build/client/_app/immutable/chunks/D7l1JayF.js.br +0 -0
  176. package/build/client/_app/immutable/chunks/D7l1JayF.js.gz +0 -0
  177. package/build/client/_app/immutable/chunks/D99uXqZb.js +1 -0
  178. package/build/client/_app/immutable/chunks/D99uXqZb.js.br +0 -0
  179. package/build/client/_app/immutable/chunks/D99uXqZb.js.gz +0 -0
  180. package/build/client/_app/immutable/chunks/DEBBEmC0.js +1 -0
  181. package/build/client/_app/immutable/chunks/DEBBEmC0.js.br +0 -0
  182. package/build/client/_app/immutable/chunks/DEBBEmC0.js.gz +0 -0
  183. package/build/client/_app/immutable/chunks/DHWrMZkd.js +1 -0
  184. package/build/client/_app/immutable/chunks/DHWrMZkd.js.br +0 -0
  185. package/build/client/_app/immutable/chunks/DHWrMZkd.js.gz +0 -0
  186. package/build/client/_app/immutable/chunks/DNsLImlA.js +64 -0
  187. package/build/client/_app/immutable/chunks/DNsLImlA.js.br +0 -0
  188. package/build/client/_app/immutable/chunks/DNsLImlA.js.gz +0 -0
  189. package/build/client/_app/immutable/chunks/DRDjLZb3.js +1 -0
  190. package/build/client/_app/immutable/chunks/DRDjLZb3.js.br +3 -0
  191. package/build/client/_app/immutable/chunks/DRDjLZb3.js.gz +0 -0
  192. package/build/client/_app/immutable/chunks/DTJeGfAL.js +1 -0
  193. package/build/client/_app/immutable/chunks/DTJeGfAL.js.br +0 -0
  194. package/build/client/_app/immutable/chunks/DTJeGfAL.js.gz +0 -0
  195. package/build/client/_app/immutable/chunks/DZFqETAQ.js +1 -0
  196. package/build/client/_app/immutable/chunks/DZFqETAQ.js.br +0 -0
  197. package/build/client/_app/immutable/chunks/DZFqETAQ.js.gz +0 -0
  198. package/build/client/_app/immutable/chunks/D_wr-JLf.js +1 -0
  199. package/build/client/_app/immutable/chunks/D_wr-JLf.js.br +0 -0
  200. package/build/client/_app/immutable/chunks/D_wr-JLf.js.gz +0 -0
  201. package/build/client/_app/immutable/chunks/DdaJZmuM.js +1 -0
  202. package/build/client/_app/immutable/chunks/DdaJZmuM.js.br +0 -0
  203. package/build/client/_app/immutable/chunks/DdaJZmuM.js.gz +0 -0
  204. package/build/client/_app/immutable/chunks/Dl4WTuMB.js +1 -0
  205. package/build/client/_app/immutable/chunks/Dl4WTuMB.js.br +0 -0
  206. package/build/client/_app/immutable/chunks/Dl4WTuMB.js.gz +0 -0
  207. package/build/client/_app/immutable/chunks/Doks8ISn.js +1 -0
  208. package/build/client/_app/immutable/chunks/Doks8ISn.js.br +0 -0
  209. package/build/client/_app/immutable/chunks/Doks8ISn.js.gz +0 -0
  210. package/build/client/_app/immutable/chunks/DsnmJJEf.js +1 -0
  211. package/build/client/_app/immutable/chunks/DsnmJJEf.js.br +2 -0
  212. package/build/client/_app/immutable/chunks/DsnmJJEf.js.gz +0 -0
  213. package/build/client/_app/immutable/chunks/E3yOQTT0.js +1 -0
  214. package/build/client/_app/immutable/chunks/E3yOQTT0.js.br +0 -0
  215. package/build/client/_app/immutable/chunks/E3yOQTT0.js.gz +0 -0
  216. package/build/client/_app/immutable/chunks/Gxlzmh6y.js +1 -0
  217. package/build/client/_app/immutable/chunks/Gxlzmh6y.js.br +0 -0
  218. package/build/client/_app/immutable/chunks/Gxlzmh6y.js.gz +0 -0
  219. package/build/client/_app/immutable/chunks/Ib-7xmHT.js +1 -0
  220. package/build/client/_app/immutable/chunks/Ib-7xmHT.js.br +0 -0
  221. package/build/client/_app/immutable/chunks/Ib-7xmHT.js.gz +0 -0
  222. package/build/client/_app/immutable/chunks/P4Np3c9O.js +1 -0
  223. package/build/client/_app/immutable/chunks/P4Np3c9O.js.br +0 -0
  224. package/build/client/_app/immutable/chunks/P4Np3c9O.js.gz +0 -0
  225. package/build/client/_app/immutable/chunks/Zf7VV5ZB.js +1 -0
  226. package/build/client/_app/immutable/chunks/Zf7VV5ZB.js.br +0 -0
  227. package/build/client/_app/immutable/chunks/Zf7VV5ZB.js.gz +0 -0
  228. package/build/client/_app/immutable/chunks/_OLpdTiI.js +1 -0
  229. package/build/client/_app/immutable/chunks/_OLpdTiI.js.br +0 -0
  230. package/build/client/_app/immutable/chunks/_OLpdTiI.js.gz +0 -0
  231. package/build/client/_app/immutable/chunks/azBeeLR0.js +1 -0
  232. package/build/client/_app/immutable/chunks/azBeeLR0.js.br +0 -0
  233. package/build/client/_app/immutable/chunks/azBeeLR0.js.gz +0 -0
  234. package/build/client/_app/immutable/chunks/gMllmzma.js +1 -0
  235. package/build/client/_app/immutable/chunks/gMllmzma.js.br +0 -0
  236. package/build/client/_app/immutable/chunks/gMllmzma.js.gz +0 -0
  237. package/build/client/_app/immutable/chunks/hRoV10UM.js +1 -0
  238. package/build/client/_app/immutable/chunks/hRoV10UM.js.br +0 -0
  239. package/build/client/_app/immutable/chunks/hRoV10UM.js.gz +0 -0
  240. package/build/client/_app/immutable/chunks/iEBlyxZv.js +1 -0
  241. package/build/client/_app/immutable/chunks/iEBlyxZv.js.br +0 -0
  242. package/build/client/_app/immutable/chunks/iEBlyxZv.js.gz +0 -0
  243. package/build/client/_app/immutable/chunks/jFKgkeON.js +1 -0
  244. package/build/client/_app/immutable/chunks/jFKgkeON.js.br +0 -0
  245. package/build/client/_app/immutable/chunks/jFKgkeON.js.gz +0 -0
  246. package/build/client/_app/immutable/chunks/ooPBmYPj.js +1 -0
  247. package/build/client/_app/immutable/chunks/ooPBmYPj.js.br +0 -0
  248. package/build/client/_app/immutable/chunks/ooPBmYPj.js.gz +0 -0
  249. package/build/client/_app/immutable/chunks/pRg-f8xU.js +1 -0
  250. package/build/client/_app/immutable/chunks/pRg-f8xU.js.br +0 -0
  251. package/build/client/_app/immutable/chunks/pRg-f8xU.js.gz +0 -0
  252. package/build/client/_app/immutable/chunks/uINs3xv3.js +1 -0
  253. package/build/client/_app/immutable/chunks/uINs3xv3.js.br +0 -0
  254. package/build/client/_app/immutable/chunks/uINs3xv3.js.gz +0 -0
  255. package/build/client/_app/immutable/chunks/wamM80bu.js +1 -0
  256. package/build/client/_app/immutable/chunks/wamM80bu.js.br +0 -0
  257. package/build/client/_app/immutable/chunks/wamM80bu.js.gz +0 -0
  258. package/build/client/_app/immutable/entry/app.CY1cyDxx.js +2 -0
  259. package/build/client/_app/immutable/entry/app.CY1cyDxx.js.br +0 -0
  260. package/build/client/_app/immutable/entry/app.CY1cyDxx.js.gz +0 -0
  261. package/build/client/_app/immutable/entry/start.ByTVZFMZ.js +1 -0
  262. package/build/client/_app/immutable/entry/start.ByTVZFMZ.js.br +2 -0
  263. package/build/client/_app/immutable/entry/start.ByTVZFMZ.js.gz +0 -0
  264. package/build/client/_app/immutable/nodes/0.CQbbSrko.js +1 -0
  265. package/build/client/_app/immutable/nodes/0.CQbbSrko.js.br +0 -0
  266. package/build/client/_app/immutable/nodes/0.CQbbSrko.js.gz +0 -0
  267. package/build/client/_app/immutable/nodes/1.WcE6FOcF.js +1 -0
  268. package/build/client/_app/immutable/nodes/1.WcE6FOcF.js.br +0 -0
  269. package/build/client/_app/immutable/nodes/1.WcE6FOcF.js.gz +0 -0
  270. package/build/client/_app/immutable/nodes/10.Bl4yPogx.js +3 -0
  271. package/build/client/_app/immutable/nodes/10.Bl4yPogx.js.br +0 -0
  272. package/build/client/_app/immutable/nodes/10.Bl4yPogx.js.gz +0 -0
  273. package/build/client/_app/immutable/nodes/11.kVvSmSNV.js +2 -0
  274. package/build/client/_app/immutable/nodes/11.kVvSmSNV.js.br +0 -0
  275. package/build/client/_app/immutable/nodes/11.kVvSmSNV.js.gz +0 -0
  276. package/build/client/_app/immutable/nodes/12.BoPfAFdi.js +1 -0
  277. package/build/client/_app/immutable/nodes/12.BoPfAFdi.js.br +0 -0
  278. package/build/client/_app/immutable/nodes/12.BoPfAFdi.js.gz +0 -0
  279. package/build/client/_app/immutable/nodes/13.JyGUEsdb.js +2 -0
  280. package/build/client/_app/immutable/nodes/13.JyGUEsdb.js.br +0 -0
  281. package/build/client/_app/immutable/nodes/13.JyGUEsdb.js.gz +0 -0
  282. package/build/client/_app/immutable/nodes/14.BbJglRXt.js +2 -0
  283. package/build/client/_app/immutable/nodes/14.BbJglRXt.js.br +0 -0
  284. package/build/client/_app/immutable/nodes/14.BbJglRXt.js.gz +0 -0
  285. package/build/client/_app/immutable/nodes/15.94-Zje0s.js +13 -0
  286. package/build/client/_app/immutable/nodes/15.94-Zje0s.js.br +0 -0
  287. package/build/client/_app/immutable/nodes/15.94-Zje0s.js.gz +0 -0
  288. package/build/client/_app/immutable/nodes/16.DRADdurD.js +6 -0
  289. package/build/client/_app/immutable/nodes/16.DRADdurD.js.br +0 -0
  290. package/build/client/_app/immutable/nodes/16.DRADdurD.js.gz +0 -0
  291. package/build/client/_app/immutable/nodes/17.DOsqdwdd.js +2 -0
  292. package/build/client/_app/immutable/nodes/17.DOsqdwdd.js.br +0 -0
  293. package/build/client/_app/immutable/nodes/17.DOsqdwdd.js.gz +0 -0
  294. package/build/client/_app/immutable/nodes/18.BpVlwZ30.js +1 -0
  295. package/build/client/_app/immutable/nodes/18.BpVlwZ30.js.br +0 -0
  296. package/build/client/_app/immutable/nodes/18.BpVlwZ30.js.gz +0 -0
  297. package/build/client/_app/immutable/nodes/19.S2J54AdY.js +2 -0
  298. package/build/client/_app/immutable/nodes/19.S2J54AdY.js.br +0 -0
  299. package/build/client/_app/immutable/nodes/19.S2J54AdY.js.gz +0 -0
  300. package/build/client/_app/immutable/nodes/2.CKVtP2Ky.js +1 -0
  301. package/build/client/_app/immutable/nodes/2.CKVtP2Ky.js.br +0 -0
  302. package/build/client/_app/immutable/nodes/2.CKVtP2Ky.js.gz +0 -0
  303. package/build/client/_app/immutable/nodes/20.BCasu2g4.js +4116 -0
  304. package/build/client/_app/immutable/nodes/20.BCasu2g4.js.br +0 -0
  305. package/build/client/_app/immutable/nodes/20.BCasu2g4.js.gz +0 -0
  306. package/build/client/_app/immutable/nodes/21.C1aTaoAB.js +3 -0
  307. package/build/client/_app/immutable/nodes/21.C1aTaoAB.js.br +0 -0
  308. package/build/client/_app/immutable/nodes/21.C1aTaoAB.js.gz +0 -0
  309. package/build/client/_app/immutable/nodes/23.DP5Be3HR.js +16 -0
  310. package/build/client/_app/immutable/nodes/23.DP5Be3HR.js.br +0 -0
  311. package/build/client/_app/immutable/nodes/23.DP5Be3HR.js.gz +0 -0
  312. package/build/client/_app/immutable/nodes/24.BB6fXxnh.js +6 -0
  313. package/build/client/_app/immutable/nodes/24.BB6fXxnh.js.br +0 -0
  314. package/build/client/_app/immutable/nodes/24.BB6fXxnh.js.gz +0 -0
  315. package/build/client/_app/immutable/nodes/25.oeBaWIUn.js +1 -0
  316. package/build/client/_app/immutable/nodes/25.oeBaWIUn.js.br +0 -0
  317. package/build/client/_app/immutable/nodes/25.oeBaWIUn.js.gz +0 -0
  318. package/build/client/_app/immutable/nodes/26.lPx5SjN1.js +3 -0
  319. package/build/client/_app/immutable/nodes/26.lPx5SjN1.js.br +0 -0
  320. package/build/client/_app/immutable/nodes/26.lPx5SjN1.js.gz +0 -0
  321. package/build/client/_app/immutable/nodes/27.DB7PVQXo.js +4 -0
  322. package/build/client/_app/immutable/nodes/27.DB7PVQXo.js.br +0 -0
  323. package/build/client/_app/immutable/nodes/27.DB7PVQXo.js.gz +0 -0
  324. package/build/client/_app/immutable/nodes/28.Cf2R7A3f.js +4 -0
  325. package/build/client/_app/immutable/nodes/28.Cf2R7A3f.js.br +0 -0
  326. package/build/client/_app/immutable/nodes/28.Cf2R7A3f.js.gz +0 -0
  327. package/build/client/_app/immutable/nodes/29.CyJS5sye.js +2 -0
  328. package/build/client/_app/immutable/nodes/29.CyJS5sye.js.br +0 -0
  329. package/build/client/_app/immutable/nodes/29.CyJS5sye.js.gz +0 -0
  330. package/build/client/_app/immutable/nodes/3.DWyky0UV.js +1 -0
  331. package/build/client/_app/immutable/nodes/3.DWyky0UV.js.br +0 -0
  332. package/build/client/_app/immutable/nodes/3.DWyky0UV.js.gz +0 -0
  333. package/build/client/_app/immutable/nodes/30.BFpYKBJh.js +2 -0
  334. package/build/client/_app/immutable/nodes/30.BFpYKBJh.js.br +0 -0
  335. package/build/client/_app/immutable/nodes/30.BFpYKBJh.js.gz +0 -0
  336. package/build/client/_app/immutable/nodes/31.DKnO7o1W.js +2 -0
  337. package/build/client/_app/immutable/nodes/31.DKnO7o1W.js.br +0 -0
  338. package/build/client/_app/immutable/nodes/31.DKnO7o1W.js.gz +0 -0
  339. package/build/client/_app/immutable/nodes/32.D4xYDWvG.js +3 -0
  340. package/build/client/_app/immutable/nodes/32.D4xYDWvG.js.br +0 -0
  341. package/build/client/_app/immutable/nodes/32.D4xYDWvG.js.gz +0 -0
  342. package/build/client/_app/immutable/nodes/4.0a-qdY5B.js +1 -0
  343. package/build/client/_app/immutable/nodes/4.0a-qdY5B.js.br +0 -0
  344. package/build/client/_app/immutable/nodes/4.0a-qdY5B.js.gz +0 -0
  345. package/build/client/_app/immutable/nodes/5.BzQBSRbS.js +1 -0
  346. package/build/client/_app/immutable/nodes/5.BzQBSRbS.js.br +0 -0
  347. package/build/client/_app/immutable/nodes/5.BzQBSRbS.js.gz +0 -0
  348. package/build/client/_app/immutable/nodes/6.gJ2nhxWc.js +1 -0
  349. package/build/client/_app/immutable/nodes/6.gJ2nhxWc.js.br +0 -0
  350. package/build/client/_app/immutable/nodes/6.gJ2nhxWc.js.gz +0 -0
  351. package/build/client/_app/immutable/nodes/7.tBTDolnc.js +1 -0
  352. package/build/client/_app/immutable/nodes/7.tBTDolnc.js.br +0 -0
  353. package/build/client/_app/immutable/nodes/7.tBTDolnc.js.gz +0 -0
  354. package/build/client/_app/immutable/nodes/8.BJK9n85D.js +2 -0
  355. package/build/client/_app/immutable/nodes/8.BJK9n85D.js.br +0 -0
  356. package/build/client/_app/immutable/nodes/8.BJK9n85D.js.gz +0 -0
  357. package/build/client/_app/immutable/nodes/9.un0j6nRP.js +1 -0
  358. package/build/client/_app/immutable/nodes/9.un0j6nRP.js.br +0 -0
  359. package/build/client/_app/immutable/nodes/9.un0j6nRP.js.gz +0 -0
  360. package/build/client/_app/version.json +1 -0
  361. package/build/client/_app/version.json.br +1 -0
  362. package/build/client/_app/version.json.gz +0 -0
  363. package/build/client/baseHDR.hdr +0 -0
  364. package/build/client/favicon/apple-touch-icon.png +0 -0
  365. package/build/client/favicon/favicon-96x96.png +0 -0
  366. package/build/client/favicon/favicon.ico +0 -0
  367. package/build/client/favicon/favicon.svg +1 -0
  368. package/build/client/favicon/favicon.svg.br +0 -0
  369. package/build/client/favicon/favicon.svg.gz +0 -0
  370. package/build/client/favicon/site.webmanifest +21 -0
  371. package/build/client/favicon/web-app-manifest-192x192.png +0 -0
  372. package/build/client/favicon/web-app-manifest-512x512.png +0 -0
  373. package/build/client/robots.txt +3 -0
  374. package/build/client/robots.txt.br +0 -0
  375. package/build/client/robots.txt.gz +0 -0
  376. package/build/env.js +94 -0
  377. package/build/handler.js +1494 -0
  378. package/build/index.js +345 -0
  379. package/build/server/chunks/0-BRU03dEw.js +55 -0
  380. package/build/server/chunks/0-BRU03dEw.js.map +1 -0
  381. package/build/server/chunks/1-m_oCIIXD.js +9 -0
  382. package/build/server/chunks/1-m_oCIIXD.js.map +1 -0
  383. package/build/server/chunks/10-J_ZMrbXX.js +220 -0
  384. package/build/server/chunks/10-J_ZMrbXX.js.map +1 -0
  385. package/build/server/chunks/11-Dz77N9MO.js +57 -0
  386. package/build/server/chunks/11-Dz77N9MO.js.map +1 -0
  387. package/build/server/chunks/12-CrOqT0Q5.js +52 -0
  388. package/build/server/chunks/12-CrOqT0Q5.js.map +1 -0
  389. package/build/server/chunks/13-DQGOyx8W.js +56 -0
  390. package/build/server/chunks/13-DQGOyx8W.js.map +1 -0
  391. package/build/server/chunks/14-Dl5jyPyO.js +99 -0
  392. package/build/server/chunks/14-Dl5jyPyO.js.map +1 -0
  393. package/build/server/chunks/15-CNzxJkd-.js +38 -0
  394. package/build/server/chunks/15-CNzxJkd-.js.map +1 -0
  395. package/build/server/chunks/16-5ZcnQNjK.js +83 -0
  396. package/build/server/chunks/16-5ZcnQNjK.js.map +1 -0
  397. package/build/server/chunks/17-C4Zpziyd.js +9 -0
  398. package/build/server/chunks/17-C4Zpziyd.js.map +1 -0
  399. package/build/server/chunks/18-DFxW4YE_.js +74 -0
  400. package/build/server/chunks/18-DFxW4YE_.js.map +1 -0
  401. package/build/server/chunks/19-C8RtlFzY.js +92 -0
  402. package/build/server/chunks/19-C8RtlFzY.js.map +1 -0
  403. package/build/server/chunks/2-tPIqsVg3.js +40 -0
  404. package/build/server/chunks/2-tPIqsVg3.js.map +1 -0
  405. package/build/server/chunks/20-DLtIYsB6.js +172 -0
  406. package/build/server/chunks/20-DLtIYsB6.js.map +1 -0
  407. package/build/server/chunks/21-Bs7WlXoO.js +74 -0
  408. package/build/server/chunks/21-Bs7WlXoO.js.map +1 -0
  409. package/build/server/chunks/22-Bweil5nd.js +23 -0
  410. package/build/server/chunks/22-Bweil5nd.js.map +1 -0
  411. package/build/server/chunks/23-dTtOINB8.js +136 -0
  412. package/build/server/chunks/23-dTtOINB8.js.map +1 -0
  413. package/build/server/chunks/24-DFoVUKXD.js +144 -0
  414. package/build/server/chunks/24-DFoVUKXD.js.map +1 -0
  415. package/build/server/chunks/25-DstWRI72.js +51 -0
  416. package/build/server/chunks/25-DstWRI72.js.map +1 -0
  417. package/build/server/chunks/26-CI8uo3hW.js +9 -0
  418. package/build/server/chunks/26-CI8uo3hW.js.map +1 -0
  419. package/build/server/chunks/27-CpQEotb7.js +57 -0
  420. package/build/server/chunks/27-CpQEotb7.js.map +1 -0
  421. package/build/server/chunks/28-B-G5uvxa.js +68 -0
  422. package/build/server/chunks/28-B-G5uvxa.js.map +1 -0
  423. package/build/server/chunks/29-BFo4HkLa.js +55 -0
  424. package/build/server/chunks/29-BFo4HkLa.js.map +1 -0
  425. package/build/server/chunks/3-BU-Ucrf8.js +9 -0
  426. package/build/server/chunks/3-BU-Ucrf8.js.map +1 -0
  427. package/build/server/chunks/30-zdVVQ-al.js +57 -0
  428. package/build/server/chunks/30-zdVVQ-al.js.map +1 -0
  429. package/build/server/chunks/31-Cba3pMW9.js +42 -0
  430. package/build/server/chunks/31-Cba3pMW9.js.map +1 -0
  431. package/build/server/chunks/32-BmfoNY4G.js +34 -0
  432. package/build/server/chunks/32-BmfoNY4G.js.map +1 -0
  433. package/build/server/chunks/4-rU40n2rV.js +9 -0
  434. package/build/server/chunks/4-rU40n2rV.js.map +1 -0
  435. package/build/server/chunks/5-CsoWfpGS.js +32 -0
  436. package/build/server/chunks/5-CsoWfpGS.js.map +1 -0
  437. package/build/server/chunks/6-D7wR-syA.js +40 -0
  438. package/build/server/chunks/6-D7wR-syA.js.map +1 -0
  439. package/build/server/chunks/7-uEz6AFkY.js +19 -0
  440. package/build/server/chunks/7-uEz6AFkY.js.map +1 -0
  441. package/build/server/chunks/8-BF-aCqND.js +130 -0
  442. package/build/server/chunks/8-BF-aCqND.js.map +1 -0
  443. package/build/server/chunks/9-BSxBuZbd.js +46 -0
  444. package/build/server/chunks/9-BSxBuZbd.js.map +1 -0
  445. package/build/server/chunks/AppHeader-BGs-cVxu.js +270 -0
  446. package/build/server/chunks/AppHeader-BGs-cVxu.js.map +1 -0
  447. package/build/server/chunks/DataTable-Calmth3f.js +26 -0
  448. package/build/server/chunks/DataTable-Calmth3f.js.map +1 -0
  449. package/build/server/chunks/DefinitionCard-p4VxRESg.js +257 -0
  450. package/build/server/chunks/DefinitionCard-p4VxRESg.js.map +1 -0
  451. package/build/server/chunks/EmptyState-Vs823elu.js +53 -0
  452. package/build/server/chunks/EmptyState-Vs823elu.js.map +1 -0
  453. package/build/server/chunks/ErrorScreen-Btv-WHiu.js +131 -0
  454. package/build/server/chunks/ErrorScreen-Btv-WHiu.js.map +1 -0
  455. package/build/server/chunks/FilterableDropdown-B2_HPO_D.js +61 -0
  456. package/build/server/chunks/FilterableDropdown-B2_HPO_D.js.map +1 -0
  457. package/build/server/chunks/SectionHeader-C1XxBz32.js +32 -0
  458. package/build/server/chunks/SectionHeader-C1XxBz32.js.map +1 -0
  459. package/build/server/chunks/SideNav-B8LeM-P_.js +87 -0
  460. package/build/server/chunks/SideNav-B8LeM-P_.js.map +1 -0
  461. package/build/server/chunks/StatCard--Plm6nsA.js +50 -0
  462. package/build/server/chunks/StatCard--Plm6nsA.js.map +1 -0
  463. package/build/server/chunks/UserAvatar-CaOe1AcR.js +13 -0
  464. package/build/server/chunks/UserAvatar-CaOe1AcR.js.map +1 -0
  465. package/build/server/chunks/UserChip-vdJXrk99.js +1113 -0
  466. package/build/server/chunks/UserChip-vdJXrk99.js.map +1 -0
  467. package/build/server/chunks/_error.svelte-Bifw6LEZ.js +27 -0
  468. package/build/server/chunks/_error.svelte-Bifw6LEZ.js.map +1 -0
  469. package/build/server/chunks/_error.svelte-C2KGldTD.js +29 -0
  470. package/build/server/chunks/_error.svelte-C2KGldTD.js.map +1 -0
  471. package/build/server/chunks/_layout.svelte-1of9r1N3.js +42 -0
  472. package/build/server/chunks/_layout.svelte-1of9r1N3.js.map +1 -0
  473. package/build/server/chunks/_layout.svelte-CGIvkx7D.js +152 -0
  474. package/build/server/chunks/_layout.svelte-CGIvkx7D.js.map +1 -0
  475. package/build/server/chunks/_layout.svelte-CyAPRqZR.js +10 -0
  476. package/build/server/chunks/_layout.svelte-CyAPRqZR.js.map +1 -0
  477. package/build/server/chunks/_layout.svelte-Czx3WsTK.js +795 -0
  478. package/build/server/chunks/_layout.svelte-Czx3WsTK.js.map +1 -0
  479. package/build/server/chunks/_layout.svelte-HGSVxA0R.js +105 -0
  480. package/build/server/chunks/_layout.svelte-HGSVxA0R.js.map +1 -0
  481. package/build/server/chunks/_page.svelte-4090fhI5.js +83 -0
  482. package/build/server/chunks/_page.svelte-4090fhI5.js.map +1 -0
  483. package/build/server/chunks/_page.svelte-5X2iRv32.js +711 -0
  484. package/build/server/chunks/_page.svelte-5X2iRv32.js.map +1 -0
  485. package/build/server/chunks/_page.svelte-BO2coOCw.js +10510 -0
  486. package/build/server/chunks/_page.svelte-BO2coOCw.js.map +1 -0
  487. package/build/server/chunks/_page.svelte-BfQQ6DpG.js +276 -0
  488. package/build/server/chunks/_page.svelte-BfQQ6DpG.js.map +1 -0
  489. package/build/server/chunks/_page.svelte-Br3YjZJA.js +595 -0
  490. package/build/server/chunks/_page.svelte-Br3YjZJA.js.map +1 -0
  491. package/build/server/chunks/_page.svelte-BvG__sle.js +119 -0
  492. package/build/server/chunks/_page.svelte-BvG__sle.js.map +1 -0
  493. package/build/server/chunks/_page.svelte-C2Pa9XCr.js +119 -0
  494. package/build/server/chunks/_page.svelte-C2Pa9XCr.js.map +1 -0
  495. package/build/server/chunks/_page.svelte-C48Yzxtt.js +330 -0
  496. package/build/server/chunks/_page.svelte-C48Yzxtt.js.map +1 -0
  497. package/build/server/chunks/_page.svelte-C4V_xDVU.js +329 -0
  498. package/build/server/chunks/_page.svelte-C4V_xDVU.js.map +1 -0
  499. package/build/server/chunks/_page.svelte-CFbpEr-L.js +249 -0
  500. package/build/server/chunks/_page.svelte-CFbpEr-L.js.map +1 -0
  501. package/build/server/chunks/_page.svelte-CGuEBnqj.js +168 -0
  502. package/build/server/chunks/_page.svelte-CGuEBnqj.js.map +1 -0
  503. package/build/server/chunks/_page.svelte-CWJ99QbZ.js +500 -0
  504. package/build/server/chunks/_page.svelte-CWJ99QbZ.js.map +1 -0
  505. package/build/server/chunks/_page.svelte-CX9DKxIH.js +520 -0
  506. package/build/server/chunks/_page.svelte-CX9DKxIH.js.map +1 -0
  507. package/build/server/chunks/_page.svelte-Cn6-gBTd.js +56 -0
  508. package/build/server/chunks/_page.svelte-Cn6-gBTd.js.map +1 -0
  509. package/build/server/chunks/_page.svelte-D2rnbrpK.js +423 -0
  510. package/build/server/chunks/_page.svelte-D2rnbrpK.js.map +1 -0
  511. package/build/server/chunks/_page.svelte-DIgP7KVt.js +549 -0
  512. package/build/server/chunks/_page.svelte-DIgP7KVt.js.map +1 -0
  513. package/build/server/chunks/_page.svelte-DMn46_VU.js +301 -0
  514. package/build/server/chunks/_page.svelte-DMn46_VU.js.map +1 -0
  515. package/build/server/chunks/_page.svelte-DQeDu6UN.js +146 -0
  516. package/build/server/chunks/_page.svelte-DQeDu6UN.js.map +1 -0
  517. package/build/server/chunks/_page.svelte-DSpONoJg.js +252 -0
  518. package/build/server/chunks/_page.svelte-DSpONoJg.js.map +1 -0
  519. package/build/server/chunks/_page.svelte-DciqGYJp.js +609 -0
  520. package/build/server/chunks/_page.svelte-DciqGYJp.js.map +1 -0
  521. package/build/server/chunks/_page.svelte-DfCFSzaO.js +3847 -0
  522. package/build/server/chunks/_page.svelte-DfCFSzaO.js.map +1 -0
  523. package/build/server/chunks/_page.svelte-DtUlWJaB.js +113 -0
  524. package/build/server/chunks/_page.svelte-DtUlWJaB.js.map +1 -0
  525. package/build/server/chunks/_page.svelte-KapMJV5_.js +452 -0
  526. package/build/server/chunks/_page.svelte-KapMJV5_.js.map +1 -0
  527. package/build/server/chunks/_page.svelte-wsvtYRRE.js +69 -0
  528. package/build/server/chunks/_page.svelte-wsvtYRRE.js.map +1 -0
  529. package/build/server/chunks/_page.svelte-zL7ihDzp.js +13 -0
  530. package/build/server/chunks/_page.svelte-zL7ihDzp.js.map +1 -0
  531. package/build/server/chunks/_server.ts-0ncRaWJ_.js +39 -0
  532. package/build/server/chunks/_server.ts-0ncRaWJ_.js.map +1 -0
  533. package/build/server/chunks/_server.ts-7hKc3tb_.js +28 -0
  534. package/build/server/chunks/_server.ts-7hKc3tb_.js.map +1 -0
  535. package/build/server/chunks/_server.ts-B0wiCYbB.js +36 -0
  536. package/build/server/chunks/_server.ts-B0wiCYbB.js.map +1 -0
  537. package/build/server/chunks/_server.ts-BJWFkEuu.js +94 -0
  538. package/build/server/chunks/_server.ts-BJWFkEuu.js.map +1 -0
  539. package/build/server/chunks/_server.ts-BLHjzdRp.js +30 -0
  540. package/build/server/chunks/_server.ts-BLHjzdRp.js.map +1 -0
  541. package/build/server/chunks/_server.ts-BUc1sqlR.js +58 -0
  542. package/build/server/chunks/_server.ts-BUc1sqlR.js.map +1 -0
  543. package/build/server/chunks/_server.ts-B_MVq_5r.js +72 -0
  544. package/build/server/chunks/_server.ts-B_MVq_5r.js.map +1 -0
  545. package/build/server/chunks/_server.ts-Bb3Kpo0Y.js +38 -0
  546. package/build/server/chunks/_server.ts-Bb3Kpo0Y.js.map +1 -0
  547. package/build/server/chunks/_server.ts-BemU6FO1.js +64 -0
  548. package/build/server/chunks/_server.ts-BemU6FO1.js.map +1 -0
  549. package/build/server/chunks/_server.ts-BkKg2yyC.js +75 -0
  550. package/build/server/chunks/_server.ts-BkKg2yyC.js.map +1 -0
  551. package/build/server/chunks/_server.ts-BpAINcOs.js +276 -0
  552. package/build/server/chunks/_server.ts-BpAINcOs.js.map +1 -0
  553. package/build/server/chunks/_server.ts-BpkR7TzP.js +30 -0
  554. package/build/server/chunks/_server.ts-BpkR7TzP.js.map +1 -0
  555. package/build/server/chunks/_server.ts-BrZXNFlK.js +78 -0
  556. package/build/server/chunks/_server.ts-BrZXNFlK.js.map +1 -0
  557. package/build/server/chunks/_server.ts-C-XniPo8.js +41 -0
  558. package/build/server/chunks/_server.ts-C-XniPo8.js.map +1 -0
  559. package/build/server/chunks/_server.ts-C0F30GT4.js +61 -0
  560. package/build/server/chunks/_server.ts-C0F30GT4.js.map +1 -0
  561. package/build/server/chunks/_server.ts-C4WRZSco.js +32 -0
  562. package/build/server/chunks/_server.ts-C4WRZSco.js.map +1 -0
  563. package/build/server/chunks/_server.ts-CAcgx11J.js +37 -0
  564. package/build/server/chunks/_server.ts-CAcgx11J.js.map +1 -0
  565. package/build/server/chunks/_server.ts-CFIgn6q6.js +293 -0
  566. package/build/server/chunks/_server.ts-CFIgn6q6.js.map +1 -0
  567. package/build/server/chunks/_server.ts-CaHe7mo6.js +81 -0
  568. package/build/server/chunks/_server.ts-CaHe7mo6.js.map +1 -0
  569. package/build/server/chunks/_server.ts-CcQbKaET.js +38 -0
  570. package/build/server/chunks/_server.ts-CcQbKaET.js.map +1 -0
  571. package/build/server/chunks/_server.ts-Ch_RLYHQ.js +48 -0
  572. package/build/server/chunks/_server.ts-Ch_RLYHQ.js.map +1 -0
  573. package/build/server/chunks/_server.ts-CkXnisqg.js +85 -0
  574. package/build/server/chunks/_server.ts-CkXnisqg.js.map +1 -0
  575. package/build/server/chunks/_server.ts-CmGWhrdf.js +110 -0
  576. package/build/server/chunks/_server.ts-CmGWhrdf.js.map +1 -0
  577. package/build/server/chunks/_server.ts-CmUr8pln.js +37 -0
  578. package/build/server/chunks/_server.ts-CmUr8pln.js.map +1 -0
  579. package/build/server/chunks/_server.ts-D-QkfF2o.js +106 -0
  580. package/build/server/chunks/_server.ts-D-QkfF2o.js.map +1 -0
  581. package/build/server/chunks/_server.ts-D1AD48e8.js +81 -0
  582. package/build/server/chunks/_server.ts-D1AD48e8.js.map +1 -0
  583. package/build/server/chunks/_server.ts-DBh0rJrm.js +86 -0
  584. package/build/server/chunks/_server.ts-DBh0rJrm.js.map +1 -0
  585. package/build/server/chunks/_server.ts-DJUYnHrj.js +49 -0
  586. package/build/server/chunks/_server.ts-DJUYnHrj.js.map +1 -0
  587. package/build/server/chunks/_server.ts-DNPb5zS6.js +76 -0
  588. package/build/server/chunks/_server.ts-DNPb5zS6.js.map +1 -0
  589. package/build/server/chunks/_server.ts-DXPhlUCi.js +101 -0
  590. package/build/server/chunks/_server.ts-DXPhlUCi.js.map +1 -0
  591. package/build/server/chunks/_server.ts-Dmo73WWA.js +42 -0
  592. package/build/server/chunks/_server.ts-Dmo73WWA.js.map +1 -0
  593. package/build/server/chunks/_server.ts-DxKERFAd.js +35 -0
  594. package/build/server/chunks/_server.ts-DxKERFAd.js.map +1 -0
  595. package/build/server/chunks/_server.ts-MOiQ4br_.js +31 -0
  596. package/build/server/chunks/_server.ts-MOiQ4br_.js.map +1 -0
  597. package/build/server/chunks/_server.ts-Z87uowZI.js +71 -0
  598. package/build/server/chunks/_server.ts-Z87uowZI.js.map +1 -0
  599. package/build/server/chunks/_server.ts-_NTv7i9z.js +94 -0
  600. package/build/server/chunks/_server.ts-_NTv7i9z.js.map +1 -0
  601. package/build/server/chunks/_server.ts-gic0t4mu.js +52 -0
  602. package/build/server/chunks/_server.ts-gic0t4mu.js.map +1 -0
  603. package/build/server/chunks/_server.ts-la-ySldK.js +39 -0
  604. package/build/server/chunks/_server.ts-la-ySldK.js.map +1 -0
  605. package/build/server/chunks/_server.ts-pDmNGXOa.js +70 -0
  606. package/build/server/chunks/_server.ts-pDmNGXOa.js.map +1 -0
  607. package/build/server/chunks/access.server-GvriCjXN.js +389 -0
  608. package/build/server/chunks/access.server-GvriCjXN.js.map +1 -0
  609. package/build/server/chunks/activity-5BrQjmZv.js +18 -0
  610. package/build/server/chunks/activity-5BrQjmZv.js.map +1 -0
  611. package/build/server/chunks/admin-auth.server-CdTfBMI5.js +78 -0
  612. package/build/server/chunks/admin-auth.server-CdTfBMI5.js.map +1 -0
  613. package/build/server/chunks/alert-description-CJHDA62x.js +59 -0
  614. package/build/server/chunks/alert-description-CJHDA62x.js.map +1 -0
  615. package/build/server/chunks/api-errors-Dk5z97zb.js +36 -0
  616. package/build/server/chunks/api-errors-Dk5z97zb.js.map +1 -0
  617. package/build/server/chunks/arrow-left-Bg-KTjhY.js +14 -0
  618. package/build/server/chunks/arrow-left-Bg-KTjhY.js.map +1 -0
  619. package/build/server/chunks/arrow-right-BvyjMBhI.js +14 -0
  620. package/build/server/chunks/arrow-right-BvyjMBhI.js.map +1 -0
  621. package/build/server/chunks/auth-bootstrap.server-CfD5CPTj.js +38 -0
  622. package/build/server/chunks/auth-bootstrap.server-CfD5CPTj.js.map +1 -0
  623. package/build/server/chunks/badge-DP8t-wkc.js +50 -0
  624. package/build/server/chunks/badge-DP8t-wkc.js.map +1 -0
  625. package/build/server/chunks/bootHealth.server-Bn7taneH.js +58 -0
  626. package/build/server/chunks/bootHealth.server-Bn7taneH.js.map +1 -0
  627. package/build/server/chunks/building-2-DzHZbdjX.js +22 -0
  628. package/build/server/chunks/building-2-DzHZbdjX.js.map +1 -0
  629. package/build/server/chunks/button-5YNnSoty.js +73 -0
  630. package/build/server/chunks/button-5YNnSoty.js.map +1 -0
  631. package/build/server/chunks/card-content-PfaaTs7O.js +46 -0
  632. package/build/server/chunks/card-content-PfaaTs7O.js.map +1 -0
  633. package/build/server/chunks/card-description-BfE_PWv4.js +26 -0
  634. package/build/server/chunks/card-description-BfE_PWv4.js.map +1 -0
  635. package/build/server/chunks/card-title-CV7CjSMp.js +46 -0
  636. package/build/server/chunks/card-title-CV7CjSMp.js.map +1 -0
  637. package/build/server/chunks/check-6xLpsphW.js +11 -0
  638. package/build/server/chunks/check-6xLpsphW.js.map +1 -0
  639. package/build/server/chunks/chevron-down-DdRkfYjQ.js +11 -0
  640. package/build/server/chunks/chevron-down-DdRkfYjQ.js.map +1 -0
  641. package/build/server/chunks/chevron-right-yB_oBTHp.js +11 -0
  642. package/build/server/chunks/chevron-right-yB_oBTHp.js.map +1 -0
  643. package/build/server/chunks/chevron-up-CskoDtlM.js +11 -0
  644. package/build/server/chunks/chevron-up-CskoDtlM.js.map +1 -0
  645. package/build/server/chunks/circle-CcD9wKGy.js +11 -0
  646. package/build/server/chunks/circle-CcD9wKGy.js.map +1 -0
  647. package/build/server/chunks/circle-alert-DKo6GQWU.js +18 -0
  648. package/build/server/chunks/circle-alert-DKo6GQWU.js.map +1 -0
  649. package/build/server/chunks/client-CUfa2kzY.js +39 -0
  650. package/build/server/chunks/client-CUfa2kzY.js.map +1 -0
  651. package/build/server/chunks/computeLimits-FIJ-Mzn4.js +26 -0
  652. package/build/server/chunks/computeLimits-FIJ-Mzn4.js.map +1 -0
  653. package/build/server/chunks/context-9tV9WxQ5.js +134 -0
  654. package/build/server/chunks/context-9tV9WxQ5.js.map +1 -0
  655. package/build/server/chunks/copy-B82RxBlo.js +29 -0
  656. package/build/server/chunks/copy-B82RxBlo.js.map +1 -0
  657. package/build/server/chunks/create-id-BYuAt6fp.js +653 -0
  658. package/build/server/chunks/create-id-BYuAt6fp.js.map +1 -0
  659. package/build/server/chunks/dialog-description-Cp1dB1if.js +523 -0
  660. package/build/server/chunks/dialog-description-Cp1dB1if.js.map +1 -0
  661. package/build/server/chunks/events-Dh5zddQQ.js +119 -0
  662. package/build/server/chunks/events-Dh5zddQQ.js.map +1 -0
  663. package/build/server/chunks/folder-kanban-srfqpNh0.js +21 -0
  664. package/build/server/chunks/folder-kanban-srfqpNh0.js.map +1 -0
  665. package/build/server/chunks/folder-open-LjMDYW2a.js +18 -0
  666. package/build/server/chunks/folder-open-LjMDYW2a.js.map +1 -0
  667. package/build/server/chunks/folders-BMeWz5-X.js +24 -0
  668. package/build/server/chunks/folders-BMeWz5-X.js.map +1 -0
  669. package/build/server/chunks/footerContext.svelte-QTotPOm_.js +523 -0
  670. package/build/server/chunks/footerContext.svelte-QTotPOm_.js.map +1 -0
  671. package/build/server/chunks/hooks.server-CMWyl1Gd.js +197 -0
  672. package/build/server/chunks/hooks.server-CMWyl1Gd.js.map +1 -0
  673. package/build/server/chunks/html-FW6Ia4bL.js +8 -0
  674. package/build/server/chunks/html-FW6Ia4bL.js.map +1 -0
  675. package/build/server/chunks/index-DwB9DMAB.js +28 -0
  676. package/build/server/chunks/index-DwB9DMAB.js.map +1 -0
  677. package/build/server/chunks/index-server-DMc-UvjC.js +19 -0
  678. package/build/server/chunks/index-server-DMc-UvjC.js.map +1 -0
  679. package/build/server/chunks/index2-olcdaqbX.js +4379 -0
  680. package/build/server/chunks/index2-olcdaqbX.js.map +1 -0
  681. package/build/server/chunks/index3-Ye-aF_FM.js +541 -0
  682. package/build/server/chunks/index3-Ye-aF_FM.js.map +1 -0
  683. package/build/server/chunks/input-BIyn3mzZ.js +53 -0
  684. package/build/server/chunks/input-BIyn3mzZ.js.map +1 -0
  685. package/build/server/chunks/label-CTvvOsnE.js +112 -0
  686. package/build/server/chunks/label-CTvvOsnE.js.map +1 -0
  687. package/build/server/chunks/link-2-DyFf_-Tu.js +15 -0
  688. package/build/server/chunks/link-2-DyFf_-Tu.js.map +1 -0
  689. package/build/server/chunks/mail-DS_q8hHt.js +17 -0
  690. package/build/server/chunks/mail-DS_q8hHt.js.map +1 -0
  691. package/build/server/chunks/noop-CzO8kTeB.js +138 -0
  692. package/build/server/chunks/noop-CzO8kTeB.js.map +1 -0
  693. package/build/server/chunks/permissions-compat.server-DSV7bClF.js +19 -0
  694. package/build/server/chunks/permissions-compat.server-DSV7bClF.js.map +1 -0
  695. package/build/server/chunks/permissions.server-Co6VKW9f.js +8 -0
  696. package/build/server/chunks/permissions.server-Co6VKW9f.js.map +1 -0
  697. package/build/server/chunks/plus-kUAGz2vQ.js +11 -0
  698. package/build/server/chunks/plus-kUAGz2vQ.js.map +1 -0
  699. package/build/server/chunks/providers.server-C32WKtDL.js +4486 -0
  700. package/build/server/chunks/providers.server-C32WKtDL.js.map +1 -0
  701. package/build/server/chunks/randomId-8gj3Lbuq.js +25 -0
  702. package/build/server/chunks/randomId-8gj3Lbuq.js.map +1 -0
  703. package/build/server/chunks/renderer-BFEBS3DQ.js +3757 -0
  704. package/build/server/chunks/renderer-BFEBS3DQ.js.map +1 -0
  705. package/build/server/chunks/resolve.server-DYsU4jL3.js +11 -0
  706. package/build/server/chunks/resolve.server-DYsU4jL3.js.map +1 -0
  707. package/build/server/chunks/resolve.server2-Co65XNMI.js +50 -0
  708. package/build/server/chunks/resolve.server2-Co65XNMI.js.map +1 -0
  709. package/build/server/chunks/root-DfWNVuNE.js +1134 -0
  710. package/build/server/chunks/root-DfWNVuNE.js.map +1 -0
  711. package/build/server/chunks/rotate-ccw-BhVSWSeP.js +17 -0
  712. package/build/server/chunks/rotate-ccw-BhVSWSeP.js.map +1 -0
  713. package/build/server/chunks/scroll-lock-BNv9iOMl.js +1558 -0
  714. package/build/server/chunks/scroll-lock-BNv9iOMl.js.map +1 -0
  715. package/build/server/chunks/scroll-text-DqHQWAWm.js +21 -0
  716. package/build/server/chunks/scroll-text-DqHQWAWm.js.map +1 -0
  717. package/build/server/chunks/server-CtTftue_.js +36 -0
  718. package/build/server/chunks/server-CtTftue_.js.map +1 -0
  719. package/build/server/chunks/settings-DUGFWkVU.js +19 -0
  720. package/build/server/chunks/settings-DUGFWkVU.js.map +1 -0
  721. package/build/server/chunks/shared-server-DaWdgxVh.js +11 -0
  722. package/build/server/chunks/shared-server-DaWdgxVh.js.map +1 -0
  723. package/build/server/chunks/shield-DcFe9IEC.js +18 -0
  724. package/build/server/chunks/shield-DcFe9IEC.js.map +1 -0
  725. package/build/server/chunks/shield-check-BpiYOxKK.js +19 -0
  726. package/build/server/chunks/shield-check-BpiYOxKK.js.map +1 -0
  727. package/build/server/chunks/slug-BGuFQjqe.js +6 -0
  728. package/build/server/chunks/slug-BGuFQjqe.js.map +1 -0
  729. package/build/server/chunks/star-CyFkn9su.js +18 -0
  730. package/build/server/chunks/star-CyFkn9su.js.map +1 -0
  731. package/build/server/chunks/stores-r9x46ujW.js +31 -0
  732. package/build/server/chunks/stores-r9x46ujW.js.map +1 -0
  733. package/build/server/chunks/textarea-BCZD0juO.js +685 -0
  734. package/build/server/chunks/textarea-BCZD0juO.js.map +1 -0
  735. package/build/server/chunks/toast-state.svelte-CW-nObZ9.js +185 -0
  736. package/build/server/chunks/toast-state.svelte-CW-nObZ9.js.map +1 -0
  737. package/build/server/chunks/token.server-B8XVPI0F.js +25 -0
  738. package/build/server/chunks/token.server-B8XVPI0F.js.map +1 -0
  739. package/build/server/chunks/token.server2-D0Z99lBB.js +22 -0
  740. package/build/server/chunks/token.server2-D0Z99lBB.js.map +1 -0
  741. package/build/server/chunks/trash-2-DWN_oRG7.js +17 -0
  742. package/build/server/chunks/trash-2-DWN_oRG7.js.map +1 -0
  743. package/build/server/chunks/triangle-alert-DYYSX_Mf.js +444 -0
  744. package/build/server/chunks/triangle-alert-DYYSX_Mf.js.map +1 -0
  745. package/build/server/chunks/types-DxzJoaA4.js +11 -0
  746. package/build/server/chunks/types-DxzJoaA4.js.map +1 -0
  747. package/build/server/chunks/types2-DdHhYSMF.js +4 -0
  748. package/build/server/chunks/types2-DdHhYSMF.js.map +1 -0
  749. package/build/server/chunks/upload-DREoObmA.js +62 -0
  750. package/build/server/chunks/upload-DREoObmA.js.map +1 -0
  751. package/build/server/chunks/user-plus-Nb35DNnT.js +16 -0
  752. package/build/server/chunks/user-plus-Nb35DNnT.js.map +1 -0
  753. package/build/server/chunks/users-DMh0XDYp.js +16 -0
  754. package/build/server/chunks/users-DMh0XDYp.js.map +1 -0
  755. package/build/server/chunks/utils2-Sy-_rI-0.js +56 -0
  756. package/build/server/chunks/utils2-Sy-_rI-0.js.map +1 -0
  757. package/build/server/chunks/utils3-AZ8FPfBW.js +80 -0
  758. package/build/server/chunks/utils3-AZ8FPfBW.js.map +1 -0
  759. package/build/server/chunks/x-wRP5erhc.js +14 -0
  760. package/build/server/chunks/x-wRP5erhc.js.map +1 -0
  761. package/build/server/index.js +5380 -0
  762. package/build/server/index.js.map +1 -0
  763. package/build/server/manifest.js +517 -0
  764. package/build/server/manifest.js.map +1 -0
  765. package/build/shims.js +32 -0
  766. package/package.json +57 -0
  767. package/templates/.env.example +339 -0
  768. package/templates/ecosystem.config.cjs +52 -0
  769. package/templates/selva.config.example.js +338 -0
@@ -0,0 +1,3847 @@
1
+ import { ae as head, aq as escape_html, ai as ensure_array_like, _ as derived, ay as store_get, ag as attr, ao as attr_class, ah as stringify, az as unsubscribe_stores, ar as bind_props, af as spread_props, at as props_id, aj as attributes, ap as attr_style } from './renderer-BFEBS3DQ.js';
2
+ import { i as invalidateAll, g as goto } from './client-CUfa2kzY.js';
3
+ import { p as page } from './stores-r9x46ujW.js';
4
+ import { F as FilterableDropdown } from './FilterableDropdown-B2_HPO_D.js';
5
+ import { F as Folder_open } from './folder-open-LjMDYW2a.js';
6
+ import { R as Root$1, D as Dialog_content, a as Dialog_header, b as Dialog_title, c as Dialog_description, T as Triangle_alert } from './triangle-alert-DYYSX_Mf.js';
7
+ import { L as Label } from './label-CTvvOsnE.js';
8
+ import { I as Input } from './input-BIyn3mzZ.js';
9
+ import { d as Textarea, T as Tabs, a as Tabs_list, c as Tabs_trigger, b as Tabs_content } from './textarea-BCZD0juO.js';
10
+ import { B as Badge } from './badge-DP8t-wkc.js';
11
+ import { X } from './x-wRP5erhc.js';
12
+ import { B as Button } from './button-5YNnSoty.js';
13
+ import { D as Dialog_footer, U as Upload, F as File_up, P as Play } from './upload-DREoObmA.js';
14
+ import { a as toast } from './toast-state.svelte-CW-nObZ9.js';
15
+ import { P as Plus } from './plus-kUAGz2vQ.js';
16
+ import { S as Search, V as ViewToggle, D as DefinitionCard, a as Search$1, h as huesFor, m as monogram, f as formatUpdated, s as statusRing, b as statusDot } from './DefinitionCard-p4VxRESg.js';
17
+ import { U as UserAvatar } from './UserAvatar-CaOe1AcR.js';
18
+ import { U as Users } from './users-DMh0XDYp.js';
19
+ import { T as Trash_2 } from './trash-2-DWN_oRG7.js';
20
+ import { E as EmptyState } from './EmptyState-Vs823elu.js';
21
+ import { U as User_plus } from './user-plus-Nb35DNnT.js';
22
+ import { I as Icon, c as cn } from './utils3-AZ8FPfBW.js';
23
+ import { c as createBitsAttrs, a as createId, b as boxWith, d as attachRef, p as boolToStrTrueOrUndef, m as mergeProps } from './create-id-BYuAt6fp.js';
24
+ import 'clsx';
25
+ import '@sveltejs/kit/internal';
26
+ import './root-DfWNVuNE.js';
27
+ import '@sveltejs/kit/internal/server';
28
+ import { R as Root, A as Alert_dialog_content, a as Alert_dialog_header, c as Alert_dialog_title, d as Alert_dialog_description, b as Alert_dialog_footer, e as Alert_dialog_cancel, f as Alert_dialog_action } from './index3-Ye-aF_FM.js';
29
+ import './context-9tV9WxQ5.js';
30
+ import { D as DEFAULT_SHARE_LINK_MAX_SOLVES } from './types2-DdHhYSMF.js';
31
+ import { C as Copy } from './copy-B82RxBlo.js';
32
+ import { C as Check } from './check-6xLpsphW.js';
33
+ import { L as Link_2 } from './link-2-DyFf_-Tu.js';
34
+ import { C as Circle } from './circle-CcD9wKGy.js';
35
+ import { A as Arrow_left } from './arrow-left-Bg-KTjhY.js';
36
+ import { S as SectionHeader } from './SectionHeader-C1XxBz32.js';
37
+ import { S as Settings } from './settings-DUGFWkVU.js';
38
+ import './chevron-down-DdRkfYjQ.js';
39
+ import './dialog-description-Cp1dB1if.js';
40
+ import './noop-CzO8kTeB.js';
41
+ import './index-server-DMc-UvjC.js';
42
+ import './scroll-lock-BNv9iOMl.js';
43
+ import './events-Dh5zddQQ.js';
44
+ import 'tailwind-variants';
45
+ import './star-CyFkn9su.js';
46
+ import './arrow-right-BvyjMBhI.js';
47
+ import 'tailwind-merge';
48
+ import 'zod';
49
+
50
+ const separatorAttrs = createBitsAttrs({ component: "separator", parts: ["root"] });
51
+ class SeparatorRootState {
52
+ static create(opts) {
53
+ return new SeparatorRootState(opts);
54
+ }
55
+ opts;
56
+ attachment;
57
+ constructor(opts) {
58
+ this.opts = opts;
59
+ this.attachment = attachRef(opts.ref);
60
+ }
61
+ #props = derived(() => ({
62
+ id: this.opts.id.current,
63
+ role: this.opts.decorative.current ? "none" : "separator",
64
+ "aria-orientation": this.opts.orientation.current,
65
+ "aria-hidden": boolToStrTrueOrUndef(this.opts.decorative.current),
66
+ "data-orientation": this.opts.orientation.current,
67
+ [separatorAttrs.root]: "",
68
+ ...this.attachment
69
+ }));
70
+ get props() {
71
+ return this.#props();
72
+ }
73
+ set props($$value) {
74
+ return this.#props($$value);
75
+ }
76
+ }
77
+ function Separator$1($$renderer, $$props) {
78
+ $$renderer.component(($$renderer2) => {
79
+ const uid = props_id($$renderer2);
80
+ let {
81
+ id = createId(uid),
82
+ ref = null,
83
+ child,
84
+ children,
85
+ decorative = false,
86
+ orientation = "horizontal",
87
+ $$slots,
88
+ $$events,
89
+ ...restProps
90
+ } = $$props;
91
+ const rootState = SeparatorRootState.create({
92
+ ref: boxWith(() => ref, (v) => ref = v),
93
+ id: boxWith(() => id),
94
+ decorative: boxWith(() => decorative),
95
+ orientation: boxWith(() => orientation)
96
+ });
97
+ const mergedProps = derived(() => mergeProps(restProps, rootState.props));
98
+ if (child) {
99
+ $$renderer2.push("<!--[0-->");
100
+ child($$renderer2, { props: mergedProps() });
101
+ $$renderer2.push(`<!---->`);
102
+ } else {
103
+ $$renderer2.push("<!--[-1-->");
104
+ $$renderer2.push(`<div${attributes({ ...mergedProps() })}>`);
105
+ children?.($$renderer2);
106
+ $$renderer2.push(`<!----></div>`);
107
+ }
108
+ $$renderer2.push(`<!--]-->`);
109
+ bind_props($$props, { ref });
110
+ });
111
+ }
112
+ function Cloud_upload($$renderer, $$props) {
113
+ let { $$slots, $$events, ...props } = $$props;
114
+ const iconNode = [
115
+ ["path", { "d": "M12 13v8" }],
116
+ [
117
+ "path",
118
+ {
119
+ "d": "M4 14.899A7 7 0 1 1 15.71 8h1.79a4.5 4.5 0 0 1 2.5 8.242"
120
+ }
121
+ ],
122
+ ["path", { "d": "m8 17 4-4 4 4" }]
123
+ ];
124
+ Icon($$renderer, spread_props([{ name: "cloud-upload" }, props, { iconNode }]));
125
+ }
126
+ function Ellipsis($$renderer, $$props) {
127
+ let { $$slots, $$events, ...props } = $$props;
128
+ const iconNode = [
129
+ ["circle", { "cx": "12", "cy": "12", "r": "1" }],
130
+ ["circle", { "cx": "19", "cy": "12", "r": "1" }],
131
+ ["circle", { "cx": "5", "cy": "12", "r": "1" }]
132
+ ];
133
+ Icon($$renderer, spread_props([{ name: "ellipsis" }, props, { iconNode }]));
134
+ }
135
+ function Image($$renderer, $$props) {
136
+ let { $$slots, $$events, ...props } = $$props;
137
+ const iconNode = [
138
+ [
139
+ "rect",
140
+ {
141
+ "width": "18",
142
+ "height": "18",
143
+ "x": "3",
144
+ "y": "3",
145
+ "rx": "2",
146
+ "ry": "2"
147
+ }
148
+ ],
149
+ ["circle", { "cx": "9", "cy": "9", "r": "2" }],
150
+ ["path", { "d": "m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21" }]
151
+ ];
152
+ Icon($$renderer, spread_props([{ name: "image" }, props, { iconNode }]));
153
+ }
154
+ function Share_2($$renderer, $$props) {
155
+ let { $$slots, $$events, ...props } = $$props;
156
+ const iconNode = [
157
+ ["circle", { "cx": "18", "cy": "5", "r": "3" }],
158
+ ["circle", { "cx": "6", "cy": "12", "r": "3" }],
159
+ ["circle", { "cx": "18", "cy": "19", "r": "3" }],
160
+ [
161
+ "line",
162
+ { "x1": "8.59", "x2": "15.42", "y1": "13.51", "y2": "17.49" }
163
+ ],
164
+ [
165
+ "line",
166
+ { "x1": "15.41", "x2": "8.59", "y1": "6.51", "y2": "10.49" }
167
+ ]
168
+ ];
169
+ Icon($$renderer, spread_props([{ name: "share-2" }, props, { iconNode }]));
170
+ }
171
+ function Separator($$renderer, $$props) {
172
+ $$renderer.component(($$renderer2) => {
173
+ let {
174
+ ref = null,
175
+ class: className,
176
+ "data-slot": dataSlot = "separator",
177
+ $$slots,
178
+ $$events,
179
+ ...restProps
180
+ } = $$props;
181
+ let $$settled = true;
182
+ let $$inner_renderer;
183
+ function $$render_inner($$renderer3) {
184
+ if (Separator$1) {
185
+ $$renderer3.push("<!--[-->");
186
+ Separator$1($$renderer3, spread_props([
187
+ {
188
+ "data-slot": dataSlot,
189
+ class: cn("shrink-0 bg-border data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:min-h-full data-[orientation=vertical]:w-px", className)
190
+ },
191
+ restProps,
192
+ {
193
+ get ref() {
194
+ return ref;
195
+ },
196
+ set ref($$value) {
197
+ ref = $$value;
198
+ $$settled = false;
199
+ }
200
+ }
201
+ ]));
202
+ $$renderer3.push("<!--]-->");
203
+ } else {
204
+ $$renderer3.push("<!--[!-->");
205
+ $$renderer3.push("<!--]-->");
206
+ }
207
+ }
208
+ do {
209
+ $$settled = true;
210
+ $$inner_renderer = $$renderer2.copy();
211
+ $$render_inner($$inner_renderer);
212
+ } while (!$$settled);
213
+ $$renderer2.subsume($$inner_renderer);
214
+ bind_props($$props, { ref });
215
+ });
216
+ }
217
+ function Drawer($$renderer, $$props) {
218
+ $$renderer.component(($$renderer2) => {
219
+ let {
220
+ onClose,
221
+ width = "w-125",
222
+ ariaLabel = "Close drawer",
223
+ children
224
+ } = $$props;
225
+ $$renderer2.push(`<div role="button" tabindex="-1"${attr("aria-label", ariaLabel)} class="inset-0 bg-black/30 fixed z-50"></div> <div${attr_class(`animate-in slide-in-from-right-4 top-0 right-0 fixed z-50 flex h-full border-border bg-background ${stringify(width)} flex-col overflow-y-auto border-l duration-150`)}>`);
226
+ children($$renderer2);
227
+ $$renderer2.push(`<!----></div>`);
228
+ });
229
+ }
230
+ function ImageUploadField($$renderer, $$props) {
231
+ $$renderer.component(($$renderer2) => {
232
+ let {
233
+ mode = "url",
234
+ value = "",
235
+ disabled = false,
236
+ isUploading = false,
237
+ hasFile = false,
238
+ onModeChange,
239
+ onUpload,
240
+ onUrlChange,
241
+ onFileSelected,
242
+ inputRef = void 0
243
+ } = $$props;
244
+ $$renderer2.push(`<div class="space-y-2"><div class="gap-1 p-0.5 flex rounded-md border">`);
245
+ Button($$renderer2, {
246
+ size: "sm",
247
+ variant: mode !== "upload" ? "default" : "ghost",
248
+ onclick: () => onModeChange?.("url"),
249
+ class: "h-7 text-xs flex-1",
250
+ children: ($$renderer3) => {
251
+ $$renderer3.push(`<!---->URL`);
252
+ },
253
+ $$slots: { default: true }
254
+ });
255
+ $$renderer2.push(`<!----> `);
256
+ Button($$renderer2, {
257
+ size: "sm",
258
+ variant: mode === "upload" ? "default" : "ghost",
259
+ onclick: () => onModeChange?.("upload"),
260
+ class: "h-7 text-xs flex-1",
261
+ children: ($$renderer3) => {
262
+ $$renderer3.push(`<!---->Upload File`);
263
+ },
264
+ $$slots: { default: true }
265
+ });
266
+ $$renderer2.push(`<!----></div> `);
267
+ if (mode === "upload") {
268
+ $$renderer2.push("<!--[0-->");
269
+ $$renderer2.push(`<div class="gap-2 sm:flex-row sm:items-center flex flex-col"><input type="file" accept="image/*"${attr("disabled", disabled, true)} class="h-10 px-3 py-2 text-sm file:text-sm file:font-medium flex flex-1 rounded-md border border-input bg-background file:border-0 file:bg-transparent focus-visible:ring-2 focus-visible:ring-ring focus-visible:outline-none disabled:opacity-50"/> `);
270
+ Button($$renderer2, {
271
+ size: "sm",
272
+ disabled: disabled || !hasFile || isUploading,
273
+ onclick: onUpload,
274
+ class: "shrink-0",
275
+ children: ($$renderer3) => {
276
+ Upload($$renderer3, { class: "mr-2 h-4 w-4" });
277
+ $$renderer3.push(`<!----> <span class="sm:inline hidden">${escape_html(isUploading ? "Uploading…" : "Upload")}</span>`);
278
+ },
279
+ $$slots: { default: true }
280
+ });
281
+ $$renderer2.push(`<!----></div>`);
282
+ } else {
283
+ $$renderer2.push("<!--[-1-->");
284
+ Input($$renderer2, {
285
+ type: "text",
286
+ value,
287
+ disabled,
288
+ oninput: (e) => onUrlChange?.(e.target.value),
289
+ placeholder: "https://..."
290
+ });
291
+ }
292
+ $$renderer2.push(`<!--]--></div>`);
293
+ bind_props($$props, { inputRef });
294
+ });
295
+ }
296
+ function ProjectPicker($$renderer, $$props) {
297
+ $$renderer.component(($$renderer2) => {
298
+ let {
299
+ projects,
300
+ value,
301
+ onChange,
302
+ id,
303
+ placeholder = "Select a project"
304
+ } = $$props;
305
+ const items = derived(() => projects.map((p) => ({ id: p.id, label: p.name })));
306
+ FilterableDropdown($$renderer2, {
307
+ items: items(),
308
+ value,
309
+ onChange,
310
+ id,
311
+ placeholder,
312
+ triggerIcon: Folder_open,
313
+ searchPlaceholder: "Filter projects"
314
+ });
315
+ });
316
+ }
317
+ function AddDefinitionDialog($$renderer, $$props) {
318
+ $$renderer.component(($$renderer2) => {
319
+ let {
320
+ open = false,
321
+ isAdding = false,
322
+ projects = [],
323
+ defaultProjectId,
324
+ computeServers = [],
325
+ defaultComputeServerId = null,
326
+ showProjectDropdown = false,
327
+ onOpenChange
328
+ } = $$props;
329
+ let displayName = "";
330
+ let description = "";
331
+ let category = "";
332
+ let tags = [];
333
+ let coverImage = "";
334
+ let imageMode = "url";
335
+ let selectedProjectId = "";
336
+ let selectedComputeServerId = "";
337
+ let imageInput = void 0;
338
+ let imageHasFile = false;
339
+ let validating = false;
340
+ let validationError = null;
341
+ let validationSchema = null;
342
+ async function handleSubmit() {
343
+ if (!displayName.trim()) {
344
+ toast.error("Display name is required");
345
+ return;
346
+ }
347
+ {
348
+ toast.error("A Grasshopper file is required");
349
+ return;
350
+ }
351
+ }
352
+ function resetForm() {
353
+ displayName = "";
354
+ description = "";
355
+ category = "";
356
+ tags = [];
357
+ coverImage = "";
358
+ imageMode = "url";
359
+ selectedProjectId = defaultProjectId ?? "";
360
+ selectedComputeServerId = "";
361
+ validating = false;
362
+ validationError = null;
363
+ validationSchema = null;
364
+ if (imageInput) imageInput.value = "";
365
+ imageHasFile = false;
366
+ }
367
+ function handleOpenChange(newOpen) {
368
+ if (!newOpen) resetForm();
369
+ onOpenChange?.(newOpen);
370
+ }
371
+ let $$settled = true;
372
+ let $$inner_renderer;
373
+ function $$render_inner($$renderer3) {
374
+ if (Root$1) {
375
+ $$renderer3.push("<!--[-->");
376
+ Root$1($$renderer3, {
377
+ open,
378
+ onOpenChange: handleOpenChange,
379
+ children: ($$renderer4) => {
380
+ if (Dialog_content) {
381
+ $$renderer4.push("<!--[-->");
382
+ Dialog_content($$renderer4, {
383
+ class: "max-w-xl",
384
+ children: ($$renderer5) => {
385
+ if (Dialog_header) {
386
+ $$renderer5.push("<!--[-->");
387
+ Dialog_header($$renderer5, {
388
+ children: ($$renderer6) => {
389
+ if (Dialog_title) {
390
+ $$renderer6.push("<!--[-->");
391
+ Dialog_title($$renderer6, {
392
+ children: ($$renderer7) => {
393
+ $$renderer7.push(`<!---->Add New Definition`);
394
+ },
395
+ $$slots: { default: true }
396
+ });
397
+ $$renderer6.push("<!--]-->");
398
+ } else {
399
+ $$renderer6.push("<!--[!-->");
400
+ $$renderer6.push("<!--]-->");
401
+ }
402
+ $$renderer6.push(` `);
403
+ if (Dialog_description) {
404
+ $$renderer6.push("<!--[-->");
405
+ Dialog_description($$renderer6, {
406
+ children: ($$renderer7) => {
407
+ $$renderer7.push(`<!---->Upload a Grasshopper file and fill in the metadata.`);
408
+ },
409
+ $$slots: { default: true }
410
+ });
411
+ $$renderer6.push("<!--]-->");
412
+ } else {
413
+ $$renderer6.push("<!--[!-->");
414
+ $$renderer6.push("<!--]-->");
415
+ }
416
+ },
417
+ $$slots: { default: true }
418
+ });
419
+ $$renderer5.push("<!--]-->");
420
+ } else {
421
+ $$renderer5.push("<!--[!-->");
422
+ $$renderer5.push("<!--]-->");
423
+ }
424
+ $$renderer5.push(` <div class="space-y-4">`);
425
+ if (showProjectDropdown || computeServers.length > 0) {
426
+ $$renderer5.push("<!--[0-->");
427
+ $$renderer5.push(`<div${attr_class(`grid gap-3 ${stringify(showProjectDropdown && computeServers.length > 0 ? "sm:grid-cols-2" : "")}`)}>`);
428
+ if (showProjectDropdown) {
429
+ $$renderer5.push("<!--[0-->");
430
+ $$renderer5.push(`<div class="space-y-1">`);
431
+ Label($$renderer5, {
432
+ for: "new-project",
433
+ children: ($$renderer6) => {
434
+ $$renderer6.push(`<!---->Project`);
435
+ },
436
+ $$slots: { default: true }
437
+ });
438
+ $$renderer5.push(`<!----> `);
439
+ ProjectPicker($$renderer5, {
440
+ id: "new-project",
441
+ projects,
442
+ value: selectedProjectId,
443
+ onChange: (id) => selectedProjectId = id
444
+ });
445
+ $$renderer5.push(`<!----></div>`);
446
+ } else if (defaultProjectId) {
447
+ $$renderer5.push("<!--[1-->");
448
+ const selectedProject = projects.find((p) => p.id === defaultProjectId);
449
+ $$renderer5.push(`<div class="space-y-1">`);
450
+ Label($$renderer5, {
451
+ children: ($$renderer6) => {
452
+ $$renderer6.push(`<!---->Project`);
453
+ },
454
+ $$slots: { default: true }
455
+ });
456
+ $$renderer5.push(`<!----> <div class="bg-muted rounded-md px-3 py-2"><p class="text-sm font-medium">${escape_html(selectedProject?.name ?? "Unknown")}</p></div></div>`);
457
+ } else {
458
+ $$renderer5.push("<!--[-1-->");
459
+ }
460
+ $$renderer5.push(`<!--]--> `);
461
+ if (computeServers.length > 0) {
462
+ $$renderer5.push("<!--[0-->");
463
+ $$renderer5.push(`<div class="space-y-1">`);
464
+ Label($$renderer5, {
465
+ for: "new-server",
466
+ children: ($$renderer6) => {
467
+ $$renderer6.push(`<!---->Compute Server`);
468
+ },
469
+ $$slots: { default: true }
470
+ });
471
+ $$renderer5.push(`<!----> `);
472
+ $$renderer5.select(
473
+ {
474
+ id: "new-server",
475
+ value: selectedComputeServerId || (defaultComputeServerId ?? ""),
476
+ onchange: (e) => {
477
+ const picked = e.currentTarget.value;
478
+ selectedComputeServerId = picked === defaultComputeServerId ? "" : picked;
479
+ },
480
+ class: "border-input bg-background focus-visible:ring-ring h-10 w-full rounded-md border px-3 py-2 text-sm focus-visible:ring-2 focus-visible:outline-none"
481
+ },
482
+ ($$renderer6) => {
483
+ $$renderer6.push(`<!--[-->`);
484
+ const each_array = ensure_array_like(computeServers);
485
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
486
+ let s = each_array[$$index];
487
+ $$renderer6.option({ value: s.id }, ($$renderer7) => {
488
+ $$renderer7.push(`${escape_html(s.label)}${escape_html(s.id === defaultComputeServerId ? " (Default)" : "")}`);
489
+ });
490
+ }
491
+ $$renderer6.push(`<!--]-->`);
492
+ }
493
+ );
494
+ $$renderer5.push(`</div>`);
495
+ } else {
496
+ $$renderer5.push("<!--[-1-->");
497
+ }
498
+ $$renderer5.push(`<!--]--></div>`);
499
+ } else {
500
+ $$renderer5.push("<!--[-1-->");
501
+ }
502
+ $$renderer5.push(`<!--]--> <div class="space-y-2">`);
503
+ Label($$renderer5, {
504
+ for: "new-file",
505
+ children: ($$renderer6) => {
506
+ $$renderer6.push(`<!---->Grasshopper File <span class="text-destructive">*</span>`);
507
+ },
508
+ $$slots: { default: true }
509
+ });
510
+ $$renderer5.push(`<!----> <input id="new-file" type="file" accept=".gh,.ghx" class="border-input bg-background focus-visible:ring-ring flex h-10 w-full rounded-md border px-3 py-2 text-sm file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-2 focus-visible:outline-none disabled:opacity-50"/> `);
511
+ if (validating) {
512
+ $$renderer5.push("<!--[0-->");
513
+ $$renderer5.push(`<p class="text-muted-foreground flex items-center gap-2 text-xs"><svg class="h-3 w-3 animate-spin" viewBox="0 0 24 24" fill="none"><circle class="opacity-25" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="4"></circle><path class="opacity-75" fill="currentColor" d="M4 12a8 8 0 018-8v8z"></path></svg> Validating definition…</p>`);
514
+ } else if (validationError) {
515
+ $$renderer5.push("<!--[1-->");
516
+ $$renderer5.push(`<div class="border-warning/40 bg-warning/5 rounded-md border p-3"><p class="text-warning text-xs font-medium">Validation warning</p> <p class="text-warning/80 mt-0.5 text-xs">${escape_html(validationError)}</p> <p class="text-warning/60 mt-1 text-xs">You can still upload the file.</p></div>`);
517
+ } else if (validationSchema) {
518
+ $$renderer5.push("<!--[2-->");
519
+ $$renderer5.push(`<div class="border-success/30 bg-success/5 flex items-center gap-3 rounded-md border p-3"><div class="min-w-0 flex-1"><p class="text-success text-xs font-medium">Valid Selva definition</p> <p class="text-muted-foreground mt-0.5 text-xs">${escape_html(validationSchema.inputs.length)} input${escape_html(validationSchema.inputs.length === 1 ? "" : "s")},
520
+ ${escape_html(validationSchema.outputs.length)} output${escape_html(validationSchema.outputs.length === 1 ? "" : "s")}</p></div></div>`);
521
+ } else {
522
+ $$renderer5.push("<!--[-1-->");
523
+ }
524
+ $$renderer5.push(`<!--]--></div> <div class="space-y-2">`);
525
+ Label($$renderer5, {
526
+ for: "new-dn",
527
+ children: ($$renderer6) => {
528
+ $$renderer6.push(`<!---->Display Name <span class="text-destructive">*</span>`);
529
+ },
530
+ $$slots: { default: true }
531
+ });
532
+ $$renderer5.push(`<!----> `);
533
+ Input($$renderer5, {
534
+ id: "new-dn",
535
+ type: "text",
536
+ placeholder: "e.g., Parametric Tower",
537
+ get value() {
538
+ return displayName;
539
+ },
540
+ set value($$value) {
541
+ displayName = $$value;
542
+ $$settled = false;
543
+ }
544
+ });
545
+ $$renderer5.push(`<!----></div> <div class="space-y-2">`);
546
+ Label($$renderer5, {
547
+ for: "new-desc",
548
+ children: ($$renderer6) => {
549
+ $$renderer6.push(`<!---->Description`);
550
+ },
551
+ $$slots: { default: true }
552
+ });
553
+ $$renderer5.push(`<!----> `);
554
+ Textarea($$renderer5, {
555
+ id: "new-desc",
556
+ rows: 3,
557
+ placeholder: "Describe what this definition does…",
558
+ get value() {
559
+ return description;
560
+ },
561
+ set value($$value) {
562
+ description = $$value;
563
+ $$settled = false;
564
+ }
565
+ });
566
+ $$renderer5.push(`<!----></div> <div class="grid grid-cols-1 gap-3 md:grid-cols-2"><div class="space-y-1"><div class="flex items-center justify-between">`);
567
+ Label($$renderer5, {
568
+ for: "new-cat",
569
+ children: ($$renderer6) => {
570
+ $$renderer6.push(`<!---->Category`);
571
+ },
572
+ $$slots: { default: true }
573
+ });
574
+ $$renderer5.push(`<!----> <p class="text-muted-foreground text-xs">${escape_html(category?.length ?? 0)}/40</p></div> `);
575
+ Input($$renderer5, {
576
+ id: "new-cat",
577
+ type: "text",
578
+ maxlength: 40,
579
+ placeholder: "e.g., Architecture",
580
+ get value() {
581
+ return category;
582
+ },
583
+ set value($$value) {
584
+ category = $$value;
585
+ $$settled = false;
586
+ }
587
+ });
588
+ $$renderer5.push(`<!----></div> <div class="space-y-1"><div class="flex items-center justify-between">`);
589
+ Label($$renderer5, {
590
+ for: "new-tags",
591
+ children: ($$renderer6) => {
592
+ $$renderer6.push(`<!---->Tags`);
593
+ },
594
+ $$slots: { default: true }
595
+ });
596
+ $$renderer5.push(`<!----> <p class="text-muted-foreground text-xs">${escape_html(tags.length)}/5</p></div> `);
597
+ if (tags.length > 0) {
598
+ $$renderer5.push("<!--[0-->");
599
+ $$renderer5.push(`<div class="mb-2 flex flex-wrap gap-2"><!--[-->`);
600
+ const each_array_1 = ensure_array_like(tags);
601
+ for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
602
+ let tag = each_array_1[$$index_1];
603
+ Badge($$renderer5, {
604
+ variant: "outline",
605
+ class: "cursor-pointer gap-1",
606
+ children: ($$renderer6) => {
607
+ $$renderer6.push(`<!---->${escape_html(tag)} <button type="button" class="ml-0.5 inline-flex items-center justify-center transition-opacity hover:opacity-70" title="Remove tag">`);
608
+ X($$renderer6, { class: "h-3 w-3" });
609
+ $$renderer6.push(`<!----></button>`);
610
+ },
611
+ $$slots: { default: true }
612
+ });
613
+ }
614
+ $$renderer5.push(`<!--]--></div>`);
615
+ } else {
616
+ $$renderer5.push("<!--[-1-->");
617
+ }
618
+ $$renderer5.push(`<!--]--> `);
619
+ Input($$renderer5, {
620
+ id: "new-tags",
621
+ type: "text",
622
+ placeholder: "Add tag and press Enter",
623
+ disabled: tags.length >= 5,
624
+ onkeydown: (e) => {
625
+ if (e.key === "Enter") {
626
+ e.preventDefault();
627
+ const input = e.currentTarget;
628
+ const tag = input.value.trim();
629
+ if (tag && !tags.includes(tag) && tags.length < 5) {
630
+ tags = [...tags, tag];
631
+ input.value = "";
632
+ }
633
+ }
634
+ }
635
+ });
636
+ $$renderer5.push(`<!----></div></div> <div class="space-y-2">`);
637
+ Label($$renderer5, {
638
+ children: ($$renderer6) => {
639
+ $$renderer6.push(`<!---->Cover Image`);
640
+ },
641
+ $$slots: { default: true }
642
+ });
643
+ $$renderer5.push(`<!----> `);
644
+ ImageUploadField($$renderer5, {
645
+ mode: imageMode,
646
+ value: coverImage,
647
+ hasFile: imageHasFile,
648
+ onModeChange: (m) => imageMode = m,
649
+ onUpload: () => {
650
+ },
651
+ onFileSelected: () => imageHasFile = !!imageInput?.files?.length,
652
+ onUrlChange: (url) => coverImage = url,
653
+ get inputRef() {
654
+ return imageInput;
655
+ },
656
+ set inputRef($$value) {
657
+ imageInput = $$value;
658
+ $$settled = false;
659
+ }
660
+ });
661
+ $$renderer5.push(`<!----></div></div> `);
662
+ if (Dialog_footer) {
663
+ $$renderer5.push("<!--[-->");
664
+ Dialog_footer($$renderer5, {
665
+ class: "gap-2 sm:justify-end",
666
+ children: ($$renderer6) => {
667
+ Button($$renderer6, {
668
+ variant: "outline",
669
+ onclick: () => onOpenChange?.(false),
670
+ children: ($$renderer7) => {
671
+ $$renderer7.push(`<!---->Cancel`);
672
+ },
673
+ $$slots: { default: true }
674
+ });
675
+ $$renderer6.push(`<!----> `);
676
+ Button($$renderer6, {
677
+ onclick: handleSubmit,
678
+ disabled: isAdding || validating,
679
+ children: ($$renderer7) => {
680
+ $$renderer7.push(`<!---->${escape_html(isAdding ? "Creating…" : validating ? "Validating…" : "Create Definition")}`);
681
+ },
682
+ $$slots: { default: true }
683
+ });
684
+ $$renderer6.push(`<!---->`);
685
+ },
686
+ $$slots: { default: true }
687
+ });
688
+ $$renderer5.push("<!--]-->");
689
+ } else {
690
+ $$renderer5.push("<!--[!-->");
691
+ $$renderer5.push("<!--]-->");
692
+ }
693
+ },
694
+ $$slots: { default: true }
695
+ });
696
+ $$renderer4.push("<!--]-->");
697
+ } else {
698
+ $$renderer4.push("<!--[!-->");
699
+ $$renderer4.push("<!--]-->");
700
+ }
701
+ },
702
+ $$slots: { default: true }
703
+ });
704
+ $$renderer3.push("<!--]-->");
705
+ } else {
706
+ $$renderer3.push("<!--[!-->");
707
+ $$renderer3.push("<!--]-->");
708
+ }
709
+ }
710
+ do {
711
+ $$settled = true;
712
+ $$inner_renderer = $$renderer2.copy();
713
+ $$render_inner($$inner_renderer);
714
+ } while (!$$settled);
715
+ $$renderer2.subsume($$inner_renderer);
716
+ });
717
+ }
718
+ function ProjectSidebar($$renderer, $$props) {
719
+ $$renderer.component(($$renderer2) => {
720
+ let {
721
+ projects,
722
+ records,
723
+ activeProjectId,
724
+ canManageProjects
725
+ } = $$props;
726
+ let filterQuery = "";
727
+ const filteredProjects = derived(() => {
728
+ const q = filterQuery.trim().toLowerCase();
729
+ if (!q) return projects;
730
+ return projects.filter((p) => p.name.toLowerCase().includes(q));
731
+ });
732
+ let $$settled = true;
733
+ let $$inner_renderer;
734
+ function $$render_inner($$renderer3) {
735
+ $$renderer3.push(`<aside class="border-border bg-background flex w-60 shrink-0 flex-col overflow-y-auto border-r"><div class="flex items-center justify-between px-4 pt-5 pb-3"><span class="text-muted-foreground text-xs font-medium tracking-wider uppercase">Projects</span> `);
736
+ if (canManageProjects) {
737
+ $$renderer3.push("<!--[0-->");
738
+ $$renderer3.push(`<button class="text-muted-foreground hover:text-foreground rounded p-0.5 transition-colors" title="New project" aria-label="New project">`);
739
+ Plus($$renderer3, { class: "h-3.5 w-3.5" });
740
+ $$renderer3.push(`<!----></button>`);
741
+ } else {
742
+ $$renderer3.push("<!--[-1-->");
743
+ }
744
+ $$renderer3.push(`<!--]--></div> `);
745
+ {
746
+ $$renderer3.push("<!--[-1-->");
747
+ }
748
+ $$renderer3.push(`<!--]--> `);
749
+ if (projects.length > 4) {
750
+ $$renderer3.push("<!--[0-->");
751
+ $$renderer3.push(`<div class="relative mx-3 mb-2">`);
752
+ Search$1($$renderer3, {
753
+ class: "text-muted-foreground pointer-events-none absolute top-1/2 left-2 h-3.5 w-3.5 -translate-y-1/2"
754
+ });
755
+ $$renderer3.push(`<!----> <input${attr("value", filterQuery)} placeholder="Filter projects" class="border-input bg-background placeholder:text-muted-foreground focus:border-ring h-7 w-full rounded-md border pr-2 pl-7 text-xs transition-colors outline-none"/></div>`);
756
+ } else {
757
+ $$renderer3.push("<!--[-1-->");
758
+ }
759
+ $$renderer3.push(`<!--]--> <nav class="flex-1 space-y-px pr-2 pb-4"><button${attr_class(`group relative flex w-full items-center gap-2 py-1.5 pr-2.5 text-left transition-colors ${activeProjectId === null ? "bg-accent text-accent-foreground rounded-r-md pl-4" : "text-muted-foreground hover:bg-muted/60 hover:text-foreground mx-2 rounded-md pl-2.5"}`)}>`);
760
+ if (activeProjectId === null) {
761
+ $$renderer3.push("<!--[0-->");
762
+ $$renderer3.push(`<span class="bg-primary absolute top-0 bottom-0 left-0 w-0.75" aria-hidden="true"></span>`);
763
+ } else {
764
+ $$renderer3.push("<!--[-1-->");
765
+ }
766
+ $$renderer3.push(`<!--]--> `);
767
+ Folder_open($$renderer3, { class: "h-3.5 w-3.5 shrink-0 opacity-70" });
768
+ $$renderer3.push(`<!----> <span class="flex-1 truncate text-sm font-medium">All projects</span> <span class="shrink-0 font-mono text-[11px] tabular-nums opacity-60">${escape_html(records.length)}</span></button> `);
769
+ if (filteredProjects().length > 0) {
770
+ $$renderer3.push("<!--[0-->");
771
+ $$renderer3.push(`<div class="border-border/60 my-2 border-t"></div>`);
772
+ } else {
773
+ $$renderer3.push("<!--[-1-->");
774
+ }
775
+ $$renderer3.push(`<!--]--> <!--[-->`);
776
+ const each_array = ensure_array_like(filteredProjects());
777
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
778
+ let project = each_array[$$index];
779
+ const isActive = activeProjectId === project.id;
780
+ const defCount = records.filter((r) => r.projectId === project.id).length;
781
+ $$renderer3.push(`<button${attr_class(`group relative flex w-full items-center gap-2 py-1.5 pr-2.5 text-left transition-colors ${isActive ? "bg-accent text-accent-foreground rounded-r-md pl-4" : "text-muted-foreground hover:bg-muted/60 hover:text-foreground mx-2 rounded-md pl-2.5"}`)}>`);
782
+ if (isActive) {
783
+ $$renderer3.push("<!--[0-->");
784
+ $$renderer3.push(`<span class="bg-primary absolute top-0 bottom-0 left-0 w-0.75" aria-hidden="true"></span>`);
785
+ } else {
786
+ $$renderer3.push("<!--[-1-->");
787
+ }
788
+ $$renderer3.push(`<!--]--> <span class="flex-1 truncate text-sm font-medium">${escape_html(project.name)}</span> <span class="shrink-0 font-mono text-[11px] tabular-nums opacity-60">${escape_html(defCount)}</span></button>`);
789
+ }
790
+ $$renderer3.push(`<!--]--> `);
791
+ if (projects.length === 0) {
792
+ $$renderer3.push("<!--[0-->");
793
+ $$renderer3.push(`<p class="text-muted-foreground px-2 py-4 text-center text-xs">No projects yet</p>`);
794
+ } else if (filteredProjects().length === 0 && filterQuery) ;
795
+ else {
796
+ $$renderer3.push("<!--[-1-->");
797
+ }
798
+ $$renderer3.push(`<!--]--></nav></aside>`);
799
+ }
800
+ do {
801
+ $$settled = true;
802
+ $$inner_renderer = $$renderer2.copy();
803
+ $$render_inner($$inner_renderer);
804
+ } while (!$$settled);
805
+ $$renderer2.subsume($$inner_renderer);
806
+ });
807
+ }
808
+ function AddMemberPicker($$renderer, $$props) {
809
+ $$renderer.component(($$renderer2) => {
810
+ let { availableUsers } = $$props;
811
+ let query = "";
812
+ let highlighted = 0;
813
+ const matches = derived(() => {
814
+ const q = query.trim().toLowerCase();
815
+ if (!q) return availableUsers.slice(0, 50);
816
+ return availableUsers.filter((u) => {
817
+ const name = (u.displayName ?? "").toLowerCase();
818
+ const email = (u.email ?? "").toLowerCase();
819
+ return name.includes(q) || email.includes(q);
820
+ }).slice(0, 50);
821
+ });
822
+ function userLabel(u) {
823
+ return u.displayName ?? u.email ?? u.id.slice(0, 8);
824
+ }
825
+ $$renderer2.push(`<div class="border-border bg-card rounded-md border">`);
826
+ {
827
+ $$renderer2.push("<!--[0-->");
828
+ $$renderer2.push(`<div class="border-border relative border-b">`);
829
+ Search$1($$renderer2, {
830
+ class: "text-muted-foreground pointer-events-none absolute top-1/2 left-3 h-3.5 w-3.5 -translate-y-1/2"
831
+ });
832
+ $$renderer2.push(`<!----> <input${attr("value", query)} autofocus="" placeholder="Search by name or email" class="placeholder:text-muted-foreground h-9 w-full rounded-t-md bg-transparent pr-9 pl-9 text-sm outline-none"/> <button type="button" class="text-muted-foreground hover:text-foreground absolute top-1/2 right-2 -translate-y-1/2 rounded p-1" aria-label="Cancel">`);
833
+ X($$renderer2, { class: "h-3.5 w-3.5" });
834
+ $$renderer2.push(`<!----></button></div> <div class="max-h-60 overflow-y-auto py-1">`);
835
+ if (matches().length === 0) {
836
+ $$renderer2.push("<!--[0-->");
837
+ $$renderer2.push(`<p class="text-muted-foreground px-3 py-6 text-center text-xs">${escape_html(availableUsers.length === 0 ? "Everyone in this org is already on the project." : `No matches for "${query}"`)}</p>`);
838
+ } else {
839
+ $$renderer2.push("<!--[-1-->");
840
+ $$renderer2.push(`<!--[-->`);
841
+ const each_array = ensure_array_like(matches());
842
+ for (let i = 0, $$length = each_array.length; i < $$length; i++) {
843
+ let user = each_array[i];
844
+ $$renderer2.push(`<button type="button"${attr("data-idx", i)}${attr_class(`flex w-full items-center gap-3 px-3 py-2 text-left transition-colors ${highlighted === i ? "bg-accent text-accent-foreground" : "hover:bg-muted/60"}`)}>`);
845
+ UserAvatar($$renderer2, { name: userLabel(user), size: "sm" });
846
+ $$renderer2.push(`<!----> <div class="min-w-0 flex-1"><p class="truncate text-sm font-medium">${escape_html(userLabel(user))}</p> `);
847
+ if (user.displayName && user.email) {
848
+ $$renderer2.push("<!--[0-->");
849
+ $$renderer2.push(`<p class="text-muted-foreground truncate font-mono text-xs">${escape_html(user.email)}</p>`);
850
+ } else {
851
+ $$renderer2.push("<!--[-1-->");
852
+ }
853
+ $$renderer2.push(`<!--]--></div></button>`);
854
+ }
855
+ $$renderer2.push(`<!--]-->`);
856
+ }
857
+ $$renderer2.push(`<!--]--></div>`);
858
+ }
859
+ $$renderer2.push(`<!--]--></div>`);
860
+ });
861
+ }
862
+ function ProjectSettingsDialog($$renderer, $$props) {
863
+ $$renderer.component(($$renderer2) => {
864
+ let {
865
+ project,
866
+ users,
867
+ open,
868
+ onOpenChange,
869
+ onSave,
870
+ onDelete,
871
+ onUpdateMemberRole,
872
+ onRemoveMember
873
+ } = $$props;
874
+ let name = project.name;
875
+ let description = project.description ?? "";
876
+ let visibility = project.visibility;
877
+ let saving = false;
878
+ let showAddForm = false;
879
+ let removing = null;
880
+ function userLabel(userId) {
881
+ const u = users.find((u2) => u2.id === userId);
882
+ return u?.displayName ?? u?.email ?? userId.slice(0, 8);
883
+ }
884
+ function userEmail(userId) {
885
+ return users.find((u) => u.id === userId)?.email;
886
+ }
887
+ const availableUsers = derived(() => {
888
+ const ids = new Set(project.members.map((m) => m.userId));
889
+ return users.filter((u) => !ids.has(u.id));
890
+ });
891
+ async function save() {
892
+ saving = true;
893
+ try {
894
+ await onSave(project.id, { name, description, visibility });
895
+ } finally {
896
+ saving = false;
897
+ }
898
+ }
899
+ async function remove(userId) {
900
+ removing = userId;
901
+ try {
902
+ await onRemoveMember(project.id, userId);
903
+ } finally {
904
+ removing = null;
905
+ }
906
+ }
907
+ let $$settled = true;
908
+ let $$inner_renderer;
909
+ function $$render_inner($$renderer3) {
910
+ if (Root$1) {
911
+ $$renderer3.push("<!--[-->");
912
+ Root$1($$renderer3, {
913
+ open,
914
+ onOpenChange,
915
+ children: ($$renderer4) => {
916
+ if (Dialog_content) {
917
+ $$renderer4.push("<!--[-->");
918
+ Dialog_content($$renderer4, {
919
+ class: "max-w-lg",
920
+ children: ($$renderer5) => {
921
+ if (Dialog_header) {
922
+ $$renderer5.push("<!--[-->");
923
+ Dialog_header($$renderer5, {
924
+ children: ($$renderer6) => {
925
+ if (Dialog_title) {
926
+ $$renderer6.push("<!--[-->");
927
+ Dialog_title($$renderer6, {
928
+ children: ($$renderer7) => {
929
+ $$renderer7.push(`<!---->Project settings`);
930
+ },
931
+ $$slots: { default: true }
932
+ });
933
+ $$renderer6.push("<!--]-->");
934
+ } else {
935
+ $$renderer6.push("<!--[!-->");
936
+ $$renderer6.push("<!--]-->");
937
+ }
938
+ $$renderer6.push(` `);
939
+ if (Dialog_description) {
940
+ $$renderer6.push("<!--[-->");
941
+ Dialog_description($$renderer6, {
942
+ children: ($$renderer7) => {
943
+ $$renderer7.push(`<!---->Manage this project's details and members.`);
944
+ },
945
+ $$slots: { default: true }
946
+ });
947
+ $$renderer6.push("<!--]-->");
948
+ } else {
949
+ $$renderer6.push("<!--[!-->");
950
+ $$renderer6.push("<!--]-->");
951
+ }
952
+ },
953
+ $$slots: { default: true }
954
+ });
955
+ $$renderer5.push("<!--]-->");
956
+ } else {
957
+ $$renderer5.push("<!--[!-->");
958
+ $$renderer5.push("<!--]-->");
959
+ }
960
+ $$renderer5.push(` `);
961
+ if (Tabs) {
962
+ $$renderer5.push("<!--[-->");
963
+ Tabs($$renderer5, {
964
+ value: "general",
965
+ class: "mt-2",
966
+ children: ($$renderer6) => {
967
+ if (Tabs_list) {
968
+ $$renderer6.push("<!--[-->");
969
+ Tabs_list($$renderer6, {
970
+ class: "grid w-full grid-cols-2",
971
+ children: ($$renderer7) => {
972
+ if (Tabs_trigger) {
973
+ $$renderer7.push("<!--[-->");
974
+ Tabs_trigger($$renderer7, {
975
+ value: "general",
976
+ children: ($$renderer8) => {
977
+ $$renderer8.push(`<!---->General`);
978
+ },
979
+ $$slots: { default: true }
980
+ });
981
+ $$renderer7.push("<!--]-->");
982
+ } else {
983
+ $$renderer7.push("<!--[!-->");
984
+ $$renderer7.push("<!--]-->");
985
+ }
986
+ $$renderer7.push(` `);
987
+ if (Tabs_trigger) {
988
+ $$renderer7.push("<!--[-->");
989
+ Tabs_trigger($$renderer7, {
990
+ value: "members",
991
+ class: "gap-1.5",
992
+ children: ($$renderer8) => {
993
+ Users($$renderer8, { class: "h-3.5 w-3.5" });
994
+ $$renderer8.push(`<!----> Members <span class="text-muted-foreground ml-1 font-mono text-[11px]">${escape_html(project.members.length)}</span>`);
995
+ },
996
+ $$slots: { default: true }
997
+ });
998
+ $$renderer7.push("<!--]-->");
999
+ } else {
1000
+ $$renderer7.push("<!--[!-->");
1001
+ $$renderer7.push("<!--]-->");
1002
+ }
1003
+ },
1004
+ $$slots: { default: true }
1005
+ });
1006
+ $$renderer6.push("<!--]-->");
1007
+ } else {
1008
+ $$renderer6.push("<!--[!-->");
1009
+ $$renderer6.push("<!--]-->");
1010
+ }
1011
+ $$renderer6.push(` `);
1012
+ if (Tabs_content) {
1013
+ $$renderer6.push("<!--[-->");
1014
+ Tabs_content($$renderer6, {
1015
+ value: "general",
1016
+ class: "mt-4 space-y-4",
1017
+ children: ($$renderer7) => {
1018
+ $$renderer7.push(`<div class="space-y-1.5">`);
1019
+ Label($$renderer7, {
1020
+ for: "proj-name",
1021
+ children: ($$renderer8) => {
1022
+ $$renderer8.push(`<!---->Name`);
1023
+ },
1024
+ $$slots: { default: true }
1025
+ });
1026
+ $$renderer7.push(`<!----> `);
1027
+ Input($$renderer7, {
1028
+ id: "proj-name",
1029
+ get value() {
1030
+ return name;
1031
+ },
1032
+ set value($$value) {
1033
+ name = $$value;
1034
+ $$settled = false;
1035
+ }
1036
+ });
1037
+ $$renderer7.push(`<!----></div> <div class="space-y-1.5">`);
1038
+ Label($$renderer7, {
1039
+ for: "proj-desc",
1040
+ children: ($$renderer8) => {
1041
+ $$renderer8.push(`<!---->Description`);
1042
+ },
1043
+ $$slots: { default: true }
1044
+ });
1045
+ $$renderer7.push(`<!----> `);
1046
+ Textarea($$renderer7, {
1047
+ id: "proj-desc",
1048
+ rows: 2,
1049
+ get value() {
1050
+ return description;
1051
+ },
1052
+ set value($$value) {
1053
+ description = $$value;
1054
+ $$settled = false;
1055
+ }
1056
+ });
1057
+ $$renderer7.push(`<!----></div> <div class="space-y-1.5">`);
1058
+ Label($$renderer7, {
1059
+ for: "proj-vis",
1060
+ children: ($$renderer8) => {
1061
+ $$renderer8.push(`<!---->Visibility`);
1062
+ },
1063
+ $$slots: { default: true }
1064
+ });
1065
+ $$renderer7.push(`<!----> `);
1066
+ $$renderer7.select(
1067
+ {
1068
+ id: "proj-vis",
1069
+ value: visibility,
1070
+ class: "border-input bg-background h-10 w-full rounded-md border px-3 text-sm"
1071
+ },
1072
+ ($$renderer8) => {
1073
+ $$renderer8.option({ value: "public" }, ($$renderer9) => {
1074
+ $$renderer9.push(`Public — any authenticated user can solve`);
1075
+ });
1076
+ $$renderer8.option({ value: "org" }, ($$renderer9) => {
1077
+ $$renderer9.push(`Org — any org member can solve`);
1078
+ });
1079
+ $$renderer8.option({ value: "private" }, ($$renderer9) => {
1080
+ $$renderer9.push(`Private — only project members can solve`);
1081
+ });
1082
+ }
1083
+ );
1084
+ $$renderer7.push(`</div> <div class="flex items-center justify-between pt-2">`);
1085
+ Button($$renderer7, {
1086
+ onclick: () => onDelete(project.id),
1087
+ variant: "ghost",
1088
+ size: "sm",
1089
+ class: "text-destructive hover:text-destructive gap-1.5 px-2",
1090
+ children: ($$renderer8) => {
1091
+ Trash_2($$renderer8, { class: "h-3.5 w-3.5" });
1092
+ $$renderer8.push(`<!----> Delete project`);
1093
+ },
1094
+ $$slots: { default: true }
1095
+ });
1096
+ $$renderer7.push(`<!----> <div class="flex gap-2">`);
1097
+ Button($$renderer7, {
1098
+ onclick: () => onOpenChange(false),
1099
+ variant: "outline",
1100
+ size: "sm",
1101
+ children: ($$renderer8) => {
1102
+ $$renderer8.push(`<!---->Cancel`);
1103
+ },
1104
+ $$slots: { default: true }
1105
+ });
1106
+ $$renderer7.push(`<!----> `);
1107
+ Button($$renderer7, {
1108
+ onclick: save,
1109
+ disabled: saving,
1110
+ size: "sm",
1111
+ children: ($$renderer8) => {
1112
+ $$renderer8.push(`<!---->${escape_html(saving ? "Saving…" : "Save")}`);
1113
+ },
1114
+ $$slots: { default: true }
1115
+ });
1116
+ $$renderer7.push(`<!----></div></div>`);
1117
+ },
1118
+ $$slots: { default: true }
1119
+ });
1120
+ $$renderer6.push("<!--]-->");
1121
+ } else {
1122
+ $$renderer6.push("<!--[!-->");
1123
+ $$renderer6.push("<!--]-->");
1124
+ }
1125
+ $$renderer6.push(` `);
1126
+ if (Tabs_content) {
1127
+ $$renderer6.push("<!--[-->");
1128
+ Tabs_content($$renderer6, {
1129
+ value: "members",
1130
+ class: "mt-4 space-y-3",
1131
+ children: ($$renderer7) => {
1132
+ if (project.members.length === 0 && !showAddForm) {
1133
+ $$renderer7.push("<!--[0-->");
1134
+ EmptyState($$renderer7, {
1135
+ size: "sm",
1136
+ icon: Users,
1137
+ title: "No members yet",
1138
+ description: "Add members to control who can edit this project."
1139
+ });
1140
+ } else if (project.members.length > 0) {
1141
+ $$renderer7.push("<!--[1-->");
1142
+ $$renderer7.push(`<div class="border-border bg-card overflow-hidden rounded-md border"><!--[-->`);
1143
+ const each_array = ensure_array_like(project.members);
1144
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1145
+ let member = each_array[$$index];
1146
+ $$renderer7.push(`<div class="border-border flex items-center gap-3 border-b px-3 py-2.5 last:border-0">`);
1147
+ UserAvatar($$renderer7, { name: userLabel(member.userId), size: "sm" });
1148
+ $$renderer7.push(`<!----> <div class="min-w-0 flex-1"><p class="truncate text-sm font-medium">${escape_html(userLabel(member.userId))}</p> `);
1149
+ if (userEmail(member.userId) && userEmail(member.userId) !== userLabel(member.userId)) {
1150
+ $$renderer7.push("<!--[0-->");
1151
+ $$renderer7.push(`<p class="text-muted-foreground truncate font-mono text-xs">${escape_html(userEmail(member.userId))}</p>`);
1152
+ } else {
1153
+ $$renderer7.push("<!--[-1-->");
1154
+ }
1155
+ $$renderer7.push(`<!--]--></div> `);
1156
+ $$renderer7.select(
1157
+ {
1158
+ value: member.role,
1159
+ onchange: (e) => onUpdateMemberRole(project.id, member.userId, e.target.value),
1160
+ class: "border-input bg-background h-8 rounded-md border px-2 text-xs outline-none"
1161
+ },
1162
+ ($$renderer8) => {
1163
+ $$renderer8.option({ value: "owner" }, ($$renderer9) => {
1164
+ $$renderer9.push(`Owner`);
1165
+ });
1166
+ $$renderer8.option({ value: "editor" }, ($$renderer9) => {
1167
+ $$renderer9.push(`Editor`);
1168
+ });
1169
+ $$renderer8.option({ value: "viewer" }, ($$renderer9) => {
1170
+ $$renderer9.push(`Viewer`);
1171
+ });
1172
+ }
1173
+ );
1174
+ $$renderer7.push(` `);
1175
+ Button($$renderer7, {
1176
+ onclick: () => remove(member.userId),
1177
+ disabled: removing === member.userId,
1178
+ variant: "ghost",
1179
+ size: "icon",
1180
+ class: "text-muted-foreground hover:text-destructive h-7 w-7",
1181
+ children: ($$renderer8) => {
1182
+ X($$renderer8, { class: "h-3.5 w-3.5" });
1183
+ },
1184
+ $$slots: { default: true }
1185
+ });
1186
+ $$renderer7.push(`<!----></div>`);
1187
+ }
1188
+ $$renderer7.push(`<!--]--></div>`);
1189
+ } else {
1190
+ $$renderer7.push("<!--[-1-->");
1191
+ }
1192
+ $$renderer7.push(`<!--]--> `);
1193
+ if (showAddForm) {
1194
+ $$renderer7.push("<!--[0-->");
1195
+ AddMemberPicker($$renderer7, {
1196
+ availableUsers: availableUsers()
1197
+ });
1198
+ } else {
1199
+ $$renderer7.push("<!--[-1-->");
1200
+ Button($$renderer7, {
1201
+ onclick: () => showAddForm = true,
1202
+ variant: "outline",
1203
+ size: "sm",
1204
+ class: "gap-1.5",
1205
+ children: ($$renderer8) => {
1206
+ User_plus($$renderer8, { class: "h-3.5 w-3.5" });
1207
+ $$renderer8.push(`<!----> Add member`);
1208
+ },
1209
+ $$slots: { default: true }
1210
+ });
1211
+ }
1212
+ $$renderer7.push(`<!--]-->`);
1213
+ },
1214
+ $$slots: { default: true }
1215
+ });
1216
+ $$renderer6.push("<!--]-->");
1217
+ } else {
1218
+ $$renderer6.push("<!--[!-->");
1219
+ $$renderer6.push("<!--]-->");
1220
+ }
1221
+ },
1222
+ $$slots: { default: true }
1223
+ });
1224
+ $$renderer5.push("<!--]-->");
1225
+ } else {
1226
+ $$renderer5.push("<!--[!-->");
1227
+ $$renderer5.push("<!--]-->");
1228
+ }
1229
+ },
1230
+ $$slots: { default: true }
1231
+ });
1232
+ $$renderer4.push("<!--]-->");
1233
+ } else {
1234
+ $$renderer4.push("<!--[!-->");
1235
+ $$renderer4.push("<!--]-->");
1236
+ }
1237
+ },
1238
+ $$slots: { default: true }
1239
+ });
1240
+ $$renderer3.push("<!--]-->");
1241
+ } else {
1242
+ $$renderer3.push("<!--[!-->");
1243
+ $$renderer3.push("<!--]-->");
1244
+ }
1245
+ }
1246
+ do {
1247
+ $$settled = true;
1248
+ $$inner_renderer = $$renderer2.copy();
1249
+ $$render_inner($$inner_renderer);
1250
+ } while (!$$settled);
1251
+ $$renderer2.subsume($$inner_renderer);
1252
+ });
1253
+ }
1254
+ function StatusBadge($$renderer, $$props) {
1255
+ $$renderer.component(($$renderer2) => {
1256
+ let { status, class: className = "" } = $$props;
1257
+ $$renderer2.push(`<span${attr_class(`inline-flex items-center gap-1.5 rounded-full border px-2 py-0.5 font-mono text-[11px] tracking-wide ${stringify(statusRing(status))} ${stringify(className)}`)}><span${attr_class(`h-1.5 w-1.5 rounded-full ${stringify(statusDot(status))}`)}></span> ${escape_html(status)}</span>`);
1258
+ });
1259
+ }
1260
+ function DefinitionListView($$renderer, $$props) {
1261
+ $$renderer.component(($$renderer2) => {
1262
+ let { records, projects } = $$props;
1263
+ const gridTemplate = "grid-template-columns: 40px 1.6fr 0.9fr 0.8fr 0.7fr 0.6fr 36px";
1264
+ function projectName(id) {
1265
+ return projects.find((p) => p.id === id)?.name ?? "";
1266
+ }
1267
+ $$renderer2.push(`<div class="border-border bg-card overflow-hidden rounded-xl border"><div class="border-border bg-muted/50 text-muted-foreground grid border-b px-4 py-2.5 font-mono text-[10.5px] tracking-widest uppercase"${attr_style(gridTemplate)}><span></span><span>Definition</span><span>Project</span><span>Status</span><span>Updated</span> <span class="text-right">Runs</span><span></span></div> <!--[-->`);
1268
+ const each_array = ensure_array_like(records);
1269
+ for (let i = 0, $$length = each_array.length; i < $$length; i++) {
1270
+ let record = each_array[i];
1271
+ $$renderer2.push(`<div${attr_class(`grid items-center gap-4 px-4 py-3 text-[13px] ${i < records.length - 1 ? "border-border border-b" : ""}`)}${attr_style(gridTemplate)}>`);
1272
+ if (record.coverImage) {
1273
+ $$renderer2.push("<!--[0-->");
1274
+ $$renderer2.push(`<div class="flex h-10 w-10 shrink-0 items-center justify-center overflow-hidden rounded-md"><img${attr("src", record.coverImage)} alt="" class="h-full w-full object-cover"/></div>`);
1275
+ } else {
1276
+ $$renderer2.push("<!--[-1-->");
1277
+ const hues = huesFor(record.guid);
1278
+ $$renderer2.push(`<div class="tool-cover-fallback flex h-10 w-10 shrink-0 items-center justify-center overflow-hidden rounded-md"${attr_style("", { "--tool-h1": hues.h1, "--tool-h2": hues.h2 })}><span class="text-foreground/40 text-base font-semibold">${escape_html(monogram(record.displayName))}</span></div>`);
1279
+ }
1280
+ $$renderer2.push(`<!--]--> <span class="min-w-0"><span class="font-semibold">${escape_html(record.displayName)}</span> `);
1281
+ if (record.description) {
1282
+ $$renderer2.push("<!--[0-->");
1283
+ $$renderer2.push(`<span class="text-muted-foreground ml-2 text-[12px]">${escape_html(record.description.slice(0, 60))}${escape_html(record.description.length > 60 ? "…" : "")}</span>`);
1284
+ } else {
1285
+ $$renderer2.push("<!--[-1-->");
1286
+ }
1287
+ $$renderer2.push(`<!--]--></span> <span class="text-muted-foreground">${escape_html(projectName(record.projectId))}</span> <span>`);
1288
+ StatusBadge($$renderer2, { status: record.status });
1289
+ $$renderer2.push(`<!----></span> <span class="text-muted-foreground font-mono text-[12px]">${escape_html(formatUpdated(record.updatedAt))}</span> <span class="text-right font-mono text-[12px]">${escape_html(record.solveCount.toLocaleString())}</span> <span class="flex justify-end"><button type="button" class="text-muted-foreground hover:bg-muted hover:text-foreground rounded p-1 transition-colors"${attr("aria-label", `Open ${stringify(record.displayName)}`)}>`);
1290
+ Ellipsis($$renderer2, { class: "h-4 w-4" });
1291
+ $$renderer2.push(`<!----></button></span></div>`);
1292
+ }
1293
+ $$renderer2.push(`<!--]--></div>`);
1294
+ });
1295
+ }
1296
+ function DefinitionDetailDrawer($$renderer, $$props) {
1297
+ $$renderer.component(($$renderer2) => {
1298
+ let {
1299
+ record,
1300
+ projectName,
1301
+ canEdit,
1302
+ showShare,
1303
+ onClose,
1304
+ onEdit,
1305
+ onOpenRunner,
1306
+ onShare
1307
+ } = $$props;
1308
+ Drawer($$renderer2, {
1309
+ onClose,
1310
+ children: ($$renderer3) => {
1311
+ $$renderer3.push(`<div class="border-border flex items-start justify-between gap-4 border-b p-6"><div class="min-w-0"><div class="flex items-center gap-2">`);
1312
+ StatusBadge($$renderer3, { status: record.status });
1313
+ $$renderer3.push(`<!----> <span class="text-muted-foreground font-mono text-[11px] tracking-wide uppercase">${escape_html(projectName)}</span></div> <h2 class="mt-2.5 text-xl font-semibold tracking-tight">${escape_html(record.displayName)}</h2> `);
1314
+ if (record.description) {
1315
+ $$renderer3.push("<!--[0-->");
1316
+ $$renderer3.push(`<p class="text-muted-foreground mt-1 text-sm">${escape_html(record.description)}</p>`);
1317
+ } else {
1318
+ $$renderer3.push("<!--[-1-->");
1319
+ }
1320
+ $$renderer3.push(`<!--]--></div> `);
1321
+ Button($$renderer3, {
1322
+ variant: "ghost",
1323
+ size: "icon",
1324
+ onclick: onClose,
1325
+ class: "mt-0.5 h-8 w-8 shrink-0",
1326
+ children: ($$renderer4) => {
1327
+ X($$renderer4, { class: "h-4 w-4" });
1328
+ },
1329
+ $$slots: { default: true }
1330
+ });
1331
+ $$renderer3.push(`<!----></div> <div class="flex-1 space-y-5 overflow-y-auto p-6">`);
1332
+ if (record.coverImage) {
1333
+ $$renderer3.push("<!--[0-->");
1334
+ $$renderer3.push(`<img${attr("src", record.coverImage)}${attr("alt", record.displayName)} class="border-border aspect-4/3 w-full rounded-lg border object-cover"/>`);
1335
+ } else {
1336
+ $$renderer3.push("<!--[-1-->");
1337
+ $$renderer3.push(`<div class="border-border bg-muted flex aspect-4/3 w-full items-center justify-center rounded-lg border"><span class="text-muted-foreground font-mono text-[11px] tracking-widest uppercase">No preview</span></div>`);
1338
+ }
1339
+ $$renderer3.push(`<!--]--> <div class="flex gap-2">`);
1340
+ Button($$renderer3, {
1341
+ class: "flex-1",
1342
+ onclick: () => onOpenRunner(record.guid, "live"),
1343
+ children: ($$renderer4) => {
1344
+ Play($$renderer4, { class: "mr-1.5 h-3.5 w-3.5" });
1345
+ $$renderer4.push(`<!----> Run`);
1346
+ },
1347
+ $$slots: { default: true }
1348
+ });
1349
+ $$renderer3.push(`<!----> `);
1350
+ if (canEdit) {
1351
+ $$renderer3.push("<!--[0-->");
1352
+ if (showShare) {
1353
+ $$renderer3.push("<!--[0-->");
1354
+ Button($$renderer3, {
1355
+ variant: "outline",
1356
+ size: "icon",
1357
+ onclick: () => onShare(record),
1358
+ title: "Share links",
1359
+ children: ($$renderer4) => {
1360
+ Share_2($$renderer4, { class: "h-4 w-4" });
1361
+ },
1362
+ $$slots: { default: true }
1363
+ });
1364
+ } else {
1365
+ $$renderer3.push("<!--[-1-->");
1366
+ }
1367
+ $$renderer3.push(`<!--]--> `);
1368
+ Button($$renderer3, {
1369
+ variant: "outline",
1370
+ onclick: () => onEdit(record),
1371
+ children: ($$renderer4) => {
1372
+ $$renderer4.push(`<!---->Edit`);
1373
+ },
1374
+ $$slots: { default: true }
1375
+ });
1376
+ $$renderer3.push(`<!---->`);
1377
+ } else {
1378
+ $$renderer3.push("<!--[-1-->");
1379
+ }
1380
+ $$renderer3.push(`<!--]--></div> `);
1381
+ Separator($$renderer3, {});
1382
+ $$renderer3.push(`<!----> <div class="grid grid-cols-2 gap-x-4 gap-y-3"><div><p class="text-muted-foreground font-mono text-[10.5px] tracking-widest uppercase">Updated</p> <p class="mt-1 text-sm">${escape_html(formatUpdated(record.updatedAt))} ago</p></div> <div><p class="text-muted-foreground font-mono text-[10.5px] tracking-widest uppercase">Runs</p> <p class="mt-1 text-sm">${escape_html(record.solveCount.toLocaleString())}</p></div> `);
1383
+ if (record.category) {
1384
+ $$renderer3.push("<!--[0-->");
1385
+ $$renderer3.push(`<div><p class="text-muted-foreground font-mono text-[10.5px] tracking-widest uppercase">Category</p> <p class="mt-1 text-sm">${escape_html(record.category)}</p></div>`);
1386
+ } else {
1387
+ $$renderer3.push("<!--[-1-->");
1388
+ }
1389
+ $$renderer3.push(`<!--]--></div> `);
1390
+ if (record.tags?.length) {
1391
+ $$renderer3.push("<!--[0-->");
1392
+ $$renderer3.push(`<div>`);
1393
+ Separator($$renderer3, { class: "mb-4" });
1394
+ $$renderer3.push(`<!----> <div class="flex flex-wrap gap-1.5"><!--[-->`);
1395
+ const each_array = ensure_array_like(record.tags);
1396
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1397
+ let tag = each_array[$$index];
1398
+ $$renderer3.push(`<span class="bg-muted text-muted-foreground rounded px-2 py-0.5 font-mono text-[11px]">#${escape_html(tag)}</span>`);
1399
+ }
1400
+ $$renderer3.push(`<!--]--></div></div>`);
1401
+ } else {
1402
+ $$renderer3.push("<!--[-1-->");
1403
+ }
1404
+ $$renderer3.push(`<!--]--></div>`);
1405
+ }
1406
+ });
1407
+ });
1408
+ }
1409
+ function UploadVersionDialog($$renderer, $$props) {
1410
+ $$renderer.component(($$renderer2) => {
1411
+ let {
1412
+ nextVersionNumber,
1413
+ open,
1414
+ onOpenChange
1415
+ } = $$props;
1416
+ let changeNote = "";
1417
+ async function submit() {
1418
+ return;
1419
+ }
1420
+ let $$settled = true;
1421
+ let $$inner_renderer;
1422
+ function $$render_inner($$renderer3) {
1423
+ if (Root$1) {
1424
+ $$renderer3.push("<!--[-->");
1425
+ Root$1($$renderer3, {
1426
+ open,
1427
+ onOpenChange,
1428
+ children: ($$renderer4) => {
1429
+ if (Dialog_content) {
1430
+ $$renderer4.push("<!--[-->");
1431
+ Dialog_content($$renderer4, {
1432
+ class: "max-w-md",
1433
+ children: ($$renderer5) => {
1434
+ if (Dialog_header) {
1435
+ $$renderer5.push("<!--[-->");
1436
+ Dialog_header($$renderer5, {
1437
+ children: ($$renderer6) => {
1438
+ if (Dialog_title) {
1439
+ $$renderer6.push("<!--[-->");
1440
+ Dialog_title($$renderer6, {
1441
+ children: ($$renderer7) => {
1442
+ $$renderer7.push(`<!---->Upload new version`);
1443
+ },
1444
+ $$slots: { default: true }
1445
+ });
1446
+ $$renderer6.push("<!--]-->");
1447
+ } else {
1448
+ $$renderer6.push("<!--[!-->");
1449
+ $$renderer6.push("<!--]-->");
1450
+ }
1451
+ $$renderer6.push(` `);
1452
+ if (Dialog_description) {
1453
+ $$renderer6.push("<!--[-->");
1454
+ Dialog_description($$renderer6, {
1455
+ children: ($$renderer7) => {
1456
+ $$renderer7.push(`<!---->The upload becomes <strong>v${escape_html(nextVersionNumber)}</strong> as a draft. The live channel stays unchanged
1457
+ until you publish.`);
1458
+ },
1459
+ $$slots: { default: true }
1460
+ });
1461
+ $$renderer6.push("<!--]-->");
1462
+ } else {
1463
+ $$renderer6.push("<!--[!-->");
1464
+ $$renderer6.push("<!--]-->");
1465
+ }
1466
+ },
1467
+ $$slots: { default: true }
1468
+ });
1469
+ $$renderer5.push("<!--]-->");
1470
+ } else {
1471
+ $$renderer5.push("<!--[!-->");
1472
+ $$renderer5.push("<!--]-->");
1473
+ }
1474
+ $$renderer5.push(` <div class="mt-4 space-y-4"><div class="space-y-1.5">`);
1475
+ Label($$renderer5, {
1476
+ for: "upload-file",
1477
+ children: ($$renderer6) => {
1478
+ $$renderer6.push(`<!---->Grasshopper file`);
1479
+ },
1480
+ $$slots: { default: true }
1481
+ });
1482
+ $$renderer5.push(`<!----> <label for="upload-file" class="border-border hover:bg-accent/30 flex cursor-pointer items-center gap-3 rounded-md border-2 border-dashed px-4 py-5 transition-colors">`);
1483
+ File_up($$renderer5, { class: "text-muted-foreground h-5 w-5 shrink-0" });
1484
+ $$renderer5.push(`<!----> <div class="min-w-0 flex-1">`);
1485
+ {
1486
+ $$renderer5.push("<!--[-1-->");
1487
+ $$renderer5.push(`<p class="text-sm font-medium">Pick a .gh or .ghx file</p> <p class="text-muted-foreground text-xs">Becomes v${escape_html(nextVersionNumber)} draft</p>`);
1488
+ }
1489
+ $$renderer5.push(`<!--]--></div></label> <input id="upload-file" type="file" accept=".gh,.ghx" class="hidden"/></div> <div class="space-y-1.5">`);
1490
+ Label($$renderer5, {
1491
+ for: "upload-note",
1492
+ children: ($$renderer6) => {
1493
+ $$renderer6.push(`<!---->What changed? <span class="text-muted-foreground font-normal">(optional)</span>`);
1494
+ },
1495
+ $$slots: { default: true }
1496
+ });
1497
+ $$renderer5.push(`<!----> `);
1498
+ Textarea($$renderer5, {
1499
+ id: "upload-note",
1500
+ rows: 2,
1501
+ maxlength: 1e3,
1502
+ placeholder: "e.g. Fixed wall thickness calculation",
1503
+ get value() {
1504
+ return changeNote;
1505
+ },
1506
+ set value($$value) {
1507
+ changeNote = $$value;
1508
+ $$settled = false;
1509
+ }
1510
+ });
1511
+ $$renderer5.push(`<!----></div></div> `);
1512
+ if (Dialog_footer) {
1513
+ $$renderer5.push("<!--[-->");
1514
+ Dialog_footer($$renderer5, {
1515
+ class: "mt-4",
1516
+ children: ($$renderer6) => {
1517
+ Button($$renderer6, {
1518
+ variant: "outline",
1519
+ onclick: () => onOpenChange(false),
1520
+ children: ($$renderer7) => {
1521
+ $$renderer7.push(`<!---->Cancel`);
1522
+ },
1523
+ $$slots: { default: true }
1524
+ });
1525
+ $$renderer6.push(`<!----> `);
1526
+ Button($$renderer6, {
1527
+ onclick: submit,
1528
+ disabled: true,
1529
+ children: ($$renderer7) => {
1530
+ {
1531
+ $$renderer7.push("<!--[-1-->");
1532
+ Upload($$renderer7, { class: "mr-1.5 h-3.5 w-3.5" });
1533
+ $$renderer7.push(`<!----> Upload v${escape_html(nextVersionNumber)}`);
1534
+ }
1535
+ $$renderer7.push(`<!--]-->`);
1536
+ },
1537
+ $$slots: { default: true }
1538
+ });
1539
+ $$renderer6.push(`<!---->`);
1540
+ },
1541
+ $$slots: { default: true }
1542
+ });
1543
+ $$renderer5.push("<!--]-->");
1544
+ } else {
1545
+ $$renderer5.push("<!--[!-->");
1546
+ $$renderer5.push("<!--]-->");
1547
+ }
1548
+ },
1549
+ $$slots: { default: true }
1550
+ });
1551
+ $$renderer4.push("<!--]-->");
1552
+ } else {
1553
+ $$renderer4.push("<!--[!-->");
1554
+ $$renderer4.push("<!--]-->");
1555
+ }
1556
+ },
1557
+ $$slots: { default: true }
1558
+ });
1559
+ $$renderer3.push("<!--]-->");
1560
+ } else {
1561
+ $$renderer3.push("<!--[!-->");
1562
+ $$renderer3.push("<!--]-->");
1563
+ }
1564
+ }
1565
+ do {
1566
+ $$settled = true;
1567
+ $$inner_renderer = $$renderer2.copy();
1568
+ $$render_inner($$inner_renderer);
1569
+ } while (!$$settled);
1570
+ $$renderer2.subsume($$inner_renderer);
1571
+ });
1572
+ }
1573
+ function VersionsSection($$renderer, $$props) {
1574
+ $$renderer.component(($$renderer2) => {
1575
+ let { definitionGuid, onOpenRunner } = $$props;
1576
+ let versions = [];
1577
+ let liveVersionId = null;
1578
+ let draftVersionId = null;
1579
+ let loading = true;
1580
+ let showUploadDialog = false;
1581
+ let publishingTarget = null;
1582
+ let publishingTargetSet = false;
1583
+ let publishing = false;
1584
+ let confirmingDelete = null;
1585
+ let deletingId = null;
1586
+ async function loadVersions() {
1587
+ loading = true;
1588
+ try {
1589
+ const res = await fetch(`/api/definitions/${definitionGuid}/versions`);
1590
+ if (!res.ok) throw new Error(`${res.status}`);
1591
+ const data = await res.json();
1592
+ versions = data.versions;
1593
+ liveVersionId = data.liveVersionId;
1594
+ draftVersionId = data.draftVersionId;
1595
+ } catch {
1596
+ toast.error("Failed to load versions");
1597
+ } finally {
1598
+ loading = false;
1599
+ }
1600
+ }
1601
+ const liveVersion = derived(() => versions.find((v) => v.id === liveVersionId) ?? null);
1602
+ const draftVersion = derived(() => versions.find((v) => v.id === draftVersionId) ?? null);
1603
+ const draftIsAhead = derived(() => draftVersion() !== null && liveVersion() !== null && draftVersion().id !== liveVersion().id);
1604
+ const nextVersionNumber = derived(() => (versions[0]?.versionNumber ?? 0) + 1);
1605
+ function formatRelative(iso) {
1606
+ const ms = Date.now() - new Date(iso).getTime();
1607
+ const minutes = Math.floor(ms / 6e4);
1608
+ if (minutes < 1) return "Just now";
1609
+ if (minutes < 60) return `${minutes}m ago`;
1610
+ const hours = Math.floor(minutes / 60);
1611
+ if (hours < 24) return `${hours}h ago`;
1612
+ const days = Math.floor(hours / 24);
1613
+ if (days === 1) return "Yesterday";
1614
+ if (days < 30) return `${days}d ago`;
1615
+ return new Date(iso).toLocaleDateString();
1616
+ }
1617
+ async function publish(target) {
1618
+ publishing = true;
1619
+ try {
1620
+ const body = target ? { versionId: target.id } : {};
1621
+ const res = await fetch(`/api/definitions/${definitionGuid}/publish`, {
1622
+ method: "POST",
1623
+ headers: { "Content-Type": "application/json" },
1624
+ body: JSON.stringify(body)
1625
+ });
1626
+ if (!res.ok) {
1627
+ const err = await res.json().catch(() => ({}));
1628
+ toast.error(err.message || err.error || "Failed to publish");
1629
+ return;
1630
+ }
1631
+ const result = await res.json();
1632
+ toast.success(`v${result.version?.versionNumber ?? "?"} is now live`);
1633
+ await loadVersions();
1634
+ await invalidateAll();
1635
+ } catch {
1636
+ toast.error("Failed to publish");
1637
+ } finally {
1638
+ publishing = false;
1639
+ publishingTarget = null;
1640
+ publishingTargetSet = false;
1641
+ }
1642
+ }
1643
+ async function deleteVersion(version) {
1644
+ deletingId = version.id;
1645
+ try {
1646
+ const res = await fetch(`/api/definitions/${definitionGuid}/versions/${version.id}`, { method: "DELETE" });
1647
+ if (!res.ok) {
1648
+ const err = await res.json().catch(() => ({}));
1649
+ toast.error(err.message || err.error || "Failed to delete version. Live or draft versions cannot be deleted.");
1650
+ return;
1651
+ }
1652
+ toast.success(`v${version.versionNumber} deleted`);
1653
+ await loadVersions();
1654
+ await invalidateAll();
1655
+ } catch {
1656
+ toast.error("Failed to delete version");
1657
+ } finally {
1658
+ deletingId = null;
1659
+ confirmingDelete = null;
1660
+ }
1661
+ }
1662
+ $$renderer2.push(`<div class="space-y-4">`);
1663
+ if (loading) {
1664
+ $$renderer2.push("<!--[0-->");
1665
+ $$renderer2.push(`<div class="border-border bg-muted/30 rounded-md border px-4 py-3"><p class="text-muted-foreground text-xs">Loading versions…</p></div>`);
1666
+ } else if (versions.length === 0) {
1667
+ $$renderer2.push("<!--[1-->");
1668
+ $$renderer2.push(`<div class="border-border bg-muted/30 text-muted-foreground rounded-md border px-4 py-3 text-sm">No versions yet. Upload one to get started.</div>`);
1669
+ } else {
1670
+ $$renderer2.push("<!--[-1-->");
1671
+ $$renderer2.push(`<div class="border-border bg-muted/30 flex items-center justify-between gap-3 rounded-md border px-4 py-3"><div class="flex min-w-0 items-center gap-2 text-sm"><span class="bg-success h-2 w-2 shrink-0 rounded-full"></span> `);
1672
+ if (liveVersion()) {
1673
+ $$renderer2.push("<!--[0-->");
1674
+ $$renderer2.push(`<span><strong>Live now</strong> — v${escape_html(liveVersion().versionNumber)}</span> `);
1675
+ if (draftIsAhead() && draftVersion()) {
1676
+ $$renderer2.push("<!--[0-->");
1677
+ $$renderer2.push(`<span class="text-muted-foreground">· newer version uploaded</span>`);
1678
+ } else {
1679
+ $$renderer2.push("<!--[-1-->");
1680
+ $$renderer2.push(`<span class="text-muted-foreground">· up to date</span>`);
1681
+ }
1682
+ $$renderer2.push(`<!--]-->`);
1683
+ } else {
1684
+ $$renderer2.push("<!--[-1-->");
1685
+ $$renderer2.push(`<span class="text-muted-foreground">Not yet published — promote a draft to go live</span>`);
1686
+ }
1687
+ $$renderer2.push(`<!--]--></div> `);
1688
+ if (draftIsAhead() && draftVersion()) {
1689
+ $$renderer2.push("<!--[0-->");
1690
+ Button($$renderer2, {
1691
+ size: "sm",
1692
+ onclick: () => publish(null),
1693
+ disabled: publishing,
1694
+ class: "shrink-0",
1695
+ children: ($$renderer3) => {
1696
+ Cloud_upload($$renderer3, { class: "mr-1.5 h-3.5 w-3.5" });
1697
+ $$renderer3.push(`<!----> Publish v${escape_html(draftVersion().versionNumber)}`);
1698
+ },
1699
+ $$slots: { default: true }
1700
+ });
1701
+ } else {
1702
+ $$renderer2.push("<!--[-1-->");
1703
+ }
1704
+ $$renderer2.push(`<!--]--></div>`);
1705
+ }
1706
+ $$renderer2.push(`<!--]--> <div class="flex items-center justify-between gap-3"><div><h3 class="text-base font-semibold tracking-tight">Versions</h3> <p class="text-muted-foreground mt-1 text-xs">Each upload becomes a version. The live version is what runs when someone uses this
1707
+ definition.</p></div> `);
1708
+ Button($$renderer2, {
1709
+ variant: "outline",
1710
+ size: "sm",
1711
+ onclick: () => showUploadDialog = true,
1712
+ class: "shrink-0",
1713
+ children: ($$renderer3) => {
1714
+ Upload($$renderer3, { class: "mr-1.5 h-3.5 w-3.5" });
1715
+ $$renderer3.push(`<!----> Upload new version`);
1716
+ },
1717
+ $$slots: { default: true }
1718
+ });
1719
+ $$renderer2.push(`<!----></div> `);
1720
+ if (!loading && versions.length > 0) {
1721
+ $$renderer2.push("<!--[0-->");
1722
+ $$renderer2.push(`<div class="space-y-2"><!--[-->`);
1723
+ const each_array = ensure_array_like(versions);
1724
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
1725
+ let version = each_array[$$index];
1726
+ const isLive = version.id === liveVersionId;
1727
+ const isDraft = version.id === draftVersionId && !isLive;
1728
+ $$renderer2.push(`<div${attr_class(`rounded-md border p-3 transition-colors ${isLive ? "border-primary/40 bg-accent/40" : "border-border bg-card hover:bg-muted/30"}`)}><div class="flex items-start justify-between gap-3"><div class="min-w-0 flex-1"><div class="flex flex-wrap items-center gap-2"><span class="font-mono text-sm font-semibold">v${escape_html(version.versionNumber)}</span> `);
1729
+ if (isLive) {
1730
+ $$renderer2.push("<!--[0-->");
1731
+ $$renderer2.push(`<span class="bg-success/10 text-success rounded-full px-2 py-0.5 font-mono text-[10px] tracking-wide uppercase">live</span>`);
1732
+ } else {
1733
+ $$renderer2.push("<!--[-1-->");
1734
+ }
1735
+ $$renderer2.push(`<!--]--> `);
1736
+ if (isDraft) {
1737
+ $$renderer2.push("<!--[0-->");
1738
+ $$renderer2.push(`<span class="bg-warning/10 text-warning rounded-full px-2 py-0.5 font-mono text-[10px] tracking-wide uppercase">draft</span>`);
1739
+ } else {
1740
+ $$renderer2.push("<!--[-1-->");
1741
+ }
1742
+ $$renderer2.push(`<!--]--></div> `);
1743
+ if (version.changeNote) {
1744
+ $$renderer2.push("<!--[0-->");
1745
+ $$renderer2.push(`<p class="mt-1 truncate text-sm">${escape_html(version.changeNote)}</p>`);
1746
+ } else if (version.originalFilename) {
1747
+ $$renderer2.push("<!--[1-->");
1748
+ $$renderer2.push(`<p class="text-muted-foreground mt-1 truncate font-mono text-xs">${escape_html(version.originalFilename)}</p>`);
1749
+ } else {
1750
+ $$renderer2.push("<!--[-1-->");
1751
+ }
1752
+ $$renderer2.push(`<!--]--> <p class="text-muted-foreground mt-1 text-xs">Uploaded ${escape_html(formatRelative(version.uploadedAt))}</p></div> <div class="flex shrink-0 items-center gap-1">`);
1753
+ if (isLive) {
1754
+ $$renderer2.push("<!--[0-->");
1755
+ Button($$renderer2, {
1756
+ size: "sm",
1757
+ variant: "outline",
1758
+ onclick: () => onOpenRunner(definitionGuid, "live"),
1759
+ children: ($$renderer3) => {
1760
+ Play($$renderer3, { class: "mr-1.5 h-3.5 w-3.5" });
1761
+ $$renderer3.push(`<!----> Run`);
1762
+ },
1763
+ $$slots: { default: true }
1764
+ });
1765
+ } else {
1766
+ $$renderer2.push("<!--[-1-->");
1767
+ if (isDraft) {
1768
+ $$renderer2.push("<!--[0-->");
1769
+ Button($$renderer2, {
1770
+ size: "sm",
1771
+ variant: "ghost",
1772
+ onclick: () => onOpenRunner(definitionGuid, "draft"),
1773
+ children: ($$renderer3) => {
1774
+ Play($$renderer3, { class: "mr-1.5 h-3.5 w-3.5" });
1775
+ $$renderer3.push(`<!----> Run`);
1776
+ },
1777
+ $$slots: { default: true }
1778
+ });
1779
+ } else {
1780
+ $$renderer2.push("<!--[-1-->");
1781
+ }
1782
+ $$renderer2.push(`<!--]--> `);
1783
+ Button($$renderer2, {
1784
+ size: "sm",
1785
+ variant: "outline",
1786
+ disabled: publishing,
1787
+ onclick: () => {
1788
+ publishingTarget = version;
1789
+ publishingTargetSet = true;
1790
+ },
1791
+ children: ($$renderer3) => {
1792
+ $$renderer3.push(`<!---->Make live`);
1793
+ },
1794
+ $$slots: { default: true }
1795
+ });
1796
+ $$renderer2.push(`<!---->`);
1797
+ }
1798
+ $$renderer2.push(`<!--]--> `);
1799
+ if (!isLive && !isDraft) {
1800
+ $$renderer2.push("<!--[0-->");
1801
+ Button($$renderer2, {
1802
+ size: "sm",
1803
+ variant: "ghost",
1804
+ onclick: () => confirmingDelete = version,
1805
+ disabled: deletingId === version.id,
1806
+ class: "text-muted-foreground hover:text-destructive h-8 w-8 p-0",
1807
+ "aria-label": "Delete version",
1808
+ children: ($$renderer3) => {
1809
+ Trash_2($$renderer3, { class: "h-3.5 w-3.5" });
1810
+ },
1811
+ $$slots: { default: true }
1812
+ });
1813
+ } else {
1814
+ $$renderer2.push("<!--[-1-->");
1815
+ }
1816
+ $$renderer2.push(`<!--]--></div></div></div>`);
1817
+ }
1818
+ $$renderer2.push(`<!--]--></div>`);
1819
+ } else {
1820
+ $$renderer2.push("<!--[-1-->");
1821
+ }
1822
+ $$renderer2.push(`<!--]--></div> `);
1823
+ UploadVersionDialog($$renderer2, {
1824
+ nextVersionNumber: nextVersionNumber(),
1825
+ open: showUploadDialog,
1826
+ onOpenChange: (o) => showUploadDialog = o
1827
+ });
1828
+ $$renderer2.push(`<!----> `);
1829
+ if (Root) {
1830
+ $$renderer2.push("<!--[-->");
1831
+ Root($$renderer2, {
1832
+ open: publishingTargetSet,
1833
+ onOpenChange: (o) => {
1834
+ if (!o) {
1835
+ publishingTarget = null;
1836
+ publishingTargetSet = false;
1837
+ }
1838
+ },
1839
+ children: ($$renderer3) => {
1840
+ if (Alert_dialog_content) {
1841
+ $$renderer3.push("<!--[-->");
1842
+ Alert_dialog_content($$renderer3, {
1843
+ children: ($$renderer4) => {
1844
+ if (Alert_dialog_header) {
1845
+ $$renderer4.push("<!--[-->");
1846
+ Alert_dialog_header($$renderer4, {
1847
+ children: ($$renderer5) => {
1848
+ if (Alert_dialog_title) {
1849
+ $$renderer5.push("<!--[-->");
1850
+ Alert_dialog_title($$renderer5, {
1851
+ children: ($$renderer6) => {
1852
+ if (publishingTarget) {
1853
+ $$renderer6.push("<!--[0-->");
1854
+ $$renderer6.push(`Make v${escape_html(publishingTarget.versionNumber)} live?`);
1855
+ } else {
1856
+ $$renderer6.push("<!--[-1-->");
1857
+ $$renderer6.push(`Publish current draft?`);
1858
+ }
1859
+ $$renderer6.push(`<!--]-->`);
1860
+ },
1861
+ $$slots: { default: true }
1862
+ });
1863
+ $$renderer5.push("<!--]-->");
1864
+ } else {
1865
+ $$renderer5.push("<!--[!-->");
1866
+ $$renderer5.push("<!--]-->");
1867
+ }
1868
+ $$renderer5.push(` `);
1869
+ if (Alert_dialog_description) {
1870
+ $$renderer5.push("<!--[-->");
1871
+ Alert_dialog_description($$renderer5, {
1872
+ children: ($$renderer6) => {
1873
+ if (publishingTarget && liveVersion() && publishingTarget.versionNumber < liveVersion().versionNumber) {
1874
+ $$renderer6.push("<!--[0-->");
1875
+ $$renderer6.push(`Rolling back to an older version. Anyone running this definition will immediately get v${escape_html(publishingTarget.versionNumber)}
1876
+ instead of v${escape_html(liveVersion().versionNumber)}.`);
1877
+ } else if (publishingTarget) {
1878
+ $$renderer6.push("<!--[1-->");
1879
+ $$renderer6.push(`Anyone running this definition will immediately get v${escape_html(publishingTarget.versionNumber)}
1880
+ instead of v${escape_html(liveVersion()?.versionNumber ?? "—")}.`);
1881
+ } else {
1882
+ $$renderer6.push("<!--[-1-->");
1883
+ $$renderer6.push(`Promotes the current draft to live. Everyone running this definition gets the new version
1884
+ immediately.`);
1885
+ }
1886
+ $$renderer6.push(`<!--]-->`);
1887
+ },
1888
+ $$slots: { default: true }
1889
+ });
1890
+ $$renderer5.push("<!--]-->");
1891
+ } else {
1892
+ $$renderer5.push("<!--[!-->");
1893
+ $$renderer5.push("<!--]-->");
1894
+ }
1895
+ },
1896
+ $$slots: { default: true }
1897
+ });
1898
+ $$renderer4.push("<!--]-->");
1899
+ } else {
1900
+ $$renderer4.push("<!--[!-->");
1901
+ $$renderer4.push("<!--]-->");
1902
+ }
1903
+ $$renderer4.push(` `);
1904
+ if (Alert_dialog_footer) {
1905
+ $$renderer4.push("<!--[-->");
1906
+ Alert_dialog_footer($$renderer4, {
1907
+ children: ($$renderer5) => {
1908
+ if (Alert_dialog_cancel) {
1909
+ $$renderer5.push("<!--[-->");
1910
+ Alert_dialog_cancel($$renderer5, {
1911
+ children: ($$renderer6) => {
1912
+ $$renderer6.push(`<!---->Cancel`);
1913
+ },
1914
+ $$slots: { default: true }
1915
+ });
1916
+ $$renderer5.push("<!--]-->");
1917
+ } else {
1918
+ $$renderer5.push("<!--[!-->");
1919
+ $$renderer5.push("<!--]-->");
1920
+ }
1921
+ $$renderer5.push(` `);
1922
+ if (Alert_dialog_action) {
1923
+ $$renderer5.push("<!--[-->");
1924
+ Alert_dialog_action($$renderer5, {
1925
+ onclick: () => publish(publishingTarget),
1926
+ disabled: publishing,
1927
+ children: ($$renderer6) => {
1928
+ $$renderer6.push(`<!---->${escape_html(publishing ? "Publishing…" : "Publish")}`);
1929
+ },
1930
+ $$slots: { default: true }
1931
+ });
1932
+ $$renderer5.push("<!--]-->");
1933
+ } else {
1934
+ $$renderer5.push("<!--[!-->");
1935
+ $$renderer5.push("<!--]-->");
1936
+ }
1937
+ },
1938
+ $$slots: { default: true }
1939
+ });
1940
+ $$renderer4.push("<!--]-->");
1941
+ } else {
1942
+ $$renderer4.push("<!--[!-->");
1943
+ $$renderer4.push("<!--]-->");
1944
+ }
1945
+ },
1946
+ $$slots: { default: true }
1947
+ });
1948
+ $$renderer3.push("<!--]-->");
1949
+ } else {
1950
+ $$renderer3.push("<!--[!-->");
1951
+ $$renderer3.push("<!--]-->");
1952
+ }
1953
+ },
1954
+ $$slots: { default: true }
1955
+ });
1956
+ $$renderer2.push("<!--]-->");
1957
+ } else {
1958
+ $$renderer2.push("<!--[!-->");
1959
+ $$renderer2.push("<!--]-->");
1960
+ }
1961
+ $$renderer2.push(` `);
1962
+ if (Root) {
1963
+ $$renderer2.push("<!--[-->");
1964
+ Root($$renderer2, {
1965
+ open: !!confirmingDelete,
1966
+ onOpenChange: (o) => !o && (confirmingDelete = null),
1967
+ children: ($$renderer3) => {
1968
+ if (Alert_dialog_content) {
1969
+ $$renderer3.push("<!--[-->");
1970
+ Alert_dialog_content($$renderer3, {
1971
+ children: ($$renderer4) => {
1972
+ if (Alert_dialog_header) {
1973
+ $$renderer4.push("<!--[-->");
1974
+ Alert_dialog_header($$renderer4, {
1975
+ children: ($$renderer5) => {
1976
+ if (Alert_dialog_title) {
1977
+ $$renderer5.push("<!--[-->");
1978
+ Alert_dialog_title($$renderer5, {
1979
+ children: ($$renderer6) => {
1980
+ $$renderer6.push(`<!---->Delete v${escape_html(confirmingDelete?.versionNumber)}?`);
1981
+ },
1982
+ $$slots: { default: true }
1983
+ });
1984
+ $$renderer5.push("<!--]-->");
1985
+ } else {
1986
+ $$renderer5.push("<!--[!-->");
1987
+ $$renderer5.push("<!--]-->");
1988
+ }
1989
+ $$renderer5.push(` `);
1990
+ if (Alert_dialog_description) {
1991
+ $$renderer5.push("<!--[-->");
1992
+ Alert_dialog_description($$renderer5, {
1993
+ children: ($$renderer6) => {
1994
+ $$renderer6.push(`<!---->This permanently removes the version's file. The live and draft versions cannot be deleted —
1995
+ repoint first.`);
1996
+ },
1997
+ $$slots: { default: true }
1998
+ });
1999
+ $$renderer5.push("<!--]-->");
2000
+ } else {
2001
+ $$renderer5.push("<!--[!-->");
2002
+ $$renderer5.push("<!--]-->");
2003
+ }
2004
+ },
2005
+ $$slots: { default: true }
2006
+ });
2007
+ $$renderer4.push("<!--]-->");
2008
+ } else {
2009
+ $$renderer4.push("<!--[!-->");
2010
+ $$renderer4.push("<!--]-->");
2011
+ }
2012
+ $$renderer4.push(` `);
2013
+ if (Alert_dialog_footer) {
2014
+ $$renderer4.push("<!--[-->");
2015
+ Alert_dialog_footer($$renderer4, {
2016
+ children: ($$renderer5) => {
2017
+ if (Alert_dialog_cancel) {
2018
+ $$renderer5.push("<!--[-->");
2019
+ Alert_dialog_cancel($$renderer5, {
2020
+ children: ($$renderer6) => {
2021
+ $$renderer6.push(`<!---->Cancel`);
2022
+ },
2023
+ $$slots: { default: true }
2024
+ });
2025
+ $$renderer5.push("<!--]-->");
2026
+ } else {
2027
+ $$renderer5.push("<!--[!-->");
2028
+ $$renderer5.push("<!--]-->");
2029
+ }
2030
+ $$renderer5.push(` `);
2031
+ if (Alert_dialog_action) {
2032
+ $$renderer5.push("<!--[-->");
2033
+ Alert_dialog_action($$renderer5, {
2034
+ onclick: () => confirmingDelete && deleteVersion(confirmingDelete),
2035
+ disabled: !!deletingId,
2036
+ children: ($$renderer6) => {
2037
+ $$renderer6.push(`<!---->${escape_html(deletingId ? "Deleting…" : "Delete")}`);
2038
+ },
2039
+ $$slots: { default: true }
2040
+ });
2041
+ $$renderer5.push("<!--]-->");
2042
+ } else {
2043
+ $$renderer5.push("<!--[!-->");
2044
+ $$renderer5.push("<!--]-->");
2045
+ }
2046
+ },
2047
+ $$slots: { default: true }
2048
+ });
2049
+ $$renderer4.push("<!--]-->");
2050
+ } else {
2051
+ $$renderer4.push("<!--[!-->");
2052
+ $$renderer4.push("<!--]-->");
2053
+ }
2054
+ },
2055
+ $$slots: { default: true }
2056
+ });
2057
+ $$renderer3.push("<!--]-->");
2058
+ } else {
2059
+ $$renderer3.push("<!--[!-->");
2060
+ $$renderer3.push("<!--]-->");
2061
+ }
2062
+ },
2063
+ $$slots: { default: true }
2064
+ });
2065
+ $$renderer2.push("<!--]-->");
2066
+ } else {
2067
+ $$renderer2.push("<!--[!-->");
2068
+ $$renderer2.push("<!--]-->");
2069
+ }
2070
+ });
2071
+ }
2072
+ function MintShareLinkDialog($$renderer, $$props) {
2073
+ $$renderer.component(($$renderer2) => {
2074
+ let { definitionGuid, open, onOpenChange, onMinted } = $$props;
2075
+ let channel = "live";
2076
+ let allowSolve = true;
2077
+ let label = "";
2078
+ let expiresEnabled = false;
2079
+ let expiresAt = "";
2080
+ let capEnabled = true;
2081
+ let cap = DEFAULT_SHARE_LINK_MAX_SOLVES;
2082
+ let creating = false;
2083
+ let mintedToken = null;
2084
+ let mintedShareUrl = null;
2085
+ let copied = false;
2086
+ async function submit() {
2087
+ if (cap > DEFAULT_SHARE_LINK_MAX_SOLVES) {
2088
+ const ok = confirm(`You're raising the cap above the default of ${DEFAULT_SHARE_LINK_MAX_SOLVES}. An uncapped or high-cap link is a denial-of-wallet vector if leaked. Continue?`);
2089
+ if (!ok) return;
2090
+ }
2091
+ creating = true;
2092
+ try {
2093
+ const body = {
2094
+ channel,
2095
+ allowSolve,
2096
+ ...label.trim() ? { name: label.trim() } : {},
2097
+ maxSolves: capEnabled ? cap : null,
2098
+ ...expiresEnabled && expiresAt ? { expiresAt: new Date(expiresAt).toISOString() } : {}
2099
+ };
2100
+ const res = await fetch(`/api/definitions/${definitionGuid}/share-links`, {
2101
+ method: "POST",
2102
+ headers: { "Content-Type": "application/json" },
2103
+ body: JSON.stringify(body)
2104
+ });
2105
+ if (!res.ok) {
2106
+ const err = await res.json().catch(() => ({}));
2107
+ toast.error(err.message || err.error || "Failed to mint share link");
2108
+ return;
2109
+ }
2110
+ const data = await res.json();
2111
+ mintedToken = data.token;
2112
+ mintedShareUrl = `${window.location.origin}/library/${definitionGuid}?token=${data.token}`;
2113
+ onMinted();
2114
+ } catch {
2115
+ toast.error("Failed to mint share link");
2116
+ } finally {
2117
+ creating = false;
2118
+ }
2119
+ }
2120
+ async function copyUrl() {
2121
+ if (!mintedShareUrl) return;
2122
+ try {
2123
+ await navigator.clipboard.writeText(mintedShareUrl);
2124
+ copied = true;
2125
+ setTimeout(() => copied = false, 2e3);
2126
+ } catch {
2127
+ toast.error("Could not copy to clipboard");
2128
+ }
2129
+ }
2130
+ let $$settled = true;
2131
+ let $$inner_renderer;
2132
+ function $$render_inner($$renderer3) {
2133
+ if (Root$1) {
2134
+ $$renderer3.push("<!--[-->");
2135
+ Root$1($$renderer3, {
2136
+ open,
2137
+ onOpenChange,
2138
+ children: ($$renderer4) => {
2139
+ if (Dialog_content) {
2140
+ $$renderer4.push("<!--[-->");
2141
+ Dialog_content($$renderer4, {
2142
+ class: "max-w-lg",
2143
+ children: ($$renderer5) => {
2144
+ if (!mintedToken) {
2145
+ $$renderer5.push("<!--[0-->");
2146
+ if (Dialog_header) {
2147
+ $$renderer5.push("<!--[-->");
2148
+ Dialog_header($$renderer5, {
2149
+ children: ($$renderer6) => {
2150
+ if (Dialog_title) {
2151
+ $$renderer6.push("<!--[-->");
2152
+ Dialog_title($$renderer6, {
2153
+ children: ($$renderer7) => {
2154
+ $$renderer7.push(`<!---->New share link`);
2155
+ },
2156
+ $$slots: { default: true }
2157
+ });
2158
+ $$renderer6.push("<!--]-->");
2159
+ } else {
2160
+ $$renderer6.push("<!--[!-->");
2161
+ $$renderer6.push("<!--]-->");
2162
+ }
2163
+ $$renderer6.push(` `);
2164
+ if (Dialog_description) {
2165
+ $$renderer6.push("<!--[-->");
2166
+ Dialog_description($$renderer6, {
2167
+ children: ($$renderer7) => {
2168
+ $$renderer7.push(`<!---->Anyone with the link gets the access you configure here. Caps and expiry are the
2169
+ load-bearing protection — they assume the URL will eventually leak.`);
2170
+ },
2171
+ $$slots: { default: true }
2172
+ });
2173
+ $$renderer6.push("<!--]-->");
2174
+ } else {
2175
+ $$renderer6.push("<!--[!-->");
2176
+ $$renderer6.push("<!--]-->");
2177
+ }
2178
+ },
2179
+ $$slots: { default: true }
2180
+ });
2181
+ $$renderer5.push("<!--]-->");
2182
+ } else {
2183
+ $$renderer5.push("<!--[!-->");
2184
+ $$renderer5.push("<!--]-->");
2185
+ }
2186
+ $$renderer5.push(` <div class="mt-4 space-y-4"><div class="space-y-1.5">`);
2187
+ Label($$renderer5, {
2188
+ for: "sl-channel",
2189
+ children: ($$renderer6) => {
2190
+ $$renderer6.push(`<!---->Channel`);
2191
+ },
2192
+ $$slots: { default: true }
2193
+ });
2194
+ $$renderer5.push(`<!----> `);
2195
+ $$renderer5.select(
2196
+ {
2197
+ id: "sl-channel",
2198
+ value: channel,
2199
+ class: "border-input bg-background h-9 w-full rounded-md border px-3 text-sm"
2200
+ },
2201
+ ($$renderer6) => {
2202
+ $$renderer6.option({ value: "live" }, ($$renderer7) => {
2203
+ $$renderer7.push(`Live — recipients see the published version`);
2204
+ });
2205
+ $$renderer6.option({ value: "draft" }, ($$renderer7) => {
2206
+ $$renderer7.push(`Draft — recipients see the unpublished version`);
2207
+ });
2208
+ }
2209
+ );
2210
+ $$renderer5.push(` `);
2211
+ {
2212
+ $$renderer5.push("<!--[-1-->");
2213
+ }
2214
+ $$renderer5.push(`<!--]--></div> <div class="space-y-1.5">`);
2215
+ Label($$renderer5, {
2216
+ for: "sl-label",
2217
+ children: ($$renderer6) => {
2218
+ $$renderer6.push(`<!---->Label (optional)`);
2219
+ },
2220
+ $$slots: { default: true }
2221
+ });
2222
+ $$renderer5.push(`<!----> `);
2223
+ Input($$renderer5, {
2224
+ id: "sl-label",
2225
+ placeholder: "e.g. Demo for Acme",
2226
+ get value() {
2227
+ return label;
2228
+ },
2229
+ set value($$value) {
2230
+ label = $$value;
2231
+ $$settled = false;
2232
+ }
2233
+ });
2234
+ $$renderer5.push(`<!----></div> <div class="border-border rounded-md border p-3"><label class="flex cursor-pointer items-start gap-3"><input type="checkbox"${attr("checked", allowSolve, true)} class="mt-0.5 shrink-0"/> <div class="min-w-0"><p class="text-sm font-medium">Allow solve</p> <p class="text-muted-foreground mt-0.5 text-xs">When off, recipients can view the schema and parameters but can't run solves. When
2235
+ on, every solve counts against the cap.</p></div></label></div> <div class="border-border rounded-md border p-3"><label class="flex cursor-pointer items-start gap-3"><input type="checkbox"${attr("checked", capEnabled, true)} class="mt-0.5 shrink-0"/> <div class="min-w-0 flex-1"><p class="text-sm font-medium">Cap total solves</p> <p class="text-muted-foreground mt-0.5 text-xs">Default ${escape_html(DEFAULT_SHARE_LINK_MAX_SOLVES.toLocaleString())}. Recommended. Uncapped
2236
+ links are a denial-of-wallet risk if leaked.</p></div></label> `);
2237
+ {
2238
+ $$renderer5.push("<!--[0-->");
2239
+ $$renderer5.push(`<div class="mt-2 ml-6">`);
2240
+ Input($$renderer5, {
2241
+ type: "number",
2242
+ min: 1,
2243
+ class: "h-8 w-32 text-sm",
2244
+ get value() {
2245
+ return cap;
2246
+ },
2247
+ set value($$value) {
2248
+ cap = $$value;
2249
+ $$settled = false;
2250
+ }
2251
+ });
2252
+ $$renderer5.push(`<!----></div>`);
2253
+ }
2254
+ $$renderer5.push(`<!--]--></div> <div class="border-border rounded-md border p-3"><label class="flex cursor-pointer items-start gap-3"><input type="checkbox"${attr("checked", expiresEnabled, true)} class="mt-0.5 shrink-0"/> <div class="min-w-0 flex-1"><p class="text-sm font-medium">Set expiry</p> <p class="text-muted-foreground mt-0.5 text-xs">The link stops working after this date. Off = never expires.</p></div></label> `);
2255
+ {
2256
+ $$renderer5.push("<!--[-1-->");
2257
+ }
2258
+ $$renderer5.push(`<!--]--></div></div> `);
2259
+ if (Dialog_footer) {
2260
+ $$renderer5.push("<!--[-->");
2261
+ Dialog_footer($$renderer5, {
2262
+ class: "mt-4",
2263
+ children: ($$renderer6) => {
2264
+ Button($$renderer6, {
2265
+ variant: "outline",
2266
+ onclick: () => onOpenChange(false),
2267
+ children: ($$renderer7) => {
2268
+ $$renderer7.push(`<!---->Cancel`);
2269
+ },
2270
+ $$slots: { default: true }
2271
+ });
2272
+ $$renderer6.push(`<!----> `);
2273
+ Button($$renderer6, {
2274
+ onclick: submit,
2275
+ disabled: creating || expiresEnabled || cap < 1,
2276
+ children: ($$renderer7) => {
2277
+ $$renderer7.push(`<!---->${escape_html(creating ? "Creating…" : "Create link")}`);
2278
+ },
2279
+ $$slots: { default: true }
2280
+ });
2281
+ $$renderer6.push(`<!---->`);
2282
+ },
2283
+ $$slots: { default: true }
2284
+ });
2285
+ $$renderer5.push("<!--]-->");
2286
+ } else {
2287
+ $$renderer5.push("<!--[!-->");
2288
+ $$renderer5.push("<!--]-->");
2289
+ }
2290
+ } else {
2291
+ $$renderer5.push("<!--[-1-->");
2292
+ if (Dialog_header) {
2293
+ $$renderer5.push("<!--[-->");
2294
+ Dialog_header($$renderer5, {
2295
+ children: ($$renderer6) => {
2296
+ if (Dialog_title) {
2297
+ $$renderer6.push("<!--[-->");
2298
+ Dialog_title($$renderer6, {
2299
+ children: ($$renderer7) => {
2300
+ $$renderer7.push(`<!---->Share link ready`);
2301
+ },
2302
+ $$slots: { default: true }
2303
+ });
2304
+ $$renderer6.push("<!--]-->");
2305
+ } else {
2306
+ $$renderer6.push("<!--[!-->");
2307
+ $$renderer6.push("<!--]-->");
2308
+ }
2309
+ $$renderer6.push(` `);
2310
+ if (Dialog_description) {
2311
+ $$renderer6.push("<!--[-->");
2312
+ Dialog_description($$renderer6, {
2313
+ children: ($$renderer7) => {
2314
+ $$renderer7.push(`<!---->Copy the link now — this is the only time you'll see it. The server stores only a hash; we
2315
+ cannot show it again.`);
2316
+ },
2317
+ $$slots: { default: true }
2318
+ });
2319
+ $$renderer6.push("<!--]-->");
2320
+ } else {
2321
+ $$renderer6.push("<!--[!-->");
2322
+ $$renderer6.push("<!--]-->");
2323
+ }
2324
+ },
2325
+ $$slots: { default: true }
2326
+ });
2327
+ $$renderer5.push("<!--]-->");
2328
+ } else {
2329
+ $$renderer5.push("<!--[!-->");
2330
+ $$renderer5.push("<!--]-->");
2331
+ }
2332
+ $$renderer5.push(` <div class="mt-4 space-y-3"><div class="border-warning/40 bg-warning/5 rounded-md border p-3"><p class="text-warning flex items-start gap-2 text-xs">`);
2333
+ Triangle_alert($$renderer5, { class: "mt-0.5 h-3.5 w-3.5 shrink-0" });
2334
+ $$renderer5.push(`<!----> <span>This URL grants the configured access to anyone who receives it. Treat it like a
2335
+ password — revoke it immediately if it's compromised.</span></p></div> <div class="border-border bg-muted/40 rounded-md border p-3"><p class="text-muted-foreground mb-2 text-xs font-medium tracking-wider uppercase">Share URL</p> <div class="flex items-start gap-2"><code class="bg-background min-w-0 flex-1 rounded p-2 font-mono text-xs break-all">${escape_html(mintedShareUrl)}</code> `);
2336
+ Button($$renderer5, {
2337
+ size: "sm",
2338
+ variant: copied ? "default" : "outline",
2339
+ onclick: copyUrl,
2340
+ class: "shrink-0",
2341
+ children: ($$renderer6) => {
2342
+ if (copied) {
2343
+ $$renderer6.push("<!--[0-->");
2344
+ Check($$renderer6, { class: "mr-1.5 h-3.5 w-3.5" });
2345
+ $$renderer6.push(`<!----> Copied`);
2346
+ } else {
2347
+ $$renderer6.push("<!--[-1-->");
2348
+ Copy($$renderer6, { class: "mr-1.5 h-3.5 w-3.5" });
2349
+ $$renderer6.push(`<!----> Copy`);
2350
+ }
2351
+ $$renderer6.push(`<!--]-->`);
2352
+ },
2353
+ $$slots: { default: true }
2354
+ });
2355
+ $$renderer5.push(`<!----></div></div></div> `);
2356
+ if (Dialog_footer) {
2357
+ $$renderer5.push("<!--[-->");
2358
+ Dialog_footer($$renderer5, {
2359
+ class: "mt-4",
2360
+ children: ($$renderer6) => {
2361
+ Button($$renderer6, {
2362
+ onclick: () => onOpenChange(false),
2363
+ children: ($$renderer7) => {
2364
+ $$renderer7.push(`<!---->Done`);
2365
+ },
2366
+ $$slots: { default: true }
2367
+ });
2368
+ },
2369
+ $$slots: { default: true }
2370
+ });
2371
+ $$renderer5.push("<!--]-->");
2372
+ } else {
2373
+ $$renderer5.push("<!--[!-->");
2374
+ $$renderer5.push("<!--]-->");
2375
+ }
2376
+ }
2377
+ $$renderer5.push(`<!--]-->`);
2378
+ },
2379
+ $$slots: { default: true }
2380
+ });
2381
+ $$renderer4.push("<!--]-->");
2382
+ } else {
2383
+ $$renderer4.push("<!--[!-->");
2384
+ $$renderer4.push("<!--]-->");
2385
+ }
2386
+ },
2387
+ $$slots: { default: true }
2388
+ });
2389
+ $$renderer3.push("<!--]-->");
2390
+ } else {
2391
+ $$renderer3.push("<!--[!-->");
2392
+ $$renderer3.push("<!--]-->");
2393
+ }
2394
+ }
2395
+ do {
2396
+ $$settled = true;
2397
+ $$inner_renderer = $$renderer2.copy();
2398
+ $$render_inner($$inner_renderer);
2399
+ } while (!$$settled);
2400
+ $$renderer2.subsume($$inner_renderer);
2401
+ });
2402
+ }
2403
+ function ShareLinkSection($$renderer, $$props) {
2404
+ $$renderer.component(($$renderer2) => {
2405
+ let { definitionGuid } = $$props;
2406
+ let links = [];
2407
+ let loading = true;
2408
+ let showMintDialog = false;
2409
+ let confirmingRevoke = null;
2410
+ let revokingId = null;
2411
+ async function loadLinks() {
2412
+ loading = true;
2413
+ try {
2414
+ const res = await fetch(`/api/definitions/${definitionGuid}/share-links`);
2415
+ if (!res.ok) throw new Error(`${res.status}`);
2416
+ const data = await res.json();
2417
+ links = data.links;
2418
+ } catch {
2419
+ toast.error("Failed to load share links");
2420
+ } finally {
2421
+ loading = false;
2422
+ }
2423
+ }
2424
+ async function revoke(link) {
2425
+ revokingId = link.id;
2426
+ try {
2427
+ const res = await fetch(`/api/definitions/${definitionGuid}/share-links/${link.id}`, { method: "DELETE" });
2428
+ if (!res.ok) {
2429
+ toast.error("Failed to revoke link");
2430
+ return;
2431
+ }
2432
+ toast.success("Link revoked");
2433
+ await loadLinks();
2434
+ } catch {
2435
+ toast.error("Failed to revoke link");
2436
+ } finally {
2437
+ revokingId = null;
2438
+ confirmingRevoke = null;
2439
+ }
2440
+ }
2441
+ function formatExpiry(iso) {
2442
+ if (!iso) return "Never";
2443
+ const date = new Date(iso);
2444
+ const now = /* @__PURE__ */ new Date();
2445
+ const expired = date.getTime() < now.getTime();
2446
+ return { text: date.toLocaleDateString(), expired };
2447
+ }
2448
+ function formatRelative(iso) {
2449
+ const ms = Date.now() - new Date(iso).getTime();
2450
+ const minutes = Math.floor(ms / 6e4);
2451
+ if (minutes < 1) return "just now";
2452
+ if (minutes < 60) return `${minutes}m ago`;
2453
+ const hours = Math.floor(minutes / 60);
2454
+ if (hours < 24) return `${hours}h ago`;
2455
+ const days = Math.floor(hours / 24);
2456
+ if (days < 30) return `${days}d ago`;
2457
+ return new Date(iso).toLocaleDateString();
2458
+ }
2459
+ const activeLinks = derived(() => links.filter((l) => !l.revokedAt));
2460
+ $$renderer2.push(`<div class="space-y-4"><div><h3 class="text-base font-semibold tracking-tight">Share links</h3> <p class="text-muted-foreground mt-1 text-xs">Per-definition tokens that grant access without an account. Use for client demos, embeds, and
2461
+ review links.</p></div> `);
2462
+ if (loading) {
2463
+ $$renderer2.push("<!--[0-->");
2464
+ $$renderer2.push(`<div class="border-border rounded-md border p-6 text-center"><p class="text-muted-foreground text-xs">Loading…</p></div>`);
2465
+ } else if (activeLinks().length === 0) {
2466
+ $$renderer2.push("<!--[1-->");
2467
+ {
2468
+ let actions = function($$renderer3) {
2469
+ Button($$renderer3, {
2470
+ size: "sm",
2471
+ onclick: () => showMintDialog = true,
2472
+ children: ($$renderer4) => {
2473
+ Plus($$renderer4, { class: "mr-1.5 h-3.5 w-3.5" });
2474
+ $$renderer4.push(`<!----> New link`);
2475
+ },
2476
+ $$slots: { default: true }
2477
+ });
2478
+ };
2479
+ EmptyState($$renderer2, {
2480
+ size: "sm",
2481
+ icon: Link_2,
2482
+ title: "No share links yet",
2483
+ description: "Mint a link to share this definition without requiring the recipient to have an account.",
2484
+ actions
2485
+ });
2486
+ }
2487
+ } else {
2488
+ $$renderer2.push("<!--[-1-->");
2489
+ $$renderer2.push(`<div class="border-border bg-card overflow-hidden rounded-md border"><div class="border-border bg-muted/40 flex items-center justify-between gap-3 border-b px-4 py-2"><span class="text-muted-foreground text-xs font-medium tracking-wider uppercase">${escape_html(activeLinks().length)} active link${escape_html(activeLinks().length === 1 ? "" : "s")}</span> `);
2490
+ Button($$renderer2, {
2491
+ size: "sm",
2492
+ variant: "outline",
2493
+ onclick: () => showMintDialog = true,
2494
+ children: ($$renderer3) => {
2495
+ Plus($$renderer3, { class: "mr-1.5 h-3.5 w-3.5" });
2496
+ $$renderer3.push(`<!----> New link`);
2497
+ },
2498
+ $$slots: { default: true }
2499
+ });
2500
+ $$renderer2.push(`<!----></div> <!--[-->`);
2501
+ const each_array = ensure_array_like(activeLinks());
2502
+ for (let i = 0, $$length = each_array.length; i < $$length; i++) {
2503
+ let link = each_array[i];
2504
+ const expiry = formatExpiry(link.expiresAt);
2505
+ const expired = typeof expiry === "object" && expiry.expired;
2506
+ const capValue = link.maxSolves;
2507
+ const hasCap = capValue !== null && capValue !== void 0;
2508
+ const capReached = hasCap && link.solveCount >= capValue;
2509
+ $$renderer2.push(`<div${attr_class(`flex items-start gap-3 px-4 py-3 ${i < activeLinks().length - 1 ? "border-border border-b" : ""}`)}><div class="min-w-0 flex-1"><div class="flex flex-wrap items-center gap-1.5"><p class="truncate text-sm font-medium">${escape_html(link.name ?? "Untitled link")}</p> <span${attr_class(`rounded-full px-2 py-0.5 font-mono text-[10px] tracking-wide uppercase ${link.channel === "live" ? "bg-success/10 text-success" : "bg-warning/10 text-warning"}`)}>${escape_html(link.channel)}</span> `);
2510
+ if (!link.allowSolve) {
2511
+ $$renderer2.push("<!--[0-->");
2512
+ $$renderer2.push(`<span class="bg-muted text-muted-foreground rounded-full px-2 py-0.5 font-mono text-[10px] tracking-wide uppercase">view-only</span>`);
2513
+ } else {
2514
+ $$renderer2.push("<!--[-1-->");
2515
+ }
2516
+ $$renderer2.push(`<!--]--> `);
2517
+ if (expired) {
2518
+ $$renderer2.push("<!--[0-->");
2519
+ $$renderer2.push(`<span class="bg-destructive/10 text-destructive flex items-center gap-1 rounded-full px-2 py-0.5 font-mono text-[10px] tracking-wide uppercase">`);
2520
+ Triangle_alert($$renderer2, { class: "h-2.5 w-2.5" });
2521
+ $$renderer2.push(`<!----> expired</span>`);
2522
+ } else {
2523
+ $$renderer2.push("<!--[-1-->");
2524
+ }
2525
+ $$renderer2.push(`<!--]--> `);
2526
+ if (capReached) {
2527
+ $$renderer2.push("<!--[0-->");
2528
+ $$renderer2.push(`<span class="bg-destructive/10 text-destructive rounded-full px-2 py-0.5 font-mono text-[10px] tracking-wide uppercase">cap reached</span>`);
2529
+ } else {
2530
+ $$renderer2.push("<!--[-1-->");
2531
+ }
2532
+ $$renderer2.push(`<!--]--></div> <div class="text-muted-foreground mt-1 flex flex-wrap items-center gap-x-3 gap-y-0.5 text-xs"><span class="font-mono tabular-nums">${escape_html(link.solveCount.toLocaleString())}${escape_html(hasCap ? ` / ${capValue.toLocaleString()}` : "")} solves</span> <span>·</span> <span>Expires: ${escape_html(typeof expiry === "object" ? expiry.text : expiry)}</span> <span>·</span> <span>Minted ${escape_html(formatRelative(link.createdAt))}</span></div></div> `);
2533
+ Button($$renderer2, {
2534
+ variant: "ghost",
2535
+ size: "icon",
2536
+ onclick: () => confirmingRevoke = link,
2537
+ disabled: revokingId === link.id,
2538
+ class: "text-muted-foreground hover:text-destructive h-7 w-7 shrink-0",
2539
+ "aria-label": "Revoke link",
2540
+ children: ($$renderer3) => {
2541
+ Trash_2($$renderer3, { class: "h-3.5 w-3.5" });
2542
+ },
2543
+ $$slots: { default: true }
2544
+ });
2545
+ $$renderer2.push(`<!----></div>`);
2546
+ }
2547
+ $$renderer2.push(`<!--]--></div>`);
2548
+ }
2549
+ $$renderer2.push(`<!--]--></div> `);
2550
+ MintShareLinkDialog($$renderer2, {
2551
+ definitionGuid,
2552
+ open: showMintDialog,
2553
+ onOpenChange: (o) => showMintDialog = o,
2554
+ onMinted: loadLinks
2555
+ });
2556
+ $$renderer2.push(`<!----> `);
2557
+ if (Root) {
2558
+ $$renderer2.push("<!--[-->");
2559
+ Root($$renderer2, {
2560
+ open: !!confirmingRevoke,
2561
+ onOpenChange: (o) => !o && (confirmingRevoke = null),
2562
+ children: ($$renderer3) => {
2563
+ if (Alert_dialog_content) {
2564
+ $$renderer3.push("<!--[-->");
2565
+ Alert_dialog_content($$renderer3, {
2566
+ children: ($$renderer4) => {
2567
+ if (Alert_dialog_header) {
2568
+ $$renderer4.push("<!--[-->");
2569
+ Alert_dialog_header($$renderer4, {
2570
+ children: ($$renderer5) => {
2571
+ if (Alert_dialog_title) {
2572
+ $$renderer5.push("<!--[-->");
2573
+ Alert_dialog_title($$renderer5, {
2574
+ children: ($$renderer6) => {
2575
+ $$renderer6.push(`<!---->Revoke this link?`);
2576
+ },
2577
+ $$slots: { default: true }
2578
+ });
2579
+ $$renderer5.push("<!--]-->");
2580
+ } else {
2581
+ $$renderer5.push("<!--[!-->");
2582
+ $$renderer5.push("<!--]-->");
2583
+ }
2584
+ $$renderer5.push(` `);
2585
+ if (Alert_dialog_description) {
2586
+ $$renderer5.push("<!--[-->");
2587
+ Alert_dialog_description($$renderer5, {
2588
+ children: ($$renderer6) => {
2589
+ if (confirmingRevoke) {
2590
+ $$renderer6.push("<!--[0-->");
2591
+ $$renderer6.push(`<strong>${escape_html(confirmingRevoke.name ?? "This link")}</strong> will stop working immediately. Anyone
2592
+ using it will see a "no longer active" page. This cannot be undone.`);
2593
+ } else {
2594
+ $$renderer6.push("<!--[-1-->");
2595
+ }
2596
+ $$renderer6.push(`<!--]-->`);
2597
+ },
2598
+ $$slots: { default: true }
2599
+ });
2600
+ $$renderer5.push("<!--]-->");
2601
+ } else {
2602
+ $$renderer5.push("<!--[!-->");
2603
+ $$renderer5.push("<!--]-->");
2604
+ }
2605
+ },
2606
+ $$slots: { default: true }
2607
+ });
2608
+ $$renderer4.push("<!--]-->");
2609
+ } else {
2610
+ $$renderer4.push("<!--[!-->");
2611
+ $$renderer4.push("<!--]-->");
2612
+ }
2613
+ $$renderer4.push(` `);
2614
+ if (Alert_dialog_footer) {
2615
+ $$renderer4.push("<!--[-->");
2616
+ Alert_dialog_footer($$renderer4, {
2617
+ children: ($$renderer5) => {
2618
+ if (Alert_dialog_cancel) {
2619
+ $$renderer5.push("<!--[-->");
2620
+ Alert_dialog_cancel($$renderer5, {
2621
+ children: ($$renderer6) => {
2622
+ $$renderer6.push(`<!---->Cancel`);
2623
+ },
2624
+ $$slots: { default: true }
2625
+ });
2626
+ $$renderer5.push("<!--]-->");
2627
+ } else {
2628
+ $$renderer5.push("<!--[!-->");
2629
+ $$renderer5.push("<!--]-->");
2630
+ }
2631
+ $$renderer5.push(` `);
2632
+ if (Alert_dialog_action) {
2633
+ $$renderer5.push("<!--[-->");
2634
+ Alert_dialog_action($$renderer5, {
2635
+ onclick: () => confirmingRevoke && revoke(confirmingRevoke),
2636
+ disabled: !!revokingId,
2637
+ children: ($$renderer6) => {
2638
+ $$renderer6.push(`<!---->${escape_html(revokingId ? "Revoking…" : "Revoke")}`);
2639
+ },
2640
+ $$slots: { default: true }
2641
+ });
2642
+ $$renderer5.push("<!--]-->");
2643
+ } else {
2644
+ $$renderer5.push("<!--[!-->");
2645
+ $$renderer5.push("<!--]-->");
2646
+ }
2647
+ },
2648
+ $$slots: { default: true }
2649
+ });
2650
+ $$renderer4.push("<!--]-->");
2651
+ } else {
2652
+ $$renderer4.push("<!--[!-->");
2653
+ $$renderer4.push("<!--]-->");
2654
+ }
2655
+ },
2656
+ $$slots: { default: true }
2657
+ });
2658
+ $$renderer3.push("<!--]-->");
2659
+ } else {
2660
+ $$renderer3.push("<!--[!-->");
2661
+ $$renderer3.push("<!--]-->");
2662
+ }
2663
+ },
2664
+ $$slots: { default: true }
2665
+ });
2666
+ $$renderer2.push("<!--]-->");
2667
+ } else {
2668
+ $$renderer2.push("<!--[!-->");
2669
+ $$renderer2.push("<!--]-->");
2670
+ }
2671
+ });
2672
+ }
2673
+ function DefinitionEditDrawer($$renderer, $$props) {
2674
+ $$renderer.component(($$renderer2) => {
2675
+ let {
2676
+ record,
2677
+ projects,
2678
+ computeServers,
2679
+ defaultComputeServerId = null,
2680
+ isSaving,
2681
+ initialTab = "versions",
2682
+ enableSharing,
2683
+ onClose,
2684
+ onSave,
2685
+ onDelete,
2686
+ onOpenRunner,
2687
+ onBack
2688
+ } = $$props;
2689
+ let activeTab = initialTab === "shares" && !enableSharing ? "versions" : initialTab;
2690
+ let displayName = record.displayName;
2691
+ let description = record.description ?? "";
2692
+ let category = record.category ?? "";
2693
+ let tags = [...record.tags ?? []];
2694
+ let projectId = record.projectId;
2695
+ let computeServerId = record.computeServerId ?? null;
2696
+ let status = record.status;
2697
+ let userImageMode = void 0;
2698
+ let coverImageUrl = record.coverImage ?? "";
2699
+ let imageInput = void 0;
2700
+ let imageHasFile = false;
2701
+ let showDeleteConfirm = false;
2702
+ let uploadingImage = false;
2703
+ let pendingProjectId = null;
2704
+ const pendingProject = derived(() => pendingProjectId ? projects.find((p) => p.id === pendingProjectId) ?? null : null);
2705
+ const currentProject = derived(() => projects.find((p) => p.id === projectId) ?? null);
2706
+ function handleProjectChange(nextId) {
2707
+ if (nextId === projectId) return;
2708
+ pendingProjectId = nextId;
2709
+ }
2710
+ function confirmProjectChange() {
2711
+ if (pendingProjectId) projectId = pendingProjectId;
2712
+ pendingProjectId = null;
2713
+ }
2714
+ function cancelProjectChange() {
2715
+ pendingProjectId = null;
2716
+ }
2717
+ const imageMode = derived(() => userImageMode ?? (record.coverImage?.startsWith("/api/definitions/") ? "upload" : "url"));
2718
+ const statusItems = [
2719
+ {
2720
+ id: "draft",
2721
+ label: "Draft — work in progress",
2722
+ icon: Circle,
2723
+ iconStyle: "color: var(--muted-foreground); fill: var(--muted-foreground);"
2724
+ },
2725
+ {
2726
+ id: "published",
2727
+ label: "Published — live and visible to runners",
2728
+ icon: Circle,
2729
+ iconStyle: "color: #22c55e; fill: #22c55e;"
2730
+ }
2731
+ ];
2732
+ const computeServerItems = derived(() => computeServers.map((s) => ({
2733
+ id: s.id,
2734
+ label: s.id === defaultComputeServerId ? `${s.label} (Default)` : s.label
2735
+ })));
2736
+ async function handleImageUpload() {
2737
+ if (!imageInput?.files?.length) return;
2738
+ uploadingImage = true;
2739
+ const formData = new FormData();
2740
+ formData.append("image", imageInput.files[0]);
2741
+ try {
2742
+ const res = await fetch(`/api/definitions/${record.guid}/image`, { method: "POST", body: formData });
2743
+ if (res.ok) {
2744
+ toast.success("Cover image updated");
2745
+ await invalidateAll();
2746
+ } else {
2747
+ const e = await res.json().catch(() => ({}));
2748
+ toast.error(e.message || "Image upload failed");
2749
+ }
2750
+ } catch {
2751
+ toast.error("Image upload failed");
2752
+ } finally {
2753
+ uploadingImage = false;
2754
+ if (imageInput) imageInput.value = "";
2755
+ imageHasFile = false;
2756
+ }
2757
+ }
2758
+ function save() {
2759
+ onSave(record.guid, {
2760
+ displayName,
2761
+ description: description || void 0,
2762
+ category: category || void 0,
2763
+ tags: tags.length ? tags : void 0,
2764
+ coverImage: coverImageUrl || void 0,
2765
+ status,
2766
+ projectId: projectId || void 0,
2767
+ computeServerId
2768
+ });
2769
+ }
2770
+ let $$settled = true;
2771
+ let $$inner_renderer;
2772
+ function $$render_inner($$renderer3) {
2773
+ Drawer($$renderer3, {
2774
+ onClose,
2775
+ ariaLabel: "Close edit drawer",
2776
+ children: ($$renderer4) => {
2777
+ $$renderer4.push(`<div class="border-border flex shrink-0 items-center justify-between border-b px-6 py-4"><div><p class="text-muted-foreground font-mono text-[10.5px] tracking-widest uppercase">Editing</p> <h2 class="mt-0.5 text-base font-semibold">${escape_html(record.displayName)}</h2></div> `);
2778
+ Button($$renderer4, {
2779
+ variant: "ghost",
2780
+ size: "icon",
2781
+ onclick: onClose,
2782
+ class: "h-8 w-8 shrink-0",
2783
+ children: ($$renderer5) => {
2784
+ X($$renderer5, { class: "h-4 w-4" });
2785
+ },
2786
+ $$slots: { default: true }
2787
+ });
2788
+ $$renderer4.push(`<!----></div> `);
2789
+ if (onBack) {
2790
+ $$renderer4.push("<!--[0-->");
2791
+ $$renderer4.push(`<button type="button" class="text-muted-foreground hover:text-foreground mx-6 mt-4 inline-flex items-center gap-1.5 self-start text-xs transition-colors">`);
2792
+ Arrow_left($$renderer4, { class: "h-3 w-3" });
2793
+ $$renderer4.push(`<!----> Back to definition</button>`);
2794
+ } else {
2795
+ $$renderer4.push("<!--[-1-->");
2796
+ }
2797
+ $$renderer4.push(`<!--]--> `);
2798
+ if (Tabs) {
2799
+ $$renderer4.push("<!--[-->");
2800
+ Tabs($$renderer4, {
2801
+ class: "flex flex-1 flex-col overflow-hidden",
2802
+ get value() {
2803
+ return activeTab;
2804
+ },
2805
+ set value($$value) {
2806
+ activeTab = $$value;
2807
+ $$settled = false;
2808
+ },
2809
+ children: ($$renderer5) => {
2810
+ if (Tabs_list) {
2811
+ $$renderer5.push("<!--[-->");
2812
+ Tabs_list($$renderer5, {
2813
+ class: `mx-6 grid w-auto ${enableSharing ? "grid-cols-3" : "grid-cols-2"} ${onBack ? "mt-2" : "mt-4"}`,
2814
+ children: ($$renderer6) => {
2815
+ if (Tabs_trigger) {
2816
+ $$renderer6.push("<!--[-->");
2817
+ Tabs_trigger($$renderer6, {
2818
+ value: "details",
2819
+ children: ($$renderer7) => {
2820
+ $$renderer7.push(`<!---->Details`);
2821
+ },
2822
+ $$slots: { default: true }
2823
+ });
2824
+ $$renderer6.push("<!--]-->");
2825
+ } else {
2826
+ $$renderer6.push("<!--[!-->");
2827
+ $$renderer6.push("<!--]-->");
2828
+ }
2829
+ $$renderer6.push(` `);
2830
+ if (Tabs_trigger) {
2831
+ $$renderer6.push("<!--[-->");
2832
+ Tabs_trigger($$renderer6, {
2833
+ value: "versions",
2834
+ children: ($$renderer7) => {
2835
+ $$renderer7.push(`<!---->Versions`);
2836
+ },
2837
+ $$slots: { default: true }
2838
+ });
2839
+ $$renderer6.push("<!--]-->");
2840
+ } else {
2841
+ $$renderer6.push("<!--[!-->");
2842
+ $$renderer6.push("<!--]-->");
2843
+ }
2844
+ $$renderer6.push(` `);
2845
+ if (enableSharing) {
2846
+ $$renderer6.push("<!--[0-->");
2847
+ if (Tabs_trigger) {
2848
+ $$renderer6.push("<!--[-->");
2849
+ Tabs_trigger($$renderer6, {
2850
+ value: "shares",
2851
+ children: ($$renderer7) => {
2852
+ $$renderer7.push(`<!---->Share links`);
2853
+ },
2854
+ $$slots: { default: true }
2855
+ });
2856
+ $$renderer6.push("<!--]-->");
2857
+ } else {
2858
+ $$renderer6.push("<!--[!-->");
2859
+ $$renderer6.push("<!--]-->");
2860
+ }
2861
+ } else {
2862
+ $$renderer6.push("<!--[-1-->");
2863
+ }
2864
+ $$renderer6.push(`<!--]-->`);
2865
+ },
2866
+ $$slots: { default: true }
2867
+ });
2868
+ $$renderer5.push("<!--]-->");
2869
+ } else {
2870
+ $$renderer5.push("<!--[!-->");
2871
+ $$renderer5.push("<!--]-->");
2872
+ }
2873
+ $$renderer5.push(` `);
2874
+ if (Tabs_content) {
2875
+ $$renderer5.push("<!--[-->");
2876
+ Tabs_content($$renderer5, {
2877
+ value: "versions",
2878
+ class: "mt-4 flex-1 overflow-y-auto px-6 py-5",
2879
+ children: ($$renderer6) => {
2880
+ VersionsSection($$renderer6, { definitionGuid: record.guid, onOpenRunner });
2881
+ },
2882
+ $$slots: { default: true }
2883
+ });
2884
+ $$renderer5.push("<!--]-->");
2885
+ } else {
2886
+ $$renderer5.push("<!--[!-->");
2887
+ $$renderer5.push("<!--]-->");
2888
+ }
2889
+ $$renderer5.push(` `);
2890
+ if (Tabs_content) {
2891
+ $$renderer5.push("<!--[-->");
2892
+ Tabs_content($$renderer5, {
2893
+ value: "details",
2894
+ class: "mt-4 flex-1 space-y-5 overflow-y-auto px-6 py-5",
2895
+ children: ($$renderer6) => {
2896
+ $$renderer6.push(`<div class="space-y-1.5">`);
2897
+ Label($$renderer6, {
2898
+ for: "edit-name",
2899
+ children: ($$renderer7) => {
2900
+ $$renderer7.push(`<!---->Display name`);
2901
+ },
2902
+ $$slots: { default: true }
2903
+ });
2904
+ $$renderer6.push(`<!----> `);
2905
+ Input($$renderer6, {
2906
+ id: "edit-name",
2907
+ get value() {
2908
+ return displayName;
2909
+ },
2910
+ set value($$value) {
2911
+ displayName = $$value;
2912
+ $$settled = false;
2913
+ }
2914
+ });
2915
+ $$renderer6.push(`<!----></div> <div class="space-y-1.5">`);
2916
+ Label($$renderer6, {
2917
+ for: "edit-desc",
2918
+ children: ($$renderer7) => {
2919
+ $$renderer7.push(`<!---->Description`);
2920
+ },
2921
+ $$slots: { default: true }
2922
+ });
2923
+ $$renderer6.push(`<!----> `);
2924
+ Textarea($$renderer6, {
2925
+ id: "edit-desc",
2926
+ rows: 3,
2927
+ get value() {
2928
+ return description;
2929
+ },
2930
+ set value($$value) {
2931
+ description = $$value;
2932
+ $$settled = false;
2933
+ }
2934
+ });
2935
+ $$renderer6.push(`<!----></div> <div class="space-y-1.5">`);
2936
+ Label($$renderer6, {
2937
+ for: "edit-status",
2938
+ children: ($$renderer7) => {
2939
+ $$renderer7.push(`<!---->Status`);
2940
+ },
2941
+ $$slots: { default: true }
2942
+ });
2943
+ $$renderer6.push(`<!----> `);
2944
+ FilterableDropdown($$renderer6, {
2945
+ id: "edit-status",
2946
+ items: statusItems,
2947
+ value: status,
2948
+ onChange: (id) => status = id
2949
+ });
2950
+ $$renderer6.push(`<!----></div> <div class="grid grid-cols-2 gap-3"><div class="space-y-1.5">`);
2951
+ Label($$renderer6, {
2952
+ for: "edit-cat",
2953
+ children: ($$renderer7) => {
2954
+ $$renderer7.push(`<!---->Category`);
2955
+ },
2956
+ $$slots: { default: true }
2957
+ });
2958
+ $$renderer6.push(`<!----> `);
2959
+ Input($$renderer6, {
2960
+ id: "edit-cat",
2961
+ maxlength: 40,
2962
+ placeholder: "e.g. Facade",
2963
+ get value() {
2964
+ return category;
2965
+ },
2966
+ set value($$value) {
2967
+ category = $$value;
2968
+ $$settled = false;
2969
+ }
2970
+ });
2971
+ $$renderer6.push(`<!----></div> <div class="space-y-1.5"><div class="flex items-center justify-between">`);
2972
+ Label($$renderer6, {
2973
+ for: "edit-tags",
2974
+ children: ($$renderer7) => {
2975
+ $$renderer7.push(`<!---->Tags`);
2976
+ },
2977
+ $$slots: { default: true }
2978
+ });
2979
+ $$renderer6.push(`<!----> <span class="text-muted-foreground text-xs">${escape_html(tags.length)}/5</span></div> `);
2980
+ if (tags.length > 0) {
2981
+ $$renderer6.push("<!--[0-->");
2982
+ $$renderer6.push(`<div class="mb-1 flex flex-wrap gap-1"><!--[-->`);
2983
+ const each_array = ensure_array_like(tags);
2984
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
2985
+ let tag = each_array[$$index];
2986
+ Badge($$renderer6, {
2987
+ variant: "outline",
2988
+ class: "gap-1 text-xs",
2989
+ children: ($$renderer7) => {
2990
+ $$renderer7.push(`<!---->${escape_html(tag)} <button class="hover:opacity-70"${attr("aria-label", `Remove tag ${stringify(tag)}`)}>`);
2991
+ X($$renderer7, { class: "h-2.5 w-2.5" });
2992
+ $$renderer7.push(`<!----></button>`);
2993
+ },
2994
+ $$slots: { default: true }
2995
+ });
2996
+ }
2997
+ $$renderer6.push(`<!--]--></div>`);
2998
+ } else {
2999
+ $$renderer6.push("<!--[-1-->");
3000
+ }
3001
+ $$renderer6.push(`<!--]--> `);
3002
+ Input($$renderer6, {
3003
+ id: "edit-tags",
3004
+ placeholder: "Add tag + Enter",
3005
+ disabled: tags.length >= 5,
3006
+ onkeydown: (e) => {
3007
+ if (e.key === "Enter") {
3008
+ e.preventDefault();
3009
+ const el = e.currentTarget;
3010
+ const tag = el.value.trim();
3011
+ if (tag && !tags.includes(tag) && tags.length < 5) {
3012
+ tags = [...tags, tag];
3013
+ el.value = "";
3014
+ }
3015
+ }
3016
+ }
3017
+ });
3018
+ $$renderer6.push(`<!----></div></div> `);
3019
+ Separator($$renderer6, {});
3020
+ $$renderer6.push(`<!----> <div class="space-y-2"><div class="flex items-center gap-2">`);
3021
+ Image($$renderer6, { class: "text-muted-foreground h-4 w-4" });
3022
+ $$renderer6.push(`<!----> `);
3023
+ Label($$renderer6, {
3024
+ children: ($$renderer7) => {
3025
+ $$renderer7.push(`<!---->Cover image`);
3026
+ },
3027
+ $$slots: { default: true }
3028
+ });
3029
+ $$renderer6.push(`<!----></div> `);
3030
+ ImageUploadField($$renderer6, {
3031
+ mode: imageMode(),
3032
+ value: record.coverImage ?? "",
3033
+ isUploading: uploadingImage,
3034
+ hasFile: imageHasFile,
3035
+ onModeChange: (m) => userImageMode = m,
3036
+ onUpload: handleImageUpload,
3037
+ onFileSelected: () => imageHasFile = !!imageInput?.files?.length,
3038
+ onUrlChange: (url) => coverImageUrl = url,
3039
+ get inputRef() {
3040
+ return imageInput;
3041
+ },
3042
+ set inputRef($$value) {
3043
+ imageInput = $$value;
3044
+ $$settled = false;
3045
+ }
3046
+ });
3047
+ $$renderer6.push(`<!----></div> `);
3048
+ if (projects.length > 1 || computeServers.length > 0) {
3049
+ $$renderer6.push("<!--[0-->");
3050
+ $$renderer6.push(`<div class="grid grid-cols-2 gap-3">`);
3051
+ if (projects.length > 1) {
3052
+ $$renderer6.push("<!--[0-->");
3053
+ $$renderer6.push(`<div class="space-y-1.5">`);
3054
+ Label($$renderer6, {
3055
+ for: "edit-proj",
3056
+ children: ($$renderer7) => {
3057
+ $$renderer7.push(`<!---->Project`);
3058
+ },
3059
+ $$slots: { default: true }
3060
+ });
3061
+ $$renderer6.push(`<!----> `);
3062
+ ProjectPicker($$renderer6, {
3063
+ id: "edit-proj",
3064
+ projects,
3065
+ value: projectId,
3066
+ onChange: handleProjectChange
3067
+ });
3068
+ $$renderer6.push(`<!----></div>`);
3069
+ } else {
3070
+ $$renderer6.push("<!--[-1-->");
3071
+ }
3072
+ $$renderer6.push(`<!--]--> `);
3073
+ if (computeServers.length > 0) {
3074
+ $$renderer6.push("<!--[0-->");
3075
+ $$renderer6.push(`<div class="space-y-1.5">`);
3076
+ Label($$renderer6, {
3077
+ for: "edit-srv",
3078
+ children: ($$renderer7) => {
3079
+ $$renderer7.push(`<!---->Compute server`);
3080
+ },
3081
+ $$slots: { default: true }
3082
+ });
3083
+ $$renderer6.push(`<!----> `);
3084
+ FilterableDropdown($$renderer6, {
3085
+ id: "edit-srv",
3086
+ items: computeServerItems(),
3087
+ value: computeServerId ?? defaultComputeServerId ?? "",
3088
+ onChange: (picked) => {
3089
+ computeServerId = picked === defaultComputeServerId ? null : picked;
3090
+ }
3091
+ });
3092
+ $$renderer6.push(`<!----></div>`);
3093
+ } else {
3094
+ $$renderer6.push("<!--[-1-->");
3095
+ }
3096
+ $$renderer6.push(`<!--]--></div>`);
3097
+ } else {
3098
+ $$renderer6.push("<!--[-1-->");
3099
+ }
3100
+ $$renderer6.push(`<!--]-->`);
3101
+ },
3102
+ $$slots: { default: true }
3103
+ });
3104
+ $$renderer5.push("<!--]-->");
3105
+ } else {
3106
+ $$renderer5.push("<!--[!-->");
3107
+ $$renderer5.push("<!--]-->");
3108
+ }
3109
+ $$renderer5.push(` `);
3110
+ if (enableSharing) {
3111
+ $$renderer5.push("<!--[0-->");
3112
+ if (Tabs_content) {
3113
+ $$renderer5.push("<!--[-->");
3114
+ Tabs_content($$renderer5, {
3115
+ value: "shares",
3116
+ class: "mt-4 flex-1 overflow-y-auto px-6 py-5",
3117
+ children: ($$renderer6) => {
3118
+ ShareLinkSection($$renderer6, { definitionGuid: record.guid });
3119
+ },
3120
+ $$slots: { default: true }
3121
+ });
3122
+ $$renderer5.push("<!--]-->");
3123
+ } else {
3124
+ $$renderer5.push("<!--[!-->");
3125
+ $$renderer5.push("<!--]-->");
3126
+ }
3127
+ } else {
3128
+ $$renderer5.push("<!--[-1-->");
3129
+ }
3130
+ $$renderer5.push(`<!--]-->`);
3131
+ },
3132
+ $$slots: { default: true }
3133
+ });
3134
+ $$renderer4.push("<!--]-->");
3135
+ } else {
3136
+ $$renderer4.push("<!--[!-->");
3137
+ $$renderer4.push("<!--]-->");
3138
+ }
3139
+ $$renderer4.push(` <div class="border-border flex shrink-0 items-center justify-between border-t px-6 py-4">`);
3140
+ Button($$renderer4, {
3141
+ variant: "ghost",
3142
+ size: "sm",
3143
+ onclick: () => showDeleteConfirm = true,
3144
+ class: "text-destructive hover:text-destructive gap-1.5 px-2",
3145
+ children: ($$renderer5) => {
3146
+ Trash_2($$renderer5, { class: "h-3.5 w-3.5" });
3147
+ $$renderer5.push(`<!----> Delete`);
3148
+ },
3149
+ $$slots: { default: true }
3150
+ });
3151
+ $$renderer4.push(`<!----> <div class="flex gap-2">`);
3152
+ Button($$renderer4, {
3153
+ variant: "outline",
3154
+ size: "sm",
3155
+ onclick: onClose,
3156
+ children: ($$renderer5) => {
3157
+ $$renderer5.push(`<!---->Cancel`);
3158
+ },
3159
+ $$slots: { default: true }
3160
+ });
3161
+ $$renderer4.push(`<!----> `);
3162
+ if (activeTab === "details") {
3163
+ $$renderer4.push("<!--[0-->");
3164
+ Button($$renderer4, {
3165
+ size: "sm",
3166
+ disabled: isSaving,
3167
+ onclick: save,
3168
+ children: ($$renderer5) => {
3169
+ $$renderer5.push(`<!---->${escape_html(isSaving ? "Saving…" : "Save")}`);
3170
+ },
3171
+ $$slots: { default: true }
3172
+ });
3173
+ } else {
3174
+ $$renderer4.push("<!--[-1-->");
3175
+ }
3176
+ $$renderer4.push(`<!--]--></div></div>`);
3177
+ }
3178
+ });
3179
+ $$renderer3.push(`<!----> `);
3180
+ if (Root) {
3181
+ $$renderer3.push("<!--[-->");
3182
+ Root($$renderer3, {
3183
+ open: showDeleteConfirm,
3184
+ onOpenChange: (o) => showDeleteConfirm = o,
3185
+ children: ($$renderer4) => {
3186
+ if (Alert_dialog_content) {
3187
+ $$renderer4.push("<!--[-->");
3188
+ Alert_dialog_content($$renderer4, {
3189
+ children: ($$renderer5) => {
3190
+ if (Alert_dialog_header) {
3191
+ $$renderer5.push("<!--[-->");
3192
+ Alert_dialog_header($$renderer5, {
3193
+ children: ($$renderer6) => {
3194
+ if (Alert_dialog_title) {
3195
+ $$renderer6.push("<!--[-->");
3196
+ Alert_dialog_title($$renderer6, {
3197
+ children: ($$renderer7) => {
3198
+ $$renderer7.push(`<!---->Delete "${escape_html(record.displayName)}"?`);
3199
+ },
3200
+ $$slots: { default: true }
3201
+ });
3202
+ $$renderer6.push("<!--]-->");
3203
+ } else {
3204
+ $$renderer6.push("<!--[!-->");
3205
+ $$renderer6.push("<!--]-->");
3206
+ }
3207
+ $$renderer6.push(` `);
3208
+ if (Alert_dialog_description) {
3209
+ $$renderer6.push("<!--[-->");
3210
+ Alert_dialog_description($$renderer6, {
3211
+ children: ($$renderer7) => {
3212
+ $$renderer7.push(`<!---->This removes the definition and all its files. This cannot be undone.`);
3213
+ },
3214
+ $$slots: { default: true }
3215
+ });
3216
+ $$renderer6.push("<!--]-->");
3217
+ } else {
3218
+ $$renderer6.push("<!--[!-->");
3219
+ $$renderer6.push("<!--]-->");
3220
+ }
3221
+ },
3222
+ $$slots: { default: true }
3223
+ });
3224
+ $$renderer5.push("<!--]-->");
3225
+ } else {
3226
+ $$renderer5.push("<!--[!-->");
3227
+ $$renderer5.push("<!--]-->");
3228
+ }
3229
+ $$renderer5.push(` `);
3230
+ if (Alert_dialog_footer) {
3231
+ $$renderer5.push("<!--[-->");
3232
+ Alert_dialog_footer($$renderer5, {
3233
+ children: ($$renderer6) => {
3234
+ if (Alert_dialog_cancel) {
3235
+ $$renderer6.push("<!--[-->");
3236
+ Alert_dialog_cancel($$renderer6, {
3237
+ children: ($$renderer7) => {
3238
+ $$renderer7.push(`<!---->Cancel`);
3239
+ },
3240
+ $$slots: { default: true }
3241
+ });
3242
+ $$renderer6.push("<!--]-->");
3243
+ } else {
3244
+ $$renderer6.push("<!--[!-->");
3245
+ $$renderer6.push("<!--]-->");
3246
+ }
3247
+ $$renderer6.push(` `);
3248
+ if (Alert_dialog_action) {
3249
+ $$renderer6.push("<!--[-->");
3250
+ Alert_dialog_action($$renderer6, {
3251
+ onclick: () => onDelete(record.guid),
3252
+ children: ($$renderer7) => {
3253
+ $$renderer7.push(`<!---->Delete`);
3254
+ },
3255
+ $$slots: { default: true }
3256
+ });
3257
+ $$renderer6.push("<!--]-->");
3258
+ } else {
3259
+ $$renderer6.push("<!--[!-->");
3260
+ $$renderer6.push("<!--]-->");
3261
+ }
3262
+ },
3263
+ $$slots: { default: true }
3264
+ });
3265
+ $$renderer5.push("<!--]-->");
3266
+ } else {
3267
+ $$renderer5.push("<!--[!-->");
3268
+ $$renderer5.push("<!--]-->");
3269
+ }
3270
+ },
3271
+ $$slots: { default: true }
3272
+ });
3273
+ $$renderer4.push("<!--]-->");
3274
+ } else {
3275
+ $$renderer4.push("<!--[!-->");
3276
+ $$renderer4.push("<!--]-->");
3277
+ }
3278
+ },
3279
+ $$slots: { default: true }
3280
+ });
3281
+ $$renderer3.push("<!--]-->");
3282
+ } else {
3283
+ $$renderer3.push("<!--[!-->");
3284
+ $$renderer3.push("<!--]-->");
3285
+ }
3286
+ $$renderer3.push(` `);
3287
+ if (Root) {
3288
+ $$renderer3.push("<!--[-->");
3289
+ Root($$renderer3, {
3290
+ open: pendingProjectId !== null,
3291
+ onOpenChange: (o) => {
3292
+ if (!o) cancelProjectChange();
3293
+ },
3294
+ children: ($$renderer4) => {
3295
+ if (Alert_dialog_content) {
3296
+ $$renderer4.push("<!--[-->");
3297
+ Alert_dialog_content($$renderer4, {
3298
+ children: ($$renderer5) => {
3299
+ if (Alert_dialog_header) {
3300
+ $$renderer5.push("<!--[-->");
3301
+ Alert_dialog_header($$renderer5, {
3302
+ children: ($$renderer6) => {
3303
+ if (Alert_dialog_title) {
3304
+ $$renderer6.push("<!--[-->");
3305
+ Alert_dialog_title($$renderer6, {
3306
+ children: ($$renderer7) => {
3307
+ $$renderer7.push(`<!---->Move to a different project?`);
3308
+ },
3309
+ $$slots: { default: true }
3310
+ });
3311
+ $$renderer6.push("<!--]-->");
3312
+ } else {
3313
+ $$renderer6.push("<!--[!-->");
3314
+ $$renderer6.push("<!--]-->");
3315
+ }
3316
+ $$renderer6.push(` `);
3317
+ if (Alert_dialog_description) {
3318
+ $$renderer6.push("<!--[-->");
3319
+ Alert_dialog_description($$renderer6, {
3320
+ children: ($$renderer7) => {
3321
+ $$renderer7.push(`<strong>${escape_html(record.displayName)}</strong> will move from <strong>${escape_html(currentProject()?.name ?? "—")}</strong> to <strong>${escape_html(pendingProject()?.name ?? "—")}</strong>. Project members and visibility may change
3322
+ accordingly.${escape_html(enableSharing ? " Existing share links keep working." : "")}`);
3323
+ },
3324
+ $$slots: { default: true }
3325
+ });
3326
+ $$renderer6.push("<!--]-->");
3327
+ } else {
3328
+ $$renderer6.push("<!--[!-->");
3329
+ $$renderer6.push("<!--]-->");
3330
+ }
3331
+ },
3332
+ $$slots: { default: true }
3333
+ });
3334
+ $$renderer5.push("<!--]-->");
3335
+ } else {
3336
+ $$renderer5.push("<!--[!-->");
3337
+ $$renderer5.push("<!--]-->");
3338
+ }
3339
+ $$renderer5.push(` `);
3340
+ if (Alert_dialog_footer) {
3341
+ $$renderer5.push("<!--[-->");
3342
+ Alert_dialog_footer($$renderer5, {
3343
+ children: ($$renderer6) => {
3344
+ if (Alert_dialog_cancel) {
3345
+ $$renderer6.push("<!--[-->");
3346
+ Alert_dialog_cancel($$renderer6, {
3347
+ onclick: cancelProjectChange,
3348
+ children: ($$renderer7) => {
3349
+ $$renderer7.push(`<!---->Cancel`);
3350
+ },
3351
+ $$slots: { default: true }
3352
+ });
3353
+ $$renderer6.push("<!--]-->");
3354
+ } else {
3355
+ $$renderer6.push("<!--[!-->");
3356
+ $$renderer6.push("<!--]-->");
3357
+ }
3358
+ $$renderer6.push(` `);
3359
+ if (Alert_dialog_action) {
3360
+ $$renderer6.push("<!--[-->");
3361
+ Alert_dialog_action($$renderer6, {
3362
+ onclick: confirmProjectChange,
3363
+ children: ($$renderer7) => {
3364
+ $$renderer7.push(`<!---->Move`);
3365
+ },
3366
+ $$slots: { default: true }
3367
+ });
3368
+ $$renderer6.push("<!--]-->");
3369
+ } else {
3370
+ $$renderer6.push("<!--[!-->");
3371
+ $$renderer6.push("<!--]-->");
3372
+ }
3373
+ },
3374
+ $$slots: { default: true }
3375
+ });
3376
+ $$renderer5.push("<!--]-->");
3377
+ } else {
3378
+ $$renderer5.push("<!--[!-->");
3379
+ $$renderer5.push("<!--]-->");
3380
+ }
3381
+ },
3382
+ $$slots: { default: true }
3383
+ });
3384
+ $$renderer4.push("<!--]-->");
3385
+ } else {
3386
+ $$renderer4.push("<!--[!-->");
3387
+ $$renderer4.push("<!--]-->");
3388
+ }
3389
+ },
3390
+ $$slots: { default: true }
3391
+ });
3392
+ $$renderer3.push("<!--]-->");
3393
+ } else {
3394
+ $$renderer3.push("<!--[!-->");
3395
+ $$renderer3.push("<!--]-->");
3396
+ }
3397
+ }
3398
+ do {
3399
+ $$settled = true;
3400
+ $$inner_renderer = $$renderer2.copy();
3401
+ $$render_inner($$inner_renderer);
3402
+ } while (!$$settled);
3403
+ $$renderer2.subsume($$inner_renderer);
3404
+ });
3405
+ }
3406
+ function _page($$renderer, $$props) {
3407
+ $$renderer.component(($$renderer2) => {
3408
+ var $$store_subs;
3409
+ let { data } = $$props;
3410
+ const enableSharing = derived(() => !!store_get($$store_subs ??= {}, "$page", page).data.flags?.enableSharing);
3411
+ let searchQuery = "";
3412
+ let activeProjectId = null;
3413
+ let viewMode = "grid";
3414
+ let drawerRecord = null;
3415
+ let editingDefinitionId = null;
3416
+ let editingProjectId = null;
3417
+ let deletingProjectId = null;
3418
+ let showAddModal = false;
3419
+ let editCameFromDetail = false;
3420
+ let editInitialTab = "versions";
3421
+ let addingDefinition = false;
3422
+ let savingDefinitionId = null;
3423
+ const filtered = derived(() => {
3424
+ let records = data.records;
3425
+ if (activeProjectId) records = records.filter((r) => r.projectId === activeProjectId);
3426
+ if (searchQuery.trim()) {
3427
+ const q = searchQuery.toLowerCase();
3428
+ records = records.filter((r) => r.displayName?.toLowerCase().includes(q) || r.description?.toLowerCase().includes(q) || r.tags?.some((t) => t.toLowerCase().includes(q)));
3429
+ }
3430
+ return records;
3431
+ });
3432
+ const editingRecord = derived(() => editingDefinitionId ? data.records.find((r) => r.guid === editingDefinitionId) ?? null : null);
3433
+ const activeProject = derived(() => activeProjectId ? data.projects.find((p) => p.id === activeProjectId) ?? null : null);
3434
+ const canAddDefinition = derived(() => activeProject() ? activeProject().canEdit : data.projects.some((p) => p.canEdit));
3435
+ const editableProjects = derived(() => data.projects.filter((p) => p.canEdit));
3436
+ const editingProject = derived(() => editingProjectId ? data.projects.find((p) => p.id === editingProjectId) ?? null : null);
3437
+ const deletingProject = derived(() => deletingProjectId ? data.projects.find((p) => p.id === deletingProjectId) ?? null : null);
3438
+ function projectName(id) {
3439
+ return data.projects.find((p) => p.id === id)?.name ?? "";
3440
+ }
3441
+ function projectVisibility(id) {
3442
+ return data.projects.find((p) => p.id === id)?.visibility;
3443
+ }
3444
+ function recordCanEdit(record) {
3445
+ return data.projects.find((p) => p.id === record.projectId)?.canEdit ?? false;
3446
+ }
3447
+ async function errorMessage(res, fallback) {
3448
+ if (res.headers.get("content-type")?.includes("application/json")) {
3449
+ const e = await res.json().catch(() => null);
3450
+ return e?.message || e?.error?.message || `${fallback} (${res.status})`;
3451
+ }
3452
+ return `${fallback} (${res.status})`;
3453
+ }
3454
+ async function saveDefinition(guid, patch) {
3455
+ savingDefinitionId = guid;
3456
+ try {
3457
+ const res = await fetch(`/api/definitions/${guid}`, {
3458
+ method: "PUT",
3459
+ headers: { "Content-Type": "application/json" },
3460
+ body: JSON.stringify(patch)
3461
+ });
3462
+ if (res.ok) {
3463
+ toast.success("Definition saved");
3464
+ editingDefinitionId = null;
3465
+ drawerRecord = null;
3466
+ await invalidateAll();
3467
+ } else {
3468
+ toast.error(await errorMessage(res, "Save failed"));
3469
+ }
3470
+ } catch (e) {
3471
+ toast.error("Save failed: " + (e instanceof Error ? e.message : "Unknown error"));
3472
+ } finally {
3473
+ savingDefinitionId = null;
3474
+ }
3475
+ }
3476
+ async function deleteDefinition(guid) {
3477
+ const rec = data.records.find((r) => r.guid === guid);
3478
+ try {
3479
+ const res = await fetch(`/api/definitions/${guid}`, { method: "DELETE" });
3480
+ if (res.ok) {
3481
+ toast.success(`"${rec?.displayName ?? "Definition"}" deleted`);
3482
+ editingDefinitionId = null;
3483
+ await invalidateAll();
3484
+ } else {
3485
+ toast.error(await errorMessage(res, "Delete failed"));
3486
+ }
3487
+ } catch {
3488
+ toast.error("Delete failed");
3489
+ }
3490
+ }
3491
+ async function saveProject(id, patch) {
3492
+ const res = await fetch(`/api/projects/${id}`, {
3493
+ method: "PATCH",
3494
+ headers: { "Content-Type": "application/json" },
3495
+ body: JSON.stringify(patch)
3496
+ });
3497
+ if (res.ok) {
3498
+ toast.success("Project saved");
3499
+ editingProjectId = null;
3500
+ await invalidateAll();
3501
+ } else {
3502
+ toast.error(await errorMessage(res, "Failed to save project"));
3503
+ }
3504
+ }
3505
+ async function deleteProject(id) {
3506
+ const res = await fetch(`/api/projects/${id}`, { method: "DELETE" });
3507
+ if (res.ok) {
3508
+ toast.success("Project deleted");
3509
+ if (activeProjectId === id) {
3510
+ activeProjectId = data.projects.find((p) => p.id !== id)?.id ?? null;
3511
+ }
3512
+ deletingProjectId = null;
3513
+ editingProjectId = null;
3514
+ await invalidateAll();
3515
+ } else {
3516
+ toast.error(await errorMessage(res, "Failed to delete project"));
3517
+ }
3518
+ }
3519
+ async function updateMemberRole(projectId, userId, role) {
3520
+ const res = await fetch(`/api/projects/${projectId}/members/${userId}`, {
3521
+ method: "PATCH",
3522
+ headers: { "Content-Type": "application/json" },
3523
+ body: JSON.stringify({ role })
3524
+ });
3525
+ if (res.ok) await invalidateAll();
3526
+ else toast.error("Failed to update role");
3527
+ }
3528
+ async function removeMember(projectId, userId) {
3529
+ const res = await fetch(`/api/projects/${projectId}/members/${userId}`, { method: "DELETE" });
3530
+ if (res.ok) await invalidateAll();
3531
+ else toast.error("Failed to remove member");
3532
+ }
3533
+ let $$settled = true;
3534
+ let $$inner_renderer;
3535
+ function $$render_inner($$renderer3) {
3536
+ head("rqn88j", $$renderer3, ($$renderer4) => {
3537
+ $$renderer4.title(($$renderer5) => {
3538
+ $$renderer5.push(`<title>Projects</title>`);
3539
+ });
3540
+ });
3541
+ $$renderer3.push(`<div class="flex h-full overflow-hidden">`);
3542
+ ProjectSidebar($$renderer3, {
3543
+ projects: data.projects,
3544
+ records: data.records,
3545
+ activeProjectId,
3546
+ canManageProjects: data.canManageProjects
3547
+ });
3548
+ $$renderer3.push(`<!----> <div class="flex flex-1 flex-col overflow-hidden"><div class="border-border bg-background shrink-0 border-b px-(--page-px) py-5">`);
3549
+ {
3550
+ let actions = function($$renderer4) {
3551
+ if (data.canManageProjects && activeProject()) {
3552
+ $$renderer4.push("<!--[0-->");
3553
+ Button($$renderer4, {
3554
+ variant: "outline",
3555
+ size: "sm",
3556
+ onclick: () => editingProjectId = activeProject().id,
3557
+ children: ($$renderer5) => {
3558
+ Settings($$renderer5, { class: "mr-1.5 h-3.5 w-3.5" });
3559
+ $$renderer5.push(`<!----> Project settings`);
3560
+ },
3561
+ $$slots: { default: true }
3562
+ });
3563
+ } else {
3564
+ $$renderer4.push("<!--[-1-->");
3565
+ }
3566
+ $$renderer4.push(`<!--]--> `);
3567
+ if (canAddDefinition()) {
3568
+ $$renderer4.push("<!--[0-->");
3569
+ Button($$renderer4, {
3570
+ size: "sm",
3571
+ onclick: () => showAddModal = true,
3572
+ children: ($$renderer5) => {
3573
+ Plus($$renderer5, { class: "mr-1.5 h-3.5 w-3.5" });
3574
+ $$renderer5.push(`<!----> Add definition`);
3575
+ },
3576
+ $$slots: { default: true }
3577
+ });
3578
+ } else {
3579
+ $$renderer4.push("<!--[-1-->");
3580
+ }
3581
+ $$renderer4.push(`<!--]-->`);
3582
+ };
3583
+ SectionHeader($$renderer3, {
3584
+ class: "mb-0",
3585
+ eyebrow: activeProject() ? activeProject().name : "All projects",
3586
+ title: "Definitions",
3587
+ description: activeProject()?.description ?? (!activeProject() ? "Definitions across every project in this organization." : void 0),
3588
+ actions
3589
+ });
3590
+ }
3591
+ $$renderer3.push(`<!----></div> <div class="flex-1 overflow-y-auto px-(--page-px) py-5"><div class="mb-5 flex items-center gap-3"><div class="max-w-lg flex-1">`);
3592
+ Search($$renderer3, {
3593
+ placeholder: "Search by name, description, tags…",
3594
+ clearable: true,
3595
+ get value() {
3596
+ return searchQuery;
3597
+ },
3598
+ set value($$value) {
3599
+ searchQuery = $$value;
3600
+ $$settled = false;
3601
+ }
3602
+ });
3603
+ $$renderer3.push(`<!----></div> <span class="text-muted-foreground font-mono text-xs tabular-nums">${escape_html(filtered().length)} definition${escape_html(filtered().length === 1 ? "" : "s")}</span> <div class="ml-auto">`);
3604
+ ViewToggle($$renderer3, { mode: viewMode, size: "sm", onChange: (m) => viewMode = m });
3605
+ $$renderer3.push(`<!----></div></div> `);
3606
+ if (filtered().length === 0) {
3607
+ $$renderer3.push("<!--[0-->");
3608
+ EmptyState($$renderer3, {
3609
+ size: "lg",
3610
+ title: "No definitions found",
3611
+ description: searchQuery ? "Try adjusting your search" : "Add your first definition to get started"
3612
+ });
3613
+ } else if (viewMode === "grid") {
3614
+ $$renderer3.push("<!--[1-->");
3615
+ $$renderer3.push(`<div class="grid gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4"><!--[-->`);
3616
+ const each_array = ensure_array_like(filtered());
3617
+ for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
3618
+ let record = each_array[$$index];
3619
+ DefinitionCard($$renderer3, {
3620
+ record,
3621
+ showStatus: true,
3622
+ onOpen: (r) => drawerRecord = r,
3623
+ projectName: activeProjectId === null ? projectName(record.projectId) : void 0,
3624
+ projectVisibility: activeProjectId === null ? projectVisibility(record.projectId) : void 0
3625
+ });
3626
+ }
3627
+ $$renderer3.push(`<!--]--></div>`);
3628
+ } else {
3629
+ $$renderer3.push("<!--[-1-->");
3630
+ DefinitionListView($$renderer3, {
3631
+ records: filtered(),
3632
+ projects: data.projects
3633
+ });
3634
+ }
3635
+ $$renderer3.push(`<!--]--></div></div></div> `);
3636
+ if (drawerRecord) {
3637
+ $$renderer3.push("<!--[0-->");
3638
+ DefinitionDetailDrawer($$renderer3, {
3639
+ record: drawerRecord,
3640
+ projectName: projectName(drawerRecord.projectId),
3641
+ canEdit: recordCanEdit(drawerRecord),
3642
+ showShare: enableSharing(),
3643
+ onClose: () => drawerRecord = null,
3644
+ onEdit: (r) => {
3645
+ editInitialTab = "details";
3646
+ editingDefinitionId = r.guid;
3647
+ editCameFromDetail = true;
3648
+ drawerRecord = null;
3649
+ },
3650
+ onShare: (r) => {
3651
+ editInitialTab = "shares";
3652
+ editingDefinitionId = r.guid;
3653
+ editCameFromDetail = true;
3654
+ drawerRecord = null;
3655
+ },
3656
+ onOpenRunner: (guid, channel) => goto()
3657
+ });
3658
+ } else {
3659
+ $$renderer3.push("<!--[-1-->");
3660
+ }
3661
+ $$renderer3.push(`<!--]--> `);
3662
+ if (editingRecord()) {
3663
+ $$renderer3.push("<!--[0-->");
3664
+ $$renderer3.push(`<!---->`);
3665
+ {
3666
+ DefinitionEditDrawer($$renderer3, {
3667
+ record: editingRecord(),
3668
+ projects: data.projects,
3669
+ computeServers: data.computeServers,
3670
+ defaultComputeServerId: data.defaultComputeServerId,
3671
+ isSaving: savingDefinitionId === editingRecord().guid,
3672
+ initialTab: editInitialTab,
3673
+ enableSharing: enableSharing(),
3674
+ onClose: () => {
3675
+ editingDefinitionId = null;
3676
+ editCameFromDetail = false;
3677
+ editInitialTab = "versions";
3678
+ },
3679
+ onBack: editCameFromDetail ? () => {
3680
+ drawerRecord = editingRecord();
3681
+ editingDefinitionId = null;
3682
+ editCameFromDetail = false;
3683
+ } : void 0,
3684
+ onSave: saveDefinition,
3685
+ onDelete: deleteDefinition,
3686
+ onOpenRunner: (guid, channel) => goto()
3687
+ });
3688
+ }
3689
+ $$renderer3.push(`<!---->`);
3690
+ } else {
3691
+ $$renderer3.push("<!--[-1-->");
3692
+ }
3693
+ $$renderer3.push(`<!--]--> `);
3694
+ if (editingProject() && data.canManageProjects) {
3695
+ $$renderer3.push("<!--[0-->");
3696
+ ProjectSettingsDialog($$renderer3, {
3697
+ project: editingProject(),
3698
+ users: data.users,
3699
+ open: editingProjectId !== null,
3700
+ onOpenChange: (o) => {
3701
+ if (!o) editingProjectId = null;
3702
+ },
3703
+ onSave: saveProject,
3704
+ onDelete: (id) => {
3705
+ editingProjectId = null;
3706
+ deletingProjectId = id;
3707
+ },
3708
+ onUpdateMemberRole: updateMemberRole,
3709
+ onRemoveMember: removeMember
3710
+ });
3711
+ } else {
3712
+ $$renderer3.push("<!--[-1-->");
3713
+ }
3714
+ $$renderer3.push(`<!--]--> `);
3715
+ if (Root) {
3716
+ $$renderer3.push("<!--[-->");
3717
+ Root($$renderer3, {
3718
+ open: deletingProjectId !== null,
3719
+ onOpenChange: (o) => {
3720
+ if (!o) deletingProjectId = null;
3721
+ },
3722
+ children: ($$renderer4) => {
3723
+ if (Alert_dialog_content) {
3724
+ $$renderer4.push("<!--[-->");
3725
+ Alert_dialog_content($$renderer4, {
3726
+ children: ($$renderer5) => {
3727
+ if (Alert_dialog_header) {
3728
+ $$renderer5.push("<!--[-->");
3729
+ Alert_dialog_header($$renderer5, {
3730
+ children: ($$renderer6) => {
3731
+ if (Alert_dialog_title) {
3732
+ $$renderer6.push("<!--[-->");
3733
+ Alert_dialog_title($$renderer6, {
3734
+ children: ($$renderer7) => {
3735
+ $$renderer7.push(`<!---->Delete "${escape_html(deletingProject()?.name ?? "")}"?`);
3736
+ },
3737
+ $$slots: { default: true }
3738
+ });
3739
+ $$renderer6.push("<!--]-->");
3740
+ } else {
3741
+ $$renderer6.push("<!--[!-->");
3742
+ $$renderer6.push("<!--]-->");
3743
+ }
3744
+ $$renderer6.push(` `);
3745
+ if (Alert_dialog_description) {
3746
+ $$renderer6.push("<!--[-->");
3747
+ Alert_dialog_description($$renderer6, {
3748
+ children: ($$renderer7) => {
3749
+ $$renderer7.push(`<!---->This will remove the project and all member assignments. Definitions will become unassigned.`);
3750
+ },
3751
+ $$slots: { default: true }
3752
+ });
3753
+ $$renderer6.push("<!--]-->");
3754
+ } else {
3755
+ $$renderer6.push("<!--[!-->");
3756
+ $$renderer6.push("<!--]-->");
3757
+ }
3758
+ },
3759
+ $$slots: { default: true }
3760
+ });
3761
+ $$renderer5.push("<!--]-->");
3762
+ } else {
3763
+ $$renderer5.push("<!--[!-->");
3764
+ $$renderer5.push("<!--]-->");
3765
+ }
3766
+ $$renderer5.push(` `);
3767
+ if (Alert_dialog_footer) {
3768
+ $$renderer5.push("<!--[-->");
3769
+ Alert_dialog_footer($$renderer5, {
3770
+ children: ($$renderer6) => {
3771
+ if (Alert_dialog_cancel) {
3772
+ $$renderer6.push("<!--[-->");
3773
+ Alert_dialog_cancel($$renderer6, {
3774
+ children: ($$renderer7) => {
3775
+ $$renderer7.push(`<!---->Cancel`);
3776
+ },
3777
+ $$slots: { default: true }
3778
+ });
3779
+ $$renderer6.push("<!--]-->");
3780
+ } else {
3781
+ $$renderer6.push("<!--[!-->");
3782
+ $$renderer6.push("<!--]-->");
3783
+ }
3784
+ $$renderer6.push(` `);
3785
+ if (Alert_dialog_action) {
3786
+ $$renderer6.push("<!--[-->");
3787
+ Alert_dialog_action($$renderer6, {
3788
+ onclick: () => deletingProjectId && deleteProject(deletingProjectId),
3789
+ children: ($$renderer7) => {
3790
+ $$renderer7.push(`<!---->Delete`);
3791
+ },
3792
+ $$slots: { default: true }
3793
+ });
3794
+ $$renderer6.push("<!--]-->");
3795
+ } else {
3796
+ $$renderer6.push("<!--[!-->");
3797
+ $$renderer6.push("<!--]-->");
3798
+ }
3799
+ },
3800
+ $$slots: { default: true }
3801
+ });
3802
+ $$renderer5.push("<!--]-->");
3803
+ } else {
3804
+ $$renderer5.push("<!--[!-->");
3805
+ $$renderer5.push("<!--]-->");
3806
+ }
3807
+ },
3808
+ $$slots: { default: true }
3809
+ });
3810
+ $$renderer4.push("<!--]-->");
3811
+ } else {
3812
+ $$renderer4.push("<!--[!-->");
3813
+ $$renderer4.push("<!--]-->");
3814
+ }
3815
+ },
3816
+ $$slots: { default: true }
3817
+ });
3818
+ $$renderer3.push("<!--]-->");
3819
+ } else {
3820
+ $$renderer3.push("<!--[!-->");
3821
+ $$renderer3.push("<!--]-->");
3822
+ }
3823
+ $$renderer3.push(` `);
3824
+ AddDefinitionDialog($$renderer3, {
3825
+ open: showAddModal,
3826
+ isAdding: addingDefinition,
3827
+ projects: editableProjects(),
3828
+ defaultProjectId: activeProject()?.canEdit ? activeProjectId : editableProjects()[0]?.id,
3829
+ computeServers: data.computeServers,
3830
+ defaultComputeServerId: data.defaultComputeServerId,
3831
+ showProjectDropdown: editableProjects().length > 1,
3832
+ onOpenChange: (o) => showAddModal = o
3833
+ });
3834
+ $$renderer3.push(`<!---->`);
3835
+ }
3836
+ do {
3837
+ $$settled = true;
3838
+ $$inner_renderer = $$renderer2.copy();
3839
+ $$render_inner($$inner_renderer);
3840
+ } while (!$$settled);
3841
+ $$renderer2.subsume($$inner_renderer);
3842
+ if ($$store_subs) unsubscribe_stores($$store_subs);
3843
+ });
3844
+ }
3845
+
3846
+ export { _page as default };
3847
+ //# sourceMappingURL=_page.svelte-DfCFSzaO.js.map