unspaghettit 0.2.0 → 0.4.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 (772) hide show
  1. package/README.md +56 -18
  2. package/build/client/_app/immutable/assets/0.DCOD5ne_.css +1 -0
  3. package/build/client/_app/immutable/assets/0.DCOD5ne_.css.br +0 -0
  4. package/build/client/_app/immutable/assets/0.DCOD5ne_.css.gz +0 -0
  5. package/build/client/_app/immutable/assets/12.nv0I59TU.css.gz +0 -0
  6. package/build/client/_app/immutable/assets/3.B3akUL9A.css.gz +0 -0
  7. package/build/client/_app/immutable/assets/BehaviorGraph.Bk0xQRZk.css +1 -0
  8. package/build/client/_app/immutable/assets/BehaviorGraph.Bk0xQRZk.css.br +0 -0
  9. package/build/client/_app/immutable/assets/BehaviorGraph.Bk0xQRZk.css.gz +0 -0
  10. package/build/client/_app/immutable/chunks/B3vnQs252.js +1 -0
  11. package/build/client/_app/immutable/chunks/B3vnQs252.js.br +0 -0
  12. package/build/client/_app/immutable/chunks/B3vnQs252.js.gz +0 -0
  13. package/build/client/_app/immutable/chunks/{CxyLMlpt2.js → BANF9BhQ2.js} +1 -1
  14. package/build/client/_app/immutable/chunks/BANF9BhQ2.js.br +0 -0
  15. package/build/client/_app/immutable/chunks/BANF9BhQ2.js.gz +0 -0
  16. package/build/client/_app/immutable/chunks/BJdTO_n6.js +1 -0
  17. package/build/client/_app/immutable/chunks/BJdTO_n6.js.br +0 -0
  18. package/build/client/_app/immutable/chunks/BJdTO_n6.js.gz +0 -0
  19. package/build/client/_app/immutable/chunks/BPl9BITm.js.gz +0 -0
  20. package/build/client/_app/immutable/chunks/BQ9GodWX2.js.gz +0 -0
  21. package/build/client/_app/immutable/chunks/Bcyn5YUg.js +4 -0
  22. package/build/client/_app/immutable/chunks/Bcyn5YUg.js.br +0 -0
  23. package/build/client/_app/immutable/chunks/Bcyn5YUg.js.gz +0 -0
  24. package/build/client/_app/immutable/chunks/Bfc9rQXP.js +1 -0
  25. package/build/client/_app/immutable/chunks/Bfc9rQXP.js.br +0 -0
  26. package/build/client/_app/immutable/chunks/Bfc9rQXP.js.gz +0 -0
  27. package/build/client/_app/immutable/chunks/{BfMYiIUi.js → BjxqhpPG.js} +1 -1
  28. package/build/client/_app/immutable/chunks/BjxqhpPG.js.br +0 -0
  29. package/build/client/_app/immutable/chunks/BjxqhpPG.js.gz +0 -0
  30. package/build/client/_app/immutable/chunks/ByaoVvNB.js +1 -0
  31. package/build/client/_app/immutable/chunks/ByaoVvNB.js.br +0 -0
  32. package/build/client/_app/immutable/chunks/ByaoVvNB.js.gz +0 -0
  33. package/build/client/_app/immutable/chunks/BzLd0mTH.js.gz +0 -0
  34. package/build/client/_app/immutable/chunks/C8b3IMj8.js +1 -0
  35. package/build/client/_app/immutable/chunks/C8b3IMj8.js.br +0 -0
  36. package/build/client/_app/immutable/chunks/C8b3IMj8.js.gz +0 -0
  37. package/build/client/_app/immutable/chunks/CXvvf4uQ.js +1 -0
  38. package/build/client/_app/immutable/chunks/CXvvf4uQ.js.br +0 -0
  39. package/build/client/_app/immutable/chunks/CXvvf4uQ.js.gz +0 -0
  40. package/build/client/_app/immutable/chunks/Cl7Z3e6-.js.gz +0 -0
  41. package/build/client/_app/immutable/chunks/ClC4qR7W2.js +2 -0
  42. package/build/client/_app/immutable/chunks/ClC4qR7W2.js.br +0 -0
  43. package/build/client/_app/immutable/chunks/ClC4qR7W2.js.gz +0 -0
  44. package/build/client/_app/immutable/chunks/CuGlh1c2.js +1 -0
  45. package/build/client/_app/immutable/chunks/CuGlh1c2.js.br +0 -0
  46. package/build/client/_app/immutable/chunks/CuGlh1c2.js.gz +0 -0
  47. package/build/client/_app/immutable/chunks/CwzIdrQR.js +1 -0
  48. package/build/client/_app/immutable/chunks/CwzIdrQR.js.br +0 -0
  49. package/build/client/_app/immutable/chunks/CwzIdrQR.js.gz +0 -0
  50. package/build/client/_app/immutable/chunks/D5speDV82.js +908 -0
  51. package/build/client/_app/immutable/chunks/D5speDV82.js.br +0 -0
  52. package/build/client/_app/immutable/chunks/D5speDV82.js.gz +0 -0
  53. package/build/client/_app/immutable/chunks/D64sGJRN.js +1 -0
  54. package/build/client/_app/immutable/chunks/D64sGJRN.js.br +0 -0
  55. package/build/client/_app/immutable/chunks/D64sGJRN.js.gz +0 -0
  56. package/build/client/_app/immutable/chunks/DNaA4QRO2.js +1 -0
  57. package/build/client/_app/immutable/chunks/DNaA4QRO2.js.br +0 -0
  58. package/build/client/_app/immutable/chunks/DNaA4QRO2.js.gz +0 -0
  59. package/build/client/_app/immutable/chunks/Da59TXPe.js +1 -0
  60. package/build/client/_app/immutable/chunks/Da59TXPe.js.br +2 -0
  61. package/build/client/_app/immutable/chunks/Da59TXPe.js.gz +0 -0
  62. package/build/client/_app/immutable/chunks/DhTiE3j02.js +2 -0
  63. package/build/client/_app/immutable/chunks/DhTiE3j02.js.br +0 -0
  64. package/build/client/_app/immutable/chunks/DhTiE3j02.js.gz +0 -0
  65. package/build/client/_app/immutable/chunks/Dhqg7r_2.js.gz +0 -0
  66. package/build/client/_app/immutable/chunks/DmyaDy4d2.js +1 -0
  67. package/build/client/_app/immutable/chunks/DmyaDy4d2.js.br +0 -0
  68. package/build/client/_app/immutable/chunks/DmyaDy4d2.js.gz +0 -0
  69. package/build/client/_app/immutable/chunks/DryaQyjN2.js +1 -0
  70. package/build/client/_app/immutable/chunks/DryaQyjN2.js.br +0 -0
  71. package/build/client/_app/immutable/chunks/DryaQyjN2.js.gz +0 -0
  72. package/build/client/_app/immutable/chunks/DtK8qK5Q2.js +1 -0
  73. package/build/client/_app/immutable/chunks/DtK8qK5Q2.js.br +0 -0
  74. package/build/client/_app/immutable/chunks/DtK8qK5Q2.js.gz +0 -0
  75. package/build/client/_app/immutable/chunks/DtblIi6X2.js +1 -0
  76. package/build/client/_app/immutable/chunks/DtblIi6X2.js.br +1 -0
  77. package/build/client/_app/immutable/chunks/DtblIi6X2.js.gz +0 -0
  78. package/build/client/_app/immutable/chunks/UkzDDeO42.js +1 -0
  79. package/build/client/_app/immutable/chunks/UkzDDeO42.js.br +0 -0
  80. package/build/client/_app/immutable/chunks/UkzDDeO42.js.gz +0 -0
  81. package/build/client/_app/immutable/chunks/Vu8LzrwP2.js +1 -0
  82. package/build/client/_app/immutable/chunks/Vu8LzrwP2.js.br +0 -0
  83. package/build/client/_app/immutable/chunks/Vu8LzrwP2.js.gz +0 -0
  84. package/build/client/_app/immutable/chunks/_b612aVb.js +1 -0
  85. package/build/client/_app/immutable/chunks/_b612aVb.js.br +0 -0
  86. package/build/client/_app/immutable/chunks/_b612aVb.js.gz +0 -0
  87. package/build/client/_app/immutable/chunks/aNMRV4sP2.js.gz +0 -0
  88. package/build/client/_app/immutable/chunks/cMamJTsF.js.gz +0 -0
  89. package/build/client/_app/immutable/chunks/ib21i2T_.js.gz +0 -0
  90. package/build/client/_app/immutable/chunks/kNaey6uv.js.gz +0 -0
  91. package/build/client/_app/immutable/chunks/oVMDLirx.js +1 -0
  92. package/build/client/_app/immutable/chunks/oVMDLirx.js.br +0 -0
  93. package/build/client/_app/immutable/chunks/oVMDLirx.js.gz +0 -0
  94. package/build/client/_app/immutable/chunks/olAc024e.js +1 -0
  95. package/build/client/_app/immutable/chunks/olAc024e.js.br +0 -0
  96. package/build/client/_app/immutable/chunks/olAc024e.js.gz +0 -0
  97. package/build/client/_app/immutable/chunks/suTxxv1t.js.gz +0 -0
  98. package/build/client/_app/immutable/chunks/wXIHzLMQ2.js +1 -0
  99. package/build/client/_app/immutable/chunks/wXIHzLMQ2.js.br +0 -0
  100. package/build/client/_app/immutable/chunks/wXIHzLMQ2.js.gz +0 -0
  101. package/build/client/_app/immutable/chunks/wrqalH0a.js +1 -0
  102. package/build/client/_app/immutable/chunks/wrqalH0a.js.br +0 -0
  103. package/build/client/_app/immutable/chunks/wrqalH0a.js.gz +0 -0
  104. package/build/client/_app/immutable/chunks/x60Tn5kT.js +1 -0
  105. package/build/client/_app/immutable/chunks/x60Tn5kT.js.br +0 -0
  106. package/build/client/_app/immutable/chunks/x60Tn5kT.js.gz +0 -0
  107. package/build/client/_app/immutable/chunks/xihTtKlq.js.gz +0 -0
  108. package/build/client/_app/immutable/chunks/{BOrLmFwJ.js → yShDxCNj.js} +1 -1
  109. package/build/client/_app/immutable/chunks/yShDxCNj.js.br +2 -0
  110. package/build/client/_app/immutable/chunks/yShDxCNj.js.gz +0 -0
  111. package/build/client/_app/immutable/entry/app.Etd-exTb.js +2 -0
  112. package/build/client/_app/immutable/entry/app.Etd-exTb.js.br +0 -0
  113. package/build/client/_app/immutable/entry/app.Etd-exTb.js.gz +0 -0
  114. package/build/client/_app/immutable/entry/start.DY2B3u4g.js +1 -0
  115. package/build/client/_app/immutable/entry/start.DY2B3u4g.js.br +0 -0
  116. package/build/client/_app/immutable/entry/start.DY2B3u4g.js.gz +0 -0
  117. package/build/client/_app/immutable/nodes/0.tKfYV3__.js +8 -0
  118. package/build/client/_app/immutable/nodes/0.tKfYV3__.js.br +0 -0
  119. package/build/client/_app/immutable/nodes/0.tKfYV3__.js.gz +0 -0
  120. package/build/client/_app/immutable/nodes/{1.KYdA6ppX.js → 1.CER5ICKt.js} +1 -1
  121. package/build/client/_app/immutable/nodes/1.CER5ICKt.js.br +1 -0
  122. package/build/client/_app/immutable/nodes/1.CER5ICKt.js.gz +0 -0
  123. package/build/client/_app/immutable/nodes/10.rT7cD8kX.js +1 -0
  124. package/build/client/_app/immutable/nodes/10.rT7cD8kX.js.br +0 -0
  125. package/build/client/_app/immutable/nodes/10.rT7cD8kX.js.gz +0 -0
  126. package/build/client/_app/immutable/nodes/11.BAnV_Y5Y.js +2 -0
  127. package/build/client/_app/immutable/nodes/11.BAnV_Y5Y.js.br +0 -0
  128. package/build/client/_app/immutable/nodes/11.BAnV_Y5Y.js.gz +0 -0
  129. package/build/client/_app/immutable/nodes/{9.CMW6a2Lg.js → 12.DCTRFMqo.js} +4 -3
  130. package/build/client/_app/immutable/nodes/12.DCTRFMqo.js.br +0 -0
  131. package/build/client/_app/immutable/nodes/12.DCTRFMqo.js.gz +0 -0
  132. package/build/client/_app/immutable/nodes/{2.DBz20KgG.js → 2.CF488WWF.js} +1 -1
  133. package/build/client/_app/immutable/nodes/2.CF488WWF.js.br +0 -0
  134. package/build/client/_app/immutable/nodes/2.CF488WWF.js.gz +0 -0
  135. package/build/client/_app/immutable/nodes/3.CP7CPPVH.js +1 -0
  136. package/build/client/_app/immutable/nodes/3.CP7CPPVH.js.br +0 -0
  137. package/build/client/_app/immutable/nodes/3.CP7CPPVH.js.gz +0 -0
  138. package/build/client/_app/immutable/nodes/4.D1bxCSiM.js +3 -0
  139. package/build/client/_app/immutable/nodes/4.D1bxCSiM.js.br +0 -0
  140. package/build/client/_app/immutable/nodes/4.D1bxCSiM.js.gz +0 -0
  141. package/build/client/_app/immutable/nodes/5.D6jZgh9y.js +48 -0
  142. package/build/client/_app/immutable/nodes/5.D6jZgh9y.js.br +0 -0
  143. package/build/client/_app/immutable/nodes/5.D6jZgh9y.js.gz +0 -0
  144. package/build/client/_app/immutable/nodes/6.BrBFUA0s.js +1 -0
  145. package/build/client/_app/immutable/nodes/6.BrBFUA0s.js.br +0 -0
  146. package/build/client/_app/immutable/nodes/6.BrBFUA0s.js.gz +0 -0
  147. package/build/client/_app/immutable/nodes/7.pajo8MfM.js +3 -0
  148. package/build/client/_app/immutable/nodes/7.pajo8MfM.js.br +0 -0
  149. package/build/client/_app/immutable/nodes/7.pajo8MfM.js.gz +0 -0
  150. package/build/client/_app/immutable/nodes/8.Cc80_Igi.js +5 -0
  151. package/build/client/_app/immutable/nodes/8.Cc80_Igi.js.br +0 -0
  152. package/build/client/_app/immutable/nodes/8.Cc80_Igi.js.gz +0 -0
  153. package/build/client/_app/immutable/nodes/{7.CemgNJfw.js → 9.D72NaL3l.js} +1 -1
  154. package/build/client/_app/immutable/nodes/9.D72NaL3l.js.br +1 -0
  155. package/build/client/_app/immutable/nodes/9.D72NaL3l.js.gz +0 -0
  156. package/build/client/_app/version.json +1 -1
  157. package/build/client/_app/version.json.br +0 -0
  158. package/build/client/_app/version.json.gz +0 -0
  159. package/build/client/lyriks_logo.svg +148 -0
  160. package/build/client/lyriks_logo.svg.br +0 -0
  161. package/build/client/lyriks_logo.svg.gz +0 -0
  162. package/build/server/chunks/0-8YZc572z.js +15 -0
  163. package/build/server/chunks/0-8YZc572z.js.map +1 -0
  164. package/build/server/chunks/1-DxkfSJLu.js +9 -0
  165. package/build/server/chunks/{1-DPpKAKXV.js.map → 1-DxkfSJLu.js.map} +1 -1
  166. package/build/server/chunks/10-DkObdGtU.js +9 -0
  167. package/build/server/chunks/10-DkObdGtU.js.map +1 -0
  168. package/build/server/chunks/11-DL94HxpZ.js +9 -0
  169. package/build/server/chunks/11-DL94HxpZ.js.map +1 -0
  170. package/build/server/chunks/12-CI74sCkt.js +9 -0
  171. package/build/server/chunks/12-CI74sCkt.js.map +1 -0
  172. package/build/server/chunks/2-qhWwQ4eL.js +9 -0
  173. package/build/server/chunks/2-qhWwQ4eL.js.map +1 -0
  174. package/build/server/chunks/3-CzoZtSTp.js +16 -0
  175. package/build/server/chunks/3-CzoZtSTp.js.map +1 -0
  176. package/build/server/chunks/4-CDa9DBsh.js +16 -0
  177. package/build/server/chunks/4-CDa9DBsh.js.map +1 -0
  178. package/build/server/chunks/5-qD2xxOrq.js +9 -0
  179. package/build/server/chunks/5-qD2xxOrq.js.map +1 -0
  180. package/build/server/chunks/6-B4mWzvDn.js +9 -0
  181. package/build/server/chunks/6-B4mWzvDn.js.map +1 -0
  182. package/build/server/chunks/7-zExv-fTN.js +9 -0
  183. package/build/server/chunks/7-zExv-fTN.js.map +1 -0
  184. package/build/server/chunks/8-BVrGdQg4.js +9 -0
  185. package/build/server/chunks/{6-QQ7r8Rd5.js.map → 8-BVrGdQg4.js.map} +1 -1
  186. package/build/server/chunks/9-BnZLRMYA.js +9 -0
  187. package/build/server/chunks/9-BnZLRMYA.js.map +1 -0
  188. package/build/server/chunks/BehaviorGraph-C-9z37Sm.js +788 -0
  189. package/build/server/chunks/BehaviorGraph-C-9z37Sm.js.map +1 -0
  190. package/build/server/chunks/Clock-BfMWQpmJ.js +5 -0
  191. package/build/server/chunks/Clock-BfMWQpmJ.js.map +1 -0
  192. package/build/server/chunks/DeleteDomain-BvHEgAyp.js +24 -0
  193. package/build/server/chunks/DeleteDomain-BvHEgAyp.js.map +1 -0
  194. package/build/server/chunks/{FeatureValidator-B8qEjAUW.js → DeleteFeature-DnK8sBJI.js} +142 -77
  195. package/build/server/chunks/DeleteFeature-DnK8sBJI.js.map +1 -0
  196. package/build/server/chunks/DeleteProject-BXZcehHZ.js +41 -0
  197. package/build/server/chunks/DeleteProject-BXZcehHZ.js.map +1 -0
  198. package/build/server/chunks/Effect-BJtLR-6l.js +46 -0
  199. package/build/server/chunks/Effect-BJtLR-6l.js.map +1 -0
  200. package/build/server/chunks/{FeatureCard-BQOY6gJQ.js → FeatureCard-Bb50FEfp.js} +4 -4
  201. package/build/server/chunks/{FeatureCard-BQOY6gJQ.js.map → FeatureCard-Bb50FEfp.js.map} +1 -1
  202. package/build/server/chunks/{FeatureJson-Bv-qiOSf.js → FeatureJson-DYvMEAub.js} +2 -2
  203. package/build/server/chunks/{FeatureJson-Bv-qiOSf.js.map → FeatureJson-DYvMEAub.js.map} +1 -1
  204. package/build/server/chunks/{FeatureTransforms-UWDHmWEg.js → FeatureTransforms-B0aI_CJD.js} +10 -3
  205. package/build/server/chunks/FeatureTransforms-B0aI_CJD.js.map +1 -0
  206. package/build/server/chunks/{ManageTagsDialog-DBxA3tM2.js → ManageTagsDialog-D5xbAVNB.js} +5 -5
  207. package/build/server/chunks/ManageTagsDialog-D5xbAVNB.js.map +1 -0
  208. package/build/server/chunks/{ProgressBar-CfhccQ83.js → ProgressBar-CUC2EZqG.js} +3 -3
  209. package/build/server/chunks/ProgressBar-CUC2EZqG.js.map +1 -0
  210. package/build/server/chunks/{ProjectsIndex-CoDrvRya.js → ProjectsIndex-FgIu9dBp.js} +135 -14
  211. package/build/server/chunks/ProjectsIndex-FgIu9dBp.js.map +1 -0
  212. package/build/server/chunks/{RenameTag-BuWLMl1m.js → RenameTag-DWIIR4Bx.js} +3 -6
  213. package/build/server/chunks/RenameTag-DWIIR4Bx.js.map +1 -0
  214. package/build/server/chunks/ScenarioApplier-YPKECfZe.js +55 -0
  215. package/build/server/chunks/ScenarioApplier-YPKECfZe.js.map +1 -0
  216. package/build/server/chunks/SimulatorEngine-DM1F9nCO.js +1391 -0
  217. package/build/server/chunks/SimulatorEngine-DM1F9nCO.js.map +1 -0
  218. package/build/server/chunks/StateValue-BBjWox8f.js +105 -0
  219. package/build/server/chunks/StateValue-BBjWox8f.js.map +1 -0
  220. package/build/server/chunks/{TagDotStrip-B1XQ0m0Y.js → TagDotStrip-0rn-IJVE.js} +4 -4
  221. package/build/server/chunks/TagDotStrip-0rn-IJVE.js.map +1 -0
  222. package/build/server/chunks/{TagFilterSelect-DbO0Qduh.js → TagFilterSelect-Dbu-7Dg4.js} +5 -5
  223. package/build/server/chunks/{TagFilterSelect-DbO0Qduh.js.map → TagFilterSelect-Dbu-7Dg4.js.map} +1 -1
  224. package/build/server/chunks/{TagPalette-CtMNYCmu.js → TagPalette-CpdTiC_7.js} +101 -9
  225. package/build/server/chunks/TagPalette-CpdTiC_7.js.map +1 -0
  226. package/build/server/chunks/TransitionCatalog-CYXUANy6.js +271 -0
  227. package/build/server/chunks/TransitionCatalog-CYXUANy6.js.map +1 -0
  228. package/build/server/chunks/_layout.svelte-pSSG85WT.js +1342 -0
  229. package/build/server/chunks/_layout.svelte-pSSG85WT.js.map +1 -0
  230. package/build/server/chunks/{_page.svelte-BKTveFAj.js → _page.svelte-BNH3szkk.js} +22 -17
  231. package/build/server/chunks/{_page.svelte-BKTveFAj.js.map → _page.svelte-BNH3szkk.js.map} +1 -1
  232. package/build/server/chunks/_page.svelte-BcuGvUt1.js +37 -0
  233. package/build/server/chunks/{_page.svelte-B7hT3P8E.js.map → _page.svelte-BcuGvUt1.js.map} +1 -1
  234. package/build/server/chunks/_page.svelte-BoOMG5Y0.js +37 -0
  235. package/build/server/chunks/{_page.svelte-De508ek8.js.map → _page.svelte-BoOMG5Y0.js.map} +1 -1
  236. package/build/server/chunks/{_page.svelte-BqSC-1vK.js → _page.svelte-C4PRh_wP.js} +104 -54
  237. package/build/server/chunks/_page.svelte-C4PRh_wP.js.map +1 -0
  238. package/build/server/chunks/_page.svelte-Cqn34NXy.js +74 -0
  239. package/build/server/chunks/_page.svelte-Cqn34NXy.js.map +1 -0
  240. package/build/server/chunks/{_page.svelte-B1s7jxaQ.js → _page.svelte-DSCeOGv7.js} +15 -10
  241. package/build/server/chunks/_page.svelte-DSCeOGv7.js.map +1 -0
  242. package/build/server/chunks/_page.svelte-DqWdGt48.js +182 -0
  243. package/build/server/chunks/_page.svelte-DqWdGt48.js.map +1 -0
  244. package/build/server/chunks/_page.svelte-DsQHSEl4.js +49 -0
  245. package/build/server/chunks/_page.svelte-DsQHSEl4.js.map +1 -0
  246. package/build/server/chunks/{_page.svelte-BKKCa9H5.js → _page.svelte-Uioz8hsG.js} +18 -11
  247. package/build/server/chunks/{_page.svelte-BKKCa9H5.js.map → _page.svelte-Uioz8hsG.js.map} +1 -1
  248. package/build/server/chunks/{_page.svelte-Zf9H4KOP.js → _page.svelte-p38jot9e.js} +81 -478
  249. package/build/server/chunks/_page.svelte-p38jot9e.js.map +1 -0
  250. package/build/server/chunks/{_page.svelte-BtI2zZ_Z.js → _page.svelte-yN5kzgJ9.js} +251 -447
  251. package/build/server/chunks/_page.svelte-yN5kzgJ9.js.map +1 -0
  252. package/build/server/chunks/{_server.ts-DsbbVoOn.js → _server.ts-1CtrHhte.js} +4 -4
  253. package/build/server/chunks/{_server.ts-DsbbVoOn.js.map → _server.ts-1CtrHhte.js.map} +1 -1
  254. package/build/server/chunks/{_server.ts-CWvU15tL.js → _server.ts-71Qx1lQb.js} +4 -4
  255. package/build/server/chunks/{_server.ts-CWvU15tL.js.map → _server.ts-71Qx1lQb.js.map} +1 -1
  256. package/build/server/chunks/_server.ts-BAyekGHB.js +961 -0
  257. package/build/server/chunks/_server.ts-BAyekGHB.js.map +1 -0
  258. package/build/server/chunks/{_server.ts-BihpbxOW.js → _server.ts-BLWhU22T.js} +4 -4
  259. package/build/server/chunks/{_server.ts-BihpbxOW.js.map → _server.ts-BLWhU22T.js.map} +1 -1
  260. package/build/server/chunks/{_server.ts-YnfXkeMJ.js → _server.ts-C7EVZVxv.js} +22 -13
  261. package/build/server/chunks/_server.ts-C7EVZVxv.js.map +1 -0
  262. package/build/server/chunks/{_server.ts-vcaqdwxS.js → _server.ts-CGjYuLmo.js} +12 -7
  263. package/build/server/chunks/_server.ts-CGjYuLmo.js.map +1 -0
  264. package/build/server/chunks/{_server.ts-Dy5zQHe2.js → _server.ts-CX6H8fSE.js} +8 -31
  265. package/build/server/chunks/_server.ts-CX6H8fSE.js.map +1 -0
  266. package/build/server/chunks/{_server.ts-BuoQ02BW.js → _server.ts-CyEdTCLr.js} +4 -4
  267. package/build/server/chunks/{_server.ts-BuoQ02BW.js.map → _server.ts-CyEdTCLr.js.map} +1 -1
  268. package/build/server/chunks/_server.ts-DKVTM9Pj.js +77 -0
  269. package/build/server/chunks/_server.ts-DKVTM9Pj.js.map +1 -0
  270. package/build/server/chunks/{_server.ts-0uNTZKwF.js → _server.ts-Dip65hLJ.js} +15 -9
  271. package/build/server/chunks/_server.ts-Dip65hLJ.js.map +1 -0
  272. package/build/server/chunks/{_server.ts-D4EO0VHu.js → _server.ts-Dm0tCs2i.js} +5 -5
  273. package/build/server/chunks/{_server.ts-D4EO0VHu.js.map → _server.ts-Dm0tCs2i.js.map} +1 -1
  274. package/build/server/chunks/{_server.ts-BIBWjQI-.js → _server.ts-DsYwK_uW.js} +4 -4
  275. package/build/server/chunks/{_server.ts-BIBWjQI-.js.map → _server.ts-DsYwK_uW.js.map} +1 -1
  276. package/build/server/chunks/{_server.ts-DDa0Nk_S.js → _server.ts-RCEgegYU.js} +4 -4
  277. package/build/server/chunks/{_server.ts-DDa0Nk_S.js.map → _server.ts-RCEgegYU.js.map} +1 -1
  278. package/build/server/chunks/_server.ts-XOLAT4dd.js +146 -0
  279. package/build/server/chunks/_server.ts-XOLAT4dd.js.map +1 -0
  280. package/build/server/chunks/_server.ts-afh_zLVi.js +69 -0
  281. package/build/server/chunks/_server.ts-afh_zLVi.js.map +1 -0
  282. package/build/server/chunks/{browserContainer-CNX7ANld.js → browserContainer-BdldtueJ.js} +71 -1378
  283. package/build/server/chunks/browserContainer-BdldtueJ.js.map +1 -0
  284. package/build/server/chunks/buildSearchDocs-Cyfrnw9G.js +337 -0
  285. package/build/server/chunks/buildSearchDocs-Cyfrnw9G.js.map +1 -0
  286. package/build/server/chunks/{builderModeStore.svelte-ihupr-3p.js → builderModeStore.svelte-BEZMQEqn.js} +223 -11
  287. package/build/server/chunks/builderModeStore.svelte-BEZMQEqn.js.map +1 -0
  288. package/build/server/chunks/client-C9Cat4DK.js +51 -0
  289. package/build/server/chunks/{client-DfpLcAZ9.js.map → client-C9Cat4DK.js.map} +1 -1
  290. package/build/server/chunks/{error.svelte-C35KOpru.js → error.svelte-CzVR_A6P.js} +5 -5
  291. package/build/server/chunks/{error.svelte-C35KOpru.js.map → error.svelte-CzVR_A6P.js.map} +1 -1
  292. package/build/server/chunks/featureQueueContext-DuXpyTdC.js +32 -0
  293. package/build/server/chunks/featureQueueContext-DuXpyTdC.js.map +1 -0
  294. package/build/server/chunks/featureStore.svelte-DHZf88gu.js +162 -0
  295. package/build/server/chunks/featureStore.svelte-DHZf88gu.js.map +1 -0
  296. package/build/server/chunks/{projectsStore.svelte-QDz5PchX.js → featuresStore.svelte-bUyQBg1-.js} +95 -3
  297. package/build/server/chunks/featuresStore.svelte-bUyQBg1-.js.map +1 -0
  298. package/build/server/chunks/{hooks.server-Rv301GTB.js → hooks.server-y3jdg_sB.js} +6 -2
  299. package/build/server/chunks/hooks.server-y3jdg_sB.js.map +1 -0
  300. package/build/server/chunks/humanize-CkCPfeWi.js +53 -0
  301. package/build/server/chunks/humanize-CkCPfeWi.js.map +1 -0
  302. package/build/server/chunks/{index-server-7H0jzj0M.js → index-server-DvBux_Gf.js} +47 -2
  303. package/build/server/chunks/{index-server-7H0jzj0M.js.map → index-server-DvBux_Gf.js.map} +1 -1
  304. package/build/server/chunks/{internal-BPKrFkK1.js → internal-BFt8yDlf.js} +5 -5
  305. package/build/server/chunks/{internal-BPKrFkK1.js.map → internal-BFt8yDlf.js.map} +1 -1
  306. package/build/server/chunks/projectBundleClient-BtvWPh87.js +168 -0
  307. package/build/server/chunks/projectBundleClient-BtvWPh87.js.map +1 -0
  308. package/build/server/chunks/projectContextStore.svelte-jRJGJZ42.js +141 -0
  309. package/build/server/chunks/projectContextStore.svelte-jRJGJZ42.js.map +1 -0
  310. package/build/server/chunks/projectFeaturesStore.svelte-BwNEtDIL.js +87 -0
  311. package/build/server/chunks/projectFeaturesStore.svelte-BwNEtDIL.js.map +1 -0
  312. package/build/server/chunks/projectStore.svelte-BNuLNxk_.js +230 -0
  313. package/build/server/chunks/projectStore.svelte-BNuLNxk_.js.map +1 -0
  314. package/build/server/chunks/{reconcile-Dv7jS3C8.js → reconcile-CVG2LSlW.js} +54 -267
  315. package/build/server/chunks/reconcile-CVG2LSlW.js.map +1 -0
  316. package/build/server/chunks/registry-DqAn_hVE.js +21 -0
  317. package/build/server/chunks/registry-DqAn_hVE.js.map +1 -0
  318. package/build/server/chunks/{snapshotRepository-BPXCjX92.js → snapshotRepository-8f-2wTrb.js} +30 -5
  319. package/build/server/chunks/snapshotRepository-8f-2wTrb.js.map +1 -0
  320. package/build/server/chunks/{state-CpLVNZq7.js → state-CZZtjXLE.js} +3 -3
  321. package/build/server/chunks/{state-CpLVNZq7.js.map → state-CZZtjXLE.js.map} +1 -1
  322. package/build/server/chunks/{sync-DZ3dn761.js → sync-Bn6eSUhC.js} +3 -3
  323. package/build/server/chunks/{sync-DZ3dn761.js.map → sync-Bn6eSUhC.js.map} +1 -1
  324. package/build/server/chunks/{syncBridge-BwXzPdjJ.js → syncAwareRepositories-DvUjq5Q6.js} +27 -3
  325. package/build/server/chunks/syncAwareRepositories-DvUjq5Q6.js.map +1 -0
  326. package/build/server/chunks/{tagPaletteStore.svelte-DfZOBvgY.js → tagPaletteStore.svelte-C71bdzDl.js} +4 -4
  327. package/build/server/chunks/{tagPaletteStore.svelte-DfZOBvgY.js.map → tagPaletteStore.svelte-C71bdzDl.js.map} +1 -1
  328. package/build/server/index.js +2 -2
  329. package/build/server/index.js.map +1 -1
  330. package/build/server/manifest.js +74 -29
  331. package/build/server/manifest.js.map +1 -1
  332. package/cli/README.md +70 -2
  333. package/cli/commands/check.ts +190 -0
  334. package/cli/commands/ci.ts +71 -0
  335. package/cli/commands/coverage-ingest.ts +112 -0
  336. package/cli/commands/dashboard.ts +14 -0
  337. package/cli/commands/init.ts +26 -0
  338. package/cli/commands/scenarios-adapter.ts +96 -0
  339. package/cli/commands/theme.ts +62 -0
  340. package/cli/scenarios/adapter-scaffold.ts +99 -0
  341. package/cli/scenarios/codegen.ts +7 -1
  342. package/cli/scenarios/results.ts +85 -0
  343. package/cli/skills/unspa-audit/SKILL.md +19 -0
  344. package/cli/skills/unspa-edit/SKILL.md +20 -3
  345. package/cli/skills/unspa-implement/SKILL.md +28 -0
  346. package/cli/unspa.ts +136 -2
  347. package/cli/util/context-files.ts +18 -2
  348. package/cli/util/theme.ts +34 -0
  349. package/mcp-server/bin.ts +104 -104
  350. package/mcp-server/migrate-defaults.ts +164 -164
  351. package/mcp-server/repo-link.ts +142 -134
  352. package/mcp-server/resources/guide.ts +24 -4
  353. package/mcp-server/resources/operations.ts +3 -0
  354. package/mcp-server/seed-snapshots.ts +22 -22
  355. package/mcp-server/server.ts +8 -4
  356. package/mcp-server/sync-aware-repos.ts +79 -79
  357. package/mcp-server/sync-notifier.ts +180 -127
  358. package/mcp-server/tools/_codegen.ts +115 -115
  359. package/mcp-server/tools/_entity_builders.ts +30 -0
  360. package/mcp-server/tools/_shared.ts +210 -210
  361. package/mcp-server/tools/action.ts +210 -210
  362. package/mcp-server/tools/batch.ts +29 -5
  363. package/mcp-server/tools/effect.ts +139 -135
  364. package/mcp-server/tools/entity.ts +132 -132
  365. package/mcp-server/tools/entityField.ts +132 -132
  366. package/mcp-server/tools/event.ts +116 -116
  367. package/mcp-server/tools/feature.ts +264 -264
  368. package/mcp-server/tools/invariant.ts +275 -275
  369. package/mcp-server/tools/persona.ts +141 -141
  370. package/mcp-server/tools/project.ts +500 -391
  371. package/mcp-server/tools/reachabilityGoal.ts +97 -0
  372. package/mcp-server/tools/read.ts +526 -483
  373. package/mcp-server/tools/reorder.ts +114 -114
  374. package/mcp-server/tools/resource.ts +194 -194
  375. package/mcp-server/tools/rule.ts +302 -302
  376. package/mcp-server/tools/scenario.ts +4 -1
  377. package/mcp-server/tools/specGaps.ts +221 -221
  378. package/mcp-server/tools/state.ts +10 -2
  379. package/mcp-server/tools/surface.ts +102 -102
  380. package/mcp-server/tools/transition.ts +96 -96
  381. package/mcp-server/tools/verification.ts +131 -0
  382. package/package.json +15 -2
  383. package/src/app.css +208 -9
  384. package/src/app.html +15 -1
  385. package/src/features/behavior-model/application/ports/FeatureRepository.ts +16 -16
  386. package/src/features/behavior-model/application/use-cases/CreateFeature.ts +24 -24
  387. package/src/features/behavior-model/application/use-cases/DeleteFeature.ts +8 -8
  388. package/src/features/behavior-model/application/use-cases/GetFeature.ts +9 -9
  389. package/src/features/behavior-model/application/use-cases/ListFeatures.ts +10 -10
  390. package/src/features/behavior-model/application/use-cases/MutateFeature.ts +90 -90
  391. package/src/features/behavior-model/application/use-cases/SaveFeature.ts +31 -31
  392. package/src/features/behavior-model/domain/entities/Entity.ts +45 -45
  393. package/src/features/behavior-model/domain/entities/EventDefinition.ts +35 -35
  394. package/src/features/behavior-model/domain/entities/Feature.ts +10 -0
  395. package/src/features/behavior-model/domain/entities/Persona.ts +33 -33
  396. package/src/features/behavior-model/domain/entities/ReachabilityGoal.ts +39 -0
  397. package/src/features/behavior-model/domain/entities/Resource.ts +54 -54
  398. package/src/features/behavior-model/domain/entities/Scenario.ts +15 -0
  399. package/src/features/behavior-model/domain/entities/StateDefinition.ts +13 -0
  400. package/src/features/behavior-model/domain/entities/Surface.ts +75 -75
  401. package/src/features/behavior-model/domain/entities/index.ts +9 -9
  402. package/src/features/behavior-model/domain/services/BehaviorGraphModel.ts +556 -0
  403. package/src/features/behavior-model/domain/services/DerivedState.ts +67 -0
  404. package/src/features/behavior-model/domain/services/EffectApplier.ts +112 -3
  405. package/src/features/behavior-model/domain/services/EffectiveEntities.ts +166 -166
  406. package/src/features/behavior-model/domain/services/EntityDeducer.ts +83 -83
  407. package/src/features/behavior-model/domain/services/EventCatalog.ts +141 -141
  408. package/src/features/behavior-model/domain/services/FeatureExpressionNormalizer.ts +43 -5
  409. package/src/features/behavior-model/domain/services/FeatureSharedStateNormalizer.ts +24 -3
  410. package/src/features/behavior-model/domain/services/FeatureTransforms.ts +33 -0
  411. package/src/features/behavior-model/domain/services/FeatureValidator.ts +124 -16
  412. package/src/features/behavior-model/domain/services/PersonaApplier.ts +39 -39
  413. package/src/features/behavior-model/domain/services/ResourceDeducer.ts +64 -64
  414. package/src/features/behavior-model/domain/services/ResourceUsage.ts +79 -79
  415. package/src/features/behavior-model/domain/services/ScenarioApplier.ts +40 -40
  416. package/src/features/behavior-model/domain/services/SharedStateDefinitions.ts +32 -32
  417. package/src/features/behavior-model/domain/services/StatePathReferences.ts +249 -217
  418. package/src/features/behavior-model/domain/services/TransitionCatalog.ts +173 -173
  419. package/src/features/behavior-model/domain/value-objects/Effect.ts +100 -3
  420. package/src/features/behavior-model/domain/value-objects/EntityFieldType.ts +57 -57
  421. package/src/features/behavior-model/domain/value-objects/Expression.ts +22 -2
  422. package/src/features/behavior-model/domain/value-objects/ParameterType.ts +57 -57
  423. package/src/features/behavior-model/domain/value-objects/Resource.ts +210 -210
  424. package/src/features/behavior-model/domain/value-objects/RuleCategory.ts +57 -57
  425. package/src/features/behavior-model/domain/value-objects/RuleCondition.ts +52 -1
  426. package/src/features/behavior-model/domain/value-objects/SimulationClock.ts +35 -0
  427. package/src/features/behavior-model/domain/value-objects/ids.ts +2 -0
  428. package/src/features/behavior-model/infrastructure/io/FeatureJson.ts +89 -89
  429. package/src/features/behavior-model/infrastructure/persistence/HttpFeatureRepository.ts +43 -43
  430. package/src/features/behavior-model/infrastructure/persistence/JsonFolderFeatureRepository.ts +10 -0
  431. package/src/features/behavior-model/infrastructure/persistence/snapshot-discovery.ts +76 -76
  432. package/src/features/behavior-model/infrastructure/seed/seedStorefront.ts +967 -967
  433. package/src/features/behavior-model/presentation/adapters/VisBehaviorGraphRenderer.ts +501 -0
  434. package/src/features/behavior-model/presentation/components/ActionEditor.svelte +683 -682
  435. package/src/features/behavior-model/presentation/components/ActionsEditor.svelte +232 -232
  436. package/src/features/behavior-model/presentation/components/BehaviorGraph.svelte +568 -0
  437. package/src/features/behavior-model/presentation/components/EffectEditor.svelte +168 -168
  438. package/src/features/behavior-model/presentation/components/EntityEditor.svelte +241 -248
  439. package/src/features/behavior-model/presentation/components/EntityFieldRow.svelte +180 -181
  440. package/src/features/behavior-model/presentation/components/EntityManager.svelte +252 -251
  441. package/src/features/behavior-model/presentation/components/EventsManager.svelte +373 -372
  442. package/src/features/behavior-model/presentation/components/FeatureEditor.svelte +396 -348
  443. package/src/features/behavior-model/presentation/components/FeatureHeader.svelte +165 -148
  444. package/src/features/behavior-model/presentation/components/FeatureHealthStrip.svelte +110 -110
  445. package/src/features/behavior-model/presentation/components/HistoryPanel.svelte +154 -154
  446. package/src/features/behavior-model/presentation/components/NewFeatureForm.svelte +66 -66
  447. package/src/features/behavior-model/presentation/components/ParameterNameSelect.svelte +84 -84
  448. package/src/features/behavior-model/presentation/components/ParametersEditor.svelte +411 -411
  449. package/src/features/behavior-model/presentation/components/PersonaEditor.svelte +244 -244
  450. package/src/features/behavior-model/presentation/components/PersonasManager.svelte +130 -130
  451. package/src/features/behavior-model/presentation/components/ReachabilityGoalEditor.svelte +230 -0
  452. package/src/features/behavior-model/presentation/components/ReachabilityGoalsEditor.svelte +86 -0
  453. package/src/features/behavior-model/presentation/components/ResourcesManager.svelte +291 -290
  454. package/src/features/behavior-model/presentation/components/ScenariosEditor.svelte +496 -496
  455. package/src/features/behavior-model/presentation/components/StateDefinitionsEditor.svelte +356 -356
  456. package/src/features/behavior-model/presentation/components/SurfaceEntitiesView.svelte +88 -88
  457. package/src/features/behavior-model/presentation/components/SurfaceInvariantsEditor.svelte +76 -76
  458. package/src/features/behavior-model/presentation/components/SurfaceList.svelte +300 -300
  459. package/src/features/behavior-model/presentation/components/SurfaceMetaEditor.svelte +158 -156
  460. package/src/features/behavior-model/presentation/components/SurfacePanel.svelte +198 -198
  461. package/src/features/behavior-model/presentation/components/SurfacePersonasView.svelte +122 -122
  462. package/src/features/behavior-model/presentation/components/SurfaceResourcesView.svelte +113 -113
  463. package/src/features/behavior-model/presentation/components/SurfaceRulesEditor.svelte +69 -69
  464. package/src/features/behavior-model/presentation/components/TransitionsManager.svelte +322 -321
  465. package/src/features/behavior-model/presentation/context/featureQueueContext.ts +78 -0
  466. package/src/features/behavior-model/presentation/stores/editorStore.svelte.ts +132 -131
  467. package/src/features/behavior-model/presentation/stores/featureStore.svelte.ts +177 -177
  468. package/src/features/behavior-model/presentation/stores/featuresStore.svelte.ts +98 -98
  469. package/src/features/behavior-model/presentation/view-models/BehaviorGraphTheme.ts +44 -0
  470. package/src/features/behavior-model/presentation/view-models/factories.ts +181 -132
  471. package/src/features/builder-mode/domain/BuilderModeDashboard.ts +7 -1
  472. package/src/features/builder-mode/presentation/components/BuilderModeDashboard.svelte +78 -16
  473. package/src/features/builder-mode/presentation/components/BuilderTagChips.svelte +25 -0
  474. package/src/features/builder-mode/presentation/stores/builderModeStore.svelte.ts +247 -3
  475. package/src/features/domains/infrastructure/persistence/JsonFolderDomainRepository.ts +9 -0
  476. package/src/features/global-search/application/use-cases/LoadSearchIndex.ts +70 -0
  477. package/src/features/global-search/domain/SearchDoc.ts +111 -0
  478. package/src/features/global-search/domain/buildSearchDocs.ts +483 -0
  479. package/src/features/global-search/domain/searchNav.ts +58 -0
  480. package/src/features/global-search/domain/searchScoring.ts +81 -0
  481. package/src/features/global-search/infrastructure/adapters/defaultSearchHost.ts +28 -0
  482. package/src/features/global-search/presentation/components/GlobalSearch.svelte +262 -0
  483. package/src/features/global-search/presentation/ports/SearchHostPorts.ts +41 -0
  484. package/src/features/global-search/presentation/searchKindMeta.ts +108 -0
  485. package/src/features/global-search/presentation/stores/globalSearchStore.svelte.ts +171 -0
  486. package/src/features/implementation-queue/presentation/components/FloatingQueueWidget.svelte +264 -0
  487. package/src/features/implementation-queue/presentation/stores/globalQueueStore.svelte.ts +172 -0
  488. package/src/features/implementation-status/application/ports/ImplementationStatusRepository.ts +8 -8
  489. package/src/features/implementation-status/application/use-cases/GetImplementationStatus.ts +8 -8
  490. package/src/features/implementation-status/domain/ApplyCapturedToSpec.ts +323 -322
  491. package/src/features/implementation-status/domain/FieldDiff.ts +238 -236
  492. package/src/features/implementation-status/infrastructure/persistence/InMemoryImplementationStatusRepository.ts +21 -21
  493. package/src/features/implementation-status/presentation/components/ImplementationStatusPanel.svelte +831 -831
  494. package/src/features/implementation-status/presentation/stores/implementationStatusStore.svelte.ts +97 -97
  495. package/src/features/library/application/use-cases/ApplyBlueprintsToFeature.ts +33 -33
  496. package/src/features/library/domain/services/BlueprintApplier.ts +94 -94
  497. package/src/features/library/infrastructure/blueprints/auth/ResetPasswordBlueprint.ts +332 -332
  498. package/src/features/library/infrastructure/blueprints/auth/SignInBlueprint.ts +281 -281
  499. package/src/features/library/infrastructure/blueprints/auth/SignUpBlueprint.ts +299 -299
  500. package/src/features/library/infrastructure/blueprints/auth/VerifyEmailBlueprint.ts +288 -288
  501. package/src/features/library/infrastructure/blueprints/auth/shared.ts +146 -146
  502. package/src/features/library/infrastructure/blueprints/commerce/CartBlueprint.ts +222 -222
  503. package/src/features/library/infrastructure/blueprints/commerce/CatalogBlueprint.ts +190 -190
  504. package/src/features/library/infrastructure/blueprints/commerce/CheckoutBlueprint.ts +322 -322
  505. package/src/features/library/infrastructure/blueprints/commerce/OrderConfirmationBlueprint.ts +172 -172
  506. package/src/features/library/infrastructure/blueprints/commerce/ProductDetailsBlueprint.ts +290 -290
  507. package/src/features/library/infrastructure/blueprints/content/ReviewsBlueprint.ts +392 -392
  508. package/src/features/library/infrastructure/blueprints/onboarding/OnboardingWizardBlueprint.ts +344 -344
  509. package/src/features/library/infrastructure/blueprints/utility/CanvasBlueprint.ts +419 -419
  510. package/src/features/library/infrastructure/blueprints/utility/CookieConsentBlueprint.ts +195 -195
  511. package/src/features/library/infrastructure/blueprints/utility/NotFoundBlueprint.ts +86 -86
  512. package/src/features/library/infrastructure/blueprints/utility/SearchPaletteBlueprint.ts +192 -192
  513. package/src/features/library/infrastructure/blueprints/utility/StoreLocatorBlueprint.ts +221 -221
  514. package/src/features/library/infrastructure/blueprints/utility/TaskBoardBlueprint.ts +196 -196
  515. package/src/features/maturity/application/use-cases/ScoreFeature.ts +7 -7
  516. package/src/features/maturity/domain/MaturityReport.ts +70 -70
  517. package/src/features/maturity/domain/MaturityScorer.ts +1001 -985
  518. package/src/features/maturity/presentation/components/MaturityPanel.svelte +376 -372
  519. package/src/features/mcp-tools/application/tools/dryRunSimulate.ts +24 -24
  520. package/src/features/mcp-tools/application/tools/findStateReferences.ts +19 -19
  521. package/src/features/mcp-tools/application/tools/generateTypes.ts +0 -1
  522. package/src/features/mcp-tools/application/tools/getAction.ts +165 -165
  523. package/src/features/mcp-tools/application/tools/getFeature.ts +5 -5
  524. package/src/features/mcp-tools/application/tools/getFeatureIndex.ts +79 -79
  525. package/src/features/mcp-tools/application/tools/getNeighborhood.ts +319 -319
  526. package/src/features/mcp-tools/application/tools/getSurface.ts +86 -86
  527. package/src/features/mcp-tools/application/tools/index.ts +56 -56
  528. package/src/features/mcp-tools/application/tools/listActions.ts +49 -49
  529. package/src/features/mcp-tools/application/tools/listFeatures.ts +7 -7
  530. package/src/features/mcp-tools/application/tools/scoreFeature.ts +153 -153
  531. package/src/features/projects/application/ports/ProjectRepository.ts +14 -14
  532. package/src/features/projects/application/use-cases/AddFeatureToProject.ts +23 -23
  533. package/src/features/projects/application/use-cases/CreateProject.ts +16 -16
  534. package/src/features/projects/application/use-cases/FindProjectContainingFeature.ts +23 -23
  535. package/src/features/projects/application/use-cases/GetProjectAggregate.ts +131 -131
  536. package/src/features/projects/application/use-cases/ImportProjectBundle.ts +45 -0
  537. package/src/features/projects/application/use-cases/MoveFeatureInProject.ts +36 -36
  538. package/src/features/projects/application/use-cases/RemoveFeatureFromProject.ts +23 -23
  539. package/src/features/projects/domain/entities/Project.ts +12 -0
  540. package/src/features/projects/domain/services/InheritedFromProject.ts +130 -130
  541. package/src/features/projects/infrastructure/persistence/JsonFolderProjectRepository.ts +9 -0
  542. package/src/features/projects/presentation/components/ProjectCard.svelte +27 -8
  543. package/src/features/projects/presentation/components/ProjectEditor.svelte +23 -19
  544. package/src/features/projects/presentation/components/ProjectFeaturesPanel.svelte +433 -433
  545. package/src/features/projects/presentation/components/ProjectsIndex.svelte +54 -10
  546. package/src/features/projects/presentation/stores/projectContextStore.svelte.ts +170 -170
  547. package/src/features/projects/presentation/stores/projectFeaturesStore.svelte.ts +114 -114
  548. package/src/features/projects/presentation/stores/projectStore.svelte.ts +265 -266
  549. package/src/features/projects/presentation/stores/projectsStore.svelte.ts +134 -134
  550. package/src/features/simulator/application/use-cases/RunScenarios.ts +27 -1
  551. package/src/features/simulator/application/use-cases/SimulateAction.ts +47 -47
  552. package/src/features/simulator/domain/SimulationResult.ts +79 -79
  553. package/src/features/simulator/domain/SimulatorEngine.ts +43 -9
  554. package/src/features/simulator/domain/StateExplorer.ts +369 -0
  555. package/src/features/simulator/domain/SurfaceReachability.ts +130 -0
  556. package/src/features/simulator/presentation/components/ParameterInputs.svelte +277 -277
  557. package/src/features/simulator/presentation/components/PersonaPicker.svelte +52 -52
  558. package/src/features/simulator/presentation/components/ScenarioPicker.svelte +42 -45
  559. package/src/features/simulator/presentation/components/SidePanel.svelte +170 -170
  560. package/src/features/simulator/presentation/components/SimulationResultView.svelte +394 -394
  561. package/src/features/simulator/presentation/components/SimulatorPanel.svelte +293 -293
  562. package/src/features/simulator/presentation/components/StateInspector.svelte +101 -101
  563. package/src/features/simulator/presentation/stores/simulatorStore.svelte.ts +268 -268
  564. package/src/features/tutorial/presentation/components/CodeBlock.svelte +5 -1
  565. package/src/features/verification/application/ports/BehavioralIndexReader.ts +12 -0
  566. package/src/features/verification/application/use-cases/VerifyFeatures.ts +151 -0
  567. package/src/features/verification/domain/DriftReport.ts +37 -0
  568. package/src/features/verification/domain/EventCoherenceReport.ts +27 -0
  569. package/src/features/verification/domain/IndexedImplementation.ts +27 -0
  570. package/src/features/verification/domain/VerificationReport.ts +59 -0
  571. package/src/features/verification/domain/VerificationThresholds.ts +52 -0
  572. package/src/features/verification/domain/VerificationVerdict.ts +43 -0
  573. package/src/features/verification/domain/aggregateVerdict.ts +244 -0
  574. package/src/features/verification/domain/analyzeEventCoherence.ts +43 -0
  575. package/src/features/verification/domain/detectDrift.ts +166 -0
  576. package/src/features/verification/domain/verifiedCoverage.ts +37 -0
  577. package/src/features/verification/infrastructure/persistence/FileBehavioralIndexReader.ts +81 -0
  578. package/src/features/verification/infrastructure/persistence/StaticBehavioralIndexReader.ts +15 -0
  579. package/src/features/verification/presentation/components/VerifyPanel.svelte +74 -0
  580. package/src/features/verification/presentation/stores/verificationStore.svelte.ts +64 -0
  581. package/src/hooks.server.ts +11 -1
  582. package/src/lib/server/openLocalDirectory.ts +40 -0
  583. package/src/lib/server/searchIndex.ts +161 -0
  584. package/src/lib/server/snapshotRepository.ts +37 -37
  585. package/src/lib/server/sync/YDocManager.ts +391 -391
  586. package/src/lib/server/sync/historyStore.ts +276 -276
  587. package/src/lib/server/sync/wsServer.ts +1 -1
  588. package/src/lib/sync/protocol.ts +147 -147
  589. package/src/lib/sync/roomId.ts +33 -33
  590. package/src/lib/theme/registry.ts +77 -0
  591. package/src/lib/theme/themeStore.svelte.ts +64 -0
  592. package/src/routes/+layout.svelte +288 -30
  593. package/src/routes/api/domains/[id]/+server.ts +7 -3
  594. package/src/routes/api/projects/[id]/+server.ts +14 -4
  595. package/src/routes/api/projects/import/+server.ts +16 -38
  596. package/src/routes/api/search-index/+server.ts +16 -0
  597. package/src/routes/api/snapshots/[id]/+server.ts +56 -44
  598. package/src/routes/api/snapshots/[id]/implementation-status/+server.ts +13 -13
  599. package/src/routes/api/snapshots/[id]/verify/+server.ts +37 -0
  600. package/src/routes/api/sync/reload/+server.ts +157 -157
  601. package/src/routes/api/system/hub-directory/+server.ts +24 -0
  602. package/src/routes/features/+page.svelte +484 -484
  603. package/src/routes/features/[id]/+page.svelte +55 -49
  604. package/src/routes/features/[id]/graph/+page.svelte +39 -0
  605. package/src/routes/features/[id]/verify/+page.svelte +89 -0
  606. package/src/routes/mcp/+page.svelte +16 -1
  607. package/src/routes/projects/[id]/+page.svelte +70 -70
  608. package/src/routes/projects/[id]/graph/+page.svelte +79 -0
  609. package/src/routes/tutorial/+page.svelte +3 -2
  610. package/src/shared/infrastructure/browserContainer.ts +61 -61
  611. package/src/shared/presentation/components/KebabMenu.svelte +95 -0
  612. package/src/shared/presentation/components/MenuItem.svelte +29 -0
  613. package/src/shared/presentation/components/ProgressBar.svelte +1 -1
  614. package/src/shared/presentation/toast/SyncToast.svelte +14 -3
  615. package/src/shared/presentation/toast/viewLinkResolver.ts +32 -0
  616. package/static/lyriks_logo.svg +148 -0
  617. package/vite.config.ts +47 -47
  618. package/build/client/_app/immutable/assets/0.DFMDYAU9.css +0 -1
  619. package/build/client/_app/immutable/assets/0.DFMDYAU9.css.br +0 -0
  620. package/build/client/_app/immutable/assets/0.DFMDYAU9.css.gz +0 -0
  621. package/build/client/_app/immutable/assets/9.nv0I59TU.css.gz +0 -0
  622. package/build/client/_app/immutable/chunks/BO66rBOa2.js +0 -1
  623. package/build/client/_app/immutable/chunks/BO66rBOa2.js.br +0 -0
  624. package/build/client/_app/immutable/chunks/BO66rBOa2.js.gz +0 -0
  625. package/build/client/_app/immutable/chunks/BOrLmFwJ.js.br +0 -0
  626. package/build/client/_app/immutable/chunks/BOrLmFwJ.js.gz +0 -0
  627. package/build/client/_app/immutable/chunks/BfMYiIUi.js.br +0 -0
  628. package/build/client/_app/immutable/chunks/BfMYiIUi.js.gz +0 -0
  629. package/build/client/_app/immutable/chunks/Bp2_Vghh.js +0 -1
  630. package/build/client/_app/immutable/chunks/Bp2_Vghh.js.br +0 -0
  631. package/build/client/_app/immutable/chunks/Bp2_Vghh.js.gz +0 -0
  632. package/build/client/_app/immutable/chunks/Bp8HpEPe2.js +0 -4
  633. package/build/client/_app/immutable/chunks/Bp8HpEPe2.js.br +0 -0
  634. package/build/client/_app/immutable/chunks/Bp8HpEPe2.js.gz +0 -0
  635. package/build/client/_app/immutable/chunks/C8rRKIXT.js +0 -1
  636. package/build/client/_app/immutable/chunks/C8rRKIXT.js.br +0 -0
  637. package/build/client/_app/immutable/chunks/C8rRKIXT.js.gz +0 -0
  638. package/build/client/_app/immutable/chunks/CJjJLwzv2.js +0 -1
  639. package/build/client/_app/immutable/chunks/CJjJLwzv2.js.br +0 -0
  640. package/build/client/_app/immutable/chunks/CJjJLwzv2.js.gz +0 -0
  641. package/build/client/_app/immutable/chunks/CxyLMlpt2.js.br +0 -0
  642. package/build/client/_app/immutable/chunks/CxyLMlpt2.js.gz +0 -0
  643. package/build/client/_app/immutable/chunks/D6jhrpTg.js +0 -1
  644. package/build/client/_app/immutable/chunks/D6jhrpTg.js.br +0 -0
  645. package/build/client/_app/immutable/chunks/D6jhrpTg.js.gz +0 -0
  646. package/build/client/_app/immutable/chunks/D8YEa1po.js +0 -1
  647. package/build/client/_app/immutable/chunks/D8YEa1po.js.br +0 -0
  648. package/build/client/_app/immutable/chunks/D8YEa1po.js.gz +0 -0
  649. package/build/client/_app/immutable/chunks/D9dKmajw.js +0 -1
  650. package/build/client/_app/immutable/chunks/D9dKmajw.js.br +0 -0
  651. package/build/client/_app/immutable/chunks/D9dKmajw.js.gz +0 -0
  652. package/build/client/_app/immutable/chunks/DBJWcC6Y.js +0 -1
  653. package/build/client/_app/immutable/chunks/DBJWcC6Y.js.br +0 -0
  654. package/build/client/_app/immutable/chunks/DBJWcC6Y.js.gz +0 -0
  655. package/build/client/_app/immutable/chunks/DHoA038D.js +0 -1
  656. package/build/client/_app/immutable/chunks/DHoA038D.js.br +0 -2
  657. package/build/client/_app/immutable/chunks/DHoA038D.js.gz +0 -0
  658. package/build/client/_app/immutable/chunks/DKgYpi6_.js +0 -1
  659. package/build/client/_app/immutable/chunks/DKgYpi6_.js.br +0 -0
  660. package/build/client/_app/immutable/chunks/DKgYpi6_.js.gz +0 -0
  661. package/build/client/_app/immutable/chunks/DatGSObE.js +0 -1
  662. package/build/client/_app/immutable/chunks/DatGSObE.js.br +0 -0
  663. package/build/client/_app/immutable/chunks/DatGSObE.js.gz +0 -0
  664. package/build/client/_app/immutable/chunks/Dg0acPpT.js +0 -1
  665. package/build/client/_app/immutable/chunks/Dg0acPpT.js.br +0 -0
  666. package/build/client/_app/immutable/chunks/Dg0acPpT.js.gz +0 -0
  667. package/build/client/_app/immutable/chunks/DjWKKtqp.js +0 -1
  668. package/build/client/_app/immutable/chunks/DjWKKtqp.js.br +0 -1
  669. package/build/client/_app/immutable/chunks/DjWKKtqp.js.gz +0 -0
  670. package/build/client/_app/immutable/chunks/Dq0DUAz1.js +0 -1
  671. package/build/client/_app/immutable/chunks/Dq0DUAz1.js.br +0 -0
  672. package/build/client/_app/immutable/chunks/Dq0DUAz1.js.gz +0 -0
  673. package/build/client/_app/immutable/chunks/HKLi1Yz3.js +0 -1
  674. package/build/client/_app/immutable/chunks/HKLi1Yz3.js.br +0 -0
  675. package/build/client/_app/immutable/chunks/HKLi1Yz3.js.gz +0 -0
  676. package/build/client/_app/immutable/chunks/N7PXjlRH.js +0 -1
  677. package/build/client/_app/immutable/chunks/N7PXjlRH.js.br +0 -0
  678. package/build/client/_app/immutable/chunks/N7PXjlRH.js.gz +0 -0
  679. package/build/client/_app/immutable/chunks/hpWJNn0t2.js +0 -2
  680. package/build/client/_app/immutable/chunks/hpWJNn0t2.js.br +0 -0
  681. package/build/client/_app/immutable/chunks/hpWJNn0t2.js.gz +0 -0
  682. package/build/client/_app/immutable/chunks/iQu0D9Ux.js +0 -1
  683. package/build/client/_app/immutable/chunks/iQu0D9Ux.js.br +0 -0
  684. package/build/client/_app/immutable/chunks/iQu0D9Ux.js.gz +0 -0
  685. package/build/client/_app/immutable/entry/app.CLgh6Mx_.js +0 -2
  686. package/build/client/_app/immutable/entry/app.CLgh6Mx_.js.br +0 -0
  687. package/build/client/_app/immutable/entry/app.CLgh6Mx_.js.gz +0 -0
  688. package/build/client/_app/immutable/entry/start.D5GPCQZD.js +0 -1
  689. package/build/client/_app/immutable/entry/start.D5GPCQZD.js.br +0 -0
  690. package/build/client/_app/immutable/entry/start.D5GPCQZD.js.gz +0 -0
  691. package/build/client/_app/immutable/nodes/0.BOoI-hsu.js +0 -4
  692. package/build/client/_app/immutable/nodes/0.BOoI-hsu.js.br +0 -0
  693. package/build/client/_app/immutable/nodes/0.BOoI-hsu.js.gz +0 -0
  694. package/build/client/_app/immutable/nodes/1.KYdA6ppX.js.br +0 -2
  695. package/build/client/_app/immutable/nodes/1.KYdA6ppX.js.gz +0 -0
  696. package/build/client/_app/immutable/nodes/2.DBz20KgG.js.br +0 -0
  697. package/build/client/_app/immutable/nodes/2.DBz20KgG.js.gz +0 -0
  698. package/build/client/_app/immutable/nodes/3.19DIoFtw.js +0 -1
  699. package/build/client/_app/immutable/nodes/3.19DIoFtw.js.br +0 -0
  700. package/build/client/_app/immutable/nodes/3.19DIoFtw.js.gz +0 -0
  701. package/build/client/_app/immutable/nodes/4.BvMzqBJj.js +0 -3
  702. package/build/client/_app/immutable/nodes/4.BvMzqBJj.js.br +0 -0
  703. package/build/client/_app/immutable/nodes/4.BvMzqBJj.js.gz +0 -0
  704. package/build/client/_app/immutable/nodes/5.Dq6obSGG.js +0 -42
  705. package/build/client/_app/immutable/nodes/5.Dq6obSGG.js.br +0 -0
  706. package/build/client/_app/immutable/nodes/5.Dq6obSGG.js.gz +0 -0
  707. package/build/client/_app/immutable/nodes/6.BOHISqs-.js +0 -5
  708. package/build/client/_app/immutable/nodes/6.BOHISqs-.js.br +0 -0
  709. package/build/client/_app/immutable/nodes/6.BOHISqs-.js.gz +0 -0
  710. package/build/client/_app/immutable/nodes/7.CemgNJfw.js.br +0 -0
  711. package/build/client/_app/immutable/nodes/7.CemgNJfw.js.gz +0 -0
  712. package/build/client/_app/immutable/nodes/8.DejSfIYh.js +0 -5
  713. package/build/client/_app/immutable/nodes/8.DejSfIYh.js.br +0 -0
  714. package/build/client/_app/immutable/nodes/8.DejSfIYh.js.gz +0 -0
  715. package/build/client/_app/immutable/nodes/9.CMW6a2Lg.js.br +0 -0
  716. package/build/client/_app/immutable/nodes/9.CMW6a2Lg.js.gz +0 -0
  717. package/build/server/chunks/0-C_o0oz-N.js +0 -15
  718. package/build/server/chunks/0-C_o0oz-N.js.map +0 -1
  719. package/build/server/chunks/1-DPpKAKXV.js +0 -9
  720. package/build/server/chunks/2-AlfFqtL1.js +0 -9
  721. package/build/server/chunks/2-AlfFqtL1.js.map +0 -1
  722. package/build/server/chunks/3-vbjUt_51.js +0 -16
  723. package/build/server/chunks/3-vbjUt_51.js.map +0 -1
  724. package/build/server/chunks/4-BNow4x6D.js +0 -16
  725. package/build/server/chunks/4-BNow4x6D.js.map +0 -1
  726. package/build/server/chunks/5-D7OCJpxD.js +0 -9
  727. package/build/server/chunks/5-D7OCJpxD.js.map +0 -1
  728. package/build/server/chunks/6-QQ7r8Rd5.js +0 -9
  729. package/build/server/chunks/7-CbPLGaIG.js +0 -9
  730. package/build/server/chunks/7-CbPLGaIG.js.map +0 -1
  731. package/build/server/chunks/8-CVO-E-sf.js +0 -9
  732. package/build/server/chunks/8-CVO-E-sf.js.map +0 -1
  733. package/build/server/chunks/9-DxT1baO5.js +0 -9
  734. package/build/server/chunks/9-DxT1baO5.js.map +0 -1
  735. package/build/server/chunks/FeatureTransforms-UWDHmWEg.js.map +0 -1
  736. package/build/server/chunks/FeatureValidator-B8qEjAUW.js.map +0 -1
  737. package/build/server/chunks/ManageTagsDialog-DBxA3tM2.js.map +0 -1
  738. package/build/server/chunks/ProgressBar-CfhccQ83.js.map +0 -1
  739. package/build/server/chunks/ProjectsIndex-CoDrvRya.js.map +0 -1
  740. package/build/server/chunks/RenameTag-BuWLMl1m.js.map +0 -1
  741. package/build/server/chunks/TagDotStrip-B1XQ0m0Y.js.map +0 -1
  742. package/build/server/chunks/TagPalette-CtMNYCmu.js.map +0 -1
  743. package/build/server/chunks/_layout.svelte-BREws55o.js +0 -616
  744. package/build/server/chunks/_layout.svelte-BREws55o.js.map +0 -1
  745. package/build/server/chunks/_page.svelte-B1s7jxaQ.js.map +0 -1
  746. package/build/server/chunks/_page.svelte-B7hT3P8E.js +0 -29
  747. package/build/server/chunks/_page.svelte-BqSC-1vK.js.map +0 -1
  748. package/build/server/chunks/_page.svelte-BtI2zZ_Z.js.map +0 -1
  749. package/build/server/chunks/_page.svelte-De508ek8.js +0 -29
  750. package/build/server/chunks/_page.svelte-Zf9H4KOP.js.map +0 -1
  751. package/build/server/chunks/_server.ts-0uNTZKwF.js.map +0 -1
  752. package/build/server/chunks/_server.ts-DcZPhyhK.js +0 -59
  753. package/build/server/chunks/_server.ts-DcZPhyhK.js.map +0 -1
  754. package/build/server/chunks/_server.ts-Dy5zQHe2.js.map +0 -1
  755. package/build/server/chunks/_server.ts-YnfXkeMJ.js.map +0 -1
  756. package/build/server/chunks/_server.ts-vcaqdwxS.js.map +0 -1
  757. package/build/server/chunks/browserContainer-CNX7ANld.js.map +0 -1
  758. package/build/server/chunks/builderModeStore.svelte-ihupr-3p.js.map +0 -1
  759. package/build/server/chunks/client-DfpLcAZ9.js +0 -24
  760. package/build/server/chunks/featuresStore.svelte-DR1gYZyu.js +0 -98
  761. package/build/server/chunks/featuresStore.svelte-DR1gYZyu.js.map +0 -1
  762. package/build/server/chunks/hooks.server-Rv301GTB.js.map +0 -1
  763. package/build/server/chunks/identityStore.svelte-IIvW2_3b.js +0 -59
  764. package/build/server/chunks/identityStore.svelte-IIvW2_3b.js.map +0 -1
  765. package/build/server/chunks/projectsStore.svelte-QDz5PchX.js.map +0 -1
  766. package/build/server/chunks/reconcile-Dv7jS3C8.js.map +0 -1
  767. package/build/server/chunks/snapshotRepository-BPXCjX92.js.map +0 -1
  768. package/build/server/chunks/syncBridge-BwXzPdjJ.js.map +0 -1
  769. package/src/features/implementation-queue/presentation/components/QueuePanel.svelte +0 -204
  770. package/src/features/implementation-queue/presentation/stores/queueStore.svelte.ts +0 -143
  771. /package/build/client/_app/immutable/assets/{9.nv0I59TU.css → 12.nv0I59TU.css} +0 -0
  772. /package/build/client/_app/immutable/assets/{9.nv0I59TU.css.br → 12.nv0I59TU.css.br} +0 -0
@@ -0,0 +1,8 @@
1
+ import{$ as e,A as t,C as n,D as r,E as i,F as a,G as o,H as s,I as c,L as l,M as u,N as d,O as f,P as p,Q as m,R as h,T as g,W as _,X as v,Y as y,Z as b,_ as ee,_t as x,a as S,c as C,ct as w,d as T,et as E,j as D,k as O,l as k,lt as A,mt as j,nt as M,o as N,p as P,pt as te,r as F,rt as I,s as ne,tt as L,u as R,v as z,y as B,z as V}from"../chunks/BPl9BITm.js";import{n as re}from"../chunks/ByaoVvNB.js";import"../chunks/xihTtKlq.js";import{t as H}from"../chunks/wrqalH0a.js";import{i as U,n as ie,r as ae,t as oe}from"../chunks/ib21i2T_.js";import{B as se,J as ce,Q as le,Z as ue,bt as W,ht as de,it as fe,q as pe,t as G,xt as me,yt as he}from"../chunks/D64sGJRN.js";import"../chunks/suTxxv1t.js";import{t as ge}from"../chunks/yShDxCNj.js";import{i as _e,n as ve,o as K,r as ye,t as be}from"../chunks/_b612aVb.js";import"../chunks/Da59TXPe.js";import{t as q}from"../chunks/cMamJTsF.js";import{i as xe,n as Se}from"../chunks/CXvvf4uQ.js";import{i as J}from"../chunks/Bcyn5YUg.js";import{t as Ce}from"../chunks/Bfc9rQXP.js";import{t as we}from"../chunks/C8b3IMj8.js";import{t as Te}from"../chunks/BjxqhpPG.js";var Ee=x({prerender:()=>!1,ssr:()=>!1,trailingSlash:()=>De}),De=`never`,Oe=d(`<span class="mt-1 block text-xs leading-relaxed opacity-80"> </span>`),ke=d(`<li class="flex"><button type="button"><span class="min-w-0 flex-1"><span class="block text-sm"> </span> <!></span> <span aria-hidden="true" class="shrink-0 text-base transition group-hover:translate-x-1">→</span></button></li>`),Ae=d(`<div class="px-7 pt-2 pb-5"><ul class="flex max-h-80 flex-col gap-3 overflow-y-auto"></ul></div>`),je=d(`<p class="mt-2 text-xs font-medium text-red-700"> </p>`),Me=d(`<div class="px-7 pt-1 pb-4"><label class="block text-xs font-medium text-slate-700"> <input autocorrect="off" autocapitalize="off" spellcheck="false" class="mono mt-1 h-10 w-full rounded-md border border-slate-300 bg-white px-3 text-sm outline-none focus:border-brand-700 focus:ring-2 focus:ring-brand-100"/></label> <!></div>`),Ne=d(`<span class="mt-0.5 block text-xs text-slate-500"> </span>`),Pe=d(`<li><label class="flex cursor-pointer items-start gap-3 rounded-md px-2 py-2 transition hover:bg-white"><input type="checkbox"/> <span class="min-w-0 flex-1"><span class="block text-sm font-medium text-slate-900"> </span> <!></span></label></li>`),Fe=d(`<div class="border-t border-hairline px-6 py-3"><div class="mb-2 flex items-center justify-between"><span class="text-xs font-medium uppercase tracking-wide text-slate-500"> </span> <div class="flex gap-2 text-xs"><button type="button" class="font-medium text-slate-600 hover:text-slate-950">Select all</button> <span class="text-slate-300">·</span> <button type="button" class="font-medium text-slate-600 hover:text-slate-950">Select none</button></div></div> <ul class="max-h-72 space-y-1.5 overflow-y-auto rounded-lg border border-hairline bg-slate-50 p-2"></ul></div>`),Ie=d(`<button type="button"> </button>`),Le=d(`<button type="button" class="rounded-md px-3 py-2 text-sm text-slate-600 transition hover:text-slate-950"> </button>`),Re=d(`<button type="button" class="rounded-md border border-slate-300 bg-white px-4 py-2 text-sm text-slate-700 transition hover:bg-slate-100"> </button> <button type="button"> </button>`,1),ze=d(`<div class="fixed inset-0 z-100 flex items-center justify-center px-4" role="presentation"><button type="button" aria-label="Dismiss" class="absolute inset-0 bg-slate-950/40 backdrop-blur-sm"></button> <div role="dialog" aria-modal="true" aria-labelledby="app-dialog-title" aria-describedby="app-dialog-message"><div class="flex gap-4 px-7 pt-7 pb-5"><div> </div> <div class="min-w-0 flex-1 pt-1"><h2 id="app-dialog-title" class="text-lg leading-tight text-slate-950"> </h2> <p id="app-dialog-message" class="mt-2 whitespace-pre-line text-sm leading-relaxed text-slate-600"> </p></div></div> <!> <div class="flex justify-end gap-2 border-t border-hairline bg-slate-50 px-7 py-3"><!></div></div></div>`);function Be(r,a){A(a,!0);let s=I(()=>W.current),c=L(e(new Set)),d=L(``),f=L(null),p=L(null);o(()=>{V(s)?.kind===`checklist`?E(c,new Set(V(s).opts.items.filter(e=>e.defaultChecked).map(e=>e.id)),!0):E(c,new Set,!0),V(s)?.kind===`prompt`?(E(d,V(s).opts.defaultValue??``,!0),E(f,null),queueMicrotask(()=>V(p)?.focus())):(E(d,``),E(f,null))});function g(e){let t=new Set(V(c));t.has(e)?t.delete(e):t.add(e),E(c,t,!0)}function ee(){V(s)?.kind===`checklist`&&E(c,new Set(V(s).opts.items.map(e=>e.id)),!0)}function x(){E(c,new Set,!0)}function S(){V(s)?.kind===`prompt`?W.resolvePrompt(null):W.resolveCurrent(!1)}function M(){if(V(s)?.kind===`checklist`)W.resolveCurrent(!0,Array.from(V(c)));else if(V(s)?.kind===`prompt`){let e=V(d),t=V(s).opts.validate?V(s).opts.validate(e):null;if(t){E(f,t,!0);return}W.resolvePrompt(e)}else W.resolveCurrent(!0)}function N(e){V(s)&&(e.key===`Escape`?(e.preventDefault(),S()):e.key===`Enter`&&V(s).kind!==`checklist`&&(e.preventDefault(),M()))}let P={default:{icon:`?`,iconBg:`bg-slate-100`,iconColor:`text-slate-700`,confirmBtn:`bg-slate-900 hover:bg-slate-800 text-white`,check:`accent-slate-700`},danger:{icon:`!`,iconBg:`bg-rose-50`,iconColor:`text-rose-600`,confirmBtn:`bg-rose-600 hover:bg-rose-500 text-white`,check:`accent-rose-600`},info:{icon:`i`,iconBg:`bg-brand-50`,iconColor:`text-brand-700`,confirmBtn:`bg-brand-700 hover:bg-brand-600 text-white`,check:`accent-brand-700`},success:{icon:`✓`,iconBg:`bg-emerald-50`,iconColor:`text-emerald-600`,confirmBtn:`bg-emerald-600 hover:bg-emerald-500 text-white`,check:`accent-emerald-600`},warning:{icon:`!`,iconBg:`bg-amber-50`,iconColor:`text-amber-600`,confirmBtn:`bg-amber-600 hover:bg-amber-500 text-white`,check:`accent-amber-600`}},F=I(()=>V(s)?.opts.tone??(V(s)?.kind===`alert`?`info`:`default`)),B=I(()=>P[V(F)]);var re=u();h(`keydown`,y,N);var H=b(re),ae=e=>{var r=ze(),a=v(r),o=m(a,2),u=v(o),h=v(u),y=v(h,!0);j(h);var w=m(h,2),A=v(w),N=v(A,!0);j(A);var P=m(A,2),F=v(P,!0);j(P),j(w),j(u);var I=m(u,2),L=e=>{var n=Ae(),r=v(n);i(r,21,()=>V(s).opts.options,e=>e.id,(e,n)=>{var r=ke(),i=v(r),a=v(i),o=v(a),s=v(o,!0);j(o);var c=m(o,2),u=e=>{var r=Oe(),i=v(r,!0);j(r),_(()=>t(i,V(n).description)),D(e,r)};O(c,e=>{V(n).description&&e(u)}),j(a),te(2),j(i),j(r),_(()=>{z(i,1,`group flex w-full items-center justify-between gap-4 rounded-xl px-5 py-4 text-left shadow-sm shadow-slate-950/5 transition hover:shadow-md focus:ring-2 focus:ring-offset-2 focus:outline-none ${V(B).confirmBtn}`),t(s,V(n).label)}),l(`click`,i,()=>W.resolveChoice(V(n).id)),D(e,r)}),j(r),j(n),D(e,n)},re=e=>{var n=Me(),r=v(n),i=v(r),a=m(i);k(a),ne(a,e=>E(p,e),()=>V(p)),j(r);var o=m(r,2),c=e=>{var n=je(),r=v(n,!0);j(n),_(()=>t(r,V(f))),D(e,n)};O(o,e=>{V(f)&&e(c)}),j(n),_(()=>{t(i,`${V(s).opts.inputLabel??`Value`??``} `),R(a,`type`,V(s).opts.password?`password`:`text`),R(a,`autocomplete`,V(s).opts.password?`new-password`:`off`),R(a,`placeholder`,V(s).opts.placeholder??``)}),l(`input`,a,()=>E(f,null)),C(a,()=>V(d),e=>E(d,e)),D(e,n)},H=e=>{var n=Fe(),r=v(n),a=v(r),o=v(a);j(a);var u=m(a,2),d=v(u),f=m(d,4);j(u),j(r);var p=m(r,2);i(p,21,()=>V(s).opts.items,e=>e.id,(e,n)=>{var r=Pe(),i=v(r),a=v(i);k(a);var o=m(a,2),s=v(o),u=v(s,!0);j(s);var d=m(s,2),f=e=>{var r=Ne(),i=v(r,!0);j(r),_(()=>t(i,V(n).description)),D(e,r)};O(d,e=>{V(n).description&&e(f)}),j(o),j(i),j(r),_(e=>{z(a,1,`mt-0.5 h-4 w-4 rounded ${V(B).check}`),T(a,e),t(u,V(n).label)},[()=>V(c).has(V(n).id)]),l(`change`,a,()=>g(V(n).id)),D(e,r)}),j(p),j(n),_(()=>t(o,`${V(c).size??``} of ${V(s).opts.items.length??``} selected`)),l(`click`,d,ee),l(`click`,f,x),D(e,n)};O(I,e=>{V(s).kind===`choice`?e(L):V(s).kind===`prompt`?e(re,1):V(s).kind===`checklist`&&e(H,2)});var ae=m(I,2),se=v(ae),ce=e=>{var n=Ie(),r=v(n,!0);j(n),_(()=>{z(n,1,`rounded-md px-4 py-2 text-sm transition ${V(B).confirmBtn}`),t(r,V(s).opts.buttonLabel??`OK`)}),l(`click`,n,S),D(e,n)},le=e=>{var n=Le(),r=v(n,!0);j(n),_(()=>t(r,V(s).opts.cancelLabel??`Close`)),l(`click`,n,S),D(e,n)},ue=e=>{var n=Re(),r=b(n),i=v(r,!0);j(r);var a=m(r,2),o=v(a,!0);j(a),_(()=>{t(i,V(s).opts.cancelLabel??`Cancel`),z(a,1,`rounded-md px-4 py-2 text-sm transition focus:ring-2 focus:ring-offset-2 focus:outline-none ${V(B).confirmBtn}`),t(o,V(s).opts.confirmLabel??`Confirm`)}),l(`click`,r,S),l(`click`,a,M),D(e,n)};O(se,e=>{V(s).kind===`alert`?e(ce):V(s).kind===`choice`?e(le,1):e(ue,-1)}),j(ae),j(o),j(r),_(()=>{z(o,1,`relative w-full ${V(s).kind===`checklist`||V(s).kind===`choice`?`max-w-lg`:`max-w-md`} overflow-hidden rounded-2xl border border-hairline bg-white shadow-2xl shadow-slate-950/20`),z(h,1,`flex h-11 w-11 shrink-0 items-center justify-center rounded-full text-lg ${V(B).iconBg} ${V(B).iconColor}`),t(y,V(B).icon),t(N,V(s).opts.title),t(F,V(s).opts.message)}),l(`click`,a,S),n(3,o,()=>U,()=>({duration:140,start:.96,easing:oe})),n(3,r,()=>ie,()=>({duration:120,easing:oe})),D(e,r)};O(H,e=>{V(s)&&e(ae)}),D(r,re),w()}c([`click`,`input`,`change`]);var Ve=d(`<div class="untangler-sky svelte-dds6m1" aria-hidden="true"><div class="untangler svelte-dds6m1"><svg viewBox="0 0 240 110" role="img" class="svelte-dds6m1"><g class="tangle tangle-outline svelte-dds6m1"><path d="M5 55 C 32 12, 48 95, 72 32 S 116 80, 148 42 S 196 22, 232 62" class="svelte-dds6m1"></path><path d="M5 70 C 28 32, 52 95, 78 22 S 124 72, 156 44 S 200 30, 232 76" class="svelte-dds6m1"></path><path d="M5 40 C 36 82, 60 12, 92 70 S 118 30, 150 52 S 196 70, 230 30" class="svelte-dds6m1"></path><path d="M5 88 C 30 60, 48 100, 80 65 S 130 95, 165 70 S 210 88, 232 60" class="svelte-dds6m1"></path></g><g class="tangle tangle-fill svelte-dds6m1"><path d="M5 55 C 32 12, 48 95, 72 32 S 116 80, 148 42 S 196 22, 232 62" class="svelte-dds6m1"></path><path d="M5 70 C 28 32, 52 95, 78 22 S 124 72, 156 44 S 200 30, 232 76" class="svelte-dds6m1"></path><path d="M5 40 C 36 82, 60 12, 92 70 S 118 30, 150 52 S 196 70, 230 30" class="svelte-dds6m1"></path><path d="M5 88 C 30 60, 48 100, 80 65 S 130 95, 165 70 S 210 88, 232 60" class="svelte-dds6m1"></path></g><g class="clean clean-outline svelte-dds6m1"><line x1="5" y1="30" x2="232" y2="30" class="svelte-dds6m1"></line><line x1="5" y1="50" x2="232" y2="50" class="svelte-dds6m1"></line><line x1="5" y1="70" x2="232" y2="70" class="svelte-dds6m1"></line><line x1="5" y1="90" x2="232" y2="90" class="svelte-dds6m1"></line></g><g class="clean clean-fill svelte-dds6m1"><line x1="5" y1="30" x2="232" y2="30" class="svelte-dds6m1"></line><line x1="5" y1="50" x2="232" y2="50" class="svelte-dds6m1"></line><line x1="5" y1="70" x2="232" y2="70" class="svelte-dds6m1"></line><line x1="5" y1="90" x2="232" y2="90" class="svelte-dds6m1"></line></g><g class="glint svelte-dds6m1"><rect x="-18" y="18" width="14" height="78" rx="3" class="svelte-dds6m1"></rect></g></svg></div></div>`);function He(e,t){A(t,!0);let n=[`arrowup`,`arrowup`,`arrowdown`,`arrowdown`,`arrowleft`,`arrowright`,`arrowleft`,`arrowright`,`b`,`a`],r=L(!1),i=``,a=0,s=null;function c(e){return e instanceof HTMLElement?e.isContentEditable?!0:!!e.closest(`input, textarea, select, [contenteditable='true']`):!1}function l(){E(r,!1),s&&clearTimeout(s),requestAnimationFrame(()=>{E(r,!0),s=setTimeout(()=>{E(r,!1)},5200)})}function d(e){return e===n[a]?(a+=1,a<n.length?!1:(a=0,!0)):(a=+(e===n[0]),!1)}function f(e){return e.length!==1||(i=(i+e).slice(-9),i!==`spaghetti`)?!1:(i=``,!0)}function p(e){if(c(e.target))return;let t=e.key.toLowerCase();(d(t)||f(t))&&l()}o(()=>()=>{s&&clearTimeout(s)});var m=u();h(`keydown`,y,p);var g=b(m),_=e=>{D(e,Ve())};O(g,e=>{V(r)&&e(_)}),D(e,m),w()}var Ue=4,We=5e3,Ge=e=>{if(e.op!==`delete`)switch(e.kind){case`feature`:return`/features/${e.id}`;case`project`:return`/projects/${e.id}`;case`implementation-status`:return`/features/${e.id}`}},Ke=800,qe=new class{#e=L(e([]));get toasts(){return V(this.#e)}set toasts(e){E(this.#e,e,!0)}nextId=1;subscribed=!1;unsubscribe=null;timers=new Map;recentKeys=new Map;start(){this.subscribed||(this.subscribed=!0,this.unsubscribe=ge(e=>this.handle(e)))}dismiss(e){let t=this.timers.get(e);t&&(clearTimeout(t),this.timers.delete(e)),this.toasts=this.toasts.filter(t=>t.id!==e)}reset(){for(let e of this.timers.values())clearTimeout(e);this.timers.clear(),this.toasts=[],this.recentKeys.clear(),this.unsubscribe&&this.unsubscribe(),this.unsubscribe=null,this.subscribed=!1}handle(e){let t=`${e.kind}:${e.id}:${e.op??`save`}`,n=Date.now(),r=this.recentKeys.get(t);if(r!==void 0&&n-r<Ke){this.recentKeys.set(t,n);return}this.recentKeys.set(t,n);let i=this.nextId++,a=[{id:i,kind:e.kind,entityId:e.id,name:e.name,projectName:e.projectName,op:e.op??`save`,changeOp:e.changeOp,changePath:e.changePath,previousName:e.previousName,actingFor:e.actingFor,...Ge(e)?{href:Ge(e)}:{}},...this.toasts].slice(0,Ue),o=new Set(a.map(e=>e.id));for(let[e,t]of this.timers)o.has(e)||(clearTimeout(t),this.timers.delete(e));this.toasts=a;let s=setTimeout(()=>this.dismiss(i),We);this.timers.set(i,s)}},Je=d(`<span class="rounded bg-purple-100 px-1.5 py-0.5 text-[9px] text-purple-800"> </span>`),Ye=d(`<span class="shrink-0 text-slate-400" aria-hidden="true">&rsaquo;</span>`),Xe=d(`<!> <span> </span>`,1),Ze=d(`<div class="mt-0.5 truncate text-[11px] text-slate-500"> </div>`),Qe=d(`<a class="rounded-md bg-white/70 px-2 py-1 text-xs font-medium text-slate-700 hover:bg-white hover:text-brand-800">View</a>`),$e=d(`<div><div class="min-w-0 flex-1"><div class="flex flex-wrap items-center gap-x-1.5 gap-y-0.5 text-[10px] font-semibold uppercase tracking-wide"><span class="text-slate-500"> </span> <!></div> <div class="mt-0.5 flex min-w-0 flex-wrap items-center gap-x-1 text-sm text-slate-900"></div> <!></div> <div class="flex shrink-0 items-center gap-1"><!> <button type="button" class="rounded-md px-1.5 py-1 text-xs text-slate-500 hover:bg-white/70 hover:text-slate-900" aria-label="Dismiss">&times;</button></div></div>`),et=d(`<div class="pointer-events-none fixed top-20 right-4 z-50 flex w-full max-w-md flex-col gap-2" role="status" aria-live="polite"></div>`);function tt(e,a){A(a,!1),F(()=>{qe.start()});function o(e){switch(e){case`feature`:return`feature`;case`project`:return`project`;case`implementation-status`:return`status`}}function s(e){switch(e){case`feature`:return`border-cyan-200 bg-cyan-50`;case`project`:return`border-violet-200 bg-violet-50`;case`implementation-status`:return`border-emerald-200 bg-emerald-50`}}function c(e){if(e.op===`delete`)return`deleted`;switch(e.changeOp){case`added`:return`added`;case`removed`:return`removed`;case`renamed`:return`renamed`;case`edited`:return`edited`;case`queued`:return`queued`;case`unqueued`:return`unqueued`;case`created`:return`created`;case`deleted`:return`deleted`;default:return`saved`}}function d(e){let t=[];e.projectName&&t.push(e.projectName);let n=e.changePath?.[0],r=n!==void 0&&(e.name===n||!e.name);if(e.name&&!r&&t.push(e.name),e.changePath&&e.changePath.length>0)for(let n of e.changePath)t.push(n);else e.name&&t[t.length-1]!==e.name&&t.push(e.name);let i=[];for(let e of t)e!==`unknown`&&i[i.length-1]!==e&&i.push(e);return i.length===0&&i.push(e.entityId),i}function f(e){if(e.op!==`delete`)return K(e.kind,e.entityId)??e.href}N();var p=u(),h=b(p),g=e=>{var a=et();i(a,5,()=>qe.toasts,e=>e.id,(e,a)=>{let u=M(()=>d(V(a))),p=M(()=>f(V(a)));var h=$e(),g=v(h),y=v(g),ee=v(y),x=v(ee);j(ee);var S=m(ee,2),C=e=>{var n=Je(),r=v(n);j(n),_(()=>t(r,`for ${V(a).actingFor??``}`)),D(e,n)};O(S,e=>{V(a).actingFor&&e(C)}),j(y);var w=m(y,2);i(w,5,()=>V(u),r,(e,n,r)=>{var i=Xe(),a=b(i),o=e=>{D(e,Ye())};O(a,e=>{r>0&&e(o)});var s=m(a,2),c=v(s,!0);j(s),_(()=>{z(s,1,`truncate ${r===V(u).length-1?`font-semibold`:`text-slate-600`}`),t(c,V(n))}),D(e,i)}),j(w);var T=m(w,2),E=e=>{var n=Ze(),r=v(n);j(n),_(()=>t(r,`was “${V(a).previousName??``}”`)),D(e,n)};O(T,e=>{V(a).changeOp===`renamed`&&V(a).previousName&&e(E)}),j(g);var k=m(g,2),A=v(k),N=e=>{var t=Qe();_(()=>R(t,`href`,V(p))),l(`click`,t,()=>qe.dismiss(V(a).id)),D(e,t)};O(A,e=>{V(p)&&e(N)});var P=m(A,2);j(k),j(h),_((e,n,r)=>{z(h,1,`pointer-events-auto flex items-start gap-3 rounded-lg border px-3 py-2 shadow-md shadow-slate-950/10 ${e??``}`),t(x,`MCP · ${n??``} ${r??``}`)},[()=>s(V(a).kind),()=>c(V(a)),()=>o(V(a).kind)]),l(`click`,P,()=>qe.dismiss(V(a).id)),n(1,h,()=>ae,()=>({x:24,duration:180,easing:oe})),n(2,h,()=>ie,()=>({duration:140})),D(e,h)}),j(a),D(e,a)};O(h,e=>{qe.toasts.length>0&&e(g)}),D(e,p),w()}c([`click`]);var nt=e=>{let t=L(null),n=L(null);if(!e)return{get element(){return V(t)},get rect(){return V(n)},dispose(){}};let r=null,i=e=>{E(n,e?e.getBoundingClientRect():null,!0)},a=()=>{let n=document.querySelector(e);n!==r&&(r=n,E(t,n,!0)),i(n)};a();let o=new MutationObserver(a);o.observe(document.body,{childList:!0,subtree:!0});let s=0,c=()=>{s||=requestAnimationFrame(()=>{s=0,r&&i(r)})},l=new ResizeObserver(c);r&&l.observe(r);let u=new MutationObserver(()=>{l.disconnect(),r&&l.observe(r)});u.observe(document.body,{childList:!0,subtree:!0});let d=()=>c(),f=()=>c();return window.addEventListener(`scroll`,d,!0),window.addEventListener(`resize`,f),{get element(){return V(t)},get rect(){return V(n)},dispose(){s&&cancelAnimationFrame(s),o.disconnect(),u.disconnect(),l.disconnect(),window.removeEventListener(`scroll`,d,!0),window.removeEventListener(`resize`,f)}}},rt=(e,t)=>{let n=e instanceof HTMLTextAreaElement?HTMLTextAreaElement.prototype:HTMLInputElement.prototype,r=Object.getOwnPropertyDescriptor(n,`value`)?.set;r?r.call(e,t):e.value=t,e.dispatchEvent(new Event(`input`,{bubbles:!0})),e.dispatchEvent(new Event(`change`,{bubbles:!0}))},it=e=>{let t=[];for(let n of e){let e=document.querySelector(n.selector);if(!e){t.push(n);continue}e.value.length===0&&rt(e,n.value)}return t},at=e=>{let t=new WeakSet,n=()=>{e.matches(`:popover-open`)&&e.hidePopover(),e.showPopover()},r=new MutationObserver(r=>{if(!e.matches(`:popover-open`))return;let i=!1;for(let e of r){if(e.type!==`attributes`||e.attributeName!==`open`)continue;let n=e.target;n instanceof HTMLDialogElement&&(n.hasAttribute(`open`)?t.has(n)||(t.add(n),i=!0):t.delete(n))}i&&n()});return r.observe(document.body,{subtree:!0,attributes:!0,attributeFilter:[`open`]}),{dispose(){r.disconnect()}}},ot=d(`<div class="mt-3 rounded-md border border-amber-200 bg-amber-50 px-2.5 py-2 text-[11px] text-amber-900"><p class="mb-1.5 font-medium">First, head to the right page.</p> <button type="button" class="rounded-md bg-slate-900 px-2.5 py-1 text-[11px] font-medium text-white hover:bg-slate-800"> </button></div>`),st=d(`<p class="mt-3 text-[10px] italic text-slate-500">Click the highlighted element to continue.</p>`),ct=d(`<p class="mt-3 text-[10px] italic text-slate-500">Do the action above to continue.</p>`),lt=d(`<p class="mt-3 text-[10px] italic text-amber-700">Finish the action above first, then click Next.</p>`),ut=d(`<aside popover="manual" class="fixed z-1010 m-0 w-80 max-w-[calc(100vw-3rem)] rounded-xl border border-brand-200 bg-white p-4 shadow-2xl shadow-slate-950/20 transition-[top,left,bottom,right] duration-200" aria-label="Interactive tutorial"><header class="mb-2 flex items-start justify-between gap-3"><div class="min-w-0"><p class="text-[10px] font-semibold uppercase tracking-wide text-brand-700"> </p> <h3 class="mt-0.5 text-sm font-semibold text-slate-950"> </h3></div> <button type="button" class="rounded-md px-1.5 py-0.5 text-xs text-slate-400 hover:bg-slate-100 hover:text-slate-700" aria-label="Exit tutorial" title="Exit tutorial">x</button></header> <p class="whitespace-pre-line text-xs leading-5 text-slate-700"> </p> <!> <footer class="mt-3 flex items-center justify-between gap-2"><button type="button" class="rounded-md p-1 text-slate-500 hover:bg-slate-100 hover:text-slate-800 disabled:cursor-not-allowed disabled:opacity-30" aria-label="Previous step" title="Back">&larr;</button> <button type="button" class="rounded-md border border-slate-300 bg-white px-2.5 py-1 text-[11px] font-medium text-slate-600 hover:bg-slate-50">Exit</button> <button type="button" class="rounded-md bg-brand-700 px-3 py-1 text-[11px] font-semibold text-white hover:bg-brand-800 disabled:cursor-not-allowed disabled:bg-slate-300"> </button></footer></aside>`);function dt(e,n){A(n,!0);let r=L(null);o(()=>{n.panelEl?.(V(r))});let i=I(()=>n.stepNumber===1),a=I(()=>n.stepNumber===n.totalSteps),s=I(()=>{switch(n.placement.kind){case`bottom-right`:return`bottom: 1.5rem; right: 1.5rem; left: auto; top: auto;`;case`bottom-left`:return`bottom: 1.5rem; left: 1.5rem; right: auto; top: auto;`;case`absolute`:return`top: ${n.placement.top}px; left: ${n.placement.left}px; bottom: auto; right: auto;`}});var c=ut(),u=v(c),d=v(u),f=v(d),p=v(f);j(f);var h=m(f,2),g=v(h,!0);j(h),j(d);var y=m(d,2);j(u);var b=m(u,2),x=v(b,!0);j(b);var S=m(b,2),C=e=>{var r=ot(),i=m(v(r),2),a=v(i);j(i),j(r),_(()=>t(a,`${n.step.route.label??``} →`)),l(`click`,i,function(...e){n.onGoToRoute?.apply(this,e)}),D(e,r)},T=e=>{D(e,st())},k=e=>{D(e,ct())},M=e=>{D(e,lt())};O(S,e=>{!n.onCorrectRoute&&n.step.route?e(C):n.step.advance.kind===`click`?e(T,1):n.step.advance.kind===`event`?e(k,2):n.step.advance.kind===`manual`&&!n.nextEnabled&&e(M,3)});var N=m(S,2),P=v(N),te=m(P,2),F=m(te,2),z=v(F);j(F),j(N),j(c),ne(c,e=>E(r,e),()=>V(r)),_(()=>{ee(c,V(s)),t(p,`Tutorial · step ${n.stepNumber??``} of ${n.totalSteps??``}`),t(g,n.step.title),t(x,n.step.body),P.disabled=V(i),F.disabled=!n.nextEnabled,R(F,`title`,n.nextEnabled?V(a)?`Finish the tour`:`Next step`:`Finish the current action first`),t(z,`${V(a)?`Finish`:`Next`} →`)}),l(`click`,y,function(...e){n.onExit?.apply(this,e)}),l(`click`,P,function(...e){n.onPrev?.apply(this,e)}),l(`click`,te,function(...e){n.onExit?.apply(this,e)}),l(`click`,F,function(...e){n.onNext?.apply(this,e)}),D(e,c),w()}c([`click`]);var ft=d(`<div class="pointer-events-none fixed z-20 rounded-lg ring-4 ring-brand-400 ring-offset-2 ring-offset-transparent" aria-hidden="true"></div>`),pt=d(`<div class="pointer-events-none fixed inset-0 z-20 bg-slate-950/55" aria-hidden="true"></div> <button type="button" class="pointer-events-auto fixed left-1/2 top-20 z-1015 inline-flex -translate-x-1/2 items-center gap-2 rounded-full border border-brand-300 bg-white px-4 py-2 text-xs font-semibold text-brand-800 shadow-lg shadow-slate-950/30 animate-pulse hover:bg-brand-50" aria-label="Scroll up to see highlighted element"><span aria-hidden="true">&uarr;</span> <span>Highlight is above &mdash; click to scroll up</span></button>`,1),mt=d(`<div class="pointer-events-none fixed inset-0 z-20 bg-slate-950/55" aria-hidden="true"></div> <button type="button" class="pointer-events-auto fixed left-1/2 bottom-24 z-1015 inline-flex -translate-x-1/2 items-center gap-2 rounded-full border border-brand-300 bg-white px-4 py-2 text-xs font-semibold text-brand-800 shadow-lg shadow-slate-950/30 animate-pulse hover:bg-brand-50" aria-label="Scroll down to see highlighted element"><span>Highlight is below &mdash; click to scroll down</span> <span aria-hidden="true">&darr;</span></button>`,1),ht=d(`<div class="pointer-events-none fixed inset-0 z-20 bg-slate-950/55" aria-hidden="true"></div>`);function gt(e,t){A(t,!0);let n=L(0);o(()=>{let e=()=>{E(n,window.innerHeight,!0)};return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)});let r=I(()=>t.rect?{top:t.rect.top-10,left:t.rect.left-10,width:t.rect.width+20,height:t.rect.height+20}:null),i=I(()=>!t.rect||V(n)===0?null:t.rect.bottom<64?`above`:t.rect.top>V(n)?`below`:`visible`);var a=u(),s=b(a),c=e=>{var t=ft();_(()=>ee(t,`top: ${V(r).top??``}px; left: ${V(r).left??``}px; width: ${V(r).width??``}px; height: ${V(r).height??``}px; box-shadow: 0 0 0 9999px rgba(15, 23, 42, 0.55);`)),D(e,t)},d=e=>{var t=pt();l(`click`,m(b(t),2),()=>window.scrollBy({top:-window.innerHeight*.7,behavior:`smooth`})),D(e,t)},f=e=>{var t=mt();l(`click`,m(b(t),2),()=>window.scrollBy({top:window.innerHeight*.7,behavior:`smooth`})),D(e,t)},p=e=>{D(e,ht())};O(s,e=>{V(r)&&V(i)===`visible`?e(c):V(r)&&V(i)===`above`?e(d,1):V(r)&&V(i)===`below`?e(f,2):e(p,-1)}),D(e,a),w()}c([`click`]);var _t=d(`<!> <!>`,1);function vt(e,t){A(t,!0);let n=I(()=>q.currentStep),r=I(()=>V(n)?.route?H.url?.pathname===V(n).route.pathname:!0),i=L(null);o(()=>{let e=nt(V(r)?V(n)?.target??null:null);return E(i,e,!0),()=>e.dispose()});let a=I(()=>V(i)?.rect??null),s=I(()=>{if(typeof window>`u`)return{kind:`bottom-right`};let e=V(n)?.panelPosition??`bottom-right`;if(e===`avoid-target`)return V(a)&&V(a).left+V(a).width/2>window.innerWidth/2?{kind:`bottom-left`}:{kind:`bottom-right`};if(e===`below-target`&&V(a)){let e=V(a).bottom+16;if(e+220>window.innerHeight-16)return{kind:`bottom-right`};let t=V(a).left+V(a).width/2-320/2;return{kind:`absolute`,top:e,left:Math.max(16,Math.min(t,window.innerWidth-320-16))}}return{kind:`bottom-right`}}),c=I(()=>!V(n)||V(n).advance.kind!==`manual`?!1:V(n).canAdvance?V(n).canAdvance():!0);o(()=>{let e=V(i)?.element;e&&e.scrollIntoView({behavior:`smooth`,block:`center`})}),o(()=>{let e=V(n);if(!e?.focusSelector||!V(r))return;let t=e.focusSelector,i=!1,a=0,o=()=>{if(i||a++>60)return;let e=document.querySelector(t);if(e){e.focus(),(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)&&e.select();return}requestAnimationFrame(o)};return requestAnimationFrame(o),()=>{i=!0}}),o(()=>{if(!V(n)?.lockScroll)return;let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}}),o(()=>{if(!V(n)?.target||q.stepIndex===0)return;let e=!1,t=null,r=!1,a=setInterval(()=>{r||(V(i)?.element==null?e&&!t&&(t=setTimeout(()=>q.previous(),500)):(e=!0,t&&=(clearTimeout(t),null)))},150);return()=>{r=!0,clearInterval(a),t&&clearTimeout(t)}}),o(()=>{let e=V(n);if(!e||e.advance.kind!==`click`)return;let t=e.advance.selector,r=e=>{let n=e.target;n instanceof Element&&n.closest(t)&&setTimeout(()=>q.next(),0)};return document.addEventListener(`click`,r,!0),()=>document.removeEventListener(`click`,r,!0)}),o(()=>{let e=V(n);if(!e?.prefill||e.prefill.length===0||!V(r))return;let t=[...e.prefill],i=0,a=!1,o=()=>{a||(t=it(t),t.length>0&&(i=requestAnimationFrame(o)))};return o(),()=>{a=!0,i&&cancelAnimationFrame(i)}});let l=L(null);o(()=>{V(l)&&(V(n)&&!V(l).matches(`:popover-open`)&&V(l).showPopover(),!V(n)&&V(l).matches(`:popover-open`)&&V(l).hidePopover())}),o(()=>{if(!V(l))return;let e=at(V(l));return()=>e.dispose()});function d(){V(n)?.route&&re(V(n).route.pathname)}var f=u(),p=b(f),h=e=>{var t=_t(),i=b(t),o=e=>{gt(e,{get rect(){return V(a)}})};O(i,e=>{V(r)&&e(o)});var u=m(i,2);{let e=I(()=>q.stepIndex+1);dt(u,{get step(){return V(n)},get stepNumber(){return V(e)},get totalSteps(){return q.totalSteps},get onCorrectRoute(){return V(r)},get placement(){return V(s)},get nextEnabled(){return V(c)},panelEl:e=>E(l,e,!0),onGoToRoute:d,onPrev:()=>q.previous(),onNext:()=>q.next(),onExit:()=>q.cancel()})}D(e,t)};O(p,e=>{V(n)&&e(h)}),D(e,f),w()}var Y=(e,t={})=>{let n=new URLSearchParams;t.tab&&t.tab!==`build`&&n.set(`tab`,t.tab),t.surface&&n.set(`surface`,t.surface),t.panel&&t.panel!==`actions`&&n.set(`panel`,t.panel),t.focus&&n.set(`focus`,t.focus);let r=n.toString();return`/features/${encodeURIComponent(e)}${r?`?${r}`:``}`},yt=e=>`/projects/${encodeURIComponent(e)}`,bt=e=>`/domains/${encodeURIComponent(e)}`,xt=e=>`action:${e}`,St=(e,t)=>`tab:${e}:${t}`,X=(...e)=>e.filter(e=>typeof e==`string`&&e.trim().length>0).join(` `).toLowerCase(),Ct=e=>(e??[]).map(pe).join(` `),wt=e=>{if(e==null)return``;if(typeof e==`object`)try{return JSON.stringify(e)}catch{return``}return String(e)},Tt=e=>{switch(e.type){case`set_state`:return`Set ${e.path} = ${wt(e.value)}`.trim();case`show_message`:return`“${e.message}”`;case`emit_event`:return`Emit ${e.event}`;case`block_action`:return`Block: ${e.reason}`;case`allow_action`:return`Allow action`;case`transition_surface`:return`Transition surface`;case`append_to_list`:return`Append to ${e.path}`;case`remove_from_list`:return`Remove from ${e.path}`;case`update_list_item`:return`Update ${e.field} in ${e.path}`;case`advance_time`:return`Advance time`}},Et=e=>e.description?.trim()||`${ue(e.category)} rule`,Dt=e=>{let t=[],n=new Map;for(let t of e.projects)for(let e of t.featureIds)n.has(e)||n.set(e,{id:t.id,name:t.name});let r=e=>{t.push(e)};for(let t of e.domains)r({id:`domain:${t.id}`,kind:`domain`,title:t.name,subtitle:t.description,haystack:X(t.name,t.description),nav:{href:bt(t.id)}});for(let t of e.projects)r({id:`project:${t.id}`,kind:`project`,title:t.name,subtitle:t.description,projectId:t.id,projectName:t.name,haystack:X(t.name,t.description,Ct(t.tags)),nav:{href:yt(t.id)}});for(let t of e.features){let e=n.get(String(t.id)),i={featureId:String(t.id),featureName:t.name,projectId:e?.id,projectName:e?.name};r({id:`feature:${i.featureId}`,kind:`feature`,title:t.name,subtitle:t.description,projectId:i.projectId,projectName:i.projectName,featureId:i.featureId,featureName:t.name,haystack:X(t.name,t.description,Ct(t.tags)),nav:{href:Y(i.featureId)}});for(let e of t.surfaces)kt(r,e,i);for(let e of t.personas){let n=t.surfaces[0]?.id;r({id:`persona:${i.featureId}:${e.id}`,kind:`persona`,title:e.name,subtitle:e.description,...Ot(i),haystack:X(e.name,e.description),nav:{href:n?Y(i.featureId,{surface:String(n),panel:`personas`}):Y(i.featureId)}})}for(let e of t.resources)r({id:`resource:${i.featureId}:${e.id}`,kind:`resource`,title:e.name,subtitle:[e.kind,e.provider].filter(Boolean).join(` · `),...Ot(i),haystack:X(e.name,e.description,e.provider,e.location,e.complianceTags?.join(` `)),nav:{href:Y(i.featureId,{tab:`resources`})}});for(let e of t.entities){let t=ce(e.namespace);r({id:`entity:${i.featureId}:${e.id}`,kind:`entity`,title:t,subtitle:e.description,...Ot(i),haystack:X(t,e.namespace,e.description),nav:{href:Y(i.featureId,{tab:`data`})}});for(let n of e.fields)jt(r,n,e.id,t,i)}for(let e of t.events??[])r({id:`event:${i.featureId}:${e.id}`,kind:`event`,title:String(e.name),subtitle:e.description,...Ot(i),haystack:X(String(e.name),e.description,(e.payloadSchema??[]).map(e=>e.name).join(` `)),nav:{href:Y(i.featureId,{tab:`events`})}});for(let e of t.valueSets??[])r({id:`value-set:${i.featureId}:${e.id}`,kind:`value-set`,title:e.name,subtitle:e.values.join(`, `),...Ot(i),haystack:X(e.name,e.description,e.values.join(` `)),nav:{href:Y(i.featureId,{tab:`data`})}});for(let e of t.featureInvariants??[])r({id:`invariant:${i.featureId}:feature:${e.id}`,kind:`invariant`,title:e.name,subtitle:e.message||e.description,...Ot(i),haystack:X(e.name,e.message,e.description),nav:{href:Y(i.featureId,{tab:`invariants`})}})}return t},Ot=e=>({projectId:e.projectId,projectName:e.projectName,featureId:e.featureId,featureName:e.featureName}),Z=(e,t)=>({...Ot(e),surfaceId:String(t.id),surfaceName:t.name}),kt=(e,t,n)=>{let r=String(t.id);e({id:`surface:${n.featureId}:${r}`,kind:`surface`,title:t.name,subtitle:[xe(t.type),t.description].filter(Boolean).join(` · `),...Z(n,t),haystack:X(t.name,xe(t.type),t.description),nav:{href:Y(n.featureId,{surface:r})}});for(let i of t.stateDefinitions){let a=ce(i.path);e({id:`state:${n.featureId}:${r}:${i.id}`,kind:`state`,title:a,subtitle:[i.type,i.description].filter(Boolean).join(` · `),...Z(n,t),haystack:X(a,String(i.path),i.type,i.description),nav:{href:Y(n.featureId,{surface:r,panel:`state`,focus:St(r,`state`)})}})}for(let i of t.rules)e({id:`rule:${n.featureId}:${r}:${i.id}`,kind:`rule`,title:Et(i),subtitle:`${ue(i.category)} · ${Tt(i.effect)}`,...Z(n,t),haystack:X(i.description,ue(i.category),Tt(i.effect)),nav:{href:Y(n.featureId,{surface:r,panel:`rules`,focus:St(r,`rules`)})}});for(let i of t.invariants)e({id:`invariant:${n.featureId}:${r}:${i.id}`,kind:`invariant`,title:i.name,subtitle:i.message||i.description,...Z(n,t),haystack:X(i.name,i.message,i.description),nav:{href:Y(n.featureId,{surface:r,panel:`invariants`,focus:St(r,`invariants`)})}});for(let i of t.transitions){let a=i.label?.trim()||`Transition`;e({id:`transition:${n.featureId}:${r}:${i.id}`,kind:`transition`,title:a,subtitle:i.description,...Z(n,t),haystack:X(i.label,i.description),nav:{href:Y(n.featureId,{tab:`transitions`})}})}for(let r of t.actions)At(e,r,t,n)},At=(e,t,n,r)=>{let i=String(n.id),a=String(t.id),o=Y(r.featureId,{surface:i,panel:`actions`,focus:xt(a)});e({id:`action:${r.featureId}:${a}`,kind:`action`,title:t.name,subtitle:t.intent,...Z(r,n),haystack:X(t.name,t.intent,(t.roles??[]).join(` `)),nav:{href:o}});for(let i of t.parameters)e({id:`parameter:${r.featureId}:${a}:${i.id}`,kind:`parameter`,title:i.name,subtitle:[i.type,i.description].filter(Boolean).join(` · `),...Z(r,n),haystack:X(i.name,i.type,i.description),nav:{href:o}});for(let i of t.rules)e({id:`rule:${r.featureId}:${a}:${i.id}`,kind:`rule`,title:Et(i),subtitle:`${ue(i.category)} · ${Tt(i.effect)}`,...Z(r,n),haystack:X(i.description,ue(i.category),Tt(i.effect)),nav:{href:o}});let s=[...t.effects,...t.onBlockedEffects??[]];for(let i of s)e({id:`effect:${r.featureId}:${a}:${i.id}`,kind:`effect`,title:Tt(i),subtitle:`${Se(i.type)} · ${t.name}`,...Z(r,n),haystack:X(Tt(i),Se(i.type),i.description),nav:{href:o}});for(let i of t.invariants)e({id:`invariant:${r.featureId}:${a}:${i.id}`,kind:`invariant`,title:i.name,subtitle:i.message||i.description,...Z(r,n),haystack:X(i.name,i.message,i.description),nav:{href:o}});for(let i of t.scenarios??[])e({id:`scenario:${r.featureId}:${a}:${i.id}`,kind:`scenario`,title:i.name,subtitle:[i.description,`${t.name} scenario`].filter(Boolean).join(` · `),...Z(r,n),haystack:X(i.name,i.description,t.name),nav:{href:o}})},jt=(e,t,n,r,i,a=``)=>{let o=a?`${a}.${t.name}`:t.name;e({id:`entity-field:${i.featureId}:${n}:${o}`,kind:`entity-field`,title:t.name,subtitle:[t.type,r,t.description].filter(Boolean).join(` · `),...Ot(i),haystack:X(t.name,t.type,r,t.description,t.path),nav:{href:Y(i.featureId,{tab:`data`})}});for(let a of t.fields??[])jt(e,a,n,r,i,o);t.items&&jt(e,t.items,n,r,i,`${o}[]`)},Mt=e=>async()=>{let[t,n,r]=await Promise.all([e.projects.list(),e.features.list(),e.domains.list()]),[i,a]=await Promise.all([Promise.all(t.map(t=>e.projects.get(le(String(t.id))))),Promise.all(n.map(t=>e.features.get(fe(String(t.id)))))]);return Dt({projects:i.filter(e=>e!==null).map(e=>({id:String(e.id),name:e.name,description:e.description,tags:e.tags,featureIds:e.featureIds.map(String)})),features:a.filter(e=>e!==null),domains:r.map(e=>({id:String(e.id),name:e.name,description:e.description}))})},Nt=[`project`,`domain`,`feature`,`surface`,`action`,`state`,`rule`,`invariant`,`effect`,`parameter`,`transition`,`event`,`entity`,`entity-field`,`value-set`,`resource`,`persona`,`scenario`],Pt=(e,t,n)=>{if(!t)return 0;let r=t.toLowerCase();return r.includes(e)?r===e?n*5:r.startsWith(e)?n*4:r.split(/\s+/).some(t=>t.startsWith(e))?n*3:n:0},Ft={project:1.3,domain:1.2,feature:1.25,surface:1.15,action:1.1,state:1.05,entity:1.05,event:1,parameter:.95,rule:.95,invariant:.95,effect:.9,transition:.9,"entity-field":.9,"value-set":.95,resource:.95,persona:1,scenario:.95},It=(e,t)=>{if(!t)return 0;let n=Pt(t,e.title,100),r=e.subtitle?Pt(t,e.subtitle,25):0,i=e.haystack.includes(t)?10:0,a=Math.max(n,r,i);return a===0?0:a*(Ft[e.kind]??1)},Lt=(e,t,n=40)=>{let r=t.trim().toLowerCase();if(!r)return[];let i=[];return e.forEach((e,t)=>{let n=It(e,r);n>0&&i.push({doc:e,score:n,index:t})}),i.sort((e,t)=>t.score-e.score||e.index-t.index),i.slice(0,n).map(({doc:e,score:t})=>({doc:e,score:t}))},Rt={search:{load:async()=>{let e=await se(`/api/search-index`);if(!e.ok)throw Error(`Search index fetch failed (${e.status})`);return(await e.json()).docs}},data:{getContainer:()=>G()},sync:{subscribe:e=>ge(e)}},zt=400,Bt=40,Q=new class{host;constructor(e){this.host=e}#e=L(!1);get open(){return V(this.#e)}set open(e){E(this.#e,e,!0)}#t=L(``);get query(){return V(this.#t)}set query(e){E(this.#t,e,!0)}#n=L(!1);get loading(){return V(this.#n)}set loading(e){E(this.#n,e,!0)}#r=L(null);get error(){return V(this.#r)}set error(e){E(this.#r,e,!0)}#i=L(0);get activeIndex(){return V(this.#i)}set activeIndex(e){E(this.#i,e,!0)}#a=L(e([]));get indexDocs(){return V(this.#a)}set indexDocs(e){E(this.#a,e,!0)}built=!1;stale=!1;rebuildTimer=null;unsubscribe=null;#o=I(()=>Lt(this.indexDocs,this.query,Bt));get ranked(){return V(this.#o)}set ranked(e){E(this.#o,e)}#s=I(()=>this.query.trim().length>0);get hasQuery(){return V(this.#s)}set hasQuery(e){E(this.#s,e)}#c=I(()=>{let e=new Map;for(let{doc:t}of this.ranked){let n=e.get(t.kind);n?n.push(t):e.set(t.kind,[t])}return Nt.filter(t=>e.has(t)).map(t=>({kind:t,docs:e.get(t)}))});get grouped(){return V(this.#c)}set grouped(e){E(this.#c,e)}#l=I(()=>this.grouped.flatMap(e=>e.docs));get results(){return V(this.#l)}set results(e){E(this.#l,e)}#u=I(()=>this.results.length);get resultCount(){return V(this.#u)}set resultCount(e){E(this.#u,e)}#d=I(()=>this.results[this.activeIndex]??null);get activeDoc(){return V(this.#d)}set activeDoc(e){E(this.#d,e)}init(){this.unsubscribe||=this.host.sync.subscribe(()=>this.onModelChanged())}onModelChanged(){this.built&&(this.open?this.scheduleRebuild():this.stale=!0)}scheduleRebuild(){this.rebuildTimer&&clearTimeout(this.rebuildTimer),this.rebuildTimer=setTimeout(()=>{this.rebuildTimer=null,this.rebuild()},zt)}async ensureIndex(){this.built&&!this.stale||await this.rebuild()}async rebuild(){this.loading=!0,this.error=null;try{this.indexDocs=await this.host.search.load(),this.built=!0,this.stale=!1}catch(e){try{let e=await this.host.data.getContainer(),t=Mt({features:e.repository,projects:e.projectRepository,domains:e.domainRepository});this.indexDocs=await t(),this.built=!0,this.stale=!1}catch{this.error=e.message}}finally{this.loading=!1}}openPanel(){this.open=!0,this.ensureIndex()}close(){this.open=!1,this.activeIndex=0}toggle(){this.open?this.close():this.openPanel()}setQuery(e){this.query=e,this.activeIndex=0,e.trim().length>0&&!this.open&&this.openPanel()}clear(){this.query=``,this.activeIndex=0}move(e){let t=this.results.length;t!==0&&(this.activeIndex=(this.activeIndex+e+t)%t)}setActive(e){this.activeIndex=e}}(Rt),Vt={project:{label:`Project`,icon:`M3 7a2 2 0 0 1 2-2h4l2 2h8a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`,accent:`text-violet-600`},domain:{label:`Domain`,icon:`M12 3 3 8l9 5 9-5z M3 8v8l9 5 9-5V8`,accent:`text-fuchsia-600`},feature:{label:`Feature`,icon:`M5 4h11l3 3v13H5z M5 9h14 M5 14h14`,accent:`text-brand-600`},surface:{label:`Surface`,icon:`M3 5h18v14H3z M3 9h18`,accent:`text-sky-600`},action:{label:`Action`,icon:`M13 3 4 14h7l-1 7 9-11h-7z`,accent:`text-emerald-600`},state:{label:`State`,icon:`M5 7c0-1.7 3.1-3 7-3s7 1.3 7 3-3.1 3-7 3-7-1.3-7-3z M5 7v10c0 1.7 3.1 3 7 3s7-1.3 7-3V7`,accent:`text-indigo-600`},rule:{label:`Rule`,icon:`M12 3 4 6v6c0 5 4 7 8 9 4-2 8-4 8-9V6z`,accent:`text-rose-600`},invariant:{label:`Invariant`,icon:`M6 11h12v9H6z M9 11V8a3 3 0 0 1 6 0v3`,accent:`text-red-600`},effect:{label:`Effect`,icon:`M12 3v4 M12 17v4 M3 12h4 M17 12h4 M6 6l2.5 2.5 M15.5 15.5 18 18`,accent:`text-teal-600`},parameter:{label:`Parameter`,icon:`M9 4v16 M15 4v16 M4 9h16 M4 15h16`,accent:`text-amber-600`},transition:{label:`Transition`,icon:`M5 12h13 M13 6l6 6-6 6`,accent:`text-cyan-600`},event:{label:`Event`,icon:`M4 12a8 8 0 0 1 16 0 M7 12a5 5 0 0 1 10 0 M11.5 12h1`,accent:`text-pink-600`},entity:{label:`Entity`,icon:`M12 3 3 7.5v9L12 21l9-4.5v-9z M3 7.5 12 12l9-4.5 M12 12v9`,accent:`text-blue-600`},"entity-field":{label:`Field`,icon:`M4 7h16 M4 12h10 M4 17h7`,accent:`text-blue-500`},"value-set":{label:`Value set`,icon:`M4 6h16 M4 12h16 M4 18h16 M2 6h.01 M2 12h.01 M2 18h.01`,accent:`text-purple-600`},resource:{label:`Resource`,icon:`M4 5h16v6H4z M4 13h16v6H4z M7.5 8h.01 M7.5 16h.01`,accent:`text-lime-600`},persona:{label:`Persona`,icon:`M12 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8z M4 21a8 8 0 0 1 16 0`,accent:`text-orange-600`},scenario:{label:`Scenario`,icon:`M9 3v6l-5 8.5A2 2 0 0 0 6 21h12a2 2 0 0 0 2-3.5L15 9V3 M8 3h8`,accent:`text-green-600`}},Ht=e=>Vt[e],Ut=d(`<button type="button" aria-label="Clear search" title="Clear search">×</button>`),Wt=d(`<kbd aria-hidden="true">⌘K</kbd>`),Gt=d(`<p class="px-3 py-6 text-center text-sm text-rose-600"> </p>`),Kt=d(`<p class="px-3 py-6 text-center text-sm text-slate-500">Building index…</p>`),qt=d(`<div class="px-3 py-6 text-center"><p class="text-sm font-medium text-slate-600">Search the whole model</p> <p class="mt-1 text-xs text-slate-400">Projects, features, surfaces, actions, state, rules, effects, personas, entities — anything.</p></div>`),Jt=d(`<p class="px-3 py-6 text-center text-sm text-slate-500"> </p>`),Yt=d(`<span class="text-slate-400"> </span>`),Xt=d(`<span class="text-slate-300">·</span>`),Zt=d(`<span class="block truncate text-[11px] text-slate-500"><!> <!> <!></span>`),Qt=d(`<button type="button" role="option"><span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" class="h-4 w-4" aria-hidden="true"><path></path></svg></span> <span class="min-w-0 flex-1"><span class="block truncate text-sm font-medium text-slate-900"> </span> <!></span> <span class="shrink-0 rounded-full border border-slate-200 px-2 py-0.5 text-[10px] font-medium text-slate-500"> </span></button>`),$t=d(`<p class="px-3 pt-2 pb-1 text-[10px] font-semibold uppercase tracking-wide text-slate-400"> </p> <!>`,1),en=d(`<div id="global-search-listbox" role="listbox" aria-label="Search results" class="absolute left-0 right-0 top-11 z-50 max-h-[70vh] overflow-y-auto rounded-xl border border-slate-200 bg-white p-2 shadow-2xl shadow-slate-950/15"><!></div>`),tn=d(`<div class="relative w-full max-w-xl"><label for="global-search-input" class="sr-only">Search the model</label> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><circle cx="11" cy="11" r="7"></circle><path d="m20 20-3.5-3.5"></path></svg> <input id="global-search-input" type="text" role="combobox" aria-controls="global-search-listbox" autocomplete="off" spellcheck="false" placeholder="Search everything…"/> <!> <!></div>`);function nn(e,n){A(n,!0);let r=S(n,`dark`,3,!1),s=S(n,`lyriks`,3,!1),c=L(null),d=L(null),f=L(null);F(()=>{Q.init()});function p(e){let t=[];return e.projectName&&t.push(e.projectName),e.featureName&&e.kind!==`feature`&&t.push(e.featureName),e.surfaceName&&e.kind!==`surface`&&t.push(e.surfaceName),t.join(` › `)}function g(e){re(e.nav.href),Q.close(),V(d)?.blur()}let ee=I(()=>{let e=0;return Q.grouped.map(t=>({kind:t.kind,meta:Ht(t.kind),rows:t.docs.map(t=>({doc:t,index:e++}))}))});o(()=>{let e=Q.activeIndex;if(!Q.open||!V(f))return;let t=V(f).querySelector(`#gs-opt-${e}`);t&&t.scrollIntoView({block:`nearest`})});function x(e){switch(e.key){case`ArrowDown`:e.preventDefault(),Q.openPanel(),Q.move(1);break;case`ArrowUp`:e.preventDefault(),Q.move(-1);break;case`Enter`:Q.activeDoc&&(e.preventDefault(),g(Q.activeDoc));break;case`Escape`:e.preventDefault(),Q.hasQuery?Q.clear():(Q.close(),V(d)?.blur());break}}function C(e){(e.metaKey||e.ctrlKey)&&e.key.toLowerCase()===`k`&&(e.preventDefault(),Q.openPanel(),V(d)?.focus(),V(d)?.select())}function T(e){Q.open&&V(c)&&!V(c).contains(e.target)&&Q.close()}let M=I(()=>r()?`border-slate-700 bg-slate-900/70 text-white placeholder:text-slate-500 focus:border-brand-400`:`border-slate-300 bg-white/90 text-slate-900 placeholder:text-slate-400 focus:border-brand-400`),N=I(()=>(r(),`text-slate-400`)),te=I(()=>r()?`border-slate-600 text-slate-300`:s()?`border-white/40 text-white/80`:`border-slate-300 text-slate-400`);var B=tn();h(`keydown`,y,C),h(`mousedown`,y,T);var H=m(v(B),2);z(H,0,`pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 ${V(N)??``}`);var U=m(H,2);k(U),ne(U,e=>E(d,e),()=>V(d));var ie=m(U,2),ae=e=>{var t=Ut();_(()=>z(t,1,`absolute right-2 top-1/2 grid h-6 w-6 -translate-y-1/2 place-items-center rounded-md text-sm transition ${r()?`text-slate-400 hover:bg-slate-800 hover:text-white`:`text-slate-400 hover:bg-slate-100 hover:text-slate-700`}`)),l(`click`,t,()=>{Q.clear(),V(d)?.focus()}),D(e,t)},oe=e=>{var t=Wt();_(()=>z(t,1,`pointer-events-none absolute right-2 top-1/2 hidden -translate-y-1/2 rounded border px-1.5 py-0.5 text-[10px] font-medium sm:block ${V(te)??``}`)),D(e,t)};O(ie,e=>{Q.hasQuery?e(ae):e(oe,-1)});var se=m(ie,2),ce=e=>{var n=en(),r=v(n),o=e=>{var n=Gt(),r=v(n,!0);j(n),_(()=>t(r,Q.error)),D(e,n)},s=e=>{D(e,Kt())},c=e=>{D(e,qt())},d=e=>{var n=Jt(),r=v(n);j(n),_(e=>t(r,`No matches for “${e??``}”.`),[()=>Q.query.trim()]),D(e,n)},y=e=>{var n=u();i(b(n),17,()=>V(ee),e=>e.kind,(e,n)=>{var r=$t(),o=b(r),s=v(o);j(o),i(m(o,2),17,()=>V(n).rows,e=>e.doc.id,(e,r)=>{let i=I(()=>V(r).index===Q.activeIndex);var o=Qt(),s=v(o),c=v(s),u=v(c);j(c),j(s);var d=m(s,2),f=v(d),y=v(f,!0);j(f);var b=m(f,2),ee=e=>{var n=Zt(),i=v(n),o=e=>{var n=Yt(),i=v(n,!0);j(n),_(e=>t(i,e),[()=>p(V(r).doc)]),D(e,n)},s=I(()=>p(V(r).doc));O(i,e=>{V(s)&&e(o)});var c=m(i,2),l=e=>{D(e,Xt())},u=I(()=>p(V(r).doc)&&V(r).doc.subtitle);O(c,e=>{V(u)&&e(l)});var d=m(c,2),f=e=>{var n=a();_(()=>t(n,V(r).doc.subtitle)),D(e,n)};O(d,e=>{V(r).doc.subtitle&&e(f)}),j(n),D(e,n)},x=I(()=>V(r).doc.subtitle||p(V(r).doc));O(b,e=>{V(x)&&e(ee)}),j(d);var S=m(d,2),C=v(S,!0);j(S),j(o),_(()=>{R(o,`id`,`gs-opt-${V(r).index}`),R(o,`aria-selected`,V(i)),z(o,1,`flex w-full items-center gap-3 rounded-lg px-3 py-2 text-left transition ${V(i)?`bg-slate-100`:`hover:bg-slate-50`}`),z(s,1,`grid h-7 w-7 shrink-0 place-items-center rounded-md bg-slate-50 ${V(n).meta.accent??``}`),R(u,`d`,V(n).meta.icon),t(y,V(r).doc.title),t(C,V(n).meta.label)}),h(`mouseenter`,o,()=>Q.setActive(V(r).index)),l(`click`,o,()=>g(V(r).doc)),D(e,o)}),_(()=>t(s,`${V(n).meta.label??``} (${V(n).rows.length??``})`)),D(e,r)}),D(e,n)};O(r,e=>{Q.error?e(o):Q.loading&&Q.resultCount===0?e(s,1):Q.hasQuery?Q.resultCount===0?e(d,3):e(y,-1):e(c,2)}),j(n),ne(n,e=>E(f,e),()=>V(f)),D(e,n)};O(se,e=>{Q.open&&e(ce)}),j(B),ne(B,e=>E(c,e),()=>V(c)),_(()=>{R(U,`aria-expanded`,Q.open),R(U,`aria-activedescendant`,Q.resultCount>0?`gs-opt-${Q.activeIndex}`:void 0),P(U,Q.query),z(U,1,`h-9 w-full rounded-lg border py-1.5 pl-9 pr-16 text-sm outline-none transition focus:ring-2 focus:ring-brand-500/20 ${V(M)??``}`)}),l(`input`,U,e=>Q.setQuery(e.target.value)),h(`focus`,U,()=>Q.openPanel()),l(`keydown`,U,x),D(e,B),w()}c([`input`,`keydown`,`click`]);var rn=`unspa.globalQueue`,$=new class{#e=L(null);get projectId(){return V(this.#e)}set projectId(e){E(this.#e,e,!0)}#t=L(``);get projectName(){return V(this.#t)}set projectName(e){E(this.#t,e,!0)}#n=L(e([]));get views(){return V(this.#n)}set views(e){E(this.#n,e,!0)}#r=L(null);get error(){return V(this.#r)}set error(e){E(this.#r,e,!0)}#i=L(!1);get open(){return V(this.#i)}set open(e){E(this.#i,e,!0)}hydrated=!1;init(){if(!this.hydrated){this.hydrated=!0;try{let e=localStorage.getItem(rn);if(!e)return;let t=JSON.parse(e);typeof t.projectId==`string`&&(this.projectId=t.projectId),typeof t.projectName==`string`&&(this.projectName=t.projectName),typeof t.open==`boolean`&&(this.open=t.open)}catch{}this.refresh()}}persist(){try{if(!this.projectId){localStorage.removeItem(rn);return}let e={projectId:this.projectId,projectName:this.projectName,open:this.open};localStorage.setItem(rn,JSON.stringify(e))}catch{}}setActiveProject(e,t){let n=this.projectId!==e;this.projectId=e,t&&(this.projectName=t),n&&this.persist()}setOpen(e){this.open=e,this.persist()}toggleOpen(){this.setOpen(!this.open)}async refresh(){let e=this.projectId;if(!e){this.views=[];return}try{let t=await G();this.views=await t.useCases.listQueue(le(e)),this.error=null}catch(e){this.views=[],this.error=e.message}}async dequeue(e){await this.mutate((t,n)=>t.useCases.dequeueQueueItem(le(n),e))}async moveTo(e,t){await this.mutate((n,r)=>n.useCases.moveQueueItem(le(r),e,{kind:`to`,targetIndex:t}))}async mutate(e){let t=this.projectId;if(t){this.error=null;try{let n=await e(await G(),t);this.syncLoadedStores(n),await this.refresh()}catch(e){this.error=e.message}}}syncLoadedStores(e){let t=String(e.id);Ce.project&&String(Ce.project.id)===t&&(Ce.project=e),we.project&&String(we.project.id)===t&&(we.project=e)}},an=d(`<p class="mt-0.5 truncate text-xs text-slate-500"> </p>`),on=d(`<p class="mb-2 rounded-md border border-red-200 bg-red-50 px-3 py-2 text-xs text-red-700"> </p>`),sn=d(`<div class="rounded-lg border border-dashed border-slate-300 bg-slate-50/60 p-5 text-center text-xs text-slate-500"><p class="font-medium text-slate-700">Nothing queued yet.</p> <p class="mt-1">Hover any Feature card, Surface, or Action and click <span class="font-semibold text-brand-700">+ queue</span> to plan what to implement next.</p></div>`),cn=d(`<a class="font-medium text-slate-900 hover:text-brand-800 hover:underline"> </a> <span class="text-xs text-slate-500"> </span>`,1),ln=d(`<a class="font-medium text-slate-900 hover:text-brand-800 hover:underline"> </a> <span class="text-xs text-slate-500"> </span>`,1),un=d(`<a class="font-medium text-slate-900 hover:text-brand-800 hover:underline"> </a>`),dn=d(`<span class="block truncate text-xs text-slate-500"> </span>`),fn=d(`<span class="shrink-0 rounded bg-amber-100 px-1.5 py-0.5 text-[10px] font-semibold text-amber-800" title="Target was deleted from the spec">orphan</span>`),pn=d(`<li draggable="true"><span class="cursor-grab select-none text-slate-300 transition-colors group-hover:text-slate-500 active:cursor-grabbing" aria-hidden="true" title="Drag to reorder">⋮⋮</span> <span class="w-5 shrink-0 text-right text-[11px] tabular-nums text-slate-400"> </span> <span> </span> <div class="min-w-0 flex-1 truncate"><!> <!></div> <!> <div class="flex shrink-0 items-center gap-0.5 opacity-0 transition group-hover:opacity-100 group-focus-within:opacity-100"><button type="button" class="rounded px-1 text-xs text-slate-400 hover:bg-slate-100 hover:text-slate-700 disabled:cursor-not-allowed disabled:opacity-30" aria-label="Move up" title="Move up">↑</button> <button type="button" class="rounded px-1 text-xs text-slate-400 hover:bg-slate-100 hover:text-slate-700 disabled:cursor-not-allowed disabled:opacity-30" aria-label="Move down" title="Move down">↓</button> <button type="button" class="rounded px-1 text-xs text-slate-400 hover:bg-red-50 hover:text-red-600" aria-label="Remove from queue" title="Remove from queue">✕</button></div></li>`),mn=d(`<ul class="space-y-1.5"></ul>`),hn=d(`<section class="fixed bottom-5 right-5 z-40 flex max-h-[70vh] w-[min(92vw,380px)] flex-col overflow-hidden rounded-2xl border border-slate-200 bg-white shadow-2xl shadow-slate-950/15 ring-1 ring-slate-950/5"><header class="flex shrink-0 items-start justify-between gap-3 border-b border-slate-200 bg-slate-50 px-4 py-3"><div class="min-w-0"><div class="flex items-center gap-2"><span class="text-brand-600" aria-hidden="true">▶</span> <h2 class="text-sm font-semibold text-slate-800">Implementation queue</h2> <span class="rounded-full bg-brand-600 px-2 py-0.5 text-xs font-bold tabular-nums text-white"> </span></div> <!></div> <button type="button" class="-mr-1 shrink-0 rounded-md p-1 text-slate-400 transition hover:bg-slate-200 hover:text-slate-700" aria-label="Minimize implementation queue" title="Minimize"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="h-4 w-4" aria-hidden="true"><path d="M6 9l6 6 6-6"></path></svg></button></header> <div class="min-h-0 flex-1 overflow-y-auto p-3"><!> <!></div></section>`),gn=d(`<button type="button" class="group fixed bottom-5 right-5 z-40 flex items-center gap-2 rounded-full border border-slate-200 bg-white py-2.5 pl-4 pr-3 text-sm font-semibold text-slate-800 shadow-xl shadow-slate-950/15 ring-1 ring-slate-950/5 transition hover:border-brand-400 hover:shadow-brand-500/15" aria-label="Open implementation queue" title="Implementation queue"><span class="text-brand-600 transition group-hover:translate-x-0.5" aria-hidden="true">▶</span> Queue <span class="rounded-full bg-brand-600 px-2 py-0.5 text-xs font-bold tabular-nums text-white"> </span></button>`);function _n(e,r){A(r,!0);let a=typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`).matches,c=e=>a?0:e;$.init(),o(()=>{let e=Ce.project??we.project;e?.implementationQueue,s(()=>{e&&$.setActiveProject(String(e.id),e.name),$.refresh()})}),F(()=>ge(e=>{$.projectId&&(e.kind===`project`||e.kind===`feature`)&&$.refresh()}));let d=L(null),f=L(null);function p(e,t){E(d,t,!0),e.dataTransfer&&(e.dataTransfer.effectAllowed=`move`,e.dataTransfer.setData(`text/plain`,String(t)))}function g(e,t){V(d)!==null&&(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`move`),E(f,t,!0))}async function y(e,t){e.preventDefault();let n=V(d);E(d,null),E(f,null),n&&await $.moveTo(n,t)}function ee(){E(d,null),E(f,null)}async function x(e,t){let n=$.views.findIndex(t=>t.item.id===e);n<0||await $.moveTo(e,n+t)}async function S(e){await $.dequeue(e)}var C=u(),T=b(C),k=e=>{var r=hn(),a=v(r),o=v(a),s=v(o),u=m(v(s),4),C=v(u,!0);j(u),j(s);var w=m(s,2),T=e=>{var n=an(),r=v(n,!0);j(n),_(()=>{R(n,`title`,$.projectName),t(r,$.projectName)}),D(e,n)};O(w,e=>{$.projectName&&e(T)}),j(o);var E=m(o,2);j(a);var k=m(a,2),A=v(k),M=e=>{var n=on(),r=v(n,!0);j(n),_(()=>t(r,$.error)),D(e,n)};O(A,e=>{$.error&&e(M)});var N=m(A,2),P=e=>{D(e,sn())},te=e=>{var n=mn();i(n,23,()=>$.views,e=>e.item.id,(e,n,r)=>{let i=I(()=>V(n).item.id),a=I(()=>V(d)===V(i)),o=I(()=>V(f)===V(r)&&V(d)!==null&&V(d)!==V(i));var s=pn(),c=m(v(s),2),u=v(c);j(c);var C=m(c,2),w=v(C,!0);j(C);var T=m(C,2),E=v(T),k=e=>{var r=cn(),i=b(r),a=v(i,!0);j(i);var o=m(i,2),s=v(o);j(o),_(()=>{R(i,`href`,`/features/${V(n).item.featureId}`),t(a,V(n).actionName??`(unnamed action)`),t(s,`· ${V(n).featureName??``}`)}),D(e,r)},A=e=>{var r=ln(),i=b(r),a=v(i,!0);j(i);var o=m(i,2),s=v(o);j(o),_(()=>{R(i,`href`,`/features/${V(n).item.featureId}`),t(a,V(n).surfaceName??`(unnamed surface)`),t(s,`· ${V(n).featureName??``}`)}),D(e,r)},M=e=>{var r=un(),i=v(r,!0);j(r),_(()=>{R(r,`href`,`/features/${V(n).item.featureId}`),t(i,V(n).featureName)}),D(e,r)};O(E,e=>{V(n).item.kind===`action`?e(k):V(n).item.kind===`surface`?e(A,1):e(M,-1)});var N=m(E,2),P=e=>{var r=dn(),i=v(r,!0);j(r),_(()=>t(i,V(n).item.note)),D(e,r)};O(N,e=>{V(n).item.note&&e(P)}),j(T);var te=m(T,2),F=e=>{D(e,fn())};O(te,e=>{V(n).orphaned&&e(F)});var ne=m(te,2),L=v(ne),B=m(L,2),re=m(B,2);j(ne),j(s),_(()=>{z(s,1,`group flex items-center gap-2 rounded-md border bg-white px-2 py-1.5 text-sm transition
2
+ ${V(n).orphaned?`border-amber-200 bg-amber-50/40`:`border-slate-200`}
3
+ ${V(a)?`opacity-40`:``}
4
+ ${V(o)?`border-brand-400 ring-1 ring-brand-200`:``}`),t(u,`${V(r)+1}.`),z(C,1,`shrink-0 rounded px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide
5
+ ${V(n).item.kind===`feature`?`bg-violet-100 text-violet-800`:V(n).item.kind===`surface`?`bg-emerald-100 text-emerald-800`:`bg-cyan-100 text-cyan-800`}`),t(w,V(n).item.kind),L.disabled=V(r)===0,B.disabled=V(r)===$.views.length-1}),h(`dragstart`,s,e=>p(e,V(i))),h(`dragover`,s,e=>g(e,V(r))),h(`drop`,s,e=>y(e,V(r))),h(`dragend`,s,ee),l(`click`,L,()=>x(V(i),-1)),l(`click`,B,()=>x(V(i),1)),l(`click`,re,()=>S(V(i))),D(e,s)}),j(n),D(e,n)};O(N,e=>{$.views.length===0?e(P):e(te,-1)}),j(k),j(r),_(()=>t(C,$.views.length)),l(`click`,E,()=>$.setOpen(!1)),n(3,r,()=>ae,()=>({y:12,duration:c(180),easing:oe})),D(e,r)},M=e=>{var n=gn(),r=m(v(n),2),i=v(r,!0);j(r),j(n),_(()=>t(i,$.views.length)),l(`click`,n,()=>$.setOpen(!0)),D(e,n)};O(T,e=>{$.open?e(k):e(M,-1)}),D(e,C),w()}c([`click`]);var vn={id:`default`,label:`Default`,description:`The standard Unspaghettit look — teal/cyan brand on a soft canvas.`,swatch:`linear-gradient(135deg,#22d3ee,#06b6d4,#0e7490)`},yn={lyriks:{id:`lyriks`,label:`Lyriks`,description:`Lyriks.io brand skin — a violet→fuchsia gradient header over a cool canvas.`,swatch:`linear-gradient(90deg,#6d28d9,#a21caf,#db2777)`}},bn=[vn,...Object.values(yn)],xn=e=>{let t=(e??``).trim().toLowerCase();return t in yn?t:`default`},Sn=`unspa.theme`,Cn=new class{#e=L(e(xn(ye.PUBLIC_UNSPA_THEME)));get current(){return V(this.#e)}set current(e){E(this.#e,e,!0)}initialized=!1;init(){this.initialized||(this.initialized=!0,!(typeof document>`u`)&&(this.current=xn(document.documentElement.dataset.theme)))}setTheme(e){let t=xn(e);this.current=t,typeof document<`u`&&(document.documentElement.dataset.theme=t),!(typeof localStorage>`u`)&&(t===`default`?localStorage.removeItem(Sn):localStorage.setItem(Sn,t))}get isLyriks(){return this.current===`lyriks`}},wn=d(`<span class="hidden flex-col items-start leading-none sm:flex"><span>Lyriks.io</span> <span>Community Edition</span></span>`),Tn=d(`<span>Unspaghettit <span>by Lyriks.io</span></span>`),En=d(`<a> </a>`),Dn=d(`<div role="group" aria-label="View mode"></div>`),On=d(`<div class="hidden min-w-0 items-center gap-2 sm:flex"><span class="shrink-0 text-slate-600" aria-hidden="true">/</span> <button type="button" class="max-w-56 truncate text-sm font-medium text-white transition hover:text-brand-300" title="Back to all projects"> </button></div>`),kn=d(`<button type="button" class="absolute right-2 top-1/2 grid h-6 w-6 -translate-y-1/2 place-items-center rounded-md text-slate-500 transition hover:bg-slate-800 hover:text-white" aria-label="Clear builder search" title="Clear search">×</button>`),An=d(`<div class="mx-3 hidden min-w-0 flex-1 justify-center md:flex"><label for="builder-global-search" class="sr-only">Search builder</label> <div class="relative w-full max-w-md"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" class="pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-500" aria-hidden="true"><circle cx="11" cy="11" r="7"></circle><path d="m20 20-3.5-3.5"></path></svg> <input id="builder-global-search" type="search" placeholder="Search..." class="h-9 w-full rounded-lg border border-slate-700 bg-slate-900/70 py-1.5 pl-9 pr-9 text-sm text-white placeholder:text-slate-500 outline-none transition focus:border-brand-400 focus:ring-2 focus:ring-brand-500/20"/> <!></div></div>`),jn=d(`<div class="mx-2 flex min-w-0 flex-1 justify-center sm:mx-4 md:mx-6"><!></div>`),Mn=p(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="h-4 w-4 shrink-0 text-brand-600" aria-hidden="true"><path d="M20 6 9 17l-5-5"></path></svg>`),Nn=d(`<button type="button" role="menuitemradio"><span class="h-5 w-5 shrink-0 rounded-full ring-1 ring-slate-950/10" aria-hidden="true"></span> <span class="min-w-0 flex-1"><span class="block font-medium"> </span> <span class="block text-[11px] text-slate-500"> </span></span> <!></button>`),Pn=d(`<div role="menu" class="absolute right-0 top-12 z-40 w-64 overflow-hidden rounded-lg border border-slate-200 bg-white p-1 shadow-lg shadow-slate-950/10"><p class="px-3 pt-2 pb-1 text-[10px] font-semibold uppercase tracking-wide text-slate-400">Theme</p> <!></div>`),Fn=d(`<span class="mt-0.5 block text-[11px] text-rose-600">Could not open the folder. Try again.</span>`),In=d(`<div role="menu" class="absolute right-0 top-12 z-40 w-60 overflow-hidden rounded-lg border border-slate-200 bg-white p-1 shadow-lg shadow-slate-950/10"><a href="/mcp" role="menuitem"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" class="mt-0.5 h-4 w-4 shrink-0 text-slate-400" aria-hidden="true"><path d="M12 3v18"></path><path d="M3 12h18"></path><path d="M5 5l14 14"></path><path d="M19 5L5 19"></path></svg> <span class="min-w-0 flex-1"><span class="block font-medium">MCP</span> <span class="block text-[11px] text-slate-500">Tools, setup, and integration help.</span></span></a> <div class="my-1 h-px bg-slate-100"></div> <button type="button" role="menuitem" class="flex w-full items-start gap-3 rounded-md px-3 py-2 text-left text-sm text-slate-700 hover:bg-slate-50 disabled:cursor-wait disabled:opacity-60"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" class="mt-0.5 h-4 w-4 shrink-0 text-slate-400" aria-hidden="true"><path d="M3 7a2 2 0 0 1 2-2h5l2 2h7a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"></path><path d="m14 12 3 3 3-3"></path><path d="M17 15V9"></path></svg> <span class="min-w-0 flex-1"><span class="block font-medium"> </span> <span class="block truncate text-[11px] text-slate-500"> </span> <!></span></button> <div class="my-1 h-px bg-slate-100"></div> <button type="button" role="menuitem" class="flex w-full items-start gap-3 rounded-md px-3 py-2 text-left text-sm text-rose-700 hover:bg-rose-50 hover:text-rose-800"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" class="mt-0.5 h-4 w-4 shrink-0 text-rose-500" aria-hidden="true"><path d="M3 6h18"></path><path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"></path><line x1="10" y1="11" x2="10" y2="17"></line><line x1="14" y1="11" x2="14" y2="17"></line></svg> <span class="min-w-0 flex-1"><span class="block font-semibold">Reset local data</span> <span class="block text-[11px] text-rose-600/80">Wipes display name + browser settings. Projects on disk are
6
+ kept.</span></span></button></div>`),Ln=d(`<span aria-hidden="true"> </span>`),Rn=p(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" class="h-5 w-5" aria-hidden="true"><circle cx="12" cy="8" r="3.5"></circle><path d="M5 20c1.2-3.6 4-5.5 7-5.5s5.8 1.9 7 5.5"></path></svg>`),zn=d(`<p class="px-3 pt-2 pb-1 text-[10px] font-semibold uppercase tracking-wide text-slate-400">Signed in as</p> <p class="truncate px-3 pb-2 text-sm font-medium text-slate-800"> </p> <div class="my-1 h-px bg-slate-100"></div>`,1),Bn=d(`<div role="menu" class="absolute right-0 top-12 z-40 w-60 overflow-hidden rounded-lg border border-slate-200 bg-white p-1 shadow-lg shadow-slate-950/10"><!> <button type="button" role="menuitem" class="flex w-full items-start gap-3 rounded-md px-3 py-2 text-left text-sm text-slate-700 hover:bg-slate-50"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" class="mt-0.5 h-4 w-4 shrink-0 text-slate-400" aria-hidden="true"><path d="M12 20h9"></path><path d="M16.5 3.5a2.121 2.121 0 1 1 3 3L7 19l-4 1 1-4 12.5-12.5z"></path></svg> <span class="min-w-0 flex-1"><span class="block font-medium"> </span> <span class="block text-[11px] text-slate-500">Shown on every history entry you create.</span></span></button></div>`),Vn=d(`<button type="button" class="absolute right-2 top-1/2 grid h-6 w-6 -translate-y-1/2 place-items-center rounded-md text-slate-500 transition hover:bg-slate-800 hover:text-white" aria-label="Clear builder search" title="Clear search">×</button>`),Hn=d(`<div class="mx-auto px-4 pb-3 md:hidden"><label for="builder-global-search-mobile" class="sr-only">Search builder</label> <div class="relative"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" class="pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-500" aria-hidden="true"><circle cx="11" cy="11" r="7"></circle><path d="m20 20-3.5-3.5"></path></svg> <input id="builder-global-search-mobile" type="search" placeholder="Search..." class="h-9 w-full rounded-lg border border-slate-700 bg-slate-900/70 py-1.5 pl-9 pr-9 text-sm text-white placeholder:text-slate-500 outline-none transition focus:border-brand-400 focus:ring-2 focus:ring-brand-500/20"/> <!></div></div>`),Un=d(`<div class="motion-reduce:animate-none! motion-reduce:opacity-100!"><!></div>`),Wn=d(`<div><header><div><div class="flex min-w-0 items-center gap-3"><a href="/" class="flex shrink-0 items-center gap-2.5"><img/> <!></a> <!> <!></div> <!> <!> <div class="flex shrink-0 items-center gap-1.5"><div class="relative"><button type="button" aria-haspopup="menu" aria-label="Switch dashboard theme" title="Switch theme"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" class="h-5 w-5" aria-hidden="true"><circle cx="13.5" cy="6.5" r="2.5"></circle><circle cx="17.5" cy="10.5" r="2.5"></circle><circle cx="8.5" cy="7.5" r="2.5"></circle><path d="M12 21a9 9 0 1 1 0-18c4.97 0 9 3.58 9 8 0 2.5-2 3.5-3.5 3.5H15a2 2 0 0 0-1.4 3.42A1.5 1.5 0 0 1 12 21z"></path></svg></button> <!></div> <div class="relative"><button type="button" aria-haspopup="menu" aria-label="Open app menu" title="App menu"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" class="h-5 w-5" aria-hidden="true"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 1 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 1 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 1 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 1 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg></button> <!></div> <a href="/tutorial" aria-label="Help &amp; tutorial" title="Help &amp; tutorial"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" class="h-5 w-5" aria-hidden="true"><circle cx="12" cy="12" r="9"></circle><path d="M9.4 9a2.6 2.6 0 0 1 5 1c0 1.6-2.4 2-2.4 3.4"></path><line x1="12" y1="17.5" x2="12.01" y2="17.5"></line></svg></a> <div class="relative flex items-center gap-1.5"><button type="button" aria-haspopup="menu"><!> <span aria-hidden="true"></span></button> <!></div></div></div> <!></header> <main class="flex-1"><!></main></div> <!> <!> <!> <!> <!>`,1);function Gn(e,r){A(r,!0),F(async()=>{J.init(),Cn.init(),de.init(),U(),!J.name&&!J.hasBeenAsked&&(J.markAsked(),queueMicrotask(()=>{a()}));try{await Te.reconcileOrphanFeatures()}catch(e){console.warn(`Orphan reconciliation failed:`,e)}});async function a(){let e=await me({title:`Your display name`,message:`Shown on every history entry you create. Stored locally in this browser — never sent off-machine. Leave empty to stay anonymous.`,inputLabel:`Display name`,defaultValue:J.name,placeholder:`e.g. John`,confirmLabel:`Save`,tone:`info`});e!==null&&J.setName(e)}let o=I(()=>J.name.trim().charAt(0).toUpperCase()),s=L(!1),c=L(null),u=L(!1),d=L(null),p=L(!1),x=L(null),S=L(``),C=L(``),T=L(!1);function M(e){let t=e.target;V(s)&&V(c)&&!V(c).contains(t)&&E(s,!1),V(u)&&V(d)&&!V(d).contains(t)&&E(u,!1),V(p)&&V(x)&&!V(x).contains(t)&&E(p,!1)}async function N(){E(s,!1),await a()}async function re(){E(u,!1),await ce()}async function U(){try{let e=await se(`/api/system/hub-directory`);if(!e.ok)throw Error(await e.text());let t=await e.json();if(typeof t.directory!=`string`)throw Error(`The server returned an invalid directory.`);E(S,t.directory,!0),E(C,``)}catch(e){E(C,e instanceof Error?e.message:`Could not locate the hub.`,!0)}}async function ae(){E(T,!0),E(C,``);try{let e=await se(`/api/system/hub-directory`,{method:`POST`});if(!e.ok)throw Error(await e.text());let t=await e.json();typeof t.directory==`string`&&E(S,t.directory,!0),E(u,!1)}catch(e){E(C,e instanceof Error?e.message:`Could not open the hub folder.`,!0)}finally{E(T,!1)}}async function ce(){if(await he({title:`Reset local browser data?`,message:`Clears your display name, the dashboard's local preferences, and any cached per-tab state in this browser. Your projects, features, history, and queue stay on disk untouched. The page will reload to apply a fresh state.`,confirmLabel:`Reset everything`,cancelLabel:`Cancel`,tone:`danger`})){try{localStorage.clear()}catch{}try{sessionStorage.clear()}catch{}location.reload()}}let le=I(be),ue=I(()=>V(le).length>1&&!Cn.isLyriks),W=I(()=>ve(`builder`)&&H.url.pathname.startsWith(`/builder-mode`)),fe=I(()=>H.url.pathname.startsWith(`/mcp`)),pe=I(()=>H.url.pathname.startsWith(`/features/`)),G=I(()=>Cn.isLyriks),ge=bn,K=I(()=>V(W)||V(G)),ye=I(()=>V(W)?_e.selectedProject:null),q=I(()=>_e.search),xe=I(()=>H.url.pathname);var Se=Wn();h(`mousedown`,y,M),h(`keydown`,y,e=>{e.key===`Escape`&&(E(s,!1),E(u,!1),E(p,!1))});var Ce=b(Se),we=v(Ce),Ee=v(we),De=v(Ee),Oe=v(De),ke=v(Oe),Ae=m(ke,2),je=e=>{var t=wn(),n=v(t),r=m(n,2);j(t),_(()=>{z(n,1,`font-brand text-2xl font-bold tracking-tight ${V(K)?`text-white`:`text-slate-950`}`),z(r,1,`mt-1 pl-px text-[9px] font-semibold uppercase tracking-[0.18em] ${V(K)?`text-white/75`:`text-slate-500`}`)}),D(e,t)},Me=e=>{var t=Tn(),n=m(v(t));j(t),_(()=>{z(t,1,`relative hidden font-brand text-3xl font-semibold leading-none sm:inline-block ${V(K)?`text-white`:`text-slate-950`}`),z(n,1,`font-grotesk absolute right-0 -bottom-2 text-[10px] font-medium tracking-wide ${V(K)?`text-white/70`:`text-slate-500`}`)}),D(e,t)};O(Ae,e=>{V(G)?e(je):e(Me,-1)}),j(Oe);var Ne=m(Oe,2),Pe=e=>{var n=Dn();i(n,21,()=>V(le),e=>e.id,(e,n)=>{let r=I(()=>V(n).matches(H.url.pathname));var i=En(),a=v(i,!0);j(i),_(()=>{R(i,`href`,V(n).href),z(i,1,`rounded-full px-2.5 py-0.5 transition ${V(r)?V(K)?`bg-slate-700 text-white shadow-sm shadow-black/20`:`bg-white text-slate-900 shadow-sm shadow-slate-950/10`:V(K)?`text-slate-400 hover:text-slate-200`:`text-slate-500 hover:text-slate-800`}`),R(i,`aria-current`,V(r)?`page`:void 0),t(a,V(n).label)}),D(e,i)}),j(n),_(()=>z(n,1,`flex shrink-0 items-center rounded-full border p-0.5 text-[11px] font-medium ${V(K)?`border-slate-700/70 bg-slate-800/60`:`border-slate-200 bg-slate-100`}`)),D(e,n)};O(Ne,e=>{V(ue)&&e(Pe)});var Fe=m(Ne,2),Ie=e=>{var n=On(),r=m(v(n),2),i=v(r,!0);j(r),j(n),_(()=>t(i,V(ye).name)),l(`click`,r,()=>_e.deselectProject()),D(e,n)};O(Fe,e=>{V(ye)&&e(Ie)}),j(De);var Le=m(De,2),Re=e=>{var t=An(),n=m(v(t),2),r=m(v(n),2);k(r);var i=m(r,2),a=e=>{var t=kn();l(`click`,t,()=>_e.clearSearch()),D(e,t)},o=I(()=>V(q).trim().length>0);O(i,e=>{V(o)&&e(a)}),j(n),j(t),_(()=>P(r,V(q))),l(`input`,r,e=>_e.setSearch(e.target.value)),D(e,t)};O(Le,e=>{V(W)&&e(Re)});var ze=m(Le,2),Ve=e=>{var t=jn();nn(v(t),{get dark(){return V(K)},get lyriks(){return V(G)}}),j(t),D(e,t)};O(ze,e=>{V(W)||e(Ve)});var Ue=m(ze,2),We=v(Ue),Ge=v(We),Ke=m(Ge,2),qe=e=>{var n=Pn();i(m(v(n),2),17,()=>ge,e=>e.id,(e,n)=>{let r=I(()=>Cn.current===V(n).id);var i=Nn(),a=v(i),o=m(a,2),s=v(o),c=v(s,!0);j(s);var u=m(s,2),d=v(u,!0);j(u),j(o);var f=m(o,2),h=e=>{D(e,Mn())};O(f,e=>{V(r)&&e(h)}),j(i),_(()=>{R(i,`aria-checked`,V(r)),z(i,1,`flex w-full items-center gap-3 rounded-md px-3 py-2 text-left text-sm ${V(r)?`bg-slate-100 text-slate-950`:`text-slate-700 hover:bg-slate-50`}`),ee(a,`background: ${V(n).swatch??``}`),t(c,V(n).label),t(d,V(n).description)}),l(`click`,i,()=>{Cn.setTheme(V(n).id),E(p,!1)}),D(e,i)}),j(n),D(e,n)};O(Ke,e=>{V(p)&&e(qe)}),j(We),ne(We,e=>E(x,e),()=>V(x));var Je=m(We,2),Ye=v(Je),Xe=m(Ye,2),Ze=e=>{var n=In(),r=v(n),i=m(r,4),a=m(v(i),2),o=v(a),s=v(o,!0);j(o);var c=m(o,2),d=v(c,!0);j(c);var f=m(c,2),p=e=>{D(e,Fn())};O(f,e=>{V(C)&&e(p)}),j(a),j(i);var h=m(i,4);j(n),_(()=>{z(r,1,`flex w-full items-start gap-3 rounded-md px-3 py-2 text-left text-sm ${V(fe)?`bg-slate-100 text-slate-950`:`text-slate-700 hover:bg-slate-50`}`),i.disabled=V(T),R(i,`title`,V(S)||`Open the active snapshot folder`),t(s,V(T)?`Opening hub folder…`:`Open hub folder`),R(c,`title`,V(S)),t(d,V(S)||`Folder containing all project snapshots`)}),l(`click`,r,()=>E(u,!1)),l(`click`,i,ae),l(`click`,h,re),D(e,n)};O(Xe,e=>{V(u)&&e(Ze)}),j(Je),ne(Je,e=>E(d,e),()=>V(d));var Qe=m(Je,2),$e=m(Qe,2),et=v($e),nt=v(et),rt=e=>{var n=Ln(),r=v(n,!0);j(n),_(()=>t(r,V(o))),D(e,n)},it=e=>{D(e,Rn())};O(nt,e=>{J.name?e(rt):e(it,-1)});var at=m(nt,2);j(et);var ot=m(et,2),st=e=>{var n=Bn(),r=v(n),i=e=>{var n=zn(),r=m(b(n),2),i=v(r,!0);j(r),te(2),_(()=>t(i,J.name)),D(e,n)};O(r,e=>{J.name&&e(i)});var a=m(r,2),o=m(v(a),2),s=v(o),c=v(s,!0);j(s),te(2),j(o),j(a),j(n),_(()=>t(c,J.name?`Change display name`:`Set display name`)),l(`click`,a,N),D(e,n)};O(ot,e=>{V(s)&&e(st)}),j($e),ne($e,e=>E(c,e),()=>V(c)),j(Ue),j(Ee);var ct=m(Ee,2),lt=e=>{var t=Hn(),n=m(v(t),2),r=m(v(n),2);k(r);var i=m(r,2),a=e=>{var t=Vn();l(`click`,t,()=>_e.clearSearch()),D(e,t)},o=I(()=>V(q).trim().length>0);O(i,e=>{V(o)&&e(a)}),j(n),j(t),_(()=>P(r,V(q))),l(`input`,r,e=>_e.setSearch(e.target.value)),D(e,t)};O(ct,e=>{V(W)&&e(lt)}),j(we);var ut=m(we,2);f(v(ut),()=>V(xe),e=>{var t=Un();g(v(t),()=>r.children),j(t),n(1,t,()=>ie,()=>({duration:160,easing:oe})),D(e,t)}),j(ut),j(Ce);var dt=m(Ce,2),ft=e=>{_n(e,{})};O(dt,e=>{V(W)||e(ft)});var pt=m(dt,2);Be(pt,{});var mt=m(pt,2);He(mt,{});var ht=m(mt,2);tt(ht,{}),vt(m(ht,2),{}),_(()=>{z(Ce,1,`flex min-h-full flex-col text-ink ${V(G)?`bg-[linear-gradient(180deg,#e6ddfa_0%,#eeeafb_220px,#eeeafb_100%)]`:`bg-[linear-gradient(180deg,#f0fdfa_0%,#f8fafc_220px,#f8fafc_100%)]`}`),z(we,1,`sticky top-0 z-30 border-b backdrop-blur transition-colors ${V(G)?`border-transparent bg-[linear-gradient(90deg,#6d28d9_0%,#a21caf_55%,#db2777_100%)]`:V(K)?`border-slate-800 bg-slate-950/90`:`border-slate-200 bg-white/95`}`),z(Ee,1,`mx-auto flex h-16 items-center justify-between px-4 sm:px-6 ${V(pe)?`max-w-400`:`max-w-7xl`}`),R(ke,`src`,V(G)?`/lyriks_logo.svg`:`/unspaghettit_logo.png`),R(ke,`alt`,V(G)?`Lyriks`:`Unspaghettit`),z(ke,1,B(V(G)?`h-9 w-9 shrink-0`:`h-12 w-auto`)),R(Ge,`aria-expanded`,V(p)),z(Ge,1,`grid h-9 w-9 place-items-center rounded-md transition ${V(p)?V(G)?`bg-white/30 text-white`:V(K)?`bg-slate-800 text-white`:`bg-slate-900 text-white`:V(G)?`bg-white/15 text-white hover:bg-white/25`:V(K)?`text-slate-300 hover:bg-white/10 hover:text-white`:`text-slate-600 hover:bg-slate-100 hover:text-slate-950`}`),R(Ye,`aria-expanded`,V(u)),z(Ye,1,`grid h-9 w-9 place-items-center rounded-md transition ${V(u)||V(fe)?V(G)?`bg-white/30 text-white`:V(K)?`bg-slate-800 text-white`:`bg-slate-900 text-white`:V(G)?`bg-white/15 text-white hover:bg-white/25`:V(K)?`text-slate-400 hover:bg-slate-800 hover:text-white`:`text-slate-600 hover:bg-slate-100 hover:text-slate-950`}`),z(Qe,1,`grid h-9 w-9 place-items-center rounded-md transition ${V(G)?`bg-white/15 text-white hover:bg-white/25`:V(K)?`text-slate-400 hover:bg-slate-800 hover:text-white`:`text-slate-600 hover:bg-slate-100 hover:text-slate-950`}`),R(et,`aria-expanded`,V(s)),R(et,`aria-label`,J.name?`Signed in as ${J.name}. Open identity menu.`:`Set your display name`),R(et,`title`,J.name?`Signed in as ${J.name}`:`Set a display name so your edits are recognisable in history`),z(et,1,`group relative flex h-10 w-10 shrink-0 items-center justify-center rounded-full text-sm font-semibold shadow-sm shadow-slate-950/5 ring-1 ring-transparent transition focus:outline-none focus-visible:ring-2 focus-visible:ring-brand-300
7
+ ${J.name?`bg-linear-to-br from-brand-600 to-brand-800 text-white hover:from-brand-500 hover:to-brand-700`:`border border-dashed border-slate-300 bg-white text-slate-400 hover:border-brand-400 hover:text-brand-700`}`),z(at,1,`absolute -right-0.5 -bottom-0.5 inline-flex h-3 w-3 items-center justify-center rounded-full ring-2 ring-white
8
+ ${J.name?`bg-emerald-500`:`bg-amber-400`}`)}),l(`click`,Ge,()=>{E(p,!V(p)),E(u,!1),E(s,!1)}),l(`click`,Ye,()=>{E(u,!V(u)),E(s,!1)}),l(`click`,et,()=>{E(s,!V(s)),E(u,!1)}),D(e,Se),w()}c([`click`,`input`]);export{Gn as component,Ee as universal};
@@ -1 +1 @@
1
- import{A as e,N as t,Q as n,W as r,X as i,Z as a,ct as o,j as s,lt as c,mt as l}from"../chunks/BPl9BITm.js";import"../chunks/xihTtKlq.js";import{t as u}from"../chunks/iQu0D9Ux.js";var d=t(`<h1> </h1> <p> </p>`,1);function f(t,f){c(f,!0);var p=d(),m=a(p),h=i(m,!0);l(m);var g=n(m,2),_=i(g,!0);l(g),r(()=>{e(h,u.status),e(_,u.error?.message)}),s(t,p),o()}export{f as component};
1
+ import{A as e,N as t,Q as n,W as r,X as i,Z as a,ct as o,j as s,lt as c,mt as l}from"../chunks/BPl9BITm.js";import"../chunks/xihTtKlq.js";import{t as u}from"../chunks/wrqalH0a.js";var d=t(`<h1> </h1> <p> </p>`,1);function f(t,f){c(f,!0);var p=d(),m=a(p),h=i(m,!0);l(m);var g=n(m,2),_=i(g,!0);l(g),r(()=>{e(h,u.status),e(_,u.error?.message)}),s(t,p),o()}export{f as component};
@@ -0,0 +1 @@
1
+ w`�*7��P��,ډW�ğ�
@@ -0,0 +1 @@
1
+ import{$ as e,A as t,C as n,E as r,F as i,G as a,I as o,J as s,L as c,M as l,N as u,O as d,Q as f,R as p,U as m,V as h,W as g,X as _,Y as v,Z as y,at as b,c as x,ct as S,et as C,gt as w,it as T,j as E,k as D,l as O,lt as k,m as ee,mt as A,n as j,o as M,p as te,pt as N,q as P,r as F,rt as I,s as L,tt as R,u as z,v as B,x as V,z as H}from"../chunks/BPl9BITm.js";import{n as U}from"../chunks/ByaoVvNB.js";import"../chunks/xihTtKlq.js";import{n as ne,t as re}from"../chunks/ib21i2T_.js";import{H as ie,K as ae,Q as W,S as oe,gt as G,i as se,it as ce,t as K,x as le,xt as ue}from"../chunks/D64sGJRN.js";import"../chunks/suTxxv1t.js";import{t as de}from"../chunks/yShDxCNj.js";import"../chunks/Da59TXPe.js";import{t as fe}from"../chunks/cMamJTsF.js";import{t as q}from"../chunks/Bfc9rQXP.js";import{t as pe}from"../chunks/CwzIdrQR.js";import{t as J}from"../chunks/CuGlh1c2.js";import{t as me}from"../chunks/oVMDLirx.js";import{c as Y,l as he,n as ge,o as _e,t as X}from"../chunks/olAc024e.js";import{t as ve}from"../chunks/Dhqg7r_2.js";import{t as ye}from"../chunks/wXIHzLMQ2.js";import{t as be}from"../chunks/BANF9BhQ2.js";import{t as xe}from"../chunks/DryaQyjN2.js";import{a as Se,r as Ce,t as we}from"../chunks/Vu8LzrwP2.js";import{t as Z}from"../chunks/B3vnQs252.js";var Te=u(`<button type="button" class="h-8 rounded-md px-2 text-xs font-medium text-slate-500 hover:bg-slate-50 hover:text-slate-900">Clear</button>`),Ee=u(`<div class="space-y-3"><p>No features in this project yet.</p> <div class="flex flex-wrap justify-center gap-2"><button type="button" class="rounded-md bg-slate-900 px-4 py-2 text-sm font-medium text-white">Create first feature</button></div></div>`),De=u(`<div class="rounded-lg border border-dashed border-hairline bg-white p-6 text-center text-sm text-slate-500"><!></div>`),Oe=u(`<li><!></li>`),ke=u(`<ul class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"></ul>`),Ae=u(`<div class="fixed inset-0 z-40 flex items-start justify-center bg-slate-950/30 px-4 py-24 backdrop-blur-sm" role="presentation"><div class="w-full max-w-2xl rounded-xl border border-hairline bg-white shadow-xl" role="dialog" aria-modal="true" aria-labelledby="add-feature-dialog-title"><header class="flex items-start justify-between gap-4 border-b border-hairline px-5 py-4"><div><h2 id="add-feature-dialog-title" class="text-base font-semibold text-slate-950">Add an feature</h2> <p class="mt-1 text-sm text-slate-500">Create a new behavior model. It will be tied to this project automatically.</p></div> <button type="button" class="rounded-md px-2 py-1 text-sm text-slate-500 hover:bg-slate-100 hover:text-slate-900" aria-label="Close">x</button></header> <form class="space-y-3 p-5" data-tour="new-feature-form"><label class="block text-xs font-medium text-slate-700">Feature name <input type="text" placeholder="e.g. Restaurant booking" class="mt-1 h-10 w-full rounded-md border border-slate-300 bg-white px-3 text-sm outline-none focus:border-slate-900" required=""/></label> <label class="block text-xs font-medium text-slate-700">Description <input type="text" data-tour="new-feature-description" placeholder="What is this feature about?" class="mt-1 h-10 w-full rounded-md border border-slate-300 bg-white px-3 text-sm outline-none focus:border-slate-900" required=""/></label> <div class="flex justify-end gap-2 pt-2"><button type="button" class="h-10 rounded-md border border-slate-300 bg-white px-4 text-sm font-medium text-slate-700 hover:bg-slate-50">Cancel</button> <button type="submit" class="h-10 rounded-md bg-slate-900 px-4 text-sm font-medium text-white disabled:opacity-50"> </button></div></form></div></div>`),je=u(`<div class="space-y-4"><div class="rounded-xl border border-slate-200 bg-white p-3 shadow-sm shadow-slate-950/5"><div class="flex flex-col gap-3 lg:flex-row lg:items-center lg:justify-between"><div class="flex min-w-0 items-center rounded-lg border border-hairline bg-white p-1 lg:flex-1"><label for="project-feature-search" class="sr-only">Search project features</label> <input id="project-feature-search" type="search" placeholder="Search features..." class="h-9 w-full min-w-0 rounded-md border-0 bg-transparent px-3 text-sm outline-none placeholder:text-slate-400"/> <!></div> <div class="flex flex-col gap-2 sm:flex-row sm:items-center"><!> <label class="flex h-10 items-center gap-2 rounded-lg border border-hairline bg-white px-3 text-sm text-slate-600"><span class="text-xs font-medium">Sort</span> <select class="bg-transparent text-sm font-medium text-slate-800 outline-none"><option>Updated</option><option>Name</option><option>Maturity</option></select></label> <button type="button" data-tour="new-feature-button" class="inline-flex h-10 items-center justify-center gap-2 rounded-md bg-slate-900 px-4 text-sm font-medium text-white" title="Create a new feature inside this project"><span aria-hidden="true">+</span> New feature</button></div></div></div> <!></div> <!>`,1);function Me(n,o){k(o,!0);let s=R(`all`);function l(e,t){return t.length===0?!0:e.name.toLowerCase().includes(t)||(e.description??``).toLowerCase().includes(t)}function u(e,t){let n=e.tags??[];if(t===`all`)return!0;if(t===`untagged`)return n.length===0;let r=ae(t);return n.some(e=>ae(e)===r)}let d=I(()=>{let e=o.search.trim().toLowerCase();return o.features.filter(t=>l(t,e)&&u(t,H(s)))}),m=I(()=>{let e=[];for(let t of o.features)for(let n of t.tags??[])e.push(n);return e});a(()=>{pe.registerTypes(H(m).map(e=>e.type))});function b(e){let t=o.search.trim().toLowerCase();return o.features.filter(n=>l(n,t)&&u(n,e)).length}let w=R(!1),T=R(null),j=R(`updated`),M=R(``),N=R(``),P=R(!1),F=I(()=>ve(fe.currentStep,`new-feature`,H(M))),B=R(e(new Map));a(()=>{let e=o.features.map(e=>String(e.id)),t=!1;return(async()=>{let n=await K(),r=e.filter(e=>!H(B).has(e));if(r.length===0)return;let i=await Promise.all(r.map(async e=>[e,await n.statusRepository.get(e)]));if(t)return;let a=new Map(H(B));for(let[e,t]of i)a.set(e,t);C(B,a,!0)})(),()=>{t=!0}}),a(()=>{H(w)&&h().then(()=>H(T)?.focus())});function V(){C(w,!0)}function U(){C(w,!1),C(M,``),C(N,``)}async function ne(){let e=H(M).trim();if(!(H(P)||e.length===0)&&H(N).trim().length!==0){C(P,!0);try{await o.onCreate(e,H(N).trim()),U()}finally{C(P,!1)}}}function re(e){e.key===`Escape`&&U()}function W(e){let t=oe(e),n=le(e,H(B).get(String(e.id))??null);return{id:e.id,name:e.name,description:e.description,surfaceCount:e.surfaces.length,actionCount:e.surfaces.reduce((e,t)=>e+t.actions.length,0),createdAt:e.createdAt,updatedAt:e.updatedAt,tags:e.tags,maturityPercentage:t.percentage,criticalIssueCount:t.criticalIssues.length,recommendedIssueCount:t.recommendedIssues.length,implementationPercentage:n.expectedCount===0?null:n.percentage,implementationFoundCount:n.foundCount,implementationExpectedCount:n.expectedCount,implementationHasReport:n.hasReport}}let G=I(()=>H(d).map(W).sort((e,t)=>H(j)===`name`?e.name.localeCompare(t.name):H(j)===`maturity`?t.maturityPercentage-e.maturityPercentage:new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime())),ce=I(()=>{let e=new Set;for(let t of o.features)for(let n of t.tags??[])e.add(ie(n.type));return[...e].sort((e,t)=>e.localeCompare(t))});function ue(e){let t=q.project?.implementationQueue??[],n=`feature:${String(e)}`;return t.some(e=>se(e)===n)}async function de(e){if(!q.project)return;let t=await(await K()).useCases.enqueueQueueItem(q.project.id,{kind:`feature`,featureId:e});q.project&&=t.project}async function J(e){if(!q.project)return;let t=q.project.implementationQueue??[],n=`feature:${String(e)}`,r=t.find(e=>se(e)===n);if(!r)return;let i=await(await K()).useCases.dequeueQueueItem(q.project.id,r.id);q.project&&=i}var me=je();p(`keydown`,v,re);var Y=y(me),he=_(Y),ge=_(he),_e=_(ge),X=f(_(_e),2);O(X);var xe=f(X,2),Se=e=>{var t=Te();c(`click`,t,()=>o.onSearch(``)),E(e,t)},Ce=I(()=>o.search.trim().length>0);D(xe,e=>{H(Ce)&&e(Se)}),A(_e);var we=f(_e,2),Z=_(we);ye(Z,{get tags(){return H(m)},get value(){return H(s)},onChange:e=>C(s,e,!0),countLabel:b});var Me=f(Z,2),Ne=f(_(Me),2),Q=_(Ne);Q.value=Q.__value=`updated`;var $=f(Q);$.value=$.__value=`name`;var Pe=f($);Pe.value=Pe.__value=`maturity`,A(Ne),A(Me);var Fe=f(Me,2);A(we),A(ge),A(he);var Ie=f(he,2),Le=e=>{var t=De(),n=_(t),r=e=>{var t=Ee(),n=f(_(t),2),r=_(n);A(n),A(t),c(`click`,r,()=>V()),E(e,t)},a=e=>{E(e,i(`No features match your search.`))};D(n,e=>{o.features.length===0?e(r):e(a,-1)}),A(t),E(e,t)},Re=e=>{var t=ke();r(t,21,()=>H(G),e=>e.id,(e,t)=>{var n=Oe(),r=_(n);{let e=I(()=>o.onRemoveTag?(e,n)=>o.onRemoveTag(H(t).id,{type:e,value:n}):void 0),n=I(()=>ue(H(t).id));be(r,{get summary(){return H(t)},get tagTypeOptions(){return H(ce)},deleteLabel:`Remove`,onAddTag:(e,n)=>o.onAddTag(H(t).id,{type:e,value:n}),get onRemoveTag(){return H(e)},onDelete:()=>o.onRemove(H(t).id),get queued(){return H(n)},onAddToQueue:()=>de(H(t).id),onRemoveFromQueue:()=>J(H(t).id)})}A(n),E(e,n)}),A(t),E(e,t)};D(Ie,e=>{H(G).length===0?e(Le):e(Re,-1)}),A(Y);var ze=f(Y,2),Be=e=>{var n=Ae(),r=_(n),i=_(r),a=f(_(i),2);A(i);var o=f(i,2),s=_(o),l=f(_(s));O(l),L(l,e=>C(T,e),()=>H(T)),A(s);var u=f(s,2),d=f(_(u));O(d),A(u);var m=f(u,2),h=_(m),v=f(h,2),y=_(v,!0);A(v),A(m),A(o),A(r),A(n),g(e=>{v.disabled=e,z(v,`title`,H(F).blocked?`Tutorial: name must be exactly "${H(F).requiredValue}"`:void 0),t(y,H(P)?`Creating...`:`Create feature`)},[()=>H(P)||H(M).trim().length===0||H(N).trim().length===0||H(F).blocked]),c(`click`,n,e=>{e.currentTarget===e.target&&U()}),c(`click`,a,U),p(`submit`,o,e=>{e.preventDefault(),ne()}),x(l,()=>H(M),e=>C(M,e)),x(d,()=>H(N),e=>C(N,e)),c(`click`,h,U),E(e,n)};D(ze,e=>{H(w)&&e(Be)}),g(()=>te(X,o.search)),c(`input`,X,e=>o.onSearch(e.target.value)),ee(Ne,()=>H(j),e=>C(j,e)),c(`click`,Fe,()=>V()),E(n,me),S()}o([`input`,`click`]);var Ne=e=>`${e.kind}|${e.provider}|${e.name}`.toLowerCase(),Q=e=>{let t=new Map;for(let n of e)for(let e of n.resources){let r=Ne(e),i={featureId:String(n.id),featureName:n.name},a=t.get(r);if(a){a.sources.some(e=>e.featureId===i.featureId)||a.sources.push(i);continue}t.set(r,{key:r,name:e.name,kind:e.kind,provider:e.provider,scope:e.scope,sensitivity:e.sensitivity,containsPii:e.containsPii,description:e.description,sources:[i]})}return Array.from(t.values())},$=e=>{let t=new Map;for(let n of e)for(let e of Se(n)){let r=e.namespace.toLowerCase(),i={featureId:String(n.id),featureName:n.name},a=t.get(r);if(a){a.sources.some(e=>e.featureId===i.featureId)||a.sources.push(i),e.fields.length>a.fieldCount&&(a.fieldCount=e.fields.length),!a.description&&e.description&&(a.description=e.description);continue}t.set(r,{key:r,namespace:e.namespace,description:e.description,fieldCount:e.fields.length,sources:[i]})}return Array.from(t.values())},Pe=e=>{let t=new Map;for(let n of e){let e=new Map((n.events??[]).map(e=>[String(e.name),e]));for(let r of Ce(n)){let i=String(r.name),a=i.toLowerCase(),o=e.get(i),s={featureId:String(n.id),featureName:n.name},c=t.get(a);if(c){if(c.sources.some(e=>e.featureId===s.featureId)||c.sources.push(s),c.emissions+=r.emissions.length,o){!c.description&&o.description&&(c.description=o.description);let e=o.payloadSchema?.length??0;e>c.payloadFieldCount&&(c.payloadFieldCount=e)}continue}t.set(a,{key:a,name:i,description:o?.description,payloadFieldCount:o?.payloadSchema?.length??0,emissions:r.emissions.length,sources:[s]})}}return Array.from(t.values())},Fe=e=>{let t=new Map;for(let n of e)for(let e of we(n)){let r=e.sources[0]?.description,i=`${e.fromSurfaceName}|${e.toSurfaceName}|${r??``}`.toLowerCase(),a={featureId:String(n.id),featureName:n.name},o=t.get(i);if(o){o.sources.some(e=>e.featureId===a.featureId)||o.sources.push(a),o.sourcesCount+=e.sources.length;continue}t.set(i,{key:i,sourceName:e.fromSurfaceName,targetName:e.toSurfaceName,label:r,sourcesCount:e.sources.length,sources:[a]})}return Array.from(t.values())},Ie=u(`<p class="rounded-lg border border-dashed border-hairline bg-white p-6 text-center text-sm text-slate-500"> </p>`),Le=u(`<div class="text-xs font-normal text-slate-500"> </div>`),Re=u(`<a class="rounded-full border border-cyan-100 bg-cyan-50/60 px-2 py-0.5 text-brand-700 hover:bg-cyan-50 hover:underline"> </a>`),ze=u(`<tr class="border-t border-slate-100"><td class="px-3 py-2 font-medium text-slate-950"> <!></td><td class="px-3 py-2 text-slate-600"> </td><td class="px-3 py-2 text-slate-600"> </td><td class="px-3 py-2 text-slate-600"> </td><td class="px-3 py-2 text-slate-600"> </td><td class="px-3 py-2 text-slate-600"> </td><td class="px-3 py-2 text-xs"><div class="flex flex-wrap gap-1"></div></td></tr>`),Be=u(`<div class="overflow-x-auto rounded-lg border border-hairline bg-white"><table class="w-full text-sm"><thead class="bg-slate-50 text-left text-xs uppercase tracking-wide text-slate-500"><tr><th class="px-3 py-2">Name</th><th class="px-3 py-2">Kind</th><th class="px-3 py-2">Provider</th><th class="px-3 py-2">Scope</th><th class="px-3 py-2">Sensitivity</th><th class="px-3 py-2">PII</th><th class="px-3 py-2">From features</th></tr></thead><tbody></tbody></table></div>`);function Ve(e,n){k(n,!0);let i=I(()=>Q(n.features)),a=I(()=>n.search.trim().length===0?H(i):H(i).filter(e=>{let t=n.search.toLowerCase();return e.name.toLowerCase().includes(t)||e.provider.toLowerCase().includes(t)||e.kind.toLowerCase().includes(t)||e.sources.some(e=>e.featureName.toLowerCase().includes(t))}));var o=l(),s=y(o),c=e=>{var n=Ie(),r=_(n,!0);A(n),g(()=>t(r,H(i).length===0?`No resources declared across the project features.`:`No resources match your search.`)),E(e,n)},u=e=>{var n=Be(),i=_(n),o=f(_(i));r(o,21,()=>H(a),e=>e.key,(e,n)=>{var i=ze(),a=_(i),o=_(a),s=f(o),c=e=>{var r=Le(),i=_(r,!0);A(r),g(()=>t(i,H(n).description)),E(e,r)};D(s,e=>{H(n).description&&e(c)}),A(a);var l=f(a),u=_(l,!0);A(l);var d=f(l),p=_(d,!0);A(d);var m=f(d),h=_(m,!0);A(m);var v=f(m),y=_(v,!0);A(v);var b=f(v),x=_(b,!0);A(b);var S=f(b),C=_(S);r(C,21,()=>H(n).sources,e=>e.featureId,(e,n)=>{var r=Re(),i=_(r,!0);A(r),g(()=>{z(r,`href`,`/features/${H(n).featureId}`),t(i,H(n).featureName)}),E(e,r)}),A(C),A(S),A(i),g(()=>{t(o,`${H(n).name??``} `),t(u,H(n).kind),t(p,H(n).provider),t(h,H(n).scope),t(y,H(n).sensitivity),t(x,H(n).containsPii?`Yes`:`No`)}),E(e,i)}),A(o),A(i),A(n),E(e,n)};D(s,e=>{H(a).length===0?e(c):e(u,-1)}),E(e,o),S()}var He=u(`<p class="rounded-lg border border-dashed border-hairline bg-white p-6 text-center text-sm text-slate-500"> </p>`),Ue=u(`<div class="text-xs font-normal text-slate-500"> </div>`),We=u(`<a class="rounded-full border border-cyan-100 bg-cyan-50/60 px-2 py-0.5 text-brand-700 hover:bg-cyan-50 hover:underline"> </a>`),Ge=u(`<tr class="border-t border-slate-100"><td class="px-3 py-2 font-medium text-slate-950"> <!></td><td class="px-3 py-2 text-slate-600"> </td><td class="px-3 py-2 text-xs"><div class="flex flex-wrap gap-1"></div></td></tr>`),Ke=u(`<div class="overflow-x-auto rounded-lg border border-hairline bg-white"><table class="w-full text-sm"><thead class="bg-slate-50 text-left text-xs uppercase tracking-wide text-slate-500"><tr><th class="px-3 py-2">Namespace</th><th class="px-3 py-2">Fields</th><th class="px-3 py-2">From features</th></tr></thead><tbody></tbody></table></div>`);function qe(e,n){k(n,!0);let i=I(()=>$(n.features)),a=I(()=>n.search.trim().length===0?H(i):H(i).filter(e=>{let t=n.search.toLowerCase();return e.namespace.toLowerCase().includes(t)||(e.description??``).toLowerCase().includes(t)||e.sources.some(e=>e.featureName.toLowerCase().includes(t))}));var o=l(),s=y(o),c=e=>{var n=He(),r=_(n,!0);A(n),g(()=>t(r,H(i).length===0?`No data entities declared across the project features.`:`No data entities match your search.`)),E(e,n)},u=e=>{var n=Ke(),i=_(n),o=f(_(i));r(o,21,()=>H(a),e=>e.key,(e,n)=>{var i=Ge(),a=_(i),o=_(a),s=f(o),c=e=>{var r=Ue(),i=_(r,!0);A(r),g(()=>t(i,H(n).description)),E(e,r)};D(s,e=>{H(n).description&&e(c)}),A(a);var l=f(a),u=_(l,!0);A(l);var d=f(l),p=_(d);r(p,21,()=>H(n).sources,e=>e.featureId,(e,n)=>{var r=We(),i=_(r,!0);A(r),g(()=>{z(r,`href`,`/features/${H(n).featureId}`),t(i,H(n).featureName)}),E(e,r)}),A(p),A(d),A(i),g(()=>{t(o,`${H(n).namespace??``} `),t(u,H(n).fieldCount)}),E(e,i)}),A(o),A(i),A(n),E(e,n)};D(s,e=>{H(a).length===0?e(c):e(u,-1)}),E(e,o),S()}var Je=u(`<p class="rounded-lg border border-dashed border-hairline bg-white p-6 text-center text-sm text-slate-500"> </p>`),Ye=u(`<div class="font-sans text-xs text-slate-500"> </div>`),Xe=u(`<a class="rounded-full border border-cyan-100 bg-cyan-50/60 px-2 py-0.5 text-brand-700 hover:bg-cyan-50 hover:underline"> </a>`),Ze=u(`<tr class="border-t border-slate-100"><td class="px-3 py-2 font-mono text-slate-950"> <!></td><td class="px-3 py-2 text-slate-600"> </td><td class="px-3 py-2 text-slate-600"> </td><td class="px-3 py-2 text-xs"><div class="flex flex-wrap gap-1"></div></td></tr>`),Qe=u(`<div class="overflow-x-auto rounded-lg border border-hairline bg-white"><table class="w-full text-sm"><thead class="bg-slate-50 text-left text-xs uppercase tracking-wide text-slate-500"><tr><th class="px-3 py-2">Event name</th><th class="px-3 py-2">Emissions</th><th class="px-3 py-2">Payload fields</th><th class="px-3 py-2">From features</th></tr></thead><tbody></tbody></table></div>`);function $e(e,n){k(n,!0);let i=I(()=>Pe(n.features)),a=I(()=>n.search.trim().length===0?H(i):H(i).filter(e=>{let t=n.search.toLowerCase();return e.name.toLowerCase().includes(t)||(e.description??``).toLowerCase().includes(t)||e.sources.some(e=>e.featureName.toLowerCase().includes(t))}));var o=l(),s=y(o),c=e=>{var n=Je(),r=_(n,!0);A(n),g(()=>t(r,H(i).length===0?`No events registered across the project features.`:`No events match your search.`)),E(e,n)},u=e=>{var n=Qe(),i=_(n),o=f(_(i));r(o,21,()=>H(a),e=>e.key,(e,n)=>{var i=Ze(),a=_(i),o=_(a),s=f(o),c=e=>{var r=Ye(),i=_(r,!0);A(r),g(()=>t(i,H(n).description)),E(e,r)};D(s,e=>{H(n).description&&e(c)}),A(a);var l=f(a),u=_(l,!0);A(l);var d=f(l),p=_(d,!0);A(d);var m=f(d),h=_(m);r(h,21,()=>H(n).sources,e=>e.featureId,(e,n)=>{var r=Xe(),i=_(r,!0);A(r),g(()=>{z(r,`href`,`/features/${H(n).featureId}`),t(i,H(n).featureName)}),E(e,r)}),A(h),A(m),A(i),g(()=>{t(o,`${H(n).name??``} `),t(u,H(n).emissions),t(p,H(n).payloadFieldCount)}),E(e,i)}),A(o),A(i),A(n),E(e,n)};D(s,e=>{H(a).length===0?e(c):e(u,-1)}),E(e,o),S()}var et=u(`<p class="rounded-lg border border-dashed border-hairline bg-white p-6 text-center text-sm text-slate-500"> </p>`),tt=u(`<a class="rounded-full border border-cyan-100 bg-cyan-50/60 px-2 py-0.5 text-brand-700 hover:bg-cyan-50 hover:underline"> </a>`),nt=u(`<tr class="border-t border-slate-100"><td class="px-3 py-2 font-medium text-slate-950"> </td><td class="px-3 py-2 text-slate-700"> </td><td class="px-3 py-2 text-slate-600"> </td><td class="px-3 py-2 text-xs"><div class="flex flex-wrap gap-1"></div></td></tr>`),rt=u(`<div class="overflow-x-auto rounded-lg border border-hairline bg-white"><table class="w-full text-sm"><thead class="bg-slate-50 text-left text-xs uppercase tracking-wide text-slate-500"><tr><th class="px-3 py-2">From</th><th class="px-3 py-2">To</th><th class="px-3 py-2">Label</th><th class="px-3 py-2">From features</th></tr></thead><tbody></tbody></table></div>`);function it(e,n){k(n,!0);let i=I(()=>Fe(n.features)),a=I(()=>n.search.trim().length===0?H(i):H(i).filter(e=>{let t=n.search.toLowerCase();return e.sourceName.toLowerCase().includes(t)||e.targetName.toLowerCase().includes(t)||(e.label??``).toLowerCase().includes(t)||e.sources.some(e=>e.featureName.toLowerCase().includes(t))}));var o=l(),s=y(o),c=e=>{var n=et(),r=_(n,!0);A(n),g(()=>t(r,H(i).length===0?`No transitions declared across the project features.`:`No transitions match your search.`)),E(e,n)},u=e=>{var n=rt(),i=_(n),o=f(_(i));r(o,21,()=>H(a),e=>e.key,(e,n)=>{var i=nt(),a=_(i),o=_(a,!0);A(a);var s=f(a),c=_(s,!0);A(s);var l=f(s),u=_(l,!0);A(l);var d=f(l),p=_(d);r(p,21,()=>H(n).sources,e=>e.featureId,(e,n)=>{var r=tt(),i=_(r,!0);A(r),g(()=>{z(r,`href`,`/features/${H(n).featureId}`),t(i,H(n).featureName)}),E(e,r)}),A(p),A(d),A(i),g(()=>{t(o,H(n).sourceName),t(c,H(n).targetName),t(u,H(n).label??`-`)}),E(e,i)}),A(o),A(i),A(n),E(e,n)};D(s,e=>{H(a).length===0?e(c):e(u,-1)}),E(e,o),S()}var at=u(`<div class="px-6 py-10 text-center text-xs text-slate-500">No edits yet. Project metadata changes, feature add/remove, queue mutations - they all land here.</div>`),ot=u(`<span class="ml-1 text-purple-700"> </span>`),st=u(`<li class="flex items-start gap-3 px-4 py-2.5 text-xs"><span> </span> <div class="min-w-0 flex-1"><p class="truncate font-medium text-slate-800"> </p> <p class="mt-0.5 text-[11px] text-slate-500"> <!></p></div></li>`),ct=u(`<ol class="divide-y divide-slate-100"></ol>`),lt=u(`<section class="rounded-lg border border-hairline bg-white"><header class="flex items-center justify-between border-b border-hairline px-4 py-3"><div><h2 class="text-sm font-semibold text-slate-950">Project history</h2> <p class="mt-0.5 text-xs text-slate-500"> </p></div> <span class="rounded-md bg-slate-100 px-2 py-0.5 text-[10px] font-medium uppercase tracking-wide text-slate-600">Audit</span></header> <!></section>`);function ut(e,n){k(n,!0);let i=I(()=>[...q.historyEntries].reverse()),a=e=>{let t=new Date(e),n=new Date,r=t.getFullYear()===n.getFullYear()&&t.getMonth()===n.getMonth()&&t.getDate()===n.getDate(),i=t.toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`});return r?i:`${t.toLocaleDateString([],{month:`short`,day:`numeric`})} ${i}`},o=e=>e===`mcp`?`bg-purple-100 text-purple-700`:e===`system`?`bg-neutral-100 text-neutral-600`:`bg-sky-100 text-sky-700`,s=e=>e===`mcp`?`AI`:e===`system`?`sys`:e.replace(/^user-/,``).replace(/^Anon-/,``);var c=lt(),l=_(c),u=_(l),d=f(_(u),2),p=_(d);A(d),A(u),N(2),A(l);var m=f(l,2),h=e=>{E(e,at())},v=e=>{var n=ct();r(n,21,()=>H(i),e=>e.id,(e,n)=>{var r=st(),i=_(r),c=_(i,!0);A(i);var l=f(i,2),u=_(l),d=_(u,!0);A(u);var p=f(u,2),m=_(p),h=f(m),v=e=>{var r=ot(),i=_(r);A(r),g(()=>t(i,`· for ${H(n).actingFor??``}`)),E(e,r)};D(h,e=>{H(n).actingFor&&e(v)}),A(p),A(l),A(r),g((e,r,a)=>{B(i,1,`mt-0.5 inline-flex shrink-0 items-center rounded px-1.5 py-0.5 text-[10px] font-semibold ${e??``}`),z(i,`title`,`Author: ${H(n).author}`),t(c,r),t(d,H(n).label??`Edit`),t(m,`${a??``} `)},[()=>o(H(n).author),()=>s(H(n).author),()=>a(H(n).ts)]),E(e,r)}),A(n),E(e,n)};D(m,e=>{H(i).length===0?e(h):e(v,-1)}),A(c),g(()=>t(p,`${q.historyEntries.length??``} edit${q.historyEntries.length===1?``:`s`} · read-only`)),E(e,c),S()}var dt=u(`<span aria-hidden="true">⬇</span> `,1),ft=u(`<div class="space-y-3"><label class="block"><span class="sr-only">Project name</span> <input type="text" class="w-full rounded-lg border border-slate-300 bg-white px-3 py-2 text-3xl font-semibold tracking-tight text-slate-950 outline-none focus:border-brand-700 focus:ring-2 focus:ring-brand-100 sm:text-4xl"/></label> <label class="block"><span class="sr-only">Project description</span> <textarea rows="3" placeholder="Describe what belongs in this project..." class="w-full resize-none rounded-lg border border-slate-300 bg-white px-3 py-2 text-sm leading-6 text-slate-700 outline-none focus:border-brand-700 focus:ring-2 focus:ring-brand-100"></textarea></label> <div class="flex flex-wrap gap-2"><button type="button" class="rounded-md bg-slate-900 px-3 py-1.5 text-xs font-medium text-white disabled:opacity-50"> </button> <button type="button" class="rounded-md border border-slate-300 bg-white px-3 py-1.5 text-xs font-medium text-slate-700 hover:bg-slate-50">Cancel</button></div></div>`),pt=u(`<p class="mt-2 max-w-3xl text-sm leading-6 text-slate-600"> </p>`),mt=u(`<p class="mt-2 max-w-3xl text-sm leading-6 text-slate-500">A project that groups related behavior models and their implementation signals.</p>`),ht=u(`<div class="mt-3"><!></div>`),gt=u(`<h1 class="truncate text-4xl font-semibold tracking-tight text-slate-950"> </h1> <!> <!> <div class="mt-3 flex flex-wrap items-center gap-3 text-xs text-slate-500"><button class="font-medium text-brand-700 hover:underline">Edit project</button> <span> </span> <span> </span></div>`,1),_t=u(`<p class="mt-4 rounded-md border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700"> <button type="button" class="ml-2 underline">dismiss</button></p>`),vt=u(`<button type="button"> <span> </span></button>`),yt=u(`<div class="mb-5 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between"><input type="search" class="h-10 w-full max-w-sm rounded-lg border border-slate-300 bg-white px-3 text-sm outline-none focus:border-brand-700 focus:ring-2 focus:ring-brand-100"/> <p class="text-xs text-slate-500"> </p></div>`),bt=u(`<p class="text-sm text-slate-500">Loading features...</p>`),xt=u(`<div class="motion-reduce:animate-none! motion-reduce:opacity-100!"><!></div>`),St=u(`<div class="mx-auto max-w-7xl px-4 py-8 sm:px-6"><header class="mb-6 border-b border-slate-200 pb-6"><div class="flex items-center justify-between gap-3"><a href="/projects" class="inline-flex items-center gap-1 text-xs font-semibold uppercase tracking-wide text-brand-700 hover:underline"><span aria-hidden="true">←</span> Back to projects</a> <a class="inline-flex items-center gap-1.5 rounded-md border border-slate-300 bg-white px-3 py-1.5 text-xs font-medium text-slate-700 transition hover:border-brand-300 hover:bg-cyan-50 hover:text-brand-800" title="Open the whole project behavior graph">Graph</a> <!></div> <div class="mt-3"><div class="min-w-0"><!></div></div> <!></header> <div class="mb-4 rounded-xl border border-slate-200 bg-white p-1 shadow-sm shadow-slate-950/5"><nav class="flex flex-wrap gap-1"></nav></div> <!> <!></div>`);function Ct(e,i){k(i,!0);let o=[{id:`features`,label:`Features`},{id:`resources`,label:`Resources`},{id:`data`,label:`Entity`},{id:`events`,label:`Events`},{id:`transitions`,label:`Transitions`},{id:`history`,label:`History`}],s=R(!1),u=R(``),p=R(``);a(()=>{let e=q.project;!e||H(s)||(C(u,e.name,!0),C(p,e.description??``,!0))}),a(()=>{let e=q.project?.tags??[];e.length>0&&pe.registerTypes(e.map(e=>e.type))});function m(e){let t=Z.features;switch(e){case`features`:return t.length;case`resources`:return Q(t).length;case`data`:return $(t).length;case`events`:return Pe(t).length;case`transitions`:return Fe(t).length;case`history`:return q.historyEntries.length}}async function h(){q.project&&(await q.updateMetadata(H(u),H(p)),q.saveError||C(s,!1))}async function v(e,t){Z.features.find(t=>t.id===e)&&(await J.addTag(String(e),t),q.project&&await Z.load(q.project.featureIds))}async function b(e,t){Z.features.find(t=>t.id===e)&&(await J.removeTag(String(e),t),q.project&&await Z.load(q.project.featureIds))}async function T(e,t){let n=await J.create(e,t);await q.addFeature(n),await U(`/features/${n}`)}async function ee(e){await q.removeFeature(e),q.project&&await Z.load(q.project.featureIds)}let j=R(!1);async function M(){let e=q.project;if(!e||H(j))return;let t=await ue({title:`Export project`,message:`Encrypt "${e.name}" with a passphrase and download as a .unspa file. You'll need the same passphrase to import it back. Minimum 8 characters.`,inputLabel:`Passphrase`,placeholder:`At least 8 characters`,password:!0,confirmLabel:`Export`,tone:`info`,validate:e=>e.length<8?`Passphrase must be at least 8 characters.`:null});if(t!==null){C(j,!0);try{let{envelope:n,projectName:r}=await ge(e.id,t);X(n,r)}catch(e){await G({title:`Export failed`,message:e instanceof _e?e.message:`Export failed: ${e.message}`,tone:`danger`})}finally{C(j,!1)}}}var N=l(),F=y(N),L=e=>{let i=I(()=>q.project);var a=St(),S=_(a),k=_(S),N=f(_(k),2);he(f(N,2),{align:`right`,placement:`down`,label:`Project actions`,children:(e,n=w)=>{Y(e,{get disabled(){return H(j)},onclick:()=>{n()(),M()},children:(e,n)=>{var r=dt(),i=f(y(r));g(()=>t(i,` ${H(j)?`Exporting...`:`Export .unspa`}`)),E(e,r)},$$slots:{default:!0}})},$$slots:{default:!0}}),A(k);var F=f(k,2),L=_(F),R=_(L),V=e=>{var n=ft(),r=_(n),i=f(_(r),2);O(i),A(r);var a=f(r,2),o=f(_(a),2);P(o),A(a);var l=f(a,2),d=_(l),m=_(d,!0);A(d);var v=f(d,2);A(l),A(n),g(e=>{d.disabled=e,t(m,q.saving?`Saving...`:`Save project`)},[()=>q.saving||H(u).trim().length===0||H(p).trim().length===0]),x(i,()=>H(u),e=>C(u,e)),x(o,()=>H(p),e=>C(p,e)),c(`click`,d,h),c(`click`,v,()=>C(s,!1)),E(e,n)},U=e=>{var n=gt(),r=y(n),a=_(r,!0);A(r);var o=f(r,2),l=e=>{var n=pt(),r=_(n,!0);A(n),g(()=>t(r,H(i).description)),E(e,n)},u=e=>{E(e,mt())};D(o,e=>{H(i).description?e(l):e(u,-1)});var d=f(o,2),p=e=>{var t=ht();me(_(t),{get tags(){return H(i).tags}}),A(t),E(e,t)};D(d,e=>{H(i).tags&&H(i).tags.length>0&&e(p)});var m=f(d,2),h=_(m),v=f(h,2),b=_(v);A(v);var x=f(v,2),S=_(x,!0);A(x),A(m),g(e=>{t(a,H(i).name),t(b,`Updated ${e??``}`),t(S,q.saving?`Saving...`:`Saved`)},[()=>new Date(H(i).updatedAt).toLocaleString()]),c(`click`,h,()=>C(s,!0)),E(e,n)};D(R,e=>{H(s)?e(V):e(U,-1)}),A(L),A(F);var ie=f(F,2),ae=e=>{var n=_t(),r=_(n),i=f(r);A(n),g(()=>t(r,`${q.saveError??``} `)),c(`click`,i,()=>q.dismissSaveError()),E(e,n)};D(ie,e=>{q.saveError&&e(ae)}),A(S);var W=f(S,2),oe=_(W);r(oe,21,()=>o,e=>e.id,(e,n)=>{var r=vt(),i=_(r),a=f(i),o=_(a,!0);A(a),A(r),g(e=>{B(r,1,`rounded-md px-3 py-1.5 text-sm font-medium transition ${q.activePanel===H(n).id?`bg-slate-900 text-white shadow-sm`:`text-slate-600 hover:bg-slate-100 hover:text-slate-950`}`),t(i,`${H(n).label??``} `),B(a,1,`ml-1 rounded bg-white/80 px-1.5 py-0.5 text-xs ${q.activePanel===H(n).id?`text-brand-900`:`text-slate-600`}`),t(o,e)},[()=>m(H(n).id)]),c(`click`,r,()=>q.setActivePanel(H(n).id)),E(e,r)}),A(oe),A(W);var G=f(W,2),se=e=>{var n=yt(),r=_(n);O(r);var i=f(r,2),a=_(i);A(i),A(n),g(e=>{z(r,`placeholder`,`Search ${q.activePanel}...`),te(r,q.search),t(a,`${e??``} ${q.activePanel??``} in this project`)},[()=>m(q.activePanel)]),c(`input`,r,e=>q.setSearch(e.target.value)),E(e,n)};D(G,e=>{q.activePanel!==`features`&&q.activePanel!==`history`&&e(se)});var ce=f(G,2),K=e=>{E(e,bt())},le=e=>{var t=l();d(y(t),()=>q.activePanel,e=>{var t=xt(),r=_(t),i=e=>{Me(e,{get features(){return Z.features},get search(){return q.search},onSearch:e=>q.setSearch(e),onCreate:T,onAddTag:v,onRemoveTag:b,onRemove:ee})},a=e=>{Ve(e,{get features(){return Z.features},get search(){return q.search}})},o=e=>{qe(e,{get features(){return Z.features},get search(){return q.search}})},s=e=>{$e(e,{get features(){return Z.features},get search(){return q.search}})},c=e=>{it(e,{get features(){return Z.features},get search(){return q.search}})},l=e=>{ut(e,{})};D(r,e=>{q.activePanel===`features`?e(i):q.activePanel===`resources`?e(a,1):q.activePanel===`data`?e(o,2):q.activePanel===`events`?e(s,3):q.activePanel===`transitions`?e(c,4):q.activePanel===`history`&&e(l,5)}),A(t),n(1,t,()=>ne,()=>({duration:140,easing:re})),E(e,t)}),E(e,t)};D(ce,e=>{Z.loading?e(K):e(le,-1)}),A(a),g(()=>z(N,`href`,`/projects/${H(i).id}/graph`)),E(e,a)};D(F,e=>{q.project&&e(L)}),E(e,N),S()}o([`click`,`input`]);var wt=u(`<p class="mx-auto max-w-7xl px-4 py-10 text-sm text-neutral-500">Loading project…</p>`),Tt=u(`<p class="mx-auto max-w-7xl px-4 py-10 text-sm text-red-600"> </p>`),Et=u(`<p class="mx-auto max-w-7xl px-4 py-10 text-sm text-neutral-500">Project not found. <a href="/projects" class="text-brand-700 hover:underline">← Back to projects</a></p>`);function Dt(e,n){k(n,!1);let r=()=>b(xe,`$page`,i),[i,a]=T(),o=null;F(async()=>{let e=r().params.id;if(!e)return;let t=W(e);await q.load(t),await Z.loadAllSummaries(),q.project&&await Z.load(q.project.featureIds),o=de(async e=>{q.project&&(e.kind===`project`&&e.id===String(t)?await Z.syncWith(q.project.featureIds):e.kind===`feature`&&(q.project.featureIds.some(t=>String(t)===e.id)?await Z.refetchOne(ce(e.id)):await Z.loadAllSummaries()))})}),j(()=>{o?.(),o=null,q.reset(),Z.reset()}),M();var c=l();V(`ffmenf`,e=>{m(()=>{s.title=`Project / Unspaghettit`})});var u=y(c),d=e=>{E(e,wt())},f=e=>{var n=Tt(),r=_(n,!0);A(n),g(()=>t(r,q.error)),E(e,n)},p=e=>{E(e,Et())},h=e=>{Ct(e,{})};D(u,e=>{q.loading?e(d):q.error?e(f,1):q.project?e(h,-1):e(p,2)}),E(e,c),S(),a()}export{Dt as component};
@@ -0,0 +1,2 @@
1
+ import{A as e,J as t,M as n,N as r,Q as i,U as a,W as o,X as s,Z as c,at as l,ct as u,et as d,it as f,j as p,k as m,lt as h,mt as g,n as _,r as v,tt as y,x as b,z as x}from"../chunks/BPl9BITm.js";import"../chunks/xihTtKlq.js";import{Q as S,it as C}from"../chunks/D64sGJRN.js";import{t as w}from"../chunks/yShDxCNj.js";import{t as T}from"../chunks/Bfc9rQXP.js";import{t as E}from"../chunks/DryaQyjN2.js";import{t as D}from"../chunks/ClC4qR7W2.js";import{t as O}from"../chunks/B3vnQs252.js";var k=r(`<p class="mx-auto max-w-7xl px-4 py-10 text-sm text-neutral-500">Loading project...</p>`),A=r(`<p class="mx-auto max-w-7xl px-4 py-10 text-sm text-red-600"> </p>`),j=r(`<p class="mx-auto max-w-7xl px-4 py-10 text-sm text-neutral-500">Project not found. <a href="/projects" class="text-brand-700 hover:underline">Back to projects</a></p>`),M=r(`<p class="mx-auto max-w-7xl px-4 py-10 text-sm text-neutral-500">Loading project features...</p>`),N=r(`<p class="mx-auto max-w-7xl px-4 py-10 text-sm text-red-600"> </p>`),P=r(`<div class="mx-auto max-w-7xl px-4 py-10"><p class="text-sm font-medium text-slate-900">No feature snapshots loaded for this project.</p> <p class="mt-2 text-sm text-slate-600"> </p></div>`),F=r(`<main class="mx-auto max-w-[1800px] px-4 py-6"><!></main>`);function I(r,I){h(I,!0);let L=()=>l(E,`$page`,R),[R,z]=f(),B=null,V=y(!1);v(async()=>{let e=L().params.id;if(!e)return;d(V,!1);let t=S(e);await T.load(t),await O.loadAllSummaries(),T.project&&await O.load(T.project.featureIds),d(V,!0),B=w(async e=>{T.project&&(e.kind===`project`&&e.id===String(t)?(d(V,!1),await O.syncWith(T.project.featureIds),d(V,!0)):e.kind===`feature`&&(T.project.featureIds.some(t=>String(t)===e.id)?await O.refetchOne(C(e.id)):await O.loadAllSummaries()))})}),_(()=>{B?.(),B=null,d(V,!1),T.reset(),O.reset()});var H=n();b(`106h624`,e=>{a(()=>{t.title=`Project Graph / Unspaghettit`})});var U=c(H),W=e=>{p(e,k())},G=t=>{var n=A(),r=s(n,!0);g(n),o(()=>e(r,T.error)),p(t,n)},K=e=>{p(e,j())},q=e=>{p(e,M())},J=t=>{var n=N(),r=s(n,!0);g(n),o(()=>e(r,O.error)),p(t,n)},Y=t=>{var n=P(),r=i(s(n),2),a=s(r);g(r),g(n),o(()=>e(a,`The project lists ${T.project.featureIds.length??``} feature${T.project.featureIds.length===1?``:`s`},
2
+ but the graph could not load their behavior models from the shared hub.`)),p(t,n)},X=e=>{var t=F();D(s(t),{get project(){return T.project},get features(){return O.features}}),g(t),p(e,t)};m(U,e=>{T.loading?e(W):T.error?e(G,1):T.project?O.loading||!x(V)?e(q,3):O.error?e(J,4):T.project.featureIds.length>0&&O.features.length===0?e(Y,5):e(X,-1):e(K,2)}),p(r,H),u(),z()}export{I as component};
@@ -1,4 +1,4 @@
1
- import{A as e,D as t,E as n,F as r,I as i,L as a,N as o,Q as s,T as c,W as l,X as u,Z as d,a as f,ct as p,et as m,j as h,k as g,lt as ee,mt as _,pt as v,rt as y,tt as te,u as b,v as x,z as S}from"../chunks/BPl9BITm.js";import{t as C}from"../chunks/DatGSObE.js";import"../chunks/xihTtKlq.js";import{ht as ne,j as w,pt as T}from"../chunks/Bp2_Vghh.js";import"../chunks/DHoA038D.js";import{t as re}from"../chunks/cMamJTsF.js";import{t as ie}from"../chunks/DKgYpi6_.js";import{t as E}from"../chunks/BzLd0mTH.js";import{t as D}from"../chunks/BQ9GodWX2.js";import{t as O}from"../chunks/hpWJNn0t2.js";var k=o(`<section class="scroll-mt-24 space-y-3 border-b border-hairline pb-8 last:border-b-0"><h2 class="text-xl font-semibold tracking-tight"><a class="text-slate-950 hover:text-brand-700"> </a></h2> <div class="space-y-3 text-sm leading-7 text-slate-700"><!></div></section>`);function A(t,n){var r=k(),i=u(r),a=u(i),o=u(a,!0);_(a),_(i);var d=s(i,2);c(u(d),()=>n.children),_(d),_(r),l(()=>{b(r,`id`,n.id),b(a,`href`,`#${n.id}`),e(o,n.title)}),h(t,r)}var j=o(`<pre class="mono overflow-x-auto rounded-lg border border-slate-800 bg-slate-950 p-4 text-[12px] leading-relaxed text-slate-100"><code> </code></pre>`);function M(t,n){let r=f(n,`language`,3,`text`);var i=j(),a=u(i),o=u(a,!0);_(a),_(i),l(()=>{b(i,`data-lang`,r()),e(o,n.code)}),h(t,i)}var N=o(`<p class="mb-1 font-semibold"> </p>`),P=o(`<div><!> <div class="leading-6"><!></div></div>`);function F(t,n){let r=f(n,`tone`,3,`info`),i=y(()=>r()===`warning`?`bg-amber-50 border-amber-200 text-amber-900`:r()===`success`?`bg-emerald-50 border-emerald-200 text-emerald-900`:`bg-brand-50 border-brand-200 text-brand-900`);var a=P(),o=u(a),d=t=>{var r=N(),i=u(r,!0);_(r),l(()=>e(i,n.title)),h(t,r)};g(o,e=>{n.title&&e(d)});var p=s(o,2);c(u(p),()=>n.children),_(p),_(a),l(()=>x(a,1,`rounded-md border p-3 text-sm ${S(i)??``}`)),h(t,a)}var I=e=>t=>typeof t?.name==`string`&&E(t.name,e),L=()=>{let e=O.feature;if(!e)return null;for(let t=e.surfaces.length-1;t>=0;t--){let n=e.surfaces[t];if(n&&n.actions.length!==0)return n.actions[n.actions.length-1]??null}return null},R=()=>{let e=L();return e?e.parameters.some(e=>E(e.name,`politely`)&&e.type===`boolean`):!1},z=()=>{let e=L();return e?e.rules.filter(e=>!e.condition||`kind`in e.condition?!1:w(e.condition.left)&&e.effect.type===`show_message`).length:0},ae={id:`first-feature`,name:`Build your first feature, end to end`,summary:`Walks you from an empty app to a Feature with one Action you run in the simulator. About 3 minutes. Uses fixed names so the experience is the same for everyone.`,steps:[{id:`welcome`,title:`Welcome`,body:`We'll build a tiny Feature together and run it in the simulator. We'll use fixed names so the rest of the tutorial reads the same way for you as for anyone else. Click Next when you're ready.`,advance:{kind:`manual`}},{id:`new-project`,title:`Create a project`,body:`Click 'New project'. A Project groups Features that belong to the same product or codebase.`,target:`[data-tour="new-project-button"]`,route:{pathname:`/projects`,label:`Go to Projects`},advance:{kind:`click`,selector:`[data-tour="new-project-button"]`}},{id:`fill-project`,title:`Name the project`,body:`Type exactly 'Hello World' in the Name field, then click 'New project'. The description is pre-filled - keep it as-is or tweak if you want.`,target:`[data-tour="new-project-form"]`,focusSelector:`[data-tour="new-project-form"] input[type="text"]`,prefill:[{selector:`[data-tour="new-project-description"]`,value:`A first project to learn Unspaghettit.`}],requireExact:{formId:`new-project`,value:`Hello World`},advance:{kind:`event`,event:`project.created`,match:I(`Hello World`)}},{id:`new-feature`,title:`Create a feature`,body:`Inside your project, click 'New feature'. A Feature is one coherent slice of behavior. Keep it small.`,target:`[data-tour="new-feature-button"]`,advance:{kind:`click`,selector:`[data-tour="new-feature-button"]`}},{id:`fill-feature`,title:`Name the feature`,body:`Type 'Greeting' in the Name field, then click 'Create feature'. The description is pre-filled.`,target:`[data-tour="new-feature-form"]`,focusSelector:`[data-tour="new-feature-form"] input[type="text"]`,prefill:[{selector:`[data-tour="new-feature-description"]`,value:`User opens the app and is welcomed.`}],requireExact:{formId:`new-feature`,value:`Greeting`},advance:{kind:`event`,event:`feature.created`,match:I(`Greeting`)}},{id:`add-surface`,title:`Add a surface`,body:`Click 'Add surface'. A Surface is one context where actions happen (a screen, a terminal, a workflow).`,target:`[data-tour="add-surface-button"]`,advance:{kind:`click`,selector:`[data-tour="add-surface-button"]`}},{id:`chooser-create-new`,title:`Pick "Create new"`,body:`We're starting from scratch, so click the 'Create new' card.`,target:`[data-tour="chooser-create-new"]`,advance:{kind:`click`,selector:`[data-tour="chooser-create-new"]`}},{id:`fill-surface`,title:`Name the surface`,body:`Surface name: type exactly 'Welcome Screen'. Keep the type on Screen. Click 'Create surface' to submit.`,target:`[data-tour="blank-surface-form"]`,focusSelector:`[data-tour="blank-surface-form"] input[type="text"]`,requireExact:{formId:`blank-surface`,value:`Welcome Screen`},advance:{kind:`event`,event:`editor.surface.added`,match:I(`Welcome Screen`)}},{id:`add-action`,title:`Add an action`,body:`Type exactly 'Say Hello' in the action form, then click 'Add action' (or press Enter). An Action is something the user or system can do on this surface.`,target:`[data-tour="add-action-form"]`,focusSelector:`[data-tour="add-action-form"] input[type="text"]`,requireExact:{formId:`add-action`,value:`Say Hello`},advance:{kind:`event`,event:`editor.action.added`,match:I(`Say Hello`)}},{id:`add-parameter`,title:`Give the action a parameter`,body:`The Say Hello editor just opened. In the Parameters section, click '+ Parameter'. The name field will focus automatically. Then:
1
+ import{A as e,D as t,E as n,F as r,I as i,L as a,N as o,Q as s,T as c,W as l,X as u,Z as d,a as f,ct as p,et as m,j as h,k as g,lt as ee,mt as _,pt as v,rt as y,tt as te,u as b,v as x,z as S}from"../chunks/BPl9BITm.js";import{n as C}from"../chunks/ByaoVvNB.js";import"../chunks/xihTtKlq.js";import{D as w,gt as T,vt as ne}from"../chunks/D64sGJRN.js";import"../chunks/Da59TXPe.js";import{t as re}from"../chunks/cMamJTsF.js";import{t as ie}from"../chunks/CuGlh1c2.js";import{t as E}from"../chunks/BzLd0mTH.js";import{t as D}from"../chunks/BQ9GodWX2.js";import{t as O}from"../chunks/DhTiE3j02.js";var k=o(`<section class="scroll-mt-24 space-y-3 border-b border-hairline pb-8 last:border-b-0"><h2 class="text-xl font-semibold tracking-tight"><a class="text-slate-950 hover:text-brand-700"> </a></h2> <div class="space-y-3 text-sm leading-7 text-slate-700"><!></div></section>`);function A(t,n){var r=k(),i=u(r),a=u(i),o=u(a,!0);_(a),_(i);var d=s(i,2);c(u(d),()=>n.children),_(d),_(r),l(()=>{b(r,`id`,n.id),b(a,`href`,`#${n.id}`),e(o,n.title)}),h(t,r)}var j=o(`<pre class="mono overflow-x-auto rounded-lg border border-[#1e293b] bg-[#020617] p-4 text-[12px] leading-relaxed text-[#eaeef4]"><code> </code></pre>`);function M(t,n){let r=f(n,`language`,3,`text`);var i=j(),a=u(i),o=u(a,!0);_(a),_(i),l(()=>{b(i,`data-lang`,r()),e(o,n.code)}),h(t,i)}var N=o(`<p class="mb-1 font-semibold"> </p>`),P=o(`<div><!> <div class="leading-6"><!></div></div>`);function F(t,n){let r=f(n,`tone`,3,`info`),i=y(()=>r()===`warning`?`bg-amber-50 border-amber-200 text-amber-900`:r()===`success`?`bg-emerald-50 border-emerald-200 text-emerald-900`:`bg-brand-50 border-brand-200 text-brand-900`);var a=P(),o=u(a),d=t=>{var r=N(),i=u(r,!0);_(r),l(()=>e(i,n.title)),h(t,r)};g(o,e=>{n.title&&e(d)});var p=s(o,2);c(u(p),()=>n.children),_(p),_(a),l(()=>x(a,1,`rounded-md border p-3 text-sm ${S(i)??``}`)),h(t,a)}var I=e=>t=>typeof t?.name==`string`&&E(t.name,e),L=()=>{let e=O.feature;if(!e)return null;for(let t=e.surfaces.length-1;t>=0;t--){let n=e.surfaces[t];if(n&&n.actions.length!==0)return n.actions[n.actions.length-1]??null}return null},R=()=>{let e=L();return e?e.parameters.some(e=>E(e.name,`politely`)&&e.type===`boolean`):!1},z=()=>{let e=L();return e?e.rules.filter(e=>!e.condition||`kind`in e.condition?!1:w(e.condition.left)&&e.effect.type===`show_message`).length:0},ae={id:`first-feature`,name:`Build your first feature, end to end`,summary:`Walks you from an empty app to a Feature with one Action you run in the simulator. About 3 minutes. Uses fixed names so the experience is the same for everyone.`,steps:[{id:`welcome`,title:`Welcome`,body:`We'll build a tiny Feature together and run it in the simulator. We'll use fixed names so the rest of the tutorial reads the same way for you as for anyone else. Click Next when you're ready.`,advance:{kind:`manual`}},{id:`new-project`,title:`Create a project`,body:`Click 'New project'. A Project groups Features that belong to the same product or codebase.`,target:`[data-tour="new-project-button"]`,route:{pathname:`/projects`,label:`Go to Projects`},advance:{kind:`click`,selector:`[data-tour="new-project-button"]`}},{id:`fill-project`,title:`Name the project`,body:`Type exactly 'Hello World' in the Name field, then click 'New project'. The description is pre-filled - keep it as-is or tweak if you want.`,target:`[data-tour="new-project-form"]`,focusSelector:`[data-tour="new-project-form"] input[type="text"]`,prefill:[{selector:`[data-tour="new-project-description"]`,value:`A first project to learn Unspaghettit.`}],requireExact:{formId:`new-project`,value:`Hello World`},advance:{kind:`event`,event:`project.created`,match:I(`Hello World`)}},{id:`new-feature`,title:`Create a feature`,body:`Inside your project, click 'New feature'. A Feature is one coherent slice of behavior. Keep it small.`,target:`[data-tour="new-feature-button"]`,advance:{kind:`click`,selector:`[data-tour="new-feature-button"]`}},{id:`fill-feature`,title:`Name the feature`,body:`Type 'Greeting' in the Name field, then click 'Create feature'. The description is pre-filled.`,target:`[data-tour="new-feature-form"]`,focusSelector:`[data-tour="new-feature-form"] input[type="text"]`,prefill:[{selector:`[data-tour="new-feature-description"]`,value:`User opens the app and is welcomed.`}],requireExact:{formId:`new-feature`,value:`Greeting`},advance:{kind:`event`,event:`feature.created`,match:I(`Greeting`)}},{id:`add-surface`,title:`Add a surface`,body:`Click 'Add surface'. A Surface is one context where actions happen (a screen, a terminal, a workflow).`,target:`[data-tour="add-surface-button"]`,advance:{kind:`click`,selector:`[data-tour="add-surface-button"]`}},{id:`chooser-create-new`,title:`Pick "Create new"`,body:`We're starting from scratch, so click the 'Create new' card.`,target:`[data-tour="chooser-create-new"]`,advance:{kind:`click`,selector:`[data-tour="chooser-create-new"]`}},{id:`fill-surface`,title:`Name the surface`,body:`Surface name: type exactly 'Welcome Screen'. Keep the type on Screen. Click 'Create surface' to submit.`,target:`[data-tour="blank-surface-form"]`,focusSelector:`[data-tour="blank-surface-form"] input[type="text"]`,requireExact:{formId:`blank-surface`,value:`Welcome Screen`},advance:{kind:`event`,event:`editor.surface.added`,match:I(`Welcome Screen`)}},{id:`add-action`,title:`Add an action`,body:`Type exactly 'Say Hello' in the action form, then click 'Add action' (or press Enter). An Action is something the user or system can do on this surface.`,target:`[data-tour="add-action-form"]`,focusSelector:`[data-tour="add-action-form"] input[type="text"]`,requireExact:{formId:`add-action`,value:`Say Hello`},advance:{kind:`event`,event:`editor.action.added`,match:I(`Say Hello`)}},{id:`add-parameter`,title:`Give the action a parameter`,body:`The Say Hello editor just opened. In the Parameters section, click '+ Parameter'. The name field will focus automatically. Then:
2
2
  1. type 'politely' for the Name
3
3
  2. change Type to 'boolean'
4
4
  Next unlocks once a 'politely' boolean parameter exists on Say Hello.`,target:`[data-tour="action-parameters-section"]`,advance:{kind:`manual`},canAdvance:R},{id:`add-rule-not-polite`,title:`Rule 1: the casual hello`,body:`We want the action to say 'Hi.' only when politely is NO. Add the first rule:
@@ -166,12 +166,13 @@ Same action, same rules on disk, ONE OR THE OTHER message at runtime - just beca
166
166
  (drives "implement next").</li> <li class="svelte-116uhib"><span class="mono svelte-116uhib">set_queue_target</span>: pin a per-item goal —
167
167
  how far to take it (maturity %, implementation %, and/or "report
168
168
  it's in the code"). Returned on <span class="mono svelte-116uhib">list_queue</span> / <span class="mono svelte-116uhib">get_next_queued</span> as a plain-language
169
- goal line.</li></ul>`),ye=o(`<p class="svelte-116uhib">Every project has an <strong class="svelte-116uhib">Implementation Queue</strong> tab: an ordered
169
+ goal line.</li></ul>`),ye=o(`<p class="svelte-116uhib">The <strong class="svelte-116uhib">Implementation Queue</strong> rides along in a floating panel
170
+ pinned to the bottom-right corner, visible from every page — an ordered
170
171
  "implement next" list of Features, Surfaces, or Actions you (or the LLM)
171
172
  plan to build. The point: a dev can say "implement the next thing in the
172
173
  queue" and the LLM picks it up via the MCP without you naming the entity.</p> <ul class="list-disc space-y-1 pl-5 svelte-116uhib"><li class="svelte-116uhib"><strong class="svelte-116uhib">Add to queue</strong> hover affordance appears on every Feature
173
174
  card, every Surface header, and every Action row when the cursor is over
174
- them. This keeps the design minimal first.</li> <li class="svelte-116uhib"><strong class="svelte-116uhib">Drag to reorder</strong> on the Queue tab. Order persists to
175
+ them. This keeps the design minimal first.</li> <li class="svelte-116uhib"><strong class="svelte-116uhib">Drag to reorder</strong> in the corner panel. Order persists to
175
176
  disk via the project file.</li> <li class="svelte-116uhib"><strong class="svelte-116uhib">Auto-prune</strong>: items disappear from the live list as <span class="mono svelte-116uhib">.unspa.json</span> flips their behavioral-index entry to <span class="mono svelte-116uhib">implemented</span>. The raw queue stays on disk;
176
177
  only the live view filters.</li></ul> <!>`,1),be=o(`<p class="svelte-116uhib">A 12-character random passphrase is well outside brute-force range
177
178
  at 600k iterations. A 6-character dictionary word is not. Pick
@@ -1 +1 @@
1
- import{J as e,U as t,x as n}from"../chunks/BPl9BITm.js";import"../chunks/xihTtKlq.js";import"../chunks/suTxxv1t.js";import{t as r}from"../chunks/DBJWcC6Y.js";function i(i){n(`1uha8ag`,n=>{t(()=>{e.title=`Projects / Unspaghettit`})}),r(i,{})}export{i as component};
1
+ import{J as e,U as t,x as n}from"../chunks/BPl9BITm.js";import"../chunks/xihTtKlq.js";import"../chunks/suTxxv1t.js";import{t as r}from"../chunks/x60Tn5kT.js";function i(i){n(`1uha8ag`,n=>{t(()=>{e.title=`Projects / Unspaghettit`})}),r(i,{})}export{i as component};
@@ -0,0 +1 @@
1
+ import{A as e,C as t,E as n,F as r,G as i,I as a,J as o,L as s,M as c,N as l,P as u,Q as d,R as f,S as p,U as m,V as h,W as g,X as _,Z as v,_ as y,_t as b,a as x,b as S,c as C,ct as w,d as T,et as E,gt as D,j as O,k,l as A,lt as j,mt as M,n as N,pt as P,r as ee,rt as F,s as te,tt as I,u as L,v as R,x as z,y as ne,z as B}from"../chunks/BPl9BITm.js";import{r as re,t as V}from"../chunks/ByaoVvNB.js";import"../chunks/xihTtKlq.js";import{t as H}from"../chunks/wrqalH0a.js";import{a as ie,n as ae,r as oe,t as U}from"../chunks/ib21i2T_.js";import{H as W,K as G,n as se,q as K,r as q}from"../chunks/D64sGJRN.js";import"../chunks/suTxxv1t.js";import{a as ce,i as J,n as le}from"../chunks/_b612aVb.js";import"../chunks/Da59TXPe.js";import{t as Y}from"../chunks/DtblIi6X2.js";var ue=b({load:()=>de}),de=()=>{if(!le(`builder`))throw Y(307,`/projects`)};function fe(e,{from:t,to:n},r={}){var{delay:i=0,duration:a=e=>Math.sqrt(e)*120,easing:o=U}=r,s=getComputedStyle(e),c=s.transform===`none`?``:s.transform,[l,u]=s.transformOrigin.split(` `).map(parseFloat);l/=e.clientWidth,u/=e.clientHeight;var d=X(e),f=e.clientWidth/n.width/d,p=e.clientHeight/n.height/d,m=t.left+t.width*l,h=t.top+t.height*u,g=n.left+n.width*l,_=n.top+n.height*u,v=(m-g)*f,y=(h-_)*p,b=t.width/n.width,x=t.height/n.height;return{delay:i,duration:typeof a==`function`?a(Math.sqrt(v*v+y*y)):a,easing:o,css:(e,t)=>`transform: ${c} translate(${t*v}px, ${t*y}px) scale(${e+t*b}, ${e+t*x});`}}function X(e){if(`currentCSSZoom`in e)return e.currentCSSZoom;for(var t=e,n=1;t!==null;)n*=+getComputedStyle(t).zoom,t=t.parentElement;return n}var Z=l(`<button type="button" class="relative z-20 mt-1 inline-flex items-center gap-1 text-xs font-semibold text-brand-400 transition hover:text-brand-300"><span> </span> <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M4 6l4 4 4-4" stroke-linecap="round" stroke-linejoin="round"></path></svg></button>`),pe=l(`<div><p class="clamp-2 text-sm leading-5 text-slate-400 svelte-btsgvr"> </p> <!></div>`);function me(t,n){j(n,!0);let r=x(n,`class`,3,``),a=I(!1),o=I(!1),c=I(!1),l=I(null),u=`linear-gradient(to bottom, #000 calc(100% - 1.3em), transparent)`,f=()=>typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches,p=e=>(parseFloat(getComputedStyle(e).lineHeight)||20)*2,m=null;i(()=>{let e=B(l);if(!e)return;n.text;let t=()=>{B(a)||B(c)||E(o,e.scrollHeight>e.clientHeight+1)};if(t(),typeof ResizeObserver>`u`)return;let r=new ResizeObserver(t);return r.observe(e),()=>r.disconnect()});function h(){let e=B(l);e&&(B(a)?b(e):y(e))}function v(e,t,n,r,i){m?.(),E(c,!0),e.style.overflow=`hidden`,e.style.webkitMaskImage=u,e.style.maskImage=u,e.style.transition=`none`,e.style.maxHeight=`${t}px`,e.offsetHeight,e.style.transition=`max-height ${r}`,e.style.maxHeight=`${n}px`;let a=t=>{t.propertyName===`max-height`&&(e.removeEventListener(`transitionend`,a),m=null,E(c,!1),i())};e.addEventListener(`transitionend`,a),m=()=>e.removeEventListener(`transitionend`,a)}function y(e){let t=e.clientHeight;E(a,!0),e.classList.remove(`clamp-2`),!f()&&(e.offsetHeight,v(e,t,e.scrollHeight,`560ms cubic-bezier(0.16, 1, 0.3, 1)`,()=>{e.style.transition=``,e.style.maxHeight=`none`,e.style.overflow=``,e.style.webkitMaskImage=``,e.style.maskImage=``}))}function b(e){let t=e.clientHeight;if(E(a,!1),f()){e.classList.add(`clamp-2`),e.style.maxHeight=``;return}v(e,t,p(e),`440ms cubic-bezier(0.65, 0, 0.35, 1)`,()=>{e.classList.add(`clamp-2`),e.style.transition=``,e.style.maxHeight=``,e.style.overflow=``,e.style.webkitMaskImage=``,e.style.maskImage=``})}var S=pe(),C=_(S),T=_(C,!0);M(C),te(C,e=>E(l,e),()=>B(l));var D=d(C,2),A=t=>{var n=Z(),r=_(n),i=_(r,!0);M(r);var o=d(r,2);M(n),g(()=>{L(n,`aria-expanded`,B(a)),e(i,B(a)?`View less`:`View more`),R(o,0,`h-3 w-3 transition-transform duration-500 ease-out ${B(a)?`rotate-180`:``}`)}),s(`click`,n,h),O(t,n)};k(D,e=>{(B(o)||B(a)||B(c))&&e(A)}),M(S),g(()=>{R(S,1,ne(r()),`svelte-btsgvr`),e(T,n.text)}),O(t,S),w()}a([`click`]);var he=0,Q=l(`<span> </span>`),ge=l(`<button type="button"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" class="size-3.5" aria-hidden="true"><path d="M20.59 13.41 11 3.83A2 2 0 0 0 9.59 3H4a1 1 0 0 0-1 1v5.59A2 2 0 0 0 3.59 11l9.58 9.59a2 2 0 0 0 2.83 0l4.59-4.59a2 2 0 0 0 0-2.83z"></path><circle cx="7.5" cy="7.5" r="1.1" fill="currentColor" stroke="none"></circle></svg> <!></button>`),_e=l(`<form class="inline-flex items-center gap-1"><input placeholder="Type" class="h-6 w-16 rounded border border-slate-700 bg-slate-900/70 px-1.5 text-[11px] text-slate-200 outline-none focus:border-brand-500"/> <input placeholder="Value" class="h-6 w-20 rounded border border-slate-700 bg-slate-900/70 px-1.5 text-[11px] text-slate-200 outline-none focus:border-brand-500"/> <button type="submit" class="text-[11px] font-semibold text-brand-300 hover:text-brand-200" title="Rename everywhere">✓</button> <button type="button" class="text-[11px] text-slate-500 hover:text-slate-300" title="Cancel">✕</button></form>`),ve=l(`<button type="button" class="truncate"> </button>`),ye=l(`<span class="truncate"> </span>`),be=l(`<button type="button" class="shrink-0 opacity-0 transition group-hover/chip:opacity-70 hover:opacity-100!" title="Rename (applies everywhere)">✎</button>`),xe=l(`<button type="button" class="shrink-0 opacity-0 transition group-hover/chip:opacity-70 hover:opacity-100!" title="Remove from this item">✕</button>`),Se=l(`<span class="group/chip inline-flex max-w-full items-center gap-1 rounded-full py-0.5 pl-2 pr-1.5 text-[10px] font-medium transition"><span class="size-1.5 shrink-0 rounded-full"></span> <!> <!> <!></span>`),Ce=l(`<form class="inline-flex items-center gap-1"><input placeholder="Type" class="h-6 w-16 rounded border border-slate-700 bg-slate-900/70 px-1.5 text-[11px] text-slate-200 outline-none focus:border-brand-500"/> <input placeholder="Value" class="h-6 w-20 rounded border border-slate-700 bg-slate-900/70 px-1.5 text-[11px] text-slate-200 outline-none focus:border-brand-500"/> <button type="submit" class="text-[11px] font-semibold text-brand-300 hover:text-brand-200" title="Add tag">✓</button> <button type="button" class="text-[11px] text-slate-500 hover:text-slate-300" title="Cancel">✕</button></form>`),we=l(`<button type="button" class="size-5 items-center justify-center rounded-full border border-dashed border-slate-600 text-[11px] leading-none text-slate-400 transition hover:border-brand-500 hover:text-brand-300 hidden group-hover:inline-flex group-focus-within:inline-flex" aria-label="Add tag" title="Add tag">+</button>`),Te=l(`<!> <!>`,1),Ee=l(`<option></option>`),De=l(`<datalist></datalist>`),Oe=l(`<div><div class="flex flex-wrap items-center gap-1.5"><!> <!> <!></div></div>`);function ke(t,r){j(r,!0);let i=(e,t=!1)=>{let n=e.firstElementChild;if(!n)return;let r=typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches,i=typeof ResizeObserver<`u`,a=n.offsetHeight,o=()=>{e.style.transition=``,e.style.overflow=`visible`,e.style.height=`auto`},s=()=>{if(e.style.overflow=`hidden`,!i){e.style.height=`auto`;return}let t=e.offsetHeight;if(a=n.offsetHeight,r){e.style.height=`${a}px`;return}e.style.transition=`height 240ms cubic-bezier(0.22, 1, 0.36, 1)`,e.style.height=`${t}px`,e.offsetHeight,e.style.height=`${a}px`},c=t;c?o():(e.style.overflow=`hidden`,e.style.height=`${a}px`,r||(e.style.transition=`height 240ms cubic-bezier(0.22, 1, 0.36, 1)`));let l=null;return i?(l=new ResizeObserver(()=>{if(c)return;let t=n.offsetHeight;if(t!==a){if(r){e.style.height=`${t}px`,a=t;return}e.style.height=`${a}px`,e.offsetHeight,e.style.height=`${t}px`,a=t}}),l.observe(n)):c||(e.style.height=`auto`),{update(e){e!==c&&(c=e,c?o():s())},destroy:()=>l?.disconnect()}},a=x(r,`typeOptions`,19,()=>[]),o=x(r,`collapsible`,3,!1),l=x(r,`class`,3,``),u=I(!1),p=`buildertags-types-${++he}`,m=`#64748b`,b=(e,t)=>{let n=e??m,r=t?42:20,i=t?72:42;return[`background-color: color-mix(in srgb, ${n} ${r}%, #0b1220)`,`color: color-mix(in srgb, ${n} 72%, white)`,`box-shadow: inset 0 0 0 1px color-mix(in srgb, ${n} ${i}%, transparent)`].join(`; `)},T=I(!1),D=I(``),N=I(``),P=I(null);async function ee(){E(T,!0),await h(),B(P)?.focus()}function z(){E(T,!1),E(D,``),E(N,``)}async function re(e){e.preventDefault();let t=B(N).trim();if(!t)return;let n=B(D).trim()||`tag`;z(),await r.onAdd?.(n,t)}let V=I(null),H=I(``),ie=I(``),ae=I(null);async function oe(e){E(V,G(e),!0),E(H,W(e.type),!0),E(ie,W(e.value),!0),await h(),B(ae)?.select()}function U(){E(V,null)}async function se(e,t){e.preventDefault();let n=B(ie).trim(),i=B(H).trim();!n||!i||(U(),await r.onRename?.(t,{type:i,value:n}))}function q(e,t){e.key===`Escape`&&t()}var ce=c(),le=v(ce),Y=t=>{var h=Oe(),x=_(h),w=_(x),j=t=>{var n=ge(),i=d(_(n),2),a=t=>{var n=Q(),i=_(n,!0);M(n),g(()=>e(i,r.tags.length)),O(t,n)};k(i,e=>{!B(u)&&r.tags.length>0&&e(a)}),M(n),g(()=>{R(n,1,`inline-flex shrink-0 items-center gap-1 rounded-full px-1.5 py-0.5 text-[10px] font-medium text-slate-400 transition hover:text-brand-300 ${B(u)?`bg-slate-800/60 text-slate-200`:``}`),L(n,`aria-expanded`,B(u)),L(n,`aria-label`,B(u)?`Hide tags`:`Show tags`),L(n,`title`,B(u)?`Hide tags`:r.tags.length>0?`Show ${r.tags.length} tag${r.tags.length===1?``:`s`}`:`Add a tag`)}),s(`click`,n,()=>E(u,!B(u))),O(t,n)};k(w,e=>{o()&&e(j)});var I=d(w,2),ce=t=>{var i=Te(),o=v(i);n(o,17,()=>r.tags,e=>G(e),(t,n)=>{var i=c(),o=v(i),l=e=>{var t=_e(),r=_(t);A(r),te(r,e=>E(ae,e),()=>B(ae));var i=d(r,2);A(i);var o=d(i,4);M(t),g(()=>L(r,`list`,a().length>0?p:void 0)),f(`submit`,t,e=>se(e,B(n))),s(`keydown`,r,e=>q(e,U)),C(r,()=>B(H),e=>E(H,e)),s(`keydown`,i,e=>q(e,U)),C(i,()=>B(ie),e=>E(ie,e)),s(`click`,o,U),O(e,t)},u=F(()=>B(V)===G(B(n))),h=t=>{let i=F(()=>J.colorForTag(B(n))),a=F(()=>r.isActive?.(B(n))??!1);var o=Se(),c=_(o),l=d(c,2),u=t=>{var i=ve(),o=_(i,!0);M(i),g((t,n)=>{L(i,`aria-pressed`,B(a)),L(i,`title`,t),e(o,n)},[()=>`${K(B(n))} — click to filter`,()=>W(B(n).value)]),s(`click`,i,()=>r.onToggle(B(n))),O(t,i)},f=t=>{var r=ye(),i=_(r,!0);M(r),g((t,n)=>{L(r,`title`,t),e(i,n)},[()=>K(B(n)),()=>W(B(n).value)]),O(t,r)};k(l,e=>{r.onToggle?e(u):e(f,-1)});var p=d(l,2),h=e=>{var t=be();g(e=>L(t,`aria-label`,e),[()=>`Rename ${K(B(n))}`]),s(`click`,t,()=>oe(B(n))),O(e,t)};k(p,e=>{r.onRename&&e(h)});var v=d(p,2),x=e=>{var t=xe();g(e=>L(t,`aria-label`,e),[()=>`Remove ${K(B(n))}`]),s(`click`,t,()=>r.onRemove(B(n))),O(e,t)};k(v,e=>{r.onRemove&&e(x)}),M(o),g(e=>{y(o,e),y(c,`background-color: ${B(i)??m??``}`)},[()=>b(B(i),B(a))]),O(t,o)};k(o,e=>{B(u)?e(l):e(h,-1)}),O(t,i)});var l=d(o,2),u=e=>{var t=c(),n=v(t),r=e=>{var t=Ce(),n=_(t);A(n),te(n,e=>E(P,e),()=>B(P));var r=d(n,2);A(r);var i=d(r,4);M(t),g(()=>L(n,`list`,a().length>0?p:void 0)),f(`submit`,t,re),s(`keydown`,n,e=>q(e,z)),C(n,()=>B(D),e=>E(D,e)),s(`keydown`,r,e=>q(e,z)),C(r,()=>B(N),e=>E(N,e)),s(`click`,i,z),O(e,t)},i=e=>{var t=we();s(`click`,t,ee),O(e,t)};k(n,e=>{B(T)?e(r):e(i,-1)}),O(e,t)};k(l,e=>{r.onAdd&&e(u)}),O(t,i)};k(I,e=>{(!o()||B(u))&&e(ce)});var le=d(I,2),Y=e=>{var t=De();n(t,20,a,e=>e,(e,t)=>{var n=Ee(),r={};g(()=>{r!==(r=t)&&(n.value=(n.__value=t)??``)}),O(e,n)}),M(t),g(()=>L(t,`id`,p)),O(e,t)};k(le,e=>{a().length>0&&e(Y)}),M(x),M(h),S(h,(e,t)=>i?.(e,t),()=>B(T)||B(V)!==null),g(()=>R(h,1,ne(l()))),O(t,h)};k(le,e=>{(r.tags.length>0||r.onAdd)&&e(Y)}),O(t,ce),w()}a([`click`,`keydown`]);var Ae=l(`<div><div class="score-meter__dial svelte-tnjw1f"><svg viewBox="0 0 36 36" class="score-meter__svg svelte-tnjw1f" aria-hidden="true"><circle cx="18" cy="18" r="16" fill="none" class="score-meter__outer svelte-tnjw1f" stroke-width="1.2"></circle><circle cx="18" cy="18" r="14" fill="none" class="score-meter__track svelte-tnjw1f" stroke-width="2.4"></circle><circle cx="18" cy="18" r="14" fill="none" class="score-meter__arc-glow svelte-tnjw1f" stroke-width="8"></circle><circle cx="18" cy="18" r="14" fill="none" class="score-meter__arc svelte-tnjw1f" stroke-width="2.4"></circle></svg> <span class="score-meter__readout svelte-tnjw1f"> </span></div> <span class="score-meter__label svelte-tnjw1f"> </span></div>`);function $(t,n){let r=F(()=>n.value===null?0:Math.max(0,Math.min(100,n.value))),i=F(()=>`${B(r)}%`),a=F(()=>B(r)*.87965),o=F(()=>B(r)>=80?`is-high`:B(r)>=45?`is-mid`:`is-low`);var s=Ae(),c=_(s),l=_(c),u=d(_(l),2),f=d(u);M(l);var p=d(l,2),m=_(p,!0);M(p),M(c);var h=d(c,2),v=_(h,!0);M(h),M(s),g(()=>{R(s,1,`score-meter ${B(o)??``}`,`svelte-tnjw1f`),L(u,`stroke-linecap`,B(r)>0?`round`:`butt`),L(u,`stroke-dasharray`,`${B(a)} 87.965`),L(f,`stroke-linecap`,B(r)>0?`round`:`butt`),L(f,`stroke-dasharray`,`${B(a)} 87.965`),e(m,B(i)),e(v,n.label)}),O(t,s)}var je=t=>{var n=c(),r=v(n),i=t=>{let n=F(()=>J.activeTag);var r=Fe(),i=d(_(r),2),a=_(i,!0);M(i),P(2),M(r),g((t,n)=>{L(r,`title`,t),e(a,n)},[()=>`Clear tag filter: ${W(B(n).type)} · ${W(B(n).value)}`,()=>W(B(n).value)]),s(`click`,r,()=>J.clearTag()),O(t,r)};k(r,e=>{J.activeTag&&e(i)}),O(t,n)},Me=(t,n=D)=>{var r=Ie(),i=_(r,!0);M(r),g(()=>{L(r,`title`,`Build queue position #${n()}`),e(i,n())}),O(t,r)},Ne=(e,t=D,n=D)=>{let i=F(()=>J.queuePositionForAction(t(),n())),a=F(()=>B(i)!==null);var o=Re(),c=_(o),l=e=>{var t=Le();Me(v(t),()=>B(i)),P(2),O(e,t)},u=e=>{O(e,r(`+ Implement`))};k(c,e=>{B(i)===null?e(u,-1):e(l)}),M(o),g(()=>{R(o,1,`relative z-20 inline-flex shrink-0 items-center gap-1 rounded-full border px-2.5 py-1 text-[11px] font-semibold transition ${B(a)?`border-brand-400 bg-brand-500 text-white shadow-sm shadow-brand-500/30`:`border-slate-700 bg-slate-800/60 text-slate-300 hover:border-brand-500 hover:text-brand-300`}`,`svelte-xw1ck7`),L(o,`aria-pressed`,B(a)),L(o,`title`,B(a)?`In build queue at position #${B(i)} (click to remove)`:`Add to build queue`)}),s(`click`,o,()=>J.toggleAction(t(),n())),O(e,o)},Pe=(e,t=D)=>{let n=F(()=>J.queuePositionForFeature(t())),i=F(()=>B(n)!==null);var a=Be(),o=_(a),c=e=>{var t=ze();Me(v(t),()=>B(n)),P(2),O(e,t)},l=e=>{O(e,r(`+ Implement all`))};k(o,e=>{B(n)===null?e(l,-1):e(c)}),M(a),g(()=>{R(a,1,`relative z-20 inline-flex shrink-0 items-center gap-1 rounded-full border px-2.5 py-1 text-[11px] font-semibold transition ${B(i)?`border-brand-400 bg-brand-500 text-white shadow-sm shadow-brand-500/30`:`border-slate-700 bg-slate-800/60 text-slate-300 hover:border-brand-500 hover:text-brand-300`}`,`svelte-xw1ck7`),L(a,`aria-pressed`,B(i)),L(a,`title`,B(i)?`Whole feature queued at position #${B(n)} — the build implements whatever is still missing (click to remove)`:`Queue the whole feature: implement everything still missing`)}),s(`click`,a,()=>J.toggleFeature(t())),O(e,a)},Fe=l(`<button type="button" class="inline-flex shrink-0 items-center gap-1.5 rounded-full border border-brand-500/50 bg-brand-500/10 px-2.5 py-1 text-xs font-medium text-brand-200 transition hover:bg-brand-500/20 svelte-xw1ck7"><span class="text-brand-300/70 svelte-xw1ck7">Tag</span> <span class="font-semibold svelte-xw1ck7"> </span> <span aria-hidden="true" class="svelte-xw1ck7">✕</span></button>`),Ie=l(`<span class="grid h-4 min-w-4 shrink-0 place-items-center rounded-full bg-white/25 px-1 text-[10px] font-bold leading-none tabular-nums svelte-xw1ck7"> </span>`),Le=l(`<!> <span class="svelte-xw1ck7">Queued</span>`,1),Re=l(`<button type="button"><!></button>`),ze=l(`<!> <span class="svelte-xw1ck7">Queued</span>`,1),Be=l(`<button type="button"><!></button>`),Ve=u(`<svg class="h-4 w-4 shrink-0 animate-spin text-brand-400 svelte-xw1ck7" viewBox="0 0 24 24" fill="none" aria-label="Working" role="status"><circle class="opacity-25 svelte-xw1ck7" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="3"></circle><path class="opacity-90 svelte-xw1ck7" fill="currentColor" d="M12 2a10 10 0 0 1 10 10h-3a7 7 0 0 0-7-7V2z"></path></svg>`),He=l(`<button type="button" class="relative z-20 shrink-0 rounded-full border border-slate-700 bg-slate-800/60 px-2.5 py-1 text-[11px] font-semibold text-slate-300 transition hover:border-brand-500 hover:bg-brand-500 hover:text-white svelte-xw1ck7" title="Accept this idea (turn it into a feature) and add it to the build queue">+ Implement</button> <button type="button" class="shrink-0 rounded-md p-1 text-slate-500 transition hover:bg-slate-700 hover:text-rose-300 svelte-xw1ck7" aria-label="Dismiss suggestion" title="Dismiss this suggestion (the assistant won't suggest it again)">✕</button>`,1),Ue=l(`<li class="flex items-start gap-2 text-sm leading-5 text-slate-300 svelte-xw1ck7"><span> </span> <span class="min-w-0 flex-1 svelte-xw1ck7"> </span> <!></li>`),We=l(`<ul class="space-y-2 svelte-xw1ck7"></ul>`),Ge=l(`<article class="skeuo-card skeuo-card--interactive skeuo-card--feature p-4 svelte-xw1ck7"><div class="flex items-center gap-2 svelte-xw1ck7"><h4 class="truncate text-base font-semibold text-white svelte-xw1ck7"> </h4> <!></div> <!> <div class="mt-3 flex items-center gap-6 border-t border-slate-800 pt-3 svelte-xw1ck7"><!> <!></div></article>`),Ke=l(`<div class="absolute inset-y-0 rounded-full svelte-xw1ck7"></div>`),qe=l(`<div class="flex items-center gap-2 svelte-xw1ck7"><span class="w-12 shrink-0 text-slate-400 svelte-xw1ck7"> </span> <div role="slider" tabindex="0" class="relative h-2.5 flex-1 cursor-pointer touch-none rounded-full bg-slate-800 select-none svelte-xw1ck7" title="Drag beyond the current score to set how far to take it (up to 100%)"><div class="absolute inset-y-0 left-0 rounded-full bg-slate-500 svelte-xw1ck7"></div> <!> <div class="absolute top-1/2 h-3.5 w-3.5 -translate-x-1/2 -translate-y-1/2 rounded-full border border-white/70 shadow shadow-black/30 svelte-xw1ck7"></div></div> <span class="w-14 shrink-0 text-right tabular-nums text-slate-400 svelte-xw1ck7"> </span></div>`),Je=l(`<button type="button" class="shrink-0 rounded px-1 text-slate-500 transition hover:text-slate-200 svelte-xw1ck7" title="Clear all goals for this item">Clear</button>`),Ye=l(`<div class="mt-1.5 space-y-1 pl-8 text-[10px] svelte-xw1ck7"><!> <!> <div class="flex items-center justify-between gap-2 pt-0.5 svelte-xw1ck7"><label class="inline-flex cursor-pointer items-center gap-1.5 text-slate-400 svelte-xw1ck7"><input type="checkbox" class="h-3 w-3 rounded border-slate-600 bg-slate-900 accent-brand-500 svelte-xw1ck7"/> Report it's in the code</label> <!></div></div>`),Xe=l(`<p class="text-sm leading-6 text-slate-400 svelte-xw1ck7">Nothing queued yet. Hit <span class="font-semibold text-brand-300 svelte-xw1ck7">+ Implement</span> on a suggestion or feature to plan the build.</p>`),Ze=l(`<li><div class="flex items-center gap-2 svelte-xw1ck7"><span draggable="true" class="shrink-0 cursor-grab select-none px-0.5 text-slate-500 svelte-xw1ck7" title="Drag to reorder" aria-hidden="true">⠿</span> <span class="grid h-6 w-6 shrink-0 place-items-center rounded-full bg-brand-500 text-xs font-bold tabular-nums text-white svelte-xw1ck7"> </span> <span class="min-w-0 flex-1 svelte-xw1ck7"><span class="block truncate text-sm font-medium text-white svelte-xw1ck7"> </span> <span class="block truncate text-xs text-slate-400 svelte-xw1ck7"> </span></span> <button type="button" class="shrink-0 rounded-md p-1 text-slate-400 transition hover:bg-slate-700 hover:text-white svelte-xw1ck7" aria-label="Remove from build queue" title="Remove from queue">✕</button></div> <!></li>`),Qe=l(`<ol class="space-y-2 svelte-xw1ck7"></ol>`),$e=l(`<section class="fixed bottom-5 right-5 z-40 flex max-h-[70vh] w-[min(92vw,380px)] flex-col overflow-hidden rounded-2xl border border-slate-700 bg-slate-900/95 shadow-2xl shadow-black/50 ring-1 ring-black/20 backdrop-blur svelte-xw1ck7"><header class="flex shrink-0 items-center justify-between gap-3 border-b border-slate-800 bg-linear-to-b from-slate-800/70 to-slate-800/30 px-4 py-3 svelte-xw1ck7"><div class="flex items-center gap-2 svelte-xw1ck7"><span class="text-brand-400 svelte-xw1ck7" aria-hidden="true">▶</span> <span class="text-sm font-semibold text-white svelte-xw1ck7">Build queue</span> <span class="rounded-full bg-brand-500 px-2 py-0.5 text-xs font-bold tabular-nums text-white svelte-xw1ck7"> </span></div> <button type="button" class="rounded-md p-1 text-slate-400 transition hover:bg-slate-700 hover:text-white svelte-xw1ck7" aria-label="Minimize build queue" title="Minimize"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="h-4 w-4 svelte-xw1ck7" aria-hidden="true"><path d="M6 9l6 6 6-6" class="svelte-xw1ck7"></path></svg></button></header> <div class="min-h-0 flex-1 overflow-y-auto p-3 svelte-xw1ck7"><!></div></section>`),et=l(`<button type="button" class="group fixed bottom-5 right-5 z-40 flex items-center gap-2 rounded-full border border-slate-700 bg-slate-900/95 py-2.5 pl-4 pr-3 text-sm font-semibold text-white shadow-2xl shadow-black/40 ring-1 ring-black/20 backdrop-blur transition hover:border-brand-500 hover:shadow-brand-500/20 svelte-xw1ck7" aria-label="Open build queue" title="Build queue"><span class="text-brand-400 transition group-hover:translate-x-0.5 svelte-xw1ck7" aria-hidden="true">▶</span> Build queue <span class="rounded-full bg-brand-500 px-2 py-0.5 text-xs font-bold tabular-nums text-white svelte-xw1ck7"> </span></button>`),tt=l(`<li class="builder-skeleton__card svelte-xw1ck7"><div class="flex items-center justify-between gap-3 svelte-xw1ck7"><span class="builder-skeleton__shape h-2.5 w-3/5 rounded-full svelte-xw1ck7"></span> <span class="builder-skeleton__shape h-4 w-14 rounded-full svelte-xw1ck7"></span></div> <div class="flex justify-center gap-10 pt-5 svelte-xw1ck7"><span class="builder-skeleton__shape size-11 rounded-full svelte-xw1ck7"></span> <span class="builder-skeleton__shape size-11 rounded-full svelte-xw1ck7"></span></div></li>`),nt=l(`<ul class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 svelte-xw1ck7" aria-busy="true" aria-live="polite" aria-label="Loading projects"></ul>`),rt=l(`<div class="rounded-xl border border-rose-500/30 bg-rose-500/10 p-4 text-sm text-rose-300 svelte-xw1ck7"> </div>`),it=l(`<div class="rounded-xl border border-slate-700/60 bg-linear-to-b from-slate-800/50 to-slate-900 p-8 text-center text-sm text-slate-400 svelte-xw1ck7">No projects yet.</div>`),at=l(`<div class="rounded-xl border border-slate-700/60 bg-linear-to-b from-slate-800/50 to-slate-900 p-8 text-center text-sm text-slate-400 svelte-xw1ck7">No projects, core features, features, or suggestions match your search.</div>`),ot=l(`<button type="button"> </button>`),st=l(`<span class="text-xs text-slate-500 svelte-xw1ck7"> </span>`),ct=l(`<div class="rounded-xl border border-slate-700/60 bg-linear-to-b from-slate-800/50 to-slate-900 p-8 text-center text-sm text-slate-400 svelte-xw1ck7">This project has no core features yet.</div>`),lt=l(`<div class="rounded-xl border border-dashed border-slate-700 bg-slate-900/40 p-8 text-center text-sm text-slate-400 svelte-xw1ck7">No core features, features, or suggestions match your search.</div>`),ut=l(`<button type="button" class="absolute inset-0 z-10 rounded-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-brand-500/50 svelte-xw1ck7"></button>`),dt=l(`<p class="text-sm text-slate-500 svelte-xw1ck7">No suggestions yet. Ask your assistant to propose improvements for this feature.</p>`),ft=l(`<div class="border-t border-slate-800 bg-slate-950/40 px-4 py-3 svelte-xw1ck7"><!></div>`),pt=l(`<article><!> <div class="p-4 svelte-xw1ck7"><div class="flex items-start justify-between gap-3 svelte-xw1ck7"><div class="min-w-0 svelte-xw1ck7"><div class="flex items-center gap-2 svelte-xw1ck7"><span> </span> <span class="project-card__count shrink-0 svelte-xw1ck7" title="Features in this core feature"> </span> <!></div> <!> <!></div> <div class="flex shrink-0 items-center gap-4 svelte-xw1ck7"><!> <!></div></div></div> <!></article>`),mt=l(`<div class="space-y-3 svelte-xw1ck7"></div>`),ht=l(`<span class="text-xs text-slate-500 svelte-xw1ck7"> </span>`),gt=l(`<div><div>Pick a core feature to see its features.</div></div>`),_t=l(`<div class="rounded-xl border border-dashed border-slate-700 bg-slate-900/40 p-8 text-center text-sm text-slate-400 svelte-xw1ck7">This core feature has no features yet.</div>`),vt=l(`<div class="rounded-xl border border-dashed border-slate-700 bg-slate-900/40 p-8 text-center text-sm text-slate-400 svelte-xw1ck7">No features match your search in this core feature.</div>`),yt=l(`<div class="space-y-2 svelte-xw1ck7"><div class="flex items-center gap-2 px-1 pt-1 svelte-xw1ck7"><span class="text-[11px] font-semibold uppercase tracking-wide text-slate-500 svelte-xw1ck7"> </span> <span class="h-px flex-1 bg-slate-800 svelte-xw1ck7" aria-hidden="true"></span> <span class="text-[10px] tabular-nums text-slate-600 svelte-xw1ck7"> </span></div> <!></div>`),bt=l(`<div class="space-y-4 svelte-xw1ck7"></div>`),xt=l(`<div class="space-y-6 svelte-xw1ck7"><button type="button"> </button> <section class="overflow-hidden rounded-2xl border border-slate-700/60 bg-linear-to-b from-slate-800/45 to-slate-900 shadow-xl shadow-black/20 svelte-xw1ck7"><div class="flex flex-col gap-5 p-6 lg:flex-row lg:items-start lg:justify-between svelte-xw1ck7"><div class="min-w-0 svelte-xw1ck7"><div class="flex items-center gap-3 svelte-xw1ck7"><h2 class="truncate text-2xl font-semibold tracking-tight text-white svelte-xw1ck7"> </h2> <span class="project-card__count shrink-0 svelte-xw1ck7"> </span></div> <p class="mt-2 max-w-3xl text-sm leading-6 text-slate-400 svelte-xw1ck7"> </p></div> <div class="flex shrink-0 items-center gap-6 svelte-xw1ck7"><!> <!></div></div></section> <div class="relative grid scroll-mt-20 items-start gap-5 xl:grid-cols-[minmax(0,0.95fr)_minmax(380px,1.05fr)] svelte-xw1ck7"><div class="pointer-events-none absolute inset-x-0 top-0 h-px svelte-xw1ck7" aria-hidden="true"></div> <section class="flex flex-col gap-3 xl:sticky xl:top-18 xl:self-start svelte-xw1ck7"><div class="flex items-end justify-between gap-3 svelte-xw1ck7"><div class="svelte-xw1ck7"><h3 class="text-sm font-semibold text-white svelte-xw1ck7">Core features</h3> <p class="text-xs text-slate-500 svelte-xw1ck7">Each core feature contains smaller features.</p></div> <div class="flex shrink-0 items-center gap-2 svelte-xw1ck7"><!> <!></div></div> <!></section> <section><div class="flex items-end justify-between gap-3 svelte-xw1ck7"><div class="svelte-xw1ck7"><h3 class="text-sm font-semibold text-white svelte-xw1ck7">Features</h3> <p class="text-xs text-slate-500 svelte-xw1ck7"> </p></div> <!></div> <!></section></div></div>`),St=l(`<li class="project-card-shell svelte-xw1ck7"><article class="project-card group relative h-full min-h-44 overflow-hidden svelte-xw1ck7"><button type="button" class="absolute inset-0 z-10 rounded-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-brand-500/50 svelte-xw1ck7"></button> <div class="project-card__button flex h-full w-full flex-col justify-between p-5 text-left svelte-xw1ck7"><div class="project-card__top space-y-2 svelte-xw1ck7"><div class="flex items-start justify-between gap-3 svelte-xw1ck7"><h3 class="min-w-0 truncate text-base font-semibold text-white svelte-xw1ck7"> </h3> <span class="project-card__count shrink-0 svelte-xw1ck7"> </span></div> <!></div> <div class="project-card__scores mt-5 flex items-center justify-center gap-10 pt-5 svelte-xw1ck7"><!> <!></div></div></article></li>`),Ct=l(`<li class="builder-skeleton__card svelte-xw1ck7" aria-hidden="true"><div class="flex items-center justify-between gap-3 svelte-xw1ck7"><span class="builder-skeleton__shape h-2.5 w-3/5 rounded-full svelte-xw1ck7"></span> <span class="builder-skeleton__shape h-4 w-14 rounded-full svelte-xw1ck7"></span></div> <div class="flex justify-center gap-10 pt-5 svelte-xw1ck7"><span class="builder-skeleton__shape size-11 rounded-full svelte-xw1ck7"></span> <span class="builder-skeleton__shape size-11 rounded-full svelte-xw1ck7"></span></div></li>`),wt=l(`<section class="svelte-xw1ck7"><div class="mb-4 flex items-end justify-between gap-3 svelte-xw1ck7"><div class="svelte-xw1ck7"><h2 class="text-base font-semibold text-white svelte-xw1ck7">Projects</h2> <p class="text-sm text-slate-500 svelte-xw1ck7">Pick a project to open its build map and queue.</p></div> <div class="flex shrink-0 items-center gap-3 svelte-xw1ck7"><!> <p class="text-xs text-slate-500 svelte-xw1ck7"> </p></div></div> <ul class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 svelte-xw1ck7"><!> <!></ul></section>`),Tt=l(`<div class="min-h-[calc(100vh-4rem)] bg-[radial-gradient(120%_120%_at_50%_-10%,#101a33_0%,#020617_55%)] text-slate-200 svelte-xw1ck7"><div class="mx-auto max-w-7xl px-4 py-8 sm:px-6 lg:px-8 svelte-xw1ck7"><header class="mb-8 border-b border-slate-800 pb-6 svelte-xw1ck7"><p class="text-xs font-semibold uppercase tracking-[0.2em] text-brand-400 svelte-xw1ck7">Builder</p> <div class="mt-2 max-w-3xl svelte-xw1ck7"><h1 class="text-4xl font-semibold tracking-tight text-white svelte-xw1ck7">Your projects</h1> <p class="mt-2 max-w-2xl text-sm leading-6 text-slate-400 svelte-xw1ck7">Browse your projects and features in a simpler view, and discover ideas to improve each one.</p></div></header> <!></div></div> <!>`,1);function Et(r,a){j(a,!0);let o=(r,i=D,a=D)=>{var o=We();n(o,23,a,e=>e.id,(n,r,a)=>{var o=Ue(),c=_(o),l=_(c,!0);M(c);var u=d(c,2),f=_(u,!0);M(u);var p=d(u,2),m=e=>{O(e,Ve())},h=F(()=>J.isBusy(B(r).id)),y=e=>{var t=He(),n=v(t),a=d(n,2);s(`click`,n,()=>J.acceptSuggestion(i(),B(r).id)),s(`click`,a,()=>J.dismissSuggestion(i(),B(r).id)),O(e,t)};k(p,e=>{B(h)?e(m):e(y,-1)}),M(o),g(t=>{R(c,1,`mt-0.5 shrink-0 rounded-md px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide ${B(r).tone===`urgent`?`bg-rose-500/15 text-rose-300`:`bg-violet-500/15 text-violet-300`}`,`svelte-xw1ck7`),e(l,t),e(f,B(r).text)},[()=>Se(B(r))]),t(1,o,()=>oe,()=>({y:6,duration:C(240),delay:z(B(a)),easing:U})),O(n,o)}),M(o),O(r,o)},l=(n,r=D,i=D,a=D)=>{var o=Ge(),s=_(o),c=_(s),l=_(c,!0);M(c),Ne(d(c,2),r,()=>i().id),M(s);var u=d(s,2);me(u,{get text(){return i().description},class:`mt-1`});var f=d(u,2),p=_(f);$(p,{label:`Maturity`,get value(){return i().maturityPercentage}}),$(d(p,2),{label:`Built`,get value(){return i().implementationPercentage}}),M(f),M(o),g(()=>e(l,i().name)),t(1,o,()=>oe,()=>({y:10,duration:C(280),delay:z(a()),easing:U})),O(n,o)},u=(t,n=D,r=D,i=D)=>{let a=F(()=>J.currentScoreFor(n(),r())),o=F(()=>Le(n(),r())?B(Ie):Te(n(),r())??B(a)),c=F(()=>B(o)>B(a));var l=qe(),u=_(l),f=_(u,!0);M(u);var p=d(u,2);L(p,`aria-valuemax`,100);var m=_(p),h=d(m,2),v=e=>{var t=Ke();g(e=>y(t,`left: ${B(a)??``}%; width: ${B(o)-B(a)}%; background-color: ${e??``}`),[()=>we(B(o))]),O(e,t)};k(h,e=>{B(c)&&e(v)});var b=d(h,2);M(p);var x=d(p,2),S=_(x);M(x),M(l),g((t,n)=>{e(f,i()),L(p,`aria-label`,t),L(p,`aria-valuemin`,B(a)),L(p,`aria-valuenow`,B(o)),y(m,`width: ${B(a)??``}%`),y(b,`left: ${B(o)??``}%; background-color: ${n??``}`),e(S,`${B(a)??``}%${B(c)?` → ${B(o)}%`:``}`)},[()=>`${i()} goal for ${Ce(n())}`,()=>we(B(o))]),s(`pointerdown`,p,e=>ze(e,n(),r(),B(a))),s(`pointermove`,p,e=>Be(e,n(),r(),B(a))),s(`pointerup`,p,()=>Et(n(),r(),B(a))),s(`keydown`,p,e=>Dt(e,n(),r(),B(a))),O(t,l)},m=(e,t=D)=>{let n=F(()=>t().item.target);var r=Ye(),i=_(r);u(i,t,()=>`maturity`,()=>`Maturity`);var a=d(i,2);u(a,t,()=>`implementation`,()=>`Built`);var o=d(a,2),c=_(o),l=_(c);A(l),P(),M(c);var f=d(c,2),p=e=>{var n=Je();s(`click`,n,()=>Ae(t())),O(e,n)};k(f,e=>{B(n)&&e(p)}),M(o),M(r),g(e=>T(l,e),[()=>!!B(n)?.report]),s(`change`,l,()=>Oe(t())),O(e,r)},b=t=>{var r=c(),i=v(r),a=t=>{var r=$e(),i=_(r),a=_(i),o=d(_(a),4),c=_(o,!0);M(o),M(a);var l=d(a,2);M(i);var u=d(i,2),p=_(u),h=e=>{O(e,Xe())},v=t=>{var r=Qe();n(r,23,()=>J.queue,e=>String(e.item.id),(t,n,r)=>{var i=Ze(),a=_(i),o=_(a),c=d(o,2),l=_(c,!0);M(c);var u=d(c,2),p=_(u),h=_(p,!0);M(p);var v=d(p,2),y=_(v,!0);M(v),M(u);var b=d(u,2);M(a),m(d(a,2),()=>B(n)),M(i),g((t,a)=>{R(i,1,`rounded-lg border bg-slate-800/40 px-3 py-2 transition ${B(n).orphaned?`opacity-60`:``} ${B(Q)===B(r)?`opacity-40`:``} ${B(ge)===B(r)&&B(Q)!==null&&B(Q)!==B(r)?`border-brand-400 ring-1 ring-brand-400`:`border-slate-800`}`,`svelte-xw1ck7`),e(l,B(r)+1),e(h,t),e(y,a)},[()=>Ce(B(n)),()=>Ot(B(n))]),f(`dragover`,i,e=>ve(e,B(r))),f(`drop`,i,()=>ye(B(r))),f(`dragend`,i,be),f(`dragstart`,o,()=>_e(B(r))),f(`dragend`,o,be),s(`click`,b,()=>J.dequeue(B(n).item.id)),O(t,i)}),M(r),O(t,r)};k(p,e=>{J.queue.length===0?e(h):e(v,-1)}),M(u),M(r),g(()=>e(c,J.queue.length)),s(`click`,l,()=>E(he,!1)),O(t,r)},o=t=>{var n=et(),r=d(_(n),2),i=_(r,!0);M(r),M(n),g(()=>e(i,J.queue.length)),s(`click`,n,()=>E(he,!0)),O(t,n)};k(i,e=>{B(he)?e(a):e(o,-1)}),O(t,r)},x=typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`).matches,C=e=>x?0:e,z=e=>C(Math.min(e,12)*40);function W(e,{duration:t=300}={}){let n=getComputedStyle(e),r=parseFloat(n.height),i=parseFloat(n.marginTop),a=parseFloat(n.marginBottom),o=parseFloat(n.paddingTop),s=parseFloat(n.paddingBottom);return{duration:t,easing:U,css:e=>`overflow: hidden; opacity: ${e};height: ${e*r}px;margin-top: ${e*i}px; margin-bottom: ${e*a}px;padding-top: ${e*o}px; padding-bottom: ${e*s}px;`}}let G=I(null),K=I(!1),le=Array.from({length:8},(e,t)=>t),Y=I(null);function ue(e){if(typeof window>`u`||typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches)return;let t=document.documentElement,n=0,r=0,i=null,a=()=>Math.ceil(window.scrollY+window.innerHeight)>=t.scrollHeight-1,o=()=>window.scrollY<=0,s=e=>Math.sign(e)*96*(1-Math.exp(-Math.abs(e)/340)),c=()=>{let t=-s(n);e.style.transform=t?`translate3d(0, ${t}px, 0)`:``},l=()=>{i&&=(clearTimeout(i),null);let t=n;if(t===0){e.style.transform=``,e.style.willChange=``;return}let a=performance.now(),o=i=>{let s=Math.min(1,(i-a)/440);n=t*(1-(1-(1-s)**3)),c(),s<1?r=requestAnimationFrame(o):(n=0,e.style.transform=``,e.style.willChange=``)};cancelAnimationFrame(r),r=requestAnimationFrame(o)},u=()=>{i&&clearTimeout(i),i=setTimeout(l,90)},d=t=>{let i=t.deltaY>0&&a()||t.deltaY<0&&o();n===0&&!i||(t.preventDefault(),cancelAnimationFrame(r),e.style.willChange=`transform`,n+=t.deltaY,a()&&!o()?n=Math.max(0,n):o()&&!a()&&(n=Math.min(0,n)),c(),u())};return window.addEventListener(`wheel`,d,{passive:!1}),{destroy(){window.removeEventListener(`wheel`,d),cancelAnimationFrame(r),i&&clearTimeout(i),e.style.transform=``,e.style.willChange=``}}}async function de(e){J.selectCoreFeature(e),await h(),B(Y)?.scrollIntoView({behavior:x?`auto`:`smooth`,block:`start`})}i(()=>{let e=B(G);if(!e||typeof IntersectionObserver>`u`)return;let t=new IntersectionObserver(e=>{let t=e[0];t&&E(K,!t.isIntersecting)},{rootMargin:`-72px 0px 0px 0px`,threshold:0});return t.observe(e),()=>t.disconnect()});let X=null,Z=null;i(()=>{let e=J.allTagTypes;e.length>0&&J.registerTagTypes(e)});let pe=I(!1);i(()=>{if(!B(pe)||typeof window>`u`)return;let e=J.selectedProjectId,t=J.selectedCoreFeatureId,n=new URL(H.url),r=n.search;e?n.searchParams.set(`project`,e):n.searchParams.delete(`project`),t?n.searchParams.set(`core`,t):n.searchParams.delete(`core`),n.search!==r&&re(`${n.pathname}${n.search}`,{})}),V(e=>{if(!e.from)return;let t=H.url.searchParams;J.applySelection(t.get(`project`),t.get(`core`))}),ee(()=>{let e=H.url.searchParams,t=e.get(`project`);J.applySelection(t,e.get(`core`)),E(pe,!0),Z=ce((e,t)=>J.deepLinkFor(e,t)),t?J.loadProjectOnly(t):J.refresh(),J.refreshTagPalette(),X=J.subscribeSync(e=>{(e.kind===`project`||e.kind===`feature`||e.kind===`implementation-status`)&&J.applySyncEvent(e)})}),N(()=>{X?.(),X=null,Z?.(),Z=null});let he=I(!1),Q=I(null),ge=I(null);function _e(e){E(Q,e,!0)}function ve(e,t){e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`move`),E(ge,t,!0)}function ye(e){let t=B(Q);if(E(Q,null),E(ge,null),t===null||t===e)return;let n=J.queue[t];n&&J.moveQueueTo(n.item.id,e)}function be(){E(Q,null),E(ge,null)}function xe(e){return e.coreFeatures.reduce((e,t)=>e+t.features.length,0)}function Se(e){return e.tone===`urgent`?`Priority`:`Idea`}function Ce(e){return e.item.kind===`action`?e.actionName??`Action`:e.item.kind===`surface`?e.surfaceName??`Surface`:e.featureName}function we(e){return e>=80?`#34d399`:e>=45?`#fb923c`:`#f43f5e`}function Te(e,t){return t===`maturity`?e.item.target?.maturity:e.item.target?.implementation}function Ee(e,t){let n={...e.item.target??{},...t},r={...typeof n.maturity==`number`?{maturity:n.maturity}:{},...typeof n.implementation==`number`?{implementation:n.implementation}:{},...n.report?{report:!0}:{}};J.setQueueTarget(e.item.id,q(r)?void 0:r)}function De(e,t,n){Ee(e,{[t]:n})}function Oe(e){Ee(e,{report:!e.item.target?.report})}function Ae(e){J.setQueueTarget(e.item.id,void 0)}let Me=I(null),Fe=I(`implementation`),Ie=I(0),Le=(e,t)=>B(Me)===String(e.item.id)&&B(Fe)===t;function Re(e,t){let n=e.getBoundingClientRect(),r=n.width>0?(t-n.left)/n.width:0;return se(Math.max(0,Math.min(1,r))*100)}function ze(e,t,n,r){e.preventDefault();let i=e.currentTarget;i.setPointerCapture(e.pointerId),E(Me,String(t.item.id),!0),E(Fe,n,!0),E(Ie,Math.max(r,Re(i,e.clientX)),!0)}function Be(e,t,n,r){Le(t,n)&&E(Ie,Math.max(r,Re(e.currentTarget,e.clientX)),!0)}function Et(e,t,n){if(!Le(e,t))return;let r=B(Ie);E(Me,null),De(e,t,r<=n?void 0:r)}function Dt(e,t,n,r){let i=e.key===`ArrowRight`||e.key===`ArrowUp`?5:e.key===`ArrowLeft`||e.key===`ArrowDown`?-5:0;if(i===0)return;e.preventDefault();let a=se((Te(t,n)??r)+i);De(t,n,a<=r?void 0:a)}function Ot(e){let t=e.orphaned?` · removed from spec`:``;return e.item.kind===`feature`?`Whole feature · implement what's missing${t}`:`${e.featureName}${t}`}let kt=`inline-flex items-center gap-1.5 rounded-lg border border-slate-700 bg-slate-900/60 px-3 py-1.5 text-xs font-medium text-slate-300 transition hover:border-brand-500/60 hover:bg-slate-800 hover:text-brand-300`;var At=Tt(),jt=v(At),Mt=_(jt),Nt=d(_(Mt),2),Pt=e=>{var t=nt();n(t,20,()=>le,e=>e,(e,t)=>{var n=tt();g(()=>y(n,`--d: ${t*80}ms`)),O(e,n)}),M(t),O(e,t)},Ft=t=>{var n=rt(),r=_(n,!0);M(n),g(()=>e(r,J.error)),O(t,n)},It=e=>{O(e,it())},Lt=e=>{O(e,at())},Rt=r=>{let i=F(()=>J.selectedProject);var a=xt(),c=_(a);R(c,1,ne(kt),`svelte-xw1ck7`);var u=_(c);M(c);var f=d(c,2),m=_(f),h=_(m),v=_(h),y=_(v),b=_(y,!0);M(y);var x=d(y,2),S=_(x);M(x),M(v);var w=d(v,2),T=_(w,!0);M(w),M(h);var D=d(h,2),A=_(D);$(A,{label:`Maturity`,get value(){return B(i).maturityPercentage}}),$(d(A,2),{label:`Built`,get value(){return B(i).implementationPercentage}}),M(D),M(m),M(f);var j=d(f,2),N=_(j);te(N,e=>E(G,e),()=>B(G));var P=d(N,2),ee=_(P),I=d(_(ee),2),re=_(I);je(re);var V=d(re,2),H=t=>{var n=ot();R(n,1,ne(kt),`svelte-xw1ck7`);var r=_(n);M(n),g(()=>e(r,`← Show all ${B(i).coreFeatures.length??``}`)),s(`click`,n,()=>J.deselectCoreFeature()),O(t,n)},se=t=>{var n=st(),r=_(n);M(n),g(()=>e(r,`${J.visibleCoreFeatures.length??``}${J.searchActive||J.tagActive?` of ${B(i).coreFeatures.length}`:``}`)),O(t,n)};k(V,e=>{J.selectedCoreFeature?e(H):e(se,-1)}),M(I),M(ee);var q=d(ee,2),ce=e=>{O(e,ct())},le=e=>{O(e,lt())},ue=r=>{var i=mt();n(i,31,()=>J.visibleCoreFeatures,e=>e.id,(n,r,i)=>{let a=F(()=>J.selectedCoreFeature?.id===B(r).id);var c=pt(),l=_(c),u=e=>{var t=ut();g(()=>L(t,`aria-label`,`Open ${B(r).name}`)),s(`click`,t,()=>de(B(r).id)),O(e,t)};k(l,e=>{B(a)||e(u)});var f=d(l,2),m=_(f),h=_(m),v=_(h),y=_(v),b=_(y,!0);M(y);var x=d(y,2),S=_(x);M(x),Pe(d(x,2),()=>B(r).id),M(v);var w=d(v,2);me(w,{get text(){return B(r).description},class:`mt-1`}),ke(d(w,2),{get tags(){return B(r).tags},onToggle:e=>J.toggleTag(e),isActive:e=>J.isActiveTag(e),onAdd:(e,t)=>J.addCoreFeatureTag(B(r).id,{type:e,value:t}),onRemove:e=>J.removeCoreFeatureTag(B(r).id,e),onRename:(e,t)=>J.renameTag(e,t),get typeOptions(){return J.allTagTypes},collapsible:!0,class:`relative z-20 mt-2`}),M(h);var T=d(h,2),E=_(T);$(E,{label:`Maturity`,get value(){return B(r).maturityPercentage}}),$(d(E,2),{label:`Built`,get value(){return B(r).implementationPercentage}}),M(T),M(m),M(f);var D=d(f,2),A=e=>{var n=ft(),i=_(n),a=e=>{o(e,()=>B(r).id,()=>B(r).suggestions)},s=e=>{O(e,dt())};k(i,e=>{B(r).suggestions.length>0?e(a):e(s,-1)}),M(n),t(3,n,()=>ie,()=>({duration:C(300),easing:U})),O(e,n)};k(D,e=>{B(a)&&e(A)}),M(c),g(()=>{R(c,1,`skeuo-card group relative overflow-hidden ${B(a)?`skeuo-card--active`:`skeuo-card--interactive`}`,`svelte-xw1ck7`),R(y,1,`min-w-0 flex-1 truncate text-base font-semibold text-white ${B(a)?``:`group-hover:text-brand-300`}`,`svelte-xw1ck7`),e(b,B(r).name),e(S,`${B(r).features.length??``} feat`)}),t(1,c,()=>oe,()=>({y:10,duration:C(300),delay:z(B(i)),easing:U})),t(2,c,()=>W,()=>({duration:C(300)})),p(c,()=>fe,()=>({duration:C(320),easing:U})),O(n,c)}),M(i),O(r,i)};k(q,e=>{B(i).coreFeatures.length===0?e(ce):J.visibleCoreFeatures.length===0?e(le,1):e(ue,-1)}),M(P);var X=d(P,2),Z=_(X),pe=_(Z),he=d(_(pe),2),Q=_(he,!0);M(he),M(pe);var ge=d(pe,2),_e=t=>{var n=ht(),r=_(n);M(n),g(()=>e(r,`${J.visibleSelectedFeatures.length??``}${J.searchActive?` of ${J.selectedCoreFeature.features.length}`:``}`)),O(t,n)};k(ge,e=>{J.selectedCoreFeature&&e(_e)}),M(Z);var ve=d(Z,2),ye=e=>{var n=gt(),r=_(n);let i;M(n),g(()=>{R(n,1,`xl:relative xl:flex-1 xl:rounded-2xl xl:transition-colors xl:duration-500 xl:ease-out xl:motion-reduce:transition-none ${B(K)?`xl:bg-white/2.5`:`xl:bg-transparent`}`,`svelte-xw1ck7`),i=R(r,1,`prompt-card rounded-xl border border-dashed border-slate-700 bg-slate-900/40 p-8 text-center text-sm text-slate-400 xl:absolute xl:inset-x-0 xl:mx-auto xl:max-w-sm xl:overflow-hidden xl:transition-[top,transform] xl:duration-500 xl:ease-out xl:motion-reduce:transition-none ${B(K)?`xl:top-1/2 xl:-translate-y-1/2`:`xl:top-8`}`,`svelte-xw1ck7`,i,{"is-waiting":B(K)})}),t(1,r,()=>ae,()=>({duration:C(200)})),O(e,n)},be=e=>{O(e,_t())},Se=e=>{O(e,vt())},Ce=t=>{let r=F(()=>J.selectedCoreFeature.id);var i=bt();n(i,21,()=>J.visibleSelectedSurfaces,e=>e.surfaceId,(t,i)=>{var a=yt(),o=_(a),s=_(o),c=_(s,!0);M(s);var u=d(s,4),f=_(u,!0);M(u),M(o),n(d(o,2),19,()=>B(i).features,e=>e.id,(e,t,n)=>{l(e,()=>B(r),()=>B(t),()=>B(n))}),M(a),g(()=>{e(c,B(i).surfaceName),e(f,B(i).features.length)}),O(t,a)}),M(i),O(t,i)};k(ve,e=>{J.selectedCoreFeature?J.selectedCoreFeature.features.length===0?e(be,1):J.visibleSelectedFeatures.length===0?e(Se,2):e(Ce,-1):e(ye)}),M(X),M(j),te(j,e=>E(Y,e),()=>B(Y)),M(a),g(t=>{e(u,`← All projects (${J.projectCount??``})`),e(b,B(i).name),e(S,`${B(i).coreFeatures.length??``} core / ${t??``} feat`),e(T,B(i).description),R(X,1,`space-y-3 ${J.selectedCoreFeature?``:`xl:sticky xl:top-18 xl:flex xl:min-h-[calc(100vh-6rem)] xl:flex-col xl:self-start`}`,`svelte-xw1ck7`),e(Q,J.selectedCoreFeature?J.selectedCoreFeature.name:`Pick a core feature`)},[()=>xe(B(i))]),s(`click`,c,()=>J.deselectProject()),O(r,a)},zt=r=>{var i=wt(),a=_(i),o=d(_(a),2),l=_(o);je(l);var u=d(l,2),f=_(u);M(u),M(o),M(a);var p=d(a,2),m=_(p);n(m,19,()=>J.filteredProjects,e=>e.id,(n,r,i)=>{var a=St(),o=_(a),c=_(o),l=d(c,2),u=_(l),f=_(u),p=_(f),m=_(p,!0);M(p);var h=d(p,2),v=_(h);M(h),M(f),ke(d(f,2),{get tags(){return B(r).tags},onToggle:e=>J.toggleTag(e),isActive:e=>J.isActiveTag(e),onAdd:(e,t)=>J.addProjectTag(B(r).id,{type:e,value:t}),onRemove:e=>J.removeProjectTag(B(r).id,e),onRename:(e,t)=>J.renameTag(e,t),get typeOptions(){return J.allTagTypes},collapsible:!0,class:`relative z-20`}),M(u);var y=d(u,2),b=_(y);$(b,{label:`Maturity`,get value(){return B(r).maturityPercentage}}),$(d(b,2),{label:`Built`,get value(){return B(r).implementationPercentage}}),M(y),M(l),M(o),M(a),g(t=>{L(c,`aria-label`,`Open ${B(r).name}`),e(m,B(r).name),e(v,`${B(r).coreFeatures.length??``} core / ${t??``} feat`)},[()=>xe(B(r))]),s(`click`,c,()=>J.selectProject(B(r).id)),t(1,a,()=>oe,()=>({y:10,duration:C(300),delay:z(B(i)),easing:U})),O(n,a)});var h=d(m,2),y=e=>{var t=c();n(v(t),19,()=>Array.from({length:J.pendingProjectCount}),(e,t)=>`pending-${t}`,(e,t)=>{O(e,Ct())}),O(e,t)};k(h,e=>{J.pendingProjectCount>0&&!J.searchActive&&!J.tagActive&&e(y)}),M(p),M(i),g(()=>e(f,`${J.filteredProjects.length??``}${J.searchActive||J.tagActive?` of ${J.projectCount}`:` total`}`)),O(r,i)};k(Nt,e=>{J.loading?e(Pt):J.error?e(Ft,1):J.dashboard.projects.length===0?e(It,2):J.searchActive&&!J.selectedProject&&J.filteredProjects.length===0?e(Lt,3):J.selectedProject?e(Rt,4):e(zt,-1)}),M(Mt),S(Mt,e=>ue?.(e)),M(jt);var Bt=d(jt,2),Vt=e=>{b(e)};k(Bt,e=>{J.selectedProject&&e(Vt)}),O(r,At),w()}a([`click`,`pointerdown`,`pointermove`,`pointerup`,`keydown`,`change`]);function Dt(e){z(`eir1o2`,e=>{m(()=>{o.title=`Builder Mode / Unspaghettit`})}),Et(e,{})}export{Dt as component,ue as universal};