@cloudscape-design/components-themeable 3.0.1091 → 3.0.1093

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 (152) hide show
  1. package/lib/internal/manifest.json +1 -1
  2. package/lib/internal/scss/internal/components/option/styles.scss +0 -4
  3. package/lib/internal/scss/internal/components/selectable-item/styles.scss +2 -1
  4. package/lib/internal/scss/internal/generated/custom-css-properties/index.scss +1 -1
  5. package/lib/internal/scss/navigable-group/styles.scss +8 -0
  6. package/lib/internal/scss/navigable-group/test-classes/styles.scss +8 -0
  7. package/lib/internal/scss/select/parts/styles.scss +7 -0
  8. package/lib/internal/template/autosuggest/plain-list.js +1 -1
  9. package/lib/internal/template/autosuggest/plain-list.js.map +1 -1
  10. package/lib/internal/template/autosuggest/virtual-list.js +1 -1
  11. package/lib/internal/template/autosuggest/virtual-list.js.map +1 -1
  12. package/lib/internal/template/badge/index.d.ts.map +1 -1
  13. package/lib/internal/template/badge/index.js +1 -1
  14. package/lib/internal/template/badge/index.js.map +1 -1
  15. package/lib/internal/template/box/interfaces.d.ts +15 -0
  16. package/lib/internal/template/box/interfaces.d.ts.map +1 -1
  17. package/lib/internal/template/box/interfaces.js.map +1 -1
  18. package/lib/internal/template/box/internal.d.ts +1 -1
  19. package/lib/internal/template/box/internal.d.ts.map +1 -1
  20. package/lib/internal/template/box/internal.js +3 -5
  21. package/lib/internal/template/box/internal.js.map +1 -1
  22. package/lib/internal/template/button/internal.d.ts.map +1 -1
  23. package/lib/internal/template/button/internal.js +3 -3
  24. package/lib/internal/template/button/internal.js.map +1 -1
  25. package/lib/internal/template/button-dropdown/internal.d.ts.map +1 -1
  26. package/lib/internal/template/button-dropdown/internal.js +1 -1
  27. package/lib/internal/template/button-dropdown/internal.js.map +1 -1
  28. package/lib/internal/template/button-group/internal.d.ts.map +1 -1
  29. package/lib/internal/template/button-group/internal.js +5 -87
  30. package/lib/internal/template/button-group/internal.js.map +1 -1
  31. package/lib/internal/template/checkbox/internal.d.ts.map +1 -1
  32. package/lib/internal/template/checkbox/internal.js +1 -1
  33. package/lib/internal/template/checkbox/internal.js.map +1 -1
  34. package/lib/internal/template/icon/internal.d.ts.map +1 -1
  35. package/lib/internal/template/icon/internal.js +3 -3
  36. package/lib/internal/template/icon/internal.js.map +1 -1
  37. package/lib/internal/template/index.d.ts +1 -0
  38. package/lib/internal/template/index.d.ts.map +1 -1
  39. package/lib/internal/template/index.js +1 -0
  40. package/lib/internal/template/index.js.map +1 -1
  41. package/lib/internal/template/internal/base-component/styles.scoped.css +1 -3
  42. package/lib/internal/template/internal/components/option/index.d.ts +1 -1
  43. package/lib/internal/template/internal/components/option/index.d.ts.map +1 -1
  44. package/lib/internal/template/internal/components/option/index.js +3 -12
  45. package/lib/internal/template/internal/components/option/index.js.map +1 -1
  46. package/lib/internal/template/internal/components/option/interfaces.d.ts +0 -1
  47. package/lib/internal/template/internal/components/option/interfaces.d.ts.map +1 -1
  48. package/lib/internal/template/internal/components/option/interfaces.js.map +1 -1
  49. package/lib/internal/template/internal/components/option/option-parts.d.ts.map +1 -1
  50. package/lib/internal/template/internal/components/option/option-parts.js +2 -2
  51. package/lib/internal/template/internal/components/option/option-parts.js.map +1 -1
  52. package/lib/internal/template/internal/components/option/styles.css.js +16 -17
  53. package/lib/internal/template/internal/components/option/styles.scoped.css +28 -32
  54. package/lib/internal/template/internal/components/option/styles.selectors.js +16 -17
  55. package/lib/internal/template/internal/components/option/utils/unflatten-options.d.ts +16 -0
  56. package/lib/internal/template/internal/components/option/utils/unflatten-options.d.ts.map +1 -0
  57. package/lib/internal/template/internal/components/option/utils/unflatten-options.js +23 -0
  58. package/lib/internal/template/internal/components/option/utils/unflatten-options.js.map +1 -0
  59. package/lib/internal/template/internal/components/options-list/index.d.ts +2 -1
  60. package/lib/internal/template/internal/components/options-list/index.d.ts.map +1 -1
  61. package/lib/internal/template/internal/components/options-list/index.js +2 -2
  62. package/lib/internal/template/internal/components/options-list/index.js.map +1 -1
  63. package/lib/internal/template/internal/components/selectable-item/index.d.ts.map +1 -1
  64. package/lib/internal/template/internal/components/selectable-item/index.js +23 -20
  65. package/lib/internal/template/internal/components/selectable-item/index.js.map +1 -1
  66. package/lib/internal/template/internal/components/selectable-item/interfaces.d.ts +1 -0
  67. package/lib/internal/template/internal/components/selectable-item/interfaces.d.ts.map +1 -1
  68. package/lib/internal/template/internal/components/selectable-item/interfaces.js.map +1 -1
  69. package/lib/internal/template/internal/components/selectable-item/styles.css.js +22 -21
  70. package/lib/internal/template/internal/components/selectable-item/styles.scoped.css +42 -42
  71. package/lib/internal/template/internal/components/selectable-item/styles.selectors.js +22 -21
  72. package/lib/internal/template/internal/environment.js +2 -2
  73. package/lib/internal/template/internal/environment.json +2 -2
  74. package/lib/internal/template/internal/utils/with-native-attributes.d.ts +1 -0
  75. package/lib/internal/template/internal/utils/with-native-attributes.d.ts.map +1 -1
  76. package/lib/internal/template/internal/utils/with-native-attributes.js +2 -2
  77. package/lib/internal/template/internal/utils/with-native-attributes.js.map +1 -1
  78. package/lib/internal/template/multiselect/use-multiselect.d.ts +2 -1
  79. package/lib/internal/template/multiselect/use-multiselect.d.ts.map +1 -1
  80. package/lib/internal/template/navigable-group/index.d.ts +9 -0
  81. package/lib/internal/template/navigable-group/index.d.ts.map +1 -0
  82. package/lib/internal/template/navigable-group/index.js +23 -0
  83. package/lib/internal/template/navigable-group/index.js.map +1 -0
  84. package/lib/internal/template/navigable-group/interfaces.d.ts +39 -0
  85. package/lib/internal/template/navigable-group/interfaces.d.ts.map +1 -0
  86. package/lib/internal/template/navigable-group/interfaces.js +4 -0
  87. package/lib/internal/template/navigable-group/interfaces.js.map +1 -0
  88. package/lib/internal/template/navigable-group/internal.d.ts +5 -0
  89. package/lib/internal/template/navigable-group/internal.d.ts.map +1 -0
  90. package/lib/internal/template/navigable-group/internal.js +125 -0
  91. package/lib/internal/template/navigable-group/internal.js.map +1 -0
  92. package/lib/internal/template/navigable-group/styles.css.js +6 -0
  93. package/lib/internal/template/navigable-group/styles.scoped.css +7 -0
  94. package/lib/internal/template/navigable-group/styles.selectors.js +7 -0
  95. package/lib/internal/template/navigable-group/test-classes/styles.css.js +6 -0
  96. package/lib/internal/template/navigable-group/test-classes/styles.scoped.css +7 -0
  97. package/lib/internal/template/navigable-group/test-classes/styles.selectors.js +7 -0
  98. package/lib/internal/template/package.json +1 -0
  99. package/lib/internal/template/select/internal.js +1 -1
  100. package/lib/internal/template/select/internal.js.map +1 -1
  101. package/lib/internal/template/select/parts/item.d.ts +1 -0
  102. package/lib/internal/template/select/parts/item.d.ts.map +1 -1
  103. package/lib/internal/template/select/parts/item.js +2 -2
  104. package/lib/internal/template/select/parts/item.js.map +1 -1
  105. package/lib/internal/template/select/parts/multiselect-item.d.ts.map +1 -1
  106. package/lib/internal/template/select/parts/multiselect-item.js +2 -2
  107. package/lib/internal/template/select/parts/multiselect-item.js.map +1 -1
  108. package/lib/internal/template/select/parts/option-group.d.ts +10 -0
  109. package/lib/internal/template/select/parts/option-group.d.ts.map +1 -0
  110. package/lib/internal/template/select/parts/option-group.js +9 -0
  111. package/lib/internal/template/select/parts/option-group.js.map +1 -0
  112. package/lib/internal/template/select/parts/plain-list.d.ts.map +1 -1
  113. package/lib/internal/template/select/parts/plain-list.js +4 -2
  114. package/lib/internal/template/select/parts/plain-list.js.map +1 -1
  115. package/lib/internal/template/select/parts/styles.css.js +22 -21
  116. package/lib/internal/template/select/parts/styles.scoped.css +26 -22
  117. package/lib/internal/template/select/parts/styles.selectors.js +22 -21
  118. package/lib/internal/template/select/parts/virtual-list.d.ts.map +1 -1
  119. package/lib/internal/template/select/parts/virtual-list.js +5 -3
  120. package/lib/internal/template/select/parts/virtual-list.js.map +1 -1
  121. package/lib/internal/template/select/utils/render-options.d.ts +2 -1
  122. package/lib/internal/template/select/utils/render-options.d.ts.map +1 -1
  123. package/lib/internal/template/select/utils/render-options.js +23 -3
  124. package/lib/internal/template/select/utils/render-options.js.map +1 -1
  125. package/lib/internal/template/select/utils/use-select.d.ts +1 -1
  126. package/lib/internal/template/select/utils/use-select.d.ts.map +1 -1
  127. package/lib/internal/template/select/utils/use-select.js +6 -1
  128. package/lib/internal/template/select/utils/use-select.js.map +1 -1
  129. package/lib/internal/template/space-between/interfaces.d.ts +15 -0
  130. package/lib/internal/template/space-between/interfaces.d.ts.map +1 -1
  131. package/lib/internal/template/space-between/interfaces.js.map +1 -1
  132. package/lib/internal/template/space-between/internal.d.ts.map +1 -1
  133. package/lib/internal/template/space-between/internal.js +3 -2
  134. package/lib/internal/template/space-between/internal.js.map +1 -1
  135. package/lib/internal/template/spinner/internal.d.ts.map +1 -1
  136. package/lib/internal/template/spinner/internal.js +1 -1
  137. package/lib/internal/template/spinner/internal.js.map +1 -1
  138. package/lib/internal/template/test-utils/dom/index.d.ts +20 -0
  139. package/lib/internal/template/test-utils/dom/index.js +12 -1
  140. package/lib/internal/template/test-utils/dom/index.js.map +1 -1
  141. package/lib/internal/template/test-utils/dom/navigable-group/index.d.ts +5 -0
  142. package/lib/internal/template/test-utils/dom/navigable-group/index.js +14 -0
  143. package/lib/internal/template/test-utils/dom/navigable-group/index.js.map +1 -0
  144. package/lib/internal/template/test-utils/selectors/index.d.ts +18 -0
  145. package/lib/internal/template/test-utils/selectors/index.js +12 -1
  146. package/lib/internal/template/test-utils/selectors/index.js.map +1 -1
  147. package/lib/internal/template/test-utils/selectors/navigable-group/index.d.ts +5 -0
  148. package/lib/internal/template/test-utils/selectors/navigable-group/index.js +14 -0
  149. package/lib/internal/template/test-utils/selectors/navigable-group/index.js.map +1 -0
  150. package/lib/internal/template/token-group/internal.js +1 -1
  151. package/lib/internal/template/token-group/internal.js.map +1 -1
  152. package/package.json +1 -1
@@ -2,13 +2,14 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import React, { forwardRef, useImperativeHandle, useRef, useState } from 'react';
4
4
  import { useContainerQuery } from '@cloudscape-design/component-toolkit';
5
- import { useMergeRefs } from '@cloudscape-design/component-toolkit/internal';
5
+ import { useMergeRefs, useUniqueId } from '@cloudscape-design/component-toolkit/internal';
6
6
  import OptionsList from '../../internal/components/options-list';
7
7
  import { renderOptions } from '../utils/render-options';
8
8
  import scrollToIndex from '../utils/scroll-to-index';
9
9
  import { fallbackItemHeight } from './common';
10
10
  import styles from './styles.css.js';
11
11
  const PlainList = ({ menuProps, getOptionProps, filteredOptions, filteringValue, highlightType, checkboxes, hasDropdownStatus, listBottom, useInteractiveGroups, screenReaderContent, firstOptionSticky, }, ref) => {
12
+ const idPrefix = useUniqueId('select-list-');
12
13
  const stickyOptionRef = useRef(null);
13
14
  const [stickyOptionBlockSize, setStickyOptionBlockSize] = useState(firstOptionSticky ? fallbackItemHeight : 0);
14
15
  const [width, menuMeasureRef] = useContainerQuery(rect => {
@@ -35,6 +36,7 @@ const PlainList = ({ menuProps, getOptionProps, filteredOptions, filteringValue,
35
36
  options: filteredOptions,
36
37
  getOptionProps,
37
38
  filteringValue,
39
+ idPrefix,
38
40
  highlightType,
39
41
  checkboxes,
40
42
  hasDropdownStatus,
@@ -44,7 +46,7 @@ const PlainList = ({ menuProps, getOptionProps, filteredOptions, filteringValue,
44
46
  stickyOptionRef,
45
47
  withScrollbar,
46
48
  }),
47
- listBottom ? (React.createElement("li", { role: "option", className: styles['list-bottom'] }, listBottom)) : null));
49
+ listBottom ? (React.createElement("div", { role: "option", className: styles['list-bottom'] }, listBottom)) : null));
48
50
  };
49
51
  export default forwardRef(PlainList);
50
52
  //# sourceMappingURL=plain-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plain-list.js","sourceRoot":"","sources":["../../../../src/select/parts/plain-list.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAG7E,OAAO,WAAW,MAAM,wCAAwC,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,aAAa,MAAM,0BAA0B,CAAC;AAErD,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAoBrC,MAAM,SAAS,GAAG,CAChB,EACE,SAAS,EACT,cAAc,EACd,eAAe,EACf,cAAc,EACd,aAAa,EACb,UAAU,EACV,iBAAiB,EACjB,UAAU,EACV,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,GACD,EAClB,GAA6C,EAC7C,EAAE;IACF,MAAM,eAAe,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IACrD,MAAM,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE/G,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,EAAE;QACvD,IAAI,eAAe,CAAC,OAAO,EAAE;YAC3B,sHAAsH;YACtH,0FAA0F;YAE1F,qHAAqH;YACrH,uBAAuB;YACvB,wBAAwB,CAAC,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;SAChE;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC;IAE9B,MAAM,SAAS,GAAG,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IAExD,mBAAmB,CACjB,GAAG,EACH,GAAG,EAAE,CAAC,CAAC,KAAa,EAAE,EAAE;QACtB,MAAM,QAAQ,GAAG,iBAAiB,IAAI,KAAK,KAAK,CAAC,CAAC;QAClD,IAAI,aAAa,CAAC,SAAS,IAAI,OAAO,CAAC,OAAO,IAAI,CAAC,QAAQ,EAAE;YAC3D,aAAa,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;SACnD;IACH,CAAC,EACD,CAAC,iBAAiB,EAAE,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CACtD,CAAC;IAEF,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAE3D,OAAO,CACL,oBAAC,WAAW,oBAAK,SAAS,IAAE,GAAG,EAAE,SAAS,EAAE,mBAAmB,EAAE,qBAAqB;QACnF,aAAa,CAAC;YACb,OAAO,EAAE,eAAe;YACxB,cAAc;YACd,cAAc;YACd,aAAa;YACb,UAAU;YACV,iBAAiB;YACjB,oBAAoB;YACpB,mBAAmB;YACnB,iBAAiB;YACjB,eAAe;YACf,aAAa;SACd,CAAC;QACD,UAAU,CAAC,CAAC,CAAC,CACZ,4BAAI,IAAI,EAAC,QAAQ,EAAC,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,IAC/C,UAAU,CACR,CACN,CAAC,CAAC,CAAC,IAAI,CACI,CACf,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC,SAAS,CAAC,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React, { forwardRef, useImperativeHandle, useRef, useState } from 'react';\n\nimport { useContainerQuery } from '@cloudscape-design/component-toolkit';\nimport { useMergeRefs } from '@cloudscape-design/component-toolkit/internal';\n\nimport { DropdownOption } from '../../internal/components/option/interfaces';\nimport OptionsList from '../../internal/components/options-list';\nimport { HighlightType } from '../../internal/components/options-list/utils/use-highlight-option';\nimport { renderOptions } from '../utils/render-options';\nimport scrollToIndex from '../utils/scroll-to-index';\nimport { GetOptionProps, MenuProps } from '../utils/use-select';\nimport { fallbackItemHeight } from './common';\n\nimport styles from './styles.css.js';\n\nexport interface SelectListProps {\n menuProps: MenuProps;\n getOptionProps: GetOptionProps;\n filteredOptions: ReadonlyArray<DropdownOption>;\n filteringValue: string;\n highlightType: HighlightType;\n checkboxes?: boolean;\n hasDropdownStatus?: boolean;\n listBottom?: React.ReactNode;\n useInteractiveGroups?: boolean;\n screenReaderContent?: string;\n firstOptionSticky?: boolean;\n}\n\nexport namespace SelectListProps {\n export type SelectListRef = (index: number) => void;\n}\n\nconst PlainList = (\n {\n menuProps,\n getOptionProps,\n filteredOptions,\n filteringValue,\n highlightType,\n checkboxes,\n hasDropdownStatus,\n listBottom,\n useInteractiveGroups,\n screenReaderContent,\n firstOptionSticky,\n }: SelectListProps,\n ref: React.Ref<SelectListProps.SelectListRef>\n) => {\n const stickyOptionRef = useRef<HTMLDivElement>(null);\n const [stickyOptionBlockSize, setStickyOptionBlockSize] = useState(firstOptionSticky ? fallbackItemHeight : 0);\n\n const [width, menuMeasureRef] = useContainerQuery(rect => {\n if (stickyOptionRef.current) {\n // Cannot use container query on the sticky option individually because it is not rendered until the dropdown is open.\n // Not expecting the sticky option to change size without the dropdown also changing size.\n\n // The effects of using the sticky option block size to set the menu scroll padding are covered by integration tests.\n // istanbul ignore next\n setStickyOptionBlockSize(stickyOptionRef.current.clientHeight);\n }\n return { inner: rect.contentBoxWidth, outer: rect.borderBoxWidth };\n });\n\n const menuRef = menuProps.ref;\n\n const mergedRef = useMergeRefs(menuMeasureRef, menuRef);\n\n useImperativeHandle(\n ref,\n () => (index: number) => {\n const isSticky = firstOptionSticky && index === 0;\n if (highlightType.moveFocus && menuRef.current && !isSticky) {\n scrollToIndex({ index, menuEl: menuRef.current });\n }\n },\n [firstOptionSticky, highlightType.moveFocus, menuRef]\n );\n\n const withScrollbar = !!width && width.inner < width.outer;\n\n return (\n <OptionsList {...menuProps} ref={mergedRef} stickyItemBlockSize={stickyOptionBlockSize}>\n {renderOptions({\n options: filteredOptions,\n getOptionProps,\n filteringValue,\n highlightType,\n checkboxes,\n hasDropdownStatus,\n useInteractiveGroups,\n screenReaderContent,\n firstOptionSticky,\n stickyOptionRef,\n withScrollbar,\n })}\n {listBottom ? (\n <li role=\"option\" className={styles['list-bottom']}>\n {listBottom}\n </li>\n ) : null}\n </OptionsList>\n );\n};\n\nexport default forwardRef(PlainList);\n"]}
1
+ {"version":3,"file":"plain-list.js","sourceRoot":"","sources":["../../../../src/select/parts/plain-list.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, { forwardRef, useImperativeHandle, useRef, useState } from 'react';\n\nimport { useContainerQuery } from '@cloudscape-design/component-toolkit';\nimport { useMergeRefs, useUniqueId } from '@cloudscape-design/component-toolkit/internal';\n\nimport { DropdownOption } from '../../internal/components/option/interfaces';\nimport OptionsList from '../../internal/components/options-list';\nimport { HighlightType } from '../../internal/components/options-list/utils/use-highlight-option';\nimport { renderOptions } from '../utils/render-options';\nimport scrollToIndex from '../utils/scroll-to-index';\nimport { GetOptionProps, MenuProps } from '../utils/use-select';\nimport { fallbackItemHeight } from './common';\n\nimport styles from './styles.css.js';\n\nexport interface SelectListProps {\n menuProps: MenuProps;\n getOptionProps: GetOptionProps;\n filteredOptions: ReadonlyArray<DropdownOption>;\n filteringValue: string;\n highlightType: HighlightType;\n checkboxes?: boolean;\n hasDropdownStatus?: boolean;\n listBottom?: React.ReactNode;\n useInteractiveGroups?: boolean;\n screenReaderContent?: string;\n firstOptionSticky?: boolean;\n}\n\nexport namespace SelectListProps {\n export type SelectListRef = (index: number) => void;\n}\n\nconst PlainList = (\n {\n menuProps,\n getOptionProps,\n filteredOptions,\n filteringValue,\n highlightType,\n checkboxes,\n hasDropdownStatus,\n listBottom,\n useInteractiveGroups,\n screenReaderContent,\n firstOptionSticky,\n }: SelectListProps,\n ref: React.Ref<SelectListProps.SelectListRef>\n) => {\n const idPrefix = useUniqueId('select-list-');\n const stickyOptionRef = useRef<HTMLDivElement>(null);\n const [stickyOptionBlockSize, setStickyOptionBlockSize] = useState(firstOptionSticky ? fallbackItemHeight : 0);\n\n const [width, menuMeasureRef] = useContainerQuery(rect => {\n if (stickyOptionRef.current) {\n // Cannot use container query on the sticky option individually because it is not rendered until the dropdown is open.\n // Not expecting the sticky option to change size without the dropdown also changing size.\n\n // The effects of using the sticky option block size to set the menu scroll padding are covered by integration tests.\n // istanbul ignore next\n setStickyOptionBlockSize(stickyOptionRef.current.clientHeight);\n }\n return { inner: rect.contentBoxWidth, outer: rect.borderBoxWidth };\n });\n\n const menuRef = menuProps.ref;\n\n const mergedRef = useMergeRefs(menuMeasureRef, menuRef);\n\n useImperativeHandle(\n ref,\n () => (index: number) => {\n const isSticky = firstOptionSticky && index === 0;\n if (highlightType.moveFocus && menuRef.current && !isSticky) {\n scrollToIndex({ index, menuEl: menuRef.current });\n }\n },\n [firstOptionSticky, highlightType.moveFocus, menuRef]\n );\n\n const withScrollbar = !!width && width.inner < width.outer;\n\n return (\n <OptionsList {...menuProps} ref={mergedRef} stickyItemBlockSize={stickyOptionBlockSize}>\n {renderOptions({\n options: filteredOptions,\n getOptionProps,\n filteringValue,\n idPrefix,\n highlightType,\n checkboxes,\n hasDropdownStatus,\n useInteractiveGroups,\n screenReaderContent,\n firstOptionSticky,\n stickyOptionRef,\n withScrollbar,\n })}\n {listBottom ? (\n <div role=\"option\" className={styles['list-bottom']}>\n {listBottom}\n </div>\n ) : null}\n </OptionsList>\n );\n};\n\nexport default forwardRef(PlainList);\n"]}
@@ -1,26 +1,27 @@
1
1
 
2
2
  import './styles.scoped.css';
3
3
  export default {
4
- "placeholder": "awsui_placeholder_dwuol_1d3u0_145",
5
- "item": "awsui_item_dwuol_1d3u0_150",
6
- "checkbox": "awsui_checkbox_dwuol_1d3u0_154",
7
- "filter": "awsui_filter_dwuol_1d3u0_163",
8
- "trigger": "awsui_trigger_dwuol_1d3u0_168",
9
- "layout-strut": "awsui_layout-strut_dwuol_1d3u0_174",
10
- "list-bottom": "awsui_list-bottom_dwuol_1d3u0_180",
11
- "selected-icon": "awsui_selected-icon_dwuol_1d3u0_184",
12
- "show-label-tag": "awsui_show-label-tag_dwuol_1d3u0_188",
13
- "inline-token-trigger": "awsui_inline-token-trigger_dwuol_1d3u0_192",
14
- "inline-token-list": "awsui_inline-token-list_dwuol_1d3u0_199",
15
- "inline-token": "awsui_inline-token_dwuol_1d3u0_192",
16
- "visual-refresh": "awsui_visual-refresh_dwuol_1d3u0_229",
17
- "inline-token-hidden-placeholder": "awsui_inline-token-hidden-placeholder_dwuol_1d3u0_236",
18
- "inline-token-counter": "awsui_inline-token-counter_dwuol_1d3u0_242",
19
- "inline-token-trigger--disabled": "awsui_inline-token-trigger--disabled_dwuol_1d3u0_246",
20
- "inline-label-trigger-wrapper": "awsui_inline-label-trigger-wrapper_dwuol_1d3u0_252",
21
- "inline-label-wrapper": "awsui_inline-label-wrapper_dwuol_1d3u0_256",
22
- "inline-label": "awsui_inline-label_dwuol_1d3u0_252",
23
- "inline-label-inline-tokens": "awsui_inline-label-inline-tokens_dwuol_1d3u0_282",
24
- "disabled-reason-tooltip": "awsui_disabled-reason-tooltip_dwuol_1d3u0_287"
4
+ "placeholder": "awsui_placeholder_dwuol_pay5s_145",
5
+ "item": "awsui_item_dwuol_pay5s_150",
6
+ "checkbox": "awsui_checkbox_dwuol_pay5s_154",
7
+ "option-group": "awsui_option-group_dwuol_pay5s_163",
8
+ "filter": "awsui_filter_dwuol_pay5s_167",
9
+ "trigger": "awsui_trigger_dwuol_pay5s_172",
10
+ "layout-strut": "awsui_layout-strut_dwuol_pay5s_178",
11
+ "list-bottom": "awsui_list-bottom_dwuol_pay5s_184",
12
+ "selected-icon": "awsui_selected-icon_dwuol_pay5s_188",
13
+ "show-label-tag": "awsui_show-label-tag_dwuol_pay5s_192",
14
+ "inline-token-trigger": "awsui_inline-token-trigger_dwuol_pay5s_196",
15
+ "inline-token-list": "awsui_inline-token-list_dwuol_pay5s_203",
16
+ "inline-token": "awsui_inline-token_dwuol_pay5s_196",
17
+ "visual-refresh": "awsui_visual-refresh_dwuol_pay5s_233",
18
+ "inline-token-hidden-placeholder": "awsui_inline-token-hidden-placeholder_dwuol_pay5s_240",
19
+ "inline-token-counter": "awsui_inline-token-counter_dwuol_pay5s_246",
20
+ "inline-token-trigger--disabled": "awsui_inline-token-trigger--disabled_dwuol_pay5s_250",
21
+ "inline-label-trigger-wrapper": "awsui_inline-label-trigger-wrapper_dwuol_pay5s_256",
22
+ "inline-label-wrapper": "awsui_inline-label-wrapper_dwuol_pay5s_260",
23
+ "inline-label": "awsui_inline-label_dwuol_pay5s_256",
24
+ "inline-label-inline-tokens": "awsui_inline-label-inline-tokens_dwuol_pay5s_286",
25
+ "disabled-reason-tooltip": "awsui_disabled-reason-tooltip_dwuol_pay5s_291"
25
26
  };
26
27
 
@@ -142,16 +142,16 @@
142
142
  */
143
143
  /* Style used for links in slots/components that are text heavy, to help links stand out among
144
144
  surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F73#description */
145
- .awsui_placeholder_dwuol_1d3u0_145:not(#\9) {
145
+ .awsui_placeholder_dwuol_pay5s_145:not(#\9) {
146
146
  color: var(--color-text-input-placeholder-hvcry0, #687078);
147
147
  font-style: italic;
148
148
  }
149
149
 
150
- .awsui_item_dwuol_1d3u0_150:not(#\9) {
150
+ .awsui_item_dwuol_pay5s_150:not(#\9) {
151
151
  display: flex;
152
152
  align-items: center;
153
153
  }
154
- .awsui_item_dwuol_1d3u0_150 > .awsui_checkbox_dwuol_1d3u0_154:not(#\9) {
154
+ .awsui_item_dwuol_pay5s_150 > .awsui_checkbox_dwuol_pay5s_154:not(#\9) {
155
155
  position: relative;
156
156
  min-block-size: var(--size-control-lkpwjy, 14px);
157
157
  min-inline-size: var(--size-control-lkpwjy, 14px);
@@ -160,43 +160,47 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
160
160
  margin-inline-end: var(--space-field-horizontal-n5peob, 8px);
161
161
  }
162
162
 
163
- .awsui_filter_dwuol_1d3u0_163:not(#\9) {
163
+ .awsui_option-group_dwuol_pay5s_163:not(#\9):not(:first-child) {
164
+ margin-block-start: calc(-1 * var(--border-item-width-acvlhx, 1px));
165
+ }
166
+
167
+ .awsui_filter_dwuol_pay5s_167:not(#\9) {
164
168
  z-index: 4;
165
169
  flex-shrink: 0;
166
170
  }
167
171
 
168
- .awsui_trigger_dwuol_1d3u0_168:not(#\9) {
172
+ .awsui_trigger_dwuol_pay5s_172:not(#\9) {
169
173
  white-space: nowrap;
170
174
  overflow: hidden;
171
175
  text-overflow: ellipsis;
172
176
  }
173
177
 
174
- .awsui_layout-strut_dwuol_1d3u0_174:not(#\9) {
178
+ .awsui_layout-strut_dwuol_pay5s_178:not(#\9) {
175
179
  inline-size: 100%;
176
180
  position: relative;
177
181
  transform: translate3d(0, 0, 0);
178
182
  }
179
183
 
180
- .awsui_list-bottom_dwuol_1d3u0_180:not(#\9) {
184
+ .awsui_list-bottom_dwuol_pay5s_184:not(#\9) {
181
185
  /* used in unit-tests */
182
186
  }
183
187
 
184
- .awsui_selected-icon_dwuol_1d3u0_184:not(#\9) {
188
+ .awsui_selected-icon_dwuol_pay5s_188:not(#\9) {
185
189
  color: var(--color-border-item-focused-r5f6xl, #0073bb);
186
190
  }
187
191
 
188
- .awsui_show-label-tag_dwuol_1d3u0_188 > .awsui_selected-icon_dwuol_1d3u0_184:not(#\9) {
192
+ .awsui_show-label-tag_dwuol_pay5s_192 > .awsui_selected-icon_dwuol_pay5s_188:not(#\9) {
189
193
  padding-inline-start: var(--space-scaled-s-gjhvjd, 12px);
190
194
  }
191
195
 
192
- .awsui_inline-token-trigger_dwuol_1d3u0_192:not(#\9) {
196
+ .awsui_inline-token-trigger_dwuol_pay5s_196:not(#\9) {
193
197
  display: flex;
194
198
  flex-wrap: nowrap;
195
199
  column-gap: var(--space-xxs-jnczic, 4px);
196
200
  inline-size: 100%;
197
201
  }
198
202
 
199
- .awsui_inline-token-list_dwuol_1d3u0_199:not(#\9) {
203
+ .awsui_inline-token-list_dwuol_pay5s_203:not(#\9) {
200
204
  display: flex;
201
205
  flex-wrap: nowrap;
202
206
  align-items: center;
@@ -206,10 +210,10 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
206
210
  mask-image: linear-gradient(270deg, transparent, white 20px, white);
207
211
  /* stylelint-disable-next-line plugin/no-unsupported-browser-features */
208
212
  }
209
- .awsui_inline-token-list_dwuol_1d3u0_199:not(#\9):dir(rtl) {
213
+ .awsui_inline-token-list_dwuol_pay5s_203:not(#\9):dir(rtl) {
210
214
  mask-image: linear-gradient(-270deg, transparent, white 20px, white);
211
215
  }
212
- .awsui_inline-token-list_dwuol_1d3u0_199 > .awsui_inline-token_dwuol_1d3u0_192:not(#\9) {
216
+ .awsui_inline-token-list_dwuol_pay5s_203 > .awsui_inline-token_dwuol_pay5s_196:not(#\9) {
213
217
  display: flex;
214
218
  align-items: center;
215
219
  min-inline-size: max-content;
@@ -226,38 +230,38 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
226
230
  color: var(--color-text-body-default-5qid0u, #16191f);
227
231
  }
228
232
 
229
- .awsui_visual-refresh_dwuol_1d3u0_229 > .awsui_inline-token-list_dwuol_1d3u0_199 > .awsui_inline-token_dwuol_1d3u0_192:not(#\9) {
233
+ .awsui_visual-refresh_dwuol_pay5s_233 > .awsui_inline-token-list_dwuol_pay5s_203 > .awsui_inline-token_dwuol_pay5s_196:not(#\9) {
230
234
  border-start-start-radius: var(--border-radius-badge-o70tla, 16px);
231
235
  border-start-end-radius: var(--border-radius-badge-o70tla, 16px);
232
236
  border-end-start-radius: var(--border-radius-badge-o70tla, 16px);
233
237
  border-end-end-radius: var(--border-radius-badge-o70tla, 16px);
234
238
  }
235
239
 
236
- .awsui_inline-token-hidden-placeholder_dwuol_1d3u0_236:not(#\9) {
240
+ .awsui_inline-token-hidden-placeholder_dwuol_pay5s_240:not(#\9) {
237
241
  position: absolute !important;
238
242
  inset-block-start: -9999px !important;
239
243
  inset-inline-start: -9999px !important;
240
244
  }
241
245
 
242
- .awsui_inline-token-counter_dwuol_1d3u0_242:not(#\9) {
246
+ .awsui_inline-token-counter_dwuol_pay5s_246:not(#\9) {
243
247
  white-space: nowrap;
244
248
  }
245
249
 
246
- .awsui_inline-token-trigger--disabled_dwuol_1d3u0_246 > .awsui_inline-token-list_dwuol_1d3u0_199 > .awsui_inline-token_dwuol_1d3u0_192:not(#\9) {
250
+ .awsui_inline-token-trigger--disabled_dwuol_pay5s_250 > .awsui_inline-token-list_dwuol_pay5s_203 > .awsui_inline-token_dwuol_pay5s_196:not(#\9) {
247
251
  border-color: var(--color-border-control-disabled-c9dn39, #d5dbdb);
248
252
  background-color: var(--color-background-container-content-aemn43, #ffffff);
249
253
  color: var(--color-text-disabled-bhrk1i, #aab7b8);
250
254
  }
251
255
 
252
- .awsui_inline-label-trigger-wrapper_dwuol_1d3u0_252:not(#\9) {
256
+ .awsui_inline-label-trigger-wrapper_dwuol_pay5s_256:not(#\9) {
253
257
  margin-block-start: -7px;
254
258
  }
255
259
 
256
- .awsui_inline-label-wrapper_dwuol_1d3u0_256:not(#\9) {
260
+ .awsui_inline-label-wrapper_dwuol_pay5s_260:not(#\9) {
257
261
  margin-block-start: calc(var(--space-scaled-xs-sppte9, 8px) * -1);
258
262
  }
259
263
 
260
- .awsui_inline-label_dwuol_1d3u0_252:not(#\9) {
264
+ .awsui_inline-label_dwuol_pay5s_256:not(#\9) {
261
265
  background: linear-gradient(to bottom, var(--color-background-layout-main-05m5y6, #f2f3f3), var(--color-background-input-default-1z2buq, #ffffff));
262
266
  border-start-start-radius: 2px;
263
267
  border-start-end-radius: 2px;
@@ -279,11 +283,11 @@ surrounding text. (WCAG F73) https://www.w3.org/WAI/WCAG21/Techniques/failures/F
279
283
  z-index: 1;
280
284
  }
281
285
 
282
- .awsui_inline-label-inline-tokens_dwuol_1d3u0_282:not(#\9) {
286
+ .awsui_inline-label-inline-tokens_dwuol_pay5s_286:not(#\9) {
283
287
  padding-block-end: 0;
284
288
  transform: translateY(-1.5px);
285
289
  }
286
290
 
287
- .awsui_disabled-reason-tooltip_dwuol_1d3u0_287:not(#\9) {
291
+ .awsui_disabled-reason-tooltip_dwuol_pay5s_291:not(#\9) {
288
292
  /* used in test-utils or tests */
289
293
  }
@@ -2,26 +2,27 @@
2
2
  // es-module interop with Babel and Typescript
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  module.exports.default = {
5
- "placeholder": "awsui_placeholder_dwuol_1d3u0_145",
6
- "item": "awsui_item_dwuol_1d3u0_150",
7
- "checkbox": "awsui_checkbox_dwuol_1d3u0_154",
8
- "filter": "awsui_filter_dwuol_1d3u0_163",
9
- "trigger": "awsui_trigger_dwuol_1d3u0_168",
10
- "layout-strut": "awsui_layout-strut_dwuol_1d3u0_174",
11
- "list-bottom": "awsui_list-bottom_dwuol_1d3u0_180",
12
- "selected-icon": "awsui_selected-icon_dwuol_1d3u0_184",
13
- "show-label-tag": "awsui_show-label-tag_dwuol_1d3u0_188",
14
- "inline-token-trigger": "awsui_inline-token-trigger_dwuol_1d3u0_192",
15
- "inline-token-list": "awsui_inline-token-list_dwuol_1d3u0_199",
16
- "inline-token": "awsui_inline-token_dwuol_1d3u0_192",
17
- "visual-refresh": "awsui_visual-refresh_dwuol_1d3u0_229",
18
- "inline-token-hidden-placeholder": "awsui_inline-token-hidden-placeholder_dwuol_1d3u0_236",
19
- "inline-token-counter": "awsui_inline-token-counter_dwuol_1d3u0_242",
20
- "inline-token-trigger--disabled": "awsui_inline-token-trigger--disabled_dwuol_1d3u0_246",
21
- "inline-label-trigger-wrapper": "awsui_inline-label-trigger-wrapper_dwuol_1d3u0_252",
22
- "inline-label-wrapper": "awsui_inline-label-wrapper_dwuol_1d3u0_256",
23
- "inline-label": "awsui_inline-label_dwuol_1d3u0_252",
24
- "inline-label-inline-tokens": "awsui_inline-label-inline-tokens_dwuol_1d3u0_282",
25
- "disabled-reason-tooltip": "awsui_disabled-reason-tooltip_dwuol_1d3u0_287"
5
+ "placeholder": "awsui_placeholder_dwuol_pay5s_145",
6
+ "item": "awsui_item_dwuol_pay5s_150",
7
+ "checkbox": "awsui_checkbox_dwuol_pay5s_154",
8
+ "option-group": "awsui_option-group_dwuol_pay5s_163",
9
+ "filter": "awsui_filter_dwuol_pay5s_167",
10
+ "trigger": "awsui_trigger_dwuol_pay5s_172",
11
+ "layout-strut": "awsui_layout-strut_dwuol_pay5s_178",
12
+ "list-bottom": "awsui_list-bottom_dwuol_pay5s_184",
13
+ "selected-icon": "awsui_selected-icon_dwuol_pay5s_188",
14
+ "show-label-tag": "awsui_show-label-tag_dwuol_pay5s_192",
15
+ "inline-token-trigger": "awsui_inline-token-trigger_dwuol_pay5s_196",
16
+ "inline-token-list": "awsui_inline-token-list_dwuol_pay5s_203",
17
+ "inline-token": "awsui_inline-token_dwuol_pay5s_196",
18
+ "visual-refresh": "awsui_visual-refresh_dwuol_pay5s_233",
19
+ "inline-token-hidden-placeholder": "awsui_inline-token-hidden-placeholder_dwuol_pay5s_240",
20
+ "inline-token-counter": "awsui_inline-token-counter_dwuol_pay5s_246",
21
+ "inline-token-trigger--disabled": "awsui_inline-token-trigger--disabled_dwuol_pay5s_250",
22
+ "inline-label-trigger-wrapper": "awsui_inline-label-trigger-wrapper_dwuol_pay5s_256",
23
+ "inline-label-wrapper": "awsui_inline-label-wrapper_dwuol_pay5s_260",
24
+ "inline-label": "awsui_inline-label_dwuol_pay5s_256",
25
+ "inline-label-inline-tokens": "awsui_inline-label-inline-tokens_dwuol_pay5s_286",
26
+ "disabled-reason-tooltip": "awsui_disabled-reason-tooltip_dwuol_pay5s_291"
26
27
  };
27
28
 
@@ -1 +1 @@
1
- {"version":3,"file":"virtual-list.d.ts","sourceRoot":"","sources":["../../../../src/select/parts/virtual-list.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA+D,MAAM,OAAO,CAAC;AAUpF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;;AA0H/C,wBAAuC"}
1
+ {"version":3,"file":"virtual-list.d.ts","sourceRoot":"","sources":["../../../../src/select/parts/virtual-list.tsx"],"names":[],"mappings":"AAEA,OAAO,KAA+D,MAAM,OAAO,CAAC;AAUpF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;;AA4H/C,wBAAuC"}
@@ -2,7 +2,7 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import React, { forwardRef, useCallback, useImperativeHandle, useRef } from 'react';
4
4
  import { useContainerQuery } from '@cloudscape-design/component-toolkit';
5
- import { useMergeRefs } from '@cloudscape-design/component-toolkit/internal';
5
+ import { useMergeRefs, useUniqueId } from '@cloudscape-design/component-toolkit/internal';
6
6
  import OptionsList from '../../internal/components/options-list';
7
7
  import { useVirtual } from '../../internal/hooks/use-virtual';
8
8
  import { renderOptions } from '../utils/render-options';
@@ -52,11 +52,13 @@ const VirtualListOpen = forwardRef(({ menuProps, getOptionProps, filteredOptions
52
52
  }, [firstOptionSticky, highlightType.moveFocus, scrollToIndex]);
53
53
  const stickySize = firstOptionSticky ? virtualItems[0].size : 0;
54
54
  const withScrollbar = !!width && width.inner < width.outer;
55
+ const idPrefix = useUniqueId('select-list-');
55
56
  const finalOptions = renderOptions({
56
57
  options: virtualItems.map(({ index }) => filteredOptions[index]),
57
58
  getOptionProps,
58
59
  filteringValue,
59
60
  highlightType,
61
+ idPrefix,
60
62
  checkboxes,
61
63
  hasDropdownStatus,
62
64
  virtualItems,
@@ -68,11 +70,11 @@ const VirtualListOpen = forwardRef(({ menuProps, getOptionProps, filteredOptions
68
70
  return (React.createElement(OptionsList, Object.assign({}, menuProps, { stickyItemBlockSize: stickySize, ref: menuRef }),
69
71
  finalOptions,
70
72
  React.createElement("div", { "aria-hidden": "true", key: "total-size", className: styles['layout-strut'], style: { height: totalSize - stickySize } }),
71
- listBottom ? (React.createElement("li", { role: "option", className: styles['list-bottom'] }, listBottom)) : null));
73
+ listBottom ? (React.createElement("div", { role: "option", className: styles['list-bottom'] }, listBottom)) : null));
72
74
  });
73
75
  const VirtualListClosed = forwardRef(({ menuProps, listBottom }, ref) => {
74
76
  useImperativeHandle(ref, () => () => { }, []);
75
- return (React.createElement(OptionsList, Object.assign({}, menuProps, { ref: menuProps.ref }), listBottom ? (React.createElement("li", { role: "option", className: styles['list-bottom'] }, listBottom)) : null));
77
+ return (React.createElement(OptionsList, Object.assign({}, menuProps, { ref: menuProps.ref }), listBottom ? (React.createElement("div", { role: "option", className: styles['list-bottom'] }, listBottom)) : null));
76
78
  });
77
79
  export default forwardRef(VirtualList);
78
80
  //# sourceMappingURL=virtual-list.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"virtual-list.js","sourceRoot":"","sources":["../../../../src/select/parts/virtual-list.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, { forwardRef, useCallback, useImperativeHandle, useRef } from 'react';\n\nimport { useContainerQuery } from '@cloudscape-design/component-toolkit';\nimport { useMergeRefs } from '@cloudscape-design/component-toolkit/internal';\n\nimport OptionsList from '../../internal/components/options-list';\nimport { useVirtual } from '../../internal/hooks/use-virtual';\nimport { renderOptions } from '../utils/render-options';\nimport customScrollToIndex from '../utils/scroll-to-index';\nimport { fallbackItemHeight } from './common';\nimport { SelectListProps } from './plain-list';\n\nimport styles from './styles.css.js';\n\nconst VirtualList = (props: SelectListProps, ref: React.Ref<SelectListProps.SelectListRef>) => {\n return props.menuProps.open ? <VirtualListOpen {...props} ref={ref} /> : <VirtualListClosed {...props} ref={ref} />;\n};\n\nconst VirtualListOpen = forwardRef(\n (\n {\n menuProps,\n getOptionProps,\n filteredOptions,\n filteringValue,\n highlightType,\n checkboxes,\n hasDropdownStatus,\n listBottom,\n useInteractiveGroups,\n screenReaderContent,\n firstOptionSticky,\n }: SelectListProps,\n ref: React.Ref<SelectListProps.SelectListRef>\n ) => {\n // update component, when it gets wider or narrower to reposition items\n const [width, menuMeasureRef] = useContainerQuery(\n rect => ({ inner: rect.contentBoxWidth, outer: rect.borderBoxWidth }),\n []\n );\n const menuRefObject = useRef(null);\n const menuRef = useMergeRefs(menuMeasureRef, menuRefObject, menuProps.ref);\n const previousHighlightedIndex = useRef<number>();\n const { virtualItems, totalSize, scrollToIndex } = useVirtual({\n items: filteredOptions,\n parentRef: menuRefObject,\n // estimateSize is a dependency of measurements memo. We update it to force full recalculation\n // when the height of any option could have changed:\n // 1: because the component got resized (width property got updated)\n // 2: because the option changed its content (filteringValue property controls the highlight and the visibility of hidden tags)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n estimateSize: useCallback(() => fallbackItemHeight, [width?.inner, filteringValue]),\n firstItemSticky: firstOptionSticky,\n });\n\n useImperativeHandle(\n ref,\n () => (index: number) => {\n if (highlightType.moveFocus) {\n const movingUp = previousHighlightedIndex.current !== undefined && index < previousHighlightedIndex.current;\n if (firstOptionSticky && movingUp && index !== 0 && menuRefObject.current) {\n // React-Virtual v2 does not offer a proper way to handle sticky elements when scrolling,\n // so until we upgrade to v3, use our own scroll implementation\n // to prevent newly highlighted element from being covered by the sticky element\n // when moving the highlight upwards in the list.\n\n // Scrolling behavior is covered by integration tests.\n // istanbul ignore next\n customScrollToIndex({\n index,\n menuEl: menuRefObject?.current,\n });\n } else {\n scrollToIndex(index);\n }\n }\n previousHighlightedIndex.current = index;\n },\n [firstOptionSticky, highlightType.moveFocus, scrollToIndex]\n );\n\n const stickySize = firstOptionSticky ? virtualItems[0].size : 0;\n const withScrollbar = !!width && width.inner < width.outer;\n\n const finalOptions = renderOptions({\n options: virtualItems.map(({ index }) => filteredOptions[index]),\n getOptionProps,\n filteringValue,\n highlightType,\n checkboxes,\n hasDropdownStatus,\n virtualItems,\n useInteractiveGroups,\n screenReaderContent,\n firstOptionSticky,\n withScrollbar,\n });\n\n return (\n <OptionsList {...menuProps} stickyItemBlockSize={stickySize} ref={menuRef}>\n {finalOptions}\n <div\n aria-hidden=\"true\"\n key=\"total-size\"\n className={styles['layout-strut']}\n style={{ height: totalSize - stickySize }}\n />\n {listBottom ? (\n <li role=\"option\" className={styles['list-bottom']}>\n {listBottom}\n </li>\n ) : null}\n </OptionsList>\n );\n }\n);\n\nconst VirtualListClosed = forwardRef(\n ({ menuProps, listBottom }: SelectListProps, ref: React.Ref<SelectListProps.SelectListRef>) => {\n useImperativeHandle(ref, () => () => {}, []);\n return (\n <OptionsList {...menuProps} ref={menuProps.ref}>\n {listBottom ? (\n <li role=\"option\" className={styles['list-bottom']}>\n {listBottom}\n </li>\n ) : null}\n </OptionsList>\n );\n }\n);\n\nexport default forwardRef(VirtualList);\n"]}
1
+ {"version":3,"file":"virtual-list.js","sourceRoot":"","sources":["../../../../src/select/parts/virtual-list.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, { forwardRef, useCallback, useImperativeHandle, useRef } from 'react';\n\nimport { useContainerQuery } from '@cloudscape-design/component-toolkit';\nimport { useMergeRefs, useUniqueId } from '@cloudscape-design/component-toolkit/internal';\n\nimport OptionsList from '../../internal/components/options-list';\nimport { useVirtual } from '../../internal/hooks/use-virtual';\nimport { renderOptions } from '../utils/render-options';\nimport customScrollToIndex from '../utils/scroll-to-index';\nimport { fallbackItemHeight } from './common';\nimport { SelectListProps } from './plain-list';\n\nimport styles from './styles.css.js';\n\nconst VirtualList = (props: SelectListProps, ref: React.Ref<SelectListProps.SelectListRef>) => {\n return props.menuProps.open ? <VirtualListOpen {...props} ref={ref} /> : <VirtualListClosed {...props} ref={ref} />;\n};\n\nconst VirtualListOpen = forwardRef(\n (\n {\n menuProps,\n getOptionProps,\n filteredOptions,\n filteringValue,\n highlightType,\n checkboxes,\n hasDropdownStatus,\n listBottom,\n useInteractiveGroups,\n screenReaderContent,\n firstOptionSticky,\n }: SelectListProps,\n ref: React.Ref<SelectListProps.SelectListRef>\n ) => {\n // update component, when it gets wider or narrower to reposition items\n const [width, menuMeasureRef] = useContainerQuery(\n rect => ({ inner: rect.contentBoxWidth, outer: rect.borderBoxWidth }),\n []\n );\n const menuRefObject = useRef(null);\n const menuRef = useMergeRefs(menuMeasureRef, menuRefObject, menuProps.ref);\n const previousHighlightedIndex = useRef<number>();\n const { virtualItems, totalSize, scrollToIndex } = useVirtual({\n items: filteredOptions,\n parentRef: menuRefObject,\n // estimateSize is a dependency of measurements memo. We update it to force full recalculation\n // when the height of any option could have changed:\n // 1: because the component got resized (width property got updated)\n // 2: because the option changed its content (filteringValue property controls the highlight and the visibility of hidden tags)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n estimateSize: useCallback(() => fallbackItemHeight, [width?.inner, filteringValue]),\n firstItemSticky: firstOptionSticky,\n });\n\n useImperativeHandle(\n ref,\n () => (index: number) => {\n if (highlightType.moveFocus) {\n const movingUp = previousHighlightedIndex.current !== undefined && index < previousHighlightedIndex.current;\n if (firstOptionSticky && movingUp && index !== 0 && menuRefObject.current) {\n // React-Virtual v2 does not offer a proper way to handle sticky elements when scrolling,\n // so until we upgrade to v3, use our own scroll implementation\n // to prevent newly highlighted element from being covered by the sticky element\n // when moving the highlight upwards in the list.\n\n // Scrolling behavior is covered by integration tests.\n // istanbul ignore next\n customScrollToIndex({\n index,\n menuEl: menuRefObject?.current,\n });\n } else {\n scrollToIndex(index);\n }\n }\n previousHighlightedIndex.current = index;\n },\n [firstOptionSticky, highlightType.moveFocus, scrollToIndex]\n );\n\n const stickySize = firstOptionSticky ? virtualItems[0].size : 0;\n const withScrollbar = !!width && width.inner < width.outer;\n\n const idPrefix = useUniqueId('select-list-');\n const finalOptions = renderOptions({\n options: virtualItems.map(({ index }) => filteredOptions[index]),\n getOptionProps,\n filteringValue,\n highlightType,\n idPrefix,\n checkboxes,\n hasDropdownStatus,\n virtualItems,\n useInteractiveGroups,\n screenReaderContent,\n firstOptionSticky,\n withScrollbar,\n });\n\n return (\n <OptionsList {...menuProps} stickyItemBlockSize={stickySize} ref={menuRef}>\n {finalOptions}\n <div\n aria-hidden=\"true\"\n key=\"total-size\"\n className={styles['layout-strut']}\n style={{ height: totalSize - stickySize }}\n />\n {listBottom ? (\n <div role=\"option\" className={styles['list-bottom']}>\n {listBottom}\n </div>\n ) : null}\n </OptionsList>\n );\n }\n);\n\nconst VirtualListClosed = forwardRef(\n ({ menuProps, listBottom }: SelectListProps, ref: React.Ref<SelectListProps.SelectListRef>) => {\n useImperativeHandle(ref, () => () => {}, []);\n return (\n <OptionsList {...menuProps} ref={menuProps.ref}>\n {listBottom ? (\n <div role=\"option\" className={styles['list-bottom']}>\n {listBottom}\n </div>\n ) : null}\n </OptionsList>\n );\n }\n);\n\nexport default forwardRef(VirtualList);\n"]}
@@ -7,6 +7,7 @@ interface RenderOptionProps {
7
7
  getOptionProps: any;
8
8
  filteringValue: string;
9
9
  highlightType: HighlightType;
10
+ idPrefix: string;
10
11
  checkboxes?: boolean;
11
12
  hasDropdownStatus?: boolean;
12
13
  virtualItems?: VirtualItem[];
@@ -17,6 +18,6 @@ interface RenderOptionProps {
17
18
  firstOptionSticky?: boolean;
18
19
  stickyOptionRef?: React.Ref<HTMLDivElement>;
19
20
  }
20
- export declare const renderOptions: ({ options, getOptionProps, filteringValue, highlightType, checkboxes, hasDropdownStatus, virtualItems, useInteractiveGroups, screenReaderContent, ariaSetsize, withScrollbar, firstOptionSticky, stickyOptionRef, }: RenderOptionProps) => JSX.Element[];
21
+ export declare const renderOptions: ({ options, getOptionProps, filteringValue, highlightType, idPrefix, checkboxes, hasDropdownStatus, virtualItems, useInteractiveGroups, screenReaderContent, ariaSetsize, withScrollbar, firstOptionSticky, stickyOptionRef, }: RenderOptionProps) => JSX.Element[];
21
22
  export {};
22
23
  //# sourceMappingURL=render-options.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-options.d.ts","sourceRoot":"","sources":["../../../../src/select/utils/render-options.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,mEAAmE,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAKlE,UAAU,iBAAiB;IACzB,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACvC,cAAc,EAAE,GAAG,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;CAC7C;AAED,eAAO,MAAM,aAAa,wNAcvB,iBAAiB,kBAiCnB,CAAC"}
1
+ {"version":3,"file":"render-options.d.ts","sourceRoot":"","sources":["../../../../src/select/utils/render-options.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,MAAM,6CAA6C,CAAC;AAE7E,OAAO,EAAE,aAAa,EAAE,MAAM,mEAAmE,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAC;AAMlE,UAAU,iBAAiB;IACzB,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACvC,cAAc,EAAE,GAAG,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,OAAO,CAAC;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;CAC7C;AAED,eAAO,MAAM,aAAa,kOAevB,iBAAiB,kBAgEnB,CAAC"}
@@ -1,25 +1,45 @@
1
1
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
  import React from 'react';
4
+ import { unflattenOptions } from '../../internal/components/option/utils/unflatten-options';
4
5
  import Item from '../parts/item';
5
6
  import MultiselectItem from '../parts/multiselect-item';
7
+ import OptionGroup from '../parts/option-group';
6
8
  import { getItemProps } from './get-item-props';
7
- export const renderOptions = ({ options, getOptionProps, filteringValue, highlightType, checkboxes = false, hasDropdownStatus, virtualItems, useInteractiveGroups, screenReaderContent, ariaSetsize, withScrollbar, firstOptionSticky, stickyOptionRef, }) => {
8
- return options.map((option, index) => {
9
+ export const renderOptions = ({ options, getOptionProps, filteringValue, highlightType, idPrefix, checkboxes = false, hasDropdownStatus, virtualItems, useInteractiveGroups, screenReaderContent, ariaSetsize, withScrollbar, firstOptionSticky, stickyOptionRef, }) => {
10
+ const getNestedItemProps = ({ index, option }) => {
9
11
  const virtualItem = virtualItems && virtualItems[index];
10
12
  const globalIndex = virtualItem ? virtualItem.index : index;
11
- const props = getItemProps({
13
+ return getItemProps({
12
14
  option,
13
15
  index: globalIndex,
14
16
  getOptionProps,
15
17
  filteringValue: option.type === 'select-all' ? '' : filteringValue,
16
18
  checkboxes,
17
19
  });
20
+ };
21
+ const renderListItem = (props, index) => {
22
+ const virtualItem = virtualItems && virtualItems[index];
23
+ const globalIndex = virtualItem ? virtualItem.index : index;
18
24
  const isLastItem = index === options.length - 1;
19
25
  const padBottom = !hasDropdownStatus && isLastItem;
20
26
  const ListItem = useInteractiveGroups ? MultiselectItem : Item;
21
27
  const isSticky = firstOptionSticky && globalIndex === 0;
22
28
  return (React.createElement(ListItem, Object.assign({ key: globalIndex }, props, { virtualPosition: virtualItem && virtualItem.start, ref: isSticky && stickyOptionRef ? stickyOptionRef : virtualItem && virtualItem.measureRef, padBottom: padBottom, screenReaderContent: screenReaderContent, ariaPosinset: globalIndex + 1, ariaSetsize: ariaSetsize, highlightType: highlightType.type, withScrollbar: withScrollbar, sticky: isSticky })));
29
+ };
30
+ const unflattenedOptions = unflattenOptions(options);
31
+ return unflattenedOptions.map(nestedDropdownOption => {
32
+ var _a;
33
+ const index = nestedDropdownOption.index;
34
+ const props = getNestedItemProps(nestedDropdownOption);
35
+ if (nestedDropdownOption.type === 'parent') {
36
+ const { children } = nestedDropdownOption;
37
+ const optionId = (_a = props.id) !== null && _a !== void 0 ? _a : `${idPrefix}-option-${index}`;
38
+ return (React.createElement(OptionGroup, { key: index, virtual: (virtualItems === null || virtualItems === void 0 ? void 0 : virtualItems[index]) !== undefined, ariaLabelledby: optionId, ariaDisabled: props['aria-disabled'] },
39
+ renderListItem(props, index),
40
+ children.map(child => (React.createElement(React.Fragment, { key: child.index }, renderListItem(getNestedItemProps(child), child.index))))));
41
+ }
42
+ return renderListItem(props, index);
23
43
  });
24
44
  };
25
45
  //# sourceMappingURL=render-options.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"render-options.js","sourceRoot":"","sources":["../../../../src/select/utils/render-options.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,IAAI,MAAM,eAAe,CAAC;AACjC,OAAO,eAAe,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAkBhD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAC5B,OAAO,EACP,cAAc,EACd,cAAc,EACd,aAAa,EACb,UAAU,GAAG,KAAK,EAClB,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,eAAe,GACG,EAAE,EAAE;IACtB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACnC,MAAM,WAAW,GAAG,YAAY,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5D,MAAM,KAAK,GAAG,YAAY,CAAC;YACzB,MAAM;YACN,KAAK,EAAE,WAAW;YAClB,cAAc;YACd,cAAc,EAAE,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc;YAClE,UAAU;SACX,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,KAAK,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,CAAC,iBAAiB,IAAI,UAAU,CAAC;QACnD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/D,MAAM,QAAQ,GAAG,iBAAiB,IAAI,WAAW,KAAK,CAAC,CAAC;QAExD,OAAO,CACL,oBAAC,QAAQ,kBACP,GAAG,EAAE,WAAW,IACZ,KAAK,IACT,eAAe,EAAE,WAAW,IAAI,WAAW,CAAC,KAAK,EACjD,GAAG,EAAE,QAAQ,IAAI,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,UAAU,EAC1F,SAAS,EAAE,SAAS,EACpB,mBAAmB,EAAE,mBAAmB,EACxC,YAAY,EAAE,WAAW,GAAG,CAAC,EAC7B,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,CAAC,IAAI,EACjC,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,QAAQ,IAChB,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React from 'react';\n\nimport { DropdownOption } from '../../internal/components/option/interfaces';\nimport { HighlightType } from '../../internal/components/options-list/utils/use-highlight-option';\nimport { VirtualItem } from '../../internal/vendor/react-virtual';\nimport Item from '../parts/item';\nimport MultiselectItem from '../parts/multiselect-item';\nimport { getItemProps } from './get-item-props';\n\ninterface RenderOptionProps {\n options: ReadonlyArray<DropdownOption>;\n getOptionProps: any;\n filteringValue: string;\n highlightType: HighlightType;\n checkboxes?: boolean;\n hasDropdownStatus?: boolean;\n virtualItems?: VirtualItem[];\n useInteractiveGroups?: boolean;\n screenReaderContent?: string;\n ariaSetsize?: number;\n withScrollbar: boolean;\n firstOptionSticky?: boolean;\n stickyOptionRef?: React.Ref<HTMLDivElement>;\n}\n\nexport const renderOptions = ({\n options,\n getOptionProps,\n filteringValue,\n highlightType,\n checkboxes = false,\n hasDropdownStatus,\n virtualItems,\n useInteractiveGroups,\n screenReaderContent,\n ariaSetsize,\n withScrollbar,\n firstOptionSticky,\n stickyOptionRef,\n}: RenderOptionProps) => {\n return options.map((option, index) => {\n const virtualItem = virtualItems && virtualItems[index];\n const globalIndex = virtualItem ? virtualItem.index : index;\n const props = getItemProps({\n option,\n index: globalIndex,\n getOptionProps,\n filteringValue: option.type === 'select-all' ? '' : filteringValue,\n checkboxes,\n });\n\n const isLastItem = index === options.length - 1;\n const padBottom = !hasDropdownStatus && isLastItem;\n const ListItem = useInteractiveGroups ? MultiselectItem : Item;\n const isSticky = firstOptionSticky && globalIndex === 0;\n\n return (\n <ListItem\n key={globalIndex}\n {...props}\n virtualPosition={virtualItem && virtualItem.start}\n ref={isSticky && stickyOptionRef ? stickyOptionRef : virtualItem && virtualItem.measureRef}\n padBottom={padBottom}\n screenReaderContent={screenReaderContent}\n ariaPosinset={globalIndex + 1}\n ariaSetsize={ariaSetsize}\n highlightType={highlightType.type}\n withScrollbar={withScrollbar}\n sticky={isSticky}\n />\n );\n });\n};\n"]}
1
+ {"version":3,"file":"render-options.js","sourceRoot":"","sources":["../../../../src/select/utils/render-options.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAwB,gBAAgB,EAAE,MAAM,0DAA0D,CAAC;AAGlH,OAAO,IAAI,MAAM,eAAe,CAAC;AACjC,OAAO,eAAe,MAAM,2BAA2B,CAAC;AACxD,OAAO,WAAW,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAmBhD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,EAC5B,OAAO,EACP,cAAc,EACd,cAAc,EACd,aAAa,EACb,QAAQ,EACR,UAAU,GAAG,KAAK,EAClB,iBAAiB,EACjB,YAAY,EACZ,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,eAAe,GACG,EAAE,EAAE;IACtB,MAAM,kBAAkB,GAAG,CAAC,EAAE,KAAK,EAAE,MAAM,EAAwB,EAAE,EAAE;QACrE,MAAM,WAAW,GAAG,YAAY,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5D,OAAO,YAAY,CAAC;YAClB,MAAM;YACN,KAAK,EAAE,WAAW;YAClB,cAAc;YACd,cAAc,EAAE,MAAM,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc;YAClE,UAAU;SACX,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,CAAC,KAAU,EAAE,KAAa,EAAE,EAAE;QACnD,MAAM,WAAW,GAAG,YAAY,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;QAE5D,MAAM,UAAU,GAAG,KAAK,KAAK,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,CAAC,iBAAiB,IAAI,UAAU,CAAC;QACnD,MAAM,QAAQ,GAAG,oBAAoB,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/D,MAAM,QAAQ,GAAG,iBAAiB,IAAI,WAAW,KAAK,CAAC,CAAC;QAExD,OAAO,CACL,oBAAC,QAAQ,kBACP,GAAG,EAAE,WAAW,IACZ,KAAK,IACT,eAAe,EAAE,WAAW,IAAI,WAAW,CAAC,KAAK,EACjD,GAAG,EAAE,QAAQ,IAAI,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,IAAI,WAAW,CAAC,UAAU,EAC1F,SAAS,EAAE,SAAS,EACpB,mBAAmB,EAAE,mBAAmB,EACxC,YAAY,EAAE,WAAW,GAAG,CAAC,EAC7B,WAAW,EAAE,WAAW,EACxB,aAAa,EAAE,aAAa,CAAC,IAAI,EACjC,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,QAAQ,IAChB,CACH,CAAC;IACJ,CAAC,CAAC;IAEF,MAAM,kBAAkB,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACrD,OAAO,kBAAkB,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE;;QACnD,MAAM,KAAK,GAAG,oBAAoB,CAAC,KAAK,CAAC;QACzC,MAAM,KAAK,GAAG,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;QAEvD,IAAI,oBAAoB,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC1C,MAAM,EAAE,QAAQ,EAAE,GAAG,oBAAoB,CAAC;YAC1C,MAAM,QAAQ,GAAG,MAAA,KAAK,CAAC,EAAE,mCAAI,GAAG,QAAQ,WAAW,KAAK,EAAE,CAAC;YAC3D,OAAO,CACL,oBAAC,WAAW,IACV,GAAG,EAAE,KAAK,EACV,OAAO,EAAE,CAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAG,KAAK,CAAC,MAAK,SAAS,EAC5C,cAAc,EAAE,QAAQ,EACxB,YAAY,EAAE,KAAK,CAAC,eAAe,CAAC;gBAEnC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC;gBAC5B,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CACrB,oBAAC,KAAK,CAAC,QAAQ,IAAC,GAAG,EAAE,KAAK,CAAC,KAAK,IAAG,cAAc,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAkB,CAC5G,CAAC,CACU,CACf,CAAC;SACH;QAED,OAAO,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\nimport React from 'react';\n\nimport { DropdownOption } from '../../internal/components/option/interfaces';\nimport { NestedDropdownOption, unflattenOptions } from '../../internal/components/option/utils/unflatten-options';\nimport { HighlightType } from '../../internal/components/options-list/utils/use-highlight-option';\nimport { VirtualItem } from '../../internal/vendor/react-virtual';\nimport Item from '../parts/item';\nimport MultiselectItem from '../parts/multiselect-item';\nimport OptionGroup from '../parts/option-group';\nimport { getItemProps } from './get-item-props';\n\ninterface RenderOptionProps {\n options: ReadonlyArray<DropdownOption>;\n getOptionProps: any;\n filteringValue: string;\n highlightType: HighlightType;\n idPrefix: string;\n checkboxes?: boolean;\n hasDropdownStatus?: boolean;\n virtualItems?: VirtualItem[];\n useInteractiveGroups?: boolean;\n screenReaderContent?: string;\n ariaSetsize?: number;\n withScrollbar: boolean;\n firstOptionSticky?: boolean;\n stickyOptionRef?: React.Ref<HTMLDivElement>;\n}\n\nexport const renderOptions = ({\n options,\n getOptionProps,\n filteringValue,\n highlightType,\n idPrefix,\n checkboxes = false,\n hasDropdownStatus,\n virtualItems,\n useInteractiveGroups,\n screenReaderContent,\n ariaSetsize,\n withScrollbar,\n firstOptionSticky,\n stickyOptionRef,\n}: RenderOptionProps) => {\n const getNestedItemProps = ({ index, option }: NestedDropdownOption) => {\n const virtualItem = virtualItems && virtualItems[index];\n const globalIndex = virtualItem ? virtualItem.index : index;\n return getItemProps({\n option,\n index: globalIndex,\n getOptionProps,\n filteringValue: option.type === 'select-all' ? '' : filteringValue,\n checkboxes,\n });\n };\n\n const renderListItem = (props: any, index: number) => {\n const virtualItem = virtualItems && virtualItems[index];\n const globalIndex = virtualItem ? virtualItem.index : index;\n\n const isLastItem = index === options.length - 1;\n const padBottom = !hasDropdownStatus && isLastItem;\n const ListItem = useInteractiveGroups ? MultiselectItem : Item;\n const isSticky = firstOptionSticky && globalIndex === 0;\n\n return (\n <ListItem\n key={globalIndex}\n {...props}\n virtualPosition={virtualItem && virtualItem.start}\n ref={isSticky && stickyOptionRef ? stickyOptionRef : virtualItem && virtualItem.measureRef}\n padBottom={padBottom}\n screenReaderContent={screenReaderContent}\n ariaPosinset={globalIndex + 1}\n ariaSetsize={ariaSetsize}\n highlightType={highlightType.type}\n withScrollbar={withScrollbar}\n sticky={isSticky}\n />\n );\n };\n\n const unflattenedOptions = unflattenOptions(options);\n return unflattenedOptions.map(nestedDropdownOption => {\n const index = nestedDropdownOption.index;\n const props = getNestedItemProps(nestedDropdownOption);\n\n if (nestedDropdownOption.type === 'parent') {\n const { children } = nestedDropdownOption;\n const optionId = props.id ?? `${idPrefix}-option-${index}`;\n return (\n <OptionGroup\n key={index}\n virtual={virtualItems?.[index] !== undefined}\n ariaLabelledby={optionId}\n ariaDisabled={props['aria-disabled']}\n >\n {renderListItem(props, index)}\n {children.map(child => (\n <React.Fragment key={child.index}>{renderListItem(getNestedItemProps(child), child.index)}</React.Fragment>\n ))}\n </OptionGroup>\n );\n }\n\n return renderListItem(props, index);\n });\n};\n"]}
@@ -8,7 +8,7 @@ import { NonCancelableEventHandler } from '../../internal/events';
8
8
  import { FilterProps } from '../parts/filter';
9
9
  import { ItemProps } from '../parts/item';
10
10
  export type MenuProps = Omit<OptionsListProps, 'children'> & {
11
- ref: React.RefObject<HTMLUListElement>;
11
+ ref: React.RefObject<HTMLDivElement>;
12
12
  };
13
13
  export type GetOptionProps = (option: DropdownOption, index: number) => ItemProps;
14
14
  interface UseSelectProps {
@@ -1 +1 @@
1
- {"version":3,"file":"use-select.d.ts","sourceRoot":"","sources":["../../../../src/select/utils/use-select.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,6CAA6C,CAAC;AAE5G,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAK1E,OAAO,EAA0B,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAG1F,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG;IAAE,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;CAAE,CAAC;AACxG,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;AAElF,UAAU,cAAc;IACtB,eAAe,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACjD,oBAAoB,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzD,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,yBAAyB,CAAC;IACnC,OAAO,CAAC,EAAE,yBAAyB,CAAC;IACpC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,aAAa,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,EAAE,mBAAmB,CAAC,UAAU,CAAC;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC5D,GAAG,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;CACnC;AAED,wBAAgB,SAAS,CAAC,EACxB,eAAe,EACf,oBAAoB,EACpB,OAAO,EACP,aAAa,EACb,MAAM,EACN,OAAO,EACP,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,oBAA4B,EAC5B,UAAU,EACV,aAAa,EACb,cAAc,EACd,SAAS,GACV,EAAE,cAAc;;;;;;4BA6Ge,KAC5B,aAAa,EACb,SAAS,GAAG,QAAQ,GAAG,mBAAmB,GAAG,qBAAqB,CACnE;;0BA4B0B,QAAQ,WAAW,CAAC;6BAoEf,cAAc,SAAS,MAAM;;4BApJ9B,cAAc;;;EA4O9C"}
1
+ {"version":3,"file":"use-select.d.ts","sourceRoot":"","sources":["../../../../src/select/utils/use-select.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAKzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAe,MAAM,6CAA6C,CAAC;AAE5G,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAK1E,OAAO,EAA0B,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAG1F,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAAG;IAAE,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;CAAE,CAAC;AACtG,MAAM,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAC;AAElF,UAAU,cAAc;IACtB,eAAe,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACjD,oBAAoB,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzD,OAAO,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IACvC,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,yBAAyB,CAAC;IACnC,OAAO,CAAC,EAAE,yBAAyB,CAAC;IACpC,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,aAAa,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,iBAAiB,CAAC,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,UAAU,EAAE,mBAAmB,CAAC,UAAU,CAAC;IAC3C,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,kBAAmB,SAAQ,kBAAkB;IAC5D,GAAG,EAAE,SAAS,CAAC,iBAAiB,CAAC,CAAC;CACnC;AAED,wBAAgB,SAAS,CAAC,EACxB,eAAe,EACf,oBAAoB,EACpB,OAAO,EACP,aAAa,EACb,MAAM,EACN,OAAO,EACP,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,oBAA4B,EAC5B,UAAU,EACV,aAAa,EACb,cAAc,EACd,SAAS,GACV,EAAE,cAAc;;;;;;4BA6Ge,KAC5B,aAAa,EACb,SAAS,GAAG,QAAQ,GAAG,mBAAmB,GAAG,qBAAqB,CACnE;;0BA4B0B,QAAQ,WAAW,CAAC;6BAoEf,cAAc,SAAS,MAAM;;4BApJ9B,cAAc;;;EAkP9C"}
@@ -189,7 +189,7 @@ export function useSelect({ selectedOptions, updateSelectedOption, options, filt
189
189
  };
190
190
  };
191
191
  const getOptionProps = (option, index) => {
192
- var _a;
192
+ var _a, _b;
193
193
  const isSelectAll = option.type === 'select-all';
194
194
  const highlighted = option === highlightedOption;
195
195
  const groupState = isGroup(option.option) ? getGroupState(option.option) : undefined;
@@ -198,12 +198,17 @@ export function useSelect({ selectedOptions, updateSelectedOption, options, filt
198
198
  const isNextSelected = !!nextOption && isGroup(nextOption)
199
199
  ? getGroupState(nextOption).selected
200
200
  : __selectedOptions.indexOf(options[index + 1]) > -1;
201
+ const previousOption = (_b = options[index - 1]) === null || _b === void 0 ? void 0 : _b.option;
202
+ const isPreviousSelected = !!previousOption && isGroup(previousOption)
203
+ ? getGroupState(previousOption).selected
204
+ : __selectedOptions.indexOf(options[index - 1]) > -1;
201
205
  const optionProps = {
202
206
  key: index,
203
207
  option,
204
208
  highlighted,
205
209
  selected,
206
210
  isNextSelected,
211
+ isPreviousSelected,
207
212
  indeterminate: !!(groupState === null || groupState === void 0 ? void 0 : groupState.indeterminate) || (isSelectAll && !isAllSelected && isSomeSelected),
208
213
  ['data-mouse-target']: isHighlightable(option) ? index : -1,
209
214
  id: getOptionId(menuId, index),