hyperbook 0.53.7 → 0.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -230,8 +230,42 @@ var hyperbook = (function () {
230
230
  * @param {HTMLElement} el - The element to toggle.
231
231
  */
232
232
  function toggleLightbox(el) {
233
- el.parentElement.classList.toggle("lightbox");
234
- el.parentElement.classList.toggle("normal");
233
+ const overlay = document.createElement("div");
234
+ overlay.classList.add("lightbox-overlay");
235
+
236
+ const captionText =
237
+ el.parentElement.querySelector("figcaption")?.textContent || "";
238
+
239
+ // container for image + caption
240
+ const content = document.createElement("div");
241
+ content.classList.add("lightbox-content");
242
+
243
+ // image container fills remaining space
244
+ const imgContainer = document.createElement("div");
245
+ imgContainer.classList.add("lightbox-image-container");
246
+
247
+ const lightboxImg = document.createElement("img");
248
+ lightboxImg.src = el.src;
249
+ imgContainer.appendChild(lightboxImg);
250
+
251
+ content.appendChild(imgContainer);
252
+
253
+ // add caption if exists
254
+ if (captionText) {
255
+ const caption = document.createElement("div");
256
+ caption.classList.add("caption");
257
+ caption.textContent = captionText;
258
+ content.appendChild(caption);
259
+ }
260
+
261
+ overlay.appendChild(content);
262
+
263
+ overlay.addEventListener("click", () => {
264
+ document.body.removeChild(overlay);
265
+ });
266
+
267
+ document.body.appendChild(overlay);
268
+ overlay.style.display = "flex";
235
269
  }
236
270
 
237
271
  function init(root) {
@@ -27,27 +27,42 @@ figure {
27
27
  max-width: 100%;
28
28
  }
29
29
 
30
- .hyperbook-markdown figure.lightbox {
31
- position: fixed;
32
- display: flex;
33
- justify-content: center;
34
- flex-direction: column;
35
- align-items: center;
36
- top: 0;
37
- left: 0;
38
- right: 0;
39
- bottom: 0;
40
- padding: 1em;
41
- z-index: 10000;
42
- margin: 0px;
43
- background: rgba(0, 0, 0, 0.5);
30
+ .hyperbook-markdown figure.align-left {
31
+ display: table;
32
+ float: left;
33
+ margin-right: 1.75rem;
44
34
  }
45
35
 
46
- .hyperbook-markdown figure.lightbox img {
47
- min-width: 100%;
48
- min-height: 100%;
49
- cursor: zoom-out;
50
- object-fit: contain;
36
+ .hyperbook-markdown figure.align-right {
37
+ display: table;
38
+ float: right;
39
+ margin-left: 1.75rem;
40
+ }
41
+
42
+ .hyperbook-markdown figure.align-rightplus {
43
+ display: table;
44
+ float: right;
45
+ margin-left: 1.75rem;
46
+ margin-right: -1.5rem;
47
+ }
48
+
49
+ .hyperbook-markdown figure.align-leftplus {
50
+ display: table;
51
+ float: left;
52
+ margin-right: 1.75rem;
53
+ margin-left: -1.5rem;
54
+ }
55
+
56
+ .hyperbook-markdown figure.align-centerplus {
57
+ display: grid;
58
+ justify-items: center;
59
+ clear: both;
60
+ margin-left: -1.5rem;
61
+ margin-right: -1.5rem;
62
+
63
+ img {
64
+ width: 100%;
65
+ }
51
66
  }
52
67
 
53
68
  .hyperbook-markdown table {
@@ -76,12 +91,16 @@ figure {
76
91
  }
77
92
 
78
93
  .hyperbook-markdown figure.normal {
79
- text-align: center;
94
+ display: grid;
95
+ clear: both;
96
+ justify-items: center;
97
+ align-content: center;
80
98
  margin-top: 10px;
81
99
  margin-bottom: 10px;
82
100
  }
83
101
 
84
102
  .hyperbook-markdown figure.normal img {
103
+ display: inline-block;
85
104
  cursor: zoom-in;
86
105
  }
87
106
 
@@ -148,11 +167,11 @@ figure {
148
167
  margin-bottom: 0;
149
168
  }
150
169
 
151
- .hyperbook-markdown li + li {
170
+ .hyperbook-markdown li+li {
152
171
  margin-top: 0.25em;
153
172
  }
154
173
 
155
- .hyperbook-markdown li > p {
174
+ .hyperbook-markdown li>p {
156
175
  margin-top: 16px;
157
176
  }
158
177
 
@@ -226,6 +245,7 @@ figure {
226
245
  .hyperbook-markdown h4,
227
246
  .hyperbook-markdown h5,
228
247
  .hyperbook-markdown h6 {
248
+ clear: both;
229
249
  font-family: hyperbook-heading, sans-serif;
230
250
  margin-top: 24px;
231
251
  margin-bottom: 16px;
@@ -305,10 +325,10 @@ figure {
305
325
  list-style-type: none;
306
326
  }
307
327
 
308
- .hyperbook-markdown #toc-toggle > .bar1,
309
- .hyperbook-markdown #toc-toggle > .bar2,
310
- .hyperbook-markdown #toc-toggle > .bar3,
311
- .hyperbook-markdown #toc-toggle > .bar4 {
328
+ .hyperbook-markdown #toc-toggle>.bar1,
329
+ .hyperbook-markdown #toc-toggle>.bar2,
330
+ .hyperbook-markdown #toc-toggle>.bar3,
331
+ .hyperbook-markdown #toc-toggle>.bar4 {
312
332
  background-color: var(--color-text);
313
333
  }
314
334
 
@@ -431,16 +451,16 @@ figure {
431
451
  height: 100%;
432
452
  }
433
453
 
434
- .toc-drawer-content > nav {
454
+ .toc-drawer-content>nav {
435
455
  padding: 20px;
436
456
  flex: 1;
437
457
  }
438
458
 
439
- .toc-drawer-content > nav li a {
459
+ .toc-drawer-content>nav li a {
440
460
  display: block;
441
461
  }
442
462
 
443
- .toc-drawer-content > nav li a:hover {
463
+ .toc-drawer-content>nav li a:hover {
444
464
  text-decoration: underline;
445
465
  }
446
466
 
@@ -547,16 +567,16 @@ figure {
547
567
  opacity: 1;
548
568
  }
549
569
 
550
- .hyperbook-markdown #toc-toggle > .bar1,
551
- .hyperbook-markdown #toc-toggle > .bar3 {
570
+ .hyperbook-markdown #toc-toggle>.bar1,
571
+ .hyperbook-markdown #toc-toggle>.bar3 {
552
572
  width: 20px;
553
573
  height: 2px;
554
574
  margin: 2px 3px;
555
575
  transition: 0.4s;
556
576
  }
557
577
 
558
- .hyperbook-markdown #toc-toggle > .bar2,
559
- .hyperbook-markdown #toc-toggle > .bar4 {
578
+ .hyperbook-markdown #toc-toggle>.bar2,
579
+ .hyperbook-markdown #toc-toggle>.bar4 {
560
580
  width: 25px;
561
581
  height: 2px;
562
582
  margin: 2px 3px;
@@ -1,3 +1,8 @@
1
+ :root {
2
+ --alert-color: var(--color-nav-border);
3
+ --alert-content: "";
4
+ }
5
+
1
6
  .directive-alert>p {
2
7
  margin-bottom: 0;
3
8
  }
@@ -15,97 +20,45 @@
15
20
  position: relative;
16
21
  border-left-width: 4px;
17
22
  border-left-style: solid;
23
+ background-color: var(--color-nav);
24
+ border-left-color: var(--alert-color);
25
+ border-left-style: solid;
26
+ border-left-width: 4px;
18
27
  }
19
28
 
20
- .directive-alert::before {
29
+ .directive-alert.icon::before {
21
30
  border-radius: 100%;
22
31
  font-size: 14px;
23
32
  font-weight: 700;
24
- left: -12px;
25
- line-height: 20px;
33
+ left: -14px;
26
34
  display: flex;
27
35
  align-items: center;
28
36
  justify-content: center;
29
37
  position: absolute;
30
- height: 20px;
31
- width: 20px;
32
- text-align: center;
33
- top: 12px;
34
- }
35
-
36
- .directive-alert.success {
37
- border-left-style: solid;
38
- border-left-width: 4px;
39
- }
40
-
41
- .directive-alert.success::before {
42
- content: "✓";
43
- }
44
-
45
- .directive-alert.info {
46
- border-left-style: solid;
47
- border-left-width: 4px;
48
- }
49
-
50
- .directive-alert.info::before {
51
- content: "i";
52
- }
53
-
54
- .directive-alert.warn {
55
- border-left-style: solid;
56
- border-left-width: 4px;
57
- }
58
-
59
- .directive-alert.warn::before {
60
- content: "!";
61
- }
62
-
63
- .directive-alert.error {
64
- border-left-style: solid;
65
- border-left-width: 4px;
66
- }
67
-
68
- .directive-alert.error::before {
69
- content: "x";
70
- }
71
-
72
- .directive-alert {
73
- background-color: var(--color-nav);
74
- border-left-color: var(--color-nav-border);
75
- }
76
-
77
- .directive-alert::before {
38
+ height: 24px;
39
+ width: 24px;
40
+ top: 8px;
78
41
  color: #fff;
42
+ content: var(--alert-content);
43
+ background-color: var(--alert-color);
79
44
  }
80
45
 
81
46
  .directive-alert.success {
82
- border-left-color: #00c851;
83
- }
84
-
85
- .directive-alert.success::before {
86
- background-color: #00c851;
47
+ --alert-color: #00c851;
48
+ --alert-content: "✓";
87
49
  }
88
50
 
89
51
  .directive-alert.info {
90
- border-left-color: #33b5e5;
91
- }
92
-
93
- .directive-alert.info::before {
94
- background-color: #33b5e5;
52
+ --alert-color: #33b5e5;
53
+ --alert-content: "i";
95
54
  }
96
55
 
97
56
  .directive-alert.warn {
98
- border-left-color: #f0b429;
99
- }
100
-
101
- .directive-alert.warn::before {
102
- background-color: #f0b429;
57
+ --alert-color: #f0b429;
58
+ --alert-content: "!";
103
59
  }
104
60
 
105
61
  .directive-alert.error {
106
- border-left-color: #ef4e4e;
107
- }
108
-
109
- .directive-alert.error::before {
110
- background-color: #ef4e4e;
62
+ --alert-color: #ef4e4e;
63
+ --alert-content: "x";
111
64
  }
@@ -740,3 +740,69 @@ nav.toc li.level-3 {
740
740
  cursor: pointer;
741
741
  mask-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIGNsYXNzPSJsdWNpZGUgbHVjaWRlLXVwbG9hZCI+PHBhdGggZD0iTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQiLz48cG9seWxpbmUgcG9pbnRzPSIxNyA4IDEyIDMgNyA4Ii8+PGxpbmUgeDE9IjEyIiB4Mj0iMTIiIHkxPSIzIiB5Mj0iMTUiLz48L3N2Zz4=");
742
742
  }
743
+
744
+ .lightbox-overlay {
745
+ position: fixed;
746
+ top: 0;
747
+ left: 0;
748
+ width: 100%;
749
+ height: 100%;
750
+ display: flex;
751
+ justify-content: center;
752
+ align-items: center;
753
+ background: rgba(0, 0, 0, 0.8);
754
+ z-index: 10000;
755
+ padding: 1em;
756
+ /* small margin around edges */
757
+ box-sizing: border-box;
758
+ }
759
+
760
+ .lightbox-content {
761
+ display: flex;
762
+ flex-direction: column;
763
+ align-items: center;
764
+ max-width: 100%;
765
+ max-height: 100%;
766
+ height: 100vh;
767
+ /* Ensure full height usage */
768
+ box-sizing: border-box;
769
+ }
770
+
771
+ .lightbox-image-container {
772
+ display: flex;
773
+ justify-content: center;
774
+ align-items: center;
775
+ width: 100%;
776
+ flex: 1;
777
+ /* Take up remaining space after caption */
778
+ min-height: 0;
779
+ /* Allow flexbox shrinking */
780
+ }
781
+
782
+ .lightbox-image-container img {
783
+ width: calc(100vw - 1em);
784
+ /* Forces image to grow to this width */
785
+ height: 100%;
786
+ /* Use all available height in the flex container */
787
+ max-width: calc(100vw - 1em);
788
+ /* Prevents overflow */
789
+ max-height: 100%;
790
+ /* Prevents overflow */
791
+ object-fit: contain;
792
+ /* Maintains aspect ratio while filling the space */
793
+ cursor: zoom-out;
794
+ }
795
+
796
+ .lightbox-content .caption {
797
+ color: white;
798
+ font-family: hyperbook-body, sans-serif;
799
+ text-align: center;
800
+ font-size: 1em;
801
+ margin-top: 0.5em;
802
+ margin-bottom: 0.5em;
803
+ /* Add bottom margin for spacing */
804
+ max-width: 90vw;
805
+ word-wrap: break-word;
806
+ flex-shrink: 0;
807
+ /* Prevent caption from shrinking */
808
+ }
package/dist/index.js CHANGED
@@ -173369,14 +173369,16 @@ var remarkImage_default = (ctx) => () => {
173369
173369
  });
173370
173370
  }
173371
173371
  node3.data.hName = "figure";
173372
+ let figureProps = node3.data.hProperties;
173372
173373
  node3.data.hProperties = {
173373
- class: "normal"
173374
+ class: "normal " + figureProps?.class
173374
173375
  };
173375
173376
  node3.data.hChildren = [
173376
173377
  {
173377
173378
  type: "element",
173378
173379
  tagName: "img",
173379
173380
  properties: {
173381
+ ...figureProps,
173380
173382
  src: node3.url,
173381
173383
  alt: node3.alt,
173382
173384
  onclick: `hyperbook.toggleLightbox(this)`
@@ -173435,10 +173437,16 @@ var remarkDirectiveAlert_default = (ctx) => () => {
173435
173437
  const data = node3.data || (node3.data = {});
173436
173438
  expectContainerDirective(node3, file, name);
173437
173439
  registerDirective(file, name, [], ["style.css"], []);
173438
- const type = Object.keys(node3.attributes || {}).join(" ");
173440
+ const color2 = node3.attributes?.color;
173441
+ const content5 = node3.attributes?.label;
173442
+ const type = Object.keys(node3.attributes || {}).join(" ").trim();
173443
+ const icon = content5 || type;
173444
+ delete node3.attributes?.color;
173445
+ delete node3.attributes?.label;
173439
173446
  data.hName = "div";
173440
173447
  data.hProperties = {
173441
- class: ("directive-alert " + type).trim()
173448
+ class: `directive-alert ${type} ${icon ? "icon" : ""}`.trim(),
173449
+ style: `${color2 ? `--alert-color: ${color2};` : ""} ${content5 ? `--alert-content: '${content5}';` : ""}`
173442
173450
  };
173443
173451
  }
173444
173452
  });
@@ -187816,6 +187824,93 @@ function supersub() {
187816
187824
  };
187817
187825
  }
187818
187826
 
187827
+ // src/remarkImageAttrs.ts
187828
+ var ATTR_BLOCK_RE = /^\s*\{([\s\S]*?)\}/;
187829
+ var ATTR_PAIR_RE = /([:\w-]+)\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'}]+))/g;
187830
+ var SHORTHAND_RE = /([#.])([\w-]+)/g;
187831
+ function parseAttrBlock(input) {
187832
+ const m = ATTR_BLOCK_RE.exec(input);
187833
+ if (!m) return null;
187834
+ const inner2 = m[1];
187835
+ const attrs = {};
187836
+ let classes = [];
187837
+ let pair;
187838
+ while ((pair = ATTR_PAIR_RE.exec(inner2)) !== null) {
187839
+ const key2 = pair[1];
187840
+ const val = pair[2] ?? pair[3] ?? pair[4] ?? "";
187841
+ attrs[key2] = val;
187842
+ }
187843
+ let sm;
187844
+ while ((sm = SHORTHAND_RE.exec(inner2)) !== null) {
187845
+ if (sm[1] === "#") {
187846
+ attrs["id"] = sm[2];
187847
+ } else if (sm[1] === ".") {
187848
+ classes.push(sm[2]);
187849
+ }
187850
+ }
187851
+ if (classes.length > 0) {
187852
+ attrs["class"] = classes.join(" ");
187853
+ }
187854
+ return { attrs, length: m[0].length };
187855
+ }
187856
+ function detectAlignment(prev, next2) {
187857
+ let left = prev?.value.endsWith("-") ? prev.value.match(/-+$/)?.[0] ?? "" : "";
187858
+ let right = next2?.value.startsWith("-") ? next2.value.match(/^-+/)?.[0] ?? "" : "";
187859
+ if (left === "-" && !right) return "align-left";
187860
+ if (left === "--" && !right) return "align-leftplus";
187861
+ if (right === "-" && !left) return "align-right";
187862
+ if (right === "--" && !left) return "align-rightplus";
187863
+ if (left === "--" && right === "--") return "align-centerplus";
187864
+ return "";
187865
+ }
187866
+ var remarkImageAttrs = (ctx) => () => {
187867
+ return (tree) => {
187868
+ visit(tree, "paragraph", (para) => {
187869
+ const children = para.children;
187870
+ for (let i = 0; i < children.length; i++) {
187871
+ const img = children[i];
187872
+ if (!img || img.type !== "image") continue;
187873
+ const prev = children[i - 1];
187874
+ const next2 = children[i + 1];
187875
+ const alignClass = detectAlignment(prev, next2);
187876
+ img.data ||= {};
187877
+ img.data.hProperties ||= {};
187878
+ const hProps = img.data.hProperties;
187879
+ if (alignClass !== "") {
187880
+ const existing = hProps.class?.split(" ") ?? [];
187881
+ const filtered = existing.filter((c) => !c.startsWith("align-"));
187882
+ hProps.class = [...filtered, alignClass].join(" ");
187883
+ }
187884
+ if (prev && prev.type === "text" && prev.value.endsWith("-")) {
187885
+ prev.value = prev.value.replace(/-+$/, "");
187886
+ if (prev.value === "") children.splice(i - 1, 1);
187887
+ i--;
187888
+ }
187889
+ if (next2 && next2.type === "text" && next2.value.startsWith("-")) {
187890
+ next2.value = next2.value.replace(/^-+/, "");
187891
+ if (next2.value === "") children.splice(i + 1, 1);
187892
+ }
187893
+ const nextAfter = children[i + 1];
187894
+ if (nextAfter && nextAfter.type === "text") {
187895
+ const parsed = parseAttrBlock(nextAfter.value);
187896
+ if (parsed) {
187897
+ for (const [k, v] of Object.entries(parsed.attrs)) {
187898
+ hProps[k] = v;
187899
+ }
187900
+ const remainder = nextAfter.value.slice(parsed.length);
187901
+ if (remainder.length > 0) {
187902
+ nextAfter.value = remainder;
187903
+ } else {
187904
+ children.splice(i + 1, 1);
187905
+ }
187906
+ }
187907
+ }
187908
+ }
187909
+ });
187910
+ };
187911
+ };
187912
+ var remarkImageAttrs_default = remarkImageAttrs;
187913
+
187819
187914
  // src/process.ts
187820
187915
  var remark = (ctx) => {
187821
187916
  i18n.init(ctx.config.language || "en");
@@ -187826,6 +187921,7 @@ var remark = (ctx) => {
187826
187921
  dist_default,
187827
187922
  remarkDirectivePagelist_default(ctx),
187828
187923
  remarkLink_default(ctx),
187924
+ remarkImageAttrs_default(ctx),
187829
187925
  remarkImage_default(ctx),
187830
187926
  remarkGfm,
187831
187927
  supersub,
@@ -187924,7 +188020,7 @@ pako/dist/pako.esm.mjs:
187924
188020
  //# sourceMappingURL=index.js.map
187925
188021
 
187926
188022
  ;// CONCATENATED MODULE: ./package.json
187927
- const package_namespaceObject = /*#__PURE__*/JSON.parse('{"name":"hyperbook","version":"0.53.7","author":"Mike Barkmin","homepage":"https://github.com/openpatch/hyperbook#readme","license":"MIT","bin":{"hyperbook":"./dist/index.js"},"files":["dist"],"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/openpatch/hyperbook.git","directory":"packages/hyperbook"},"bugs":{"url":"https://github.com/openpatch/hyperbook/issues"},"engines":{"node":">=12.22.0"},"scripts":{"version":"pnpm build","lint":"tsc --noEmit","dev":"ncc build ./index.ts -w -o dist/","build":"rimraf dist && ncc build ./index.ts -o ./dist/ --no-cache --no-source-map-register && node postbuild.mjs"},"devDependencies":{"@hyperbook/fs":"workspace:*","@hyperbook/markdown":"workspace:*","@hyperbook/types":"workspace:*","@pnpm/exportable-manifest":"1000.0.6","@types/archiver":"6.0.3","@types/async-retry":"1.4.9","@types/cross-spawn":"6.0.6","@types/lunr":"^2.3.7","@types/prompts":"2.4.9","@types/tar":"6.1.13","@types/ws":"^8.5.14","@vercel/ncc":"0.38.3","archiver":"7.0.1","async-retry":"1.3.3","chalk":"5.4.1","chokidar":"4.0.3","commander":"12.1.0","cpy":"11.1.0","cross-spawn":"7.0.6","domutils":"^3.2.2","extract-zip":"^2.0.1","got":"12.6.0","htmlparser2":"^10.0.0","lunr":"^2.3.9","lunr-languages":"^1.14.0","mime":"^4.0.6","prompts":"2.4.2","rimraf":"6.0.1","tar":"7.4.3","update-check":"1.5.4","ws":"^8.18.0"}}');
188023
+ const package_namespaceObject = /*#__PURE__*/JSON.parse('{"name":"hyperbook","version":"0.55.0","author":"Mike Barkmin","homepage":"https://github.com/openpatch/hyperbook#readme","license":"MIT","bin":{"hyperbook":"./dist/index.js"},"files":["dist"],"publishConfig":{"access":"public"},"repository":{"type":"git","url":"git+https://github.com/openpatch/hyperbook.git","directory":"packages/hyperbook"},"bugs":{"url":"https://github.com/openpatch/hyperbook/issues"},"engines":{"node":">=12.22.0"},"scripts":{"version":"pnpm build","lint":"tsc --noEmit","dev":"ncc build ./index.ts -w -o dist/","build":"rimraf dist && ncc build ./index.ts -o ./dist/ --no-cache --no-source-map-register && node postbuild.mjs"},"devDependencies":{"@hyperbook/fs":"workspace:*","@hyperbook/markdown":"workspace:*","@hyperbook/types":"workspace:*","@pnpm/exportable-manifest":"1000.0.6","@types/archiver":"6.0.3","@types/async-retry":"1.4.9","@types/cross-spawn":"6.0.6","@types/lunr":"^2.3.7","@types/prompts":"2.4.9","@types/tar":"6.1.13","@types/ws":"^8.5.14","@vercel/ncc":"0.38.3","archiver":"7.0.1","async-retry":"1.3.3","chalk":"5.4.1","chokidar":"4.0.3","commander":"12.1.0","cpy":"11.1.0","cross-spawn":"7.0.6","domutils":"^3.2.2","extract-zip":"^2.0.1","got":"12.6.0","htmlparser2":"^10.0.0","lunr":"^2.3.9","lunr-languages":"^1.14.0","mime":"^4.0.6","prompts":"2.4.2","rimraf":"6.0.1","tar":"7.4.3","update-check":"1.5.4","ws":"^8.18.0"}}');
187928
188024
  ;// CONCATENATED MODULE: ./build.ts
187929
188025
 
187930
188026
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hyperbook",
3
- "version": "0.53.7",
3
+ "version": "0.55.0",
4
4
  "author": "Mike Barkmin",
5
5
  "homepage": "https://github.com/openpatch/hyperbook#readme",
6
6
  "license": "MIT",
@@ -54,7 +54,7 @@
54
54
  "update-check": "1.5.4",
55
55
  "ws": "^8.18.0",
56
56
  "@hyperbook/fs": "0.18.3",
57
- "@hyperbook/markdown": "0.29.5",
57
+ "@hyperbook/markdown": "0.31.0",
58
58
  "@hyperbook/types": "0.15.2"
59
59
  },
60
60
  "scripts": {