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
@@ -1,616 +0,0 @@
1
- import { h as attr_class, r as ensure_array_like, g as attr, t as escape_html, q as derived, a6 as stringify, i as attr_style } from './index-server-7H0jzj0M.js';
2
- import './client-DfpLcAZ9.js';
3
- import { p as page } from './state-CpLVNZq7.js';
4
- import { g as dialogStore } from './browserContainer-CNX7ANld.js';
5
- import { b as builderModeStore, s as subscribeSyncEvents } from './builderModeStore.svelte-ihupr-3p.js';
6
- import { t as tourStore } from './tourStore.svelte-CYs4oLjF.js';
7
- import { p as public_env } from './shared-server-CCs2CV3b.js';
8
- import { i as identityStore } from './identityStore.svelte-IIvW2_3b.js';
9
- import './internal-BPKrFkK1.js';
10
- import './index-DBqjc0Yf.js';
11
- import './TagPalette-CtMNYCmu.js';
12
- import './FeatureValidator-B8qEjAUW.js';
13
- import './ids-t7Gjdj0M.js';
14
- import './RenameTag-BuWLMl1m.js';
15
- import './FeatureTransforms-UWDHmWEg.js';
16
- import './tagPaletteStore.svelte-DfZOBvgY.js';
17
- import './eventBus-B9k-Vzso.js';
18
-
19
- //#region src/lib/views/registry.ts
20
- /** The base view. Always enabled; it's where the dashboard lands by default. */
21
- var EXPERT = {
22
- id: "expert",
23
- label: "Expert",
24
- href: "/projects",
25
- matches: (pathname) => pathname === "/" || pathname.startsWith("/projects") || pathname.startsWith("/features")
26
- };
27
- /** Opt-in views, keyed by the id used in `PUBLIC_UNSPA_VIEWS`. */
28
- var OPTIONAL_VIEWS = { builder: {
29
- id: "builder",
30
- label: "Builder",
31
- href: "/builder-mode",
32
- matches: (pathname) => pathname.startsWith("/builder-mode")
33
- } };
34
- /**
35
- * Parse the raw `PUBLIC_UNSPA_VIEWS` value into the ordered, de-duped list of
36
- * enabled view ids. Expert is always first; unknown ids are ignored.
37
- */
38
- var parseEnabledViewIds = (raw) => {
39
- const requested = (raw ?? "").split(",").map((part) => part.trim().toLowerCase()).filter((id) => id.length > 0 && id !== "expert" && id in OPTIONAL_VIEWS);
40
- return ["expert", ...[...new Set(requested)]];
41
- };
42
- /** Resolve the enabled view ids into their full definitions, in nav order. */
43
- var resolveEnabledViews = (raw) => parseEnabledViewIds(raw).map((id) => id === "expert" ? EXPERT : OPTIONAL_VIEWS[id]);
44
- /** Whether a specific view is enabled. Expert is always enabled. */
45
- var isViewEnabled = (raw, id) => parseEnabledViewIds(raw).includes(id);
46
- //#endregion
47
- //#region src/lib/views/enabled.ts
48
- /**
49
- * Runtime view enablement, read from `PUBLIC_UNSPA_VIEWS` (a comma list of
50
- * optional view ids, e.g. "builder"). Expert is always on. The value is a
51
- * runtime public env var — `unspa dashboard --view builder` sets it, or a
52
- * local `.env` for `vite dev` — so enabling a view is config, not a rebuild.
53
- */
54
- var enabledViews = () => resolveEnabledViews(public_env.PUBLIC_UNSPA_VIEWS);
55
- var isEnabled = (id) => isViewEnabled(public_env.PUBLIC_UNSPA_VIEWS, id);
56
-
57
- //#region src/shared/presentation/dialogs/AppDialog.svelte
58
- function AppDialog($$renderer, $$props) {
59
- $$renderer.component(($$renderer) => {
60
- const current = derived(() => dialogStore.current);
61
- let selected = /* @__PURE__ */ new Set();
62
- let inputValue = "";
63
- const toneStyles = {
64
- default: {
65
- icon: "?",
66
- iconBg: "bg-slate-100",
67
- iconColor: "text-slate-700",
68
- confirmBtn: "bg-slate-900 hover:bg-slate-800 text-white",
69
- check: "accent-slate-700"
70
- },
71
- danger: {
72
- icon: "!",
73
- iconBg: "bg-rose-50",
74
- iconColor: "text-rose-600",
75
- confirmBtn: "bg-rose-600 hover:bg-rose-500 text-white",
76
- check: "accent-rose-600"
77
- },
78
- info: {
79
- icon: "i",
80
- iconBg: "bg-brand-50",
81
- iconColor: "text-brand-700",
82
- confirmBtn: "bg-brand-700 hover:bg-brand-600 text-white",
83
- check: "accent-brand-700"
84
- },
85
- success: {
86
- icon: "✓",
87
- iconBg: "bg-emerald-50",
88
- iconColor: "text-emerald-600",
89
- confirmBtn: "bg-emerald-600 hover:bg-emerald-500 text-white",
90
- check: "accent-emerald-600"
91
- },
92
- warning: {
93
- icon: "!",
94
- iconBg: "bg-amber-50",
95
- iconColor: "text-amber-600",
96
- confirmBtn: "bg-amber-600 hover:bg-amber-500 text-white",
97
- check: "accent-amber-600"
98
- }
99
- };
100
- const tone = derived(() => current()?.opts.tone ?? (current()?.kind === "alert" ? "info" : "default"));
101
- const style = derived(() => toneStyles[tone()]);
102
- if (current()) {
103
- $$renderer.push("<!--[0-->");
104
- $$renderer.push(`<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"${attr_class(`relative w-full ${current().kind === "checklist" || current().kind === "choice" ? "max-w-lg" : "max-w-md"} overflow-hidden rounded-2xl border border-hairline bg-white shadow-2xl shadow-slate-950/20`)}><div class="flex gap-4 px-7 pt-7 pb-5"><div${attr_class(`flex h-11 w-11 shrink-0 items-center justify-center rounded-full text-lg ${style().iconBg} ${style().iconColor}`)}>${escape_html(style().icon)}</div> <div class="min-w-0 flex-1 pt-1"><h2 id="app-dialog-title" class="text-lg leading-tight text-slate-950">${escape_html(current().opts.title)}</h2> <p id="app-dialog-message" class="mt-2 whitespace-pre-line text-sm leading-relaxed text-slate-600">${escape_html(current().opts.message)}</p></div></div> `);
105
- if (current().kind === "choice") {
106
- $$renderer.push("<!--[0-->");
107
- $$renderer.push(`<div class="px-7 pt-2 pb-5"><ul class="flex max-h-80 flex-col gap-3 overflow-y-auto"><!--[-->`);
108
- const each_array = ensure_array_like(current().opts.options);
109
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
110
- let option = each_array[$$index];
111
- $$renderer.push(`<li class="flex"><button type="button"${attr_class(`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 ${style().confirmBtn}`)}><span class="min-w-0 flex-1"><span class="block text-sm">${escape_html(option.label)}</span> `);
112
- if (option.description) {
113
- $$renderer.push("<!--[0-->");
114
- $$renderer.push(`<span class="mt-1 block text-xs leading-relaxed opacity-80">${escape_html(option.description)}</span>`);
115
- } else $$renderer.push("<!--[-1-->");
116
- $$renderer.push(`<!--]--></span> <span aria-hidden="true" class="shrink-0 text-base transition group-hover:translate-x-1">→</span></button></li>`);
117
- }
118
- $$renderer.push(`<!--]--></ul></div>`);
119
- } else if (current().kind === "prompt") {
120
- $$renderer.push("<!--[1-->");
121
- $$renderer.push(`<div class="px-7 pt-1 pb-4"><label class="block text-xs font-medium text-slate-700">${escape_html(current().opts.inputLabel ?? "Value")} <input${attr("value", inputValue)}${attr("type", current().opts.password ? "password" : "text")}${attr("autocomplete", current().opts.password ? "new-password" : "off")} autocorrect="off" autocapitalize="off" spellcheck="false"${attr("placeholder", current().opts.placeholder ?? "")} 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> `);
122
- $$renderer.push("<!--[-1-->");
123
- $$renderer.push(`<!--]--></div>`);
124
- } else if (current().kind === "checklist") {
125
- $$renderer.push("<!--[2-->");
126
- $$renderer.push(`<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">${escape_html(selected.size)} of ${escape_html(current().opts.items.length)} selected</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"><!--[-->`);
127
- const each_array_1 = ensure_array_like(current().opts.items);
128
- for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {
129
- let item = each_array_1[$$index_1];
130
- $$renderer.push(`<li><label class="flex cursor-pointer items-start gap-3 rounded-md px-2 py-2 transition hover:bg-white"><input type="checkbox"${attr_class(`mt-0.5 h-4 w-4 rounded ${style().check}`)}${attr("checked", selected.has(item.id), true)}/> <span class="min-w-0 flex-1"><span class="block text-sm font-medium text-slate-900">${escape_html(item.label)}</span> `);
131
- if (item.description) {
132
- $$renderer.push("<!--[0-->");
133
- $$renderer.push(`<span class="mt-0.5 block text-xs text-slate-500">${escape_html(item.description)}</span>`);
134
- } else $$renderer.push("<!--[-1-->");
135
- $$renderer.push(`<!--]--></span></label></li>`);
136
- }
137
- $$renderer.push(`<!--]--></ul></div>`);
138
- } else $$renderer.push("<!--[-1-->");
139
- $$renderer.push(`<!--]--> <div class="flex justify-end gap-2 border-t border-hairline bg-slate-50 px-7 py-3">`);
140
- if (current().kind === "alert") {
141
- $$renderer.push("<!--[0-->");
142
- $$renderer.push(`<button type="button"${attr_class(`rounded-md px-4 py-2 text-sm transition ${style().confirmBtn}`)}>${escape_html(current().opts.buttonLabel ?? "OK")}</button>`);
143
- } else if (current().kind === "choice") {
144
- $$renderer.push("<!--[1-->");
145
- $$renderer.push(`<button type="button" class="rounded-md px-3 py-2 text-sm text-slate-600 transition hover:text-slate-950">${escape_html(current().opts.cancelLabel ?? "Close")}</button>`);
146
- } else {
147
- $$renderer.push("<!--[-1-->");
148
- $$renderer.push(`<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">${escape_html(current().opts.cancelLabel ?? "Cancel")}</button> <button type="button"${attr_class(`rounded-md px-4 py-2 text-sm transition focus:ring-2 focus:ring-offset-2 focus:outline-none ${style().confirmBtn}`)}>${escape_html(current().opts.confirmLabel ?? "Confirm")}</button>`);
149
- }
150
- $$renderer.push(`<!--]--></div></div></div>`);
151
- } else $$renderer.push("<!--[-1-->");
152
- $$renderer.push(`<!--]-->`);
153
- });
154
- }
155
- //#endregion
156
- //#region src/shared/presentation/easter-eggs/FlyingSpaghettiEasterEgg.svelte
157
- function FlyingSpaghettiEasterEgg($$renderer, $$props) {
158
- $$renderer.component(($$renderer) => {
159
- $$renderer.push("<!--[-1-->");
160
- $$renderer.push(`<!--]-->`);
161
- });
162
- }
163
- //#endregion
164
- //#region src/shared/presentation/toast/syncToastStore.svelte.ts
165
- var MAX_VISIBLE = 4;
166
- var DEFAULT_TTL_MS = 5e3;
167
- var hrefFor = (evt) => {
168
- if (evt.op === "delete") return void 0;
169
- switch (evt.kind) {
170
- case "feature": return `/features/${evt.id}`;
171
- case "project": return `/projects/${evt.id}`;
172
- case "implementation-status": return `/features/${evt.id}`;
173
- }
174
- };
175
- var DEDUPE_WINDOW_MS = 800;
176
- var SyncToastStore = class {
177
- toasts = [];
178
- nextId = 1;
179
- subscribed = false;
180
- unsubscribe = null;
181
- timers = /* @__PURE__ */ new Map();
182
- /**
183
- * Implementation-status writes ride the same notify channel as feature
184
- * saves, but they fire as part of every audit pass and would spam the
185
- * toast feed. Tracked per-(kind:id) so a burst of identical events
186
- * within DEDUPE_WINDOW_MS collapses into a single toast.
187
- */
188
- recentKeys = /* @__PURE__ */ new Map();
189
- /**
190
- * Idempotent. Call once from the root layout. Re-calls are no-ops, so
191
- * mounting/unmounting layout fragments won't tear the stream down.
192
- */
193
- start() {
194
- if (this.subscribed) return;
195
- this.subscribed = true;
196
- this.unsubscribe = subscribeSyncEvents();
197
- }
198
- dismiss(id) {
199
- const timer = this.timers.get(id);
200
- if (timer) {
201
- clearTimeout(timer);
202
- this.timers.delete(id);
203
- }
204
- this.toasts = this.toasts.filter((t) => t.id !== id);
205
- }
206
- /** Test/teardown hook. Not used in production. */
207
- reset() {
208
- for (const t of this.timers.values()) clearTimeout(t);
209
- this.timers.clear();
210
- this.toasts = [];
211
- this.recentKeys.clear();
212
- if (this.unsubscribe) this.unsubscribe();
213
- this.unsubscribe = null;
214
- this.subscribed = false;
215
- }
216
- handle(evt) {
217
- const key = `${evt.kind}:${evt.id}:${evt.op ?? "save"}`;
218
- const now = Date.now();
219
- const seen = this.recentKeys.get(key);
220
- if (seen !== void 0 && now - seen < DEDUPE_WINDOW_MS) {
221
- this.recentKeys.set(key, now);
222
- return;
223
- }
224
- this.recentKeys.set(key, now);
225
- const id = this.nextId++;
226
- const next = [{
227
- id,
228
- kind: evt.kind,
229
- entityId: evt.id,
230
- name: evt.name,
231
- projectName: evt.projectName,
232
- op: evt.op ?? "save",
233
- changeOp: evt.changeOp,
234
- changePath: evt.changePath,
235
- previousName: evt.previousName,
236
- actingFor: evt.actingFor,
237
- ...hrefFor(evt) ? { href: hrefFor(evt) } : {}
238
- }, ...this.toasts].slice(0, MAX_VISIBLE);
239
- const surviving = new Set(next.map((t) => t.id));
240
- for (const [oldId, timer] of this.timers) if (!surviving.has(oldId)) {
241
- clearTimeout(timer);
242
- this.timers.delete(oldId);
243
- }
244
- this.toasts = next;
245
- const timer = setTimeout(() => this.dismiss(id), DEFAULT_TTL_MS);
246
- this.timers.set(id, timer);
247
- }
248
- };
249
- var syncToastStore = new SyncToastStore();
250
- //#endregion
251
- //#region src/shared/presentation/toast/SyncToast.svelte
252
- function SyncToast($$renderer, $$props) {
253
- $$renderer.component(($$renderer) => {
254
- function kindLabel(kind) {
255
- switch (kind) {
256
- case "feature": return "feature";
257
- case "project": return "project";
258
- case "implementation-status": return "status";
259
- }
260
- }
261
- function kindAccent(kind) {
262
- switch (kind) {
263
- case "feature": return "border-cyan-200 bg-cyan-50";
264
- case "project": return "border-violet-200 bg-violet-50";
265
- case "implementation-status": return "border-emerald-200 bg-emerald-50";
266
- }
267
- }
268
- function opLabel(toast) {
269
- if (toast.op === "delete") return "deleted";
270
- switch (toast.changeOp) {
271
- case "added": return "added";
272
- case "removed": return "removed";
273
- case "renamed": return "renamed";
274
- case "edited": return "edited";
275
- case "queued": return "queued";
276
- case "unqueued": return "unqueued";
277
- case "created": return "created";
278
- case "deleted": return "deleted";
279
- default: return "saved";
280
- }
281
- }
282
- function breadcrumb(toast) {
283
- const parts = [];
284
- if (toast.projectName) parts.push(toast.projectName);
285
- const root = toast.changePath?.[0];
286
- const headIsEntity = root !== void 0 && (toast.name === root || !toast.name);
287
- if (toast.name && !headIsEntity) parts.push(toast.name);
288
- if (toast.changePath && toast.changePath.length > 0) for (const segment of toast.changePath) parts.push(segment);
289
- else if (toast.name && parts[parts.length - 1] !== toast.name) parts.push(toast.name);
290
- const cleaned = [];
291
- for (const seg of parts) {
292
- if (seg === "unknown") continue;
293
- if (cleaned[cleaned.length - 1] !== seg) cleaned.push(seg);
294
- }
295
- if (cleaned.length === 0) cleaned.push(toast.entityId);
296
- return cleaned;
297
- }
298
- if (syncToastStore.toasts.length > 0) {
299
- $$renderer.push("<!--[0-->");
300
- $$renderer.push(`<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"><!--[-->`);
301
- const each_array = ensure_array_like(syncToastStore.toasts);
302
- for (let $$index_1 = 0, $$length = each_array.length; $$index_1 < $$length; $$index_1++) {
303
- let toast = each_array[$$index_1];
304
- const crumbs = breadcrumb(toast);
305
- $$renderer.push(`<div${attr_class(`pointer-events-auto flex items-start gap-3 rounded-lg border px-3 py-2 shadow-md shadow-slate-950/10 ${stringify(kindAccent(toast.kind))}`)}><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">MCP · ${escape_html(opLabel(toast))} ${escape_html(kindLabel(toast.kind))}</span> `);
306
- if (toast.actingFor) {
307
- $$renderer.push("<!--[0-->");
308
- $$renderer.push(`<span class="rounded bg-purple-100 px-1.5 py-0.5 text-[9px] text-purple-800">for ${escape_html(toast.actingFor)}</span>`);
309
- } else $$renderer.push("<!--[-1-->");
310
- $$renderer.push(`<!--]--></div> <div class="mt-0.5 flex min-w-0 flex-wrap items-center gap-x-1 text-sm text-slate-900"><!--[-->`);
311
- const each_array_1 = ensure_array_like(crumbs);
312
- for (let i = 0, $$length = each_array_1.length; i < $$length; i++) {
313
- let segment = each_array_1[i];
314
- if (i > 0) {
315
- $$renderer.push("<!--[0-->");
316
- $$renderer.push(`<span class="shrink-0 text-slate-400" aria-hidden="true">›</span>`);
317
- } else $$renderer.push("<!--[-1-->");
318
- $$renderer.push(`<!--]--> <span${attr_class(`truncate ${i === crumbs.length - 1 ? "font-semibold" : "text-slate-600"}`)}>${escape_html(segment)}</span>`);
319
- }
320
- $$renderer.push(`<!--]--></div> `);
321
- if (toast.changeOp === "renamed" && toast.previousName) {
322
- $$renderer.push("<!--[0-->");
323
- $$renderer.push(`<div class="mt-0.5 truncate text-[11px] text-slate-500">was “${escape_html(toast.previousName)}”</div>`);
324
- } else $$renderer.push("<!--[-1-->");
325
- $$renderer.push(`<!--]--></div> <div class="flex shrink-0 items-center gap-1">`);
326
- if (toast.href) {
327
- $$renderer.push("<!--[0-->");
328
- $$renderer.push(`<a${attr("href", toast.href)} 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>`);
329
- } else $$renderer.push("<!--[-1-->");
330
- $$renderer.push(`<!--]--> <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">✕</button></div></div>`);
331
- }
332
- $$renderer.push(`<!--]--></div>`);
333
- } else $$renderer.push("<!--[-1-->");
334
- $$renderer.push(`<!--]-->`);
335
- });
336
- }
337
- //#endregion
338
- //#region src/features/tutorial/presentation/components/TourPanel.svelte
339
- function TourPanel($$renderer, $$props) {
340
- $$renderer.component(($$renderer) => {
341
- /**
342
- * The side-panel UI of the tour: title, body, navigation buttons,
343
- * "go to route" CTA when the user is on the wrong page.
344
- *
345
- * Rendered as a `[popover="manual"]` element so the browser places it
346
- * in the top layer cross-browser. Native `<dialog>.show()` is only
347
- * top-layer in Chromium; the Popover API is the cross-browser
348
- * equivalent and supports the same "last opened wins" re-stacking we
349
- * need to bump the panel above any modal dialog the app opens during
350
- * the tour.
351
- *
352
- * Pure view: receives all dynamic data via props + callbacks, owns no
353
- * state, knows nothing about the DOM at large. The orchestrator
354
- * (TourOverlay) feeds it the active step, the resolved position, and
355
- * the canAdvance verdict.
356
- */
357
- /** 1-based index of the current step. */
358
- /** True when the page route already matches the step's `route.pathname`. */
359
- /** Resolved by the parent based on the step + target rect. */
360
- /** Whether the user has fulfilled the step's requirements (for manual-advance steps). */
361
- /**
362
- * Bound by the parent so it can call .showPopover()/.hidePopover()
363
- * on the underlying element.
364
- */
365
- let { step, stepNumber, totalSteps, onCorrectRoute, placement, nextEnabled} = $$props;
366
- const isFirst = derived(() => stepNumber === 1);
367
- const isLast = derived(() => stepNumber === totalSteps);
368
- /** Inline style string for the popover. Adds 1.5rem margins on edges. */
369
- const positionStyle = derived(() => {
370
- switch (placement.kind) {
371
- case "bottom-right": return "bottom: 1.5rem; right: 1.5rem; left: auto; top: auto;";
372
- case "bottom-left": return "bottom: 1.5rem; left: 1.5rem; right: auto; top: auto;";
373
- case "absolute": return `top: ${placement.top}px; left: ${placement.left}px; bottom: auto; right: auto;`;
374
- }
375
- });
376
- $$renderer.push(`<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"${attr_style(positionStyle())} 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">Tutorial · step ${escape_html(stepNumber)} of ${escape_html(totalSteps)}</p> <h3 class="mt-0.5 text-sm font-semibold text-slate-950">${escape_html(step.title)}</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">${escape_html(step.body)}</p> `);
377
- if (!onCorrectRoute && step.route) {
378
- $$renderer.push("<!--[0-->");
379
- $$renderer.push(`<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">${escape_html(step.route.label)} →</button></div>`);
380
- } else if (step.advance.kind === "click") {
381
- $$renderer.push("<!--[1-->");
382
- $$renderer.push(`<p class="mt-3 text-[10px] italic text-slate-500">Click the highlighted element to continue.</p>`);
383
- } else if (step.advance.kind === "event") {
384
- $$renderer.push("<!--[2-->");
385
- $$renderer.push(`<p class="mt-3 text-[10px] italic text-slate-500">Do the action above to continue.</p>`);
386
- } else if (step.advance.kind === "manual" && !nextEnabled) {
387
- $$renderer.push("<!--[3-->");
388
- $$renderer.push(`<p class="mt-3 text-[10px] italic text-amber-700">Finish the action above first, then click Next.</p>`);
389
- } else $$renderer.push("<!--[-1-->");
390
- $$renderer.push(`<!--]--> <footer class="mt-3 flex items-center justify-between gap-2"><button type="button"${attr("disabled", isFirst(), true)} 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">←</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"${attr("disabled", !nextEnabled, true)} 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"${attr("title", nextEnabled ? isLast() ? "Finish the tour" : "Next step" : "Finish the current action first")}>${escape_html(isLast() ? "Finish" : "Next")} →</button></footer></aside>`);
391
- });
392
- }
393
- //#endregion
394
- //#region src/features/tutorial/presentation/components/TourSpotlight.svelte
395
- function TourSpotlight($$renderer, $$props) {
396
- $$renderer.component(($$renderer) => {
397
- /**
398
- * Renders the visual highlight for a tour step:
399
- * - a ring + box-shadow cutout around `rect` when a target is found
400
- * and the rect overlaps the viewport
401
- * - an arrow indicator pinned to the top or bottom of the viewport
402
- * when the target is off-screen (the user scrolled away)
403
- * - a full-screen dim when there is no target (welcome / done steps)
404
- *
405
- * Pure view: takes a rect, renders pixels. Knows nothing about where
406
- * the rect comes from and nothing about the tour engine. Keeping this
407
- * component dumb is what lets the spotlight be reused for future tour
408
- * flavors (e.g. an "explore mode" that highlights without an active
409
- * tour step).
410
- */
411
- /** Viewport rect of the element to highlight, or null for a full-screen dim. */
412
- /** Viewport rect of the element to highlight, or null for a full-screen dim. */
413
- let { rect } = $$props;
414
- const PAD = 10;
415
- const ring = derived(() => {
416
- if (!rect) return null;
417
- return {
418
- top: rect.top - PAD,
419
- left: rect.left - PAD,
420
- width: rect.width + PAD * 2,
421
- height: rect.height + PAD * 2
422
- };
423
- });
424
- /**
425
- * Off-screen state of the target:
426
- * - 'above': target is above the visible viewport (or behind sticky header)
427
- * - 'below': target is below the visible viewport
428
- * - 'visible': at least partially in view
429
- * - null: no target (full-screen dim case)
430
- */
431
- const offscreen = derived(() => {
432
- return null;
433
- });
434
- if (ring() && offscreen() === "visible") {
435
- $$renderer.push("<!--[0-->");
436
- $$renderer.push(`<div class="pointer-events-none fixed z-20 rounded-lg ring-4 ring-brand-400 ring-offset-2 ring-offset-transparent"${attr_style(`top: ${stringify(ring().top)}px; left: ${stringify(ring().left)}px; width: ${stringify(ring().width)}px; height: ${stringify(ring().height)}px; box-shadow: 0 0 0 9999px rgba(15, 23, 42, 0.55);`)} aria-hidden="true"></div>`);
437
- } else if (ring() && offscreen() === "above") {
438
- $$renderer.push("<!--[1-->");
439
- $$renderer.push(`<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">↑</span> <span>Highlight is above — click to scroll up</span></button>`);
440
- } else if (ring() && offscreen() === "below") {
441
- $$renderer.push("<!--[2-->");
442
- $$renderer.push(`<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 — click to scroll down</span> <span aria-hidden="true">↓</span></button>`);
443
- } else {
444
- $$renderer.push("<!--[-1-->");
445
- $$renderer.push(`<div class="pointer-events-none fixed inset-0 z-20 bg-slate-950/55" aria-hidden="true"></div>`);
446
- }
447
- $$renderer.push(`<!--]-->`);
448
- });
449
- }
450
- //#endregion
451
- //#region src/features/tutorial/presentation/components/TourOverlay.svelte
452
- function TourOverlay($$renderer, $$props) {
453
- $$renderer.component(($$renderer) => {
454
- /**
455
- * Thin orchestrator. Composes:
456
- * - TourPanel (the side-panel UI, rendered as a `[popover]`)
457
- * - TourSpotlight (the highlight ring / full-screen dim)
458
- * - useTargetTracker (DOM observer that maps selector → live rect)
459
- * - inputPrefill (seeds tour-nominated inputs)
460
- * - topLayerStacker (keeps the panel above other top-layer dialogs)
461
- *
462
- * Each chunk knows one thing. This file's only job is gluing them to
463
- * the tour store and to the SvelteKit `page` for the route check.
464
- */
465
- const step = derived(() => tourStore.currentStep);
466
- const onCorrectRoute = derived(() => {
467
- if (!step()?.route) return true;
468
- return page.url?.pathname === step().route.pathname;
469
- });
470
- const targetRect = derived(() => null);
471
- /**
472
- * Resolved panel placement honouring the step's `panelPosition` hint:
473
- * - `bottom-right` (default): pinned corner.
474
- * - `avoid-target`: flip to bottom-left if the target sits in the
475
- * right half of the viewport (simulator steps).
476
- * - `below-target`: position directly under the highlighted rect,
477
- * centred horizontally. Falls back to bottom-right if there's no
478
- * room or no target.
479
- */
480
- const PANEL_WIDTH = 320;
481
- const PANEL_HEIGHT_ESTIMATE = 220;
482
- const PANEL_MARGIN = 16;
483
- const panelPlacement = derived(() => {
484
- if (typeof window === "undefined") return { kind: "bottom-right" };
485
- const mode = step()?.panelPosition ?? "bottom-right";
486
- if (mode === "avoid-target") {
487
- if (!targetRect()) return { kind: "bottom-right" };
488
- return targetRect().left + targetRect().width / 2 > window.innerWidth / 2 ? { kind: "bottom-left" } : { kind: "bottom-right" };
489
- }
490
- if (mode === "below-target" && targetRect()) {
491
- const top = targetRect().bottom + PANEL_MARGIN;
492
- if (top + PANEL_HEIGHT_ESTIMATE > window.innerHeight - PANEL_MARGIN) return { kind: "bottom-right" };
493
- const centredLeft = targetRect().left + targetRect().width / 2 - PANEL_WIDTH / 2;
494
- return {
495
- kind: "absolute",
496
- top,
497
- left: Math.max(PANEL_MARGIN, Math.min(centredLeft, window.innerWidth - PANEL_WIDTH - PANEL_MARGIN))
498
- };
499
- }
500
- return { kind: "bottom-right" };
501
- });
502
- /**
503
- * Whether the Next button should be enabled. Manual steps default
504
- * to enabled; click/event steps default to disabled (only the natural
505
- * trigger advances). A step's optional `canAdvance` predicate
506
- * overrides the manual default — used by the form-modification steps
507
- * to gate Next until the user has actually added the
508
- * parameter/effect/rule.
509
- */
510
- const nextEnabled = derived(() => {
511
- if (!step()) return false;
512
- if (step().advance.kind !== "manual") return false;
513
- if (step().canAdvance) return step().canAdvance();
514
- return true;
515
- });
516
- if (step()) {
517
- $$renderer.push("<!--[0-->");
518
- if (onCorrectRoute()) {
519
- $$renderer.push("<!--[0-->");
520
- TourSpotlight($$renderer, { rect: targetRect() });
521
- } else $$renderer.push("<!--[-1-->");
522
- $$renderer.push(`<!--]--> `);
523
- TourPanel($$renderer, {
524
- step: step(),
525
- stepNumber: tourStore.stepIndex + 1,
526
- totalSteps: tourStore.totalSteps,
527
- onCorrectRoute: onCorrectRoute(),
528
- placement: panelPlacement(),
529
- nextEnabled: nextEnabled()});
530
- $$renderer.push(`<!---->`);
531
- } else $$renderer.push("<!--[-1-->");
532
- $$renderer.push(`<!--]-->`);
533
- });
534
- }
535
- //#endregion
536
- //#region src/routes/+layout.svelte
537
- function _layout($$renderer, $$props) {
538
- $$renderer.component(($$renderer) => {
539
- const initial = derived(() => identityStore.name.trim().charAt(0).toUpperCase());
540
- let identityMenuOpen = false;
541
- let settingsMenuOpen = false;
542
- let { children } = $$props;
543
- const views = derived(enabledViews);
544
- const showViewSwitcher = derived(() => views().length > 1);
545
- const builderActive = derived(() => isEnabled("builder") && page.url.pathname.startsWith("/builder-mode"));
546
- const mcpActive = derived(() => page.url.pathname.startsWith("/mcp"));
547
- const dark = derived(builderActive);
548
- const builderProject = derived(() => builderActive() ? builderModeStore.selectedProject : null);
549
- const builderSearch = derived(() => builderModeStore.search);
550
- $$renderer.push(`<div class="flex min-h-full flex-col bg-[linear-gradient(180deg,#f0fdfa_0%,#f8fafc_220px,#f8fafc_100%)] text-ink"><header${attr_class(`sticky top-0 z-30 border-b backdrop-blur transition-colors ${dark() ? "border-slate-800 bg-slate-950/90" : "border-slate-200 bg-white/95"}`)}><div class="mx-auto flex h-16 max-w-6xl items-center justify-between px-4 sm:px-6"><div class="flex min-w-0 items-center gap-3"><a href="/" class="flex shrink-0 items-center gap-2"><img src="/unspaghettit_logo.png" alt="Unspaghettit" class="h-12 w-auto"/> <span${attr_class(`relative hidden font-brand text-3xl font-semibold leading-none sm:inline-block ${dark() ? "text-white" : "text-slate-950"}`)}>Unspaghettit <span class="font-grotesk absolute right-0 -bottom-2 text-[10px] font-medium tracking-wide text-slate-500">by Lyriks.io</span></span></a> `);
551
- if (showViewSwitcher()) {
552
- $$renderer.push("<!--[0-->");
553
- $$renderer.push(`<div role="group" aria-label="View mode"${attr_class(`flex shrink-0 items-center rounded-full border p-0.5 text-[11px] font-medium ${dark() ? "border-slate-700/70 bg-slate-800/60" : "border-slate-200 bg-slate-100"}`)}><!--[-->`);
554
- const each_array = ensure_array_like(views());
555
- for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {
556
- let view = each_array[$$index];
557
- const active = view.matches(page.url.pathname);
558
- $$renderer.push(`<a${attr("href", view.href)}${attr_class(`rounded-full px-2.5 py-0.5 transition ${active ? dark() ? "bg-slate-700 text-white shadow-sm shadow-black/20" : "bg-white text-slate-900 shadow-sm shadow-slate-950/10" : dark() ? "text-slate-400 hover:text-slate-200" : "text-slate-500 hover:text-slate-800"}`)}${attr("aria-current", active ? "page" : void 0)}>${escape_html(view.label)}</a>`);
559
- }
560
- $$renderer.push(`<!--]--></div>`);
561
- } else $$renderer.push("<!--[-1-->");
562
- $$renderer.push(`<!--]--> `);
563
- if (builderProject()) {
564
- $$renderer.push("<!--[0-->");
565
- $$renderer.push(`<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">${escape_html(builderProject().name)}</button></div>`);
566
- } else $$renderer.push("<!--[-1-->");
567
- $$renderer.push(`<!--]--></div> `);
568
- if (builderActive()) {
569
- $$renderer.push("<!--[0-->");
570
- $$renderer.push(`<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..."${attr("value", builderSearch())} 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"/> `);
571
- if (builderSearch().trim().length > 0) {
572
- $$renderer.push("<!--[0-->");
573
- $$renderer.push(`<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>`);
574
- } else $$renderer.push("<!--[-1-->");
575
- $$renderer.push(`<!--]--></div></div>`);
576
- } else $$renderer.push("<!--[-1-->");
577
- $$renderer.push(`<!--]--> <div class="flex shrink-0 items-center gap-1.5"><div class="relative"><button type="button" aria-haspopup="menu"${attr("aria-expanded", settingsMenuOpen)} aria-label="Open app menu" title="App menu"${attr_class(`grid h-9 w-9 place-items-center rounded-md transition ${mcpActive() ? dark() ? "bg-slate-800 text-white" : "bg-slate-900 text-white" : dark() ? "text-slate-400 hover:bg-slate-800 hover:text-white" : "text-slate-600 hover:bg-slate-100 hover:text-slate-950"}`)}><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> `);
578
- $$renderer.push("<!--[-1-->");
579
- $$renderer.push(`<!--]--></div> <a href="/tutorial" aria-label="Help &amp; tutorial" title="Help &amp; tutorial"${attr_class(`grid h-9 w-9 place-items-center rounded-md transition ${dark() ? "text-slate-400 hover:bg-slate-800 hover:text-white" : "text-slate-600 hover:bg-slate-100 hover:text-slate-950"}`)}><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"${attr("aria-expanded", identityMenuOpen)}${attr("aria-label", identityStore.name ? `Signed in as ${identityStore.name}. Open identity menu.` : "Set your display name")}${attr("title", identityStore.name ? `Signed in as ${identityStore.name}` : "Set a display name so your edits are recognisable in history")}${attr_class(`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 ${identityStore.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"}`)}>`);
580
- if (identityStore.name) {
581
- $$renderer.push("<!--[0-->");
582
- $$renderer.push(`<span aria-hidden="true">${escape_html(initial())}</span>`);
583
- } else {
584
- $$renderer.push("<!--[-1-->");
585
- $$renderer.push(`<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>`);
586
- }
587
- $$renderer.push(`<!--]--> <span${attr_class(`absolute -right-0.5 -bottom-0.5 inline-flex h-3 w-3 items-center justify-center rounded-full ring-2 ring-white ${identityStore.name ? "bg-emerald-500" : "bg-amber-400"}`)} aria-hidden="true"></span></button> `);
588
- $$renderer.push("<!--[-1-->");
589
- $$renderer.push(`<!--]--></div></div></div> `);
590
- if (builderActive()) {
591
- $$renderer.push("<!--[0-->");
592
- $$renderer.push(`<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..."${attr("value", builderSearch())} 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"/> `);
593
- if (builderSearch().trim().length > 0) {
594
- $$renderer.push("<!--[0-->");
595
- $$renderer.push(`<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>`);
596
- } else $$renderer.push("<!--[-1-->");
597
- $$renderer.push(`<!--]--></div></div>`);
598
- } else $$renderer.push("<!--[-1-->");
599
- $$renderer.push(`<!--]--></header> <main class="flex-1"><!---->`);
600
- $$renderer.push(`<div class="motion-reduce:animate-none! motion-reduce:opacity-100!">`);
601
- children($$renderer);
602
- $$renderer.push(`<!----></div>`);
603
- $$renderer.push(`<!----></main></div> `);
604
- AppDialog($$renderer);
605
- $$renderer.push(`<!----> `);
606
- FlyingSpaghettiEasterEgg($$renderer);
607
- $$renderer.push(`<!----> `);
608
- SyncToast($$renderer);
609
- $$renderer.push(`<!----> `);
610
- TourOverlay($$renderer);
611
- $$renderer.push(`<!---->`);
612
- });
613
- }
614
-
615
- export { _layout as default };
616
- //# sourceMappingURL=_layout.svelte-BREws55o.js.map