@lumx/react 2.2.20-alpha.xss.datatable → 2.2.20
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/esm/_internal/ClickAwayProvider.js +90 -12
- package/esm/_internal/ClickAwayProvider.js.map +1 -1
- package/esm/_internal/DatePickerField.js +18 -11
- package/esm/_internal/DatePickerField.js.map +1 -1
- package/esm/_internal/Dialog2.js +2 -2
- package/esm/_internal/Dialog2.js.map +1 -1
- package/esm/_internal/GenericBlock.js +90 -0
- package/esm/_internal/GenericBlock.js.map +1 -0
- package/esm/_internal/Lightbox2.js +2 -2
- package/esm/_internal/Lightbox2.js.map +1 -1
- package/esm/_internal/LinkPreview.js +22 -12
- package/esm/_internal/LinkPreview.js.map +1 -1
- package/esm/_internal/Popover2.js +21 -8
- package/esm/_internal/Popover2.js.map +1 -1
- package/esm/_internal/SelectMultiple.js +16 -4
- package/esm/_internal/SelectMultiple.js.map +1 -1
- package/esm/_internal/alert-dialog.js +2 -2
- package/esm/_internal/autocomplete.js +2 -1
- package/esm/_internal/autocomplete.js.map +1 -1
- package/esm/_internal/button.js +2 -1
- package/esm/_internal/button.js.map +1 -1
- package/esm/_internal/comment-block.js +2 -1
- package/esm/_internal/comment-block.js.map +1 -1
- package/esm/_internal/date-picker.js +3 -2
- package/esm/_internal/date-picker.js.map +1 -1
- package/esm/_internal/dialog.js +2 -2
- package/esm/_internal/dropdown.js +2 -1
- package/esm/_internal/dropdown.js.map +1 -1
- package/esm/_internal/expansion-panel.js +1 -1
- package/esm/_internal/generic-block.js +12 -0
- package/esm/_internal/generic-block.js.map +1 -0
- package/esm/_internal/lightbox.js +3 -2
- package/esm/_internal/lightbox.js.map +1 -1
- package/esm/_internal/popover.js +2 -1
- package/esm/_internal/popover.js.map +1 -1
- package/esm/_internal/select.js +2 -1
- package/esm/_internal/select.js.map +1 -1
- package/esm/_internal/side-navigation.js +2 -1
- package/esm/_internal/side-navigation.js.map +1 -1
- package/esm/_internal/slideshow.js +2 -1
- package/esm/_internal/slideshow.js.map +1 -1
- package/esm/_internal/text-field.js +2 -1
- package/esm/_internal/text-field.js.map +1 -1
- package/esm/_internal/tooltip.js +2 -1
- package/esm/_internal/tooltip.js.map +1 -1
- package/esm/_internal/type.js.map +1 -1
- package/esm/_internal/useFocusTrap.js +62 -78
- package/esm/_internal/useFocusTrap.js.map +1 -1
- package/esm/index.js +3 -2
- package/esm/index.js.map +1 -1
- package/package.json +4 -4
- package/src/components/date-picker/DatePickerField.tsx +15 -16
- package/src/components/date-picker/types.ts +2 -2
- package/src/components/dialog/Dialog.stories.tsx +53 -13
- package/src/components/dialog/Dialog.tsx +1 -1
- package/src/components/dialog/__snapshots__/Dialog.test.tsx.snap +75 -14
- package/src/components/generic-block/GenericBlock.stories.tsx +149 -0
- package/src/components/generic-block/GenericBlock.test.tsx +28 -0
- package/src/components/generic-block/GenericBlock.tsx +120 -0
- package/src/components/generic-block/__snapshots__/GenericBlock.test.tsx.snap +92 -0
- package/src/components/generic-block/index.ts +1 -0
- package/src/components/lightbox/Lightbox.tsx +1 -1
- package/src/components/link-preview/LinkPreview.test.tsx +50 -55
- package/src/components/link-preview/LinkPreview.tsx +43 -16
- package/src/components/popover/Popover.tsx +20 -4
- package/src/components/select/Select.stories.tsx +2 -0
- package/src/components/select/Select.tsx +11 -1
- package/src/components/select/SelectMultiple.stories.tsx +2 -0
- package/src/components/select/SelectMultiple.tsx +11 -1
- package/src/components/select/constants.ts +2 -0
- package/src/components/table/__snapshots__/Table.test.tsx.snap +5 -0
- package/src/hooks/useCallbackOnEscape.ts +21 -13
- package/src/hooks/useFocusTrap.ts +68 -51
- package/src/index.ts +1 -0
- package/src/stories/generated/GenericBlock/Demos.stories.tsx +6 -0
- package/src/utils/makeListenerTowerContext.ts +32 -0
- package/src/utils/type.ts +3 -0
- package/types.d.ts +48 -5
- package/src/components/link-preview/__snapshots__/LinkPreview.test.tsx.snap +0 -51
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Lightbox2.js","sources":["../../../src/components/lightbox/Lightbox.tsx"],"sourcesContent":["import React, { forwardRef, RefObject, useRef, useEffect } from 'react';\n\nimport classNames from 'classnames';\nimport { createPortal } from 'react-dom';\n\nimport { mdiClose } from '@lumx/icons';\nimport { ColorPalette, Emphasis, IconButton, IconButtonProps, Theme } from '@lumx/react';\nimport { DOCUMENT } from '@lumx/react/constants';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\nimport { useFocusTrap } from '@lumx/react/hooks/useFocusTrap';\nimport { useDelayedVisibility } from '@lumx/react/hooks/useDelayedVisibility';\nimport { useDisableBodyScroll } from '@lumx/react/hooks/useDisableBodyScroll';\nimport { ClickAwayProvider } from '@lumx/react/utils/ClickAwayProvider';\nimport { mergeRefs } from '@lumx/react/utils/mergeRefs';\nimport { useCallbackOnEscape } from '@lumx/react/hooks/useCallbackOnEscape';\n\nconst LIGHTBOX_TRANSITION_DURATION = 400;\n\n/**\n * Defines the props of the component.\n */\nexport interface LightboxProps extends GenericProps {\n /** Props to pass to the close button (minus those already set by the Lightbox props). */\n closeButtonProps?: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n /** Whether the component is open or not. */\n isOpen?: boolean;\n /** Reference to the element that triggered modal opening to set focus on. */\n parentElement: RefObject<any>;\n /** Whether to keep the dialog open on clickaway or escape press. */\n preventAutoClose?: boolean;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** Z-axis position. */\n zIndex?: number;\n /** On close callback. */\n onClose?(): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Lightbox';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Lightbox component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Lightbox: Comp<LightboxProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n ariaLabel,\n children,\n className,\n closeButtonProps,\n isOpen,\n onClose,\n parentElement,\n preventAutoClose,\n theme,\n zIndex,\n ...forwardedProps\n } = props;\n if (!DOCUMENT) {\n // Can't render in SSR.\n return null;\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const childrenRef = useRef<any>(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useDisableBodyScroll(isOpen && wrapperRef.current);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const isVisible = useDelayedVisibility(!!isOpen, LIGHTBOX_TRANSITION_DURATION);\n\n // Handle focus trap.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useFocusTrap(wrapperRef.current, childrenRef.current?.firstChild);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const previousOpen = useRef(isOpen);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n if (isOpen !== previousOpen.current) {\n previousOpen.current = isOpen;\n\n // Focus the parent element on close.\n if (!isOpen && parentElement && parentElement.current) {\n parentElement.current.focus();\n }\n }\n }, [isOpen, parentElement]);\n\n // Close lightbox on escape key pressed.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useCallbackOnEscape(onClose);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const clickAwayRefs = useRef([wrapperRef]);\n\n if (!isOpen && !isVisible) return null;\n\n return createPortal(\n /* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */\n <div\n ref={mergeRefs(ref, wrapperRef)}\n {...forwardedProps}\n aria-label={ariaLabel}\n aria-modal=\"true\"\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n isHidden: !isOpen,\n isShown: isOpen || isVisible,\n theme,\n }),\n )}\n style={{ zIndex }}\n >\n {closeButtonProps && (\n <IconButton\n {...closeButtonProps}\n className={`${CLASSNAME}__close`}\n color={ColorPalette.light}\n emphasis={Emphasis.low}\n icon={mdiClose}\n theme={theme}\n type=\"button\"\n onClick={onClose}\n />\n )}\n <ClickAwayProvider callback={!preventAutoClose && onClose} refs={clickAwayRefs}>\n <div ref={childrenRef} className={`${CLASSNAME}__wrapper`} role=\"presentation\">\n {children}\n </div>\n </ClickAwayProvider>\n </div>,\n document.body,\n );\n});\nLightbox.displayName = COMPONENT_NAME;\nLightbox.className = CLASSNAME;\n"],"names":["LIGHTBOX_TRANSITION_DURATION","COMPONENT_NAME","CLASSNAME","getRootClassName","Lightbox","forwardRef","props","ref","ariaLabel","children","className","closeButtonProps","isOpen","onClose","parentElement","preventAutoClose","theme","zIndex","forwardedProps","DOCUMENT","childrenRef","useRef","wrapperRef","useDisableBodyScroll","current","isVisible","useDelayedVisibility","useFocusTrap","firstChild","previousOpen","useEffect","focus","useCallbackOnEscape","clickAwayRefs","createPortal","mergeRefs","classNames","handleBasicClasses","prefix","isHidden","isShown","ColorPalette","light","Emphasis","low","mdiClose","document","body","displayName"],"mappings":";;;;;;;;;;;;;;AAiBA,IAAMA,4BAA4B,GAAG,GAArC;AAEA;;;;AAqBA;;;AAGA,IAAMC,cAAc,GAAG,UAAvB;AAEA;;;;AAGA,IAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAD,CAAlC;AAEA;;;;;;;;IAOaG,QAA6C,GAAGC,UAAU,CAAC,UAACC,KAAD,EAAQC,GAAR,EAAgB;AAAA;;AAAA,MAEhFC,SAFgF,GAahFF,KAbgF,CAEhFE,SAFgF;AAAA,MAGhFC,QAHgF,GAahFH,KAbgF,CAGhFG,QAHgF;AAAA,MAIhFC,SAJgF,GAahFJ,KAbgF,CAIhFI,SAJgF;AAAA,MAKhFC,gBALgF,GAahFL,KAbgF,CAKhFK,gBALgF;AAAA,MAMhFC,MANgF,GAahFN,KAbgF,CAMhFM,MANgF;AAAA,MAOhFC,OAPgF,GAahFP,KAbgF,CAOhFO,OAPgF;AAAA,MAQhFC,aARgF,GAahFR,KAbgF,CAQhFQ,aARgF;AAAA,MAShFC,gBATgF,GAahFT,KAbgF,CAShFS,gBATgF;AAAA,MAUhFC,KAVgF,GAahFV,KAbgF,CAUhFU,KAVgF;AAAA,MAWhFC,MAXgF,GAahFX,KAbgF,CAWhFW,MAXgF;AAAA,MAY7EC,cAZ6E,4BAahFZ,KAbgF;;AAcpF,MAAI,CAACa,QAAL,EAAe;AACX;AACA,WAAO,IAAP;AACH,GAjBmF;;;AAoBpF,MAAMC,WAAW,GAAGC,MAAM,CAAM,IAAN,CAA1B,CApBoF;;AAsBpF,MAAMC,UAAU,GAAGD,MAAM,CAAiB,IAAjB,CAAzB,CAtBoF;;AAyBpFE,EAAAA,oBAAoB,CAACX,MAAM,IAAIU,UAAU,CAACE,OAAtB,CAApB,CAzBoF;;AA4BpF,MAAMC,SAAS,GAAGC,oBAAoB,CAAC,CAAC,CAACd,MAAH,EAAWZ,4BAAX,CAAtC,CA5BoF;AA+BpF;;AACA2B,EAAAA,YAAY,
|
|
1
|
+
{"version":3,"file":"Lightbox2.js","sources":["../../../src/components/lightbox/Lightbox.tsx"],"sourcesContent":["import React, { forwardRef, RefObject, useRef, useEffect } from 'react';\n\nimport classNames from 'classnames';\nimport { createPortal } from 'react-dom';\n\nimport { mdiClose } from '@lumx/icons';\nimport { ColorPalette, Emphasis, IconButton, IconButtonProps, Theme } from '@lumx/react';\nimport { DOCUMENT } from '@lumx/react/constants';\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses } from '@lumx/react/utils';\n\nimport { useFocusTrap } from '@lumx/react/hooks/useFocusTrap';\nimport { useDelayedVisibility } from '@lumx/react/hooks/useDelayedVisibility';\nimport { useDisableBodyScroll } from '@lumx/react/hooks/useDisableBodyScroll';\nimport { ClickAwayProvider } from '@lumx/react/utils/ClickAwayProvider';\nimport { mergeRefs } from '@lumx/react/utils/mergeRefs';\nimport { useCallbackOnEscape } from '@lumx/react/hooks/useCallbackOnEscape';\n\nconst LIGHTBOX_TRANSITION_DURATION = 400;\n\n/**\n * Defines the props of the component.\n */\nexport interface LightboxProps extends GenericProps {\n /** Props to pass to the close button (minus those already set by the Lightbox props). */\n closeButtonProps?: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis' | 'color'>;\n /** Whether the component is open or not. */\n isOpen?: boolean;\n /** Reference to the element that triggered modal opening to set focus on. */\n parentElement: RefObject<any>;\n /** Whether to keep the dialog open on clickaway or escape press. */\n preventAutoClose?: boolean;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** Z-axis position. */\n zIndex?: number;\n /** On close callback. */\n onClose?(): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Lightbox';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Lightbox component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Lightbox: Comp<LightboxProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n ariaLabel,\n children,\n className,\n closeButtonProps,\n isOpen,\n onClose,\n parentElement,\n preventAutoClose,\n theme,\n zIndex,\n ...forwardedProps\n } = props;\n if (!DOCUMENT) {\n // Can't render in SSR.\n return null;\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const childrenRef = useRef<any>(null);\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useDisableBodyScroll(isOpen && wrapperRef.current);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const isVisible = useDelayedVisibility(!!isOpen, LIGHTBOX_TRANSITION_DURATION);\n\n // Handle focus trap.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useFocusTrap(isOpen && wrapperRef.current, childrenRef.current?.firstChild);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const previousOpen = useRef(isOpen);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n if (isOpen !== previousOpen.current) {\n previousOpen.current = isOpen;\n\n // Focus the parent element on close.\n if (!isOpen && parentElement && parentElement.current) {\n parentElement.current.focus();\n }\n }\n }, [isOpen, parentElement]);\n\n // Close lightbox on escape key pressed.\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useCallbackOnEscape(onClose);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const clickAwayRefs = useRef([wrapperRef]);\n\n if (!isOpen && !isVisible) return null;\n\n return createPortal(\n /* eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions */\n <div\n ref={mergeRefs(ref, wrapperRef)}\n {...forwardedProps}\n aria-label={ariaLabel}\n aria-modal=\"true\"\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n isHidden: !isOpen,\n isShown: isOpen || isVisible,\n theme,\n }),\n )}\n style={{ zIndex }}\n >\n {closeButtonProps && (\n <IconButton\n {...closeButtonProps}\n className={`${CLASSNAME}__close`}\n color={ColorPalette.light}\n emphasis={Emphasis.low}\n icon={mdiClose}\n theme={theme}\n type=\"button\"\n onClick={onClose}\n />\n )}\n <ClickAwayProvider callback={!preventAutoClose && onClose} refs={clickAwayRefs}>\n <div ref={childrenRef} className={`${CLASSNAME}__wrapper`} role=\"presentation\">\n {children}\n </div>\n </ClickAwayProvider>\n </div>,\n document.body,\n );\n});\nLightbox.displayName = COMPONENT_NAME;\nLightbox.className = CLASSNAME;\n"],"names":["LIGHTBOX_TRANSITION_DURATION","COMPONENT_NAME","CLASSNAME","getRootClassName","Lightbox","forwardRef","props","ref","ariaLabel","children","className","closeButtonProps","isOpen","onClose","parentElement","preventAutoClose","theme","zIndex","forwardedProps","DOCUMENT","childrenRef","useRef","wrapperRef","useDisableBodyScroll","current","isVisible","useDelayedVisibility","useFocusTrap","firstChild","previousOpen","useEffect","focus","useCallbackOnEscape","clickAwayRefs","createPortal","mergeRefs","classNames","handleBasicClasses","prefix","isHidden","isShown","ColorPalette","light","Emphasis","low","mdiClose","document","body","displayName"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { b as _objectWithoutProperties, c as _extends } from './_rollupPluginBabelHelpers.js';
|
|
1
|
+
import { b as _objectWithoutProperties, c as _extends, _ as _objectSpread2 } from './_rollupPluginBabelHelpers.js';
|
|
2
2
|
import { AspectRatio, Theme, ColorPalette, ColorVariant, Size } from './components.js';
|
|
3
|
-
import React, { forwardRef
|
|
3
|
+
import React, { forwardRef } from 'react';
|
|
4
4
|
import { g as getRootClassName, c as classnames, h as handleBasicClasses } from './getRootClassName.js';
|
|
5
5
|
import { L as Link } from './Link2.js';
|
|
6
6
|
import { T as Thumbnail } from './Thumbnail2.js';
|
|
@@ -24,7 +24,8 @@ var CLASSNAME = getRootClassName(COMPONENT_NAME);
|
|
|
24
24
|
|
|
25
25
|
var DEFAULT_PROPS = {
|
|
26
26
|
size: Size.regular,
|
|
27
|
-
theme: Theme.light
|
|
27
|
+
theme: Theme.light,
|
|
28
|
+
titleHeading: 'h2'
|
|
28
29
|
};
|
|
29
30
|
/**
|
|
30
31
|
* LinkPreview component.
|
|
@@ -38,18 +39,18 @@ var LinkPreview = forwardRef(function (props, ref) {
|
|
|
38
39
|
var className = props.className,
|
|
39
40
|
description = props.description,
|
|
40
41
|
link = props.link,
|
|
42
|
+
linkAs = props.linkAs,
|
|
41
43
|
linkProps = props.linkProps,
|
|
42
44
|
size = props.size,
|
|
43
45
|
theme = props.theme,
|
|
44
46
|
thumbnailProps = props.thumbnailProps,
|
|
45
47
|
title = props.title,
|
|
46
|
-
|
|
48
|
+
titleHeading = props.titleHeading,
|
|
49
|
+
forwardedProps = _objectWithoutProperties(props, ["className", "description", "link", "linkAs", "linkProps", "size", "theme", "thumbnailProps", "title", "titleHeading"]); // Use title heading as title wrapper (see DEFAULT_PROPS for the default value).
|
|
47
50
|
|
|
48
51
|
|
|
49
|
-
var
|
|
50
|
-
|
|
51
|
-
}, [link]);
|
|
52
|
-
return React.createElement("div", _extends({
|
|
52
|
+
var TitleHeading = titleHeading;
|
|
53
|
+
return React.createElement("article", _extends({
|
|
53
54
|
ref: ref
|
|
54
55
|
}, forwardedProps, {
|
|
55
56
|
className: classnames(className, handleBasicClasses({
|
|
@@ -62,15 +63,21 @@ var LinkPreview = forwardRef(function (props, ref) {
|
|
|
62
63
|
}, thumbnailProps && React.createElement("div", {
|
|
63
64
|
className: "".concat(CLASSNAME, "__thumbnail")
|
|
64
65
|
}, React.createElement(Thumbnail, _extends({}, thumbnailProps, {
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
linkAs: linkAs,
|
|
67
|
+
linkProps: _objectSpread2({}, linkProps, {
|
|
68
|
+
href: link,
|
|
69
|
+
target: '_blank',
|
|
70
|
+
// Avoid redundant links in focus order
|
|
71
|
+
tabIndex: -1
|
|
72
|
+
}),
|
|
67
73
|
aspectRatio: AspectRatio.free,
|
|
68
74
|
fillHeight: true
|
|
69
75
|
}))), React.createElement("div", {
|
|
70
76
|
className: "".concat(CLASSNAME, "__container")
|
|
71
|
-
}, title && React.createElement(
|
|
77
|
+
}, title && React.createElement(TitleHeading, {
|
|
72
78
|
className: "".concat(CLASSNAME, "__title")
|
|
73
79
|
}, React.createElement(Link, _extends({}, linkProps, {
|
|
80
|
+
linkAs: linkAs,
|
|
74
81
|
target: "_blank",
|
|
75
82
|
href: link,
|
|
76
83
|
color: theme === Theme.light ? ColorPalette.dark : ColorPalette.light,
|
|
@@ -80,11 +87,14 @@ var LinkPreview = forwardRef(function (props, ref) {
|
|
|
80
87
|
}, description), React.createElement("div", {
|
|
81
88
|
className: "".concat(CLASSNAME, "__link")
|
|
82
89
|
}, React.createElement(Link, _extends({}, linkProps, {
|
|
90
|
+
linkAs: linkAs,
|
|
83
91
|
className: classnames("".concat(CLASSNAME, "__link"), linkProps === null || linkProps === void 0 ? void 0 : linkProps.className),
|
|
84
92
|
target: "_blank",
|
|
85
93
|
href: link,
|
|
86
94
|
color: theme === Theme.light ? ColorPalette.primary : ColorPalette.light,
|
|
87
|
-
colorVariant: ColorVariant.N
|
|
95
|
+
colorVariant: ColorVariant.N // Avoid redundant links in focus order
|
|
96
|
+
,
|
|
97
|
+
tabIndex: title ? '-1' : undefined
|
|
88
98
|
}), link)))));
|
|
89
99
|
});
|
|
90
100
|
LinkPreview.displayName = COMPONENT_NAME;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkPreview.js","sources":["../../../src/components/link-preview/LinkPreview.tsx"],"sourcesContent":["import React, { forwardRef
|
|
1
|
+
{"version":3,"file":"LinkPreview.js","sources":["../../../src/components/link-preview/LinkPreview.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport {\n AspectRatio,\n ColorPalette,\n ColorVariant,\n Link,\n LinkProps,\n Size,\n Theme,\n Thumbnail,\n ThumbnailProps,\n} from '@lumx/react';\n\nimport { Comp, GenericProps, getRootClassName, handleBasicClasses, HeadingElement } from '@lumx/react/utils';\n\n/**\n * Defines the props of the component.\n */\nexport interface LinkPreviewProps extends GenericProps {\n /** Description. */\n description?: string;\n /** Link URL. */\n link: string;\n /** Custom react component for the link (can be used to inject react router Link). */\n linkAs?: 'a' | any;\n /** Props to pass to the link (minus those already set by the LinkPreview props). */\n linkProps?: Omit<LinkProps, 'color' | 'colorVariant' | 'href' | 'target'>;\n /** Size variant. */\n size?: Extract<Size, 'regular' | 'big'>;\n /** Theme adapting the component to light or dark background. */\n theme?: Theme;\n /** Thumbnail for the link preview. */\n thumbnailProps?: ThumbnailProps;\n /** Title. */\n title?: string;\n /** Customize the title heading tag. */\n titleHeading?: HeadingElement;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'LinkPreview';\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 = {\n size: Size.regular,\n theme: Theme.light,\n titleHeading: 'h2',\n} as const;\n\n/**\n * LinkPreview component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const LinkPreview: Comp<LinkPreviewProps, HTMLDivElement> = forwardRef((props, ref) => {\n const {\n className,\n description,\n link,\n linkAs,\n linkProps,\n size,\n theme,\n thumbnailProps,\n title,\n titleHeading,\n ...forwardedProps\n } = props;\n // Use title heading as title wrapper (see DEFAULT_PROPS for the default value).\n const TitleHeading = titleHeading as HeadingElement;\n\n return (\n <article\n ref={ref}\n {...forwardedProps}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n size: size === Size.big && thumbnailProps ? Size.big : Size.regular,\n theme,\n }),\n )}\n >\n <div className={`${CLASSNAME}__wrapper`}>\n {thumbnailProps && (\n <div className={`${CLASSNAME}__thumbnail`}>\n <Thumbnail\n {...thumbnailProps}\n linkAs={linkAs}\n linkProps={{\n ...linkProps,\n href: link,\n target: '_blank',\n // Avoid redundant links in focus order\n tabIndex: -1,\n }}\n aspectRatio={AspectRatio.free}\n fillHeight\n />\n </div>\n )}\n\n <div className={`${CLASSNAME}__container`}>\n {title && (\n <TitleHeading className={`${CLASSNAME}__title`}>\n <Link\n {...linkProps}\n linkAs={linkAs}\n target=\"_blank\"\n href={link}\n color={theme === Theme.light ? ColorPalette.dark : ColorPalette.light}\n colorVariant={ColorVariant.N}\n >\n {title}\n </Link>\n </TitleHeading>\n )}\n\n {description && <p className={`${CLASSNAME}__description`}>{description}</p>}\n\n <div className={`${CLASSNAME}__link`}>\n <Link\n {...linkProps}\n linkAs={linkAs}\n className={classNames(`${CLASSNAME}__link`, linkProps?.className)}\n target=\"_blank\"\n href={link}\n color={theme === Theme.light ? ColorPalette.primary : ColorPalette.light}\n colorVariant={ColorVariant.N}\n // Avoid redundant links in focus order\n tabIndex={title ? '-1' : undefined}\n >\n {link}\n </Link>\n </div>\n </div>\n </div>\n </article>\n );\n});\n\nLinkPreview.displayName = COMPONENT_NAME;\nLinkPreview.className = CLASSNAME;\nLinkPreview.defaultProps = DEFAULT_PROPS;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","size","Size","regular","theme","Theme","light","titleHeading","LinkPreview","forwardRef","props","ref","className","description","link","linkAs","linkProps","thumbnailProps","title","forwardedProps","TitleHeading","classNames","handleBasicClasses","prefix","big","href","target","tabIndex","AspectRatio","free","ColorPalette","dark","ColorVariant","N","primary","undefined","displayName","defaultProps"],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { d as _slicedToArray, b as _objectWithoutProperties, _ as _objectSpread2, c as _extends } from './_rollupPluginBabelHelpers.js';
|
|
2
|
-
import React, { useState, useEffect, useLayoutEffect, useRef, useMemo, forwardRef } from 'react';
|
|
2
|
+
import React, { useState, useEffect, useLayoutEffect, useRef, useMemo, forwardRef, useCallback } from 'react';
|
|
3
3
|
import { g as getRootClassName, c as classnames, h as handleBasicClasses } from './getRootClassName.js';
|
|
4
4
|
import { D as DOCUMENT, W as WINDOW } from './constants.js';
|
|
5
5
|
import { m as mergeRefs } from './mergeRefs.js';
|
|
6
|
+
import { g as getFirstAndLastFocusable, u as useCallbackOnEscape, C as ClickAwayProvider } from './ClickAwayProvider.js';
|
|
6
7
|
import { createPortal } from 'react-dom';
|
|
7
|
-
import { u as useCallbackOnEscape, C as ClickAwayProvider } from './ClickAwayProvider.js';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Hook focusing an element when defined and `focus` boolean `true`.
|
|
@@ -2295,13 +2295,14 @@ var Popover = forwardRef(function (props, ref) {
|
|
|
2295
2295
|
isOpen = props.isOpen,
|
|
2296
2296
|
offset = props.offset,
|
|
2297
2297
|
onClose = props.onClose,
|
|
2298
|
+
parentElement = props.parentElement,
|
|
2298
2299
|
placement = props.placement,
|
|
2299
2300
|
style = props.style,
|
|
2300
2301
|
usePortal = props.usePortal,
|
|
2301
2302
|
zIndex = props.zIndex,
|
|
2302
2303
|
_props$focusAnchorOnC = props.focusAnchorOnClose,
|
|
2303
2304
|
focusAnchorOnClose = _props$focusAnchorOnC === void 0 ? true : _props$focusAnchorOnC,
|
|
2304
|
-
forwardedProps = _objectWithoutProperties(props, ["anchorRef", "boundaryRef", "children", "className", "closeOnClickAway", "closeOnEscape", "elevation", "fitToAnchorWidth", "fitWithinViewportHeight", "focusElement", "hasArrow", "isOpen", "offset", "onClose", "placement", "style", "usePortal", "zIndex", "focusAnchorOnClose"]); // eslint-disable-next-line react-hooks/rules-of-hooks
|
|
2305
|
+
forwardedProps = _objectWithoutProperties(props, ["anchorRef", "boundaryRef", "children", "className", "closeOnClickAway", "closeOnEscape", "elevation", "fitToAnchorWidth", "fitWithinViewportHeight", "focusElement", "hasArrow", "isOpen", "offset", "onClose", "parentElement", "placement", "style", "usePortal", "zIndex", "focusAnchorOnClose"]); // eslint-disable-next-line react-hooks/rules-of-hooks
|
|
2305
2306
|
|
|
2306
2307
|
|
|
2307
2308
|
var _useState = useState(),
|
|
@@ -2335,8 +2336,9 @@ var Popover = forwardRef(function (props, ref) {
|
|
|
2335
2336
|
}
|
|
2336
2337
|
});
|
|
2337
2338
|
/** Action on close */
|
|
2339
|
+
// eslint-disable-next-line react-hooks/rules-of-hooks
|
|
2338
2340
|
|
|
2339
|
-
var handleClose = function
|
|
2341
|
+
var handleClose = useCallback(function () {
|
|
2340
2342
|
if (!onClose) {
|
|
2341
2343
|
return;
|
|
2342
2344
|
}
|
|
@@ -2348,14 +2350,25 @@ var Popover = forwardRef(function (props, ref) {
|
|
|
2348
2350
|
|
|
2349
2351
|
|
|
2350
2352
|
if (isFocusedWithin.current && focusAnchorOnClose) {
|
|
2351
|
-
|
|
2353
|
+
if (parentElement === null || parentElement === void 0 ? void 0 : parentElement.current) {
|
|
2354
|
+
parentElement === null || parentElement === void 0 ? void 0 : parentElement.current.focus();
|
|
2355
|
+
}
|
|
2356
|
+
|
|
2357
|
+
var firstFocusable = (anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current) && getFirstAndLastFocusable(anchorRef === null || anchorRef === void 0 ? void 0 : anchorRef.current).first;
|
|
2358
|
+
|
|
2359
|
+
if (firstFocusable) {
|
|
2360
|
+
// Focus the first focusable element in anchor.
|
|
2361
|
+
firstFocusable.focus();
|
|
2362
|
+
} else {
|
|
2363
|
+
var _anchorRef$current;
|
|
2352
2364
|
|
|
2353
|
-
|
|
2365
|
+
// Fallback on the anchor element.
|
|
2366
|
+
anchorRef === null || anchorRef === void 0 ? void 0 : (_anchorRef$current = anchorRef.current) === null || _anchorRef$current === void 0 ? void 0 : _anchorRef$current.focus();
|
|
2367
|
+
}
|
|
2354
2368
|
}
|
|
2355
2369
|
|
|
2356
2370
|
onClose();
|
|
2357
|
-
};
|
|
2358
|
-
|
|
2371
|
+
}, [anchorRef, focusAnchorOnClose, onClose, parentElement]);
|
|
2359
2372
|
var modifiers = [];
|
|
2360
2373
|
var actualOffset = [(_ref5 = offset === null || offset === void 0 ? void 0 : offset.along) !== null && _ref5 !== void 0 ? _ref5 : 0, ((_ref6 = offset === null || offset === void 0 ? void 0 : offset.away) !== null && _ref6 !== void 0 ? _ref6 : 0) + (hasArrow ? ARROW_SIZE : 0)];
|
|
2361
2374
|
modifiers.push({
|