@lumx/react 3.20.1-alpha.28 → 3.20.1-alpha.29
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/index.js +14033 -63
- package/index.js.map +1 -1
- package/package.json +3 -3
- package/utils/index.js +158 -3
- package/utils/index.js.map +1 -1
- package/_internal/Button-5a87fee9.js +0 -97
- package/_internal/Button-5a87fee9.js.map +0 -1
- package/_internal/ButtonRoot-bf682215.js +0 -117
- package/_internal/ButtonRoot-bf682215.js.map +0 -1
- package/_internal/Chip-8d0aae06.js +0 -143
- package/_internal/Chip-8d0aae06.js.map +0 -1
- package/_internal/ClickAwayProvider-1204f237.js +0 -95
- package/_internal/ClickAwayProvider-1204f237.js.map +0 -1
- package/_internal/DisabledStateContext-ea04260d.js +0 -29
- package/_internal/DisabledStateContext-ea04260d.js.map +0 -1
- package/_internal/HeadingLevelProvider-ebdcb0c7.js +0 -61
- package/_internal/HeadingLevelProvider-ebdcb0c7.js.map +0 -1
- package/_internal/IconButton-351389b0.js +0 -77
- package/_internal/IconButton-351389b0.js.map +0 -1
- package/_internal/ImageCaption-4109b433.js +0 -75
- package/_internal/ImageCaption-4109b433.js.map +0 -1
- package/_internal/List-b7882a99.js +0 -817
- package/_internal/List-b7882a99.js.map +0 -1
- package/_internal/PopoverDialog-2e7b9ed5.js +0 -655
- package/_internal/PopoverDialog-2e7b9ed5.js.map +0 -1
- package/_internal/Portal-3f86608e.js +0 -45
- package/_internal/Portal-3f86608e.js.map +0 -1
- package/_internal/RawClickable-2c2b6a89.js +0 -52
- package/_internal/RawClickable-2c2b6a89.js.map +0 -1
- package/_internal/Slides-83646e84.js +0 -679
- package/_internal/Slides-83646e84.js.map +0 -1
- package/_internal/ThemeContext-3181f000.js +0 -14
- package/_internal/ThemeContext-3181f000.js.map +0 -1
- package/_internal/Thumbnail-741501a5.js +0 -314
- package/_internal/Thumbnail-741501a5.js.map +0 -1
- package/_internal/check-circle-de24f857.js +0 -4
- package/_internal/check-circle-de24f857.js.map +0 -1
- package/_internal/chevron-right-827b804a.js +0 -6
- package/_internal/chevron-right-827b804a.js.map +0 -1
- package/_internal/chevron-up-0b9c76cb.js +0 -6
- package/_internal/chevron-up-0b9c76cb.js.map +0 -1
- package/_internal/close-circle-ef5d1aac.js +0 -4
- package/_internal/close-circle-ef5d1aac.js.map +0 -1
- package/_internal/close-eaf6c45a.js +0 -4
- package/_internal/close-eaf6c45a.js.map +0 -1
- package/_internal/components/alert-dialog-5df4f133.js +0 -163
- package/_internal/components/alert-dialog-5df4f133.js.map +0 -1
- package/_internal/components/autocomplete-824c779e.js +0 -261
- package/_internal/components/autocomplete-824c779e.js.map +0 -1
- package/_internal/components/avatar-69b66f01.js +0 -83
- package/_internal/components/avatar-69b66f01.js.map +0 -1
- package/_internal/components/badge-63cd3b1c.js +0 -81
- package/_internal/components/badge-63cd3b1c.js.map +0 -1
- package/_internal/components/button-eebd4e00.js +0 -47
- package/_internal/components/button-eebd4e00.js.map +0 -1
- package/_internal/components/checkbox-54943a02.js +0 -143
- package/_internal/components/checkbox-54943a02.js.map +0 -1
- package/_internal/components/chip-9ad6b318.js +0 -102
- package/_internal/components/chip-9ad6b318.js.map +0 -1
- package/_internal/components/comment-block-55a4ab3c.js +0 -138
- package/_internal/components/comment-block-55a4ab3c.js.map +0 -1
- package/_internal/components/date-picker-a824a3ae.js +0 -2
- package/_internal/components/date-picker-a824a3ae.js.map +0 -1
- package/_internal/components/dialog-5e6320b8.js +0 -238
- package/_internal/components/dialog-5e6320b8.js.map +0 -1
- package/_internal/components/divider-bdf11ba3.js +0 -50
- package/_internal/components/divider-bdf11ba3.js.map +0 -1
- package/_internal/components/drag-handle-45912fd3.js +0 -52
- package/_internal/components/drag-handle-45912fd3.js.map +0 -1
- package/_internal/components/dropdown-0216211d.js +0 -147
- package/_internal/components/dropdown-0216211d.js.map +0 -1
- package/_internal/components/expansion-panel-3ce73c6b.js +0 -167
- package/_internal/components/expansion-panel-3ce73c6b.js.map +0 -1
- package/_internal/components/flag-1b177f78.js +0 -59
- package/_internal/components/flag-1b177f78.js.map +0 -1
- package/_internal/components/flex-box-93b97715.js +0 -56
- package/_internal/components/flex-box-93b97715.js.map +0 -1
- package/_internal/components/generic-block-925f7c5b.js +0 -128
- package/_internal/components/generic-block-925f7c5b.js.map +0 -1
- package/_internal/components/grid-95fd1493.js +0 -104
- package/_internal/components/grid-95fd1493.js.map +0 -1
- package/_internal/components/grid-column-43f28cfb.js +0 -58
- package/_internal/components/grid-column-43f28cfb.js.map +0 -1
- package/_internal/components/heading-45d6e78e.js +0 -53
- package/_internal/components/heading-45d6e78e.js.map +0 -1
- package/_internal/components/icon-79195151.js +0 -2
- package/_internal/components/icon-79195151.js.map +0 -1
- package/_internal/components/image-block-aba6d2db.js +0 -110
- package/_internal/components/image-block-aba6d2db.js.map +0 -1
- package/_internal/components/image-lightbox-8b8e77c2.js +0 -759
- package/_internal/components/image-lightbox-8b8e77c2.js.map +0 -1
- package/_internal/components/inline-list-dfb9fd34.js +0 -74
- package/_internal/components/inline-list-dfb9fd34.js.map +0 -1
- package/_internal/components/input-helper-c8a0078b.js +0 -71
- package/_internal/components/input-helper-c8a0078b.js.map +0 -1
- package/_internal/components/input-label-9711398b.js +0 -59
- package/_internal/components/input-label-9711398b.js.map +0 -1
- package/_internal/components/lightbox-894abe64.js +0 -155
- package/_internal/components/lightbox-894abe64.js.map +0 -1
- package/_internal/components/link-e70e64ed.js +0 -72
- package/_internal/components/link-e70e64ed.js.map +0 -1
- package/_internal/components/link-preview-e56f3570.js +0 -117
- package/_internal/components/link-preview-e56f3570.js.map +0 -1
- package/_internal/components/list-59b7ce56.js +0 -71
- package/_internal/components/list-59b7ce56.js.map +0 -1
- package/_internal/components/message-a255dfd3.js +0 -98
- package/_internal/components/message-a255dfd3.js.map +0 -1
- package/_internal/components/mosaic-192f2270.js +0 -94
- package/_internal/components/mosaic-192f2270.js.map +0 -1
- package/_internal/components/navigation-dfe8aac0.js +0 -225
- package/_internal/components/navigation-dfe8aac0.js.map +0 -1
- package/_internal/components/notification-10f289b5.js +0 -143
- package/_internal/components/notification-10f289b5.js.map +0 -1
- package/_internal/components/popover-6c7f745b.js +0 -3
- package/_internal/components/popover-6c7f745b.js.map +0 -1
- package/_internal/components/post-block-f7dcc6e9.js +0 -109
- package/_internal/components/post-block-f7dcc6e9.js.map +0 -1
- package/_internal/components/progress-7a05fb0c.js +0 -182
- package/_internal/components/progress-7a05fb0c.js.map +0 -1
- package/_internal/components/progress-tracker-48876add.js +0 -309
- package/_internal/components/progress-tracker-48876add.js.map +0 -1
- package/_internal/components/radio-button-07cf45e9.js +0 -149
- package/_internal/components/radio-button-07cf45e9.js.map +0 -1
- package/_internal/components/select-8b54a444.js +0 -457
- package/_internal/components/select-8b54a444.js.map +0 -1
- package/_internal/components/side-navigation-7eeed3b4.js +0 -164
- package/_internal/components/side-navigation-7eeed3b4.js.map +0 -1
- package/_internal/components/skeleton-a4e84085.js +0 -166
- package/_internal/components/skeleton-a4e84085.js.map +0 -1
- package/_internal/components/slider-5d64b470.js +0 -311
- package/_internal/components/slider-5d64b470.js.map +0 -1
- package/_internal/components/slideshow-bce65cf6.js +0 -151
- package/_internal/components/slideshow-bce65cf6.js.map +0 -1
- package/_internal/components/switch-7ae55d89.js +0 -121
- package/_internal/components/switch-7ae55d89.js.map +0 -1
- package/_internal/components/table-5bdf4aec.js +0 -297
- package/_internal/components/table-5bdf4aec.js.map +0 -1
- package/_internal/components/tabs-2ad54592.js +0 -298
- package/_internal/components/tabs-2ad54592.js.map +0 -1
- package/_internal/components/text-09c81111.js +0 -2
- package/_internal/components/text-09c81111.js.map +0 -1
- package/_internal/components/text-field-3e1030f0.js +0 -359
- package/_internal/components/text-field-3e1030f0.js.map +0 -1
- package/_internal/components/thumbnail-1c5828b9.js +0 -42
- package/_internal/components/thumbnail-1c5828b9.js.map +0 -1
- package/_internal/components/toolbar-0d14efb7.js +0 -61
- package/_internal/components/toolbar-0d14efb7.js.map +0 -1
- package/_internal/components/tooltip-31181a24.js +0 -327
- package/_internal/components/tooltip-31181a24.js.map +0 -1
- package/_internal/components/uploader-845b2412.js +0 -153
- package/_internal/components/uploader-845b2412.js.map +0 -1
- package/_internal/components/user-block-91c30797.js +0 -144
- package/_internal/components/user-block-91c30797.js.map +0 -1
- package/_internal/constants-9b714e31.js +0 -2167
- package/_internal/constants-9b714e31.js.map +0 -1
- package/_internal/constants-d0e3f49e.js +0 -24
- package/_internal/constants-d0e3f49e.js.map +0 -1
- package/_internal/context-9d1336a1.js +0 -19
- package/_internal/context-9d1336a1.js.map +0 -1
- package/_internal/forwardRef-d0e90329.js +0 -82
- package/_internal/forwardRef-d0e90329.js.map +0 -1
- package/_internal/getFocusableElements-230173a8.js +0 -13
- package/_internal/getFocusableElements-230173a8.js.map +0 -1
- package/_internal/index-68e1b0af.js +0 -436
- package/_internal/index-68e1b0af.js.map +0 -1
- package/_internal/index-745f94ee.js +0 -103
- package/_internal/index-745f94ee.js.map +0 -1
- package/_internal/index-ab520e78.js +0 -117
- package/_internal/index-ab520e78.js.map +0 -1
- package/_internal/information-49bbeed3.js +0 -6
- package/_internal/information-49bbeed3.js.map +0 -1
- package/_internal/isComponent-b9762ff1.js +0 -18
- package/_internal/isComponent-b9762ff1.js.map +0 -1
- package/_internal/isComponentType-e806b848.js +0 -9
- package/_internal/isComponentType-e806b848.js.map +0 -1
- package/_internal/mergeRefs-f0d7d6ea.js +0 -30
- package/_internal/mergeRefs-f0d7d6ea.js.map +0 -1
- package/_internal/state-db358714.js +0 -130
- package/_internal/state-db358714.js.map +0 -1
- package/_internal/useBooleanState-2a3d237c.js +0 -12
- package/_internal/useBooleanState-2a3d237c.js.map +0 -1
- package/_internal/useCallbackOnEscape-0b220f9c.js +0 -62
- package/_internal/useCallbackOnEscape-0b220f9c.js.map +0 -1
- package/_internal/useDisableBodyScroll-36bd7352.js +0 -219
- package/_internal/useDisableBodyScroll-36bd7352.js.map +0 -1
- package/_internal/useDisableStateProps-69e16b7c.js +0 -36
- package/_internal/useDisableStateProps-69e16b7c.js.map +0 -1
- package/_internal/useFocusTrap-3114e5e8.js +0 -112
- package/_internal/useFocusTrap-3114e5e8.js.map +0 -1
- package/_internal/useId-3a1facc0.js +0 -18
- package/_internal/useId-3a1facc0.js.map +0 -1
- package/_internal/useRovingTabIndex-7daf0f24.js +0 -77
- package/_internal/useRovingTabIndex-7daf0f24.js.map +0 -1
- package/_internal/useTransitionVisibility-321fdbfa.js +0 -50
- package/_internal/useTransitionVisibility-321fdbfa.js.map +0 -1
- package/_internal/wrapChildrenIconWithSpaces-e6038f72.js +0 -20
- package/_internal/wrapChildrenIconWithSpaces-e6038f72.js.map +0 -1
|
@@ -1,117 +0,0 @@
|
|
|
1
|
-
import { f as forwardRef, c as classNames } from './forwardRef-d0e90329.js';
|
|
2
|
-
import { getRootClassName, getTypographyClassName, handleBasicClasses, fontColorClass } from '@lumx/core/js/utils/className';
|
|
3
|
-
import React__default from 'react';
|
|
4
|
-
import { u as useTooltipContext } from './context-9d1336a1.js';
|
|
5
|
-
import { V as VISUALLY_HIDDEN } from './constants-d0e3f49e.js';
|
|
6
|
-
import { u as useMergeRefs } from './mergeRefs-f0d7d6ea.js';
|
|
7
|
-
import { w as wrapChildrenIconWithSpaces } from './wrapChildrenIconWithSpaces-e6038f72.js';
|
|
8
|
-
import { jsx } from 'react/jsx-runtime';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Compute a tooltip label based on a label element `innerText` if the text overflows.
|
|
12
|
-
* Updates dynamically on content changes (but not on resize!)
|
|
13
|
-
*/
|
|
14
|
-
const useOverflowTooltipLabel = content => {
|
|
15
|
-
const parentTooltip = useTooltipContext();
|
|
16
|
-
const [tooltipLabel, setTooltipLabel] = React__default.useState(undefined);
|
|
17
|
-
const [labelElement, setLabelElement] = React__default.useState(null);
|
|
18
|
-
React__default.useLayoutEffect(() => {
|
|
19
|
-
if (
|
|
20
|
-
// Not inside a tooltip
|
|
21
|
-
!parentTooltip && labelElement &&
|
|
22
|
-
// Not inside a visually hidden
|
|
23
|
-
!labelElement?.closest(`.${VISUALLY_HIDDEN}`) &&
|
|
24
|
-
// Text overflows
|
|
25
|
-
labelElement.offsetWidth < labelElement.scrollWidth) {
|
|
26
|
-
// Set tooltip label
|
|
27
|
-
setTooltipLabel(labelElement.innerText);
|
|
28
|
-
} else {
|
|
29
|
-
setTooltipLabel(undefined);
|
|
30
|
-
}
|
|
31
|
-
}, [labelElement, parentTooltip, content]);
|
|
32
|
-
return {
|
|
33
|
-
labelRef: setLabelElement,
|
|
34
|
-
tooltipLabel
|
|
35
|
-
};
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
/**
|
|
39
|
-
* Component display name.
|
|
40
|
-
*/
|
|
41
|
-
const COMPONENT_NAME = 'Text';
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Component default class name and class prefix.
|
|
45
|
-
*/
|
|
46
|
-
const CLASSNAME = getRootClassName(COMPONENT_NAME);
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Component default props.
|
|
50
|
-
*/
|
|
51
|
-
const DEFAULT_PROPS = {};
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Text component.
|
|
55
|
-
*
|
|
56
|
-
* @param props Component props.
|
|
57
|
-
* @param ref Component ref.
|
|
58
|
-
* @return React element.
|
|
59
|
-
*/
|
|
60
|
-
const Text = forwardRef((props, ref) => {
|
|
61
|
-
const {
|
|
62
|
-
as: Component,
|
|
63
|
-
children,
|
|
64
|
-
className,
|
|
65
|
-
color,
|
|
66
|
-
colorVariant,
|
|
67
|
-
noWrap,
|
|
68
|
-
typography,
|
|
69
|
-
truncate,
|
|
70
|
-
whiteSpace,
|
|
71
|
-
style,
|
|
72
|
-
...forwardedProps
|
|
73
|
-
} = props;
|
|
74
|
-
const typographyClass = typography && getTypographyClassName(typography);
|
|
75
|
-
|
|
76
|
-
// Truncate mode
|
|
77
|
-
const truncateLinesStyle = typeof truncate === 'object' && truncate.lines > 1 && {
|
|
78
|
-
'--lumx-text-truncate-lines': truncate.lines
|
|
79
|
-
};
|
|
80
|
-
const isTruncatedMultiline = !!truncateLinesStyle;
|
|
81
|
-
const isTruncated = !!truncate;
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Add custom white-space style if specified
|
|
85
|
-
* Disabled if noWrap is specified
|
|
86
|
-
* Disabled if truncated on one-line
|
|
87
|
-
* */
|
|
88
|
-
const whiteSpaceStyle = !noWrap && !(isTruncated && !isTruncatedMultiline) && whiteSpace && {
|
|
89
|
-
'--lumx-text-white-space': whiteSpace
|
|
90
|
-
};
|
|
91
|
-
const {
|
|
92
|
-
tooltipLabel,
|
|
93
|
-
labelRef
|
|
94
|
-
} = useOverflowTooltipLabel(children);
|
|
95
|
-
return /*#__PURE__*/jsx(Component, {
|
|
96
|
-
ref: useMergeRefs(ref, labelRef),
|
|
97
|
-
className: classNames(className, handleBasicClasses({
|
|
98
|
-
prefix: CLASSNAME,
|
|
99
|
-
isTruncated: isTruncated && !isTruncatedMultiline,
|
|
100
|
-
isTruncatedMultiline
|
|
101
|
-
}), typographyClass, fontColorClass(color, colorVariant), noWrap && `${CLASSNAME}--no-wrap`),
|
|
102
|
-
title: tooltipLabel,
|
|
103
|
-
style: {
|
|
104
|
-
...truncateLinesStyle,
|
|
105
|
-
...whiteSpaceStyle,
|
|
106
|
-
...style
|
|
107
|
-
},
|
|
108
|
-
...forwardedProps,
|
|
109
|
-
children: wrapChildrenIconWithSpaces(children)
|
|
110
|
-
});
|
|
111
|
-
});
|
|
112
|
-
Text.displayName = COMPONENT_NAME;
|
|
113
|
-
Text.className = CLASSNAME;
|
|
114
|
-
Text.defaultProps = DEFAULT_PROPS;
|
|
115
|
-
|
|
116
|
-
export { Text as T, useOverflowTooltipLabel as u };
|
|
117
|
-
//# sourceMappingURL=index-ab520e78.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-ab520e78.js","sources":["../../src/hooks/useOverflowTooltipLabel.tsx","../../src/components/text/Text.tsx"],"sourcesContent":["import React from 'react';\nimport { useTooltipContext } from '@lumx/react/components/tooltip/context';\nimport { VISUALLY_HIDDEN } from '@lumx/react/constants';\n\n/**\n * Compute a tooltip label based on a label element `innerText` if the text overflows.\n * Updates dynamically on content changes (but not on resize!)\n */\nexport const useOverflowTooltipLabel = (content: React.ReactNode) => {\n const parentTooltip = useTooltipContext();\n const [tooltipLabel, setTooltipLabel] = React.useState<string | undefined>(undefined);\n const [labelElement, setLabelElement] = React.useState<HTMLElement | null>(null);\n\n React.useLayoutEffect(() => {\n if (\n // Not inside a tooltip\n !parentTooltip &&\n labelElement &&\n // Not inside a visually hidden\n !labelElement?.closest(`.${VISUALLY_HIDDEN}`) &&\n // Text overflows\n labelElement.offsetWidth < labelElement.scrollWidth\n ) {\n // Set tooltip label\n setTooltipLabel(labelElement.innerText);\n } else {\n setTooltipLabel(undefined);\n }\n }, [labelElement, parentTooltip, content]);\n\n return { labelRef: setLabelElement, tooltipLabel };\n};\n","import classNames from 'classnames';\n\nimport { ColorWithVariants, ColorVariant, Typography, WhiteSpace } from '@lumx/react';\nimport { GenericProps, TextElement } from '@lumx/react/utils/type';\nimport {\n fontColorClass,\n getRootClassName,\n handleBasicClasses,\n getTypographyClassName,\n} from '@lumx/core/js/utils/className';\nimport { useOverflowTooltipLabel } from '@lumx/react/hooks/useOverflowTooltipLabel';\nimport { useMergeRefs } from '@lumx/react/utils/react/mergeRefs';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\nimport { wrapChildrenIconWithSpaces } from '@lumx/react/utils/react/wrapChildrenIconWithSpaces';\n\n/**\n * Defines the props of the component.\n */\nexport interface TextProps extends GenericProps {\n /**\n * Color variant.\n */\n color?: ColorWithVariants;\n /**\n * Lightened or darkened variant of the selected color.\n */\n colorVariant?: ColorVariant;\n /**\n * Typography variant.\n */\n typography?: Typography;\n /**\n * Custom component to render the text.\n */\n as: TextElement;\n /**\n * Control whether the text should truncate or not.\n * Setting as `true` will make the text truncate on a single line.\n * Setting as `{ lines: number }` will make the text truncate on a multiple lines.\n */\n truncate?: boolean | { lines: number };\n /**\n * Prevents text to wrap on multiple lines\n * (automatically activated when single line text truncate is activated).\n */\n noWrap?: boolean;\n /**\n * WhiteSpace variant\n * Ignored when `noWrap` is set to true\n * Ignored when `truncate` is set to true or lines: 1\n * */\n whiteSpace?: WhiteSpace;\n /**\n * Children\n */\n children?: React.ReactNode;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Text';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS = {} as const;\n\n/**\n * Text component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Text = forwardRef<TextProps>((props, ref) => {\n const {\n as: Component,\n children,\n className,\n color,\n colorVariant,\n noWrap,\n typography,\n truncate,\n whiteSpace,\n style,\n ...forwardedProps\n } = props;\n\n const typographyClass = typography && getTypographyClassName(typography);\n\n // Truncate mode\n const truncateLinesStyle = typeof truncate === 'object' &&\n truncate.lines > 1 && { '--lumx-text-truncate-lines': truncate.lines };\n const isTruncatedMultiline = !!truncateLinesStyle;\n const isTruncated = !!truncate;\n\n /**\n * Add custom white-space style if specified\n * Disabled if noWrap is specified\n * Disabled if truncated on one-line\n * */\n const whiteSpaceStyle = !noWrap &&\n !(isTruncated && !isTruncatedMultiline) &&\n whiteSpace && { '--lumx-text-white-space': whiteSpace };\n\n const { tooltipLabel, labelRef } = useOverflowTooltipLabel(children);\n\n return (\n <Component\n ref={useMergeRefs(ref as React.Ref<any>, labelRef)}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n isTruncated: isTruncated && !isTruncatedMultiline,\n isTruncatedMultiline,\n }),\n typographyClass,\n fontColorClass(color, colorVariant),\n noWrap && `${CLASSNAME}--no-wrap`,\n )}\n title={tooltipLabel}\n style={{ ...truncateLinesStyle, ...whiteSpaceStyle, ...style }}\n {...forwardedProps}\n >\n {wrapChildrenIconWithSpaces(children)}\n </Component>\n );\n});\nText.displayName = COMPONENT_NAME;\nText.className = CLASSNAME;\nText.defaultProps = DEFAULT_PROPS;\n"],"names":["useOverflowTooltipLabel","content","parentTooltip","useTooltipContext","tooltipLabel","setTooltipLabel","React","useState","undefined","labelElement","setLabelElement","useLayoutEffect","closest","VISUALLY_HIDDEN","offsetWidth","scrollWidth","innerText","labelRef","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","Text","forwardRef","props","ref","as","Component","children","className","color","colorVariant","noWrap","typography","truncate","whiteSpace","style","forwardedProps","typographyClass","getTypographyClassName","truncateLinesStyle","lines","isTruncatedMultiline","isTruncated","whiteSpaceStyle","_jsx","useMergeRefs","classNames","handleBasicClasses","prefix","fontColorClass","title","wrapChildrenIconWithSpaces","displayName","defaultProps"],"mappings":"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"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
const mdiAlert = 'M13 14h-2V9h2m0 9h-2v-2h2M1 21h22L12 2z';
|
|
2
|
-
|
|
3
|
-
const mdiInformation = 'M13 9h-2V7h2m0 10h-2v-6h2m-1-9A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2';
|
|
4
|
-
|
|
5
|
-
export { mdiInformation as a, mdiAlert as m };
|
|
6
|
-
//# sourceMappingURL=information-49bbeed3.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"information-49bbeed3.js","sources":["../../../lumx-icons/dist/esm/alert.js","../../../lumx-icons/dist/esm/information.js"],"sourcesContent":["export const mdiAlert = /*#__PURE__*/ 'M13 14h-2V9h2m0 9h-2v-2h2M1 21h22L12 2z';","export const mdiInformation = /*#__PURE__*/ 'M13 9h-2V7h2m0 10h-2v-6h2m-1-9A10 10 0 0 0 2 12a10 10 0 0 0 10 10 10 10 0 0 0 10-10A10 10 0 0 0 12 2';"],"names":["mdiAlert","mdiInformation"],"mappings":"AAAaA,MAAAA,QAAQ,GAAiB;;ACAzBC,MAAAA,cAAc,GAAiB;;;;"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Properties of a component to use to determine its name.
|
|
3
|
-
* In the order of preference.
|
|
4
|
-
*/
|
|
5
|
-
const NAME_PROPERTIES = ['type', 'type.displayName', 'displayName', 'name', 'type.name', 'props.mdxType', '_reactInternalFiber.elementType.name'];
|
|
6
|
-
/**
|
|
7
|
-
* Create a predicate function that checks if a ReactNode is a react element from the given component.
|
|
8
|
-
*
|
|
9
|
-
* @param component React function component or the component name
|
|
10
|
-
* @return predicate returning true if value is instance of the component
|
|
11
|
-
*/
|
|
12
|
-
const isComponent = component => instance => {
|
|
13
|
-
const componentName = typeof component === 'string' ? component : component.displayName;
|
|
14
|
-
return !!instance.$$typeof && NAME_PROPERTIES.some(nameProperty => instance[nameProperty] === componentName);
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
export { isComponent as i };
|
|
18
|
-
//# sourceMappingURL=isComponent-b9762ff1.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"isComponent-b9762ff1.js","sources":["../../src/utils/type/isComponent.ts"],"sourcesContent":["import type { ReactElement, ReactNode } from 'react';\nimport type { Comp } from './Comp';\n\n/**\n * Properties of a component to use to determine its name.\n * In the order of preference.\n */\nconst NAME_PROPERTIES: string[] = [\n 'type',\n 'type.displayName',\n 'displayName',\n 'name',\n 'type.name',\n 'props.mdxType',\n '_reactInternalFiber.elementType.name',\n];\n/**\n * Create a predicate function that checks if a ReactNode is a react element from the given component.\n *\n * @param component React function component or the component name\n * @return predicate returning true if value is instance of the component\n */\nexport const isComponent =\n <C>(component: Comp<C, any> | string) =>\n (instance: ReactNode): instance is ReactElement => {\n const componentName = typeof component === 'string' ? component : component.displayName;\n\n return (\n !!(instance as any).$$typeof &&\n NAME_PROPERTIES.some((nameProperty: string): boolean => (instance as any)[nameProperty] === componentName)\n );\n };\n"],"names":["NAME_PROPERTIES","isComponent","component","instance","componentName","displayName","$$typeof","some","nameProperty"],"mappings":"AAGA;AACA;AACA;AACA;AACA,MAAMA,eAAyB,GAAG,CAC9B,MAAM,EACN,kBAAkB,EAClB,aAAa,EACb,MAAM,EACN,WAAW,EACX,eAAe,EACf,sCAAsC,CACzC,CAAA;AACD;AACA;AACA;AACA;AACA;AACA;MACaC,WAAW,GAChBC,SAAgC,IACnCC,QAAmB,IAA+B;EAC/C,MAAMC,aAAa,GAAG,OAAOF,SAAS,KAAK,QAAQ,GAAGA,SAAS,GAAGA,SAAS,CAACG,WAAW,CAAA;AAEvF,EAAA,OACI,CAAC,CAAEF,QAAQ,CAASG,QAAQ,IAC5BN,eAAe,CAACO,IAAI,CAAEC,YAAoB,IAAeL,QAAQ,CAASK,YAAY,CAAC,KAAKJ,aAAa,CAAC,CAAA;AAElH;;;;"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import React__default from 'react';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Similar to `isComponent` but more precise as it's not based on the component `displayName` but on the component function reference.
|
|
5
|
-
*/
|
|
6
|
-
const isComponentType = type => node => /*#__PURE__*/React__default.isValidElement(node) && node.type === type;
|
|
7
|
-
|
|
8
|
-
export { isComponentType as i };
|
|
9
|
-
//# sourceMappingURL=isComponentType-e806b848.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"isComponentType-e806b848.js","sources":["../../src/utils/type/isComponentType.ts"],"sourcesContent":["import React, { ReactElement, ReactNode } from 'react';\n\n/**\n * Similar to `isComponent` but more precise as it's not based on the component `displayName` but on the component function reference.\n */\nexport const isComponentType =\n (type: ReactElement['type']) =>\n (node: ReactNode): node is ReactElement =>\n React.isValidElement(node) && node.type === type;\n"],"names":["isComponentType","type","node","React","isValidElement"],"mappings":";;AAEA;AACA;AACA;MACaA,eAAe,GACvBC,IAA0B,IAC1BC,IAAe,iBACZC,cAAK,CAACC,cAAc,CAACF,IAAI,CAAC,IAAIA,IAAI,CAACD,IAAI,KAAKA;;;;"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { useMemo } from 'react';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Merge refs into a single function ref.
|
|
5
|
-
*
|
|
6
|
-
* @param refs React references to merge.
|
|
7
|
-
* @return the merged ref.
|
|
8
|
-
*/
|
|
9
|
-
function mergeRefs(...refs) {
|
|
10
|
-
return value => refs.forEach(ref => {
|
|
11
|
-
if (typeof ref === 'function') {
|
|
12
|
-
ref(value);
|
|
13
|
-
} else if (ref) {
|
|
14
|
-
// eslint-disable-next-line no-param-reassign
|
|
15
|
-
ref.current = value;
|
|
16
|
-
}
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Same as `mergeRefs` but memoized
|
|
22
|
-
*/
|
|
23
|
-
const useMergeRefs = (...refs) => {
|
|
24
|
-
return useMemo(() => mergeRefs(...refs),
|
|
25
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
26
|
-
refs);
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export { mergeRefs as m, useMergeRefs as u };
|
|
30
|
-
//# sourceMappingURL=mergeRefs-f0d7d6ea.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mergeRefs-f0d7d6ea.js","sources":["../../src/utils/react/mergeRefs.ts"],"sourcesContent":["import { Falsy } from '@lumx/react/utils/type';\nimport { MutableRefObject, useMemo } from 'react';\n\ntype FnRef<T> = (value: T) => void;\n\n/**\n * Merge refs into a single function ref.\n *\n * @param refs React references to merge.\n * @return the merged ref.\n */\nexport function mergeRefs<T>(...refs: Array<MutableRefObject<T | null> | FnRef<T> | Falsy>): FnRef<T> {\n return (value) =>\n refs.forEach((ref) => {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n // eslint-disable-next-line no-param-reassign\n (ref as MutableRefObject<T>).current = value;\n }\n });\n}\n\n/**\n * Same as `mergeRefs` but memoized\n */\nexport const useMergeRefs = <T>(...refs: Array<MutableRefObject<T | null> | FnRef<T> | Falsy>) => {\n return useMemo(\n () => mergeRefs(...refs),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n refs,\n );\n};\n"],"names":["mergeRefs","refs","value","forEach","ref","current","useMergeRefs","useMemo"],"mappings":";;AAKA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,SAASA,CAAI,GAAGC,IAA0D,EAAY;AAClG,EAAA,OAAQC,KAAK,IACTD,IAAI,CAACE,OAAO,CAAEC,GAAG,IAAK;AAClB,IAAA,IAAI,OAAOA,GAAG,KAAK,UAAU,EAAE;MAC3BA,GAAG,CAACF,KAAK,CAAC,CAAA;KACb,MAAM,IAAIE,GAAG,EAAE;AACZ;MACCA,GAAG,CAAyBC,OAAO,GAAGH,KAAK,CAAA;AAChD,KAAA;AACJ,GAAC,CAAC,CAAA;AACV,CAAA;;AAEA;AACA;AACA;MACaI,YAAY,GAAGA,CAAI,GAAGL,IAA0D,KAAK;AAC9F,EAAA,OAAOM,OAAO,CACV,MAAMP,SAAS,CAAC,GAAGC,IAAI,CAAC;AACxB;AACAA,EAAAA,IACJ,CAAC,CAAA;AACL;;;;"}
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import { createContext, useContext, useEffect, useMemo, useCallback } from 'react';
|
|
2
|
-
import { u as useId } from './useId-3a1facc0.js';
|
|
3
|
-
|
|
4
|
-
const INIT_STATE = {
|
|
5
|
-
isLazy: true,
|
|
6
|
-
shouldActivateOnFocus: false,
|
|
7
|
-
activeTabIndex: 0,
|
|
8
|
-
ids: {
|
|
9
|
-
tab: [],
|
|
10
|
-
tabPanel: []
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
const reducer = (state, action) => {
|
|
14
|
-
switch (action.type) {
|
|
15
|
-
case 'update':
|
|
16
|
-
return {
|
|
17
|
-
...state,
|
|
18
|
-
...action.payload
|
|
19
|
-
};
|
|
20
|
-
case 'setActiveTabIndex':
|
|
21
|
-
{
|
|
22
|
-
if (state.activeTabIndex === action.payload) {
|
|
23
|
-
return state;
|
|
24
|
-
}
|
|
25
|
-
// Change active tab index.
|
|
26
|
-
return {
|
|
27
|
-
...state,
|
|
28
|
-
activeTabIndex: action.payload
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
case 'register':
|
|
32
|
-
{
|
|
33
|
-
const {
|
|
34
|
-
type,
|
|
35
|
-
id
|
|
36
|
-
} = action.payload;
|
|
37
|
-
// Append tab/tabPanel id in state.
|
|
38
|
-
return {
|
|
39
|
-
...state,
|
|
40
|
-
ids: {
|
|
41
|
-
...state.ids,
|
|
42
|
-
[type]: [...state.ids[type], id]
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
case 'unregister':
|
|
47
|
-
{
|
|
48
|
-
const {
|
|
49
|
-
type,
|
|
50
|
-
id
|
|
51
|
-
} = action.payload;
|
|
52
|
-
const index = state.ids[type].indexOf(id);
|
|
53
|
-
if (index === -1) return state;
|
|
54
|
-
// Remove tab & tab panel at index.
|
|
55
|
-
const tabIds = [...state.ids.tab];
|
|
56
|
-
tabIds.splice(index, 1);
|
|
57
|
-
const tabPanelIds = [...state.ids.tabPanel];
|
|
58
|
-
tabPanelIds.splice(index, 1);
|
|
59
|
-
return {
|
|
60
|
-
...state,
|
|
61
|
-
ids: {
|
|
62
|
-
tab: tabIds,
|
|
63
|
-
tabPanel: tabPanelIds
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
default:
|
|
68
|
-
return state;
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
const TabProviderContext = /*#__PURE__*/createContext(null);
|
|
72
|
-
/* eslint-disable react-hooks/rules-of-hooks */
|
|
73
|
-
const useTabProviderContext = (type, originalId) => {
|
|
74
|
-
const context = useContext(TabProviderContext);
|
|
75
|
-
if (!context) {
|
|
76
|
-
return undefined;
|
|
77
|
-
}
|
|
78
|
-
const [state, dispatch] = context;
|
|
79
|
-
|
|
80
|
-
// Current tab or tab panel id.
|
|
81
|
-
const generatedId = useId();
|
|
82
|
-
const id = originalId || generatedId;
|
|
83
|
-
useEffect(() => {
|
|
84
|
-
// On mount: register tab or tab panel id.
|
|
85
|
-
dispatch({
|
|
86
|
-
type: 'register',
|
|
87
|
-
payload: {
|
|
88
|
-
type,
|
|
89
|
-
id
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
return () => {
|
|
93
|
-
// On unmount: unregister tab or tab panel id.
|
|
94
|
-
dispatch({
|
|
95
|
-
type: 'unregister',
|
|
96
|
-
payload: {
|
|
97
|
-
type,
|
|
98
|
-
id
|
|
99
|
-
}
|
|
100
|
-
});
|
|
101
|
-
};
|
|
102
|
-
},
|
|
103
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
104
|
-
[]);
|
|
105
|
-
|
|
106
|
-
// Find tab/tabPanel index using it's id.
|
|
107
|
-
const index = useMemo(() => state.ids[type].indexOf(id), [state.ids, type, id]);
|
|
108
|
-
const tabId = useMemo(() => state.ids.tab[index] || '', [state, index]);
|
|
109
|
-
const tabPanelId = useMemo(() => state.ids.tabPanel[index] || '', [state, index]);
|
|
110
|
-
const isActive = useMemo(() => state.activeTabIndex === index, [state, index]);
|
|
111
|
-
const changeToTab = useCallback(() => dispatch({
|
|
112
|
-
type: 'setActiveTabIndex',
|
|
113
|
-
payload: index
|
|
114
|
-
}), [dispatch, index]);
|
|
115
|
-
return {
|
|
116
|
-
isLazy: state.isLazy,
|
|
117
|
-
shouldActivateOnFocus: state.shouldActivateOnFocus,
|
|
118
|
-
tabId,
|
|
119
|
-
tabPanelId,
|
|
120
|
-
isActive,
|
|
121
|
-
changeToTab
|
|
122
|
-
};
|
|
123
|
-
};
|
|
124
|
-
const useTabProviderContextState = () => {
|
|
125
|
-
const context = useContext(TabProviderContext);
|
|
126
|
-
return context?.[0];
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
export { INIT_STATE as I, TabProviderContext as T, useTabProviderContext as a, reducer as r, useTabProviderContextState as u };
|
|
130
|
-
//# sourceMappingURL=state-db358714.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state-db358714.js","sources":["../../src/components/tabs/state.ts"],"sourcesContent":["import { Dispatch, createContext, useCallback, useContext, useEffect, useMemo } from 'react';\nimport { useId } from '@lumx/react/hooks/useId';\n\ntype TabType = 'tab' | 'tabPanel';\n\nexport interface State {\n isLazy: boolean;\n shouldActivateOnFocus: boolean;\n activeTabIndex: number;\n ids: Record<TabType, string[]>;\n}\n\nexport const INIT_STATE: State = {\n isLazy: true,\n shouldActivateOnFocus: false,\n activeTabIndex: 0,\n ids: { tab: [], tabPanel: [] },\n};\n\nexport type Action =\n | { type: 'update'; payload: Partial<State> }\n | { type: 'setActiveTabIndex'; payload: number }\n | { type: 'register'; payload: { type: TabType; id: string } }\n | { type: 'unregister'; payload: { type: TabType; id: string } };\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case 'update':\n return { ...state, ...action.payload };\n case 'setActiveTabIndex': {\n if (state.activeTabIndex === action.payload) {\n return state;\n }\n // Change active tab index.\n return { ...state, activeTabIndex: action.payload };\n }\n case 'register': {\n const { type, id } = action.payload;\n // Append tab/tabPanel id in state.\n return { ...state, ids: { ...state.ids, [type]: [...state.ids[type], id] } };\n }\n case 'unregister': {\n const { type, id } = action.payload;\n const index = state.ids[type].indexOf(id);\n if (index === -1) return state;\n // Remove tab & tab panel at index.\n const tabIds = [...state.ids.tab];\n tabIds.splice(index, 1);\n const tabPanelIds = [...state.ids.tabPanel];\n tabPanelIds.splice(index, 1);\n return {\n ...state,\n ids: { tab: tabIds, tabPanel: tabPanelIds },\n };\n }\n default:\n return state;\n }\n};\n\nexport const TabProviderContext = createContext<[State, Dispatch<Action>] | null>(null);\n\nexport type TabState = Pick<Required<State>, 'isLazy' | 'shouldActivateOnFocus'> & {\n isActive: boolean;\n tabId: string;\n tabPanelId: string;\n changeToTab(): void;\n};\n\n/* eslint-disable react-hooks/rules-of-hooks */\nexport const useTabProviderContext = (type: TabType, originalId?: string): undefined | TabState => {\n const context = useContext(TabProviderContext);\n if (!context) {\n return undefined;\n }\n const [state, dispatch] = context;\n\n // Current tab or tab panel id.\n const generatedId = useId();\n const id = originalId || generatedId;\n\n useEffect(\n () => {\n // On mount: register tab or tab panel id.\n dispatch({ type: 'register', payload: { type, id } });\n return () => {\n // On unmount: unregister tab or tab panel id.\n dispatch({ type: 'unregister', payload: { type, id } });\n };\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n // Find tab/tabPanel index using it's id.\n const index = useMemo(() => state.ids[type].indexOf(id), [state.ids, type, id]);\n const tabId = useMemo(() => state.ids.tab[index] || '', [state, index]);\n const tabPanelId = useMemo(() => state.ids.tabPanel[index] || '', [state, index]);\n const isActive = useMemo(() => state.activeTabIndex === index, [state, index]);\n const changeToTab = useCallback(() => dispatch({ type: 'setActiveTabIndex', payload: index }), [dispatch, index]);\n return {\n isLazy: state.isLazy,\n shouldActivateOnFocus: state.shouldActivateOnFocus,\n tabId,\n tabPanelId,\n isActive,\n changeToTab,\n };\n};\n\nexport const useTabProviderContextState = (): State | undefined => {\n const context = useContext(TabProviderContext);\n return context?.[0];\n};\n"],"names":["INIT_STATE","isLazy","shouldActivateOnFocus","activeTabIndex","ids","tab","tabPanel","reducer","state","action","type","payload","id","index","indexOf","tabIds","splice","tabPanelIds","TabProviderContext","createContext","useTabProviderContext","originalId","context","useContext","undefined","dispatch","generatedId","useId","useEffect","useMemo","tabId","tabPanelId","isActive","changeToTab","useCallback","useTabProviderContextState"],"mappings":"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"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { useState, useCallback } from 'react';
|
|
2
|
-
|
|
3
|
-
const useBooleanState = defaultValue => {
|
|
4
|
-
const [booleanValue, setBoolean] = useState(defaultValue);
|
|
5
|
-
const setToFalse = useCallback(() => setBoolean(false), []);
|
|
6
|
-
const setToTrue = useCallback(() => setBoolean(true), []);
|
|
7
|
-
const toggleBoolean = useCallback(() => setBoolean(previousValue => !previousValue), []);
|
|
8
|
-
return [booleanValue, setToFalse, setToTrue, toggleBoolean];
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
export { useBooleanState as u };
|
|
12
|
-
//# sourceMappingURL=useBooleanState-2a3d237c.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useBooleanState-2a3d237c.js","sources":["../../src/hooks/useBooleanState.tsx"],"sourcesContent":["import { useCallback, useState } from 'react';\n\nexport const useBooleanState = (defaultValue: boolean): [boolean, () => void, () => void, () => void] => {\n const [booleanValue, setBoolean] = useState<boolean>(defaultValue);\n\n const setToFalse = useCallback(() => setBoolean(false), []);\n\n const setToTrue = useCallback(() => setBoolean(true), []);\n\n const toggleBoolean = useCallback(() => setBoolean((previousValue) => !previousValue), []);\n\n return [booleanValue, setToFalse, setToTrue, toggleBoolean];\n};\n"],"names":["useBooleanState","defaultValue","booleanValue","setBoolean","useState","setToFalse","useCallback","setToTrue","toggleBoolean","previousValue"],"mappings":";;AAEaA,MAAAA,eAAe,GAAIC,YAAqB,IAAoD;EACrG,MAAM,CAACC,YAAY,EAAEC,UAAU,CAAC,GAAGC,QAAQ,CAAUH,YAAY,CAAC,CAAA;EAElE,MAAMI,UAAU,GAAGC,WAAW,CAAC,MAAMH,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,CAAA;EAE3D,MAAMI,SAAS,GAAGD,WAAW,CAAC,MAAMH,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;AAEzD,EAAA,MAAMK,aAAa,GAAGF,WAAW,CAAC,MAAMH,UAAU,CAAEM,aAAa,IAAK,CAACA,aAAa,CAAC,EAAE,EAAE,CAAC,CAAA;EAE1F,OAAO,CAACP,YAAY,EAAEG,UAAU,EAAEE,SAAS,EAAEC,aAAa,CAAC,CAAA;AAC/D;;;;"}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { D as DOCUMENT } from './constants-d0e3f49e.js';
|
|
2
|
-
import { onEscapePressed } from '@lumx/core/js/utils';
|
|
3
|
-
import { useEffect } from 'react';
|
|
4
|
-
import { pull } from '@lumx/core/js/utils/collection/pull';
|
|
5
|
-
import { last } from '@lumx/core/js/utils/collection/last';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Keep track of listeners, only the last registered listener gets activated at any point (previously registered
|
|
9
|
-
* listener are disabled).
|
|
10
|
-
* When a listener gets unregistered, the previously registered listener gets enabled again.
|
|
11
|
-
*/
|
|
12
|
-
function makeListenerTowerContext() {
|
|
13
|
-
const LISTENERS = [];
|
|
14
|
-
return {
|
|
15
|
-
register(listener) {
|
|
16
|
-
// Disable previous listener.
|
|
17
|
-
last(LISTENERS)?.disable();
|
|
18
|
-
// Keep track of current listener.
|
|
19
|
-
LISTENERS.push(listener);
|
|
20
|
-
// Enable current listener.
|
|
21
|
-
listener.enable();
|
|
22
|
-
},
|
|
23
|
-
unregister(listener) {
|
|
24
|
-
// Disable current listener.
|
|
25
|
-
listener.disable();
|
|
26
|
-
// Remove current listener.
|
|
27
|
-
pull(LISTENERS, listener);
|
|
28
|
-
// Enable previous listener.
|
|
29
|
-
last(LISTENERS)?.enable();
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const LISTENERS = makeListenerTowerContext();
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Register a global listener on 'Escape' key pressed.
|
|
38
|
-
*
|
|
39
|
-
* If multiple listener are registered, only the last one is maintained. When a listener is unregistered, the previous
|
|
40
|
-
* one gets activated again.
|
|
41
|
-
*
|
|
42
|
-
* @param callback Callback
|
|
43
|
-
* @param closeOnEscape Disables the hook when false
|
|
44
|
-
*/
|
|
45
|
-
function useCallbackOnEscape(callback, closeOnEscape = true) {
|
|
46
|
-
useEffect(() => {
|
|
47
|
-
const rootElement = DOCUMENT?.body;
|
|
48
|
-
if (!closeOnEscape || !callback || !rootElement) {
|
|
49
|
-
return undefined;
|
|
50
|
-
}
|
|
51
|
-
const onKeyDown = onEscapePressed(callback);
|
|
52
|
-
const listener = {
|
|
53
|
-
enable: () => rootElement.addEventListener('keydown', onKeyDown),
|
|
54
|
-
disable: () => rootElement.removeEventListener('keydown', onKeyDown)
|
|
55
|
-
};
|
|
56
|
-
LISTENERS.register(listener);
|
|
57
|
-
return () => LISTENERS.unregister(listener);
|
|
58
|
-
}, [callback, closeOnEscape]);
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export { makeListenerTowerContext as m, useCallbackOnEscape as u };
|
|
62
|
-
//# sourceMappingURL=useCallbackOnEscape-0b220f9c.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useCallbackOnEscape-0b220f9c.js","sources":["../../src/utils/function/makeListenerTowerContext.ts","../../src/hooks/useCallbackOnEscape.ts"],"sourcesContent":["import { pull } from '@lumx/core/js/utils/collection/pull';\nimport { last } from '@lumx/core/js/utils/collection/last';\n\nexport type Listener = { enable(): void; disable(): void };\n\n/**\n * Keep track of listeners, only the last registered listener gets activated at any point (previously registered\n * listener are disabled).\n * When a listener gets unregistered, the previously registered listener gets enabled again.\n */\nexport function makeListenerTowerContext() {\n const LISTENERS: Listener[] = [];\n\n return {\n register(listener: Listener) {\n // Disable previous listener.\n last(LISTENERS)?.disable();\n // Keep track of current listener.\n LISTENERS.push(listener);\n // Enable current listener.\n listener.enable();\n },\n unregister(listener: Listener) {\n // Disable current listener.\n listener.disable();\n // Remove current listener.\n pull(LISTENERS, listener);\n // Enable previous listener.\n last(LISTENERS)?.enable();\n },\n };\n}\n","import { DOCUMENT } from '@lumx/react/constants';\nimport { Callback } from '@lumx/react/utils/type';\nimport { onEscapePressed } from '@lumx/core/js/utils';\nimport { useEffect } from 'react';\nimport { Listener, makeListenerTowerContext } from '@lumx/react/utils/function/makeListenerTowerContext';\n\nconst LISTENERS = makeListenerTowerContext();\n\n/**\n * Register a global listener on 'Escape' key pressed.\n *\n * If multiple listener are registered, only the last one is maintained. When a listener is unregistered, the previous\n * one gets activated again.\n *\n * @param callback Callback\n * @param closeOnEscape Disables the hook when false\n */\nexport function useCallbackOnEscape(callback: Callback | undefined, closeOnEscape = true) {\n useEffect(() => {\n const rootElement = DOCUMENT?.body;\n if (!closeOnEscape || !callback || !rootElement) {\n return undefined;\n }\n const onKeyDown = onEscapePressed(callback);\n\n const listener: Listener = {\n enable: () => rootElement.addEventListener('keydown', onKeyDown),\n disable: () => rootElement.removeEventListener('keydown', onKeyDown),\n };\n\n LISTENERS.register(listener);\n return () => LISTENERS.unregister(listener);\n }, [callback, closeOnEscape]);\n}\n"],"names":["makeListenerTowerContext","LISTENERS","register","listener","last","disable","push","enable","unregister","pull","useCallbackOnEscape","callback","closeOnEscape","useEffect","rootElement","DOCUMENT","body","undefined","onKeyDown","onEscapePressed","addEventListener","removeEventListener"],"mappings":";;;;;;AAKA;AACA;AACA;AACA;AACA;AACO,SAASA,wBAAwBA,GAAG;EACvC,MAAMC,SAAqB,GAAG,EAAE,CAAA;EAEhC,OAAO;IACHC,QAAQA,CAACC,QAAkB,EAAE;AACzB;AACAC,MAAAA,IAAI,CAACH,SAAS,CAAC,EAAEI,OAAO,EAAE,CAAA;AAC1B;AACAJ,MAAAA,SAAS,CAACK,IAAI,CAACH,QAAQ,CAAC,CAAA;AACxB;MACAA,QAAQ,CAACI,MAAM,EAAE,CAAA;KACpB;IACDC,UAAUA,CAACL,QAAkB,EAAE;AAC3B;MACAA,QAAQ,CAACE,OAAO,EAAE,CAAA;AAClB;AACAI,MAAAA,IAAI,CAACR,SAAS,EAAEE,QAAQ,CAAC,CAAA;AACzB;AACAC,MAAAA,IAAI,CAACH,SAAS,CAAC,EAAEM,MAAM,EAAE,CAAA;AAC7B,KAAA;GACH,CAAA;AACL;;ACzBA,MAAMN,SAAS,GAAGD,wBAAwB,EAAE,CAAA;;AAE5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASU,mBAAmBA,CAACC,QAA8B,EAAEC,aAAa,GAAG,IAAI,EAAE;AACtFC,EAAAA,SAAS,CAAC,MAAM;AACZ,IAAA,MAAMC,WAAW,GAAGC,QAAQ,EAAEC,IAAI,CAAA;IAClC,IAAI,CAACJ,aAAa,IAAI,CAACD,QAAQ,IAAI,CAACG,WAAW,EAAE;AAC7C,MAAA,OAAOG,SAAS,CAAA;AACpB,KAAA;AACA,IAAA,MAAMC,SAAS,GAAGC,eAAe,CAACR,QAAQ,CAAC,CAAA;AAE3C,IAAA,MAAMR,QAAkB,GAAG;MACvBI,MAAM,EAAEA,MAAMO,WAAW,CAACM,gBAAgB,CAAC,SAAS,EAAEF,SAAS,CAAC;MAChEb,OAAO,EAAEA,MAAMS,WAAW,CAACO,mBAAmB,CAAC,SAAS,EAAEH,SAAS,CAAA;KACtE,CAAA;AAEDjB,IAAAA,SAAS,CAACC,QAAQ,CAACC,QAAQ,CAAC,CAAA;AAC5B,IAAA,OAAO,MAAMF,SAAS,CAACO,UAAU,CAACL,QAAQ,CAAC,CAAA;AAC/C,GAAC,EAAE,CAACQ,QAAQ,EAAEC,aAAa,CAAC,CAAC,CAAA;AACjC;;;;"}
|