unspaghettit 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/client/_app/immutable/assets/0.DSctqr5I.css +1 -0
- package/build/client/_app/immutable/assets/0.DSctqr5I.css.br +0 -0
- package/build/client/_app/immutable/assets/0.DSctqr5I.css.gz +0 -0
- package/build/client/_app/immutable/assets/BehaviorGraph.Bk0xQRZk.css +1 -0
- package/build/client/_app/immutable/assets/BehaviorGraph.Bk0xQRZk.css.br +0 -0
- package/build/client/_app/immutable/assets/BehaviorGraph.Bk0xQRZk.css.gz +0 -0
- package/build/client/_app/immutable/chunks/9nXQ5qrY2.js +1 -0
- package/build/client/_app/immutable/chunks/9nXQ5qrY2.js.br +0 -0
- package/build/client/_app/immutable/chunks/9nXQ5qrY2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B439_FLv.js +1 -0
- package/build/client/_app/immutable/chunks/B439_FLv.js.br +0 -0
- package/build/client/_app/immutable/chunks/B439_FLv.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BCEY79Dw.js +1 -0
- package/build/client/_app/immutable/chunks/BCEY79Dw.js.br +2 -0
- package/build/client/_app/immutable/chunks/BCEY79Dw.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DBJWcC6Y.js → BYIrIC5L.js} +1 -1
- package/build/client/_app/immutable/chunks/BYIrIC5L.js.br +0 -0
- package/build/client/_app/immutable/chunks/BYIrIC5L.js.gz +0 -0
- package/build/client/_app/immutable/chunks/B_9TWPrx2.js +1 -0
- package/build/client/_app/immutable/chunks/B_9TWPrx2.js.br +0 -0
- package/build/client/_app/immutable/chunks/B_9TWPrx2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/BvOhVtZg.js +1 -0
- package/build/client/_app/immutable/chunks/BvOhVtZg.js.br +1 -0
- package/build/client/_app/immutable/chunks/BvOhVtZg.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CY3em1ma2.js +1 -0
- package/build/client/_app/immutable/chunks/CY3em1ma2.js.br +0 -0
- package/build/client/_app/immutable/chunks/CY3em1ma2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/CgdRZPgI.js +1 -0
- package/build/client/_app/immutable/chunks/CgdRZPgI.js.br +0 -0
- package/build/client/_app/immutable/chunks/CgdRZPgI.js.gz +0 -0
- package/build/client/_app/immutable/chunks/D5speDV82.js +908 -0
- package/build/client/_app/immutable/chunks/D5speDV82.js.br +0 -0
- package/build/client/_app/immutable/chunks/D5speDV82.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DkxwAIfJ2.js +1 -0
- package/build/client/_app/immutable/chunks/DkxwAIfJ2.js.br +0 -0
- package/build/client/_app/immutable/chunks/DkxwAIfJ2.js.gz +0 -0
- package/build/client/_app/immutable/chunks/{DatGSObE.js → OJscNS3T.js} +1 -1
- package/build/client/_app/immutable/chunks/OJscNS3T.js.br +0 -0
- package/build/client/_app/immutable/chunks/OJscNS3T.js.gz +0 -0
- package/build/client/_app/immutable/chunks/U9p9CtKG2.js +2 -0
- package/build/client/_app/immutable/chunks/U9p9CtKG2.js.br +0 -0
- package/build/client/_app/immutable/chunks/U9p9CtKG2.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.Cd4S3giu.js +2 -0
- package/build/client/_app/immutable/entry/app.Cd4S3giu.js.br +0 -0
- package/build/client/_app/immutable/entry/app.Cd4S3giu.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.C3xXQVkq.js +1 -0
- package/build/client/_app/immutable/entry/start.C3xXQVkq.js.br +0 -0
- package/build/client/_app/immutable/entry/start.C3xXQVkq.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.dIOlQ-0y.js +4 -0
- package/build/client/_app/immutable/nodes/0.dIOlQ-0y.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.dIOlQ-0y.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{1.KYdA6ppX.js → 1.Dyte3Ggf.js} +1 -1
- package/build/client/_app/immutable/nodes/1.Dyte3Ggf.js.br +2 -0
- package/build/client/_app/immutable/nodes/1.Dyte3Ggf.js.gz +0 -0
- package/build/client/_app/immutable/nodes/10.ivxAosDg.js +2 -0
- package/build/client/_app/immutable/nodes/10.ivxAosDg.js.br +0 -0
- package/build/client/_app/immutable/nodes/10.ivxAosDg.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{9.CMW6a2Lg.js → 11.wvMfJKC2.js} +1 -1
- package/build/client/_app/immutable/nodes/11.wvMfJKC2.js.br +0 -0
- package/build/client/_app/immutable/nodes/11.wvMfJKC2.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{2.DBz20KgG.js → 2.CmPPom9Z.js} +1 -1
- package/build/client/_app/immutable/nodes/2.CmPPom9Z.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.CmPPom9Z.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.D-iCGCEx.js +1 -0
- package/build/client/_app/immutable/nodes/3.D-iCGCEx.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.D-iCGCEx.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{4.BvMzqBJj.js → 4.DbfAvO8Z.js} +1 -1
- package/build/client/_app/immutable/nodes/4.DbfAvO8Z.js.br +0 -0
- package/build/client/_app/immutable/nodes/4.DbfAvO8Z.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.CC5Q7lVw.js +42 -0
- package/build/client/_app/immutable/nodes/5.CC5Q7lVw.js.br +0 -0
- package/build/client/_app/immutable/nodes/5.CC5Q7lVw.js.gz +0 -0
- package/build/client/_app/immutable/nodes/6.CHIjlzpO.js +1 -0
- package/build/client/_app/immutable/nodes/6.CHIjlzpO.js.br +0 -0
- package/build/client/_app/immutable/nodes/6.CHIjlzpO.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{6.BOHISqs-.js → 7.Ejs18ZUc.js} +1 -1
- package/build/client/_app/immutable/nodes/7.Ejs18ZUc.js.br +0 -0
- package/build/client/_app/immutable/nodes/7.Ejs18ZUc.js.gz +0 -0
- package/build/client/_app/immutable/nodes/{7.CemgNJfw.js → 8.B-HweAc8.js} +1 -1
- package/build/client/_app/immutable/nodes/8.B-HweAc8.js.br +0 -0
- package/build/client/_app/immutable/nodes/8.B-HweAc8.js.gz +0 -0
- package/build/client/_app/immutable/nodes/9.CKPeM6tx.js +5 -0
- package/build/client/_app/immutable/nodes/9.CKPeM6tx.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.CKPeM6tx.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/client/lyriks_logo.svg +148 -0
- package/build/client/lyriks_logo.svg.br +0 -0
- package/build/client/lyriks_logo.svg.gz +0 -0
- package/build/server/chunks/{0-C_o0oz-N.js → 0-Co8kcANG.js} +4 -4
- package/build/server/chunks/{0-C_o0oz-N.js.map → 0-Co8kcANG.js.map} +1 -1
- package/build/server/chunks/1-BSUItTig.js +9 -0
- package/build/server/chunks/{1-DPpKAKXV.js.map → 1-BSUItTig.js.map} +1 -1
- package/build/server/chunks/10-BygvxrZp.js +9 -0
- package/build/server/chunks/10-BygvxrZp.js.map +1 -0
- package/build/server/chunks/11-DRx0tRx2.js +9 -0
- package/build/server/chunks/11-DRx0tRx2.js.map +1 -0
- package/build/server/chunks/{2-AlfFqtL1.js → 2-BQT3m1vc.js} +3 -3
- package/build/server/chunks/{2-AlfFqtL1.js.map → 2-BQT3m1vc.js.map} +1 -1
- package/build/server/chunks/{3-vbjUt_51.js → 3-DPZ9BquJ.js} +3 -3
- package/build/server/chunks/{3-vbjUt_51.js.map → 3-DPZ9BquJ.js.map} +1 -1
- package/build/server/chunks/{4-BNow4x6D.js → 4-DHo47YX6.js} +3 -3
- package/build/server/chunks/{4-BNow4x6D.js.map → 4-DHo47YX6.js.map} +1 -1
- package/build/server/chunks/5-Cp9evBAG.js +9 -0
- package/build/server/chunks/5-Cp9evBAG.js.map +1 -0
- package/build/server/chunks/6-DiBq3bOV.js +9 -0
- package/build/server/chunks/6-DiBq3bOV.js.map +1 -0
- package/build/server/chunks/{6-QQ7r8Rd5.js → 7-C4hmS0dG.js} +3 -3
- package/build/server/chunks/{6-QQ7r8Rd5.js.map → 7-C4hmS0dG.js.map} +1 -1
- package/build/server/chunks/{7-CbPLGaIG.js → 8-CFFuDzBC.js} +4 -4
- package/build/server/chunks/{7-CbPLGaIG.js.map → 8-CFFuDzBC.js.map} +1 -1
- package/build/server/chunks/9-nhhKZJrs.js +9 -0
- package/build/server/chunks/9-nhhKZJrs.js.map +1 -0
- package/build/server/chunks/BehaviorGraph-m5kYj5HH.js +757 -0
- package/build/server/chunks/BehaviorGraph-m5kYj5HH.js.map +1 -0
- package/build/server/chunks/{FeatureCard-BQOY6gJQ.js → FeatureCard-CfbXNYe8.js} +2 -2
- package/build/server/chunks/{FeatureCard-BQOY6gJQ.js.map → FeatureCard-CfbXNYe8.js.map} +1 -1
- package/build/server/chunks/{ProgressBar-CfhccQ83.js → ProgressBar-DDoQJ_C9.js} +2 -2
- package/build/server/chunks/ProgressBar-DDoQJ_C9.js.map +1 -0
- package/build/server/chunks/{ProjectsIndex-CoDrvRya.js → ProjectsIndex-DUVJ3hyL.js} +2 -2
- package/build/server/chunks/{ProjectsIndex-CoDrvRya.js.map → ProjectsIndex-DUVJ3hyL.js.map} +1 -1
- package/build/server/chunks/TransitionCatalog-B8zHs-2E.js +271 -0
- package/build/server/chunks/TransitionCatalog-B8zHs-2E.js.map +1 -0
- package/build/server/chunks/{_layout.svelte-BREws55o.js → _layout.svelte-CLTmk0xU.js} +66 -15
- package/build/server/chunks/_layout.svelte-CLTmk0xU.js.map +1 -0
- package/build/server/chunks/{_page.svelte-De508ek8.js → _page.svelte-B1nG3PKn.js} +4 -4
- package/build/server/chunks/{_page.svelte-De508ek8.js.map → _page.svelte-B1nG3PKn.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-Zf9H4KOP.js → _page.svelte-BW_nbAAH.js} +11 -315
- package/build/server/chunks/_page.svelte-BW_nbAAH.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BqSC-1vK.js → _page.svelte-Caq7J0jU.js} +91 -47
- package/build/server/chunks/_page.svelte-Caq7J0jU.js.map +1 -0
- package/build/server/chunks/{_page.svelte-B7hT3P8E.js → _page.svelte-Cham-dsM.js} +4 -4
- package/build/server/chunks/{_page.svelte-B7hT3P8E.js.map → _page.svelte-Cham-dsM.js.map} +1 -1
- package/build/server/chunks/_page.svelte-Dhwjwph_.js +41 -0
- package/build/server/chunks/_page.svelte-Dhwjwph_.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BKKCa9H5.js → _page.svelte-DlFVT40-.js} +3 -3
- package/build/server/chunks/{_page.svelte-BKKCa9H5.js.map → _page.svelte-DlFVT40-.js.map} +1 -1
- package/build/server/chunks/{_page.svelte-BtI2zZ_Z.js → _page.svelte-NVT2dzpG.js} +176 -327
- package/build/server/chunks/_page.svelte-NVT2dzpG.js.map +1 -0
- package/build/server/chunks/{_page.svelte-BKTveFAj.js → _page.svelte-Oj-W7G5s.js} +5 -5
- package/build/server/chunks/{_page.svelte-BKTveFAj.js.map → _page.svelte-Oj-W7G5s.js.map} +1 -1
- package/build/server/chunks/_page.svelte-Z_kK2lHY.js +68 -0
- package/build/server/chunks/_page.svelte-Z_kK2lHY.js.map +1 -0
- package/build/server/chunks/{builderModeStore.svelte-ihupr-3p.js → builderModeStore.svelte-BpRIU_zP.js} +217 -6
- package/build/server/chunks/builderModeStore.svelte-BpRIU_zP.js.map +1 -0
- package/build/server/chunks/client-DeX3TC3s.js +51 -0
- package/build/server/chunks/{client-DfpLcAZ9.js.map → client-DeX3TC3s.js.map} +1 -1
- package/build/server/chunks/{error.svelte-C35KOpru.js → error.svelte-Cdjeq3L2.js} +4 -4
- package/build/server/chunks/{error.svelte-C35KOpru.js.map → error.svelte-Cdjeq3L2.js.map} +1 -1
- package/build/server/chunks/featureStore.svelte-DIYgPBVm.js +161 -0
- package/build/server/chunks/featureStore.svelte-DIYgPBVm.js.map +1 -0
- package/build/server/chunks/{hooks.server-Rv301GTB.js → hooks.server-y3jdg_sB.js} +6 -2
- package/build/server/chunks/hooks.server-y3jdg_sB.js.map +1 -0
- package/build/server/chunks/{internal-BPKrFkK1.js → internal-KYK0WpL7.js} +4 -4
- package/build/server/chunks/{internal-BPKrFkK1.js.map → internal-KYK0WpL7.js.map} +1 -1
- package/build/server/chunks/projectFeaturesStore.svelte-2o-72_vr.js +313 -0
- package/build/server/chunks/projectFeaturesStore.svelte-2o-72_vr.js.map +1 -0
- package/build/server/chunks/{reconcile-Dv7jS3C8.js → reconcile-B5xqb6-s.js} +3 -272
- package/build/server/chunks/reconcile-B5xqb6-s.js.map +1 -0
- package/build/server/chunks/registry-DqAn_hVE.js +21 -0
- package/build/server/chunks/registry-DqAn_hVE.js.map +1 -0
- package/build/server/chunks/{state-CpLVNZq7.js → state-DBjl9lhV.js} +2 -2
- package/build/server/chunks/{state-CpLVNZq7.js.map → state-DBjl9lhV.js.map} +1 -1
- package/build/server/index.js +1 -1
- package/build/server/index.js.map +1 -1
- package/build/server/manifest.js +33 -17
- package/build/server/manifest.js.map +1 -1
- package/cli/commands/dashboard.ts +14 -0
- package/cli/commands/init.ts +26 -0
- package/cli/commands/theme.ts +62 -0
- package/cli/unspa.ts +38 -2
- package/cli/util/context-files.ts +5 -0
- package/cli/util/theme.ts +34 -0
- package/mcp-server/sync-notifier.ts +88 -35
- package/package.json +2 -1
- package/src/app.css +187 -0
- package/src/app.html +15 -1
- package/src/features/behavior-model/domain/services/BehaviorGraphModel.ts +531 -0
- package/src/features/behavior-model/presentation/adapters/VisBehaviorGraphRenderer.ts +492 -0
- package/src/features/behavior-model/presentation/components/BehaviorGraph.svelte +370 -0
- package/src/features/behavior-model/presentation/components/FeatureHeader.svelte +13 -5
- package/src/features/behavior-model/presentation/view-models/BehaviorGraphTheme.ts +43 -0
- package/src/features/builder-mode/domain/BuilderModeDashboard.ts +7 -1
- package/src/features/builder-mode/presentation/components/BuilderModeDashboard.svelte +78 -16
- package/src/features/builder-mode/presentation/components/BuilderTagChips.svelte +25 -0
- package/src/features/builder-mode/presentation/stores/builderModeStore.svelte.ts +247 -3
- package/src/features/projects/presentation/components/ProjectEditor.svelte +7 -0
- package/src/features/simulator/application/use-cases/RunScenarios.ts +15 -1
- package/src/hooks.server.ts +11 -1
- package/src/lib/theme/registry.ts +77 -0
- package/src/lib/theme/themeStore.svelte.ts +64 -0
- package/src/routes/+layout.svelte +184 -30
- package/src/routes/features/[id]/graph/+page.svelte +34 -0
- package/src/routes/projects/[id]/graph/+page.svelte +79 -0
- package/src/shared/presentation/components/ProgressBar.svelte +1 -1
- package/src/shared/presentation/toast/SyncToast.svelte +14 -3
- package/src/shared/presentation/toast/viewLinkResolver.ts +32 -0
- package/static/lyriks_logo.svg +148 -0
- package/build/client/_app/immutable/assets/0.DFMDYAU9.css +0 -1
- 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/chunks/BO66rBOa2.js +0 -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/DBJWcC6Y.js.br +0 -0
- package/build/client/_app/immutable/chunks/DBJWcC6Y.js.gz +0 -0
- package/build/client/_app/immutable/chunks/DHoA038D.js +0 -1
- package/build/client/_app/immutable/chunks/DHoA038D.js.br +0 -2
- package/build/client/_app/immutable/chunks/DHoA038D.js.gz +0 -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/DjWKKtqp.js +0 -1
- package/build/client/_app/immutable/chunks/DjWKKtqp.js.br +0 -1
- package/build/client/_app/immutable/chunks/DjWKKtqp.js.gz +0 -0
- package/build/client/_app/immutable/chunks/Dq0DUAz1.js +0 -1
- 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/iQu0D9Ux.js +0 -1
- 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/entry/app.CLgh6Mx_.js +0 -2
- 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 +0 -1
- 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 +0 -4
- 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.br +0 -2
- package/build/client/_app/immutable/nodes/1.KYdA6ppX.js.gz +0 -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 +0 -1
- 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.br +0 -0
- package/build/client/_app/immutable/nodes/4.BvMzqBJj.js.gz +0 -0
- package/build/client/_app/immutable/nodes/5.Dq6obSGG.js +0 -42
- 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.br +0 -0
- package/build/client/_app/immutable/nodes/6.BOHISqs-.js.gz +0 -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 +0 -5
- 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/9.CMW6a2Lg.js.br +0 -0
- package/build/client/_app/immutable/nodes/9.CMW6a2Lg.js.gz +0 -0
- package/build/server/chunks/1-DPpKAKXV.js +0 -9
- package/build/server/chunks/5-D7OCJpxD.js +0 -9
- package/build/server/chunks/5-D7OCJpxD.js.map +0 -1
- package/build/server/chunks/8-CVO-E-sf.js +0 -9
- package/build/server/chunks/8-CVO-E-sf.js.map +0 -1
- package/build/server/chunks/9-DxT1baO5.js +0 -9
- package/build/server/chunks/9-DxT1baO5.js.map +0 -1
- package/build/server/chunks/ProgressBar-CfhccQ83.js.map +0 -1
- package/build/server/chunks/_layout.svelte-BREws55o.js.map +0 -1
- package/build/server/chunks/_page.svelte-BqSC-1vK.js.map +0 -1
- package/build/server/chunks/_page.svelte-BtI2zZ_Z.js.map +0 -1
- package/build/server/chunks/_page.svelte-Zf9H4KOP.js.map +0 -1
- package/build/server/chunks/builderModeStore.svelte-ihupr-3p.js.map +0 -1
- package/build/server/chunks/client-DfpLcAZ9.js +0 -24
- package/build/server/chunks/hooks.server-Rv301GTB.js.map +0 -1
- package/build/server/chunks/reconcile-Dv7jS3C8.js.map +0 -1
- /package/build/client/_app/immutable/assets/{9.nv0I59TU.css → 11.nv0I59TU.css} +0 -0
- /package/build/client/_app/immutable/assets/{9.nv0I59TU.css.br → 11.nv0I59TU.css.br} +0 -0
- /package/build/client/_app/immutable/assets/{9.nv0I59TU.css.gz → 11.nv0I59TU.css.gz} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BehaviorGraph-m5kYj5HH.js","sources":["../../../.svelte-kit/adapter-node/chunks/BehaviorGraph.js"],"sourcesContent":["import { G as attr, l as derived, n as onDestroy, o as attr_class, q as escape_html, s as attr_style, u as ensure_array_like } from \"./index-server.js\";\nimport { F as flattenLeafConditions, L as isParamLeft } from \"./TagPalette.js\";\n//#region src/features/behavior-model/domain/services/BehaviorGraphModel.ts\nvar ALL_BEHAVIOR_GRAPH_EDGE_KINDS = [\n\t\"contains\",\n\t\"reads\",\n\t\"writes\",\n\t\"emits\",\n\t\"transitions\",\n\t\"asserts\",\n\t\"uses\",\n\t\"handles\"\n];\nvar ALL_BEHAVIOR_GRAPH_NODE_TYPES = [\n\t\"feature\",\n\t\"surface\",\n\t\"action\",\n\t\"state\",\n\t\"event\",\n\t\"parameter\",\n\t\"rule\",\n\t\"effect\",\n\t\"invariant\",\n\t\"scenario\",\n\t\"persona\",\n\t\"resource\",\n\t\"entity\",\n\t\"valueSet\"\n];\nvar effectLabel = (effect) => {\n\tswitch (effect.type) {\n\t\tcase \"set_state\": return `set ${effect.path}`;\n\t\tcase \"show_message\": return effect.tone ? `${effect.tone} message` : \"message\";\n\t\tcase \"emit_event\": return `emit ${effect.event}`;\n\t\tcase \"block_action\": return \"block\";\n\t\tcase \"allow_action\": return \"allow\";\n\t\tcase \"transition_surface\": return \"transition\";\n\t}\n};\nvar leafStatePaths = (condition) => {\n\tconst paths = /* @__PURE__ */ new Set();\n\tfor (const leaf of flattenLeafConditions(condition)) if (!isParamLeft(leaf.left)) paths.add(String(leaf.left));\n\treturn [...paths];\n};\nvar buildBehaviorGraph = (sourceFeatures, sourceProject) => {\n\tconst nodes = /* @__PURE__ */ new Map();\n\tconst edges = /* @__PURE__ */ new Map();\n\tconst addNode = (node) => {\n\t\tif (!nodes.has(node.id)) nodes.set(node.id, node);\n\t};\n\tconst addEdge = (edge) => {\n\t\tif (!nodes.has(edge.from) || !nodes.has(edge.to)) return;\n\t\tconst id = `${edge.from}->${edge.to}:${edge.kind}:${edge.label ?? \"\"}`;\n\t\tif (!edges.has(id)) edges.set(id, {\n\t\t\t...edge,\n\t\t\tid\n\t\t});\n\t};\n\tconst ensureState = (feature, path, detail) => {\n\t\taddNode({\n\t\t\tid: `feature:${feature.id}:state:${path}`,\n\t\t\ttype: \"state\",\n\t\t\tlabel: path,\n\t\t\tdetail,\n\t\t\tlayer: 3\n\t\t});\n\t};\n\tconst surfaceIdFor = (feature, id) => `feature:${feature.id}:surface:${id}`;\n\tconst actionIdFor = (feature, id) => `feature:${feature.id}:action:${id}`;\n\tconst stateIdFor = (feature, path) => `feature:${feature.id}:state:${path}`;\n\tconst valueSetIdFor = (feature, id) => `feature:${feature.id}:valueSet:${id}`;\n\tconst addEffectLinks = (feature, ownerId, effect, relation) => {\n\t\tconst effectId = `feature:${feature.id}:effect:${effect.id}`;\n\t\taddNode({\n\t\t\tid: effectId,\n\t\t\ttype: \"effect\",\n\t\t\tlabel: effectLabel(effect),\n\t\t\tdetail: effect.description ?? effect.type,\n\t\t\tlayer: 5\n\t\t});\n\t\taddEdge({\n\t\t\tfrom: ownerId,\n\t\t\tto: effectId,\n\t\t\tkind: relation\n\t\t});\n\t\tif (effect.type === \"set_state\") {\n\t\t\tensureState(feature, String(effect.path));\n\t\t\taddEdge({\n\t\t\t\tfrom: effectId,\n\t\t\t\tto: stateIdFor(feature, effect.path),\n\t\t\t\tkind: \"writes\"\n\t\t\t});\n\t\t} else if (effect.type === \"emit_event\") {\n\t\t\tconst eventId = `event:${effect.event}`;\n\t\t\taddNode({\n\t\t\t\tid: eventId,\n\t\t\t\ttype: \"event\",\n\t\t\t\tlabel: String(effect.event),\n\t\t\t\tlayer: 3\n\t\t\t});\n\t\t\taddEdge({\n\t\t\t\tfrom: effectId,\n\t\t\t\tto: eventId,\n\t\t\t\tkind: \"emits\"\n\t\t\t});\n\t\t} else if (effect.type === \"transition_surface\") addEdge({\n\t\t\tfrom: effectId,\n\t\t\tto: surfaceIdFor(feature, effect.target),\n\t\t\tkind: \"transitions\"\n\t\t});\n\t};\n\tconst projectId = sourceProject ? `project:${sourceProject.id}` : null;\n\tif (sourceProject && projectId) addNode({\n\t\tid: projectId,\n\t\ttype: \"feature\",\n\t\tlabel: sourceProject.name,\n\t\tdetail: sourceProject.description ?? \"Project\",\n\t\tlayer: 0\n\t});\n\tfor (const feature of sourceFeatures) {\n\t\tconst featureId = `feature:${feature.id}`;\n\t\taddNode({\n\t\t\tid: featureId,\n\t\t\ttype: \"feature\",\n\t\t\tlabel: feature.name,\n\t\t\tdetail: feature.description,\n\t\t\tlayer: sourceProject ? 1 : 0,\n\t\t\thref: `/features/${feature.id}`\n\t\t});\n\t\tif (projectId) addEdge({\n\t\t\tfrom: projectId,\n\t\t\tto: featureId,\n\t\t\tkind: \"contains\"\n\t\t});\n\t\tfor (const persona of feature.personas) {\n\t\t\tconst id = `feature:${feature.id}:persona:${persona.id}`;\n\t\t\taddNode({\n\t\t\t\tid,\n\t\t\t\ttype: \"persona\",\n\t\t\t\tlabel: persona.name,\n\t\t\t\tdetail: persona.description,\n\t\t\t\tlayer: sourceProject ? 2 : 1\n\t\t\t});\n\t\t\taddEdge({\n\t\t\t\tfrom: featureId,\n\t\t\t\tto: id,\n\t\t\t\tkind: \"contains\"\n\t\t\t});\n\t\t}\n\t\tfor (const resource of feature.resources) {\n\t\t\tconst id = `resource:${resource.id}`;\n\t\t\taddNode({\n\t\t\t\tid,\n\t\t\t\ttype: \"resource\",\n\t\t\t\tlabel: resource.name,\n\t\t\t\tdetail: resource.description ?? resource.kind,\n\t\t\t\tlayer: sourceProject ? 2 : 1\n\t\t\t});\n\t\t\taddEdge({\n\t\t\t\tfrom: featureId,\n\t\t\t\tto: id,\n\t\t\t\tkind: \"contains\"\n\t\t\t});\n\t\t}\n\t\tfor (const entity of feature.entities) {\n\t\t\tconst id = `entity:${entity.id}`;\n\t\t\taddNode({\n\t\t\t\tid,\n\t\t\t\ttype: \"entity\",\n\t\t\t\tlabel: entity.namespace,\n\t\t\t\tdetail: entity.description,\n\t\t\t\tlayer: sourceProject ? 2 : 1\n\t\t\t});\n\t\t\taddEdge({\n\t\t\t\tfrom: featureId,\n\t\t\t\tto: id,\n\t\t\t\tkind: \"contains\"\n\t\t\t});\n\t\t\tif (entity.resourceId) addEdge({\n\t\t\t\tfrom: id,\n\t\t\t\tto: `resource:${entity.resourceId}`,\n\t\t\t\tkind: \"uses\"\n\t\t\t});\n\t\t}\n\t\tfor (const valueSet of feature.valueSets ?? []) {\n\t\t\tconst id = valueSetIdFor(feature, valueSet.id);\n\t\t\taddNode({\n\t\t\t\tid,\n\t\t\t\ttype: \"valueSet\",\n\t\t\t\tlabel: valueSet.name,\n\t\t\t\tdetail: `${valueSet.values.length} values`,\n\t\t\t\tlayer: sourceProject ? 2 : 1\n\t\t\t});\n\t\t\taddEdge({\n\t\t\t\tfrom: featureId,\n\t\t\t\tto: id,\n\t\t\t\tkind: \"contains\"\n\t\t\t});\n\t\t}\n\t\tfor (const event of feature.events ?? []) {\n\t\t\tconst id = `event:${event.name}`;\n\t\t\taddNode({\n\t\t\t\tid,\n\t\t\t\ttype: \"event\",\n\t\t\t\tlabel: String(event.name),\n\t\t\t\tdetail: event.description,\n\t\t\t\tlayer: 3\n\t\t\t});\n\t\t\taddEdge({\n\t\t\t\tfrom: featureId,\n\t\t\t\tto: id,\n\t\t\t\tkind: \"contains\"\n\t\t\t});\n\t\t}\n\t\tfor (const invariant of feature.featureInvariants ?? []) {\n\t\t\tconst id = `feature:${feature.id}:invariant:${invariant.id}`;\n\t\t\taddNode({\n\t\t\t\tid,\n\t\t\t\ttype: \"invariant\",\n\t\t\t\tlabel: invariant.name,\n\t\t\t\tdetail: invariant.description ?? invariant.message,\n\t\t\t\tlayer: 6\n\t\t\t});\n\t\t\taddEdge({\n\t\t\t\tfrom: featureId,\n\t\t\t\tto: id,\n\t\t\t\tkind: \"contains\"\n\t\t\t});\n\t\t\tfor (const path of leafStatePaths(invariant.condition)) {\n\t\t\t\tensureState(feature, path);\n\t\t\t\taddEdge({\n\t\t\t\t\tfrom: id,\n\t\t\t\t\tto: stateIdFor(feature, path),\n\t\t\t\t\tkind: \"reads\"\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t\tfor (const surface of feature.surfaces) {\n\t\t\tconst surfaceId = surfaceIdFor(feature, surface.id);\n\t\t\taddNode({\n\t\t\t\tid: surfaceId,\n\t\t\t\ttype: \"surface\",\n\t\t\t\tlabel: surface.name,\n\t\t\t\tdetail: surface.description ?? surface.type,\n\t\t\t\tlayer: sourceProject ? 2 : 1,\n\t\t\t\thref: `/features/${feature.id}?surface=${surface.id}`\n\t\t\t});\n\t\t\taddEdge({\n\t\t\t\tfrom: featureId,\n\t\t\t\tto: surfaceId,\n\t\t\t\tkind: \"contains\"\n\t\t\t});\n\t\t\tif (surface.parentSurfaceId) addEdge({\n\t\t\t\tfrom: surfaceIdFor(feature, surface.parentSurfaceId),\n\t\t\t\tto: surfaceId,\n\t\t\t\tkind: \"contains\"\n\t\t\t});\n\t\t\tfor (const def of surface.stateDefinitions) {\n\t\t\t\tensureState(feature, String(def.path), def.description ?? def.type);\n\t\t\t\taddEdge({\n\t\t\t\t\tfrom: surfaceId,\n\t\t\t\t\tto: stateIdFor(feature, def.path),\n\t\t\t\t\tkind: \"contains\"\n\t\t\t\t});\n\t\t\t\tif (def.valueSetId) addEdge({\n\t\t\t\t\tfrom: stateIdFor(feature, def.path),\n\t\t\t\t\tto: valueSetIdFor(feature, def.valueSetId),\n\t\t\t\t\tkind: \"uses\"\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (const transition of surface.transitions) {\n\t\t\t\tconst id = `feature:${feature.id}:transition:${transition.id}`;\n\t\t\t\taddNode({\n\t\t\t\t\tid,\n\t\t\t\t\ttype: \"effect\",\n\t\t\t\t\tlabel: transition.label ?? \"transition\",\n\t\t\t\t\tdetail: transition.description,\n\t\t\t\t\tlayer: 6\n\t\t\t\t});\n\t\t\t\taddEdge({\n\t\t\t\t\tfrom: surfaceId,\n\t\t\t\t\tto: id,\n\t\t\t\t\tkind: \"contains\"\n\t\t\t\t});\n\t\t\t\taddEdge({\n\t\t\t\t\tfrom: id,\n\t\t\t\t\tto: surfaceIdFor(feature, transition.target),\n\t\t\t\t\tkind: \"transitions\"\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (const rule of surface.rules) {\n\t\t\t\tconst id = `feature:${feature.id}:rule:${rule.id}`;\n\t\t\t\taddNode({\n\t\t\t\t\tid,\n\t\t\t\t\ttype: \"rule\",\n\t\t\t\t\tlabel: rule.category,\n\t\t\t\t\tdetail: rule.description,\n\t\t\t\t\tlayer: 6\n\t\t\t\t});\n\t\t\t\taddEdge({\n\t\t\t\t\tfrom: surfaceId,\n\t\t\t\t\tto: id,\n\t\t\t\t\tkind: \"contains\"\n\t\t\t\t});\n\t\t\t\tfor (const path of leafStatePaths(rule.condition)) {\n\t\t\t\t\tensureState(feature, path);\n\t\t\t\t\taddEdge({\n\t\t\t\t\t\tfrom: id,\n\t\t\t\t\t\tto: stateIdFor(feature, path),\n\t\t\t\t\t\tkind: \"reads\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\taddEffectLinks(feature, id, rule.effect, \"writes\");\n\t\t\t}\n\t\t\tfor (const invariant of surface.invariants) {\n\t\t\t\tconst id = `feature:${feature.id}:invariant:${invariant.id}`;\n\t\t\t\taddNode({\n\t\t\t\t\tid,\n\t\t\t\t\ttype: \"invariant\",\n\t\t\t\t\tlabel: invariant.name,\n\t\t\t\t\tdetail: invariant.description ?? invariant.message,\n\t\t\t\t\tlayer: 6\n\t\t\t\t});\n\t\t\t\taddEdge({\n\t\t\t\t\tfrom: surfaceId,\n\t\t\t\t\tto: id,\n\t\t\t\t\tkind: \"contains\"\n\t\t\t\t});\n\t\t\t\tfor (const path of leafStatePaths(invariant.condition)) {\n\t\t\t\t\tensureState(feature, path);\n\t\t\t\t\taddEdge({\n\t\t\t\t\t\tfrom: id,\n\t\t\t\t\t\tto: stateIdFor(feature, path),\n\t\t\t\t\t\tkind: \"reads\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tfor (const action of surface.actions) {\n\t\t\t\tconst actionId = actionIdFor(feature, action.id);\n\t\t\t\taddNode({\n\t\t\t\t\tid: actionId,\n\t\t\t\t\ttype: \"action\",\n\t\t\t\t\tlabel: action.name,\n\t\t\t\t\tdetail: action.intent,\n\t\t\t\t\tlayer: sourceProject ? 3 : 2,\n\t\t\t\t\thref: `/features/${feature.id}?surface=${surface.id}&panel=actions`\n\t\t\t\t});\n\t\t\t\taddEdge({\n\t\t\t\t\tfrom: surfaceId,\n\t\t\t\t\tto: actionId,\n\t\t\t\t\tkind: \"contains\"\n\t\t\t\t});\n\t\t\t\tif (action.triggeredByEvent) {\n\t\t\t\t\tconst eventId = `event:${action.triggeredByEvent}`;\n\t\t\t\t\taddNode({\n\t\t\t\t\t\tid: eventId,\n\t\t\t\t\t\ttype: \"event\",\n\t\t\t\t\t\tlabel: String(action.triggeredByEvent),\n\t\t\t\t\t\tlayer: 3\n\t\t\t\t\t});\n\t\t\t\t\taddEdge({\n\t\t\t\t\t\tfrom: eventId,\n\t\t\t\t\t\tto: actionId,\n\t\t\t\t\t\tkind: \"handles\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tfor (const path of action.requiredStates) {\n\t\t\t\t\tensureState(feature, String(path));\n\t\t\t\t\taddEdge({\n\t\t\t\t\t\tfrom: stateIdFor(feature, path),\n\t\t\t\t\t\tto: actionId,\n\t\t\t\t\t\tkind: \"reads\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tfor (const parameter of action.parameters) {\n\t\t\t\t\tconst id = `feature:${feature.id}:parameter:${parameter.id}`;\n\t\t\t\t\taddNode({\n\t\t\t\t\t\tid,\n\t\t\t\t\t\ttype: \"parameter\",\n\t\t\t\t\t\tlabel: parameter.name,\n\t\t\t\t\t\tdetail: parameter.description ?? parameter.type,\n\t\t\t\t\t\tlayer: sourceProject ? 5 : 4\n\t\t\t\t\t});\n\t\t\t\t\taddEdge({\n\t\t\t\t\t\tfrom: actionId,\n\t\t\t\t\t\tto: id,\n\t\t\t\t\t\tkind: \"contains\"\n\t\t\t\t\t});\n\t\t\t\t\tif (parameter.bindToStatePath) {\n\t\t\t\t\t\tensureState(feature, String(parameter.bindToStatePath));\n\t\t\t\t\t\taddEdge({\n\t\t\t\t\t\t\tfrom: id,\n\t\t\t\t\t\t\tto: stateIdFor(feature, parameter.bindToStatePath),\n\t\t\t\t\t\t\tkind: \"writes\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (parameter.resourceId) addEdge({\n\t\t\t\t\t\tfrom: id,\n\t\t\t\t\t\tto: `resource:${parameter.resourceId}`,\n\t\t\t\t\t\tkind: \"uses\"\n\t\t\t\t\t});\n\t\t\t\t\tif (parameter.valueSetId) addEdge({\n\t\t\t\t\t\tfrom: id,\n\t\t\t\t\t\tto: valueSetIdFor(feature, parameter.valueSetId),\n\t\t\t\t\t\tkind: \"uses\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tfor (const rule of action.rules) {\n\t\t\t\t\tconst id = `feature:${feature.id}:rule:${rule.id}`;\n\t\t\t\t\taddNode({\n\t\t\t\t\t\tid,\n\t\t\t\t\t\ttype: \"rule\",\n\t\t\t\t\t\tlabel: rule.category,\n\t\t\t\t\t\tdetail: rule.description,\n\t\t\t\t\t\tlayer: 6\n\t\t\t\t\t});\n\t\t\t\t\taddEdge({\n\t\t\t\t\t\tfrom: actionId,\n\t\t\t\t\t\tto: id,\n\t\t\t\t\t\tkind: \"contains\"\n\t\t\t\t\t});\n\t\t\t\t\tfor (const path of leafStatePaths(rule.condition)) {\n\t\t\t\t\t\tensureState(feature, path);\n\t\t\t\t\t\taddEdge({\n\t\t\t\t\t\t\tfrom: id,\n\t\t\t\t\t\t\tto: stateIdFor(feature, path),\n\t\t\t\t\t\t\tkind: \"reads\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\taddEffectLinks(feature, id, rule.effect, \"writes\");\n\t\t\t\t}\n\t\t\t\tfor (const invariant of action.invariants) {\n\t\t\t\t\tconst id = `feature:${feature.id}:invariant:${invariant.id}`;\n\t\t\t\t\taddNode({\n\t\t\t\t\t\tid,\n\t\t\t\t\t\ttype: \"invariant\",\n\t\t\t\t\t\tlabel: invariant.name,\n\t\t\t\t\t\tdetail: invariant.description ?? invariant.message,\n\t\t\t\t\t\tlayer: 6\n\t\t\t\t\t});\n\t\t\t\t\taddEdge({\n\t\t\t\t\t\tfrom: actionId,\n\t\t\t\t\t\tto: id,\n\t\t\t\t\t\tkind: \"contains\"\n\t\t\t\t\t});\n\t\t\t\t\tfor (const path of leafStatePaths(invariant.condition)) {\n\t\t\t\t\t\tensureState(feature, path);\n\t\t\t\t\t\taddEdge({\n\t\t\t\t\t\t\tfrom: id,\n\t\t\t\t\t\t\tto: stateIdFor(feature, path),\n\t\t\t\t\t\t\tkind: \"reads\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const effect of action.effects) addEffectLinks(feature, actionId, effect, \"contains\");\n\t\t\t\tfor (const effect of action.onBlockedEffects ?? []) addEffectLinks(feature, actionId, effect, \"contains\");\n\t\t\t\tfor (const event of action.emittedEvents) {\n\t\t\t\t\tconst eventId = `event:${event}`;\n\t\t\t\t\taddNode({\n\t\t\t\t\t\tid: eventId,\n\t\t\t\t\t\ttype: \"event\",\n\t\t\t\t\t\tlabel: String(event),\n\t\t\t\t\t\tlayer: 3\n\t\t\t\t\t});\n\t\t\t\t\taddEdge({\n\t\t\t\t\t\tfrom: actionId,\n\t\t\t\t\t\tto: eventId,\n\t\t\t\t\t\tkind: \"emits\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tfor (const transition of action.transitions) {\n\t\t\t\t\tconst id = `feature:${feature.id}:transition:${transition.id}`;\n\t\t\t\t\taddNode({\n\t\t\t\t\t\tid,\n\t\t\t\t\t\ttype: \"effect\",\n\t\t\t\t\t\tlabel: transition.label ?? \"transition\",\n\t\t\t\t\t\tdetail: transition.description,\n\t\t\t\t\t\tlayer: 6\n\t\t\t\t\t});\n\t\t\t\t\taddEdge({\n\t\t\t\t\t\tfrom: actionId,\n\t\t\t\t\t\tto: id,\n\t\t\t\t\t\tkind: \"contains\"\n\t\t\t\t\t});\n\t\t\t\t\taddEdge({\n\t\t\t\t\t\tfrom: id,\n\t\t\t\t\t\tto: surfaceIdFor(feature, transition.target),\n\t\t\t\t\t\tkind: \"transitions\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tfor (const scenario of action.scenarios ?? []) {\n\t\t\t\t\tconst id = `feature:${feature.id}:scenario:${scenario.id}`;\n\t\t\t\t\taddNode({\n\t\t\t\t\t\tid,\n\t\t\t\t\t\ttype: \"scenario\",\n\t\t\t\t\t\tlabel: scenario.name,\n\t\t\t\t\t\tdetail: scenario.description ?? scenario.expectedStatus,\n\t\t\t\t\t\tlayer: 6\n\t\t\t\t\t});\n\t\t\t\t\taddEdge({\n\t\t\t\t\t\tfrom: actionId,\n\t\t\t\t\t\tto: id,\n\t\t\t\t\t\tkind: \"asserts\"\n\t\t\t\t\t});\n\t\t\t\t\tif (scenario.personaId) addEdge({\n\t\t\t\t\t\tfrom: id,\n\t\t\t\t\t\tto: `feature:${feature.id}:persona:${scenario.personaId}`,\n\t\t\t\t\t\tkind: \"uses\"\n\t\t\t\t\t});\n\t\t\t\t\tfor (const override of scenario.stateOverrides) {\n\t\t\t\t\t\tensureState(feature, String(override.path));\n\t\t\t\t\t\taddEdge({\n\t\t\t\t\t\t\tfrom: id,\n\t\t\t\t\t\t\tto: stateIdFor(feature, override.path),\n\t\t\t\t\t\t\tkind: \"writes\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tfor (const assertion of scenario.expectedAssertions ?? []) {\n\t\t\t\t\t\tensureState(feature, String(assertion.path));\n\t\t\t\t\t\taddEdge({\n\t\t\t\t\t\t\tfrom: id,\n\t\t\t\t\t\t\tto: stateIdFor(feature, assertion.path),\n\t\t\t\t\t\t\tkind: \"asserts\"\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tif (scenario.expectedTransition) addEdge({\n\t\t\t\t\t\tfrom: id,\n\t\t\t\t\t\tto: surfaceIdFor(feature, scenario.expectedTransition),\n\t\t\t\t\t\tkind: \"transitions\"\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn {\n\t\tnodes: [...nodes.values()],\n\t\tedges: [...edges.values()]\n\t};\n};\nvar deriveBehaviorGraphView = (graph) => {\n\tconst degree = /* @__PURE__ */ new Map();\n\tfor (const node of graph.nodes) degree.set(node.id, 0);\n\tfor (const edge of graph.edges) {\n\t\tdegree.set(edge.from, (degree.get(edge.from) ?? 0) + 1);\n\t\tdegree.set(edge.to, (degree.get(edge.to) ?? 0) + 1);\n\t}\n\tconst nodes = graph.nodes.map((node) => ({\n\t\t...node,\n\t\tdegree: degree.get(node.id) ?? 0\n\t}));\n\treturn {\n\t\tnodes,\n\t\tedges: graph.edges,\n\t\tnodeById: new Map(nodes.map((node) => [node.id, node]))\n\t};\n};\nvar filterBehaviorGraphView = (graph, filter) => {\n\tconst query = filter.search.trim().toLowerCase();\n\tconst matching = /* @__PURE__ */ new Set();\n\tif (query) {\n\t\tfor (const node of graph.nodes) if (`${node.label} ${node.type} ${node.detail ?? \"\"}`.toLowerCase().includes(query)) matching.add(node.id);\n\t\tfor (const edge of graph.edges) if (matching.has(edge.from) || matching.has(edge.to)) {\n\t\t\tmatching.add(edge.from);\n\t\t\tmatching.add(edge.to);\n\t\t}\n\t}\n\tconst nodeAllowed = (id) => !query || matching.has(id);\n\tconst edges = graph.edges.filter((edge) => filter.enabledKinds[edge.kind] && nodeAllowed(edge.from) && nodeAllowed(edge.to));\n\tconst connected = /* @__PURE__ */ new Set();\n\tfor (const edge of edges) {\n\t\tconnected.add(edge.from);\n\t\tconnected.add(edge.to);\n\t}\n\tconst nodes = graph.nodes.filter((node) => nodeAllowed(node.id) && (!query || connected.has(node.id) || matching.has(node.id)));\n\treturn {\n\t\tnodes,\n\t\tedges,\n\t\tnodeById: new Map(nodes.map((node) => [node.id, node]))\n\t};\n};\n//#endregion\n//#region src/features/behavior-model/presentation/view-models/BehaviorGraphTheme.ts\nvar behaviorGraphNodeTheme = {\n\tfeature: {\n\t\tlabel: \"Feature\",\n\t\tfill: \"#0f172a\",\n\t\tstroke: \"#020617\"\n\t},\n\tsurface: {\n\t\tlabel: \"Surface\",\n\t\tfill: \"#0e7490\",\n\t\tstroke: \"#155e75\"\n\t},\n\taction: {\n\t\tlabel: \"Action\",\n\t\tfill: \"#2563eb\",\n\t\tstroke: \"#1d4ed8\"\n\t},\n\tstate: {\n\t\tlabel: \"State\",\n\t\tfill: \"#7c3aed\",\n\t\tstroke: \"#6d28d9\"\n\t},\n\tevent: {\n\t\tlabel: \"Event\",\n\t\tfill: \"#db2777\",\n\t\tstroke: \"#be185d\"\n\t},\n\tparameter: {\n\t\tlabel: \"Parameter\",\n\t\tfill: \"#0891b2\",\n\t\tstroke: \"#0e7490\"\n\t},\n\trule: {\n\t\tlabel: \"Rule\",\n\t\tfill: \"#ea580c\",\n\t\tstroke: \"#c2410c\"\n\t},\n\teffect: {\n\t\tlabel: \"Effect\",\n\t\tfill: \"#16a34a\",\n\t\tstroke: \"#15803d\"\n\t},\n\tinvariant: {\n\t\tlabel: \"Invariant\",\n\t\tfill: \"#ca8a04\",\n\t\tstroke: \"#a16207\"\n\t},\n\tscenario: {\n\t\tlabel: \"Scenario\",\n\t\tfill: \"#475569\",\n\t\tstroke: \"#334155\"\n\t},\n\tpersona: {\n\t\tlabel: \"Persona\",\n\t\tfill: \"#0f766e\",\n\t\tstroke: \"#115e59\"\n\t},\n\tresource: {\n\t\tlabel: \"Resource\",\n\t\tfill: \"#4f46e5\",\n\t\tstroke: \"#4338ca\"\n\t},\n\tentity: {\n\t\tlabel: \"Entity\",\n\t\tfill: \"#9333ea\",\n\t\tstroke: \"#7e22ce\"\n\t},\n\tvalueSet: {\n\t\tlabel: \"Value set\",\n\t\tfill: \"#64748b\",\n\t\tstroke: \"#475569\"\n\t}\n};\nvar behaviorGraphEdgeTheme = {\n\tcontains: {\n\t\tlabel: \"Contains\",\n\t\tcolor: \"#94a3b8\"\n\t},\n\treads: {\n\t\tlabel: \"Reads\",\n\t\tcolor: \"#7c3aed\"\n\t},\n\twrites: {\n\t\tlabel: \"Writes\",\n\t\tcolor: \"#16a34a\"\n\t},\n\temits: {\n\t\tlabel: \"Emits\",\n\t\tcolor: \"#db2777\"\n\t},\n\ttransitions: {\n\t\tlabel: \"Transitions\",\n\t\tcolor: \"#0891b2\"\n\t},\n\tasserts: {\n\t\tlabel: \"Asserts\",\n\t\tcolor: \"#ca8a04\"\n\t},\n\tuses: {\n\t\tlabel: \"Uses\",\n\t\tcolor: \"#475569\"\n\t},\n\thandles: {\n\t\tlabel: \"Handles\",\n\t\tcolor: \"#2563eb\"\n\t}\n};\n//#endregion\n//#region src/features/behavior-model/presentation/components/BehaviorGraph.svelte\nfunction BehaviorGraph($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { feature, features, project } = $$props;\n\t\tlet search = \"\";\n\t\tlet stabilizationProgress = 0;\n\t\tlet renderer = null;\n\t\tlet enabledKinds = {\n\t\t\tcontains: true,\n\t\t\treads: true,\n\t\t\twrites: true,\n\t\t\temits: true,\n\t\t\ttransitions: true,\n\t\t\tasserts: true,\n\t\t\tuses: true,\n\t\t\thandles: true\n\t\t};\n\t\tconst sourceFeatures = derived(() => features ?? (feature ? [feature] : []));\n\t\tconst graphTitle = derived(() => project?.name ?? feature?.name ?? \"Behavior graph\");\n\t\tconst graphSubtitle = derived(() => project ? `The whole project behavior map across ${sourceFeatures().length} feature${sourceFeatures().length === 1 ? \"\" : \"s\"} from the shared Unspa hub.` : \"A connected map of the executable behavior model from the shared Unspa hub.\");\n\t\tconst backHref = derived(() => project ? `/projects/${project.id}` : feature ? `/features/${feature.id}` : \"/projects\");\n\t\tconst backLabel = derived(() => project ? \"Back to project\" : \"Back to editor\");\n\t\tconst rawGraph = derived(() => buildBehaviorGraph(sourceFeatures(), project));\n\t\tconst graph = derived(() => deriveBehaviorGraphView(rawGraph()));\n\t\tderived(() => filterBehaviorGraphView(graph(), {\n\t\t\tsearch,\n\t\t\tenabledKinds\n\t\t}));\n\t\tconst selectedNode = derived(() => null);\n\t\tconst selectedEdge = derived(() => null);\n\t\tconst selectedEdgeFrom = derived(() => selectedEdge() ? graph().nodeById.get(selectedEdge().from) ?? null : null);\n\t\tconst selectedEdgeTo = derived(() => selectedEdge() ? graph().nodeById.get(selectedEdge().to) ?? null : null);\n\t\tconst centralNodes = derived(() => [...graph().nodes].sort((a, b) => b.degree - a.degree).slice(0, 6));\n\t\tconst countsByType = derived(() => {\n\t\t\tconst counts = /* @__PURE__ */ new Map();\n\t\t\tfor (const node of graph().nodes) counts.set(node.type, (counts.get(node.type) ?? 0) + 1);\n\t\t\treturn counts;\n\t\t});\n\t\tonDestroy(() => {\n\t\t\trenderer?.destroy();\n\t\t\trenderer = null;\n\t\t});\n\t\t$$renderer.push(`<section class=\"space-y-4\"><div class=\"overflow-hidden rounded-lg border border-slate-200 bg-white shadow-sm shadow-slate-950/5\"><div class=\"border-b border-slate-200 bg-slate-950 px-4 py-4 text-white\"><div class=\"flex flex-wrap items-start justify-between gap-4\"><div class=\"min-w-0\"><p class=\"text-xs font-semibold uppercase tracking-wide text-cyan-200\">Behavior Graph</p> <h2 class=\"mt-1 truncate text-2xl font-semibold\">${escape_html(graphTitle())}</h2> <p class=\"mt-1 max-w-3xl text-sm leading-6 text-slate-300\">${escape_html(graphSubtitle())}</p></div> <a${attr(\"href\", backHref())} class=\"rounded-md border border-white/20 px-3 py-2 text-sm font-medium text-white hover:bg-white/10\">${escape_html(backLabel())}</a></div></div> <div class=\"grid gap-0 lg:grid-cols-[minmax(0,1fr)_320px]\"><div class=\"min-w-0 border-b border-slate-200 lg:border-b-0 lg:border-r\"><div class=\"flex flex-wrap items-center gap-3 border-b border-slate-200 bg-slate-50 px-4 py-3\"><input type=\"search\"${attr(\"value\", search)} placeholder=\"Search nodes\" class=\"w-full rounded-md border border-slate-300 bg-white px-3 py-2 text-sm outline-none focus:border-brand-700 sm:w-64\"/> <button type=\"button\" class=\"rounded-md border border-slate-300 px-3 py-2 text-sm font-medium text-slate-700 hover:bg-white\">Re-layout</button> <button type=\"button\" class=\"rounded-md border border-slate-300 px-3 py-2 text-sm font-medium text-slate-700 hover:bg-white\">Fit</button> <div class=\"flex rounded-md border border-slate-300 bg-white p-1\"><button type=\"button\" class=\"rounded px-2.5 py-1 text-sm font-semibold text-slate-700 hover:bg-slate-50\" aria-label=\"Zoom out\">-</button> <button type=\"button\" class=\"rounded px-2.5 py-1 text-sm font-semibold text-slate-700 hover:bg-slate-50\" aria-label=\"Zoom in\">+</button></div> <button type=\"button\" class=\"rounded-md border border-slate-300 px-3 py-2 text-sm font-medium text-slate-700 hover:bg-white\">Reset</button> <button type=\"button\"${attr_class(`rounded-md border border-slate-300 px-3 py-2 text-sm font-medium text-slate-700 hover:bg-white`)}>Labels</button> <div class=\"flex flex-wrap gap-1\"><!--[-->`);\n\t\tconst each_array = ensure_array_like(ALL_BEHAVIOR_GRAPH_EDGE_KINDS);\n\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\tlet kind = each_array[$$index];\n\t\t\t$$renderer.push(`<button type=\"button\"${attr_class(`rounded-full border px-2.5 py-1 text-xs font-medium ${enabledKinds[kind] ? \"border-slate-300 bg-white text-slate-800\" : \"border-slate-200 bg-slate-100 text-slate-400\"}`)}>${escape_html(behaviorGraphEdgeTheme[kind].label)}</button>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></div></div> <div class=\"graph-canvas relative svelte-1wx4hks\"><div class=\"h-[76vh] min-h-[720px] w-full\"${attr(\"aria-label\", `Interactive behavior graph for ${graphTitle()}`)}></div> <div class=\"pointer-events-none absolute bottom-3 left-3 rounded-md border border-slate-200 bg-white/88 px-3 py-2 text-xs text-slate-600 shadow-sm backdrop-blur\">ForceAtlas2 settles the graph, then physics stops for smooth panning. Wheel, pinch, or +/- to zoom.</div> `);\n\t\t$$renderer.push(\"<!--[0-->\");\n\t\t$$renderer.push(`<div class=\"pointer-events-none absolute left-1/2 top-3 w-64 -translate-x-1/2 rounded-md border border-slate-200 bg-white/90 p-3 text-xs text-slate-600 shadow-sm backdrop-blur\"><div class=\"flex justify-between font-medium text-slate-800\"><span>Stabilizing layout</span> <span>${escape_html(stabilizationProgress)}%</span></div> <div class=\"mt-2 h-1.5 overflow-hidden rounded-full bg-slate-200\"><div class=\"h-full rounded-full bg-brand-500 transition-all\"${attr_style(`width:${stabilizationProgress}%`)}></div></div></div>`);\n\t\t$$renderer.push(`<!--]--></div></div> <aside class=\"space-y-4 p-4\"><div><h3 class=\"text-sm font-semibold text-slate-950\">Graph Summary</h3> <div class=\"mt-3 grid grid-cols-2 gap-2 text-sm\"><div class=\"rounded-md bg-slate-100 p-3\"><div class=\"text-2xl font-semibold text-slate-950\">${escape_html(graph().nodes.length)}</div> <div class=\"text-xs text-slate-500\">nodes</div></div> <div class=\"rounded-md bg-slate-100 p-3\"><div class=\"text-2xl font-semibold text-slate-950\">${escape_html(graph().edges.length)}</div> <div class=\"text-xs text-slate-500\">edges</div></div></div></div> <div><h3 class=\"text-sm font-semibold text-slate-950\">Node Types</h3> <div class=\"mt-2 flex flex-wrap gap-1.5\"><!--[-->`);\n\t\tconst each_array_1 = ensure_array_like(ALL_BEHAVIOR_GRAPH_NODE_TYPES);\n\t\tfor (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {\n\t\t\tlet type = each_array_1[$$index_1];\n\t\t\tif (countsByType().get(type)) {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t$$renderer.push(`<span class=\"inline-flex items-center gap-1 rounded-full border border-slate-200 bg-white px-2 py-1 text-xs text-slate-700\"><span class=\"h-2 w-2 rounded-full\"${attr_style(`background:${behaviorGraphNodeTheme[type].fill}`)}></span> ${escape_html(behaviorGraphNodeTheme[type].label)} ${escape_html(countsByType().get(type))}</span>`);\n\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]-->`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></div></div> <div><h3 class=\"text-sm font-semibold text-slate-950\">Central Nodes</h3> <div class=\"mt-2 space-y-2\"><!--[-->`);\n\t\tconst each_array_2 = ensure_array_like(centralNodes());\n\t\tfor (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) {\n\t\t\tlet node = each_array_2[$$index_2];\n\t\t\t$$renderer.push(`<button type=\"button\" class=\"w-full rounded-md border border-slate-200 bg-white px-3 py-2 text-left hover:border-brand-300 hover:bg-brand-50\"><span class=\"block truncate text-sm font-medium text-slate-900\">${escape_html(node.label)}</span> <span class=\"text-xs text-slate-500\">${escape_html(behaviorGraphNodeTheme[node.type].label)} / ${escape_html(node.degree)} links</span></button>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></div></div> <div class=\"rounded-md border border-slate-200 bg-slate-50 p-3\">`);\n\t\tif (selectedNode()) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<p class=\"text-xs font-semibold uppercase tracking-wide text-slate-500\">${escape_html(behaviorGraphNodeTheme[selectedNode().type].label)}</p> <h3 class=\"mt-1 text-base font-semibold text-slate-950\">${escape_html(selectedNode().label)}</h3> `);\n\t\t\tif (selectedNode().detail) {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t$$renderer.push(`<p class=\"mt-2 text-sm leading-6 text-slate-600\">${escape_html(selectedNode().detail)}</p>`);\n\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]--> <p class=\"mt-2 text-xs text-slate-500\">${escape_html(selectedNode().degree)} graph links</p> `);\n\t\t\tif (selectedNode().href) {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t$$renderer.push(`<a class=\"mt-3 inline-flex text-sm font-medium text-brand-700 hover:underline\"${attr(\"href\", selectedNode().href)}>Open in editor</a>`);\n\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]-->`);\n\t\t} else if (selectedEdge()) {\n\t\t\t$$renderer.push(\"<!--[1-->\");\n\t\t\t$$renderer.push(`<p class=\"text-xs font-semibold uppercase tracking-wide text-slate-500\">${escape_html(behaviorGraphEdgeTheme[selectedEdge().kind].label)}</p> <h3 class=\"mt-1 text-base font-semibold text-slate-950\">${escape_html(selectedEdge().label ?? \"Behavior link\")}</h3> <p class=\"mt-2 text-sm leading-6 text-slate-600\">${escape_html(selectedEdgeFrom()?.label ?? selectedEdge().from)} -> ${escape_html(selectedEdgeTo()?.label ?? selectedEdge().to)}</p> <p class=\"mt-2 text-xs text-slate-500\">Click another node or edge to move the highlighted neighborhood.</p>`);\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<h3 class=\"text-sm font-semibold text-slate-950\">Explore the Map</h3> <p class=\"mt-2 text-sm leading-6 text-slate-600\">Click a node or edge to highlight its linked behavior. Hover highlighting is disabled so\n the canvas stays lighter on slower laptops.</p>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></div></aside></div></div></section>`);\n\t});\n}\n//#endregion\nexport { BehaviorGraph as t };\n"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { h as attr_class, g as attr, t as escape_html, a6 as stringify, q as derived } from './index-server-7H0jzj0M.js';
|
|
2
2
|
import { T as TagDotStrip } from './TagDotStrip-B1XQ0m0Y.js';
|
|
3
|
-
import { P as ProgressBar } from './ProgressBar-
|
|
3
|
+
import { P as ProgressBar } from './ProgressBar-DDoQJ_C9.js';
|
|
4
4
|
|
|
5
5
|
//#region src/features/behavior-model/presentation/components/FeatureCard.svelte
|
|
6
6
|
function FeatureCard($$renderer, $$props) {
|
|
@@ -70,4 +70,4 @@ function FeatureCard($$renderer, $$props) {
|
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
export { FeatureCard as F };
|
|
73
|
-
//# sourceMappingURL=FeatureCard-
|
|
73
|
+
//# sourceMappingURL=FeatureCard-CfbXNYe8.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureCard-BQOY6gJQ.js","sources":["../../../.svelte-kit/adapter-node/chunks/FeatureCard.js"],"sourcesContent":["import { G as attr, l as derived, m as stringify, o as attr_class, q as escape_html } from \"./index-server.js\";\nimport { t as TagDotStrip } from \"./TagDotStrip.js\";\nimport { t as ProgressBar } from \"./ProgressBar.js\";\n//#region src/features/behavior-model/presentation/components/FeatureCard.svelte\nfunction FeatureCard($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/**\n\t\t* Optional queue toggle. Provided by the parent (ProjectFeaturesPanel) when\n\t\t* the card is rendered inside a project, where \"implement next\" is\n\t\t* meaningful. Standalone usages (e.g. /features index) leave both undefined\n\t\t* so the button doesn't render and the card stays minimal.\n\t\t*/\n\t\tlet { summary, onDelete, onAddTag, onRemoveTag, tagTypeOptions = [], deleteLabel = \"Delete\", onAddToQueue, onRemoveFromQueue, queued = false } = $$props;\n\t\tconst scoreColor = (percentage) => percentage >= 80 ? \"bg-emerald-50 text-emerald-700 border-emerald-200\" : percentage >= 50 ? \"bg-amber-50 text-amber-800 border-amber-200\" : \"bg-red-50 text-red-700 border-red-200\";\n\t\tconst maturityBadgeColor = derived(() => scoreColor(summary.maturityPercentage));\n\t\tconst implTone = derived(() => summary.implementationPercentage === null || !summary.implementationHasReport ? \"bg-slate-50 text-slate-500 border-slate-200\" : scoreColor(summary.implementationPercentage));\n\t\tconst implLabel = derived(() => summary.implementationPercentage === null ? \"-\" : !summary.implementationHasReport ? \"-\" : `${summary.implementationPercentage}%`);\n\t\tconst implTitle = derived(() => summary.implementationPercentage === null ? \"No taggable entities yet (actions, events, rules...)\" : !summary.implementationHasReport ? \"No .unspa.json report yet. Run report_implementation_status_batch to populate.\" : `Implementation coverage: ${summary.implementationFoundCount} of ${summary.implementationExpectedCount} expected tags found in code`);\n\t\tconst cardAccent = derived(() => summary.maturityPercentage >= 80 ? \"from-emerald-400 via-brand-mint to-brand-500\" : summary.maturityPercentage >= 50 ? \"from-amber-400 via-brand-ochre to-brand-peach\" : \"from-red-400 via-brand-coral to-brand-pink\");\n\t\t$$renderer.push(`<article class=\"group relative flex h-full min-h-52 flex-col justify-between overflow-hidden rounded-xl border border-cyan-100 bg-white p-5 shadow-sm shadow-cyan-950/5 transition duration-150 hover:-translate-y-0.5 hover:border-cyan-200 hover:bg-cyan-50/20 hover:shadow-md hover:shadow-cyan-950/10 focus-within:border-cyan-300\"><div${attr_class(`absolute inset-x-0 top-0 h-1 bg-linear-to-r ${cardAccent()}`)}></div> <div class=\"space-y-4\"><div class=\"flex items-start justify-between gap-3\"><a${attr(\"href\", `/features/${summary.id}`)} class=\"block min-w-0 flex-1\"><h3 class=\"truncate text-base font-semibold text-slate-950 group-hover:text-brand-800\">${escape_html(summary.name)}</h3></a> <div class=\"flex shrink-0 flex-col items-end gap-1\"><span${attr_class(`inline-flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-[10px] font-medium ${stringify(maturityBadgeColor())}`)}${attr(\"title\", `Maturity score: how complete this feature's behavior model is (${stringify(summary.maturityPercentage)}% of spec quality checks pass)`)}><span class=\"text-[9px] font-semibold uppercase tracking-wide opacity-70\">Mat</span> <span class=\"tabular-nums\">${escape_html(summary.maturityPercentage)}%</span></span> <span${attr_class(`inline-flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-[10px] font-medium ${stringify(implTone())}`)}${attr(\"title\", implTitle())}><span class=\"text-[9px] font-semibold uppercase tracking-wide opacity-70\">Impl</span> <span class=\"tabular-nums\">${escape_html(implLabel())}</span></span></div></div> `);\n\t\tif (summary.description) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<a${attr(\"href\", `/features/${summary.id}`)} class=\"block\"><p class=\"line-clamp-3 text-sm leading-6 text-slate-600\">${escape_html(summary.description)}</p></a>`);\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<p class=\"text-sm leading-6 text-slate-500\">No description yet. Open this feature to shape its behavior model.</p>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--> `);\n\t\tTagDotStrip($$renderer, {\n\t\t\ttags: summary.tags,\n\t\t\tonAddTag,\n\t\t\tonRemoveTag,\n\t\t\ttypeOptions: tagTypeOptions\n\t\t});\n\t\t$$renderer.push(`<!----> <div class=\"space-y-2\">`);\n\t\tProgressBar($$renderer, {\n\t\t\tpercentage: summary.maturityPercentage,\n\t\t\tsize: \"sm\",\n\t\t\tariaLabel: `Maturity ${stringify(summary.maturityPercentage)}%`\n\t\t});\n\t\t$$renderer.push(`<!----> <div class=\"text-xs text-slate-500\">`);\n\t\tif (summary.criticalIssueCount > 0) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<span class=\"text-red-600\">${escape_html(summary.criticalIssueCount)} critical</span> `);\n\t\t\tif (summary.recommendedIssueCount > 0) {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t$$renderer.push(`<span class=\"px-1\">/</span>`);\n\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]-->`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (summary.recommendedIssueCount > 0) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<span class=\"text-amber-700\">${escape_html(summary.recommendedIssueCount)} recommended</span>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (summary.criticalIssueCount === 0 && summary.recommendedIssueCount === 0) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<span class=\"text-emerald-700\">All checks pass</span>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div></div></div> <div class=\"mt-5 flex items-center justify-between gap-3 border-t border-hairline pt-3 text-xs text-slate-500\"><span class=\"min-w-0 flex-1 truncate\">${escape_html(summary.surfaceCount)} surface${escape_html(summary.surfaceCount === 1 ? \"\" : \"s\")} / ${escape_html(summary.actionCount)}\n action${escape_html(summary.actionCount === 1 ? \"\" : \"s\")} / Updated ${escape_html(new Date(summary.updatedAt).toLocaleDateString())}</span> <div class=\"flex shrink-0 items-center gap-1\">`);\n\t\tif (onAddToQueue || onRemoveFromQueue) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<button type=\"button\"${attr_class(`rounded px-2 py-1 transition ${queued ? \"font-medium text-brand-700 opacity-100 hover:bg-cyan-50 hover:text-brand-900\" : \"text-slate-400 opacity-0 hover:bg-cyan-50 hover:text-brand-800 group-hover:opacity-100 group-focus-within:opacity-100\"}`)}${attr(\"title\", queued ? \"In implementation queue (click to remove)\" : \"Add to implementation queue\")}>${escape_html(queued ? \"✓ queued\" : \"+ queue\")}</button>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <button type=\"button\" class=\"rounded px-2 py-1 text-slate-400 opacity-0 transition group-hover:opacity-100 group-focus-within:opacity-100 hover:bg-red-50 hover:text-red-600\">${escape_html(deleteLabel)}</button></div></div></article>`);\n\t});\n}\n//#endregion\nexport { FeatureCard as t };\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FeatureCard-CfbXNYe8.js","sources":["../../../.svelte-kit/adapter-node/chunks/FeatureCard.js"],"sourcesContent":["import { G as attr, l as derived, m as stringify, o as attr_class, q as escape_html } from \"./index-server.js\";\nimport { t as TagDotStrip } from \"./TagDotStrip.js\";\nimport { t as ProgressBar } from \"./ProgressBar.js\";\n//#region src/features/behavior-model/presentation/components/FeatureCard.svelte\nfunction FeatureCard($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t/**\n\t\t* Optional queue toggle. Provided by the parent (ProjectFeaturesPanel) when\n\t\t* the card is rendered inside a project, where \"implement next\" is\n\t\t* meaningful. Standalone usages (e.g. /features index) leave both undefined\n\t\t* so the button doesn't render and the card stays minimal.\n\t\t*/\n\t\tlet { summary, onDelete, onAddTag, onRemoveTag, tagTypeOptions = [], deleteLabel = \"Delete\", onAddToQueue, onRemoveFromQueue, queued = false } = $$props;\n\t\tconst scoreColor = (percentage) => percentage >= 80 ? \"bg-emerald-50 text-emerald-700 border-emerald-200\" : percentage >= 50 ? \"bg-amber-50 text-amber-800 border-amber-200\" : \"bg-red-50 text-red-700 border-red-200\";\n\t\tconst maturityBadgeColor = derived(() => scoreColor(summary.maturityPercentage));\n\t\tconst implTone = derived(() => summary.implementationPercentage === null || !summary.implementationHasReport ? \"bg-slate-50 text-slate-500 border-slate-200\" : scoreColor(summary.implementationPercentage));\n\t\tconst implLabel = derived(() => summary.implementationPercentage === null ? \"-\" : !summary.implementationHasReport ? \"-\" : `${summary.implementationPercentage}%`);\n\t\tconst implTitle = derived(() => summary.implementationPercentage === null ? \"No taggable entities yet (actions, events, rules...)\" : !summary.implementationHasReport ? \"No .unspa.json report yet. Run report_implementation_status_batch to populate.\" : `Implementation coverage: ${summary.implementationFoundCount} of ${summary.implementationExpectedCount} expected tags found in code`);\n\t\tconst cardAccent = derived(() => summary.maturityPercentage >= 80 ? \"from-emerald-400 via-brand-mint to-brand-500\" : summary.maturityPercentage >= 50 ? \"from-amber-400 via-brand-ochre to-brand-peach\" : \"from-red-400 via-brand-coral to-brand-pink\");\n\t\t$$renderer.push(`<article class=\"group relative flex h-full min-h-52 flex-col justify-between overflow-hidden rounded-xl border border-cyan-100 bg-white p-5 shadow-sm shadow-cyan-950/5 transition duration-150 hover:-translate-y-0.5 hover:border-cyan-200 hover:bg-cyan-50/20 hover:shadow-md hover:shadow-cyan-950/10 focus-within:border-cyan-300\"><div${attr_class(`absolute inset-x-0 top-0 h-1 bg-linear-to-r ${cardAccent()}`)}></div> <div class=\"space-y-4\"><div class=\"flex items-start justify-between gap-3\"><a${attr(\"href\", `/features/${summary.id}`)} class=\"block min-w-0 flex-1\"><h3 class=\"truncate text-base font-semibold text-slate-950 group-hover:text-brand-800\">${escape_html(summary.name)}</h3></a> <div class=\"flex shrink-0 flex-col items-end gap-1\"><span${attr_class(`inline-flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-[10px] font-medium ${stringify(maturityBadgeColor())}`)}${attr(\"title\", `Maturity score: how complete this feature's behavior model is (${stringify(summary.maturityPercentage)}% of spec quality checks pass)`)}><span class=\"text-[9px] font-semibold uppercase tracking-wide opacity-70\">Mat</span> <span class=\"tabular-nums\">${escape_html(summary.maturityPercentage)}%</span></span> <span${attr_class(`inline-flex items-center gap-1 rounded-md border px-1.5 py-0.5 text-[10px] font-medium ${stringify(implTone())}`)}${attr(\"title\", implTitle())}><span class=\"text-[9px] font-semibold uppercase tracking-wide opacity-70\">Impl</span> <span class=\"tabular-nums\">${escape_html(implLabel())}</span></span></div></div> `);\n\t\tif (summary.description) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<a${attr(\"href\", `/features/${summary.id}`)} class=\"block\"><p class=\"line-clamp-3 text-sm leading-6 text-slate-600\">${escape_html(summary.description)}</p></a>`);\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<p class=\"text-sm leading-6 text-slate-500\">No description yet. Open this feature to shape its behavior model.</p>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--> `);\n\t\tTagDotStrip($$renderer, {\n\t\t\ttags: summary.tags,\n\t\t\tonAddTag,\n\t\t\tonRemoveTag,\n\t\t\ttypeOptions: tagTypeOptions\n\t\t});\n\t\t$$renderer.push(`<!----> <div class=\"space-y-2\">`);\n\t\tProgressBar($$renderer, {\n\t\t\tpercentage: summary.maturityPercentage,\n\t\t\tsize: \"sm\",\n\t\t\tariaLabel: `Maturity ${stringify(summary.maturityPercentage)}%`\n\t\t});\n\t\t$$renderer.push(`<!----> <div class=\"text-xs text-slate-500\">`);\n\t\tif (summary.criticalIssueCount > 0) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<span class=\"text-red-600\">${escape_html(summary.criticalIssueCount)} critical</span> `);\n\t\t\tif (summary.recommendedIssueCount > 0) {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t$$renderer.push(`<span class=\"px-1\">/</span>`);\n\t\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<!--]-->`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (summary.recommendedIssueCount > 0) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<span class=\"text-amber-700\">${escape_html(summary.recommendedIssueCount)} recommended</span>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tif (summary.criticalIssueCount === 0 && summary.recommendedIssueCount === 0) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<span class=\"text-emerald-700\">All checks pass</span>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div></div></div> <div class=\"mt-5 flex items-center justify-between gap-3 border-t border-hairline pt-3 text-xs text-slate-500\"><span class=\"min-w-0 flex-1 truncate\">${escape_html(summary.surfaceCount)} surface${escape_html(summary.surfaceCount === 1 ? \"\" : \"s\")} / ${escape_html(summary.actionCount)}\n action${escape_html(summary.actionCount === 1 ? \"\" : \"s\")} / Updated ${escape_html(new Date(summary.updatedAt).toLocaleDateString())}</span> <div class=\"flex shrink-0 items-center gap-1\">`);\n\t\tif (onAddToQueue || onRemoveFromQueue) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<button type=\"button\"${attr_class(`rounded px-2 py-1 transition ${queued ? \"font-medium text-brand-700 opacity-100 hover:bg-cyan-50 hover:text-brand-900\" : \"text-slate-400 opacity-0 hover:bg-cyan-50 hover:text-brand-800 group-hover:opacity-100 group-focus-within:opacity-100\"}`)}${attr(\"title\", queued ? \"In implementation queue (click to remove)\" : \"Add to implementation queue\")}>${escape_html(queued ? \"✓ queued\" : \"+ queue\")}</button>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> <button type=\"button\" class=\"rounded px-2 py-1 text-slate-400 opacity-0 transition group-hover:opacity-100 group-focus-within:opacity-100 hover:bg-red-50 hover:text-red-600\">${escape_html(deleteLabel)}</button></div></div></article>`);\n\t});\n}\n//#endregion\nexport { FeatureCard as t };\n"],"names":[],"mappings":";;;;AAGA;AACA,SAAS,WAAW,CAAC,UAAU,EAAE,OAAO,EAAE;AAC1C,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,UAAU,KAAK;AACtC;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,GAAG,EAAE,EAAE,WAAW,GAAG,QAAQ,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO;AAC1J,EAAE,MAAM,UAAU,GAAG,CAAC,UAAU,KAAK,UAAU,IAAI,EAAE,GAAG,mDAAmD,GAAG,UAAU,IAAI,EAAE,GAAG,6CAA6C,GAAG,uCAAuC;AACxN,EAAE,MAAM,kBAAkB,GAAG,OAAO,CAAC,MAAM,UAAU,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAClF,EAAE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,wBAAwB,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,uBAAuB,GAAG,6CAA6C,GAAG,UAAU,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;AAC9M,EAAE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,wBAAwB,KAAK,IAAI,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,uBAAuB,GAAG,GAAG,GAAG,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC;AACpK,EAAE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,wBAAwB,KAAK,IAAI,GAAG,sDAAsD,GAAG,CAAC,OAAO,CAAC,uBAAuB,GAAG,gFAAgF,GAAG,CAAC,yBAAyB,EAAE,OAAO,CAAC,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,2BAA2B,CAAC,4BAA4B,CAAC,CAAC;AAClY,EAAE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,OAAO,CAAC,kBAAkB,IAAI,EAAE,GAAG,8CAA8C,GAAG,OAAO,CAAC,kBAAkB,IAAI,EAAE,GAAG,+CAA+C,GAAG,4CAA4C,CAAC;AACzP,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,4UAA4U,EAAE,UAAU,CAAC,CAAC,4CAA4C,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,qFAAqF,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,qHAAqH,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,mEAAmE,EAAE,UAAU,CAAC,CAAC,uFAAuF,EAAE,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,+DAA+D,EAAE,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,iHAAiH,EAAE,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC,uFAAuF,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,kHAAkH,EAAE,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,2BAA2B,CAAC,CAAC;AACxhD,EAAE,IAAI,OAAO,CAAC,WAAW,EAAE;AAC3B,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/B,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,wEAAwE,EAAE,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC;AACrL,EAAE,CAAC,MAAM;AACT,GAAG,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AAChC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,kHAAkH,CAAC,CAAC;AACxI,EAAE;AACF,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;AAC9B,EAAE,WAAW,CAAC,UAAU,EAAE;AAC1B,GAAG,IAAI,EAAE,OAAO,CAAC,IAAI;AACrB,GAAG,QAAQ;AACX,GAAG,WAAW;AACd,GAAG,WAAW,EAAE;AAChB,GAAG,CAAC;AACJ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,+BAA+B,CAAC,CAAC;AACpD,EAAE,WAAW,CAAC,UAAU,EAAE;AAC1B,GAAG,UAAU,EAAE,OAAO,CAAC,kBAAkB;AACzC,GAAG,IAAI,EAAE,IAAI;AACb,GAAG,SAAS,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;AACjE,GAAG,CAAC;AACJ,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,4CAA4C,CAAC,CAAC;AACjE,EAAE,IAAI,OAAO,CAAC,kBAAkB,GAAG,CAAC,EAAE;AACtC,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/B,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,2BAA2B,EAAE,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,iBAAiB,CAAC,CAAC;AAC5G,GAAG,IAAI,OAAO,CAAC,qBAAqB,GAAG,CAAC,EAAE;AAC1C,IAAI,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAChC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,2BAA2B,CAAC,CAAC;AAClD,GAAG,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AACvC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;AAC9B,EAAE,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AACtC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;AAC9B,EAAE,IAAI,OAAO,CAAC,qBAAqB,GAAG,CAAC,EAAE;AACzC,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/B,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,6BAA6B,EAAE,WAAW,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,mBAAmB,CAAC,CAAC;AACnH,EAAE,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AACtC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC;AAC9B,EAAE,IAAI,OAAO,CAAC,kBAAkB,KAAK,CAAC,IAAI,OAAO,CAAC,qBAAqB,KAAK,CAAC,EAAE;AAC/E,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/B,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,qDAAqD,CAAC,CAAC;AAC3E,EAAE,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AACtC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,gLAAgL,EAAE,WAAW,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,YAAY,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC;AACzU,YAAY,EAAE,WAAW,CAAC,OAAO,CAAC,WAAW,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,sDAAsD,CAAC,CAAC;AACnM,EAAE,IAAI,YAAY,IAAI,iBAAiB,EAAE;AACzC,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAC/B,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC,6BAA6B,EAAE,MAAM,GAAG,8EAA8E,GAAG,uHAAuH,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,2CAA2C,GAAG,6BAA6B,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC;AAC5c,EAAE,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC;AACtC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,uLAAuL,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC,+BAA+B,CAAC,CAAC;AACtQ,CAAC,CAAC,CAAC;AACH;;;;"}
|
|
@@ -8,7 +8,7 @@ function ProgressBar($$renderer, $$props) {
|
|
|
8
8
|
* Designed to replace the "single flat colored fill" pattern that was
|
|
9
9
|
* scattered across FeatureCard / MaturityPanel / FeatureHealthStrip.
|
|
10
10
|
* Adds:
|
|
11
|
-
* - tier-based color (red < 50%, amber < 80%, emerald
|
|
11
|
+
* - tier-based color (red < 50%, amber < 80%, emerald >= 80%) when no
|
|
12
12
|
* explicit `color` is passed. The tier breakpoints match the
|
|
13
13
|
* existing scorer thresholds so the visual identity stays in step
|
|
14
14
|
* with the textual "critical / recommended" semantics.
|
|
@@ -67,4 +67,4 @@ function ProgressBar($$renderer, $$props) {
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
export { ProgressBar as P };
|
|
70
|
-
//# sourceMappingURL=ProgressBar-
|
|
70
|
+
//# sourceMappingURL=ProgressBar-DDoQJ_C9.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressBar-DDoQJ_C9.js","sources":["../../../.svelte-kit/adapter-node/chunks/ProgressBar.js"],"sourcesContent":["import { G as attr, l as derived, m as stringify, o as attr_class, q as escape_html, s as attr_style, u as ensure_array_like } from \"./index-server.js\";\n//#region src/shared/presentation/components/ProgressBar.svelte\nfunction ProgressBar($$renderer, $$props) {\n\t/**\n\t* Reusable maturity / implementation progress bar.\n\t*\n\t* Designed to replace the \"single flat colored fill\" pattern that was\n\t* scattered across FeatureCard / MaturityPanel / FeatureHealthStrip.\n\t* Adds:\n\t* - tier-based color (red < 50%, amber < 80%, emerald >= 80%) when no\n\t* explicit `color` is passed. The tier breakpoints match the\n\t* existing scorer thresholds so the visual identity stays in step\n\t* with the textual \"critical / recommended\" semantics.\n\t* - optional threshold ticks (50% + 80% by default). They anchor the\n\t* bar to the same tiers as the color, so a 65% bar visibly reads\n\t* \"past the red zone, not yet in the green zone\" instead of just\n\t* \"amber\".\n\t* - smooth width transition so live edits (Yjs reconcile, MCP\n\t* writes) animate from old → new value instead of teleporting.\n\t* - subtle inner shadow on the track + gradient overlay on the fill\n\t* so the bar feels like a control, not a flat rectangle.\n\t*\n\t* Props are deliberately minimal so the bar can be dropped anywhere\n\t* without forcing the caller to learn a wide API.\n\t*/\n\t/** 0–100. Clamped defensively so a malformed score can't break layout. */\n\t/** 0–100. Clamped defensively so a malformed score can't break layout. */\n\t/**\n\t* Optional explicit fill color (CSS color string). When omitted, the\n\t* bar picks one from the tier table below based on `percentage`. Use\n\t* this when the caller already computes an \"adaptive\" color from a\n\t* MaturityReport (e.g. shifting on critical-issue count).\n\t*/\n\t/** Bar height. xs=4, sm=6, md=10. Default sm. */\n\t/**\n\t* Show the small \"65%\" label to the right of the bar. Off by\n\t* default — most callers pair the bar with their own surrounding\n\t* percentage badge, so adding a duplicate would crowd the row.\n\t*/\n\t/**\n\t* Draw thin vertical ticks at these percentages. Default [50, 80]\n\t* mirrors the tier breakpoints. Pass [] to suppress.\n\t*/\n\t/** Accessible label for screen readers. */\n\tlet { percentage, color, size = \"sm\", showLabel = false, ticks = [50, 80], ariaLabel } = $$props;\n\tconst clamped = derived(() => Math.max(0, Math.min(100, Math.round(percentage))));\n\tconst tierColor = derived(() => clamped() >= 80 ? \"#10b981\" : clamped() >= 50 ? \"#f59e0b\" : \"#ef4444\");\n\tconst fillColor = derived(() => color ?? tierColor());\n\tconst trackHeightClass = derived(() => size === \"md\" ? \"h-2.5\" : size === \"sm\" ? \"h-1.5\" : \"h-1\");\n\t$$renderer.push(`<div class=\"flex w-full items-center gap-2\"><div${attr_class(`relative w-full overflow-hidden rounded-full bg-slate-100 ${trackHeightClass()}`)} style=\"box-shadow: inset 0 1px 1px rgba(15, 23, 42, 0.06);\" role=\"progressbar\"${attr(\"aria-valuenow\", clamped())}${attr(\"aria-valuemin\", 0)}${attr(\"aria-valuemax\", 100)}${attr(\"aria-label\", ariaLabel)}><div class=\"h-full rounded-full transition-[width,background-color] duration-300 ease-out\"${attr_style(` width: ${stringify(clamped())}%; background-color: ${stringify(fillColor())}; background-image: linear-gradient(180deg, rgba(255,255,255,0.18) 0%, rgba(0,0,0,0.06) 100%); `)}></div> <!--[-->`);\n\tconst each_array = ensure_array_like(ticks);\n\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\tlet tickPct = each_array[$$index];\n\t\tif (tickPct > 0 && tickPct < 100) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<span class=\"pointer-events-none absolute top-0 bottom-0 w-px bg-slate-300/70\"${attr_style(`left: ${stringify(tickPct)}%;`)} aria-hidden=\"true\"></span>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]-->`);\n\t}\n\t$$renderer.push(`<!--]--></div> `);\n\tif (showLabel) {\n\t\t$$renderer.push(\"<!--[0-->\");\n\t\t$$renderer.push(`<span class=\"shrink-0 text-[10px] font-semibold tabular-nums text-slate-600\" style=\"min-width: 2.25rem; text-align: right;\">${escape_html(clamped())}%</span>`);\n\t} else $$renderer.push(\"<!--[-1-->\");\n\t$$renderer.push(`<!--]--></div>`);\n}\n//#endregion\nexport { ProgressBar as t };\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { W as onDestroy, g as attr, t as escape_html, r as ensure_array_like, q as derived } from './index-server-7H0jzj0M.js';
|
|
2
2
|
import { x as humanizeTagText, X as tagKey, R as removeTag, a as addTag } from './TagPalette-CtMNYCmu.js';
|
|
3
3
|
import { h as getBrowserContainer } from './browserContainer-CNX7ANld.js';
|
|
4
|
-
import './client-
|
|
4
|
+
import './client-DeX3TC3s.js';
|
|
5
5
|
import { p as projectsStore } from './projectsStore.svelte-QDz5PchX.js';
|
|
6
6
|
import { T as TagDotStrip } from './TagDotStrip-B1XQ0m0Y.js';
|
|
7
7
|
import { T as TagFilterSelect } from './TagFilterSelect-DbO0Qduh.js';
|
|
@@ -183,4 +183,4 @@ function ProjectsIndex($$renderer, $$props) {
|
|
|
183
183
|
}
|
|
184
184
|
|
|
185
185
|
export { ProjectsIndex as P };
|
|
186
|
-
//# sourceMappingURL=ProjectsIndex-
|
|
186
|
+
//# sourceMappingURL=ProjectsIndex-DUVJ3hyL.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectsIndex-CoDrvRya.js","sources":["../../../.svelte-kit/adapter-node/chunks/ProjectsIndex.js"],"sourcesContent":["import { G as attr, l as derived, n as onDestroy, q as escape_html, u as ensure_array_like } from \"./index-server.js\";\nimport { K as addTag, Y as removeTag, Z as tagKey, q as humanizeTagText } from \"./TagPalette.js\";\nimport { t as getBrowserContainer, v as checklistDialog, y as confirmDialog } from \"./browserContainer.js\";\nimport \"./syncEvents.js\";\nimport \"./navigation.js\";\nimport \"./tourStore.svelte.js\";\nimport { t as projectsStore } from \"./projectsStore.svelte.js\";\nimport \"./tagPaletteStore.svelte.js\";\nimport { t as featuresStore } from \"./featuresStore.svelte.js\";\nimport { t as TagDotStrip } from \"./TagDotStrip.js\";\nimport \"./projectBundleClient.js\";\nimport { t as TagFilterSelect } from \"./TagFilterSelect.js\";\nimport { t as ManageTagsDialog } from \"./ManageTagsDialog.js\";\n//#region src/features/projects/presentation/components/ProjectCard.svelte\nfunction ProjectCard($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { summary, onDelete, onAddTag, onRemoveTag, tagTypeOptions = [], deleteLabel = \"Delete\" } = $$props;\n\t\t$$renderer.push(`<article data-tour=\"project-card\" class=\"group relative flex h-full min-h-52 flex-col justify-between overflow-hidden rounded-xl border border-cyan-100 bg-white p-5 shadow-sm shadow-cyan-950/5 transition duration-150 hover:-translate-y-0.5 hover:border-cyan-200 hover:bg-cyan-50/20 hover:shadow-md hover:shadow-cyan-950/10 focus-within:border-cyan-300\"><div class=\"absolute inset-x-0 top-0 h-1 bg-gradient-to-r from-brand-500 via-brand-mint to-violet-400\"></div> <div class=\"space-y-3\"><div class=\"flex items-start justify-between gap-3\"><a${attr(\"href\", `/projects/${summary.id}`)} class=\"block min-w-0 flex-1\"><h3 class=\"truncate text-base font-semibold text-slate-950 group-hover:text-brand-800\">${escape_html(summary.name)}</h3></a> <span class=\"shrink-0 rounded-md border border-cyan-100 bg-cyan-50 px-2 py-0.5 text-xs font-medium text-brand-800\" title=\"Features in project\">${escape_html(summary.featureCount)} feature${escape_html(summary.featureCount === 1 ? \"\" : \"s\")}</span></div> `);\n\t\tif (summary.description) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<a${attr(\"href\", `/projects/${summary.id}`)} class=\"block\"><p class=\"line-clamp-3 text-sm leading-6 text-slate-600\">${escape_html(summary.description)}</p></a>`);\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<p class=\"text-sm leading-6 text-slate-500\">No description yet. Add a note so collaborators know what belongs here.</p>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></div> <div class=\"mt-5 flex items-end justify-between gap-3 border-t border-hairline pt-3 text-xs text-slate-500\"><div class=\"min-w-0 flex-1 space-y-2\">`);\n\t\tTagDotStrip($$renderer, {\n\t\t\ttags: summary.tags,\n\t\t\tonAddTag,\n\t\t\tonRemoveTag,\n\t\t\ttypeOptions: tagTypeOptions\n\t\t});\n\t\t$$renderer.push(`<!----> <span class=\"block truncate\">Updated ${escape_html(new Date(summary.updatedAt).toLocaleDateString())}</span></div> <div class=\"flex shrink-0 items-center gap-1\"><button type=\"button\" class=\"rounded px-2 py-1 text-slate-400 opacity-0 transition group-hover:opacity-100 group-focus-within:opacity-100 hover:bg-red-50 hover:text-red-600\">${escape_html(deleteLabel)}</button></div></div></article>`);\n\t});\n}\n//#endregion\n//#region src/features/projects/presentation/components/ProjectsIndex.svelte\nfunction ProjectsIndex($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet unsubscribeSync = null;\n\t\tlet tagFilter = \"all\";\n\t\tlet manageTagsOpen = false;\n\t\tlet sortBy = \"updated\";\n\t\tonDestroy(() => {\n\t\t\tunsubscribeSync?.();\n\t\t\tunsubscribeSync = null;\n\t\t});\n\t\tfunction readTags(project) {\n\t\t\tconst tags = [...project.tags ?? []];\n\t\t\tif (project.customTag?.trim()) tags.push({\n\t\t\t\ttype: project.customTagType?.trim() || \"Tag\",\n\t\t\t\tvalue: project.customTag.trim()\n\t\t\t});\n\t\t\treturn tags;\n\t\t}\n\t\tlet importing = false;\n\t\tasync function handleDelete(id) {\n\t\t\tprojectsStore.stagePendingDelete(id);\n\t\t\tconst name = projectsStore.summaries.find((s) => String(s.id) === String(id))?.name ?? \"this project\";\n\t\t\tconst container = await getBrowserContainer();\n\t\t\tconst featureIds = ((await container.useCases.getProject(id))?.featureIds ?? []).map(String);\n\t\t\tlet selectedFeatureIds = [];\n\t\t\tif (featureIds.length === 0) {\n\t\t\t\tif (!await confirmDialog({\n\t\t\t\t\ttitle: `Delete \"${name}\"?`,\n\t\t\t\t\tmessage: \"This project has no linked features. Removing it cannot be undone.\",\n\t\t\t\t\tconfirmLabel: \"Delete project\",\n\t\t\t\t\ttone: \"danger\"\n\t\t\t\t})) {\n\t\t\t\t\tprojectsStore.clearPendingDelete();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst items = await Promise.all(featureIds.map(async (fid) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: fid,\n\t\t\t\t\t\tlabel: (await container.useCases.getFeatureCard(fid))?.name ?? fid,\n\t\t\t\t\t\tdefaultChecked: true\n\t\t\t\t\t};\n\t\t\t\t}));\n\t\t\t\tconst result = await checklistDialog({\n\t\t\t\t\ttitle: `Delete \"${name}\"?`,\n\t\t\t\t\tmessage: `This project links to ${featureIds.length} feature${featureIds.length === 1 ? \"\" : \"s\"}. Tick the ones you want to delete in the same batch. Anything left unchecked stays available as an unassigned feature.`,\n\t\t\t\t\titems,\n\t\t\t\t\tconfirmLabel: \"Delete project + selected\",\n\t\t\t\t\tcancelLabel: \"Cancel\",\n\t\t\t\t\ttone: \"danger\"\n\t\t\t\t});\n\t\t\t\tif (!result.confirmed) {\n\t\t\t\t\tprojectsStore.clearPendingDelete();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tselectedFeatureIds = result.selectedIds;\n\t\t\t}\n\t\t\tfor (const fid of selectedFeatureIds) await container.useCases.deleteFeature(fid);\n\t\t\tawait projectsStore.remove(id);\n\t\t\tif (selectedFeatureIds.length > 0) await featuresStore.refreshSilent();\n\t\t}\n\t\tconst filtered = derived(() => {\n\t\t\treturn (projectsStore.search.trim().length === 0 ? [...projectsStore.summaries] : projectsStore.summaries.filter((summary) => {\n\t\t\t\tconst q = projectsStore.search.toLowerCase();\n\t\t\t\treturn summary.name.toLowerCase().includes(q) || (summary.description ?? \"\").toLowerCase().includes(q);\n\t\t\t})).filter((summary) => matchesTagFilter(summary, tagFilter)).sort((a, b) => {\n\t\t\t\treturn new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime();\n\t\t\t});\n\t\t});\n\t\tfunction matchesTagFilter(project, filter) {\n\t\t\tconst projectTags = readTags(project);\n\t\t\tif (filter === \"all\") return true;\n\t\t\tif (filter === \"untagged\") return projectTags.length === 0;\n\t\t\tconst key = tagKey(filter);\n\t\t\treturn projectTags.some((tag) => tagKey(tag) === key);\n\t\t}\n\t\tconst allTagsFlat = derived(() => {\n\t\t\tconst out = [];\n\t\t\tfor (const summary of projectsStore.summaries) for (const tag of readTags(summary)) out.push(tag);\n\t\t\treturn out;\n\t\t});\n\t\tconst tagTypeOptions = derived(() => [...new Set(allTagsFlat().map((tag) => humanizeTagText(tag.type)))].sort((a, b) => a.localeCompare(b)));\n\t\tfunction tagFilterCount(filter) {\n\t\t\treturn projectsStore.summaries.filter((s) => matchesTagFilter(s, filter)).length;\n\t\t}\n\t\tasync function appendTag(id, type, value) {\n\t\t\tconst container = await getBrowserContainer();\n\t\t\tconst project = await container.useCases.getProject(id);\n\t\t\tif (!project) return;\n\t\t\tawait container.useCases.saveProject({\n\t\t\t\t...project,\n\t\t\t\ttags: addTag(readTags(project), {\n\t\t\t\t\ttype,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t});\n\t\t\tawait projectsStore.refreshSilent();\n\t\t}\n\t\tasync function dropTag(id, type, value) {\n\t\t\tconst container = await getBrowserContainer();\n\t\t\tconst project = await container.useCases.getProject(id);\n\t\t\tif (!project) return;\n\t\t\tconst nextTags = removeTag(readTags(project), {\n\t\t\t\ttype,\n\t\t\t\tvalue\n\t\t\t});\n\t\t\tawait container.useCases.saveProject({\n\t\t\t\t...project,\n\t\t\t\ttags: nextTags,\n\t\t\t\tcustomTagType: void 0,\n\t\t\t\tcustomTag: void 0\n\t\t\t});\n\t\t\tif (tagFilter !== \"all\" && tagFilter !== \"untagged\" && tagKey(tagFilter) === tagKey({\n\t\t\t\ttype,\n\t\t\t\tvalue\n\t\t\t})) tagFilter = \"all\";\n\t\t\tawait projectsStore.refreshSilent();\n\t\t}\n\t\t$$renderer.push(`<div class=\"mx-auto max-w-7xl px-4 py-8 sm:px-6\"><header class=\"mb-6 border-b border-slate-200 pb-6\"><div class=\"flex items-center justify-between gap-3\"><p class=\"text-xs font-semibold uppercase tracking-wide text-brand-700\">Home</p> <button type=\"button\" class=\"inline-flex items-center gap-1.5 rounded-md border border-slate-300 bg-white px-3 py-1.5 text-xs font-medium text-slate-700 transition hover:border-brand-300 hover:bg-cyan-50 hover:text-brand-800 disabled:opacity-50\"${attr(\"disabled\", importing, true)} title=\"Restore a project from a .unspa file\"><span aria-hidden=\"true\">⬆</span> ${escape_html(\"Import .unspa\")}</button> <input type=\"file\" accept=\".unspa,application/octet-stream,application/json\" class=\"hidden\"/></div> <div class=\"mt-2 max-w-3xl\"><h1 class=\"text-4xl font-semibold tracking-tight text-slate-950\">Projects</h1> <p class=\"mt-2 max-w-2xl text-sm leading-6 text-slate-600\">Group related behavior models and inspect their resources, data, events, and transitions together.</p></div> <div class=\"mt-6 flex flex-col gap-3 rounded-xl border border-slate-200 bg-white p-3 shadow-sm shadow-slate-950/5 lg:flex-row lg:items-center lg:justify-between\"><div class=\"flex min-w-0 items-center rounded-lg border border-hairline bg-white p-1 lg:flex-1\"><label for=\"project-search\" class=\"sr-only\">Search projects</label> <input id=\"project-search\" type=\"search\" placeholder=\"Search projects...\"${attr(\"value\", projectsStore.search)} class=\"h-9 w-full min-w-0 rounded-md border-0 bg-transparent px-3 text-sm outline-none placeholder:text-slate-400\"/> `);\n\t\tif (projectsStore.search.trim().length > 0) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<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>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div> <div class=\"flex flex-col gap-2 sm:flex-row sm:items-center\">`);\n\t\tTagFilterSelect($$renderer, {\n\t\t\ttags: allTagsFlat(),\n\t\t\tvalue: tagFilter,\n\t\t\tonChange: (next) => tagFilter = next,\n\t\t\tonManage: () => manageTagsOpen = true,\n\t\t\tcountLabel: tagFilterCount\n\t\t});\n\t\t$$renderer.push(`<!----> <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> `);\n\t\t$$renderer.select({\n\t\t\tvalue: sortBy,\n\t\t\tclass: \"bg-transparent text-sm font-medium text-slate-800 outline-none\"\n\t\t}, ($$renderer) => {\n\t\t\t$$renderer.option({ value: \"updated\" }, ($$renderer) => {\n\t\t\t\t$$renderer.push(`Updated`);\n\t\t\t});\n\t\t\t$$renderer.option({ value: \"name\" }, ($$renderer) => {\n\t\t\t\t$$renderer.push(`Name`);\n\t\t\t});\n\t\t\t$$renderer.option({ value: \"count\" }, ($$renderer) => {\n\t\t\t\t$$renderer.push(`Features`);\n\t\t\t});\n\t\t});\n\t\t$$renderer.push(`</label> <button type=\"button\" data-tour=\"new-project-button\" class=\"inline-flex h-10 items-center justify-center gap-2 rounded-md bg-slate-900 px-4 text-sm font-medium text-white hover:bg-slate-800\"><span class=\"text-base leading-none\" aria-hidden=\"true\">+</span> New project</button></div></div></header> <section aria-labelledby=\"projects-list-title\"><div class=\"mb-3 flex flex-col gap-1 sm:flex-row sm:items-end sm:justify-between\"><div><h2 id=\"projects-list-title\" class=\"text-base font-semibold text-slate-950\">Your projects</h2> <p class=\"text-sm text-slate-500\">Open a project to inspect the features it groups.</p></div> <p class=\"text-xs text-slate-500\">${escape_html(filtered().length)} shown</p></div> `);\n\t\tif (projectsStore.loading) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<div class=\"rounded-lg border border-dashed border-hairline bg-white p-8 text-center text-sm text-slate-500\">Loading projects...</div>`);\n\t\t} else if (projectsStore.error) {\n\t\t\t$$renderer.push(\"<!--[1-->\");\n\t\t\t$$renderer.push(`<div class=\"rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-700\">${escape_html(projectsStore.error)}</div>`);\n\t\t} else if (filtered().length === 0) {\n\t\t\t$$renderer.push(\"<!--[2-->\");\n\t\t\t$$renderer.push(`<div class=\"rounded-lg border border-dashed border-hairline bg-white p-8 text-center text-sm text-slate-500\">`);\n\t\t\tif (projectsStore.summaries.length === 0) {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t$$renderer.push(`<div class=\"space-y-3\"><p>No projects yet.</p> <button type=\"button\" class=\"rounded-md bg-slate-900 px-4 py-2 text-sm font-medium text-white\">Create first project</button></div>`);\n\t\t\t} else {\n\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`No projects match your search.`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<ul class=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\"><!--[-->`);\n\t\t\tconst each_array = ensure_array_like(filtered());\n\t\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\t\tlet summary = each_array[$$index];\n\t\t\t\t$$renderer.push(`<li>`);\n\t\t\t\tProjectCard($$renderer, {\n\t\t\t\t\tsummary,\n\t\t\t\t\ttagTypeOptions: tagTypeOptions(),\n\t\t\t\t\tonAddTag: (type, value) => appendTag(summary.id, type, value),\n\t\t\t\t\tonRemoveTag: (type, value) => dropTag(summary.id, type, value),\n\t\t\t\t\tonDelete: () => handleDelete(summary.id)\n\t\t\t\t});\n\t\t\t\t$$renderer.push(`<!----></li>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></ul>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></section></div> `);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tManageTagsDialog($$renderer, {\n\t\t\topen: manageTagsOpen,\n\t\t\ttags: allTagsFlat(),\n\t\t\tonClose: () => manageTagsOpen = false,\n\t\t\tonRenamed: () => projectsStore.refreshSilent()\n\t\t});\n\t\t$$renderer.push(`<!---->`);\n\t});\n}\n//#endregion\nexport { ProjectsIndex as t };\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ProjectsIndex-DUVJ3hyL.js","sources":["../../../.svelte-kit/adapter-node/chunks/ProjectsIndex.js"],"sourcesContent":["import { G as attr, l as derived, n as onDestroy, q as escape_html, u as ensure_array_like } from \"./index-server.js\";\nimport { K as addTag, Y as removeTag, Z as tagKey, q as humanizeTagText } from \"./TagPalette.js\";\nimport { t as getBrowserContainer, v as checklistDialog, y as confirmDialog } from \"./browserContainer.js\";\nimport \"./syncEvents.js\";\nimport \"./navigation.js\";\nimport \"./tourStore.svelte.js\";\nimport { t as projectsStore } from \"./projectsStore.svelte.js\";\nimport \"./tagPaletteStore.svelte.js\";\nimport { t as featuresStore } from \"./featuresStore.svelte.js\";\nimport { t as TagDotStrip } from \"./TagDotStrip.js\";\nimport \"./projectBundleClient.js\";\nimport { t as TagFilterSelect } from \"./TagFilterSelect.js\";\nimport { t as ManageTagsDialog } from \"./ManageTagsDialog.js\";\n//#region src/features/projects/presentation/components/ProjectCard.svelte\nfunction ProjectCard($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet { summary, onDelete, onAddTag, onRemoveTag, tagTypeOptions = [], deleteLabel = \"Delete\" } = $$props;\n\t\t$$renderer.push(`<article data-tour=\"project-card\" class=\"group relative flex h-full min-h-52 flex-col justify-between overflow-hidden rounded-xl border border-cyan-100 bg-white p-5 shadow-sm shadow-cyan-950/5 transition duration-150 hover:-translate-y-0.5 hover:border-cyan-200 hover:bg-cyan-50/20 hover:shadow-md hover:shadow-cyan-950/10 focus-within:border-cyan-300\"><div class=\"absolute inset-x-0 top-0 h-1 bg-gradient-to-r from-brand-500 via-brand-mint to-violet-400\"></div> <div class=\"space-y-3\"><div class=\"flex items-start justify-between gap-3\"><a${attr(\"href\", `/projects/${summary.id}`)} class=\"block min-w-0 flex-1\"><h3 class=\"truncate text-base font-semibold text-slate-950 group-hover:text-brand-800\">${escape_html(summary.name)}</h3></a> <span class=\"shrink-0 rounded-md border border-cyan-100 bg-cyan-50 px-2 py-0.5 text-xs font-medium text-brand-800\" title=\"Features in project\">${escape_html(summary.featureCount)} feature${escape_html(summary.featureCount === 1 ? \"\" : \"s\")}</span></div> `);\n\t\tif (summary.description) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<a${attr(\"href\", `/projects/${summary.id}`)} class=\"block\"><p class=\"line-clamp-3 text-sm leading-6 text-slate-600\">${escape_html(summary.description)}</p></a>`);\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<p class=\"text-sm leading-6 text-slate-500\">No description yet. Add a note so collaborators know what belongs here.</p>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></div> <div class=\"mt-5 flex items-end justify-between gap-3 border-t border-hairline pt-3 text-xs text-slate-500\"><div class=\"min-w-0 flex-1 space-y-2\">`);\n\t\tTagDotStrip($$renderer, {\n\t\t\ttags: summary.tags,\n\t\t\tonAddTag,\n\t\t\tonRemoveTag,\n\t\t\ttypeOptions: tagTypeOptions\n\t\t});\n\t\t$$renderer.push(`<!----> <span class=\"block truncate\">Updated ${escape_html(new Date(summary.updatedAt).toLocaleDateString())}</span></div> <div class=\"flex shrink-0 items-center gap-1\"><button type=\"button\" class=\"rounded px-2 py-1 text-slate-400 opacity-0 transition group-hover:opacity-100 group-focus-within:opacity-100 hover:bg-red-50 hover:text-red-600\">${escape_html(deleteLabel)}</button></div></div></article>`);\n\t});\n}\n//#endregion\n//#region src/features/projects/presentation/components/ProjectsIndex.svelte\nfunction ProjectsIndex($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\tlet unsubscribeSync = null;\n\t\tlet tagFilter = \"all\";\n\t\tlet manageTagsOpen = false;\n\t\tlet sortBy = \"updated\";\n\t\tonDestroy(() => {\n\t\t\tunsubscribeSync?.();\n\t\t\tunsubscribeSync = null;\n\t\t});\n\t\tfunction readTags(project) {\n\t\t\tconst tags = [...project.tags ?? []];\n\t\t\tif (project.customTag?.trim()) tags.push({\n\t\t\t\ttype: project.customTagType?.trim() || \"Tag\",\n\t\t\t\tvalue: project.customTag.trim()\n\t\t\t});\n\t\t\treturn tags;\n\t\t}\n\t\tlet importing = false;\n\t\tasync function handleDelete(id) {\n\t\t\tprojectsStore.stagePendingDelete(id);\n\t\t\tconst name = projectsStore.summaries.find((s) => String(s.id) === String(id))?.name ?? \"this project\";\n\t\t\tconst container = await getBrowserContainer();\n\t\t\tconst featureIds = ((await container.useCases.getProject(id))?.featureIds ?? []).map(String);\n\t\t\tlet selectedFeatureIds = [];\n\t\t\tif (featureIds.length === 0) {\n\t\t\t\tif (!await confirmDialog({\n\t\t\t\t\ttitle: `Delete \"${name}\"?`,\n\t\t\t\t\tmessage: \"This project has no linked features. Removing it cannot be undone.\",\n\t\t\t\t\tconfirmLabel: \"Delete project\",\n\t\t\t\t\ttone: \"danger\"\n\t\t\t\t})) {\n\t\t\t\t\tprojectsStore.clearPendingDelete();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst items = await Promise.all(featureIds.map(async (fid) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: fid,\n\t\t\t\t\t\tlabel: (await container.useCases.getFeatureCard(fid))?.name ?? fid,\n\t\t\t\t\t\tdefaultChecked: true\n\t\t\t\t\t};\n\t\t\t\t}));\n\t\t\t\tconst result = await checklistDialog({\n\t\t\t\t\ttitle: `Delete \"${name}\"?`,\n\t\t\t\t\tmessage: `This project links to ${featureIds.length} feature${featureIds.length === 1 ? \"\" : \"s\"}. Tick the ones you want to delete in the same batch. Anything left unchecked stays available as an unassigned feature.`,\n\t\t\t\t\titems,\n\t\t\t\t\tconfirmLabel: \"Delete project + selected\",\n\t\t\t\t\tcancelLabel: \"Cancel\",\n\t\t\t\t\ttone: \"danger\"\n\t\t\t\t});\n\t\t\t\tif (!result.confirmed) {\n\t\t\t\t\tprojectsStore.clearPendingDelete();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tselectedFeatureIds = result.selectedIds;\n\t\t\t}\n\t\t\tfor (const fid of selectedFeatureIds) await container.useCases.deleteFeature(fid);\n\t\t\tawait projectsStore.remove(id);\n\t\t\tif (selectedFeatureIds.length > 0) await featuresStore.refreshSilent();\n\t\t}\n\t\tconst filtered = derived(() => {\n\t\t\treturn (projectsStore.search.trim().length === 0 ? [...projectsStore.summaries] : projectsStore.summaries.filter((summary) => {\n\t\t\t\tconst q = projectsStore.search.toLowerCase();\n\t\t\t\treturn summary.name.toLowerCase().includes(q) || (summary.description ?? \"\").toLowerCase().includes(q);\n\t\t\t})).filter((summary) => matchesTagFilter(summary, tagFilter)).sort((a, b) => {\n\t\t\t\treturn new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime();\n\t\t\t});\n\t\t});\n\t\tfunction matchesTagFilter(project, filter) {\n\t\t\tconst projectTags = readTags(project);\n\t\t\tif (filter === \"all\") return true;\n\t\t\tif (filter === \"untagged\") return projectTags.length === 0;\n\t\t\tconst key = tagKey(filter);\n\t\t\treturn projectTags.some((tag) => tagKey(tag) === key);\n\t\t}\n\t\tconst allTagsFlat = derived(() => {\n\t\t\tconst out = [];\n\t\t\tfor (const summary of projectsStore.summaries) for (const tag of readTags(summary)) out.push(tag);\n\t\t\treturn out;\n\t\t});\n\t\tconst tagTypeOptions = derived(() => [...new Set(allTagsFlat().map((tag) => humanizeTagText(tag.type)))].sort((a, b) => a.localeCompare(b)));\n\t\tfunction tagFilterCount(filter) {\n\t\t\treturn projectsStore.summaries.filter((s) => matchesTagFilter(s, filter)).length;\n\t\t}\n\t\tasync function appendTag(id, type, value) {\n\t\t\tconst container = await getBrowserContainer();\n\t\t\tconst project = await container.useCases.getProject(id);\n\t\t\tif (!project) return;\n\t\t\tawait container.useCases.saveProject({\n\t\t\t\t...project,\n\t\t\t\ttags: addTag(readTags(project), {\n\t\t\t\t\ttype,\n\t\t\t\t\tvalue\n\t\t\t\t})\n\t\t\t});\n\t\t\tawait projectsStore.refreshSilent();\n\t\t}\n\t\tasync function dropTag(id, type, value) {\n\t\t\tconst container = await getBrowserContainer();\n\t\t\tconst project = await container.useCases.getProject(id);\n\t\t\tif (!project) return;\n\t\t\tconst nextTags = removeTag(readTags(project), {\n\t\t\t\ttype,\n\t\t\t\tvalue\n\t\t\t});\n\t\t\tawait container.useCases.saveProject({\n\t\t\t\t...project,\n\t\t\t\ttags: nextTags,\n\t\t\t\tcustomTagType: void 0,\n\t\t\t\tcustomTag: void 0\n\t\t\t});\n\t\t\tif (tagFilter !== \"all\" && tagFilter !== \"untagged\" && tagKey(tagFilter) === tagKey({\n\t\t\t\ttype,\n\t\t\t\tvalue\n\t\t\t})) tagFilter = \"all\";\n\t\t\tawait projectsStore.refreshSilent();\n\t\t}\n\t\t$$renderer.push(`<div class=\"mx-auto max-w-7xl px-4 py-8 sm:px-6\"><header class=\"mb-6 border-b border-slate-200 pb-6\"><div class=\"flex items-center justify-between gap-3\"><p class=\"text-xs font-semibold uppercase tracking-wide text-brand-700\">Home</p> <button type=\"button\" class=\"inline-flex items-center gap-1.5 rounded-md border border-slate-300 bg-white px-3 py-1.5 text-xs font-medium text-slate-700 transition hover:border-brand-300 hover:bg-cyan-50 hover:text-brand-800 disabled:opacity-50\"${attr(\"disabled\", importing, true)} title=\"Restore a project from a .unspa file\"><span aria-hidden=\"true\">⬆</span> ${escape_html(\"Import .unspa\")}</button> <input type=\"file\" accept=\".unspa,application/octet-stream,application/json\" class=\"hidden\"/></div> <div class=\"mt-2 max-w-3xl\"><h1 class=\"text-4xl font-semibold tracking-tight text-slate-950\">Projects</h1> <p class=\"mt-2 max-w-2xl text-sm leading-6 text-slate-600\">Group related behavior models and inspect their resources, data, events, and transitions together.</p></div> <div class=\"mt-6 flex flex-col gap-3 rounded-xl border border-slate-200 bg-white p-3 shadow-sm shadow-slate-950/5 lg:flex-row lg:items-center lg:justify-between\"><div class=\"flex min-w-0 items-center rounded-lg border border-hairline bg-white p-1 lg:flex-1\"><label for=\"project-search\" class=\"sr-only\">Search projects</label> <input id=\"project-search\" type=\"search\" placeholder=\"Search projects...\"${attr(\"value\", projectsStore.search)} class=\"h-9 w-full min-w-0 rounded-md border-0 bg-transparent px-3 text-sm outline-none placeholder:text-slate-400\"/> `);\n\t\tif (projectsStore.search.trim().length > 0) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<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>`);\n\t\t} else $$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--></div> <div class=\"flex flex-col gap-2 sm:flex-row sm:items-center\">`);\n\t\tTagFilterSelect($$renderer, {\n\t\t\ttags: allTagsFlat(),\n\t\t\tvalue: tagFilter,\n\t\t\tonChange: (next) => tagFilter = next,\n\t\t\tonManage: () => manageTagsOpen = true,\n\t\t\tcountLabel: tagFilterCount\n\t\t});\n\t\t$$renderer.push(`<!----> <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> `);\n\t\t$$renderer.select({\n\t\t\tvalue: sortBy,\n\t\t\tclass: \"bg-transparent text-sm font-medium text-slate-800 outline-none\"\n\t\t}, ($$renderer) => {\n\t\t\t$$renderer.option({ value: \"updated\" }, ($$renderer) => {\n\t\t\t\t$$renderer.push(`Updated`);\n\t\t\t});\n\t\t\t$$renderer.option({ value: \"name\" }, ($$renderer) => {\n\t\t\t\t$$renderer.push(`Name`);\n\t\t\t});\n\t\t\t$$renderer.option({ value: \"count\" }, ($$renderer) => {\n\t\t\t\t$$renderer.push(`Features`);\n\t\t\t});\n\t\t});\n\t\t$$renderer.push(`</label> <button type=\"button\" data-tour=\"new-project-button\" class=\"inline-flex h-10 items-center justify-center gap-2 rounded-md bg-slate-900 px-4 text-sm font-medium text-white hover:bg-slate-800\"><span class=\"text-base leading-none\" aria-hidden=\"true\">+</span> New project</button></div></div></header> <section aria-labelledby=\"projects-list-title\"><div class=\"mb-3 flex flex-col gap-1 sm:flex-row sm:items-end sm:justify-between\"><div><h2 id=\"projects-list-title\" class=\"text-base font-semibold text-slate-950\">Your projects</h2> <p class=\"text-sm text-slate-500\">Open a project to inspect the features it groups.</p></div> <p class=\"text-xs text-slate-500\">${escape_html(filtered().length)} shown</p></div> `);\n\t\tif (projectsStore.loading) {\n\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t$$renderer.push(`<div class=\"rounded-lg border border-dashed border-hairline bg-white p-8 text-center text-sm text-slate-500\">Loading projects...</div>`);\n\t\t} else if (projectsStore.error) {\n\t\t\t$$renderer.push(\"<!--[1-->\");\n\t\t\t$$renderer.push(`<div class=\"rounded-lg border border-red-200 bg-red-50 p-4 text-sm text-red-700\">${escape_html(projectsStore.error)}</div>`);\n\t\t} else if (filtered().length === 0) {\n\t\t\t$$renderer.push(\"<!--[2-->\");\n\t\t\t$$renderer.push(`<div class=\"rounded-lg border border-dashed border-hairline bg-white p-8 text-center text-sm text-slate-500\">`);\n\t\t\tif (projectsStore.summaries.length === 0) {\n\t\t\t\t$$renderer.push(\"<!--[0-->\");\n\t\t\t\t$$renderer.push(`<div class=\"space-y-3\"><p>No projects yet.</p> <button type=\"button\" class=\"rounded-md bg-slate-900 px-4 py-2 text-sm font-medium text-white\">Create first project</button></div>`);\n\t\t\t} else {\n\t\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t\t$$renderer.push(`No projects match your search.`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></div>`);\n\t\t} else {\n\t\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t\t$$renderer.push(`<ul class=\"grid grid-cols-1 gap-4 sm:grid-cols-2 lg:grid-cols-3\"><!--[-->`);\n\t\t\tconst each_array = ensure_array_like(filtered());\n\t\t\tfor (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n\t\t\t\tlet summary = each_array[$$index];\n\t\t\t\t$$renderer.push(`<li>`);\n\t\t\t\tProjectCard($$renderer, {\n\t\t\t\t\tsummary,\n\t\t\t\t\ttagTypeOptions: tagTypeOptions(),\n\t\t\t\t\tonAddTag: (type, value) => appendTag(summary.id, type, value),\n\t\t\t\t\tonRemoveTag: (type, value) => dropTag(summary.id, type, value),\n\t\t\t\t\tonDelete: () => handleDelete(summary.id)\n\t\t\t\t});\n\t\t\t\t$$renderer.push(`<!----></li>`);\n\t\t\t}\n\t\t\t$$renderer.push(`<!--]--></ul>`);\n\t\t}\n\t\t$$renderer.push(`<!--]--></section></div> `);\n\t\t$$renderer.push(\"<!--[-1-->\");\n\t\t$$renderer.push(`<!--]--> `);\n\t\tManageTagsDialog($$renderer, {\n\t\t\topen: manageTagsOpen,\n\t\t\ttags: allTagsFlat(),\n\t\t\tonClose: () => manageTagsOpen = false,\n\t\t\tonRenamed: () => projectsStore.refreshSilent()\n\t\t});\n\t\t$$renderer.push(`<!---->`);\n\t});\n}\n//#endregion\nexport { ProjectsIndex as t };\n"],"names":[],"mappings":"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"}
|