@useupup/preact 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +80 -0
  3. package/dist/AudioUploader-2WITC5YR-4WGBUCEB.js +298 -0
  4. package/dist/AudioUploader-2WITC5YR-4WGBUCEB.js.map +1 -0
  5. package/dist/AudioUploader-2WITC5YR-GCKVRJAT.cjs +298 -0
  6. package/dist/AudioUploader-2WITC5YR-GCKVRJAT.cjs.map +1 -0
  7. package/dist/BoxUploader-VE5LRJ7M-CWGNYYJV.js +170 -0
  8. package/dist/BoxUploader-VE5LRJ7M-CWGNYYJV.js.map +1 -0
  9. package/dist/BoxUploader-VE5LRJ7M-IE7LYW5P.cjs +170 -0
  10. package/dist/BoxUploader-VE5LRJ7M-IE7LYW5P.cjs.map +1 -0
  11. package/dist/CameraUploader-WF5A6UIS-3KBW647M.cjs +628 -0
  12. package/dist/CameraUploader-WF5A6UIS-3KBW647M.cjs.map +1 -0
  13. package/dist/CameraUploader-WF5A6UIS-DONVXSEZ.js +628 -0
  14. package/dist/CameraUploader-WF5A6UIS-DONVXSEZ.js.map +1 -0
  15. package/dist/DropboxUploader-VMUYG3OP-7FKTLIIL.cjs +172 -0
  16. package/dist/DropboxUploader-VMUYG3OP-7FKTLIIL.cjs.map +1 -0
  17. package/dist/DropboxUploader-VMUYG3OP-DBUPHIG7.js +172 -0
  18. package/dist/DropboxUploader-VMUYG3OP-DBUPHIG7.js.map +1 -0
  19. package/dist/GoogleDriveUploader-YA56X3QR-FMS6MTYU.js +175 -0
  20. package/dist/GoogleDriveUploader-YA56X3QR-FMS6MTYU.js.map +1 -0
  21. package/dist/GoogleDriveUploader-YA56X3QR-OR3CQLX2.cjs +175 -0
  22. package/dist/GoogleDriveUploader-YA56X3QR-OR3CQLX2.cjs.map +1 -0
  23. package/dist/ImageEditorInline-N2NSAODR-QWXPP3ON.js +184 -0
  24. package/dist/ImageEditorInline-N2NSAODR-QWXPP3ON.js.map +1 -0
  25. package/dist/ImageEditorInline-N2NSAODR-ZVAM6EOA.cjs +184 -0
  26. package/dist/ImageEditorInline-N2NSAODR-ZVAM6EOA.cjs.map +1 -0
  27. package/dist/ImageEditorModal-CWKMDVPY-PRD43JPH.cjs +236 -0
  28. package/dist/ImageEditorModal-CWKMDVPY-PRD43JPH.cjs.map +1 -0
  29. package/dist/ImageEditorModal-CWKMDVPY-ZRPTYHYN.js +236 -0
  30. package/dist/ImageEditorModal-CWKMDVPY-ZRPTYHYN.js.map +1 -0
  31. package/dist/OneDriveUploader-I25Y6AJP-FVXK6RGT.js +173 -0
  32. package/dist/OneDriveUploader-I25Y6AJP-FVXK6RGT.js.map +1 -0
  33. package/dist/OneDriveUploader-I25Y6AJP-GBOBEJQR.cjs +173 -0
  34. package/dist/OneDriveUploader-I25Y6AJP-GBOBEJQR.cjs.map +1 -0
  35. package/dist/ScreenCaptureUploader-WKDO4S75-3TT6GNEN.js +286 -0
  36. package/dist/ScreenCaptureUploader-WKDO4S75-3TT6GNEN.js.map +1 -0
  37. package/dist/ScreenCaptureUploader-WKDO4S75-G7ADH264.cjs +286 -0
  38. package/dist/ScreenCaptureUploader-WKDO4S75-G7ADH264.cjs.map +1 -0
  39. package/dist/chunk-2XFVSPFN.cjs +293 -0
  40. package/dist/chunk-2XFVSPFN.cjs.map +1 -0
  41. package/dist/chunk-7JLN2HMZ.cjs +4296 -0
  42. package/dist/chunk-7JLN2HMZ.cjs.map +1 -0
  43. package/dist/chunk-BVMKSTAE.js +4296 -0
  44. package/dist/chunk-BVMKSTAE.js.map +1 -0
  45. package/dist/chunk-C7QBCXAH.js +39 -0
  46. package/dist/chunk-C7QBCXAH.js.map +1 -0
  47. package/dist/chunk-CR6CXFRP.js +195 -0
  48. package/dist/chunk-CR6CXFRP.js.map +1 -0
  49. package/dist/chunk-ETIJATY7.cjs +39 -0
  50. package/dist/chunk-ETIJATY7.cjs.map +1 -0
  51. package/dist/chunk-FH3LYESR.js +411 -0
  52. package/dist/chunk-FH3LYESR.js.map +1 -0
  53. package/dist/chunk-GKMTOOTQ.cjs +411 -0
  54. package/dist/chunk-GKMTOOTQ.cjs.map +1 -0
  55. package/dist/chunk-KHH3WHWU.js +74 -0
  56. package/dist/chunk-KHH3WHWU.js.map +1 -0
  57. package/dist/chunk-V2O5HRJV.cjs +74 -0
  58. package/dist/chunk-V2O5HRJV.cjs.map +1 -0
  59. package/dist/chunk-WCI3AGJV.js +831 -0
  60. package/dist/chunk-WCI3AGJV.js.map +1 -0
  61. package/dist/chunk-YWJHE7U4.cjs +195 -0
  62. package/dist/chunk-YWJHE7U4.cjs.map +1 -0
  63. package/dist/chunk-ZGWETRKI.js +293 -0
  64. package/dist/chunk-ZGWETRKI.js.map +1 -0
  65. package/dist/chunk-ZKZJ5PPP.cjs +831 -0
  66. package/dist/chunk-ZKZJ5PPP.cjs.map +1 -0
  67. package/dist/filerobot-bridge-52YH7W2M.cjs +92 -0
  68. package/dist/filerobot-bridge-52YH7W2M.cjs.map +1 -0
  69. package/dist/filerobot-bridge-ED4XMHX4.js +92 -0
  70. package/dist/filerobot-bridge-ED4XMHX4.js.map +1 -0
  71. package/dist/filerobot-island.css +97 -0
  72. package/dist/filerobot-island.css.map +1 -0
  73. package/dist/filerobot-island.js +77951 -0
  74. package/dist/filerobot-island.js.map +1 -0
  75. package/dist/index.cjs +5600 -0
  76. package/dist/index.cjs.map +1 -0
  77. package/dist/index.d.cts +1 -0
  78. package/dist/index.d.ts +1 -0
  79. package/dist/index.js +5600 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/styles.d.ts +4 -0
  82. package/dist/tailwind-prefixed.css +2529 -0
  83. package/package.json +130 -0
@@ -0,0 +1,236 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } }
2
+
3
+
4
+ var _chunkYWJHE7U4cjs = require('./chunk-YWJHE7U4.cjs');
5
+
6
+
7
+
8
+
9
+
10
+ var _chunk2XFVSPFNcjs = require('./chunk-2XFVSPFN.cjs');
11
+
12
+
13
+
14
+
15
+
16
+ var _chunkGKMTOOTQcjs = require('./chunk-GKMTOOTQ.cjs');
17
+
18
+ // ../react/dist/ImageEditorModal-CWKMDVPY.js
19
+ _chunkGKMTOOTQcjs.init_compat_module.call(void 0, );
20
+ _chunkGKMTOOTQcjs.init_compat_module.call(void 0, );
21
+ var _internal = require('@useupup/core/internal');
22
+ var ImageEditorModal_default = _chunkGKMTOOTQcjs.N.call(void 0, function ImageEditorModal(props) {
23
+ var _a, _b;
24
+ const { file, onClose, onSave } = props;
25
+ const { imageEditor: editorConfig } = _chunk2XFVSPFNcjs.useUploaderOptions.call(void 0, );
26
+ const { isDark: dark } = _chunk2XFVSPFNcjs.useUploaderTheme.call(void 0, );
27
+ const overlayRef = (0, _chunkGKMTOOTQcjs.compat_module_exports.useRef)(null);
28
+ const previousFocusRef = (0, _chunkGKMTOOTQcjs.compat_module_exports.useRef)(null);
29
+ const [EditorComponent, setEditorComponent] = (0, _chunkGKMTOOTQcjs.compat_module_exports.useState)(null);
30
+ const [editorConstants, setEditorConstants] = (0, _chunkGKMTOOTQcjs.compat_module_exports.useState)(null);
31
+ const [loadError, setLoadError] = (0, _chunkGKMTOOTQcjs.compat_module_exports.useState)(null);
32
+ const [StyleSheetMgr, setStyleSheetMgr] = (0, _chunkGKMTOOTQcjs.compat_module_exports.useState)(null);
33
+ (0, _chunkGKMTOOTQcjs.compat_module_exports.useEffect)(() => {
34
+ if (typeof window === "undefined") return;
35
+ let cancelled = false;
36
+ void (async () => {
37
+ try {
38
+ const [mod, scMod] = await Promise.all([
39
+ Promise.resolve().then(() => _interopRequireWildcard(require("./filerobot-bridge-52YH7W2M.cjs"))),
40
+ Promise.resolve().then(() => _interopRequireWildcard(require("styled-components"))).catch(() => null)
41
+ ]);
42
+ if (cancelled) return;
43
+ setEditorComponent(
44
+ () => mod.default
45
+ );
46
+ setEditorConstants({
47
+ TABS: mod.TABS,
48
+ TOOLS: mod.TOOLS
49
+ });
50
+ if (scMod == null ? void 0 : scMod.StyleSheetManager) {
51
+ setStyleSheetMgr(
52
+ () => scMod.StyleSheetManager
53
+ );
54
+ }
55
+ } catch (e2) {
56
+ if (cancelled) return;
57
+ setLoadError(
58
+ 'Image editor failed to load. Make sure "react-filerobot-image-editor" is installed.'
59
+ );
60
+ }
61
+ })();
62
+ return () => {
63
+ cancelled = true;
64
+ };
65
+ }, []);
66
+ (0, _chunkGKMTOOTQcjs.compat_module_exports.useEffect)(() => {
67
+ previousFocusRef.current = document.activeElement;
68
+ return () => {
69
+ if (previousFocusRef.current instanceof HTMLElement) {
70
+ previousFocusRef.current.focus();
71
+ }
72
+ };
73
+ }, []);
74
+ (0, _chunkGKMTOOTQcjs.compat_module_exports.useEffect)(() => {
75
+ var _a2;
76
+ (_a2 = overlayRef.current) == null ? void 0 : _a2.focus();
77
+ }, []);
78
+ const handleKeyDown = (0, _chunkGKMTOOTQcjs.compat_module_exports.useCallback)(
79
+ (e) => {
80
+ var _a2;
81
+ if (e.key === "Escape") {
82
+ e.stopPropagation();
83
+ onClose();
84
+ }
85
+ if (e.key === "Tab") {
86
+ const focusable = (_a2 = overlayRef.current) == null ? void 0 : _a2.querySelectorAll(
87
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
88
+ );
89
+ if (!focusable || focusable.length === 0) return;
90
+ const first = focusable[0];
91
+ const last = focusable[focusable.length - 1];
92
+ if (!first || !last) return;
93
+ if (e.shiftKey) {
94
+ if (document.activeElement === first) {
95
+ e.preventDefault();
96
+ last.focus();
97
+ }
98
+ } else {
99
+ if (document.activeElement === last) {
100
+ e.preventDefault();
101
+ first.focus();
102
+ }
103
+ }
104
+ }
105
+ },
106
+ [onClose]
107
+ );
108
+ const handleContentClick = (0, _chunkGKMTOOTQcjs.compat_module_exports.useCallback)((e) => {
109
+ e.stopPropagation();
110
+ }, []);
111
+ const handleEditorSave = (0, _chunkGKMTOOTQcjs.compat_module_exports.useCallback)(
112
+ (imageData) => {
113
+ if (!imageData.imageBase64) return;
114
+ const dataURL = imageData.imageBase64.startsWith("data:") ? imageData.imageBase64 : `data:${imageData.mimeType || file.type};base64,${imageData.imageBase64}`;
115
+ onSave(dataURL, imageData.mimeType);
116
+ },
117
+ [file.type, onSave]
118
+ );
119
+ const shouldForwardProp = (0, _chunkGKMTOOTQcjs.compat_module_exports.useCallback)(
120
+ (prop) => !FILEROBOT_CUSTOM_PROPS.has(prop),
121
+ []
122
+ );
123
+ const resolvedTabs = (editorConstants == null ? void 0 : editorConstants.TABS) ? (_a = editorConfig.tabs) == null ? void 0 : _a.map(
124
+ (tab) => {
125
+ var _a2;
126
+ return (_a2 = editorConstants.TABS[tab.toUpperCase()]) != null ? _a2 : tab;
127
+ }
128
+ ) : void 0;
129
+ const filerobotTheme = (0, _chunkGKMTOOTQcjs.compat_module_exports.useMemo)(() => _chunkYWJHE7U4cjs.getFilerobotTheme.call(void 0, dark), [dark]);
130
+ const editorCssOverrides = (0, _chunkGKMTOOTQcjs.compat_module_exports.useMemo)(
131
+ () => _chunkYWJHE7U4cjs.getImageEditorCssOverrides.call(void 0, dark),
132
+ [dark]
133
+ );
134
+ return _chunkGKMTOOTQcjs.$.call(void 0,
135
+ /* @__PURE__ */ _chunk2XFVSPFNcjs.u.call(void 0, "div", { className: "upup-scope", "data-upup-slot": "image-editor", children: /* @__PURE__ */ _chunk2XFVSPFNcjs.u.call(void 0,
136
+ "div",
137
+ {
138
+ ref: overlayRef,
139
+ role: "dialog",
140
+ "aria-modal": "true",
141
+ "aria-label": `Edit image: ${file.name}`,
142
+ tabIndex: -1,
143
+ className: "upup-fixed upup-inset-0 upup-z-[2147483647] upup-flex upup-items-center upup-justify-center upup-bg-black/60 upup-outline-none",
144
+ onClick: onClose,
145
+ onKeyDown: handleKeyDown,
146
+ children: /* @__PURE__ */ _chunk2XFVSPFNcjs.u.call(void 0,
147
+ "div",
148
+ {
149
+ className: _internal.cn.call(void 0,
150
+ "upup-relative upup-flex upup-h-[90vh] upup-w-[90vw] upup-max-w-5xl upup-flex-col upup-overflow-hidden upup-rounded-xl upup-shadow-2xl upup-ring-1",
151
+ dark ? "upup-bg-[#232323] upup-ring-white/[0.08]" : "upup-bg-white upup-ring-black/10"
152
+ ),
153
+ "data-upup-theme": dark ? "dark" : "light",
154
+ onClick: handleContentClick,
155
+ children: [
156
+ editorCssOverrides && /* @__PURE__ */ _chunk2XFVSPFNcjs.u.call(void 0,
157
+ "style",
158
+ {
159
+ dangerouslySetInnerHTML: {
160
+ __html: editorCssOverrides
161
+ }
162
+ }
163
+ ),
164
+ /* @__PURE__ */ _chunk2XFVSPFNcjs.u.call(void 0, "div", { className: "upup-relative upup-flex-1 upup-overflow-hidden", children: [
165
+ loadError && /* @__PURE__ */ _chunk2XFVSPFNcjs.u.call(void 0, "div", { className: "upup-flex upup-h-full upup-items-center upup-justify-center upup-p-8", children: /* @__PURE__ */ _chunk2XFVSPFNcjs.u.call(void 0,
166
+ "p",
167
+ {
168
+ className: _internal.cn.call(void 0,
169
+ "upup-text-center upup-text-sm",
170
+ dark ? "upup-text-red-400" : "upup-text-red-600"
171
+ ),
172
+ children: loadError
173
+ }
174
+ ) }),
175
+ !EditorComponent && !loadError && /* @__PURE__ */ _chunk2XFVSPFNcjs.u.call(void 0, "div", { className: "upup-flex upup-h-full upup-items-center upup-justify-center", children: /* @__PURE__ */ _chunk2XFVSPFNcjs.u.call(void 0,
176
+ "div",
177
+ {
178
+ className: _internal.cn.call(void 0,
179
+ "upup-h-8 upup-w-8 upup-animate-spin upup-rounded-full upup-border-2 upup-border-t-transparent",
180
+ dark ? "upup-border-[#38bdf8]" : "upup-border-[#0ea5e9]"
181
+ )
182
+ }
183
+ ) }),
184
+ EditorComponent && !loadError && /* @__PURE__ */ _chunk2XFVSPFNcjs.u.call(void 0,
185
+ EditorWrapper,
186
+ {
187
+ StyleSheetMgr,
188
+ shouldForwardProp,
189
+ children: /* @__PURE__ */ _chunk2XFVSPFNcjs.u.call(void 0,
190
+ EditorComponent,
191
+ {
192
+ source: (_b = file.url) != null ? _b : "",
193
+ onSave: handleEditorSave,
194
+ onClose,
195
+ savingPixelRatio: 4,
196
+ previewPixelRatio: 4,
197
+ theme: filerobotTheme,
198
+ defaultTabId: (editorConstants == null ? void 0 : editorConstants.TABS) ? editorConstants.TABS.ADJUST : void 0,
199
+ ...resolvedTabs !== void 0 ? { tabsIds: resolvedTabs } : {},
200
+ onBeforeSave: () => false
201
+ }
202
+ )
203
+ }
204
+ )
205
+ ] })
206
+ ]
207
+ }
208
+ )
209
+ }
210
+ ) }),
211
+ document.body
212
+ );
213
+ });
214
+ var FILEROBOT_CUSTOM_PROPS = /* @__PURE__ */ new Set([
215
+ "active",
216
+ "noMargin",
217
+ "showBackButton",
218
+ "isPhoneScreen",
219
+ "showTabsDrawer",
220
+ "hasChildren",
221
+ "isAccordion"
222
+ ]);
223
+ function EditorWrapper({
224
+ children,
225
+ StyleSheetMgr,
226
+ shouldForwardProp
227
+ }) {
228
+ if (StyleSheetMgr) {
229
+ return /* @__PURE__ */ _chunk2XFVSPFNcjs.u.call(void 0, StyleSheetMgr, { shouldForwardProp, children });
230
+ }
231
+ return /* @__PURE__ */ _chunk2XFVSPFNcjs.u.call(void 0, _chunk2XFVSPFNcjs.Fragment, { children });
232
+ }
233
+
234
+
235
+ exports.default = ImageEditorModal_default;
236
+ //# sourceMappingURL=ImageEditorModal-CWKMDVPY-PRD43JPH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["c:\\Users\\amind\\OneDrive\\Desktop\\Projects\\INTERNAL\\upup\\packages\\preact\\dist\\ImageEditorModal-CWKMDVPY-PRD43JPH.cjs"],"names":[],"mappings":"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","file":"C:\\Users\\amind\\OneDrive\\Desktop\\Projects\\INTERNAL\\upup\\packages\\preact\\dist\\ImageEditorModal-CWKMDVPY-PRD43JPH.cjs","sourcesContent":[null]}
@@ -0,0 +1,236 @@
1
+ import {
2
+ getFilerobotTheme,
3
+ getImageEditorCssOverrides
4
+ } from "./chunk-CR6CXFRP.js";
5
+ import {
6
+ Fragment,
7
+ u,
8
+ useUploaderOptions,
9
+ useUploaderTheme
10
+ } from "./chunk-ZGWETRKI.js";
11
+ import {
12
+ $,
13
+ N,
14
+ compat_module_exports,
15
+ init_compat_module
16
+ } from "./chunk-FH3LYESR.js";
17
+
18
+ // ../react/dist/ImageEditorModal-CWKMDVPY.js
19
+ init_compat_module();
20
+ init_compat_module();
21
+ import { cn } from "@useupup/core/internal";
22
+ var ImageEditorModal_default = N(function ImageEditorModal(props) {
23
+ var _a, _b;
24
+ const { file, onClose, onSave } = props;
25
+ const { imageEditor: editorConfig } = useUploaderOptions();
26
+ const { isDark: dark } = useUploaderTheme();
27
+ const overlayRef = (0, compat_module_exports.useRef)(null);
28
+ const previousFocusRef = (0, compat_module_exports.useRef)(null);
29
+ const [EditorComponent, setEditorComponent] = (0, compat_module_exports.useState)(null);
30
+ const [editorConstants, setEditorConstants] = (0, compat_module_exports.useState)(null);
31
+ const [loadError, setLoadError] = (0, compat_module_exports.useState)(null);
32
+ const [StyleSheetMgr, setStyleSheetMgr] = (0, compat_module_exports.useState)(null);
33
+ (0, compat_module_exports.useEffect)(() => {
34
+ if (typeof window === "undefined") return;
35
+ let cancelled = false;
36
+ void (async () => {
37
+ try {
38
+ const [mod, scMod] = await Promise.all([
39
+ import("./filerobot-bridge-ED4XMHX4.js"),
40
+ import("styled-components").catch(() => null)
41
+ ]);
42
+ if (cancelled) return;
43
+ setEditorComponent(
44
+ () => mod.default
45
+ );
46
+ setEditorConstants({
47
+ TABS: mod.TABS,
48
+ TOOLS: mod.TOOLS
49
+ });
50
+ if (scMod == null ? void 0 : scMod.StyleSheetManager) {
51
+ setStyleSheetMgr(
52
+ () => scMod.StyleSheetManager
53
+ );
54
+ }
55
+ } catch {
56
+ if (cancelled) return;
57
+ setLoadError(
58
+ 'Image editor failed to load. Make sure "react-filerobot-image-editor" is installed.'
59
+ );
60
+ }
61
+ })();
62
+ return () => {
63
+ cancelled = true;
64
+ };
65
+ }, []);
66
+ (0, compat_module_exports.useEffect)(() => {
67
+ previousFocusRef.current = document.activeElement;
68
+ return () => {
69
+ if (previousFocusRef.current instanceof HTMLElement) {
70
+ previousFocusRef.current.focus();
71
+ }
72
+ };
73
+ }, []);
74
+ (0, compat_module_exports.useEffect)(() => {
75
+ var _a2;
76
+ (_a2 = overlayRef.current) == null ? void 0 : _a2.focus();
77
+ }, []);
78
+ const handleKeyDown = (0, compat_module_exports.useCallback)(
79
+ (e) => {
80
+ var _a2;
81
+ if (e.key === "Escape") {
82
+ e.stopPropagation();
83
+ onClose();
84
+ }
85
+ if (e.key === "Tab") {
86
+ const focusable = (_a2 = overlayRef.current) == null ? void 0 : _a2.querySelectorAll(
87
+ 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
88
+ );
89
+ if (!focusable || focusable.length === 0) return;
90
+ const first = focusable[0];
91
+ const last = focusable[focusable.length - 1];
92
+ if (!first || !last) return;
93
+ if (e.shiftKey) {
94
+ if (document.activeElement === first) {
95
+ e.preventDefault();
96
+ last.focus();
97
+ }
98
+ } else {
99
+ if (document.activeElement === last) {
100
+ e.preventDefault();
101
+ first.focus();
102
+ }
103
+ }
104
+ }
105
+ },
106
+ [onClose]
107
+ );
108
+ const handleContentClick = (0, compat_module_exports.useCallback)((e) => {
109
+ e.stopPropagation();
110
+ }, []);
111
+ const handleEditorSave = (0, compat_module_exports.useCallback)(
112
+ (imageData) => {
113
+ if (!imageData.imageBase64) return;
114
+ const dataURL = imageData.imageBase64.startsWith("data:") ? imageData.imageBase64 : `data:${imageData.mimeType || file.type};base64,${imageData.imageBase64}`;
115
+ onSave(dataURL, imageData.mimeType);
116
+ },
117
+ [file.type, onSave]
118
+ );
119
+ const shouldForwardProp = (0, compat_module_exports.useCallback)(
120
+ (prop) => !FILEROBOT_CUSTOM_PROPS.has(prop),
121
+ []
122
+ );
123
+ const resolvedTabs = (editorConstants == null ? void 0 : editorConstants.TABS) ? (_a = editorConfig.tabs) == null ? void 0 : _a.map(
124
+ (tab) => {
125
+ var _a2;
126
+ return (_a2 = editorConstants.TABS[tab.toUpperCase()]) != null ? _a2 : tab;
127
+ }
128
+ ) : void 0;
129
+ const filerobotTheme = (0, compat_module_exports.useMemo)(() => getFilerobotTheme(dark), [dark]);
130
+ const editorCssOverrides = (0, compat_module_exports.useMemo)(
131
+ () => getImageEditorCssOverrides(dark),
132
+ [dark]
133
+ );
134
+ return $(
135
+ /* @__PURE__ */ u("div", { className: "upup-scope", "data-upup-slot": "image-editor", children: /* @__PURE__ */ u(
136
+ "div",
137
+ {
138
+ ref: overlayRef,
139
+ role: "dialog",
140
+ "aria-modal": "true",
141
+ "aria-label": `Edit image: ${file.name}`,
142
+ tabIndex: -1,
143
+ className: "upup-fixed upup-inset-0 upup-z-[2147483647] upup-flex upup-items-center upup-justify-center upup-bg-black/60 upup-outline-none",
144
+ onClick: onClose,
145
+ onKeyDown: handleKeyDown,
146
+ children: /* @__PURE__ */ u(
147
+ "div",
148
+ {
149
+ className: cn(
150
+ "upup-relative upup-flex upup-h-[90vh] upup-w-[90vw] upup-max-w-5xl upup-flex-col upup-overflow-hidden upup-rounded-xl upup-shadow-2xl upup-ring-1",
151
+ dark ? "upup-bg-[#232323] upup-ring-white/[0.08]" : "upup-bg-white upup-ring-black/10"
152
+ ),
153
+ "data-upup-theme": dark ? "dark" : "light",
154
+ onClick: handleContentClick,
155
+ children: [
156
+ editorCssOverrides && /* @__PURE__ */ u(
157
+ "style",
158
+ {
159
+ dangerouslySetInnerHTML: {
160
+ __html: editorCssOverrides
161
+ }
162
+ }
163
+ ),
164
+ /* @__PURE__ */ u("div", { className: "upup-relative upup-flex-1 upup-overflow-hidden", children: [
165
+ loadError && /* @__PURE__ */ u("div", { className: "upup-flex upup-h-full upup-items-center upup-justify-center upup-p-8", children: /* @__PURE__ */ u(
166
+ "p",
167
+ {
168
+ className: cn(
169
+ "upup-text-center upup-text-sm",
170
+ dark ? "upup-text-red-400" : "upup-text-red-600"
171
+ ),
172
+ children: loadError
173
+ }
174
+ ) }),
175
+ !EditorComponent && !loadError && /* @__PURE__ */ u("div", { className: "upup-flex upup-h-full upup-items-center upup-justify-center", children: /* @__PURE__ */ u(
176
+ "div",
177
+ {
178
+ className: cn(
179
+ "upup-h-8 upup-w-8 upup-animate-spin upup-rounded-full upup-border-2 upup-border-t-transparent",
180
+ dark ? "upup-border-[#38bdf8]" : "upup-border-[#0ea5e9]"
181
+ )
182
+ }
183
+ ) }),
184
+ EditorComponent && !loadError && /* @__PURE__ */ u(
185
+ EditorWrapper,
186
+ {
187
+ StyleSheetMgr,
188
+ shouldForwardProp,
189
+ children: /* @__PURE__ */ u(
190
+ EditorComponent,
191
+ {
192
+ source: (_b = file.url) != null ? _b : "",
193
+ onSave: handleEditorSave,
194
+ onClose,
195
+ savingPixelRatio: 4,
196
+ previewPixelRatio: 4,
197
+ theme: filerobotTheme,
198
+ defaultTabId: (editorConstants == null ? void 0 : editorConstants.TABS) ? editorConstants.TABS.ADJUST : void 0,
199
+ ...resolvedTabs !== void 0 ? { tabsIds: resolvedTabs } : {},
200
+ onBeforeSave: () => false
201
+ }
202
+ )
203
+ }
204
+ )
205
+ ] })
206
+ ]
207
+ }
208
+ )
209
+ }
210
+ ) }),
211
+ document.body
212
+ );
213
+ });
214
+ var FILEROBOT_CUSTOM_PROPS = /* @__PURE__ */ new Set([
215
+ "active",
216
+ "noMargin",
217
+ "showBackButton",
218
+ "isPhoneScreen",
219
+ "showTabsDrawer",
220
+ "hasChildren",
221
+ "isAccordion"
222
+ ]);
223
+ function EditorWrapper({
224
+ children,
225
+ StyleSheetMgr,
226
+ shouldForwardProp
227
+ }) {
228
+ if (StyleSheetMgr) {
229
+ return /* @__PURE__ */ u(StyleSheetMgr, { shouldForwardProp, children });
230
+ }
231
+ return /* @__PURE__ */ u(Fragment, { children });
232
+ }
233
+ export {
234
+ ImageEditorModal_default as default
235
+ };
236
+ //# sourceMappingURL=ImageEditorModal-CWKMDVPY-ZRPTYHYN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../react/src/components/ImageEditorModal.tsx"],"sourcesContent":["import React, {\r\n ComponentType,\r\n memo,\r\n useCallback,\r\n useEffect,\r\n useMemo,\r\n useRef,\r\n useState,\r\n} from 'react'\r\nimport { createPortal } from 'react-dom'\r\nimport { cn } from '@useupup/core/internal'\r\nimport type { UploadFile } from '@useupup/core'\r\nimport {\r\n useUploaderOptions,\r\n useUploaderTheme,\r\n} from '../context/UploaderContext'\r\nimport {\r\n getFilerobotTheme,\r\n getImageEditorCssOverrides,\r\n} from '../lib/imageEditorHelpers'\r\n\r\ntype Props = {\r\n file: UploadFile\r\n onClose: () => void\r\n onSave: (editedImageData: string, mimeType?: string) => void\r\n}\r\n\r\n/**\r\n * Filerobot's onBeforeSave / onSave callback signature.\r\n * We only use the imageData.imageBase64 field.\r\n */\r\ntype FilerobotImageState = {\r\n imageBase64?: string\r\n fullName?: string\r\n mimeType?: string\r\n width?: number\r\n height?: number\r\n}\r\n\r\ntype FilerobotDesignState = Record<string, unknown>\r\n\r\n/**\r\n * The props shape of the default-exported <FilerobotImageEditor> component.\r\n * We only type the subset we use to keep this lightweight.\r\n */\r\ntype FilerobotEditorProps = {\r\n source: string\r\n savingPixelRatio?: number\r\n previewPixelRatio?: number\r\n onSave?: (\r\n imageData: FilerobotImageState,\r\n designState: FilerobotDesignState,\r\n ) => void\r\n onClose?: () => void\r\n onBeforeSave?: (imageData: FilerobotImageState) => boolean | undefined\r\n annotationsCommon?: Record<string, unknown>\r\n Rotate?: Record<string, unknown>\r\n Crop?: Record<string, unknown>\r\n tabsIds?: unknown[]\r\n defaultTabId?: unknown\r\n defaultToolId?: unknown\r\n [key: string]: unknown\r\n}\r\n\r\n/**\r\n * Accessible modal shell for the image editor.\r\n * Lazy-loads `react-filerobot-image-editor` at runtime so the dependency\r\n * is never bundled into the core entry point.\r\n *\r\n * - Focus trap: keeps focus inside the modal while open.\r\n * - ESC closes.\r\n * - Restores focus to the triggering element on close.\r\n * - aria-label / role=\"dialog\".\r\n */\r\nexport default memo(function ImageEditorModal(props: Props) {\r\n const { file, onClose, onSave } = props\r\n const { imageEditor: editorConfig } = useUploaderOptions()\r\n const { isDark: dark } = useUploaderTheme()\r\n\r\n const overlayRef = useRef<HTMLDivElement>(null)\r\n const previousFocusRef = useRef<Element | null>(null)\r\n\r\n // Lazy-loaded editor component + TABS/TOOLS constants\r\n const [EditorComponent, setEditorComponent] =\r\n useState<ComponentType<FilerobotEditorProps> | null>(null)\r\n const [editorConstants, setEditorConstants] = useState<{\r\n TABS: Record<string, unknown>\r\n TOOLS: Record<string, unknown>\r\n } | null>(null)\r\n const [loadError, setLoadError] = useState<string | null>(null)\r\n\r\n // StyleSheetManager from styled-components to filter custom props\r\n // that filerobot passes to DOM elements (fixes React 19 warnings/errors).\r\n const [StyleSheetMgr, setStyleSheetMgr] = useState<ComponentType<{\r\n shouldForwardProp?: (prop: string) => boolean\r\n children: React.ReactNode\r\n }> | null>(null)\r\n\r\n // Dynamically import react-filerobot-image-editor (browser only)\r\n useEffect(() => {\r\n if (typeof window === 'undefined') return\r\n\r\n let cancelled = false\r\n void (async () => {\r\n try {\r\n const [mod, scMod] = await Promise.all([\r\n import('react-filerobot-image-editor'),\r\n import('styled-components').catch(() => null),\r\n ])\r\n if (cancelled) return\r\n setEditorComponent(\r\n () => mod.default as ComponentType<FilerobotEditorProps>,\r\n )\r\n setEditorConstants({\r\n TABS: (mod as Record<string, unknown>).TABS as Record<\r\n string,\r\n unknown\r\n >,\r\n TOOLS: (mod as Record<string, unknown>).TOOLS as Record<\r\n string,\r\n unknown\r\n >,\r\n })\r\n if (scMod?.StyleSheetManager) {\r\n setStyleSheetMgr(\r\n () =>\r\n scMod.StyleSheetManager as ComponentType<{\r\n shouldForwardProp?: (prop: string) => boolean\r\n children: React.ReactNode\r\n }>,\r\n )\r\n }\r\n } catch {\r\n // upup-catch: dynamic import failure (editor dep not installed) is surfaced to the user via setLoadError\r\n if (cancelled) return\r\n setLoadError(\r\n 'Image editor failed to load. Make sure \"react-filerobot-image-editor\" is installed.',\r\n )\r\n }\r\n })()\r\n\r\n return () => {\r\n cancelled = true\r\n }\r\n }, [])\r\n\r\n // Capture the element that had focus before the modal opened\r\n // and restore it when the modal closes.\r\n useEffect(() => {\r\n previousFocusRef.current = document.activeElement\r\n return () => {\r\n if (previousFocusRef.current instanceof HTMLElement) {\r\n previousFocusRef.current.focus()\r\n }\r\n }\r\n }, [])\r\n\r\n // Auto-focus the overlay so keyboard events work immediately.\r\n useEffect(() => {\r\n overlayRef.current?.focus()\r\n }, [])\r\n\r\n // Close on ESC\r\n const handleKeyDown = useCallback(\r\n (e: React.KeyboardEvent) => {\r\n if (e.key === 'Escape') {\r\n e.stopPropagation()\r\n onClose()\r\n }\r\n\r\n // Basic focus trap: Tab cycles within the modal.\r\n if (e.key === 'Tab') {\r\n const focusable =\r\n overlayRef.current?.querySelectorAll<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\r\n )\r\n if (!focusable || focusable.length === 0) return\r\n const first = focusable[0]\r\n const last = focusable[focusable.length - 1]\r\n if (!first || !last) return\r\n\r\n if (e.shiftKey) {\r\n if (document.activeElement === first) {\r\n e.preventDefault()\r\n last.focus()\r\n }\r\n } else {\r\n if (document.activeElement === last) {\r\n e.preventDefault()\r\n first.focus()\r\n }\r\n }\r\n }\r\n },\r\n [onClose],\r\n )\r\n\r\n // Prevent clicks on the inner content from closing the modal\r\n const handleContentClick = useCallback((e: React.MouseEvent) => {\r\n e.stopPropagation()\r\n }, [])\r\n\r\n // Filerobot onSave handler\r\n const handleEditorSave = useCallback(\r\n (imageData: FilerobotImageState) => {\r\n if (!imageData.imageBase64) return\r\n const dataURL = imageData.imageBase64.startsWith('data:')\r\n ? imageData.imageBase64\r\n : `data:${imageData.mimeType || file.type};base64,${\r\n imageData.imageBase64\r\n }`\r\n onSave(dataURL, imageData.mimeType)\r\n },\r\n [file.type, onSave],\r\n )\r\n\r\n // Props that filerobot-image-editor's styled-components pass to DOM elements.\r\n // Filter them out via StyleSheetManager to avoid React 19 warnings / errors.\r\n const shouldForwardProp = useCallback(\r\n (prop: string) => !FILEROBOT_CUSTOM_PROPS.has(prop),\r\n [],\r\n )\r\n\r\n // Build Filerobot tabs from config\r\n const resolvedTabs = editorConstants?.TABS\r\n ? editorConfig.tabs?.map(\r\n tab => editorConstants.TABS[tab.toUpperCase()] ?? tab,\r\n )\r\n : undefined\r\n\r\n const filerobotTheme = useMemo(() => getFilerobotTheme(dark), [dark])\r\n const editorCssOverrides = useMemo(\r\n () => getImageEditorCssOverrides(dark),\r\n [dark],\r\n )\r\n\r\n return createPortal(\r\n <div className=\"upup-scope\" data-upup-slot=\"image-editor\">\r\n <div\r\n ref={overlayRef}\r\n role=\"dialog\"\r\n aria-modal=\"true\"\r\n aria-label={`Edit image: ${file.name}`}\r\n tabIndex={-1}\r\n className=\"upup-fixed upup-inset-0 upup-z-[2147483647] upup-flex upup-items-center upup-justify-center upup-bg-black/60 upup-outline-none\"\r\n onClick={onClose}\r\n onKeyDown={handleKeyDown}\r\n >\r\n <div\r\n className={cn(\r\n 'upup-relative upup-flex upup-h-[90vh] upup-w-[90vw] upup-max-w-5xl upup-flex-col upup-overflow-hidden upup-rounded-xl upup-shadow-2xl upup-ring-1',\r\n dark\r\n ? 'upup-bg-[#232323] upup-ring-white/[0.08]'\r\n : 'upup-bg-white upup-ring-black/10',\r\n )}\r\n data-upup-theme={dark ? 'dark' : 'light'}\r\n onClick={handleContentClick}\r\n >\r\n {editorCssOverrides && (\r\n <style\r\n dangerouslySetInnerHTML={{\r\n __html: editorCssOverrides,\r\n }}\r\n />\r\n )}\r\n\r\n {/* Filerobot provides its own top bar with save / close */}\r\n <div className=\"upup-relative upup-flex-1 upup-overflow-hidden\">\r\n {loadError && (\r\n <div className=\"upup-flex upup-h-full upup-items-center upup-justify-center upup-p-8\">\r\n <p\r\n className={cn(\r\n 'upup-text-center upup-text-sm',\r\n dark\r\n ? 'upup-text-red-400'\r\n : 'upup-text-red-600',\r\n )}\r\n >\r\n {loadError}\r\n </p>\r\n </div>\r\n )}\r\n\r\n {!EditorComponent && !loadError && (\r\n <div className=\"upup-flex upup-h-full upup-items-center upup-justify-center\">\r\n <div\r\n className={cn(\r\n 'upup-h-8 upup-w-8 upup-animate-spin upup-rounded-full upup-border-2 upup-border-t-transparent',\r\n dark\r\n ? 'upup-border-[#38bdf8]'\r\n : 'upup-border-[#0ea5e9]',\r\n )}\r\n />\r\n </div>\r\n )}\r\n\r\n {EditorComponent && !loadError && (\r\n <EditorWrapper\r\n StyleSheetMgr={StyleSheetMgr}\r\n shouldForwardProp={shouldForwardProp}\r\n >\r\n <EditorComponent\r\n source={file.url ?? ''}\r\n onSave={handleEditorSave}\r\n onClose={onClose}\r\n savingPixelRatio={4}\r\n previewPixelRatio={4}\r\n theme={filerobotTheme}\r\n defaultTabId={\r\n editorConstants?.TABS\r\n ? editorConstants.TABS.ADJUST\r\n : undefined\r\n }\r\n {...(resolvedTabs !== undefined\r\n ? { tabsIds: resolvedTabs }\r\n : {})}\r\n onBeforeSave={() => false}\r\n />\r\n </EditorWrapper>\r\n )}\r\n </div>\r\n </div>\r\n </div>\r\n </div>,\r\n document.body,\r\n )\r\n})\r\n\r\n/**\r\n * Custom props that filerobot-image-editor's styled-components leak to the DOM.\r\n * Maintained as a Set so `shouldForwardProp` can block them via StyleSheetManager.\r\n */\r\nconst FILEROBOT_CUSTOM_PROPS = new Set([\r\n 'active',\r\n 'noMargin',\r\n 'showBackButton',\r\n 'isPhoneScreen',\r\n 'showTabsDrawer',\r\n 'hasChildren',\r\n 'isAccordion',\r\n])\r\n\r\n/**\r\n * Wraps children with styled-components' StyleSheetManager (when available)\r\n * to prevent custom props from leaking to the DOM in React 19+.\r\n * Falls back to a plain fragment if styled-components is not loaded.\r\n */\r\nfunction EditorWrapper({\r\n children,\r\n StyleSheetMgr,\r\n shouldForwardProp,\r\n}: {\r\n children: React.ReactNode\r\n StyleSheetMgr: ComponentType<{\r\n shouldForwardProp?: (prop: string) => boolean\r\n children: React.ReactNode\r\n }> | null\r\n shouldForwardProp: (prop: string) => boolean\r\n}) {\r\n if (StyleSheetMgr) {\r\n return (\r\n <StyleSheetMgr shouldForwardProp={shouldForwardProp}>\r\n {children}\r\n </StyleSheetMgr>\r\n )\r\n }\r\n return <>{children}</>\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AASA;AACA,SAAS,UAAU;AAgEnB,IAAO,2BAAQ,EAAK,SAAS,iBAAiB,OAAc;AA1E5D,MAAA,IAAA;AA2EI,QAAM,EAAE,MAAM,SAAS,OAAO,IAAI;AAClC,QAAM,EAAE,aAAa,aAAa,IAAI,mBAAmB;AACzD,QAAM,EAAE,QAAQ,KAAK,IAAI,iBAAiB;AAE1C,QAAM,iBAAa,8BAAuB,IAAI;AAC9C,QAAM,uBAAmB,8BAAuB,IAAI;AAGpD,QAAM,CAAC,iBAAiB,kBAAkB,QACtC,gCAAqD,IAAI;AAC7D,QAAM,CAAC,iBAAiB,kBAAkB,QAAI,gCAGpC,IAAI;AACd,QAAM,CAAC,WAAW,YAAY,QAAI,gCAAwB,IAAI;AAI9D,QAAM,CAAC,eAAe,gBAAgB,QAAI,gCAG/B,IAAI;AAGf,uCAAU,MAAM;AACZ,QAAI,OAAO,WAAW,YAAa;AAEnC,QAAI,YAAY;AAChB,UAAM,YAAY;AACd,UAAI;AACA,cAAM,CAAC,KAAK,KAAK,IAAI,MAAM,QAAQ,IAAI;UACnC,OAAO,gCAA8B;UACrC,OAAO,mBAAmB,EAAE,MAAM,MAAM,IAAI;QAChD,CAAC;AACD,YAAI,UAAW;AACf;UACI,MAAM,IAAI;QACd;AACA,2BAAmB;UACf,MAAO,IAAgC;UAIvC,OAAQ,IAAgC;QAI5C,CAAC;AACD,YAAI,SAAA,OAAA,SAAA,MAAO,mBAAmB;AAC1B;YACI,MACI,MAAM;UAId;QACJ;MACJ,QAAQ;AAEJ,YAAI,UAAW;AACf;UACI;QACJ;MACJ;IACJ,GAAG;AAEH,WAAO,MAAM;AACT,kBAAY;IAChB;EACJ,GAAG,CAAC,CAAC;AAIL,uCAAU,MAAM;AACZ,qBAAiB,UAAU,SAAS;AACpC,WAAO,MAAM;AACT,UAAI,iBAAiB,mBAAmB,aAAa;AACjD,yBAAiB,QAAQ,MAAM;MACnC;IACJ;EACJ,GAAG,CAAC,CAAC;AAGL,uCAAU,MAAM;AA9JpB,QAAAA;AA+JQ,KAAAA,MAAA,WAAW,YAAX,OAAA,SAAAA,IAAoB,MAAA;EACxB,GAAG,CAAC,CAAC;AAGL,QAAM,oBAAgB;IAClB,CAAC,MAA2B;AApKpC,UAAAA;AAqKY,UAAI,EAAE,QAAQ,UAAU;AACpB,UAAE,gBAAgB;AAClB,gBAAQ;MACZ;AAGA,UAAI,EAAE,QAAQ,OAAO;AACjB,cAAM,aACFA,MAAA,WAAW,YAAX,OAAA,SAAAA,IAAoB;UAChB;QAAA;AAER,YAAI,CAAC,aAAa,UAAU,WAAW,EAAG;AAC1C,cAAM,QAAQ,UAAU,CAAC;AACzB,cAAM,OAAO,UAAU,UAAU,SAAS,CAAC;AAC3C,YAAI,CAAC,SAAS,CAAC,KAAM;AAErB,YAAI,EAAE,UAAU;AACZ,cAAI,SAAS,kBAAkB,OAAO;AAClC,cAAE,eAAe;AACjB,iBAAK,MAAM;UACf;QACJ,OAAO;AACH,cAAI,SAAS,kBAAkB,MAAM;AACjC,cAAE,eAAe;AACjB,kBAAM,MAAM;UAChB;QACJ;MACJ;IACJ;IACA,CAAC,OAAO;EACZ;AAGA,QAAM,yBAAqB,mCAAY,CAAC,MAAwB;AAC5D,MAAE,gBAAgB;EACtB,GAAG,CAAC,CAAC;AAGL,QAAM,uBAAmB;IACrB,CAAC,cAAmC;AAChC,UAAI,CAAC,UAAU,YAAa;AAC5B,YAAM,UAAU,UAAU,YAAY,WAAW,OAAO,IAClD,UAAU,cACV,QAAQ,UAAU,YAAY,KAAK,IAAI,WACnC,UAAU,WACd;AACN,aAAO,SAAS,UAAU,QAAQ;IACtC;IACA,CAAC,KAAK,MAAM,MAAM;EACtB;AAIA,QAAM,wBAAoB;IACtB,CAAC,SAAiB,CAAC,uBAAuB,IAAI,IAAI;IAClD,CAAC;EACL;AAGA,QAAM,gBAAe,mBAAA,OAAA,SAAA,gBAAiB,SAChC,KAAA,aAAa,SAAb,OAAA,SAAA,GAAmB;IACf,CAAA,QAAI;AAlOlB,UAAAA;AAkOqB,cAAAA,MAAA,gBAAgB,KAAK,IAAI,YAAY,CAAC,MAAtC,OAAAA,MAA2C;IAAA;EAAA,IAEtD;AAEN,QAAM,qBAAiB,+BAAQ,MAAM,kBAAkB,IAAI,GAAG,CAAC,IAAI,CAAC;AACpE,QAAM,yBAAqB;IACvB,MAAM,2BAA2B,IAAI;IACrC,CAAC,IAAI;EACT;AAEA,SAAO;IACH,kBAAC,OAAA,EAAI,WAAU,cAAa,kBAAe,gBACvC,UAAA;MAAC;MAAA;QACG,KAAK;QACL,MAAK;QACL,cAAW;QACX,cAAY,eAAe,KAAK,IAAI;QACpC,UAAU;QACV,WAAU;QACV,SAAS;QACT,WAAW;QAEX,UAAA;UAAC;UAAA;YACG,WAAW;cACP;cACA,OACM,6CACA;YACV;YACA,mBAAiB,OAAO,SAAS;YACjC,SAAS;YAER,UAAA;cAAA,sBACG;gBAAC;gBAAA;kBACG,yBAAyB;oBACrB,QAAQ;kBACZ;gBAAA;cACJ;cAIJ,kBAAC,OAAA,EAAI,WAAU,kDACV,UAAA;gBAAA,aACG,kBAAC,OAAA,EAAI,WAAU,wEACX,UAAA;kBAAC;kBAAA;oBACG,WAAW;sBACP;sBACA,OACM,sBACA;oBACV;oBAEC,UAAA;kBAAA;gBACL,EAAA,CACJ;gBAGH,CAAC,mBAAmB,CAAC,aAClB,kBAAC,OAAA,EAAI,WAAU,+DACX,UAAA;kBAAC;kBAAA;oBACG,WAAW;sBACP;sBACA,OACM,0BACA;oBACV;kBAAA;gBACJ,EAAA,CACJ;gBAGH,mBAAmB,CAAC,aACjB;kBAAC;kBAAA;oBACG;oBACA;oBAEA,UAAA;sBAAC;sBAAA;wBACG,SAAQ,KAAA,KAAK,QAAL,OAAA,KAAY;wBACpB,QAAQ;wBACR;wBACA,kBAAkB;wBAClB,mBAAmB;wBACnB,OAAO;wBACP,eACI,mBAAA,OAAA,SAAA,gBAAiB,QACX,gBAAgB,KAAK,SACrB;wBAET,GAAI,iBAAiB,SAChB,EAAE,SAAS,aAAa,IACxB,CAAC;wBACP,cAAc,MAAM;sBAAA;oBACxB;kBAAA;gBACJ;cAAA,EAAA,CAER;YAAA;UAAA;QACJ;MAAA;IACJ,EAAA,CACJ;IACA,SAAS;EACb;AACJ,CAAC;AAMD,IAAM,yBAAyB,oBAAI,IAAI;EACnC;EACA;EACA;EACA;EACA;EACA;EACA;AACJ,CAAC;AAOD,SAAS,cAAc;EACnB;EACA;EACA;AACJ,GAOG;AACC,MAAI,eAAe;AACf,WACI,kBAAC,eAAA,EAAc,mBACV,SAAA,CACL;EAER;AACA,SAAO,kBAAA,UAAA,EAAG,SAAA,CAAS;AACvB;","names":["_a"]}