@digdir/designsystemet-react 1.0.2 → 1.0.4
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/dist/cjs/components/Breadcrumbs/BreadcrumbsList.js +2 -2
- package/dist/cjs/components/Card/Card.js +2 -2
- package/dist/cjs/components/Combobox/Combobox.js +1 -1
- package/dist/cjs/components/Details/Details.js +2 -2
- package/dist/cjs/components/Dialog/Dialog.js +2 -2
- package/dist/cjs/components/Dropdown/DropdownButton.js +1 -1
- package/dist/cjs/components/Field/Field.js +2 -2
- package/dist/cjs/components/Field/fieldObserver.js +0 -4
- package/dist/cjs/components/MultiSuggestion/MultiSuggestion.js +2 -2
- package/dist/cjs/components/MultiSuggestion/MultiSuggestionInput.js +2 -2
- package/dist/cjs/components/Popover/Popover.js +2 -2
- package/dist/cjs/components/Skeleton/Skeleton.js +2 -2
- package/dist/cjs/components/Spinner/Spinner.js +2 -2
- package/dist/cjs/components/Suggestion/Suggestion.js +0 -1
- package/dist/cjs/components/Suggestion/SuggestionInput.js +2 -2
- package/dist/cjs/components/Tabs/TabsPanel.js +2 -2
- package/dist/cjs/components/Tooltip/Tooltip.js +6 -6
- package/dist/cjs/index.js +6 -6
- package/dist/cjs/utilities/RovingFocus/RovingFocusItem.js +2 -2
- package/dist/cjs/utilities/RovingFocus/RovingFocusRoot.js +2 -2
- package/dist/cjs/utilities/hooks/useMergeRefs/useMergeRefs.js +57 -0
- package/dist/esm/components/Breadcrumbs/BreadcrumbsList.js +1 -1
- package/dist/esm/components/Card/Card.js +1 -1
- package/dist/esm/components/Combobox/Combobox.js +1 -1
- package/dist/esm/components/Details/Details.js +1 -1
- package/dist/esm/components/Dialog/Dialog.js +1 -1
- package/dist/esm/components/Dropdown/DropdownButton.js +1 -1
- package/dist/esm/components/Field/Field.js +1 -1
- package/dist/esm/components/Field/fieldObserver.js +0 -4
- package/dist/esm/components/MultiSuggestion/MultiSuggestion.js +1 -1
- package/dist/esm/components/MultiSuggestion/MultiSuggestionInput.js +1 -1
- package/dist/esm/components/Popover/Popover.js +1 -1
- package/dist/esm/components/Skeleton/Skeleton.js +1 -1
- package/dist/esm/components/Spinner/Spinner.js +1 -1
- package/dist/esm/components/Suggestion/Suggestion.js +0 -1
- package/dist/esm/components/Suggestion/SuggestionInput.js +1 -1
- package/dist/esm/components/Tabs/TabsPanel.js +1 -1
- package/dist/esm/components/Tooltip/Tooltip.js +5 -5
- package/dist/esm/index.js +3 -3
- package/dist/esm/utilities/RovingFocus/RovingFocusItem.js +1 -1
- package/dist/esm/utilities/RovingFocus/RovingFocusRoot.js +1 -1
- package/dist/esm/utilities/hooks/useMergeRefs/useMergeRefs.js +55 -0
- package/dist/types/components/Breadcrumbs/BreadcrumbsList.d.ts.map +1 -1
- package/dist/types/components/Card/Card.d.ts.map +1 -1
- package/dist/types/components/Combobox/useFloatingCombobox.d.ts.map +1 -1
- package/dist/types/components/Details/Details.d.ts.map +1 -1
- package/dist/types/components/Dialog/Dialog.d.ts.map +1 -1
- package/dist/types/components/Dropdown/Dropdown.d.ts +1 -1
- package/dist/types/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/types/components/ErrorSummary/index.d.ts.map +1 -1
- package/dist/types/components/Field/Field.d.ts.map +1 -1
- package/dist/types/components/Field/fieldObserver.d.ts.map +1 -1
- package/dist/types/components/MultiSuggestion/MultiSuggestion.d.ts.map +1 -1
- package/dist/types/components/Popover/Popover.d.ts +1 -1
- package/dist/types/components/Popover/Popover.d.ts.map +1 -1
- package/dist/types/components/Popover/index.d.ts +1 -1
- package/dist/types/components/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/types/components/Spinner/Spinner.d.ts.map +1 -1
- package/dist/types/components/Suggestion/Suggestion.d.ts.map +1 -1
- package/dist/types/components/Tooltip/Tooltip.d.ts +11 -1
- package/dist/types/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/types/utilities/RovingFocus/RovingFocusItem.d.ts.map +1 -1
- package/dist/types/utilities/RovingFocus/RovingFocusRoot.d.ts.map +1 -1
- package/dist/types/utilities/RovingFocus/useRovingFocus.d.ts +4 -0
- package/dist/types/utilities/RovingFocus/useRovingFocus.d.ts.map +1 -1
- package/dist/types/utilities/hooks/index.d.ts +1 -0
- package/dist/types/utilities/hooks/index.d.ts.map +1 -1
- package/dist/types/utilities/hooks/useMergeRefs/useMergeRefs.d.ts +6 -0
- package/dist/types/utilities/hooks/useMergeRefs/useMergeRefs.d.ts.map +1 -0
- package/dist/types/utilities/index.d.ts +2 -1
- package/dist/types/utilities/index.d.ts.map +1 -1
- package/package.json +18 -18
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
-
var react$1 = require('@floating-ui/react');
|
|
6
5
|
var react = require('react');
|
|
6
|
+
var useMergeRefs = require('../../utilities/hooks/useMergeRefs/useMergeRefs.js');
|
|
7
7
|
|
|
8
8
|
const BreadcrumbsList = react.forwardRef(function BreadcrumbsList(rest, ref) {
|
|
9
9
|
const innerRef = react.useRef(null);
|
|
10
|
-
const mergedRefs =
|
|
10
|
+
const mergedRefs = useMergeRefs.useMergeRefs([innerRef, ref]);
|
|
11
11
|
// Set aria-current on last link
|
|
12
12
|
react.useEffect(() => {
|
|
13
13
|
const links = innerRef.current?.querySelectorAll(':scope > * > *') || [];
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
-
var react$1 = require('@floating-ui/react');
|
|
6
5
|
var reactSlot = require('@radix-ui/react-slot');
|
|
7
6
|
var cl = require('clsx/lite');
|
|
8
7
|
var react = require('react');
|
|
8
|
+
var useMergeRefs = require('../../utilities/hooks/useMergeRefs/useMergeRefs.js');
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Card component to present content in a structured way.
|
|
@@ -20,7 +20,7 @@ var react = require('react');
|
|
|
20
20
|
const Card = react.forwardRef(function Card({ asChild = false, variant = 'default', className, ...rest }, ref) {
|
|
21
21
|
const Component = asChild ? reactSlot.Slot : 'div';
|
|
22
22
|
const cardRef = react.useRef(null);
|
|
23
|
-
const mergedRefs =
|
|
23
|
+
const mergedRefs = useMergeRefs.useMergeRefs([cardRef, ref]);
|
|
24
24
|
// Forward click on card to heading links for better accessibility
|
|
25
25
|
// https://adrianroselli.com/2020/02/block-links-cards-clickable-regions-etc.html
|
|
26
26
|
react.useEffect(() => {
|
|
@@ -18,8 +18,8 @@ var useCombobox = require('./useCombobox.js');
|
|
|
18
18
|
var useComboboxKeyboard = require('./useComboboxKeyboard.js');
|
|
19
19
|
var useFloatingCombobox = require('./useFloatingCombobox.js');
|
|
20
20
|
var utilities = require('./utilities.js');
|
|
21
|
-
var Spinner = require('../Spinner/Spinner.js');
|
|
22
21
|
var useDebounceCallback = require('../../utilities/hooks/useDebounceCallback/useDebounceCallback.js');
|
|
22
|
+
var Spinner = require('../Spinner/Spinner.js');
|
|
23
23
|
var omit = require('../../utilities/omit/omit.js');
|
|
24
24
|
|
|
25
25
|
/**
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
-
var react$1 = require('@floating-ui/react');
|
|
6
5
|
var cl = require('clsx/lite');
|
|
7
6
|
var react = require('react');
|
|
8
7
|
require('@u-elements/u-details');
|
|
8
|
+
var useMergeRefs = require('../../utilities/hooks/useMergeRefs/useMergeRefs.js');
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Details component, contains `Details.Summary` and `Details.Content` components.
|
|
@@ -19,7 +19,7 @@ require('@u-elements/u-details');
|
|
|
19
19
|
const Details = react.forwardRef(function Details({ className, open, defaultOpen = false, variant = 'default', onToggle, ...rest }, ref) {
|
|
20
20
|
const detailsRef = react.useRef(null);
|
|
21
21
|
const initialOpen = react.useRef(defaultOpen); // Allow rendering defaultOpen on server, but only render once on client
|
|
22
|
-
const mergedRefs =
|
|
22
|
+
const mergedRefs = useMergeRefs.useMergeRefs([detailsRef, ref]);
|
|
23
23
|
const onToggleRef = react.useRef(onToggle); // Using ref to enable access inside useEffect without re-binding event listeners
|
|
24
24
|
const openRef = react.useRef(open);
|
|
25
25
|
onToggleRef.current = onToggle;
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
-
var react$1 = require('@floating-ui/react');
|
|
6
5
|
var reactSlot = require('@radix-ui/react-slot');
|
|
7
6
|
var cl = require('clsx/lite');
|
|
8
7
|
var react = require('react');
|
|
9
8
|
var DialogTriggerContext = require('./DialogTriggerContext.js');
|
|
9
|
+
var useMergeRefs = require('../../utilities/hooks/useMergeRefs/useMergeRefs.js');
|
|
10
10
|
var Button = require('../Button/Button.js');
|
|
11
11
|
|
|
12
12
|
/**
|
|
@@ -36,7 +36,7 @@ const Dialog = react.forwardRef(function Dialog({ asChild, children, className,
|
|
|
36
36
|
const contextRef = react.useContext(DialogTriggerContext.Context);
|
|
37
37
|
const dialogRef = react.useRef(null); // This local ref is used to make sure the dialog works without a DialogTriggerContext
|
|
38
38
|
const Component = asChild ? reactSlot.Slot : 'dialog';
|
|
39
|
-
const mergedRefs =
|
|
39
|
+
const mergedRefs = useMergeRefs.useMergeRefs([contextRef, ref, dialogRef]);
|
|
40
40
|
const showProp = modal ? 'showModal' : 'show';
|
|
41
41
|
react.useEffect(() => dialogRef.current?.[open ? showProp : 'close'](), [open]); // Toggle open based on prop
|
|
42
42
|
react.useEffect(() => {
|
|
@@ -5,7 +5,7 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
5
5
|
var react = require('react');
|
|
6
6
|
var Button = require('../Button/Button.js');
|
|
7
7
|
|
|
8
|
-
const DropdownButton = react.forwardRef(function DropdownButton({
|
|
8
|
+
const DropdownButton = react.forwardRef(function DropdownButton({ ...rest }, ref) {
|
|
9
9
|
return jsxRuntime.jsx(Button.Button, { ref: ref, variant: 'tertiary', ...rest });
|
|
10
10
|
});
|
|
11
11
|
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
-
var react$1 = require('@floating-ui/react');
|
|
6
5
|
var cl = require('clsx/lite');
|
|
7
6
|
var react = require('react');
|
|
8
7
|
var fieldObserver = require('./fieldObserver.js');
|
|
8
|
+
var useMergeRefs = require('../../utilities/hooks/useMergeRefs/useMergeRefs.js');
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Field component, used to wrap a form field.
|
|
@@ -20,7 +20,7 @@ var fieldObserver = require('./fieldObserver.js');
|
|
|
20
20
|
*/
|
|
21
21
|
const Field = react.forwardRef(function Field({ className, position, ...rest }, ref) {
|
|
22
22
|
const fieldRef = react.useRef(null);
|
|
23
|
-
const mergedRefs =
|
|
23
|
+
const mergedRefs = useMergeRefs.useMergeRefs([fieldRef, ref]);
|
|
24
24
|
react.useEffect(() => fieldObserver.fieldObserver(fieldRef.current), []);
|
|
25
25
|
return (jsxRuntime.jsx("div", { className: cl('ds-field', className), "data-position": position, ref: mergedRefs, ...rest }));
|
|
26
26
|
});
|
|
@@ -38,7 +38,6 @@ function fieldObserver(fieldElement) {
|
|
|
38
38
|
if (input === el)
|
|
39
39
|
input = null;
|
|
40
40
|
if (elements.has(el)) {
|
|
41
|
-
setAttr(el, 'aria-disabled', null); // Reset disabled state
|
|
42
41
|
setAttr(el, isLabel(el) ? 'for' : 'id', elements.get(el));
|
|
43
42
|
elements.delete(el);
|
|
44
43
|
}
|
|
@@ -46,12 +45,9 @@ function fieldObserver(fieldElement) {
|
|
|
46
45
|
// Connect elements
|
|
47
46
|
const describedbyIds = [describedby]; // Keep original aria-describedby
|
|
48
47
|
const inputId = input?.id || uuid;
|
|
49
|
-
const isDisabled = input?.hasAttribute('disabled') ||
|
|
50
|
-
input?.getAttribute('aria-disabled') === 'true';
|
|
51
48
|
for (const [el, value] of elements) {
|
|
52
49
|
const descriptionType = el.getAttribute('data-field');
|
|
53
50
|
const id = descriptionType ? `${inputId}:${descriptionType}` : inputId;
|
|
54
|
-
setAttr(el, 'aria-disabled', isDisabled ? 'true' : null); // Forward inputs disabled state to related elements to make axe tests happy
|
|
55
51
|
if (!value)
|
|
56
52
|
setAttr(el, isLabel(el) ? 'for' : 'id', id); // Ensure we have a value
|
|
57
53
|
if (descriptionType === 'validation')
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
5
|
var react = require('react');
|
|
6
6
|
require('@u-elements/u-tags');
|
|
7
|
-
var react$1 = require('@floating-ui/react');
|
|
8
7
|
var uDatalist = require('@u-elements/u-datalist');
|
|
9
8
|
var cl = require('clsx/lite');
|
|
9
|
+
var useMergeRefs = require('../../utilities/hooks/useMergeRefs/useMergeRefs.js');
|
|
10
10
|
|
|
11
11
|
const MultiSuggestionContext = react.createContext({});
|
|
12
12
|
const MultiSuggestion = react.forwardRef(function MultiSuggestion({ value, defaultValue, onValueChange, name, filter = true, allowCreate = false, className, ...rest }, ref) {
|
|
@@ -14,7 +14,7 @@ const MultiSuggestion = react.forwardRef(function MultiSuggestion({ value, defau
|
|
|
14
14
|
const [selectedItems, setSelectedItems] = react.useState({});
|
|
15
15
|
const inputRef = react.useRef(null);
|
|
16
16
|
const uTagsRef = react.useRef(null);
|
|
17
|
-
const mergedRefs =
|
|
17
|
+
const mergedRefs = useMergeRefs.useMergeRefs([ref, uTagsRef]);
|
|
18
18
|
const isControlled = Boolean(value);
|
|
19
19
|
const [controlledDirty, setControlledDirty] = react.useState(false);
|
|
20
20
|
/**
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
-
var react$1 = require('@floating-ui/react');
|
|
6
5
|
var uDatalist = require('@u-elements/u-datalist');
|
|
7
6
|
var react = require('react');
|
|
8
7
|
var MultiSuggestion = require('./MultiSuggestion.js');
|
|
8
|
+
var useMergeRefs = require('../../utilities/hooks/useMergeRefs/useMergeRefs.js');
|
|
9
9
|
var Input = require('../Input/Input.js');
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -21,7 +21,7 @@ var Input = require('../Input/Input.js');
|
|
|
21
21
|
*/
|
|
22
22
|
const MultiSuggestionInput = react.forwardRef(function MultiSuggestionList({ value, onInput, ...rest }, ref) {
|
|
23
23
|
const { listId, inputRef, handleFilter } = react.useContext(MultiSuggestion.MultiSuggestionContext);
|
|
24
|
-
const mergedRefs =
|
|
24
|
+
const mergedRefs = useMergeRefs.useMergeRefs([inputRef, ref]);
|
|
25
25
|
// Update also if controlled value
|
|
26
26
|
react.useEffect(() => {
|
|
27
27
|
handleFilter?.(inputRef?.current);
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
5
|
var dom = require('@floating-ui/dom');
|
|
6
|
-
var react$1 = require('@floating-ui/react');
|
|
7
6
|
var reactSlot = require('@radix-ui/react-slot');
|
|
8
7
|
var cl = require('clsx/lite');
|
|
9
8
|
var react = require('react');
|
|
10
9
|
var PopoverTriggerContext = require('./PopoverTriggerContext.js');
|
|
10
|
+
var useMergeRefs = require('../../utilities/hooks/useMergeRefs/useMergeRefs.js');
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* Popover component, used to display content in a popover over an element.
|
|
@@ -29,7 +29,7 @@ var PopoverTriggerContext = require('./PopoverTriggerContext.js');
|
|
|
29
29
|
const Popover = react.forwardRef(function Popover({ id, className, onClose, onOpen, open, variant = 'default', placement = 'top', autoPlacement = true, asChild = false, ...rest }, ref) {
|
|
30
30
|
const Component = asChild ? reactSlot.Slot : 'div';
|
|
31
31
|
const popoverRef = react.useRef(null);
|
|
32
|
-
const mergedRefs =
|
|
32
|
+
const mergedRefs = useMergeRefs.useMergeRefs([popoverRef, ref]);
|
|
33
33
|
const { popoverId, setPopoverId } = react.useContext(PopoverTriggerContext.Context);
|
|
34
34
|
const [internalOpen, setInternalOpen] = react.useState(false);
|
|
35
35
|
const controlledOpen = open ?? internalOpen;
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
-
var react$1 = require('@floating-ui/react');
|
|
6
5
|
var reactSlot = require('@radix-ui/react-slot');
|
|
7
6
|
var cl = require('clsx/lite');
|
|
8
7
|
var react = require('react');
|
|
9
8
|
var useSynchronizedAnimation = require('../../utilities/hooks/useSynchronizedAnimation/useSynchronizedAnimation.js');
|
|
9
|
+
var useMergeRefs = require('../../utilities/hooks/useMergeRefs/useMergeRefs.js');
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Skeleton is used to represent a draft of page while the content loads.
|
|
@@ -20,7 +20,7 @@ const Skeleton = react.forwardRef(function Skeleton({ asChild, className, height
|
|
|
20
20
|
const Component = asChild ? reactSlot.Slot : 'span';
|
|
21
21
|
const isText = variant === 'text';
|
|
22
22
|
const animationRef = useSynchronizedAnimation.useSynchronizedAnimation('ds-skeleton-opacity-fade');
|
|
23
|
-
const mergedRefs =
|
|
23
|
+
const mergedRefs = useMergeRefs.useMergeRefs([animationRef, ref]);
|
|
24
24
|
return (jsxRuntime.jsx(Component, { "aria-hidden": 'true', className: cl('ds-skeleton', className), "data-text": isText ? '-'.repeat(Number(width) || 1) : undefined, "data-variant": variant, ref: mergedRefs, style: isText ? style : { width, height, ...style }, ...rest }));
|
|
25
25
|
});
|
|
26
26
|
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
-
var react$1 = require('@floating-ui/react');
|
|
6
5
|
var cl = require('clsx/lite');
|
|
7
6
|
var react = require('react');
|
|
8
7
|
var useSynchronizedAnimation = require('../../utilities/hooks/useSynchronizedAnimation/useSynchronizedAnimation.js');
|
|
8
|
+
var useMergeRefs = require('../../utilities/hooks/useMergeRefs/useMergeRefs.js');
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Spinner component used for indicating busy or indeterminate loading.
|
|
@@ -16,7 +16,7 @@ var useSynchronizedAnimation = require('../../utilities/hooks/useSynchronizedAni
|
|
|
16
16
|
const Spinner = react.forwardRef(function Spinner({ 'aria-label': ariaLabel, className, ...rest }, ref) {
|
|
17
17
|
const svgRef = useSynchronizedAnimation.useSynchronizedAnimation('ds-spinner-rotate-animation');
|
|
18
18
|
const strokeRef = useSynchronizedAnimation.useSynchronizedAnimation('ds-spinner-stroke-animation');
|
|
19
|
-
const mergedRefs =
|
|
19
|
+
const mergedRefs = useMergeRefs.useMergeRefs([svgRef, ref]);
|
|
20
20
|
return (jsxRuntime.jsxs("svg", { "aria-label": ariaLabel, className: cl('ds-spinner', className), ref: mergedRefs, role: 'img', viewBox: '0 0 50 50', ...rest, children: [jsxRuntime.jsx("circle", { className: cl('ds-spinner__background'), cx: '25', cy: '25', r: '20', fill: 'none', strokeWidth: '5' }), jsxRuntime.jsx("circle", { className: cl(`ds-spinner__circle`), cx: '25', cy: '25', r: '20', fill: 'none', strokeWidth: '5', ref: strokeRef })] }));
|
|
21
21
|
});
|
|
22
22
|
|
|
@@ -31,7 +31,6 @@ const Suggestion = react.forwardRef(function Suggestion({ className, filter = tr
|
|
|
31
31
|
// Let <datalist> handle filtering if filter is true
|
|
32
32
|
if (filter === true || !list)
|
|
33
33
|
return;
|
|
34
|
-
console.log(list);
|
|
35
34
|
// Handle custom filter
|
|
36
35
|
if (filter !== false) {
|
|
37
36
|
let index = 0;
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
-
var react$1 = require('@floating-ui/react');
|
|
6
5
|
var uDatalist = require('@u-elements/u-datalist');
|
|
7
6
|
var react = require('react');
|
|
8
7
|
var Suggestion = require('./Suggestion.js');
|
|
8
|
+
var useMergeRefs = require('../../utilities/hooks/useMergeRefs/useMergeRefs.js');
|
|
9
9
|
var Input = require('../Input/Input.js');
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -21,7 +21,7 @@ var Input = require('../Input/Input.js');
|
|
|
21
21
|
*/
|
|
22
22
|
const SuggestionInput = react.forwardRef(function SuggestionList({ value, onInput, ...rest }, ref) {
|
|
23
23
|
const { listId, inputRef, handleFilter } = react.useContext(Suggestion.SuggestionContext);
|
|
24
|
-
const mergedRefs =
|
|
24
|
+
const mergedRefs = useMergeRefs.useMergeRefs([inputRef, ref]);
|
|
25
25
|
const updateSelected = react.useCallback(() => {
|
|
26
26
|
const { list, value } = inputRef?.current || {};
|
|
27
27
|
for (const option of list?.options || []) {
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
5
|
var react = require('react');
|
|
6
|
-
var react$1 = require('@floating-ui/react');
|
|
7
6
|
var Tabs = require('./Tabs.js');
|
|
7
|
+
var useMergeRefs = require('../../utilities/hooks/useMergeRefs/useMergeRefs.js');
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* A single content item in a Tabs component.
|
|
@@ -17,7 +17,7 @@ const TabsPanel = react.forwardRef(function TabsPanel({ children, value, ...rest
|
|
|
17
17
|
const active = value === tabsValue;
|
|
18
18
|
const [hasTabbableElement, setHasTabbableElement] = react.useState(false);
|
|
19
19
|
const internalRef = react.useRef(null);
|
|
20
|
-
const mergedRef =
|
|
20
|
+
const mergedRef = useMergeRefs.useMergeRefs([ref, internalRef]);
|
|
21
21
|
/* Check if the panel has any tabbable elements */
|
|
22
22
|
react.useEffect(() => {
|
|
23
23
|
if (!internalRef.current)
|
|
@@ -6,7 +6,7 @@ var dom = require('@floating-ui/dom');
|
|
|
6
6
|
var reactSlot = require('@radix-ui/react-slot');
|
|
7
7
|
var cl = require('clsx/lite');
|
|
8
8
|
var react = require('react');
|
|
9
|
-
var
|
|
9
|
+
var useMergeRefs = require('../../utilities/hooks/useMergeRefs/useMergeRefs.js');
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* Tooltip component that displays a small piece of information when hovering or focusing on an element.
|
|
@@ -21,12 +21,12 @@ var react$1 = require('@floating-ui/react');
|
|
|
21
21
|
* Hover me
|
|
22
22
|
* </Tooltip>
|
|
23
23
|
*/
|
|
24
|
-
const Tooltip = react.forwardRef(function Tooltip({ id, children, content, placement = 'top', open, className, ...rest }, ref) {
|
|
24
|
+
const Tooltip = react.forwardRef(function Tooltip({ id, children, content, placement = 'top', autoPlacement = true, open, className, ...rest }, ref) {
|
|
25
25
|
const randomTooltipId = react.useId();
|
|
26
26
|
const [internalOpen, setInternalOpen] = react.useState(false);
|
|
27
27
|
const triggerRef = react.useRef(null);
|
|
28
28
|
const tooltipRef = react.useRef(null);
|
|
29
|
-
const mergedRefs =
|
|
29
|
+
const mergedRefs = useMergeRefs.useMergeRefs([tooltipRef, ref]);
|
|
30
30
|
const controlledOpen = open ?? internalOpen;
|
|
31
31
|
const setOpen = () => {
|
|
32
32
|
setInternalOpen(true);
|
|
@@ -52,9 +52,9 @@ const Tooltip = react.forwardRef(function Tooltip({ id, children, content, place
|
|
|
52
52
|
const styles = getComputedStyle(data.elements.floating, '::before');
|
|
53
53
|
return parseFloat(styles.height);
|
|
54
54
|
}),
|
|
55
|
-
|
|
56
|
-
fallbackAxisSideDirection: 'start',
|
|
57
|
-
|
|
55
|
+
...(autoPlacement
|
|
56
|
+
? [dom.flip({ fallbackAxisSideDirection: 'start' }), dom.shift()]
|
|
57
|
+
: []),
|
|
58
58
|
dom.shift(),
|
|
59
59
|
arrowPseudoElement,
|
|
60
60
|
],
|
package/dist/cjs/index.js
CHANGED
|
@@ -103,14 +103,14 @@ var MultiSuggestionOption = require('./components/MultiSuggestion/MultiSuggestio
|
|
|
103
103
|
var MultiSuggestionChips = require('./components/MultiSuggestion/MultiSuggestionChips.js');
|
|
104
104
|
var MultiSuggestionEmpty = require('./components/MultiSuggestion/MultiSuggestionEmpty.js');
|
|
105
105
|
var MultiSuggestionClear = require('./components/MultiSuggestion/MultiSuggestionClear.js');
|
|
106
|
-
var omit = require('./utilities/omit/omit.js');
|
|
107
106
|
var useCheckboxGroup = require('./utilities/hooks/useCheckboxGroup/useCheckboxGroup.js');
|
|
107
|
+
var useRadioGroup = require('./utilities/hooks/useRadioGroup/useRadioGroup.js');
|
|
108
|
+
var usePagination = require('./utilities/hooks/usePagination/usePagination.js');
|
|
108
109
|
var useDebounceCallback = require('./utilities/hooks/useDebounceCallback/useDebounceCallback.js');
|
|
109
110
|
var useIsomorphicLayoutEffect = require('./utilities/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.js');
|
|
110
111
|
var useMediaQuery = require('./utilities/hooks/useMediaQuery/useMediaQuery.js');
|
|
111
|
-
var useRadioGroup = require('./utilities/hooks/useRadioGroup/useRadioGroup.js');
|
|
112
112
|
var useSynchronizedAnimation = require('./utilities/hooks/useSynchronizedAnimation/useSynchronizedAnimation.js');
|
|
113
|
-
var
|
|
113
|
+
var omit = require('./utilities/omit/omit.js');
|
|
114
114
|
var RovingFocusRoot = require('./utilities/RovingFocus/RovingFocusRoot.js');
|
|
115
115
|
var useRovingFocus = require('./utilities/RovingFocus/useRovingFocus.js');
|
|
116
116
|
var RovingFocusItem = require('./utilities/RovingFocus/RovingFocusItem.js');
|
|
@@ -224,14 +224,14 @@ exports.EXPERIMENTAL_MultiSuggestionOption = MultiSuggestionOption.MultiSuggesti
|
|
|
224
224
|
exports.EXPERIMENTAL_MultiSuggestionChips = MultiSuggestionChips.MultiSuggestionChips;
|
|
225
225
|
exports.EXPERIMENTAL_MultiSuggestionEmpty = MultiSuggestionEmpty.MultiSuggestionEmpty;
|
|
226
226
|
exports.EXPERIMENTAL_MultiSuggestionClear = MultiSuggestionClear.MultiSuggestionClear;
|
|
227
|
-
exports.omit = omit.omit;
|
|
228
227
|
exports.useCheckboxGroup = useCheckboxGroup.useCheckboxGroup;
|
|
228
|
+
exports.useRadioGroup = useRadioGroup.useRadioGroup;
|
|
229
|
+
exports.usePagination = usePagination.usePagination;
|
|
229
230
|
exports.useDebounceCallback = useDebounceCallback.useDebounceCallback;
|
|
230
231
|
exports.useIsomorphicLayoutEffect = useIsomorphicLayoutEffect.useIsomorphicLayoutEffect;
|
|
231
232
|
exports.useMediaQuery = useMediaQuery.useMediaQuery;
|
|
232
|
-
exports.useRadioGroup = useRadioGroup.useRadioGroup;
|
|
233
233
|
exports.useSynchronizedAnimation = useSynchronizedAnimation.useSynchronizedAnimation;
|
|
234
|
-
exports.
|
|
234
|
+
exports.omit = omit.omit;
|
|
235
235
|
exports.RovingFocusRoot = RovingFocusRoot.RovingFocusRoot;
|
|
236
236
|
exports.useRovingFocus = useRovingFocus.useRovingFocus;
|
|
237
237
|
exports.RovingFocusItem = RovingFocusItem.RovingFocusItem;
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
-
var react$1 = require('@floating-ui/react');
|
|
6
5
|
var reactSlot = require('@radix-ui/react-slot');
|
|
7
6
|
var react = require('react');
|
|
8
7
|
var useRovingFocus = require('./useRovingFocus.js');
|
|
8
|
+
var useMergeRefs = require('../hooks/useMergeRefs/useMergeRefs.js');
|
|
9
9
|
|
|
10
10
|
/** Get the next focusable RovingFocusItem */
|
|
11
11
|
function getNextFocusableValue(items, value) {
|
|
@@ -63,7 +63,7 @@ const RovingFocusItem = react.forwardRef(({ value, asChild, ...rest }, ref) => {
|
|
|
63
63
|
}
|
|
64
64
|
},
|
|
65
65
|
});
|
|
66
|
-
const mergedRefs =
|
|
66
|
+
const mergedRefs = useMergeRefs.useMergeRefs([ref, rovingProps.ref]);
|
|
67
67
|
return (jsxRuntime.jsx(Component, { ...rest, ...rovingProps, ref: mergedRefs, children: rest.children }));
|
|
68
68
|
});
|
|
69
69
|
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
-
var react$1 = require('@floating-ui/react');
|
|
6
5
|
var reactSlot = require('@radix-ui/react-slot');
|
|
7
6
|
var react = require('react');
|
|
7
|
+
var useMergeRefs = require('../hooks/useMergeRefs/useMergeRefs.js');
|
|
8
8
|
|
|
9
9
|
const RovingFocusContext = react.createContext({
|
|
10
10
|
elements: { current: new Map() },
|
|
@@ -24,7 +24,7 @@ const RovingFocusRoot = react.forwardRef(({ activeValue, asChild, orientation =
|
|
|
24
24
|
const [isShiftTabbing, setIsShiftTabbing] = react.useState(false);
|
|
25
25
|
const elements = react.useRef(new Map());
|
|
26
26
|
const myRef = react.useRef(null);
|
|
27
|
-
const refs =
|
|
27
|
+
const refs = useMergeRefs.useMergeRefs([ref, myRef]);
|
|
28
28
|
const getOrderedItems = () => {
|
|
29
29
|
if (!myRef.current)
|
|
30
30
|
return [];
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var react = require('react');
|
|
5
|
+
|
|
6
|
+
// https://github.com/floating-ui/floating-ui/blob/master/packages/react/src/hooks/useMergeRefs.ts
|
|
7
|
+
/**
|
|
8
|
+
* Merges an array of refs into a single memoized callback ref or `null`.
|
|
9
|
+
*/
|
|
10
|
+
function useMergeRefs(refs) {
|
|
11
|
+
const cleanupRef = react.useRef(undefined);
|
|
12
|
+
const refEffect = react.useCallback((instance) => {
|
|
13
|
+
const cleanups = refs.map((ref) => {
|
|
14
|
+
if (ref == null) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (typeof ref === 'function') {
|
|
18
|
+
const refCallback = ref;
|
|
19
|
+
// biome-ignore lint/suspicious/noConfusingVoidType: @types-react wants `void` here
|
|
20
|
+
const refCleanup = refCallback(instance);
|
|
21
|
+
return typeof refCleanup === 'function'
|
|
22
|
+
? refCleanup
|
|
23
|
+
: () => {
|
|
24
|
+
refCallback(null);
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
ref.current = instance;
|
|
28
|
+
return () => {
|
|
29
|
+
ref.current = null;
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
return () => {
|
|
33
|
+
for (const refCleanup of cleanups) {
|
|
34
|
+
refCleanup?.();
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
38
|
+
}, refs);
|
|
39
|
+
return react.useMemo(() => {
|
|
40
|
+
if (refs.every((ref) => ref == null)) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
return (value) => {
|
|
44
|
+
if (cleanupRef.current) {
|
|
45
|
+
cleanupRef.current();
|
|
46
|
+
cleanupRef.current = undefined;
|
|
47
|
+
}
|
|
48
|
+
if (value != null) {
|
|
49
|
+
cleanupRef.current =
|
|
50
|
+
refEffect(value);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
54
|
+
}, refs);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
exports.useMergeRefs = useMergeRefs;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { useMergeRefs } from '@floating-ui/react';
|
|
4
3
|
import { forwardRef, useRef, useEffect } from 'react';
|
|
4
|
+
import { useMergeRefs } from '../../utilities/hooks/useMergeRefs/useMergeRefs.js';
|
|
5
5
|
|
|
6
6
|
const BreadcrumbsList = forwardRef(function BreadcrumbsList(rest, ref) {
|
|
7
7
|
const innerRef = useRef(null);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { useMergeRefs } from '@floating-ui/react';
|
|
4
3
|
import { Slot } from '@radix-ui/react-slot';
|
|
5
4
|
import cl from 'clsx/lite';
|
|
6
5
|
import { forwardRef, useRef, useEffect } from 'react';
|
|
6
|
+
import { useMergeRefs } from '../../utilities/hooks/useMergeRefs/useMergeRefs.js';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Card component to present content in a structured way.
|
|
@@ -16,8 +16,8 @@ import { useCombobox } from './useCombobox.js';
|
|
|
16
16
|
import { useComboboxKeyboard } from './useComboboxKeyboard.js';
|
|
17
17
|
import { useFloatingCombobox } from './useFloatingCombobox.js';
|
|
18
18
|
import { prefix, setReactInputValue, removePrefix } from './utilities.js';
|
|
19
|
-
import { Spinner } from '../Spinner/Spinner.js';
|
|
20
19
|
import { useDebounceCallback } from '../../utilities/hooks/useDebounceCallback/useDebounceCallback.js';
|
|
20
|
+
import { Spinner } from '../Spinner/Spinner.js';
|
|
21
21
|
import { omit } from '../../utilities/omit/omit.js';
|
|
22
22
|
|
|
23
23
|
/**
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { useMergeRefs } from '@floating-ui/react';
|
|
4
3
|
import cl from 'clsx/lite';
|
|
5
4
|
import { forwardRef, useRef, useEffect } from 'react';
|
|
6
5
|
import '@u-elements/u-details';
|
|
6
|
+
import { useMergeRefs } from '../../utilities/hooks/useMergeRefs/useMergeRefs.js';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Details component, contains `Details.Summary` and `Details.Content` components.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { useMergeRefs } from '@floating-ui/react';
|
|
4
3
|
import { Slot } from '@radix-ui/react-slot';
|
|
5
4
|
import cl from 'clsx/lite';
|
|
6
5
|
import { forwardRef, useContext, useRef, useEffect } from 'react';
|
|
7
6
|
import { Context } from './DialogTriggerContext.js';
|
|
7
|
+
import { useMergeRefs } from '../../utilities/hooks/useMergeRefs/useMergeRefs.js';
|
|
8
8
|
import { Button } from '../Button/Button.js';
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -3,7 +3,7 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
3
3
|
import { forwardRef } from 'react';
|
|
4
4
|
import { Button } from '../Button/Button.js';
|
|
5
5
|
|
|
6
|
-
const DropdownButton = forwardRef(function DropdownButton({
|
|
6
|
+
const DropdownButton = forwardRef(function DropdownButton({ ...rest }, ref) {
|
|
7
7
|
return jsx(Button, { ref: ref, variant: 'tertiary', ...rest });
|
|
8
8
|
});
|
|
9
9
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { useMergeRefs } from '@floating-ui/react';
|
|
4
3
|
import cl from 'clsx/lite';
|
|
5
4
|
import { forwardRef, useRef, useEffect } from 'react';
|
|
6
5
|
import { fieldObserver } from './fieldObserver.js';
|
|
6
|
+
import { useMergeRefs } from '../../utilities/hooks/useMergeRefs/useMergeRefs.js';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
9
|
* Field component, used to wrap a form field.
|
|
@@ -36,7 +36,6 @@ function fieldObserver(fieldElement) {
|
|
|
36
36
|
if (input === el)
|
|
37
37
|
input = null;
|
|
38
38
|
if (elements.has(el)) {
|
|
39
|
-
setAttr(el, 'aria-disabled', null); // Reset disabled state
|
|
40
39
|
setAttr(el, isLabel(el) ? 'for' : 'id', elements.get(el));
|
|
41
40
|
elements.delete(el);
|
|
42
41
|
}
|
|
@@ -44,12 +43,9 @@ function fieldObserver(fieldElement) {
|
|
|
44
43
|
// Connect elements
|
|
45
44
|
const describedbyIds = [describedby]; // Keep original aria-describedby
|
|
46
45
|
const inputId = input?.id || uuid;
|
|
47
|
-
const isDisabled = input?.hasAttribute('disabled') ||
|
|
48
|
-
input?.getAttribute('aria-disabled') === 'true';
|
|
49
46
|
for (const [el, value] of elements) {
|
|
50
47
|
const descriptionType = el.getAttribute('data-field');
|
|
51
48
|
const id = descriptionType ? `${inputId}:${descriptionType}` : inputId;
|
|
52
|
-
setAttr(el, 'aria-disabled', isDisabled ? 'true' : null); // Forward inputs disabled state to related elements to make axe tests happy
|
|
53
49
|
if (!value)
|
|
54
50
|
setAttr(el, isLabel(el) ? 'for' : 'id', id); // Ensure we have a value
|
|
55
51
|
if (descriptionType === 'validation')
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { forwardRef, createContext, useState, useId, useRef, useEffect, useCallback } from 'react';
|
|
4
4
|
import '@u-elements/u-tags';
|
|
5
|
-
import { useMergeRefs } from '@floating-ui/react';
|
|
6
5
|
import { getDatalistValue, syncDatalistState } from '@u-elements/u-datalist';
|
|
7
6
|
import cl from 'clsx/lite';
|
|
7
|
+
import { useMergeRefs } from '../../utilities/hooks/useMergeRefs/useMergeRefs.js';
|
|
8
8
|
|
|
9
9
|
const MultiSuggestionContext = createContext({});
|
|
10
10
|
const MultiSuggestion = forwardRef(function MultiSuggestion({ value, defaultValue, onValueChange, name, filter = true, allowCreate = false, className, ...rest }, ref) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { useMergeRefs } from '@floating-ui/react';
|
|
4
3
|
import { isDatalistClick } from '@u-elements/u-datalist';
|
|
5
4
|
import { forwardRef, useContext, useEffect } from 'react';
|
|
6
5
|
import { MultiSuggestionContext } from './MultiSuggestion.js';
|
|
6
|
+
import { useMergeRefs } from '../../utilities/hooks/useMergeRefs/useMergeRefs.js';
|
|
7
7
|
import { Input } from '../Input/Input.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
3
|
import { autoUpdate, computePosition, offset, flip, shift } from '@floating-ui/dom';
|
|
4
|
-
import { useMergeRefs } from '@floating-ui/react';
|
|
5
4
|
import { Slot } from '@radix-ui/react-slot';
|
|
6
5
|
import cl from 'clsx/lite';
|
|
7
6
|
import { forwardRef, useRef, useContext, useState, useEffect } from 'react';
|
|
8
7
|
import { Context } from './PopoverTriggerContext.js';
|
|
8
|
+
import { useMergeRefs } from '../../utilities/hooks/useMergeRefs/useMergeRefs.js';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Popover component, used to display content in a popover over an element.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { useMergeRefs } from '@floating-ui/react';
|
|
4
3
|
import { Slot } from '@radix-ui/react-slot';
|
|
5
4
|
import cl from 'clsx/lite';
|
|
6
5
|
import { forwardRef } from 'react';
|
|
7
6
|
import { useSynchronizedAnimation } from '../../utilities/hooks/useSynchronizedAnimation/useSynchronizedAnimation.js';
|
|
7
|
+
import { useMergeRefs } from '../../utilities/hooks/useMergeRefs/useMergeRefs.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Skeleton is used to represent a draft of page while the content loads.
|