@lumx/react 3.20.1-alpha.26 → 3.20.1-alpha.27

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.
Files changed (114) hide show
  1. package/_internal/{Button-85482487.js → Button-2b55a913.js} +6 -7
  2. package/_internal/Button-2b55a913.js.map +1 -0
  3. package/_internal/ButtonRoot-823f3e9c.js.map +1 -1
  4. package/_internal/{Chip-a34f6905.js → Chip-e1e85810.js} +7 -10
  5. package/_internal/Chip-e1e85810.js.map +1 -0
  6. package/_internal/{ClickAwayProvider-7093ba23.js → ClickAwayProvider-1204f237.js} +2 -2
  7. package/_internal/ClickAwayProvider-1204f237.js.map +1 -0
  8. package/_internal/{IconButton-1a22c4c8.js → IconButton-be160cb0.js} +2 -2
  9. package/_internal/{IconButton-1a22c4c8.js.map → IconButton-be160cb0.js.map} +1 -1
  10. package/_internal/{ImageCaption-a0a6de5c.js → ImageCaption-fcf5720c.js} +2 -2
  11. package/_internal/{ImageCaption-a0a6de5c.js.map → ImageCaption-fcf5720c.js.map} +1 -1
  12. package/_internal/{List-54237e0e.js → List-dbf4297f.js} +7 -9
  13. package/_internal/List-dbf4297f.js.map +1 -0
  14. package/_internal/{PopoverDialog-4ebe79f2.js → PopoverDialog-193a0918.js} +8 -8
  15. package/_internal/PopoverDialog-193a0918.js.map +1 -0
  16. package/_internal/{Slides-ae91d12c.js → Slides-2d267d8c.js} +5 -8
  17. package/_internal/Slides-2d267d8c.js.map +1 -0
  18. package/_internal/components/{alert-dialog-0eeb06ce.js → alert-dialog-a6ed922b.js} +3 -3
  19. package/_internal/components/{alert-dialog-0eeb06ce.js.map → alert-dialog-a6ed922b.js.map} +1 -1
  20. package/_internal/components/{autocomplete-32170542.js → autocomplete-c97b7698.js} +5 -5
  21. package/_internal/components/{autocomplete-32170542.js.map → autocomplete-c97b7698.js.map} +1 -1
  22. package/_internal/components/{button-b5818c5a.js → button-b05f8f0c.js} +3 -3
  23. package/_internal/components/{button-b5818c5a.js.map → button-b05f8f0c.js.map} +1 -1
  24. package/_internal/components/{chip-e40c5521.js → chip-e3a6330f.js} +2 -2
  25. package/_internal/components/{chip-e40c5521.js.map → chip-e3a6330f.js.map} +1 -1
  26. package/_internal/components/{comment-block-a4997791.js → comment-block-b1acc69f.js} +2 -2
  27. package/_internal/components/{comment-block-a4997791.js.map → comment-block-b1acc69f.js.map} +1 -1
  28. package/_internal/components/date-picker-582c4925.js +2 -0
  29. package/_internal/components/date-picker-582c4925.js.map +1 -0
  30. package/_internal/components/{dialog-ebdb9500.js → dialog-785646aa.js} +6 -6
  31. package/_internal/components/dialog-785646aa.js.map +1 -0
  32. package/_internal/components/{dropdown-0baed51b.js → dropdown-c0c0cfe8.js} +4 -4
  33. package/_internal/components/{dropdown-0baed51b.js.map → dropdown-c0c0cfe8.js.map} +1 -1
  34. package/_internal/components/{expansion-panel-80edf6c9.js → expansion-panel-1de1d1ff.js} +6 -6
  35. package/_internal/components/expansion-panel-1de1d1ff.js.map +1 -0
  36. package/_internal/components/{flex-box-55144e5f.js → flex-box-10423fa5.js} +2 -2
  37. package/_internal/components/flex-box-10423fa5.js.map +1 -0
  38. package/_internal/components/{generic-block-ff0509ee.js → generic-block-b79f163a.js} +15 -11
  39. package/_internal/components/generic-block-b79f163a.js.map +1 -0
  40. package/_internal/components/{grid-column-f01df853.js → grid-column-ee504283.js} +2 -3
  41. package/_internal/components/grid-column-ee504283.js.map +1 -0
  42. package/_internal/components/{image-block-755d8b96.js → image-block-762eb669.js} +2 -2
  43. package/_internal/components/{image-block-755d8b96.js.map → image-block-762eb669.js.map} +1 -1
  44. package/_internal/components/{image-lightbox-d31dcd8a.js → image-lightbox-10fef304.js} +7 -7
  45. package/_internal/components/{image-lightbox-d31dcd8a.js.map → image-lightbox-10fef304.js.map} +1 -1
  46. package/_internal/components/{lightbox-9dbd7c15.js → lightbox-dcc9a7a0.js} +5 -5
  47. package/_internal/components/{lightbox-9dbd7c15.js.map → lightbox-dcc9a7a0.js.map} +1 -1
  48. package/_internal/components/{list-b08d8423.js → list-f29e54b7.js} +2 -2
  49. package/_internal/components/{list-b08d8423.js.map → list-f29e54b7.js.map} +1 -1
  50. package/_internal/components/{message-b3957df0.js → message-aa3e3f76.js} +2 -2
  51. package/_internal/components/{message-b3957df0.js.map → message-aa3e3f76.js.map} +1 -1
  52. package/_internal/components/{mosaic-742a9109.js → mosaic-b4b35fa7.js} +2 -3
  53. package/_internal/components/mosaic-b4b35fa7.js.map +1 -0
  54. package/_internal/components/{navigation-b1cd43c3.js → navigation-8357dbe6.js} +3 -3
  55. package/_internal/components/{navigation-b1cd43c3.js.map → navigation-8357dbe6.js.map} +1 -1
  56. package/_internal/components/{notification-94679f51.js → notification-ec4cf95f.js} +3 -6
  57. package/_internal/components/notification-ec4cf95f.js.map +1 -0
  58. package/_internal/components/popover-a674dd8d.js +3 -0
  59. package/_internal/components/popover-a674dd8d.js.map +1 -0
  60. package/_internal/components/{post-block-3ac52237.js → post-block-bb3d3cbf.js} +10 -10
  61. package/_internal/components/post-block-bb3d3cbf.js.map +1 -0
  62. package/_internal/components/{select-f3b44cb6.js → select-8295a416.js} +8 -9
  63. package/_internal/components/select-8295a416.js.map +1 -0
  64. package/_internal/components/{side-navigation-414825d8.js → side-navigation-40ee8bda.js} +4 -5
  65. package/_internal/components/side-navigation-40ee8bda.js.map +1 -0
  66. package/_internal/components/{slideshow-dc4b79ae.js → slideshow-c5faf531.js} +3 -3
  67. package/_internal/components/{slideshow-dc4b79ae.js.map → slideshow-c5faf531.js.map} +1 -1
  68. package/_internal/components/{switch-769a2a04.js → switch-a26a5a72.js} +2 -3
  69. package/_internal/components/switch-a26a5a72.js.map +1 -0
  70. package/_internal/components/{text-field-0a15a15d.js → text-field-82adaeb4.js} +3 -4
  71. package/_internal/components/text-field-82adaeb4.js.map +1 -0
  72. package/_internal/components/{tooltip-2885ab2e.js → tooltip-aa48ddda.js} +2 -2
  73. package/_internal/components/{tooltip-2885ab2e.js.map → tooltip-aa48ddda.js.map} +1 -1
  74. package/_internal/components/{user-block-5f7b09af.js → user-block-fc03f01a.js} +9 -10
  75. package/_internal/components/user-block-fc03f01a.js.map +1 -0
  76. package/_internal/{index-9df37c0d.js → index-8e7fecb5.js} +4 -4
  77. package/_internal/{index-9df37c0d.js.map → index-8e7fecb5.js.map} +1 -1
  78. package/_internal/{isComponent-78df9309.js → isComponent-b9762ff1.js} +3 -5
  79. package/_internal/isComponent-b9762ff1.js.map +1 -0
  80. package/_internal/{useCallbackOnEscape-ea4d9eb4.js → useCallbackOnEscape-0b220f9c.js} +3 -3
  81. package/_internal/useCallbackOnEscape-0b220f9c.js.map +1 -0
  82. package/_internal/{useFocusTrap-c3c6378b.js → useFocusTrap-3114e5e8.js} +2 -2
  83. package/_internal/{useFocusTrap-c3c6378b.js.map → useFocusTrap-3114e5e8.js.map} +1 -1
  84. package/index.d.ts +4 -15
  85. package/index.js +34 -34
  86. package/package.json +3 -3
  87. package/utils/index.js +1 -1
  88. package/_internal/Button-85482487.js.map +0 -1
  89. package/_internal/Chip-a34f6905.js.map +0 -1
  90. package/_internal/ClickAwayProvider-7093ba23.js.map +0 -1
  91. package/_internal/List-54237e0e.js.map +0 -1
  92. package/_internal/PopoverDialog-4ebe79f2.js.map +0 -1
  93. package/_internal/Slides-ae91d12c.js.map +0 -1
  94. package/_internal/components/date-picker-48a39549.js +0 -2
  95. package/_internal/components/date-picker-48a39549.js.map +0 -1
  96. package/_internal/components/dialog-ebdb9500.js.map +0 -1
  97. package/_internal/components/expansion-panel-80edf6c9.js.map +0 -1
  98. package/_internal/components/flex-box-55144e5f.js.map +0 -1
  99. package/_internal/components/generic-block-ff0509ee.js.map +0 -1
  100. package/_internal/components/grid-column-f01df853.js.map +0 -1
  101. package/_internal/components/mosaic-742a9109.js.map +0 -1
  102. package/_internal/components/notification-94679f51.js.map +0 -1
  103. package/_internal/components/popover-65bfbc57.js +0 -3
  104. package/_internal/components/popover-65bfbc57.js.map +0 -1
  105. package/_internal/components/post-block-3ac52237.js.map +0 -1
  106. package/_internal/components/select-f3b44cb6.js.map +0 -1
  107. package/_internal/components/side-navigation-414825d8.js.map +0 -1
  108. package/_internal/components/switch-769a2a04.js.map +0 -1
  109. package/_internal/components/text-field-0a15a15d.js.map +0 -1
  110. package/_internal/components/user-block-5f7b09af.js.map +0 -1
  111. package/_internal/isComponent-78df9309.js.map +0 -1
  112. package/_internal/partitionMulti-4daccdd5.js +0 -25
  113. package/_internal/partitionMulti-4daccdd5.js.map +0 -1
  114. package/_internal/useCallbackOnEscape-ea4d9eb4.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text-field-82adaeb4.js","sources":["../../../src/components/text-field/TextField.tsx"],"sourcesContent":["import { ReactNode, Ref, RefObject, SyntheticEvent, useEffect, useRef, useState } from 'react';\n\nimport classNames from 'classnames';\n\nimport { mdiAlertCircle, mdiCheckCircle, mdiCloseCircle } from '@lumx/icons';\nimport {\n Emphasis,\n Icon,\n IconButton,\n IconButtonProps,\n InputHelper,\n InputLabel,\n InputLabelProps,\n Kind,\n Size,\n Theme,\n} from '@lumx/react';\nimport { GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { mergeRefs } from '@lumx/react/utils/react/mergeRefs';\nimport { useId } from '@lumx/react/hooks/useId';\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\nimport { useDisableStateProps } from '@lumx/react/utils/disabled/useDisableStateProps';\nimport { HasAriaDisabled } from '@lumx/react/utils/type/HasAriaDisabled';\n\n/**\n * Defines the props of the component.\n */\nexport interface TextFieldProps extends GenericProps, HasTheme, HasAriaDisabled {\n /** Chip Group to be rendered before the main text input. */\n chips?: ReactNode;\n /** Props to pass to the clear button (minus those already set by the TextField props). If not specified, the button won't be displayed. */\n clearButtonProps?: Pick<IconButtonProps, 'label'> &\n Omit<IconButtonProps, 'label' | 'onClick' | 'icon' | 'emphasis'>;\n /** Error message. */\n error?: string | ReactNode;\n /** Whether we force the focus style or not. */\n forceFocusStyle?: boolean;\n /** Whether the text field is displayed with error style or not. */\n hasError?: boolean;\n /** Additional element to put at the end of the text field. */\n afterElement?: ReactNode;\n /** Helper text. */\n helper?: string | ReactNode;\n /** Icon (SVG path). */\n icon?: string;\n /** Native input id property (generated if not provided to link the label element). */\n id?: string;\n /** Reference to the <input> or <textarea> element. */\n inputRef?: Ref<HTMLInputElement | HTMLTextAreaElement>;\n /** Whether the component is disabled or not. */\n isDisabled?: boolean;\n /** Whether the component is required or not. */\n isRequired?: boolean;\n /** Whether the text field is displayed with valid style or not. */\n isValid?: boolean;\n /** Label text. */\n label?: string;\n /** Additional label props. */\n labelProps?: InputLabelProps;\n /** Max string length the input accepts (constrains the input and displays a character counter). */\n maxLength?: number;\n /** Minimum number of rows displayed in multiline mode (requires `multiline` to be enabled). */\n minimumRows?: number;\n /** Whether the text field is a textarea or an input. */\n multiline?: boolean;\n /** Native input name property. */\n name?: string;\n /** Placeholder text. */\n placeholder?: string;\n /** Reference to the wrapper. */\n textFieldRef?: Ref<HTMLDivElement>;\n /** Native input type (only when `multiline` is disabled). */\n type?: React.ComponentProps<'input'>['type'];\n /** Value. */\n value?: string;\n /** On blur callback. */\n onBlur?(event: React.FocusEvent): void;\n /** On change callback. */\n onChange(value: string, name?: string, event?: SyntheticEvent): void;\n /** On clear callback. */\n onClear?(event?: SyntheticEvent): void;\n /** On focus callback. */\n onFocus?(event: React.FocusEvent): void;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'TextField';\n\n/**\n * Component default class name and class prefix.\n */\nconst CLASSNAME = getRootClassName(COMPONENT_NAME);\n\n/**\n * Default minimum number of rows in the multiline mode.\n */\nconst DEFAULT_MIN_ROWS = 2;\n\n/**\n * Component default props.\n */\nconst DEFAULT_PROPS: Partial<TextFieldProps> = {\n type: 'text',\n};\n\n/**\n * Hook that allows to calculate the number of rows needed for a text area.\n * @param minimumRows Minimum number of rows that we want to display.\n * @return rows to be used and a callback to recalculate\n */\nconst useComputeNumberOfRows = (\n minimumRows: number,\n): {\n /** number of rows to be used on the text area */\n rows: number;\n /**\n * Callback in order to recalculate the number of rows due to a change on the text area\n */\n recomputeNumberOfRows(target: Element): void;\n} => {\n const [rows, setRows] = useState(minimumRows);\n\n const recompute = (target: Element) => {\n /**\n * HEAD's UP! This part is a little bit tricky. The idea here is to only\n * display the necessary rows on the textarea. In order to dynamically adjust\n * the height on that field, we need to:\n * 1. Set the current amount of rows to the minimum. That will make the scroll appear.\n * 2. With that, we will have the `scrollHeight`, meaning the height of the container adjusted to the current content\n * 3. With the scroll height, we can figure out how many rows we need to use by dividing the scroll height\n * by the line height.\n * 4. With that number, we can readjust the number of rows on the text area. We need to do that here, if we leave that to\n * the state change through React, there are some scenarios (resize, hitting ENTER or BACKSPACE which add or remove lines)\n * when we will not see the update and the rows will be resized to the minimum.\n * 5. In case there is any other update on the component that changes the UI, we need to keep the number of rows\n * on the state in order to allow React to re-render. Therefore, we save them using `useState`\n */\n // eslint-disable-next-line no-param-reassign\n (target as HTMLTextAreaElement).rows = minimumRows;\n let currentRows = target.scrollHeight / (target.clientHeight / minimumRows);\n currentRows = currentRows >= minimumRows ? currentRows : minimumRows;\n // eslint-disable-next-line no-param-reassign\n (target as HTMLTextAreaElement).rows = currentRows;\n\n setRows(currentRows);\n };\n\n return {\n recomputeNumberOfRows: recompute,\n rows,\n };\n};\n\ninterface InputNativeProps {\n id?: string;\n inputRef?: TextFieldProps['inputRef'];\n isDisabled?: boolean;\n 'aria-disabled'?: boolean;\n isRequired?: boolean;\n readOnly?: boolean;\n multiline?: boolean;\n maxLength?: number;\n placeholder?: string;\n rows: number;\n type: TextFieldProps['type'];\n name?: string;\n value?: string;\n setFocus(focus: boolean): void;\n recomputeNumberOfRows(target: Element): void;\n onChange(value: string, name?: string, event?: SyntheticEvent): void;\n onFocus?(value: React.FocusEvent): void;\n onBlur?(value: React.FocusEvent): void;\n hasError?: boolean;\n describedById?: string;\n}\n\nconst renderInputNative: React.FC<InputNativeProps> = (props) => {\n const {\n id,\n isRequired,\n placeholder,\n multiline,\n value,\n setFocus,\n onChange,\n onFocus,\n onBlur,\n inputRef,\n rows,\n recomputeNumberOfRows,\n type,\n name,\n hasError,\n describedById,\n ...forwardedProps\n } = props;\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const ref = useRef<HTMLElement>(null);\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n // Recompute the number of rows for the first rendering\n if (multiline && ref && ref.current) {\n recomputeNumberOfRows(ref.current);\n }\n }, [ref, multiline, recomputeNumberOfRows, value]);\n\n const onTextFieldFocus = (event: React.FocusEvent) => {\n onFocus?.(event);\n setFocus(true);\n };\n\n const onTextFieldBlur = (event: React.FocusEvent) => {\n onBlur?.(event);\n setFocus(false);\n };\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange(event.target.value, name, event);\n };\n\n const Component = multiline ? 'textarea' : 'input';\n const inputProps: any = {\n ...forwardedProps,\n id,\n className: multiline\n ? `${CLASSNAME}__input-native ${CLASSNAME}__input-native--textarea`\n : `${CLASSNAME}__input-native ${CLASSNAME}__input-native--text`,\n placeholder,\n value,\n name,\n required: isRequired,\n onFocus: onTextFieldFocus,\n onBlur: onTextFieldBlur,\n onChange: handleChange,\n 'aria-invalid': hasError ? 'true' : undefined,\n 'aria-describedby': describedById,\n readOnly: forwardedProps.readOnly || forwardedProps['aria-disabled'],\n ref: mergeRefs(inputRef as any, ref) as any,\n };\n if (multiline) {\n inputProps.rows = rows;\n } else {\n inputProps.type = type;\n }\n return <Component {...inputProps} />;\n};\n\n/**\n * TextField component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const TextField = forwardRef<TextFieldProps, HTMLDivElement>((props, ref) => {\n const { isAnyDisabled, disabledStateProps, otherProps } = useDisableStateProps(props);\n const defaultTheme = useTheme() || Theme.light;\n const {\n chips,\n className,\n clearButtonProps,\n error,\n forceFocusStyle,\n hasError,\n helper,\n icon,\n id,\n inputRef: inputRefProps,\n isRequired,\n isValid,\n label,\n labelProps,\n maxLength,\n minimumRows,\n multiline,\n name,\n onBlur,\n onChange,\n onClear,\n onFocus,\n placeholder,\n textFieldRef,\n theme = defaultTheme,\n type = DEFAULT_PROPS.type,\n value,\n afterElement,\n ...forwardedProps\n } = otherProps;\n const generatedTextFieldId = useId();\n const textFieldId = id || generatedTextFieldId;\n /** Keep a clean local input ref to manage focus */\n const localInputRef = useRef<HTMLInputElement | HTMLTextAreaElement | null>(null);\n /** Merge prop input ref and local input ref */\n const inputRef = mergeRefs(localInputRef, inputRefProps);\n /**\n * Generate unique ids for both the helper and error texts, in order to\n * later on add them to the input native as aria-describedby. If both the error and the helper are present,\n * we want to first use the most important one, which is the errorId. That way, screen readers will read first\n * the error and then the helper\n */\n const helperId = helper ? `text-field-helper-${generatedTextFieldId}` : undefined;\n const errorId = error ? `text-field-error-${generatedTextFieldId}` : undefined;\n const describedByIds = [errorId, helperId, forwardedProps['aria-describedby']].filter(Boolean);\n const describedById = describedByIds.length === 0 ? undefined : describedByIds.join(' ');\n\n const [isFocus, setFocus] = useState(false);\n const { rows, recomputeNumberOfRows } = useComputeNumberOfRows(multiline ? minimumRows || DEFAULT_MIN_ROWS : 0);\n const valueLength = (value || '').length;\n const isNotEmpty = valueLength > 0;\n\n /**\n * Function triggered when the Clear Button is clicked.\n * The idea is to execute the `onChange` callback with an empty string\n * and remove focus from the clear button.\n * @param evt On clear event.\n */\n const handleClear = (evt: React.ChangeEvent) => {\n evt.nativeEvent.preventDefault();\n evt.nativeEvent.stopPropagation();\n (evt.currentTarget as HTMLElement).blur();\n\n onChange('');\n\n if (onClear) {\n onClear(evt);\n }\n\n /** Use local inputRef in case the prop input ref is a `mergeRefs` function. */\n const inputElement = localInputRef as RefObject<HTMLInputElement | HTMLTextAreaElement>;\n\n if (inputElement && inputElement.current) {\n inputElement.current.focus();\n }\n };\n\n return (\n <div\n ref={ref}\n className={classNames(\n className,\n handleBasicClasses({\n hasChips: Boolean(chips),\n hasError: !isValid && hasError,\n hasIcon: Boolean(icon),\n hasInput: !multiline,\n hasInputClear: clearButtonProps && isNotEmpty,\n hasLabel: Boolean(label),\n hasPlaceholder: Boolean(placeholder),\n hasTextarea: multiline,\n hasValue: Boolean(value),\n isDisabled: isAnyDisabled,\n isFocus: isFocus || forceFocusStyle,\n isValid,\n prefix: CLASSNAME,\n theme,\n }),\n )}\n >\n {(label || maxLength) && (\n <div className={`${CLASSNAME}__header`}>\n {label && (\n <InputLabel\n {...labelProps}\n htmlFor={textFieldId}\n className={`${CLASSNAME}__label`}\n isRequired={isRequired}\n theme={theme}\n >\n {label}\n </InputLabel>\n )}\n\n {maxLength && (\n <div className={`${CLASSNAME}__char-counter`}>\n <span>{maxLength - valueLength}</span>\n {maxLength - valueLength === 0 && <Icon icon={mdiAlertCircle} size={Size.xxs} />}\n </div>\n )}\n </div>\n )}\n\n <div className={`${CLASSNAME}__wrapper`} ref={textFieldRef}>\n {icon && (\n <Icon\n className={`${CLASSNAME}__input-icon`}\n color={theme === Theme.dark ? 'light' : undefined}\n icon={icon}\n size={Size.xs}\n />\n )}\n\n {chips && (\n <div className={`${CLASSNAME}__chips`}>\n {chips}\n\n {renderInputNative({\n id: textFieldId,\n inputRef,\n ...disabledStateProps,\n isRequired,\n maxLength,\n multiline,\n onBlur,\n onChange,\n onFocus,\n placeholder,\n recomputeNumberOfRows,\n rows,\n setFocus,\n type,\n value,\n name,\n hasError,\n describedById,\n ...forwardedProps,\n })}\n </div>\n )}\n\n {!chips && (\n <div className={`${CLASSNAME}__input-wrapper`}>\n {renderInputNative({\n id: textFieldId,\n inputRef,\n ...disabledStateProps,\n isRequired,\n maxLength,\n multiline,\n onBlur,\n onChange,\n onFocus,\n placeholder,\n recomputeNumberOfRows,\n rows,\n setFocus,\n type,\n value,\n name,\n hasError,\n describedById,\n ...forwardedProps,\n })}\n </div>\n )}\n\n {(isValid || hasError) && (\n <Icon\n className={`${CLASSNAME}__input-validity`}\n color={theme === Theme.dark ? 'light' : undefined}\n icon={isValid ? mdiCheckCircle : mdiAlertCircle}\n size={Size.xxs}\n />\n )}\n\n {clearButtonProps && isNotEmpty && !isAnyDisabled && (\n <IconButton\n {...clearButtonProps}\n className={`${CLASSNAME}__input-clear`}\n icon={mdiCloseCircle}\n emphasis={Emphasis.low}\n size={Size.s}\n theme={theme}\n onClick={handleClear}\n type=\"button\"\n />\n )}\n\n {afterElement && <div className={`${CLASSNAME}__after-element`}>{afterElement}</div>}\n </div>\n\n {hasError && error && (\n <InputHelper className={`${CLASSNAME}__helper`} kind={Kind.error} theme={theme} id={errorId}>\n {error}\n </InputHelper>\n )}\n\n {helper && (\n <InputHelper className={`${CLASSNAME}__helper`} theme={theme} id={helperId}>\n {helper}\n </InputHelper>\n )}\n </div>\n );\n});\nTextField.displayName = COMPONENT_NAME;\nTextField.className = CLASSNAME;\nTextField.defaultProps = DEFAULT_PROPS;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_MIN_ROWS","DEFAULT_PROPS","type","useComputeNumberOfRows","minimumRows","rows","setRows","useState","recompute","target","currentRows","scrollHeight","clientHeight","recomputeNumberOfRows","renderInputNative","props","id","isRequired","placeholder","multiline","value","setFocus","onChange","onFocus","onBlur","inputRef","name","hasError","describedById","forwardedProps","ref","useRef","useEffect","current","onTextFieldFocus","event","onTextFieldBlur","handleChange","Component","inputProps","className","required","undefined","readOnly","mergeRefs","_jsx","TextField","forwardRef","isAnyDisabled","disabledStateProps","otherProps","useDisableStateProps","defaultTheme","useTheme","Theme","light","chips","clearButtonProps","error","forceFocusStyle","helper","icon","inputRefProps","isValid","label","labelProps","maxLength","onClear","textFieldRef","theme","afterElement","generatedTextFieldId","useId","textFieldId","localInputRef","helperId","errorId","describedByIds","filter","Boolean","length","join","isFocus","valueLength","isNotEmpty","handleClear","evt","nativeEvent","preventDefault","stopPropagation","currentTarget","blur","inputElement","focus","_jsxs","classNames","handleBasicClasses","hasChips","hasIcon","hasInput","hasInputClear","hasLabel","hasPlaceholder","hasTextarea","hasValue","isDisabled","prefix","children","InputLabel","htmlFor","Icon","mdiAlertCircle","size","Size","xxs","color","dark","xs","mdiCheckCircle","IconButton","mdiCloseCircle","emphasis","Emphasis","low","s","onClick","InputHelper","kind","Kind","displayName","defaultProps"],"mappings":"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"}
@@ -7,7 +7,7 @@ import { T as TooltipContextProvider } from '../context-9d1336a1.js';
7
7
  import { u as useId } from '../useId-3a1facc0.js';
8
8
  import { a as POPOVER_ZINDEX, P as Placement, u as usePopper } from '../constants-b9e57936.js';
9
9
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
10
- import { u as useCallbackOnEscape } from '../useCallbackOnEscape-ea4d9eb4.js';
10
+ import { u as useCallbackOnEscape } from '../useCallbackOnEscape-0b220f9c.js';
11
11
  import { TOOLTIP_LONG_PRESS_DELAY, TOOLTIP_HOVER_DELAY } from '@lumx/core/js/constants';
12
12
  import { P as Portal } from '../Portal-3f86608e.js';
13
13
 
@@ -324,4 +324,4 @@ Tooltip.className = CLASSNAME;
324
324
  Tooltip.defaultProps = DEFAULT_PROPS;
325
325
 
326
326
  export { Tooltip };
327
- //# sourceMappingURL=tooltip-2885ab2e.js.map
327
+ //# sourceMappingURL=tooltip-aa48ddda.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tooltip-2885ab2e.js","sources":["../../../src/components/tooltip/constants.ts","../../../src/components/tooltip/useInjectTooltipRef.tsx","../../../src/utils/browser/isHoverNotSupported.ts","../../../src/utils/browser/isFocusVisible.ts","../../../src/components/tooltip/useTooltipOpen.tsx","../../../src/components/tooltip/Tooltip.tsx"],"sourcesContent":["import { POPOVER_ZINDEX } from '../popover/constants';\n\nexport const ARIA_LINK_MODES = ['aria-describedby', 'aria-labelledby'] as const;\n\n/**\n * Make sure tooltip appear above popovers.\n */\nexport const TOOLTIP_ZINDEX = POPOVER_ZINDEX + 1;\n","import React, { cloneElement, ReactNode, useMemo } from 'react';\n\nimport { mergeRefs } from '@lumx/react/utils/react/mergeRefs';\n\ninterface Options {\n /** Original tooltip anchor */\n children: ReactNode;\n /** Set tooltip anchor element */\n setAnchorElement: (e: HTMLDivElement) => void;\n /** Whether the tooltip is open or not */\n isMounted: boolean | undefined;\n /** Tooltip id */\n id: string;\n /** Tooltip label*/\n label?: string | null | false;\n /** Choose how the tooltip text should link to the anchor */\n ariaLinkMode: 'aria-describedby' | 'aria-labelledby';\n}\n\n/**\n * Add ref and ARIA attribute(s) in tooltip children or wrapped children.\n * Button, IconButton, Icon and React HTML elements don't need to be wrapped but any other kind of children (array, fragment, custom components)\n * will be wrapped in a <span>.\n */\nexport const useInjectTooltipRef = (options: Options): ReactNode => {\n const { children, setAnchorElement, isMounted, id, label, ariaLinkMode } = options;\n // Only add link when mounted\n const linkId = isMounted ? id : undefined;\n\n return useMemo(() => {\n if (!label) return children;\n\n // Non-disabled element\n if (React.isValidElement(children) && children.props.disabled !== true && children.props.isDisabled !== true) {\n const ref = mergeRefs((children as any).ref, setAnchorElement);\n const props = { ...children.props, ref };\n\n // Do not add label/description if the tooltip label is already in aria-label\n if (linkId && label !== props['aria-label']) {\n if (props[ariaLinkMode]) props[ariaLinkMode] += ' ';\n else props[ariaLinkMode] = '';\n props[ariaLinkMode] += linkId;\n }\n\n return cloneElement(children, props);\n }\n\n const aria = linkId ? { [ariaLinkMode]: linkId } : undefined;\n return (\n <div className=\"lumx-tooltip-anchor-wrapper\" ref={setAnchorElement} {...aria}>\n {children}\n </div>\n );\n }, [label, children, setAnchorElement, linkId, ariaLinkMode]);\n};\n","/** Return true if the browser does not support pointer hover */\nexport const isHoverNotSupported = (): boolean => !!window.matchMedia?.('(hover: none)').matches;\n","/** Check if the focus is visible on the given element */\nexport const isFocusVisible = (element?: HTMLElement) => {\n try {\n return element?.matches?.(':focus-visible, [data-focus-visible-added]');\n } catch (_ignored) {\n // Can fail on non browser env\n return true;\n }\n};\n","import { MutableRefObject, useEffect, useRef, useState } from 'react';\nimport { isHoverNotSupported } from '@lumx/react/utils/browser/isHoverNotSupported';\nimport { IS_BROWSER, TOOLTIP_HOVER_DELAY, TOOLTIP_LONG_PRESS_DELAY } from '@lumx/react/constants';\nimport { useCallbackOnEscape } from '@lumx/react/hooks/useCallbackOnEscape';\nimport { isFocusVisible } from '@lumx/react/utils/browser/isFocusVisible';\n\n/**\n * Hook controlling tooltip visibility using mouse hover the anchor and delay.\n *\n * @param delay Delay in millisecond to display the tooltip.\n * @param anchorElement Tooltip anchor element.\n * @return whether or not to show the tooltip.\n */\nexport function useTooltipOpen(delay: number | undefined, anchorElement: HTMLElement | null) {\n const [isOpen, setIsOpen] = useState(false);\n\n const onPopperMount = useRef<any>(null) as MutableRefObject<(elem: HTMLElement | null) => void>;\n\n // Global close on escape\n const [closeCallback, setCloseCallback] = useState<undefined | (() => void)>(undefined);\n useCallbackOnEscape(isOpen ? closeCallback : undefined);\n\n useEffect(() => {\n if (!anchorElement) {\n return undefined;\n }\n let timer: number | undefined;\n let openStartTime: number | undefined;\n let shouldOpen: boolean | undefined;\n\n // Run timer to defer updating the isOpen state.\n const deferUpdate = (duration: number) => {\n if (timer) clearTimeout(timer);\n const update = () => {\n setIsOpen(!!shouldOpen);\n };\n // Skip timeout in fake browsers\n if (!IS_BROWSER) update();\n else timer = setTimeout(update, duration) as any;\n };\n\n const hoverNotSupported = isHoverNotSupported();\n const hasTouch = 'ontouchstart' in window;\n\n // Adapt open/close delay\n const openDelay = delay || (hoverNotSupported ? TOOLTIP_LONG_PRESS_DELAY.open : TOOLTIP_HOVER_DELAY.open);\n const closeDelay = hoverNotSupported ? TOOLTIP_LONG_PRESS_DELAY.close : TOOLTIP_HOVER_DELAY.close;\n\n // Open (or/and cancel closing) of tooltip.\n const open = () => {\n if (shouldOpen && !timer) return;\n shouldOpen = true;\n openStartTime = Date.now();\n deferUpdate(openDelay);\n };\n\n // Close or cancel opening of tooltip\n const getClose = (overrideDelay = closeDelay) => {\n if (!shouldOpen && !timer) return;\n shouldOpen = false;\n deferUpdate(overrideDelay);\n };\n const close = () => getClose(closeDelay);\n const closeImmediately = () => getClose(0);\n setCloseCallback(() => closeImmediately);\n\n // Adapt event to browsers with or without `hover` support.\n const events: Array<[Node, Event['type'], any]> = [];\n if (hoverNotSupported) {\n /**\n * Handle touchend event\n * If end comes before the open delay => cancel tooltip (close immediate).\n * Else if end comes after the open delay => tooltip takes priority, the anchor's default touch end event is prevented.\n */\n const longPressEnd = (evt: Event) => {\n if (!openStartTime) return;\n if (Date.now() - openStartTime >= openDelay) {\n // Tooltip take priority, event prevented.\n evt.stopPropagation();\n evt.preventDefault();\n anchorElement.focus();\n // Close with delay.\n close();\n } else {\n // Close immediately.\n closeImmediately();\n }\n };\n\n events.push(\n [anchorElement, hasTouch ? 'touchstart' : 'mousedown', open],\n [anchorElement, hasTouch ? 'touchend' : 'mouseup', longPressEnd],\n );\n } else {\n events.push(\n [anchorElement, 'mouseenter', open],\n [anchorElement, 'mouseleave', close],\n [anchorElement, 'mouseup', closeImmediately],\n );\n\n onPopperMount.current = (popperElement: HTMLElement | null) => {\n if (!popperElement) return;\n // Popper element hover\n popperElement.addEventListener('mouseenter', open);\n popperElement.addEventListener('mouseleave', close);\n // Add to event list to remove on unmount\n events.push([popperElement, 'mouseenter', open], [popperElement, 'mouseleave', close]);\n };\n }\n\n // Events always applied no matter the browser:.\n events.push(\n // Open on focus (only if focus is visible).\n [\n anchorElement,\n 'focusin',\n (e: Event) => {\n // Skip if focus is not visible\n if (!isFocusVisible(e.target as HTMLElement)) return;\n open();\n },\n ],\n // Close on lost focus.\n [anchorElement, 'focusout', closeImmediately],\n );\n\n // Attach events\n for (const [node, eventType, eventHandler] of events) {\n node.addEventListener(eventType, eventHandler);\n }\n return () => {\n // Clear pending timers.\n if (timer) clearTimeout(timer);\n\n // Detach events.\n for (const [node, eventType, eventHandler] of events) {\n node.removeEventListener(eventType, eventHandler);\n }\n };\n }, [anchorElement, delay]);\n\n return { isOpen, onPopperMount: onPopperMount.current };\n}\n","/* eslint-disable react-hooks/rules-of-hooks */\nimport React, { ReactNode, useState } from 'react';\n\nimport classNames from 'classnames';\n\nimport { DOCUMENT, VISUALLY_HIDDEN } from '@lumx/react/constants';\nimport { GenericProps, HasCloseMode } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { useMergeRefs } from '@lumx/react/utils/react/mergeRefs';\nimport { Placement } from '@lumx/react/components/popover';\nimport { TooltipContextProvider } from '@lumx/react/components/tooltip/context';\nimport { useId } from '@lumx/react/hooks/useId';\nimport { usePopper } from '@lumx/react/hooks/usePopper';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { ARIA_LINK_MODES, TOOLTIP_ZINDEX } from '@lumx/react/components/tooltip/constants';\nimport { Portal } from '@lumx/react/utils';\nimport { useInjectTooltipRef } from './useInjectTooltipRef';\nimport { useTooltipOpen } from './useTooltipOpen';\n\n/** Position of the tooltip relative to the anchor element. */\nexport type TooltipPlacement = Extract<Placement, 'top' | 'right' | 'bottom' | 'left'>;\n\n/**\n * Defines the props of the component.\n */\nexport interface TooltipProps extends GenericProps, HasCloseMode {\n /** Anchor (element on which we activate the tooltip). */\n children: ReactNode;\n /** Delay (in ms) before closing the tooltip. */\n delay?: number;\n /** Whether the tooltip is displayed even without the mouse hovering the anchor. */\n forceOpen?: boolean;\n /** Label text. */\n label?: string | null | false;\n /** Placement of the tooltip relative to the anchor. */\n placement?: TooltipPlacement;\n /** Choose how the tooltip text should link to the anchor */\n ariaLinkMode?: (typeof ARIA_LINK_MODES)[number];\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Tooltip';\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: Partial<TooltipProps> = {\n placement: Placement.BOTTOM,\n closeMode: 'unmount',\n ariaLinkMode: 'aria-describedby',\n zIndex: TOOLTIP_ZINDEX,\n};\n\n/**\n * Arrow size (in pixel).\n */\nconst ARROW_SIZE = 8;\n\n/**\n * Tooltip component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Tooltip = forwardRef<TooltipProps, HTMLDivElement>((props, ref) => {\n const {\n label,\n children,\n className,\n delay,\n placement = DEFAULT_PROPS.placement,\n forceOpen,\n closeMode = DEFAULT_PROPS.closeMode,\n ariaLinkMode = DEFAULT_PROPS.ariaLinkMode,\n zIndex = DEFAULT_PROPS.zIndex,\n ...forwardedProps\n } = props;\n // Disable in SSR.\n if (!DOCUMENT) {\n return <>{children}</>;\n }\n\n const id = useId();\n\n const [popperElement, setPopperElement] = useState<null | HTMLElement>(null);\n const [anchorElement, setAnchorElement] = useState<null | HTMLElement>(null);\n const { styles, attributes, update } = usePopper(anchorElement, popperElement, {\n placement,\n modifiers: [\n {\n name: 'offset',\n options: { offset: [0, ARROW_SIZE] },\n },\n ],\n });\n\n const position = attributes?.popper?.['data-popper-placement'] ?? placement;\n const { isOpen: isActivated, onPopperMount } = useTooltipOpen(delay, anchorElement);\n const isOpen = (isActivated || forceOpen) && !!label;\n const isMounted = !!label && (isOpen || closeMode === 'hide');\n const isHidden = !isOpen && closeMode === 'hide';\n const wrappedChildren = useInjectTooltipRef({\n children,\n setAnchorElement,\n isMounted,\n id,\n label,\n ariaLinkMode: ariaLinkMode as any,\n });\n\n // Update on open\n React.useEffect(() => {\n if (isOpen || popperElement) update?.();\n }, [isOpen, update, popperElement]);\n\n const labelLines = label ? label.split('\\n') : [];\n\n const tooltipRef = useMergeRefs(ref, setPopperElement, onPopperMount);\n\n return (\n <>\n <TooltipContextProvider>{wrappedChildren}</TooltipContextProvider>\n {isMounted && (\n <Portal>\n <div\n ref={tooltipRef}\n {...forwardedProps}\n id={id}\n role=\"tooltip\"\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n position,\n isInitializing: !styles.popper?.transform,\n }),\n isHidden && VISUALLY_HIDDEN,\n )}\n style={{ ...(isHidden ? undefined : styles.popper), zIndex }}\n {...attributes.popper}\n >\n <div className={`${CLASSNAME}__arrow`} />\n <div className={`${CLASSNAME}__inner`}>\n {labelLines.map((line) => (\n <p key={line}>{line}</p>\n ))}\n </div>\n </div>\n </Portal>\n )}\n </>\n );\n});\nTooltip.displayName = COMPONENT_NAME;\nTooltip.className = CLASSNAME;\nTooltip.defaultProps = DEFAULT_PROPS;\n"],"names":["TOOLTIP_ZINDEX","POPOVER_ZINDEX","useInjectTooltipRef","options","children","setAnchorElement","isMounted","id","label","ariaLinkMode","linkId","undefined","useMemo","React","isValidElement","props","disabled","isDisabled","ref","mergeRefs","cloneElement","aria","_jsx","className","isHoverNotSupported","window","matchMedia","matches","isFocusVisible","element","_ignored","useTooltipOpen","delay","anchorElement","isOpen","setIsOpen","useState","onPopperMount","useRef","closeCallback","setCloseCallback","useCallbackOnEscape","useEffect","timer","openStartTime","shouldOpen","deferUpdate","duration","clearTimeout","update","IS_BROWSER","setTimeout","hoverNotSupported","hasTouch","openDelay","TOOLTIP_LONG_PRESS_DELAY","open","TOOLTIP_HOVER_DELAY","closeDelay","close","Date","now","getClose","overrideDelay","closeImmediately","events","longPressEnd","evt","stopPropagation","preventDefault","focus","push","current","popperElement","addEventListener","e","target","node","eventType","eventHandler","removeEventListener","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","placement","Placement","BOTTOM","closeMode","zIndex","ARROW_SIZE","Tooltip","forwardRef","forceOpen","forwardedProps","DOCUMENT","_Fragment","useId","setPopperElement","styles","attributes","usePopper","modifiers","name","offset","position","popper","isActivated","isHidden","wrappedChildren","labelLines","split","tooltipRef","useMergeRefs","_jsxs","TooltipContextProvider","Portal","role","classNames","handleBasicClasses","prefix","isInitializing","transform","VISUALLY_HIDDEN","style","map","line","displayName","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"tooltip-aa48ddda.js","sources":["../../../src/components/tooltip/constants.ts","../../../src/components/tooltip/useInjectTooltipRef.tsx","../../../src/utils/browser/isHoverNotSupported.ts","../../../src/utils/browser/isFocusVisible.ts","../../../src/components/tooltip/useTooltipOpen.tsx","../../../src/components/tooltip/Tooltip.tsx"],"sourcesContent":["import { POPOVER_ZINDEX } from '../popover/constants';\n\nexport const ARIA_LINK_MODES = ['aria-describedby', 'aria-labelledby'] as const;\n\n/**\n * Make sure tooltip appear above popovers.\n */\nexport const TOOLTIP_ZINDEX = POPOVER_ZINDEX + 1;\n","import React, { cloneElement, ReactNode, useMemo } from 'react';\n\nimport { mergeRefs } from '@lumx/react/utils/react/mergeRefs';\n\ninterface Options {\n /** Original tooltip anchor */\n children: ReactNode;\n /** Set tooltip anchor element */\n setAnchorElement: (e: HTMLDivElement) => void;\n /** Whether the tooltip is open or not */\n isMounted: boolean | undefined;\n /** Tooltip id */\n id: string;\n /** Tooltip label*/\n label?: string | null | false;\n /** Choose how the tooltip text should link to the anchor */\n ariaLinkMode: 'aria-describedby' | 'aria-labelledby';\n}\n\n/**\n * Add ref and ARIA attribute(s) in tooltip children or wrapped children.\n * Button, IconButton, Icon and React HTML elements don't need to be wrapped but any other kind of children (array, fragment, custom components)\n * will be wrapped in a <span>.\n */\nexport const useInjectTooltipRef = (options: Options): ReactNode => {\n const { children, setAnchorElement, isMounted, id, label, ariaLinkMode } = options;\n // Only add link when mounted\n const linkId = isMounted ? id : undefined;\n\n return useMemo(() => {\n if (!label) return children;\n\n // Non-disabled element\n if (React.isValidElement(children) && children.props.disabled !== true && children.props.isDisabled !== true) {\n const ref = mergeRefs((children as any).ref, setAnchorElement);\n const props = { ...children.props, ref };\n\n // Do not add label/description if the tooltip label is already in aria-label\n if (linkId && label !== props['aria-label']) {\n if (props[ariaLinkMode]) props[ariaLinkMode] += ' ';\n else props[ariaLinkMode] = '';\n props[ariaLinkMode] += linkId;\n }\n\n return cloneElement(children, props);\n }\n\n const aria = linkId ? { [ariaLinkMode]: linkId } : undefined;\n return (\n <div className=\"lumx-tooltip-anchor-wrapper\" ref={setAnchorElement} {...aria}>\n {children}\n </div>\n );\n }, [label, children, setAnchorElement, linkId, ariaLinkMode]);\n};\n","/** Return true if the browser does not support pointer hover */\nexport const isHoverNotSupported = (): boolean => !!window.matchMedia?.('(hover: none)').matches;\n","/** Check if the focus is visible on the given element */\nexport const isFocusVisible = (element?: HTMLElement) => {\n try {\n return element?.matches?.(':focus-visible, [data-focus-visible-added]');\n } catch (_ignored) {\n // Can fail on non browser env\n return true;\n }\n};\n","import { MutableRefObject, useEffect, useRef, useState } from 'react';\nimport { isHoverNotSupported } from '@lumx/react/utils/browser/isHoverNotSupported';\nimport { IS_BROWSER, TOOLTIP_HOVER_DELAY, TOOLTIP_LONG_PRESS_DELAY } from '@lumx/react/constants';\nimport { useCallbackOnEscape } from '@lumx/react/hooks/useCallbackOnEscape';\nimport { isFocusVisible } from '@lumx/react/utils/browser/isFocusVisible';\n\n/**\n * Hook controlling tooltip visibility using mouse hover the anchor and delay.\n *\n * @param delay Delay in millisecond to display the tooltip.\n * @param anchorElement Tooltip anchor element.\n * @return whether or not to show the tooltip.\n */\nexport function useTooltipOpen(delay: number | undefined, anchorElement: HTMLElement | null) {\n const [isOpen, setIsOpen] = useState(false);\n\n const onPopperMount = useRef<any>(null) as MutableRefObject<(elem: HTMLElement | null) => void>;\n\n // Global close on escape\n const [closeCallback, setCloseCallback] = useState<undefined | (() => void)>(undefined);\n useCallbackOnEscape(isOpen ? closeCallback : undefined);\n\n useEffect(() => {\n if (!anchorElement) {\n return undefined;\n }\n let timer: number | undefined;\n let openStartTime: number | undefined;\n let shouldOpen: boolean | undefined;\n\n // Run timer to defer updating the isOpen state.\n const deferUpdate = (duration: number) => {\n if (timer) clearTimeout(timer);\n const update = () => {\n setIsOpen(!!shouldOpen);\n };\n // Skip timeout in fake browsers\n if (!IS_BROWSER) update();\n else timer = setTimeout(update, duration) as any;\n };\n\n const hoverNotSupported = isHoverNotSupported();\n const hasTouch = 'ontouchstart' in window;\n\n // Adapt open/close delay\n const openDelay = delay || (hoverNotSupported ? TOOLTIP_LONG_PRESS_DELAY.open : TOOLTIP_HOVER_DELAY.open);\n const closeDelay = hoverNotSupported ? TOOLTIP_LONG_PRESS_DELAY.close : TOOLTIP_HOVER_DELAY.close;\n\n // Open (or/and cancel closing) of tooltip.\n const open = () => {\n if (shouldOpen && !timer) return;\n shouldOpen = true;\n openStartTime = Date.now();\n deferUpdate(openDelay);\n };\n\n // Close or cancel opening of tooltip\n const getClose = (overrideDelay = closeDelay) => {\n if (!shouldOpen && !timer) return;\n shouldOpen = false;\n deferUpdate(overrideDelay);\n };\n const close = () => getClose(closeDelay);\n const closeImmediately = () => getClose(0);\n setCloseCallback(() => closeImmediately);\n\n // Adapt event to browsers with or without `hover` support.\n const events: Array<[Node, Event['type'], any]> = [];\n if (hoverNotSupported) {\n /**\n * Handle touchend event\n * If end comes before the open delay => cancel tooltip (close immediate).\n * Else if end comes after the open delay => tooltip takes priority, the anchor's default touch end event is prevented.\n */\n const longPressEnd = (evt: Event) => {\n if (!openStartTime) return;\n if (Date.now() - openStartTime >= openDelay) {\n // Tooltip take priority, event prevented.\n evt.stopPropagation();\n evt.preventDefault();\n anchorElement.focus();\n // Close with delay.\n close();\n } else {\n // Close immediately.\n closeImmediately();\n }\n };\n\n events.push(\n [anchorElement, hasTouch ? 'touchstart' : 'mousedown', open],\n [anchorElement, hasTouch ? 'touchend' : 'mouseup', longPressEnd],\n );\n } else {\n events.push(\n [anchorElement, 'mouseenter', open],\n [anchorElement, 'mouseleave', close],\n [anchorElement, 'mouseup', closeImmediately],\n );\n\n onPopperMount.current = (popperElement: HTMLElement | null) => {\n if (!popperElement) return;\n // Popper element hover\n popperElement.addEventListener('mouseenter', open);\n popperElement.addEventListener('mouseleave', close);\n // Add to event list to remove on unmount\n events.push([popperElement, 'mouseenter', open], [popperElement, 'mouseleave', close]);\n };\n }\n\n // Events always applied no matter the browser:.\n events.push(\n // Open on focus (only if focus is visible).\n [\n anchorElement,\n 'focusin',\n (e: Event) => {\n // Skip if focus is not visible\n if (!isFocusVisible(e.target as HTMLElement)) return;\n open();\n },\n ],\n // Close on lost focus.\n [anchorElement, 'focusout', closeImmediately],\n );\n\n // Attach events\n for (const [node, eventType, eventHandler] of events) {\n node.addEventListener(eventType, eventHandler);\n }\n return () => {\n // Clear pending timers.\n if (timer) clearTimeout(timer);\n\n // Detach events.\n for (const [node, eventType, eventHandler] of events) {\n node.removeEventListener(eventType, eventHandler);\n }\n };\n }, [anchorElement, delay]);\n\n return { isOpen, onPopperMount: onPopperMount.current };\n}\n","/* eslint-disable react-hooks/rules-of-hooks */\nimport React, { ReactNode, useState } from 'react';\n\nimport classNames from 'classnames';\n\nimport { DOCUMENT, VISUALLY_HIDDEN } from '@lumx/react/constants';\nimport { GenericProps, HasCloseMode } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { useMergeRefs } from '@lumx/react/utils/react/mergeRefs';\nimport { Placement } from '@lumx/react/components/popover';\nimport { TooltipContextProvider } from '@lumx/react/components/tooltip/context';\nimport { useId } from '@lumx/react/hooks/useId';\nimport { usePopper } from '@lumx/react/hooks/usePopper';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { ARIA_LINK_MODES, TOOLTIP_ZINDEX } from '@lumx/react/components/tooltip/constants';\nimport { Portal } from '@lumx/react/utils';\nimport { useInjectTooltipRef } from './useInjectTooltipRef';\nimport { useTooltipOpen } from './useTooltipOpen';\n\n/** Position of the tooltip relative to the anchor element. */\nexport type TooltipPlacement = Extract<Placement, 'top' | 'right' | 'bottom' | 'left'>;\n\n/**\n * Defines the props of the component.\n */\nexport interface TooltipProps extends GenericProps, HasCloseMode {\n /** Anchor (element on which we activate the tooltip). */\n children: ReactNode;\n /** Delay (in ms) before closing the tooltip. */\n delay?: number;\n /** Whether the tooltip is displayed even without the mouse hovering the anchor. */\n forceOpen?: boolean;\n /** Label text. */\n label?: string | null | false;\n /** Placement of the tooltip relative to the anchor. */\n placement?: TooltipPlacement;\n /** Choose how the tooltip text should link to the anchor */\n ariaLinkMode?: (typeof ARIA_LINK_MODES)[number];\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Tooltip';\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: Partial<TooltipProps> = {\n placement: Placement.BOTTOM,\n closeMode: 'unmount',\n ariaLinkMode: 'aria-describedby',\n zIndex: TOOLTIP_ZINDEX,\n};\n\n/**\n * Arrow size (in pixel).\n */\nconst ARROW_SIZE = 8;\n\n/**\n * Tooltip component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Tooltip = forwardRef<TooltipProps, HTMLDivElement>((props, ref) => {\n const {\n label,\n children,\n className,\n delay,\n placement = DEFAULT_PROPS.placement,\n forceOpen,\n closeMode = DEFAULT_PROPS.closeMode,\n ariaLinkMode = DEFAULT_PROPS.ariaLinkMode,\n zIndex = DEFAULT_PROPS.zIndex,\n ...forwardedProps\n } = props;\n // Disable in SSR.\n if (!DOCUMENT) {\n return <>{children}</>;\n }\n\n const id = useId();\n\n const [popperElement, setPopperElement] = useState<null | HTMLElement>(null);\n const [anchorElement, setAnchorElement] = useState<null | HTMLElement>(null);\n const { styles, attributes, update } = usePopper(anchorElement, popperElement, {\n placement,\n modifiers: [\n {\n name: 'offset',\n options: { offset: [0, ARROW_SIZE] },\n },\n ],\n });\n\n const position = attributes?.popper?.['data-popper-placement'] ?? placement;\n const { isOpen: isActivated, onPopperMount } = useTooltipOpen(delay, anchorElement);\n const isOpen = (isActivated || forceOpen) && !!label;\n const isMounted = !!label && (isOpen || closeMode === 'hide');\n const isHidden = !isOpen && closeMode === 'hide';\n const wrappedChildren = useInjectTooltipRef({\n children,\n setAnchorElement,\n isMounted,\n id,\n label,\n ariaLinkMode: ariaLinkMode as any,\n });\n\n // Update on open\n React.useEffect(() => {\n if (isOpen || popperElement) update?.();\n }, [isOpen, update, popperElement]);\n\n const labelLines = label ? label.split('\\n') : [];\n\n const tooltipRef = useMergeRefs(ref, setPopperElement, onPopperMount);\n\n return (\n <>\n <TooltipContextProvider>{wrappedChildren}</TooltipContextProvider>\n {isMounted && (\n <Portal>\n <div\n ref={tooltipRef}\n {...forwardedProps}\n id={id}\n role=\"tooltip\"\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n position,\n isInitializing: !styles.popper?.transform,\n }),\n isHidden && VISUALLY_HIDDEN,\n )}\n style={{ ...(isHidden ? undefined : styles.popper), zIndex }}\n {...attributes.popper}\n >\n <div className={`${CLASSNAME}__arrow`} />\n <div className={`${CLASSNAME}__inner`}>\n {labelLines.map((line) => (\n <p key={line}>{line}</p>\n ))}\n </div>\n </div>\n </Portal>\n )}\n </>\n );\n});\nTooltip.displayName = COMPONENT_NAME;\nTooltip.className = CLASSNAME;\nTooltip.defaultProps = DEFAULT_PROPS;\n"],"names":["TOOLTIP_ZINDEX","POPOVER_ZINDEX","useInjectTooltipRef","options","children","setAnchorElement","isMounted","id","label","ariaLinkMode","linkId","undefined","useMemo","React","isValidElement","props","disabled","isDisabled","ref","mergeRefs","cloneElement","aria","_jsx","className","isHoverNotSupported","window","matchMedia","matches","isFocusVisible","element","_ignored","useTooltipOpen","delay","anchorElement","isOpen","setIsOpen","useState","onPopperMount","useRef","closeCallback","setCloseCallback","useCallbackOnEscape","useEffect","timer","openStartTime","shouldOpen","deferUpdate","duration","clearTimeout","update","IS_BROWSER","setTimeout","hoverNotSupported","hasTouch","openDelay","TOOLTIP_LONG_PRESS_DELAY","open","TOOLTIP_HOVER_DELAY","closeDelay","close","Date","now","getClose","overrideDelay","closeImmediately","events","longPressEnd","evt","stopPropagation","preventDefault","focus","push","current","popperElement","addEventListener","e","target","node","eventType","eventHandler","removeEventListener","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","placement","Placement","BOTTOM","closeMode","zIndex","ARROW_SIZE","Tooltip","forwardRef","forceOpen","forwardedProps","DOCUMENT","_Fragment","useId","setPopperElement","styles","attributes","usePopper","modifiers","name","offset","position","popper","isActivated","isHidden","wrappedChildren","labelLines","split","tooltipRef","useMergeRefs","_jsxs","TooltipContextProvider","Portal","role","classNames","handleBasicClasses","prefix","isInitializing","transform","VISUALLY_HIDDEN","style","map","line","displayName","defaultProps"],"mappings":"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"}
@@ -1,7 +1,5 @@
1
1
  import React__default from 'react';
2
2
  import { f as forwardRef, c as classNames } from '../forwardRef-15f62847.js';
3
- import isEmpty from 'lodash/isEmpty';
4
- import set from 'lodash/set';
5
3
  import { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';
6
4
  import { u as useTheme } from '../ThemeContext-3181f000.js';
7
5
  import { jsx, jsxs } from 'react/jsx-runtime';
@@ -67,7 +65,7 @@ const UserBlock = forwardRef((props, ref) => {
67
65
  const isLink = Boolean(linkProps?.href || linkAs);
68
66
  const isClickable = !!onClick || isLink;
69
67
  const nameBlock = React__default.useMemo(() => {
70
- if (isEmpty(name)) {
68
+ if (!name) {
71
69
  return null;
72
70
  }
73
71
  let NameComponent = 'span';
@@ -84,15 +82,11 @@ const UserBlock = forwardRef((props, ref) => {
84
82
  color: ColorPalette.dark
85
83
  });
86
84
  }
87
- // Disable avatar focus since the name block is the same link / same button.
88
- if (avatarProps) {
89
- set(avatarProps, ['thumbnailProps', 'tabIndex'], -1);
90
- }
91
85
  return /*#__PURE__*/jsx(NameComponent, {
92
86
  ...nProps,
93
87
  children: name
94
88
  });
95
- }, [avatarProps, isClickable, linkAs, linkProps, name, nameProps, onClick]);
89
+ }, [isClickable, linkAs, linkProps, name, nameProps, onClick]);
96
90
  const shouldDisplayFields = componentSize !== Size.s && componentSize !== Size.xs;
97
91
  const fieldsBlock = fields && shouldDisplayFields && /*#__PURE__*/jsx("div", {
98
92
  className: `${CLASSNAME}__fields`,
@@ -121,7 +115,12 @@ const UserBlock = forwardRef((props, ref) => {
121
115
  className: classNames(`${CLASSNAME}__avatar`, avatarProps.className),
122
116
  size: componentSize,
123
117
  onClick: onClick,
124
- theme: theme
118
+ theme: theme,
119
+ thumbnailProps: {
120
+ ...avatarProps?.thumbnailProps,
121
+ // Disable avatar focus since the name block is the same link / same button.
122
+ tabIndex: avatarProps ? -1 : undefined
123
+ }
125
124
  }), (fields || name || children || additionalFields) && /*#__PURE__*/jsxs("div", {
126
125
  className: `${CLASSNAME}__wrapper`,
127
126
  children: [children || nameBlock, fieldsBlock, shouldDisplayFields ? additionalFields : null]
@@ -142,4 +141,4 @@ UserBlock.className = CLASSNAME;
142
141
  UserBlock.defaultProps = DEFAULT_PROPS;
143
142
 
144
143
  export { UserBlock };
145
- //# sourceMappingURL=user-block-5f7b09af.js.map
144
+ //# sourceMappingURL=user-block-fc03f01a.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user-block-fc03f01a.js","sources":["../../../src/components/user-block/UserBlock.tsx"],"sourcesContent":["import React, { ReactNode } from 'react';\nimport classNames from 'classnames';\n\nimport { Avatar, ColorPalette, Link, Orientation, Size, Theme } from '@lumx/react';\nimport { GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { useTheme } from '@lumx/react/utils/theme/ThemeContext';\nimport { AvatarProps } from '../avatar/Avatar';\n\n/**\n * User block sizes.\n */\nexport type UserBlockSize = Extract<Size, 'xs' | 's' | 'm' | 'l'>;\n\n/**\n * Defines the props of the component.\n */\nexport interface UserBlockProps extends GenericProps, HasTheme {\n /** Props to pass to the avatar. */\n avatarProps?: Omit<AvatarProps, 'alt'>;\n /** Additional fields used to describe the user. */\n fields?: string[];\n /** Props to pass to the link wrapping the avatar thumbnail. */\n linkProps?: React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>;\n /** Custom react component for the link (can be used to inject react router Link). */\n linkAs?: 'a' | any;\n /** Multiple action toolbar content. */\n multipleActions?: ReactNode;\n /** User name. */\n name?: React.ReactNode;\n /** Props to pass to the name block. */\n nameProps?: GenericProps;\n /** Orientation. */\n orientation?: Orientation;\n /** Simple action toolbar content. */\n simpleAction?: ReactNode;\n /** Size variant. */\n size?: UserBlockSize;\n /** On click callback. */\n onClick?(): void;\n /** On mouse enter callback. */\n onMouseEnter?(): void;\n /** On mouse leave callback. */\n onMouseLeave?(): void;\n /** Display additional fields below the original name and fields */\n additionalFields?: React.ReactNode;\n /** Display an additional element after the entire component. (to the right if orientation is horizontal, at the bottom if orientation is vertical) */\n after?: React.ReactNode;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'UserBlock';\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: Partial<UserBlockProps> = {\n orientation: Orientation.horizontal,\n size: Size.m,\n};\n\n/**\n * UserBlock component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const UserBlock = forwardRef<UserBlockProps, HTMLDivElement>((props, ref) => {\n const defaultTheme = useTheme() || Theme.light;\n const {\n avatarProps,\n className,\n fields,\n linkProps,\n linkAs,\n multipleActions,\n name,\n nameProps,\n onClick,\n onMouseEnter,\n onMouseLeave,\n orientation = DEFAULT_PROPS.orientation,\n simpleAction,\n size = DEFAULT_PROPS.size,\n theme = defaultTheme,\n children,\n additionalFields,\n after,\n ...forwardedProps\n } = props;\n let componentSize = size;\n\n // Special case - When using vertical orientation force the size to be Sizes.l.\n if (orientation === Orientation.vertical) {\n componentSize = Size.l;\n }\n\n const shouldDisplayActions: boolean = orientation === Orientation.vertical;\n\n const isLink = Boolean(linkProps?.href || linkAs);\n const isClickable = !!onClick || isLink;\n\n const nameBlock: ReactNode = React.useMemo(() => {\n if (!name) {\n return null;\n }\n let NameComponent: any = 'span';\n const nProps: any = {\n ...nameProps,\n className: classNames(`${CLASSNAME}__name`, linkProps?.className, nameProps?.className),\n };\n if (isClickable) {\n NameComponent = Link;\n Object.assign(nProps, {\n ...linkProps,\n onClick,\n linkAs,\n color: ColorPalette.dark,\n });\n }\n return <NameComponent {...nProps}>{name}</NameComponent>;\n }, [isClickable, linkAs, linkProps, name, nameProps, onClick]);\n\n const shouldDisplayFields = componentSize !== Size.s && componentSize !== Size.xs;\n\n const fieldsBlock: ReactNode = fields && shouldDisplayFields && (\n <div className={`${CLASSNAME}__fields`}>\n {fields.map((field: string, idx: number) => (\n <span key={idx} className={`${CLASSNAME}__field`}>\n {field}\n </span>\n ))}\n </div>\n );\n\n return (\n <div\n ref={ref}\n {...forwardedProps}\n className={classNames(\n className,\n handleBasicClasses({ prefix: CLASSNAME, orientation, size: componentSize, theme, isClickable }),\n )}\n onMouseLeave={onMouseLeave}\n onMouseEnter={onMouseEnter}\n >\n {avatarProps && (\n <Avatar\n linkAs={linkAs}\n linkProps={linkProps}\n alt=\"\"\n {...(avatarProps as any)}\n className={classNames(`${CLASSNAME}__avatar`, avatarProps.className)}\n size={componentSize}\n onClick={onClick}\n theme={theme}\n thumbnailProps={{\n ...avatarProps?.thumbnailProps,\n // Disable avatar focus since the name block is the same link / same button.\n tabIndex: avatarProps ? -1 : undefined,\n }}\n />\n )}\n {(fields || name || children || additionalFields) && (\n <div className={`${CLASSNAME}__wrapper`}>\n {children || nameBlock}\n {fieldsBlock}\n {shouldDisplayFields ? additionalFields : null}\n </div>\n )}\n {shouldDisplayActions && simpleAction && <div className={`${CLASSNAME}__action`}>{simpleAction}</div>}\n {shouldDisplayActions && multipleActions && (\n <div className={`${CLASSNAME}__actions`}>{multipleActions}</div>\n )}\n {after ? <div className={`${CLASSNAME}__after`}>{after}</div> : null}\n </div>\n );\n});\nUserBlock.displayName = COMPONENT_NAME;\nUserBlock.className = CLASSNAME;\nUserBlock.defaultProps = DEFAULT_PROPS;\n"],"names":["COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","orientation","Orientation","horizontal","size","Size","m","UserBlock","forwardRef","props","ref","defaultTheme","useTheme","Theme","light","avatarProps","className","fields","linkProps","linkAs","multipleActions","name","nameProps","onClick","onMouseEnter","onMouseLeave","simpleAction","theme","children","additionalFields","after","forwardedProps","componentSize","vertical","l","shouldDisplayActions","isLink","Boolean","href","isClickable","nameBlock","React","useMemo","NameComponent","nProps","classNames","Link","Object","assign","color","ColorPalette","dark","_jsx","shouldDisplayFields","s","xs","fieldsBlock","map","field","idx","_jsxs","handleBasicClasses","prefix","Avatar","alt","thumbnailProps","tabIndex","undefined","displayName","defaultProps"],"mappings":"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"}
@@ -1,16 +1,16 @@
1
1
  import React__default, { useState, useEffect, useLayoutEffect, useMemo, useRef } from 'react';
2
2
  import { f as forwardRef, c as classNames } from './forwardRef-15f62847.js';
3
- import { u as useCallbackOnEscape } from './useCallbackOnEscape-ea4d9eb4.js';
3
+ import { u as useCallbackOnEscape } from './useCallbackOnEscape-0b220f9c.js';
4
4
  import { D as DOCUMENT, W as WINDOW } from './constants-d0e3f49e.js';
5
5
  import { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';
6
6
  import { u as useMergeRefs } from './mergeRefs-f0d7d6ea.js';
7
- import { g as getFirstAndLastFocusable, u as useFocusTrap } from './useFocusTrap-c3c6378b.js';
7
+ import { g as getFirstAndLastFocusable, u as useFocusTrap } from './useFocusTrap-3114e5e8.js';
8
8
  import { jsx, jsxs } from 'react/jsx-runtime';
9
9
  import { T as ThemeProvider } from './ThemeContext-3181f000.js';
10
10
  import memoize from 'lodash/memoize';
11
11
  import { A as ARROW_SIZE, u as usePopper, d as detectOverflow, F as FitAnchorWidth, P as Placement, a as POPOVER_ZINDEX } from './constants-b9e57936.js';
12
12
  import { P as Portal } from './Portal-3f86608e.js';
13
- import { C as ClickAwayProvider } from './ClickAwayProvider-7093ba23.js';
13
+ import { C as ClickAwayProvider } from './ClickAwayProvider-1204f237.js';
14
14
 
15
15
  /**
16
16
  * Hook focusing an element when defined and `focus` boolean `true`.
@@ -433,4 +433,4 @@ Popover.className = CLASSNAME;
433
433
  Popover.defaultProps = DEFAULT_PROPS;
434
434
 
435
435
  export { Popover as P, useFocus as u };
436
- //# sourceMappingURL=index-9df37c0d.js.map
436
+ //# sourceMappingURL=index-8e7fecb5.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index-9df37c0d.js","sources":["../../src/hooks/useFocus.tsx","../../src/utils/react/skipRender.tsx","../../src/utils/react/OnBeforeUnmount.tsx","../../src/components/popover/useRestoreFocusOnClose.tsx","../../src/components/popover/usePopoverStyle.tsx","../../src/components/popover/Popover.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\n/**\n * Hook focusing an element when defined and `focus` boolean `true`.\n *\n * @param element Element to focus.\n * @param shouldFocus Boolean flag to trigger the focus\n */\nexport function useFocus(element: HTMLElement | null | undefined, shouldFocus = true): void {\n const [wasFocus, setWasFocus] = useState(false);\n useEffect(\n () => {\n if (shouldFocus && wasFocus !== shouldFocus && element) {\n element.focus();\n setWasFocus(shouldFocus);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [element, shouldFocus],\n );\n}\n","import React from 'react';\n\nimport { DOCUMENT } from '@lumx/react/constants';\nimport type { Comp } from '@lumx/react/utils/type';\n/**\n * HOC component wrapping a component to skip render if predicate return falsy\n */\nexport const skipRender = <P, T>(predicate: (props: P) => any, Component: Comp<P, T>) => {\n const Wrapper = React.forwardRef<T, P>((props, ref) => {\n if (!DOCUMENT) {\n // Can't render in SSR.\n return null;\n }\n return <Component ref={ref} {...props} />;\n });\n Wrapper.displayName = Component.displayName;\n return Wrapper;\n};\n","import { useLayoutEffect } from 'react';\n\n/**\n * Helper component using useLayoutEffect to trigger a callback on before unmount.\n *\n * The callback must be wrapped in a React ref to avoid updating the `useLayoutEffect` before the un-mount\n */\nexport const OnBeforeUnmount = ({ callbackRef }: { callbackRef: React.RefObject<(() => void) | undefined> }) => {\n useLayoutEffect(\n () => {\n return () => {\n // On unmount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n callbackRef.current?.();\n };\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n return null;\n};\n","import React from 'react';\nimport { getFirstAndLastFocusable } from '@lumx/react/utils/browser/focus/getFirstAndLastFocusable';\nimport { OnBeforeUnmount } from '@lumx/react/utils/react/OnBeforeUnmount';\nimport type { PopoverProps } from './Popover';\n\n/**\n * Provides an unmount sentinel to inject in the popover to detect when it closes and restore the focus to the\n * anchor if needed.\n */\nexport function useRestoreFocusOnClose(\n {\n focusAnchorOnClose,\n anchorRef,\n parentElement,\n }: Pick<PopoverProps, 'focusAnchorOnClose' | 'anchorRef' | 'parentElement'>,\n popoverElement?: HTMLElement | null,\n) {\n const onBeforeUnmountRef = React.useRef<(() => void) | undefined>();\n\n React.useEffect(() => {\n if (!popoverElement || !focusAnchorOnClose) {\n onBeforeUnmountRef.current = undefined;\n return;\n }\n\n onBeforeUnmountRef.current = () => {\n const isFocusWithin = popoverElement?.contains(document.activeElement);\n if (!isFocusWithin) return;\n\n // On next render\n setTimeout(() => {\n const anchor = anchorRef.current;\n const elementToFocus =\n // Provided parent element\n parentElement?.current ||\n // Or first focusable element in anchor\n (anchor ? getFirstAndLastFocusable(anchor).first : undefined) ||\n // Fallback to anchor\n anchor;\n\n elementToFocus?.focus({ preventScroll: true });\n }, 0);\n };\n }, [anchorRef, focusAnchorOnClose, parentElement, popoverElement]);\n\n return <OnBeforeUnmount callbackRef={onBeforeUnmountRef} />;\n}\n","import { useEffect, useMemo, useState } from 'react';\nimport memoize from 'lodash/memoize';\nimport { detectOverflow } from '@popperjs/core';\n\nimport { DOCUMENT, WINDOW } from '@lumx/react/constants';\nimport { PopoverProps } from '@lumx/react/components/popover/Popover';\nimport { usePopper } from '@lumx/react/hooks/usePopper';\nimport { ARROW_SIZE, FitAnchorWidth, Placement } from './constants';\n\n/**\n * Popper js modifier to fit popover min width to the anchor width.\n */\nconst sameWidth = memoize((anchorWidthOption: FitAnchorWidth) => ({\n name: 'sameWidth',\n enabled: true,\n phase: 'beforeWrite',\n requires: ['computeStyles'],\n fn({ state }: any) {\n // eslint-disable-next-line no-param-reassign\n state.styles.popper[anchorWidthOption] = `${state.rects.reference.width}px`;\n },\n effect({ state }: any) {\n // eslint-disable-next-line no-param-reassign\n state.elements.popper.style[anchorWidthOption] = `${state.elements.reference.offsetWidth}px`;\n },\n}));\n\n/**\n * Popper js modifier to compute max size of the popover.\n */\nconst maxSize = {\n name: 'maxSize',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['offset', 'preventOverflow', 'flip'],\n fn({ state, name, options }: any) {\n const overflow = detectOverflow(state, options);\n\n const { y = 0, x = 0 } = state.modifiersData.preventOverflow;\n const { width, height } = state.rects.popper;\n\n const [basePlacement] = state.placement.split('-');\n\n const widthProp = basePlacement === 'left' ? 'left' : 'right';\n const heightProp = basePlacement === 'top' ? 'top' : 'bottom';\n // eslint-disable-next-line no-param-reassign\n state.modifiersData[name] = {\n width: width - overflow[widthProp] - x,\n height: height - overflow[heightProp] - y,\n };\n },\n};\n\n/**\n * Popper js modifier to apply the max height.\n */\nconst applyMaxHeight = {\n name: 'applyMaxHeight',\n enabled: true,\n phase: 'beforeWrite',\n requires: ['maxSize'],\n fn({ state }: any) {\n const { height } = state.modifiersData.maxSize;\n // eslint-disable-next-line no-param-reassign\n state.elements.popper.style.maxHeight = `${height - ARROW_SIZE}px`;\n },\n};\n\ntype Options = Pick<\n PopoverProps,\n | 'offset'\n | 'hasArrow'\n | 'fitToAnchorWidth'\n | 'fitWithinViewportHeight'\n | 'boundaryRef'\n | 'anchorRef'\n | 'placement'\n | 'style'\n | 'zIndex'\n>;\n\ninterface Output {\n styles: { arrow?: React.CSSProperties; popover?: React.CSSProperties };\n attributes: any;\n isPositioned: boolean;\n position?: Placement;\n setArrowElement?: React.Ref<HTMLDivElement>;\n setPopperElement?: React.Ref<HTMLDivElement>;\n popperElement: HTMLElement | null;\n}\n\nexport function usePopoverStyle({\n offset,\n hasArrow,\n fitToAnchorWidth,\n fitWithinViewportHeight,\n boundaryRef,\n anchorRef,\n placement,\n style,\n zIndex,\n}: Options): Output {\n const [popperElement, setPopperElement] = useState<null | HTMLElement>(null);\n const [arrowElement, setArrowElement] = useState<null | HTMLElement>(null);\n\n const actualOffset: [number, number] = [offset?.along ?? 0, (offset?.away ?? 0) + (hasArrow ? ARROW_SIZE : 0)];\n const modifiers: any = [\n {\n name: 'offset',\n options: { offset: actualOffset },\n },\n ];\n if (hasArrow && arrowElement) {\n modifiers.push({\n name: 'arrow',\n options: {\n element: arrowElement,\n padding: ARROW_SIZE / 2,\n },\n });\n }\n if (fitToAnchorWidth) {\n const fitWidth = typeof fitToAnchorWidth === 'string' ? fitToAnchorWidth : FitAnchorWidth.MIN_WIDTH;\n modifiers.push(sameWidth(fitWidth));\n }\n if (fitWithinViewportHeight) {\n modifiers.push({ ...maxSize, options: { boundary: boundaryRef?.current } }, applyMaxHeight);\n }\n if (boundaryRef) {\n modifiers.push(\n { name: 'flip', options: { boundary: boundaryRef.current } },\n { name: 'preventOverflow', options: { boundary: boundaryRef.current } },\n );\n }\n\n const { styles, attributes, state, update } = usePopper(anchorRef.current, popperElement, { placement, modifiers });\n\n // Auto update popover\n useEffect(() => {\n const { current: anchorElement } = anchorRef;\n if (!update || !popperElement || !anchorElement || !WINDOW?.ResizeObserver) {\n return undefined;\n }\n let running: ReturnType<typeof setTimeout> | undefined;\n function updateRateLimited() {\n if (running) return;\n update?.();\n running = setTimeout(() => {\n running = undefined;\n }, 100);\n }\n updateRateLimited();\n\n // On anchor or popover resize\n const resizeObserver = new ResizeObserver(updateRateLimited);\n resizeObserver.observe(anchorElement);\n resizeObserver.observe(popperElement);\n return () => {\n resizeObserver.disconnect();\n };\n }, [anchorRef, popperElement, update]);\n\n const position = state?.placement ?? placement;\n\n const popoverStyle = useMemo(() => {\n const newStyles = { ...style, ...styles.popper, zIndex };\n\n if (fitWithinViewportHeight && !newStyles.maxHeight) {\n newStyles.maxHeight = WINDOW?.innerHeight || DOCUMENT?.documentElement.clientHeight;\n }\n\n return newStyles;\n }, [style, styles.popper, zIndex, fitWithinViewportHeight]);\n\n return {\n styles: { arrow: styles.arrow, popover: popoverStyle },\n attributes,\n isPositioned: (state?.rects?.popper?.y ?? -1) >= 0,\n position,\n setArrowElement,\n setPopperElement,\n popperElement,\n };\n}\n","import { ReactNode, RefObject, useRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { useCallbackOnEscape } from '@lumx/react/hooks/useCallbackOnEscape';\nimport { useFocus } from '@lumx/react/hooks/useFocus';\nimport { ClickAwayProvider } from '@lumx/react/utils/ClickAwayProvider';\nimport { DOCUMENT } from '@lumx/react/constants';\nimport { Comp, GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { useMergeRefs } from '@lumx/react/utils/react/mergeRefs';\nimport { useFocusTrap } from '@lumx/react/hooks/useFocusTrap';\nimport { skipRender } from '@lumx/react/utils/react/skipRender';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { ThemeProvider } from '@lumx/react/utils/theme/ThemeContext';\nimport { Portal } from '@lumx/react/utils';\nimport { useRestoreFocusOnClose } from './useRestoreFocusOnClose';\nimport { usePopoverStyle } from './usePopoverStyle';\nimport { Elevation, FitAnchorWidth, Offset, Placement, POPOVER_ZINDEX } from './constants';\n\n/**\n * Defines the props of the component.\n */\nexport interface PopoverProps extends GenericProps, HasTheme {\n /** Reference to the DOM element used to set the position of the popover. */\n anchorRef: React.RefObject<HTMLElement>;\n /** Customize the root element. (Must accept ref forwarding and props forwarding!). */\n as?: React.ElementType;\n /** Element which will act as boundary when opening the popover. */\n boundaryRef?: RefObject<HTMLElement>;\n /** Content. */\n children: ReactNode;\n /** Whether a click anywhere out of the popover would close it. */\n closeOnClickAway?: boolean;\n /** Whether an escape key press would close the popover. */\n closeOnEscape?: boolean;\n /** Shadow elevation. */\n elevation?: Elevation;\n /**\n * Manage popover width:\n * - `maxWidth`: popover not bigger than anchor\n * - `minWidth` or `true`: popover not smaller than anchor\n * - `width`: popover equal to the anchor.\n */\n fitToAnchorWidth?: FitAnchorWidth | boolean;\n /** Shrink popover if even after flipping there is not enough space. */\n fitWithinViewportHeight?: boolean;\n /** Element to focus when opening the popover. */\n focusElement?: RefObject<HTMLElement>;\n /** Whether the focus should go back on the anchor when popover closes and focus is within. */\n focusAnchorOnClose?: boolean;\n /** Whether we put an arrow or not. */\n hasArrow?: boolean;\n /** Whether the popover is open or not. */\n isOpen: boolean;\n /** Offset placement relative to anchor. */\n offset?: Offset;\n /** Reference to the parent element that triggered the popover (will get back focus on close or else fallback on the anchor element). */\n parentElement?: RefObject<HTMLElement>;\n /** Placement relative to anchor. */\n placement?: Placement;\n /** Whether the popover should be rendered into a DOM node that exists outside the DOM hierarchy of the parent component. */\n usePortal?: boolean;\n /** The element in which the focus trap should be set. Default to popover. */\n focusTrapZoneElement?: RefObject<HTMLElement>;\n /** Z-axis position. */\n zIndex?: number;\n /** On close callback (on click away or Escape pressed). */\n onClose?(): void;\n /** Whether the popover should trap the focus within itself. Default to false. */\n withFocusTrap?: boolean;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Popover';\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: Partial<PopoverProps> = {\n elevation: 3,\n placement: Placement.AUTO,\n focusAnchorOnClose: true,\n usePortal: true,\n zIndex: POPOVER_ZINDEX,\n};\n\n// Inner component (must be wrapped before export)\nconst _InnerPopover = forwardRef<PopoverProps, HTMLDivElement>((props, ref) => {\n const {\n anchorRef,\n as: Component = 'div',\n children,\n className,\n closeOnClickAway,\n closeOnEscape,\n elevation = DEFAULT_PROPS.elevation,\n focusElement,\n hasArrow,\n isOpen,\n onClose,\n parentElement,\n usePortal = DEFAULT_PROPS.usePortal,\n focusAnchorOnClose = DEFAULT_PROPS.focusAnchorOnClose,\n withFocusTrap,\n boundaryRef,\n fitToAnchorWidth,\n fitWithinViewportHeight,\n focusTrapZoneElement,\n offset,\n placement = DEFAULT_PROPS.placement,\n style,\n theme,\n zIndex = DEFAULT_PROPS.zIndex,\n ...forwardedProps\n } = props;\n const popoverRef = useRef<HTMLDivElement>(null);\n\n const { styles, attributes, isPositioned, position, setArrowElement, setPopperElement, popperElement } =\n usePopoverStyle({\n offset,\n hasArrow,\n fitToAnchorWidth,\n fitWithinViewportHeight,\n boundaryRef,\n anchorRef,\n placement,\n style,\n zIndex,\n });\n\n const unmountSentinel = useRestoreFocusOnClose({ focusAnchorOnClose, anchorRef, parentElement }, popperElement);\n const focusZoneElement = focusTrapZoneElement?.current || popoverRef?.current;\n\n useCallbackOnEscape(onClose, isOpen && closeOnEscape);\n\n /** Only set focus within if the focus trap is disabled as they interfere with one another. */\n useFocus(focusElement?.current, !withFocusTrap && isOpen && isPositioned);\n useFocusTrap(withFocusTrap && isOpen && focusZoneElement, focusElement?.current);\n\n const clickAwayRefs = useRef([popoverRef, anchorRef]);\n const mergedRefs = useMergeRefs<HTMLDivElement>(setPopperElement, ref, popoverRef);\n\n return isOpen ? (\n <Portal enabled={usePortal}>\n <Component\n {...forwardedProps}\n ref={mergedRefs}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n theme,\n elevation: Math.min(elevation || 0, 5),\n position,\n isInitializing: !styles.popover?.transform,\n }),\n )}\n style={styles.popover}\n {...attributes.popper}\n >\n {unmountSentinel}\n <ClickAwayProvider callback={closeOnClickAway && onClose} childrenRefs={clickAwayRefs}>\n {hasArrow && (\n <div ref={setArrowElement} className={`${CLASSNAME}__arrow`} style={styles.arrow}>\n <svg viewBox=\"0 0 14 14\" aria-hidden>\n <path d=\"M8 3.49C7.62 2.82 6.66 2.82 6.27 3.48L.04 14 14.04 14 8 3.49Z\" />\n </svg>\n </div>\n )}\n <ThemeProvider value={theme}>{children}</ThemeProvider>\n </ClickAwayProvider>\n </Component>\n </Portal>\n ) : null;\n});\n_InnerPopover.displayName = COMPONENT_NAME;\n\n/**\n * Popover component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Popover: Comp<PopoverProps, HTMLDivElement> = skipRender(\n // Skip render in SSR\n () => Boolean(DOCUMENT),\n _InnerPopover,\n);\nPopover.displayName = COMPONENT_NAME;\nPopover.className = CLASSNAME;\nPopover.defaultProps = DEFAULT_PROPS;\n"],"names":["useFocus","element","shouldFocus","wasFocus","setWasFocus","useState","useEffect","focus","skipRender","predicate","Component","Wrapper","React","forwardRef","props","ref","DOCUMENT","_jsx","displayName","OnBeforeUnmount","callbackRef","useLayoutEffect","current","useRestoreFocusOnClose","focusAnchorOnClose","anchorRef","parentElement","popoverElement","onBeforeUnmountRef","useRef","undefined","isFocusWithin","contains","document","activeElement","setTimeout","anchor","elementToFocus","getFirstAndLastFocusable","first","preventScroll","sameWidth","memoize","anchorWidthOption","name","enabled","phase","requires","fn","state","styles","popper","rects","reference","width","effect","elements","style","offsetWidth","maxSize","requiresIfExists","options","overflow","detectOverflow","y","x","modifiersData","preventOverflow","height","basePlacement","placement","split","widthProp","heightProp","applyMaxHeight","maxHeight","ARROW_SIZE","usePopoverStyle","offset","hasArrow","fitToAnchorWidth","fitWithinViewportHeight","boundaryRef","zIndex","popperElement","setPopperElement","arrowElement","setArrowElement","actualOffset","along","away","modifiers","push","padding","fitWidth","FitAnchorWidth","MIN_WIDTH","boundary","attributes","update","usePopper","anchorElement","WINDOW","ResizeObserver","running","updateRateLimited","resizeObserver","observe","disconnect","position","popoverStyle","useMemo","newStyles","innerHeight","documentElement","clientHeight","arrow","popover","isPositioned","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","elevation","Placement","AUTO","usePortal","POPOVER_ZINDEX","_InnerPopover","as","children","className","closeOnClickAway","closeOnEscape","focusElement","isOpen","onClose","withFocusTrap","focusTrapZoneElement","theme","forwardedProps","popoverRef","unmountSentinel","focusZoneElement","useCallbackOnEscape","useFocusTrap","clickAwayRefs","mergedRefs","useMergeRefs","Portal","_jsxs","classNames","handleBasicClasses","prefix","Math","min","isInitializing","transform","ClickAwayProvider","callback","childrenRefs","viewBox","d","ThemeProvider","value","Popover","Boolean","defaultProps"],"mappings":"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"}
1
+ {"version":3,"file":"index-8e7fecb5.js","sources":["../../src/hooks/useFocus.tsx","../../src/utils/react/skipRender.tsx","../../src/utils/react/OnBeforeUnmount.tsx","../../src/components/popover/useRestoreFocusOnClose.tsx","../../src/components/popover/usePopoverStyle.tsx","../../src/components/popover/Popover.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\n/**\n * Hook focusing an element when defined and `focus` boolean `true`.\n *\n * @param element Element to focus.\n * @param shouldFocus Boolean flag to trigger the focus\n */\nexport function useFocus(element: HTMLElement | null | undefined, shouldFocus = true): void {\n const [wasFocus, setWasFocus] = useState(false);\n useEffect(\n () => {\n if (shouldFocus && wasFocus !== shouldFocus && element) {\n element.focus();\n setWasFocus(shouldFocus);\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [element, shouldFocus],\n );\n}\n","import React from 'react';\n\nimport { DOCUMENT } from '@lumx/react/constants';\nimport type { Comp } from '@lumx/react/utils/type';\n/**\n * HOC component wrapping a component to skip render if predicate return falsy\n */\nexport const skipRender = <P, T>(predicate: (props: P) => any, Component: Comp<P, T>) => {\n const Wrapper = React.forwardRef<T, P>((props, ref) => {\n if (!DOCUMENT) {\n // Can't render in SSR.\n return null;\n }\n return <Component ref={ref} {...props} />;\n });\n Wrapper.displayName = Component.displayName;\n return Wrapper;\n};\n","import { useLayoutEffect } from 'react';\n\n/**\n * Helper component using useLayoutEffect to trigger a callback on before unmount.\n *\n * The callback must be wrapped in a React ref to avoid updating the `useLayoutEffect` before the un-mount\n */\nexport const OnBeforeUnmount = ({ callbackRef }: { callbackRef: React.RefObject<(() => void) | undefined> }) => {\n useLayoutEffect(\n () => {\n return () => {\n // On unmount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n callbackRef.current?.();\n };\n }, // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n return null;\n};\n","import React from 'react';\nimport { getFirstAndLastFocusable } from '@lumx/react/utils/browser/focus/getFirstAndLastFocusable';\nimport { OnBeforeUnmount } from '@lumx/react/utils/react/OnBeforeUnmount';\nimport type { PopoverProps } from './Popover';\n\n/**\n * Provides an unmount sentinel to inject in the popover to detect when it closes and restore the focus to the\n * anchor if needed.\n */\nexport function useRestoreFocusOnClose(\n {\n focusAnchorOnClose,\n anchorRef,\n parentElement,\n }: Pick<PopoverProps, 'focusAnchorOnClose' | 'anchorRef' | 'parentElement'>,\n popoverElement?: HTMLElement | null,\n) {\n const onBeforeUnmountRef = React.useRef<(() => void) | undefined>();\n\n React.useEffect(() => {\n if (!popoverElement || !focusAnchorOnClose) {\n onBeforeUnmountRef.current = undefined;\n return;\n }\n\n onBeforeUnmountRef.current = () => {\n const isFocusWithin = popoverElement?.contains(document.activeElement);\n if (!isFocusWithin) return;\n\n // On next render\n setTimeout(() => {\n const anchor = anchorRef.current;\n const elementToFocus =\n // Provided parent element\n parentElement?.current ||\n // Or first focusable element in anchor\n (anchor ? getFirstAndLastFocusable(anchor).first : undefined) ||\n // Fallback to anchor\n anchor;\n\n elementToFocus?.focus({ preventScroll: true });\n }, 0);\n };\n }, [anchorRef, focusAnchorOnClose, parentElement, popoverElement]);\n\n return <OnBeforeUnmount callbackRef={onBeforeUnmountRef} />;\n}\n","import { useEffect, useMemo, useState } from 'react';\nimport memoize from 'lodash/memoize';\nimport { detectOverflow } from '@popperjs/core';\n\nimport { DOCUMENT, WINDOW } from '@lumx/react/constants';\nimport { PopoverProps } from '@lumx/react/components/popover/Popover';\nimport { usePopper } from '@lumx/react/hooks/usePopper';\nimport { ARROW_SIZE, FitAnchorWidth, Placement } from './constants';\n\n/**\n * Popper js modifier to fit popover min width to the anchor width.\n */\nconst sameWidth = memoize((anchorWidthOption: FitAnchorWidth) => ({\n name: 'sameWidth',\n enabled: true,\n phase: 'beforeWrite',\n requires: ['computeStyles'],\n fn({ state }: any) {\n // eslint-disable-next-line no-param-reassign\n state.styles.popper[anchorWidthOption] = `${state.rects.reference.width}px`;\n },\n effect({ state }: any) {\n // eslint-disable-next-line no-param-reassign\n state.elements.popper.style[anchorWidthOption] = `${state.elements.reference.offsetWidth}px`;\n },\n}));\n\n/**\n * Popper js modifier to compute max size of the popover.\n */\nconst maxSize = {\n name: 'maxSize',\n enabled: true,\n phase: 'main',\n requiresIfExists: ['offset', 'preventOverflow', 'flip'],\n fn({ state, name, options }: any) {\n const overflow = detectOverflow(state, options);\n\n const { y = 0, x = 0 } = state.modifiersData.preventOverflow;\n const { width, height } = state.rects.popper;\n\n const [basePlacement] = state.placement.split('-');\n\n const widthProp = basePlacement === 'left' ? 'left' : 'right';\n const heightProp = basePlacement === 'top' ? 'top' : 'bottom';\n // eslint-disable-next-line no-param-reassign\n state.modifiersData[name] = {\n width: width - overflow[widthProp] - x,\n height: height - overflow[heightProp] - y,\n };\n },\n};\n\n/**\n * Popper js modifier to apply the max height.\n */\nconst applyMaxHeight = {\n name: 'applyMaxHeight',\n enabled: true,\n phase: 'beforeWrite',\n requires: ['maxSize'],\n fn({ state }: any) {\n const { height } = state.modifiersData.maxSize;\n // eslint-disable-next-line no-param-reassign\n state.elements.popper.style.maxHeight = `${height - ARROW_SIZE}px`;\n },\n};\n\ntype Options = Pick<\n PopoverProps,\n | 'offset'\n | 'hasArrow'\n | 'fitToAnchorWidth'\n | 'fitWithinViewportHeight'\n | 'boundaryRef'\n | 'anchorRef'\n | 'placement'\n | 'style'\n | 'zIndex'\n>;\n\ninterface Output {\n styles: { arrow?: React.CSSProperties; popover?: React.CSSProperties };\n attributes: any;\n isPositioned: boolean;\n position?: Placement;\n setArrowElement?: React.Ref<HTMLDivElement>;\n setPopperElement?: React.Ref<HTMLDivElement>;\n popperElement: HTMLElement | null;\n}\n\nexport function usePopoverStyle({\n offset,\n hasArrow,\n fitToAnchorWidth,\n fitWithinViewportHeight,\n boundaryRef,\n anchorRef,\n placement,\n style,\n zIndex,\n}: Options): Output {\n const [popperElement, setPopperElement] = useState<null | HTMLElement>(null);\n const [arrowElement, setArrowElement] = useState<null | HTMLElement>(null);\n\n const actualOffset: [number, number] = [offset?.along ?? 0, (offset?.away ?? 0) + (hasArrow ? ARROW_SIZE : 0)];\n const modifiers: any = [\n {\n name: 'offset',\n options: { offset: actualOffset },\n },\n ];\n if (hasArrow && arrowElement) {\n modifiers.push({\n name: 'arrow',\n options: {\n element: arrowElement,\n padding: ARROW_SIZE / 2,\n },\n });\n }\n if (fitToAnchorWidth) {\n const fitWidth = typeof fitToAnchorWidth === 'string' ? fitToAnchorWidth : FitAnchorWidth.MIN_WIDTH;\n modifiers.push(sameWidth(fitWidth));\n }\n if (fitWithinViewportHeight) {\n modifiers.push({ ...maxSize, options: { boundary: boundaryRef?.current } }, applyMaxHeight);\n }\n if (boundaryRef) {\n modifiers.push(\n { name: 'flip', options: { boundary: boundaryRef.current } },\n { name: 'preventOverflow', options: { boundary: boundaryRef.current } },\n );\n }\n\n const { styles, attributes, state, update } = usePopper(anchorRef.current, popperElement, { placement, modifiers });\n\n // Auto update popover\n useEffect(() => {\n const { current: anchorElement } = anchorRef;\n if (!update || !popperElement || !anchorElement || !WINDOW?.ResizeObserver) {\n return undefined;\n }\n let running: ReturnType<typeof setTimeout> | undefined;\n function updateRateLimited() {\n if (running) return;\n update?.();\n running = setTimeout(() => {\n running = undefined;\n }, 100);\n }\n updateRateLimited();\n\n // On anchor or popover resize\n const resizeObserver = new ResizeObserver(updateRateLimited);\n resizeObserver.observe(anchorElement);\n resizeObserver.observe(popperElement);\n return () => {\n resizeObserver.disconnect();\n };\n }, [anchorRef, popperElement, update]);\n\n const position = state?.placement ?? placement;\n\n const popoverStyle = useMemo(() => {\n const newStyles = { ...style, ...styles.popper, zIndex };\n\n if (fitWithinViewportHeight && !newStyles.maxHeight) {\n newStyles.maxHeight = WINDOW?.innerHeight || DOCUMENT?.documentElement.clientHeight;\n }\n\n return newStyles;\n }, [style, styles.popper, zIndex, fitWithinViewportHeight]);\n\n return {\n styles: { arrow: styles.arrow, popover: popoverStyle },\n attributes,\n isPositioned: (state?.rects?.popper?.y ?? -1) >= 0,\n position,\n setArrowElement,\n setPopperElement,\n popperElement,\n };\n}\n","import { ReactNode, RefObject, useRef } from 'react';\n\nimport classNames from 'classnames';\n\nimport { useCallbackOnEscape } from '@lumx/react/hooks/useCallbackOnEscape';\nimport { useFocus } from '@lumx/react/hooks/useFocus';\nimport { ClickAwayProvider } from '@lumx/react/utils/ClickAwayProvider';\nimport { DOCUMENT } from '@lumx/react/constants';\nimport { Comp, GenericProps, HasTheme } from '@lumx/react/utils/type';\nimport { getRootClassName, handleBasicClasses } from '@lumx/core/js/utils/className';\nimport { useMergeRefs } from '@lumx/react/utils/react/mergeRefs';\nimport { useFocusTrap } from '@lumx/react/hooks/useFocusTrap';\nimport { skipRender } from '@lumx/react/utils/react/skipRender';\nimport { forwardRef } from '@lumx/react/utils/react/forwardRef';\n\nimport { ThemeProvider } from '@lumx/react/utils/theme/ThemeContext';\nimport { Portal } from '@lumx/react/utils';\nimport { useRestoreFocusOnClose } from './useRestoreFocusOnClose';\nimport { usePopoverStyle } from './usePopoverStyle';\nimport { Elevation, FitAnchorWidth, Offset, Placement, POPOVER_ZINDEX } from './constants';\n\n/**\n * Defines the props of the component.\n */\nexport interface PopoverProps extends GenericProps, HasTheme {\n /** Reference to the DOM element used to set the position of the popover. */\n anchorRef: React.RefObject<HTMLElement>;\n /** Customize the root element. (Must accept ref forwarding and props forwarding!). */\n as?: React.ElementType;\n /** Element which will act as boundary when opening the popover. */\n boundaryRef?: RefObject<HTMLElement>;\n /** Content. */\n children: ReactNode;\n /** Whether a click anywhere out of the popover would close it. */\n closeOnClickAway?: boolean;\n /** Whether an escape key press would close the popover. */\n closeOnEscape?: boolean;\n /** Shadow elevation. */\n elevation?: Elevation;\n /**\n * Manage popover width:\n * - `maxWidth`: popover not bigger than anchor\n * - `minWidth` or `true`: popover not smaller than anchor\n * - `width`: popover equal to the anchor.\n */\n fitToAnchorWidth?: FitAnchorWidth | boolean;\n /** Shrink popover if even after flipping there is not enough space. */\n fitWithinViewportHeight?: boolean;\n /** Element to focus when opening the popover. */\n focusElement?: RefObject<HTMLElement>;\n /** Whether the focus should go back on the anchor when popover closes and focus is within. */\n focusAnchorOnClose?: boolean;\n /** Whether we put an arrow or not. */\n hasArrow?: boolean;\n /** Whether the popover is open or not. */\n isOpen: boolean;\n /** Offset placement relative to anchor. */\n offset?: Offset;\n /** Reference to the parent element that triggered the popover (will get back focus on close or else fallback on the anchor element). */\n parentElement?: RefObject<HTMLElement>;\n /** Placement relative to anchor. */\n placement?: Placement;\n /** Whether the popover should be rendered into a DOM node that exists outside the DOM hierarchy of the parent component. */\n usePortal?: boolean;\n /** The element in which the focus trap should be set. Default to popover. */\n focusTrapZoneElement?: RefObject<HTMLElement>;\n /** Z-axis position. */\n zIndex?: number;\n /** On close callback (on click away or Escape pressed). */\n onClose?(): void;\n /** Whether the popover should trap the focus within itself. Default to false. */\n withFocusTrap?: boolean;\n}\n\n/**\n * Component display name.\n */\nconst COMPONENT_NAME = 'Popover';\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: Partial<PopoverProps> = {\n elevation: 3,\n placement: Placement.AUTO,\n focusAnchorOnClose: true,\n usePortal: true,\n zIndex: POPOVER_ZINDEX,\n};\n\n// Inner component (must be wrapped before export)\nconst _InnerPopover = forwardRef<PopoverProps, HTMLDivElement>((props, ref) => {\n const {\n anchorRef,\n as: Component = 'div',\n children,\n className,\n closeOnClickAway,\n closeOnEscape,\n elevation = DEFAULT_PROPS.elevation,\n focusElement,\n hasArrow,\n isOpen,\n onClose,\n parentElement,\n usePortal = DEFAULT_PROPS.usePortal,\n focusAnchorOnClose = DEFAULT_PROPS.focusAnchorOnClose,\n withFocusTrap,\n boundaryRef,\n fitToAnchorWidth,\n fitWithinViewportHeight,\n focusTrapZoneElement,\n offset,\n placement = DEFAULT_PROPS.placement,\n style,\n theme,\n zIndex = DEFAULT_PROPS.zIndex,\n ...forwardedProps\n } = props;\n const popoverRef = useRef<HTMLDivElement>(null);\n\n const { styles, attributes, isPositioned, position, setArrowElement, setPopperElement, popperElement } =\n usePopoverStyle({\n offset,\n hasArrow,\n fitToAnchorWidth,\n fitWithinViewportHeight,\n boundaryRef,\n anchorRef,\n placement,\n style,\n zIndex,\n });\n\n const unmountSentinel = useRestoreFocusOnClose({ focusAnchorOnClose, anchorRef, parentElement }, popperElement);\n const focusZoneElement = focusTrapZoneElement?.current || popoverRef?.current;\n\n useCallbackOnEscape(onClose, isOpen && closeOnEscape);\n\n /** Only set focus within if the focus trap is disabled as they interfere with one another. */\n useFocus(focusElement?.current, !withFocusTrap && isOpen && isPositioned);\n useFocusTrap(withFocusTrap && isOpen && focusZoneElement, focusElement?.current);\n\n const clickAwayRefs = useRef([popoverRef, anchorRef]);\n const mergedRefs = useMergeRefs<HTMLDivElement>(setPopperElement, ref, popoverRef);\n\n return isOpen ? (\n <Portal enabled={usePortal}>\n <Component\n {...forwardedProps}\n ref={mergedRefs}\n className={classNames(\n className,\n handleBasicClasses({\n prefix: CLASSNAME,\n theme,\n elevation: Math.min(elevation || 0, 5),\n position,\n isInitializing: !styles.popover?.transform,\n }),\n )}\n style={styles.popover}\n {...attributes.popper}\n >\n {unmountSentinel}\n <ClickAwayProvider callback={closeOnClickAway && onClose} childrenRefs={clickAwayRefs}>\n {hasArrow && (\n <div ref={setArrowElement} className={`${CLASSNAME}__arrow`} style={styles.arrow}>\n <svg viewBox=\"0 0 14 14\" aria-hidden>\n <path d=\"M8 3.49C7.62 2.82 6.66 2.82 6.27 3.48L.04 14 14.04 14 8 3.49Z\" />\n </svg>\n </div>\n )}\n <ThemeProvider value={theme}>{children}</ThemeProvider>\n </ClickAwayProvider>\n </Component>\n </Portal>\n ) : null;\n});\n_InnerPopover.displayName = COMPONENT_NAME;\n\n/**\n * Popover component.\n *\n * @param props Component props.\n * @param ref Component ref.\n * @return React element.\n */\nexport const Popover: Comp<PopoverProps, HTMLDivElement> = skipRender(\n // Skip render in SSR\n () => Boolean(DOCUMENT),\n _InnerPopover,\n);\nPopover.displayName = COMPONENT_NAME;\nPopover.className = CLASSNAME;\nPopover.defaultProps = DEFAULT_PROPS;\n"],"names":["useFocus","element","shouldFocus","wasFocus","setWasFocus","useState","useEffect","focus","skipRender","predicate","Component","Wrapper","React","forwardRef","props","ref","DOCUMENT","_jsx","displayName","OnBeforeUnmount","callbackRef","useLayoutEffect","current","useRestoreFocusOnClose","focusAnchorOnClose","anchorRef","parentElement","popoverElement","onBeforeUnmountRef","useRef","undefined","isFocusWithin","contains","document","activeElement","setTimeout","anchor","elementToFocus","getFirstAndLastFocusable","first","preventScroll","sameWidth","memoize","anchorWidthOption","name","enabled","phase","requires","fn","state","styles","popper","rects","reference","width","effect","elements","style","offsetWidth","maxSize","requiresIfExists","options","overflow","detectOverflow","y","x","modifiersData","preventOverflow","height","basePlacement","placement","split","widthProp","heightProp","applyMaxHeight","maxHeight","ARROW_SIZE","usePopoverStyle","offset","hasArrow","fitToAnchorWidth","fitWithinViewportHeight","boundaryRef","zIndex","popperElement","setPopperElement","arrowElement","setArrowElement","actualOffset","along","away","modifiers","push","padding","fitWidth","FitAnchorWidth","MIN_WIDTH","boundary","attributes","update","usePopper","anchorElement","WINDOW","ResizeObserver","running","updateRateLimited","resizeObserver","observe","disconnect","position","popoverStyle","useMemo","newStyles","innerHeight","documentElement","clientHeight","arrow","popover","isPositioned","COMPONENT_NAME","CLASSNAME","getRootClassName","DEFAULT_PROPS","elevation","Placement","AUTO","usePortal","POPOVER_ZINDEX","_InnerPopover","as","children","className","closeOnClickAway","closeOnEscape","focusElement","isOpen","onClose","withFocusTrap","focusTrapZoneElement","theme","forwardedProps","popoverRef","unmountSentinel","focusZoneElement","useCallbackOnEscape","useFocusTrap","clickAwayRefs","mergedRefs","useMergeRefs","Portal","_jsxs","classNames","handleBasicClasses","prefix","Math","min","isInitializing","transform","ClickAwayProvider","callback","childrenRefs","viewBox","d","ThemeProvider","value","Popover","Boolean","defaultProps"],"mappings":";;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,QAAQA,CAACC,OAAuC,EAAEC,WAAW,GAAG,IAAI,EAAQ;EACxF,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAGC,QAAQ,CAAC,KAAK,CAAC,CAAA;AAC/CC,EAAAA,SAAS,CACL,MAAM;AACF,IAAA,IAAIJ,WAAW,IAAIC,QAAQ,KAAKD,WAAW,IAAID,OAAO,EAAE;MACpDA,OAAO,CAACM,KAAK,EAAE,CAAA;MACfH,WAAW,CAACF,WAAW,CAAC,CAAA;AAC5B,KAAA;GACH;AACD;AACA,EAAA,CAACD,OAAO,EAAEC,WAAW,CACzB,CAAC,CAAA;AACL;;AChBA;AACA;AACA;AACO,MAAMM,UAAU,GAAGA,CAAOC,SAA4B,EAAEC,SAAqB,KAAK;EACrF,MAAMC,OAAO,gBAAGC,cAAK,CAACC,UAAU,CAAO,CAACC,KAAK,EAAEC,GAAG,KAAK;IACnD,IAAI,CAACC,QAAQ,EAAE;AACX;AACA,MAAA,OAAO,IAAI,CAAA;AACf,KAAA;IACA,oBAAOC,GAAA,CAACP,SAAS,EAAA;AAACK,MAAAA,GAAG,EAAEA,GAAI;MAAA,GAAKD,KAAAA;AAAK,KAAG,CAAC,CAAA;AAC7C,GAAC,CAAC,CAAA;AACFH,EAAAA,OAAO,CAACO,WAAW,GAAGR,SAAS,CAACQ,WAAW,CAAA;AAC3C,EAAA,OAAOP,OAAO,CAAA;AAClB,CAAC;;ACfD;AACA;AACA;AACA;AACA;AACO,MAAMQ,eAAe,GAAGA,CAAC;AAAEC,EAAAA,WAAAA;AAAwE,CAAC,KAAK;AAC5GC,EAAAA,eAAe,CACX,MAAM;AACF,IAAA,OAAO,MAAM;AACT;AACA;MACAD,WAAW,CAACE,OAAO,IAAI,CAAA;KAC1B,CAAA;GACJ;AAAE;AACH,EAAA,EACJ,CAAC,CAAA;AACD,EAAA,OAAO,IAAI,CAAA;AACf,CAAC;;ACdD;AACA;AACA;AACA;AACO,SAASC,sBAAsBA,CAClC;EACIC,kBAAkB;EAClBC,SAAS;AACTC,EAAAA,aAAAA;AACsE,CAAC,EAC3EC,cAAmC,EACrC;AACE,EAAA,MAAMC,kBAAkB,GAAGhB,cAAK,CAACiB,MAAM,EAA4B,CAAA;EAEnEjB,cAAK,CAACN,SAAS,CAAC,MAAM;AAClB,IAAA,IAAI,CAACqB,cAAc,IAAI,CAACH,kBAAkB,EAAE;MACxCI,kBAAkB,CAACN,OAAO,GAAGQ,SAAS,CAAA;AACtC,MAAA,OAAA;AACJ,KAAA;IAEAF,kBAAkB,CAACN,OAAO,GAAG,MAAM;MAC/B,MAAMS,aAAa,GAAGJ,cAAc,EAAEK,QAAQ,CAACC,QAAQ,CAACC,aAAa,CAAC,CAAA;MACtE,IAAI,CAACH,aAAa,EAAE,OAAA;;AAEpB;AACAI,MAAAA,UAAU,CAAC,MAAM;AACb,QAAA,MAAMC,MAAM,GAAGX,SAAS,CAACH,OAAO,CAAA;AAChC,QAAA,MAAMe,cAAc;AAChB;AACAX,QAAAA,aAAa,EAAEJ,OAAO;AACtB;QACCc,MAAM,GAAGE,wBAAwB,CAACF,MAAM,CAAC,CAACG,KAAK,GAAGT,SAAS,CAAC;AAC7D;QACAM,MAAM,CAAA;QAEVC,cAAc,EAAE9B,KAAK,CAAC;AAAEiC,UAAAA,aAAa,EAAE,IAAA;AAAK,SAAC,CAAC,CAAA;OACjD,EAAE,CAAC,CAAC,CAAA;KACR,CAAA;GACJ,EAAE,CAACf,SAAS,EAAED,kBAAkB,EAAEE,aAAa,EAAEC,cAAc,CAAC,CAAC,CAAA;EAElE,oBAAOV,GAAA,CAACE,eAAe,EAAA;AAACC,IAAAA,WAAW,EAAEQ,kBAAAA;AAAmB,GAAE,CAAC,CAAA;AAC/D;;ACrCA;AACA;AACA;AACA,MAAMa,SAAS,GAAGC,OAAO,CAAEC,iBAAiC,KAAM;AAC9DC,EAAAA,IAAI,EAAE,WAAW;AACjBC,EAAAA,OAAO,EAAE,IAAI;AACbC,EAAAA,KAAK,EAAE,aAAa;EACpBC,QAAQ,EAAE,CAAC,eAAe,CAAC;AAC3BC,EAAAA,EAAEA,CAAC;AAAEC,IAAAA,KAAAA;AAAW,GAAC,EAAE;AACf;AACAA,IAAAA,KAAK,CAACC,MAAM,CAACC,MAAM,CAACR,iBAAiB,CAAC,GAAG,CAAGM,EAAAA,KAAK,CAACG,KAAK,CAACC,SAAS,CAACC,KAAK,CAAI,EAAA,CAAA,CAAA;GAC9E;AACDC,EAAAA,MAAMA,CAAC;AAAEN,IAAAA,KAAAA;AAAW,GAAC,EAAE;AACnB;AACAA,IAAAA,KAAK,CAACO,QAAQ,CAACL,MAAM,CAACM,KAAK,CAACd,iBAAiB,CAAC,GAAG,CAAA,EAAGM,KAAK,CAACO,QAAQ,CAACH,SAAS,CAACK,WAAW,CAAI,EAAA,CAAA,CAAA;AAChG,GAAA;AACJ,CAAC,CAAC,CAAC,CAAA;;AAEH;AACA;AACA;AACA,MAAMC,OAAO,GAAG;AACZf,EAAAA,IAAI,EAAE,SAAS;AACfC,EAAAA,OAAO,EAAE,IAAI;AACbC,EAAAA,KAAK,EAAE,MAAM;AACbc,EAAAA,gBAAgB,EAAE,CAAC,QAAQ,EAAE,iBAAiB,EAAE,MAAM,CAAC;AACvDZ,EAAAA,EAAEA,CAAC;IAAEC,KAAK;IAAEL,IAAI;AAAEiB,IAAAA,OAAAA;AAAa,GAAC,EAAE;AAC9B,IAAA,MAAMC,QAAQ,GAAGC,cAAc,CAACd,KAAK,EAAEY,OAAO,CAAC,CAAA;IAE/C,MAAM;AAAEG,MAAAA,CAAC,GAAG,CAAC;AAAEC,MAAAA,CAAC,GAAG,CAAA;AAAE,KAAC,GAAGhB,KAAK,CAACiB,aAAa,CAACC,eAAe,CAAA;IAC5D,MAAM;MAAEb,KAAK;AAAEc,MAAAA,MAAAA;AAAO,KAAC,GAAGnB,KAAK,CAACG,KAAK,CAACD,MAAM,CAAA;IAE5C,MAAM,CAACkB,aAAa,CAAC,GAAGpB,KAAK,CAACqB,SAAS,CAACC,KAAK,CAAC,GAAG,CAAC,CAAA;IAElD,MAAMC,SAAS,GAAGH,aAAa,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;IAC7D,MAAMI,UAAU,GAAGJ,aAAa,KAAK,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAA;AAC7D;AACApB,IAAAA,KAAK,CAACiB,aAAa,CAACtB,IAAI,CAAC,GAAG;MACxBU,KAAK,EAAEA,KAAK,GAAGQ,QAAQ,CAACU,SAAS,CAAC,GAAGP,CAAC;AACtCG,MAAAA,MAAM,EAAEA,MAAM,GAAGN,QAAQ,CAACW,UAAU,CAAC,GAAGT,CAAAA;KAC3C,CAAA;AACL,GAAA;AACJ,CAAC,CAAA;;AAED;AACA;AACA;AACA,MAAMU,cAAc,GAAG;AACnB9B,EAAAA,IAAI,EAAE,gBAAgB;AACtBC,EAAAA,OAAO,EAAE,IAAI;AACbC,EAAAA,KAAK,EAAE,aAAa;EACpBC,QAAQ,EAAE,CAAC,SAAS,CAAC;AACrBC,EAAAA,EAAEA,CAAC;AAAEC,IAAAA,KAAAA;AAAW,GAAC,EAAE;IACf,MAAM;AAAEmB,MAAAA,MAAAA;AAAO,KAAC,GAAGnB,KAAK,CAACiB,aAAa,CAACP,OAAO,CAAA;AAC9C;AACAV,IAAAA,KAAK,CAACO,QAAQ,CAACL,MAAM,CAACM,KAAK,CAACkB,SAAS,GAAG,CAAA,EAAGP,MAAM,GAAGQ,UAAU,CAAI,EAAA,CAAA,CAAA;AACtE,GAAA;AACJ,CAAC,CAAA;AAyBM,SAASC,eAAeA,CAAC;EAC5BC,MAAM;EACNC,QAAQ;EACRC,gBAAgB;EAChBC,uBAAuB;EACvBC,WAAW;EACXzD,SAAS;EACT6C,SAAS;EACTb,KAAK;AACL0B,EAAAA,MAAAA;AACK,CAAC,EAAU;EAChB,MAAM,CAACC,aAAa,EAAEC,gBAAgB,CAAC,GAAGhF,QAAQ,CAAqB,IAAI,CAAC,CAAA;EAC5E,MAAM,CAACiF,YAAY,EAAEC,eAAe,CAAC,GAAGlF,QAAQ,CAAqB,IAAI,CAAC,CAAA;EAE1E,MAAMmF,YAA8B,GAAG,CAACV,MAAM,EAAEW,KAAK,IAAI,CAAC,EAAE,CAACX,MAAM,EAAEY,IAAI,IAAI,CAAC,KAAKX,QAAQ,GAAGH,UAAU,GAAG,CAAC,CAAC,CAAC,CAAA;EAC9G,MAAMe,SAAc,GAAG,CACnB;AACI/C,IAAAA,IAAI,EAAE,QAAQ;AACdiB,IAAAA,OAAO,EAAE;AAAEiB,MAAAA,MAAM,EAAEU,YAAAA;AAAa,KAAA;AACpC,GAAC,CACJ,CAAA;EACD,IAAIT,QAAQ,IAAIO,YAAY,EAAE;IAC1BK,SAAS,CAACC,IAAI,CAAC;AACXhD,MAAAA,IAAI,EAAE,OAAO;AACbiB,MAAAA,OAAO,EAAE;AACL5D,QAAAA,OAAO,EAAEqF,YAAY;QACrBO,OAAO,EAAEjB,UAAU,GAAG,CAAA;AAC1B,OAAA;AACJ,KAAC,CAAC,CAAA;AACN,GAAA;AACA,EAAA,IAAII,gBAAgB,EAAE;IAClB,MAAMc,QAAQ,GAAG,OAAOd,gBAAgB,KAAK,QAAQ,GAAGA,gBAAgB,GAAGe,cAAc,CAACC,SAAS,CAAA;AACnGL,IAAAA,SAAS,CAACC,IAAI,CAACnD,SAAS,CAACqD,QAAQ,CAAC,CAAC,CAAA;AACvC,GAAA;AACA,EAAA,IAAIb,uBAAuB,EAAE;IACzBU,SAAS,CAACC,IAAI,CAAC;AAAE,MAAA,GAAGjC,OAAO;AAAEE,MAAAA,OAAO,EAAE;QAAEoC,QAAQ,EAAEf,WAAW,EAAE5D,OAAAA;AAAQ,OAAA;KAAG,EAAEoD,cAAc,CAAC,CAAA;AAC/F,GAAA;AACA,EAAA,IAAIQ,WAAW,EAAE;IACbS,SAAS,CAACC,IAAI,CACV;AAAEhD,MAAAA,IAAI,EAAE,MAAM;AAAEiB,MAAAA,OAAO,EAAE;QAAEoC,QAAQ,EAAEf,WAAW,CAAC5D,OAAAA;AAAQ,OAAA;AAAE,KAAC,EAC5D;AAAEsB,MAAAA,IAAI,EAAE,iBAAiB;AAAEiB,MAAAA,OAAO,EAAE;QAAEoC,QAAQ,EAAEf,WAAW,CAAC5D,OAAAA;AAAQ,OAAA;AAAE,KAC1E,CAAC,CAAA;AACL,GAAA;EAEA,MAAM;IAAE4B,MAAM;IAAEgD,UAAU;IAAEjD,KAAK;AAAEkD,IAAAA,MAAAA;GAAQ,GAAGC,SAAS,CAAC3E,SAAS,CAACH,OAAO,EAAE8D,aAAa,EAAE;IAAEd,SAAS;AAAEqB,IAAAA,SAAAA;AAAU,GAAC,CAAC,CAAA;;AAEnH;AACArF,EAAAA,SAAS,CAAC,MAAM;IACZ,MAAM;AAAEgB,MAAAA,OAAO,EAAE+E,aAAAA;AAAc,KAAC,GAAG5E,SAAS,CAAA;AAC5C,IAAA,IAAI,CAAC0E,MAAM,IAAI,CAACf,aAAa,IAAI,CAACiB,aAAa,IAAI,CAACC,MAAM,EAAEC,cAAc,EAAE;AACxE,MAAA,OAAOzE,SAAS,CAAA;AACpB,KAAA;AACA,IAAA,IAAI0E,OAAkD,CAAA;IACtD,SAASC,iBAAiBA,GAAG;AACzB,MAAA,IAAID,OAAO,EAAE,OAAA;AACbL,MAAAA,MAAM,IAAI,CAAA;MACVK,OAAO,GAAGrE,UAAU,CAAC,MAAM;AACvBqE,QAAAA,OAAO,GAAG1E,SAAS,CAAA;OACtB,EAAE,GAAG,CAAC,CAAA;AACX,KAAA;AACA2E,IAAAA,iBAAiB,EAAE,CAAA;;AAEnB;AACA,IAAA,MAAMC,cAAc,GAAG,IAAIH,cAAc,CAACE,iBAAiB,CAAC,CAAA;AAC5DC,IAAAA,cAAc,CAACC,OAAO,CAACN,aAAa,CAAC,CAAA;AACrCK,IAAAA,cAAc,CAACC,OAAO,CAACvB,aAAa,CAAC,CAAA;AACrC,IAAA,OAAO,MAAM;MACTsB,cAAc,CAACE,UAAU,EAAE,CAAA;KAC9B,CAAA;GACJ,EAAE,CAACnF,SAAS,EAAE2D,aAAa,EAAEe,MAAM,CAAC,CAAC,CAAA;AAEtC,EAAA,MAAMU,QAAQ,GAAG5D,KAAK,EAAEqB,SAAS,IAAIA,SAAS,CAAA;AAE9C,EAAA,MAAMwC,YAAY,GAAGC,OAAO,CAAC,MAAM;AAC/B,IAAA,MAAMC,SAAS,GAAG;AAAE,MAAA,GAAGvD,KAAK;MAAE,GAAGP,MAAM,CAACC,MAAM;AAAEgC,MAAAA,MAAAA;KAAQ,CAAA;AAExD,IAAA,IAAIF,uBAAuB,IAAI,CAAC+B,SAAS,CAACrC,SAAS,EAAE;MACjDqC,SAAS,CAACrC,SAAS,GAAG2B,MAAM,EAAEW,WAAW,IAAIjG,QAAQ,EAAEkG,eAAe,CAACC,YAAY,CAAA;AACvF,KAAA;AAEA,IAAA,OAAOH,SAAS,CAAA;AACpB,GAAC,EAAE,CAACvD,KAAK,EAAEP,MAAM,CAACC,MAAM,EAAEgC,MAAM,EAAEF,uBAAuB,CAAC,CAAC,CAAA;EAE3D,OAAO;AACH/B,IAAAA,MAAM,EAAE;MAAEkE,KAAK,EAAElE,MAAM,CAACkE,KAAK;AAAEC,MAAAA,OAAO,EAAEP,YAAAA;KAAc;IACtDZ,UAAU;AACVoB,IAAAA,YAAY,EAAE,CAACrE,KAAK,EAAEG,KAAK,EAAED,MAAM,EAAEa,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;IAClD6C,QAAQ;IACRtB,eAAe;IACfF,gBAAgB;AAChBD,IAAAA,aAAAA;GACH,CAAA;AACL;;AC7GA;AACA;AACA;AACA,MAAMmC,cAAc,GAAG,SAAS,CAAA;;AAEhC;AACA;AACA;AACA,MAAMC,SAAS,GAAGC,gBAAgB,CAACF,cAAc,CAAC,CAAA;;AAElD;AACA;AACA;AACA,MAAMG,aAAoC,GAAG;AACzCC,EAAAA,SAAS,EAAE,CAAC;EACZrD,SAAS,EAAEsD,SAAS,CAACC,IAAI;AACzBrG,EAAAA,kBAAkB,EAAE,IAAI;AACxBsG,EAAAA,SAAS,EAAE,IAAI;AACf3C,EAAAA,MAAM,EAAE4C,cAAAA;AACZ,CAAC,CAAA;;AAED;AACA,MAAMC,aAAa,GAAGnH,UAAU,CAA+B,CAACC,KAAK,EAAEC,GAAG,KAAK;EAC3E,MAAM;IACFU,SAAS;IACTwG,EAAE,EAAEvH,SAAS,GAAG,KAAK;IACrBwH,QAAQ;IACRC,SAAS;IACTC,gBAAgB;IAChBC,aAAa;IACbV,SAAS,GAAGD,aAAa,CAACC,SAAS;IACnCW,YAAY;IACZvD,QAAQ;IACRwD,MAAM;IACNC,OAAO;IACP9G,aAAa;IACboG,SAAS,GAAGJ,aAAa,CAACI,SAAS;IACnCtG,kBAAkB,GAAGkG,aAAa,CAAClG,kBAAkB;IACrDiH,aAAa;IACbvD,WAAW;IACXF,gBAAgB;IAChBC,uBAAuB;IACvByD,oBAAoB;IACpB5D,MAAM;IACNR,SAAS,GAAGoD,aAAa,CAACpD,SAAS;IACnCb,KAAK;IACLkF,KAAK;IACLxD,MAAM,GAAGuC,aAAa,CAACvC,MAAM;IAC7B,GAAGyD,cAAAA;AACP,GAAC,GAAG9H,KAAK,CAAA;AACT,EAAA,MAAM+H,UAAU,GAAGhH,MAAM,CAAiB,IAAI,CAAC,CAAA;EAE/C,MAAM;IAAEqB,MAAM;IAAEgD,UAAU;IAAEoB,YAAY;IAAET,QAAQ;IAAEtB,eAAe;IAAEF,gBAAgB;AAAED,IAAAA,aAAAA;GAAe,GAClGP,eAAe,CAAC;IACZC,MAAM;IACNC,QAAQ;IACRC,gBAAgB;IAChBC,uBAAuB;IACvBC,WAAW;IACXzD,SAAS;IACT6C,SAAS;IACTb,KAAK;AACL0B,IAAAA,MAAAA;AACJ,GAAC,CAAC,CAAA;EAEN,MAAM2D,eAAe,GAAGvH,sBAAsB,CAAC;IAAEC,kBAAkB;IAAEC,SAAS;AAAEC,IAAAA,aAAAA;GAAe,EAAE0D,aAAa,CAAC,CAAA;EAC/G,MAAM2D,gBAAgB,GAAGL,oBAAoB,EAAEpH,OAAO,IAAIuH,UAAU,EAAEvH,OAAO,CAAA;AAE7E0H,EAAAA,mBAAmB,CAACR,OAAO,EAAED,MAAM,IAAIF,aAAa,CAAC,CAAA;;AAErD;EACArI,QAAQ,CAACsI,YAAY,EAAEhH,OAAO,EAAE,CAACmH,aAAa,IAAIF,MAAM,IAAIjB,YAAY,CAAC,CAAA;EACzE2B,YAAY,CAACR,aAAa,IAAIF,MAAM,IAAIQ,gBAAgB,EAAET,YAAY,EAAEhH,OAAO,CAAC,CAAA;EAEhF,MAAM4H,aAAa,GAAGrH,MAAM,CAAC,CAACgH,UAAU,EAAEpH,SAAS,CAAC,CAAC,CAAA;EACrD,MAAM0H,UAAU,GAAGC,YAAY,CAAiB/D,gBAAgB,EAAEtE,GAAG,EAAE8H,UAAU,CAAC,CAAA;AAElF,EAAA,OAAON,MAAM,gBACTtH,GAAA,CAACoI,MAAM,EAAA;AAACxG,IAAAA,OAAO,EAAEiF,SAAU;IAAAI,QAAA,eACvBoB,IAAA,CAAC5I,SAAS,EAAA;AAAA,MAAA,GACFkI,cAAc;AAClB7H,MAAAA,GAAG,EAAEoI,UAAW;AAChBhB,MAAAA,SAAS,EAAEoB,UAAU,CACjBpB,SAAS,EACTqB,kBAAkB,CAAC;AACfC,QAAAA,MAAM,EAAEjC,SAAS;QACjBmB,KAAK;QACLhB,SAAS,EAAE+B,IAAI,CAACC,GAAG,CAAChC,SAAS,IAAI,CAAC,EAAE,CAAC,CAAC;QACtCd,QAAQ;AACR+C,QAAAA,cAAc,EAAE,CAAC1G,MAAM,CAACmE,OAAO,EAAEwC,SAAAA;AACrC,OAAC,CACL,CAAE;MACFpG,KAAK,EAAEP,MAAM,CAACmE,OAAQ;MAAA,GAClBnB,UAAU,CAAC/C,MAAM;AAAA+E,MAAAA,QAAA,EAEpBY,CAAAA,eAAe,eAChBQ,IAAA,CAACQ,iBAAiB,EAAA;QAACC,QAAQ,EAAE3B,gBAAgB,IAAII,OAAQ;AAACwB,QAAAA,YAAY,EAAEd,aAAc;QAAAhB,QAAA,EAAA,CACjFnD,QAAQ,iBACL9D,GAAA,CAAA,KAAA,EAAA;AAAKF,UAAAA,GAAG,EAAEwE,eAAgB;UAAC4C,SAAS,EAAE,CAAGX,EAAAA,SAAS,CAAU,OAAA,CAAA;UAAC/D,KAAK,EAAEP,MAAM,CAACkE,KAAM;AAAAc,UAAAA,QAAA,eAC7EjH,GAAA,CAAA,KAAA,EAAA;AAAKgJ,YAAAA,OAAO,EAAC,WAAW;YAAC,aAAW,EAAA,IAAA;AAAA/B,YAAAA,QAAA,eAChCjH,GAAA,CAAA,MAAA,EAAA;AAAMiJ,cAAAA,CAAC,EAAC,+DAAA;aAAiE,CAAA;WACxE,CAAA;AAAC,SACL,CACR,eACDjJ,GAAA,CAACkJ,aAAa,EAAA;AAACC,UAAAA,KAAK,EAAEzB,KAAM;AAAAT,UAAAA,QAAA,EAAEA,QAAAA;AAAQ,SAAgB,CAAC,CAAA;AAAA,OACxC,CAAC,CAAA;KACb,CAAA;GACP,CAAC,GACT,IAAI,CAAA;AACZ,CAAC,CAAC,CAAA;AACFF,aAAa,CAAC9G,WAAW,GAAGqG,cAAc,CAAA;;AAE1C;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM8C,OAA2C,GAAG7J,UAAU;AACjE;AACA,MAAM8J,OAAO,CAACtJ,QAAQ,CAAC,EACvBgH,aACJ,EAAC;AACDqC,OAAO,CAACnJ,WAAW,GAAGqG,cAAc,CAAA;AACpC8C,OAAO,CAAClC,SAAS,GAAGX,SAAS,CAAA;AAC7B6C,OAAO,CAACE,YAAY,GAAG7C,aAAa;;;;"}
@@ -1,7 +1,5 @@
1
- import get from 'lodash/get';
2
-
3
1
  /**
4
- * Properties of a component to use to determine it's name.
2
+ * Properties of a component to use to determine its name.
5
3
  * In the order of preference.
6
4
  */
7
5
  const NAME_PROPERTIES = ['type', 'type.displayName', 'displayName', 'name', 'type.name', 'props.mdxType', '_reactInternalFiber.elementType.name'];
@@ -13,8 +11,8 @@ const NAME_PROPERTIES = ['type', 'type.displayName', 'displayName', 'name', 'typ
13
11
  */
14
12
  const isComponent = component => instance => {
15
13
  const componentName = typeof component === 'string' ? component : component.displayName;
16
- return !!get(instance, '$$typeof') && NAME_PROPERTIES.some(nameProperty => get(instance, nameProperty) === componentName);
14
+ return !!instance.$$typeof && NAME_PROPERTIES.some(nameProperty => instance[nameProperty] === componentName);
17
15
  };
18
16
 
19
17
  export { isComponent as i };
20
- //# sourceMappingURL=isComponent-78df9309.js.map
18
+ //# sourceMappingURL=isComponent-b9762ff1.js.map
@@ -0,0 +1 @@
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,8 +1,8 @@
1
1
  import { D as DOCUMENT } from './constants-d0e3f49e.js';
2
2
  import { onEscapePressed } from '@lumx/core/js/utils';
3
3
  import { useEffect } from 'react';
4
- import last from 'lodash/last';
5
- import pull from 'lodash/pull';
4
+ import { pull } from '@lumx/core/js/utils/collection/pull';
5
+ import { last } from '@lumx/core/js/utils/collection/last';
6
6
 
7
7
  /**
8
8
  * Keep track of listeners, only the last registered listener gets activated at any point (previously registered
@@ -59,4 +59,4 @@ function useCallbackOnEscape(callback, closeOnEscape = true) {
59
59
  }
60
60
 
61
61
  export { makeListenerTowerContext as m, useCallbackOnEscape as u };
62
- //# sourceMappingURL=useCallbackOnEscape-ea4d9eb4.js.map
62
+ //# sourceMappingURL=useCallbackOnEscape-0b220f9c.js.map
@@ -0,0 +1 @@
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;;;;"}
@@ -1,7 +1,7 @@
1
1
  import { useEffect } from 'react';
2
2
  import { D as DOCUMENT } from './constants-d0e3f49e.js';
3
3
  import { g as getFocusableElements } from './getFocusableElements-230173a8.js';
4
- import { m as makeListenerTowerContext } from './useCallbackOnEscape-ea4d9eb4.js';
4
+ import { m as makeListenerTowerContext } from './useCallbackOnEscape-0b220f9c.js';
5
5
 
6
6
  /**
7
7
  * Get first and last elements focusable in an element.
@@ -109,4 +109,4 @@ function useFocusTrap(focusZoneElement, focusElement) {
109
109
  }
110
110
 
111
111
  export { getFirstAndLastFocusable as g, useFocusTrap as u };
112
- //# sourceMappingURL=useFocusTrap-c3c6378b.js.map
112
+ //# sourceMappingURL=useFocusTrap-3114e5e8.js.map