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.
- package/dist/cjs/admonitions.d.ts +1 -1
- package/dist/cjs/admonitions.d.ts.map +1 -1
- package/dist/cjs/basic.d.ts.map +1 -1
- package/dist/cjs/basic.js +1 -1
- package/dist/cjs/cite.d.ts +1 -2
- package/dist/cjs/cite.d.ts.map +1 -1
- package/dist/cjs/cite.js +2 -2
- package/dist/cjs/code.d.ts +1 -2
- package/dist/cjs/code.d.ts.map +1 -1
- package/dist/cjs/components/CopyIcon.d.ts +1 -2
- package/dist/cjs/components/CopyIcon.d.ts.map +1 -1
- package/dist/cjs/components/HoverPopover.d.ts +1 -1
- package/dist/cjs/components/HoverPopover.d.ts.map +1 -1
- package/dist/cjs/components/HoverPopover.js +1 -1
- package/dist/cjs/components/LinkCard.d.ts +1 -1
- package/dist/cjs/components/LinkCard.d.ts.map +1 -1
- package/dist/cjs/crossReference.d.ts +3 -2
- package/dist/cjs/crossReference.d.ts.map +1 -1
- package/dist/cjs/crossReference.js +89 -37
- package/dist/cjs/dropdown.d.ts +1 -1
- package/dist/cjs/dropdown.d.ts.map +1 -1
- package/dist/cjs/exercise.d.ts +1 -1
- package/dist/cjs/exercise.d.ts.map +1 -1
- package/dist/cjs/heading.d.ts +1 -1
- package/dist/cjs/heading.d.ts.map +1 -1
- package/dist/cjs/inlineError.d.ts +1 -2
- package/dist/cjs/inlineError.d.ts.map +1 -1
- package/dist/cjs/links/github.d.ts +1 -1
- package/dist/cjs/links/github.d.ts.map +1 -1
- package/dist/cjs/links/rrid.d.ts +1 -2
- package/dist/cjs/links/rrid.d.ts.map +1 -1
- package/dist/cjs/links/wiki.d.ts +1 -1
- package/dist/cjs/links/wiki.d.ts.map +1 -1
- package/dist/cjs/proof.d.ts +1 -1
- package/dist/cjs/proof.d.ts.map +1 -1
- package/dist/cjs/tabs.d.ts +2 -2
- package/dist/cjs/tabs.d.ts.map +1 -1
- package/dist/esm/admonitions.d.ts +34 -0
- package/dist/esm/admonitions.d.ts.map +1 -0
- package/dist/esm/admonitions.js +146 -0
- package/dist/esm/basic.d.ts +64 -0
- package/dist/esm/basic.d.ts.map +1 -0
- package/dist/esm/basic.js +128 -0
- package/dist/esm/card.d.ts +27 -0
- package/dist/esm/card.d.ts.map +1 -0
- package/dist/esm/card.js +54 -0
- package/dist/esm/cite.d.ts +11 -0
- package/dist/esm/cite.d.ts.map +1 -0
- package/dist/esm/cite.js +36 -0
- package/dist/esm/code.d.ts +61 -0
- package/dist/esm/code.d.ts.map +1 -0
- package/dist/esm/code.js +68 -0
- package/dist/esm/components/CopyIcon.d.ts +4 -0
- package/dist/esm/components/CopyIcon.d.ts.map +1 -0
- package/dist/esm/components/CopyIcon.js +20 -0
- package/dist/esm/components/HoverPopover.d.ts +11 -0
- package/dist/esm/components/HoverPopover.d.ts.map +1 -0
- package/dist/esm/components/HoverPopover.js +7 -0
- package/dist/esm/components/LinkCard.d.ts +11 -0
- package/dist/esm/components/LinkCard.d.ts.map +1 -0
- package/dist/esm/components/LinkCard.js +12 -0
- package/dist/esm/convertToReact.d.ts +6 -0
- package/dist/esm/convertToReact.d.ts.map +1 -0
- package/dist/esm/convertToReact.js +25 -0
- package/dist/esm/crossReference.d.ts +17 -0
- package/dist/esm/crossReference.d.ts.map +1 -0
- package/dist/esm/crossReference.js +153 -0
- package/dist/esm/dropdown.d.ts +22 -0
- package/dist/esm/dropdown.d.ts.map +1 -0
- package/dist/esm/dropdown.js +19 -0
- package/dist/esm/exercise.d.ts +22 -0
- package/dist/esm/exercise.d.ts.map +1 -0
- package/dist/esm/exercise.js +98 -0
- package/dist/esm/extensions/chemicalFormula.d.ts +7 -0
- package/dist/esm/extensions/chemicalFormula.d.ts.map +1 -0
- package/dist/esm/extensions/chemicalFormula.js +35 -0
- package/dist/esm/extensions/index.d.ts +4 -0
- package/dist/esm/extensions/index.d.ts.map +1 -0
- package/dist/esm/extensions/index.js +4 -0
- package/dist/esm/extensions/siunits.d.ts +7 -0
- package/dist/esm/extensions/siunits.d.ts.map +1 -0
- package/dist/esm/extensions/siunits.js +11 -0
- package/dist/esm/footnotes.d.ts +8 -0
- package/dist/esm/footnotes.d.ts.map +1 -0
- package/dist/esm/footnotes.js +23 -0
- package/dist/esm/grid.d.ts +11 -0
- package/dist/esm/grid.d.ts.map +1 -0
- package/dist/esm/grid.js +110 -0
- package/dist/esm/heading.d.ts +18 -0
- package/dist/esm/heading.d.ts.map +1 -0
- package/dist/esm/heading.js +37 -0
- package/dist/esm/iframe.d.ts +7 -0
- package/dist/esm/iframe.d.ts.map +1 -0
- package/dist/esm/iframe.js +43 -0
- package/dist/esm/image.d.ts +11 -0
- package/dist/esm/image.d.ts.map +1 -0
- package/dist/esm/image.js +56 -0
- package/dist/esm/index.d.ts +11 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +40 -0
- package/dist/esm/inlineError.d.ts +7 -0
- package/dist/esm/inlineError.d.ts.map +1 -0
- package/dist/esm/inlineError.js +5 -0
- package/dist/esm/inlineExpression.d.ts +7 -0
- package/dist/esm/inlineExpression.d.ts.map +1 -0
- package/dist/esm/inlineExpression.js +17 -0
- package/dist/esm/links/github.d.ts +14 -0
- package/dist/esm/links/github.d.ts.map +1 -0
- package/dist/esm/links/github.js +100 -0
- package/dist/esm/links/index.d.ts +14 -0
- package/dist/esm/links/index.d.ts.map +1 -0
- package/dist/esm/links/index.js +64 -0
- package/dist/esm/links/rrid.d.ts +4 -0
- package/dist/esm/links/rrid.d.ts.map +1 -0
- package/dist/esm/links/rrid.js +27 -0
- package/dist/esm/links/wiki.d.ts +8 -0
- package/dist/esm/links/wiki.d.ts.map +1 -0
- package/dist/esm/links/wiki.js +32 -0
- package/dist/esm/math.d.ts +13 -0
- package/dist/esm/math.d.ts.map +1 -0
- package/dist/esm/math.js +23 -0
- package/dist/esm/proof.d.ts +36 -0
- package/dist/esm/proof.d.ts.map +1 -0
- package/dist/esm/proof.js +103 -0
- package/dist/esm/reactive.d.ts +88 -0
- package/dist/esm/reactive.d.ts.map +1 -0
- package/dist/esm/reactive.js +57 -0
- package/dist/esm/tabs.d.ts +27 -0
- package/dist/esm/tabs.d.ts.map +1 -0
- package/dist/esm/tabs.js +60 -0
- package/dist/esm/unknown.d.ts +8 -0
- package/dist/esm/unknown.d.ts.map +1 -0
- package/dist/esm/unknown.js +11 -0
- package/dist/types/admonitions.d.ts +1 -1
- package/dist/types/admonitions.d.ts.map +1 -1
- package/dist/types/basic.d.ts.map +1 -1
- package/dist/types/cite.d.ts +1 -2
- package/dist/types/cite.d.ts.map +1 -1
- package/dist/types/code.d.ts +1 -2
- package/dist/types/code.d.ts.map +1 -1
- package/dist/types/components/CopyIcon.d.ts +1 -2
- package/dist/types/components/CopyIcon.d.ts.map +1 -1
- package/dist/types/components/HoverPopover.d.ts +1 -1
- package/dist/types/components/HoverPopover.d.ts.map +1 -1
- package/dist/types/components/LinkCard.d.ts +1 -1
- package/dist/types/components/LinkCard.d.ts.map +1 -1
- package/dist/types/crossReference.d.ts +3 -2
- package/dist/types/crossReference.d.ts.map +1 -1
- package/dist/types/dropdown.d.ts +1 -1
- package/dist/types/dropdown.d.ts.map +1 -1
- package/dist/types/exercise.d.ts +1 -1
- package/dist/types/exercise.d.ts.map +1 -1
- package/dist/types/heading.d.ts +1 -1
- package/dist/types/heading.d.ts.map +1 -1
- package/dist/types/inlineError.d.ts +1 -2
- package/dist/types/inlineError.d.ts.map +1 -1
- package/dist/types/links/github.d.ts +1 -1
- package/dist/types/links/github.d.ts.map +1 -1
- package/dist/types/links/rrid.d.ts +1 -2
- package/dist/types/links/rrid.d.ts.map +1 -1
- package/dist/types/links/wiki.d.ts +1 -1
- package/dist/types/links/wiki.d.ts.map +1 -1
- package/dist/types/proof.d.ts +1 -1
- package/dist/types/proof.d.ts.map +1 -1
- package/dist/types/tabs.d.ts +2 -2
- package/dist/types/tabs.d.ts.map +1 -1
- package/package.json +7 -5
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import InformationCircleIcon from '@heroicons/react/24/outline/InformationCircleIcon';
|
|
3
|
+
import OExclamationIcon from '@heroicons/react/24/outline/ExclamationCircleIcon';
|
|
4
|
+
import MegaphoneIcon from '@heroicons/react/24/outline/MegaphoneIcon';
|
|
5
|
+
import PencilSquareIcon from '@heroicons/react/24/outline/PencilSquareIcon';
|
|
6
|
+
import ArrowRightCircleIcon from '@heroicons/react/24/outline/ArrowRightCircleIcon';
|
|
7
|
+
import LightBulbIcon from '@heroicons/react/24/outline/LightBulbIcon';
|
|
8
|
+
import SExclamationIcon from '@heroicons/react/24/solid/ExclamationTriangleIcon';
|
|
9
|
+
import SExclamationCircleIcon from '@heroicons/react/24/solid/ExclamationCircleIcon';
|
|
10
|
+
import XCircleIcon from '@heroicons/react/24/solid/XCircleIcon';
|
|
11
|
+
import BoltIcon from '@heroicons/react/24/solid/BoltIcon';
|
|
12
|
+
import ChevronRightIcon from '@heroicons/react/24/solid/ChevronRightIcon';
|
|
13
|
+
import classNames from 'classnames';
|
|
14
|
+
// import { AdmonitionKind } from 'myst-common';
|
|
15
|
+
// TODO: get this from myst-spec?
|
|
16
|
+
export var AdmonitionKind;
|
|
17
|
+
(function (AdmonitionKind) {
|
|
18
|
+
AdmonitionKind["admonition"] = "admonition";
|
|
19
|
+
AdmonitionKind["attention"] = "attention";
|
|
20
|
+
AdmonitionKind["caution"] = "caution";
|
|
21
|
+
AdmonitionKind["danger"] = "danger";
|
|
22
|
+
AdmonitionKind["error"] = "error";
|
|
23
|
+
AdmonitionKind["important"] = "important";
|
|
24
|
+
AdmonitionKind["hint"] = "hint";
|
|
25
|
+
AdmonitionKind["note"] = "note";
|
|
26
|
+
AdmonitionKind["seealso"] = "seealso";
|
|
27
|
+
AdmonitionKind["tip"] = "tip";
|
|
28
|
+
AdmonitionKind["warning"] = "warning";
|
|
29
|
+
})(AdmonitionKind || (AdmonitionKind = {}));
|
|
30
|
+
function getClasses(className) {
|
|
31
|
+
var _a;
|
|
32
|
+
const classes = (_a = className === null || className === void 0 ? void 0 : className.split(' ').map((s) => s.trim().toLowerCase()).filter((s) => !!s)) !== null && _a !== void 0 ? _a : [];
|
|
33
|
+
return [...new Set(classes)];
|
|
34
|
+
}
|
|
35
|
+
function getFirstKind({ kind, classes = [], }) {
|
|
36
|
+
if (kind === AdmonitionKind.note || classes.includes('note')) {
|
|
37
|
+
return { kind: AdmonitionKind.note, color: 'blue' };
|
|
38
|
+
}
|
|
39
|
+
if (kind === AdmonitionKind.important || classes.includes('important')) {
|
|
40
|
+
return { kind: AdmonitionKind.important, color: 'blue' };
|
|
41
|
+
}
|
|
42
|
+
if (kind === AdmonitionKind.hint || classes.includes('hint')) {
|
|
43
|
+
return { kind: AdmonitionKind.hint, color: 'green' };
|
|
44
|
+
}
|
|
45
|
+
if (kind === AdmonitionKind.seealso || classes.includes('seealso')) {
|
|
46
|
+
return { kind: AdmonitionKind.seealso, color: 'green' };
|
|
47
|
+
}
|
|
48
|
+
if (kind === AdmonitionKind.tip || classes.includes('tip')) {
|
|
49
|
+
return { kind: AdmonitionKind.tip, color: 'green' };
|
|
50
|
+
}
|
|
51
|
+
if (kind === AdmonitionKind.attention || classes.includes('attention')) {
|
|
52
|
+
return { kind: AdmonitionKind.attention, color: 'yellow' };
|
|
53
|
+
}
|
|
54
|
+
if (kind === AdmonitionKind.warning || classes.includes('warning')) {
|
|
55
|
+
return { kind: AdmonitionKind.warning, color: 'yellow' };
|
|
56
|
+
}
|
|
57
|
+
if (kind === AdmonitionKind.caution || classes.includes('caution')) {
|
|
58
|
+
return { kind: AdmonitionKind.caution, color: 'yellow' };
|
|
59
|
+
}
|
|
60
|
+
if (kind === AdmonitionKind.danger || classes.includes('danger')) {
|
|
61
|
+
return { kind: AdmonitionKind.danger, color: 'red' };
|
|
62
|
+
}
|
|
63
|
+
if (kind === AdmonitionKind.error || classes.includes('error')) {
|
|
64
|
+
return { kind: AdmonitionKind.error, color: 'red' };
|
|
65
|
+
}
|
|
66
|
+
return { kind: AdmonitionKind.note, color: 'blue' };
|
|
67
|
+
}
|
|
68
|
+
const iconClass = 'h-8 w-8 inline-block pl-2 mr-2 self-center flex-none';
|
|
69
|
+
function AdmonitionIcon({ kind, className }) {
|
|
70
|
+
const cn = classNames(iconClass, className);
|
|
71
|
+
if (kind === AdmonitionKind.note)
|
|
72
|
+
return _jsx(InformationCircleIcon, { className: cn });
|
|
73
|
+
if (kind === AdmonitionKind.caution)
|
|
74
|
+
return _jsx(OExclamationIcon, { className: cn });
|
|
75
|
+
if (kind === AdmonitionKind.warning)
|
|
76
|
+
return _jsx(SExclamationIcon, { className: cn });
|
|
77
|
+
if (kind === AdmonitionKind.danger)
|
|
78
|
+
return _jsx(SExclamationCircleIcon, { className: cn });
|
|
79
|
+
if (kind === AdmonitionKind.error)
|
|
80
|
+
return _jsx(XCircleIcon, { className: cn });
|
|
81
|
+
if (kind === AdmonitionKind.attention)
|
|
82
|
+
return _jsx(MegaphoneIcon, { className: cn });
|
|
83
|
+
if (kind === AdmonitionKind.tip)
|
|
84
|
+
return _jsx(PencilSquareIcon, { className: cn });
|
|
85
|
+
if (kind === AdmonitionKind.hint)
|
|
86
|
+
return _jsx(LightBulbIcon, { className: cn });
|
|
87
|
+
if (kind === AdmonitionKind.important)
|
|
88
|
+
return _jsx(BoltIcon, { className: cn });
|
|
89
|
+
if (kind === AdmonitionKind.seealso)
|
|
90
|
+
return _jsx(ArrowRightCircleIcon, { className: cn });
|
|
91
|
+
return _jsx(InformationCircleIcon, { className: cn });
|
|
92
|
+
}
|
|
93
|
+
export const AdmonitionTitle = (node, children) => {
|
|
94
|
+
return children;
|
|
95
|
+
};
|
|
96
|
+
const WrapperElement = ({ dropdown, className, children, }) => {
|
|
97
|
+
if (dropdown)
|
|
98
|
+
return _jsx("details", Object.assign({ className: className }, { children: children }));
|
|
99
|
+
return _jsx("aside", Object.assign({ className: className }, { children: children }));
|
|
100
|
+
};
|
|
101
|
+
const HeaderElement = ({ dropdown, className, children, }) => {
|
|
102
|
+
if (dropdown)
|
|
103
|
+
return _jsx("summary", Object.assign({ className: className }, { children: children }));
|
|
104
|
+
return _jsx("div", Object.assign({ className: className }, { children: children }));
|
|
105
|
+
};
|
|
106
|
+
export function Admonition({ title, kind, color, simple, dropdown, children, hideIcon, }) {
|
|
107
|
+
return (_jsxs(WrapperElement, Object.assign({ dropdown: dropdown, className: classNames('my-5 shadow-md dark:shadow-2xl dark:shadow-neutral-900', 'bg-gray-50/10 dark:bg-stone-800', 'overflow-hidden', {
|
|
108
|
+
'rounded border-l-4': !simple,
|
|
109
|
+
'border-l-2': simple,
|
|
110
|
+
'border-blue-500': !color || color === 'blue',
|
|
111
|
+
'border-green-600': color === 'green',
|
|
112
|
+
'border-amber-600': color === 'yellow',
|
|
113
|
+
'border-red-600': color === 'red',
|
|
114
|
+
}) }, { children: [title && (_jsxs(HeaderElement, Object.assign({ dropdown: dropdown, className: classNames('m-0 font-medium py-1 flex min-w-0', {
|
|
115
|
+
'text-lg': !simple,
|
|
116
|
+
'text-md': simple,
|
|
117
|
+
'bg-gray-100 dark:bg-stone-700': simple,
|
|
118
|
+
'text-blue-600 bg-blue-50 dark:bg-slate-900': !simple && (!color || color === 'blue'),
|
|
119
|
+
'text-green-600 bg-green-50 dark:bg-slate-900': !simple && color === 'green',
|
|
120
|
+
'text-amber-600 bg-amber-50 dark:bg-slate-900': !simple && color === 'yellow',
|
|
121
|
+
'text-red-600 bg-red-50 dark:bg-slate-900': !simple && color === 'red',
|
|
122
|
+
'cursor-pointer hover:shadow-[inset_0_0_0px_30px_#00000003] dark:hover:shadow-[inset_0_0_0px_30px_#FFFFFF03]': dropdown,
|
|
123
|
+
}) }, { children: [!hideIcon && (_jsx(AdmonitionIcon, { kind: kind !== null && kind !== void 0 ? kind : AdmonitionKind.note, className: classNames({
|
|
124
|
+
// Needed for simple!
|
|
125
|
+
'text-blue-600': !color || color === 'blue',
|
|
126
|
+
'text-green-600': color === 'green',
|
|
127
|
+
'text-amber-600': color === 'yellow',
|
|
128
|
+
'text-red-600': color === 'red',
|
|
129
|
+
}) })), _jsx("div", Object.assign({ className: classNames('text-neutral-900 dark:text-white grow self-center overflow-hidden break-words', { 'ml-4': hideIcon }) }, { children: title })), dropdown && (_jsx("div", Object.assign({ className: "font-thin text-sm text-neutral-700 dark:text-neutral-200 self-center flex-none" }, { children: _jsx(ChevronRightIcon, { className: classNames(iconClass, 'transition-transform details-toggle') }) })))] }))), _jsx("div", Object.assign({ className: classNames('px-4', { 'py-1': !simple, 'details-body': dropdown }) }, { children: children }))] })));
|
|
130
|
+
}
|
|
131
|
+
export const AdmonitionRenderer = (node, children) => {
|
|
132
|
+
var _a;
|
|
133
|
+
const [title, ...rest] = children;
|
|
134
|
+
const classes = getClasses(node.class);
|
|
135
|
+
const { kind, color } = getFirstKind({ kind: node.kind, classes });
|
|
136
|
+
const isDropdown = classes.includes('dropdown');
|
|
137
|
+
const isSimple = classes.includes('simple');
|
|
138
|
+
const hideIcon = node.icon === false;
|
|
139
|
+
const useTitle = ((_a = node.children) === null || _a === void 0 ? void 0 : _a[0].type) === 'admonitionTitle';
|
|
140
|
+
return (_jsxs(Admonition, Object.assign({ title: useTitle ? title : undefined, kind: kind, color: color, dropdown: isDropdown, simple: isSimple, hideIcon: hideIcon }, { children: [!useTitle && title, rest] }), node.key));
|
|
141
|
+
};
|
|
142
|
+
const ADMONITION_RENDERERS = {
|
|
143
|
+
admonition: AdmonitionRenderer,
|
|
144
|
+
admonitionTitle: AdmonitionTitle,
|
|
145
|
+
};
|
|
146
|
+
export default ADMONITION_RENDERERS;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type * as spec from 'myst-spec';
|
|
2
|
+
import type { NodeRenderer } from '@myst-theme/providers';
|
|
3
|
+
type TableExts = {
|
|
4
|
+
rowspan?: number;
|
|
5
|
+
colspan?: number;
|
|
6
|
+
};
|
|
7
|
+
type Delete = {
|
|
8
|
+
type: 'delete';
|
|
9
|
+
};
|
|
10
|
+
type Underline = {
|
|
11
|
+
type: 'underline';
|
|
12
|
+
};
|
|
13
|
+
type SmallCaps = {
|
|
14
|
+
type: 'smallcaps';
|
|
15
|
+
};
|
|
16
|
+
type DefinitionList = {
|
|
17
|
+
type: 'definitionList';
|
|
18
|
+
};
|
|
19
|
+
type DefinitionTerm = {
|
|
20
|
+
type: 'definitionTerm';
|
|
21
|
+
};
|
|
22
|
+
type DefinitionDescription = {
|
|
23
|
+
type: 'definitionDescription';
|
|
24
|
+
};
|
|
25
|
+
type CaptionNumber = {
|
|
26
|
+
type: 'captionNumber';
|
|
27
|
+
kind: string;
|
|
28
|
+
identifier: string;
|
|
29
|
+
};
|
|
30
|
+
type BasicNodeRenderers = {
|
|
31
|
+
strong: NodeRenderer<spec.Strong>;
|
|
32
|
+
emphasis: NodeRenderer<spec.Emphasis>;
|
|
33
|
+
link: NodeRenderer<spec.Link>;
|
|
34
|
+
paragraph: NodeRenderer<spec.Paragraph>;
|
|
35
|
+
break: NodeRenderer<spec.Break>;
|
|
36
|
+
inlineMath: NodeRenderer<spec.InlineMath>;
|
|
37
|
+
math: NodeRenderer<spec.Math>;
|
|
38
|
+
list: NodeRenderer<spec.List>;
|
|
39
|
+
listItem: NodeRenderer<spec.ListItem & {
|
|
40
|
+
checked?: boolean;
|
|
41
|
+
}>;
|
|
42
|
+
container: NodeRenderer<spec.Container>;
|
|
43
|
+
caption: NodeRenderer<spec.Caption>;
|
|
44
|
+
blockquote: NodeRenderer<spec.Blockquote>;
|
|
45
|
+
thematicBreak: NodeRenderer<spec.ThematicBreak>;
|
|
46
|
+
subscript: NodeRenderer<spec.Subscript>;
|
|
47
|
+
superscript: NodeRenderer<spec.Superscript>;
|
|
48
|
+
abbreviation: NodeRenderer<spec.Abbreviation>;
|
|
49
|
+
table: NodeRenderer<spec.Table>;
|
|
50
|
+
tableRow: NodeRenderer<spec.TableRow>;
|
|
51
|
+
tableCell: NodeRenderer<spec.TableCell & TableExts>;
|
|
52
|
+
comment: NodeRenderer<spec.Comment>;
|
|
53
|
+
mystComment: NodeRenderer<spec.Comment>;
|
|
54
|
+
captionNumber: NodeRenderer<CaptionNumber>;
|
|
55
|
+
delete: NodeRenderer<Delete>;
|
|
56
|
+
underline: NodeRenderer<Underline>;
|
|
57
|
+
smallcaps: NodeRenderer<SmallCaps>;
|
|
58
|
+
definitionList: NodeRenderer<DefinitionList>;
|
|
59
|
+
definitionTerm: NodeRenderer<DefinitionTerm>;
|
|
60
|
+
definitionDescription: NodeRenderer<DefinitionDescription>;
|
|
61
|
+
};
|
|
62
|
+
declare const BASIC_RENDERERS: BasicNodeRenderers;
|
|
63
|
+
export default BASIC_RENDERERS;
|
|
64
|
+
//# sourceMappingURL=basic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../src/basic.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { HashLink } from './heading';
|
|
3
|
+
import classNames from 'classnames';
|
|
4
|
+
import { HoverPopover } from './components/HoverPopover';
|
|
5
|
+
const BASIC_RENDERERS = {
|
|
6
|
+
delete(node, children) {
|
|
7
|
+
return _jsx("del", { children: children }, node.key);
|
|
8
|
+
},
|
|
9
|
+
strong(node, children) {
|
|
10
|
+
return _jsx("strong", { children: children }, node.key);
|
|
11
|
+
},
|
|
12
|
+
emphasis(node, children) {
|
|
13
|
+
return _jsx("em", { children: children }, node.key);
|
|
14
|
+
},
|
|
15
|
+
underline(node, children) {
|
|
16
|
+
return (_jsx("span", Object.assign({ style: { textDecoration: 'underline' } }, { children: children }), node.key));
|
|
17
|
+
},
|
|
18
|
+
smallcaps(node, children) {
|
|
19
|
+
return (_jsx("span", Object.assign({ style: { fontVariant: 'small-caps' } }, { children: children }), node.key));
|
|
20
|
+
},
|
|
21
|
+
link(node, children) {
|
|
22
|
+
return (_jsx("a", Object.assign({ target: "_blank", href: node.url, rel: "noreferrer" }, { children: children }), node.key));
|
|
23
|
+
},
|
|
24
|
+
paragraph(node, children) {
|
|
25
|
+
return (_jsx("p", Object.assign({ id: node.html_id }, { children: children }), node.key));
|
|
26
|
+
},
|
|
27
|
+
break(node) {
|
|
28
|
+
return _jsx("br", {}, node.key);
|
|
29
|
+
},
|
|
30
|
+
inlineMath(node) {
|
|
31
|
+
return _jsx("code", { children: node.value }, node.key);
|
|
32
|
+
},
|
|
33
|
+
math(node) {
|
|
34
|
+
return _jsx("code", { children: node.value }, node.key);
|
|
35
|
+
},
|
|
36
|
+
list(node, children) {
|
|
37
|
+
if (node.ordered) {
|
|
38
|
+
return (_jsx("ol", Object.assign({ start: node.start || undefined, id: node.html_id }, { children: children }), node.key));
|
|
39
|
+
}
|
|
40
|
+
return (_jsx("ul", Object.assign({ id: node.html_id }, { children: children }), node.key));
|
|
41
|
+
},
|
|
42
|
+
listItem(node, children) {
|
|
43
|
+
if (node.checked == null) {
|
|
44
|
+
return _jsx("li", { children: children }, node.key);
|
|
45
|
+
}
|
|
46
|
+
return (_jsxs("li", Object.assign({ className: "task-list-item" }, { children: [_jsx("input", { type: "checkbox", className: "task-list-item-checkbox", defaultChecked: node.checked }), children] }), node.key));
|
|
47
|
+
},
|
|
48
|
+
container(node, children) {
|
|
49
|
+
return (_jsx("figure", Object.assign({ id: node.html_id || node.identifier || node.key, className: classNames(node.kind, node.class) }, { children: children }), node.key));
|
|
50
|
+
},
|
|
51
|
+
caption(node, children) {
|
|
52
|
+
return (_jsx("figcaption", Object.assign({ className: "group" }, { children: children }), node.key));
|
|
53
|
+
},
|
|
54
|
+
blockquote(node, children) {
|
|
55
|
+
return (_jsx("blockquote", Object.assign({ id: node.html_id }, { children: children }), node.key));
|
|
56
|
+
},
|
|
57
|
+
thematicBreak(node) {
|
|
58
|
+
return _jsx("hr", { className: "py-2 my-5 translate-y-2" }, node.key);
|
|
59
|
+
},
|
|
60
|
+
captionNumber(node, children) {
|
|
61
|
+
function backwardsCompatibleLabel(value, kind) {
|
|
62
|
+
var _a, _b;
|
|
63
|
+
const capital = (_a = kind === null || kind === void 0 ? void 0 : kind.slice(0, 1).toUpperCase()) !== null && _a !== void 0 ? _a : 'F';
|
|
64
|
+
const body = (_b = kind === null || kind === void 0 ? void 0 : kind.slice(1)) !== null && _b !== void 0 ? _b : 'igure';
|
|
65
|
+
return `${capital}${body}: ${children}`;
|
|
66
|
+
}
|
|
67
|
+
const label = typeof children === 'string' ? backwardsCompatibleLabel(children, node.kind) : children;
|
|
68
|
+
const id = node.html_id || node.identifier || node.key;
|
|
69
|
+
return (_jsx(HashLink, Object.assign({ id: id, kind: node.kind, className: "mr-1 text-inherit hover:text-inherit font-semibold hover:font-semibold" }, { children: label }), node.key));
|
|
70
|
+
},
|
|
71
|
+
table(node, children) {
|
|
72
|
+
// TODO: actually render the tbody on the server if it isn't included here.
|
|
73
|
+
return (_jsx("table", { children: _jsx("tbody", { children: children }) }, node.key));
|
|
74
|
+
},
|
|
75
|
+
tableRow(node, children) {
|
|
76
|
+
return _jsx("tr", { children: children }, node.key);
|
|
77
|
+
},
|
|
78
|
+
tableCell(node, children) {
|
|
79
|
+
const ifGreaterThanOne = (num) => (num === 1 ? undefined : num);
|
|
80
|
+
const attrs = {
|
|
81
|
+
key: node.key,
|
|
82
|
+
rowSpan: ifGreaterThanOne(node.rowspan),
|
|
83
|
+
colSpan: ifGreaterThanOne(node.colspan),
|
|
84
|
+
};
|
|
85
|
+
if (node.header)
|
|
86
|
+
return _jsx("th", Object.assign({}, attrs, { children: children }));
|
|
87
|
+
return _jsx("td", Object.assign({}, attrs, { children: children }));
|
|
88
|
+
},
|
|
89
|
+
subscript(node, children) {
|
|
90
|
+
return _jsx("sub", { children: children }, node.key);
|
|
91
|
+
},
|
|
92
|
+
superscript(node, children) {
|
|
93
|
+
return _jsx("sup", { children: children }, node.key);
|
|
94
|
+
},
|
|
95
|
+
abbreviation(node, children) {
|
|
96
|
+
return (_jsx(HoverPopover, Object.assign({ side: "top", card: _jsx("div", Object.assign({ className: "bg-blue-900 text-white dark:bg-white dark:text-black text-xs p-1" }, { children: node.title })), arrowClass: "fill-blue-900 dark:fill-white" }, { children: _jsx("abbr", Object.assign({ "aria-label": node.title, className: "cursor-help border-b border-dotted" }, { children: children })) }), node.key));
|
|
97
|
+
},
|
|
98
|
+
mystComment() {
|
|
99
|
+
return null;
|
|
100
|
+
},
|
|
101
|
+
comment() {
|
|
102
|
+
return null;
|
|
103
|
+
},
|
|
104
|
+
definitionList(node, children) {
|
|
105
|
+
return (_jsx("dl", Object.assign({ className: "my-5", id: node.html_id }, { children: children }), node.key));
|
|
106
|
+
},
|
|
107
|
+
definitionTerm(node, children) {
|
|
108
|
+
let strongChildren = children;
|
|
109
|
+
if (Array.isArray(children)) {
|
|
110
|
+
const allowedStrongTypes = new Set(['emphasis']);
|
|
111
|
+
strongChildren = children.map((child, i) => {
|
|
112
|
+
if (typeof child === 'string')
|
|
113
|
+
return _jsx("strong", { children: child }, node.key + i);
|
|
114
|
+
if (allowedStrongTypes.has(child === null || child === void 0 ? void 0 : child.type))
|
|
115
|
+
return _jsx("strong", { children: child }, node.key + i);
|
|
116
|
+
return child;
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
else if (typeof children === 'string') {
|
|
120
|
+
strongChildren = _jsx("strong", { children: children }, node.key + '0');
|
|
121
|
+
}
|
|
122
|
+
return (_jsx("dt", Object.assign({ id: node.html_id }, { children: strongChildren }), node.key));
|
|
123
|
+
},
|
|
124
|
+
definitionDescription(node, children) {
|
|
125
|
+
return _jsx("dd", { children: children }, node.key);
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
export default BASIC_RENDERERS;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { NodeRenderer } from '@myst-theme/providers';
|
|
2
|
+
type CardSpec = {
|
|
3
|
+
type: 'card';
|
|
4
|
+
url?: string;
|
|
5
|
+
static?: boolean;
|
|
6
|
+
};
|
|
7
|
+
type CardTitleSpec = {
|
|
8
|
+
type: 'cardTitle';
|
|
9
|
+
};
|
|
10
|
+
type HeaderSpec = {
|
|
11
|
+
type: 'header';
|
|
12
|
+
};
|
|
13
|
+
type FooterSpec = {
|
|
14
|
+
type: 'footer';
|
|
15
|
+
};
|
|
16
|
+
export declare const Header: NodeRenderer<HeaderSpec>;
|
|
17
|
+
export declare const Footer: NodeRenderer<FooterSpec>;
|
|
18
|
+
export declare const CardTitle: NodeRenderer<CardTitleSpec>;
|
|
19
|
+
export declare const CardRenderer: NodeRenderer<CardSpec>;
|
|
20
|
+
declare const CARD_RENDERERS: {
|
|
21
|
+
card: NodeRenderer<CardSpec>;
|
|
22
|
+
cardTitle: NodeRenderer<CardTitleSpec>;
|
|
23
|
+
header: NodeRenderer<HeaderSpec>;
|
|
24
|
+
footer: NodeRenderer<FooterSpec>;
|
|
25
|
+
};
|
|
26
|
+
export default CARD_RENDERERS;
|
|
27
|
+
//# sourceMappingURL=card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"card.d.ts","sourceRoot":"","sources":["../../src/card.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAI1D,KAAK,QAAQ,GAAG;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AACF,KAAK,aAAa,GAAG;IACnB,IAAI,EAAE,WAAW,CAAC;CACnB,CAAC;AACF,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AACF,KAAK,UAAU,GAAG;IAChB,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,YAAY,CAAC,UAAU,CAS3C,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,YAAY,CAAC,UAAU,CAS3C,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,YAAY,CAAC,aAAa,CAMjD,CAAC;AA2FF,eAAO,MAAM,YAAY,EAAE,YAAY,CAAC,QAAQ,CAM/C,CAAC;AAEF,QAAA,MAAM,cAAc;;;;;CAKnB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
package/dist/esm/card.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import { useLinkProvider, useBaseurl, withBaseurl } from '@myst-theme/providers';
|
|
4
|
+
export const Header = (node, children) => {
|
|
5
|
+
return (_jsx("header", Object.assign({ className: "m-0 py-1 pl-3 bg-gray-50 dark:bg-slate-900 border-b border-gray-100 dark:border-gray-800" }, { children: children }), node.key));
|
|
6
|
+
};
|
|
7
|
+
export const Footer = (node, children) => {
|
|
8
|
+
return (_jsx("footer", Object.assign({ className: "m-0 py-1 pl-3 bg-gray-50 dark:bg-slate-900 border-t border-gray-100 dark:border-gray-800" }, { children: children }), node.key));
|
|
9
|
+
};
|
|
10
|
+
export const CardTitle = (node, children) => {
|
|
11
|
+
return (_jsx("div", Object.assign({ className: "pt-3 font-bold group-hover:underline" }, { children: children }), node.key));
|
|
12
|
+
};
|
|
13
|
+
function getParts(children) {
|
|
14
|
+
var _a, _b;
|
|
15
|
+
const parts = {};
|
|
16
|
+
if (!Array.isArray(children))
|
|
17
|
+
return parts;
|
|
18
|
+
const next = [...children];
|
|
19
|
+
if (((_a = next[0]) === null || _a === void 0 ? void 0 : _a.type) === 'header') {
|
|
20
|
+
parts.header = next.splice(0, 1);
|
|
21
|
+
}
|
|
22
|
+
if (((_b = next[next.length - 1]) === null || _b === void 0 ? void 0 : _b.type) === 'footer') {
|
|
23
|
+
parts.footer = next.splice(-1, 1);
|
|
24
|
+
}
|
|
25
|
+
parts.body = next;
|
|
26
|
+
return parts;
|
|
27
|
+
}
|
|
28
|
+
function ExternalOrInternalLink({ to, className, isStatic, prefetch = 'intent', children, }) {
|
|
29
|
+
const Link = useLinkProvider();
|
|
30
|
+
const baseurl = useBaseurl();
|
|
31
|
+
if (to.startsWith('http') || isStatic) {
|
|
32
|
+
return (_jsx("a", Object.assign({ href: to, className: className, target: "_blank", rel: "noopener noreferrer" }, { children: children })));
|
|
33
|
+
}
|
|
34
|
+
return (_jsx(Link, Object.assign({ to: withBaseurl(to, baseurl), className: className, prefetch: prefetch }, { children: children })));
|
|
35
|
+
}
|
|
36
|
+
function Card({ children, url, isStatic, }) {
|
|
37
|
+
const parts = getParts(children);
|
|
38
|
+
const link = !!url;
|
|
39
|
+
const sharedStyle = 'my-5 rounded shadow dark:shadow-neutral-800 overflow-hidden border border-gray-100 dark:border-gray-800 flex flex-col';
|
|
40
|
+
if (link) {
|
|
41
|
+
return (_jsxs(ExternalOrInternalLink, Object.assign({ to: url, isStatic: isStatic, className: classNames(sharedStyle, 'text-inherit hover:text-inherit', 'block font-normal no-underline hover:no-underline cursor-pointer group', 'hover:border-blue-500 dark:hover:border-blue-400') }, { children: [parts.header, _jsx("div", Object.assign({ className: "py-2 px-4 flex-grow" }, { children: parts.body })), parts.footer] })));
|
|
42
|
+
}
|
|
43
|
+
return (_jsxs("div", Object.assign({ className: sharedStyle }, { children: [parts.header, _jsx("div", Object.assign({ className: "py-2 px-4 flex-grow" }, { children: parts.body })), parts.footer] })));
|
|
44
|
+
}
|
|
45
|
+
export const CardRenderer = (node, children) => {
|
|
46
|
+
return (_jsx(Card, Object.assign({ url: node.url, isStatic: node.static || false }, { children: children }), node.key));
|
|
47
|
+
};
|
|
48
|
+
const CARD_RENDERERS = {
|
|
49
|
+
card: CardRenderer,
|
|
50
|
+
cardTitle: CardTitle,
|
|
51
|
+
header: Header,
|
|
52
|
+
footer: Footer,
|
|
53
|
+
};
|
|
54
|
+
export default CARD_RENDERERS;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { NodeRenderer } from '@myst-theme/providers';
|
|
2
|
+
export declare const CiteGroup: NodeRenderer;
|
|
3
|
+
export declare const Cite: ({ label, error, children, }: {
|
|
4
|
+
label?: string | undefined;
|
|
5
|
+
error?: boolean | undefined;
|
|
6
|
+
children: React.ReactNode;
|
|
7
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare const CiteRenderer: NodeRenderer;
|
|
9
|
+
declare const CITE_RENDERERS: Record<string, NodeRenderer>;
|
|
10
|
+
export default CITE_RENDERERS;
|
|
11
|
+
//# sourceMappingURL=cite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cite.d.ts","sourceRoot":"","sources":["../../src/cite.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAc1D,eAAO,MAAM,SAAS,EAAE,YAYvB,CAAC;AAEF,eAAO,MAAM,IAAI;;;cAOL,MAAM,SAAS;6CAuB1B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,YAM1B,CAAC;AAEF,QAAA,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAGhD,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
package/dist/esm/cite.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import { useReferences } from '@myst-theme/providers';
|
|
4
|
+
import { doi } from 'doi-utils';
|
|
5
|
+
import { InlineError } from './inlineError';
|
|
6
|
+
import { HoverPopover } from './components/HoverPopover';
|
|
7
|
+
function CiteChild({ html }) {
|
|
8
|
+
return (_jsx("div", { className: "hover-document w-[500px] sm:max-w-[500px] p-3", dangerouslySetInnerHTML: { __html: html || '' } }));
|
|
9
|
+
}
|
|
10
|
+
export const CiteGroup = (node, children) => {
|
|
11
|
+
return (_jsx("span", Object.assign({ className: classNames('cite-group', {
|
|
12
|
+
narrative: node.kind === 'narrative',
|
|
13
|
+
parenthetical: node.kind === 'parenthetical',
|
|
14
|
+
}) }, { children: children }), node.key));
|
|
15
|
+
};
|
|
16
|
+
export const Cite = ({ label, error, children, }) => {
|
|
17
|
+
var _a, _b;
|
|
18
|
+
const references = useReferences();
|
|
19
|
+
if (!label) {
|
|
20
|
+
return _jsx(InlineError, { value: "cite (no label)", message: 'Citation Has No Label' });
|
|
21
|
+
}
|
|
22
|
+
const { html, doi: doiString } = (_b = (_a = references === null || references === void 0 ? void 0 : references.cite) === null || _a === void 0 ? void 0 : _a.data[label]) !== null && _b !== void 0 ? _b : {};
|
|
23
|
+
if (error) {
|
|
24
|
+
return _jsx(InlineError, { value: label, message: 'Citation Not Found' });
|
|
25
|
+
}
|
|
26
|
+
const doiUrl = doiString ? doi.buildUrl(doiString) : null;
|
|
27
|
+
return (_jsx(HoverPopover, Object.assign({ openDelay: 300, card: _jsx(CiteChild, { html: html }) }, { children: _jsxs("cite", Object.assign({ className: "hover-link" }, { children: [doiUrl && (_jsx("a", Object.assign({ href: doiUrl, target: "_blank", rel: "noreferrer", className: "hover-link" }, { children: children }))), !doiUrl && children] })) })));
|
|
28
|
+
};
|
|
29
|
+
export const CiteRenderer = (node, children) => {
|
|
30
|
+
return (_jsx(Cite, Object.assign({ label: node.label, error: node.error }, { children: children }), node.key));
|
|
31
|
+
};
|
|
32
|
+
const CITE_RENDERERS = {
|
|
33
|
+
citeGroup: CiteGroup,
|
|
34
|
+
cite: CiteRenderer,
|
|
35
|
+
};
|
|
36
|
+
export default CITE_RENDERERS;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { InlineCode } from 'myst-spec';
|
|
2
|
+
import type { NodeRenderer } from '@myst-theme/providers';
|
|
3
|
+
type Props = {
|
|
4
|
+
value: string;
|
|
5
|
+
identifier?: string;
|
|
6
|
+
lang?: string;
|
|
7
|
+
showCopy?: boolean;
|
|
8
|
+
showLineNumbers?: boolean;
|
|
9
|
+
startingLineNumber?: number;
|
|
10
|
+
emphasizeLines?: number[];
|
|
11
|
+
filename?: string;
|
|
12
|
+
shadow?: boolean;
|
|
13
|
+
background?: boolean;
|
|
14
|
+
border?: boolean;
|
|
15
|
+
className?: string;
|
|
16
|
+
};
|
|
17
|
+
export declare function CodeBlock(props: Props): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
declare const CODE_RENDERERS: {
|
|
19
|
+
code: NodeRenderer<{
|
|
20
|
+
type?: "code" | undefined;
|
|
21
|
+
lang?: string | undefined;
|
|
22
|
+
meta?: string | undefined;
|
|
23
|
+
class?: string | undefined;
|
|
24
|
+
showLineNumbers?: boolean | undefined;
|
|
25
|
+
startingLineNumber?: number | undefined;
|
|
26
|
+
emphasizeLines?: number[] | undefined;
|
|
27
|
+
identifier?: unknown;
|
|
28
|
+
label?: unknown;
|
|
29
|
+
value?: unknown;
|
|
30
|
+
position?: unknown;
|
|
31
|
+
data?: unknown;
|
|
32
|
+
} & {
|
|
33
|
+
identifier?: string | undefined;
|
|
34
|
+
label?: string | undefined;
|
|
35
|
+
} & {
|
|
36
|
+
value: string;
|
|
37
|
+
} & {
|
|
38
|
+
type: string;
|
|
39
|
+
data?: {
|
|
40
|
+
[k: string]: unknown;
|
|
41
|
+
} | undefined;
|
|
42
|
+
position?: {
|
|
43
|
+
start: {
|
|
44
|
+
line: number;
|
|
45
|
+
column: number;
|
|
46
|
+
offset?: number | undefined;
|
|
47
|
+
};
|
|
48
|
+
end: {
|
|
49
|
+
line: number;
|
|
50
|
+
column: number;
|
|
51
|
+
offset?: number | undefined;
|
|
52
|
+
};
|
|
53
|
+
indent?: number[] | undefined;
|
|
54
|
+
} | undefined;
|
|
55
|
+
} & {
|
|
56
|
+
executable: boolean;
|
|
57
|
+
}>;
|
|
58
|
+
inlineCode: NodeRenderer<InlineCode>;
|
|
59
|
+
};
|
|
60
|
+
export default CODE_RENDERERS;
|
|
61
|
+
//# sourceMappingURL=code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../src/code.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,UAAU,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAQ1D,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAWF,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,2CAgErC;AAiDD,QAAA,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA/C0B,OAAO;;;CAkDpD,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
package/dist/esm/code.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useTheme } from '@myst-theme/providers';
|
|
3
|
+
import { LightAsync as SyntaxHighlighter } from 'react-syntax-highlighter';
|
|
4
|
+
import light from 'react-syntax-highlighter/dist/cjs/styles/hljs/xcode';
|
|
5
|
+
import dark from 'react-syntax-highlighter/dist/cjs/styles/hljs/vs2015';
|
|
6
|
+
import classNames from 'classnames';
|
|
7
|
+
import { CopyIcon } from './components/CopyIcon';
|
|
8
|
+
function normalizeLanguage(lang) {
|
|
9
|
+
switch (lang) {
|
|
10
|
+
case 'html':
|
|
11
|
+
return 'xml';
|
|
12
|
+
default:
|
|
13
|
+
return lang;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function CodeBlock(props) {
|
|
17
|
+
const { isLight } = useTheme();
|
|
18
|
+
const { value, lang, identifier, emphasizeLines, showLineNumbers, className, showCopy = true, startingLineNumber = 1, filename, shadow, background, border, } = props;
|
|
19
|
+
const highlightLines = new Set(emphasizeLines);
|
|
20
|
+
return (_jsxs("div", Object.assign({ id: identifier, className: classNames('relative group not-prose overflow-auto', className, {
|
|
21
|
+
'shadow hover:shadow-md dark:shadow-2xl dark:shadow-neutral-900 my-5 text-sm': shadow,
|
|
22
|
+
'bg-stone-200/10': background,
|
|
23
|
+
'border border-l-4 border-l-blue-400 border-gray-200 dark:border-l-blue-400 dark:border-gray-800': border,
|
|
24
|
+
}) }, { children: [filename && _jsx("div", Object.assign({ className: "leading-3 mt-1 p-1" }, { children: filename })), _jsx(SyntaxHighlighter, Object.assign({ language: normalizeLanguage(lang), startingLineNumber: startingLineNumber, showLineNumbers: showLineNumbers, style: isLight ? Object.assign(Object.assign({}, light), { hljs: Object.assign(Object.assign({}, light.hljs), { background: 'transparent' }) }) : dark, wrapLines: true, lineNumberContainerStyle: {
|
|
25
|
+
// This stops page content shifts
|
|
26
|
+
display: 'inline-block',
|
|
27
|
+
float: 'left',
|
|
28
|
+
minWidth: '1.25em',
|
|
29
|
+
paddingRight: '1em',
|
|
30
|
+
textAlign: 'right',
|
|
31
|
+
userSelect: 'none',
|
|
32
|
+
borderLeft: '4px solid transparent',
|
|
33
|
+
}, lineProps: (line) => {
|
|
34
|
+
if (typeof line === 'boolean')
|
|
35
|
+
return {};
|
|
36
|
+
return highlightLines.has(line)
|
|
37
|
+
? {
|
|
38
|
+
'data-line-number': `${line}`,
|
|
39
|
+
'data-highlight': 'true',
|
|
40
|
+
}
|
|
41
|
+
: { 'data-line-number': `${line}` };
|
|
42
|
+
}, customStyle: { padding: '0.8rem' } }, { children: value })), showCopy && (_jsx("div", Object.assign({ className: "absolute hidden top-1 right-1 group-hover:block" }, { children: _jsx(CopyIcon, { text: value }) })))] })));
|
|
43
|
+
}
|
|
44
|
+
const code = (node) => {
|
|
45
|
+
return (_jsx(CodeBlock, { identifier: node.html_id, "data-mdast-node-type": node.type, "data-mdast-node-id": node.key, value: node.value || '', lang: node.lang, emphasizeLines: node.emphasizeLines, showLineNumbers: node.showLineNumbers, startingLineNumber: node.startingLineNumber, shadow: true, border: node.executable, background: !node.executable }, node.key));
|
|
46
|
+
};
|
|
47
|
+
function isColor(maybeColorHash) {
|
|
48
|
+
if (!maybeColorHash || maybeColorHash.length > 9)
|
|
49
|
+
return undefined;
|
|
50
|
+
if (!new Set([4, 7, 9]).has(maybeColorHash.length))
|
|
51
|
+
return undefined;
|
|
52
|
+
const match = /^#([0-9A-Fa-f]{3,8})$/.exec(maybeColorHash);
|
|
53
|
+
if (!match)
|
|
54
|
+
return undefined;
|
|
55
|
+
const color = match[1];
|
|
56
|
+
return color;
|
|
57
|
+
}
|
|
58
|
+
const inlineCode = (node, children) => {
|
|
59
|
+
if (isColor(node.value)) {
|
|
60
|
+
return (_jsxs("code", Object.assign({ className: "bg-slate-100 text-slate-700 dark:bg-slate-800 dark:text-slate-100 px-1 rounded" }, { children: [children, _jsx("span", { style: { backgroundColor: node.value }, className: "inline-block w-[10px] h-[10px] rounded-full ml-1" })] }), node.key));
|
|
61
|
+
}
|
|
62
|
+
return _jsx("code", { children: children }, node.key);
|
|
63
|
+
};
|
|
64
|
+
const CODE_RENDERERS = {
|
|
65
|
+
code,
|
|
66
|
+
inlineCode,
|
|
67
|
+
};
|
|
68
|
+
export default CODE_RENDERERS;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CopyIcon.d.ts","sourceRoot":"","sources":["../../../src/components/CopyIcon.tsx"],"names":[],"mappings":"AAKA,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,2CA+BlD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import DocumentDuplicateIcon from '@heroicons/react/24/outline/DocumentDuplicateIcon';
|
|
3
|
+
import CheckIcon from '@heroicons/react/24/outline/CheckIcon';
|
|
4
|
+
import { useState } from 'react';
|
|
5
|
+
import classNames from 'classnames';
|
|
6
|
+
export function CopyIcon({ text }) {
|
|
7
|
+
const [copied, setCopied] = useState(false);
|
|
8
|
+
const onClick = () => {
|
|
9
|
+
if (copied)
|
|
10
|
+
return;
|
|
11
|
+
navigator.clipboard.writeText(text).then(() => {
|
|
12
|
+
setCopied(true);
|
|
13
|
+
setTimeout(() => setCopied(false), 3000);
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
return (_jsx("button", Object.assign({ title: copied ? 'Copied!!' : 'Copy to Clipboard', className: classNames('inline-flex items-center opacity-60 hover:opacity-100 active:opacity-40 cursor-pointer ml-2', 'transition-color duration-200 ease-in-out', {
|
|
17
|
+
'text-blue-500 border-blue-500': !copied,
|
|
18
|
+
'text-green-500 border-green-500 ': copied,
|
|
19
|
+
}), onClick: onClick, "aria-pressed": copied ? 'true' : 'false', "aria-label": "Copy code to clipboard" }, { children: copied ? (_jsx(CheckIcon, { className: "w-[24px] h-[24px] text-success" })) : (_jsx(DocumentDuplicateIcon, { className: "w-[24px] h-[24px]" })) })));
|
|
20
|
+
}
|