myst-to-react 0.1.18 → 0.1.19
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.
- package/dist/cjs/admonitions.d.ts +32 -0
- package/dist/cjs/admonitions.d.ts.map +1 -0
- package/dist/cjs/admonitions.js +126 -0
- package/dist/cjs/basic.d.ts +62 -0
- package/dist/cjs/basic.d.ts.map +1 -0
- package/dist/cjs/basic.js +125 -0
- package/dist/cjs/card.d.ts +27 -0
- package/dist/cjs/card.d.ts.map +1 -0
- package/dist/cjs/card.js +64 -0
- package/dist/cjs/cite.d.ts +6 -0
- package/dist/cjs/cite.d.ts.map +1 -0
- package/dist/cjs/cite.js +36 -0
- package/dist/cjs/code.d.ts +20 -0
- package/dist/cjs/code.d.ts.map +1 -0
- package/dist/cjs/code.js +63 -0
- package/dist/cjs/components/ClickPopover.d.ts +11 -0
- package/dist/cjs/components/ClickPopover.d.ts.map +1 -0
- package/dist/cjs/components/ClickPopover.js +18 -0
- package/dist/cjs/components/CopyIcon.d.ts +5 -0
- package/dist/cjs/components/CopyIcon.d.ts.map +1 -0
- package/dist/cjs/components/CopyIcon.js +28 -0
- package/dist/cjs/components/HoverPopover.d.ts +9 -0
- package/dist/cjs/components/HoverPopover.d.ts.map +1 -0
- package/dist/cjs/components/HoverPopover.js +32 -0
- package/dist/cjs/components/LinkCard.d.ts +11 -0
- package/dist/cjs/components/LinkCard.d.ts.map +1 -0
- package/dist/cjs/components/LinkCard.js +15 -0
- package/dist/cjs/convertToReact.d.ts +6 -0
- package/dist/cjs/convertToReact.d.ts.map +1 -0
- package/dist/cjs/convertToReact.js +30 -0
- package/dist/cjs/crossReference.d.ts +13 -0
- package/dist/cjs/crossReference.d.ts.map +1 -0
- package/dist/cjs/crossReference.js +91 -0
- package/dist/cjs/dropdown.d.ts +16 -0
- package/dist/cjs/dropdown.d.ts.map +1 -0
- package/dist/cjs/dropdown.js +27 -0
- package/dist/cjs/extensions/chemicalFormula.d.ts +7 -0
- package/dist/cjs/extensions/chemicalFormula.d.ts.map +1 -0
- package/dist/cjs/extensions/chemicalFormula.js +39 -0
- package/dist/cjs/extensions/index.d.ts +4 -0
- package/dist/cjs/extensions/index.d.ts.map +1 -0
- package/dist/cjs/extensions/index.js +9 -0
- package/dist/cjs/extensions/siunits.d.ts +7 -0
- package/dist/cjs/extensions/siunits.d.ts.map +1 -0
- package/dist/cjs/extensions/siunits.js +12 -0
- package/dist/cjs/footnotes.d.ts +11 -0
- package/dist/cjs/footnotes.d.ts.map +1 -0
- package/dist/cjs/footnotes.js +24 -0
- package/dist/cjs/grid.d.ts +11 -0
- package/dist/cjs/grid.d.ts.map +1 -0
- package/dist/cjs/grid.js +117 -0
- package/dist/cjs/heading.d.ts +14 -0
- package/dist/cjs/heading.d.ts.map +1 -0
- package/dist/cjs/heading.js +40 -0
- package/dist/cjs/iframe.d.ts +7 -0
- package/dist/cjs/iframe.d.ts.map +1 -0
- package/dist/cjs/iframe.js +24 -0
- package/dist/cjs/image.d.ts +11 -0
- package/dist/cjs/image.d.ts.map +1 -0
- package/dist/cjs/image.js +52 -0
- package/dist/cjs/index.d.ts +10 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +46 -0
- package/dist/cjs/inlineError.d.ts +8 -0
- package/dist/cjs/inlineError.d.ts.map +1 -0
- package/dist/cjs/inlineError.js +9 -0
- package/dist/cjs/links/github.d.ts +12 -0
- package/dist/cjs/links/github.d.ts.map +1 -0
- package/dist/cjs/links/github.js +63 -0
- package/dist/cjs/links/index.d.ts +14 -0
- package/dist/cjs/links/index.d.ts.map +1 -0
- package/dist/cjs/links/index.js +68 -0
- package/dist/cjs/links/rrid.d.ts +5 -0
- package/dist/cjs/links/rrid.d.ts.map +1 -0
- package/dist/cjs/links/rrid.js +35 -0
- package/dist/cjs/links/wiki.d.ts +8 -0
- package/dist/cjs/links/wiki.d.ts.map +1 -0
- package/dist/cjs/links/wiki.js +39 -0
- package/dist/cjs/math.d.ts +13 -0
- package/dist/cjs/math.d.ts.map +1 -0
- package/dist/cjs/math.js +29 -0
- package/dist/cjs/output/components.d.ts +10 -0
- package/dist/cjs/output/components.d.ts.map +1 -0
- package/dist/cjs/output/components.js +41 -0
- package/dist/cjs/output/error.d.ts +6 -0
- package/dist/cjs/output/error.d.ts.map +1 -0
- package/dist/cjs/output/error.js +15 -0
- package/dist/cjs/output/hooks.d.ts +67 -0
- package/dist/cjs/output/hooks.d.ts.map +1 -0
- package/dist/cjs/output/hooks.js +85 -0
- package/dist/cjs/output/index.d.ts +6 -0
- package/dist/cjs/output/index.d.ts.map +1 -0
- package/dist/cjs/output/index.js +7 -0
- package/dist/cjs/output/jupyter.d.ts +7 -0
- package/dist/cjs/output/jupyter.d.ts.map +1 -0
- package/dist/cjs/output/jupyter.js +75 -0
- package/dist/cjs/output/output.d.ts +7 -0
- package/dist/cjs/output/output.d.ts.map +1 -0
- package/dist/cjs/output/output.js +66 -0
- package/dist/cjs/output/outputBlock.d.ts +10 -0
- package/dist/cjs/output/outputBlock.d.ts.map +1 -0
- package/dist/cjs/output/outputBlock.js +13 -0
- package/dist/cjs/output/safe.d.ts +7 -0
- package/dist/cjs/output/safe.d.ts.map +1 -0
- package/dist/cjs/output/safe.js +77 -0
- package/dist/cjs/output/selectors.d.ts +10 -0
- package/dist/cjs/output/selectors.d.ts.map +1 -0
- package/dist/cjs/output/selectors.js +10 -0
- package/dist/cjs/output/stream.d.ts +6 -0
- package/dist/cjs/output/stream.d.ts.map +1 -0
- package/dist/cjs/output/stream.js +13 -0
- package/dist/cjs/reactive.d.ts +88 -0
- package/dist/cjs/reactive.d.ts.map +1 -0
- package/dist/cjs/reactive.js +64 -0
- package/dist/cjs/tabs.d.ts +12 -0
- package/dist/cjs/tabs.d.ts.map +1 -0
- package/dist/cjs/tabs.js +38 -0
- package/dist/cjs/types.d.ts +7 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +2 -0
- package/dist/types/admonitions.d.ts +32 -0
- package/dist/types/admonitions.d.ts.map +1 -0
- package/dist/types/basic.d.ts +62 -0
- package/dist/types/basic.d.ts.map +1 -0
- package/dist/types/card.d.ts +27 -0
- package/dist/types/card.d.ts.map +1 -0
- package/dist/types/cite.d.ts +6 -0
- package/dist/types/cite.d.ts.map +1 -0
- package/dist/types/code.d.ts +20 -0
- package/dist/types/code.d.ts.map +1 -0
- package/dist/types/components/ClickPopover.d.ts +11 -0
- package/dist/types/components/ClickPopover.d.ts.map +1 -0
- package/dist/types/components/CopyIcon.d.ts +5 -0
- package/dist/types/components/CopyIcon.d.ts.map +1 -0
- package/dist/types/components/HoverPopover.d.ts +9 -0
- package/dist/types/components/HoverPopover.d.ts.map +1 -0
- package/dist/types/components/LinkCard.d.ts +11 -0
- package/dist/types/components/LinkCard.d.ts.map +1 -0
- package/dist/types/convertToReact.d.ts +6 -0
- package/dist/types/convertToReact.d.ts.map +1 -0
- package/dist/types/crossReference.d.ts +13 -0
- package/dist/types/crossReference.d.ts.map +1 -0
- package/dist/types/dropdown.d.ts +16 -0
- package/dist/types/dropdown.d.ts.map +1 -0
- package/dist/types/extensions/chemicalFormula.d.ts +7 -0
- package/dist/types/extensions/chemicalFormula.d.ts.map +1 -0
- package/dist/types/extensions/index.d.ts +4 -0
- package/dist/types/extensions/index.d.ts.map +1 -0
- package/dist/types/extensions/siunits.d.ts +7 -0
- package/dist/types/extensions/siunits.d.ts.map +1 -0
- package/dist/types/footnotes.d.ts +11 -0
- package/dist/types/footnotes.d.ts.map +1 -0
- package/dist/types/grid.d.ts +11 -0
- package/dist/types/grid.d.ts.map +1 -0
- package/dist/types/heading.d.ts +14 -0
- package/dist/types/heading.d.ts.map +1 -0
- package/dist/types/iframe.d.ts +7 -0
- package/dist/types/iframe.d.ts.map +1 -0
- package/dist/types/image.d.ts +11 -0
- package/dist/types/image.d.ts.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/inlineError.d.ts +8 -0
- package/dist/types/inlineError.d.ts.map +1 -0
- package/dist/types/links/github.d.ts +12 -0
- package/dist/types/links/github.d.ts.map +1 -0
- package/dist/types/links/index.d.ts +14 -0
- package/dist/types/links/index.d.ts.map +1 -0
- package/dist/types/links/rrid.d.ts +5 -0
- package/dist/types/links/rrid.d.ts.map +1 -0
- package/dist/types/links/wiki.d.ts +8 -0
- package/dist/types/links/wiki.d.ts.map +1 -0
- package/dist/types/math.d.ts +13 -0
- package/dist/types/math.d.ts.map +1 -0
- package/dist/types/output/components.d.ts +10 -0
- package/dist/types/output/components.d.ts.map +1 -0
- package/dist/types/output/error.d.ts +6 -0
- package/dist/types/output/error.d.ts.map +1 -0
- package/dist/types/output/hooks.d.ts +67 -0
- package/dist/types/output/hooks.d.ts.map +1 -0
- package/dist/types/output/index.d.ts +6 -0
- package/dist/types/output/index.d.ts.map +1 -0
- package/dist/types/output/jupyter.d.ts +7 -0
- package/dist/types/output/jupyter.d.ts.map +1 -0
- package/dist/types/output/output.d.ts +7 -0
- package/dist/types/output/output.d.ts.map +1 -0
- package/dist/types/output/outputBlock.d.ts +10 -0
- package/dist/types/output/outputBlock.d.ts.map +1 -0
- package/dist/types/output/safe.d.ts +7 -0
- package/dist/types/output/safe.d.ts.map +1 -0
- package/dist/types/output/selectors.d.ts +10 -0
- package/dist/types/output/selectors.d.ts.map +1 -0
- package/dist/types/output/stream.d.ts +6 -0
- package/dist/types/output/stream.d.ts.map +1 -0
- package/dist/types/reactive.d.ts +88 -0
- package/dist/types/reactive.d.ts.map +1 -0
- package/dist/types/tabs.d.ts +12 -0
- package/dist/types/tabs.d.ts.map +1 -0
- package/dist/types/types.d.ts +7 -0
- package/dist/types/types.d.ts.map +1 -0
- package/package.json +20 -19
- package/src/admonitions.tsx +0 -183
- package/src/basic.tsx +0 -229
- package/src/card.tsx +0 -153
- package/src/cite.tsx +0 -43
- package/src/code.tsx +0 -119
- package/src/components/ClickPopover.tsx +0 -56
- package/src/components/CopyIcon.tsx +0 -40
- package/src/components/HoverPopover.tsx +0 -60
- package/src/components/LinkCard.tsx +0 -42
- package/src/convertToReact.ts +0 -33
- package/src/crossReference.tsx +0 -139
- package/src/dropdown.tsx +0 -69
- package/src/extensions/chemicalFormula.tsx +0 -42
- package/src/extensions/index.tsx +0 -10
- package/src/extensions/siunits.tsx +0 -15
- package/src/footnotes.tsx +0 -30
- package/src/grid.tsx +0 -127
- package/src/heading.tsx +0 -68
- package/src/iframe.tsx +0 -42
- package/src/image.tsx +0 -97
- package/src/index.tsx +0 -65
- package/src/inlineError.tsx +0 -15
- package/src/links/index.tsx +0 -132
- package/src/links/rrid.tsx +0 -81
- package/src/links/wiki.tsx +0 -119
- package/src/math.tsx +0 -81
- package/src/mermaid.tsx +0 -49
- package/src/myst.tsx +0 -226
- package/src/output/components.tsx +0 -34
- package/src/output/error.tsx +0 -20
- package/src/output/hooks.ts +0 -127
- package/src/output/index.tsx +0 -7
- package/src/output/jupyter.tsx +0 -86
- package/src/output/output.tsx +0 -79
- package/src/output/outputBlock.tsx +0 -21
- package/src/output/safe.tsx +0 -84
- package/src/output/selectors.ts +0 -15
- package/src/output/stream.tsx +0 -18
- package/src/reactive.tsx +0 -64
- package/src/tabs.tsx +0 -63
- package/src/types.ts +0 -6
package/src/grid.tsx
DELETED
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
import classNames from 'classnames';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import type { NodeRenderer } from './types';
|
|
4
|
-
|
|
5
|
-
type GridSpec = {
|
|
6
|
-
type: 'grid';
|
|
7
|
-
columns: number[];
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
const gridClassNames = {
|
|
11
|
-
main: [
|
|
12
|
-
'grid-cols-1',
|
|
13
|
-
'grid-cols-2',
|
|
14
|
-
'grid-cols-3',
|
|
15
|
-
'grid-cols-4',
|
|
16
|
-
'grid-cols-5',
|
|
17
|
-
'grid-cols-6',
|
|
18
|
-
'grid-cols-7',
|
|
19
|
-
'grid-cols-8',
|
|
20
|
-
'grid-cols-9',
|
|
21
|
-
'grid-cols-10',
|
|
22
|
-
'grid-cols-11',
|
|
23
|
-
'grid-cols-12',
|
|
24
|
-
],
|
|
25
|
-
sm: [
|
|
26
|
-
'sm:grid-cols-1',
|
|
27
|
-
'sm:grid-cols-2',
|
|
28
|
-
'sm:grid-cols-3',
|
|
29
|
-
'sm:grid-cols-4',
|
|
30
|
-
'sm:grid-cols-5',
|
|
31
|
-
'sm:grid-cols-6',
|
|
32
|
-
'sm:grid-cols-7',
|
|
33
|
-
'sm:grid-cols-8',
|
|
34
|
-
'sm:grid-cols-9',
|
|
35
|
-
'sm:grid-cols-10',
|
|
36
|
-
'sm:grid-cols-11',
|
|
37
|
-
'sm:grid-cols-12',
|
|
38
|
-
],
|
|
39
|
-
md: [
|
|
40
|
-
'md:grid-cols-1',
|
|
41
|
-
'md:grid-cols-2',
|
|
42
|
-
'md:grid-cols-3',
|
|
43
|
-
'md:grid-cols-4',
|
|
44
|
-
'md:grid-cols-5',
|
|
45
|
-
'md:grid-cols-6',
|
|
46
|
-
'md:grid-cols-7',
|
|
47
|
-
'md:grid-cols-8',
|
|
48
|
-
'md:grid-cols-9',
|
|
49
|
-
'md:grid-cols-10',
|
|
50
|
-
'md:grid-cols-11',
|
|
51
|
-
'md:grid-cols-12',
|
|
52
|
-
],
|
|
53
|
-
lg: [
|
|
54
|
-
'lg:grid-cols-1',
|
|
55
|
-
'lg:grid-cols-2',
|
|
56
|
-
'lg:grid-cols-3',
|
|
57
|
-
'lg:grid-cols-4',
|
|
58
|
-
'lg:grid-cols-5',
|
|
59
|
-
'lg:grid-cols-6',
|
|
60
|
-
'lg:grid-cols-7',
|
|
61
|
-
'lg:grid-cols-8',
|
|
62
|
-
'lg:grid-cols-9',
|
|
63
|
-
'lg:grid-cols-10',
|
|
64
|
-
'lg:grid-cols-11',
|
|
65
|
-
'lg:grid-cols-12',
|
|
66
|
-
],
|
|
67
|
-
xl: [
|
|
68
|
-
'xl:grid-cols-1',
|
|
69
|
-
'xl:grid-cols-2',
|
|
70
|
-
'xl:grid-cols-3',
|
|
71
|
-
'xl:grid-cols-4',
|
|
72
|
-
'xl:grid-cols-5',
|
|
73
|
-
'xl:grid-cols-6',
|
|
74
|
-
'xl:grid-cols-7',
|
|
75
|
-
'xl:grid-cols-8',
|
|
76
|
-
'xl:grid-cols-9',
|
|
77
|
-
'xl:grid-cols-10',
|
|
78
|
-
'xl:grid-cols-11',
|
|
79
|
-
'xl:grid-cols-12',
|
|
80
|
-
],
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
const DEFAULT_NUM_COLUMNS = 3;
|
|
84
|
-
|
|
85
|
-
function getColumnClassName(classes: string[], number?: string | number): string {
|
|
86
|
-
const num = Number(number);
|
|
87
|
-
if (!number || Number.isNaN(num)) {
|
|
88
|
-
return getColumnClassName(classes, DEFAULT_NUM_COLUMNS);
|
|
89
|
-
}
|
|
90
|
-
return classes[num - 1] ?? classes[DEFAULT_NUM_COLUMNS];
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
function gridColumnClasses(columns?: number[]): string {
|
|
94
|
-
if (!columns || columns.length <= 1) {
|
|
95
|
-
return getColumnClassName(gridClassNames.main, columns?.[0]);
|
|
96
|
-
}
|
|
97
|
-
if (columns.length !== 4) {
|
|
98
|
-
return getColumnClassName(gridClassNames.main, columns[0]);
|
|
99
|
-
}
|
|
100
|
-
return [
|
|
101
|
-
// getColumnClassName(gridClassNames.main, columns[0]),
|
|
102
|
-
getColumnClassName(gridClassNames.sm, columns[0]),
|
|
103
|
-
getColumnClassName(gridClassNames.md, columns[1]),
|
|
104
|
-
getColumnClassName(gridClassNames.lg, columns[2]),
|
|
105
|
-
getColumnClassName(gridClassNames.xl, columns[3]),
|
|
106
|
-
].join(' ');
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
function Grid({ columns, children }: { columns?: number[]; children: React.ReactNode }) {
|
|
110
|
-
const gridClasses = gridColumnClasses(columns);
|
|
111
|
-
const gutterClasses = 'gap-4';
|
|
112
|
-
return <div className={classNames('grid', gridClasses, gutterClasses)}>{children}</div>;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
export const GridRenderer: NodeRenderer<GridSpec> = (node, children) => {
|
|
116
|
-
return (
|
|
117
|
-
<Grid key={node.key} columns={node.columns}>
|
|
118
|
-
{children}
|
|
119
|
-
</Grid>
|
|
120
|
-
);
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
const GRID_RENDERERS = {
|
|
124
|
-
grid: GridRenderer,
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
export default GRID_RENDERERS;
|
package/src/heading.tsx
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
import { Heading } from 'myst-spec';
|
|
2
|
-
import type { NodeRenderer } from './types';
|
|
3
|
-
import { createElement as e } from 'react';
|
|
4
|
-
import classNames from 'classnames';
|
|
5
|
-
import { useXRefState } from '@curvenote/ui-providers';
|
|
6
|
-
|
|
7
|
-
function getHelpHashText(kind: string) {
|
|
8
|
-
return `Link to this ${kind}`;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export function HashLink({
|
|
12
|
-
id,
|
|
13
|
-
kind,
|
|
14
|
-
align = 'left',
|
|
15
|
-
}: {
|
|
16
|
-
id: string;
|
|
17
|
-
kind: string;
|
|
18
|
-
align?: 'left' | 'right';
|
|
19
|
-
}) {
|
|
20
|
-
const { inCrossRef } = useXRefState();
|
|
21
|
-
// If we are in a cross-reference popout, hide the hash links
|
|
22
|
-
if (inCrossRef) return null;
|
|
23
|
-
const helpText = getHelpHashText(kind);
|
|
24
|
-
return (
|
|
25
|
-
<a
|
|
26
|
-
className={classNames(
|
|
27
|
-
'select-none absolute top-0 font-normal no-underline transition-opacity opacity-0 group-hover:opacity-70',
|
|
28
|
-
{
|
|
29
|
-
'left-0 -translate-x-[100%] pr-3': align === 'left',
|
|
30
|
-
'right-0 translate-x-[100%] pl-3': align === 'right',
|
|
31
|
-
},
|
|
32
|
-
)}
|
|
33
|
-
href={`#${id}`}
|
|
34
|
-
title={helpText}
|
|
35
|
-
aria-label={helpText}
|
|
36
|
-
>
|
|
37
|
-
#
|
|
38
|
-
</a>
|
|
39
|
-
);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const Heading: NodeRenderer<Heading> = (node, children) => {
|
|
43
|
-
const { enumerator, depth, key, identifier, html_id } = node;
|
|
44
|
-
const id = html_id || identifier || key;
|
|
45
|
-
const textContent = (
|
|
46
|
-
<>
|
|
47
|
-
<HashLink id={id} align="left" kind="Section" />
|
|
48
|
-
{enumerator && <span className="select-none mr-3">{enumerator}</span>}
|
|
49
|
-
<span className="heading-text">{children}</span>
|
|
50
|
-
</>
|
|
51
|
-
);
|
|
52
|
-
// The `heading-text` class is picked up in the Outline to select without the enumerator and "#" link
|
|
53
|
-
return e(
|
|
54
|
-
`h${depth}`,
|
|
55
|
-
{
|
|
56
|
-
key: node.key,
|
|
57
|
-
id,
|
|
58
|
-
className: 'relative group',
|
|
59
|
-
},
|
|
60
|
-
textContent,
|
|
61
|
-
);
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
const HEADING_RENDERERS = {
|
|
65
|
-
heading: Heading,
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
export default HEADING_RENDERERS;
|
package/src/iframe.tsx
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import type { NodeRenderer } from './types';
|
|
2
|
-
|
|
3
|
-
export const IFrame: NodeRenderer = (node) => {
|
|
4
|
-
return (
|
|
5
|
-
<figure
|
|
6
|
-
key={node.key}
|
|
7
|
-
id={node.label || undefined}
|
|
8
|
-
style={{ textAlign: node.align || 'center' }}
|
|
9
|
-
>
|
|
10
|
-
<div
|
|
11
|
-
style={{
|
|
12
|
-
position: 'relative',
|
|
13
|
-
display: 'inline-block',
|
|
14
|
-
paddingBottom: '60%',
|
|
15
|
-
width: `min(max(${node.width || 70}%, 500px), 100%)`,
|
|
16
|
-
}}
|
|
17
|
-
>
|
|
18
|
-
<iframe
|
|
19
|
-
width="100%"
|
|
20
|
-
height="100%"
|
|
21
|
-
src={node.src}
|
|
22
|
-
allowFullScreen
|
|
23
|
-
allow="autoplay"
|
|
24
|
-
style={{
|
|
25
|
-
width: '100%',
|
|
26
|
-
height: '100%',
|
|
27
|
-
position: 'absolute',
|
|
28
|
-
top: 0,
|
|
29
|
-
left: 0,
|
|
30
|
-
border: 'none',
|
|
31
|
-
}}
|
|
32
|
-
></iframe>
|
|
33
|
-
</div>
|
|
34
|
-
</figure>
|
|
35
|
-
);
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
const IFRAME_RENDERERS = {
|
|
39
|
-
iframe: IFrame,
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
export default IFRAME_RENDERERS;
|
package/src/image.tsx
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import type { Alignment } from '@curvenote/blocks';
|
|
2
|
-
import type { Image as ImageNodeSpec } from 'myst-spec';
|
|
3
|
-
import type { NodeRenderer } from './types';
|
|
4
|
-
|
|
5
|
-
type ImageNode = ImageNodeSpec & { height?: string };
|
|
6
|
-
|
|
7
|
-
function getStyleValue(width?: number | string): string | number | undefined {
|
|
8
|
-
if (typeof width === 'number' && Number.isNaN(width)) {
|
|
9
|
-
// If it is nan, return undefined.
|
|
10
|
-
return undefined;
|
|
11
|
-
}
|
|
12
|
-
if (typeof width === 'string') {
|
|
13
|
-
if (width.endsWith('%')) {
|
|
14
|
-
return width;
|
|
15
|
-
} else if (width.endsWith('px')) {
|
|
16
|
-
return Number(width.replace('px', ''));
|
|
17
|
-
} else if (!Number.isNaN(Number(width))) {
|
|
18
|
-
return Number(width);
|
|
19
|
-
}
|
|
20
|
-
console.log(`Unknown width ${width} in getImageWidth`);
|
|
21
|
-
return undefined;
|
|
22
|
-
}
|
|
23
|
-
return width;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function alignToMargin(align: string) {
|
|
27
|
-
switch (align) {
|
|
28
|
-
case 'left':
|
|
29
|
-
return { marginRight: 'auto' };
|
|
30
|
-
case 'right':
|
|
31
|
-
return { marginLeft: 'auto' };
|
|
32
|
-
case 'center':
|
|
33
|
-
return { margin: '0 auto' };
|
|
34
|
-
default:
|
|
35
|
-
return {};
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function Picture({
|
|
40
|
-
src,
|
|
41
|
-
srcOptimized,
|
|
42
|
-
urlSource,
|
|
43
|
-
align = 'center',
|
|
44
|
-
alt,
|
|
45
|
-
width,
|
|
46
|
-
height,
|
|
47
|
-
}: {
|
|
48
|
-
src: string;
|
|
49
|
-
srcOptimized?: string;
|
|
50
|
-
urlSource?: string;
|
|
51
|
-
alt?: string;
|
|
52
|
-
width?: string;
|
|
53
|
-
height?: string;
|
|
54
|
-
align?: Alignment;
|
|
55
|
-
}) {
|
|
56
|
-
const image = (
|
|
57
|
-
<img
|
|
58
|
-
style={{
|
|
59
|
-
width: getStyleValue(width),
|
|
60
|
-
height: getStyleValue(height),
|
|
61
|
-
...alignToMargin(align),
|
|
62
|
-
}}
|
|
63
|
-
src={src}
|
|
64
|
-
alt={alt}
|
|
65
|
-
data-canonical-url={urlSource}
|
|
66
|
-
/>
|
|
67
|
-
);
|
|
68
|
-
if (!srcOptimized) return image;
|
|
69
|
-
return (
|
|
70
|
-
<picture>
|
|
71
|
-
<source srcSet={srcOptimized} type="image/webp" />
|
|
72
|
-
{image}
|
|
73
|
-
</picture>
|
|
74
|
-
);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
export const Image: NodeRenderer<ImageNode> = (node) => {
|
|
78
|
-
return (
|
|
79
|
-
<Picture
|
|
80
|
-
key={node.key}
|
|
81
|
-
src={node.url}
|
|
82
|
-
srcOptimized={(node as any).urlOptimized}
|
|
83
|
-
alt={node.alt || node.title}
|
|
84
|
-
width={node.width || undefined}
|
|
85
|
-
height={node.height || undefined}
|
|
86
|
-
align={node.align}
|
|
87
|
-
// Note that sourceUrl is for backwards compatibility
|
|
88
|
-
urlSource={(node as any).urlSource || (node as any).sourceUrl}
|
|
89
|
-
/>
|
|
90
|
-
);
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
const IMAGE_RENDERERS = {
|
|
94
|
-
image: Image,
|
|
95
|
-
};
|
|
96
|
-
|
|
97
|
-
export default IMAGE_RENDERERS;
|
package/src/index.tsx
DELETED
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import type { NodeRenderer } from './types';
|
|
2
|
-
import type { GenericParent } from 'mystjs';
|
|
3
|
-
import { mystToReact } from './convertToReact';
|
|
4
|
-
import BASIC_RENDERERS from './basic';
|
|
5
|
-
import ADMONITION_RENDERERS from './admonitions';
|
|
6
|
-
import DROPDOWN_RENDERERS from './dropdown';
|
|
7
|
-
import CARD_RENDERERS from './card';
|
|
8
|
-
import GRID_RENDERERS from './grid';
|
|
9
|
-
import CITE_RENDERERS from './cite';
|
|
10
|
-
import FOOTNOTE_RENDERERS from './footnotes';
|
|
11
|
-
import CODE_RENDERERS from './code';
|
|
12
|
-
import MATH_RENDERERS from './math';
|
|
13
|
-
import REACTIVE_RENDERERS from './reactive';
|
|
14
|
-
import IFRAME_RENDERERS from './iframe';
|
|
15
|
-
import IMAGE_RENDERERS from './image';
|
|
16
|
-
import LINK_RENDERERS from './links';
|
|
17
|
-
import OUTPUT_RENDERERS from './output';
|
|
18
|
-
import HEADING_RENDERERS from './heading';
|
|
19
|
-
import CROSS_REFERENCE_RENDERERS from './crossReference';
|
|
20
|
-
import TAB_RENDERERS from './tabs';
|
|
21
|
-
import MYST_RENDERERS from './myst';
|
|
22
|
-
import MERMAID_RENDERERS from './mermaid';
|
|
23
|
-
export { MySTRenderer } from './myst';
|
|
24
|
-
import EXT_RENDERERS from './extensions';
|
|
25
|
-
|
|
26
|
-
export type { NodeRenderer } from './types';
|
|
27
|
-
export { CopyIcon } from './components/CopyIcon';
|
|
28
|
-
export { CodeBlock } from './code';
|
|
29
|
-
|
|
30
|
-
export const DEFAULT_RENDERERS: Record<string, NodeRenderer> = {
|
|
31
|
-
...BASIC_RENDERERS,
|
|
32
|
-
...IMAGE_RENDERERS,
|
|
33
|
-
...LINK_RENDERERS,
|
|
34
|
-
...CODE_RENDERERS,
|
|
35
|
-
...MATH_RENDERERS,
|
|
36
|
-
...CITE_RENDERERS,
|
|
37
|
-
...TAB_RENDERERS,
|
|
38
|
-
...IFRAME_RENDERERS,
|
|
39
|
-
...FOOTNOTE_RENDERERS,
|
|
40
|
-
...ADMONITION_RENDERERS,
|
|
41
|
-
...REACTIVE_RENDERERS,
|
|
42
|
-
...OUTPUT_RENDERERS,
|
|
43
|
-
...HEADING_RENDERERS,
|
|
44
|
-
...CROSS_REFERENCE_RENDERERS,
|
|
45
|
-
...MYST_RENDERERS,
|
|
46
|
-
...MERMAID_RENDERERS,
|
|
47
|
-
...DROPDOWN_RENDERERS,
|
|
48
|
-
...CARD_RENDERERS,
|
|
49
|
-
...GRID_RENDERERS,
|
|
50
|
-
...EXT_RENDERERS,
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
export function useParse(
|
|
54
|
-
node: GenericParent | null,
|
|
55
|
-
renderers: Record<string, NodeRenderer> = DEFAULT_RENDERERS,
|
|
56
|
-
) {
|
|
57
|
-
if (!node) return null;
|
|
58
|
-
try {
|
|
59
|
-
const nodes = mystToReact(node, renderers);
|
|
60
|
-
return nodes;
|
|
61
|
-
} catch (error) {
|
|
62
|
-
console.error(error);
|
|
63
|
-
return null;
|
|
64
|
-
}
|
|
65
|
-
}
|
package/src/inlineError.tsx
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { ExclamationIcon } from '@heroicons/react/outline';
|
|
2
|
-
|
|
3
|
-
interface Props {
|
|
4
|
-
value: string;
|
|
5
|
-
message?: string;
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
export function InlineError({ value, message }: Props) {
|
|
9
|
-
return (
|
|
10
|
-
<span className="text-yellow-600" title={message || value}>
|
|
11
|
-
<ExclamationIcon className="inline h-[1em] mr-1" />
|
|
12
|
-
{value}
|
|
13
|
-
</span>
|
|
14
|
-
);
|
|
15
|
-
}
|
package/src/links/index.tsx
DELETED
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import type { Link } from 'myst-spec';
|
|
2
|
-
import { Link as RemixLink } from '@remix-run/react';
|
|
3
|
-
import { ExternalLinkIcon, LinkIcon } from '@heroicons/react/outline';
|
|
4
|
-
import { useSiteManifest } from '@curvenote/ui-providers';
|
|
5
|
-
import type { ManifestProjectPage, SiteManifest } from '@curvenote/site-common';
|
|
6
|
-
import type { NodeRenderer } from '../types';
|
|
7
|
-
import { HoverPopover } from '../components/HoverPopover';
|
|
8
|
-
import { LinkCard } from '../components/LinkCard';
|
|
9
|
-
import { WikiLink } from './wiki';
|
|
10
|
-
import { RRIDLink } from './rrid';
|
|
11
|
-
|
|
12
|
-
type TransformedLink = Link & { internal?: boolean; protocol?: string };
|
|
13
|
-
|
|
14
|
-
function getPageInfo(
|
|
15
|
-
site: SiteManifest | undefined,
|
|
16
|
-
path: string,
|
|
17
|
-
): ManifestProjectPage | undefined {
|
|
18
|
-
if (!site) return undefined;
|
|
19
|
-
const [projectSlug, pageSlug] = path.replace(/^\//, '').split('/');
|
|
20
|
-
const project = site.projects.find((p) => p.slug === projectSlug);
|
|
21
|
-
if (!project) return undefined;
|
|
22
|
-
return project.pages.find(
|
|
23
|
-
(p) => (p as ManifestProjectPage).slug === pageSlug,
|
|
24
|
-
) as ManifestProjectPage;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
function InternalLink({ url, children }: { url: string; children: React.ReactNode }) {
|
|
28
|
-
const site = useSiteManifest();
|
|
29
|
-
const page = getPageInfo(site, url);
|
|
30
|
-
const skipPreview = !page || (!page.description && !page.thumbnail);
|
|
31
|
-
if (!page || skipPreview) {
|
|
32
|
-
return (
|
|
33
|
-
<RemixLink to={url} prefetch="intent">
|
|
34
|
-
{children}
|
|
35
|
-
</RemixLink>
|
|
36
|
-
);
|
|
37
|
-
}
|
|
38
|
-
return (
|
|
39
|
-
<HoverPopover
|
|
40
|
-
card={
|
|
41
|
-
<LinkCard
|
|
42
|
-
internal
|
|
43
|
-
url={url}
|
|
44
|
-
title={page.title}
|
|
45
|
-
description={page.description}
|
|
46
|
-
thumbnail={page.thumbnailOptimized || page.thumbnail}
|
|
47
|
-
/>
|
|
48
|
-
}
|
|
49
|
-
>
|
|
50
|
-
<RemixLink to={url} prefetch="intent">
|
|
51
|
-
{children}
|
|
52
|
-
</RemixLink>
|
|
53
|
-
</HoverPopover>
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export const link: NodeRenderer<TransformedLink> = (node, children) => {
|
|
58
|
-
const internal = node.internal ?? false;
|
|
59
|
-
const protocol = node.protocol;
|
|
60
|
-
|
|
61
|
-
switch (protocol) {
|
|
62
|
-
case 'wiki':
|
|
63
|
-
return (
|
|
64
|
-
<WikiLink
|
|
65
|
-
key={node.key}
|
|
66
|
-
url={node.url}
|
|
67
|
-
page={node.data?.page as string}
|
|
68
|
-
wiki={node.data?.wiki as string}
|
|
69
|
-
>
|
|
70
|
-
{children}
|
|
71
|
-
</WikiLink>
|
|
72
|
-
);
|
|
73
|
-
case 'rrid':
|
|
74
|
-
return <RRIDLink key={node.key} rrid={node.data?.rrid as string} />;
|
|
75
|
-
default:
|
|
76
|
-
if (internal) {
|
|
77
|
-
return (
|
|
78
|
-
<InternalLink key={node.key} url={node.url}>
|
|
79
|
-
{children}
|
|
80
|
-
</InternalLink>
|
|
81
|
-
);
|
|
82
|
-
}
|
|
83
|
-
return (
|
|
84
|
-
<a key={node.key} target="_blank" href={node.url} rel="noreferrer">
|
|
85
|
-
{children}
|
|
86
|
-
</a>
|
|
87
|
-
);
|
|
88
|
-
}
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
export const linkBlock: NodeRenderer<TransformedLink> = (node, children) => {
|
|
92
|
-
const iconClass = 'w-6 h-6 self-center transition-transform flex-none ml-3';
|
|
93
|
-
const containerClass =
|
|
94
|
-
'flex-1 p-4 my-4 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';
|
|
95
|
-
const internal = node.internal ?? false;
|
|
96
|
-
const nested = (
|
|
97
|
-
<div className="flex align-middle h-full">
|
|
98
|
-
<div className="flex-grow">
|
|
99
|
-
{node.title}
|
|
100
|
-
<div className="text-xs text-gray-500 dark:text-gray-400">{children}</div>
|
|
101
|
-
</div>
|
|
102
|
-
{internal && <LinkIcon className={iconClass} />}
|
|
103
|
-
{!internal && <ExternalLinkIcon className={iconClass} />}
|
|
104
|
-
</div>
|
|
105
|
-
);
|
|
106
|
-
|
|
107
|
-
if (internal) {
|
|
108
|
-
return (
|
|
109
|
-
<RemixLink key={node.key} to={node.url} prefetch="intent" className={containerClass}>
|
|
110
|
-
{nested}
|
|
111
|
-
</RemixLink>
|
|
112
|
-
);
|
|
113
|
-
}
|
|
114
|
-
return (
|
|
115
|
-
<a
|
|
116
|
-
key={node.key}
|
|
117
|
-
className={containerClass}
|
|
118
|
-
target="_blank"
|
|
119
|
-
rel="noopener noreferrer"
|
|
120
|
-
href={node.url}
|
|
121
|
-
>
|
|
122
|
-
{nested}
|
|
123
|
-
</a>
|
|
124
|
-
);
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
const LINK_RENDERERS = {
|
|
128
|
-
link,
|
|
129
|
-
linkBlock,
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
export default LINK_RENDERERS;
|
package/src/links/rrid.tsx
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import useSWR from 'swr';
|
|
2
|
-
import { ExternalLinkIcon } from '@heroicons/react/outline';
|
|
3
|
-
import { ClickPopover } from '../components/ClickPopover';
|
|
4
|
-
|
|
5
|
-
const fetcher = (...args: Parameters<typeof fetch>) =>
|
|
6
|
-
fetch(...args).then((res) => {
|
|
7
|
-
if (res.status === 200) return res.json();
|
|
8
|
-
throw new Error(`Content returned with status ${res.status}.`);
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
function RRIDChild({ rrid }: { rrid: string }) {
|
|
12
|
-
const { data, error } = useSWR(`https://scicrunch.org/resolver/${rrid}.json`, fetcher);
|
|
13
|
-
if (!data && !error) {
|
|
14
|
-
return <span className="animate-pulse">Loading...</span>;
|
|
15
|
-
}
|
|
16
|
-
const hit = data?.hits?.hits?.[0];
|
|
17
|
-
if (error || !hit) {
|
|
18
|
-
return <span>Error loading {rrid}.</span>;
|
|
19
|
-
}
|
|
20
|
-
const {
|
|
21
|
-
name: title,
|
|
22
|
-
curie,
|
|
23
|
-
description,
|
|
24
|
-
supercategory,
|
|
25
|
-
keywords,
|
|
26
|
-
types: categories,
|
|
27
|
-
} = hit?._source?.item ?? {};
|
|
28
|
-
const category = supercategory?.[0]?.name;
|
|
29
|
-
const types = (categories?.map(({ name }: { name: string }) => name) as string[]) ?? [];
|
|
30
|
-
const tags = (keywords?.map(({ keyword }: { keyword: string }) => keyword) as string[]) ?? [];
|
|
31
|
-
return (
|
|
32
|
-
<div>
|
|
33
|
-
<a
|
|
34
|
-
href={`https://scicrunch.org/resolver/${rrid}`}
|
|
35
|
-
target="_blank"
|
|
36
|
-
rel="noopener noreferrer"
|
|
37
|
-
className="absolute top-4 right-1 opacity-70 hover:opacity-100"
|
|
38
|
-
>
|
|
39
|
-
<ExternalLinkIcon className="w-6 h-6" />
|
|
40
|
-
</a>
|
|
41
|
-
<p className="text-sm font-light">RRID: {category}</p>
|
|
42
|
-
<div className="text-xl font-bold mb-4">
|
|
43
|
-
{title} <code>{curie}</code>
|
|
44
|
-
</div>
|
|
45
|
-
<p className="text-md">{description}</p>
|
|
46
|
-
{types.length > 0 && (
|
|
47
|
-
<>
|
|
48
|
-
<div className="text-xs font-thin my-2">Categories</div>
|
|
49
|
-
<div className="flex flex-wrap ml-1">
|
|
50
|
-
{types?.map((tag) => (
|
|
51
|
-
<span className="ml-1 text-xs inline-flex items-center uppercase px-3 py-1 rounded-full border">
|
|
52
|
-
{tag}
|
|
53
|
-
</span>
|
|
54
|
-
))}
|
|
55
|
-
</div>
|
|
56
|
-
</>
|
|
57
|
-
)}
|
|
58
|
-
{tags.length > 0 && (
|
|
59
|
-
<>
|
|
60
|
-
<div className="text-xs font-thin my-2">Tags</div>
|
|
61
|
-
<div className="flex flex-wrap ml-1">
|
|
62
|
-
{tags?.map((tag) => (
|
|
63
|
-
<span className="ml-1 text-xs inline-flex items-center uppercase px-3 py-1 rounded-full border">
|
|
64
|
-
{tag}
|
|
65
|
-
</span>
|
|
66
|
-
))}
|
|
67
|
-
</div>
|
|
68
|
-
</>
|
|
69
|
-
)}
|
|
70
|
-
</div>
|
|
71
|
-
);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export function RRIDLink({ rrid }: { rrid: string }) {
|
|
75
|
-
return (
|
|
76
|
-
<ClickPopover card={<RRIDChild rrid={rrid} />}>
|
|
77
|
-
<span>RRID: </span>
|
|
78
|
-
<cite className="italic">{rrid}</cite>
|
|
79
|
-
</ClickPopover>
|
|
80
|
-
);
|
|
81
|
-
}
|