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.
Files changed (30) hide show
  1. package/components/embed-viewer/embed-viewer.cjs +33 -27
  2. package/components/embed-viewer/embed-viewer.cjs.map +1 -1
  3. package/components/embed-viewer/embed-viewer.d.ts +2 -1
  4. package/components/embed-viewer/embed-viewer.js +33 -27
  5. package/components/embed-viewer/embed-viewer.js.map +1 -1
  6. package/components/embed-viewer/providers/figma.cjs +7 -1
  7. package/components/embed-viewer/providers/figma.cjs.map +1 -1
  8. package/components/embed-viewer/providers/figma.d.ts +1 -0
  9. package/components/embed-viewer/providers/figma.js +7 -2
  10. package/components/embed-viewer/providers/figma.js.map +1 -1
  11. package/components/embed-viewer/providers/google.cjs +7 -1
  12. package/components/embed-viewer/providers/google.cjs.map +1 -1
  13. package/components/embed-viewer/providers/google.d.ts +1 -0
  14. package/components/embed-viewer/providers/google.js +7 -2
  15. package/components/embed-viewer/providers/google.js.map +1 -1
  16. package/components/embed-viewer/providers/miro.cjs +7 -1
  17. package/components/embed-viewer/providers/miro.cjs.map +1 -1
  18. package/components/embed-viewer/providers/miro.d.ts +1 -0
  19. package/components/embed-viewer/providers/miro.js +7 -2
  20. package/components/embed-viewer/providers/miro.js.map +1 -1
  21. package/components/embed-viewer/providers/typeform.cjs +28 -0
  22. package/components/embed-viewer/providers/typeform.cjs.map +1 -0
  23. package/components/embed-viewer/providers/typeform.d.ts +5 -0
  24. package/components/embed-viewer/providers/typeform.js +25 -0
  25. package/components/embed-viewer/providers/typeform.js.map +1 -0
  26. package/components/embed-viewer/resolver.cjs +12 -2
  27. package/components/embed-viewer/resolver.cjs.map +1 -1
  28. package/components/embed-viewer/resolver.js +15 -5
  29. package/components/embed-viewer/resolver.js.map +1 -1
  30. package/package.json +1 -1
@@ -28,7 +28,8 @@ const EmbedViewer = ({
28
28
  description,
29
29
  showTemplateAction = false,
30
30
  showOpenAction = false,
31
- actions,
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 hasStandardActions = templateActionUrl !== null || openActionUrl !== null;
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.jsxs("div", { className: "embed-viewer__actions", children: [
101
- hasStandardActions && /* @__PURE__ */ jsxRuntime.jsxs(ActionGroup__default.default, { children: [
102
- templateActionUrl && /* @__PURE__ */ jsxRuntime.jsx(
103
- Button__default.default,
104
- {
105
- onClick: () => openUrl(
106
- templateActionUrl
107
- ),
108
- children: "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D"
109
- }
110
- ),
111
- openActionUrl && /* @__PURE__ */ jsxRuntime.jsx(
112
- Button__default.default,
113
- {
114
- rank: "link",
115
- onClick: () => openUrl(
116
- openActionUrl
117
- ),
118
- children: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432\u043E \u0432\u0435\u0441\u044C \u044D\u043A\u0440\u0430\u043D"
119
- }
120
- )
121
- ] }),
122
- actions
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":"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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 actions?: 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 actions,\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 hasStandardActions =\n templateActionUrl !== null ||\n openActionUrl !== null;\n\n const hasActions =\n hasStandardActions ||\n Boolean(actions);\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 {hasStandardActions && (\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 </ActionGroup>\n )}\n\n {actions}\n </div>\n )}\n </div>\n );\n};\n\nexport default EmbedViewer;\n"]}
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
- actions?: React.ReactNode;
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
- actions,
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 hasStandardActions = templateActionUrl !== null || openActionUrl !== null;
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__ */ jsxs("div", { className: "embed-viewer__actions", children: [
94
- hasStandardActions && /* @__PURE__ */ jsxs(ActionGroup, { children: [
95
- templateActionUrl && /* @__PURE__ */ jsx(
96
- Button,
97
- {
98
- onClick: () => openUrl(
99
- templateActionUrl
100
- ),
101
- children: "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0448\u0430\u0431\u043B\u043E\u043D"
102
- }
103
- ),
104
- openActionUrl && /* @__PURE__ */ jsx(
105
- Button,
106
- {
107
- rank: "link",
108
- onClick: () => openUrl(
109
- openActionUrl
110
- ),
111
- children: "\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u0432\u043E \u0432\u0435\u0441\u044C \u044D\u043A\u0440\u0430\u043D"
112
- }
113
- )
114
- ] }),
115
- actions
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":";;;;;;;;;AA8BA,SAAS,QAAQ,GAAA,EAAa;AAC5B,EAAA,MAAA,CAAO,IAAA;AAAA,IACL,GAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,MAAM,cAEF,CAAC;AAAA,EACH,GAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,kBAAA,GAAqB,KAAA;AAAA,EACrB,cAAA,GAAiB,KAAA;AAAA,EACjB,OAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAU,UAAA;AAAA,IACd,cAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,MAAM,mBACJ,oBAAA,CAAqB;AAAA,IACnB,GAAA;AAAA,IACA;AAAA,GACD,CAAA;AAEH,EAAA,MAAM;AAAA,IACJ,eAAA;AAAA,IACA;AAAA,GACF,GAAI,QAAA;AAAA,IACF;AAAA,GACF;AAEA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,kBAAA,CAAmB,IAAI,CAAA;AAEvB,IAAA,IACE,gBAAA,CAAiB,QAAA,IACjB,CAAC,gBAAA,CAAiB,SAAA,EAClB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,UAAA,GACJ,IAAI,eAAA,EAAgB;AAEtB,IAAA,KAAK,qBAAA;AAAA,MACH,gBAAA,CAAiB,SAAA;AAAA,MACjB,UAAA,CAAW;AAAA,KACb,CAAE,IAAA,CAAK,CAAC,QAAA,KAAa;AACnB,MAAA,IACE,CAAC,UAAA,CAAW,MAAA,CAAO,OAAA,EACnB;AACA,QAAA,kBAAA;AAAA,UACE;AAAA,SACF;AAAA,MACF;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,MAAM;AACX,MAAA,UAAA,CAAW,KAAA,EAAM;AAAA,IACnB,CAAA;AAAA,EACF,CAAA,EAAG;AAAA,IACD,gBAAA,CAAiB,QAAA;AAAA,IACjB,gBAAA,CAAiB;AAAA,GAClB,CAAA;AAED,EAAA,MAAM,oBACJ,kBAAA,IACA,gBAAA,CAAiB,YAEX,gBAAA,CAAiB,OAAA,IACjB,iBAAiB,SAAA,GAEnB,IAAA;AAEN,EAAA,MAAM,aAAA,GACJ,cAAA,IACA,gBAAA,CAAiB,SAAA,GACb,iBAAiB,SAAA,GACjB,IAAA;AAEN,EAAA,MAAM,kBAAA,GACJ,iBAAA,KAAsB,IAAA,IACtB,aAAA,KAAkB,IAAA;AAEpB,EAAA,MAAM,UAAA,GACJ,kBAAA,IACA,OAAA,CAAQ,OAAO,CAAA;AAEjB,EAAA,uBACE,IAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,WAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACZ,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,QAGD,iBAAiB,QAAA,oBAChB,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,qBAAA;AAAA,YACV,KACE,gBAAA,CAAiB,QAAA;AAAA,YAEnB,KAAA,EAAO;AAAA;AAAA,SACT;AAAA,QAGD,CAAC,gBAAA,CAAiB,QAAA,IACjB,eAAA,oBACE,GAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,uBAAA;AAAA,YACV,GAAA,EAAK,eAAA;AAAA,YACL,GAAA,EAAI;AAAA;AAAA,SACN;AAAA,QAGH,UAAA,oBACC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EACZ,QAAA,EAAA;AAAA,UAAA,kBAAA,yBACE,WAAA,EAAA,EACE,QAAA,EAAA;AAAA,YAAA,iBAAA,oBACC,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,SAAS,MACP,OAAA;AAAA,kBACE;AAAA,iBACF;AAAA,gBAEH,QAAA,EAAA;AAAA;AAAA,aAED;AAAA,YAGD,aAAA,oBACC,GAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,MAAA;AAAA,gBACL,SAAS,MACP,OAAA;AAAA,kBACE;AAAA,iBACF;AAAA,gBAEH,QAAA,EAAA;AAAA;AAAA;AAED,WAAA,EAEJ,CAAA;AAAA,UAGD;AAAA,SAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAA;AAEA,IAAO,oBAAA,GAAQ","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 actions?: 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 actions,\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 hasStandardActions =\n templateActionUrl !== null ||\n openActionUrl !== null;\n\n const hasActions =\n hasStandardActions ||\n Boolean(actions);\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 {hasStandardActions && (\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 </ActionGroup>\n )}\n\n {actions}\n </div>\n )}\n </div>\n );\n};\n\nexport default EmbedViewer;\n"]}
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 (!FIGMA_HOSTNAMES.has(
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;AAEH,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,CAAgB,GAAA;AAAA,IACf,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\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 !FIGMA_HOSTNAMES.has(\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"]}
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"]}
@@ -1,4 +1,5 @@
1
1
  export interface FigmaEmbedResource {
2
2
  embedUrl: string;
3
3
  }
4
+ export declare function isFigmaHostname(hostname: string): boolean;
4
5
  export declare function resolveFigmaResource(url: URL): FigmaEmbedResource | null;
@@ -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 (!FIGMA_HOSTNAMES.has(
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;AAEH,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,CAAgB,GAAA;AAAA,IACf,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\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 !FIGMA_HOSTNAMES.has(\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"]}
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 (url.hostname !== GOOGLE_HOSTNAME) {
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;AAEH,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,GAAA,CAAI,aAAa,eAAA,EACjB;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\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 url.hostname !== GOOGLE_HOSTNAME\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"]}
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"]}
@@ -2,4 +2,5 @@ export interface GoogleEmbedResource {
2
2
  embedUrl: string;
3
3
  copyUrl: string;
4
4
  }
5
+ export declare function isGoogleHostname(hostname: string): boolean;
5
6
  export declare function resolveGoogleResource(url: URL): GoogleEmbedResource | null;
@@ -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 (url.hostname !== GOOGLE_HOSTNAME) {
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;AAEH,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,GAAA,CAAI,aAAa,eAAA,EACjB;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\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 url.hostname !== GOOGLE_HOSTNAME\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"]}
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 (!MIRO_HOSTNAMES.has(
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,CAAe,GAAA;AAAA,IACd,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 resolveMiroResource(\n url: URL,\n): MiroEmbedResource | null {\n if (\n !MIRO_HOSTNAMES.has(\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"]}
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"]}
@@ -1,4 +1,5 @@
1
1
  export interface MiroEmbedResource {
2
2
  embedUrl: string;
3
3
  }
4
+ export declare function isMiroHostname(hostname: string): boolean;
4
5
  export declare function resolveMiroResource(url: URL): MiroEmbedResource | null;
@@ -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 (!MIRO_HOSTNAMES.has(
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,CAAe,GAAA;AAAA,IACd,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 resolveMiroResource(\n url: URL,\n): MiroEmbedResource | null {\n if (\n !MIRO_HOSTNAMES.has(\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"]}
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,5 @@
1
+ export interface TypeformEmbedResource {
2
+ embedUrl: string;
3
+ }
4
+ export declare function isTypeformHostname(hostname: string): boolean;
5
+ export declare function resolveTypeformResource(url: URL): TypeformEmbedResource | null;
@@ -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 providerEmbedUrl = googleResource?.embedUrl ?? miroResource?.embedUrl ?? figmaResource?.embedUrl ?? null;
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 resolvedEmbedUrl = explicitEmbedUrl?.toString() ?? providerEmbedUrl;
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":";;;;;;AA0BA,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;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,GACJA,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,mBACJ,cAAA,EAAgB,QAAA,IAChB,YAAA,EAAc,QAAA,IACd,eAAe,QAAA,IACf,IAAA;AAEF,EAAA,MAAM,gBAAA,GACJ,QAAA,GACI,YAAA,CAAa,QAAQ,CAAA,GACrB,IAAA;AAEN,EAAA,MAAM,gBAAA,GACJ,gBAAA,EAAkB,QAAA,EAAS,IAC3B,gBAAA;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 resolveFigmaResource,\n} from './providers/figma';\nimport {\n resolveGoogleResource,\n} from './providers/google';\nimport {\n resolveMiroResource,\n} from './providers/miro';\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\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 providerEmbedUrl =\n googleResource?.embedUrl ??\n miroResource?.embedUrl ??\n figmaResource?.embedUrl ??\n null;\n\n const explicitEmbedUrl =\n embedSrc\n ? parseHttpUrl(embedSrc)\n : null;\n\n const resolvedEmbedUrl =\n explicitEmbedUrl?.toString() ??\n providerEmbedUrl;\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
+ {"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 providerEmbedUrl = googleResource?.embedUrl ?? miroResource?.embedUrl ?? figmaResource?.embedUrl ?? null;
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 resolvedEmbedUrl = explicitEmbedUrl?.toString() ?? providerEmbedUrl;
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":";;;;AA0BA,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;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,mBACJ,cAAA,EAAgB,QAAA,IAChB,YAAA,EAAc,QAAA,IACd,eAAe,QAAA,IACf,IAAA;AAEF,EAAA,MAAM,gBAAA,GACJ,QAAA,GACI,YAAA,CAAa,QAAQ,CAAA,GACrB,IAAA;AAEN,EAAA,MAAM,gBAAA,GACJ,gBAAA,EAAkB,QAAA,EAAS,IAC3B,gBAAA;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 resolveFigmaResource,\n} from './providers/figma';\nimport {\n resolveGoogleResource,\n} from './providers/google';\nimport {\n resolveMiroResource,\n} from './providers/miro';\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\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 providerEmbedUrl =\n googleResource?.embedUrl ??\n miroResource?.embedUrl ??\n figmaResource?.embedUrl ??\n null;\n\n const explicitEmbedUrl =\n embedSrc\n ? parseHttpUrl(embedSrc)\n : null;\n\n const resolvedEmbedUrl =\n explicitEmbedUrl?.toString() ??\n providerEmbedUrl;\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
+ {"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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jvetrau-ds",
3
- "version": "0.2.18",
3
+ "version": "0.2.19",
4
4
  "description": "Multi-brand React design system with semantic tokens",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",