@pega/cosmos-react-core 9.0.0-build.27.8 → 9.0.0-build.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. package/lib/components/AppShell/AppNavigationPanel.d.ts.map +1 -1
  2. package/lib/components/AppShell/AppNavigationPanel.js +3 -3
  3. package/lib/components/AppShell/AppNavigationPanel.js.map +1 -1
  4. package/lib/components/AppShell/AppShell.d.ts.map +1 -1
  5. package/lib/components/AppShell/AppShell.js +1 -0
  6. package/lib/components/AppShell/AppShell.js.map +1 -1
  7. package/lib/components/AppShell/AppShellContext.d.ts +1 -0
  8. package/lib/components/AppShell/AppShellContext.d.ts.map +1 -1
  9. package/lib/components/AppShell/AppShellContext.js +1 -0
  10. package/lib/components/AppShell/AppShellContext.js.map +1 -1
  11. package/lib/components/AppShell/AppShellList.styles.d.ts.map +1 -1
  12. package/lib/components/AppShell/AppShellList.styles.js +0 -1
  13. package/lib/components/AppShell/AppShellList.styles.js.map +1 -1
  14. package/lib/components/AppShell/Drawer.styles.d.ts +2 -0
  15. package/lib/components/AppShell/Drawer.styles.d.ts.map +1 -1
  16. package/lib/components/AppShell/Drawer.styles.js +9 -7
  17. package/lib/components/AppShell/Drawer.styles.js.map +1 -1
  18. package/lib/components/Button/Button.d.ts.map +1 -1
  19. package/lib/components/Button/Button.js +8 -1
  20. package/lib/components/Button/Button.js.map +1 -1
  21. package/lib/components/Menu/MenuItem.d.ts.map +1 -1
  22. package/lib/components/Menu/MenuItem.js +11 -12
  23. package/lib/components/Menu/MenuItem.js.map +1 -1
  24. package/lib/components/MenuButton/MenuButton.d.ts.map +1 -1
  25. package/lib/components/MenuButton/MenuButton.js +5 -6
  26. package/lib/components/MenuButton/MenuButton.js.map +1 -1
  27. package/lib/components/Modal/Contexts.d.ts.map +1 -1
  28. package/lib/components/Modal/Contexts.js +2 -1
  29. package/lib/components/Modal/Contexts.js.map +1 -1
  30. package/lib/components/Modal/Modal.d.ts.map +1 -1
  31. package/lib/components/Modal/Modal.js +23 -3
  32. package/lib/components/Modal/Modal.js.map +1 -1
  33. package/lib/components/Modal/Modal.types.d.ts +3 -1
  34. package/lib/components/Modal/Modal.types.d.ts.map +1 -1
  35. package/lib/components/Modal/Modal.types.js.map +1 -1
  36. package/lib/components/Modal/ModalManager.d.ts.map +1 -1
  37. package/lib/components/Modal/ModalManager.js +6 -3
  38. package/lib/components/Modal/ModalManager.js.map +1 -1
  39. package/lib/components/PageTemplates/GridLayout/GridLayoutEditor.d.ts +6 -0
  40. package/lib/components/PageTemplates/GridLayout/GridLayoutEditor.d.ts.map +1 -1
  41. package/lib/components/PageTemplates/GridLayout/GridLayoutEditor.js +2 -2
  42. package/lib/components/PageTemplates/GridLayout/GridLayoutEditor.js.map +1 -1
  43. package/lib/components/PageTemplates/GridLayout/GridLayoutViewer.d.ts +6 -0
  44. package/lib/components/PageTemplates/GridLayout/GridLayoutViewer.d.ts.map +1 -1
  45. package/lib/components/PageTemplates/GridLayout/GridLayoutViewer.js +2 -2
  46. package/lib/components/PageTemplates/GridLayout/GridLayoutViewer.js.map +1 -1
  47. package/lib/components/PageTemplates/GridLayout/utils.d.ts +2 -1
  48. package/lib/components/PageTemplates/GridLayout/utils.d.ts.map +1 -1
  49. package/lib/components/PageTemplates/GridLayout/utils.js +4 -3
  50. package/lib/components/PageTemplates/GridLayout/utils.js.map +1 -1
  51. package/lib/components/PageTemplates/PageTemplates.d.ts.map +1 -1
  52. package/lib/components/PageTemplates/PageTemplates.js +2 -3
  53. package/lib/components/PageTemplates/PageTemplates.js.map +1 -1
  54. package/lib/components/RadioCheckGroup/RadioCheckGroup.d.ts.map +1 -1
  55. package/lib/components/RadioCheckGroup/RadioCheckGroup.js +1 -1
  56. package/lib/components/RadioCheckGroup/RadioCheckGroup.js.map +1 -1
  57. package/lib/components/TextArea/TextArea.d.ts.map +1 -1
  58. package/lib/components/TextArea/TextArea.js +19 -2
  59. package/lib/components/TextArea/TextArea.js.map +1 -1
  60. package/lib/components/TextArea/TextArea.styles.d.ts.map +1 -1
  61. package/lib/components/TextArea/TextArea.styles.js +1 -0
  62. package/lib/components/TextArea/TextArea.styles.js.map +1 -1
  63. package/lib/hooks/index.d.ts +1 -0
  64. package/lib/hooks/index.d.ts.map +1 -1
  65. package/lib/hooks/index.js +1 -0
  66. package/lib/hooks/index.js.map +1 -1
  67. package/lib/hooks/useHighlight.d.ts +12 -0
  68. package/lib/hooks/useHighlight.d.ts.map +1 -0
  69. package/lib/hooks/useHighlight.js +55 -0
  70. package/lib/hooks/useHighlight.js.map +1 -0
  71. package/lib/hooks/useI18n.d.ts +9 -0
  72. package/lib/hooks/useI18n.d.ts.map +1 -1
  73. package/lib/hooks/useSpeechRecognition.d.ts.map +1 -1
  74. package/lib/hooks/useSpeechRecognition.js +1 -0
  75. package/lib/hooks/useSpeechRecognition.js.map +1 -1
  76. package/lib/i18n/default.d.ts +10 -0
  77. package/lib/i18n/default.d.ts.map +1 -1
  78. package/lib/i18n/default.js +16 -5
  79. package/lib/i18n/default.js.map +1 -1
  80. package/lib/i18n/i18n.d.ts +9 -0
  81. package/lib/i18n/i18n.d.ts.map +1 -1
  82. package/lib/styles/GlobalStyle.d.ts.map +1 -1
  83. package/lib/styles/GlobalStyle.js +4 -0
  84. package/lib/styles/GlobalStyle.js.map +1 -1
  85. package/lib/theme/themes/studioDarkTheme.json +1 -1
  86. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../../src/components/Modal/Modal.tsx"],"names":[],"mappings":"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","sourcesContent":["import { forwardRef, useEffect, useRef, useCallback, useState, useLayoutEffect } from 'react';\nimport type {\n FunctionComponent,\n PropsWithoutRef,\n Ref,\n MouseEvent,\n KeyboardEvent as ReactKeyboardEvent\n} from 'react';\n\nimport Progress, { type ProgressProps } from '../Progress';\nimport { focusNonInteractiveElement, isInstance } from '../../utils';\nimport Backdrop from '../Backdrop';\nimport Flex from '../Flex';\nimport Button from '../Button';\nimport type { ForwardProps } from '../../types';\nimport {\n useConsolidatedRef,\n useContentTabIndex,\n useI18n,\n useOuterEvent,\n useUID,\n useFocusTrap,\n usePrevious,\n useModalContext,\n useEvent,\n useEscape,\n useTheme\n} from '../../hooks';\nimport Icon, { registerIcon } from '../Icon';\nimport * as timesIcon from '../Icon/icons/times.icon';\nimport * as minusIcon from '../Icon/icons/minus.icon';\nimport * as dockIcon from '../Icon/icons/dock.icon';\nimport * as undockIcon from '../Icon/icons/undock.icon';\nimport Text from '../Text';\nimport { Count } from '../Badges';\nimport ResponsiveActions from '../ResponsiveActions';\nimport { getCSSTimeInMilliseconds } from '../../styles';\n\nimport MinimizedModal from './MinimizedModal';\nimport type { ModalProps } from './Modal.types';\nimport {\n StyledModal,\n StyledModalHeader,\n StyledModalContent,\n StyledModalChildrenWrap\n} from './Modal.styles';\nimport useModalMove from './useModalMove';\n\nregisterIcon(timesIcon, minusIcon, dockIcon, undockIcon);\n\nconst Modal: FunctionComponent<ModalProps & ForwardProps> = forwardRef(function Modal(\n props: PropsWithoutRef<ModalProps>,\n ref: Ref<HTMLElement>\n) {\n const {\n as = 'div',\n progress = false,\n heading,\n headingTag = 'h2',\n icon,\n count,\n children,\n actions,\n stretch = false,\n center = false,\n defaultFocus,\n minimizedLabel,\n onBeforeOpen,\n onAfterOpen,\n onBeforeClose,\n onAfterClose,\n onRequestDismiss,\n onRequestMinimize,\n onRequestMaximize,\n onRequestDock,\n onRequestActivate,\n ...restProps\n } = props;\n\n const {\n alert,\n dismissible,\n minimizable,\n maximizable,\n dockable,\n moveable: moveableOption,\n state,\n dismiss,\n minimize,\n maximize,\n dock,\n unmount,\n top\n } = useModalContext();\n\n const modalRef = useConsolidatedRef(ref);\n const modalHeaderRef = useRef(null);\n const modalHeadingRef = useRef<HTMLHeadingElement>(null);\n const modalContentRef = useRef<HTMLDivElement>(null);\n const modalActionsRef = useRef<HTMLDivElement>(null);\n const backdropRef = useRef<HTMLDivElement>(null);\n const previousState = usePrevious(state);\n const id = useUID();\n const t = useI18n();\n const [progressMessage, setProgressMessage] = useState<ProgressProps['message']>(undefined);\n const [isCloseButtonDisabled, setIsCloseButtonDisabled] = useState(true);\n const theme = useTheme();\n const contentTabIndex = useContentTabIndex(modalRef, modalContentRef, [], [progress]);\n\n const tryDismiss = () => {\n if (onRequestDismiss?.() !== false) {\n dismiss();\n }\n };\n\n const setFocus = () => {\n if (progress) return;\n\n if (defaultFocus?.current) {\n defaultFocus.current.focus();\n } else if (modalHeadingRef.current) {\n focusNonInteractiveElement(\n modalHeadingRef.current,\n typeof heading === 'string' ? heading : undefined\n );\n } else if (modalRef.current) {\n focusNonInteractiveElement(\n modalRef.current,\n typeof heading === 'string' ? heading : undefined\n );\n }\n };\n\n useFocusTrap(modalRef, false);\n useEvent('shortcut', e => e.stopPropagation(), { eventOptions: { capture: true } });\n\n useOuterEvent('mousedown', [modalRef], e => {\n if (['minimized', 'docked', 'closed'].includes(state)) return;\n\n if (dismissible) {\n if (e.target === backdropRef.current) {\n tryDismiss();\n }\n } else {\n modalRef.current?.focus();\n }\n });\n\n useEffect(() => {\n if (state === 'minimized') return;\n if (state === 'open' || state === 'maximized' || state === 'docked') setFocus();\n if (state === 'docked') setIsCloseButtonDisabled(false);\n\n // This won't actually run until potential changes to docked modal handling.\n if (state === 'closed' && previousState === 'docked') {\n onBeforeClose?.();\n unmount();\n onAfterClose?.();\n }\n }, [state]);\n\n useEffect(() => {\n // If a modal is already in a closed state on initial mount, unmount it.\n // This only happens when a docked modal closes since the ModalManager\n // remounts it outside of the DockedModals container if state !== 'docked'.\n if (state === 'closed') {\n onBeforeClose?.();\n unmount();\n onAfterClose?.();\n }\n }, []);\n\n // Dismiss on Escape needs to be handled using React event handling to be cancelable using SyntheticEvent.stopPropagation.\n const onModalKeyDown = useCallback(\n (e: ReactKeyboardEvent) => {\n if (dismissible && (state === 'open' || state === 'maximized') && e.key === 'Escape' && top) {\n tryDismiss();\n }\n },\n [dismissible, state, top, tryDismiss]\n );\n\n // Document-level handler as fallback when focus is on body or outside modal\n useEscape(\n (e: KeyboardEvent) => {\n if (\n dismissible &&\n top &&\n (state === 'open' || state === 'maximized') &&\n isInstance(e.target, Node) &&\n !modalRef.current?.contains(e.target)\n ) {\n tryDismiss();\n }\n },\n dismissible && top && (state === 'open' || state === 'maximized') ? document : null,\n [dismissible, top, state, tryDismiss]\n );\n\n const onHeaderActionKeyDown = useCallback((e: ReactKeyboardEvent<HTMLButtonElement>) => {\n if (e.repeat && (e.key === 'Enter' || e.key === ' ')) e.preventDefault();\n }, []);\n\n useEffect(() => {\n if (!progress) {\n setFocus();\n }\n\n if (typeof progress === 'object' && progress.message !== progressMessage) {\n setProgressMessage(progress.message);\n } else if (progress === true) {\n setProgressMessage(t('loading'));\n }\n }, [progress]);\n\n // Animate enter and exit\n useLayoutEffect(() => {\n if (!modalRef.current) return;\n\n const translate = ['0 -4rem', '0 0'];\n const options: KeyframeAnimationOptions = {\n // Multiplier needed to coordinate with Backdrop's transition speed multiplier\n duration: getCSSTimeInMilliseconds(theme.base.animation.speed) * 2,\n easing: theme.base.animation.timing.ease,\n fill: 'forwards'\n };\n\n let animation: Animation | undefined;\n\n if (state === 'open') {\n animation = modalRef.current.animate({ translate }, options);\n } else if (state === 'closed' && previousState === 'open') {\n animation = modalRef.current.animate({ translate: translate.reverse() }, options);\n }\n\n // Handler will not leak since animation object is garbage collected\n animation?.addEventListener('finish', () => {\n // Removes the element from the compositor.\n animation.cancel();\n });\n }, [state]);\n\n const maximized = stretch || state === 'maximized';\n\n // Only enable useModalMove in docked state here since MinimizedModal handles calling when minimized\n const moveable = state === 'docked' && !!moveableOption;\n useModalMove({\n enabled: moveable,\n moveRef: modalRef,\n grabRef: modalHeaderRef\n });\n\n const modal = (\n <Flex\n {...restProps}\n container={{ direction: 'column' }}\n ref={modalRef}\n as={StyledModal}\n forwardedAs={as}\n onClick={(e: MouseEvent) => e.stopPropagation()}\n onKeyDown={onModalKeyDown}\n alert={alert}\n role={alert ? 'alertdialog' : 'dialog'}\n stretch={maximized}\n center={center}\n aria-labelledby={`${id}-heading`}\n aria-describedby={alert ? `${id}-content` : undefined}\n aria-modal={state !== 'docked'}\n state={state}\n aria-busy={!!progress}\n data-moveable={moveable ? '' : undefined}\n >\n <Flex\n container={{ justify: 'between', alignItems: 'start', gap: 1 }}\n item={{ shrink: 0 }}\n as={StyledModalHeader}\n role='none'\n ref={modalHeaderRef}\n tabIndex={moveable ? 0 : undefined}\n >\n <Flex\n container={{ alignItems: 'center', gap: 1 }}\n as={Text}\n variant={headingTag}\n id={`${id}-heading`}\n ref={modalHeadingRef}\n >\n <span>{heading}</span>\n {typeof count === 'number' && <Count>{count}</Count>}\n {typeof count === 'object' && <Count hasMore={count.hasMore}>{count.value}</Count>}\n </Flex>\n\n <Flex container>\n {maximizable && !alert && state !== 'maximized' && (\n <Button\n icon\n variant='simple'\n label={t('maximize')}\n aria-label={t('modal_maximize')}\n onKeyDown={onHeaderActionKeyDown}\n onClick={() => {\n if (onRequestMaximize?.() !== false) {\n maximize();\n }\n }}\n >\n <Icon name='undock' />\n </Button>\n )}\n {dockable && !alert && state !== 'docked' && (\n <Button\n icon\n variant='simple'\n label={t('dock')}\n aria-label={t('modal_dock')}\n onKeyDown={onHeaderActionKeyDown}\n onClick={() => {\n if (onRequestDock?.() !== false) {\n dock();\n }\n }}\n >\n <Icon name='dock' />\n </Button>\n )}\n {minimizable && !alert && (\n <Button\n icon\n variant='simple'\n label={t('minimize')}\n aria-label={t('modal_minimize')}\n onKeyDown={onHeaderActionKeyDown}\n onClick={() => {\n if (onRequestMinimize?.() !== false) {\n minimize();\n }\n }}\n >\n <Icon name='minus' />\n </Button>\n )}\n {dismissible && !alert && (\n <Button\n icon\n variant='simple'\n label={t('close')}\n aria-label={t('modal_close')}\n onKeyDown={onHeaderActionKeyDown}\n onClick={() => {\n if (!isCloseButtonDisabled) {\n tryDismiss();\n }\n }}\n >\n <Icon name='times' />\n </Button>\n )}\n </Flex>\n </Flex>\n\n <Flex\n item={{ grow: 1 }}\n as={StyledModalContent}\n ref={modalContentRef}\n tabIndex={contentTabIndex}\n style={\n modalContentRef.current\n ? { '--scroll-top': `${modalContentRef.current.scrollTop}px` }\n : undefined\n }\n >\n {children && (\n <StyledModalChildrenWrap id={`${id}-content`} inert={progress ? '' : undefined}>\n {children}\n </StyledModalChildrenWrap>\n )}\n\n <Progress\n visible={!!progress}\n focusOnVisible\n delay\n placement='local'\n message={progressMessage}\n onTransitionEndOut={() => setProgressMessage(undefined)}\n />\n </Flex>\n\n {actions && (\n <ResponsiveActions\n as='footer'\n role='none'\n actionsRef={modalActionsRef}\n actionsEl={actions}\n />\n )}\n </Flex>\n );\n\n const renderModal =\n state === 'docked' ? (\n modal\n ) : (\n <Backdrop\n ref={backdropRef}\n container={{\n alignItems: center || maximized ? 'center' : 'start'\n }}\n transitionSpeed='slow'\n open={state === 'open' || state === 'maximized'}\n onBeforeTransitionIn={onBeforeOpen}\n onAfterTransitionIn={() => {\n setIsCloseButtonDisabled(false);\n onAfterOpen?.();\n }}\n onBeforeTransitionOut={onBeforeClose}\n onAfterTransitionOut={() => {\n unmount();\n onAfterClose?.();\n }}\n >\n {modal}\n </Backdrop>\n );\n\n return state === 'minimized' ? (\n <MinimizedModal {...props} {...restProps} heading={minimizedLabel ?? heading} icon={icon} />\n ) : (\n renderModal\n );\n});\n\nexport default Modal;\n"]}
1
+ {"version":3,"file":"Modal.js","sourceRoot":"","sources":["../../../src/components/Modal/Modal.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAU9F,OAAO,QAAQ,EAAE,EAAsB,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvF,OAAO,QAAQ,MAAM,aAAa,CAAC;AACnC,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,OAAO,EACP,aAAa,EACb,MAAM,EACN,YAAY,EACZ,WAAW,EACX,eAAe,EACf,eAAe,EACf,QAAQ,EACR,SAAS,EACT,QAAQ,EACT,MAAM,aAAa,CAAC;AACrB,OAAO,IAAI,EAAE,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,SAAS,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,SAAS,MAAM,0BAA0B,CAAC;AACtD,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAC;AACpD,OAAO,KAAK,UAAU,MAAM,2BAA2B,CAAC;AACxD,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAClC,OAAO,iBAAiB,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAExD,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C,YAAY,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAEzD,MAAM,KAAK,GAAiD,UAAU,CAAC,SAAS,KAAK,CACnF,KAAkC,EAClC,GAAqB;IAErB,MAAM,EACJ,EAAE,GAAG,KAAK,EACV,QAAQ,GAAG,KAAK,EAChB,OAAO,EACP,UAAU,GAAG,IAAI,EACjB,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,OAAO,EACP,OAAO,GAAG,KAAK,EACf,MAAM,GAAG,KAAK,EACd,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,GAAG,SAAS,EACb,GAAG,KAAK,CAAC;IAEV,MAAM,EACJ,KAAK,EACL,WAAW,EACX,WAAW,EACX,WAAW,EACX,QAAQ,EACR,QAAQ,EAAE,cAAc,EACxB,KAAK,EACL,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,GAAG,EACJ,GAAG,eAAe,EAAE,CAAC;IAEtB,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;IACzC,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,eAAe,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IACzD,MAAM,eAAe,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACrD,MAAM,eAAe,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACzC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;IACpB,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAA2B,SAAS,CAAC,CAAC;IAC5F,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,EAAE,yBAAyB,EAAE,GAAG,eAAe,EAAE,CAAC;IACxD,MAAM,gBAAgB,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,qBAAqB,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE3D,kFAAkF;IAClF,eAAe,CAAC,GAAG,EAAE;QACnB,MAAM,EAAE,GAAG,gBAAgB,EAAE,CAAC;QAC9B,IAAI,CAAC,gBAAgB,IAAI,QAAQ,EAAE,CAAC;YAClC,yBAAyB,CAAC,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAChE,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC;QACpC,CAAC;aAAM,IACL,gBAAgB;YAChB,CAAC,QAAQ;YACT,CAAC,EAAE,KAAK,yBAAyB,CAAC,OAAO,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,WAAW,CAAC,EAC7F,CAAC;YACD,yBAAyB,CAAC,OAAO,GAAG,IAAI,CAAC;QAC3C,CAAC;IACH,CAAC,EAAE,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC;IAEjC,MAAM,eAAe,GAAG,kBAAkB,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEtF,MAAM,UAAU,GAAG,GAAG,EAAE;QACtB,IAAI,gBAAgB,EAAE,EAAE,KAAK,KAAK,EAAE,CAAC;YACnC,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,IAAI,QAAQ;YAAE,OAAO;QAErB,IAAI,YAAY,EAAE,OAAO,EAAE,CAAC;YAC1B,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC/B,CAAC;aAAM,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;YACnC,0BAA0B,CACxB,eAAe,CAAC,OAAO,EACvB,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAClD,CAAC;QACJ,CAAC;aAAM,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YAC5B,0BAA0B,CACxB,QAAQ,CAAC,OAAO,EAChB,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAClD,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IAEF,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IAEpF,aAAa,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,EAAE;QACzC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO;QAE9D,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,CAAC,OAAO,EAAE,CAAC;gBACrC,UAAU,EAAE,CAAC;YACf,CAAC;QACH,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,KAAK,KAAK,WAAW;YAAE,OAAO;QAClC,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,QAAQ;YAAE,QAAQ,EAAE,CAAC;QAChF,IAAI,KAAK,KAAK,QAAQ;YAAE,wBAAwB,CAAC,KAAK,CAAC,CAAC;QAExD,4EAA4E;QAC5E,IAAI,KAAK,KAAK,QAAQ,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;YACrD,aAAa,EAAE,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;YACV,YAAY,EAAE,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,SAAS,CAAC,GAAG,EAAE;QACb,wEAAwE;QACxE,sEAAsE;QACtE,2EAA2E;QAC3E,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,aAAa,EAAE,EAAE,CAAC;YAClB,OAAO,EAAE,CAAC;YACV,YAAY,EAAE,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,0HAA0H;IAC1H,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,CAAqB,EAAE,EAAE;QACxB,IAAI,WAAW,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,WAAW,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,GAAG,EAAE,CAAC;YAC5F,UAAU,EAAE,CAAC;QACf,CAAC;IACH,CAAC,EACD,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,CAAC,CACtC,CAAC;IAEF,4EAA4E;IAC5E,SAAS,CACP,CAAC,CAAgB,EAAE,EAAE;QACnB,IACE,WAAW;YACX,GAAG;YACH,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,WAAW,CAAC;YAC3C,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC;YAC1B,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EACrC,CAAC;YACD,UAAU,EAAE,CAAC;QACf,CAAC;IACH,CAAC,EACD,WAAW,IAAI,GAAG,IAAI,CAAC,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EACnF,CAAC,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,CACtC,CAAC;IAEF,MAAM,qBAAqB,GAAG,WAAW,CAAC,CAAC,CAAwC,EAAE,EAAE;QACrF,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC;YAAE,CAAC,CAAC,cAAc,EAAE,CAAC;IAC3E,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,QAAQ,EAAE,CAAC;QACb,CAAC;QAED,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,eAAe,EAAE,CAAC;YACzE,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;aAAM,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YAC7B,kBAAkB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACnC,CAAC;IACH,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEf,yBAAyB;IACzB,eAAe,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE,OAAO;QAE9B,MAAM,SAAS,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACrC,MAAM,OAAO,GAA6B;YACxC,8EAA8E;YAC9E,QAAQ,EAAE,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC;YAClE,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI;YACxC,IAAI,EAAE,UAAU;SACjB,CAAC;QAEF,IAAI,SAAgC,CAAC;QAErC,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACrB,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/D,CAAC;aAAM,IAAI,KAAK,KAAK,QAAQ,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC1D,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QACpF,CAAC;QAED,oEAAoE;QACpE,SAAS,EAAE,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;YACzC,2CAA2C;YAC3C,SAAS,CAAC,MAAM,EAAE,CAAC;QACrB,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAEZ,MAAM,SAAS,GAAG,OAAO,IAAI,KAAK,KAAK,WAAW,CAAC;IAEnD,oGAAoG;IACpG,MAAM,QAAQ,GAAG,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,cAAc,CAAC;IACxD,YAAY,CAAC;QACX,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,QAAQ;QACjB,OAAO,EAAE,cAAc;KACxB,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,CACZ,MAAC,IAAI,OACC,SAAS,EACb,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAClC,GAAG,EAAE,QAAQ,EACb,EAAE,EAAE,WAAW,EACf,WAAW,EAAE,EAAE,EACf,OAAO,EAAE,CAAC,CAAa,EAAE,EAAE,CAAC,CAAC,CAAC,eAAe,EAAE,EAC/C,MAAM,EAAE,CAAC,CAAkB,EAAE,EAAE;YAC7B,IAAI,UAAU,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC;gBAAE,qBAAqB,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;QAC9E,CAAC,EACD,SAAS,EAAE,cAAc,EACzB,KAAK,EAAE,KAAK,EACZ,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,EACtC,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,MAAM,qBACG,GAAG,EAAE,UAAU,sBACd,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,gBACzC,KAAK,KAAK,QAAQ,EAC9B,KAAK,EAAE,KAAK,eACD,CAAC,CAAC,QAAQ,mBACN,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,aAExC,MAAC,IAAI,IACH,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,EAC9D,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EACnB,EAAE,EAAE,iBAAiB,EACrB,IAAI,EAAC,MAAM,EACX,GAAG,EAAE,cAAc,EACnB,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,aAElC,MAAC,IAAI,IACH,SAAS,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,EAC3C,EAAE,EAAE,IAAI,EACR,OAAO,EAAE,UAAU,EACnB,EAAE,EAAE,GAAG,EAAE,UAAU,EACnB,GAAG,EAAE,eAAe,aAEpB,yBAAO,OAAO,GAAQ,EACrB,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAC,KAAK,cAAE,KAAK,GAAS,EACnD,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAC,KAAK,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,YAAG,KAAK,CAAC,KAAK,GAAS,IAC7E,EAEP,MAAC,IAAI,IAAC,SAAS,mBACZ,WAAW,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,WAAW,IAAI,CACjD,KAAC,MAAM,IACL,IAAI,QACJ,OAAO,EAAC,QAAQ,EAChB,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,gBACR,CAAC,CAAC,gBAAgB,CAAC,EAC/B,SAAS,EAAE,qBAAqB,EAChC,OAAO,EAAE,GAAG,EAAE;oCACZ,IAAI,iBAAiB,EAAE,EAAE,KAAK,KAAK,EAAE,CAAC;wCACpC,QAAQ,EAAE,CAAC;oCACb,CAAC;gCACH,CAAC,YAED,KAAC,IAAI,IAAC,IAAI,EAAC,QAAQ,GAAG,GACf,CACV,EACA,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,QAAQ,IAAI,CAC3C,KAAC,MAAM,IACL,IAAI,QACJ,OAAO,EAAC,QAAQ,EAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,gBACJ,CAAC,CAAC,YAAY,CAAC,EAC3B,SAAS,EAAE,qBAAqB,EAChC,OAAO,EAAE,GAAG,EAAE;oCACZ,IAAI,aAAa,EAAE,EAAE,KAAK,KAAK,EAAE,CAAC;wCAChC,IAAI,EAAE,CAAC;oCACT,CAAC;gCACH,CAAC,YAED,KAAC,IAAI,IAAC,IAAI,EAAC,MAAM,GAAG,GACb,CACV,EACA,WAAW,IAAI,CAAC,KAAK,IAAI,CACxB,KAAC,MAAM,IACL,IAAI,QACJ,OAAO,EAAC,QAAQ,EAChB,KAAK,EAAE,CAAC,CAAC,UAAU,CAAC,gBACR,CAAC,CAAC,gBAAgB,CAAC,EAC/B,SAAS,EAAE,qBAAqB,EAChC,OAAO,EAAE,GAAG,EAAE;oCACZ,IAAI,iBAAiB,EAAE,EAAE,KAAK,KAAK,EAAE,CAAC;wCACpC,QAAQ,EAAE,CAAC;oCACb,CAAC;gCACH,CAAC,YAED,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,GAAG,GACd,CACV,EACA,WAAW,IAAI,CAAC,KAAK,IAAI,CACxB,KAAC,MAAM,IACL,IAAI,QACJ,OAAO,EAAC,QAAQ,EAChB,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,gBACL,CAAC,CAAC,aAAa,CAAC,EAC5B,SAAS,EAAE,qBAAqB,EAChC,OAAO,EAAE,GAAG,EAAE;oCACZ,IAAI,CAAC,qBAAqB,EAAE,CAAC;wCAC3B,UAAU,EAAE,CAAC;oCACf,CAAC;gCACH,CAAC,YAED,KAAC,IAAI,IAAC,IAAI,EAAC,OAAO,GAAG,GACd,CACV,IACI,IACF,EAEP,MAAC,IAAI,IACH,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EACjB,EAAE,EAAE,kBAAkB,EACtB,GAAG,EAAE,eAAe,EACpB,QAAQ,EAAE,eAAe,EACzB,KAAK,EACH,eAAe,CAAC,OAAO;oBACrB,CAAC,CAAC,EAAE,cAAc,EAAE,GAAG,eAAe,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE;oBAC9D,CAAC,CAAC,SAAS,aAGd,QAAQ,IAAI,CACX,KAAC,uBAAuB,IAAC,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,YAC3E,QAAQ,GACe,CAC3B,EAED,KAAC,QAAQ,IACP,OAAO,EAAE,CAAC,CAAC,QAAQ,EACnB,cAAc,QACd,KAAK,QACL,SAAS,EAAC,OAAO,EACjB,OAAO,EAAE,eAAe,EACxB,kBAAkB,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,SAAS,CAAC,GACvD,IACG,EAEN,OAAO,IAAI,CACV,KAAC,iBAAiB,IAChB,EAAE,EAAC,QAAQ,EACX,IAAI,EAAC,MAAM,EACX,UAAU,EAAE,eAAe,EAC3B,SAAS,EAAE,OAAO,GAClB,CACH,IACI,CACR,CAAC;IAEF,MAAM,WAAW,GACf,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CACnB,KAAK,CACN,CAAC,CAAC,CAAC,CACF,KAAC,QAAQ,IACP,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE;YACT,UAAU,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO;SACrD,EACD,eAAe,EAAC,MAAM,EACtB,IAAI,EAAE,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,WAAW,EAC/C,oBAAoB,EAAE,YAAY,EAClC,mBAAmB,EAAE,GAAG,EAAE;YACxB,wBAAwB,CAAC,KAAK,CAAC,CAAC;YAChC,WAAW,EAAE,EAAE,CAAC;QAClB,CAAC,EACD,qBAAqB,EAAE,aAAa,EACpC,oBAAoB,EAAE,GAAG,EAAE;YACzB,OAAO,EAAE,CAAC;YACV,YAAY,EAAE,EAAE,CAAC;QACnB,CAAC,YAEA,KAAK,GACG,CACZ,CAAC;IAEJ,OAAO,KAAK,KAAK,WAAW,CAAC,CAAC,CAAC,CAC7B,KAAC,cAAc,OAAK,KAAK,KAAM,SAAS,EAAE,OAAO,EAAE,cAAc,IAAI,OAAO,EAAE,IAAI,EAAE,IAAI,GAAI,CAC7F,CAAC,CAAC,CAAC,CACF,WAAW,CACZ,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,eAAe,KAAK,CAAC","sourcesContent":["import { forwardRef, useEffect, useRef, useCallback, useState, useLayoutEffect } from 'react';\nimport type {\n FunctionComponent,\n PropsWithoutRef,\n Ref,\n MouseEvent,\n KeyboardEvent as ReactKeyboardEvent,\n FocusEvent as ReactFocusEvent\n} from 'react';\n\nimport Progress, { type ProgressProps } from '../Progress';\nimport { focusNonInteractiveElement, getActiveElement, isInstance } from '../../utils';\nimport Backdrop from '../Backdrop';\nimport Flex from '../Flex';\nimport Button from '../Button';\nimport type { ForwardProps } from '../../types';\nimport {\n useConsolidatedRef,\n useContentTabIndex,\n useI18n,\n useOuterEvent,\n useUID,\n useFocusTrap,\n usePrevious,\n useModalContext,\n useModalManager,\n useEvent,\n useEscape,\n useTheme\n} from '../../hooks';\nimport Icon, { registerIcon } from '../Icon';\nimport * as timesIcon from '../Icon/icons/times.icon';\nimport * as minusIcon from '../Icon/icons/minus.icon';\nimport * as dockIcon from '../Icon/icons/dock.icon';\nimport * as undockIcon from '../Icon/icons/undock.icon';\nimport Text from '../Text';\nimport { Count } from '../Badges';\nimport ResponsiveActions from '../ResponsiveActions';\nimport { getCSSTimeInMilliseconds } from '../../styles';\n\nimport MinimizedModal from './MinimizedModal';\nimport type { ModalProps } from './Modal.types';\nimport {\n StyledModal,\n StyledModalHeader,\n StyledModalContent,\n StyledModalChildrenWrap\n} from './Modal.styles';\nimport useModalMove from './useModalMove';\n\nregisterIcon(timesIcon, minusIcon, dockIcon, undockIcon);\n\nconst Modal: FunctionComponent<ModalProps & ForwardProps> = forwardRef(function Modal(\n props: PropsWithoutRef<ModalProps>,\n ref: Ref<HTMLElement>\n) {\n const {\n as = 'div',\n progress = false,\n heading,\n headingTag = 'h2',\n icon,\n count,\n children,\n actions,\n stretch = false,\n center = false,\n defaultFocus,\n minimizedLabel,\n onBeforeOpen,\n onAfterOpen,\n onBeforeClose,\n onAfterClose,\n onRequestDismiss,\n onRequestMinimize,\n onRequestMaximize,\n onRequestDock,\n onRequestActivate,\n ...restProps\n } = props;\n\n const {\n alert,\n dismissible,\n minimizable,\n maximizable,\n dockable,\n moveable: moveableOption,\n state,\n dismiss,\n minimize,\n maximize,\n dock,\n unmount,\n top\n } = useModalContext();\n\n const modalRef = useConsolidatedRef(ref);\n const modalHeaderRef = useRef(null);\n const modalHeadingRef = useRef<HTMLHeadingElement>(null);\n const modalContentRef = useRef<HTMLDivElement>(null);\n const modalActionsRef = useRef<HTMLDivElement>(null);\n const backdropRef = useRef<HTMLDivElement>(null);\n const previousState = usePrevious(state);\n const id = useUID();\n const t = useI18n();\n const [progressMessage, setProgressMessage] = useState<ProgressProps['message']>(undefined);\n const [isCloseButtonDisabled, setIsCloseButtonDisabled] = useState(true);\n const theme = useTheme();\n const { lastFocusedBeforeProgress } = useModalManager();\n const previousProgress = usePrevious(progress);\n const lastFocusedInModalRef = useRef<Element | null>(null);\n\n // Capture the focused element before the inert attribute is committed to the DOM.\n useLayoutEffect(() => {\n const el = getActiveElement();\n if (!previousProgress && progress) {\n lastFocusedBeforeProgress.current = modalRef.current?.contains(el)\n ? el\n : lastFocusedInModalRef.current;\n } else if (\n previousProgress &&\n !progress &&\n (el === lastFocusedBeforeProgress.current || !lastFocusedBeforeProgress.current?.isConnected)\n ) {\n lastFocusedBeforeProgress.current = null;\n }\n }, [previousProgress, progress]);\n\n const contentTabIndex = useContentTabIndex(modalRef, modalContentRef, [], [progress]);\n\n const tryDismiss = () => {\n if (onRequestDismiss?.() !== false) {\n dismiss();\n }\n };\n\n const setFocus = () => {\n if (progress) return;\n\n if (defaultFocus?.current) {\n defaultFocus.current.focus();\n } else if (modalHeadingRef.current) {\n focusNonInteractiveElement(\n modalHeadingRef.current,\n typeof heading === 'string' ? heading : undefined\n );\n } else if (modalRef.current) {\n focusNonInteractiveElement(\n modalRef.current,\n typeof heading === 'string' ? heading : undefined\n );\n }\n };\n\n useFocusTrap(modalRef, false);\n useEvent('shortcut', e => e.stopPropagation(), { eventOptions: { capture: true } });\n\n useOuterEvent('mousedown', [modalRef], e => {\n if (['minimized', 'docked', 'closed'].includes(state)) return;\n\n if (dismissible) {\n if (e.target === backdropRef.current) {\n tryDismiss();\n }\n } else {\n modalRef.current?.focus();\n }\n });\n\n useEffect(() => {\n if (state === 'minimized') return;\n if (state === 'open' || state === 'maximized' || state === 'docked') setFocus();\n if (state === 'docked') setIsCloseButtonDisabled(false);\n\n // This won't actually run until potential changes to docked modal handling.\n if (state === 'closed' && previousState === 'docked') {\n onBeforeClose?.();\n unmount();\n onAfterClose?.();\n }\n }, [state]);\n\n useEffect(() => {\n // If a modal is already in a closed state on initial mount, unmount it.\n // This only happens when a docked modal closes since the ModalManager\n // remounts it outside of the DockedModals container if state !== 'docked'.\n if (state === 'closed') {\n onBeforeClose?.();\n unmount();\n onAfterClose?.();\n }\n }, []);\n\n // Dismiss on Escape needs to be handled using React event handling to be cancelable using SyntheticEvent.stopPropagation.\n const onModalKeyDown = useCallback(\n (e: ReactKeyboardEvent) => {\n if (dismissible && (state === 'open' || state === 'maximized') && e.key === 'Escape' && top) {\n tryDismiss();\n }\n },\n [dismissible, state, top, tryDismiss]\n );\n\n // Document-level handler as fallback when focus is on body or outside modal\n useEscape(\n (e: KeyboardEvent) => {\n if (\n dismissible &&\n top &&\n (state === 'open' || state === 'maximized') &&\n isInstance(e.target, Node) &&\n !modalRef.current?.contains(e.target)\n ) {\n tryDismiss();\n }\n },\n dismissible && top && (state === 'open' || state === 'maximized') ? document : null,\n [dismissible, top, state, tryDismiss]\n );\n\n const onHeaderActionKeyDown = useCallback((e: ReactKeyboardEvent<HTMLButtonElement>) => {\n if (e.repeat && (e.key === 'Enter' || e.key === ' ')) e.preventDefault();\n }, []);\n\n useEffect(() => {\n if (!progress) {\n setFocus();\n }\n\n if (typeof progress === 'object' && progress.message !== progressMessage) {\n setProgressMessage(progress.message);\n } else if (progress === true) {\n setProgressMessage(t('loading'));\n }\n }, [progress]);\n\n // Animate enter and exit\n useLayoutEffect(() => {\n if (!modalRef.current) return;\n\n const translate = ['0 -4rem', '0 0'];\n const options: KeyframeAnimationOptions = {\n // Multiplier needed to coordinate with Backdrop's transition speed multiplier\n duration: getCSSTimeInMilliseconds(theme.base.animation.speed) * 2,\n easing: theme.base.animation.timing.ease,\n fill: 'forwards'\n };\n\n let animation: Animation | undefined;\n\n if (state === 'open') {\n animation = modalRef.current.animate({ translate }, options);\n } else if (state === 'closed' && previousState === 'open') {\n animation = modalRef.current.animate({ translate: translate.reverse() }, options);\n }\n\n // Handler will not leak since animation object is garbage collected\n animation?.addEventListener('finish', () => {\n // Removes the element from the compositor.\n animation.cancel();\n });\n }, [state]);\n\n const maximized = stretch || state === 'maximized';\n\n // Only enable useModalMove in docked state here since MinimizedModal handles calling when minimized\n const moveable = state === 'docked' && !!moveableOption;\n useModalMove({\n enabled: moveable,\n moveRef: modalRef,\n grabRef: modalHeaderRef\n });\n\n const modal = (\n <Flex\n {...restProps}\n container={{ direction: 'column' }}\n ref={modalRef}\n as={StyledModal}\n forwardedAs={as}\n onClick={(e: MouseEvent) => e.stopPropagation()}\n onBlur={(e: ReactFocusEvent) => {\n if (isInstance(e.target, Element)) lastFocusedInModalRef.current = e.target;\n }}\n onKeyDown={onModalKeyDown}\n alert={alert}\n role={alert ? 'alertdialog' : 'dialog'}\n stretch={maximized}\n center={center}\n aria-labelledby={`${id}-heading`}\n aria-describedby={alert ? `${id}-content` : undefined}\n aria-modal={state !== 'docked'}\n state={state}\n aria-busy={!!progress}\n data-moveable={moveable ? '' : undefined}\n >\n <Flex\n container={{ justify: 'between', alignItems: 'start', gap: 1 }}\n item={{ shrink: 0 }}\n as={StyledModalHeader}\n role='none'\n ref={modalHeaderRef}\n tabIndex={moveable ? 0 : undefined}\n >\n <Flex\n container={{ alignItems: 'center', gap: 1 }}\n as={Text}\n variant={headingTag}\n id={`${id}-heading`}\n ref={modalHeadingRef}\n >\n <span>{heading}</span>\n {typeof count === 'number' && <Count>{count}</Count>}\n {typeof count === 'object' && <Count hasMore={count.hasMore}>{count.value}</Count>}\n </Flex>\n\n <Flex container>\n {maximizable && !alert && state !== 'maximized' && (\n <Button\n icon\n variant='simple'\n label={t('maximize')}\n aria-label={t('modal_maximize')}\n onKeyDown={onHeaderActionKeyDown}\n onClick={() => {\n if (onRequestMaximize?.() !== false) {\n maximize();\n }\n }}\n >\n <Icon name='undock' />\n </Button>\n )}\n {dockable && !alert && state !== 'docked' && (\n <Button\n icon\n variant='simple'\n label={t('dock')}\n aria-label={t('modal_dock')}\n onKeyDown={onHeaderActionKeyDown}\n onClick={() => {\n if (onRequestDock?.() !== false) {\n dock();\n }\n }}\n >\n <Icon name='dock' />\n </Button>\n )}\n {minimizable && !alert && (\n <Button\n icon\n variant='simple'\n label={t('minimize')}\n aria-label={t('modal_minimize')}\n onKeyDown={onHeaderActionKeyDown}\n onClick={() => {\n if (onRequestMinimize?.() !== false) {\n minimize();\n }\n }}\n >\n <Icon name='minus' />\n </Button>\n )}\n {dismissible && !alert && (\n <Button\n icon\n variant='simple'\n label={t('close')}\n aria-label={t('modal_close')}\n onKeyDown={onHeaderActionKeyDown}\n onClick={() => {\n if (!isCloseButtonDisabled) {\n tryDismiss();\n }\n }}\n >\n <Icon name='times' />\n </Button>\n )}\n </Flex>\n </Flex>\n\n <Flex\n item={{ grow: 1 }}\n as={StyledModalContent}\n ref={modalContentRef}\n tabIndex={contentTabIndex}\n style={\n modalContentRef.current\n ? { '--scroll-top': `${modalContentRef.current.scrollTop}px` }\n : undefined\n }\n >\n {children && (\n <StyledModalChildrenWrap id={`${id}-content`} inert={progress ? '' : undefined}>\n {children}\n </StyledModalChildrenWrap>\n )}\n\n <Progress\n visible={!!progress}\n focusOnVisible\n delay\n placement='local'\n message={progressMessage}\n onTransitionEndOut={() => setProgressMessage(undefined)}\n />\n </Flex>\n\n {actions && (\n <ResponsiveActions\n as='footer'\n role='none'\n actionsRef={modalActionsRef}\n actionsEl={actions}\n />\n )}\n </Flex>\n );\n\n const renderModal =\n state === 'docked' ? (\n modal\n ) : (\n <Backdrop\n ref={backdropRef}\n container={{\n alignItems: center || maximized ? 'center' : 'start'\n }}\n transitionSpeed='slow'\n open={state === 'open' || state === 'maximized'}\n onBeforeTransitionIn={onBeforeOpen}\n onAfterTransitionIn={() => {\n setIsCloseButtonDisabled(false);\n onAfterOpen?.();\n }}\n onBeforeTransitionOut={onBeforeClose}\n onAfterTransitionOut={() => {\n unmount();\n onAfterClose?.();\n }}\n >\n {modal}\n </Backdrop>\n );\n\n return state === 'minimized' ? (\n <MinimizedModal {...props} {...restProps} heading={minimizedLabel ?? heading} icon={icon} />\n ) : (\n renderModal\n );\n});\n\nexport default Modal;\n"]}
@@ -1,4 +1,4 @@
1
- import type { ComponentType, ReactNode, RefObject, Context } from 'react';
1
+ import type { ComponentType, ReactNode, RefObject, Context, MutableRefObject } from 'react';
2
2
  import type { BaseProps, AsProp, DeferInfer, HeadingTag } from '../../types';
3
3
  import type { ProgressProps } from '../Progress';
4
4
  import type { CountProps } from '../Badges';
@@ -162,6 +162,8 @@ export interface ModalManagerContextValue {
162
162
  create: <P extends object>(component: ComponentType<P>, props?: DeferInfer<P>, options?: ModalOptions) => ModalMethods<P>;
163
163
  ModalContext: Context<ModalContextValue>;
164
164
  initialized: boolean;
165
+ /** @internal Last element focused inside a modal before progress/inert was applied. */
166
+ lastFocusedBeforeProgress: MutableRefObject<Element | null>;
165
167
  }
166
168
  export interface ModalContextValue extends ModalMethods, ModalOptions {
167
169
  state: ModalState;
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.types.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/Modal.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Modal.types.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/Modal.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.types.js","sourceRoot":"","sources":["../../../src/components/Modal/Modal.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ComponentType, ReactNode, RefObject, Context } from 'react';\n\nimport type { BaseProps, AsProp, DeferInfer, HeadingTag } from '../../types';\nimport type { ProgressProps } from '../Progress';\nimport type { CountProps } from '../Badges';\nimport type { IconProps } from '../Icon';\n\nexport interface ModalManagerProps {\n /** Content that will be provided modal manager context. */\n children: ReactNode;\n}\n\nexport interface ModalOptions {\n /**\n * If true, the Modal will render as an alert that is not dismissible.\n * @default false\n */\n alert?: boolean;\n /**\n * Toggle Esc keypress action or clicking backdrop to dismiss Modal. Also displays dismiss button on Modal header.\n * Not valid for Modals of type alert.\n * @default alert ? false : true\n */\n dismissible?: boolean;\n /**\n * Toggle minimize button in header thereby helping in rendering minimizable/non-minimizable Modals.\n * Not valid for Modals of type alert.\n * @default false\n */\n minimizable?: boolean;\n /**\n * Toggle maximize button in header thereby helping in rendering maximizable/non-maximizable Modals.\n * Not valid for Modals of type alert.\n * @default false\n */\n maximizable?: boolean;\n /** Positions the modal in the right corner without backdrop\n * @default false\n */\n dockable?: boolean;\n /** Allows moving the modal element with drag or keyboard along the horizontal axis when docked or minimized.\n * @default false\n */\n moveable?: boolean;\n /**\n * If true, the Modal will initially render in a minimized state.\n * @default false\n */\n defaultMinimized?: boolean;\n /**\n * If true, the Modal content will be removed from the DOM when in a minimized state.\n * @default true\n */\n unmountWhenMinimized?: boolean;\n /** Used to identify the modal. Will be passed back as an argument in life cycle functions. */\n id?: string;\n /** Life cycle function that will be run when the modal is minimized. */\n onMinimize?: (id: string) => void;\n /** Life cycle function that will be run when the modal is maximized. */\n onMaximize?: (id: string) => void;\n /** Life cycle function that will be run when the modal is maximized. */\n onDock?: (id: string) => void;\n /** Life cycle function that will be run when the modal is activated (un minimized). */\n onActivate?: (id: string) => void;\n /** Life cycle function that will be run when the modal is dismissed. */\n onDismiss?: (id: string) => void;\n}\n\nexport interface ModalProps extends BaseProps, AsProp {\n /** Place a modal into a loading state by way of a bool or an object which allows for a custom message and determinate progress. */\n progress?: boolean | Pick<ProgressProps, 'message' | 'minValue' | 'maxValue' | 'value'>;\n /** Heading for the Modal. */\n heading: ReactNode;\n /**\n * Heading level.\n * @default h2\n */\n headingTag?: HeadingTag;\n /** Icon for the Modal */\n icon?: IconProps['name'];\n /** Count for list data presented in the Modal. Can be a number or an object containing the value\n * and a flag indicating if there are more items. */\n count?: number | { value: number; hasMore?: CountProps['hasMore'] };\n /** Content for the Modal. */\n children: ReactNode;\n /** Actions for the Modal. */\n actions?: ReactNode;\n /**\n * Render the modal in full width and height.\n * @default false\n */\n stretch?: boolean;\n /**\n * Toggle to position the Modal vertically centered or not.\n * @default false\n */\n center?: boolean;\n /**\n * Automatically compute the width of the Modal based on the content.\n * @default false\n */\n autoWidth?: boolean;\n /** Takes a React Ref of the element to be focused initially on mounting Modal. */\n defaultFocus?: RefObject<HTMLElement>;\n /** Label for Minimized Modal. */\n minimizedLabel?: string;\n /** Accepts a callback function that gets invoked before opening a Modal. */\n onBeforeOpen?: () => void;\n /** Accepts a callback function that gets invoked after opening a Modal. */\n onAfterOpen?: () => void;\n /** Accepts a callback function that gets invoked before closing a Modal. */\n onBeforeClose?: () => void;\n /** Accepts a callback function that gets invoked after closing a Modal. */\n onAfterClose?: () => void;\n /**\n * Accepts a callback function that returns a boolean before dismissing a modal.\n * If the boolean is false, the modal will not be dismissed.\n */\n onRequestDismiss?: () => boolean | void;\n /**\n * Accepts a callback function that returns a boolean before minimizing a modal.\n * If the boolean is false, the modal will not be minimized.\n */\n onRequestMinimize?: () => boolean | void;\n /**\n * Accepts a callback function that returns a boolean before maximizing a modal.\n * If the boolean is false, the modal will not be maximized.\n */\n onRequestMaximize?: () => boolean | void;\n /**\n * Accepts a callback function that returns a boolean before docking a modal.\n * If the boolean is false, the modal will not be dockable.\n */\n onRequestDock?: () => boolean | void;\n /**\n * Accepts a callback function that returns a boolean before activating a modal.\n * If the boolean is false, the modal will not be activated.\n */\n onRequestActivate?: () => boolean | void;\n}\n\nexport type ModalState = 'open' | 'closed' | 'minimized' | 'maximized' | 'docked';\n\nexport interface ModalMethods<P extends object = object> {\n /** Closes the referenced Modal when called. */\n dismiss: () => void;\n /** Updates the referenced Modal with a set of props. */\n update: (props: Partial<P>) => void;\n /** Minimizes the referenced Modal. */\n minimize: () => void;\n /** Maximizes the referenced Modal. */\n maximize: () => void;\n /** Docks the referenced Modal. */\n dock: () => void;\n /** Will reopen the referenced Modal if minimized, and minimize any open Modals that are minimizable. */\n activate: () => void;\n /** Removes the referenced Modal from the DOM. */\n unmount: () => void;\n}\n\nexport interface ModalManagerContextValue {\n /**\n * The function that will create the Modal. This function accepts the component to render a Modal,\n * props for that component, and options for that Modal.\n */\n create: <P extends object>(\n component: ComponentType<P>,\n props?: DeferInfer<P>,\n options?: ModalOptions\n ) => ModalMethods<P>;\n ModalContext: Context<ModalContextValue>;\n initialized: boolean;\n}\n\nexport interface ModalContextValue extends ModalMethods, ModalOptions {\n state: ModalState;\n top: boolean;\n /** @internal */\n initialized: boolean;\n}\n\nexport interface ModalObject<P extends object = object> {\n id: string;\n state: ModalState;\n methods: ModalMethods<P>;\n props?: P;\n Component: ComponentType<P>;\n options: ModalOptions;\n}\n"]}
1
+ {"version":3,"file":"Modal.types.js","sourceRoot":"","sources":["../../../src/components/Modal/Modal.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { ComponentType, ReactNode, RefObject, Context, MutableRefObject } from 'react';\n\nimport type { BaseProps, AsProp, DeferInfer, HeadingTag } from '../../types';\nimport type { ProgressProps } from '../Progress';\nimport type { CountProps } from '../Badges';\nimport type { IconProps } from '../Icon';\n\nexport interface ModalManagerProps {\n /** Content that will be provided modal manager context. */\n children: ReactNode;\n}\n\nexport interface ModalOptions {\n /**\n * If true, the Modal will render as an alert that is not dismissible.\n * @default false\n */\n alert?: boolean;\n /**\n * Toggle Esc keypress action or clicking backdrop to dismiss Modal. Also displays dismiss button on Modal header.\n * Not valid for Modals of type alert.\n * @default alert ? false : true\n */\n dismissible?: boolean;\n /**\n * Toggle minimize button in header thereby helping in rendering minimizable/non-minimizable Modals.\n * Not valid for Modals of type alert.\n * @default false\n */\n minimizable?: boolean;\n /**\n * Toggle maximize button in header thereby helping in rendering maximizable/non-maximizable Modals.\n * Not valid for Modals of type alert.\n * @default false\n */\n maximizable?: boolean;\n /** Positions the modal in the right corner without backdrop\n * @default false\n */\n dockable?: boolean;\n /** Allows moving the modal element with drag or keyboard along the horizontal axis when docked or minimized.\n * @default false\n */\n moveable?: boolean;\n /**\n * If true, the Modal will initially render in a minimized state.\n * @default false\n */\n defaultMinimized?: boolean;\n /**\n * If true, the Modal content will be removed from the DOM when in a minimized state.\n * @default true\n */\n unmountWhenMinimized?: boolean;\n /** Used to identify the modal. Will be passed back as an argument in life cycle functions. */\n id?: string;\n /** Life cycle function that will be run when the modal is minimized. */\n onMinimize?: (id: string) => void;\n /** Life cycle function that will be run when the modal is maximized. */\n onMaximize?: (id: string) => void;\n /** Life cycle function that will be run when the modal is maximized. */\n onDock?: (id: string) => void;\n /** Life cycle function that will be run when the modal is activated (un minimized). */\n onActivate?: (id: string) => void;\n /** Life cycle function that will be run when the modal is dismissed. */\n onDismiss?: (id: string) => void;\n}\n\nexport interface ModalProps extends BaseProps, AsProp {\n /** Place a modal into a loading state by way of a bool or an object which allows for a custom message and determinate progress. */\n progress?: boolean | Pick<ProgressProps, 'message' | 'minValue' | 'maxValue' | 'value'>;\n /** Heading for the Modal. */\n heading: ReactNode;\n /**\n * Heading level.\n * @default h2\n */\n headingTag?: HeadingTag;\n /** Icon for the Modal */\n icon?: IconProps['name'];\n /** Count for list data presented in the Modal. Can be a number or an object containing the value\n * and a flag indicating if there are more items. */\n count?: number | { value: number; hasMore?: CountProps['hasMore'] };\n /** Content for the Modal. */\n children: ReactNode;\n /** Actions for the Modal. */\n actions?: ReactNode;\n /**\n * Render the modal in full width and height.\n * @default false\n */\n stretch?: boolean;\n /**\n * Toggle to position the Modal vertically centered or not.\n * @default false\n */\n center?: boolean;\n /**\n * Automatically compute the width of the Modal based on the content.\n * @default false\n */\n autoWidth?: boolean;\n /** Takes a React Ref of the element to be focused initially on mounting Modal. */\n defaultFocus?: RefObject<HTMLElement>;\n /** Label for Minimized Modal. */\n minimizedLabel?: string;\n /** Accepts a callback function that gets invoked before opening a Modal. */\n onBeforeOpen?: () => void;\n /** Accepts a callback function that gets invoked after opening a Modal. */\n onAfterOpen?: () => void;\n /** Accepts a callback function that gets invoked before closing a Modal. */\n onBeforeClose?: () => void;\n /** Accepts a callback function that gets invoked after closing a Modal. */\n onAfterClose?: () => void;\n /**\n * Accepts a callback function that returns a boolean before dismissing a modal.\n * If the boolean is false, the modal will not be dismissed.\n */\n onRequestDismiss?: () => boolean | void;\n /**\n * Accepts a callback function that returns a boolean before minimizing a modal.\n * If the boolean is false, the modal will not be minimized.\n */\n onRequestMinimize?: () => boolean | void;\n /**\n * Accepts a callback function that returns a boolean before maximizing a modal.\n * If the boolean is false, the modal will not be maximized.\n */\n onRequestMaximize?: () => boolean | void;\n /**\n * Accepts a callback function that returns a boolean before docking a modal.\n * If the boolean is false, the modal will not be dockable.\n */\n onRequestDock?: () => boolean | void;\n /**\n * Accepts a callback function that returns a boolean before activating a modal.\n * If the boolean is false, the modal will not be activated.\n */\n onRequestActivate?: () => boolean | void;\n}\n\nexport type ModalState = 'open' | 'closed' | 'minimized' | 'maximized' | 'docked';\n\nexport interface ModalMethods<P extends object = object> {\n /** Closes the referenced Modal when called. */\n dismiss: () => void;\n /** Updates the referenced Modal with a set of props. */\n update: (props: Partial<P>) => void;\n /** Minimizes the referenced Modal. */\n minimize: () => void;\n /** Maximizes the referenced Modal. */\n maximize: () => void;\n /** Docks the referenced Modal. */\n dock: () => void;\n /** Will reopen the referenced Modal if minimized, and minimize any open Modals that are minimizable. */\n activate: () => void;\n /** Removes the referenced Modal from the DOM. */\n unmount: () => void;\n}\n\nexport interface ModalManagerContextValue {\n /**\n * The function that will create the Modal. This function accepts the component to render a Modal,\n * props for that component, and options for that Modal.\n */\n create: <P extends object>(\n component: ComponentType<P>,\n props?: DeferInfer<P>,\n options?: ModalOptions\n ) => ModalMethods<P>;\n ModalContext: Context<ModalContextValue>;\n initialized: boolean;\n /** @internal Last element focused inside a modal before progress/inert was applied. */\n lastFocusedBeforeProgress: MutableRefObject<Element | null>;\n}\n\nexport interface ModalContextValue extends ModalMethods, ModalOptions {\n state: ModalState;\n top: boolean;\n /** @internal */\n initialized: boolean;\n}\n\nexport interface ModalObject<P extends object = object> {\n id: string;\n state: ModalState;\n methods: ModalMethods<P>;\n props?: P;\n Component: ComponentType<P>;\n options: ModalOptions;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ModalManager.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/ModalManager.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAA2B,OAAO,EAAE,MAAM,OAAO,CAAC;AAMjF,OAAO,YAAY,CAAC;AAGpB,OAAO,KAAK,EAIV,iBAAiB,EAEjB,wBAAwB,EACzB,MAAM,eAAe,CAAC;AAGvB,OAAO,QAAQ,YAAY,CAAC;IAC1B,UAAiB,aAAa;QAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;KACzD;CACF;AAiKD,QAAA,MAAM,YAAY,EAAE,iBAAiB,CAAC,iBAAiB,CA2HtD,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"ModalManager.d.ts","sourceRoot":"","sources":["../../../src/components/Modal/ModalManager.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAA2B,OAAO,EAAE,MAAM,OAAO,CAAC;AAMjF,OAAO,YAAY,CAAC;AAGpB,OAAO,KAAK,EAIV,iBAAiB,EAEjB,wBAAwB,EACzB,MAAM,eAAe,CAAC;AAGvB,OAAO,QAAQ,YAAY,CAAC;IAC1B,UAAiB,aAAa;QAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,CAAC;KACzD;CACF;AAiKD,QAAA,MAAM,YAAY,EAAE,iBAAiB,CAAC,iBAAiB,CA8HtD,CAAC;AAEF,eAAe,YAAY,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { createElement as _createElement } from "react";
2
2
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useReducer, useMemo, useEffect, useContext, memo } from 'react';
3
+ import { useReducer, useMemo, useEffect, useContext, useRef, memo } from 'react';
4
4
  import { createPortal } from 'react-dom';
5
5
  import { createUID, getActiveElement, windowIsAvailable } from '../../utils';
6
6
  import { useConfiguration, useScrollToggle } from '../../hooks';
@@ -89,10 +89,12 @@ const RenderModals = ({ modals }) => {
89
89
  const ModalManager = ({ children }) => {
90
90
  const [modals, dispatch] = useReducer(reducer, []);
91
91
  const { disableScroll, enableScroll } = useScrollToggle();
92
+ const lastFocusedBeforeProgress = useRef(null);
92
93
  const providerValue = useMemo(() => ({
93
94
  create: (Component, props, options) => {
94
95
  const id = options?.id || createUID();
95
- const activeElement = getActiveElement();
96
+ const activeElement = lastFocusedBeforeProgress.current ?? getActiveElement();
97
+ lastFocusedBeforeProgress.current = null;
96
98
  const initiatorRef = activeElement ? new WeakRef(activeElement) : null;
97
99
  const methods = {
98
100
  dismiss: () => {
@@ -168,7 +170,8 @@ const ModalManager = ({ children }) => {
168
170
  return methods;
169
171
  },
170
172
  ModalContext,
171
- initialized: true
173
+ initialized: true,
174
+ lastFocusedBeforeProgress
172
175
  }), []);
173
176
  useEffect(() => {
174
177
  if (modals.some(modal => ['open', 'closed', 'maximized'].includes(modal.state))) {
@@ -1 +1 @@
1
- {"version":3,"file":"ModalManager.js","sourceRoot":"","sources":["../../../src/components/Modal/ModalManager.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useReducer, useMemo, useEffect, useContext, memo } from 'react';\nimport type { FunctionComponent, ComponentType, Dispatch, Context } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { createUID, getActiveElement, windowIsAvailable } from '../../utils';\nimport { useConfiguration, useScrollToggle } from '../../hooks';\nimport type { ExcludeStrict, OmitStrict } from '../../types';\nimport '../../init';\n\nimport DockedModals from './DockedModals';\nimport type {\n ModalMethods,\n ModalOptions,\n ModalObject,\n ModalManagerProps,\n ModalState,\n ModalManagerContextValue\n} from './Modal.types';\nimport { ModalContext, ModalManagerContext } from './Contexts';\n\ndeclare module '../../init' {\n export interface CosmosGlobals {\n modalManagerContext?: Context<ModalManagerContextValue>;\n }\n}\n\ntype ModalAction =\n | 'create'\n | 'update'\n | 'minimize'\n | 'maximize'\n | 'dock'\n | 'activate'\n | 'dismiss'\n | 'unmount';\n\ntype ModalReducerPayload<P extends object> =\n | { action: 'create'; modal: ModalObject<P> }\n | {\n action: 'update';\n modal: Partial<OmitStrict<ModalObject<P>, 'props'>> &\n Pick<ModalObject, 'id'> & { props: Partial<ModalObject<P>['props']> };\n }\n | {\n action: ExcludeStrict<ModalAction, 'create' | 'update'>;\n modal: Pick<ModalObject, 'id'>;\n };\n\nconst reducer = <P extends object>(\n modals: ModalObject[],\n payload: ModalReducerPayload<P>\n): ModalObject<any>[] => {\n switch (payload.action) {\n case 'create':\n return [...modals, payload.modal];\n\n case 'unmount':\n return modals.filter(modal => modal.id !== payload.modal.id);\n\n case 'dismiss':\n return modals.map(modal => {\n modal.state = modal.id === payload.modal.id ? 'closed' : modal.state;\n return modal;\n });\n\n case 'update':\n return modals.map(modal => {\n modal.props =\n modal.id === payload.modal.id ? { ...modal.props, ...payload.modal.props } : modal.props;\n return modal;\n });\n\n case 'activate': {\n const newModals = modals.map(modal => {\n modal.state = modal.id === payload.modal.id ? 'open' : modal.state;\n return modal;\n });\n\n // Move the newly activated modal to the end of the list\n // to ensure it is shown on top of other active modals.\n const activatedModal = newModals.splice(\n newModals.findIndex(modal => modal.id === payload.modal.id),\n 1\n );\n\n return [...newModals, ...activatedModal];\n }\n\n case 'minimize':\n return modals.map(modal => {\n modal.state =\n modal.id === payload.modal.id && modal.options.minimizable ? 'minimized' : modal.state;\n return modal;\n });\n\n case 'maximize':\n return modals.map(modal => {\n modal.state =\n modal.id === payload.modal.id && modal.options.maximizable ? 'maximized' : modal.state;\n return modal;\n });\n\n case 'dock':\n return modals.map(modal => {\n modal.state =\n modal.id === payload.modal.id && modal.options.dockable ? 'docked' : 'minimized';\n return modal;\n });\n\n default:\n return modals;\n }\n};\n\nconst WrappedModal = memo(\n ({\n Component,\n id,\n options: { alert, dismissible, dockable, moveable, minimizable, maximizable },\n state,\n methods,\n props,\n top\n }: ModalObject & { top: boolean }) => (\n <ModalContext.Provider\n // eslint-disable-next-line react/jsx-no-constructed-context-values\n value={{\n id,\n alert,\n dismissible,\n minimizable,\n maximizable,\n dockable,\n moveable,\n state,\n top,\n initialized: true,\n ...methods\n }}\n >\n <Component {...props} />\n </ModalContext.Provider>\n )\n);\n\nconst RenderModals = ({ modals }: { modals: ModalObject[] }) => {\n const { open, minimized, alerts } = modals.reduce<{\n open: ModalObject[];\n minimized: ModalObject[];\n alerts: ModalObject[];\n }>(\n (obj, modal) => {\n if (modal.options.alert) obj.alerts.push(modal);\n else if (modal.state === 'minimized' || modal.state === 'docked') {\n obj.minimized.push(modal);\n } else obj.open.push(modal);\n\n return obj;\n },\n { open: [], minimized: [], alerts: [] }\n );\n\n return (\n <>\n {open.map((modal, i) => (\n <WrappedModal\n {...modal}\n top={alerts.length === 0 && i === open.length - 1}\n key={modal.id}\n />\n ))}\n {minimized.length > 0 && (\n <DockedModals>\n {minimized.map(modal => (\n <WrappedModal {...modal} top={false} key={modal.id} />\n ))}\n </DockedModals>\n )}\n {alerts.map((modal, i) => (\n <WrappedModal {...modal} top={i === open.length - 1} key={modal.id} />\n ))}\n </>\n );\n};\n\nconst ModalManager: FunctionComponent<ModalManagerProps> = ({ children }) => {\n const [modals, dispatch] = useReducer(reducer, []);\n const { disableScroll, enableScroll } = useScrollToggle();\n\n const providerValue = useMemo(\n () => ({\n create: <P extends object>(\n Component: ComponentType<P>,\n props?: P,\n options?: ModalOptions\n ) => {\n const id = options?.id || createUID();\n const activeElement = getActiveElement();\n const initiatorRef = activeElement ? new WeakRef(activeElement) : null;\n\n const methods: ModalMethods<P> = {\n dismiss: () => {\n dispatch({ action: 'dismiss', modal: { id } });\n options?.onDismiss?.(id);\n const initiator = initiatorRef?.deref();\n const currentActiveElement = getActiveElement();\n if (\n initiator?.isConnected &&\n (initiator instanceof HTMLElement || initiator instanceof SVGElement) &&\n currentActiveElement !== null &&\n (currentActiveElement.closest('[aria-modal=\"true\"]') !== null ||\n currentActiveElement === document.body)\n ) {\n initiator.focus();\n }\n },\n update: updateProps => {\n (dispatch as Dispatch<ModalReducerPayload<P>>)({\n action: 'update',\n modal: { id, props: updateProps }\n });\n },\n minimize: () => {\n dispatch({ action: 'minimize', modal: { id } });\n options?.onMinimize?.(id);\n },\n maximize: () => {\n dispatch({ action: 'maximize', modal: { id } });\n options?.onMaximize?.(id);\n },\n dock: () => {\n dispatch({ action: 'dock', modal: { id } });\n options?.onDock?.(id);\n },\n activate: () => {\n dispatch({ action: 'activate', modal: { id } });\n options?.onActivate?.(id);\n },\n unmount: () => {\n dispatch({ action: 'unmount', modal: { id } });\n }\n };\n\n let defaultState: ModalState;\n if (options?.defaultMinimized) {\n defaultState = 'minimized';\n } else if (options?.dockable) {\n defaultState = 'docked';\n } else {\n defaultState = 'open';\n }\n\n (dispatch as Dispatch<ModalReducerPayload<P>>)({\n action: 'create',\n modal: {\n id,\n methods,\n Component,\n props,\n state: defaultState,\n options: {\n alert: false,\n minimizable: false,\n maximizable: false,\n dockable: false,\n moveable: false,\n defaultMinimized: false,\n unmountWhenMinimized: true,\n ...options,\n dismissible: !!(options?.alert ? false : options?.dismissible ?? true)\n }\n }\n });\n\n return methods;\n },\n ModalContext,\n initialized: true\n }),\n []\n );\n\n useEffect(() => {\n if (modals.some(modal => ['open', 'closed', 'maximized'].includes(modal.state))) {\n disableScroll();\n } else {\n enableScroll();\n }\n }, [modals]);\n\n const { portalTarget } = useConfiguration();\n\n const context = windowIsAvailable\n ? window.cosmos.modalManagerContext ?? ModalManagerContext\n : ModalManagerContext;\n const priorCtx = useContext(context);\n\n // Don't create additional Modal portals.\n if (priorCtx.initialized) return <context.Provider value={priorCtx}>{children}</context.Provider>;\n\n return (\n <context.Provider value={providerValue}>\n {children}\n {modals.length > 0 &&\n portalTarget &&\n createPortal(<RenderModals modals={modals} />, portalTarget)}\n </context.Provider>\n );\n};\n\nexport default ModalManager;\n"]}
1
+ {"version":3,"file":"ModalManager.js","sourceRoot":"","sources":["../../../src/components/Modal/ModalManager.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useReducer, useMemo, useEffect, useContext, useRef, memo } from 'react';\nimport type { FunctionComponent, ComponentType, Dispatch, Context } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { createUID, getActiveElement, windowIsAvailable } from '../../utils';\nimport { useConfiguration, useScrollToggle } from '../../hooks';\nimport type { ExcludeStrict, OmitStrict } from '../../types';\nimport '../../init';\n\nimport DockedModals from './DockedModals';\nimport type {\n ModalMethods,\n ModalOptions,\n ModalObject,\n ModalManagerProps,\n ModalState,\n ModalManagerContextValue\n} from './Modal.types';\nimport { ModalContext, ModalManagerContext } from './Contexts';\n\ndeclare module '../../init' {\n export interface CosmosGlobals {\n modalManagerContext?: Context<ModalManagerContextValue>;\n }\n}\n\ntype ModalAction =\n | 'create'\n | 'update'\n | 'minimize'\n | 'maximize'\n | 'dock'\n | 'activate'\n | 'dismiss'\n | 'unmount';\n\ntype ModalReducerPayload<P extends object> =\n | { action: 'create'; modal: ModalObject<P> }\n | {\n action: 'update';\n modal: Partial<OmitStrict<ModalObject<P>, 'props'>> &\n Pick<ModalObject, 'id'> & { props: Partial<ModalObject<P>['props']> };\n }\n | {\n action: ExcludeStrict<ModalAction, 'create' | 'update'>;\n modal: Pick<ModalObject, 'id'>;\n };\n\nconst reducer = <P extends object>(\n modals: ModalObject[],\n payload: ModalReducerPayload<P>\n): ModalObject<any>[] => {\n switch (payload.action) {\n case 'create':\n return [...modals, payload.modal];\n\n case 'unmount':\n return modals.filter(modal => modal.id !== payload.modal.id);\n\n case 'dismiss':\n return modals.map(modal => {\n modal.state = modal.id === payload.modal.id ? 'closed' : modal.state;\n return modal;\n });\n\n case 'update':\n return modals.map(modal => {\n modal.props =\n modal.id === payload.modal.id ? { ...modal.props, ...payload.modal.props } : modal.props;\n return modal;\n });\n\n case 'activate': {\n const newModals = modals.map(modal => {\n modal.state = modal.id === payload.modal.id ? 'open' : modal.state;\n return modal;\n });\n\n // Move the newly activated modal to the end of the list\n // to ensure it is shown on top of other active modals.\n const activatedModal = newModals.splice(\n newModals.findIndex(modal => modal.id === payload.modal.id),\n 1\n );\n\n return [...newModals, ...activatedModal];\n }\n\n case 'minimize':\n return modals.map(modal => {\n modal.state =\n modal.id === payload.modal.id && modal.options.minimizable ? 'minimized' : modal.state;\n return modal;\n });\n\n case 'maximize':\n return modals.map(modal => {\n modal.state =\n modal.id === payload.modal.id && modal.options.maximizable ? 'maximized' : modal.state;\n return modal;\n });\n\n case 'dock':\n return modals.map(modal => {\n modal.state =\n modal.id === payload.modal.id && modal.options.dockable ? 'docked' : 'minimized';\n return modal;\n });\n\n default:\n return modals;\n }\n};\n\nconst WrappedModal = memo(\n ({\n Component,\n id,\n options: { alert, dismissible, dockable, moveable, minimizable, maximizable },\n state,\n methods,\n props,\n top\n }: ModalObject & { top: boolean }) => (\n <ModalContext.Provider\n // eslint-disable-next-line react/jsx-no-constructed-context-values\n value={{\n id,\n alert,\n dismissible,\n minimizable,\n maximizable,\n dockable,\n moveable,\n state,\n top,\n initialized: true,\n ...methods\n }}\n >\n <Component {...props} />\n </ModalContext.Provider>\n )\n);\n\nconst RenderModals = ({ modals }: { modals: ModalObject[] }) => {\n const { open, minimized, alerts } = modals.reduce<{\n open: ModalObject[];\n minimized: ModalObject[];\n alerts: ModalObject[];\n }>(\n (obj, modal) => {\n if (modal.options.alert) obj.alerts.push(modal);\n else if (modal.state === 'minimized' || modal.state === 'docked') {\n obj.minimized.push(modal);\n } else obj.open.push(modal);\n\n return obj;\n },\n { open: [], minimized: [], alerts: [] }\n );\n\n return (\n <>\n {open.map((modal, i) => (\n <WrappedModal\n {...modal}\n top={alerts.length === 0 && i === open.length - 1}\n key={modal.id}\n />\n ))}\n {minimized.length > 0 && (\n <DockedModals>\n {minimized.map(modal => (\n <WrappedModal {...modal} top={false} key={modal.id} />\n ))}\n </DockedModals>\n )}\n {alerts.map((modal, i) => (\n <WrappedModal {...modal} top={i === open.length - 1} key={modal.id} />\n ))}\n </>\n );\n};\n\nconst ModalManager: FunctionComponent<ModalManagerProps> = ({ children }) => {\n const [modals, dispatch] = useReducer(reducer, []);\n const { disableScroll, enableScroll } = useScrollToggle();\n const lastFocusedBeforeProgress = useRef<Element | null>(null);\n\n const providerValue = useMemo(\n () => ({\n create: <P extends object>(\n Component: ComponentType<P>,\n props?: P,\n options?: ModalOptions\n ) => {\n const id = options?.id || createUID();\n const activeElement = lastFocusedBeforeProgress.current ?? getActiveElement();\n lastFocusedBeforeProgress.current = null;\n const initiatorRef = activeElement ? new WeakRef(activeElement) : null;\n\n const methods: ModalMethods<P> = {\n dismiss: () => {\n dispatch({ action: 'dismiss', modal: { id } });\n options?.onDismiss?.(id);\n const initiator = initiatorRef?.deref();\n const currentActiveElement = getActiveElement();\n if (\n initiator?.isConnected &&\n (initiator instanceof HTMLElement || initiator instanceof SVGElement) &&\n currentActiveElement !== null &&\n (currentActiveElement.closest('[aria-modal=\"true\"]') !== null ||\n currentActiveElement === document.body)\n ) {\n initiator.focus();\n }\n },\n update: updateProps => {\n (dispatch as Dispatch<ModalReducerPayload<P>>)({\n action: 'update',\n modal: { id, props: updateProps }\n });\n },\n minimize: () => {\n dispatch({ action: 'minimize', modal: { id } });\n options?.onMinimize?.(id);\n },\n maximize: () => {\n dispatch({ action: 'maximize', modal: { id } });\n options?.onMaximize?.(id);\n },\n dock: () => {\n dispatch({ action: 'dock', modal: { id } });\n options?.onDock?.(id);\n },\n activate: () => {\n dispatch({ action: 'activate', modal: { id } });\n options?.onActivate?.(id);\n },\n unmount: () => {\n dispatch({ action: 'unmount', modal: { id } });\n }\n };\n\n let defaultState: ModalState;\n if (options?.defaultMinimized) {\n defaultState = 'minimized';\n } else if (options?.dockable) {\n defaultState = 'docked';\n } else {\n defaultState = 'open';\n }\n\n (dispatch as Dispatch<ModalReducerPayload<P>>)({\n action: 'create',\n modal: {\n id,\n methods,\n Component,\n props,\n state: defaultState,\n options: {\n alert: false,\n minimizable: false,\n maximizable: false,\n dockable: false,\n moveable: false,\n defaultMinimized: false,\n unmountWhenMinimized: true,\n ...options,\n dismissible: !!(options?.alert ? false : options?.dismissible ?? true)\n }\n }\n });\n\n return methods;\n },\n ModalContext,\n initialized: true,\n lastFocusedBeforeProgress\n }),\n []\n );\n\n useEffect(() => {\n if (modals.some(modal => ['open', 'closed', 'maximized'].includes(modal.state))) {\n disableScroll();\n } else {\n enableScroll();\n }\n }, [modals]);\n\n const { portalTarget } = useConfiguration();\n\n const context = windowIsAvailable\n ? window.cosmos.modalManagerContext ?? ModalManagerContext\n : ModalManagerContext;\n const priorCtx = useContext(context);\n\n // Don't create additional Modal portals.\n if (priorCtx.initialized) return <context.Provider value={priorCtx}>{children}</context.Provider>;\n\n return (\n <context.Provider value={providerValue}>\n {children}\n {modals.length > 0 &&\n portalTarget &&\n createPortal(<RenderModals modals={modals} />, portalTarget)}\n </context.Provider>\n );\n};\n\nexport default ModalManager;\n"]}
@@ -60,6 +60,12 @@ export interface GridLayoutEditorProps {
60
60
  children?: ReactElement[];
61
61
  /** Item label mapped with item id for a11y */
62
62
  itemLabelMap: Record<string, string>;
63
+ /**
64
+ * Optional minimum row height (px) to override the built-in defaults.
65
+ * Useful when grid items contain content that requires more vertical space
66
+ * than the default minimum (e.g. compact SimpleValue insights).
67
+ */
68
+ minRowHeight?: number;
63
69
  }
64
70
  /**
65
71
  * Editor component to create Grid Layouts
@@ -1 +1 @@
1
- {"version":3,"file":"GridLayoutEditor.d.ts","sourceRoot":"","sources":["../../../../src/components/PageTemplates/GridLayout/GridLayoutEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EAAE,EACP,KAAK,YAAY,EACjB,KAAK,GAAG,EAMT,MAAM,OAAO,CAAC;AACf,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,mBAAmB,CAAC;AAO3B,OAA4B,EAAE,KAAK,wBAAwB,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAGpG,OAAO,EAML,KAAK,kBAAkB,EACxB,MAAM,SAAS,CAAC;AA6BjB,MAAM,WAAW,qBAAqB;IACpC,0IAA0I;IAC1I,cAAc,EAAE,MAAM,eAAe,GAAG,SAAS,CAAC;IAElD;;;OAGG;IACH,YAAY,EAAE,MAAM,OAAO,CAAC;CAC7B;AAED,2CAA2C;AAC3C,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,aAAa,EAAE,CAAC,QAAQ,EAAE,eAAe,GAAG,SAAS,KAAK,IAAI,CAAC;IAE/D;;;;;OAKG;IACH,WAAW,EAAE,eAAe,GAAG,SAAS,CAAC;IAEzC;;;OAGG;IACH,WAAW,EAAE,wBAAwB,CAAC;IAEtC;;;OAGG;IACH,IAAI,EAAE,kBAAkB,CAAC;IAEzB;;;OAGG;IACH,IAAI,EAAE,wBAAwB,CAAC;IAE/B;;;OAGG;IACH,cAAc,CAAC,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAE7C,+FAA+F;IAC/F,MAAM,CAAC,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAEpC;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAE1B,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED;;;GAGG;AACH,QAAA,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAkL/C,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"GridLayoutEditor.d.ts","sourceRoot":"","sources":["../../../../src/components/PageTemplates/GridLayout/GridLayoutEditor.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EAAE,EACP,KAAK,YAAY,EACjB,KAAK,GAAG,EAMT,MAAM,OAAO,CAAC;AACf,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,mBAAmB,CAAC;AAO3B,OAA4B,EAAE,KAAK,wBAAwB,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAGpG,OAAO,EAML,KAAK,kBAAkB,EACxB,MAAM,SAAS,CAAC;AA6BjB,MAAM,WAAW,qBAAqB;IACpC,0IAA0I;IAC1I,cAAc,EAAE,MAAM,eAAe,GAAG,SAAS,CAAC;IAElD;;;OAGG;IACH,YAAY,EAAE,MAAM,OAAO,CAAC;CAC7B;AAED,2CAA2C;AAC3C,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,aAAa,EAAE,CAAC,QAAQ,EAAE,eAAe,GAAG,SAAS,KAAK,IAAI,CAAC;IAE/D;;;;;OAKG;IACH,WAAW,EAAE,eAAe,GAAG,SAAS,CAAC;IAEzC;;;OAGG;IACH,WAAW,EAAE,wBAAwB,CAAC;IAEtC;;;OAGG;IACH,IAAI,EAAE,kBAAkB,CAAC;IAEzB;;;OAGG;IACH,IAAI,EAAE,wBAAwB,CAAC;IAE/B;;;OAGG;IACH,cAAc,CAAC,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAE7C,+FAA+F;IAC/F,MAAM,CAAC,EAAE,GAAG,CAAC,qBAAqB,CAAC,CAAC;IAEpC;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAE1B,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,QAAA,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA2L/C,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -35,7 +35,7 @@ StyledEditor.defaultProps = defaultThemeProp;
35
35
  * Editor component to create Grid Layouts
36
36
  * @component
37
37
  */
38
- const GridLayoutEditor = ({ handle, children, layoutModel, rows, onModelChange, itemLabelMap, ...restProps }) => {
38
+ const GridLayoutEditor = ({ handle, children, layoutModel, rows, onModelChange, itemLabelMap, minRowHeight: minRowHeightProp, ...restProps }) => {
39
39
  // Track width changes: https://github.com/react-grid-layout/react-grid-layout#providing-grid-width
40
40
  const [wrapperEl, setWrapperEl] = useElement();
41
41
  const size = useMonitoredSize(wrapperEl);
@@ -44,7 +44,7 @@ const GridLayoutEditor = ({ handle, children, layoutModel, rows, onModelChange,
44
44
  const commonGridConfig = useGridLayoutConfig(true);
45
45
  const t = useI18n();
46
46
  const { breakpoint, numColumns } = useMemo(() => getBreakpointAndCols(width || 0, restProps.breakpoints, restProps.cols), [width, restProps.breakpoints, restProps.cols]);
47
- const { rowHeight, numRowsPerPage } = useMemo(() => getRowHeight(breakpoint, height || 0, commonGridConfig.margin[0], rows, layoutModel), [breakpoint, commonGridConfig.margin, height, rows, layoutModel]);
47
+ const { rowHeight, numRowsPerPage } = useMemo(() => getRowHeight(breakpoint, height || 0, commonGridConfig.margin[0], rows, layoutModel, minRowHeightProp), [breakpoint, commonGridConfig.margin, height, rows, layoutModel, minRowHeightProp]);
48
48
  const currentLayout = useMemo(() => layoutModel?.[breakpoint], [breakpoint, layoutModel]);
49
49
  const onLayoutChange = useCallback((curLayout, allLayouts) => {
50
50
  onModelChange(!children || children.length === 0 ? undefined : allLayouts);
@@ -1 +1 @@
1
- {"version":3,"file":"GridLayoutEditor.js","sourceRoot":"","sources":["../../../../src/components/PageTemplates/GridLayout/GridLayoutEditor.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n type FC,\n type ReactElement,\n type Ref,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useState\n} from 'react';\nimport {\n Responsive as ResponsiveGridLayout,\n type Layout,\n type Layouts,\n type CoreProps\n} from 'react-grid-layout';\nimport styled, { css } from 'styled-components';\n\nimport Flex from '../../Flex';\nimport { useElement, useI18n } from '../../../hooks';\nimport { defaultThemeProp } from '../../../theme';\n\nimport useGridLayoutConfig, { type GridBreakPointWiseValues, type GridLayoutModel } from './config';\nimport EditorBackground from './EditorBackground';\nimport EditorGridItem, { ResizeHandle, resizeHandleClassName } from './EditorGridItem';\nimport {\n checkLayoutForGaps,\n getBreakpointAndCols,\n getRowHeight,\n useGridItemSorter,\n useMonitoredSize,\n type GridLayoutRowsProp\n} from './utils';\nimport ReactResizableStyles from './ReactResizableStyles';\nimport ReactGridLayoutStyles from './ReactGridLayoutStyles';\n\nconst StyledEditor = styled(Flex)(({ theme }) => {\n const {\n base: {\n palette: { interactive }\n }\n } = theme;\n return css`\n position: relative;\n\n /* Needed for the background grid to be visible */\n z-index: 0;\n block-size: 100%;\n overflow-y: auto;\n\n /* To minimize height triggers during dragging due to horizontal scrollbar showing up */\n overflow-x: hidden;\n\n .react-grid-item.react-grid-placeholder {\n background: ${interactive};\n opacity: 0.3;\n }\n `;\n});\nStyledEditor.defaultProps = defaultThemeProp;\n\nexport interface GridLayoutHandleValue {\n /** Used to get layout model with imperative handle. Returns the layout model from all breakpoints. Returns undefined when no children. */\n getLayoutModel: () => GridLayoutModel | undefined;\n\n /**\n * Returns a flag indicating whether there are any gaps in the current layout.\n * Highlights all background cells to indicate the same.\n */\n checkForGaps: () => boolean;\n}\n\n/** Props for GridLayoutEditor component */\nexport interface GridLayoutEditorProps {\n /**\n * Called whenever there's a change in the layoutModel.\n * Change-handler of the CONTROLLED COMPONENT\n */\n onModelChange: (newModel: GridLayoutModel | undefined) => void;\n\n /**\n * Value of the CONTROLLED component\n * Passed when editing a previously saved layout.\n * Can be `undefined` when no children.\n * It should be the same as the one emitted by `getLayoutModel` or `handle`\n */\n layoutModel: GridLayoutModel | undefined;\n\n /**\n * Breakpoints set on the Grid.\n * Needs to be aligned with `rows` and `cols`\n */\n breakpoints: GridBreakPointWiseValues;\n\n /**\n * # of rows to fit into the container height at each breakpoint (unless a fixed rowHeight is preferred)\n * rows should be aligned with `breakpoints` prop\n */\n rows: GridLayoutRowsProp;\n\n /**\n * Breakpoint-wise numColumns on the Grid.\n * cols should be aligned with `breakpoints` prop\n */\n cols: GridBreakPointWiseValues;\n\n /**\n * If parent DOM node of ResponsiveReactGridLayout or ReactGridLayout has \"transform: scale(n)\" css property,\n * we should set scale coefficient to avoid render artifacts while dragging.\n */\n transformScale?: CoreProps['transformScale'];\n\n /** Ref to access the editor state. Used to get the current layout-model when persisting it. */\n handle?: Ref<GridLayoutHandleValue>;\n\n /**\n * Child elements to be rendered as Grid items.\n * Each element should have a unique `key`\n * Memoize children for a better performance: https://github.com/react-grid-layout/react-grid-layout#performance\n * Set up an `itemLabel` prop with the text to call out when the item is focused.\n * If a child needs to be initialized with a specific x/y/w/h,\n * or if you want to specify any special properties like minW, minH, etc.,\n * set up a `data-grid` in layoutModel prop with any subset of properties\n * The prop can be undefined on init when no elements.\n */\n children?: ReactElement[];\n\n /** Item label mapped with item id for a11y */\n itemLabelMap: Record<string, string>;\n}\n\n/**\n * Editor component to create Grid Layouts\n * @component\n */\nconst GridLayoutEditor: FC<GridLayoutEditorProps> = ({\n handle,\n children,\n layoutModel,\n rows,\n onModelChange,\n itemLabelMap,\n ...restProps\n}) => {\n // Track width changes: https://github.com/react-grid-layout/react-grid-layout#providing-grid-width\n const [wrapperEl, setWrapperEl] = useElement<HTMLElement>();\n const size = useMonitoredSize(wrapperEl);\n const width = size?.width;\n const height = size?.height;\n const commonGridConfig = useGridLayoutConfig(true);\n const t = useI18n();\n const { breakpoint, numColumns } = useMemo(\n () => getBreakpointAndCols(width || 0, restProps.breakpoints, restProps.cols),\n [width, restProps.breakpoints, restProps.cols]\n );\n const { rowHeight, numRowsPerPage } = useMemo(\n () => getRowHeight(breakpoint, height || 0, commonGridConfig.margin[0], rows, layoutModel),\n [breakpoint, commonGridConfig.margin, height, rows, layoutModel]\n );\n const currentLayout = useMemo(() => layoutModel?.[breakpoint], [breakpoint, layoutModel]);\n\n const onLayoutChange = useCallback(\n (curLayout: Layout[], allLayouts: Layouts) => {\n onModelChange(!children || children.length === 0 ? undefined : allLayouts);\n },\n [children, onModelChange]\n );\n\n // Callback to sort child DOM nodes to ensure an intuitive tabbing order\n const gridItemSorter = useGridItemSorter(currentLayout, numColumns);\n\n // Set up keyboard accessibility\n const [listEl, setListEl] = useElement<HTMLElement>();\n useEffect(() => {\n if (listEl) {\n listEl.setAttribute('role', 'list');\n listEl.setAttribute('tabindex', '0');\n listEl.setAttribute('aria-label', t('configurable_layout_instructions'));\n }\n }, [listEl, t]);\n\n const moveItem = useCallback(\n (itemKey: ReactElement['key'], deltaX: number, deltaY: number) => {\n // Should be initialized by this point\n if (!currentLayout) return;\n const itemIndex = currentLayout.findIndex(item => item.i === itemKey);\n // Should be present on the currentLayout by this point.\n if (itemIndex === -1) return;\n\n const oldItem = currentLayout[itemIndex];\n const newItem: Layout = {\n ...oldItem,\n // `Math.max` needed to avoid a glitch when moving left beyond the left edge\n x: Math.max(0, oldItem.x + deltaX),\n y: Math.max(0, oldItem.y + deltaY)\n };\n const newLayout = [\n ...currentLayout.slice(0, itemIndex),\n newItem,\n ...currentLayout.slice(itemIndex + 1)\n ];\n const newModel = { ...layoutModel, [breakpoint]: newLayout };\n onModelChange(!children || children.length === 0 ? undefined : newModel);\n },\n [breakpoint, children, currentLayout, layoutModel, onModelChange]\n );\n\n const addOrSubtractItemSize = useCallback(\n (itemKey: ReactElement['key'], deltaW: number, deltaH: number) => {\n // Should be initialized by this point\n if (!currentLayout) return;\n const itemIndex = currentLayout.findIndex(item => item.i === itemKey);\n // Should be present on the currentLayout by this point.\n if (itemIndex === -1) return;\n\n const oldItem = currentLayout[itemIndex];\n const newItem: Layout = {\n ...oldItem,\n // `Math.max` needed to avoid a glitch when moving left beyond the left edge\n w: Math.max(oldItem.minW || 2, oldItem.w + deltaW),\n h: Math.max(oldItem.minH || 2, oldItem.h + deltaH)\n };\n const newLayout = [\n ...currentLayout.slice(0, itemIndex),\n newItem,\n ...currentLayout.slice(itemIndex + 1)\n ];\n const newModel = { ...layoutModel, [breakpoint]: newLayout };\n onModelChange(!children || children.length === 0 ? undefined : newModel);\n },\n [breakpoint, children, currentLayout, layoutModel, onModelChange]\n );\n\n // Provide a way for the parent component to get layout-model on demand\n const [highlightedBG, setHighlightedBG] = useState(false);\n useImperativeHandle(\n handle,\n () => ({\n getLayoutModel: () => {\n // Without this check, we'll end up with the dummy model set up down below for this case\n if (!children || children.length === 0) return undefined;\n return layoutModel;\n },\n\n checkForGaps: () => {\n // On load when no items are added.\n if (!currentLayout) return true;\n const hasGaps = checkLayoutForGaps(currentLayout, numColumns);\n setHighlightedBG(hasGaps);\n return hasGaps;\n }\n }),\n [children, layoutModel, currentLayout, numColumns]\n );\n\n return (\n // Editor is always in LTR. At runtime, the layout is mirrored depending on locale.\n <StyledEditor ref={setWrapperEl} dir='ltr'>\n <ReactResizableStyles />\n <ReactGridLayoutStyles />\n\n {!!width && !!height && (\n <>\n <EditorBackground\n data-testid='editor'\n layout={currentLayout}\n numColumns={numColumns}\n rowHeight={rowHeight}\n rowsPerPage={numRowsPerPage}\n highlighted={highlightedBG}\n />\n\n <ResponsiveGridLayout\n {...commonGridConfig}\n width={width}\n rowHeight={rowHeight}\n onLayoutChange={onLayoutChange}\n resizeHandles={['s', 'e', 'n', 'w', 'sw', 'nw', 'se', 'ne']}\n resizeHandle={<ResizeHandle />}\n // To prevent drag event on the resize handles\n draggableCancel={`.${resizeHandleClassName}`}\n innerRef={setListEl}\n layouts={layoutModel}\n {...restProps}\n >\n {children?.sort(gridItemSorter).map(child => {\n const gridLayoutModel = layoutModel?.[breakpoint]?.filter(\n layout => layout.i === child.key\n );\n return (\n <EditorGridItem\n key={child.key}\n itemKey={child.key}\n data-grid={gridLayoutModel && gridLayoutModel[0]}\n itemLabel={itemLabelMap[child.key!] || ''}\n moveItem={moveItem}\n addOrSubtractItemSize={addOrSubtractItemSize}\n >\n {child}\n </EditorGridItem>\n );\n })}\n\n {(!children || children.length === 0) && (\n // Placeholder when no children. Needed to avoid exceptions:\n // https://github.com/react-grid-layout/react-grid-layout/issues/216\n <div key='--' data-grid={{ x: 0, y: 0, w: 1, h: 1, resizeHandles: [] }} />\n )}\n </ResponsiveGridLayout>\n </>\n )}\n </StyledEditor>\n );\n};\n\nexport default GridLayoutEditor;\n"]}
1
+ {"version":3,"file":"GridLayoutEditor.js","sourceRoot":"","sources":["../../../../src/components/PageTemplates/GridLayout/GridLayoutEditor.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n type FC,\n type ReactElement,\n type Ref,\n useCallback,\n useEffect,\n useImperativeHandle,\n useMemo,\n useState\n} from 'react';\nimport {\n Responsive as ResponsiveGridLayout,\n type Layout,\n type Layouts,\n type CoreProps\n} from 'react-grid-layout';\nimport styled, { css } from 'styled-components';\n\nimport Flex from '../../Flex';\nimport { useElement, useI18n } from '../../../hooks';\nimport { defaultThemeProp } from '../../../theme';\n\nimport useGridLayoutConfig, { type GridBreakPointWiseValues, type GridLayoutModel } from './config';\nimport EditorBackground from './EditorBackground';\nimport EditorGridItem, { ResizeHandle, resizeHandleClassName } from './EditorGridItem';\nimport {\n checkLayoutForGaps,\n getBreakpointAndCols,\n getRowHeight,\n useGridItemSorter,\n useMonitoredSize,\n type GridLayoutRowsProp\n} from './utils';\nimport ReactResizableStyles from './ReactResizableStyles';\nimport ReactGridLayoutStyles from './ReactGridLayoutStyles';\n\nconst StyledEditor = styled(Flex)(({ theme }) => {\n const {\n base: {\n palette: { interactive }\n }\n } = theme;\n return css`\n position: relative;\n\n /* Needed for the background grid to be visible */\n z-index: 0;\n block-size: 100%;\n overflow-y: auto;\n\n /* To minimize height triggers during dragging due to horizontal scrollbar showing up */\n overflow-x: hidden;\n\n .react-grid-item.react-grid-placeholder {\n background: ${interactive};\n opacity: 0.3;\n }\n `;\n});\nStyledEditor.defaultProps = defaultThemeProp;\n\nexport interface GridLayoutHandleValue {\n /** Used to get layout model with imperative handle. Returns the layout model from all breakpoints. Returns undefined when no children. */\n getLayoutModel: () => GridLayoutModel | undefined;\n\n /**\n * Returns a flag indicating whether there are any gaps in the current layout.\n * Highlights all background cells to indicate the same.\n */\n checkForGaps: () => boolean;\n}\n\n/** Props for GridLayoutEditor component */\nexport interface GridLayoutEditorProps {\n /**\n * Called whenever there's a change in the layoutModel.\n * Change-handler of the CONTROLLED COMPONENT\n */\n onModelChange: (newModel: GridLayoutModel | undefined) => void;\n\n /**\n * Value of the CONTROLLED component\n * Passed when editing a previously saved layout.\n * Can be `undefined` when no children.\n * It should be the same as the one emitted by `getLayoutModel` or `handle`\n */\n layoutModel: GridLayoutModel | undefined;\n\n /**\n * Breakpoints set on the Grid.\n * Needs to be aligned with `rows` and `cols`\n */\n breakpoints: GridBreakPointWiseValues;\n\n /**\n * # of rows to fit into the container height at each breakpoint (unless a fixed rowHeight is preferred)\n * rows should be aligned with `breakpoints` prop\n */\n rows: GridLayoutRowsProp;\n\n /**\n * Breakpoint-wise numColumns on the Grid.\n * cols should be aligned with `breakpoints` prop\n */\n cols: GridBreakPointWiseValues;\n\n /**\n * If parent DOM node of ResponsiveReactGridLayout or ReactGridLayout has \"transform: scale(n)\" css property,\n * we should set scale coefficient to avoid render artifacts while dragging.\n */\n transformScale?: CoreProps['transformScale'];\n\n /** Ref to access the editor state. Used to get the current layout-model when persisting it. */\n handle?: Ref<GridLayoutHandleValue>;\n\n /**\n * Child elements to be rendered as Grid items.\n * Each element should have a unique `key`\n * Memoize children for a better performance: https://github.com/react-grid-layout/react-grid-layout#performance\n * Set up an `itemLabel` prop with the text to call out when the item is focused.\n * If a child needs to be initialized with a specific x/y/w/h,\n * or if you want to specify any special properties like minW, minH, etc.,\n * set up a `data-grid` in layoutModel prop with any subset of properties\n * The prop can be undefined on init when no elements.\n */\n children?: ReactElement[];\n\n /** Item label mapped with item id for a11y */\n itemLabelMap: Record<string, string>;\n\n /**\n * Optional minimum row height (px) to override the built-in defaults.\n * Useful when grid items contain content that requires more vertical space\n * than the default minimum (e.g. compact SimpleValue insights).\n */\n minRowHeight?: number;\n}\n\n/**\n * Editor component to create Grid Layouts\n * @component\n */\nconst GridLayoutEditor: FC<GridLayoutEditorProps> = ({\n handle,\n children,\n layoutModel,\n rows,\n onModelChange,\n itemLabelMap,\n minRowHeight: minRowHeightProp,\n ...restProps\n}) => {\n // Track width changes: https://github.com/react-grid-layout/react-grid-layout#providing-grid-width\n const [wrapperEl, setWrapperEl] = useElement<HTMLElement>();\n const size = useMonitoredSize(wrapperEl);\n const width = size?.width;\n const height = size?.height;\n const commonGridConfig = useGridLayoutConfig(true);\n const t = useI18n();\n const { breakpoint, numColumns } = useMemo(\n () => getBreakpointAndCols(width || 0, restProps.breakpoints, restProps.cols),\n [width, restProps.breakpoints, restProps.cols]\n );\n const { rowHeight, numRowsPerPage } = useMemo(\n () =>\n getRowHeight(\n breakpoint,\n height || 0,\n commonGridConfig.margin[0],\n rows,\n layoutModel,\n minRowHeightProp\n ),\n [breakpoint, commonGridConfig.margin, height, rows, layoutModel, minRowHeightProp]\n );\n const currentLayout = useMemo(() => layoutModel?.[breakpoint], [breakpoint, layoutModel]);\n\n const onLayoutChange = useCallback(\n (curLayout: Layout[], allLayouts: Layouts) => {\n onModelChange(!children || children.length === 0 ? undefined : allLayouts);\n },\n [children, onModelChange]\n );\n\n // Callback to sort child DOM nodes to ensure an intuitive tabbing order\n const gridItemSorter = useGridItemSorter(currentLayout, numColumns);\n\n // Set up keyboard accessibility\n const [listEl, setListEl] = useElement<HTMLElement>();\n useEffect(() => {\n if (listEl) {\n listEl.setAttribute('role', 'list');\n listEl.setAttribute('tabindex', '0');\n listEl.setAttribute('aria-label', t('configurable_layout_instructions'));\n }\n }, [listEl, t]);\n\n const moveItem = useCallback(\n (itemKey: ReactElement['key'], deltaX: number, deltaY: number) => {\n // Should be initialized by this point\n if (!currentLayout) return;\n const itemIndex = currentLayout.findIndex(item => item.i === itemKey);\n // Should be present on the currentLayout by this point.\n if (itemIndex === -1) return;\n\n const oldItem = currentLayout[itemIndex];\n const newItem: Layout = {\n ...oldItem,\n // `Math.max` needed to avoid a glitch when moving left beyond the left edge\n x: Math.max(0, oldItem.x + deltaX),\n y: Math.max(0, oldItem.y + deltaY)\n };\n const newLayout = [\n ...currentLayout.slice(0, itemIndex),\n newItem,\n ...currentLayout.slice(itemIndex + 1)\n ];\n const newModel = { ...layoutModel, [breakpoint]: newLayout };\n onModelChange(!children || children.length === 0 ? undefined : newModel);\n },\n [breakpoint, children, currentLayout, layoutModel, onModelChange]\n );\n\n const addOrSubtractItemSize = useCallback(\n (itemKey: ReactElement['key'], deltaW: number, deltaH: number) => {\n // Should be initialized by this point\n if (!currentLayout) return;\n const itemIndex = currentLayout.findIndex(item => item.i === itemKey);\n // Should be present on the currentLayout by this point.\n if (itemIndex === -1) return;\n\n const oldItem = currentLayout[itemIndex];\n const newItem: Layout = {\n ...oldItem,\n // `Math.max` needed to avoid a glitch when moving left beyond the left edge\n w: Math.max(oldItem.minW || 2, oldItem.w + deltaW),\n h: Math.max(oldItem.minH || 2, oldItem.h + deltaH)\n };\n const newLayout = [\n ...currentLayout.slice(0, itemIndex),\n newItem,\n ...currentLayout.slice(itemIndex + 1)\n ];\n const newModel = { ...layoutModel, [breakpoint]: newLayout };\n onModelChange(!children || children.length === 0 ? undefined : newModel);\n },\n [breakpoint, children, currentLayout, layoutModel, onModelChange]\n );\n\n // Provide a way for the parent component to get layout-model on demand\n const [highlightedBG, setHighlightedBG] = useState(false);\n useImperativeHandle(\n handle,\n () => ({\n getLayoutModel: () => {\n // Without this check, we'll end up with the dummy model set up down below for this case\n if (!children || children.length === 0) return undefined;\n return layoutModel;\n },\n\n checkForGaps: () => {\n // On load when no items are added.\n if (!currentLayout) return true;\n const hasGaps = checkLayoutForGaps(currentLayout, numColumns);\n setHighlightedBG(hasGaps);\n return hasGaps;\n }\n }),\n [children, layoutModel, currentLayout, numColumns]\n );\n\n return (\n // Editor is always in LTR. At runtime, the layout is mirrored depending on locale.\n <StyledEditor ref={setWrapperEl} dir='ltr'>\n <ReactResizableStyles />\n <ReactGridLayoutStyles />\n\n {!!width && !!height && (\n <>\n <EditorBackground\n data-testid='editor'\n layout={currentLayout}\n numColumns={numColumns}\n rowHeight={rowHeight}\n rowsPerPage={numRowsPerPage}\n highlighted={highlightedBG}\n />\n\n <ResponsiveGridLayout\n {...commonGridConfig}\n width={width}\n rowHeight={rowHeight}\n onLayoutChange={onLayoutChange}\n resizeHandles={['s', 'e', 'n', 'w', 'sw', 'nw', 'se', 'ne']}\n resizeHandle={<ResizeHandle />}\n // To prevent drag event on the resize handles\n draggableCancel={`.${resizeHandleClassName}`}\n innerRef={setListEl}\n layouts={layoutModel}\n {...restProps}\n >\n {children?.sort(gridItemSorter).map(child => {\n const gridLayoutModel = layoutModel?.[breakpoint]?.filter(\n layout => layout.i === child.key\n );\n return (\n <EditorGridItem\n key={child.key}\n itemKey={child.key}\n data-grid={gridLayoutModel && gridLayoutModel[0]}\n itemLabel={itemLabelMap[child.key!] || ''}\n moveItem={moveItem}\n addOrSubtractItemSize={addOrSubtractItemSize}\n >\n {child}\n </EditorGridItem>\n );\n })}\n\n {(!children || children.length === 0) && (\n // Placeholder when no children. Needed to avoid exceptions:\n // https://github.com/react-grid-layout/react-grid-layout/issues/216\n <div key='--' data-grid={{ x: 0, y: 0, w: 1, h: 1, resizeHandles: [] }} />\n )}\n </ResponsiveGridLayout>\n </>\n )}\n </StyledEditor>\n );\n};\n\nexport default GridLayoutEditor;\n"]}
@@ -38,6 +38,12 @@ export interface GridLayoutViewerProps {
38
38
  * @default true
39
39
  */
40
40
  padContent?: boolean;
41
+ /**
42
+ * Optional minimum row height (px) to override the built-in defaults.
43
+ * Useful when grid items contain content that requires more vertical space
44
+ * than the default minimum (e.g. compact SimpleValue insights).
45
+ */
46
+ minRowHeight?: number;
41
47
  }
42
48
  /**
43
49
  * Viewer component for a Grid created using GridLayoutEditor
@@ -1 +1 @@
1
- {"version":3,"file":"GridLayoutViewer.d.ts","sourceRoot":"","sources":["../../../../src/components/PageTemplates/GridLayout/GridLayoutViewer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAc,KAAK,YAAY,EAAqB,MAAM,OAAO,CAAC;AAOlF,OAAO,KAAK,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE1E,OAAO,EAOL,KAAK,kBAAkB,EACxB,MAAM,SAAS,CAAC;AAwCjB,+CAA+C;AAC/C,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,WAAW,EAAE,eAAe,GAAG,SAAS,CAAC;IAEzC;;;OAGG;IACH,WAAW,EAAE,wBAAwB,CAAC;IAEtC;;;OAGG;IACH,IAAI,EAAE,kBAAkB,CAAC;IAEzB;;;OAGG;IACH,IAAI,EAAE,wBAAwB,CAAC;IAE/B,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAE1B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,QAAA,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CAkF/C,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"GridLayoutViewer.d.ts","sourceRoot":"","sources":["../../../../src/components/PageTemplates/GridLayout/GridLayoutViewer.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAc,KAAK,YAAY,EAAqB,MAAM,OAAO,CAAC;AAOlF,OAAO,KAAK,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE1E,OAAO,EAOL,KAAK,kBAAkB,EACxB,MAAM,SAAS,CAAC;AAwCjB,+CAA+C;AAC/C,MAAM,WAAW,qBAAqB;IACpC;;;;;OAKG;IACH,WAAW,EAAE,eAAe,GAAG,SAAS,CAAC;IAEzC;;;OAGG;IACH,WAAW,EAAE,wBAAwB,CAAC;IAEtC;;;OAGG;IACH,IAAI,EAAE,kBAAkB,CAAC;IAEzB;;;OAGG;IACH,IAAI,EAAE,wBAAwB,CAAC;IAE/B,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAE1B;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAE3B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,QAAA,MAAM,gBAAgB,EAAE,EAAE,CAAC,qBAAqB,CA2F/C,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -33,7 +33,7 @@ const ViewerGridItem = forwardRef(({ children, autoSize, direction, ...restProps
33
33
  * Viewer component for a Grid created using GridLayoutEditor
34
34
  * @component
35
35
  */
36
- const GridLayoutViewer = ({ children, layoutModel: layoutModelProp, rows, cols, autoSizeItemIDs = [], breakpoints, padContent = true }) => {
36
+ const GridLayoutViewer = ({ children, layoutModel: layoutModelProp, rows, cols, autoSizeItemIDs = [], breakpoints, padContent = true, minRowHeight: minRowHeightProp }) => {
37
37
  // Track width changes: https://github.com/react-grid-layout/react-grid-layout#providing-grid-width
38
38
  const [wrapperEl, setWrapperEl] = useElement();
39
39
  const size = useMonitoredSize(wrapperEl);
@@ -41,7 +41,7 @@ const GridLayoutViewer = ({ children, layoutModel: layoutModelProp, rows, cols,
41
41
  const height = size?.height;
42
42
  const commonGridConfig = useGridLayoutConfig(padContent);
43
43
  const { breakpoint, numColumns } = useMemo(() => getBreakpointAndCols(width || 0, breakpoints, cols), [width, breakpoints, cols]);
44
- const { rowHeight } = useMemo(() => getRowHeight(breakpoint, height || 0, commonGridConfig.margin[0], rows, layoutModelProp), [breakpoint, commonGridConfig.margin, height, rows, layoutModelProp]);
44
+ const { rowHeight } = useMemo(() => getRowHeight(breakpoint, height || 0, commonGridConfig.margin[0], rows, layoutModelProp, minRowHeightProp), [breakpoint, commonGridConfig.margin, height, rows, layoutModelProp, minRowHeightProp]);
45
45
  // On load, setting layoutModel based on the direction
46
46
  const { rtl } = useDirection();
47
47
  const layoutModel = useMemo(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"GridLayoutViewer.js","sourceRoot":"","sources":["../../../../src/components/PageTemplates/GridLayout/GridLayoutViewer.tsx"],"names":[],"mappings":"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","sourcesContent":["import { type FC, forwardRef, type ReactElement, type Ref, useMemo } from 'react';\nimport { Responsive as ResponsiveGridLayout } from 'react-grid-layout';\nimport styled, { css } from 'styled-components';\n\nimport Flex from '../../Flex';\nimport { useDirection, useElement } from '../../../hooks';\n\nimport type { GridBreakPointWiseValues, GridLayoutModel } from './config';\nimport useGridLayoutConfig from './config';\nimport {\n convertLtrToRtl,\n getBreakpointAndCols,\n getLastItemsInLayout,\n getRowHeight,\n useGridItemSorter,\n useMonitoredSize,\n type GridLayoutRowsProp\n} from './utils';\nimport ReactGridLayoutStyles from './ReactGridLayoutStyles';\n\nconst StyledWrapper = styled(Flex)`\n block-size: 100%;\n`;\n\nconst StyledEmptyFooter = styled.div`\n block-size: ${({ theme }) => `calc(${theme.base.spacing} * 2)`};\n`;\n\nconst StyledAutoSizeItem = styled(Flex)<{ autoSize: boolean }>(({ autoSize }) => {\n if (!autoSize) return '';\n return css`\n /* Overriding the inline style added by the RGL plugin. Needed to give the item a free height. */\n height: auto !important;\n\n /* Needed to maintain the extra gap at the bottom, since it's position absolute-ly */\n padding-bottom: 1rem;\n `;\n});\n\n/**\n * Wrapper on top of GridItems to forward ref, etc.\n * https://github.com/react-grid-layout/react-grid-layout#custom-child-components-and-draggable-handles\n */\nconst ViewerGridItem = forwardRef(\n ({ children, autoSize, direction, ...restProps }: any, ref: Ref<HTMLDivElement>) => (\n <StyledAutoSizeItem\n autoSize={autoSize}\n container={{ direction: 'column' }}\n ref={ref}\n {...restProps}\n dir={direction}\n >\n {children}\n </StyledAutoSizeItem>\n )\n);\n\n/** Props for the GridLayoutViewer component */\nexport interface GridLayoutViewerProps {\n /**\n * Layout-model saved previously from a GridLayoutEditor.\n * If undefined, the elements will be rendered in some default layout.\n * NOTE: A remount is needed if this layoutModel needs to be changed from the outside.\n * - The component reads it only once on load and populates layouts for missing breakpoints, assuming `lg` as the baseline\n */\n layoutModel: GridLayoutModel | undefined;\n\n /**\n * Breakpoints set on the Grid.\n * Needs to be aligned with `rows` and `cols`\n */\n breakpoints: GridBreakPointWiseValues;\n\n /**\n * # of rows to fit into the container height at each breakpoint (unless a fixed rowHeight is preferred)\n * rows should be aligned with `breakpoints` prop\n */\n rows: GridLayoutRowsProp;\n\n /**\n * Breakpoint-wise numColumns on the Grid.\n * cols should be aligned with `breakpoints` prop\n */\n cols: GridBreakPointWiseValues;\n\n /** Child elements to be rendered as Grid items. Each element should have a unique `key` */\n children?: ReactElement[];\n\n /**\n * List of items that needs to have free-flowing height.\n * NOTE: This works just for the items which don't have any other content underneath them.\n * By default, all items will have fixed heights derived from the `layoutModel` prop\n */\n autoSizeItemIDs?: string[];\n\n /**\n * Add container margin to viewer and runtime\n * @default true\n */\n padContent?: boolean;\n}\n\n/**\n * Viewer component for a Grid created using GridLayoutEditor\n * @component\n */\nconst GridLayoutViewer: FC<GridLayoutViewerProps> = ({\n children,\n layoutModel: layoutModelProp,\n rows,\n cols,\n autoSizeItemIDs = [],\n breakpoints,\n padContent = true\n}) => {\n // Track width changes: https://github.com/react-grid-layout/react-grid-layout#providing-grid-width\n const [wrapperEl, setWrapperEl] = useElement<HTMLElement>();\n const size = useMonitoredSize(wrapperEl);\n const width = size?.width;\n const height = size?.height;\n const commonGridConfig = useGridLayoutConfig(padContent);\n const { breakpoint, numColumns } = useMemo(\n () => getBreakpointAndCols(width || 0, breakpoints, cols),\n [width, breakpoints, cols]\n );\n const { rowHeight } = useMemo(\n () => getRowHeight(breakpoint, height || 0, commonGridConfig.margin[0], rows, layoutModelProp),\n [breakpoint, commonGridConfig.margin, height, rows, layoutModelProp]\n );\n\n // On load, setting layoutModel based on the direction\n const { rtl } = useDirection();\n const layoutModel = useMemo(() => {\n if (rtl && layoutModelProp) return convertLtrToRtl(layoutModelProp, cols);\n return layoutModelProp;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Callback to sort child DOM nodes to ensure an intuitive tabbing order\n const gridItemSorter = useGridItemSorter(layoutModelProp?.[breakpoint], numColumns);\n\n // Get list of last items in layout\n const lastItemsInLayout = useMemo(\n () => getLastItemsInLayout(layoutModel?.[breakpoint]),\n [breakpoint, layoutModel]\n );\n\n return (\n // Enforcing ltr here due to limitations of the RGL plugin.\n // The layout is mirrored using convertLtrToRtl above,\n // and then the direction is explicitly passed to items below.\n <StyledWrapper ref={setWrapperEl} dir='ltr'>\n <ReactGridLayoutStyles />\n\n {!!width && !!height && (\n <ResponsiveGridLayout\n {...commonGridConfig}\n width={width}\n rowHeight={Math.max(rowHeight, 50)}\n layouts={layoutModel}\n isResizable={false}\n isDraggable={false}\n isDroppable={false}\n cols={cols}\n breakpoints={breakpoints}\n >\n {children?.sort(gridItemSorter).map(child => {\n const autoSize =\n autoSizeItemIDs.includes(child.key!) && lastItemsInLayout.includes(child.key!);\n\n return (\n <ViewerGridItem key={child.key} autoSize={autoSize} direction={rtl ? 'rtl' : 'ltr'}>\n {child}\n </ViewerGridItem>\n );\n })}\n\n {(!children || children.length === 0) && (\n // Placeholder when no children. Needed to avoid exceptions:\n // https://github.com/react-grid-layout/react-grid-layout/issues/216\n <div key='--' />\n )}\n </ResponsiveGridLayout>\n )}\n {/** Removed container padding, hence adding extra space at bottom of grid */}\n <StyledEmptyFooter />\n </StyledWrapper>\n );\n};\n\nexport default GridLayoutViewer;\n"]}
1
+ {"version":3,"file":"GridLayoutViewer.js","sourceRoot":"","sources":["../../../../src/components/PageTemplates/GridLayout/GridLayoutViewer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAW,UAAU,EAA+B,OAAO,EAAE,MAAM,OAAO,CAAC;AAClF,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,IAAI,MAAM,YAAY,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG1D,OAAO,mBAAmB,MAAM,UAAU,CAAC;AAC3C,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,gBAAgB,EAEjB,MAAM,SAAS,CAAC;AACjB,OAAO,qBAAqB,MAAM,yBAAyB,CAAC;AAE5D,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;;CAEjC,CAAC;AAEF,MAAM,iBAAiB,GAAG,MAAM,CAAC,GAAG,CAAA;gBACpB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,OAAO,OAAO;CAC/D,CAAC;AAEF,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAwB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC9E,IAAI,CAAC,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzB,OAAO,GAAG,CAAA;;;;;;GAMT,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH;;;GAGG;AACH,MAAM,cAAc,GAAG,UAAU,CAC/B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,SAAS,EAAO,EAAE,GAAwB,EAAE,EAAE,CAAC,CAClF,KAAC,kBAAkB,IACjB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAClC,GAAG,EAAE,GAAG,KACJ,SAAS,EACb,GAAG,EAAE,SAAS,YAEb,QAAQ,GACU,CACtB,CACF,CAAC;AAsDF;;;GAGG;AACH,MAAM,gBAAgB,GAA8B,CAAC,EACnD,QAAQ,EACR,WAAW,EAAE,eAAe,EAC5B,IAAI,EACJ,IAAI,EACJ,eAAe,GAAG,EAAE,EACpB,WAAW,EACX,UAAU,GAAG,IAAI,EACjB,YAAY,EAAE,gBAAgB,EAC/B,EAAE,EAAE;IACH,mGAAmG;IACnG,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,UAAU,EAAe,CAAC;IAC5D,MAAM,IAAI,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC;IAC1B,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,CAAC;IAC5B,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,UAAU,CAAC,CAAC;IACzD,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,OAAO,CACxC,GAAG,EAAE,CAAC,oBAAoB,CAAC,KAAK,IAAI,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,EACzD,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAC3B,CAAC;IACF,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAC3B,GAAG,EAAE,CACH,YAAY,CACV,UAAU,EACV,MAAM,IAAI,CAAC,EACX,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAC1B,IAAI,EACJ,eAAe,EACf,gBAAgB,CACjB,EACH,CAAC,UAAU,EAAE,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,gBAAgB,CAAC,CACvF,CAAC;IAEF,sDAAsD;IACtD,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE;QAC/B,IAAI,GAAG,IAAI,eAAe;YAAE,OAAO,eAAe,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAC1E,OAAO,eAAe,CAAC;QACvB,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,wEAAwE;IACxE,MAAM,cAAc,GAAG,iBAAiB,CAAC,eAAe,EAAE,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;IAEpF,mCAAmC;IACnC,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE,CAAC,oBAAoB,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,CAAC,EACrD,CAAC,UAAU,EAAE,WAAW,CAAC,CAC1B,CAAC;IAEF,OAAO;IACL,2DAA2D;IAC3D,sDAAsD;IACtD,8DAA8D;IAC9D,MAAC,aAAa,IAAC,GAAG,EAAE,YAAY,EAAE,GAAG,EAAC,KAAK,aACzC,KAAC,qBAAqB,KAAG,EAExB,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,IAAI,CACtB,MAAC,oBAAoB,OACf,gBAAgB,EACpB,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,EAClC,OAAO,EAAE,WAAW,EACpB,WAAW,EAAE,KAAK,EAClB,WAAW,EAAE,KAAK,EAClB,WAAW,EAAE,KAAK,EAClB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,WAAW,aAEvB,QAAQ,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;wBAC1C,MAAM,QAAQ,GACZ,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAI,CAAC,IAAI,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAI,CAAC,CAAC;wBAEjF,OAAO,CACL,KAAC,cAAc,IAAiB,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,YAC/E,KAAK,IADa,KAAK,CAAC,GAAG,CAEb,CAClB,CAAC;oBACJ,CAAC,CAAC,EAED,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,IAAI;oBACvC,4DAA4D;oBAC5D,oEAAoE;oBACpE,gBAAS,IAAI,CAAG,CACjB,IACoB,CACxB,EAED,KAAC,iBAAiB,KAAG,IACP,CACjB,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC","sourcesContent":["import { type FC, forwardRef, type ReactElement, type Ref, useMemo } from 'react';\nimport { Responsive as ResponsiveGridLayout } from 'react-grid-layout';\nimport styled, { css } from 'styled-components';\n\nimport Flex from '../../Flex';\nimport { useDirection, useElement } from '../../../hooks';\n\nimport type { GridBreakPointWiseValues, GridLayoutModel } from './config';\nimport useGridLayoutConfig from './config';\nimport {\n convertLtrToRtl,\n getBreakpointAndCols,\n getLastItemsInLayout,\n getRowHeight,\n useGridItemSorter,\n useMonitoredSize,\n type GridLayoutRowsProp\n} from './utils';\nimport ReactGridLayoutStyles from './ReactGridLayoutStyles';\n\nconst StyledWrapper = styled(Flex)`\n block-size: 100%;\n`;\n\nconst StyledEmptyFooter = styled.div`\n block-size: ${({ theme }) => `calc(${theme.base.spacing} * 2)`};\n`;\n\nconst StyledAutoSizeItem = styled(Flex)<{ autoSize: boolean }>(({ autoSize }) => {\n if (!autoSize) return '';\n return css`\n /* Overriding the inline style added by the RGL plugin. Needed to give the item a free height. */\n height: auto !important;\n\n /* Needed to maintain the extra gap at the bottom, since it's position absolute-ly */\n padding-bottom: 1rem;\n `;\n});\n\n/**\n * Wrapper on top of GridItems to forward ref, etc.\n * https://github.com/react-grid-layout/react-grid-layout#custom-child-components-and-draggable-handles\n */\nconst ViewerGridItem = forwardRef(\n ({ children, autoSize, direction, ...restProps }: any, ref: Ref<HTMLDivElement>) => (\n <StyledAutoSizeItem\n autoSize={autoSize}\n container={{ direction: 'column' }}\n ref={ref}\n {...restProps}\n dir={direction}\n >\n {children}\n </StyledAutoSizeItem>\n )\n);\n\n/** Props for the GridLayoutViewer component */\nexport interface GridLayoutViewerProps {\n /**\n * Layout-model saved previously from a GridLayoutEditor.\n * If undefined, the elements will be rendered in some default layout.\n * NOTE: A remount is needed if this layoutModel needs to be changed from the outside.\n * - The component reads it only once on load and populates layouts for missing breakpoints, assuming `lg` as the baseline\n */\n layoutModel: GridLayoutModel | undefined;\n\n /**\n * Breakpoints set on the Grid.\n * Needs to be aligned with `rows` and `cols`\n */\n breakpoints: GridBreakPointWiseValues;\n\n /**\n * # of rows to fit into the container height at each breakpoint (unless a fixed rowHeight is preferred)\n * rows should be aligned with `breakpoints` prop\n */\n rows: GridLayoutRowsProp;\n\n /**\n * Breakpoint-wise numColumns on the Grid.\n * cols should be aligned with `breakpoints` prop\n */\n cols: GridBreakPointWiseValues;\n\n /** Child elements to be rendered as Grid items. Each element should have a unique `key` */\n children?: ReactElement[];\n\n /**\n * List of items that needs to have free-flowing height.\n * NOTE: This works just for the items which don't have any other content underneath them.\n * By default, all items will have fixed heights derived from the `layoutModel` prop\n */\n autoSizeItemIDs?: string[];\n\n /**\n * Add container margin to viewer and runtime\n * @default true\n */\n padContent?: boolean;\n\n /**\n * Optional minimum row height (px) to override the built-in defaults.\n * Useful when grid items contain content that requires more vertical space\n * than the default minimum (e.g. compact SimpleValue insights).\n */\n minRowHeight?: number;\n}\n\n/**\n * Viewer component for a Grid created using GridLayoutEditor\n * @component\n */\nconst GridLayoutViewer: FC<GridLayoutViewerProps> = ({\n children,\n layoutModel: layoutModelProp,\n rows,\n cols,\n autoSizeItemIDs = [],\n breakpoints,\n padContent = true,\n minRowHeight: minRowHeightProp\n}) => {\n // Track width changes: https://github.com/react-grid-layout/react-grid-layout#providing-grid-width\n const [wrapperEl, setWrapperEl] = useElement<HTMLElement>();\n const size = useMonitoredSize(wrapperEl);\n const width = size?.width;\n const height = size?.height;\n const commonGridConfig = useGridLayoutConfig(padContent);\n const { breakpoint, numColumns } = useMemo(\n () => getBreakpointAndCols(width || 0, breakpoints, cols),\n [width, breakpoints, cols]\n );\n const { rowHeight } = useMemo(\n () =>\n getRowHeight(\n breakpoint,\n height || 0,\n commonGridConfig.margin[0],\n rows,\n layoutModelProp,\n minRowHeightProp\n ),\n [breakpoint, commonGridConfig.margin, height, rows, layoutModelProp, minRowHeightProp]\n );\n\n // On load, setting layoutModel based on the direction\n const { rtl } = useDirection();\n const layoutModel = useMemo(() => {\n if (rtl && layoutModelProp) return convertLtrToRtl(layoutModelProp, cols);\n return layoutModelProp;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Callback to sort child DOM nodes to ensure an intuitive tabbing order\n const gridItemSorter = useGridItemSorter(layoutModelProp?.[breakpoint], numColumns);\n\n // Get list of last items in layout\n const lastItemsInLayout = useMemo(\n () => getLastItemsInLayout(layoutModel?.[breakpoint]),\n [breakpoint, layoutModel]\n );\n\n return (\n // Enforcing ltr here due to limitations of the RGL plugin.\n // The layout is mirrored using convertLtrToRtl above,\n // and then the direction is explicitly passed to items below.\n <StyledWrapper ref={setWrapperEl} dir='ltr'>\n <ReactGridLayoutStyles />\n\n {!!width && !!height && (\n <ResponsiveGridLayout\n {...commonGridConfig}\n width={width}\n rowHeight={Math.max(rowHeight, 50)}\n layouts={layoutModel}\n isResizable={false}\n isDraggable={false}\n isDroppable={false}\n cols={cols}\n breakpoints={breakpoints}\n >\n {children?.sort(gridItemSorter).map(child => {\n const autoSize =\n autoSizeItemIDs.includes(child.key!) && lastItemsInLayout.includes(child.key!);\n\n return (\n <ViewerGridItem key={child.key} autoSize={autoSize} direction={rtl ? 'rtl' : 'ltr'}>\n {child}\n </ViewerGridItem>\n );\n })}\n\n {(!children || children.length === 0) && (\n // Placeholder when no children. Needed to avoid exceptions:\n // https://github.com/react-grid-layout/react-grid-layout/issues/216\n <div key='--' />\n )}\n </ResponsiveGridLayout>\n )}\n {/** Removed container padding, hence adding extra space at bottom of grid */}\n <StyledEmptyFooter />\n </StyledWrapper>\n );\n};\n\nexport default GridLayoutViewer;\n"]}
@@ -41,9 +41,10 @@ export type GridLayoutRowsProp = Partial<Record<GridBreakPoint, {
41
41
  * @param gap - Gutter size in pixels
42
42
  * @param rows - Rows configuration
43
43
  * @param layoutModel - Breakpoint-wise layout model
44
+ * @param minRowHeightOverride - Optional minimum row height (px) that overrides the built-in defaults
44
45
  * @returns Row height in pixels
45
46
  */
46
- export declare const getRowHeight: (breakpoint: GridBreakPoint, parentHeight: number, gap: number, rows: GridLayoutRowsProp, layoutModel: GridLayoutModel | undefined) => {
47
+ export declare const getRowHeight: (breakpoint: GridBreakPoint, parentHeight: number, gap: number, rows: GridLayoutRowsProp, layoutModel: GridLayoutModel | undefined, minRowHeightOverride?: number) => {
47
48
  rowHeight: number;
48
49
  numRowsPerPage: number | null;
49
50
  };
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/components/PageTemplates/GridLayout/utils.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAwB,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,mBAAmB,CAAC;AAK5D,OAAa,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE1F;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,gBAAgB,MAAM,EAAE,EAAE,aAAa,MAAM,SAuBvE,YAAY,KAAK,YAAY,KAAG,MAiBvC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,MAAM,EACb,aAAa,wBAAwB,EACrC,MAAM,wBAAwB;;;CAS/B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CACtC,MAAM,CACJ,cAAc,EACZ;IACE,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;CACnB,CACJ,CACF,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,GACvB,YAAY,cAAc,EAC1B,cAAc,MAAM,EACpB,KAAK,MAAM,EACX,MAAM,kBAAkB,EACxB,aAAa,eAAe,GAAG,SAAS,KACvC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAuBpD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,MAAM,EAAE,EAAE,YAAY,MAAM,KAAG,OAczE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,SAAS,WAAW,GAAG,IAAI,EAC3B,cAAW,KACV,eAAe,GAAG,IAkBpB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,WAAW,OAAO,aAShF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,WAAW,EACpE,KAAK,CAAC,EACN,MAAM,CAAC,KAEN,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAEjC,CAAC;AAQF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,+BAA+B,CAAC,OAAO,CAAC,SAAS,CAAC,CASjF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,QAAQ,MAAM,EAAE,GAAG,SAAS,aAmBhE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,eAAe,EAAE,MAAM,wBAAwB,8CActF,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/components/PageTemplates/GridLayout/utils.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAwB,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,KAAK,MAAM,EAAc,MAAM,mBAAmB,CAAC;AAK5D,OAAa,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAC;AAEtE,OAAO,KAAK,EAAE,cAAc,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAE1F;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,gBAAgB,MAAM,EAAE,EAAE,aAAa,MAAM,SAuBvE,YAAY,KAAK,YAAY,KAAG,MAiBvC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,MAAM,EACb,aAAa,wBAAwB,EACrC,MAAM,wBAAwB;;;CAS/B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,OAAO,CACtC,MAAM,CACJ,cAAc,EACZ;IACE,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;CACnB,CACJ,CACF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,GACvB,YAAY,cAAc,EAC1B,cAAc,MAAM,EACpB,KAAK,MAAM,EACX,MAAM,kBAAkB,EACxB,aAAa,eAAe,GAAG,SAAS,EACxC,uBAAuB,MAAM,KAC5B;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;CAuBpD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,MAAM,EAAE,EAAE,YAAY,MAAM,KAAG,OAczE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAC3B,SAAS,WAAW,GAAG,IAAI,EAC3B,cAAW,KACV,eAAe,GAAG,IAkBpB,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,MAAM,EAAE,OAAO,MAAM,EAAE,WAAW,OAAO,aAShF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,WAAW,EACpE,KAAK,CAAC,EACN,MAAM,CAAC,KAEN,GAAG,IAAI,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,CAAC,CAEjC,CAAC;AAQF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,+BAA+B,CAAC,OAAO,CAAC,SAAS,CAAC,CASjF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,QAAQ,MAAM,EAAE,GAAG,SAAS,aAmBhE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,eAAe,EAAE,MAAM,wBAAwB,8CActF,CAAC"}