@shivaedev/work-board 0.6.0 → 0.7.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.
Files changed (81) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +18 -0
  3. package/dist/cli.js +1 -1
  4. package/dist/page/diagrams.d.ts +1 -1
  5. package/dist/page/diagrams.d.ts.map +1 -1
  6. package/dist/page/diagrams.js +1 -0
  7. package/dist/page/diagrams.js.map +1 -1
  8. package/dist/page/style.d.ts.map +1 -1
  9. package/dist/page/style.js +25 -1
  10. package/dist/page/style.js.map +1 -1
  11. package/dist/render/board.d.ts.map +1 -1
  12. package/dist/render/board.js +5 -2
  13. package/dist/render/board.js.map +1 -1
  14. package/dist/render/callouts.d.ts +3 -0
  15. package/dist/render/callouts.d.ts.map +1 -0
  16. package/dist/render/callouts.js +27 -0
  17. package/dist/render/callouts.js.map +1 -0
  18. package/dist/render/code.d.ts +2 -8
  19. package/dist/render/code.d.ts.map +1 -1
  20. package/dist/render/code.js +26 -18
  21. package/dist/render/code.js.map +1 -1
  22. package/dist/render/documentHeadings.d.ts +2 -658
  23. package/dist/render/documentHeadings.d.ts.map +1 -1
  24. package/dist/render/documentHeadings.js +20 -23
  25. package/dist/render/documentHeadings.js.map +1 -1
  26. package/dist/render/documentLinks.d.ts +2 -659
  27. package/dist/render/documentLinks.d.ts.map +1 -1
  28. package/dist/render/documentLinks.js +22 -25
  29. package/dist/render/documentLinks.js.map +1 -1
  30. package/dist/render/footnotes.d.ts +2 -18
  31. package/dist/render/footnotes.d.ts.map +1 -1
  32. package/dist/render/footnotes.js +9 -11
  33. package/dist/render/footnotes.js.map +1 -1
  34. package/dist/render/markdown.d.ts.map +1 -1
  35. package/dist/render/markdown.js +16 -4
  36. package/dist/render/markdown.js.map +1 -1
  37. package/dist/render/textContent.d.ts +3 -0
  38. package/dist/render/textContent.d.ts.map +1 -0
  39. package/dist/render/textContent.js +7 -0
  40. package/dist/render/textContent.js.map +1 -0
  41. package/dist/render/visual.d.ts +3 -0
  42. package/dist/render/visual.d.ts.map +1 -0
  43. package/dist/render/visual.js +90 -0
  44. package/dist/render/visual.js.map +1 -0
  45. package/dist/render/visualDocuments.d.ts +5 -0
  46. package/dist/render/visualDocuments.d.ts.map +1 -0
  47. package/dist/render/visualDocuments.js +57 -0
  48. package/dist/render/visualDocuments.js.map +1 -0
  49. package/dist/render/visualFields.d.ts +12 -0
  50. package/dist/render/visualFields.d.ts.map +1 -0
  51. package/dist/render/visualFields.js +13 -0
  52. package/dist/render/visualFields.js.map +1 -0
  53. package/dist/search/collector.d.ts +2 -8
  54. package/dist/search/collector.d.ts.map +1 -1
  55. package/dist/search/collector.js +29 -25
  56. package/dist/search/collector.js.map +1 -1
  57. package/dist/search/entries.d.ts.map +1 -1
  58. package/dist/search/entries.js +10 -3
  59. package/dist/search/entries.js.map +1 -1
  60. package/dist/search/linkCollector.d.ts +2 -7
  61. package/dist/search/linkCollector.d.ts.map +1 -1
  62. package/dist/search/linkCollector.js +12 -13
  63. package/dist/search/linkCollector.js.map +1 -1
  64. package/package.json +13 -2
  65. package/src/cli.ts +1 -1
  66. package/src/page/diagrams.ts +1 -0
  67. package/src/page/style.ts +26 -1
  68. package/src/render/board.ts +5 -2
  69. package/src/render/callouts.ts +29 -0
  70. package/src/render/code.ts +29 -19
  71. package/src/render/documentHeadings.ts +21 -23
  72. package/src/render/documentLinks.ts +23 -25
  73. package/src/render/footnotes.ts +11 -14
  74. package/src/render/markdown.ts +20 -4
  75. package/src/render/textContent.ts +8 -0
  76. package/src/render/visual.ts +100 -0
  77. package/src/render/visualDocuments.ts +68 -0
  78. package/src/render/visualFields.ts +17 -0
  79. package/src/search/collector.ts +30 -27
  80. package/src/search/entries.ts +10 -3
  81. package/src/search/linkCollector.ts +13 -13
@@ -1,6 +1,7 @@
1
- import type { Element } from "hast";
2
- import { defineHastPlugin } from "satteri";
1
+ import type { Element, Root } from "hast";
2
+ import { visit as visitElements } from "unist-util-visit";
3
3
  import { fileUrl } from "#files/url.ts";
4
+ import { textContent } from "#render/textContent.ts";
4
5
  import type { Entry } from "./entries.ts";
5
6
 
6
7
  function sourceLine(element: Element, first: number | undefined, length: number): { readonly line?: number } {
@@ -14,31 +15,33 @@ export function searchCollector(file: string, startLine: () => number | undefine
14
15
  const entries: Entry[] = [];
15
16
  let passage = "";
16
17
  let label = file;
17
- const plugin = defineHastPlugin({
18
- element: {
19
- filter: ["h1", "h2", "h3", "h4", "h5", "h6", "p", "pre", "li", "td", "th"],
20
- visit: (element, context) => {
21
- const text = context.textContent(element).replace(/\s+/gu, " ").trim();
22
- if (!text || element.properties.id === "footnote-label") {
23
- return;
24
- }
25
- const heading = element.tagName.startsWith("h") && element.tagName !== "th";
26
- if (heading && typeof element.properties.id === "string") {
27
- passage = element.properties.id;
28
- label = text;
18
+ function collect(element: Element) {
19
+ const text = element.children.map(textContent).join("").replace(/\s+/gu, " ").trim();
20
+ if (!text || element.properties.id === "footnote-label") {
21
+ return;
22
+ }
23
+ const heading = element.tagName.startsWith("h") && element.tagName !== "th";
24
+ if (heading && typeof element.properties.id === "string") {
25
+ passage = element.properties.id;
26
+ label = text;
27
+ }
28
+ entries.push({
29
+ file,
30
+ href: fileUrl(file) + (passage ? `#${encodeURIComponent(passage)}` : ""),
31
+ kind: heading ? "heading" : "passage",
32
+ ...sourceLine(element, startLine(), length()),
33
+ text,
34
+ title: label,
35
+ });
36
+ }
37
+ function plugin() {
38
+ return function transform(tree: Root) {
39
+ visitElements(tree, "element", (element) => {
40
+ if (["h1", "h2", "h3", "h4", "h5", "h6", "p", "pre", "li", "td", "th"].includes(element.tagName)) {
41
+ collect(element);
29
42
  }
30
- entries.push({
31
- file,
32
- href: fileUrl(file) + (passage ? `#${encodeURIComponent(passage)}` : ""),
33
- kind: heading ? "heading" : "passage",
34
- ...sourceLine(element, startLine(), length()),
35
- text,
36
- title: label,
37
- });
38
- },
39
- },
40
- name: "work-board-search-text",
41
- });
42
-
43
+ });
44
+ };
45
+ }
43
46
  return { entries, plugin };
44
47
  }
@@ -1,7 +1,12 @@
1
- import { markdownToHtml } from "satteri";
1
+ import { MarkdownAsync } from "react-markdown";
2
+ import rehypeRaw from "rehype-raw";
3
+ import remarkDirective from "remark-directive";
4
+ import remarkGfm from "remark-gfm";
2
5
  import { fileUrl } from "#files/url.ts";
3
6
  import { boardOf } from "#render/board.ts";
7
+ import { callouts } from "#render/callouts.ts";
4
8
  import { documentHeadings } from "#render/documentHeadings.ts";
9
+ import { visualDocuments } from "#render/visualDocuments.ts";
5
10
  import { searchCollector } from "./collector.ts";
6
11
  import { linkCollector } from "./linkCollector.ts";
7
12
 
@@ -41,8 +46,10 @@ export async function entriesOf(source: string, file: string, home: boolean, bod
41
46
  if (fragment) {
42
47
  fragmentLength = fragment.split("\n").length;
43
48
  fragmentLine = board ? fragmentLocation(source, fragment, bodyLine, seenFragments) : bodyLine;
44
- await markdownToHtml(board?.definitions ? `${fragment}\n\n${board.definitions}` : fragment, {
45
- hastPlugins: [headings.plugin, plugin, linkCollector(links)],
49
+ await MarkdownAsync({
50
+ children: board?.definitions ? `${fragment}\n\n${board.definitions}` : fragment,
51
+ rehypePlugins: [rehypeRaw, headings.plugin, plugin, linkCollector(links)],
52
+ remarkPlugins: [remarkGfm, remarkDirective, visualDocuments, callouts],
46
53
  });
47
54
  }
48
55
  }
@@ -1,16 +1,16 @@
1
- import { defineHastPlugin } from "satteri";
1
+ import type { Root } from "hast";
2
+ import { visit as visitElements } from "unist-util-visit";
2
3
 
3
4
  export function linkCollector(links: Set<string>) {
4
- return defineHastPlugin({
5
- element: {
6
- filter: ["a"],
7
- visit: (element) => {
8
- const href = element.properties.href;
9
- if (typeof href === "string" && !href.startsWith("#")) {
10
- links.add(href);
11
- }
12
- },
13
- },
14
- name: "work-board-link-collector",
15
- });
5
+ return () => (tree: Root) => {
6
+ visitElements(tree, "element", (element) => {
7
+ if (element.tagName !== "a") {
8
+ return;
9
+ }
10
+ const href = element.properties.href;
11
+ if (typeof href === "string" && !href.startsWith("#")) {
12
+ links.add(href);
13
+ }
14
+ });
15
+ };
16
16
  }