unspaghettit 0.2.0 → 0.3.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 (270) hide show
  1. package/build/client/_app/immutable/assets/0.DSctqr5I.css +1 -0
  2. package/build/client/_app/immutable/assets/0.DSctqr5I.css.br +0 -0
  3. package/build/client/_app/immutable/assets/0.DSctqr5I.css.gz +0 -0
  4. package/build/client/_app/immutable/assets/BehaviorGraph.Bk0xQRZk.css +1 -0
  5. package/build/client/_app/immutable/assets/BehaviorGraph.Bk0xQRZk.css.br +0 -0
  6. package/build/client/_app/immutable/assets/BehaviorGraph.Bk0xQRZk.css.gz +0 -0
  7. package/build/client/_app/immutable/chunks/9nXQ5qrY2.js +1 -0
  8. package/build/client/_app/immutable/chunks/9nXQ5qrY2.js.br +0 -0
  9. package/build/client/_app/immutable/chunks/9nXQ5qrY2.js.gz +0 -0
  10. package/build/client/_app/immutable/chunks/B439_FLv.js +1 -0
  11. package/build/client/_app/immutable/chunks/B439_FLv.js.br +0 -0
  12. package/build/client/_app/immutable/chunks/B439_FLv.js.gz +0 -0
  13. package/build/client/_app/immutable/chunks/BCEY79Dw.js +1 -0
  14. package/build/client/_app/immutable/chunks/BCEY79Dw.js.br +2 -0
  15. package/build/client/_app/immutable/chunks/BCEY79Dw.js.gz +0 -0
  16. package/build/client/_app/immutable/chunks/{DBJWcC6Y.js → BYIrIC5L.js} +1 -1
  17. package/build/client/_app/immutable/chunks/BYIrIC5L.js.br +0 -0
  18. package/build/client/_app/immutable/chunks/BYIrIC5L.js.gz +0 -0
  19. package/build/client/_app/immutable/chunks/B_9TWPrx2.js +1 -0
  20. package/build/client/_app/immutable/chunks/B_9TWPrx2.js.br +0 -0
  21. package/build/client/_app/immutable/chunks/B_9TWPrx2.js.gz +0 -0
  22. package/build/client/_app/immutable/chunks/BvOhVtZg.js +1 -0
  23. package/build/client/_app/immutable/chunks/BvOhVtZg.js.br +1 -0
  24. package/build/client/_app/immutable/chunks/BvOhVtZg.js.gz +0 -0
  25. package/build/client/_app/immutable/chunks/CY3em1ma2.js +1 -0
  26. package/build/client/_app/immutable/chunks/CY3em1ma2.js.br +0 -0
  27. package/build/client/_app/immutable/chunks/CY3em1ma2.js.gz +0 -0
  28. package/build/client/_app/immutable/chunks/CgdRZPgI.js +1 -0
  29. package/build/client/_app/immutable/chunks/CgdRZPgI.js.br +0 -0
  30. package/build/client/_app/immutable/chunks/CgdRZPgI.js.gz +0 -0
  31. package/build/client/_app/immutable/chunks/D5speDV82.js +908 -0
  32. package/build/client/_app/immutable/chunks/D5speDV82.js.br +0 -0
  33. package/build/client/_app/immutable/chunks/D5speDV82.js.gz +0 -0
  34. package/build/client/_app/immutable/chunks/DkxwAIfJ2.js +1 -0
  35. package/build/client/_app/immutable/chunks/DkxwAIfJ2.js.br +0 -0
  36. package/build/client/_app/immutable/chunks/DkxwAIfJ2.js.gz +0 -0
  37. package/build/client/_app/immutable/chunks/{DatGSObE.js → OJscNS3T.js} +1 -1
  38. package/build/client/_app/immutable/chunks/OJscNS3T.js.br +0 -0
  39. package/build/client/_app/immutable/chunks/OJscNS3T.js.gz +0 -0
  40. package/build/client/_app/immutable/chunks/U9p9CtKG2.js +2 -0
  41. package/build/client/_app/immutable/chunks/U9p9CtKG2.js.br +0 -0
  42. package/build/client/_app/immutable/chunks/U9p9CtKG2.js.gz +0 -0
  43. package/build/client/_app/immutable/entry/app.Cd4S3giu.js +2 -0
  44. package/build/client/_app/immutable/entry/app.Cd4S3giu.js.br +0 -0
  45. package/build/client/_app/immutable/entry/app.Cd4S3giu.js.gz +0 -0
  46. package/build/client/_app/immutable/entry/start.C3xXQVkq.js +1 -0
  47. package/build/client/_app/immutable/entry/start.C3xXQVkq.js.br +0 -0
  48. package/build/client/_app/immutable/entry/start.C3xXQVkq.js.gz +0 -0
  49. package/build/client/_app/immutable/nodes/0.dIOlQ-0y.js +4 -0
  50. package/build/client/_app/immutable/nodes/0.dIOlQ-0y.js.br +0 -0
  51. package/build/client/_app/immutable/nodes/0.dIOlQ-0y.js.gz +0 -0
  52. package/build/client/_app/immutable/nodes/{1.KYdA6ppX.js → 1.Dyte3Ggf.js} +1 -1
  53. package/build/client/_app/immutable/nodes/1.Dyte3Ggf.js.br +2 -0
  54. package/build/client/_app/immutable/nodes/1.Dyte3Ggf.js.gz +0 -0
  55. package/build/client/_app/immutable/nodes/10.ivxAosDg.js +2 -0
  56. package/build/client/_app/immutable/nodes/10.ivxAosDg.js.br +0 -0
  57. package/build/client/_app/immutable/nodes/10.ivxAosDg.js.gz +0 -0
  58. package/build/client/_app/immutable/nodes/{9.CMW6a2Lg.js → 11.wvMfJKC2.js} +1 -1
  59. package/build/client/_app/immutable/nodes/11.wvMfJKC2.js.br +0 -0
  60. package/build/client/_app/immutable/nodes/11.wvMfJKC2.js.gz +0 -0
  61. package/build/client/_app/immutable/nodes/{2.DBz20KgG.js → 2.CmPPom9Z.js} +1 -1
  62. package/build/client/_app/immutable/nodes/2.CmPPom9Z.js.br +0 -0
  63. package/build/client/_app/immutable/nodes/2.CmPPom9Z.js.gz +0 -0
  64. package/build/client/_app/immutable/nodes/3.D-iCGCEx.js +1 -0
  65. package/build/client/_app/immutable/nodes/3.D-iCGCEx.js.br +0 -0
  66. package/build/client/_app/immutable/nodes/3.D-iCGCEx.js.gz +0 -0
  67. package/build/client/_app/immutable/nodes/{4.BvMzqBJj.js → 4.DbfAvO8Z.js} +1 -1
  68. package/build/client/_app/immutable/nodes/4.DbfAvO8Z.js.br +0 -0
  69. package/build/client/_app/immutable/nodes/4.DbfAvO8Z.js.gz +0 -0
  70. package/build/client/_app/immutable/nodes/5.CC5Q7lVw.js +42 -0
  71. package/build/client/_app/immutable/nodes/5.CC5Q7lVw.js.br +0 -0
  72. package/build/client/_app/immutable/nodes/5.CC5Q7lVw.js.gz +0 -0
  73. package/build/client/_app/immutable/nodes/6.CHIjlzpO.js +1 -0
  74. package/build/client/_app/immutable/nodes/6.CHIjlzpO.js.br +0 -0
  75. package/build/client/_app/immutable/nodes/6.CHIjlzpO.js.gz +0 -0
  76. package/build/client/_app/immutable/nodes/{6.BOHISqs-.js → 7.Ejs18ZUc.js} +1 -1
  77. package/build/client/_app/immutable/nodes/7.Ejs18ZUc.js.br +0 -0
  78. package/build/client/_app/immutable/nodes/7.Ejs18ZUc.js.gz +0 -0
  79. package/build/client/_app/immutable/nodes/{7.CemgNJfw.js → 8.B-HweAc8.js} +1 -1
  80. package/build/client/_app/immutable/nodes/8.B-HweAc8.js.br +0 -0
  81. package/build/client/_app/immutable/nodes/8.B-HweAc8.js.gz +0 -0
  82. package/build/client/_app/immutable/nodes/9.CKPeM6tx.js +5 -0
  83. package/build/client/_app/immutable/nodes/9.CKPeM6tx.js.br +0 -0
  84. package/build/client/_app/immutable/nodes/9.CKPeM6tx.js.gz +0 -0
  85. package/build/client/_app/version.json +1 -1
  86. package/build/client/_app/version.json.br +0 -0
  87. package/build/client/_app/version.json.gz +0 -0
  88. package/build/client/lyriks_logo.svg +148 -0
  89. package/build/client/lyriks_logo.svg.br +0 -0
  90. package/build/client/lyriks_logo.svg.gz +0 -0
  91. package/build/server/chunks/{0-C_o0oz-N.js → 0-Co8kcANG.js} +4 -4
  92. package/build/server/chunks/{0-C_o0oz-N.js.map → 0-Co8kcANG.js.map} +1 -1
  93. package/build/server/chunks/1-BSUItTig.js +9 -0
  94. package/build/server/chunks/{1-DPpKAKXV.js.map → 1-BSUItTig.js.map} +1 -1
  95. package/build/server/chunks/10-BygvxrZp.js +9 -0
  96. package/build/server/chunks/10-BygvxrZp.js.map +1 -0
  97. package/build/server/chunks/11-DRx0tRx2.js +9 -0
  98. package/build/server/chunks/11-DRx0tRx2.js.map +1 -0
  99. package/build/server/chunks/{2-AlfFqtL1.js → 2-BQT3m1vc.js} +3 -3
  100. package/build/server/chunks/{2-AlfFqtL1.js.map → 2-BQT3m1vc.js.map} +1 -1
  101. package/build/server/chunks/{3-vbjUt_51.js → 3-DPZ9BquJ.js} +3 -3
  102. package/build/server/chunks/{3-vbjUt_51.js.map → 3-DPZ9BquJ.js.map} +1 -1
  103. package/build/server/chunks/{4-BNow4x6D.js → 4-DHo47YX6.js} +3 -3
  104. package/build/server/chunks/{4-BNow4x6D.js.map → 4-DHo47YX6.js.map} +1 -1
  105. package/build/server/chunks/5-Cp9evBAG.js +9 -0
  106. package/build/server/chunks/5-Cp9evBAG.js.map +1 -0
  107. package/build/server/chunks/6-DiBq3bOV.js +9 -0
  108. package/build/server/chunks/6-DiBq3bOV.js.map +1 -0
  109. package/build/server/chunks/{6-QQ7r8Rd5.js → 7-C4hmS0dG.js} +3 -3
  110. package/build/server/chunks/{6-QQ7r8Rd5.js.map → 7-C4hmS0dG.js.map} +1 -1
  111. package/build/server/chunks/{7-CbPLGaIG.js → 8-CFFuDzBC.js} +4 -4
  112. package/build/server/chunks/{7-CbPLGaIG.js.map → 8-CFFuDzBC.js.map} +1 -1
  113. package/build/server/chunks/9-nhhKZJrs.js +9 -0
  114. package/build/server/chunks/9-nhhKZJrs.js.map +1 -0
  115. package/build/server/chunks/BehaviorGraph-m5kYj5HH.js +757 -0
  116. package/build/server/chunks/BehaviorGraph-m5kYj5HH.js.map +1 -0
  117. package/build/server/chunks/{FeatureCard-BQOY6gJQ.js → FeatureCard-CfbXNYe8.js} +2 -2
  118. package/build/server/chunks/{FeatureCard-BQOY6gJQ.js.map → FeatureCard-CfbXNYe8.js.map} +1 -1
  119. package/build/server/chunks/{ProgressBar-CfhccQ83.js → ProgressBar-DDoQJ_C9.js} +2 -2
  120. package/build/server/chunks/ProgressBar-DDoQJ_C9.js.map +1 -0
  121. package/build/server/chunks/{ProjectsIndex-CoDrvRya.js → ProjectsIndex-DUVJ3hyL.js} +2 -2
  122. package/build/server/chunks/{ProjectsIndex-CoDrvRya.js.map → ProjectsIndex-DUVJ3hyL.js.map} +1 -1
  123. package/build/server/chunks/TransitionCatalog-B8zHs-2E.js +271 -0
  124. package/build/server/chunks/TransitionCatalog-B8zHs-2E.js.map +1 -0
  125. package/build/server/chunks/{_layout.svelte-BREws55o.js → _layout.svelte-CLTmk0xU.js} +66 -15
  126. package/build/server/chunks/_layout.svelte-CLTmk0xU.js.map +1 -0
  127. package/build/server/chunks/{_page.svelte-De508ek8.js → _page.svelte-B1nG3PKn.js} +4 -4
  128. package/build/server/chunks/{_page.svelte-De508ek8.js.map → _page.svelte-B1nG3PKn.js.map} +1 -1
  129. package/build/server/chunks/{_page.svelte-Zf9H4KOP.js → _page.svelte-BW_nbAAH.js} +11 -315
  130. package/build/server/chunks/_page.svelte-BW_nbAAH.js.map +1 -0
  131. package/build/server/chunks/{_page.svelte-BqSC-1vK.js → _page.svelte-Caq7J0jU.js} +91 -47
  132. package/build/server/chunks/_page.svelte-Caq7J0jU.js.map +1 -0
  133. package/build/server/chunks/{_page.svelte-B7hT3P8E.js → _page.svelte-Cham-dsM.js} +4 -4
  134. package/build/server/chunks/{_page.svelte-B7hT3P8E.js.map → _page.svelte-Cham-dsM.js.map} +1 -1
  135. package/build/server/chunks/_page.svelte-Dhwjwph_.js +41 -0
  136. package/build/server/chunks/_page.svelte-Dhwjwph_.js.map +1 -0
  137. package/build/server/chunks/{_page.svelte-BKKCa9H5.js → _page.svelte-DlFVT40-.js} +3 -3
  138. package/build/server/chunks/{_page.svelte-BKKCa9H5.js.map → _page.svelte-DlFVT40-.js.map} +1 -1
  139. package/build/server/chunks/{_page.svelte-BtI2zZ_Z.js → _page.svelte-NVT2dzpG.js} +176 -327
  140. package/build/server/chunks/_page.svelte-NVT2dzpG.js.map +1 -0
  141. package/build/server/chunks/{_page.svelte-BKTveFAj.js → _page.svelte-Oj-W7G5s.js} +5 -5
  142. package/build/server/chunks/{_page.svelte-BKTveFAj.js.map → _page.svelte-Oj-W7G5s.js.map} +1 -1
  143. package/build/server/chunks/_page.svelte-Z_kK2lHY.js +68 -0
  144. package/build/server/chunks/_page.svelte-Z_kK2lHY.js.map +1 -0
  145. package/build/server/chunks/{builderModeStore.svelte-ihupr-3p.js → builderModeStore.svelte-BpRIU_zP.js} +217 -6
  146. package/build/server/chunks/builderModeStore.svelte-BpRIU_zP.js.map +1 -0
  147. package/build/server/chunks/client-DeX3TC3s.js +51 -0
  148. package/build/server/chunks/{client-DfpLcAZ9.js.map → client-DeX3TC3s.js.map} +1 -1
  149. package/build/server/chunks/{error.svelte-C35KOpru.js → error.svelte-Cdjeq3L2.js} +4 -4
  150. package/build/server/chunks/{error.svelte-C35KOpru.js.map → error.svelte-Cdjeq3L2.js.map} +1 -1
  151. package/build/server/chunks/featureStore.svelte-DIYgPBVm.js +161 -0
  152. package/build/server/chunks/featureStore.svelte-DIYgPBVm.js.map +1 -0
  153. package/build/server/chunks/{hooks.server-Rv301GTB.js → hooks.server-y3jdg_sB.js} +6 -2
  154. package/build/server/chunks/hooks.server-y3jdg_sB.js.map +1 -0
  155. package/build/server/chunks/{internal-BPKrFkK1.js → internal-KYK0WpL7.js} +4 -4
  156. package/build/server/chunks/{internal-BPKrFkK1.js.map → internal-KYK0WpL7.js.map} +1 -1
  157. package/build/server/chunks/projectFeaturesStore.svelte-2o-72_vr.js +313 -0
  158. package/build/server/chunks/projectFeaturesStore.svelte-2o-72_vr.js.map +1 -0
  159. package/build/server/chunks/{reconcile-Dv7jS3C8.js → reconcile-B5xqb6-s.js} +3 -272
  160. package/build/server/chunks/reconcile-B5xqb6-s.js.map +1 -0
  161. package/build/server/chunks/registry-DqAn_hVE.js +21 -0
  162. package/build/server/chunks/registry-DqAn_hVE.js.map +1 -0
  163. package/build/server/chunks/{state-CpLVNZq7.js → state-DBjl9lhV.js} +2 -2
  164. package/build/server/chunks/{state-CpLVNZq7.js.map → state-DBjl9lhV.js.map} +1 -1
  165. package/build/server/index.js +1 -1
  166. package/build/server/index.js.map +1 -1
  167. package/build/server/manifest.js +33 -17
  168. package/build/server/manifest.js.map +1 -1
  169. package/cli/commands/dashboard.ts +14 -0
  170. package/cli/commands/init.ts +26 -0
  171. package/cli/commands/theme.ts +62 -0
  172. package/cli/unspa.ts +38 -2
  173. package/cli/util/context-files.ts +5 -0
  174. package/cli/util/theme.ts +34 -0
  175. package/mcp-server/sync-notifier.ts +88 -35
  176. package/package.json +2 -1
  177. package/src/app.css +187 -0
  178. package/src/app.html +15 -1
  179. package/src/features/behavior-model/domain/services/BehaviorGraphModel.ts +531 -0
  180. package/src/features/behavior-model/presentation/adapters/VisBehaviorGraphRenderer.ts +492 -0
  181. package/src/features/behavior-model/presentation/components/BehaviorGraph.svelte +370 -0
  182. package/src/features/behavior-model/presentation/components/FeatureHeader.svelte +13 -5
  183. package/src/features/behavior-model/presentation/view-models/BehaviorGraphTheme.ts +43 -0
  184. package/src/features/builder-mode/domain/BuilderModeDashboard.ts +7 -1
  185. package/src/features/builder-mode/presentation/components/BuilderModeDashboard.svelte +78 -16
  186. package/src/features/builder-mode/presentation/components/BuilderTagChips.svelte +25 -0
  187. package/src/features/builder-mode/presentation/stores/builderModeStore.svelte.ts +247 -3
  188. package/src/features/projects/presentation/components/ProjectEditor.svelte +7 -0
  189. package/src/features/simulator/application/use-cases/RunScenarios.ts +15 -1
  190. package/src/hooks.server.ts +11 -1
  191. package/src/lib/theme/registry.ts +77 -0
  192. package/src/lib/theme/themeStore.svelte.ts +64 -0
  193. package/src/routes/+layout.svelte +184 -30
  194. package/src/routes/features/[id]/graph/+page.svelte +34 -0
  195. package/src/routes/projects/[id]/graph/+page.svelte +79 -0
  196. package/src/shared/presentation/components/ProgressBar.svelte +1 -1
  197. package/src/shared/presentation/toast/SyncToast.svelte +14 -3
  198. package/src/shared/presentation/toast/viewLinkResolver.ts +32 -0
  199. package/static/lyriks_logo.svg +148 -0
  200. package/build/client/_app/immutable/assets/0.DFMDYAU9.css +0 -1
  201. package/build/client/_app/immutable/assets/0.DFMDYAU9.css.br +0 -0
  202. package/build/client/_app/immutable/assets/0.DFMDYAU9.css.gz +0 -0
  203. package/build/client/_app/immutable/chunks/BO66rBOa2.js +0 -1
  204. package/build/client/_app/immutable/chunks/BO66rBOa2.js.br +0 -0
  205. package/build/client/_app/immutable/chunks/BO66rBOa2.js.gz +0 -0
  206. package/build/client/_app/immutable/chunks/DBJWcC6Y.js.br +0 -0
  207. package/build/client/_app/immutable/chunks/DBJWcC6Y.js.gz +0 -0
  208. package/build/client/_app/immutable/chunks/DHoA038D.js +0 -1
  209. package/build/client/_app/immutable/chunks/DHoA038D.js.br +0 -2
  210. package/build/client/_app/immutable/chunks/DHoA038D.js.gz +0 -0
  211. package/build/client/_app/immutable/chunks/DatGSObE.js.br +0 -0
  212. package/build/client/_app/immutable/chunks/DatGSObE.js.gz +0 -0
  213. package/build/client/_app/immutable/chunks/DjWKKtqp.js +0 -1
  214. package/build/client/_app/immutable/chunks/DjWKKtqp.js.br +0 -1
  215. package/build/client/_app/immutable/chunks/DjWKKtqp.js.gz +0 -0
  216. package/build/client/_app/immutable/chunks/Dq0DUAz1.js +0 -1
  217. package/build/client/_app/immutable/chunks/Dq0DUAz1.js.br +0 -0
  218. package/build/client/_app/immutable/chunks/Dq0DUAz1.js.gz +0 -0
  219. package/build/client/_app/immutable/chunks/iQu0D9Ux.js +0 -1
  220. package/build/client/_app/immutable/chunks/iQu0D9Ux.js.br +0 -0
  221. package/build/client/_app/immutable/chunks/iQu0D9Ux.js.gz +0 -0
  222. package/build/client/_app/immutable/entry/app.CLgh6Mx_.js +0 -2
  223. package/build/client/_app/immutable/entry/app.CLgh6Mx_.js.br +0 -0
  224. package/build/client/_app/immutable/entry/app.CLgh6Mx_.js.gz +0 -0
  225. package/build/client/_app/immutable/entry/start.D5GPCQZD.js +0 -1
  226. package/build/client/_app/immutable/entry/start.D5GPCQZD.js.br +0 -0
  227. package/build/client/_app/immutable/entry/start.D5GPCQZD.js.gz +0 -0
  228. package/build/client/_app/immutable/nodes/0.BOoI-hsu.js +0 -4
  229. package/build/client/_app/immutable/nodes/0.BOoI-hsu.js.br +0 -0
  230. package/build/client/_app/immutable/nodes/0.BOoI-hsu.js.gz +0 -0
  231. package/build/client/_app/immutable/nodes/1.KYdA6ppX.js.br +0 -2
  232. package/build/client/_app/immutable/nodes/1.KYdA6ppX.js.gz +0 -0
  233. package/build/client/_app/immutable/nodes/2.DBz20KgG.js.br +0 -0
  234. package/build/client/_app/immutable/nodes/2.DBz20KgG.js.gz +0 -0
  235. package/build/client/_app/immutable/nodes/3.19DIoFtw.js +0 -1
  236. package/build/client/_app/immutable/nodes/3.19DIoFtw.js.br +0 -0
  237. package/build/client/_app/immutable/nodes/3.19DIoFtw.js.gz +0 -0
  238. package/build/client/_app/immutable/nodes/4.BvMzqBJj.js.br +0 -0
  239. package/build/client/_app/immutable/nodes/4.BvMzqBJj.js.gz +0 -0
  240. package/build/client/_app/immutable/nodes/5.Dq6obSGG.js +0 -42
  241. package/build/client/_app/immutable/nodes/5.Dq6obSGG.js.br +0 -0
  242. package/build/client/_app/immutable/nodes/5.Dq6obSGG.js.gz +0 -0
  243. package/build/client/_app/immutable/nodes/6.BOHISqs-.js.br +0 -0
  244. package/build/client/_app/immutable/nodes/6.BOHISqs-.js.gz +0 -0
  245. package/build/client/_app/immutable/nodes/7.CemgNJfw.js.br +0 -0
  246. package/build/client/_app/immutable/nodes/7.CemgNJfw.js.gz +0 -0
  247. package/build/client/_app/immutable/nodes/8.DejSfIYh.js +0 -5
  248. package/build/client/_app/immutable/nodes/8.DejSfIYh.js.br +0 -0
  249. package/build/client/_app/immutable/nodes/8.DejSfIYh.js.gz +0 -0
  250. package/build/client/_app/immutable/nodes/9.CMW6a2Lg.js.br +0 -0
  251. package/build/client/_app/immutable/nodes/9.CMW6a2Lg.js.gz +0 -0
  252. package/build/server/chunks/1-DPpKAKXV.js +0 -9
  253. package/build/server/chunks/5-D7OCJpxD.js +0 -9
  254. package/build/server/chunks/5-D7OCJpxD.js.map +0 -1
  255. package/build/server/chunks/8-CVO-E-sf.js +0 -9
  256. package/build/server/chunks/8-CVO-E-sf.js.map +0 -1
  257. package/build/server/chunks/9-DxT1baO5.js +0 -9
  258. package/build/server/chunks/9-DxT1baO5.js.map +0 -1
  259. package/build/server/chunks/ProgressBar-CfhccQ83.js.map +0 -1
  260. package/build/server/chunks/_layout.svelte-BREws55o.js.map +0 -1
  261. package/build/server/chunks/_page.svelte-BqSC-1vK.js.map +0 -1
  262. package/build/server/chunks/_page.svelte-BtI2zZ_Z.js.map +0 -1
  263. package/build/server/chunks/_page.svelte-Zf9H4KOP.js.map +0 -1
  264. package/build/server/chunks/builderModeStore.svelte-ihupr-3p.js.map +0 -1
  265. package/build/server/chunks/client-DfpLcAZ9.js +0 -24
  266. package/build/server/chunks/hooks.server-Rv301GTB.js.map +0 -1
  267. package/build/server/chunks/reconcile-Dv7jS3C8.js.map +0 -1
  268. /package/build/client/_app/immutable/assets/{9.nv0I59TU.css → 11.nv0I59TU.css} +0 -0
  269. /package/build/client/_app/immutable/assets/{9.nv0I59TU.css.br → 11.nv0I59TU.css.br} +0 -0
  270. /package/build/client/_app/immutable/assets/{9.nv0I59TU.css.gz → 11.nv0I59TU.css.gz} +0 -0
@@ -0,0 +1 @@
1
+ import{A as e,C as t,E as n,F as r,G as i,I as a,J as o,L as s,M as c,N as l,P as u,Q as d,R as f,S as p,U as m,V as h,W as g,X as _,Z as v,_ as y,_t as b,a as x,b as S,c as C,ct as w,d as T,et as E,gt as D,j as O,k,l as A,lt as j,mt as M,n as N,pt as P,r as ee,rt as F,s as te,tt as I,u as L,v as R,x as z,y as ne,z as B}from"../chunks/BPl9BITm.js";import{r as re,t as ie}from"../chunks/OJscNS3T.js";import"../chunks/xihTtKlq.js";import{t as V}from"../chunks/B439_FLv.js";import{a as ae,n as oe,r as se,t as H}from"../chunks/ib21i2T_.js";import{at as U,lt as W,n as ce,r as G,ut as K}from"../chunks/Bp2_Vghh.js";import"../chunks/suTxxv1t.js";import{a as le,i as q,n as ue}from"../chunks/CgdRZPgI.js";import"../chunks/BCEY79Dw.js";import{t as J}from"../chunks/BvOhVtZg.js";var de=b({load:()=>fe}),fe=()=>{if(!ue(`builder`))throw J(307,`/projects`)};function pe(e,{from:t,to:n},r={}){var{delay:i=0,duration:a=e=>Math.sqrt(e)*120,easing:o=H}=r,s=getComputedStyle(e),c=s.transform===`none`?``:s.transform,[l,u]=s.transformOrigin.split(` `).map(parseFloat);l/=e.clientWidth,u/=e.clientHeight;var d=Y(e),f=e.clientWidth/n.width/d,p=e.clientHeight/n.height/d,m=t.left+t.width*l,h=t.top+t.height*u,g=n.left+n.width*l,_=n.top+n.height*u,v=(m-g)*f,y=(h-_)*p,b=t.width/n.width,x=t.height/n.height;return{delay:i,duration:typeof a==`function`?a(Math.sqrt(v*v+y*y)):a,easing:o,css:(e,t)=>`transform: ${c} translate(${t*v}px, ${t*y}px) scale(${e+t*b}, ${e+t*x});`}}function Y(e){if(`currentCSSZoom`in e)return e.currentCSSZoom;for(var t=e,n=1;t!==null;)n*=+getComputedStyle(t).zoom,t=t.parentElement;return n}var X=l(`<button type="button" class="relative z-20 mt-1 inline-flex items-center gap-1 text-xs font-semibold text-brand-400 transition hover:text-brand-300"><span> </span> <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><path d="M4 6l4 4 4-4" stroke-linecap="round" stroke-linejoin="round"></path></svg></button>`),Z=l(`<div><p class="clamp-2 text-sm leading-5 text-slate-400 svelte-btsgvr"> </p> <!></div>`);function me(t,n){j(n,!0);let r=x(n,`class`,3,``),a=I(!1),o=I(!1),c=I(!1),l=I(null),u=`linear-gradient(to bottom, #000 calc(100% - 1.3em), transparent)`,f=()=>typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches,p=e=>(parseFloat(getComputedStyle(e).lineHeight)||20)*2,m=null;i(()=>{let e=B(l);if(!e)return;n.text;let t=()=>{B(a)||B(c)||E(o,e.scrollHeight>e.clientHeight+1)};if(t(),typeof ResizeObserver>`u`)return;let r=new ResizeObserver(t);return r.observe(e),()=>r.disconnect()});function h(){let e=B(l);e&&(B(a)?b(e):y(e))}function v(e,t,n,r,i){m?.(),E(c,!0),e.style.overflow=`hidden`,e.style.webkitMaskImage=u,e.style.maskImage=u,e.style.transition=`none`,e.style.maxHeight=`${t}px`,e.offsetHeight,e.style.transition=`max-height ${r}`,e.style.maxHeight=`${n}px`;let a=t=>{t.propertyName===`max-height`&&(e.removeEventListener(`transitionend`,a),m=null,E(c,!1),i())};e.addEventListener(`transitionend`,a),m=()=>e.removeEventListener(`transitionend`,a)}function y(e){let t=e.clientHeight;E(a,!0),e.classList.remove(`clamp-2`),!f()&&(e.offsetHeight,v(e,t,e.scrollHeight,`560ms cubic-bezier(0.16, 1, 0.3, 1)`,()=>{e.style.transition=``,e.style.maxHeight=`none`,e.style.overflow=``,e.style.webkitMaskImage=``,e.style.maskImage=``}))}function b(e){let t=e.clientHeight;if(E(a,!1),f()){e.classList.add(`clamp-2`),e.style.maxHeight=``;return}v(e,t,p(e),`440ms cubic-bezier(0.65, 0, 0.35, 1)`,()=>{e.classList.add(`clamp-2`),e.style.transition=``,e.style.maxHeight=``,e.style.overflow=``,e.style.webkitMaskImage=``,e.style.maskImage=``})}var S=Z(),C=_(S),T=_(C,!0);M(C),te(C,e=>E(l,e),()=>B(l));var D=d(C,2),A=t=>{var n=X(),r=_(n),i=_(r,!0);M(r);var o=d(r,2);M(n),g(()=>{L(n,`aria-expanded`,B(a)),e(i,B(a)?`View less`:`View more`),R(o,0,`h-3 w-3 transition-transform duration-500 ease-out ${B(a)?`rotate-180`:``}`)}),s(`click`,n,h),O(t,n)};k(D,e=>{(B(o)||B(a)||B(c))&&e(A)}),M(S),g(()=>{R(S,1,ne(r()),`svelte-btsgvr`),e(T,n.text)}),O(t,S),w()}a([`click`]);var he=0,Q=l(`<span> </span>`),ge=l(`<button type="button"><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" class="size-3.5" aria-hidden="true"><path d="M20.59 13.41 11 3.83A2 2 0 0 0 9.59 3H4a1 1 0 0 0-1 1v5.59A2 2 0 0 0 3.59 11l9.58 9.59a2 2 0 0 0 2.83 0l4.59-4.59a2 2 0 0 0 0-2.83z"></path><circle cx="7.5" cy="7.5" r="1.1" fill="currentColor" stroke="none"></circle></svg> <!></button>`),_e=l(`<form class="inline-flex items-center gap-1"><input placeholder="Type" class="h-6 w-16 rounded border border-slate-700 bg-slate-900/70 px-1.5 text-[11px] text-slate-200 outline-none focus:border-brand-500"/> <input placeholder="Value" class="h-6 w-20 rounded border border-slate-700 bg-slate-900/70 px-1.5 text-[11px] text-slate-200 outline-none focus:border-brand-500"/> <button type="submit" class="text-[11px] font-semibold text-brand-300 hover:text-brand-200" title="Rename everywhere">✓</button> <button type="button" class="text-[11px] text-slate-500 hover:text-slate-300" title="Cancel">✕</button></form>`),ve=l(`<button type="button" class="truncate"> </button>`),ye=l(`<span class="truncate"> </span>`),be=l(`<button type="button" class="shrink-0 opacity-0 transition group-hover/chip:opacity-70 hover:opacity-100!" title="Rename (applies everywhere)">✎</button>`),xe=l(`<button type="button" class="shrink-0 opacity-0 transition group-hover/chip:opacity-70 hover:opacity-100!" title="Remove from this item">✕</button>`),Se=l(`<span class="group/chip inline-flex max-w-full items-center gap-1 rounded-full py-0.5 pl-2 pr-1.5 text-[10px] font-medium transition"><span class="size-1.5 shrink-0 rounded-full"></span> <!> <!> <!></span>`),Ce=l(`<form class="inline-flex items-center gap-1"><input placeholder="Type" class="h-6 w-16 rounded border border-slate-700 bg-slate-900/70 px-1.5 text-[11px] text-slate-200 outline-none focus:border-brand-500"/> <input placeholder="Value" class="h-6 w-20 rounded border border-slate-700 bg-slate-900/70 px-1.5 text-[11px] text-slate-200 outline-none focus:border-brand-500"/> <button type="submit" class="text-[11px] font-semibold text-brand-300 hover:text-brand-200" title="Add tag">✓</button> <button type="button" class="text-[11px] text-slate-500 hover:text-slate-300" title="Cancel">✕</button></form>`),we=l(`<button type="button" class="size-5 items-center justify-center rounded-full border border-dashed border-slate-600 text-[11px] leading-none text-slate-400 transition hover:border-brand-500 hover:text-brand-300 hidden group-hover:inline-flex group-focus-within:inline-flex" aria-label="Add tag" title="Add tag">+</button>`),Te=l(`<!> <!>`,1),Ee=l(`<option></option>`),De=l(`<datalist></datalist>`),Oe=l(`<div><div class="flex flex-wrap items-center gap-1.5"><!> <!> <!></div></div>`);function ke(t,r){j(r,!0);let i=(e,t=!1)=>{let n=e.firstElementChild;if(!n)return;let r=typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches,i=typeof ResizeObserver<`u`,a=n.offsetHeight,o=()=>{e.style.transition=``,e.style.overflow=`visible`,e.style.height=`auto`},s=()=>{if(e.style.overflow=`hidden`,!i){e.style.height=`auto`;return}let t=e.offsetHeight;if(a=n.offsetHeight,r){e.style.height=`${a}px`;return}e.style.transition=`height 240ms cubic-bezier(0.22, 1, 0.36, 1)`,e.style.height=`${t}px`,e.offsetHeight,e.style.height=`${a}px`},c=t;c?o():(e.style.overflow=`hidden`,e.style.height=`${a}px`,r||(e.style.transition=`height 240ms cubic-bezier(0.22, 1, 0.36, 1)`));let l=null;return i?(l=new ResizeObserver(()=>{if(c)return;let t=n.offsetHeight;if(t!==a){if(r){e.style.height=`${t}px`,a=t;return}e.style.height=`${a}px`,e.offsetHeight,e.style.height=`${t}px`,a=t}}),l.observe(n)):c||(e.style.height=`auto`),{update(e){e!==c&&(c=e,c?o():s())},destroy:()=>l?.disconnect()}},a=x(r,`typeOptions`,19,()=>[]),o=x(r,`collapsible`,3,!1),l=x(r,`class`,3,``),u=I(!1),p=`buildertags-types-${++he}`,m=`#64748b`,b=(e,t)=>{let n=e??m,r=t?42:20,i=t?72:42;return[`background-color: color-mix(in srgb, ${n} ${r}%, #0b1220)`,`color: color-mix(in srgb, ${n} 72%, white)`,`box-shadow: inset 0 0 0 1px color-mix(in srgb, ${n} ${i}%, transparent)`].join(`; `)},T=I(!1),D=I(``),N=I(``),P=I(null);async function ee(){E(T,!0),await h(),B(P)?.focus()}function z(){E(T,!1),E(D,``),E(N,``)}async function re(e){e.preventDefault();let t=B(N).trim();if(!t)return;let n=B(D).trim()||`tag`;z(),await r.onAdd?.(n,t)}let ie=I(null),V=I(``),ae=I(``),oe=I(null);async function se(e){E(ie,W(e),!0),E(V,U(e.type),!0),E(ae,U(e.value),!0),await h(),B(oe)?.select()}function H(){E(ie,null)}async function ce(e,t){e.preventDefault();let n=B(ae).trim(),i=B(V).trim();!n||!i||(H(),await r.onRename?.(t,{type:i,value:n}))}function G(e,t){e.key===`Escape`&&t()}var le=c(),ue=v(le),J=t=>{var h=Oe(),x=_(h),w=_(x),j=t=>{var n=ge(),i=d(_(n),2),a=t=>{var n=Q(),i=_(n,!0);M(n),g(()=>e(i,r.tags.length)),O(t,n)};k(i,e=>{!B(u)&&r.tags.length>0&&e(a)}),M(n),g(()=>{R(n,1,`inline-flex shrink-0 items-center gap-1 rounded-full px-1.5 py-0.5 text-[10px] font-medium text-slate-400 transition hover:text-brand-300 ${B(u)?`bg-slate-800/60 text-slate-200`:``}`),L(n,`aria-expanded`,B(u)),L(n,`aria-label`,B(u)?`Hide tags`:`Show tags`),L(n,`title`,B(u)?`Hide tags`:r.tags.length>0?`Show ${r.tags.length} tag${r.tags.length===1?``:`s`}`:`Add a tag`)}),s(`click`,n,()=>E(u,!B(u))),O(t,n)};k(w,e=>{o()&&e(j)});var I=d(w,2),le=t=>{var i=Te(),o=v(i);n(o,17,()=>r.tags,e=>W(e),(t,n)=>{var i=c(),o=v(i),l=e=>{var t=_e(),r=_(t);A(r),te(r,e=>E(oe,e),()=>B(oe));var i=d(r,2);A(i);var o=d(i,4);M(t),g(()=>L(r,`list`,a().length>0?p:void 0)),f(`submit`,t,e=>ce(e,B(n))),s(`keydown`,r,e=>G(e,H)),C(r,()=>B(V),e=>E(V,e)),s(`keydown`,i,e=>G(e,H)),C(i,()=>B(ae),e=>E(ae,e)),s(`click`,o,H),O(e,t)},u=F(()=>B(ie)===W(B(n))),h=t=>{let i=F(()=>q.colorForTag(B(n))),a=F(()=>r.isActive?.(B(n))??!1);var o=Se(),c=_(o),l=d(c,2),u=t=>{var i=ve(),o=_(i,!0);M(i),g((t,n)=>{L(i,`aria-pressed`,B(a)),L(i,`title`,t),e(o,n)},[()=>`${K(B(n))} — click to filter`,()=>U(B(n).value)]),s(`click`,i,()=>r.onToggle(B(n))),O(t,i)},f=t=>{var r=ye(),i=_(r,!0);M(r),g((t,n)=>{L(r,`title`,t),e(i,n)},[()=>K(B(n)),()=>U(B(n).value)]),O(t,r)};k(l,e=>{r.onToggle?e(u):e(f,-1)});var p=d(l,2),h=e=>{var t=be();g(e=>L(t,`aria-label`,e),[()=>`Rename ${K(B(n))}`]),s(`click`,t,()=>se(B(n))),O(e,t)};k(p,e=>{r.onRename&&e(h)});var v=d(p,2),x=e=>{var t=xe();g(e=>L(t,`aria-label`,e),[()=>`Remove ${K(B(n))}`]),s(`click`,t,()=>r.onRemove(B(n))),O(e,t)};k(v,e=>{r.onRemove&&e(x)}),M(o),g(e=>{y(o,e),y(c,`background-color: ${B(i)??m??``}`)},[()=>b(B(i),B(a))]),O(t,o)};k(o,e=>{B(u)?e(l):e(h,-1)}),O(t,i)});var l=d(o,2),u=e=>{var t=c(),n=v(t),r=e=>{var t=Ce(),n=_(t);A(n),te(n,e=>E(P,e),()=>B(P));var r=d(n,2);A(r);var i=d(r,4);M(t),g(()=>L(n,`list`,a().length>0?p:void 0)),f(`submit`,t,re),s(`keydown`,n,e=>G(e,z)),C(n,()=>B(D),e=>E(D,e)),s(`keydown`,r,e=>G(e,z)),C(r,()=>B(N),e=>E(N,e)),s(`click`,i,z),O(e,t)},i=e=>{var t=we();s(`click`,t,ee),O(e,t)};k(n,e=>{B(T)?e(r):e(i,-1)}),O(e,t)};k(l,e=>{r.onAdd&&e(u)}),O(t,i)};k(I,e=>{(!o()||B(u))&&e(le)});var ue=d(I,2),J=e=>{var t=De();n(t,20,a,e=>e,(e,t)=>{var n=Ee(),r={};g(()=>{r!==(r=t)&&(n.value=(n.__value=t)??``)}),O(e,n)}),M(t),g(()=>L(t,`id`,p)),O(e,t)};k(ue,e=>{a().length>0&&e(J)}),M(x),M(h),S(h,(e,t)=>i?.(e,t),()=>B(T)||B(ie)!==null),g(()=>R(h,1,ne(l()))),O(t,h)};k(ue,e=>{(r.tags.length>0||r.onAdd)&&e(J)}),O(t,le),w()}a([`click`,`keydown`]);var Ae=l(`<div><div class="score-meter__dial svelte-tnjw1f"><svg viewBox="0 0 36 36" class="score-meter__svg svelte-tnjw1f" aria-hidden="true"><circle cx="18" cy="18" r="16" fill="none" class="score-meter__outer svelte-tnjw1f" stroke-width="1.2"></circle><circle cx="18" cy="18" r="14" fill="none" class="score-meter__track svelte-tnjw1f" stroke-width="2.4"></circle><circle cx="18" cy="18" r="14" fill="none" class="score-meter__arc-glow svelte-tnjw1f" stroke-width="8"></circle><circle cx="18" cy="18" r="14" fill="none" class="score-meter__arc svelte-tnjw1f" stroke-width="2.4"></circle></svg> <span class="score-meter__readout svelte-tnjw1f"> </span></div> <span class="score-meter__label svelte-tnjw1f"> </span></div>`);function $(t,n){let r=F(()=>n.value===null?0:Math.max(0,Math.min(100,n.value))),i=F(()=>`${B(r)}%`),a=F(()=>B(r)*.87965),o=F(()=>B(r)>=80?`is-high`:B(r)>=45?`is-mid`:`is-low`);var s=Ae(),c=_(s),l=_(c),u=d(_(l),2),f=d(u);M(l);var p=d(l,2),m=_(p,!0);M(p),M(c);var h=d(c,2),v=_(h,!0);M(h),M(s),g(()=>{R(s,1,`score-meter ${B(o)??``}`,`svelte-tnjw1f`),L(u,`stroke-linecap`,B(r)>0?`round`:`butt`),L(u,`stroke-dasharray`,`${B(a)} 87.965`),L(f,`stroke-linecap`,B(r)>0?`round`:`butt`),L(f,`stroke-dasharray`,`${B(a)} 87.965`),e(m,B(i)),e(v,n.label)}),O(t,s)}var je=t=>{var n=c(),r=v(n),i=t=>{let n=F(()=>q.activeTag);var r=Fe(),i=d(_(r),2),a=_(i,!0);M(i),P(2),M(r),g((t,n)=>{L(r,`title`,t),e(a,n)},[()=>`Clear tag filter: ${U(B(n).type)} · ${U(B(n).value)}`,()=>U(B(n).value)]),s(`click`,r,()=>q.clearTag()),O(t,r)};k(r,e=>{q.activeTag&&e(i)}),O(t,n)},Me=(t,n=D)=>{var r=Ie(),i=_(r,!0);M(r),g(()=>{L(r,`title`,`Build queue position #${n()}`),e(i,n())}),O(t,r)},Ne=(e,t=D,n=D)=>{let i=F(()=>q.queuePositionForAction(t(),n())),a=F(()=>B(i)!==null);var o=Re(),c=_(o),l=e=>{var t=Le();Me(v(t),()=>B(i)),P(2),O(e,t)},u=e=>{O(e,r(`+ Implement`))};k(c,e=>{B(i)===null?e(u,-1):e(l)}),M(o),g(()=>{R(o,1,`relative z-20 inline-flex shrink-0 items-center gap-1 rounded-full border px-2.5 py-1 text-[11px] font-semibold transition ${B(a)?`border-brand-400 bg-brand-500 text-white shadow-sm shadow-brand-500/30`:`border-slate-700 bg-slate-800/60 text-slate-300 hover:border-brand-500 hover:text-brand-300`}`,`svelte-xw1ck7`),L(o,`aria-pressed`,B(a)),L(o,`title`,B(a)?`In build queue at position #${B(i)} (click to remove)`:`Add to build queue`)}),s(`click`,o,()=>q.toggleAction(t(),n())),O(e,o)},Pe=(e,t=D)=>{let n=F(()=>q.queuePositionForFeature(t())),i=F(()=>B(n)!==null);var a=Be(),o=_(a),c=e=>{var t=ze();Me(v(t),()=>B(n)),P(2),O(e,t)},l=e=>{O(e,r(`+ Implement all`))};k(o,e=>{B(n)===null?e(l,-1):e(c)}),M(a),g(()=>{R(a,1,`relative z-20 inline-flex shrink-0 items-center gap-1 rounded-full border px-2.5 py-1 text-[11px] font-semibold transition ${B(i)?`border-brand-400 bg-brand-500 text-white shadow-sm shadow-brand-500/30`:`border-slate-700 bg-slate-800/60 text-slate-300 hover:border-brand-500 hover:text-brand-300`}`,`svelte-xw1ck7`),L(a,`aria-pressed`,B(i)),L(a,`title`,B(i)?`Whole feature queued at position #${B(n)} — the build implements whatever is still missing (click to remove)`:`Queue the whole feature: implement everything still missing`)}),s(`click`,a,()=>q.toggleFeature(t())),O(e,a)},Fe=l(`<button type="button" class="inline-flex shrink-0 items-center gap-1.5 rounded-full border border-brand-500/50 bg-brand-500/10 px-2.5 py-1 text-xs font-medium text-brand-200 transition hover:bg-brand-500/20 svelte-xw1ck7"><span class="text-brand-300/70 svelte-xw1ck7">Tag</span> <span class="font-semibold svelte-xw1ck7"> </span> <span aria-hidden="true" class="svelte-xw1ck7">✕</span></button>`),Ie=l(`<span class="grid h-4 min-w-4 shrink-0 place-items-center rounded-full bg-white/25 px-1 text-[10px] font-bold leading-none tabular-nums svelte-xw1ck7"> </span>`),Le=l(`<!> <span class="svelte-xw1ck7">Queued</span>`,1),Re=l(`<button type="button"><!></button>`),ze=l(`<!> <span class="svelte-xw1ck7">Queued</span>`,1),Be=l(`<button type="button"><!></button>`),Ve=u(`<svg class="h-4 w-4 shrink-0 animate-spin text-brand-400 svelte-xw1ck7" viewBox="0 0 24 24" fill="none" aria-label="Working" role="status"><circle class="opacity-25 svelte-xw1ck7" cx="12" cy="12" r="10" stroke="currentColor" stroke-width="3"></circle><path class="opacity-90 svelte-xw1ck7" fill="currentColor" d="M12 2a10 10 0 0 1 10 10h-3a7 7 0 0 0-7-7V2z"></path></svg>`),He=l(`<button type="button" class="relative z-20 shrink-0 rounded-full border border-slate-700 bg-slate-800/60 px-2.5 py-1 text-[11px] font-semibold text-slate-300 transition hover:border-brand-500 hover:bg-brand-500 hover:text-white svelte-xw1ck7" title="Accept this idea (turn it into a feature) and add it to the build queue">+ Implement</button> <button type="button" class="shrink-0 rounded-md p-1 text-slate-500 transition hover:bg-slate-700 hover:text-rose-300 svelte-xw1ck7" aria-label="Dismiss suggestion" title="Dismiss this suggestion (the assistant won't suggest it again)">✕</button>`,1),Ue=l(`<li class="flex items-start gap-2 text-sm leading-5 text-slate-300 svelte-xw1ck7"><span> </span> <span class="min-w-0 flex-1 svelte-xw1ck7"> </span> <!></li>`),We=l(`<ul class="space-y-2 svelte-xw1ck7"></ul>`),Ge=l(`<article class="skeuo-card skeuo-card--interactive skeuo-card--feature p-4 svelte-xw1ck7"><div class="flex items-center gap-2 svelte-xw1ck7"><h4 class="truncate text-base font-semibold text-white svelte-xw1ck7"> </h4> <!></div> <!> <div class="mt-3 flex items-center gap-6 border-t border-slate-800 pt-3 svelte-xw1ck7"><!> <!></div></article>`),Ke=l(`<div class="absolute inset-y-0 rounded-full svelte-xw1ck7"></div>`),qe=l(`<div class="flex items-center gap-2 svelte-xw1ck7"><span class="w-12 shrink-0 text-slate-400 svelte-xw1ck7"> </span> <div role="slider" tabindex="0" class="relative h-2.5 flex-1 cursor-pointer touch-none rounded-full bg-slate-800 select-none svelte-xw1ck7" title="Drag beyond the current score to set how far to take it (up to 100%)"><div class="absolute inset-y-0 left-0 rounded-full bg-slate-500 svelte-xw1ck7"></div> <!> <div class="absolute top-1/2 h-3.5 w-3.5 -translate-x-1/2 -translate-y-1/2 rounded-full border border-white/70 shadow shadow-black/30 svelte-xw1ck7"></div></div> <span class="w-14 shrink-0 text-right tabular-nums text-slate-400 svelte-xw1ck7"> </span></div>`),Je=l(`<button type="button" class="shrink-0 rounded px-1 text-slate-500 transition hover:text-slate-200 svelte-xw1ck7" title="Clear all goals for this item">Clear</button>`),Ye=l(`<div class="mt-1.5 space-y-1 pl-8 text-[10px] svelte-xw1ck7"><!> <!> <div class="flex items-center justify-between gap-2 pt-0.5 svelte-xw1ck7"><label class="inline-flex cursor-pointer items-center gap-1.5 text-slate-400 svelte-xw1ck7"><input type="checkbox" class="h-3 w-3 rounded border-slate-600 bg-slate-900 accent-brand-500 svelte-xw1ck7"/> Report it's in the code</label> <!></div></div>`),Xe=l(`<p class="text-sm leading-6 text-slate-400 svelte-xw1ck7">Nothing queued yet. Hit <span class="font-semibold text-brand-300 svelte-xw1ck7">+ Implement</span> on a suggestion or feature to plan the build.</p>`),Ze=l(`<li><div class="flex items-center gap-2 svelte-xw1ck7"><span draggable="true" class="shrink-0 cursor-grab select-none px-0.5 text-slate-500 svelte-xw1ck7" title="Drag to reorder" aria-hidden="true">⠿</span> <span class="grid h-6 w-6 shrink-0 place-items-center rounded-full bg-brand-500 text-xs font-bold tabular-nums text-white svelte-xw1ck7"> </span> <span class="min-w-0 flex-1 svelte-xw1ck7"><span class="block truncate text-sm font-medium text-white svelte-xw1ck7"> </span> <span class="block truncate text-xs text-slate-400 svelte-xw1ck7"> </span></span> <button type="button" class="shrink-0 rounded-md p-1 text-slate-400 transition hover:bg-slate-700 hover:text-white svelte-xw1ck7" aria-label="Remove from build queue" title="Remove from queue">✕</button></div> <!></li>`),Qe=l(`<ol class="space-y-2 svelte-xw1ck7"></ol>`),$e=l(`<section class="fixed bottom-5 right-5 z-40 flex max-h-[70vh] w-[min(92vw,380px)] flex-col overflow-hidden rounded-2xl border border-slate-700 bg-slate-900/95 shadow-2xl shadow-black/50 ring-1 ring-black/20 backdrop-blur svelte-xw1ck7"><header class="flex shrink-0 items-center justify-between gap-3 border-b border-slate-800 bg-linear-to-b from-slate-800/70 to-slate-800/30 px-4 py-3 svelte-xw1ck7"><div class="flex items-center gap-2 svelte-xw1ck7"><span class="text-brand-400 svelte-xw1ck7" aria-hidden="true">▶</span> <span class="text-sm font-semibold text-white svelte-xw1ck7">Build queue</span> <span class="rounded-full bg-brand-500 px-2 py-0.5 text-xs font-bold tabular-nums text-white svelte-xw1ck7"> </span></div> <button type="button" class="rounded-md p-1 text-slate-400 transition hover:bg-slate-700 hover:text-white svelte-xw1ck7" aria-label="Minimize build queue" title="Minimize"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="h-4 w-4 svelte-xw1ck7" aria-hidden="true"><path d="M6 9l6 6 6-6" class="svelte-xw1ck7"></path></svg></button></header> <div class="min-h-0 flex-1 overflow-y-auto p-3 svelte-xw1ck7"><!></div></section>`),et=l(`<button type="button" class="group fixed bottom-5 right-5 z-40 flex items-center gap-2 rounded-full border border-slate-700 bg-slate-900/95 py-2.5 pl-4 pr-3 text-sm font-semibold text-white shadow-2xl shadow-black/40 ring-1 ring-black/20 backdrop-blur transition hover:border-brand-500 hover:shadow-brand-500/20 svelte-xw1ck7" aria-label="Open build queue" title="Build queue"><span class="text-brand-400 transition group-hover:translate-x-0.5 svelte-xw1ck7" aria-hidden="true">▶</span> Build queue <span class="rounded-full bg-brand-500 px-2 py-0.5 text-xs font-bold tabular-nums text-white svelte-xw1ck7"> </span></button>`),tt=l(`<li class="builder-skeleton__card svelte-xw1ck7"><div class="flex items-center justify-between gap-3 svelte-xw1ck7"><span class="builder-skeleton__shape h-2.5 w-3/5 rounded-full svelte-xw1ck7"></span> <span class="builder-skeleton__shape h-4 w-14 rounded-full svelte-xw1ck7"></span></div> <div class="flex justify-center gap-10 pt-5 svelte-xw1ck7"><span class="builder-skeleton__shape size-11 rounded-full svelte-xw1ck7"></span> <span class="builder-skeleton__shape size-11 rounded-full svelte-xw1ck7"></span></div></li>`),nt=l(`<ul class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 svelte-xw1ck7" aria-busy="true" aria-live="polite" aria-label="Loading projects"></ul>`),rt=l(`<div class="rounded-xl border border-rose-500/30 bg-rose-500/10 p-4 text-sm text-rose-300 svelte-xw1ck7"> </div>`),it=l(`<div class="rounded-xl border border-slate-700/60 bg-linear-to-b from-slate-800/50 to-slate-900 p-8 text-center text-sm text-slate-400 svelte-xw1ck7">No projects yet.</div>`),at=l(`<div class="rounded-xl border border-slate-700/60 bg-linear-to-b from-slate-800/50 to-slate-900 p-8 text-center text-sm text-slate-400 svelte-xw1ck7">No projects, core features, features, or suggestions match your search.</div>`),ot=l(`<button type="button"> </button>`),st=l(`<span class="text-xs text-slate-500 svelte-xw1ck7"> </span>`),ct=l(`<div class="rounded-xl border border-slate-700/60 bg-linear-to-b from-slate-800/50 to-slate-900 p-8 text-center text-sm text-slate-400 svelte-xw1ck7">This project has no core features yet.</div>`),lt=l(`<div class="rounded-xl border border-dashed border-slate-700 bg-slate-900/40 p-8 text-center text-sm text-slate-400 svelte-xw1ck7">No core features, features, or suggestions match your search.</div>`),ut=l(`<button type="button" class="absolute inset-0 z-10 rounded-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-brand-500/50 svelte-xw1ck7"></button>`),dt=l(`<p class="text-sm text-slate-500 svelte-xw1ck7">No suggestions yet. Ask your assistant to propose improvements for this feature.</p>`),ft=l(`<div class="border-t border-slate-800 bg-slate-950/40 px-4 py-3 svelte-xw1ck7"><!></div>`),pt=l(`<article><!> <div class="p-4 svelte-xw1ck7"><div class="flex items-start justify-between gap-3 svelte-xw1ck7"><div class="min-w-0 svelte-xw1ck7"><div class="flex items-center gap-2 svelte-xw1ck7"><span> </span> <span class="project-card__count shrink-0 svelte-xw1ck7" title="Features in this core feature"> </span> <!></div> <!> <!></div> <div class="flex shrink-0 items-center gap-4 svelte-xw1ck7"><!> <!></div></div></div> <!></article>`),mt=l(`<div class="space-y-3 svelte-xw1ck7"></div>`),ht=l(`<span class="text-xs text-slate-500 svelte-xw1ck7"> </span>`),gt=l(`<div><div>Pick a core feature to see its features.</div></div>`),_t=l(`<div class="rounded-xl border border-dashed border-slate-700 bg-slate-900/40 p-8 text-center text-sm text-slate-400 svelte-xw1ck7">This core feature has no features yet.</div>`),vt=l(`<div class="rounded-xl border border-dashed border-slate-700 bg-slate-900/40 p-8 text-center text-sm text-slate-400 svelte-xw1ck7">No features match your search in this core feature.</div>`),yt=l(`<div class="space-y-2 svelte-xw1ck7"><div class="flex items-center gap-2 px-1 pt-1 svelte-xw1ck7"><span class="text-[11px] font-semibold uppercase tracking-wide text-slate-500 svelte-xw1ck7"> </span> <span class="h-px flex-1 bg-slate-800 svelte-xw1ck7" aria-hidden="true"></span> <span class="text-[10px] tabular-nums text-slate-600 svelte-xw1ck7"> </span></div> <!></div>`),bt=l(`<div class="space-y-4 svelte-xw1ck7"></div>`),xt=l(`<div class="space-y-6 svelte-xw1ck7"><button type="button"> </button> <section class="overflow-hidden rounded-2xl border border-slate-700/60 bg-linear-to-b from-slate-800/45 to-slate-900 shadow-xl shadow-black/20 svelte-xw1ck7"><div class="flex flex-col gap-5 p-6 lg:flex-row lg:items-start lg:justify-between svelte-xw1ck7"><div class="min-w-0 svelte-xw1ck7"><div class="flex items-center gap-3 svelte-xw1ck7"><h2 class="truncate text-2xl font-semibold tracking-tight text-white svelte-xw1ck7"> </h2> <span class="project-card__count shrink-0 svelte-xw1ck7"> </span></div> <p class="mt-2 max-w-3xl text-sm leading-6 text-slate-400 svelte-xw1ck7"> </p></div> <div class="flex shrink-0 items-center gap-6 svelte-xw1ck7"><!> <!></div></div></section> <div class="relative grid scroll-mt-20 items-start gap-5 xl:grid-cols-[minmax(0,0.95fr)_minmax(380px,1.05fr)] svelte-xw1ck7"><div class="pointer-events-none absolute inset-x-0 top-0 h-px svelte-xw1ck7" aria-hidden="true"></div> <section class="flex flex-col gap-3 xl:sticky xl:top-18 xl:self-start svelte-xw1ck7"><div class="flex items-end justify-between gap-3 svelte-xw1ck7"><div class="svelte-xw1ck7"><h3 class="text-sm font-semibold text-white svelte-xw1ck7">Core features</h3> <p class="text-xs text-slate-500 svelte-xw1ck7">Each core feature contains smaller features.</p></div> <div class="flex shrink-0 items-center gap-2 svelte-xw1ck7"><!> <!></div></div> <!></section> <section><div class="flex items-end justify-between gap-3 svelte-xw1ck7"><div class="svelte-xw1ck7"><h3 class="text-sm font-semibold text-white svelte-xw1ck7">Features</h3> <p class="text-xs text-slate-500 svelte-xw1ck7"> </p></div> <!></div> <!></section></div></div>`),St=l(`<li class="project-card-shell svelte-xw1ck7"><article class="project-card group relative h-full min-h-44 overflow-hidden svelte-xw1ck7"><button type="button" class="absolute inset-0 z-10 rounded-xl focus:outline-none focus-visible:ring-2 focus-visible:ring-brand-500/50 svelte-xw1ck7"></button> <div class="project-card__button flex h-full w-full flex-col justify-between p-5 text-left svelte-xw1ck7"><div class="project-card__top space-y-2 svelte-xw1ck7"><div class="flex items-start justify-between gap-3 svelte-xw1ck7"><h3 class="min-w-0 truncate text-base font-semibold text-white svelte-xw1ck7"> </h3> <span class="project-card__count shrink-0 svelte-xw1ck7"> </span></div> <!></div> <div class="project-card__scores mt-5 flex items-center justify-center gap-10 pt-5 svelte-xw1ck7"><!> <!></div></div></article></li>`),Ct=l(`<li class="builder-skeleton__card svelte-xw1ck7" aria-hidden="true"><div class="flex items-center justify-between gap-3 svelte-xw1ck7"><span class="builder-skeleton__shape h-2.5 w-3/5 rounded-full svelte-xw1ck7"></span> <span class="builder-skeleton__shape h-4 w-14 rounded-full svelte-xw1ck7"></span></div> <div class="flex justify-center gap-10 pt-5 svelte-xw1ck7"><span class="builder-skeleton__shape size-11 rounded-full svelte-xw1ck7"></span> <span class="builder-skeleton__shape size-11 rounded-full svelte-xw1ck7"></span></div></li>`),wt=l(`<section class="svelte-xw1ck7"><div class="mb-4 flex items-end justify-between gap-3 svelte-xw1ck7"><div class="svelte-xw1ck7"><h2 class="text-base font-semibold text-white svelte-xw1ck7">Projects</h2> <p class="text-sm text-slate-500 svelte-xw1ck7">Pick a project to open its build map and queue.</p></div> <div class="flex shrink-0 items-center gap-3 svelte-xw1ck7"><!> <p class="text-xs text-slate-500 svelte-xw1ck7"> </p></div></div> <ul class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 svelte-xw1ck7"><!> <!></ul></section>`),Tt=l(`<div class="min-h-[calc(100vh-4rem)] bg-[radial-gradient(120%_120%_at_50%_-10%,#101a33_0%,#020617_55%)] text-slate-200 svelte-xw1ck7"><div class="mx-auto max-w-7xl px-4 py-8 sm:px-6 lg:px-8 svelte-xw1ck7"><header class="mb-8 border-b border-slate-800 pb-6 svelte-xw1ck7"><p class="text-xs font-semibold uppercase tracking-[0.2em] text-brand-400 svelte-xw1ck7">Builder</p> <div class="mt-2 max-w-3xl svelte-xw1ck7"><h1 class="text-4xl font-semibold tracking-tight text-white svelte-xw1ck7">Your projects</h1> <p class="mt-2 max-w-2xl text-sm leading-6 text-slate-400 svelte-xw1ck7">Browse your projects and features in a simpler view, and discover ideas to improve each one.</p></div></header> <!></div></div> <!>`,1);function Et(r,a){j(a,!0);let o=(r,i=D,a=D)=>{var o=We();n(o,23,a,e=>e.id,(n,r,a)=>{var o=Ue(),c=_(o),l=_(c,!0);M(c);var u=d(c,2),f=_(u,!0);M(u);var p=d(u,2),m=e=>{O(e,Ve())},h=F(()=>q.isBusy(B(r).id)),y=e=>{var t=He(),n=v(t),a=d(n,2);s(`click`,n,()=>q.acceptSuggestion(i(),B(r).id)),s(`click`,a,()=>q.dismissSuggestion(i(),B(r).id)),O(e,t)};k(p,e=>{B(h)?e(m):e(y,-1)}),M(o),g(t=>{R(c,1,`mt-0.5 shrink-0 rounded-md px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide ${B(r).tone===`urgent`?`bg-rose-500/15 text-rose-300`:`bg-violet-500/15 text-violet-300`}`,`svelte-xw1ck7`),e(l,t),e(f,B(r).text)},[()=>Se(B(r))]),t(1,o,()=>se,()=>({y:6,duration:C(240),delay:z(B(a)),easing:H})),O(n,o)}),M(o),O(r,o)},l=(n,r=D,i=D,a=D)=>{var o=Ge(),s=_(o),c=_(s),l=_(c,!0);M(c),Ne(d(c,2),r,()=>i().id),M(s);var u=d(s,2);me(u,{get text(){return i().description},class:`mt-1`});var f=d(u,2),p=_(f);$(p,{label:`Maturity`,get value(){return i().maturityPercentage}}),$(d(p,2),{label:`Built`,get value(){return i().implementationPercentage}}),M(f),M(o),g(()=>e(l,i().name)),t(1,o,()=>se,()=>({y:10,duration:C(280),delay:z(a()),easing:H})),O(n,o)},u=(t,n=D,r=D,i=D)=>{let a=F(()=>q.currentScoreFor(n(),r())),o=F(()=>Le(n(),r())?B(Ie):Te(n(),r())??B(a)),c=F(()=>B(o)>B(a));var l=qe(),u=_(l),f=_(u,!0);M(u);var p=d(u,2);L(p,`aria-valuemax`,100);var m=_(p),h=d(m,2),v=e=>{var t=Ke();g(e=>y(t,`left: ${B(a)??``}%; width: ${B(o)-B(a)}%; background-color: ${e??``}`),[()=>we(B(o))]),O(e,t)};k(h,e=>{B(c)&&e(v)});var b=d(h,2);M(p);var x=d(p,2),S=_(x);M(x),M(l),g((t,n)=>{e(f,i()),L(p,`aria-label`,t),L(p,`aria-valuemin`,B(a)),L(p,`aria-valuenow`,B(o)),y(m,`width: ${B(a)??``}%`),y(b,`left: ${B(o)??``}%; background-color: ${n??``}`),e(S,`${B(a)??``}%${B(c)?` → ${B(o)}%`:``}`)},[()=>`${i()} goal for ${Ce(n())}`,()=>we(B(o))]),s(`pointerdown`,p,e=>ze(e,n(),r(),B(a))),s(`pointermove`,p,e=>Be(e,n(),r(),B(a))),s(`pointerup`,p,()=>Et(n(),r(),B(a))),s(`keydown`,p,e=>Dt(e,n(),r(),B(a))),O(t,l)},m=(e,t=D)=>{let n=F(()=>t().item.target);var r=Ye(),i=_(r);u(i,t,()=>`maturity`,()=>`Maturity`);var a=d(i,2);u(a,t,()=>`implementation`,()=>`Built`);var o=d(a,2),c=_(o),l=_(c);A(l),P(),M(c);var f=d(c,2),p=e=>{var n=Je();s(`click`,n,()=>Ae(t())),O(e,n)};k(f,e=>{B(n)&&e(p)}),M(o),M(r),g(e=>T(l,e),[()=>!!B(n)?.report]),s(`change`,l,()=>Oe(t())),O(e,r)},b=t=>{var r=c(),i=v(r),a=t=>{var r=$e(),i=_(r),a=_(i),o=d(_(a),4),c=_(o,!0);M(o),M(a);var l=d(a,2);M(i);var u=d(i,2),p=_(u),h=e=>{O(e,Xe())},v=t=>{var r=Qe();n(r,23,()=>q.queue,e=>String(e.item.id),(t,n,r)=>{var i=Ze(),a=_(i),o=_(a),c=d(o,2),l=_(c,!0);M(c);var u=d(c,2),p=_(u),h=_(p,!0);M(p);var v=d(p,2),y=_(v,!0);M(v),M(u);var b=d(u,2);M(a),m(d(a,2),()=>B(n)),M(i),g((t,a)=>{R(i,1,`rounded-lg border bg-slate-800/40 px-3 py-2 transition ${B(n).orphaned?`opacity-60`:``} ${B(Q)===B(r)?`opacity-40`:``} ${B(ge)===B(r)&&B(Q)!==null&&B(Q)!==B(r)?`border-brand-400 ring-1 ring-brand-400`:`border-slate-800`}`,`svelte-xw1ck7`),e(l,B(r)+1),e(h,t),e(y,a)},[()=>Ce(B(n)),()=>Ot(B(n))]),f(`dragover`,i,e=>ve(e,B(r))),f(`drop`,i,()=>ye(B(r))),f(`dragend`,i,be),f(`dragstart`,o,()=>_e(B(r))),f(`dragend`,o,be),s(`click`,b,()=>q.dequeue(B(n).item.id)),O(t,i)}),M(r),O(t,r)};k(p,e=>{q.queue.length===0?e(h):e(v,-1)}),M(u),M(r),g(()=>e(c,q.queue.length)),s(`click`,l,()=>E(he,!1)),O(t,r)},o=t=>{var n=et(),r=d(_(n),2),i=_(r,!0);M(r),M(n),g(()=>e(i,q.queue.length)),s(`click`,n,()=>E(he,!0)),O(t,n)};k(i,e=>{B(he)?e(a):e(o,-1)}),O(t,r)},x=typeof window<`u`&&typeof window.matchMedia==`function`&&window.matchMedia(`(prefers-reduced-motion: reduce)`).matches,C=e=>x?0:e,z=e=>C(Math.min(e,12)*40);function U(e,{duration:t=300}={}){let n=getComputedStyle(e),r=parseFloat(n.height),i=parseFloat(n.marginTop),a=parseFloat(n.marginBottom),o=parseFloat(n.paddingTop),s=parseFloat(n.paddingBottom);return{duration:t,easing:H,css:e=>`overflow: hidden; opacity: ${e};height: ${e*r}px;margin-top: ${e*i}px; margin-bottom: ${e*a}px;padding-top: ${e*o}px; padding-bottom: ${e*s}px;`}}let W=I(null),K=I(!1),ue=Array.from({length:8},(e,t)=>t),J=I(null);function de(e){if(typeof window>`u`||typeof matchMedia==`function`&&matchMedia(`(prefers-reduced-motion: reduce)`).matches)return;let t=document.documentElement,n=0,r=0,i=null,a=()=>Math.ceil(window.scrollY+window.innerHeight)>=t.scrollHeight-1,o=()=>window.scrollY<=0,s=e=>Math.sign(e)*96*(1-Math.exp(-Math.abs(e)/340)),c=()=>{let t=-s(n);e.style.transform=t?`translate3d(0, ${t}px, 0)`:``},l=()=>{i&&=(clearTimeout(i),null);let t=n;if(t===0){e.style.transform=``,e.style.willChange=``;return}let a=performance.now(),o=i=>{let s=Math.min(1,(i-a)/440);n=t*(1-(1-(1-s)**3)),c(),s<1?r=requestAnimationFrame(o):(n=0,e.style.transform=``,e.style.willChange=``)};cancelAnimationFrame(r),r=requestAnimationFrame(o)},u=()=>{i&&clearTimeout(i),i=setTimeout(l,90)},d=t=>{let i=t.deltaY>0&&a()||t.deltaY<0&&o();n===0&&!i||(t.preventDefault(),cancelAnimationFrame(r),e.style.willChange=`transform`,n+=t.deltaY,a()&&!o()?n=Math.max(0,n):o()&&!a()&&(n=Math.min(0,n)),c(),u())};return window.addEventListener(`wheel`,d,{passive:!1}),{destroy(){window.removeEventListener(`wheel`,d),cancelAnimationFrame(r),i&&clearTimeout(i),e.style.transform=``,e.style.willChange=``}}}async function fe(e){q.selectCoreFeature(e),await h(),B(J)?.scrollIntoView({behavior:x?`auto`:`smooth`,block:`start`})}i(()=>{let e=B(W);if(!e||typeof IntersectionObserver>`u`)return;let t=new IntersectionObserver(e=>{let t=e[0];t&&E(K,!t.isIntersecting)},{rootMargin:`-72px 0px 0px 0px`,threshold:0});return t.observe(e),()=>t.disconnect()});let Y=null,X=null;i(()=>{let e=q.allTagTypes;e.length>0&&q.registerTagTypes(e)});let Z=I(!1);i(()=>{if(!B(Z)||typeof window>`u`)return;let e=q.selectedProjectId,t=q.selectedCoreFeatureId,n=new URL(V.url),r=n.search;e?n.searchParams.set(`project`,e):n.searchParams.delete(`project`),t?n.searchParams.set(`core`,t):n.searchParams.delete(`core`),n.search!==r&&re(`${n.pathname}${n.search}`,{})}),ie(e=>{if(!e.from)return;let t=V.url.searchParams;q.applySelection(t.get(`project`),t.get(`core`))}),ee(()=>{let e=V.url.searchParams,t=e.get(`project`);q.applySelection(t,e.get(`core`)),E(Z,!0),X=le((e,t)=>q.deepLinkFor(e,t)),t?q.loadProjectOnly(t):q.refresh(),q.refreshTagPalette(),Y=q.subscribeSync(e=>{(e.kind===`project`||e.kind===`feature`||e.kind===`implementation-status`)&&q.applySyncEvent(e)})}),N(()=>{Y?.(),Y=null,X?.(),X=null});let he=I(!1),Q=I(null),ge=I(null);function _e(e){E(Q,e,!0)}function ve(e,t){e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`move`),E(ge,t,!0)}function ye(e){let t=B(Q);if(E(Q,null),E(ge,null),t===null||t===e)return;let n=q.queue[t];n&&q.moveQueueTo(n.item.id,e)}function be(){E(Q,null),E(ge,null)}function xe(e){return e.coreFeatures.reduce((e,t)=>e+t.features.length,0)}function Se(e){return e.tone===`urgent`?`Priority`:`Idea`}function Ce(e){return e.item.kind===`action`?e.actionName??`Action`:e.item.kind===`surface`?e.surfaceName??`Surface`:e.featureName}function we(e){return e>=80?`#34d399`:e>=45?`#fb923c`:`#f43f5e`}function Te(e,t){return t===`maturity`?e.item.target?.maturity:e.item.target?.implementation}function Ee(e,t){let n={...e.item.target??{},...t},r={...typeof n.maturity==`number`?{maturity:n.maturity}:{},...typeof n.implementation==`number`?{implementation:n.implementation}:{},...n.report?{report:!0}:{}};q.setQueueTarget(e.item.id,G(r)?void 0:r)}function De(e,t,n){Ee(e,{[t]:n})}function Oe(e){Ee(e,{report:!e.item.target?.report})}function Ae(e){q.setQueueTarget(e.item.id,void 0)}let Me=I(null),Fe=I(`implementation`),Ie=I(0),Le=(e,t)=>B(Me)===String(e.item.id)&&B(Fe)===t;function Re(e,t){let n=e.getBoundingClientRect(),r=n.width>0?(t-n.left)/n.width:0;return ce(Math.max(0,Math.min(1,r))*100)}function ze(e,t,n,r){e.preventDefault();let i=e.currentTarget;i.setPointerCapture(e.pointerId),E(Me,String(t.item.id),!0),E(Fe,n,!0),E(Ie,Math.max(r,Re(i,e.clientX)),!0)}function Be(e,t,n,r){Le(t,n)&&E(Ie,Math.max(r,Re(e.currentTarget,e.clientX)),!0)}function Et(e,t,n){if(!Le(e,t))return;let r=B(Ie);E(Me,null),De(e,t,r<=n?void 0:r)}function Dt(e,t,n,r){let i=e.key===`ArrowRight`||e.key===`ArrowUp`?5:e.key===`ArrowLeft`||e.key===`ArrowDown`?-5:0;if(i===0)return;e.preventDefault();let a=ce((Te(t,n)??r)+i);De(t,n,a<=r?void 0:a)}function Ot(e){let t=e.orphaned?` · removed from spec`:``;return e.item.kind===`feature`?`Whole feature · implement what's missing${t}`:`${e.featureName}${t}`}let kt=`inline-flex items-center gap-1.5 rounded-lg border border-slate-700 bg-slate-900/60 px-3 py-1.5 text-xs font-medium text-slate-300 transition hover:border-brand-500/60 hover:bg-slate-800 hover:text-brand-300`;var At=Tt(),jt=v(At),Mt=_(jt),Nt=d(_(Mt),2),Pt=e=>{var t=nt();n(t,20,()=>ue,e=>e,(e,t)=>{var n=tt();g(()=>y(n,`--d: ${t*80}ms`)),O(e,n)}),M(t),O(e,t)},Ft=t=>{var n=rt(),r=_(n,!0);M(n),g(()=>e(r,q.error)),O(t,n)},It=e=>{O(e,it())},Lt=e=>{O(e,at())},Rt=r=>{let i=F(()=>q.selectedProject);var a=xt(),c=_(a);R(c,1,ne(kt),`svelte-xw1ck7`);var u=_(c);M(c);var f=d(c,2),m=_(f),h=_(m),v=_(h),y=_(v),b=_(y,!0);M(y);var x=d(y,2),S=_(x);M(x),M(v);var w=d(v,2),T=_(w,!0);M(w),M(h);var D=d(h,2),A=_(D);$(A,{label:`Maturity`,get value(){return B(i).maturityPercentage}}),$(d(A,2),{label:`Built`,get value(){return B(i).implementationPercentage}}),M(D),M(m),M(f);var j=d(f,2),N=_(j);te(N,e=>E(W,e),()=>B(W));var P=d(N,2),ee=_(P),I=d(_(ee),2),re=_(I);je(re);var ie=d(re,2),V=t=>{var n=ot();R(n,1,ne(kt),`svelte-xw1ck7`);var r=_(n);M(n),g(()=>e(r,`← Show all ${B(i).coreFeatures.length??``}`)),s(`click`,n,()=>q.deselectCoreFeature()),O(t,n)},ce=t=>{var n=st(),r=_(n);M(n),g(()=>e(r,`${q.visibleCoreFeatures.length??``}${q.searchActive||q.tagActive?` of ${B(i).coreFeatures.length}`:``}`)),O(t,n)};k(ie,e=>{q.selectedCoreFeature?e(V):e(ce,-1)}),M(I),M(ee);var G=d(ee,2),le=e=>{O(e,ct())},ue=e=>{O(e,lt())},de=r=>{var i=mt();n(i,31,()=>q.visibleCoreFeatures,e=>e.id,(n,r,i)=>{let a=F(()=>q.selectedCoreFeature?.id===B(r).id);var c=pt(),l=_(c),u=e=>{var t=ut();g(()=>L(t,`aria-label`,`Open ${B(r).name}`)),s(`click`,t,()=>fe(B(r).id)),O(e,t)};k(l,e=>{B(a)||e(u)});var f=d(l,2),m=_(f),h=_(m),v=_(h),y=_(v),b=_(y,!0);M(y);var x=d(y,2),S=_(x);M(x),Pe(d(x,2),()=>B(r).id),M(v);var w=d(v,2);me(w,{get text(){return B(r).description},class:`mt-1`}),ke(d(w,2),{get tags(){return B(r).tags},onToggle:e=>q.toggleTag(e),isActive:e=>q.isActiveTag(e),onAdd:(e,t)=>q.addCoreFeatureTag(B(r).id,{type:e,value:t}),onRemove:e=>q.removeCoreFeatureTag(B(r).id,e),onRename:(e,t)=>q.renameTag(e,t),get typeOptions(){return q.allTagTypes},collapsible:!0,class:`relative z-20 mt-2`}),M(h);var T=d(h,2),E=_(T);$(E,{label:`Maturity`,get value(){return B(r).maturityPercentage}}),$(d(E,2),{label:`Built`,get value(){return B(r).implementationPercentage}}),M(T),M(m),M(f);var D=d(f,2),A=e=>{var n=ft(),i=_(n),a=e=>{o(e,()=>B(r).id,()=>B(r).suggestions)},s=e=>{O(e,dt())};k(i,e=>{B(r).suggestions.length>0?e(a):e(s,-1)}),M(n),t(3,n,()=>ae,()=>({duration:C(300),easing:H})),O(e,n)};k(D,e=>{B(a)&&e(A)}),M(c),g(()=>{R(c,1,`skeuo-card group relative overflow-hidden ${B(a)?`skeuo-card--active`:`skeuo-card--interactive`}`,`svelte-xw1ck7`),R(y,1,`min-w-0 flex-1 truncate text-base font-semibold text-white ${B(a)?``:`group-hover:text-brand-300`}`,`svelte-xw1ck7`),e(b,B(r).name),e(S,`${B(r).features.length??``} feat`)}),t(1,c,()=>se,()=>({y:10,duration:C(300),delay:z(B(i)),easing:H})),t(2,c,()=>U,()=>({duration:C(300)})),p(c,()=>pe,()=>({duration:C(320),easing:H})),O(n,c)}),M(i),O(r,i)};k(G,e=>{B(i).coreFeatures.length===0?e(le):q.visibleCoreFeatures.length===0?e(ue,1):e(de,-1)}),M(P);var Y=d(P,2),X=_(Y),Z=_(X),he=d(_(Z),2),Q=_(he,!0);M(he),M(Z);var ge=d(Z,2),_e=t=>{var n=ht(),r=_(n);M(n),g(()=>e(r,`${q.visibleSelectedFeatures.length??``}${q.searchActive?` of ${q.selectedCoreFeature.features.length}`:``}`)),O(t,n)};k(ge,e=>{q.selectedCoreFeature&&e(_e)}),M(X);var ve=d(X,2),ye=e=>{var n=gt(),r=_(n);let i;M(n),g(()=>{R(n,1,`xl:relative xl:flex-1 xl:rounded-2xl xl:transition-colors xl:duration-500 xl:ease-out xl:motion-reduce:transition-none ${B(K)?`xl:bg-white/2.5`:`xl:bg-transparent`}`,`svelte-xw1ck7`),i=R(r,1,`prompt-card rounded-xl border border-dashed border-slate-700 bg-slate-900/40 p-8 text-center text-sm text-slate-400 xl:absolute xl:inset-x-0 xl:mx-auto xl:max-w-sm xl:overflow-hidden xl:transition-[top,transform] xl:duration-500 xl:ease-out xl:motion-reduce:transition-none ${B(K)?`xl:top-1/2 xl:-translate-y-1/2`:`xl:top-8`}`,`svelte-xw1ck7`,i,{"is-waiting":B(K)})}),t(1,r,()=>oe,()=>({duration:C(200)})),O(e,n)},be=e=>{O(e,_t())},Se=e=>{O(e,vt())},Ce=t=>{let r=F(()=>q.selectedCoreFeature.id);var i=bt();n(i,21,()=>q.visibleSelectedSurfaces,e=>e.surfaceId,(t,i)=>{var a=yt(),o=_(a),s=_(o),c=_(s,!0);M(s);var u=d(s,4),f=_(u,!0);M(u),M(o),n(d(o,2),19,()=>B(i).features,e=>e.id,(e,t,n)=>{l(e,()=>B(r),()=>B(t),()=>B(n))}),M(a),g(()=>{e(c,B(i).surfaceName),e(f,B(i).features.length)}),O(t,a)}),M(i),O(t,i)};k(ve,e=>{q.selectedCoreFeature?q.selectedCoreFeature.features.length===0?e(be,1):q.visibleSelectedFeatures.length===0?e(Se,2):e(Ce,-1):e(ye)}),M(Y),M(j),te(j,e=>E(J,e),()=>B(J)),M(a),g(t=>{e(u,`← All projects (${q.projectCount??``})`),e(b,B(i).name),e(S,`${B(i).coreFeatures.length??``} core / ${t??``} feat`),e(T,B(i).description),R(Y,1,`space-y-3 ${q.selectedCoreFeature?``:`xl:sticky xl:top-18 xl:flex xl:min-h-[calc(100vh-6rem)] xl:flex-col xl:self-start`}`,`svelte-xw1ck7`),e(Q,q.selectedCoreFeature?q.selectedCoreFeature.name:`Pick a core feature`)},[()=>xe(B(i))]),s(`click`,c,()=>q.deselectProject()),O(r,a)},zt=r=>{var i=wt(),a=_(i),o=d(_(a),2),l=_(o);je(l);var u=d(l,2),f=_(u);M(u),M(o),M(a);var p=d(a,2),m=_(p);n(m,19,()=>q.filteredProjects,e=>e.id,(n,r,i)=>{var a=St(),o=_(a),c=_(o),l=d(c,2),u=_(l),f=_(u),p=_(f),m=_(p,!0);M(p);var h=d(p,2),v=_(h);M(h),M(f),ke(d(f,2),{get tags(){return B(r).tags},onToggle:e=>q.toggleTag(e),isActive:e=>q.isActiveTag(e),onAdd:(e,t)=>q.addProjectTag(B(r).id,{type:e,value:t}),onRemove:e=>q.removeProjectTag(B(r).id,e),onRename:(e,t)=>q.renameTag(e,t),get typeOptions(){return q.allTagTypes},collapsible:!0,class:`relative z-20`}),M(u);var y=d(u,2),b=_(y);$(b,{label:`Maturity`,get value(){return B(r).maturityPercentage}}),$(d(b,2),{label:`Built`,get value(){return B(r).implementationPercentage}}),M(y),M(l),M(o),M(a),g(t=>{L(c,`aria-label`,`Open ${B(r).name}`),e(m,B(r).name),e(v,`${B(r).coreFeatures.length??``} core / ${t??``} feat`)},[()=>xe(B(r))]),s(`click`,c,()=>q.selectProject(B(r).id)),t(1,a,()=>se,()=>({y:10,duration:C(300),delay:z(B(i)),easing:H})),O(n,a)});var h=d(m,2),y=e=>{var t=c();n(v(t),19,()=>Array.from({length:q.pendingProjectCount}),(e,t)=>`pending-${t}`,(e,t)=>{O(e,Ct())}),O(e,t)};k(h,e=>{q.pendingProjectCount>0&&!q.searchActive&&!q.tagActive&&e(y)}),M(p),M(i),g(()=>e(f,`${q.filteredProjects.length??``}${q.searchActive||q.tagActive?` of ${q.projectCount}`:` total`}`)),O(r,i)};k(Nt,e=>{q.loading?e(Pt):q.error?e(Ft,1):q.dashboard.projects.length===0?e(It,2):q.searchActive&&!q.selectedProject&&q.filteredProjects.length===0?e(Lt,3):q.selectedProject?e(Rt,4):e(zt,-1)}),M(Mt),S(Mt,e=>de?.(e)),M(jt);var Bt=d(jt,2),Vt=e=>{b(e)};k(Bt,e=>{q.selectedProject&&e(Vt)}),O(r,At),w()}a([`click`,`pointerdown`,`pointermove`,`pointerup`,`keydown`,`change`]);function Dt(e){z(`eir1o2`,e=>{m(()=>{o.title=`Builder Mode / Unspaghettit`})}),Et(e,{})}export{Dt as component,de as universal};
@@ -1,3 +1,3 @@
1
- import{$ as e,A as t,E as n,F as r,G as i,I as a,J as o,L as s,N as c,Q as l,R as ee,U as u,V as te,W as d,X as f,Y as p,Z as m,_t as h,c as g,ct as ne,et as _,g as v,h as y,j as b,k as x,l as S,lt as re,m as ie,mt as C,pt as w,r as ae,rt as T,s as oe,tt as E,u as se,x as ce,z as D}from"../chunks/BPl9BITm.js";import{t as le}from"../chunks/DatGSObE.js";import"../chunks/xihTtKlq.js";import{a as ue,at as de,gt as fe,ht as pe,lt as O,pt as k,t as me}from"../chunks/Bp2_Vghh.js";import"../chunks/DHoA038D.js";import{t as A}from"../chunks/BfMYiIUi.js";import{t as he}from"../chunks/D8YEa1po.js";import{t as j}from"../chunks/DKgYpi6_.js";import{t as ge}from"../chunks/N7PXjlRH.js";import{t as _e}from"../chunks/D6jhrpTg.js";import{t as M}from"../chunks/DjWKKtqp.js";import{t as N}from"../chunks/BQ9GodWX2.js";import{t as ve}from"../chunks/CxyLMlpt2.js";var P=h({load:()=>F}),F=()=>{throw M(307,`/projects`)},I=c(`<form class="grid gap-3 rounded-xl border border-cyan-100 bg-cyan-50/40 p-4 md:grid-cols-[1fr_1.4fr_auto] md:items-end"><div><label for="feature-name" class="mb-1.5 block text-xs font-medium text-slate-700">Feature name</label> <input id="feature-name" type="text" placeholder="e.g. Restaurant booking" 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="feature-desc" class="mb-1.5 block text-xs font-medium text-slate-700">Description</label> <input id="feature-desc" type="text" placeholder="What is this feature about?" 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 ye(e,n){re(n,!0);let r=E(``),a=E(``),o=E(!1),s=E(null);i(()=>{D(s)&&te().then(()=>D(s)?.focus())});async function c(e){if(e.preventDefault(),!D(o)&&D(r).trim().length!==0&&D(a).trim().length!==0){_(o,!0);try{await n.onSubmit(D(r).trim(),D(a).trim()),_(r,``),_(a,``)}finally{_(o,!1)}}}var u=I(),p=f(u),m=l(f(p),2);S(m),oe(m,e=>_(s,e),()=>D(s)),C(p);var h=l(p,2),v=l(f(h),2);S(v),C(h);var y=l(h,2),x=f(y,!0);C(y),C(u),d(e=>{y.disabled=e,t(x,D(o)?`Creating...`:`New feature`)},[()=>D(o)||D(r).trim().length===0||D(a).trim().length===0]),ee(`submit`,u,c),g(m,()=>D(r),e=>_(r,e)),g(v,()=>D(a),e=>_(a,e)),b(e,u),ne()}var be=c(`<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>`),xe=c(`<option> </option>`),Se=c(`<div class="absolute right-0 z-20 mt-2 w-56 rounded-lg border border-hairline bg-white p-1 shadow-lg"><button type="button" class="flex w-full items-start rounded-md px-3 py-2 text-left text-sm text-slate-700 hover:bg-slate-50 disabled:opacity-50"><span><span class="block font-medium"> </span> <span class="block text-xs text-slate-500">Add bundled example specs.</span></span></button></div>`),Ce=c(`<div class="rounded-lg border border-dashed border-hairline bg-white p-8 text-center text-sm text-slate-500">Loading features...</div>`),we=c(`<div class="rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-700"> </div>`),Te=c(`<div class="space-y-3"><p>No features yet.</p> <p class="text-xs">Features live inside projects. Start by opening or creating a project.</p> <div class="flex flex-wrap justify-center gap-2"><a href="/projects" class="rounded-md bg-slate-900 px-4 py-2 text-sm font-medium text-white">Go to projects</a> <button type="button" class="rounded-md border border-slate-300 bg-white px-4 py-2 text-sm font-medium text-slate-700"> </button></div></div>`),Ee=c(`<div class="rounded-lg border border-dashed border-hairline bg-white p-8 text-center text-sm text-slate-500"><!></div>`),De=c(`<li><!></li>`),Oe=c(`<ul class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"></ul>`),ke=c(`<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-feature-title"><header class="flex items-start justify-between gap-4 border-b border-hairline px-5 py-4"><div><h2 id="new-feature-title" class="text-base font-semibold text-slate-950">New feature</h2> <p class="mt-1 text-sm text-slate-500">Start a behavior model from a blank specification.</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>`),Ae=c(`<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="grid gap-6 lg:grid-cols-[minmax(0,1fr)_auto] lg:items-end"><div class="max-w-3xl"><div><p class="text-xs font-semibold uppercase tracking-wide text-brand-700">Behavior models</p> <h1 class="mt-2 text-4xl font-semibold tracking-tight text-slate-950">Features</h1> <p class="mt-2 max-w-2xl text-sm leading-6 text-slate-600">Describe what software does as surfaces, actions, states, rules, effects, and events.</p></div></div> <div class="grid grid-cols-2 gap-3 sm:grid-cols-4 lg:w-[42rem]"><div class="rounded-xl border border-slate-200 bg-white p-4 shadow-sm shadow-slate-950/5"><p class="text-xs font-medium uppercase tracking-wide text-brand-700">Models</p> <p class="mt-2 text-2xl font-semibold text-slate-950"> </p> <p class="mt-1 text-xs text-slate-500"> </p></div> <div class="rounded-xl border border-slate-200 bg-white p-4 shadow-sm shadow-slate-950/5"><p class="text-xs font-medium uppercase tracking-wide text-violet-700">Surfaces</p> <p class="mt-2 text-2xl font-semibold text-slate-950"> </p> <p class="mt-1 text-xs text-slate-500">Across models</p></div> <div class="rounded-xl border border-slate-200 bg-white p-4 shadow-sm shadow-slate-950/5"><p class="text-xs font-medium uppercase tracking-wide text-amber-700">Actions</p> <p class="mt-2 text-2xl font-semibold text-slate-950"> </p> <p class="mt-1 text-xs text-slate-500">Actions</p></div> <div class="rounded-xl border border-slate-200 bg-white p-4 shadow-sm shadow-slate-950/5"><p class="text-xs font-medium uppercase tracking-wide text-emerald-700">Maturity</p> <p class="mt-2 text-2xl font-semibold text-slate-950"> </p> <p class="mt-1 text-xs text-slate-500">Average</p></div></div></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="feature-search" class="sr-only">Search features</label> <input id="feature-search" type="search" placeholder="Search features..." class="h-9 w-full min-w-0 rounded-md border-0 bg-transparent px-3 text-sm outline-none placeholder:text-slate-400"/> <!></div> <div class="flex flex-col gap-2 sm:flex-row sm:items-center"><label class="flex h-10 items-center gap-2 rounded-lg border border-hairline bg-white px-3 text-sm text-slate-600"><span class="text-xs font-medium">Project</span> <select class="bg-transparent text-sm font-medium text-slate-800 outline-none"><option>All</option><option>Unassigned</option><!></select></label> <!> <label class="flex h-10 items-center gap-2 rounded-lg border border-hairline bg-white px-3 text-sm text-slate-600"><span class="text-xs font-medium">Sort</span> <select class="bg-transparent text-sm font-medium text-slate-800 outline-none"><option>Updated</option><option>Name</option><option>Maturity</option></select></label> <div class="relative"><button type="button" class="inline-flex h-10 items-center gap-2 rounded-lg border border-hairline bg-white px-3 text-sm font-medium text-slate-700 hover:bg-slate-50">More <span class="text-xs text-slate-400" aria-hidden="true">v</span></button> <!></div> <a href="/projects" 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" title="New features are created from a project"><span class="text-base leading-none" aria-hidden="true">+</span> New feature</a></div></div></header> <section aria-labelledby="features-list-title"><div class="mb-3 flex flex-col gap-1 sm:flex-row sm:items-end sm:justify-between"><div><h2 id="features-list-title" class="text-base font-semibold text-slate-950">Behavior models</h2> <p class="text-sm text-slate-500">Open an feature to edit surfaces, rules, effects, and scenarios.</p></div> <p class="text-xs text-slate-500"> </p></div> <!></section></div> <!> <!>`,1);function L(a,c){re(c,!0),ae(()=>{j.refresh(),A.refresh(),he.refresh()});async function te(e,t){await le(`/features/${await j.create(e,t)}`)}async function h(e){await fe({title:`Delete "${j.summaries.find(t=>String(t.id)===String(e))?.name??`this feature`}"?`,message:`Its surfaces, actions, rules, and scenarios will be removed. Any project that references it keeps the link, but the feature itself is gone. This cannot be undone.`,confirmLabel:`Delete feature`,tone:`danger`})&&await j.remove(e)}let M=E(!1),P=E(``),F=E(!1),I=E(!1),L=E(`updated`),R=E(null),z=E(`all`),B=E(`all`),V=E(!1),H=E(e(new Map));async function je(e){if(D(H).has(e))return;let t=await(await me()).useCases.getProject(e),n=new Map(D(H));n.set(e,new Set(t?.featureIds.map(String)??[])),_(H,n,!0)}async function Me(){let e=await me(),t=await Promise.all(A.summaries.map(async t=>{let n=await e.useCases.getProject(t.id);return[String(t.id),new Set(n?.featureIds.map(String)??[])]}));_(H,new Map(t),!0)}i(()=>{if(D(z)!==`all`){if(D(z)===`unassigned`){Me();return}je(D(z))}});let Ne=T(()=>j.summaries.reduce((e,t)=>e+t.surfaceCount,0)),Pe=T(()=>j.summaries.reduce((e,t)=>e+t.actionCount,0)),Fe=T(()=>j.summaries.length===0?0:Math.round(j.summaries.reduce((e,t)=>e+t.maturityPercentage,0)/j.summaries.length)),U=T(()=>{let e=[];for(let t of j.summaries)for(let n of t.tags??[])e.push(n);return e});i(()=>{he.registerTypes(D(U).map(e=>e.type))});let Ie=T(()=>[...new Set(D(U).map(e=>de(e.type)))].sort((e,t)=>e.localeCompare(t)));i(()=>{if(!D(I))return;let e=e=>{D(R)?.contains(e.target)||_(I,!1)};return window.addEventListener(`pointerdown`,e,!0),()=>window.removeEventListener(`pointerdown`,e,!0)});function Le(e){e.key===`Escape`&&(_(I,!1),_(F,!1))}let W=T(()=>{let e=D(P).trim().toLowerCase(),t=t=>e.length===0||t.name.toLowerCase().includes(e)||(t.description??``).toLowerCase().includes(e),n=e=>{if(D(z)===`all`)return!0;if(D(z)===`unassigned`){for(let t of D(H).values())if(t.has(e))return!1;return!0}return D(H).get(D(z))?.has(e)??!1};return j.summaries.filter(e=>t(e)&&n(String(e.id))&&Re(e,D(B))).sort((e,t)=>D(L)===`name`?e.name.localeCompare(t.name):D(L)===`maturity`?t.maturityPercentage-e.maturityPercentage:new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime())});function Re(e,t){let n=e.tags??[];if(t===`all`)return!0;if(t===`untagged`)return n.length===0;let r=O(t);return n.some(e=>O(e)===r)}function ze(e){return j.summaries.filter(t=>Re(t,e)).length}async function Be(){if(!D(M)){_(M,!0);try{let e=await j.loadSamples(),t=e.addedProjects.length+e.addedFeatures.length>0,n=e.skippedProjects.length+e.skippedFeatures.length>0;if(!t&&!n)await k({title:`Nothing to load`,message:`No samples are bundled in this build.`,tone:`warning`});else if(!t)await k({title:`Already available`,message:N(e,`skipped`)+`
1
+ import{$ as e,A as t,E as n,F as r,G as i,I as a,J as o,L as s,N as c,Q as l,R as ee,U as u,V as te,W as d,X as f,Y as p,Z as m,_t as h,c as g,ct as ne,et as _,g as v,h as y,j as b,k as x,l as S,lt as re,m as ie,mt as C,pt as w,r as ae,rt as T,s as oe,tt as E,u as se,x as ce,z as D}from"../chunks/BPl9BITm.js";import{n as le}from"../chunks/OJscNS3T.js";import"../chunks/xihTtKlq.js";import{a as ue,at as de,gt as fe,ht as pe,lt as O,pt as k,t as me}from"../chunks/Bp2_Vghh.js";import"../chunks/BCEY79Dw.js";import{t as A}from"../chunks/BfMYiIUi.js";import{t as he}from"../chunks/D8YEa1po.js";import{t as j}from"../chunks/DKgYpi6_.js";import{t as ge}from"../chunks/N7PXjlRH.js";import{t as _e}from"../chunks/D6jhrpTg.js";import{t as M}from"../chunks/BvOhVtZg.js";import{t as N}from"../chunks/BQ9GodWX2.js";import{t as ve}from"../chunks/CxyLMlpt2.js";var P=h({load:()=>F}),F=()=>{throw M(307,`/projects`)},I=c(`<form class="grid gap-3 rounded-xl border border-cyan-100 bg-cyan-50/40 p-4 md:grid-cols-[1fr_1.4fr_auto] md:items-end"><div><label for="feature-name" class="mb-1.5 block text-xs font-medium text-slate-700">Feature name</label> <input id="feature-name" type="text" placeholder="e.g. Restaurant booking" 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="feature-desc" class="mb-1.5 block text-xs font-medium text-slate-700">Description</label> <input id="feature-desc" type="text" placeholder="What is this feature about?" 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 ye(e,n){re(n,!0);let r=E(``),a=E(``),o=E(!1),s=E(null);i(()=>{D(s)&&te().then(()=>D(s)?.focus())});async function c(e){if(e.preventDefault(),!D(o)&&D(r).trim().length!==0&&D(a).trim().length!==0){_(o,!0);try{await n.onSubmit(D(r).trim(),D(a).trim()),_(r,``),_(a,``)}finally{_(o,!1)}}}var u=I(),p=f(u),m=l(f(p),2);S(m),oe(m,e=>_(s,e),()=>D(s)),C(p);var h=l(p,2),v=l(f(h),2);S(v),C(h);var y=l(h,2),x=f(y,!0);C(y),C(u),d(e=>{y.disabled=e,t(x,D(o)?`Creating...`:`New feature`)},[()=>D(o)||D(r).trim().length===0||D(a).trim().length===0]),ee(`submit`,u,c),g(m,()=>D(r),e=>_(r,e)),g(v,()=>D(a),e=>_(a,e)),b(e,u),ne()}var be=c(`<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>`),xe=c(`<option> </option>`),Se=c(`<div class="absolute right-0 z-20 mt-2 w-56 rounded-lg border border-hairline bg-white p-1 shadow-lg"><button type="button" class="flex w-full items-start rounded-md px-3 py-2 text-left text-sm text-slate-700 hover:bg-slate-50 disabled:opacity-50"><span><span class="block font-medium"> </span> <span class="block text-xs text-slate-500">Add bundled example specs.</span></span></button></div>`),Ce=c(`<div class="rounded-lg border border-dashed border-hairline bg-white p-8 text-center text-sm text-slate-500">Loading features...</div>`),we=c(`<div class="rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-700"> </div>`),Te=c(`<div class="space-y-3"><p>No features yet.</p> <p class="text-xs">Features live inside projects. Start by opening or creating a project.</p> <div class="flex flex-wrap justify-center gap-2"><a href="/projects" class="rounded-md bg-slate-900 px-4 py-2 text-sm font-medium text-white">Go to projects</a> <button type="button" class="rounded-md border border-slate-300 bg-white px-4 py-2 text-sm font-medium text-slate-700"> </button></div></div>`),Ee=c(`<div class="rounded-lg border border-dashed border-hairline bg-white p-8 text-center text-sm text-slate-500"><!></div>`),De=c(`<li><!></li>`),Oe=c(`<ul class="grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3"></ul>`),ke=c(`<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-feature-title"><header class="flex items-start justify-between gap-4 border-b border-hairline px-5 py-4"><div><h2 id="new-feature-title" class="text-base font-semibold text-slate-950">New feature</h2> <p class="mt-1 text-sm text-slate-500">Start a behavior model from a blank specification.</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>`),Ae=c(`<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="grid gap-6 lg:grid-cols-[minmax(0,1fr)_auto] lg:items-end"><div class="max-w-3xl"><div><p class="text-xs font-semibold uppercase tracking-wide text-brand-700">Behavior models</p> <h1 class="mt-2 text-4xl font-semibold tracking-tight text-slate-950">Features</h1> <p class="mt-2 max-w-2xl text-sm leading-6 text-slate-600">Describe what software does as surfaces, actions, states, rules, effects, and events.</p></div></div> <div class="grid grid-cols-2 gap-3 sm:grid-cols-4 lg:w-[42rem]"><div class="rounded-xl border border-slate-200 bg-white p-4 shadow-sm shadow-slate-950/5"><p class="text-xs font-medium uppercase tracking-wide text-brand-700">Models</p> <p class="mt-2 text-2xl font-semibold text-slate-950"> </p> <p class="mt-1 text-xs text-slate-500"> </p></div> <div class="rounded-xl border border-slate-200 bg-white p-4 shadow-sm shadow-slate-950/5"><p class="text-xs font-medium uppercase tracking-wide text-violet-700">Surfaces</p> <p class="mt-2 text-2xl font-semibold text-slate-950"> </p> <p class="mt-1 text-xs text-slate-500">Across models</p></div> <div class="rounded-xl border border-slate-200 bg-white p-4 shadow-sm shadow-slate-950/5"><p class="text-xs font-medium uppercase tracking-wide text-amber-700">Actions</p> <p class="mt-2 text-2xl font-semibold text-slate-950"> </p> <p class="mt-1 text-xs text-slate-500">Actions</p></div> <div class="rounded-xl border border-slate-200 bg-white p-4 shadow-sm shadow-slate-950/5"><p class="text-xs font-medium uppercase tracking-wide text-emerald-700">Maturity</p> <p class="mt-2 text-2xl font-semibold text-slate-950"> </p> <p class="mt-1 text-xs text-slate-500">Average</p></div></div></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="feature-search" class="sr-only">Search features</label> <input id="feature-search" type="search" placeholder="Search features..." class="h-9 w-full min-w-0 rounded-md border-0 bg-transparent px-3 text-sm outline-none placeholder:text-slate-400"/> <!></div> <div class="flex flex-col gap-2 sm:flex-row sm:items-center"><label class="flex h-10 items-center gap-2 rounded-lg border border-hairline bg-white px-3 text-sm text-slate-600"><span class="text-xs font-medium">Project</span> <select class="bg-transparent text-sm font-medium text-slate-800 outline-none"><option>All</option><option>Unassigned</option><!></select></label> <!> <label class="flex h-10 items-center gap-2 rounded-lg border border-hairline bg-white px-3 text-sm text-slate-600"><span class="text-xs font-medium">Sort</span> <select class="bg-transparent text-sm font-medium text-slate-800 outline-none"><option>Updated</option><option>Name</option><option>Maturity</option></select></label> <div class="relative"><button type="button" class="inline-flex h-10 items-center gap-2 rounded-lg border border-hairline bg-white px-3 text-sm font-medium text-slate-700 hover:bg-slate-50">More <span class="text-xs text-slate-400" aria-hidden="true">v</span></button> <!></div> <a href="/projects" 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" title="New features are created from a project"><span class="text-base leading-none" aria-hidden="true">+</span> New feature</a></div></div></header> <section aria-labelledby="features-list-title"><div class="mb-3 flex flex-col gap-1 sm:flex-row sm:items-end sm:justify-between"><div><h2 id="features-list-title" class="text-base font-semibold text-slate-950">Behavior models</h2> <p class="text-sm text-slate-500">Open an feature to edit surfaces, rules, effects, and scenarios.</p></div> <p class="text-xs text-slate-500"> </p></div> <!></section></div> <!> <!>`,1);function L(a,c){re(c,!0),ae(()=>{j.refresh(),A.refresh(),he.refresh()});async function te(e,t){await le(`/features/${await j.create(e,t)}`)}async function h(e){await fe({title:`Delete "${j.summaries.find(t=>String(t.id)===String(e))?.name??`this feature`}"?`,message:`Its surfaces, actions, rules, and scenarios will be removed. Any project that references it keeps the link, but the feature itself is gone. This cannot be undone.`,confirmLabel:`Delete feature`,tone:`danger`})&&await j.remove(e)}let M=E(!1),P=E(``),F=E(!1),I=E(!1),L=E(`updated`),R=E(null),z=E(`all`),B=E(`all`),V=E(!1),H=E(e(new Map));async function je(e){if(D(H).has(e))return;let t=await(await me()).useCases.getProject(e),n=new Map(D(H));n.set(e,new Set(t?.featureIds.map(String)??[])),_(H,n,!0)}async function Me(){let e=await me(),t=await Promise.all(A.summaries.map(async t=>{let n=await e.useCases.getProject(t.id);return[String(t.id),new Set(n?.featureIds.map(String)??[])]}));_(H,new Map(t),!0)}i(()=>{if(D(z)!==`all`){if(D(z)===`unassigned`){Me();return}je(D(z))}});let Ne=T(()=>j.summaries.reduce((e,t)=>e+t.surfaceCount,0)),Pe=T(()=>j.summaries.reduce((e,t)=>e+t.actionCount,0)),Fe=T(()=>j.summaries.length===0?0:Math.round(j.summaries.reduce((e,t)=>e+t.maturityPercentage,0)/j.summaries.length)),U=T(()=>{let e=[];for(let t of j.summaries)for(let n of t.tags??[])e.push(n);return e});i(()=>{he.registerTypes(D(U).map(e=>e.type))});let Ie=T(()=>[...new Set(D(U).map(e=>de(e.type)))].sort((e,t)=>e.localeCompare(t)));i(()=>{if(!D(I))return;let e=e=>{D(R)?.contains(e.target)||_(I,!1)};return window.addEventListener(`pointerdown`,e,!0),()=>window.removeEventListener(`pointerdown`,e,!0)});function Le(e){e.key===`Escape`&&(_(I,!1),_(F,!1))}let W=T(()=>{let e=D(P).trim().toLowerCase(),t=t=>e.length===0||t.name.toLowerCase().includes(e)||(t.description??``).toLowerCase().includes(e),n=e=>{if(D(z)===`all`)return!0;if(D(z)===`unassigned`){for(let t of D(H).values())if(t.has(e))return!1;return!0}return D(H).get(D(z))?.has(e)??!1};return j.summaries.filter(e=>t(e)&&n(String(e.id))&&Re(e,D(B))).sort((e,t)=>D(L)===`name`?e.name.localeCompare(t.name):D(L)===`maturity`?t.maturityPercentage-e.maturityPercentage:new Date(t.updatedAt).getTime()-new Date(e.updatedAt).getTime())});function Re(e,t){let n=e.tags??[];if(t===`all`)return!0;if(t===`untagged`)return n.length===0;let r=O(t);return n.some(e=>O(e)===r)}function ze(e){return j.summaries.filter(t=>Re(t,e)).length}async function Be(){if(!D(M)){_(M,!0);try{let e=await j.loadSamples(),t=e.addedProjects.length+e.addedFeatures.length>0,n=e.skippedProjects.length+e.skippedFeatures.length>0;if(!t&&!n)await k({title:`Nothing to load`,message:`No samples are bundled in this build.`,tone:`warning`});else if(!t)await k({title:`Already available`,message:N(e,`skipped`)+`
2
2
 
3
3
  Delete them and load again to restore from the sample.`,tone:`info`});else if(e.addedProjects.length>0){let t=e.addedProjects.length,n=e.addedFeatures.length,r=t===1?`project`:`projects`,i=n>0?`Added ${t} ${r} and ${n} ${n===1?`feature`:`features`}.`:`Added ${t} ${r}.`,a=e.addedFeatures.map(e=>e.name).join(` · `),o=await pe({title:`Samples loaded`,message:i,options:e.addedProjects.map(e=>({id:e.id,label:`Open ${e.name}`,description:a||void 0})),cancelLabel:`Close`,tone:`success`});o&&await le(`/projects/${o}`)}else await k({title:`Samples loaded`,message:N(e,`added`)+(n?`\n\nAlready present:\n${N(e,`skipped`)}`:``),tone:`success`})}finally{_(M,!1)}}}var Ve=Ae();ee(`keydown`,p,Le),ce(`1d0dgro`,e=>{u(()=>{o.title=`Features / Unspaghettit`})});var G=m(Ve),K=f(G),q=f(K),He=l(f(q),2),J=f(He),Y=l(f(J),2),Ue=f(Y,!0);C(Y);var We=l(Y,2),Ge=f(We);C(We),C(J);var X=l(J,2),Ke=l(f(X),2),qe=f(Ke,!0);C(Ke),w(2),C(X);var Z=l(X,2),Je=l(f(Z),2),Ye=f(Je,!0);C(Je),w(2),C(Z);var Xe=l(Z,2),Ze=l(f(Xe),2),Qe=f(Ze);C(Ze),w(2),C(Xe),C(He),C(q);var $e=l(q,2),et=f($e),tt=l(f(et),2);S(tt);var nt=l(tt,2),rt=e=>{var t=be();s(`click`,t,()=>_(P,``)),b(e,t)},it=T(()=>D(P).trim().length>0);x(nt,e=>{D(it)&&e(rt)}),C(et);var at=l(et,2),ot=f(at),Q=l(f(ot),2),st=f(Q);st.value=st.__value=`all`;var ct=l(st);ct.value=ct.__value=`unassigned`,n(l(ct),17,()=>A.summaries,e=>e.id,(e,n)=>{var r=xe(),i=f(r,!0);C(r);var a={};d(()=>{t(i,D(n).name),a!==(a=D(n).id)&&(r.value=(r.__value=D(n).id)??``)}),b(e,r)}),C(Q);var lt;y(Q),C(ot);var ut=l(ot,2);ge(ut,{get tags(){return D(U)},get value(){return D(B)},onChange:e=>_(B,e,!0),onManage:()=>_(V,!0),countLabel:ze});var dt=l(ut,2),ft=l(f(dt),2),pt=f(ft);pt.value=pt.__value=`updated`;var mt=l(pt);mt.value=mt.__value=`name`;var ht=l(mt);ht.value=ht.__value=`maturity`,C(ft),C(dt);var gt=l(dt,2),_t=f(gt),vt=l(_t,2),yt=e=>{var n=Se(),r=f(n),i=f(r),a=f(i),o=f(a,!0);C(a),w(2),C(i),C(r),C(n),d(()=>{r.disabled=D(M),t(o,D(M)?`Loading samples...`:`Load sample project`)}),s(`click`,r,()=>{_(I,!1),Be()}),b(e,n)};x(vt,e=>{D(I)&&e(yt)}),C(gt),oe(gt,e=>_(R,e),()=>D(R)),w(2),C(at),C($e),C(K);var bt=l(K,2),$=f(bt),xt=l(f($),2),St=f(xt);C(xt),C($);var Ct=l($,2),wt=e=>{b(e,Ce())},Tt=e=>{var n=we(),r=f(n,!0);C(n),d(()=>t(r,j.error)),b(e,n)},Et=e=>{var n=Ee(),i=f(n),a=e=>{var n=Te(),r=l(f(n),4),i=l(f(r),2),a=f(i,!0);C(i),C(r),C(n),d(()=>{i.disabled=D(M),t(a,D(M)?`Loading...`:`Load sample project`)}),s(`click`,i,Be),b(e,n)},o=e=>{b(e,r(`No features match your search.`))};x(i,e=>{j.summaries.length===0?e(a):e(o,-1)}),C(n),b(e,n)},Dt=e=>{var t=Oe();n(t,21,()=>D(W),e=>e.id,(e,t)=>{var n=De();ve(f(n),{get summary(){return D(t)},get tagTypeOptions(){return D(Ie)},onAddTag:(e,n)=>j.addTag(String(D(t).id),{type:e,value:n}),onRemoveTag:async(e,n)=>{await j.removeTag(String(D(t).id),{type:e,value:n}),D(B)!==`all`&&D(B)!==`untagged`&&O(D(B))===O({type:e,value:n})&&_(B,`all`)},onDelete:()=>h(D(t).id)}),C(n),b(e,n)}),C(t),b(e,t)};x(Ct,e=>{j.loading?e(wt):j.error?e(Tt,1):D(W).length===0?e(Et,2):e(Dt,-1)}),C(bt),C(G);var Ot=l(G,2),kt=e=>{var t=ke(),n=f(t),r=f(n),i=l(f(r),2);C(r);var a=l(r,2);ye(f(a),{onSubmit:te}),C(a),C(n),C(t),s(`click`,t,e=>{e.currentTarget===e.target&&_(F,!1)}),s(`click`,i,()=>_(F,!1)),b(e,t)};x(Ot,e=>{D(F)&&e(kt)}),_e(l(Ot,2),{get open(){return D(V)},get tags(){return D(U)},onClose:()=>_(V,!1),onRenamed:()=>j.refreshSilent()}),d(()=>{t(Ue,D(W).length),t(Ge,`${j.summaries.length??``} total`),t(qe,D(Ne)),t(Ye,D(Pe)),t(Qe,`${D(Fe)??``}%`),lt!==(lt=D(z))&&(Q.value=(Q.__value=D(z))??``,v(Q,D(z))),se(_t,`aria-expanded`,D(I)),t(St,`${D(W).length??``} shown`)}),g(tt,()=>D(P),e=>_(P,e)),s(`change`,Q,e=>{let t=e.currentTarget.value;_(z,t===`all`||t===`unassigned`?t:ue(t),!0)}),ie(ft,()=>D(L),e=>_(L,e)),s(`click`,_t,()=>_(I,!D(I))),b(a,Ve),ne()}a([`click`,`change`]);export{L as component,P as universal};