unspaghettit 0.1.8 → 0.2.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.
- package/README.md +28 -10
- package/build/client/_app/immutable/assets/0.DFMDYAU9.css +1 -0
- package/build/client/_app/immutable/assets/0.DFMDYAU9.css.br +0 -0
- package/build/client/_app/immutable/assets/0.DFMDYAU9.css.gz +0 -0
- package/build/client/_app/immutable/assets/3.B3akUL9A.css +1 -0
- package/build/client/_app/immutable/assets/3.B3akUL9A.css.br +0 -0
- package/build/client/_app/immutable/assets/3.B3akUL9A.css.gz +0 -0
- package/build/client/_app/immutable/chunks/{ByNzXSTs.js → BO66rBOa2.js} +1 -1
- package/build/client/_app/immutable/chunks/BO66rBOa2.js.br +0 -0
- package/build/client/_app/immutable/chunks/BO66rBOa2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DsHardz9.js → BOrLmFwJ.js} +1 -1
- package/build/client/_app/immutable/chunks/BOrLmFwJ.js.br +0 -0
- package/build/client/_app/immutable/chunks/BOrLmFwJ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BPl9BITm.js +3 -0
- package/build/client/_app/immutable/chunks/BPl9BITm.js.br +0 -0
- package/build/client/_app/immutable/chunks/BPl9BITm.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BfMYiIUi.js +1 -0
- package/build/client/_app/immutable/chunks/BfMYiIUi.js.br +0 -0
- package/build/client/_app/immutable/chunks/BfMYiIUi.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Bp2_Vghh.js +1 -0
- package/build/client/_app/immutable/chunks/Bp2_Vghh.js.br +0 -0
- package/build/client/_app/immutable/chunks/Bp2_Vghh.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{C8VYoO28.js → Bp8HpEPe2.js} +1 -1
- package/build/client/_app/immutable/chunks/Bp8HpEPe2.js.br +0 -0
- package/build/client/_app/immutable/chunks/{C8VYoO28.js.gz → Bp8HpEPe2.js.gz} +0 -0
- package/build/client/_app/immutable/chunks/C8rRKIXT.js +1 -0
- package/build/client/_app/immutable/chunks/C8rRKIXT.js.br +0 -0
- package/build/client/_app/immutable/chunks/C8rRKIXT.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{BsIqn_3K2.js → CJjJLwzv2.js} +1 -1
- package/build/client/_app/immutable/chunks/CJjJLwzv2.js.br +0 -0
- package/build/client/_app/immutable/chunks/CJjJLwzv2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Cl7Z3e6-.js +1 -0
- package/build/client/_app/immutable/chunks/Cl7Z3e6-.js.br +0 -0
- package/build/client/_app/immutable/chunks/Cl7Z3e6-.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CxyLMlpt2.js +2 -0
- package/build/client/_app/immutable/chunks/CxyLMlpt2.js.br +0 -0
- package/build/client/_app/immutable/chunks/CxyLMlpt2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D6jhrpTg.js +1 -0
- package/build/client/_app/immutable/chunks/D6jhrpTg.js.br +0 -0
- package/build/client/_app/immutable/chunks/D6jhrpTg.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D8YEa1po.js +1 -0
- package/build/client/_app/immutable/chunks/D8YEa1po.js.br +0 -0
- package/build/client/_app/immutable/chunks/D8YEa1po.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D9dKmajw.js +1 -0
- package/build/client/_app/immutable/chunks/D9dKmajw.js.br +0 -0
- package/build/client/_app/immutable/chunks/D9dKmajw.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DBJWcC6Y.js +1 -0
- package/build/client/_app/immutable/chunks/DBJWcC6Y.js.br +0 -0
- package/build/client/_app/immutable/chunks/DBJWcC6Y.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DHoA038D.js +1 -0
- package/build/client/_app/immutable/chunks/DHoA038D.js.br +2 -0
- package/build/client/_app/immutable/chunks/DHoA038D.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DKgYpi6_.js +1 -0
- package/build/client/_app/immutable/chunks/DKgYpi6_.js.br +0 -0
- package/build/client/_app/immutable/chunks/DKgYpi6_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DatGSObE.js +1 -0
- package/build/client/_app/immutable/chunks/DatGSObE.js.br +0 -0
- package/build/client/_app/immutable/chunks/DatGSObE.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dg0acPpT.js +1 -0
- package/build/client/_app/immutable/chunks/Dg0acPpT.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dg0acPpT.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DjWKKtqp.js +1 -0
- package/build/client/_app/immutable/chunks/DjWKKtqp.js.br +1 -0
- package/build/client/_app/immutable/chunks/DjWKKtqp.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dq0DUAz1.js +1 -0
- package/build/client/_app/immutable/chunks/Dq0DUAz1.js.br +0 -0
- package/build/client/_app/immutable/chunks/Dq0DUAz1.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DZ7_iXX8.js → HKLi1Yz3.js} +1 -1
- package/build/client/_app/immutable/chunks/HKLi1Yz3.js.br +0 -0
- package/build/client/_app/immutable/chunks/HKLi1Yz3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/N7PXjlRH.js +1 -0
- package/build/client/_app/immutable/chunks/N7PXjlRH.js.br +0 -0
- package/build/client/_app/immutable/chunks/N7PXjlRH.js.gz +0 -0
- package/build/client/_app/immutable/chunks/aNMRV4sP2.js +5 -0
- package/build/client/_app/immutable/chunks/aNMRV4sP2.js.br +0 -0
- package/build/client/_app/immutable/chunks/aNMRV4sP2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/cMamJTsF.js +1 -0
- package/build/client/_app/immutable/chunks/cMamJTsF.js.br +0 -0
- package/build/client/_app/immutable/chunks/cMamJTsF.js.gz +0 -0
- package/build/client/_app/immutable/chunks/hpWJNn0t2.js +2 -0
- package/build/client/_app/immutable/chunks/hpWJNn0t2.js.br +0 -0
- package/build/client/_app/immutable/chunks/hpWJNn0t2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/iQu0D9Ux.js +1 -0
- package/build/client/_app/immutable/chunks/iQu0D9Ux.js.br +0 -0
- package/build/client/_app/immutable/chunks/iQu0D9Ux.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ib21i2T_.js +6 -0
- package/build/client/_app/immutable/chunks/ib21i2T_.js.br +0 -0
- package/build/client/_app/immutable/chunks/ib21i2T_.js.gz +0 -0
- package/build/client/_app/immutable/chunks/suTxxv1t.js +1 -0
- package/build/client/_app/immutable/chunks/suTxxv1t.js.br +1 -0
- package/build/client/_app/immutable/chunks/suTxxv1t.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.CLgh6Mx_.js +2 -0
- package/build/client/_app/immutable/entry/app.CLgh6Mx_.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CLgh6Mx_.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.D5GPCQZD.js +1 -0
- package/build/client/_app/immutable/entry/start.D5GPCQZD.js.br +0 -0
- package/build/client/_app/immutable/entry/start.D5GPCQZD.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.BOoI-hsu.js +4 -0
- package/build/client/_app/immutable/nodes/0.BOoI-hsu.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.BOoI-hsu.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.KYdA6ppX.js +1 -0
- package/build/client/_app/immutable/nodes/1.KYdA6ppX.js.br +2 -0
- package/build/client/_app/immutable/nodes/1.KYdA6ppX.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.DBz20KgG.js +1 -0
- package/build/client/_app/immutable/nodes/2.DBz20KgG.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.DBz20KgG.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.19DIoFtw.js +1 -0
- package/build/client/_app/immutable/nodes/3.19DIoFtw.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.19DIoFtw.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.BvMzqBJj.js +3 -0
- package/build/client/_app/immutable/nodes/4.BvMzqBJj.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.BvMzqBJj.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.Dq6obSGG.js +42 -0
- package/build/client/_app/immutable/nodes/5.Dq6obSGG.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.Dq6obSGG.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.BOHISqs-.js +5 -0
- package/build/client/_app/immutable/nodes/6.BOHISqs-.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.BOHISqs-.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.CemgNJfw.js +1 -0
- package/build/client/_app/immutable/nodes/7.CemgNJfw.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.CemgNJfw.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.DejSfIYh.js +5 -0
- package/build/client/_app/immutable/nodes/8.DejSfIYh.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.DejSfIYh.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{8.l6ZO_YE3.js → 9.CMW6a2Lg.js} +51 -48
- package/build/client/_app/immutable/nodes/9.CMW6a2Lg.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.CMW6a2Lg.js.gz +0 -0
- package/build/client/_app/version.json +1 -1
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/server/chunks/0-C_o0oz-N.js +15 -0
- package/build/server/chunks/0-C_o0oz-N.js.map +1 -0
- package/build/server/chunks/1-DPpKAKXV.js +9 -0
- package/build/server/chunks/{1-58bNZ9nH.js.map → 1-DPpKAKXV.js.map} +1 -1
- package/build/server/chunks/2-AlfFqtL1.js +9 -0
- package/build/server/chunks/2-AlfFqtL1.js.map +1 -0
- package/build/server/chunks/3-vbjUt_51.js +16 -0
- package/build/server/chunks/3-vbjUt_51.js.map +1 -0
- package/build/server/chunks/4-BNow4x6D.js +16 -0
- package/build/server/chunks/4-BNow4x6D.js.map +1 -0
- package/build/server/chunks/5-D7OCJpxD.js +9 -0
- package/build/server/chunks/5-D7OCJpxD.js.map +1 -0
- package/build/server/chunks/6-QQ7r8Rd5.js +9 -0
- package/build/server/chunks/6-QQ7r8Rd5.js.map +1 -0
- package/build/server/chunks/7-CbPLGaIG.js +9 -0
- package/build/server/chunks/7-CbPLGaIG.js.map +1 -0
- package/build/server/chunks/8-CVO-E-sf.js +9 -0
- package/build/server/chunks/8-CVO-E-sf.js.map +1 -0
- package/build/server/chunks/9-DxT1baO5.js +9 -0
- package/build/server/chunks/9-DxT1baO5.js.map +1 -0
- package/build/server/chunks/{FeatureCard-CDB0iQEO.js → FeatureCard-BQOY6gJQ.js} +2 -2
- package/build/server/chunks/{FeatureCard-CDB0iQEO.js.map → FeatureCard-BQOY6gJQ.js.map} +1 -1
- package/build/server/chunks/{FeatureJson-BKCG8vk2.js → FeatureJson-Bv-qiOSf.js} +2 -2
- package/build/server/chunks/{FeatureJson-BKCG8vk2.js.map → FeatureJson-Bv-qiOSf.js.map} +1 -1
- package/build/server/chunks/FeatureTransforms-UWDHmWEg.js +311 -0
- package/build/server/chunks/FeatureTransforms-UWDHmWEg.js.map +1 -0
- package/build/server/chunks/{FeatureValidator-DDdFIzr8.js → FeatureValidator-B8qEjAUW.js} +235 -3
- package/build/server/chunks/FeatureValidator-B8qEjAUW.js.map +1 -0
- package/build/server/chunks/{ManageTagsDialog-CT8-t_GJ.js → ManageTagsDialog-DBxA3tM2.js} +4 -3
- package/build/server/chunks/ManageTagsDialog-DBxA3tM2.js.map +1 -0
- package/build/server/chunks/{ProjectsIndex-yg-CEhxx.js → ProjectsIndex-CoDrvRya.js} +8 -8
- package/build/server/chunks/ProjectsIndex-CoDrvRya.js.map +1 -0
- package/build/server/chunks/{RenameTag-nSZ6Leh-.js → RenameTag-BuWLMl1m.js} +2 -2
- package/build/server/chunks/{RenameTag-nSZ6Leh-.js.map → RenameTag-BuWLMl1m.js.map} +1 -1
- package/build/server/chunks/TagDotStrip-B1XQ0m0Y.js +88 -0
- package/build/server/chunks/TagDotStrip-B1XQ0m0Y.js.map +1 -0
- package/build/server/chunks/{TagFilterSelect-BlEttqQE.js → TagFilterSelect-DbO0Qduh.js} +4 -3
- package/build/server/chunks/TagFilterSelect-DbO0Qduh.js.map +1 -0
- package/build/server/chunks/{TagPalette-CvQJ40bt.js → TagPalette-CtMNYCmu.js} +6 -2
- package/build/server/chunks/TagPalette-CtMNYCmu.js.map +1 -0
- package/build/server/chunks/{_layout.svelte-D2SACu8G.js → _layout.svelte-BREws55o.js} +99 -37
- package/build/server/chunks/_layout.svelte-BREws55o.js.map +1 -0
- package/build/server/chunks/{_page.svelte-Dbu42LbU.js → _page.svelte-B1s7jxaQ.js} +9 -8
- package/build/server/chunks/{_page.svelte-Dbu42LbU.js.map → _page.svelte-B1s7jxaQ.js.map} +1 -1
- package/build/server/chunks/_page.svelte-B7hT3P8E.js +29 -0
- package/build/server/chunks/{_page.svelte-CsqELhKQ.js.map → _page.svelte-B7hT3P8E.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-DYOnk7iP.js → _page.svelte-BKKCa9H5.js} +11 -8
- package/build/server/chunks/{_page.svelte-DYOnk7iP.js.map → _page.svelte-BKKCa9H5.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-C2jPZylo.js → _page.svelte-BKTveFAj.js} +16 -14
- package/build/server/chunks/_page.svelte-BKTveFAj.js.map +1 -0
- package/build/server/chunks/_page.svelte-BqSC-1vK.js +404 -0
- package/build/server/chunks/_page.svelte-BqSC-1vK.js.map +1 -0
- package/build/server/chunks/{_page.svelte-bbz79XAC.js → _page.svelte-BtI2zZ_Z.js} +38 -282
- package/build/server/chunks/_page.svelte-BtI2zZ_Z.js.map +1 -0
- package/build/server/chunks/_page.svelte-De508ek8.js +29 -0
- package/build/server/chunks/{_page.svelte-C3FIXVWr.js.map → _page.svelte-De508ek8.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-BUfFGiJQ.js → _page.svelte-Zf9H4KOP.js} +16 -14
- package/build/server/chunks/_page.svelte-Zf9H4KOP.js.map +1 -0
- package/build/server/chunks/{_server.ts-Bs4QqmRJ.js → _server.ts-0uNTZKwF.js} +7 -6
- package/build/server/chunks/{_server.ts-Bs4QqmRJ.js.map → _server.ts-0uNTZKwF.js.map} +1 -1
- package/build/server/chunks/{_server.ts-Bnpe4TIM.js → _server.ts-BIBWjQI-.js} +5 -4
- package/build/server/chunks/{_server.ts-Bnpe4TIM.js.map → _server.ts-BIBWjQI-.js.map} +1 -1
- package/build/server/chunks/{_server.ts-FARjojeH.js → _server.ts-BihpbxOW.js} +5 -4
- package/build/server/chunks/{_server.ts-FARjojeH.js.map → _server.ts-BihpbxOW.js.map} +1 -1
- package/build/server/chunks/{_server.ts-efMdTu3p.js → _server.ts-BuoQ02BW.js} +5 -4
- package/build/server/chunks/{_server.ts-efMdTu3p.js.map → _server.ts-BuoQ02BW.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DDtoQw0L.js → _server.ts-CWvU15tL.js} +5 -4
- package/build/server/chunks/{_server.ts-DDtoQw0L.js.map → _server.ts-CWvU15tL.js.map} +1 -1
- package/build/server/chunks/{_server.ts-B80OMNjj.js → _server.ts-D4EO0VHu.js} +6 -5
- package/build/server/chunks/{_server.ts-B80OMNjj.js.map → _server.ts-D4EO0VHu.js.map} +1 -1
- package/build/server/chunks/{_server.ts-DZi40j_b.js → _server.ts-DDa0Nk_S.js} +5 -4
- package/build/server/chunks/{_server.ts-DZi40j_b.js.map → _server.ts-DDa0Nk_S.js.map} +1 -1
- package/build/server/chunks/{_server.ts-BaT7ADxX.js → _server.ts-DcZPhyhK.js} +7 -6
- package/build/server/chunks/{_server.ts-BaT7ADxX.js.map → _server.ts-DcZPhyhK.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CMPK37Vt.js → _server.ts-DsbbVoOn.js} +5 -4
- package/build/server/chunks/{_server.ts-CMPK37Vt.js.map → _server.ts-DsbbVoOn.js.map} +1 -1
- package/build/server/chunks/{_server.ts-y0yINgGA.js → _server.ts-Dy5zQHe2.js} +8 -7
- package/build/server/chunks/{_server.ts-y0yINgGA.js.map → _server.ts-Dy5zQHe2.js.map} +1 -1
- package/build/server/chunks/{_server.ts-CagU2lG4.js → _server.ts-YnfXkeMJ.js} +8 -7
- package/build/server/chunks/_server.ts-YnfXkeMJ.js.map +1 -0
- package/build/server/chunks/{_server.ts-RzdFK98M.js → _server.ts-vcaqdwxS.js} +5 -4
- package/build/server/chunks/_server.ts-vcaqdwxS.js.map +1 -0
- package/build/server/chunks/{browserContainer-D4Rbh5md.js → browserContainer-CNX7ANld.js} +115 -30
- package/build/server/chunks/browserContainer-CNX7ANld.js.map +1 -0
- package/build/server/chunks/builderModeStore.svelte-ihupr-3p.js +681 -0
- package/build/server/chunks/builderModeStore.svelte-ihupr-3p.js.map +1 -0
- package/build/server/chunks/{client-DzD76Kll.js → client-DfpLcAZ9.js} +2 -2
- package/build/server/chunks/{client-DzD76Kll.js.map → client-DfpLcAZ9.js.map} +1 -1
- package/build/server/chunks/{error.svelte-BYvfCaDL.js → error.svelte-C35KOpru.js} +4 -4
- package/build/server/chunks/{error.svelte-BYvfCaDL.js.map → error.svelte-C35KOpru.js.map} +1 -1
- package/build/server/chunks/eventBus-B9k-Vzso.js +19 -0
- package/build/server/chunks/eventBus-B9k-Vzso.js.map +1 -0
- package/build/server/chunks/{featuresStore.svelte-C5UcVnjA.js → featuresStore.svelte-DR1gYZyu.js} +6 -5
- package/build/server/chunks/featuresStore.svelte-DR1gYZyu.js.map +1 -0
- package/build/server/chunks/{internal-BA0a_nCh.js → internal-BPKrFkK1.js} +2 -2
- package/build/server/chunks/{internal-BA0a_nCh.js.map → internal-BPKrFkK1.js.map} +1 -1
- package/build/server/chunks/{projectsStore.svelte-CCIKC4cA.js → projectsStore.svelte-QDz5PchX.js} +3 -2
- package/build/server/chunks/projectsStore.svelte-QDz5PchX.js.map +1 -0
- package/build/server/chunks/{reconcile-CYtw0vAj.js → reconcile-Dv7jS3C8.js} +3 -3
- package/build/server/chunks/{reconcile-CYtw0vAj.js.map → reconcile-Dv7jS3C8.js.map} +1 -1
- package/build/server/chunks/shared-server-CCs2CV3b.js +14 -0
- package/build/server/chunks/shared-server-CCs2CV3b.js.map +1 -0
- package/build/server/chunks/{snapshotRepository-D04sCQ0-.js → snapshotRepository-BPXCjX92.js} +40 -8
- package/build/server/chunks/snapshotRepository-BPXCjX92.js.map +1 -0
- package/build/server/chunks/{state-BVel4q-J.js → state-CpLVNZq7.js} +2 -2
- package/build/server/chunks/{state-BVel4q-J.js.map → state-CpLVNZq7.js.map} +1 -1
- package/build/server/chunks/{sync-BFBTG9bE.js → sync-DZ3dn761.js} +2 -2
- package/build/server/chunks/{sync-BFBTG9bE.js.map → sync-DZ3dn761.js.map} +1 -1
- package/build/server/chunks/{syncBridge-B90NwG8R.js → syncBridge-BwXzPdjJ.js} +2 -2
- package/build/server/chunks/{syncBridge-B90NwG8R.js.map → syncBridge-BwXzPdjJ.js.map} +1 -1
- package/build/server/chunks/{TagDotStrip-K9ispK6D.js → tagPaletteStore.svelte-DfZOBvgY.js} +5 -87
- package/build/server/chunks/tagPaletteStore.svelte-DfZOBvgY.js.map +1 -0
- package/build/server/chunks/{tourStore.svelte-C2hizkdG.js → tourStore.svelte-CYs4oLjF.js} +2 -2
- package/build/server/chunks/tourStore.svelte-CYs4oLjF.js.map +1 -0
- package/build/server/index.js +2 -12
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +36 -28
- package/build/server/manifest.js.map +1 -1
- package/cli/README.md +46 -20
- package/cli/clients/claude-code.ts +5 -4
- package/cli/clients/claude-desktop.ts +5 -4
- package/cli/commands/dashboard.ts +38 -4
- package/cli/commands/init.ts +147 -84
- package/cli/commands/view.ts +77 -0
- package/cli/skills/unspa-audit/SKILL.md +9 -0
- package/cli/skills/unspa-edit/SKILL.md +91 -0
- package/cli/skills/unspa-implement/SKILL.md +46 -1
- package/cli/unspa.ts +57 -13
- package/cli/util/context-files.ts +5 -3
- package/cli/util/views.ts +38 -0
- package/mcp-server/resources/operations.ts +2 -1
- package/mcp-server/tools/_evolution.ts +53 -0
- package/mcp-server/tools/action.ts +64 -6
- package/mcp-server/tools/batch.ts +34 -24
- package/mcp-server/tools/feature.ts +17 -9
- package/mcp-server/tools/queue.ts +101 -9
- package/mcp-server/tools/specGaps.ts +14 -1
- package/package.json +3 -1
- package/src/features/behavior-model/application/use-cases/MutateFeature.ts +20 -31
- package/src/features/behavior-model/application/use-cases/SaveFeature.ts +13 -9
- package/src/features/behavior-model/domain/entities/Action.ts +167 -95
- package/src/features/behavior-model/domain/services/FeatureTransforms.ts +49 -0
- package/src/features/behavior-model/domain/services/FeatureValidator.ts +50 -0
- package/src/features/behavior-model/infrastructure/persistence/snapshot-discovery.ts +28 -3
- package/src/features/behavior-model/presentation/components/ActionEditor.svelte +55 -7
- package/src/features/builder-mode/application/use-cases/GetBuilderModeDashboard.ts +41 -0
- package/src/features/builder-mode/application/use-cases/GetBuilderModeProject.ts +42 -0
- package/src/features/builder-mode/domain/BuilderModeDashboard.ts +172 -0
- package/src/features/builder-mode/infrastructure/adapters/defaultBuilderHost.ts +27 -0
- package/src/features/builder-mode/presentation/components/BuilderModeDashboard.svelte +1335 -0
- package/src/features/builder-mode/presentation/components/BuilderTagChips.svelte +289 -0
- package/src/features/builder-mode/presentation/components/ClampedDescription.svelte +174 -0
- package/src/features/builder-mode/presentation/components/GameScore.svelte +194 -0
- package/src/features/builder-mode/presentation/ports/BuilderHostPorts.ts +39 -0
- package/src/features/builder-mode/presentation/stores/builderModeStore.svelte.ts +679 -0
- package/src/features/implementation-queue/application/use-cases/EnqueueQueueItem.ts +16 -5
- package/src/features/implementation-queue/application/use-cases/SetQueueItemTarget.ts +38 -0
- package/src/features/implementation-queue/domain/entities/QueueItem.ts +43 -0
- package/src/features/implementation-queue/domain/services/QueueOperations.ts +26 -1
- package/src/features/maturity/domain/MaturityScorer.ts +13 -4
- package/src/features/mcp-tools/application/tools/listActions.ts +9 -1
- package/src/features/projects/infrastructure/io/ProjectJson.ts +25 -4
- package/src/lib/views/enabled.ts +19 -0
- package/src/lib/views/registry.ts +72 -0
- package/src/routes/+layout.svelte +583 -348
- package/src/routes/builder-mode/+page.svelte +9 -0
- package/src/routes/builder-mode/+page.ts +12 -0
- package/src/routes/tutorial/+page.svelte +8 -0
- package/src/shared/infrastructure/container.ts +208 -199
- package/build/client/_app/immutable/assets/0.BgNAkMzG.css +0 -1
- package/build/client/_app/immutable/assets/0.BgNAkMzG.css.br +0 -0
- package/build/client/_app/immutable/assets/0.BgNAkMzG.css.gz +0 -0
- package/build/client/_app/immutable/chunks/8V0Jan-K.js +0 -2
- package/build/client/_app/immutable/chunks/8V0Jan-K.js.br +0 -0
- package/build/client/_app/immutable/chunks/8V0Jan-K.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B5jHfatx.js +0 -1
- package/build/client/_app/immutable/chunks/B5jHfatx.js.br +0 -0
- package/build/client/_app/immutable/chunks/B5jHfatx.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BQQLoxQo.js +0 -5
- package/build/client/_app/immutable/chunks/BQQLoxQo.js.br +0 -0
- package/build/client/_app/immutable/chunks/BQQLoxQo.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BZCGqXF-.js +0 -1
- package/build/client/_app/immutable/chunks/BZCGqXF-.js.br +0 -2
- package/build/client/_app/immutable/chunks/BZCGqXF-.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BpZHquM3.js +0 -1
- package/build/client/_app/immutable/chunks/BpZHquM3.js.br +0 -0
- package/build/client/_app/immutable/chunks/BpZHquM3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BsIqn_3K2.js.br +0 -0
- package/build/client/_app/immutable/chunks/BsIqn_3K2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BxAqshUk.js +0 -1
- package/build/client/_app/immutable/chunks/BxAqshUk.js.br +0 -0
- package/build/client/_app/immutable/chunks/BxAqshUk.js.gz +0 -0
- package/build/client/_app/immutable/chunks/ByNzXSTs.js.br +0 -0
- package/build/client/_app/immutable/chunks/ByNzXSTs.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C0OSZ2OV.js +0 -1
- package/build/client/_app/immutable/chunks/C0OSZ2OV.js.br +0 -0
- package/build/client/_app/immutable/chunks/C0OSZ2OV.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C2XQCtR3.js +0 -1
- package/build/client/_app/immutable/chunks/C2XQCtR3.js.br +0 -0
- package/build/client/_app/immutable/chunks/C2XQCtR3.js.gz +0 -0
- package/build/client/_app/immutable/chunks/C8VYoO28.js.br +0 -0
- package/build/client/_app/immutable/chunks/CKUA0lwj.js +0 -1
- package/build/client/_app/immutable/chunks/CKUA0lwj.js.br +0 -0
- package/build/client/_app/immutable/chunks/CKUA0lwj.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CM5qK71w.js +0 -6
- package/build/client/_app/immutable/chunks/CM5qK71w.js.br +0 -0
- package/build/client/_app/immutable/chunks/CM5qK71w.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CiC9AlkQ.js +0 -1
- package/build/client/_app/immutable/chunks/CiC9AlkQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/CiC9AlkQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DF6QYH3p.js +0 -3
- package/build/client/_app/immutable/chunks/DF6QYH3p.js.br +0 -0
- package/build/client/_app/immutable/chunks/DF6QYH3p.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DGo7EzwK.js +0 -1
- package/build/client/_app/immutable/chunks/DGo7EzwK.js.br +0 -0
- package/build/client/_app/immutable/chunks/DGo7EzwK.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DOrHTzKX2.js +0 -2
- package/build/client/_app/immutable/chunks/DOrHTzKX2.js.br +0 -0
- package/build/client/_app/immutable/chunks/DOrHTzKX2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DZ7_iXX8.js.br +0 -0
- package/build/client/_app/immutable/chunks/DZ7_iXX8.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DayeafKd.js +0 -1
- package/build/client/_app/immutable/chunks/DayeafKd.js.br +0 -0
- package/build/client/_app/immutable/chunks/DayeafKd.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DsHardz9.js.br +0 -1
- package/build/client/_app/immutable/chunks/DsHardz9.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dvd8XBNO.js +0 -1
- package/build/client/_app/immutable/chunks/Dvd8XBNO.js.br +0 -1
- package/build/client/_app/immutable/chunks/Dvd8XBNO.js.gz +0 -0
- package/build/client/_app/immutable/chunks/lYfEZr7V.js +0 -1
- package/build/client/_app/immutable/chunks/lYfEZr7V.js.br +0 -0
- package/build/client/_app/immutable/chunks/lYfEZr7V.js.gz +0 -0
- package/build/client/_app/immutable/chunks/nx-Rqoe9.js +0 -1
- package/build/client/_app/immutable/chunks/nx-Rqoe9.js.br +0 -0
- package/build/client/_app/immutable/chunks/nx-Rqoe9.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.CBQ5lc4C.js +0 -2
- package/build/client/_app/immutable/entry/app.CBQ5lc4C.js.br +0 -0
- package/build/client/_app/immutable/entry/app.CBQ5lc4C.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.CwosiFCq.js +0 -1
- package/build/client/_app/immutable/entry/start.CwosiFCq.js.br +0 -0
- package/build/client/_app/immutable/entry/start.CwosiFCq.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.CrNDTsZU.js +0 -3
- package/build/client/_app/immutable/nodes/0.CrNDTsZU.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.CrNDTsZU.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.DIhR9Se9.js +0 -1
- package/build/client/_app/immutable/nodes/1.DIhR9Se9.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.DIhR9Se9.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.Cxe9W2ys.js +0 -1
- package/build/client/_app/immutable/nodes/2.Cxe9W2ys.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.Cxe9W2ys.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.Db_qGhZh.js +0 -3
- package/build/client/_app/immutable/nodes/3.Db_qGhZh.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.Db_qGhZh.js.gz +0 -0
- package/build/client/_app/immutable/nodes/4.CNlfoebz.js +0 -42
- package/build/client/_app/immutable/nodes/4.CNlfoebz.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.CNlfoebz.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.52vWUOmx.js +0 -5
- package/build/client/_app/immutable/nodes/5.52vWUOmx.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.52vWUOmx.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.DEa_tOGv.js +0 -1
- package/build/client/_app/immutable/nodes/6.DEa_tOGv.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.DEa_tOGv.js.gz +0 -0
- package/build/client/_app/immutable/nodes/7.Bj0xztLC.js +0 -5
- package/build/client/_app/immutable/nodes/7.Bj0xztLC.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.Bj0xztLC.js.gz +0 -0
- package/build/client/_app/immutable/nodes/8.l6ZO_YE3.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.l6ZO_YE3.js.gz +0 -0
- package/build/server/chunks/0-BpC7BfBT.js +0 -15
- package/build/server/chunks/0-BpC7BfBT.js.map +0 -1
- package/build/server/chunks/1-58bNZ9nH.js +0 -9
- package/build/server/chunks/2-DF_NN0lE.js +0 -9
- package/build/server/chunks/2-DF_NN0lE.js.map +0 -1
- package/build/server/chunks/3-NRtKEkC_.js +0 -16
- package/build/server/chunks/3-NRtKEkC_.js.map +0 -1
- package/build/server/chunks/4-MZJkDNx2.js +0 -9
- package/build/server/chunks/4-MZJkDNx2.js.map +0 -1
- package/build/server/chunks/5-Lq13lWK3.js +0 -9
- package/build/server/chunks/5-Lq13lWK3.js.map +0 -1
- package/build/server/chunks/6-DqZ3Anew.js +0 -9
- package/build/server/chunks/6-DqZ3Anew.js.map +0 -1
- package/build/server/chunks/7-BOAHc6Hs.js +0 -9
- package/build/server/chunks/7-BOAHc6Hs.js.map +0 -1
- package/build/server/chunks/8-DBHj3VAe.js +0 -9
- package/build/server/chunks/8-DBHj3VAe.js.map +0 -1
- package/build/server/chunks/FeatureValidator-DDdFIzr8.js.map +0 -1
- package/build/server/chunks/ManageTagsDialog-CT8-t_GJ.js.map +0 -1
- package/build/server/chunks/ProjectsIndex-yg-CEhxx.js.map +0 -1
- package/build/server/chunks/TagDotStrip-K9ispK6D.js.map +0 -1
- package/build/server/chunks/TagFilterSelect-BlEttqQE.js.map +0 -1
- package/build/server/chunks/TagPalette-CvQJ40bt.js.map +0 -1
- package/build/server/chunks/_layout.svelte-D2SACu8G.js.map +0 -1
- package/build/server/chunks/_page.svelte-BUfFGiJQ.js.map +0 -1
- package/build/server/chunks/_page.svelte-C2jPZylo.js.map +0 -1
- package/build/server/chunks/_page.svelte-C3FIXVWr.js +0 -27
- package/build/server/chunks/_page.svelte-CsqELhKQ.js +0 -27
- package/build/server/chunks/_page.svelte-bbz79XAC.js.map +0 -1
- package/build/server/chunks/_server.ts-CagU2lG4.js.map +0 -1
- package/build/server/chunks/_server.ts-RzdFK98M.js.map +0 -1
- package/build/server/chunks/browserContainer-D4Rbh5md.js.map +0 -1
- package/build/server/chunks/featuresStore.svelte-C5UcVnjA.js.map +0 -1
- package/build/server/chunks/projectsStore.svelte-CCIKC4cA.js.map +0 -1
- package/build/server/chunks/snapshotRepository-D04sCQ0-.js.map +0 -1
- package/build/server/chunks/tourStore.svelte-C2hizkdG.js.map +0 -1
- /package/build/client/_app/immutable/assets/{8.nv0I59TU.css → 9.nv0I59TU.css} +0 -0
- /package/build/client/_app/immutable/assets/{8.nv0I59TU.css.br → 9.nv0I59TU.css.br} +0 -0
- /package/build/client/_app/immutable/assets/{8.nv0I59TU.css.gz → 9.nv0I59TU.css.gz} +0 -0
- /package/build/client/_app/immutable/chunks/{BQ9GodWX.js → BQ9GodWX2.js} +0 -0
- /package/build/client/_app/immutable/chunks/{BQ9GodWX.js.br → BQ9GodWX2.js.br} +0 -0
- /package/build/client/_app/immutable/chunks/{BQ9GodWX.js.gz → BQ9GodWX2.js.gz} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{$ as e,et as t,rt as n,tt as r,z as i}from"./BPl9BITm.js";import{D as a,H as o,I as s,L as c,T as l,a as u,ct as d,i as f,it as p,lt as m,st as h,t as g}from"./Bp2_Vghh.js";import{t as _}from"./BOrLmFwJ.js";import{_ as v,v as y}from"./Dg0acPpT.js";import{t as b}from"./D8YEa1po.js";var x=`No description yet.`,S=e=>e.length===0?0:Math.round(e.reduce((e,t)=>e+t,0)/e.length),C=e=>{let t=e.filter(e=>e!==null);return t.length===0?null:S(t)},w=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},T=e=>({projects:e.map(({project:e,coreFeatures:t})=>{let n=t.map(({feature:e,implementationStatus:t})=>{let n=a(e),r=l(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 o=new Map(r.perSurface.flatMap(e=>e.perAction.map(e=>[String(e.action.id),e]))),c=e.surfaces.flatMap(e=>s(e.actions).map(e=>{let t=i.get(String(e.id)),n=o.get(String(e.id)),r=n&&n.expectedCount>0?n.percentage:null;return{id:String(e.id),name:e.name,description:e.intent||x,maturityPercentage:t?.percentage??0,implementationPercentage:r,suggestions:[]}})),u=r.expectedCount===0?null:r.percentage;return{id:String(e.id),name:e.name,description:e.description||x,maturityPercentage:n.global.percentage,implementationPercentage:u,tags:e.tags??[],suggestions:w(e),features:c}});return{id:String(e.id),name:e.name,description:e.description||x,maturityPercentage:S(n.map(e=>e.maturityPercentage)),implementationPercentage:C(n.map(e=>e.implementationPercentage)),tags:e.tags??[],coreFeatures:n}})}),E=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 T(n)},D=e=>async t=>{let n=await e.projects.get(t);return n?T([{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},O={data:{getContainer:()=>g()},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)}},k=(e,t)=>`action:${e}:${t}`,A=e=>`feature:${e}`,j=(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),M=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(null);get selectedProjectId(){return i(this.#n)}set selectedProjectId(e){t(this.#n,e,!0)}#r=r(null);get selectedCoreFeatureId(){return i(this.#r)}set selectedCoreFeatureId(e){t(this.#r,e,!0)}#i=r(``);get search(){return i(this.#i)}set search(e){t(this.#i,e,!0)}#a=r(null);get activeTag(){return i(this.#a)}set activeTag(e){t(this.#a,e,!0)}#o=r(null);get error(){return i(this.#o)}set error(e){t(this.#o,e,!0)}#s=r(e([]));get queue(){return i(this.#s)}set queue(e){t(this.#s,e,!0)}#c=r(null);get queueError(){return i(this.#c)}set queueError(e){t(this.#c,e,!0)}#l=r(e(new Set));get busyActions(){return i(this.#l)}set busyActions(e){t(this.#l,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}#u=n(()=>this.dashboard.projects.find(e=>e.id===this.selectedProjectId)??null);get selectedProject(){return i(this.#u)}set selectedProject(e){t(this.#u,e)}#d=n(()=>this.selectedProject?.coreFeatures.find(e=>e.id===this.selectedCoreFeatureId)??null);get selectedCoreFeature(){return i(this.#d)}set selectedCoreFeature(e){t(this.#d,e)}#f=n(()=>this.search.trim().toLowerCase());get searchQuery(){return i(this.#f)}set searchQuery(e){t(this.#f,e)}#p=n(()=>this.searchQuery.length>0);get searchActive(){return i(this.#p)}set searchActive(e){t(this.#p,e)}#m=n(()=>this.activeTag?m(this.activeTag):null);get activeTagKey(){return i(this.#m)}set activeTagKey(e){t(this.#m,e)}#h=n(()=>this.activeTag!==null);get tagActive(){return i(this.#h)}set tagActive(e){t(this.#h,e)}#g=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.#g)}set allTagTypes(e){t(this.#g,e)}#_=n(()=>{let e=this.dashboard.projects,t=this.activeTagKey;t&&(e=e.filter(e=>this.projectMatchesTag(e,t)));let n=this.searchQuery;return n?j(e,e=>this.projectScore(e,n)):e});get filteredProjects(){return i(this.#_)}set filteredProjects(e){t(this.#_,e)}projectMatchesTag(e,t){return e.tags.some(e=>m(e)===t)||e.coreFeatures.some(e=>e.tags.some(e=>m(e)===t))}coreFeatureMatchesTag(e,t,n){return t.tags.some(e=>m(e)===n)||e.tags.some(e=>m(e)===n)}toggleTag(e){this.activeTag=this.activeTagKey===m(e)?null:e}clearTag(){this.activeTag=null}isActiveTag(e){return this.activeTagKey===m(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:p(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:h(r.tags,t)})})}async addCoreFeatureTag(e,t){await this.mutateTags(this.selectedProjectId,async n=>{let r=await n.useCases.getFeature(o(e));r&&await n.useCases.saveFeature({...r,tags:p(r.tags,t)})})}async removeCoreFeatureTag(e,t){await this.mutateTags(this.selectedProjectId,async n=>{let r=await n.useCases.getFeature(o(e));r&&await n.useCases.saveFeature({...r,tags:h(r.tags,t)})})}async renameTag(e,t){if(m(e)!==m(t)){this.dashboard={...this.dashboard,projects:this.dashboard.projects.map(n=>({...n,tags:d(n.tags,e,t)??[],coreFeatures:n.coreFeatures.map(n=>({...n,tags:d(n.tags,e,t)??[]}))}))},this.activeTagKey===m(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))}#v=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:j(n,e=>this.coreFeatureScore(e,i))});get visibleCoreFeatures(){return i(this.#v)}set visibleCoreFeatures(e){t(this.#v,e)}#y=n(()=>{let e=this.selectedCoreFeature;if(!e)return[];let t=this.searchQuery;return!t||this.matchesText(t,e.name,e.description)?e.features:j(e.features,e=>this.featureScore(e,t))});get visibleSelectedFeatures(){return i(this.#y)}set visibleSelectedFeatures(e){t(this.#y,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,await this.refreshSilent(),this.loading=!1}async refreshSilent(){try{let e=await this.host.data.getContainer(),t=E({projects:e.projectRepository,features:e.repository,statuses:e.statusRepository});this.dashboard=await t(),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}}selectProject(e){this.selectedProjectId=e,this.selectedCoreFeatureId=null,this.refreshQueue()}deselectProject(){this.selectedProjectId=null,this.selectedCoreFeatureId=null,this.queue=[]}selectCoreFeature(e){this.selectedCoreFeatureId=this.selectedCoreFeatureId===e?null:e}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=k(e,t);return this.queue.some(e=>f(e.item)===n)}queuePositionForAction(e,t){return this.queuePosition(k(e,t))}queuePosition(e){let t=this.queue.findIndex(t=>f(t.item)===e);return t<0?null:t+1}queueItemIdForAction(e,t){let n=k(e,t);return this.queue.find(e=>f(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:o(e),actionId:c(t)})})}isFeatureQueued(e){let t=A(e);return this.queue.some(e=>f(e.item)===t)}queuePositionForFeature(e){return this.queuePosition(A(e))}queueItemIdForFeature(e){let t=A(e);return this.queue.find(e=>f(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:o(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:o(e),transform:e=>y(e,c(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:o(e),transform:e=>v(e,c(t))}),n&&!this.isQueued(e,t)&&await r.useCases.enqueueQueueItem(u(n),{kind:`action`,featureId:o(e),actionId:c(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 D({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)}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}}}(O),N=globalThis.__sveltekit_644wac.env,P={id:`expert`,label:`Expert`,href:`/projects`,matches:e=>e===`/`||e.startsWith(`/projects`)||e.startsWith(`/features`)},F={builder:{id:`builder`,label:`Builder`,href:`/builder-mode`,matches:e=>e.startsWith(`/builder-mode`)}},I=e=>{let t=(e??``).split(`,`).map(e=>e.trim().toLowerCase()).filter(e=>e.length>0&&e!==`expert`&&e in F);return[`expert`,...new Set(t)]},L=e=>I(e).map(e=>e===`expert`?P:F[e]),R=(e,t)=>I(e).includes(t),z=()=>L(N.PUBLIC_UNSPA_VIEWS),B=e=>R(N.PUBLIC_UNSPA_VIEWS,e);export{B as n,M as r,z as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{dt as e}from"./Bp2_Vghh.js";var t=6e5,n=16,r=12,i=()=>{if(typeof crypto>`u`||!crypto.subtle)throw Error(`WebCrypto not available. Use a modern browser served over https or localhost.`);return crypto.subtle},a=e=>{let t=``;for(let n of e)t+=String.fromCharCode(n);return btoa(t)},o=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},s=async(e,n)=>{let r=new TextEncoder,a=await i().importKey(`raw`,r.encode(e),{name:`PBKDF2`},!1,[`deriveKey`]);return i().deriveKey({name:`PBKDF2`,hash:`SHA-256`,salt:n,iterations:t},a,{name:`AES-GCM`,length:256},!1,[`encrypt`,`decrypt`])},c=class extends Error{constructor(){super(`Passphrase must be at least 8 characters.`),this.name=`WeakPassphraseError`}},l=class extends Error{constructor(){super(`Wrong passphrase, or the .unspa file is corrupted.`),this.name=`WrongPassphraseError`}},u=class extends Error{constructor(e){super(`Not a valid Unspaghettit bundle: ${e}`),this.name=`MalformedEnvelopeError`}},d=async(e,o)=>{if(o.length<8)throw new c;let l=crypto.getRandomValues(new Uint8Array(n)),u=crypto.getRandomValues(new Uint8Array(r)),d=await s(o,l),f=await i().encrypt({name:`AES-GCM`,iv:u},d,new TextEncoder().encode(e));return{format:`unspaghettit-encrypted-bundle`,version:1,algorithm:`AES-GCM`,kdf:`PBKDF2-SHA256`,iterations:t,salt:a(l),iv:a(u),ciphertext:a(new Uint8Array(f))}},f=e=>{if(!e||typeof e!=`object`)throw new u(`not an object`);let t=e;if(t.format!==`unspaghettit-encrypted-bundle`)throw new u(`wrong format tag`);if(t.version!==1)throw new u(`unsupported version ${t.version}`);if(t.algorithm!==`AES-GCM`)throw new u(`unsupported algorithm ${t.algorithm}`);if(t.kdf!==`PBKDF2-SHA256`)throw new u(`unsupported kdf ${t.kdf}`);if(typeof t.iterations!=`number`||t.iterations<1e5)throw new u(`iterations missing or too low`);if(typeof t.salt!=`string`||typeof t.iv!=`string`||typeof t.ciphertext!=`string`)throw new u(`salt / iv / ciphertext must be base64 strings`);return t},p=async(e,t)=>{let n=f(e),r=o(n.salt),a=o(n.iv),c=o(n.ciphertext),u=await s(t,r);try{let e=await i().decrypt({name:`AES-GCM`,iv:a},u,c);return new TextDecoder().decode(e)}catch{throw new l}},m=e=>{let t=e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,64);return t.length>0?t:`project`},h=async(t,n)=>{let r=await e(`/api/projects/${encodeURIComponent(String(t))}/bundle`);if(!r.ok)throw Error(`Bundle fetch failed (${r.status}): ${await r.text().catch(()=>``)}`);let i=await r.json();return{envelope:await d(JSON.stringify(i),n),projectName:i.project.name}},g=(e,t)=>{let n=new Date().toISOString().slice(0,10).replace(/-/g,``),r=`${m(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)},_=async e=>{let t;try{t=await e.text()}catch{throw new u(`could not read ${e.name}`)}let n;try{n=JSON.parse(t)}catch{throw new u(`file is not valid JSON`)}if(!n||typeof n!=`object`)throw new u(`file is not a JSON object`);return n},v=async(t,n)=>{let r=await p(t,n),i;try{i=JSON.parse(r)}catch{throw new u(`decrypted payload is not valid JSON`)}let a=await e(`/api/projects/import`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(i)});if(!a.ok)throw Error(`Import failed (${a.status}): ${await a.text().catch(()=>``)}`);return await a.json()};export{u as a,_ as i,h as n,c as o,v as r,l as s,g as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -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{at as y,lt as b}from"./Bp2_Vghh.js";import{t as x}from"./D8YEa1po.js";import{n as S}from"./D9dKmajw.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};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import{A as e,E as t,M as n,N as r,Q as i,W as a,X as o,Z as s,_ as c,a as l,j as u,k as d,mt as f,rt as p,u as m,v as h,z as g}from"./BPl9BITm.js";import"./xihTtKlq.js";var _=r(`<span class="pointer-events-none absolute top-0 bottom-0 w-px bg-slate-300/70" aria-hidden="true"></span>`),v=r(`<span class="shrink-0 text-[10px] font-semibold tabular-nums text-slate-600" style="min-width: 2.25rem; text-align: right;"> </span>`),y=r(`<div class="flex w-full items-center gap-2"><div style="box-shadow: inset 0 1px 1px rgba(15, 23, 42, 0.06);" role="progressbar"><div class="h-full rounded-full transition-[width,background-color] duration-300 ease-out"></div> <!></div> <!></div>`);function b(r,b){let x=l(b,`size`,3,`sm`),S=l(b,`showLabel`,3,!1),C=l(b,`ticks`,19,()=>[50,80]),w=p(()=>Math.max(0,Math.min(100,Math.round(b.percentage)))),T=p(()=>g(w)>=80?`#10b981`:g(w)>=50?`#f59e0b`:`#ef4444`),E=p(()=>b.color??g(T)),D=p(()=>x()===`md`?`h-2.5`:x()===`sm`?`h-1.5`:`h-1`);var O=y(),k=o(O);m(k,`aria-valuemin`,0),m(k,`aria-valuemax`,100);var A=o(k);t(i(A,2),16,C,e=>e,(e,t)=>{var r=n(),i=s(r),o=e=>{var n=_();a(()=>c(n,`left: ${t??``}%;`)),u(e,n)};d(i,e=>{t>0&&t<100&&e(o)}),u(e,r)}),f(k);var j=i(k,2),M=t=>{var n=v(),r=o(n);f(n),a(()=>e(r,`${g(w)??``}%`)),u(t,n)};d(j,e=>{S()&&e(M)}),f(O),a(()=>{h(k,1,`relative w-full overflow-hidden rounded-full bg-slate-100 ${g(D)??``}`),m(k,`aria-valuenow`,g(w)),m(k,`aria-label`,b.ariaLabel),c(A,`
|
|
2
|
+
width: ${g(w)??``}%;
|
|
3
|
+
background-color: ${g(E)??``};
|
|
4
|
+
background-image: linear-gradient(180deg, rgba(255,255,255,0.18) 0%, rgba(0,0,0,0.06) 100%);
|
|
5
|
+
`)}),u(r,O)}export{b as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{et as e,tt as t,z as n}from"./BPl9BITm.js";import{n as r}from"./Cl7Z3e6-.js";var i=new class{events;#e=t(null);get tour(){return n(this.#e)}set tour(t){e(this.#e,t,!0)}#t=t(0);get stepIndex(){return n(this.#t)}set stepIndex(t){e(this.#t,t,!0)}eventUnsubscribe=null;constructor(e){this.events=e}get currentStep(){return this.tour?this.tour.steps[this.stepIndex]??null:null}get isActive(){return this.tour!==null}get totalSteps(){return this.tour?.steps.length??0}start(e){this.tour=e,this.stepIndex=0,this.rewireEventTrigger()}next(){if(!this.tour)return;let e=this.tour.steps.length-1;if(this.stepIndex>=e){this.complete();return}this.stepIndex+=1,this.rewireEventTrigger()}previous(){!this.tour||this.stepIndex<=0||(--this.stepIndex,this.rewireEventTrigger())}cancel(){this.teardown()}complete(){this.teardown()}teardown(){this.eventUnsubscribe?.(),this.eventUnsubscribe=null,this.tour=null,this.stepIndex=0}rewireEventTrigger(){this.eventUnsubscribe?.(),this.eventUnsubscribe=null;let e=this.currentStep;if(!e||e.advance.kind!==`event`)return;let t=e.advance.event,n=e.advance.match;this.eventUnsubscribe=this.events.subscribe(e=>{e.name===t&&(n&&!n(e.payload)||this.next())})}}(new class{subscribe(e){return r(t=>{e(t.payload?{name:t.name,payload:t.payload}:{name:t.name})})}});export{i as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -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{m as o,t as s}from"./Bp2_Vghh.js";import{t as c}from"./Cl7Z3e6-.js";import{n as l,r as u,t as d}from"./Bp8HpEPe2.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};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./BPl9BITm.js";import{a as e,i as t,o as n}from"./DatGSObE.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 e.current?e.current.from:null},get to(){return e.current?e.current.to:null},get type(){return e.current?e.current.type:null},get willUnload(){return e.current?e.current.willUnload:null},get delta(){return e.current?e.current.delta:null},get complete(){return e.current?e.current.complete:null}},"current",{get(){throw Error(`Replace navigating.current.<prop> with navigating.<prop>`)}}),t.updated.check;var i=r;export{i as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import"./BPl9BITm.js";var e=e=>e;function t(e){let t=e-1;return t*t*t+1}function n(e){let t=typeof e==`string`&&e.match(/^\s*(-?[\d.]+)([^\s]*)\s*$/);return t?[parseFloat(t[1]),t[2]||`px`]:[e,`px`]}function r(t,{delay:n=0,duration:r=400,easing:i=e}={}){let a=+getComputedStyle(t).opacity;return{delay:n,duration:r,easing:i,css:e=>`opacity: ${e*a}`}}function i(e,{delay:r=0,duration:i=400,easing:a=t,x:o=0,y:s=0,opacity:c=0}={}){let l=getComputedStyle(e),u=+l.opacity,d=l.transform===`none`?``:l.transform,f=u*(1-c),[p,m]=n(o),[h,g]=n(s);return{delay:r,duration:i,easing:a,css:(e,t)=>`
|
|
2
|
+
transform: ${d} translate(${(1-e)*p}${m}, ${(1-e)*h}${g});
|
|
3
|
+
opacity: ${u-f*t}`}}function a(e,{delay:n=0,duration:r=400,easing:i=t,axis:a=`y`}={}){let o=getComputedStyle(e),s=+o.opacity,c=a===`y`?`height`:`width`,l=parseFloat(o[c]),u=a===`y`?[`top`,`bottom`]:[`left`,`right`],d=u.map(e=>`${e[0].toUpperCase()}${e.slice(1)}`),f=parseFloat(o[`padding${d[0]}`]),p=parseFloat(o[`padding${d[1]}`]),m=parseFloat(o[`margin${d[0]}`]),h=parseFloat(o[`margin${d[1]}`]),g=parseFloat(o[`border${d[0]}Width`]),_=parseFloat(o[`border${d[1]}Width`]);return{delay:n,duration:r,easing:i,css:e=>`overflow: hidden;opacity: ${Math.min(e*20,1)*s};${c}: ${e*l}px;padding-${u[0]}: ${e*f}px;padding-${u[1]}: ${e*p}px;margin-${u[0]}: ${e*m}px;margin-${u[1]}: ${e*h}px;border-${u[0]}-width: ${e*g}px;border-${u[1]}-width: ${e*_}px;min-${c}: 0`}}function o(e,{delay:n=0,duration:r=400,easing:i=t,start:a=0,opacity:o=0}={}){let s=getComputedStyle(e),c=+s.opacity,l=s.transform===`none`?``:s.transform,u=1-a,d=c*(1-o);return{delay:n,duration:r,easing:i,css:(e,t)=>`
|
|
4
|
+
transform: ${l} scale(${1-u*t});
|
|
5
|
+
opacity: ${c-d*t}
|
|
6
|
+
`}}function s(e){let t=e-1;return t*t*t+1}export{a,o as i,r as n,i as r,s as t};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ft as e}from"./BPl9BITm.js";e();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
�import{ft as e}from"./BPl9BITm.js";e();
|
|
Binary file
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.BOoI-hsu.js","../chunks/BPl9BITm.js","../chunks/DatGSObE.js","../chunks/Dq0DUAz1.js","../chunks/Bp2_Vghh.js","../chunks/Dg0acPpT.js","../chunks/D8YEa1po.js","../chunks/BOrLmFwJ.js","../chunks/DHoA038D.js","../chunks/iQu0D9Ux.js","../chunks/ib21i2T_.js","../chunks/xihTtKlq.js","../chunks/suTxxv1t.js","../chunks/BfMYiIUi.js","../chunks/Cl7Z3e6-.js","../chunks/cMamJTsF.js","../chunks/C8rRKIXT.js","../assets/0.DFMDYAU9.css","../nodes/1.KYdA6ppX.js","../nodes/2.DBz20KgG.js","../chunks/DBJWcC6Y.js","../chunks/DKgYpi6_.js","../chunks/HKLi1Yz3.js","../chunks/D6jhrpTg.js","../chunks/D9dKmajw.js","../chunks/N7PXjlRH.js","../chunks/Dhqg7r_2.js","../chunks/BzLd0mTH.js","../nodes/3.19DIoFtw.js","../chunks/DjWKKtqp.js","../assets/3.B3akUL9A.css","../nodes/4.BvMzqBJj.js","../chunks/CxyLMlpt2.js","../chunks/aNMRV4sP2.js","../chunks/BQ9GodWX2.js","../nodes/5.Dq6obSGG.js","../chunks/BO66rBOa2.js","../chunks/Bp8HpEPe2.js","../chunks/CJjJLwzv2.js","../chunks/hpWJNn0t2.js","../nodes/6.BOHISqs-.js","../nodes/7.CemgNJfw.js","../nodes/8.DejSfIYh.js","../nodes/9.CMW6a2Lg.js","../assets/9.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.BOoI-hsu.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17]),import.meta.url),()=>T(()=>import(`../nodes/1.KYdA6ppX.js`),__vite__mapDeps([18,1,9,2,11]),import.meta.url),()=>T(()=>import(`../nodes/2.DBz20KgG.js`),__vite__mapDeps([19,1,11,12,20,2,8,4,21,13,14,22,23,24,6,25,26,27,15,7]),import.meta.url),()=>T(()=>import(`../nodes/3.19DIoFtw.js`),__vite__mapDeps([28,1,2,3,4,5,6,7,29,8,9,10,11,12,30]),import.meta.url),()=>T(()=>import(`../nodes/4.BvMzqBJj.js`),__vite__mapDeps([31,1,2,29,8,11,4,21,13,14,32,24,6,33,34,23,25]),import.meta.url),()=>T(()=>import(`../nodes/5.Dq6obSGG.js`),__vite__mapDeps([35,1,2,8,9,36,4,37,16,10,11,12,5,38,39,14,24,6,26,27,15,33]),import.meta.url),()=>T(()=>import(`../nodes/6.BOHISqs-.js`),__vite__mapDeps([40,1,11,4,38,21,13,14]),import.meta.url),()=>T(()=>import(`../nodes/7.CemgNJfw.js`),__vite__mapDeps([41,1,11,12,20,2,8,4,21,13,14,22,23,24,6,25,26,27,15,7]),import.meta.url),()=>T(()=>import(`../nodes/8.DejSfIYh.js`),__vite__mapDeps([42,1,2,8,36,4,37,16,10,11,12,21,13,14,32,24,6,33,22,25,26,27,15,7]),import.meta.url),()=>T(()=>import(`../nodes/9.CMW6a2Lg.js`),__vite__mapDeps([43,1,2,8,11,4,21,13,14,34,39,37,16,27,15,44]),import.meta.url)],M=[],N={"/":[2],"/builder-mode":[3],"/features":[4],"/features/[id]":[5],"/mcp":[6],"/projects":[7],"/projects/[id]":[8],"/tutorial":[9]},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};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{c as e,r as t}from"../chunks/DatGSObE.js";export{e as load_css,t as start};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{$ as e,A as t,C as n,D as r,E as i,G as a,I as o,L as s,M as c,N as l,O as u,P as d,Q as f,R as p,T as m,W as h,X as g,Y as _,Z as v,_ as y,_t as b,c as x,ct as S,d as C,et as w,j as T,k as E,l as D,lt as O,mt as k,nt as ee,o as A,p as j,pt as M,r as N,rt as P,s as te,tt as F,u as I,v as L,z as R}from"../chunks/BPl9BITm.js";import{t as z}from"../chunks/DatGSObE.js";import"../chunks/xihTtKlq.js";import{t as B}from"../chunks/iQu0D9Ux.js";import{i as V,n as ne,r as H,t as re}from"../chunks/ib21i2T_.js";import{_t as U,ft as W,gt as ie,vt as ae}from"../chunks/Bp2_Vghh.js";import"../chunks/suTxxv1t.js";import{t as G}from"../chunks/BOrLmFwJ.js";import"../chunks/DHoA038D.js";import{t as K}from"../chunks/cMamJTsF.js";import{t as oe}from"../chunks/BfMYiIUi.js";import{n as se,r as q,t as ce}from"../chunks/Dq0DUAz1.js";import{t as J}from"../chunks/C8rRKIXT.js";var le=b({prerender:()=>!1,ssr:()=>!1,trailingSlash:()=>ue}),ue=`never`,de=l(`<span class="mt-1 block text-xs leading-relaxed opacity-80"> </span>`),Y=l(`<li class="flex"><button type="button"><span class="min-w-0 flex-1"><span class="block text-sm"> </span> <!></span> <span aria-hidden="true" class="shrink-0 text-base transition group-hover:translate-x-1">→</span></button></li>`),fe=l(`<div class="px-7 pt-2 pb-5"><ul class="flex max-h-80 flex-col gap-3 overflow-y-auto"></ul></div>`),pe=l(`<p class="mt-2 text-xs font-medium text-red-700"> </p>`),me=l(`<div class="px-7 pt-1 pb-4"><label class="block text-xs font-medium text-slate-700"> <input autocorrect="off" autocapitalize="off" spellcheck="false" class="mono mt-1 h-10 w-full rounded-md border border-slate-300 bg-white px-3 text-sm outline-none focus:border-brand-700 focus:ring-2 focus:ring-brand-100"/></label> <!></div>`),he=l(`<span class="mt-0.5 block text-xs text-slate-500"> </span>`),ge=l(`<li><label class="flex cursor-pointer items-start gap-3 rounded-md px-2 py-2 transition hover:bg-white"><input type="checkbox"/> <span class="min-w-0 flex-1"><span class="block text-sm font-medium text-slate-900"> </span> <!></span></label></li>`),_e=l(`<div class="border-t border-hairline px-6 py-3"><div class="mb-2 flex items-center justify-between"><span class="text-xs font-medium uppercase tracking-wide text-slate-500"> </span> <div class="flex gap-2 text-xs"><button type="button" class="font-medium text-slate-600 hover:text-slate-950">Select all</button> <span class="text-slate-300">·</span> <button type="button" class="font-medium text-slate-600 hover:text-slate-950">Select none</button></div></div> <ul class="max-h-72 space-y-1.5 overflow-y-auto rounded-lg border border-hairline bg-slate-50 p-2"></ul></div>`),ve=l(`<button type="button"> </button>`),ye=l(`<button type="button" class="rounded-md px-3 py-2 text-sm text-slate-600 transition hover:text-slate-950"> </button>`),be=l(`<button type="button" class="rounded-md border border-slate-300 bg-white px-4 py-2 text-sm text-slate-700 transition hover:bg-slate-100"> </button> <button type="button"> </button>`,1),xe=l(`<div class="fixed inset-0 z-100 flex items-center justify-center px-4" role="presentation"><button type="button" aria-label="Dismiss" class="absolute inset-0 bg-slate-950/40 backdrop-blur-sm"></button> <div role="dialog" aria-modal="true" aria-labelledby="app-dialog-title" aria-describedby="app-dialog-message"><div class="flex gap-4 px-7 pt-7 pb-5"><div> </div> <div class="min-w-0 flex-1 pt-1"><h2 id="app-dialog-title" class="text-lg leading-tight text-slate-950"> </h2> <p id="app-dialog-message" class="mt-2 whitespace-pre-line text-sm leading-relaxed text-slate-600"> </p></div></div> <!> <div class="flex justify-end gap-2 border-t border-hairline bg-slate-50 px-7 py-3"><!></div></div></div>`);function Se(r,o){O(o,!0);let l=P(()=>U.current),u=F(e(new Set)),d=F(``),m=F(null),y=F(null);a(()=>{R(l)?.kind===`checklist`?w(u,new Set(R(l).opts.items.filter(e=>e.defaultChecked).map(e=>e.id)),!0):w(u,new Set,!0),R(l)?.kind===`prompt`?(w(d,R(l).opts.defaultValue??``,!0),w(m,null),queueMicrotask(()=>R(y)?.focus())):(w(d,``),w(m,null))});function b(e){let t=new Set(R(u));t.has(e)?t.delete(e):t.add(e),w(u,t,!0)}function ee(){R(l)?.kind===`checklist`&&w(u,new Set(R(l).opts.items.map(e=>e.id)),!0)}function A(){w(u,new Set,!0)}function j(){R(l)?.kind===`prompt`?U.resolvePrompt(null):U.resolveCurrent(!1)}function N(){if(R(l)?.kind===`checklist`)U.resolveCurrent(!0,Array.from(R(u)));else if(R(l)?.kind===`prompt`){let e=R(d),t=R(l).opts.validate?R(l).opts.validate(e):null;if(t){w(m,t,!0);return}U.resolvePrompt(e)}else U.resolveCurrent(!0)}function z(e){R(l)&&(e.key===`Escape`?(e.preventDefault(),j()):e.key===`Enter`&&R(l).kind!==`checklist`&&(e.preventDefault(),N()))}let B={default:{icon:`?`,iconBg:`bg-slate-100`,iconColor:`text-slate-700`,confirmBtn:`bg-slate-900 hover:bg-slate-800 text-white`,check:`accent-slate-700`},danger:{icon:`!`,iconBg:`bg-rose-50`,iconColor:`text-rose-600`,confirmBtn:`bg-rose-600 hover:bg-rose-500 text-white`,check:`accent-rose-600`},info:{icon:`i`,iconBg:`bg-brand-50`,iconColor:`text-brand-700`,confirmBtn:`bg-brand-700 hover:bg-brand-600 text-white`,check:`accent-brand-700`},success:{icon:`✓`,iconBg:`bg-emerald-50`,iconColor:`text-emerald-600`,confirmBtn:`bg-emerald-600 hover:bg-emerald-500 text-white`,check:`accent-emerald-600`},warning:{icon:`!`,iconBg:`bg-amber-50`,iconColor:`text-amber-600`,confirmBtn:`bg-amber-600 hover:bg-amber-500 text-white`,check:`accent-amber-600`}},H=P(()=>R(l)?.opts.tone??(R(l)?.kind===`alert`?`info`:`default`)),W=P(()=>B[R(H)]);var ie=c();p(`keydown`,_,z);var ae=v(ie),G=e=>{var r=xe(),a=g(r),o=f(a,2),c=g(o),p=g(c),_=g(p,!0);k(p);var S=f(p,2),O=g(S),P=g(O,!0);k(O);var F=f(O,2),z=g(F,!0);k(F),k(S),k(c);var B=f(c,2),H=e=>{var n=fe(),r=g(n);i(r,21,()=>R(l).opts.options,e=>e.id,(e,n)=>{var r=Y(),i=g(r),a=g(i),o=g(a),c=g(o,!0);k(o);var l=f(o,2),u=e=>{var r=de(),i=g(r,!0);k(r),h(()=>t(i,R(n).description)),T(e,r)};E(l,e=>{R(n).description&&e(u)}),k(a),M(2),k(i),k(r),h(()=>{L(i,1,`group flex w-full items-center justify-between gap-4 rounded-xl px-5 py-4 text-left shadow-sm shadow-slate-950/5 transition hover:shadow-md focus:ring-2 focus:ring-offset-2 focus:outline-none ${R(W).confirmBtn}`),t(c,R(n).label)}),s(`click`,i,()=>U.resolveChoice(R(n).id)),T(e,r)}),k(r),k(n),T(e,n)},ie=e=>{var n=me(),r=g(n),i=g(r),a=f(i);D(a),te(a,e=>w(y,e),()=>R(y)),k(r);var o=f(r,2),c=e=>{var n=pe(),r=g(n,!0);k(n),h(()=>t(r,R(m))),T(e,n)};E(o,e=>{R(m)&&e(c)}),k(n),h(()=>{t(i,`${R(l).opts.inputLabel??`Value`??``} `),I(a,`type`,R(l).opts.password?`password`:`text`),I(a,`autocomplete`,R(l).opts.password?`new-password`:`off`),I(a,`placeholder`,R(l).opts.placeholder??``)}),s(`input`,a,()=>w(m,null)),x(a,()=>R(d),e=>w(d,e)),T(e,n)},ae=e=>{var n=_e(),r=g(n),a=g(r),o=g(a);k(a);var c=f(a,2),d=g(c),p=f(d,4);k(c),k(r);var m=f(r,2);i(m,21,()=>R(l).opts.items,e=>e.id,(e,n)=>{var r=ge(),i=g(r),a=g(i);D(a);var o=f(a,2),c=g(o),l=g(c,!0);k(c);var d=f(c,2),p=e=>{var r=he(),i=g(r,!0);k(r),h(()=>t(i,R(n).description)),T(e,r)};E(d,e=>{R(n).description&&e(p)}),k(o),k(i),k(r),h(e=>{L(a,1,`mt-0.5 h-4 w-4 rounded ${R(W).check}`),C(a,e),t(l,R(n).label)},[()=>R(u).has(R(n).id)]),s(`change`,a,()=>b(R(n).id)),T(e,r)}),k(m),k(n),h(()=>t(o,`${R(u).size??``} of ${R(l).opts.items.length??``} selected`)),s(`click`,d,ee),s(`click`,p,A),T(e,n)};E(B,e=>{R(l).kind===`choice`?e(H):R(l).kind===`prompt`?e(ie,1):R(l).kind===`checklist`&&e(ae,2)});var G=f(B,2),K=g(G),oe=e=>{var n=ve(),r=g(n,!0);k(n),h(()=>{L(n,1,`rounded-md px-4 py-2 text-sm transition ${R(W).confirmBtn}`),t(r,R(l).opts.buttonLabel??`OK`)}),s(`click`,n,j),T(e,n)},se=e=>{var n=ye(),r=g(n,!0);k(n),h(()=>t(r,R(l).opts.cancelLabel??`Close`)),s(`click`,n,j),T(e,n)},q=e=>{var n=be(),r=v(n),i=g(r,!0);k(r);var a=f(r,2),o=g(a,!0);k(a),h(()=>{t(i,R(l).opts.cancelLabel??`Cancel`),L(a,1,`rounded-md px-4 py-2 text-sm transition focus:ring-2 focus:ring-offset-2 focus:outline-none ${R(W).confirmBtn}`),t(o,R(l).opts.confirmLabel??`Confirm`)}),s(`click`,r,j),s(`click`,a,N),T(e,n)};E(K,e=>{R(l).kind===`alert`?e(oe):R(l).kind===`choice`?e(se,1):e(q,-1)}),k(G),k(o),k(r),h(()=>{L(o,1,`relative w-full ${R(l).kind===`checklist`||R(l).kind===`choice`?`max-w-lg`:`max-w-md`} overflow-hidden rounded-2xl border border-hairline bg-white shadow-2xl shadow-slate-950/20`),L(p,1,`flex h-11 w-11 shrink-0 items-center justify-center rounded-full text-lg ${R(W).iconBg} ${R(W).iconColor}`),t(_,R(W).icon),t(P,R(l).opts.title),t(z,R(l).opts.message)}),s(`click`,a,j),n(3,o,()=>V,()=>({duration:140,start:.96,easing:re})),n(3,r,()=>ne,()=>({duration:120,easing:re})),T(e,r)};E(ae,e=>{R(l)&&e(G)}),T(r,ie),S()}o([`click`,`input`,`change`]);var Ce=l(`<div class="untangler-sky svelte-dds6m1" aria-hidden="true"><div class="untangler svelte-dds6m1"><svg viewBox="0 0 240 110" role="img" class="svelte-dds6m1"><g class="tangle tangle-outline svelte-dds6m1"><path d="M5 55 C 32 12, 48 95, 72 32 S 116 80, 148 42 S 196 22, 232 62" class="svelte-dds6m1"></path><path d="M5 70 C 28 32, 52 95, 78 22 S 124 72, 156 44 S 200 30, 232 76" class="svelte-dds6m1"></path><path d="M5 40 C 36 82, 60 12, 92 70 S 118 30, 150 52 S 196 70, 230 30" class="svelte-dds6m1"></path><path d="M5 88 C 30 60, 48 100, 80 65 S 130 95, 165 70 S 210 88, 232 60" class="svelte-dds6m1"></path></g><g class="tangle tangle-fill svelte-dds6m1"><path d="M5 55 C 32 12, 48 95, 72 32 S 116 80, 148 42 S 196 22, 232 62" class="svelte-dds6m1"></path><path d="M5 70 C 28 32, 52 95, 78 22 S 124 72, 156 44 S 200 30, 232 76" class="svelte-dds6m1"></path><path d="M5 40 C 36 82, 60 12, 92 70 S 118 30, 150 52 S 196 70, 230 30" class="svelte-dds6m1"></path><path d="M5 88 C 30 60, 48 100, 80 65 S 130 95, 165 70 S 210 88, 232 60" class="svelte-dds6m1"></path></g><g class="clean clean-outline svelte-dds6m1"><line x1="5" y1="30" x2="232" y2="30" class="svelte-dds6m1"></line><line x1="5" y1="50" x2="232" y2="50" class="svelte-dds6m1"></line><line x1="5" y1="70" x2="232" y2="70" class="svelte-dds6m1"></line><line x1="5" y1="90" x2="232" y2="90" class="svelte-dds6m1"></line></g><g class="clean clean-fill svelte-dds6m1"><line x1="5" y1="30" x2="232" y2="30" class="svelte-dds6m1"></line><line x1="5" y1="50" x2="232" y2="50" class="svelte-dds6m1"></line><line x1="5" y1="70" x2="232" y2="70" class="svelte-dds6m1"></line><line x1="5" y1="90" x2="232" y2="90" class="svelte-dds6m1"></line></g><g class="glint svelte-dds6m1"><rect x="-18" y="18" width="14" height="78" rx="3" class="svelte-dds6m1"></rect></g></svg></div></div>`);function we(e,t){O(t,!0);let n=[`arrowup`,`arrowup`,`arrowdown`,`arrowdown`,`arrowleft`,`arrowright`,`arrowleft`,`arrowright`,`b`,`a`],r=F(!1),i=``,o=0,s=null;function l(e){return e instanceof HTMLElement?e.isContentEditable?!0:!!e.closest(`input, textarea, select, [contenteditable='true']`):!1}function u(){w(r,!1),s&&clearTimeout(s),requestAnimationFrame(()=>{w(r,!0),s=setTimeout(()=>{w(r,!1)},5200)})}function d(e){return e===n[o]?(o+=1,o<n.length?!1:(o=0,!0)):(o=+(e===n[0]),!1)}function f(e){return e.length!==1||(i=(i+e).slice(-9),i!==`spaghetti`)?!1:(i=``,!0)}function m(e){if(l(e.target))return;let t=e.key.toLowerCase();(d(t)||f(t))&&u()}a(()=>()=>{s&&clearTimeout(s)});var h=c();p(`keydown`,_,m);var g=v(h),y=e=>{T(e,Ce())};E(g,e=>{R(r)&&e(y)}),T(e,h),S()}var X=4,Z=5e3,Te=e=>{if(e.op!==`delete`)switch(e.kind){case`feature`:return`/features/${e.id}`;case`project`:return`/projects/${e.id}`;case`implementation-status`:return`/features/${e.id}`}},Ee=800,Q=new class{#e=F(e([]));get toasts(){return R(this.#e)}set toasts(e){w(this.#e,e,!0)}nextId=1;subscribed=!1;unsubscribe=null;timers=new Map;recentKeys=new Map;start(){this.subscribed||(this.subscribed=!0,this.unsubscribe=G(e=>this.handle(e)))}dismiss(e){let t=this.timers.get(e);t&&(clearTimeout(t),this.timers.delete(e)),this.toasts=this.toasts.filter(t=>t.id!==e)}reset(){for(let e of this.timers.values())clearTimeout(e);this.timers.clear(),this.toasts=[],this.recentKeys.clear(),this.unsubscribe&&this.unsubscribe(),this.unsubscribe=null,this.subscribed=!1}handle(e){let t=`${e.kind}:${e.id}:${e.op??`save`}`,n=Date.now(),r=this.recentKeys.get(t);if(r!==void 0&&n-r<Ee){this.recentKeys.set(t,n);return}this.recentKeys.set(t,n);let i=this.nextId++,a=[{id:i,kind:e.kind,entityId:e.id,name:e.name,projectName:e.projectName,op:e.op??`save`,changeOp:e.changeOp,changePath:e.changePath,previousName:e.previousName,actingFor:e.actingFor,...Te(e)?{href:Te(e)}:{}},...this.toasts].slice(0,X),o=new Set(a.map(e=>e.id));for(let[e,t]of this.timers)o.has(e)||(clearTimeout(t),this.timers.delete(e));this.toasts=a;let s=setTimeout(()=>this.dismiss(i),Z);this.timers.set(i,s)}},De=l(`<span class="rounded bg-purple-100 px-1.5 py-0.5 text-[9px] text-purple-800"> </span>`),$=l(`<span class="shrink-0 text-slate-400" aria-hidden="true">›</span>`),Oe=l(`<!> <span> </span>`,1),ke=l(`<div class="mt-0.5 truncate text-[11px] text-slate-500"> </div>`),Ae=l(`<a class="rounded-md bg-white/70 px-2 py-1 text-xs font-medium text-slate-700 hover:bg-white hover:text-brand-800">View</a>`),je=l(`<div><div class="min-w-0 flex-1"><div class="flex flex-wrap items-center gap-x-1.5 gap-y-0.5 text-[10px] font-semibold uppercase tracking-wide"><span class="text-slate-500"> </span> <!></div> <div class="mt-0.5 flex min-w-0 flex-wrap items-center gap-x-1 text-sm text-slate-900"></div> <!></div> <div class="flex shrink-0 items-center gap-1"><!> <button type="button" class="rounded-md px-1.5 py-1 text-xs text-slate-500 hover:bg-white/70 hover:text-slate-900" aria-label="Dismiss">✕</button></div></div>`),Me=l(`<div class="pointer-events-none fixed top-20 right-4 z-50 flex w-full max-w-md flex-col gap-2" role="status" aria-live="polite"></div>`);function Ne(e,a){O(a,!1),N(()=>{Q.start()});function o(e){switch(e){case`feature`:return`feature`;case`project`:return`project`;case`implementation-status`:return`status`}}function l(e){switch(e){case`feature`:return`border-cyan-200 bg-cyan-50`;case`project`:return`border-violet-200 bg-violet-50`;case`implementation-status`:return`border-emerald-200 bg-emerald-50`}}function u(e){if(e.op===`delete`)return`deleted`;switch(e.changeOp){case`added`:return`added`;case`removed`:return`removed`;case`renamed`:return`renamed`;case`edited`:return`edited`;case`queued`:return`queued`;case`unqueued`:return`unqueued`;case`created`:return`created`;case`deleted`:return`deleted`;default:return`saved`}}function d(e){let t=[];e.projectName&&t.push(e.projectName);let n=e.changePath?.[0],r=n!==void 0&&(e.name===n||!e.name);if(e.name&&!r&&t.push(e.name),e.changePath&&e.changePath.length>0)for(let n of e.changePath)t.push(n);else e.name&&t[t.length-1]!==e.name&&t.push(e.name);let i=[];for(let e of t)e!==`unknown`&&i[i.length-1]!==e&&i.push(e);return i.length===0&&i.push(e.entityId),i}A();var p=c(),m=v(p),_=e=>{var a=Me();i(a,5,()=>Q.toasts,e=>e.id,(e,a)=>{let c=ee(()=>d(R(a)));var p=je(),m=g(p),_=g(m),y=g(_),b=g(y);k(y);var x=f(y,2),S=e=>{var n=De(),r=g(n);k(n),h(()=>t(r,`for ${R(a).actingFor??``}`)),T(e,n)};E(x,e=>{R(a).actingFor&&e(S)}),k(_);var C=f(_,2);i(C,5,()=>R(c),r,(e,n,r)=>{var i=Oe(),a=v(i),o=e=>{T(e,$())};E(a,e=>{r>0&&e(o)});var s=f(a,2),l=g(s,!0);k(s),h(()=>{L(s,1,`truncate ${r===R(c).length-1?`font-semibold`:`text-slate-600`}`),t(l,R(n))}),T(e,i)}),k(C);var w=f(C,2),D=e=>{var n=ke(),r=g(n);k(n),h(()=>t(r,`was “${R(a).previousName??``}”`)),T(e,n)};E(w,e=>{R(a).changeOp===`renamed`&&R(a).previousName&&e(D)}),k(m);var O=f(m,2),A=g(O),j=e=>{var t=Ae();h(()=>I(t,`href`,R(a).href)),s(`click`,t,()=>Q.dismiss(R(a).id)),T(e,t)};E(A,e=>{R(a).href&&e(j)});var M=f(A,2);k(O),k(p),h((e,n,r)=>{L(p,1,`pointer-events-auto flex items-start gap-3 rounded-lg border px-3 py-2 shadow-md shadow-slate-950/10 ${e??``}`),t(b,`MCP · ${n??``} ${r??``}`)},[()=>l(R(a).kind),()=>u(R(a)),()=>o(R(a).kind)]),s(`click`,M,()=>Q.dismiss(R(a).id)),n(1,p,()=>H,()=>({x:24,duration:180,easing:re})),n(2,p,()=>ne,()=>({duration:140})),T(e,p)}),k(a),T(e,a)};E(m,e=>{Q.toasts.length>0&&e(_)}),T(e,p),S()}o([`click`]);var Pe=e=>{let t=F(null),n=F(null);if(!e)return{get element(){return R(t)},get rect(){return R(n)},dispose(){}};let r=null,i=e=>{w(n,e?e.getBoundingClientRect():null,!0)},a=()=>{let n=document.querySelector(e);n!==r&&(r=n,w(t,n,!0)),i(n)};a();let o=new MutationObserver(a);o.observe(document.body,{childList:!0,subtree:!0});let s=0,c=()=>{s||=requestAnimationFrame(()=>{s=0,r&&i(r)})},l=new ResizeObserver(c);r&&l.observe(r);let u=new MutationObserver(()=>{l.disconnect(),r&&l.observe(r)});u.observe(document.body,{childList:!0,subtree:!0});let d=()=>c(),f=()=>c();return window.addEventListener(`scroll`,d,!0),window.addEventListener(`resize`,f),{get element(){return R(t)},get rect(){return R(n)},dispose(){s&&cancelAnimationFrame(s),o.disconnect(),u.disconnect(),l.disconnect(),window.removeEventListener(`scroll`,d,!0),window.removeEventListener(`resize`,f)}}},Fe=(e,t)=>{let n=e instanceof HTMLTextAreaElement?HTMLTextAreaElement.prototype:HTMLInputElement.prototype,r=Object.getOwnPropertyDescriptor(n,`value`)?.set;r?r.call(e,t):e.value=t,e.dispatchEvent(new Event(`input`,{bubbles:!0})),e.dispatchEvent(new Event(`change`,{bubbles:!0}))},Ie=e=>{let t=[];for(let n of e){let e=document.querySelector(n.selector);if(!e){t.push(n);continue}e.value.length===0&&Fe(e,n.value)}return t},Le=e=>{let t=new WeakSet,n=()=>{e.matches(`:popover-open`)&&e.hidePopover(),e.showPopover()},r=new MutationObserver(r=>{if(!e.matches(`:popover-open`))return;let i=!1;for(let e of r){if(e.type!==`attributes`||e.attributeName!==`open`)continue;let n=e.target;n instanceof HTMLDialogElement&&(n.hasAttribute(`open`)?t.has(n)||(t.add(n),i=!0):t.delete(n))}i&&n()});return r.observe(document.body,{subtree:!0,attributes:!0,attributeFilter:[`open`]}),{dispose(){r.disconnect()}}},Re=l(`<div class="mt-3 rounded-md border border-amber-200 bg-amber-50 px-2.5 py-2 text-[11px] text-amber-900"><p class="mb-1.5 font-medium">First, head to the right page.</p> <button type="button" class="rounded-md bg-slate-900 px-2.5 py-1 text-[11px] font-medium text-white hover:bg-slate-800"> </button></div>`),ze=l(`<p class="mt-3 text-[10px] italic text-slate-500">Click the highlighted element to continue.</p>`),Be=l(`<p class="mt-3 text-[10px] italic text-slate-500">Do the action above to continue.</p>`),Ve=l(`<p class="mt-3 text-[10px] italic text-amber-700">Finish the action above first, then click Next.</p>`),He=l(`<aside popover="manual" class="fixed z-1010 m-0 w-80 max-w-[calc(100vw-3rem)] rounded-xl border border-brand-200 bg-white p-4 shadow-2xl shadow-slate-950/20 transition-[top,left,bottom,right] duration-200" aria-label="Interactive tutorial"><header class="mb-2 flex items-start justify-between gap-3"><div class="min-w-0"><p class="text-[10px] font-semibold uppercase tracking-wide text-brand-700"> </p> <h3 class="mt-0.5 text-sm font-semibold text-slate-950"> </h3></div> <button type="button" class="rounded-md px-1.5 py-0.5 text-xs text-slate-400 hover:bg-slate-100 hover:text-slate-700" aria-label="Exit tutorial" title="Exit tutorial">x</button></header> <p class="whitespace-pre-line text-xs leading-5 text-slate-700"> </p> <!> <footer class="mt-3 flex items-center justify-between gap-2"><button type="button" class="rounded-md p-1 text-slate-500 hover:bg-slate-100 hover:text-slate-800 disabled:cursor-not-allowed disabled:opacity-30" aria-label="Previous step" title="Back">←</button> <button type="button" class="rounded-md border border-slate-300 bg-white px-2.5 py-1 text-[11px] font-medium text-slate-600 hover:bg-slate-50">Exit</button> <button type="button" class="rounded-md bg-brand-700 px-3 py-1 text-[11px] font-semibold text-white hover:bg-brand-800 disabled:cursor-not-allowed disabled:bg-slate-300"> </button></footer></aside>`);function Ue(e,n){O(n,!0);let r=F(null);a(()=>{n.panelEl?.(R(r))});let i=P(()=>n.stepNumber===1),o=P(()=>n.stepNumber===n.totalSteps),c=P(()=>{switch(n.placement.kind){case`bottom-right`:return`bottom: 1.5rem; right: 1.5rem; left: auto; top: auto;`;case`bottom-left`:return`bottom: 1.5rem; left: 1.5rem; right: auto; top: auto;`;case`absolute`:return`top: ${n.placement.top}px; left: ${n.placement.left}px; bottom: auto; right: auto;`}});var l=He(),u=g(l),d=g(u),p=g(d),m=g(p);k(p);var _=f(p,2),v=g(_,!0);k(_),k(d);var b=f(d,2);k(u);var x=f(u,2),C=g(x,!0);k(x);var D=f(x,2),ee=e=>{var r=Re(),i=f(g(r),2),a=g(i);k(i),k(r),h(()=>t(a,`${n.step.route.label??``} →`)),s(`click`,i,function(...e){n.onGoToRoute?.apply(this,e)}),T(e,r)},A=e=>{T(e,ze())},j=e=>{T(e,Be())},M=e=>{T(e,Ve())};E(D,e=>{!n.onCorrectRoute&&n.step.route?e(ee):n.step.advance.kind===`click`?e(A,1):n.step.advance.kind===`event`?e(j,2):n.step.advance.kind===`manual`&&!n.nextEnabled&&e(M,3)});var N=f(D,2),L=g(N),z=f(L,2),B=f(z,2),V=g(B);k(B),k(N),k(l),te(l,e=>w(r,e),()=>R(r)),h(()=>{y(l,R(c)),t(m,`Tutorial · step ${n.stepNumber??``} of ${n.totalSteps??``}`),t(v,n.step.title),t(C,n.step.body),L.disabled=R(i),B.disabled=!n.nextEnabled,I(B,`title`,n.nextEnabled?R(o)?`Finish the tour`:`Next step`:`Finish the current action first`),t(V,`${R(o)?`Finish`:`Next`} →`)}),s(`click`,b,function(...e){n.onExit?.apply(this,e)}),s(`click`,L,function(...e){n.onPrev?.apply(this,e)}),s(`click`,z,function(...e){n.onExit?.apply(this,e)}),s(`click`,B,function(...e){n.onNext?.apply(this,e)}),T(e,l),S()}o([`click`]);var We=l(`<div class="pointer-events-none fixed z-20 rounded-lg ring-4 ring-brand-400 ring-offset-2 ring-offset-transparent" aria-hidden="true"></div>`),Ge=l(`<div class="pointer-events-none fixed inset-0 z-20 bg-slate-950/55" aria-hidden="true"></div> <button type="button" class="pointer-events-auto fixed left-1/2 top-20 z-1015 inline-flex -translate-x-1/2 items-center gap-2 rounded-full border border-brand-300 bg-white px-4 py-2 text-xs font-semibold text-brand-800 shadow-lg shadow-slate-950/30 animate-pulse hover:bg-brand-50" aria-label="Scroll up to see highlighted element"><span aria-hidden="true">↑</span> <span>Highlight is above — click to scroll up</span></button>`,1),Ke=l(`<div class="pointer-events-none fixed inset-0 z-20 bg-slate-950/55" aria-hidden="true"></div> <button type="button" class="pointer-events-auto fixed left-1/2 bottom-24 z-1015 inline-flex -translate-x-1/2 items-center gap-2 rounded-full border border-brand-300 bg-white px-4 py-2 text-xs font-semibold text-brand-800 shadow-lg shadow-slate-950/30 animate-pulse hover:bg-brand-50" aria-label="Scroll down to see highlighted element"><span>Highlight is below — click to scroll down</span> <span aria-hidden="true">↓</span></button>`,1),qe=l(`<div class="pointer-events-none fixed inset-0 z-20 bg-slate-950/55" aria-hidden="true"></div>`);function Je(e,t){O(t,!0);let n=F(0);a(()=>{let e=()=>{w(n,window.innerHeight,!0)};return e(),window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)});let r=P(()=>t.rect?{top:t.rect.top-10,left:t.rect.left-10,width:t.rect.width+20,height:t.rect.height+20}:null),i=P(()=>!t.rect||R(n)===0?null:t.rect.bottom<64?`above`:t.rect.top>R(n)?`below`:`visible`);var o=c(),l=v(o),u=e=>{var t=We();h(()=>y(t,`top: ${R(r).top??``}px; left: ${R(r).left??``}px; width: ${R(r).width??``}px; height: ${R(r).height??``}px; box-shadow: 0 0 0 9999px rgba(15, 23, 42, 0.55);`)),T(e,t)},d=e=>{var t=Ge();s(`click`,f(v(t),2),()=>window.scrollBy({top:-window.innerHeight*.7,behavior:`smooth`})),T(e,t)},p=e=>{var t=Ke();s(`click`,f(v(t),2),()=>window.scrollBy({top:window.innerHeight*.7,behavior:`smooth`})),T(e,t)},m=e=>{T(e,qe())};E(l,e=>{R(r)&&R(i)===`visible`?e(u):R(r)&&R(i)===`above`?e(d,1):R(r)&&R(i)===`below`?e(p,2):e(m,-1)}),T(e,o),S()}o([`click`]);var Ye=l(`<!> <!>`,1);function Xe(e,t){O(t,!0);let n=P(()=>K.currentStep),r=P(()=>R(n)?.route?B.url?.pathname===R(n).route.pathname:!0),i=F(null);a(()=>{let e=Pe(R(r)?R(n)?.target??null:null);return w(i,e,!0),()=>e.dispose()});let o=P(()=>R(i)?.rect??null),s=P(()=>{if(typeof window>`u`)return{kind:`bottom-right`};let e=R(n)?.panelPosition??`bottom-right`;if(e===`avoid-target`)return R(o)&&R(o).left+R(o).width/2>window.innerWidth/2?{kind:`bottom-left`}:{kind:`bottom-right`};if(e===`below-target`&&R(o)){let e=R(o).bottom+16;if(e+220>window.innerHeight-16)return{kind:`bottom-right`};let t=R(o).left+R(o).width/2-320/2;return{kind:`absolute`,top:e,left:Math.max(16,Math.min(t,window.innerWidth-320-16))}}return{kind:`bottom-right`}}),l=P(()=>!R(n)||R(n).advance.kind!==`manual`?!1:R(n).canAdvance?R(n).canAdvance():!0);a(()=>{let e=R(i)?.element;e&&e.scrollIntoView({behavior:`smooth`,block:`center`})}),a(()=>{let e=R(n);if(!e?.focusSelector||!R(r))return;let t=e.focusSelector,i=!1,a=0,o=()=>{if(i||a++>60)return;let e=document.querySelector(t);if(e){e.focus(),(e instanceof HTMLInputElement||e instanceof HTMLTextAreaElement)&&e.select();return}requestAnimationFrame(o)};return requestAnimationFrame(o),()=>{i=!0}}),a(()=>{if(!R(n)?.lockScroll)return;let e=document.body.style.overflow;return document.body.style.overflow=`hidden`,()=>{document.body.style.overflow=e}}),a(()=>{if(!R(n)?.target||K.stepIndex===0)return;let e=!1,t=null,r=!1,a=setInterval(()=>{r||(R(i)?.element==null?e&&!t&&(t=setTimeout(()=>K.previous(),500)):(e=!0,t&&=(clearTimeout(t),null)))},150);return()=>{r=!0,clearInterval(a),t&&clearTimeout(t)}}),a(()=>{let e=R(n);if(!e||e.advance.kind!==`click`)return;let t=e.advance.selector,r=e=>{let n=e.target;n instanceof Element&&n.closest(t)&&setTimeout(()=>K.next(),0)};return document.addEventListener(`click`,r,!0),()=>document.removeEventListener(`click`,r,!0)}),a(()=>{let e=R(n);if(!e?.prefill||e.prefill.length===0||!R(r))return;let t=[...e.prefill],i=0,a=!1,o=()=>{a||(t=Ie(t),t.length>0&&(i=requestAnimationFrame(o)))};return o(),()=>{a=!0,i&&cancelAnimationFrame(i)}});let u=F(null);a(()=>{R(u)&&(R(n)&&!R(u).matches(`:popover-open`)&&R(u).showPopover(),!R(n)&&R(u).matches(`:popover-open`)&&R(u).hidePopover())}),a(()=>{if(!R(u))return;let e=Le(R(u));return()=>e.dispose()});function d(){R(n)?.route&&z(R(n).route.pathname)}var p=c(),m=v(p),h=e=>{var t=Ye(),i=v(t),a=e=>{Je(e,{get rect(){return R(o)}})};E(i,e=>{R(r)&&e(a)});var c=f(i,2);{let e=P(()=>K.stepIndex+1);Ue(c,{get step(){return R(n)},get stepNumber(){return R(e)},get totalSteps(){return K.totalSteps},get onCorrectRoute(){return R(r)},get placement(){return R(s)},get nextEnabled(){return R(l)},panelEl:e=>w(u,e,!0),onGoToRoute:d,onPrev:()=>K.previous(),onNext:()=>K.next(),onExit:()=>K.cancel()})}T(e,t)};E(m,e=>{R(n)&&e(h)}),T(e,p),S()}var Ze=l(`<a> </a>`),Qe=l(`<div role="group" aria-label="View mode"></div>`),$e=l(`<div class="hidden min-w-0 items-center gap-2 sm:flex"><span class="shrink-0 text-slate-600" aria-hidden="true">/</span> <button type="button" class="max-w-56 truncate text-sm font-medium text-white transition hover:text-brand-300" title="Back to all projects"> </button></div>`),et=l(`<button type="button" class="absolute right-2 top-1/2 grid h-6 w-6 -translate-y-1/2 place-items-center rounded-md text-slate-500 transition hover:bg-slate-800 hover:text-white" aria-label="Clear builder search" title="Clear search">×</button>`),tt=l(`<div class="mx-3 hidden min-w-0 flex-1 justify-center md:flex"><label for="builder-global-search" class="sr-only">Search builder</label> <div class="relative w-full max-w-md"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" class="pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-500" aria-hidden="true"><circle cx="11" cy="11" r="7"></circle><path d="m20 20-3.5-3.5"></path></svg> <input id="builder-global-search" type="search" placeholder="Search..." class="h-9 w-full rounded-lg border border-slate-700 bg-slate-900/70 py-1.5 pl-9 pr-9 text-sm text-white placeholder:text-slate-500 outline-none transition focus:border-brand-400 focus:ring-2 focus:ring-brand-500/20"/> <!></div></div>`),nt=l(`<div role="menu" class="absolute right-0 top-12 z-40 w-60 overflow-hidden rounded-lg border border-slate-200 bg-white p-1 shadow-lg shadow-slate-950/10"><a href="/mcp" role="menuitem"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" class="mt-0.5 h-4 w-4 shrink-0 text-slate-400" aria-hidden="true"><path d="M12 3v18"></path><path d="M3 12h18"></path><path d="M5 5l14 14"></path><path d="M19 5L5 19"></path></svg> <span class="min-w-0 flex-1"><span class="block font-medium">MCP</span> <span class="block text-[11px] text-slate-500">Tools, setup, and integration help.</span></span></a> <div class="my-1 h-px bg-slate-100"></div> <button type="button" role="menuitem" class="flex w-full items-start gap-3 rounded-md px-3 py-2 text-left text-sm text-rose-700 hover:bg-rose-50 hover:text-rose-800"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" class="mt-0.5 h-4 w-4 shrink-0 text-rose-500" aria-hidden="true"><path d="M3 6h18"></path><path d="M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2"></path><path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"></path><line x1="10" y1="11" x2="10" y2="17"></line><line x1="14" y1="11" x2="14" y2="17"></line></svg> <span class="min-w-0 flex-1"><span class="block font-semibold">Reset local data</span> <span class="block text-[11px] text-rose-600/80">Wipes display name + browser settings. Projects on disk are
|
|
2
|
+
kept.</span></span></button></div>`),rt=l(`<span aria-hidden="true"> </span>`),it=d(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" class="h-5 w-5" aria-hidden="true"><circle cx="12" cy="8" r="3.5"></circle><path d="M5 20c1.2-3.6 4-5.5 7-5.5s5.8 1.9 7 5.5"></path></svg>`),at=l(`<p class="px-3 pt-2 pb-1 text-[10px] font-semibold uppercase tracking-wide text-slate-400">Signed in as</p> <p class="truncate px-3 pb-2 text-sm font-medium text-slate-800"> </p> <div class="my-1 h-px bg-slate-100"></div>`,1),ot=l(`<div role="menu" class="absolute right-0 top-12 z-40 w-60 overflow-hidden rounded-lg border border-slate-200 bg-white p-1 shadow-lg shadow-slate-950/10"><!> <button type="button" role="menuitem" class="flex w-full items-start gap-3 rounded-md px-3 py-2 text-left text-sm text-slate-700 hover:bg-slate-50"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" class="mt-0.5 h-4 w-4 shrink-0 text-slate-400" aria-hidden="true"><path d="M12 20h9"></path><path d="M16.5 3.5a2.121 2.121 0 1 1 3 3L7 19l-4 1 1-4 12.5-12.5z"></path></svg> <span class="min-w-0 flex-1"><span class="block font-medium"> </span> <span class="block text-[11px] text-slate-500">Shown on every history entry you create.</span></span></button></div>`),st=l(`<button type="button" class="absolute right-2 top-1/2 grid h-6 w-6 -translate-y-1/2 place-items-center rounded-md text-slate-500 transition hover:bg-slate-800 hover:text-white" aria-label="Clear builder search" title="Clear search">×</button>`),ct=l(`<div class="mx-auto px-4 pb-3 md:hidden"><label for="builder-global-search-mobile" class="sr-only">Search builder</label> <div class="relative"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" class="pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-500" aria-hidden="true"><circle cx="11" cy="11" r="7"></circle><path d="m20 20-3.5-3.5"></path></svg> <input id="builder-global-search-mobile" type="search" placeholder="Search..." class="h-9 w-full rounded-lg border border-slate-700 bg-slate-900/70 py-1.5 pl-9 pr-9 text-sm text-white placeholder:text-slate-500 outline-none transition focus:border-brand-400 focus:ring-2 focus:ring-brand-500/20"/> <!></div></div>`),lt=l(`<div class="motion-reduce:animate-none! motion-reduce:opacity-100!"><!></div>`),ut=l(`<div class="flex min-h-full flex-col bg-[linear-gradient(180deg,#f0fdfa_0%,#f8fafc_220px,#f8fafc_100%)] text-ink"><header><div class="mx-auto flex h-16 max-w-6xl items-center justify-between px-4 sm:px-6"><div class="flex min-w-0 items-center gap-3"><a href="/" class="flex shrink-0 items-center gap-2"><img src="/unspaghettit_logo.png" alt="Unspaghettit" class="h-12 w-auto"/> <span>Unspaghettit <span class="font-grotesk absolute right-0 -bottom-2 text-[10px] font-medium tracking-wide text-slate-500">by Lyriks.io</span></span></a> <!> <!></div> <!> <div class="flex shrink-0 items-center gap-1.5"><div class="relative"><button type="button" aria-haspopup="menu" aria-label="Open app menu" title="App menu"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" class="h-5 w-5" aria-hidden="true"><circle cx="12" cy="12" r="3"></circle><path d="M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 1 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 1 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 1 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 1 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"></path></svg></button> <!></div> <a href="/tutorial" aria-label="Help & tutorial" title="Help & tutorial"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" class="h-5 w-5" aria-hidden="true"><circle cx="12" cy="12" r="9"></circle><path d="M9.4 9a2.6 2.6 0 0 1 5 1c0 1.6-2.4 2-2.4 3.4"></path><line x1="12" y1="17.5" x2="12.01" y2="17.5"></line></svg></a> <div class="relative flex items-center gap-1.5"><button type="button" aria-haspopup="menu"><!> <span aria-hidden="true"></span></button> <!></div></div></div> <!></header> <main class="flex-1"><!></main></div> <!> <!> <!> <!>`,1);function dt(e,r){O(r,!0),N(async()=>{J.init(),W.init(),!J.name&&!J.hasBeenAsked&&(J.markAsked(),queueMicrotask(()=>{a()}));try{await oe.reconcileOrphanFeatures()}catch(e){console.warn(`Orphan reconciliation failed:`,e)}});async function a(){let e=await ae({title:`Your display name`,message:`Shown on every history entry you create. Stored locally in this browser — never sent off-machine. Leave empty to stay anonymous.`,inputLabel:`Display name`,defaultValue:J.name,placeholder:`e.g. John`,confirmLabel:`Save`,tone:`info`});e!==null&&J.setName(e)}let o=P(()=>J.name.trim().charAt(0).toUpperCase()),c=F(!1),l=F(null),d=F(!1),y=F(null);function b(e){let t=e.target;R(c)&&R(l)&&!R(l).contains(t)&&w(c,!1),R(d)&&R(y)&&!R(y).contains(t)&&w(d,!1)}async function x(){w(c,!1),await a()}async function C(){w(d,!1),await ee()}async function ee(){if(await ie({title:`Reset local browser data?`,message:`Clears your display name, the dashboard's local preferences, and any cached per-tab state in this browser. Your projects, features, history, and queue stay on disk untouched. The page will reload to apply a fresh state.`,confirmLabel:`Reset everything`,cancelLabel:`Cancel`,tone:`danger`})){try{localStorage.clear()}catch{}try{sessionStorage.clear()}catch{}location.reload()}}let A=P(ce),z=P(()=>R(A).length>1),V=P(()=>se(`builder`)&&B.url.pathname.startsWith(`/builder-mode`)),H=P(()=>B.url.pathname.startsWith(`/mcp`)),U=P(()=>R(V)),G=P(()=>R(V)?q.selectedProject:null),K=P(()=>q.search),le=P(()=>B.url.pathname);var ue=ut();p(`mousedown`,_,b),p(`keydown`,_,e=>{e.key===`Escape`&&(w(c,!1),w(d,!1))});var de=v(ue),Y=g(de),fe=g(Y),pe=g(fe),me=g(pe),he=f(g(me),2);k(me);var ge=f(me,2),_e=e=>{var n=Qe();i(n,21,()=>R(A),e=>e.id,(e,n)=>{let r=P(()=>R(n).matches(B.url.pathname));var i=Ze(),a=g(i,!0);k(i),h(()=>{I(i,`href`,R(n).href),L(i,1,`rounded-full px-2.5 py-0.5 transition ${R(r)?R(U)?`bg-slate-700 text-white shadow-sm shadow-black/20`:`bg-white text-slate-900 shadow-sm shadow-slate-950/10`:R(U)?`text-slate-400 hover:text-slate-200`:`text-slate-500 hover:text-slate-800`}`),I(i,`aria-current`,R(r)?`page`:void 0),t(a,R(n).label)}),T(e,i)}),k(n),h(()=>L(n,1,`flex shrink-0 items-center rounded-full border p-0.5 text-[11px] font-medium ${R(U)?`border-slate-700/70 bg-slate-800/60`:`border-slate-200 bg-slate-100`}`)),T(e,n)};E(ge,e=>{R(z)&&e(_e)});var ve=f(ge,2),ye=e=>{var n=$e(),r=f(g(n),2),i=g(r,!0);k(r),k(n),h(()=>t(i,R(G).name)),s(`click`,r,()=>q.deselectProject()),T(e,n)};E(ve,e=>{R(G)&&e(ye)}),k(pe);var be=f(pe,2),xe=e=>{var t=tt(),n=f(g(t),2),r=f(g(n),2);D(r);var i=f(r,2),a=e=>{var t=et();s(`click`,t,()=>q.clearSearch()),T(e,t)},o=P(()=>R(K).trim().length>0);E(i,e=>{R(o)&&e(a)}),k(n),k(t),h(()=>j(r,R(K))),s(`input`,r,e=>q.setSearch(e.target.value)),T(e,t)};E(be,e=>{R(V)&&e(xe)});var Ce=f(be,2),X=g(Ce),Z=g(X),Te=f(Z,2),Ee=e=>{var t=nt(),n=g(t),r=f(n,4);k(t),h(()=>L(n,1,`flex w-full items-start gap-3 rounded-md px-3 py-2 text-left text-sm ${R(H)?`bg-slate-100 text-slate-950`:`text-slate-700 hover:bg-slate-50`}`)),s(`click`,n,()=>w(d,!1)),s(`click`,r,C),T(e,t)};E(Te,e=>{R(d)&&e(Ee)}),k(X),te(X,e=>w(y,e),()=>R(y));var Q=f(X,2),De=f(Q,2),$=g(De),Oe=g($),ke=e=>{var n=rt(),r=g(n,!0);k(n),h(()=>t(r,R(o))),T(e,n)},Ae=e=>{T(e,it())};E(Oe,e=>{J.name?e(ke):e(Ae,-1)});var je=f(Oe,2);k($);var Me=f($,2),Pe=e=>{var n=ot(),r=g(n),i=e=>{var n=at(),r=f(v(n),2),i=g(r,!0);k(r),M(2),h(()=>t(i,J.name)),T(e,n)};E(r,e=>{J.name&&e(i)});var a=f(r,2),o=f(g(a),2),c=g(o),l=g(c,!0);k(c),M(2),k(o),k(a),k(n),h(()=>t(l,J.name?`Change display name`:`Set display name`)),s(`click`,a,x),T(e,n)};E(Me,e=>{R(c)&&e(Pe)}),k(De),te(De,e=>w(l,e),()=>R(l)),k(Ce),k(fe);var Fe=f(fe,2),Ie=e=>{var t=ct(),n=f(g(t),2),r=f(g(n),2);D(r);var i=f(r,2),a=e=>{var t=st();s(`click`,t,()=>q.clearSearch()),T(e,t)},o=P(()=>R(K).trim().length>0);E(i,e=>{R(o)&&e(a)}),k(n),k(t),h(()=>j(r,R(K))),s(`input`,r,e=>q.setSearch(e.target.value)),T(e,t)};E(Fe,e=>{R(V)&&e(Ie)}),k(Y);var Le=f(Y,2);u(g(Le),()=>R(le),e=>{var t=lt();m(g(t),()=>r.children),k(t),n(1,t,()=>ne,()=>({duration:160,easing:re})),T(e,t)}),k(Le),k(de);var Re=f(de,2);Se(Re,{});var ze=f(Re,2);we(ze,{});var Be=f(ze,2);Ne(Be,{}),Xe(f(Be,2),{}),h(()=>{L(Y,1,`sticky top-0 z-30 border-b backdrop-blur transition-colors ${R(U)?`border-slate-800 bg-slate-950/90`:`border-slate-200 bg-white/95`}`),L(he,1,`relative hidden font-brand text-3xl font-semibold leading-none sm:inline-block ${R(U)?`text-white`:`text-slate-950`}`),I(Z,`aria-expanded`,R(d)),L(Z,1,`grid h-9 w-9 place-items-center rounded-md transition ${R(d)||R(H)?R(U)?`bg-slate-800 text-white`:`bg-slate-900 text-white`:R(U)?`text-slate-400 hover:bg-slate-800 hover:text-white`:`text-slate-600 hover:bg-slate-100 hover:text-slate-950`}`),L(Q,1,`grid h-9 w-9 place-items-center rounded-md transition ${R(U)?`text-slate-400 hover:bg-slate-800 hover:text-white`:`text-slate-600 hover:bg-slate-100 hover:text-slate-950`}`),I($,`aria-expanded`,R(c)),I($,`aria-label`,J.name?`Signed in as ${J.name}. Open identity menu.`:`Set your display name`),I($,`title`,J.name?`Signed in as ${J.name}`:`Set a display name so your edits are recognisable in history`),L($,1,`group relative flex h-10 w-10 shrink-0 items-center justify-center rounded-full text-sm font-semibold shadow-sm shadow-slate-950/5 ring-1 ring-transparent transition focus:outline-none focus-visible:ring-2 focus-visible:ring-brand-300
|
|
3
|
+
${J.name?`bg-linear-to-br from-brand-600 to-brand-800 text-white hover:from-brand-500 hover:to-brand-700`:`border border-dashed border-slate-300 bg-white text-slate-400 hover:border-brand-400 hover:text-brand-700`}`),L(je,1,`absolute -right-0.5 -bottom-0.5 inline-flex h-3 w-3 items-center justify-center rounded-full ring-2 ring-white
|
|
4
|
+
${J.name?`bg-emerald-500`:`bg-amber-400`}`)}),s(`click`,Z,()=>{w(d,!R(d)),w(c,!1)}),s(`click`,$,()=>{w(c,!R(c)),w(d,!1)}),T(e,ue),S()}o([`click`,`input`]);export{dt as component,le as universal};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{A as e,N as t,Q as n,W as r,X as i,Z as a,ct as o,j as s,lt as c,mt as l}from"../chunks/BPl9BITm.js";import"../chunks/xihTtKlq.js";import{t as u}from"../chunks/iQu0D9Ux.js";var d=t(`<h1> </h1> <p> </p>`,1);function f(t,f){c(f,!0);var p=d(),m=a(p),h=i(m,!0);l(m);var g=n(m,2),_=i(g,!0);l(g),r(()=>{e(h,u.status),e(_,u.error?.message)}),s(t,p),o()}export{f as component};
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{J as e,U as t,x as n}from"../chunks/BPl9BITm.js";import"../chunks/xihTtKlq.js";import"../chunks/suTxxv1t.js";import{t as r}from"../chunks/DBJWcC6Y.js";function i(i){n(`1uha8ag`,n=>{t(()=>{e.title=`Projects / Unspaghettit`})}),r(i,{})}export{i as component};
|
|
Binary file
|
|
Binary file
|
|
@@ -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 ee,pt as N,r as te,rt as P,s as ne,tt as F,u as I,v as L,x as R,y as re,z}from"../chunks/BPl9BITm.js";import{n as B}from"../chunks/DatGSObE.js";import"../chunks/xihTtKlq.js";import{t as V}from"../chunks/iQu0D9Ux.js";import{a as ie,n as ae,r as H,t as U}from"../chunks/ib21i2T_.js";import{at as W,lt as G,n as K,r as q,ut as J}from"../chunks/Bp2_Vghh.js";import"../chunks/suTxxv1t.js";import"../chunks/DHoA038D.js";import{n as oe,r as Y}from"../chunks/Dq0DUAz1.js";import{t as se}from"../chunks/DjWKKtqp.js";var ce=b({load:()=>le}),le=()=>{if(!oe(`builder`))throw se(307,`/projects`)};function ue(e,{from:t,to:n},r={}){var{delay:i=0,duration:a=e=>Math.sqrt(e)*120,easing:o=U}=r,s=getComputedStyle(e),c=s.transform===`none`?``:s.transform,[l,u]=s.transformOrigin.split(` `).map(parseFloat);l/=e.clientWidth,u/=e.clientHeight;var d=de(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 de(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 fe=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>`),X=l(`<div><p class="clamp-2 text-sm leading-5 text-slate-400 svelte-btsgvr"> </p> <!></div>`);function pe(t,n){j(n,!0);let r=x(n,`class`,3,``),a=F(!1),o=F(!1),c=F(!1),l=F(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=z(l);if(!e)return;n.text;let t=()=>{z(a)||z(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=z(l);e&&(z(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=X(),C=_(S),T=_(C,!0);M(C),ne(C,e=>E(l,e),()=>z(l));var D=d(C,2),A=t=>{var n=fe(),r=_(n),i=_(r,!0);M(r);var o=d(r,2);M(n),g(()=>{I(n,`aria-expanded`,z(a)),e(i,z(a)?`View less`:`View more`),L(o,0,`h-3 w-3 transition-transform duration-500 ease-out ${z(a)?`rotate-180`:``}`)}),s(`click`,n,h),O(t,n)};k(D,e=>{(z(o)||z(a)||z(c))&&e(A)}),M(S),g(()=>{L(S,1,re(r()),`svelte-btsgvr`),e(T,n.text)}),O(t,S),w()}a([`click`]);var Z=0,Q=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>`),me=l(`<button type="button" class="truncate"> </button>`),he=l(`<span class="truncate"> </span>`),ge=l(`<button type="button" class="shrink-0 opacity-0 transition group-hover/chip:opacity-70 hover:opacity-100!" title="Rename (applies everywhere)">✎</button>`),_e=l(`<button type="button" class="shrink-0 opacity-0 transition group-hover/chip:opacity-70 hover:opacity-100!" title="Remove from this item">✕</button>`),ve=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>`),ye=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>`),be=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>`),xe=l(`<option></option>`),Se=l(`<datalist></datalist>`),Ce=l(`<div><div class="flex flex-wrap items-center gap-1.5"><!> <!> <!></div></div>`);function we(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,`class`,3,``),l=`buildertags-types-${++Z}`,u=`#64748b`,p=(e,t)=>{let n=e??u,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(`; `)},m=F(!1),b=F(``),T=F(``),D=F(null);async function ee(){E(m,!0),await h(),z(D)?.focus()}function N(){E(m,!1),E(b,``),E(T,``)}async function te(e){e.preventDefault();let t=z(T).trim();if(!t)return;let n=z(b).trim()||`tag`;N(),await r.onAdd?.(n,t)}let R=F(null),B=F(``),V=F(``),ie=F(null);async function ae(e){E(R,G(e),!0),E(B,W(e.type),!0),E(V,W(e.value),!0),await h(),z(ie)?.select()}function H(){E(R,null)}async function U(e,t){e.preventDefault();let n=z(V).trim(),i=z(B).trim();!n||!i||(H(),await r.onRename?.(t,{type:i,value:n}))}function K(e,t){e.key===`Escape`&&t()}var q=c(),oe=v(q),se=t=>{var h=Ce(),x=_(h),w=_(x);n(w,17,()=>r.tags,e=>G(e),(t,n)=>{var i=c(),o=v(i),m=e=>{var t=Q(),r=_(t);A(r),ne(r,e=>E(ie,e),()=>z(ie));var i=d(r,2);A(i);var o=d(i,4);M(t),g(()=>I(r,`list`,a().length>0?l:void 0)),f(`submit`,t,e=>U(e,z(n))),s(`keydown`,r,e=>K(e,H)),C(r,()=>z(B),e=>E(B,e)),s(`keydown`,i,e=>K(e,H)),C(i,()=>z(V),e=>E(V,e)),s(`click`,o,H),O(e,t)},h=P(()=>z(R)===G(z(n))),b=t=>{let i=P(()=>Y.colorForTag(z(n))),a=P(()=>r.isActive?.(z(n))??!1);var o=ve(),c=_(o),l=d(c,2),f=t=>{var i=me(),o=_(i,!0);M(i),g((t,n)=>{I(i,`aria-pressed`,z(a)),I(i,`title`,t),e(o,n)},[()=>`${J(z(n))} — click to filter`,()=>W(z(n).value)]),s(`click`,i,()=>r.onToggle(z(n))),O(t,i)},m=t=>{var r=he(),i=_(r,!0);M(r),g((t,n)=>{I(r,`title`,t),e(i,n)},[()=>J(z(n)),()=>W(z(n).value)]),O(t,r)};k(l,e=>{r.onToggle?e(f):e(m,-1)});var h=d(l,2),v=e=>{var t=ge();g(e=>I(t,`aria-label`,e),[()=>`Rename ${J(z(n))}`]),s(`click`,t,()=>ae(z(n))),O(e,t)};k(h,e=>{r.onRename&&e(v)});var b=d(h,2),x=e=>{var t=_e();g(e=>I(t,`aria-label`,e),[()=>`Remove ${J(z(n))}`]),s(`click`,t,()=>r.onRemove(z(n))),O(e,t)};k(b,e=>{r.onRemove&&e(x)}),M(o),g(e=>{y(o,e),y(c,`background-color: ${z(i)??u??``}`)},[()=>p(z(i),z(a))]),O(t,o)};k(o,e=>{z(h)?e(m):e(b,-1)}),O(t,i)});var j=d(w,2),F=e=>{var t=c(),n=v(t),r=e=>{var t=ye(),n=_(t);A(n),ne(n,e=>E(D,e),()=>z(D));var r=d(n,2);A(r);var i=d(r,4);M(t),g(()=>I(n,`list`,a().length>0?l:void 0)),f(`submit`,t,te),s(`keydown`,n,e=>K(e,N)),C(n,()=>z(b),e=>E(b,e)),s(`keydown`,r,e=>K(e,N)),C(r,()=>z(T),e=>E(T,e)),s(`click`,i,N),O(e,t)},i=e=>{var t=be();s(`click`,t,ee),O(e,t)};k(n,e=>{z(m)?e(r):e(i,-1)}),O(e,t)};k(j,e=>{r.onAdd&&e(F)});var q=d(j,2),oe=e=>{var t=Se();n(t,20,a,e=>e,(e,t)=>{var n=xe(),r={};g(()=>{r!==(r=t)&&(n.value=(n.__value=t)??``)}),O(e,n)}),M(t),g(()=>I(t,`id`,l)),O(e,t)};k(q,e=>{a().length>0&&e(oe)}),M(x),M(h),S(h,(e,t)=>i?.(e,t),()=>z(m)||z(R)!==null),g(()=>L(h,1,re(o()))),O(t,h)};k(oe,e=>{(r.tags.length>0||r.onAdd)&&e(se)}),O(t,q),w()}a([`keydown`,`click`]);var Te=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=P(()=>n.value===null?0:Math.max(0,Math.min(100,n.value))),i=P(()=>`${z(r)}%`),a=P(()=>z(r)*.87965),o=P(()=>z(r)>=80?`is-high`:z(r)>=45?`is-mid`:`is-low`);var s=Te(),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(()=>{L(s,1,`score-meter ${z(o)??``}`,`svelte-tnjw1f`),I(u,`stroke-linecap`,z(r)>0?`round`:`butt`),I(u,`stroke-dasharray`,`${z(a)} 87.965`),I(f,`stroke-linecap`,z(r)>0?`round`:`butt`),I(f,`stroke-dasharray`,`${z(a)} 87.965`),e(m,z(i)),e(v,n.label)}),O(t,s)}var Ee=t=>{var n=c(),r=v(n),i=t=>{let n=P(()=>Y.activeTag);var r=Ae(),i=d(_(r),2),a=_(i,!0);M(i),N(2),M(r),g((t,n)=>{I(r,`title`,t),e(a,n)},[()=>`Clear tag filter: ${W(z(n).type)} · ${W(z(n).value)}`,()=>W(z(n).value)]),s(`click`,r,()=>Y.clearTag()),O(t,r)};k(r,e=>{Y.activeTag&&e(i)}),O(t,n)},De=(t,n=D)=>{var r=je(),i=_(r,!0);M(r),g(()=>{I(r,`title`,`Build queue position #${n()}`),e(i,n())}),O(t,r)},Oe=(e,t=D,n=D)=>{let i=P(()=>Y.queuePositionForAction(t(),n())),a=P(()=>z(i)!==null);var o=Ne(),c=_(o),l=e=>{var t=Me();De(v(t),()=>z(i)),N(2),O(e,t)},u=e=>{O(e,r(`+ Implement`))};k(c,e=>{z(i)===null?e(u,-1):e(l)}),M(o),g(()=>{L(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 ${z(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`),I(o,`aria-pressed`,z(a)),I(o,`title`,z(a)?`In build queue at position #${z(i)} (click to remove)`:`Add to build queue`)}),s(`click`,o,()=>Y.toggleAction(t(),n())),O(e,o)},ke=(e,t=D)=>{let n=P(()=>Y.queuePositionForFeature(t())),i=P(()=>z(n)!==null);var a=Fe(),o=_(a),c=e=>{var t=Pe();De(v(t),()=>z(n)),N(2),O(e,t)},l=e=>{O(e,r(`+ Implement all`))};k(o,e=>{z(n)===null?e(l,-1):e(c)}),M(a),g(()=>{L(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 ${z(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`),I(a,`aria-pressed`,z(i)),I(a,`title`,z(i)?`Whole feature queued at position #${z(n)} — the build implements whatever is still missing (click to remove)`:`Queue the whole feature: implement everything still missing`)}),s(`click`,a,()=>Y.toggleFeature(t())),O(e,a)},Ae=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>`),je=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>`),Me=l(`<!> <span class="svelte-xw1ck7">Queued</span>`,1),Ne=l(`<button type="button"><!></button>`),Pe=l(`<!> <span class="svelte-xw1ck7">Queued</span>`,1),Fe=l(`<button type="button"><!></button>`),Ie=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>`),Le=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),Re=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>`),ze=l(`<ul class="space-y-2 svelte-xw1ck7"></ul>`),Be=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>`),Ve=l(`<div class="absolute inset-y-0 rounded-full svelte-xw1ck7"></div>`),He=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>`),Ue=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>`),We=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>`),Ge=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>`),Ke=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>`),Je=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>`),Ye=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>`),Xe=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>`),Ze=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>`),Qe=l(`<div class="rounded-xl border border-rose-500/30 bg-rose-500/10 p-4 text-sm text-rose-300 svelte-xw1ck7"> </div>`),$e=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>`),et=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>`),tt=l(`<button type="button"> </button>`),nt=l(`<span class="text-xs text-slate-500 svelte-xw1ck7"> </span>`),rt=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>`),it=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>`),at=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>`),ot=l(`<p class="text-sm text-slate-500 svelte-xw1ck7">No suggestions yet. Ask your assistant to propose improvements for this feature.</p>`),st=l(`<div class="border-t border-slate-800 bg-slate-950/40 px-4 py-3 svelte-xw1ck7"><!></div>`),ct=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>`),lt=l(`<div class="space-y-3 svelte-xw1ck7"></div>`),ut=l(`<span class="text-xs text-slate-500 svelte-xw1ck7"> </span>`),dt=l(`<div><div>Pick a core feature to see its features.</div></div>`),ft=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>`),pt=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>`),mt=l(`<div class="space-y-3 svelte-xw1ck7"></div>`),ht=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>`),gt=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>`),_t=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>`),vt=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 yt(r,a){j(a,!0);let o=(r,i=D,a=D)=>{var o=ze();n(o,23,a,e=>e.id,(n,r,a)=>{var o=Re(),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,Ie())},h=P(()=>Y.isBusy(z(r).id)),y=e=>{var t=Le(),n=v(t),a=d(n,2);s(`click`,n,()=>Y.acceptSuggestion(i(),z(r).id)),s(`click`,a,()=>Y.dismissSuggestion(i(),z(r).id)),O(e,t)};k(p,e=>{z(h)?e(m):e(y,-1)}),M(o),g(t=>{L(c,1,`mt-0.5 shrink-0 rounded-md px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide ${z(r).tone===`urgent`?`bg-rose-500/15 text-rose-300`:`bg-violet-500/15 text-violet-300`}`,`svelte-xw1ck7`),e(l,t),e(f,z(r).text)},[()=>ye(z(r))]),t(1,o,()=>H,()=>({y:6,duration:C(240),delay:R(z(a)),easing:U})),O(n,o)}),M(o),O(r,o)},l=(n,r=D,i=D,a=D)=>{var o=Be(),s=_(o),c=_(s),l=_(c,!0);M(c),Oe(d(c,2),r,()=>i().id),M(s);var u=d(s,2);pe(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,()=>H,()=>({y:10,duration:C(280),delay:R(a()),easing:U})),O(n,o)},u=(t,n=D,r=D,i=D)=>{let a=P(()=>Y.currentScoreFor(n(),r())),o=P(()=>Pe(n(),r())?z(Ne):Se(n(),r())??z(a)),c=P(()=>z(o)>z(a));var l=He(),u=_(l),f=_(u,!0);M(u);var p=d(u,2);I(p,`aria-valuemax`,100);var m=_(p),h=d(m,2),v=e=>{var t=Ve();g(e=>y(t,`left: ${z(a)??``}%; width: ${z(o)-z(a)}%; background-color: ${e??``}`),[()=>xe(z(o))]),O(e,t)};k(h,e=>{z(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()),I(p,`aria-label`,t),I(p,`aria-valuemin`,z(a)),I(p,`aria-valuenow`,z(o)),y(m,`width: ${z(a)??``}%`),y(b,`left: ${z(o)??``}%; background-color: ${n??``}`),e(S,`${z(a)??``}%${z(c)?` → ${z(o)}%`:``}`)},[()=>`${i()} goal for ${be(n())}`,()=>xe(z(o))]),s(`pointerdown`,p,e=>yt(e,n(),r(),z(a))),s(`pointermove`,p,e=>bt(e,n(),r(),z(a))),s(`pointerup`,p,()=>xt(n(),r(),z(a))),s(`keydown`,p,e=>St(e,n(),r(),z(a))),O(t,l)},m=(e,t=D)=>{let n=P(()=>t().item.target);var r=We(),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),N(),M(c);var f=d(c,2),p=e=>{var n=Ue();s(`click`,n,()=>Ae(t())),O(e,n)};k(f,e=>{z(n)&&e(p)}),M(o),M(r),g(e=>T(l,e),[()=>!!z(n)?.report]),s(`change`,l,()=>De(t())),O(e,r)},b=t=>{var r=c(),i=v(r),a=t=>{var r=Je(),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,Ge())},v=t=>{var r=qe();n(r,23,()=>Y.queue,e=>String(e.item.id),(t,n,r)=>{var i=Ke(),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),()=>z(n)),M(i),g((t,a)=>{L(i,1,`rounded-lg border bg-slate-800/40 px-3 py-2 transition ${z(n).orphaned?`opacity-60`:``} ${z(Z)===z(r)?`opacity-40`:``} ${z(Q)===z(r)&&z(Z)!==null&&z(Z)!==z(r)?`border-brand-400 ring-1 ring-brand-400`:`border-slate-800`}`,`svelte-xw1ck7`),e(l,z(r)+1),e(h,t),e(y,a)},[()=>be(z(n)),()=>Ct(z(n))]),f(`dragover`,i,e=>he(e,z(r))),f(`drop`,i,()=>ge(z(r))),f(`dragend`,i,_e),f(`dragstart`,o,()=>me(z(r))),f(`dragend`,o,_e),s(`click`,b,()=>Y.dequeue(z(n).item.id)),O(t,i)}),M(r),O(t,r)};k(p,e=>{Y.queue.length===0?e(h):e(v,-1)}),M(u),M(r),g(()=>e(c,Y.queue.length)),s(`click`,l,()=>E(X,!1)),O(t,r)},o=t=>{var n=Ye(),r=d(_(n),2),i=_(r,!0);M(r),M(n),g(()=>e(i,Y.queue.length)),s(`click`,n,()=>E(X,!0)),O(t,n)};k(i,e=>{z(X)?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,R=e=>C(Math.min(e,12)*40);function W(e,{duration:t=300}={}){let n=getComputedStyle(e),r=parseFloat(n.height),i=parseFloat(n.marginTop),a=parseFloat(n.marginBottom),o=parseFloat(n.paddingTop),s=parseFloat(n.paddingBottom);return{duration:t,easing:U,css:e=>`overflow: hidden; opacity: ${e};height: ${e*r}px;margin-top: ${e*i}px; margin-bottom: ${e*a}px;padding-top: ${e*o}px; padding-bottom: ${e*s}px;`}}let G=F(null),J=F(!1),oe=Array.from({length:8},(e,t)=>t),se=F(null);function ce(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 le(e){Y.selectCoreFeature(e),await h(),z(se)?.scrollIntoView({behavior:x?`auto`:`smooth`,block:`start`})}i(()=>{let e=z(G);if(!e||typeof IntersectionObserver>`u`)return;let t=new IntersectionObserver(e=>{let t=e[0];t&&E(J,!t.isIntersecting)},{rootMargin:`-72px 0px 0px 0px`,threshold:0});return t.observe(e),()=>t.disconnect()});let de=null;i(()=>{let e=Y.allTagTypes;e.length>0&&Y.registerTagTypes(e)});let fe=F(!1);i(()=>{if(!z(fe)||typeof window>`u`)return;let e=Y.selectedProjectId,t=Y.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&&B(`${n.pathname}${n.search}`,{})}),te(()=>{let e=V.url.searchParams,t=e.get(`project`),n=e.get(`core`);t&&(Y.selectProject(t),n&&Y.selectCoreFeature(n)),E(fe,!0),Y.refresh(),Y.refreshTagPalette(),de=Y.subscribeSync(e=>{(e.kind===`project`||e.kind===`feature`||e.kind===`implementation-status`)&&Y.refreshSilent()})}),ee(()=>{de?.(),de=null});let X=F(!1),Z=F(null),Q=F(null);function me(e){E(Z,e,!0)}function he(e,t){e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect=`move`),E(Q,t,!0)}function ge(e){let t=z(Z);if(E(Z,null),E(Q,null),t===null||t===e)return;let n=Y.queue[t];n&&Y.moveQueueTo(n.item.id,e)}function _e(){E(Z,null),E(Q,null)}function ve(e){return e.coreFeatures.reduce((e,t)=>e+t.features.length,0)}function ye(e){return e.tone===`urgent`?`Priority`:`Idea`}function be(e){return e.item.kind===`action`?e.actionName??`Action`:e.item.kind===`surface`?e.surfaceName??`Surface`:e.featureName}function xe(e){return e>=80?`#34d399`:e>=45?`#fb923c`:`#f43f5e`}function Se(e,t){return t===`maturity`?e.item.target?.maturity:e.item.target?.implementation}function Ce(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}:{}};Y.setQueueTarget(e.item.id,q(r)?void 0:r)}function Te(e,t,n){Ce(e,{[t]:n})}function De(e){Ce(e,{report:!e.item.target?.report})}function Ae(e){Y.setQueueTarget(e.item.id,void 0)}let je=F(null),Me=F(`implementation`),Ne=F(0),Pe=(e,t)=>z(je)===String(e.item.id)&&z(Me)===t;function Fe(e,t){let n=e.getBoundingClientRect(),r=n.width>0?(t-n.left)/n.width:0;return K(Math.max(0,Math.min(1,r))*100)}function yt(e,t,n,r){e.preventDefault();let i=e.currentTarget;i.setPointerCapture(e.pointerId),E(je,String(t.item.id),!0),E(Me,n,!0),E(Ne,Math.max(r,Fe(i,e.clientX)),!0)}function bt(e,t,n,r){Pe(t,n)&&E(Ne,Math.max(r,Fe(e.currentTarget,e.clientX)),!0)}function xt(e,t,n){if(!Pe(e,t))return;let r=z(Ne);E(je,null),Te(e,t,r<=n?void 0:r)}function St(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=K((Se(t,n)??r)+i);Te(t,n,a<=r?void 0:a)}function Ct(e){let t=e.orphaned?` · removed from spec`:``;return e.item.kind===`feature`?`Whole feature · implement what's missing${t}`:`${e.featureName}${t}`}let wt=`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 Tt=vt(),Et=v(Tt),Dt=_(Et),Ot=d(_(Dt),2),kt=e=>{var t=Ze();n(t,20,()=>oe,e=>e,(e,t)=>{var n=Xe();g(()=>y(n,`--d: ${t*80}ms`)),O(e,n)}),M(t),O(e,t)},At=t=>{var n=Qe(),r=_(n,!0);M(n),g(()=>e(r,Y.error)),O(t,n)},jt=e=>{O(e,$e())},Mt=e=>{O(e,et())},Nt=r=>{let i=P(()=>Y.selectedProject);var a=ht(),c=_(a);L(c,1,re(wt),`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 z(i).maturityPercentage}}),$(d(A,2),{label:`Built`,get value(){return z(i).implementationPercentage}}),M(D),M(m),M(f);var j=d(f,2),ee=_(j);ne(ee,e=>E(G,e),()=>z(G));var N=d(ee,2),te=_(N),F=d(_(te),2),B=_(F);Ee(B);var V=d(B,2),K=t=>{var n=tt();L(n,1,re(wt),`svelte-xw1ck7`);var r=_(n);M(n),g(()=>e(r,`← Show all ${z(i).coreFeatures.length??``}`)),s(`click`,n,()=>Y.deselectCoreFeature()),O(t,n)},q=t=>{var n=nt(),r=_(n);M(n),g(()=>e(r,`${Y.visibleCoreFeatures.length??``}${Y.searchActive||Y.tagActive?` of ${z(i).coreFeatures.length}`:``}`)),O(t,n)};k(V,e=>{Y.selectedCoreFeature?e(K):e(q,-1)}),M(F),M(te);var oe=d(te,2),ce=e=>{O(e,rt())},de=e=>{O(e,it())},fe=r=>{var i=lt();n(i,31,()=>Y.visibleCoreFeatures,e=>e.id,(n,r,i)=>{let a=P(()=>Y.selectedCoreFeature?.id===z(r).id);var c=ct(),l=_(c),u=e=>{var t=at();g(()=>I(t,`aria-label`,`Open ${z(r).name}`)),s(`click`,t,()=>le(z(r).id)),O(e,t)};k(l,e=>{z(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),ke(d(x,2),()=>z(r).id),M(v);var w=d(v,2);pe(w,{get text(){return z(r).description},class:`mt-1`}),we(d(w,2),{get tags(){return z(r).tags},onToggle:e=>Y.toggleTag(e),isActive:e=>Y.isActiveTag(e),onAdd:(e,t)=>Y.addCoreFeatureTag(z(r).id,{type:e,value:t}),onRemove:e=>Y.removeCoreFeatureTag(z(r).id,e),onRename:(e,t)=>Y.renameTag(e,t),get typeOptions(){return Y.allTagTypes},class:`relative z-20 mt-2`}),M(h);var T=d(h,2),E=_(T);$(E,{label:`Maturity`,get value(){return z(r).maturityPercentage}}),$(d(E,2),{label:`Built`,get value(){return z(r).implementationPercentage}}),M(T),M(m),M(f);var D=d(f,2),A=e=>{var n=st(),i=_(n),a=e=>{o(e,()=>z(r).id,()=>z(r).suggestions)},s=e=>{O(e,ot())};k(i,e=>{z(r).suggestions.length>0?e(a):e(s,-1)}),M(n),t(3,n,()=>ie,()=>({duration:C(300),easing:U})),O(e,n)};k(D,e=>{z(a)&&e(A)}),M(c),g(()=>{L(c,1,`skeuo-card group relative overflow-hidden ${z(a)?`skeuo-card--active`:`skeuo-card--interactive`}`,`svelte-xw1ck7`),L(y,1,`min-w-0 flex-1 truncate text-base font-semibold text-white ${z(a)?``:`group-hover:text-brand-300`}`,`svelte-xw1ck7`),e(b,z(r).name),e(S,`${z(r).features.length??``} feat`)}),t(1,c,()=>H,()=>({y:10,duration:C(300),delay:R(z(i)),easing:U})),t(2,c,()=>W,()=>({duration:C(300)})),p(c,()=>ue,()=>({duration:C(320),easing:U})),O(n,c)}),M(i),O(r,i)};k(oe,e=>{z(i).coreFeatures.length===0?e(ce):Y.visibleCoreFeatures.length===0?e(de,1):e(fe,-1)}),M(N);var X=d(N,2),Z=_(X),Q=_(Z),me=d(_(Q),2),he=_(me,!0);M(me),M(Q);var ge=d(Q,2),_e=t=>{var n=ut(),r=_(n);M(n),g(()=>e(r,`${Y.visibleSelectedFeatures.length??``}${Y.searchActive?` of ${Y.selectedCoreFeature.features.length}`:``}`)),O(t,n)};k(ge,e=>{Y.selectedCoreFeature&&e(_e)}),M(Z);var ye=d(Z,2),be=e=>{var n=dt(),r=_(n);let i;M(n),g(()=>{L(n,1,`xl:relative xl:flex-1 xl:rounded-2xl xl:transition-colors xl:duration-500 xl:ease-out xl:motion-reduce:transition-none ${z(J)?`xl:bg-white/2.5`:`xl:bg-transparent`}`,`svelte-xw1ck7`),i=L(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 ${z(J)?`xl:top-1/2 xl:-translate-y-1/2`:`xl:top-8`}`,`svelte-xw1ck7`,i,{"is-waiting":z(J)})}),t(1,r,()=>ae,()=>({duration:C(200)})),O(e,n)},xe=e=>{O(e,ft())},Se=e=>{O(e,pt())},Ce=e=>{let t=P(()=>Y.selectedCoreFeature.id);var r=mt();n(r,23,()=>Y.visibleSelectedFeatures,e=>e.id,(e,n,r)=>{l(e,()=>z(t),()=>z(n),()=>z(r))}),M(r),O(e,r)};k(ye,e=>{Y.selectedCoreFeature?Y.selectedCoreFeature.features.length===0?e(xe,1):Y.visibleSelectedFeatures.length===0?e(Se,2):e(Ce,-1):e(be)}),M(X),M(j),ne(j,e=>E(se,e),()=>z(se)),M(a),g(t=>{e(u,`← All projects (${Y.dashboard.projects.length??``})`),e(b,z(i).name),e(S,`${z(i).coreFeatures.length??``} core / ${t??``} feat`),e(T,z(i).description),L(X,1,`space-y-3 ${Y.selectedCoreFeature?``:`xl:sticky xl:top-18 xl:flex xl:min-h-[calc(100vh-6rem)] xl:flex-col xl:self-start`}`,`svelte-xw1ck7`),e(he,Y.selectedCoreFeature?Y.selectedCoreFeature.name:`Pick a core feature`)},[()=>ve(z(i))]),s(`click`,c,()=>Y.deselectProject()),O(r,a)},Pt=r=>{var i=_t(),a=_(i),o=d(_(a),2),c=_(o);Ee(c);var l=d(c,2),u=_(l);M(l),M(o),M(a);var f=d(a,2);n(f,23,()=>Y.filteredProjects,e=>e.id,(n,r,i)=>{var a=gt(),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),we(d(f,2),{get tags(){return z(r).tags},onToggle:e=>Y.toggleTag(e),isActive:e=>Y.isActiveTag(e),onAdd:(e,t)=>Y.addProjectTag(z(r).id,{type:e,value:t}),onRemove:e=>Y.removeProjectTag(z(r).id,e),onRename:(e,t)=>Y.renameTag(e,t),get typeOptions(){return Y.allTagTypes},class:`relative z-20`}),M(u);var y=d(u,2),b=_(y);$(b,{label:`Maturity`,get value(){return z(r).maturityPercentage}}),$(d(b,2),{label:`Built`,get value(){return z(r).implementationPercentage}}),M(y),M(l),M(o),M(a),g(t=>{I(c,`aria-label`,`Open ${z(r).name}`),e(m,z(r).name),e(v,`${z(r).coreFeatures.length??``} core / ${t??``} feat`)},[()=>ve(z(r))]),s(`click`,c,()=>Y.selectProject(z(r).id)),t(1,a,()=>H,()=>({y:10,duration:C(300),delay:R(z(i)),easing:U})),O(n,a)}),M(f),M(i),g(()=>e(u,`${Y.filteredProjects.length??``}${Y.searchActive||Y.tagActive?` of ${Y.dashboard.projects.length}`:` total`}`)),O(r,i)};k(Ot,e=>{Y.loading?e(kt):Y.error?e(At,1):Y.dashboard.projects.length===0?e(jt,2):Y.searchActive&&!Y.selectedProject&&Y.filteredProjects.length===0?e(Mt,3):Y.selectedProject?e(Nt,4):e(Pt,-1)}),M(Dt),S(Dt,e=>ce?.(e)),M(Et);var Ft=d(Et,2),It=e=>{b(e)};k(Ft,e=>{Y.selectedProject&&e(It)}),O(r,Tt),w()}a([`click`,`pointerdown`,`pointermove`,`pointerup`,`keydown`,`change`]);function bt(e){R(`eir1o2`,e=>{m(()=>{o.title=`Builder Mode / Unspaghettit`})}),yt(e,{})}export{bt as component,ce as universal};
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +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`)+`
|
|
2
|
+
|
|
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};
|
|
Binary file
|
|
Binary file
|