jvetrau-ds 0.2.13 → 0.2.15

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 (161) hide show
  1. package/components/attach/attach.cjs +32 -14
  2. package/components/attach/attach.cjs.map +1 -1
  3. package/components/attach/attach.css +65 -35
  4. package/components/attach/attach.js +28 -14
  5. package/components/attach/attach.js.map +1 -1
  6. package/components/attach/index.d.ts +1 -1
  7. package/components/embed-viewer/embed-viewer.cjs +44 -0
  8. package/components/embed-viewer/embed-viewer.cjs.map +1 -0
  9. package/components/embed-viewer/embed-viewer.css +115 -0
  10. package/components/embed-viewer/embed-viewer.d.ts +10 -0
  11. package/components/embed-viewer/embed-viewer.js +42 -0
  12. package/components/embed-viewer/embed-viewer.js.map +1 -0
  13. package/components/embed-viewer/embed-viewer.meta.d.ts +2 -0
  14. package/components/embed-viewer/index.cjs +22 -0
  15. package/components/embed-viewer/index.cjs.map +1 -0
  16. package/components/embed-viewer/index.d.ts +3 -0
  17. package/components/embed-viewer/index.js +3 -0
  18. package/components/embed-viewer/index.js.map +1 -0
  19. package/components/index.cjs +6 -0
  20. package/components/index.d.ts +3 -1
  21. package/components/index.js +1 -0
  22. package/index.cjs +6 -0
  23. package/index.d.ts +3 -1
  24. package/index.js +1 -0
  25. package/package.json +1 -1
  26. package/styles.css +182 -35
  27. package/themes/base/desktop.css +1 -0
  28. package/themes/base/desktop.md +1 -0
  29. package/themes/base/desktop.scoped.css +1 -0
  30. package/themes/base/diagram.css +1 -0
  31. package/themes/base/diagram.md +1 -0
  32. package/themes/base/diagram.scoped.css +1 -0
  33. package/themes/base/mobile.css +1 -0
  34. package/themes/base/mobile.md +1 -0
  35. package/themes/base/mobile.scoped.css +1 -0
  36. package/themes/brandcopilot/desktop.css +1 -0
  37. package/themes/brandcopilot/desktop.md +1 -0
  38. package/themes/brandcopilot/desktop.scoped.css +1 -0
  39. package/themes/brandcopilot/diagram.css +1 -0
  40. package/themes/brandcopilot/diagram.md +1 -0
  41. package/themes/brandcopilot/diagram.scoped.css +1 -0
  42. package/themes/brandcopilot/mobile.css +1 -0
  43. package/themes/brandcopilot/mobile.md +1 -0
  44. package/themes/brandcopilot/mobile.scoped.css +1 -0
  45. package/themes/dmpatterns/desktop.css +1 -0
  46. package/themes/dmpatterns/desktop.md +1 -0
  47. package/themes/dmpatterns/desktop.scoped.css +1 -0
  48. package/themes/dmpatterns/diagram.css +1 -0
  49. package/themes/dmpatterns/diagram.md +1 -0
  50. package/themes/dmpatterns/diagram.scoped.css +1 -0
  51. package/themes/dmpatterns/mobile.css +1 -0
  52. package/themes/dmpatterns/mobile.md +1 -0
  53. package/themes/dmpatterns/mobile.scoped.css +1 -0
  54. package/themes/pdigest/desktop.css +1 -0
  55. package/themes/pdigest/desktop.md +1 -0
  56. package/themes/pdigest/desktop.scoped.css +1 -0
  57. package/themes/pdigest/diagram.css +1 -0
  58. package/themes/pdigest/diagram.md +1 -0
  59. package/themes/pdigest/diagram.scoped.css +1 -0
  60. package/themes/pdigest/mobile.css +1 -0
  61. package/themes/pdigest/mobile.md +1 -0
  62. package/themes/pdigest/mobile.scoped.css +1 -0
  63. package/themes/redesigntrack/desktop.css +1 -0
  64. package/themes/redesigntrack/desktop.md +1 -0
  65. package/themes/redesigntrack/desktop.scoped.css +1 -0
  66. package/themes/redesigntrack/diagram.css +1 -0
  67. package/themes/redesigntrack/diagram.md +1 -0
  68. package/themes/redesigntrack/diagram.scoped.css +1 -0
  69. package/themes/redesigntrack/mobile.css +1 -0
  70. package/themes/redesigntrack/mobile.md +1 -0
  71. package/themes/redesigntrack/mobile.scoped.css +1 -0
  72. package/tokens/runtime/tokens.base.desktop.runtime.cjs +1 -0
  73. package/tokens/runtime/tokens.base.desktop.runtime.cjs.map +1 -1
  74. package/tokens/runtime/tokens.base.desktop.runtime.d.ts +1 -0
  75. package/tokens/runtime/tokens.base.desktop.runtime.js +1 -0
  76. package/tokens/runtime/tokens.base.desktop.runtime.js.map +1 -1
  77. package/tokens/runtime/tokens.base.diagram.runtime.cjs +1 -0
  78. package/tokens/runtime/tokens.base.diagram.runtime.cjs.map +1 -1
  79. package/tokens/runtime/tokens.base.diagram.runtime.d.ts +1 -0
  80. package/tokens/runtime/tokens.base.diagram.runtime.js +1 -0
  81. package/tokens/runtime/tokens.base.diagram.runtime.js.map +1 -1
  82. package/tokens/runtime/tokens.base.mobile.runtime.cjs +1 -0
  83. package/tokens/runtime/tokens.base.mobile.runtime.cjs.map +1 -1
  84. package/tokens/runtime/tokens.base.mobile.runtime.d.ts +1 -0
  85. package/tokens/runtime/tokens.base.mobile.runtime.js +1 -0
  86. package/tokens/runtime/tokens.base.mobile.runtime.js.map +1 -1
  87. package/tokens/runtime/tokens.brandcopilot.desktop.runtime.cjs +1 -0
  88. package/tokens/runtime/tokens.brandcopilot.desktop.runtime.cjs.map +1 -1
  89. package/tokens/runtime/tokens.brandcopilot.desktop.runtime.d.ts +1 -0
  90. package/tokens/runtime/tokens.brandcopilot.desktop.runtime.js +1 -0
  91. package/tokens/runtime/tokens.brandcopilot.desktop.runtime.js.map +1 -1
  92. package/tokens/runtime/tokens.brandcopilot.diagram.runtime.cjs +1 -0
  93. package/tokens/runtime/tokens.brandcopilot.diagram.runtime.cjs.map +1 -1
  94. package/tokens/runtime/tokens.brandcopilot.diagram.runtime.d.ts +1 -0
  95. package/tokens/runtime/tokens.brandcopilot.diagram.runtime.js +1 -0
  96. package/tokens/runtime/tokens.brandcopilot.diagram.runtime.js.map +1 -1
  97. package/tokens/runtime/tokens.brandcopilot.mobile.runtime.cjs +1 -0
  98. package/tokens/runtime/tokens.brandcopilot.mobile.runtime.cjs.map +1 -1
  99. package/tokens/runtime/tokens.brandcopilot.mobile.runtime.d.ts +1 -0
  100. package/tokens/runtime/tokens.brandcopilot.mobile.runtime.js +1 -0
  101. package/tokens/runtime/tokens.brandcopilot.mobile.runtime.js.map +1 -1
  102. package/tokens/runtime/tokens.dmpatterns.desktop.runtime.cjs +1 -0
  103. package/tokens/runtime/tokens.dmpatterns.desktop.runtime.cjs.map +1 -1
  104. package/tokens/runtime/tokens.dmpatterns.desktop.runtime.d.ts +1 -0
  105. package/tokens/runtime/tokens.dmpatterns.desktop.runtime.js +1 -0
  106. package/tokens/runtime/tokens.dmpatterns.desktop.runtime.js.map +1 -1
  107. package/tokens/runtime/tokens.dmpatterns.diagram.runtime.cjs +1 -0
  108. package/tokens/runtime/tokens.dmpatterns.diagram.runtime.cjs.map +1 -1
  109. package/tokens/runtime/tokens.dmpatterns.diagram.runtime.d.ts +1 -0
  110. package/tokens/runtime/tokens.dmpatterns.diagram.runtime.js +1 -0
  111. package/tokens/runtime/tokens.dmpatterns.diagram.runtime.js.map +1 -1
  112. package/tokens/runtime/tokens.dmpatterns.mobile.runtime.cjs +1 -0
  113. package/tokens/runtime/tokens.dmpatterns.mobile.runtime.cjs.map +1 -1
  114. package/tokens/runtime/tokens.dmpatterns.mobile.runtime.d.ts +1 -0
  115. package/tokens/runtime/tokens.dmpatterns.mobile.runtime.js +1 -0
  116. package/tokens/runtime/tokens.dmpatterns.mobile.runtime.js.map +1 -1
  117. package/tokens/runtime/tokens.pdigest.desktop.runtime.cjs +1 -0
  118. package/tokens/runtime/tokens.pdigest.desktop.runtime.cjs.map +1 -1
  119. package/tokens/runtime/tokens.pdigest.desktop.runtime.d.ts +1 -0
  120. package/tokens/runtime/tokens.pdigest.desktop.runtime.js +1 -0
  121. package/tokens/runtime/tokens.pdigest.desktop.runtime.js.map +1 -1
  122. package/tokens/runtime/tokens.pdigest.diagram.runtime.cjs +1 -0
  123. package/tokens/runtime/tokens.pdigest.diagram.runtime.cjs.map +1 -1
  124. package/tokens/runtime/tokens.pdigest.diagram.runtime.d.ts +1 -0
  125. package/tokens/runtime/tokens.pdigest.diagram.runtime.js +1 -0
  126. package/tokens/runtime/tokens.pdigest.diagram.runtime.js.map +1 -1
  127. package/tokens/runtime/tokens.pdigest.mobile.runtime.cjs +1 -0
  128. package/tokens/runtime/tokens.pdigest.mobile.runtime.cjs.map +1 -1
  129. package/tokens/runtime/tokens.pdigest.mobile.runtime.d.ts +1 -0
  130. package/tokens/runtime/tokens.pdigest.mobile.runtime.js +1 -0
  131. package/tokens/runtime/tokens.pdigest.mobile.runtime.js.map +1 -1
  132. package/tokens/runtime/tokens.redesigntrack.desktop.runtime.cjs +1 -0
  133. package/tokens/runtime/tokens.redesigntrack.desktop.runtime.cjs.map +1 -1
  134. package/tokens/runtime/tokens.redesigntrack.desktop.runtime.d.ts +1 -0
  135. package/tokens/runtime/tokens.redesigntrack.desktop.runtime.js +1 -0
  136. package/tokens/runtime/tokens.redesigntrack.desktop.runtime.js.map +1 -1
  137. package/tokens/runtime/tokens.redesigntrack.diagram.runtime.cjs +1 -0
  138. package/tokens/runtime/tokens.redesigntrack.diagram.runtime.cjs.map +1 -1
  139. package/tokens/runtime/tokens.redesigntrack.diagram.runtime.d.ts +1 -0
  140. package/tokens/runtime/tokens.redesigntrack.diagram.runtime.js +1 -0
  141. package/tokens/runtime/tokens.redesigntrack.diagram.runtime.js.map +1 -1
  142. package/tokens/runtime/tokens.redesigntrack.mobile.runtime.cjs +1 -0
  143. package/tokens/runtime/tokens.redesigntrack.mobile.runtime.cjs.map +1 -1
  144. package/tokens/runtime/tokens.redesigntrack.mobile.runtime.d.ts +1 -0
  145. package/tokens/runtime/tokens.redesigntrack.mobile.runtime.js +1 -0
  146. package/tokens/runtime/tokens.redesigntrack.mobile.runtime.js.map +1 -1
  147. package/tokens/themes/base/dist/desktop.json +8 -0
  148. package/tokens/themes/base/dist/diagram.json +8 -0
  149. package/tokens/themes/base/dist/mobile.json +8 -0
  150. package/tokens/themes/brandcopilot/dist/desktop.json +8 -0
  151. package/tokens/themes/brandcopilot/dist/diagram.json +8 -0
  152. package/tokens/themes/brandcopilot/dist/mobile.json +8 -0
  153. package/tokens/themes/dmpatterns/dist/desktop.json +8 -0
  154. package/tokens/themes/dmpatterns/dist/diagram.json +8 -0
  155. package/tokens/themes/dmpatterns/dist/mobile.json +8 -0
  156. package/tokens/themes/pdigest/dist/desktop.json +8 -0
  157. package/tokens/themes/pdigest/dist/diagram.json +8 -0
  158. package/tokens/themes/pdigest/dist/mobile.json +8 -0
  159. package/tokens/themes/redesigntrack/dist/desktop.json +8 -0
  160. package/tokens/themes/redesigntrack/dist/diagram.json +8 -0
  161. package/tokens/themes/redesigntrack/dist/mobile.json +8 -0
@@ -2,8 +2,13 @@
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  require('./attach.css');
5
+ var Button = require('../button');
5
6
  var classnames = require('../helpers/classnames');
6
7
 
8
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
+
10
+ var Button__default = /*#__PURE__*/_interopDefault(Button);
11
+
7
12
  function isImageAttach(item) {
8
13
  return item.mimeType?.startsWith("image/") ?? false;
9
14
  }
@@ -15,12 +20,13 @@ function formatFileSize(sizeBytes) {
15
20
  return "Size unknown";
16
21
  }
17
22
  if (sizeBytes < 1024) {
18
- return `${sizeBytes} B`;
23
+ return `${sizeBytes} \u0411`;
19
24
  }
20
25
  if (sizeBytes < 1024 * 1024) {
21
- return `${Math.round(sizeBytes / 1024)} KB`;
26
+ return `${Math.round(sizeBytes / 1024)} \u041A\u0411`;
22
27
  }
23
- return `${(sizeBytes / 1024 / 1024).toFixed(1)} MB`;
28
+ const megabytes = (sizeBytes / 1024 / 1024).toFixed(1).replace(".", ",");
29
+ return `${megabytes} \u041C\u0411`;
24
30
  }
25
31
  function getLinkHostname(url) {
26
32
  try {
@@ -40,7 +46,11 @@ const Attach = ({
40
46
  if (items.length === 0) {
41
47
  return null;
42
48
  }
43
- const classes = classnames.classnames("attach", className, {});
49
+ const classes = classnames.classnames(
50
+ "attach",
51
+ className,
52
+ {}
53
+ );
44
54
  return /* @__PURE__ */ jsxRuntime.jsx(
45
55
  "div",
46
56
  {
@@ -49,12 +59,20 @@ const Attach = ({
49
59
  children: /* @__PURE__ */ jsxRuntime.jsx("ul", { className: "attach__list", children: items.map((item) => {
50
60
  const isLink = isLinkAttach(item);
51
61
  const isImage = !isLink && isImageAttach(item);
52
- const itemClasses = classnames.classnames("attach__item", {
53
- "attach__item--link": isLink,
54
- "attach__item--image": isImage,
55
- "attach__item--file": !isLink && !isImage
56
- });
57
- const meta = isLink ? getLinkHostname(item.url) : formatFileSize(item.sizeBytes);
62
+ const itemClasses = classnames.classnames(
63
+ "attach__item",
64
+ "",
65
+ {
66
+ "attach__item--link": isLink,
67
+ "attach__item--image": isImage,
68
+ "attach__item--file": !isLink && !isImage
69
+ }
70
+ );
71
+ const meta = isLink ? getLinkHostname(
72
+ item.url
73
+ ) : formatFileSize(
74
+ item.sizeBytes
75
+ );
58
76
  return /* @__PURE__ */ jsxRuntime.jsxs(
59
77
  "li",
60
78
  {
@@ -81,13 +99,13 @@ const Attach = ({
81
99
  }
82
100
  ),
83
101
  onRemove && /* @__PURE__ */ jsxRuntime.jsx(
84
- "button",
102
+ Button__default.default,
85
103
  {
104
+ mode: "toolbar",
86
105
  className: "attach__remove",
87
- type: "button",
106
+ icon: "close",
88
107
  "aria-label": `${removeLabel}: ${item.name}`,
89
- onClick: () => onRemove(item.id),
90
- children: removeLabel
108
+ onClick: () => onRemove(item.id)
91
109
  }
92
110
  )
93
111
  ]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/attach/attach.tsx"],"names":["classnames","jsx","jsxs"],"mappings":"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","file":"attach.cjs","sourcesContent":["import React from 'react';\nimport './attach.css';\nimport { classnames } from '../helpers/classnames';\n\nexport type AttachItemKind = 'file' | 'link';\n\nexport interface AttachItem {\n id: string;\n name: string;\n url: string;\n kind?: AttachItemKind;\n mimeType?: string;\n sizeBytes?: number;\n}\n\nexport interface AttachProps\n extends React.HTMLAttributes<HTMLDivElement> {\n items: AttachItem[];\n onRemove?: (id: string) => void;\n removeLabel?: string;\n emptyLabel?: string;\n}\n\nfunction isImageAttach(item: AttachItem) {\n return item.mimeType?.startsWith('image/') ?? false;\n}\n\nfunction isLinkAttach(item: AttachItem) {\n return item.kind === 'link';\n}\n\nfunction formatFileSize(sizeBytes?: number) {\n if (sizeBytes === undefined) {\n return 'Size unknown';\n }\n\n if (sizeBytes < 1024) {\n return `${sizeBytes} B`;\n }\n\n if (sizeBytes < 1024 * 1024) {\n return `${Math.round(sizeBytes / 1024)} KB`;\n }\n\n return `${(sizeBytes / 1024 / 1024).toFixed(1)} MB`;\n}\n\nfunction getLinkHostname(url: string) {\n try {\n return new URL(url).hostname.replace(/^www\\./u, '');\n } catch {\n return url;\n }\n}\n\nconst Attach: React.FC<AttachProps> = ({\n items,\n onRemove,\n removeLabel = 'Удалить',\n emptyLabel,\n className = '',\n ...props\n}) => {\n if (items.length === 0) {\n return null;\n }\n\n const classes = classnames('attach', className, {});\n\n return (\n <div\n className={classes}\n {...props}\n >\n <ul className=\"attach__list\">\n {items.map((item) => {\n const isLink = isLinkAttach(item);\n const isImage = !isLink && isImageAttach(item);\n\n const itemClasses = classnames('attach__item', {\n 'attach__item--link': isLink,\n 'attach__item--image': isImage,\n 'attach__item--file': !isLink && !isImage,\n });\n\n const meta = isLink\n ? getLinkHostname(item.url)\n : formatFileSize(item.sizeBytes);\n\n return (\n <li\n key={item.id}\n className={itemClasses}\n >\n <a\n className=\"attach__link\"\n href={item.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {isImage ? (\n <img\n className=\"attach__preview\"\n src={item.url}\n alt={item.name}\n />\n ) : (\n <span className=\"attach__file\">\n <span className=\"attach__name\">\n {item.name}\n </span>\n\n <span className=\"attach__meta\">\n {meta}\n </span>\n </span>\n )}\n </a>\n\n {onRemove && (\n <button\n className=\"attach__remove\"\n type=\"button\"\n aria-label={`${removeLabel}: ${item.name}`}\n onClick={() => onRemove(item.id)}\n >\n {removeLabel}\n </button>\n )}\n </li>\n );\n })}\n </ul>\n </div>\n );\n};\n\nexport default Attach;"]}
1
+ {"version":3,"sources":["../../../src/components/attach/attach.tsx"],"names":["classnames","jsx","jsxs","Button"],"mappings":"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","file":"attach.cjs","sourcesContent":["import React from 'react';\n\nimport './attach.css';\nimport Button from '../button';\nimport { classnames } from '../helpers/classnames';\n\nexport type AttachItemKind = 'file' | 'link';\n\nexport interface AttachItem {\n id: string;\n name: string;\n url: string;\n kind?: AttachItemKind;\n mimeType?: string;\n sizeBytes?: number;\n}\n\nexport interface AttachProps\n extends React.HTMLAttributes<HTMLDivElement> {\n items: AttachItem[];\n onRemove?: (id: string) => void;\n removeLabel?: string;\n emptyLabel?: string;\n}\n\nfunction isImageAttach(item: AttachItem) {\n return item.mimeType?.startsWith('image/') ?? false;\n}\n\nfunction isLinkAttach(item: AttachItem) {\n return item.kind === 'link';\n}\n\nfunction formatFileSize(sizeBytes?: number) {\n if (sizeBytes === undefined) {\n return 'Size unknown';\n }\n\n if (sizeBytes < 1024) {\n return `${sizeBytes} Б`;\n }\n\n if (sizeBytes < 1024 * 1024) {\n return `${Math.round(sizeBytes / 1024)} КБ`;\n }\n\n const megabytes = (\n sizeBytes /\n 1024 /\n 1024\n )\n .toFixed(1)\n .replace('.', ',');\n\n return `${megabytes} МБ`;\n}\n\nfunction getLinkHostname(url: string) {\n try {\n return new URL(url).hostname.replace(/^www\\./u, '');\n } catch {\n return url;\n }\n}\n\nconst Attach: React.FC<AttachProps> = ({\n items,\n onRemove,\n removeLabel = 'Удалить',\n emptyLabel,\n className = '',\n ...props\n}) => {\n if (items.length === 0) {\n return null;\n }\n\n const classes = classnames(\n 'attach',\n className,\n {},\n );\n\n return (\n <div\n className={classes}\n {...props}\n >\n <ul className=\"attach__list\">\n {items.map((item) => {\n const isLink =\n isLinkAttach(item);\n\n const isImage =\n !isLink &&\n isImageAttach(item);\n\n const itemClasses =\n classnames(\n 'attach__item',\n '',\n {\n 'attach__item--link':\n isLink,\n 'attach__item--image':\n isImage,\n 'attach__item--file':\n !isLink &&\n !isImage,\n },\n );\n\n const meta = isLink\n ? getLinkHostname(\n item.url,\n )\n : formatFileSize(\n item.sizeBytes,\n );\n\n return (\n <li\n key={item.id}\n className={itemClasses}\n >\n <a\n className=\"attach__link\"\n href={item.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {isImage ? (\n <img\n className=\"attach__preview\"\n src={item.url}\n alt={item.name}\n />\n ) : (\n <span className=\"attach__file\">\n <span className=\"attach__name\">\n {item.name}\n </span>\n\n <span className=\"attach__meta\">\n {meta}\n </span>\n </span>\n )}\n </a>\n\n {onRemove && (\n <Button\n mode=\"toolbar\"\n className=\"attach__remove\"\n icon=\"close\"\n aria-label={`${removeLabel}: ${item.name}`}\n onClick={() =>\n onRemove(item.id)\n }\n />\n )}\n </li>\n );\n })}\n </ul>\n </div>\n );\n};\n\nexport default Attach;\n"]}
@@ -1,10 +1,9 @@
1
1
  .attach {
2
2
  /* color */
3
3
  --attachment-color: var(--color-text);
4
- --attachment-item-bg: var(--color-control);
5
- --attachment-item-color: var(--color-text-control);
6
- --attachment-border-color: var(--color-line);
7
- --attachment-item-meta-color: var(--color-text-note);
4
+ --attachment-item-bg: var(--color-bg-media);
5
+ --attachment-item-color: var(--color-text);
6
+ --attachment-item-meta-color: var(--color-text);
8
7
 
9
8
  color: var(--attachment-color);
10
9
 
@@ -22,15 +21,16 @@
22
21
  letter-spacing: var(--attachment-letter-spacing);
23
22
 
24
23
  /* size */
25
- --attachment-gap: var(--margin-control);
26
- --attachment-item-gap: var(--margin-icon);
27
- --attachment-item-padding: var(--padding-control-vert);
28
- --attachment-preview-max-width: 240px;
29
- --attachment-preview-max-height: 180px;
24
+ --attachment-gap: var(--margin-container);
25
+ --attachment-item-padding: var(--padding-container);
26
+ --attachment-remove-offset: var(--margin-container);
27
+ --attachment-aspect-ratio: 9 / 6;
28
+
29
+ width: 100%;
30
+ min-width: 0;
30
31
 
31
32
  /* border */
32
- --attachment-radius: var(--radius-control);
33
- --attachment-border-width: var(--size-border-width-base);
33
+ --attachment-radius: var(--radius-container);
34
34
 
35
35
  /* depth */
36
36
 
@@ -43,9 +43,13 @@
43
43
  /* typography */
44
44
 
45
45
  /* size */
46
- display: flex;
47
- flex-direction: column;
46
+ display: grid;
47
+ grid-template-columns:
48
+ repeat(3, minmax(0, 1fr));
48
49
  gap: var(--attachment-gap);
50
+
51
+ width: 100%;
52
+ min-width: 0;
49
53
  margin: 0;
50
54
  padding: 0;
51
55
 
@@ -65,17 +69,14 @@
65
69
  /* typography */
66
70
 
67
71
  /* size */
68
- display: flex;
69
- align-items: center;
70
- justify-content: space-between;
71
- gap: var(--attachment-item-gap);
72
- padding: var(--attachment-item-padding);
72
+ position: relative;
73
+ min-width: 0;
74
+ aspect-ratio:
75
+ var(--attachment-aspect-ratio);
76
+
77
+ overflow: hidden;
73
78
 
74
79
  /* border */
75
- border:
76
- var(--attachment-border-width)
77
- solid
78
- var(--attachment-border-color);
79
80
  border-radius: var(--attachment-radius);
80
81
 
81
82
  /* depth */
@@ -91,6 +92,9 @@
91
92
  text-decoration: none;
92
93
 
93
94
  /* size */
95
+ display: block;
96
+ width: 100%;
97
+ height: 100%;
94
98
  min-width: 0;
95
99
 
96
100
  /* border */
@@ -100,6 +104,25 @@
100
104
  /* motion */
101
105
  }
102
106
 
107
+ .attach__item--file .attach__link,
108
+ .attach__item--link .attach__link {
109
+ /* color */
110
+
111
+ /* typography */
112
+
113
+ /* size */
114
+ display: flex;
115
+ align-items: flex-end;
116
+
117
+ padding: var(--attachment-item-padding);
118
+
119
+ /* border */
120
+
121
+ /* depth */
122
+
123
+ /* motion */
124
+ }
125
+
103
126
  .attach__link:hover .attach__name {
104
127
  /* color */
105
128
 
@@ -122,12 +145,13 @@
122
145
 
123
146
  /* size */
124
147
  display: block;
125
- max-width: var(--attachment-preview-max-width);
126
- max-height: var(--attachment-preview-max-height);
127
- object-fit: contain;
148
+
149
+ width: 100%;
150
+ height: 100%;
151
+
152
+ object-fit: cover;
128
153
 
129
154
  /* border */
130
- border-radius: var(--attachment-radius);
131
155
 
132
156
  /* depth */
133
157
 
@@ -142,6 +166,8 @@
142
166
  /* size */
143
167
  display: flex;
144
168
  flex-direction: column;
169
+
170
+ width: 100%;
145
171
  min-width: 0;
146
172
 
147
173
  /* border */
@@ -159,6 +185,8 @@
159
185
  white-space: nowrap;
160
186
 
161
187
  /* size */
188
+ min-width: 0;
189
+
162
190
  overflow: hidden;
163
191
 
164
192
  /* border */
@@ -173,7 +201,11 @@
173
201
  color: var(--attachment-item-meta-color);
174
202
 
175
203
  /* typography */
176
- font-size: 0.85em;
204
+ font-family: var(--font-body-family);
205
+ font-size: var(--font-body);
206
+ font-weight: var(--font-body-weight);
207
+ line-height: var(--font-body-line);
208
+ letter-spacing: var(--font-body-letter-spacing);
177
209
 
178
210
  /* size */
179
211
 
@@ -186,30 +218,28 @@
186
218
 
187
219
  .attach__remove {
188
220
  /* color */
189
- background: transparent;
190
221
  color: inherit;
191
222
 
192
223
  /* typography */
193
- font: inherit;
194
224
 
195
225
  /* size */
196
- flex-shrink: 0;
197
- padding: 0;
226
+ position: absolute;
227
+ top: var(--attachment-remove-offset);
228
+ right: var(--attachment-remove-offset);
229
+ z-index: 1;
198
230
 
199
231
  /* border */
200
- border: 0;
201
232
 
202
233
  /* depth */
203
234
 
204
235
  /* motion */
205
- cursor: pointer;
206
236
  }
207
237
 
208
- .attach__remove:hover {
238
+ .attach__item--image .attach__remove {
209
239
  /* color */
240
+ color: var(--color-contrast);
210
241
 
211
242
  /* typography */
212
- text-decoration: underline;
213
243
 
214
244
  /* size */
215
245
 
@@ -1,5 +1,6 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import './attach.css';
3
+ import Button from '../button';
3
4
  import { classnames } from '../helpers/classnames';
4
5
 
5
6
  function isImageAttach(item) {
@@ -13,12 +14,13 @@ function formatFileSize(sizeBytes) {
13
14
  return "Size unknown";
14
15
  }
15
16
  if (sizeBytes < 1024) {
16
- return `${sizeBytes} B`;
17
+ return `${sizeBytes} \u0411`;
17
18
  }
18
19
  if (sizeBytes < 1024 * 1024) {
19
- return `${Math.round(sizeBytes / 1024)} KB`;
20
+ return `${Math.round(sizeBytes / 1024)} \u041A\u0411`;
20
21
  }
21
- return `${(sizeBytes / 1024 / 1024).toFixed(1)} MB`;
22
+ const megabytes = (sizeBytes / 1024 / 1024).toFixed(1).replace(".", ",");
23
+ return `${megabytes} \u041C\u0411`;
22
24
  }
23
25
  function getLinkHostname(url) {
24
26
  try {
@@ -38,7 +40,11 @@ const Attach = ({
38
40
  if (items.length === 0) {
39
41
  return null;
40
42
  }
41
- const classes = classnames("attach", className, {});
43
+ const classes = classnames(
44
+ "attach",
45
+ className,
46
+ {}
47
+ );
42
48
  return /* @__PURE__ */ jsx(
43
49
  "div",
44
50
  {
@@ -47,12 +53,20 @@ const Attach = ({
47
53
  children: /* @__PURE__ */ jsx("ul", { className: "attach__list", children: items.map((item) => {
48
54
  const isLink = isLinkAttach(item);
49
55
  const isImage = !isLink && isImageAttach(item);
50
- const itemClasses = classnames("attach__item", {
51
- "attach__item--link": isLink,
52
- "attach__item--image": isImage,
53
- "attach__item--file": !isLink && !isImage
54
- });
55
- const meta = isLink ? getLinkHostname(item.url) : formatFileSize(item.sizeBytes);
56
+ const itemClasses = classnames(
57
+ "attach__item",
58
+ "",
59
+ {
60
+ "attach__item--link": isLink,
61
+ "attach__item--image": isImage,
62
+ "attach__item--file": !isLink && !isImage
63
+ }
64
+ );
65
+ const meta = isLink ? getLinkHostname(
66
+ item.url
67
+ ) : formatFileSize(
68
+ item.sizeBytes
69
+ );
56
70
  return /* @__PURE__ */ jsxs(
57
71
  "li",
58
72
  {
@@ -79,13 +93,13 @@ const Attach = ({
79
93
  }
80
94
  ),
81
95
  onRemove && /* @__PURE__ */ jsx(
82
- "button",
96
+ Button,
83
97
  {
98
+ mode: "toolbar",
84
99
  className: "attach__remove",
85
- type: "button",
100
+ icon: "close",
86
101
  "aria-label": `${removeLabel}: ${item.name}`,
87
- onClick: () => onRemove(item.id),
88
- children: removeLabel
102
+ onClick: () => onRemove(item.id)
89
103
  }
90
104
  )
91
105
  ]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/attach/attach.tsx"],"names":[],"mappings":"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","file":"attach.js","sourcesContent":["import React from 'react';\nimport './attach.css';\nimport { classnames } from '../helpers/classnames';\n\nexport type AttachItemKind = 'file' | 'link';\n\nexport interface AttachItem {\n id: string;\n name: string;\n url: string;\n kind?: AttachItemKind;\n mimeType?: string;\n sizeBytes?: number;\n}\n\nexport interface AttachProps\n extends React.HTMLAttributes<HTMLDivElement> {\n items: AttachItem[];\n onRemove?: (id: string) => void;\n removeLabel?: string;\n emptyLabel?: string;\n}\n\nfunction isImageAttach(item: AttachItem) {\n return item.mimeType?.startsWith('image/') ?? false;\n}\n\nfunction isLinkAttach(item: AttachItem) {\n return item.kind === 'link';\n}\n\nfunction formatFileSize(sizeBytes?: number) {\n if (sizeBytes === undefined) {\n return 'Size unknown';\n }\n\n if (sizeBytes < 1024) {\n return `${sizeBytes} B`;\n }\n\n if (sizeBytes < 1024 * 1024) {\n return `${Math.round(sizeBytes / 1024)} KB`;\n }\n\n return `${(sizeBytes / 1024 / 1024).toFixed(1)} MB`;\n}\n\nfunction getLinkHostname(url: string) {\n try {\n return new URL(url).hostname.replace(/^www\\./u, '');\n } catch {\n return url;\n }\n}\n\nconst Attach: React.FC<AttachProps> = ({\n items,\n onRemove,\n removeLabel = 'Удалить',\n emptyLabel,\n className = '',\n ...props\n}) => {\n if (items.length === 0) {\n return null;\n }\n\n const classes = classnames('attach', className, {});\n\n return (\n <div\n className={classes}\n {...props}\n >\n <ul className=\"attach__list\">\n {items.map((item) => {\n const isLink = isLinkAttach(item);\n const isImage = !isLink && isImageAttach(item);\n\n const itemClasses = classnames('attach__item', {\n 'attach__item--link': isLink,\n 'attach__item--image': isImage,\n 'attach__item--file': !isLink && !isImage,\n });\n\n const meta = isLink\n ? getLinkHostname(item.url)\n : formatFileSize(item.sizeBytes);\n\n return (\n <li\n key={item.id}\n className={itemClasses}\n >\n <a\n className=\"attach__link\"\n href={item.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {isImage ? (\n <img\n className=\"attach__preview\"\n src={item.url}\n alt={item.name}\n />\n ) : (\n <span className=\"attach__file\">\n <span className=\"attach__name\">\n {item.name}\n </span>\n\n <span className=\"attach__meta\">\n {meta}\n </span>\n </span>\n )}\n </a>\n\n {onRemove && (\n <button\n className=\"attach__remove\"\n type=\"button\"\n aria-label={`${removeLabel}: ${item.name}`}\n onClick={() => onRemove(item.id)}\n >\n {removeLabel}\n </button>\n )}\n </li>\n );\n })}\n </ul>\n </div>\n );\n};\n\nexport default Attach;"]}
1
+ {"version":3,"sources":["../../../src/components/attach/attach.tsx"],"names":[],"mappings":"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","file":"attach.js","sourcesContent":["import React from 'react';\n\nimport './attach.css';\nimport Button from '../button';\nimport { classnames } from '../helpers/classnames';\n\nexport type AttachItemKind = 'file' | 'link';\n\nexport interface AttachItem {\n id: string;\n name: string;\n url: string;\n kind?: AttachItemKind;\n mimeType?: string;\n sizeBytes?: number;\n}\n\nexport interface AttachProps\n extends React.HTMLAttributes<HTMLDivElement> {\n items: AttachItem[];\n onRemove?: (id: string) => void;\n removeLabel?: string;\n emptyLabel?: string;\n}\n\nfunction isImageAttach(item: AttachItem) {\n return item.mimeType?.startsWith('image/') ?? false;\n}\n\nfunction isLinkAttach(item: AttachItem) {\n return item.kind === 'link';\n}\n\nfunction formatFileSize(sizeBytes?: number) {\n if (sizeBytes === undefined) {\n return 'Size unknown';\n }\n\n if (sizeBytes < 1024) {\n return `${sizeBytes} Б`;\n }\n\n if (sizeBytes < 1024 * 1024) {\n return `${Math.round(sizeBytes / 1024)} КБ`;\n }\n\n const megabytes = (\n sizeBytes /\n 1024 /\n 1024\n )\n .toFixed(1)\n .replace('.', ',');\n\n return `${megabytes} МБ`;\n}\n\nfunction getLinkHostname(url: string) {\n try {\n return new URL(url).hostname.replace(/^www\\./u, '');\n } catch {\n return url;\n }\n}\n\nconst Attach: React.FC<AttachProps> = ({\n items,\n onRemove,\n removeLabel = 'Удалить',\n emptyLabel,\n className = '',\n ...props\n}) => {\n if (items.length === 0) {\n return null;\n }\n\n const classes = classnames(\n 'attach',\n className,\n {},\n );\n\n return (\n <div\n className={classes}\n {...props}\n >\n <ul className=\"attach__list\">\n {items.map((item) => {\n const isLink =\n isLinkAttach(item);\n\n const isImage =\n !isLink &&\n isImageAttach(item);\n\n const itemClasses =\n classnames(\n 'attach__item',\n '',\n {\n 'attach__item--link':\n isLink,\n 'attach__item--image':\n isImage,\n 'attach__item--file':\n !isLink &&\n !isImage,\n },\n );\n\n const meta = isLink\n ? getLinkHostname(\n item.url,\n )\n : formatFileSize(\n item.sizeBytes,\n );\n\n return (\n <li\n key={item.id}\n className={itemClasses}\n >\n <a\n className=\"attach__link\"\n href={item.url}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {isImage ? (\n <img\n className=\"attach__preview\"\n src={item.url}\n alt={item.name}\n />\n ) : (\n <span className=\"attach__file\">\n <span className=\"attach__name\">\n {item.name}\n </span>\n\n <span className=\"attach__meta\">\n {meta}\n </span>\n </span>\n )}\n </a>\n\n {onRemove && (\n <Button\n mode=\"toolbar\"\n className=\"attach__remove\"\n icon=\"close\"\n aria-label={`${removeLabel}: ${item.name}`}\n onClick={() =>\n onRemove(item.id)\n }\n />\n )}\n </li>\n );\n })}\n </ul>\n </div>\n );\n};\n\nexport default Attach;\n"]}
@@ -1,2 +1,2 @@
1
1
  export { default } from './attach';
2
- export type { AttachItem, AttachProps, } from './attach';
2
+ export type { AttachItem, AttachItemKind, AttachProps, } from './attach';
@@ -0,0 +1,44 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ require('./embed-viewer.css');
5
+ var classnames = require('../helpers/classnames');
6
+
7
+ const EmbedViewer = ({
8
+ src,
9
+ iframeTitle,
10
+ description,
11
+ actions,
12
+ className = "",
13
+ ...props
14
+ }) => {
15
+ const classes = classnames.classnames(
16
+ "embed-viewer",
17
+ className,
18
+ {}
19
+ );
20
+ return /* @__PURE__ */ jsxRuntime.jsxs(
21
+ "div",
22
+ {
23
+ className: classes,
24
+ ...props,
25
+ children: [
26
+ description && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "embed-viewer__description", children: description }),
27
+ /* @__PURE__ */ jsxRuntime.jsx(
28
+ "iframe",
29
+ {
30
+ className: "embed-viewer__frame",
31
+ src,
32
+ title: iframeTitle
33
+ }
34
+ ),
35
+ actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "embed-viewer__actions", children: actions })
36
+ ]
37
+ }
38
+ );
39
+ };
40
+ var embed_viewer_default = EmbedViewer;
41
+
42
+ module.exports = embed_viewer_default;
43
+ //# sourceMappingURL=embed-viewer.cjs.map
44
+ //# sourceMappingURL=embed-viewer.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/embed-viewer/embed-viewer.tsx"],"names":["classnames","jsxs","jsx"],"mappings":";;;;;;AAgBA,MAAM,cAEF,CAAC;AAAA,EACH,GAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,GAAG;AACL,CAAA,KAAM;AACJ,EAAA,MAAM,OAAA,GAAUA,qBAAA;AAAA,IACd,cAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAC,GACH;AAEA,EAAA,uBACEC,eAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,OAAA;AAAA,MACV,GAAG,KAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,WAAA,oBACCC,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACZ,QAAA,EAAA,WAAA,EACH,CAAA;AAAA,wBAGFA,cAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,qBAAA;AAAA,YACV,GAAA;AAAA,YACA,KAAA,EAAO;AAAA;AAAA,SACT;AAAA,QAEC,OAAA,oBACCA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBACZ,QAAA,EAAA,OAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAA;AAEA,IAAO,oBAAA,GAAQ","file":"embed-viewer.cjs","sourcesContent":["import React from 'react';\n\nimport './embed-viewer.css';\nimport { classnames } from '../helpers/classnames';\n\nexport interface EmbedViewerProps\n extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n > {\n src: string;\n iframeTitle: string;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n}\n\nconst EmbedViewer: React.FC<\n EmbedViewerProps\n> = ({\n src,\n iframeTitle,\n description,\n actions,\n className = '',\n ...props\n}) => {\n const classes = classnames(\n 'embed-viewer',\n className,\n {},\n );\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 <iframe\n className=\"embed-viewer__frame\"\n src={src}\n title={iframeTitle}\n />\n\n {actions && (\n <div className=\"embed-viewer__actions\">\n {actions}\n </div>\n )}\n </div>\n );\n};\n\nexport default EmbedViewer;\n"]}
@@ -0,0 +1,115 @@
1
+ .embed-viewer {
2
+ /* color */
3
+ --embed-viewer-color:
4
+ var(--color-text);
5
+ --embed-viewer-frame-bg:
6
+ var(--color-bg-media);
7
+
8
+ color: var(--embed-viewer-color);
9
+
10
+ /* typography */
11
+ --embed-viewer-description-font-family:
12
+ var(--font-body-family);
13
+ --embed-viewer-description-font-size:
14
+ var(--font-body);
15
+ --embed-viewer-description-font-weight:
16
+ var(--font-body-weight);
17
+ --embed-viewer-description-line-height:
18
+ var(--font-body-line);
19
+ --embed-viewer-description-letter-spacing:
20
+ var(--font-body-letter-spacing);
21
+
22
+ /* size */
23
+ --embed-viewer-gap:
24
+ var(--margin-item);
25
+ --embed-viewer-frame-aspect-ratio:
26
+ 16 / 9;
27
+
28
+ display: flex;
29
+ flex-direction: column;
30
+ gap: var(--embed-viewer-gap);
31
+
32
+ width: 100%;
33
+ min-width: 0;
34
+
35
+ /* border */
36
+ --embed-viewer-frame-radius:
37
+ var(--radius-container);
38
+
39
+ /* depth */
40
+
41
+ /* motion */
42
+ }
43
+
44
+ .embed-viewer__description {
45
+ /* color */
46
+ color: inherit;
47
+
48
+ /* typography */
49
+ font-family:
50
+ var(--embed-viewer-description-font-family);
51
+ font-size:
52
+ var(--embed-viewer-description-font-size);
53
+ font-weight:
54
+ var(--embed-viewer-description-font-weight);
55
+ line-height:
56
+ var(--embed-viewer-description-line-height);
57
+ letter-spacing:
58
+ var(--embed-viewer-description-letter-spacing);
59
+
60
+ /* size */
61
+ min-width: 0;
62
+ max-width: 100%;
63
+
64
+ overflow-wrap: anywhere;
65
+
66
+ /* border */
67
+
68
+ /* depth */
69
+
70
+ /* motion */
71
+ }
72
+
73
+ .embed-viewer__frame {
74
+ /* color */
75
+ background:
76
+ var(--embed-viewer-frame-bg);
77
+
78
+ /* typography */
79
+
80
+ /* size */
81
+ display: block;
82
+
83
+ width: 100%;
84
+ min-width: 0;
85
+ aspect-ratio:
86
+ var(--embed-viewer-frame-aspect-ratio);
87
+
88
+ /* border */
89
+ border: 0;
90
+ border-radius:
91
+ var(--embed-viewer-frame-radius);
92
+
93
+ /* depth */
94
+
95
+ /* motion */
96
+ }
97
+
98
+ .embed-viewer__actions {
99
+ /* color */
100
+
101
+ /* typography */
102
+
103
+ /* size */
104
+ display: flex;
105
+ align-items: center;
106
+
107
+ width: 100%;
108
+ min-width: 0;
109
+
110
+ /* border */
111
+
112
+ /* depth */
113
+
114
+ /* motion */
115
+ }
@@ -0,0 +1,10 @@
1
+ import React from 'react';
2
+ import './embed-viewer.css';
3
+ export interface EmbedViewerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'children'> {
4
+ src: string;
5
+ iframeTitle: string;
6
+ description?: React.ReactNode;
7
+ actions?: React.ReactNode;
8
+ }
9
+ declare const EmbedViewer: React.FC<EmbedViewerProps>;
10
+ export default EmbedViewer;
@@ -0,0 +1,42 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import './embed-viewer.css';
3
+ import { classnames } from '../helpers/classnames';
4
+
5
+ const EmbedViewer = ({
6
+ src,
7
+ iframeTitle,
8
+ description,
9
+ actions,
10
+ className = "",
11
+ ...props
12
+ }) => {
13
+ const classes = classnames(
14
+ "embed-viewer",
15
+ className,
16
+ {}
17
+ );
18
+ return /* @__PURE__ */ jsxs(
19
+ "div",
20
+ {
21
+ className: classes,
22
+ ...props,
23
+ children: [
24
+ description && /* @__PURE__ */ jsx("div", { className: "embed-viewer__description", children: description }),
25
+ /* @__PURE__ */ jsx(
26
+ "iframe",
27
+ {
28
+ className: "embed-viewer__frame",
29
+ src,
30
+ title: iframeTitle
31
+ }
32
+ ),
33
+ actions && /* @__PURE__ */ jsx("div", { className: "embed-viewer__actions", children: actions })
34
+ ]
35
+ }
36
+ );
37
+ };
38
+ var embed_viewer_default = EmbedViewer;
39
+
40
+ export { embed_viewer_default as default };
41
+ //# sourceMappingURL=embed-viewer.js.map
42
+ //# sourceMappingURL=embed-viewer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/embed-viewer/embed-viewer.tsx"],"names":[],"mappings":";;;;AAgBA,MAAM,cAEF,CAAC;AAAA,EACH,GAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,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,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,wBAGF,GAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,qBAAA;AAAA,YACV,GAAA;AAAA,YACA,KAAA,EAAO;AAAA;AAAA,SACT;AAAA,QAEC,OAAA,oBACC,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBACZ,QAAA,EAAA,OAAA,EACH;AAAA;AAAA;AAAA,GAEJ;AAEJ,CAAA;AAEA,IAAO,oBAAA,GAAQ","file":"embed-viewer.js","sourcesContent":["import React from 'react';\n\nimport './embed-viewer.css';\nimport { classnames } from '../helpers/classnames';\n\nexport interface EmbedViewerProps\n extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'children'\n > {\n src: string;\n iframeTitle: string;\n description?: React.ReactNode;\n actions?: React.ReactNode;\n}\n\nconst EmbedViewer: React.FC<\n EmbedViewerProps\n> = ({\n src,\n iframeTitle,\n description,\n actions,\n className = '',\n ...props\n}) => {\n const classes = classnames(\n 'embed-viewer',\n className,\n {},\n );\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 <iframe\n className=\"embed-viewer__frame\"\n src={src}\n title={iframeTitle}\n />\n\n {actions && (\n <div className=\"embed-viewer__actions\">\n {actions}\n </div>\n )}\n </div>\n );\n};\n\nexport default EmbedViewer;\n"]}