@solostylist/ui-kit 1.0.99 → 1.0.100
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/main.d.ts +2 -0
- package/dist/main.js +41 -39
- package/dist/s-accordion/s-accordion.js +20 -19
- package/dist/s-chat-input/s-chat-input.js +33 -31
- package/dist/s-chat-message/s-chat-message.js +32 -31
- package/dist/s-file-dropzone/s-file-dropzone.js +42 -39
- package/dist/s-review/index.d.ts +2 -0
- package/dist/s-review/index.js +4 -0
- package/dist/s-review/package.json +5 -0
- package/dist/s-review/s-review.d.ts +20 -0
- package/dist/s-review/s-review.js +86 -0
- package/package.json +1 -1
package/dist/main.d.ts
CHANGED
|
@@ -97,6 +97,8 @@ export { default as SRadialPulseAnimate } from './s-radial-pulse-animate/index';
|
|
|
97
97
|
export type { SRadialPulseAnimateProps } from './s-radial-pulse-animate/index';
|
|
98
98
|
export { default as SRating } from './s-rating/index';
|
|
99
99
|
export type { SRatingProps } from './s-rating/index';
|
|
100
|
+
export { default as SReview } from './s-review/index';
|
|
101
|
+
export type { SReviewProps } from './s-review/index';
|
|
100
102
|
export { STabs, STab, STabPanel } from './s-tabs/index';
|
|
101
103
|
export type { STabsProps, STabItem, STabProps, STabPanelProps } from './s-tabs/index';
|
|
102
104
|
export { default as STextShimmer } from './s-text-shimmer/index';
|
package/dist/main.js
CHANGED
|
@@ -8,14 +8,14 @@ import { default as n } from "./s-chat-input/s-chat-input.js";
|
|
|
8
8
|
import { default as c } from "./s-chat-message/s-chat-message.js";
|
|
9
9
|
import { default as C } from "./s-text-editor/s-text-editor.js";
|
|
10
10
|
import "./s-text-editor/s-text-editor-toolbar.js";
|
|
11
|
-
import { default as
|
|
12
|
-
import { default as
|
|
11
|
+
import { default as v } from "./s-checkbox/s-checkbox.js";
|
|
12
|
+
import { default as b } from "./s-chip/s-chip.js";
|
|
13
13
|
import { default as I } from "./s-chips/s-chips.js";
|
|
14
14
|
import { default as L } from "./s-data-table/s-data-table.js";
|
|
15
15
|
import { DialogConfirmProvider as y, default as F, useDialogConfirm as B } from "./s-dialog-confirm/s-dialog-confirm.js";
|
|
16
16
|
import { DialogMessageProvider as A, default as E, useDialogMessage as G } from "./s-dialog-message/s-dialog-message.js";
|
|
17
|
-
import { default as
|
|
18
|
-
import { default as
|
|
17
|
+
import { default as w } from "./s-error/s-error.js";
|
|
18
|
+
import { default as j } from "./s-empty/s-empty.js";
|
|
19
19
|
import { default as V } from "./s-dialog/s-dialog.js";
|
|
20
20
|
import { default as H } from "./s-file-dropzone/s-file-dropzone.js";
|
|
21
21
|
import { default as O } from "./s-file-icon/s-file-icon.js";
|
|
@@ -32,14 +32,14 @@ import { default as Se } from "./s-tip/s-tip.js";
|
|
|
32
32
|
import { default as ue } from "./s-text-truncation/s-text-truncation.js";
|
|
33
33
|
import { default as ne, SnackbarMessageProvider as ge, useSnackbarMessage as ce } from "./s-snackbar-message/s-snackbar-message.js";
|
|
34
34
|
import { default as Ce } from "./s-form/s-form.js";
|
|
35
|
-
import { SSmartTextField as
|
|
36
|
-
import { SCopilotKitProvider as
|
|
35
|
+
import { SSmartTextField as ve } from "./s-smart-text-field/s-smart-text-field.js";
|
|
36
|
+
import { SCopilotKitProvider as be } from "./s-copilot-kit-provider/s-copilot-kit-provider.js";
|
|
37
37
|
import { SStripeCVC as Ie, SStripeExpiry as ke, SStripeNumber as Le, StripeTextField as he } from "./s-stripe/s-stripe.js";
|
|
38
38
|
import { default as Fe } from "./s-theme-provider/s-theme-provider.js";
|
|
39
39
|
import { default as ze } from "./s-datetime-picker/s-datetime-picker.js";
|
|
40
40
|
import { default as Ee } from "./s-date-picker/s-date-picker.js";
|
|
41
|
-
import { default as
|
|
42
|
-
import { default as
|
|
41
|
+
import { default as Re } from "./s-localization-provider/s-localization-provider.js";
|
|
42
|
+
import { default as Ne } from "./s-gradient-icon/s-gradient-icon.js";
|
|
43
43
|
import { default as Ke } from "./s-glow-button/s-glow-button.js";
|
|
44
44
|
import { default as qe } from "./s-moving-border/s-moving-border.js";
|
|
45
45
|
import { default as Je } from "./s-copyable-text/s-copyable-text.js";
|
|
@@ -49,21 +49,22 @@ import { default as Ze } from "./s-lazy-image/s-lazy-image.js";
|
|
|
49
49
|
import { default as $e } from "./s-image-comparison/s-image-comparison.js";
|
|
50
50
|
import { default as oo } from "./s-radial-pulse-animate/s-radial-pulse-animate.js";
|
|
51
51
|
import { default as ao } from "./s-rating/s-rating.js";
|
|
52
|
-
import { default as fo } from "./s-
|
|
53
|
-
import { default as mo } from "./s-tabs/s-
|
|
54
|
-
import { default as po } from "./s-tabs/s-tab
|
|
55
|
-
import { default as xo } from "./s-
|
|
56
|
-
import {
|
|
57
|
-
import {
|
|
58
|
-
import {
|
|
59
|
-
import {
|
|
60
|
-
import {
|
|
61
|
-
import {
|
|
52
|
+
import { default as fo } from "./s-review/s-review.js";
|
|
53
|
+
import { default as mo } from "./s-tabs/s-tabs.js";
|
|
54
|
+
import { default as po } from "./s-tabs/s-tab.js";
|
|
55
|
+
import { default as xo } from "./s-tabs/s-tab-panel.js";
|
|
56
|
+
import { default as io } from "./s-text-shimmer/s-text-shimmer.js";
|
|
57
|
+
import { useDialog as go } from "./hooks/use-dialog.js";
|
|
58
|
+
import { usePopover as To } from "./hooks/use-popover.js";
|
|
59
|
+
import { formatDatePosted as Po } from "./utils/dayjs.js";
|
|
60
|
+
import { bytesToSize as Do } from "./utils/bytes-to-size.js";
|
|
61
|
+
import { LogLevel as Mo, Logger as Io, createLogger as ko, logger as Lo } from "./utils/logger.js";
|
|
62
|
+
import { default as yo } from "dayjs";
|
|
62
63
|
export {
|
|
63
64
|
y as DialogConfirmProvider,
|
|
64
65
|
A as DialogMessageProvider,
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
Mo as LogLevel,
|
|
67
|
+
Io as Logger,
|
|
67
68
|
Qe as MediaItem,
|
|
68
69
|
a as SAccordion,
|
|
69
70
|
f as SAutocomplete,
|
|
@@ -73,10 +74,10 @@ export {
|
|
|
73
74
|
u as SCarousel,
|
|
74
75
|
n as SChatInput,
|
|
75
76
|
c as SChatMessage,
|
|
76
|
-
|
|
77
|
-
|
|
77
|
+
v as SCheckbox,
|
|
78
|
+
b as SChip,
|
|
78
79
|
I as SChips,
|
|
79
|
-
|
|
80
|
+
be as SCopilotKitProvider,
|
|
80
81
|
Je as SCopyableText,
|
|
81
82
|
L as SDataTable,
|
|
82
83
|
Ee as SDatePicker,
|
|
@@ -84,13 +85,13 @@ export {
|
|
|
84
85
|
V as SDialog,
|
|
85
86
|
F as SDialogConfirm,
|
|
86
87
|
E as SDialogMessage,
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
j as SEmpty,
|
|
89
|
+
w as SError,
|
|
89
90
|
H as SFileDropzone,
|
|
90
91
|
O as SFileIcon,
|
|
91
92
|
Ce as SForm,
|
|
92
93
|
Ke as SGlowButton,
|
|
93
|
-
|
|
94
|
+
Ne as SGradientIcon,
|
|
94
95
|
U as SI18nProvider,
|
|
95
96
|
X as SIconButton,
|
|
96
97
|
$e as SImageComparison,
|
|
@@ -98,39 +99,40 @@ export {
|
|
|
98
99
|
Ue as SInteractiveGallery,
|
|
99
100
|
Z as SLabel,
|
|
100
101
|
Ze as SLazyImage,
|
|
101
|
-
|
|
102
|
+
Re as SLocalizationProvider,
|
|
102
103
|
qe as SMovingBorder,
|
|
103
104
|
$ as SMultiSelect,
|
|
104
105
|
oe as SNoSsr,
|
|
105
106
|
fe as SPagination,
|
|
106
107
|
oo as SRadialPulseAnimate,
|
|
107
108
|
ao as SRating,
|
|
109
|
+
fo as SReview,
|
|
108
110
|
me as SSelect,
|
|
109
111
|
pe as SSkeleton,
|
|
110
|
-
|
|
112
|
+
ve as SSmartTextField,
|
|
111
113
|
ne as SSnackbarMessage,
|
|
112
114
|
Ie as SStripeCVC,
|
|
113
115
|
ke as SStripeExpiry,
|
|
114
116
|
Le as SStripeNumber,
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
117
|
+
po as STab,
|
|
118
|
+
xo as STabPanel,
|
|
119
|
+
mo as STabs,
|
|
118
120
|
C as STextEditor,
|
|
119
121
|
ae as STextField,
|
|
120
|
-
|
|
122
|
+
io as STextShimmer,
|
|
121
123
|
ue as STextTruncation,
|
|
122
124
|
Fe as SThemeProvider,
|
|
123
125
|
Se as STip,
|
|
124
126
|
ge as SnackbarMessageProvider,
|
|
125
127
|
he as StripeTextField,
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
128
|
+
Do as bytesToSize,
|
|
129
|
+
ko as createLogger,
|
|
130
|
+
yo as dayjs,
|
|
131
|
+
Po as formatDatePosted,
|
|
132
|
+
Lo as logger,
|
|
133
|
+
go as useDialog,
|
|
132
134
|
B as useDialogConfirm,
|
|
133
135
|
G as useDialogMessage,
|
|
134
|
-
|
|
136
|
+
To as usePopover,
|
|
135
137
|
ce as useSnackbarMessage
|
|
136
138
|
};
|
|
@@ -7,7 +7,7 @@ import { g as X } from "../generateUtilityClasses-BtVDwGrk.js";
|
|
|
7
7
|
import { g as Y } from "../colorManipulator-ep5lERxB.js";
|
|
8
8
|
import { u as So } from "../useControlled-nm4pBabJ.js";
|
|
9
9
|
import { s as T } from "../styled-DOEEZAON.js";
|
|
10
|
-
import { T as
|
|
10
|
+
import { T as Eo, u as vo, g as ro, P as wo } from "../Paper-DEq2MLtq.js";
|
|
11
11
|
import { S as Ro } from "../Stack-GTpsqQv0.js";
|
|
12
12
|
import { T as Ao } from "../Typography-zQXZ4jKl.js";
|
|
13
13
|
const jo = mo(/* @__PURE__ */ s.jsx("path", {
|
|
@@ -118,7 +118,7 @@ const No = (e) => {
|
|
|
118
118
|
collapsedSize: f = "0px",
|
|
119
119
|
component: S,
|
|
120
120
|
easing: $,
|
|
121
|
-
in:
|
|
121
|
+
in: E,
|
|
122
122
|
onEnter: A,
|
|
123
123
|
onEntered: j,
|
|
124
124
|
onEntering: z,
|
|
@@ -129,13 +129,13 @@ const No = (e) => {
|
|
|
129
129
|
style: m,
|
|
130
130
|
timeout: d = go.standard,
|
|
131
131
|
// eslint-disable-next-line react/prop-types
|
|
132
|
-
TransitionComponent: N =
|
|
132
|
+
TransitionComponent: N = Eo,
|
|
133
133
|
...G
|
|
134
|
-
} = i,
|
|
134
|
+
} = i, v = {
|
|
135
135
|
...i,
|
|
136
136
|
orientation: c,
|
|
137
137
|
collapsedSize: f
|
|
138
|
-
}, u = No(
|
|
138
|
+
}, u = No(v), w = vo(), U = xo(), a = l.useRef(null), g = l.useRef(), C = typeof f == "number" ? `${f}px` : f, O = c === "horizontal", M = O ? "width" : "height", k = l.useRef(null), Z = ho(r, k), R = (n) => (y) => {
|
|
139
139
|
if (n) {
|
|
140
140
|
const x = k.current;
|
|
141
141
|
y === void 0 ? n(x) : n(x, y);
|
|
@@ -186,7 +186,7 @@ const No = (e) => {
|
|
|
186
186
|
d === "auto" && U.start(g.current || 0, n), p && p(k.current, n);
|
|
187
187
|
};
|
|
188
188
|
return /* @__PURE__ */ s.jsx(N, {
|
|
189
|
-
in:
|
|
189
|
+
in: E,
|
|
190
190
|
onEnter: oo,
|
|
191
191
|
onEntered: co,
|
|
192
192
|
onEntering: eo,
|
|
@@ -204,7 +204,7 @@ const No = (e) => {
|
|
|
204
204
|
as: S,
|
|
205
205
|
className: L(u.root, b, {
|
|
206
206
|
entered: u.entered,
|
|
207
|
-
exited: !
|
|
207
|
+
exited: !E && C === "0px" && u.hidden
|
|
208
208
|
}[n]),
|
|
209
209
|
style: {
|
|
210
210
|
[O ? "minWidth" : "minHeight"]: C,
|
|
@@ -212,20 +212,20 @@ const No = (e) => {
|
|
|
212
212
|
},
|
|
213
213
|
ref: Z,
|
|
214
214
|
ownerState: {
|
|
215
|
-
...
|
|
215
|
+
...v,
|
|
216
216
|
state: n
|
|
217
217
|
},
|
|
218
218
|
...x,
|
|
219
219
|
children: /* @__PURE__ */ s.jsx(Mo, {
|
|
220
220
|
ownerState: {
|
|
221
|
-
...
|
|
221
|
+
...v,
|
|
222
222
|
state: n
|
|
223
223
|
},
|
|
224
224
|
className: u.wrapper,
|
|
225
225
|
ref: a,
|
|
226
226
|
children: /* @__PURE__ */ s.jsx(Io, {
|
|
227
227
|
ownerState: {
|
|
228
|
-
...
|
|
228
|
+
...v,
|
|
229
229
|
state: n
|
|
230
230
|
},
|
|
231
231
|
className: u.wrapperInner,
|
|
@@ -455,7 +455,7 @@ const _ = X("MuiAccordion", ["root", "heading", "rounded", "expanded", "disabled
|
|
|
455
455
|
disabled: f = !1,
|
|
456
456
|
disableGutters: S = !1,
|
|
457
457
|
expanded: $,
|
|
458
|
-
onChange:
|
|
458
|
+
onChange: E,
|
|
459
459
|
square: A = !1,
|
|
460
460
|
slots: j = {},
|
|
461
461
|
slotProps: z = {},
|
|
@@ -468,8 +468,8 @@ const _ = X("MuiAccordion", ["root", "heading", "rounded", "expanded", "disabled
|
|
|
468
468
|
name: "Accordion",
|
|
469
469
|
state: "expanded"
|
|
470
470
|
}), d = l.useCallback((eo) => {
|
|
471
|
-
m(!c),
|
|
472
|
-
}, [c,
|
|
471
|
+
m(!c), E && E(eo, !c);
|
|
472
|
+
}, [c, E, m]), [N, ...G] = l.Children.toArray(p), v = l.useMemo(() => ({
|
|
473
473
|
expanded: c,
|
|
474
474
|
disabled: f,
|
|
475
475
|
disableGutters: S,
|
|
@@ -527,7 +527,7 @@ const _ = X("MuiAccordion", ["root", "heading", "rounded", "expanded", "disabled
|
|
|
527
527
|
children: [/* @__PURE__ */ s.jsx(M, {
|
|
528
528
|
...k,
|
|
529
529
|
children: /* @__PURE__ */ s.jsx(to.Provider, {
|
|
530
|
-
value:
|
|
530
|
+
value: v,
|
|
531
531
|
children: N
|
|
532
532
|
})
|
|
533
533
|
}), /* @__PURE__ */ s.jsx(Z, {
|
|
@@ -781,7 +781,7 @@ const F = X("MuiAccordionSummary", ["root", "expanded", "focusVisible", "disable
|
|
|
781
781
|
focusVisibleClassName: f,
|
|
782
782
|
onClick: S,
|
|
783
783
|
slots: $,
|
|
784
|
-
slotProps:
|
|
784
|
+
slotProps: E,
|
|
785
785
|
...A
|
|
786
786
|
} = i, {
|
|
787
787
|
disabled: j = !1,
|
|
@@ -797,7 +797,7 @@ const F = X("MuiAccordionSummary", ["root", "expanded", "focusVisible", "disable
|
|
|
797
797
|
disableGutters: z
|
|
798
798
|
}, m = Ho(c), d = {
|
|
799
799
|
slots: $,
|
|
800
|
-
slotProps:
|
|
800
|
+
slotProps: E
|
|
801
801
|
}, [N, G] = I("root", {
|
|
802
802
|
ref: r,
|
|
803
803
|
shouldForwardComponentProp: !0,
|
|
@@ -822,7 +822,7 @@ const F = X("MuiAccordionSummary", ["root", "expanded", "focusVisible", "disable
|
|
|
822
822
|
(C = a.onClick) == null || C.call(a, g), V(g);
|
|
823
823
|
}
|
|
824
824
|
})
|
|
825
|
-
}), [
|
|
825
|
+
}), [v, u] = I("content", {
|
|
826
826
|
className: m.content,
|
|
827
827
|
elementType: Lo,
|
|
828
828
|
externalForwardedProps: d,
|
|
@@ -835,7 +835,7 @@ const F = X("MuiAccordionSummary", ["root", "expanded", "focusVisible", "disable
|
|
|
835
835
|
});
|
|
836
836
|
return /* @__PURE__ */ s.jsxs(N, {
|
|
837
837
|
...G,
|
|
838
|
-
children: [/* @__PURE__ */ s.jsx(
|
|
838
|
+
children: [/* @__PURE__ */ s.jsx(v, {
|
|
839
839
|
...u,
|
|
840
840
|
children: p
|
|
841
841
|
}), b && /* @__PURE__ */ s.jsx(w, {
|
|
@@ -907,7 +907,8 @@ const re = ({ title: e, children: t, startIcon: r, defaultExpanded: i = !1 }) =>
|
|
|
907
907
|
defaultExpanded: i,
|
|
908
908
|
sx: {
|
|
909
909
|
borderRadius: 1,
|
|
910
|
-
border: "1px solid
|
|
910
|
+
border: "1px solid",
|
|
911
|
+
borderColor: "divider"
|
|
911
912
|
},
|
|
912
913
|
elevation: 0,
|
|
913
914
|
children: [
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
import { j as r } from "../jsx-runtime-DywqP_6a.js";
|
|
2
2
|
import { forwardRef as F, useState as c, useRef as K, useId as O, useEffect as B } from "react";
|
|
3
|
-
import { Box as
|
|
3
|
+
import { Box as t, outlinedInputClasses as T, Popper as W, ClickAwayListener as D } from "@mui/material";
|
|
4
4
|
import H from "emoji-picker-react";
|
|
5
5
|
import _ from "../s-file-icon/s-file-icon.js";
|
|
6
6
|
import d from "../s-icon-button/s-icon-button.js";
|
|
7
7
|
import q from "../s-text-field/s-text-field.js";
|
|
8
8
|
import { C as G } from "../Close-BSG2-e7H.js";
|
|
9
|
-
import { b as
|
|
10
|
-
const J =
|
|
9
|
+
import { b as k } from "../createSvgIcon-CS-Z7P80.js";
|
|
10
|
+
const J = k(/* @__PURE__ */ r.jsx("path", {
|
|
11
11
|
d: "m4 12 1.41 1.41L11 7.83V20h2V7.83l5.58 5.59L20 12l-8-8z"
|
|
12
|
-
}), "ArrowUpward"), N =
|
|
12
|
+
}), "ArrowUpward"), N = k(/* @__PURE__ */ r.jsx("path", {
|
|
13
13
|
d: "M16.5 6v11.5c0 2.21-1.79 4-4 4s-4-1.79-4-4V5c0-1.38 1.12-2.5 2.5-2.5s2.5 1.12 2.5 2.5v10.5c0 .55-.45 1-1 1s-1-.45-1-1V6H10v9.5c0 1.38 1.12 2.5 2.5 2.5s2.5-1.12 2.5-2.5V5c0-2.21-1.79-4-4-4S7 2.79 7 5v12.5c0 3.04 2.46 5.5 5.5 5.5s5.5-2.46 5.5-5.5V6z"
|
|
14
|
-
}), "AttachFile"), Q =
|
|
14
|
+
}), "AttachFile"), Q = k(/* @__PURE__ */ r.jsx("path", {
|
|
15
15
|
d: "M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2M8.5 8c.83 0 1.5.67 1.5 1.5S9.33 11 8.5 11 7 10.33 7 9.5 7.67 8 8.5 8M12 18c-2.28 0-4.22-1.66-5-4h10c-.78 2.34-2.72 4-5 4m3.5-7c-.83 0-1.5-.67-1.5-1.5S14.67 8 15.5 8s1.5.67 1.5 1.5-.67 1.5-1.5 1.5"
|
|
16
16
|
}), "EmojiEmotions"), ae = F(
|
|
17
|
-
({ onSubmit: p, onFileSelect: m, disabled: a, acceptedFileTypes: E, maxFileSize:
|
|
18
|
-
const [u, h] = c(""), [l, x] = c([]), [i, f] = c(/* @__PURE__ */ new Map()), [
|
|
17
|
+
({ onSubmit: p, onFileSelect: m, disabled: a, acceptedFileTypes: E, maxFileSize: C, ...z }, M) => {
|
|
18
|
+
const [u, h] = c(""), [l, x] = c([]), [i, f] = c(/* @__PURE__ */ new Map()), [v, g] = c(!1), y = K(null), w = O(), b = (e) => e.type.startsWith("image/"), U = (e) => {
|
|
19
19
|
const o = `${e.name}-${e.size}-${e.lastModified}`;
|
|
20
20
|
if (i.has(o))
|
|
21
21
|
return i.get(o);
|
|
22
22
|
if (b(e)) {
|
|
23
23
|
const n = URL.createObjectURL(e);
|
|
24
|
-
return f((
|
|
24
|
+
return f((s) => new Map(s).set(o, n)), n;
|
|
25
25
|
}
|
|
26
26
|
return "";
|
|
27
27
|
}, L = (e) => {
|
|
@@ -29,28 +29,28 @@ const J = v(/* @__PURE__ */ r.jsx("path", {
|
|
|
29
29
|
}, $ = (e) => {
|
|
30
30
|
h((o) => o + e.emoji), g(!1);
|
|
31
31
|
}, P = () => {
|
|
32
|
-
g(!
|
|
32
|
+
g(!v);
|
|
33
33
|
}, R = () => {
|
|
34
34
|
a || u.trim().length === 0 && l.length === 0 || (p == null || p(u, l), h(""), i.forEach((e) => URL.revokeObjectURL(e)), f(/* @__PURE__ */ new Map()), x([]));
|
|
35
35
|
}, S = (e) => {
|
|
36
|
-
const n = Array.from(e.target.files || []).filter((
|
|
37
|
-
x((
|
|
36
|
+
const n = Array.from(e.target.files || []).filter((s) => !(C && s.size > C));
|
|
37
|
+
x((s) => [...s, ...n]), m == null || m(n), e.target.value = "";
|
|
38
38
|
}, V = (e) => {
|
|
39
39
|
const o = l[e];
|
|
40
40
|
if (o && b(o)) {
|
|
41
|
-
const n = `${o.name}-${o.size}-${o.lastModified}`,
|
|
42
|
-
|
|
41
|
+
const n = `${o.name}-${o.size}-${o.lastModified}`, s = i.get(n);
|
|
42
|
+
s && (URL.revokeObjectURL(s), f((j) => {
|
|
43
43
|
const I = new Map(j);
|
|
44
44
|
return I.delete(n), I;
|
|
45
45
|
}));
|
|
46
46
|
}
|
|
47
|
-
x((n) => n.filter((
|
|
47
|
+
x((n) => n.filter((s, j) => j !== e));
|
|
48
48
|
}, A = (e) => {
|
|
49
49
|
e.key === "Enter" && !e.shiftKey && (e.preventDefault(), R());
|
|
50
50
|
};
|
|
51
51
|
return B(() => () => {
|
|
52
52
|
i.forEach((e) => URL.revokeObjectURL(e));
|
|
53
|
-
}, [i]), /* @__PURE__ */ r.jsxs(
|
|
53
|
+
}, [i]), /* @__PURE__ */ r.jsxs(t, { border: "1px solid", borderColor: "divider", borderRadius: 2, padding: "8px 12px", children: [
|
|
54
54
|
/* @__PURE__ */ r.jsx(
|
|
55
55
|
q,
|
|
56
56
|
{
|
|
@@ -91,25 +91,26 @@ const J = v(/* @__PURE__ */ r.jsx("path", {
|
|
|
91
91
|
...z
|
|
92
92
|
}
|
|
93
93
|
),
|
|
94
|
-
l.length > 0 && /* @__PURE__ */ r.jsx(
|
|
95
|
-
const n = b(e),
|
|
94
|
+
l.length > 0 && /* @__PURE__ */ r.jsx(t, { mt: 1, children: l.map((e, o) => {
|
|
95
|
+
const n = b(e), s = e.name.split(".").pop();
|
|
96
96
|
return /* @__PURE__ */ r.jsxs(
|
|
97
|
-
|
|
97
|
+
t,
|
|
98
98
|
{
|
|
99
99
|
display: "flex",
|
|
100
100
|
alignItems: "center",
|
|
101
101
|
justifyContent: "space-between",
|
|
102
102
|
sx: {
|
|
103
|
-
bgcolor: "
|
|
104
|
-
border: "1px solid
|
|
103
|
+
bgcolor: "background.paper",
|
|
104
|
+
border: "1px solid",
|
|
105
|
+
borderColor: "divider",
|
|
105
106
|
borderRadius: 1,
|
|
106
107
|
p: 1,
|
|
107
108
|
mb: 0.5
|
|
108
109
|
},
|
|
109
110
|
children: [
|
|
110
|
-
/* @__PURE__ */ r.jsxs(
|
|
111
|
+
/* @__PURE__ */ r.jsxs(t, { display: "flex", alignItems: "center", gap: 1, children: [
|
|
111
112
|
n ? /* @__PURE__ */ r.jsx(
|
|
112
|
-
|
|
113
|
+
t,
|
|
113
114
|
{
|
|
114
115
|
component: "img",
|
|
115
116
|
src: U(e),
|
|
@@ -119,13 +120,14 @@ const J = v(/* @__PURE__ */ r.jsx("path", {
|
|
|
119
120
|
height: 40,
|
|
120
121
|
borderRadius: 1,
|
|
121
122
|
objectFit: "cover",
|
|
122
|
-
border: "1px solid
|
|
123
|
+
border: "1px solid",
|
|
124
|
+
borderColor: "divider"
|
|
123
125
|
}
|
|
124
126
|
}
|
|
125
|
-
) : /* @__PURE__ */ r.jsx(_, { extension:
|
|
126
|
-
/* @__PURE__ */ r.jsxs(
|
|
127
|
-
/* @__PURE__ */ r.jsx(
|
|
128
|
-
/* @__PURE__ */ r.jsxs(
|
|
127
|
+
) : /* @__PURE__ */ r.jsx(_, { extension: s }),
|
|
128
|
+
/* @__PURE__ */ r.jsxs(t, { children: [
|
|
129
|
+
/* @__PURE__ */ r.jsx(t, { component: "span", sx: { fontSize: "0.875rem", fontWeight: 500 }, children: e.name }),
|
|
130
|
+
/* @__PURE__ */ r.jsxs(t, { component: "span", sx: { fontSize: "0.75rem", color: "text.secondary", ml: 1 }, children: [
|
|
129
131
|
"(",
|
|
130
132
|
Math.round(e.size / 1024),
|
|
131
133
|
" KB)"
|
|
@@ -138,8 +140,8 @@ const J = v(/* @__PURE__ */ r.jsx("path", {
|
|
|
138
140
|
`${e.name}-${o}`
|
|
139
141
|
);
|
|
140
142
|
}) }),
|
|
141
|
-
/* @__PURE__ */ r.jsxs(
|
|
142
|
-
/* @__PURE__ */ r.jsxs(
|
|
143
|
+
/* @__PURE__ */ r.jsxs(t, { display: "flex", justifyContent: "space-between", alignItems: "center", mt: 1, children: [
|
|
144
|
+
/* @__PURE__ */ r.jsxs(t, { display: "flex", gap: 1, children: [
|
|
143
145
|
/* @__PURE__ */ r.jsx(
|
|
144
146
|
"input",
|
|
145
147
|
{
|
|
@@ -200,8 +202,8 @@ const J = v(/* @__PURE__ */ r.jsx("path", {
|
|
|
200
202
|
}
|
|
201
203
|
)
|
|
202
204
|
] }),
|
|
203
|
-
/* @__PURE__ */ r.jsx(W, { open:
|
|
204
|
-
|
|
205
|
+
/* @__PURE__ */ r.jsx(W, { open: v, anchorEl: y.current, placement: "top-start", sx: { zIndex: 1300 }, children: /* @__PURE__ */ r.jsx(D, { onClickAway: () => g(!1), children: /* @__PURE__ */ r.jsx(
|
|
206
|
+
t,
|
|
205
207
|
{
|
|
206
208
|
sx: {
|
|
207
209
|
border: "1px solid",
|
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
import { j as
|
|
2
|
-
import { Box as
|
|
1
|
+
import { j as e } from "../jsx-runtime-DywqP_6a.js";
|
|
2
|
+
import { Box as o, Typography as n } from "@mui/material";
|
|
3
3
|
import x from "../s-avatar/s-avatar.js";
|
|
4
4
|
const b = ({
|
|
5
5
|
message: d,
|
|
6
|
-
variant:
|
|
7
|
-
timestamp:
|
|
6
|
+
variant: c = "received",
|
|
7
|
+
timestamp: a,
|
|
8
8
|
avatar: s,
|
|
9
|
-
senderName:
|
|
9
|
+
senderName: i,
|
|
10
10
|
showAvatar: l = !0,
|
|
11
11
|
showTimestamp: m = !1,
|
|
12
|
-
maxWidth:
|
|
12
|
+
maxWidth: p = "70%",
|
|
13
13
|
sx: f,
|
|
14
14
|
...g
|
|
15
15
|
}) => {
|
|
16
|
-
const
|
|
16
|
+
const r = c === "sent", h = (t) => (typeof t == "string" ? new Date(t) : t).toLocaleTimeString("en-US", {
|
|
17
17
|
hour: "2-digit",
|
|
18
18
|
minute: "2-digit",
|
|
19
19
|
hour12: !0
|
|
20
20
|
});
|
|
21
|
-
return /* @__PURE__ */
|
|
22
|
-
|
|
21
|
+
return /* @__PURE__ */ e.jsxs(
|
|
22
|
+
o,
|
|
23
23
|
{
|
|
24
24
|
display: "flex",
|
|
25
|
-
flexDirection:
|
|
25
|
+
flexDirection: r ? "row-reverse" : "row",
|
|
26
26
|
alignItems: "flex-start",
|
|
27
27
|
gap: 1,
|
|
28
28
|
mb: 1,
|
|
29
29
|
sx: {
|
|
30
|
-
maxWidth:
|
|
31
|
-
alignSelf:
|
|
30
|
+
maxWidth: p,
|
|
31
|
+
alignSelf: r ? "flex-end" : "flex-start",
|
|
32
32
|
...f
|
|
33
33
|
},
|
|
34
34
|
...g,
|
|
35
35
|
children: [
|
|
36
|
-
l && !
|
|
37
|
-
/* @__PURE__ */
|
|
38
|
-
|
|
36
|
+
l && !r && /* @__PURE__ */ e.jsx(x, { avatar: s, name: i, size: 36 }),
|
|
37
|
+
/* @__PURE__ */ e.jsxs(
|
|
38
|
+
o,
|
|
39
39
|
{
|
|
40
40
|
display: "flex",
|
|
41
41
|
flexDirection: "column",
|
|
42
|
-
alignItems:
|
|
42
|
+
alignItems: r ? "flex-end" : "flex-start",
|
|
43
43
|
gap: 0.5,
|
|
44
44
|
sx: { minWidth: 0 },
|
|
45
45
|
children: [
|
|
46
|
-
|
|
46
|
+
i && !r && /* @__PURE__ */ e.jsx(
|
|
47
47
|
n,
|
|
48
48
|
{
|
|
49
49
|
variant: "caption",
|
|
@@ -53,11 +53,11 @@ const b = ({
|
|
|
53
53
|
fontWeight: 500,
|
|
54
54
|
ml: 0.5
|
|
55
55
|
},
|
|
56
|
-
children:
|
|
56
|
+
children: i
|
|
57
57
|
}
|
|
58
58
|
),
|
|
59
|
-
/* @__PURE__ */
|
|
60
|
-
|
|
59
|
+
/* @__PURE__ */ e.jsx(
|
|
60
|
+
o,
|
|
61
61
|
{
|
|
62
62
|
sx: {
|
|
63
63
|
display: "inline-block",
|
|
@@ -66,14 +66,15 @@ const b = ({
|
|
|
66
66
|
borderRadius: 2,
|
|
67
67
|
wordBreak: "break-word",
|
|
68
68
|
maxWidth: "100%",
|
|
69
|
-
backgroundColor:
|
|
70
|
-
color:
|
|
71
|
-
border:
|
|
72
|
-
|
|
73
|
-
|
|
69
|
+
backgroundColor: r ? "primary.main" : "",
|
|
70
|
+
color: r ? "primary.contrastText" : "text.primary",
|
|
71
|
+
border: r ? "none" : "1px solid",
|
|
72
|
+
borderColor: "divider",
|
|
73
|
+
...r && {
|
|
74
|
+
backgroundColor: "primary.dark"
|
|
74
75
|
}
|
|
75
76
|
},
|
|
76
|
-
children: /* @__PURE__ */
|
|
77
|
+
children: /* @__PURE__ */ e.jsx(
|
|
77
78
|
n,
|
|
78
79
|
{
|
|
79
80
|
variant: "body2",
|
|
@@ -87,23 +88,23 @@ const b = ({
|
|
|
87
88
|
)
|
|
88
89
|
}
|
|
89
90
|
),
|
|
90
|
-
m &&
|
|
91
|
+
m && a && /* @__PURE__ */ e.jsx(
|
|
91
92
|
n,
|
|
92
93
|
{
|
|
93
94
|
variant: "caption",
|
|
94
95
|
sx: {
|
|
95
96
|
color: "text.secondary",
|
|
96
97
|
fontSize: "0.7rem",
|
|
97
|
-
ml:
|
|
98
|
-
mr:
|
|
98
|
+
ml: r ? 0 : 0.5,
|
|
99
|
+
mr: r ? 0.5 : 0
|
|
99
100
|
},
|
|
100
|
-
children:
|
|
101
|
+
children: h(a)
|
|
101
102
|
}
|
|
102
103
|
)
|
|
103
104
|
]
|
|
104
105
|
}
|
|
105
106
|
),
|
|
106
|
-
l &&
|
|
107
|
+
l && r && /* @__PURE__ */ e.jsx(x, { avatar: s, name: i, size: 36 })
|
|
107
108
|
]
|
|
108
109
|
}
|
|
109
110
|
);
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { j as
|
|
2
|
-
import * as
|
|
1
|
+
import { j as o } from "../jsx-runtime-DywqP_6a.js";
|
|
2
|
+
import * as y from "react";
|
|
3
3
|
import { b as d } from "../createSvgIcon-CS-Z7P80.js";
|
|
4
|
-
import { Avatar as
|
|
4
|
+
import { Avatar as C, Tooltip as v, IconButton as I, Button as z } from "@mui/material";
|
|
5
5
|
import { useDropzone as S } from "react-dropzone";
|
|
6
6
|
import k from "../s-file-icon/s-file-icon.js";
|
|
7
7
|
import w from "../s-form/s-form.js";
|
|
8
8
|
import { bytesToSize as B } from "../utils/bytes-to-size.js";
|
|
9
9
|
import { B as c } from "../Box-Deehc8LF.js";
|
|
10
|
-
import { S as
|
|
11
|
-
import { T as
|
|
12
|
-
const D = d(/* @__PURE__ */
|
|
10
|
+
import { S as e } from "../Stack-GTpsqQv0.js";
|
|
11
|
+
import { T as t } from "../Typography-zQXZ4jKl.js";
|
|
12
|
+
const D = d(/* @__PURE__ */ o.jsx("path", {
|
|
13
13
|
d: "M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
|
|
14
|
-
}), "CloseOutlined"), F = d(/* @__PURE__ */
|
|
14
|
+
}), "CloseOutlined"), F = d(/* @__PURE__ */ o.jsx("path", {
|
|
15
15
|
d: "M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96M19 18H6c-2.21 0-4-1.79-4-4 0-2.05 1.53-3.76 3.56-3.97l1.07-.11.5-.95C8.08 7.14 9.94 6 12 6c2.62 0 4.88 1.86 5.39 4.43l.3 1.5 1.53.11c1.56.1 2.78 1.41 2.78 2.96 0 1.65-1.35 3-3 3M8 13h2.55v3h2.9v-3H16l-4-4z"
|
|
16
16
|
}), "CloudUploadOutlined"), J = ({
|
|
17
17
|
hint: p,
|
|
@@ -19,21 +19,22 @@ const D = d(/* @__PURE__ */ e.jsx("path", {
|
|
|
19
19
|
error: m,
|
|
20
20
|
onRemoveAll: h,
|
|
21
21
|
onUpload: M,
|
|
22
|
-
onRemove:
|
|
22
|
+
onRemove: n,
|
|
23
23
|
required: u = !1,
|
|
24
24
|
disabledUpload: O = !1,
|
|
25
25
|
isShowBtnRemoveAll: j = !1,
|
|
26
|
-
...
|
|
26
|
+
...s
|
|
27
27
|
}) => {
|
|
28
|
-
var
|
|
29
|
-
const { getRootProps: f, getInputProps: g, isDragActive: i } = S(
|
|
30
|
-
return /* @__PURE__ */
|
|
31
|
-
/* @__PURE__ */
|
|
28
|
+
var l, a;
|
|
29
|
+
const { getRootProps: f, getInputProps: g, isDragActive: i } = S(s);
|
|
30
|
+
return /* @__PURE__ */ o.jsxs(y.Fragment, { children: [
|
|
31
|
+
/* @__PURE__ */ o.jsx(w, { error: m, label: x, required: u, hint: p, children: /* @__PURE__ */ o.jsxs(
|
|
32
32
|
c,
|
|
33
33
|
{
|
|
34
34
|
sx: {
|
|
35
35
|
alignItems: "center",
|
|
36
|
-
border: "1px dashed
|
|
36
|
+
border: "1px dashed",
|
|
37
|
+
borderColor: "divider",
|
|
37
38
|
borderRadius: 1,
|
|
38
39
|
cursor: "pointer",
|
|
39
40
|
display: "flex",
|
|
@@ -43,33 +44,34 @@ const D = d(/* @__PURE__ */ e.jsx("path", {
|
|
|
43
44
|
p: 4,
|
|
44
45
|
// Visual feedback when files are being dragged over
|
|
45
46
|
...i && {
|
|
46
|
-
bgcolor: "
|
|
47
|
+
bgcolor: "action.selected",
|
|
47
48
|
opacity: 0.5
|
|
48
49
|
},
|
|
49
50
|
// Hover effect when not actively dragging
|
|
50
51
|
"&:hover": {
|
|
51
52
|
...!i && {
|
|
52
|
-
bgcolor: "
|
|
53
|
+
bgcolor: "action.hover"
|
|
53
54
|
}
|
|
54
55
|
}
|
|
55
56
|
},
|
|
56
57
|
...f(),
|
|
57
58
|
children: [
|
|
58
|
-
/* @__PURE__ */
|
|
59
|
-
/* @__PURE__ */
|
|
60
|
-
/* @__PURE__ */
|
|
61
|
-
|
|
59
|
+
/* @__PURE__ */ o.jsx("input", { ...g() }),
|
|
60
|
+
/* @__PURE__ */ o.jsxs(e, { direction: "row", spacing: 1, sx: { alignItems: "center" }, children: [
|
|
61
|
+
/* @__PURE__ */ o.jsx(
|
|
62
|
+
C,
|
|
62
63
|
{
|
|
63
64
|
sx: {
|
|
64
|
-
border: "1px dashed
|
|
65
|
-
|
|
65
|
+
border: "1px dashed",
|
|
66
|
+
borderColor: "divider",
|
|
67
|
+
color: "text.secondary",
|
|
66
68
|
backgroundColor: "transparent"
|
|
67
69
|
},
|
|
68
|
-
children: /* @__PURE__ */
|
|
70
|
+
children: /* @__PURE__ */ o.jsx(F, { fontSize: "small" })
|
|
69
71
|
}
|
|
70
72
|
),
|
|
71
|
-
/* @__PURE__ */
|
|
72
|
-
/* @__PURE__ */
|
|
73
|
+
/* @__PURE__ */ o.jsx(e, { spacing: 1, children: /* @__PURE__ */ o.jsxs(t, { color: "text.secondary", variant: "body2", children: [
|
|
74
|
+
/* @__PURE__ */ o.jsx(t, { component: "span", sx: { textDecoration: "underline" }, variant: "inherit", children: "Click to upload" }),
|
|
73
75
|
" ",
|
|
74
76
|
"or drag and drop your files here"
|
|
75
77
|
] }) })
|
|
@@ -77,35 +79,36 @@ const D = d(/* @__PURE__ */ e.jsx("path", {
|
|
|
77
79
|
]
|
|
78
80
|
}
|
|
79
81
|
) }),
|
|
80
|
-
(
|
|
81
|
-
/* @__PURE__ */
|
|
82
|
-
const
|
|
83
|
-
return /* @__PURE__ */
|
|
84
|
-
|
|
82
|
+
(l = s.files) != null && l.length ? /* @__PURE__ */ o.jsxs(e, { mt: 1, spacing: 1, children: [
|
|
83
|
+
/* @__PURE__ */ o.jsx(e, { component: "ul", spacing: 1, sx: { listStyle: "none", m: 0, p: 0 }, children: (a = s.files) == null ? void 0 : a.map((r) => {
|
|
84
|
+
const b = r.name.split(".").pop();
|
|
85
|
+
return /* @__PURE__ */ o.jsxs(
|
|
86
|
+
e,
|
|
85
87
|
{
|
|
86
88
|
component: "li",
|
|
87
89
|
direction: "row",
|
|
88
90
|
spacing: 2,
|
|
89
91
|
sx: {
|
|
90
92
|
alignItems: "center",
|
|
91
|
-
border: "1px solid
|
|
93
|
+
border: "1px solid",
|
|
94
|
+
borderColor: "divider",
|
|
92
95
|
borderRadius: 1,
|
|
93
96
|
flex: "1 1 auto",
|
|
94
97
|
p: 1
|
|
95
98
|
},
|
|
96
99
|
children: [
|
|
97
|
-
/* @__PURE__ */
|
|
98
|
-
/* @__PURE__ */
|
|
99
|
-
/* @__PURE__ */
|
|
100
|
-
/* @__PURE__ */
|
|
100
|
+
/* @__PURE__ */ o.jsx(k, { extension: b }),
|
|
101
|
+
/* @__PURE__ */ o.jsxs(c, { sx: { flex: "1 1 auto" }, children: [
|
|
102
|
+
/* @__PURE__ */ o.jsx(t, { variant: "subtitle2", children: r.name }),
|
|
103
|
+
/* @__PURE__ */ o.jsx(t, { color: "text.secondary", variant: "body2", children: B(r.size) })
|
|
101
104
|
] }),
|
|
102
|
-
/* @__PURE__ */
|
|
105
|
+
/* @__PURE__ */ o.jsx(v, { title: "Remove", children: /* @__PURE__ */ o.jsx(
|
|
103
106
|
I,
|
|
104
107
|
{
|
|
105
108
|
onClick: () => {
|
|
106
|
-
|
|
109
|
+
n == null || n(r);
|
|
107
110
|
},
|
|
108
|
-
children: /* @__PURE__ */
|
|
111
|
+
children: /* @__PURE__ */ o.jsx(D, {})
|
|
109
112
|
}
|
|
110
113
|
) })
|
|
111
114
|
]
|
|
@@ -113,7 +116,7 @@ const D = d(/* @__PURE__ */ e.jsx("path", {
|
|
|
113
116
|
r.size
|
|
114
117
|
);
|
|
115
118
|
}) }),
|
|
116
|
-
/* @__PURE__ */
|
|
119
|
+
/* @__PURE__ */ o.jsx(e, { direction: "row", sx: { alignItems: "center", justifyContent: "flex-end" }, children: j && /* @__PURE__ */ o.jsx(z, { onClick: h, size: "small", type: "button", variant: "text", children: "Remove all" }) })
|
|
117
120
|
] }) : null
|
|
118
121
|
] });
|
|
119
122
|
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { SxProps } from '@mui/material';
|
|
3
|
+
export interface SReviewProps {
|
|
4
|
+
id?: string | number;
|
|
5
|
+
userName: string;
|
|
6
|
+
userAvatar?: string;
|
|
7
|
+
rating: number;
|
|
8
|
+
reviewContent: string;
|
|
9
|
+
datetime: Date | string;
|
|
10
|
+
helpfulYes?: number;
|
|
11
|
+
helpfulNo?: number;
|
|
12
|
+
onHelpfulVote?: (reviewId: string | number, vote: 'yes' | 'no') => void;
|
|
13
|
+
showHelpfulSection?: boolean;
|
|
14
|
+
avatarSize?: number;
|
|
15
|
+
maxRating?: number;
|
|
16
|
+
readOnly?: boolean;
|
|
17
|
+
sx?: SxProps;
|
|
18
|
+
}
|
|
19
|
+
declare const SReview: React.FC<SReviewProps>;
|
|
20
|
+
export default SReview;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { j as e } from "../jsx-runtime-DywqP_6a.js";
|
|
2
|
+
import { useState as y } from "react";
|
|
3
|
+
import { Box as d, Stack as v, Typography as i, IconButton as I, Divider as $ } from "@mui/material";
|
|
4
|
+
import C from "../s-avatar/s-avatar.js";
|
|
5
|
+
import V from "../s-rating/s-rating.js";
|
|
6
|
+
import { b } from "../createSvgIcon-CS-Z7P80.js";
|
|
7
|
+
const L = b(/* @__PURE__ */ e.jsx("path", {
|
|
8
|
+
d: "M15 3H6c-.83 0-1.54.5-1.84 1.22l-3.02 7.05c-.09.23-.14.47-.14.73v2c0 1.1.9 2 2 2h6.31l-.95 4.57-.03.32c0 .41.17.79.44 1.06L9.83 23l6.59-6.59c.36-.36.58-.86.58-1.41V5c0-1.1-.9-2-2-2m4 0v12h4V3z"
|
|
9
|
+
}), "ThumbDown"), R = b(/* @__PURE__ */ e.jsx("path", {
|
|
10
|
+
d: "M1 21h4V9H1zm22-11c0-1.1-.9-2-2-2h-6.31l.95-4.57.03-.32c0-.41-.17-.79-.44-1.06L14.17 1 7.59 7.59C7.22 7.95 7 8.45 7 9v10c0 1.1.9 2 2 2h9c.83 0 1.54-.5 1.84-1.22l3.02-7.05c.09-.23.14-.47.14-.73z"
|
|
11
|
+
}), "ThumbUp"), U = (a) => {
|
|
12
|
+
const h = /* @__PURE__ */ new Date(), u = typeof a == "string" ? new Date(a) : a, p = h.getTime() - u.getTime(), x = Math.floor(p / 1e3), t = Math.floor(x / 60), n = Math.floor(t / 60), s = Math.floor(n / 24), r = Math.floor(s / 7), l = Math.floor(s / 30), m = Math.floor(s / 365);
|
|
13
|
+
return x < 60 ? "just now" : t < 60 ? t === 1 ? "1 minute ago" : `${t} minutes ago` : n < 24 ? n === 1 ? "1 hour ago" : `${n} hours ago` : s < 7 ? s === 1 ? "1 day ago" : `${s} days ago` : r < 4 ? r === 1 ? "1 week ago" : `${r} weeks ago` : l < 12 ? l === 1 ? "1 month ago" : `${l} months ago` : m === 1 ? "1 year ago" : `${m} years ago`;
|
|
14
|
+
}, q = ({
|
|
15
|
+
id: a = Date.now(),
|
|
16
|
+
userName: h,
|
|
17
|
+
userAvatar: u,
|
|
18
|
+
rating: p,
|
|
19
|
+
reviewContent: x,
|
|
20
|
+
datetime: t,
|
|
21
|
+
helpfulYes: n = 0,
|
|
22
|
+
helpfulNo: s = 0,
|
|
23
|
+
onHelpfulVote: r,
|
|
24
|
+
showHelpfulSection: l = !0,
|
|
25
|
+
avatarSize: m = 48,
|
|
26
|
+
maxRating: z = 5,
|
|
27
|
+
readOnly: S = !0,
|
|
28
|
+
sx: T = {}
|
|
29
|
+
}) => {
|
|
30
|
+
const [k, g] = y(n), [D, j] = y(s), [c, M] = y(null), w = (f) => {
|
|
31
|
+
c === f ? (f === "yes" ? g((o) => Math.max(0, o - 1)) : j((o) => Math.max(0, o - 1)), M(null)) : (c === "yes" ? g((o) => Math.max(0, o - 1)) : c === "no" && j((o) => Math.max(0, o - 1)), f === "yes" ? g((o) => o + 1) : j((o) => o + 1), M(f)), r && r(a, f);
|
|
32
|
+
}, H = U(t);
|
|
33
|
+
return /* @__PURE__ */ e.jsxs(d, { sx: { py: 2, ...T }, children: [
|
|
34
|
+
/* @__PURE__ */ e.jsxs(v, { direction: "row", spacing: 2, alignItems: "flex-start", children: [
|
|
35
|
+
/* @__PURE__ */ e.jsx(C, { avatar: u, name: h, size: m }),
|
|
36
|
+
/* @__PURE__ */ e.jsxs(d, { sx: { flex: 1 }, children: [
|
|
37
|
+
/* @__PURE__ */ e.jsxs(v, { direction: "row", alignItems: "center", spacing: 2, mb: 1, children: [
|
|
38
|
+
/* @__PURE__ */ e.jsx(i, { variant: "subtitle2", fontWeight: "600", children: h }),
|
|
39
|
+
/* @__PURE__ */ e.jsx("div", { children: /* @__PURE__ */ e.jsx(i, { variant: "caption", color: "text.secondary", children: H }) })
|
|
40
|
+
] }),
|
|
41
|
+
/* @__PURE__ */ e.jsx(d, { sx: { mb: 1 }, children: /* @__PURE__ */ e.jsx(V, { value: p, max: z, readOnly: S, size: "small" }) }),
|
|
42
|
+
/* @__PURE__ */ e.jsx(i, { variant: "body2", sx: { mb: 2, lineHeight: 1.6 }, children: x }),
|
|
43
|
+
l && /* @__PURE__ */ e.jsxs(d, { children: [
|
|
44
|
+
/* @__PURE__ */ e.jsx(i, { variant: "caption", color: "text.secondary", sx: { mr: 2 }, children: "Was this review helpful?" }),
|
|
45
|
+
/* @__PURE__ */ e.jsxs(v, { direction: "row", spacing: 1, sx: { display: "inline-flex", alignItems: "center" }, children: [
|
|
46
|
+
/* @__PURE__ */ e.jsx(
|
|
47
|
+
I,
|
|
48
|
+
{
|
|
49
|
+
size: "small",
|
|
50
|
+
onClick: () => w("yes"),
|
|
51
|
+
sx: {
|
|
52
|
+
color: c === "yes" ? "primary.main" : "text.secondary",
|
|
53
|
+
"&:hover": {
|
|
54
|
+
backgroundColor: "action.hover"
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
|
+
children: /* @__PURE__ */ e.jsx(R, { fontSize: "small" })
|
|
58
|
+
}
|
|
59
|
+
),
|
|
60
|
+
/* @__PURE__ */ e.jsx(i, { variant: "caption", color: "text.secondary", children: k }),
|
|
61
|
+
/* @__PURE__ */ e.jsx(
|
|
62
|
+
I,
|
|
63
|
+
{
|
|
64
|
+
size: "small",
|
|
65
|
+
onClick: () => w("no"),
|
|
66
|
+
sx: {
|
|
67
|
+
color: c === "no" ? "error.main" : "text.secondary",
|
|
68
|
+
ml: 1,
|
|
69
|
+
"&:hover": {
|
|
70
|
+
backgroundColor: "action.hover"
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
children: /* @__PURE__ */ e.jsx(L, { fontSize: "small" })
|
|
74
|
+
}
|
|
75
|
+
),
|
|
76
|
+
/* @__PURE__ */ e.jsx(i, { variant: "caption", color: "text.secondary", children: D })
|
|
77
|
+
] })
|
|
78
|
+
] })
|
|
79
|
+
] })
|
|
80
|
+
] }),
|
|
81
|
+
/* @__PURE__ */ e.jsx($, { sx: { mt: 2 } })
|
|
82
|
+
] });
|
|
83
|
+
};
|
|
84
|
+
export {
|
|
85
|
+
q as default
|
|
86
|
+
};
|