@cloudscape-design/components 3.0.684 → 3.0.685

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 (127) hide show
  1. package/area-chart/model/use-chart-model.d.ts.map +1 -1
  2. package/area-chart/model/use-chart-model.js +2 -1
  3. package/area-chart/model/use-chart-model.js.map +1 -1
  4. package/area-chart/model/utils.d.ts +0 -1
  5. package/area-chart/model/utils.d.ts.map +1 -1
  6. package/area-chart/model/utils.js +0 -10
  7. package/area-chart/model/utils.js.map +1 -1
  8. package/copy-to-clipboard/index.d.ts +1 -1
  9. package/copy-to-clipboard/index.d.ts.map +1 -1
  10. package/copy-to-clipboard/index.js +2 -2
  11. package/copy-to-clipboard/index.js.map +1 -1
  12. package/copy-to-clipboard/interfaces.d.ts +8 -0
  13. package/copy-to-clipboard/interfaces.d.ts.map +1 -1
  14. package/copy-to-clipboard/interfaces.js.map +1 -1
  15. package/copy-to-clipboard/internal.d.ts +1 -1
  16. package/copy-to-clipboard/internal.d.ts.map +1 -1
  17. package/copy-to-clipboard/internal.js +2 -2
  18. package/copy-to-clipboard/internal.js.map +1 -1
  19. package/i18n/dynamic.js +2 -0
  20. package/i18n/messages/all.all.js +1 -1
  21. package/i18n/messages/all.all.json +1 -1
  22. package/i18n/messages/all.ar.d.ts +3 -0
  23. package/i18n/messages/all.ar.js +1 -0
  24. package/i18n/messages/all.ar.json +1 -0
  25. package/i18n/messages/all.de.js +1 -1
  26. package/i18n/messages/all.de.json +1 -1
  27. package/i18n/messages/all.en-GB.js +1 -1
  28. package/i18n/messages/all.en-GB.json +1 -1
  29. package/i18n/messages/all.en.js +1 -1
  30. package/i18n/messages/all.en.json +1 -1
  31. package/i18n/messages/all.es.js +1 -1
  32. package/i18n/messages/all.es.json +1 -1
  33. package/i18n/messages/all.fr.js +1 -1
  34. package/i18n/messages/all.fr.json +1 -1
  35. package/i18n/messages/all.id.js +1 -1
  36. package/i18n/messages/all.id.json +1 -1
  37. package/i18n/messages/all.it.js +1 -1
  38. package/i18n/messages/all.it.json +1 -1
  39. package/i18n/messages/all.ja.js +1 -1
  40. package/i18n/messages/all.ja.json +1 -1
  41. package/i18n/messages/all.ko.js +1 -1
  42. package/i18n/messages/all.ko.json +1 -1
  43. package/i18n/messages/all.pt-BR.js +1 -1
  44. package/i18n/messages/all.pt-BR.json +1 -1
  45. package/i18n/messages/all.tr.js +1 -1
  46. package/i18n/messages/all.tr.json +1 -1
  47. package/i18n/messages/all.zh-CN.js +1 -1
  48. package/i18n/messages/all.zh-CN.json +1 -1
  49. package/i18n/messages/all.zh-TW.js +1 -1
  50. package/i18n/messages/all.zh-TW.json +1 -1
  51. package/i18n/messages-types.d.ts +12 -0
  52. package/i18n/messages-types.d.ts.map +1 -1
  53. package/i18n/messages-types.js.map +1 -1
  54. package/internal/components/chart-plot/focus-outline.js +1 -1
  55. package/internal/components/chart-plot/focus-outline.js.map +1 -1
  56. package/internal/environment.js +1 -1
  57. package/internal/environment.json +1 -1
  58. package/internal/hooks/use-base-component/index.d.ts.map +1 -1
  59. package/internal/hooks/use-base-component/index.js +1 -2
  60. package/internal/hooks/use-base-component/index.js.map +1 -1
  61. package/internal/manifest.json +1 -1
  62. package/internal/utils/circle-index.d.ts +2 -0
  63. package/internal/utils/circle-index.d.ts.map +1 -0
  64. package/internal/utils/circle-index.js +13 -0
  65. package/internal/utils/circle-index.js.map +1 -0
  66. package/mixed-line-bar-chart/hooks/use-navigation.d.ts.map +1 -1
  67. package/mixed-line-bar-chart/hooks/use-navigation.js +1 -10
  68. package/mixed-line-bar-chart/hooks/use-navigation.js.map +1 -1
  69. package/package.json +3 -1
  70. package/property-filter/filtering-token/index.d.ts.map +1 -0
  71. package/{internal/components → property-filter}/filtering-token/index.js +7 -6
  72. package/property-filter/filtering-token/index.js.map +1 -0
  73. package/property-filter/filtering-token/styles.css.js +12 -0
  74. package/{internal/components → property-filter}/filtering-token/styles.scoped.css +15 -15
  75. package/property-filter/filtering-token/styles.selectors.js +13 -0
  76. package/property-filter/test-classes/styles.css.js +14 -0
  77. package/property-filter/test-classes/styles.scoped.css +39 -0
  78. package/property-filter/test-classes/styles.selectors.js +15 -0
  79. package/property-filter/token-editor.d.ts.map +1 -1
  80. package/property-filter/token-editor.js +7 -5
  81. package/property-filter/token-editor.js.map +1 -1
  82. package/property-filter/token.js +1 -1
  83. package/property-filter/token.js.map +1 -1
  84. package/select/parts/filter.d.ts +1 -1
  85. package/slider/styles.css.js +26 -27
  86. package/slider/styles.scoped.css +80 -80
  87. package/slider/styles.selectors.js +26 -27
  88. package/table/body-cell/styles.css.js +46 -46
  89. package/table/body-cell/styles.scoped.css +525 -274
  90. package/table/body-cell/styles.selectors.js +46 -46
  91. package/table/body-cell/td-element.d.ts.map +1 -1
  92. package/table/body-cell/td-element.js +3 -4
  93. package/table/body-cell/td-element.js.map +1 -1
  94. package/tabs/styles.css.js +28 -28
  95. package/tabs/styles.scoped.css +53 -53
  96. package/tabs/styles.selectors.js +28 -28
  97. package/tabs/tab-header-bar.d.ts.map +1 -1
  98. package/tabs/tab-header-bar.js +1 -9
  99. package/tabs/tab-header-bar.js.map +1 -1
  100. package/test-utils/dom/copy-to-clipboard/index.d.ts +3 -1
  101. package/test-utils/dom/copy-to-clipboard/index.js +2 -2
  102. package/test-utils/dom/copy-to-clipboard/index.js.map +1 -1
  103. package/test-utils/dom/property-filter/index.d.ts +25 -2
  104. package/test-utils/dom/property-filter/index.js +59 -6
  105. package/test-utils/dom/property-filter/index.js.map +1 -1
  106. package/test-utils/selectors/copy-to-clipboard/index.d.ts +3 -1
  107. package/test-utils/selectors/copy-to-clipboard/index.js +4 -2
  108. package/test-utils/selectors/copy-to-clipboard/index.js.map +1 -1
  109. package/test-utils/selectors/property-filter/index.d.ts +25 -2
  110. package/test-utils/selectors/property-filter/index.js +61 -6
  111. package/test-utils/selectors/property-filter/index.js.map +1 -1
  112. package/test-utils/tsconfig.tsbuildinfo +1 -1
  113. package/internal/components/filtering-token/index.d.ts.map +0 -1
  114. package/internal/components/filtering-token/index.js.map +0 -1
  115. package/internal/components/filtering-token/styles.css.js +0 -12
  116. package/internal/components/filtering-token/styles.selectors.js +0 -13
  117. package/internal/hooks/focus-visible/index.d.ts +0 -3
  118. package/internal/hooks/focus-visible/index.d.ts.map +0 -1
  119. package/internal/hooks/focus-visible/index.js +0 -49
  120. package/internal/hooks/focus-visible/index.js.map +0 -1
  121. package/test-utils/dom/internal/filtering-token.d.ts +0 -8
  122. package/test-utils/dom/internal/filtering-token.js +0 -21
  123. package/test-utils/dom/internal/filtering-token.js.map +0 -1
  124. package/test-utils/selectors/internal/filtering-token.d.ts +0 -8
  125. package/test-utils/selectors/internal/filtering-token.js +0 -21
  126. package/test-utils/selectors/internal/filtering-token.js.map +0 -1
  127. /package/{internal/components → property-filter}/filtering-token/index.d.ts +0 -0
@@ -17,6 +17,7 @@ import { getAllFocusables } from '../internal/components/focus-lock/utils';
17
17
  import useHiddenDescription from '../internal/hooks/use-hidden-description';
18
18
  import Tooltip from '../internal/components/tooltip';
19
19
  import { nodeBelongs } from '../internal/utils/node-belongs';
20
+ import { circleIndex } from '../internal/utils/circle-index';
20
21
  const tabSelector = `.${styles['tabs-tab-link']}`;
21
22
  const focusedTabSelector = `[role="tab"].${styles['tabs-tab-focused']}`;
22
23
  const focusableTabSelector = `.${styles['tabs-tab-focusable']}`;
@@ -349,13 +350,4 @@ const TabTrigger = forwardRef(({ tab, elementProps, }, ref) => {
349
350
  export function getTabElementId({ namespace, tabId }) {
350
351
  return namespace + '-' + tabId;
351
352
  }
352
- function circleIndex(index, [from, to]) {
353
- if (index < from) {
354
- return to;
355
- }
356
- if (index > to) {
357
- return from;
358
- }
359
- return index;
360
- }
361
353
  //# sourceMappingURL=tab-header-bar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tab-header-bar.js","sourceRoot":"","sources":["../../../src/tabs/tab-header-bar.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, { useRef, useState, useEffect, forwardRef } from 'react';\nimport { TabsProps } from './interfaces';\nimport clsx from 'clsx';\nimport styles from './styles.css.js';\nimport { InternalButton } from '../button/internal';\nimport handleKey from '../internal/utils/handle-key';\nimport { KeyCode } from '../internal/keycode';\nimport {\n onPaginationClick,\n hasHorizontalOverflow,\n hasInlineStartOverflow,\n hasInlineEndOverflow,\n scrollIntoView,\n} from './scroll-utils';\nimport { hasModifierKeys, isPlainLeftClick } from '../internal/events';\nimport { useVisualRefresh } from '../internal/hooks/use-visual-mode';\nimport { useInternalI18n } from '../i18n/context';\nimport { useContainerQuery } from '@cloudscape-design/component-toolkit';\nimport {\n SingleTabStopNavigationAPI,\n SingleTabStopNavigationProvider,\n useSingleTabStopNavigation,\n} from '../internal/context/single-tab-stop-navigation-context';\nimport { useMergeRefs } from '../internal/hooks/use-merge-refs';\nimport { getAllFocusables } from '../internal/components/focus-lock/utils';\nimport useHiddenDescription from '../internal/hooks/use-hidden-description';\nimport Tooltip from '../internal/components/tooltip';\nimport { nodeBelongs } from '../internal/utils/node-belongs';\nimport { ButtonProps } from '../button/interfaces';\n\nconst tabSelector = `.${styles['tabs-tab-link']}`;\nconst focusedTabSelector = `[role=\"tab\"].${styles['tabs-tab-focused']}`;\nconst focusableTabSelector = `.${styles['tabs-tab-focusable']}`;\n\nfunction dismissButton(\n dismissLabel: TabsProps.Tab['dismissLabel'],\n dismissDisabled: TabsProps.Tab['dismissDisabled'],\n onDismiss: TabsProps.Tab['onDismiss']\n) {\n return (\n <InternalButton\n onClick={onDismiss}\n variant=\"icon\"\n iconName=\"close\"\n formAction=\"none\"\n ariaLabel={dismissLabel}\n disabled={dismissDisabled}\n />\n );\n}\n\nexport interface TabHeaderBarProps {\n onChange: (changeDetail: TabsProps.ChangeDetail) => void;\n activeTabId: TabsProps['activeTabId'];\n tabs: TabsProps['tabs'];\n variant: TabsProps['variant'];\n idNamespace: string;\n ariaLabel?: string;\n ariaLabelledby?: string;\n i18nStrings?: TabsProps.I18nStrings;\n}\n\nexport function TabHeaderBar({\n onChange,\n activeTabId,\n tabs,\n variant,\n idNamespace,\n ariaLabel,\n ariaLabelledby,\n i18nStrings,\n}: TabHeaderBarProps) {\n const headerBarRef = useRef<HTMLUListElement>(null);\n const activeTabHeaderRef = useRef<null | HTMLElement>(null);\n const inlineStartOverflowButton = useRef<HTMLElement>(null);\n const i18n = useInternalI18n('tabs');\n\n const isVisualRefresh = useVisualRefresh();\n\n const containerObjectRef = useRef<HTMLDivElement>(null);\n const [widthChange, containerMeasureRef] = useContainerQuery<number>(rect => rect.contentBoxWidth);\n const containerRef = useMergeRefs(containerObjectRef, containerMeasureRef);\n const tabRefs = useRef<Map<string, HTMLElement>>(new Map());\n const [horizontalOverflow, setHorizontalOverflow] = useState(false);\n const [inlineStartOverflow, setInlineStartOverflow] = useState(false);\n const [inlineEndOverflow, setInlineEndOverflow] = useState(false);\n const [focusedTabId, setFocusedTabId] = useState(activeTabId);\n const [previousActiveTabId, setPreviousActiveTabId] = useState<string | undefined>(activeTabId);\n const hasActionOrDismissible = tabs.some(tab => tab.action || tab.dismissible);\n const tabActionAttributes = hasActionOrDismissible\n ? {\n role: 'application',\n 'aria-roledescription': i18n(\n 'i18nStrings.tabsWithActionsAriaRoleDescription',\n i18nStrings?.tabsWithActionsAriaRoleDescription\n ),\n }\n : {\n role: 'tablist',\n };\n\n useEffect(() => {\n if (headerBarRef.current) {\n setHorizontalOverflow(hasHorizontalOverflow(headerBarRef.current, inlineStartOverflowButton));\n setInlineStartOverflow(hasInlineStartOverflow(headerBarRef.current));\n setInlineEndOverflow(hasInlineEndOverflow(headerBarRef.current));\n }\n }, [widthChange, tabs]);\n\n const scrollIntoViewIfPossible = (smooth: boolean) => {\n if (!activeTabId) {\n return;\n }\n const activeTabRef = tabRefs.current.get(activeTabId);\n if (activeTabRef && headerBarRef.current) {\n scrollIntoView(activeTabRef, headerBarRef.current, smooth);\n }\n };\n\n useEffect(() => {\n // Delay scrollIntoView as the position is depending on parent elements\n // (effects are called inside-out in the component tree).\n // Wait one frame to allow parents to complete it's calculation.\n requestAnimationFrame(() => {\n scrollIntoViewIfPossible(false);\n });\n // Non-smooth scrolling should not be called upon activeId change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [horizontalOverflow, widthChange, tabs.length]);\n\n useEffect(() => {\n scrollIntoViewIfPossible(true);\n // Smooth scrolling should only be called upon activeId change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeTabId]);\n\n useEffect(() => {\n /*\n When the selected tab changes and we are currently already focused on a tab,\n move the focus to the newly selected tab.\n */\n if (headerBarRef.current?.contains(document.activeElement)) {\n if (document.activeElement !== activeTabHeaderRef.current) {\n activeTabHeaderRef.current?.focus({ preventScroll: true });\n }\n }\n }, [activeTabId]);\n\n const onScroll = () => {\n if (headerBarRef.current) {\n setInlineStartOverflow(hasInlineStartOverflow(headerBarRef.current));\n setInlineEndOverflow(hasInlineEndOverflow(headerBarRef.current));\n }\n };\n\n const classes = clsx({\n [styles['tabs-header']]: true,\n [styles['tabs-header-with-divider']]: variant === 'default' || isVisualRefresh,\n });\n\n const leftButtonClasses = clsx({\n [styles['pagination-button']]: true,\n [styles['pagination-button-left']]: true,\n [styles['pagination-button-left-scrollable']]: inlineStartOverflow,\n });\n\n const rightButtonClasses = clsx({\n [styles['pagination-button']]: true,\n [styles['pagination-button-right']]: true,\n [styles['pagination-button-right-scrollable']]: inlineEndOverflow,\n });\n\n const navigationAPI = useRef<SingleTabStopNavigationAPI>(null);\n\n function getNextFocusTarget(): null | HTMLElement {\n if (!containerObjectRef.current) {\n return null;\n }\n const tabElements: HTMLButtonElement[] = Array.from(containerObjectRef.current.querySelectorAll(tabSelector));\n return tabElements.find(tab => tab.matches(focusedTabSelector)) ?? tabElements.find(tab => !tab.disabled) ?? null;\n }\n\n function onUnregisterFocusable(focusableElement: HTMLElement) {\n const isUnregisteringFocusedNode = nodeBelongs(focusableElement, document.activeElement);\n const isFocusableActionOrDismissible = !focusableElement.classList.contains(styles['tabs-tab-link']);\n if (isUnregisteringFocusedNode && !isFocusableActionOrDismissible) {\n // Wait for unmounted node to get removed from the DOM.\n requestAnimationFrame(() => {\n const nextFocusTarget = navigationAPI.current?.getFocusTarget();\n const tabLinkButton = nextFocusTarget?.querySelector(`.${styles['tabs-tab-link']}`) as HTMLElement;\n tabLinkButton?.focus();\n });\n }\n }\n\n useEffect(() => {\n navigationAPI.current?.updateFocusTarget();\n });\n function onFocus() {\n navigationAPI.current?.updateFocusTarget();\n }\n function onBlur() {\n navigationAPI.current?.updateFocusTarget();\n }\n\n function onKeyDown(event: React.KeyboardEvent) {\n const focusTarget = document.activeElement;\n const specialKeys = [KeyCode.right, KeyCode.left, KeyCode.end, KeyCode.home, KeyCode.pageUp, KeyCode.pageDown];\n const isActionOpen = document.querySelector(`.${styles['tabs-tab-action']} [aria-expanded=\"true\"]`);\n const isDismissOrActionFocused = !focusTarget?.classList.contains(styles['tabs-tab-link']);\n\n if (isActionOpen) {\n return;\n }\n if (event.key === 'Tab' && !event.shiftKey && isDismissOrActionFocused) {\n event.preventDefault();\n const panelId = `${idNamespace}-${activeTabId}-panel`;\n const panel = document.getElementById(panelId);\n panel?.focus();\n }\n if (hasModifierKeys(event) || specialKeys.indexOf(event.keyCode) === -1) {\n return;\n }\n if (!containerObjectRef.current || !focusTarget) {\n return;\n }\n event.preventDefault();\n\n const focusables = getFocusablesFrom(containerObjectRef.current);\n const activeIndex = document.activeElement instanceof HTMLElement ? focusables.indexOf(document.activeElement) : -1;\n handleKey(event as any, {\n onHome: () => focusElement(focusables[0]),\n onEnd: () => focusElement(focusables[focusables.length - 1]),\n onInlineStart: () => focusElement(focusables[circleIndex(activeIndex - 1, [0, focusables.length - 1])]),\n onInlineEnd: () => focusElement(focusables[circleIndex(activeIndex + 1, [0, focusables.length - 1])]),\n onPageDown: () => inlineEndOverflow && onPaginationClick(headerBarRef, 'forward'),\n onPageUp: () => inlineStartOverflow && onPaginationClick(headerBarRef, 'backward'),\n });\n }\n function focusElement(element: HTMLElement) {\n element.focus();\n // If focusable element is a tab - fire the onChange for it.\n const tabsById = tabs.reduce((map, tab) => map.set(tab.id, tab), new Map<string, TabsProps.Tab>());\n for (const [tabId, focusTargetTabTriggerElement] of tabRefs.current.entries()) {\n const focusTargetTabLabelElement = focusTargetTabTriggerElement?.querySelector(`.${styles['tabs-tab-link']}`);\n if (tabId !== activeTabId && focusTargetTabLabelElement === element) {\n setPreviousActiveTabId(tabId);\n setFocusedTabId(tabId);\n\n if (!tabsById.get(tabId)?.disabled) {\n onChange({ activeTabId: tabId, activeTabHref: tabsById.get(tabId)?.href });\n }\n break;\n }\n }\n }\n // List all non-disabled and registered focusables: those are eligible for keyboard navigation.\n function getFocusablesFrom(target: HTMLElement) {\n function isElementRegistered(element: HTMLElement) {\n return navigationAPI.current?.isRegistered(element) ?? false;\n }\n function isElementFocusable(element: HTMLElement) {\n if (element instanceof HTMLButtonElement) {\n return !element.disabled || element.closest(focusableTabSelector);\n }\n\n return element.matches(focusableTabSelector);\n }\n return getAllFocusables(target).filter(el => isElementRegistered(el) && isElementFocusable(el));\n }\n\n const TabList = hasActionOrDismissible ? 'div' : 'ul';\n\n return (\n //converted span to div as list should not be a child of span for HTML validation\n <div className={classes} ref={containerRef}>\n {horizontalOverflow && (\n <span ref={inlineStartOverflowButton} className={leftButtonClasses}>\n <InternalButton\n formAction=\"none\"\n variant=\"icon\"\n iconName=\"angle-left\"\n disabled={!inlineStartOverflow}\n __focusable={true}\n onClick={() => onPaginationClick(headerBarRef, 'backward')}\n ariaLabel={i18n('i18nStrings.scrollLeftAriaLabel', i18nStrings?.scrollLeftAriaLabel)}\n />\n </span>\n )}\n <SingleTabStopNavigationProvider\n ref={navigationAPI}\n navigationActive={true}\n getNextFocusTarget={getNextFocusTarget}\n onUnregisterFocusable={onUnregisterFocusable}\n >\n <TabList\n {...tabActionAttributes}\n className={styles['tabs-header-list']}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n ref={headerBarRef as never}\n onScroll={onScroll}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n >\n {tabs.map(renderTabHeader)}\n </TabList>\n </SingleTabStopNavigationProvider>\n {horizontalOverflow && (\n <span className={rightButtonClasses}>\n <InternalButton\n formAction=\"none\"\n variant=\"icon\"\n iconName=\"angle-right\"\n disabled={!inlineEndOverflow}\n __focusable={true}\n onClick={() => onPaginationClick(headerBarRef, 'forward')}\n ariaLabel={i18n('i18nStrings.scrollRightAriaLabel', i18nStrings?.scrollRightAriaLabel)}\n />\n </span>\n )}\n </div>\n );\n\n function renderTabHeader(tab: TabsProps.Tab) {\n const { dismissible, dismissLabel, dismissDisabled, action, onDismiss } = tab;\n const isActive = activeTabId === tab.id && !tab.disabled;\n\n const clickTab = (event: React.MouseEvent) => {\n if (tab.disabled) {\n event.preventDefault();\n return;\n }\n\n // if the primary mouse button is clicked with a modifier key, the browser will handle opening a new tab\n const specialKey = !isPlainLeftClick(event);\n if (specialKey && tab.href) {\n return;\n }\n\n event.preventDefault();\n // for browsers that do not focus buttons on button click\n if (!tab.href) {\n const clickedTabRef = tabRefs.current.get(tab.id) as undefined | HTMLButtonElement;\n if (clickedTabRef) {\n if (clickedTabRef && clickedTabRef !== document.activeElement) {\n clickedTabRef.focus({ preventScroll: true });\n }\n }\n }\n\n if (tab.id === activeTabId) {\n return;\n }\n\n setFocusedTabId(tab.id);\n setPreviousActiveTabId(tab.id);\n onChange({ activeTabId: tab.id, activeTabHref: tab.href });\n };\n\n const classes = clsx({\n [styles['tabs-tab-link']]: true,\n [styles.refresh]: isVisualRefresh,\n [styles['tabs-tab-active']]: activeTabId === tab.id && !tab.disabled,\n [styles['tabs-tab-focused']]: focusedTabId === tab.id,\n [styles['tabs-tab-active']]: isActive,\n [styles['tabs-tab-disabled']]: tab.disabled,\n [styles['tabs-tab-focusable']]: !tab.disabled || (tab.disabled && !!tab.disabledReason),\n });\n\n const tabHeaderContainerClasses = clsx({\n [styles['tabs-tab-header-container']]: true,\n [styles.refresh]: isVisualRefresh,\n [styles['tabs-tab-active']]: isActive,\n [styles['tabs-tab-disabled']]: tab.disabled,\n [styles['tabs-tab-focusable']]: !tab.disabled || (tab.disabled && !!tab.disabledReason),\n });\n\n const tabActionClasses = clsx({\n [styles['tabs-tab-action']]: true,\n [styles['tabs-tab-active']]: isActive,\n });\n\n const commonProps: (JSX.IntrinsicElements['a'] | JSX.IntrinsicElements['button']) & { 'data-testid': string } = {\n className: classes,\n 'aria-controls': `${idNamespace}-${tab.id}-panel`,\n 'data-testid': tab.id,\n id: getTabElementId({ namespace: idNamespace, tabId: tab.id }),\n onClick: clickTab,\n };\n\n const tabHeaderContainerAriaProps = hasActionOrDismissible\n ? {\n role: 'group',\n 'aria-labelledby': commonProps.id,\n }\n : {};\n\n if (!hasActionOrDismissible) {\n commonProps['aria-selected'] = activeTabId === tab.id;\n commonProps.role = 'tab';\n } else {\n commonProps['aria-expanded'] = activeTabId === tab.id;\n }\n\n if (tab.disabled) {\n commonProps['aria-disabled'] = 'true';\n }\n\n const setElement = (tabElement: null | HTMLElement) => {\n if (tab.id === activeTabId) {\n activeTabHeaderRef.current = tabElement;\n }\n tabRefs.current.set(tab.id, tabElement as HTMLElement);\n };\n\n const handleDismiss: ButtonProps['onClick'] = event => {\n if (!containerObjectRef.current || !onDismiss) {\n return;\n }\n const tabElements = getFocusablesFrom(containerObjectRef.current).filter(el =>\n el.classList.contains(styles['tabs-tab-link'])\n );\n const activeTabIndex = tabElements.findIndex(el => el.dataset.testid === tab.id);\n tabElements.splice(activeTabIndex, 1);\n let nextActive: HTMLElement | undefined;\n if (previousActiveTabId && previousActiveTabId !== tab.id) {\n nextActive = tabElements.find(el => el.dataset.testid === previousActiveTabId);\n } else {\n nextActive = tabElements[Math.min(tabElements.length - 1, activeTabIndex)];\n }\n if (nextActive && nextActive.dataset.testid) {\n onChange({ activeTabId: nextActive.dataset.testid });\n nextActive.focus();\n }\n onDismiss(event);\n };\n\n const TabItem = hasActionOrDismissible ? 'div' : 'li';\n return (\n <TabItem\n ref={(element: any) => tabRefs.current.set(tab.id, element as HTMLElement)}\n className={styles['tabs-tab']}\n role=\"presentation\"\n key={tab.id}\n >\n <div className={tabHeaderContainerClasses} {...tabHeaderContainerAriaProps}>\n <TabTrigger ref={setElement} tab={tab} elementProps={commonProps} />\n {action && <span className={tabActionClasses}>{action}</span>}\n {dismissible && (\n <span className={styles['tabs-tab-dismiss']}>\n {dismissButton(dismissLabel, dismissDisabled, handleDismiss)}\n </span>\n )}\n </div>\n </TabItem>\n );\n }\n}\n\nconst TabTrigger = forwardRef(\n (\n {\n tab,\n elementProps,\n }: { tab: TabsProps.Tab; elementProps: React.HTMLAttributes<HTMLAnchorElement | HTMLButtonElement> },\n ref: React.Ref<HTMLElement>\n ) => {\n const refObject = useRef<HTMLElement>(null);\n const tabLabelRefObject = useRef<HTMLElement>(null);\n const mergedRef = useMergeRefs(refObject, ref);\n const { tabIndex } = useSingleTabStopNavigation(refObject);\n const isDisabledWithReason = tab.disabled && !!tab.disabledReason;\n const [showTooltip, setShowTooltip] = useState(false);\n const { targetProps, descriptionEl } = useHiddenDescription(tab.disabledReason);\n const children = (\n <>\n <span className={styles['tabs-tab-label']} ref={tabLabelRefObject}>\n {tab.label}\n </span>\n {isDisabledWithReason && (\n <>\n {descriptionEl}\n {showTooltip && (\n <Tooltip\n className={styles['disabled-reason-tooltip']}\n trackRef={tabLabelRefObject}\n value={tab.disabledReason!}\n />\n )}\n </>\n )}\n </>\n );\n\n const handlers = {\n onFocus: () => setShowTooltip(true),\n onBlur: () => setShowTooltip(false),\n onMouseEnter: () => setShowTooltip(true),\n onMouseLeave: () => setShowTooltip(false),\n };\n\n const commonProps = {\n ...elementProps,\n ...(isDisabledWithReason ? targetProps : {}),\n ...(isDisabledWithReason ? handlers : {}),\n ref: mergedRef,\n tabIndex: tabIndex,\n };\n\n return tab.href ? (\n <a {...commonProps} href={tab.href}>\n {children}\n </a>\n ) : (\n <button {...commonProps} type=\"button\" disabled={tab.disabled && !isDisabledWithReason}>\n {children}\n </button>\n );\n }\n);\n\nexport function getTabElementId({ namespace, tabId }: { namespace: string; tabId: string }) {\n return namespace + '-' + tabId;\n}\n\nfunction circleIndex(index: number, [from, to]: [number, number]): number {\n if (index < from) {\n return to;\n }\n if (index > to) {\n return from;\n }\n return index;\n}\n"]}
1
+ {"version":3,"file":"tab-header-bar.js","sourceRoot":"","sources":["../../../src/tabs/tab-header-bar.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, { useRef, useState, useEffect, forwardRef } from 'react';\nimport { TabsProps } from './interfaces';\nimport clsx from 'clsx';\nimport styles from './styles.css.js';\nimport { InternalButton } from '../button/internal';\nimport handleKey from '../internal/utils/handle-key';\nimport { KeyCode } from '../internal/keycode';\nimport {\n onPaginationClick,\n hasHorizontalOverflow,\n hasInlineStartOverflow,\n hasInlineEndOverflow,\n scrollIntoView,\n} from './scroll-utils';\nimport { hasModifierKeys, isPlainLeftClick } from '../internal/events';\nimport { useVisualRefresh } from '../internal/hooks/use-visual-mode';\nimport { useInternalI18n } from '../i18n/context';\nimport { useContainerQuery } from '@cloudscape-design/component-toolkit';\nimport {\n SingleTabStopNavigationAPI,\n SingleTabStopNavigationProvider,\n useSingleTabStopNavigation,\n} from '../internal/context/single-tab-stop-navigation-context';\nimport { useMergeRefs } from '../internal/hooks/use-merge-refs';\nimport { getAllFocusables } from '../internal/components/focus-lock/utils';\nimport useHiddenDescription from '../internal/hooks/use-hidden-description';\nimport Tooltip from '../internal/components/tooltip';\nimport { nodeBelongs } from '../internal/utils/node-belongs';\nimport { ButtonProps } from '../button/interfaces';\nimport { circleIndex } from '../internal/utils/circle-index';\n\nconst tabSelector = `.${styles['tabs-tab-link']}`;\nconst focusedTabSelector = `[role=\"tab\"].${styles['tabs-tab-focused']}`;\nconst focusableTabSelector = `.${styles['tabs-tab-focusable']}`;\n\nfunction dismissButton(\n dismissLabel: TabsProps.Tab['dismissLabel'],\n dismissDisabled: TabsProps.Tab['dismissDisabled'],\n onDismiss: TabsProps.Tab['onDismiss']\n) {\n return (\n <InternalButton\n onClick={onDismiss}\n variant=\"icon\"\n iconName=\"close\"\n formAction=\"none\"\n ariaLabel={dismissLabel}\n disabled={dismissDisabled}\n />\n );\n}\n\nexport interface TabHeaderBarProps {\n onChange: (changeDetail: TabsProps.ChangeDetail) => void;\n activeTabId: TabsProps['activeTabId'];\n tabs: TabsProps['tabs'];\n variant: TabsProps['variant'];\n idNamespace: string;\n ariaLabel?: string;\n ariaLabelledby?: string;\n i18nStrings?: TabsProps.I18nStrings;\n}\n\nexport function TabHeaderBar({\n onChange,\n activeTabId,\n tabs,\n variant,\n idNamespace,\n ariaLabel,\n ariaLabelledby,\n i18nStrings,\n}: TabHeaderBarProps) {\n const headerBarRef = useRef<HTMLUListElement>(null);\n const activeTabHeaderRef = useRef<null | HTMLElement>(null);\n const inlineStartOverflowButton = useRef<HTMLElement>(null);\n const i18n = useInternalI18n('tabs');\n\n const isVisualRefresh = useVisualRefresh();\n\n const containerObjectRef = useRef<HTMLDivElement>(null);\n const [widthChange, containerMeasureRef] = useContainerQuery<number>(rect => rect.contentBoxWidth);\n const containerRef = useMergeRefs(containerObjectRef, containerMeasureRef);\n const tabRefs = useRef<Map<string, HTMLElement>>(new Map());\n const [horizontalOverflow, setHorizontalOverflow] = useState(false);\n const [inlineStartOverflow, setInlineStartOverflow] = useState(false);\n const [inlineEndOverflow, setInlineEndOverflow] = useState(false);\n const [focusedTabId, setFocusedTabId] = useState(activeTabId);\n const [previousActiveTabId, setPreviousActiveTabId] = useState<string | undefined>(activeTabId);\n const hasActionOrDismissible = tabs.some(tab => tab.action || tab.dismissible);\n const tabActionAttributes = hasActionOrDismissible\n ? {\n role: 'application',\n 'aria-roledescription': i18n(\n 'i18nStrings.tabsWithActionsAriaRoleDescription',\n i18nStrings?.tabsWithActionsAriaRoleDescription\n ),\n }\n : {\n role: 'tablist',\n };\n\n useEffect(() => {\n if (headerBarRef.current) {\n setHorizontalOverflow(hasHorizontalOverflow(headerBarRef.current, inlineStartOverflowButton));\n setInlineStartOverflow(hasInlineStartOverflow(headerBarRef.current));\n setInlineEndOverflow(hasInlineEndOverflow(headerBarRef.current));\n }\n }, [widthChange, tabs]);\n\n const scrollIntoViewIfPossible = (smooth: boolean) => {\n if (!activeTabId) {\n return;\n }\n const activeTabRef = tabRefs.current.get(activeTabId);\n if (activeTabRef && headerBarRef.current) {\n scrollIntoView(activeTabRef, headerBarRef.current, smooth);\n }\n };\n\n useEffect(() => {\n // Delay scrollIntoView as the position is depending on parent elements\n // (effects are called inside-out in the component tree).\n // Wait one frame to allow parents to complete it's calculation.\n requestAnimationFrame(() => {\n scrollIntoViewIfPossible(false);\n });\n // Non-smooth scrolling should not be called upon activeId change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [horizontalOverflow, widthChange, tabs.length]);\n\n useEffect(() => {\n scrollIntoViewIfPossible(true);\n // Smooth scrolling should only be called upon activeId change\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeTabId]);\n\n useEffect(() => {\n /*\n When the selected tab changes and we are currently already focused on a tab,\n move the focus to the newly selected tab.\n */\n if (headerBarRef.current?.contains(document.activeElement)) {\n if (document.activeElement !== activeTabHeaderRef.current) {\n activeTabHeaderRef.current?.focus({ preventScroll: true });\n }\n }\n }, [activeTabId]);\n\n const onScroll = () => {\n if (headerBarRef.current) {\n setInlineStartOverflow(hasInlineStartOverflow(headerBarRef.current));\n setInlineEndOverflow(hasInlineEndOverflow(headerBarRef.current));\n }\n };\n\n const classes = clsx({\n [styles['tabs-header']]: true,\n [styles['tabs-header-with-divider']]: variant === 'default' || isVisualRefresh,\n });\n\n const leftButtonClasses = clsx({\n [styles['pagination-button']]: true,\n [styles['pagination-button-left']]: true,\n [styles['pagination-button-left-scrollable']]: inlineStartOverflow,\n });\n\n const rightButtonClasses = clsx({\n [styles['pagination-button']]: true,\n [styles['pagination-button-right']]: true,\n [styles['pagination-button-right-scrollable']]: inlineEndOverflow,\n });\n\n const navigationAPI = useRef<SingleTabStopNavigationAPI>(null);\n\n function getNextFocusTarget(): null | HTMLElement {\n if (!containerObjectRef.current) {\n return null;\n }\n const tabElements: HTMLButtonElement[] = Array.from(containerObjectRef.current.querySelectorAll(tabSelector));\n return tabElements.find(tab => tab.matches(focusedTabSelector)) ?? tabElements.find(tab => !tab.disabled) ?? null;\n }\n\n function onUnregisterFocusable(focusableElement: HTMLElement) {\n const isUnregisteringFocusedNode = nodeBelongs(focusableElement, document.activeElement);\n const isFocusableActionOrDismissible = !focusableElement.classList.contains(styles['tabs-tab-link']);\n if (isUnregisteringFocusedNode && !isFocusableActionOrDismissible) {\n // Wait for unmounted node to get removed from the DOM.\n requestAnimationFrame(() => {\n const nextFocusTarget = navigationAPI.current?.getFocusTarget();\n const tabLinkButton = nextFocusTarget?.querySelector(`.${styles['tabs-tab-link']}`) as HTMLElement;\n tabLinkButton?.focus();\n });\n }\n }\n\n useEffect(() => {\n navigationAPI.current?.updateFocusTarget();\n });\n function onFocus() {\n navigationAPI.current?.updateFocusTarget();\n }\n function onBlur() {\n navigationAPI.current?.updateFocusTarget();\n }\n\n function onKeyDown(event: React.KeyboardEvent) {\n const focusTarget = document.activeElement;\n const specialKeys = [KeyCode.right, KeyCode.left, KeyCode.end, KeyCode.home, KeyCode.pageUp, KeyCode.pageDown];\n const isActionOpen = document.querySelector(`.${styles['tabs-tab-action']} [aria-expanded=\"true\"]`);\n const isDismissOrActionFocused = !focusTarget?.classList.contains(styles['tabs-tab-link']);\n\n if (isActionOpen) {\n return;\n }\n if (event.key === 'Tab' && !event.shiftKey && isDismissOrActionFocused) {\n event.preventDefault();\n const panelId = `${idNamespace}-${activeTabId}-panel`;\n const panel = document.getElementById(panelId);\n panel?.focus();\n }\n if (hasModifierKeys(event) || specialKeys.indexOf(event.keyCode) === -1) {\n return;\n }\n if (!containerObjectRef.current || !focusTarget) {\n return;\n }\n event.preventDefault();\n\n const focusables = getFocusablesFrom(containerObjectRef.current);\n const activeIndex = document.activeElement instanceof HTMLElement ? focusables.indexOf(document.activeElement) : -1;\n handleKey(event as any, {\n onHome: () => focusElement(focusables[0]),\n onEnd: () => focusElement(focusables[focusables.length - 1]),\n onInlineStart: () => focusElement(focusables[circleIndex(activeIndex - 1, [0, focusables.length - 1])]),\n onInlineEnd: () => focusElement(focusables[circleIndex(activeIndex + 1, [0, focusables.length - 1])]),\n onPageDown: () => inlineEndOverflow && onPaginationClick(headerBarRef, 'forward'),\n onPageUp: () => inlineStartOverflow && onPaginationClick(headerBarRef, 'backward'),\n });\n }\n function focusElement(element: HTMLElement) {\n element.focus();\n // If focusable element is a tab - fire the onChange for it.\n const tabsById = tabs.reduce((map, tab) => map.set(tab.id, tab), new Map<string, TabsProps.Tab>());\n for (const [tabId, focusTargetTabTriggerElement] of tabRefs.current.entries()) {\n const focusTargetTabLabelElement = focusTargetTabTriggerElement?.querySelector(`.${styles['tabs-tab-link']}`);\n if (tabId !== activeTabId && focusTargetTabLabelElement === element) {\n setPreviousActiveTabId(tabId);\n setFocusedTabId(tabId);\n\n if (!tabsById.get(tabId)?.disabled) {\n onChange({ activeTabId: tabId, activeTabHref: tabsById.get(tabId)?.href });\n }\n break;\n }\n }\n }\n // List all non-disabled and registered focusables: those are eligible for keyboard navigation.\n function getFocusablesFrom(target: HTMLElement) {\n function isElementRegistered(element: HTMLElement) {\n return navigationAPI.current?.isRegistered(element) ?? false;\n }\n function isElementFocusable(element: HTMLElement) {\n if (element instanceof HTMLButtonElement) {\n return !element.disabled || element.closest(focusableTabSelector);\n }\n\n return element.matches(focusableTabSelector);\n }\n return getAllFocusables(target).filter(el => isElementRegistered(el) && isElementFocusable(el));\n }\n\n const TabList = hasActionOrDismissible ? 'div' : 'ul';\n\n return (\n //converted span to div as list should not be a child of span for HTML validation\n <div className={classes} ref={containerRef}>\n {horizontalOverflow && (\n <span ref={inlineStartOverflowButton} className={leftButtonClasses}>\n <InternalButton\n formAction=\"none\"\n variant=\"icon\"\n iconName=\"angle-left\"\n disabled={!inlineStartOverflow}\n __focusable={true}\n onClick={() => onPaginationClick(headerBarRef, 'backward')}\n ariaLabel={i18n('i18nStrings.scrollLeftAriaLabel', i18nStrings?.scrollLeftAriaLabel)}\n />\n </span>\n )}\n <SingleTabStopNavigationProvider\n ref={navigationAPI}\n navigationActive={true}\n getNextFocusTarget={getNextFocusTarget}\n onUnregisterFocusable={onUnregisterFocusable}\n >\n <TabList\n {...tabActionAttributes}\n className={styles['tabs-header-list']}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n ref={headerBarRef as never}\n onScroll={onScroll}\n onKeyDown={onKeyDown}\n onFocus={onFocus}\n onBlur={onBlur}\n >\n {tabs.map(renderTabHeader)}\n </TabList>\n </SingleTabStopNavigationProvider>\n {horizontalOverflow && (\n <span className={rightButtonClasses}>\n <InternalButton\n formAction=\"none\"\n variant=\"icon\"\n iconName=\"angle-right\"\n disabled={!inlineEndOverflow}\n __focusable={true}\n onClick={() => onPaginationClick(headerBarRef, 'forward')}\n ariaLabel={i18n('i18nStrings.scrollRightAriaLabel', i18nStrings?.scrollRightAriaLabel)}\n />\n </span>\n )}\n </div>\n );\n\n function renderTabHeader(tab: TabsProps.Tab) {\n const { dismissible, dismissLabel, dismissDisabled, action, onDismiss } = tab;\n const isActive = activeTabId === tab.id && !tab.disabled;\n\n const clickTab = (event: React.MouseEvent) => {\n if (tab.disabled) {\n event.preventDefault();\n return;\n }\n\n // if the primary mouse button is clicked with a modifier key, the browser will handle opening a new tab\n const specialKey = !isPlainLeftClick(event);\n if (specialKey && tab.href) {\n return;\n }\n\n event.preventDefault();\n // for browsers that do not focus buttons on button click\n if (!tab.href) {\n const clickedTabRef = tabRefs.current.get(tab.id) as undefined | HTMLButtonElement;\n if (clickedTabRef) {\n if (clickedTabRef && clickedTabRef !== document.activeElement) {\n clickedTabRef.focus({ preventScroll: true });\n }\n }\n }\n\n if (tab.id === activeTabId) {\n return;\n }\n\n setFocusedTabId(tab.id);\n setPreviousActiveTabId(tab.id);\n onChange({ activeTabId: tab.id, activeTabHref: tab.href });\n };\n\n const classes = clsx({\n [styles['tabs-tab-link']]: true,\n [styles.refresh]: isVisualRefresh,\n [styles['tabs-tab-active']]: activeTabId === tab.id && !tab.disabled,\n [styles['tabs-tab-focused']]: focusedTabId === tab.id,\n [styles['tabs-tab-active']]: isActive,\n [styles['tabs-tab-disabled']]: tab.disabled,\n [styles['tabs-tab-focusable']]: !tab.disabled || (tab.disabled && !!tab.disabledReason),\n });\n\n const tabHeaderContainerClasses = clsx({\n [styles['tabs-tab-header-container']]: true,\n [styles.refresh]: isVisualRefresh,\n [styles['tabs-tab-active']]: isActive,\n [styles['tabs-tab-disabled']]: tab.disabled,\n [styles['tabs-tab-focusable']]: !tab.disabled || (tab.disabled && !!tab.disabledReason),\n });\n\n const tabActionClasses = clsx({\n [styles['tabs-tab-action']]: true,\n [styles['tabs-tab-active']]: isActive,\n });\n\n const commonProps: (JSX.IntrinsicElements['a'] | JSX.IntrinsicElements['button']) & { 'data-testid': string } = {\n className: classes,\n 'aria-controls': `${idNamespace}-${tab.id}-panel`,\n 'data-testid': tab.id,\n id: getTabElementId({ namespace: idNamespace, tabId: tab.id }),\n onClick: clickTab,\n };\n\n const tabHeaderContainerAriaProps = hasActionOrDismissible\n ? {\n role: 'group',\n 'aria-labelledby': commonProps.id,\n }\n : {};\n\n if (!hasActionOrDismissible) {\n commonProps['aria-selected'] = activeTabId === tab.id;\n commonProps.role = 'tab';\n } else {\n commonProps['aria-expanded'] = activeTabId === tab.id;\n }\n\n if (tab.disabled) {\n commonProps['aria-disabled'] = 'true';\n }\n\n const setElement = (tabElement: null | HTMLElement) => {\n if (tab.id === activeTabId) {\n activeTabHeaderRef.current = tabElement;\n }\n tabRefs.current.set(tab.id, tabElement as HTMLElement);\n };\n\n const handleDismiss: ButtonProps['onClick'] = event => {\n if (!containerObjectRef.current || !onDismiss) {\n return;\n }\n const tabElements = getFocusablesFrom(containerObjectRef.current).filter(el =>\n el.classList.contains(styles['tabs-tab-link'])\n );\n const activeTabIndex = tabElements.findIndex(el => el.dataset.testid === tab.id);\n tabElements.splice(activeTabIndex, 1);\n let nextActive: HTMLElement | undefined;\n if (previousActiveTabId && previousActiveTabId !== tab.id) {\n nextActive = tabElements.find(el => el.dataset.testid === previousActiveTabId);\n } else {\n nextActive = tabElements[Math.min(tabElements.length - 1, activeTabIndex)];\n }\n if (nextActive && nextActive.dataset.testid) {\n onChange({ activeTabId: nextActive.dataset.testid });\n nextActive.focus();\n }\n onDismiss(event);\n };\n\n const TabItem = hasActionOrDismissible ? 'div' : 'li';\n return (\n <TabItem\n ref={(element: any) => tabRefs.current.set(tab.id, element as HTMLElement)}\n className={styles['tabs-tab']}\n role=\"presentation\"\n key={tab.id}\n >\n <div className={tabHeaderContainerClasses} {...tabHeaderContainerAriaProps}>\n <TabTrigger ref={setElement} tab={tab} elementProps={commonProps} />\n {action && <span className={tabActionClasses}>{action}</span>}\n {dismissible && (\n <span className={styles['tabs-tab-dismiss']}>\n {dismissButton(dismissLabel, dismissDisabled, handleDismiss)}\n </span>\n )}\n </div>\n </TabItem>\n );\n }\n}\n\nconst TabTrigger = forwardRef(\n (\n {\n tab,\n elementProps,\n }: { tab: TabsProps.Tab; elementProps: React.HTMLAttributes<HTMLAnchorElement | HTMLButtonElement> },\n ref: React.Ref<HTMLElement>\n ) => {\n const refObject = useRef<HTMLElement>(null);\n const tabLabelRefObject = useRef<HTMLElement>(null);\n const mergedRef = useMergeRefs(refObject, ref);\n const { tabIndex } = useSingleTabStopNavigation(refObject);\n const isDisabledWithReason = tab.disabled && !!tab.disabledReason;\n const [showTooltip, setShowTooltip] = useState(false);\n const { targetProps, descriptionEl } = useHiddenDescription(tab.disabledReason);\n const children = (\n <>\n <span className={styles['tabs-tab-label']} ref={tabLabelRefObject}>\n {tab.label}\n </span>\n {isDisabledWithReason && (\n <>\n {descriptionEl}\n {showTooltip && (\n <Tooltip\n className={styles['disabled-reason-tooltip']}\n trackRef={tabLabelRefObject}\n value={tab.disabledReason!}\n />\n )}\n </>\n )}\n </>\n );\n\n const handlers = {\n onFocus: () => setShowTooltip(true),\n onBlur: () => setShowTooltip(false),\n onMouseEnter: () => setShowTooltip(true),\n onMouseLeave: () => setShowTooltip(false),\n };\n\n const commonProps = {\n ...elementProps,\n ...(isDisabledWithReason ? targetProps : {}),\n ...(isDisabledWithReason ? handlers : {}),\n ref: mergedRef,\n tabIndex: tabIndex,\n };\n\n return tab.href ? (\n <a {...commonProps} href={tab.href}>\n {children}\n </a>\n ) : (\n <button {...commonProps} type=\"button\" disabled={tab.disabled && !isDisabledWithReason}>\n {children}\n </button>\n );\n }\n);\n\nexport function getTabElementId({ namespace, tabId }: { namespace: string; tabId: string }) {\n return namespace + '-' + tabId;\n}\n"]}
@@ -3,6 +3,8 @@ import ButtonWrapper from '../button';
3
3
  export default class CopyToClipboardWrapper extends ComponentWrapper {
4
4
  static rootSelector: string;
5
5
  findCopyButton(): ButtonWrapper;
6
- findStatusText(): null | ElementWrapper;
6
+ findStatusText(options?: {
7
+ popoverRenderWithPortal: boolean;
8
+ }): null | ElementWrapper;
7
9
  findTextToCopy(): null | ElementWrapper;
8
10
  }
@@ -10,9 +10,9 @@ class CopyToClipboardWrapper extends dom_1.ComponentWrapper {
10
10
  findCopyButton() {
11
11
  return this.findComponent(`.${button_1.default.rootSelector}`, button_1.default);
12
12
  }
13
- findStatusText() {
13
+ findStatusText(options = { popoverRenderWithPortal: false }) {
14
14
  return this.findComponent(`.${popover_1.default.rootSelector}`, popover_1.default).findContent({
15
- renderWithPortal: true,
15
+ renderWithPortal: options.popoverRenderWithPortal,
16
16
  });
17
17
  }
18
18
  findTextToCopy() {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/test-utils/dom/copy-to-clipboard/index.ts"],"names":[],"mappings":";;AAAA,qEAAqE;AACrE,sCAAsC;AACtC,gEAA0F;AAC1F,qGAAqF;AACrF,sCAAsC;AACtC,wCAAwC;AAExC,MAAqB,sBAAuB,SAAQ,sBAAgB;IAGlE,cAAc;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,gBAAa,CAAC,YAAY,EAAE,EAAE,gBAAa,CAAE,CAAC;IAC9E,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,iBAAc,CAAC,YAAY,EAAE,EAAE,iBAAc,CAAE,CAAC,WAAW,CAAC;YACxF,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;IACL,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAU,CAAC,cAAc,CAAC,CAAC,CAAC;IAC1D,CAAC;;AAfH,yCAgBC;AAfQ,mCAAY,GAAW,6BAAU,CAAC,IAAI,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/test-utils/dom/copy-to-clipboard/index.ts"],"names":[],"mappings":";;AAAA,qEAAqE;AACrE,sCAAsC;AACtC,gEAA0F;AAC1F,qGAAqF;AACrF,sCAAsC;AACtC,wCAAwC;AAExC,MAAqB,sBAAuB,SAAQ,sBAAgB;IAGlE,cAAc;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,gBAAa,CAAC,YAAY,EAAE,EAAE,gBAAa,CAAE,CAAC;IAC9E,CAAC;IAED,cAAc,CAAC,OAAO,GAAG,EAAE,uBAAuB,EAAE,KAAK,EAAE;QACzD,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,iBAAc,CAAC,YAAY,EAAE,EAAE,iBAAc,CAAE,CAAC,WAAW,CAAC;YACxF,gBAAgB,EAAE,OAAO,CAAC,uBAAuB;SAClD,CAAC,CAAC;IACL,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAU,CAAC,cAAc,CAAC,CAAC,CAAC;IAC1D,CAAC;;AAfH,yCAgBC;AAfQ,mCAAY,GAAW,6BAAU,CAAC,IAAI,CAAC"}
@@ -1,6 +1,8 @@
1
- import { ElementWrapper } from '@cloudscape-design/test-utils-core/dom';
1
+ import { ComponentWrapper, ElementWrapper } from '@cloudscape-design/test-utils-core/dom';
2
2
  import AutosuggestWrapper from '../autosuggest';
3
- import FilteringTokenWrapper from '../internal/filtering-token';
3
+ import ButtonWrapper from '../button';
4
+ import SelectWrapper from '../select';
5
+ import FormFieldWrapper from '../form-field';
4
6
  export default class PropertyFilterWrapper extends AutosuggestWrapper {
5
7
  static rootSelector: string;
6
8
  findResultsCount(): ElementWrapper;
@@ -26,3 +28,24 @@ export default class PropertyFilterWrapper extends AutosuggestWrapper {
26
28
  */
27
29
  findConstraint(): ElementWrapper | null;
28
30
  }
31
+ export declare class FilteringTokenWrapper extends ComponentWrapper {
32
+ static rootSelector: string;
33
+ findLabel(): ElementWrapper;
34
+ findRemoveButton(): ElementWrapper<HTMLButtonElement>;
35
+ findTokenOperation(): SelectWrapper | null;
36
+ /**
37
+ * Returns dropdown content of editing token if opened or `null` otherwise.
38
+ */
39
+ findEditorDropdown(options?: {
40
+ expandToViewport: boolean;
41
+ }): null | PropertyFilterEditorDropdownWrapper;
42
+ }
43
+ export declare class PropertyFilterEditorDropdownWrapper extends ComponentWrapper {
44
+ findHeader(): ElementWrapper;
45
+ findDismissButton(): ButtonWrapper;
46
+ findPropertyField(): FormFieldWrapper;
47
+ findOperatorField(): FormFieldWrapper;
48
+ findValueField(): FormFieldWrapper;
49
+ findCancelButton(): ButtonWrapper;
50
+ findSubmitButton(): ButtonWrapper;
51
+ }
@@ -1,22 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PropertyFilterEditorDropdownWrapper = exports.FilteringTokenWrapper = void 0;
4
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
5
+ // SPDX-License-Identifier: Apache-2.0
6
+ const dom_1 = require("@cloudscape-design/test-utils-core/dom");
3
7
  const styles_selectors_js_1 = require("../../../property-filter/styles.selectors.js");
4
- const styles_selectors_js_2 = require("../../../internal/components/token-list/styles.selectors.js");
5
- const styles_selectors_js_3 = require("../../../text-filter/styles.selectors.js");
8
+ const styles_selectors_js_2 = require("../../../property-filter/test-classes/styles.selectors.js");
9
+ const styles_selectors_js_3 = require("../../../popover/styles.selectors.js");
10
+ const styles_selectors_js_4 = require("../../../internal/components/token-list/styles.selectors.js");
11
+ const styles_selectors_js_5 = require("../../../text-filter/styles.selectors.js");
6
12
  const autosuggest_1 = require("../autosuggest");
7
- const filtering_token_1 = require("../internal/filtering-token");
13
+ const button_1 = require("../button");
14
+ const select_1 = require("../select");
15
+ const form_field_1 = require("../form-field");
8
16
  class PropertyFilterWrapper extends autosuggest_1.default {
9
17
  findResultsCount() {
10
- return this.findByClassName(styles_selectors_js_3.default.results);
18
+ return this.findByClassName(styles_selectors_js_5.default.results);
11
19
  }
12
20
  findTokens() {
13
- return this.findAllByClassName(filtering_token_1.default.rootSelector).map((elementWrapper) => new filtering_token_1.default(elementWrapper.getElement()));
21
+ return this.findAllByClassName(FilteringTokenWrapper.rootSelector).map((elementWrapper) => new FilteringTokenWrapper(elementWrapper.getElement()));
14
22
  }
15
23
  /**
16
24
  * Returns the button that toggles if the tokens above `tokenLimit` are visible.
17
25
  */
18
26
  findTokenToggle() {
19
- return this.findByClassName(styles_selectors_js_2.default.toggle);
27
+ return this.findByClassName(styles_selectors_js_4.default.toggle);
20
28
  }
21
29
  /**
22
30
  * Returns the button that removes all current tokens.
@@ -45,4 +53,49 @@ class PropertyFilterWrapper extends autosuggest_1.default {
45
53
  }
46
54
  exports.default = PropertyFilterWrapper;
47
55
  PropertyFilterWrapper.rootSelector = styles_selectors_js_1.default.root;
56
+ class FilteringTokenWrapper extends dom_1.ComponentWrapper {
57
+ findLabel() {
58
+ return this.findByClassName(styles_selectors_js_2.default['filtering-token-content']).findByClassName(styles_selectors_js_3.default.trigger);
59
+ }
60
+ findRemoveButton() {
61
+ return this.findByClassName(styles_selectors_js_2.default['filtering-token-dismiss-button']);
62
+ }
63
+ findTokenOperation() {
64
+ return this.findComponent(`.${styles_selectors_js_2.default['filtering-token-select']}`, select_1.default);
65
+ }
66
+ /**
67
+ * Returns dropdown content of editing token if opened or `null` otherwise.
68
+ */
69
+ findEditorDropdown(options = { expandToViewport: false }) {
70
+ const root = options.expandToViewport ? (0, dom_1.createWrapper)() : this;
71
+ const popoverBody = root.findByClassName(styles_selectors_js_3.default.body);
72
+ return popoverBody ? new PropertyFilterEditorDropdownWrapper(popoverBody.getElement()) : null;
73
+ }
74
+ }
75
+ exports.FilteringTokenWrapper = FilteringTokenWrapper;
76
+ FilteringTokenWrapper.rootSelector = styles_selectors_js_2.default['filtering-token'];
77
+ class PropertyFilterEditorDropdownWrapper extends dom_1.ComponentWrapper {
78
+ findHeader() {
79
+ return this.findByClassName(styles_selectors_js_3.default.header);
80
+ }
81
+ findDismissButton() {
82
+ return this.findComponent(`.${styles_selectors_js_3.default['dismiss-control']}`, button_1.default);
83
+ }
84
+ findPropertyField() {
85
+ return this.findComponent(`.${styles_selectors_js_2.default['token-editor-field-property']}`, form_field_1.default);
86
+ }
87
+ findOperatorField() {
88
+ return this.findComponent(`.${styles_selectors_js_2.default['token-editor-field-operator']}`, form_field_1.default);
89
+ }
90
+ findValueField() {
91
+ return this.findComponent(`.${styles_selectors_js_2.default['token-editor-field-value']}`, form_field_1.default);
92
+ }
93
+ findCancelButton() {
94
+ return this.findComponent(`.${styles_selectors_js_2.default['token-editor-cancel']}`, button_1.default);
95
+ }
96
+ findSubmitButton() {
97
+ return this.findComponent(`.${styles_selectors_js_2.default['token-editor-submit']}`, button_1.default);
98
+ }
99
+ }
100
+ exports.PropertyFilterEditorDropdownWrapper = PropertyFilterEditorDropdownWrapper;
48
101
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/test-utils/dom/property-filter/index.ts"],"names":[],"mappings":";;AAIA,sFAAkE;AAClE,qGAA6F;AAC7F,kFAAwE;AAExE,gDAAgD;AAEhD,iEAAgE;AAEhE,MAAqB,qBAAsB,SAAQ,qBAAkB;IAGnE,gBAAgB;QACd,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAgB,CAAC,OAAO,CAAE,CAAC;IACzD,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,kBAAkB,CAAC,yBAAqB,CAAC,YAAY,CAAC,CAAC,GAAG,CACpE,CAAC,cAA8B,EAAE,EAAE,CAAC,IAAI,yBAAqB,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAC3F,CAAC;IACJ,CAAC;IACD;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAkB,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;IACD;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,uBAAuB;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;;AA5CH,wCA6CC;AA5CQ,kCAAY,GAAG,6BAAM,CAAC,IAAI,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/test-utils/dom/property-filter/index.ts"],"names":[],"mappings":";;;AAAA,qEAAqE;AACrE,sCAAsC;AACtC,gEAAyG;AAEzG,sFAAkE;AAClE,mGAAuF;AACvF,8EAAiE;AACjE,qGAA6F;AAC7F,kFAAwE;AACxE,gDAAgD;AAChD,sCAAsC;AACtC,sCAAsC;AACtC,8CAA6C;AAE7C,MAAqB,qBAAsB,SAAQ,qBAAkB;IAGnE,gBAAgB;QACd,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAgB,CAAC,OAAO,CAAE,CAAC;IACzD,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC,GAAG,CACpE,CAAC,cAA8B,EAAE,EAAE,CAAC,IAAI,qBAAqB,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAC3F,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAkB,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,uBAAuB;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;;AA9CH,wCA+CC;AA9CQ,kCAAY,GAAG,6BAAM,CAAC,IAAI,CAAC;AAgDpC,MAAa,qBAAsB,SAAQ,sBAAgB;IAGzD,SAAS;QACP,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAc,CAAC,yBAAyB,CAAC,CAAE,CAAC,eAAe,CAAC,6BAAa,CAAC,OAAO,CAAE,CAAC;IAClH,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,eAAe,CAAoB,6BAAc,CAAC,gCAAgC,CAAC,CAAE,CAAC;IACpG,CAAC;IAED,kBAAkB;QAChB,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,6BAAc,CAAC,wBAAwB,CAAC,EAAE,EAAE,gBAAa,CAAC,CAAC;IAC3F,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,OAAO,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE;QACtD,MAAM,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAA,mBAAa,GAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,6BAAa,CAAC,IAAI,CAAC,CAAC;QAC7D,OAAO,WAAW,CAAC,CAAC,CAAC,IAAI,mCAAmC,CAAC,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAChG,CAAC;;AAtBH,sDAuBC;AAtBQ,kCAAY,GAAG,6BAAc,CAAC,iBAAiB,CAAC,CAAC;AAwB1D,MAAa,mCAAoC,SAAQ,sBAAgB;IACvE,UAAU;QACR,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAa,CAAC,MAAM,CAAE,CAAC;IACrD,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,6BAAa,CAAC,iBAAiB,CAAC,EAAE,EAAE,gBAAa,CAAE,CAAC;IACpF,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,6BAAc,CAAC,6BAA6B,CAAC,EAAE,EAAE,oBAAgB,CAAE,CAAC;IACpG,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,6BAAc,CAAC,6BAA6B,CAAC,EAAE,EAAE,oBAAgB,CAAE,CAAC;IACpG,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,6BAAc,CAAC,0BAA0B,CAAC,EAAE,EAAE,oBAAgB,CAAE,CAAC;IACjG,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,6BAAc,CAAC,qBAAqB,CAAC,EAAE,EAAE,gBAAa,CAAE,CAAC;IACzF,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,6BAAc,CAAC,qBAAqB,CAAC,EAAE,EAAE,gBAAa,CAAE,CAAC;IACzF,CAAC;CACF;AA5BD,kFA4BC"}
@@ -3,6 +3,8 @@ import ButtonWrapper from '../button';
3
3
  export default class CopyToClipboardWrapper extends ComponentWrapper {
4
4
  static rootSelector: string;
5
5
  findCopyButton(): ButtonWrapper;
6
- findStatusText(): ElementWrapper;
6
+ findStatusText(options?: {
7
+ popoverRenderWithPortal: boolean;
8
+ }): ElementWrapper;
7
9
  findTextToCopy(): ElementWrapper;
8
10
  }
@@ -10,9 +10,11 @@ class CopyToClipboardWrapper extends selectors_1.ComponentWrapper {
10
10
  findCopyButton() {
11
11
  return this.findComponent(`.${button_1.default.rootSelector}`, button_1.default);
12
12
  }
13
- findStatusText() {
13
+ findStatusText(options = {
14
+ popoverRenderWithPortal: false
15
+ }) {
14
16
  return this.findComponent(`.${popover_1.default.rootSelector}`, popover_1.default).findContent({
15
- renderWithPortal: true
17
+ renderWithPortal: options.popoverRenderWithPortal
16
18
  });
17
19
  }
18
20
  findTextToCopy() {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/test-utils/selectors/copy-to-clipboard/index.ts"],"names":[],"mappings":";;AAAA,qEAAqE;AACrE,sCAAsC;AACtC,4EAAgG;AAChG,qGAAqF;AACrF,sCAAsC;AACtC,wCAAwC;AACxC,MAAqB,sBAAuB,SAAQ,4BAAgB;IAElE,cAAc;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,gBAAa,CAAC,YAAY,EAAE,EAAE,gBAAa,CAAE,CAAC;IAC9E,CAAC;IACD,cAAc;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,iBAAc,CAAC,YAAY,EAAE,EAAE,iBAAc,CAAE,CAAC,WAAW,CAAC;YACxF,gBAAgB,EAAE,IAAI;SACvB,CAAC,CAAC;IACL,CAAC;IACD,cAAc;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAU,CAAC,cAAc,CAAC,CAAC,CAAC;IAC1D,CAAC;;AAZH,yCAaC;AAZQ,mCAAY,GAAW,6BAAU,CAAC,IAAI,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/test-utils/selectors/copy-to-clipboard/index.ts"],"names":[],"mappings":";;AAAA,qEAAqE;AACrE,sCAAsC;AACtC,4EAAgG;AAChG,qGAAqF;AACrF,sCAAsC;AACtC,wCAAwC;AACxC,MAAqB,sBAAuB,SAAQ,4BAAgB;IAElE,cAAc;QACZ,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,gBAAa,CAAC,YAAY,EAAE,EAAE,gBAAa,CAAE,CAAC;IAC9E,CAAC;IACD,cAAc,CAAC,OAAO,GAAG;QACvB,uBAAuB,EAAE,KAAK;KAC/B;QACC,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,iBAAc,CAAC,YAAY,EAAE,EAAE,iBAAc,CAAE,CAAC,WAAW,CAAC;YACxF,gBAAgB,EAAE,OAAO,CAAC,uBAAuB;SAClD,CAAC,CAAC;IACL,CAAC;IACD,cAAc;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAU,CAAC,cAAc,CAAC,CAAC,CAAC;IAC1D,CAAC;;AAdH,yCAeC;AAdQ,mCAAY,GAAW,6BAAU,CAAC,IAAI,CAAC"}
@@ -1,6 +1,8 @@
1
- import { ElementWrapper } from "@cloudscape-design/test-utils-core/selectors";
1
+ import { ComponentWrapper, ElementWrapper } from "@cloudscape-design/test-utils-core/selectors";
2
2
  import AutosuggestWrapper from '../autosuggest';
3
- import FilteringTokenWrapper from '../internal/filtering-token';
3
+ import ButtonWrapper from '../button';
4
+ import SelectWrapper from '../select';
5
+ import FormFieldWrapper from '../form-field';
4
6
  export default class PropertyFilterWrapper extends AutosuggestWrapper {
5
7
  static rootSelector: string;
6
8
  findResultsCount(): ElementWrapper;
@@ -26,3 +28,24 @@ export default class PropertyFilterWrapper extends AutosuggestWrapper {
26
28
  */
27
29
  findConstraint(): ElementWrapper;
28
30
  }
31
+ export declare class FilteringTokenWrapper extends ComponentWrapper {
32
+ static rootSelector: string;
33
+ findLabel(): ElementWrapper;
34
+ findRemoveButton(): ElementWrapper;
35
+ findTokenOperation(): SelectWrapper;
36
+ /**
37
+ * Returns dropdown content of editing token if opened or `null` otherwise.
38
+ */
39
+ findEditorDropdown(options?: {
40
+ expandToViewport: boolean;
41
+ }): PropertyFilterEditorDropdownWrapper | null;
42
+ }
43
+ export declare class PropertyFilterEditorDropdownWrapper extends ComponentWrapper {
44
+ findHeader(): ElementWrapper;
45
+ findDismissButton(): ButtonWrapper;
46
+ findPropertyField(): FormFieldWrapper;
47
+ findOperatorField(): FormFieldWrapper;
48
+ findValueField(): FormFieldWrapper;
49
+ findCancelButton(): ButtonWrapper;
50
+ findSubmitButton(): ButtonWrapper;
51
+ }
@@ -1,22 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PropertyFilterEditorDropdownWrapper = exports.FilteringTokenWrapper = void 0;
4
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
5
+ // SPDX-License-Identifier: Apache-2.0
6
+ const selectors_1 = require("@cloudscape-design/test-utils-core/selectors");
3
7
  const styles_selectors_js_1 = require("../../../property-filter/styles.selectors.js");
4
- const styles_selectors_js_2 = require("../../../internal/components/token-list/styles.selectors.js");
5
- const styles_selectors_js_3 = require("../../../text-filter/styles.selectors.js");
8
+ const styles_selectors_js_2 = require("../../../property-filter/test-classes/styles.selectors.js");
9
+ const styles_selectors_js_3 = require("../../../popover/styles.selectors.js");
10
+ const styles_selectors_js_4 = require("../../../internal/components/token-list/styles.selectors.js");
11
+ const styles_selectors_js_5 = require("../../../text-filter/styles.selectors.js");
6
12
  const autosuggest_1 = require("../autosuggest");
7
- const filtering_token_1 = require("../internal/filtering-token");
13
+ const button_1 = require("../button");
14
+ const select_1 = require("../select");
15
+ const form_field_1 = require("../form-field");
8
16
  class PropertyFilterWrapper extends autosuggest_1.default {
9
17
  findResultsCount() {
10
- return this.findByClassName(styles_selectors_js_3.default.results);
18
+ return this.findByClassName(styles_selectors_js_5.default.results);
11
19
  }
12
20
  findTokens() {
13
- return this.findAllByClassName(filtering_token_1.default.rootSelector).map((elementWrapper) => new filtering_token_1.default(elementWrapper.getElement()));
21
+ return this.findAllByClassName(FilteringTokenWrapper.rootSelector).map((elementWrapper) => new FilteringTokenWrapper(elementWrapper.getElement()));
14
22
  }
15
23
  /**
16
24
  * Returns the button that toggles if the tokens above `tokenLimit` are visible.
17
25
  */
18
26
  findTokenToggle() {
19
- return this.findByClassName(styles_selectors_js_2.default.toggle);
27
+ return this.findByClassName(styles_selectors_js_4.default.toggle);
20
28
  }
21
29
  /**
22
30
  * Returns the button that removes all current tokens.
@@ -45,4 +53,51 @@ class PropertyFilterWrapper extends autosuggest_1.default {
45
53
  }
46
54
  exports.default = PropertyFilterWrapper;
47
55
  PropertyFilterWrapper.rootSelector = styles_selectors_js_1.default.root;
56
+ class FilteringTokenWrapper extends selectors_1.ComponentWrapper {
57
+ findLabel() {
58
+ return this.findByClassName(styles_selectors_js_2.default['filtering-token-content']).findByClassName(styles_selectors_js_3.default.trigger);
59
+ }
60
+ findRemoveButton() {
61
+ return this.findByClassName(styles_selectors_js_2.default['filtering-token-dismiss-button']);
62
+ }
63
+ findTokenOperation() {
64
+ return this.findComponent(`.${styles_selectors_js_2.default['filtering-token-select']}`, select_1.default);
65
+ }
66
+ /**
67
+ * Returns dropdown content of editing token if opened or `null` otherwise.
68
+ */
69
+ findEditorDropdown(options = {
70
+ expandToViewport: false
71
+ }) {
72
+ const root = options.expandToViewport ? (0, selectors_1.createWrapper)() : this;
73
+ const popoverBody = root.findByClassName(styles_selectors_js_3.default.body);
74
+ return popoverBody ? new PropertyFilterEditorDropdownWrapper(popoverBody.getElement()) : null;
75
+ }
76
+ }
77
+ exports.FilteringTokenWrapper = FilteringTokenWrapper;
78
+ FilteringTokenWrapper.rootSelector = styles_selectors_js_2.default['filtering-token'];
79
+ class PropertyFilterEditorDropdownWrapper extends selectors_1.ComponentWrapper {
80
+ findHeader() {
81
+ return this.findByClassName(styles_selectors_js_3.default.header);
82
+ }
83
+ findDismissButton() {
84
+ return this.findComponent(`.${styles_selectors_js_3.default['dismiss-control']}`, button_1.default);
85
+ }
86
+ findPropertyField() {
87
+ return this.findComponent(`.${styles_selectors_js_2.default['token-editor-field-property']}`, form_field_1.default);
88
+ }
89
+ findOperatorField() {
90
+ return this.findComponent(`.${styles_selectors_js_2.default['token-editor-field-operator']}`, form_field_1.default);
91
+ }
92
+ findValueField() {
93
+ return this.findComponent(`.${styles_selectors_js_2.default['token-editor-field-value']}`, form_field_1.default);
94
+ }
95
+ findCancelButton() {
96
+ return this.findComponent(`.${styles_selectors_js_2.default['token-editor-cancel']}`, button_1.default);
97
+ }
98
+ findSubmitButton() {
99
+ return this.findComponent(`.${styles_selectors_js_2.default['token-editor-submit']}`, button_1.default);
100
+ }
101
+ }
102
+ exports.PropertyFilterEditorDropdownWrapper = PropertyFilterEditorDropdownWrapper;
48
103
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/test-utils/selectors/property-filter/index.ts"],"names":[],"mappings":";;AAGA,sFAAkE;AAClE,qGAA6F;AAC7F,kFAAwE;AACxE,gDAAgD;AAChD,iEAAgE;AAChE,MAAqB,qBAAsB,SAAQ,qBAAkB;IAEnE,gBAAgB;QACd,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAgB,CAAC,OAAO,CAAE,CAAC;IACzD,CAAC;IACD,UAAU;QACR,OAAO,IAAI,CAAC,kBAAkB,CAAC,yBAAqB,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,cAA8B,EAAE,EAAE,CAAC,IAAI,yBAAqB,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACrK,CAAC;IACD;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAkB,CAAC,MAAM,CAAC,CAAC;IACzD,CAAC;IACD;;OAEG;IACH,mBAAmB;QACjB,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,YAAY,CAAC,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACH,uBAAuB;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,eAAe,CAAC,6BAAM,CAAC,UAAU,CAAC,CAAC;IACjD,CAAC;;AAxCH,wCAyCC;AAxCQ,kCAAY,GAAG,6BAAM,CAAC,IAAI,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/test-utils/selectors/property-filter/index.ts"],"names":[],"mappings":"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"}