jvetrau-ds 0.2.13 → 0.2.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components/attach/attach.cjs +32 -14
- package/components/attach/attach.cjs.map +1 -1
- package/components/attach/attach.css +65 -35
- package/components/attach/attach.js +28 -14
- package/components/attach/attach.js.map +1 -1
- package/components/attach/index.d.ts +1 -1
- package/components/index.d.ts +1 -1
- package/index.d.ts +1 -1
- package/package.json +1 -1
- package/styles.css +65 -35
- package/themes/base/desktop.css +1 -0
- package/themes/base/desktop.md +1 -0
- package/themes/base/desktop.scoped.css +1 -0
- package/themes/base/diagram.css +1 -0
- package/themes/base/diagram.md +1 -0
- package/themes/base/diagram.scoped.css +1 -0
- package/themes/base/mobile.css +1 -0
- package/themes/base/mobile.md +1 -0
- package/themes/base/mobile.scoped.css +1 -0
- package/themes/brandcopilot/desktop.css +1 -0
- package/themes/brandcopilot/desktop.md +1 -0
- package/themes/brandcopilot/desktop.scoped.css +1 -0
- package/themes/brandcopilot/diagram.css +1 -0
- package/themes/brandcopilot/diagram.md +1 -0
- package/themes/brandcopilot/diagram.scoped.css +1 -0
- package/themes/brandcopilot/mobile.css +1 -0
- package/themes/brandcopilot/mobile.md +1 -0
- package/themes/brandcopilot/mobile.scoped.css +1 -0
- package/themes/dmpatterns/desktop.css +1 -0
- package/themes/dmpatterns/desktop.md +1 -0
- package/themes/dmpatterns/desktop.scoped.css +1 -0
- package/themes/dmpatterns/diagram.css +1 -0
- package/themes/dmpatterns/diagram.md +1 -0
- package/themes/dmpatterns/diagram.scoped.css +1 -0
- package/themes/dmpatterns/mobile.css +1 -0
- package/themes/dmpatterns/mobile.md +1 -0
- package/themes/dmpatterns/mobile.scoped.css +1 -0
- package/themes/pdigest/desktop.css +1 -0
- package/themes/pdigest/desktop.md +1 -0
- package/themes/pdigest/desktop.scoped.css +1 -0
- package/themes/pdigest/diagram.css +1 -0
- package/themes/pdigest/diagram.md +1 -0
- package/themes/pdigest/diagram.scoped.css +1 -0
- package/themes/pdigest/mobile.css +1 -0
- package/themes/pdigest/mobile.md +1 -0
- package/themes/pdigest/mobile.scoped.css +1 -0
- package/themes/redesigntrack/desktop.css +1 -0
- package/themes/redesigntrack/desktop.md +1 -0
- package/themes/redesigntrack/desktop.scoped.css +1 -0
- package/themes/redesigntrack/diagram.css +1 -0
- package/themes/redesigntrack/diagram.md +1 -0
- package/themes/redesigntrack/diagram.scoped.css +1 -0
- package/themes/redesigntrack/mobile.css +1 -0
- package/themes/redesigntrack/mobile.md +1 -0
- package/themes/redesigntrack/mobile.scoped.css +1 -0
- package/tokens/runtime/tokens.base.desktop.runtime.cjs +1 -0
- package/tokens/runtime/tokens.base.desktop.runtime.cjs.map +1 -1
- package/tokens/runtime/tokens.base.desktop.runtime.d.ts +1 -0
- package/tokens/runtime/tokens.base.desktop.runtime.js +1 -0
- package/tokens/runtime/tokens.base.desktop.runtime.js.map +1 -1
- package/tokens/runtime/tokens.base.diagram.runtime.cjs +1 -0
- package/tokens/runtime/tokens.base.diagram.runtime.cjs.map +1 -1
- package/tokens/runtime/tokens.base.diagram.runtime.d.ts +1 -0
- package/tokens/runtime/tokens.base.diagram.runtime.js +1 -0
- package/tokens/runtime/tokens.base.diagram.runtime.js.map +1 -1
- package/tokens/runtime/tokens.base.mobile.runtime.cjs +1 -0
- package/tokens/runtime/tokens.base.mobile.runtime.cjs.map +1 -1
- package/tokens/runtime/tokens.base.mobile.runtime.d.ts +1 -0
- package/tokens/runtime/tokens.base.mobile.runtime.js +1 -0
- package/tokens/runtime/tokens.base.mobile.runtime.js.map +1 -1
- package/tokens/runtime/tokens.brandcopilot.desktop.runtime.cjs +1 -0
- package/tokens/runtime/tokens.brandcopilot.desktop.runtime.cjs.map +1 -1
- package/tokens/runtime/tokens.brandcopilot.desktop.runtime.d.ts +1 -0
- package/tokens/runtime/tokens.brandcopilot.desktop.runtime.js +1 -0
- package/tokens/runtime/tokens.brandcopilot.desktop.runtime.js.map +1 -1
- package/tokens/runtime/tokens.brandcopilot.diagram.runtime.cjs +1 -0
- package/tokens/runtime/tokens.brandcopilot.diagram.runtime.cjs.map +1 -1
- package/tokens/runtime/tokens.brandcopilot.diagram.runtime.d.ts +1 -0
- package/tokens/runtime/tokens.brandcopilot.diagram.runtime.js +1 -0
- package/tokens/runtime/tokens.brandcopilot.diagram.runtime.js.map +1 -1
- package/tokens/runtime/tokens.brandcopilot.mobile.runtime.cjs +1 -0
- package/tokens/runtime/tokens.brandcopilot.mobile.runtime.cjs.map +1 -1
- package/tokens/runtime/tokens.brandcopilot.mobile.runtime.d.ts +1 -0
- package/tokens/runtime/tokens.brandcopilot.mobile.runtime.js +1 -0
- package/tokens/runtime/tokens.brandcopilot.mobile.runtime.js.map +1 -1
- package/tokens/runtime/tokens.dmpatterns.desktop.runtime.cjs +1 -0
- package/tokens/runtime/tokens.dmpatterns.desktop.runtime.cjs.map +1 -1
- package/tokens/runtime/tokens.dmpatterns.desktop.runtime.d.ts +1 -0
- package/tokens/runtime/tokens.dmpatterns.desktop.runtime.js +1 -0
- package/tokens/runtime/tokens.dmpatterns.desktop.runtime.js.map +1 -1
- package/tokens/runtime/tokens.dmpatterns.diagram.runtime.cjs +1 -0
- package/tokens/runtime/tokens.dmpatterns.diagram.runtime.cjs.map +1 -1
- package/tokens/runtime/tokens.dmpatterns.diagram.runtime.d.ts +1 -0
- package/tokens/runtime/tokens.dmpatterns.diagram.runtime.js +1 -0
- package/tokens/runtime/tokens.dmpatterns.diagram.runtime.js.map +1 -1
- package/tokens/runtime/tokens.dmpatterns.mobile.runtime.cjs +1 -0
- package/tokens/runtime/tokens.dmpatterns.mobile.runtime.cjs.map +1 -1
- package/tokens/runtime/tokens.dmpatterns.mobile.runtime.d.ts +1 -0
- package/tokens/runtime/tokens.dmpatterns.mobile.runtime.js +1 -0
- package/tokens/runtime/tokens.dmpatterns.mobile.runtime.js.map +1 -1
- package/tokens/runtime/tokens.pdigest.desktop.runtime.cjs +1 -0
- package/tokens/runtime/tokens.pdigest.desktop.runtime.cjs.map +1 -1
- package/tokens/runtime/tokens.pdigest.desktop.runtime.d.ts +1 -0
- package/tokens/runtime/tokens.pdigest.desktop.runtime.js +1 -0
- package/tokens/runtime/tokens.pdigest.desktop.runtime.js.map +1 -1
- package/tokens/runtime/tokens.pdigest.diagram.runtime.cjs +1 -0
- package/tokens/runtime/tokens.pdigest.diagram.runtime.cjs.map +1 -1
- package/tokens/runtime/tokens.pdigest.diagram.runtime.d.ts +1 -0
- package/tokens/runtime/tokens.pdigest.diagram.runtime.js +1 -0
- package/tokens/runtime/tokens.pdigest.diagram.runtime.js.map +1 -1
- package/tokens/runtime/tokens.pdigest.mobile.runtime.cjs +1 -0
- package/tokens/runtime/tokens.pdigest.mobile.runtime.cjs.map +1 -1
- package/tokens/runtime/tokens.pdigest.mobile.runtime.d.ts +1 -0
- package/tokens/runtime/tokens.pdigest.mobile.runtime.js +1 -0
- package/tokens/runtime/tokens.pdigest.mobile.runtime.js.map +1 -1
- package/tokens/runtime/tokens.redesigntrack.desktop.runtime.cjs +1 -0
- package/tokens/runtime/tokens.redesigntrack.desktop.runtime.cjs.map +1 -1
- package/tokens/runtime/tokens.redesigntrack.desktop.runtime.d.ts +1 -0
- package/tokens/runtime/tokens.redesigntrack.desktop.runtime.js +1 -0
- package/tokens/runtime/tokens.redesigntrack.desktop.runtime.js.map +1 -1
- package/tokens/runtime/tokens.redesigntrack.diagram.runtime.cjs +1 -0
- package/tokens/runtime/tokens.redesigntrack.diagram.runtime.cjs.map +1 -1
- package/tokens/runtime/tokens.redesigntrack.diagram.runtime.d.ts +1 -0
- package/tokens/runtime/tokens.redesigntrack.diagram.runtime.js +1 -0
- package/tokens/runtime/tokens.redesigntrack.diagram.runtime.js.map +1 -1
- package/tokens/runtime/tokens.redesigntrack.mobile.runtime.cjs +1 -0
- package/tokens/runtime/tokens.redesigntrack.mobile.runtime.cjs.map +1 -1
- package/tokens/runtime/tokens.redesigntrack.mobile.runtime.d.ts +1 -0
- package/tokens/runtime/tokens.redesigntrack.mobile.runtime.js +1 -0
- package/tokens/runtime/tokens.redesigntrack.mobile.runtime.js.map +1 -1
- package/tokens/themes/base/dist/desktop.json +8 -0
- package/tokens/themes/base/dist/diagram.json +8 -0
- package/tokens/themes/base/dist/mobile.json +8 -0
- package/tokens/themes/brandcopilot/dist/desktop.json +8 -0
- package/tokens/themes/brandcopilot/dist/diagram.json +8 -0
- package/tokens/themes/brandcopilot/dist/mobile.json +8 -0
- package/tokens/themes/dmpatterns/dist/desktop.json +8 -0
- package/tokens/themes/dmpatterns/dist/diagram.json +8 -0
- package/tokens/themes/dmpatterns/dist/mobile.json +8 -0
- package/tokens/themes/pdigest/dist/desktop.json +8 -0
- package/tokens/themes/pdigest/dist/diagram.json +8 -0
- package/tokens/themes/pdigest/dist/mobile.json +8 -0
- package/tokens/themes/redesigntrack/dist/desktop.json +8 -0
- package/tokens/themes/redesigntrack/dist/diagram.json +8 -0
- 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}
|
|
23
|
+
return `${sizeBytes} \u0411`;
|
|
19
24
|
}
|
|
20
25
|
if (sizeBytes < 1024 * 1024) {
|
|
21
|
-
return `${Math.round(sizeBytes / 1024)}
|
|
26
|
+
return `${Math.round(sizeBytes / 1024)} \u041A\u0411`;
|
|
22
27
|
}
|
|
23
|
-
|
|
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(
|
|
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(
|
|
53
|
-
"attach__item
|
|
54
|
-
"
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
102
|
+
Button__default.default,
|
|
85
103
|
{
|
|
104
|
+
mode: "toolbar",
|
|
86
105
|
className: "attach__remove",
|
|
87
|
-
|
|
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":"
|
|
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-
|
|
5
|
-
--attachment-item-color: var(--color-text
|
|
6
|
-
--attachment-
|
|
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-
|
|
26
|
-
--attachment-item-
|
|
27
|
-
--attachment-
|
|
28
|
-
--attachment-
|
|
29
|
-
|
|
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-
|
|
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:
|
|
47
|
-
|
|
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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
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
|
-
|
|
126
|
-
|
|
127
|
-
|
|
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-
|
|
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
|
-
|
|
197
|
-
|
|
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
|
|
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}
|
|
17
|
+
return `${sizeBytes} \u0411`;
|
|
17
18
|
}
|
|
18
19
|
if (sizeBytes < 1024 * 1024) {
|
|
19
|
-
return `${Math.round(sizeBytes / 1024)}
|
|
20
|
+
return `${Math.round(sizeBytes / 1024)} \u041A\u0411`;
|
|
20
21
|
}
|
|
21
|
-
|
|
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(
|
|
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(
|
|
51
|
-
"attach__item
|
|
52
|
-
"
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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
|
-
|
|
96
|
+
Button,
|
|
83
97
|
{
|
|
98
|
+
mode: "toolbar",
|
|
84
99
|
className: "attach__remove",
|
|
85
|
-
|
|
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":"
|
|
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';
|
package/components/index.d.ts
CHANGED
|
@@ -38,7 +38,7 @@ export type { LogoProps } from './logo/logo';
|
|
|
38
38
|
export { default as Avatar } from './avatar/avatar';
|
|
39
39
|
export type { AvatarProps } from './avatar/avatar';
|
|
40
40
|
export { default as Attach } from './attach/attach';
|
|
41
|
-
export type { AttachItem, AttachProps, } from './attach/attach';
|
|
41
|
+
export type { AttachItem, AttachItemKind, AttachProps, } from './attach/attach';
|
|
42
42
|
export { default as ActionGroup } from './action-group/action-group';
|
|
43
43
|
export type { ActionGroupProps } from './action-group/action-group';
|
|
44
44
|
export { default as CardGroup } from './card-group/card-group';
|
package/index.d.ts
CHANGED
|
@@ -45,7 +45,7 @@ export type { LogoProps } from './components/logo';
|
|
|
45
45
|
export { default as Avatar } from './components/avatar';
|
|
46
46
|
export type { AvatarProps } from './components/avatar';
|
|
47
47
|
export { default as Attach } from './components/attach';
|
|
48
|
-
export type { AttachItem, AttachProps, } from './components/attach';
|
|
48
|
+
export type { AttachItem, AttachItemKind, AttachProps, } from './components/attach';
|
|
49
49
|
export { default as ActionGroup } from './components/action-group';
|
|
50
50
|
export type { ActionGroupProps } from './components/action-group';
|
|
51
51
|
export { default as CardGroup } from './components/card-group';
|
package/package.json
CHANGED
package/styles.css
CHANGED
|
@@ -30,10 +30,9 @@
|
|
|
30
30
|
.attach {
|
|
31
31
|
/* color */
|
|
32
32
|
--attachment-color: var(--color-text);
|
|
33
|
-
--attachment-item-bg: var(--color-
|
|
34
|
-
--attachment-item-color: var(--color-text
|
|
35
|
-
--attachment-
|
|
36
|
-
--attachment-item-meta-color: var(--color-text-note);
|
|
33
|
+
--attachment-item-bg: var(--color-bg-media);
|
|
34
|
+
--attachment-item-color: var(--color-text);
|
|
35
|
+
--attachment-item-meta-color: var(--color-text);
|
|
37
36
|
|
|
38
37
|
color: var(--attachment-color);
|
|
39
38
|
|
|
@@ -51,15 +50,16 @@
|
|
|
51
50
|
letter-spacing: var(--attachment-letter-spacing);
|
|
52
51
|
|
|
53
52
|
/* size */
|
|
54
|
-
--attachment-gap: var(--margin-
|
|
55
|
-
--attachment-item-
|
|
56
|
-
--attachment-
|
|
57
|
-
--attachment-
|
|
58
|
-
|
|
53
|
+
--attachment-gap: var(--margin-container);
|
|
54
|
+
--attachment-item-padding: var(--padding-container);
|
|
55
|
+
--attachment-remove-offset: var(--margin-container);
|
|
56
|
+
--attachment-aspect-ratio: 9 / 6;
|
|
57
|
+
|
|
58
|
+
width: 100%;
|
|
59
|
+
min-width: 0;
|
|
59
60
|
|
|
60
61
|
/* border */
|
|
61
|
-
--attachment-radius: var(--radius-
|
|
62
|
-
--attachment-border-width: var(--size-border-width-base);
|
|
62
|
+
--attachment-radius: var(--radius-container);
|
|
63
63
|
|
|
64
64
|
/* depth */
|
|
65
65
|
|
|
@@ -72,9 +72,13 @@
|
|
|
72
72
|
/* typography */
|
|
73
73
|
|
|
74
74
|
/* size */
|
|
75
|
-
display:
|
|
76
|
-
|
|
75
|
+
display: grid;
|
|
76
|
+
grid-template-columns:
|
|
77
|
+
repeat(3, minmax(0, 1fr));
|
|
77
78
|
gap: var(--attachment-gap);
|
|
79
|
+
|
|
80
|
+
width: 100%;
|
|
81
|
+
min-width: 0;
|
|
78
82
|
margin: 0;
|
|
79
83
|
padding: 0;
|
|
80
84
|
|
|
@@ -94,17 +98,14 @@
|
|
|
94
98
|
/* typography */
|
|
95
99
|
|
|
96
100
|
/* size */
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
101
|
+
position: relative;
|
|
102
|
+
min-width: 0;
|
|
103
|
+
aspect-ratio:
|
|
104
|
+
var(--attachment-aspect-ratio);
|
|
105
|
+
|
|
106
|
+
overflow: hidden;
|
|
102
107
|
|
|
103
108
|
/* border */
|
|
104
|
-
border:
|
|
105
|
-
var(--attachment-border-width)
|
|
106
|
-
solid
|
|
107
|
-
var(--attachment-border-color);
|
|
108
109
|
border-radius: var(--attachment-radius);
|
|
109
110
|
|
|
110
111
|
/* depth */
|
|
@@ -120,6 +121,9 @@
|
|
|
120
121
|
text-decoration: none;
|
|
121
122
|
|
|
122
123
|
/* size */
|
|
124
|
+
display: block;
|
|
125
|
+
width: 100%;
|
|
126
|
+
height: 100%;
|
|
123
127
|
min-width: 0;
|
|
124
128
|
|
|
125
129
|
/* border */
|
|
@@ -129,6 +133,25 @@
|
|
|
129
133
|
/* motion */
|
|
130
134
|
}
|
|
131
135
|
|
|
136
|
+
.attach__item--file .attach__link,
|
|
137
|
+
.attach__item--link .attach__link {
|
|
138
|
+
/* color */
|
|
139
|
+
|
|
140
|
+
/* typography */
|
|
141
|
+
|
|
142
|
+
/* size */
|
|
143
|
+
display: flex;
|
|
144
|
+
align-items: flex-end;
|
|
145
|
+
|
|
146
|
+
padding: var(--attachment-item-padding);
|
|
147
|
+
|
|
148
|
+
/* border */
|
|
149
|
+
|
|
150
|
+
/* depth */
|
|
151
|
+
|
|
152
|
+
/* motion */
|
|
153
|
+
}
|
|
154
|
+
|
|
132
155
|
.attach__link:hover .attach__name {
|
|
133
156
|
/* color */
|
|
134
157
|
|
|
@@ -151,12 +174,13 @@
|
|
|
151
174
|
|
|
152
175
|
/* size */
|
|
153
176
|
display: block;
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
177
|
+
|
|
178
|
+
width: 100%;
|
|
179
|
+
height: 100%;
|
|
180
|
+
|
|
181
|
+
object-fit: cover;
|
|
157
182
|
|
|
158
183
|
/* border */
|
|
159
|
-
border-radius: var(--attachment-radius);
|
|
160
184
|
|
|
161
185
|
/* depth */
|
|
162
186
|
|
|
@@ -171,6 +195,8 @@
|
|
|
171
195
|
/* size */
|
|
172
196
|
display: flex;
|
|
173
197
|
flex-direction: column;
|
|
198
|
+
|
|
199
|
+
width: 100%;
|
|
174
200
|
min-width: 0;
|
|
175
201
|
|
|
176
202
|
/* border */
|
|
@@ -188,6 +214,8 @@
|
|
|
188
214
|
white-space: nowrap;
|
|
189
215
|
|
|
190
216
|
/* size */
|
|
217
|
+
min-width: 0;
|
|
218
|
+
|
|
191
219
|
overflow: hidden;
|
|
192
220
|
|
|
193
221
|
/* border */
|
|
@@ -202,7 +230,11 @@
|
|
|
202
230
|
color: var(--attachment-item-meta-color);
|
|
203
231
|
|
|
204
232
|
/* typography */
|
|
205
|
-
font-
|
|
233
|
+
font-family: var(--font-body-family);
|
|
234
|
+
font-size: var(--font-body);
|
|
235
|
+
font-weight: var(--font-body-weight);
|
|
236
|
+
line-height: var(--font-body-line);
|
|
237
|
+
letter-spacing: var(--font-body-letter-spacing);
|
|
206
238
|
|
|
207
239
|
/* size */
|
|
208
240
|
|
|
@@ -215,30 +247,28 @@
|
|
|
215
247
|
|
|
216
248
|
.attach__remove {
|
|
217
249
|
/* color */
|
|
218
|
-
background: transparent;
|
|
219
250
|
color: inherit;
|
|
220
251
|
|
|
221
252
|
/* typography */
|
|
222
|
-
font: inherit;
|
|
223
253
|
|
|
224
254
|
/* size */
|
|
225
|
-
|
|
226
|
-
|
|
255
|
+
position: absolute;
|
|
256
|
+
top: var(--attachment-remove-offset);
|
|
257
|
+
right: var(--attachment-remove-offset);
|
|
258
|
+
z-index: 1;
|
|
227
259
|
|
|
228
260
|
/* border */
|
|
229
|
-
border: 0;
|
|
230
261
|
|
|
231
262
|
/* depth */
|
|
232
263
|
|
|
233
264
|
/* motion */
|
|
234
|
-
cursor: pointer;
|
|
235
265
|
}
|
|
236
266
|
|
|
237
|
-
.attach__remove
|
|
267
|
+
.attach__item--image .attach__remove {
|
|
238
268
|
/* color */
|
|
269
|
+
color: var(--color-contrast);
|
|
239
270
|
|
|
240
271
|
/* typography */
|
|
241
|
-
text-decoration: underline;
|
|
242
272
|
|
|
243
273
|
/* size */
|
|
244
274
|
|