unspaghettit 0.3.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 (766) 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.gz +0 -0
  8. package/build/client/_app/immutable/chunks/B3vnQs252.js +1 -0
  9. package/build/client/_app/immutable/chunks/B3vnQs252.js.br +0 -0
  10. package/build/client/_app/immutable/chunks/B3vnQs252.js.gz +0 -0
  11. package/build/client/_app/immutable/chunks/{CxyLMlpt2.js → BANF9BhQ2.js} +1 -1
  12. package/build/client/_app/immutable/chunks/BANF9BhQ2.js.br +0 -0
  13. package/build/client/_app/immutable/chunks/BANF9BhQ2.js.gz +0 -0
  14. package/build/client/_app/immutable/chunks/BJdTO_n6.js +1 -0
  15. package/build/client/_app/immutable/chunks/BJdTO_n6.js.br +0 -0
  16. package/build/client/_app/immutable/chunks/BJdTO_n6.js.gz +0 -0
  17. package/build/client/_app/immutable/chunks/BPl9BITm.js.gz +0 -0
  18. package/build/client/_app/immutable/chunks/BQ9GodWX2.js.gz +0 -0
  19. package/build/client/_app/immutable/chunks/Bcyn5YUg.js +4 -0
  20. package/build/client/_app/immutable/chunks/Bcyn5YUg.js.br +0 -0
  21. package/build/client/_app/immutable/chunks/Bcyn5YUg.js.gz +0 -0
  22. package/build/client/_app/immutable/chunks/Bfc9rQXP.js +1 -0
  23. package/build/client/_app/immutable/chunks/Bfc9rQXP.js.br +0 -0
  24. package/build/client/_app/immutable/chunks/Bfc9rQXP.js.gz +0 -0
  25. package/build/client/_app/immutable/chunks/{BfMYiIUi.js → BjxqhpPG.js} +1 -1
  26. package/build/client/_app/immutable/chunks/BjxqhpPG.js.br +0 -0
  27. package/build/client/_app/immutable/chunks/BjxqhpPG.js.gz +0 -0
  28. package/build/client/_app/immutable/chunks/ByaoVvNB.js +1 -0
  29. package/build/client/_app/immutable/chunks/ByaoVvNB.js.br +0 -0
  30. package/build/client/_app/immutable/chunks/ByaoVvNB.js.gz +0 -0
  31. package/build/client/_app/immutable/chunks/BzLd0mTH.js.gz +0 -0
  32. package/build/client/_app/immutable/chunks/C8b3IMj8.js +1 -0
  33. package/build/client/_app/immutable/chunks/C8b3IMj8.js.br +0 -0
  34. package/build/client/_app/immutable/chunks/C8b3IMj8.js.gz +0 -0
  35. package/build/client/_app/immutable/chunks/CXvvf4uQ.js +1 -0
  36. package/build/client/_app/immutable/chunks/CXvvf4uQ.js.br +0 -0
  37. package/build/client/_app/immutable/chunks/CXvvf4uQ.js.gz +0 -0
  38. package/build/client/_app/immutable/chunks/Cl7Z3e6-.js.gz +0 -0
  39. package/build/client/_app/immutable/chunks/ClC4qR7W2.js +2 -0
  40. package/build/client/_app/immutable/chunks/ClC4qR7W2.js.br +0 -0
  41. package/build/client/_app/immutable/chunks/ClC4qR7W2.js.gz +0 -0
  42. package/build/client/_app/immutable/chunks/CuGlh1c2.js +1 -0
  43. package/build/client/_app/immutable/chunks/CuGlh1c2.js.br +0 -0
  44. package/build/client/_app/immutable/chunks/CuGlh1c2.js.gz +0 -0
  45. package/build/client/_app/immutable/chunks/CwzIdrQR.js +1 -0
  46. package/build/client/_app/immutable/chunks/CwzIdrQR.js.br +0 -0
  47. package/build/client/_app/immutable/chunks/CwzIdrQR.js.gz +0 -0
  48. package/build/client/_app/immutable/chunks/D5speDV82.js.gz +0 -0
  49. package/build/client/_app/immutable/chunks/D64sGJRN.js +1 -0
  50. package/build/client/_app/immutable/chunks/D64sGJRN.js.br +0 -0
  51. package/build/client/_app/immutable/chunks/D64sGJRN.js.gz +0 -0
  52. package/build/client/_app/immutable/chunks/DNaA4QRO2.js +1 -0
  53. package/build/client/_app/immutable/chunks/DNaA4QRO2.js.br +0 -0
  54. package/build/client/_app/immutable/chunks/DNaA4QRO2.js.gz +0 -0
  55. package/build/client/_app/immutable/chunks/Da59TXPe.js +1 -0
  56. package/build/client/_app/immutable/chunks/Da59TXPe.js.br +2 -0
  57. package/build/client/_app/immutable/chunks/Da59TXPe.js.gz +0 -0
  58. package/build/client/_app/immutable/chunks/DhTiE3j02.js +2 -0
  59. package/build/client/_app/immutable/chunks/DhTiE3j02.js.br +0 -0
  60. package/build/client/_app/immutable/chunks/DhTiE3j02.js.gz +0 -0
  61. package/build/client/_app/immutable/chunks/Dhqg7r_2.js.gz +0 -0
  62. package/build/client/_app/immutable/chunks/DmyaDy4d2.js +1 -0
  63. package/build/client/_app/immutable/chunks/DmyaDy4d2.js.br +0 -0
  64. package/build/client/_app/immutable/chunks/DmyaDy4d2.js.gz +0 -0
  65. package/build/client/_app/immutable/chunks/{DkxwAIfJ2.js → DryaQyjN2.js} +1 -1
  66. package/build/client/_app/immutable/chunks/DryaQyjN2.js.br +0 -0
  67. package/build/client/_app/immutable/chunks/DryaQyjN2.js.gz +0 -0
  68. package/build/client/_app/immutable/chunks/DtK8qK5Q2.js +1 -0
  69. package/build/client/_app/immutable/chunks/DtK8qK5Q2.js.br +0 -0
  70. package/build/client/_app/immutable/chunks/DtK8qK5Q2.js.gz +0 -0
  71. package/build/client/_app/immutable/chunks/DtblIi6X2.js +1 -0
  72. package/build/client/_app/immutable/chunks/DtblIi6X2.js.br +1 -0
  73. package/build/client/_app/immutable/chunks/DtblIi6X2.js.gz +0 -0
  74. package/build/client/_app/immutable/chunks/UkzDDeO42.js +1 -0
  75. package/build/client/_app/immutable/chunks/UkzDDeO42.js.br +0 -0
  76. package/build/client/_app/immutable/chunks/UkzDDeO42.js.gz +0 -0
  77. package/build/client/_app/immutable/chunks/{B_9TWPrx2.js → Vu8LzrwP2.js} +1 -1
  78. package/build/client/_app/immutable/chunks/Vu8LzrwP2.js.br +0 -0
  79. package/build/client/_app/immutable/chunks/Vu8LzrwP2.js.gz +0 -0
  80. package/build/client/_app/immutable/chunks/_b612aVb.js +1 -0
  81. package/build/client/_app/immutable/chunks/_b612aVb.js.br +0 -0
  82. package/build/client/_app/immutable/chunks/_b612aVb.js.gz +0 -0
  83. package/build/client/_app/immutable/chunks/aNMRV4sP2.js.gz +0 -0
  84. package/build/client/_app/immutable/chunks/cMamJTsF.js.gz +0 -0
  85. package/build/client/_app/immutable/chunks/ib21i2T_.js.gz +0 -0
  86. package/build/client/_app/immutable/chunks/kNaey6uv.js.gz +0 -0
  87. package/build/client/_app/immutable/chunks/oVMDLirx.js +1 -0
  88. package/build/client/_app/immutable/chunks/oVMDLirx.js.br +0 -0
  89. package/build/client/_app/immutable/chunks/oVMDLirx.js.gz +0 -0
  90. package/build/client/_app/immutable/chunks/olAc024e.js +1 -0
  91. package/build/client/_app/immutable/chunks/olAc024e.js.br +0 -0
  92. package/build/client/_app/immutable/chunks/olAc024e.js.gz +0 -0
  93. package/build/client/_app/immutable/chunks/suTxxv1t.js.gz +0 -0
  94. package/build/client/_app/immutable/chunks/wXIHzLMQ2.js +1 -0
  95. package/build/client/_app/immutable/chunks/wXIHzLMQ2.js.br +0 -0
  96. package/build/client/_app/immutable/chunks/wXIHzLMQ2.js.gz +0 -0
  97. package/build/client/_app/immutable/chunks/{B439_FLv.js → wrqalH0a.js} +1 -1
  98. package/build/client/_app/immutable/chunks/wrqalH0a.js.br +0 -0
  99. package/build/client/_app/immutable/chunks/wrqalH0a.js.gz +0 -0
  100. package/build/client/_app/immutable/chunks/x60Tn5kT.js +1 -0
  101. package/build/client/_app/immutable/chunks/x60Tn5kT.js.br +0 -0
  102. package/build/client/_app/immutable/chunks/x60Tn5kT.js.gz +0 -0
  103. package/build/client/_app/immutable/chunks/xihTtKlq.js.gz +0 -0
  104. package/build/client/_app/immutable/chunks/{BOrLmFwJ.js → yShDxCNj.js} +1 -1
  105. package/build/client/_app/immutable/chunks/yShDxCNj.js.br +2 -0
  106. package/build/client/_app/immutable/chunks/yShDxCNj.js.gz +0 -0
  107. package/build/client/_app/immutable/entry/app.Etd-exTb.js +2 -0
  108. package/build/client/_app/immutable/entry/app.Etd-exTb.js.br +0 -0
  109. package/build/client/_app/immutable/entry/app.Etd-exTb.js.gz +0 -0
  110. package/build/client/_app/immutable/entry/start.DY2B3u4g.js +1 -0
  111. package/build/client/_app/immutable/entry/start.DY2B3u4g.js.br +0 -0
  112. package/build/client/_app/immutable/entry/start.DY2B3u4g.js.gz +0 -0
  113. package/build/client/_app/immutable/nodes/0.tKfYV3__.js +8 -0
  114. package/build/client/_app/immutable/nodes/0.tKfYV3__.js.br +0 -0
  115. package/build/client/_app/immutable/nodes/0.tKfYV3__.js.gz +0 -0
  116. package/build/client/_app/immutable/nodes/{1.Dyte3Ggf.js → 1.CER5ICKt.js} +1 -1
  117. package/build/client/_app/immutable/nodes/1.CER5ICKt.js.br +1 -0
  118. package/build/client/_app/immutable/nodes/1.CER5ICKt.js.gz +0 -0
  119. package/build/client/_app/immutable/nodes/10.rT7cD8kX.js +1 -0
  120. package/build/client/_app/immutable/nodes/10.rT7cD8kX.js.br +0 -0
  121. package/build/client/_app/immutable/nodes/10.rT7cD8kX.js.gz +0 -0
  122. package/build/client/_app/immutable/nodes/11.BAnV_Y5Y.js +2 -0
  123. package/build/client/_app/immutable/nodes/11.BAnV_Y5Y.js.br +0 -0
  124. package/build/client/_app/immutable/nodes/11.BAnV_Y5Y.js.gz +0 -0
  125. package/build/client/_app/immutable/nodes/{11.wvMfJKC2.js → 12.DCTRFMqo.js} +4 -3
  126. package/build/client/_app/immutable/nodes/12.DCTRFMqo.js.br +0 -0
  127. package/build/client/_app/immutable/nodes/12.DCTRFMqo.js.gz +0 -0
  128. package/build/client/_app/immutable/nodes/{2.CmPPom9Z.js → 2.CF488WWF.js} +1 -1
  129. package/build/client/_app/immutable/nodes/2.CF488WWF.js.br +0 -0
  130. package/build/client/_app/immutable/nodes/2.CF488WWF.js.gz +0 -0
  131. package/build/client/_app/immutable/nodes/3.CP7CPPVH.js +1 -0
  132. package/build/client/_app/immutable/nodes/3.CP7CPPVH.js.br +0 -0
  133. package/build/client/_app/immutable/nodes/3.CP7CPPVH.js.gz +0 -0
  134. package/build/client/_app/immutable/nodes/4.D1bxCSiM.js +3 -0
  135. package/build/client/_app/immutable/nodes/4.D1bxCSiM.js.br +0 -0
  136. package/build/client/_app/immutable/nodes/4.D1bxCSiM.js.gz +0 -0
  137. package/build/client/_app/immutable/nodes/5.D6jZgh9y.js +48 -0
  138. package/build/client/_app/immutable/nodes/5.D6jZgh9y.js.br +0 -0
  139. package/build/client/_app/immutable/nodes/5.D6jZgh9y.js.gz +0 -0
  140. package/build/client/_app/immutable/nodes/6.BrBFUA0s.js +1 -0
  141. package/build/client/_app/immutable/nodes/6.BrBFUA0s.js.br +0 -0
  142. package/build/client/_app/immutable/nodes/6.BrBFUA0s.js.gz +0 -0
  143. package/build/client/_app/immutable/nodes/7.pajo8MfM.js +3 -0
  144. package/build/client/_app/immutable/nodes/7.pajo8MfM.js.br +0 -0
  145. package/build/client/_app/immutable/nodes/7.pajo8MfM.js.gz +0 -0
  146. package/build/client/_app/immutable/nodes/8.Cc80_Igi.js +5 -0
  147. package/build/client/_app/immutable/nodes/8.Cc80_Igi.js.br +0 -0
  148. package/build/client/_app/immutable/nodes/8.Cc80_Igi.js.gz +0 -0
  149. package/build/client/_app/immutable/nodes/{8.B-HweAc8.js → 9.D72NaL3l.js} +1 -1
  150. package/build/client/_app/immutable/nodes/9.D72NaL3l.js.br +1 -0
  151. package/build/client/_app/immutable/nodes/9.D72NaL3l.js.gz +0 -0
  152. package/build/client/_app/version.json +1 -1
  153. package/build/client/_app/version.json.br +0 -0
  154. package/build/client/_app/version.json.gz +0 -0
  155. package/build/client/lyriks_logo.svg.gz +0 -0
  156. package/build/server/chunks/0-8YZc572z.js +15 -0
  157. package/build/server/chunks/0-8YZc572z.js.map +1 -0
  158. package/build/server/chunks/1-DxkfSJLu.js +9 -0
  159. package/build/server/chunks/{1-BSUItTig.js.map → 1-DxkfSJLu.js.map} +1 -1
  160. package/build/server/chunks/10-DkObdGtU.js +9 -0
  161. package/build/server/chunks/10-DkObdGtU.js.map +1 -0
  162. package/build/server/chunks/11-DL94HxpZ.js +9 -0
  163. package/build/server/chunks/11-DL94HxpZ.js.map +1 -0
  164. package/build/server/chunks/12-CI74sCkt.js +9 -0
  165. package/build/server/chunks/12-CI74sCkt.js.map +1 -0
  166. package/build/server/chunks/2-qhWwQ4eL.js +9 -0
  167. package/build/server/chunks/2-qhWwQ4eL.js.map +1 -0
  168. package/build/server/chunks/3-CzoZtSTp.js +16 -0
  169. package/build/server/chunks/3-CzoZtSTp.js.map +1 -0
  170. package/build/server/chunks/4-CDa9DBsh.js +16 -0
  171. package/build/server/chunks/4-CDa9DBsh.js.map +1 -0
  172. package/build/server/chunks/5-qD2xxOrq.js +9 -0
  173. package/build/server/chunks/5-qD2xxOrq.js.map +1 -0
  174. package/build/server/chunks/6-B4mWzvDn.js +9 -0
  175. package/build/server/chunks/6-B4mWzvDn.js.map +1 -0
  176. package/build/server/chunks/7-zExv-fTN.js +9 -0
  177. package/build/server/chunks/7-zExv-fTN.js.map +1 -0
  178. package/build/server/chunks/8-BVrGdQg4.js +9 -0
  179. package/build/server/chunks/{7-C4hmS0dG.js.map → 8-BVrGdQg4.js.map} +1 -1
  180. package/build/server/chunks/9-BnZLRMYA.js +9 -0
  181. package/build/server/chunks/9-BnZLRMYA.js.map +1 -0
  182. package/build/server/chunks/{BehaviorGraph-m5kYj5HH.js → BehaviorGraph-C-9z37Sm.js} +43 -12
  183. package/build/server/chunks/BehaviorGraph-C-9z37Sm.js.map +1 -0
  184. package/build/server/chunks/Clock-BfMWQpmJ.js +5 -0
  185. package/build/server/chunks/Clock-BfMWQpmJ.js.map +1 -0
  186. package/build/server/chunks/DeleteDomain-BvHEgAyp.js +24 -0
  187. package/build/server/chunks/DeleteDomain-BvHEgAyp.js.map +1 -0
  188. package/build/server/chunks/{FeatureValidator-B8qEjAUW.js → DeleteFeature-DnK8sBJI.js} +142 -77
  189. package/build/server/chunks/DeleteFeature-DnK8sBJI.js.map +1 -0
  190. package/build/server/chunks/DeleteProject-BXZcehHZ.js +41 -0
  191. package/build/server/chunks/DeleteProject-BXZcehHZ.js.map +1 -0
  192. package/build/server/chunks/Effect-BJtLR-6l.js +46 -0
  193. package/build/server/chunks/Effect-BJtLR-6l.js.map +1 -0
  194. package/build/server/chunks/{FeatureCard-CfbXNYe8.js → FeatureCard-Bb50FEfp.js} +4 -4
  195. package/build/server/chunks/{FeatureCard-CfbXNYe8.js.map → FeatureCard-Bb50FEfp.js.map} +1 -1
  196. package/build/server/chunks/{FeatureJson-Bv-qiOSf.js → FeatureJson-DYvMEAub.js} +2 -2
  197. package/build/server/chunks/{FeatureJson-Bv-qiOSf.js.map → FeatureJson-DYvMEAub.js.map} +1 -1
  198. package/build/server/chunks/{FeatureTransforms-UWDHmWEg.js → FeatureTransforms-B0aI_CJD.js} +10 -3
  199. package/build/server/chunks/FeatureTransforms-B0aI_CJD.js.map +1 -0
  200. package/build/server/chunks/{ManageTagsDialog-DBxA3tM2.js → ManageTagsDialog-D5xbAVNB.js} +5 -5
  201. package/build/server/chunks/ManageTagsDialog-D5xbAVNB.js.map +1 -0
  202. package/build/server/chunks/{ProgressBar-DDoQJ_C9.js → ProgressBar-CUC2EZqG.js} +2 -2
  203. package/build/server/chunks/{ProgressBar-DDoQJ_C9.js.map → ProgressBar-CUC2EZqG.js.map} +1 -1
  204. package/build/server/chunks/{ProjectsIndex-DUVJ3hyL.js → ProjectsIndex-FgIu9dBp.js} +135 -14
  205. package/build/server/chunks/ProjectsIndex-FgIu9dBp.js.map +1 -0
  206. package/build/server/chunks/{RenameTag-BuWLMl1m.js → RenameTag-DWIIR4Bx.js} +3 -6
  207. package/build/server/chunks/RenameTag-DWIIR4Bx.js.map +1 -0
  208. package/build/server/chunks/ScenarioApplier-YPKECfZe.js +55 -0
  209. package/build/server/chunks/ScenarioApplier-YPKECfZe.js.map +1 -0
  210. package/build/server/chunks/SimulatorEngine-DM1F9nCO.js +1391 -0
  211. package/build/server/chunks/SimulatorEngine-DM1F9nCO.js.map +1 -0
  212. package/build/server/chunks/StateValue-BBjWox8f.js +105 -0
  213. package/build/server/chunks/StateValue-BBjWox8f.js.map +1 -0
  214. package/build/server/chunks/{TagDotStrip-B1XQ0m0Y.js → TagDotStrip-0rn-IJVE.js} +4 -4
  215. package/build/server/chunks/TagDotStrip-0rn-IJVE.js.map +1 -0
  216. package/build/server/chunks/{TagFilterSelect-DbO0Qduh.js → TagFilterSelect-Dbu-7Dg4.js} +5 -5
  217. package/build/server/chunks/{TagFilterSelect-DbO0Qduh.js.map → TagFilterSelect-Dbu-7Dg4.js.map} +1 -1
  218. package/build/server/chunks/{TagPalette-CtMNYCmu.js → TagPalette-CpdTiC_7.js} +101 -9
  219. package/build/server/chunks/TagPalette-CpdTiC_7.js.map +1 -0
  220. package/build/server/chunks/{TransitionCatalog-B8zHs-2E.js → TransitionCatalog-CYXUANy6.js} +2 -2
  221. package/build/server/chunks/TransitionCatalog-CYXUANy6.js.map +1 -0
  222. package/build/server/chunks/{_layout.svelte-CLTmk0xU.js → _layout.svelte-pSSG85WT.js} +689 -14
  223. package/build/server/chunks/_layout.svelte-pSSG85WT.js.map +1 -0
  224. package/build/server/chunks/{_page.svelte-Oj-W7G5s.js → _page.svelte-BNH3szkk.js} +22 -17
  225. package/build/server/chunks/{_page.svelte-Oj-W7G5s.js.map → _page.svelte-BNH3szkk.js.map} +1 -1
  226. package/build/server/chunks/_page.svelte-BcuGvUt1.js +37 -0
  227. package/build/server/chunks/{_page.svelte-Cham-dsM.js.map → _page.svelte-BcuGvUt1.js.map} +1 -1
  228. package/build/server/chunks/_page.svelte-BoOMG5Y0.js +37 -0
  229. package/build/server/chunks/{_page.svelte-B1nG3PKn.js.map → _page.svelte-BoOMG5Y0.js.map} +1 -1
  230. package/build/server/chunks/{_page.svelte-Caq7J0jU.js → _page.svelte-C4PRh_wP.js} +18 -12
  231. package/build/server/chunks/_page.svelte-C4PRh_wP.js.map +1 -0
  232. package/build/server/chunks/{_page.svelte-Z_kK2lHY.js → _page.svelte-Cqn34NXy.js} +19 -13
  233. package/build/server/chunks/_page.svelte-Cqn34NXy.js.map +1 -0
  234. package/build/server/chunks/{_page.svelte-B1s7jxaQ.js → _page.svelte-DSCeOGv7.js} +15 -10
  235. package/build/server/chunks/_page.svelte-DSCeOGv7.js.map +1 -0
  236. package/build/server/chunks/_page.svelte-DqWdGt48.js +182 -0
  237. package/build/server/chunks/_page.svelte-DqWdGt48.js.map +1 -0
  238. package/build/server/chunks/{_page.svelte-Dhwjwph_.js → _page.svelte-DsQHSEl4.js} +20 -12
  239. package/build/server/chunks/_page.svelte-DsQHSEl4.js.map +1 -0
  240. package/build/server/chunks/{_page.svelte-DlFVT40-.js → _page.svelte-Uioz8hsG.js} +18 -11
  241. package/build/server/chunks/{_page.svelte-DlFVT40-.js.map → _page.svelte-Uioz8hsG.js.map} +1 -1
  242. package/build/server/chunks/{_page.svelte-BW_nbAAH.js → _page.svelte-p38jot9e.js} +80 -173
  243. package/build/server/chunks/_page.svelte-p38jot9e.js.map +1 -0
  244. package/build/server/chunks/{_page.svelte-NVT2dzpG.js → _page.svelte-yN5kzgJ9.js} +218 -263
  245. package/build/server/chunks/_page.svelte-yN5kzgJ9.js.map +1 -0
  246. package/build/server/chunks/{_server.ts-DsbbVoOn.js → _server.ts-1CtrHhte.js} +4 -4
  247. package/build/server/chunks/{_server.ts-DsbbVoOn.js.map → _server.ts-1CtrHhte.js.map} +1 -1
  248. package/build/server/chunks/{_server.ts-CWvU15tL.js → _server.ts-71Qx1lQb.js} +4 -4
  249. package/build/server/chunks/{_server.ts-CWvU15tL.js.map → _server.ts-71Qx1lQb.js.map} +1 -1
  250. package/build/server/chunks/_server.ts-BAyekGHB.js +961 -0
  251. package/build/server/chunks/_server.ts-BAyekGHB.js.map +1 -0
  252. package/build/server/chunks/{_server.ts-BihpbxOW.js → _server.ts-BLWhU22T.js} +4 -4
  253. package/build/server/chunks/{_server.ts-BihpbxOW.js.map → _server.ts-BLWhU22T.js.map} +1 -1
  254. package/build/server/chunks/{_server.ts-YnfXkeMJ.js → _server.ts-C7EVZVxv.js} +22 -13
  255. package/build/server/chunks/_server.ts-C7EVZVxv.js.map +1 -0
  256. package/build/server/chunks/{_server.ts-vcaqdwxS.js → _server.ts-CGjYuLmo.js} +12 -7
  257. package/build/server/chunks/_server.ts-CGjYuLmo.js.map +1 -0
  258. package/build/server/chunks/{_server.ts-Dy5zQHe2.js → _server.ts-CX6H8fSE.js} +8 -31
  259. package/build/server/chunks/_server.ts-CX6H8fSE.js.map +1 -0
  260. package/build/server/chunks/{_server.ts-BuoQ02BW.js → _server.ts-CyEdTCLr.js} +4 -4
  261. package/build/server/chunks/{_server.ts-BuoQ02BW.js.map → _server.ts-CyEdTCLr.js.map} +1 -1
  262. package/build/server/chunks/_server.ts-DKVTM9Pj.js +77 -0
  263. package/build/server/chunks/_server.ts-DKVTM9Pj.js.map +1 -0
  264. package/build/server/chunks/{_server.ts-0uNTZKwF.js → _server.ts-Dip65hLJ.js} +15 -9
  265. package/build/server/chunks/_server.ts-Dip65hLJ.js.map +1 -0
  266. package/build/server/chunks/{_server.ts-D4EO0VHu.js → _server.ts-Dm0tCs2i.js} +5 -5
  267. package/build/server/chunks/{_server.ts-D4EO0VHu.js.map → _server.ts-Dm0tCs2i.js.map} +1 -1
  268. package/build/server/chunks/{_server.ts-BIBWjQI-.js → _server.ts-DsYwK_uW.js} +4 -4
  269. package/build/server/chunks/{_server.ts-BIBWjQI-.js.map → _server.ts-DsYwK_uW.js.map} +1 -1
  270. package/build/server/chunks/{_server.ts-DDa0Nk_S.js → _server.ts-RCEgegYU.js} +4 -4
  271. package/build/server/chunks/{_server.ts-DDa0Nk_S.js.map → _server.ts-RCEgegYU.js.map} +1 -1
  272. package/build/server/chunks/_server.ts-XOLAT4dd.js +146 -0
  273. package/build/server/chunks/_server.ts-XOLAT4dd.js.map +1 -0
  274. package/build/server/chunks/_server.ts-afh_zLVi.js +69 -0
  275. package/build/server/chunks/_server.ts-afh_zLVi.js.map +1 -0
  276. package/build/server/chunks/{browserContainer-CNX7ANld.js → browserContainer-BdldtueJ.js} +71 -1378
  277. package/build/server/chunks/browserContainer-BdldtueJ.js.map +1 -0
  278. package/build/server/chunks/buildSearchDocs-Cyfrnw9G.js +337 -0
  279. package/build/server/chunks/buildSearchDocs-Cyfrnw9G.js.map +1 -0
  280. package/build/server/chunks/{builderModeStore.svelte-BpRIU_zP.js → builderModeStore.svelte-BEZMQEqn.js} +7 -6
  281. package/build/server/chunks/builderModeStore.svelte-BEZMQEqn.js.map +1 -0
  282. package/build/server/chunks/{client-DeX3TC3s.js → client-C9Cat4DK.js} +3 -3
  283. package/build/server/chunks/{client-DeX3TC3s.js.map → client-C9Cat4DK.js.map} +1 -1
  284. package/build/server/chunks/{error.svelte-Cdjeq3L2.js → error.svelte-CzVR_A6P.js} +5 -5
  285. package/build/server/chunks/{error.svelte-Cdjeq3L2.js.map → error.svelte-CzVR_A6P.js.map} +1 -1
  286. package/build/server/chunks/featureQueueContext-DuXpyTdC.js +32 -0
  287. package/build/server/chunks/featureQueueContext-DuXpyTdC.js.map +1 -0
  288. package/build/server/chunks/{featureStore.svelte-DIYgPBVm.js → featureStore.svelte-DHZf88gu.js} +5 -4
  289. package/build/server/chunks/featureStore.svelte-DHZf88gu.js.map +1 -0
  290. package/build/server/chunks/{projectsStore.svelte-QDz5PchX.js → featuresStore.svelte-bUyQBg1-.js} +95 -3
  291. package/build/server/chunks/featuresStore.svelte-bUyQBg1-.js.map +1 -0
  292. package/build/server/chunks/humanize-CkCPfeWi.js +53 -0
  293. package/build/server/chunks/humanize-CkCPfeWi.js.map +1 -0
  294. package/build/server/chunks/{index-server-7H0jzj0M.js → index-server-DvBux_Gf.js} +47 -2
  295. package/build/server/chunks/{index-server-7H0jzj0M.js.map → index-server-DvBux_Gf.js.map} +1 -1
  296. package/build/server/chunks/{internal-KYK0WpL7.js → internal-BFt8yDlf.js} +3 -3
  297. package/build/server/chunks/{internal-KYK0WpL7.js.map → internal-BFt8yDlf.js.map} +1 -1
  298. package/build/server/chunks/projectBundleClient-BtvWPh87.js +168 -0
  299. package/build/server/chunks/projectBundleClient-BtvWPh87.js.map +1 -0
  300. package/build/server/chunks/projectContextStore.svelte-jRJGJZ42.js +141 -0
  301. package/build/server/chunks/projectContextStore.svelte-jRJGJZ42.js.map +1 -0
  302. package/build/server/chunks/projectFeaturesStore.svelte-BwNEtDIL.js +87 -0
  303. package/build/server/chunks/projectFeaturesStore.svelte-BwNEtDIL.js.map +1 -0
  304. package/build/server/chunks/{projectFeaturesStore.svelte-2o-72_vr.js → projectStore.svelte-BNuLNxk_.js} +5 -88
  305. package/build/server/chunks/projectStore.svelte-BNuLNxk_.js.map +1 -0
  306. package/build/server/chunks/{reconcile-B5xqb6-s.js → reconcile-CVG2LSlW.js} +60 -4
  307. package/build/server/chunks/reconcile-CVG2LSlW.js.map +1 -0
  308. package/build/server/chunks/{snapshotRepository-BPXCjX92.js → snapshotRepository-8f-2wTrb.js} +30 -5
  309. package/build/server/chunks/snapshotRepository-8f-2wTrb.js.map +1 -0
  310. package/build/server/chunks/{state-DBjl9lhV.js → state-CZZtjXLE.js} +3 -3
  311. package/build/server/chunks/{state-DBjl9lhV.js.map → state-CZZtjXLE.js.map} +1 -1
  312. package/build/server/chunks/{sync-DZ3dn761.js → sync-Bn6eSUhC.js} +3 -3
  313. package/build/server/chunks/{sync-DZ3dn761.js.map → sync-Bn6eSUhC.js.map} +1 -1
  314. package/build/server/chunks/{syncBridge-BwXzPdjJ.js → syncAwareRepositories-DvUjq5Q6.js} +27 -3
  315. package/build/server/chunks/syncAwareRepositories-DvUjq5Q6.js.map +1 -0
  316. package/build/server/chunks/{tagPaletteStore.svelte-DfZOBvgY.js → tagPaletteStore.svelte-C71bdzDl.js} +4 -4
  317. package/build/server/chunks/{tagPaletteStore.svelte-DfZOBvgY.js.map → tagPaletteStore.svelte-C71bdzDl.js.map} +1 -1
  318. package/build/server/index.js +2 -2
  319. package/build/server/index.js.map +1 -1
  320. package/build/server/manifest.js +59 -30
  321. package/build/server/manifest.js.map +1 -1
  322. package/cli/README.md +70 -2
  323. package/cli/commands/check.ts +190 -0
  324. package/cli/commands/ci.ts +71 -0
  325. package/cli/commands/coverage-ingest.ts +112 -0
  326. package/cli/commands/scenarios-adapter.ts +96 -0
  327. package/cli/scenarios/adapter-scaffold.ts +99 -0
  328. package/cli/scenarios/codegen.ts +7 -1
  329. package/cli/scenarios/results.ts +85 -0
  330. package/cli/skills/unspa-audit/SKILL.md +19 -0
  331. package/cli/skills/unspa-edit/SKILL.md +20 -3
  332. package/cli/skills/unspa-implement/SKILL.md +28 -0
  333. package/cli/unspa.ts +98 -0
  334. package/cli/util/context-files.ts +13 -2
  335. package/mcp-server/bin.ts +104 -104
  336. package/mcp-server/migrate-defaults.ts +164 -164
  337. package/mcp-server/repo-link.ts +142 -134
  338. package/mcp-server/resources/guide.ts +24 -4
  339. package/mcp-server/resources/operations.ts +3 -0
  340. package/mcp-server/seed-snapshots.ts +22 -22
  341. package/mcp-server/server.ts +8 -4
  342. package/mcp-server/sync-aware-repos.ts +79 -79
  343. package/mcp-server/sync-notifier.ts +180 -180
  344. package/mcp-server/tools/_codegen.ts +115 -115
  345. package/mcp-server/tools/_entity_builders.ts +30 -0
  346. package/mcp-server/tools/_shared.ts +210 -210
  347. package/mcp-server/tools/action.ts +210 -210
  348. package/mcp-server/tools/batch.ts +29 -5
  349. package/mcp-server/tools/effect.ts +139 -135
  350. package/mcp-server/tools/entity.ts +132 -132
  351. package/mcp-server/tools/entityField.ts +132 -132
  352. package/mcp-server/tools/event.ts +116 -116
  353. package/mcp-server/tools/feature.ts +264 -264
  354. package/mcp-server/tools/invariant.ts +275 -275
  355. package/mcp-server/tools/persona.ts +141 -141
  356. package/mcp-server/tools/project.ts +500 -391
  357. package/mcp-server/tools/reachabilityGoal.ts +97 -0
  358. package/mcp-server/tools/read.ts +526 -483
  359. package/mcp-server/tools/reorder.ts +114 -114
  360. package/mcp-server/tools/resource.ts +194 -194
  361. package/mcp-server/tools/rule.ts +302 -302
  362. package/mcp-server/tools/scenario.ts +4 -1
  363. package/mcp-server/tools/specGaps.ts +221 -221
  364. package/mcp-server/tools/state.ts +10 -2
  365. package/mcp-server/tools/surface.ts +102 -102
  366. package/mcp-server/tools/transition.ts +96 -96
  367. package/mcp-server/tools/verification.ts +131 -0
  368. package/package.json +14 -2
  369. package/src/app.css +26 -14
  370. package/src/features/behavior-model/application/ports/FeatureRepository.ts +16 -16
  371. package/src/features/behavior-model/application/use-cases/CreateFeature.ts +24 -24
  372. package/src/features/behavior-model/application/use-cases/DeleteFeature.ts +8 -8
  373. package/src/features/behavior-model/application/use-cases/GetFeature.ts +9 -9
  374. package/src/features/behavior-model/application/use-cases/ListFeatures.ts +10 -10
  375. package/src/features/behavior-model/application/use-cases/MutateFeature.ts +90 -90
  376. package/src/features/behavior-model/application/use-cases/SaveFeature.ts +31 -31
  377. package/src/features/behavior-model/domain/entities/Entity.ts +45 -45
  378. package/src/features/behavior-model/domain/entities/EventDefinition.ts +35 -35
  379. package/src/features/behavior-model/domain/entities/Feature.ts +10 -0
  380. package/src/features/behavior-model/domain/entities/Persona.ts +33 -33
  381. package/src/features/behavior-model/domain/entities/ReachabilityGoal.ts +39 -0
  382. package/src/features/behavior-model/domain/entities/Resource.ts +54 -54
  383. package/src/features/behavior-model/domain/entities/Scenario.ts +15 -0
  384. package/src/features/behavior-model/domain/entities/StateDefinition.ts +13 -0
  385. package/src/features/behavior-model/domain/entities/Surface.ts +75 -75
  386. package/src/features/behavior-model/domain/entities/index.ts +9 -9
  387. package/src/features/behavior-model/domain/services/BehaviorGraphModel.ts +25 -0
  388. package/src/features/behavior-model/domain/services/DerivedState.ts +67 -0
  389. package/src/features/behavior-model/domain/services/EffectApplier.ts +112 -3
  390. package/src/features/behavior-model/domain/services/EffectiveEntities.ts +166 -166
  391. package/src/features/behavior-model/domain/services/EntityDeducer.ts +83 -83
  392. package/src/features/behavior-model/domain/services/EventCatalog.ts +141 -141
  393. package/src/features/behavior-model/domain/services/FeatureExpressionNormalizer.ts +43 -5
  394. package/src/features/behavior-model/domain/services/FeatureSharedStateNormalizer.ts +24 -3
  395. package/src/features/behavior-model/domain/services/FeatureTransforms.ts +33 -0
  396. package/src/features/behavior-model/domain/services/FeatureValidator.ts +124 -16
  397. package/src/features/behavior-model/domain/services/PersonaApplier.ts +39 -39
  398. package/src/features/behavior-model/domain/services/ResourceDeducer.ts +64 -64
  399. package/src/features/behavior-model/domain/services/ResourceUsage.ts +79 -79
  400. package/src/features/behavior-model/domain/services/ScenarioApplier.ts +40 -40
  401. package/src/features/behavior-model/domain/services/SharedStateDefinitions.ts +32 -32
  402. package/src/features/behavior-model/domain/services/StatePathReferences.ts +249 -217
  403. package/src/features/behavior-model/domain/services/TransitionCatalog.ts +173 -173
  404. package/src/features/behavior-model/domain/value-objects/Effect.ts +100 -3
  405. package/src/features/behavior-model/domain/value-objects/EntityFieldType.ts +57 -57
  406. package/src/features/behavior-model/domain/value-objects/Expression.ts +22 -2
  407. package/src/features/behavior-model/domain/value-objects/ParameterType.ts +57 -57
  408. package/src/features/behavior-model/domain/value-objects/Resource.ts +210 -210
  409. package/src/features/behavior-model/domain/value-objects/RuleCategory.ts +57 -57
  410. package/src/features/behavior-model/domain/value-objects/RuleCondition.ts +52 -1
  411. package/src/features/behavior-model/domain/value-objects/SimulationClock.ts +35 -0
  412. package/src/features/behavior-model/domain/value-objects/ids.ts +2 -0
  413. package/src/features/behavior-model/infrastructure/io/FeatureJson.ts +89 -89
  414. package/src/features/behavior-model/infrastructure/persistence/HttpFeatureRepository.ts +43 -43
  415. package/src/features/behavior-model/infrastructure/persistence/JsonFolderFeatureRepository.ts +10 -0
  416. package/src/features/behavior-model/infrastructure/persistence/snapshot-discovery.ts +76 -76
  417. package/src/features/behavior-model/infrastructure/seed/seedStorefront.ts +967 -967
  418. package/src/features/behavior-model/presentation/adapters/VisBehaviorGraphRenderer.ts +10 -1
  419. package/src/features/behavior-model/presentation/components/ActionEditor.svelte +683 -682
  420. package/src/features/behavior-model/presentation/components/ActionsEditor.svelte +232 -232
  421. package/src/features/behavior-model/presentation/components/BehaviorGraph.svelte +275 -77
  422. package/src/features/behavior-model/presentation/components/EffectEditor.svelte +168 -168
  423. package/src/features/behavior-model/presentation/components/EntityEditor.svelte +241 -248
  424. package/src/features/behavior-model/presentation/components/EntityFieldRow.svelte +180 -181
  425. package/src/features/behavior-model/presentation/components/EntityManager.svelte +252 -251
  426. package/src/features/behavior-model/presentation/components/EventsManager.svelte +373 -372
  427. package/src/features/behavior-model/presentation/components/FeatureEditor.svelte +396 -348
  428. package/src/features/behavior-model/presentation/components/FeatureHeader.svelte +152 -143
  429. package/src/features/behavior-model/presentation/components/FeatureHealthStrip.svelte +110 -110
  430. package/src/features/behavior-model/presentation/components/HistoryPanel.svelte +154 -154
  431. package/src/features/behavior-model/presentation/components/NewFeatureForm.svelte +66 -66
  432. package/src/features/behavior-model/presentation/components/ParameterNameSelect.svelte +84 -84
  433. package/src/features/behavior-model/presentation/components/ParametersEditor.svelte +411 -411
  434. package/src/features/behavior-model/presentation/components/PersonaEditor.svelte +244 -244
  435. package/src/features/behavior-model/presentation/components/PersonasManager.svelte +130 -130
  436. package/src/features/behavior-model/presentation/components/ReachabilityGoalEditor.svelte +230 -0
  437. package/src/features/behavior-model/presentation/components/ReachabilityGoalsEditor.svelte +86 -0
  438. package/src/features/behavior-model/presentation/components/ResourcesManager.svelte +291 -290
  439. package/src/features/behavior-model/presentation/components/ScenariosEditor.svelte +496 -496
  440. package/src/features/behavior-model/presentation/components/StateDefinitionsEditor.svelte +356 -356
  441. package/src/features/behavior-model/presentation/components/SurfaceEntitiesView.svelte +88 -88
  442. package/src/features/behavior-model/presentation/components/SurfaceInvariantsEditor.svelte +76 -76
  443. package/src/features/behavior-model/presentation/components/SurfaceList.svelte +300 -300
  444. package/src/features/behavior-model/presentation/components/SurfaceMetaEditor.svelte +158 -156
  445. package/src/features/behavior-model/presentation/components/SurfacePanel.svelte +198 -198
  446. package/src/features/behavior-model/presentation/components/SurfacePersonasView.svelte +122 -122
  447. package/src/features/behavior-model/presentation/components/SurfaceResourcesView.svelte +113 -113
  448. package/src/features/behavior-model/presentation/components/SurfaceRulesEditor.svelte +69 -69
  449. package/src/features/behavior-model/presentation/components/TransitionsManager.svelte +322 -321
  450. package/src/features/behavior-model/presentation/context/featureQueueContext.ts +78 -0
  451. package/src/features/behavior-model/presentation/stores/editorStore.svelte.ts +132 -131
  452. package/src/features/behavior-model/presentation/stores/featureStore.svelte.ts +177 -177
  453. package/src/features/behavior-model/presentation/stores/featuresStore.svelte.ts +98 -98
  454. package/src/features/behavior-model/presentation/view-models/BehaviorGraphTheme.ts +1 -0
  455. package/src/features/behavior-model/presentation/view-models/factories.ts +181 -132
  456. package/src/features/domains/infrastructure/persistence/JsonFolderDomainRepository.ts +9 -0
  457. package/src/features/global-search/application/use-cases/LoadSearchIndex.ts +70 -0
  458. package/src/features/global-search/domain/SearchDoc.ts +111 -0
  459. package/src/features/global-search/domain/buildSearchDocs.ts +483 -0
  460. package/src/features/global-search/domain/searchNav.ts +58 -0
  461. package/src/features/global-search/domain/searchScoring.ts +81 -0
  462. package/src/features/global-search/infrastructure/adapters/defaultSearchHost.ts +28 -0
  463. package/src/features/global-search/presentation/components/GlobalSearch.svelte +262 -0
  464. package/src/features/global-search/presentation/ports/SearchHostPorts.ts +41 -0
  465. package/src/features/global-search/presentation/searchKindMeta.ts +108 -0
  466. package/src/features/global-search/presentation/stores/globalSearchStore.svelte.ts +171 -0
  467. package/src/features/implementation-queue/presentation/components/FloatingQueueWidget.svelte +264 -0
  468. package/src/features/implementation-queue/presentation/stores/globalQueueStore.svelte.ts +172 -0
  469. package/src/features/implementation-status/application/ports/ImplementationStatusRepository.ts +8 -8
  470. package/src/features/implementation-status/application/use-cases/GetImplementationStatus.ts +8 -8
  471. package/src/features/implementation-status/domain/ApplyCapturedToSpec.ts +323 -322
  472. package/src/features/implementation-status/domain/FieldDiff.ts +238 -236
  473. package/src/features/implementation-status/infrastructure/persistence/InMemoryImplementationStatusRepository.ts +21 -21
  474. package/src/features/implementation-status/presentation/components/ImplementationStatusPanel.svelte +831 -831
  475. package/src/features/implementation-status/presentation/stores/implementationStatusStore.svelte.ts +97 -97
  476. package/src/features/library/application/use-cases/ApplyBlueprintsToFeature.ts +33 -33
  477. package/src/features/library/domain/services/BlueprintApplier.ts +94 -94
  478. package/src/features/library/infrastructure/blueprints/auth/ResetPasswordBlueprint.ts +332 -332
  479. package/src/features/library/infrastructure/blueprints/auth/SignInBlueprint.ts +281 -281
  480. package/src/features/library/infrastructure/blueprints/auth/SignUpBlueprint.ts +299 -299
  481. package/src/features/library/infrastructure/blueprints/auth/VerifyEmailBlueprint.ts +288 -288
  482. package/src/features/library/infrastructure/blueprints/auth/shared.ts +146 -146
  483. package/src/features/library/infrastructure/blueprints/commerce/CartBlueprint.ts +222 -222
  484. package/src/features/library/infrastructure/blueprints/commerce/CatalogBlueprint.ts +190 -190
  485. package/src/features/library/infrastructure/blueprints/commerce/CheckoutBlueprint.ts +322 -322
  486. package/src/features/library/infrastructure/blueprints/commerce/OrderConfirmationBlueprint.ts +172 -172
  487. package/src/features/library/infrastructure/blueprints/commerce/ProductDetailsBlueprint.ts +290 -290
  488. package/src/features/library/infrastructure/blueprints/content/ReviewsBlueprint.ts +392 -392
  489. package/src/features/library/infrastructure/blueprints/onboarding/OnboardingWizardBlueprint.ts +344 -344
  490. package/src/features/library/infrastructure/blueprints/utility/CanvasBlueprint.ts +419 -419
  491. package/src/features/library/infrastructure/blueprints/utility/CookieConsentBlueprint.ts +195 -195
  492. package/src/features/library/infrastructure/blueprints/utility/NotFoundBlueprint.ts +86 -86
  493. package/src/features/library/infrastructure/blueprints/utility/SearchPaletteBlueprint.ts +192 -192
  494. package/src/features/library/infrastructure/blueprints/utility/StoreLocatorBlueprint.ts +221 -221
  495. package/src/features/library/infrastructure/blueprints/utility/TaskBoardBlueprint.ts +196 -196
  496. package/src/features/maturity/application/use-cases/ScoreFeature.ts +7 -7
  497. package/src/features/maturity/domain/MaturityReport.ts +70 -70
  498. package/src/features/maturity/domain/MaturityScorer.ts +1001 -985
  499. package/src/features/maturity/presentation/components/MaturityPanel.svelte +376 -372
  500. package/src/features/mcp-tools/application/tools/dryRunSimulate.ts +24 -24
  501. package/src/features/mcp-tools/application/tools/findStateReferences.ts +19 -19
  502. package/src/features/mcp-tools/application/tools/generateTypes.ts +0 -1
  503. package/src/features/mcp-tools/application/tools/getAction.ts +165 -165
  504. package/src/features/mcp-tools/application/tools/getFeature.ts +5 -5
  505. package/src/features/mcp-tools/application/tools/getFeatureIndex.ts +79 -79
  506. package/src/features/mcp-tools/application/tools/getNeighborhood.ts +319 -319
  507. package/src/features/mcp-tools/application/tools/getSurface.ts +86 -86
  508. package/src/features/mcp-tools/application/tools/index.ts +56 -56
  509. package/src/features/mcp-tools/application/tools/listActions.ts +49 -49
  510. package/src/features/mcp-tools/application/tools/listFeatures.ts +7 -7
  511. package/src/features/mcp-tools/application/tools/scoreFeature.ts +153 -153
  512. package/src/features/projects/application/ports/ProjectRepository.ts +14 -14
  513. package/src/features/projects/application/use-cases/AddFeatureToProject.ts +23 -23
  514. package/src/features/projects/application/use-cases/CreateProject.ts +16 -16
  515. package/src/features/projects/application/use-cases/FindProjectContainingFeature.ts +23 -23
  516. package/src/features/projects/application/use-cases/GetProjectAggregate.ts +131 -131
  517. package/src/features/projects/application/use-cases/ImportProjectBundle.ts +45 -0
  518. package/src/features/projects/application/use-cases/MoveFeatureInProject.ts +36 -36
  519. package/src/features/projects/application/use-cases/RemoveFeatureFromProject.ts +23 -23
  520. package/src/features/projects/domain/entities/Project.ts +12 -0
  521. package/src/features/projects/domain/services/InheritedFromProject.ts +130 -130
  522. package/src/features/projects/infrastructure/persistence/JsonFolderProjectRepository.ts +9 -0
  523. package/src/features/projects/presentation/components/ProjectCard.svelte +27 -8
  524. package/src/features/projects/presentation/components/ProjectEditor.svelte +17 -20
  525. package/src/features/projects/presentation/components/ProjectFeaturesPanel.svelte +433 -433
  526. package/src/features/projects/presentation/components/ProjectsIndex.svelte +54 -10
  527. package/src/features/projects/presentation/stores/projectContextStore.svelte.ts +170 -170
  528. package/src/features/projects/presentation/stores/projectFeaturesStore.svelte.ts +114 -114
  529. package/src/features/projects/presentation/stores/projectStore.svelte.ts +265 -266
  530. package/src/features/projects/presentation/stores/projectsStore.svelte.ts +134 -134
  531. package/src/features/simulator/application/use-cases/RunScenarios.ts +12 -0
  532. package/src/features/simulator/application/use-cases/SimulateAction.ts +47 -47
  533. package/src/features/simulator/domain/SimulationResult.ts +79 -79
  534. package/src/features/simulator/domain/SimulatorEngine.ts +43 -9
  535. package/src/features/simulator/domain/StateExplorer.ts +369 -0
  536. package/src/features/simulator/domain/SurfaceReachability.ts +130 -0
  537. package/src/features/simulator/presentation/components/ParameterInputs.svelte +277 -277
  538. package/src/features/simulator/presentation/components/PersonaPicker.svelte +52 -52
  539. package/src/features/simulator/presentation/components/ScenarioPicker.svelte +42 -45
  540. package/src/features/simulator/presentation/components/SidePanel.svelte +170 -170
  541. package/src/features/simulator/presentation/components/SimulationResultView.svelte +394 -394
  542. package/src/features/simulator/presentation/components/SimulatorPanel.svelte +293 -293
  543. package/src/features/simulator/presentation/components/StateInspector.svelte +101 -101
  544. package/src/features/simulator/presentation/stores/simulatorStore.svelte.ts +268 -268
  545. package/src/features/tutorial/presentation/components/CodeBlock.svelte +5 -1
  546. package/src/features/verification/application/ports/BehavioralIndexReader.ts +12 -0
  547. package/src/features/verification/application/use-cases/VerifyFeatures.ts +151 -0
  548. package/src/features/verification/domain/DriftReport.ts +37 -0
  549. package/src/features/verification/domain/EventCoherenceReport.ts +27 -0
  550. package/src/features/verification/domain/IndexedImplementation.ts +27 -0
  551. package/src/features/verification/domain/VerificationReport.ts +59 -0
  552. package/src/features/verification/domain/VerificationThresholds.ts +52 -0
  553. package/src/features/verification/domain/VerificationVerdict.ts +43 -0
  554. package/src/features/verification/domain/aggregateVerdict.ts +244 -0
  555. package/src/features/verification/domain/analyzeEventCoherence.ts +43 -0
  556. package/src/features/verification/domain/detectDrift.ts +166 -0
  557. package/src/features/verification/domain/verifiedCoverage.ts +37 -0
  558. package/src/features/verification/infrastructure/persistence/FileBehavioralIndexReader.ts +81 -0
  559. package/src/features/verification/infrastructure/persistence/StaticBehavioralIndexReader.ts +15 -0
  560. package/src/features/verification/presentation/components/VerifyPanel.svelte +74 -0
  561. package/src/features/verification/presentation/stores/verificationStore.svelte.ts +64 -0
  562. package/src/lib/server/openLocalDirectory.ts +40 -0
  563. package/src/lib/server/searchIndex.ts +161 -0
  564. package/src/lib/server/snapshotRepository.ts +37 -37
  565. package/src/lib/server/sync/YDocManager.ts +391 -391
  566. package/src/lib/server/sync/historyStore.ts +276 -276
  567. package/src/lib/server/sync/wsServer.ts +1 -1
  568. package/src/lib/sync/protocol.ts +147 -147
  569. package/src/lib/sync/roomId.ts +33 -33
  570. package/src/routes/+layout.svelte +104 -0
  571. package/src/routes/api/domains/[id]/+server.ts +7 -3
  572. package/src/routes/api/projects/[id]/+server.ts +14 -4
  573. package/src/routes/api/projects/import/+server.ts +16 -38
  574. package/src/routes/api/search-index/+server.ts +16 -0
  575. package/src/routes/api/snapshots/[id]/+server.ts +56 -44
  576. package/src/routes/api/snapshots/[id]/implementation-status/+server.ts +13 -13
  577. package/src/routes/api/snapshots/[id]/verify/+server.ts +37 -0
  578. package/src/routes/api/sync/reload/+server.ts +157 -157
  579. package/src/routes/api/system/hub-directory/+server.ts +24 -0
  580. package/src/routes/features/+page.svelte +484 -484
  581. package/src/routes/features/[id]/+page.svelte +55 -49
  582. package/src/routes/features/[id]/graph/+page.svelte +5 -0
  583. package/src/routes/features/[id]/verify/+page.svelte +89 -0
  584. package/src/routes/mcp/+page.svelte +16 -1
  585. package/src/routes/projects/[id]/+page.svelte +70 -70
  586. package/src/routes/tutorial/+page.svelte +3 -2
  587. package/src/shared/infrastructure/browserContainer.ts +61 -61
  588. package/src/shared/presentation/components/KebabMenu.svelte +95 -0
  589. package/src/shared/presentation/components/MenuItem.svelte +29 -0
  590. package/vite.config.ts +47 -47
  591. package/build/client/_app/immutable/assets/0.DSctqr5I.css +0 -1
  592. package/build/client/_app/immutable/assets/0.DSctqr5I.css.br +0 -0
  593. package/build/client/_app/immutable/assets/0.DSctqr5I.css.gz +0 -0
  594. package/build/client/_app/immutable/assets/11.nv0I59TU.css.gz +0 -0
  595. package/build/client/_app/immutable/chunks/9nXQ5qrY2.js +0 -1
  596. package/build/client/_app/immutable/chunks/9nXQ5qrY2.js.br +0 -0
  597. package/build/client/_app/immutable/chunks/9nXQ5qrY2.js.gz +0 -0
  598. package/build/client/_app/immutable/chunks/B439_FLv.js.br +0 -0
  599. package/build/client/_app/immutable/chunks/B439_FLv.js.gz +0 -0
  600. package/build/client/_app/immutable/chunks/BCEY79Dw.js +0 -1
  601. package/build/client/_app/immutable/chunks/BCEY79Dw.js.br +0 -2
  602. package/build/client/_app/immutable/chunks/BCEY79Dw.js.gz +0 -0
  603. package/build/client/_app/immutable/chunks/BOrLmFwJ.js.br +0 -0
  604. package/build/client/_app/immutable/chunks/BOrLmFwJ.js.gz +0 -0
  605. package/build/client/_app/immutable/chunks/BYIrIC5L.js +0 -1
  606. package/build/client/_app/immutable/chunks/BYIrIC5L.js.br +0 -0
  607. package/build/client/_app/immutable/chunks/BYIrIC5L.js.gz +0 -0
  608. package/build/client/_app/immutable/chunks/B_9TWPrx2.js.br +0 -0
  609. package/build/client/_app/immutable/chunks/B_9TWPrx2.js.gz +0 -0
  610. package/build/client/_app/immutable/chunks/BfMYiIUi.js.br +0 -0
  611. package/build/client/_app/immutable/chunks/BfMYiIUi.js.gz +0 -0
  612. package/build/client/_app/immutable/chunks/Bp2_Vghh.js +0 -1
  613. package/build/client/_app/immutable/chunks/Bp2_Vghh.js.br +0 -0
  614. package/build/client/_app/immutable/chunks/Bp2_Vghh.js.gz +0 -0
  615. package/build/client/_app/immutable/chunks/Bp8HpEPe2.js +0 -4
  616. package/build/client/_app/immutable/chunks/Bp8HpEPe2.js.br +0 -0
  617. package/build/client/_app/immutable/chunks/Bp8HpEPe2.js.gz +0 -0
  618. package/build/client/_app/immutable/chunks/BvOhVtZg.js +0 -1
  619. package/build/client/_app/immutable/chunks/BvOhVtZg.js.br +0 -1
  620. package/build/client/_app/immutable/chunks/BvOhVtZg.js.gz +0 -0
  621. package/build/client/_app/immutable/chunks/C8rRKIXT.js +0 -1
  622. package/build/client/_app/immutable/chunks/C8rRKIXT.js.br +0 -0
  623. package/build/client/_app/immutable/chunks/C8rRKIXT.js.gz +0 -0
  624. package/build/client/_app/immutable/chunks/CJjJLwzv2.js +0 -1
  625. package/build/client/_app/immutable/chunks/CJjJLwzv2.js.br +0 -0
  626. package/build/client/_app/immutable/chunks/CJjJLwzv2.js.gz +0 -0
  627. package/build/client/_app/immutable/chunks/CY3em1ma2.js +0 -1
  628. package/build/client/_app/immutable/chunks/CY3em1ma2.js.br +0 -0
  629. package/build/client/_app/immutable/chunks/CY3em1ma2.js.gz +0 -0
  630. package/build/client/_app/immutable/chunks/CgdRZPgI.js +0 -1
  631. package/build/client/_app/immutable/chunks/CgdRZPgI.js.br +0 -0
  632. package/build/client/_app/immutable/chunks/CgdRZPgI.js.gz +0 -0
  633. package/build/client/_app/immutable/chunks/CxyLMlpt2.js.br +0 -0
  634. package/build/client/_app/immutable/chunks/CxyLMlpt2.js.gz +0 -0
  635. package/build/client/_app/immutable/chunks/D6jhrpTg.js +0 -1
  636. package/build/client/_app/immutable/chunks/D6jhrpTg.js.br +0 -0
  637. package/build/client/_app/immutable/chunks/D6jhrpTg.js.gz +0 -0
  638. package/build/client/_app/immutable/chunks/D8YEa1po.js +0 -1
  639. package/build/client/_app/immutable/chunks/D8YEa1po.js.br +0 -0
  640. package/build/client/_app/immutable/chunks/D8YEa1po.js.gz +0 -0
  641. package/build/client/_app/immutable/chunks/D9dKmajw.js +0 -1
  642. package/build/client/_app/immutable/chunks/D9dKmajw.js.br +0 -0
  643. package/build/client/_app/immutable/chunks/D9dKmajw.js.gz +0 -0
  644. package/build/client/_app/immutable/chunks/DKgYpi6_.js +0 -1
  645. package/build/client/_app/immutable/chunks/DKgYpi6_.js.br +0 -0
  646. package/build/client/_app/immutable/chunks/DKgYpi6_.js.gz +0 -0
  647. package/build/client/_app/immutable/chunks/Dg0acPpT.js +0 -1
  648. package/build/client/_app/immutable/chunks/Dg0acPpT.js.br +0 -0
  649. package/build/client/_app/immutable/chunks/Dg0acPpT.js.gz +0 -0
  650. package/build/client/_app/immutable/chunks/DkxwAIfJ2.js.br +0 -0
  651. package/build/client/_app/immutable/chunks/DkxwAIfJ2.js.gz +0 -0
  652. package/build/client/_app/immutable/chunks/HKLi1Yz3.js +0 -1
  653. package/build/client/_app/immutable/chunks/HKLi1Yz3.js.br +0 -0
  654. package/build/client/_app/immutable/chunks/HKLi1Yz3.js.gz +0 -0
  655. package/build/client/_app/immutable/chunks/N7PXjlRH.js +0 -1
  656. package/build/client/_app/immutable/chunks/N7PXjlRH.js.br +0 -0
  657. package/build/client/_app/immutable/chunks/N7PXjlRH.js.gz +0 -0
  658. package/build/client/_app/immutable/chunks/OJscNS3T.js +0 -1
  659. package/build/client/_app/immutable/chunks/OJscNS3T.js.br +0 -0
  660. package/build/client/_app/immutable/chunks/OJscNS3T.js.gz +0 -0
  661. package/build/client/_app/immutable/chunks/U9p9CtKG2.js +0 -2
  662. package/build/client/_app/immutable/chunks/U9p9CtKG2.js.br +0 -0
  663. package/build/client/_app/immutable/chunks/U9p9CtKG2.js.gz +0 -0
  664. package/build/client/_app/immutable/chunks/hpWJNn0t2.js +0 -2
  665. package/build/client/_app/immutable/chunks/hpWJNn0t2.js.br +0 -0
  666. package/build/client/_app/immutable/chunks/hpWJNn0t2.js.gz +0 -0
  667. package/build/client/_app/immutable/entry/app.Cd4S3giu.js +0 -2
  668. package/build/client/_app/immutable/entry/app.Cd4S3giu.js.br +0 -0
  669. package/build/client/_app/immutable/entry/app.Cd4S3giu.js.gz +0 -0
  670. package/build/client/_app/immutable/entry/start.C3xXQVkq.js +0 -1
  671. package/build/client/_app/immutable/entry/start.C3xXQVkq.js.br +0 -0
  672. package/build/client/_app/immutable/entry/start.C3xXQVkq.js.gz +0 -0
  673. package/build/client/_app/immutable/nodes/0.dIOlQ-0y.js +0 -4
  674. package/build/client/_app/immutable/nodes/0.dIOlQ-0y.js.br +0 -0
  675. package/build/client/_app/immutable/nodes/0.dIOlQ-0y.js.gz +0 -0
  676. package/build/client/_app/immutable/nodes/1.Dyte3Ggf.js.br +0 -2
  677. package/build/client/_app/immutable/nodes/1.Dyte3Ggf.js.gz +0 -0
  678. package/build/client/_app/immutable/nodes/10.ivxAosDg.js +0 -2
  679. package/build/client/_app/immutable/nodes/10.ivxAosDg.js.br +0 -0
  680. package/build/client/_app/immutable/nodes/10.ivxAosDg.js.gz +0 -0
  681. package/build/client/_app/immutable/nodes/11.wvMfJKC2.js.br +0 -0
  682. package/build/client/_app/immutable/nodes/11.wvMfJKC2.js.gz +0 -0
  683. package/build/client/_app/immutable/nodes/2.CmPPom9Z.js.br +0 -0
  684. package/build/client/_app/immutable/nodes/2.CmPPom9Z.js.gz +0 -0
  685. package/build/client/_app/immutable/nodes/3.D-iCGCEx.js +0 -1
  686. package/build/client/_app/immutable/nodes/3.D-iCGCEx.js.br +0 -0
  687. package/build/client/_app/immutable/nodes/3.D-iCGCEx.js.gz +0 -0
  688. package/build/client/_app/immutable/nodes/4.DbfAvO8Z.js +0 -3
  689. package/build/client/_app/immutable/nodes/4.DbfAvO8Z.js.br +0 -0
  690. package/build/client/_app/immutable/nodes/4.DbfAvO8Z.js.gz +0 -0
  691. package/build/client/_app/immutable/nodes/5.CC5Q7lVw.js +0 -42
  692. package/build/client/_app/immutable/nodes/5.CC5Q7lVw.js.br +0 -0
  693. package/build/client/_app/immutable/nodes/5.CC5Q7lVw.js.gz +0 -0
  694. package/build/client/_app/immutable/nodes/6.CHIjlzpO.js +0 -1
  695. package/build/client/_app/immutable/nodes/6.CHIjlzpO.js.br +0 -0
  696. package/build/client/_app/immutable/nodes/6.CHIjlzpO.js.gz +0 -0
  697. package/build/client/_app/immutable/nodes/7.Ejs18ZUc.js +0 -5
  698. package/build/client/_app/immutable/nodes/7.Ejs18ZUc.js.br +0 -0
  699. package/build/client/_app/immutable/nodes/7.Ejs18ZUc.js.gz +0 -0
  700. package/build/client/_app/immutable/nodes/8.B-HweAc8.js.br +0 -0
  701. package/build/client/_app/immutable/nodes/8.B-HweAc8.js.gz +0 -0
  702. package/build/client/_app/immutable/nodes/9.CKPeM6tx.js +0 -5
  703. package/build/client/_app/immutable/nodes/9.CKPeM6tx.js.br +0 -0
  704. package/build/client/_app/immutable/nodes/9.CKPeM6tx.js.gz +0 -0
  705. package/build/server/chunks/0-Co8kcANG.js +0 -15
  706. package/build/server/chunks/0-Co8kcANG.js.map +0 -1
  707. package/build/server/chunks/1-BSUItTig.js +0 -9
  708. package/build/server/chunks/10-BygvxrZp.js +0 -9
  709. package/build/server/chunks/10-BygvxrZp.js.map +0 -1
  710. package/build/server/chunks/11-DRx0tRx2.js +0 -9
  711. package/build/server/chunks/11-DRx0tRx2.js.map +0 -1
  712. package/build/server/chunks/2-BQT3m1vc.js +0 -9
  713. package/build/server/chunks/2-BQT3m1vc.js.map +0 -1
  714. package/build/server/chunks/3-DPZ9BquJ.js +0 -16
  715. package/build/server/chunks/3-DPZ9BquJ.js.map +0 -1
  716. package/build/server/chunks/4-DHo47YX6.js +0 -16
  717. package/build/server/chunks/4-DHo47YX6.js.map +0 -1
  718. package/build/server/chunks/5-Cp9evBAG.js +0 -9
  719. package/build/server/chunks/5-Cp9evBAG.js.map +0 -1
  720. package/build/server/chunks/6-DiBq3bOV.js +0 -9
  721. package/build/server/chunks/6-DiBq3bOV.js.map +0 -1
  722. package/build/server/chunks/7-C4hmS0dG.js +0 -9
  723. package/build/server/chunks/8-CFFuDzBC.js +0 -9
  724. package/build/server/chunks/8-CFFuDzBC.js.map +0 -1
  725. package/build/server/chunks/9-nhhKZJrs.js +0 -9
  726. package/build/server/chunks/9-nhhKZJrs.js.map +0 -1
  727. package/build/server/chunks/BehaviorGraph-m5kYj5HH.js.map +0 -1
  728. package/build/server/chunks/FeatureTransforms-UWDHmWEg.js.map +0 -1
  729. package/build/server/chunks/FeatureValidator-B8qEjAUW.js.map +0 -1
  730. package/build/server/chunks/ManageTagsDialog-DBxA3tM2.js.map +0 -1
  731. package/build/server/chunks/ProjectsIndex-DUVJ3hyL.js.map +0 -1
  732. package/build/server/chunks/RenameTag-BuWLMl1m.js.map +0 -1
  733. package/build/server/chunks/TagDotStrip-B1XQ0m0Y.js.map +0 -1
  734. package/build/server/chunks/TagPalette-CtMNYCmu.js.map +0 -1
  735. package/build/server/chunks/TransitionCatalog-B8zHs-2E.js.map +0 -1
  736. package/build/server/chunks/_layout.svelte-CLTmk0xU.js.map +0 -1
  737. package/build/server/chunks/_page.svelte-B1nG3PKn.js +0 -29
  738. package/build/server/chunks/_page.svelte-B1s7jxaQ.js.map +0 -1
  739. package/build/server/chunks/_page.svelte-BW_nbAAH.js.map +0 -1
  740. package/build/server/chunks/_page.svelte-Caq7J0jU.js.map +0 -1
  741. package/build/server/chunks/_page.svelte-Cham-dsM.js +0 -29
  742. package/build/server/chunks/_page.svelte-Dhwjwph_.js.map +0 -1
  743. package/build/server/chunks/_page.svelte-NVT2dzpG.js.map +0 -1
  744. package/build/server/chunks/_page.svelte-Z_kK2lHY.js.map +0 -1
  745. package/build/server/chunks/_server.ts-0uNTZKwF.js.map +0 -1
  746. package/build/server/chunks/_server.ts-DcZPhyhK.js +0 -59
  747. package/build/server/chunks/_server.ts-DcZPhyhK.js.map +0 -1
  748. package/build/server/chunks/_server.ts-Dy5zQHe2.js.map +0 -1
  749. package/build/server/chunks/_server.ts-YnfXkeMJ.js.map +0 -1
  750. package/build/server/chunks/_server.ts-vcaqdwxS.js.map +0 -1
  751. package/build/server/chunks/browserContainer-CNX7ANld.js.map +0 -1
  752. package/build/server/chunks/builderModeStore.svelte-BpRIU_zP.js.map +0 -1
  753. package/build/server/chunks/featureStore.svelte-DIYgPBVm.js.map +0 -1
  754. package/build/server/chunks/featuresStore.svelte-DR1gYZyu.js +0 -98
  755. package/build/server/chunks/featuresStore.svelte-DR1gYZyu.js.map +0 -1
  756. package/build/server/chunks/identityStore.svelte-IIvW2_3b.js +0 -59
  757. package/build/server/chunks/identityStore.svelte-IIvW2_3b.js.map +0 -1
  758. package/build/server/chunks/projectFeaturesStore.svelte-2o-72_vr.js.map +0 -1
  759. package/build/server/chunks/projectsStore.svelte-QDz5PchX.js.map +0 -1
  760. package/build/server/chunks/reconcile-B5xqb6-s.js.map +0 -1
  761. package/build/server/chunks/snapshotRepository-BPXCjX92.js.map +0 -1
  762. package/build/server/chunks/syncBridge-BwXzPdjJ.js.map +0 -1
  763. package/src/features/implementation-queue/presentation/components/QueuePanel.svelte +0 -204
  764. package/src/features/implementation-queue/presentation/stores/queueStore.svelte.ts +0 -143
  765. /package/build/client/_app/immutable/assets/{11.nv0I59TU.css → 12.nv0I59TU.css} +0 -0
  766. /package/build/client/_app/immutable/assets/{11.nv0I59TU.css.br → 12.nv0I59TU.css.br} +0 -0
@@ -0,0 +1 @@
1
+ import{A as e,E as t,G as n,I as r,L as i,M as a,N as o,Q as s,R as c,W as l,X as u,Y as d,Z as f,_ as p,a as m,c as h,ct as g,et as _,j as v,k as y,l as b,lt as x,mt as S,p as C,pt as w,rt as T,s as E,tt as D,u as O,v as k,z as A}from"./BPl9BITm.js";import"./xihTtKlq.js";import{H as j,K as M,R as N,q as P}from"./D64sGJRN.js";import{n as F,t as I}from"./CwzIdrQR.js";import{n as L}from"./oVMDLirx.js";var R=o(`<button type="button"></button>`),z=o(`<div class="absolute right-0 z-30 mt-2 w-56 rounded-lg border border-hairline bg-white p-3 shadow-lg" role="dialog" aria-label="Color picker"><p class="mb-2 text-[10px] font-semibold uppercase tracking-wider text-slate-500">Presets</p> <div class="grid grid-cols-5 gap-2"></div> <div class="mt-3 border-t border-hairline pt-3"><label class="flex items-center justify-between gap-2 text-xs text-slate-700"><span class="font-medium">Custom</span> <input type="color" class="h-7 w-12 cursor-pointer rounded border border-slate-300 bg-white p-0.5"/></label></div> <div class="mt-2"><button type="button" class="flex w-full items-center gap-2 rounded-md px-2 py-1.5 text-left text-xs font-medium text-slate-600 transition hover:bg-slate-50 hover:text-red-700 disabled:cursor-default disabled:opacity-40 disabled:hover:bg-transparent disabled:hover:text-slate-600"><!> <span>No color</span></button></div></div>`),B=o(`<div class="relative inline-block"><button type="button" class="flex size-6 cursor-pointer items-center justify-center overflow-hidden rounded-full ring-1 ring-inset ring-slate-300 transition hover:ring-slate-500" aria-haspopup="dialog" title="Pick a color"><!></button> <!></div>`);function V(e,r){x(r,!0);let a=m(r,`label`,3,`tag`),o=D(!1),c=D(null),d=D(null);function f(){_(o,!A(o))}function h(){_(o,!1)}n(()=>{if(!A(o))return;let e=e=>{let t=e.target;A(c)?.contains(t)||A(d)?.contains(t)||h()},t=e=>{e.key===`Escape`&&h()};return window.addEventListener(`pointerdown`,e,!0),window.addEventListener(`keydown`,t),()=>{window.removeEventListener(`pointerdown`,e,!0),window.removeEventListener(`keydown`,t)}});function j(e){r.onChange(e),h()}function M(e){let t=e.target.value;r.onChange(N(t))}function P(e){let t=e.target.value;r.onChange(N(t)),h()}var I=B(),V=u(I),H=u(V),U=e=>{L(e,{color:null,size:4})};y(H,e=>{r.value||e(U)}),S(V),E(V,e=>_(d,e),()=>A(d));var W=s(V,2),G=e=>{var n=z(),o=s(u(n),2);t(o,21,()=>F,e=>e.color,(e,t)=>{let n=T(()=>r.value===A(t).color);var o=R();let s;l(()=>{s=k(o,1,`flex size-7 items-center justify-center rounded-full ring-offset-2 transition hover:scale-110`,null,s,{"ring-2":A(n),"ring-slate-900":A(n)}),p(o,`background-color: ${A(t).color??``};`),O(o,`title`,A(t).name),O(o,`aria-label`,`Set ${a()} color to ${A(t).name}`)}),i(`click`,o,()=>j(A(t).color)),v(e,o)}),S(o);var d=s(o,2),f=u(d),m=s(u(f),2);b(m),S(f),S(d);var h=s(d,2),g=u(h);L(u(g),{color:null,size:4}),w(2),S(g),S(h),S(n),E(n,e=>_(c,e),()=>A(c)),l(()=>{C(m,r.value??`#94a3b8`),O(m,`aria-label`,`Custom color for ${a()}`),g.disabled=r.value===null}),i(`input`,m,M),i(`change`,m,P),i(`click`,g,()=>j(null)),v(e,n)};y(W,e=>{A(o)&&e(G)}),S(I),l(()=>{p(V,r.value?`background-color: ${r.value};`:`background-color: white;`),O(V,`aria-expanded`,A(o)),O(V,`aria-label`,`Pick a color for ${a()}`)}),i(`click`,V,f),v(e,I),g()}r([`click`,`input`,`change`]);var H=o(`<p class="text-sm text-slate-500">No tags yet. Add a tag to a project or feature to start grouping.</p>`),U=o(`<li class="flex items-center justify-between gap-3 rounded-md px-2 py-1 text-sm hover:bg-slate-50"><span class="truncate text-slate-700"> </span> <button type="button" class="rounded px-2 py-1 text-xs font-medium text-slate-500 hover:bg-slate-100 hover:text-slate-900">Rename</button></li>`),W=o(`<li class="space-y-2"><div class="flex items-center justify-between gap-3"><div class="flex min-w-0 items-center gap-2"><!> <span class="truncate text-sm font-semibold text-slate-900"> </span> <span class="text-xs text-slate-500"> </span></div> <!></div> <ul class="space-y-1 pl-5"></ul></li>`),G=o(`<ul class="space-y-5"></ul>`),K=o(`<p class="text-sm text-red-700"> </p>`),q=o(`<div class="fixed inset-0 z-50 flex items-start justify-center bg-slate-950/40 px-4 py-24 backdrop-blur-sm" role="presentation"><div class="w-full max-w-md overflow-hidden rounded-xl border border-hairline bg-white shadow-xl" role="dialog" aria-modal="true" aria-labelledby="rename-tag-title"><header class="border-b border-hairline px-5 py-4"><h3 id="rename-tag-title" class="text-base font-semibold text-slate-950"> </h3> <p class="mt-1 text-xs text-slate-500">Updates every project and feature that uses this tag.</p></header> <div class="space-y-3 px-5 py-4"><label class="block text-sm"><span class="mb-1 block text-xs font-medium uppercase tracking-wide text-slate-500">Type</span> <input type="text" class="h-9 w-full rounded-md border border-slate-300 px-3 text-sm outline-none focus:border-brand-700"/></label> <label class="block text-sm"><span class="mb-1 block text-xs font-medium uppercase tracking-wide text-slate-500">Value</span> <input type="text" class="h-9 w-full rounded-md border border-slate-300 px-3 text-sm outline-none focus:border-brand-700"/></label> <!></div> <footer class="flex items-center justify-end gap-2 border-t border-hairline bg-slate-50 px-5 py-3"><button type="button" class="rounded-md px-3 py-1.5 text-sm font-medium text-slate-700 hover:bg-slate-100 disabled:opacity-40">Cancel</button> <button type="button" class="rounded-md bg-slate-900 px-3 py-1.5 text-sm font-medium text-white hover:bg-slate-800 disabled:opacity-40"> </button></footer></div></div>`),J=o(`<div class="fixed inset-0 z-40 flex items-start justify-center bg-slate-950/30 px-4 py-16 backdrop-blur-sm" role="presentation"><div class="w-full max-w-2xl overflow-hidden rounded-xl border border-hairline bg-white shadow-xl" role="dialog" aria-modal="true" aria-labelledby="manage-tags-title"><header class="flex items-start justify-between gap-4 border-b border-hairline px-5 py-4"><div><h2 id="manage-tags-title" class="text-base font-semibold text-slate-950">Manage tags</h2> <p class="mt-1 text-sm text-slate-500">Set a color per tag type, or rename a tag everywhere it appears.</p></div> <button type="button" class="rounded-md px-2 py-1 text-sm text-slate-500 hover:bg-slate-100 hover:text-slate-900" aria-label="Close">x</button></header> <div class="max-h-[60vh] overflow-y-auto px-5 py-4"><!></div> <footer class="flex items-center justify-end gap-2 border-t border-hairline bg-slate-50 px-5 py-3"><button type="button" class="rounded-md px-3 py-1.5 text-sm font-medium text-slate-700 hover:bg-slate-100">Done</button></footer></div></div> <!>`,1);function Y(n,r){x(r,!0);let o=D(null),p=T(()=>{let e=new Map;for(let t of r.tags){let n=t.type.trim().toLowerCase();if(!n)continue;let r=e.get(n);r?r.tags.some(e=>M(e)===M(t))||r.tags.push(t):e.set(n,{tags:[t]})}return[...e.entries()].sort(([e],[t])=>e.localeCompare(t)).map(([e,t])=>({key:e,display:j(e),tags:[...t.tags].sort((e,t)=>e.value.localeCompare(t.value))}))});async function m(e,t){try{await I.setTypeColor(e,t)}catch(e){console.error(`Failed to set tag color`,e)}}function C(e){_(o,{tag:e,type:j(e.type),value:j(e.value),busy:!1,error:null},!0)}function E(){_(o,null)}async function k(){let e=A(o);if(!e)return;let t=e.tag,n={type:e.type.trim(),value:e.value.trim()};if(!n.type||!n.value){_(o,{...e,error:`Type and value are required`},!0);return}if(M(t)===M(n)){_(o,null);return}_(o,{...e,busy:!0,error:null},!0);try{let e=await I.renameTag(t,n);_(o,null),await r.onRenamed?.({from:t,to:n,projectsUpdated:e.projectsUpdated,featuresUpdated:e.featuresUpdated})}catch(t){_(o,{...e,busy:!1,error:t.message},!0)}}function N(e){e.key===`Escape`&&(A(o)?E():r.onClose())}var F=a();c(`keydown`,d,N);var R=f(F),z=n=>{var a=J(),c=f(a),d=u(c),g=u(d),_=s(u(g),2);S(g);var x=s(g,2),D=u(x),N=e=>{v(e,H())},F=n=>{var r=G();t(r,21,()=>A(p),e=>e.key,(n,r)=>{let a=T(()=>I.colorFor(A(r).key));var o=W(),c=u(o),d=u(c),f=u(d);L(f,{get color(){return A(a)},size:2.5});var p=s(f,2),h=u(p,!0);S(p);var g=s(p,2),_=u(g);S(g),S(d),V(s(d,2),{get value(){return A(a)},onChange:e=>m(A(r).key,e),get label(){return A(r).display}}),S(c);var y=s(c,2);t(y,21,()=>A(r).tags,e=>M(e),(t,n)=>{var r=U(),a=u(r),o=u(a,!0);S(a);var c=s(a,2);S(r),l((t,n)=>{O(a,`title`,t),e(o,n)},[()=>P(A(n)),()=>j(A(n).value)]),i(`click`,c,()=>C(A(n))),v(t,r)}),S(y),S(o),l(()=>{e(h,A(r).display),e(_,`(${A(r).tags.length??``} value${A(r).tags.length===1?``:`s`})`)}),v(n,o)}),S(r),v(n,r)};y(D,e=>{A(p).length===0?e(N):e(F,-1)}),S(x);var R=s(x,2),z=u(R);S(R),S(d),S(c);var B=s(c,2),Y=t=>{var n=q(),r=u(n),a=u(r),c=u(a),d=u(c);S(c),w(2),S(a);var f=s(a,2),p=u(f),m=s(u(p),2);b(m),S(p);var g=s(p,2),_=s(u(g),2);b(_),S(g);var x=s(g,2),C=t=>{var n=K(),r=u(n,!0);S(n),l(()=>e(r,A(o).error)),v(t,n)};y(x,e=>{A(o).error&&e(C)}),S(f);var T=s(f,2),D=u(T),O=s(D,2),j=u(O,!0);S(O),S(T),S(r),S(n),l(t=>{e(d,`Rename "${t??``}"`),m.disabled=A(o).busy,_.disabled=A(o).busy,D.disabled=A(o).busy,O.disabled=A(o).busy,e(j,A(o).busy?`Renaming...`:`Rename everywhere`)},[()=>P(A(o).tag)]),i(`click`,n,e=>{e.currentTarget===e.target&&!A(o)?.busy&&E()}),h(m,()=>A(o).type,e=>A(o).type=e),h(_,()=>A(o).value,e=>A(o).value=e),i(`click`,D,E),i(`click`,O,k),v(t,n)};y(B,e=>{A(o)&&e(Y)}),i(`click`,c,e=>{e.currentTarget===e.target&&r.onClose()}),i(`click`,_,function(...e){r.onClose?.apply(this,e)}),i(`click`,z,function(...e){r.onClose?.apply(this,e)}),v(n,a)};y(R,e=>{r.open&&e(z)}),v(n,F),g()}r([`click`]);export{Y as t};
@@ -0,0 +1 @@
1
+ import"./ByaoVvNB.js";
@@ -0,0 +1,2 @@
1
+
2
+ �import"./ByaoVvNB.js";
@@ -0,0 +1,2 @@
1
+ import{$ as e,dt as t,et as n,rt as r,tt as i,z as a}from"./BPl9BITm.js";import{d as o,t as s}from"./D64sGJRN.js";import{t as c}from"./Cl7Z3e6-.js";import{n as l,r as u,t as d}from"./Bcyn5YUg.js";var f=new class{#e=i(!0);get loading(){return a(this.#e)}set loading(e){n(this.#e,e,!0)}#t=i(null);get feature(){return a(this.#t)}set feature(e){n(this.#t,e,!0)}#n=i(null);get error(){return a(this.#n)}set error(e){n(this.#n,e,!0)}#r=i(null);get saveError(){return a(this.#r)}set saveError(e){n(this.#r,e,!0)}#i=i(!1);get saving(){return a(this.#i)}set saving(e){n(this.#i,e,!0)}#a=i(e([]));get historyEntries(){return a(this.#a)}set historyEntries(e){n(this.#a,e,!0)}#o=i(-1);get historyCursor(){return a(this.#o)}set historyCursor(e){n(this.#o,e,!0)}#s=r(()=>this.historyCursor>0);get canUndo(){return a(this.#s)}set canUndo(e){n(this.#s,e)}#c=r(()=>this.historyCursor>=0&&this.historyCursor<this.historyEntries.length-1);get canRedo(){return a(this.#c)}set canRedo(e){n(this.#c,e)}currentId=null;client=null;clientUnsubscribe=null;historyUnsubscribe=null;async load(e){try{this.loading=!0,this.error=null,this.currentId=e;let t=await(await s()).useCases.getFeature(e);this.feature=t,this.subscribeRoom(e)}catch(e){this.error=e.message}finally{this.loading=!1}}async mutate(e){if(!this.feature||!this.currentId)return;let n=t(this.feature),r=e(n),i=r===n?n:d(r);if(this.applyNext(i),this.client){this.saving=!0,this.saveError=null;try{this.client.setSnapshot(i),c(`feature.saved`,{id:String(i.id),name:i.name})}catch(e){e instanceof o&&e.errors.length>0?this.saveError=`${e.message}\n• ${e.errors.join(`
2
+ • `)}`:this.saveError=e.message}finally{this.saving=!1}}}dismissSaveError(){this.saveError=null}reset(){this.clientUnsubscribe&&=(this.clientUnsubscribe(),null),this.historyUnsubscribe&&=(this.historyUnsubscribe(),null),this.client=null,this.currentId=null,this.feature=null,this.error=null,this.saveError=null,this.loading=!0,this.saving=!1,this.historyEntries=[],this.historyCursor=-1}undo(){this.client?.undo()}redo(){this.client?.redo()}jumpToHistory(e){this.client?.jumpTo(e)}clearHistory(){this.client?.clearHistory()}subscribeRoom(e){this.clientUnsubscribe&&=(this.clientUnsubscribe(),null),this.historyUnsubscribe&&=(this.historyUnsubscribe(),null);let t=u(`feature`,e);this.client=t,this.clientUnsubscribe=t.observe((t,n)=>{n!==`local`&&t&&this.currentId===e&&this.applyNext(t)}),this.historyEntries=t.history.entries,this.historyCursor=t.history.cursor,this.historyUnsubscribe=t.observeHistory(t=>{this.currentId===e&&(this.historyEntries=t.entries,this.historyCursor=t.cursor)})}applyNext(e){if(!this.feature){this.feature=e;return}l(this.feature,e)}};export{f as t};
@@ -0,0 +1 @@
1
+ import{M as e,T as t,w as n}from"./D64sGJRN.js";var r=(t,n)=>{let r=n;for(let n of t.stateOverrides)r=e(r,n.path,n.value);return r},i=(e,t,n)=>{let r={},i=new Set(t.parameters.map(e=>e.name));for(let t of e.parameterOverrides)i.has(t.parameterName)&&(r[t.parameterName]=t.value);return{...r,...n}},a=(t,n)=>{let r=n;for(let n of t.stateOverrides)r=e(r,n.path,n.value);return r},o=(e,t,n)=>{let r={},i=new Set(t.parameters.map(e=>e.name));for(let t of e.parameterOverrides)i.has(t.parameterName)&&(r[t.parameterName]=t.value);return{...r,...n}},s=e=>({path:e,stateDefinitions:0,parameterBindings:0,parameterResources:0,actionRequiredStates:0,ruleConditions:0,setStateEffects:0,invariantConditions:0,personaStateOverrides:0,otherDataFields:0}),c=(e,t)=>e===t,l=(e,r)=>{if(!n(e))return 0;let i=e;switch(i.kind){case`literal`:return 0;case`param`:return 0;case`state`:return+(String(i.path)===r);case`neg`:case`not`:case`sum`:case`count`:case`sum_pluck`:return l(i.operand,r);case`count_where`:return l(i.operand,r)+l(i.equals,r);case`switch`:{let e=0;for(let n of i.cases){for(let i of t(n.when))c(String(i.left),r)&&(e+=1),e+=l(i.right,r);e+=l(n.then,r)}return e+=l(i.default,r),e}case`add`:case`sub`:case`mul`:case`div`:case`mod`:case`min`:case`max`:return l(i.left,r)+l(i.right,r)}},u=(e,t)=>{switch(e.type){case`set_state`:return+!!c(String(e.path),t)+l(e.value,t);case`append_to_list`:return+!!c(String(e.path),t)+l(e.item,t);case`remove_from_list`:return+!!c(String(e.path),t)+(e.where?l(e.where.equals,t):0)+l(e.value,t);case`update_list_item`:return+!!c(String(e.path),t)+l(e.where.equals,t)+l(e.value,t);case`advance_time`:return l(e.by,t);default:return 0}},d=(e,n)=>{let r=0;for(let i of t(e))c(String(i.left),n)&&(r+=1),r+=l(i.right,n);return r},f=(e,t)=>{let n=String(t),r={...s(t)};for(let t of e.surfaces){for(let e of t.stateDefinitions)c(String(e.path),n)&&(r.stateDefinitions+=1);for(let e of t.actions){for(let t of e.requiredStates)c(String(t),n)&&(r.actionRequiredStates+=1);for(let t of e.parameters)c(t.bindToStatePath?String(t.bindToStatePath):void 0,n)&&(r.parameterBindings+=1);for(let t of e.rules)r.ruleConditions+=d(t.condition,n),r.setStateEffects+=u(t.effect,n);for(let t of e.effects)r.setStateEffects+=u(t,n);for(let t of e.onBlockedEffects??[])r.setStateEffects+=u(t,n);for(let t of e.invariants)r.invariantConditions+=d(t.condition,n)}for(let e of t.rules)r.ruleConditions+=d(e.condition,n),r.setStateEffects+=u(e.effect,n);for(let e of t.invariants)r.invariantConditions+=d(e.condition,n)}for(let t of e.personas)for(let e of t.stateOverrides)c(String(e.path),n)&&(r.personaStateOverrides+=1);for(let t of e.entities)for(let e of t.fields)c(e.path?String(e.path):void 0,n)&&(r.otherDataFields+=1);return r},p=e=>e.stateDefinitions+e.parameterBindings+e.parameterResources+e.actionRequiredStates+e.ruleConditions+e.setStateEffects+e.invariantConditions+e.personaStateOverrides+e.otherDataFields,m=e=>{let t=[],n=(e,n)=>{e>0&&t.push(`${e} ${n}`)};return n(e.stateDefinitions,e.stateDefinitions===1?`state definition`:`state definitions`),n(e.ruleConditions,e.ruleConditions===1?`rule condition`:`rule conditions`),n(e.setStateEffects,e.setStateEffects===1?`set_state effect`:`set_state effects`),n(e.parameterBindings,e.parameterBindings===1?`parameter binding`:`parameter bindings`),n(e.actionRequiredStates,e.actionRequiredStates===1?`action requirement`:`action requirements`),n(e.invariantConditions,e.invariantConditions===1?`invariant`:`invariants`),n(e.personaStateOverrides,e.personaStateOverrides===1?`persona override`:`persona overrides`),n(e.otherDataFields,e.otherDataFields===1?`data field`:`data fields`),t.join(`, `)};export{a,o as i,m as n,i as o,p as r,r as s,f as t};
@@ -1 +1 @@
1
- import"./BPl9BITm.js";import{a as e}from"./OJscNS3T.js";var t=()=>{let t=e;return{page:{subscribe:t.page.subscribe},navigating:{subscribe:t.navigating.subscribe},updated:t.updated}},n={subscribe(e){return t().page.subscribe(e)}};export{n as t};
1
+ import"./BPl9BITm.js";import{a as e}from"./ByaoVvNB.js";var t=()=>{let t=e;return{page:{subscribe:t.page.subscribe},navigating:{subscribe:t.navigating.subscribe},updated:t.updated}},n={subscribe(e){return t().page.subscribe(e)}};export{n as t};
@@ -0,0 +1 @@
1
+ import{et as e,tt as t,z as n}from"./BPl9BITm.js";import{B as r}from"./D64sGJRN.js";import{r as i}from"./Bcyn5YUg.js";var a=new class{#e=t(!1);get loading(){return n(this.#e)}set loading(t){e(this.#e,t,!0)}#t=t(!1);get refreshing(){return n(this.#t)}set refreshing(t){e(this.#t,t,!0)}#n=t(null);get status(){return n(this.#n)}set status(t){e(this.#n,t,!0)}#r=t(null);get error(){return n(this.#r)}set error(t){e(this.#r,t,!0)}#i=t(null);get lastFetchedAt(){return n(this.#i)}set lastFetchedAt(t){e(this.#i,t,!0)}#a=t(null);get lastUpdateSignalAt(){return n(this.#a)}set lastUpdateSignalAt(t){e(this.#a,t,!0)}currentId=null;client=null;clientUnsubscribe=null;async load(e){this.currentId=e,this.error=null,this.loading=!0;try{await this.fetchOnce(e),this.subscribeRoom(e)}finally{this.loading=!1}}async refresh(){if(!(!this.currentId||this.refreshing)){this.refreshing=!0,this.error=null;try{await this.fetchOnce(this.currentId)}finally{this.refreshing=!1}}}reset(){this.clientUnsubscribe&&=(this.clientUnsubscribe(),null),this.client=null,this.currentId=null,this.status=null,this.error=null,this.loading=!1,this.refreshing=!1,this.lastFetchedAt=null,this.lastUpdateSignalAt=null}async fetchOnce(e){try{let t=await r(`/api/snapshots/${e}/implementation-status`);if(!t.ok){this.status=null;return}let n=await t.json();this.status=n??null,this.lastFetchedAt=new Date().toISOString()}catch(e){this.error=e.message}}subscribeRoom(e){this.clientUnsubscribe&&=(this.clientUnsubscribe(),null);let t=i(`implementation-status`,e);this.client=t,this.clientUnsubscribe=t.observe((t,n)=>{this.currentId===e&&n!==`local`&&(this.lastUpdateSignalAt=new Date().toISOString(),this.status=t,this.lastFetchedAt=this.lastUpdateSignalAt)})}};export{a as t};
@@ -0,0 +1 @@
1
+ import{u as e}from"./ByaoVvNB.js";function t(t,n){throw new e(t,n.toString())}export{t};
@@ -0,0 +1 @@
1
+ �+�import{u as e}from"./ByaoVvNB.js";function t(t,n){throw new e(t,n.toString())}export{t};
@@ -0,0 +1 @@
1
+ import{st as e,ut as t}from"./BPl9BITm.js";var n=Symbol(`feature-queue-context`),r={siblings:[],isInProject:!1,project:null,isActionQueued:()=>!1,isSurfaceQueued:()=>!1,enqueueAction:async()=>!1,enqueueSurface:async()=>!1,dequeueByItemId:async()=>{},findQueueItemIdForAction:()=>null,findQueueItemIdForSurface:()=>null};function i(e){t(n,e)}function a(){return e(n)??r}export{a as n,i as t};
@@ -1 +1 @@
1
- import{f as e}from"./Bp2_Vghh.js";var t=e=>e.length===0?e:e.charAt(0).toUpperCase()+e.slice(1),n=e=>{let t=e.split(`.`);return t.length<=1?e:t[t.length-1]},r=r=>{let i=new Map;for(let e of r.surfaces)for(let t of e.stateDefinitions){let r=t.path.split(`.`)[0]??t.path,a=i.get(r);a||(a={fields:new Map,surfaces:new Set},i.set(r,a)),a.fields.has(t.path)||a.fields.set(t.path,{name:n(t.path),path:t.path,type:t.type,source:`deduced`}),a.surfaces.add(e.name)}let a=new Map;for(let e of r.entities)a.set(e.namespace,e);let o=new Set([...i.keys(),...a.keys()]),s=[];for(let n of o){let r=a.get(n),o=i.get(n),c=new Map;if(o)for(let[e,t]of o.fields)c.set(e,t);if(r)for(let e of r.fields)e.path&&c.set(String(e.path),{id:e.id,name:e.name,path:e.path,type:e.type,source:`declared`,fields:e.fields,items:e.items});let l=Array.from(c.values()).sort((e,t)=>e.path.localeCompare(t.path));s.push({id:r?.id,name:t(e(n)),namespace:n,description:r?.description,resourceId:r?.resourceId,fields:l,isMaterialized:r!==void 0,usedBySurfaces:o?Array.from(o.surfaces).sort():[]})}return s.sort((e,t)=>e.namespace.localeCompare(t.namespace)),s},i=(e,t)=>e.fields.map(e=>({id:e.id??t(),name:e.name,path:e.path,type:e.type,fields:e.fields,items:e.items})),a=e=>{let t=e.split(`.`)[0];return t&&t.length>0?t:`_root`},o=e=>{let t=new Map,n=(e,n)=>{let r=t.get(e);r||(r=[],t.set(e,r)),r.push(n)};for(let t of e.surfaces){for(let e of t.actions){for(let r of e.emittedEvents)n(String(r),{surfaceId:t.id,surfaceName:t.name,actionId:e.id,actionName:e.name,origin:`action_default`});for(let r of e.effects)r.type===`emit_event`&&n(String(r.event),{surfaceId:t.id,surfaceName:t.name,actionId:e.id,actionName:e.name,origin:`action_effect`,description:r.description});for(let r of e.rules)r.effect.type===`emit_event`&&n(String(r.effect.event),{surfaceId:t.id,surfaceName:t.name,actionId:e.id,actionName:e.name,origin:`action_rule_effect`,description:r.description})}for(let e of t.rules)e.effect.type===`emit_event`&&n(String(e.effect.event),{surfaceId:t.id,surfaceName:t.name,origin:`surface_rule_effect`,description:e.description})}let r=[];for(let[e,n]of t)r.push({name:e,group:a(e),emissions:n});return r.sort((e,t)=>e.group===t.group?String(e.name).localeCompare(String(t.name)):e.group.localeCompare(t.group)),r},s=e=>{let t=new Map;for(let n of e){let e=t.get(n.group);e||(e=[],t.set(n.group,e)),e.push(n)}return Array.from(t.entries()).map(([e,t])=>({group:e,events:t})).sort((e,t)=>e.group.localeCompare(t.group))},c=e=>{let t=new Map;e.surfaces.forEach((e,n)=>{t.set(e.id,{name:e.name,index:n})});let n=new Map,r=e=>e!==void 0&&t.has(e),i=(e,i,a)=>{if(!r(i))return;let o=`${e}__${i}`,s=n.get(o);s||(s={sources:[],fromIndex:t.get(e)?.index??0},n.set(o,s)),s.sources.push(a)};for(let t of e.surfaces){let e=t.id,n=t.name;for(let r of t.transitions)i(e,r.target,{surfaceId:e,surfaceName:n,origin:`declared`,description:r.label??r.description});for(let r of t.actions){for(let t of r.effects)t.type===`transition_surface`&&i(e,t.target,{surfaceId:e,surfaceName:n,actionId:r.id,actionName:r.name,origin:`action_effect`,description:t.description});for(let t of r.rules)t.effect.type===`transition_surface`&&i(e,t.effect.target,{surfaceId:e,surfaceName:n,actionId:r.id,actionName:r.name,origin:`action_rule_effect`,description:t.description})}for(let r of t.rules)r.effect.type===`transition_surface`&&i(e,r.effect.target,{surfaceId:e,surfaceName:n,origin:`surface_rule_effect`,description:r.description})}let a=[];for(let[e,r]of n){let[n,i]=e.split(`__`),o=t.get(n),s=t.get(i);!o||!s||a.push({fromSurfaceId:n,fromSurfaceName:o.name,toSurfaceId:i,toSurfaceName:s.name,sources:r.sources})}return a.sort((e,n)=>{let r=t.get(e.fromSurfaceId)?.index??0,i=t.get(n.fromSurfaceId)?.index??0;return r===i?(t.get(e.toSurfaceId)?.index??0)-(t.get(n.toSurfaceId)?.index??0):r-i}),a},l=e=>{let t=new Map;for(let n of e){let e=t.get(n.fromSurfaceId);e||(e={fromSurfaceId:n.fromSurfaceId,fromSurfaceName:n.fromSurfaceName,transitions:[]},t.set(n.fromSurfaceId,e)),e.transitions.push(n)}return Array.from(t.values())};export{r as a,s as i,l as n,i as o,o as r,c as t};
1
+ import{J as e}from"./D64sGJRN.js";var t=e=>e.length===0?e:e.charAt(0).toUpperCase()+e.slice(1),n=e=>{let t=e.split(`.`);return t.length<=1?e:t[t.length-1]},r=r=>{let i=new Map;for(let e of r.surfaces)for(let t of e.stateDefinitions){let r=t.path.split(`.`)[0]??t.path,a=i.get(r);a||(a={fields:new Map,surfaces:new Set},i.set(r,a)),a.fields.has(t.path)||a.fields.set(t.path,{name:n(t.path),path:t.path,type:t.type,source:`deduced`}),a.surfaces.add(e.name)}let a=new Map;for(let e of r.entities)a.set(e.namespace,e);let o=new Set([...i.keys(),...a.keys()]),s=[];for(let n of o){let r=a.get(n),o=i.get(n),c=new Map;if(o)for(let[e,t]of o.fields)c.set(e,t);if(r)for(let e of r.fields)e.path&&c.set(String(e.path),{id:e.id,name:e.name,path:e.path,type:e.type,source:`declared`,fields:e.fields,items:e.items});let l=Array.from(c.values()).sort((e,t)=>e.path.localeCompare(t.path));s.push({id:r?.id,name:t(e(n)),namespace:n,description:r?.description,resourceId:r?.resourceId,fields:l,isMaterialized:r!==void 0,usedBySurfaces:o?Array.from(o.surfaces).sort():[]})}return s.sort((e,t)=>e.namespace.localeCompare(t.namespace)),s},i=(e,t)=>e.fields.map(e=>({id:e.id??t(),name:e.name,path:e.path,type:e.type,fields:e.fields,items:e.items})),a=e=>{let t=e.split(`.`)[0];return t&&t.length>0?t:`_root`},o=e=>{let t=new Map,n=(e,n)=>{let r=t.get(e);r||(r=[],t.set(e,r)),r.push(n)};for(let t of e.surfaces){for(let e of t.actions){for(let r of e.emittedEvents)n(String(r),{surfaceId:t.id,surfaceName:t.name,actionId:e.id,actionName:e.name,origin:`action_default`});for(let r of e.effects)r.type===`emit_event`&&n(String(r.event),{surfaceId:t.id,surfaceName:t.name,actionId:e.id,actionName:e.name,origin:`action_effect`,description:r.description});for(let r of e.rules)r.effect.type===`emit_event`&&n(String(r.effect.event),{surfaceId:t.id,surfaceName:t.name,actionId:e.id,actionName:e.name,origin:`action_rule_effect`,description:r.description})}for(let e of t.rules)e.effect.type===`emit_event`&&n(String(e.effect.event),{surfaceId:t.id,surfaceName:t.name,origin:`surface_rule_effect`,description:e.description})}let r=[];for(let[e,n]of t)r.push({name:e,group:a(e),emissions:n});return r.sort((e,t)=>e.group===t.group?String(e.name).localeCompare(String(t.name)):e.group.localeCompare(t.group)),r},s=e=>{let t=new Map;for(let n of e){let e=t.get(n.group);e||(e=[],t.set(n.group,e)),e.push(n)}return Array.from(t.entries()).map(([e,t])=>({group:e,events:t})).sort((e,t)=>e.group.localeCompare(t.group))},c=e=>{let t=new Map;e.surfaces.forEach((e,n)=>{t.set(e.id,{name:e.name,index:n})});let n=new Map,r=e=>e!==void 0&&t.has(e),i=(e,i,a)=>{if(!r(i))return;let o=`${e}__${i}`,s=n.get(o);s||(s={sources:[],fromIndex:t.get(e)?.index??0},n.set(o,s)),s.sources.push(a)};for(let t of e.surfaces){let e=t.id,n=t.name;for(let r of t.transitions)i(e,r.target,{surfaceId:e,surfaceName:n,origin:`declared`,description:r.label??r.description});for(let r of t.actions){for(let t of r.effects)t.type===`transition_surface`&&i(e,t.target,{surfaceId:e,surfaceName:n,actionId:r.id,actionName:r.name,origin:`action_effect`,description:t.description});for(let t of r.rules)t.effect.type===`transition_surface`&&i(e,t.effect.target,{surfaceId:e,surfaceName:n,actionId:r.id,actionName:r.name,origin:`action_rule_effect`,description:t.description})}for(let r of t.rules)r.effect.type===`transition_surface`&&i(e,r.effect.target,{surfaceId:e,surfaceName:n,origin:`surface_rule_effect`,description:r.description})}let a=[];for(let[e,r]of n){let[n,i]=e.split(`__`),o=t.get(n),s=t.get(i);!o||!s||a.push({fromSurfaceId:n,fromSurfaceName:o.name,toSurfaceId:i,toSurfaceName:s.name,sources:r.sources})}return a.sort((e,n)=>{let r=t.get(e.fromSurfaceId)?.index??0,i=t.get(n.fromSurfaceId)?.index??0;return r===i?(t.get(e.toSurfaceId)?.index??0)-(t.get(n.toSurfaceId)?.index??0):r-i}),a},l=e=>{let t=new Map;for(let n of e){let e=t.get(n.fromSurfaceId);e||(e={fromSurfaceId:n.fromSurfaceId,fromSurfaceName:n.fromSurfaceName,transitions:[]},t.set(n.fromSurfaceId,e)),e.transitions.push(n)}return Array.from(t.values())};export{r as a,s as i,l as n,i as o,o as r,c as t};
@@ -0,0 +1 @@
1
+ import{$ as e,et as t,rt as n,tt as r,z as i}from"./BPl9BITm.js";import{$ as a,C as o,G as s,K as c,N as l,Q as u,V as d,W as f,i as p,it as m,t as h,x as g}from"./D64sGJRN.js";import{t as _}from"./yShDxCNj.js";import{v,y}from"./BJdTO_n6.js";import{t as b}from"./CwzIdrQR.js";var x=null,S=e=>(x=e,()=>{x===e&&(x=null)}),C=(e,t)=>x?x(e,t):null,w=`No description yet.`,T=e=>e.length===0?0:Math.round(e.reduce((e,t)=>e+t,0)/e.length),E=e=>{let t=e.filter(e=>e!==null);return t.length===0?null:T(t)},D=e=>{let t=[];for(let n of e.surfaces)for(let e of n.actions){let n=e.evolution;if(!n||n.dismissed)continue;let r=n.source?`${n.rationale} (${n.source})`:n.rationale;t.push({id:String(e.id),tone:n.category===`security`||n.category===`compliance`?`urgent`:`next`,text:`${e.name}: ${r}`})}return t},O=e=>({projects:e.map(({project:e,coreFeatures:t})=>{let n=t.map(({feature:e,implementationStatus:t})=>{let n=o(e),r=g(e,t),i=new Map;for(let e of n.perSurface)for(let t of e.perAction)i.set(String(t.action.id),t.report);let a=new Map(r.perSurface.flatMap(e=>e.perAction.map(e=>[String(e.action.id),e]))),s=e.surfaces.flatMap(e=>l(e.actions).map(t=>{let n=i.get(String(t.id)),r=a.get(String(t.id)),o=r&&r.expectedCount>0?r.percentage:null;return{id:String(t.id),name:t.name,description:t.intent||w,maturityPercentage:n?.percentage??0,implementationPercentage:o,suggestions:[],surfaceId:String(e.id),surfaceName:e.name}})),c=r.expectedCount===0?null:r.percentage;return{id:String(e.id),name:e.name,description:e.description||w,maturityPercentage:n.global.percentage,implementationPercentage:c,tags:e.tags??[],suggestions:D(e),features:s}});return{id:String(e.id),name:e.name,description:e.description||w,maturityPercentage:T(n.map(e=>e.maturityPercentage)),implementationPercentage:E(n.map(e=>e.implementationPercentage)),tags:e.tags??[],coreFeatures:n}})}),k=e=>async()=>{let t=await e.projects.list(),n=[];for(let r of t){let t=await e.projects.get(r.id);if(!t)continue;let i=await Promise.all(t.featureIds.map(async t=>{let[n,r]=await Promise.all([e.features.get(t),e.statuses.get(t)]);return n?{feature:n,implementationStatus:r}:null}));n.push({project:t,coreFeatures:i.filter(e=>e!==null)})}return O(n)},A=e=>async t=>{let n=await e.projects.get(t);return n?O([{project:n,coreFeatures:(await Promise.all(n.featureIds.map(async t=>{let[n,r]=await Promise.all([e.features.get(t),e.statuses.get(t)]);return n?{feature:n,implementationStatus:r}:null}))).filter(e=>e!==null)}]).projects[0]??null:null},j={data:{getContainer:()=>h()},tags:{refresh:()=>b.refresh(),registerTypes:e=>b.registerTypes(e),colorForTag:e=>b.colorForTag(e),renameTag:async(e,t)=>{await b.renameTag(e,t)}},sync:{subscribe:e=>_(e)}},M=(e,t)=>`action:${e}:${t}`,N=e=>`feature:${e}`,P=(e,t)=>e.map((e,n)=>({item:e,index:n,score:t(e)})).filter(e=>e.score>0).sort((e,t)=>t.score-e.score||e.index-t.index).map(e=>e.item),F=new class{host;constructor(e){this.host=e}#e=r(!0);get loading(){return i(this.#e)}set loading(e){t(this.#e,e,!0)}#t=r(e({projects:[]}));get dashboard(){return i(this.#t)}set dashboard(e){t(this.#t,e,!0)}#n=r(!1);get fullyLoaded(){return i(this.#n)}set fullyLoaded(e){t(this.#n,e,!0)}#r=r(0);get totalProjectCount(){return i(this.#r)}set totalProjectCount(e){t(this.#r,e,!0)}#i=n(()=>Math.max(this.totalProjectCount,this.dashboard.projects.length));get projectCount(){return i(this.#i)}set projectCount(e){t(this.#i,e)}#a=n(()=>this.fullyLoaded?0:Math.max(0,this.totalProjectCount-this.dashboard.projects.length));get pendingProjectCount(){return i(this.#a)}set pendingProjectCount(e){t(this.#a,e)}#o=r(null);get selectedProjectId(){return i(this.#o)}set selectedProjectId(e){t(this.#o,e,!0)}#s=r(null);get selectedCoreFeatureId(){return i(this.#s)}set selectedCoreFeatureId(e){t(this.#s,e,!0)}#c=r(``);get search(){return i(this.#c)}set search(e){t(this.#c,e,!0)}#l=r(null);get activeTag(){return i(this.#l)}set activeTag(e){t(this.#l,e,!0)}#u=r(null);get error(){return i(this.#u)}set error(e){t(this.#u,e,!0)}#d=r(e([]));get queue(){return i(this.#d)}set queue(e){t(this.#d,e,!0)}#f=r(null);get queueError(){return i(this.#f)}set queueError(e){t(this.#f,e,!0)}#p=r(e(new Set));get busyActions(){return i(this.#p)}set busyActions(e){t(this.#p,e,!0)}isBusy(e){return this.busyActions.has(e)}setBusy(e,t){let n=new Set(this.busyActions);t?n.add(e):n.delete(e),this.busyActions=n}#m=n(()=>this.dashboard.projects.find(e=>e.id===this.selectedProjectId)??null);get selectedProject(){return i(this.#m)}set selectedProject(e){t(this.#m,e)}#h=n(()=>this.selectedProject?.coreFeatures.find(e=>e.id===this.selectedCoreFeatureId)??null);get selectedCoreFeature(){return i(this.#h)}set selectedCoreFeature(e){t(this.#h,e)}#g=n(()=>this.search.trim().toLowerCase());get searchQuery(){return i(this.#g)}set searchQuery(e){t(this.#g,e)}#_=n(()=>this.searchQuery.length>0);get searchActive(){return i(this.#_)}set searchActive(e){t(this.#_,e)}#v=n(()=>this.activeTag?c(this.activeTag):null);get activeTagKey(){return i(this.#v)}set activeTagKey(e){t(this.#v,e)}#y=n(()=>this.activeTag!==null);get tagActive(){return i(this.#y)}set tagActive(e){t(this.#y,e)}#b=n(()=>{let e=new Set;for(let t of this.dashboard.projects){for(let n of t.tags)e.add(n.type);for(let n of t.coreFeatures)for(let t of n.tags)e.add(t.type)}return[...e]});get allTagTypes(){return i(this.#b)}set allTagTypes(e){t(this.#b,e)}#x=n(()=>{let e=this.dashboard.projects,t=this.activeTagKey;t&&(e=e.filter(e=>this.projectMatchesTag(e,t)));let n=this.searchQuery;return n?P(e,e=>this.projectScore(e,n)):e});get filteredProjects(){return i(this.#x)}set filteredProjects(e){t(this.#x,e)}projectMatchesTag(e,t){return e.tags.some(e=>c(e)===t)||e.coreFeatures.some(e=>e.tags.some(e=>c(e)===t))}coreFeatureMatchesTag(e,t,n){return t.tags.some(e=>c(e)===n)||e.tags.some(e=>c(e)===n)}toggleTag(e){this.activeTag=this.activeTagKey===c(e)?null:e}clearTag(){this.activeTag=null}isActiveTag(e){return this.activeTagKey===c(e)}refreshTagPalette(){return this.host.tags.refresh()}registerTagTypes(e){this.host.tags.registerTypes(e)}colorForTag(e){return this.host.tags.colorForTag(e)}subscribeSync(e){return this.host.sync.subscribe(e)}async addProjectTag(e,t){await this.mutateTags(e,async n=>{let r=await n.useCases.getProject(u(e));r&&await n.useCases.saveProject({...r,tags:d(r.tags,t)})})}async removeProjectTag(e,t){await this.mutateTags(e,async n=>{let r=await n.useCases.getProject(u(e));r&&await n.useCases.saveProject({...r,tags:f(r.tags,t)})})}async addCoreFeatureTag(e,t){await this.mutateTags(this.selectedProjectId,async n=>{let r=await n.useCases.getFeature(m(e));r&&await n.useCases.saveFeature({...r,tags:d(r.tags,t)})})}async removeCoreFeatureTag(e,t){await this.mutateTags(this.selectedProjectId,async n=>{let r=await n.useCases.getFeature(m(e));r&&await n.useCases.saveFeature({...r,tags:f(r.tags,t)})})}async renameTag(e,t){if(c(e)!==c(t)){this.dashboard={...this.dashboard,projects:this.dashboard.projects.map(n=>({...n,tags:s(n.tags,e,t)??[],coreFeatures:n.coreFeatures.map(n=>({...n,tags:s(n.tags,e,t)??[]}))}))},this.activeTagKey===c(e)&&(this.activeTag=t);try{await this.host.tags.renameTag(e,t),this.refreshSilent().then(()=>this.reconcileActiveTag())}catch(e){this.error=e.message}}}async mutateTags(e,t){try{await t(await this.host.data.getContainer()),e?await this.refreshProject(e):await this.refreshSilent(),this.reconcileActiveTag()}catch(e){this.error=e.message}}reconcileActiveTag(){let e=this.activeTagKey;e&&(this.dashboard.projects.some(t=>this.projectMatchesTag(t,e))||(this.activeTag=null))}#S=n(()=>{let e=this.selectedProject,t=this.selectedCoreFeature,n=t?[t]:e?.coreFeatures??[],r=this.activeTagKey;r&&e&&!t&&(n=n.filter(t=>this.coreFeatureMatchesTag(t,e,r)));let i=this.searchQuery;return!i||e&&this.matchesText(i,e.name,e.description)?n:P(n,e=>this.coreFeatureScore(e,i))});get visibleCoreFeatures(){return i(this.#S)}set visibleCoreFeatures(e){t(this.#S,e)}#C=n(()=>{let e=this.selectedCoreFeature;if(!e)return[];let t=this.searchQuery;return!t||this.matchesText(t,e.name,e.description)?e.features:P(e.features,e=>this.featureScore(e,t))});get visibleSelectedFeatures(){return i(this.#C)}set visibleSelectedFeatures(e){t(this.#C,e)}#w=n(()=>{let e=this.selectedCoreFeature;if(!e)return[];let t=this.searchQuery,n=!t||this.matchesText(t,e.name,e.description),r=[],i=new Map;for(let a of e.features){if(!n&&this.featureScore(a,t)===0)continue;let e=i.get(a.surfaceId);e||(e={surfaceId:a.surfaceId,surfaceName:a.surfaceName,features:[]},i.set(a.surfaceId,e),r.push(e)),e.features.push(a)}return r});get visibleSelectedSurfaces(){return i(this.#w)}set visibleSelectedSurfaces(e){t(this.#w,e)}setSearch(e){this.search=e}clearSearch(){this.search=``}matchesText(e,...t){return t.some(t=>t.toLowerCase().includes(e))}textScore(e,t,n){let r=t.toLowerCase();return r.includes(e)?r===e?n*5:r.startsWith(e)?n*4:r.split(/\s+/).some(t=>t.startsWith(e))?n*3:n:0}featureScore(e,t){return Math.max(this.textScore(t,e.name,100),this.textScore(t,e.description,35),...e.suggestions.map(e=>this.textScore(t,e.text,20)))}tagScore(e,t,n){return e.length===0?0:Math.max(...e.map(e=>Math.max(this.textScore(t,e.value,n),this.textScore(t,e.type,n*.5))))}coreFeatureScore(e,t){return Math.max(this.textScore(t,e.name,95),this.textScore(t,e.description,32),this.tagScore(e.tags,t,60),...e.suggestions.map(e=>this.textScore(t,e.text,24)),...e.features.map(e=>this.featureScore(e,t)*.75))}projectScore(e,t){return Math.max(this.textScore(t,e.name,120),this.textScore(t,e.description,40),this.tagScore(e.tags,t,70),...e.coreFeatures.map(e=>this.coreFeatureScore(e,t)*.8))}async refresh(){this.loading=!0,this.error=null;try{let e=await this.host.data.getContainer(),t=await e.useCases.listProjects();if(this.totalProjectCount=t.length,t.length===0){this.dashboard={projects:[]},this.fullyLoaded=!0,this.loading=!1;return}let n=new Map(t.map((e,t)=>[String(e.id),t])),r=A({projects:e.projectRepository,features:e.repository,statuses:e.statusRepository}),i=[];await Promise.all(t.map(async e=>{let t=await r(u(String(e.id)));t&&(i.push(t),i.sort((e,t)=>(n.get(e.id)??0)-(n.get(t.id)??0)),this.dashboard={projects:[...i]},this.loading=!1)})),this.fullyLoaded=!0,this.loading=!1,this.selectedProjectId&&!this.dashboard.projects.some(e=>e.id===this.selectedProjectId)&&(this.selectedProjectId=null,this.selectedCoreFeatureId=null),await this.refreshQueue()}catch(e){this.error=e.message,this.loading=!1}}async refreshSilent(){try{let e=await this.host.data.getContainer(),t=k({projects:e.projectRepository,features:e.repository,statuses:e.statusRepository});this.dashboard=await t(),this.fullyLoaded=!0,this.totalProjectCount=this.dashboard.projects.length,this.selectedProjectId&&!this.dashboard.projects.some(e=>e.id===this.selectedProjectId)&&(this.selectedProjectId=null,this.selectedCoreFeatureId=null),this.error=null,await this.refreshQueue()}catch(e){this.error=e.message}}async loadProjectOnly(e){this.loading=!0,this.refreshProjectCount();try{let t=await this.host.data.getContainer(),n=await A({projects:t.projectRepository,features:t.repository,statuses:t.statusRepository})(u(e));n?(this.dashboard={projects:[n]},this.fullyLoaded=!1,this.error=null,await this.refreshQueue()):await this.refreshSilent()}catch(e){this.error=e.message}finally{this.loading=!1}}async ensureFullyLoaded(){this.fullyLoaded||await this.refresh()}async refreshProjectCount(){try{let e=await this.host.data.getContainer();this.totalProjectCount=(await e.useCases.listProjects()).length}catch{}}selectProject(e){this.selectedProjectId=e,this.selectedCoreFeatureId=null,this.refreshQueue()}deselectProject(){this.selectedProjectId=null,this.selectedCoreFeatureId=null,this.queue=[],this.ensureFullyLoaded()}selectCoreFeature(e){this.selectedCoreFeatureId=this.selectedCoreFeatureId===e?null:e}applySelection(e,t){this.selectedProjectId!==e&&(this.selectedProjectId=e,this.selectedCoreFeatureId=null,this.queue=[],this.refreshQueue(),e||this.ensureFullyLoaded()),this.selectedCoreFeatureId=t}deselectCoreFeature(){this.selectedCoreFeatureId=null}async refreshQueue(){let e=this.selectedProjectId;if(!e){this.queue=[];return}try{let t=await this.host.data.getContainer();this.queue=await t.useCases.listQueue(u(e)),this.queueError=null}catch(e){this.queueError=e.message}}isQueued(e,t){let n=M(e,t);return this.queue.some(e=>p(e.item)===n)}queuePositionForAction(e,t){return this.queuePosition(M(e,t))}queuePosition(e){let t=this.queue.findIndex(t=>p(t.item)===e);return t<0?null:t+1}queueItemIdForAction(e,t){let n=M(e,t);return this.queue.find(e=>p(e.item)===n)?.item.id??null}async toggleAction(e,t){let n=this.selectedProjectId;if(!n)return;let r=this.queueItemIdForAction(e,t);await this.mutateQueue(async i=>{r?await i.useCases.dequeueQueueItem(u(n),r):await i.useCases.enqueueQueueItem(u(n),{kind:`action`,featureId:m(e),actionId:a(t)})})}isFeatureQueued(e){let t=N(e);return this.queue.some(e=>p(e.item)===t)}queuePositionForFeature(e){return this.queuePosition(N(e))}queueItemIdForFeature(e){let t=N(e);return this.queue.find(e=>p(e.item)===t)?.item.id??null}async toggleFeature(e){let t=this.selectedProjectId;if(!t)return;let n=this.queueItemIdForFeature(e);await this.mutateQueue(async r=>{n?await r.useCases.dequeueQueueItem(u(t),n):await r.useCases.enqueueQueueItem(u(t),{kind:`feature`,featureId:m(e)})})}async dequeue(e){let t=this.selectedProjectId;t&&await this.mutateQueue(async n=>{await n.useCases.dequeueQueueItem(u(t),e)})}async setQueueTarget(e,t){let n=this.selectedProjectId;n&&await this.mutateQueue(async r=>{await r.useCases.setQueueItemTarget(u(n),e,t)})}currentScoreFor(e,t){let n=this.selectedProject;if(!n)return 0;let r=n.coreFeatures.find(t=>t.id===String(e.item.featureId));if(!r)return 0;let i=(e,n)=>t===`maturity`?e:n??0;if(e.item.kind===`action`){let t=String(e.item.actionId),n=r.features.find(e=>e.id===t);return n?i(n.maturityPercentage,n.implementationPercentage):0}return i(r.maturityPercentage,r.implementationPercentage)}async dismissSuggestion(e,t){let n=this.selectedProjectId;this.setBusy(t,!0);try{let r=await this.host.data.getContainer();if(n&&this.isQueued(e,t)){let i=this.queueItemIdForAction(e,t);i&&await r.useCases.dequeueQueueItem(u(n),i)}await r.useCases.mutateFeature({featureId:m(e),transform:e=>y(e,a(t))}),await this.refreshSelectedProject(),await this.refreshQueue()}catch(e){this.error=e.message}finally{this.setBusy(t,!1)}}async acceptSuggestion(e,t){let n=this.selectedProjectId;this.setBusy(t,!0);try{let r=await this.host.data.getContainer();await r.useCases.mutateFeature({featureId:m(e),transform:e=>v(e,a(t))}),n&&!this.isQueued(e,t)&&await r.useCases.enqueueQueueItem(u(n),{kind:`action`,featureId:m(e),actionId:a(t)}),await this.refreshSelectedProject(),await this.refreshQueue()}catch(e){this.error=e.message}finally{this.setBusy(t,!1)}}async refreshProject(e){let t=await this.host.data.getContainer(),n=await A({projects:t.projectRepository,features:t.repository,statuses:t.statusRepository})(u(e));n&&(this.dashboard={...this.dashboard,projects:this.dashboard.projects.map(e=>e.id===n.id?n:e)})}async refreshSelectedProject(){this.selectedProjectId&&await this.refreshProject(this.selectedProjectId)}hasProject(e){return this.dashboard.projects.some(t=>t.id===e)}projectIdOwningFeature(e){for(let t of this.dashboard.projects)if(t.coreFeatures.some(t=>t.id===e))return t.id;return null}async applySyncEvent(e){if(e.kind===`project`){this.hasProject(e.id)?(await this.refreshProject(e.id),e.id===this.selectedProjectId&&await this.refreshQueue()):await this.refreshSilent();return}let t=this.projectIdOwningFeature(e.id);t?(await this.refreshProject(t),t===this.selectedProjectId&&await this.refreshQueue()):await this.refreshSilent()}deepLinkFor(e,t){if(e===`project`)return this.hasProject(t)?`/builder-mode?project=${encodeURIComponent(t)}`:null;let n=this.projectIdOwningFeature(t);return n?`/builder-mode?project=${encodeURIComponent(n)}&core=${encodeURIComponent(t)}`:null}async moveQueueTo(e,t){let n=this.selectedProjectId;n&&await this.mutateQueue(async r=>{await r.useCases.moveQueueItem(u(n),e,{kind:`to`,targetIndex:t})})}async mutateQueue(e){try{await e(await this.host.data.getContainer()),await this.refreshQueue()}catch(e){this.queueError=e.message}}}(j),I=globalThis.__sveltekit_1686gye.env,L={id:`expert`,label:`Expert`,href:`/projects`,matches:e=>e===`/`||e.startsWith(`/projects`)||e.startsWith(`/features`)},R={builder:{id:`builder`,label:`Builder`,href:`/builder-mode`,matches:e=>e.startsWith(`/builder-mode`)}},z=e=>{let t=(e??``).split(`,`).map(e=>e.trim().toLowerCase()).filter(e=>e.length>0&&e!==`expert`&&e in R);return[`expert`,...new Set(t)]},B=e=>z(e).map(e=>e===`expert`?L:R[e]),V=(e,t)=>z(e).includes(t),H=()=>B(I.PUBLIC_UNSPA_VIEWS),U=e=>V(I.PUBLIC_UNSPA_VIEWS,e);export{S as a,F as i,U as n,C as o,I as r,H as t};
@@ -0,0 +1 @@
1
+ import{A as e,D as t,E as n,I as r,L as i,M as a,N as o,P as s,Q as c,R as l,V as u,W as d,X as f,Z as p,_ as m,a as h,c as g,ct as _,et as v,j as y,k as b,l as x,lt as S,mt as C,rt as w,s as T,tt as E,u as D,v as O,z as k}from"./BPl9BITm.js";import"./xihTtKlq.js";import{H as A,q as j}from"./D64sGJRN.js";import{t as M}from"./CwzIdrQR.js";var N={isAbsent:!0,dotBackground:null,pillBackground:`#ffffff`,pillRing:`#e2e8f0`,pillText:`#475569`},P=e=>e?{isAbsent:!1,dotBackground:e,pillBackground:`color-mix(in srgb, ${e} 18%, white)`,pillRing:`color-mix(in srgb, ${e} 45%, white)`,pillText:`color-mix(in srgb, ${e} 55%, black)`}:N,F=o(`<span aria-hidden="true"></span>`),I=s(`<svg viewBox="0 0 16 16" aria-hidden="true"><circle cx="8" cy="8" r="6.5" fill="white" stroke="#cbd5e1" stroke-width="1"></circle><line x1="3.5" y1="12.5" x2="12.5" y2="3.5" stroke="#dc2626" stroke-width="1.5" stroke-linecap="round"></line></svg>`);function L(e,t){let n=h(t,`size`,3,2),r={1.5:`size-1.5`,2:`size-2`,2.5:`size-2.5`,3:`size-3`,4:`size-4`,5:`size-5`},i=w(()=>r[n()]);var o=a(),s=p(o),c=e=>{var n=F();d(()=>{O(n,1,`block shrink-0 rounded-full ring-1 ring-inset ring-black/10 ${k(i)??``}`),m(n,`background-color: ${t.color??``};`)}),y(e,n)},l=e=>{var t=I();d(()=>O(t,0,`block shrink-0 ${k(i)??``}`)),y(e,t)};b(s,e=>{t.color?e(c):e(l,-1)}),y(e,o)}var R=0,z=o(`<button type="button" class="ml-0.5 flex size-3 shrink-0 items-center justify-center rounded-full text-[9px] leading-none opacity-0 transition group-hover/chip:opacity-70 hover:opacity-100! hover:bg-white/60">&times;</button>`),B=o(`<span class="group/chip inline-flex max-w-full items-center gap-1 rounded-full px-1.5 py-0.5 text-[10px] font-medium"><!> <span class="truncate"> </span> <!></span>`),V=o(`<button type="button" aria-label="Add tag" title="Add tag"> </button>`),H=o(`<option></option>`),U=o(`<datalist></datalist>`),W=o(`<form class="inline-flex items-center gap-1"><input type="text" placeholder="Type" class="h-5.5 w-20 rounded border border-slate-300 px-1.5 text-[11px] outline-none focus:border-brand-700"/> <!> <input type="text" placeholder="Value" class="h-5.5 w-24 rounded border border-slate-300 px-1.5 text-[11px] outline-none focus:border-brand-700"/> <button type="submit" class="h-5.5 rounded bg-slate-900 px-2 text-[11px] font-medium text-white disabled:opacity-40">Add</button> <button type="button" class="h-5.5 rounded px-1 text-[11px] text-slate-500 hover:text-slate-800">Cancel</button></form>`),G=o(`<div class="flex flex-wrap items-center gap-1.5"><!> <!></div>`);function K(r,o){S(o,!0);let s=h(o,`typeOptions`,19,()=>[]),N=h(o,`addLabel`,3,`+`),F=E(!1),I=E(``),K=E(``),q=E(null),J=`tagdotstrip-types-${++R}`,Y=w(()=>!!(o.tags&&o.tags.length>0));async function X(){v(F,!0),await u(),k(q)?.focus()}function Z(){v(F,!1),v(I,``),v(K,``)}async function ee(e){e.preventDefault();let t=k(I).trim(),n=k(K).trim();!t||!n||(await o.onAddTag?.(t,n),Z())}function Q(e){e.key===`Escape`&&Z()}var $=a(),te=p($),ne=r=>{var u=G(),h=f(u),_=r=>{var s=a();n(p(s),17,()=>o.tags,t,(t,n)=>{let r=w(()=>M.colorForTag(k(n))),a=w(()=>P(k(r)));var s=B(),l=f(s);L(l,{get color(){return k(r)},size:1.5});var u=c(l,2),p=f(u,!0);C(u);var h=c(u,2),g=e=>{var t=z();d((e,n)=>{D(t,`aria-label`,e),D(t,`title`,n)},[()=>`Remove tag ${j(k(n))}`,()=>`Remove ${j(k(n))}`]),i(`click`,t,()=>o.onRemoveTag?.(k(n).type,k(n).value)),y(e,t)};b(h,e=>{o.onRemoveTag&&e(g)}),C(s),d((t,n)=>{m(s,`background-color: ${k(a).pillBackground??``}; color: ${k(a).pillText??``}; box-shadow: inset 0 0 0 1px ${k(a).pillRing??``};`),D(s,`title`,t),e(p,n)},[()=>j(k(n)),()=>A(k(n).value)]),y(t,s)}),y(r,s)};b(h,e=>{o.tags&&e(_)});var S=c(h,2),E=t=>{var r=a(),o=p(r),u=t=>{var n=V();let r;var a=f(n,!0);C(n),d(()=>{r=O(n,1,`inline-flex h-4 items-center rounded-sm px-1 text-[10px] font-medium text-slate-400 opacity-0 transition group-hover:opacity-100 group-focus-within:opacity-100 hover:bg-slate-100 hover:text-slate-700`,null,r,{"opacity-100":!k(Y)}),e(a,N())}),i(`click`,n,X),y(t,n)},m=e=>{var t=W(),r=f(t);x(r),T(r,e=>v(q,e),()=>k(q));var a=c(r,2),o=e=>{var t=U();n(t,20,s,e=>e,(e,t)=>{var n=H(),r={};d(()=>{r!==(r=t)&&(n.value=(n.__value=t)??``)}),y(e,n)}),C(t),d(()=>D(t,`id`,J)),y(e,t)};b(a,e=>{s().length>0&&e(o)});var u=c(a,2);x(u);var p=c(u,2),m=c(p,2);C(t),d(e=>{D(r,`list`,s().length>0?J:void 0),p.disabled=e},[()=>k(I).trim().length===0||k(K).trim().length===0]),l(`submit`,t,ee),i(`keydown`,r,Q),g(r,()=>k(I),e=>v(I,e)),i(`keydown`,u,Q),g(u,()=>k(K),e=>v(K,e)),i(`click`,m,Z),y(e,t)};b(o,e=>{k(F)?e(m,-1):e(u)}),y(t,r)};b(S,e=>{o.onAddTag&&e(E)}),C(u),y(r,u)};b(te,e=>{(k(Y)||o.onAddTag)&&e(ne)}),y(r,$),_()}r([`click`,`keydown`]);export{L as n,K as t};
@@ -0,0 +1 @@
1
+ import{G as e,I as t,L as n,N as r,Q as i,T as a,W as o,X as s,a as c,ct as l,et as u,j as d,k as f,lt as p,mt as m,rt as h,s as g,tt as _,u as v,v as y,z as b}from"./BPl9BITm.js";import"./xihTtKlq.js";import{B as x}from"./D64sGJRN.js";var S=r(`<div role="menu"><!></div>`),C=r(`<div class="relative inline-flex"><button type="button" aria-haspopup="menu"><svg viewBox="0 0 24 24" fill="currentColor" class="h-4 w-4" aria-hidden="true"><circle cx="12" cy="5" r="1.7"></circle><circle cx="12" cy="12" r="1.7"></circle><circle cx="12" cy="19" r="1.7"></circle></svg></button> <!></div>`);function w(t,r){p(r,!0);let x=c(r,`label`,3,`More actions`),w=c(r,`align`,3,`right`),T=c(r,`placement`,3,`down`),E=c(r,`triggerClass`,3,``),D=_(!1),O=_(null),k=()=>{u(D,!1)};e(()=>{if(!b(D))return;let e=e=>{b(O)&&!b(O).contains(e.target)&&u(D,!1)},t=e=>{e.key===`Escape`&&u(D,!1)};return window.addEventListener(`mousedown`,e),window.addEventListener(`keydown`,t),()=>{window.removeEventListener(`mousedown`,e),window.removeEventListener(`keydown`,t)}});let A=h(()=>`${T()===`up`?`bottom-full mb-1`:`top-full mt-1`} ${w()===`right`?`right-0`:`left-0`}`);var j=C(),M=s(j),N=i(M,2),P=e=>{var t=S();a(s(t),()=>r.children,()=>k),m(t),o(()=>y(t,1,`absolute z-50 min-w-40 overflow-hidden rounded-lg border border-slate-200 bg-white py-1 shadow-xl shadow-slate-950/10 ${b(A)??``}`)),d(e,t)};f(N,e=>{b(D)&&e(P)}),m(j),g(j,e=>u(O,e),()=>b(O)),o(()=>{v(M,`aria-expanded`,b(D)),v(M,`aria-label`,x()),v(M,`title`,x()),y(M,1,`grid h-8 w-8 place-items-center rounded-md text-slate-500 transition hover:bg-slate-100 hover:text-slate-800 ${E()??``}`)}),n(`click`,M,()=>u(D,!b(D))),d(t,j),l()}t([`click`]);var T=r(`<button type="button" role="menuitem"><!></button>`);function E(e,t){let r=c(t,`danger`,3,!1),i=c(t,`disabled`,3,!1);var l=T();a(s(l),()=>t.children),m(l),o(()=>{l.disabled=i(),y(l,1,`flex w-full items-center gap-2 px-3 py-1.5 text-left text-sm transition disabled:cursor-not-allowed disabled:opacity-50 ${r()?`text-red-600 hover:bg-red-50`:`text-slate-700 hover:bg-slate-50`}`)}),n(`click`,l,function(...e){t.onclick?.apply(this,e)}),d(e,l)}t([`click`]);var D=6e5,O=16,k=12,A=()=>{if(typeof crypto>`u`||!crypto.subtle)throw Error(`WebCrypto not available. Use a modern browser served over https or localhost.`);return crypto.subtle},j=e=>{let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t)},M=e=>{let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e+=1)n[e]=t.charCodeAt(e);return n},N=async(e,t)=>{let n=new TextEncoder,r=await A().importKey(`raw`,n.encode(e),{name:`PBKDF2`},!1,[`deriveKey`]);return A().deriveKey({name:`PBKDF2`,hash:`SHA-256`,salt:t,iterations:D},r,{name:`AES-GCM`,length:256},!1,[`encrypt`,`decrypt`])},P=class extends Error{constructor(){super(`Passphrase must be at least 8 characters.`),this.name=`WeakPassphraseError`}},F=class extends Error{constructor(){super(`Wrong passphrase, or the .unspa file is corrupted.`),this.name=`WrongPassphraseError`}},I=class extends Error{constructor(e){super(`Not a valid Unspaghettit bundle: ${e}`),this.name=`MalformedEnvelopeError`}},L=async(e,t)=>{if(t.length<8)throw new P;let n=crypto.getRandomValues(new Uint8Array(O)),r=crypto.getRandomValues(new Uint8Array(k)),i=await N(t,n),a=await A().encrypt({name:`AES-GCM`,iv:r},i,new TextEncoder().encode(e));return{format:`unspaghettit-encrypted-bundle`,version:1,algorithm:`AES-GCM`,kdf:`PBKDF2-SHA256`,iterations:D,salt:j(n),iv:j(r),ciphertext:j(new Uint8Array(a))}},R=e=>{if(!e||typeof e!=`object`)throw new I(`not an object`);let t=e;if(t.format!==`unspaghettit-encrypted-bundle`)throw new I(`wrong format tag`);if(t.version!==1)throw new I(`unsupported version ${t.version}`);if(t.algorithm!==`AES-GCM`)throw new I(`unsupported algorithm ${t.algorithm}`);if(t.kdf!==`PBKDF2-SHA256`)throw new I(`unsupported kdf ${t.kdf}`);if(typeof t.iterations!=`number`||t.iterations<1e5)throw new I(`iterations missing or too low`);if(typeof t.salt!=`string`||typeof t.iv!=`string`||typeof t.ciphertext!=`string`)throw new I(`salt / iv / ciphertext must be base64 strings`);return t},z=async(e,t)=>{let n=R(e),r=M(n.salt),i=M(n.iv),a=M(n.ciphertext),o=await N(t,r);try{let e=await A().decrypt({name:`AES-GCM`,iv:i},o,a);return new TextDecoder().decode(e)}catch{throw new F}},B=e=>{let t=e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,64);return t.length>0?t:`project`},V=async(e,t)=>{let n=await x(`/api/projects/${encodeURIComponent(String(e))}/bundle`);if(!n.ok)throw Error(`Bundle fetch failed (${n.status}): ${await n.text().catch(()=>``)}`);let r=await n.json();return{envelope:await L(JSON.stringify(r),t),projectName:r.project.name}},H=(e,t)=>{let n=new Date().toISOString().slice(0,10).replace(/-/g,``),r=`${B(t)}-${n}.unspa`,i=new Blob([JSON.stringify(e,null,2)],{type:`application/octet-stream`}),a=URL.createObjectURL(i),o=document.createElement(`a`);o.href=a,o.download=r,document.body.appendChild(o),o.click(),document.body.removeChild(o),setTimeout(()=>URL.revokeObjectURL(a),1e3)},U=async e=>{let t;try{t=await e.text()}catch{throw new I(`could not read ${e.name}`)}let n;try{n=JSON.parse(t)}catch{throw new I(`file is not valid JSON`)}if(!n||typeof n!=`object`)throw new I(`file is not a JSON object`);return n},W=async(e,t)=>{let n=await z(e,t),r;try{r=JSON.parse(n)}catch{throw new I(`decrypted payload is not valid JSON`)}let i=await x(`/api/projects/import`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(r)});if(!i.ok)throw Error(`Import failed (${i.status}): ${await i.text().catch(()=>``)}`);return await i.json()};export{I as a,E as c,U as i,w as l,V as n,P as o,W as r,F as s,H as t};
@@ -0,0 +1 @@
1
+ import{A as e,E as t,I as n,L as r,N as i,Q as a,W as o,X as s,_ as c,ct as l,g as u,h as d,j as f,k as p,lt as m,mt as h,rt as g,u as _,z as v}from"./BPl9BITm.js";import"./xihTtKlq.js";import{H as y,K as b}from"./D64sGJRN.js";import{t as x}from"./CwzIdrQR.js";import{n as S}from"./oVMDLirx.js";var C=i(`<option> </option>`),w=i(`<optgroup></optgroup>`),T=i(`<button type="button" class="ml-0 max-w-0 overflow-hidden whitespace-nowrap rounded px-0 py-1 text-xs font-medium text-slate-500 opacity-0 transition-all duration-200 delay-0 ease-out group-hover/tagfilter:ml-1 group-hover/tagfilter:max-w-24 group-hover/tagfilter:px-2 group-hover/tagfilter:opacity-100 group-hover/tagfilter:delay-300 group-focus-within/tagfilter:ml-1 group-focus-within/tagfilter:max-w-24 group-focus-within/tagfilter:px-2 group-focus-within/tagfilter:opacity-100 group-focus-within/tagfilter:delay-300 hover:bg-slate-100 hover:text-slate-900" title="Rename tags or set colors">Manage</button>`),E=i(`<label class="group/tagfilter flex h-10 items-center gap-2 rounded-lg border border-hairline bg-white px-3 text-sm text-slate-600"><span class="text-xs font-medium">Tag</span> <!> <select class="bg-transparent text-sm font-medium text-slate-800 outline-none" aria-label="Filter by tag"><option> </option><option> </option><!></select> <!></label>`);function D(n,i){m(i,!0);let D=g(()=>{let e=new Map;for(let t of i.tags){let n=t.type.trim().toLowerCase();if(!n)continue;let r=e.get(n);r?r.tags.some(e=>b(e)===b(t))||r.tags.push(t):e.set(n,{typeKey:n,display:y(n),tags:[t]})}return[...e.values()].sort((e,t)=>e.display.localeCompare(t.display)).map(e=>({...e,tags:[...e.tags].sort((e,t)=>e.value.localeCompare(t.value))}))}),O=g(()=>v(D).flatMap(e=>e.tags)),k=`__all__`,A=`__untagged__`,j=g(()=>i.value===`all`?k:i.value===`untagged`?A:b(i.value));function M(e){let t=e.target.value;if(t===k){i.onChange(`all`);return}if(t===A){i.onChange(`untagged`);return}let n=v(O).find(e=>b(e)===t);n&&i.onChange({type:n.type,value:n.value})}let N=g(()=>i.value!==`all`&&i.value!==`untagged`?x.colorFor(i.value.type):null),P=g(()=>i.value!==`all`&&i.value!==`untagged`),F=g(()=>i.countLabel?.(`all`)),I=g(()=>i.countLabel?.(`untagged`));var L=E(),R=a(s(L),2),z=e=>{S(e,{get color(){return v(N)},size:2})};p(R,e=>{v(P)&&e(z)});var B=a(R,2),V=s(B),H=s(V);h(V),V.value=V.__value=k;var U=a(V),W=s(U);h(U),U.value=U.__value=A,t(a(U),17,()=>v(D),e=>e.typeKey,(n,r)=>{let a=g(()=>x.colorFor(v(r).typeKey));var l=w();t(l,21,()=>v(r).tags,e=>b(e),(t,n)=>{let r=g(()=>i.countLabel?.({type:v(n).type,value:v(n).value}));var l=C(),u=s(l);h(l);var d={};o((t,n)=>{c(l,v(a)?`background-color: color-mix(in srgb, ${v(a)} 12%, white);`:void 0),e(u,`${t??``}${v(r)===void 0?``:` (${v(r)})`}`),d!==(d=n)&&(l.value=(l.__value=n)??``)},[()=>y(v(n).value),()=>b(v(n))]),f(t,l)}),h(l),o(()=>{_(l,`label`,v(r).display),c(l,v(a)?`background-color: color-mix(in srgb, ${v(a)} 28%, white);`:void 0)}),f(n,l)}),h(B);var G;d(B);var K=a(B,2),q=e=>{var t=T();r(`click`,t,function(...e){i.onManage?.apply(this,e)}),f(e,t)};p(K,e=>{i.onManage&&e(q)}),h(L),o(()=>{e(H,`All${v(F)===void 0?``:` (${v(F)})`}`),e(W,`Untagged${v(I)===void 0?``:` (${v(I)})`}`),G!==(G=v(j))&&(B.value=(B.__value=v(j))??``,u(B,v(j)))}),r(`change`,B,M),f(n,L),l()}n([`change`,`click`]);export{D as t};
@@ -1 +1 @@
1
- import"./BPl9BITm.js";import{a as e,o as t,s as n}from"./OJscNS3T.js";var r={get data(){return n.data},get error(){return n.error},get form(){return n.form},get params(){return n.params},get route(){return n.route},get state(){return n.state},get status(){return n.status},get url(){return n.url}};Object.defineProperty({get from(){return t.current?t.current.from:null},get to(){return t.current?t.current.to:null},get type(){return t.current?t.current.type:null},get willUnload(){return t.current?t.current.willUnload:null},get delta(){return t.current?t.current.delta:null},get complete(){return t.current?t.current.complete:null}},"current",{get(){throw Error(`Replace navigating.current.<prop> with navigating.<prop>`)}}),e.updated.check;var i=r;export{i as t};
1
+ import"./BPl9BITm.js";import{a as e,o as t,s as n}from"./ByaoVvNB.js";var r={get data(){return n.data},get error(){return n.error},get form(){return n.form},get params(){return n.params},get route(){return n.route},get state(){return n.state},get status(){return n.status},get url(){return n.url}};Object.defineProperty({get from(){return t.current?t.current.from:null},get to(){return t.current?t.current.to:null},get type(){return t.current?t.current.type:null},get willUnload(){return t.current?t.current.willUnload:null},get delta(){return t.current?t.current.delta:null},get complete(){return t.current?t.current.complete:null}},"current",{get(){throw Error(`Replace navigating.current.<prop> with navigating.<prop>`)}}),e.updated.check;var i=r;export{i as t};
@@ -0,0 +1 @@
1
+ import{A as e,E as t,F as n,G as r,I as i,L as a,N as o,Q as s,R as c,V as l,W as u,X as d,Y as f,Z as p,a as m,c as h,ct as g,et as _,gt as v,j as y,k as b,l as x,lt as S,m as C,mt as w,n as T,p as E,pt as D,r as O,rt as k,s as A,tt as j,u as M,z as N}from"./BPl9BITm.js";import{n as P}from"./ByaoVvNB.js";import"./xihTtKlq.js";import{H as F,K as I,V as L,W as ee,_t as te,gt as R,t as z,xt as ne,yt as re}from"./D64sGJRN.js";import{t as ie}from"./yShDxCNj.js";import"./Da59TXPe.js";import{t as B}from"./cMamJTsF.js";import{t as V}from"./BjxqhpPG.js";import{t as ae}from"./CwzIdrQR.js";import{t as oe}from"./CuGlh1c2.js";import{t as se}from"./oVMDLirx.js";import{a as ce,c as H,i as le,l as ue,n as de,o as fe,r as pe,s as me,t as he}from"./olAc024e.js";import{t as U}from"./Dhqg7r_2.js";import{t as ge}from"./wXIHzLMQ2.js";import{t as _e}from"./DNaA4QRO2.js";var W=o(`<a class="block"><p class="line-clamp-3 text-sm leading-6 text-slate-600"> </p></a>`),ve=o(`<p class="text-sm leading-6 text-slate-500">No description yet. Add a note so collaborators know what belongs here.</p>`),ye=o(`<span aria-hidden="true">⬇</span> Export .unspa`,1),G=o(`<!> <!>`,1),be=o(`<article data-tour="project-card" class="group relative flex h-full min-h-52 flex-col justify-between overflow-hidden rounded-xl border border-cyan-100 bg-white p-5 shadow-sm shadow-cyan-950/5 transition duration-150 hover:-translate-y-0.5 hover:border-cyan-200 hover:bg-cyan-50/20 hover:shadow-md hover:shadow-cyan-950/10 focus-within:border-cyan-300"><div class="absolute inset-x-0 top-0 h-1 bg-linear-to-r from-brand-500 via-brand-mint to-violet-400"></div> <div class="space-y-3"><div class="flex items-start justify-between gap-3"><a class="block min-w-0 flex-1"><h3 class="truncate text-base font-semibold text-slate-950 group-hover:text-brand-800"> </h3></a> <span class="shrink-0 rounded-md border border-cyan-100 bg-cyan-50 px-2 py-0.5 text-xs font-medium text-brand-800" title="Features in project"> </span></div> <!></div> <div class="mt-5 flex items-end justify-between gap-3 border-t border-hairline pt-3 text-xs text-slate-500"><div class="min-w-0 flex-1 space-y-2"><!> <span class="block truncate"> </span></div> <div class="flex shrink-0 items-center gap-1"><!></div></div></article>`);function xe(t,r){S(r,!0);let i=m(r,`tagTypeOptions`,19,()=>[]),o=m(r,`deleteLabel`,3,`Delete`);function c(){V.openProject(String(r.summary.id))}var l=be(),f=s(d(l),2),h=d(f),_=d(h),x=d(_),C=d(x,!0);w(x),w(_);var T=s(_,2),E=d(T);w(T),w(h);var O=s(h,2),k=t=>{var n=W(),i=d(n),o=d(i,!0);w(i),w(n),u(()=>{M(n,`href`,`/projects/${r.summary.id}`),e(o,r.summary.description)}),a(`click`,n,c),y(t,n)},A=e=>{y(e,ve())};b(O,e=>{r.summary.description?e(k):e(A,-1)}),w(f);var j=s(f,2),N=d(j),P=d(N);se(P,{get tags(){return r.summary.tags},get onAddTag(){return r.onAddTag},get onRemoveTag(){return r.onRemoveTag},get typeOptions(){return i()}});var F=s(P,2),I=d(F);w(F),w(N);var L=s(N,2);ue(d(L),{placement:`up`,align:`right`,label:`Project actions`,children:(t,i=v)=>{var a=G(),c=p(a);H(c,{onclick:()=>{i()(),r.onExport()},children:(e,t)=>{var n=ye();D(),y(e,n)},$$slots:{default:!0}}),H(s(c,2),{danger:!0,onclick:()=>{i()(),r.onDelete()},children:(t,r)=>{D();var i=n();u(()=>e(i,o())),y(t,i)},$$slots:{default:!0}}),y(t,a)},$$slots:{default:!0}}),w(L),w(j),w(l),u(t=>{M(_,`href`,`/projects/${r.summary.id}`),e(C,r.summary.name),e(E,`${r.summary.featureCount??``} feature${r.summary.featureCount===1?``:`s`}`),e(I,`Updated ${t??``}`)},[()=>new Date(r.summary.updatedAt).toLocaleDateString()]),a(`click`,_,c),y(t,l),g()}i([`click`]);var Se=o(`<form data-tour="new-project-form" class="grid gap-3 rounded-xl border border-cyan-100 bg-cyan-50/40 p-4 md:grid-cols-[1fr_1.6fr_auto] md:items-end"><div><label for="proj-name" class="mb-1.5 block text-xs font-medium text-slate-700">Project name</label> <input id="proj-name" type="text" placeholder="e.g. Acme Platform" class="h-10 w-full rounded-md border border-cyan-100 bg-white px-3 text-sm outline-none focus:border-brand-700 focus:ring-2 focus:ring-brand-100" required=""/></div> <div><label for="proj-desc" class="mb-1.5 block text-xs font-medium text-slate-700">Description</label> <input id="proj-desc" data-tour="new-project-description" type="text" placeholder="What product or initiative does this group?" class="h-10 w-full rounded-md border border-cyan-100 bg-white px-3 text-sm outline-none focus:border-brand-700 focus:ring-2 focus:ring-brand-100" required=""/></div> <button type="submit" class="h-10 rounded-md bg-brand-800 px-4 text-sm font-medium text-white hover:bg-brand-900 disabled:cursor-not-allowed disabled:opacity-50"> </button></form>`);function Ce(t,n){S(n,!0);let i=j(``),a=j(``),o=j(!1),f=j(null),p=k(()=>U(B.currentStep,`new-project`,N(i)));r(()=>{N(f)&&l().then(()=>N(f)?.focus())});async function m(e){if(e.preventDefault(),!N(o)&&N(i).trim().length!==0&&N(a).trim().length!==0){_(o,!0);try{await n.onSubmit(N(i).trim(),N(a).trim()),_(i,``),_(a,``)}finally{_(o,!1)}}}var v=Se(),b=d(v),C=s(d(b),2);x(C),A(C,e=>_(f,e),()=>N(f)),w(b);var T=s(b,2),E=s(d(T),2);x(E),w(T);var D=s(T,2),O=d(D,!0);w(D),w(v),u(t=>{M(D,`title`,N(p).blocked?`Tutorial: name must be exactly "${N(p).requiredValue}"`:void 0),D.disabled=t,e(O,N(o)?`Creating...`:`New project`)},[()=>N(o)||N(i).trim().length===0||N(a).trim().length===0||N(p).blocked]),c(`submit`,v,m),h(C,()=>N(i),e=>_(i,e)),h(E,()=>N(a),e=>_(a,e)),y(t,v),g()}var we=o(`<span aria-hidden="true">&#x2B06;</span> `,1),Te=o(`<button type="button" class="h-8 rounded-md px-2 text-xs font-medium text-slate-500 hover:bg-slate-50 hover:text-slate-900">Clear</button>`),Ee=o(`<div class="rounded-lg border border-dashed border-hairline bg-white p-8 text-center text-sm text-slate-500">Loading projects...</div>`),De=o(`<div class="rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-700"> </div>`),Oe=o(`<div class="space-y-3"><p>No projects yet.</p> <button type="button" class="rounded-md bg-slate-900 px-4 py-2 text-sm font-medium text-white">Create first project</button></div>`),ke=o(`<div class="rounded-lg border border-dashed border-hairline bg-white p-8 text-center text-sm text-slate-500"><!></div>`),Ae=o(`<li><!></li>`),je=o(`<ul class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"></ul>`),Me=o(`<div class="fixed inset-0 z-40 flex items-start justify-center bg-slate-950/30 px-4 py-24 backdrop-blur-sm" role="presentation"><div class="w-full max-w-3xl rounded-xl border border-hairline bg-white shadow-xl" role="dialog" aria-modal="true" aria-labelledby="new-project-title"><header class="flex items-start justify-between gap-4 border-b border-hairline px-5 py-4"><div><h2 id="new-project-title" class="text-base font-semibold text-slate-950">New project</h2> <p class="mt-1 text-sm text-slate-500">Create a project for related behavior models.</p></div> <button type="button" class="rounded-md px-2 py-1 text-sm text-slate-500 hover:bg-slate-100 hover:text-slate-900" aria-label="Close">x</button></header> <div class="p-5"><!></div></div></div>`),Ne=o(`<div class="mx-auto max-w-7xl px-4 py-8 sm:px-6"><header class="mb-6 border-b border-slate-200 pb-6"><div class="flex items-center justify-between gap-3"><p class="text-xs font-semibold uppercase tracking-wide text-brand-700">Home</p> <!> <input type="file" accept=".unspa,application/octet-stream,application/json" class="hidden"/></div> <div class="mt-2 max-w-3xl"><h1 class="text-4xl font-semibold tracking-tight text-slate-950">Projects</h1> <p class="mt-2 max-w-2xl text-sm leading-6 text-slate-600">Group related behavior models and inspect their resources, data, events, and transitions together.</p></div> <div class="mt-6 flex flex-col gap-3 rounded-xl border border-slate-200 bg-white p-3 shadow-sm shadow-slate-950/5 lg:flex-row lg:items-center lg:justify-between"><div class="flex min-w-0 items-center rounded-lg border border-hairline bg-white p-1 lg:flex-1"><label for="project-search" class="sr-only">Search projects</label> <input id="project-search" type="search" placeholder="Search projects..." class="h-9 w-full min-w-0 rounded-md border-0 bg-transparent px-3 text-sm outline-none placeholder:text-slate-400"/> <!></div> <div class="flex flex-col gap-2 sm:flex-row sm:items-center"><!> <label class="flex h-10 items-center gap-2 rounded-lg border border-hairline bg-white px-3 text-sm text-slate-600"><span class="text-xs font-medium">Sort</span> <select class="bg-transparent text-sm font-medium text-slate-800 outline-none"><option>Updated</option><option>Name</option><option>Features</option></select></label> <button type="button" data-tour="new-project-button" class="inline-flex h-10 items-center justify-center gap-2 rounded-md bg-slate-900 px-4 text-sm font-medium text-white hover:bg-slate-800"><span class="text-base leading-none" aria-hidden="true">+</span> New project</button></div></div></header> <section aria-labelledby="projects-list-title"><div class="mb-3 flex flex-col gap-1 sm:flex-row sm:items-end sm:justify-between"><div><h2 id="projects-list-title" class="text-base font-semibold text-slate-950">Your projects</h2> <p class="text-sm text-slate-500">Open a project to inspect the features it groups.</p></div> <p class="text-xs text-slate-500"> </p></div> <!></section></div> <!> <!>`,1);function Pe(i,o){S(o,!0);let l=null,m=j(`all`),h=j(!1),D=j(!1),M=j(`updated`);O(()=>{V.refresh(),ae.refresh(),l=ie(e=>{(e.kind===`project`||e.kind===`feature`)&&V.refreshSilent()})}),T(()=>{l?.(),l=null});function B(e){let t=[...e.tags??[]];return e.customTag?.trim()&&t.push({type:e.customTagType?.trim()||`Tag`,value:e.customTag.trim()}),t}async function se(e,t){await P(`/projects/${await V.create(e,t)}`)}let U=j(!1),W=j(null);function ve(){N(U)||N(W)?.click()}async function ye(e){let t=e.target,n=t.files?.[0];if(t.value=``,n){_(U,!0);try{let e=await le(n),t=await ne({title:`Import .unspa file`,message:`Enter the passphrase used when "${n.name}" was exported. A wrong passphrase will not corrupt anything — the file just stays encrypted.`,inputLabel:`Passphrase`,password:!0,confirmLabel:`Import`,tone:`info`});if(t===null)return;let r=await pe(e,t);await V.refreshSilent(),await R({title:`Import complete`,message:`Restored project with ${r.featuresImported} feature(s) and ${r.statusesImported} implementation-status sidecar(s).`,tone:`success`}),await P(`/projects/${r.projectId}`)}catch(e){await R({title:`Import failed`,message:e instanceof ce?`That file is not a valid .unspa bundle: ${e.message}`:e instanceof me?e.message:`Import failed: ${e.message}`,tone:`danger`})}finally{_(U,!1)}}}let G=j(!1);async function be(e,t){if(N(G))return;let n=await ne({title:`Export project`,message:`Encrypt "${t}" with a passphrase and download as a .unspa file. You'll need the same passphrase to import it back. Minimum 8 characters.`,inputLabel:`Passphrase`,placeholder:`At least 8 characters`,password:!0,confirmLabel:`Export`,tone:`info`,validate:e=>e.length<8?`Passphrase must be at least 8 characters.`:null});if(n!==null){_(G,!0);try{let{envelope:t,projectName:r}=await de(e,n);he(t,r)}catch(e){await R({title:`Export failed`,message:e instanceof fe?e.message:`Export failed: ${e.message}`,tone:`danger`})}finally{_(G,!1)}}}async function Se(e){V.stagePendingDelete(e);let t=V.summaries.find(t=>String(t.id)===String(e))?.name??`this project`,n=await z(),r=((await n.useCases.getProject(e))?.featureIds??[]).map(String),i=[];if(r.length===0){if(!await re({title:`Delete "${t}"?`,message:`This project has no linked features. Removing it cannot be undone.`,confirmLabel:`Delete project`,tone:`danger`})){V.clearPendingDelete();return}}else{let e=await Promise.all(r.map(async e=>({id:e,label:(await n.useCases.getFeatureCard(e))?.name??e,defaultChecked:!0}))),a=await te({title:`Delete "${t}"?`,message:`This project links to ${r.length} feature${r.length===1?``:`s`}. Tick the ones you want to delete in the same batch. Anything left unchecked stays available as an unassigned feature.`,items:e,confirmLabel:`Delete project + selected`,cancelLabel:`Cancel`,tone:`danger`});if(!a.confirmed){V.clearPendingDelete();return}i=a.selectedIds}for(let e of i)await n.useCases.deleteFeature(e);await V.remove(e),i.length>0&&await oe.refreshSilent()}function Pe(e){e.key===`Escape`&&_(h,!1)}let K=k(()=>(V.search.trim().length===0?[...V.summaries]:V.summaries.filter(e=>{let t=V.search.toLowerCase();return e.name.toLowerCase().includes(t)||(e.description??``).toLowerCase().includes(t)})).filter(e=>Fe(e,N(m))).sort((e,t)=>N(M)===`name`?e.name.localeCompare(t.name):N(M)===`count`?t.featureCount-e.featureCount:new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime()));function Fe(e,t){let n=B(e);if(t===`all`)return!0;if(t===`untagged`)return n.length===0;let r=I(t);return n.some(e=>I(e)===r)}let q=k(()=>{let e=[];for(let t of V.summaries)for(let n of B(t))e.push(n);return e});r(()=>{ae.registerTypes(N(q).map(e=>e.type))});let Ie=k(()=>[...new Set(N(q).map(e=>F(e.type)))].sort((e,t)=>e.localeCompare(t)));function Le(e){return V.summaries.filter(t=>Fe(t,e)).length}async function Re(e,t,n){let r=await z(),i=await r.useCases.getProject(e);i&&(await r.useCases.saveProject({...i,tags:L(B(i),{type:t,value:n})}),await V.refreshSilent())}async function ze(e,t,n){let r=await z(),i=await r.useCases.getProject(e);if(!i)return;let a=ee(B(i),{type:t,value:n});await r.useCases.saveProject({...i,tags:a,customTagType:void 0,customTag:void 0}),N(m)!==`all`&&N(m)!==`untagged`&&I(N(m))===I({type:t,value:n})&&_(m,`all`),await V.refreshSilent()}var Be=Ne();c(`keydown`,f,Pe);var J=p(Be),Y=d(J),X=d(Y),Ve=s(d(X),2);ue(Ve,{align:`right`,placement:`down`,label:`Page actions`,children:(t,n=v)=>{H(t,{get disabled(){return N(U)},onclick:()=>{n()(),ve()},children:(t,n)=>{var r=we(),i=s(p(r));u(()=>e(i,` ${N(U)?`Importing...`:`Import .unspa`}`)),y(t,r)},$$slots:{default:!0}})},$$slots:{default:!0}});var He=s(Ve,2);A(He,e=>_(W,e),()=>N(W)),w(X);var Ue=s(X,4),Z=d(Ue),Q=s(d(Z),2);x(Q);var We=s(Q,2),Ge=e=>{var t=Te();a(`click`,t,()=>V.setSearch(``)),y(e,t)},Ke=k(()=>V.search.trim().length>0);b(We,e=>{N(Ke)&&e(Ge)}),w(Z);var qe=s(Z,2),Je=d(qe);ge(Je,{get tags(){return N(q)},get value(){return N(m)},onChange:e=>_(m,e,!0),onManage:()=>_(D,!0),countLabel:Le});var $=s(Je,2),Ye=s(d($),2),Xe=d(Ye);Xe.value=Xe.__value=`updated`;var Ze=s(Xe);Ze.value=Ze.__value=`name`;var Qe=s(Ze);Qe.value=Qe.__value=`count`,w(Ye),w($);var $e=s($,2);w(qe),w(Ue),w(Y);var et=s(Y,2),tt=d(et),nt=s(d(tt),2),rt=d(nt);w(nt),w(tt);var it=s(tt,2),at=e=>{y(e,Ee())},ot=t=>{var n=De(),r=d(n,!0);w(n),u(()=>e(r,V.error)),y(t,n)},st=e=>{var t=ke(),r=d(t),i=e=>{var t=Oe(),n=s(d(t),2);w(t),a(`click`,n,()=>_(h,!0)),y(e,t)},o=e=>{y(e,n(`No projects match your search.`))};b(r,e=>{V.summaries.length===0?e(i):e(o,-1)}),w(t),y(e,t)},ct=e=>{var n=je();t(n,21,()=>N(K),e=>e.id,(e,t)=>{var n=Ae();xe(d(n),{get summary(){return N(t)},get tagTypeOptions(){return N(Ie)},onAddTag:(e,n)=>Re(N(t).id,e,n),onRemoveTag:(e,n)=>ze(N(t).id,e,n),onExport:()=>be(N(t).id,N(t).name),onDelete:()=>Se(N(t).id)}),w(n),y(e,n)}),w(n),y(e,n)};b(it,e=>{V.loading?e(at):V.error?e(ot,1):N(K).length===0?e(st,2):e(ct,-1)}),w(et),w(J);var lt=s(J,2),ut=e=>{var t=Me(),n=d(t),r=d(n),i=s(d(r),2);w(r);var o=s(r,2);Ce(d(o),{onSubmit:se}),w(o),w(n),w(t),a(`click`,t,e=>{e.currentTarget===e.target&&_(h,!1)}),a(`click`,i,()=>_(h,!1)),y(e,t)};b(lt,e=>{N(h)&&e(ut)}),_e(s(lt,2),{get open(){return N(D)},get tags(){return N(q)},onClose:()=>_(D,!1),onRenamed:()=>V.refreshSilent()}),u(()=>{E(Q,V.search),e(rt,`${N(K).length??``} shown`)}),a(`change`,He,ye),a(`input`,Q,e=>V.setSearch(e.target.value)),C(Ye,()=>N(M),e=>_(M,e)),a(`click`,$e,()=>_(h,!0)),y(i,Be),g()}i([`change`,`input`,`click`]);export{Pe as t};
@@ -1 +1 @@
1
- import{ft as e}from"./Bp2_Vghh.js";var t=null,n=new Set,r=()=>{if(t)return;let r=e.token,i=r.length>0?`/api/sync/events?token=${encodeURIComponent(r)}`:`/api/sync/events`;t=new EventSource(i),t.addEventListener(`sync`,e=>{let t;try{t=JSON.parse(e.data)}catch{return}for(let e of n)try{e(t)}catch{}})},i=e=>(r(),n.add(e),()=>{n.delete(e)});export{i as t};
1
+ import{ht as e}from"./D64sGJRN.js";var t=null,n=new Set,r=()=>{if(t)return;let r=e.token,i=r.length>0?`/api/sync/events?token=${encodeURIComponent(r)}`:`/api/sync/events`;t=new EventSource(i),t.addEventListener(`sync`,e=>{let t;try{t=JSON.parse(e.data)}catch{return}for(let e of n)try{e(t)}catch{}})},i=e=>(r(),n.add(e),()=>{n.delete(e)});export{i as t};
@@ -0,0 +1,2 @@
1
+ a ����P���z3�K�k�;��x�p�a�9R�܁�Tt�mI ��#j�=�-͹��x&.]�WD���1�ܰ�i1��u�^L�S^����ߟ7���,Y"G���c�s|��G��3�#����6z���q��۶N�{y7*��b�����
2
+ �t�z�#>`\VS�rb���POɣw� ���ނjvwpa1la4ɣ��ё�Rp�э�c$D��
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.tKfYV3__.js","../chunks/BPl9BITm.js","../chunks/ByaoVvNB.js","../chunks/_b612aVb.js","../chunks/D64sGJRN.js","../chunks/BJdTO_n6.js","../chunks/CwzIdrQR.js","../chunks/yShDxCNj.js","../chunks/Da59TXPe.js","../chunks/wrqalH0a.js","../chunks/Bcyn5YUg.js","../chunks/ib21i2T_.js","../chunks/xihTtKlq.js","../chunks/suTxxv1t.js","../chunks/CXvvf4uQ.js","../chunks/C8b3IMj8.js","../chunks/Bfc9rQXP.js","../chunks/Cl7Z3e6-.js","../chunks/BjxqhpPG.js","../chunks/cMamJTsF.js","../assets/0.DCOD5ne_.css","../nodes/1.CER5ICKt.js","../nodes/2.CF488WWF.js","../chunks/x60Tn5kT.js","../chunks/CuGlh1c2.js","../chunks/olAc024e.js","../chunks/DNaA4QRO2.js","../chunks/oVMDLirx.js","../chunks/wXIHzLMQ2.js","../chunks/Dhqg7r_2.js","../chunks/BzLd0mTH.js","../nodes/3.CP7CPPVH.js","../chunks/DtblIi6X2.js","../assets/3.B3akUL9A.css","../nodes/4.D1bxCSiM.js","../chunks/BANF9BhQ2.js","../chunks/aNMRV4sP2.js","../chunks/BQ9GodWX2.js","../nodes/5.D6jZgh9y.js","../chunks/DryaQyjN2.js","../chunks/Vu8LzrwP2.js","../chunks/DmyaDy4d2.js","../chunks/UkzDDeO42.js","../chunks/DhTiE3j02.js","../chunks/DtK8qK5Q2.js","../nodes/6.BrBFUA0s.js","../chunks/ClC4qR7W2.js","../chunks/kNaey6uv.js","../assets/BehaviorGraph.Bk0xQRZk.css","../nodes/7.pajo8MfM.js","../nodes/8.Cc80_Igi.js","../nodes/9.D72NaL3l.js","../nodes/10.rT7cD8kX.js","../chunks/B3vnQs252.js","../nodes/11.BAnV_Y5Y.js","../nodes/12.DCTRFMqo.js","../assets/12.nv0I59TU.css"])))=>i.map(i=>d[i]);
2
+ import{A as e,F as t,G as n,K as r,M as i,N as a,Q as o,V as s,W as c,X as l,Z as u,a as d,ct as f,et as p,i as m,j as h,k as g,lt as _,mt as v,r as y,rt as b,s as x,tt as S,w as C,z as w}from"../chunks/BPl9BITm.js";import{t as T}from"../chunks/kNaey6uv.js";import"../chunks/xihTtKlq.js";var E={},D=a(`<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px"><!></div>`),O=a(`<!> <!>`,1);function k(a,m){_(m,!0);let T=d(m,`components`,23,()=>[]),E=d(m,`data_0`,3,null),k=d(m,`data_1`,3,null);r(()=>m.stores.page.set(m.page)),n(()=>{m.stores,m.page,m.constructors,T(),m.form,E(),k(),m.stores.page.notify()});let A=S(!1),j=S(!1),M=S(null);y(()=>{let e=m.stores.page.subscribe(()=>{w(A)&&(p(j,!0),s().then(()=>{p(M,document.title||`untitled page`,!0)}))});return p(A,!0),e});let N=b(()=>m.constructors[1]);var P=O(),F=u(P),I=e=>{let t=b(()=>m.constructors[0]);var n=i();C(u(n),()=>w(t),(e,t)=>{x(t(e,{get data(){return E()},get form(){return m.form},get params(){return m.page.params},children:(e,t)=>{var n=i();C(u(n),()=>w(N),(e,t)=>{x(t(e,{get data(){return k()},get form(){return m.form},get params(){return m.page.params}}),e=>T()[1]=e,()=>T()?.[1])}),h(e,n)},$$slots:{default:!0}}),e=>T()[0]=e,()=>T()?.[0])}),h(e,n)},L=e=>{let t=b(()=>m.constructors[0]);var n=i();C(u(n),()=>w(t),(e,t)=>{x(t(e,{get data(){return E()},get form(){return m.form},get params(){return m.page.params}}),e=>T()[0]=e,()=>T()?.[0])}),h(e,n)};g(F,e=>{m.constructors[1]?e(I):e(L,-1)});var R=o(F,2),z=n=>{var r=D(),i=l(r),a=n=>{var r=t();c(()=>e(r,w(M))),h(n,r)};g(i,e=>{w(j)&&e(a)}),v(r),h(n,r)};g(R,e=>{w(A)&&e(z)}),h(a,P),f()}var A=m(k),j=[()=>T(()=>import(`../nodes/0.tKfYV3__.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]),import.meta.url),()=>T(()=>import(`../nodes/1.CER5ICKt.js`),__vite__mapDeps([21,1,9,2,12]),import.meta.url),()=>T(()=>import(`../nodes/2.CF488WWF.js`),__vite__mapDeps([22,1,12,13,23,2,8,4,24,18,17,25,26,27,6,28,29,30,19,7]),import.meta.url),()=>T(()=>import(`../nodes/3.CP7CPPVH.js`),__vite__mapDeps([31,1,2,3,4,5,6,7,32,8,9,11,12,13,33]),import.meta.url),()=>T(()=>import(`../nodes/4.D1bxCSiM.js`),__vite__mapDeps([34,1,2,32,8,12,4,24,18,17,35,27,6,36,37,26,28]),import.meta.url),()=>T(()=>import(`../nodes/5.D6jZgh9y.js`),__vite__mapDeps([38,1,2,8,9,39,11,12,13,4,14,40,5,41,42,43,10,17,44,15,27,6,29,30,19,36]),import.meta.url),()=>T(()=>import(`../nodes/6.BrBFUA0s.js`),__vite__mapDeps([45,1,39,2,12,13,4,46,47,48,42,43,10,17,44,15]),import.meta.url),()=>T(()=>import(`../nodes/7.pajo8MfM.js`),__vite__mapDeps([49,1,39,2,12,4,42,43,10,17,15]),import.meta.url),()=>T(()=>import(`../nodes/8.Cc80_Igi.js`),__vite__mapDeps([50,1,12,4,41,24,18,17]),import.meta.url),()=>T(()=>import(`../nodes/9.D72NaL3l.js`),__vite__mapDeps([51,1,12,13,23,2,8,4,24,18,17,25,26,27,6,28,29,30,19,7]),import.meta.url),()=>T(()=>import(`../nodes/10.rT7cD8kX.js`),__vite__mapDeps([52,1,2,8,39,11,12,13,4,40,24,18,17,35,27,6,36,25,53,16,10,28,29,30,19,7]),import.meta.url),()=>T(()=>import(`../nodes/11.BAnV_Y5Y.js`),__vite__mapDeps([54,1,39,2,12,4,46,47,48,53,16,10,17,7]),import.meta.url),()=>T(()=>import(`../nodes/12.DCTRFMqo.js`),__vite__mapDeps([55,1,2,8,12,4,24,18,17,37,43,10,30,19,56]),import.meta.url)],M=[],N={"/":[2],"/builder-mode":[3],"/features":[4],"/features/[id]":[5],"/features/[id]/graph":[6],"/features/[id]/verify":[7],"/mcp":[8],"/projects":[9],"/projects/[id]":[10],"/projects/[id]/graph":[11],"/tutorial":[12]},P={handleError:(({error:e})=>{console.error(e)}),reroute:(()=>{}),transport:{}},F=Object.fromEntries(Object.entries(P.transport).map(([e,t])=>[e,t.decode])),I=Object.fromEntries(Object.entries(P.transport).map(([e,t])=>[e,t.encode])),L=!1,R=(e,t)=>F[e](t);export{R as decode,F as decoders,N as dictionary,I as encoders,L as hash,P as hooks,E as matchers,j as nodes,A as root,M as server_loads};
@@ -0,0 +1 @@
1
+ import{i as e,l as t}from"../chunks/ByaoVvNB.js";export{t as load_css,e as start};