From 8a376a87a89a00a3ff9cfeabf01cf2bc820fd6a6 Mon Sep 17 00:00:00 2001 From: Andre482 Date: Sat, 27 Jun 2026 19:26:42 +0300 Subject: [PATCH] Release 1.0.8: Pan from anywhere on touch, keyboard selection, and quality audit. - Single-finger touch panning now works even when starting on a node; a tap still selects. - Add keyboard node selection (Tab/Enter/Space/Escape) and validated settings input. - Guard against overwriting malformed .bowtie files; show a notice and keep original data. - Add Vitest tests (model/layout/panZoom) and a GitHub Actions CI workflow. - Split bowtieView into history/panZoom/stackRows/externalSync modules; refresh README, examples, and contributor docs. Co-authored-by: Cursor --- .github/workflows/ci.yml | 22 + .gitignore | 1 + CHANGELOG.md | 19 + CONTRIBUTING.md | 100 +++ README.md | 68 +- assets/screenshot-barrier.png | Bin 0 -> 104425 bytes assets/screenshot-diagram.png | Bin 0 -> 230341 bytes examples/cold-storage-ammonia.bowtie | 590 ++++--------- examples/steamcracker.bowtie | 68 +- manifest.json | 4 +- package-lock.json | 1223 +++++++++++++++++++++++++- package.json | 8 +- scripts/engine.mjs | 34 + scripts/generate-examples.mjs | 307 +++++++ scripts/render-screenshots.mjs | 279 ++++++ src/bowtieView.ts | 335 ++++--- src/editorModal.ts | 4 +- src/externalSync.ts | 56 ++ src/helpModal.ts | 2 +- src/history.ts | 53 ++ src/panZoom.ts | 72 ++ src/settingsTab.ts | 119 +-- src/stackRows.ts | 43 + styles.css | 6 + tests/layout.test.ts | 92 ++ tests/model.test.ts | 146 +++ tests/panZoom.test.ts | 58 ++ versions.json | 3 +- 28 files changed, 3023 insertions(+), 689 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 CONTRIBUTING.md create mode 100644 assets/screenshot-barrier.png create mode 100644 assets/screenshot-diagram.png create mode 100644 scripts/engine.mjs create mode 100644 scripts/generate-examples.mjs create mode 100644 scripts/render-screenshots.mjs create mode 100644 src/externalSync.ts create mode 100644 src/history.ts create mode 100644 src/panZoom.ts create mode 100644 src/stackRows.ts create mode 100644 tests/layout.test.ts create mode 100644 tests/model.test.ts create mode 100644 tests/panZoom.test.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..6dfd4de --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,22 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: npm + - run: npm ci + - run: npm run lint + - run: npx tsc -noEmit -skipLibCheck + - run: npm test + - run: npm run build diff --git a/.gitignore b/.gitignore index a28ac69..49e069f 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ main.js.map *.log deploy.local.mjs deploy.local.ps1 +*.code-workspace diff --git a/CHANGELOG.md b/CHANGELOG.md index 4041213..1a1b9fc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,25 @@ All notable changes to O-Tie are documented here. +## [1.0.8] — 2026-06-27 + +### Added + +- **Pan from anywhere on touch** — Single-finger drags now pan the canvas even when the finger starts on a node; a tap still selects the node. +- **Keyboard node selection** — Nodes are focusable (`Tab`), selectable with `Enter`/`Space`, and clearable with `Escape`. +- **Settings validation** — Numeric layout settings reject invalid input with clear visual feedback instead of silently ignoring it. +- **Unit tests and CI** — Vitest coverage for the model, layout, and pan/zoom logic, plus a GitHub Actions workflow running lint, type-check, tests, and build. + +### Fixed + +- **Data-loss guard** — A malformed `.bowtie` file no longer gets overwritten by an empty diagram; the original content is preserved and a notice is shown. + +### Changed + +- Internal: split the editor view into focused modules (history, pan/zoom, stack rows, external sync) and refreshed the README, examples, and contributor docs. + +--- + ## [1.0.7] — 2026-06-23 ### Fixed diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..163b3dc --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,100 @@ +# Contributing to O-Tie + +Thanks for your interest in improving O-Tie. This guide covers local setup, the +checks we run, how to regenerate documentation assets, and the release process. + +## Prerequisites + +- Node.js 20+ and npm +- Obsidian 1.4.0+ (for manual testing) + +## Setup + +```bash +npm install +``` + +## Develop + +```bash +npm run dev # esbuild watch -> main.js +npm run build # type-check (tsc) + production bundle +npm run lint # ESLint with the Obsidian plugin guideline rules +npm test # unit tests (model + layout) +``` + +To test inside a real vault, point the deploy helper at your plugin folder: + +```bash +OBSIDIAN_PLUGIN_DIR="/path/to/vault/.obsidian/plugins/o-tie" npm run deploy +``` + +`npm run lint`, `npm run build`, and `npm test` must all pass before a change is +merged or released — these mirror the automated checks Obsidian runs on the +community directory. + +## Regenerating documentation assets + +The README screenshots and the example `.bowtie` files are generated from the +plugin's real layout engine and stylesheet, so they always match the current +behaviour. + +```bash +npx playwright install chromium # one time, for screenshots +npm run screenshots # -> assets/*.png +npm run examples # -> examples/*.bowtie +``` + +## Release process + +Obsidian requires the GitHub release tag to match `manifest.json` exactly +(e.g. `1.0.8`, not `v1.0.8`). + +1. Run `npm run lint`, `npm run build`, and `npm test`. +2. Complete the QA checklist below. +3. Bump the version: `npm version patch` (updates `manifest.json` and + `versions.json` via `version-bump.mjs`). +4. Update `CHANGELOG.md`. +5. Push the tag: `git push origin `. The release workflow builds and + attaches `main.js`, `manifest.json`, and `styles.css`. + +### Manual QA checklist + +Mobile regressions have driven most past patch releases, so test on a phone or +tablet as well as desktop before every release. + +Desktop: + +- [ ] Create a new bowtie; rename it via the toolbar title. +- [ ] Add a threat, consequence, event, and barrier from the toolbar. +- [ ] Add a prevention/mitigation/between-events barrier via lane `+` buttons. +- [ ] Add a barrier analysis stack row; change a preset value; add a custom row. +- [ ] Add a degradation factor and a safeguard. +- [ ] Edit a label inline (double-click) and notes (inspector). +- [ ] Undo/redo (toolbar and Ctrl+Z / Ctrl+Y). +- [ ] Pan (drag), zoom (wheel), and Fit. +- [ ] Export as image (full diagram and visible area), with/without grid. +- [ ] Delete nodes; confirm autosave writes to the `.bowtie` file. +- [ ] Open a deliberately malformed `.bowtie` file: a notice appears and the + file is not overwritten. + +Mobile (phone and tablet): + +- [ ] One-finger pan and two-finger pinch zoom. +- [ ] Overlay `+` / `×` controls appear at node corners and stay circular after zoom. +- [ ] Add and delete nodes via overlay controls. +- [ ] App swipe gestures do not fire while interacting with the canvas. + +## GitHub repository topics + +For discoverability, the repository should carry these topics: + +``` +obsidian, obsidian-plugin, bowtie, risk-management, process-safety, hse, barrier-management, risk-analysis +``` + +A maintainer can set them with: + +```bash +gh repo edit --add-topic obsidian,obsidian-plugin,bowtie,risk-management,process-safety,hse,barrier-management,risk-analysis +``` diff --git a/README.md b/README.md index 648f11c..14c371d 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,18 @@ Build and edit **risk bowtie diagrams** in Obsidian with an interactive visual e Diagrams are stored as `.bowtie` files in your vault and auto-save as you edit. +## Screenshots + +![O-Tie editor showing a bowtie with threats, prevention and mitigation barriers, a central top event, consequences, an escalation chain, and a colour-coded barrier analysis stack](assets/screenshot-diagram.png) + +*A bowtie for a cold-storage ammonia loss-of-primary-containment scenario.* + +![A prevention barrier with its full analysis stack — type, effectiveness, criticality, responsible party, validation method, and status — plus a safeguard and degradation factor below it](assets/screenshot-barrier.png) + +*Per-barrier analysis stacks and escalation factors (safeguards and degradation factors).* + +> Regenerate these images with `npm run screenshots` (requires `npx playwright install chromium` once). + ## Features - Interactive bowtie editor with fan-in/fan-out layout @@ -82,20 +94,49 @@ After updating O-Tie on desktop, let Obsidian Sync finish, then reload Obsidian ## File format -`.bowtie` files are JSON. Example: +`.bowtie` files are JSON. The hazard and top event live inside `events`, and barriers can carry escalation chains and an analysis `stack`: ```json { - "name": "Defective Steamcracker", - "hazard": "High pressure ethylene", - "topEvent": "Loss of containment", - "threats": [{ "label": "Corrosion", "preventionBarriers": [] }], - "consequences": [{ "label": "Fire", "mitigationBarriers": [] }], - "view": { "zoom": 1, "panX": 0, "panY": 0 } + "id": "b1f2…", + "name": "Defective steamcracker", + "events": [ + { + "id": "ev1", + "label": "Loss of containment", + "hazard": "High-pressure ethylene", + "transitionBarriers": [] + } + ], + "threats": [ + { + "id": "t1", + "label": "Tube corrosion / fatigue", + "preventionBarriers": [ + { + "id": "pb1", + "label": "Mechanical integrity inspection", + "degradationChains": [], + "stack": [ + { "id": "s1", "field": "type", "label": "Active Hardware", "color": "#48c9b0" } + ], + "stackCollapsed": false + } + ] + } + ], + "consequences": [ + { "id": "c1", "label": "Fire / explosion", "mitigationBarriers": [] } + ], + "view": { "zoom": 1, "panX": 0, "panY": 0 }, + "createdAt": "2026-06-12T00:00:00.000Z", + "updatedAt": "2026-06-12T00:00:00.000Z" } ``` -See [examples/steamcracker.bowtie](examples/steamcracker.bowtie) and [examples/cold-storage-ammonia.bowtie](examples/cold-storage-ammonia.bowtie) (LinkedIn promo scenario). +Files written by older versions (with top-level `hazard`/`topEvent` and barrier `escalationFactors`) are migrated automatically on open. + +See [examples/steamcracker.bowtie](examples/steamcracker.bowtie) and [examples/cold-storage-ammonia.bowtie](examples/cold-storage-ammonia.bowtie). ## Changelog @@ -105,11 +146,16 @@ See [CHANGELOG.md](CHANGELOG.md). ```bash npm install -npm run dev # watch mode -npm run build # production build -npm run lint # Obsidian plugin guidelines check +npm run dev # watch mode +npm run build # production build +npm run lint # Obsidian plugin guidelines check +npm test # unit tests (model + layout) +npm run screenshots # regenerate README images (needs: npx playwright install chromium) +npm run examples # regenerate example .bowtie files ``` +See [CONTRIBUTING.md](CONTRIBUTING.md) for setup, asset regeneration, and the release/QA checklist. + ## Third-party licenses This plugin bundles [html-to-image](https://github.com/bubkoo/html-to-image) (MIT) for PNG export. diff --git a/assets/screenshot-barrier.png b/assets/screenshot-barrier.png new file mode 100644 index 0000000000000000000000000000000000000000..163e1de6f90c5d223b1e6cbf938cfef9e7859ece GIT binary patch literal 104425 zcmeFYWmsEXw>BDRDFxcn7WV?h3l!Ht1*f<>#oaY%h2l`$-4h&wCs2xOkw76>aS!ft z(!THeJbRzBuYLBP?>qZ^*UpbzSy^k^nD@Nr7-QZmR9R8_Auc&C004L>Dp=kE4jl{L-&gk}REht-dJvNT;_oZc$Fe$qU%h-5TmAQy@vHys4H8Mbm&|Hq_VctE zRVL(Ie45nI!NB1hDzE>a{N&4N2(n{=h}{_sU3~r5gINDrsmc7sQ9rJ~M@p(p8&~bZ zHf!R*`0l@4Ln_e!O8f6R01rOxhX0>FKmXeS@!z;X@H1Stiz~^EX0^C4xn58HD^O)9 z$LVA@lh-*Wvr;6){|nP>A^#b`8HtkqJ+N?7;uG{Xh+TQ!|Cei++}>a6{+liU#-wgW z5B|pP|Bo2rzcC>G8 zO|kz0E%TK${Ci-j_vDw($kivO;Sl_nYp{r>5&t(E7T|mKrODq|{r`NA`X2=TH5vbF z{0!ER_As#km5bf+{2XS(|EB}M_ZRK`8``ve>Wnv~s_Azxm7w#}U--uTj~@M3sdCxQ zf`5ms>^F?&E1FH6Gw+iB%Qf)%T%A?@We@;>^xiDVoxiUCPw~tC2lIbT>HiJ$>aPhk zkIutKJ&PD0O77GBzd5V_@Ma0Z^m-DjH+g=fGgJSCZ>_&M_CG+a0xQSA2Nn@G3tRmt z`>I9ze_Dgyi@%(Ua^~EI|KZmE^%0IT7DjSmcQg$iz)RS|!UFS0+aQ+t!_H@D2!)Y3 zHUmU~a|7)XDb6IHW0sT%U+ph_D}S+YgSi~UjSe;eO3|nKfG`@A<@;rszIK`YB%C(V zz2{nePOcc4gnuf@ypOJg^bWcb!I=0UXOLr>A;UG<@L7GUNv$f__OYBfLU*@j}9XKCmcU-PO`kd=8&}h(B(k(2B17HQw>CAP` zuq>!}&EC|^FGiDs{jXer71*%n@^|c4Oq8#vA`B!=YiBag8#aoEi||=9 zhmkld0LwFr1U8xpPv0!Aw85|m$?)$2;%oa72IoPh3wR1t5)+?NuNsJ5f5rB&GKC+K zMP0^F3$tM@hu-uvWx+wO0bWnpHwC7Sx+Xz$-J2``mWsdVhQnE2ZKg0XD=uldd@K&0 zCE{!SecKOzcdP^RRWDD4?#NnP64mt2FnxE>m!5tXaXJT#gxjMrrOr6DtPjtRyV$pc z`6Qib%S*Zk1?YWv54MN=f~kQQN`Sy8UT1qFzm|$1nkCyml()zf4HV@FT!eH)y>)h_ zLCZJkDXWpIX+IK>xo@!onU02cD55(}>(^4(ye?BwY1(~kfAj0iD4`Zei=i8l5(BI~ z8BaXVxdrC`#-7*FLhG2%BCDQywR<_+gY={oe~FooY)pZ%*@qiD+l^<}!O?htm)sBm z>>w&}_S*0lIc#|MO}{Rk(hc5ZBwj4#h%Yk?Zi?{M`Ik3&YhXMh*)V#0f$i+yrD#~a zzK}W=kTrar#el|;^2vJXmHElx%@Ze9e3^eTKmW7Mif};@`{|Q3r#AbtuGtZY%9L@cPn+?2fWm@*H7<;i@mC;CjbJo zvXeJjJ0qq9*DCO&$0>g50V%RTI)I+&RdM+=OCxPQw?|m$1^j9%|MuZzlhREXjshXT zxHQ!rO0nmxH8d=5 zh_(fcC!n*0$xA*wR#KIi;hn)Am58h=aUhOz{l;48p!!}KW*FtI=I>cm6DO0xWp>gfg^Fa5MMlA4EpSIieE{XggAq@j5lTIqJ1I0^O#03 zr?=>5F4x-K(X8>i>(6_kK4B5qn1G1Prb@bDOLaFfRXplKj8DI^9-&JeTrOgt(x3qZ z+H4O)6RluuH8WYNInBy5fZG202z?kQK|AMtW|u2HG{43>x3JtZ4x31g3QzswZG=Kj~{`>?49V$RI#3e4SIJkc5*HHANIe zVruyiS&`{>>HoP1(zv>h7@K43ZsJ#0VtooXs#Euhv}&3l#d{ zYO5U;B;=_=<&=^6aQSf3*8mJ7w>9{hUTv7P8b11{$eYSVKi9Xst_y2~mceO1w-NKD z!T3gwSxU@RaLx)}U|k^>jacWPeo8!14ne?~#{FoVv2j^VmS4jDD#^lwEY)MhIy%G6 zIBZ4iczrWQilv3c__4iy9m98az@gjf#lCy#y(9X178x4HqOsMRV?7zw2tmE`WSyc^ zX=;*J&Uyz3Hy-=ZH-o5D0_J;-C~g-YG4JX9EsVtyGYeTBo>G?yWj2D81lhq1+`*Vi zJ0K@d95}^U-9ev?jfIWZHF3IeU_fJ{Y6@@VsAx5@Pt@7Htbtr-6iNOeeywJ5->H6J zpz2^@=(d=k*Tv!Nph?KIs5n}g(@@MplU4W9Dm97j63YUXp5CYzc~s+Z!%=B*hG& z&*4&TBj#eBxBh;rS6u^Bb;#VpLW=J&%4I^$HOHl5S}3+!M@J)4D<)-jAOVi>es^rG zv>x9evlL{uBF$G*27V<_9XI%fEi&~mOyO~W)tWM%7u4OZ5Du=F?Q1vltMw6d2QfRl z8AUu*UZ%m4c{C|gXfq|sE-FbFlP!6fhXNOFPDKrQZUxe4X112OMs|NL1g}UmL3Txr0gbI>VPPK!xaL`FXJ{2IBL#8L`MCqD@bWa+t%mXf`XwyYHC z!Z%K~b5AahM5$G7yTxjqd8YZXnU`$zYz#UzaUZwph90WJY0Rvn zvR$j-UG*7xEv0c61PP=~ORuOD@-Y5UOPplrGnVjJm3T?RHhgae?n9$XvvyUUEJv_j ziJVRskrl%PM3|mQ<)c=SzI=rh{9yct3Xg5`#;}?Xe zDxxO_<5f@StgW;L8i)exQP>c}o*PN>K{JiruAUTK7VMVl@S#~eU#P3Cm`lOt!O-<5 zi)v;nFURoMH>$*)`P#^rWMOFuAgkbJt!V7EMitGsKSdh^{5XJgM>GgGjpigjEC7L| z9#`BmPjmg+bclIWV(I}Z3+v~$i^SYRy_FXh9089)H7wa6A|iby^RjS+N$n->(60o( zsNq!@Kco}<17QWd-?FH}Srfb*AK+4cc&l|CV>6hPmutt6uCp=HutH;dV6PGJ)Fk_s z5zWG+LT@KF+^aM^o6`J&po}O)+86WVLXqMTo=v&NBcFh^na!itO(_VmdwMNT#e0Gz zb3Pxw`ZU3xBA$Wn8=LiX6Pc!#!BH7y4yH|teA%TAE)Lq^o;3qO^|xXfuCqZto5aNv zgH0hthytiBqGfW|=y|<|{kq`w3~kscJ6=&sL(u zDHt;&x<7NIydAcPmWGsNZiS%?5(sXWy}yo7?Km*_A3!R1)RoRhc+;e=gR-yLj6wN} z;jbC{%HiP}rX{SwuMv}xPOBF6_}D94{9ujfa2`-`R9yFyx=wwob30RW0@dN5MWvP3 z7yLw8U8_~l_>l)KKUIaCU$5`m*Jp!LK25XwJcx39!WI?E;7Zt!Xc| zx>UNZ-iLzA6QWno$uUTISh>-WW@Z(JnhNjf^=o1TUW54(Ys&S|tPFm?EB)bSqu73v z_0OEt%^X9G>x-M6lwz2noSAM<-Y_dN`AgLC0N>rxRBq?3lJp*gyVGH63XXiIJ>d{)~PPZB-eB^ryut_H7gB+vTwJy$y$XORGyotOQzI6kcAa2JF?CramKHZ9 z>Gb-Z?6Hxz_ONBiwds;$3FB|hw*?MsP@W90dASsIgRD#GIUT^e=m4j%cAwtXl_v~s9KjK|3s~4dpElz@ z^O`CgIH}M`zXy*qLQV{ht(qOnY$J_KP3x1$)k`Mw>t}W~VYR;*855wK>WgHDu-IVS zlfAA>n^~+wGt-!Y1Jb4|O}kibbTu>mmmnKv%)D(68M9<^0TQWlUr42?j$A0ntG|O1n8d z&0fSA59D+~^oyLv4&1$bs4nwU3!_y8tjSs%BlYvpwW-QPNX^_>v)Qf}ziY+jv1`=w z=0r(U)4i7~+x{v5VW|SdWB&c+aNVdfW2R65%o5P0_=i{*Bexym#Ct`J z|B!3o=x4dyr)Dom#G6@cjy*Eg&WWtDv?h3qNfKOhW)7er)BRz>{pY&Fu4QBumN2R4 zZ<1XB=7ATC8wk8l8lZ(jG2_0hEb z2wO4QJ{m39kAw3?q)uM z*<+W_oaEca=?(EY*|NFbEoj1UWb?UI0;M#;U

_TR$FzmyTF&HQtog48IRg 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

Zjf5tW`aTZrng-`H8f|bqa1ZhAfl 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 literal 0 HcmV?d00001 diff --git a/assets/screenshot-diagram.png b/assets/screenshot-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..0200df7e2dfe27ad0db622af11130c41d3f0d7f8 GIT binary patch literal 230341 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

^v#I^J-8Jl`{{` zf11DL%skWX)!uU+R$d2o3lWu^3Y|&iq&8E368l(siy*1I{3K6h7Tk)VmT^+SdJ{Qv z@@~}PaHrem;BQu3fj}uefIA7-)kIFKi5g$4?(DsH59)p^r2t>OQ zo82iljF!CgLOkDAq=;;nJi15qs`QrMOZc78aeZ(cBpZaE?f-etfC7!bw5G;muMLP? z`ONm+PS53yq+hn>HtL36?sPC|`>Ty%^1Acud-4uAC5w!YkxmY87H2+A+rApYktz%H zye@c@ifh3UOYURWe&1!na-Q?@l;H@M2Oo>=Ft&Wf*4H`~=Zz9mKAymEO<%0Pqu6Zi z@xjovLO!w?T4h^h(&rOnpGcWjpL{nmXIQ*Vc|k!Bah_0Q-q00#^Z{0mLzj{n%2?3# za$sJ^ko!_+2h`2i`u<+2`MZ0>7(`RVmo=X>sP5ur^%`*57J2Fkgm@fLjMZ5Lx?v<9 z|LPsSMSNEReK*gu$B!_@us>@>eaxop`MIph-jP4IFC{n0L9i;;qSrfb;u@f8*YE;o z7h-Tyh5l)Ssdd~_k+!f%DmZ(tpU^A8v1p7|vwhC4#wZiNV*A9C&8zL%x*-O~$@B1Y zjOX>vp>On4#oGr3c>O@g0)_N{UKOxiaQ-&SlmaACVzqMHYti3%|6n94jMNP` z94}Bg{Q}t-U6mizy6ncZqM&z1u^o6h_Y{AEne%=t+U>}u^T`&J&t(t{J~sy$j%LL_ zOX3_xH5%Ep?~tc%&o&$nD+m5M8)v5OEA`A1rgQJs1oyLYVu9yswFN65zm{azY%-D-7AqxYbi7 zoKjt_K9p$nhFV6)b9Kg#32Ij^NRlKREK;XMf+%iofa3pVQh&Td+!Vn(PtZ=s_5+X7 z?fYVV1IWH?2d5Ka^1nqqN{hGkm zD`3d3^KhQ!isS{&xaFAA8a=2^%Z%c!W$)U)u0PJxF3o_Q@|^Ek6HB>Ythpr>;xl-B zeB3oS)XaZYd~B@{>7QlV<@o^bxAxi9*o?pvqLeEZoo>j$3rA!ecgI!#>?4x1{c_n6 zYOC)83b`5X4F+%cqwDMdBk;Z#*2eAk?Ia+W2NO1cY>2L z^O~O~+t0Hq>e=f`@&+xl8kK0`_SfQaHVxcLjB{&h3|q@MDtSa#OlaLifUedJl5a-Z z!WTc4?1-I4S6v<#G_Gs)>pZ_;-G0Abyj+(Y&AylRf!0~kj2wl@kW*uH;U@$16CNMJ8t(oG?3k z!KNfaX|EJ8yOTmTfciN=G@(;>jxZO z;;DcBM3^R%>A{iv;8Li95SV@lI+^6@&hTN0+FoC3=G5*5i-pCInN!dxZSb{ZW<9%m zQP#0Bl)HoXdVZCneuY+j|04RW&Eh{>KmyukwBxbT(N5%61B{3TiFCc2WV+)0U}f7L zFko1G$W%XVk9%oWfv0#8B8fWK_q&`^*Yq75RXbZTtJLRif?UjXjSM#bx@$E$;)2Z+ zkt zqf3cul^nf}XCE1qV6UQ@$=~5~HR^Zb=Q?ejfD5youI30b(Jzndrj%nA!7Lxxl$Jy1 z+;`@s>?m96o~f}O`$A`QjFB+T4Lb8dk=lese=`uoN# zC*&O}Y%p0d*Qz{ruUP%%!%6tHRZqrexJ;IMk_w#{BKsx2b5!YNmJNOp=#+u(c^VS( zzU+Hiz|nAABon%n{d`1>DgyuD&-$RHx{ z%tPOZG)hSha7{`_h#0!gdDU3Pr4r5>PYZnvaI(A_QM6U-#<$B23h$bX72&aDG|Ck2 zG)-_f=Bd2V(fXL_YTxP8hfC*TARlq?HT-(^VvQ;!GdC%g(qyQHAmzNY6xqjkj`(p- zxDL!lC0tr4^3|BBI>siK%4isorCn>vq0u<@V)Kvq7J`jTGcA$(5WgoUyZ_qGZn= z(03uqF9i93x1Z|%#aW4hSJfQj0 z>t|mj%HqQl!f{O-e%N&#lTz3l?t{RZJ&v=}&u0`A;g^ogUidfqY z2F_PZ$C4IHEklA%9N zXEU;tIS;&uuNKBkP(tsk{~1u8srNbF#ygQvA%M%$Y+L2_iJ_^}d4vVs4DOrVW*@g1 z56d9y=U1!Ep*|A$>JIJfjY4Ku+`rhbTjDV#Jrc0Gi6qd!VnnAy z4Z3jy@4mZ!?=BK_I&9k^twl}*?J&XOm4NPUsc+M*z7o_4Go3q^KF0C>@HvPk37PvxUmwD-1C&3;aDcEM zc>Vv%>{K989rO)79Z&4-BY3Dg|L^TG?BJcw61!tl%R4Jc*Vcn(W)Vl=jESLZ=(jMD zvg6U*xAlt8sg<4aG;!Ll?h@3KP%GXn{^`ii=(?IRc6%bF4t0q%UZ|mJJdGq<` z2KMb01Xyn3mSb?1yv80*d5QR5Pr05APm7f0Rh&9qk7+i-qaE>546bh5c?kV=R{qERgg^i= zSdxm2Mv$)IfLsp1ONnq;K4}?2nUJOQEm~(@h}>IdC-o5O{Z_rvre3ze>@y(erC zyjEr^HUymZa%y36LxTGYXJ~g{JFKHI=-rBqqqn`dwCJb;`L-!z8>|E$DfOhan45S9tFf%=LdvsCy9m)=Bcid#u32pr&o4KN-9u42 z-w=#(@vayxnOZEC*u7O|4$qlfB#KQbib zqopjJ8}T2n_>^%0NxiF6OcCXPrQILyyREC!yS6TqoOZW?{q0w=yi19pty&HwS!OA7 zB^zb3ce;8bKAAj|6CGkqNuk_%y?l0hQpR|bw+sRi&i~dC*SQL%;c|cdzegL>?5J&} zQ@>nIG1Z4 zjxp-BnAw$!h96y$M+NJwQR$A3L9=eb`uWw9`a4IX~SVO%z0HI(C3j+5naj=UmD{%3+B$y&S>qL>ll#FLUvXe zb$+BYz1j{bdhGpeVcSalm*l{yw_tK(lCkH7=l_V!zqx_~U`DEfuk%dJ9M=E2IKjNZ zd?gDv6YG|c4lyR~C)T|)4#wGLa2FIRlN~%3=~Z{Vf9<}ce*7CfnFcUvbnRH%fdt&S z3donWUvPeI|MkoMT@im@tU^}T z{_60hLJ7A>_Xh!3S1UOg#farUSeG}8HzL|@a_4PXg37bT#y?rH@miA}qVhY0l>pLH z6|=u4SlpPnpk#_N)*Z+$7y6AY_fdaGMpSx;CRw&uUC9QL)h6{Ohj!NtFq)JJ0Y>eZ zI8#nhTU$FoSV;kH^!rs$aY4RTK$P%%(#a7d1wj-GZ@9yfZ-Hjg+H|$+YUKWh(}^hx z-4PrM{>6Hj=&$Ym`}OQAL(FoiVBHC+SDZ=5YAh9l<;pwV*u16YSL1FlUhT%+nd?}u zg)zCemp)Boi0M(?D3y_MTxF-TF#MfPT47@IoVVgI(gMH6KF_k25YvYSE7hsWN?tlh zYqZ2rqanB+x`h^~1-ySxpD@bHE8|83RP~anoT;fdk$edlFlvx8D8d%s}g+`*UYU219pybv%xi%EeANPd>4*iWZ4q?X68J3f2HdibznU3_W z>^X0Wl(8U80sgtb?p5tx4g8A0NScB31UEMV@Ic4J#-bvo(Ypc>CFN~17%n=9|9;4< zmfXta$E4v-$`)^^<%|xquVH{=v1u1_U`4_Z>XYlq2u_}de3I>Bx8F}a-`FtE%P#~B zz>(r&Vg+eNRSs*^KqkTi0t_%fR30e(!iY=H{ltXm?09Ilx}*8_R|it%Nv)S+hbMb0 z<<;_PwhCQ17%0tyGru^bv)~N5BI%l}+VZsFKT&_gIJ;D7S3M<-2G?u&peCDu45*&$ zAf27#Hb8nJnlKhX#4&qh%H9(9R5i=%SP+J-*=U4%I4H*{r;^iW2h>1HZCf)(wHIGYU zI>Of06dn>GNl94&h`)an=Kg(J{O0NO!RI|;YxTd>7*4r?teDTf2p&I-WK*_L#5^witzXTWP;RFahi9C2dhwM75K zwxSgtp#PK<3k$AjW%u`VtdGw#^2{_USxUdIr?$^f?TSx+4C!1%Rg7zY^lFL53!kBD z=zFOKnKqX9fSHly%y{b(pr+Q4loDT`iG14#oV<88(X>yZjc3gPoX`G$Ry8WZ^M#y| z7SiD>rkH*Kcw9Yd?6DwtSxIKcZ794lYj@JsvyOyNAa{E})B^=MA{T`uIR~v41&ZVT z->ZkkeK?xo$M03cP>QAU(yR1dcC5v4q(fa(-Lsaj6uCwXq{^ptPBc`TpdnVGz8b&ud|1?n1i$8uqnQ$E$SZUV!zlqRd@^%$!}4My z;#iWMtbp6ZQs9GFWJFw!0`dhyhCziEH%RKazwr^P(2{S=cSy}D{LWsQ1=QFwowg#; z^MK@4H|H)$0*aLnfJGo>I)b$i-lP5_L?lO$Sb9s(Sx`AezbjL99NEOJ#y}k9O^MYM zLiV_e63A0lOn?LK&dUQhzs>G7UL;8Ju6;OjEo0u_Wu03!4k`=!@P7wBm_H$ldnx&y zahgRke0l<0$? zNrdom3#ou(X;{^FKaT%N=SwKC3=1VBan5rmi&fGN5zmWYF%1WW@}E?#+-h)@gq#vQ%jyc zkIdUuU~=Mgk=JO+Q3Ao>XW*d4otF_!?sZdk@`8EJfdhvzC~f&)6u0#Zaq7mx2GTMpH*QEkRlu>mRRgz-C94O(vh1XL36l6*x1 zC%A-RJ7~$r1el;Hws#vpQY`$Q@wSoE)p`Z{|HD6gHM$`y_QNdH~$W&rWMP~coWvW(*fxxmJZy%B223Nd* zBo~B-IMC*+Q3NvV?t%ptG2=2)6lbBKfoIBequV7n=)zBS8I)(ig%oHZc@${rJwZx1 zEdw%1*bY{#<9!0ie3#!H92=hEQ&sByS>S}Hxq`@utu&KHIJ!wM^PwR6afqh_uZ8tl zI^zhm^#J*`q9YarMh_BJ4Tc0u!((6~N=izaQd7W8gSCiw2FBV1_PS(R#%JT$hJa_B z(vF2mm}7G_|4A0vs|@-tCbzPZ%6ju79nJaql^iPoeIl^Jt5Kce$ZR=26x&-N#`;cv+5IauB`&rFh;QI|=?e z(2?{@vP$cp>lEq(mg47|r9YLy#*qemda7HTV_Vw_|j5JC9jAipLMfGJBu ztL^@}zu|sa$DL0{4=h#;hqLhhb`~b5EE5es4TuEC#_#K~ zLZr8HdM7`&NVn_dfzUUe<7o-NP4Md+JSz?D^y4p z!!XJ#@pa)&nYb)27<+&H)HKL*dLy!sd+-p{WV~`)W5Z$aA!C38Ym_?dv2%&#YL^2TBu457av!?8QaG_yxg!wgSl35#{}R8t|{T>EJlPY-D+Y6xwnEU_eMs zpir=C-9Kg(Qd3jg0(x6{htMg@{^6CQ;6Pi>%ZX|-T8}%B;rk}aeH0e)h7Drs(6NZg zmuyrmo88@k#WtO~C{}-oIv~ix@HgZuANZ|uTwB`A&F!A%2l^^3=g+)Ar`_Axi}M=W z#B?|(X|MsWf}NaG0Px9v4UcrB*&sI>uIb5wB1y{8UQGtF!qNP1-&JF8IjIl?t7n!Mk z`hI?wKHb|4CLdm2V8T}`DBgdn-e9>7P~SJ-sK+lSOtvS39*T?e&_I&a(qBQvc#eZh zezz}q;&Wo2X1$Uz;cw!PbmWxA1p7DqVXnUiAS58w!7?9+>%yJAEM#d6?wR7EGFcqb zW3E{2I^jinGcIq~*Knx)(RzEmGz9^U(gWz0MndB|ty0?-?FM%$8cj>qq6)_$Q{dHr zmpv7@i!u2u;X&{>DNfh@XM~XC<-r``(L8@0Np$qUgoNkmI%QdTdU`9%!~6AJBHEE| zwk3?TNhdFvmya{HQt??1`a4m}QX7)|I5BI(0$1ckd6rA8Mw%SF%Sh8!E~y zL2B>2Mdtl!hu+LR6Me7U>mFwruW>-nC`vw6MuSQ~@kaYMp^vL@Vo+a3dZ_rgWyyeZXZP?qXxnS51L0* zDwgbEc{!FnwN|IM0A}{JU2+#Hc{U9*9+RU5_j?Oh-S-nqy!OgchBHCEVzm)a7jX!m zK}ngV{&N^{Hf=lZ^p^bzzinK#MPR@y+kW98}Bb!6i`0k*^> z8YY#;FA)^n;I1F^Z+)O9Jb#{-pU(*5sw-$oNl#&l{>wc=9x01&0y(<$wT80t>BmuD z4~7e_O5^9ck`Hhdtk1rY)PBvN0^Xr+DCxSAmT ztITXuoT)F$7>>gd)Q)nXensAD!AIyVcf~0%mJ?K_mU!KbbdUqxq3V zh7#`XxZ2vXeb|H=Ll?tj#8MFfXAMoI*IiuHIueqJ}%HL4<0YG+@uoTd)@Ha1l4W0k;KBB`U+tYn1CGjtrbuffS z1x+Gj#;A+249E!11kin$xo>;Fp`fhe&$=V?l>0dvZz$II?Hu$zT}Y1j{KEahhceBN zZg%vwjRh7L1zwQ;H5;5KS-TqQoK!kJF()Tl)3vBTJr3aiCizTMG6L!NSxk1zX}@HF z-(H~jyQ;`2+Dc{?77M@u=q>l=nLhF1Eo>#{d)K;WE`umJci}A&fM#kDN8`VP;}a0L zsD6$W%=BjX z9UzN|m6|$3X{wUfL>1GmwS#g`=1%7|H5q)+@W_&;TztJJeE+T$Z`CqdS}{(b?b$;M zz6+DW7!KW6Q$EKS%FY@nFMN6iS!P^ejC^bt>rOBKq1Qimg%8-N#8P7f#h*3N@)5{) zPdBvCg;J=`i4tXTE%OGVCbmNqzCP9_yr)H+{Oh0SzmK{*IvPTw_ENK&gzncba_8#W zFK0ck3n>ClrWADc2oz@seILOm=7|F@!+0Mw=T`cf5;c*l!Xdw*+d z;w`p>Cici(8Da?@yJrqCOT&v&InoBW+E0P$)*;`D}5L-I##~utD9}0&W+^d6Q_0i(fJ>=N;@f zXHWMXc&?^jT;3p*?^B2)~Z%pATYq_m$Nm;iC=aQk?#0X&Fmnd!rnZ!D6?&aXwprY0QX7l{w zVv_|J2_)wGj+5H3PBbQ_ySNre8#xIF9!(2lj3Kp2vY+AA{VP%%Zw>=KgFgn%{yj_~b|6bzO_^yr^{+QohN9E~FCfWNY)uMun-lN^U1MHy6%wixiWW5Nr}|rZkjyZKJ0P9EEIkyY?5p zO`+6C$tkfCril{-HAYJ|ND$`kg1(T%nbaigl$bg)naF>-bTYPvdS%F$(CA49n_Z~8 z`)#pMrY8a48{DjwkxcW@AAJ*x2UkDFC(IK`?loK6P_afUsy?qj&9}WtruwJRB}>3rFEi73$8AbKt2HG!Khc~>Xl~mi=zp+ zs9C80P-e;4WwgCw@oRW6~le|A}#r*wntPgm~j^{Fr#5^)lJ-#lQ0ptsq~WYV)_x?U`X@V0QhU1I`b2 zcIJ}uClE2Y?sehQyss^<(^qUw!yxbd#B)%@Rcy=X7mDvDmj!sKOjm`06sl?PdXqdJ znNV%MRYMMCaq2IsTH#asme7e2>Vl3BX_+9h}ZdMm-UbN~7kzrnJQ?ust0Z-GNczZr|109=) z=XdX2>#lXrf4UB5&e><5cR%m*Jny>$=|nYmmE{+IcFH8Ye{$NXrFwv~T@>#py)E&sa!^-MkrUrH0%4jqrR2}V7>j<1JT6!&HYeK#gc8;iO~Tfe)3n8-8Z2t66q*Q)o?OdCHWqrOv; z*5jp2Fc6J$8S8@w)^mh_vW3I_4MU5+m-gePqPl9VSMFf>&Z_qkIChf z$p#j`3(r;3oI-wDFC#+@7X{Fah49~y zrMTa;hLj98Ht2Y>U`~1%9NmyFbrHH797!@8Pj+YI62Ci}E~=&1{-sfqo0z#v6Qqk7AQMiWE!~#(n{tlOdp!5346H$z(-~>d{XTbJ>cRmv~%)i@!GLPZ(lc z`~mWa)Wzw1hp%50G`v&|`Qw_LbJW<~F1={SmV1kn?{MgGk`@+O{u00ZxD07qF$^=I zs5hIKkDXti8r)AIt{4^mpk1LBoO0M?0dEkLBtdSO6ROMooTyEvsD4D`K&0JK+DaCr z`ne9ZJ8w`M<>XDO`{Bqj&q}e?b{F}*GDv)8KA%)qaBWD5ehFW|g4J`F72f{OthFbU-(soK_t7&c=LYg`89aZQjdl9Y z@6x5UaX*vWJ@1gP%g7<6d5HI-?B+LwJT6zC#11cVmnS2_Ptj?YX|j!`Fg~_gaWQaV zLNEPWPOn9u%5^6yoL-URJrhTsv8!gi}df+V*^bVx@;~bOK%GU z)b@%N6&NsI{A82c?Bo1jH%$SLt+_c>6VdJ%%e&0fwB&SEN4xBqpU$0ZANO6 zfzP6eL!GSl^LCG1YQ`Z7>22;Rx16$H-k)4F%48G=MhrObqYKHOc9EfWzi)T@!~|b3 z=fz1ZT0BW)-`Uo?QOX^O+y(Zmb^yBlNHW>zu|zL>GIr%Dy1B*H)PRzGdl@+Awf{&qkM5kD-7=X+sfKYa z7TEy8L#ND;Z)LA-D;myn^2AbNHtb-gCGS)2O0}a<^+P;!um_Ig${w*dz z%0I3dqQ#H~#p3QAvboq)ARKj)b4pnDmz+Gmf0LTPZd4O+ApdviHw7rbBDHEo0zJIA zyw_;52w#yebQVlb91_|759oe=dmRFGjobS&-N3MoQ7tWz5r zP%@lPT<4mDncSSsoP|mtMdE1ajV647auS7 zI=Ah7oQJ0VnC`6iWEHo1Mi8c(y$uSHKAx;L=P}(d!_AcKr8#LW7KSC~qVegC&x{8o z?oX*cJuoWiC8knXXTDyw@qKy|N5_xD84_2wy)qySi;Lp7RM*shBi9>D@bNHoVTkx7 zCuI1kRHSI3ef_$YoEGAIe<^p{4pAa2(rth0V&?*FBjj+hB0SG75q)}Z;&t$!5YvD7 zgvlLq-{zk@AC&+OAgxKZ7zE@&E*N1UcV70hw%5>!G% zLlS?DU8jl0cFcrnhYco=FU-U7<>b`ZV%syHMr=ZahnBIv$FNJ z6u{EbQO&T94lO{jtkl)(Y$(}Ed!kvT8bcavsozbraPimDtF@k)is(1a#+JLZm2(-9^M+j?m5f>bZKtfH-pjceg(9TGLzspH~kyG z@4Iy4Xb6uu%B?qzHTCAf=TD)OgrTISf4;}GNTNPkjh*{xqO7(S?>pSb#ZJqZh$u6c zDPjD`U)ykU$#3aa)AC|lQMsY!*zbi?v6^wE;Uuv1#O6a6f9p103wif0Ckwkkx(@bR zOm(y#zs#L{T?}&EZr@PCfwmN-T|FPJdQv( z$;H%pG)rkTQ*Y^Oqkj4A`e#%fOaIeuMkl+C2VT1o9P!R&>k0&Hr4U!JHKD?|OR5&H z?qnOP;761W<$_u$OC6=jppUO!kjrUlBGDX+wvFD81e4p7G$3Ta?nKViyXMKKzPDuIdw)&91ntk z&n->4IOffvXJc;A@Sg1_HDC*?_ONgam_W4Svu3LzjLV2Z@*1+oDnFKF{IckZ@6U!i{F`a36=$K1O@qNW(U8(UybcW-$*h}ALSMesclF{Esy+m0e6~zzaH>}ZfVP1e?-48 zYp4V}=4x`S0valHt+%>8O`dnTsvq?To;F|7acTX%me~Bp@yZhq$CBQ1TYU0n#Z;>P zn&8!!)5ZR)ye@_DHDNKT&?#=HhYe!!I~R$GStZ-(?6i93EeG4-MZ;y2_etFYeIj4b z^;r#mHaa@PhLm;@4ORH_c0dyNhYOg>1IA?0cJFyBh6JRVxpdZcqW4%RJ6G7sAmk1M1_|*St*4d1@9v!P!S0$py-}W53(x ztHsjg^DkQ`6P)-tEnJsm!#!deK=|R;AD$PwpRNj5XnsM_#EEm3yC9M;!@F(v4w)Z{ zl{^liscpTnh9--fm?ToDX=qt+qpN=Z0q5(_VIUg)$_8~?n#p*SOXaB&*HVN3$nVnu zj|X(%kYUXEDHdAaz>hB7k<6!Ak4|suK3f}^C$h@S(`&)$eU0#{7I!7<2VZq56j}LMau#{#syDaQ>9pkmJP=3n(t8qp(tk0D;PRQ zGrPi@7vCp42DF`*NGL%*kdtUJK zT-F98e_z{*)1WTN{b-YkY0iUKhTi8GW6iu6?;UI*bQ7$h7o((g{{gWpBx#?cUukf+*O@AG&d6K)jbmrNX@jM*S<~5CxOY}e5=`MPiHYCPc*C9XGD@5rw^1q6sE(ifdUs&VlJ1RRv4ED8R{Z1{w$j`iON;*_xr&GV?X4zj!OA{`JlwaI!6Ez0epmf< zI$+)Hny?!)@{hhK^v}JfN&dGO1x?MWnsj$i1LE&)U}0flY0p=K(fLKqe@}eX`j0G} zrlFyvGg$i&79*5-} zvt0v-CQSTe6<-vW3KDcIH)U9C=B6dnCPSE7LG zU#=MVE1D8^#!H<+iCCuPp#gvbov=+02Sjk*e=q9&_o4tZ>cVC@kqbyE3q!d7o6PL} zL%kS5!SV!6ix_t@IdDWh{Z|*nTv7W@bp}{`1S|;f@iMVqT1?lL{T;Qt^So^TW76); zy?kOu1-ul~io2J3uzo;!cLp%w_@@53DB5QB8&wu|J}uz?5&>i(JNK_YMiw0WFW|qY zk*u!1QKewHQ0uZ60}QsKc$3Y#t$f5nb!jQkAnQ(I1r8drf4?*QKYe564*fBGYn?N| z25tfeS%9XYSpYam-v4j1Z2q^(>l$mqj0D3BsqE1NiXhJbT@_Fk|6b1vQ{Z2*PS;rd z4tL%Sg=x-yQWEeqz|4#Mcl;jxePS=u@xJug&r=?c1tPZgIoSFWGwa- z?9F7sVVq>}W;`!lE{JqJ-`zSaxZU}*mM5$( z_`)F%Rl@k}c`k>%^yMJYs$MP5SyB}rjd0rAP!+(-a~VGIP63`ufHK?h)C7tjCR@DWl`3+F47dtzACkt<>*)WJt6@ zIqPM0ybW;At!YKMbls_94u0e;aH0!+;<~kX1-{b zo-RHw1 ze7?$IxsYMkKJ}Q1lx8>Z7)~L=2m;-l_JmypsxhuiS}J(r<2Cb~eD*|USVB+v$gcJm zuOnh}BM)6Y%g6W-yM{qOe(Dq&L&!_ASZ55B`xp z{!dm+4>s?#Y$pJ|25#dxJ{Tn zQxM}&c1^&`+_PAdcs6dZumGo4jLgdUY3_>1OKG-ykhK*6A3mEd89&`A(t*{Lspp)N z)odqC%&|>cpAh2o#d2?QnEeb(?{1pTBCPqc5w@Nufw{ox^krHMT(%WGqW%8e_k)Gc z&3cfaZIxFO5-qbRyPDTjr_u`*)?b*A!tPxRPbF!sL8mI`2mEV;9(@bTw5{s!8pLF~ zVAkUz4@eH!_p?IHmmX-Bxl1#&$Ka}r+S8-edbUn@;5cRDcI$oWLh|`dP-N_*?HnI6 z`XiA|`Ac4ksqQHF*7l2N%`A;oEeb6pgJje|K|zCky~RGj@6lg0WQc>hnj9yS5Q zxC#76KwJf4^TZ26Jv}QU!#<0Kt`K!@ZcMZ)k>e?;E0q+!2Mwly8aeZE7%uIm*(4e> zR>y5|Hp_kwQ=f1hx6tZN--wDdI*C&Te&s;>ywW8xifIqOq^Hry4Lt9qtgd3lx{es6~S1QL)LqDI%bP!W9&df#M zO=P?B{tPYLc&I4#X39#Oj&*Zo;WLw;p{=%Owa< z%7-sK**U3dFP(-XaB>i363?9Xd?Bk>Pffd#2Y(m;%nxclIm&^DPlVcPy&u zYQ7fQ5AL0prrKcw!J$2wWMRtKxlHh%`*F!+p&yWgVqE8$%eOHM5l*9X(A3LG!38e1bVHy|Km&EDfWjAhlq@!R0H7B>F@HMwz}?F+HtQ2Xcj zeR+r(+6uBmU|H+@>*n<`#f$u{KLISt&qnGu{MjTqbTBeOmO&(QHJNWwB zaC9idE*lH{{ZQo;U0mt>4XrIW$|rFu2eYIM$9bn_`()v1`_G;ySnTc&y{O{R_3TC- zv1kn1vY!gevR3Jn!lr%lj$X0{+#jxBY;{H`JNe-y3U8R9 zLrW8CUF{>dh?DtRSpc3_4$$CfQO)DwW&R6z|1md1{`)*S1hf?hs zoG-q&Y+rOi$lT8kPDt&}=6NcucgiA)^PmqhHM2ZX8lJWTF->GL*3rdf{lOu&857XD zDmOvXTg4-^U91p=BXCOg@HXOnPgCCh{?^x7>I6;(-n_o%=aPL)8wB;Y_lMAME0@HmC`;KghPGRqf$8fX*8UJdm(9Rz?lEm`qs^1!ejHWl&%%Ddqa+FR=ikdYPfeV;eS_@u)NJPC zIl>aks2uj>OP%kR1LS)4kziK?Kjk!ion=1QjTJsu9v50##J{*c_v;XYx|+IrzlEmA zT_OWOaiSw-wK+)Ef*1}!>;N5A9(mQ%9k1|_FMtS0Fv{IZ8nBFfU)qpMVVv+y(}H|( zz$4le_PF=VprNnIK1fEzWG7*?Rdl0XiWP`nY{{JS!c{yxXL^5O(rq*AOnIC`V{mra z&pShM_u8iTmNw%(GN(~Dtt|u$qhXpv<=a*8x|X0B zk3?2GzE@Bhv@`;7E`X>JJv?N+_L|_?K`aOiJ0|lSrPR?Po;Vp-SLWU{CV_~Z|MWj{ zwGZf?ZsBQekFz@U3z+gf7+N&!8$~?cowwJ{zeBBUzCvx}*m9`D0UO6lJ(J+N+N&mAZf>D?FO*|` z>K`q!VFA7#vJCUq^!>^Wo_K!!RQ=SrCV=0V@BpX9n(Cs)m(*vP*KOFDUx*Uvcz$!7 z2L_ehv*PEr6ZJRZcX4Yhc%lvR7;;2rI~aLtwyb-m7V}bCT6?wW-GIOkYGZhWIF-S^HCj)`S?AqAK%& z=*D*JOw-d>8(0ttkuRK*#97S}(PY>ErqMLXBvI`T9@MLUiz>x|;Ac(R%02@S&tfHG ze*DP#--OT`$a~0MvY>OzK83ef<)TvgAIQYi<_E>DGN;6uzMIY~V=~ic**xC!5#_P7 zoEg${YjH0siS=L`tRS`F%w=8oi}v=Yp*6#K!&|8v9Q$kGY^`=0N7TpU?H!ee9IuzHs~lZyoQw)lF&)c_| z{mBAg#}Px3-Aa_<&Q>acBoX&+G+WRWCN9+TV|6a+tI}0}#Z_i-Ru0%rOQwlcp3d{e zJosaf$MER5mMV{eYtwVw-<*!KmE9`Hlj#7Keo-^~`7J);vyprQAriJLqYf42LB#XC z7KU&5S{;6Yn*3YSlifdGeRRwPbIjv-oQRpECUd$nI(d@trf_epVyGb}opu=(mlzH2 z!V=%#u#}DKQ-BpZcyM^QrEtSNhB;<>fAdchAzHpBG4!U?5b%m9){#uSx}Qr~Zf7e< z@h)1pEkS@G%VnibZ0wr$^+sx=;PDPZ(G3 zOWE%cb!0=w`PorGP2g?APfl28SM85Qaxk$>0A}{+Gp$Oe;Tyhp4&xlx`K(2+-@Kse z5I{08yg#@9?q`!aJ#kw!62=ruWIwiEXTu2Oj-|`l1=*hv9^YHNe`FGZxVXONJRp00 z7&V{1Gt;mVG_@2qXpR4xxMeY$Bo5CLCC$UrDyG^#G}`=Ksy%WlSJaQVp6%SPgy?6{ z<&oSfbG|3ISi#;66;eEAb3Q*wyg7VQPP?P@5OY1WRc*FnEWdacLx8EX9 z3O-xdFtaPWRF|7A)Iu^d0j|{E^Rx-WQII5oXG<5fI4)7SqQ}#C)mvn)1AU{DtLJ25)vK?Q}NXWCsBSEkyiNxK6OEC1!%%0|96 zIn~kQY?1}StXmZo`KXGH_`Rov&ubAJIxOa0ZxzD75rc%@Lwl$nt>>%BIJLK2r@ZEw z)~-8mO=aW-(1wW1_bM>v(L(CVG64?F4rN}~#rJJ4k8JynTMxKQ9rJK08^5y@u~wfI zZpUMisArjcYDM+qWo}mJJGAeQzsOOj#+(*lmVKsX>1gF@zOQ#zq8m+nwFJyQDImg`YB6QiVQ0I2#5c*vLBoc8H4mN>}FL- zm*D;jf546nyBS(Iy!;)E`m+z5o`El~-|o!zo9zF*XHfqPO?Lb*$QxmSj*pWl{tR7G zvnU`KJ7m42NTw|M?Gq?F1mZzU6 z?F|2E9Qf7L6jIrios7%e&4<(tliu5X_hp0dR*mcxv6Ex}nh_s&#Jevu2r$@+aVdM4 zDf{u8z=<41nFCz^nlVtq-Y0hnHV@lNTx5z%v$34V0L>2m4MjisE zMYw#;NVjvciO!nay#ym|c9JQ3bi}2^Ey=AyJT>p;%<4z-7h$*Y94}*&QS7Ai^$a|W z$3py`3a|U37)pYj?X=^_`QmMLkylR|Fk}{te)St)VMT~bG}y0R@wQwxahsUdN;u_# zbm4m?j7u*I>H7zJ9rRIV>evs0cG{{NVFQSS(Nu<4#-GyHS@-M8u4YZ!mJ(Sn+uL;l z#F$&vwaJ)u!v`}IMEO%!Xb$2uhtCe#)^>bLTCSXjJwejjOm}5D&LJN50(nfEXCv!E zKRL^G)rBmNE_Qv8*$4v2OI(sd{t#MD>CC&7M{&#>ywPW^q@jeGWf@e8ie@xCN@C`% z=Q|e~6Y2-MHVOI-#TG-le|Q*SY7XN(jTrLk4G!C!GhzxmhHfVsszo^9iOxS$zJD9a`3t;&K(w)0#^sZDoUSI93IF`)Qzc*Vdg&HTJW#4 zdLXcAQb6>BoGLVaM6MOn{}$7T)y|YT{VK00@RFgYh4bFT`*eU1l>&-HOzB9qS!cRy5*w^aQUG>_o3G)#f>~=9|C))nQfElE%wgAS>985u?Ez7(g(kkX zRR%dC(=3_H$8ZGV_Yq&M5Gpv`g`|5+ZaQA5#_^!XPHv+g-{~O;2|^qPo;dI2UA7{m zUKgIY9-QJl=E@?`W_RhJPbAU4g0=5Ffbaa_92~b30g-}7fqCM87K?dpoK)EwAz>b_ z?A#{9FQDI5O?bV>WNTgQwwkh3V%|UBlU8+g+L#S?bMK7eyDFQJ$5UYS*z&O3UTh}X z!M~g<;~O@gq<#}Q6}CsU_>&W$8R{DyzGxqBl!Ke?upteNH-{f{f+G^0AXIYpW|` zN3l}*W<~h5FXhtbQ5GXYII*bj(A5G@ZplwvBNdUFT%sc%rbgF|gnh-hKDOL?FeQ`L z?QD?sFTYwb(biGnS^EIt32EJefe6;Nthfkkar!_yKbkk9RC&bR&h*xKIcJ?$ z_(FyWJH_p*3XJ_;T2}?&{X~N+N#oA4ovMh;V(m}bz_&bVtcYcv%-7lo?R;=_cvMdF z%0ubAs2BXywj511eU1}^u3h`~t|s}Rtj&Z;OIuFHd5fcxHWFyAA!jC5Qi9ns5&@D* zd88P7$CXFe<^)C^Mrs`%-WRaQJ|Vgpn`>o?u1x`Or}km8?i$uKt(#BC)wPH;LuJDF z1NvtJ5w8Ie^B*pNuk@YgtX`Xu8+9%tthE)7Y@c19rvuVTik^q7coQ}#VSoQH&75>D^5 zd%qEKjb&wXdtK)k8)$i>1NVl;V#^v3D1hOh5vQ))PguJyu<=+=F_^ncyX0_SaO~Cj z9s?M3yotk{iMe4sTzsj;VIhx@FD_ZU8Cr|fo$%y;rM7=CZj8<_UsW(4rDJt_R&<*I z&XjN?1*%DP{uY+Y;G@vgUvG#s<-WP;+7OX_%#K|MPnQhWJ7Y;R65S~zi3;Fy8qGL7 z5C&Fcw9Rw}8|68GEqx^W*%mXK#SV*tb8BK(Z1`yb-gue>P(vQ<8nqk?a}A#Uo{KT$ z>qlqdR8;NFmdOK5ptrHWz6c+0Hf8+{8w`RFk8IWjf%H!%+D z7Y;j_Nn&vZoyP8$k?Rh-4rKgO(pi>Z*eF6~qbTF)t!`I|w9v+TJzNex=Bi)xzfJ9> z)A#5Q9e&gS@)~+M;B_|)+(!EiJO1tsi;o6~y{9kSwjl4Zn*ziF3=2ynq(0RP?(V&+ zxb#F_LNw8zoqW9JMiUt9asyP;G`>$)0uwYH$~S$v&nX_C&v;y9$w7a+)jx?+Vs=tA zsLf9LL1DJ_l4yXo`(sZePzL!Bs$7&Ml<&UL6deO*poGMGycQ8e!<02*_1z76-HU#% z#cTVPfllzMx86Zv!u66YmlWP0F=30X#yL~(!U{WfOyPv2R}{c(C3riiN?K)`7;~Wl z2>rjR;6?@Gg;dH0y$X1-#&ft;NYmZpXm@Th-Gv3958`}U{P&3S0%!#{S{yPYFhFNR zkxZQf3sx6TWM^xBr$l>JYN$#e^9np3`^VL)R{wCwb*WtnzVn1+;gZzsGGCr;=$B+OI^N4SQqrcVoq8DNUWb8VueD3B}xevL0XR@6~wn zeC5b(Xl%;#Z^Pzg&hR1sY-(gh!GLOHC=5E!(N-{AE}2A^ZqX{u-Yai)^e#X(fHdan zdY6l?*uQZ$pA1=3hrh6&C`E+&?bXK|pSulg}< z{60t&J%o`VZzSXeeY z3A3dfYys()E($gzFSp$A+W~O*{G+nT4)46E;bZx(<7J)Nuzn4tvnQD6h882J=@0Bm zEURh0=4x5ywXg#U-WM0t)igR8=H+!R>@>E=Q{2uhGepZpsII56X#9&whdbz^8M4}0 zv|9Fkx%&0ow-%jt0%!^1&#s5&vYfW{M&Gf_RUV^*duyD~cun&fWNFNMnm6@EN|gu> z7eCpkm=AeM8&n^+7-Tqvr2NLu2T4Bai6vx8m{?ruaO8m=xn6ga?tm2MRd*|#Exqxl zei@;E2%yO}nwU0ZKsDnG3#Z)5S(U>MevPjBxb!09#uUHb#=L zDD5!M3w<-A^j-W!uqAfkMcoTT^C>K2vOB`J)Q0q?4+aVAcgr4uM_DO`@9nKu2j$49 z6GxDf_bQ?YUIgITHpqm%!C7!BLF*&W`CZ`c-xkAApPckw)@{bA zY20k7g^0UBO-+r+gZ-`7?(^5AO&i8|>lsW40gAu1M7?uT1SQ^; zK&+s}$;lpotw-+5HwEshxp1H=)}$S{%~{}5*?()tWy4;kPDBw+%Uhxvp%*C>IV_e& zm}$jdrx!yT+?B2_uT!mC2Cx0j4n8@49nO{_qK!-^W_x&={y^Z7$@*I1PeAoqdno&i z%hwMatAVm078_Kf-rUfpHIg<}YsmG?k@O2SwI_ckZ*qNSjS`SbOTMz(P`sB$1@y*n zQNLQY)-@(3z~Udft=UA)#{;G)dG*xHfuTXgzSh3Bkc9~Y$Lgfcmuxr`p7(&!{Rf<9 z#ARi>Urom!%S;_k7<>$++AR;Bj|ZLKBHdQvRkB0&xAqt@sUGy0-52N_`(G_G1m}C< z2Zl$o$|62il!uq_KGfpZg07-`g{*q+8n z15|7Aj$z0mac0 zyqAiX99E+r<63NEqN5?J>beAeXeB; z{@z*B;%b~+SwspnJHmYN08LifLL(`fL{d_tu~q?X^L_WVy;y)M$0bi8fkaTCqNo+n z-zp>FuCzRoYs9+`{{?~LSxHOc+`L;|gG)n$Tcw4BAdx`y=|E?%{+Aiy;nD3~U#CuaREU5JfsCY1TPwOUE5c{bjOlWK zS|)#2>>PsgRvqU1xj_KqION;S4Puk{+DHc*LrVldbvN04LYb$kXbK3n>}rIB5K=rc zCNG#=m+nAg_&eD|1FeR((u7>cF|sE*;g@=6)u({ZNs$py@gd`Tw6vbd+{o!(g_xKa z3r)?Y#YNu51rl{uLbP4x_R1yKy4zeLASA`tN!U`%TNkH?GoaI0^?OSQ5wP(8a=AV~ zxcOqJ9FuDV8;iW!$RZcc`$>ykSh&eT{Bm*p?U5ktk(ps!xf-k4T%}P>u_nlIVrGVB znHR9y8UE8ns#bT2_V-YIjP2=muPmgydz|h4J83irHNml}^Ebs%3cI6S(H}$nT&pOm z5Ml!SXKy+F;%mp4&~#XTIFR$zjExb^&S9ppMiEx}66YRZ4*z_n2qhpGt#Un4e@c8)nEir#nUfb$D>sFi@wJ_$(lx;S5R%m1hW!wz%6p+WEXcj@~W zP3Fgaw0Z2O(a}*Htzu}CrYAZ5@FSz%BU9QVi##F`QW}2bz=~gz!Grew6@or)Bz)Hy{j7#+;|3oxOZ5Eq60nNeB_-s2yX|D2W4mV02 z{M7t@Lbxw-ag4b!4JrtuUK%=sxyS|I?7YlqsTGp9gr2qYZx}I0OBx+k4H7ecbe!VN zPc&cN-z?(e?;+H-zDao`zmuXHY}@+dy2F}u0wkq~2204*0t$|SRvXYFw%!RouZL^O5asf&&!YttY zwGPM=eP#``Ty(%#)yK1fP4qGe1@c_8qBj`nTku<$P4njQgSZ+9#=yHv-QaniC@|2d z?{8U&SN(u-_Sa0gUs)ph<{9O-eIcy(CWv=-UW=={zNHb9iu5sySbyjRGhSc2na)$N z1yP0SG|Cb9^1q-*`0I;JH?woCK%VnUhLM!AF@4Aj_I#a^M)a0tBOF1rd(EqUq~@Xb z4R;>*Y3R|m?kmFa=GofLHS`Mfbd66`6RLIhVeoK@xRlUTUV;pwp>YQ3)SV7XSQ~D zXah0sz%IyHS^Z+Y0V)xZB^uFhq_!mWKOp0aZqN1cNskXa9zQ!D#a4TBT#!G$<6YH? zv%v%>Vu2Kd+}@(Fo8o@yRM&5r7;5*q`sbsS~1oXW{k1^WxBGv%LGc9K~4+vU9Kf(0|;d zy#>y~m)%|lCDb*J2d^k}(_cIF!-QIRI`Gdbp>^b^qbk;Xkys@)?5|F60 ze{L(lqjbZgHQ5DAC`GQc{xUfsXeoSn79_u<$W4{hG}k*Ch{p#a59lbeI^XqC5E2 z6mxp`(CR&y!=?*oJhJOG6=Th*jr+HbK9>Ap&zY@(I9-nGZ`1cu)&%6BjGU+dv%`%o zOTBBb zD1ff1LU71#Px~eds8lRXji`$Q)ZPM4G#fHu?m;|(kjfRvEWsm;_Snd1zeb`X4*J9jDa*H{UUuj*<`$Z^*u}Jc)7G4Nn z>s+lms$=6-J>7eA>N=$Dq=5z(R#sO2rk_>5eE_)NU%l6EA|iV2LjLX@OxGR&0GEW7 zW@8;?!a*_5o;_nokO%>m*K_R(!KZT`WOpK>YBvaLI0haU9glWX@9AxOK1qniO7Sx$4KG zzuNn;l+1dV_|+pBAyV5y{j)ns2$W;&fQuqyh`$YKM{kut&(H7NS4Ca5OrukYSu}*U z8!=r@cO1I3J7+(%LT)U|U{7aBjLi8CH`Xx8abn#J-%f>|{xx*V8vXSPz~vrov57XF ztp%TB15Gto%4e6KX`hX4`lg}`bSJN=JV5CN9ohI#5wDYNpcw`TCsRd5-!qo0pty=q zIq30bs?!)z35)yXyzV)uWlJ-)I^?Ow`%47j4IjO=hoq(IfUDaOa&15e<~Z>t^+bUT zU1zK)2yEB9tOZNRrq3|_-Sf~(e5{L$zwk9F;dFr;$Gr(1N8YBeq?4F=Iezr0xQPMv zL3jnll5k_pO9^l-`}Y*Ev||k;pWx45o!F6{oT_K%mIvGR?!9`NPJ{G1^1YOLg2`dd zh!J#Aq7a@j_|bb@ru-M$?}Z!!euV-J=wjvv_YX)DI0yxJV{EP+_3h7me?8fGG!OJu z8La!N00Kdk8A#PRIjf9Uw@2D~TU)a~Kd@t*DKzmG>js)1)I06i9xZwR%Lx8S)^FR3 z&Q_*}XKIy*j#ov$=FjG`rg1h?Ujuf^KTU}@q0~XE!kW!Tfh(Czo@^!~qT%@|KAGC2 zX9FcLch-bMD-_9P$JJ+_*nkDroad|l(`55Cs6>9e&X1GX@(-3sKn_;1IMpPJ+jK9& zijue;dTWI|ix(^G)0(al0AsJ~rRy+;1fMf;{(ZNKq24rP zTzMuv#=C?@O}x;Y;m*O+mPD;OiTU= zh>0i1{AtyL8jm677qDUI4eMvm*@aM#W&UO+e)IeVOvn_BF}*@6Te|c3{3^tasb1z) z4qXe}ZCf2u|Du7lLxi|0`Q$RFDe7%@FB>*T>G)4B{t%kD{V$u5WY6BS0T`sx#zAgw z)W+t1F6k6RJDz$!%dbhQA!C}3r_*KkWJG6tFdnh+b-!>~ll`T`R(;mfVUF<}I$lzK zw|&3uch92Y?rA!~{);GfQv2&|~=K>zqd^{RJ?(Tw-rd6L5^^yqJ zh5Qpx=o9=xn=ufmI|0mAKvUJM)aqhJDIyL6gRzC?ys`6>bE1h7?I6QJx(zA10LB&V z5_3GfYIpXo<4w(2j8qSj33wj-HL(9RJav1rf9Uqw!8P}$J z-Z8DtIt4;C&)qnhaxwh^@lu;F>~^E70H5R}6BpdokL1djg#id=n~b$J6rimJkR= z8v7HjNMdOD|HamO2SwFvZ@3r`6#*5==~E;Nh~$hQAUO&G0+KUGh9RqfsDMZgLkygxu`3p1!jEzKIsvy*ggu^gx#8QIwzt1RO9s%mTei`9`1+qCZQAh(P0~7N*)A_4n;UMzX_Z_UbpOg5)b4z@ilWYRg8#5K08b%(2@_d&9&+0H@&wF$iOkDNx|LlfJ zZSsTEmC$`ne>~^2yo`Iyx<1pwPI4}xhmnM?y%3vWR#ci3oExILJ>NqV){ag)T`F;% z%T{n<=X+SOjW6l5qWqOLPt?c8HP6qf@POW8IoQ;(+k3eEkW=Zk>)et2(hD0qOeYjZ ze(@1B^OsgRq878C$hF0o^gd4)c|sL^HwQOf*U^HX6&>kL_ckGu@4##NzQ!&3^{K9d z5REx-Sl`i=oACa8tjYX>!N_6Dw|KRD97=n*$9V-op`crAq@)mq9OjLYPZqceBLJcD zjOSwKZTKh${N!-(rwuwWrL*(Ts!}h%Q=hdx5oGlZN;EcbLN`H}?)-3P+1dTV++r^bw}sc33bi zd37aYAVujn0+`mfZl6TuRTbFyh~ik;3?&J}JO&~3}V1#(?xUAx%|n*qledOAUm z*+Pocgs1bHqFZkEL(^x+y>i4OO7t@+7Bw(2FB$3D~5Ex*B9K#d_Ob94%RSkGh;UUi*ZleD$o24tCu*T zaSKB(gJX4N9_tCD4u_eY*IR#4yAw;P9lv+)gjBi$;2{tiph%%ckal*qj{*q7%rUTV zT>yF+ux>Hht8R;l~I^ zZsTJrWSY>^FGe%}gP*#<5EtDQzLDAB55+W>l+UKR2H53v%wsL0AFcSp4J(IXT%0AT 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 V{?%^lfM4Pjzs*)fh_b0q*;n}^+rX}`P}$1 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

~pXYvS?5 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 BF~$G@ literal 0 HcmV?d00001 diff --git a/examples/cold-storage-ammonia.bowtie b/examples/cold-storage-ammonia.bowtie index ad86819..bfe5759 100644 --- a/examples/cold-storage-ammonia.bowtie +++ b/examples/cold-storage-ammonia.bowtie @@ -1,779 +1,541 @@ { - "id": "example-cold-storage-ammonia", - "name": "Cold Storage Ammonia Refrigeration", - "hazard": "Pressurized anhydrous ammonia (NH₃) refrigeration inventory", - "topEvent": "Loss of primary containment from ammonia refrigeration circuit", + "id": "bowtie-0", + "name": "Cold storage ammonia refrigeration", + "events": [ + { + "id": "event-1", + "label": "Loss of primary containment from ammonia refrigeration circuit", + "hazard": "Pressurised anhydrous ammonia (NH3) refrigeration inventory", + "transitionBarriers": [] + } + ], "threats": [ { - "id": "threat-corrosion", + "id": "threat-2", "label": "Corrosion or fatigue of piping, vessels, or evaporator coils", - "notes": "Credible in aged plant with cyclic thermal loading, condensate, or external corrosion under insulation.", "preventionBarriers": [ { - "id": "pb-integrity", + "id": "barrier-3", "label": "Mechanical integrity inspection program", - "notes": "NDT, thickness monitoring, and replacement intervals per IIAR-6 / company standards.", - "escalationFactors": [ + "degradationChains": [ { - "id": "ef-deferred-inspection", - "label": "Deferred inspection due to production pressure", - "escalationBarriers": [ + "id": "chain-10", + "safeguards": [ { - "id": "eb-integrity-audit", - "label": "QA audit of mechanical integrity backlog", - "escalationFactors": [], - "stack": [], - "stackCollapsed": true + "id": "safeguard-11", + "label": "QA audit of mechanical integrity backlog" } - ] + ], + "degradationFactor": { + "id": "degradation-12", + "label": "Deferred inspection due to production pressure" + } } ], "stack": [ { - "id": "stack-pb-integrity-type", + "id": "stack-4", "field": "type", "label": "Active Hardware", "color": "#48c9b0" }, { - "id": "stack-pb-integrity-effectiveness", + "id": "stack-5", "field": "effectiveness", "label": "Good", "color": "#27ae60" }, { - "id": "stack-pb-integrity-criticality", + "id": "stack-6", "field": "criticality", "label": "Very High", "color": "#2c3e50" }, { - "id": "stack-pb-integrity-responsible", + "id": "stack-7", "field": "responsible", "label": "Tech Department", "color": "#ffffff" }, { - "id": "stack-pb-integrity-validation", + "id": "stack-8", "field": "validation", "label": "Inspection", "color": "#ffffff" }, { - "id": "stack-pb-integrity-status", + "id": "stack-9", "field": "status", "label": "Available", "color": "#1e8449" } ], - "stackCollapsed": false + "stackCollapsed": false, + "notes": "NDT, thickness monitoring, and replacement intervals per IIAR-6 / company standards." }, { - "id": "pb-materials", - "label": "Materials of construction and corrosion allowance per design standard", - "notes": "Compatible metallurgy, coatings, and design margin for operating conditions.", - "escalationFactors": [], + "id": "barrier-13", + "label": "Materials of construction and corrosion allowance", + "degradationChains": [], "stack": [ { - "id": "stack-pb-materials-type", + "id": "stack-14", "field": "type", "label": "Passive Hardware", "color": "#7f8c8d" }, { - "id": "stack-pb-materials-effectiveness", + "id": "stack-15", "field": "effectiveness", "label": "Good", "color": "#27ae60" }, { - "id": "stack-pb-materials-criticality", + "id": "stack-16", "field": "criticality", "label": "High", "color": "#566573" }, { - "id": "stack-pb-materials-responsible", - "field": "responsible", - "label": "Tech Department", - "color": "#ffffff" - }, - { - "id": "stack-pb-materials-validation", - "field": "validation", - "label": "Inspection", - "color": "#ffffff" - }, - { - "id": "stack-pb-materials-status", + "id": "stack-17", "field": "status", "label": "Available", "color": "#1e8449" } ], - "stackCollapsed": true + "stackCollapsed": true, + "notes": "Compatible metallurgy, coatings, and design margin for operating conditions." } - ] + ], + "notes": "Credible in aged plant with cyclic thermal loading, condensate, or corrosion under insulation." }, { - "id": "threat-impact", + "id": "threat-18", "label": "Forklift or vehicle impact on exposed ammonia piping", - "notes": "Common in warehouse aisles adjacent to machine rooms or overhead pipe runs.", "preventionBarriers": [ { - "id": "pb-protection", + "id": "barrier-19", "label": "Physical protection and traffic segregation", - "notes": "Bollards, rack guards, marked routes, and restricted access to machine room.", - "escalationFactors": [ + "degradationChains": [ { - "id": "ef-bollard-bypass", - "label": "Bollards removed or bypassed for convenience", - "escalationBarriers": [ + "id": "chain-24", + "safeguards": [ { - "id": "eb-supervisor-rounds", - "label": "Supervisor housekeeping and barrier inspection rounds", - "escalationFactors": [], - "stack": [], - "stackCollapsed": true + "id": "safeguard-25", + "label": "Supervisor housekeeping and barrier inspection rounds" } - ] + ], + "degradationFactor": { + "id": "degradation-26", + "label": "Bollards removed or bypassed for convenience" + } } ], "stack": [ { - "id": "stack-pb-protection-type", + "id": "stack-20", "field": "type", "label": "Passive Hardware", "color": "#7f8c8d" }, { - "id": "stack-pb-protection-effectiveness", + "id": "stack-21", "field": "effectiveness", "label": "Good", "color": "#27ae60" }, { - "id": "stack-pb-protection-criticality", + "id": "stack-22", "field": "criticality", "label": "High", "color": "#566573" }, { - "id": "stack-pb-protection-responsible", - "field": "responsible", - "label": "Operations", - "color": "#ffffff" - }, - { - "id": "stack-pb-protection-validation", - "field": "validation", - "label": "Inspection", - "color": "#ffffff" - }, - { - "id": "stack-pb-protection-status", + "id": "stack-23", "field": "status", "label": "Available", "color": "#1e8449" } ], - "stackCollapsed": true + "stackCollapsed": true, + "notes": "Bollards, rack guards, marked routes, and restricted machine-room access." } - ] + ], + "notes": "Common in warehouse aisles adjacent to machine rooms or overhead pipe runs." }, { - "id": "threat-overpressure", + "id": "threat-27", "label": "Overpressure in low-side or high-side refrigeration circuit", "preventionBarriers": [ { - "id": "pb-relief", + "id": "barrier-28", "label": "Pressure relief devices and high-pressure interlocks", - "notes": "PSVs discharge to safe location; alarm and trip on abnormal pressure.", - "escalationFactors": [ + "degradationChains": [ { - "id": "ef-psv-blocked", - "label": "Relief device isolated, blocked, or inspection overdue", - "escalationBarriers": [ + "id": "chain-33", + "safeguards": [ { - "id": "eb-psv-program", - "label": "PSV inspection and register management program", - "escalationFactors": [], - "stack": [], - "stackCollapsed": true + "id": "safeguard-34", + "label": "PSV inspection and register management program" } - ] + ], + "degradationFactor": { + "id": "degradation-35", + "label": "Relief device isolated, blocked, or inspection overdue" + } } ], "stack": [ { - "id": "stack-pb-relief-type", + "id": "stack-29", "field": "type", "label": "Active Hardware", "color": "#48c9b0" }, { - "id": "stack-pb-relief-effectiveness", + "id": "stack-30", "field": "effectiveness", "label": "Good", "color": "#27ae60" }, { - "id": "stack-pb-relief-criticality", + "id": "stack-31", "field": "criticality", "label": "Very High", "color": "#2c3e50" }, { - "id": "stack-pb-relief-responsible", - "field": "responsible", - "label": "Tech Department", - "color": "#ffffff" - }, - { - "id": "stack-pb-relief-validation", - "field": "validation", - "label": "Inspection", - "color": "#ffffff" - }, - { - "id": "stack-pb-relief-status", + "id": "stack-32", "field": "status", "label": "Available", "color": "#1e8449" } ], - "stackCollapsed": true + "stackCollapsed": true, + "notes": "PSVs discharge to a safe location; alarm and trip on abnormal pressure." } ] }, { - "id": "threat-maintenance", + "id": "threat-36", "label": "Maintenance isolation or re-commissioning error", "preventionBarriers": [ { - "id": "pb-ptw", + "id": "barrier-37", "label": "Permit-to-work and LOTO procedures", - "notes": "Verified isolation, zero-energy confirmation, and ammonia-specific competency.", - "escalationFactors": [ + "degradationChains": [ { - "id": "ef-competency-gap", - "label": "Technician competency not verified for ammonia work", - "escalationBarriers": [ + "id": "chain-42", + "safeguards": [ { - "id": "eb-competency", - "label": "Competency assessment and authorization records", - "escalationFactors": [], - "stack": [], - "stackCollapsed": true + "id": "safeguard-43", + "label": "Competency assessment and authorization records" } - ] + ], + "degradationFactor": { + "id": "degradation-44", + "label": "Technician competency not verified for ammonia work" + } } ], "stack": [ { - "id": "stack-pb-ptw-type", + "id": "stack-38", "field": "type", "label": "Active Human", "color": "#5dade2" }, { - "id": "stack-pb-ptw-effectiveness", + "id": "stack-39", "field": "effectiveness", "label": "Good", "color": "#27ae60" }, { - "id": "stack-pb-ptw-criticality", + "id": "stack-40", "field": "criticality", "label": "Very High", "color": "#2c3e50" }, { - "id": "stack-pb-ptw-responsible", - "field": "responsible", - "label": "Operations", - "color": "#ffffff" - }, - { - "id": "stack-pb-ptw-validation", - "field": "validation", - "label": "Audit", - "color": "#ffffff" - }, - { - "id": "stack-pb-ptw-status", + "id": "stack-41", "field": "status", "label": "Available", "color": "#1e8449" } ], - "stackCollapsed": true + "stackCollapsed": true, + "notes": "Verified isolation, zero-energy confirmation, and ammonia-specific competency." } ] }, { - "id": "threat-operator", + "id": "threat-45", "label": "Operator error during startup, shutdown, or abnormal operation", "preventionBarriers": [ { - "id": "pb-sop", + "id": "barrier-46", "label": "Operating procedures and abnormal situation guidance", - "notes": "Written procedures for charge management, alarms, and emergency slowdown.", - "escalationFactors": [], + "degradationChains": [], "stack": [ { - "id": "stack-pb-sop-type", + "id": "stack-47", "field": "type", "label": "Active Human", "color": "#5dade2" }, { - "id": "stack-pb-sop-effectiveness", + "id": "stack-48", "field": "effectiveness", "label": "Good", "color": "#27ae60" }, { - "id": "stack-pb-sop-criticality", + "id": "stack-49", "field": "criticality", "label": "High", "color": "#566573" }, { - "id": "stack-pb-sop-responsible", - "field": "responsible", - "label": "Operations", - "color": "#ffffff" - }, - { - "id": "stack-pb-sop-validation", - "field": "validation", - "label": "Audit", - "color": "#ffffff" - }, - { - "id": "stack-pb-sop-status", + "id": "stack-50", "field": "status", "label": "Available", "color": "#1e8449" } ], - "stackCollapsed": true + "stackCollapsed": true, + "notes": "Written procedures for charge management, alarms, and emergency slowdown." }, { - "id": "pb-training", + "id": "barrier-51", "label": "Operator training and competency assurance", - "notes": "Refresher training on ammonia properties, alarms, and first actions.", - "escalationFactors": [], + "degradationChains": [], "stack": [ { - "id": "stack-pb-training-type", + "id": "stack-52", "field": "type", - "label": "Reactive Human", - "color": "#3498db" + "label": "Active Human", + "color": "#5dade2" }, { - "id": "stack-pb-training-effectiveness", + "id": "stack-53", "field": "effectiveness", "label": "Fair", "color": "#f1c40f" }, { - "id": "stack-pb-training-criticality", + "id": "stack-54", "field": "criticality", "label": "Medium", "color": "#7f8c8d" }, { - "id": "stack-pb-training-responsible", - "field": "responsible", - "label": "HSE Department", - "color": "#ffffff" - }, - { - "id": "stack-pb-training-validation", - "field": "validation", - "label": "Drills and Exercise", - "color": "#ffffff" - }, - { - "id": "stack-pb-training-status", + "id": "stack-55", "field": "status", "label": "Available", "color": "#1e8449" } ], - "stackCollapsed": true - } - ] - }, - { - "id": "threat-external-fire", - "label": "External fire impinging on ammonia equipment or pipework", - "notes": "Warehouse fire, arcing electrical equipment, or hot work in adjacent area.", - "preventionBarriers": [ - { - "id": "pb-fire-prevention", - "label": "Fire prevention and hot-work controls in ammonia areas", - "notes": "Housekeeping, fire detection, hot-work permits, and separation from combustibles.", - "escalationFactors": [], - "stack": [ - { - "id": "stack-pb-fire-prevention-type", - "field": "type", - "label": "Active Human", - "color": "#5dade2" - }, - { - "id": "stack-pb-fire-prevention-effectiveness", - "field": "effectiveness", - "label": "Good", - "color": "#27ae60" - }, - { - "id": "stack-pb-fire-prevention-criticality", - "field": "criticality", - "label": "High", - "color": "#566573" - }, - { - "id": "stack-pb-fire-prevention-responsible", - "field": "responsible", - "label": "HSE Department", - "color": "#ffffff" - }, - { - "id": "stack-pb-fire-prevention-validation", - "field": "validation", - "label": "Audit", - "color": "#ffffff" - }, - { - "id": "stack-pb-fire-prevention-status", - "field": "status", - "label": "Available", - "color": "#1e8449" - } - ], - "stackCollapsed": true + "stackCollapsed": true, + "notes": "Refresher training on ammonia properties, alarms, and first actions." } ] } ], "consequences": [ { - "id": "consequence-exposure", + "id": "consequence-56", "label": "Personnel harm due to toxic ammonia exposure", "mitigationBarriers": [ { - "id": "mb-detection", + "id": "barrier-57", "label": "Fixed ammonia gas detection and alarm", - "notes": "Audible/visual alarm, potential automatic isolation or ventilation actuation.", - "escalationFactors": [ + "degradationChains": [ { - "id": "ef-calibration", - "label": "Sensor calibration overdue or drift", - "escalationBarriers": [ + "id": "chain-64", + "safeguards": [ { - "id": "eb-calibration-program", - "label": "Calibration management and functional test program", - "escalationFactors": [], - "stack": [], - "stackCollapsed": true + "id": "safeguard-65", + "label": "Calibration management and functional test program" } - ] + ], + "degradationFactor": { + "id": "degradation-66", + "label": "Sensor calibration overdue or drift" + } } ], "stack": [ { - "id": "stack-mb-detection-type", + "id": "stack-58", "field": "type", "label": "Active Hardware", "color": "#48c9b0" }, { - "id": "stack-mb-detection-effectiveness", + "id": "stack-59", "field": "effectiveness", "label": "Good", "color": "#27ae60" }, { - "id": "stack-mb-detection-criticality", + "id": "stack-60", "field": "criticality", "label": "Very High", "color": "#2c3e50" }, { - "id": "stack-mb-detection-responsible", + "id": "stack-61", "field": "responsible", "label": "HSE Department", "color": "#ffffff" }, { - "id": "stack-mb-detection-validation", + "id": "stack-62", "field": "validation", "label": "Barrier Test", "color": "#ffffff" }, { - "id": "stack-mb-detection-status", + "id": "stack-63", "field": "status", "label": "Available", "color": "#1e8449" } ], - "stackCollapsed": false + "stackCollapsed": false, + "notes": "Audible/visual alarm, with potential automatic isolation or ventilation actuation." }, { - "id": "mb-ventilation", + "id": "barrier-67", "label": "Emergency ventilation and isolation valves", - "notes": "Reduce airborne concentration; close isolation valves where safe to do so.", - "escalationFactors": [], + "degradationChains": [], "stack": [ { - "id": "stack-mb-ventilation-type", + "id": "stack-68", "field": "type", "label": "Active Hardware", "color": "#48c9b0" }, { - "id": "stack-mb-ventilation-effectiveness", + "id": "stack-69", "field": "effectiveness", "label": "Good", "color": "#27ae60" }, { - "id": "stack-mb-ventilation-criticality", + "id": "stack-70", "field": "criticality", "label": "Very High", "color": "#2c3e50" }, { - "id": "stack-mb-ventilation-responsible", - "field": "responsible", - "label": "Tech Department", - "color": "#ffffff" - }, - { - "id": "stack-mb-ventilation-validation", - "field": "validation", - "label": "Barrier Test", - "color": "#ffffff" - }, - { - "id": "stack-mb-ventilation-status", + "id": "stack-71", "field": "status", "label": "Available", "color": "#1e8449" } ], - "stackCollapsed": true - }, - { - "id": "mb-evacuation", - "label": "Personnel evacuation and emergency muster", - "notes": "Alarm response, headcount, and upwind assembly per ERP.", - "escalationFactors": [], - "stack": [ - { - "id": "stack-mb-evacuation-type", - "field": "type", - "label": "Reactive Human", - "color": "#3498db" - }, - { - "id": "stack-mb-evacuation-effectiveness", - "field": "effectiveness", - "label": "Good", - "color": "#27ae60" - }, - { - "id": "stack-mb-evacuation-criticality", - "field": "criticality", - "label": "High", - "color": "#566573" - }, - { - "id": "stack-mb-evacuation-responsible", - "field": "responsible", - "label": "HSE Department", - "color": "#ffffff" - }, - { - "id": "stack-mb-evacuation-validation", - "field": "validation", - "label": "Drills and Exercise", - "color": "#ffffff" - }, - { - "id": "stack-mb-evacuation-status", - "field": "status", - "label": "Available", - "color": "#1e8449" - } - ], - "stackCollapsed": true + "stackCollapsed": true, + "notes": "Reduce airborne concentration; close isolation valves where safe to do so." } ] }, { - "id": "consequence-environment", + "id": "consequence-72", "label": "Environmental damage due to ammonia release", "mitigationBarriers": [ { - "id": "mb-containment", + "id": "barrier-73", "label": "Containment sump and emergency dilution / knock-down", - "notes": "Limit spread to drains, waterways, or off-site receptors.", - "escalationFactors": [], + "degradationChains": [], "stack": [ { - "id": "stack-mb-containment-type", + "id": "stack-74", "field": "type", "label": "Passive Hardware", "color": "#7f8c8d" }, { - "id": "stack-mb-containment-effectiveness", + "id": "stack-75", "field": "effectiveness", "label": "Fair", "color": "#f1c40f" }, { - "id": "stack-mb-containment-criticality", + "id": "stack-76", "field": "criticality", "label": "High", "color": "#566573" }, { - "id": "stack-mb-containment-responsible", - "field": "responsible", - "label": "Tech Department", - "color": "#ffffff" - }, - { - "id": "stack-mb-containment-validation", - "field": "validation", - "label": "Inspection", - "color": "#ffffff" - }, - { - "id": "stack-mb-containment-status", + "id": "stack-77", "field": "status", "label": "Degraded", "color": "#f39c12" } ], - "stackCollapsed": true - }, - { - "id": "mb-notification", - "label": "Regulatory reporting and community notification", - "notes": "RMP/SEVESO-style reporting and liaison with authorities as required.", - "escalationFactors": [], - "stack": [ - { - "id": "stack-mb-notification-type", - "field": "type", - "label": "Reactive Human", - "color": "#3498db" - }, - { - "id": "stack-mb-notification-effectiveness", - "field": "effectiveness", - "label": "Good", - "color": "#27ae60" - }, - { - "id": "stack-mb-notification-criticality", - "field": "criticality", - "label": "Medium", - "color": "#7f8c8d" - }, - { - "id": "stack-mb-notification-responsible", - "field": "responsible", - "label": "HSE Department", - "color": "#ffffff" - }, - { - "id": "stack-mb-notification-validation", - "field": "validation", - "label": "Audit", - "color": "#ffffff" - }, - { - "id": "stack-mb-notification-status", - "field": "status", - "label": "Available", - "color": "#1e8449" - } - ], - "stackCollapsed": true + "stackCollapsed": true, + "notes": "Limit spread to drains, waterways, or off-site receptors." } ] }, { - "id": "consequence-business", + "id": "consequence-78", "label": "Operational loss due to cold-chain interruption", "mitigationBarriers": [ { - "id": "mb-erp", + "id": "barrier-79", "label": "Emergency response plan and qualified contractor standby", - "notes": "Ammonia-qualified emergency repair and product salvage / transfer plan.", - "escalationFactors": [ + "degradationChains": [ { - "id": "ef-contractor-gap", - "label": "Contractor availability or response time not assured", - "escalationBarriers": [ + "id": "chain-85", + "safeguards": [ { - "id": "eb-contractor-retainer", - "label": "Pre-qualified contractor agreement and annual drill", - "escalationFactors": [], - "stack": [], - "stackCollapsed": true + "id": "safeguard-86", + "label": "Pre-qualified contractor agreement and annual drill" } - ] + ], + "degradationFactor": { + "id": "degradation-87", + "label": "Contractor availability or response time not assured" + } } ], "stack": [ { - "id": "stack-mb-erp-type", + "id": "stack-80", "field": "type", - "label": "Reactive Human", - "color": "#3498db" + "label": "Active Human", + "color": "#5dade2" }, { - "id": "stack-mb-erp-effectiveness", + "id": "stack-81", "field": "effectiveness", "label": "Good", "color": "#27ae60" }, { - "id": "stack-mb-erp-criticality", + "id": "stack-82", "field": "criticality", "label": "High", "color": "#566573" }, { - "id": "stack-mb-erp-responsible", + "id": "stack-83", "field": "responsible", "label": "Management", "color": "#ffffff" }, { - "id": "stack-mb-erp-validation", - "field": "validation", - "label": "Drills and Exercise", - "color": "#ffffff" - }, - { - "id": "stack-mb-erp-status", + "id": "stack-84", "field": "status", "label": "Available", "color": "#1e8449" } ], - "stackCollapsed": true + "stackCollapsed": true, + "notes": "Ammonia-qualified emergency repair and product salvage / transfer plan." } ] } @@ -783,6 +545,6 @@ "panX": 0, "panY": 0 }, - "createdAt": "2026-06-19T00:00:00.000Z", - "updatedAt": "2026-06-19T12:05:10.306Z" + "createdAt": "2026-06-12T00:00:00.000Z", + "updatedAt": "2026-06-12T00:00:00.000Z" } diff --git a/examples/steamcracker.bowtie b/examples/steamcracker.bowtie index 4865971..0564c7d 100644 --- a/examples/steamcracker.bowtie +++ b/examples/steamcracker.bowtie @@ -1,67 +1,89 @@ { - "id": "example-steamcracker", - "name": "Defective Steamcracker", - "hazard": "High pressure ethylene cracking system", - "topEvent": "Loss of containment in steamcracker furnace", + "id": "bowtie-0", + "name": "Defective steamcracker", + "events": [ + { + "id": "event-1", + "label": "Loss of containment in steamcracker furnace", + "hazard": "High-pressure ethylene cracking system", + "transitionBarriers": [] + } + ], "threats": [ { - "id": "threat-1", + "id": "threat-2", "label": "Tube corrosion / fatigue", "preventionBarriers": [ { - "id": "pb-1", + "id": "barrier-3", "label": "Periodic tube inspection program", - "escalationFactors": [] + "degradationChains": [], + "stack": [], + "stackCollapsed": true }, { - "id": "pb-2", + "id": "barrier-4", "label": "Material selection standards", - "escalationFactors": [] + "degradationChains": [], + "stack": [], + "stackCollapsed": true } ] }, { - "id": "threat-2", + "id": "threat-5", "label": "Operator error during startup", "preventionBarriers": [ { - "id": "pb-3", + "id": "barrier-6", "label": "Standard operating procedures", - "escalationFactors": [] + "degradationChains": [], + "stack": [], + "stackCollapsed": true } ] } ], "consequences": [ { - "id": "consequence-1", + "id": "consequence-7", "label": "Fire / explosion", "mitigationBarriers": [ { - "id": "mb-1", + "id": "barrier-8", "label": "Deluge and fire suppression systems", - "escalationFactors": [] + "degradationChains": [], + "stack": [], + "stackCollapsed": true } ] }, { - "id": "consequence-2", + "id": "consequence-9", "label": "Toxic gas release", "mitigationBarriers": [ { - "id": "mb-2", + "id": "barrier-10", "label": "Gas detection and isolation", - "escalationFactors": [] + "degradationChains": [], + "stack": [], + "stackCollapsed": true }, { - "id": "mb-3", + "id": "barrier-11", "label": "Emergency response plan", - "escalationFactors": [] + "degradationChains": [], + "stack": [], + "stackCollapsed": true } ] } ], - "view": { "zoom": 1, "panX": 0, "panY": 0 }, - "createdAt": "2026-06-09T00:00:00.000Z", - "updatedAt": "2026-06-09T00:00:00.000Z" + "view": { + "zoom": 1, + "panX": 0, + "panY": 0 + }, + "createdAt": "2026-06-12T00:00:00.000Z", + "updatedAt": "2026-06-12T00:00:00.000Z" } diff --git a/manifest.json b/manifest.json index b11b4f4..b73b445 100644 --- a/manifest.json +++ b/manifest.json @@ -1,9 +1,9 @@ { "id": "o-tie", "name": "O-Tie", - "version": "1.0.7", + "version": "1.0.8", "minAppVersion": "1.4.0", - "description": "Build and edit risk bowtie diagrams in a visual editor with barriers, escalation factors, analysis stacks, and PNG export.", + "description": "Build risk bowtie diagrams in your vault: threats, prevention and mitigation barriers, escalation factors, barrier analysis stacks, and PNG export.", "author": "Andre482", "authorUrl": "https://github.com/Andre482", "isDesktopOnly": false diff --git a/package-lock.json b/package-lock.json index 2d222fd..b7713aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "o-tie", - "version": "1.0.2", + "version": "1.0.8", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "o-tie", - "version": "1.0.2", + "version": "1.0.8", "license": "MIT", "dependencies": { "html-to-image": "^1.11.13" @@ -21,7 +21,8 @@ "playwright": "^1.61.0", "tslib": "^2.6.2", "typescript": "^5.3.3", - "typescript-eslint": "^8.61.1" + "typescript-eslint": "^8.61.1", + "vitest": "^4.1.9" } }, "node_modules/@codemirror/state": { @@ -49,6 +50,40 @@ "w3c-keyname": "^2.2.4" } }, + "node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", @@ -738,6 +773,13 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, "node_modules/@marijn/find-cluster-break": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.2.tgz", @@ -784,6 +826,35 @@ "ret": "~0.1.10" } }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.137.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.137.0.tgz", + "integrity": "sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, "node_modules/@pkgr/core": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.2.tgz", @@ -797,6 +868,288 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.3.tgz", + "integrity": "sha512-DT6Z3PhvioeHMvxo+xHc3KtqggrI7CCTXCmC2h/5zUlp5jVitv7XEy+9q5/7v8IolhlioawpMo8Kg0EEBy7J0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.3.tgz", + "integrity": "sha512-0NwgwsjM7LrsuVnXMK3koTpagBNOhloc/BNjKqZjv4V5zI5r13qx69uVhRx+o5Z0yy4Hzq+lpy7TAgUG/ocvrw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.3.tgz", + "integrity": "sha512-YtiBp4disu6V560loT6PjMdiRaWmVvDNrUunAalbiFx2ggeJwxdAsgZMcoGP17uyAsTwAj5V1niksxlHnVQ1Sw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.3.tgz", + "integrity": "sha512-yD3EkEdXk2LypPxnf/kSZHirarsI8gcPzc62SukhR9VJTyvV+F9Q/GxWNuCojc7sXyuVC4DxRGhdDK4X8VSsbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.3.tgz", + "integrity": "sha512-c+8vieQbsD7HNAHKIA34w0GJ9FedFFuJGD+7E6vz7Q3uqAIugL5p45fhlsj4UaAsHpcmlqugBWMhA0/j7o0sIg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.3.tgz", + "integrity": "sha512-50jD0uUwLvur7Zz9LHz17kaAdTPjn5wN93hEgjvmYFRZwiR7ZJYovTd5ipyWJDAnXKvZ+wgc+/Ika6dwSF5OcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.3.tgz", + "integrity": "sha512-BO9+oPL8K9poZJBfYPsXNtYjPE5uM3qeehT3aFcW4LITOl+iSqhp0abzjR2nWBUNjIZeKXjAEWBZ64WjNoHd6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.3.tgz", + "integrity": "sha512-f3VpLB1vQ0Eo6ecr/6cekLnvYMFF4YBFoVGkfkvPLq1bAkbAwHYQPZKoAmG6OJyTcxxoC+AvezGx/S1obNC0Mw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.3.tgz", + "integrity": "sha512-AmurZ26Pqx/RI9N1gzEOCklkKXl927yjfXWUUS0O7Puh8ARM/Ob8qfrD3qnWksScdw6cSrW5PSHE9DyLu7+PtA==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.3.tgz", + "integrity": "sha512-JJpqs8bRGITDOdbkNKnlojzBabbOHrqjSvDr0IVsZObE1lBcPjxItUEY9eWIDbxaJ3cGrXPWGfGkIxFijg/URg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.3.tgz", + "integrity": "sha512-rSJcdjPxzA/by/6/rYs+v+bXU7UjvnbUWz8MJb6kh6+knqB1dCrtHg0uu7C/4haqJvqdkYHQ5IGn+tCH9GLW/g==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.3.tgz", + "integrity": "sha512-hQ3/PYkDJICgevvyNcVrihVeqq7k1Pp3VZ9lY+dauAYUJKO+auqApvANhvR1An9BhmqYKvW2Mu1F9u4DXSMLxQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.3.tgz", + "integrity": "sha512-Elcv/BtML9lXrV6JuKITc/grN2kYV9gjsQpW8Jfw4ioK0TOkjBjye0nnyqQNy9STNaI20lXNaQBRrD5gSgR0Yg==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.3.tgz", + "integrity": "sha512-2DrEfhluH9yhiaFApmsjsjwrSYbNcY1oFTzYSP1a535jDbV98zCFanA/96TBUd0iDFcxGmw9QRExwGCXz3U+/g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.3.tgz", + "integrity": "sha512-OL4OMk7UPXOeVGGd3qo5zJyPIljf4AFgk5QAkPPS+OoLuOOozhuaQGC18MxVTnw/06q93gShAJzlwnSCY9YtqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, "node_modules/@rtsao/scc": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", @@ -804,6 +1157,35 @@ "dev": true, "license": "MIT" }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, "node_modules/@types/codemirror": { "version": "5.60.8", "resolved": "https://registry.npmjs.org/@types/codemirror/-/codemirror-5.60.8.tgz", @@ -814,6 +1196,13 @@ "@types/tern": "*" } }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/eslint": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", @@ -1096,6 +1485,92 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@vitest/expect": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.9.tgz", + "integrity": "sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.9.tgz", + "integrity": "sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.9.tgz", + "integrity": "sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.9", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.9.tgz", + "integrity": "sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.9", + "@vitest/utils": "4.1.9", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.9.tgz", + "integrity": "sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.9.tgz", + "integrity": "sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.9", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, "node_modules/acorn": { "version": "8.17.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", @@ -1319,6 +1794,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, "node_modules/async-function": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", @@ -1428,6 +1913,16 @@ "node": ">=6" } }, + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1472,6 +1967,13 @@ "dev": true, "license": "MIT" }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, "node_modules/crelt": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", @@ -1610,6 +2112,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/doctrine": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", @@ -1798,6 +2310,13 @@ "node": ">= 0.4" } }, + "node_modules/es-module-lexer": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.1.0.tgz", + "integrity": "sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==", + "dev": true, + "license": "MIT" + }, "node_modules/es-object-atoms": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", @@ -2637,6 +3156,16 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -2647,6 +3176,16 @@ "node": ">=0.10.0" } }, + "node_modules/expect-type": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz", + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -3742,6 +4281,279 @@ "node": ">= 0.8.0" } }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -3778,6 +4590,16 @@ "loose-envify": "cli.js" } }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", @@ -3838,6 +4660,25 @@ "dev": true, "license": "MIT" }, + "node_modules/nanoid": { + "version": "3.3.15", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.15.tgz", + "integrity": "sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -4012,6 +4853,20 @@ "@codemirror/view": "6.38.6" } }, + "node_modules/obug": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.3.tgz", + "integrity": "sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -4120,6 +4975,20 @@ "dev": true, "license": "MIT" }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, "node_modules/picomatch": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", @@ -4175,6 +5044,35 @@ "node": ">= 0.4" } }, + "node_modules/postcss": { + "version": "8.5.15", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.15.tgz", + "integrity": "sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -4332,6 +5230,40 @@ "node": ">=0.12" } }, + "node_modules/rolldown": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.3.tgz", + "integrity": "sha512-1F1eEtUBtFvcGm1HQ9TiUIUHPQG7mSAODrhIzjxoUEFuo8OcbrGLiVLkevNgj84TE4lnHvnumwFjhJO5Eu135g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.137.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.1.3", + "@rolldown/binding-darwin-arm64": "1.1.3", + "@rolldown/binding-darwin-x64": "1.1.3", + "@rolldown/binding-freebsd-x64": "1.1.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.3", + "@rolldown/binding-linux-arm64-gnu": "1.1.3", + "@rolldown/binding-linux-arm64-musl": "1.1.3", + "@rolldown/binding-linux-ppc64-gnu": "1.1.3", + "@rolldown/binding-linux-s390x-gnu": "1.1.3", + "@rolldown/binding-linux-x64-gnu": "1.1.3", + "@rolldown/binding-linux-x64-musl": "1.1.3", + "@rolldown/binding-openharmony-arm64": "1.1.3", + "@rolldown/binding-wasm32-wasi": "1.1.3", + "@rolldown/binding-win32-arm64-msvc": "1.1.3", + "@rolldown/binding-win32-x64-msvc": "1.1.3" + } + }, "node_modules/safe-array-concat": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", @@ -4579,6 +5511,37 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.1.0.tgz", + "integrity": "sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==", + "dev": true, + "license": "MIT" + }, "node_modules/stop-iteration-iterator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", @@ -4780,6 +5743,23 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/tinyglobby": { "version": "0.2.17", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", @@ -4797,6 +5777,16 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/toml-eslint-parser": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/toml-eslint-parser/-/toml-eslint-parser-0.9.3.tgz", @@ -5037,6 +6027,216 @@ "punycode": "^2.1.0" } }, + "node_modules/vitest": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.9.tgz", + "integrity": "sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.9", + "@vitest/mocker": "4.1.9", + "@vitest/pretty-format": "4.1.9", + "@vitest/runner": "4.1.9", + "@vitest/snapshot": "4.1.9", + "@vitest/spy": "4.1.9", + "@vitest/utils": "4.1.9", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.9", + "@vitest/browser-preview": "4.1.9", + "@vitest/browser-webdriverio": "4.1.9", + "@vitest/coverage-istanbul": "4.1.9", + "@vitest/coverage-v8": "4.1.9", + "@vitest/ui": "4.1.9", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, + "node_modules/vitest/node_modules/@vitest/mocker": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.9.tgz", + "integrity": "sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.9", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/vitest/node_modules/vite": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.0.tgz", + "integrity": "sha512-BuJcQK/56NQTWDGn4ABea3q4SSBdNPWwNZKTkkUpcMPnLoquSYH8llRtSUIgoL1KSCpHt5eghLShn50mH36y7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "~1.1.2", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.3.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, "node_modules/w3c-keyname": { "version": "2.2.8", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", @@ -5150,6 +6350,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", diff --git a/package.json b/package.json index 1215913..bb6d629 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,15 @@ { "name": "o-tie", - "version": "1.0.7", + "version": "1.0.8", "description": "Obsidian plugin for building risk bowtie diagrams", "main": "main.js", "scripts": { "dev": "node esbuild.config.mjs", "build": "tsc -noEmit -skipLibCheck && node esbuild.config.mjs production", "lint": "eslint src/", + "test": "vitest run", + "screenshots": "node scripts/render-screenshots.mjs", + "examples": "node scripts/generate-examples.mjs", "deploy": "npm run build && node deploy.mjs", "version": "node version-bump.mjs && git add manifest.json versions.json" }, @@ -26,7 +29,8 @@ "playwright": "^1.61.0", "tslib": "^2.6.2", "typescript": "^5.3.3", - "typescript-eslint": "^8.61.1" + "typescript-eslint": "^8.61.1", + "vitest": "^4.1.9" }, "dependencies": { "html-to-image": "^1.11.13" diff --git a/scripts/engine.mjs b/scripts/engine.mjs new file mode 100644 index 0000000..30e033d --- /dev/null +++ b/scripts/engine.mjs @@ -0,0 +1,34 @@ +// Bundles the plugin's pure layout/model TypeScript so Node scripts can use it. +import { build } from "esbuild"; +import { rmSync, writeFileSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { fileURLToPath, pathToFileURL } from "node:url"; + +const scriptsDir = dirname(fileURLToPath(import.meta.url)); +const root = join(scriptsDir, ".."); + +export async function loadEngine() { + const result = await build({ + stdin: { + contents: ` + export { layoutBowtie, DEFAULT_LAYOUT, barrierHeaderHeightFor } from "./src/layout"; + export * as model from "./src/model"; + `, + resolveDir: root, + loader: "ts", + sourcefile: "engine-entry.ts", + }, + bundle: true, + format: "esm", + platform: "node", + write: false, + logLevel: "silent", + }); + const tmp = join(scriptsDir, `_engine-${process.pid}.mjs`); + writeFileSync(tmp, result.outputFiles[0].text); + try { + return await import(pathToFileURL(tmp).href); + } finally { + rmSync(tmp, { force: true }); + } +} diff --git a/scripts/generate-examples.mjs b/scripts/generate-examples.mjs new file mode 100644 index 0000000..f3c054d --- /dev/null +++ b/scripts/generate-examples.mjs @@ -0,0 +1,307 @@ +// Regenerates the committed example .bowtie files in the current schema. +// +// Authoring the scenarios through the real model guarantees the files validate +// and stay in canonical form. Run: npm run examples + +import { writeFileSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; +import { loadEngine } from "./engine.mjs"; + +const scriptsDir = dirname(fileURLToPath(import.meta.url)); +const examplesDir = join(scriptsDir, "..", "examples"); +const FIXED_TS = "2026-06-12T00:00:00.000Z"; + +const engine = await loadEngine(); +const model = engine.model; + +function fieldColor(fieldKey, label) { + const field = model.BARRIER_STACK_FIELDS.find((f) => f.key === fieldKey); + return field?.options.find((o) => o.label === label)?.color; +} + +function barrier(label, opts = {}) { + const b = model.createBarrier(label); + if (opts.notes) b.notes = opts.notes; + if (opts.stack) { + b.stack = opts.stack.map(([field, value]) => { + const color = fieldColor(field, value); + if (color === undefined) throw new Error(`Unknown ${field} option: ${value}`); + return model.createBarrierStackItem(value, field, color); + }); + model.sortBarrierStack(b.stack); + b.stackCollapsed = opts.expanded !== true; + } + if (opts.chains) { + b.degradationChains = opts.chains.map((c) => { + const chain = model.createDegradationChain(c.factor); + chain.safeguards = (c.safeguards ?? []).map((s) => model.createEscalationNode(s)); + return chain; + }); + } + return b; +} + +function threat(label, notes, barriers) { + const t = model.createThreat(label); + if (notes) t.notes = notes; + t.preventionBarriers = barriers; + return t; +} + +function consequence(label, notes, barriers) { + const c = model.createConsequence(label); + if (notes) c.notes = notes; + c.mitigationBarriers = barriers; + return c; +} + +// Stable, readable ids so regeneration produces minimal diffs. +function reassignIds(bowtie) { + let n = 0; + const id = (prefix) => `${prefix}-${n++}`; + bowtie.id = id("bowtie"); + for (const event of bowtie.events) { + event.id = id("event"); + event.transitionBarriers.forEach(reassignBarrier(id)); + } + for (const t of bowtie.threats) { + t.id = id("threat"); + t.preventionBarriers.forEach(reassignBarrier(id)); + } + for (const c of bowtie.consequences) { + c.id = id("consequence"); + c.mitigationBarriers.forEach(reassignBarrier(id)); + } + bowtie.createdAt = FIXED_TS; + bowtie.updatedAt = FIXED_TS; + return bowtie; + + function reassignBarrier(idFn) { + return (b) => { + b.id = idFn("barrier"); + for (const item of b.stack ?? []) item.id = idFn("stack"); + for (const chain of b.degradationChains) { + chain.id = idFn("chain"); + for (const sg of chain.safeguards) sg.id = idFn("safeguard"); + chain.degradationFactor.id = idFn("degradation"); + } + }; + } +} + +function buildAmmonia() { + const bt = model.createBowtie("Cold storage ammonia refrigeration"); + bt.events[0].label = "Loss of primary containment from ammonia refrigeration circuit"; + bt.events[0].hazard = "Pressurised anhydrous ammonia (NH3) refrigeration inventory"; + + bt.threats = [ + threat( + "Corrosion or fatigue of piping, vessels, or evaporator coils", + "Credible in aged plant with cyclic thermal loading, condensate, or corrosion under insulation.", + [ + barrier("Mechanical integrity inspection program", { + notes: "NDT, thickness monitoring, and replacement intervals per IIAR-6 / company standards.", + expanded: true, + stack: [ + ["type", "Active Hardware"], + ["effectiveness", "Good"], + ["criticality", "Very High"], + ["responsible", "Tech Department"], + ["validation", "Inspection"], + ["status", "Available"], + ], + chains: [ + { + factor: "Deferred inspection due to production pressure", + safeguards: ["QA audit of mechanical integrity backlog"], + }, + ], + }), + barrier("Materials of construction and corrosion allowance", { + notes: "Compatible metallurgy, coatings, and design margin for operating conditions.", + stack: [ + ["type", "Passive Hardware"], + ["effectiveness", "Good"], + ["criticality", "High"], + ["status", "Available"], + ], + }), + ] + ), + threat( + "Forklift or vehicle impact on exposed ammonia piping", + "Common in warehouse aisles adjacent to machine rooms or overhead pipe runs.", + [ + barrier("Physical protection and traffic segregation", { + notes: "Bollards, rack guards, marked routes, and restricted machine-room access.", + stack: [ + ["type", "Passive Hardware"], + ["effectiveness", "Good"], + ["criticality", "High"], + ["status", "Available"], + ], + chains: [ + { + factor: "Bollards removed or bypassed for convenience", + safeguards: ["Supervisor housekeeping and barrier inspection rounds"], + }, + ], + }), + ] + ), + threat("Overpressure in low-side or high-side refrigeration circuit", undefined, [ + barrier("Pressure relief devices and high-pressure interlocks", { + notes: "PSVs discharge to a safe location; alarm and trip on abnormal pressure.", + stack: [ + ["type", "Active Hardware"], + ["effectiveness", "Good"], + ["criticality", "Very High"], + ["status", "Available"], + ], + chains: [ + { + factor: "Relief device isolated, blocked, or inspection overdue", + safeguards: ["PSV inspection and register management program"], + }, + ], + }), + ]), + threat("Maintenance isolation or re-commissioning error", undefined, [ + barrier("Permit-to-work and LOTO procedures", { + notes: "Verified isolation, zero-energy confirmation, and ammonia-specific competency.", + stack: [ + ["type", "Active Human"], + ["effectiveness", "Good"], + ["criticality", "Very High"], + ["status", "Available"], + ], + chains: [ + { + factor: "Technician competency not verified for ammonia work", + safeguards: ["Competency assessment and authorization records"], + }, + ], + }), + ]), + threat("Operator error during startup, shutdown, or abnormal operation", undefined, [ + barrier("Operating procedures and abnormal situation guidance", { + notes: "Written procedures for charge management, alarms, and emergency slowdown.", + stack: [ + ["type", "Active Human"], + ["effectiveness", "Good"], + ["criticality", "High"], + ["status", "Available"], + ], + }), + barrier("Operator training and competency assurance", { + notes: "Refresher training on ammonia properties, alarms, and first actions.", + stack: [ + ["type", "Active Human"], + ["effectiveness", "Fair"], + ["criticality", "Medium"], + ["status", "Available"], + ], + }), + ]), + ]; + + bt.consequences = [ + consequence("Personnel harm due to toxic ammonia exposure", undefined, [ + barrier("Fixed ammonia gas detection and alarm", { + notes: "Audible/visual alarm, with potential automatic isolation or ventilation actuation.", + expanded: true, + stack: [ + ["type", "Active Hardware"], + ["effectiveness", "Good"], + ["criticality", "Very High"], + ["responsible", "HSE Department"], + ["validation", "Barrier Test"], + ["status", "Available"], + ], + chains: [ + { + factor: "Sensor calibration overdue or drift", + safeguards: ["Calibration management and functional test program"], + }, + ], + }), + barrier("Emergency ventilation and isolation valves", { + notes: "Reduce airborne concentration; close isolation valves where safe to do so.", + stack: [ + ["type", "Active Hardware"], + ["effectiveness", "Good"], + ["criticality", "Very High"], + ["status", "Available"], + ], + }), + ]), + consequence("Environmental damage due to ammonia release", undefined, [ + barrier("Containment sump and emergency dilution / knock-down", { + notes: "Limit spread to drains, waterways, or off-site receptors.", + stack: [ + ["type", "Passive Hardware"], + ["effectiveness", "Fair"], + ["criticality", "High"], + ["status", "Degraded"], + ], + }), + ]), + consequence("Operational loss due to cold-chain interruption", undefined, [ + barrier("Emergency response plan and qualified contractor standby", { + notes: "Ammonia-qualified emergency repair and product salvage / transfer plan.", + stack: [ + ["type", "Active Human"], + ["effectiveness", "Good"], + ["criticality", "High"], + ["responsible", "Management"], + ["status", "Available"], + ], + chains: [ + { + factor: "Contractor availability or response time not assured", + safeguards: ["Pre-qualified contractor agreement and annual drill"], + }, + ], + }), + ]), + ]; + + return reassignIds(bt); +} + +function buildSteamcracker() { + const bt = model.createBowtie("Defective steamcracker"); + bt.events[0].label = "Loss of containment in steamcracker furnace"; + bt.events[0].hazard = "High-pressure ethylene cracking system"; + + bt.threats = [ + threat("Tube corrosion / fatigue", undefined, [ + barrier("Periodic tube inspection program"), + barrier("Material selection standards"), + ]), + threat("Operator error during startup", undefined, [ + barrier("Standard operating procedures"), + ]), + ]; + bt.consequences = [ + consequence("Fire / explosion", undefined, [ + barrier("Deluge and fire suppression systems"), + ]), + consequence("Toxic gas release", undefined, [ + barrier("Gas detection and isolation"), + barrier("Emergency response plan"), + ]), + ]; + + return reassignIds(bt); +} + +function write(name, bowtie) { + const file = join(examplesDir, name); + writeFileSync(file, `${model.serializeBowtie(bowtie)}\n`); + console.log(`Wrote ${file}`); +} + +write("cold-storage-ammonia.bowtie", buildAmmonia()); +write("steamcracker.bowtie", buildSteamcracker()); diff --git a/scripts/render-screenshots.mjs b/scripts/render-screenshots.mjs new file mode 100644 index 0000000..b7cd399 --- /dev/null +++ b/scripts/render-screenshots.mjs @@ -0,0 +1,279 @@ +// Generates authentic O-Tie diagram screenshots for the README. +// +// It reuses the plugin's real layout engine (src/layout.ts) and stylesheet +// (styles.css), reproduces the same node/edge DOM the plugin renders, and +// captures it with headless Chromium. The output mirrors the plugin's "Export +// as image" appearance (no editing chrome). +// +// Usage: npm run screenshots +// Requires Chromium once: npx playwright install chromium + +import { chromium } from "playwright"; +import { mkdirSync, readFileSync } from "node:fs"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; +import { loadEngine } from "./engine.mjs"; + +const scriptsDir = dirname(fileURLToPath(import.meta.url)); +const root = join(scriptsDir, ".."); +const assetsDir = join(root, "assets"); +const stylesCss = readFileSync(join(root, "styles.css"), "utf8"); + +// Light-theme stand-ins for the Obsidian CSS variables the canvas relies on. +const THEME_VARS = ` + --background-primary: #ffffff; + --background-secondary: #f4f6f8; + --background-modifier-border: #d6dae0; + --background-modifier-border-hover: #c2c8d0; + --background-modifier-hover: #ecedf1; + --text-normal: #1a1a1a; + --text-muted: #5d6d7e; + --text-error: #c0392b; + --interactive-accent: #7b6cf6; + --radius-s: 4px; + --font-ui-smaller: 11px; + --font-interface: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; +`; + +const LIGHT_STACK_ROW_COLORS = new Set(["#ffffff", "#f4ecf7", "#eafaf1"]); + +function isLightStackColor(color) { + if (LIGHT_STACK_ROW_COLORS.has(color)) return true; + const match = /^#([0-9a-f]{6})$/i.exec(color); + if (!match) return false; + const n = parseInt(match[1], 16); + const r = (n >> 16) & 0xff; + const g = (n >> 8) & 0xff; + const b = n & 0xff; + return (0.299 * r + 0.587 * g + 0.114 * b) / 255 > 0.62; +} + +function escapeHtml(value) { + return String(value) + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """); +} + +function fieldColor(model, fieldKey, label) { + const field = model.BARRIER_STACK_FIELDS.find((f) => f.key === fieldKey); + const option = field?.options.find((o) => o.label === label); + return option?.color; +} + +function addStack(model, barrier, rows) { + barrier.stack = rows.map(([field, label]) => + model.createBarrierStackItem(label, field, fieldColor(model, field, label)) + ); + model.sortBarrierStack?.(barrier.stack); + barrier.stackCollapsed = false; +} + +// Representative cold-storage ammonia scenario (matches the docs example). +function buildHeroBowtie(model) { + const bt = model.createBowtie("Cold storage ammonia — LOPC"); + bt.events[0].label = "Loss of primary containment"; + bt.events[0].hazard = "Pressurised anhydrous ammonia"; + + const mi = model.createBarrier("Mechanical integrity inspection"); + addStack(model, mi, [ + ["type", "Active Hardware"], + ["effectiveness", "Good"], + ["criticality", "Very High"], + ]); + const chain = model.createDegradationChain("Deferred inspection"); + chain.safeguards = [model.createEscalationNode("QA audit of MI backlog")]; + mi.degradationChains = [chain]; + + const corrosion = model.createThreat("Corrosion / fatigue of piping"); + corrosion.preventionBarriers = [mi, model.createBarrier("Material selection standards")]; + + const impact = model.createThreat("Forklift impact on pipework"); + impact.preventionBarriers = [model.createBarrier("Physical protection & traffic segregation")]; + + const maint = model.createThreat("Maintenance isolation error"); + maint.preventionBarriers = [model.createBarrier("Permit-to-work and LOTO")]; + + bt.threats = [corrosion, impact, maint]; + + const toxic = model.createConsequence("Toxic exposure to personnel"); + const detect = model.createBarrier("Fixed gas detection & alarm"); + addStack(model, detect, [ + ["type", "Active Hardware+Human"], + ["status", "Available"], + ]); + toxic.mitigationBarriers = [detect, model.createBarrier("Emergency ventilation & isolation")]; + + const env = model.createConsequence("Environmental release"); + env.mitigationBarriers = [model.createBarrier("Containment sump & dilution")]; + + const biz = model.createConsequence("Business interruption"); + biz.mitigationBarriers = [model.createBarrier("Emergency response plan")]; + + bt.consequences = [toxic, env, biz]; + return bt; +} + +// Minimal scenario that showcases a single barrier's analysis stack + escalation. +function buildBarrierBowtie(model) { + const bt = model.createBowtie("Barrier analysis"); + bt.events[0].label = "Loss of containment"; + bt.events[0].hazard = "Pressurised ammonia"; + + const mi = model.createBarrier("Mechanical integrity inspection"); + addStack(model, mi, [ + ["type", "Active Hardware"], + ["effectiveness", "Good"], + ["criticality", "Very High"], + ["responsible", "Tech Department"], + ["validation", "Inspection"], + ["status", "Available"], + ]); + const chain = model.createDegradationChain("Deferred inspection"); + chain.safeguards = [model.createEscalationNode("QA audit of MI backlog")]; + mi.degradationChains = [chain]; + + const threat = model.createThreat("Corrosion / fatigue"); + threat.preventionBarriers = [mi]; + bt.threats = [threat]; + bt.consequences = [model.createConsequence("Toxic release")]; + return bt; +} + +function renderNodeHtml(node, barriersById) { + const wrapStyle = `left:${node.x}px;top:${node.y}px;width:${node.width}px;height:${node.height}px`; + const inner = renderNodeInner(node, barriersById); + return `

${inner}
`; +} + +function renderNodeInner(node, barriersById) { + const subtitle = escapeHtml(node.subtitle); + const label = escapeHtml(node.label); + + if (node.kind === "topEvent") { + return ( + `
` + + `
${label}
` + + `
${subtitle}
` + ); + } + + const isBarrier = + node.kind === "preventionBarrier" || + node.kind === "mitigationBarrier" || + node.kind === "transitionBarrier"; + + if (isBarrier) { + const barrier = barriersById.get(node.ref.barrierId); + const headerH = barrierHeaderHeight(barrier); + let html = `
`; + html += `
`; + html += `
${subtitle}
`; + html += `
${label}
`; + html += `
`; + const stack = barrier?.stack ?? []; + if (stack.length > 0 && barrier?.stackCollapsed === false) { + html += `
`; + for (const item of stack) { + const classes = ["o-tie-stack-row"]; + if (item.field) classes.push("o-tie-stack-row-preset"); + const style = [`height:${ROW_H}px`]; + if (item.color) { + style.push(`background-color:${item.color}`); + if (isLightStackColor(item.color)) classes.push("o-tie-stack-row-light"); + } + html += `
`; + html += `
${escapeHtml(item.label)}
`; + } + html += `
`; + } + html += `
`; + return html; + } + + return ( + `
` + + `
${subtitle}
` + + `
${label}
` + ); +} + +function renderEdgesSvg(layout) { + const size = 8; + let svg = ``; + for (const edge of layout.edges) { + svg += ``; + } + for (const edge of layout.edges) { + const { x, y, angleDeg } = edge.arrow; + svg += ``; + svg += ``; + } + svg += ``; + return svg; +} + +function pageHtml(layout, barriersById) { + const nodes = layout.nodes.map((n) => renderNodeHtml(n, barriersById)).join(""); + return ` +
+ ${renderEdgesSvg(layout)} +
${nodes}
+
+ `; +} + +// Header height calculator captured from the engine at runtime. +let barrierHeaderHeight = () => 52; +let ROW_H = 24; + +function indexBarriers(bowtie) { + const map = new Map(); + const add = (b) => map.set(b.id, b); + for (const e of bowtie.events) e.transitionBarriers.forEach(add); + for (const t of bowtie.threats) t.preventionBarriers.forEach(add); + for (const c of bowtie.consequences) c.mitigationBarriers.forEach(add); + return map; +} + +async function capture(page, engine, bowtie, outFile) { + const layout = engine.layoutBowtie(bowtie, engine.DEFAULT_LAYOUT); + ROW_H = engine.DEFAULT_LAYOUT.barrierStackRowHeight; + barrierHeaderHeight = (barrier) => + barrier ? engine.barrierHeaderHeightFor(barrier, engine.DEFAULT_LAYOUT) : engine.DEFAULT_LAYOUT.barrierHeaderHeight; + const barriersById = indexBarriers(bowtie); + await page.setContent(pageHtml(layout, barriersById), { waitUntil: "networkidle" }); + const frame = page.locator(".shot-frame"); + await frame.screenshot({ path: outFile }); + console.log(`Wrote ${outFile}`); +} + +async function main() { + mkdirSync(assetsDir, { recursive: true }); + const engine = await loadEngine(); + const browser = await chromium.launch(); + const page = await browser.newPage({ deviceScaleFactor: 2 }); + try { + await capture(page, engine, buildHeroBowtie(engine.model), join(assetsDir, "screenshot-diagram.png")); + await capture(page, engine, buildBarrierBowtie(engine.model), join(assetsDir, "screenshot-barrier.png")); + } finally { + await browser.close(); + } +} + +main().catch((err) => { + console.error(err); + process.exit(1); +}); diff --git a/src/bowtieView.ts b/src/bowtieView.ts index 4ecd0c5..9064486 100644 --- a/src/bowtieView.ts +++ b/src/bowtieView.ts @@ -1,4 +1,4 @@ -import { Menu, Notice, Platform, TextFileView, TFile, WorkspaceLeaf, setIcon } from "obsidian"; +import { Menu, Notice, Platform, TextFileView, WorkspaceLeaf, setIcon } from "obsidian"; import { ExportImageModal } from "./exportImageModal"; import { HelpModal } from "./helpModal"; import type { BowtieExportViewport } from "./exportImage"; @@ -22,7 +22,6 @@ import { BOWTIE_VIEW_TYPE, createBarrier, createBarrierStackItem, - cloneBowtie, createBowtie, createConsequence, createDegradationChain, @@ -37,52 +36,11 @@ import { serializeBowtie, sortBarrierStack, touchBowtie, - bowtieStructureSignature, } from "./model"; - -const STACK_ROW_COLOR_OPTIONS: { color: string; label: string }[] = [ - { color: "#5dade2", label: "Sky blue" }, - { color: "#3498db", label: "Blue" }, - { color: "#48c9b0", label: "Teal" }, - { color: "#1abc9c", label: "Mint" }, - { color: "#7f8c8d", label: "Gray" }, - { color: "#1e8449", label: "Dark green" }, - { color: "#27ae60", label: "Green" }, - { color: "#f1c40f", label: "Yellow" }, - { color: "#e67e22", label: "Orange" }, - { color: "#c0392b", label: "Red" }, - { color: "#2c3e50", label: "Navy" }, - { color: "#566573", label: "Slate" }, - { color: "#ffffff", label: "White" }, - { color: "#f4ecf7", label: "Light purple" }, - { color: "#eafaf1", label: "Light green" }, -]; - -const LIGHT_STACK_ROW_COLORS = new Set(["#ffffff", "#f4ecf7", "#eafaf1"]); - -function isLightStackColor(color: string): boolean { - if (LIGHT_STACK_ROW_COLORS.has(color)) return true; - const match = /^#([0-9a-f]{6})$/i.exec(color); - if (!match) return false; - const n = parseInt(match[1], 16); - const r = (n >> 16) & 0xff; - const g = (n >> 8) & 0xff; - const b = n & 0xff; - const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255; - return luminance > 0.62; -} - -function createColorMenuTitle(color: string, label: string): DocumentFragment { - const frag = activeDocument.createDocumentFragment(); - const wrap = frag.createEl("span", { cls: "o-tie-color-menu-title" }); - const swatch = wrap.createEl("span", { cls: "o-tie-color-swatch" }); - swatch.setCssStyles({ backgroundColor: color }); - if (LIGHT_STACK_ROW_COLORS.has(color)) { - swatch.addClass("o-tie-color-swatch-light"); - } - wrap.createEl("span", { cls: "o-tie-color-menu-label", text: label }); - return frag; -} +import { ExternalSync } from "./externalSync"; +import { BowtieHistory } from "./history"; +import { computeFit, computeZoomAt, normalizeWheelDelta, wheelFactorFromDelta } from "./panZoom"; +import { STACK_ROW_COLOR_OPTIONS, createColorMenuTitle, isLightStackColor } from "./stackRows"; export { BOWTIE_VIEW_TYPE }; @@ -105,6 +63,9 @@ export class BowtieView extends TextFileView { private panPointerId: number | null = null; private activePointers = new Map(); private pinchLastDistance: number | null = null; + private gestureMoved = false; + private panStartedOnNode = false; + private suppressNextClick = false; private saveTimeout: number | null = null; private viewSaveTimeout: number | null = null; private viewShellReady = false; @@ -125,14 +86,13 @@ export class BowtieView extends TextFileView { private toolbarCollapsed = false; private undoBtn: HTMLButtonElement | null = null; private redoBtn: HTMLButtonElement | null = null; - private undoStack: Bowtie[] = []; - private redoStack: Bowtie[] = []; - private undoSelectionStack: (NodeRef | null)[] = []; - private redoSelectionStack: (NodeRef | null)[] = []; + private history = new BowtieHistory(BowtieView.MAX_UNDO); private isRestoringHistory = false; private static readonly MAX_UNDO = 50; private static readonly GRID_SIZE = 20; private stackCollapseBackup: Map | null = null; + private loadError = false; + private rawData: string | null = null; private get useCssZoom(): boolean { // CSS zoom distorts border-radius on child buttons in mobile WebKit. @@ -166,6 +126,11 @@ export class BowtieView extends TextFileView { } getViewData(): string { + // Preserve the original bytes of a file we could not parse so autosave + // never overwrites a malformed (but potentially recoverable) file. + if (this.loadError && this.rawData !== null) { + return this.rawData; + } return serializeBowtie(this.bowtie); } @@ -173,8 +138,15 @@ export class BowtieView extends TextFileView { if (clear) this.clear(); try { this.bowtie = deserializeBowtie(data); + this.loadError = false; + this.rawData = null; } catch { + this.loadError = true; + this.rawData = data; this.bowtie = createBowtie("Untitled"); + new Notice( + "Could not read this .bowtie file — it may be malformed. The file has not been changed; editing here will overwrite it." + ); } this.resetHistory(); this.render(); @@ -188,6 +160,8 @@ export class BowtieView extends TextFileView { this.toolbarTitleEl = null; this.undoBtn = null; this.redoBtn = null; + this.loadError = false; + this.rawData = null; this.resetHistory(); } @@ -235,29 +209,22 @@ export class BowtieView extends TextFileView { } private resetHistory(): void { - this.undoStack = []; - this.redoStack = []; - this.undoSelectionStack = []; - this.redoSelectionStack = []; + this.history.reset(); this.updateUndoRedoButtons(); } private commitEdit(): void { if (this.isRestoringHistory) return; - this.undoStack.push(cloneBowtie(this.bowtie)); - this.undoSelectionStack.push(this.selectedRef ? { ...this.selectedRef } : null); - if (this.undoStack.length > BowtieView.MAX_UNDO) { - this.undoStack.shift(); - this.undoSelectionStack.shift(); - } - this.redoStack = []; - this.redoSelectionStack = []; + // A deliberate user edit takes ownership of the file; allow saves again. + this.loadError = false; + this.rawData = null; + this.history.record(this.bowtie, this.selectedRef); this.updateUndoRedoButtons(); } private updateUndoRedoButtons(): void { - if (this.undoBtn) this.undoBtn.disabled = this.undoStack.length === 0; - if (this.redoBtn) this.redoBtn.disabled = this.redoStack.length === 0; + if (this.undoBtn) this.undoBtn.disabled = !this.history.canUndo; + if (this.redoBtn) this.redoBtn.disabled = !this.history.canRedo; } private nodeRefExists(ref: NodeRef): boolean { @@ -294,21 +261,15 @@ export class BowtieView extends TextFileView { } private undo(): void { - if (this.undoStack.length === 0) return; - this.redoStack.push(cloneBowtie(this.bowtie)); - this.redoSelectionStack.push(this.selectedRef ? { ...this.selectedRef } : null); - const snapshot = this.undoStack.pop()!; - const selectedRef = this.undoSelectionStack.pop() ?? null; - this.restoreHistorySnapshot(snapshot, selectedRef); + const snapshot = this.history.undo(this.bowtie, this.selectedRef); + if (!snapshot) return; + this.restoreHistorySnapshot(snapshot.bowtie, snapshot.selection); } private redo(): void { - if (this.redoStack.length === 0) return; - this.undoStack.push(cloneBowtie(this.bowtie)); - this.undoSelectionStack.push(this.selectedRef ? { ...this.selectedRef } : null); - const snapshot = this.redoStack.pop()!; - const selectedRef = this.redoSelectionStack.pop() ?? null; - this.restoreHistorySnapshot(snapshot, selectedRef); + const snapshot = this.history.redo(this.bowtie, this.selectedRef); + if (!snapshot) return; + this.restoreHistorySnapshot(snapshot.bowtie, snapshot.selection); } private render(): void { @@ -392,10 +353,10 @@ export class BowtieView extends TextFileView { this.toolbarActionsEl.createDiv({ cls: "o-tie-toolbar-separator" }); const addGroup = this.toolbarActionsEl.createDiv({ cls: "o-tie-toolbar-group" }); - this.createToolbarBtn(addGroup, "+ Threat", () => this.addThreat(), { primary: true }); - this.createToolbarBtn(addGroup, "+ Consequence", () => this.addConsequence(), { primary: true }); - this.createToolbarBtn(addGroup, "+ Event", () => this.addTopEvent(), { primary: true }); - this.createToolbarBtn(addGroup, "+ Barrier", () => this.addBarrierToSelection()); + this.createToolbarBtn(addGroup, "+ threat", () => this.addThreat(), { primary: true }); + this.createToolbarBtn(addGroup, "+ consequence", () => this.addConsequence(), { primary: true }); + this.createToolbarBtn(addGroup, "+ event", () => this.addTopEvent(), { primary: true }); + this.createToolbarBtn(addGroup, "+ barrier", () => this.addBarrierToSelection()); this.toolbarActionsEl.createDiv({ cls: "o-tie-toolbar-separator" }); @@ -524,7 +485,7 @@ export class BowtieView extends TextFileView { this.selectedRef.kind === "mitigationBarrier" || this.selectedRef.kind === "transitionBarrier" ) { - const stackBtn = actions.createEl("button", { text: "+ Stack row", cls: "mod-small" }); + const stackBtn = actions.createEl("button", { text: "+ stack row", cls: "mod-small" }); stackBtn.addEventListener("click", (e) => { const rect = stackBtn.getBoundingClientRect(); this.showAddStackRowMenu( @@ -539,7 +500,7 @@ export class BowtieView extends TextFileView { } if (this.selectedRef.kind === "degradationFactor") { - const sgBtn = actions.createEl("button", { text: "+ Safeguard", cls: "mod-small" }); + const sgBtn = actions.createEl("button", { text: "+ safeguard", cls: "mod-small" }); sgBtn.addEventListener("click", () => { this.addSafeguard(this.selectedRef!); }); @@ -549,7 +510,7 @@ export class BowtieView extends TextFileView { const eventIndex = this.bowtie.events.findIndex((e) => e.id === this.selectedRef!.eventId); if (eventIndex >= 0 && eventIndex < this.bowtie.events.length - 1) { const barBtn = actions.createEl("button", { - text: "+ Barrier to next event", + text: "+ barrier to next event", cls: "mod-cta mod-small", }); barBtn.addEventListener("click", () => { @@ -559,14 +520,14 @@ export class BowtieView extends TextFileView { } if (this.selectedRef.kind === "threat") { - const barBtn = actions.createEl("button", { text: "+ Prevention Barrier", cls: "mod-cta mod-small" }); + const barBtn = actions.createEl("button", { text: "+ prevention barrier", cls: "mod-cta mod-small" }); barBtn.addEventListener("click", () => { this.addPreventionBarrier(this.selectedRef!.threatId!); }); } if (this.selectedRef.kind === "consequence") { - const barBtn = actions.createEl("button", { text: "+ Mitigation Barrier", cls: "mod-cta mod-small" }); + const barBtn = actions.createEl("button", { text: "+ mitigation barrier", cls: "mod-cta mod-small" }); barBtn.addEventListener("click", () => { this.addMitigationBarrier(this.selectedRef!.consequenceId!); }); @@ -593,7 +554,7 @@ export class BowtieView extends TextFileView { }); this.svgEl.setAttribute("width", String(layout.bounds.width)); this.svgEl.setAttribute("height", String(layout.bounds.height)); - this.svgEl.innerHTML = ""; + this.svgEl.replaceChildren(); for (const edge of layout.edges) { const path = activeDocument.createElementNS("http://www.w3.org/2000/svg", "path"); @@ -632,6 +593,28 @@ export class BowtieView extends TextFileView { this.svgEl.appendChild(group); } + private selectNodeElement(ref: NodeRef, wrap: HTMLElement): void { + this.selectedRef = ref; + this.renderInspector(); + this.nodesEl.querySelectorAll(".o-tie-node-wrap").forEach((n) => { + n.removeClass("o-tie-node-selected"); + n.setAttribute("aria-pressed", "false"); + }); + wrap.addClass("o-tie-node-selected"); + wrap.setAttribute("aria-pressed", "true"); + this.updateOverlayVisibility(); + } + + private clearSelection(): void { + this.selectedRef = null; + this.renderInspector(); + this.nodesEl.querySelectorAll(".o-tie-node-wrap").forEach((n) => { + n.removeClass("o-tie-node-selected"); + n.setAttribute("aria-pressed", "false"); + }); + this.updateOverlayVisibility(); + } + private renderNode(node: PositionedNode): void { const wrap = this.nodesEl.createDiv({ cls: `o-tie-node-wrap o-tie-node-wrap-${node.kind}`, @@ -812,14 +795,28 @@ export class BowtieView extends TextFileView { } } + wrap.tabIndex = 0; + wrap.setAttribute("role", "button"); + wrap.setAttribute("aria-label", node.label?.trim() ? `${node.subtitle}: ${node.label}` : node.subtitle); + wrap.setAttribute("aria-pressed", this.isNodeSelected(node.ref) ? "true" : "false"); + wrap.addEventListener("click", (e) => { if ((e.target as HTMLElement).closest("button, [role='button']")) return; e.stopPropagation(); - this.selectedRef = node.ref; - this.renderInspector(); - this.nodesEl.querySelectorAll(".o-tie-node-wrap").forEach((n) => n.removeClass("o-tie-node-selected")); - wrap.addClass("o-tie-node-selected"); - this.updateOverlayVisibility(); + this.selectNodeElement(node.ref, wrap); + }); + + wrap.addEventListener("keydown", (e) => { + if (e.target !== wrap) return; + if (e.key === "Enter" || e.key === " ") { + e.preventDefault(); + e.stopPropagation(); + this.selectNodeElement(node.ref, wrap); + } else if (e.key === "Escape") { + e.stopPropagation(); + this.clearSelection(); + wrap.blur(); + } }); if (!isBarrier) { @@ -1324,10 +1321,19 @@ export class BowtieView extends TextFileView { this.containerEl_, "pointerdown", (e) => { + // A click only ever follows immediately after the previous pointerup; + // clear any stale suppression flag at the start of a new gesture. + this.suppressNextClick = false; const target = e.target as HTMLElement; - if (!this.isPanZoomTarget(target)) return; + const isTouch = e.pointerType === "touch" || e.pointerType === "pen"; + const onEmptyCanvas = this.isPanZoomTarget(target); + // On touch/pen, let a single-finger drag pan from anywhere on the + // canvas (including on top of a node), as long as the finger isn't on + // an interactive control. A tap still selects the node (see pointerup). + const fromNode = isTouch && !onEmptyCanvas && !this.isInteractiveControl(target); + if (!onEmptyCanvas && !fromNode) return; - if (e.pointerType === "touch" || e.pointerType === "pen") { + if (isTouch && onEmptyCanvas) { e.preventDefault(); e.stopPropagation(); } @@ -1343,6 +1349,8 @@ export class BowtieView extends TextFileView { if (this.activePointers.size === 1) { this.panPointerId = e.pointerId; this.pinchLastDistance = null; + this.gestureMoved = false; + this.panStartedOnNode = fromNode; this.containerEl_.setPointerCapture(e.pointerId); this.startPan(e.clientX, e.clientY); } @@ -1388,6 +1396,12 @@ export class BowtieView extends TextFileView { } if (e.pointerId === this.panPointerId) { + // A drag that began on a node must not also fire the node's tap-select + // click. A pure tap (no movement) falls through and selects normally. + if (this.gestureMoved && this.panStartedOnNode) { + this.suppressNextClick = true; + } + this.panStartedOnNode = false; this.endPan(); } @@ -1458,19 +1472,29 @@ export class BowtieView extends TextFileView { const dy = this.wheelDeltaAccum; this.wheelDeltaAccum = 0; if (Math.abs(dy) < 0.01) return; - const factor = this.wheelFactorFromDelta(dy, this.wheelCtrlKey); + const factor = wheelFactorFromDelta(dy, this.wheelCtrlKey); this.zoomAt(this.wheelClient.x, this.wheelClient.y, factor); }); }, { passive: false } ); + this.registerDomEvent( + this.containerEl_, + "click", + (e) => { + if (this.suppressNextClick) { + this.suppressNextClick = false; + e.stopPropagation(); + e.preventDefault(); + } + }, + { capture: true } + ); + this.registerDomEvent(this.containerEl_, "click", (e) => { if ((e.target as HTMLElement).closest(".o-tie-node-wrap")) return; - this.selectedRef = null; - this.renderInspector(); - this.nodesEl.querySelectorAll(".o-tie-node-wrap").forEach((n) => n.removeClass("o-tie-node-selected")); - this.updateOverlayVisibility(); + this.clearSelection(); }); this.registerDomEvent(activeDocument, "keydown", (e) => { @@ -1503,22 +1527,12 @@ export class BowtieView extends TextFileView { } private normalizeWheelDelta(e: WheelEvent): number { - let dy = e.deltaY; - if (e.deltaMode === WheelEvent.DOM_DELTA_LINE) { - dy *= 16; - } else if (e.deltaMode === WheelEvent.DOM_DELTA_PAGE) { - dy *= this.containerEl_.clientHeight || window.innerHeight; - } - return dy; - } - - private wheelFactorFromDelta(deltaY: number, ctrlKey: boolean): number { - // Gentler zoom: ~5% per mouse-wheel notch, smooth trackpad pinch. - const sensitivity = ctrlKey ? 0.0012 : 0.00045; - const factor = Math.exp(-deltaY * sensitivity); - const maxStep = ctrlKey ? 1.08 : 1.06; - const minStep = 1 / maxStep; - return Math.max(minStep, Math.min(maxStep, factor)); + return normalizeWheelDelta( + e.deltaY, + e.deltaMode, + 16, + this.containerEl_.clientHeight || window.innerHeight + ); } private applyTransform(): void { @@ -1564,35 +1578,17 @@ export class BowtieView extends TextFileView { if (this.externalSyncReady) return; this.externalSyncReady = true; - this.registerEvent( - this.app.vault.on("modify", (file) => { - if (!(file instanceof TFile) || file !== this.file) return; - if (Date.now() - this.lastSelfSaveAt < 3000) return; - void this.handleExternalFileChange(file); - }) - ); - } - - private async handleExternalFileChange(file: TFile): Promise { - const disk = await this.app.vault.read(file); - if (disk === this.data || disk === this.getViewData()) return; - - let diskBowtie: Bowtie; - let localBowtie: Bowtie; - try { - diskBowtie = deserializeBowtie(disk); - localBowtie = this.bowtie; - } catch { - return; - } - - if (bowtieStructureSignature(diskBowtie) === bowtieStructureSignature(localBowtie)) { - return; - } - - if (this.saveTimeout !== null) return; - - this.setViewData(disk, false); + new ExternalSync({ + app: this.app, + getFile: () => this.file, + getLocalBowtie: () => this.bowtie, + getViewData: () => this.getViewData(), + getLocalData: () => this.data, + hasPendingSave: () => this.saveTimeout !== null, + getLastSelfSaveAt: () => this.lastSelfSaveAt, + applyDiskData: (disk) => this.setViewData(disk, false), + registerEvent: (ref) => this.registerEvent(ref), + }).start(); } private worldToScreen(wx: number, wy: number): { x: number; y: number } { @@ -1727,9 +1723,8 @@ export class BowtieView extends TextFileView { e.stopPropagation(); } - private isPanZoomTarget(target: HTMLElement): boolean { - return !( - target.closest(".o-tie-node-wrap") || + private isInteractiveControl(target: HTMLElement): boolean { + return !!( target.closest(".o-tie-controls-overlay") || target.closest(".o-tie-lane-add") || target.closest("button") || @@ -1737,6 +1732,10 @@ export class BowtieView extends TextFileView { ); } + private isPanZoomTarget(target: HTMLElement): boolean { + return !(target.closest(".o-tie-node-wrap") || this.isInteractiveControl(target)); + } + private blockCanvasGesture(e: Event): void { e.stopPropagation(); if (e.cancelable) e.preventDefault(); @@ -1757,6 +1756,7 @@ export class BowtieView extends TextFileView { if (!this.isPanning) return; const dx = clientX - this.panStart.x; const dy = clientY - this.panStart.y; + if (!this.gestureMoved && Math.hypot(dx, dy) > 6) this.gestureMoved = true; if (!this.bowtie.view) this.bowtie.view = { zoom: 1, panX: 0, panY: 0 }; this.bowtie.view.panX = this.panOrigin.x + dx; this.bowtie.view.panY = this.panOrigin.y + dy; @@ -1804,17 +1804,9 @@ export class BowtieView extends TextFileView { private zoomAt(clientX: number, clientY: number, factor: number): void { if (!this.bowtie.view) this.bowtie.view = { zoom: 1, panX: 0, panY: 0 }; const rect = this.containerEl_.getBoundingClientRect(); - const mx = clientX - rect.left; - const my = clientY - rect.top; - const oldZoom = this.bowtie.view.zoom; - const newZoom = Math.min(3, Math.max(0.2, oldZoom * factor)); - if (newZoom === oldZoom) return; - - const worldX = (mx - this.bowtie.view.panX) / oldZoom; - const worldY = (my - this.bowtie.view.panY) / oldZoom; - this.bowtie.view.zoom = newZoom; - this.bowtie.view.panX = mx - worldX * newZoom; - this.bowtie.view.panY = my - worldY * newZoom; + const next = computeZoomAt(this.bowtie.view, clientX - rect.left, clientY - rect.top, factor); + if (!next) return; + this.bowtie.view = next; this.applyTransform(); this.scheduleViewSave(); } @@ -1904,18 +1896,13 @@ export class BowtieView extends TextFileView { const rect = this.containerEl_.getBoundingClientRect(); if (rect.width === 0 || rect.height === 0) return; - const padding = 40; - const scaleX = (rect.width - padding * 2) / layout.bounds.width; - const scaleY = (rect.height - padding * 2) / layout.bounds.height; - const zoom = Math.min(1.2, Math.max(0.3, Math.min(scaleX, scaleY))); - - const panX = (rect.width - layout.bounds.width * zoom) / 2; - const panY = (rect.height - layout.bounds.height * zoom) / 2; - - if (!this.bowtie.view) this.bowtie.view = { zoom: 1, panX: 0, panY: 0 }; - this.bowtie.view.zoom = zoom; - this.bowtie.view.panX = panX; - this.bowtie.view.panY = panY; + this.bowtie.view = computeFit( + layout.bounds.width, + layout.bounds.height, + rect.width, + rect.height, + 40 + ); this.applyTransform(); if (animate) this.scheduleViewSave(); } @@ -2255,14 +2242,14 @@ export class BowtieView extends TextFileView { private getNodeSubtitle(ref: NodeRef): string { const map: Record = { hazard: "Hazard", - topEvent: "Top Event", + topEvent: "Top event", threat: "Threat", consequence: "Consequence", - preventionBarrier: "Prevention Barrier", - mitigationBarrier: "Mitigation Barrier", + preventionBarrier: "Prevention barrier", + mitigationBarrier: "Mitigation barrier", transitionBarrier: "Barrier", safeguard: "Safeguard", - degradationFactor: "Degradation Factor", + degradationFactor: "Degradation factor", }; return map[ref.kind] ?? ref.kind; } diff --git a/src/editorModal.ts b/src/editorModal.ts index ccb7876..0114ca1 100644 --- a/src/editorModal.ts +++ b/src/editorModal.ts @@ -11,13 +11,13 @@ export class NewBowtieNameModal extends Modal { onOpen(): void { const { contentEl, modalEl } = this; modalEl.addClass("o-tie-modal"); - contentEl.createEl("h2", { text: "Create New Bowtie" }); + contentEl.createEl("h2", { text: "Create new bowtie" }); new Setting(contentEl) .setName("Bowtie name") .setDesc("Used for the file name and diagram title") .addText((text) => { - text.setPlaceholder("e.g. Defective Steamcracker"); + text.setPlaceholder("E.g. Defective steamcracker"); text.inputEl.addEventListener("keydown", (e) => { if (e.key === "Enter") this.submit(text.getValue()); }); diff --git a/src/externalSync.ts b/src/externalSync.ts new file mode 100644 index 0000000..01c1f98 --- /dev/null +++ b/src/externalSync.ts @@ -0,0 +1,56 @@ +import { App, type EventRef, TFile } from "obsidian"; +import { type Bowtie, bowtieStructureSignature, deserializeBowtie } from "./model"; + +export interface ExternalSyncHost { + app: App; + getFile: () => TFile | null; + getLocalBowtie: () => Bowtie; + getViewData: () => string; + getLocalData: () => string; + hasPendingSave: () => boolean; + getLastSelfSaveAt: () => number; + applyDiskData: (disk: string) => void; + registerEvent: (ref: EventRef) => void; +} + +/** + * Reloads the view when the underlying .bowtie file changes on disk (e.g. via + * Obsidian Sync), but only when the change is genuinely external and there are + * no unsaved local edits. + */ +export class ExternalSync { + private started = false; + + constructor(private readonly host: ExternalSyncHost) {} + + start(): void { + if (this.started) return; + this.started = true; + this.host.registerEvent( + this.host.app.vault.on("modify", (file) => { + if (!(file instanceof TFile) || file !== this.host.getFile()) return; + if (Date.now() - this.host.getLastSelfSaveAt() < 3000) return; + void this.handle(file); + }) + ); + } + + private async handle(file: TFile): Promise { + const disk = await this.host.app.vault.read(file); + if (disk === this.host.getLocalData() || disk === this.host.getViewData()) return; + + let diskBowtie: Bowtie; + try { + diskBowtie = deserializeBowtie(disk); + } catch { + return; + } + + if (bowtieStructureSignature(diskBowtie) === bowtieStructureSignature(this.host.getLocalBowtie())) { + return; + } + if (this.host.hasPendingSave()) return; + + this.host.applyDiskData(disk); + } +} diff --git a/src/helpModal.ts b/src/helpModal.ts index 554ef84..e16ab48 100644 --- a/src/helpModal.ts +++ b/src/helpModal.ts @@ -11,7 +11,7 @@ export class HelpModal extends Modal { onOpen(): void { const { contentEl, modalEl } = this; modalEl.addClass("o-tie-modal", "o-tie-help-modal"); - contentEl.createEl("h2", { text: "O-Tie Help" }); + contentEl.createEl("h2", { text: "Help" }); contentEl.createEl("p", { cls: "o-tie-help-version", diff --git a/src/history.ts b/src/history.ts new file mode 100644 index 0000000..f3b9cd7 --- /dev/null +++ b/src/history.ts @@ -0,0 +1,53 @@ +import { type Bowtie, cloneBowtie, type NodeRef } from "./model"; + +export interface BowtieSnapshot { + bowtie: Bowtie; + selection: NodeRef | null; +} + +function snapshot(bowtie: Bowtie, selection: NodeRef | null): BowtieSnapshot { + return { + bowtie: cloneBowtie(bowtie), + selection: selection ? { ...selection } : null, + }; +} + +/** Undo/redo stack of bowtie snapshots with the selection at edit time. */ +export class BowtieHistory { + private undoStack: BowtieSnapshot[] = []; + private redoStack: BowtieSnapshot[] = []; + + constructor(private readonly maxUndo = 50) {} + + reset(): void { + this.undoStack = []; + this.redoStack = []; + } + + get canUndo(): boolean { + return this.undoStack.length > 0; + } + + get canRedo(): boolean { + return this.redoStack.length > 0; + } + + /** Record the state immediately before an edit; clears the redo stack. */ + record(bowtie: Bowtie, selection: NodeRef | null): void { + this.undoStack.push(snapshot(bowtie, selection)); + if (this.undoStack.length > this.maxUndo) this.undoStack.shift(); + this.redoStack = []; + } + + undo(currentBowtie: Bowtie, currentSelection: NodeRef | null): BowtieSnapshot | null { + if (this.undoStack.length === 0) return null; + this.redoStack.push(snapshot(currentBowtie, currentSelection)); + return this.undoStack.pop() ?? null; + } + + redo(currentBowtie: Bowtie, currentSelection: NodeRef | null): BowtieSnapshot | null { + if (this.redoStack.length === 0) return null; + this.undoStack.push(snapshot(currentBowtie, currentSelection)); + return this.redoStack.pop() ?? null; + } +} diff --git a/src/panZoom.ts b/src/panZoom.ts new file mode 100644 index 0000000..b63f224 --- /dev/null +++ b/src/panZoom.ts @@ -0,0 +1,72 @@ +import type { BowtieViewState } from "./model"; + +export const MIN_ZOOM = 0.2; +export const MAX_ZOOM = 3; +export const FIT_MIN_ZOOM = 0.3; +export const FIT_MAX_ZOOM = 1.2; + +export function clampZoom(zoom: number, min = MIN_ZOOM, max = MAX_ZOOM): number { + return Math.min(max, Math.max(min, zoom)); +} + +/** Normalize a wheel delta to pixels regardless of the browser's delta mode. */ +export function normalizeWheelDelta( + deltaY: number, + deltaMode: number, + lineHeight: number, + pageHeight: number +): number { + if (deltaMode === WheelEvent.DOM_DELTA_LINE) return deltaY * lineHeight; + if (deltaMode === WheelEvent.DOM_DELTA_PAGE) return deltaY * pageHeight; + return deltaY; +} + +/** Gentle zoom factor: ~5% per wheel notch, smoother for trackpad pinch (ctrl). */ +export function wheelFactorFromDelta(deltaY: number, ctrlKey: boolean): number { + const sensitivity = ctrlKey ? 0.0012 : 0.00045; + const factor = Math.exp(-deltaY * sensitivity); + const maxStep = ctrlKey ? 1.08 : 1.06; + const minStep = 1 / maxStep; + return Math.max(minStep, Math.min(maxStep, factor)); +} + +/** + * Zoom toward a point (in container-local coordinates) by a factor, keeping the + * world point under the cursor stable. Returns null when the zoom is unchanged. + */ +export function computeZoomAt( + view: BowtieViewState, + localX: number, + localY: number, + factor: number +): BowtieViewState | null { + const oldZoom = view.zoom; + const newZoom = clampZoom(oldZoom * factor); + if (newZoom === oldZoom) return null; + + const worldX = (localX - view.panX) / oldZoom; + const worldY = (localY - view.panY) / oldZoom; + return { + zoom: newZoom, + panX: localX - worldX * newZoom, + panY: localY - worldY * newZoom, + }; +} + +/** Center and scale a diagram of the given bounds inside a viewport rectangle. */ +export function computeFit( + boundsWidth: number, + boundsHeight: number, + rectWidth: number, + rectHeight: number, + padding: number +): BowtieViewState { + const scaleX = (rectWidth - padding * 2) / boundsWidth; + const scaleY = (rectHeight - padding * 2) / boundsHeight; + const zoom = Math.min(FIT_MAX_ZOOM, Math.max(FIT_MIN_ZOOM, Math.min(scaleX, scaleY))); + return { + zoom, + panX: (rectWidth - boundsWidth * zoom) / 2, + panY: (rectHeight - boundsHeight * zoom) / 2, + }; +} diff --git a/src/settingsTab.ts b/src/settingsTab.ts index eaddf95..5c3413b 100644 --- a/src/settingsTab.ts +++ b/src/settingsTab.ts @@ -42,68 +42,75 @@ export class OTieSettingTab extends PluginSettingTab { }) ); - new Setting(containerEl) - .setName("Column gap") - .setDesc("Horizontal spacing between bowtie columns (pixels)") - .addText((text) => - text - .setPlaceholder("120") - .setValue(String(this.plugin.settings.columnGap)) - .onChange(async (value) => { - const parsed = parseInt(value, 10); - if (!isNaN(parsed) && parsed > 0) { - this.plugin.settings.columnGap = parsed; - await this.plugin.saveSettings(); - } - }) - ); + this.addPixelSetting( + containerEl, + "Column gap", + "Horizontal spacing between bowtie columns (pixels)", + 120, + () => this.plugin.settings.columnGap, + (v) => (this.plugin.settings.columnGap = v) + ); - new Setting(containerEl) - .setName("Row gap") - .setDesc("Vertical spacing between threats/consequences (pixels)") - .addText((text) => - text - .setPlaceholder("40") - .setValue(String(this.plugin.settings.rowGap)) - .onChange(async (value) => { - const parsed = parseInt(value, 10); - if (!isNaN(parsed) && parsed > 0) { - this.plugin.settings.rowGap = parsed; - await this.plugin.saveSettings(); - } - }) - ); + this.addPixelSetting( + containerEl, + "Row gap", + "Vertical spacing between threats/consequences (pixels)", + 40, + () => this.plugin.settings.rowGap, + (v) => (this.plugin.settings.rowGap = v) + ); - new Setting(containerEl) - .setName("Node width") - .setDesc("Default width of bowtie nodes (pixels)") - .addText((text) => - text - .setPlaceholder("220") - .setValue(String(this.plugin.settings.nodeWidth)) - .onChange(async (value) => { - const parsed = parseInt(value, 10); - if (!isNaN(parsed) && parsed > 0) { - this.plugin.settings.nodeWidth = parsed; - await this.plugin.saveSettings(); - } - }) - ); + this.addPixelSetting( + containerEl, + "Node width", + "Default width of bowtie nodes (pixels)", + 220, + () => this.plugin.settings.nodeWidth, + (v) => (this.plugin.settings.nodeWidth = v) + ); + this.addPixelSetting( + containerEl, + "Node height", + "Default height of bowtie nodes (pixels)", + 80, + () => this.plugin.settings.nodeHeight, + (v) => (this.plugin.settings.nodeHeight = v) + ); + } + + private addPixelSetting( + containerEl: HTMLElement, + name: string, + desc: string, + placeholder: number, + get: () => number, + set: (value: number) => void + ): void { new Setting(containerEl) - .setName("Node height") - .setDesc("Default height of bowtie nodes (pixels)") - .addText((text) => + .setName(name) + .setDesc(desc) + .addText((text) => { text - .setPlaceholder("80") - .setValue(String(this.plugin.settings.nodeHeight)) + .setPlaceholder(String(placeholder)) + .setValue(String(get())) .onChange(async (value) => { - const parsed = parseInt(value, 10); - if (!isNaN(parsed) && parsed > 0) { - this.plugin.settings.nodeHeight = parsed; - await this.plugin.saveSettings(); + const parsed = Number(value.trim()); + const valid = Number.isFinite(parsed) && Number.isInteger(parsed) && parsed > 0 && parsed <= 2000; + text.inputEl.toggleClass("o-tie-setting-invalid", !valid); + text.inputEl.setAttribute("aria-invalid", valid ? "false" : "true"); + if (!valid) { + text.inputEl.title = "Enter a whole number of pixels between 1 and 2000"; + return; } - }) - ); + text.inputEl.title = ""; + set(parsed); + await this.plugin.saveSettings(); + }); + text.inputEl.type = "number"; + text.inputEl.inputMode = "numeric"; + text.inputEl.min = "1"; + text.inputEl.max = "2000"; + }); } } diff --git a/src/stackRows.ts b/src/stackRows.ts new file mode 100644 index 0000000..9572ef1 --- /dev/null +++ b/src/stackRows.ts @@ -0,0 +1,43 @@ +export const STACK_ROW_COLOR_OPTIONS: { color: string; label: string }[] = [ + { color: "#5dade2", label: "Sky blue" }, + { color: "#3498db", label: "Blue" }, + { color: "#48c9b0", label: "Teal" }, + { color: "#1abc9c", label: "Mint" }, + { color: "#7f8c8d", label: "Gray" }, + { color: "#1e8449", label: "Dark green" }, + { color: "#27ae60", label: "Green" }, + { color: "#f1c40f", label: "Yellow" }, + { color: "#e67e22", label: "Orange" }, + { color: "#c0392b", label: "Red" }, + { color: "#2c3e50", label: "Navy" }, + { color: "#566573", label: "Slate" }, + { color: "#ffffff", label: "White" }, + { color: "#f4ecf7", label: "Light purple" }, + { color: "#eafaf1", label: "Light green" }, +]; + +const LIGHT_STACK_ROW_COLORS = new Set(["#ffffff", "#f4ecf7", "#eafaf1"]); + +export function isLightStackColor(color: string): boolean { + if (LIGHT_STACK_ROW_COLORS.has(color)) return true; + const match = /^#([0-9a-f]{6})$/i.exec(color); + if (!match) return false; + const n = parseInt(match[1], 16); + const r = (n >> 16) & 0xff; + const g = (n >> 8) & 0xff; + const b = n & 0xff; + const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255; + return luminance > 0.62; +} + +export function createColorMenuTitle(color: string, label: string): DocumentFragment { + const frag = activeDocument.createDocumentFragment(); + const wrap = frag.createEl("span", { cls: "o-tie-color-menu-title" }); + const swatch = wrap.createEl("span", { cls: "o-tie-color-swatch" }); + swatch.setCssStyles({ backgroundColor: color }); + if (LIGHT_STACK_ROW_COLORS.has(color)) { + swatch.addClass("o-tie-color-swatch-light"); + } + wrap.createEl("span", { cls: "o-tie-color-menu-label", text: label }); + return frag; +} diff --git a/styles.css b/styles.css index 7d39132..19d08fd 100644 --- a/styles.css +++ b/styles.css @@ -1,3 +1,9 @@ +/* Settings */ +.o-tie-setting-invalid { + border-color: var(--text-error) !important; + box-shadow: 0 0 0 1px var(--text-error); +} + /* Modal (create bowtie) */ .o-tie-modal { max-width: 480px; diff --git a/tests/layout.test.ts b/tests/layout.test.ts new file mode 100644 index 0000000..bf6e36d --- /dev/null +++ b/tests/layout.test.ts @@ -0,0 +1,92 @@ +import { describe, expect, it } from "vitest"; +import { + bezierPointAt, + barrierHeaderHeightFor, + DEFAULT_LAYOUT, + layoutBowtie, + nodeBoxHeight, +} from "../src/layout"; +import { + createBarrier, + createBowtie, + createConsequence, + createThreat, + type Bowtie, +} from "../src/model"; + +function sample(): Bowtie { + const bt = createBowtie("Sample"); + bt.events[0].label = "Top event"; + bt.events[0].hazard = "Hazard"; + const threat = createThreat("Threat"); + threat.preventionBarriers = [createBarrier("Prevention")]; + bt.threats = [threat]; + const consequence = createConsequence("Consequence"); + consequence.mitigationBarriers = [createBarrier("Mitigation")]; + bt.consequences = [consequence]; + return bt; +} + +describe("nodeBoxHeight", () => { + it("respects the minimum height", () => { + expect(nodeBoxHeight("", 200, 72)).toBeGreaterThanOrEqual(72); + }); + + it("grows for longer labels that wrap", () => { + const short = nodeBoxHeight("Short", 120, 40); + const long = nodeBoxHeight( + "A very long barrier label that will certainly wrap across several lines in a narrow box", + 120, + 40 + ); + expect(long).toBeGreaterThan(short); + }); +}); + +describe("barrierHeaderHeightFor", () => { + it("is at least the configured header height", () => { + const barrier = createBarrier("B"); + expect(barrierHeaderHeightFor(barrier, DEFAULT_LAYOUT)).toBeGreaterThanOrEqual( + DEFAULT_LAYOUT.barrierHeaderHeight + ); + }); +}); + +describe("bezierPointAt", () => { + it("returns endpoints at t=0 and t=1", () => { + expect(bezierPointAt(0, 0, 100, 0, 0)).toEqual({ x: 0, y: 0 }); + expect(bezierPointAt(0, 0, 100, 0, 1)).toEqual({ x: 100, y: 0 }); + }); + + it("returns the midpoint x for a horizontal segment at t=0.5", () => { + const p = bezierPointAt(0, 0, 100, 0, 0.5); + expect(p.x).toBeCloseTo(50, 5); + expect(p.y).toBeCloseTo(0, 5); + }); +}); + +describe("layoutBowtie", () => { + it("produces nodes, edges, and positive bounds", () => { + const layout = layoutBowtie(sample(), DEFAULT_LAYOUT); + expect(layout.nodes.length).toBeGreaterThan(0); + expect(layout.edges.length).toBeGreaterThan(0); + expect(layout.bounds.width).toBeGreaterThan(0); + expect(layout.bounds.height).toBeGreaterThan(0); + }); + + it("places threat left of top event left of consequence", () => { + const layout = layoutBowtie(sample(), DEFAULT_LAYOUT); + const threat = layout.nodes.find((n) => n.kind === "threat")!; + const topEvent = layout.nodes.find((n) => n.kind === "topEvent")!; + const consequence = layout.nodes.find((n) => n.kind === "consequence")!; + expect(threat.x).toBeLessThan(topEvent.x); + expect(topEvent.x).toBeLessThan(consequence.x); + }); + + it("places the hazard above its top event", () => { + const layout = layoutBowtie(sample(), DEFAULT_LAYOUT); + const hazard = layout.nodes.find((n) => n.kind === "hazard")!; + const topEvent = layout.nodes.find((n) => n.kind === "topEvent")!; + expect(hazard.y).toBeLessThan(topEvent.y); + }); +}); diff --git a/tests/model.test.ts b/tests/model.test.ts new file mode 100644 index 0000000..4f4985f --- /dev/null +++ b/tests/model.test.ts @@ -0,0 +1,146 @@ +import { describe, expect, it } from "vitest"; +import { + bowtieStructureSignature, + cloneBowtie, + createBarrier, + createBowtie, + createConsequence, + createThreat, + deserializeBowtie, + serializeBowtie, + type Bowtie, +} from "../src/model"; + +function sampleBowtie(): Bowtie { + const bt = createBowtie("Sample"); + bt.events[0].label = "Loss of containment"; + bt.events[0].hazard = "High pressure"; + const threat = createThreat("Corrosion"); + threat.preventionBarriers = [createBarrier("Inspection")]; + bt.threats = [threat]; + bt.consequences = [createConsequence("Fire")]; + return bt; +} + +describe("createBowtie", () => { + it("creates a valid single-event bowtie", () => { + const bt = createBowtie("New"); + expect(bt.events).toHaveLength(1); + expect(bt.threats).toEqual([]); + expect(bt.consequences).toEqual([]); + expect(bt.id).toBeTruthy(); + }); +}); + +describe("serialize/deserialize", () => { + it("round-trips structure", () => { + const bt = sampleBowtie(); + const restored = deserializeBowtie(serializeBowtie(bt)); + expect(restored.name).toBe(bt.name); + expect(restored.events[0].label).toBe("Loss of containment"); + expect(restored.events[0].hazard).toBe("High pressure"); + expect(restored.threats[0].preventionBarriers[0].label).toBe("Inspection"); + expect(restored.consequences[0].label).toBe("Fire"); + }); + + it("adds a default view when missing", () => { + const bt = sampleBowtie(); + delete bt.view; + const restored = deserializeBowtie(serializeBowtie(bt)); + expect(restored.view).toEqual({ zoom: 1, panX: 0, panY: 0 }); + }); +}); + +describe("legacy migration", () => { + it("moves top-level hazard/topEvent into events", () => { + const legacy = JSON.stringify({ + id: "x", + name: "Legacy", + hazard: "Ethylene", + topEvent: "Loss of containment", + threats: [], + consequences: [], + }); + const bt = deserializeBowtie(legacy); + expect(bt.events).toHaveLength(1); + expect(bt.events[0].hazard).toBe("Ethylene"); + expect(bt.events[0].label).toBe("Loss of containment"); + expect((bt as Bowtie & { topEvent?: string }).topEvent).toBeUndefined(); + expect((bt as Bowtie & { hazard?: string }).hazard).toBeUndefined(); + }); + + it("converts barrier escalationFactors into degradationChains", () => { + const legacy = JSON.stringify({ + id: "x", + name: "Legacy", + hazard: "H", + topEvent: "T", + threats: [ + { + id: "t1", + label: "Threat", + preventionBarriers: [ + { + id: "b1", + label: "Barrier", + escalationFactors: [ + { + id: "ef1", + label: "Deferred inspection", + escalationBarriers: [{ id: "eb1", label: "Audit" }], + }, + ], + }, + ], + }, + ], + consequences: [], + }); + const bt = deserializeBowtie(legacy); + const barrier = bt.threats[0].preventionBarriers[0]; + expect(barrier.degradationChains).toHaveLength(1); + const chain = barrier.degradationChains[0]; + const labels = chain.safeguards.map((s) => s.label); + expect(labels).toContain("Deferred inspection"); + expect(labels).toContain("Audit"); + expect((barrier as { escalationFactors?: unknown }).escalationFactors).toBeUndefined(); + }); +}); + +describe("validation", () => { + it("throws when id or name is missing", () => { + expect(() => deserializeBowtie(JSON.stringify({ name: "x", events: [{}], threats: [], consequences: [] }))).toThrow(); + }); + + it("throws when threats/consequences are not arrays", () => { + expect(() => + deserializeBowtie(JSON.stringify({ id: "a", name: "b", events: [{ hazard: "" }], threats: {}, consequences: [] })) + ).toThrow(); + }); + + it("repairs an empty events array into a single event", () => { + const bt = deserializeBowtie( + JSON.stringify({ id: "a", name: "b", events: [], threats: [], consequences: [] }) + ); + expect(bt.events).toHaveLength(1); + expect(typeof bt.events[0].hazard).toBe("string"); + }); +}); + +describe("bowtieStructureSignature", () => { + it("ignores view and timestamps", () => { + const a = sampleBowtie(); + const b = cloneBowtie(a); + b.view = { zoom: 2, panX: 100, panY: 50 }; + b.updatedAt = "2099-01-01T00:00:00.000Z"; + b.createdAt = "2099-01-01T00:00:00.000Z"; + expect(bowtieStructureSignature(a)).toBe(bowtieStructureSignature(b)); + }); + + it("changes when content changes", () => { + const a = sampleBowtie(); + const b = cloneBowtie(a); + b.threats[0].label = "Different"; + expect(bowtieStructureSignature(a)).not.toBe(bowtieStructureSignature(b)); + }); +}); diff --git a/tests/panZoom.test.ts b/tests/panZoom.test.ts new file mode 100644 index 0000000..dd1f19f --- /dev/null +++ b/tests/panZoom.test.ts @@ -0,0 +1,58 @@ +import { describe, expect, it } from "vitest"; +import { + clampZoom, + computeFit, + computeZoomAt, + MAX_ZOOM, + MIN_ZOOM, + wheelFactorFromDelta, +} from "../src/panZoom"; + +describe("clampZoom", () => { + it("clamps to the configured range", () => { + expect(clampZoom(0.01)).toBe(MIN_ZOOM); + expect(clampZoom(99)).toBe(MAX_ZOOM); + expect(clampZoom(1)).toBe(1); + }); +}); + +describe("wheelFactorFromDelta", () => { + it("zooms in for negative delta and out for positive delta", () => { + expect(wheelFactorFromDelta(-100, false)).toBeGreaterThan(1); + expect(wheelFactorFromDelta(100, false)).toBeLessThan(1); + }); + + it("caps the per-notch step", () => { + expect(wheelFactorFromDelta(-100000, false)).toBeLessThanOrEqual(1.06); + expect(wheelFactorFromDelta(100000, true)).toBeGreaterThanOrEqual(1 / 1.08); + }); +}); + +describe("computeZoomAt", () => { + it("keeps the point under the cursor fixed", () => { + const view = { zoom: 1, panX: 0, panY: 0 }; + const next = computeZoomAt(view, 200, 100, 2)!; + expect(next.zoom).toBe(2); + // World point under (200,100) before zoom: (200,100). After zoom it must map back to (200,100). + const worldX = (200 - next.panX) / next.zoom; + const worldY = (100 - next.panY) / next.zoom; + expect(worldX).toBeCloseTo(200, 5); + expect(worldY).toBeCloseTo(100, 5); + }); + + it("returns null when clamped zoom does not change", () => { + const view = { zoom: MAX_ZOOM, panX: 0, panY: 0 }; + expect(computeZoomAt(view, 0, 0, 2)).toBeNull(); + }); +}); + +describe("computeFit", () => { + it("centers the diagram within the viewport", () => { + const fit = computeFit(400, 200, 1000, 600, 40); + expect(fit.zoom).toBeGreaterThan(0); + const renderedW = 400 * fit.zoom; + const renderedH = 200 * fit.zoom; + expect(fit.panX).toBeCloseTo((1000 - renderedW) / 2, 5); + expect(fit.panY).toBeCloseTo((600 - renderedH) / 2, 5); + }); +}); diff --git a/versions.json b/versions.json index 35fab51..9019aa6 100644 --- a/versions.json +++ b/versions.json @@ -6,5 +6,6 @@ "1.0.4": "1.4.0", "1.0.5": "1.4.0", "1.0.6": "1.4.0", - "1.0.7": "1.4.0" + "1.0.7": "1.4.0", + "1.0.8": "1.4.0" } \ No newline at end of file