brd-ui-kit 0.1.87 → 0.1.89
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/approval-log.view-CZoufOXF.js +283 -0
- package/dist/approval-log.view-CZoufOXF.js.map +1 -0
- package/dist/approval-log.view-DC5xl6KF.cjs +5 -0
- package/dist/approval-log.view-DC5xl6KF.cjs.map +1 -0
- package/dist/brd-ui-kit.css +1 -1
- package/dist/components/approval-log/approval-log.d.ts +1 -1
- package/dist/components/approval-log/approval-log.view.d.ts +15 -0
- package/dist/components/forms/form-files-uploader.d.ts +1 -1
- package/dist/components/forms/form-input-password.d.ts +1 -1
- package/dist/components/ui/dropdown-menu/dropdown-menu.d.ts +6 -1
- package/dist/components-approval-log-approval-log.cjs +5 -6
- package/dist/components-approval-log-approval-log.cjs.map +1 -1
- package/dist/components-approval-log-approval-log.js +161 -268
- package/dist/components-approval-log-approval-log.js.map +1 -1
- package/dist/components-approval-log-approval-log.view.cjs +2 -0
- package/dist/components-approval-log-approval-log.view.cjs.map +1 -0
- package/dist/components-approval-log-approval-log.view.js +69 -0
- package/dist/components-approval-log-approval-log.view.js.map +1 -0
- package/dist/components-avatar-uploader-avatar-uploader.cjs +2 -2
- package/dist/components-avatar-uploader-avatar-uploader.cjs.map +1 -1
- package/dist/components-avatar-uploader-avatar-uploader.js +10 -11
- package/dist/components-avatar-uploader-avatar-uploader.js.map +1 -1
- package/dist/components-basic-avatar-basic-avatar.cjs +1 -3
- package/dist/components-basic-avatar-basic-avatar.cjs.map +1 -1
- package/dist/components-basic-avatar-basic-avatar.js +7 -69
- package/dist/components-basic-avatar-basic-avatar.js.map +1 -1
- package/dist/components-basic-avatar.cjs +1 -1
- package/dist/components-basic-avatar.js +1 -1
- package/dist/components-checkbox-group-checkbox-group.cjs +1 -1
- package/dist/components-checkbox-group-checkbox-group.cjs.map +1 -1
- package/dist/components-checkbox-group-checkbox-group.js +1 -1
- package/dist/components-forms-form-contact-input.cjs +1 -1
- package/dist/components-forms-form-contact-input.cjs.map +1 -1
- package/dist/components-forms-form-contact-input.js +1 -1
- package/dist/components-forms-form-contact-input.js.map +1 -1
- package/dist/components-forms-form-files-uploader.cjs +1 -12
- package/dist/components-forms-form-files-uploader.cjs.map +1 -1
- package/dist/components-forms-form-files-uploader.js +27 -3045
- package/dist/components-forms-form-files-uploader.js.map +1 -1
- package/dist/components-forms-form-input-password.cjs +1 -29
- package/dist/components-forms-form-input-password.cjs.map +1 -1
- package/dist/components-forms-form-input-password.js +29 -363
- package/dist/components-forms-form-input-password.js.map +1 -1
- package/dist/components-input-contact-input-contact.cjs +1 -1
- package/dist/components-input-contact-input-contact.cjs.map +1 -1
- package/dist/components-input-contact-input-contact.js +1 -1
- package/dist/components-story-drawer-story-drawer.cjs +1 -1
- package/dist/components-story-drawer-story-drawer.cjs.map +1 -1
- package/dist/components-story-drawer-story-drawer.js +10 -11
- package/dist/components-story-drawer-story-drawer.js.map +1 -1
- package/dist/components-ui-dropdown-menu-dropdown-menu.cjs +2 -2
- package/dist/components-ui-dropdown-menu-dropdown-menu.cjs.map +1 -1
- package/dist/components-ui-dropdown-menu-dropdown-menu.js +32 -23
- package/dist/components-ui-dropdown-menu-dropdown-menu.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +267 -268
- package/dist/index.js.map +1 -1
- package/package.json +4 -1
- package/dist/components-ui-typography-typography.styles-C6G6MFUq.js +0 -105
- package/dist/components-ui-typography-typography.styles-C6G6MFUq.js.map +0 -1
- package/dist/components-ui-typography-typography.styles-CMzY_pXl.cjs +0 -2
- package/dist/components-ui-typography-typography.styles-CMzY_pXl.cjs.map +0 -1
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { jsxs as a, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
import { cn as n } from "./lib-utils.js";
|
|
3
|
+
import "class-variance-authority";
|
|
4
|
+
import "./components-ui-badge-badge.styles.js";
|
|
5
|
+
import "./components-ui-button-button.js";
|
|
6
|
+
import "./components-ui-button-button.styles.js";
|
|
7
|
+
import "./components-ui-card-card.js";
|
|
8
|
+
import "./components-ui-checkbox-checkbox.js";
|
|
9
|
+
import "brd-phosphor-strokes-icons/icons/CaretDown";
|
|
10
|
+
import { usePopupControls as v } from "./hooks-usePopupControls.js";
|
|
11
|
+
import "./calendar-B78l3uF9.js";
|
|
12
|
+
import { Icon as g } from "./components-ui-icon-icon.js";
|
|
13
|
+
import "brd-phosphor-strokes-icons/icons";
|
|
14
|
+
import "./components-ui-combobox-combobox.js";
|
|
15
|
+
import "./components-ui-dialog-dialog.js";
|
|
16
|
+
import { memo as w, useCallback as d } from "react";
|
|
17
|
+
import "./components-ui-label-label.js";
|
|
18
|
+
import "./components-ui-separator-separator.js";
|
|
19
|
+
import "./components-ui-field-field.styles.js";
|
|
20
|
+
import "./components-ui-input-input.styles.js";
|
|
21
|
+
import "./components-ui-textarea-textarea.js";
|
|
22
|
+
import "./components-ui-input-group-input-group.styles.js";
|
|
23
|
+
import "./components-ui-navigation-item-navigation-item.styles.js";
|
|
24
|
+
import "./components-ui-navigation-menu-navigation-menu.styles.js";
|
|
25
|
+
import "./components-ui-pagination-pagination.js";
|
|
26
|
+
import "./components-ui-progress-progress.js";
|
|
27
|
+
import "./components-ui-radio-group-radio-group.js";
|
|
28
|
+
import "./components-ui-switch-switch.js";
|
|
29
|
+
import "./components-ui-toggle-toggle.styles.js";
|
|
30
|
+
import "./components-ui-toggle-group-toggle-group.js";
|
|
31
|
+
import "./components-ui-table-table.js";
|
|
32
|
+
import "./components-ui-tabs-tabs.js";
|
|
33
|
+
import "./components-ui-tooltip-tooltip.js";
|
|
34
|
+
import { Typography as l } from "./components-ui-typography-typography.js";
|
|
35
|
+
import "./components-ui-typography-typography.styles.js";
|
|
36
|
+
import "brd-phosphor-strokes-icons/icons/CaretLeft";
|
|
37
|
+
import "brd-phosphor-strokes-icons/icons/CaretRight";
|
|
38
|
+
import "./components-app-pagination-app-pagination.styles.js";
|
|
39
|
+
import "brd-phosphor-strokes-icons/icons/CaretUpDown";
|
|
40
|
+
import "./components-app-sidebar-app-sidebar.styles.js";
|
|
41
|
+
import "./components-data-table-data-table.styles.js";
|
|
42
|
+
import { ConfigurableDropdownMenu as C } from "./components-ui-dropdown-menu-dropdown-menu.js";
|
|
43
|
+
import "brd-phosphor-strokes-icons/icons/Eye";
|
|
44
|
+
import "brd-phosphor-strokes-icons/icons/EyeSlash";
|
|
45
|
+
import "./components-select-field-select-field.js";
|
|
46
|
+
import "./lodash-FemA_LCk.js";
|
|
47
|
+
import "./chart-DFbmMKiQ.js";
|
|
48
|
+
import { Avatar as T, AvatarImage as k, AvatarFallback as O } from "./components-ui-avatar-avatar.js";
|
|
49
|
+
import "./components-ui-dropdown-menu-dropdown-menu.styles.js";
|
|
50
|
+
import "brd-phosphor-strokes-icons/icons/CheckCircle";
|
|
51
|
+
import "brd-phosphor-strokes-icons/icons/Info";
|
|
52
|
+
import "brd-phosphor-strokes-icons/icons/SpinnerGap";
|
|
53
|
+
import "brd-phosphor-strokes-icons/icons/Warning";
|
|
54
|
+
import "brd-phosphor-strokes-icons/icons/X";
|
|
55
|
+
import "brd-phosphor-strokes-icons/icons/XCircle";
|
|
56
|
+
import "./index-C4iHL8Gs.js";
|
|
57
|
+
import "./index-C6N9aMq_.js";
|
|
58
|
+
import "brd-phosphor-strokes-icons/icons/Plus";
|
|
59
|
+
import "brd-phosphor-strokes-icons/icons/CaretUp";
|
|
60
|
+
import "brd-phosphor-strokes-icons/icons/EnvelopeSimple";
|
|
61
|
+
import "brd-phosphor-strokes-icons/icons/MaxLogo";
|
|
62
|
+
import "brd-phosphor-strokes-icons/icons/Phone";
|
|
63
|
+
import "brd-phosphor-strokes-icons/icons/TelegramLogo";
|
|
64
|
+
import "brd-phosphor-strokes-icons/icons/WhatsAppLogoFilled";
|
|
65
|
+
import "./components-input-phone-input-phone.js";
|
|
66
|
+
import "./components-card-info-card-info.styles.js";
|
|
67
|
+
import './brd-ui-kit.css';const A = (r) => {
|
|
68
|
+
const i = r.trim();
|
|
69
|
+
if (!i)
|
|
70
|
+
return "";
|
|
71
|
+
const [p = "", o = ""] = i.split(/\s+/);
|
|
72
|
+
return p && o ? `${p[0].toUpperCase()}${o[0].toUpperCase()}` : i.length <= 2 ? i.toUpperCase() : p[0].toUpperCase();
|
|
73
|
+
}, P = ({
|
|
74
|
+
initials: r,
|
|
75
|
+
avatar: i,
|
|
76
|
+
fallback: p,
|
|
77
|
+
image: o,
|
|
78
|
+
icon: s,
|
|
79
|
+
showDeleteOnHover: u = !0,
|
|
80
|
+
onClick: f = () => {
|
|
81
|
+
}
|
|
82
|
+
}) => {
|
|
83
|
+
const m = /* @__PURE__ */ a(
|
|
84
|
+
T,
|
|
85
|
+
{
|
|
86
|
+
...i,
|
|
87
|
+
className: n("h-18 w-18", i?.className),
|
|
88
|
+
children: [
|
|
89
|
+
/* @__PURE__ */ e(
|
|
90
|
+
k,
|
|
91
|
+
{
|
|
92
|
+
...o,
|
|
93
|
+
alt: "avatar",
|
|
94
|
+
className: n("h-full w-full border-0", o?.className)
|
|
95
|
+
}
|
|
96
|
+
),
|
|
97
|
+
/* @__PURE__ */ e(O, { ...p, children: /* @__PURE__ */ e(
|
|
98
|
+
l,
|
|
99
|
+
{
|
|
100
|
+
variant: "body-xxl-medium",
|
|
101
|
+
className: n("text-info-new-text", r?.className),
|
|
102
|
+
children: A(r?.text ?? "")
|
|
103
|
+
}
|
|
104
|
+
) })
|
|
105
|
+
]
|
|
106
|
+
}
|
|
107
|
+
);
|
|
108
|
+
return u ? /* @__PURE__ */ a("div", { className: "relative inline-block", children: [
|
|
109
|
+
m,
|
|
110
|
+
/* @__PURE__ */ e(
|
|
111
|
+
"div",
|
|
112
|
+
{
|
|
113
|
+
className: `text-primary-bg bg-primary-inverse-bg/50 absolute inset-0 flex
|
|
114
|
+
cursor-pointer items-center justify-center rounded-full opacity-0
|
|
115
|
+
transition-opacity hover:opacity-100`,
|
|
116
|
+
onClick: (c) => c.stopPropagation(),
|
|
117
|
+
children: /* @__PURE__ */ e(
|
|
118
|
+
g,
|
|
119
|
+
{
|
|
120
|
+
...s,
|
|
121
|
+
type: "x",
|
|
122
|
+
onClick: f
|
|
123
|
+
}
|
|
124
|
+
)
|
|
125
|
+
}
|
|
126
|
+
)
|
|
127
|
+
] }) : m;
|
|
128
|
+
}, _ = [
|
|
129
|
+
{ id: "select", label: "Выбрать", iconType: "check-circle" },
|
|
130
|
+
{ id: "edit", label: "Редактировать", iconType: "pencil-simple" },
|
|
131
|
+
{ id: "delete", label: "Удалить", iconType: "trash", alert: !0 }
|
|
132
|
+
], U = {
|
|
133
|
+
align: "end",
|
|
134
|
+
side: "bottom",
|
|
135
|
+
sideOffset: -72
|
|
136
|
+
}, j = w(
|
|
137
|
+
({ item: r, isSelected: i, isEditing: p, isSelectMode: o, onAction: s, getBadge: u }) => {
|
|
138
|
+
const { isOpened: f, openPopup: m, closePopup: c } = v(), x = d(
|
|
139
|
+
(t) => {
|
|
140
|
+
r.id && s(r.id, t);
|
|
141
|
+
},
|
|
142
|
+
[r.id, s]
|
|
143
|
+
), N = d(
|
|
144
|
+
(t) => {
|
|
145
|
+
t.pointerType === "mouse" && t.button === 0 && t.preventDefault();
|
|
146
|
+
},
|
|
147
|
+
[]
|
|
148
|
+
), b = d(() => {
|
|
149
|
+
if (r.id) {
|
|
150
|
+
if (o) {
|
|
151
|
+
x({ id: "select", label: "Выбрать" });
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
m();
|
|
155
|
+
}
|
|
156
|
+
}, [x, o, r.id, m]), y = d(
|
|
157
|
+
(t) => {
|
|
158
|
+
if (t) {
|
|
159
|
+
m();
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
c();
|
|
163
|
+
},
|
|
164
|
+
[c, m]
|
|
165
|
+
);
|
|
166
|
+
return /* @__PURE__ */ e(
|
|
167
|
+
C,
|
|
168
|
+
{
|
|
169
|
+
items: _,
|
|
170
|
+
onAction: x,
|
|
171
|
+
contentProps: U,
|
|
172
|
+
open: f,
|
|
173
|
+
onOpenChange: y,
|
|
174
|
+
trigger: /* @__PURE__ */ a(
|
|
175
|
+
"div",
|
|
176
|
+
{
|
|
177
|
+
onPointerDown: N,
|
|
178
|
+
onClick: b,
|
|
179
|
+
className: n(
|
|
180
|
+
`flex cursor-pointer flex-col gap-2.5 px-4 py-3
|
|
181
|
+
shadow-[0_-2px_4px_0_rgba(0,0,0,0.05)]`,
|
|
182
|
+
i && "bg-negotiation-bg",
|
|
183
|
+
p && "bg-confidence-bg"
|
|
184
|
+
),
|
|
185
|
+
children: [
|
|
186
|
+
/* @__PURE__ */ a("div", { className: "flex gap-3", children: [
|
|
187
|
+
/* @__PURE__ */ a("div", { className: "w-fit", children: [
|
|
188
|
+
/* @__PURE__ */ e(
|
|
189
|
+
P,
|
|
190
|
+
{
|
|
191
|
+
initials: {
|
|
192
|
+
text: r.userName,
|
|
193
|
+
className: "text-primary-text"
|
|
194
|
+
},
|
|
195
|
+
avatar: {
|
|
196
|
+
className: "h-12 w-12"
|
|
197
|
+
},
|
|
198
|
+
showDeleteOnHover: !1
|
|
199
|
+
}
|
|
200
|
+
),
|
|
201
|
+
/* @__PURE__ */ e(
|
|
202
|
+
l,
|
|
203
|
+
{
|
|
204
|
+
variant: "body-xxs-medium",
|
|
205
|
+
className: "text-secondary-text text-center",
|
|
206
|
+
children: r.dateShort
|
|
207
|
+
}
|
|
208
|
+
)
|
|
209
|
+
] }),
|
|
210
|
+
/* @__PURE__ */ a("div", { className: "flex w-full flex-col gap-2.5", children: [
|
|
211
|
+
/* @__PURE__ */ a("div", { className: "flex w-full items-center justify-between", children: [
|
|
212
|
+
/* @__PURE__ */ e(
|
|
213
|
+
l,
|
|
214
|
+
{
|
|
215
|
+
variant: "body-md-medium",
|
|
216
|
+
className: "text-primary-text",
|
|
217
|
+
children: r.userName
|
|
218
|
+
}
|
|
219
|
+
),
|
|
220
|
+
/* @__PURE__ */ e(
|
|
221
|
+
g,
|
|
222
|
+
{
|
|
223
|
+
type: "check-circle",
|
|
224
|
+
className: "text-sub-label-text"
|
|
225
|
+
}
|
|
226
|
+
)
|
|
227
|
+
] }),
|
|
228
|
+
/* @__PURE__ */ e(
|
|
229
|
+
l,
|
|
230
|
+
{
|
|
231
|
+
variant: "body-sm-regular",
|
|
232
|
+
className: "text-primary-text",
|
|
233
|
+
children: r.message
|
|
234
|
+
}
|
|
235
|
+
),
|
|
236
|
+
r.imageUrl && /* @__PURE__ */ e(
|
|
237
|
+
"img",
|
|
238
|
+
{
|
|
239
|
+
src: r.imageUrl,
|
|
240
|
+
alt: "Вложенное изображение",
|
|
241
|
+
className: "max-h-65 w-full rounded-lg object-contain"
|
|
242
|
+
}
|
|
243
|
+
)
|
|
244
|
+
] })
|
|
245
|
+
] }),
|
|
246
|
+
/* @__PURE__ */ e("div", { className: "flex gap-3 px-4", children: r.tags.map((t) => {
|
|
247
|
+
const h = u(t);
|
|
248
|
+
return /* @__PURE__ */ a(
|
|
249
|
+
"div",
|
|
250
|
+
{
|
|
251
|
+
className: n(
|
|
252
|
+
"flex items-center gap-1.25 rounded-lg border px-3 py-1",
|
|
253
|
+
h.bg,
|
|
254
|
+
h.color
|
|
255
|
+
),
|
|
256
|
+
children: [
|
|
257
|
+
/* @__PURE__ */ e(l, { variant: "body-xxs-medium", children: t }),
|
|
258
|
+
/* @__PURE__ */ e(
|
|
259
|
+
g,
|
|
260
|
+
{
|
|
261
|
+
type: "check-circle",
|
|
262
|
+
size: 15,
|
|
263
|
+
strokeWidth: 1.25
|
|
264
|
+
}
|
|
265
|
+
)
|
|
266
|
+
]
|
|
267
|
+
},
|
|
268
|
+
t
|
|
269
|
+
);
|
|
270
|
+
}) })
|
|
271
|
+
]
|
|
272
|
+
}
|
|
273
|
+
)
|
|
274
|
+
}
|
|
275
|
+
);
|
|
276
|
+
}
|
|
277
|
+
);
|
|
278
|
+
j.displayName = "ApprovalLogRow";
|
|
279
|
+
export {
|
|
280
|
+
j as A,
|
|
281
|
+
P as B
|
|
282
|
+
};
|
|
283
|
+
//# sourceMappingURL=approval-log.view-CZoufOXF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-log.view-CZoufOXF.js","sources":["../src/components/basic-avatar/basic-avatar.tsx","../src/components/approval-log/approval-log.view.tsx"],"sourcesContent":["import { Icon, Typography, cn } from \"@/index\";\nimport type { Avatar as AvatarPrimitive } from \"radix-ui\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../ui/avatar\";\nimport type { IconProps } from \"../ui/icon\";\n\ntype AvatarProps = React.ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: \"default\" | \"sm\" | \"lg\";\n};\ntype AvatarFallbackProps = React.ComponentProps<typeof AvatarPrimitive.Fallback>;\ntype AvatarImageProps = React.ComponentProps<typeof AvatarPrimitive.Image>;\n\ntype Props = {\n initials?: {\n text?: string;\n className?: string;\n };\n hasBadge?: boolean;\n avatar?: AvatarProps;\n fallback?: AvatarFallbackProps;\n image?: AvatarImageProps;\n showDeleteOnHover?: boolean;\n icon?: IconProps;\n onClick?: (e: React.MouseEvent<HTMLDivElement>) => void;\n};\n\nconst getInitials = (fullName: string): string => {\n const normalizedName = fullName.trim();\n\n if (!normalizedName) {\n return \"\";\n }\n\n const [firstName = \"\", lastName = \"\"] = normalizedName.split(/\\s+/);\n\n if (firstName && lastName) {\n return `${firstName[0].toUpperCase()}${lastName[0].toUpperCase()}`;\n }\n\n if (normalizedName.length <= 2) {\n return normalizedName.toUpperCase();\n }\n\n return firstName[0].toUpperCase();\n};\n\nexport const BasicAvatar = ({\n initials,\n avatar,\n fallback,\n image,\n icon,\n showDeleteOnHover = true,\n onClick = () => {},\n}: Props) => {\n const content = (\n <Avatar\n {...avatar}\n className={cn(\"h-18 w-18\", avatar?.className)}\n >\n <AvatarImage\n {...image}\n alt=\"avatar\"\n className={cn(\"h-full w-full border-0\", image?.className)}\n />\n <AvatarFallback {...fallback}>\n <Typography\n variant=\"body-xxl-medium\"\n className={cn(\"text-info-new-text\", initials?.className)}\n >\n {getInitials(initials?.text ?? \"\")}\n </Typography>\n </AvatarFallback>\n </Avatar>\n );\n\n if (!showDeleteOnHover) {\n return content;\n }\n\n return (\n <div className=\"relative inline-block\">\n {content}\n <div\n className=\"text-primary-bg bg-primary-inverse-bg/50 absolute inset-0 flex\n cursor-pointer items-center justify-center rounded-full opacity-0\n transition-opacity hover:opacity-100\"\n onClick={(e) => e.stopPropagation()}\n >\n <Icon\n {...icon}\n type=\"x\"\n onClick={onClick}\n />\n </div>\n </div>\n );\n};\n\nexport type {\n AvatarFallbackProps,\n AvatarImageProps,\n AvatarProps,\n Props as BasicAvatarProps,\n};\n","import {\n BasicAvatar,\n cn,\n ConfigurableDropdownMenu,\n Icon,\n Typography,\n usePopupControls,\n type ApprovalLogItem,\n type DropdownMenuConfigItem,\n type DropdownMenuConfigNode,\n} from \"@/index\";\nimport { memo, useCallback, type PointerEvent } from \"react\";\n\ntype Props = {\n item: ApprovalLogItem;\n isSelected: boolean;\n isEditing: boolean;\n isSelectMode: boolean;\n onAction: (id: string, action: DropdownMenuConfigItem) => void;\n getBadge: (type: string) => {\n bg: string;\n color: string;\n };\n};\n\nconst NOTE_ACTIONS: DropdownMenuConfigNode[] = [\n { id: \"select\", label: \"Выбрать\", iconType: \"check-circle\" },\n { id: \"edit\", label: \"Редактировать\", iconType: \"pencil-simple\" },\n { id: \"delete\", label: \"Удалить\", iconType: \"trash\", alert: true },\n];\n\nconst NOTE_MENU_CONTENT_PROPS = {\n align: \"end\",\n side: \"bottom\",\n sideOffset: -72,\n} as const;\n\nexport const ApprovalLogView = memo(\n ({ item, isSelected, isEditing, isSelectMode, onAction, getBadge }: Props) => {\n const { isOpened, openPopup, closePopup } = usePopupControls();\n\n const handleAction = useCallback(\n (action: DropdownMenuConfigItem) => {\n if (!item.id) {\n return;\n }\n\n onAction(item.id, action);\n },\n [item.id, onAction],\n );\n\n const handleTriggerPointerDown = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n if (event.pointerType === \"mouse\" && event.button === 0) {\n event.preventDefault();\n }\n },\n [],\n );\n\n const handleTriggerClick = useCallback(() => {\n if (!item.id) {\n return;\n }\n\n if (isSelectMode) {\n handleAction({ id: \"select\", label: \"Выбрать\" });\n return;\n }\n\n openPopup();\n }, [handleAction, isSelectMode, item.id, openPopup]);\n\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (open) {\n openPopup();\n return;\n }\n\n closePopup();\n },\n [closePopup, openPopup],\n );\n\n return (\n <ConfigurableDropdownMenu\n items={NOTE_ACTIONS}\n onAction={handleAction}\n contentProps={NOTE_MENU_CONTENT_PROPS}\n open={isOpened}\n onOpenChange={handleOpenChange}\n trigger={\n <div\n onPointerDown={handleTriggerPointerDown}\n onClick={handleTriggerClick}\n className={cn(\n `flex cursor-pointer flex-col gap-2.5 px-4 py-3\n shadow-[0_-2px_4px_0_rgba(0,0,0,0.05)]`,\n isSelected && \"bg-negotiation-bg\",\n isEditing && \"bg-confidence-bg\",\n )}\n >\n <div className=\"flex gap-3\">\n <div className=\"w-fit\">\n <BasicAvatar\n initials={{\n text: item.userName,\n className: \"text-primary-text\",\n }}\n avatar={{\n className: \"h-12 w-12\",\n }}\n showDeleteOnHover={false}\n />\n\n <Typography\n variant=\"body-xxs-medium\"\n className=\"text-secondary-text text-center\"\n >\n {item.dateShort}\n </Typography>\n </div>\n\n <div className=\"flex w-full flex-col gap-2.5\">\n <div className=\"flex w-full items-center justify-between\">\n <Typography\n variant=\"body-md-medium\"\n className=\"text-primary-text\"\n >\n {item.userName}\n </Typography>\n\n <Icon\n type=\"check-circle\"\n className=\"text-sub-label-text\"\n />\n </div>\n <Typography\n variant=\"body-sm-regular\"\n className=\"text-primary-text\"\n >\n {item.message}\n </Typography>\n {item.imageUrl && (\n <img\n src={item.imageUrl}\n alt=\"Вложенное изображение\"\n className=\"max-h-65 w-full rounded-lg object-contain\"\n />\n )}\n </div>\n </div>\n <div className=\"flex gap-3 px-4\">\n {item.tags.map((tag) => {\n const badge = getBadge(tag);\n return (\n <div\n key={tag}\n className={cn(\n \"flex items-center gap-1.25 rounded-lg border px-3 py-1\",\n badge.bg,\n badge.color,\n )}\n >\n <Typography variant=\"body-xxs-medium\">{tag}</Typography>\n\n <Icon\n type=\"check-circle\"\n size={15}\n strokeWidth={1.25}\n />\n </div>\n );\n })}\n </div>\n </div>\n }\n />\n );\n },\n);\n\nApprovalLogView.displayName = \"ApprovalLogRow\";\n"],"names":["getInitials","fullName","normalizedName","firstName","lastName","BasicAvatar","initials","avatar","fallback","image","icon","showDeleteOnHover","onClick","content","jsxs","Avatar","cn","jsx","AvatarImage","AvatarFallback","Typography","e","Icon","NOTE_ACTIONS","NOTE_MENU_CONTENT_PROPS","ApprovalLogView","memo","item","isSelected","isEditing","isSelectMode","onAction","getBadge","isOpened","openPopup","closePopup","usePopupControls","handleAction","useCallback","action","handleTriggerPointerDown","event","handleTriggerClick","handleOpenChange","open","ConfigurableDropdownMenu","tag","badge"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAMA,IAAc,CAACC,MAA6B;AAChD,QAAMC,IAAiBD,EAAS,KAAA;AAEhC,MAAI,CAACC;AACH,WAAO;AAGT,QAAM,CAACC,IAAY,IAAIC,IAAW,EAAE,IAAIF,EAAe,MAAM,KAAK;AAElE,SAAIC,KAAaC,IACR,GAAGD,EAAU,CAAC,EAAE,YAAA,CAAa,GAAGC,EAAS,CAAC,EAAE,YAAA,CAAa,KAG9DF,EAAe,UAAU,IACpBA,EAAe,YAAA,IAGjBC,EAAU,CAAC,EAAE,YAAA;AACtB,GAEaE,IAAc,CAAC;AAAA,EAC1B,UAAAC;AAAA,EACA,QAAAC;AAAA,EACA,UAAAC;AAAA,EACA,OAAAC;AAAA,EACA,MAAAC;AAAA,EACA,mBAAAC,IAAoB;AAAA,EACpB,SAAAC,IAAU,MAAM;AAAA,EAAC;AACnB,MAAa;AACX,QAAMC,IACJ,gBAAAC;AAAA,IAACC;AAAA,IAAA;AAAA,MACE,GAAGR;AAAA,MACJ,WAAWS,EAAG,aAAaT,GAAQ,SAAS;AAAA,MAE5C,UAAA;AAAA,QAAA,gBAAAU;AAAA,UAACC;AAAA,UAAA;AAAA,YACE,GAAGT;AAAA,YACJ,KAAI;AAAA,YACJ,WAAWO,EAAG,0BAA0BP,GAAO,SAAS;AAAA,UAAA;AAAA,QAAA;AAAA,QAE1D,gBAAAQ,EAACE,GAAA,EAAgB,GAAGX,GAClB,UAAA,gBAAAS;AAAA,UAACG;AAAA,UAAA;AAAA,YACC,SAAQ;AAAA,YACR,WAAWJ,EAAG,sBAAsBV,GAAU,SAAS;AAAA,YAEtD,UAAAN,EAAYM,GAAU,QAAQ,EAAE;AAAA,UAAA;AAAA,QAAA,EACnC,CACF;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAIJ,SAAKK,IAKH,gBAAAG,EAAC,OAAA,EAAI,WAAU,yBACZ,UAAA;AAAA,IAAAD;AAAA,IACD,gBAAAI;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAU;AAAA;AAAA;AAAA,QAGV,SAAS,CAACI,MAAMA,EAAE,gBAAA;AAAA,QAElB,UAAA,gBAAAJ;AAAA,UAACK;AAAA,UAAA;AAAA,YACE,GAAGZ;AAAA,YACJ,MAAK;AAAA,YACL,SAAAE;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EACF,GACF,IAlBOC;AAoBX,GCvEMU,IAAyC;AAAA,EAC7C,EAAE,IAAI,UAAU,OAAO,WAAW,UAAU,eAAA;AAAA,EAC5C,EAAE,IAAI,QAAQ,OAAO,iBAAiB,UAAU,gBAAA;AAAA,EAChD,EAAE,IAAI,UAAU,OAAO,WAAW,UAAU,SAAS,OAAO,GAAA;AAC9D,GAEMC,IAA0B;AAAA,EAC9B,OAAO;AAAA,EACP,MAAM;AAAA,EACN,YAAY;AACd,GAEaC,IAAkBC;AAAA,EAC7B,CAAC,EAAE,MAAAC,GAAM,YAAAC,GAAY,WAAAC,GAAW,cAAAC,GAAc,UAAAC,GAAU,UAAAC,QAAsB;AAC5E,UAAM,EAAE,UAAAC,GAAU,WAAAC,GAAW,YAAAC,EAAA,IAAeC,EAAA,GAEtCC,IAAeC;AAAA,MACnB,CAACC,MAAmC;AAClC,QAAKZ,EAAK,MAIVI,EAASJ,EAAK,IAAIY,CAAM;AAAA,MAC1B;AAAA,MACA,CAACZ,EAAK,IAAII,CAAQ;AAAA,IAAA,GAGdS,IAA2BF;AAAA,MAC/B,CAACG,MAAwC;AACvC,QAAIA,EAAM,gBAAgB,WAAWA,EAAM,WAAW,KACpDA,EAAM,eAAA;AAAA,MAEV;AAAA,MACA,CAAA;AAAA,IAAC,GAGGC,IAAqBJ,EAAY,MAAM;AAC3C,UAAKX,EAAK,IAIV;AAAA,YAAIG,GAAc;AAChB,UAAAO,EAAa,EAAE,IAAI,UAAU,OAAO,WAAW;AAC/C;AAAA,QACF;AAEA,QAAAH,EAAA;AAAA;AAAA,IACF,GAAG,CAACG,GAAcP,GAAcH,EAAK,IAAIO,CAAS,CAAC,GAE7CS,IAAmBL;AAAA,MACvB,CAACM,MAAkB;AACjB,YAAIA,GAAM;AACR,UAAAV,EAAA;AACA;AAAA,QACF;AAEA,QAAAC,EAAA;AAAA,MACF;AAAA,MACA,CAACA,GAAYD,CAAS;AAAA,IAAA;AAGxB,WACE,gBAAAjB;AAAA,MAAC4B;AAAA,MAAA;AAAA,QACC,OAAOtB;AAAA,QACP,UAAUc;AAAA,QACV,cAAcb;AAAA,QACd,MAAMS;AAAA,QACN,cAAcU;AAAA,QACd,SACE,gBAAA7B;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,eAAe0B;AAAA,YACf,SAASE;AAAA,YACT,WAAW1B;AAAA,cACT;AAAA;AAAA,cAEAY,KAAc;AAAA,cACdC,KAAa;AAAA,YAAA;AAAA,YAGf,UAAA;AAAA,cAAA,gBAAAf,EAAC,OAAA,EAAI,WAAU,cACb,UAAA;AAAA,gBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,SACb,UAAA;AAAA,kBAAA,gBAAAG;AAAA,oBAACZ;AAAA,oBAAA;AAAA,sBACC,UAAU;AAAA,wBACR,MAAMsB,EAAK;AAAA,wBACX,WAAW;AAAA,sBAAA;AAAA,sBAEb,QAAQ;AAAA,wBACN,WAAW;AAAA,sBAAA;AAAA,sBAEb,mBAAmB;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAGrB,gBAAAV;AAAA,oBAACG;AAAA,oBAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,WAAU;AAAA,sBAET,UAAAO,EAAK;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACR,GACF;AAAA,gBAEA,gBAAAb,EAAC,OAAA,EAAI,WAAU,gCACb,UAAA;AAAA,kBAAA,gBAAAA,EAAC,OAAA,EAAI,WAAU,4CACb,UAAA;AAAA,oBAAA,gBAAAG;AAAA,sBAACG;AAAA,sBAAA;AAAA,wBACC,SAAQ;AAAA,wBACR,WAAU;AAAA,wBAET,UAAAO,EAAK;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGR,gBAAAV;AAAA,sBAACK;AAAA,sBAAA;AAAA,wBACC,MAAK;AAAA,wBACL,WAAU;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACZ,GACF;AAAA,kBACA,gBAAAL;AAAA,oBAACG;AAAA,oBAAA;AAAA,sBACC,SAAQ;AAAA,sBACR,WAAU;AAAA,sBAET,UAAAO,EAAK;AAAA,oBAAA;AAAA,kBAAA;AAAA,kBAEPA,EAAK,YACJ,gBAAAV;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,KAAKU,EAAK;AAAA,sBACV,KAAI;AAAA,sBACJ,WAAU;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACZ,EAAA,CAEJ;AAAA,cAAA,GACF;AAAA,cACA,gBAAAV,EAAC,SAAI,WAAU,mBACZ,YAAK,KAAK,IAAI,CAAC6B,MAAQ;AACtB,sBAAMC,IAAQf,EAASc,CAAG;AAC1B,uBACE,gBAAAhC;AAAA,kBAAC;AAAA,kBAAA;AAAA,oBAEC,WAAWE;AAAA,sBACT;AAAA,sBACA+B,EAAM;AAAA,sBACNA,EAAM;AAAA,oBAAA;AAAA,oBAGR,UAAA;AAAA,sBAAA,gBAAA9B,EAACG,GAAA,EAAW,SAAQ,mBAAmB,UAAA0B,GAAI;AAAA,sBAE3C,gBAAA7B;AAAA,wBAACK;AAAA,wBAAA;AAAA,0BACC,MAAK;AAAA,0BACL,MAAM;AAAA,0BACN,aAAa;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBACf;AAAA,kBAAA;AAAA,kBAbKwB;AAAA,gBAAA;AAAA,cAgBX,CAAC,EAAA,CACH;AAAA,YAAA;AAAA,UAAA;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAIR;AACF;AAEArB,EAAgB,cAAc;"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
"use strict";require('./brd-ui-kit.css');const e=require("react/jsx-runtime"),c=require("./lib-utils.cjs");require("class-variance-authority");require("./components-ui-badge-badge.styles.cjs");require("./components-ui-button-button.cjs");require("./components-ui-button-button.styles.cjs");require("./components-ui-card-card.cjs");require("./components-ui-checkbox-checkbox.cjs");require("brd-phosphor-strokes-icons/icons/CaretDown");const j=require("./hooks-usePopupControls.cjs");require("./calendar-BClkfQSD.cjs");const g=require("./components-ui-icon-icon.cjs");require("brd-phosphor-strokes-icons/icons");require("./components-ui-combobox-combobox.cjs");require("./components-ui-dialog-dialog.cjs");const o=require("react");require("./components-ui-label-label.cjs");require("./components-ui-separator-separator.cjs");require("./components-ui-field-field.styles.cjs");require("./components-ui-input-input.styles.cjs");require("./components-ui-textarea-textarea.cjs");require("./components-ui-input-group-input-group.styles.cjs");require("./components-ui-navigation-item-navigation-item.styles.cjs");require("./components-ui-navigation-menu-navigation-menu.styles.cjs");require("./components-ui-pagination-pagination.cjs");require("./components-ui-progress-progress.cjs");require("./components-ui-radio-group-radio-group.cjs");require("./components-ui-switch-switch.cjs");require("./components-ui-toggle-toggle.styles.cjs");require("./components-ui-toggle-group-toggle-group.cjs");require("./components-ui-table-table.cjs");require("./components-ui-tabs-tabs.cjs");require("./components-ui-tooltip-tooltip.cjs");const l=require("./components-ui-typography-typography.cjs");require("./components-ui-typography-typography.styles.cjs");require("brd-phosphor-strokes-icons/icons/CaretLeft");require("brd-phosphor-strokes-icons/icons/CaretRight");require("./components-app-pagination-app-pagination.styles.cjs");require("brd-phosphor-strokes-icons/icons/CaretUpDown");require("./components-app-sidebar-app-sidebar.styles.cjs");require("./components-data-table-data-table.styles.cjs");const _=require("./components-ui-dropdown-menu-dropdown-menu.cjs");require("brd-phosphor-strokes-icons/icons/Eye");require("brd-phosphor-strokes-icons/icons/EyeSlash");require("./components-select-field-select-field.cjs");require("./lodash-kqhtUJfz.cjs");require("./chart-9H_9wEfR.cjs");const m=require("./components-ui-avatar-avatar.cjs");require("./components-ui-dropdown-menu-dropdown-menu.styles.cjs");require("brd-phosphor-strokes-icons/icons/CheckCircle");require("brd-phosphor-strokes-icons/icons/Info");require("brd-phosphor-strokes-icons/icons/SpinnerGap");require("brd-phosphor-strokes-icons/icons/Warning");require("brd-phosphor-strokes-icons/icons/X");require("brd-phosphor-strokes-icons/icons/XCircle");require("./index-DGxwh2Ms.cjs");require("./index-fTTv8YY8.cjs");require("brd-phosphor-strokes-icons/icons/Plus");require("brd-phosphor-strokes-icons/icons/CaretUp");require("brd-phosphor-strokes-icons/icons/EnvelopeSimple");require("brd-phosphor-strokes-icons/icons/MaxLogo");require("brd-phosphor-strokes-icons/icons/Phone");require("brd-phosphor-strokes-icons/icons/TelegramLogo");require("brd-phosphor-strokes-icons/icons/WhatsAppLogoFilled");require("./components-input-phone-input-phone.cjs");require("./components-card-info-card-info.styles.cjs");const w=r=>{const s=r.trim();if(!s)return"";const[t="",a=""]=s.split(/\s+/);return t&&a?`${t[0].toUpperCase()}${a[0].toUpperCase()}`:s.length<=2?s.toUpperCase():t[0].toUpperCase()},y=({initials:r,avatar:s,fallback:t,image:a,icon:u,showDeleteOnHover:d=!0,onClick:q=()=>{}})=>{const n=e.jsxs(m.Avatar,{...s,className:c.cn("h-18 w-18",s?.className),children:[e.jsx(m.AvatarImage,{...a,alt:"avatar",className:c.cn("h-full w-full border-0",a?.className)}),e.jsx(m.AvatarFallback,{...t,children:e.jsx(l.Typography,{variant:"body-xxl-medium",className:c.cn("text-info-new-text",r?.className),children:w(r?.text??"")})})]});return d?e.jsxs("div",{className:"relative inline-block",children:[n,e.jsx("div",{className:`text-primary-bg bg-primary-inverse-bg/50 absolute inset-0 flex
|
|
2
|
+
cursor-pointer items-center justify-center rounded-full opacity-0
|
|
3
|
+
transition-opacity hover:opacity-100`,onClick:p=>p.stopPropagation(),children:e.jsx(g.Icon,{...u,type:"x",onClick:q})})]}):n},C=[{id:"select",label:"Выбрать",iconType:"check-circle"},{id:"edit",label:"Редактировать",iconType:"pencil-simple"},{id:"delete",label:"Удалить",iconType:"trash",alert:!0}],T={align:"end",side:"bottom",sideOffset:-72},b=o.memo(({item:r,isSelected:s,isEditing:t,isSelectMode:a,onAction:u,getBadge:d})=>{const{isOpened:q,openPopup:n,closePopup:p}=j.usePopupControls(),x=o.useCallback(i=>{r.id&&u(r.id,i)},[r.id,u]),f=o.useCallback(i=>{i.pointerType==="mouse"&&i.button===0&&i.preventDefault()},[]),N=o.useCallback(()=>{if(r.id){if(a){x({id:"select",label:"Выбрать"});return}n()}},[x,a,r.id,n]),v=o.useCallback(i=>{if(i){n();return}p()},[p,n]);return e.jsx(_.ConfigurableDropdownMenu,{items:C,onAction:x,contentProps:T,open:q,onOpenChange:v,trigger:e.jsxs("div",{onPointerDown:f,onClick:N,className:c.cn(`flex cursor-pointer flex-col gap-2.5 px-4 py-3
|
|
4
|
+
shadow-[0_-2px_4px_0_rgba(0,0,0,0.05)]`,s&&"bg-negotiation-bg",t&&"bg-confidence-bg"),children:[e.jsxs("div",{className:"flex gap-3",children:[e.jsxs("div",{className:"w-fit",children:[e.jsx(y,{initials:{text:r.userName,className:"text-primary-text"},avatar:{className:"h-12 w-12"},showDeleteOnHover:!1}),e.jsx(l.Typography,{variant:"body-xxs-medium",className:"text-secondary-text text-center",children:r.dateShort})]}),e.jsxs("div",{className:"flex w-full flex-col gap-2.5",children:[e.jsxs("div",{className:"flex w-full items-center justify-between",children:[e.jsx(l.Typography,{variant:"body-md-medium",className:"text-primary-text",children:r.userName}),e.jsx(g.Icon,{type:"check-circle",className:"text-sub-label-text"})]}),e.jsx(l.Typography,{variant:"body-sm-regular",className:"text-primary-text",children:r.message}),r.imageUrl&&e.jsx("img",{src:r.imageUrl,alt:"Вложенное изображение",className:"max-h-65 w-full rounded-lg object-contain"})]})]}),e.jsx("div",{className:"flex gap-3 px-4",children:r.tags.map(i=>{const h=d(i);return e.jsxs("div",{className:c.cn("flex items-center gap-1.25 rounded-lg border px-3 py-1",h.bg,h.color),children:[e.jsx(l.Typography,{variant:"body-xxs-medium",children:i}),e.jsx(g.Icon,{type:"check-circle",size:15,strokeWidth:1.25})]},i)})})]})})});b.displayName="ApprovalLogRow";exports.ApprovalLogView=b;exports.BasicAvatar=y;
|
|
5
|
+
//# sourceMappingURL=approval-log.view-DC5xl6KF.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-log.view-DC5xl6KF.cjs","sources":["../src/components/basic-avatar/basic-avatar.tsx","../src/components/approval-log/approval-log.view.tsx"],"sourcesContent":["import { Icon, Typography, cn } from \"@/index\";\nimport type { Avatar as AvatarPrimitive } from \"radix-ui\";\nimport { Avatar, AvatarFallback, AvatarImage } from \"../ui/avatar\";\nimport type { IconProps } from \"../ui/icon\";\n\ntype AvatarProps = React.ComponentProps<typeof AvatarPrimitive.Root> & {\n size?: \"default\" | \"sm\" | \"lg\";\n};\ntype AvatarFallbackProps = React.ComponentProps<typeof AvatarPrimitive.Fallback>;\ntype AvatarImageProps = React.ComponentProps<typeof AvatarPrimitive.Image>;\n\ntype Props = {\n initials?: {\n text?: string;\n className?: string;\n };\n hasBadge?: boolean;\n avatar?: AvatarProps;\n fallback?: AvatarFallbackProps;\n image?: AvatarImageProps;\n showDeleteOnHover?: boolean;\n icon?: IconProps;\n onClick?: (e: React.MouseEvent<HTMLDivElement>) => void;\n};\n\nconst getInitials = (fullName: string): string => {\n const normalizedName = fullName.trim();\n\n if (!normalizedName) {\n return \"\";\n }\n\n const [firstName = \"\", lastName = \"\"] = normalizedName.split(/\\s+/);\n\n if (firstName && lastName) {\n return `${firstName[0].toUpperCase()}${lastName[0].toUpperCase()}`;\n }\n\n if (normalizedName.length <= 2) {\n return normalizedName.toUpperCase();\n }\n\n return firstName[0].toUpperCase();\n};\n\nexport const BasicAvatar = ({\n initials,\n avatar,\n fallback,\n image,\n icon,\n showDeleteOnHover = true,\n onClick = () => {},\n}: Props) => {\n const content = (\n <Avatar\n {...avatar}\n className={cn(\"h-18 w-18\", avatar?.className)}\n >\n <AvatarImage\n {...image}\n alt=\"avatar\"\n className={cn(\"h-full w-full border-0\", image?.className)}\n />\n <AvatarFallback {...fallback}>\n <Typography\n variant=\"body-xxl-medium\"\n className={cn(\"text-info-new-text\", initials?.className)}\n >\n {getInitials(initials?.text ?? \"\")}\n </Typography>\n </AvatarFallback>\n </Avatar>\n );\n\n if (!showDeleteOnHover) {\n return content;\n }\n\n return (\n <div className=\"relative inline-block\">\n {content}\n <div\n className=\"text-primary-bg bg-primary-inverse-bg/50 absolute inset-0 flex\n cursor-pointer items-center justify-center rounded-full opacity-0\n transition-opacity hover:opacity-100\"\n onClick={(e) => e.stopPropagation()}\n >\n <Icon\n {...icon}\n type=\"x\"\n onClick={onClick}\n />\n </div>\n </div>\n );\n};\n\nexport type {\n AvatarFallbackProps,\n AvatarImageProps,\n AvatarProps,\n Props as BasicAvatarProps,\n};\n","import {\n BasicAvatar,\n cn,\n ConfigurableDropdownMenu,\n Icon,\n Typography,\n usePopupControls,\n type ApprovalLogItem,\n type DropdownMenuConfigItem,\n type DropdownMenuConfigNode,\n} from \"@/index\";\nimport { memo, useCallback, type PointerEvent } from \"react\";\n\ntype Props = {\n item: ApprovalLogItem;\n isSelected: boolean;\n isEditing: boolean;\n isSelectMode: boolean;\n onAction: (id: string, action: DropdownMenuConfigItem) => void;\n getBadge: (type: string) => {\n bg: string;\n color: string;\n };\n};\n\nconst NOTE_ACTIONS: DropdownMenuConfigNode[] = [\n { id: \"select\", label: \"Выбрать\", iconType: \"check-circle\" },\n { id: \"edit\", label: \"Редактировать\", iconType: \"pencil-simple\" },\n { id: \"delete\", label: \"Удалить\", iconType: \"trash\", alert: true },\n];\n\nconst NOTE_MENU_CONTENT_PROPS = {\n align: \"end\",\n side: \"bottom\",\n sideOffset: -72,\n} as const;\n\nexport const ApprovalLogView = memo(\n ({ item, isSelected, isEditing, isSelectMode, onAction, getBadge }: Props) => {\n const { isOpened, openPopup, closePopup } = usePopupControls();\n\n const handleAction = useCallback(\n (action: DropdownMenuConfigItem) => {\n if (!item.id) {\n return;\n }\n\n onAction(item.id, action);\n },\n [item.id, onAction],\n );\n\n const handleTriggerPointerDown = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n if (event.pointerType === \"mouse\" && event.button === 0) {\n event.preventDefault();\n }\n },\n [],\n );\n\n const handleTriggerClick = useCallback(() => {\n if (!item.id) {\n return;\n }\n\n if (isSelectMode) {\n handleAction({ id: \"select\", label: \"Выбрать\" });\n return;\n }\n\n openPopup();\n }, [handleAction, isSelectMode, item.id, openPopup]);\n\n const handleOpenChange = useCallback(\n (open: boolean) => {\n if (open) {\n openPopup();\n return;\n }\n\n closePopup();\n },\n [closePopup, openPopup],\n );\n\n return (\n <ConfigurableDropdownMenu\n items={NOTE_ACTIONS}\n onAction={handleAction}\n contentProps={NOTE_MENU_CONTENT_PROPS}\n open={isOpened}\n onOpenChange={handleOpenChange}\n trigger={\n <div\n onPointerDown={handleTriggerPointerDown}\n onClick={handleTriggerClick}\n className={cn(\n `flex cursor-pointer flex-col gap-2.5 px-4 py-3\n shadow-[0_-2px_4px_0_rgba(0,0,0,0.05)]`,\n isSelected && \"bg-negotiation-bg\",\n isEditing && \"bg-confidence-bg\",\n )}\n >\n <div className=\"flex gap-3\">\n <div className=\"w-fit\">\n <BasicAvatar\n initials={{\n text: item.userName,\n className: \"text-primary-text\",\n }}\n avatar={{\n className: \"h-12 w-12\",\n }}\n showDeleteOnHover={false}\n />\n\n <Typography\n variant=\"body-xxs-medium\"\n className=\"text-secondary-text text-center\"\n >\n {item.dateShort}\n </Typography>\n </div>\n\n <div className=\"flex w-full flex-col gap-2.5\">\n <div className=\"flex w-full items-center justify-between\">\n <Typography\n variant=\"body-md-medium\"\n className=\"text-primary-text\"\n >\n {item.userName}\n </Typography>\n\n <Icon\n type=\"check-circle\"\n className=\"text-sub-label-text\"\n />\n </div>\n <Typography\n variant=\"body-sm-regular\"\n className=\"text-primary-text\"\n >\n {item.message}\n </Typography>\n {item.imageUrl && (\n <img\n src={item.imageUrl}\n alt=\"Вложенное изображение\"\n className=\"max-h-65 w-full rounded-lg object-contain\"\n />\n )}\n </div>\n </div>\n <div className=\"flex gap-3 px-4\">\n {item.tags.map((tag) => {\n const badge = getBadge(tag);\n return (\n <div\n key={tag}\n className={cn(\n \"flex items-center gap-1.25 rounded-lg border px-3 py-1\",\n badge.bg,\n badge.color,\n )}\n >\n <Typography variant=\"body-xxs-medium\">{tag}</Typography>\n\n <Icon\n type=\"check-circle\"\n size={15}\n strokeWidth={1.25}\n />\n </div>\n );\n })}\n </div>\n </div>\n }\n />\n );\n },\n);\n\nApprovalLogView.displayName = \"ApprovalLogRow\";\n"],"names":["getInitials","fullName","normalizedName","firstName","lastName","BasicAvatar","initials","avatar","fallback","image","icon","showDeleteOnHover","onClick","content","jsxs","Avatar","cn","jsx","AvatarImage","AvatarFallback","Typography","e","Icon","NOTE_ACTIONS","NOTE_MENU_CONTENT_PROPS","ApprovalLogView","memo","item","isSelected","isEditing","isSelectMode","onAction","getBadge","isOpened","openPopup","closePopup","usePopupControls","handleAction","useCallback","action","handleTriggerPointerDown","event","handleTriggerClick","handleOpenChange","open","ConfigurableDropdownMenu","tag","badge"],"mappings":"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"}
|