@navikt/ds-react 7.30.1 → 7.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/chat/Chat.d.ts +1 -1
- package/cjs/chat/Chat.js.map +1 -1
- package/cjs/copybutton/CopyButton.js +1 -1
- package/cjs/copybutton/CopyButton.js.map +1 -1
- package/cjs/form/checkbox/Checkbox.js +1 -1
- package/cjs/form/checkbox/Checkbox.js.map +1 -1
- package/cjs/form/combobox/Combobox.js +15 -13
- package/cjs/form/combobox/Combobox.js.map +1 -1
- package/cjs/form/combobox/FilteredOptions/FilteredOptions.js +53 -3
- package/cjs/form/combobox/FilteredOptions/FilteredOptions.js.map +1 -1
- package/cjs/form/combobox/FilteredOptions/useVirtualFocus.js.map +1 -1
- package/cjs/form/combobox/Input/Input.context.d.ts +2 -2
- package/cjs/form/combobox/Input/InputController.js +15 -14
- package/cjs/form/combobox/Input/InputController.js.map +1 -1
- package/cjs/form/file-upload/useFileUpload.d.ts +1 -1
- package/cjs/form/radio/Radio.js +1 -1
- package/cjs/form/radio/Radio.js.map +1 -1
- package/cjs/form/useFormField.js.map +1 -1
- package/cjs/modal/ModalUtils.d.ts +2 -2
- package/cjs/modal/ModalUtils.js.map +1 -1
- package/cjs/overlays/dismissablelayer/DismissableLayer.d.ts +1 -1
- package/cjs/overlays/floating/Floating.d.ts +11 -0
- package/cjs/overlays/floating/Floating.js +32 -8
- package/cjs/overlays/floating/Floating.js.map +1 -1
- package/cjs/overlays/overlay/hooks/useAnimationsFinished.d.ts +27 -0
- package/cjs/overlays/overlay/hooks/useAnimationsFinished.js +138 -0
- package/cjs/overlays/overlay/hooks/useAnimationsFinished.js.map +1 -0
- package/cjs/overlays/overlay/hooks/useEventCallback.d.ts +6 -0
- package/cjs/overlays/overlay/hooks/useEventCallback.js +89 -0
- package/cjs/overlays/overlay/hooks/useEventCallback.js.map +1 -0
- package/cjs/overlays/overlay/hooks/useLatestRef.d.ts +5 -0
- package/cjs/overlays/overlay/hooks/useLatestRef.js +23 -0
- package/cjs/overlays/overlay/hooks/useLatestRef.js.map +1 -0
- package/cjs/overlays/overlay/hooks/useOpenChangeAnimationComplete.d.ts +31 -0
- package/cjs/overlays/overlay/hooks/useOpenChangeAnimationComplete.js +35 -0
- package/cjs/overlays/overlay/hooks/useOpenChangeAnimationComplete.js.map +1 -0
- package/cjs/overlays/overlay/hooks/useRefWithInit.d.ts +7 -0
- package/cjs/overlays/overlay/hooks/useRefWithInit.js +14 -0
- package/cjs/overlays/overlay/hooks/useRefWithInit.js.map +1 -0
- package/cjs/overlays/overlay/hooks/useTransitionStatus.d.ts +38 -0
- package/cjs/overlays/overlay/hooks/useTransitionStatus.js +118 -0
- package/cjs/overlays/overlay/hooks/useTransitionStatus.js.map +1 -0
- package/cjs/progress-bar/ProgressBar.js +1 -1
- package/cjs/progress-bar/ProgressBar.js.map +1 -1
- package/cjs/read-more/ReadMore.d.ts +2 -9
- package/cjs/read-more/ReadMore.js +1 -8
- package/cjs/read-more/ReadMore.js.map +1 -1
- package/cjs/table/AnimateHeight.js +2 -2
- package/cjs/table/AnimateHeight.js.map +1 -1
- package/cjs/table/ExpandableRow.d.ts +1 -1
- package/cjs/table/ExpandableRow.js +2 -10
- package/cjs/table/ExpandableRow.js.map +1 -1
- package/cjs/table/Row.d.ts +7 -0
- package/cjs/table/Row.js +13 -2
- package/cjs/table/Row.js.map +1 -1
- package/cjs/table/Table.utils.d.ts +9 -0
- package/cjs/table/Table.utils.js +57 -0
- package/cjs/table/Table.utils.js.map +1 -0
- package/cjs/tabs/Tabs.context.d.ts +1 -1
- package/cjs/tabs/parts/tab/useTab.d.ts +1 -1
- package/cjs/tabs/parts/tablist/useScrollButtons.d.ts +1 -1
- package/cjs/tabs/parts/tablist/useScrollButtons.js.map +1 -1
- package/cjs/toggle-group/ToggleGroup.context.d.ts +1 -1
- package/cjs/toggle-group/parts/useToggleItem.d.ts +1 -1
- package/cjs/util/hooks/descendants/useDescendant.d.ts +1 -1
- package/cjs/util/hooks/useMergeRefs.d.ts +3 -3
- package/cjs/util/hooks/useMergeRefs.js +3 -3
- package/cjs/util/hooks/useMergeRefs.js.map +1 -1
- package/cjs/util/renderStoriesForChromatic.d.ts +2 -2
- package/cjs/util/renderStoriesForChromatic.js +2 -2
- package/cjs/util/renderStoriesForChromatic.js.map +1 -1
- package/cjs/util/virtualfocus/Context.d.ts +1 -1
- package/esm/chat/Chat.d.ts +1 -1
- package/esm/chat/Chat.js.map +1 -1
- package/esm/copybutton/CopyButton.js +1 -1
- package/esm/copybutton/CopyButton.js.map +1 -1
- package/esm/form/checkbox/Checkbox.js +1 -1
- package/esm/form/checkbox/Checkbox.js.map +1 -1
- package/esm/form/combobox/Combobox.js +15 -13
- package/esm/form/combobox/Combobox.js.map +1 -1
- package/esm/form/combobox/FilteredOptions/FilteredOptions.js +21 -4
- package/esm/form/combobox/FilteredOptions/FilteredOptions.js.map +1 -1
- package/esm/form/combobox/FilteredOptions/useVirtualFocus.js.map +1 -1
- package/esm/form/combobox/Input/Input.context.d.ts +2 -2
- package/esm/form/combobox/Input/InputController.js +15 -14
- package/esm/form/combobox/Input/InputController.js.map +1 -1
- package/esm/form/file-upload/useFileUpload.d.ts +1 -1
- package/esm/form/radio/Radio.js +1 -1
- package/esm/form/radio/Radio.js.map +1 -1
- package/esm/form/useFormField.js.map +1 -1
- package/esm/modal/ModalUtils.d.ts +2 -2
- package/esm/modal/ModalUtils.js.map +1 -1
- package/esm/overlays/dismissablelayer/DismissableLayer.d.ts +1 -1
- package/esm/overlays/floating/Floating.d.ts +11 -0
- package/esm/overlays/floating/Floating.js +32 -8
- package/esm/overlays/floating/Floating.js.map +1 -1
- package/esm/overlays/overlay/hooks/useAnimationsFinished.d.ts +27 -0
- package/esm/overlays/overlay/hooks/useAnimationsFinished.js +99 -0
- package/esm/overlays/overlay/hooks/useAnimationsFinished.js.map +1 -0
- package/esm/overlays/overlay/hooks/useEventCallback.d.ts +6 -0
- package/esm/overlays/overlay/hooks/useEventCallback.js +53 -0
- package/esm/overlays/overlay/hooks/useEventCallback.js.map +1 -0
- package/esm/overlays/overlay/hooks/useLatestRef.d.ts +5 -0
- package/esm/overlays/overlay/hooks/useLatestRef.js +20 -0
- package/esm/overlays/overlay/hooks/useLatestRef.js.map +1 -0
- package/esm/overlays/overlay/hooks/useOpenChangeAnimationComplete.d.ts +31 -0
- package/esm/overlays/overlay/hooks/useOpenChangeAnimationComplete.js +32 -0
- package/esm/overlays/overlay/hooks/useOpenChangeAnimationComplete.js.map +1 -0
- package/esm/overlays/overlay/hooks/useRefWithInit.d.ts +7 -0
- package/esm/overlays/overlay/hooks/useRefWithInit.js +12 -0
- package/esm/overlays/overlay/hooks/useRefWithInit.js.map +1 -0
- package/esm/overlays/overlay/hooks/useTransitionStatus.d.ts +38 -0
- package/esm/overlays/overlay/hooks/useTransitionStatus.js +113 -0
- package/esm/overlays/overlay/hooks/useTransitionStatus.js.map +1 -0
- package/esm/progress-bar/ProgressBar.js +1 -1
- package/esm/progress-bar/ProgressBar.js.map +1 -1
- package/esm/read-more/ReadMore.d.ts +2 -9
- package/esm/read-more/ReadMore.js +1 -8
- package/esm/read-more/ReadMore.js.map +1 -1
- package/esm/table/AnimateHeight.js +2 -2
- package/esm/table/AnimateHeight.js.map +1 -1
- package/esm/table/ExpandableRow.d.ts +1 -1
- package/esm/table/ExpandableRow.js +2 -10
- package/esm/table/ExpandableRow.js.map +1 -1
- package/esm/table/Row.d.ts +7 -0
- package/esm/table/Row.js +13 -2
- package/esm/table/Row.js.map +1 -1
- package/esm/table/Table.utils.d.ts +9 -0
- package/esm/table/Table.utils.js +55 -0
- package/esm/table/Table.utils.js.map +1 -0
- package/esm/tabs/Tabs.context.d.ts +1 -1
- package/esm/tabs/parts/tab/useTab.d.ts +1 -1
- package/esm/tabs/parts/tablist/useScrollButtons.d.ts +1 -1
- package/esm/tabs/parts/tablist/useScrollButtons.js.map +1 -1
- package/esm/toggle-group/ToggleGroup.context.d.ts +1 -1
- package/esm/toggle-group/parts/useToggleItem.d.ts +1 -1
- package/esm/util/hooks/descendants/useDescendant.d.ts +1 -1
- package/esm/util/hooks/useMergeRefs.d.ts +3 -3
- package/esm/util/hooks/useMergeRefs.js +3 -3
- package/esm/util/hooks/useMergeRefs.js.map +1 -1
- package/esm/util/renderStoriesForChromatic.d.ts +2 -2
- package/esm/util/renderStoriesForChromatic.js +2 -2
- package/esm/util/renderStoriesForChromatic.js.map +1 -1
- package/esm/util/virtualfocus/Context.d.ts +1 -1
- package/package.json +4 -4
- package/src/chat/Chat.tsx +3 -3
- package/src/copybutton/CopyButton.tsx +1 -1
- package/src/form/checkbox/Checkbox.tsx +5 -3
- package/src/form/combobox/Combobox.tsx +44 -41
- package/src/form/combobox/FilteredOptions/FilteredOptions.tsx +29 -4
- package/src/form/combobox/FilteredOptions/useVirtualFocus.ts +1 -0
- package/src/form/combobox/Input/Input.context.tsx +2 -2
- package/src/form/combobox/Input/InputController.tsx +33 -29
- package/src/form/radio/Radio.tsx +5 -3
- package/src/form/useFormField.ts +1 -1
- package/src/modal/ModalUtils.ts +2 -2
- package/src/overlays/action-menu/ActionMenu.tsx +1 -1
- package/src/overlays/floating/Floating.tsx +110 -59
- package/src/overlays/overlay/hooks/useAnimationsFinished.ts +117 -0
- package/src/overlays/overlay/hooks/useEventCallback.ts +73 -0
- package/src/overlays/overlay/hooks/useLatestRef.ts +25 -0
- package/src/overlays/overlay/hooks/useOpenChangeAnimationComplete.ts +66 -0
- package/src/overlays/overlay/hooks/useRefWithInit.ts +25 -0
- package/src/overlays/overlay/hooks/useTransitionStatus.ts +145 -0
- package/src/progress-bar/ProgressBar.tsx +1 -1
- package/src/read-more/ReadMore.tsx +4 -11
- package/src/table/AnimateHeight.tsx +2 -2
- package/src/table/ExpandableRow.tsx +4 -17
- package/src/table/Row.tsx +33 -1
- package/src/table/Table.utils.ts +65 -0
- package/src/tabs/parts/tablist/useScrollButtons.ts +3 -1
- package/src/util/hooks/useMergeRefs.ts +5 -5
- package/src/util/link-anchor/LinkAnchor.tsx +1 -1
- package/src/util/renderStoriesForChromatic.tsx +4 -5
|
@@ -26,11 +26,11 @@ export interface ReadMoreProps
|
|
|
26
26
|
*/
|
|
27
27
|
defaultOpen?: boolean;
|
|
28
28
|
/**
|
|
29
|
-
* Callback for current open-state
|
|
29
|
+
* Callback for current open-state.
|
|
30
30
|
*/
|
|
31
31
|
onOpenChange?: (open: boolean) => void;
|
|
32
32
|
/**
|
|
33
|
-
* Changes
|
|
33
|
+
* Changes font size for content.
|
|
34
34
|
* @default "medium"
|
|
35
35
|
*/
|
|
36
36
|
size?: "large" | "medium" | "small";
|
|
@@ -42,14 +42,7 @@ export interface ReadMoreProps
|
|
|
42
42
|
* @see 🏷️ {@link ReadMoreProps}
|
|
43
43
|
*
|
|
44
44
|
* @example
|
|
45
|
-
* // Default
|
|
46
45
|
* <ReadMore header="Dette regnes som helsemessige begrensninger">
|
|
47
|
-
* Med helsemessige begrensninger mener vi funksjonshemming, sykdom...
|
|
48
|
-
* </ReadMore>
|
|
49
|
-
*
|
|
50
|
-
* @example
|
|
51
|
-
* // Litt mindre versjon
|
|
52
|
-
* <ReadMore size="small" header="Dette regnes som helsemessige begrensninger">
|
|
53
46
|
* Med helsemessige begrensninger mener vi funksjonshemming, sykdom...
|
|
54
47
|
* </ReadMore>
|
|
55
48
|
*/
|
|
@@ -65,7 +58,7 @@ export const ReadMore = forwardRef<HTMLButtonElement, ReadMoreProps>(
|
|
|
65
58
|
size = "medium",
|
|
66
59
|
onOpenChange,
|
|
67
60
|
...rest
|
|
68
|
-
},
|
|
61
|
+
}: ReadMoreProps,
|
|
69
62
|
ref,
|
|
70
63
|
) => {
|
|
71
64
|
const { cn } = useRenameCSS();
|
|
@@ -107,7 +100,7 @@ export const ReadMore = forwardRef<HTMLButtonElement, ReadMoreProps>(
|
|
|
107
100
|
|
|
108
101
|
<BodyLong
|
|
109
102
|
as="div"
|
|
110
|
-
|
|
103
|
+
tabIndex={0}
|
|
111
104
|
className={cn("navds-read-more__content", {
|
|
112
105
|
"navds-read-more__content--closed": !_open,
|
|
113
106
|
})}
|
|
@@ -73,8 +73,8 @@ const AnimateHeight: React.FC<AnimateHeightProps> = ({
|
|
|
73
73
|
const prevHeight = useRef<Height>(height);
|
|
74
74
|
const contentElement = useRef<HTMLDivElement>(null);
|
|
75
75
|
|
|
76
|
-
const animationClassesTimeoutID = useRef<Timeout>();
|
|
77
|
-
const timeoutID = useRef<Timeout>();
|
|
76
|
+
const animationClassesTimeoutID = useRef<Timeout>(undefined);
|
|
77
|
+
const timeoutID = useRef<Timeout>(undefined);
|
|
78
78
|
|
|
79
79
|
const initialHeight = useRef<Height>(height);
|
|
80
80
|
const initialOverflow = useRef<Overflow>("visible");
|
|
@@ -8,8 +8,10 @@ import { useI18n } from "../util/i18n/i18n.hooks";
|
|
|
8
8
|
import AnimateHeight from "./AnimateHeight";
|
|
9
9
|
import DataCell from "./DataCell";
|
|
10
10
|
import Row, { RowProps } from "./Row";
|
|
11
|
+
import { isElementInteractiveTarget } from "./Table.utils";
|
|
11
12
|
|
|
12
|
-
export interface ExpandableRowProps
|
|
13
|
+
export interface ExpandableRowProps
|
|
14
|
+
extends Omit<RowProps, "content" | "onRowClick"> {
|
|
13
15
|
/**
|
|
14
16
|
* Content of the expanded row
|
|
15
17
|
*/
|
|
@@ -96,7 +98,7 @@ export const ExpandableRow: ExpandableRowType = forwardRef(
|
|
|
96
98
|
const handleRowClick = (event: React.MouseEvent<HTMLTableRowElement>) => {
|
|
97
99
|
expandOnRowClick &&
|
|
98
100
|
!expansionDisabled &&
|
|
99
|
-
!
|
|
101
|
+
!isElementInteractiveTarget(event.target as HTMLElement) &&
|
|
100
102
|
expansionHandler(event);
|
|
101
103
|
};
|
|
102
104
|
|
|
@@ -167,19 +169,4 @@ export const ExpandableRow: ExpandableRowType = forwardRef(
|
|
|
167
169
|
},
|
|
168
170
|
);
|
|
169
171
|
|
|
170
|
-
function isInteractiveTarget(elm: HTMLElement) {
|
|
171
|
-
if (elm.nodeName === "TD" || elm.nodeName === "TH" || !elm.parentElement) {
|
|
172
|
-
return false;
|
|
173
|
-
}
|
|
174
|
-
if (
|
|
175
|
-
["BUTTON", "DETAILS", "LABEL", "SELECT", "TEXTAREA", "INPUT", "A"].includes(
|
|
176
|
-
elm.nodeName,
|
|
177
|
-
)
|
|
178
|
-
) {
|
|
179
|
-
return true;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
return isInteractiveTarget(elm.parentElement);
|
|
183
|
-
}
|
|
184
|
-
|
|
185
172
|
export default ExpandableRow;
|
package/src/table/Row.tsx
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import React, { forwardRef } from "react";
|
|
2
2
|
import { useRenameCSS } from "../theme/Theme";
|
|
3
|
+
import { composeEventHandlers } from "../util/composeEventHandlers";
|
|
4
|
+
import { isElementInteractiveTarget } from "./Table.utils";
|
|
3
5
|
|
|
4
6
|
export interface RowProps extends React.HTMLAttributes<HTMLTableRowElement> {
|
|
5
7
|
/**
|
|
@@ -12,6 +14,13 @@ export interface RowProps extends React.HTMLAttributes<HTMLTableRowElement> {
|
|
|
12
14
|
* @default true
|
|
13
15
|
*/
|
|
14
16
|
shadeOnHover?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Click handler for row. This differs from onClick by not being called
|
|
19
|
+
* when clicking on interactive elements within the row (buttons, links, inputs etc).
|
|
20
|
+
*
|
|
21
|
+
* **Warning:** This will not be accessible by keyboard! Provide an alternative way to select the row, e.g. a checkbox or a button.
|
|
22
|
+
*/
|
|
23
|
+
onRowClick?: (event: React.MouseEvent<HTMLTableRowElement>) => void;
|
|
15
24
|
}
|
|
16
25
|
|
|
17
26
|
export type RowType = React.ForwardRefExoticComponent<
|
|
@@ -19,8 +28,29 @@ export type RowType = React.ForwardRefExoticComponent<
|
|
|
19
28
|
>;
|
|
20
29
|
|
|
21
30
|
export const Row: RowType = forwardRef(
|
|
22
|
-
(
|
|
31
|
+
(
|
|
32
|
+
{
|
|
33
|
+
className,
|
|
34
|
+
selected = false,
|
|
35
|
+
shadeOnHover = true,
|
|
36
|
+
onClick,
|
|
37
|
+
onRowClick,
|
|
38
|
+
...rest
|
|
39
|
+
},
|
|
40
|
+
ref,
|
|
41
|
+
) => {
|
|
23
42
|
const { cn } = useRenameCSS();
|
|
43
|
+
|
|
44
|
+
const handleRowClick = (event: React.MouseEvent<HTMLTableRowElement>) => {
|
|
45
|
+
if (!onRowClick) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (isElementInteractiveTarget(event.target as HTMLElement)) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
onRowClick(event);
|
|
52
|
+
};
|
|
53
|
+
|
|
24
54
|
return (
|
|
25
55
|
<tr
|
|
26
56
|
{...rest}
|
|
@@ -29,6 +59,8 @@ export const Row: RowType = forwardRef(
|
|
|
29
59
|
"navds-table__row--selected": selected,
|
|
30
60
|
"navds-table__row--shade-on-hover": shadeOnHover,
|
|
31
61
|
})}
|
|
62
|
+
onClick={composeEventHandlers(onClick, handleRowClick)}
|
|
63
|
+
data-interactive={!!onRowClick}
|
|
32
64
|
/>
|
|
33
65
|
);
|
|
34
66
|
},
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
const INTERACTIVE_TAGS = new Set([
|
|
2
|
+
"BUTTON",
|
|
3
|
+
"A",
|
|
4
|
+
"INPUT",
|
|
5
|
+
"SELECT",
|
|
6
|
+
"TEXTAREA",
|
|
7
|
+
"DETAILS",
|
|
8
|
+
"SUMMARY",
|
|
9
|
+
"LABEL",
|
|
10
|
+
]);
|
|
11
|
+
|
|
12
|
+
const INTERACTIVE_ROLES = new Set([
|
|
13
|
+
"button",
|
|
14
|
+
"link",
|
|
15
|
+
"checkbox",
|
|
16
|
+
"radio",
|
|
17
|
+
"switch",
|
|
18
|
+
"menuitem",
|
|
19
|
+
"option",
|
|
20
|
+
"tab",
|
|
21
|
+
"textbox",
|
|
22
|
+
"combobox",
|
|
23
|
+
"spinbutton",
|
|
24
|
+
"slider",
|
|
25
|
+
]);
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Walks up from the event target until TR/TH (row / header) or root.
|
|
29
|
+
* Returns true if any ancestor is inherently interactive, explicitly focusable,
|
|
30
|
+
* or has an interactive ARIA role.
|
|
31
|
+
* Used to decide whether a row click should be treated as a row selection
|
|
32
|
+
* or ignored because the user interacted with an embedded control.
|
|
33
|
+
*/
|
|
34
|
+
function isElementInteractiveTarget(element: HTMLElement | null) {
|
|
35
|
+
for (
|
|
36
|
+
let node: HTMLElement | null = element;
|
|
37
|
+
node && node.nodeName !== "TR" && node.nodeName !== "TH";
|
|
38
|
+
node = node.parentElement
|
|
39
|
+
) {
|
|
40
|
+
const tag = node.nodeName;
|
|
41
|
+
|
|
42
|
+
/* Native interactive tag */
|
|
43
|
+
if (INTERACTIVE_TAGS.has(tag)) {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/* Explicit interactive role */
|
|
48
|
+
const role = node.getAttribute("role");
|
|
49
|
+
if (role && INTERACTIVE_ROLES.has(role)) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/* Focusable via tabindex (exclude -1) */
|
|
54
|
+
if (node.hasAttribute("tabindex")) {
|
|
55
|
+
const ti = node.getAttribute("tabindex");
|
|
56
|
+
if (ti !== "-1") {
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export { isElementInteractiveTarget };
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { useEffect, useMemo, useState } from "react";
|
|
2
2
|
import { debounce } from "../../../util";
|
|
3
3
|
|
|
4
|
-
export function useScrollButtons(
|
|
4
|
+
export function useScrollButtons(
|
|
5
|
+
listRef: React.RefObject<HTMLDivElement | null>,
|
|
6
|
+
) {
|
|
5
7
|
const [displayScroll, setDisplayScroll] = useState({
|
|
6
8
|
start: false,
|
|
7
9
|
end: false,
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
/* https://github.com/radix-ui/primitives/blob/main/packages/react/compose-refs/src/composeRefs.tsx */
|
|
2
2
|
import React from "react";
|
|
3
3
|
|
|
4
|
-
type PossibleRef<T> = React.
|
|
4
|
+
type PossibleRef<T> = React.Ref<T> | undefined;
|
|
5
5
|
|
|
6
6
|
// https://github.com/gregberge/react-merge-refs
|
|
7
7
|
/**
|
|
8
8
|
* Use `useMergeRefs`
|
|
9
9
|
* @internal
|
|
10
10
|
*/
|
|
11
|
-
export function mergeRefs<T>(refs: PossibleRef<T>[])
|
|
12
|
-
return (
|
|
11
|
+
export function mergeRefs<T>(refs: PossibleRef<T>[]) {
|
|
12
|
+
return (instance: T | null) => {
|
|
13
13
|
refs.forEach((ref) => {
|
|
14
14
|
if (typeof ref === "function") {
|
|
15
|
-
ref(
|
|
15
|
+
ref(instance);
|
|
16
16
|
} else if (ref !== null && ref !== undefined) {
|
|
17
|
-
(ref as React.MutableRefObject<T | null>).current =
|
|
17
|
+
(ref as React.MutableRefObject<T | null>).current = instance;
|
|
18
18
|
}
|
|
19
19
|
});
|
|
20
20
|
};
|
|
@@ -14,7 +14,7 @@ import { useMergeRefs } from "../hooks/useMergeRefs";
|
|
|
14
14
|
import { AsChildProps } from "../types";
|
|
15
15
|
|
|
16
16
|
type LinkAnchorOverlayContextProps = {
|
|
17
|
-
anchorRef: React.RefObject<HTMLAnchorElement>;
|
|
17
|
+
anchorRef: React.RefObject<HTMLAnchorElement | null>;
|
|
18
18
|
};
|
|
19
19
|
|
|
20
20
|
const [LinkAnchorContextProvider, useLinkAnchorContext] =
|
|
@@ -1,21 +1,20 @@
|
|
|
1
|
-
import { Args, StoryObj } from "@storybook/react";
|
|
1
|
+
import { Args, StoryObj } from "@storybook/react-vite";
|
|
2
2
|
import React from "react";
|
|
3
3
|
import { Renderer, StoryContext } from "storybook/internal/types";
|
|
4
4
|
|
|
5
5
|
export function renderStoriesForChromatic(
|
|
6
6
|
stories: Record<
|
|
7
7
|
string,
|
|
8
|
-
|
|
9
|
-
| React.FunctionComponent<void>
|
|
8
|
+
{ render?: (...args: any[]) => React.ReactNode } | React.FunctionComponent
|
|
10
9
|
>,
|
|
11
10
|
): StoryObj {
|
|
12
11
|
return {
|
|
13
12
|
render: (...args: [Args, StoryContext<Renderer, Args>]) => (
|
|
14
13
|
<>
|
|
15
|
-
{Object.entries(stories).map(([storyName,
|
|
14
|
+
{Object.entries(stories).map(([storyName, Story]) => (
|
|
16
15
|
<div key={storyName}>
|
|
17
16
|
<h2 className="storyheading">{storyName}</h2>
|
|
18
|
-
{typeof
|
|
17
|
+
{typeof Story === "function" ? <Story /> : Story.render?.(...args)}
|
|
19
18
|
</div>
|
|
20
19
|
))}
|
|
21
20
|
</>
|