@bigbinary/neeto-molecules 5.1.24 → 5.1.25
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/arrow-left-B-s28MD1.js +18 -0
- package/dist/arrow-left-B-s28MD1.js.map +1 -0
- package/dist/cjs/arrow-left-gtCwH31u.js +20 -0
- package/dist/cjs/arrow-left-gtCwH31u.js.map +1 -0
- package/dist/cjs/v2/ImageWithFallback.js +51 -0
- package/dist/cjs/v2/ImageWithFallback.js.map +1 -0
- package/dist/cjs/v2/ProductEmbed.js +4 -17
- package/dist/cjs/v2/ProductEmbed.js.map +1 -1
- package/dist/cjs/v2/ShareRecordingPane.js +305 -0
- package/dist/cjs/v2/ShareRecordingPane.js.map +1 -0
- package/dist/cjs/v2/ShareViaEmail.js +387 -0
- package/dist/cjs/v2/ShareViaEmail.js.map +1 -0
- package/dist/cjs/v2/StatusDropdown.js +161 -0
- package/dist/cjs/v2/StatusDropdown.js.map +1 -0
- package/dist/cjs/v2/SubscriptionNotificationsContainer.js +72 -0
- package/dist/cjs/v2/SubscriptionNotificationsContainer.js.map +1 -0
- package/dist/cjs/v2/SubscriptionUpgradeRequestModal.js +90 -0
- package/dist/cjs/v2/SubscriptionUpgradeRequestModal.js.map +1 -0
- package/dist/cjs/v2/SuffixedInput.js +130 -0
- package/dist/cjs/v2/SuffixedInput.js.map +1 -0
- package/dist/cjs/v2/TimezoneMismatchModal.js +136 -0
- package/dist/cjs/v2/TimezoneMismatchModal.js.map +1 -0
- package/dist/cjs/v2/VersionHistory.js +210 -0
- package/dist/cjs/v2/VersionHistory.js.map +1 -0
- package/dist/v2/ImageWithFallback.js +49 -0
- package/dist/v2/ImageWithFallback.js.map +1 -0
- package/dist/v2/ProductEmbed.js +2 -15
- package/dist/v2/ProductEmbed.js.map +1 -1
- package/dist/v2/ShareRecordingPane.js +303 -0
- package/dist/v2/ShareRecordingPane.js.map +1 -0
- package/dist/v2/ShareViaEmail.js +366 -0
- package/dist/v2/ShareViaEmail.js.map +1 -0
- package/dist/v2/StatusDropdown.js +159 -0
- package/dist/v2/StatusDropdown.js.map +1 -0
- package/dist/v2/SubscriptionNotificationsContainer.js +70 -0
- package/dist/v2/SubscriptionNotificationsContainer.js.map +1 -0
- package/dist/v2/SubscriptionUpgradeRequestModal.js +88 -0
- package/dist/v2/SubscriptionUpgradeRequestModal.js.map +1 -0
- package/dist/v2/SuffixedInput.js +128 -0
- package/dist/v2/SuffixedInput.js.map +1 -0
- package/dist/v2/TimezoneMismatchModal.js +134 -0
- package/dist/v2/TimezoneMismatchModal.js.map +1 -0
- package/dist/v2/VersionHistory.js +208 -0
- package/dist/v2/VersionHistory.js.map +1 -0
- package/package.json +1 -1
- package/types/v2/ImageWithFallback.d.ts +9 -0
- package/types/v2/ShareRecordingPane.d.ts +16 -0
- package/types/v2/ShareViaEmail.d.ts +34 -0
- package/types/v2/StatusDropdown.d.ts +16 -0
- package/types/v2/SubscriptionNotificationsContainer.d.ts +5 -0
- package/types/v2/SubscriptionUpgradeRequestModal.d.ts +8 -0
- package/types/v2/SuffixedInput.d.ts +16 -0
- package/types/v2/TimezoneMismatchModal.d.ts +8 -0
- package/types/v2/VersionHistory.d.ts +44 -0
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
|
|
4
|
+
var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
|
|
5
|
+
var neetoAtoms = require('@bigbinary/neeto-atoms');
|
|
6
|
+
var neetoCist = require('@bigbinary/neeto-cist');
|
|
7
|
+
var reactI18next = require('react-i18next');
|
|
8
|
+
var _slicedToArray = require('@babel/runtime/helpers/slicedToArray');
|
|
9
|
+
var React = require('react');
|
|
10
|
+
var utils = require('@bigbinary/neeto-commons-frontend/v2/utils');
|
|
11
|
+
var ramda = require('ramda');
|
|
12
|
+
var v2_CopyToClipboardButton = require('./CopyToClipboardButton.js');
|
|
13
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
14
|
+
require('classnames');
|
|
15
|
+
require('@bigbinary/neeto-commons-frontend/v2/utils/general');
|
|
16
|
+
require('../check-VgZf0qTr.js');
|
|
17
|
+
require('../createLucideIcon-DBDhE7kE.js');
|
|
18
|
+
require('../copy-CerjTcLL.js');
|
|
19
|
+
|
|
20
|
+
var ONE_SECOND = 1;
|
|
21
|
+
var ONE_MINUTE = 60 * ONE_SECOND;
|
|
22
|
+
var ONE_HOUR = 60 * ONE_MINUTE;
|
|
23
|
+
|
|
24
|
+
var padZero = function padZero(number) {
|
|
25
|
+
var length = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;
|
|
26
|
+
var string = String(number);
|
|
27
|
+
var threshold = Math.pow(10, length - 1);
|
|
28
|
+
if (number < threshold) {
|
|
29
|
+
while (String(threshold).length > string.length) {
|
|
30
|
+
string = "0".concat(number);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return string;
|
|
34
|
+
};
|
|
35
|
+
var shouldRenderHoursInput = function shouldRenderHoursInput(duration) {
|
|
36
|
+
var hours = Math.floor(duration / ONE_HOUR);
|
|
37
|
+
return hours > 0;
|
|
38
|
+
};
|
|
39
|
+
var formatTime = function formatTime(timeInSeconds, showHours) {
|
|
40
|
+
var hours = Math.floor(timeInSeconds / ONE_HOUR);
|
|
41
|
+
var minutes = Math.floor(timeInSeconds % ONE_HOUR / ONE_MINUTE);
|
|
42
|
+
var seconds = timeInSeconds % ONE_MINUTE;
|
|
43
|
+
return showHours ? "".concat(padZero(hours), ":").concat(padZero(minutes), ":").concat(padZero(seconds)) : "".concat(padZero(minutes), ":").concat(padZero(seconds));
|
|
44
|
+
};
|
|
45
|
+
var parseTime = function parseTime(timeString) {
|
|
46
|
+
var parts = timeString.split(":").map(function (part) {
|
|
47
|
+
return part === "" ? NaN : parseInt(part, 10);
|
|
48
|
+
});
|
|
49
|
+
if (parts.some(isNaN) || parts.length > 3) {
|
|
50
|
+
return 0;
|
|
51
|
+
}
|
|
52
|
+
if (parts.length === 1) {
|
|
53
|
+
return parts[0];
|
|
54
|
+
} else if (parts.length === 2) {
|
|
55
|
+
return parts[0] * ONE_MINUTE + parts[1];
|
|
56
|
+
} else if (parts.length === 3) {
|
|
57
|
+
return parts[0] * ONE_HOUR + parts[1] * ONE_MINUTE + parts[2];
|
|
58
|
+
}
|
|
59
|
+
return 0;
|
|
60
|
+
};
|
|
61
|
+
var validateInput = function validateInput(input) {
|
|
62
|
+
var regex = /^[0-9:]{0,8}$/;
|
|
63
|
+
var colons = (input.match(/:/g) || []).length;
|
|
64
|
+
return regex.test(input) && colons <= 2;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
var SharePaneBody = function SharePaneBody(_ref) {
|
|
68
|
+
var recordingUrls = _ref.recordingUrls,
|
|
69
|
+
totalDuration = _ref.totalDuration,
|
|
70
|
+
getCurrentTimestamp = _ref.getCurrentTimestamp,
|
|
71
|
+
isOpen = _ref.isOpen,
|
|
72
|
+
onClose = _ref.onClose,
|
|
73
|
+
Preview = _ref.preview,
|
|
74
|
+
enableAutoplayAndMuteFlags = _ref.enableAutoplayAndMuteFlags;
|
|
75
|
+
var _useTranslation = reactI18next.useTranslation(),
|
|
76
|
+
t = _useTranslation.t;
|
|
77
|
+
var currentTimestamp = getCurrentTimestamp();
|
|
78
|
+
var _useState = React.useState([]),
|
|
79
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
80
|
+
shareLinks = _useState2[0],
|
|
81
|
+
setShareLinks = _useState2[1];
|
|
82
|
+
var _useState3 = React.useState(currentTimestamp),
|
|
83
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
84
|
+
currentPlaybackTime = _useState4[0],
|
|
85
|
+
setCurrentPlaybackTime = _useState4[1];
|
|
86
|
+
var _useState5 = React.useState({
|
|
87
|
+
muted: false,
|
|
88
|
+
autoplay: false
|
|
89
|
+
}),
|
|
90
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
91
|
+
params = _useState6[0],
|
|
92
|
+
setParams = _useState6[1];
|
|
93
|
+
var muted = params.muted,
|
|
94
|
+
autoplay = params.autoplay;
|
|
95
|
+
var _useState7 = React.useState(""),
|
|
96
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
97
|
+
rawInput = _useState8[0],
|
|
98
|
+
setRawInput = _useState8[1];
|
|
99
|
+
var showHours = shouldRenderHoursInput(totalDuration);
|
|
100
|
+
var handlePlaybackTimestampChange = function handlePlaybackTimestampChange(e) {
|
|
101
|
+
var input = e.target.value;
|
|
102
|
+
if (validateInput(input)) {
|
|
103
|
+
setRawInput(input);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
var handleFlagsChange = function handleFlagsChange(key, value) {
|
|
107
|
+
return setParams(ramda.assoc(key, value));
|
|
108
|
+
};
|
|
109
|
+
var formatAndSetTime = function formatAndSetTime() {
|
|
110
|
+
var timeInSeconds = parseTime(rawInput);
|
|
111
|
+
if (timeInSeconds > totalDuration) {
|
|
112
|
+
timeInSeconds = totalDuration;
|
|
113
|
+
}
|
|
114
|
+
setRawInput(formatTime(timeInSeconds, showHours));
|
|
115
|
+
};
|
|
116
|
+
var handleKeyDown = function handleKeyDown(e) {
|
|
117
|
+
if (e.key !== "Enter") return;
|
|
118
|
+
formatAndSetTime();
|
|
119
|
+
};
|
|
120
|
+
var generateUrls = React.useCallback(function (timeInSeconds, urlParams) {
|
|
121
|
+
var playbackUrls = recordingUrls.map(function (recordingUrl) {
|
|
122
|
+
return utils.buildUrl(recordingUrl, {
|
|
123
|
+
time: timeInSeconds,
|
|
124
|
+
muted: urlParams.muted ? 1 : undefined,
|
|
125
|
+
autoplay: urlParams.autoplay ? 1 : undefined
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
setShareLinks(playbackUrls);
|
|
129
|
+
}, [recordingUrls]);
|
|
130
|
+
var handleRegenerateUrl = function handleRegenerateUrl() {
|
|
131
|
+
var timeInSeconds = parseTime(rawInput);
|
|
132
|
+
if (timeInSeconds > totalDuration) {
|
|
133
|
+
timeInSeconds = totalDuration;
|
|
134
|
+
}
|
|
135
|
+
setCurrentPlaybackTime(timeInSeconds);
|
|
136
|
+
generateUrls(timeInSeconds, params);
|
|
137
|
+
};
|
|
138
|
+
React.useEffect(function () {
|
|
139
|
+
if (ramda.not(isOpen)) return;
|
|
140
|
+
var initialTime = currentTimestamp > 0 ? currentTimestamp : 0;
|
|
141
|
+
var initialParams = {
|
|
142
|
+
muted: false,
|
|
143
|
+
autoplay: false
|
|
144
|
+
};
|
|
145
|
+
setCurrentPlaybackTime(initialTime);
|
|
146
|
+
setRawInput(formatTime(initialTime, showHours));
|
|
147
|
+
setParams(initialParams);
|
|
148
|
+
generateUrls(initialTime, initialParams);
|
|
149
|
+
}, [isOpen, showHours, currentTimestamp, generateUrls]);
|
|
150
|
+
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
151
|
+
className: "flex w-full flex-col gap-8",
|
|
152
|
+
children: [/*#__PURE__*/jsxRuntime.jsx("div", {
|
|
153
|
+
className: "border-border flex flex-col gap-8 border-b px-6 pb-8",
|
|
154
|
+
children: /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
155
|
+
className: "flex w-full flex-col gap-6",
|
|
156
|
+
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
157
|
+
className: "flex flex-col gap-y-2",
|
|
158
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
|
|
159
|
+
variant: "h4",
|
|
160
|
+
children: t("neetoMolecules.shareRecording.configureUrlParameters")
|
|
161
|
+
}), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
|
|
162
|
+
variant: "body3",
|
|
163
|
+
children: t("neetoMolecules.shareRecording.configureUrlParametersDescription")
|
|
164
|
+
})]
|
|
165
|
+
}), /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
166
|
+
className: "flex items-center gap-x-3",
|
|
167
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Label, {
|
|
168
|
+
children: t("neetoMolecules.shareRecording.startVideoAt")
|
|
169
|
+
}), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Input, {
|
|
170
|
+
unlimitedChars: true,
|
|
171
|
+
className: "w-full max-w-32",
|
|
172
|
+
"data-testid": "time-input",
|
|
173
|
+
placeholder: showHours ? "HH:MM:SS" : "MM:SS",
|
|
174
|
+
value: rawInput,
|
|
175
|
+
onBlur: formatAndSetTime,
|
|
176
|
+
onChange: handlePlaybackTimestampChange,
|
|
177
|
+
onKeyDown: handleKeyDown
|
|
178
|
+
})]
|
|
179
|
+
}), enableAutoplayAndMuteFlags && /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
180
|
+
className: "flex flex-col gap-4",
|
|
181
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Switch, {
|
|
182
|
+
checked: muted,
|
|
183
|
+
"data-testid": "muted-checkbox",
|
|
184
|
+
id: "muted",
|
|
185
|
+
label: t("neetoMolecules.shareRecording.muted"),
|
|
186
|
+
name: "muted",
|
|
187
|
+
onCheckedChange: function onCheckedChange(checked) {
|
|
188
|
+
return handleFlagsChange("muted", checked);
|
|
189
|
+
}
|
|
190
|
+
}), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Switch, {
|
|
191
|
+
checked: autoplay,
|
|
192
|
+
"data-testid": "autoplay-checkbox",
|
|
193
|
+
id: "autoplay",
|
|
194
|
+
label: t("neetoMolecules.shareRecording.autoplay"),
|
|
195
|
+
name: "autoplay",
|
|
196
|
+
onCheckedChange: function onCheckedChange(checked) {
|
|
197
|
+
return handleFlagsChange("autoplay", checked);
|
|
198
|
+
}
|
|
199
|
+
})]
|
|
200
|
+
}), /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
201
|
+
className: "mt-2 flex items-center gap-x-3",
|
|
202
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, {
|
|
203
|
+
"data-testid": "regenerate-url-button",
|
|
204
|
+
label: t("neetoMolecules.shareRecording.regenerateUrl"),
|
|
205
|
+
size: "sm",
|
|
206
|
+
onClick: handleRegenerateUrl
|
|
207
|
+
}), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Button, {
|
|
208
|
+
"data-testid": "cancel-button",
|
|
209
|
+
label: t("neetoMolecules.shareRecording.cancel"),
|
|
210
|
+
size: "sm",
|
|
211
|
+
variant: "ghost",
|
|
212
|
+
onClick: onClose
|
|
213
|
+
})]
|
|
214
|
+
})]
|
|
215
|
+
})
|
|
216
|
+
}), /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
217
|
+
className: "flex flex-col gap-6 px-6",
|
|
218
|
+
children: [/*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
219
|
+
className: "flex flex-col gap-y-2",
|
|
220
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
|
|
221
|
+
variant: "h4",
|
|
222
|
+
children: t("neetoMolecules.shareRecording.generatedUrls")
|
|
223
|
+
}), /*#__PURE__*/jsxRuntime.jsx("div", {
|
|
224
|
+
className: "flex flex-col gap-y-3",
|
|
225
|
+
children: shareLinks.map(function (shareLink, index) {
|
|
226
|
+
return /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
227
|
+
className: "bg-muted flex w-full items-start justify-between gap-2 rounded p-2",
|
|
228
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
|
|
229
|
+
className: "min-w-0 flex-1 break-words",
|
|
230
|
+
variant: "body2",
|
|
231
|
+
children: shareLink
|
|
232
|
+
}), /*#__PURE__*/jsxRuntime.jsx(v2_CopyToClipboardButton, {
|
|
233
|
+
className: "flex-shrink-0",
|
|
234
|
+
value: shareLink,
|
|
235
|
+
variant: "ghost"
|
|
236
|
+
})]
|
|
237
|
+
}, index);
|
|
238
|
+
})
|
|
239
|
+
})]
|
|
240
|
+
}), Preview && /*#__PURE__*/jsxRuntime.jsxs("div", {
|
|
241
|
+
className: "flex flex-col gap-y-2",
|
|
242
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Typography, {
|
|
243
|
+
variant: "h4",
|
|
244
|
+
children: t("neetoMolecules.shareRecording.preview")
|
|
245
|
+
}), /*#__PURE__*/jsxRuntime.jsx(Preview, {
|
|
246
|
+
currentPlaybackTime: currentPlaybackTime
|
|
247
|
+
})]
|
|
248
|
+
})]
|
|
249
|
+
})]
|
|
250
|
+
});
|
|
251
|
+
};
|
|
252
|
+
|
|
253
|
+
var _excluded = ["recordingUrl", "recordingUrls", "totalDuration", "getCurrentTimestamp", "isOpen", "onClose", "isLoading", "preview", "enableAutoplayAndMuteFlags", "size"];
|
|
254
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
255
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
256
|
+
var ShareRecordingPane = function ShareRecordingPane(_ref) {
|
|
257
|
+
var _ref$recordingUrl = _ref.recordingUrl,
|
|
258
|
+
recordingUrl = _ref$recordingUrl === void 0 ? null : _ref$recordingUrl,
|
|
259
|
+
_ref$recordingUrls = _ref.recordingUrls,
|
|
260
|
+
recordingUrls = _ref$recordingUrls === void 0 ? [] : _ref$recordingUrls,
|
|
261
|
+
totalDuration = _ref.totalDuration,
|
|
262
|
+
getCurrentTimestamp = _ref.getCurrentTimestamp,
|
|
263
|
+
isOpen = _ref.isOpen,
|
|
264
|
+
onClose = _ref.onClose,
|
|
265
|
+
_ref$isLoading = _ref.isLoading,
|
|
266
|
+
isLoading = _ref$isLoading === void 0 ? false : _ref$isLoading,
|
|
267
|
+
preview = _ref.preview,
|
|
268
|
+
_ref$enableAutoplayAn = _ref.enableAutoplayAndMuteFlags,
|
|
269
|
+
enableAutoplayAndMuteFlags = _ref$enableAutoplayAn === void 0 ? false : _ref$enableAutoplayAn,
|
|
270
|
+
_ref$size = _ref.size,
|
|
271
|
+
size = _ref$size === void 0 ? "large" : _ref$size,
|
|
272
|
+
otherProps = _objectWithoutProperties(_ref, _excluded);
|
|
273
|
+
var _useTranslation = reactI18next.useTranslation(),
|
|
274
|
+
t = _useTranslation.t;
|
|
275
|
+
var recordingUrlsToShare = neetoCist.isNotEmpty(recordingUrls) ? recordingUrls : [recordingUrl];
|
|
276
|
+
return /*#__PURE__*/jsxRuntime.jsxs(neetoAtoms.Sheet, _objectSpread(_objectSpread({}, _objectSpread({
|
|
277
|
+
isOpen: isOpen,
|
|
278
|
+
onClose: onClose,
|
|
279
|
+
size: size
|
|
280
|
+
}, otherProps)), {}, {
|
|
281
|
+
"aria-describedby": undefined,
|
|
282
|
+
"data-testid": "share-pane",
|
|
283
|
+
children: [/*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Sheet.Header, {
|
|
284
|
+
children: /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Sheet.Title, {
|
|
285
|
+
children: t("neetoMolecules.shareRecording.title")
|
|
286
|
+
})
|
|
287
|
+
}), /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Sheet.Body, {
|
|
288
|
+
className: "border-border border-t px-0 py-6",
|
|
289
|
+
children: isLoading ? /*#__PURE__*/jsxRuntime.jsx(neetoAtoms.Spinner, {
|
|
290
|
+
className: "mx-auto"
|
|
291
|
+
}) : /*#__PURE__*/jsxRuntime.jsx(SharePaneBody, {
|
|
292
|
+
enableAutoplayAndMuteFlags: enableAutoplayAndMuteFlags,
|
|
293
|
+
getCurrentTimestamp: getCurrentTimestamp,
|
|
294
|
+
isOpen: isOpen,
|
|
295
|
+
onClose: onClose,
|
|
296
|
+
preview: preview,
|
|
297
|
+
totalDuration: totalDuration,
|
|
298
|
+
recordingUrls: recordingUrlsToShare
|
|
299
|
+
})
|
|
300
|
+
})]
|
|
301
|
+
}));
|
|
302
|
+
};
|
|
303
|
+
|
|
304
|
+
module.exports = ShareRecordingPane;
|
|
305
|
+
//# sourceMappingURL=ShareRecordingPane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShareRecordingPane.js","sources":["../../../src/v2/components/ShareRecordingPane/constants.js","../../../src/v2/components/ShareRecordingPane/utils.js","../../../src/v2/components/ShareRecordingPane/SharePaneBody.jsx","../../../src/v2/components/ShareRecordingPane/index.jsx"],"sourcesContent":["export const ONE_SECOND = 1;\nexport const ONE_MINUTE = 60 * ONE_SECOND;\nexport const ONE_HOUR = 60 * ONE_MINUTE;\n","import { ONE_HOUR, ONE_MINUTE } from \"./constants\";\n\nexport const padZero = (number, length = 2) => {\n let string = String(number);\n const threshold = Math.pow(10, length - 1);\n\n if (number < threshold) {\n while (String(threshold).length > string.length) {\n string = `0${number}`;\n }\n }\n\n return string;\n};\n\nexport const shouldRenderHoursInput = duration => {\n const hours = Math.floor(duration / ONE_HOUR);\n\n return hours > 0;\n};\n\nexport const formatTime = (timeInSeconds, showHours) => {\n const hours = Math.floor(timeInSeconds / ONE_HOUR);\n const minutes = Math.floor((timeInSeconds % ONE_HOUR) / ONE_MINUTE);\n const seconds = timeInSeconds % ONE_MINUTE;\n\n return showHours\n ? `${padZero(hours)}:${padZero(minutes)}:${padZero(seconds)}`\n : `${padZero(minutes)}:${padZero(seconds)}`;\n};\n\nexport const parseTime = timeString => {\n const parts = timeString\n .split(\":\")\n .map(part => (part === \"\" ? NaN : parseInt(part, 10)));\n if (parts.some(isNaN) || parts.length > 3) {\n return 0;\n }\n\n if (parts.length === 1) {\n return parts[0];\n } else if (parts.length === 2) {\n return parts[0] * ONE_MINUTE + parts[1];\n } else if (parts.length === 3) {\n return parts[0] * ONE_HOUR + parts[1] * ONE_MINUTE + parts[2];\n }\n\n return 0;\n};\n\nexport const validateInput = input => {\n const regex = /^[0-9:]{0,8}$/;\n const colons = (input.match(/:/g) || []).length;\n\n return regex.test(input) && colons <= 2;\n};\n","import { useState, useEffect, useCallback } from \"react\";\n\nimport {\n Label,\n Typography,\n Input,\n Switch,\n Button,\n} from \"@bigbinary/neeto-atoms\";\nimport { buildUrl } from \"neetocommons/v2/utils\";\nimport { assoc, not } from \"ramda\";\nimport { useTranslation } from \"react-i18next\";\n\nimport {\n formatTime,\n parseTime,\n shouldRenderHoursInput,\n validateInput,\n} from \"./utils\";\n\nimport CopyToClipboardButton from \"../CopyToClipboardButton\";\n\nconst SharePaneBody = ({\n recordingUrls,\n totalDuration,\n getCurrentTimestamp,\n isOpen,\n onClose,\n preview: Preview,\n enableAutoplayAndMuteFlags,\n}) => {\n const { t } = useTranslation();\n\n const currentTimestamp = getCurrentTimestamp();\n\n const [shareLinks, setShareLinks] = useState([]);\n const [currentPlaybackTime, setCurrentPlaybackTime] =\n useState(currentTimestamp);\n\n const [params, setParams] = useState({\n muted: false,\n autoplay: false,\n });\n\n const { muted, autoplay } = params;\n\n const [rawInput, setRawInput] = useState(\"\");\n\n const showHours = shouldRenderHoursInput(totalDuration);\n\n const handlePlaybackTimestampChange = e => {\n const input = e.target.value;\n if (validateInput(input)) {\n setRawInput(input);\n }\n };\n\n const handleFlagsChange = (key, value) => setParams(assoc(key, value));\n\n const formatAndSetTime = () => {\n let timeInSeconds = parseTime(rawInput);\n if (timeInSeconds > totalDuration) {\n timeInSeconds = totalDuration;\n }\n setRawInput(formatTime(timeInSeconds, showHours));\n };\n\n const handleKeyDown = e => {\n if (e.key !== \"Enter\") return;\n formatAndSetTime();\n };\n\n const generateUrls = useCallback(\n (timeInSeconds, urlParams) => {\n const playbackUrls = recordingUrls.map(recordingUrl =>\n buildUrl(recordingUrl, {\n time: timeInSeconds,\n muted: urlParams.muted ? 1 : undefined,\n autoplay: urlParams.autoplay ? 1 : undefined,\n })\n );\n setShareLinks(playbackUrls);\n },\n [recordingUrls]\n );\n\n const handleRegenerateUrl = () => {\n let timeInSeconds = parseTime(rawInput);\n if (timeInSeconds > totalDuration) {\n timeInSeconds = totalDuration;\n }\n setCurrentPlaybackTime(timeInSeconds);\n generateUrls(timeInSeconds, params);\n };\n\n useEffect(() => {\n if (not(isOpen)) return;\n\n const initialTime = currentTimestamp > 0 ? currentTimestamp : 0;\n const initialParams = { muted: false, autoplay: false };\n\n setCurrentPlaybackTime(initialTime);\n setRawInput(formatTime(initialTime, showHours));\n setParams(initialParams);\n generateUrls(initialTime, initialParams);\n }, [isOpen, showHours, currentTimestamp, generateUrls]);\n\n return (\n <div className=\"flex w-full flex-col gap-8\">\n <div className=\"border-border flex flex-col gap-8 border-b px-6 pb-8\">\n <div className=\"flex w-full flex-col gap-6\">\n <div className=\"flex flex-col gap-y-2\">\n <Typography variant=\"h4\">\n {t(\"neetoMolecules.shareRecording.configureUrlParameters\")}\n </Typography>\n <Typography variant=\"body3\">\n {t(\n \"neetoMolecules.shareRecording.configureUrlParametersDescription\"\n )}\n </Typography>\n </div>\n <div className=\"flex items-center gap-x-3\">\n <Label>{t(\"neetoMolecules.shareRecording.startVideoAt\")}</Label>\n <Input\n unlimitedChars\n className=\"w-full max-w-32\"\n data-testid=\"time-input\"\n placeholder={showHours ? \"HH:MM:SS\" : \"MM:SS\"}\n value={rawInput}\n onBlur={formatAndSetTime}\n onChange={handlePlaybackTimestampChange}\n onKeyDown={handleKeyDown}\n />\n </div>\n {enableAutoplayAndMuteFlags && (\n <div className=\"flex flex-col gap-4\">\n <Switch\n checked={muted}\n data-testid=\"muted-checkbox\"\n id=\"muted\"\n label={t(\"neetoMolecules.shareRecording.muted\")}\n name=\"muted\"\n onCheckedChange={checked => handleFlagsChange(\"muted\", checked)}\n />\n <Switch\n checked={autoplay}\n data-testid=\"autoplay-checkbox\"\n id=\"autoplay\"\n label={t(\"neetoMolecules.shareRecording.autoplay\")}\n name=\"autoplay\"\n onCheckedChange={checked =>\n handleFlagsChange(\"autoplay\", checked)\n }\n />\n </div>\n )}\n <div className=\"mt-2 flex items-center gap-x-3\">\n <Button\n data-testid=\"regenerate-url-button\"\n label={t(\"neetoMolecules.shareRecording.regenerateUrl\")}\n size=\"sm\"\n onClick={handleRegenerateUrl}\n />\n <Button\n data-testid=\"cancel-button\"\n label={t(\"neetoMolecules.shareRecording.cancel\")}\n size=\"sm\"\n variant=\"ghost\"\n onClick={onClose}\n />\n </div>\n </div>\n </div>\n <div className=\"flex flex-col gap-6 px-6\">\n <div className=\"flex flex-col gap-y-2\">\n <Typography variant=\"h4\">\n {t(\"neetoMolecules.shareRecording.generatedUrls\")}\n </Typography>\n <div className=\"flex flex-col gap-y-3\">\n {shareLinks.map((shareLink, index) => (\n <div\n className=\"bg-muted flex w-full items-start justify-between gap-2 rounded p-2\"\n key={index}\n >\n <Typography\n className=\"min-w-0 flex-1 break-words\"\n variant=\"body2\"\n >\n {shareLink}\n </Typography>\n <CopyToClipboardButton\n className=\"flex-shrink-0\"\n value={shareLink}\n variant=\"ghost\"\n />\n </div>\n ))}\n </div>\n </div>\n {Preview && (\n <div className=\"flex flex-col gap-y-2\">\n <Typography variant=\"h4\">\n {t(\"neetoMolecules.shareRecording.preview\")}\n </Typography>\n <Preview {...{ currentPlaybackTime }} />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport default SharePaneBody;\n","import { Sheet, Spinner } from \"@bigbinary/neeto-atoms\";\nimport { isNotEmpty } from \"neetocist\";\nimport PropTypes from \"prop-types\";\nimport { useTranslation } from \"react-i18next\";\n\nimport SharePaneBody from \"./SharePaneBody\";\n\nconst ShareRecordingPane = ({\n recordingUrl = null,\n recordingUrls = [],\n totalDuration,\n getCurrentTimestamp,\n isOpen,\n onClose,\n isLoading = false,\n preview,\n enableAutoplayAndMuteFlags = false,\n size = \"large\",\n ...otherProps\n}) => {\n const { t } = useTranslation();\n\n const recordingUrlsToShare = isNotEmpty(recordingUrls)\n ? recordingUrls\n : [recordingUrl];\n\n return (\n <Sheet\n {...{ isOpen, onClose, size, ...otherProps }}\n aria-describedby={undefined}\n data-testid=\"share-pane\"\n >\n <Sheet.Header>\n <Sheet.Title>{t(\"neetoMolecules.shareRecording.title\")}</Sheet.Title>\n </Sheet.Header>\n <Sheet.Body className=\"border-border border-t px-0 py-6\">\n {isLoading ? (\n <Spinner className=\"mx-auto\" />\n ) : (\n <SharePaneBody\n {...{\n enableAutoplayAndMuteFlags,\n getCurrentTimestamp,\n isOpen,\n onClose,\n preview,\n totalDuration,\n }}\n recordingUrls={recordingUrlsToShare}\n />\n )}\n </Sheet.Body>\n </Sheet>\n );\n};\n\nShareRecordingPane.propTypes = {\n /**\n * Recording URL used for building the share link.\n */\n recordingUrl: PropTypes.string,\n /**\n * Recording URLs used for building the share link.\n */\n recordingUrls: PropTypes.array,\n /**\n * Total duration of the content being shared.\n */\n totalDuration: PropTypes.number.isRequired,\n /**\n * A function that returns current playback time of the recorded content in seconds.\n */\n getCurrentTimestamp: PropTypes.func.isRequired,\n /**\n * Boolean indicating whether the pane is open or not.\n */\n isOpen: PropTypes.bool.isRequired,\n /**\n * Function to close the pane.\n */\n onClose: PropTypes.func.isRequired,\n /**\n * Boolean indicating whether content is loading or not.\n */\n isLoading: PropTypes.bool,\n /**\n * Component to render as a preview of the recording.\n */\n preview: PropTypes.elementType,\n /**\n * Size of the pane.\n */\n size: PropTypes.oneOf([\"extraLarge\", \"large\", \"small\"]),\n};\n\nexport default ShareRecordingPane;\n"],"names":["ONE_SECOND","ONE_MINUTE","ONE_HOUR","padZero","number","length","arguments","undefined","string","String","threshold","Math","pow","concat","shouldRenderHoursInput","duration","hours","floor","formatTime","timeInSeconds","showHours","minutes","seconds","parseTime","timeString","parts","split","map","part","NaN","parseInt","some","isNaN","validateInput","input","regex","colons","match","test","SharePaneBody","_ref","recordingUrls","totalDuration","getCurrentTimestamp","isOpen","onClose","Preview","preview","enableAutoplayAndMuteFlags","_useTranslation","useTranslation","t","currentTimestamp","_useState","useState","_useState2","_slicedToArray","shareLinks","setShareLinks","_useState3","_useState4","currentPlaybackTime","setCurrentPlaybackTime","_useState5","muted","autoplay","_useState6","params","setParams","_useState7","_useState8","rawInput","setRawInput","handlePlaybackTimestampChange","e","target","value","handleFlagsChange","key","assoc","formatAndSetTime","handleKeyDown","generateUrls","useCallback","urlParams","playbackUrls","recordingUrl","buildUrl","time","handleRegenerateUrl","useEffect","not","initialTime","initialParams","_jsxs","className","children","_jsx","Typography","variant","Label","Input","unlimitedChars","placeholder","onBlur","onChange","onKeyDown","Switch","checked","id","label","name","onCheckedChange","Button","size","onClick","shareLink","index","CopyToClipboardButton","ShareRecordingPane","_ref$recordingUrl","_ref$recordingUrls","_ref$isLoading","isLoading","_ref$enableAutoplayAn","_ref$size","otherProps","_objectWithoutProperties","_excluded","recordingUrlsToShare","isNotEmpty","Sheet","_objectSpread","Header","Title","Body","Spinner"],"mappings":";;;;;;;;;;;;;;;;;;;AAAO,IAAMA,UAAU,GAAG,CAAC;AACpB,IAAMC,UAAU,GAAG,EAAE,GAAGD,UAAU;AAClC,IAAME,QAAQ,GAAG,EAAE,GAAGD,UAAU;;ACAhC,IAAME,OAAO,GAAG,SAAVA,OAAOA,CAAIC,MAAM,EAAiB;AAAA,EAAA,IAAfC,MAAM,GAAAC,SAAA,CAAAD,MAAA,GAAA,CAAA,IAAAC,SAAA,CAAA,CAAA,CAAA,KAAAC,SAAA,GAAAD,SAAA,CAAA,CAAA,CAAA,GAAG,CAAC;AACxC,EAAA,IAAIE,MAAM,GAAGC,MAAM,CAACL,MAAM,CAAC;EAC3B,IAAMM,SAAS,GAAGC,IAAI,CAACC,GAAG,CAAC,EAAE,EAAEP,MAAM,GAAG,CAAC,CAAC;EAE1C,IAAID,MAAM,GAAGM,SAAS,EAAE;IACtB,OAAOD,MAAM,CAACC,SAAS,CAAC,CAACL,MAAM,GAAGG,MAAM,CAACH,MAAM,EAAE;AAC/CG,MAAAA,MAAM,GAAA,GAAA,CAAAK,MAAA,CAAOT,MAAM,CAAE;AACvB,IAAA;AACF,EAAA;AAEA,EAAA,OAAOI,MAAM;AACf,CAAC;AAEM,IAAMM,sBAAsB,GAAG,SAAzBA,sBAAsBA,CAAGC,QAAQ,EAAI;EAChD,IAAMC,KAAK,GAAGL,IAAI,CAACM,KAAK,CAACF,QAAQ,GAAGb,QAAQ,CAAC;EAE7C,OAAOc,KAAK,GAAG,CAAC;AAClB,CAAC;AAEM,IAAME,UAAU,GAAG,SAAbA,UAAUA,CAAIC,aAAa,EAAEC,SAAS,EAAK;EACtD,IAAMJ,KAAK,GAAGL,IAAI,CAACM,KAAK,CAACE,aAAa,GAAGjB,QAAQ,CAAC;EAClD,IAAMmB,OAAO,GAAGV,IAAI,CAACM,KAAK,CAAEE,aAAa,GAAGjB,QAAQ,GAAID,UAAU,CAAC;AACnE,EAAA,IAAMqB,OAAO,GAAGH,aAAa,GAAGlB,UAAU;AAE1C,EAAA,OAAOmB,SAAS,GAAA,EAAA,CAAAP,MAAA,CACTV,OAAO,CAACa,KAAK,CAAC,EAAA,GAAA,CAAA,CAAAH,MAAA,CAAIV,OAAO,CAACkB,OAAO,CAAC,OAAAR,MAAA,CAAIV,OAAO,CAACmB,OAAO,CAAC,CAAA,GAAA,EAAA,CAAAT,MAAA,CACtDV,OAAO,CAACkB,OAAO,CAAC,EAAA,GAAA,CAAA,CAAAR,MAAA,CAAIV,OAAO,CAACmB,OAAO,CAAC,CAAE;AAC/C,CAAC;AAEM,IAAMC,SAAS,GAAG,SAAZA,SAASA,CAAGC,UAAU,EAAI;AACrC,EAAA,IAAMC,KAAK,GAAGD,UAAU,CACrBE,KAAK,CAAC,GAAG,CAAC,CACVC,GAAG,CAAC,UAAAC,IAAI,EAAA;IAAA,OAAKA,IAAI,KAAK,EAAE,GAAGC,GAAG,GAAGC,QAAQ,CAACF,IAAI,EAAE,EAAE,CAAC;AAAA,EAAA,CAAC,CAAC;AACxD,EAAA,IAAIH,KAAK,CAACM,IAAI,CAACC,KAAK,CAAC,IAAIP,KAAK,CAACpB,MAAM,GAAG,CAAC,EAAE;AACzC,IAAA,OAAO,CAAC;AACV,EAAA;AAEA,EAAA,IAAIoB,KAAK,CAACpB,MAAM,KAAK,CAAC,EAAE;IACtB,OAAOoB,KAAK,CAAC,CAAC,CAAC;AACjB,EAAA,CAAC,MAAM,IAAIA,KAAK,CAACpB,MAAM,KAAK,CAAC,EAAE;IAC7B,OAAOoB,KAAK,CAAC,CAAC,CAAC,GAAGxB,UAAU,GAAGwB,KAAK,CAAC,CAAC,CAAC;AACzC,EAAA,CAAC,MAAM,IAAIA,KAAK,CAACpB,MAAM,KAAK,CAAC,EAAE;AAC7B,IAAA,OAAOoB,KAAK,CAAC,CAAC,CAAC,GAAGvB,QAAQ,GAAGuB,KAAK,CAAC,CAAC,CAAC,GAAGxB,UAAU,GAAGwB,KAAK,CAAC,CAAC,CAAC;AAC/D,EAAA;AAEA,EAAA,OAAO,CAAC;AACV,CAAC;AAEM,IAAMQ,aAAa,GAAG,SAAhBA,aAAaA,CAAGC,KAAK,EAAI;EACpC,IAAMC,KAAK,GAAG,eAAe;AAC7B,EAAA,IAAMC,MAAM,GAAG,CAACF,KAAK,CAACG,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,EAAEhC,MAAM;EAE/C,OAAO8B,KAAK,CAACG,IAAI,CAACJ,KAAK,CAAC,IAAIE,MAAM,IAAI,CAAC;AACzC,CAAC;;ACjCD,IAAMG,aAAa,GAAG,SAAhBA,aAAaA,CAAAC,IAAA,EAQb;AAAA,EAAA,IAPJC,aAAa,GAAAD,IAAA,CAAbC,aAAa;IACbC,aAAa,GAAAF,IAAA,CAAbE,aAAa;IACbC,mBAAmB,GAAAH,IAAA,CAAnBG,mBAAmB;IACnBC,MAAM,GAAAJ,IAAA,CAANI,MAAM;IACNC,OAAO,GAAAL,IAAA,CAAPK,OAAO;IACEC,OAAO,GAAAN,IAAA,CAAhBO,OAAO;IACPC,0BAA0B,GAAAR,IAAA,CAA1BQ,0BAA0B;AAE1B,EAAA,IAAAC,eAAA,GAAcC,2BAAc,EAAE;IAAtBC,CAAC,GAAAF,eAAA,CAADE,CAAC;AAET,EAAA,IAAMC,gBAAgB,GAAGT,mBAAmB,EAAE;AAE9C,EAAA,IAAAU,SAAA,GAAoCC,cAAQ,CAAC,EAAE,CAAC;IAAAC,UAAA,GAAAC,cAAA,CAAAH,SAAA,EAAA,CAAA,CAAA;AAAzCI,IAAAA,UAAU,GAAAF,UAAA,CAAA,CAAA,CAAA;AAAEG,IAAAA,aAAa,GAAAH,UAAA,CAAA,CAAA,CAAA;AAChC,EAAA,IAAAI,UAAA,GACEL,cAAQ,CAACF,gBAAgB,CAAC;IAAAQ,UAAA,GAAAJ,cAAA,CAAAG,UAAA,EAAA,CAAA,CAAA;AADrBE,IAAAA,mBAAmB,GAAAD,UAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,sBAAsB,GAAAF,UAAA,CAAA,CAAA,CAAA;EAGlD,IAAAG,UAAA,GAA4BT,cAAQ,CAAC;AACnCU,MAAAA,KAAK,EAAE,KAAK;AACZC,MAAAA,QAAQ,EAAE;AACZ,KAAC,CAAC;IAAAC,UAAA,GAAAV,cAAA,CAAAO,UAAA,EAAA,CAAA,CAAA;AAHKI,IAAAA,MAAM,GAAAD,UAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,SAAS,GAAAF,UAAA,CAAA,CAAA,CAAA;AAKxB,EAAA,IAAQF,KAAK,GAAeG,MAAM,CAA1BH,KAAK;IAAEC,QAAQ,GAAKE,MAAM,CAAnBF,QAAQ;AAEvB,EAAA,IAAAI,UAAA,GAAgCf,cAAQ,CAAC,EAAE,CAAC;IAAAgB,UAAA,GAAAd,cAAA,CAAAa,UAAA,EAAA,CAAA,CAAA;AAArCE,IAAAA,QAAQ,GAAAD,UAAA,CAAA,CAAA,CAAA;AAAEE,IAAAA,WAAW,GAAAF,UAAA,CAAA,CAAA,CAAA;AAE5B,EAAA,IAAMlD,SAAS,GAAGN,sBAAsB,CAAC4B,aAAa,CAAC;AAEvD,EAAA,IAAM+B,6BAA6B,GAAG,SAAhCA,6BAA6BA,CAAGC,CAAC,EAAI;AACzC,IAAA,IAAMxC,KAAK,GAAGwC,CAAC,CAACC,MAAM,CAACC,KAAK;AAC5B,IAAA,IAAI3C,aAAa,CAACC,KAAK,CAAC,EAAE;MACxBsC,WAAW,CAACtC,KAAK,CAAC;AACpB,IAAA;EACF,CAAC;AAED,EAAA,IAAM2C,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIC,GAAG,EAAEF,KAAK,EAAA;IAAA,OAAKR,SAAS,CAACW,WAAK,CAACD,GAAG,EAAEF,KAAK,CAAC,CAAC;AAAA,EAAA,CAAA;AAEtE,EAAA,IAAMI,gBAAgB,GAAG,SAAnBA,gBAAgBA,GAAS;AAC7B,IAAA,IAAI7D,aAAa,GAAGI,SAAS,CAACgD,QAAQ,CAAC;IACvC,IAAIpD,aAAa,GAAGuB,aAAa,EAAE;AACjCvB,MAAAA,aAAa,GAAGuB,aAAa;AAC/B,IAAA;AACA8B,IAAAA,WAAW,CAACtD,UAAU,CAACC,aAAa,EAAEC,SAAS,CAAC,CAAC;EACnD,CAAC;AAED,EAAA,IAAM6D,aAAa,GAAG,SAAhBA,aAAaA,CAAGP,CAAC,EAAI;AACzB,IAAA,IAAIA,CAAC,CAACI,GAAG,KAAK,OAAO,EAAE;AACvBE,IAAAA,gBAAgB,EAAE;EACpB,CAAC;EAED,IAAME,YAAY,GAAGC,iBAAW,CAC9B,UAAChE,aAAa,EAAEiE,SAAS,EAAK;AAC5B,IAAA,IAAMC,YAAY,GAAG5C,aAAa,CAACd,GAAG,CAAC,UAAA2D,YAAY,EAAA;MAAA,OACjDC,cAAQ,CAACD,YAAY,EAAE;AACrBE,QAAAA,IAAI,EAAErE,aAAa;AACnB6C,QAAAA,KAAK,EAAEoB,SAAS,CAACpB,KAAK,GAAG,CAAC,GAAGzD,SAAS;AACtC0D,QAAAA,QAAQ,EAAEmB,SAAS,CAACnB,QAAQ,GAAG,CAAC,GAAG1D;AACrC,OAAC,CAAC;AAAA,IAAA,CACJ,CAAC;IACDmD,aAAa,CAAC2B,YAAY,CAAC;AAC7B,EAAA,CAAC,EACD,CAAC5C,aAAa,CAChB,CAAC;AAED,EAAA,IAAMgD,mBAAmB,GAAG,SAAtBA,mBAAmBA,GAAS;AAChC,IAAA,IAAItE,aAAa,GAAGI,SAAS,CAACgD,QAAQ,CAAC;IACvC,IAAIpD,aAAa,GAAGuB,aAAa,EAAE;AACjCvB,MAAAA,aAAa,GAAGuB,aAAa;AAC/B,IAAA;IACAoB,sBAAsB,CAAC3C,aAAa,CAAC;AACrC+D,IAAAA,YAAY,CAAC/D,aAAa,EAAEgD,MAAM,CAAC;EACrC,CAAC;AAEDuB,EAAAA,eAAS,CAAC,YAAM;AACd,IAAA,IAAIC,SAAG,CAAC/C,MAAM,CAAC,EAAE;IAEjB,IAAMgD,WAAW,GAAGxC,gBAAgB,GAAG,CAAC,GAAGA,gBAAgB,GAAG,CAAC;AAC/D,IAAA,IAAMyC,aAAa,GAAG;AAAE7B,MAAAA,KAAK,EAAE,KAAK;AAAEC,MAAAA,QAAQ,EAAE;KAAO;IAEvDH,sBAAsB,CAAC8B,WAAW,CAAC;AACnCpB,IAAAA,WAAW,CAACtD,UAAU,CAAC0E,WAAW,EAAExE,SAAS,CAAC,CAAC;IAC/CgD,SAAS,CAACyB,aAAa,CAAC;AACxBX,IAAAA,YAAY,CAACU,WAAW,EAAEC,aAAa,CAAC;EAC1C,CAAC,EAAE,CAACjD,MAAM,EAAExB,SAAS,EAAEgC,gBAAgB,EAAE8B,YAAY,CAAC,CAAC;AAEvD,EAAA,oBACEY,eAAA,CAAA,KAAA,EAAA;AAAKC,IAAAA,SAAS,EAAC,4BAA4B;AAAAC,IAAAA,QAAA,gBACzCC,cAAA,CAAA,KAAA,EAAA;AAAKF,MAAAA,SAAS,EAAC,sDAAsD;AAAAC,MAAAA,QAAA,eACnEF,eAAA,CAAA,KAAA,EAAA;AAAKC,QAAAA,SAAS,EAAC,4BAA4B;AAAAC,QAAAA,QAAA,gBACzCF,eAAA,CAAA,KAAA,EAAA;AAAKC,UAAAA,SAAS,EAAC,uBAAuB;UAAAC,QAAA,EAAA,cACpCC,cAAA,CAACC,qBAAU,EAAA;AAACC,YAAAA,OAAO,EAAC,IAAI;YAAAH,QAAA,EACrB7C,CAAC,CAAC,sDAAsD;AAAC,WAChD,CAAC,eACb8C,cAAA,CAACC,qBAAU,EAAA;AAACC,YAAAA,OAAO,EAAC,OAAO;YAAAH,QAAA,EACxB7C,CAAC,CACA,iEACF;AAAC,WACS,CAAC;SACV,CAAC,eACN2C,eAAA,CAAA,KAAA,EAAA;AAAKC,UAAAA,SAAS,EAAC,2BAA2B;UAAAC,QAAA,EAAA,cACxCC,cAAA,CAACG,gBAAK,EAAA;YAAAJ,QAAA,EAAE7C,CAAC,CAAC,4CAA4C;AAAC,WAAQ,CAAC,eAChE8C,cAAA,CAACI,gBAAK,EAAA;YACJC,cAAc,EAAA,IAAA;AACdP,YAAAA,SAAS,EAAC,iBAAiB;AAC3B,YAAA,aAAA,EAAY,YAAY;AACxBQ,YAAAA,WAAW,EAAEnF,SAAS,GAAG,UAAU,GAAG,OAAQ;AAC9CwD,YAAAA,KAAK,EAAEL,QAAS;AAChBiC,YAAAA,MAAM,EAAExB,gBAAiB;AACzByB,YAAAA,QAAQ,EAAEhC,6BAA8B;AACxCiC,YAAAA,SAAS,EAAEzB;AAAc,WAC1B,CAAC;AAAA,SACC,CAAC,EACLjC,0BAA0B,iBACzB8C,eAAA,CAAA,KAAA,EAAA;AAAKC,UAAAA,SAAS,EAAC,qBAAqB;UAAAC,QAAA,EAAA,cAClCC,cAAA,CAACU,iBAAM,EAAA;AACLC,YAAAA,OAAO,EAAE5C,KAAM;AACf,YAAA,aAAA,EAAY,gBAAgB;AAC5B6C,YAAAA,EAAE,EAAC,OAAO;AACVC,YAAAA,KAAK,EAAE3D,CAAC,CAAC,qCAAqC,CAAE;AAChD4D,YAAAA,IAAI,EAAC,OAAO;AACZC,YAAAA,eAAe,EAAE,SAAjBA,eAAeA,CAAEJ,OAAO,EAAA;AAAA,cAAA,OAAI/B,iBAAiB,CAAC,OAAO,EAAE+B,OAAO,CAAC;AAAA,YAAA;AAAC,WACjE,CAAC,eACFX,cAAA,CAACU,iBAAM,EAAA;AACLC,YAAAA,OAAO,EAAE3C,QAAS;AAClB,YAAA,aAAA,EAAY,mBAAmB;AAC/B4C,YAAAA,EAAE,EAAC,UAAU;AACbC,YAAAA,KAAK,EAAE3D,CAAC,CAAC,wCAAwC,CAAE;AACnD4D,YAAAA,IAAI,EAAC,UAAU;AACfC,YAAAA,eAAe,EAAE,SAAjBA,eAAeA,CAAEJ,OAAO,EAAA;AAAA,cAAA,OACtB/B,iBAAiB,CAAC,UAAU,EAAE+B,OAAO,CAAC;AAAA,YAAA;AACvC,WACF,CAAC;SACC,CACN,eACDd,eAAA,CAAA,KAAA,EAAA;AAAKC,UAAAA,SAAS,EAAC,gCAAgC;UAAAC,QAAA,EAAA,cAC7CC,cAAA,CAACgB,iBAAM,EAAA;AACL,YAAA,aAAA,EAAY,uBAAuB;AACnCH,YAAAA,KAAK,EAAE3D,CAAC,CAAC,6CAA6C,CAAE;AACxD+D,YAAAA,IAAI,EAAC,IAAI;AACTC,YAAAA,OAAO,EAAE1B;AAAoB,WAC9B,CAAC,eACFQ,cAAA,CAACgB,iBAAM,EAAA;AACL,YAAA,aAAA,EAAY,eAAe;AAC3BH,YAAAA,KAAK,EAAE3D,CAAC,CAAC,sCAAsC,CAAE;AACjD+D,YAAAA,IAAI,EAAC,IAAI;AACTf,YAAAA,OAAO,EAAC,OAAO;AACfgB,YAAAA,OAAO,EAAEtE;AAAQ,WAClB,CAAC;AAAA,SACC,CAAC;OACH;KACF,CAAC,eACNiD,eAAA,CAAA,KAAA,EAAA;AAAKC,MAAAA,SAAS,EAAC,0BAA0B;AAAAC,MAAAA,QAAA,gBACvCF,eAAA,CAAA,KAAA,EAAA;AAAKC,QAAAA,SAAS,EAAC,uBAAuB;QAAAC,QAAA,EAAA,cACpCC,cAAA,CAACC,qBAAU,EAAA;AAACC,UAAAA,OAAO,EAAC,IAAI;UAAAH,QAAA,EACrB7C,CAAC,CAAC,6CAA6C;SACtC,CAAC,eACb8C,cAAA,CAAA,KAAA,EAAA;AAAKF,UAAAA,SAAS,EAAC,uBAAuB;UAAAC,QAAA,EACnCvC,UAAU,CAAC9B,GAAG,CAAC,UAACyF,SAAS,EAAEC,KAAK,EAAA;AAAA,YAAA,oBAC/BvB,eAAA,CAAA,KAAA,EAAA;AACEC,cAAAA,SAAS,EAAC,oEAAoE;cAAAC,QAAA,EAAA,cAG9EC,cAAA,CAACC,qBAAU,EAAA;AACTH,gBAAAA,SAAS,EAAC,4BAA4B;AACtCI,gBAAAA,OAAO,EAAC,OAAO;AAAAH,gBAAAA,QAAA,EAEdoB;AAAS,eACA,CAAC,eACbnB,cAAA,CAACqB,wBAAqB,EAAA;AACpBvB,gBAAAA,SAAS,EAAC,eAAe;AACzBnB,gBAAAA,KAAK,EAAEwC,SAAU;AACjBjB,gBAAAA,OAAO,EAAC;AAAO,eAChB,CAAC;AAAA,aAAA,EAZGkB,KAaF,CAAC;UAAA,CACP;AAAC,SACC,CAAC;AAAA,OACH,CAAC,EACLvE,OAAO,iBACNgD,eAAA,CAAA,KAAA,EAAA;AAAKC,QAAAA,SAAS,EAAC,uBAAuB;QAAAC,QAAA,EAAA,cACpCC,cAAA,CAACC,qBAAU,EAAA;AAACC,UAAAA,OAAO,EAAC,IAAI;UAAAH,QAAA,EACrB7C,CAAC,CAAC,uCAAuC;AAAC,SACjC,CAAC,eACb8C,cAAA,CAACnD,OAAO,EAAA;AAAOe,UAAAA,mBAAmB,EAAnBA;AAAmB,SAAK,CAAC;AAAA,OACrC,CACN;AAAA,KACE,CAAC;AAAA,GACH,CAAC;AAEV,CAAC;;;;;AC3MD,IAAM0D,kBAAkB,GAAG,SAArBA,kBAAkBA,CAAA/E,IAAA,EAYlB;AAAA,EAAA,IAAAgF,iBAAA,GAAAhF,IAAA,CAXJ8C,YAAY;AAAZA,IAAAA,YAAY,GAAAkC,iBAAA,KAAA,MAAA,GAAG,IAAI,GAAAA,iBAAA;IAAAC,kBAAA,GAAAjF,IAAA,CACnBC,aAAa;AAAbA,IAAAA,aAAa,GAAAgF,kBAAA,KAAA,MAAA,GAAG,EAAE,GAAAA,kBAAA;IAClB/E,aAAa,GAAAF,IAAA,CAAbE,aAAa;IACbC,mBAAmB,GAAAH,IAAA,CAAnBG,mBAAmB;IACnBC,MAAM,GAAAJ,IAAA,CAANI,MAAM;IACNC,OAAO,GAAAL,IAAA,CAAPK,OAAO;IAAA6E,cAAA,GAAAlF,IAAA,CACPmF,SAAS;AAATA,IAAAA,SAAS,GAAAD,cAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,cAAA;IACjB3E,OAAO,GAAAP,IAAA,CAAPO,OAAO;IAAA6E,qBAAA,GAAApF,IAAA,CACPQ,0BAA0B;AAA1BA,IAAAA,0BAA0B,GAAA4E,qBAAA,KAAA,MAAA,GAAG,KAAK,GAAAA,qBAAA;IAAAC,SAAA,GAAArF,IAAA,CAClC0E,IAAI;AAAJA,IAAAA,IAAI,GAAAW,SAAA,KAAA,MAAA,GAAG,OAAO,GAAAA,SAAA;AACXC,IAAAA,UAAU,GAAAC,wBAAA,CAAAvF,IAAA,EAAAwF,SAAA,CAAA;AAEb,EAAA,IAAA/E,eAAA,GAAcC,2BAAc,EAAE;IAAtBC,CAAC,GAAAF,eAAA,CAADE,CAAC;EAET,IAAM8E,oBAAoB,GAAGC,oBAAU,CAACzF,aAAa,CAAC,GAClDA,aAAa,GACb,CAAC6C,YAAY,CAAC;EAElB,oBACEQ,eAAA,CAACqC,gBAAK,EAAAC,aAAA,CAAAA,aAAA,KAAAA,aAAA,CAAA;AACExF,IAAAA,MAAM,EAANA,MAAM;AAAEC,IAAAA,OAAO,EAAPA,OAAO;AAAEqE,IAAAA,IAAI,EAAJA;AAAI,GAAA,EAAKY,UAAU,CAAA,CAAA,EAAA,EAAA,EAAA;AAC1C,IAAA,kBAAA,EAAkBvH,SAAU;AAC5B,IAAA,aAAA,EAAY,YAAY;AAAAyF,IAAAA,QAAA,EAAA,cAExBC,cAAA,CAACkC,gBAAK,CAACE,MAAM,EAAA;AAAArC,MAAAA,QAAA,eACXC,cAAA,CAACkC,gBAAK,CAACG,KAAK,EAAA;QAAAtC,QAAA,EAAE7C,CAAC,CAAC,qCAAqC;OAAe;AAAC,KACzD,CAAC,eACf8C,cAAA,CAACkC,gBAAK,CAACI,IAAI,EAAA;AAACxC,MAAAA,SAAS,EAAC,kCAAkC;AAAAC,MAAAA,QAAA,EACrD2B,SAAS,gBACR1B,cAAA,CAACuC,kBAAO,EAAA;AAACzC,QAAAA,SAAS,EAAC;AAAS,OAAE,CAAC,gBAE/BE,cAAA,CAAC1D,aAAa,EAAA;AAEVS,QAAAA,0BAA0B,EAA1BA,0BAA0B;AAC1BL,QAAAA,mBAAmB,EAAnBA,mBAAmB;AACnBC,QAAAA,MAAM,EAANA,MAAM;AACNC,QAAAA,OAAO,EAAPA,OAAO;AACPE,QAAAA,OAAO,EAAPA,OAAO;AACPL,QAAAA,aAAa,EAAbA,aAAa;AAEfD,QAAAA,aAAa,EAAEwF;OAChB;AACF,KACS,CAAC;AAAA,GAAA,CACR,CAAC;AAEZ;;;;"}
|