@navikt/ds-react 5.15.0 → 5.16.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/_docs.json +145 -1
- package/cjs/form/combobox/Combobox.js +1 -1
- package/cjs/form/combobox/ComboboxProvider.js +2 -1
- package/cjs/form/combobox/ComboboxWrapper.js +1 -1
- package/cjs/form/combobox/FilteredOptions/FilteredOptions.js +59 -41
- package/cjs/form/combobox/FilteredOptions/filtered-options-util.js +3 -1
- package/cjs/form/combobox/FilteredOptions/filteredOptionsContext.js +15 -3
- package/cjs/form/combobox/FilteredOptions/useVirtualFocus.js +52 -32
- package/cjs/form/combobox/Input/Input.js +3 -1
- package/cjs/form/combobox/SelectedOptions/selectedOptionsContext.js +3 -1
- package/cjs/help-text/HelpText.js +1 -1
- package/cjs/util/create-context.js +72 -0
- package/cjs/util/hooks/descendants/descendant.js +117 -0
- package/cjs/util/hooks/descendants/useDescendant.js +108 -0
- package/cjs/util/hooks/descendants/utils.js +53 -0
- package/esm/form/combobox/Combobox.js +1 -1
- package/esm/form/combobox/Combobox.js.map +1 -1
- package/esm/form/combobox/ComboboxProvider.js +2 -1
- package/esm/form/combobox/ComboboxProvider.js.map +1 -1
- package/esm/form/combobox/ComboboxWrapper.js +1 -1
- package/esm/form/combobox/ComboboxWrapper.js.map +1 -1
- package/esm/form/combobox/FilteredOptions/FilteredOptions.js +59 -41
- package/esm/form/combobox/FilteredOptions/FilteredOptions.js.map +1 -1
- package/esm/form/combobox/FilteredOptions/filtered-options-util.d.ts +2 -1
- package/esm/form/combobox/FilteredOptions/filtered-options-util.js +3 -1
- package/esm/form/combobox/FilteredOptions/filtered-options-util.js.map +1 -1
- package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js +15 -3
- package/esm/form/combobox/FilteredOptions/filteredOptionsContext.js.map +1 -1
- package/esm/form/combobox/FilteredOptions/useVirtualFocus.d.ts +2 -4
- package/esm/form/combobox/FilteredOptions/useVirtualFocus.js +52 -32
- package/esm/form/combobox/FilteredOptions/useVirtualFocus.js.map +1 -1
- package/esm/form/combobox/Input/Input.js +3 -1
- package/esm/form/combobox/Input/Input.js.map +1 -1
- package/esm/form/combobox/SelectedOptions/selectedOptionsContext.d.ts +5 -2
- package/esm/form/combobox/SelectedOptions/selectedOptionsContext.js +3 -1
- package/esm/form/combobox/SelectedOptions/selectedOptionsContext.js.map +1 -1
- package/esm/form/combobox/types.d.ts +14 -0
- package/esm/help-text/HelpText.js +1 -1
- package/esm/help-text/HelpText.js.map +1 -1
- package/esm/util/create-context.d.ts +23 -0
- package/esm/util/create-context.js +46 -0
- package/esm/util/create-context.js.map +1 -0
- package/esm/util/hooks/descendants/descendant.d.ts +47 -0
- package/esm/util/hooks/descendants/descendant.js +114 -0
- package/esm/util/hooks/descendants/descendant.js.map +1 -0
- package/esm/util/hooks/descendants/useDescendant.d.ts +14 -0
- package/esm/util/hooks/descendants/useDescendant.js +82 -0
- package/esm/util/hooks/descendants/useDescendant.js.map +1 -0
- package/esm/util/hooks/descendants/utils.d.ts +12 -0
- package/esm/util/hooks/descendants/utils.js +46 -0
- package/esm/util/hooks/descendants/utils.js.map +1 -0
- package/package.json +3 -3
- package/src/form/combobox/Combobox.tsx +1 -1
- package/src/form/combobox/ComboboxProvider.tsx +2 -0
- package/src/form/combobox/ComboboxWrapper.tsx +0 -1
- package/src/form/combobox/FilteredOptions/FilteredOptions.tsx +131 -92
- package/src/form/combobox/FilteredOptions/filtered-options-util.ts +9 -2
- package/src/form/combobox/FilteredOptions/filteredOptionsContext.tsx +22 -3
- package/src/form/combobox/FilteredOptions/useVirtualFocus.ts +63 -45
- package/src/form/combobox/Input/Input.tsx +3 -1
- package/src/form/combobox/SelectedOptions/selectedOptionsContext.tsx +11 -1
- package/src/form/combobox/combobox.stories.tsx +36 -1
- package/src/form/combobox/combobox.test.tsx +1 -3
- package/src/form/combobox/types.ts +15 -0
- package/src/help-text/HelpText.tsx +1 -1
- package/src/util/create-context.tsx +67 -0
- package/src/util/hooks/descendants/descendant.stories.tsx +147 -0
- package/src/util/hooks/descendants/descendant.ts +161 -0
- package/src/util/hooks/descendants/useDescendant.tsx +111 -0
- package/src/util/hooks/descendants/utils.ts +56 -0
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { Dispatch, SetStateAction } from "react";
|
|
2
1
|
export type VirtualFocusType = {
|
|
3
2
|
activeElement: HTMLElement | undefined;
|
|
4
3
|
getElementById: (id: string) => HTMLElement | undefined;
|
|
5
|
-
isFocusOnTheTop: boolean;
|
|
6
|
-
isFocusOnTheBottom: boolean;
|
|
7
|
-
setIndex: Dispatch<SetStateAction<number>>;
|
|
4
|
+
isFocusOnTheTop: () => boolean;
|
|
5
|
+
isFocusOnTheBottom: () => boolean;
|
|
8
6
|
moveFocusUp: () => void;
|
|
9
7
|
moveFocusDown: () => void;
|
|
10
8
|
moveFocusToElement: (id: string) => void;
|
|
@@ -1,40 +1,61 @@
|
|
|
1
1
|
import { useState } from "react";
|
|
2
2
|
const useVirtualFocus = (containerRef) => {
|
|
3
|
-
const [
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
3
|
+
const [activeElement, setActiveElement] = useState(undefined);
|
|
4
|
+
const getListOfAllChildren = () => { var _a; return Array.from((_a = containerRef === null || containerRef === void 0 ? void 0 : containerRef.children) !== null && _a !== void 0 ? _a : []); };
|
|
5
|
+
const getElementsAbleToReceiveFocus = () => getListOfAllChildren().filter((child) => child.getAttribute("data-no-focus") !== "true");
|
|
6
|
+
const getElementById = (id) => getListOfAllChildren().find((element) => element.id === id);
|
|
7
|
+
const isFocusOnTheTop = () => activeElement
|
|
8
|
+
? getElementsAbleToReceiveFocus().indexOf(activeElement) === 0
|
|
9
|
+
: false;
|
|
10
|
+
const isFocusOnTheBottom = () => {
|
|
11
|
+
const elementsAbleToReceiveFocus = getElementsAbleToReceiveFocus();
|
|
12
|
+
return activeElement
|
|
13
|
+
? elementsAbleToReceiveFocus.indexOf(activeElement) ===
|
|
14
|
+
elementsAbleToReceiveFocus.length - 1
|
|
15
|
+
: false;
|
|
16
|
+
};
|
|
17
|
+
const _moveFocusAndScrollTo = (_element) => {
|
|
18
|
+
var _a;
|
|
19
|
+
setActiveElement(_element);
|
|
20
|
+
(_a = _element === null || _element === void 0 ? void 0 : _element.scrollIntoView) === null || _a === void 0 ? void 0 : _a.call(_element, { block: "nearest" });
|
|
21
|
+
};
|
|
22
|
+
const moveFocusUp = () => {
|
|
23
|
+
if (!activeElement) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
const elementsAbleToReceiveFocus = getElementsAbleToReceiveFocus();
|
|
27
|
+
const _currentIndex = elementsAbleToReceiveFocus.indexOf(activeElement);
|
|
28
|
+
const elementAbove = elementsAbleToReceiveFocus[_currentIndex - 1];
|
|
29
|
+
if (_currentIndex === 0) {
|
|
30
|
+
setActiveElement(undefined);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
_moveFocusAndScrollTo(elementAbove);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
const moveFocusDown = () => {
|
|
37
|
+
const elementsAbleToReceiveFocus = getElementsAbleToReceiveFocus();
|
|
38
|
+
if (!activeElement) {
|
|
39
|
+
_moveFocusAndScrollTo(elementsAbleToReceiveFocus[0]);
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const _currentIndex = elementsAbleToReceiveFocus.indexOf(activeElement);
|
|
43
|
+
if (_currentIndex === elementsAbleToReceiveFocus.length - 1) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
_moveFocusAndScrollTo(elementsAbleToReceiveFocus[_currentIndex + 1]);
|
|
21
48
|
}
|
|
22
49
|
};
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
50
|
+
const moveFocusToTop = () => _moveFocusAndScrollTo(undefined);
|
|
51
|
+
const moveFocusToBottom = () => {
|
|
52
|
+
const elementsAbleToReceiveFocus = getElementsAbleToReceiveFocus();
|
|
53
|
+
return _moveFocusAndScrollTo(elementsAbleToReceiveFocus[elementsAbleToReceiveFocus.length - 1]);
|
|
26
54
|
};
|
|
27
|
-
const moveFocusUp = () => _moveFocusAndScrollTo(Math.max(index - 1, -1));
|
|
28
|
-
const moveFocusDown = () => _moveFocusAndScrollTo(Math.min(index + 1, elementsAbleToReceiveFocus.length - 1));
|
|
29
|
-
const moveFocusToTop = () => _moveFocusAndScrollTo(-1);
|
|
30
|
-
const moveFocusToBottom = () => _moveFocusAndScrollTo(elementsAbleToReceiveFocus.length - 1);
|
|
31
55
|
const moveFocusToElement = (id) => {
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
: -1;
|
|
36
|
-
if (indexOfElement >= 0) {
|
|
37
|
-
setIndex(indexOfElement);
|
|
56
|
+
const _element = getElementsAbleToReceiveFocus().find((_focusableElement) => _focusableElement.getAttribute("id") === id);
|
|
57
|
+
if (_element) {
|
|
58
|
+
setActiveElement(_element);
|
|
38
59
|
}
|
|
39
60
|
};
|
|
40
61
|
return {
|
|
@@ -42,7 +63,6 @@ const useVirtualFocus = (containerRef) => {
|
|
|
42
63
|
getElementById,
|
|
43
64
|
isFocusOnTheTop,
|
|
44
65
|
isFocusOnTheBottom,
|
|
45
|
-
setIndex,
|
|
46
66
|
moveFocusUp,
|
|
47
67
|
moveFocusDown,
|
|
48
68
|
moveFocusToElement,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useVirtualFocus.js","sourceRoot":"","sources":["../../../../src/form/combobox/FilteredOptions/useVirtualFocus.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"useVirtualFocus.js","sourceRoot":"","sources":["../../../../src/form/combobox/FilteredOptions/useVirtualFocus.ts"],"names":[],"mappings":"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"}
|
|
@@ -73,9 +73,11 @@ const Input = forwardRef((_a, ref) => {
|
|
|
73
73
|
onEnter(e);
|
|
74
74
|
break;
|
|
75
75
|
case "Home":
|
|
76
|
+
toggleIsListOpen(false);
|
|
76
77
|
virtualFocus.moveFocusToTop();
|
|
77
78
|
break;
|
|
78
79
|
case "End":
|
|
80
|
+
toggleIsListOpen(true);
|
|
79
81
|
virtualFocus.moveFocusToBottom();
|
|
80
82
|
break;
|
|
81
83
|
default:
|
|
@@ -106,7 +108,7 @@ const Input = forwardRef((_a, ref) => {
|
|
|
106
108
|
// Otherwise ignore keystrokes, so it doesn't interfere with text editing
|
|
107
109
|
if (isListOpen && activeDecendantId) {
|
|
108
110
|
e.preventDefault();
|
|
109
|
-
if (virtualFocus.isFocusOnTheTop) {
|
|
111
|
+
if (virtualFocus.isFocusOnTheTop()) {
|
|
110
112
|
toggleIsListOpen(false);
|
|
111
113
|
}
|
|
112
114
|
virtualFocus.moveFocusUp();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Input.js","sourceRoot":"","sources":["../../../../src/form/combobox/Input/Input.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Input.js","sourceRoot":"","sources":["../../../../src/form/combobox/Input/Input.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import { ComboboxProps } from "../types";
|
|
2
|
+
import { ComboboxProps, MaxSelected } from "../types";
|
|
3
3
|
type SelectedOptionsContextType = {
|
|
4
4
|
addSelectedOption: (option: string) => void;
|
|
5
5
|
isMultiSelect?: boolean;
|
|
6
6
|
removeSelectedOption: (option: string) => void;
|
|
7
7
|
prevSelectedOptions?: string[];
|
|
8
8
|
selectedOptions: string[];
|
|
9
|
+
maxSelected?: MaxSelected & {
|
|
10
|
+
isLimitReached: boolean;
|
|
11
|
+
};
|
|
9
12
|
setSelectedOptions: (any: any) => void;
|
|
10
13
|
toggleOption: (option: string, event: React.KeyboardEvent | React.PointerEvent) => void;
|
|
11
14
|
};
|
|
12
15
|
export declare const SelectedOptionsProvider: ({ children, value, }: {
|
|
13
16
|
children: any;
|
|
14
|
-
value: Pick<ComboboxProps, "allowNewValues" | "isMultiSelect" | "options" | "selectedOptions" | "onToggleSelected">;
|
|
17
|
+
value: Pick<ComboboxProps, "allowNewValues" | "isMultiSelect" | "options" | "selectedOptions" | "onToggleSelected" | "maxSelected">;
|
|
15
18
|
}) => React.JSX.Element;
|
|
16
19
|
export declare const useSelectedOptionsContext: () => SelectedOptionsContextType;
|
|
17
20
|
export {};
|
|
@@ -6,7 +6,7 @@ const SelectedOptionsContext = createContext({});
|
|
|
6
6
|
export const SelectedOptionsProvider = ({ children, value, }) => {
|
|
7
7
|
const { clearInput, focusInput } = useInputContext();
|
|
8
8
|
const { customOptions, removeCustomOption, addCustomOption, setCustomOptions, } = useCustomOptionsContext();
|
|
9
|
-
const { allowNewValues, isMultiSelect, selectedOptions: externalSelectedOptions, onToggleSelected, options, } = value;
|
|
9
|
+
const { allowNewValues, isMultiSelect, selectedOptions: externalSelectedOptions, onToggleSelected, options, maxSelected, } = value;
|
|
10
10
|
const [internalSelectedOptions, setSelectedOptions] = useState([]);
|
|
11
11
|
const selectedOptions = useMemo(() => externalSelectedOptions !== null && externalSelectedOptions !== void 0 ? externalSelectedOptions : [...customOptions, ...internalSelectedOptions], [customOptions, externalSelectedOptions, internalSelectedOptions]);
|
|
12
12
|
const addSelectedOption = useCallback((option) => {
|
|
@@ -64,6 +64,7 @@ export const SelectedOptionsProvider = ({ children, value, }) => {
|
|
|
64
64
|
selectedOptions,
|
|
65
65
|
]);
|
|
66
66
|
const prevSelectedOptions = usePrevious(selectedOptions);
|
|
67
|
+
const isLimitReached = !!(maxSelected === null || maxSelected === void 0 ? void 0 : maxSelected.limit) && selectedOptions.length >= maxSelected.limit;
|
|
67
68
|
const selectedOptionsState = {
|
|
68
69
|
addSelectedOption,
|
|
69
70
|
isMultiSelect,
|
|
@@ -72,6 +73,7 @@ export const SelectedOptionsProvider = ({ children, value, }) => {
|
|
|
72
73
|
selectedOptions,
|
|
73
74
|
setSelectedOptions,
|
|
74
75
|
toggleOption,
|
|
76
|
+
maxSelected: maxSelected && Object.assign(Object.assign({}, maxSelected), { isLimitReached }),
|
|
75
77
|
};
|
|
76
78
|
return (React.createElement(SelectedOptionsContext.Provider, { value: selectedOptionsState }, children));
|
|
77
79
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectedOptionsContext.js","sourceRoot":"","sources":["../../../../src/form/combobox/SelectedOptions/selectedOptionsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACZ,aAAa,EACb,WAAW,EACX,UAAU,EACV,OAAO,EACP,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"selectedOptionsContext.js","sourceRoot":"","sources":["../../../../src/form/combobox/SelectedOptions/selectedOptionsContext.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EACZ,aAAa,EACb,WAAW,EACX,UAAU,EACV,OAAO,EACP,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAiBlE,MAAM,sBAAsB,GAAG,aAAa,CAC1C,EAAgC,CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,EACtC,QAAQ,EACR,KAAK,GAYN,EAAE,EAAE;IACH,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,eAAe,EAAE,CAAC;IACrD,MAAM,EACJ,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,GAAG,uBAAuB,EAAE,CAAC;IAC9B,MAAM,EACJ,cAAc,EACd,aAAa,EACb,eAAe,EAAE,uBAAuB,EACxC,gBAAgB,EAChB,OAAO,EACP,WAAW,GACZ,GAAG,KAAK,CAAC;IACV,MAAM,CAAC,uBAAuB,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IAC7E,MAAM,eAAe,GAAG,OAAO,CAC7B,GAAG,EAAE,CACH,uBAAuB,aAAvB,uBAAuB,cAAvB,uBAAuB,GAAI,CAAC,GAAG,aAAa,EAAE,GAAG,uBAAuB,CAAC,EAC3E,CAAC,aAAa,EAAE,uBAAuB,EAAE,uBAAuB,CAAC,CAClE,CAAC;IAEF,MAAM,iBAAiB,GAAG,WAAW,CACnC,CAAC,MAAc,EAAE,EAAE;;QACjB,MAAM,cAAc,GAAG,CAAC,OAAO;aAC5B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;aAC/B,QAAQ,CAAC,MAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,WAAW,sDAAI,CAAC,CAAC;QACrC,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;YAC1C,CAAC,aAAa,IAAI,kBAAkB,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,IAAI,aAAa,EAAE,CAAC;YACzB,kBAAkB,CAAC,CAAC,kBAAkB,EAAE,EAAE,CAAC;gBACzC,GAAG,kBAAkB;gBACrB,MAAM;aACP,CAAC,CAAC;QACL,CAAC;aAAM,CAAC;YACN,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;YAC7B,gBAAgB,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;QACD,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAG,MAAM,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACnD,CAAC,EACD;QACE,eAAe;QACf,cAAc;QACd,aAAa;QACb,gBAAgB;QAChB,OAAO;QACP,gBAAgB;KACjB,CACF,CAAC;IAEF,MAAM,oBAAoB,GAAG,WAAW,CACtC,CAAC,MAAc,EAAE,EAAE;QACjB,MAAM,cAAc,GAAG,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,cAAc,EAAE,CAAC;YACnB,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;aAAM,CAAC;YACN,kBAAkB,CAAC,CAAC,kBAAkB,EAAE,EAAE,CACxC,kBAAkB,CAAC,MAAM,CACvB,CAAC,cAAc,EAAE,EAAE,CAAC,cAAc,KAAK,MAAM,CAC9C,CACF,CAAC;QACJ,CAAC;QACD,gBAAgB,aAAhB,gBAAgB,uBAAhB,gBAAgB,CAAG,MAAM,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;IACpD,CAAC,EACD,CAAC,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,CACtD,CAAC;IAEF,MAAM,YAAY,GAAG,WAAW,CAC9B,CAAC,MAAc,EAAE,KAA+C,EAAE,EAAE;QAClE,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,oBAAoB,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACN,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QACD,UAAU,CAAC,KAAK,CAAC,CAAC;QAClB,UAAU,EAAE,CAAC;IACf,CAAC,EACD;QACE,iBAAiB;QACjB,UAAU;QACV,UAAU;QACV,oBAAoB;QACpB,eAAe;KAChB,CACF,CAAC;IAEF,MAAM,mBAAmB,GAAG,WAAW,CAAW,eAAe,CAAC,CAAC;IAEnE,MAAM,cAAc,GAClB,CAAC,CAAC,CAAA,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,KAAK,CAAA,IAAI,eAAe,CAAC,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC;IAEtE,MAAM,oBAAoB,GAAG;QAC3B,iBAAiB;QACjB,aAAa;QACb,oBAAoB;QACpB,mBAAmB;QACnB,eAAe;QACf,kBAAkB;QAClB,YAAY;QACZ,WAAW,EAAE,WAAW,oCACnB,WAAW,KACd,cAAc,GACf;KACF,CAAC;IAEF,OAAO,CACL,oBAAC,sBAAsB,CAAC,QAAQ,IAAC,KAAK,EAAE,oBAAoB,IACzD,QAAQ,CACuB,CACnC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,EAAE;IAC5C,MAAM,OAAO,GAAG,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC"}
|
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
import React, { ChangeEvent, InputHTMLAttributes } from "react";
|
|
2
2
|
import { FormFieldProps } from "../useFormField";
|
|
3
|
+
export type MaxSelected = {
|
|
4
|
+
/**
|
|
5
|
+
* The limit for maximum selected options
|
|
6
|
+
*/
|
|
7
|
+
limit: number;
|
|
8
|
+
/**
|
|
9
|
+
* Override the message to display when the limit for maximum selected options has been reached
|
|
10
|
+
*/
|
|
11
|
+
message?: string;
|
|
12
|
+
};
|
|
3
13
|
export interface ComboboxProps extends FormFieldProps, Omit<InputHTMLAttributes<HTMLInputElement>, "size" | "onChange" | "value"> {
|
|
4
14
|
/**
|
|
5
15
|
* Combobox label
|
|
@@ -87,6 +97,10 @@ export interface ComboboxProps extends FormFieldProps, Omit<InputHTMLAttributes<
|
|
|
87
97
|
* e.g. for a filter, where options can be toggled elsewhere/programmatically.
|
|
88
98
|
*/
|
|
89
99
|
selectedOptions?: string[];
|
|
100
|
+
/**
|
|
101
|
+
* Options for the maximum number of selected options.
|
|
102
|
+
*/
|
|
103
|
+
maxSelected?: MaxSelected;
|
|
90
104
|
/**
|
|
91
105
|
* Set to "true" to enable inline autocomplete.
|
|
92
106
|
*
|
|
@@ -34,7 +34,7 @@ export const HelpText = forwardRef((_a, ref) => {
|
|
|
34
34
|
const mergedRef = useMergeRefs(buttonRef, ref);
|
|
35
35
|
const [open, setOpen] = useState(false);
|
|
36
36
|
return (React.createElement("div", { className: cl("navds-help-text", wrapperClassName) },
|
|
37
|
-
React.createElement("button", Object.assign({}, rest, { ref: mergedRef, onClick: composeEventHandlers(onClick, () => setOpen((x) => x)), className: cl(className, "navds-help-text__button"), type: "button", "aria-expanded": open }),
|
|
37
|
+
React.createElement("button", Object.assign({}, rest, { ref: mergedRef, onClick: composeEventHandlers(onClick, () => setOpen((x) => !x)), className: cl(className, "navds-help-text__button"), type: "button", "aria-expanded": open }),
|
|
38
38
|
React.createElement(HelpTextIcon, { title: title }),
|
|
39
39
|
React.createElement(HelpTextIcon, { filled: true, title: title })),
|
|
40
40
|
React.createElement(Popover, { onClose: () => setOpen(false), className: "navds-help-text__popover", open: open, anchorEl: buttonRef.current, placement: placement, strategy: strategy, offset: 12 },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HelpText.js","sourceRoot":"","sources":["../../src/help-text/HelpText.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAgB,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAiB9C;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAChC,CACE,EASC,EACD,GAAG,EACH,EAAE;QAXF,EACE,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ,GAAG,UAAU,EACrB,KAAK,GAAG,OAAO,EACf,OAAO,EACP,gBAAgB,OAEjB,EADI,IAAI,cART,0FASC,CADQ;IAIT,MAAM,SAAS,GAAG,MAAM,CAA2B,IAAI,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAE/C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExC,OAAO,CACL,6BAAK,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;QACrD,gDACM,IAAI,IACR,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"HelpText.js","sourceRoot":"","sources":["../../src/help-text/HelpText.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,MAAM,MAAM,CAAC;AACtB,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAgB,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAiB9C;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,CAChC,CACE,EASC,EACD,GAAG,EACH,EAAE;QAXF,EACE,SAAS,EACT,QAAQ,EACR,SAAS,EACT,QAAQ,GAAG,UAAU,EACrB,KAAK,GAAG,OAAO,EACf,OAAO,EACP,gBAAgB,OAEjB,EADI,IAAI,cART,0FASC,CADQ;IAIT,MAAM,SAAS,GAAG,MAAM,CAA2B,IAAI,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;IAE/C,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAExC,OAAO,CACL,6BAAK,SAAS,EAAE,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;QACrD,gDACM,IAAI,IACR,GAAG,EAAE,SAAS,EACd,OAAO,EAAE,oBAAoB,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAChE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,yBAAyB,CAAC,EACnD,IAAI,EAAC,QAAQ,mBACE,IAAI;YAEnB,oBAAC,YAAY,IAAC,KAAK,EAAE,KAAK,GAAI;YAC9B,oBAAC,YAAY,IAAC,MAAM,QAAC,KAAK,EAAE,KAAK,GAAI,CAC9B;QACT,oBAAC,OAAO,IACN,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAC7B,SAAS,EAAC,0BAA0B,EACpC,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,SAAS,CAAC,OAAO,EAC3B,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,EAAE;YAEV,oBAAC,OAAO,CAAC,OAAO,IAAC,SAAS,EAAC,kBAAkB,IAC1C,QAAQ,CACO,CACV,CACN,CACP,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Custom createContext to consolidate context-implementation across the system
|
|
3
|
+
* Inspired by:
|
|
4
|
+
* - https://github.com/radix-ui/primitives/blob/main/packages/react/context/src/createContext.tsx
|
|
5
|
+
* - https://github.com/chakra-ui/chakra-ui/blob/5ec0be610b5a69afba01a9c22365155c1b519136/packages/hooks/context/src/index.ts
|
|
6
|
+
*/
|
|
7
|
+
import React from "react";
|
|
8
|
+
export interface CreateContextOptions<T> {
|
|
9
|
+
hookName?: string;
|
|
10
|
+
providerName?: string;
|
|
11
|
+
errorMessage?: string;
|
|
12
|
+
name?: string;
|
|
13
|
+
defaultValue?: T;
|
|
14
|
+
}
|
|
15
|
+
type ProviderProps<T> = T & {
|
|
16
|
+
children: React.ReactNode;
|
|
17
|
+
};
|
|
18
|
+
export type CreateContextReturn<T> = [
|
|
19
|
+
(contextValues: ProviderProps<T>) => React.JSX.Element,
|
|
20
|
+
() => T
|
|
21
|
+
];
|
|
22
|
+
export declare function createContext<T>(options?: CreateContextOptions<T>): CreateContextReturn<T>;
|
|
23
|
+
export {};
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
2
|
+
var t = {};
|
|
3
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
4
|
+
t[p] = s[p];
|
|
5
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
6
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
7
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
8
|
+
t[p[i]] = s[p[i]];
|
|
9
|
+
}
|
|
10
|
+
return t;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Custom createContext to consolidate context-implementation across the system
|
|
14
|
+
* Inspired by:
|
|
15
|
+
* - https://github.com/radix-ui/primitives/blob/main/packages/react/context/src/createContext.tsx
|
|
16
|
+
* - https://github.com/chakra-ui/chakra-ui/blob/5ec0be610b5a69afba01a9c22365155c1b519136/packages/hooks/context/src/index.ts
|
|
17
|
+
*/
|
|
18
|
+
import React, { createContext as createReactContext, useContext as useReactContext, } from "react";
|
|
19
|
+
function getErrorMessage(hook, provider) {
|
|
20
|
+
return `${hook} returned \`undefined\`. Seems you forgot to wrap component within ${provider}`;
|
|
21
|
+
}
|
|
22
|
+
export function createContext(options = {}) {
|
|
23
|
+
const { name, hookName = "useContext", providerName = "Provider", errorMessage, defaultValue, } = options;
|
|
24
|
+
const Context = createReactContext(defaultValue);
|
|
25
|
+
function Provider(_a) {
|
|
26
|
+
var { children } = _a, context = __rest(_a, ["children"]);
|
|
27
|
+
// Only re-memoize when prop values change
|
|
28
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
29
|
+
const value = React.useMemo(() => context, Object.values(context));
|
|
30
|
+
return React.createElement(Context.Provider, { value: value }, children);
|
|
31
|
+
}
|
|
32
|
+
function useContext() {
|
|
33
|
+
var _a;
|
|
34
|
+
const context = useReactContext(Context);
|
|
35
|
+
if (!context) {
|
|
36
|
+
const error = new Error(errorMessage !== null && errorMessage !== void 0 ? errorMessage : getErrorMessage(hookName, providerName));
|
|
37
|
+
error.name = "ContextError";
|
|
38
|
+
(_a = Error.captureStackTrace) === null || _a === void 0 ? void 0 : _a.call(Error, error, useContext);
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
41
|
+
return context;
|
|
42
|
+
}
|
|
43
|
+
Context.displayName = name;
|
|
44
|
+
return [Provider, useContext];
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=create-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-context.js","sourceRoot":"","sources":["../../src/util/create-context.tsx"],"names":[],"mappings":";;;;;;;;;;;AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,EACZ,aAAa,IAAI,kBAAkB,EACnC,UAAU,IAAI,eAAe,GAC9B,MAAM,OAAO,CAAC;AAiBf,SAAS,eAAe,CAAC,IAAY,EAAE,QAAgB;IACrD,OAAO,GAAG,IAAI,sEAAsE,QAAQ,EAAE,CAAC;AACjG,CAAC;AAED,MAAM,UAAU,aAAa,CAAI,UAAmC,EAAE;IACpE,MAAM,EACJ,IAAI,EACJ,QAAQ,GAAG,YAAY,EACvB,YAAY,GAAG,UAAU,EACzB,YAAY,EACZ,YAAY,GACb,GAAG,OAAO,CAAC;IAEZ,MAAM,OAAO,GAAG,kBAAkB,CAAgB,YAAY,CAAC,CAAC;IAEhE,SAAS,QAAQ,CAAC,EAA0C;YAA1C,EAAE,QAAQ,OAAgC,EAA3B,OAAO,cAAtB,YAAwB,CAAF;QACtC,0CAA0C;QAC1C,uDAAuD;QACvD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAM,CAAC;QACxE,OAAO,oBAAC,OAAO,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,IAAG,QAAQ,CAAoB,CAAC;IACvE,CAAC;IAED,SAAS,UAAU;;QACjB,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QAEzC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,IAAI,KAAK,CACrB,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CACxD,CAAC;YACF,KAAK,CAAC,IAAI,GAAG,cAAc,CAAC;YAC5B,MAAA,KAAK,CAAC,iBAAiB,sDAAG,KAAK,EAAE,UAAU,CAAC,CAAC;YAC7C,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAE3B,OAAO,CAAC,QAAQ,EAAE,UAAU,CAA2B,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export type DescendantOptions<T = object> = T & {
|
|
2
|
+
/**
|
|
3
|
+
* If `true`, the item will be registered in all nodes map
|
|
4
|
+
* but omitted from enabled nodes map
|
|
5
|
+
*/
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
};
|
|
8
|
+
export type Descendant<T, K> = DescendantOptions<K> & {
|
|
9
|
+
/**
|
|
10
|
+
* DOM element of the item
|
|
11
|
+
*/
|
|
12
|
+
node: T;
|
|
13
|
+
/**
|
|
14
|
+
* index of item in all nodes map and enabled nodes map
|
|
15
|
+
*/
|
|
16
|
+
index: number;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* @internal
|
|
20
|
+
*
|
|
21
|
+
* Class to manage descendants and their relative indices in the DOM.
|
|
22
|
+
* It uses `node.compareDocumentPosition(...)` under the hood
|
|
23
|
+
*/
|
|
24
|
+
export declare class DescendantsManager<T extends HTMLElement, K extends Record<string, any> = object> {
|
|
25
|
+
private descendants;
|
|
26
|
+
register: (nodeOrOptions: T | null | DescendantOptions<K>) => void | ((node: T | null) => void);
|
|
27
|
+
unregister: (node: T) => void;
|
|
28
|
+
destroy: () => void;
|
|
29
|
+
private assignIndex;
|
|
30
|
+
count: () => number;
|
|
31
|
+
enabledCount: () => number;
|
|
32
|
+
values: () => Descendant<T, K>[];
|
|
33
|
+
enabledValues: () => Descendant<T, K>[];
|
|
34
|
+
item: (index: number) => Descendant<T, K> | undefined;
|
|
35
|
+
enabledItem: (index: number) => Descendant<T, K> | undefined;
|
|
36
|
+
first: () => Descendant<T, K> | undefined;
|
|
37
|
+
firstEnabled: () => Descendant<T, K> | undefined;
|
|
38
|
+
last: () => Descendant<T, K> | undefined;
|
|
39
|
+
lastEnabled: () => Descendant<T, K> | undefined;
|
|
40
|
+
indexOf: (node: T | null) => number;
|
|
41
|
+
enabledIndexOf: (node: T | null) => number;
|
|
42
|
+
next: (index: number, loop?: boolean) => Descendant<T, K> | undefined;
|
|
43
|
+
nextEnabled: (index: number, loop?: boolean) => Descendant<T, K> | undefined;
|
|
44
|
+
prev: (index: number, loop?: boolean) => Descendant<T, K> | undefined;
|
|
45
|
+
prevEnabled: (index: number, loop?: boolean) => Descendant<T, K> | undefined;
|
|
46
|
+
private registerNode;
|
|
47
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* https://github.com/chakra-ui/chakra-ui/tree/5ec0be610b5a69afba01a9c22365155c1b519136/packages/components/descendant
|
|
3
|
+
*/
|
|
4
|
+
import { getNextIndex, getPrevIndex, isElement, sortNodes } from "./utils";
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
*
|
|
8
|
+
* Class to manage descendants and their relative indices in the DOM.
|
|
9
|
+
* It uses `node.compareDocumentPosition(...)` under the hood
|
|
10
|
+
*/
|
|
11
|
+
export class DescendantsManager {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.descendants = new Map();
|
|
14
|
+
this.register = (nodeOrOptions) => {
|
|
15
|
+
if (nodeOrOptions == null)
|
|
16
|
+
return;
|
|
17
|
+
if (isElement(nodeOrOptions)) {
|
|
18
|
+
return this.registerNode(nodeOrOptions);
|
|
19
|
+
}
|
|
20
|
+
return (node) => {
|
|
21
|
+
this.registerNode(node, nodeOrOptions);
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
this.unregister = (node) => {
|
|
25
|
+
this.descendants.delete(node);
|
|
26
|
+
const sorted = sortNodes(Array.from(this.descendants.keys()));
|
|
27
|
+
this.assignIndex(sorted);
|
|
28
|
+
};
|
|
29
|
+
this.destroy = () => {
|
|
30
|
+
this.descendants.clear();
|
|
31
|
+
};
|
|
32
|
+
this.assignIndex = (descendants) => {
|
|
33
|
+
this.descendants.forEach((descendant) => {
|
|
34
|
+
const index = descendants.indexOf(descendant.node);
|
|
35
|
+
descendant.index = index;
|
|
36
|
+
descendant.node.dataset["index"] = descendant.index.toString();
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
this.count = () => this.descendants.size;
|
|
40
|
+
this.enabledCount = () => this.enabledValues().length;
|
|
41
|
+
this.values = () => {
|
|
42
|
+
const values = Array.from(this.descendants.values());
|
|
43
|
+
return values.sort((a, b) => a.index - b.index);
|
|
44
|
+
};
|
|
45
|
+
this.enabledValues = () => {
|
|
46
|
+
return this.values().filter((descendant) => !descendant.disabled);
|
|
47
|
+
};
|
|
48
|
+
this.item = (index) => {
|
|
49
|
+
if (this.count() === 0)
|
|
50
|
+
return undefined;
|
|
51
|
+
return this.values()[index];
|
|
52
|
+
};
|
|
53
|
+
this.enabledItem = (index) => {
|
|
54
|
+
if (this.enabledCount() === 0)
|
|
55
|
+
return undefined;
|
|
56
|
+
return this.enabledValues()[index];
|
|
57
|
+
};
|
|
58
|
+
this.first = () => this.item(0);
|
|
59
|
+
this.firstEnabled = () => this.enabledItem(0);
|
|
60
|
+
this.last = () => this.item(this.descendants.size - 1);
|
|
61
|
+
this.lastEnabled = () => {
|
|
62
|
+
const lastIndex = this.enabledValues().length - 1;
|
|
63
|
+
return this.enabledItem(lastIndex);
|
|
64
|
+
};
|
|
65
|
+
this.indexOf = (node) => {
|
|
66
|
+
var _a, _b;
|
|
67
|
+
if (!node)
|
|
68
|
+
return -1;
|
|
69
|
+
return (_b = (_a = this.descendants.get(node)) === null || _a === void 0 ? void 0 : _a.index) !== null && _b !== void 0 ? _b : -1;
|
|
70
|
+
};
|
|
71
|
+
this.enabledIndexOf = (node) => {
|
|
72
|
+
if (node == null)
|
|
73
|
+
return -1;
|
|
74
|
+
return this.enabledValues().findIndex((i) => i.node.isSameNode(node));
|
|
75
|
+
};
|
|
76
|
+
this.next = (index, loop = true) => {
|
|
77
|
+
const next = getNextIndex(index, this.count(), loop);
|
|
78
|
+
return this.item(next);
|
|
79
|
+
};
|
|
80
|
+
this.nextEnabled = (index, loop = true) => {
|
|
81
|
+
const item = this.item(index);
|
|
82
|
+
if (!item)
|
|
83
|
+
return;
|
|
84
|
+
const enabledIndex = this.enabledIndexOf(item.node);
|
|
85
|
+
const nextEnabledIndex = getNextIndex(enabledIndex, this.enabledCount(), loop);
|
|
86
|
+
return this.enabledItem(nextEnabledIndex);
|
|
87
|
+
};
|
|
88
|
+
this.prev = (index, loop = true) => {
|
|
89
|
+
const prev = getPrevIndex(index, this.count() - 1, loop);
|
|
90
|
+
return this.item(prev);
|
|
91
|
+
};
|
|
92
|
+
this.prevEnabled = (index, loop = true) => {
|
|
93
|
+
const item = this.item(index);
|
|
94
|
+
if (!item)
|
|
95
|
+
return;
|
|
96
|
+
const enabledIndex = this.enabledIndexOf(item.node);
|
|
97
|
+
const prevEnabledIndex = getPrevIndex(enabledIndex, this.enabledCount() - 1, loop);
|
|
98
|
+
return this.enabledItem(prevEnabledIndex);
|
|
99
|
+
};
|
|
100
|
+
this.registerNode = (node, options) => {
|
|
101
|
+
if (!node || this.descendants.has(node))
|
|
102
|
+
return;
|
|
103
|
+
const keys = Array.from(this.descendants.keys()).concat(node);
|
|
104
|
+
const sorted = sortNodes(keys);
|
|
105
|
+
if (options === null || options === void 0 ? void 0 : options.disabled) {
|
|
106
|
+
options.disabled = !!options.disabled;
|
|
107
|
+
}
|
|
108
|
+
const descendant = Object.assign({ node, index: -1 }, options);
|
|
109
|
+
this.descendants.set(node, descendant);
|
|
110
|
+
this.assignIndex(sorted);
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=descendant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descendant.js","sourceRoot":"","sources":["../../../../src/util/hooks/descendants/descendant.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* https://github.com/chakra-ui/chakra-ui/tree/5ec0be610b5a69afba01a9c22365155c1b519136/packages/components/descendant
|
|
3
|
+
*/
|
|
4
|
+
import React from "react";
|
|
5
|
+
import { DescendantOptions, DescendantsManager } from "./descendant";
|
|
6
|
+
/**
|
|
7
|
+
* Provides strongly typed versions of the context provider and hooks above.
|
|
8
|
+
*/
|
|
9
|
+
export declare function createDescendantContext<T extends HTMLElement = HTMLElement, K extends Record<string, any> = object>(): readonly [React.Provider<DescendantsManager<T, K>>, () => DescendantsManager<T, K>, () => DescendantsManager<T, K>, (options?: DescendantOptions<K>) => {
|
|
10
|
+
descendants: DescendantsManager<HTMLElement, Record<string, any>>;
|
|
11
|
+
index: number;
|
|
12
|
+
enabledIndex: number;
|
|
13
|
+
register: (instance: T | null) => void;
|
|
14
|
+
}];
|