@startlibs/components 1.1.5 → 1.2.0-rc.1
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 +1 -1
- package/lib/BasicBulletList.mjs.map +1 -1
- package/lib/Button.mjs +3 -3
- package/lib/Button.mjs.map +1 -1
- package/lib/ContextMenu.mjs +22 -6
- package/lib/ContextMenu.mjs.map +1 -1
- package/lib/Dialog.mjs +60 -24
- package/lib/Dialog.mjs.map +1 -1
- package/lib/Icon.mjs +10 -4
- package/lib/Icon.mjs.map +1 -1
- package/lib/Loading.mjs +26 -3
- package/lib/Loading.mjs.map +1 -1
- package/lib/PageLoader.mjs +2 -2
- package/lib/PageLoader.mjs.map +1 -1
- package/lib/PersistentNotifications.mjs +1 -1
- package/lib/PersistentNotifications.mjs.map +1 -1
- package/lib/SplitColumnsContainer.mjs +77 -6
- package/lib/SplitColumnsContainer.mjs.map +1 -1
- package/lib/TextButton.mjs +1 -1
- package/lib/TextButton.mjs.map +1 -1
- package/lib/ToastNotifications.mjs +16 -14
- package/lib/ToastNotifications.mjs.map +1 -1
- package/lib/alt/dialogs/DialogWithImageHeader.mjs +1 -1
- package/lib/alt/dialogs/DialogWithImageHeader.mjs.map +1 -1
- package/lib/alt/dialogs/DialogWithSidebar.mjs +7 -3
- package/lib/alt/dialogs/DialogWithSidebar.mjs.map +1 -1
- package/lib/alt/dialogs/MobileBubbleDialog.mjs +1 -1
- package/lib/alt/dialogs/MobileBubbleDialog.mjs.map +1 -1
- package/lib/containers/DialogContainer.mjs +29 -10
- package/lib/containers/DialogContainer.mjs.map +1 -1
- package/lib/index.cjs +286 -93
- package/lib/index.cjs.map +1 -1
- package/lib/willUseIsSticky.mjs +23 -2
- package/lib/willUseIsSticky.mjs.map +1 -1
- package/lib-yak/BasicBulletList.mjs +27 -0
- package/lib-yak/BasicBulletList.mjs.map +1 -0
- package/lib-yak/Button.mjs +374 -0
- package/lib-yak/Button.mjs.map +1 -0
- package/lib-yak/ContextMenu.mjs +642 -0
- package/lib-yak/ContextMenu.mjs.map +1 -0
- package/lib-yak/Dialog.mjs +469 -0
- package/lib-yak/Dialog.mjs.map +1 -0
- package/lib-yak/Draggable.mjs +892 -0
- package/lib-yak/Draggable.mjs.map +1 -0
- package/lib-yak/ErrorBoundary.mjs +108 -0
- package/lib-yak/ErrorBoundary.mjs.map +1 -0
- package/lib-yak/FillLastLineResizer.mjs +238 -0
- package/lib-yak/FillLastLineResizer.mjs.map +1 -0
- package/lib-yak/Flip.mjs +644 -0
- package/lib-yak/Flip.mjs.map +1 -0
- package/lib-yak/FlipList.mjs +186 -0
- package/lib-yak/FlipList.mjs.map +1 -0
- package/lib-yak/FormatDate.mjs +25 -0
- package/lib-yak/FormatDate.mjs.map +1 -0
- package/lib-yak/Icon.mjs +74 -0
- package/lib-yak/Icon.mjs.map +1 -0
- package/lib-yak/Image.mjs +41 -0
- package/lib-yak/Image.mjs.map +1 -0
- package/lib-yak/Link.mjs +116 -0
- package/lib-yak/Link.mjs.map +1 -0
- package/lib-yak/Loading.mjs +54 -0
- package/lib-yak/Loading.mjs.map +1 -0
- package/lib-yak/LoadingDiv.mjs +82 -0
- package/lib-yak/LoadingDiv.mjs.map +1 -0
- package/lib-yak/Notifications.mjs +99 -0
- package/lib-yak/Notifications.mjs.map +1 -0
- package/lib-yak/PageLoader.mjs +61 -0
- package/lib-yak/PageLoader.mjs.map +1 -0
- package/lib-yak/PersistentNotifications.mjs +209 -0
- package/lib-yak/PersistentNotifications.mjs.map +1 -0
- package/lib-yak/Popup.mjs +66 -0
- package/lib-yak/Popup.mjs.map +1 -0
- package/lib-yak/SplitColumnsContainer.mjs +140 -0
- package/lib-yak/SplitColumnsContainer.mjs.map +1 -0
- package/lib-yak/SwitchDiv.mjs +60 -0
- package/lib-yak/SwitchDiv.mjs.map +1 -0
- package/lib-yak/TextButton.mjs +61 -0
- package/lib-yak/TextButton.mjs.map +1 -0
- package/lib-yak/ToastNotifications.mjs +316 -0
- package/lib-yak/ToastNotifications.mjs.map +1 -0
- package/lib-yak/Tooltip.mjs +176 -0
- package/lib-yak/Tooltip.mjs.map +1 -0
- package/lib-yak/TransitionDiv.mjs +59 -0
- package/lib-yak/TransitionDiv.mjs.map +1 -0
- package/lib-yak/WarningDialog.mjs +107 -0
- package/lib-yak/WarningDialog.mjs.map +1 -0
- package/lib-yak/alt/buttons/OnClickLoadingButton.mjs +36 -0
- package/lib-yak/alt/buttons/OnClickLoadingButton.mjs.map +1 -0
- package/lib-yak/alt/dialogs/DialogWithImageHeader.mjs +50 -0
- package/lib-yak/alt/dialogs/DialogWithImageHeader.mjs.map +1 -0
- package/lib-yak/alt/dialogs/DialogWithSidebar.mjs +193 -0
- package/lib-yak/alt/dialogs/DialogWithSidebar.mjs.map +1 -0
- package/lib-yak/alt/dialogs/MobileBubbleDialog.mjs +82 -0
- package/lib-yak/alt/dialogs/MobileBubbleDialog.mjs.map +1 -0
- package/lib-yak/containers/DialogContainer.mjs +482 -0
- package/lib-yak/containers/DialogContainer.mjs.map +1 -0
- package/lib-yak/containers/Reposition.mjs +35 -0
- package/lib-yak/containers/Reposition.mjs.map +1 -0
- package/lib-yak/containers/usePositioning.mjs +311 -0
- package/lib-yak/containers/usePositioning.mjs.map +1 -0
- package/lib-yak/index.mjs +37 -0
- package/lib-yak/index.mjs.map +1 -0
- package/lib-yak/useDialogWithToggle.mjs +18 -0
- package/lib-yak/useDialogWithToggle.mjs.map +1 -0
- package/lib-yak/willUseIsSticky.mjs +147 -0
- package/lib-yak/willUseIsSticky.mjs.map +1 -0
- package/package.json +12 -3
- package/src/BasicBulletList.jsx +1 -1
- package/src/Button.jsx +36 -30
- package/src/ContextMenu.jsx +21 -7
- package/src/Dialog.jsx +31 -12
- package/src/Icon.jsx +5 -4
- package/src/Loading.jsx +19 -5
- package/src/PageLoader.jsx +3 -3
- package/src/PersistentNotifications.jsx +2 -2
- package/src/SplitColumnsContainer.jsx +89 -30
- package/src/TextButton.jsx +1 -1
- package/src/ToastNotifications.jsx +15 -8
- package/src/alt/dialogs/DialogWithImageHeader.jsx +2 -2
- package/src/alt/dialogs/DialogWithSidebar.jsx +6 -5
- package/src/alt/dialogs/MobileBubbleDialog.jsx +1 -1
- package/src/containers/DialogContainer.jsx +11 -4
- package/src/willUseIsSticky.jsx +22 -2
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
import _isFunction from 'lodash/fp/isFunction';
|
|
2
|
+
import { yakDomTag } from '@startlibs/utils/yakDomTag';
|
|
3
|
+
import React, { useRef, useState, useLayoutEffect, useEffect } from 'react';
|
|
4
|
+
import { styled } from '@yak/react';
|
|
5
|
+
import { getClosestOffsetScroll } from '@startlibs/utils';
|
|
6
|
+
import { useEnsureRef } from '@startlibs/core';
|
|
7
|
+
import { getDialogLayersSize } from './DialogContainer.mjs';
|
|
8
|
+
|
|
9
|
+
const Placeholder = styled(yakDomTag("span"))`
|
|
10
|
+
top:0;
|
|
11
|
+
left:0;
|
|
12
|
+
padding: 0 !important;
|
|
13
|
+
position: absolute;
|
|
14
|
+
`;
|
|
15
|
+
/*
|
|
16
|
+
type Alignment = 'top left' | 'top center' | 'top right' |
|
|
17
|
+
'center left' | 'center center' | 'center right' |
|
|
18
|
+
'bottom left' | 'bottom center' | 'bottom right'
|
|
19
|
+
|
|
20
|
+
type Collision = 'fit fit' | 'fit flip' | 'fit fitflip' | 'fit none' |
|
|
21
|
+
'flip fit' | 'flip flip' | 'flip fitflip' | 'flip none' |
|
|
22
|
+
'flipfit fit' | 'flipfit flip' | 'flipfit fitflip' | 'flipfit none' |
|
|
23
|
+
'none fit' | 'none flip' | 'none fitflip' | 'none none'
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
const HORIZONTAL_MAPPING = ['left', 'center', 'right'];
|
|
27
|
+
const VERTICAL_MAPPING = ['top', 'center', 'bottom'];
|
|
28
|
+
const ARROW_KEY_POSITIONS = {
|
|
29
|
+
left: '0',
|
|
30
|
+
right: '-0',
|
|
31
|
+
top: '0',
|
|
32
|
+
bottom: '-0'
|
|
33
|
+
};
|
|
34
|
+
const POSITIONING_BOUNDS = {
|
|
35
|
+
left: 0,
|
|
36
|
+
top: 0,
|
|
37
|
+
right: 0,
|
|
38
|
+
bottom: 0
|
|
39
|
+
};
|
|
40
|
+
const addPositioningBound = (key, value) => {
|
|
41
|
+
POSITIONING_BOUNDS[key] += value;
|
|
42
|
+
return () => POSITIONING_BOUNDS[key] -= value;
|
|
43
|
+
};
|
|
44
|
+
function getPosition(origin, offset, max, originSize, selfSize, originalAlignment, selfAlignment, onCollision, mapping, boundMargin) {
|
|
45
|
+
// 0 pra left ou top, 1/2 pra center, 1 pra right ou bottom
|
|
46
|
+
const originDiff = originSize * (mapping.indexOf(originalAlignment) / 2);
|
|
47
|
+
// 0 pra left ou top, -1/2 pra center, -1 pra right ou bottom
|
|
48
|
+
const selfDiff = -(selfSize * (mapping.indexOf(selfAlignment) / 2));
|
|
49
|
+
const respectingBounds = boundMargin !== false;
|
|
50
|
+
const upperBound = respectingBounds ? POSITIONING_BOUNDS[mapping[0]] + boundMargin : Number.MIN_SAFE_INTEGER;
|
|
51
|
+
const lowerBound = respectingBounds ? POSITIONING_BOUNDS[mapping[2]] + boundMargin : 0;
|
|
52
|
+
const newPosition = Math.max(upperBound, origin + selfDiff + originDiff + offset);
|
|
53
|
+
const collision = Math.max(-newPosition, newPosition + selfSize - max + lowerBound);
|
|
54
|
+
if (collision > 0 && onCollision !== 'none') {
|
|
55
|
+
if (onCollision.indexOf('flip') >= 0) {
|
|
56
|
+
const flippedPosition = getPosition(origin, -offset, max, originSize, selfSize, originalAlignment, selfAlignment, onCollision.indexOf('fit') >= 0 ? 'fit' : 'none', mapping.slice().reverse(), boundMargin);
|
|
57
|
+
const flippedCollision = Math.max(-flippedPosition[0], flippedPosition[0] + selfSize - max);
|
|
58
|
+
if (collision > 0 && flippedCollision > 0 || flippedPosition[0] < upperBound) {
|
|
59
|
+
return getPosition(origin, offset, max, originSize, selfSize, originalAlignment, selfAlignment, 'fit', mapping, boundMargin);
|
|
60
|
+
}
|
|
61
|
+
return collision < flippedCollision ? [newPosition, 'none'] : [flippedPosition[0], flippedPosition[1] === 'fit' ? 'flipfit' : 'flip'];
|
|
62
|
+
} else {
|
|
63
|
+
const minBound = respectingBounds ? upperBound : 0;
|
|
64
|
+
const fittedPosition = Math.max(minBound, Math.min(newPosition, max - selfSize - lowerBound));
|
|
65
|
+
return [fittedPosition, fittedPosition !== newPosition ? 'fit' : 'none'];
|
|
66
|
+
}
|
|
67
|
+
} else {
|
|
68
|
+
return [newPosition, 'none'];
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const arrowShadow = {
|
|
72
|
+
top: '-1px -1px 2px -1px rgba(0,0,0,.25)',
|
|
73
|
+
right: '1px -1px 2px -1px rgba(0,0,0,.25)',
|
|
74
|
+
bottom: '1px 1px 2px -1px rgba(0,0,0,.25)',
|
|
75
|
+
left: '-1px 1px 2px -1px rgba(0,0,0,.25)'
|
|
76
|
+
};
|
|
77
|
+
const translate = (position, offset) => (position === 'left' ? '-50%' : position === 'right' ? '50%' : offset) + ',' + (position === 'top' ? '-50%' : position === 'bottom' ? '50%' : offset);
|
|
78
|
+
const ARROW_DEFAULT_SIZE = 14;
|
|
79
|
+
const DefaultArrow = styled(yakDomTag("div")).attrs({
|
|
80
|
+
className: "styled-default-arrow"
|
|
81
|
+
})`
|
|
82
|
+
background-color: #fff;
|
|
83
|
+
position: absolute;
|
|
84
|
+
width: ${ARROW_DEFAULT_SIZE}px;
|
|
85
|
+
height: ${ARROW_DEFAULT_SIZE}px;
|
|
86
|
+
transform: translate(-50%,50%) rotate(45deg);
|
|
87
|
+
bottom: 0;
|
|
88
|
+
left: 50%;
|
|
89
|
+
box-shadow: ${arrowShadow.bottom};
|
|
90
|
+
`;
|
|
91
|
+
const usePositioning = (element, _ref, arrowRefOpt) => {
|
|
92
|
+
let {
|
|
93
|
+
my = 'top right',
|
|
94
|
+
offset = '0 0',
|
|
95
|
+
// x y
|
|
96
|
+
at = 'bottom right',
|
|
97
|
+
onCollision = 'flip flip',
|
|
98
|
+
arrow,
|
|
99
|
+
arrowPadding = 10,
|
|
100
|
+
fill,
|
|
101
|
+
useLayers = true,
|
|
102
|
+
fixed,
|
|
103
|
+
bottom: onBottom,
|
|
104
|
+
left: onLeft,
|
|
105
|
+
right: onRight,
|
|
106
|
+
top: onTop,
|
|
107
|
+
keepWidth = true,
|
|
108
|
+
boundMargin = 6,
|
|
109
|
+
respectBounds,
|
|
110
|
+
respectOffsetScroll,
|
|
111
|
+
on,
|
|
112
|
+
placeholderAs
|
|
113
|
+
} = _ref;
|
|
114
|
+
const placeholder = useRef();
|
|
115
|
+
const arrowRef = useEnsureRef(arrowRefOpt);
|
|
116
|
+
const [positionInfo, setPositionInfo] = useState();
|
|
117
|
+
const setPosition = function () {
|
|
118
|
+
var _element$current, _placeholder$current, _placeholder$current2, _placeholder$current3, _placeholder$current4;
|
|
119
|
+
let retry = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
|
|
120
|
+
if (retry > 10) {
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (!((_element$current = element.current) !== null && _element$current !== void 0 && _element$current.style) || !((_placeholder$current = placeholder.current) !== null && _placeholder$current !== void 0 && _placeholder$current.offsetParent || (_placeholder$current2 = placeholder.current) !== null && _placeholder$current2 !== void 0 && (_placeholder$current2 = _placeholder$current2.parentNode) !== null && _placeholder$current2 !== void 0 && _placeholder$current2.offsetParent)) {
|
|
124
|
+
setTimeout(() => setPosition(retry + 1), 100);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
// Limpar a largura para medir pode encurtar o conteúdo (itens deixam de quebrar linha)
|
|
128
|
+
// e o browser corta o scrollTop; guarda para restaurar depois de reaplicar a largura.
|
|
129
|
+
const previousScrollTop = element.current.scrollTop;
|
|
130
|
+
if (keepWidth) {
|
|
131
|
+
element.current.style.width = '';
|
|
132
|
+
} else {
|
|
133
|
+
element.current.style.maxWidth = '';
|
|
134
|
+
}
|
|
135
|
+
const placeholderOffsetParent = ((_placeholder$current3 = placeholder.current) === null || _placeholder$current3 === void 0 ? void 0 : _placeholder$current3.offsetParent) || ((_placeholder$current4 = placeholder.current) === null || _placeholder$current4 === void 0 || (_placeholder$current4 = _placeholder$current4.parentNode) === null || _placeholder$current4 === void 0 ? void 0 : _placeholder$current4.offsetParent);
|
|
136
|
+
const usingLayer = respectOffsetScroll || useLayers && getDialogLayersSize() > 0;
|
|
137
|
+
const scrollOwner = usingLayer ? _isFunction(respectOffsetScroll) ? respectOffsetScroll(element.current.offsetParent) : getClosestOffsetScroll(element.current.offsetParent) : {
|
|
138
|
+
scrollTop: window.pageYOffset,
|
|
139
|
+
scrollLeft: window.pageXOffset
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
// console.log({scrollOwner,scrollTop:scrollOwner.scrollTop,pageYOffset:window.pageYOffset})
|
|
143
|
+
|
|
144
|
+
const scrollY = !isNaN(scrollOwner.scrollTop) ? scrollOwner.scrollTop : window.pageYOffset;
|
|
145
|
+
const scrollX = !isNaN(scrollOwner.scrollLeft) ? scrollOwner.scrollLeft : window.pageXOffset;
|
|
146
|
+
const getRespectOffsetScrollTopLeft = () => {
|
|
147
|
+
const {
|
|
148
|
+
top,
|
|
149
|
+
left
|
|
150
|
+
} = placeholder.current.getBoundingClientRect();
|
|
151
|
+
const {
|
|
152
|
+
top: scrollOwnerTop,
|
|
153
|
+
left: scrollOwnerLeft
|
|
154
|
+
} = scrollOwner.getBoundingClientRect();
|
|
155
|
+
return {
|
|
156
|
+
top: top - scrollOwnerTop,
|
|
157
|
+
left: left - scrollOwnerLeft
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
const {
|
|
161
|
+
left: leftPlusBorder,
|
|
162
|
+
top: topPlusBorder
|
|
163
|
+
} = respectOffsetScroll ? getRespectOffsetScrollTopLeft() : placeholder.current.getBoundingClientRect();
|
|
164
|
+
const {
|
|
165
|
+
borderLeftWidth,
|
|
166
|
+
borderTopWidth
|
|
167
|
+
} = window.getComputedStyle(placeholderOffsetParent);
|
|
168
|
+
const left = leftPlusBorder - parseInt(borderLeftWidth, 10);
|
|
169
|
+
const top = topPlusBorder - parseInt(borderTopWidth, 10);
|
|
170
|
+
const {
|
|
171
|
+
offsetWidth: parentOffsetWidth,
|
|
172
|
+
offsetHeight: parentOffsetHeight
|
|
173
|
+
} = placeholderOffsetParent;
|
|
174
|
+
const {
|
|
175
|
+
offsetWidth: popupOffsetWidth,
|
|
176
|
+
offsetHeight: popupOffsetHeight
|
|
177
|
+
} = element.current;
|
|
178
|
+
const {
|
|
179
|
+
width: popupCurrentWidth
|
|
180
|
+
} = element.current.getBoundingClientRect();
|
|
181
|
+
const [offsetX, offsetY] = [].concat(offset).join(' ').split(' ').map(_ => Number(_ || 0));
|
|
182
|
+
const simplePositioning = [onTop, onRight, onBottom, onLeft].map(_ => _ === true ? 'center' : _);
|
|
183
|
+
const simplePositioningIndex = simplePositioning.findIndex(_ => _);
|
|
184
|
+
const bodyWidth = document.body.offsetWidth - (usingLayer ? parseInt(getComputedStyle(document.body).paddingRight, 10) : 0);
|
|
185
|
+
// Barra fixa inferior (footer mobile) registrada em POSITIONING_BOUNDS conta como
|
|
186
|
+
// borda da tela: sem isso o popup se posiciona atrás dela. Com respectBounds o
|
|
187
|
+
// desconto já vem do lowerBound em getPosition, não descontar duas vezes.
|
|
188
|
+
const windowHeight = window.innerHeight - (respectBounds ? 0 : POSITIONING_BOUNDS.bottom);
|
|
189
|
+
const [verticalCollision, horizontalCollision] = onCollision.split(' ');
|
|
190
|
+
const [verticalMy, horizontalMy] = [my, 'bottom $', '$ left', 'top $', '$ right'][simplePositioningIndex + 1].replace('$', simplePositioning[simplePositioningIndex]).split(' ');
|
|
191
|
+
const [verticalAt, horizontalAt] = [at, 'top $', '$ right', 'bottom $', '$ left'][simplePositioningIndex + 1].replace('$', simplePositioning[simplePositioningIndex]).split(' ');
|
|
192
|
+
const [processedLeft, collisionH] = getPosition(left, offsetX, bodyWidth, parentOffsetWidth, fill ? parentOffsetWidth : popupOffsetWidth, horizontalAt, horizontalMy, horizontalCollision, HORIZONTAL_MAPPING, !!respectBounds && boundMargin);
|
|
193
|
+
const [processedTop, collisionV] = getPosition(top, offsetY, windowHeight, parentOffsetHeight, popupOffsetHeight, verticalAt, verticalMy, verticalCollision, VERTICAL_MAPPING, !!respectBounds && boundMargin);
|
|
194
|
+
const flippedV = collisionV.indexOf('flip') >= 0;
|
|
195
|
+
const flippedH = collisionH.indexOf('flip') >= 0;
|
|
196
|
+
|
|
197
|
+
//arrow
|
|
198
|
+
const arrowSide = Math.abs(VERTICAL_MAPPING.indexOf(verticalMy) - VERTICAL_MAPPING.indexOf(verticalAt)) === 2 ? flippedV ? verticalAt : verticalMy : Math.abs(HORIZONTAL_MAPPING.indexOf(horizontalMy) - HORIZONTAL_MAPPING.indexOf(horizontalAt)) === 2 ? flippedH ? horizontalAt : horizontalMy : '';
|
|
199
|
+
const arrowElement = arrowRef.current;
|
|
200
|
+
const arrowOnVerticalSide = arrowSide === 'left' || arrowSide === 'right';
|
|
201
|
+
const arrowSize = arrowElement ? arrowElement.getBoundingClientRect()[arrowOnVerticalSide ? 'height' : 'width'] : ARROW_DEFAULT_SIZE * Math.sqrt(2);
|
|
202
|
+
const [arrowOffset, popupArrowOffset] = arrowOnVerticalSide ? processArrow(ARROW_KEY_POSITIONS[arrow] || arrow, arrowSize, arrowOnVerticalSide, parentOffsetHeight, popupOffsetHeight, processedTop - top, flippedV) : processArrow(ARROW_KEY_POSITIONS[arrow] || arrow, arrowSize, arrowOnVerticalSide, parentOffsetWidth, popupOffsetWidth, processedLeft - left, flippedV);
|
|
203
|
+
const maxHeight = window.innerHeight - (POSITIONING_BOUNDS.top + POSITIONING_BOUNDS.bottom) - (respectBounds ? boundMargin * 2 : 0);
|
|
204
|
+
const maxWidth = window.innerWidth - (POSITIONING_BOUNDS.left + POSITIONING_BOUNDS.right) - (respectBounds ? boundMargin * 2 : 0);
|
|
205
|
+
element.current.style.maxHeight = '';
|
|
206
|
+
if (parseInt(window.getComputedStyle(element.current).maxHeight) > maxHeight) {
|
|
207
|
+
element.current.style.maxHeight = maxHeight + 'px';
|
|
208
|
+
}
|
|
209
|
+
if (keepWidth) {
|
|
210
|
+
element.current.style.width = Math.ceil(popupCurrentWidth) + "px";
|
|
211
|
+
} else {
|
|
212
|
+
element.current.style.maxWidth = maxWidth + 'px';
|
|
213
|
+
}
|
|
214
|
+
// console.log({processedTop,top,offsetY,scrollY})
|
|
215
|
+
|
|
216
|
+
element.current.style.top = processedTop + (arrowOnVerticalSide ? popupArrowOffset : 0) + (fixed ? 0 : scrollY) + 'px';
|
|
217
|
+
element.current.style.left = processedLeft + (arrowOnVerticalSide ? 0 : popupArrowOffset) + (fixed ? 0 : scrollX) + 'px';
|
|
218
|
+
const arrowStyle = {
|
|
219
|
+
transform: `translate(${translate(arrowSide, arrowOffset[0] === 'top' || arrowOffset[0] === 'left' ? '-50%' : '50%')}) rotate(45deg)`,
|
|
220
|
+
bottom: "auto",
|
|
221
|
+
left: "auto",
|
|
222
|
+
[arrowSide]: '0',
|
|
223
|
+
boxShadow: arrowShadow[arrowSide],
|
|
224
|
+
[arrowOffset[0]]: arrowOffset[1] + 'px'
|
|
225
|
+
};
|
|
226
|
+
if (arrowRef.current) {
|
|
227
|
+
Object.assign(arrowRef.current.style, arrowStyle);
|
|
228
|
+
}
|
|
229
|
+
setPositionInfo({
|
|
230
|
+
atTop: verticalAt === 'top' && !flippedV || verticalAt === 'bottom' && flippedV,
|
|
231
|
+
atBottom: verticalAt === 'bottom' && !flippedV || verticalAt === 'top' && flippedV,
|
|
232
|
+
atLeft: horizontalAt === 'left' && !flippedH || verticalAt === 'right' && flippedH,
|
|
233
|
+
atRight: horizontalAt === 'right' && !flippedH || verticalAt === 'left' && flippedH,
|
|
234
|
+
fullHeight: popupOffsetHeight > maxHeight,
|
|
235
|
+
fullWidth: popupOffsetWidth > maxWidth,
|
|
236
|
+
arrowSide,
|
|
237
|
+
arrowOffset,
|
|
238
|
+
arrowStyle
|
|
239
|
+
});
|
|
240
|
+
if (fill) {
|
|
241
|
+
element.current.style.width = parentOffsetWidth + 'px';
|
|
242
|
+
}
|
|
243
|
+
if (fixed) {
|
|
244
|
+
element.current.style.position = 'fixed';
|
|
245
|
+
}
|
|
246
|
+
if (element.current.scrollTop !== previousScrollTop) {
|
|
247
|
+
element.current.scrollTop = previousScrollTop;
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
useLayoutEffect(setPosition, [on]);
|
|
251
|
+
useEffect(() => {
|
|
252
|
+
window.addEventListener('portalReposition', setPosition);
|
|
253
|
+
window.addEventListener('stepResize', setPosition);
|
|
254
|
+
window.addEventListener('scroll', setPosition, {
|
|
255
|
+
passive: true
|
|
256
|
+
});
|
|
257
|
+
return () => {
|
|
258
|
+
window.removeEventListener('portalReposition', setPosition);
|
|
259
|
+
window.removeEventListener('stepResize', setPosition);
|
|
260
|
+
window.removeEventListener('scroll', setPosition);
|
|
261
|
+
};
|
|
262
|
+
}, []);
|
|
263
|
+
const processArrow = (arrow, arrowSize, onVerticalSide, arrowContainerWidth, popupSize, deltaPopupPosition, flipped) => {
|
|
264
|
+
if (!arrow) {
|
|
265
|
+
return ['', 0];
|
|
266
|
+
}
|
|
267
|
+
const margin = arrowPadding + arrowSize / 2;
|
|
268
|
+
const [invertDirection, percent, px] = (arrow === true ? '50%' : arrow).replace(/(-)?(\d+%)?\s?(-?\d+)?/, '$1:$2:$3').split(':');
|
|
269
|
+
const invertAndFlipDirection = flipped ? !invertDirection : invertDirection;
|
|
270
|
+
const arrowPosition = onVerticalSide ? invertAndFlipDirection ? 'bottom' : 'top' : invertAndFlipDirection ? 'right' : 'left';
|
|
271
|
+
const fromOriginCorner = arrowPosition === 'left' || arrowPosition === 'top';
|
|
272
|
+
const popupOffset = fromOriginCorner ? deltaPopupPosition : arrowContainerWidth - deltaPopupPosition - popupSize;
|
|
273
|
+
|
|
274
|
+
/* ____________________________
|
|
275
|
+
| arrow container |
|
|
276
|
+
|___________________________|
|
|
277
|
+
..../\_______
|
|
278
|
+
| popup |
|
|
279
|
+
|____________|
|
|
280
|
+
|-------| = delta popup position (popupOffset)
|
|
281
|
+
.... = arrowPadding prop, applies to both sides, moves popup or does nothing
|
|
282
|
+
arrow prop = invert percent px // relative to arrow container
|
|
283
|
+
invert = -?
|
|
284
|
+
percent = (\d+%)?
|
|
285
|
+
px = (-?\d+)?
|
|
286
|
+
procedure:
|
|
287
|
+
1- position arrow according to container - arrowInitialPos
|
|
288
|
+
2- constrain position inside container - constrainedArrowPosition
|
|
289
|
+
3- move popup according to arrowPadding (margin) - popupDelta
|
|
290
|
+
4- final arrow position, relative to final popup position - finalArrowPosition
|
|
291
|
+
*/
|
|
292
|
+
|
|
293
|
+
const arrowInitialPos = parseInt(percent || 0, 10) * arrowContainerWidth / 100 + parseInt(px || 0, 10);
|
|
294
|
+
const constrainedArrowPosition = Math.min(Math.max(arrowInitialPos, 0), arrowContainerWidth);
|
|
295
|
+
const arrowPositionRelativeToPopup = fromOriginCorner ? constrainedArrowPosition - popupOffset : arrowContainerWidth - popupOffset - constrainedArrowPosition;
|
|
296
|
+
const popupDelta = arrowPositionRelativeToPopup < margin ? arrowPositionRelativeToPopup - margin : arrowPositionRelativeToPopup > popupSize - margin ? margin + arrowPositionRelativeToPopup - popupSize : 0;
|
|
297
|
+
const finalPopupPosition = fromOriginCorner ? popupOffset + popupDelta : arrowContainerWidth - popupOffset - popupDelta - popupSize;
|
|
298
|
+
return [[arrowPosition, constrainedArrowPosition - finalPopupPosition], popupDelta];
|
|
299
|
+
};
|
|
300
|
+
const arrowElement = arrow && /*#__PURE__*/React.createElement(DefaultArrow, {
|
|
301
|
+
ref: arrowRef
|
|
302
|
+
});
|
|
303
|
+
const placeholderElement = /*#__PURE__*/React.createElement(Placeholder, {
|
|
304
|
+
as: placeholderAs,
|
|
305
|
+
ref: placeholder
|
|
306
|
+
});
|
|
307
|
+
return [positionInfo, placeholderElement, arrowElement];
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
export { DefaultArrow, addPositioningBound, usePositioning };
|
|
311
|
+
//# sourceMappingURL=usePositioning.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePositioning.mjs","sources":["../../src/containers/usePositioning.jsx"],"sourcesContent":["import React, {useEffect, useLayoutEffect, useRef, useState} from 'react'\nimport _ from 'lodash/fp'\nimport styled from 'styled-components'\nimport {getClosestOffsetScroll} from '@startlibs/utils'\nimport {useEnsureRef} from '@startlibs/core'\nimport {getDialogLayersSize} from './DialogContainer'\n\nconst Placeholder = styled.span`\n top:0;\n left:0;\n padding: 0 !important;\n position: absolute;\n`\n/*\ntype Alignment = 'top left' | 'top center' | 'top right' |\n 'center left' | 'center center' | 'center right' |\n 'bottom left' | 'bottom center' | 'bottom right'\n\ntype Collision = 'fit fit' | 'fit flip' | 'fit fitflip' | 'fit none' |\n 'flip fit' | 'flip flip' | 'flip fitflip' | 'flip none' |\n 'flipfit fit' | 'flipfit flip' | 'flipfit fitflip' | 'flipfit none' |\n 'none fit' | 'none flip' | 'none fitflip' | 'none none'\n*/\n\nconst HORIZONTAL_MAPPING = ['left', 'center', 'right']\nconst VERTICAL_MAPPING = ['top', 'center', 'bottom']\nconst ARROW_KEY_POSITIONS = {left: '0', right: '-0', top: '0', bottom: '-0'}\n\nconst POSITIONING_BOUNDS = {left:0,top:0,right:0,bottom:0}\nexport const addPositioningBound = (key,value) => {\n POSITIONING_BOUNDS[key] += value\n return () => POSITIONING_BOUNDS[key] -= value\n}\n\nfunction getPosition(origin, offset, max, originSize, selfSize, originalAlignment, selfAlignment, onCollision, mapping, boundMargin) {\n\n // 0 pra left ou top, 1/2 pra center, 1 pra right ou bottom\n const originDiff = originSize * (mapping.indexOf(originalAlignment) / 2)\n // 0 pra left ou top, -1/2 pra center, -1 pra right ou bottom\n const selfDiff = -(selfSize * (mapping.indexOf(selfAlignment) / 2))\n\n const respectingBounds = boundMargin !== false\n const upperBound = respectingBounds ? (POSITIONING_BOUNDS[mapping[0]] + boundMargin) : Number.MIN_SAFE_INTEGER\n const lowerBound = respectingBounds ? (POSITIONING_BOUNDS[mapping[2]] + boundMargin) : 0\n const newPosition = Math.max(upperBound, origin + selfDiff + originDiff + offset)\n\n const collision = Math.max(-newPosition, newPosition + selfSize - max + lowerBound)\n if (collision > 0 && onCollision !== 'none') {\n if (onCollision.indexOf('flip') >= 0) {\n const flippedPosition = getPosition(origin, -offset, max, originSize, selfSize, originalAlignment, selfAlignment, onCollision.indexOf('fit') >= 0 ? 'fit' : 'none', mapping.slice().reverse(), boundMargin)\n const flippedCollision = Math.max(-flippedPosition[0], flippedPosition[0] + selfSize - max)\n if ((collision > 0 && flippedCollision > 0) || flippedPosition[0] < upperBound) {\n return getPosition(origin, offset, max, originSize, selfSize, originalAlignment, selfAlignment, 'fit', mapping, boundMargin)\n }\n return collision < flippedCollision ? [newPosition, 'none'] : [flippedPosition[0], flippedPosition[1] === 'fit' ? 'flipfit' : 'flip']\n } else {\n const minBound = respectingBounds ? upperBound : 0\n const fittedPosition = Math.max(minBound, Math.min(newPosition, max - selfSize - lowerBound))\n return [fittedPosition, fittedPosition !== newPosition ? 'fit' : 'none']\n }\n } else {\n return [newPosition, 'none']\n }\n}\n\nconst arrowShadow = {\n top: '-1px -1px 2px -1px rgba(0,0,0,.25)',\n right: '1px -1px 2px -1px rgba(0,0,0,.25)',\n bottom: '1px 1px 2px -1px rgba(0,0,0,.25)',\n left: '-1px 1px 2px -1px rgba(0,0,0,.25)'\n}\n\nconst translate = (position, offset) => (position === 'left' ? '-50%' : position === 'right' ? '50%' : offset) + ',' +\n (position === 'top' ? '-50%' : position === 'bottom' ? '50%' : offset)\n\nconst ARROW_DEFAULT_SIZE = 14\n\nexport const DefaultArrow = styled.div`\n background-color: #fff;\n position: absolute;\n width: ${ARROW_DEFAULT_SIZE}px;\n height: ${ARROW_DEFAULT_SIZE}px;\n transform: translate(-50%,50%) rotate(45deg);\n bottom: 0;\n left: 50%;\n box-shadow: ${arrowShadow.bottom};\n`\n\nexport const usePositioning = (\n element,\n {\n my = 'top right',\n offset = '0 0', // x y\n at = 'bottom right',\n onCollision = 'flip flip',\n arrow,\n arrowPadding = 10,\n fill,\n useLayers = true,\n fixed,\n bottom: onBottom,\n left: onLeft,\n right: onRight,\n top: onTop,\n keepWidth = true,\n boundMargin = 6,\n respectBounds,\n respectOffsetScroll,\n on,\n placeholderAs\n },\n arrowRefOpt\n) => {\n const placeholder = useRef()\n const arrowRef = useEnsureRef(arrowRefOpt)\n const [positionInfo, setPositionInfo] = useState()\n\n const setPosition = (retry=0) => {\n if (retry>10) { return }\n if (!element.current?.style || !(placeholder.current?.offsetParent || placeholder.current?.parentNode?.offsetParent)) {\n setTimeout(()=>setPosition(retry+1),100)\n return\n }\n // Limpar a largura para medir pode encurtar o conteúdo (itens deixam de quebrar linha)\n // e o browser corta o scrollTop; guarda para restaurar depois de reaplicar a largura.\n const previousScrollTop = element.current.scrollTop\n if (keepWidth) {\n element.current.style.width = ''\n } else {\n element.current.style.maxWidth = ''\n }\n const placeholderOffsetParent = (placeholder.current?.offsetParent || placeholder.current?.parentNode?.offsetParent)\n const usingLayer = respectOffsetScroll || useLayers && getDialogLayersSize() > 0\n const scrollOwner =\n usingLayer\n ? (_.isFunction(respectOffsetScroll) ? respectOffsetScroll(element.current.offsetParent) : getClosestOffsetScroll(element.current.offsetParent))\n : {scrollTop: window.pageYOffset, scrollLeft: window.pageXOffset}\n\n // console.log({scrollOwner,scrollTop:scrollOwner.scrollTop,pageYOffset:window.pageYOffset})\n\n const scrollY = !isNaN(scrollOwner.scrollTop) ? scrollOwner.scrollTop : window.pageYOffset\n const scrollX = !isNaN(scrollOwner.scrollLeft) ? scrollOwner.scrollLeft : window.pageXOffset\n const getRespectOffsetScrollTopLeft = () => {\n const {top,left} = placeholder.current.getBoundingClientRect()\n const {top:scrollOwnerTop, left: scrollOwnerLeft} = scrollOwner.getBoundingClientRect()\n return {top: top-scrollOwnerTop,left: left-scrollOwnerLeft}\n }\n const {left: leftPlusBorder, top: topPlusBorder} =\n respectOffsetScroll\n ? getRespectOffsetScrollTopLeft()\n :placeholder.current.getBoundingClientRect()\n\n const {borderLeftWidth, borderTopWidth} = window.getComputedStyle(placeholderOffsetParent)\n const left = leftPlusBorder - parseInt(borderLeftWidth, 10)\n const top = topPlusBorder - parseInt(borderTopWidth, 10)\n const {offsetWidth: parentOffsetWidth, offsetHeight: parentOffsetHeight} = (placeholderOffsetParent)\n const {offsetWidth: popupOffsetWidth, offsetHeight: popupOffsetHeight} = element.current\n const {width:popupCurrentWidth} = element.current.getBoundingClientRect()\n const [offsetX, offsetY] = [].concat(offset).join(' ').split(' ').map(_ => Number(_ || 0))\n const simplePositioning = [onTop, onRight, onBottom, onLeft].map(_ => _ === true ? 'center' : _)\n const simplePositioningIndex = simplePositioning.findIndex(_ => _)\n const bodyWidth = document.body.offsetWidth - (usingLayer ? parseInt(getComputedStyle(document.body).paddingRight, 10) : 0)\n // Barra fixa inferior (footer mobile) registrada em POSITIONING_BOUNDS conta como\n // borda da tela: sem isso o popup se posiciona atrás dela. Com respectBounds o\n // desconto já vem do lowerBound em getPosition, não descontar duas vezes.\n const windowHeight = window.innerHeight - (respectBounds ? 0 : POSITIONING_BOUNDS.bottom)\n\n const [verticalCollision, horizontalCollision] = onCollision.split(' ')\n const [verticalMy, horizontalMy] = [my, 'bottom $', '$ left', 'top $', '$ right'][simplePositioningIndex + 1].replace('$', simplePositioning[simplePositioningIndex]).split(' ')\n const [verticalAt, horizontalAt] = [at, 'top $', '$ right', 'bottom $', '$ left'][simplePositioningIndex + 1].replace('$', simplePositioning[simplePositioningIndex]).split(' ')\n\n const [processedLeft, collisionH] = getPosition(left, offsetX, bodyWidth, parentOffsetWidth, fill ? parentOffsetWidth : popupOffsetWidth, horizontalAt, horizontalMy, horizontalCollision, HORIZONTAL_MAPPING,!!respectBounds && boundMargin)\n const [processedTop, collisionV] = getPosition(top, offsetY, windowHeight, parentOffsetHeight, popupOffsetHeight, verticalAt, verticalMy, verticalCollision, VERTICAL_MAPPING,!!respectBounds && boundMargin)\n\n\n const flippedV = collisionV.indexOf('flip') >= 0\n const flippedH = collisionH.indexOf('flip') >= 0\n\n\n //arrow\n const arrowSide = Math.abs(VERTICAL_MAPPING.indexOf(verticalMy) - VERTICAL_MAPPING.indexOf(verticalAt)) === 2 ? (flippedV ? verticalAt : verticalMy) :\n Math.abs(HORIZONTAL_MAPPING.indexOf(horizontalMy) - HORIZONTAL_MAPPING.indexOf(horizontalAt)) === 2 ? (flippedH ? horizontalAt : horizontalMy) : ''\n const arrowElement = arrowRef.current\n const arrowOnVerticalSide = arrowSide === 'left' || arrowSide === 'right'\n const arrowSize = arrowElement ? arrowElement.getBoundingClientRect()[arrowOnVerticalSide ? 'height' : 'width'] : (ARROW_DEFAULT_SIZE * Math.sqrt(2))\n const [arrowOffset, popupArrowOffset] = arrowOnVerticalSide ?\n processArrow(ARROW_KEY_POSITIONS[arrow] || arrow, arrowSize, arrowOnVerticalSide, parentOffsetHeight, popupOffsetHeight, processedTop - top, flippedV) :\n processArrow(ARROW_KEY_POSITIONS[arrow] || arrow, arrowSize, arrowOnVerticalSide, parentOffsetWidth, popupOffsetWidth, processedLeft - left, flippedV)\n\n\n const maxHeight = window.innerHeight - (POSITIONING_BOUNDS.top + POSITIONING_BOUNDS.bottom) - (respectBounds ? boundMargin*2 : 0)\n const maxWidth = window.innerWidth - (POSITIONING_BOUNDS.left + POSITIONING_BOUNDS.right) - (respectBounds ? boundMargin*2 : 0)\n\n element.current.style.maxHeight = ''\n if (parseInt(window.getComputedStyle(element.current).maxHeight) > maxHeight) {\n element.current.style.maxHeight = maxHeight+'px'\n }\n if (keepWidth) {\n element.current.style.width = Math.ceil(popupCurrentWidth)+\"px\"\n } else {\n element.current.style.maxWidth = maxWidth+'px'\n }\n // console.log({processedTop,top,offsetY,scrollY})\n\n\n element.current.style.top = (processedTop + (arrowOnVerticalSide ? popupArrowOffset : 0) + (fixed ? 0 : scrollY)) + 'px'\n element.current.style.left = (processedLeft + (arrowOnVerticalSide ? 0 : popupArrowOffset) + (fixed ? 0 : scrollX)) + 'px'\n\n const arrowStyle = {\n transform: `translate(${translate(arrowSide, arrowOffset[0] === 'top' || arrowOffset[0] === 'left' ? '-50%' : '50%')}) rotate(45deg)`,\n bottom:\"auto\",\n left:\"auto\",\n [arrowSide]: '0',\n boxShadow: arrowShadow[arrowSide],\n [arrowOffset[0]]: arrowOffset[1]+'px'\n }\n if (arrowRef.current) {\n Object.assign(arrowRef.current.style,arrowStyle)\n }\n\n setPositionInfo({\n atTop: (verticalAt === 'top' && !flippedV) || (verticalAt === 'bottom' && flippedV),\n atBottom: (verticalAt === 'bottom' && !flippedV) || (verticalAt === 'top' && flippedV),\n atLeft: (horizontalAt === 'left' && !flippedH) || (verticalAt === 'right' && flippedH),\n atRight: (horizontalAt === 'right' && !flippedH) || (verticalAt === 'left' && flippedH),\n fullHeight: popupOffsetHeight > maxHeight,\n fullWidth: popupOffsetWidth > maxWidth,\n arrowSide,\n arrowOffset,\n arrowStyle\n })\n\n if (fill) {\n element.current.style.width = parentOffsetWidth + 'px'\n }\n if (fixed) {\n element.current.style.position = 'fixed'\n }\n if (element.current.scrollTop !== previousScrollTop) {\n element.current.scrollTop = previousScrollTop\n }\n }\n\n useLayoutEffect(setPosition, [on])\n\n\n useEffect(() => {\n window.addEventListener('portalReposition', setPosition)\n window.addEventListener('stepResize', setPosition)\n window.addEventListener('scroll', setPosition, {passive:true})\n return () => {\n window.removeEventListener('portalReposition', setPosition)\n window.removeEventListener('stepResize', setPosition)\n window.removeEventListener('scroll', setPosition)\n }\n }, []\n )\n\n\n const processArrow = (arrow, arrowSize, onVerticalSide, arrowContainerWidth, popupSize, deltaPopupPosition, flipped) => {\n if (!arrow) {\n return ['', 0]\n }\n const margin = arrowPadding + (arrowSize / 2)\n const [invertDirection, percent, px] = (arrow === true ? '50%' : arrow).replace(/(-)?(\\d+%)?\\s?(-?\\d+)?/, '$1:$2:$3').split(':')\n const invertAndFlipDirection = flipped ? !invertDirection : invertDirection\n const arrowPosition = onVerticalSide ? (invertAndFlipDirection ? 'bottom' : 'top') : (invertAndFlipDirection ? 'right' : 'left')\n const fromOriginCorner = arrowPosition === 'left' || arrowPosition === 'top'\n\n const popupOffset = fromOriginCorner ? deltaPopupPosition : (arrowContainerWidth - deltaPopupPosition - popupSize)\n\n /* ____________________________\n | arrow container |\n |___________________________|\n ..../\\_______\n | popup |\n |____________|\n\n |-------| = delta popup position (popupOffset)\n\n .... = arrowPadding prop, applies to both sides, moves popup or does nothing\n\n arrow prop = invert percent px // relative to arrow container\n invert = -?\n percent = (\\d+%)?\n px = (-?\\d+)?\n\n procedure:\n 1- position arrow according to container - arrowInitialPos\n 2- constrain position inside container - constrainedArrowPosition\n 3- move popup according to arrowPadding (margin) - popupDelta\n 4- final arrow position, relative to final popup position - finalArrowPosition\n */\n\n const arrowInitialPos = (parseInt(percent || 0, 10) * arrowContainerWidth / 100) + parseInt(px || 0, 10)\n const constrainedArrowPosition = (Math.min(Math.max(arrowInitialPos, 0), arrowContainerWidth))\n const arrowPositionRelativeToPopup = fromOriginCorner ? constrainedArrowPosition - popupOffset : (arrowContainerWidth - popupOffset - constrainedArrowPosition)\n const popupDelta = arrowPositionRelativeToPopup < margin ?\n (arrowPositionRelativeToPopup - margin) :\n arrowPositionRelativeToPopup > (popupSize - margin) ?\n (margin + arrowPositionRelativeToPopup - popupSize) :\n 0\n const finalPopupPosition = fromOriginCorner ? popupOffset + popupDelta : (arrowContainerWidth - popupOffset - popupDelta - popupSize)\n return [[arrowPosition,(constrainedArrowPosition - finalPopupPosition)], popupDelta]\n }\n\n const arrowElement = arrow && <DefaultArrow ref={arrowRef} />\n\n const placeholderElement = <Placeholder as={placeholderAs} ref={placeholder}/>\n return [positionInfo,placeholderElement,arrowElement]\n}"],"names":["Placeholder","styled","yakDomTag","HORIZONTAL_MAPPING","VERTICAL_MAPPING","ARROW_KEY_POSITIONS","left","right","top","bottom","POSITIONING_BOUNDS","addPositioningBound","key","value","getPosition","origin","offset","max","originSize","selfSize","originalAlignment","selfAlignment","onCollision","mapping","boundMargin","originDiff","indexOf","selfDiff","respectingBounds","upperBound","Number","MIN_SAFE_INTEGER","lowerBound","newPosition","Math","collision","flippedPosition","slice","reverse","flippedCollision","minBound","fittedPosition","min","arrowShadow","translate","position","ARROW_DEFAULT_SIZE","DefaultArrow","attrs","className","usePositioning","element","_ref","arrowRefOpt","my","at","arrow","arrowPadding","fill","useLayers","fixed","onBottom","onLeft","onRight","onTop","keepWidth","respectBounds","respectOffsetScroll","on","placeholderAs","placeholder","useRef","arrowRef","useEnsureRef","positionInfo","setPositionInfo","useState","setPosition","_element$current","_placeholder$current","_placeholder$current2","_placeholder$current3","_placeholder$current4","retry","arguments","length","undefined","current","style","offsetParent","parentNode","setTimeout","previousScrollTop","scrollTop","width","maxWidth","placeholderOffsetParent","usingLayer","getDialogLayersSize","scrollOwner","_isFunction","getClosestOffsetScroll","window","pageYOffset","scrollLeft","pageXOffset","scrollY","isNaN","scrollX","getRespectOffsetScrollTopLeft","getBoundingClientRect","scrollOwnerTop","scrollOwnerLeft","leftPlusBorder","topPlusBorder","borderLeftWidth","borderTopWidth","getComputedStyle","parseInt","offsetWidth","parentOffsetWidth","offsetHeight","parentOffsetHeight","popupOffsetWidth","popupOffsetHeight","popupCurrentWidth","offsetX","offsetY","concat","join","split","map","_","simplePositioning","simplePositioningIndex","findIndex","bodyWidth","document","body","paddingRight","windowHeight","innerHeight","verticalCollision","horizontalCollision","verticalMy","horizontalMy","replace","verticalAt","horizontalAt","processedLeft","collisionH","processedTop","collisionV","flippedV","flippedH","arrowSide","abs","arrowElement","arrowOnVerticalSide","arrowSize","sqrt","arrowOffset","popupArrowOffset","processArrow","maxHeight","innerWidth","ceil","arrowStyle","transform","boxShadow","Object","assign","atTop","atBottom","atLeft","atRight","fullHeight","fullWidth","useLayoutEffect","useEffect","addEventListener","passive","removeEventListener","onVerticalSide","arrowContainerWidth","popupSize","deltaPopupPosition","flipped","margin","invertDirection","percent","px","invertAndFlipDirection","arrowPosition","fromOriginCorner","popupOffset","arrowInitialPos","constrainedArrowPosition","arrowPositionRelativeToPopup","popupDelta","finalPopupPosition","React","createElement","ref","placeholderElement","as"],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export { Icon } from './Icon.mjs';
|
|
2
|
+
export { Loading } from './Loading.mjs';
|
|
3
|
+
export { Button, DropdownIcon } from './Button.mjs';
|
|
4
|
+
export { OnClickLoadingButton } from './alt/buttons/OnClickLoadingButton.mjs';
|
|
5
|
+
export { TextButton } from './TextButton.mjs';
|
|
6
|
+
export { LoadingDiv } from './LoadingDiv.mjs';
|
|
7
|
+
export { CloseIcon, ConfirmDialog, DefaultConfirmDialog, Dialog, DialogContent, DialogContentWrapper, DialogError, DialogErrorContent, DialogFooter, DialogIcon, DialogTitle, FooterAuxiliaryContainer } from './Dialog.mjs';
|
|
8
|
+
export { useDialog, useDialogWithToggle } from './useDialogWithToggle.mjs';
|
|
9
|
+
export { DefaultWarningDialog, WarningDialog, WarningDialogIcon, WarningDialogTitle, setWarningDialog, useWarningDialog } from './WarningDialog.mjs';
|
|
10
|
+
export { Notifications, setNotification, useNotification, useNotificationRef, willSetNotification } from './Notifications.mjs';
|
|
11
|
+
export { ToastNotifications, createToastNotification, useToastNotificationToggle, useToastNotifications, willShowToastNotification } from './ToastNotifications.mjs';
|
|
12
|
+
export { PersistentNotification, PersistentNotificationActions, PersistentNotificationCloseIcon, PersistentNotificationContent, PersistentNotificationIcon, PersistentNotifications, hidePersistentNotifications, openPersistentNotification, useIsHiddenPersistentNotifications } from './PersistentNotifications.mjs';
|
|
13
|
+
export { DefaultArrow, addPositioningBound, usePositioning } from './containers/usePositioning.mjs';
|
|
14
|
+
export { Reposition } from './containers/Reposition.mjs';
|
|
15
|
+
export { AnimatedModal, DialogContainer, Modal, ModalContainer, dialogFadeInDown, dialogModalIn, dialogModalOut, getDialogLayersSize, isFakeScrolled, preventDialogPop, removeWindowScroll, useDialogLayers, waitForPop } from './containers/DialogContainer.mjs';
|
|
16
|
+
export { DraggableContainer, DraggableItem, DroppableContainer } from './Draggable.mjs';
|
|
17
|
+
export { Popup } from './Popup.mjs';
|
|
18
|
+
export { Tooltip } from './Tooltip.mjs';
|
|
19
|
+
export { SplitColumnsContainer, fixDoubledLastMarginBottom } from './SplitColumnsContainer.mjs';
|
|
20
|
+
export { ContextListMenu, ContextMenu, ContextMenuComponent, Li, ListHeading, ListItem, ListMenu, ListSeparator, SimpleLi, StickyContainer, contextMenuLayersQuantity } from './ContextMenu.mjs';
|
|
21
|
+
export { ErrorBoundary } from './ErrorBoundary.mjs';
|
|
22
|
+
export { LoadingBar, PageLoader, SuspenseLoadingBar } from './PageLoader.mjs';
|
|
23
|
+
export { FillLastLineResizer } from './FillLastLineResizer.mjs';
|
|
24
|
+
export { defaultAnimationMaker, formatAnimation, getClientRectAnimation, morph, toPosition, useFlip, useFlipAnimation, useFlipEnter, useFlipLeave, willUseFlip, willUseFlipSwitch } from './Flip.mjs';
|
|
25
|
+
export { FlipList } from './FlipList.mjs';
|
|
26
|
+
export { AnimationBlockContainer, TransitionDiv } from './TransitionDiv.mjs';
|
|
27
|
+
export { SwitchDiv } from './SwitchDiv.mjs';
|
|
28
|
+
export { willUseIsSticky } from './willUseIsSticky.mjs';
|
|
29
|
+
export { FormatDate } from './FormatDate.mjs';
|
|
30
|
+
export { Image } from './Image.mjs';
|
|
31
|
+
export { DialogWithImageHeader } from './alt/dialogs/DialogWithImageHeader.mjs';
|
|
32
|
+
export { DialogTabMenu, DialogWithSidebar, DialogWithSidebarPresentation, MENU_TAB, SideMenu } from './alt/dialogs/DialogWithSidebar.mjs';
|
|
33
|
+
export { MobileBubbleDialog } from './alt/dialogs/MobileBubbleDialog.mjs';
|
|
34
|
+
export { HistoryLink, Link, Navigate, Route, Router, Routes, useAbsoluteLocation, useAbsolutePath, useLocation, useNavigate, useParams, useSearchParams } from './Link.mjs';
|
|
35
|
+
export { BasicBulletList } from './BasicBulletList.mjs';
|
|
36
|
+
export { useBrowserLocation } from 'wouter/use-browser-location';
|
|
37
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useToggle, useFill } from '@startlibs/core';
|
|
2
|
+
|
|
3
|
+
const useDialog = function (dialog) {
|
|
4
|
+
let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
5
|
+
let toggleCallback = arguments.length > 2 ? arguments[2] : undefined;
|
|
6
|
+
const toggle = useToggle(false, toggleCallback);
|
|
7
|
+
useFill("Dialog", toggle.isOpen !== false && dialog(toggle.close), [toggle.isOpen, ...args]);
|
|
8
|
+
return toggle.open;
|
|
9
|
+
};
|
|
10
|
+
const useDialogWithToggle = function (dialog) {
|
|
11
|
+
let args = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
|
|
12
|
+
const toggle = useToggle();
|
|
13
|
+
useFill("Dialog", toggle.isOpen !== false && dialog(toggle), [toggle.isOpen, ...args]);
|
|
14
|
+
return toggle;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export { useDialog, useDialogWithToggle };
|
|
18
|
+
//# sourceMappingURL=useDialogWithToggle.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDialogWithToggle.mjs","sources":["../src/useDialogWithToggle.jsx"],"sourcesContent":["import {useToggle,useFill} from '@startlibs/core'\n\nexport const useDialog = (dialog, args = [], toggleCallback) => {\n const toggle = useToggle(false,toggleCallback)\n useFill(\"Dialog\", toggle.isOpen !== false && dialog(toggle.close), [toggle.isOpen, ...args])\n return toggle.open\n}\nexport const useDialogWithToggle = (dialog, args = []) => {\n const toggle = useToggle()\n useFill(\"Dialog\", toggle.isOpen !== false && dialog(toggle), [toggle.isOpen, ...args])\n return toggle\n}"],"names":["useDialog","dialog","args","arguments","length","undefined","toggleCallback","toggle","useToggle","useFill","isOpen","close","open","useDialogWithToggle"],"mappings":";;MAEaA,SAAS,GAAG,UAACC,MAAM,EAAgC;AAAA,EAAA,IAA9BC,IAAI,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE,CAAA;EAAA,IAAEG,cAAc,GAAAH,SAAA,CAAAC,MAAA,GAAAD,CAAAA,GAAAA,SAAA,MAAAE,SAAA,CAAA;AACzD,EAAA,MAAME,MAAM,GAAGC,SAAS,CAAC,KAAK,EAACF,cAAc,CAAC,CAAA;EAC9CG,OAAO,CAAC,QAAQ,EAAEF,MAAM,CAACG,MAAM,KAAK,KAAK,IAAIT,MAAM,CAACM,MAAM,CAACI,KAAK,CAAC,EAAE,CAACJ,MAAM,CAACG,MAAM,EAAE,GAAGR,IAAI,CAAC,CAAC,CAAA;EAC5F,OAAOK,MAAM,CAACK,IAAI,CAAA;AACpB,EAAC;MACYC,mBAAmB,GAAG,UAACZ,MAAM,EAAgB;AAAA,EAAA,IAAdC,IAAI,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE,CAAA;AACnD,EAAA,MAAMI,MAAM,GAAGC,SAAS,EAAE,CAAA;EAC1BC,OAAO,CAAC,QAAQ,EAAEF,MAAM,CAACG,MAAM,KAAK,KAAK,IAAIT,MAAM,CAACM,MAAM,CAAC,EAAE,CAACA,MAAM,CAACG,MAAM,EAAE,GAAGR,IAAI,CAAC,CAAC,CAAA;AACtF,EAAA,OAAOK,MAAM,CAAA;AACf;;;;"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
|
+
import _without from 'lodash/fp/without';
|
|
3
|
+
import _identity from 'lodash/fp/identity';
|
|
4
|
+
import { yakDomTag } from '@startlibs/utils/yakDomTag';
|
|
5
|
+
import React, { useState, useEffect } from 'react';
|
|
6
|
+
import { willUseSharedCallback, willUseSharedState, useEnsureRef } from '@startlibs/core';
|
|
7
|
+
import { styled } from '@yak/react';
|
|
8
|
+
import { callIfFunction } from '@startlibs/utils';
|
|
9
|
+
|
|
10
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
11
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
12
|
+
const TOP_TRIGGER = (posInfo, refInfo) => {
|
|
13
|
+
// Started sticking.
|
|
14
|
+
if (posInfo.bottom < refInfo.top) {
|
|
15
|
+
return true;
|
|
16
|
+
}
|
|
17
|
+
// Stopped sticking.
|
|
18
|
+
if (posInfo.bottom >= refInfo.top && posInfo.bottom < refInfo.bottom) {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
const BOTTOM_TRIGGER = (posInfo, refInfo) => {
|
|
23
|
+
// Started sticking.
|
|
24
|
+
if (posInfo.top > refInfo.bottom) {
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
if (posInfo.top <= refInfo.bottom && posInfo.top > refInfo.top) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const SentinelStyle = styled(yakDomTag("div"))`
|
|
32
|
+
position:absolute;
|
|
33
|
+
visibility: hidden;
|
|
34
|
+
height:1px;
|
|
35
|
+
width: 1px;
|
|
36
|
+
`;
|
|
37
|
+
|
|
38
|
+
// addCss é texto livre de declarações CSS (ex.: Combobox.jsx em @startlibs/form passa
|
|
39
|
+
// "margin-top:-3px;"), decidido em tempo de execução pelo chamador — não dá pra virar
|
|
40
|
+
// `css\`\`` (precisaria do texto na hora do build) nem ficar como interpolação solta no
|
|
41
|
+
// template (R14: o yak ignora em silêncio uma função que devolve texto livre numa posição de
|
|
42
|
+
// declaração). Vira `style` inline nos dois modos: mesmo resultado visual, sem CSS-in-JS aqui.
|
|
43
|
+
const cssTextToStyle = text => {
|
|
44
|
+
const style = {};
|
|
45
|
+
for (const declaration of (text || '').split(';')) {
|
|
46
|
+
const colonIndex = declaration.indexOf(':');
|
|
47
|
+
if (colonIndex === -1) continue;
|
|
48
|
+
const property = declaration.slice(0, colonIndex).trim();
|
|
49
|
+
const value = declaration.slice(colonIndex + 1).trim();
|
|
50
|
+
if (!property || !value) continue;
|
|
51
|
+
// Custom property (--foo) mantém o nome; o resto vira camelCase (margin-top -> marginTop),
|
|
52
|
+
// igual ao que o React espera num objeto de `style`.
|
|
53
|
+
const camelProperty = property.startsWith('--') ? property : property.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
54
|
+
style[camelProperty] = value;
|
|
55
|
+
}
|
|
56
|
+
return Object.keys(style).length ? style : undefined;
|
|
57
|
+
};
|
|
58
|
+
const willUseIsSticky = function () {
|
|
59
|
+
let options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
60
|
+
const [useRegister, onChange] = willUseSharedCallback();
|
|
61
|
+
const [useSharedIsSticky,, setSharedIsSticky] = willUseSharedState();
|
|
62
|
+
const createObserver = root => window.IntersectionObserver ? new window.IntersectionObserver((records, observer) => {
|
|
63
|
+
for (const record of records) {
|
|
64
|
+
const targetInfo = record.boundingClientRect;
|
|
65
|
+
const rootBoundsInfo = record.rootBounds;
|
|
66
|
+
if (!rootBoundsInfo) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
onChange(targetInfo, rootBoundsInfo, record.target, record.isIntersecting);
|
|
70
|
+
}
|
|
71
|
+
}, _objectSpread({
|
|
72
|
+
root
|
|
73
|
+
}, options)) : {
|
|
74
|
+
observe: _identity,
|
|
75
|
+
unobserve: _identity
|
|
76
|
+
};
|
|
77
|
+
const observerMap = new Map();
|
|
78
|
+
const getObserver = function () {
|
|
79
|
+
let root = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
80
|
+
const result = observerMap.get(root);
|
|
81
|
+
if (result) {
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
const observer = createObserver(root);
|
|
85
|
+
observerMap.set(root, observer);
|
|
86
|
+
return observer;
|
|
87
|
+
};
|
|
88
|
+
let activeObserved = [];
|
|
89
|
+
const resetObservers = function () {
|
|
90
|
+
let root = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null;
|
|
91
|
+
const observer = getObserver(root);
|
|
92
|
+
activeObserved.forEach(observed => {
|
|
93
|
+
observer.unobserve(observed);
|
|
94
|
+
observer.observe(observed);
|
|
95
|
+
});
|
|
96
|
+
};
|
|
97
|
+
const WithIsSticky = /*#__PURE__*/React.forwardRef((_ref, ref) => {
|
|
98
|
+
let {
|
|
99
|
+
className,
|
|
100
|
+
id,
|
|
101
|
+
css,
|
|
102
|
+
children,
|
|
103
|
+
bottom,
|
|
104
|
+
root,
|
|
105
|
+
intersection,
|
|
106
|
+
onChange
|
|
107
|
+
} = _ref;
|
|
108
|
+
const ensuredRef = useEnsureRef(ref);
|
|
109
|
+
const [isSticky, setIsSticky] = useState(false);
|
|
110
|
+
useRegister((posInfo, refInfo, target, isIntersecting) => {
|
|
111
|
+
if (ensuredRef.current === target) {
|
|
112
|
+
const value = intersection ? isIntersecting : bottom ? BOTTOM_TRIGGER(posInfo, refInfo) : TOP_TRIGGER(posInfo, refInfo);
|
|
113
|
+
if (value !== undefined) {
|
|
114
|
+
setIsSticky(value);
|
|
115
|
+
callIfFunction(onChange, value);
|
|
116
|
+
if (!id) {
|
|
117
|
+
setSharedIsSticky(value);
|
|
118
|
+
} else if (value) {
|
|
119
|
+
setSharedIsSticky(id);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
useEffect(() => {
|
|
125
|
+
setIsSticky(false);
|
|
126
|
+
getObserver(callIfFunction(root)).observe(ensuredRef.current);
|
|
127
|
+
activeObserved = activeObserved.concat(ensuredRef.current);
|
|
128
|
+
return () => {
|
|
129
|
+
// observer.unobserve(ref.current)
|
|
130
|
+
activeObserved = _without([ensuredRef.current], activeObserved);
|
|
131
|
+
};
|
|
132
|
+
}, []);
|
|
133
|
+
const renderSentinel = function () {
|
|
134
|
+
let css = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "";
|
|
135
|
+
return /*#__PURE__*/React.createElement(SentinelStyle, {
|
|
136
|
+
style: cssTextToStyle(css),
|
|
137
|
+
className: className,
|
|
138
|
+
ref: ensuredRef
|
|
139
|
+
});
|
|
140
|
+
};
|
|
141
|
+
return children ? children(renderSentinel, isSticky) : renderSentinel(css);
|
|
142
|
+
});
|
|
143
|
+
return [WithIsSticky, useSharedIsSticky, resetObservers];
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
export { willUseIsSticky };
|
|
147
|
+
//# sourceMappingURL=willUseIsSticky.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"willUseIsSticky.mjs","sources":["../src/willUseIsSticky.jsx"],"sourcesContent":["import React, {useEffect, useState} from 'react'\nimport {useEnsureRef, willUseSharedState, willUseSharedCallback} from '@startlibs/core'\nimport styled from 'styled-components'\nimport _ from 'lodash/fp'\nimport {callIfFunction} from '@startlibs/utils'\n\n\nconst TOP_TRIGGER = (posInfo,refInfo) => {\n // Started sticking.\n if (posInfo.bottom < refInfo.top) {\n return true\n }\n // Stopped sticking.\n if (posInfo.bottom >= refInfo.top &&\n posInfo.bottom < refInfo.bottom) {\n return false\n }\n}\nconst BOTTOM_TRIGGER = (posInfo,refInfo) => {\n // Started sticking.\n if (posInfo.top > refInfo.bottom) {\n return true\n }\n if (posInfo.top <= refInfo.bottom &&\n posInfo.top > refInfo.top) {\n return false\n }\n}\n\nconst SentinelStyle = styled.div`\n position:absolute;\n visibility: hidden;\n height:1px;\n width: 1px;\n`\n\n// addCss é texto livre de declarações CSS (ex.: Combobox.jsx em @startlibs/form passa\n// \"margin-top:-3px;\"), decidido em tempo de execução pelo chamador — não dá pra virar\n// `css\\`\\`` (precisaria do texto na hora do build) nem ficar como interpolação solta no\n// template (R14: o yak ignora em silêncio uma função que devolve texto livre numa posição de\n// declaração). Vira `style` inline nos dois modos: mesmo resultado visual, sem CSS-in-JS aqui.\nconst cssTextToStyle = (text) => {\n const style = {}\n for (const declaration of (text || '').split(';')) {\n const colonIndex = declaration.indexOf(':')\n if (colonIndex === -1) continue\n const property = declaration.slice(0, colonIndex).trim()\n const value = declaration.slice(colonIndex + 1).trim()\n if (!property || !value) continue\n // Custom property (--foo) mantém o nome; o resto vira camelCase (margin-top -> marginTop),\n // igual ao que o React espera num objeto de `style`.\n const camelProperty = property.startsWith('--') ? property : property.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase())\n style[camelProperty] = value\n }\n return Object.keys(style).length ? style : undefined\n}\n\nexport const willUseIsSticky = (options = {}) => {\n\n const [useRegister, onChange] = willUseSharedCallback()\n const [useSharedIsSticky,, setSharedIsSticky] = willUseSharedState()\n\n const createObserver = (root) => window.IntersectionObserver ? new window.IntersectionObserver((records, observer) => {\n for (const record of records) {\n const targetInfo = record.boundingClientRect\n const rootBoundsInfo = record.rootBounds\n if (!rootBoundsInfo) {\n return\n }\n onChange(targetInfo,rootBoundsInfo, record.target, record.isIntersecting)\n }\n },{root,...options}) : {observe:_.identity,unobserve:_.identity}\n\n const observerMap = new Map()\n const getObserver = (root = null) => {\n const result = observerMap.get(root)\n if (result) {\n return result\n }\n const observer = createObserver(root)\n observerMap.set(root,observer)\n return observer\n }\n \n let activeObserved = []\n const resetObservers = (root = null) => {\n const observer = getObserver(root)\n activeObserved.forEach((observed) => {\n observer.unobserve(observed)\n observer.observe(observed)\n })\n }\n\n const WithIsSticky = React.forwardRef(({className, id, css, children,bottom, root, intersection,onChange},ref) => {\n const ensuredRef = useEnsureRef(ref)\n const [isSticky,setIsSticky] = useState(false)\n\n useRegister((posInfo,refInfo,target, isIntersecting) => {\n if (ensuredRef.current === target) {\n const value = intersection ? isIntersecting : (bottom ? BOTTOM_TRIGGER(posInfo,refInfo) : TOP_TRIGGER(posInfo,refInfo))\n if (value!==undefined) {\n setIsSticky(value)\n callIfFunction(onChange,value)\n if (!id) {\n setSharedIsSticky(value)\n } else if (value) {\n setSharedIsSticky(id)\n }\n }\n }\n })\n\n useEffect(() => {\n setIsSticky(false)\n getObserver(callIfFunction(root)).observe(ensuredRef.current)\n activeObserved = activeObserved.concat(ensuredRef.current)\n return () => {\n // observer.unobserve(ref.current)\n activeObserved = _.without([ensuredRef.current],activeObserved)\n }\n },[])\n\n const renderSentinel = (css = \"\") => <SentinelStyle style={cssTextToStyle(css)} className={className} ref={ensuredRef} />\n\n return children\n ? children(renderSentinel,isSticky)\n : renderSentinel(css)\n\n })\n\n\n return [WithIsSticky, useSharedIsSticky, resetObservers]\n}"],"names":["TOP_TRIGGER","posInfo","refInfo","bottom","top","BOTTOM_TRIGGER","SentinelStyle","styled","yakDomTag","cssTextToStyle","text","style","declaration","split","colonIndex","indexOf","property","slice","trim","value","camelProperty","startsWith","replace","_","letter","toUpperCase","Object","keys","length","undefined","willUseIsSticky","options","arguments","useRegister","onChange","willUseSharedCallback","useSharedIsSticky","setSharedIsSticky","willUseSharedState","createObserver","root","window","IntersectionObserver","records","observer","record","targetInfo","boundingClientRect","rootBoundsInfo","rootBounds","target","isIntersecting","_objectSpread","observe","_identity","unobserve","observerMap","Map","getObserver","result","get","set","activeObserved","resetObservers","forEach","observed","WithIsSticky","React","forwardRef","_ref","ref","className","id","css","children","intersection","ensuredRef","useEnsureRef","isSticky","setIsSticky","useState","current","callIfFunction","useEffect","concat","_without","renderSentinel","createElement"],"mappings":"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"}
|