@cloudscape-design/components 3.0.607 → 3.0.609

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 (79) hide show
  1. package/annotation-context/annotation/styles.css.js +24 -24
  2. package/annotation-context/annotation/styles.scoped.css +30 -30
  3. package/annotation-context/annotation/styles.selectors.js +24 -24
  4. package/app-layout/classic.d.ts +9 -3
  5. package/app-layout/classic.d.ts.map +1 -1
  6. package/app-layout/classic.js +26 -25
  7. package/app-layout/classic.js.map +1 -1
  8. package/app-layout/implementation.d.ts +9 -3
  9. package/app-layout/implementation.d.ts.map +1 -1
  10. package/app-layout/index.d.ts.map +1 -1
  11. package/app-layout/index.js +6 -4
  12. package/app-layout/index.js.map +1 -1
  13. package/app-layout/interfaces.d.ts +9 -1
  14. package/app-layout/interfaces.d.ts.map +1 -1
  15. package/app-layout/interfaces.js.map +1 -1
  16. package/app-layout/internal.d.ts +9 -3
  17. package/app-layout/internal.d.ts.map +1 -1
  18. package/app-layout/notifications/styles.css.js +3 -3
  19. package/app-layout/notifications/styles.scoped.css +7 -7
  20. package/app-layout/notifications/styles.selectors.js +3 -3
  21. package/app-layout/utils/use-app-layout-placement.d.ts +9 -0
  22. package/app-layout/utils/use-app-layout-placement.d.ts.map +1 -0
  23. package/app-layout/utils/use-app-layout-placement.js +29 -0
  24. package/app-layout/utils/use-app-layout-placement.js.map +1 -0
  25. package/app-layout/visual-refresh/context.d.ts.map +1 -1
  26. package/app-layout/visual-refresh/context.js +10 -41
  27. package/app-layout/visual-refresh/context.js.map +1 -1
  28. package/app-layout/visual-refresh/index.d.ts +9 -3
  29. package/app-layout/visual-refresh/index.d.ts.map +1 -1
  30. package/app-layout/visual-refresh/styles.css.js +81 -81
  31. package/app-layout/visual-refresh/styles.scoped.css +275 -286
  32. package/app-layout/visual-refresh/styles.selectors.js +81 -81
  33. package/app-layout/visual-refresh/tools.d.ts.map +1 -1
  34. package/app-layout/visual-refresh/tools.js +2 -9
  35. package/app-layout/visual-refresh/tools.js.map +1 -1
  36. package/content-layout/styles.css.js +7 -7
  37. package/content-layout/styles.scoped.css +13 -15
  38. package/content-layout/styles.selectors.js +7 -7
  39. package/flashbar/styles.css.js +47 -47
  40. package/flashbar/styles.scoped.css +171 -171
  41. package/flashbar/styles.selectors.js +47 -47
  42. package/form-field/internal.d.ts.map +1 -1
  43. package/form-field/internal.js +10 -6
  44. package/form-field/internal.js.map +1 -1
  45. package/internal/components/dropdown/styles.css.js +20 -20
  46. package/internal/components/dropdown/styles.scoped.css +39 -39
  47. package/internal/components/dropdown/styles.selectors.js +20 -20
  48. package/internal/environment.js +1 -1
  49. package/internal/environment.json +1 -1
  50. package/internal/generated/custom-css-properties/index.d.ts.map +1 -1
  51. package/internal/generated/custom-css-properties/index.js +44 -46
  52. package/internal/generated/custom-css-properties/index.js.map +1 -1
  53. package/internal/manifest.json +1 -1
  54. package/internal/utils/handle-key.d.ts +15 -11
  55. package/internal/utils/handle-key.d.ts.map +1 -1
  56. package/internal/utils/handle-key.js +9 -9
  57. package/internal/utils/handle-key.js.map +1 -1
  58. package/package.json +1 -1
  59. package/spinner/styles.css.js +13 -13
  60. package/spinner/styles.scoped.css +39 -39
  61. package/spinner/styles.selectors.js +13 -13
  62. package/test-utils/dom/app-layout/index.d.ts +1 -0
  63. package/test-utils/dom/app-layout/index.js +4 -0
  64. package/test-utils/dom/app-layout/index.js.map +1 -1
  65. package/test-utils/selectors/app-layout/index.d.ts +1 -0
  66. package/test-utils/selectors/app-layout/index.js +4 -0
  67. package/test-utils/selectors/app-layout/index.js.map +1 -1
  68. package/test-utils/tsconfig.tsbuildinfo +1 -1
  69. package/wizard/styles.css.js +32 -32
  70. package/wizard/styles.scoped.css +68 -68
  71. package/wizard/styles.selectors.js +32 -32
  72. package/app-layout/utils/use-app-layout-rect.d.ts +0 -8
  73. package/app-layout/utils/use-app-layout-rect.d.ts.map +0 -1
  74. package/app-layout/utils/use-app-layout-rect.js +0 -24
  75. package/app-layout/utils/use-app-layout-rect.js.map +0 -1
  76. package/app-layout/utils/use-content-height.d.ts +0 -8
  77. package/app-layout/utils/use-content-height.d.ts.map +0 -1
  78. package/app-layout/utils/use-content-height.js +0 -25
  79. package/app-layout/utils/use-content-height.js.map +0 -1
@@ -10,7 +10,6 @@ import { getSplitPanelDefaultSize } from '../../split-panel/utils/size-utils';
10
10
  import { getSplitPanelPosition } from './split-panel';
11
11
  import { useControllable } from '../../internal/hooks/use-controllable';
12
12
  import { useSplitPanelFocusControl } from '../utils/use-split-panel-focus-control';
13
- import { useObservedElement } from '../utils/use-observed-element';
14
13
  import { useMobile } from '../../internal/hooks/use-mobile';
15
14
  import { useStableCallback } from '@cloudscape-design/component-toolkit/internal';
16
15
  import useResize from '../utils/use-resize';
@@ -35,7 +34,7 @@ export function useAppLayoutInternals() {
35
34
  }
36
35
  export const AppLayoutInternalsProvider = React.forwardRef((props, forwardRef) => {
37
36
  var _a, _b, _c, _d, _e;
38
- const { toolsHide, toolsOpen: controlledToolsOpen, navigationHide, navigationOpen, contentType, headerSelector, footerSelector, children, splitPanel, } = props;
37
+ const { toolsHide, toolsOpen: controlledToolsOpen, navigationHide, navigationOpen, contentType, placement, children, splitPanel, } = props;
39
38
  const isMobile = useMobile();
40
39
  // Private API for embedded view mode
41
40
  const __embeddedViewMode = Boolean(props.__embeddedViewMode);
@@ -74,12 +73,6 @@ export const AppLayoutInternalsProvider = React.forwardRef((props, forwardRef) =
74
73
  !skipFocusControl && focusToolsButtons();
75
74
  fireNonCancelableEvent(props.onToolsChange, { open: isOpen });
76
75
  }, [props.onToolsChange, setIsToolsOpen, focusToolsButtons]);
77
- /**
78
- * Query the DOM for the header and footer elements based on the selectors provided
79
- * by the properties and pass the heights to the custom property definitions.
80
- */
81
- const headerHeight = useObservedElement(headerSelector);
82
- const footerHeight = useObservedElement(footerSelector);
83
76
  /**
84
77
  * Set the default values for the minimum and maximum Split Panel width when it is
85
78
  * in the side position. The useLayoutEffect will compute the available space in the
@@ -130,11 +123,8 @@ export const AppLayoutInternalsProvider = React.forwardRef((props, forwardRef) =
130
123
  * minimum width exceeds this value then there is not enough horizontal space and we must
131
124
  * force it to the bottom position.
132
125
  */
133
- const [isSplitPanelForcedPosition, setSplitPanelForcedPosition] = useState(false);
126
+ const isSplitPanelForcedPosition = isMobile || SPLIT_PANEL_MIN_WIDTH > splitPanelMaxWidth;
134
127
  const splitPanelPosition = getSplitPanelPosition(isSplitPanelForcedPosition, splitPanelPreferences);
135
- useLayoutEffect(function handleSplitPanelForcePosition() {
136
- setSplitPanelForcedPosition(SPLIT_PANEL_MIN_WIDTH > splitPanelMaxWidth);
137
- }, [splitPanelMaxWidth]);
138
128
  /**
139
129
  * The useControllable hook will set the default size of the SplitPanel based
140
130
  * on the default position set in the splitPanelPreferences. The logic for the
@@ -199,23 +189,7 @@ export const AppLayoutInternalsProvider = React.forwardRef((props, forwardRef) =
199
189
  (!toolsHide && isToolsOpen) ||
200
190
  (splitPanelDisplayed && splitPanelPosition === 'side' && isSplitPanelOpen);
201
191
  const hasDrawerViewportOverlay = isMobile && (!!activeDrawerId || (!navigationHide && navigationOpen) || (!toolsHide && isToolsOpen));
202
- /**
203
- * The Layout element is not necessarily synonymous with the client
204
- * viewport width. There can be content in the horizontal viewport
205
- * that exists on either side of the AppLayout. This resize observer
206
- * will set the custom property of the Layout element width that
207
- * is used for various horizontal constraints such as the maximum
208
- * allowed width of the Tools container.
209
- *
210
- * The offsetLeft of the Main will return the distance that the
211
- * Main element has from the left edge of the Layout component.
212
- * The offsetLeft value can vary based on the presence and state
213
- * of the Navigation as well as content gaps in the grid definition.
214
- * This value is used to determine the max width constraint calculation
215
- * for the Tools container.
216
- */
217
- const [layoutContainerQuery, layoutElement] = useContainerQuery(rect => rect.contentBoxWidth);
218
- const layoutWidth = layoutContainerQuery !== null && layoutContainerQuery !== void 0 ? layoutContainerQuery : 0;
192
+ const layoutElement = useRef(null);
219
193
  const mainElement = useRef(null);
220
194
  const [mainOffsetLeft, setMainOffsetLeft] = useState(0);
221
195
  const { hasBackgroundOverlap, updateBackgroundOverlapHeight } = useBackgroundOverlap({
@@ -226,7 +200,7 @@ export const AppLayoutInternalsProvider = React.forwardRef((props, forwardRef) =
226
200
  useLayoutEffect(function handleMainOffsetLeft() {
227
201
  var _a, _b;
228
202
  setMainOffsetLeft((_b = (_a = mainElement === null || mainElement === void 0 ? void 0 : mainElement.current) === null || _a === void 0 ? void 0 : _a.offsetLeft) !== null && _b !== void 0 ? _b : 0);
229
- }, [layoutWidth, navigationOpen, isToolsOpen, splitPanelReportedSize]);
203
+ }, [placement.width, navigationOpen, isToolsOpen, splitPanelReportedSize]);
230
204
  /**
231
205
  * On mobile viewports the navigation and tools drawers are adjusted to a fixed position
232
206
  * that consumes 100% of the viewport height and width. The body content could potentially
@@ -265,7 +239,7 @@ export const AppLayoutInternalsProvider = React.forwardRef((props, forwardRef) =
265
239
  * the SplitPanel component. Ignore the SplitPanel if it is not in the bottom
266
240
  * position. Use the size property if it is open and the header height if it is closed.
267
241
  */
268
- let offsetBottom = footerHeight;
242
+ let offsetBottom = placement.bottom;
269
243
  if (splitPanelDisplayed && splitPanelPosition === 'bottom') {
270
244
  if (isSplitPanelOpen) {
271
245
  offsetBottom += splitPanelReportedSize;
@@ -306,20 +280,20 @@ export const AppLayoutInternalsProvider = React.forwardRef((props, forwardRef) =
306
280
  }
307
281
  return isToolsOpen ? toolsWidth : 0;
308
282
  };
309
- setSplitPanelMaxWidth(layoutWidth -
283
+ setSplitPanelMaxWidth(placement.width -
310
284
  mainOffsetLeft -
311
285
  minContentWidth -
312
286
  contentGapRight -
313
287
  toolsFormOffsetWidth -
314
288
  getPanelOffsetWidth());
315
- setDrawersMaxWidth(layoutWidth - mainOffsetLeft - minContentWidth - contentGapRight - toolsFormOffsetWidth);
289
+ setDrawersMaxWidth(placement.width - mainOffsetLeft - minContentWidth - contentGapRight - toolsFormOffsetWidth);
316
290
  }, [
317
291
  activeDrawerId,
318
292
  drawerSize,
319
293
  drawers,
320
294
  navigationOpen,
321
295
  isToolsOpen,
322
- layoutWidth,
296
+ placement.width,
323
297
  mainOffsetLeft,
324
298
  minContentWidth,
325
299
  toolsWidth,
@@ -366,10 +340,7 @@ export const AppLayoutInternalsProvider = React.forwardRef((props, forwardRef) =
366
340
  drawerSize,
367
341
  drawerRef,
368
342
  resizeHandle,
369
- drawersTriggerCount,
370
- headerHeight,
371
- footerHeight,
372
- hasDrawerViewportOverlay,
343
+ drawersTriggerCount, headerHeight: placement.top, footerHeight: placement.bottom, hasDrawerViewportOverlay,
373
344
  handleDrawersClick,
374
345
  handleNavigationClick,
375
346
  handleSplitPanelClick,
@@ -383,9 +354,7 @@ export const AppLayoutInternalsProvider = React.forwardRef((props, forwardRef) =
383
354
  isSplitPanelForcedPosition,
384
355
  isSplitPanelOpen,
385
356
  isToolsOpen,
386
- layoutElement,
387
- layoutWidth,
388
- loseToolsFocus,
357
+ layoutElement, layoutWidth: placement.width, loseToolsFocus,
389
358
  loseDrawersFocus,
390
359
  mainElement,
391
360
  mainOffsetLeft,
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../src/app-layout/visual-refresh/context.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, {\n createContext,\n useCallback,\n useEffect,\n useLayoutEffect,\n useImperativeHandle,\n useRef,\n useState,\n useContext,\n} from 'react';\nimport { AppLayoutContext } from '../../internal/context/app-layout-context';\nimport { DynamicOverlapContext } from '../../internal/context/dynamic-overlap-context';\nimport { AppLayoutProps, AppLayoutPropsWithDefaults } from '../interfaces';\nimport { fireNonCancelableEvent } from '../../internal/events';\nimport { FocusControlRefs, useFocusControl } from '../utils/use-focus-control';\nimport { getSplitPanelDefaultSize } from '../../split-panel/utils/size-utils';\nimport { getSplitPanelPosition } from './split-panel';\nimport { useControllable } from '../../internal/hooks/use-controllable';\nimport { SplitPanelFocusControlRefs, useSplitPanelFocusControl } from '../utils/use-split-panel-focus-control';\nimport { SplitPanelSideToggleProps } from '../../internal/context/split-panel-context';\nimport { useObservedElement } from '../utils/use-observed-element';\nimport { useMobile } from '../../internal/hooks/use-mobile';\nimport { useStableCallback } from '@cloudscape-design/component-toolkit/internal';\nimport useResize from '../utils/use-resize';\nimport styles from './styles.css.js';\nimport { useContainerQuery } from '@cloudscape-design/component-toolkit';\nimport useBackgroundOverlap from './use-background-overlap';\nimport { useDrawers } from '../utils/use-drawers';\nimport { useUniqueId } from '../../internal/hooks/use-unique-id';\nimport { SPLIT_PANEL_MIN_WIDTH } from '../split-panel';\n\ninterface AppLayoutInternals extends AppLayoutPropsWithDefaults {\n activeDrawerId: string | null;\n drawers: Array<AppLayoutProps.Drawer> | undefined;\n drawersAriaLabel: string | undefined;\n drawersOverflowAriaLabel: string | undefined;\n drawersOverflowWithBadgeAriaLabel: string | undefined;\n drawersRefs: FocusControlRefs;\n drawerSize: number;\n drawersMinWidth: number;\n drawersMaxWidth: number;\n drawerRef: React.Ref<HTMLElement>;\n resizeHandle: React.ReactElement;\n drawersTriggerCount: number;\n handleDrawersClick: (activeDrawerId: string | null, skipFocusControl?: boolean) => void;\n handleSplitPanelClick: () => void;\n handleNavigationClick: (isOpen: boolean) => void;\n handleSplitPanelPreferencesChange: (detail: AppLayoutProps.SplitPanelPreferences) => void;\n handleSplitPanelResize: (newSize: number) => void;\n handleToolsClick: (value: boolean, skipFocusControl?: boolean) => void;\n hasBackgroundOverlap: boolean;\n hasDrawerViewportOverlay: boolean;\n hasNotificationsContent: boolean;\n hasOpenDrawer?: boolean;\n hasStickyBackground: boolean;\n isBackgroundOverlapDisabled: boolean;\n isMobile: boolean;\n isSplitPanelForcedPosition: boolean;\n isSplitPanelOpen?: boolean;\n isToolsOpen: boolean;\n layoutElement: React.Ref<HTMLElement>;\n layoutWidth: number;\n loseToolsFocus: () => void;\n loseDrawersFocus: () => void;\n mainElement: React.Ref<HTMLDivElement>;\n mainOffsetLeft: number;\n navigationRefs: FocusControlRefs;\n notificationsElement: React.Ref<HTMLDivElement>;\n notificationsHeight: number;\n offsetBottom: number;\n setHasStickyBackground: (value: boolean) => void;\n setSplitPanelReportedSize: (value: number) => void;\n setSplitPanelReportedHeaderHeight: (value: number) => void;\n headerHeight: number;\n footerHeight: number;\n splitPanelControlId: string;\n splitPanelMaxWidth: number;\n splitPanelPosition: AppLayoutProps.SplitPanelPosition;\n splitPanelReportedSize: number;\n splitPanelReportedHeaderHeight: number;\n splitPanelToggle: SplitPanelSideToggleProps;\n setSplitPanelToggle: (toggle: SplitPanelSideToggleProps) => void;\n splitPanelDisplayed: boolean;\n splitPanelRefs: SplitPanelFocusControlRefs;\n toolsControlId: string;\n toolsRefs: FocusControlRefs;\n __embeddedViewMode?: boolean;\n}\n\n/**\n * The default values are destructured in the context instantiation to\n * prevent downstream Typescript errors. This could likely be replaced\n * by a context interface definition that extends the AppLayout interface.\n */\nconst AppLayoutInternalsContext = createContext<AppLayoutInternals | null>(null);\n\ninterface AppLayoutProviderInternalsProps extends AppLayoutPropsWithDefaults {\n children: React.ReactNode;\n}\n\nexport function useAppLayoutInternals() {\n const ctx = useContext(AppLayoutInternalsContext);\n if (!ctx) {\n throw new Error('Invariant violation: this context is only available inside app layout');\n }\n return ctx;\n}\n\nexport const AppLayoutInternalsProvider = React.forwardRef(\n (props: AppLayoutProviderInternalsProps, forwardRef: React.Ref<AppLayoutProps.Ref>) => {\n const {\n toolsHide,\n toolsOpen: controlledToolsOpen,\n navigationHide,\n navigationOpen,\n contentType,\n headerSelector,\n footerSelector,\n children,\n splitPanel,\n } = props;\n const isMobile = useMobile();\n\n // Private API for embedded view mode\n const __embeddedViewMode = Boolean((props as any).__embeddedViewMode);\n\n const [hasStickyBackground, setHasStickyBackground] = useState(false);\n\n /**\n * Set the default values for minimum and maximum content width.\n */\n const geckoMaxCssLength = ((1 << 30) - 1) / 60;\n const halfGeckoMaxCssLength = geckoMaxCssLength / 2;\n // CSS lengths in Gecko are limited to at most (1<<30)-1 app units (Gecko uses 60 as app unit).\n // Limit the maxContentWidth to the half of the upper boundary (≈4230^2) to be on the safe side.\n const maxContentWidth =\n props.maxContentWidth && props.maxContentWidth > halfGeckoMaxCssLength\n ? halfGeckoMaxCssLength\n : props.maxContentWidth ?? 0;\n const minContentWidth = props.minContentWidth ?? 280;\n\n const { refs: navigationRefs, setFocus: focusNavButtons } = useFocusControl(navigationOpen);\n\n const handleNavigationClick = useStableCallback(function handleNavigationChange(isOpen: boolean) {\n focusNavButtons();\n fireNonCancelableEvent(props.onNavigationChange, { open: isOpen });\n });\n\n useEffect(() => {\n // Close navigation drawer on mobile so that the main content is visible\n if (isMobile) {\n handleNavigationClick(false);\n }\n }, [isMobile, handleNavigationClick]);\n\n const toolsWidth = props.toolsWidth;\n const [isToolsOpen = false, setIsToolsOpen] = useControllable(controlledToolsOpen, props.onToolsChange, false, {\n componentName: 'AppLayout',\n controlledProp: 'toolsOpen',\n changeHandler: 'onToolsChange',\n });\n\n const {\n refs: toolsRefs,\n setFocus: focusToolsButtons,\n loseFocus: loseToolsFocus,\n } = useFocusControl(isToolsOpen, true);\n\n const handleToolsClick = useCallback(\n function handleToolsChange(isOpen: boolean, skipFocusControl?: boolean) {\n setIsToolsOpen(isOpen);\n !skipFocusControl && focusToolsButtons();\n fireNonCancelableEvent(props.onToolsChange, { open: isOpen });\n },\n [props.onToolsChange, setIsToolsOpen, focusToolsButtons]\n );\n\n /**\n * Query the DOM for the header and footer elements based on the selectors provided\n * by the properties and pass the heights to the custom property definitions.\n */\n const headerHeight = useObservedElement(headerSelector);\n const footerHeight = useObservedElement(footerSelector);\n\n /**\n * Set the default values for the minimum and maximum Split Panel width when it is\n * in the side position. The useLayoutEffect will compute the available space in the\n * DOM for the Split Panel given the current state. The minimum and maximum\n * widths will potentially trigger a side effect that will put the Split Panel into\n * a forced position on the bottom.\n */\n const [splitPanelMaxWidth, setSplitPanelMaxWidth] = useState(SPLIT_PANEL_MIN_WIDTH);\n\n /**\n * The useControllable hook will set the default value and manage either\n * the controlled or uncontrolled state of the Split Panel. By default\n * the Split Panel should always be closed on page load.\n *\n * The callback that will be passed to the SplitPanel component\n * to handle the click events that will change the state of the SplitPanel\n * to open or closed given the current state. It will set the isSplitPanelOpen\n * controlled state and fire the onSplitPanelToggle event.\n */\n const [isSplitPanelOpen, setIsSplitPanelOpen] = useControllable(\n props.splitPanelOpen,\n props.onSplitPanelToggle,\n false,\n { componentName: 'AppLayout', controlledProp: 'splitPanelOpen', changeHandler: 'onSplitPanelToggle' }\n );\n\n /**\n * The useControllable hook will manage the controlled or uncontrolled\n * state of the splitPanelPreferences. By default the splitPanelPreferences\n * is undefined. When set the object shape should have a single key to indicate\n * either bottom or side position.\n *\n * The callback that will handle changes to the splitPanelPreferences\n * object that will determine if the SplitPanel is rendered either on the\n * bottom of the viewport or within the Tools container.\n */\n const [splitPanelPreferences, setSplitPanelPreferences] = useControllable(\n props.splitPanelPreferences,\n props.onSplitPanelPreferencesChange,\n undefined,\n {\n componentName: 'AppLayout',\n controlledProp: 'splitPanelPreferences',\n changeHandler: 'onSplitPanelPreferencesChange',\n }\n );\n\n const { refs: splitPanelRefs, setLastInteraction: setSplitPanelLastInteraction } = useSplitPanelFocusControl([\n splitPanelPreferences,\n isSplitPanelOpen,\n ]);\n\n const handleSplitPanelClick = useCallback(\n function handleSplitPanelChange() {\n setIsSplitPanelOpen(!isSplitPanelOpen);\n setSplitPanelLastInteraction({ type: isSplitPanelOpen ? 'close' : 'open' });\n fireNonCancelableEvent(props.onSplitPanelToggle, { open: !isSplitPanelOpen });\n },\n [props.onSplitPanelToggle, isSplitPanelOpen, setIsSplitPanelOpen, setSplitPanelLastInteraction]\n );\n\n /**\n * The Split Panel will be in forced (bottom) position if the defined minimum width is\n * greater than the maximum width. In other words, the maximum width is the currently\n * available horizontal space based on all other components that are rendered. If the\n * minimum width exceeds this value then there is not enough horizontal space and we must\n * force it to the bottom position.\n */\n const [isSplitPanelForcedPosition, setSplitPanelForcedPosition] = useState(false);\n const splitPanelPosition = getSplitPanelPosition(isSplitPanelForcedPosition, splitPanelPreferences);\n\n useLayoutEffect(\n function handleSplitPanelForcePosition() {\n setSplitPanelForcedPosition(SPLIT_PANEL_MIN_WIDTH > splitPanelMaxWidth);\n },\n [splitPanelMaxWidth]\n );\n\n /**\n * The useControllable hook will set the default size of the SplitPanel based\n * on the default position set in the splitPanelPreferences. The logic for the\n * default size is contained in the SplitPanel component. The splitPanelControlledSize\n * will be bound to the size property in the SplitPanel context for rendering.\n *\n * The callback that will be passed to the SplitPanel component\n * to handle the resize events that will change the size of the SplitPanel.\n * It will set the splitPanelControlledSize controlled state and fire the\n * onSplitPanelResize event.\n */\n const [splitPanelReportedSize, setSplitPanelReportedSize] = useState(0);\n const [splitPanelReportedHeaderHeight, setSplitPanelReportedHeaderHeight] = useState(0);\n const [splitPanelToggle, setSplitPanelToggle] = useState<SplitPanelSideToggleProps>({\n displayed: false,\n ariaLabel: undefined,\n });\n const splitPanelDisplayed = !!(splitPanelToggle.displayed || isSplitPanelOpen) && !!splitPanel;\n const splitPanelControlId = useUniqueId('split-panel-');\n const toolsControlId = useUniqueId('tools-');\n\n const [splitPanelSize, setSplitPanelSize] = useControllable(\n props.splitPanelSize,\n props.onSplitPanelResize,\n getSplitPanelDefaultSize(splitPanelPosition),\n { componentName: 'AppLayout', controlledProp: 'splitPanelSize', changeHandler: 'onSplitPanelResize' }\n );\n\n const handleSplitPanelResize = useCallback(\n (size: number) => {\n setSplitPanelSize(size);\n fireNonCancelableEvent(props.onSplitPanelResize, { size });\n },\n [props.onSplitPanelResize, setSplitPanelSize]\n );\n\n const handleSplitPanelPreferencesChange = useCallback(\n function handleSplitPanelChange(detail: AppLayoutProps.SplitPanelPreferences) {\n setSplitPanelPreferences(detail);\n setSplitPanelLastInteraction({ type: 'position' });\n fireNonCancelableEvent(props.onSplitPanelPreferencesChange, detail);\n },\n [props.onSplitPanelPreferencesChange, setSplitPanelPreferences, setSplitPanelLastInteraction]\n );\n\n const {\n drawers,\n activeDrawer,\n activeDrawerId,\n minDrawerSize: drawersMinWidth,\n onActiveDrawerChange,\n onActiveDrawerResize,\n activeDrawerSize,\n ...drawersProps\n } = useDrawers(props, props.ariaLabels, {\n ariaLabels: props.ariaLabels,\n toolsHide,\n toolsOpen: isToolsOpen,\n tools: props.tools,\n toolsWidth,\n onToolsToggle: handleToolsClick,\n });\n\n const [drawersMaxWidth, setDrawersMaxWidth] = useState(toolsWidth);\n const hasDrawers = !!drawers && drawers.length > 0;\n\n const {\n refs: drawersRefs,\n setFocus: focusDrawersButtons,\n loseFocus: loseDrawersFocus,\n } = useFocusControl(!!activeDrawerId, true, activeDrawerId);\n\n const drawerRef = useRef<HTMLDivElement>(null);\n const { resizeHandle, drawerSize } = useResize(drawerRef, {\n onActiveDrawerResize,\n activeDrawerSize,\n activeDrawer,\n drawersRefs,\n isToolsOpen,\n drawersMaxWidth,\n drawersMinWidth,\n });\n\n const handleDrawersClick = (id: string | null, skipFocusControl?: boolean) => {\n const newActiveDrawerId = id !== activeDrawerId ? id : null;\n\n onActiveDrawerChange(newActiveDrawerId);\n\n !skipFocusControl && focusDrawersButtons();\n };\n\n let drawersTriggerCount = drawers ? drawers.length : !toolsHide ? 1 : 0;\n if (splitPanelDisplayed && splitPanelPosition === 'side') {\n drawersTriggerCount++;\n }\n const hasOpenDrawer =\n !!activeDrawerId ||\n (!toolsHide && isToolsOpen) ||\n (splitPanelDisplayed && splitPanelPosition === 'side' && isSplitPanelOpen);\n const hasDrawerViewportOverlay =\n isMobile && (!!activeDrawerId || (!navigationHide && navigationOpen) || (!toolsHide && isToolsOpen));\n\n /**\n * The Layout element is not necessarily synonymous with the client\n * viewport width. There can be content in the horizontal viewport\n * that exists on either side of the AppLayout. This resize observer\n * will set the custom property of the Layout element width that\n * is used for various horizontal constraints such as the maximum\n * allowed width of the Tools container.\n *\n * The offsetLeft of the Main will return the distance that the\n * Main element has from the left edge of the Layout component.\n * The offsetLeft value can vary based on the presence and state\n * of the Navigation as well as content gaps in the grid definition.\n * This value is used to determine the max width constraint calculation\n * for the Tools container.\n */\n const [layoutContainerQuery, layoutElement] = useContainerQuery(rect => rect.contentBoxWidth);\n const layoutWidth = layoutContainerQuery ?? 0;\n\n const mainElement = useRef<HTMLDivElement>(null);\n const [mainOffsetLeft, setMainOffsetLeft] = useState(0);\n\n const { hasBackgroundOverlap, updateBackgroundOverlapHeight } = useBackgroundOverlap({\n contentHeader: props.contentHeader,\n disableContentHeaderOverlap: props.disableContentHeaderOverlap,\n layoutElement,\n });\n\n useLayoutEffect(\n function handleMainOffsetLeft() {\n setMainOffsetLeft(mainElement?.current?.offsetLeft ?? 0);\n },\n [layoutWidth, navigationOpen, isToolsOpen, splitPanelReportedSize]\n );\n\n /**\n * On mobile viewports the navigation and tools drawers are adjusted to a fixed position\n * that consumes 100% of the viewport height and width. The body content could potentially\n * be scrollable underneath the drawer. In order to prevent this a CSS class needs to be\n * added to the document body that sets overflow to hidden.\n */\n useEffect(\n function handleBodyScroll() {\n if (isMobile && (navigationOpen || isToolsOpen || !!activeDrawer)) {\n document.body.classList.add(styles['block-body-scroll']);\n } else {\n document.body.classList.remove(styles['block-body-scroll']);\n }\n\n // Ensure the CSS class is removed from the body on side effect cleanup\n return function cleanup() {\n document.body.classList.remove(styles['block-body-scroll']);\n };\n },\n [isMobile, navigationOpen, isToolsOpen, activeDrawer]\n );\n\n /**\n * Because the notifications slot does not give us any direction insight into\n * what the state of the child content is we need to have a mechanism for\n * tracking the height of the notifications and whether or not it has content.\n * The height of the notifications is an integer that will be used as a custom\n * property on the Layout component to determine what the sticky offset should\n * be if there are sticky notifications. This could be any number including\n * zero based on how the child content renders. The hasNotificationsContent boolean\n * is simply centralizing the logic of the notifications height being > 0 such\n * that it is not repeated in various components (such as MobileToolbar) that need to\n * know if the notifications slot is empty.\n */\n const [notificationsContainerQuery, notificationsElement] = useContainerQuery(rect => rect.contentBoxHeight);\n\n const notificationsHeight = notificationsContainerQuery ?? 0;\n const hasNotificationsContent = notificationsHeight > 0;\n /**\n * Determine the offsetBottom value based on the presence of a footer element and\n * the SplitPanel component. Ignore the SplitPanel if it is not in the bottom\n * position. Use the size property if it is open and the header height if it is closed.\n */\n let offsetBottom = footerHeight;\n\n if (splitPanelDisplayed && splitPanelPosition === 'bottom') {\n if (isSplitPanelOpen) {\n offsetBottom += splitPanelReportedSize;\n } else {\n offsetBottom += splitPanelReportedHeaderHeight;\n }\n }\n\n /**\n * Warning! This is a hack! In order to accurately calculate if there is adequate\n * horizontal space for the Split Panel to be in the side position we need two values\n * that are not available in JavaScript.\n *\n * The first is the the content gap on the right which is stored in a design token\n * and applied in the Layout CSS:\n *\n * $contentGapRight: #{awsui.$space-layout-content-horizontal};\n *\n * The second is the width of the element that has the circular buttons for the\n * Tools and Split Panel. This could be suppressed given the state of the Tools\n * drawer returning a zero value. It would, however, be rendered if the Split Panel\n * were to move into the side position. This is calculated in the Tools CSS and\n * the Trigger button CSS with design tokens:\n *\n * padding: awsui.$space-scaled-s awsui.$space-layout-toggle-padding;\n * width: awsui.$space-layout-toggle-diameter;\n *\n * These values will be defined below as static integers that are rough approximations\n * of their computed width when rendered in the DOM, but doubled to ensure adequate\n * spacing for the Split Panel to be in side position.\n */\n useLayoutEffect(\n function handleSplitPanelMaxWidth() {\n const contentGapRight = 50; // Approximately 24px when rendered but doubled for safety\n const toolsFormOffsetWidth = 120; // Approximately 60px when rendered but doubled for safety\n const getPanelOffsetWidth = () => {\n if (drawers) {\n return activeDrawerId ? drawerSize : 0;\n }\n return isToolsOpen ? toolsWidth : 0;\n };\n\n setSplitPanelMaxWidth(\n layoutWidth -\n mainOffsetLeft -\n minContentWidth -\n contentGapRight -\n toolsFormOffsetWidth -\n getPanelOffsetWidth()\n );\n\n setDrawersMaxWidth(layoutWidth - mainOffsetLeft - minContentWidth - contentGapRight - toolsFormOffsetWidth);\n },\n [\n activeDrawerId,\n drawerSize,\n drawers,\n navigationOpen,\n isToolsOpen,\n layoutWidth,\n mainOffsetLeft,\n minContentWidth,\n toolsWidth,\n ]\n );\n\n /**\n * The useImperativeHandle hook in conjunction with the forwardRef function\n * in the AppLayout component definition expose the following callable\n * functions to component consumers when they put a ref as a property on\n * their component implementation.\n */\n useImperativeHandle(\n forwardRef,\n function createImperativeHandle() {\n return {\n closeNavigationIfNecessary: function () {\n isMobile && handleNavigationClick(false);\n },\n openTools: function () {\n handleToolsClick(true);\n },\n focusToolsClose: () => {\n if (hasDrawers) {\n focusDrawersButtons(true);\n } else {\n focusToolsButtons(true);\n }\n },\n focusActiveDrawer: () => focusDrawersButtons(true),\n focusSplitPanel: () => splitPanelRefs.slider.current?.focus(),\n };\n },\n [\n isMobile,\n handleNavigationClick,\n handleToolsClick,\n focusToolsButtons,\n focusDrawersButtons,\n splitPanelRefs.slider,\n hasDrawers,\n ]\n );\n\n return (\n <AppLayoutInternalsContext.Provider\n value={{\n ...props,\n activeDrawerId,\n contentType,\n drawers,\n drawersAriaLabel: drawersProps.ariaLabelsWithDrawers?.drawers,\n drawersOverflowAriaLabel: drawersProps.ariaLabelsWithDrawers?.drawersOverflow,\n drawersOverflowWithBadgeAriaLabel: drawersProps.ariaLabelsWithDrawers?.drawersOverflowWithBadge,\n drawersRefs,\n drawersMinWidth,\n drawersMaxWidth,\n drawerSize,\n drawerRef,\n resizeHandle,\n drawersTriggerCount,\n headerHeight,\n footerHeight,\n hasDrawerViewportOverlay,\n handleDrawersClick,\n handleNavigationClick,\n handleSplitPanelClick,\n handleSplitPanelPreferencesChange,\n handleSplitPanelResize,\n handleToolsClick,\n hasBackgroundOverlap,\n hasNotificationsContent,\n hasOpenDrawer,\n hasStickyBackground,\n isBackgroundOverlapDisabled: props.disableContentHeaderOverlap || !hasBackgroundOverlap,\n isMobile,\n isSplitPanelForcedPosition,\n isSplitPanelOpen,\n isToolsOpen,\n layoutElement,\n layoutWidth,\n loseToolsFocus,\n loseDrawersFocus,\n mainElement,\n mainOffsetLeft,\n maxContentWidth,\n minContentWidth,\n navigationHide,\n navigationRefs,\n notificationsElement,\n notificationsHeight,\n offsetBottom,\n setHasStickyBackground,\n setSplitPanelReportedSize,\n setSplitPanelReportedHeaderHeight,\n splitPanel,\n splitPanelControlId,\n splitPanelDisplayed,\n splitPanelMaxWidth,\n splitPanelPosition,\n splitPanelPreferences,\n splitPanelReportedSize,\n splitPanelReportedHeaderHeight,\n splitPanelSize,\n splitPanelToggle,\n setSplitPanelToggle,\n splitPanelRefs,\n toolsControlId,\n toolsHide,\n toolsOpen: isToolsOpen,\n toolsWidth,\n toolsRefs,\n __embeddedViewMode,\n }}\n >\n <AppLayoutContext.Provider\n value={{\n stickyOffsetBottom: offsetBottom,\n stickyOffsetTop: 0, // not used in this design. Sticky headers read a CSS-var instead\n setHasStickyBackground,\n }}\n >\n <DynamicOverlapContext.Provider value={updateBackgroundOverlapHeight}>\n {children}\n </DynamicOverlapContext.Provider>\n </AppLayoutContext.Provider>\n </AppLayoutInternalsContext.Provider>\n );\n }\n);\n"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../src/app-layout/visual-refresh/context.tsx"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, {\n createContext,\n useCallback,\n useEffect,\n useLayoutEffect,\n useImperativeHandle,\n useRef,\n useState,\n useContext,\n} from 'react';\nimport { AppLayoutContext } from '../../internal/context/app-layout-context';\nimport { DynamicOverlapContext } from '../../internal/context/dynamic-overlap-context';\nimport { AppLayoutProps, AppLayoutPropsWithDefaults } from '../interfaces';\nimport { fireNonCancelableEvent } from '../../internal/events';\nimport { FocusControlRefs, useFocusControl } from '../utils/use-focus-control';\nimport { getSplitPanelDefaultSize } from '../../split-panel/utils/size-utils';\nimport { getSplitPanelPosition } from './split-panel';\nimport { useControllable } from '../../internal/hooks/use-controllable';\nimport { SplitPanelFocusControlRefs, useSplitPanelFocusControl } from '../utils/use-split-panel-focus-control';\nimport { SplitPanelSideToggleProps } from '../../internal/context/split-panel-context';\nimport { useMobile } from '../../internal/hooks/use-mobile';\nimport { useStableCallback } from '@cloudscape-design/component-toolkit/internal';\nimport useResize from '../utils/use-resize';\nimport styles from './styles.css.js';\nimport { useContainerQuery } from '@cloudscape-design/component-toolkit';\nimport useBackgroundOverlap from './use-background-overlap';\nimport { useDrawers } from '../utils/use-drawers';\nimport { useUniqueId } from '../../internal/hooks/use-unique-id';\nimport { SPLIT_PANEL_MIN_WIDTH } from '../split-panel';\n\ninterface AppLayoutInternals extends AppLayoutPropsWithDefaults {\n activeDrawerId: string | null;\n drawers: Array<AppLayoutProps.Drawer> | undefined;\n drawersAriaLabel: string | undefined;\n drawersOverflowAriaLabel: string | undefined;\n drawersOverflowWithBadgeAriaLabel: string | undefined;\n drawersRefs: FocusControlRefs;\n drawerSize: number;\n drawersMinWidth: number;\n drawersMaxWidth: number;\n drawerRef: React.Ref<HTMLElement>;\n resizeHandle: React.ReactElement;\n drawersTriggerCount: number;\n handleDrawersClick: (activeDrawerId: string | null, skipFocusControl?: boolean) => void;\n handleSplitPanelClick: () => void;\n handleNavigationClick: (isOpen: boolean) => void;\n handleSplitPanelPreferencesChange: (detail: AppLayoutProps.SplitPanelPreferences) => void;\n handleSplitPanelResize: (newSize: number) => void;\n handleToolsClick: (value: boolean, skipFocusControl?: boolean) => void;\n hasBackgroundOverlap: boolean;\n hasDrawerViewportOverlay: boolean;\n hasNotificationsContent: boolean;\n hasOpenDrawer?: boolean;\n hasStickyBackground: boolean;\n isBackgroundOverlapDisabled: boolean;\n isMobile: boolean;\n isSplitPanelForcedPosition: boolean;\n isSplitPanelOpen?: boolean;\n isToolsOpen: boolean;\n layoutElement: React.Ref<HTMLElement>;\n layoutWidth: number;\n loseToolsFocus: () => void;\n loseDrawersFocus: () => void;\n mainElement: React.Ref<HTMLDivElement>;\n mainOffsetLeft: number;\n navigationRefs: FocusControlRefs;\n notificationsElement: React.Ref<HTMLDivElement>;\n notificationsHeight: number;\n offsetBottom: number;\n setHasStickyBackground: (value: boolean) => void;\n setSplitPanelReportedSize: (value: number) => void;\n setSplitPanelReportedHeaderHeight: (value: number) => void;\n headerHeight: number;\n footerHeight: number;\n splitPanelControlId: string;\n splitPanelMaxWidth: number;\n splitPanelPosition: AppLayoutProps.SplitPanelPosition;\n splitPanelReportedSize: number;\n splitPanelReportedHeaderHeight: number;\n splitPanelToggle: SplitPanelSideToggleProps;\n setSplitPanelToggle: (toggle: SplitPanelSideToggleProps) => void;\n splitPanelDisplayed: boolean;\n splitPanelRefs: SplitPanelFocusControlRefs;\n toolsControlId: string;\n toolsRefs: FocusControlRefs;\n __embeddedViewMode?: boolean;\n}\n\n/**\n * The default values are destructured in the context instantiation to\n * prevent downstream Typescript errors. This could likely be replaced\n * by a context interface definition that extends the AppLayout interface.\n */\nconst AppLayoutInternalsContext = createContext<AppLayoutInternals | null>(null);\n\ninterface AppLayoutProviderInternalsProps extends AppLayoutPropsWithDefaults {\n children: React.ReactNode;\n}\n\nexport function useAppLayoutInternals() {\n const ctx = useContext(AppLayoutInternalsContext);\n if (!ctx) {\n throw new Error('Invariant violation: this context is only available inside app layout');\n }\n return ctx;\n}\n\nexport const AppLayoutInternalsProvider = React.forwardRef(\n (props: AppLayoutProviderInternalsProps, forwardRef: React.Ref<AppLayoutProps.Ref>) => {\n const {\n toolsHide,\n toolsOpen: controlledToolsOpen,\n navigationHide,\n navigationOpen,\n contentType,\n placement,\n children,\n splitPanel,\n } = props;\n const isMobile = useMobile();\n\n // Private API for embedded view mode\n const __embeddedViewMode = Boolean((props as any).__embeddedViewMode);\n\n const [hasStickyBackground, setHasStickyBackground] = useState(false);\n\n /**\n * Set the default values for minimum and maximum content width.\n */\n const geckoMaxCssLength = ((1 << 30) - 1) / 60;\n const halfGeckoMaxCssLength = geckoMaxCssLength / 2;\n // CSS lengths in Gecko are limited to at most (1<<30)-1 app units (Gecko uses 60 as app unit).\n // Limit the maxContentWidth to the half of the upper boundary (≈4230^2) to be on the safe side.\n const maxContentWidth =\n props.maxContentWidth && props.maxContentWidth > halfGeckoMaxCssLength\n ? halfGeckoMaxCssLength\n : props.maxContentWidth ?? 0;\n const minContentWidth = props.minContentWidth ?? 280;\n\n const { refs: navigationRefs, setFocus: focusNavButtons } = useFocusControl(navigationOpen);\n\n const handleNavigationClick = useStableCallback(function handleNavigationChange(isOpen: boolean) {\n focusNavButtons();\n fireNonCancelableEvent(props.onNavigationChange, { open: isOpen });\n });\n\n useEffect(() => {\n // Close navigation drawer on mobile so that the main content is visible\n if (isMobile) {\n handleNavigationClick(false);\n }\n }, [isMobile, handleNavigationClick]);\n\n const toolsWidth = props.toolsWidth;\n const [isToolsOpen = false, setIsToolsOpen] = useControllable(controlledToolsOpen, props.onToolsChange, false, {\n componentName: 'AppLayout',\n controlledProp: 'toolsOpen',\n changeHandler: 'onToolsChange',\n });\n\n const {\n refs: toolsRefs,\n setFocus: focusToolsButtons,\n loseFocus: loseToolsFocus,\n } = useFocusControl(isToolsOpen, true);\n\n const handleToolsClick = useCallback(\n function handleToolsChange(isOpen: boolean, skipFocusControl?: boolean) {\n setIsToolsOpen(isOpen);\n !skipFocusControl && focusToolsButtons();\n fireNonCancelableEvent(props.onToolsChange, { open: isOpen });\n },\n [props.onToolsChange, setIsToolsOpen, focusToolsButtons]\n );\n\n /**\n * Set the default values for the minimum and maximum Split Panel width when it is\n * in the side position. The useLayoutEffect will compute the available space in the\n * DOM for the Split Panel given the current state. The minimum and maximum\n * widths will potentially trigger a side effect that will put the Split Panel into\n * a forced position on the bottom.\n */\n const [splitPanelMaxWidth, setSplitPanelMaxWidth] = useState(SPLIT_PANEL_MIN_WIDTH);\n\n /**\n * The useControllable hook will set the default value and manage either\n * the controlled or uncontrolled state of the Split Panel. By default\n * the Split Panel should always be closed on page load.\n *\n * The callback that will be passed to the SplitPanel component\n * to handle the click events that will change the state of the SplitPanel\n * to open or closed given the current state. It will set the isSplitPanelOpen\n * controlled state and fire the onSplitPanelToggle event.\n */\n const [isSplitPanelOpen, setIsSplitPanelOpen] = useControllable(\n props.splitPanelOpen,\n props.onSplitPanelToggle,\n false,\n { componentName: 'AppLayout', controlledProp: 'splitPanelOpen', changeHandler: 'onSplitPanelToggle' }\n );\n\n /**\n * The useControllable hook will manage the controlled or uncontrolled\n * state of the splitPanelPreferences. By default the splitPanelPreferences\n * is undefined. When set the object shape should have a single key to indicate\n * either bottom or side position.\n *\n * The callback that will handle changes to the splitPanelPreferences\n * object that will determine if the SplitPanel is rendered either on the\n * bottom of the viewport or within the Tools container.\n */\n const [splitPanelPreferences, setSplitPanelPreferences] = useControllable(\n props.splitPanelPreferences,\n props.onSplitPanelPreferencesChange,\n undefined,\n {\n componentName: 'AppLayout',\n controlledProp: 'splitPanelPreferences',\n changeHandler: 'onSplitPanelPreferencesChange',\n }\n );\n\n const { refs: splitPanelRefs, setLastInteraction: setSplitPanelLastInteraction } = useSplitPanelFocusControl([\n splitPanelPreferences,\n isSplitPanelOpen,\n ]);\n\n const handleSplitPanelClick = useCallback(\n function handleSplitPanelChange() {\n setIsSplitPanelOpen(!isSplitPanelOpen);\n setSplitPanelLastInteraction({ type: isSplitPanelOpen ? 'close' : 'open' });\n fireNonCancelableEvent(props.onSplitPanelToggle, { open: !isSplitPanelOpen });\n },\n [props.onSplitPanelToggle, isSplitPanelOpen, setIsSplitPanelOpen, setSplitPanelLastInteraction]\n );\n\n /**\n * The Split Panel will be in forced (bottom) position if the defined minimum width is\n * greater than the maximum width. In other words, the maximum width is the currently\n * available horizontal space based on all other components that are rendered. If the\n * minimum width exceeds this value then there is not enough horizontal space and we must\n * force it to the bottom position.\n */\n const isSplitPanelForcedPosition = isMobile || SPLIT_PANEL_MIN_WIDTH > splitPanelMaxWidth;\n const splitPanelPosition = getSplitPanelPosition(isSplitPanelForcedPosition, splitPanelPreferences);\n\n /**\n * The useControllable hook will set the default size of the SplitPanel based\n * on the default position set in the splitPanelPreferences. The logic for the\n * default size is contained in the SplitPanel component. The splitPanelControlledSize\n * will be bound to the size property in the SplitPanel context for rendering.\n *\n * The callback that will be passed to the SplitPanel component\n * to handle the resize events that will change the size of the SplitPanel.\n * It will set the splitPanelControlledSize controlled state and fire the\n * onSplitPanelResize event.\n */\n const [splitPanelReportedSize, setSplitPanelReportedSize] = useState(0);\n const [splitPanelReportedHeaderHeight, setSplitPanelReportedHeaderHeight] = useState(0);\n const [splitPanelToggle, setSplitPanelToggle] = useState<SplitPanelSideToggleProps>({\n displayed: false,\n ariaLabel: undefined,\n });\n const splitPanelDisplayed = !!(splitPanelToggle.displayed || isSplitPanelOpen) && !!splitPanel;\n const splitPanelControlId = useUniqueId('split-panel-');\n const toolsControlId = useUniqueId('tools-');\n\n const [splitPanelSize, setSplitPanelSize] = useControllable(\n props.splitPanelSize,\n props.onSplitPanelResize,\n getSplitPanelDefaultSize(splitPanelPosition),\n { componentName: 'AppLayout', controlledProp: 'splitPanelSize', changeHandler: 'onSplitPanelResize' }\n );\n\n const handleSplitPanelResize = useCallback(\n (size: number) => {\n setSplitPanelSize(size);\n fireNonCancelableEvent(props.onSplitPanelResize, { size });\n },\n [props.onSplitPanelResize, setSplitPanelSize]\n );\n\n const handleSplitPanelPreferencesChange = useCallback(\n function handleSplitPanelChange(detail: AppLayoutProps.SplitPanelPreferences) {\n setSplitPanelPreferences(detail);\n setSplitPanelLastInteraction({ type: 'position' });\n fireNonCancelableEvent(props.onSplitPanelPreferencesChange, detail);\n },\n [props.onSplitPanelPreferencesChange, setSplitPanelPreferences, setSplitPanelLastInteraction]\n );\n\n const {\n drawers,\n activeDrawer,\n activeDrawerId,\n minDrawerSize: drawersMinWidth,\n onActiveDrawerChange,\n onActiveDrawerResize,\n activeDrawerSize,\n ...drawersProps\n } = useDrawers(props, props.ariaLabels, {\n ariaLabels: props.ariaLabels,\n toolsHide,\n toolsOpen: isToolsOpen,\n tools: props.tools,\n toolsWidth,\n onToolsToggle: handleToolsClick,\n });\n\n const [drawersMaxWidth, setDrawersMaxWidth] = useState(toolsWidth);\n const hasDrawers = !!drawers && drawers.length > 0;\n\n const {\n refs: drawersRefs,\n setFocus: focusDrawersButtons,\n loseFocus: loseDrawersFocus,\n } = useFocusControl(!!activeDrawerId, true, activeDrawerId);\n\n const drawerRef = useRef<HTMLDivElement>(null);\n const { resizeHandle, drawerSize } = useResize(drawerRef, {\n onActiveDrawerResize,\n activeDrawerSize,\n activeDrawer,\n drawersRefs,\n isToolsOpen,\n drawersMaxWidth,\n drawersMinWidth,\n });\n\n const handleDrawersClick = (id: string | null, skipFocusControl?: boolean) => {\n const newActiveDrawerId = id !== activeDrawerId ? id : null;\n\n onActiveDrawerChange(newActiveDrawerId);\n\n !skipFocusControl && focusDrawersButtons();\n };\n\n let drawersTriggerCount = drawers ? drawers.length : !toolsHide ? 1 : 0;\n if (splitPanelDisplayed && splitPanelPosition === 'side') {\n drawersTriggerCount++;\n }\n const hasOpenDrawer =\n !!activeDrawerId ||\n (!toolsHide && isToolsOpen) ||\n (splitPanelDisplayed && splitPanelPosition === 'side' && isSplitPanelOpen);\n const hasDrawerViewportOverlay =\n isMobile && (!!activeDrawerId || (!navigationHide && navigationOpen) || (!toolsHide && isToolsOpen));\n\n const layoutElement = useRef<HTMLDivElement>(null);\n const mainElement = useRef<HTMLDivElement>(null);\n const [mainOffsetLeft, setMainOffsetLeft] = useState(0);\n\n const { hasBackgroundOverlap, updateBackgroundOverlapHeight } = useBackgroundOverlap({\n contentHeader: props.contentHeader,\n disableContentHeaderOverlap: props.disableContentHeaderOverlap,\n layoutElement,\n });\n\n useLayoutEffect(\n function handleMainOffsetLeft() {\n setMainOffsetLeft(mainElement?.current?.offsetLeft ?? 0);\n },\n [placement.width, navigationOpen, isToolsOpen, splitPanelReportedSize]\n );\n\n /**\n * On mobile viewports the navigation and tools drawers are adjusted to a fixed position\n * that consumes 100% of the viewport height and width. The body content could potentially\n * be scrollable underneath the drawer. In order to prevent this a CSS class needs to be\n * added to the document body that sets overflow to hidden.\n */\n useEffect(\n function handleBodyScroll() {\n if (isMobile && (navigationOpen || isToolsOpen || !!activeDrawer)) {\n document.body.classList.add(styles['block-body-scroll']);\n } else {\n document.body.classList.remove(styles['block-body-scroll']);\n }\n\n // Ensure the CSS class is removed from the body on side effect cleanup\n return function cleanup() {\n document.body.classList.remove(styles['block-body-scroll']);\n };\n },\n [isMobile, navigationOpen, isToolsOpen, activeDrawer]\n );\n\n /**\n * Because the notifications slot does not give us any direction insight into\n * what the state of the child content is we need to have a mechanism for\n * tracking the height of the notifications and whether or not it has content.\n * The height of the notifications is an integer that will be used as a custom\n * property on the Layout component to determine what the sticky offset should\n * be if there are sticky notifications. This could be any number including\n * zero based on how the child content renders. The hasNotificationsContent boolean\n * is simply centralizing the logic of the notifications height being > 0 such\n * that it is not repeated in various components (such as MobileToolbar) that need to\n * know if the notifications slot is empty.\n */\n const [notificationsContainerQuery, notificationsElement] = useContainerQuery(rect => rect.contentBoxHeight);\n\n const notificationsHeight = notificationsContainerQuery ?? 0;\n const hasNotificationsContent = notificationsHeight > 0;\n /**\n * Determine the offsetBottom value based on the presence of a footer element and\n * the SplitPanel component. Ignore the SplitPanel if it is not in the bottom\n * position. Use the size property if it is open and the header height if it is closed.\n */\n let offsetBottom = placement.bottom;\n\n if (splitPanelDisplayed && splitPanelPosition === 'bottom') {\n if (isSplitPanelOpen) {\n offsetBottom += splitPanelReportedSize;\n } else {\n offsetBottom += splitPanelReportedHeaderHeight;\n }\n }\n\n /**\n * Warning! This is a hack! In order to accurately calculate if there is adequate\n * horizontal space for the Split Panel to be in the side position we need two values\n * that are not available in JavaScript.\n *\n * The first is the the content gap on the right which is stored in a design token\n * and applied in the Layout CSS:\n *\n * $contentGapRight: #{awsui.$space-layout-content-horizontal};\n *\n * The second is the width of the element that has the circular buttons for the\n * Tools and Split Panel. This could be suppressed given the state of the Tools\n * drawer returning a zero value. It would, however, be rendered if the Split Panel\n * were to move into the side position. This is calculated in the Tools CSS and\n * the Trigger button CSS with design tokens:\n *\n * padding: awsui.$space-scaled-s awsui.$space-layout-toggle-padding;\n * width: awsui.$space-layout-toggle-diameter;\n *\n * These values will be defined below as static integers that are rough approximations\n * of their computed width when rendered in the DOM, but doubled to ensure adequate\n * spacing for the Split Panel to be in side position.\n */\n useLayoutEffect(\n function handleSplitPanelMaxWidth() {\n const contentGapRight = 50; // Approximately 24px when rendered but doubled for safety\n const toolsFormOffsetWidth = 120; // Approximately 60px when rendered but doubled for safety\n const getPanelOffsetWidth = () => {\n if (drawers) {\n return activeDrawerId ? drawerSize : 0;\n }\n return isToolsOpen ? toolsWidth : 0;\n };\n\n setSplitPanelMaxWidth(\n placement.width -\n mainOffsetLeft -\n minContentWidth -\n contentGapRight -\n toolsFormOffsetWidth -\n getPanelOffsetWidth()\n );\n\n setDrawersMaxWidth(placement.width - mainOffsetLeft - minContentWidth - contentGapRight - toolsFormOffsetWidth);\n },\n [\n activeDrawerId,\n drawerSize,\n drawers,\n navigationOpen,\n isToolsOpen,\n placement.width,\n mainOffsetLeft,\n minContentWidth,\n toolsWidth,\n ]\n );\n\n /**\n * The useImperativeHandle hook in conjunction with the forwardRef function\n * in the AppLayout component definition expose the following callable\n * functions to component consumers when they put a ref as a property on\n * their component implementation.\n */\n useImperativeHandle(\n forwardRef,\n function createImperativeHandle() {\n return {\n closeNavigationIfNecessary: function () {\n isMobile && handleNavigationClick(false);\n },\n openTools: function () {\n handleToolsClick(true);\n },\n focusToolsClose: () => {\n if (hasDrawers) {\n focusDrawersButtons(true);\n } else {\n focusToolsButtons(true);\n }\n },\n focusActiveDrawer: () => focusDrawersButtons(true),\n focusSplitPanel: () => splitPanelRefs.slider.current?.focus(),\n };\n },\n [\n isMobile,\n handleNavigationClick,\n handleToolsClick,\n focusToolsButtons,\n focusDrawersButtons,\n splitPanelRefs.slider,\n hasDrawers,\n ]\n );\n\n return (\n <AppLayoutInternalsContext.Provider\n value={{\n ...props,\n activeDrawerId,\n contentType,\n drawers,\n drawersAriaLabel: drawersProps.ariaLabelsWithDrawers?.drawers,\n drawersOverflowAriaLabel: drawersProps.ariaLabelsWithDrawers?.drawersOverflow,\n drawersOverflowWithBadgeAriaLabel: drawersProps.ariaLabelsWithDrawers?.drawersOverflowWithBadge,\n drawersRefs,\n drawersMinWidth,\n drawersMaxWidth,\n drawerSize,\n drawerRef,\n resizeHandle,\n drawersTriggerCount,\n headerHeight: placement.top,\n footerHeight: placement.bottom,\n hasDrawerViewportOverlay,\n handleDrawersClick,\n handleNavigationClick,\n handleSplitPanelClick,\n handleSplitPanelPreferencesChange,\n handleSplitPanelResize,\n handleToolsClick,\n hasBackgroundOverlap,\n hasNotificationsContent,\n hasOpenDrawer,\n hasStickyBackground,\n isBackgroundOverlapDisabled: props.disableContentHeaderOverlap || !hasBackgroundOverlap,\n isMobile,\n isSplitPanelForcedPosition,\n isSplitPanelOpen,\n isToolsOpen,\n layoutElement,\n layoutWidth: placement.width,\n loseToolsFocus,\n loseDrawersFocus,\n mainElement,\n mainOffsetLeft,\n maxContentWidth,\n minContentWidth,\n navigationHide,\n navigationRefs,\n notificationsElement,\n notificationsHeight,\n offsetBottom,\n setHasStickyBackground,\n setSplitPanelReportedSize,\n setSplitPanelReportedHeaderHeight,\n splitPanel,\n splitPanelControlId,\n splitPanelDisplayed,\n splitPanelMaxWidth,\n splitPanelPosition,\n splitPanelPreferences,\n splitPanelReportedSize,\n splitPanelReportedHeaderHeight,\n splitPanelSize,\n splitPanelToggle,\n setSplitPanelToggle,\n splitPanelRefs,\n toolsControlId,\n toolsHide,\n toolsOpen: isToolsOpen,\n toolsWidth,\n toolsRefs,\n __embeddedViewMode,\n }}\n >\n <AppLayoutContext.Provider\n value={{\n stickyOffsetBottom: offsetBottom,\n stickyOffsetTop: 0, // not used in this design. Sticky headers read a CSS-var instead\n setHasStickyBackground,\n }}\n >\n <DynamicOverlapContext.Provider value={updateBackgroundOverlapHeight}>\n {children}\n </DynamicOverlapContext.Provider>\n </AppLayoutContext.Provider>\n </AppLayoutInternalsContext.Provider>\n );\n }\n);\n"]}
@@ -1,14 +1,20 @@
1
1
  import React from 'react';
2
2
  import { AppLayoutProps } from '../interfaces';
3
- declare const AppLayoutWithRef: React.ForwardRefExoticComponent<AppLayoutProps & {
3
+ declare const AppLayoutWithRef: React.ForwardRefExoticComponent<Omit<AppLayoutProps, "headerSelector" | "footerSelector"> & {
4
4
  contentType: AppLayoutProps.ContentType;
5
5
  navigationOpen: boolean;
6
6
  navigationWidth: number;
7
7
  toolsWidth: number;
8
8
  minContentWidth: number;
9
- headerSelector: string;
10
- footerSelector: string;
11
9
  onNavigationChange: import("../../internal/events").NonCancelableEventHandler<AppLayoutProps.ChangeDetail>;
10
+ } & {
11
+ placement: {
12
+ top: number;
13
+ bottom: number;
14
+ left: number;
15
+ right: number;
16
+ width: number;
17
+ };
12
18
  } & React.RefAttributes<AppLayoutProps.Ref>>;
13
19
  export default AppLayoutWithRef;
14
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/app-layout/visual-refresh/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,cAAc,EAA8B,MAAM,eAAe,CAAC;AAa3E,QAAA,MAAM,gBAAgB;;;;;;;;;4CAiCpB,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/app-layout/visual-refresh/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,cAAc,EAA8B,MAAM,eAAe,CAAC;AAa3E,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;4CAiCpB,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
@@ -1,86 +1,86 @@
1
1
 
2
2
  import './styles.scoped.css';
3
3
  export default {
4
- "background": "awsui_background_hyvsj_1cour_99",
5
- "scrolling-background": "awsui_scrolling-background_hyvsj_1cour_102",
6
- "sticky-background": "awsui_sticky-background_hyvsj_1cour_108",
7
- "has-sticky-notifications": "awsui_has-sticky-notifications_hyvsj_1cour_116",
8
- "breadcrumbs": "awsui_breadcrumbs_hyvsj_1cour_129",
9
- "has-sticky-background": "awsui_has-sticky-background_hyvsj_1cour_139",
10
- "drawers-container": "awsui_drawers-container_hyvsj_1cour_151",
11
- "has-open-drawer": "awsui_has-open-drawer_hyvsj_1cour_162",
12
- "disable-body-scroll": "awsui_disable-body-scroll_hyvsj_1cour_185",
13
- "drawers-desktop-triggers-container": "awsui_drawers-desktop-triggers-container_hyvsj_1cour_190",
14
- "has-multiple-triggers": "awsui_has-multiple-triggers_hyvsj_1cour_231",
15
- "drawers-mobile-triggers-container": "awsui_drawers-mobile-triggers-container_hyvsj_1cour_241",
16
- "drawers-trigger-content": "awsui_drawers-trigger-content_hyvsj_1cour_245",
17
- "drawers-trigger-overflow": "awsui_drawers-trigger-overflow_hyvsj_1cour_259",
18
- "drawers-trigger": "awsui_drawers-trigger_hyvsj_1cour_245",
19
- "drawer": "awsui_drawer_hyvsj_1cour_151",
20
- "drawer-content-container": "awsui_drawer-content-container_hyvsj_1cour_290",
21
- "drawer-close-button": "awsui_drawer-close-button_hyvsj_1cour_299",
22
- "drawer-content": "awsui_drawer-content_hyvsj_1cour_290",
23
- "drawer-content-hidden": "awsui_drawer-content-hidden_hyvsj_1cour_307",
24
- "drawer-slider": "awsui_drawer-slider_hyvsj_1cour_310",
25
- "is-drawer-open": "awsui_is-drawer-open_hyvsj_1cour_317",
26
- "content": "awsui_content_hyvsj_1cour_343",
27
- "layout": "awsui_layout_hyvsj_1cour_364",
28
- "has-max-content-width": "awsui_has-max-content-width_hyvsj_1cour_447",
29
- "content-type-dashboard": "awsui_content-type-dashboard_hyvsj_1cour_462",
30
- "content-type-table": "awsui_content-type-table_hyvsj_1cour_476",
31
- "content-type-cards": "awsui_content-type-cards_hyvsj_1cour_476",
32
- "is-overlap-disabled": "awsui_is-overlap-disabled_hyvsj_1cour_482",
33
- "is-hide-mobile-toolbar": "awsui_is-hide-mobile-toolbar_hyvsj_1cour_485",
34
- "has-content-gap-left": "awsui_has-content-gap-left_hyvsj_1cour_517",
35
- "has-content-gap-right": "awsui_has-content-gap-right_hyvsj_1cour_520",
36
- "content-first-child-notifications": "awsui_content-first-child-notifications_hyvsj_1cour_530",
37
- "has-breadcrumbs": "awsui_has-breadcrumbs_hyvsj_1cour_533",
38
- "content-first-child-header": "awsui_content-first-child-header_hyvsj_1cour_536",
39
- "has-header": "awsui_has-header_hyvsj_1cour_536",
40
- "content-first-child-main": "awsui_content-first-child-main_hyvsj_1cour_557",
41
- "disable-content-paddings": "awsui_disable-content-paddings_hyvsj_1cour_557",
42
- "has-split-panel": "awsui_has-split-panel_hyvsj_1cour_600",
43
- "split-panel-position-bottom": "awsui_split-panel-position-bottom_hyvsj_1cour_600",
44
- "block-body-scroll": "awsui_block-body-scroll_hyvsj_1cour_616",
45
- "unfocusable": "awsui_unfocusable_hyvsj_1cour_621",
46
- "container": "awsui_container_hyvsj_1cour_631",
47
- "is-navigation-open": "awsui_is-navigation-open_hyvsj_1cour_657",
48
- "is-tools-open": "awsui_is-tools-open_hyvsj_1cour_660",
49
- "is-split-panel-open": "awsui_is-split-panel-open_hyvsj_1cour_660",
50
- "split-panel-position-side": "awsui_split-panel-position-side_hyvsj_1cour_660",
51
- "has-active-drawer": "awsui_has-active-drawer_hyvsj_1cour_660",
52
- "mobile-toolbar": "awsui_mobile-toolbar_hyvsj_1cour_669",
53
- "remove-high-contrast-header": "awsui_remove-high-contrast-header_hyvsj_1cour_686",
54
- "mobile-toolbar-nav": "awsui_mobile-toolbar-nav_hyvsj_1cour_690",
55
- "mobile-toolbar-breadcrumbs": "awsui_mobile-toolbar-breadcrumbs_hyvsj_1cour_694",
56
- "mobile-toolbar-tools": "awsui_mobile-toolbar-tools_hyvsj_1cour_698",
57
- "navigation-container": "awsui_navigation-container_hyvsj_1cour_707",
58
- "show-navigation": "awsui_show-navigation_hyvsj_1cour_745",
59
- "animating": "awsui_animating_hyvsj_1cour_768",
60
- "showButtons": "awsui_showButtons_hyvsj_1cour_1",
61
- "navigation": "awsui_navigation_hyvsj_1cour_707",
62
- "openNavigation": "awsui_openNavigation_hyvsj_1cour_1",
63
- "animated-content": "awsui_animated-content_hyvsj_1cour_830",
64
- "hide-navigation": "awsui_hide-navigation_hyvsj_1cour_839",
65
- "notifications": "awsui_notifications_hyvsj_1cour_849",
66
- "sticky-notifications": "awsui_sticky-notifications_hyvsj_1cour_855",
67
- "split-panel-bottom": "awsui_split-panel-bottom_hyvsj_1cour_872",
68
- "position-bottom": "awsui_position-bottom_hyvsj_1cour_919",
69
- "openSplitPanelBottom": "awsui_openSplitPanelBottom_hyvsj_1cour_1",
70
- "split-panel-side": "awsui_split-panel-side_hyvsj_1cour_948",
71
- "position-side": "awsui_position-side_hyvsj_1cour_961",
72
- "tools-container": "awsui_tools-container_hyvsj_1cour_983",
73
- "tools": "awsui_tools_hyvsj_1cour_983",
74
- "openTools": "awsui_openTools_hyvsj_1cour_1",
75
- "has-tools-form-persistence": "awsui_has-tools-form-persistence_hyvsj_1cour_1074",
76
- "hide-tools": "awsui_hide-tools_hyvsj_1cour_1084",
77
- "show-tools": "awsui_show-tools_hyvsj_1cour_1096",
78
- "has-tools-form": "awsui_has-tools-form_hyvsj_1cour_1074",
79
- "trigger-badge-wrapper": "awsui_trigger-badge-wrapper_hyvsj_1cour_1179",
80
- "trigger": "awsui_trigger_hyvsj_1cour_1179",
81
- "selected": "awsui_selected_hyvsj_1cour_1253",
82
- "badge": "awsui_badge_hyvsj_1cour_1273",
83
- "trigger-wrapper": "awsui_trigger-wrapper_hyvsj_1cour_1277",
84
- "dot": "awsui_dot_hyvsj_1cour_1288"
4
+ "background": "awsui_background_hyvsj_1t7qb_99",
5
+ "scrolling-background": "awsui_scrolling-background_hyvsj_1t7qb_102",
6
+ "sticky-background": "awsui_sticky-background_hyvsj_1t7qb_108",
7
+ "has-sticky-notifications": "awsui_has-sticky-notifications_hyvsj_1t7qb_116",
8
+ "breadcrumbs": "awsui_breadcrumbs_hyvsj_1t7qb_129",
9
+ "has-sticky-background": "awsui_has-sticky-background_hyvsj_1t7qb_139",
10
+ "drawers-container": "awsui_drawers-container_hyvsj_1t7qb_151",
11
+ "has-open-drawer": "awsui_has-open-drawer_hyvsj_1t7qb_162",
12
+ "disable-body-scroll": "awsui_disable-body-scroll_hyvsj_1t7qb_185",
13
+ "drawers-desktop-triggers-container": "awsui_drawers-desktop-triggers-container_hyvsj_1t7qb_190",
14
+ "has-multiple-triggers": "awsui_has-multiple-triggers_hyvsj_1t7qb_231",
15
+ "drawers-mobile-triggers-container": "awsui_drawers-mobile-triggers-container_hyvsj_1t7qb_241",
16
+ "drawers-trigger-content": "awsui_drawers-trigger-content_hyvsj_1t7qb_245",
17
+ "drawers-trigger-overflow": "awsui_drawers-trigger-overflow_hyvsj_1t7qb_259",
18
+ "drawers-trigger": "awsui_drawers-trigger_hyvsj_1t7qb_245",
19
+ "drawer": "awsui_drawer_hyvsj_1t7qb_151",
20
+ "drawer-content-container": "awsui_drawer-content-container_hyvsj_1t7qb_290",
21
+ "drawer-close-button": "awsui_drawer-close-button_hyvsj_1t7qb_299",
22
+ "drawer-content": "awsui_drawer-content_hyvsj_1t7qb_290",
23
+ "drawer-content-hidden": "awsui_drawer-content-hidden_hyvsj_1t7qb_307",
24
+ "drawer-slider": "awsui_drawer-slider_hyvsj_1t7qb_310",
25
+ "is-drawer-open": "awsui_is-drawer-open_hyvsj_1t7qb_317",
26
+ "content": "awsui_content_hyvsj_1t7qb_343",
27
+ "layout": "awsui_layout_hyvsj_1t7qb_364",
28
+ "has-max-content-width": "awsui_has-max-content-width_hyvsj_1t7qb_445",
29
+ "content-type-dashboard": "awsui_content-type-dashboard_hyvsj_1t7qb_460",
30
+ "content-type-table": "awsui_content-type-table_hyvsj_1t7qb_474",
31
+ "content-type-cards": "awsui_content-type-cards_hyvsj_1t7qb_474",
32
+ "is-overlap-disabled": "awsui_is-overlap-disabled_hyvsj_1t7qb_480",
33
+ "is-hide-mobile-toolbar": "awsui_is-hide-mobile-toolbar_hyvsj_1t7qb_483",
34
+ "has-content-gap-left": "awsui_has-content-gap-left_hyvsj_1t7qb_515",
35
+ "has-content-gap-right": "awsui_has-content-gap-right_hyvsj_1t7qb_518",
36
+ "content-first-child-notifications": "awsui_content-first-child-notifications_hyvsj_1t7qb_528",
37
+ "has-breadcrumbs": "awsui_has-breadcrumbs_hyvsj_1t7qb_531",
38
+ "content-first-child-header": "awsui_content-first-child-header_hyvsj_1t7qb_534",
39
+ "has-header": "awsui_has-header_hyvsj_1t7qb_534",
40
+ "content-first-child-main": "awsui_content-first-child-main_hyvsj_1t7qb_552",
41
+ "disable-content-paddings": "awsui_disable-content-paddings_hyvsj_1t7qb_552",
42
+ "has-split-panel": "awsui_has-split-panel_hyvsj_1t7qb_589",
43
+ "split-panel-position-bottom": "awsui_split-panel-position-bottom_hyvsj_1t7qb_589",
44
+ "block-body-scroll": "awsui_block-body-scroll_hyvsj_1t7qb_605",
45
+ "unfocusable": "awsui_unfocusable_hyvsj_1t7qb_610",
46
+ "container": "awsui_container_hyvsj_1t7qb_620",
47
+ "is-navigation-open": "awsui_is-navigation-open_hyvsj_1t7qb_646",
48
+ "is-tools-open": "awsui_is-tools-open_hyvsj_1t7qb_649",
49
+ "is-split-panel-open": "awsui_is-split-panel-open_hyvsj_1t7qb_649",
50
+ "split-panel-position-side": "awsui_split-panel-position-side_hyvsj_1t7qb_649",
51
+ "has-active-drawer": "awsui_has-active-drawer_hyvsj_1t7qb_649",
52
+ "mobile-toolbar": "awsui_mobile-toolbar_hyvsj_1t7qb_658",
53
+ "remove-high-contrast-header": "awsui_remove-high-contrast-header_hyvsj_1t7qb_675",
54
+ "mobile-toolbar-nav": "awsui_mobile-toolbar-nav_hyvsj_1t7qb_679",
55
+ "mobile-toolbar-breadcrumbs": "awsui_mobile-toolbar-breadcrumbs_hyvsj_1t7qb_683",
56
+ "mobile-toolbar-tools": "awsui_mobile-toolbar-tools_hyvsj_1t7qb_687",
57
+ "navigation-container": "awsui_navigation-container_hyvsj_1t7qb_696",
58
+ "show-navigation": "awsui_show-navigation_hyvsj_1t7qb_734",
59
+ "animating": "awsui_animating_hyvsj_1t7qb_757",
60
+ "showButtons": "awsui_showButtons_hyvsj_1t7qb_1",
61
+ "navigation": "awsui_navigation_hyvsj_1t7qb_696",
62
+ "openNavigation": "awsui_openNavigation_hyvsj_1t7qb_1",
63
+ "animated-content": "awsui_animated-content_hyvsj_1t7qb_819",
64
+ "hide-navigation": "awsui_hide-navigation_hyvsj_1t7qb_828",
65
+ "notifications": "awsui_notifications_hyvsj_1t7qb_838",
66
+ "sticky-notifications": "awsui_sticky-notifications_hyvsj_1t7qb_844",
67
+ "split-panel-bottom": "awsui_split-panel-bottom_hyvsj_1t7qb_861",
68
+ "position-bottom": "awsui_position-bottom_hyvsj_1t7qb_908",
69
+ "openSplitPanelBottom": "awsui_openSplitPanelBottom_hyvsj_1t7qb_1",
70
+ "split-panel-side": "awsui_split-panel-side_hyvsj_1t7qb_937",
71
+ "position-side": "awsui_position-side_hyvsj_1t7qb_950",
72
+ "tools-container": "awsui_tools-container_hyvsj_1t7qb_972",
73
+ "tools": "awsui_tools_hyvsj_1t7qb_972",
74
+ "openTools": "awsui_openTools_hyvsj_1t7qb_1",
75
+ "has-tools-form-persistence": "awsui_has-tools-form-persistence_hyvsj_1t7qb_1063",
76
+ "hide-tools": "awsui_hide-tools_hyvsj_1t7qb_1073",
77
+ "show-tools": "awsui_show-tools_hyvsj_1t7qb_1085",
78
+ "has-tools-form": "awsui_has-tools-form_hyvsj_1t7qb_1063",
79
+ "trigger-badge-wrapper": "awsui_trigger-badge-wrapper_hyvsj_1t7qb_1168",
80
+ "trigger": "awsui_trigger_hyvsj_1t7qb_1168",
81
+ "selected": "awsui_selected_hyvsj_1t7qb_1242",
82
+ "badge": "awsui_badge_hyvsj_1t7qb_1262",
83
+ "trigger-wrapper": "awsui_trigger-wrapper_hyvsj_1t7qb_1266",
84
+ "dot": "awsui_dot_hyvsj_1t7qb_1277"
85
85
  };
86
86