@memoarchitect/architect 0.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +105 -0
  3. package/dist/assets/AskPanel-BpFRMop9.js +1 -0
  4. package/dist/assets/ComplianceWizard-DCcV-q6X.js +1 -0
  5. package/dist/assets/DSMView-OMMwi76e.js +1 -0
  6. package/dist/assets/Dashboard-Dl5KU656.js +1 -0
  7. package/dist/assets/DhfDashboard-agI5JdAZ.js +1 -0
  8. package/dist/assets/DhfSettingsPanel-CKvGmNGe.js +1 -0
  9. package/dist/assets/DhfWorkbench-BD_buvXh.js +69 -0
  10. package/dist/assets/DiagramCanvas-CUYbaLjV.js +1 -0
  11. package/dist/assets/DiagramEditor-DZAocSs_.js +4 -0
  12. package/dist/assets/DiagramSurface-BIK9fV8R.js +2 -0
  13. package/dist/assets/ElementDetailView-R_Nob9E0.js +2 -0
  14. package/dist/assets/ImportView-yxS8JfX4.js +1 -0
  15. package/dist/assets/LayerGrid-DdEtHyAu.js +1 -0
  16. package/dist/assets/LayerTable-dOCvwCEb.js +2 -0
  17. package/dist/assets/MaxGraphCanvas-CDdlW8h_.js +13 -0
  18. package/dist/assets/ModelDiff-BbdzLhXe.js +1 -0
  19. package/dist/assets/OntologyDecompositionDiagram-BW07CXuV.js +1 -0
  20. package/dist/assets/OntologyViewer-DaRXEQoq.js +2 -0
  21. package/dist/assets/RelationshipOverlay-BDrBRSPP.js +33 -0
  22. package/dist/assets/RelationshipsSection-D1-tuVYo.js +1 -0
  23. package/dist/assets/ReviewDashboard-CipgA5-r.js +1 -0
  24. package/dist/assets/ScenarioEditor-BfewgrrJ.js +3 -0
  25. package/dist/assets/StatisticsDashboard-CLww46qL.js +1 -0
  26. package/dist/assets/SysmlCodeEditor-BLcw6hdp.js +850 -0
  27. package/dist/assets/SysmlCodeEditor-BwKcXIZw.css +1 -0
  28. package/dist/assets/SysmlGenerator-DnsaN-ey.js +1 -0
  29. package/dist/assets/TabularView-Bp-yKFPV.js +1 -0
  30. package/dist/assets/TraceabilityMatrix-B-dn_i5a.js +1 -0
  31. package/dist/assets/WorkflowWizard-C6p5e2IT.js +1 -0
  32. package/dist/assets/editor.worker-DyuDvpVp.js +26 -0
  33. package/dist/assets/elk-B75IRfCd.js +1 -0
  34. package/dist/assets/elk-worker.min-BgEwn2y-.js +24 -0
  35. package/dist/assets/index-BZhRuk7M.css +1 -0
  36. package/dist/assets/index-c27kHB43.js +3277 -0
  37. package/dist/assets/layout-providers-BAUgp0nu.js +26 -0
  38. package/dist/assets/layout-selection-DvOsyJH9.js +1 -0
  39. package/dist/assets/react-vendor-l0sNRNKZ.js +1 -0
  40. package/dist/assets/reactflow-WKyu73tD.js +54 -0
  41. package/dist/assets/style-BZV40eAE.css +1 -0
  42. package/dist/assets/sysml-edge-styles-ByJeCWqa.js +1 -0
  43. package/dist/assets/zustand-qbFpP9Up.js +9 -0
  44. package/dist/favicon.svg +6 -0
  45. package/dist/index.html +19 -0
  46. package/dist/logo.png +0 -0
  47. package/dist/memo-top.png +0 -0
  48. package/lib/bin/memo-architect.d.ts +3 -0
  49. package/lib/bin/memo-architect.d.ts.map +1 -0
  50. package/lib/bin/memo-architect.js +27 -0
  51. package/lib/bin/memo-architect.js.map +1 -0
  52. package/lib/commands/build.d.ts +5 -0
  53. package/lib/commands/build.d.ts.map +1 -0
  54. package/lib/commands/build.js +45 -0
  55. package/lib/commands/build.js.map +1 -0
  56. package/lib/commands/dev.d.ts +5 -0
  57. package/lib/commands/dev.d.ts.map +1 -0
  58. package/lib/commands/dev.js +20 -0
  59. package/lib/commands/dev.js.map +1 -0
  60. package/package.json +77 -0
@@ -0,0 +1 @@
1
+ .react-flow{direction:ltr;--xy-edge-stroke-default: #b1b1b7;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #555;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(255, 255, 255, .5);--xy-minimap-background-color-default: #fff;--xy-minimap-mask-background-color-default: rgba(240, 240, 240, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #e2e2e2;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: transparent;--xy-background-pattern-dots-color-default: #91919a;--xy-background-pattern-lines-color-default: #eee;--xy-background-pattern-cross-color-default: #e2e2e2;background-color:var(--xy-background-color, var(--xy-background-color-default));--xy-node-color-default: inherit;--xy-node-border-default: 1px solid #1a192b;--xy-node-background-color-default: #fff;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #1a192b;--xy-node-border-radius-default: 3px;--xy-handle-background-color-default: #1a192b;--xy-handle-border-color-default: #fff;--xy-selection-background-color-default: rgba(0, 89, 220, .08);--xy-selection-border-default: 1px dotted rgba(0, 89, 220, .8);--xy-controls-button-background-color-default: #fefefe;--xy-controls-button-background-color-hover-default: #f4f4f4;--xy-controls-button-color-default: inherit;--xy-controls-button-color-hover-default: inherit;--xy-controls-button-border-color-default: #eee;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #ffffff;--xy-edge-label-color-default: inherit;--xy-resize-background-color-default: #3367d9}.react-flow.dark{--xy-edge-stroke-default: #3e3e3e;--xy-edge-stroke-width-default: 1;--xy-edge-stroke-selected-default: #727272;--xy-connectionline-stroke-default: #b1b1b7;--xy-connectionline-stroke-width-default: 1;--xy-attribution-background-color-default: rgba(150, 150, 150, .25);--xy-minimap-background-color-default: #141414;--xy-minimap-mask-background-color-default: rgba(60, 60, 60, .6);--xy-minimap-mask-stroke-color-default: transparent;--xy-minimap-mask-stroke-width-default: 1;--xy-minimap-node-background-color-default: #2b2b2b;--xy-minimap-node-stroke-color-default: transparent;--xy-minimap-node-stroke-width-default: 2;--xy-background-color-default: #141414;--xy-background-pattern-dots-color-default: #777;--xy-background-pattern-lines-color-default: #777;--xy-background-pattern-cross-color-default: #777;--xy-node-color-default: #f8f8f8;--xy-node-border-default: 1px solid #3c3c3c;--xy-node-background-color-default: #1e1e1e;--xy-node-group-background-color-default: rgba(240, 240, 240, .25);--xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, .08);--xy-node-boxshadow-selected-default: 0 0 0 .5px #999;--xy-handle-background-color-default: #bebebe;--xy-handle-border-color-default: #1e1e1e;--xy-selection-background-color-default: rgba(200, 200, 220, .08);--xy-selection-border-default: 1px dotted rgba(200, 200, 220, .8);--xy-controls-button-background-color-default: #2b2b2b;--xy-controls-button-background-color-hover-default: #3e3e3e;--xy-controls-button-color-default: #f8f8f8;--xy-controls-button-color-hover-default: #fff;--xy-controls-button-border-color-default: #5b5b5b;--xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, .08);--xy-edge-label-background-color-default: #141414;--xy-edge-label-color-default: #f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props, var(--xy-background-color, var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{position:absolute;width:100%;height:100%;top:0;left:0}.react-flow__pane{z-index:1}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{overflow:visible;position:absolute;pointer-events:none}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:dashdraw .5s linear infinite}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke, var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:dashdraw .5s linear infinite}svg.react-flow__connectionline{z-index:1001;overflow:visible;position:absolute}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:left top;pointer-events:none}.react-flow__nodesselection-rect{position:absolute;pointer-events:all;cursor:grab}.react-flow__handle{position:absolute;pointer-events:none;min-width:5px;min-height:5px;width:6px;height:6px;background-color:var(--xy-handle-background-color, var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));border-radius:100%}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;left:50%;bottom:0;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{position:absolute;z-index:5;margin:15px}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px) translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px) translateY(-50%)}.react-flow__attribution{font-size:10px;background:var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));padding:2px 3px;margin:0}.react-flow__attribution a{text-decoration:none;color:#999}@keyframes dashdraw{0%{stroke-dashoffset:10}}.react-flow__edgelabel-renderer{position:absolute;width:100%;height:100%;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;left:0;top:0}.react-flow__viewport-portal{position:absolute;width:100%;height:100%;left:0;top:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__minimap{background:var( --xy-minimap-background-color-props, var(--xy-minimap-background-color, var(--xy-minimap-background-color-default)) )}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var( --xy-minimap-mask-background-color-props, var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default)) );stroke:var( --xy-minimap-mask-stroke-color-props, var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default)) );stroke-width:var( --xy-minimap-mask-stroke-width-props, var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default)) )}.react-flow__minimap-node{fill:var( --xy-minimap-node-background-color-props, var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default)) );stroke:var( --xy-minimap-node-stroke-color-props, var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default)) );stroke-width:var( --xy-minimap-node-stroke-width-props, var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default)) )}.react-flow__background-pattern.dots{fill:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default)) )}.react-flow__background-pattern.lines{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default)) )}.react-flow__background-pattern.cross{stroke:var( --xy-background-pattern-color-props, var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default)) )}.react-flow__controls{display:flex;flex-direction:column;box-shadow:var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default))}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{display:flex;justify-content:center;align-items:center;height:26px;width:26px;padding:4px;border:none;background:var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));border-bottom:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) );color:var( --xy-controls-button-color-props, var(--xy-controls-button-color, var(--xy-controls-button-color-default)) );cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none}.react-flow__controls-button svg{width:100%;max-width:12px;max-height:12px;fill:currentColor}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{padding:10px;border-radius:var(--xy-node-border-radius, var(--xy-node-border-radius-default));width:150px;font-size:12px;color:var(--xy-node-color, var(--xy-node-color-default));text-align:center;border:var(--xy-node-border, var(--xy-node-border-default));background-color:var(--xy-node-background-color, var(--xy-node-background-color-default))}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color, var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color, var(--xy-selection-background-color-default));border:var(--xy-selection-border, var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var( --xy-controls-button-background-color-hover-props, var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default)) );color:var( --xy-controls-button-color-hover-props, var(--xy-controls-button-color-hover, var(--xy-controls-button-color-hover-default)) )}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var( --xy-controls-button-border-color-props, var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default)) )}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{width:5px;height:5px;border:1px solid #fff;border-radius:1px;background-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));translate:-50% -50%}.react-flow__resize-control.handle.left{left:0;top:50%}.react-flow__resize-control.handle.right{left:100%;top:50%}.react-flow__resize-control.handle.top{left:50%;top:0}.react-flow__resize-control.handle.bottom{left:50%;top:100%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color, var(--xy-resize-background-color-default));border-width:0;border-style:solid}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;transform:translate(-50%);top:0;height:100%}.react-flow__resize-control.line.left{left:0;border-left-width:1px}.react-flow__resize-control.line.right{left:100%;border-right-width:1px}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{height:1px;transform:translateY(-50%);left:0;width:100%}.react-flow__resize-control.line.top{top:0;border-top-width:1px}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color, var(--xy-edge-label-color-default))}
@@ -0,0 +1 @@
1
+ const r={core:{bg:"#E5E7EB",text:"#374151"},risk:{bg:"#f8cecc",text:"#991b1b"},clinical:{bg:"#cce5ff",text:"#1e40af"},operations:{bg:"#d5e8d4",text:"#166534"},fmea:{bg:"#ffe6cc",text:"#92400e"},cybersecurity:{bg:"#e1d5e7",text:"#6b21a8"},privacy:{bg:"#dae8fc",text:"#1d4ed8"},dhf:{bg:"#fff2cc",text:"#78350f"},usability:{bg:"#fce7f3",text:"#9d174d"}},e={grey:"#9CA3AF",structuralBlue:"#374151",risk:"#DC2626",clinical:"#3B82F6",ops:"#16A34A",fmea:"#D97706",cyber:"#7C3AED",privacy:"#2563EB",dhf:"#B45309",usability:"#DB2777"};function a(o,n,s,i,d,t,c){return{lineStyle:s,sourceMarker:i,targetMarker:d,stereotype:c,category:n,color:t,domain:o,domainColor:r[o].bg}}const l={Aggregation:a("core","structural","solid","diamond-open","none",e.structuralBlue),ComposedOf:a("core","structural","solid","diamond-filled","none",e.structuralBlue),DecomposedBy:a("core","structural","solid","diamond-open","none",e.structuralBlue),Association:a("core","structural","solid","none","arrow",e.grey),Flow:a("core","behavioral","solid","none","filled-arrow",e.structuralBlue),Succession:a("core","behavioral","solid","none","arrow",e.structuralBlue),ExposesInterface:a("core","behavioral","solid","none","circle",e.grey),Extends:a("core","dependency","dashed","none","triangle-open",e.grey,"extends"),Realization:a("core","dependency","dashed","none","triangle-open",e.grey),Dependency:a("core","dependency","dashed","none","arrow",e.grey),TraceTo:a("core","dependency","dashed","none","arrow",e.grey,"trace"),Refines:a("core","dependency","dashed","none","arrow",e.grey,"refine"),Derives:a("core","dependency","dashed","none","arrow",e.grey,"deriveReqt"),Satisfy:a("core","dependency","dashed","none","arrow",e.grey,"satisfy"),Verify:a("core","dependency","dashed","none","arrow",e.grey,"verify"),AllocateTo:a("core","dependency","dashed","none","arrow",e.grey,"allocate"),Constrains:a("core","dependency","dashed","none","arrow",e.grey,"constrain"),Mitigates:a("risk","domain","dashed","none","arrow",e.risk),Causes:a("risk","domain","dashed","none","arrow",e.risk),LeadsTo:a("risk","domain","dashed","none","arrow",e.risk),Identifies:a("risk","domain","dashed","none","arrow",e.risk),TriggersHazardousSituation:a("risk","domain","dashed","none","arrow",e.risk),PlansRiskManagement:a("risk","domain","dashed","none","arrow",e.risk),AssessesResidualRisk:a("risk","domain","dashed","none","arrow",e.risk),WeighsAgainstBenefit:a("risk","domain","dashed","none","arrow",e.risk),ConcludesBenefitRisk:a("risk","domain","dashed","none","arrow",e.risk),ConcludesOverallResidualRisk:a("risk","domain","dashed","none","arrow",e.risk),MonitorsRiskSubject:a("risk","domain","dashed","none","arrow",e.risk),PlansClinicalEvaluation:a("clinical","domain","dashed","none","arrow",e.clinical),EvaluatesClinicalClaim:a("clinical","domain","dashed","none","arrow",e.clinical),SupportsClinicalClaim:a("clinical","domain","dashed","none","arrow",e.clinical),ClaimsClinicalBenefit:a("clinical","domain","dashed","none","arrow",e.clinical),ClaimsForUse:a("clinical","domain","dashed","none","arrow",e.clinical),ManufacturesSubject:a("operations","domain","dashed","none","arrow",e.ops),InstallsSubject:a("operations","domain","dashed","none","arrow",e.ops),ServicesSubject:a("operations","domain","dashed","none","arrow",e.ops),MaintainsSubject:a("operations","domain","dashed","none","arrow",e.ops),CalibratesSubject:a("operations","domain","dashed","none","arrow",e.ops),QualifiesInstallation:a("operations","domain","dashed","none","arrow",e.ops),AnalyzesFailureMode:a("fmea","domain","dashed","none","arrow",e.fmea),HasFailureCause:a("fmea","domain","dashed","none","arrow",e.fmea),ResultsInFailureEffect:a("fmea","domain","dashed","none","arrow",e.fmea),EscalatesToRisk:a("fmea","domain","dashed","none","arrow",e.fmea),DetectsFailureMode:a("fmea","domain","dashed","none","arrow",e.fmea),DefinesTopEvent:a("fmea","domain","dashed","none","arrow",e.fmea),UsesGate:a("fmea","domain","dashed","none","arrow",e.fmea),ContributesToEvent:a("fmea","domain","dashed","none","arrow",e.fmea),ContributesToHazard:a("fmea","domain","dashed","none","arrow",e.risk),TriggersHazardousSituationFmea:a("fmea","domain","dashed","none","arrow",e.fmea),ModelsThreat:a("cybersecurity","domain","dashed","none","arrow",e.cyber),ThreatensAsset:a("cybersecurity","domain","dashed","none","arrow",e.cyber),ExploitsVulnerability:a("cybersecurity","domain","dashed","none","arrow",e.cyber),MitigatesThreat:a("cybersecurity","domain","dashed","none","arrow",e.cyber),SecuresInterface:a("cybersecurity","domain","dashed","none","arrow",e.cyber),MaintainsSbom:a("cybersecurity","domain","dashed","none","arrow",e.cyber),SupportsSecureUpdate:a("cybersecurity","domain","dashed","none","arrow",e.cyber),ClassifiesData:a("cybersecurity","domain","dashed","none","arrow",e.cyber),ProcessesData:a("privacy","domain","dashed","none","arrow",e.privacy),ProvidesPrivacyNotice:a("privacy","domain","dashed","none","arrow",e.privacy),AssessesPrivacyImpact:a("privacy","domain","dashed","none","arrow",e.privacy),RespondsToDataSubjectRequest:a("privacy","domain","dashed","none","arrow",e.privacy),GovernsActivity:a("dhf","domain","dashed","none","arrow",e.dhf),ProducesWorkProduct:a("dhf","domain","dashed","none","arrow",e.dhf),Evidences:a("dhf","domain","dashed","none","arrow",e.dhf),Documents:a("dhf","domain","dashed","none","arrow",e.dhf),EvaluatesRequirement:a("dhf","domain","dashed","none","arrow",e.dhf),AppliesStandardRequirement:a("dhf","domain","dashed","none","arrow",e.dhf),ImplementsRiskControl:a("dhf","domain","dashed","none","arrow",e.dhf),ProtectsEssentialPerformance:a("dhf","domain","dashed","none","arrow",e.risk),AddressesUseError:a("usability","domain","dashed","none","arrow",e.usability),AnalyzesUseError:a("usability","domain","dashed","none","arrow",e.usability),ExposesUseError:a("usability","domain","dashed","none","arrow",e.usability),SpecifiesScenario:a("usability","domain","dashed","none","arrow",e.usability),Preserves:a("usability","domain","dashed","none","arrow",e.usability),SupportsOperatingFunction:a("usability","domain","dashed","none","arrow",e.usability),DefinesLossCondition:a("usability","domain","dashed","none","arrow",e.usability)},u={structural:a("core","structural","solid","none","arrow",e.grey),dependency:a("core","dependency","dashed","none","arrow",e.grey),behavioral:a("core","behavioral","solid","none","filled-arrow",e.structuralBlue),domain:a("core","domain","dashed","none","arrow",e.grey)};function y(o){return l[o]??u.domain}const m=[{id:"core",label:"Core SysML",color:r.core,types:["Aggregation","ComposedOf","DecomposedBy","Association","Flow","Succession","ExposesInterface","Extends","Realization","Dependency","TraceTo","Refines","Derives","Satisfy","Verify","AllocateTo","Constrains"]},{id:"risk",label:"Risk Chain (ISO 14971)",color:r.risk,types:["Mitigates","Causes","LeadsTo","Identifies","TriggersHazardousSituation","PlansRiskManagement","AssessesResidualRisk","WeighsAgainstBenefit","ConcludesBenefitRisk","ConcludesOverallResidualRisk","MonitorsRiskSubject"]},{id:"clinical",label:"Clinical",color:r.clinical,types:["PlansClinicalEvaluation","EvaluatesClinicalClaim","SupportsClinicalClaim","ClaimsClinicalBenefit","ClaimsForUse"]},{id:"fmea",label:"FMEA / FTA",color:r.fmea,types:["AnalyzesFailureMode","HasFailureCause","ResultsInFailureEffect","EscalatesToRisk","DetectsFailureMode","DefinesTopEvent","UsesGate","ContributesToEvent","ContributesToHazard"]},{id:"cybersecurity",label:"Cybersecurity",color:r.cybersecurity,types:["ModelsThreat","ThreatensAsset","ExploitsVulnerability","MitigatesThreat","SecuresInterface","MaintainsSbom","SupportsSecureUpdate","ClassifiesData"]},{id:"usability",label:"Usability (IEC 62366)",color:r.usability,types:["AddressesUseError","AnalyzesUseError","ExposesUseError","SpecifiesScenario","Preserves","SupportsOperatingFunction","DefinesLossCondition"]},{id:"privacy",label:"Privacy",color:r.privacy,types:["ProcessesData","ProvidesPrivacyNotice","AssessesPrivacyImpact","RespondsToDataSubjectRequest"]},{id:"dhf",label:"DHF / QMS",color:r.dhf,types:["GovernsActivity","ProducesWorkProduct","Evidences","Documents","EvaluatesRequirement","AppliesStandardRequirement","ImplementsRiskControl","ProtectsEssentialPerformance"]},{id:"operations",label:"Operations",color:r.operations,types:["ManufacturesSubject","InstallsSubject","ServicesSubject","MaintainsSubject","CalibratesSubject","QualifiesInstallation"]}];export{m as D,y as g};
@@ -0,0 +1,9 @@
1
+ var se=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function ee(o){return o&&o.__esModule&&Object.prototype.hasOwnProperty.call(o,"default")?o.default:o}var T={exports:{}},r={};/**
2
+ * @license React
3
+ * react.production.min.js
4
+ *
5
+ * Copyright (c) Facebook, Inc. and its affiliates.
6
+ *
7
+ * This source code is licensed under the MIT license found in the
8
+ * LICENSE file in the root directory of this source tree.
9
+ */var H;function te(){if(H)return r;H=1;var o=Symbol.for("react.element"),a=Symbol.for("react.portal"),y=Symbol.for("react.fragment"),v=Symbol.for("react.strict_mode"),S=Symbol.for("react.profiler"),D=Symbol.for("react.provider"),V=Symbol.for("react.context"),b=Symbol.for("react.forward_ref"),C=Symbol.for("react.suspense"),_=Symbol.for("react.memo"),w=Symbol.for("react.lazy"),h=Symbol.iterator;function $(e){return e===null||typeof e!="object"?null:(e=h&&e[h]||e["@@iterator"],typeof e=="function"?e:null)}var E={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},A=Object.assign,F={};function m(e,t,n){this.props=e,this.context=t,this.refs=F,this.updater=n||E}m.prototype.isReactComponent={},m.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")},m.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function U(){}U.prototype=m.prototype;function O(e,t,n){this.props=e,this.context=t,this.refs=F,this.updater=n||E}var x=O.prototype=new U;x.constructor=O,A(x,m.prototype),x.isPureReactComponent=!0;var L=Array.isArray,M=Object.prototype.hasOwnProperty,I={current:null},N={key:!0,ref:!0,__self:!0,__source:!0};function B(e,t,n){var c,u={},i=null,l=null;if(t!=null)for(c in t.ref!==void 0&&(l=t.ref),t.key!==void 0&&(i=""+t.key),t)M.call(t,c)&&!N.hasOwnProperty(c)&&(u[c]=t[c]);var f=arguments.length-2;if(f===1)u.children=n;else if(1<f){for(var s=Array(f),d=0;d<f;d++)s[d]=arguments[d+2];u.children=s}if(e&&e.defaultProps)for(c in f=e.defaultProps,f)u[c]===void 0&&(u[c]=f[c]);return{$$typeof:o,type:e,key:i,ref:l,props:u,_owner:I.current}}function Q(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}function P(e){return typeof e=="object"&&e!==null&&e.$$typeof===o}function X(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,function(n){return t[n]})}var W=/\/+/g;function q(e,t){return typeof e=="object"&&e!==null&&e.key!=null?X(""+e.key):t.toString(36)}function R(e,t,n,c,u){var i=typeof e;(i==="undefined"||i==="boolean")&&(e=null);var l=!1;if(e===null)l=!0;else switch(i){case"string":case"number":l=!0;break;case"object":switch(e.$$typeof){case o:case a:l=!0}}if(l)return l=e,u=u(l),e=c===""?"."+q(l,0):c,L(u)?(n="",e!=null&&(n=e.replace(W,"$&/")+"/"),R(u,t,n,"",function(d){return d})):u!=null&&(P(u)&&(u=Q(u,n+(!u.key||l&&l.key===u.key?"":(""+u.key).replace(W,"$&/")+"/")+e)),t.push(u)),1;if(l=0,c=c===""?".":c+":",L(e))for(var f=0;f<e.length;f++){i=e[f];var s=c+q(i,f);l+=R(i,t,n,s,u)}else if(s=$(e),typeof s=="function")for(e=s.call(e),f=0;!(i=e.next()).done;)i=i.value,s=c+q(i,f++),l+=R(i,t,n,s,u);else if(i==="object")throw t=String(e),Error("Objects are not valid as a React child (found: "+(t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t)+"). If you meant to render a collection of children, use an array instead.");return l}function g(e,t,n){if(e==null)return e;var c=[],u=0;return R(e,c,"","",function(i){return t.call(n,i,u++)}),c}function Y(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(n){(e._status===0||e._status===-1)&&(e._status=1,e._result=n)},function(n){(e._status===0||e._status===-1)&&(e._status=2,e._result=n)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var p={current:null},k={transition:null},Z={ReactCurrentDispatcher:p,ReactCurrentBatchConfig:k,ReactCurrentOwner:I};function z(){throw Error("act(...) is not supported in production builds of React.")}return r.Children={map:g,forEach:function(e,t,n){g(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return g(e,function(){t++}),t},toArray:function(e){return g(e,function(t){return t})||[]},only:function(e){if(!P(e))throw Error("React.Children.only expected to receive a single React element child.");return e}},r.Component=m,r.Fragment=y,r.Profiler=S,r.PureComponent=O,r.StrictMode=v,r.Suspense=C,r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=Z,r.act=z,r.cloneElement=function(e,t,n){if(e==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+e+".");var c=A({},e.props),u=e.key,i=e.ref,l=e._owner;if(t!=null){if(t.ref!==void 0&&(i=t.ref,l=I.current),t.key!==void 0&&(u=""+t.key),e.type&&e.type.defaultProps)var f=e.type.defaultProps;for(s in t)M.call(t,s)&&!N.hasOwnProperty(s)&&(c[s]=t[s]===void 0&&f!==void 0?f[s]:t[s])}var s=arguments.length-2;if(s===1)c.children=n;else if(1<s){f=Array(s);for(var d=0;d<s;d++)f[d]=arguments[d+2];c.children=f}return{$$typeof:o,type:e.type,key:u,ref:i,props:c,_owner:l}},r.createContext=function(e){return e={$$typeof:V,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},e.Provider={$$typeof:D,_context:e},e.Consumer=e},r.createElement=B,r.createFactory=function(e){var t=B.bind(null,e);return t.type=e,t},r.createRef=function(){return{current:null}},r.forwardRef=function(e){return{$$typeof:b,render:e}},r.isValidElement=P,r.lazy=function(e){return{$$typeof:w,_payload:{_status:-1,_result:e},_init:Y}},r.memo=function(e,t){return{$$typeof:_,type:e,compare:t===void 0?null:t}},r.startTransition=function(e){var t=k.transition;k.transition={};try{e()}finally{k.transition=t}},r.unstable_act=z,r.useCallback=function(e,t){return p.current.useCallback(e,t)},r.useContext=function(e){return p.current.useContext(e)},r.useDebugValue=function(){},r.useDeferredValue=function(e){return p.current.useDeferredValue(e)},r.useEffect=function(e,t){return p.current.useEffect(e,t)},r.useId=function(){return p.current.useId()},r.useImperativeHandle=function(e,t,n){return p.current.useImperativeHandle(e,t,n)},r.useInsertionEffect=function(e,t){return p.current.useInsertionEffect(e,t)},r.useLayoutEffect=function(e,t){return p.current.useLayoutEffect(e,t)},r.useMemo=function(e,t){return p.current.useMemo(e,t)},r.useReducer=function(e,t,n){return p.current.useReducer(e,t,n)},r.useRef=function(e){return p.current.useRef(e)},r.useState=function(e){return p.current.useState(e)},r.useSyncExternalStore=function(e,t,n){return p.current.useSyncExternalStore(e,t,n)},r.useTransition=function(){return p.current.useTransition()},r.version="18.3.1",r}var G;function re(){return G||(G=1,T.exports=te()),T.exports}var ne=re();const j=ee(ne),J=o=>{let a;const y=new Set,v=(_,w)=>{const h=typeof _=="function"?_(a):_;if(!Object.is(h,a)){const $=a;a=w??(typeof h!="object"||h===null)?h:Object.assign({},a,h),y.forEach(E=>E(a,$))}},S=()=>a,b={setState:v,getState:S,getInitialState:()=>C,subscribe:_=>(y.add(_),()=>y.delete(_))},C=a=o(v,S,b);return b},oe=(o=>o?J(o):J),ue=o=>o;function ce(o,a=ue){const y=j.useSyncExternalStore(o.subscribe,j.useCallback(()=>a(o.getState()),[o,a]),j.useCallback(()=>a(o.getInitialState()),[o,a]));return j.useDebugValue(y),y}const K=o=>{const a=oe(o),y=v=>ce(a,v);return Object.assign(y,a),y},ie=(o=>o?K(o):K);export{j as W,ne as a,se as b,ie as c,ee as g,re as r};
@@ -0,0 +1,6 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" fill="none">
2
+ <rect x="4" y="4" width="56" height="42" rx="18" ry="18" fill="#2DD4A8"/>
3
+ <path d="M18 46 Q14 58 10 60 Q18 55 24 46" fill="#2DD4A8" stroke="#2DD4A8" stroke-width="2" stroke-linejoin="round"/>
4
+ <text x="32" y="32" text-anchor="middle" font-family="Arial, Helvetica, sans-serif"
5
+ font-size="26" font-weight="bold" fill="white">M</text>
6
+ </svg>
@@ -0,0 +1,19 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>MEMO Architect</title>
7
+ <link rel="icon" type="image/svg+xml" href="/favicon.svg">
8
+ <link rel="preconnect" href="https://fonts.googleapis.com">
9
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
+ <link href="https://fonts.googleapis.com/css2?family=Nunito:wght@700;800;900&display=swap" rel="stylesheet">
11
+ <script type="module" crossorigin src="/assets/index-c27kHB43.js"></script>
12
+ <link rel="modulepreload" crossorigin href="/assets/zustand-qbFpP9Up.js">
13
+ <link rel="modulepreload" crossorigin href="/assets/reactflow-WKyu73tD.js">
14
+ <link rel="stylesheet" crossorigin href="/assets/index-BZhRuk7M.css">
15
+ </head>
16
+ <body>
17
+ <div id="root"></div>
18
+ </body>
19
+ </html>
package/dist/logo.png ADDED
Binary file
Binary file
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=memo-architect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memo-architect.d.ts","sourceRoot":"","sources":["../../src/bin/memo-architect.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import { architectBuildCommand } from '../commands/build.js';
4
+ import { architectDevCommand } from '../commands/dev.js';
5
+ const program = new Command();
6
+ program
7
+ .name('memo-architect')
8
+ .description('MEMO Architect — interactive and distributable model workbench')
9
+ .version('0.4.4');
10
+ program
11
+ .command('dev')
12
+ .description('Start Architect with live model reload')
13
+ .option('-p, --port <port>', 'Server port', '3000')
14
+ .option('--no-open', 'Do not open a browser')
15
+ .action(async (options) => {
16
+ await architectDevCommand({ port: Number.parseInt(options.port, 10), open: options.open });
17
+ });
18
+ program
19
+ .command('build')
20
+ .description('Build a static Architect viewer with embedded project data')
21
+ .option('-o, --output <dir>', 'Output directory', 'dist')
22
+ .option('--standalone', 'Inline the entry JavaScript and CSS into index.html')
23
+ .action(async (options) => {
24
+ await architectBuildCommand(options);
25
+ });
26
+ program.parse();
27
+ //# sourceMappingURL=memo-architect.js.map
@@ -0,0 +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;AAEzD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACF,IAAI,CAAC,gBAAgB,CAAC;KACtB,WAAW,CAAC,gEAAgE,CAAC;KAC7E,OAAO,CAAC,OAAO,CAAC,CAAC;AAEtB,OAAO;KACF,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,wCAAwC,CAAC;KACrD,MAAM,CAAC,mBAAmB,EAAE,aAAa,EAAE,MAAM,CAAC;KAClD,MAAM,CAAC,WAAW,EAAE,uBAAuB,CAAC;KAC5C,MAAM,CAAC,KAAK,EAAE,OAAwC,EAAE,EAAE;IACvD,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AAC/F,CAAC,CAAC,CAAC;AAEP,OAAO;KACF,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,4DAA4D,CAAC;KACzE,MAAM,CAAC,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,CAAC;KACxD,MAAM,CAAC,cAAc,EAAE,qDAAqD,CAAC;KAC7E,MAAM,CAAC,KAAK,EAAE,OAAiD,EAAE,EAAE;IAChE,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEP,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare function architectBuildCommand(options: {
2
+ output?: string;
3
+ standalone?: boolean;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAkCA,wBAAsB,qBAAqB,CAAC,OAAO,EAAE;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BhB"}
@@ -0,0 +1,45 @@
1
+ import { cpSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync, } from 'node:fs';
2
+ import { dirname, resolve } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { buildProjectSnapshot, serializeForInlineScript } from '@memoarchitect/tools';
5
+ function architectPackageRoot() {
6
+ return resolve(dirname(fileURLToPath(import.meta.url)), '../..');
7
+ }
8
+ function inlineEntryAssets(html, outputDir) {
9
+ html = html.replace(/<link[^>]+rel="stylesheet"[^>]+href="([^"]+)"[^>]*\/?>/g, (match, href) => {
10
+ const path = resolve(outputDir, href.replace(/^\//, ''));
11
+ return existsSync(path) ? `<style>${readFileSync(path, 'utf-8')}</style>` : match;
12
+ });
13
+ html = html.replace(/<script[^>]+src="([^"]+)"[^>]*><\/script>/g, (match, src) => {
14
+ const path = resolve(outputDir, src.replace(/^\//, ''));
15
+ return existsSync(path) ? `<script type="module">${readFileSync(path, 'utf-8')}</script>` : match;
16
+ });
17
+ return html;
18
+ }
19
+ export async function architectBuildCommand(options) {
20
+ const snapshot = await buildProjectSnapshot();
21
+ const sourceDist = resolve(architectPackageRoot(), 'dist');
22
+ if (!existsSync(resolve(sourceDist, 'index.html'))) {
23
+ throw new Error('Architect distribution is missing. Reinstall @memoarchitect/architect or run its build.');
24
+ }
25
+ const outputDir = resolve(snapshot.projectRoot, options.output || 'dist');
26
+ if (outputDir === sourceDist) {
27
+ throw new Error('Output directory cannot overwrite the installed Architect distribution.');
28
+ }
29
+ rmSync(outputDir, { recursive: true, force: true });
30
+ mkdirSync(outputDir, { recursive: true });
31
+ cpSync(sourceDist, outputDir, { recursive: true });
32
+ const indexPath = resolve(outputDir, 'index.html');
33
+ let html = readFileSync(indexPath, 'utf-8');
34
+ const payload = serializeForInlineScript({
35
+ model: snapshot.model,
36
+ validation: snapshot.validation,
37
+ completeness: snapshot.completeness,
38
+ });
39
+ html = html.replace('</head>', `<script>window.__MEMO_DATA__=${payload};</script>\n</head>`);
40
+ if (options.standalone)
41
+ html = inlineEntryAssets(html, outputDir);
42
+ writeFileSync(indexPath, html);
43
+ process.stdout.write(`Architect viewer built at ${indexPath}\n`);
44
+ }
45
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function architectDevCommand(options: {
2
+ port?: number;
3
+ open?: boolean;
4
+ }): Promise<void>;
5
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAeA,wBAAsB,mBAAmB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnG"}
@@ -0,0 +1,20 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { dirname, resolve } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { startProjectServer } from '@memoarchitect/tools';
5
+ function architectPackageRoot() {
6
+ return resolve(dirname(fileURLToPath(import.meta.url)), '../..');
7
+ }
8
+ function clientRoot() {
9
+ const root = architectPackageRoot();
10
+ const sourceRoot = resolve(root, 'packages', 'web');
11
+ return existsSync(resolve(sourceRoot, 'index.html')) ? sourceRoot : root;
12
+ }
13
+ export async function architectDevCommand(options) {
14
+ await startProjectServer({
15
+ port: options.port,
16
+ open: options.open,
17
+ clientRoot: clientRoot(),
18
+ });
19
+ }
20
+ //# sourceMappingURL=dev.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.js","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,SAAS,oBAAoB;IACzB,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,UAAU;IACf,MAAM,IAAI,GAAG,oBAAoB,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;IACpD,OAAO,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAA0C;IAChF,MAAM,kBAAkB,CAAC;QACrB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,UAAU,EAAE,UAAU,EAAE;KAC3B,CAAC,CAAC;AACP,CAAC"}
package/package.json ADDED
@@ -0,0 +1,77 @@
1
+ {
2
+ "name": "@memoarchitect/architect",
3
+ "version": "0.4.4",
4
+ "description": "MEMO Architect — interactive workbench and distributable viewer for medical device systems engineering",
5
+ "type": "module",
6
+ "bin": {
7
+ "memo-architect": "./lib/bin/memo-architect.js"
8
+ },
9
+ "exports": {
10
+ "./package.json": "./package.json",
11
+ "./dist": "./dist/index.html"
12
+ },
13
+ "files": [
14
+ "dist/",
15
+ "lib/",
16
+ "README.md",
17
+ "LICENSE"
18
+ ],
19
+ "dependencies": {
20
+ "@dagrejs/dagre": "^2.0.0",
21
+ "@maxgraph/core": "^0.24.0",
22
+ "@monaco-editor/react": "^4.7.0",
23
+ "@xyflow/react": "^12.3.0",
24
+ "commander": "^12.1.0",
25
+ "elkjs": "^0.9.3",
26
+ "monaco-editor": "^0.55.1",
27
+ "react": "^18.3.1",
28
+ "react-dom": "^18.3.1",
29
+ "react-router-dom": "^7.13.2",
30
+ "zustand": "^5.0.0",
31
+ "@memoarchitect/tools": "0.4.4",
32
+ "@memoarchitect/ontology": "0.4.4"
33
+ },
34
+ "devDependencies": {
35
+ "@tailwindcss/postcss": "^4.0.0",
36
+ "@types/node": "^22.0.0",
37
+ "@types/react": "^18.3.0",
38
+ "@types/react-dom": "^18.3.0",
39
+ "@vitejs/plugin-react": "^4.3.0",
40
+ "@vitest/coverage-v8": "^2.1.0",
41
+ "autoprefixer": "^10.4.20",
42
+ "jsdom": "^29.1.1",
43
+ "postcss": "^8.4.49",
44
+ "tailwindcss": "^4.0.0",
45
+ "turbo": "^2.3.0",
46
+ "typescript": "~5.5.0",
47
+ "vite": "^6.0.0",
48
+ "vitest": "^2.1.0"
49
+ },
50
+ "repository": {
51
+ "type": "git",
52
+ "url": "git+https://github.com/memoarchitect/memo-architect.git"
53
+ },
54
+ "license": "MIT",
55
+ "publishConfig": {
56
+ "access": "public"
57
+ },
58
+ "engines": {
59
+ "node": ">=20.0.0"
60
+ },
61
+ "scripts": {
62
+ "build": "pnpm run check:cache && pnpm --filter @memoarchitect/tools build && pnpm run build:client && pnpm run build:cli",
63
+ "build:client": "vite build --config packages/web/vite.config.ts",
64
+ "build:cli": "tsc -p tsconfig.architect.json",
65
+ "check:cache": "bash scripts/check-no-ontology-cache.sh",
66
+ "dev": "vite --config packages/web/vite.config.ts",
67
+ "test": "cd packages/web && vitest run",
68
+ "test:coverage": "cd packages/web && vitest run --coverage",
69
+ "type-check": "pnpm --filter @memoarchitect/tools build && tsc -p packages/web/tsconfig.json --noEmit && tsc -p tsconfig.architect.json --noEmit",
70
+ "clean": "rm -rf dist lib",
71
+ "docs:serve": "pdm run docs-serve",
72
+ "docs:build": "pdm run docs-build",
73
+ "architect": "node lib/bin/memo-architect.js",
74
+ "example:dev": "cd memo-tools/memo/examples/gpca-pump && node ../../../../lib/bin/memo-architect.js dev --port 3000",
75
+ "setup": "pnpm install && pnpm run build && pdm install"
76
+ }
77
+ }