@navikt/ds-react 7.33.1 → 7.33.3
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/cjs/date/datepicker/hooks/useRangeDatepicker.js +2 -2
- package/cjs/date/datepicker/hooks/useRangeDatepicker.js.map +1 -1
- package/cjs/overlays/action-menu/ActionMenu.d.ts +20 -0
- package/cjs/overlays/action-menu/ActionMenu.js +20 -0
- package/cjs/overlays/action-menu/ActionMenu.js.map +1 -1
- package/cjs/overlays/dismissablelayer/DismissableLayer.js +23 -32
- package/cjs/overlays/dismissablelayer/DismissableLayer.js.map +1 -1
- package/cjs/overlays/dismissablelayer/util/useEscapeKeydown.d.ts +1 -1
- package/cjs/overlays/dismissablelayer/util/useEscapeKeydown.js +8 -3
- package/cjs/overlays/dismissablelayer/util/useEscapeKeydown.js.map +1 -1
- package/cjs/overlays/dismissablelayer/util/useFocusOutside.d.ts +1 -1
- package/cjs/overlays/dismissablelayer/util/useFocusOutside.js +8 -3
- package/cjs/overlays/dismissablelayer/util/useFocusOutside.js.map +1 -1
- package/cjs/overlays/dismissablelayer/util/usePointerDownOutside.d.ts +1 -1
- package/cjs/overlays/dismissablelayer/util/usePointerDownOutside.js +5 -2
- package/cjs/overlays/dismissablelayer/util/usePointerDownOutside.js.map +1 -1
- package/cjs/timeline/Timeline.d.ts +1 -1
- package/cjs/timeline/Timeline.js +1 -1
- package/cjs/timeline/Timeline.js.map +1 -1
- package/cjs/timeline/index.d.ts +1 -1
- package/cjs/timeline/index.js +1 -1
- package/cjs/timeline/index.js.map +1 -1
- package/cjs/timeline/pin/Pin.d.ts +9 -0
- package/cjs/timeline/pin/Pin.js +68 -0
- package/cjs/timeline/pin/Pin.js.map +1 -0
- package/cjs/timeline/pin/PinInternal.d.ts +13 -0
- package/cjs/timeline/{Pin.js → pin/PinInternal.js} +9 -10
- package/cjs/timeline/pin/PinInternal.js.map +1 -0
- package/cjs/util/hooks/useScrollLock.js +17 -3
- package/cjs/util/hooks/useScrollLock.js.map +1 -1
- package/esm/date/datepicker/hooks/useRangeDatepicker.js +2 -2
- package/esm/date/datepicker/hooks/useRangeDatepicker.js.map +1 -1
- package/esm/overlays/action-menu/ActionMenu.d.ts +20 -0
- package/esm/overlays/action-menu/ActionMenu.js +20 -0
- package/esm/overlays/action-menu/ActionMenu.js.map +1 -1
- package/esm/overlays/dismissablelayer/DismissableLayer.js +22 -31
- package/esm/overlays/dismissablelayer/DismissableLayer.js.map +1 -1
- package/esm/overlays/dismissablelayer/util/useEscapeKeydown.d.ts +1 -1
- package/esm/overlays/dismissablelayer/util/useEscapeKeydown.js +8 -3
- package/esm/overlays/dismissablelayer/util/useEscapeKeydown.js.map +1 -1
- package/esm/overlays/dismissablelayer/util/useFocusOutside.d.ts +1 -1
- package/esm/overlays/dismissablelayer/util/useFocusOutside.js +8 -3
- package/esm/overlays/dismissablelayer/util/useFocusOutside.js.map +1 -1
- package/esm/overlays/dismissablelayer/util/usePointerDownOutside.d.ts +1 -1
- package/esm/overlays/dismissablelayer/util/usePointerDownOutside.js +5 -2
- package/esm/overlays/dismissablelayer/util/usePointerDownOutside.js.map +1 -1
- package/esm/timeline/Timeline.d.ts +1 -1
- package/esm/timeline/Timeline.js +1 -1
- package/esm/timeline/Timeline.js.map +1 -1
- package/esm/timeline/index.d.ts +1 -1
- package/esm/timeline/index.js +1 -1
- package/esm/timeline/index.js.map +1 -1
- package/esm/timeline/pin/Pin.d.ts +9 -0
- package/esm/timeline/pin/Pin.js +29 -0
- package/esm/timeline/pin/Pin.js.map +1 -0
- package/esm/timeline/pin/PinInternal.d.ts +13 -0
- package/esm/timeline/{Pin.js → pin/PinInternal.js} +8 -9
- package/esm/timeline/pin/PinInternal.js.map +1 -0
- package/esm/util/hooks/useScrollLock.js +17 -3
- package/esm/util/hooks/useScrollLock.js.map +1 -1
- package/package.json +5 -5
- package/src/date/datepicker/hooks/useRangeDatepicker.tsx +4 -2
- package/src/overlays/action-menu/ActionMenu.tsx +20 -0
- package/src/overlays/dismissablelayer/DismissableLayer.tsx +91 -97
- package/src/overlays/dismissablelayer/util/useEscapeKeydown.ts +9 -2
- package/src/overlays/dismissablelayer/util/useFocusOutside.ts +9 -2
- package/src/overlays/dismissablelayer/util/usePointerDownOutside.ts +6 -1
- package/src/timeline/Timeline.tsx +1 -1
- package/src/timeline/index.ts +1 -1
- package/src/timeline/pin/Pin.tsx +33 -0
- package/src/timeline/{Pin.tsx → pin/PinInternal.tsx} +8 -18
- package/src/util/hooks/useScrollLock.ts +22 -3
- package/cjs/timeline/Pin.d.ts +0 -17
- package/cjs/timeline/Pin.js.map +0 -1
- package/esm/timeline/Pin.d.ts +0 -17
- package/esm/timeline/Pin.js.map +0 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import React, { forwardRef, useContext, useEffect, useState } from "react";
|
|
2
2
|
import { Slot } from "../../slot/Slot";
|
|
3
|
-
import { omit } from "../../util";
|
|
4
3
|
import { composeEventHandlers } from "../../util/composeEventHandlers";
|
|
5
4
|
import { useMergeRefs } from "../../util/hooks";
|
|
6
5
|
import { ownerDocument } from "../../util/owner";
|
|
@@ -63,34 +62,7 @@ interface DismissableLayerBaseProps
|
|
|
63
62
|
|
|
64
63
|
type DismissableLayerProps = DismissableLayerBaseProps & AsChild;
|
|
65
64
|
|
|
66
|
-
|
|
67
|
-
({ enabled = true, ...restProps }: DismissableLayerProps, forwardedRef) => {
|
|
68
|
-
if (!enabled) {
|
|
69
|
-
const Component = restProps.asChild ? Slot : "div";
|
|
70
|
-
return (
|
|
71
|
-
<Component
|
|
72
|
-
{...omit(restProps, [
|
|
73
|
-
"asChild",
|
|
74
|
-
"disableOutsidePointerEvents",
|
|
75
|
-
"onDismiss",
|
|
76
|
-
"onEscapeKeyDown",
|
|
77
|
-
"onFocusOutside",
|
|
78
|
-
"onInteractOutside",
|
|
79
|
-
"onPointerDownOutside",
|
|
80
|
-
"safeZone",
|
|
81
|
-
])}
|
|
82
|
-
ref={forwardedRef}
|
|
83
|
-
/>
|
|
84
|
-
);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
return <DismissableLayerInternal {...restProps} ref={forwardedRef} />;
|
|
88
|
-
},
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
type DismissableLayerElement = React.ComponentRef<
|
|
92
|
-
typeof DismissableLayerInternal
|
|
93
|
-
>;
|
|
65
|
+
type DismissableLayerElement = React.ComponentRef<typeof DismissableLayer>;
|
|
94
66
|
|
|
95
67
|
const BranchedLayerContext =
|
|
96
68
|
React.createContext<DismissableLayerElement | null>(null);
|
|
@@ -108,10 +80,7 @@ const DismissableLayerContext = React.createContext({
|
|
|
108
80
|
layersWithOutsidePointerEventsDisabled: new Set<DismissableLayerElement>(),
|
|
109
81
|
});
|
|
110
82
|
|
|
111
|
-
const
|
|
112
|
-
HTMLDivElement,
|
|
113
|
-
DismissableLayerProps
|
|
114
|
-
>(
|
|
83
|
+
const DismissableLayer = forwardRef<HTMLDivElement, DismissableLayerProps>(
|
|
115
84
|
(
|
|
116
85
|
{
|
|
117
86
|
children,
|
|
@@ -123,6 +92,7 @@ const DismissableLayerInternal = forwardRef<
|
|
|
123
92
|
onPointerDownOutside,
|
|
124
93
|
safeZone,
|
|
125
94
|
asChild,
|
|
95
|
+
enabled = true,
|
|
126
96
|
...restProps
|
|
127
97
|
}: DismissableLayerProps,
|
|
128
98
|
forwardedRef,
|
|
@@ -194,73 +164,85 @@ const DismissableLayerInternal = forwardRef<
|
|
|
194
164
|
}
|
|
195
165
|
}
|
|
196
166
|
|
|
197
|
-
const pointerDownOutside = usePointerDownOutside(
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
/**
|
|
203
|
-
* We call these before letting `handleOutsideEvent` do its checks to give consumer a chance to preventDefault.
|
|
204
|
-
*/
|
|
205
|
-
onPointerDownOutside?.(event);
|
|
206
|
-
onInteractOutside?.(event);
|
|
207
|
-
|
|
208
|
-
/**
|
|
209
|
-
* Add safeZone to prevent closing when interacting with trigger/anchor or its children.
|
|
210
|
-
*/
|
|
211
|
-
safeZone && handleOutsideEvent(event);
|
|
167
|
+
const pointerDownOutside = usePointerDownOutside(
|
|
168
|
+
(event) => {
|
|
169
|
+
if (!shouldEnablePointerEvents) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
212
172
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
173
|
+
/**
|
|
174
|
+
* We call these before letting `handleOutsideEvent` do its checks to give consumer a chance to preventDefault.
|
|
175
|
+
*/
|
|
176
|
+
onPointerDownOutside?.(event);
|
|
177
|
+
onInteractOutside?.(event);
|
|
217
178
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
onFocusOutside?.(event);
|
|
223
|
-
onInteractOutside?.(event);
|
|
179
|
+
/**
|
|
180
|
+
* Add safeZone to prevent closing when interacting with trigger/anchor or its children.
|
|
181
|
+
*/
|
|
182
|
+
safeZone && handleOutsideEvent(event);
|
|
224
183
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
184
|
+
if (!event.defaultPrevented && onDismiss) {
|
|
185
|
+
onDismiss();
|
|
186
|
+
}
|
|
187
|
+
},
|
|
188
|
+
ownerDoc,
|
|
189
|
+
enabled,
|
|
190
|
+
);
|
|
229
191
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
192
|
+
const focusOutside = useFocusOutside(
|
|
193
|
+
(event) => {
|
|
194
|
+
/**
|
|
195
|
+
* We call these before letting `handleOutsideEvent` do its checks to give consumer a chance to preventDefault.
|
|
196
|
+
*/
|
|
197
|
+
onFocusOutside?.(event);
|
|
198
|
+
onInteractOutside?.(event);
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Add safeZone to prevent closing when interacting with trigger/anchor or its children.
|
|
202
|
+
*/
|
|
203
|
+
safeZone && handleOutsideEvent(event);
|
|
204
|
+
|
|
205
|
+
if (!event.defaultPrevented && onDismiss) {
|
|
206
|
+
onDismiss();
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
ownerDoc,
|
|
210
|
+
enabled,
|
|
211
|
+
);
|
|
234
212
|
|
|
235
|
-
useEscapeKeydown(
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
213
|
+
useEscapeKeydown(
|
|
214
|
+
(event) => {
|
|
215
|
+
/**
|
|
216
|
+
* The deepest nested element will always be last in the descendants list.
|
|
217
|
+
* This allows us to only close the highest layer when pressing escape.
|
|
218
|
+
*/
|
|
219
|
+
const isHighestLayer = index === context.layers.size - 1;
|
|
220
|
+
if (!isHighestLayer) {
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
244
223
|
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
224
|
+
/**
|
|
225
|
+
* We call this before letting `handleOutsideEvent` do its checks to give consumer a chance to preventDefault based certain cases.
|
|
226
|
+
*/
|
|
227
|
+
onEscapeKeyDown?.(event);
|
|
228
|
+
/**
|
|
229
|
+
* `onEscapeKeyDown` is able to preventDefault the event, thus stopping call for `onDismiss`.
|
|
230
|
+
* We want to `preventDefault` the escape-event to avoid sideeffect from other elements on screen
|
|
231
|
+
*/
|
|
232
|
+
if (!event.defaultPrevented && onDismiss) {
|
|
233
|
+
event.preventDefault();
|
|
234
|
+
onDismiss();
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
ownerDoc,
|
|
238
|
+
enabled,
|
|
239
|
+
);
|
|
258
240
|
|
|
259
241
|
/**
|
|
260
242
|
* Handles registering `layers` and `layersWithOutsidePointerEventsDisabled`.
|
|
261
243
|
*/
|
|
262
244
|
useEffect(() => {
|
|
263
|
-
if (!node) {
|
|
245
|
+
if (!node || !enabled) {
|
|
264
246
|
return;
|
|
265
247
|
}
|
|
266
248
|
|
|
@@ -282,25 +264,32 @@ const DismissableLayerInternal = forwardRef<
|
|
|
282
264
|
ownerDoc.body.style.pointerEvents = originalBodyPointerEvents;
|
|
283
265
|
}
|
|
284
266
|
};
|
|
285
|
-
}, [node, disableOutsidePointerEvents, context, ownerDoc]);
|
|
267
|
+
}, [node, enabled, disableOutsidePointerEvents, context, ownerDoc]);
|
|
286
268
|
|
|
287
269
|
/**
|
|
288
270
|
* We purposefully prevent combining this effect with the `disableOutsidePointerEvents` effect
|
|
289
271
|
* because a change to `disableOutsidePointerEvents` would remove this layer from the stack
|
|
290
272
|
* and add it to the end again so the layering order wouldn't be creation order.
|
|
291
273
|
* We only want them to be removed from context stacks when unmounted.
|
|
274
|
+
*
|
|
275
|
+
* We depend on `enabled` to clean up when the layer is disabled.
|
|
292
276
|
*/
|
|
277
|
+
// biome-ignore lint/correctness/useExhaustiveDependencies: We need to clean up after enabled changes.
|
|
293
278
|
useEffect(() => {
|
|
294
279
|
return () => {
|
|
295
280
|
if (!node) {
|
|
296
281
|
return;
|
|
297
282
|
}
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
283
|
+
if (
|
|
284
|
+
context.layers.has(node) ||
|
|
285
|
+
context.layersWithOutsidePointerEventsDisabled.has(node)
|
|
286
|
+
) {
|
|
287
|
+
context.layers.delete(node);
|
|
288
|
+
context.layersWithOutsidePointerEventsDisabled.delete(node);
|
|
289
|
+
dispatchUpdate();
|
|
290
|
+
}
|
|
302
291
|
};
|
|
303
|
-
}, [node, context]);
|
|
292
|
+
}, [node, context, enabled]);
|
|
304
293
|
|
|
305
294
|
const parentBranchedLayer = useContext(BranchedLayerContext);
|
|
306
295
|
|
|
@@ -309,7 +298,12 @@ const DismissableLayerInternal = forwardRef<
|
|
|
309
298
|
* When this layer has a parent, we register it as a child of the parent.
|
|
310
299
|
*/
|
|
311
300
|
useEffect(() => {
|
|
312
|
-
if (
|
|
301
|
+
if (
|
|
302
|
+
!node ||
|
|
303
|
+
!enabled ||
|
|
304
|
+
!parentBranchedLayer ||
|
|
305
|
+
node === parentBranchedLayer
|
|
306
|
+
) {
|
|
313
307
|
return;
|
|
314
308
|
}
|
|
315
309
|
|
|
@@ -332,7 +326,7 @@ const DismissableLayerInternal = forwardRef<
|
|
|
332
326
|
|
|
333
327
|
dispatchUpdate();
|
|
334
328
|
};
|
|
335
|
-
}, [node, parentBranchedLayer, context]);
|
|
329
|
+
}, [node, enabled, parentBranchedLayer, context]);
|
|
336
330
|
|
|
337
331
|
/**
|
|
338
332
|
* Synchronizes layer state across all mounted `DismissableLayer` instances.
|
|
@@ -4,10 +4,15 @@ import { useCallbackRef } from "../../../util/hooks";
|
|
|
4
4
|
export function useEscapeKeydown(
|
|
5
5
|
callback?: (event: KeyboardEvent) => void,
|
|
6
6
|
ownerDocument: Document = globalThis?.document,
|
|
7
|
+
enabled: boolean = true,
|
|
7
8
|
) {
|
|
8
9
|
const onEscapeKeyDown = useCallbackRef(callback);
|
|
9
10
|
|
|
10
11
|
useEffect(() => {
|
|
12
|
+
if (!enabled) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
|
|
11
16
|
const handleKeyDown = (event: KeyboardEvent) => {
|
|
12
17
|
if (event.key === "Escape") {
|
|
13
18
|
onEscapeKeyDown(event);
|
|
@@ -15,7 +20,9 @@ export function useEscapeKeydown(
|
|
|
15
20
|
};
|
|
16
21
|
|
|
17
22
|
ownerDocument.addEventListener("keydown", handleKeyDown, true);
|
|
18
|
-
|
|
23
|
+
|
|
24
|
+
return () => {
|
|
19
25
|
ownerDocument.removeEventListener("keydown", handleKeyDown, true);
|
|
20
|
-
|
|
26
|
+
};
|
|
27
|
+
}, [onEscapeKeyDown, ownerDocument, enabled]);
|
|
21
28
|
}
|
|
@@ -12,11 +12,16 @@ import {
|
|
|
12
12
|
export function useFocusOutside(
|
|
13
13
|
callback?: (event: CustomFocusEvent) => void,
|
|
14
14
|
ownerDocument: Document = globalThis?.document,
|
|
15
|
+
enabled: boolean = true,
|
|
15
16
|
) {
|
|
16
17
|
const handleFocusOutside = useCallbackRef(callback) as EventListener;
|
|
17
18
|
const isFocusInsideReactTreeRef = useRef(false);
|
|
18
19
|
|
|
19
20
|
useEffect(() => {
|
|
21
|
+
if (!enabled) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
|
|
20
25
|
const handleFocus = (event: FocusEvent) => {
|
|
21
26
|
if (event.target && !isFocusInsideReactTreeRef.current) {
|
|
22
27
|
const eventDetail = { originalEvent: event };
|
|
@@ -38,8 +43,10 @@ export function useFocusOutside(
|
|
|
38
43
|
}
|
|
39
44
|
};
|
|
40
45
|
ownerDocument.addEventListener("focusin", handleFocus);
|
|
41
|
-
return () =>
|
|
42
|
-
|
|
46
|
+
return () => {
|
|
47
|
+
ownerDocument.removeEventListener("focusin", handleFocus);
|
|
48
|
+
};
|
|
49
|
+
}, [ownerDocument, handleFocusOutside, enabled]);
|
|
43
50
|
|
|
44
51
|
/**
|
|
45
52
|
* By directly setting isFocusInsideReactTreeRef on focus-events at the root of the "dismissable" element,
|
|
@@ -16,6 +16,7 @@ import {
|
|
|
16
16
|
export function usePointerDownOutside(
|
|
17
17
|
callback?: (event: CustomPointerDownEvent) => void,
|
|
18
18
|
ownerDocument: Document = globalThis?.document,
|
|
19
|
+
enabled: boolean = true,
|
|
19
20
|
) {
|
|
20
21
|
const handlePointerDownOutside = useCallbackRef(callback) as EventListener;
|
|
21
22
|
const isPointerInsideReactTreeRef = useRef(false);
|
|
@@ -23,6 +24,10 @@ export function usePointerDownOutside(
|
|
|
23
24
|
const timeout = useTimeout();
|
|
24
25
|
|
|
25
26
|
useEffect(() => {
|
|
27
|
+
if (!enabled) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
26
31
|
const handlePointerDown = (event: PointerEvent) => {
|
|
27
32
|
/**
|
|
28
33
|
* The `DismisableLayer`-API is based on the ability to stop events from propagating and in the end calling `onDismiss`
|
|
@@ -87,7 +92,7 @@ export function usePointerDownOutside(
|
|
|
87
92
|
ownerDocument.removeEventListener("pointerdown", handlePointerDown);
|
|
88
93
|
ownerDocument.removeEventListener("click", handleClickRef.current);
|
|
89
94
|
};
|
|
90
|
-
}, [ownerDocument, handlePointerDownOutside, timeout]);
|
|
95
|
+
}, [ownerDocument, handlePointerDownOutside, timeout, enabled]);
|
|
91
96
|
|
|
92
97
|
return {
|
|
93
98
|
// ensures we check React component tree (not just DOM tree)
|
|
@@ -2,7 +2,6 @@ import { endOfDay, isSameDay, startOfDay } from "date-fns";
|
|
|
2
2
|
import React, { forwardRef, useMemo, useRef, useState } from "react";
|
|
3
3
|
import { useRenameCSS } from "../theme/Theme";
|
|
4
4
|
import { AxisLabels } from "./AxisLabels";
|
|
5
|
-
import Pin, { PinType } from "./Pin";
|
|
6
5
|
import TimelineRow, { TimelineRowType } from "./TimelineRow";
|
|
7
6
|
import { RowContext } from "./hooks/useRowContext";
|
|
8
7
|
import { TimelineContext } from "./hooks/useTimelineContext";
|
|
@@ -12,6 +11,7 @@ import {
|
|
|
12
11
|
useTimelineRows,
|
|
13
12
|
} from "./hooks/useTimelineRows";
|
|
14
13
|
import Period, { PeriodType } from "./period";
|
|
14
|
+
import Pin, { PinType } from "./pin/Pin";
|
|
15
15
|
import { parseRows } from "./utils/timeline";
|
|
16
16
|
import { AxisLabelTemplates } from "./utils/types.external";
|
|
17
17
|
import Zoom, { ZoomType } from "./zoom";
|
package/src/timeline/index.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
export { default as Timeline, type TimelineProps } from "./Timeline";
|
|
3
3
|
export { default as TimelineRow, type TimelineRowProps } from "./TimelineRow";
|
|
4
|
-
export { default as TimelinePin, type TimelinePinProps } from "./Pin";
|
|
4
|
+
export { default as TimelinePin, type TimelinePinProps } from "./pin/Pin";
|
|
5
5
|
export { default as TimelinePeriod, type TimelinePeriodProps } from "./period";
|
|
6
6
|
export {
|
|
7
7
|
default as TimelineZoomButton,
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { isBefore } from "date-fns";
|
|
2
|
+
import React, { forwardRef } from "react";
|
|
3
|
+
import { useTimelineContext } from "../hooks/useTimelineContext";
|
|
4
|
+
import { TimelineComponentTypes } from "../utils/types.internal";
|
|
5
|
+
import PinInternal, { type TimelinePinProps } from "./PinInternal";
|
|
6
|
+
|
|
7
|
+
export interface PinType
|
|
8
|
+
extends React.ForwardRefExoticComponent<
|
|
9
|
+
TimelinePinProps & React.RefAttributes<HTMLButtonElement>
|
|
10
|
+
> {
|
|
11
|
+
componentType: TimelineComponentTypes;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export const Pin = forwardRef<HTMLButtonElement, TimelinePinProps>(
|
|
15
|
+
({ date, ...restProps }, forwardedRef) => {
|
|
16
|
+
const { startDate, endDate } = useTimelineContext();
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Out-of-bounds pins should not be rendered
|
|
20
|
+
*/
|
|
21
|
+
if (isBefore(date, startDate) || isBefore(endDate, date)) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return <PinInternal ref={forwardedRef} {...restProps} date={date} />;
|
|
26
|
+
},
|
|
27
|
+
) as PinType;
|
|
28
|
+
|
|
29
|
+
Pin.componentType = "pin";
|
|
30
|
+
|
|
31
|
+
export default Pin;
|
|
32
|
+
|
|
33
|
+
export type { TimelinePinProps };
|
|
@@ -14,12 +14,11 @@ import {
|
|
|
14
14
|
} from "@floating-ui/react";
|
|
15
15
|
import { format } from "date-fns";
|
|
16
16
|
import React, { forwardRef, useRef, useState } from "react";
|
|
17
|
-
import { useRenameCSS, useThemeInternal } from "
|
|
18
|
-
import { useMergeRefs } from "
|
|
19
|
-
import { useI18n } from "
|
|
20
|
-
import { useTimelineContext } from "
|
|
21
|
-
import { position } from "
|
|
22
|
-
import { TimelineComponentTypes } from "./utils/types.internal";
|
|
17
|
+
import { useRenameCSS, useThemeInternal } from "../../theme/Theme";
|
|
18
|
+
import { useMergeRefs } from "../../util/hooks/useMergeRefs";
|
|
19
|
+
import { useI18n } from "../../util/i18n/i18n.hooks";
|
|
20
|
+
import { useTimelineContext } from "../hooks/useTimelineContext";
|
|
21
|
+
import { position } from "../utils/calc";
|
|
23
22
|
|
|
24
23
|
export interface TimelinePinProps
|
|
25
24
|
extends React.HTMLAttributes<HTMLButtonElement> {
|
|
@@ -33,14 +32,7 @@ export interface TimelinePinProps
|
|
|
33
32
|
children?: React.ReactNode;
|
|
34
33
|
}
|
|
35
34
|
|
|
36
|
-
export
|
|
37
|
-
extends React.ForwardRefExoticComponent<
|
|
38
|
-
TimelinePinProps & React.RefAttributes<HTMLButtonElement>
|
|
39
|
-
> {
|
|
40
|
-
componentType: TimelineComponentTypes;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export const Pin = forwardRef<HTMLButtonElement, TimelinePinProps>(
|
|
35
|
+
export const PinInternal = forwardRef<HTMLButtonElement, TimelinePinProps>(
|
|
44
36
|
({ date, children, ...rest }, ref) => {
|
|
45
37
|
const { cn } = useRenameCSS();
|
|
46
38
|
const { startDate, endDate, direction } = useTimelineContext();
|
|
@@ -157,8 +149,6 @@ export const Pin = forwardRef<HTMLButtonElement, TimelinePinProps>(
|
|
|
157
149
|
</>
|
|
158
150
|
);
|
|
159
151
|
},
|
|
160
|
-
)
|
|
161
|
-
|
|
162
|
-
Pin.componentType = "pin";
|
|
152
|
+
);
|
|
163
153
|
|
|
164
|
-
export default
|
|
154
|
+
export default PinInternal;
|
|
@@ -19,11 +19,20 @@ function hasInsetScrollbars(referenceElement: Element | null) {
|
|
|
19
19
|
function preventScrollBasic(referenceElement: Element | null) {
|
|
20
20
|
const doc = ownerDocument(referenceElement);
|
|
21
21
|
const html = doc.documentElement;
|
|
22
|
-
const
|
|
23
|
-
|
|
22
|
+
const body = doc.body;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* If an `overflow` style is present on <html>, we need to lock it, because a lock on <body>
|
|
26
|
+
* won't have any effect.
|
|
27
|
+
* But if <body> has an `overflow` style (like `overflow-x: hidden`), we need to lock it
|
|
28
|
+
* instead, as sticky elements shift otherwise.
|
|
29
|
+
*/
|
|
30
|
+
const elementToLock = isOverflowElement(html) ? html : body;
|
|
31
|
+
const originalOverflow = elementToLock.style.overflow;
|
|
32
|
+
elementToLock.style.overflow = "hidden";
|
|
24
33
|
|
|
25
34
|
return () => {
|
|
26
|
-
|
|
35
|
+
elementToLock.style.overflow = originalOverflow;
|
|
27
36
|
};
|
|
28
37
|
}
|
|
29
38
|
|
|
@@ -314,4 +323,14 @@ function useScrollLock(params: {
|
|
|
314
323
|
}, [enabled, referenceElement]);
|
|
315
324
|
}
|
|
316
325
|
|
|
326
|
+
const invalidOverflowDisplayValues = new Set(["inline", "contents"]);
|
|
327
|
+
|
|
328
|
+
function isOverflowElement(element: Element): boolean {
|
|
329
|
+
const { overflow, overflowX, overflowY, display } = getComputedStyle(element);
|
|
330
|
+
return (
|
|
331
|
+
/auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) &&
|
|
332
|
+
!invalidOverflowDisplayValues.has(display)
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
|
|
317
336
|
export { useScrollLock };
|
package/cjs/timeline/Pin.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { TimelineComponentTypes } from "./utils/types.internal";
|
|
3
|
-
export interface TimelinePinProps extends React.HTMLAttributes<HTMLButtonElement> {
|
|
4
|
-
/**
|
|
5
|
-
* Date position for the pin.
|
|
6
|
-
*/
|
|
7
|
-
date: Date;
|
|
8
|
-
/**
|
|
9
|
-
* Content in Pin Popover.
|
|
10
|
-
*/
|
|
11
|
-
children?: React.ReactNode;
|
|
12
|
-
}
|
|
13
|
-
export interface PinType extends React.ForwardRefExoticComponent<TimelinePinProps & React.RefAttributes<HTMLButtonElement>> {
|
|
14
|
-
componentType: TimelineComponentTypes;
|
|
15
|
-
}
|
|
16
|
-
export declare const Pin: PinType;
|
|
17
|
-
export default Pin;
|
package/cjs/timeline/Pin.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Pin.js","sourceRoot":"","sources":["../../src/timeline/Pin.tsx"],"names":[],"mappings":"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"}
|
package/esm/timeline/Pin.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import React from "react";
|
|
2
|
-
import { TimelineComponentTypes } from "./utils/types.internal.js";
|
|
3
|
-
export interface TimelinePinProps extends React.HTMLAttributes<HTMLButtonElement> {
|
|
4
|
-
/**
|
|
5
|
-
* Date position for the pin.
|
|
6
|
-
*/
|
|
7
|
-
date: Date;
|
|
8
|
-
/**
|
|
9
|
-
* Content in Pin Popover.
|
|
10
|
-
*/
|
|
11
|
-
children?: React.ReactNode;
|
|
12
|
-
}
|
|
13
|
-
export interface PinType extends React.ForwardRefExoticComponent<TimelinePinProps & React.RefAttributes<HTMLButtonElement>> {
|
|
14
|
-
componentType: TimelineComponentTypes;
|
|
15
|
-
}
|
|
16
|
-
export declare const Pin: PinType;
|
|
17
|
-
export default Pin;
|
package/esm/timeline/Pin.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Pin.js","sourceRoot":"","sources":["../../src/timeline/Pin.tsx"],"names":[],"mappings":"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"}
|