hyperbook 0.63.2 → 0.65.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.
@@ -4,7 +4,7 @@
4
4
  }
5
5
 
6
6
  .directive-alert>p {
7
- margin-bottom: 0;
7
+ margin-bottom: 10px;
8
8
  }
9
9
 
10
10
  .directive-alert {
@@ -34,6 +34,10 @@
34
34
  :first-child {
35
35
  margin-top: 0;
36
36
  }
37
+
38
+ :first-child.p {
39
+ margin-top: 10px;
40
+ }
37
41
  }
38
42
 
39
43
  .directive-alert.icon::before {
@@ -0,0 +1,63 @@
1
+ hyperbook.textinput = (function () {
2
+ // Debounce helper to reduce database writes
3
+ const debounce = (func, wait) => {
4
+ let timeout;
5
+ return function executedFunction(...args) {
6
+ const later = () => {
7
+ clearTimeout(timeout);
8
+ func(...args);
9
+ };
10
+ clearTimeout(timeout);
11
+ timeout = setTimeout(later, wait);
12
+ };
13
+ };
14
+
15
+ const init = (root) => {
16
+ let allTextInputs = root.querySelectorAll(".directive-textinput textarea[data-id]");
17
+
18
+ allTextInputs.forEach((textarea) => {
19
+ const id = textarea.getAttribute("data-id");
20
+
21
+ // Load saved text from store
22
+ store.textinput.get(id).then((result) => {
23
+ if (result && result.text) {
24
+ textarea.value = result.text;
25
+ }
26
+ }).catch((error) => {
27
+ console.error("Failed to load textinput from store:", error);
28
+ });
29
+
30
+ // Save text to store on input with debouncing
31
+ const saveToStore = debounce(() => {
32
+ store.textinput.put({
33
+ id: id,
34
+ text: textarea.value,
35
+ }).catch((error) => {
36
+ console.error("Failed to save textinput to store:", error);
37
+ });
38
+ }, 500);
39
+
40
+ textarea.addEventListener("input", saveToStore);
41
+ });
42
+ };
43
+
44
+ init(document.body);
45
+
46
+ // Observe for new textinputs added to the DOM
47
+ const observer = new MutationObserver((mutations) => {
48
+ mutations.forEach((mutation) => {
49
+ mutation.addedNodes.forEach((node) => {
50
+ if (node.nodeType === 1) {
51
+ // Element node
52
+ init(node);
53
+ }
54
+ });
55
+ });
56
+ });
57
+
58
+ observer.observe(document.body, { childList: true, subtree: true });
59
+
60
+ return {
61
+ init,
62
+ };
63
+ })();
@@ -0,0 +1,27 @@
1
+ .directive-textinput {
2
+ margin: 1rem 0;
3
+ }
4
+
5
+ .directive-textinput textarea {
6
+ width: 100%;
7
+ padding: 0.75rem;
8
+ font-family: inherit;
9
+ font-size: 1rem;
10
+ border: 1px solid var(--color-nav-border, #ccc);
11
+ border-radius: 4px;
12
+ resize: vertical;
13
+ box-sizing: border-box;
14
+ transition: border-color 0.2s;
15
+ background-color: var(--color-background, white);
16
+ color: var(--color-text, black);
17
+ }
18
+
19
+ .directive-textinput textarea:focus {
20
+ outline: none;
21
+ border-color: var(--color-brand, #007864);
22
+ }
23
+
24
+ .directive-textinput textarea::placeholder {
25
+ color: var(--color-text-deactivated, #999);
26
+ opacity: 1;
27
+ }
@@ -27,6 +27,7 @@ store.version(1).stores({
27
27
  h5p: `id,userData`,
28
28
  geogebra: `id,state`,
29
29
  learningmap: `id,nodes,x,y,zoom`,
30
+ textinput: `id,text`,
30
31
  });
31
32
  var sqlIdeDB = new Dexie("SQL-IDE");
32
33
  sqlIdeDB.version(0.1).stores({
package/dist/index.js CHANGED
@@ -175225,6 +175225,12 @@ var remarkLink_default = (ctx) => () => {
175225
175225
  visit(tree, (node3, index2) => {
175226
175226
  if (typeof index2 === "number" && (node3.type === "link" || node3.type === "linkReference" || node3.type === "image" || node3.type === "imageReference" || node3.type === "definition")) {
175227
175227
  if (node3.url) {
175228
+ if (node3.type === "link" && /^https?:\/\//.test(node3.url)) {
175229
+ if (!node3.data) node3.data = {};
175230
+ if (!node3.data.hProperties) node3.data.hProperties = {};
175231
+ node3.data.hProperties.target = "_blank";
175232
+ node3.data.hProperties.rel = "noopener noreferrer";
175233
+ }
175228
175234
  node3.url = ctx.makeUrl(
175229
175235
  node3.url,
175230
175236
  "public",
@@ -183321,6 +183327,44 @@ var remarkDirectiveLearningmap_default = (ctx) => () => {
183321
183327
  };
183322
183328
  };
183323
183329
 
183330
+ // src/remarkDirectiveTextinput.ts
183331
+ var remarkDirectiveTextinput_default = (ctx) => () => {
183332
+ const name = "textinput";
183333
+ return (tree, file) => {
183334
+ visit(tree, function(node3) {
183335
+ if (isDirective(node3)) {
183336
+ if (node3.name !== name) return;
183337
+ const data = node3.data || (node3.data = {});
183338
+ expectLeafDirective(node3, file, name);
183339
+ registerDirective(file, name, ["client.js"], ["style.css"], []);
183340
+ const {
183341
+ placeholder = "",
183342
+ height = "200px",
183343
+ id = hash(node3)
183344
+ } = node3.attributes || {};
183345
+ data.hName = "div";
183346
+ data.hProperties = {
183347
+ class: "directive-textinput",
183348
+ "data-id": id
183349
+ };
183350
+ data.hChildren = [
183351
+ {
183352
+ type: "element",
183353
+ tagName: "textarea",
183354
+ properties: {
183355
+ class: "textinput",
183356
+ "data-id": id,
183357
+ placeholder,
183358
+ style: `height: ${height}`
183359
+ },
183360
+ children: []
183361
+ }
183362
+ ];
183363
+ }
183364
+ });
183365
+ };
183366
+ };
183367
+
183324
183368
  // src/process.ts
183325
183369
  var remark = (ctx) => {
183326
183370
  i18n.init(ctx.config.language || "en");
@@ -183364,6 +183408,7 @@ var remark = (ctx) => {
183364
183408
  remarkDirectiveJSXGraph_default(ctx),
183365
183409
  remarkDirectiveMultievent_default(ctx),
183366
183410
  remarkDirectiveLearningmap_default(ctx),
183411
+ remarkDirectiveTextinput_default(ctx),
183367
183412
  remarkCode_default(ctx),
183368
183413
  remarkMath,
183369
183414
  /* needs to be last directive */
@@ -183445,7 +183490,7 @@ module.exports = /*#__PURE__*/JSON.parse('{"application/1d-interleaved-parityfec
183445
183490
  /***/ ((module) => {
183446
183491
 
183447
183492
  "use strict";
183448
- module.exports = /*#__PURE__*/JSON.parse('{"name":"hyperbook","version":"0.63.2","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 --external favicons --external sharp && node postbuild.mjs"},"dependencies":{"favicons":"^7.2.0"},"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"}}');
183493
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"hyperbook","version":"0.65.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 --external favicons --external sharp && node postbuild.mjs"},"dependencies":{"favicons":"^7.2.0"},"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"}}');
183449
183494
 
183450
183495
  /***/ })
183451
183496
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hyperbook",
3
- "version": "0.63.2",
3
+ "version": "0.65.0",
4
4
  "author": "Mike Barkmin",
5
5
  "homepage": "https://github.com/openpatch/hyperbook#readme",
6
6
  "license": "MIT",
@@ -57,7 +57,7 @@
57
57
  "update-check": "1.5.4",
58
58
  "ws": "^8.18.0",
59
59
  "@hyperbook/fs": "0.20.0",
60
- "@hyperbook/markdown": "0.37.2",
60
+ "@hyperbook/markdown": "0.39.0",
61
61
  "@hyperbook/types": "0.18.0"
62
62
  },
63
63
  "scripts": {