myst-to-react 0.2.9 → 0.3.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 (167) hide show
  1. package/dist/cjs/admonitions.d.ts +1 -1
  2. package/dist/cjs/admonitions.d.ts.map +1 -1
  3. package/dist/cjs/basic.d.ts.map +1 -1
  4. package/dist/cjs/basic.js +1 -1
  5. package/dist/cjs/cite.d.ts +1 -2
  6. package/dist/cjs/cite.d.ts.map +1 -1
  7. package/dist/cjs/cite.js +2 -2
  8. package/dist/cjs/code.d.ts +1 -2
  9. package/dist/cjs/code.d.ts.map +1 -1
  10. package/dist/cjs/components/CopyIcon.d.ts +1 -2
  11. package/dist/cjs/components/CopyIcon.d.ts.map +1 -1
  12. package/dist/cjs/components/HoverPopover.d.ts +1 -1
  13. package/dist/cjs/components/HoverPopover.d.ts.map +1 -1
  14. package/dist/cjs/components/HoverPopover.js +1 -1
  15. package/dist/cjs/components/LinkCard.d.ts +1 -1
  16. package/dist/cjs/components/LinkCard.d.ts.map +1 -1
  17. package/dist/cjs/crossReference.d.ts +3 -2
  18. package/dist/cjs/crossReference.d.ts.map +1 -1
  19. package/dist/cjs/crossReference.js +89 -37
  20. package/dist/cjs/dropdown.d.ts +1 -1
  21. package/dist/cjs/dropdown.d.ts.map +1 -1
  22. package/dist/cjs/exercise.d.ts +1 -1
  23. package/dist/cjs/exercise.d.ts.map +1 -1
  24. package/dist/cjs/heading.d.ts +1 -1
  25. package/dist/cjs/heading.d.ts.map +1 -1
  26. package/dist/cjs/inlineError.d.ts +1 -2
  27. package/dist/cjs/inlineError.d.ts.map +1 -1
  28. package/dist/cjs/links/github.d.ts +1 -1
  29. package/dist/cjs/links/github.d.ts.map +1 -1
  30. package/dist/cjs/links/rrid.d.ts +1 -2
  31. package/dist/cjs/links/rrid.d.ts.map +1 -1
  32. package/dist/cjs/links/wiki.d.ts +1 -1
  33. package/dist/cjs/links/wiki.d.ts.map +1 -1
  34. package/dist/cjs/proof.d.ts +1 -1
  35. package/dist/cjs/proof.d.ts.map +1 -1
  36. package/dist/cjs/tabs.d.ts +2 -2
  37. package/dist/cjs/tabs.d.ts.map +1 -1
  38. package/dist/esm/admonitions.d.ts +34 -0
  39. package/dist/esm/admonitions.d.ts.map +1 -0
  40. package/dist/esm/admonitions.js +146 -0
  41. package/dist/esm/basic.d.ts +64 -0
  42. package/dist/esm/basic.d.ts.map +1 -0
  43. package/dist/esm/basic.js +128 -0
  44. package/dist/esm/card.d.ts +27 -0
  45. package/dist/esm/card.d.ts.map +1 -0
  46. package/dist/esm/card.js +54 -0
  47. package/dist/esm/cite.d.ts +11 -0
  48. package/dist/esm/cite.d.ts.map +1 -0
  49. package/dist/esm/cite.js +36 -0
  50. package/dist/esm/code.d.ts +61 -0
  51. package/dist/esm/code.d.ts.map +1 -0
  52. package/dist/esm/code.js +68 -0
  53. package/dist/esm/components/CopyIcon.d.ts +4 -0
  54. package/dist/esm/components/CopyIcon.d.ts.map +1 -0
  55. package/dist/esm/components/CopyIcon.js +20 -0
  56. package/dist/esm/components/HoverPopover.d.ts +11 -0
  57. package/dist/esm/components/HoverPopover.d.ts.map +1 -0
  58. package/dist/esm/components/HoverPopover.js +7 -0
  59. package/dist/esm/components/LinkCard.d.ts +11 -0
  60. package/dist/esm/components/LinkCard.d.ts.map +1 -0
  61. package/dist/esm/components/LinkCard.js +12 -0
  62. package/dist/esm/convertToReact.d.ts +6 -0
  63. package/dist/esm/convertToReact.d.ts.map +1 -0
  64. package/dist/esm/convertToReact.js +25 -0
  65. package/dist/esm/crossReference.d.ts +17 -0
  66. package/dist/esm/crossReference.d.ts.map +1 -0
  67. package/dist/esm/crossReference.js +153 -0
  68. package/dist/esm/dropdown.d.ts +22 -0
  69. package/dist/esm/dropdown.d.ts.map +1 -0
  70. package/dist/esm/dropdown.js +19 -0
  71. package/dist/esm/exercise.d.ts +22 -0
  72. package/dist/esm/exercise.d.ts.map +1 -0
  73. package/dist/esm/exercise.js +98 -0
  74. package/dist/esm/extensions/chemicalFormula.d.ts +7 -0
  75. package/dist/esm/extensions/chemicalFormula.d.ts.map +1 -0
  76. package/dist/esm/extensions/chemicalFormula.js +35 -0
  77. package/dist/esm/extensions/index.d.ts +4 -0
  78. package/dist/esm/extensions/index.d.ts.map +1 -0
  79. package/dist/esm/extensions/index.js +4 -0
  80. package/dist/esm/extensions/siunits.d.ts +7 -0
  81. package/dist/esm/extensions/siunits.d.ts.map +1 -0
  82. package/dist/esm/extensions/siunits.js +11 -0
  83. package/dist/esm/footnotes.d.ts +8 -0
  84. package/dist/esm/footnotes.d.ts.map +1 -0
  85. package/dist/esm/footnotes.js +23 -0
  86. package/dist/esm/grid.d.ts +11 -0
  87. package/dist/esm/grid.d.ts.map +1 -0
  88. package/dist/esm/grid.js +110 -0
  89. package/dist/esm/heading.d.ts +18 -0
  90. package/dist/esm/heading.d.ts.map +1 -0
  91. package/dist/esm/heading.js +37 -0
  92. package/dist/esm/iframe.d.ts +7 -0
  93. package/dist/esm/iframe.d.ts.map +1 -0
  94. package/dist/esm/iframe.js +43 -0
  95. package/dist/esm/image.d.ts +11 -0
  96. package/dist/esm/image.d.ts.map +1 -0
  97. package/dist/esm/image.js +56 -0
  98. package/dist/esm/index.d.ts +11 -0
  99. package/dist/esm/index.d.ts.map +1 -0
  100. package/dist/esm/index.js +40 -0
  101. package/dist/esm/inlineError.d.ts +7 -0
  102. package/dist/esm/inlineError.d.ts.map +1 -0
  103. package/dist/esm/inlineError.js +5 -0
  104. package/dist/esm/inlineExpression.d.ts +7 -0
  105. package/dist/esm/inlineExpression.d.ts.map +1 -0
  106. package/dist/esm/inlineExpression.js +17 -0
  107. package/dist/esm/links/github.d.ts +14 -0
  108. package/dist/esm/links/github.d.ts.map +1 -0
  109. package/dist/esm/links/github.js +100 -0
  110. package/dist/esm/links/index.d.ts +14 -0
  111. package/dist/esm/links/index.d.ts.map +1 -0
  112. package/dist/esm/links/index.js +64 -0
  113. package/dist/esm/links/rrid.d.ts +4 -0
  114. package/dist/esm/links/rrid.d.ts.map +1 -0
  115. package/dist/esm/links/rrid.js +27 -0
  116. package/dist/esm/links/wiki.d.ts +8 -0
  117. package/dist/esm/links/wiki.d.ts.map +1 -0
  118. package/dist/esm/links/wiki.js +32 -0
  119. package/dist/esm/math.d.ts +13 -0
  120. package/dist/esm/math.d.ts.map +1 -0
  121. package/dist/esm/math.js +23 -0
  122. package/dist/esm/proof.d.ts +36 -0
  123. package/dist/esm/proof.d.ts.map +1 -0
  124. package/dist/esm/proof.js +103 -0
  125. package/dist/esm/reactive.d.ts +88 -0
  126. package/dist/esm/reactive.d.ts.map +1 -0
  127. package/dist/esm/reactive.js +57 -0
  128. package/dist/esm/tabs.d.ts +27 -0
  129. package/dist/esm/tabs.d.ts.map +1 -0
  130. package/dist/esm/tabs.js +60 -0
  131. package/dist/esm/unknown.d.ts +8 -0
  132. package/dist/esm/unknown.d.ts.map +1 -0
  133. package/dist/esm/unknown.js +11 -0
  134. package/dist/types/admonitions.d.ts +1 -1
  135. package/dist/types/admonitions.d.ts.map +1 -1
  136. package/dist/types/basic.d.ts.map +1 -1
  137. package/dist/types/cite.d.ts +1 -2
  138. package/dist/types/cite.d.ts.map +1 -1
  139. package/dist/types/code.d.ts +1 -2
  140. package/dist/types/code.d.ts.map +1 -1
  141. package/dist/types/components/CopyIcon.d.ts +1 -2
  142. package/dist/types/components/CopyIcon.d.ts.map +1 -1
  143. package/dist/types/components/HoverPopover.d.ts +1 -1
  144. package/dist/types/components/HoverPopover.d.ts.map +1 -1
  145. package/dist/types/components/LinkCard.d.ts +1 -1
  146. package/dist/types/components/LinkCard.d.ts.map +1 -1
  147. package/dist/types/crossReference.d.ts +3 -2
  148. package/dist/types/crossReference.d.ts.map +1 -1
  149. package/dist/types/dropdown.d.ts +1 -1
  150. package/dist/types/dropdown.d.ts.map +1 -1
  151. package/dist/types/exercise.d.ts +1 -1
  152. package/dist/types/exercise.d.ts.map +1 -1
  153. package/dist/types/heading.d.ts +1 -1
  154. package/dist/types/heading.d.ts.map +1 -1
  155. package/dist/types/inlineError.d.ts +1 -2
  156. package/dist/types/inlineError.d.ts.map +1 -1
  157. package/dist/types/links/github.d.ts +1 -1
  158. package/dist/types/links/github.d.ts.map +1 -1
  159. package/dist/types/links/rrid.d.ts +1 -2
  160. package/dist/types/links/rrid.d.ts.map +1 -1
  161. package/dist/types/links/wiki.d.ts +1 -1
  162. package/dist/types/links/wiki.d.ts.map +1 -1
  163. package/dist/types/proof.d.ts +1 -1
  164. package/dist/types/proof.d.ts.map +1 -1
  165. package/dist/types/tabs.d.ts +2 -2
  166. package/dist/types/tabs.d.ts.map +1 -1
  167. package/package.json +7 -5
@@ -0,0 +1,110 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import classNames from 'classnames';
3
+ const gridClassNames = {
4
+ main: [
5
+ 'grid-cols-1',
6
+ 'grid-cols-2',
7
+ 'grid-cols-3',
8
+ 'grid-cols-4',
9
+ 'grid-cols-5',
10
+ 'grid-cols-6',
11
+ 'grid-cols-7',
12
+ 'grid-cols-8',
13
+ 'grid-cols-9',
14
+ 'grid-cols-10',
15
+ 'grid-cols-11',
16
+ 'grid-cols-12',
17
+ ],
18
+ sm: [
19
+ 'sm:grid-cols-1',
20
+ 'sm:grid-cols-2',
21
+ 'sm:grid-cols-3',
22
+ 'sm:grid-cols-4',
23
+ 'sm:grid-cols-5',
24
+ 'sm:grid-cols-6',
25
+ 'sm:grid-cols-7',
26
+ 'sm:grid-cols-8',
27
+ 'sm:grid-cols-9',
28
+ 'sm:grid-cols-10',
29
+ 'sm:grid-cols-11',
30
+ 'sm:grid-cols-12',
31
+ ],
32
+ md: [
33
+ 'md:grid-cols-1',
34
+ 'md:grid-cols-2',
35
+ 'md:grid-cols-3',
36
+ 'md:grid-cols-4',
37
+ 'md:grid-cols-5',
38
+ 'md:grid-cols-6',
39
+ 'md:grid-cols-7',
40
+ 'md:grid-cols-8',
41
+ 'md:grid-cols-9',
42
+ 'md:grid-cols-10',
43
+ 'md:grid-cols-11',
44
+ 'md:grid-cols-12',
45
+ ],
46
+ lg: [
47
+ 'lg:grid-cols-1',
48
+ 'lg:grid-cols-2',
49
+ 'lg:grid-cols-3',
50
+ 'lg:grid-cols-4',
51
+ 'lg:grid-cols-5',
52
+ 'lg:grid-cols-6',
53
+ 'lg:grid-cols-7',
54
+ 'lg:grid-cols-8',
55
+ 'lg:grid-cols-9',
56
+ 'lg:grid-cols-10',
57
+ 'lg:grid-cols-11',
58
+ 'lg:grid-cols-12',
59
+ ],
60
+ xl: [
61
+ 'xl:grid-cols-1',
62
+ 'xl:grid-cols-2',
63
+ 'xl:grid-cols-3',
64
+ 'xl:grid-cols-4',
65
+ 'xl:grid-cols-5',
66
+ 'xl:grid-cols-6',
67
+ 'xl:grid-cols-7',
68
+ 'xl:grid-cols-8',
69
+ 'xl:grid-cols-9',
70
+ 'xl:grid-cols-10',
71
+ 'xl:grid-cols-11',
72
+ 'xl:grid-cols-12',
73
+ ],
74
+ };
75
+ const DEFAULT_NUM_COLUMNS = 3;
76
+ function getColumnClassName(classes, number) {
77
+ var _a;
78
+ const num = Number(number);
79
+ if (!number || Number.isNaN(num)) {
80
+ return getColumnClassName(classes, DEFAULT_NUM_COLUMNS);
81
+ }
82
+ return (_a = classes[num - 1]) !== null && _a !== void 0 ? _a : classes[DEFAULT_NUM_COLUMNS];
83
+ }
84
+ function gridColumnClasses(columns) {
85
+ if (!columns || columns.length <= 1) {
86
+ return getColumnClassName(gridClassNames.main, columns === null || columns === void 0 ? void 0 : columns[0]);
87
+ }
88
+ if (columns.length !== 4) {
89
+ return getColumnClassName(gridClassNames.main, columns[0]);
90
+ }
91
+ return [
92
+ // getColumnClassName(gridClassNames.main, columns[0]),
93
+ getColumnClassName(gridClassNames.sm, columns[0]),
94
+ getColumnClassName(gridClassNames.md, columns[1]),
95
+ getColumnClassName(gridClassNames.lg, columns[2]),
96
+ getColumnClassName(gridClassNames.xl, columns[3]),
97
+ ].join(' ');
98
+ }
99
+ function Grid({ columns, children }) {
100
+ const gridClasses = gridColumnClasses(columns);
101
+ const gutterClasses = 'gap-4';
102
+ return (_jsx("div", Object.assign({ className: classNames('myst-grid grid my-5', gridClasses, gutterClasses) }, { children: children })));
103
+ }
104
+ export const GridRenderer = (node, children) => {
105
+ return (_jsx(Grid, Object.assign({ columns: node.columns }, { children: children }), node.key));
106
+ };
107
+ const GRID_RENDERERS = {
108
+ grid: GridRenderer,
109
+ };
110
+ export default GRID_RENDERERS;
@@ -0,0 +1,18 @@
1
+ /// <reference types="react" />
2
+ import { Heading } from 'myst-spec';
3
+ import type { NodeRenderer } from '@myst-theme/providers';
4
+ export declare function HashLink({ id, kind, title, children, hover, className, hideInPopup, }: {
5
+ id?: string;
6
+ kind: string;
7
+ title?: string;
8
+ hover?: boolean;
9
+ children?: '#' | '¶' | React.ReactNode;
10
+ className?: string;
11
+ hideInPopup?: boolean;
12
+ }): import("react/jsx-runtime").JSX.Element | null;
13
+ declare const Heading: NodeRenderer<Heading>;
14
+ declare const HEADING_RENDERERS: {
15
+ heading: NodeRenderer<Heading>;
16
+ };
17
+ export default HEADING_RENDERERS;
18
+ //# sourceMappingURL=heading.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heading.d.ts","sourceRoot":"","sources":["../../src/heading.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAK1D,wBAAgB,QAAQ,CAAC,EACvB,EAAE,EACF,IAAI,EACJ,KAA8B,EAC9B,QAAc,EACd,KAAK,EACL,SAAyB,EACzB,WAAW,GACZ,EAAE;IACD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,kDA6BA;AAED,QAAA,MAAM,OAAO,EAAE,YAAY,CAAC,OAAO,CAoBlC,CAAC;AAEF,QAAA,MAAM,iBAAiB;;CAEtB,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useXRefState } from '@myst-theme/providers';
3
+ import { createElement as e } from 'react';
4
+ import classNames from 'classnames';
5
+ export function HashLink({ id, kind, title = `Link to this ${kind}`, children = '¶', hover, className = 'font-normal', hideInPopup, }) {
6
+ const { inCrossRef } = useXRefState();
7
+ if (inCrossRef || !id) {
8
+ // If we are in a cross-reference pop-out, either hide hash link
9
+ // or return something that is **not** a link
10
+ return hideInPopup ? null : (_jsx("span", Object.assign({ className: classNames('select-none', className) }, { children: children })));
11
+ }
12
+ const scroll = (evt) => {
13
+ evt.preventDefault();
14
+ const el = document.getElementById(id);
15
+ el === null || el === void 0 ? void 0 : el.scrollIntoView({ behavior: 'smooth' });
16
+ history.replaceState(undefined, '', `#${id}`);
17
+ };
18
+ return (_jsx("a", Object.assign({ className: classNames('select-none no-underline text-inherit hover:text-inherit', className, {
19
+ 'transition-opacity opacity-0 group-hover:opacity-70': hover,
20
+ 'hover:underline': !hover,
21
+ }), onClick: scroll, href: `#${id}`, title: title, "aria-label": title }, { children: children })));
22
+ }
23
+ const Heading = (node, children) => {
24
+ const { enumerator, depth, key, identifier, html_id } = node;
25
+ const id = html_id || identifier || key;
26
+ const textContent = (_jsxs(_Fragment, { children: [enumerator && _jsx("span", Object.assign({ className: "select-none mr-3" }, { children: enumerator })), _jsx("span", Object.assign({ className: "heading-text" }, { children: children })), _jsx(HashLink, { id: id, kind: "Section", className: "px-2 font-normal", hover: true, hideInPopup: true })] }));
27
+ // The `heading-text` class is picked up in the Outline to select without the enumerator and "#" link
28
+ return e(`h${depth}`, {
29
+ key: node.key,
30
+ id,
31
+ className: 'relative group',
32
+ }, textContent);
33
+ };
34
+ const HEADING_RENDERERS = {
35
+ heading: Heading,
36
+ };
37
+ export default HEADING_RENDERERS;
@@ -0,0 +1,7 @@
1
+ import type { NodeRenderer } from '@myst-theme/providers';
2
+ export declare const IFrame: NodeRenderer;
3
+ declare const IFRAME_RENDERERS: {
4
+ iframe: NodeRenderer<any>;
5
+ };
6
+ export default IFRAME_RENDERERS;
7
+ //# sourceMappingURL=iframe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iframe.d.ts","sourceRoot":"","sources":["../../src/iframe.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAuB1D,eAAO,MAAM,MAAM,EAAE,YAkCpB,CAAC;AAEF,QAAA,MAAM,gBAAgB;;CAErB,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /** This is duplicated in image, but a bit different logic */
3
+ function getStyleValue(width) {
4
+ if (typeof width === 'number' && Number.isNaN(width)) {
5
+ // If it is nan, return undefined.
6
+ return undefined;
7
+ }
8
+ if (typeof width === 'string') {
9
+ if (width.endsWith('%')) {
10
+ return getStyleValue(Number(width.replace('%', '')));
11
+ }
12
+ else if (width.endsWith('px')) {
13
+ const px = getStyleValue(Number(width.replace('px', '')));
14
+ return px ? px / 750 : 70;
15
+ }
16
+ else if (!Number.isNaN(Number(width))) {
17
+ return Number(width);
18
+ }
19
+ console.log(`Unknown width ${width} in getImageWidth`);
20
+ return undefined;
21
+ }
22
+ return width;
23
+ }
24
+ export const IFrame = (node) => {
25
+ const width = getStyleValue(node.width) || 70;
26
+ return (_jsx("figure", Object.assign({ id: node.label || undefined, style: { textAlign: node.align || 'center' } }, { children: _jsx("div", Object.assign({ style: {
27
+ position: 'relative',
28
+ display: 'inline-block',
29
+ paddingBottom: '60%',
30
+ width: `min(max(${width}%, 500px), 100%)`,
31
+ } }, { children: _jsx("iframe", { width: "100%", height: "100%", src: node.src, allowFullScreen: true, allow: "autoplay", style: {
32
+ width: '100%',
33
+ height: '100%',
34
+ position: 'absolute',
35
+ top: 0,
36
+ left: 0,
37
+ border: 'none',
38
+ } }) })) }), node.key));
39
+ };
40
+ const IFRAME_RENDERERS = {
41
+ iframe: IFrame,
42
+ };
43
+ export default IFRAME_RENDERERS;
@@ -0,0 +1,11 @@
1
+ import type { Image as ImageNodeSpec } from 'myst-spec';
2
+ import type { NodeRenderer } from '@myst-theme/providers';
3
+ type ImageNode = ImageNodeSpec & {
4
+ height?: string;
5
+ };
6
+ export declare const Image: NodeRenderer<ImageNode>;
7
+ declare const IMAGE_RENDERERS: {
8
+ image: NodeRenderer<ImageNode>;
9
+ };
10
+ export default IMAGE_RENDERERS;
11
+ //# sourceMappingURL=image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/image.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,IAAI,aAAa,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAI1D,KAAK,SAAS,GAAG,aAAa,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA2GrD,eAAO,MAAM,KAAK,EAAE,YAAY,CAAC,SAAS,CAczC,CAAC;AAEF,QAAA,MAAM,eAAe;;CAEpB,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,56 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ function getStyleValue(width) {
3
+ if (typeof width === 'number' && Number.isNaN(width)) {
4
+ // If it is nan, return undefined.
5
+ return undefined;
6
+ }
7
+ if (typeof width === 'string') {
8
+ if (width.endsWith('%')) {
9
+ return width;
10
+ }
11
+ else if (width.endsWith('px')) {
12
+ return Number(width.replace('px', ''));
13
+ }
14
+ else if (!Number.isNaN(Number(width))) {
15
+ return Number(width);
16
+ }
17
+ console.log(`Unknown width ${width} in getImageWidth`);
18
+ return undefined;
19
+ }
20
+ return width;
21
+ }
22
+ function alignToMargin(align) {
23
+ switch (align) {
24
+ case 'left':
25
+ return { marginRight: 'auto' };
26
+ case 'right':
27
+ return { marginLeft: 'auto' };
28
+ case 'center':
29
+ return { margin: '0 auto' };
30
+ default:
31
+ return {};
32
+ }
33
+ }
34
+ function Video({ src, urlSource, align = 'center', width, height, }) {
35
+ return (_jsx("video", { style: Object.assign({ width: getStyleValue(width), height: getStyleValue(height) }, alignToMargin(align)), src: src, "data-canonical-url": urlSource, autoPlay: true,
36
+ // For autoplay, the element needs to be muted to actually start!
37
+ muted: true, "webkit-playsinline": "true", playsInline: true, loop: true }));
38
+ }
39
+ function Picture({ src, srcOptimized, urlSource, align = 'center', alt, width, height, }) {
40
+ if (src.endsWith('.mp4')) {
41
+ return _jsx(Video, { width: width, height: height, align: align, src: src, urlSource: urlSource });
42
+ }
43
+ const image = (_jsx("img", { style: Object.assign({ width: getStyleValue(width), height: getStyleValue(height) }, alignToMargin(align)), src: src, alt: alt, "data-canonical-url": urlSource }));
44
+ if (!srcOptimized)
45
+ return image;
46
+ return (_jsxs("picture", { children: [_jsx("source", { srcSet: srcOptimized, type: "image/webp" }), image] }));
47
+ }
48
+ export const Image = (node) => {
49
+ return (_jsx(Picture, { src: node.url, srcOptimized: node.urlOptimized, alt: node.alt || node.title, width: node.width || undefined, height: node.height || undefined, align: node.align,
50
+ // Note that sourceUrl is for backwards compatibility
51
+ urlSource: node.urlSource || node.sourceUrl }, node.key));
52
+ };
53
+ const IMAGE_RENDERERS = {
54
+ image: Image,
55
+ };
56
+ export default IMAGE_RENDERERS;
@@ -0,0 +1,11 @@
1
+ /// <reference types="react" />
2
+ import type { NodeRenderer } from '@myst-theme/providers';
3
+ import type { GenericParent } from 'myst-common';
4
+ export { CopyIcon } from './components/CopyIcon';
5
+ export { CodeBlock } from './code';
6
+ export { Admonition, AdmonitionKind } from './admonitions';
7
+ export { Details } from './dropdown';
8
+ export { TabSet, TabItem } from './tabs';
9
+ export declare const DEFAULT_RENDERERS: Record<string, NodeRenderer>;
10
+ export declare function useParse(node: GenericParent | null, renderers?: Record<string, NodeRenderer>): import("react").ReactNode;
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAwBjD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAEzC,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAsB1D,CAAC;AAEF,wBAAgB,QAAQ,CACtB,IAAI,EAAE,aAAa,GAAG,IAAI,EAC1B,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAqB,6BAU5D"}
@@ -0,0 +1,40 @@
1
+ import { mystToReact } from './convertToReact';
2
+ import BASIC_RENDERERS from './basic';
3
+ import ADMONITION_RENDERERS from './admonitions';
4
+ import DROPDOWN_RENDERERS from './dropdown';
5
+ import CARD_RENDERERS from './card';
6
+ import GRID_RENDERERS from './grid';
7
+ import CITE_RENDERERS from './cite';
8
+ import FOOTNOTE_RENDERERS from './footnotes';
9
+ import CODE_RENDERERS from './code';
10
+ import MATH_RENDERERS from './math';
11
+ import REACTIVE_RENDERERS from './reactive';
12
+ import IFRAME_RENDERERS from './iframe';
13
+ import IMAGE_RENDERERS from './image';
14
+ import LINK_RENDERERS from './links';
15
+ import HEADING_RENDERERS from './heading';
16
+ import CROSS_REFERENCE_RENDERERS from './crossReference';
17
+ import TAB_RENDERERS from './tabs';
18
+ import EXT_RENDERERS from './extensions';
19
+ import INLINE_EXPRESSION_RENDERERS from './inlineExpression';
20
+ import PROOF_RENDERERS from './proof';
21
+ import EXERCISE_RENDERERS from './exercise';
22
+ import UNKNOWN_MYST_RENDERERS from './unknown';
23
+ export { CopyIcon } from './components/CopyIcon';
24
+ export { CodeBlock } from './code';
25
+ export { Admonition, AdmonitionKind } from './admonitions';
26
+ export { Details } from './dropdown';
27
+ export { TabSet, TabItem } from './tabs';
28
+ export const DEFAULT_RENDERERS = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, BASIC_RENDERERS), UNKNOWN_MYST_RENDERERS), IMAGE_RENDERERS), LINK_RENDERERS), CODE_RENDERERS), MATH_RENDERERS), CITE_RENDERERS), TAB_RENDERERS), IFRAME_RENDERERS), FOOTNOTE_RENDERERS), ADMONITION_RENDERERS), REACTIVE_RENDERERS), HEADING_RENDERERS), CROSS_REFERENCE_RENDERERS), DROPDOWN_RENDERERS), CARD_RENDERERS), GRID_RENDERERS), INLINE_EXPRESSION_RENDERERS), EXT_RENDERERS), PROOF_RENDERERS), EXERCISE_RENDERERS);
29
+ export function useParse(node, renderers = DEFAULT_RENDERERS) {
30
+ if (!node)
31
+ return null;
32
+ try {
33
+ const nodes = mystToReact(node, renderers);
34
+ return nodes;
35
+ }
36
+ catch (error) {
37
+ console.error(error);
38
+ return null;
39
+ }
40
+ }
@@ -0,0 +1,7 @@
1
+ interface Props {
2
+ value: string;
3
+ message?: string;
4
+ }
5
+ export declare function InlineError({ value, message }: Props): import("react/jsx-runtime").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=inlineError.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inlineError.d.ts","sourceRoot":"","sources":["../../src/inlineError.tsx"],"names":[],"mappings":"AAEA,UAAU,KAAK;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,2CAOpD"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import ExclamationCircleIcon from '@heroicons/react/24/outline/ExclamationCircleIcon';
3
+ export function InlineError({ value, message }) {
4
+ return (_jsxs("span", Object.assign({ className: "text-yellow-600", title: message || value }, { children: [_jsx(ExclamationCircleIcon, { className: "inline h-[1em] mr-1" }), value] })));
5
+ }
@@ -0,0 +1,7 @@
1
+ import type { NodeRenderer } from '@myst-theme/providers';
2
+ export declare const InlineExpression: NodeRenderer;
3
+ declare const INLINE_EXPRESSION_RENDERERS: {
4
+ inlineExpression: NodeRenderer<any>;
5
+ };
6
+ export default INLINE_EXPRESSION_RENDERERS;
7
+ //# sourceMappingURL=inlineExpression.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inlineExpression.d.ts","sourceRoot":"","sources":["../../src/inlineExpression.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D,eAAO,MAAM,gBAAgB,EAAE,YAa9B,CAAC;AAEF,QAAA,MAAM,2BAA2B;;CAEhC,CAAC;AAEF,eAAe,2BAA2B,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { InlineError } from './inlineError';
3
+ export const InlineExpression = (node, children) => {
4
+ var _a, _b, _c;
5
+ if (!node.result) {
6
+ return _jsx(InlineError, { value: `Unexecuted inline expression for: ${node.value}` });
7
+ }
8
+ if (((_a = node.result) === null || _a === void 0 ? void 0 : _a.status) !== 'ok') {
9
+ return _jsx(InlineError, { value: `${(_b = node.result) === null || _b === void 0 ? void 0 : _b.ename}: ${(_c = node.result) === null || _c === void 0 ? void 0 : _c.evalue}` });
10
+ }
11
+ // TODO: something with Thebe in the future!
12
+ return (_jsx("span", Object.assign({ title: `Evaluated from: "${node.value}"` }, { children: children }), node.key));
13
+ };
14
+ const INLINE_EXPRESSION_RENDERERS = {
15
+ inlineExpression: InlineExpression,
16
+ };
17
+ export default INLINE_EXPRESSION_RENDERERS;
@@ -0,0 +1,14 @@
1
+ import React from 'react';
2
+ export declare function GithubLink({ kind, children, url, org, repo, raw, file, from, to, issue_number, }: {
3
+ children: React.ReactNode;
4
+ kind: 'file' | 'issue';
5
+ url: string;
6
+ raw: string;
7
+ org: string;
8
+ repo: string;
9
+ file: string;
10
+ from?: number;
11
+ issue_number?: string | number;
12
+ to?: number;
13
+ }): import("react/jsx-runtime").JSX.Element;
14
+ //# sourceMappingURL=github.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/links/github.tsx"],"names":[],"mappings":"AAMA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAoNnD,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,QAAQ,EACR,GAAG,EACH,GAAG,EACH,IAAI,EACJ,GAAG,EACH,IAAI,EACJ,IAAI,EACJ,EAAE,EACF,YAAY,GACb,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;CACb,2CAoCA"}
@@ -0,0 +1,100 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import useSWR from 'swr';
3
+ import ExternalLinkIcon from '@heroicons/react/24/outline/ArrowTopRightOnSquareIcon';
4
+ import PlusCircleIcon from '@heroicons/react/24/outline/PlusCircleIcon';
5
+ import CheckCircleIcon from '@heroicons/react/24/outline/CheckCircleIcon';
6
+ import { HoverPopover } from '../components/HoverPopover';
7
+ import { LinkCard } from '../components/LinkCard';
8
+ import { useEffect, useState } from 'react';
9
+ import { CodeBlock } from '../code';
10
+ import classNames from 'classnames';
11
+ const fetcher = (...args) => fetch(...args).then((res) => {
12
+ if (res.status === 200)
13
+ return res.text();
14
+ throw new Error(`Content returned with status ${res.status}.`);
15
+ });
16
+ const jsonFetcher = (...args) => fetch(...args).then((res) => {
17
+ if (res.status === 200)
18
+ return res.json();
19
+ throw new Error(`Content returned with status ${res.status}.`);
20
+ });
21
+ function extToLanguage(ext) {
22
+ var _a;
23
+ return ((_a = {
24
+ ts: 'typescript',
25
+ js: 'javascript',
26
+ py: 'python',
27
+ md: 'markdown',
28
+ yml: 'yaml',
29
+ }[ext !== null && ext !== void 0 ? ext : '']) !== null && _a !== void 0 ? _a : ext);
30
+ }
31
+ function useLoadWhenOpen(open, url, loader) {
32
+ const [cached, setCached] = useState();
33
+ const { data, error } = useSWR(open ? url : null, loader);
34
+ useEffect(() => {
35
+ setCached(cached || data);
36
+ }, [cached, url, data]);
37
+ return { data: cached, error };
38
+ }
39
+ function GithubFilePreview({ url, raw, org, repo, file, from, to, open, }) {
40
+ const { data, error } = useLoadWhenOpen(open, raw, fetcher);
41
+ let code = data;
42
+ if (error) {
43
+ return (_jsxs("div", Object.assign({ className: "hover-document w-[500px] sm:max-w-[500px]" }, { children: [_jsx("a", Object.assign({ href: url, className: "block text-inherit hover:text-inherit", target: "_blank", rel: "noreferrer" }, { children: _jsx(ExternalLinkIcon, { className: "w-4 h-4 float-right" }) })), _jsxs("div", Object.assign({ className: "mt-2" }, { children: ["Error loading \"", file, "\" from GitHub."] }))] })));
44
+ }
45
+ const lang = extToLanguage(file === null || file === void 0 ? void 0 : file.split('.').pop());
46
+ let startingLineNumber = 1;
47
+ let emphasizeLines = [];
48
+ const offset = 5;
49
+ if (code && from && to) {
50
+ startingLineNumber = from;
51
+ code = code === null || code === void 0 ? void 0 : code.split('\n').slice(from - 1, to).join('\n');
52
+ }
53
+ else if (code && from) {
54
+ startingLineNumber = from + 1 - offset;
55
+ emphasizeLines = [from];
56
+ code = code === null || code === void 0 ? void 0 : code.split('\n').slice(Math.max(0, from - offset), from + offset).join('\n');
57
+ }
58
+ else {
59
+ code = code === null || code === void 0 ? void 0 : code.split('\n').slice(0, 10).join('\n');
60
+ }
61
+ const description = code ? (_jsx(_Fragment, { children: _jsx(CodeBlock, { value: code, lang: lang, filename: file, showLineNumbers: true, startingLineNumber: startingLineNumber, emphasizeLines: emphasizeLines, showCopy: false }) })) : null;
62
+ return (_jsx(LinkCard, { loading: !code, url: url, title: `GitHub - ${org}/${repo}`, description: description, className: "hover-document max-w-[80vw]" }));
63
+ }
64
+ // https://stackoverflow.com/questions/3942878/how-to-decide-font-color-in-white-or-black-depending-on-background-color
65
+ function useWhiteTextColor(bgColor) {
66
+ const color = bgColor.charAt(0) === '#' ? bgColor.substring(1, 7) : bgColor;
67
+ const r = parseInt(color.substring(0, 2), 16); // hexToR
68
+ const g = parseInt(color.substring(2, 4), 16); // hexToG
69
+ const b = parseInt(color.substring(4, 6), 16); // hexToB
70
+ return r * 0.299 + g * 0.587 + b * 0.114 <= 186;
71
+ }
72
+ function GithubIssuePreview({ url, org, repo, issue_number, open, }) {
73
+ var _a, _b;
74
+ const { data, error } = useLoadWhenOpen(open, `https://api.github.com/repos/${org}/${repo}/issues/${issue_number}`, jsonFetcher);
75
+ if (!data && !error) {
76
+ return (_jsx("div", Object.assign({ className: "hover-document w-[500px] sm:max-w-[500px] animate-pulse" }, { children: "Loading..." })));
77
+ }
78
+ const resp = data;
79
+ if (error) {
80
+ return (_jsxs("div", Object.assign({ className: "hover-document" }, { children: [_jsx("a", Object.assign({ href: url, className: "block text-inherit hover:text-inherit", target: "_blank", rel: "noreferrer" }, { children: _jsx(ExternalLinkIcon, { className: "w-4 h-4 float-right" }) })), _jsx("div", Object.assign({ className: "mt-2" }, { children: "Error loading from GitHub." }))] })));
81
+ }
82
+ const dateString = new Date(resp.created_at).toLocaleDateString('en-US', {
83
+ year: 'numeric',
84
+ month: 'long',
85
+ day: 'numeric',
86
+ });
87
+ return (_jsxs("div", Object.assign({ className: "hover-document w-[400px] sm:max-w-[400px] p-3" }, { children: [_jsxs("div", Object.assign({ className: "text-xs font-light" }, { children: [org, "/", repo] })), _jsxs("div", Object.assign({ className: "text-lg font-bold my-2 dark:text-white" }, { children: [resp.state === 'open' && (_jsx(PlusCircleIcon, { className: "w-6 h-6 inline-block text-green-700 dark:text-green-500 mr-2 -translate-y-px" })), resp.state === 'closed' && (_jsx(CheckCircleIcon, { className: "w-6 h-6 inline-block text-purple-700 dark:text-purple-500 mr-2 -translate-y-px" })), resp.title] })), _jsxs("div", Object.assign({ className: "text-xs font-light" }, { children: ["#", issue_number, " opened on ", dateString, " by", ' ', _jsxs("span", Object.assign({ className: "font-normal" }, { children: ["@", resp.user.login] }))] })), _jsx("p", Object.assign({ className: "text-md max-h-[4rem] overflow-hidden" }, { children: resp.body })), ((_a = resp.labels) === null || _a === void 0 ? void 0 : _a.length) > 0 && (_jsx("div", Object.assign({ className: "flex flex-wrap" }, { children: (_b = resp.labels) === null || _b === void 0 ? void 0 : _b.map((label) => (_jsx("span", Object.assign({ className: classNames('mr-1 text-xs inline-flex items-center px-2 py-0.5 rounded-full', {
88
+ 'text-white': useWhiteTextColor(label.color),
89
+ }), style: { backgroundColor: `#${label.color}` } }, { children: label.name }), label.id))) })))] })));
90
+ }
91
+ export function GithubLink({ kind, children, url, org, repo, raw, file, from, to, issue_number, }) {
92
+ return (_jsx(HoverPopover, Object.assign({ card: ({ load }) => {
93
+ if (kind === 'file') {
94
+ return (_jsx(GithubFilePreview, { url: url, raw: raw, file: file, from: from, to: to, open: load, org: org, repo: repo }));
95
+ }
96
+ if (kind === 'issue') {
97
+ return (_jsx(GithubIssuePreview, { url: url, open: load, org: org, issue_number: issue_number, repo: repo }));
98
+ }
99
+ } }, { children: _jsx("a", Object.assign({ href: url, className: "italic", target: "_blank", rel: "noreferrer" }, { children: children })) })));
100
+ }
@@ -0,0 +1,14 @@
1
+ import type { Link } from 'myst-spec';
2
+ import type { NodeRenderer } from '@myst-theme/providers';
3
+ type TransformedLink = Link & {
4
+ internal?: boolean;
5
+ protocol?: string;
6
+ };
7
+ export declare const link: NodeRenderer<TransformedLink>;
8
+ export declare const linkBlock: NodeRenderer<TransformedLink>;
9
+ declare const LINK_RENDERERS: {
10
+ link: NodeRenderer<TransformedLink>;
11
+ linkBlock: NodeRenderer<TransformedLink>;
12
+ };
13
+ export default LINK_RENDERERS;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/links/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAKtC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAO1D,KAAK,eAAe,GAAG,IAAI,GAAG;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA0CxE,eAAO,MAAM,IAAI,EAAE,YAAY,CAAC,eAAe,CAiD9C,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,YAAY,CAAC,eAAe,CAkCnD,CAAC;AAEF,QAAA,MAAM,cAAc;;;CAGnB,CAAC;AAEF,eAAe,cAAc,CAAC"}
@@ -0,0 +1,64 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import ExternalLinkIcon from '@heroicons/react/24/outline/ArrowTopRightOnSquareIcon';
3
+ import LinkIcon from '@heroicons/react/24/outline/LinkIcon';
4
+ import { useLinkProvider, useSiteManifest, useBaseurl, withBaseurl } from '@myst-theme/providers';
5
+ import { HoverPopover } from '../components/HoverPopover';
6
+ import { LinkCard } from '../components/LinkCard';
7
+ import { WikiLink } from './wiki';
8
+ import { RRIDLink } from './rrid';
9
+ import { GithubLink } from './github';
10
+ function getPageInfo(site, path) {
11
+ var _a;
12
+ if (!site)
13
+ return undefined;
14
+ const [projectSlug, pageSlug] = path.replace(/^\//, '').split('/');
15
+ const project = (_a = site.projects) === null || _a === void 0 ? void 0 : _a.find((p) => p.slug === projectSlug || (!p.slug && !pageSlug));
16
+ if (!project)
17
+ return undefined;
18
+ return project.pages.find((p) => p.slug === (pageSlug || projectSlug));
19
+ }
20
+ function InternalLink({ url, children }) {
21
+ const Link = useLinkProvider();
22
+ const site = useSiteManifest();
23
+ const page = getPageInfo(site, url);
24
+ const baseurl = useBaseurl();
25
+ const skipPreview = !page || (!page.description && !page.thumbnail);
26
+ if (!page || skipPreview) {
27
+ return (_jsx(Link, Object.assign({ to: withBaseurl(url, baseurl), prefetch: "intent" }, { children: children })));
28
+ }
29
+ return (_jsx(HoverPopover, Object.assign({ card: _jsx(LinkCard, { internal: true, url: url, title: page.title, description: page.description, thumbnail: page.thumbnailOptimized || page.thumbnail }) }, { children: _jsx(Link, Object.assign({ to: withBaseurl(url, baseurl), prefetch: "intent" }, { children: children })) })));
30
+ }
31
+ export const link = (node, children) => {
32
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
33
+ const internal = (_a = node.internal) !== null && _a !== void 0 ? _a : false;
34
+ const protocol = node.protocol;
35
+ switch (protocol) {
36
+ case 'wiki':
37
+ return (_jsx(WikiLink, Object.assign({ url: node.url, page: (_b = node.data) === null || _b === void 0 ? void 0 : _b.page, wiki: (_c = node.data) === null || _c === void 0 ? void 0 : _c.wiki }, { children: children }), node.key));
38
+ case 'github':
39
+ return (_jsx(GithubLink, Object.assign({ kind: (_d = node.data) === null || _d === void 0 ? void 0 : _d.kind, url: node.url, org: (_e = node.data) === null || _e === void 0 ? void 0 : _e.org, repo: (_f = node.data) === null || _f === void 0 ? void 0 : _f.repo, raw: (_g = node.data) === null || _g === void 0 ? void 0 : _g.raw, file: (_h = node.data) === null || _h === void 0 ? void 0 : _h.file, from: (_j = node.data) === null || _j === void 0 ? void 0 : _j.from, to: (_k = node.data) === null || _k === void 0 ? void 0 : _k.to, issue_number: (_l = node.data) === null || _l === void 0 ? void 0 : _l.issue_number }, { children: children }), node.key));
40
+ case 'rrid':
41
+ return _jsx(RRIDLink, { rrid: (_m = node.data) === null || _m === void 0 ? void 0 : _m.rrid }, node.key);
42
+ default:
43
+ if (internal) {
44
+ return (_jsx(InternalLink, Object.assign({ url: node.url }, { children: children }), node.key));
45
+ }
46
+ return (_jsx("a", Object.assign({ target: "_blank", href: node.url, rel: "noreferrer" }, { children: children }), node.key));
47
+ }
48
+ };
49
+ export const linkBlock = (node, children) => {
50
+ var _a;
51
+ const iconClass = 'w-6 h-6 self-center transition-transform flex-none ml-3';
52
+ const containerClass = 'flex-1 p-4 my-5 block border font-normal hover:border-blue-500 dark:hover:border-blue-400 no-underline hover:text-blue-600 dark:hover:text-blue-400 text-gray-600 dark:text-gray-100 border-gray-200 dark:border-gray-500 rounded shadow-sm hover:shadow-lg dark:shadow-neutral-700';
53
+ const internal = (_a = node.internal) !== null && _a !== void 0 ? _a : false;
54
+ const nested = (_jsxs("div", Object.assign({ className: "flex align-middle h-full" }, { children: [_jsxs("div", Object.assign({ className: "flex-grow" }, { children: [node.title, _jsx("div", Object.assign({ className: "text-xs text-gray-500 dark:text-gray-400" }, { children: children }))] })), internal && _jsx(LinkIcon, { className: iconClass }), !internal && _jsx(ExternalLinkIcon, { className: iconClass })] })));
55
+ if (internal) {
56
+ return (_jsx("a", Object.assign({ href: node.url, className: containerClass }, { children: nested }), node.key));
57
+ }
58
+ return (_jsx("a", Object.assign({ className: containerClass, target: "_blank", rel: "noopener noreferrer", href: node.url }, { children: nested }), node.key));
59
+ };
60
+ const LINK_RENDERERS = {
61
+ link,
62
+ linkBlock,
63
+ };
64
+ export default LINK_RENDERERS;
@@ -0,0 +1,4 @@
1
+ export declare function RRIDLink({ rrid }: {
2
+ rrid: string;
3
+ }): import("react/jsx-runtime").JSX.Element;
4
+ //# sourceMappingURL=rrid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rrid.d.ts","sourceRoot":"","sources":["../../../src/links/rrid.tsx"],"names":[],"mappings":"AAkEA,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,2CAQlD"}