jvetrau-ds 0.2.18 → 0.2.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/components/embed-viewer/embed-viewer.cjs +33 -27
- package/components/embed-viewer/embed-viewer.cjs.map +1 -1
- package/components/embed-viewer/embed-viewer.d.ts +2 -1
- package/components/embed-viewer/embed-viewer.js +33 -27
- package/components/embed-viewer/embed-viewer.js.map +1 -1
- package/components/embed-viewer/providers/figma.cjs +7 -1
- package/components/embed-viewer/providers/figma.cjs.map +1 -1
- package/components/embed-viewer/providers/figma.d.ts +1 -0
- package/components/embed-viewer/providers/figma.js +7 -2
- package/components/embed-viewer/providers/figma.js.map +1 -1
- package/components/embed-viewer/providers/google.cjs +7 -1
- package/components/embed-viewer/providers/google.cjs.map +1 -1
- package/components/embed-viewer/providers/google.d.ts +1 -0
- package/components/embed-viewer/providers/google.js +7 -2
- package/components/embed-viewer/providers/google.js.map +1 -1
- package/components/embed-viewer/providers/miro.cjs +7 -1
- package/components/embed-viewer/providers/miro.cjs.map +1 -1
- package/components/embed-viewer/providers/miro.d.ts +1 -0
- package/components/embed-viewer/providers/miro.js +7 -2
- package/components/embed-viewer/providers/miro.js.map +1 -1
- package/components/embed-viewer/providers/typeform.cjs +28 -0
- package/components/embed-viewer/providers/typeform.cjs.map +1 -0
- package/components/embed-viewer/providers/typeform.d.ts +5 -0
- package/components/embed-viewer/providers/typeform.js +25 -0
- package/components/embed-viewer/providers/typeform.js.map +1 -0
- package/components/embed-viewer/resolver.cjs +12 -2
- package/components/embed-viewer/resolver.cjs.map +1 -1
- package/components/embed-viewer/resolver.js +15 -5
- package/components/embed-viewer/resolver.js.map +1 -1
- package/package.json +1 -1
|
@@ -28,7 +28,8 @@ const EmbedViewer = ({
|
|
|
28
28
|
description,
|
|
29
29
|
showTemplateAction = false,
|
|
30
30
|
showOpenAction = false,
|
|
31
|
-
|
|
31
|
+
onChangeLink,
|
|
32
|
+
customActions,
|
|
32
33
|
className = "",
|
|
33
34
|
...props
|
|
34
35
|
}) => {
|
|
@@ -72,8 +73,7 @@ const EmbedViewer = ({
|
|
|
72
73
|
]);
|
|
73
74
|
const templateActionUrl = showTemplateAction && resolvedResource.sourceUrl ? resolvedResource.copyUrl ?? resolvedResource.sourceUrl : null;
|
|
74
75
|
const openActionUrl = showOpenAction && resolvedResource.sourceUrl ? resolvedResource.sourceUrl : null;
|
|
75
|
-
const
|
|
76
|
-
const hasActions = hasStandardActions || Boolean(actions);
|
|
76
|
+
const hasActions = templateActionUrl !== null || openActionUrl !== null || onChangeLink !== void 0 || Boolean(customActions);
|
|
77
77
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
78
78
|
"div",
|
|
79
79
|
{
|
|
@@ -97,30 +97,36 @@ const EmbedViewer = ({
|
|
|
97
97
|
alt: ""
|
|
98
98
|
}
|
|
99
99
|
),
|
|
100
|
-
hasActions && /* @__PURE__ */ jsxRuntime.
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
100
|
+
hasActions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "embed-viewer__actions", children: /* @__PURE__ */ jsxRuntime.jsxs(ActionGroup__default.default, { children: [
|
|
101
|
+
templateActionUrl && /* @__PURE__ */ jsxRuntime.jsx(
|
|
102
|
+
Button__default.default,
|
|
103
|
+
{
|
|
104
|
+
onClick: () => openUrl(
|
|
105
|
+
templateActionUrl
|
|
106
|
+
),
|
|
107
|
+
children: "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D"
|
|
108
|
+
}
|
|
109
|
+
),
|
|
110
|
+
openActionUrl && /* @__PURE__ */ jsxRuntime.jsx(
|
|
111
|
+
Button__default.default,
|
|
112
|
+
{
|
|
113
|
+
rank: "link",
|
|
114
|
+
onClick: () => openUrl(
|
|
115
|
+
openActionUrl
|
|
116
|
+
),
|
|
117
|
+
children: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432\u043E \u0432\u0435\u0441\u044C \u044D\u043A\u0440\u0430\u043D"
|
|
118
|
+
}
|
|
119
|
+
),
|
|
120
|
+
onChangeLink && /* @__PURE__ */ jsxRuntime.jsx(
|
|
121
|
+
Button__default.default,
|
|
122
|
+
{
|
|
123
|
+
rank: "link",
|
|
124
|
+
onClick: onChangeLink,
|
|
125
|
+
children: "\u041F\u043E\u043C\u0435\u043D\u044F\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443"
|
|
126
|
+
}
|
|
127
|
+
),
|
|
128
|
+
customActions
|
|
129
|
+
] }) })
|
|
124
130
|
]
|
|
125
131
|
}
|
|
126
132
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/embed-viewer/embed-viewer.tsx"],"names":["classnames","resolveEmbedResource","useState","useEffect","resolveOpenGraphImage","jsxs","jsx","ActionGroup","Button"],"mappings":";;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"sources":["../../../src/components/embed-viewer/embed-viewer.tsx"],"names":["classnames","resolveEmbedResource","useState","useEffect","resolveOpenGraphImage","jsxs","jsx","ActionGroup","Button"],"mappings":"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","file":"embed-viewer.cjs","sourcesContent":["import React, {\n useEffect,\n useState,\n} from 'react';\n\nimport './embed-viewer.css';\nimport ActionGroup from '../action-group';\nimport Button from '../button';\nimport { classnames } from '../helpers/classnames';\nimport {\n resolveOpenGraphImage,\n} from './open-graph';\nimport {\n resolveEmbedResource,\n} from './resolver';\n\nexport interface EmbedViewerProps\n extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n > {\n src: string;\n embedSrc?: string;\n iframeTitle: string;\n description?: React.ReactNode;\n showTemplateAction?: boolean;\n showOpenAction?: boolean;\n onChangeLink?: () => void;\n customActions?: React.ReactNode;\n}\n\nfunction openUrl(url: string) {\n window.open(\n url,\n '_blank',\n 'noopener,noreferrer',\n );\n}\n\nconst EmbedViewer: React.FC<\n EmbedViewerProps\n> = ({\n src,\n embedSrc,\n iframeTitle,\n description,\n showTemplateAction = false,\n showOpenAction = false,\n onChangeLink,\n customActions,\n className = '',\n ...props\n}) => {\n const classes = classnames(\n 'embed-viewer',\n className,\n {},\n );\n\n const resolvedResource =\n resolveEmbedResource({\n src,\n embedSrc,\n });\n\n const [\n previewImageUrl,\n setPreviewImageUrl,\n ] = useState<string | null>(\n null,\n );\n\n useEffect(() => {\n setPreviewImageUrl(null);\n\n if (\n resolvedResource.embedUrl ||\n !resolvedResource.sourceUrl\n ) {\n return;\n }\n\n const controller =\n new AbortController();\n\n void resolveOpenGraphImage(\n resolvedResource.sourceUrl,\n controller.signal,\n ).then((imageUrl) => {\n if (\n !controller.signal.aborted\n ) {\n setPreviewImageUrl(\n imageUrl,\n );\n }\n });\n\n return () => {\n controller.abort();\n };\n }, [\n resolvedResource.embedUrl,\n resolvedResource.sourceUrl,\n ]);\n\n const templateActionUrl =\n showTemplateAction &&\n resolvedResource.sourceUrl\n ? (\n resolvedResource.copyUrl ??\n resolvedResource.sourceUrl\n )\n : null;\n\n const openActionUrl =\n showOpenAction &&\n resolvedResource.sourceUrl\n ? resolvedResource.sourceUrl\n : null;\n\n const hasActions =\n templateActionUrl !== null ||\n openActionUrl !== null ||\n onChangeLink !== undefined ||\n Boolean(customActions);\n\n return (\n <div\n className={classes}\n {...props}\n >\n {description && (\n <div className=\"embed-viewer__description\">\n {description}\n </div>\n )}\n\n {resolvedResource.embedUrl && (\n <iframe\n className=\"embed-viewer__frame\"\n src={\n resolvedResource.embedUrl\n }\n title={iframeTitle}\n />\n )}\n\n {!resolvedResource.embedUrl &&\n previewImageUrl && (\n <img\n className=\"embed-viewer__preview\"\n src={previewImageUrl}\n alt=\"\"\n />\n )}\n\n {hasActions && (\n <div className=\"embed-viewer__actions\">\n <ActionGroup>\n {templateActionUrl && (\n <Button\n onClick={() =>\n openUrl(\n templateActionUrl,\n )\n }\n >\n Скопировать шаблон\n </Button>\n )}\n\n {openActionUrl && (\n <Button\n rank=\"link\"\n onClick={() =>\n openUrl(\n openActionUrl,\n )\n }\n >\n Открыть во весь экран\n </Button>\n )}\n\n {onChangeLink && (\n <Button\n rank=\"link\"\n onClick={\n onChangeLink\n }\n >\n Поменять ссылку\n </Button>\n )}\n\n {customActions}\n </ActionGroup>\n </div>\n )}\n </div>\n );\n};\n\nexport default EmbedViewer;\n"]}
|
|
@@ -7,7 +7,8 @@ export interface EmbedViewerProps extends Omit<React.HTMLAttributes<HTMLDivEleme
|
|
|
7
7
|
description?: React.ReactNode;
|
|
8
8
|
showTemplateAction?: boolean;
|
|
9
9
|
showOpenAction?: boolean;
|
|
10
|
-
|
|
10
|
+
onChangeLink?: () => void;
|
|
11
|
+
customActions?: React.ReactNode;
|
|
11
12
|
}
|
|
12
13
|
declare const EmbedViewer: React.FC<EmbedViewerProps>;
|
|
13
14
|
export default EmbedViewer;
|
|
@@ -21,7 +21,8 @@ const EmbedViewer = ({
|
|
|
21
21
|
description,
|
|
22
22
|
showTemplateAction = false,
|
|
23
23
|
showOpenAction = false,
|
|
24
|
-
|
|
24
|
+
onChangeLink,
|
|
25
|
+
customActions,
|
|
25
26
|
className = "",
|
|
26
27
|
...props
|
|
27
28
|
}) => {
|
|
@@ -65,8 +66,7 @@ const EmbedViewer = ({
|
|
|
65
66
|
]);
|
|
66
67
|
const templateActionUrl = showTemplateAction && resolvedResource.sourceUrl ? resolvedResource.copyUrl ?? resolvedResource.sourceUrl : null;
|
|
67
68
|
const openActionUrl = showOpenAction && resolvedResource.sourceUrl ? resolvedResource.sourceUrl : null;
|
|
68
|
-
const
|
|
69
|
-
const hasActions = hasStandardActions || Boolean(actions);
|
|
69
|
+
const hasActions = templateActionUrl !== null || openActionUrl !== null || onChangeLink !== void 0 || Boolean(customActions);
|
|
70
70
|
return /* @__PURE__ */ jsxs(
|
|
71
71
|
"div",
|
|
72
72
|
{
|
|
@@ -90,30 +90,36 @@ const EmbedViewer = ({
|
|
|
90
90
|
alt: ""
|
|
91
91
|
}
|
|
92
92
|
),
|
|
93
|
-
hasActions && /* @__PURE__ */
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
93
|
+
hasActions && /* @__PURE__ */ jsx("div", { className: "embed-viewer__actions", children: /* @__PURE__ */ jsxs(ActionGroup, { children: [
|
|
94
|
+
templateActionUrl && /* @__PURE__ */ jsx(
|
|
95
|
+
Button,
|
|
96
|
+
{
|
|
97
|
+
onClick: () => openUrl(
|
|
98
|
+
templateActionUrl
|
|
99
|
+
),
|
|
100
|
+
children: "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D"
|
|
101
|
+
}
|
|
102
|
+
),
|
|
103
|
+
openActionUrl && /* @__PURE__ */ jsx(
|
|
104
|
+
Button,
|
|
105
|
+
{
|
|
106
|
+
rank: "link",
|
|
107
|
+
onClick: () => openUrl(
|
|
108
|
+
openActionUrl
|
|
109
|
+
),
|
|
110
|
+
children: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432\u043E \u0432\u0435\u0441\u044C \u044D\u043A\u0440\u0430\u043D"
|
|
111
|
+
}
|
|
112
|
+
),
|
|
113
|
+
onChangeLink && /* @__PURE__ */ jsx(
|
|
114
|
+
Button,
|
|
115
|
+
{
|
|
116
|
+
rank: "link",
|
|
117
|
+
onClick: onChangeLink,
|
|
118
|
+
children: "\u041F\u043E\u043C\u0435\u043D\u044F\u0442\u044C \u0441\u0441\u044B\u043B\u043A\u0443"
|
|
119
|
+
}
|
|
120
|
+
),
|
|
121
|
+
customActions
|
|
122
|
+
] }) })
|
|
117
123
|
]
|
|
118
124
|
}
|
|
119
125
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/embed-viewer/embed-viewer.tsx"],"names":[],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"sources":["../../../src/components/embed-viewer/embed-viewer.tsx"],"names":[],"mappings":"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","file":"embed-viewer.js","sourcesContent":["import React, {\n useEffect,\n useState,\n} from 'react';\n\nimport './embed-viewer.css';\nimport ActionGroup from '../action-group';\nimport Button from '../button';\nimport { classnames } from '../helpers/classnames';\nimport {\n resolveOpenGraphImage,\n} from './open-graph';\nimport {\n resolveEmbedResource,\n} from './resolver';\n\nexport interface EmbedViewerProps\n extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n > {\n src: string;\n embedSrc?: string;\n iframeTitle: string;\n description?: React.ReactNode;\n showTemplateAction?: boolean;\n showOpenAction?: boolean;\n onChangeLink?: () => void;\n customActions?: React.ReactNode;\n}\n\nfunction openUrl(url: string) {\n window.open(\n url,\n '_blank',\n 'noopener,noreferrer',\n );\n}\n\nconst EmbedViewer: React.FC<\n EmbedViewerProps\n> = ({\n src,\n embedSrc,\n iframeTitle,\n description,\n showTemplateAction = false,\n showOpenAction = false,\n onChangeLink,\n customActions,\n className = '',\n ...props\n}) => {\n const classes = classnames(\n 'embed-viewer',\n className,\n {},\n );\n\n const resolvedResource =\n resolveEmbedResource({\n src,\n embedSrc,\n });\n\n const [\n previewImageUrl,\n setPreviewImageUrl,\n ] = useState<string | null>(\n null,\n );\n\n useEffect(() => {\n setPreviewImageUrl(null);\n\n if (\n resolvedResource.embedUrl ||\n !resolvedResource.sourceUrl\n ) {\n return;\n }\n\n const controller =\n new AbortController();\n\n void resolveOpenGraphImage(\n resolvedResource.sourceUrl,\n controller.signal,\n ).then((imageUrl) => {\n if (\n !controller.signal.aborted\n ) {\n setPreviewImageUrl(\n imageUrl,\n );\n }\n });\n\n return () => {\n controller.abort();\n };\n }, [\n resolvedResource.embedUrl,\n resolvedResource.sourceUrl,\n ]);\n\n const templateActionUrl =\n showTemplateAction &&\n resolvedResource.sourceUrl\n ? (\n resolvedResource.copyUrl ??\n resolvedResource.sourceUrl\n )\n : null;\n\n const openActionUrl =\n showOpenAction &&\n resolvedResource.sourceUrl\n ? resolvedResource.sourceUrl\n : null;\n\n const hasActions =\n templateActionUrl !== null ||\n openActionUrl !== null ||\n onChangeLink !== undefined ||\n Boolean(customActions);\n\n return (\n <div\n className={classes}\n {...props}\n >\n {description && (\n <div className=\"embed-viewer__description\">\n {description}\n </div>\n )}\n\n {resolvedResource.embedUrl && (\n <iframe\n className=\"embed-viewer__frame\"\n src={\n resolvedResource.embedUrl\n }\n title={iframeTitle}\n />\n )}\n\n {!resolvedResource.embedUrl &&\n previewImageUrl && (\n <img\n className=\"embed-viewer__preview\"\n src={previewImageUrl}\n alt=\"\"\n />\n )}\n\n {hasActions && (\n <div className=\"embed-viewer__actions\">\n <ActionGroup>\n {templateActionUrl && (\n <Button\n onClick={() =>\n openUrl(\n templateActionUrl,\n )\n }\n >\n Скопировать шаблон\n </Button>\n )}\n\n {openActionUrl && (\n <Button\n rank=\"link\"\n onClick={() =>\n openUrl(\n openActionUrl,\n )\n }\n >\n Открыть во весь экран\n </Button>\n )}\n\n {onChangeLink && (\n <Button\n rank=\"link\"\n onClick={\n onChangeLink\n }\n >\n Поменять ссылку\n </Button>\n )}\n\n {customActions}\n </ActionGroup>\n </div>\n )}\n </div>\n );\n};\n\nexport default EmbedViewer;\n"]}
|
|
@@ -11,13 +11,18 @@ const FIGMA_RESOURCE_TYPES = /* @__PURE__ */ new Set([
|
|
|
11
11
|
"proto",
|
|
12
12
|
"slides"
|
|
13
13
|
]);
|
|
14
|
+
function isFigmaHostname(hostname) {
|
|
15
|
+
return FIGMA_HOSTNAMES.has(
|
|
16
|
+
hostname
|
|
17
|
+
);
|
|
18
|
+
}
|
|
14
19
|
function isFigmaResourceType(value) {
|
|
15
20
|
return FIGMA_RESOURCE_TYPES.has(
|
|
16
21
|
value
|
|
17
22
|
);
|
|
18
23
|
}
|
|
19
24
|
function resolveFigmaResource(url) {
|
|
20
|
-
if (!
|
|
25
|
+
if (!isFigmaHostname(
|
|
21
26
|
url.hostname
|
|
22
27
|
)) {
|
|
23
28
|
return null;
|
|
@@ -39,6 +44,7 @@ function resolveFigmaResource(url) {
|
|
|
39
44
|
};
|
|
40
45
|
}
|
|
41
46
|
|
|
47
|
+
exports.isFigmaHostname = isFigmaHostname;
|
|
42
48
|
exports.resolveFigmaResource = resolveFigmaResource;
|
|
43
49
|
//# sourceMappingURL=figma.cjs.map
|
|
44
50
|
//# sourceMappingURL=figma.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/embed-viewer/providers/figma.ts"],"names":[],"mappings":";;AAWA,MAAM,eAAA,uBACA,GAAA,CAAI;AAAA,EACN,WAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEH,MAAM,oBAAA,uBACA,GAAA,CAAuB;AAAA,EACzB,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/embed-viewer/providers/figma.ts"],"names":[],"mappings":";;AAWA,MAAM,eAAA,uBACA,GAAA,CAAI;AAAA,EACN,WAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEH,MAAM,oBAAA,uBACA,GAAA,CAAuB;AAAA,EACzB,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEI,SAAS,gBACd,QAAA,EACS;AACT,EAAA,OAAO,eAAA,CAAgB,GAAA;AAAA,IACrB;AAAA,GACF;AACF;AAEA,SAAS,oBACP,KAAA,EAC4B;AAC5B,EAAA,OAAO,oBAAA,CAAqB,GAAA;AAAA,IAC1B;AAAA,GACF;AACF;AAEO,SAAS,qBACd,GAAA,EAC2B;AAC3B,EAAA,IACE,CAAC,eAAA;AAAA,IACC,GAAA,CAAI;AAAA,GACN,EACA;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,WACJ,GAAA,CAAI,QAAA,CACD,MAAM,GAAG,CAAA,CACT,OAAO,OAAO,CAAA;AAEnB,EAAA,IACE,QAAA,CAAS,MAAA,GAAS,CAAA,IAClB,CAAC,mBAAA;AAAA,IACC,SAAS,CAAC;AAAA,GACZ,IACA,CAAC,QAAA,CAAS,CAAC,CAAA,EACX;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GACJ,IAAI,GAAA,CAAI,GAAA,CAAI,UAAU,CAAA;AAExB,EAAA,QAAA,CAAS,QAAA,GACP,iBAAA;AAEF,EAAA,QAAA,CAAS,YAAA,CAAa,GAAA;AAAA,IACpB,YAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EACE,SAAS,QAAA;AAAS,GACtB;AACF","file":"figma.cjs","sourcesContent":["export interface FigmaEmbedResource {\n embedUrl: string;\n}\n\ntype FigmaResourceType =\n | 'board'\n | 'deck'\n | 'design'\n | 'proto'\n | 'slides';\n\nconst FIGMA_HOSTNAMES =\n new Set([\n 'figma.com',\n 'www.figma.com',\n ]);\n\nconst FIGMA_RESOURCE_TYPES =\n new Set<FigmaResourceType>([\n 'board',\n 'deck',\n 'design',\n 'proto',\n 'slides',\n ]);\n\nexport function isFigmaHostname(\n hostname: string,\n): boolean {\n return FIGMA_HOSTNAMES.has(\n hostname,\n );\n}\n\nfunction isFigmaResourceType(\n value: string,\n): value is FigmaResourceType {\n return FIGMA_RESOURCE_TYPES.has(\n value as FigmaResourceType,\n );\n}\n\nexport function resolveFigmaResource(\n url: URL,\n): FigmaEmbedResource | null {\n if (\n !isFigmaHostname(\n url.hostname,\n )\n ) {\n return null;\n }\n\n const segments =\n url.pathname\n .split('/')\n .filter(Boolean);\n\n if (\n segments.length < 2 ||\n !isFigmaResourceType(\n segments[0],\n ) ||\n !segments[1]\n ) {\n return null;\n }\n\n const embedUrl =\n new URL(url.toString());\n\n embedUrl.hostname =\n 'embed.figma.com';\n\n embedUrl.searchParams.set(\n 'embed-host',\n 'jvetrau-ds',\n );\n\n return {\n embedUrl:\n embedUrl.toString(),\n };\n}\n"]}
|
|
@@ -9,13 +9,18 @@ const FIGMA_RESOURCE_TYPES = /* @__PURE__ */ new Set([
|
|
|
9
9
|
"proto",
|
|
10
10
|
"slides"
|
|
11
11
|
]);
|
|
12
|
+
function isFigmaHostname(hostname) {
|
|
13
|
+
return FIGMA_HOSTNAMES.has(
|
|
14
|
+
hostname
|
|
15
|
+
);
|
|
16
|
+
}
|
|
12
17
|
function isFigmaResourceType(value) {
|
|
13
18
|
return FIGMA_RESOURCE_TYPES.has(
|
|
14
19
|
value
|
|
15
20
|
);
|
|
16
21
|
}
|
|
17
22
|
function resolveFigmaResource(url) {
|
|
18
|
-
if (!
|
|
23
|
+
if (!isFigmaHostname(
|
|
19
24
|
url.hostname
|
|
20
25
|
)) {
|
|
21
26
|
return null;
|
|
@@ -37,6 +42,6 @@ function resolveFigmaResource(url) {
|
|
|
37
42
|
};
|
|
38
43
|
}
|
|
39
44
|
|
|
40
|
-
export { resolveFigmaResource };
|
|
45
|
+
export { isFigmaHostname, resolveFigmaResource };
|
|
41
46
|
//# sourceMappingURL=figma.js.map
|
|
42
47
|
//# sourceMappingURL=figma.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/embed-viewer/providers/figma.ts"],"names":[],"mappings":"AAWA,MAAM,eAAA,uBACA,GAAA,CAAI;AAAA,EACN,WAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEH,MAAM,oBAAA,uBACA,GAAA,CAAuB;AAAA,EACzB,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/embed-viewer/providers/figma.ts"],"names":[],"mappings":"AAWA,MAAM,eAAA,uBACA,GAAA,CAAI;AAAA,EACN,WAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEH,MAAM,oBAAA,uBACA,GAAA,CAAuB;AAAA,EACzB,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEI,SAAS,gBACd,QAAA,EACS;AACT,EAAA,OAAO,eAAA,CAAgB,GAAA;AAAA,IACrB;AAAA,GACF;AACF;AAEA,SAAS,oBACP,KAAA,EAC4B;AAC5B,EAAA,OAAO,oBAAA,CAAqB,GAAA;AAAA,IAC1B;AAAA,GACF;AACF;AAEO,SAAS,qBACd,GAAA,EAC2B;AAC3B,EAAA,IACE,CAAC,eAAA;AAAA,IACC,GAAA,CAAI;AAAA,GACN,EACA;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,WACJ,GAAA,CAAI,QAAA,CACD,MAAM,GAAG,CAAA,CACT,OAAO,OAAO,CAAA;AAEnB,EAAA,IACE,QAAA,CAAS,MAAA,GAAS,CAAA,IAClB,CAAC,mBAAA;AAAA,IACC,SAAS,CAAC;AAAA,GACZ,IACA,CAAC,QAAA,CAAS,CAAC,CAAA,EACX;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,QAAA,GACJ,IAAI,GAAA,CAAI,GAAA,CAAI,UAAU,CAAA;AAExB,EAAA,QAAA,CAAS,QAAA,GACP,iBAAA;AAEF,EAAA,QAAA,CAAS,YAAA,CAAa,GAAA;AAAA,IACpB,YAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EACE,SAAS,QAAA;AAAS,GACtB;AACF","file":"figma.js","sourcesContent":["export interface FigmaEmbedResource {\n embedUrl: string;\n}\n\ntype FigmaResourceType =\n | 'board'\n | 'deck'\n | 'design'\n | 'proto'\n | 'slides';\n\nconst FIGMA_HOSTNAMES =\n new Set([\n 'figma.com',\n 'www.figma.com',\n ]);\n\nconst FIGMA_RESOURCE_TYPES =\n new Set<FigmaResourceType>([\n 'board',\n 'deck',\n 'design',\n 'proto',\n 'slides',\n ]);\n\nexport function isFigmaHostname(\n hostname: string,\n): boolean {\n return FIGMA_HOSTNAMES.has(\n hostname,\n );\n}\n\nfunction isFigmaResourceType(\n value: string,\n): value is FigmaResourceType {\n return FIGMA_RESOURCE_TYPES.has(\n value as FigmaResourceType,\n );\n}\n\nexport function resolveFigmaResource(\n url: URL,\n): FigmaEmbedResource | null {\n if (\n !isFigmaHostname(\n url.hostname,\n )\n ) {\n return null;\n }\n\n const segments =\n url.pathname\n .split('/')\n .filter(Boolean);\n\n if (\n segments.length < 2 ||\n !isFigmaResourceType(\n segments[0],\n ) ||\n !segments[1]\n ) {\n return null;\n }\n\n const embedUrl =\n new URL(url.toString());\n\n embedUrl.hostname =\n 'embed.figma.com';\n\n embedUrl.searchParams.set(\n 'embed-host',\n 'jvetrau-ds',\n );\n\n return {\n embedUrl:\n embedUrl.toString(),\n };\n}\n"]}
|
|
@@ -6,6 +6,9 @@ const GOOGLE_RESOURCE_TYPES = /* @__PURE__ */ new Set([
|
|
|
6
6
|
"presentation",
|
|
7
7
|
"spreadsheets"
|
|
8
8
|
]);
|
|
9
|
+
function isGoogleHostname(hostname) {
|
|
10
|
+
return hostname === GOOGLE_HOSTNAME;
|
|
11
|
+
}
|
|
9
12
|
function isGoogleResourceType(value) {
|
|
10
13
|
return GOOGLE_RESOURCE_TYPES.has(
|
|
11
14
|
value
|
|
@@ -42,7 +45,9 @@ function createGoogleActionUrl({
|
|
|
42
45
|
return url.toString();
|
|
43
46
|
}
|
|
44
47
|
function resolveGoogleResource(url) {
|
|
45
|
-
if (
|
|
48
|
+
if (!isGoogleHostname(
|
|
49
|
+
url.hostname
|
|
50
|
+
)) {
|
|
46
51
|
return null;
|
|
47
52
|
}
|
|
48
53
|
const segments = url.pathname.split("/").filter(Boolean);
|
|
@@ -73,6 +78,7 @@ function resolveGoogleResource(url) {
|
|
|
73
78
|
};
|
|
74
79
|
}
|
|
75
80
|
|
|
81
|
+
exports.isGoogleHostname = isGoogleHostname;
|
|
76
82
|
exports.resolveGoogleResource = resolveGoogleResource;
|
|
77
83
|
//# sourceMappingURL=google.cjs.map
|
|
78
84
|
//# sourceMappingURL=google.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/embed-viewer/providers/google.ts"],"names":[],"mappings":";;AAUA,MAAM,eAAA,GACJ,iBAAA;AAEF,MAAM,qBAAA,uBACA,GAAA,CAAwB;AAAA,EAC1B,UAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAC,CAAA;
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/embed-viewer/providers/google.ts"],"names":[],"mappings":";;AAUA,MAAM,eAAA,GACJ,iBAAA;AAEF,MAAM,qBAAA,uBACA,GAAA,CAAwB;AAAA,EAC1B,UAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEI,SAAS,iBACd,QAAA,EACS;AACT,EAAA,OAAO,QAAA,KAAa,eAAA;AACtB;AAEA,SAAS,qBACP,KAAA,EAC6B;AAC7B,EAAA,OAAO,qBAAA,CAAsB,GAAA;AAAA,IAC3B;AAAA,GACF;AACF;AAEA,SAAS,aACP,GAAA,EACe;AACf,EAAA,MAAM,QAAA,GACJ,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,KAAK,CAAA;AAE5B,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GACJ,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GACnB,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,GAChB,GAAA,CAAI,IAAA;AAEV,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAI,eAAA;AAAA,IACT;AAAA,GACF,CAAE,IAAI,KAAK,CAAA;AACb;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC7B,YAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAKW;AACT,EAAA,MAAM,MAAM,IAAI,GAAA;AAAA,IACd,WAAW,eAAe,CAAA,CAAA,EAAI,YAAY,CAAA,GAAA,EAAM,UAAU,IAAI,MAAM,CAAA;AAAA,GACtE;AAEA,EAAA,IACE,YAAA,KAAiB,kBACjB,GAAA,EACA;AACA,IAAA,GAAA,CAAI,YAAA,CAAa,GAAA;AAAA,MACf,KAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAI,QAAA,EAAS;AACtB;AAEO,SAAS,sBACd,GAAA,EAC4B;AAC5B,EAAA,IACE,CAAC,gBAAA;AAAA,IACC,GAAA,CAAI;AAAA,GACN,EACA;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,WACJ,GAAA,CAAI,QAAA,CACD,MAAM,GAAG,CAAA,CACT,OAAO,OAAO,CAAA;AAEnB,EAAA,IACE,QAAA,CAAS,MAAA,GAAS,CAAA,IAClB,CAAC,oBAAA;AAAA,IACC,SAAS,CAAC;AAAA,GACZ,IACA,QAAA,CAAS,CAAC,CAAA,KAAM,GAAA,EAChB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,YAAA,GACJ,SAAS,CAAC,CAAA;AAEZ,EAAA,MAAM,UAAA,GACJ,SAAS,CAAC,CAAA;AAEZ,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GACJ,YAAA,KAAiB,cAAA,GACb,YAAA,CAAa,GAAG,CAAA,GAChB,IAAA;AAEN,EAAA,OAAO;AAAA,IACL,UACE,qBAAA,CAAsB;AAAA,MACpB,YAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA,EAAQ,SAAA;AAAA,MACR;AAAA,KACD,CAAA;AAAA,IACH,SACE,qBAAA,CAAsB;AAAA,MACpB,YAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA,EAAQ,MAAA;AAAA,MACR;AAAA,KACD;AAAA,GACL;AACF","file":"google.cjs","sourcesContent":["export interface GoogleEmbedResource {\n embedUrl: string;\n copyUrl: string;\n}\n\ntype GoogleResourceType =\n | 'document'\n | 'presentation'\n | 'spreadsheets';\n\nconst GOOGLE_HOSTNAME =\n 'docs.google.com';\n\nconst GOOGLE_RESOURCE_TYPES =\n new Set<GoogleResourceType>([\n 'document',\n 'presentation',\n 'spreadsheets',\n ]);\n\nexport function isGoogleHostname(\n hostname: string,\n): boolean {\n return hostname === GOOGLE_HOSTNAME;\n}\n\nfunction isGoogleResourceType(\n value: string,\n): value is GoogleResourceType {\n return GOOGLE_RESOURCE_TYPES.has(\n value as GoogleResourceType,\n );\n}\n\nfunction getSheetsGid(\n url: URL,\n): string | null {\n const queryGid =\n url.searchParams.get('gid');\n\n if (queryGid) {\n return queryGid;\n }\n\n const hash =\n url.hash.startsWith('#')\n ? url.hash.slice(1)\n : url.hash;\n\n if (!hash) {\n return null;\n }\n\n return new URLSearchParams(\n hash,\n ).get('gid');\n}\n\nfunction createGoogleActionUrl({\n resourceType,\n resourceId,\n action,\n gid,\n}: {\n resourceType: GoogleResourceType;\n resourceId: string;\n action: 'copy' | 'preview';\n gid: string | null;\n}): string {\n const url = new URL(\n `https://${GOOGLE_HOSTNAME}/${resourceType}/d/${resourceId}/${action}`,\n );\n\n if (\n resourceType === 'spreadsheets' &&\n gid\n ) {\n url.searchParams.set(\n 'gid',\n gid,\n );\n }\n\n return url.toString();\n}\n\nexport function resolveGoogleResource(\n url: URL,\n): GoogleEmbedResource | null {\n if (\n !isGoogleHostname(\n url.hostname,\n )\n ) {\n return null;\n }\n\n const segments =\n url.pathname\n .split('/')\n .filter(Boolean);\n\n if (\n segments.length < 4 ||\n !isGoogleResourceType(\n segments[0],\n ) ||\n segments[1] !== 'd'\n ) {\n return null;\n }\n\n const resourceType =\n segments[0];\n\n const resourceId =\n segments[2];\n\n if (!resourceId) {\n return null;\n }\n\n const gid =\n resourceType === 'spreadsheets'\n ? getSheetsGid(url)\n : null;\n\n return {\n embedUrl:\n createGoogleActionUrl({\n resourceType,\n resourceId,\n action: 'preview',\n gid,\n }),\n copyUrl:\n createGoogleActionUrl({\n resourceType,\n resourceId,\n action: 'copy',\n gid,\n }),\n };\n}\n"]}
|
|
@@ -4,6 +4,9 @@ const GOOGLE_RESOURCE_TYPES = /* @__PURE__ */ new Set([
|
|
|
4
4
|
"presentation",
|
|
5
5
|
"spreadsheets"
|
|
6
6
|
]);
|
|
7
|
+
function isGoogleHostname(hostname) {
|
|
8
|
+
return hostname === GOOGLE_HOSTNAME;
|
|
9
|
+
}
|
|
7
10
|
function isGoogleResourceType(value) {
|
|
8
11
|
return GOOGLE_RESOURCE_TYPES.has(
|
|
9
12
|
value
|
|
@@ -40,7 +43,9 @@ function createGoogleActionUrl({
|
|
|
40
43
|
return url.toString();
|
|
41
44
|
}
|
|
42
45
|
function resolveGoogleResource(url) {
|
|
43
|
-
if (
|
|
46
|
+
if (!isGoogleHostname(
|
|
47
|
+
url.hostname
|
|
48
|
+
)) {
|
|
44
49
|
return null;
|
|
45
50
|
}
|
|
46
51
|
const segments = url.pathname.split("/").filter(Boolean);
|
|
@@ -71,6 +76,6 @@ function resolveGoogleResource(url) {
|
|
|
71
76
|
};
|
|
72
77
|
}
|
|
73
78
|
|
|
74
|
-
export { resolveGoogleResource };
|
|
79
|
+
export { isGoogleHostname, resolveGoogleResource };
|
|
75
80
|
//# sourceMappingURL=google.js.map
|
|
76
81
|
//# sourceMappingURL=google.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/embed-viewer/providers/google.ts"],"names":[],"mappings":"AAUA,MAAM,eAAA,GACJ,iBAAA;AAEF,MAAM,qBAAA,uBACA,GAAA,CAAwB;AAAA,EAC1B,UAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAC,CAAA;
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/embed-viewer/providers/google.ts"],"names":[],"mappings":"AAUA,MAAM,eAAA,GACJ,iBAAA;AAEF,MAAM,qBAAA,uBACA,GAAA,CAAwB;AAAA,EAC1B,UAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEI,SAAS,iBACd,QAAA,EACS;AACT,EAAA,OAAO,QAAA,KAAa,eAAA;AACtB;AAEA,SAAS,qBACP,KAAA,EAC6B;AAC7B,EAAA,OAAO,qBAAA,CAAsB,GAAA;AAAA,IAC3B;AAAA,GACF;AACF;AAEA,SAAS,aACP,GAAA,EACe;AACf,EAAA,MAAM,QAAA,GACJ,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,KAAK,CAAA;AAE5B,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,QAAA;AAAA,EACT;AAEA,EAAA,MAAM,IAAA,GACJ,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,GAAG,CAAA,GACnB,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,GAChB,GAAA,CAAI,IAAA;AAEV,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO,IAAI,eAAA;AAAA,IACT;AAAA,GACF,CAAE,IAAI,KAAK,CAAA;AACb;AAEA,SAAS,qBAAA,CAAsB;AAAA,EAC7B,YAAA;AAAA,EACA,UAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAKW;AACT,EAAA,MAAM,MAAM,IAAI,GAAA;AAAA,IACd,WAAW,eAAe,CAAA,CAAA,EAAI,YAAY,CAAA,GAAA,EAAM,UAAU,IAAI,MAAM,CAAA;AAAA,GACtE;AAEA,EAAA,IACE,YAAA,KAAiB,kBACjB,GAAA,EACA;AACA,IAAA,GAAA,CAAI,YAAA,CAAa,GAAA;AAAA,MACf,KAAA;AAAA,MACA;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,IAAI,QAAA,EAAS;AACtB;AAEO,SAAS,sBACd,GAAA,EAC4B;AAC5B,EAAA,IACE,CAAC,gBAAA;AAAA,IACC,GAAA,CAAI;AAAA,GACN,EACA;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,WACJ,GAAA,CAAI,QAAA,CACD,MAAM,GAAG,CAAA,CACT,OAAO,OAAO,CAAA;AAEnB,EAAA,IACE,QAAA,CAAS,MAAA,GAAS,CAAA,IAClB,CAAC,oBAAA;AAAA,IACC,SAAS,CAAC;AAAA,GACZ,IACA,QAAA,CAAS,CAAC,CAAA,KAAM,GAAA,EAChB;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,YAAA,GACJ,SAAS,CAAC,CAAA;AAEZ,EAAA,MAAM,UAAA,GACJ,SAAS,CAAC,CAAA;AAEZ,EAAA,IAAI,CAAC,UAAA,EAAY;AACf,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,GAAA,GACJ,YAAA,KAAiB,cAAA,GACb,YAAA,CAAa,GAAG,CAAA,GAChB,IAAA;AAEN,EAAA,OAAO;AAAA,IACL,UACE,qBAAA,CAAsB;AAAA,MACpB,YAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA,EAAQ,SAAA;AAAA,MACR;AAAA,KACD,CAAA;AAAA,IACH,SACE,qBAAA,CAAsB;AAAA,MACpB,YAAA;AAAA,MACA,UAAA;AAAA,MACA,MAAA,EAAQ,MAAA;AAAA,MACR;AAAA,KACD;AAAA,GACL;AACF","file":"google.js","sourcesContent":["export interface GoogleEmbedResource {\n embedUrl: string;\n copyUrl: string;\n}\n\ntype GoogleResourceType =\n | 'document'\n | 'presentation'\n | 'spreadsheets';\n\nconst GOOGLE_HOSTNAME =\n 'docs.google.com';\n\nconst GOOGLE_RESOURCE_TYPES =\n new Set<GoogleResourceType>([\n 'document',\n 'presentation',\n 'spreadsheets',\n ]);\n\nexport function isGoogleHostname(\n hostname: string,\n): boolean {\n return hostname === GOOGLE_HOSTNAME;\n}\n\nfunction isGoogleResourceType(\n value: string,\n): value is GoogleResourceType {\n return GOOGLE_RESOURCE_TYPES.has(\n value as GoogleResourceType,\n );\n}\n\nfunction getSheetsGid(\n url: URL,\n): string | null {\n const queryGid =\n url.searchParams.get('gid');\n\n if (queryGid) {\n return queryGid;\n }\n\n const hash =\n url.hash.startsWith('#')\n ? url.hash.slice(1)\n : url.hash;\n\n if (!hash) {\n return null;\n }\n\n return new URLSearchParams(\n hash,\n ).get('gid');\n}\n\nfunction createGoogleActionUrl({\n resourceType,\n resourceId,\n action,\n gid,\n}: {\n resourceType: GoogleResourceType;\n resourceId: string;\n action: 'copy' | 'preview';\n gid: string | null;\n}): string {\n const url = new URL(\n `https://${GOOGLE_HOSTNAME}/${resourceType}/d/${resourceId}/${action}`,\n );\n\n if (\n resourceType === 'spreadsheets' &&\n gid\n ) {\n url.searchParams.set(\n 'gid',\n gid,\n );\n }\n\n return url.toString();\n}\n\nexport function resolveGoogleResource(\n url: URL,\n): GoogleEmbedResource | null {\n if (\n !isGoogleHostname(\n url.hostname,\n )\n ) {\n return null;\n }\n\n const segments =\n url.pathname\n .split('/')\n .filter(Boolean);\n\n if (\n segments.length < 4 ||\n !isGoogleResourceType(\n segments[0],\n ) ||\n segments[1] !== 'd'\n ) {\n return null;\n }\n\n const resourceType =\n segments[0];\n\n const resourceId =\n segments[2];\n\n if (!resourceId) {\n return null;\n }\n\n const gid =\n resourceType === 'spreadsheets'\n ? getSheetsGid(url)\n : null;\n\n return {\n embedUrl:\n createGoogleActionUrl({\n resourceType,\n resourceId,\n action: 'preview',\n gid,\n }),\n copyUrl:\n createGoogleActionUrl({\n resourceType,\n resourceId,\n action: 'copy',\n gid,\n }),\n };\n}\n"]}
|
|
@@ -4,8 +4,13 @@ const MIRO_HOSTNAMES = /* @__PURE__ */ new Set([
|
|
|
4
4
|
"miro.com",
|
|
5
5
|
"www.miro.com"
|
|
6
6
|
]);
|
|
7
|
+
function isMiroHostname(hostname) {
|
|
8
|
+
return MIRO_HOSTNAMES.has(
|
|
9
|
+
hostname
|
|
10
|
+
);
|
|
11
|
+
}
|
|
7
12
|
function resolveMiroResource(url) {
|
|
8
|
-
if (!
|
|
13
|
+
if (!isMiroHostname(
|
|
9
14
|
url.hostname
|
|
10
15
|
)) {
|
|
11
16
|
return null;
|
|
@@ -32,6 +37,7 @@ function resolveMiroResource(url) {
|
|
|
32
37
|
};
|
|
33
38
|
}
|
|
34
39
|
|
|
40
|
+
exports.isMiroHostname = isMiroHostname;
|
|
35
41
|
exports.resolveMiroResource = resolveMiroResource;
|
|
36
42
|
//# sourceMappingURL=miro.cjs.map
|
|
37
43
|
//# sourceMappingURL=miro.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/embed-viewer/providers/miro.ts"],"names":[],"mappings":";;AAIA,MAAM,cAAA,uBACA,GAAA,CAAI;AAAA,EACN,UAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEI,SAAS,oBACd,GAAA,EAC0B;AAC1B,EAAA,IACE,CAAC,cAAA
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/embed-viewer/providers/miro.ts"],"names":[],"mappings":";;AAIA,MAAM,cAAA,uBACA,GAAA,CAAI;AAAA,EACN,UAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEI,SAAS,eACd,QAAA,EACS;AACT,EAAA,OAAO,cAAA,CAAe,GAAA;AAAA,IACpB;AAAA,GACF;AACF;AAEO,SAAS,oBACd,GAAA,EAC0B;AAC1B,EAAA,IACE,CAAC,cAAA;AAAA,IACC,GAAA,CAAI;AAAA,GACN,EACA;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GACJ,IAAI,QAAA,CAAS,KAAA;AAAA,IACX;AAAA,GACF;AAEF,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GACJ,MAAM,CAAC,CAAA;AAET,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,WACJ,IAAI,GAAA;AAAA,IACF,mCAAmC,OAAO,CAAA,CAAA;AAAA,GAC5C;AAEF,EAAA,QAAA,CAAS,YAAA,CAAa,GAAA;AAAA,IACpB,UAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EACE,SAAS,QAAA;AAAS,GACtB;AACF","file":"miro.cjs","sourcesContent":["export interface MiroEmbedResource {\n embedUrl: string;\n}\n\nconst MIRO_HOSTNAMES =\n new Set([\n 'miro.com',\n 'www.miro.com',\n ]);\n\nexport function isMiroHostname(\n hostname: string,\n): boolean {\n return MIRO_HOSTNAMES.has(\n hostname,\n );\n}\n\nexport function resolveMiroResource(\n url: URL,\n): MiroEmbedResource | null {\n if (\n !isMiroHostname(\n url.hostname,\n )\n ) {\n return null;\n }\n\n const match =\n url.pathname.match(\n /^\\/app\\/board\\/([^/]+)\\/?$/,\n );\n\n if (!match) {\n return null;\n }\n\n const boardId =\n match[1];\n\n if (!boardId) {\n return null;\n }\n\n const embedUrl =\n new URL(\n `https://miro.com/app/live-embed/${boardId}/`,\n );\n\n embedUrl.searchParams.set(\n 'autoplay',\n 'true',\n );\n\n return {\n embedUrl:\n embedUrl.toString(),\n };\n}\n"]}
|
|
@@ -2,8 +2,13 @@ const MIRO_HOSTNAMES = /* @__PURE__ */ new Set([
|
|
|
2
2
|
"miro.com",
|
|
3
3
|
"www.miro.com"
|
|
4
4
|
]);
|
|
5
|
+
function isMiroHostname(hostname) {
|
|
6
|
+
return MIRO_HOSTNAMES.has(
|
|
7
|
+
hostname
|
|
8
|
+
);
|
|
9
|
+
}
|
|
5
10
|
function resolveMiroResource(url) {
|
|
6
|
-
if (!
|
|
11
|
+
if (!isMiroHostname(
|
|
7
12
|
url.hostname
|
|
8
13
|
)) {
|
|
9
14
|
return null;
|
|
@@ -30,6 +35,6 @@ function resolveMiroResource(url) {
|
|
|
30
35
|
};
|
|
31
36
|
}
|
|
32
37
|
|
|
33
|
-
export { resolveMiroResource };
|
|
38
|
+
export { isMiroHostname, resolveMiroResource };
|
|
34
39
|
//# sourceMappingURL=miro.js.map
|
|
35
40
|
//# sourceMappingURL=miro.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/embed-viewer/providers/miro.ts"],"names":[],"mappings":"AAIA,MAAM,cAAA,uBACA,GAAA,CAAI;AAAA,EACN,UAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEI,SAAS,oBACd,GAAA,EAC0B;AAC1B,EAAA,IACE,CAAC,cAAA
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/embed-viewer/providers/miro.ts"],"names":[],"mappings":"AAIA,MAAM,cAAA,uBACA,GAAA,CAAI;AAAA,EACN,UAAA;AAAA,EACA;AACF,CAAC,CAAA;AAEI,SAAS,eACd,QAAA,EACS;AACT,EAAA,OAAO,cAAA,CAAe,GAAA;AAAA,IACpB;AAAA,GACF;AACF;AAEO,SAAS,oBACd,GAAA,EAC0B;AAC1B,EAAA,IACE,CAAC,cAAA;AAAA,IACC,GAAA,CAAI;AAAA,GACN,EACA;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GACJ,IAAI,QAAA,CAAS,KAAA;AAAA,IACX;AAAA,GACF;AAEF,EAAA,IAAI,CAAC,KAAA,EAAO;AACV,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAA,GACJ,MAAM,CAAC,CAAA;AAET,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,WACJ,IAAI,GAAA;AAAA,IACF,mCAAmC,OAAO,CAAA,CAAA;AAAA,GAC5C;AAEF,EAAA,QAAA,CAAS,YAAA,CAAa,GAAA;AAAA,IACpB,UAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EACE,SAAS,QAAA;AAAS,GACtB;AACF","file":"miro.js","sourcesContent":["export interface MiroEmbedResource {\n embedUrl: string;\n}\n\nconst MIRO_HOSTNAMES =\n new Set([\n 'miro.com',\n 'www.miro.com',\n ]);\n\nexport function isMiroHostname(\n hostname: string,\n): boolean {\n return MIRO_HOSTNAMES.has(\n hostname,\n );\n}\n\nexport function resolveMiroResource(\n url: URL,\n): MiroEmbedResource | null {\n if (\n !isMiroHostname(\n url.hostname,\n )\n ) {\n return null;\n }\n\n const match =\n url.pathname.match(\n /^\\/app\\/board\\/([^/]+)\\/?$/,\n );\n\n if (!match) {\n return null;\n }\n\n const boardId =\n match[1];\n\n if (!boardId) {\n return null;\n }\n\n const embedUrl =\n new URL(\n `https://miro.com/app/live-embed/${boardId}/`,\n );\n\n embedUrl.searchParams.set(\n 'autoplay',\n 'true',\n );\n\n return {\n embedUrl:\n embedUrl.toString(),\n };\n}\n"]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
function isTypeformHostname(hostname) {
|
|
4
|
+
return hostname === "typeform.com" || hostname.endsWith(
|
|
5
|
+
".typeform.com"
|
|
6
|
+
);
|
|
7
|
+
}
|
|
8
|
+
function resolveTypeformResource(url) {
|
|
9
|
+
if (!isTypeformHostname(
|
|
10
|
+
url.hostname
|
|
11
|
+
)) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
const match = url.pathname.match(
|
|
15
|
+
/^\/to\/([^/]+)\/?$/
|
|
16
|
+
);
|
|
17
|
+
if (!match || !match[1]) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
embedUrl: url.toString()
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
exports.isTypeformHostname = isTypeformHostname;
|
|
26
|
+
exports.resolveTypeformResource = resolveTypeformResource;
|
|
27
|
+
//# sourceMappingURL=typeform.cjs.map
|
|
28
|
+
//# sourceMappingURL=typeform.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/embed-viewer/providers/typeform.ts"],"names":[],"mappings":";;AAIO,SAAS,mBACd,QAAA,EACS;AACT,EAAA,OACE,QAAA,KAAa,kBACb,QAAA,CAAS,QAAA;AAAA,IACP;AAAA,GACF;AAEJ;AAEO,SAAS,wBACd,GAAA,EAC8B;AAC9B,EAAA,IACE,CAAC,kBAAA;AAAA,IACC,GAAA,CAAI;AAAA,GACN,EACA;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GACJ,IAAI,QAAA,CAAS,KAAA;AAAA,IACX;AAAA,GACF;AAEF,EAAA,IACE,CAAC,KAAA,IACD,CAAC,KAAA,CAAM,CAAC,CAAA,EACR;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EACE,IAAI,QAAA;AAAS,GACjB;AACF","file":"typeform.cjs","sourcesContent":["export interface TypeformEmbedResource {\n embedUrl: string;\n}\n\nexport function isTypeformHostname(\n hostname: string,\n): boolean {\n return (\n hostname === 'typeform.com' ||\n hostname.endsWith(\n '.typeform.com',\n )\n );\n}\n\nexport function resolveTypeformResource(\n url: URL,\n): TypeformEmbedResource | null {\n if (\n !isTypeformHostname(\n url.hostname,\n )\n ) {\n return null;\n }\n\n const match =\n url.pathname.match(\n /^\\/to\\/([^/]+)\\/?$/,\n );\n\n if (\n !match ||\n !match[1]\n ) {\n return null;\n }\n\n return {\n embedUrl:\n url.toString(),\n };\n}\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
function isTypeformHostname(hostname) {
|
|
2
|
+
return hostname === "typeform.com" || hostname.endsWith(
|
|
3
|
+
".typeform.com"
|
|
4
|
+
);
|
|
5
|
+
}
|
|
6
|
+
function resolveTypeformResource(url) {
|
|
7
|
+
if (!isTypeformHostname(
|
|
8
|
+
url.hostname
|
|
9
|
+
)) {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
const match = url.pathname.match(
|
|
13
|
+
/^\/to\/([^/]+)\/?$/
|
|
14
|
+
);
|
|
15
|
+
if (!match || !match[1]) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
return {
|
|
19
|
+
embedUrl: url.toString()
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { isTypeformHostname, resolveTypeformResource };
|
|
24
|
+
//# sourceMappingURL=typeform.js.map
|
|
25
|
+
//# sourceMappingURL=typeform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/embed-viewer/providers/typeform.ts"],"names":[],"mappings":"AAIO,SAAS,mBACd,QAAA,EACS;AACT,EAAA,OACE,QAAA,KAAa,kBACb,QAAA,CAAS,QAAA;AAAA,IACP;AAAA,GACF;AAEJ;AAEO,SAAS,wBACd,GAAA,EAC8B;AAC9B,EAAA,IACE,CAAC,kBAAA;AAAA,IACC,GAAA,CAAI;AAAA,GACN,EACA;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,KAAA,GACJ,IAAI,QAAA,CAAS,KAAA;AAAA,IACX;AAAA,GACF;AAEF,EAAA,IACE,CAAC,KAAA,IACD,CAAC,KAAA,CAAM,CAAC,CAAA,EACR;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EACE,IAAI,QAAA;AAAS,GACjB;AACF","file":"typeform.js","sourcesContent":["export interface TypeformEmbedResource {\n embedUrl: string;\n}\n\nexport function isTypeformHostname(\n hostname: string,\n): boolean {\n return (\n hostname === 'typeform.com' ||\n hostname.endsWith(\n '.typeform.com',\n )\n );\n}\n\nexport function resolveTypeformResource(\n url: URL,\n): TypeformEmbedResource | null {\n if (\n !isTypeformHostname(\n url.hostname,\n )\n ) {\n return null;\n }\n\n const match =\n url.pathname.match(\n /^\\/to\\/([^/]+)\\/?$/,\n );\n\n if (\n !match ||\n !match[1]\n ) {\n return null;\n }\n\n return {\n embedUrl:\n url.toString(),\n };\n}\n"]}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
var figma = require('./providers/figma');
|
|
4
4
|
var google = require('./providers/google');
|
|
5
5
|
var miro = require('./providers/miro');
|
|
6
|
+
var typeform = require('./providers/typeform');
|
|
6
7
|
|
|
7
8
|
function parseHttpUrl(value) {
|
|
8
9
|
try {
|
|
@@ -27,6 +28,9 @@ function createEmptyResource() {
|
|
|
27
28
|
}
|
|
28
29
|
};
|
|
29
30
|
}
|
|
31
|
+
function isKnownProviderHostname(hostname) {
|
|
32
|
+
return google.isGoogleHostname(hostname) || miro.isMiroHostname(hostname) || figma.isFigmaHostname(hostname) || typeform.isTypeformHostname(hostname);
|
|
33
|
+
}
|
|
30
34
|
function resolveEmbedResource({
|
|
31
35
|
src,
|
|
32
36
|
embedSrc
|
|
@@ -44,9 +48,15 @@ function resolveEmbedResource({
|
|
|
44
48
|
const figmaResource = figma.resolveFigmaResource(
|
|
45
49
|
sourceUrl
|
|
46
50
|
);
|
|
47
|
-
const
|
|
51
|
+
const typeformResource = typeform.resolveTypeformResource(
|
|
52
|
+
sourceUrl
|
|
53
|
+
);
|
|
54
|
+
const providerEmbedUrl = googleResource?.embedUrl ?? miroResource?.embedUrl ?? figmaResource?.embedUrl ?? typeformResource?.embedUrl ?? null;
|
|
48
55
|
const explicitEmbedUrl = embedSrc ? parseHttpUrl(embedSrc) : null;
|
|
49
|
-
const
|
|
56
|
+
const genericEmbedUrl = isKnownProviderHostname(
|
|
57
|
+
sourceUrl.hostname
|
|
58
|
+
) ? null : sourceUrl.toString();
|
|
59
|
+
const resolvedEmbedUrl = explicitEmbedUrl?.toString() ?? providerEmbedUrl ?? genericEmbedUrl;
|
|
50
60
|
return {
|
|
51
61
|
sourceUrl: sourceUrl.toString(),
|
|
52
62
|
embedUrl: resolvedEmbedUrl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/embed-viewer/resolver.ts"],"names":["resolveGoogleResource","resolveMiroResource","resolveFigmaResource"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/components/embed-viewer/resolver.ts"],"names":["isGoogleHostname","isMiroHostname","isFigmaHostname","isTypeformHostname","resolveGoogleResource","resolveMiroResource","resolveFigmaResource","resolveTypeformResource"],"mappings":";;;;;;;AAiCA,SAAS,aACP,KAAA,EACY;AACZ,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GACJ,IAAI,GAAA,CAAI,KAAK,CAAA;AAEf,IAAA,IACE,GAAA,CAAI,QAAA,KAAa,OAAA,IACjB,GAAA,CAAI,aAAa,QAAA,EACjB;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,mBAAA,GAA6C;AACpD,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,IAAA;AAAA,IACX,QAAA,EAAU,IAAA;AAAA,IACV,eAAA,EAAiB,IAAA;AAAA,IACjB,OAAA,EAAS,IAAA;AAAA,IACT,YAAA,EAAc;AAAA,MACZ,KAAA,EAAO,KAAA;AAAA,MACP,IAAA,EAAM;AAAA;AACR,GACF;AACF;AAEA,SAAS,wBACP,QAAA,EACS;AACT,EAAA,OACEA,uBAAA,CAAiB,QAAQ,CAAA,IACzBC,mBAAA,CAAe,QAAQ,KACvBC,qBAAA,CAAgB,QAAQ,CAAA,IACxBC,2BAAA,CAAmB,QAAQ,CAAA;AAE/B;AAEO,SAAS,oBAAA,CAAqB;AAAA,EACnC,GAAA;AAAA,EACA;AACF,CAAA,EAAuD;AACrD,EAAA,MAAM,SAAA,GACJ,aAAa,GAAG,CAAA;AAElB,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,mBAAA,EAAoB;AAAA,EAC7B;AAEA,EAAA,MAAM,cAAA,GACJC,4BAAA;AAAA,IACE;AAAA,GACF;AAEF,EAAA,MAAM,YAAA,GACJC,wBAAA;AAAA,IACE;AAAA,GACF;AAEF,EAAA,MAAM,aAAA,GACJC,0BAAA;AAAA,IACE;AAAA,GACF;AAEF,EAAA,MAAM,gBAAA,GACJC,gCAAA;AAAA,IACE;AAAA,GACF;AAEF,EAAA,MAAM,gBAAA,GACJ,gBAAgB,QAAA,IAChB,YAAA,EAAc,YACd,aAAA,EAAe,QAAA,IACf,kBAAkB,QAAA,IAClB,IAAA;AAEF,EAAA,MAAM,gBAAA,GACJ,QAAA,GACI,YAAA,CAAa,QAAQ,CAAA,GACrB,IAAA;AAEN,EAAA,MAAM,eAAA,GACJ,uBAAA;AAAA,IACE,SAAA,CAAU;AAAA,GACZ,GACI,IAAA,GACA,SAAA,CAAU,QAAA,EAAS;AAEzB,EAAA,MAAM,gBAAA,GACJ,gBAAA,EAAkB,QAAA,EAAS,IAC3B,gBAAA,IACA,eAAA;AAEF,EAAA,OAAO;AAAA,IACL,SAAA,EACE,UAAU,QAAA,EAAS;AAAA,IACrB,QAAA,EACE,gBAAA;AAAA,IACF,eAAA,EAAiB,IAAA;AAAA,IACjB,OAAA,EACE,gBAAgB,OAAA,IAChB,IAAA;AAAA,IACF,YAAA,EAAc;AAAA,MACZ,OACE,gBAAA,KAAqB,IAAA;AAAA,MACvB,IAAA,EAAM;AAAA;AACR,GACF;AACF","file":"resolver.cjs","sourcesContent":["import {\n isFigmaHostname,\n resolveFigmaResource,\n} from './providers/figma';\nimport {\n isGoogleHostname,\n resolveGoogleResource,\n} from './providers/google';\nimport {\n isMiroHostname,\n resolveMiroResource,\n} from './providers/miro';\nimport {\n isTypeformHostname,\n resolveTypeformResource,\n} from './providers/typeform';\n\nexport interface ResolvedEmbedResource {\n sourceUrl: string | null;\n embedUrl: string | null;\n previewImageUrl: string | null;\n copyUrl: string | null;\n capabilities: {\n embed: boolean;\n open: boolean;\n };\n}\n\nexport interface ResolveEmbedResourceOptions {\n src: string;\n embedSrc?: string;\n}\n\nfunction parseHttpUrl(\n value: string,\n): URL | null {\n try {\n const url =\n new URL(value);\n\n if (\n url.protocol !== 'http:' &&\n url.protocol !== 'https:'\n ) {\n return null;\n }\n\n return url;\n } catch {\n return null;\n }\n}\n\nfunction createEmptyResource(): ResolvedEmbedResource {\n return {\n sourceUrl: null,\n embedUrl: null,\n previewImageUrl: null,\n copyUrl: null,\n capabilities: {\n embed: false,\n open: false,\n },\n };\n}\n\nfunction isKnownProviderHostname(\n hostname: string,\n): boolean {\n return (\n isGoogleHostname(hostname) ||\n isMiroHostname(hostname) ||\n isFigmaHostname(hostname) ||\n isTypeformHostname(hostname)\n );\n}\n\nexport function resolveEmbedResource({\n src,\n embedSrc,\n}: ResolveEmbedResourceOptions): ResolvedEmbedResource {\n const sourceUrl =\n parseHttpUrl(src);\n\n if (!sourceUrl) {\n return createEmptyResource();\n }\n\n const googleResource =\n resolveGoogleResource(\n sourceUrl,\n );\n\n const miroResource =\n resolveMiroResource(\n sourceUrl,\n );\n\n const figmaResource =\n resolveFigmaResource(\n sourceUrl,\n );\n\n const typeformResource =\n resolveTypeformResource(\n sourceUrl,\n );\n\n const providerEmbedUrl =\n googleResource?.embedUrl ??\n miroResource?.embedUrl ??\n figmaResource?.embedUrl ??\n typeformResource?.embedUrl ??\n null;\n\n const explicitEmbedUrl =\n embedSrc\n ? parseHttpUrl(embedSrc)\n : null;\n\n const genericEmbedUrl =\n isKnownProviderHostname(\n sourceUrl.hostname,\n )\n ? null\n : sourceUrl.toString();\n\n const resolvedEmbedUrl =\n explicitEmbedUrl?.toString() ??\n providerEmbedUrl ??\n genericEmbedUrl;\n\n return {\n sourceUrl:\n sourceUrl.toString(),\n embedUrl:\n resolvedEmbedUrl,\n previewImageUrl: null,\n copyUrl:\n googleResource?.copyUrl ??\n null,\n capabilities: {\n embed:\n resolvedEmbedUrl !== null,\n open: true,\n },\n };\n}\n"]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { resolveFigmaResource } from './providers/figma';
|
|
2
|
-
import { resolveGoogleResource } from './providers/google';
|
|
3
|
-
import { resolveMiroResource } from './providers/miro';
|
|
1
|
+
import { resolveFigmaResource, isFigmaHostname } from './providers/figma';
|
|
2
|
+
import { resolveGoogleResource, isGoogleHostname } from './providers/google';
|
|
3
|
+
import { resolveMiroResource, isMiroHostname } from './providers/miro';
|
|
4
|
+
import { resolveTypeformResource, isTypeformHostname } from './providers/typeform';
|
|
4
5
|
|
|
5
6
|
function parseHttpUrl(value) {
|
|
6
7
|
try {
|
|
@@ -25,6 +26,9 @@ function createEmptyResource() {
|
|
|
25
26
|
}
|
|
26
27
|
};
|
|
27
28
|
}
|
|
29
|
+
function isKnownProviderHostname(hostname) {
|
|
30
|
+
return isGoogleHostname(hostname) || isMiroHostname(hostname) || isFigmaHostname(hostname) || isTypeformHostname(hostname);
|
|
31
|
+
}
|
|
28
32
|
function resolveEmbedResource({
|
|
29
33
|
src,
|
|
30
34
|
embedSrc
|
|
@@ -42,9 +46,15 @@ function resolveEmbedResource({
|
|
|
42
46
|
const figmaResource = resolveFigmaResource(
|
|
43
47
|
sourceUrl
|
|
44
48
|
);
|
|
45
|
-
const
|
|
49
|
+
const typeformResource = resolveTypeformResource(
|
|
50
|
+
sourceUrl
|
|
51
|
+
);
|
|
52
|
+
const providerEmbedUrl = googleResource?.embedUrl ?? miroResource?.embedUrl ?? figmaResource?.embedUrl ?? typeformResource?.embedUrl ?? null;
|
|
46
53
|
const explicitEmbedUrl = embedSrc ? parseHttpUrl(embedSrc) : null;
|
|
47
|
-
const
|
|
54
|
+
const genericEmbedUrl = isKnownProviderHostname(
|
|
55
|
+
sourceUrl.hostname
|
|
56
|
+
) ? null : sourceUrl.toString();
|
|
57
|
+
const resolvedEmbedUrl = explicitEmbedUrl?.toString() ?? providerEmbedUrl ?? genericEmbedUrl;
|
|
48
58
|
return {
|
|
49
59
|
sourceUrl: sourceUrl.toString(),
|
|
50
60
|
embedUrl: resolvedEmbedUrl,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/components/embed-viewer/resolver.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/components/embed-viewer/resolver.ts"],"names":[],"mappings":";;;;;AAiCA,SAAS,aACP,KAAA,EACY;AACZ,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GACJ,IAAI,GAAA,CAAI,KAAK,CAAA;AAEf,IAAA,IACE,GAAA,CAAI,QAAA,KAAa,OAAA,IACjB,GAAA,CAAI,aAAa,QAAA,EACjB;AACA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,mBAAA,GAA6C;AACpD,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,IAAA;AAAA,IACX,QAAA,EAAU,IAAA;AAAA,IACV,eAAA,EAAiB,IAAA;AAAA,IACjB,OAAA,EAAS,IAAA;AAAA,IACT,YAAA,EAAc;AAAA,MACZ,KAAA,EAAO,KAAA;AAAA,MACP,IAAA,EAAM;AAAA;AACR,GACF;AACF;AAEA,SAAS,wBACP,QAAA,EACS;AACT,EAAA,OACE,gBAAA,CAAiB,QAAQ,CAAA,IACzB,cAAA,CAAe,QAAQ,KACvB,eAAA,CAAgB,QAAQ,CAAA,IACxB,kBAAA,CAAmB,QAAQ,CAAA;AAE/B;AAEO,SAAS,oBAAA,CAAqB;AAAA,EACnC,GAAA;AAAA,EACA;AACF,CAAA,EAAuD;AACrD,EAAA,MAAM,SAAA,GACJ,aAAa,GAAG,CAAA;AAElB,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,mBAAA,EAAoB;AAAA,EAC7B;AAEA,EAAA,MAAM,cAAA,GACJ,qBAAA;AAAA,IACE;AAAA,GACF;AAEF,EAAA,MAAM,YAAA,GACJ,mBAAA;AAAA,IACE;AAAA,GACF;AAEF,EAAA,MAAM,aAAA,GACJ,oBAAA;AAAA,IACE;AAAA,GACF;AAEF,EAAA,MAAM,gBAAA,GACJ,uBAAA;AAAA,IACE;AAAA,GACF;AAEF,EAAA,MAAM,gBAAA,GACJ,gBAAgB,QAAA,IAChB,YAAA,EAAc,YACd,aAAA,EAAe,QAAA,IACf,kBAAkB,QAAA,IAClB,IAAA;AAEF,EAAA,MAAM,gBAAA,GACJ,QAAA,GACI,YAAA,CAAa,QAAQ,CAAA,GACrB,IAAA;AAEN,EAAA,MAAM,eAAA,GACJ,uBAAA;AAAA,IACE,SAAA,CAAU;AAAA,GACZ,GACI,IAAA,GACA,SAAA,CAAU,QAAA,EAAS;AAEzB,EAAA,MAAM,gBAAA,GACJ,gBAAA,EAAkB,QAAA,EAAS,IAC3B,gBAAA,IACA,eAAA;AAEF,EAAA,OAAO;AAAA,IACL,SAAA,EACE,UAAU,QAAA,EAAS;AAAA,IACrB,QAAA,EACE,gBAAA;AAAA,IACF,eAAA,EAAiB,IAAA;AAAA,IACjB,OAAA,EACE,gBAAgB,OAAA,IAChB,IAAA;AAAA,IACF,YAAA,EAAc;AAAA,MACZ,OACE,gBAAA,KAAqB,IAAA;AAAA,MACvB,IAAA,EAAM;AAAA;AACR,GACF;AACF","file":"resolver.js","sourcesContent":["import {\n isFigmaHostname,\n resolveFigmaResource,\n} from './providers/figma';\nimport {\n isGoogleHostname,\n resolveGoogleResource,\n} from './providers/google';\nimport {\n isMiroHostname,\n resolveMiroResource,\n} from './providers/miro';\nimport {\n isTypeformHostname,\n resolveTypeformResource,\n} from './providers/typeform';\n\nexport interface ResolvedEmbedResource {\n sourceUrl: string | null;\n embedUrl: string | null;\n previewImageUrl: string | null;\n copyUrl: string | null;\n capabilities: {\n embed: boolean;\n open: boolean;\n };\n}\n\nexport interface ResolveEmbedResourceOptions {\n src: string;\n embedSrc?: string;\n}\n\nfunction parseHttpUrl(\n value: string,\n): URL | null {\n try {\n const url =\n new URL(value);\n\n if (\n url.protocol !== 'http:' &&\n url.protocol !== 'https:'\n ) {\n return null;\n }\n\n return url;\n } catch {\n return null;\n }\n}\n\nfunction createEmptyResource(): ResolvedEmbedResource {\n return {\n sourceUrl: null,\n embedUrl: null,\n previewImageUrl: null,\n copyUrl: null,\n capabilities: {\n embed: false,\n open: false,\n },\n };\n}\n\nfunction isKnownProviderHostname(\n hostname: string,\n): boolean {\n return (\n isGoogleHostname(hostname) ||\n isMiroHostname(hostname) ||\n isFigmaHostname(hostname) ||\n isTypeformHostname(hostname)\n );\n}\n\nexport function resolveEmbedResource({\n src,\n embedSrc,\n}: ResolveEmbedResourceOptions): ResolvedEmbedResource {\n const sourceUrl =\n parseHttpUrl(src);\n\n if (!sourceUrl) {\n return createEmptyResource();\n }\n\n const googleResource =\n resolveGoogleResource(\n sourceUrl,\n );\n\n const miroResource =\n resolveMiroResource(\n sourceUrl,\n );\n\n const figmaResource =\n resolveFigmaResource(\n sourceUrl,\n );\n\n const typeformResource =\n resolveTypeformResource(\n sourceUrl,\n );\n\n const providerEmbedUrl =\n googleResource?.embedUrl ??\n miroResource?.embedUrl ??\n figmaResource?.embedUrl ??\n typeformResource?.embedUrl ??\n null;\n\n const explicitEmbedUrl =\n embedSrc\n ? parseHttpUrl(embedSrc)\n : null;\n\n const genericEmbedUrl =\n isKnownProviderHostname(\n sourceUrl.hostname,\n )\n ? null\n : sourceUrl.toString();\n\n const resolvedEmbedUrl =\n explicitEmbedUrl?.toString() ??\n providerEmbedUrl ??\n genericEmbedUrl;\n\n return {\n sourceUrl:\n sourceUrl.toString(),\n embedUrl:\n resolvedEmbedUrl,\n previewImageUrl: null,\n copyUrl:\n googleResource?.copyUrl ??\n null,\n capabilities: {\n embed:\n resolvedEmbedUrl !== null,\n open: true,\n },\n };\n}\n"]}
|