@memoarchitect/architect 0.8.26 → 0.10.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/assets/{AiWorkspace-Z3BbnmaP.js → AiWorkspace-DABn1bcB.js} +2 -2
- package/dist/assets/{AnalysisWorkspace-DjaUOo7U.js → AnalysisWorkspace-B8CYPLNe.js} +1 -1
- package/dist/assets/{ComplianceWizard-DKxZ1z25.js → ComplianceWizard-DqeyOz4M.js} +1 -1
- package/dist/assets/DSMView-V3iNMXFW.js +5 -0
- package/dist/assets/{Dashboard-CYT7KjqU.js → Dashboard-BQj09cZH.js} +1 -1
- package/dist/assets/{DhfDashboard-DacdOtkU.js → DhfDashboard-K1p89I1a.js} +1 -1
- package/dist/assets/{DhfWorkbench-CIhopT8J.js → DhfWorkbench-BqS0Z41-.js} +3 -3
- package/dist/assets/DiagramCanvas-BkKlNUeI.js +4 -0
- package/dist/assets/DiagramEditor-D6CT8dNm.js +4 -0
- package/dist/assets/{ElementDetailView-D5XvAL_i.js → ElementDetailView-D1ydy4ml.js} +2 -2
- package/dist/assets/{ExplorerTreeRow-DUmcEsqf.js → ExplorerTreeRow-DNlv-JxW.js} +1 -1
- package/dist/assets/{ImportView-9y1nhQS4.js → ImportView-RFKKNv71.js} +1 -1
- package/dist/assets/{LayerGrid-bhFpOIbe.js → LayerGrid-D0ulV2Rw.js} +1 -1
- package/dist/assets/{LayerTable-RuswZVUI.js → LayerTable-CZR1_QVc.js} +1 -1
- package/dist/assets/{MaxGraphCanvas-D3BXQK2y.js → MaxGraphCanvas-iQCvQs_L.js} +1 -1
- package/dist/assets/{ModelDiff-Cl2dhlk3.js → ModelDiff-CNpUtYV1.js} +1 -1
- package/dist/assets/OntologyDecompositionDiagram-DsCM8X-l.js +1 -0
- package/dist/assets/{OntologyViewer-VOrKTRuQ.js → OntologyViewer-Cx5WU_uI.js} +2 -2
- package/dist/assets/{ReviewDashboard--LMXZ3F4.js → ReviewDashboard-B6tw6wBJ.js} +1 -1
- package/dist/assets/{ScenarioEditor-bB4iBbgO.js → ScenarioEditor-B_M819qh.js} +1 -1
- package/dist/assets/{StatisticsDashboard-iXimfU20.js → StatisticsDashboard-DDsFeIAZ.js} +1 -1
- package/dist/assets/{TabularView-DnIfq-TB.js → TabularView-kcWhQVcI.js} +1 -1
- package/dist/assets/TraceabilityMatrix-DGny6KvJ.js +3 -0
- package/dist/assets/{UiScreensWorkspace-Cs1ivqzc.js → UiScreensWorkspace-BpIx67i-.js} +1 -1
- package/dist/assets/{WorkflowWizard-C7jI6C59.js → WorkflowWizard-D9NwvOlw.js} +1 -1
- package/dist/assets/index-BFvU1nLo.js +4067 -0
- package/dist/assets/index-BVySIRo1.css +1 -0
- package/dist/assets/{index.es-DABt8CUc.js → index.es-BxzJo0aw.js} +1 -1
- package/dist/assets/{jspdf.es.min-G-Vwo9yG.js → jspdf.es.min-B7Dh4CBm.js} +3 -3
- package/dist/assets/notation-scene-BB2meNb3.js +1 -0
- package/dist/index.html +2 -2
- package/dist-standalone/index.html +209 -209
- package/lib/bin/memo-architect.js +15 -6
- package/lib/bin/memo-architect.js.map +1 -1
- package/package.json +3 -3
- package/dist/assets/DSMView-DJhmrXYm.js +0 -5
- package/dist/assets/DiagramCanvas-CLE_nv7Y.js +0 -4
- package/dist/assets/DiagramEditor-puQuE8gB.js +0 -4
- package/dist/assets/OntologyDecompositionDiagram-aONGngg4.js +0 -1
- package/dist/assets/TraceabilityMatrix-eilGn6Sr.js +0 -3
- package/dist/assets/index-CG-gfw-s.js +0 -4067
- package/dist/assets/index-DXB4CKwW.css +0 -1
- package/dist/assets/notation-scene-DLZms6VR.js +0 -1
|
@@ -20,10 +20,17 @@ function toolchainOptionsFrom(options) {
|
|
|
20
20
|
.filter(name => options[name] !== undefined)
|
|
21
21
|
.map(name => [name, options[name]]));
|
|
22
22
|
}
|
|
23
|
-
/**
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Architect is a SysML workbench, so its validity verdict comes from the
|
|
25
|
+
* compiler of record unless the caller deliberately selects another validator.
|
|
26
|
+
* The internal provider still lowers the model into Architect's IR; it is not
|
|
27
|
+
* allowed to redefine what valid SysML means.
|
|
28
|
+
*/
|
|
29
|
+
function architectDevToolchainOptions(options) {
|
|
30
|
+
const selected = toolchainOptionsFrom(options);
|
|
31
|
+
return selected['toolchain.validator'] === undefined
|
|
32
|
+
? { ...selected, 'toolchain.validator': 'syside' }
|
|
33
|
+
: selected;
|
|
27
34
|
}
|
|
28
35
|
program
|
|
29
36
|
.name('memo-architect')
|
|
@@ -77,13 +84,15 @@ applyToolchainCliOptions(program
|
|
|
77
84
|
const open = resolveOption(this, 'open', options.open);
|
|
78
85
|
const experimental = resolveOption(this, 'experimental', options.experimental);
|
|
79
86
|
const keepAlive = resolveOption(this, 'keepAlive', options.keepAlive);
|
|
87
|
+
const toolchainOptions = architectDevToolchainOptions(options);
|
|
80
88
|
await architectDevCommand({
|
|
81
89
|
port: Number.parseInt(String(port), 10),
|
|
82
90
|
open,
|
|
83
91
|
featureGrants: resolveFeatureGrants({ experimental }),
|
|
84
92
|
keepAlive: keepAlive === true,
|
|
85
|
-
toolchainOptions
|
|
86
|
-
toolchainArgv:
|
|
93
|
+
toolchainOptions,
|
|
94
|
+
toolchainArgv: Object.entries(toolchainOptions)
|
|
95
|
+
.flatMap(([name, value]) => [`--${name}`, String(value)]),
|
|
87
96
|
});
|
|
88
97
|
});
|
|
89
98
|
program
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memo-architect.js","sourceRoot":"","sources":["../../src/bin/memo-architect.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EACH,uBAAuB,EAAE,qBAAqB,EAAE,sBAAsB,GACzE,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,6BAA6B,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEtG,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B;;;;;;;GAOG;AACH,MAAM,sBAAsB,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AAEjF,SAAS,oBAAoB,CAAC,OAAgC;IAC1D,OAAO,MAAM,CAAC,WAAW,CACrB,sBAAsB;SACjB,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;SAC3C,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAC1C,CAAC;AACN,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"memo-architect.js","sourceRoot":"","sources":["../../src/bin/memo-architect.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memoarchitect/architect",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.10.5",
|
|
4
4
|
"description": "MEMO Architect — interactive workbench and distributable viewer for medical device systems engineering",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
"test:cli": "vitest run --config vitest.cli.config.ts"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@memoarchitect/ontology": "0.
|
|
47
|
-
"@memoarchitect/tools": "0.
|
|
46
|
+
"@memoarchitect/ontology": "^0.10.0",
|
|
47
|
+
"@memoarchitect/tools": "^0.10.0",
|
|
48
48
|
"class-variance-authority": "^0.7.1",
|
|
49
49
|
"clsx": "^2.1.1",
|
|
50
50
|
"commander": "^12.1.0",
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{j as t}from"./reactflow-C9OlmOYw.js";import{a as w}from"./zustand-CrhqMOHB.js";import{_ as at,C as d,F as z,h as Se,S as Ke,T as ge,u as ue,i as lt,r as ae,j as dt}from"./index-CG-gfw-s.js";import{I as G,a as ct,T as pt,b as Oe}from"./DiagramToolbarControls-XMGLx08e.js";const ut=["composes","composedOf","decomposedBy","aggregation","includes","includesStep","containsEvent","moduleUses"];function ye(e){const a=new Set(e.relationships.map(n=>n.type));return ut.filter(n=>a.has(n))}function Ve(e){return[...new Set(e.relationships.map(a=>a.type))].sort()}function qe(e){const a=new Map;for(const n of Object.values(e.elements)){const o=n.layer||"unassigned";let s=a.get(o);s||(s=new Map,a.set(o,s)),s.set(n.kind,(s.get(n.kind)??0)+1)}return[...a.entries()].map(([n,o])=>({layer:n,elementCount:[...o.values()].reduce((s,i)=>s+i,0),kinds:[...o.entries()].map(([s,i])=>({kind:s,elementCount:i})).sort((s,i)=>i.elementCount-s.elementCount||s.kind.localeCompare(i.kind))})).sort((n,o)=>o.elementCount-n.elementCount||n.layer.localeCompare(o.layer))}function Ye(e,a){const n=new Set(a??ye(e)),o=new Map;for(const i of e.relationships){if(n.has(i.type))continue;const p=e.elements[i.sourceId],l=e.elements[i.targetId];!p||!l||p.layer!==l.layer||o.set(p.layer,(o.get(p.layer)??0)+1)}const s=qe(e);if(s.length!==0)return[...s].sort((i,p)=>(o.get(p.layer)??0)-(o.get(i.layer)??0)||p.elementCount-i.elementCount||i.layer.localeCompare(p.layer))[0].layer}function Dt(e,a){const n=new Set(ye(e)),o=new Map;for(const l of e.relationships){if(n.has(l.type))continue;const u=e.elements[l.sourceId],f=e.elements[l.targetId];if(!u||!f||u.layer===f.layer)continue;const k=`${u.layer}>${f.layer}`;o.set(k,(o.get(k)??0)+1)}const s=[...o.entries()].sort((l,u)=>u[1]-l[1]||l[0].localeCompare(u[0]))[0];if(!s){const l=Ye(e,a);return{rows:l,columns:l}}const[i,p]=s[0].split(">");return{rows:i,columns:p}}function ht(e,a){const n=new Map;for(const s of Object.values(e.elements)){const i=s.parentAction??s.owner;i&&e.elements[i]&&n.set(s.id,i)}const o=new Set(a);for(const s of e.relationships)o.has(s.type)&&(!e.elements[s.sourceId]||!e.elements[s.targetId]||s.sourceId!==s.targetId&&n.set(s.targetId,s.sourceId));for(const s of[...n.keys()]){const i=new Set([s]);let p=n.get(s);for(;p;){if(i.has(p)){n.delete(p);break}i.add(p),p=n.get(p)}}return n}function ft(e,a){const n=[],o=new Set([e]);let s=a.get(e);for(;s&&!o.has(s);)n.push(s),o.add(s),s=a.get(s);return n}function ze(e,a,n,o,s){const i=new Set((o==null?void 0:o.kinds)??[]),p=new Set((o==null?void 0:o.elementIds)??[]),l=b=>(!(o!=null&&o.layer)||b.layer===o.layer)&&(i.size===0||i.has(b.kind))&&(p.size===0||p.has(b.id)),u=new Set;for(const b of Object.values(e.elements))if(l(b)){u.add(b.id);for(const v of ft(b.id,a))u.add(v)}const f=new Map,k=b=>{const v=f.get(b);if(v)return v;const R=[b];f.set(b,R);for(const A of n.get(b)??[])A!==b&&R.push(...k(A));return R},c=new Map,x=(b,v)=>{const R=c.get(b);if(R)return R;const A=e.elements[b],P={id:b,name:(A==null?void 0:A.name)??b,kind:(A==null?void 0:A.kind)??"Unknown",layer:(A==null?void 0:A.layer)??"",isElement:!0,children:[],members:k(b),depth:v};return c.set(b,P),P.children=(n.get(b)??[]).filter(D=>u.has(D)&&D!==b).map(D=>x(D,v+1)),P};let g=[...u].filter(b=>{const v=a.get(b);return!v||!u.has(v)}).map(b=>x(b,0));s&&(g=xt(g,e));const S=new Map,m=new Map,C=(b,v)=>{v&&m.set(b.id,v),b.children.forEach(R=>C(R,b));for(const R of b.members)S.has(R)||S.set(R,b)};return g.forEach(b=>C(b,void 0)),{roots:g,ownerOf:S,parentNodeOf:m}}function xt(e,a){var p;const n=[],o=new Map,s=l=>{const u=l.join("::"),f=o.get(u);if(f)return f;const k={id:`pkg:${u}`,name:l[l.length-1],kind:"Package",layer:"",isElement:!1,children:[],members:[],depth:l.length-1};return o.set(u,k),l.length===1?n.push(k):s(l.slice(0,-1)).children.push(k),k};for(const l of e){const u=(p=a.elements[l.id])==null?void 0:p.package;if(!u){n.push(l);continue}s(u.split("::")).children.push(l)}const i=(l,u)=>{l.depth=u,l.children.forEach(f=>i(f,u+1)),l.isElement||(l.members=l.children.flatMap(f=>f.members))};return n.forEach(l=>i(l,0)),n}function De(e,a,n){const o=(l,u)=>l.name.localeCompare(u.name),s=(l,u)=>l.kind.localeCompare(u.kind)||o(l,u),i=l=>l.length<2?l:a==="natural"?[...l].sort(o):a==="kind"?[...l].sort(s):a==="partition"?gt(l,n):mt(l,n),p=l=>{const u=i(l);for(const f of u)f.children=p(f.children);return u};return p(e)}function gt(e,a){const n=[...e].sort((s,i)=>s.name.localeCompare(i.name)),o=[];for(;n.length>0;){const s=n.filter(i=>!n.some(p=>p!==i&&a(p,i)));if(s.length===0){o.push(...n);break}for(const i of s)o.push(i),n.splice(n.indexOf(i),1)}return o}function mt(e,a){const n=e.map((i,p)=>p),o=i=>n[i]===i?i:n[i]=o(n[i]);for(let i=0;i<e.length;i++)for(let p=i+1;p<e.length;p++)(a(e[i],e[p])||a(e[p],e[i]))&&(n[o(i)]=o(p));const s=new Map;return e.forEach((i,p)=>{const l=o(p),u=s.get(l);u?u.push(i):s.set(l,[i])}),[...s.values()].map(i=>i.sort((p,l)=>p.name.localeCompare(l.name))).sort((i,p)=>p.length-i.length||i[0].name.localeCompare(p[0].name)).flat()}function Ne(e,a){const n=[],o=(s,i,p)=>{const l=s.children.length>0,u=l&&a.has(s.id);if(n.push({node:s,index:n.length+1,depth:i,expandable:l,expanded:u,ancestorIds:p,memberCount:s.members.length}),!u)return;const f=[...p,s.id];for(const k of s.children)o(k,i+1,f)};return e.forEach(s=>o(s,0,[])),n}function he(e,a=1/0){const n=[],o=(s,i)=>{i>=a||(s.children.length>0&&n.push(s.id),s.children.forEach(p=>o(p,i+1)))};return e.forEach(s=>o(s,0)),n}function Be(e,a={}){var Q,K,Y,V;const n=a.containmentTypes??ye(e),o=ht(e,n),s=new Map;for(const[h,$]of o){const O=s.get($);O?O.push(h):s.set($,[h])}const i=new Set(a.dependencyTypes??[]),p=h=>(i.size===0||i.has(h.type))&&!n.includes(h.type),l=e.relationships.filter(p),u=a.groupByPackage??!1,f=ze(e,o,s,a.rows,u),k=ze(e,o,s,a.columns,u),c=h=>{const $=new Set,O=E=>{const L=[];let T=h.ownerOf.get(E);for(;T;)L.push(T.id),T=h.parentNodeOf.get(T.id);return L},F=(E,L)=>{for(const T of O(E))for(const W of O(L))T!==W&&$.add(`${T}>${W}`)};for(const E of l)F(E.sourceId,E.targetId),a.symmetric&&F(E.targetId,E.sourceId);return(E,L)=>E!==L&&$.has(`${E.id}>${L.id}`)},x=a.ordering??"natural",j=De(f.roots,((Q=a.rows)==null?void 0:Q.ordering)??x,c(f)),g=De(k.roots,((K=a.columns)==null?void 0:K.ordering)??x,c(k)),S=Ne(j,((Y=a.rows)==null?void 0:Y.expanded)??new Set),m=Ne(g,((V=a.columns)==null?void 0:V.expanded)??new Set),C=new Map;S.forEach((h,$)=>C.set(h.node.id,$));const b=new Map;m.forEach((h,$)=>b.set(h.node.id,$));const v=(h,$,O)=>{let F=$.ownerOf.get(h);const E=new Set;for(;F&&!E.has(F.id);){E.add(F.id);const L=O.get(F.id);if(L!==void 0)return L;F=$.parentNodeOf.get(F.id)}},R=Array.from({length:S.length},()=>Array.from({length:m.length},()=>null));let A=0,P=0;const D=(h,$,O)=>{const F=v($,f,C),E=v(O,k,b);if(F===void 0||E===void 0)return;const L=S[F],T=m[E],W=L.node.id===T.node.id;let _=R[F][E];_||(_={strength:0,types:[],relationshipIds:[],diagonal:W,aggregated:L.node.id!==$||T.node.id!==O},R[F][E]=_),_.strength++,(L.node.id!==$||T.node.id!==O)&&(_.aggregated=!0),_.types.includes(h.type)||_.types.push(h.type),_.relationshipIds.push(h.id),W?P++:A++};for(const h of l)D(h,h.sourceId,h.targetId),a.symmetric&&D(h,h.targetId,h.sourceId);return{rowRoots:j,columnRoots:g,rows:S,columns:m,matrix:R,totalDependencies:A,candidateDependencies:l.length,elementCount:Object.keys(e.elements).length,stats:yt(S,m,R,P),availableDependencyTypes:Ve(e)}}function yt(e,a,n,o){const s=new Map;a.forEach((k,c)=>s.set(k.node.id,c));let i=0,p=0,l=0,u=0;const f=new Array(a.length).fill(0);e.forEach((k,c)=>{let x=0;n[c].forEach((j,g)=>{if(!j||j.diagonal)return;x+=j.strength,f[g]+=j.strength;const S=s.get(k.node.id);S!==void 0&&g<S&&(i+=j.strength)}),u=Math.max(u,x)}),e.forEach((k,c)=>{const x=n[c].some(S=>S&&!S.diagonal),j=s.get(k.node.id),g=j!==void 0&&n.some(S=>S[j]&&!S[j].diagonal);!x&&!g&&l++});for(let k=0;k<e.length;k++){const c=s.get(e[k].node.id);if(c!==void 0)for(let x=0;x<a.length;x++){const j=n[k][x];if(!j||j.diagonal||x>=c)continue;const g=e.findIndex(S=>S.node.id===a[x].node.id);g>=0&&n[g][c]&&p++}}return f.forEach(k=>{u=Math.max(u,k)}),{feedback:i,couplings:p,isolated:l,maxDegree:u,internal:o}}const We=new Set(["Function","Function","UserActivity"]),_e=new Set(["System","Subsystem","Component","LogicalComponent","SoftwareComponent","SoftwareModule","Software"]);function bt(e){var f,k;const a=[],n=[];for(const c of Object.values(e.elements))We.has(c.kind)&&a.push(c),_e.has(c.kind)&&n.push(c);const o=[],s=new Set,i=new Map;for(const c of n)i.set(c.id,[]);for(const c of e.relationships){if(c.type!=="allocatedTo")continue;const x=e.elements[c.sourceId],j=e.elements[c.targetId];!x||!j||We.has(x.kind)&&_e.has(j.kind)&&(o.push({functionId:x.id,functionName:x.name,targetId:j.id,targetName:j.name}),s.add(x.id),i.has(j.id)||i.set(j.id,[]),i.get(j.id).push(x.id))}for(const c of a)if(c.allocatedTo&&!s.has(c.id)){const x=n.find(j=>j.name===c.allocatedTo||j.id===c.allocatedTo);x&&(o.push({functionId:c.id,functionName:c.name,targetId:x.id,targetName:x.name}),s.add(c.id),i.has(x.id)||i.set(x.id,[]),i.get(x.id).push(c.id))}const p=[];let l=0;for(const c of a)s.has(c.id)||p.push({id:`ci-${l++}`,type:"unallocated-function",severity:"warning",elementId:c.id,elementName:c.name,message:`Function "${c.name}" is not allocated to any component`});for(const c of n){const x=i.get(c.id);(!x||x.length===0)&&p.push({id:`ci-${l++}`,type:"no-functions-allocated",severity:"info",elementId:c.id,elementName:c.name,message:`Component "${c.name}" has no functions allocated to it`})}const u=new Map;for(const c of o)u.set(c.functionId,c.targetId);for(const c of e.relationships){if(c.type!=="flow")continue;const x=u.get(c.sourceId),j=u.get(c.targetId);if(x&&j&&x!==j){const g=e.elements[c.sourceId],S=e.elements[c.targetId];g&&S&&p.push({id:`ci-${l++}`,type:"cross-component-flow",severity:"info",elementId:c.sourceId,elementName:g.name,message:`Flow from "${g.name}" to "${S.name}" crosses component boundary (${(f=e.elements[x])==null?void 0:f.name} → ${(k=e.elements[j])==null?void 0:k.name})`,relatedIds:[c.targetId,x,j]})}}return{allocations:o,componentFunctions:i,issues:p,functions:a,structures:n}}function wt(e){const a=String(e);return/[",\r\n]/.test(a)?`"${a.replace(/"/g,'""')}"`:a}function Ze(e){return e?String(e.strength):""}function kt(e){const n=[["Row","Element type","Row index",...e.columns.map(o=>`${o.index}. ${o.node.name}`)]];return e.rows.forEach((o,s)=>{const i=[`${" ".repeat(o.depth)}${o.node.name}`,o.node.kind,o.index];e.columns.forEach((p,l)=>{const u=e.matrix[s][l];i.push(o.node.id===p.node.id?Ze(u):u?String(u.strength):"")}),n.push(i)}),`\uFEFF${n.map(o=>o.map(wt).join(",")).join(`\r
|
|
2
|
-
`)}\r
|
|
3
|
-
`}function jt(e,a="memo-dsm.csv"){const n=new Blob([kt(e)],{type:"text/csv;charset=utf-8"}),o=URL.createObjectURL(n),s=document.createElement("a");s.href=o,s.download=a,s.click(),URL.revokeObjectURL(o)}async function vt(e,a="memo-dsm.xlsx"){const n=await at(()=>import("./xlsx-CkFp8p6R.js"),[]),o=[["Row","Element type","Row index",...e.columns.map(f=>`${f.index}. ${f.node.name}`)]];e.rows.forEach((f,k)=>{const c=[`${" ".repeat(f.depth)}${f.node.name}`,f.node.kind,f.index];e.columns.forEach((x,j)=>{const g=e.matrix[k][j];c.push(f.node.id===x.node.id?Ze(g):g?g.strength:"")}),o.push(c)});const s=n.utils.aoa_to_sheet(o);s["!rows"]=[{hpx:24},...e.rows.map(f=>({level:Math.min(7,f.depth),hidden:f.depth>0}))],s["!cols"]=[{wch:34},{wch:22},{wch:11},...e.columns.map(f=>({wch:Math.max(8,Math.min(26,f.node.name.length+2)),level:Math.min(7,f.depth),hidden:f.depth>0}))];const i=n.utils.book_new();n.utils.book_append_sheet(i,s,"DSM");const p=n.write(i,{bookType:"xlsx",type:"array",compression:!0}),l=URL.createObjectURL(new Blob([p],{type:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"})),u=document.createElement("a");u.href=l,u.download=a,u.click(),URL.revokeObjectURL(l)}const Qe=300,ve=24,St=9e4;function oe(e){return e<=0?"2px solid #94A3B8":e===1?"1px solid #B6C4D0":`1px solid ${d.borderLight}`}function Pe(e){return e.map((a,n)=>{if(n===0)return null;const o=e[n-1];return a.ancestorIds.includes(o.node.id)?null:Math.min(a.depth,o.depth)})}function Ct({result:e,onToggleRow:a,onToggleColumn:n,onSelectElement:o,selectedElementId:s,renderCell:i,onCellClick:p,onCellDoubleClick:l,cellSize:u=26,showColumnNames:f=!1,onHideRow:k,onHideColumn:c,cornerHeader:x,footer:j}){const[g,S]=w.useState(null),{rows:m,columns:C,matrix:b}=e,v=w.useMemo(()=>Pe(m),[m]),R=w.useMemo(()=>Pe(C),[C]),A=Math.max(10,Math.round(u*.34)),P=Math.max(11,Math.round(u*.34)),D=h=>h.ancestorIds[0]??h.node.id,Q=h=>h.length>ve?`${h.slice(0,ve-1)}…`:h,K=Math.min(ve,Math.max(0,...C.map(h=>h.node.name.length))),Y=Math.max(x?76:0,f?42+(K+2)*P*.62:44);if(m.length===0||C.length===0)return t.jsx("div",{className:"flex-1 flex items-center justify-center",style:{padding:"40px"},children:t.jsxs("div",{style:{textAlign:"center",maxWidth:"340px"},children:[t.jsx("div",{style:{fontSize:"34px",opacity:.35,marginBottom:"10px"},children:"▦"}),t.jsx("h3",{style:{fontSize:z.md,fontWeight:600,color:d.secondary,marginBottom:"6px"},children:"Nothing to plot"}),t.jsx("p",{style:{fontSize:z.xs,color:d.faint,lineHeight:1.6},children:"No element matches the chosen row and column types. Widen either axis, or clear the type filter to see the whole model."})]})});const V=m.length*C.length>St;return t.jsxs("div",{style:{padding:"14px",overflow:"auto",flex:1},children:[V&&t.jsxs("div",{style:{marginBottom:"10px",padding:"8px 10px",borderRadius:"6px",background:"#FEF3C7",border:"1px solid #FCD34D",fontSize:z.xs,color:"#92400E"},children:[m.length.toLocaleString()," × ",C.length.toLocaleString()," is past what stays responsive to draw. Collapse a few subsystems, or narrow the row and column types."]}),!V&&t.jsxs("div",{style:{display:"inline-block",minWidth:"100%"},children:[t.jsxs("div",{style:{display:"flex",position:"sticky",top:0,zIndex:20,background:d.surface},children:[t.jsx("div",{style:{width:Qe,flexShrink:0,height:Y,display:"flex",alignItems:x?"stretch":"flex-end",justifyContent:"flex-end",gap:"5px",padding:x?"8px 12px":"0 8px 3px 0",fontSize:"10px",color:d.faint,background:x?d.surfaceAlt:void 0,borderRight:x?`1px solid ${d.border}`:void 0,borderBottom:`1px solid ${d.border}`},children:x??t.jsxs("span",{children:[m.length," rows ","×"," ",C.length," cols"]})}),C.map((h,$)=>{const O=(g==null?void 0:g.column)===$;return t.jsxs("div",{onClick:()=>h.expandable?n(h.node.id):o==null?void 0:o(h.node.id),onMouseEnter:()=>S({row:m.findIndex(F=>F.node.id===h.node.id),column:$}),onMouseLeave:()=>S(null),title:`${h.index}. ${h.node.name} (${h.node.kind})${h.expandable?" — click to expand":""}`,style:{width:u,flexShrink:0,height:Y,position:"relative",cursor:"pointer",borderLeft:R[$]===null?void 0:oe(R[$]),borderRight:$===C.length-1?oe(0):void 0,borderBottom:`1px solid ${d.border}`,background:O?"#EAF7F3":"transparent"},children:[f&&t.jsxs("div",{style:{position:"absolute",top:"42px",bottom:"4px",left:0,right:0,display:"flex",alignItems:"center",justifyContent:"flex-start",writingMode:"vertical-rl",transform:"rotate(180deg)",overflow:"hidden",fontSize:`${P}px`,lineHeight:1,color:O?d.primary:d.muted,fontWeight:600},children:[h.expandable?h.expanded?"− ":"+ ":"",Q(h.node.name)]}),t.jsx("div",{style:{position:"absolute",top:"3px",width:"100%",left:0,display:"block",textAlign:"center",fontSize:`${Math.max(10,A-2)}px`,color:O?d.primary:d.faint,fontWeight:O?700:400},children:t.jsx("span",{children:h.index})}),h.node.isElement&&c&&t.jsx("span",{style:{position:"absolute",top:"22px",left:"50%",transform:"translateX(-50%)"},children:t.jsx(Je,{title:`Hide ${h.node.name} column`,ariaLabel:`Hide ${h.node.name} column`,onClick:()=>c(h.node.id)})})]},h.node.id)})]}),m.map((h,$)=>{const O=(g==null?void 0:g.row)===$,F=s===h.node.id;return t.jsxs("div",{style:{display:"flex",borderTop:v[$]===null?void 0:oe(v[$]),borderBottom:$===m.length-1?oe(0):void 0},children:[t.jsx($t,{entry:h,height:u,fontSize:P,onHide:h.node.isElement&&k?()=>k(h.node.id):void 0,hovered:O,selected:F,onToggle:()=>a(h.node.id),onSelect:()=>o==null?void 0:o(h.node.id)}),C.map((E,L)=>{const T=b[$][L],W=i?i(T,h,E):It(T),_=(g==null?void 0:g.row)===$||(g==null?void 0:g.column)===L,de=D(h)===D(E),J=h.node.id===E.node.id,H=W.background??(J?"#E3E8EE":_?"#F1F7F5":de?"#FAFBFC":d.surface),ce=W.text,ee=!!T||W.actionable;return t.jsx("div",{onMouseEnter:()=>S({row:$,column:L}),onMouseLeave:()=>S(null),onClick:ee?()=>p==null?void 0:p(h,E,T):void 0,onDoubleClick:ee?()=>l==null?void 0:l(h,E,T):void 0,title:W.title??Et(T,h,E),style:{width:u,height:u,flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",fontSize:`${A}px`,fontWeight:600,color:W.color??(J?d.faint:d.secondary),background:H,borderRight:L===C.length-1?oe(0):`1px solid ${d.borderLight}`,borderBottom:`1px solid ${d.borderLight}`,borderLeft:R[L]===null?void 0:oe(R[L]),cursor:ee?"pointer":"default",outline:(g==null?void 0:g.row)===$&&(g==null?void 0:g.column)===L?`2px solid ${d.accent}`:void 0,outlineOffset:"-2px"},children:ce},E.node.id)})]},h.node.id)})]}),j]})}function Je({title:e,ariaLabel:a,onClick:n}){return t.jsx("button",{type:"button",title:e,"aria-label":a,onClick:o=>{o.stopPropagation(),n()},style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:"18px",height:"18px",padding:0,border:"none",borderRadius:"4px",background:"rgba(255,255,255,0.82)",color:d.muted,cursor:"pointer"},children:t.jsxs("svg",{width:"13",height:"13",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[t.jsx("path",{d:"M1.5 8s2.3-4 6.5-4 6.5 4 6.5 4-2.3 4-6.5 4-6.5-4-6.5-4Z"}),t.jsx("circle",{cx:"8",cy:"8",r:"2"})]})})}function $t({entry:e,height:a,fontSize:n,hovered:o,selected:s,onToggle:i,onSelect:p,onHide:l}){const u=e.depth*14,f={width:Qe,flexShrink:0,height:a,display:"flex",alignItems:"center",gap:"5px",paddingLeft:`${6+u}px`,paddingRight:"7px",position:"sticky",left:0,zIndex:10,background:s?"#E8F8F3":o?"#F1F7F5":d.surface,borderRight:`1px solid ${d.border}`,borderBottom:`1px solid ${d.borderLight}`,fontSize:`${n}px`,color:o||s?d.primary:d.secondary,fontWeight:e.expandable?600:400};return t.jsxs("div",{style:f,children:[t.jsx("span",{style:{fontSize:`${Math.max(10,n-3)}px`,color:d.faint,width:"18px",textAlign:"center",flexShrink:0},children:e.index}),t.jsx("span",{style:{width:"18px",height:"18px",flexShrink:0},children:l&&t.jsx(Je,{title:`Hide ${e.node.name} row`,ariaLabel:`Hide ${e.node.name} row`,onClick:l})}),t.jsx("button",{type:"button",onClick:e.expandable?i:void 0,"aria-label":e.expandable?`${e.expanded?"Collapse":"Expand"} ${e.node.name}`:void 0,disabled:!e.expandable,style:{width:"13px",height:"13px",flexShrink:0,padding:0,lineHeight:"11px",borderRadius:"3px",fontSize:`${Math.max(11,n-2)}px`,border:e.expandable?`1px solid ${d.border}`:"1px solid transparent",background:e.expandable?d.surface:"transparent",color:d.muted,cursor:e.expandable?"pointer":"default"},children:e.expandable?e.expanded?"−":"+":""}),t.jsx("span",{style:{width:"3px",height:"13px",borderRadius:"2px",flexShrink:0,background:e.node.isElement?Se[e.node.layer]||"#9CA3AF":"#CBD5E1"}}),t.jsx("span",{onClick:p,title:`${e.node.name} (${e.node.kind})`,style:{flex:1,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",cursor:"pointer"},children:e.node.name}),e.expandable&&!e.expanded&&e.memberCount>1&&t.jsx("span",{style:{fontSize:`${Math.max(10,n-3)}px`,color:d.faint},title:`${e.memberCount} elements rolled up`,children:e.memberCount})]})}function It(e){return e?e.diagonal?{text:String(e.strength),color:d.muted}:{text:String(e.strength),color:d.primary}:{}}function Et(e,a,n){const o=`${a.node.name} → ${n.node.name}`;if(!e)return a.node.id===n.node.id?`${a.node.name}: no internal dependencies`:o;if(e.diagonal)return`${a.node.name}: ${e.strength} internal dependenc${e.strength===1?"y":"ies"}`;const s=e.types.join(", ");return`${o}
|
|
4
|
-
${e.strength} dependenc${e.strength===1?"y":"ies"} (${s})${e.aggregated?`
|
|
5
|
-
rolled up from collapsed parts`:""}`}function le({label:e,ariaLabel:a,children:n,badge:o,title:s,width:i=260,open:p,onOpenChange:l,fullWidth:u=!1}){const[f,k]=w.useState(!1),c=p??f,x=g=>{const S=typeof g=="function"?g(c):g;p===void 0&&k(S),l==null||l(S)},j=w.useRef(null);return w.useEffect(()=>{if(!c)return;const g=m=>{var C;(C=j.current)!=null&&C.contains(m.target)||x(!1)},S=m=>{m.key==="Escape"&&x(!1)};return document.addEventListener("mousedown",g),document.addEventListener("keydown",S),()=>{document.removeEventListener("mousedown",g),document.removeEventListener("keydown",S)}},[c]),t.jsxs("div",{ref:j,style:{position:"relative",width:u?"100%":void 0},children:[t.jsxs("button",{type:"button","aria-haspopup":"dialog","aria-expanded":c,"aria-label":a,title:s,onClick:()=>x(g=>!g),style:{display:"flex",alignItems:"center",gap:"5px",width:u?"100%":void 0,justifyContent:u?"center":void 0,padding:"3px 8px",borderRadius:"5px",border:`1px solid ${c||o?d.accent:d.border}`,background:c?"#E8F8F3":d.surface,fontSize:z.xs,color:d.secondary,cursor:"pointer",whiteSpace:"nowrap"},children:[e,o&&t.jsx("span",{style:{fontSize:"10px",padding:"0 4px",borderRadius:"7px",background:d.accent,color:"#08331F",fontWeight:700},children:o}),t.jsx("span",{style:{fontSize:"9px",color:d.faint},children:"▾"})]}),c&&t.jsx("div",{role:"dialog","aria-label":a??(typeof e=="string"?e:"Options"),style:{position:"absolute",top:"calc(100% + 4px)",right:0,zIndex:60,width:i,padding:"10px 12px",background:d.surface,border:`1px solid ${d.border}`,borderRadius:"7px",boxShadow:Ke.lg,display:"flex",flexDirection:"column",gap:"9px"},children:n})]})}function Ce(e){const a=e.replace(/[_-]+/g," ").trim();return a.charAt(0).toUpperCase()+a.slice(1)}function Mt(e,a){if(e.kind)return e.kind;if(e.layer){const n=a.find(o=>o.layer===e.layer);return n&&n.kinds.length===1?n.kinds[0].kind:Ce(e.layer)}return"Everything"}function He({label:e,layers:a,value:n,onChange:o,width:s=165,title:i,describedAs:p}){const[l,u]=w.useState(!1),[f,k]=w.useState(""),c=w.useRef(null),x=w.useRef(null);w.useEffect(()=>{if(!l)return;const m=C=>{var b;(b=c.current)!=null&&b.contains(C.target)||(u(!1),k(""))};return document.addEventListener("mousedown",m),()=>document.removeEventListener("mousedown",m)},[l]),w.useEffect(()=>{var m;l&&((m=x.current)==null||m.focus())},[l]);const j=w.useMemo(()=>{const m=f.trim().toLowerCase().split(/\s+/).filter(Boolean);if(m.length===0)return a;const C=b=>m.every(v=>b.toLowerCase().includes(v));return a.map(b=>{if(C(Ce(b.layer)))return b;const v=b.kinds.filter(R=>C(`${R.kind} ${b.layer}`));return v.length>0?{...b,kinds:v}:null}).filter(b=>b!==null)},[a,f]),g=m=>{o(m),u(!1),k("")},S=(m,C)=>({display:"flex",alignItems:"center",gap:"7px",padding:C?"4px 9px 4px 26px":"5px 9px",cursor:"pointer",fontSize:z.xs,background:m?"#E8F8F3":"transparent",color:d.primary,fontWeight:m?600:400});return t.jsxs("div",{ref:c,style:{position:"relative",display:"flex",alignItems:"center",gap:"5px"},children:[t.jsx("span",{style:{fontSize:z.xs,color:d.muted,whiteSpace:"nowrap"},children:e}),t.jsxs("button",{type:"button","aria-haspopup":"listbox","aria-expanded":l,title:i,onClick:()=>u(m=>!m),style:{width:s,display:"flex",alignItems:"center",justifyContent:"space-between",gap:"6px",padding:"3px 7px",borderRadius:"5px",border:`1px solid ${d.accent}`,background:d.surface,fontSize:z.xs,color:d.primary,cursor:"pointer",textAlign:"left"},children:[t.jsxs("span",{style:{display:"flex",alignItems:"center",gap:"6px",overflow:"hidden"},children:[n.layer&&t.jsx("span",{style:{width:"3px",height:"12px",borderRadius:"2px",flexShrink:0,background:Se[n.layer]||"#9CA3AF"}}),t.jsx("span",{style:{overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:Mt(n,a)})]}),t.jsx("span",{style:{fontSize:"9px",color:d.faint},children:"▼"})]}),l&&t.jsxs("div",{role:"listbox",style:{position:"absolute",top:"calc(100% + 4px)",left:0,zIndex:60,width:Math.max(s+60,240),background:d.surface,border:`1px solid ${d.border}`,borderRadius:"7px",boxShadow:Ke.lg,overflow:"hidden"},children:[t.jsx("input",{ref:x,value:f,onChange:m=>k(m.target.value),onKeyDown:m=>{m.key==="Escape"&&(u(!1),k(""))},placeholder:"Filter layers and types…","aria-label":`Filter ${p??e}`,style:{width:"100%",padding:"7px 9px",border:"none",borderBottom:`1px solid ${d.borderLight}`,fontSize:z.xs,outline:"none",color:d.primary}}),t.jsxs("div",{style:{maxHeight:"300px",overflowY:"auto"},children:[j.length===0&&t.jsxs("div",{style:{padding:"10px",fontSize:z.xs,color:d.faint},children:["Nothing matches ","“",f,"”"]}),j.map(m=>t.jsxs("div",{children:[t.jsxs("div",{role:"option","aria-selected":n.layer===m.layer&&!n.kind,onClick:()=>g({layer:m.layer}),style:S(n.layer===m.layer&&!n.kind,!1),children:[t.jsx("span",{style:{width:"3px",height:"12px",borderRadius:"2px",flexShrink:0,background:Se[m.layer]||"#9CA3AF"}}),t.jsx("span",{style:{flex:1},children:Ce(m.layer)}),t.jsx("span",{style:{color:d.faint,fontSize:"11px"},children:m.elementCount})]}),m.kinds.length>1&&m.kinds.map(C=>t.jsxs("div",{role:"option","aria-selected":n.kind===C.kind,onClick:()=>g({layer:m.layer,kind:C.kind}),style:S(n.kind===C.kind,!0),children:[t.jsx("span",{style:{flex:1,color:d.secondary},children:C.kind}),t.jsx("span",{style:{color:d.faint,fontSize:"11px"},children:C.elementCount})]},C.kind))]},m.layer))]})]})]})}function Ue(e,a){return e?Object.values(e.elements).filter(n=>(!a.layer||n.layer===a.layer)&&(!a.kind||n.kind===a.kind)).sort((n,o)=>n.kind.localeCompare(o.kind)||n.name.localeCompare(o.name)).map(n=>({value:n.id,label:n.name,group:n.kind,hint:n.shortId,keywords:`${n.id} ${n.shortId??""} ${n.package??""}`})):[]}const fe=[{value:"natural",label:"Name",title:"Alphabetical inside every parent"},{value:"kind",label:"Element type",title:"Grouped by element type, then name"},{value:"partition",label:"Partition",title:"Sequence siblings so dependencies sit above the diagonal, leaving only real cycles as feedback"},{value:"cluster",label:"Cluster",title:"Keep mutually dependent siblings adjacent"}];function Rt(e){return e.types.length>0?ae(e.types[0]):"#475569"}function Lt(){const e=ue(r=>r.model),a=ue(r=>r.selectElement),n=ue(r=>r.selectedElementId),o=ue(r=>r.setAnalysisIssues),s=w.useMemo(()=>lt(e),[e]),[i,p]=w.useState({}),[l,u]=w.useState({}),[f,k]=w.useState([]),[c,x]=w.useState([]),[j,g]=w.useState([]),[S,m]=w.useState(null),[C,b]=w.useState(!1),[v,R]=w.useState("natural"),[A,P]=w.useState("natural"),[D,Q]=w.useState(!1),[K,Y]=w.useState(!0),[V,h]=w.useState(39),[$,O]=w.useState(!0),[F,E]=w.useState("top"),[L,T]=w.useState(null),[W,_]=w.useState(new Set),[de,J]=w.useState(new Set),[H,ce]=w.useState(null),ee=w.useMemo(()=>e?qe(e):[],[e]),be=w.useMemo(()=>{if(!e)return[];const r=new Map;for(const y of e.relationships)r.set(y.type,(r.get(y.type)??0)+1);return Ve(e).map(y=>({value:y,hint:String(r.get(y)??0),color:ae(y)}))},[e]),ie=w.useMemo(()=>Ue(e,i),[e,i]),re=w.useMemo(()=>Ue(e,l),[e,l]),Ie=w.useMemo(()=>{if(!e||!s)return[];const r=(N,X,Z)=>(!X.layer||N.layer===X.layer)&&(!X.kind||N.kind===X.kind)&&(Z.length===0||Z.includes(N.id)),y=Object.values(e.elements).filter(N=>r(N,i,f)),I=Object.values(e.elements).filter(N=>r(N,l,c)),q=new Set;for(const N of y)for(const X of I)if(N.id!==X.id)for(const Z of dt(N,X,s))q.add(Z.definition.name);return be.filter(N=>q.has(N.value))},[e,s,i,l,f,c,be]);w.useEffect(()=>{const r=new Set(ie.map(y=>y.value));k(y=>y.length===0||y.every(I=>r.has(I))?y:y.filter(I=>r.has(I)))},[ie]),w.useEffect(()=>{const r=new Set(re.map(y=>y.value));x(y=>y.length===0||y.every(I=>r.has(I))?y:y.filter(I=>r.has(I)))},[re]);const U=w.useMemo(()=>S??(e?ye(e):[]),[S,e]),Ee=w.useMemo(()=>{const r=new Map;if(!e)return r;for(const I of Object.values(e.elements)){const q=I.parentAction??I.owner;q&&e.elements[q]&&r.set(I.id,q)}const y=new Set(U);for(const I of e.relationships)y.has(I.type)&&I.sourceId!==I.targetId&&e.elements[I.sourceId]&&e.elements[I.targetId]&&r.set(I.targetId,I.sourceId);return r},[e,U]),we=w.useMemo(()=>{const r=new Set(U);return Ie.map(y=>r.has(y.value)?{...y,label:`${y.value} (nesting)`,hint:"builds the tree"}:y)},[Ie,U]);w.useEffect(()=>{const r=new Set(we.map(y=>y.value));g(y=>y.every(I=>r.has(I))?y:y.filter(I=>r.has(I)))},[we]);const Me=[S!==null,!$,!K,C,D].filter(Boolean).length,M=w.useMemo(()=>e?Be(e,{rows:{layer:i.layer,kinds:i.kind?[i.kind]:[],elementIds:f,expanded:W,ordering:v},columns:{layer:l.layer,kinds:l.kind?[l.kind]:[],elementIds:c,expanded:de,ordering:A},dependencyTypes:j,containmentTypes:U,groupByPackage:C,symmetric:D}):null,[e,i,l,f,c,j,U,C,v,A,D,W,de]),[Re,tt]=w.useState(!1);w.useEffect(()=>{if(Re||!e)return;const r=Ye(e,U);r&&(p({layer:r}),u({layer:r}),tt(!0))},[e,U,Re]);const nt=w.useCallback(r=>{_(y=>xe(y,r)),$&&J(y=>xe(y,r))},[$]),ot=w.useCallback(r=>{J(y=>xe(y,r)),$&&_(y=>xe(y,r))},[$]),te=w.useCallback((r,y)=>{r==="rows"?_(y):J(y)},[]),Le=w.useCallback(r=>{M&&te(r,new Set(he(r==="rows"?M.rowRoots:M.columnRoots)))},[M,te]),Ae=w.useCallback(r=>{te(r,new Set)},[te]),Fe=w.useCallback((r,y)=>{M&&te(r,new Set(he(r==="rows"?M.rowRoots:M.columnRoots,y)))},[M,te]),Te=w.useCallback((r,y)=>{var Z;const I=r==="rows"?ie:re,q=r==="rows"?k:x,N=r==="rows"?M==null?void 0:M.rows:M==null?void 0:M.columns,X=new Set(((Z=N==null?void 0:N.find(pe=>pe.node.id===y))==null?void 0:Z.node.members)??[y]);q(pe=>(pe.length===0?I.map(je=>je.value):pe).filter(je=>!X.has(je)))},[M,ie,re]),st=w.useCallback(async()=>{if(!e||!M)return;const r=Be(e,{rows:{layer:i.layer,kinds:i.kind?[i.kind]:[],elementIds:f,ordering:v,expanded:new Set(he(M.rowRoots))},columns:{layer:l.layer,kinds:l.kind?[l.kind]:[],elementIds:c,ordering:A,expanded:new Set(he(M.columnRoots))},dependencyTypes:j,containmentTypes:U,groupByPackage:C,symmetric:D});await vt(r)},[e,M,i,l,f,c,j,U,C,v,A,D]),ke=w.useMemo(()=>e?bt(e):null,[e]);w.useEffect(()=>{if(ke)return o(ke.issues.map(r=>({id:r.id,source:"DSM",severity:r.severity,elementId:r.elementId,elementName:r.elementName,message:r.message,tag:r.type==="unallocated-function"?"unallocated":r.type==="cross-component-flow"?"cross-boundary":"no functions"}))),()=>o([])},[ke,o]);const it=w.useCallback(r=>{if(!r)return{};if(r.diagonal)return{text:String(r.strength),color:d.muted,background:"#E3E8EE"};const y=Rt(r),I=Math.min(.14+r.strength*.13,.55);return{text:String(r.strength),color:y,background:`${y}${Math.round(I*255).toString(16).padStart(2,"0")}`}},[]);if(!e||!M)return t.jsx("div",{className:"flex-1 flex items-center justify-center",style:{color:d.faint,fontSize:z.sm},children:"No model loaded"});const{stats:ne}=M,B=F==="left",rt=B?{display:"grid",gap:"8px",width:"100%"}:{display:"flex",alignItems:"center",gap:"12px",flexWrap:"nowrap",marginTop:"2px"};return t.jsxs("div",{className:"flex-1 flex flex-col overflow-hidden",style:{background:"#F7F7F5",position:"relative"},children:[t.jsx("div",{style:F==="top"?{borderBottom:`1px solid ${d.border}`,background:d.surface,position:"relative"}:{position:"absolute",inset:"0 auto 0 0",width:"250px",zIndex:30,overflowY:"auto",overflowX:"hidden",borderRight:`1px solid ${d.border}`,background:d.surface,boxShadow:"2px 0 10px rgba(15, 23, 42, 0.06)"},children:t.jsxs("div",{className:"flex items-center gap-3 px-4 py-2",style:B?{flexDirection:"column",alignItems:"stretch",gap:"10px",position:"relative",minHeight:"100%",padding:"54px 12px 14px",boxSizing:"border-box"}:{flexWrap:"wrap",rowGap:"2px",position:"relative",paddingRight:"52px"},children:[t.jsx("span",{style:{position:"absolute",top:"9px",right:"12px"},children:t.jsx(ct,{icon:B?t.jsx(G.arrowUp,{}):t.jsx(G.panelCollapse,{}),onClick:()=>E(r=>r==="top"?"left":"top"),title:B?"Move toolbar to top":"Move toolbar to left"})}),t.jsxs("div",{style:rt,children:[t.jsx($e,{axis:"rows",layers:ee,scope:i,onScopeChange:p,elements:f,onElementsChange:k,elementOptions:ie,ordering:v,onOrderingChange:R,onExpandAll:Le,onCollapseAll:Ae,onExpandToDepth:Fe,leftDock:B,filterOpen:L==="rows",onFilterOpenChange:r=>T(r?"rows":null),parentOf:Ee}),t.jsx($e,{axis:"columns",layers:ee,scope:l,onScopeChange:u,elements:c,onElementsChange:x,elementOptions:re,ordering:A,onOrderingChange:P,onExpandAll:Le,onCollapseAll:Ae,onExpandToDepth:Fe,leftDock:B,filterOpen:L==="columns",onFilterOpenChange:r=>T(r?"columns":null),parentOf:Ee})]}),t.jsxs("div",{className:"flex items-center gap-3",style:B?{width:"100%",display:"grid",gridTemplateColumns:"repeat(3, minmax(0, 1fr))",gridTemplateRows:"auto auto",alignItems:"center",columnGap:"10px",rowGap:"8px",padding:"8px",boxSizing:"border-box",border:`1px solid ${d.border}`,borderRadius:"9px",background:"#FAFBFC"}:{flex:"0 0 auto",alignSelf:"stretch",alignContent:"space-between",display:"grid",gridTemplateColumns:"max-content max-content max-content",gridTemplateRows:"auto auto",alignItems:"center",columnGap:"10px",rowGap:"5px",boxSizing:"border-box",padding:"6px 8px",border:`1px solid ${d.border}`,borderRadius:"9px",background:"#FAFBFC"},children:[t.jsx(le,{label:B?t.jsxs(t.Fragment,{children:[t.jsx(G.filter,{})," Rel."]}):t.jsxs(t.Fragment,{children:[t.jsx(G.filter,{})," Relations"]}),ariaLabel:"Filter dependency relationships",title:"Relationships that put a mark in a cell",width:260,fullWidth:B,children:t.jsx(ge,{label:"Dependency",allLabel:"Any relationship",options:we,width:180,selected:j,onChange:g,describedAs:"dependency relationships",title:"Relationships that put a mark in a cell — flow, trace, allocation, …"})}),t.jsxs(le,{label:t.jsx(G.tools,{}),ariaLabel:"DSM options",badge:Me>0?String(Me):void 0,title:"Settings you set once: how nesting is derived, how the axes are grouped, what the header shows",fullWidth:B,children:[t.jsx(ge,{label:"Nesting",allLabel:"Auto (composition)",options:be,width:150,selected:S??[],onChange:r=>m(r.length===0?null:r),describedAs:"nesting relationships",title:"Relationships read as parent → child containment, which is what builds the tree"}),t.jsxs("label",{style:se,title:"Expanding a subsystem on one axis expands the same one on the other",children:[t.jsx("input",{type:"checkbox",checked:$,onChange:r=>O(r.target.checked),style:{accentColor:d.accent}}),"Linked axes"]}),t.jsxs("label",{style:se,title:"Show column names above the grid as well as their numbers",children:[t.jsx("input",{type:"checkbox",checked:K,onChange:r=>Y(r.target.checked),style:{accentColor:d.accent}}),"Column names"]}),t.jsxs("label",{style:se,title:"Group top-level elements under their SysML package",children:[t.jsx("input",{type:"checkbox",checked:C,onChange:r=>b(r.target.checked),style:{accentColor:d.accent}}),"Group by package"]}),t.jsxs("label",{style:se,title:"Count every dependency in both directions, making the matrix symmetric",children:[t.jsx("input",{type:"checkbox",checked:D,onChange:r=>Q(r.target.checked),style:{accentColor:d.accent}}),"Both directions"]})]}),t.jsxs(le,{label:t.jsx(G.download,{}),ariaLabel:"Export DSM",title:"Export the DSM",width:220,fullWidth:B,children:[t.jsxs("button",{onClick:()=>jt(M),style:Xe,children:["CSV ",t.jsx("span",{style:{color:d.faint},children:"current visible matrix"})]}),t.jsxs("button",{onClick:()=>{st()},style:Xe,children:["Excel (.xlsx) ",t.jsx("span",{style:{color:d.faint},children:"with expandable hierarchy"})]})]}),t.jsxs("label",{style:{...se,gap:"5px",gridColumn:B?"1 / -1":void 0,justifyContent:B?"center":void 0},title:"Cell size",children:["Zoom",t.jsx("input",{type:"range",min:14,max:44,step:2,value:V,onChange:r=>h(Number(r.target.value)),style:{width:"76px",accentColor:d.accent}})]})]})]})}),t.jsx("div",{style:{display:"flex",flex:1,minHeight:0,minWidth:0,marginLeft:B?"250px":0,width:B?"calc(100% - 250px)":void 0},children:t.jsx(Ct,{result:M,onToggleRow:nt,onToggleColumn:ot,onSelectElement:a,selectedElementId:n,renderCell:it,onCellClick:(r,y,I)=>{I&&ce({row:r,column:y,cell:I}),a(r.node.id)},cellSize:V,showColumnNames:K,onHideRow:r=>Te("rows",r),onHideColumn:r=>Te("columns",r),cornerHeader:t.jsxs("div",{style:{display:"flex",flexDirection:"column",justifyContent:"flex-end",height:"100%"},children:[t.jsx("span",{style:{fontSize:z.sm,fontWeight:600,color:d.primary},children:"Design Structure Matrix"}),t.jsxs("span",{style:{fontSize:"11px",color:d.faint,marginTop:"2px"},children:[M.rows.length," ","×"," ",M.columns.length," ","·"," ",M.totalDependencies," dependencies",ne.internal>0&&` · ${ne.internal} internal`]}),t.jsx("div",{style:{display:"flex",gap:"8px",flexWrap:"wrap",fontSize:"10px",color:d.muted,borderTop:`1px solid ${d.border}`,marginTop:"5px",paddingTop:"4px"},children:[["feedback",ne.feedback,"Marks below the diagonal — candidates for rework loops"],["coupled",ne.couplings,"Pairs that depend on each other in both directions"],["isolated",ne.isolated,"Lines with no dependency either way"],["max degree",ne.maxDegree,"Most dependencies touching one line"]].map(([r,y,I])=>t.jsxs("span",{title:I,children:[t.jsx("strong",{style:{color:d.primary},children:y})," ",r]},r))})]}),footer:t.jsxs("div",{style:{marginTop:"18px",display:"flex",gap:"14px",flexWrap:"wrap",fontSize:"11px",color:d.muted},children:[[...new Set(M.matrix.flat().flatMap(r=>(r==null?void 0:r.types)??[]))].sort().map(r=>t.jsxs("span",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[t.jsx("span",{style:{width:"10px",height:"10px",borderRadius:"2px",background:ae(r)}}),r]},r)),t.jsxs("span",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[t.jsx("span",{style:{width:"10px",height:"10px",borderRadius:"2px",background:"#E3E8EE"}}),"diagonal: dependencies inside the subsystem"]}),t.jsxs("span",{style:{display:"flex",alignItems:"center",gap:"4px"},children:[t.jsx("span",{style:{width:"10px",height:"2px",background:"#94A3B8"}}),"subsystem boundary"]})]})})}),H&&t.jsxs("div",{style:{position:"fixed",bottom:"76px",right:"20px",zIndex:100,width:"300px",padding:"12px 14px",borderRadius:"9px",background:d.surface,border:`1px solid ${d.border}`,boxShadow:"0 6px 22px rgba(0,0,0,0.14)",fontSize:z.xs},children:[t.jsxs("div",{className:"flex items-start justify-between gap-2",children:[t.jsxs("div",{style:{fontWeight:600,color:d.primary},children:[H.row.node.name," ","→"," ",H.column.node.name]}),t.jsx("button",{onClick:()=>ce(null),style:{color:d.faint,background:"none",border:"none",cursor:"pointer"},children:"✕"})]}),t.jsxs("div",{style:{color:d.muted,margin:"6px 0"},children:[H.cell.strength," dependenc",H.cell.strength===1?"y":"ies",H.cell.aggregated&&" · rolled up from collapsed parts",H.cell.diagonal&&" · internal to this subsystem"]}),t.jsx("div",{style:{display:"flex",gap:"4px",flexWrap:"wrap"},children:H.cell.types.map(r=>t.jsx("span",{style:{fontSize:"10px",padding:"2px 6px",borderRadius:"4px",background:`${ae(r)}20`,color:ae(r),fontWeight:500},children:r},r))}),H.cell.aggregated&&t.jsx("div",{style:{marginTop:"8px",fontSize:"11px",color:d.faint},children:"Expand both sides to see which parts are actually joined."})]})]})}function xe(e,a){const n=new Set(e);return n.has(a)?n.delete(a):n.add(a),n}function $e({axis:e,layers:a,scope:n,onScopeChange:o,elements:s,onElementsChange:i,elementOptions:p,ordering:l,onOrderingChange:u,onExpandAll:f,onCollapseAll:k,onExpandToDepth:c,leftDock:x,filterOpen:j,onFilterOpenChange:g,parentOf:S}){var C,b;const m=e==="rows"?"Rows":"Columns";return x?t.jsxs("section",{style:{display:"grid",gap:"5px",padding:"6px 8px",borderRadius:"8px",border:`1px solid ${d.borderLight}`,background:d.surfaceAlt},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"7px"},children:[t.jsx("span",{style:{fontSize:z.xs,fontWeight:700,color:d.secondary},children:m}),t.jsx(He,{label:"",layers:a,value:n,onChange:o,width:138,describedAs:`${e} scope`,title:`What the ${e} list — one architecture layer, or one element type within it.`})]}),t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"7px"},children:[t.jsx(le,{label:t.jsx(G.filter,{}),ariaLabel:`Filter ${e} elements`,title:`Filter elements on the ${e} axis`,width:255,open:j,onOpenChange:g,children:t.jsx(ge,{label:"Elements",allLabel:`all ${p.length}`,options:p,selected:s,onChange:i,width:170,describedAs:`${e} elements`,placeholder:"Filter by name, kind or id…",parentOf:S})}),t.jsx(Ge,{axis:e,onExpandAll:f,onCollapseAll:k,onExpandToDepth:c,showLabel:!1,showDepth:!1})]}),t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"7px"},children:[t.jsx(et,{axis:e,onExpandToDepth:c,compact:!0}),t.jsx("select",{value:l,onChange:v=>u(v.target.value),"aria-label":`Sort ${e} siblings`,title:(C=fe.find(v=>v.value===l))==null?void 0:C.title,style:{...me,width:"112px"},children:fe.map(v=>t.jsx("option",{value:v.value,title:v.title,children:v.label},v.value))})]})]}):t.jsxs("section",{style:{display:"grid",gridTemplateRows:"auto auto",gap:"4px",boxSizing:"border-box",padding:"6px 8px",border:`1px solid ${d.border}`,borderRadius:"9px",background:"#FAFBFC"},children:[t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"7px"},children:[t.jsx("span",{style:{fontSize:z.xs,fontWeight:700,color:d.secondary},children:m}),t.jsx(He,{label:"",layers:a,value:n,onChange:o,width:150,describedAs:`${e} scope`,title:`What the ${e} list — one architecture layer, or one element type within it.`}),t.jsx(le,{label:t.jsx(G.filter,{}),ariaLabel:`Filter ${e} elements`,title:`Filter elements on the ${e} axis`,width:255,open:j,onOpenChange:g,children:t.jsx(ge,{label:"Elements",allLabel:`all ${p.length}`,options:p,selected:s,onChange:i,width:170,describedAs:`${e} elements`,placeholder:"Filter by name, kind or id…",parentOf:S})})]}),t.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"7px",flexWrap:"wrap"},children:[t.jsx(Ge,{axis:e,onExpandAll:f,onCollapseAll:k,onExpandToDepth:c,showLabel:!1}),t.jsxs("label",{style:{...se,gap:"5px"},title:`Sort ${e} siblings`,children:["Sort",t.jsx("select",{value:l,onChange:v=>u(v.target.value),"aria-label":`Sort ${e} siblings`,title:(b=fe.find(v=>v.value===l))==null?void 0:b.title,style:me,children:fe.map(v=>t.jsx("option",{value:v.value,title:v.title,children:v.label},v.value))})]})]})]})}function Ge({axis:e,onExpandAll:a,onCollapseAll:n,onExpandToDepth:o,showLabel:s=!0,showDepth:i=!0,compact:p=!1}){const l=e==="rows"?"row":"column",u=e==="rows"?"Rows":"Columns";return t.jsxs("div",{style:{display:"inline-flex",alignItems:"center",gap:"5px"},children:[s&&t.jsx("span",{style:{fontSize:z.xs,color:d.muted,fontWeight:600},children:u}),t.jsxs(pt,{children:[t.jsx(Oe,{icon:t.jsx(G.expand,{}),onClick:()=>a(e),title:`Expand every ${l} subsystem`,ariaLabel:`Expand all ${e}`}),t.jsx(Oe,{icon:t.jsx(G.collapse,{}),onClick:()=>n(e),title:`Collapse ${e} to their top-level subsystems`,ariaLabel:`Collapse all ${e}`})]}),i&&t.jsx(et,{axis:e,onExpandToDepth:o,compact:p})]})}function et({axis:e,onExpandToDepth:a,compact:n=!1}){return t.jsxs("select",{defaultValue:"","aria-label":`Expand ${e} to depth`,title:`Expand ${e} to a specific depth`,onChange:o=>{const s=Number(o.target.value);s>0&&a(e,s),o.currentTarget.value=""},style:n?{...me,width:"82px"}:me,children:[t.jsx("option",{value:"",children:"Depth…"}),t.jsx("option",{value:"1",children:"Level 1"}),t.jsx("option",{value:"2",children:"Level 2"}),t.jsx("option",{value:"3",children:"Level 3"})]})}const se={display:"flex",alignItems:"center",gap:"6px",fontSize:z.xs,color:d.muted,whiteSpace:"nowrap"},me={border:`1px solid ${d.border}`,borderRadius:"5px",padding:"2px 5px",background:d.surface,fontSize:z.xs,color:d.primary},Xe={display:"flex",justifyContent:"space-between",gap:"12px",width:"100%",padding:"6px 7px",border:"none",borderRadius:"5px",background:"transparent",cursor:"pointer",fontSize:z.xs,color:d.primary,textAlign:"left"},Nt=Object.freeze(Object.defineProperty({__proto__:null,AxisControlGroup:$e,DSMView:Lt},Symbol.toStringTag,{value:"Module"}));export{$e as A,Nt as D,Ct as H,le as T,he as a,Be as c,Ue as e,qe as l,Ve as r,Dt as s};
|