@cloudscape-design/components 3.0.38 → 3.0.41

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 (54) hide show
  1. package/app-layout/navigation-panel.d.ts.map +1 -1
  2. package/app-layout/navigation-panel.js +1 -3
  3. package/app-layout/navigation-panel.js.map +1 -1
  4. package/app-layout/styles.css.js +38 -37
  5. package/app-layout/styles.scoped.css +54 -50
  6. package/app-layout/styles.selectors.js +38 -37
  7. package/autosuggest/autosuggest-option.js +1 -1
  8. package/autosuggest/autosuggest-option.js.map +1 -1
  9. package/autosuggest/input-controller.d.ts +12 -0
  10. package/autosuggest/input-controller.d.ts.map +1 -0
  11. package/autosuggest/input-controller.js +38 -0
  12. package/autosuggest/input-controller.js.map +1 -0
  13. package/autosuggest/internal.d.ts.map +1 -1
  14. package/autosuggest/internal.js +51 -38
  15. package/autosuggest/internal.js.map +1 -1
  16. package/autosuggest/load-more-controller.d.ts +16 -0
  17. package/autosuggest/load-more-controller.d.ts.map +1 -0
  18. package/autosuggest/load-more-controller.js +27 -0
  19. package/autosuggest/load-more-controller.js.map +1 -0
  20. package/autosuggest/options-controller.d.ts +3 -2
  21. package/autosuggest/options-controller.d.ts.map +1 -1
  22. package/autosuggest/options-controller.js +18 -22
  23. package/autosuggest/options-controller.js.map +1 -1
  24. package/autosuggest/options-list.d.ts +2 -3
  25. package/autosuggest/options-list.d.ts.map +1 -1
  26. package/autosuggest/options-list.js +3 -12
  27. package/autosuggest/options-list.js.map +1 -1
  28. package/date-picker/calendar/index.d.ts.map +1 -1
  29. package/date-picker/calendar/index.js +9 -4
  30. package/date-picker/calendar/index.js.map +1 -1
  31. package/date-picker/calendar/utils/move-focus-handler.d.ts.map +1 -1
  32. package/date-picker/calendar/utils/move-focus-handler.js +4 -2
  33. package/date-picker/calendar/utils/move-focus-handler.js.map +1 -1
  34. package/internal/components/selectable-item/index.d.ts +8 -4
  35. package/internal/components/selectable-item/index.d.ts.map +1 -1
  36. package/internal/components/selectable-item/index.js +2 -2
  37. package/internal/components/selectable-item/index.js.map +1 -1
  38. package/internal/environment.js +1 -1
  39. package/package.json +1 -1
  40. package/property-filter/property-filter-autosuggest.d.ts.map +1 -1
  41. package/property-filter/property-filter-autosuggest.js +52 -38
  42. package/property-filter/property-filter-autosuggest.js.map +1 -1
  43. package/select/parts/item.d.ts.map +1 -1
  44. package/select/parts/item.js +3 -2
  45. package/select/parts/item.js.map +1 -1
  46. package/select/parts/multiselect-item.js +1 -1
  47. package/select/parts/multiselect-item.js.map +1 -1
  48. package/select/parts/styles.css.js +9 -8
  49. package/select/parts/styles.scoped.css +12 -9
  50. package/select/parts/styles.selectors.js +9 -8
  51. package/autosuggest/controller.d.ts +0 -6
  52. package/autosuggest/controller.d.ts.map +0 -1
  53. package/autosuggest/controller.js +0 -52
  54. package/autosuggest/controller.js.map +0 -1
@@ -2,8 +2,8 @@ import { __assign, __rest } from "tslib";
2
2
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  // SPDX-License-Identifier: Apache-2.0
4
4
  import clsx from 'clsx';
5
- import React, { useCallback, useRef } from 'react';
6
- import { useKeyboardHandler } from './controller';
5
+ import React, { useRef } from 'react';
6
+ import { useInputKeydownHandler } from './input-controller';
7
7
  import { useAutosuggestItems } from './options-controller';
8
8
  import Dropdown from '../internal/components/dropdown';
9
9
  import { useDropdownStatus } from '../internal/components/dropdown-status';
@@ -12,66 +12,79 @@ import { useFormFieldContext } from '../internal/context/form-field-context';
12
12
  import { getBaseProps } from '../internal/base-component';
13
13
  import { generateUniqueId, useUniqueId } from '../internal/hooks/use-unique-id';
14
14
  import useForwardFocus from '../internal/hooks/forward-focus';
15
- import { fireNonCancelableEvent } from '../internal/events';
15
+ import { fireCancelableEvent, fireNonCancelableEvent } from '../internal/events';
16
16
  import InternalInput from '../input/internal';
17
17
  import styles from './styles.css.js';
18
18
  import { checkOptionValueField } from '../select/utils/check-option-value-field';
19
19
  import checkControlled from '../internal/hooks/check-controlled';
20
20
  import AutosuggestOptionsList from './options-list';
21
21
  import { useAutosuggestDropdown } from './dropdown-controller';
22
- var useLoadMoreItems = function (onLoadItems) {
23
- var lastFilteringText = useRef(null);
24
- return useCallback(function (firstPage, samePage, filteringText) {
25
- if (samePage || !firstPage || filteringText === undefined || lastFilteringText.current !== filteringText) {
26
- if (filteringText !== undefined) {
27
- lastFilteringText.current = filteringText;
28
- }
29
- if (lastFilteringText.current !== null && onLoadItems) {
30
- fireNonCancelableEvent(onLoadItems, { filteringText: lastFilteringText.current, firstPage: firstPage, samePage: samePage });
31
- }
32
- }
33
- }, [onLoadItems]);
34
- };
22
+ import { useAutosuggestLoadMore } from './load-more-controller';
35
23
  var InternalAutosuggest = React.forwardRef(function (props, ref) {
36
24
  var _a;
37
25
  var value = props.value, onChange = props.onChange, onBlur = props.onBlur, onFocus = props.onFocus, onKeyUp = props.onKeyUp, onLoadItems = props.onLoadItems, options = props.options, _b = props.filteringType, filteringType = _b === void 0 ? 'auto' : _b, _c = props.statusType, statusType = _c === void 0 ? 'finished' : _c, placeholder = props.placeholder, name = props.name, disabled = props.disabled, _d = props.disableBrowserAutocorrect, disableBrowserAutocorrect = _d === void 0 ? false : _d, autoFocus = props.autoFocus, readOnly = props.readOnly, ariaLabel = props.ariaLabel, ariaRequired = props.ariaRequired, enteredTextLabel = props.enteredTextLabel, onKeyDown = props.onKeyDown, virtualScroll = props.virtualScroll, expandToViewport = props.expandToViewport, onSelect = props.onSelect, selectedAriaLabel = props.selectedAriaLabel, renderHighlightedAriaLive = props.renderHighlightedAriaLive, __internalRootRef = props.__internalRootRef, rest = __rest(props, ["value", "onChange", "onBlur", "onFocus", "onKeyUp", "onLoadItems", "options", "filteringType", "statusType", "placeholder", "name", "disabled", "disableBrowserAutocorrect", "autoFocus", "readOnly", "ariaLabel", "ariaRequired", "enteredTextLabel", "onKeyDown", "virtualScroll", "expandToViewport", "onSelect", "selectedAriaLabel", "renderHighlightedAriaLive", "__internalRootRef"]);
38
26
  checkControlled('Autosuggest', 'value', value, 'onChange', onChange);
39
27
  checkOptionValueField('Autosuggest', 'options', options);
40
- var selectOption = function (option) {
41
- var value = option.value || '';
42
- fireNonCancelableEvent(onChange, { value: value });
43
- autosuggestDropdownHandlers.closeDropdown();
44
- fireNonCancelableEvent(onSelect, { value: value });
45
- };
46
28
  var _e = useAutosuggestItems({
47
29
  options: options || [],
48
30
  filterValue: value,
49
31
  filterText: value,
50
32
  filteringType: filteringType,
51
33
  hideEnteredTextLabel: false,
52
- onSelectItem: selectOption
34
+ onSelectItem: function (option) {
35
+ var value = option.value || '';
36
+ fireNonCancelableEvent(onChange, { value: value });
37
+ autosuggestDropdownHandlers.closeDropdown();
38
+ fireNonCancelableEvent(onSelect, { value: value });
39
+ }
53
40
  }), autosuggestItemsState = _e[0], autosuggestItemsHandlers = _e[1];
54
41
  var _f = useAutosuggestDropdown({
55
42
  readOnly: readOnly,
56
43
  onClose: function () { return autosuggestItemsHandlers.resetHighlightWithKeyboard(); },
57
44
  onBlur: function () { return fireNonCancelableEvent(onBlur); }
58
45
  }), open = _f[0].open, autosuggestDropdownHandlers = _f[1], autosuggestDropdownRefs = _f[2];
59
- var fireLoadMore = useLoadMoreItems(onLoadItems);
60
- var handleInputChange = function (e) {
46
+ var autosuggestLoadMoreHandlers = useAutosuggestLoadMore({
47
+ options: options,
48
+ statusType: statusType,
49
+ onLoadItems: function (detail) { return fireNonCancelableEvent(onLoadItems, detail); }
50
+ });
51
+ var handleInputChange = function (value) {
61
52
  autosuggestDropdownHandlers.openDropdown();
62
53
  autosuggestItemsHandlers.setShowAll(false);
63
54
  autosuggestItemsHandlers.resetHighlightWithKeyboard();
64
- onChange && onChange(e);
55
+ fireNonCancelableEvent(onChange, { value: value });
65
56
  };
66
- var handleKeyDown = useKeyboardHandler(open, autosuggestDropdownHandlers.openDropdown, autosuggestDropdownHandlers.closeDropdown, autosuggestItemsHandlers.interceptKeyDown, onKeyDown);
67
- var handleLoadMore = useCallback(function () {
68
- options && options.length && statusType === 'pending' && fireLoadMore(false, false);
69
- }, [fireLoadMore, options, statusType]);
70
- var handleRecoveryClick = useCallback(function () {
57
+ var handleKeyDown = useInputKeydownHandler({
58
+ open: open,
59
+ onPressArrowDown: function () {
60
+ autosuggestItemsHandlers.moveHighlightWithKeyboard(1);
61
+ autosuggestDropdownHandlers.openDropdown();
62
+ },
63
+ onPressArrowUp: function () {
64
+ autosuggestItemsHandlers.moveHighlightWithKeyboard(-1);
65
+ autosuggestDropdownHandlers.openDropdown();
66
+ },
67
+ onPressEnter: function () {
68
+ autosuggestItemsHandlers.selectHighlightedOptionWithKeyboard();
69
+ autosuggestDropdownHandlers.closeDropdown();
70
+ },
71
+ onPressEsc: function () {
72
+ if (open) {
73
+ autosuggestDropdownHandlers.closeDropdown();
74
+ }
75
+ else if (value) {
76
+ fireNonCancelableEvent(onChange, { value: '' });
77
+ }
78
+ },
79
+ onKeyDown: function (e) {
80
+ fireCancelableEvent(onKeyDown, e.detail);
81
+ }
82
+ });
83
+ var handleRecoveryClick = function () {
71
84
  var _a;
72
- fireLoadMore(false, true);
85
+ autosuggestLoadMoreHandlers.fireLoadMoreOnRecoveryClick();
73
86
  (_a = inputRef.current) === null || _a === void 0 ? void 0 : _a.focus();
74
- }, [fireLoadMore]);
87
+ };
75
88
  var formFieldContext = useFormFieldContext(rest);
76
89
  var baseProps = getBaseProps(rest);
77
90
  var inputRef = useRef(null);
@@ -97,18 +110,18 @@ var InternalAutosuggest = React.forwardRef(function (props, ref) {
97
110
  'aria-label': ariaLabel,
98
111
  'aria-activedescendant': highlightedOptionId
99
112
  };
100
- var handleInputFocus = function (e) {
113
+ var handleInputFocus = function () {
101
114
  autosuggestItemsHandlers.setShowAll(true);
102
115
  autosuggestDropdownHandlers.openDropdown();
103
- fireLoadMore(true, false, '');
104
- onFocus === null || onFocus === void 0 ? void 0 : onFocus(e);
116
+ autosuggestLoadMoreHandlers.fireLoadMoreOnInputFocus();
117
+ fireNonCancelableEvent(onFocus, null);
105
118
  };
106
119
  var isEmpty = !value && !autosuggestItemsState.items.length;
107
120
  var showRecoveryLink = open && statusType === 'error' && props.recoveryText;
108
121
  var dropdownStatus = useDropdownStatus(__assign(__assign({}, props), { isEmpty: isEmpty, onRecoveryClick: handleRecoveryClick }));
109
122
  return (React.createElement("div", __assign({}, baseProps, { className: clsx(styles.root, baseProps.className), ref: __internalRootRef, onBlur: autosuggestDropdownHandlers.handleBlur }),
110
- React.createElement(Dropdown, { trigger: React.createElement(InternalInput, __assign({ type: "search", value: value, onChange: handleInputChange, __onDelayedInput: function (event) { return fireLoadMore(true, false, event.detail.value); }, onFocus: handleInputFocus, onKeyDown: handleKeyDown, onKeyUp: onKeyUp, disabled: disabled, disableBrowserAutocorrect: disableBrowserAutocorrect, readOnly: readOnly, ariaRequired: ariaRequired, ref: inputRef, autoComplete: false, __nativeAttributes: nativeAttributes }, formFieldContext, { controlId: controlId })), onMouseDown: autosuggestDropdownHandlers.handleMouseDown, open: open, dropdownId: dropdownId, footer: dropdownStatus.isSticky ? (React.createElement("div", { ref: autosuggestDropdownRefs.footerRef, className: styles['dropdown-footer'] },
111
- React.createElement(DropdownFooter, { content: dropdownStatus.content, hasItems: autosuggestItemsState.items.length >= 1 }))) : null, expandToViewport: expandToViewport, hasContent: autosuggestItemsState.items.length >= 1 || dropdownStatus.content !== null, trapFocus: !!showRecoveryLink }, open && (React.createElement(AutosuggestOptionsList, { autosuggestItemsState: autosuggestItemsState, autosuggestItemsHandlers: autosuggestItemsHandlers, selectOption: selectOption, highlightedOptionId: highlightedOptionId, highlightText: value, listId: listId, controlId: controlId, enteredTextLabel: enteredTextLabel, handleLoadMore: handleLoadMore, hasDropdownStatus: dropdownStatus.content !== null, virtualScroll: virtualScroll, selectedAriaLabel: selectedAriaLabel, renderHighlightedAriaLive: renderHighlightedAriaLive, listBottom: !dropdownStatus.isSticky ? React.createElement(DropdownFooter, { content: dropdownStatus.content }) : null })))));
123
+ React.createElement(Dropdown, { trigger: React.createElement(InternalInput, __assign({ type: "search", value: value, onChange: function (event) { return handleInputChange(event.detail.value); }, __onDelayedInput: function (event) { return autosuggestLoadMoreHandlers.fireLoadMoreOnInputChange(event.detail.value); }, onFocus: handleInputFocus, onKeyDown: handleKeyDown, onKeyUp: onKeyUp, disabled: disabled, disableBrowserAutocorrect: disableBrowserAutocorrect, readOnly: readOnly, ariaRequired: ariaRequired, ref: inputRef, autoComplete: false, __nativeAttributes: nativeAttributes }, formFieldContext, { controlId: controlId })), onMouseDown: autosuggestDropdownHandlers.handleMouseDown, open: open, dropdownId: dropdownId, footer: dropdownStatus.isSticky ? (React.createElement("div", { ref: autosuggestDropdownRefs.footerRef, className: styles['dropdown-footer'] },
124
+ React.createElement(DropdownFooter, { content: dropdownStatus.content, hasItems: autosuggestItemsState.items.length >= 1 }))) : null, expandToViewport: expandToViewport, hasContent: autosuggestItemsState.items.length >= 1 || dropdownStatus.content !== null, trapFocus: !!showRecoveryLink }, open && (React.createElement(AutosuggestOptionsList, { autosuggestItemsState: autosuggestItemsState, autosuggestItemsHandlers: autosuggestItemsHandlers, highlightedOptionId: highlightedOptionId, highlightText: value, listId: listId, controlId: controlId, enteredTextLabel: enteredTextLabel, handleLoadMore: autosuggestLoadMoreHandlers.fireLoadMoreOnScroll, hasDropdownStatus: dropdownStatus.content !== null, virtualScroll: virtualScroll, selectedAriaLabel: selectedAriaLabel, renderHighlightedAriaLive: renderHighlightedAriaLive, listBottom: !dropdownStatus.isSticky ? React.createElement(DropdownFooter, { content: dropdownStatus.content }) : null })))));
112
125
  });
113
126
  export default InternalAutosuggest;
114
127
  //# sourceMappingURL=internal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/autosuggest/internal.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 clsx from 'clsx';\nimport React, { Ref, useCallback, useRef } from 'react';\n\nimport { useKeyboardHandler } from './controller';\nimport { useAutosuggestItems } from './options-controller';\nimport { AutosuggestItem, AutosuggestProps } from './interfaces';\n\nimport Dropdown from '../internal/components/dropdown';\nimport { useDropdownStatus } from '../internal/components/dropdown-status';\nimport DropdownFooter from '../internal/components/dropdown-footer';\n\nimport { useFormFieldContext } from '../internal/context/form-field-context';\nimport { getBaseProps } from '../internal/base-component';\nimport { generateUniqueId, useUniqueId } from '../internal/hooks/use-unique-id';\nimport useForwardFocus from '../internal/hooks/forward-focus';\nimport { fireNonCancelableEvent } from '../internal/events';\nimport InternalInput from '../input/internal';\nimport { InputProps } from '../input/interfaces';\nimport styles from './styles.css.js';\nimport { checkOptionValueField } from '../select/utils/check-option-value-field';\nimport checkControlled from '../internal/hooks/check-controlled';\nimport { InternalBaseComponentProps } from '../internal/hooks/use-base-component';\nimport AutosuggestOptionsList from './options-list';\nimport { useAutosuggestDropdown } from './dropdown-controller';\n\nexport interface InternalAutosuggestProps extends AutosuggestProps, InternalBaseComponentProps {}\n\nconst useLoadMoreItems = (onLoadItems: AutosuggestProps['onLoadItems']) => {\n const lastFilteringText = useRef<string | null>(null);\n return useCallback(\n (firstPage: boolean, samePage: boolean, filteringText?: string) => {\n if (samePage || !firstPage || filteringText === undefined || lastFilteringText.current !== filteringText) {\n if (filteringText !== undefined) {\n lastFilteringText.current = filteringText;\n }\n if (lastFilteringText.current !== null && onLoadItems) {\n fireNonCancelableEvent(onLoadItems, { filteringText: lastFilteringText.current, firstPage, samePage });\n }\n }\n },\n [onLoadItems]\n );\n};\n\nconst InternalAutosuggest = React.forwardRef((props: InternalAutosuggestProps, ref: Ref<InputProps.Ref>) => {\n const {\n value,\n onChange,\n onBlur,\n onFocus,\n onKeyUp,\n onLoadItems,\n options,\n filteringType = 'auto',\n statusType = 'finished',\n placeholder,\n name,\n disabled,\n disableBrowserAutocorrect = false,\n autoFocus,\n readOnly,\n ariaLabel,\n ariaRequired,\n enteredTextLabel,\n onKeyDown,\n virtualScroll,\n expandToViewport,\n onSelect,\n selectedAriaLabel,\n renderHighlightedAriaLive,\n __internalRootRef,\n ...rest\n } = props;\n\n checkControlled('Autosuggest', 'value', value, 'onChange', onChange);\n checkOptionValueField('Autosuggest', 'options', options);\n\n const selectOption = (option: AutosuggestItem) => {\n const value = option.value || '';\n fireNonCancelableEvent(onChange, { value });\n autosuggestDropdownHandlers.closeDropdown();\n fireNonCancelableEvent(onSelect, { value });\n };\n\n const [autosuggestItemsState, autosuggestItemsHandlers] = useAutosuggestItems({\n options: options || [],\n filterValue: value,\n filterText: value,\n filteringType,\n hideEnteredTextLabel: false,\n onSelectItem: selectOption,\n });\n const [{ open }, autosuggestDropdownHandlers, autosuggestDropdownRefs] = useAutosuggestDropdown({\n readOnly,\n onClose: () => autosuggestItemsHandlers.resetHighlightWithKeyboard(),\n onBlur: () => fireNonCancelableEvent(onBlur),\n });\n\n const fireLoadMore = useLoadMoreItems(onLoadItems);\n\n const handleInputChange: InputProps['onChange'] = e => {\n autosuggestDropdownHandlers.openDropdown();\n autosuggestItemsHandlers.setShowAll(false);\n autosuggestItemsHandlers.resetHighlightWithKeyboard();\n onChange && onChange(e);\n };\n\n const handleKeyDown = useKeyboardHandler(\n open,\n autosuggestDropdownHandlers.openDropdown,\n autosuggestDropdownHandlers.closeDropdown,\n autosuggestItemsHandlers.interceptKeyDown,\n onKeyDown\n );\n const handleLoadMore = useCallback(() => {\n options && options.length && statusType === 'pending' && fireLoadMore(false, false);\n }, [fireLoadMore, options, statusType]);\n const handleRecoveryClick = useCallback(() => {\n fireLoadMore(false, true);\n inputRef.current?.focus();\n }, [fireLoadMore]);\n\n const formFieldContext = useFormFieldContext(rest);\n const baseProps = getBaseProps(rest);\n const inputRef = useRef<HTMLInputElement>(null);\n useForwardFocus(ref, inputRef);\n\n const selfControlId = useUniqueId('input');\n const controlId = formFieldContext.controlId ?? selfControlId;\n const dropdownId = useUniqueId('dropdown');\n const listId = useUniqueId('list');\n\n // From an a11y point of view we only count the dropdown as 'expanded' if there are items that a user can dropdown into\n const expanded = open && autosuggestItemsState.items.length > 1;\n const highlightedOptionId = autosuggestItemsState.highlightedOption ? generateUniqueId() : undefined;\n const nativeAttributes = {\n name,\n placeholder,\n autoFocus,\n onClick: autosuggestDropdownHandlers.openDropdown,\n role: 'combobox',\n 'aria-autocomplete': 'list',\n 'aria-expanded': expanded,\n 'aria-controls': listId,\n // 'aria-owns' needed for safari+vo to announce activedescendant content\n 'aria-owns': listId,\n 'aria-label': ariaLabel,\n 'aria-activedescendant': highlightedOptionId,\n };\n\n const handleInputFocus: InputProps['onFocus'] = e => {\n autosuggestItemsHandlers.setShowAll(true);\n autosuggestDropdownHandlers.openDropdown();\n fireLoadMore(true, false, '');\n onFocus?.(e);\n };\n\n const isEmpty = !value && !autosuggestItemsState.items.length;\n const showRecoveryLink = open && statusType === 'error' && props.recoveryText;\n const dropdownStatus = useDropdownStatus({ ...props, isEmpty, onRecoveryClick: handleRecoveryClick });\n\n return (\n <div\n {...baseProps}\n className={clsx(styles.root, baseProps.className)}\n ref={__internalRootRef}\n onBlur={autosuggestDropdownHandlers.handleBlur}\n >\n <Dropdown\n trigger={\n <InternalInput\n type=\"search\"\n value={value}\n onChange={handleInputChange}\n __onDelayedInput={event => fireLoadMore(true, false, event.detail.value)}\n onFocus={handleInputFocus}\n onKeyDown={handleKeyDown}\n onKeyUp={onKeyUp}\n disabled={disabled}\n disableBrowserAutocorrect={disableBrowserAutocorrect}\n readOnly={readOnly}\n ariaRequired={ariaRequired}\n ref={inputRef}\n autoComplete={false}\n __nativeAttributes={nativeAttributes}\n {...formFieldContext}\n controlId={controlId}\n />\n }\n onMouseDown={autosuggestDropdownHandlers.handleMouseDown}\n open={open}\n dropdownId={dropdownId}\n footer={\n dropdownStatus.isSticky ? (\n <div ref={autosuggestDropdownRefs.footerRef} className={styles['dropdown-footer']}>\n <DropdownFooter content={dropdownStatus.content} hasItems={autosuggestItemsState.items.length >= 1} />\n </div>\n ) : null\n }\n expandToViewport={expandToViewport}\n hasContent={autosuggestItemsState.items.length >= 1 || dropdownStatus.content !== null}\n trapFocus={!!showRecoveryLink}\n >\n {open && (\n <AutosuggestOptionsList\n autosuggestItemsState={autosuggestItemsState}\n autosuggestItemsHandlers={autosuggestItemsHandlers}\n selectOption={selectOption}\n highlightedOptionId={highlightedOptionId}\n highlightText={value}\n listId={listId}\n controlId={controlId}\n enteredTextLabel={enteredTextLabel}\n handleLoadMore={handleLoadMore}\n hasDropdownStatus={dropdownStatus.content !== null}\n virtualScroll={virtualScroll}\n selectedAriaLabel={selectedAriaLabel}\n renderHighlightedAriaLive={renderHighlightedAriaLive}\n listBottom={!dropdownStatus.isSticky ? <DropdownFooter content={dropdownStatus.content} /> : null}\n />\n )}\n </Dropdown>\n </div>\n );\n});\n\nexport default InternalAutosuggest;\n"]}
1
+ {"version":3,"file":"internal.js","sourceRoot":"","sources":["../../../src/autosuggest/internal.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 clsx from 'clsx';\nimport React, { Ref, useRef } from 'react';\n\nimport { useInputKeydownHandler } from './input-controller';\nimport { useAutosuggestItems } from './options-controller';\nimport { AutosuggestItem, AutosuggestProps } from './interfaces';\n\nimport Dropdown from '../internal/components/dropdown';\nimport { useDropdownStatus } from '../internal/components/dropdown-status';\nimport DropdownFooter from '../internal/components/dropdown-footer';\n\nimport { useFormFieldContext } from '../internal/context/form-field-context';\nimport { getBaseProps } from '../internal/base-component';\nimport { generateUniqueId, useUniqueId } from '../internal/hooks/use-unique-id';\nimport useForwardFocus from '../internal/hooks/forward-focus';\nimport { fireCancelableEvent, fireNonCancelableEvent } from '../internal/events';\nimport InternalInput from '../input/internal';\nimport { InputProps } from '../input/interfaces';\nimport styles from './styles.css.js';\nimport { checkOptionValueField } from '../select/utils/check-option-value-field';\nimport checkControlled from '../internal/hooks/check-controlled';\nimport { InternalBaseComponentProps } from '../internal/hooks/use-base-component';\nimport AutosuggestOptionsList from './options-list';\nimport { useAutosuggestDropdown } from './dropdown-controller';\nimport { useAutosuggestLoadMore } from './load-more-controller';\nimport { OptionsLoadItemsDetail } from '../internal/components/dropdown/interfaces';\n\nexport interface InternalAutosuggestProps extends AutosuggestProps, InternalBaseComponentProps {}\n\nconst InternalAutosuggest = React.forwardRef((props: InternalAutosuggestProps, ref: Ref<InputProps.Ref>) => {\n const {\n value,\n onChange,\n onBlur,\n onFocus,\n onKeyUp,\n onLoadItems,\n options,\n filteringType = 'auto',\n statusType = 'finished',\n placeholder,\n name,\n disabled,\n disableBrowserAutocorrect = false,\n autoFocus,\n readOnly,\n ariaLabel,\n ariaRequired,\n enteredTextLabel,\n onKeyDown,\n virtualScroll,\n expandToViewport,\n onSelect,\n selectedAriaLabel,\n renderHighlightedAriaLive,\n __internalRootRef,\n ...rest\n } = props;\n\n checkControlled('Autosuggest', 'value', value, 'onChange', onChange);\n checkOptionValueField('Autosuggest', 'options', options);\n\n const [autosuggestItemsState, autosuggestItemsHandlers] = useAutosuggestItems({\n options: options || [],\n filterValue: value,\n filterText: value,\n filteringType,\n hideEnteredTextLabel: false,\n onSelectItem: (option: AutosuggestItem) => {\n const value = option.value || '';\n fireNonCancelableEvent(onChange, { value });\n autosuggestDropdownHandlers.closeDropdown();\n fireNonCancelableEvent(onSelect, { value });\n },\n });\n const [{ open }, autosuggestDropdownHandlers, autosuggestDropdownRefs] = useAutosuggestDropdown({\n readOnly,\n onClose: () => autosuggestItemsHandlers.resetHighlightWithKeyboard(),\n onBlur: () => fireNonCancelableEvent(onBlur),\n });\n const autosuggestLoadMoreHandlers = useAutosuggestLoadMore({\n options,\n statusType,\n onLoadItems: (detail: OptionsLoadItemsDetail) => fireNonCancelableEvent(onLoadItems, detail),\n });\n\n const handleInputChange = (value: string) => {\n autosuggestDropdownHandlers.openDropdown();\n autosuggestItemsHandlers.setShowAll(false);\n autosuggestItemsHandlers.resetHighlightWithKeyboard();\n fireNonCancelableEvent(onChange, { value });\n };\n\n const handleKeyDown = useInputKeydownHandler({\n open,\n onPressArrowDown() {\n autosuggestItemsHandlers.moveHighlightWithKeyboard(1);\n autosuggestDropdownHandlers.openDropdown();\n },\n onPressArrowUp() {\n autosuggestItemsHandlers.moveHighlightWithKeyboard(-1);\n autosuggestDropdownHandlers.openDropdown();\n },\n onPressEnter() {\n autosuggestItemsHandlers.selectHighlightedOptionWithKeyboard();\n autosuggestDropdownHandlers.closeDropdown();\n },\n onPressEsc() {\n if (open) {\n autosuggestDropdownHandlers.closeDropdown();\n } else if (value) {\n fireNonCancelableEvent(onChange, { value: '' });\n }\n },\n onKeyDown(e) {\n fireCancelableEvent(onKeyDown, e.detail);\n },\n });\n\n const handleRecoveryClick = () => {\n autosuggestLoadMoreHandlers.fireLoadMoreOnRecoveryClick();\n inputRef.current?.focus();\n };\n\n const formFieldContext = useFormFieldContext(rest);\n const baseProps = getBaseProps(rest);\n const inputRef = useRef<HTMLInputElement>(null);\n useForwardFocus(ref, inputRef);\n\n const selfControlId = useUniqueId('input');\n const controlId = formFieldContext.controlId ?? selfControlId;\n const dropdownId = useUniqueId('dropdown');\n const listId = useUniqueId('list');\n\n // From an a11y point of view we only count the dropdown as 'expanded' if there are items that a user can dropdown into\n const expanded = open && autosuggestItemsState.items.length > 1;\n const highlightedOptionId = autosuggestItemsState.highlightedOption ? generateUniqueId() : undefined;\n const nativeAttributes = {\n name,\n placeholder,\n autoFocus,\n onClick: autosuggestDropdownHandlers.openDropdown,\n role: 'combobox',\n 'aria-autocomplete': 'list',\n 'aria-expanded': expanded,\n 'aria-controls': listId,\n // 'aria-owns' needed for safari+vo to announce activedescendant content\n 'aria-owns': listId,\n 'aria-label': ariaLabel,\n 'aria-activedescendant': highlightedOptionId,\n };\n\n const handleInputFocus = () => {\n autosuggestItemsHandlers.setShowAll(true);\n autosuggestDropdownHandlers.openDropdown();\n autosuggestLoadMoreHandlers.fireLoadMoreOnInputFocus();\n fireNonCancelableEvent(onFocus, null);\n };\n\n const isEmpty = !value && !autosuggestItemsState.items.length;\n const showRecoveryLink = open && statusType === 'error' && props.recoveryText;\n const dropdownStatus = useDropdownStatus({ ...props, isEmpty, onRecoveryClick: handleRecoveryClick });\n\n return (\n <div\n {...baseProps}\n className={clsx(styles.root, baseProps.className)}\n ref={__internalRootRef}\n onBlur={autosuggestDropdownHandlers.handleBlur}\n >\n <Dropdown\n trigger={\n <InternalInput\n type=\"search\"\n value={value}\n onChange={event => handleInputChange(event.detail.value)}\n __onDelayedInput={event => autosuggestLoadMoreHandlers.fireLoadMoreOnInputChange(event.detail.value)}\n onFocus={handleInputFocus}\n onKeyDown={handleKeyDown}\n onKeyUp={onKeyUp}\n disabled={disabled}\n disableBrowserAutocorrect={disableBrowserAutocorrect}\n readOnly={readOnly}\n ariaRequired={ariaRequired}\n ref={inputRef}\n autoComplete={false}\n __nativeAttributes={nativeAttributes}\n {...formFieldContext}\n controlId={controlId}\n />\n }\n onMouseDown={autosuggestDropdownHandlers.handleMouseDown}\n open={open}\n dropdownId={dropdownId}\n footer={\n dropdownStatus.isSticky ? (\n <div ref={autosuggestDropdownRefs.footerRef} className={styles['dropdown-footer']}>\n <DropdownFooter content={dropdownStatus.content} hasItems={autosuggestItemsState.items.length >= 1} />\n </div>\n ) : null\n }\n expandToViewport={expandToViewport}\n hasContent={autosuggestItemsState.items.length >= 1 || dropdownStatus.content !== null}\n trapFocus={!!showRecoveryLink}\n >\n {open && (\n <AutosuggestOptionsList\n autosuggestItemsState={autosuggestItemsState}\n autosuggestItemsHandlers={autosuggestItemsHandlers}\n highlightedOptionId={highlightedOptionId}\n highlightText={value}\n listId={listId}\n controlId={controlId}\n enteredTextLabel={enteredTextLabel}\n handleLoadMore={autosuggestLoadMoreHandlers.fireLoadMoreOnScroll}\n hasDropdownStatus={dropdownStatus.content !== null}\n virtualScroll={virtualScroll}\n selectedAriaLabel={selectedAriaLabel}\n renderHighlightedAriaLive={renderHighlightedAriaLive}\n listBottom={!dropdownStatus.isSticky ? <DropdownFooter content={dropdownStatus.content} /> : null}\n />\n )}\n </Dropdown>\n </div>\n );\n});\n\nexport default InternalAutosuggest;\n"]}
@@ -0,0 +1,16 @@
1
+ import { AutosuggestProps } from './interfaces';
2
+ import { OptionsLoadItemsDetail } from '../internal/components/dropdown/interfaces';
3
+ import { DropdownStatusProps } from '../internal/components/dropdown-status/interfaces';
4
+ export interface UseAutosuggestLoadMoreProps {
5
+ options?: AutosuggestProps.Options;
6
+ statusType: DropdownStatusProps.StatusType;
7
+ onLoadItems: (detail: OptionsLoadItemsDetail) => void;
8
+ }
9
+ export interface AutosuggestLoadMoreHandlers {
10
+ fireLoadMoreOnScroll(): void;
11
+ fireLoadMoreOnRecoveryClick(): void;
12
+ fireLoadMoreOnInputFocus(): void;
13
+ fireLoadMoreOnInputChange(filteringText: string): void;
14
+ }
15
+ export declare const useAutosuggestLoadMore: ({ options, statusType, onLoadItems, }: UseAutosuggestLoadMoreProps) => AutosuggestLoadMoreHandlers;
16
+ //# sourceMappingURL=load-more-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-more-controller.d.ts","sourceRoot":"","sources":["../../../src/autosuggest/load-more-controller.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,sBAAsB,EAAE,MAAM,4CAA4C,CAAC;AACpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,mDAAmD,CAAC;AAExF,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC;IACnC,UAAU,EAAE,mBAAmB,CAAC,UAAU,CAAC;IAC3C,WAAW,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI,CAAC;CACvD;AAED,MAAM,WAAW,2BAA2B;IAC1C,oBAAoB,IAAI,IAAI,CAAC;IAC7B,2BAA2B,IAAI,IAAI,CAAC;IACpC,wBAAwB,IAAI,IAAI,CAAC;IACjC,yBAAyB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CACxD;AAED,eAAO,MAAM,sBAAsB,0CAIhC,2BAA2B,KAAG,2BA+BhC,CAAC"}
@@ -0,0 +1,27 @@
1
+ // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ // SPDX-License-Identifier: Apache-2.0
3
+ import { useRef } from 'react';
4
+ export var useAutosuggestLoadMore = function (_a) {
5
+ var _b = _a.options, options = _b === void 0 ? [] : _b, statusType = _a.statusType, onLoadItems = _a.onLoadItems;
6
+ var lastFilteringText = useRef(null);
7
+ var fireLoadMore = function (_a) {
8
+ var _b;
9
+ var firstPage = _a.firstPage, samePage = _a.samePage, filteringText = _a.filteringText;
10
+ if (filteringText === undefined || lastFilteringText.current !== filteringText) {
11
+ if (filteringText !== undefined) {
12
+ lastFilteringText.current = filteringText;
13
+ }
14
+ onLoadItems({ filteringText: (_b = lastFilteringText.current) !== null && _b !== void 0 ? _b : '', firstPage: firstPage, samePage: samePage });
15
+ }
16
+ };
17
+ var fireLoadMoreOnScroll = function () {
18
+ return options.length > 0 && statusType === 'pending' && fireLoadMore({ firstPage: false, samePage: false });
19
+ };
20
+ var fireLoadMoreOnRecoveryClick = function () { return fireLoadMore({ firstPage: false, samePage: true }); };
21
+ var fireLoadMoreOnInputFocus = function () { return fireLoadMore({ firstPage: true, samePage: false, filteringText: '' }); };
22
+ var fireLoadMoreOnInputChange = function (filteringText) {
23
+ return fireLoadMore({ firstPage: true, samePage: false, filteringText: filteringText });
24
+ };
25
+ return { fireLoadMoreOnScroll: fireLoadMoreOnScroll, fireLoadMoreOnRecoveryClick: fireLoadMoreOnRecoveryClick, fireLoadMoreOnInputFocus: fireLoadMoreOnInputFocus, fireLoadMoreOnInputChange: fireLoadMoreOnInputChange };
26
+ };
27
+ //# sourceMappingURL=load-more-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-more-controller.js","sourceRoot":"","sources":["../../../src/autosuggest/load-more-controller.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AAEtC,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAkB/B,MAAM,CAAC,IAAM,sBAAsB,GAAG,UAAC,EAIT;QAH5B,eAAY,EAAZ,OAAO,mBAAG,EAAE,KAAA,EACZ,UAAU,gBAAA,EACV,WAAW,iBAAA;IAEX,IAAM,iBAAiB,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;IAEtD,IAAM,YAAY,GAAG,UAAC,EAQrB;;YAPC,SAAS,eAAA,EACT,QAAQ,cAAA,EACR,aAAa,mBAAA;QAMb,IAAI,aAAa,KAAK,SAAS,IAAI,iBAAiB,CAAC,OAAO,KAAK,aAAa,EAAE;YAC9E,IAAI,aAAa,KAAK,SAAS,EAAE;gBAC/B,iBAAiB,CAAC,OAAO,GAAG,aAAa,CAAC;aAC3C;YACD,WAAW,CAAC,EAAE,aAAa,EAAE,MAAA,iBAAiB,CAAC,OAAO,mCAAI,EAAE,EAAE,SAAS,WAAA,EAAE,QAAQ,UAAA,EAAE,CAAC,CAAC;SACtF;IACH,CAAC,CAAC;IAEF,IAAM,oBAAoB,GAAG;QAC3B,OAAA,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,KAAK,SAAS,IAAI,YAAY,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAArG,CAAqG,CAAC;IAExG,IAAM,2BAA2B,GAAG,cAAM,OAAA,YAAY,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,EAAlD,CAAkD,CAAC;IAE7F,IAAM,wBAAwB,GAAG,cAAM,OAAA,YAAY,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,EAArE,CAAqE,CAAC;IAE7G,IAAM,yBAAyB,GAAG,UAAC,aAAqB;QACtD,OAAA,YAAY,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,eAAA,EAAE,CAAC;IAAjE,CAAiE,CAAC;IAEpE,OAAO,EAAE,oBAAoB,sBAAA,EAAE,2BAA2B,6BAAA,EAAE,wBAAwB,0BAAA,EAAE,yBAAyB,2BAAA,EAAE,CAAC;AACpH,CAAC,CAAC","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useRef } from 'react';\nimport { AutosuggestProps } from './interfaces';\nimport { OptionsLoadItemsDetail } from '../internal/components/dropdown/interfaces';\nimport { DropdownStatusProps } from '../internal/components/dropdown-status/interfaces';\n\nexport interface UseAutosuggestLoadMoreProps {\n options?: AutosuggestProps.Options;\n statusType: DropdownStatusProps.StatusType;\n onLoadItems: (detail: OptionsLoadItemsDetail) => void;\n}\n\nexport interface AutosuggestLoadMoreHandlers {\n fireLoadMoreOnScroll(): void;\n fireLoadMoreOnRecoveryClick(): void;\n fireLoadMoreOnInputFocus(): void;\n fireLoadMoreOnInputChange(filteringText: string): void;\n}\n\nexport const useAutosuggestLoadMore = ({\n options = [],\n statusType,\n onLoadItems,\n}: UseAutosuggestLoadMoreProps): AutosuggestLoadMoreHandlers => {\n const lastFilteringText = useRef<string | null>(null);\n\n const fireLoadMore = ({\n firstPage,\n samePage,\n filteringText,\n }: {\n firstPage: boolean;\n samePage: boolean;\n filteringText?: string;\n }) => {\n if (filteringText === undefined || lastFilteringText.current !== filteringText) {\n if (filteringText !== undefined) {\n lastFilteringText.current = filteringText;\n }\n onLoadItems({ filteringText: lastFilteringText.current ?? '', firstPage, samePage });\n }\n };\n\n const fireLoadMoreOnScroll = () =>\n options.length > 0 && statusType === 'pending' && fireLoadMore({ firstPage: false, samePage: false });\n\n const fireLoadMoreOnRecoveryClick = () => fireLoadMore({ firstPage: false, samePage: true });\n\n const fireLoadMoreOnInputFocus = () => fireLoadMore({ firstPage: true, samePage: false, filteringText: '' });\n\n const fireLoadMoreOnInputChange = (filteringText: string) =>\n fireLoadMore({ firstPage: true, samePage: false, filteringText });\n\n return { fireLoadMoreOnScroll, fireLoadMoreOnRecoveryClick, fireLoadMoreOnInputFocus, fireLoadMoreOnInputChange };\n};\n"]}
@@ -1,6 +1,5 @@
1
1
  import { AutosuggestItem, AutosuggestProps } from './interfaces';
2
2
  import { HighlightedOptionHandlers, HighlightedOptionState } from '../internal/components/options-list/utils/use-highlight-option';
3
- import { BaseKeyDetail } from '../internal/events';
4
3
  declare type Options = AutosuggestProps.Options;
5
4
  export interface UseAutosuggestItemsProps {
6
5
  options: Options;
@@ -16,7 +15,9 @@ export interface AutosuggestItemsState extends HighlightedOptionState<Autosugges
16
15
  }
17
16
  export interface AutosuggestItemsHandlers extends HighlightedOptionHandlers<AutosuggestItem> {
18
17
  setShowAll(value: boolean): void;
19
- interceptKeyDown(event: CustomEvent<BaseKeyDetail>): boolean;
18
+ selectHighlightedOptionWithKeyboard(): boolean;
19
+ highlightVisibleOptionWithMouse(index: number): void;
20
+ selectVisibleOptionWithMouse(index: number): void;
20
21
  }
21
22
  export declare const getParentGroup: (item: AutosuggestItem) => AutosuggestItem | undefined;
22
23
  export declare const useAutosuggestItems: ({ options, filterValue, filterText, filteringType, hideEnteredTextLabel, onSelectItem, }: UseAutosuggestItemsProps) => [AutosuggestItemsState, AutosuggestItemsHandlers];
@@ -1 +1 @@
1
- {"version":3,"file":"options-controller.d.ts","sourceRoot":"","sources":["../../../src/autosuggest/options-controller.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EAEvB,MAAM,gEAAgE,CAAC;AAExE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,aAAK,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAExC,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,gBAAgB,CAAC,aAAa,CAAC;IAC9C,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,YAAY,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,qBAAsB,SAAQ,sBAAsB,CAAC,eAAe,CAAC;IACpF,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,wBAAyB,SAAQ,yBAAyB,CAAC,eAAe,CAAC;IAC1F,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,gBAAgB,CAAC,KAAK,EAAE,WAAW,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC;CAC9D;AAOD,eAAO,MAAM,cAAc,SAAU,eAAe,gCAAwB,CAAC;AAI7E,eAAO,MAAM,mBAAmB,6FAO7B,wBAAwB,KAAG,CAAC,qBAAqB,EAAE,wBAAwB,CA6C7E,CAAC"}
1
+ {"version":3,"file":"options-controller.d.ts","sourceRoot":"","sources":["../../../src/autosuggest/options-controller.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACjE,OAAO,EACL,yBAAyB,EACzB,sBAAsB,EAEvB,MAAM,gEAAgE,CAAC;AAExE,aAAK,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAExC,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,gBAAgB,CAAC,aAAa,CAAC;IAC9C,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,YAAY,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,qBAAsB,SAAQ,sBAAsB,CAAC,eAAe,CAAC;IACpF,KAAK,EAAE,SAAS,eAAe,EAAE,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,wBAAyB,SAAQ,yBAAyB,CAAC,eAAe,CAAC;IAC1F,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC;IACjC,mCAAmC,IAAI,OAAO,CAAC;IAC/C,+BAA+B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrD,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CACnD;AAOD,eAAO,MAAM,cAAc,SAAU,eAAe,gCAAwB,CAAC;AAI7E,eAAO,MAAM,mBAAmB,6FAO7B,wBAAwB,KAAG,CAAC,qBAAqB,EAAE,wBAAwB,CAkD7E,CAAC"}
@@ -5,7 +5,6 @@ import { useMemo, useState } from 'react';
5
5
  import { filterOptions } from './utils/utils';
6
6
  import { generateTestIndexes } from '../internal/components/options-list/utils/test-indexes';
7
7
  import { useHighlightedOption, } from '../internal/components/options-list/utils/use-highlight-option';
8
- import { KeyCode } from '../internal/keycode';
9
8
  var isHighlightable = function (option) {
10
9
  return !!option && option.type !== 'parent';
11
10
  };
@@ -28,30 +27,27 @@ export var useAutosuggestItems = function (_a) {
28
27
  options: filteredItems,
29
28
  isHighlightable: isHighlightable
30
29
  }), highlightedOptionState = _c[0], highlightedOptionHandlers = _c[1];
31
- var interceptKeyDown = function (event) {
32
- switch (event.detail.keyCode) {
33
- case KeyCode.down: {
34
- highlightedOptionHandlers.moveHighlightWithKeyboard(1);
35
- return true;
36
- }
37
- case KeyCode.up: {
38
- highlightedOptionHandlers.moveHighlightWithKeyboard(-1);
39
- return true;
40
- }
41
- case KeyCode.enter: {
42
- if (highlightedOptionState.highlightedOption && isInteractive(highlightedOptionState.highlightedOption)) {
43
- onSelectItem(highlightedOptionState.highlightedOption);
44
- return true;
45
- }
46
- return false;
47
- }
48
- default:
49
- return false;
30
+ var selectHighlightedOptionWithKeyboard = function () {
31
+ if (highlightedOptionState.highlightedOption && isInteractive(highlightedOptionState.highlightedOption)) {
32
+ onSelectItem(highlightedOptionState.highlightedOption);
33
+ return true;
34
+ }
35
+ return false;
36
+ };
37
+ var highlightVisibleOptionWithMouse = function (index) {
38
+ if (filteredItems[index] && isHighlightable(filteredItems[index])) {
39
+ highlightedOptionHandlers.setHighlightedIndexWithMouse(index);
40
+ }
41
+ };
42
+ var selectVisibleOptionWithMouse = function (index) {
43
+ if (filteredItems[index] && isInteractive(filteredItems[index])) {
44
+ onSelectItem(filteredItems[index]);
50
45
  }
46
+ return false;
51
47
  };
52
48
  return [
53
- __assign({ items: filteredItems, showAll: showAll }, highlightedOptionState),
54
- __assign({ setShowAll: setShowAll, interceptKeyDown: interceptKeyDown }, highlightedOptionHandlers),
49
+ __assign(__assign({}, highlightedOptionState), { items: filteredItems, showAll: showAll }),
50
+ __assign(__assign({}, highlightedOptionHandlers), { setShowAll: setShowAll, selectHighlightedOptionWithKeyboard: selectHighlightedOptionWithKeyboard, highlightVisibleOptionWithMouse: highlightVisibleOptionWithMouse, selectVisibleOptionWithMouse: selectVisibleOptionWithMouse }),
55
51
  ];
56
52
  };
57
53
  function createItems(options) {
@@ -1 +1 @@
1
- {"version":3,"file":"options-controller.js","sourceRoot":"","sources":["../../../src/autosuggest/options-controller.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useMemo, useState } from 'react';\nimport { filterOptions } from './utils/utils';\nimport { generateTestIndexes } from '../internal/components/options-list/utils/test-indexes';\nimport { AutosuggestItem, AutosuggestProps } from './interfaces';\nimport {\n HighlightedOptionHandlers,\n HighlightedOptionState,\n useHighlightedOption,\n} from '../internal/components/options-list/utils/use-highlight-option';\nimport { KeyCode } from '../internal/keycode';\nimport { BaseKeyDetail } from '../internal/events';\n\ntype Options = AutosuggestProps.Options;\n\nexport interface UseAutosuggestItemsProps {\n options: Options;\n filterValue: string;\n filterText: string;\n filteringType: AutosuggestProps.FilteringType;\n hideEnteredTextLabel?: boolean;\n onSelectItem: (option: AutosuggestItem) => void;\n}\n\nexport interface AutosuggestItemsState extends HighlightedOptionState<AutosuggestItem> {\n items: readonly AutosuggestItem[];\n showAll: boolean;\n}\n\nexport interface AutosuggestItemsHandlers extends HighlightedOptionHandlers<AutosuggestItem> {\n setShowAll(value: boolean): void;\n interceptKeyDown(event: CustomEvent<BaseKeyDetail>): boolean;\n}\n\nconst isHighlightable = (option?: AutosuggestItem) => {\n return !!option && option.type !== 'parent';\n};\n\nconst parentMap = new WeakMap<AutosuggestItem, AutosuggestItem>();\nexport const getParentGroup = (item: AutosuggestItem) => parentMap.get(item);\n\nconst isInteractive = (option?: AutosuggestItem) => !!option && !option.disabled && option.type !== 'parent';\n\nexport const useAutosuggestItems = ({\n options,\n filterValue,\n filterText,\n filteringType,\n hideEnteredTextLabel,\n onSelectItem,\n}: UseAutosuggestItemsProps): [AutosuggestItemsState, AutosuggestItemsHandlers] => {\n const [showAll, setShowAll] = useState(false);\n\n const items = useMemo(() => createItems(options), [options]);\n\n const filteredItems = useMemo(() => {\n const filteredItems = filteringType === 'auto' && !showAll ? filterOptions(items, filterText) : [...items];\n if (filterValue && !hideEnteredTextLabel) {\n filteredItems.unshift({ value: filterValue, type: 'use-entered', option: { value: filterValue } });\n }\n generateTestIndexes(filteredItems, getParentGroup);\n return filteredItems;\n }, [items, filterValue, filterText, filteringType, showAll, hideEnteredTextLabel]);\n\n const [highlightedOptionState, highlightedOptionHandlers] = useHighlightedOption({\n options: filteredItems,\n isHighlightable,\n });\n\n const interceptKeyDown = (event: CustomEvent<BaseKeyDetail>): boolean => {\n switch (event.detail.keyCode) {\n case KeyCode.down: {\n highlightedOptionHandlers.moveHighlightWithKeyboard(1);\n return true;\n }\n case KeyCode.up: {\n highlightedOptionHandlers.moveHighlightWithKeyboard(-1);\n return true;\n }\n case KeyCode.enter: {\n if (highlightedOptionState.highlightedOption && isInteractive(highlightedOptionState.highlightedOption)) {\n onSelectItem(highlightedOptionState.highlightedOption);\n return true;\n }\n return false;\n }\n default:\n return false;\n }\n };\n\n return [\n { items: filteredItems, showAll, ...highlightedOptionState },\n { setShowAll, interceptKeyDown, ...highlightedOptionHandlers },\n ];\n};\n\nfunction createItems(options: Options): AutosuggestItem[] {\n const items: AutosuggestItem[] = [];\n for (const option of options) {\n if (isGroup(option)) {\n for (const item of flattenGroup(option)) {\n items.push(item);\n }\n } else {\n items.push({ ...option, option });\n }\n }\n return items;\n}\n\nfunction isGroup(optionOrGroup: AutosuggestProps.Option): optionOrGroup is AutosuggestProps.OptionGroup {\n return 'options' in optionOrGroup;\n}\n\nfunction flattenGroup(group: AutosuggestProps.OptionGroup): AutosuggestItem[] {\n const { options, ...rest } = group;\n\n let hasOnlyDisabledChildren = true;\n\n const items: AutosuggestItem[] = [{ ...rest, type: 'parent', option: group }];\n\n for (const option of options) {\n if (!option.disabled) {\n hasOnlyDisabledChildren = false;\n }\n\n const childOption: AutosuggestItem = {\n ...option,\n type: 'child',\n disabled: option.disabled || rest.disabled,\n option,\n };\n\n items.push(childOption);\n\n // TODO: Refactor parentMap and remove this side effect\n parentMap.set(childOption, { ...group, option: group });\n }\n\n items[0].disabled = items[0].disabled || hasOnlyDisabledChildren;\n\n return items;\n}\n"]}
1
+ {"version":3,"file":"options-controller.js","sourceRoot":"","sources":["../../../src/autosuggest/options-controller.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { useMemo, useState } from 'react';\nimport { filterOptions } from './utils/utils';\nimport { generateTestIndexes } from '../internal/components/options-list/utils/test-indexes';\nimport { AutosuggestItem, AutosuggestProps } from './interfaces';\nimport {\n HighlightedOptionHandlers,\n HighlightedOptionState,\n useHighlightedOption,\n} from '../internal/components/options-list/utils/use-highlight-option';\n\ntype Options = AutosuggestProps.Options;\n\nexport interface UseAutosuggestItemsProps {\n options: Options;\n filterValue: string;\n filterText: string;\n filteringType: AutosuggestProps.FilteringType;\n hideEnteredTextLabel?: boolean;\n onSelectItem: (option: AutosuggestItem) => void;\n}\n\nexport interface AutosuggestItemsState extends HighlightedOptionState<AutosuggestItem> {\n items: readonly AutosuggestItem[];\n showAll: boolean;\n}\n\nexport interface AutosuggestItemsHandlers extends HighlightedOptionHandlers<AutosuggestItem> {\n setShowAll(value: boolean): void;\n selectHighlightedOptionWithKeyboard(): boolean;\n highlightVisibleOptionWithMouse(index: number): void;\n selectVisibleOptionWithMouse(index: number): void;\n}\n\nconst isHighlightable = (option?: AutosuggestItem) => {\n return !!option && option.type !== 'parent';\n};\n\nconst parentMap = new WeakMap<AutosuggestItem, AutosuggestItem>();\nexport const getParentGroup = (item: AutosuggestItem) => parentMap.get(item);\n\nconst isInteractive = (option?: AutosuggestItem) => !!option && !option.disabled && option.type !== 'parent';\n\nexport const useAutosuggestItems = ({\n options,\n filterValue,\n filterText,\n filteringType,\n hideEnteredTextLabel,\n onSelectItem,\n}: UseAutosuggestItemsProps): [AutosuggestItemsState, AutosuggestItemsHandlers] => {\n const [showAll, setShowAll] = useState(false);\n\n const items = useMemo(() => createItems(options), [options]);\n\n const filteredItems = useMemo(() => {\n const filteredItems = filteringType === 'auto' && !showAll ? filterOptions(items, filterText) : [...items];\n if (filterValue && !hideEnteredTextLabel) {\n filteredItems.unshift({ value: filterValue, type: 'use-entered', option: { value: filterValue } });\n }\n generateTestIndexes(filteredItems, getParentGroup);\n return filteredItems;\n }, [items, filterValue, filterText, filteringType, showAll, hideEnteredTextLabel]);\n\n const [highlightedOptionState, highlightedOptionHandlers] = useHighlightedOption({\n options: filteredItems,\n isHighlightable,\n });\n\n const selectHighlightedOptionWithKeyboard = () => {\n if (highlightedOptionState.highlightedOption && isInteractive(highlightedOptionState.highlightedOption)) {\n onSelectItem(highlightedOptionState.highlightedOption);\n return true;\n }\n return false;\n };\n\n const highlightVisibleOptionWithMouse = (index: number) => {\n if (filteredItems[index] && isHighlightable(filteredItems[index])) {\n highlightedOptionHandlers.setHighlightedIndexWithMouse(index);\n }\n };\n\n const selectVisibleOptionWithMouse = (index: number) => {\n if (filteredItems[index] && isInteractive(filteredItems[index])) {\n onSelectItem(filteredItems[index]);\n }\n return false;\n };\n\n return [\n { ...highlightedOptionState, items: filteredItems, showAll },\n {\n ...highlightedOptionHandlers,\n setShowAll,\n selectHighlightedOptionWithKeyboard,\n highlightVisibleOptionWithMouse,\n selectVisibleOptionWithMouse,\n },\n ];\n};\n\nfunction createItems(options: Options): AutosuggestItem[] {\n const items: AutosuggestItem[] = [];\n for (const option of options) {\n if (isGroup(option)) {\n for (const item of flattenGroup(option)) {\n items.push(item);\n }\n } else {\n items.push({ ...option, option });\n }\n }\n return items;\n}\n\nfunction isGroup(optionOrGroup: AutosuggestProps.Option): optionOrGroup is AutosuggestProps.OptionGroup {\n return 'options' in optionOrGroup;\n}\n\nfunction flattenGroup(group: AutosuggestProps.OptionGroup): AutosuggestItem[] {\n const { options, ...rest } = group;\n\n let hasOnlyDisabledChildren = true;\n\n const items: AutosuggestItem[] = [{ ...rest, type: 'parent', option: group }];\n\n for (const option of options) {\n if (!option.disabled) {\n hasOnlyDisabledChildren = false;\n }\n\n const childOption: AutosuggestItem = {\n ...option,\n type: 'child',\n disabled: option.disabled || rest.disabled,\n option,\n };\n\n items.push(childOption);\n\n // TODO: Refactor parentMap and remove this side effect\n parentMap.set(childOption, { ...group, option: group });\n }\n\n items[0].disabled = items[0].disabled || hasOnlyDisabledChildren;\n\n return items;\n}\n"]}
@@ -1,10 +1,9 @@
1
1
  import React from 'react';
2
2
  import { AutosuggestItemsHandlers, AutosuggestItemsState } from './options-controller';
3
- import { AutosuggestItem, AutosuggestProps } from './interfaces';
3
+ import { AutosuggestProps } from './interfaces';
4
4
  export interface AutosuggestOptionsListProps extends Pick<AutosuggestProps, 'enteredTextLabel' | 'virtualScroll' | 'selectedAriaLabel' | 'renderHighlightedAriaLive'> {
5
5
  autosuggestItemsState: AutosuggestItemsState;
6
6
  autosuggestItemsHandlers: AutosuggestItemsHandlers;
7
- selectOption: (option: AutosuggestItem) => void;
8
7
  highlightedOptionId?: string;
9
8
  highlightText: string;
10
9
  listId: string;
@@ -13,5 +12,5 @@ export interface AutosuggestOptionsListProps extends Pick<AutosuggestProps, 'ent
13
12
  hasDropdownStatus?: boolean;
14
13
  listBottom?: React.ReactNode;
15
14
  }
16
- export default function AutosuggestOptionsList({ autosuggestItemsState, autosuggestItemsHandlers, selectOption, highlightedOptionId, highlightText, listId, controlId, enteredTextLabel, handleLoadMore, hasDropdownStatus, virtualScroll, selectedAriaLabel, renderHighlightedAriaLive, listBottom, }: AutosuggestOptionsListProps): JSX.Element;
15
+ export default function AutosuggestOptionsList({ autosuggestItemsState, autosuggestItemsHandlers, highlightedOptionId, highlightText, listId, controlId, enteredTextLabel, handleLoadMore, hasDropdownStatus, virtualScroll, selectedAriaLabel, renderHighlightedAriaLive, listBottom, }: AutosuggestOptionsListProps): JSX.Element;
17
16
  //# sourceMappingURL=options-list.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"options-list.d.ts","sourceRoot":"","sources":["../../../src/autosuggest/options-list.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAkB,MAAM,sBAAsB,CAAC;AACvG,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAOjE,MAAM,WAAW,2BACf,SAAQ,IAAI,CACV,gBAAgB,EAChB,kBAAkB,GAAG,eAAe,GAAG,mBAAmB,GAAG,2BAA2B,CACzF;IACD,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,wBAAwB,EAAE,wBAAwB,CAAC;IACnD,YAAY,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAChD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AAiBD,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAC7C,qBAAqB,EACrB,wBAAwB,EACxB,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,yBAAyB,EACzB,UAAU,GACX,EAAE,2BAA2B,eAiC7B"}
1
+ {"version":3,"file":"options-list.d.ts","sourceRoot":"","sources":["../../../src/autosuggest/options-list.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAkB,MAAM,sBAAsB,CAAC;AACvG,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAOhD,MAAM,WAAW,2BACf,SAAQ,IAAI,CACV,gBAAgB,EAChB,kBAAkB,GAAG,eAAe,GAAG,mBAAmB,GAAG,2BAA2B,CACzF;IACD,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,wBAAwB,EAAE,wBAAwB,CAAC;IACnD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC9B;AASD,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAC7C,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,EACnB,aAAa,EACb,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,cAAc,EACd,iBAAiB,EACjB,aAAa,EACb,iBAAiB,EACjB,yBAAyB,EACzB,UAAU,GACX,EAAE,2BAA2B,eA2B7B"}
@@ -1,17 +1,10 @@
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 { useSelectVisibleOption, useHighlightVisibleOption } from './controller';
5
4
  import { getParentGroup } from './options-controller';
6
5
  import VirtualList from './virtual-list';
7
6
  import PlainList from './plain-list';
8
7
  import { useAnnouncement } from '../select/utils/use-announcement';
9
- var isInteractive = function (option) {
10
- return !!option && !option.disabled && option.type !== 'parent';
11
- };
12
- var isHighlightable = function (option) {
13
- return !!option && option.type !== 'parent';
14
- };
15
8
  var createMouseEventHandler = function (handler) { return function (itemIndex) {
16
9
  // prevent mouse events to avoid losing focus from the input
17
10
  if (itemIndex > -1) {
@@ -19,11 +12,9 @@ var createMouseEventHandler = function (handler) { return function (itemIndex) {
19
12
  }
20
13
  }; };
21
14
  export default function AutosuggestOptionsList(_a) {
22
- var autosuggestItemsState = _a.autosuggestItemsState, autosuggestItemsHandlers = _a.autosuggestItemsHandlers, selectOption = _a.selectOption, highlightedOptionId = _a.highlightedOptionId, highlightText = _a.highlightText, listId = _a.listId, controlId = _a.controlId, enteredTextLabel = _a.enteredTextLabel, handleLoadMore = _a.handleLoadMore, hasDropdownStatus = _a.hasDropdownStatus, virtualScroll = _a.virtualScroll, selectedAriaLabel = _a.selectedAriaLabel, renderHighlightedAriaLive = _a.renderHighlightedAriaLive, listBottom = _a.listBottom;
23
- var highlightVisibleOption = useHighlightVisibleOption(autosuggestItemsState.items, autosuggestItemsHandlers.setHighlightedIndexWithMouse, isHighlightable);
24
- var selectVisibleOption = useSelectVisibleOption(autosuggestItemsState.items, selectOption, isInteractive);
25
- var handleMouseUp = createMouseEventHandler(selectVisibleOption);
26
- var handleMouseMove = createMouseEventHandler(highlightVisibleOption);
15
+ var autosuggestItemsState = _a.autosuggestItemsState, autosuggestItemsHandlers = _a.autosuggestItemsHandlers, highlightedOptionId = _a.highlightedOptionId, highlightText = _a.highlightText, listId = _a.listId, controlId = _a.controlId, enteredTextLabel = _a.enteredTextLabel, handleLoadMore = _a.handleLoadMore, hasDropdownStatus = _a.hasDropdownStatus, virtualScroll = _a.virtualScroll, selectedAriaLabel = _a.selectedAriaLabel, renderHighlightedAriaLive = _a.renderHighlightedAriaLive, listBottom = _a.listBottom;
16
+ var handleMouseUp = createMouseEventHandler(autosuggestItemsHandlers.selectVisibleOptionWithMouse);
17
+ var handleMouseMove = createMouseEventHandler(autosuggestItemsHandlers.highlightVisibleOptionWithMouse);
27
18
  var ListComponent = virtualScroll ? VirtualList : PlainList;
28
19
  var announcement = useAnnouncement({
29
20
  announceSelected: true,
@@ -1 +1 @@
1
- {"version":3,"file":"options-list.js","sourceRoot":"","sources":["../../../src/autosuggest/options-list.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,EAAmD,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEvG,OAAO,WAAW,MAAM,gBAAgB,CAAC;AACzC,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAoBnE,IAAM,aAAa,GAAG,UAAC,MAAwB;IAC7C,OAAO,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;AAClE,CAAC,CAAC;AAEF,IAAM,eAAe,GAAG,UAAC,MAAwB;IAC/C,OAAO,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC9C,CAAC,CAAC;AAEF,IAAM,uBAAuB,GAAG,UAAC,OAAgC,IAAK,OAAA,UAAC,SAAiB;IACtF,4DAA4D;IAC5D,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE;QAClB,OAAO,CAAC,SAAS,CAAC,CAAC;KACpB;AACH,CAAC,EALqE,CAKrE,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAejB;QAd5B,qBAAqB,2BAAA,EACrB,wBAAwB,8BAAA,EACxB,YAAY,kBAAA,EACZ,mBAAmB,yBAAA,EACnB,aAAa,mBAAA,EACb,MAAM,YAAA,EACN,SAAS,eAAA,EACT,gBAAgB,sBAAA,EAChB,cAAc,oBAAA,EACd,iBAAiB,uBAAA,EACjB,aAAa,mBAAA,EACb,iBAAiB,uBAAA,EACjB,yBAAyB,+BAAA,EACzB,UAAU,gBAAA;IAEV,IAAM,sBAAsB,GAAG,yBAAyB,CACtD,qBAAqB,CAAC,KAAK,EAC3B,wBAAwB,CAAC,4BAA4B,EACrD,eAAe,CAChB,CAAC;IACF,IAAM,mBAAmB,GAAG,sBAAsB,CAAC,qBAAqB,CAAC,KAAK,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IAC7G,IAAM,aAAa,GAAG,uBAAuB,CAAC,mBAAmB,CAAC,CAAC;IACnE,IAAM,eAAe,GAAG,uBAAuB,CAAC,sBAAsB,CAAC,CAAC;IAExE,IAAM,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9D,IAAM,YAAY,GAAG,eAAe,CAAC;QACnC,gBAAgB,EAAE,IAAI;QACtB,iBAAiB,EAAE,qBAAqB,CAAC,iBAAiB;QAC1D,SAAS,EAAE,UAAA,MAAM,YAAI,OAAA,MAAA,cAAc,CAAC,MAAM,CAAC,0CAAE,MAAiC,CAAA,EAAA;QAC9E,iBAAiB,mBAAA;QACjB,yBAAyB,2BAAA;KAC1B,CAAC,CAAC;IAEH,OAAO,CACL,oBAAC,aAAa,IACZ,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc,EAC9B,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,gBAAgB,EAClC,oBAAoB,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,EAC5E,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,EAC5G,mBAAmB,EAAE,YAAY,GACjC,CACH,CAAC;AACJ,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 { useSelectVisibleOption, useHighlightVisibleOption } from './controller';\nimport { AutosuggestItemsHandlers, AutosuggestItemsState, getParentGroup } from './options-controller';\nimport { AutosuggestItem, AutosuggestProps } from './interfaces';\nimport VirtualList from './virtual-list';\nimport PlainList from './plain-list';\n\nimport { useAnnouncement } from '../select/utils/use-announcement';\nimport { OptionGroup } from '../internal/components/option/interfaces';\n\nexport interface AutosuggestOptionsListProps\n extends Pick<\n AutosuggestProps,\n 'enteredTextLabel' | 'virtualScroll' | 'selectedAriaLabel' | 'renderHighlightedAriaLive'\n > {\n autosuggestItemsState: AutosuggestItemsState;\n autosuggestItemsHandlers: AutosuggestItemsHandlers;\n selectOption: (option: AutosuggestItem) => void;\n highlightedOptionId?: string;\n highlightText: string;\n listId: string;\n controlId: string;\n handleLoadMore: () => void;\n hasDropdownStatus?: boolean;\n listBottom?: React.ReactNode;\n}\n\nconst isInteractive = (option?: AutosuggestItem) => {\n return !!option && !option.disabled && option.type !== 'parent';\n};\n\nconst isHighlightable = (option?: AutosuggestItem) => {\n return !!option && option.type !== 'parent';\n};\n\nconst createMouseEventHandler = (handler: (index: number) => void) => (itemIndex: number) => {\n // prevent mouse events to avoid losing focus from the input\n if (itemIndex > -1) {\n handler(itemIndex);\n }\n};\n\nexport default function AutosuggestOptionsList({\n autosuggestItemsState,\n autosuggestItemsHandlers,\n selectOption,\n highlightedOptionId,\n highlightText,\n listId,\n controlId,\n enteredTextLabel,\n handleLoadMore,\n hasDropdownStatus,\n virtualScroll,\n selectedAriaLabel,\n renderHighlightedAriaLive,\n listBottom,\n}: AutosuggestOptionsListProps) {\n const highlightVisibleOption = useHighlightVisibleOption(\n autosuggestItemsState.items,\n autosuggestItemsHandlers.setHighlightedIndexWithMouse,\n isHighlightable\n );\n const selectVisibleOption = useSelectVisibleOption(autosuggestItemsState.items, selectOption, isInteractive);\n const handleMouseUp = createMouseEventHandler(selectVisibleOption);\n const handleMouseMove = createMouseEventHandler(highlightVisibleOption);\n\n const ListComponent = virtualScroll ? VirtualList : PlainList;\n\n const announcement = useAnnouncement({\n announceSelected: true,\n highlightedOption: autosuggestItemsState.highlightedOption,\n getParent: option => getParentGroup(option)?.option as undefined | OptionGroup,\n selectedAriaLabel,\n renderHighlightedAriaLive,\n });\n\n return (\n <ListComponent\n listBottom={listBottom}\n handleLoadMore={handleLoadMore}\n autosuggestItemsState={autosuggestItemsState}\n highlightText={highlightText}\n enteredTextLabel={enteredTextLabel}\n highlightedA11yProps={highlightedOptionId ? { id: highlightedOptionId } : {}}\n hasDropdownStatus={hasDropdownStatus}\n menuProps={{ id: listId, ariaLabelledby: controlId, onMouseUp: handleMouseUp, onMouseMove: handleMouseMove }}\n screenReaderContent={announcement}\n />\n );\n}\n"]}
1
+ {"version":3,"file":"options-list.js","sourceRoot":"","sources":["../../../src/autosuggest/options-list.tsx"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,sCAAsC;AACtC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAmD,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEvG,OAAO,WAAW,MAAM,gBAAgB,CAAC;AACzC,OAAO,SAAS,MAAM,cAAc,CAAC;AAErC,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAmBnE,IAAM,uBAAuB,GAAG,UAAC,OAAgC,IAAK,OAAA,UAAC,SAAiB;IACtF,4DAA4D;IAC5D,IAAI,SAAS,GAAG,CAAC,CAAC,EAAE;QAClB,OAAO,CAAC,SAAS,CAAC,CAAC;KACpB;AACH,CAAC,EALqE,CAKrE,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,sBAAsB,CAAC,EAcjB;QAb5B,qBAAqB,2BAAA,EACrB,wBAAwB,8BAAA,EACxB,mBAAmB,yBAAA,EACnB,aAAa,mBAAA,EACb,MAAM,YAAA,EACN,SAAS,eAAA,EACT,gBAAgB,sBAAA,EAChB,cAAc,oBAAA,EACd,iBAAiB,uBAAA,EACjB,aAAa,mBAAA,EACb,iBAAiB,uBAAA,EACjB,yBAAyB,+BAAA,EACzB,UAAU,gBAAA;IAEV,IAAM,aAAa,GAAG,uBAAuB,CAAC,wBAAwB,CAAC,4BAA4B,CAAC,CAAC;IACrG,IAAM,eAAe,GAAG,uBAAuB,CAAC,wBAAwB,CAAC,+BAA+B,CAAC,CAAC;IAE1G,IAAM,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9D,IAAM,YAAY,GAAG,eAAe,CAAC;QACnC,gBAAgB,EAAE,IAAI;QACtB,iBAAiB,EAAE,qBAAqB,CAAC,iBAAiB;QAC1D,SAAS,EAAE,UAAA,MAAM,YAAI,OAAA,MAAA,cAAc,CAAC,MAAM,CAAC,0CAAE,MAAiC,CAAA,EAAA;QAC9E,iBAAiB,mBAAA;QACjB,yBAAyB,2BAAA;KAC1B,CAAC,CAAC;IAEH,OAAO,CACL,oBAAC,aAAa,IACZ,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,cAAc,EAC9B,qBAAqB,EAAE,qBAAqB,EAC5C,aAAa,EAAE,aAAa,EAC5B,gBAAgB,EAAE,gBAAgB,EAClC,oBAAoB,EAAE,mBAAmB,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC,EAAE,EAC5E,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,eAAe,EAAE,EAC5G,mBAAmB,EAAE,YAAY,GACjC,CACH,CAAC;AACJ,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 { AutosuggestItemsHandlers, AutosuggestItemsState, getParentGroup } from './options-controller';\nimport { AutosuggestProps } from './interfaces';\nimport VirtualList from './virtual-list';\nimport PlainList from './plain-list';\n\nimport { useAnnouncement } from '../select/utils/use-announcement';\nimport { OptionGroup } from '../internal/components/option/interfaces';\n\nexport interface AutosuggestOptionsListProps\n extends Pick<\n AutosuggestProps,\n 'enteredTextLabel' | 'virtualScroll' | 'selectedAriaLabel' | 'renderHighlightedAriaLive'\n > {\n autosuggestItemsState: AutosuggestItemsState;\n autosuggestItemsHandlers: AutosuggestItemsHandlers;\n highlightedOptionId?: string;\n highlightText: string;\n listId: string;\n controlId: string;\n handleLoadMore: () => void;\n hasDropdownStatus?: boolean;\n listBottom?: React.ReactNode;\n}\n\nconst createMouseEventHandler = (handler: (index: number) => void) => (itemIndex: number) => {\n // prevent mouse events to avoid losing focus from the input\n if (itemIndex > -1) {\n handler(itemIndex);\n }\n};\n\nexport default function AutosuggestOptionsList({\n autosuggestItemsState,\n autosuggestItemsHandlers,\n highlightedOptionId,\n highlightText,\n listId,\n controlId,\n enteredTextLabel,\n handleLoadMore,\n hasDropdownStatus,\n virtualScroll,\n selectedAriaLabel,\n renderHighlightedAriaLive,\n listBottom,\n}: AutosuggestOptionsListProps) {\n const handleMouseUp = createMouseEventHandler(autosuggestItemsHandlers.selectVisibleOptionWithMouse);\n const handleMouseMove = createMouseEventHandler(autosuggestItemsHandlers.highlightVisibleOptionWithMouse);\n\n const ListComponent = virtualScroll ? VirtualList : PlainList;\n\n const announcement = useAnnouncement({\n announceSelected: true,\n highlightedOption: autosuggestItemsState.highlightedOption,\n getParent: option => getParentGroup(option)?.option as undefined | OptionGroup,\n selectedAriaLabel,\n renderHighlightedAriaLive,\n });\n\n return (\n <ListComponent\n listBottom={listBottom}\n handleLoadMore={handleLoadMore}\n autosuggestItemsState={autosuggestItemsState}\n highlightText={highlightText}\n enteredTextLabel={enteredTextLabel}\n highlightedA11yProps={highlightedOptionId ? { id: highlightedOptionId } : {}}\n hasDropdownStatus={hasDropdownStatus}\n menuProps={{ id: listId, ariaLabelledby: controlId, onMouseUp: handleMouseUp, onMouseMove: handleMouseMove }}\n screenReaderContent={announcement}\n />\n );\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/date-picker/calendar/index.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAS9C,MAAM,WAAW,iBAAiB;IAChC,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,kBAAkB;IACjC,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB;AAED,oBAAY,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAMjD,UAAU,aAAc,SAAQ,kBAAkB;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,IAAI,CAAC;IACpB,aAAa,EAAE,eAAe,CAAC,qBAAqB,CAAC;IACrD,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IAEvB,aAAa,EAAE,kBAAkB,CAAC;IAClC,YAAY,EAAE,iBAAiB,CAAC;CACjC;AAED,QAAA,MAAM,QAAQ,0JAWX,aAAa,gBA0Gf,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/date-picker/calendar/index.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEnE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAS9C,MAAM,WAAW,iBAAiB;IAChC,CAAC,MAAM,EAAE,aAAa,CAAC,UAAU,GAAG,IAAI,CAAC;CAC1C;AAED,MAAM,WAAW,kBAAkB;IACjC,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB;AAED,oBAAY,QAAQ,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAMjD,UAAU,aAAc,SAAQ,kBAAkB;IAChD,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1B,aAAa,EAAE,IAAI,CAAC;IACpB,aAAa,EAAE,eAAe,CAAC,qBAAqB,CAAC;IACrD,cAAc,EAAE,MAAM,CAAC;IACvB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IAEvB,aAAa,EAAE,kBAAkB,CAAC;IAClC,YAAY,EAAE,iBAAiB,CAAC;CACjC;AAED,QAAA,MAAM,QAAQ,0JAWX,aAAa,gBA+Gf,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -2,7 +2,7 @@ import { __assign } from "tslib";
2
2
  // Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3
3
  // SPDX-License-Identifier: Apache-2.0
4
4
  import React, { useRef, useState } from 'react';
5
- import { addDays, addMonths, isSameMonth, startOfMonth } from 'date-fns';
5
+ import { addDays, addMonths, getDaysInMonth, isSameMonth, startOfMonth } from 'date-fns';
6
6
  import styles from '../styles.css.js';
7
7
  import useFocusVisible from '../../internal/hooks/focus-visible/index.js';
8
8
  import CalendarHeader from './header';
@@ -34,12 +34,17 @@ var Calendar = function (_a) {
34
34
  }
35
35
  return null;
36
36
  };
37
+ // Get the first enabled date of the month. If no day is enabled in the given month, return the first day of the month.
38
+ // This is needed because `baseDate` is used as the first focusable date, for example when navigating to the calendar area.
37
39
  var getBaseDate = function (date) {
38
40
  var startDate = startOfMonth(date);
39
- if (isDateEnabled(startDate)) {
40
- return startDate;
41
+ for (var i = 0; i < getDaysInMonth(date); i++) {
42
+ var currentDate = addDays(startDate, i);
43
+ if (isDateEnabled(currentDate)) {
44
+ return currentDate;
45
+ }
41
46
  }
42
- return moveFocusHandler(startDate, isDateEnabled, function (date) { return addDays(date, 1); });
47
+ return startDate;
43
48
  };
44
49
  var baseDate = getBaseDate(displayedDate);
45
50
  var focusedOrSelectedDate = focusedDate || selectFocusedDate(selectedDate, baseDate);