@startlibs/components 1.0.3 → 1.1.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.
- package/lib/BasicBulletList.mjs +9 -0
- package/lib/BasicBulletList.mjs.map +1 -0
- package/lib/Button.mjs +95 -0
- package/lib/Button.mjs.map +1 -0
- package/lib/ContextMenu.mjs +452 -0
- package/lib/ContextMenu.mjs.map +1 -0
- package/lib/Dialog.mjs +232 -0
- package/lib/Dialog.mjs.map +1 -0
- package/lib/Draggable.mjs +880 -0
- package/lib/Draggable.mjs.map +1 -0
- package/lib/ErrorBoundary.mjs +108 -0
- package/lib/ErrorBoundary.mjs.map +1 -0
- package/lib/FillLastLineResizer.mjs +238 -0
- package/lib/FillLastLineResizer.mjs.map +1 -0
- package/lib/Flip.mjs +604 -0
- package/lib/Flip.mjs.map +1 -0
- package/lib/FlipList.mjs +186 -0
- package/lib/FlipList.mjs.map +1 -0
- package/lib/FormatDate.mjs +25 -0
- package/lib/FormatDate.mjs.map +1 -0
- package/lib/Icon.mjs +50 -0
- package/lib/Icon.mjs.map +1 -0
- package/lib/Image.mjs +41 -0
- package/lib/Image.mjs.map +1 -0
- package/lib/Link.mjs +116 -0
- package/lib/Link.mjs.map +1 -0
- package/lib/Loading.mjs +10 -0
- package/lib/Loading.mjs.map +1 -0
- package/lib/LoadingDiv.mjs +83 -0
- package/lib/LoadingDiv.mjs.map +1 -0
- package/lib/Notifications.mjs +63 -0
- package/lib/Notifications.mjs.map +1 -0
- package/lib/PageLoader.mjs +42 -0
- package/lib/PageLoader.mjs.map +1 -0
- package/lib/PersistentNotifications.mjs +130 -0
- package/lib/PersistentNotifications.mjs.map +1 -0
- package/lib/Popup.mjs +49 -0
- package/lib/Popup.mjs.map +1 -0
- package/lib/SplitColumnsContainer.mjs +43 -0
- package/lib/SplitColumnsContainer.mjs.map +1 -0
- package/lib/SwitchDiv.mjs +61 -0
- package/lib/SwitchDiv.mjs.map +1 -0
- package/lib/TextButton.mjs +41 -0
- package/lib/TextButton.mjs.map +1 -0
- package/lib/ToastNotifications.mjs +215 -0
- package/lib/ToastNotifications.mjs.map +1 -0
- package/lib/Tooltip.mjs +160 -0
- package/lib/Tooltip.mjs.map +1 -0
- package/lib/TransitionDiv.mjs +56 -0
- package/lib/TransitionDiv.mjs.map +1 -0
- package/lib/WarningDialog.mjs +84 -0
- package/lib/WarningDialog.mjs.map +1 -0
- package/lib/alt/buttons/OnClickLoadingButton.mjs +36 -0
- package/lib/alt/buttons/OnClickLoadingButton.mjs.map +1 -0
- package/lib/alt/dialogs/DialogWithImageHeader.mjs +14 -0
- package/lib/alt/dialogs/DialogWithImageHeader.mjs.map +1 -0
- package/lib/alt/dialogs/DialogWithSidebar.mjs +106 -0
- package/lib/alt/dialogs/DialogWithSidebar.mjs.map +1 -0
- package/lib/alt/dialogs/MobileBubbleDialog.mjs +49 -0
- package/lib/alt/dialogs/MobileBubbleDialog.mjs.map +1 -0
- package/lib/containers/DialogContainer.mjs +413 -0
- package/lib/containers/DialogContainer.mjs.map +1 -0
- package/lib/containers/Reposition.mjs +35 -0
- package/lib/containers/Reposition.mjs.map +1 -0
- package/lib/containers/usePositioning.mjs +294 -0
- package/lib/containers/usePositioning.mjs.map +1 -0
- package/lib/index.cjs +5000 -0
- package/lib/index.cjs.map +1 -0
- package/lib/index.mjs +37 -0
- package/lib/index.mjs.map +1 -0
- package/lib/useDialogWithToggle.mjs +18 -0
- package/lib/useDialogWithToggle.mjs.map +1 -0
- package/lib/willUseIsSticky.mjs +123 -0
- package/lib/willUseIsSticky.mjs.map +1 -0
- package/package.json +44 -29
- package/src/BasicBulletList.jsx +21 -0
- package/src/Button.jsx +288 -0
- package/src/ContextMenu.jsx +621 -0
- package/src/Dialog.jsx +413 -0
- package/src/Draggable.jsx +801 -0
- package/src/ErrorBoundary.jsx +75 -0
- package/src/FillLastLineResizer.jsx +226 -0
- package/src/Flip.jsx +560 -0
- package/src/FlipList.jsx +136 -0
- package/src/FormatDate.jsx +9 -0
- package/src/Icon.jsx +49 -0
- package/src/Image.jsx +23 -0
- package/src/Link.jsx +68 -0
- package/src/Loading.jsx +29 -0
- package/src/LoadingDiv.jsx +75 -0
- package/src/Notifications.jsx +89 -0
- package/src/PageLoader.jsx +48 -0
- package/src/PersistentNotifications.jsx +182 -0
- package/src/Popup.jsx +49 -0
- package/src/SplitColumnsContainer.jsx +63 -0
- package/src/SwitchDiv.jsx +30 -0
- package/src/TextButton.jsx +34 -0
- package/src/ToastNotifications.jsx +298 -0
- package/src/Tooltip.jsx +158 -0
- package/src/TransitionDiv.jsx +34 -0
- package/src/WarningDialog.jsx +70 -0
- package/src/alt/buttons/OnClickLoadingButton.jsx +16 -0
- package/src/alt/dialogs/DialogWithImageHeader.jsx +42 -0
- package/src/alt/dialogs/DialogWithSidebar.jsx +135 -0
- package/src/alt/dialogs/MobileBubbleDialog.jsx +56 -0
- package/src/containers/DialogContainer.jsx +423 -0
- package/src/containers/Reposition.jsx +24 -0
- package/src/containers/usePositioning.jsx +305 -0
- package/src/index.js +35 -0
- package/src/useDialogWithToggle.jsx +12 -0
- package/src/willUseIsSticky.jsx +113 -0
- package/.babelrc +0 -27
- package/lib/index.js +0 -5196
- package/rollup.config.js +0 -52
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
import _extends from '@babel/runtime/helpers/extends';
|
|
2
|
+
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
3
|
+
import _taggedTemplateLiteral from '@babel/runtime/helpers/taggedTemplateLiteral';
|
|
4
|
+
import _get from 'lodash/fp/get';
|
|
5
|
+
import React, { forwardRef, useRef, useEffect } from 'react';
|
|
6
|
+
import styled from 'styled-components';
|
|
7
|
+
import { willUseLayers, useEnsureRef, useRefState, Fill, Slot } from '@startlibs/core';
|
|
8
|
+
import { oneWayAnimation, twoWayAnimation, media, identityOpacityFrames, callIfFunction } from '@startlibs/utils';
|
|
9
|
+
import { ErrorBoundary } from '../ErrorBoundary.mjs';
|
|
10
|
+
import { useFlipAnimation } from '../Flip.mjs';
|
|
11
|
+
|
|
12
|
+
const _excluded = ["timing", "nestedFlip", "enterEffect", "leaveEffect", "modalIn", "modalOut", "blurBackdrop"];
|
|
13
|
+
var _templateObject, _templateObject2;
|
|
14
|
+
const dialogFadeInDown = oneWayAnimation('opacity: 0; transform: translateY(50px);', 'opacity: 1; transform: translateY(0);');
|
|
15
|
+
const [dialogModalIn, dialogModalOut] = twoWayAnimation('opacity: 0;', 'opacity: 1;');
|
|
16
|
+
const Modal = /*#__PURE__*/styled.div.withConfig({
|
|
17
|
+
displayName: "DialogContainer__Modal",
|
|
18
|
+
componentId: "sc-wendlg-0"
|
|
19
|
+
})(["position:fixed;top:0;bottom:0;left:0;right:0;will-change:opacity;background-color:rgba(0,0,0,0.7);", ""], props => props.$blurBackdrop && "backdrop-filter: blur(10px);");
|
|
20
|
+
const ModalContainer = /*#__PURE__*/styled.div.withConfig({
|
|
21
|
+
displayName: "DialogContainer__ModalContainer",
|
|
22
|
+
componentId: "sc-wendlg-1"
|
|
23
|
+
})(["position:fixed;top:0;bottom:0;left:0;right:0;scrollbar-color:transparent transparent;"]);
|
|
24
|
+
const DialogCenter = /*#__PURE__*/styled.div.withConfig({
|
|
25
|
+
displayName: "DialogContainer__DialogCenter",
|
|
26
|
+
componentId: "sc-wendlg-2"
|
|
27
|
+
})(["@supports (position:sticky){will-change:transform,opacity;&.JS-wc-off{will-change:auto;}}display:-webkit-box;display:-ms-flexbox;display:flex;overflow-y:", ";overflow-x:hidden;scrollbar-color:rgba(255,255,255,0.6) transparent;position:fixed;top:0;bottom:0;left:0;right:0;align-items:center;", " ", ""], props => props.withScroll ? "scroll" : "hidden", media.desktop(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n padding: ", ";\n "])), props => props.fullscreen ? '1rem' : '3rem 0.5rem;'), media.mobile(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n padding: ", ";\n "])), props => props.fullscreenOnMobile ? '0' : '0.5rem'));
|
|
28
|
+
const PopupSlot = /*#__PURE__*/styled(Slot).withConfig({
|
|
29
|
+
displayName: "DialogContainer__PopupSlot",
|
|
30
|
+
componentId: "sc-wendlg-3"
|
|
31
|
+
})(["position:absolute;left:0;top:0;width:100%;"]);
|
|
32
|
+
const editableSelector = 'textarea,input,[contenteditable]';
|
|
33
|
+
const focusableSelector = 'button,a,' + editableSelector;
|
|
34
|
+
const shouldPreventResolvers = [];
|
|
35
|
+
let shouldPreventDialogPop = Promise.resolve();
|
|
36
|
+
const preventDialogPop = cb => {
|
|
37
|
+
shouldPreventDialogPop = shouldPreventDialogPop.then(() => {
|
|
38
|
+
new Promise(res => {
|
|
39
|
+
shouldPreventResolvers.push(res);
|
|
40
|
+
cb();
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
const waitForPop = () => {
|
|
45
|
+
return shouldPreventDialogPop;
|
|
46
|
+
};
|
|
47
|
+
const preventDialogPopState = e => {
|
|
48
|
+
const resolver = shouldPreventResolvers.shift();
|
|
49
|
+
if (resolver) {
|
|
50
|
+
e.stopImmediatePropagation();
|
|
51
|
+
resolver();
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
window.addEventListener("popstate", preventDialogPopState);
|
|
55
|
+
const fixPosition = (query, fn) => {
|
|
56
|
+
const elements = document.querySelectorAll(query);
|
|
57
|
+
if (elements.length) {
|
|
58
|
+
Array.prototype.slice.call(elements).forEach(fn);
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
let openLayers = 0;
|
|
62
|
+
let fakedScrollTop = 0;
|
|
63
|
+
const isFakeScrolled = () => openLayers > 0 && fakedScrollTop > 0;
|
|
64
|
+
const removeWindowScroll = (opening, keepDisabledScroll) => {
|
|
65
|
+
if (opening) {
|
|
66
|
+
openLayers = Math.max(openLayers + 1, 1);
|
|
67
|
+
if (openLayers > 1) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
} else {
|
|
71
|
+
openLayers = Math.min(openLayers - 1, 0);
|
|
72
|
+
if (openLayers < 0) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
const finishReset = (marginRight, scrollTop) => {
|
|
77
|
+
// body.style.paddingRight = marginRight + 'px'
|
|
78
|
+
window.scroll(window.scrollLeft || window.scrollX || 0, scrollTop);
|
|
79
|
+
if (keepDisabledScroll) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
fixPosition('.navbar,.JS-fix-dialog-scroll', n => {
|
|
83
|
+
if (opening) {
|
|
84
|
+
const {
|
|
85
|
+
right
|
|
86
|
+
} = window.getComputedStyle(n);
|
|
87
|
+
n.style.right = parseInt(right) + marginRight + 'px';
|
|
88
|
+
} else {
|
|
89
|
+
n.style.right = null;
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
fixPosition('.JS-fix-dialog-scroll-transform', n => {
|
|
93
|
+
if (marginRight) {
|
|
94
|
+
n.style.transform = window.getComputedStyle(n).transform + " translateX(-".concat(marginRight / 2, "px)");
|
|
95
|
+
} else {
|
|
96
|
+
n.style.transform = null;
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
fixPosition('.JS-on-open-dialog', n => {
|
|
100
|
+
if (opening) {
|
|
101
|
+
n.classList.add('JS-dialog-open');
|
|
102
|
+
} else {
|
|
103
|
+
n.classList.remove('JS-dialog-open');
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
window.requestAnimationFrame(() => window.dispatchEvent(new CustomEvent('resize', {
|
|
107
|
+
detail: {
|
|
108
|
+
dialog: true
|
|
109
|
+
}
|
|
110
|
+
})));
|
|
111
|
+
};
|
|
112
|
+
const body = document.body;
|
|
113
|
+
let bodyWidth = body.offsetWidth;
|
|
114
|
+
if (opening) {
|
|
115
|
+
const scrollTop = window.pageYOffset;
|
|
116
|
+
fakedScrollTop = scrollTop;
|
|
117
|
+
if (keepDisabledScroll) {
|
|
118
|
+
body.style.overflowY = 'scroll';
|
|
119
|
+
} else {
|
|
120
|
+
body.style.overflow = 'hidden';
|
|
121
|
+
}
|
|
122
|
+
const marginRight = body.offsetWidth - bodyWidth;
|
|
123
|
+
body.style.position = 'fixed';
|
|
124
|
+
body.style.top = -scrollTop + "px";
|
|
125
|
+
body.style.left = '0';
|
|
126
|
+
if (!keepDisabledScroll) {
|
|
127
|
+
body.style.right = marginRight + 'px';
|
|
128
|
+
} else {
|
|
129
|
+
body.style.right = '0';
|
|
130
|
+
}
|
|
131
|
+
finishReset(marginRight, scrollTop);
|
|
132
|
+
} else {
|
|
133
|
+
fakedScrollTop = 0;
|
|
134
|
+
// setTimeout(() => {
|
|
135
|
+
const scrollTop = parseInt(body.style.top);
|
|
136
|
+
body.style.overflow = '';
|
|
137
|
+
body.style.position = '';
|
|
138
|
+
body.style.top = '';
|
|
139
|
+
body.style.left = '';
|
|
140
|
+
body.style.right = '';
|
|
141
|
+
finishReset(0, -scrollTop);
|
|
142
|
+
// },250)
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
const [useDialogLayers, getDialogLayersSize] = willUseLayers(React.useLayoutEffect);
|
|
146
|
+
const DialogContainer = /*#__PURE__*/forwardRef((_ref, forwardedRef) => {
|
|
147
|
+
let {
|
|
148
|
+
children,
|
|
149
|
+
title,
|
|
150
|
+
closeDialog,
|
|
151
|
+
closeOnClick,
|
|
152
|
+
dontRefocus,
|
|
153
|
+
onConfirm,
|
|
154
|
+
prev,
|
|
155
|
+
next,
|
|
156
|
+
form,
|
|
157
|
+
noFormWrap,
|
|
158
|
+
withFormWrap,
|
|
159
|
+
placement = 'Dialog',
|
|
160
|
+
DialogErrorContent,
|
|
161
|
+
customHref,
|
|
162
|
+
animation = dialogFadeInDown,
|
|
163
|
+
animationTiming,
|
|
164
|
+
animationLeaveEffect,
|
|
165
|
+
animationEnterEffect,
|
|
166
|
+
skipKeys,
|
|
167
|
+
fullscreenOnMobile,
|
|
168
|
+
fullscreen,
|
|
169
|
+
confirmChanges = false,
|
|
170
|
+
skipDom,
|
|
171
|
+
modalRef,
|
|
172
|
+
skipCheckFocus,
|
|
173
|
+
autoComplete,
|
|
174
|
+
blurBackdrop
|
|
175
|
+
} = _ref;
|
|
176
|
+
const dialogRef = useEnsureRef(forwardedRef);
|
|
177
|
+
const prevActiveElement = useRefState(document.activeElement);
|
|
178
|
+
const modal = useEnsureRef(modalRef);
|
|
179
|
+
const modalScroll = useRef();
|
|
180
|
+
const mouseDownInModal = useRefState();
|
|
181
|
+
const previousHash = useRefState(window.location.hash);
|
|
182
|
+
const [layerIndex, {
|
|
183
|
+
isTop,
|
|
184
|
+
getSize
|
|
185
|
+
}] = useDialogLayers({
|
|
186
|
+
onFirst: () => {
|
|
187
|
+
waitForPop().then(() => {
|
|
188
|
+
if (customHref && encodeURI(customHref) === window.location.hash) {
|
|
189
|
+
window.history.replaceState(history.state, '', window.location.pathname);
|
|
190
|
+
window.history.pushState({
|
|
191
|
+
dialog: true
|
|
192
|
+
}, '', customHref);
|
|
193
|
+
} else {
|
|
194
|
+
window.history.pushState({
|
|
195
|
+
dialog: true
|
|
196
|
+
}, '', window.location.href + (customHref || ""));
|
|
197
|
+
}
|
|
198
|
+
});
|
|
199
|
+
// clearPreventDialogPop()
|
|
200
|
+
if (document.body.scrollHeight === document.body.clientHeight) {
|
|
201
|
+
modal.current.style.overflowY = "scroll";
|
|
202
|
+
if (modalScroll.current) {
|
|
203
|
+
modalScroll.current.style.overflowY = "scroll";
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
// resetNavbar(true)
|
|
207
|
+
},
|
|
208
|
+
onRemove: layers => {
|
|
209
|
+
if (layers === 0 && _get('dialog', window.history.state) === true || customHref && window.location.hash === encodeURI(customHref)) {
|
|
210
|
+
preventDialogPop(() => {
|
|
211
|
+
window.history.back();
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
},
|
|
215
|
+
onEmpty: () => {
|
|
216
|
+
if (document.body.scrollHeight > document.body.clientHeight) {
|
|
217
|
+
if (modalScroll.current) {
|
|
218
|
+
modalScroll.current.style.overflowY = "hidden";
|
|
219
|
+
}
|
|
220
|
+
} else if (modal.current) {
|
|
221
|
+
modal.current.style.overflowY = "scroll";
|
|
222
|
+
}
|
|
223
|
+
removeWindowScroll(false);
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
const confirmCloseDialog = () => {
|
|
227
|
+
if (form && form.getHasChanged() && confirmChanges) {
|
|
228
|
+
form.confirm().then(closeDialog);
|
|
229
|
+
} else {
|
|
230
|
+
callIfFunction(closeDialog);
|
|
231
|
+
}
|
|
232
|
+
};
|
|
233
|
+
/*
|
|
234
|
+
useEffect(() => () => {
|
|
235
|
+
setTimeout(() => {
|
|
236
|
+
if (window.location.hash === previousHash.get() && _.get('dialog', window.history.state) === true) {
|
|
237
|
+
console.log("???")
|
|
238
|
+
}
|
|
239
|
+
}, 100)
|
|
240
|
+
}, [])*/
|
|
241
|
+
|
|
242
|
+
React.useRef();
|
|
243
|
+
useEffect(() => {
|
|
244
|
+
if (customHref && window.location.hash !== customHref) {
|
|
245
|
+
// if (pastFirstTime.current) {
|
|
246
|
+
waitForPop().then(() => {
|
|
247
|
+
if (window.location.hash) {
|
|
248
|
+
window.history.replaceState({
|
|
249
|
+
dialog: true
|
|
250
|
+
}, '', customHref);
|
|
251
|
+
} else {
|
|
252
|
+
window.history.pushState({
|
|
253
|
+
dialog: true
|
|
254
|
+
}, '', customHref);
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
// } else {
|
|
258
|
+
// window.history.pushState({dialog: true}, '', customHref)
|
|
259
|
+
// pastFirstTime.current = true
|
|
260
|
+
// }
|
|
261
|
+
previousHash.set(encodeURI(customHref));
|
|
262
|
+
}
|
|
263
|
+
}, [customHref]);
|
|
264
|
+
useEffect(() => {
|
|
265
|
+
window.addEventListener('keydown', checkKey);
|
|
266
|
+
window.addEventListener('focusin', checkFocus);
|
|
267
|
+
window.addEventListener('popstate', checkHistory);
|
|
268
|
+
return () => {
|
|
269
|
+
window.removeEventListener('keydown', checkKey);
|
|
270
|
+
window.removeEventListener('focusin', checkFocus);
|
|
271
|
+
window.removeEventListener('popstate', checkHistory);
|
|
272
|
+
if (!dontRefocus && document.body.contains(prevActiveElement.get()) && prevActiveElement.get().matches(focusableSelector)) {
|
|
273
|
+
setTimeout(() => prevActiveElement.get().focus(), 0);
|
|
274
|
+
}
|
|
275
|
+
};
|
|
276
|
+
}, []);
|
|
277
|
+
const checkHistory = e => {
|
|
278
|
+
if (!isTop() /* || (previousHash.get() !== window.location.hash && !customHref)*/) return;
|
|
279
|
+
if (_get('willOpenDialog', window.history.state) === true) {
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
if (_get('dialog', window.history.state) !== true) {
|
|
283
|
+
window.history.pushState({
|
|
284
|
+
dialog: true
|
|
285
|
+
}, '', window.location.href);
|
|
286
|
+
}
|
|
287
|
+
confirmCloseDialog();
|
|
288
|
+
};
|
|
289
|
+
const checkFocus = e => {
|
|
290
|
+
if (!isTop() || skipCheckFocus) return;
|
|
291
|
+
if (modal.current && !e.target.closest('.' + modal.current.className.split(' ').join('.'))) {
|
|
292
|
+
const nextTab = modal.current.querySelector('[tabindex]');
|
|
293
|
+
if (nextTab) nextTab.focus();
|
|
294
|
+
}
|
|
295
|
+
};
|
|
296
|
+
const checkKey = e => {
|
|
297
|
+
var _e$target, _e$target2;
|
|
298
|
+
if (!isTop() || skipKeys || ((_e$target = e.target) === null || _e$target === void 0 || (_e$target = _e$target.className) === null || _e$target === void 0 ? void 0 : _e$target.indexOf("JS-dialog-skip-evts")) >= 0 || (_e$target2 = e.target) !== null && _e$target2 !== void 0 && _e$target2.closest(".JS-dialog-skip-evts")) return;
|
|
299
|
+
if (modal.current && e.shiftKey && e.keyCode === 9 && modal.current.querySelector('[tabindex]') === document.activeElement) {
|
|
300
|
+
e.preventDefault();
|
|
301
|
+
const prevTab = [].slice.call(modal.current.querySelectorAll('[tabindex]')).reduce((acc, el) => el.tabIndex >= acc.tabIndex ? el : acc, {
|
|
302
|
+
tabIndex: -1
|
|
303
|
+
});
|
|
304
|
+
if (prevTab && prevTab.focus) prevTab.focus();
|
|
305
|
+
}
|
|
306
|
+
if (e.key === 'Escape') {
|
|
307
|
+
e.preventDefault();
|
|
308
|
+
confirmCloseDialog();
|
|
309
|
+
} else if (e.key === 'Enter') {
|
|
310
|
+
if (e.target) {
|
|
311
|
+
const target = e.target.closest(focusableSelector + ',div');
|
|
312
|
+
if (target && (target.tagName.toLowerCase() !== 'input' || target.form || target.type.toLowerCase() === 'file') && target.matches(focusableSelector)) return;
|
|
313
|
+
}
|
|
314
|
+
e.preventDefault();
|
|
315
|
+
e.stopPropagation();
|
|
316
|
+
if (onConfirm) {
|
|
317
|
+
onConfirm();
|
|
318
|
+
} else if (form) {
|
|
319
|
+
form.submitForm();
|
|
320
|
+
}
|
|
321
|
+
} else if (!e.target.matches(editableSelector)) {
|
|
322
|
+
if (e.key === 'ArrowLeft' && prev) {
|
|
323
|
+
prev();
|
|
324
|
+
} else if (e.key === 'ArrowRight' && next) {
|
|
325
|
+
next();
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
};
|
|
329
|
+
const checkClick = e => {
|
|
330
|
+
if (closeOnClick && e.target === e.currentTarget && mouseDownInModal.get()) {
|
|
331
|
+
confirmCloseDialog();
|
|
332
|
+
}
|
|
333
|
+
mouseDownInModal.set(false);
|
|
334
|
+
};
|
|
335
|
+
const mouseDown = e => {
|
|
336
|
+
mouseDownInModal.set(e.target === e.currentTarget);
|
|
337
|
+
};
|
|
338
|
+
const usingForm = withFormWrap || form && !noFormWrap;
|
|
339
|
+
useFlipAnimation(dialogRef, animation, true, {
|
|
340
|
+
nestedFlip: !skipDom,
|
|
341
|
+
onEnterEnd: () => {
|
|
342
|
+
if (getSize() === 1) {
|
|
343
|
+
removeWindowScroll(true);
|
|
344
|
+
}
|
|
345
|
+
if (document.body.scrollHeight === document.body.clientHeight) {
|
|
346
|
+
modal.current.style.overflowY = "none";
|
|
347
|
+
}
|
|
348
|
+
if (modalScroll.current) {
|
|
349
|
+
modalScroll.current.style.overflowY = "scroll";
|
|
350
|
+
}
|
|
351
|
+
},
|
|
352
|
+
leaveEffect: animationLeaveEffect,
|
|
353
|
+
enterEffect: animationEnterEffect,
|
|
354
|
+
timing: animationTiming
|
|
355
|
+
});
|
|
356
|
+
useFlipAnimation(modal, !skipDom && identityOpacityFrames, true, {
|
|
357
|
+
timing: animationTiming
|
|
358
|
+
});
|
|
359
|
+
const content = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(PopupSlot, {
|
|
360
|
+
name: 'Popup-' + layerIndex
|
|
361
|
+
}), /*#__PURE__*/React.createElement(ErrorBoundary, {
|
|
362
|
+
title: callIfFunction(title),
|
|
363
|
+
closeDialog: closeDialog,
|
|
364
|
+
Error: DialogErrorContent
|
|
365
|
+
}, callIfFunction(children, {
|
|
366
|
+
confirmCloseDialog
|
|
367
|
+
}, dialogRef, fullscreenOnMobile)));
|
|
368
|
+
return /*#__PURE__*/React.createElement(Fill, {
|
|
369
|
+
name: placement
|
|
370
|
+
}, skipDom ? content : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(AnimatedModal, {
|
|
371
|
+
timing: animationTiming,
|
|
372
|
+
blurBackdrop: blurBackdrop
|
|
373
|
+
}), /*#__PURE__*/React.createElement(ModalContainer, {
|
|
374
|
+
ref: modal
|
|
375
|
+
}, /*#__PURE__*/React.createElement(DialogCenter, {
|
|
376
|
+
autoComplete: autoComplete,
|
|
377
|
+
className: "JS-has-wc",
|
|
378
|
+
withScroll: getSize() > 1,
|
|
379
|
+
fullscreen: fullscreen,
|
|
380
|
+
fullscreenOnMobile: fullscreenOnMobile,
|
|
381
|
+
ref: modalScroll,
|
|
382
|
+
as: usingForm ? 'form' : undefined,
|
|
383
|
+
onClick: checkClick,
|
|
384
|
+
onSubmit: usingForm ? () => {} : undefined,
|
|
385
|
+
onMouseDown: mouseDown
|
|
386
|
+
}, content))));
|
|
387
|
+
});
|
|
388
|
+
const AnimatedModal = /*#__PURE__*/React.forwardRef((_ref2, ref) => {
|
|
389
|
+
let {
|
|
390
|
+
timing,
|
|
391
|
+
nestedFlip,
|
|
392
|
+
enterEffect,
|
|
393
|
+
leaveEffect,
|
|
394
|
+
modalIn = dialogModalIn,
|
|
395
|
+
modalOut = dialogModalOut,
|
|
396
|
+
blurBackdrop
|
|
397
|
+
} = _ref2,
|
|
398
|
+
props = _objectWithoutProperties(_ref2, _excluded);
|
|
399
|
+
const modal = useEnsureRef(ref);
|
|
400
|
+
useFlipAnimation(modal, modalIn, modalOut, {
|
|
401
|
+
timing,
|
|
402
|
+
nestedFlip,
|
|
403
|
+
leaveEffect,
|
|
404
|
+
enterEffect
|
|
405
|
+
});
|
|
406
|
+
return /*#__PURE__*/React.createElement(Modal, _extends({}, props, {
|
|
407
|
+
$blurBackdrop: blurBackdrop,
|
|
408
|
+
ref: modal
|
|
409
|
+
}));
|
|
410
|
+
});
|
|
411
|
+
|
|
412
|
+
export { AnimatedModal, DialogContainer, Modal, ModalContainer, dialogFadeInDown, dialogModalIn, dialogModalOut, getDialogLayersSize, isFakeScrolled, preventDialogPop, removeWindowScroll, useDialogLayers, waitForPop };
|
|
413
|
+
//# sourceMappingURL=DialogContainer.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DialogContainer.mjs","sources":["../../src/containers/DialogContainer.jsx"],"sourcesContent":["import React, {forwardRef, useEffect, useRef} from 'react'\nimport styled from 'styled-components'\nimport _ from 'lodash/fp'\nimport {Fill, Slot, useEnsureRef, useRefState, willUseLayers} from '@startlibs/core'\nimport {callIfFunction, identityOpacityFrames, media, oneWayAnimation, twoWayAnimation} from '@startlibs/utils'\nimport {ErrorBoundary} from '../ErrorBoundary'\nimport {useFlipAnimation} from '../Flip'\n\nexport const dialogFadeInDown = oneWayAnimation('opacity: 0; transform: translateY(50px);', 'opacity: 1; transform: translateY(0);')\nconst [dialogModalIn, dialogModalOut] = twoWayAnimation('opacity: 0;', 'opacity: 1;')\nexport {dialogModalIn, dialogModalOut}\n\nexport const Modal = styled.div`\n position: fixed;\n top:0;\n bottom:0;\n left:0;\n right:0;\n will-change: opacity;\n background-color: rgba(0,0,0,0.7);\n ${props => props.$blurBackdrop && `backdrop-filter: blur(10px);`}\n`\n\nexport const ModalContainer = styled.div`\n position: fixed;\n top:0;\n bottom:0;\n left:0;\n right:0;\n /* Barra invisível mantendo a LARGURA NATIVA da calha (scrollbar-color não\n colapsa a largura como scrollbar-width:none / ::-webkit-scrollbar faziam).\n Essa calha compensa a remoção da scrollbar do body ao abrir a dialog (body\n vira overflow:hidden e o viewport alarga ~15px no fim da animação); sem ela,\n a dialog centralizada dá um pulinho lateral. Aqui: sem barra visível e sem salto. */\n scrollbar-color: transparent transparent;\n`\n\nconst DialogCenter = styled.div`\n @supports (position:sticky) {\n will-change: transform, opacity;\n &.JS-wc-off {\n will-change: auto;\n }\n } \n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n overflow-y: ${props => props.withScroll ? \"scroll\" : \"hidden\"};\n overflow-x:hidden;\n /* idem ModalContainer: calha nativa reservada (sem salto), track invisível — mas o\n polegar é visível, senão dialog mais alta que a tela rola sem nenhuma pista.\n Claro porque a calha fica sobre o backdrop escuro. Sem overflow, o Chromium não\n desenha polegar → não sobra track fantasma. */\n scrollbar-color: rgba(255,255,255,0.6) transparent;\n position:fixed;\n top:0;\n bottom:0;\n left:0;\n right:0;\n align-items: center;\n ${media.desktop`\n padding: ${props => props.fullscreen ? '1rem' : '3rem 0.5rem;'};\n `}\n ${media.mobile`\n padding: ${props => props.fullscreenOnMobile ? '0' : '0.5rem'};\n `}\n`\n\nconst PopupSlot = styled(Slot)`\nposition: absolute;\nleft:0;\ntop: 0;\nwidth: 100%;\n`\nconst RelativeSlot = styled(Slot)`\nwidth:100%;\nposition: absolute;\n`\nconst editableSelector = 'textarea,input,[contenteditable]'\nconst focusableSelector = 'button,a,'+editableSelector\n\nconst shouldPreventResolvers = []\nlet shouldPreventDialogPop = Promise.resolve()\nexport const preventDialogPop = (cb) => {\n shouldPreventDialogPop = shouldPreventDialogPop.then(() => {\n new Promise((res) => {\n shouldPreventResolvers.push(res)\n cb()\n })\n })\n}\nexport const waitForPop = () => {\n return shouldPreventDialogPop\n}\nconst preventDialogPopState = (e) => {\n const resolver = shouldPreventResolvers.shift()\n if (resolver) {\n e.stopImmediatePropagation()\n resolver()\n }\n}\n\nwindow.addEventListener(\"popstate\",preventDialogPopState)\n\nconst fixPosition = (query, fn) => {\n const elements = document.querySelectorAll(query)\n if (elements.length) {\n Array.prototype.slice.call(elements).forEach(fn)\n }\n}\n\nlet openLayers = 0\nlet fakedScrollTop = 0\nexport const isFakeScrolled = () => openLayers>0 && fakedScrollTop > 0\nexport const removeWindowScroll = (opening, keepDisabledScroll) => {\n if (opening) {\n openLayers = Math.max(openLayers+1,1)\n if (openLayers>1) {\n return\n }\n } else {\n openLayers = Math.min(openLayers-1,0)\n if (openLayers<0) {\n return\n }\n }\n const finishReset = (marginRight, scrollTop) => {\n // body.style.paddingRight = marginRight + 'px'\n window.scroll(window.scrollLeft || window.scrollX || 0, scrollTop)\n if (keepDisabledScroll) { return }\n fixPosition('.navbar,.JS-fix-dialog-scroll', n => {\n if (opening) {\n const {right} = window.getComputedStyle(n)\n n.style.right = (parseInt(right) + marginRight) + 'px'\n } else {\n n.style.right = null\n }\n })\n fixPosition('.JS-fix-dialog-scroll-transform', n => {\n if (marginRight) {\n n.style.transform = window.getComputedStyle(n).transform + ` translateX(-${marginRight / 2}px)`\n } else {\n n.style.transform = null\n }\n })\n\n fixPosition('.JS-on-open-dialog', n => {\n if (opening) {\n n.classList.add('JS-dialog-open')\n } else {\n n.classList.remove('JS-dialog-open')\n }\n })\n window.requestAnimationFrame(()=>window.dispatchEvent(new CustomEvent('resize', {detail: {dialog: true}})))\n }\n\n const body = document.body\n let bodyWidth = body.offsetWidth\n if (opening) {\n const scrollTop = window.pageYOffset\n fakedScrollTop = scrollTop\n if (keepDisabledScroll) {\n body.style.overflowY = 'scroll'\n } else {\n body.style.overflow = 'hidden'\n }\n const marginRight = (body.offsetWidth - bodyWidth)\n\n body.style.position = 'fixed'\n body.style.top = -scrollTop + \"px\"\n body.style.left = '0'\n if (!keepDisabledScroll) {\n body.style.right = marginRight + 'px'\n } else {\n body.style.right = '0'\n }\n\n finishReset(marginRight,scrollTop)\n } else {\n fakedScrollTop = 0\n // setTimeout(() => {\n const scrollTop = parseInt(body.style.top)\n body.style.overflow = ''\n\n body.style.position = ''\n body.style.top = ''\n body.style.left = ''\n body.style.right = ''\n finishReset(0,-scrollTop)\n // },250)\n }\n}\n\nconst {href: originalHref, hash: originalHash} = window.location\n\nconst [useDialogLayers, getDialogLayersSize] = willUseLayers(React.useLayoutEffect)\nexport {useDialogLayers, getDialogLayersSize}\n\nexport const DialogContainer = forwardRef((\n {\n children, title, closeDialog, closeOnClick, dontRefocus, onConfirm, prev, next, form, noFormWrap, withFormWrap, placement = 'Dialog',\n DialogErrorContent, customHref, animation = dialogFadeInDown, animationTiming, animationLeaveEffect, animationEnterEffect, skipKeys,fullscreenOnMobile, fullscreen, confirmChanges = false, skipDom, modalRef, skipCheckFocus,\n autoComplete, blurBackdrop\n },\n forwardedRef) => {\n\n const dialogRef = useEnsureRef(forwardedRef)\n const prevActiveElement = useRefState(document.activeElement)\n const modal = useEnsureRef(modalRef)\n const modalScroll = useRef()\n const mouseDownInModal = useRefState()\n const previousHash = useRefState(window.location.hash)\n\n const [layerIndex, {isTop, getSize}] = useDialogLayers({\n onFirst: () => {\n waitForPop().then(() => {\n if (customHref && encodeURI(customHref) === window.location.hash) {\n window.history.replaceState(history.state, '', window.location.pathname)\n window.history.pushState({dialog: true}, '', customHref)\n } else {\n window.history.pushState({dialog: true}, '', window.location.href + (customHref || \"\"))\n }\n })\n // clearPreventDialogPop()\n if (document.body.scrollHeight === document.body.clientHeight) {\n modal.current.style.overflowY = \"scroll\"\n if (modalScroll.current) {\n modalScroll.current.style.overflowY = \"scroll\"\n }\n }\n // resetNavbar(true)\n },\n onRemove: (layers) => {\n if (\n (layers === 0 && _.get('dialog', window.history.state) === true) ||\n (customHref && window.location.hash === encodeURI(customHref))\n ) {\n preventDialogPop(() => {\n window.history.back()\n })\n }\n },\n onEmpty: () => {\n if (document.body.scrollHeight > document.body.clientHeight) {\n if (modalScroll.current) {\n modalScroll.current.style.overflowY = \"hidden\"\n }\n } else if (modal.current) {\n modal.current.style.overflowY = \"scroll\"\n }\n removeWindowScroll(false)\n }\n })\n\n const confirmCloseDialog = () => {\n if (form && form.getHasChanged() && confirmChanges) {\n form.confirm()\n .then(closeDialog)\n } else {\n callIfFunction(closeDialog)\n }\n }\n/*\n useEffect(() => () => {\n setTimeout(() => {\n if (window.location.hash === previousHash.get() && _.get('dialog', window.history.state) === true) {\n console.log(\"???\")\n }\n }, 100)\n }, [])*/\n\n const pastFirstTime = React.useRef()\n\n\n useEffect(() => {\n if (customHref && window.location.hash !== customHref) {\n // if (pastFirstTime.current) {\n waitForPop().then(() => {\n if (window.location.hash) {\n window.history.replaceState({dialog: true}, '', customHref)\n } else {\n window.history.pushState({dialog: true}, '', customHref)\n }\n })\n // } else {\n // window.history.pushState({dialog: true}, '', customHref)\n // pastFirstTime.current = true\n // }\n previousHash.set(encodeURI(customHref))\n }\n }, [customHref])\n\n useEffect(() => {\n window.addEventListener('keydown', checkKey)\n window.addEventListener('focusin', checkFocus)\n window.addEventListener('popstate', checkHistory)\n return () => {\n window.removeEventListener('keydown', checkKey)\n window.removeEventListener('focusin', checkFocus)\n window.removeEventListener('popstate', checkHistory)\n if (!dontRefocus && document.body.contains(prevActiveElement.get()) && prevActiveElement.get().matches(focusableSelector)) {\n setTimeout(() => prevActiveElement.get().focus(), 0)\n }\n }\n }, [])\n\n\n const checkHistory = (e) => {\n if (!isTop()/* || (previousHash.get() !== window.location.hash && !customHref)*/) return\n if (_.get('willOpenDialog', window.history.state) === true) { return }\n if (_.get('dialog', window.history.state) !== true) {\n window.history.pushState({dialog: true}, '', window.location.href)\n }\n confirmCloseDialog()\n }\n\n const checkFocus = (e) => {\n if (!isTop() || skipCheckFocus) return\n if (modal.current && !e.target.closest('.' + modal.current.className.split(' ').join('.'))) {\n const nextTab = modal.current.querySelector('[tabindex]')\n if (nextTab)\n nextTab.focus()\n }\n }\n\n const checkKey = (e) => {\n if (!isTop() || skipKeys || e.target?.className?.indexOf(\"JS-dialog-skip-evts\")>=0 || e.target?.closest(\".JS-dialog-skip-evts\")) return\n if (modal.current && e.shiftKey && e.keyCode === 9 && modal.current.querySelector('[tabindex]') === document.activeElement) {\n e.preventDefault()\n const prevTab = [].slice.call(modal.current.querySelectorAll('[tabindex]')).reduce((acc, el) => el.tabIndex >= acc.tabIndex ? el : acc, {tabIndex: -1})\n if (prevTab && prevTab.focus)\n prevTab.focus()\n }\n if (e.key === 'Escape') {\n e.preventDefault()\n confirmCloseDialog()\n } else if (e.key === 'Enter') {\n if (e.target) {\n const target = e.target.closest(focusableSelector + ',div')\n if (target && (target.tagName.toLowerCase() !== 'input' || target.form || target.type.toLowerCase() === 'file') && target.matches(focusableSelector))\n return\n }\n e.preventDefault()\n e.stopPropagation()\n if (onConfirm) {\n onConfirm()\n } else if (form) {\n form.submitForm()\n }\n } else if (!e.target.matches(editableSelector)) {\n if (e.key === 'ArrowLeft' && prev) {\n prev()\n } else if (e.key === 'ArrowRight' && next) {\n next()\n }\n }\n }\n\n const checkClick = (e) => {\n if (closeOnClick && e.target === e.currentTarget && mouseDownInModal.get()) {\n confirmCloseDialog()\n }\n mouseDownInModal.set(false)\n }\n const mouseDown = (e) => {\n mouseDownInModal.set(e.target === e.currentTarget)\n }\n\n const usingForm = withFormWrap || (form && !noFormWrap)\n\n useFlipAnimation(dialogRef, animation, true, {\n nestedFlip: !skipDom,\n onEnterEnd: () => {\n if (getSize() === 1) {\n removeWindowScroll(true);\n }\n if (document.body.scrollHeight === document.body.clientHeight) {\n modal.current.style.overflowY = \"none\"\n }\n if (modalScroll.current) {\n modalScroll.current.style.overflowY = \"scroll\"\n }\n },\n leaveEffect:animationLeaveEffect,\n enterEffect:animationEnterEffect,\n timing:animationTiming\n })\n useFlipAnimation(modal, !skipDom && identityOpacityFrames, true,{timing:animationTiming})\n\n const content = <>\n <PopupSlot name={'Popup-' + layerIndex}/>\n <ErrorBoundary title={callIfFunction(title)} closeDialog={closeDialog} Error={DialogErrorContent}>\n {callIfFunction(children, {confirmCloseDialog}, dialogRef, fullscreenOnMobile)}\n </ErrorBoundary>\n </>\n\n return (\n <Fill name={placement}>\n {\n skipDom\n ? content\n : <>\n <AnimatedModal timing={animationTiming} blurBackdrop={blurBackdrop}/>\n <ModalContainer ref={modal}>\n\n <DialogCenter autoComplete={autoComplete} className=\"JS-has-wc\" withScroll={getSize()>1} fullscreen={fullscreen} fullscreenOnMobile={fullscreenOnMobile} ref={modalScroll} as={usingForm ? 'form' : undefined} onClick={checkClick}\n onSubmit={usingForm ? () => {} : undefined}\n onMouseDown={mouseDown}>\n {content}\n </DialogCenter>\n </ModalContainer>\n </>\n }\n </Fill>\n )\n})\n\nexport const AnimatedModal = React.forwardRef(({timing,nestedFlip,enterEffect,leaveEffect,modalIn = dialogModalIn, modalOut = dialogModalOut, blurBackdrop,...props},ref) => {\n const modal = useEnsureRef(ref)\n useFlipAnimation(modal, modalIn, modalOut,{timing,nestedFlip,leaveEffect,enterEffect})\n return <Modal {...props} $blurBackdrop={blurBackdrop} ref={modal}/>\n})\n\n"],"names":["dialogFadeInDown","oneWayAnimation","dialogModalIn","dialogModalOut","twoWayAnimation","Modal","styled","div","withConfig","displayName","componentId","props","$blurBackdrop","ModalContainer","DialogCenter","withScroll","media","desktop","_templateObject","_taggedTemplateLiteral","fullscreen","mobile","_templateObject2","fullscreenOnMobile","PopupSlot","Slot","editableSelector","focusableSelector","shouldPreventResolvers","shouldPreventDialogPop","Promise","resolve","preventDialogPop","cb","then","res","push","waitForPop","preventDialogPopState","e","resolver","shift","stopImmediatePropagation","window","addEventListener","fixPosition","query","fn","elements","document","querySelectorAll","length","Array","prototype","slice","call","forEach","openLayers","fakedScrollTop","isFakeScrolled","removeWindowScroll","opening","keepDisabledScroll","Math","max","min","finishReset","marginRight","scrollTop","scroll","scrollLeft","scrollX","n","right","getComputedStyle","style","parseInt","transform","concat","classList","add","remove","requestAnimationFrame","dispatchEvent","CustomEvent","detail","dialog","body","bodyWidth","offsetWidth","pageYOffset","overflowY","overflow","position","top","left","useDialogLayers","getDialogLayersSize","willUseLayers","React","useLayoutEffect","DialogContainer","forwardRef","_ref","forwardedRef","children","title","closeDialog","closeOnClick","dontRefocus","onConfirm","prev","next","form","noFormWrap","withFormWrap","placement","DialogErrorContent","customHref","animation","animationTiming","animationLeaveEffect","animationEnterEffect","skipKeys","confirmChanges","skipDom","modalRef","skipCheckFocus","autoComplete","blurBackdrop","dialogRef","useEnsureRef","prevActiveElement","useRefState","activeElement","modal","modalScroll","useRef","mouseDownInModal","previousHash","location","hash","layerIndex","isTop","getSize","onFirst","encodeURI","history","replaceState","state","pathname","pushState","href","scrollHeight","clientHeight","current","onRemove","layers","_get","back","onEmpty","confirmCloseDialog","getHasChanged","confirm","callIfFunction","useEffect","set","checkKey","checkFocus","checkHistory","removeEventListener","contains","get","matches","setTimeout","focus","target","closest","className","split","join","nextTab","querySelector","_e$target","_e$target2","indexOf","shiftKey","keyCode","preventDefault","prevTab","reduce","acc","el","tabIndex","key","tagName","toLowerCase","type","stopPropagation","submitForm","checkClick","currentTarget","mouseDown","usingForm","useFlipAnimation","nestedFlip","onEnterEnd","leaveEffect","enterEffect","timing","identityOpacityFrames","content","createElement","Fragment","name","ErrorBoundary","Error","Fill","AnimatedModal","ref","as","undefined","onClick","onSubmit","onMouseDown","_ref2","modalIn","modalOut","_objectWithoutProperties","_excluded","_extends"],"mappings":";;;;;;;;;;;;;AAQO,MAAMA,gBAAgB,GAAGC,eAAe,CAAC,0CAA0C,EAAE,uCAAuC,EAAC;AAC9H,MAAA,CAACC,aAAa,EAAEC,cAAc,CAAC,GAAGC,eAAe,CAAC,aAAa,EAAE,aAAa,EAAC;MAGxEC,KAAK,gBAAGC,MAAM,CAACC,GAAG,CAAAC,UAAA,CAAA;EAAAC,WAAA,EAAA,wBAAA;EAAAC,WAAA,EAAA,aAAA;AAAA,CAAA,CAAA,CAAA,CAAA,oGAAA,EAAA,EAAA,CAAA,EAQzBC,KAAK,IAAIA,KAAK,CAACC,aAAa,kCAAkC,EACnE;MAEYC,cAAc,gBAAGP,MAAM,CAACC,GAAG,CAAAC,UAAA,CAAA;EAAAC,WAAA,EAAA,iCAAA;EAAAC,WAAA,EAAA,aAAA;AAAA,CAYvC,CAAA,CAAA,CAAA,uFAAA,CAAA,EAAA;AAED,MAAMI,YAAY,gBAAGR,MAAM,CAACC,GAAG,CAAAC,UAAA,CAAA;EAAAC,WAAA,EAAA,+BAAA;EAAAC,WAAA,EAAA,aAAA;AAAA,CAUfC,CAAAA,CAAAA,CAAAA,2JAAAA,EAAAA,uIAAAA,EAAAA,GAAAA,EAAAA,EAAAA,CAAAA,EAAAA,KAAK,IAAIA,KAAK,CAACI,UAAU,GAAG,QAAQ,GAAG,QAAQ,EAa3DC,KAAK,CAACC,OAAO,CAAAC,eAAA,KAAAA,eAAA,GAAAC,sBAAA,CAAA,CAAA,iBAAA,EAAA,OAAA,CAAA,CAAA,CAAA,EACFR,KAAK,IAAIA,KAAK,CAACS,UAAU,GAAG,MAAM,GAAG,cAAc,CAAA,EAE9DJ,KAAK,CAACK,MAAM,CAAAC,gBAAA,KAAAA,gBAAA,GAAAH,sBAAA,CAAA,CAAA,iBAAA,EAAA,OAAA,CAAA,CAAA,CAAA,EACDR,KAAK,IAAIA,KAAK,CAACY,kBAAkB,GAAG,GAAG,GAAG,QAAQ,CAEhE,CAAA,CAAA;AAED,MAAMC,SAAS,gBAAGlB,MAAM,CAACmB,IAAI,CAAC,CAAAjB,UAAA,CAAA;EAAAC,WAAA,EAAA,4BAAA;EAAAC,WAAA,EAAA,aAAA;AAAA,CAK7B,CAAA,CAAA,CAAA,4CAAA,CAAA,CAAA,CAAA;AAKD,MAAMgB,gBAAgB,GAAG,kCAAkC,CAAA;AAC3D,MAAMC,iBAAiB,GAAG,WAAW,GAACD,gBAAgB,CAAA;AAEtD,MAAME,sBAAsB,GAAG,EAAE,CAAA;AACjC,IAAIC,sBAAsB,GAAGC,OAAO,CAACC,OAAO,EAAE,CAAA;AACjCC,MAAAA,gBAAgB,GAAIC,EAAE,IAAK;AACtCJ,EAAAA,sBAAsB,GAAGA,sBAAsB,CAACK,IAAI,CAAC,MAAM;IACzD,IAAIJ,OAAO,CAAEK,GAAG,IAAK;AACnBP,MAAAA,sBAAsB,CAACQ,IAAI,CAACD,GAAG,CAAC,CAAA;AAChCF,MAAAA,EAAE,EAAE,CAAA;AACN,KAAC,CAAC,CAAA;AACJ,GAAC,CAAC,CAAA;AACJ,EAAC;AACYI,MAAAA,UAAU,GAAGA,MAAM;AAC9B,EAAA,OAAOR,sBAAsB,CAAA;AAC/B,EAAC;AACD,MAAMS,qBAAqB,GAAIC,CAAC,IAAK;AACnC,EAAA,MAAMC,QAAQ,GAAGZ,sBAAsB,CAACa,KAAK,EAAE,CAAA;AAC/C,EAAA,IAAID,QAAQ,EAAE;IACZD,CAAC,CAACG,wBAAwB,EAAE,CAAA;AAC5BF,IAAAA,QAAQ,EAAE,CAAA;AACZ,GAAA;AACF,CAAC,CAAA;AAEDG,MAAM,CAACC,gBAAgB,CAAC,UAAU,EAACN,qBAAqB,CAAC,CAAA;AAEzD,MAAMO,WAAW,GAAGA,CAACC,KAAK,EAAEC,EAAE,KAAK;AACjC,EAAA,MAAMC,QAAQ,GAAGC,QAAQ,CAACC,gBAAgB,CAACJ,KAAK,CAAC,CAAA;EACjD,IAAIE,QAAQ,CAACG,MAAM,EAAE;AACnBC,IAAAA,KAAK,CAACC,SAAS,CAACC,KAAK,CAACC,IAAI,CAACP,QAAQ,CAAC,CAACQ,OAAO,CAACT,EAAE,CAAC,CAAA;AAClD,GAAA;AACF,CAAC,CAAA;AAED,IAAIU,UAAU,GAAG,CAAC,CAAA;AAClB,IAAIC,cAAc,GAAG,CAAC,CAAA;AACf,MAAMC,cAAc,GAAGA,MAAMF,UAAU,GAAC,CAAC,IAAIC,cAAc,GAAG,EAAC;MACzDE,kBAAkB,GAAGA,CAACC,OAAO,EAAEC,kBAAkB,KAAK;AACjE,EAAA,IAAID,OAAO,EAAE;IACXJ,UAAU,GAAGM,IAAI,CAACC,GAAG,CAACP,UAAU,GAAC,CAAC,EAAC,CAAC,CAAC,CAAA;IACrC,IAAIA,UAAU,GAAC,CAAC,EAAE;AAChB,MAAA,OAAA;AACF,KAAA;AACF,GAAC,MAAM;IACLA,UAAU,GAAGM,IAAI,CAACE,GAAG,CAACR,UAAU,GAAC,CAAC,EAAC,CAAC,CAAC,CAAA;IACrC,IAAIA,UAAU,GAAC,CAAC,EAAE;AAChB,MAAA,OAAA;AACF,KAAA;AACF,GAAA;AACA,EAAA,MAAMS,WAAW,GAAGA,CAACC,WAAW,EAAEC,SAAS,KAAK;AAC9C;AACAzB,IAAAA,MAAM,CAAC0B,MAAM,CAAC1B,MAAM,CAAC2B,UAAU,IAAI3B,MAAM,CAAC4B,OAAO,IAAI,CAAC,EAAEH,SAAS,CAAC,CAAA;AAClE,IAAA,IAAIN,kBAAkB,EAAE;AAAE,MAAA,OAAA;AAAO,KAAA;AACjCjB,IAAAA,WAAW,CAAC,+BAA+B,EAAE2B,CAAC,IAAI;AAChD,MAAA,IAAIX,OAAO,EAAE;QACX,MAAM;AAACY,UAAAA,KAAAA;AAAK,SAAC,GAAG9B,MAAM,CAAC+B,gBAAgB,CAACF,CAAC,CAAC,CAAA;AAC1CA,QAAAA,CAAC,CAACG,KAAK,CAACF,KAAK,GAAIG,QAAQ,CAACH,KAAK,CAAC,GAAGN,WAAW,GAAI,IAAI,CAAA;AACxD,OAAC,MAAM;AACLK,QAAAA,CAAC,CAACG,KAAK,CAACF,KAAK,GAAG,IAAI,CAAA;AACtB,OAAA;AACF,KAAC,CAAC,CAAA;AACF5B,IAAAA,WAAW,CAAC,iCAAiC,EAAE2B,CAAC,IAAI;AAClD,MAAA,IAAIL,WAAW,EAAE;AACfK,QAAAA,CAAC,CAACG,KAAK,CAACE,SAAS,GAAGlC,MAAM,CAAC+B,gBAAgB,CAACF,CAAC,CAAC,CAACK,SAAS,GAAAC,eAAAA,CAAAA,MAAA,CAAmBX,WAAW,GAAG,CAAC,EAAK,KAAA,CAAA,CAAA;AACjG,OAAC,MAAM;AACLK,QAAAA,CAAC,CAACG,KAAK,CAACE,SAAS,GAAG,IAAI,CAAA;AAC1B,OAAA;AACF,KAAC,CAAC,CAAA;AAEFhC,IAAAA,WAAW,CAAC,oBAAoB,EAAE2B,CAAC,IAAI;AACrC,MAAA,IAAIX,OAAO,EAAE;AACXW,QAAAA,CAAC,CAACO,SAAS,CAACC,GAAG,CAAC,gBAAgB,CAAC,CAAA;AACnC,OAAC,MAAM;AACLR,QAAAA,CAAC,CAACO,SAAS,CAACE,MAAM,CAAC,gBAAgB,CAAC,CAAA;AACtC,OAAA;AACF,KAAC,CAAC,CAAA;AACFtC,IAAAA,MAAM,CAACuC,qBAAqB,CAAC,MAAIvC,MAAM,CAACwC,aAAa,CAAC,IAAIC,WAAW,CAAC,QAAQ,EAAE;AAACC,MAAAA,MAAM,EAAE;AAACC,QAAAA,MAAM,EAAE,IAAA;AAAI,OAAA;KAAE,CAAC,CAAC,CAAC,CAAA;GAC5G,CAAA;AAED,EAAA,MAAMC,IAAI,GAAGtC,QAAQ,CAACsC,IAAI,CAAA;AAC1B,EAAA,IAAIC,SAAS,GAAGD,IAAI,CAACE,WAAW,CAAA;AAChC,EAAA,IAAI5B,OAAO,EAAE;AACX,IAAA,MAAMO,SAAS,GAAGzB,MAAM,CAAC+C,WAAW,CAAA;AACpChC,IAAAA,cAAc,GAAGU,SAAS,CAAA;AAC1B,IAAA,IAAIN,kBAAkB,EAAE;AACtByB,MAAAA,IAAI,CAACZ,KAAK,CAACgB,SAAS,GAAG,QAAQ,CAAA;AACjC,KAAC,MAAM;AACLJ,MAAAA,IAAI,CAACZ,KAAK,CAACiB,QAAQ,GAAG,QAAQ,CAAA;AAChC,KAAA;AACA,IAAA,MAAMzB,WAAW,GAAIoB,IAAI,CAACE,WAAW,GAAGD,SAAU,CAAA;AAElDD,IAAAA,IAAI,CAACZ,KAAK,CAACkB,QAAQ,GAAG,OAAO,CAAA;IAC7BN,IAAI,CAACZ,KAAK,CAACmB,GAAG,GAAG,CAAC1B,SAAS,GAAG,IAAI,CAAA;AAClCmB,IAAAA,IAAI,CAACZ,KAAK,CAACoB,IAAI,GAAG,GAAG,CAAA;IACrB,IAAI,CAACjC,kBAAkB,EAAE;AACvByB,MAAAA,IAAI,CAACZ,KAAK,CAACF,KAAK,GAAGN,WAAW,GAAG,IAAI,CAAA;AACvC,KAAC,MAAM;AACLoB,MAAAA,IAAI,CAACZ,KAAK,CAACF,KAAK,GAAG,GAAG,CAAA;AACxB,KAAA;AAEAP,IAAAA,WAAW,CAACC,WAAW,EAACC,SAAS,CAAC,CAAA;AACpC,GAAC,MAAM;AACLV,IAAAA,cAAc,GAAG,CAAC,CAAA;AAClB;IACA,MAAMU,SAAS,GAAGQ,QAAQ,CAACW,IAAI,CAACZ,KAAK,CAACmB,GAAG,CAAC,CAAA;AAC1CP,IAAAA,IAAI,CAACZ,KAAK,CAACiB,QAAQ,GAAG,EAAE,CAAA;AAExBL,IAAAA,IAAI,CAACZ,KAAK,CAACkB,QAAQ,GAAG,EAAE,CAAA;AACxBN,IAAAA,IAAI,CAACZ,KAAK,CAACmB,GAAG,GAAG,EAAE,CAAA;AACnBP,IAAAA,IAAI,CAACZ,KAAK,CAACoB,IAAI,GAAG,EAAE,CAAA;AACpBR,IAAAA,IAAI,CAACZ,KAAK,CAACF,KAAK,GAAG,EAAE,CAAA;AACrBP,IAAAA,WAAW,CAAC,CAAC,EAAC,CAACE,SAAS,CAAC,CAAA;AACxB;AACH,GAAA;AACF,EAAC;AAIK,MAAA,CAAC4B,eAAe,EAAEC,mBAAmB,CAAC,GAAGC,aAAa,CAACC,KAAK,CAACC,eAAe,EAAC;AAG5E,MAAMC,eAAe,gBAAGC,UAAU,CAAC,CAAAC,IAAA,EAMxCC,YAAY,KAAK;EAAA,IALjB;IACEC,QAAQ;IAAEC,KAAK;IAAEC,WAAW;IAAEC,YAAY;IAAEC,WAAW;IAAEC,SAAS;IAAEC,IAAI;IAAEC,IAAI;IAAEC,IAAI;IAAEC,UAAU;IAAEC,YAAY;AAAEC,IAAAA,SAAS,GAAG,QAAQ;IACpIC,kBAAkB;IAAEC,UAAU;AAAEC,IAAAA,SAAS,GAAGvH,gBAAgB;IAAEwH,eAAe;IAAEC,oBAAoB;IAAEC,oBAAoB;IAAEC,QAAQ;IAACpG,kBAAkB;IAAEH,UAAU;AAAEwG,IAAAA,cAAc,GAAG,KAAK;IAAEC,OAAO;IAAEC,QAAQ;IAAEC,cAAc;IAC7NC,YAAY;AAAEC,IAAAA,YAAAA;AAChB,GAAC,GAAA1B,IAAA,CAAA;AAGD,EAAA,MAAM2B,SAAS,GAAGC,YAAY,CAAC3B,YAAY,CAAC,CAAA;AAC5C,EAAA,MAAM4B,iBAAiB,GAAGC,WAAW,CAACpF,QAAQ,CAACqF,aAAa,CAAC,CAAA;AAC7D,EAAA,MAAMC,KAAK,GAAGJ,YAAY,CAACL,QAAQ,CAAC,CAAA;AACpC,EAAA,MAAMU,WAAW,GAAGC,MAAM,EAAE,CAAA;AAC5B,EAAA,MAAMC,gBAAgB,GAAGL,WAAW,EAAE,CAAA;EACtC,MAAMM,YAAY,GAAGN,WAAW,CAAC1F,MAAM,CAACiG,QAAQ,CAACC,IAAI,CAAC,CAAA;EAEtD,MAAM,CAACC,UAAU,EAAE;IAACC,KAAK;AAAEC,IAAAA,OAAAA;GAAQ,CAAC,GAAGhD,eAAe,CAAC;IACrDiD,OAAO,EAAEA,MAAM;AACb5G,MAAAA,UAAU,EAAE,CAACH,IAAI,CAAC,MAAM;AACtB,QAAA,IAAIoF,UAAU,IAAI4B,SAAS,CAAC5B,UAAU,CAAC,KAAK3E,MAAM,CAACiG,QAAQ,CAACC,IAAI,EAAE;AAChElG,UAAAA,MAAM,CAACwG,OAAO,CAACC,YAAY,CAACD,OAAO,CAACE,KAAK,EAAE,EAAE,EAAE1G,MAAM,CAACiG,QAAQ,CAACU,QAAQ,CAAC,CAAA;AACxE3G,UAAAA,MAAM,CAACwG,OAAO,CAACI,SAAS,CAAC;AAACjE,YAAAA,MAAM,EAAE,IAAA;AAAI,WAAC,EAAE,EAAE,EAAEgC,UAAU,CAAC,CAAA;AAC1D,SAAC,MAAM;AACL3E,UAAAA,MAAM,CAACwG,OAAO,CAACI,SAAS,CAAC;AAACjE,YAAAA,MAAM,EAAE,IAAA;AAAI,WAAC,EAAE,EAAE,EAAE3C,MAAM,CAACiG,QAAQ,CAACY,IAAI,IAAIlC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAA;AACzF,SAAA;AACF,OAAC,CAAC,CAAA;AACF;MACA,IAAIrE,QAAQ,CAACsC,IAAI,CAACkE,YAAY,KAAKxG,QAAQ,CAACsC,IAAI,CAACmE,YAAY,EAAE;AAC7DnB,QAAAA,KAAK,CAACoB,OAAO,CAAChF,KAAK,CAACgB,SAAS,GAAG,QAAQ,CAAA;QACxC,IAAI6C,WAAW,CAACmB,OAAO,EAAE;AACvBnB,UAAAA,WAAW,CAACmB,OAAO,CAAChF,KAAK,CAACgB,SAAS,GAAG,QAAQ,CAAA;AAChD,SAAA;AACF,OAAA;AACA;KACD;IACDiE,QAAQ,EAAGC,MAAM,IAAK;AACpB,MAAA,IACGA,MAAM,KAAK,CAAC,IAAIC,IAAA,CAAM,QAAQ,EAAEnH,MAAM,CAACwG,OAAO,CAACE,KAAK,CAAC,KAAK,IAAI,IAC9D/B,UAAU,IAAI3E,MAAM,CAACiG,QAAQ,CAACC,IAAI,KAAKK,SAAS,CAAC5B,UAAU,CAAE,EAC9D;AACAtF,QAAAA,gBAAgB,CAAC,MAAM;AACrBW,UAAAA,MAAM,CAACwG,OAAO,CAACY,IAAI,EAAE,CAAA;AACvB,SAAC,CAAC,CAAA;AACJ,OAAA;KACD;IACDC,OAAO,EAAEA,MAAM;MACb,IAAI/G,QAAQ,CAACsC,IAAI,CAACkE,YAAY,GAAGxG,QAAQ,CAACsC,IAAI,CAACmE,YAAY,EAAE;QAC3D,IAAIlB,WAAW,CAACmB,OAAO,EAAE;AACvBnB,UAAAA,WAAW,CAACmB,OAAO,CAAChF,KAAK,CAACgB,SAAS,GAAG,QAAQ,CAAA;AAChD,SAAA;AACF,OAAC,MAAM,IAAI4C,KAAK,CAACoB,OAAO,EAAE;AACxBpB,QAAAA,KAAK,CAACoB,OAAO,CAAChF,KAAK,CAACgB,SAAS,GAAG,QAAQ,CAAA;AAC1C,OAAA;MACA/B,kBAAkB,CAAC,KAAK,CAAC,CAAA;AAC3B,KAAA;AACF,GAAC,CAAC,CAAA;EAEF,MAAMqG,kBAAkB,GAAGA,MAAM;IAC/B,IAAIhD,IAAI,IAAIA,IAAI,CAACiD,aAAa,EAAE,IAAItC,cAAc,EAAE;MAClDX,IAAI,CAACkD,OAAO,EAAE,CACXjI,IAAI,CAACyE,WAAW,CAAC,CAAA;AACtB,KAAC,MAAM;MACLyD,cAAc,CAACzD,WAAW,CAAC,CAAA;AAC7B,KAAA;GACD,CAAA;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEE,EAAsBR,KAAK,CAACsC,MAAM,GAAE;AAGpC4B,EAAAA,SAAS,CAAC,MAAM;IACd,IAAI/C,UAAU,IAAI3E,MAAM,CAACiG,QAAQ,CAACC,IAAI,KAAKvB,UAAU,EAAE;AACrD;AACAjF,MAAAA,UAAU,EAAE,CAACH,IAAI,CAAC,MAAM;AACtB,QAAA,IAAIS,MAAM,CAACiG,QAAQ,CAACC,IAAI,EAAE;AACxBlG,UAAAA,MAAM,CAACwG,OAAO,CAACC,YAAY,CAAC;AAAC9D,YAAAA,MAAM,EAAE,IAAA;AAAI,WAAC,EAAE,EAAE,EAAEgC,UAAU,CAAC,CAAA;AAC7D,SAAC,MAAM;AACL3E,UAAAA,MAAM,CAACwG,OAAO,CAACI,SAAS,CAAC;AAACjE,YAAAA,MAAM,EAAE,IAAA;AAAI,WAAC,EAAE,EAAE,EAAEgC,UAAU,CAAC,CAAA;AAC1D,SAAA;AACF,OAAC,CAAC,CAAA;AACF;AACA;AACA;AACA;AACAqB,MAAAA,YAAY,CAAC2B,GAAG,CAACpB,SAAS,CAAC5B,UAAU,CAAC,CAAC,CAAA;AACzC,KAAA;AACF,GAAC,EAAE,CAACA,UAAU,CAAC,CAAC,CAAA;AAEhB+C,EAAAA,SAAS,CAAC,MAAM;AACd1H,IAAAA,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAE2H,QAAQ,CAAC,CAAA;AAC5C5H,IAAAA,MAAM,CAACC,gBAAgB,CAAC,SAAS,EAAE4H,UAAU,CAAC,CAAA;AAC9C7H,IAAAA,MAAM,CAACC,gBAAgB,CAAC,UAAU,EAAE6H,YAAY,CAAC,CAAA;AACjD,IAAA,OAAO,MAAM;AACX9H,MAAAA,MAAM,CAAC+H,mBAAmB,CAAC,SAAS,EAAEH,QAAQ,CAAC,CAAA;AAC/C5H,MAAAA,MAAM,CAAC+H,mBAAmB,CAAC,SAAS,EAAEF,UAAU,CAAC,CAAA;AACjD7H,MAAAA,MAAM,CAAC+H,mBAAmB,CAAC,UAAU,EAAED,YAAY,CAAC,CAAA;MACpD,IAAI,CAAC5D,WAAW,IAAI5D,QAAQ,CAACsC,IAAI,CAACoF,QAAQ,CAACvC,iBAAiB,CAACwC,GAAG,EAAE,CAAC,IAAIxC,iBAAiB,CAACwC,GAAG,EAAE,CAACC,OAAO,CAAClJ,iBAAiB,CAAC,EAAE;AACzHmJ,QAAAA,UAAU,CAAC,MAAM1C,iBAAiB,CAACwC,GAAG,EAAE,CAACG,KAAK,EAAE,EAAE,CAAC,CAAC,CAAA;AACtD,OAAA;KACD,CAAA;GACF,EAAE,EAAE,CAAC,CAAA;EAGN,MAAMN,YAAY,GAAIlI,CAAC,IAAK;AAC1B,IAAA,IAAI,CAACwG,KAAK,EAAE,uEAAsE,OAAA;AAClF,IAAA,IAAIe,IAAA,CAAM,gBAAgB,EAAEnH,MAAM,CAACwG,OAAO,CAACE,KAAK,CAAC,KAAK,IAAI,EAAE;AAAE,MAAA,OAAA;AAAO,KAAA;AACrE,IAAA,IAAIS,IAAA,CAAM,QAAQ,EAAEnH,MAAM,CAACwG,OAAO,CAACE,KAAK,CAAC,KAAK,IAAI,EAAE;AAClD1G,MAAAA,MAAM,CAACwG,OAAO,CAACI,SAAS,CAAC;AAACjE,QAAAA,MAAM,EAAE,IAAA;OAAK,EAAE,EAAE,EAAE3C,MAAM,CAACiG,QAAQ,CAACY,IAAI,CAAC,CAAA;AACpE,KAAA;AACAS,IAAAA,kBAAkB,EAAE,CAAA;GACrB,CAAA;EAED,MAAMO,UAAU,GAAIjI,CAAC,IAAK;AACxB,IAAA,IAAI,CAACwG,KAAK,EAAE,IAAIhB,cAAc,EAAE,OAAA;AAChC,IAAA,IAAIQ,KAAK,CAACoB,OAAO,IAAI,CAACpH,CAAC,CAACyI,MAAM,CAACC,OAAO,CAAC,GAAG,GAAG1C,KAAK,CAACoB,OAAO,CAACuB,SAAS,CAACC,KAAK,CAAC,GAAG,CAAC,CAACC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE;MAC1F,MAAMC,OAAO,GAAG9C,KAAK,CAACoB,OAAO,CAAC2B,aAAa,CAAC,YAAY,CAAC,CAAA;AACzD,MAAA,IAAID,OAAO,EACTA,OAAO,CAACN,KAAK,EAAE,CAAA;AACnB,KAAA;GACD,CAAA;EAED,MAAMR,QAAQ,GAAIhI,CAAC,IAAK;IAAA,IAAAgJ,SAAA,EAAAC,UAAA,CAAA;IACtB,IAAI,CAACzC,KAAK,EAAE,IAAIpB,QAAQ,IAAI,EAAA4D,SAAA,GAAAhJ,CAAC,CAACyI,MAAM,cAAAO,SAAA,KAAA,KAAA,CAAA,IAAA,CAAAA,SAAA,GAARA,SAAA,CAAUL,SAAS,MAAAK,IAAAA,IAAAA,SAAA,uBAAnBA,SAAA,CAAqBE,OAAO,CAAC,qBAAqB,CAAC,KAAE,CAAC,IAAAD,CAAAA,UAAA,GAAIjJ,CAAC,CAACyI,MAAM,MAAA,IAAA,IAAAQ,UAAA,KAARA,KAAAA,CAAAA,IAAAA,UAAA,CAAUP,OAAO,CAAC,sBAAsB,CAAC,EAAE,OAAA;IACjI,IAAI1C,KAAK,CAACoB,OAAO,IAAIpH,CAAC,CAACmJ,QAAQ,IAAInJ,CAAC,CAACoJ,OAAO,KAAK,CAAC,IAAIpD,KAAK,CAACoB,OAAO,CAAC2B,aAAa,CAAC,YAAY,CAAC,KAAKrI,QAAQ,CAACqF,aAAa,EAAE;MAC1H/F,CAAC,CAACqJ,cAAc,EAAE,CAAA;AAClB,MAAA,MAAMC,OAAO,GAAG,EAAE,CAACvI,KAAK,CAACC,IAAI,CAACgF,KAAK,CAACoB,OAAO,CAACzG,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC4I,MAAM,CAAC,CAACC,GAAG,EAAEC,EAAE,KAAKA,EAAE,CAACC,QAAQ,IAAIF,GAAG,CAACE,QAAQ,GAAGD,EAAE,GAAGD,GAAG,EAAE;AAACE,QAAAA,QAAQ,EAAE,CAAC,CAAA;AAAC,OAAC,CAAC,CAAA;MACvJ,IAAIJ,OAAO,IAAIA,OAAO,CAACd,KAAK,EAC1Bc,OAAO,CAACd,KAAK,EAAE,CAAA;AACnB,KAAA;AACA,IAAA,IAAIxI,CAAC,CAAC2J,GAAG,KAAK,QAAQ,EAAE;MACtB3J,CAAC,CAACqJ,cAAc,EAAE,CAAA;AAClB3B,MAAAA,kBAAkB,EAAE,CAAA;AACtB,KAAC,MAAM,IAAI1H,CAAC,CAAC2J,GAAG,KAAK,OAAO,EAAE;MAC5B,IAAI3J,CAAC,CAACyI,MAAM,EAAE;QACZ,MAAMA,MAAM,GAAGzI,CAAC,CAACyI,MAAM,CAACC,OAAO,CAACtJ,iBAAiB,GAAG,MAAM,CAAC,CAAA;AAC3D,QAAA,IAAIqJ,MAAM,KAAKA,MAAM,CAACmB,OAAO,CAACC,WAAW,EAAE,KAAK,OAAO,IAAIpB,MAAM,CAAC/D,IAAI,IAAI+D,MAAM,CAACqB,IAAI,CAACD,WAAW,EAAE,KAAK,MAAM,CAAC,IAAIpB,MAAM,CAACH,OAAO,CAAClJ,iBAAiB,CAAC,EAClJ,OAAA;AACJ,OAAA;MACAY,CAAC,CAACqJ,cAAc,EAAE,CAAA;MAClBrJ,CAAC,CAAC+J,eAAe,EAAE,CAAA;AACnB,MAAA,IAAIxF,SAAS,EAAE;AACbA,QAAAA,SAAS,EAAE,CAAA;OACZ,MAAM,IAAIG,IAAI,EAAE;QACfA,IAAI,CAACsF,UAAU,EAAE,CAAA;AACnB,OAAA;KACD,MAAM,IAAI,CAAChK,CAAC,CAACyI,MAAM,CAACH,OAAO,CAACnJ,gBAAgB,CAAC,EAAE;AAC9C,MAAA,IAAIa,CAAC,CAAC2J,GAAG,KAAK,WAAW,IAAInF,IAAI,EAAE;AACjCA,QAAAA,IAAI,EAAE,CAAA;OACP,MAAM,IAAIxE,CAAC,CAAC2J,GAAG,KAAK,YAAY,IAAIlF,IAAI,EAAE;AACzCA,QAAAA,IAAI,EAAE,CAAA;AACR,OAAA;AACF,KAAA;GACD,CAAA;EAED,MAAMwF,UAAU,GAAIjK,CAAC,IAAK;AACxB,IAAA,IAAIqE,YAAY,IAAIrE,CAAC,CAACyI,MAAM,KAAKzI,CAAC,CAACkK,aAAa,IAAI/D,gBAAgB,CAACkC,GAAG,EAAE,EAAE;AAC1EX,MAAAA,kBAAkB,EAAE,CAAA;AACtB,KAAA;AACAvB,IAAAA,gBAAgB,CAAC4B,GAAG,CAAC,KAAK,CAAC,CAAA;GAC5B,CAAA;EACD,MAAMoC,SAAS,GAAInK,CAAC,IAAK;IACvBmG,gBAAgB,CAAC4B,GAAG,CAAC/H,CAAC,CAACyI,MAAM,KAAKzI,CAAC,CAACkK,aAAa,CAAC,CAAA;GACnD,CAAA;AAED,EAAA,MAAME,SAAS,GAAGxF,YAAY,IAAKF,IAAI,IAAI,CAACC,UAAW,CAAA;AAEvD0F,EAAAA,gBAAgB,CAAC1E,SAAS,EAAEX,SAAS,EAAE,IAAI,EAAE;IAC3CsF,UAAU,EAAE,CAAChF,OAAO;IACpBiF,UAAU,EAAEA,MAAM;AAChB,MAAA,IAAI9D,OAAO,EAAE,KAAK,CAAC,EAAE;QACnBpF,kBAAkB,CAAC,IAAI,CAAC,CAAA;AAC1B,OAAA;MACA,IAAIX,QAAQ,CAACsC,IAAI,CAACkE,YAAY,KAAKxG,QAAQ,CAACsC,IAAI,CAACmE,YAAY,EAAE;AAC7DnB,QAAAA,KAAK,CAACoB,OAAO,CAAChF,KAAK,CAACgB,SAAS,GAAG,MAAM,CAAA;AACxC,OAAA;MACA,IAAI6C,WAAW,CAACmB,OAAO,EAAE;AACvBnB,QAAAA,WAAW,CAACmB,OAAO,CAAChF,KAAK,CAACgB,SAAS,GAAG,QAAQ,CAAA;AAChD,OAAA;KACD;AACDoH,IAAAA,WAAW,EAACtF,oBAAoB;AAChCuF,IAAAA,WAAW,EAACtF,oBAAoB;AAChCuF,IAAAA,MAAM,EAACzF,eAAAA;AACT,GAAC,CAAC,CAAA;EACFoF,gBAAgB,CAACrE,KAAK,EAAE,CAACV,OAAO,IAAIqF,qBAAqB,EAAE,IAAI,EAAC;AAACD,IAAAA,MAAM,EAACzF,eAAAA;AAAe,GAAC,CAAC,CAAA;AAEzF,EAAA,MAAM2F,OAAO,gBAAGhH,KAAA,CAAAiH,aAAA,CAAAjH,KAAA,CAAAkH,QAAA,EACdlH,IAAAA,eAAAA,KAAA,CAAAiH,aAAA,CAAC5L,SAAS,EAAA;IAAC8L,IAAI,EAAE,QAAQ,GAAGxE,UAAAA;AAAW,GAAC,CAAC,eACzC3C,KAAA,CAAAiH,aAAA,CAACG,aAAa,EAAA;AAAC7G,IAAAA,KAAK,EAAE0D,cAAc,CAAC1D,KAAK,CAAE;AAACC,IAAAA,WAAW,EAAEA,WAAY;AAAC6G,IAAAA,KAAK,EAAEnG,kBAAAA;GAC3E+C,EAAAA,cAAc,CAAC3D,QAAQ,EAAE;AAACwD,IAAAA,kBAAAA;AAAkB,GAAC,EAAE/B,SAAS,EAAE3G,kBAAkB,CAChE,CACf,CAAC,CAAA;AAEH,EAAA,oBACE4E,KAAA,CAAAiH,aAAA,CAACK,IAAI,EAAA;AAACH,IAAAA,IAAI,EAAElG,SAAAA;AAAU,GAAA,EAElBS,OAAO,GACHsF,OAAO,gBACPhH,KAAA,CAAAiH,aAAA,CAAAjH,KAAA,CAAAkH,QAAA,EACAlH,IAAAA,eAAAA,KAAA,CAAAiH,aAAA,CAACM,aAAa,EAAA;AAACT,IAAAA,MAAM,EAAEzF,eAAgB;AAACS,IAAAA,YAAY,EAAEA,YAAAA;AAAa,GAAC,CAAC,eACrE9B,KAAA,CAAAiH,aAAA,CAACvM,cAAc,EAAA;AAAC8M,IAAAA,GAAG,EAAEpF,KAAAA;AAAM,GAAA,eAE3BpC,KAAA,CAAAiH,aAAA,CAACtM,YAAY,EAAA;AAACkH,IAAAA,YAAY,EAAEA,YAAa;AAACkD,IAAAA,SAAS,EAAC,WAAW;AAACnK,IAAAA,UAAU,EAAEiI,OAAO,EAAE,GAAC,CAAE;AAAC5H,IAAAA,UAAU,EAAEA,UAAW;AAACG,IAAAA,kBAAkB,EAAEA,kBAAmB;AAACoM,IAAAA,GAAG,EAAEnF,WAAY;AAACoF,IAAAA,EAAE,EAAEjB,SAAS,GAAG,MAAM,GAAGkB,SAAU;AAACC,IAAAA,OAAO,EAAEtB,UAAW;AACrNuB,IAAAA,QAAQ,EAAEpB,SAAS,GAAG,MAAM,EAAE,GAAGkB,SAAU;AAC3CG,IAAAA,WAAW,EAAEtB,SAAAA;AAAU,GAAA,EAClCS,OACW,CACA,CACd,CAEF,CAAC,CAAA;AAEX,CAAC,EAAC;AAEK,MAAMO,aAAa,gBAAGvH,KAAK,CAACG,UAAU,CAAC,CAAA2H,KAAA,EAAuHN,GAAG,KAAK;EAAA,IAA9H;MAACV,MAAM;MAACJ,UAAU;MAACG,WAAW;MAACD,WAAW;AAACmB,MAAAA,OAAO,GAAGhO,aAAa;AAAEiO,MAAAA,QAAQ,GAAGhO,cAAc;AAAE8H,MAAAA,YAAAA;AAAqB,KAAC,GAAAgG,KAAA;AAANtN,IAAAA,KAAK,GAAAyN,wBAAA,CAAAH,KAAA,EAAAI,SAAA,CAAA,CAAA;AACjK,EAAA,MAAM9F,KAAK,GAAGJ,YAAY,CAACwF,GAAG,CAAC,CAAA;AAC/Bf,EAAAA,gBAAgB,CAACrE,KAAK,EAAE2F,OAAO,EAAEC,QAAQ,EAAC;IAAClB,MAAM;IAACJ,UAAU;IAACE,WAAW;AAACC,IAAAA,WAAAA;AAAW,GAAC,CAAC,CAAA;EACtF,oBAAO7G,KAAA,CAAAiH,aAAA,CAAC/M,KAAK,EAAAiO,QAAA,KAAK3N,KAAK,EAAA;AAAEC,IAAAA,aAAa,EAAEqH,YAAa;AAAC0F,IAAAA,GAAG,EAAEpF,KAAAA;AAAM,GAAA,CAAC,CAAC,CAAA;AACrE,CAAC;;;;"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import _extends from '@babel/runtime/helpers/extends';
|
|
2
|
+
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
3
|
+
import React, { useMemo } from 'react';
|
|
4
|
+
import { useEnsureRef, Fill } from '@startlibs/core';
|
|
5
|
+
import { usePositioning } from './usePositioning.mjs';
|
|
6
|
+
import styled from 'styled-components';
|
|
7
|
+
import { getDialogLayersSize } from './DialogContainer.mjs';
|
|
8
|
+
|
|
9
|
+
const _excluded = ["slot", "className", "onClick", "children"];
|
|
10
|
+
const AbsoluteContainer = /*#__PURE__*/styled.div.withConfig({
|
|
11
|
+
displayName: "Reposition__AbsoluteContainer",
|
|
12
|
+
componentId: "sc-1rugphp-0"
|
|
13
|
+
})(["position:absolute;"]);
|
|
14
|
+
const Reposition = /*#__PURE__*/React.forwardRef((_ref, ref) => {
|
|
15
|
+
let {
|
|
16
|
+
slot = 'Popup',
|
|
17
|
+
className,
|
|
18
|
+
onClick,
|
|
19
|
+
children
|
|
20
|
+
} = _ref,
|
|
21
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
22
|
+
const popupRef = useEnsureRef(ref);
|
|
23
|
+
const [positionInfo, placeholder] = usePositioning(popupRef, rest);
|
|
24
|
+
const slotName = useMemo(() => getDialogLayersSize() === 0 ? slot : slot + '-' + (getDialogLayersSize() - 1), []);
|
|
25
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, placeholder, /*#__PURE__*/React.createElement(Fill, {
|
|
26
|
+
name: slotName
|
|
27
|
+
}, /*#__PURE__*/React.createElement(AbsoluteContainer, _extends({}, positionInfo, {
|
|
28
|
+
onClick: onClick,
|
|
29
|
+
className: className,
|
|
30
|
+
ref: popupRef
|
|
31
|
+
}), children)));
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
export { Reposition };
|
|
35
|
+
//# sourceMappingURL=Reposition.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Reposition.mjs","sources":["../../src/containers/Reposition.jsx"],"sourcesContent":["import React, {useMemo} from 'react'\nimport {Fill, useEnsureRef} from '@startlibs/core'\nimport {usePositioning} from './usePositioning'\nimport styled from 'styled-components'\nimport {getDialogLayersSize} from './DialogContainer'\n\nconst AbsoluteContainer = styled.div`\nposition: absolute;\n`\n\nexport const Reposition = React.forwardRef(({slot = 'Popup', className, onClick, children, ...rest},ref) => {\n const popupRef = useEnsureRef(ref)\n const [positionInfo, placeholder] = usePositioning(popupRef, rest)\n\n const slotName = useMemo(() => getDialogLayersSize() === 0 ? slot : (slot + '-' + (getDialogLayersSize() - 1)), [])\n return <>\n {placeholder}\n <Fill name={slotName}>\n <AbsoluteContainer {...positionInfo} onClick={onClick} className={className} ref={popupRef}>\n {children}\n </AbsoluteContainer>\n </Fill>\n </>\n})"],"names":["AbsoluteContainer","styled","div","withConfig","displayName","componentId","Reposition","React","forwardRef","_ref","ref","slot","className","onClick","children","rest","_objectWithoutProperties","_excluded","popupRef","useEnsureRef","positionInfo","placeholder","usePositioning","slotName","useMemo","getDialogLayersSize","createElement","Fragment","Fill","name","_extends"],"mappings":";;;;;;;;;AAMA,MAAMA,iBAAiB,gBAAGC,MAAM,CAACC,GAAG,CAAAC,UAAA,CAAA;EAAAC,WAAA,EAAA,+BAAA;EAAAC,WAAA,EAAA,cAAA;AAAA,CAEnC,CAAA,CAAA,CAAA,oBAAA,CAAA,CAAA,CAAA;AAEM,MAAMC,UAAU,gBAAGC,KAAK,CAACC,UAAU,CAAC,CAAAC,IAAA,EAAyDC,GAAG,KAAK;EAAA,IAAhE;AAACC,MAAAA,IAAI,GAAG,OAAO;MAAEC,SAAS;MAAEC,OAAO;AAAEC,MAAAA,QAAAA;AAAiB,KAAC,GAAAL,IAAA;AAALM,IAAAA,IAAI,GAAAC,wBAAA,CAAAP,IAAA,EAAAQ,SAAA,CAAA,CAAA;AAChG,EAAA,MAAMC,QAAQ,GAAGC,YAAY,CAACT,GAAG,CAAC,CAAA;EAClC,MAAM,CAACU,YAAY,EAAEC,WAAW,CAAC,GAAGC,cAAc,CAACJ,QAAQ,EAAEH,IAAI,CAAC,CAAA;EAElE,MAAMQ,QAAQ,GAAGC,OAAO,CAAC,MAAMC,mBAAmB,EAAE,KAAK,CAAC,GAAGd,IAAI,GAAIA,IAAI,GAAG,GAAG,IAAIc,mBAAmB,EAAE,GAAG,CAAC,CAAE,EAAE,EAAE,CAAC,CAAA;AACnH,EAAA,oBAAOlB,KAAA,CAAAmB,aAAA,CAAAnB,KAAA,CAAAoB,QAAA,EACJN,IAAAA,EAAAA,WAAW,eACZd,KAAA,CAAAmB,aAAA,CAACE,IAAI,EAAA;AAACC,IAAAA,IAAI,EAAEN,QAAAA;GACVhB,eAAAA,KAAA,CAAAmB,aAAA,CAAC1B,iBAAiB,EAAA8B,QAAA,KAAKV,YAAY,EAAA;AAAEP,IAAAA,OAAO,EAAEA,OAAQ;AAACD,IAAAA,SAAS,EAAEA,SAAU;AAACF,IAAAA,GAAG,EAAEQ,QAAAA;GAC/EJ,CAAAA,EAAAA,QACgB,CACf,CACN,CAAC,CAAA;AACL,CAAC;;;;"}
|