markdown-design-doc-viewer-embed 1.5.0 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/index.js +93 -35
  2. package/package.json +1 -1
  3. package/viewer.css +6 -0
package/index.js CHANGED
@@ -25362,6 +25362,96 @@ function restorePlain(root, indexes) {
25362
25362
  });
25363
25363
  }
25364
25364
 
25365
+ // webview/splitter.ts
25366
+ var MIN_SPLIT = 20;
25367
+ var MAX_SPLIT = 80;
25368
+ function applySplit(el, percent) {
25369
+ if (percent === void 0 || !Number.isFinite(percent)) {
25370
+ el.style.removeProperty("--seqnotes-split");
25371
+ return void 0;
25372
+ }
25373
+ percent = Math.min(MAX_SPLIT, Math.max(MIN_SPLIT, percent));
25374
+ el.style.setProperty("--seqnotes-split", `${percent}%`);
25375
+ return percent;
25376
+ }
25377
+ var KEY_STEP = 5;
25378
+ function addSplitter(pair, title, onSplit, signal) {
25379
+ const splitter = document.createElement("div");
25380
+ splitter.className = "seqnotes-splitter";
25381
+ splitter.title = title;
25382
+ splitter.tabIndex = 0;
25383
+ splitter.setAttribute("role", "separator");
25384
+ splitter.setAttribute("aria-orientation", "vertical");
25385
+ splitter.setAttribute("aria-valuemin", String(MIN_SPLIT));
25386
+ splitter.setAttribute("aria-valuemax", String(MAX_SPLIT));
25387
+ const column = pair.querySelector(".seqnotes-seq-col");
25388
+ column?.after(splitter);
25389
+ const current = () => {
25390
+ const width = pair.getBoundingClientRect().width;
25391
+ return width > 0 && column ? column.getBoundingClientRect().width / width * 100 : 0;
25392
+ };
25393
+ const showValue = () => splitter.setAttribute("aria-valuenow", String(Math.round(current())));
25394
+ const split = (percent) => {
25395
+ onSplit(percent);
25396
+ showValue();
25397
+ };
25398
+ splitter.addEventListener(
25399
+ "pointerdown",
25400
+ (e) => {
25401
+ e.preventDefault();
25402
+ splitter.setPointerCapture(e.pointerId);
25403
+ const move = (ev) => {
25404
+ const r = pair.getBoundingClientRect();
25405
+ split((ev.clientX - r.left) / r.width * 100);
25406
+ };
25407
+ const end = () => {
25408
+ splitter.removeEventListener("pointermove", move);
25409
+ splitter.removeEventListener("lostpointercapture", end);
25410
+ };
25411
+ splitter.addEventListener("pointermove", move, { signal });
25412
+ splitter.addEventListener("lostpointercapture", end, { signal });
25413
+ },
25414
+ { signal }
25415
+ );
25416
+ splitter.addEventListener(
25417
+ "dblclick",
25418
+ (e) => {
25419
+ e.stopPropagation();
25420
+ split(void 0);
25421
+ },
25422
+ { signal }
25423
+ );
25424
+ splitter.addEventListener("focus", showValue, { signal });
25425
+ splitter.addEventListener(
25426
+ "keydown",
25427
+ (e) => {
25428
+ let percent;
25429
+ switch (e.key) {
25430
+ case "ArrowLeft":
25431
+ percent = current() - KEY_STEP;
25432
+ break;
25433
+ case "ArrowRight":
25434
+ percent = current() + KEY_STEP;
25435
+ break;
25436
+ case "Home":
25437
+ percent = MIN_SPLIT;
25438
+ break;
25439
+ case "End":
25440
+ percent = MAX_SPLIT;
25441
+ break;
25442
+ case "Enter":
25443
+ percent = void 0;
25444
+ break;
25445
+ default:
25446
+ return;
25447
+ }
25448
+ e.preventDefault();
25449
+ split(percent);
25450
+ },
25451
+ { signal }
25452
+ );
25453
+ }
25454
+
25365
25455
  // webview/toc.ts
25366
25456
  var TOC_CURRENT = "seqnotes-toc-current";
25367
25457
  var TOC_CURRENT_RATIO = 0.2;
@@ -26128,46 +26218,14 @@ function createPreview(ctx) {
26128
26218
  el.classList.toggle("seqnotes-wide", previewWidth() >= splitMinWidth);
26129
26219
  }
26130
26220
  const stopResize = scroll.onResize(applyLayout);
26131
- const MIN_SPLIT = 20;
26132
- const MAX_SPLIT = 80;
26133
26221
  function setSplit(percent) {
26134
- const style = el.style;
26135
- if (percent === void 0) {
26136
- style.removeProperty("--seqnotes-split");
26137
- } else {
26138
- percent = Math.min(MAX_SPLIT, Math.max(MIN_SPLIT, percent));
26139
- style.setProperty("--seqnotes-split", `${percent}%`);
26140
- }
26222
+ const split = applySplit(el, percent);
26141
26223
  const state = ctx.getState();
26142
26224
  if (state) {
26143
- ctx.setState({ ...state, split: percent });
26225
+ ctx.setState({ ...state, split });
26144
26226
  }
26145
26227
  }
26146
26228
  setSplit(ctx.getState()?.split);
26147
- function addSplitter(pair) {
26148
- const splitter = document.createElement("div");
26149
- splitter.className = "seqnotes-splitter";
26150
- splitter.title = titles.seqnotesSplitterTitle ?? "";
26151
- pair.querySelector(".seqnotes-seq-col")?.after(splitter);
26152
- splitter.addEventListener("pointerdown", (e) => {
26153
- e.preventDefault();
26154
- splitter.setPointerCapture(e.pointerId);
26155
- const move = (ev) => {
26156
- const r = pair.getBoundingClientRect();
26157
- setSplit((ev.clientX - r.left) / r.width * 100);
26158
- };
26159
- const up = () => {
26160
- splitter.removeEventListener("pointermove", move);
26161
- splitter.removeEventListener("pointerup", up);
26162
- };
26163
- splitter.addEventListener("pointermove", move);
26164
- splitter.addEventListener("pointerup", up);
26165
- });
26166
- splitter.addEventListener("dblclick", (e) => {
26167
- e.stopPropagation();
26168
- setSplit(void 0);
26169
- });
26170
- }
26171
26229
  let previewTheme = titles.seqnotesTheme === "light" || titles.seqnotesTheme === "dark" ? titles.seqnotesTheme : "auto";
26172
26230
  function isVscodeDark() {
26173
26231
  return !el.classList.contains("vscode-light") && !el.classList.contains("vscode-high-contrast-light");
@@ -26463,7 +26521,7 @@ ${source}`;
26463
26521
  root.querySelectorAll(".seqnotes-pair").forEach((pair2) => {
26464
26522
  wrapSections(pair2);
26465
26523
  if (!pair2.classList.contains("seqnotes-pair-stacked")) {
26466
- addSplitter(pair2);
26524
+ addSplitter(pair2, titles.seqnotesSplitterTitle ?? "", setSplit, signal);
26467
26525
  }
26468
26526
  });
26469
26527
  setUpWarnings();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "markdown-design-doc-viewer-embed",
3
- "version": "1.5.0",
3
+ "version": "1.5.1",
4
4
  "description": "The viewer of Markdown Design Doc Viewer to embed in a web app (React or not): design documents in Markdown with their mermaid sequence diagrams, flowcharts, ER and state diagrams and wireframes linked to the steps after them.",
5
5
  "license": "MIT",
6
6
  "repository": {
package/viewer.css CHANGED
@@ -1076,6 +1076,12 @@ html:has(> body[data-seqnotes-theme=dark]:is(.vscode-light, .vscode-high-contras
1076
1076
  .seqnotes-viewer.seqnotes-wide .seqnotes-splitter:active::after {
1077
1077
  background: var(--vscode-sash-hoverBorder, var(--seqnotes-accent));
1078
1078
  }
1079
+ .seqnotes-viewer.seqnotes-wide .seqnotes-splitter:focus {
1080
+ outline: none;
1081
+ }
1082
+ .seqnotes-viewer.seqnotes-wide .seqnotes-splitter:focus-visible::after {
1083
+ background: var(--vscode-focusBorder, var(--seqnotes-accent));
1084
+ }
1079
1085
  .seqnotes-viewer.seqnotes-wide .seqnotes-pair:not(.seqnotes-pair-stacked) > .seqnotes-seq-col {
1080
1086
  align-self: start;
1081
1087
  position: sticky;