@visin/frontend-core 1.12.0 → 1.14.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/auth/AuthProvider.d.ts +2 -0
- package/dist/auth/AuthProvider.d.ts.map +1 -1
- package/dist/auth/AuthProvider.js +7 -1
- package/dist/auth/AuthProvider.js.map +1 -1
- package/dist/auth/authService.d.ts +11 -1
- package/dist/auth/authService.d.ts.map +1 -1
- package/dist/auth/authService.js +4 -2
- package/dist/auth/authService.js.map +1 -1
- package/dist/components/AppLayout/AppLayout.d.ts +42 -5
- package/dist/components/AppLayout/AppLayout.d.ts.map +1 -1
- package/dist/components/AppLayout/AppLayout.js +89 -33
- package/dist/components/AppLayout/AppLayout.js.map +1 -1
- package/dist/components/AppLayout/index.d.ts +1 -1
- package/dist/components/AppLayout/index.d.ts.map +1 -1
- package/dist/components/Markdown/Markdown.d.ts +11 -0
- package/dist/components/Markdown/Markdown.d.ts.map +1 -0
- package/dist/components/Markdown/Markdown.js +63 -0
- package/dist/components/Markdown/Markdown.js.map +1 -0
- package/dist/components/Markdown/index.d.ts +2 -0
- package/dist/components/Markdown/index.d.ts.map +1 -0
- package/dist/components/Markdown/index.js +2 -0
- package/dist/components/Markdown/index.js.map +1 -0
- package/dist/components/Markdown/parse.d.ts +65 -0
- package/dist/components/Markdown/parse.d.ts.map +1 -0
- package/dist/components/Markdown/parse.js +247 -0
- package/dist/components/Markdown/parse.js.map +1 -0
- package/dist/components/ShareButton.d.ts +5 -0
- package/dist/components/ShareButton.d.ts.map +1 -0
- package/dist/components/ShareButton.js +23 -0
- package/dist/components/ShareButton.js.map +1 -0
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/navigation.d.ts +12 -2
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +43 -7
- package/dist/navigation.js.map +1 -1
- package/dist/recentVisits.d.ts +26 -0
- package/dist/recentVisits.d.ts.map +1 -0
- package/dist/recentVisits.js +97 -0
- package/dist/recentVisits.js.map +1 -0
- package/package.json +8 -8
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment, useMemo } from 'react';
|
|
3
|
+
import { Box, Link, Typography } from '@mui/material';
|
|
4
|
+
import { parseBlocks } from './parse';
|
|
5
|
+
/** More than a readme needs: the rest is not shown, so one cannot make every visitor's browser work on a book. */
|
|
6
|
+
export const MAX_MARKDOWN_LENGTH = 20_000;
|
|
7
|
+
const external = (href) => /^(https?:|mailto:)/i.test(href);
|
|
8
|
+
function renderInline(nodes) {
|
|
9
|
+
return nodes.map((node, index) => {
|
|
10
|
+
switch (node.type) {
|
|
11
|
+
case 'text':
|
|
12
|
+
return _jsx(Fragment, { children: node.text }, index);
|
|
13
|
+
case 'code':
|
|
14
|
+
return (_jsx(Box, { component: "code", sx: { fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace', fontSize: '0.9em', px: 0.5, borderRadius: 0.5, bgcolor: 'action.hover' }, children: node.text }, index));
|
|
15
|
+
case 'strong':
|
|
16
|
+
return _jsx("strong", { children: renderInline(node.children) }, index);
|
|
17
|
+
case 'em':
|
|
18
|
+
return _jsx("em", { children: renderInline(node.children) }, index);
|
|
19
|
+
case 'del':
|
|
20
|
+
return _jsx("del", { children: renderInline(node.children) }, index);
|
|
21
|
+
case 'br':
|
|
22
|
+
return _jsx("br", {}, index);
|
|
23
|
+
case 'link':
|
|
24
|
+
// Written by a stranger and read by everyone: no referrer, no endorsement, and `javascript:` never gets here.
|
|
25
|
+
return node.href ? (_jsx(Link, { href: node.href, ...(external(node.href) ? { target: '_blank', rel: 'noopener noreferrer nofollow ugc' } : {}), children: renderInline(node.children) }, index)) : (_jsx(Fragment, { children: renderInline(node.children) }, index));
|
|
26
|
+
case 'image':
|
|
27
|
+
// Never loaded: it would tell its author who read this, and from where. The reader gets the words, and a link.
|
|
28
|
+
return node.href ? (_jsxs(Link, { href: node.href, target: "_blank", rel: "noopener noreferrer nofollow ugc", children: [node.alt || node.href, " (image)"] }, index)) : (_jsx(Fragment, { children: node.alt }, index));
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
const alignOf = (align) => (align ? { textAlign: align } : {});
|
|
33
|
+
function renderBlock(block, index) {
|
|
34
|
+
switch (block.type) {
|
|
35
|
+
case 'heading': {
|
|
36
|
+
// The page has its own title, so `#` is the page's second level.
|
|
37
|
+
const level = Math.min(block.level + 1, 6);
|
|
38
|
+
return (_jsx(Typography, { component: `h${level}`, sx: { fontSize: ['1.5rem', '1.3rem', '1.15rem', '1.05rem', '1rem'][level - 2], fontWeight: 700, lineHeight: 1.3, mt: 3, mb: 1 }, children: renderInline(block.children) }, index));
|
|
39
|
+
}
|
|
40
|
+
case 'paragraph':
|
|
41
|
+
return (_jsx(Typography, { sx: { my: 1.5, overflowWrap: 'anywhere' }, children: renderInline(block.children) }, index));
|
|
42
|
+
case 'code':
|
|
43
|
+
return (_jsx(Box, { component: "pre", tabIndex: 0, sx: { my: 1.5, p: 1.5, overflowX: 'auto', borderRadius: 1, bgcolor: 'action.hover', fontFamily: 'ui-monospace, SFMono-Regular, Menlo, monospace', fontSize: '0.875rem', lineHeight: 1.5 }, children: _jsx("code", { children: block.text }) }, index));
|
|
44
|
+
case 'quote':
|
|
45
|
+
return (_jsx(Box, { component: "blockquote", sx: { my: 1.5, mx: 0, pl: 2, borderLeft: 3, borderColor: 'divider', color: 'text.secondary' }, children: block.children.map(renderBlock) }, index));
|
|
46
|
+
case 'hr':
|
|
47
|
+
return _jsx(Box, { component: "hr", sx: { my: 3, border: 0, borderTop: 1, borderColor: 'divider' } }, index);
|
|
48
|
+
case 'list':
|
|
49
|
+
return (_jsx(Box, { component: block.ordered ? 'ol' : 'ul', start: block.ordered ? block.start : undefined, sx: { my: 1.5, pl: 3 }, children: block.items.map((item, itemIndex) => (_jsx("li", { children: item.map(renderBlock) }, itemIndex))) }, index));
|
|
50
|
+
case 'table':
|
|
51
|
+
return (_jsx(Box, { sx: { my: 1.5, overflowX: 'auto' }, children: _jsxs(Box, { component: "table", sx: { borderCollapse: 'collapse', minWidth: '50%', '& th, & td': { border: 1, borderColor: 'divider', px: 1.5, py: 0.75 }, '& th': { bgcolor: 'action.hover', fontWeight: 700 } }, children: [_jsx("thead", { children: _jsx("tr", { children: block.head.map((cell, column) => (_jsx("th", { scope: "col", style: alignOf(block.align[column]), children: renderInline(cell) }, column))) }) }), _jsx("tbody", { children: block.rows.map((row, rowIndex) => (_jsx("tr", { children: row.map((cell, column) => (_jsx("td", { style: alignOf(block.align[column]), children: renderInline(cell) }, column))) }, rowIndex))) })] }) }, index));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Text written in Markdown, shown safely. For what other people write (a project's readme): it renders to React
|
|
56
|
+
* elements, never to HTML, so nothing in it can run, raw HTML is shown as the text it is, images are not loaded,
|
|
57
|
+
* and a link must be http(s), mailto, an in-page anchor or an app path. See `parse.ts`.
|
|
58
|
+
*/
|
|
59
|
+
export function Markdown({ children }) {
|
|
60
|
+
const blocks = useMemo(() => parseBlocks(children.slice(0, MAX_MARKDOWN_LENGTH)), [children]);
|
|
61
|
+
return _jsx(Box, { sx: { minWidth: 0, '& > :first-child': { mt: 0 }, '& > :last-child': { mb: 0 } }, children: blocks.map(renderBlock) });
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=Markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Markdown.js","sourceRoot":"","sources":["../../../src/components/Markdown/Markdown.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Markdown/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Markdown/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A small Markdown parser for text written by other people and shown to strangers (a project's readme).
|
|
3
|
+
*
|
|
4
|
+
* It produces a tree, never HTML: nothing here can inject markup, and raw HTML in the source is just text. It
|
|
5
|
+
* reads the part of Markdown a readme uses: headings, paragraphs, emphasis, code, links, lists (nested), quotes,
|
|
6
|
+
* rules and tables. Images are not loaded (see `Inline`), and a link must be http(s), mailto, an in-page `#anchor`
|
|
7
|
+
* or an app path.
|
|
8
|
+
*/
|
|
9
|
+
export type Inline = {
|
|
10
|
+
type: 'text';
|
|
11
|
+
text: string;
|
|
12
|
+
} | {
|
|
13
|
+
type: 'code';
|
|
14
|
+
text: string;
|
|
15
|
+
} | {
|
|
16
|
+
type: 'strong' | 'em' | 'del';
|
|
17
|
+
children: Inline[];
|
|
18
|
+
}
|
|
19
|
+
/** `href` is null where the address is not one a link may have: the text is then shown without it. */
|
|
20
|
+
| {
|
|
21
|
+
type: 'link';
|
|
22
|
+
href: string | null;
|
|
23
|
+
children: Inline[];
|
|
24
|
+
}
|
|
25
|
+
/** Never fetched: a readme that could load images could tell its author who read it, and from where. */
|
|
26
|
+
| {
|
|
27
|
+
type: 'image';
|
|
28
|
+
alt: string;
|
|
29
|
+
href: string | null;
|
|
30
|
+
} | {
|
|
31
|
+
type: 'br';
|
|
32
|
+
};
|
|
33
|
+
export type Align = 'left' | 'center' | 'right' | undefined;
|
|
34
|
+
export type Block = {
|
|
35
|
+
type: 'heading';
|
|
36
|
+
level: 1 | 2 | 3 | 4 | 5 | 6;
|
|
37
|
+
children: Inline[];
|
|
38
|
+
} | {
|
|
39
|
+
type: 'paragraph';
|
|
40
|
+
children: Inline[];
|
|
41
|
+
} | {
|
|
42
|
+
type: 'code';
|
|
43
|
+
lang: string;
|
|
44
|
+
text: string;
|
|
45
|
+
} | {
|
|
46
|
+
type: 'quote';
|
|
47
|
+
children: Block[];
|
|
48
|
+
} | {
|
|
49
|
+
type: 'list';
|
|
50
|
+
ordered: boolean;
|
|
51
|
+
start: number;
|
|
52
|
+
items: Block[][];
|
|
53
|
+
} | {
|
|
54
|
+
type: 'table';
|
|
55
|
+
align: Align[];
|
|
56
|
+
head: Inline[][];
|
|
57
|
+
rows: Inline[][][];
|
|
58
|
+
} | {
|
|
59
|
+
type: 'hr';
|
|
60
|
+
};
|
|
61
|
+
/** The addresses a link may have; anything else (`javascript:`, `data:`, `vbscript:`) is shown as text. */
|
|
62
|
+
export declare function safeHref(href: string): string | null;
|
|
63
|
+
export declare function parseInline(text: string, depth?: number): Inline[];
|
|
64
|
+
export declare function parseBlocks(source: string, depth?: number): Block[];
|
|
65
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/components/Markdown/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,MAAM,GACd;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,GAAG,KAAK,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE;AACvD,sGAAsG;GACpG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE;AAC3D,wGAAwG;GACtG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACnD;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAEnB,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAE5D,MAAM,MAAM,KAAK,GACb;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GACrE;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,KAAK,EAAE,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAA;CAAE,GACnE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,KAAK,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;CAAE,GACvE;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,CAAC;AAKnB,2GAA2G;AAC3G,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAMpD;AA+DD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,MAAM,EAAE,CA0C7D;AA0BD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,KAAK,EAAE,CAkH9D"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A small Markdown parser for text written by other people and shown to strangers (a project's readme).
|
|
3
|
+
*
|
|
4
|
+
* It produces a tree, never HTML: nothing here can inject markup, and raw HTML in the source is just text. It
|
|
5
|
+
* reads the part of Markdown a readme uses: headings, paragraphs, emphasis, code, links, lists (nested), quotes,
|
|
6
|
+
* rules and tables. Images are not loaded (see `Inline`), and a link must be http(s), mailto, an in-page `#anchor`
|
|
7
|
+
* or an app path.
|
|
8
|
+
*/
|
|
9
|
+
/** Quotes and lists inside quotes and lists stop here, so a hostile source cannot recurse without end. */
|
|
10
|
+
const MAX_DEPTH = 6;
|
|
11
|
+
/** The addresses a link may have; anything else (`javascript:`, `data:`, `vbscript:`) is shown as text. */
|
|
12
|
+
export function safeHref(href) {
|
|
13
|
+
const url = href.trim();
|
|
14
|
+
if (/^(https?:|mailto:)/i.test(url))
|
|
15
|
+
return url;
|
|
16
|
+
if (url.startsWith('#'))
|
|
17
|
+
return url;
|
|
18
|
+
if (url.startsWith('/') && !url.startsWith('//'))
|
|
19
|
+
return url;
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
const inlineRules = (depth) => [
|
|
23
|
+
{ re: /\\([\\`*_{}[\]()#+\-.!~|>])/g, make: (m) => ({ node: { type: 'text', text: m[1] }, length: m[0].length }) },
|
|
24
|
+
{
|
|
25
|
+
// A run of backticks opens it and an equal run closes it; a longer or shorter run is just text. Bounded, or a page of
|
|
26
|
+
// backticks would take cubic time.
|
|
27
|
+
re: /(?<!`)(`{1,8})(?!`)([\s\S]{0,1000}?[^`])(?<!`)\1(?!`)/g,
|
|
28
|
+
make: (m) => ({ node: { type: 'code', text: m[2].replace(/^ (.*) $/, '$1') }, length: m[0].length })
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
re: /!\[([^\]\n]{0,300})\]\(\s*<?((?:[^\s()<>]|\([^\s()<>]*\)){1,2000})>?(?:\s+"[^"\n]{0,300}")?\s*\)/g,
|
|
32
|
+
make: (m) => ({ node: { type: 'image', alt: m[1], href: safeHref(m[2]) }, length: m[0].length })
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
re: /\[((?:[^\]\\\n]|\\.){1,500})\]\(\s*<?((?:[^\s()<>]|\([^\s()<>]*\)){1,2000})>?(?:\s+"[^"\n]{0,300}")?\s*\)/g,
|
|
36
|
+
make: (m) => ({ node: { type: 'link', href: safeHref(m[2]), children: parseInline(m[1], depth + 1) }, length: m[0].length })
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
re: /<((?:https?:\/\/|mailto:)[^\s<>]{1,2000})>/gi,
|
|
40
|
+
make: (m) => ({ node: { type: 'link', href: safeHref(m[1]), children: [{ type: 'text', text: m[1] }] }, length: m[0].length })
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
re: /\bhttps?:\/\/[^\s<]{1,2000}/gi,
|
|
44
|
+
make: (m) => {
|
|
45
|
+
// A sentence's own punctuation is not part of the address that ends it.
|
|
46
|
+
const url = m[0].replace(/[.,;:!?)'"\]]+$/, '');
|
|
47
|
+
return { node: { type: 'link', href: safeHref(url), children: [{ type: 'text', text: url }] }, length: url.length };
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
// The closing pair is the last two of a run, so `**bold *and italic***` closes at the end, not in the middle.
|
|
52
|
+
re: /\*\*(?=\S)([\s\S]{0,1000}?\S)\*\*(?!\*)/g,
|
|
53
|
+
make: (m) => ({ node: { type: 'strong', children: parseInline(m[1], depth + 1) }, length: m[0].length })
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
re: /(?<![\w_])__(?=\S)([\s\S]{0,1000}?\S)__(?![\w_])/g,
|
|
57
|
+
make: (m) => ({ node: { type: 'strong', children: parseInline(m[1], depth + 1) }, length: m[0].length })
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
re: /~~(?=\S)([\s\S]{0,1000}?\S)~~/g,
|
|
61
|
+
make: (m) => ({ node: { type: 'del', children: parseInline(m[1], depth + 1) }, length: m[0].length })
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
// `_` inside a word (snake_case) is not emphasis.
|
|
65
|
+
re: /(?:(?<![\w*])\*(?=[^\s*])([\s\S]{0,1000}?[^\s*])\*(?!\*)|(?<![\w_])_(?=[^\s_])([\s\S]{0,1000}?[^\s_])_(?![\w_]))/g,
|
|
66
|
+
make: (m) => ({ node: { type: 'em', children: parseInline(m[1] ?? m[2], depth + 1) }, length: m[0].length })
|
|
67
|
+
},
|
|
68
|
+
{ re: /(?: {2,}|\\)\n/g, make: (m) => ({ node: { type: 'br' }, length: m[0].length }) }
|
|
69
|
+
];
|
|
70
|
+
/** Longer than a paragraph needs: shown as the text it is, with no emphasis or links read out of it. */
|
|
71
|
+
const MAX_INLINE_LENGTH = 5000;
|
|
72
|
+
export function parseInline(text, depth = 0) {
|
|
73
|
+
if (depth > MAX_DEPTH)
|
|
74
|
+
return [{ type: 'text', text }];
|
|
75
|
+
if (text.length > MAX_INLINE_LENGTH)
|
|
76
|
+
return [{ type: 'text', text: text.replace(/\n/g, ' ') }];
|
|
77
|
+
const rules = inlineRules(depth);
|
|
78
|
+
// Where each pattern next matches, found once and kept until the scan passes it; null: nowhere ahead.
|
|
79
|
+
const next = rules.map(() => undefined);
|
|
80
|
+
const out = [];
|
|
81
|
+
const push = (value) => {
|
|
82
|
+
const plain = value.replace(/\n/g, ' ');
|
|
83
|
+
if (!plain)
|
|
84
|
+
return;
|
|
85
|
+
const last = out[out.length - 1];
|
|
86
|
+
if (last?.type === 'text')
|
|
87
|
+
last.text += plain;
|
|
88
|
+
else
|
|
89
|
+
out.push({ type: 'text', text: plain });
|
|
90
|
+
};
|
|
91
|
+
const find = (k, from) => {
|
|
92
|
+
const held = next[k];
|
|
93
|
+
if (held === null || (held && held.index >= from))
|
|
94
|
+
return held;
|
|
95
|
+
const rule = rules[k];
|
|
96
|
+
rule.re.lastIndex = from;
|
|
97
|
+
const m = rule.re.exec(text);
|
|
98
|
+
next[k] = m ? { index: m.index, ...rule.make(m) } : null;
|
|
99
|
+
return next[k];
|
|
100
|
+
};
|
|
101
|
+
let pos = 0;
|
|
102
|
+
while (pos < text.length) {
|
|
103
|
+
let best = null;
|
|
104
|
+
for (let k = 0; k < rules.length; k += 1) {
|
|
105
|
+
const found = find(k, pos);
|
|
106
|
+
if (found && (!best || found.index < best.index))
|
|
107
|
+
best = found;
|
|
108
|
+
}
|
|
109
|
+
if (!best) {
|
|
110
|
+
push(text.slice(pos));
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
push(text.slice(pos, best.index));
|
|
114
|
+
if (best.node.type === 'text')
|
|
115
|
+
push(best.node.text);
|
|
116
|
+
else
|
|
117
|
+
out.push(best.node);
|
|
118
|
+
pos = best.index + best.length;
|
|
119
|
+
}
|
|
120
|
+
return out;
|
|
121
|
+
}
|
|
122
|
+
const FENCE = /^ {0,3}(`{3,}|~{3,})\s*([\w+-]*)[^\n]*$/;
|
|
123
|
+
const HEADING = /^ {0,3}(#{1,6})\s+(.*?)(?:\s+#+)?\s*$/;
|
|
124
|
+
const RULE = /^ {0,3}([-*_])(?:\s*\1){2,}\s*$/;
|
|
125
|
+
const QUOTE = /^ {0,3}>\s?(.*)$/;
|
|
126
|
+
const ITEM = /^(\s*)([-*+]|\d{1,9}[.)])\s+(.*)$/;
|
|
127
|
+
const TABLE_SEPARATOR = /^\s*\|?\s*:?-+:?\s*(?:\|\s*:?-+:?\s*)*\|?\s*$/;
|
|
128
|
+
const indentOf = (line) => line.match(/^\s*/)[0].replace(/\t/g, ' ').length;
|
|
129
|
+
const splitRow = (line) => {
|
|
130
|
+
const cells = line.trim().replace(/^\|/, '').replace(/\|$/, '').split(/(?<!\\)\|/);
|
|
131
|
+
return cells.map((cell) => cell.trim().replace(/\\\|/g, '|'));
|
|
132
|
+
};
|
|
133
|
+
/** A header row, then a delimiter row with as many cells: what makes a table a table. */
|
|
134
|
+
const isTableStart = (lines, i) => lines[i].includes('|') &&
|
|
135
|
+
i + 1 < lines.length &&
|
|
136
|
+
TABLE_SEPARATOR.test(lines[i + 1]) &&
|
|
137
|
+
splitRow(lines[i + 1]).length === splitRow(lines[i]).length;
|
|
138
|
+
const startsBlock = (line) => FENCE.test(line) || HEADING.test(line) || RULE.test(line) || QUOTE.test(line) || ITEM.test(line);
|
|
139
|
+
export function parseBlocks(source, depth = 0) {
|
|
140
|
+
if (depth > MAX_DEPTH)
|
|
141
|
+
return [{ type: 'paragraph', children: [{ type: 'text', text: source }] }];
|
|
142
|
+
const lines = source.replace(/\r\n?/g, '\n').split('\n');
|
|
143
|
+
const blocks = [];
|
|
144
|
+
let i = 0;
|
|
145
|
+
while (i < lines.length) {
|
|
146
|
+
const line = lines[i];
|
|
147
|
+
if (!line.trim()) {
|
|
148
|
+
i += 1;
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
const fence = FENCE.exec(line);
|
|
152
|
+
if (fence) {
|
|
153
|
+
const mark = fence[1];
|
|
154
|
+
const body = [];
|
|
155
|
+
i += 1;
|
|
156
|
+
while (i < lines.length && !new RegExp(`^ {0,3}${mark[0]}{${mark.length},}\\s*$`).test(lines[i])) {
|
|
157
|
+
body.push(lines[i]);
|
|
158
|
+
i += 1;
|
|
159
|
+
}
|
|
160
|
+
i += 1; // the closing fence, or the end of the text: an unclosed block runs to the end
|
|
161
|
+
blocks.push({ type: 'code', lang: fence[2], text: body.join('\n') });
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
const heading = HEADING.exec(line);
|
|
165
|
+
if (heading) {
|
|
166
|
+
blocks.push({ type: 'heading', level: heading[1].length, children: parseInline(heading[2]) });
|
|
167
|
+
i += 1;
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
if (RULE.test(line)) {
|
|
171
|
+
blocks.push({ type: 'hr' });
|
|
172
|
+
i += 1;
|
|
173
|
+
continue;
|
|
174
|
+
}
|
|
175
|
+
if (QUOTE.test(line)) {
|
|
176
|
+
const inner = [];
|
|
177
|
+
while (i < lines.length && QUOTE.test(lines[i])) {
|
|
178
|
+
inner.push(QUOTE.exec(lines[i])[1]);
|
|
179
|
+
i += 1;
|
|
180
|
+
}
|
|
181
|
+
blocks.push({ type: 'quote', children: parseBlocks(inner.join('\n'), depth + 1) });
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
if (isTableStart(lines, i)) {
|
|
185
|
+
const head = splitRow(line);
|
|
186
|
+
const align = splitRow(lines[i + 1]).map((cell) => cell.startsWith(':') && cell.endsWith(':') ? 'center' : cell.endsWith(':') ? 'right' : cell.startsWith(':') ? 'left' : undefined);
|
|
187
|
+
i += 2;
|
|
188
|
+
const rows = [];
|
|
189
|
+
while (i < lines.length && lines[i].trim() && lines[i].includes('|')) {
|
|
190
|
+
rows.push(splitRow(lines[i]));
|
|
191
|
+
i += 1;
|
|
192
|
+
}
|
|
193
|
+
blocks.push({
|
|
194
|
+
type: 'table',
|
|
195
|
+
align,
|
|
196
|
+
head: head.map((cell) => parseInline(cell)),
|
|
197
|
+
// A row has as many cells as the header: short ones are padded, long ones cut.
|
|
198
|
+
rows: rows.map((row) => head.map((_, column) => parseInline(row[column] ?? '')))
|
|
199
|
+
});
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
const item = ITEM.exec(line);
|
|
203
|
+
if (item) {
|
|
204
|
+
const base = indentOf(line);
|
|
205
|
+
const ordered = /\d/.test(item[2]);
|
|
206
|
+
const items = [];
|
|
207
|
+
const start = ordered ? parseInt(item[2], 10) : 1;
|
|
208
|
+
while (i < lines.length) {
|
|
209
|
+
const current = lines[i];
|
|
210
|
+
const marker = ITEM.exec(current);
|
|
211
|
+
if (marker && indentOf(current) === base) {
|
|
212
|
+
// A numbered list and a bullet list beside each other are two lists.
|
|
213
|
+
if (/\d/.test(marker[2]) !== ordered)
|
|
214
|
+
break;
|
|
215
|
+
items.push([marker[3]]);
|
|
216
|
+
i += 1;
|
|
217
|
+
}
|
|
218
|
+
else if (items.length > 0 && current.trim() && indentOf(current) > base) {
|
|
219
|
+
// Belongs to the item above: more of its text, or a list nested in it.
|
|
220
|
+
items[items.length - 1].push(current.slice(Math.min(indentOf(current), base + 2)));
|
|
221
|
+
i += 1;
|
|
222
|
+
}
|
|
223
|
+
else if (!current.trim() &&
|
|
224
|
+
i + 1 < lines.length &&
|
|
225
|
+
lines[i + 1].trim() &&
|
|
226
|
+
(indentOf(lines[i + 1]) > base || (ITEM.test(lines[i + 1]) && indentOf(lines[i + 1]) === base && /\d/.test(ITEM.exec(lines[i + 1])[2]) === ordered))) {
|
|
227
|
+
items[items.length - 1].push('');
|
|
228
|
+
i += 1;
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
break;
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
blocks.push({ type: 'list', ordered, start, items: items.map((text) => parseBlocks(text.join('\n'), depth + 1)) });
|
|
235
|
+
continue;
|
|
236
|
+
}
|
|
237
|
+
const paragraph = [line];
|
|
238
|
+
i += 1;
|
|
239
|
+
while (i < lines.length && lines[i].trim() && !startsBlock(lines[i]) && !isTableStart(lines, i)) {
|
|
240
|
+
paragraph.push(lines[i]);
|
|
241
|
+
i += 1;
|
|
242
|
+
}
|
|
243
|
+
blocks.push({ type: 'paragraph', children: parseInline(paragraph.join('\n')) });
|
|
244
|
+
}
|
|
245
|
+
return blocks;
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/components/Markdown/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShareButton.d.ts","sourceRoot":"","sources":["../../src/components/ShareButton.tsx"],"names":[],"mappings":"AAuCA,oHAAoH;AACpH,wBAAgB,WAAW,CAAC,EAAE,GAAG,EAAE,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,sCAEpD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Alert, Button, Dialog, DialogContent, DialogTitle, TextField } from '@mui/material';
|
|
4
|
+
import { Share } from '@mui/icons-material';
|
|
5
|
+
function ShareButtonForUrl({ url }) {
|
|
6
|
+
const [copied, setCopied] = useState(false);
|
|
7
|
+
const [manual, setManual] = useState(false);
|
|
8
|
+
const copy = async () => {
|
|
9
|
+
try {
|
|
10
|
+
await navigator.clipboard.writeText(url);
|
|
11
|
+
setCopied(true);
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
setManual(true);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
return (_jsxs(_Fragment, { children: [_jsx(Button, { size: "small", startIcon: _jsx(Share, {}), onClick: () => void copy(), onBlur: () => setCopied(false), children: copied ? 'Link copied' : 'Share' }), _jsxs(Dialog, { open: manual, onClose: () => setManual(false), fullWidth: true, maxWidth: "sm", children: [_jsx(DialogTitle, { children: "Share this page" }), _jsxs(DialogContent, { children: [_jsx(Alert, { severity: "info", sx: { mb: 2 }, children: "Copy this link to share the page." }), _jsx(TextField, { label: "Share link", value: url, fullWidth: true, slotProps: { input: { readOnly: true } }, onFocus: (event) => event.target.select() })] })] })] }));
|
|
18
|
+
}
|
|
19
|
+
/** Copies the preview URL, with manual selection when clipboard access is unavailable. State belongs to one URL. */
|
|
20
|
+
export function ShareButton({ url }) {
|
|
21
|
+
return url ? _jsx(ShareButtonForUrl, { url: url }, url) : null;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=ShareButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShareButton.js","sourceRoot":"","sources":["../../src/components/ShareButton.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC7F,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAC;AAE5C,SAAS,iBAAiB,CAAC,EAAE,GAAG,EAAmB;IACjD,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACzC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;QAAC,MAAM,CAAC;YACP,SAAS,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC;IACF,OAAO,CACL,8BACE,KAAC,MAAM,IAAC,IAAI,EAAC,OAAO,EAAC,SAAS,EAAE,KAAC,KAAK,KAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,YAClG,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,GAC1B,EACT,MAAC,MAAM,IAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,SAAS,QAAC,QAAQ,EAAC,IAAI,aAC5E,KAAC,WAAW,kCAA8B,EAC1C,MAAC,aAAa,eACZ,KAAC,KAAK,IAAC,QAAQ,EAAC,MAAM,EAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,kDAE5B,EACR,KAAC,SAAS,IACR,KAAK,EAAC,YAAY,EAClB,KAAK,EAAE,GAAG,EACV,SAAS,QACT,SAAS,EAAE,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EACxC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GACzC,IACY,IACT,IACR,CACJ,CAAC;AACJ,CAAC;AAED,oHAAoH;AACpH,MAAM,UAAU,WAAW,CAAC,EAAE,GAAG,EAAoB;IACnD,OAAO,GAAG,CAAC,CAAC,CAAC,KAAC,iBAAiB,IAAW,GAAG,EAAE,GAAG,IAAb,GAAG,CAAc,CAAC,CAAC,CAAC,IAAI,CAAC;AAChE,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
export { createApiClient, ApiError } from './apiClient';
|
|
2
|
+
export { clearVisits, readVisits, recordVisit, useRecentVisits, useTrackVisit } from './recentVisits';
|
|
3
|
+
export type { Visit, VisitKind } from './recentVisits';
|
|
2
4
|
export type { ApiClientOptions, ApiRequestOptions, ApiClient } from './apiClient';
|
|
3
5
|
export { Loader } from './components/Loader';
|
|
4
6
|
export type { LoaderProps } from './components/Loader';
|
|
5
7
|
export { ErrorPage } from './components/ErrorPage';
|
|
6
8
|
export type { ErrorPageProps } from './components/ErrorPage';
|
|
7
9
|
export { AppLayout } from './components/AppLayout';
|
|
8
|
-
export
|
|
10
|
+
export { Markdown, MAX_MARKDOWN_LENGTH } from './components/Markdown';
|
|
11
|
+
export type { AppLayoutProps, AppLayoutNavGroup, AppLayoutNavItem, AppLayoutInternalNavItem, AppLayoutExternalNavItem, AppLayoutRecent, AppLayoutUser } from './components/AppLayout';
|
|
9
12
|
export { PageHeader, Panel, ListRow, RowIcon, SectionHeading, EmptyState, ResponsiveActions, TAB_BAR_HEIGHT, useCompactLayout } from './components/Page';
|
|
10
13
|
export type { PageHeaderProps, PageAction, PanelProps, ListRowProps, SectionHeadingProps, EmptyStateProps, ResponsiveAction, ResponsiveActionsProps } from './components/Page';
|
|
11
14
|
export { createVisinTheme, visinTheme, VISIN_COLORS, COLOR_SCHEME_ATTRIBUTE, COLOR_MODE_STORAGE_KEY, COLOR_SCHEME_STORAGE_KEY, brand, schemes, ink, surface, pageBackground, glass, glassInteractive, liftOnHover, raisedShadow, mainAction, chrome, onImage, tint, livePalette, chartSeries } from './theme';
|
|
@@ -15,7 +18,7 @@ export type { VisinThemeProviderProps, ColorMode, ColorModeSettingProps, ChartCo
|
|
|
15
18
|
export { OwnerPicker, VisibilitySwitch, OwnerChip, TransferOwnershipDialog, transferTargets, ownerLabel } from './components/Ownership';
|
|
16
19
|
export type { OwnerPickerProps, VisibilitySwitchProps, OwnerChipProps, TransferOwnershipDialogProps, OwnerRef, OwnerGroup, OwnerRole, Visibility } from './components/Ownership';
|
|
17
20
|
export { createVisinNavigation } from './navigation';
|
|
18
|
-
export type { VisinApp, VisinAppUrls, VisinNavigation } from './navigation';
|
|
21
|
+
export type { VisinApp, VisinAppUrls, VisinNavigation, VisinNavigationOptions } from './navigation';
|
|
19
22
|
export { createProtectedRoute } from './components/ProtectedRoute';
|
|
20
23
|
export type { ProtectedRouteProps, ProtectedRouteAuth } from './components/ProtectedRoute';
|
|
21
24
|
export { createLoginRedirect } from './components/LoginRedirect';
|
|
@@ -26,4 +29,5 @@ export { createAuthContext } from './auth/AuthProvider';
|
|
|
26
29
|
export type { AuthContextValue } from './auth/AuthProvider';
|
|
27
30
|
export { createConfigProvider } from './config/createConfigProvider';
|
|
28
31
|
export type { CreateConfigProviderOptions } from './config/createConfigProvider';
|
|
32
|
+
export { ShareButton } from './components/ShareButton';
|
|
29
33
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAElF,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,wBAAwB,EACxB,aAAa,EACd,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,UAAU,EACV,KAAK,EACL,OAAO,EACP,OAAO,EACP,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,eAAe,EACf,UAAU,EACV,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,EACL,OAAO,EACP,GAAG,EACH,OAAO,EACP,cAAc,EACd,KAAK,EACL,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,MAAM,EACN,OAAO,EACP,IAAI,EACJ,WAAW,EACX,WAAW,EACZ,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACf,MAAM,wBAAwB,CAAC;AAChC,YAAY,EAAE,uBAAuB,EAAE,SAAS,EAAE,qBAAqB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrH,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,uBAAuB,EACvB,eAAe,EACf,UAAU,EACX,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,gBAAgB,EAChB,qBAAqB,EACrB,cAAc,EACd,4BAA4B,EAC5B,QAAQ,EACR,UAAU,EACV,SAAS,EACT,UAAU,EACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AACrD,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
// @visin/frontend-core - Shared frontend auth/API-client logic for Visin frontends
|
|
2
2
|
export { createApiClient, ApiError } from './apiClient';
|
|
3
|
+
export { clearVisits, readVisits, recordVisit, useRecentVisits, useTrackVisit } from './recentVisits';
|
|
3
4
|
export { Loader } from './components/Loader';
|
|
4
5
|
export { ErrorPage } from './components/ErrorPage';
|
|
5
6
|
export { AppLayout } from './components/AppLayout';
|
|
7
|
+
export { Markdown, MAX_MARKDOWN_LENGTH } from './components/Markdown';
|
|
6
8
|
export { PageHeader, Panel, ListRow, RowIcon, SectionHeading, EmptyState, ResponsiveActions, TAB_BAR_HEIGHT, useCompactLayout } from './components/Page';
|
|
7
9
|
export { createVisinTheme, visinTheme, VISIN_COLORS, COLOR_SCHEME_ATTRIBUTE, COLOR_MODE_STORAGE_KEY, COLOR_SCHEME_STORAGE_KEY, brand, schemes, ink, surface, pageBackground, glass, glassInteractive, liftOnHover, raisedShadow, mainAction, chrome, onImage, tint, livePalette, chartSeries } from './theme';
|
|
8
10
|
export { VisinThemeProvider, ColorModeSetting, COLOR_MODE_OPTIONS, useThemeColorMeta, useActivePalette, useChartColors } from './components/ColorMode';
|
|
@@ -13,4 +15,5 @@ export { createLoginRedirect } from './components/LoginRedirect';
|
|
|
13
15
|
export { createAuthService } from './auth/authService';
|
|
14
16
|
export { createAuthContext } from './auth/AuthProvider';
|
|
15
17
|
export { createConfigProvider } from './config/createConfigProvider';
|
|
18
|
+
export { ShareButton } from './components/ShareButton';
|
|
16
19
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mFAAmF;AAEnF,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAItG,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAUtE,OAAO,EACL,UAAU,EACV,KAAK,EACL,OAAO,EACP,OAAO,EACP,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAW3B,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,sBAAsB,EACtB,sBAAsB,EACtB,wBAAwB,EACxB,KAAK,EACL,OAAO,EACP,GAAG,EACH,OAAO,EACP,cAAc,EACd,KAAK,EACL,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,UAAU,EACV,MAAM,EACN,OAAO,EACP,IAAI,EACJ,WAAW,EACX,WAAW,EACZ,MAAM,SAAS,CAAC;AAEjB,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACf,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,uBAAuB,EACvB,eAAe,EACf,UAAU,EACX,MAAM,wBAAwB,CAAC;AAWhC,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAGrE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC"}
|
package/dist/navigation.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { AppLayoutNavGroup, AppLayoutNavItem } from './components/AppLayout';
|
|
2
2
|
/** The fronts whose sections make up the shared menu. */
|
|
3
|
-
export type VisinApp = 'vision' | 'label' | 'account';
|
|
3
|
+
export type VisinApp = 'shell' | 'vision' | 'label' | 'account';
|
|
4
4
|
export interface VisinAppUrls {
|
|
5
|
+
/** Base URL of shell-front, which owns Home and Explore, e.g. https://app.example.com */
|
|
6
|
+
shell?: string;
|
|
5
7
|
/** Base URL of vision-front, e.g. https://ml.example.com */
|
|
6
8
|
vision?: string;
|
|
7
9
|
/** Base URL of label-front, e.g. https://label.example.com */
|
|
@@ -13,6 +15,14 @@ export interface VisinNavigation {
|
|
|
13
15
|
groups: AppLayoutNavGroup[];
|
|
14
16
|
accountItems: AppLayoutNavItem[];
|
|
15
17
|
}
|
|
18
|
+
export interface VisinNavigationOptions {
|
|
19
|
+
/**
|
|
20
|
+
* Whether the viewer has a session. A visitor's menu leaves out what needs an
|
|
21
|
+
* account (Labels, For you), so no entry leads to a sign-in wall. Defaults to
|
|
22
|
+
* true: label-front and account-front serve no visitors.
|
|
23
|
+
*/
|
|
24
|
+
isAuthenticated?: boolean;
|
|
25
|
+
}
|
|
16
26
|
/**
|
|
17
27
|
* Builds the shared menu. `localApps` are the apps whose sections are routes of
|
|
18
28
|
* the page drawing the menu: one app in a standalone front, all of them in
|
|
@@ -24,5 +34,5 @@ export interface VisinNavigation {
|
|
|
24
34
|
* should hide Jobs, not leave entries that 404 inside Vision. A
|
|
25
35
|
* group left with no sections is omitted with them.
|
|
26
36
|
*/
|
|
27
|
-
export declare function createVisinNavigation(localApps: VisinApp | readonly VisinApp[] | null, urls: VisinAppUrls): VisinNavigation;
|
|
37
|
+
export declare function createVisinNavigation(localApps: VisinApp | readonly VisinApp[] | null, urls: VisinAppUrls, { isAuthenticated }?: VisinNavigationOptions): VisinNavigation;
|
|
28
38
|
//# sourceMappingURL=navigation.d.ts.map
|
package/dist/navigation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../src/navigation.tsx"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAElF,yDAAyD;AACzD,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,CAAC;AAEhE,MAAM,WAAW,YAAY;IAC3B,yFAAyF;IACzF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,YAAY,EAAE,gBAAgB,EAAE,CAAC;CAClC;AA2FD,MAAM,WAAW,sBAAsB;IACrC;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,QAAQ,GAAG,SAAS,QAAQ,EAAE,GAAG,IAAI,EAChD,IAAI,EAAE,YAAY,EAClB,EAAE,eAAsB,EAAE,GAAE,sBAA2B,GACtD,eAAe,CAmCjB"}
|