@startlibs/components 1.1.5 → 1.2.0-rc.2

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 (123) hide show
  1. package/lib/BasicBulletList.mjs +1 -1
  2. package/lib/BasicBulletList.mjs.map +1 -1
  3. package/lib/Button.mjs +3 -3
  4. package/lib/Button.mjs.map +1 -1
  5. package/lib/ContextMenu.mjs +22 -6
  6. package/lib/ContextMenu.mjs.map +1 -1
  7. package/lib/Dialog.mjs +60 -24
  8. package/lib/Dialog.mjs.map +1 -1
  9. package/lib/Icon.mjs +10 -4
  10. package/lib/Icon.mjs.map +1 -1
  11. package/lib/Loading.mjs +26 -3
  12. package/lib/Loading.mjs.map +1 -1
  13. package/lib/PageLoader.mjs +2 -2
  14. package/lib/PageLoader.mjs.map +1 -1
  15. package/lib/PersistentNotifications.mjs +1 -1
  16. package/lib/PersistentNotifications.mjs.map +1 -1
  17. package/lib/SplitColumnsContainer.mjs +77 -6
  18. package/lib/SplitColumnsContainer.mjs.map +1 -1
  19. package/lib/TextButton.mjs +1 -1
  20. package/lib/TextButton.mjs.map +1 -1
  21. package/lib/ToastNotifications.mjs +16 -14
  22. package/lib/ToastNotifications.mjs.map +1 -1
  23. package/lib/alt/dialogs/DialogWithImageHeader.mjs +1 -1
  24. package/lib/alt/dialogs/DialogWithImageHeader.mjs.map +1 -1
  25. package/lib/alt/dialogs/DialogWithSidebar.mjs +7 -3
  26. package/lib/alt/dialogs/DialogWithSidebar.mjs.map +1 -1
  27. package/lib/alt/dialogs/MobileBubbleDialog.mjs +1 -1
  28. package/lib/alt/dialogs/MobileBubbleDialog.mjs.map +1 -1
  29. package/lib/containers/DialogContainer.mjs +31 -12
  30. package/lib/containers/DialogContainer.mjs.map +1 -1
  31. package/lib/index.cjs +288 -95
  32. package/lib/index.cjs.map +1 -1
  33. package/lib/willUseIsSticky.mjs +23 -2
  34. package/lib/willUseIsSticky.mjs.map +1 -1
  35. package/lib-yak/BasicBulletList.mjs +27 -0
  36. package/lib-yak/BasicBulletList.mjs.map +1 -0
  37. package/lib-yak/Button.mjs +374 -0
  38. package/lib-yak/Button.mjs.map +1 -0
  39. package/lib-yak/ContextMenu.mjs +642 -0
  40. package/lib-yak/ContextMenu.mjs.map +1 -0
  41. package/lib-yak/Dialog.mjs +468 -0
  42. package/lib-yak/Dialog.mjs.map +1 -0
  43. package/lib-yak/Draggable.mjs +892 -0
  44. package/lib-yak/Draggable.mjs.map +1 -0
  45. package/lib-yak/ErrorBoundary.mjs +108 -0
  46. package/lib-yak/ErrorBoundary.mjs.map +1 -0
  47. package/lib-yak/FillLastLineResizer.mjs +238 -0
  48. package/lib-yak/FillLastLineResizer.mjs.map +1 -0
  49. package/lib-yak/Flip.mjs +644 -0
  50. package/lib-yak/Flip.mjs.map +1 -0
  51. package/lib-yak/FlipList.mjs +186 -0
  52. package/lib-yak/FlipList.mjs.map +1 -0
  53. package/lib-yak/FormatDate.mjs +25 -0
  54. package/lib-yak/FormatDate.mjs.map +1 -0
  55. package/lib-yak/Icon.mjs +74 -0
  56. package/lib-yak/Icon.mjs.map +1 -0
  57. package/lib-yak/Image.mjs +41 -0
  58. package/lib-yak/Image.mjs.map +1 -0
  59. package/lib-yak/Link.mjs +116 -0
  60. package/lib-yak/Link.mjs.map +1 -0
  61. package/lib-yak/Loading.mjs +54 -0
  62. package/lib-yak/Loading.mjs.map +1 -0
  63. package/lib-yak/LoadingDiv.mjs +82 -0
  64. package/lib-yak/LoadingDiv.mjs.map +1 -0
  65. package/lib-yak/Notifications.mjs +99 -0
  66. package/lib-yak/Notifications.mjs.map +1 -0
  67. package/lib-yak/PageLoader.mjs +61 -0
  68. package/lib-yak/PageLoader.mjs.map +1 -0
  69. package/lib-yak/PersistentNotifications.mjs +209 -0
  70. package/lib-yak/PersistentNotifications.mjs.map +1 -0
  71. package/lib-yak/Popup.mjs +66 -0
  72. package/lib-yak/Popup.mjs.map +1 -0
  73. package/lib-yak/SplitColumnsContainer.mjs +140 -0
  74. package/lib-yak/SplitColumnsContainer.mjs.map +1 -0
  75. package/lib-yak/SwitchDiv.mjs +60 -0
  76. package/lib-yak/SwitchDiv.mjs.map +1 -0
  77. package/lib-yak/TextButton.mjs +61 -0
  78. package/lib-yak/TextButton.mjs.map +1 -0
  79. package/lib-yak/ToastNotifications.mjs +316 -0
  80. package/lib-yak/ToastNotifications.mjs.map +1 -0
  81. package/lib-yak/Tooltip.mjs +176 -0
  82. package/lib-yak/Tooltip.mjs.map +1 -0
  83. package/lib-yak/TransitionDiv.mjs +59 -0
  84. package/lib-yak/TransitionDiv.mjs.map +1 -0
  85. package/lib-yak/WarningDialog.mjs +107 -0
  86. package/lib-yak/WarningDialog.mjs.map +1 -0
  87. package/lib-yak/alt/buttons/OnClickLoadingButton.mjs +36 -0
  88. package/lib-yak/alt/buttons/OnClickLoadingButton.mjs.map +1 -0
  89. package/lib-yak/alt/dialogs/DialogWithImageHeader.mjs +50 -0
  90. package/lib-yak/alt/dialogs/DialogWithImageHeader.mjs.map +1 -0
  91. package/lib-yak/alt/dialogs/DialogWithSidebar.mjs +193 -0
  92. package/lib-yak/alt/dialogs/DialogWithSidebar.mjs.map +1 -0
  93. package/lib-yak/alt/dialogs/MobileBubbleDialog.mjs +82 -0
  94. package/lib-yak/alt/dialogs/MobileBubbleDialog.mjs.map +1 -0
  95. package/lib-yak/containers/DialogContainer.mjs +482 -0
  96. package/lib-yak/containers/DialogContainer.mjs.map +1 -0
  97. package/lib-yak/containers/Reposition.mjs +35 -0
  98. package/lib-yak/containers/Reposition.mjs.map +1 -0
  99. package/lib-yak/containers/usePositioning.mjs +311 -0
  100. package/lib-yak/containers/usePositioning.mjs.map +1 -0
  101. package/lib-yak/index.mjs +37 -0
  102. package/lib-yak/index.mjs.map +1 -0
  103. package/lib-yak/useDialogWithToggle.mjs +18 -0
  104. package/lib-yak/useDialogWithToggle.mjs.map +1 -0
  105. package/lib-yak/willUseIsSticky.mjs +147 -0
  106. package/lib-yak/willUseIsSticky.mjs.map +1 -0
  107. package/package.json +12 -3
  108. package/src/BasicBulletList.jsx +1 -1
  109. package/src/Button.jsx +36 -30
  110. package/src/ContextMenu.jsx +21 -7
  111. package/src/Dialog.jsx +30 -12
  112. package/src/Icon.jsx +5 -4
  113. package/src/Loading.jsx +19 -5
  114. package/src/PageLoader.jsx +3 -3
  115. package/src/PersistentNotifications.jsx +2 -2
  116. package/src/SplitColumnsContainer.jsx +89 -30
  117. package/src/TextButton.jsx +1 -1
  118. package/src/ToastNotifications.jsx +15 -8
  119. package/src/alt/dialogs/DialogWithImageHeader.jsx +2 -2
  120. package/src/alt/dialogs/DialogWithSidebar.jsx +6 -5
  121. package/src/alt/dialogs/MobileBubbleDialog.jsx +1 -1
  122. package/src/containers/DialogContainer.jsx +13 -6
  123. package/src/willUseIsSticky.jsx +22 -2
@@ -0,0 +1,482 @@
1
+ import _extends from '@babel/runtime/helpers/extends';
2
+ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
3
+ import _get from 'lodash/fp/get';
4
+ import { yakDomTag } from '@startlibs/utils/yakDomTag';
5
+ import React, { forwardRef, useRef, useEffect } from 'react';
6
+ import { styled, css } from '@yak/react';
7
+ import { Slot, willUseLayers, useEnsureRef, useRefState, Fill } from '@startlibs/core';
8
+ import { oneWayAnimation, twoWayAnimation, identityOpacityFrames, callIfFunction } from '@startlibs/utils';
9
+ import { ErrorBoundary } from '../ErrorBoundary.mjs';
10
+ import { useFlipAnimation } from '../Flip.mjs';
11
+
12
+ const _excluded = ["tagAs", "withScroll", "fullscreen", "fullscreenOnMobile"],
13
+ _excluded2 = ["timing", "nestedFlip", "enterEffect", "leaveEffect", "modalIn", "modalOut", "blurBackdrop"];
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 = styled(yakDomTag("div")).attrs({
17
+ className: "styled-modal"
18
+ })`
19
+ position: fixed;
20
+ top:0;
21
+ bottom:0;
22
+ left:0;
23
+ right:0;
24
+ will-change: opacity;
25
+ background-color: rgba(0,0,0,0.7);
26
+ ${props => props.$blurBackdrop && css`backdrop-filter: blur(10px);`}
27
+ `;
28
+ const ModalContainer = styled(yakDomTag("div")).attrs({
29
+ className: "styled-modal-container"
30
+ })`
31
+ position: fixed;
32
+ top:0;
33
+ bottom:0;
34
+ left:0;
35
+ right:0;
36
+ /* Barra invisível mantendo a LARGURA NATIVA da calha (scrollbar-color não
37
+ colapsa a largura como scrollbar-width:none / ::-webkit-scrollbar faziam).
38
+ Essa calha compensa a remoção da scrollbar do body ao abrir a dialog (body
39
+ vira overflow:hidden e o viewport alarga ~15px no fim da animação); sem ela,
40
+ a dialog centralizada dá um pulinho lateral. Aqui: sem barra visível e sem salto. */
41
+ scrollbar-color: transparent transparent;
42
+ `;
43
+
44
+ // R6: "as" não existe no yak. tagAs troca a tag renderizada (form quando a dialog embute um
45
+ // form, senão div). withScroll/fullscreen/fullscreenOnMobile são lidos pelo template abaixo,
46
+ // mas não são atributos DOM válidos: como o alvo do styled() agora é um componente (não mais
47
+ // styled.div puro), o styled-components para de filtrar prop inválida sozinho — tiram-se à mão
48
+ // antes do spread no elemento real.
49
+ const DialogCenterTagAs = /*#__PURE__*/React.forwardRef((_ref, ref) => {
50
+ let {
51
+ tagAs: Tag = 'div',
52
+ withScroll,
53
+ fullscreen,
54
+ fullscreenOnMobile
55
+ } = _ref,
56
+ props = _objectWithoutProperties(_ref, _excluded);
57
+ return /*#__PURE__*/React.createElement(Tag, _extends({
58
+ ref: ref
59
+ }, props));
60
+ });
61
+ const DialogCenter = styled(DialogCenterTagAs)`
62
+ @supports (position:sticky) {
63
+ will-change: transform, opacity;
64
+ &.JS-wc-off {
65
+ will-change: auto;
66
+ }
67
+ }
68
+ display: -webkit-box;
69
+ display: -ms-flexbox;
70
+ display: flex;
71
+ overflow-y: ${props => props.withScroll ? "scroll" : "hidden"};
72
+ overflow-x:hidden;
73
+ /* idem ModalContainer: calha nativa reservada (sem salto), track invisível — mas o
74
+ polegar é visível, senão dialog mais alta que a tela rola sem nenhuma pista.
75
+ Claro porque a calha fica sobre o backdrop escuro. Sem overflow, o Chromium não
76
+ desenha polegar → não sobra track fantasma. */
77
+ scrollbar-color: rgba(255,255,255,0.6) transparent;
78
+ position:fixed;
79
+ top:0;
80
+ bottom:0;
81
+ left:0;
82
+ right:0;
83
+ align-items: center;
84
+ @media (min-width: 601px) {
85
+ padding: ${props => props.fullscreen ? '1rem' : '3rem 0.5rem'};
86
+ }
87
+ @media (max-width: 600px) {
88
+ padding: ${props => props.fullscreenOnMobile ? '0' : '0.5rem'};
89
+ }
90
+ `;
91
+ const PopupSlot = styled(Slot)`
92
+ position: absolute;
93
+ left:0;
94
+ top: 0;
95
+ width: 100%;
96
+ `;
97
+ styled(Slot)`
98
+ width:100%;
99
+ position: absolute;
100
+ `;
101
+ const editableSelector = 'textarea,input,[contenteditable]';
102
+ const focusableSelector = 'button,a,' + editableSelector;
103
+ const shouldPreventResolvers = [];
104
+ let shouldPreventDialogPop = Promise.resolve();
105
+ const preventDialogPop = cb => {
106
+ shouldPreventDialogPop = shouldPreventDialogPop.then(() => {
107
+ new Promise(res => {
108
+ shouldPreventResolvers.push(res);
109
+ cb();
110
+ });
111
+ });
112
+ };
113
+ const waitForPop = () => {
114
+ return shouldPreventDialogPop;
115
+ };
116
+ const preventDialogPopState = e => {
117
+ const resolver = shouldPreventResolvers.shift();
118
+ if (resolver) {
119
+ e.stopImmediatePropagation();
120
+ resolver();
121
+ }
122
+ };
123
+ window.addEventListener("popstate", preventDialogPopState);
124
+ const fixPosition = (query, fn) => {
125
+ const elements = document.querySelectorAll(query);
126
+ if (elements.length) {
127
+ Array.prototype.slice.call(elements).forEach(fn);
128
+ }
129
+ };
130
+ let openLayers = 0;
131
+ let fakedScrollTop = 0;
132
+ const isFakeScrolled = () => openLayers > 0 && fakedScrollTop > 0;
133
+ const removeWindowScroll = (opening, keepDisabledScroll) => {
134
+ if (opening) {
135
+ openLayers = Math.max(openLayers + 1, 1);
136
+ if (openLayers > 1) {
137
+ return;
138
+ }
139
+ } else {
140
+ openLayers = Math.min(openLayers - 1, 0);
141
+ if (openLayers < 0) {
142
+ return;
143
+ }
144
+ }
145
+ const finishReset = (marginRight, scrollTop) => {
146
+ // body.style.paddingRight = marginRight + 'px'
147
+ window.scroll(window.scrollLeft || window.scrollX || 0, scrollTop);
148
+ if (keepDisabledScroll) {
149
+ return;
150
+ }
151
+ fixPosition('.navbar,.JS-fix-dialog-scroll', n => {
152
+ if (opening) {
153
+ const {
154
+ right
155
+ } = window.getComputedStyle(n);
156
+ n.style.right = parseInt(right) + marginRight + 'px';
157
+ } else {
158
+ n.style.right = null;
159
+ }
160
+ });
161
+ fixPosition('.JS-fix-dialog-scroll-transform', n => {
162
+ if (marginRight) {
163
+ n.style.transform = window.getComputedStyle(n).transform + ` translateX(-${marginRight / 2}px)`;
164
+ } else {
165
+ n.style.transform = null;
166
+ }
167
+ });
168
+ fixPosition('.JS-on-open-dialog', n => {
169
+ if (opening) {
170
+ n.classList.add('JS-dialog-open');
171
+ } else {
172
+ n.classList.remove('JS-dialog-open');
173
+ }
174
+ });
175
+ window.requestAnimationFrame(() => window.dispatchEvent(new CustomEvent('resize', {
176
+ detail: {
177
+ dialog: true
178
+ }
179
+ })));
180
+ };
181
+ const body = document.body;
182
+ let bodyWidth = body.offsetWidth;
183
+ if (opening) {
184
+ const scrollTop = window.pageYOffset;
185
+ fakedScrollTop = scrollTop;
186
+ if (keepDisabledScroll) {
187
+ body.style.overflowY = 'scroll';
188
+ } else {
189
+ body.style.overflow = 'hidden';
190
+ }
191
+ const marginRight = body.offsetWidth - bodyWidth;
192
+ body.style.position = 'fixed';
193
+ body.style.top = -scrollTop + "px";
194
+ body.style.left = '0';
195
+ if (!keepDisabledScroll) {
196
+ body.style.right = marginRight + 'px';
197
+ } else {
198
+ body.style.right = '0';
199
+ }
200
+ finishReset(marginRight, scrollTop);
201
+ } else {
202
+ fakedScrollTop = 0;
203
+ // setTimeout(() => {
204
+ const scrollTop = parseInt(body.style.top);
205
+ body.style.overflow = '';
206
+ body.style.position = '';
207
+ body.style.top = '';
208
+ body.style.left = '';
209
+ body.style.right = '';
210
+ finishReset(0, -scrollTop);
211
+ // },250)
212
+ }
213
+ };
214
+ const [useDialogLayers, getDialogLayersSize] = willUseLayers(React.useLayoutEffect);
215
+ const DialogContainer = /*#__PURE__*/forwardRef((_ref2, forwardedRef) => {
216
+ let {
217
+ children,
218
+ title,
219
+ closeDialog,
220
+ closeOnClick,
221
+ dontRefocus,
222
+ onConfirm,
223
+ prev,
224
+ next,
225
+ form,
226
+ noFormWrap,
227
+ withFormWrap,
228
+ placement = 'Dialog',
229
+ DialogErrorContent,
230
+ customHref,
231
+ animation = dialogFadeInDown,
232
+ animationTiming,
233
+ animationLeaveEffect,
234
+ animationEnterEffect,
235
+ skipKeys,
236
+ fullscreenOnMobile,
237
+ fullscreen,
238
+ confirmChanges = false,
239
+ skipDom,
240
+ modalRef,
241
+ skipCheckFocus,
242
+ autoComplete,
243
+ blurBackdrop
244
+ } = _ref2;
245
+ const dialogRef = useEnsureRef(forwardedRef);
246
+ const prevActiveElement = useRefState(document.activeElement);
247
+ const modal = useEnsureRef(modalRef);
248
+ const modalScroll = useRef();
249
+ const mouseDownInModal = useRefState();
250
+ const previousHash = useRefState(window.location.hash);
251
+ const [layerIndex, {
252
+ isTop,
253
+ getSize
254
+ }] = useDialogLayers({
255
+ onFirst: () => {
256
+ waitForPop().then(() => {
257
+ if (customHref && encodeURI(customHref) === window.location.hash) {
258
+ window.history.replaceState(history.state, '', window.location.pathname);
259
+ window.history.pushState({
260
+ dialog: true
261
+ }, '', customHref);
262
+ } else {
263
+ window.history.pushState({
264
+ dialog: true
265
+ }, '', window.location.href + (customHref || ""));
266
+ }
267
+ });
268
+ // clearPreventDialogPop()
269
+ if (modal.current && document.body.scrollHeight === document.body.clientHeight) {
270
+ modal.current.style.overflowY = "scroll";
271
+ if (modalScroll.current) {
272
+ modalScroll.current.style.overflowY = "scroll";
273
+ }
274
+ }
275
+ // resetNavbar(true)
276
+ },
277
+ onRemove: layers => {
278
+ if (layers === 0 && _get('dialog', window.history.state) === true || customHref && window.location.hash === encodeURI(customHref)) {
279
+ preventDialogPop(() => {
280
+ window.history.back();
281
+ });
282
+ }
283
+ },
284
+ onEmpty: () => {
285
+ if (document.body.scrollHeight > document.body.clientHeight) {
286
+ if (modalScroll.current) {
287
+ modalScroll.current.style.overflowY = "hidden";
288
+ }
289
+ } else if (modal.current) {
290
+ modal.current.style.overflowY = "scroll";
291
+ }
292
+ removeWindowScroll(false);
293
+ }
294
+ });
295
+ const confirmCloseDialog = () => {
296
+ if (form && form.getHasChanged() && confirmChanges) {
297
+ form.confirm().then(closeDialog);
298
+ } else {
299
+ callIfFunction(closeDialog);
300
+ }
301
+ };
302
+ /*
303
+ useEffect(() => () => {
304
+ setTimeout(() => {
305
+ if (window.location.hash === previousHash.get() && _.get('dialog', window.history.state) === true) {
306
+ console.log("???")
307
+ }
308
+ }, 100)
309
+ }, [])*/
310
+
311
+ React.useRef();
312
+ useEffect(() => {
313
+ if (customHref && window.location.hash !== customHref) {
314
+ // if (pastFirstTime.current) {
315
+ waitForPop().then(() => {
316
+ if (window.location.hash) {
317
+ window.history.replaceState({
318
+ dialog: true
319
+ }, '', customHref);
320
+ } else {
321
+ window.history.pushState({
322
+ dialog: true
323
+ }, '', customHref);
324
+ }
325
+ });
326
+ // } else {
327
+ // window.history.pushState({dialog: true}, '', customHref)
328
+ // pastFirstTime.current = true
329
+ // }
330
+ previousHash.set(encodeURI(customHref));
331
+ }
332
+ }, [customHref]);
333
+ useEffect(() => {
334
+ window.addEventListener('keydown', checkKey);
335
+ window.addEventListener('focusin', checkFocus);
336
+ window.addEventListener('popstate', checkHistory);
337
+ return () => {
338
+ window.removeEventListener('keydown', checkKey);
339
+ window.removeEventListener('focusin', checkFocus);
340
+ window.removeEventListener('popstate', checkHistory);
341
+ if (!dontRefocus && document.body.contains(prevActiveElement.get()) && prevActiveElement.get().matches(focusableSelector)) {
342
+ setTimeout(() => prevActiveElement.get().focus(), 0);
343
+ }
344
+ };
345
+ }, []);
346
+ const checkHistory = e => {
347
+ if (!isTop() /* || (previousHash.get() !== window.location.hash && !customHref)*/) return;
348
+ if (_get('willOpenDialog', window.history.state) === true) {
349
+ return;
350
+ }
351
+ if (_get('dialog', window.history.state) !== true) {
352
+ window.history.pushState({
353
+ dialog: true
354
+ }, '', window.location.href);
355
+ }
356
+ confirmCloseDialog();
357
+ };
358
+ const checkFocus = e => {
359
+ if (!isTop() || skipCheckFocus) return;
360
+ if (modal.current && !e.target.closest('.' + modal.current.className.split(' ').join('.'))) {
361
+ const nextTab = modal.current.querySelector('[tabindex]');
362
+ if (nextTab) nextTab.focus();
363
+ }
364
+ };
365
+ const checkKey = e => {
366
+ var _e$target, _e$target2;
367
+ 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;
368
+ if (modal.current && e.shiftKey && e.keyCode === 9 && modal.current.querySelector('[tabindex]') === document.activeElement) {
369
+ e.preventDefault();
370
+ const prevTab = [].slice.call(modal.current.querySelectorAll('[tabindex]')).reduce((acc, el) => el.tabIndex >= acc.tabIndex ? el : acc, {
371
+ tabIndex: -1
372
+ });
373
+ if (prevTab && prevTab.focus) prevTab.focus();
374
+ }
375
+ if (e.key === 'Escape') {
376
+ e.preventDefault();
377
+ confirmCloseDialog();
378
+ } else if (e.key === 'Enter') {
379
+ if (e.target) {
380
+ const target = e.target.closest(focusableSelector + ',div');
381
+ if (target && (target.tagName.toLowerCase() !== 'input' || target.form || target.type.toLowerCase() === 'file') && target.matches(focusableSelector)) return;
382
+ }
383
+ e.preventDefault();
384
+ e.stopPropagation();
385
+ if (onConfirm) {
386
+ onConfirm();
387
+ } else if (form) {
388
+ form.submitForm();
389
+ }
390
+ } else if (!e.target.matches(editableSelector)) {
391
+ if (e.key === 'ArrowLeft' && prev) {
392
+ prev();
393
+ } else if (e.key === 'ArrowRight' && next) {
394
+ next();
395
+ }
396
+ }
397
+ };
398
+ const checkClick = e => {
399
+ if (closeOnClick && e.target === e.currentTarget && mouseDownInModal.get()) {
400
+ confirmCloseDialog();
401
+ }
402
+ mouseDownInModal.set(false);
403
+ };
404
+ const mouseDown = e => {
405
+ mouseDownInModal.set(e.target === e.currentTarget);
406
+ };
407
+ const usingForm = withFormWrap || form && !noFormWrap;
408
+ useFlipAnimation(dialogRef, animation, true, {
409
+ nestedFlip: !skipDom,
410
+ onEnterEnd: () => {
411
+ if (getSize() === 1) {
412
+ removeWindowScroll(true);
413
+ }
414
+ if (modal.current && document.body.scrollHeight === document.body.clientHeight) {
415
+ modal.current.style.overflowY = "none";
416
+ }
417
+ if (modalScroll.current) {
418
+ modalScroll.current.style.overflowY = "scroll";
419
+ }
420
+ },
421
+ leaveEffect: animationLeaveEffect,
422
+ enterEffect: animationEnterEffect,
423
+ timing: animationTiming
424
+ });
425
+ useFlipAnimation(modal, !skipDom && identityOpacityFrames, true, {
426
+ timing: animationTiming
427
+ });
428
+ const content = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(PopupSlot, {
429
+ name: 'Popup-' + layerIndex
430
+ }), /*#__PURE__*/React.createElement(ErrorBoundary, {
431
+ title: callIfFunction(title),
432
+ closeDialog: closeDialog,
433
+ Error: DialogErrorContent
434
+ }, callIfFunction(children, {
435
+ confirmCloseDialog
436
+ }, dialogRef, fullscreenOnMobile)));
437
+ return /*#__PURE__*/React.createElement(Fill, {
438
+ name: placement
439
+ }, skipDom ? content : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(AnimatedModal, {
440
+ timing: animationTiming,
441
+ blurBackdrop: blurBackdrop
442
+ }), /*#__PURE__*/React.createElement(ModalContainer, {
443
+ ref: modal
444
+ }, /*#__PURE__*/React.createElement(DialogCenter, {
445
+ autoComplete: autoComplete,
446
+ className: "JS-has-wc",
447
+ withScroll: getSize() > 1,
448
+ fullscreen: fullscreen,
449
+ fullscreenOnMobile: fullscreenOnMobile,
450
+ ref: modalScroll,
451
+ tagAs: usingForm ? 'form' : undefined,
452
+ onClick: checkClick,
453
+ onSubmit: usingForm ? () => {} : undefined,
454
+ onMouseDown: mouseDown
455
+ }, content))));
456
+ });
457
+ const AnimatedModal = /*#__PURE__*/React.forwardRef((_ref3, ref) => {
458
+ let {
459
+ timing,
460
+ nestedFlip,
461
+ enterEffect,
462
+ leaveEffect,
463
+ modalIn = dialogModalIn,
464
+ modalOut = dialogModalOut,
465
+ blurBackdrop
466
+ } = _ref3,
467
+ props = _objectWithoutProperties(_ref3, _excluded2);
468
+ const modal = useEnsureRef(ref);
469
+ useFlipAnimation(modal, modalIn, modalOut, {
470
+ timing,
471
+ nestedFlip,
472
+ leaveEffect,
473
+ enterEffect
474
+ });
475
+ return /*#__PURE__*/React.createElement(Modal, _extends({}, props, {
476
+ $blurBackdrop: blurBackdrop,
477
+ ref: modal
478
+ }));
479
+ });
480
+
481
+ export { AnimatedModal, DialogContainer, Modal, ModalContainer, dialogFadeInDown, dialogModalIn, dialogModalOut, getDialogLayersSize, isFakeScrolled, preventDialogPop, removeWindowScroll, useDialogLayers, waitForPop };
482
+ //# 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\n// R6: \"as\" não existe no yak. tagAs troca a tag renderizada (form quando a dialog embute um\n// form, senão div). withScroll/fullscreen/fullscreenOnMobile são lidos pelo template abaixo,\n// mas não são atributos DOM válidos: como o alvo do styled() agora é um componente (não mais\n// styled.div puro), o styled-components para de filtrar prop inválida sozinho — tiram-se à mão\n// antes do spread no elemento real.\nconst DialogCenterTagAs = React.forwardRef(({tagAs: Tag = 'div', withScroll, fullscreen, fullscreenOnMobile, ...props}, ref) => <Tag ref={ref} {...props}/>)\n\nconst DialogCenter = styled(DialogCenterTagAs)`\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 (modal.current && 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 (modal.current && 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} tagAs={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","yakDomTag","attrs","className","props","$blurBackdrop","css","ModalContainer","DialogCenterTagAs","React","forwardRef","_ref","ref","tagAs","Tag","withScroll","fullscreen","fullscreenOnMobile","_objectWithoutProperties","_excluded","createElement","_extends","DialogCenter","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","classList","add","remove","requestAnimationFrame","dispatchEvent","CustomEvent","detail","dialog","body","bodyWidth","offsetWidth","pageYOffset","overflowY","overflow","position","top","left","useDialogLayers","getDialogLayersSize","willUseLayers","useLayoutEffect","DialogContainer","_ref2","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","current","scrollHeight","clientHeight","onRemove","layers","_get","back","onEmpty","confirmCloseDialog","getHasChanged","confirm","callIfFunction","useEffect","set","checkKey","checkFocus","checkHistory","removeEventListener","contains","get","matches","setTimeout","focus","target","closest","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","Fragment","name","ErrorBoundary","Error","Fill","AnimatedModal","undefined","onClick","onSubmit","onMouseDown","_ref3","modalIn","modalOut","_excluded2"],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ import _extends from '@babel/runtime/helpers/extends';
2
+ import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
3
+ import { yakDomTag } from '@startlibs/utils/yakDomTag';
4
+ import React, { useMemo } from 'react';
5
+ import { useEnsureRef, Fill } from '@startlibs/core';
6
+ import { usePositioning } from './usePositioning.mjs';
7
+ import { styled } from '@yak/react';
8
+ import { getDialogLayersSize } from './DialogContainer.mjs';
9
+
10
+ const _excluded = ["slot", "className", "onClick", "children"];
11
+ const AbsoluteContainer = styled(yakDomTag("div"))`
12
+ position: absolute;
13
+ `;
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","yakDomTag","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,GAAGC,MAAA,CAAAC,SAAA,CAAA,KAAA,CAAA,CAAA,CAAA;AAC1B;AACA,CAAC,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,CAACvB,iBAAiB,EAAA2B,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;;;;"}