@razorpay/blade 12.53.0 → 12.53.1

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.
@@ -1,7 +1,7 @@
1
1
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
2
2
  import { dropdownComponentIds } from './dropdownComponentIds.js';
3
3
 
4
- var SelectActions={Close:'Close',CloseSelect:'CloseSelect',First:'First',Last:'Last',Next:'Next',Open:'Open',PageDown:'PageDown',PageUp:'PageUp',Previous:'Previous',Select:'Select',Type:'Type'};function filterOptions(){var options=arguments.length>0&&arguments[0]!==undefined?arguments[0]:[];var filter=arguments.length>1?arguments[1]:undefined;var exclude=arguments.length>2&&arguments[2]!==undefined?arguments[2]:[];return options.filter(function(option){var matches=option.toLowerCase().startsWith(filter.toLowerCase());return matches&&!exclude.includes(option);});}function getActionFromKey(e,isOpen,dropdownTriggerer){if(!e){return undefined;}var altKey=e.altKey,ctrlKey=e.ctrlKey,metaKey=e.metaKey;var key='';if('key'in e){key=e.key;}var openKeys=['ArrowDown','ArrowUp','Enter',' '];if(!key)return undefined;if(!isOpen&&key&&openKeys.includes(key)){return SelectActions.Open;}if(key==='Home'){return SelectActions.First;}if(key==='End'){return SelectActions.Last;}if(key==='Backspace'||key==='Clear'||key.length===1&&key!==' '&&!altKey&&!ctrlKey&&!metaKey){return SelectActions.Type;}if(isOpen){if(key==='ArrowUp'&&altKey){return SelectActions.CloseSelect;}else if(key==='ArrowDown'&&!altKey){return SelectActions.Next;}else if(key==='ArrowUp'){return SelectActions.Previous;}else if(key==='PageUp'){return SelectActions.PageUp;}else if(key==='PageDown'){return SelectActions.PageDown;}else if(key==='Escape'){return SelectActions.Close;}else if(key==='Enter'||dropdownTriggerer!==dropdownComponentIds.triggers.AutoComplete&&dropdownTriggerer!==dropdownComponentIds.triggers.SearchInput&&key===' '){return SelectActions.CloseSelect;}}return undefined;}function getIndexByLetter(options,filter){var startIndex=arguments.length>2&&arguments[2]!==undefined?arguments[2]:0;var orderedOptions=[].concat(_toConsumableArray(options.slice(startIndex)),_toConsumableArray(options.slice(0,startIndex)));var firstMatch=filterOptions(orderedOptions,filter)[0];var allSameLetter=function allSameLetter(array){return array.every(function(letter){return letter===array[0];});};if(firstMatch){return options.indexOf(firstMatch);}else if(allSameLetter(filter.split(''))){var matches=filterOptions(orderedOptions,filter[0]);return options.indexOf(matches[0]);}else {return -1;}}function getUpdatedIndex(_ref){var currentIndex=_ref.currentIndex,maxIndex=_ref.maxIndex,actionType=_ref.actionType;var pageSize=10;switch(actionType){case SelectActions.First:return 0;case SelectActions.Last:return maxIndex;case SelectActions.Previous:return Math.max(0,currentIndex-1);case SelectActions.Next:return Math.min(maxIndex,currentIndex+1);case SelectActions.PageUp:return Math.max(0,currentIndex-pageSize);case SelectActions.PageDown:return Math.min(maxIndex,currentIndex+pageSize);default:return currentIndex;}}function isElementVisibleOnScreen(element){var bounding=element.getBoundingClientRect();return bounding.top>=0&&bounding.left>=0&&bounding.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&bounding.right<=(window.innerWidth||document.documentElement.clientWidth);}function isElementVisible(container,element){var containerRect=container.getBoundingClientRect();var elementRect=element.getBoundingClientRect();var isVerticalVisible=elementRect.top>=containerRect.top&&elementRect.bottom<=containerRect.bottom;return isVerticalVisible;}function isScrollable(element){return element&&element.clientHeight<element.scrollHeight;}var performAction=function performAction(action,payload,actions){var event=payload.event;switch(action){case SelectActions.Last:case SelectActions.First:actions.setIsOpen(true);case SelectActions.Next:case SelectActions.Previous:case SelectActions.PageUp:case SelectActions.PageDown:event.preventDefault();actions.onOptionChange(action);return true;case SelectActions.CloseSelect:event.preventDefault();actions.selectCurrentOption();return true;case SelectActions.Close:event.preventDefault();actions.close();return true;case SelectActions.Type:actions.onComboType(event.key,action);return true;case SelectActions.Open:event.preventDefault();actions.setIsOpen(true);return true;}return false;};var ensureScrollVisiblity=function ensureScrollVisiblity(newActiveIndex,containerElement,options){if(containerElement){if(isScrollable(containerElement)){var optionEl=containerElement.querySelectorAll('[role="option"], [role="menuitem"]');if(newActiveIndex>=0&&optionEl[newActiveIndex].dataset.value===options[newActiveIndex]){var activeElement=optionEl[newActiveIndex];if(!isElementVisible(containerElement,activeElement)){activeElement.scrollIntoView({inline:'nearest'});}if(!isElementVisibleOnScreen(optionEl[newActiveIndex])){activeElement.scrollIntoView({behavior:'smooth'});}}}}};var makeInputValue=function makeInputValue(selectedIndices,options){if(options.length===0){return '';}return selectedIndices.map(function(selectedIndex){var _options$selectedInde;return (_options$selectedInde=options[selectedIndex])==null?void 0:_options$selectedInde.value;}).join(', ');};var makeInputDisplayValue=function makeInputDisplayValue(selectedIndices,options){if(options.length===0||selectedIndices.length===0){return '';}if(selectedIndices.length===1){var _options$selectedIndi;return (_options$selectedIndi=options[selectedIndices[0]])==null?void 0:_options$selectedIndi.title;}return `${selectedIndices.length} items selected`;};
4
+ var SelectActions={Close:'Close',CloseSelect:'CloseSelect',First:'First',Last:'Last',Next:'Next',Open:'Open',PageDown:'PageDown',PageUp:'PageUp',Previous:'Previous',Select:'Select',Type:'Type'};function filterOptions(){var options=arguments.length>0&&arguments[0]!==undefined?arguments[0]:[];var filter=arguments.length>1?arguments[1]:undefined;var exclude=arguments.length>2&&arguments[2]!==undefined?arguments[2]:[];return options.filter(function(option){var matches=String(option).toLowerCase().startsWith(filter.toLowerCase());return matches&&!exclude.includes(option);});}function getActionFromKey(e,isOpen,dropdownTriggerer){if(!e){return undefined;}var altKey=e.altKey,ctrlKey=e.ctrlKey,metaKey=e.metaKey;var key='';if('key'in e){key=e.key;}var openKeys=['ArrowDown','ArrowUp','Enter',' '];if(!key)return undefined;if(!isOpen&&key&&openKeys.includes(key)){return SelectActions.Open;}if(key==='Home'){return SelectActions.First;}if(key==='End'){return SelectActions.Last;}if(key==='Backspace'||key==='Clear'||key.length===1&&key!==' '&&!altKey&&!ctrlKey&&!metaKey){return SelectActions.Type;}if(isOpen){if(key==='ArrowUp'&&altKey){return SelectActions.CloseSelect;}else if(key==='ArrowDown'&&!altKey){return SelectActions.Next;}else if(key==='ArrowUp'){return SelectActions.Previous;}else if(key==='PageUp'){return SelectActions.PageUp;}else if(key==='PageDown'){return SelectActions.PageDown;}else if(key==='Escape'){return SelectActions.Close;}else if(key==='Enter'||dropdownTriggerer!==dropdownComponentIds.triggers.AutoComplete&&dropdownTriggerer!==dropdownComponentIds.triggers.SearchInput&&key===' '){return SelectActions.CloseSelect;}}return undefined;}function getIndexByLetter(options,filter){var startIndex=arguments.length>2&&arguments[2]!==undefined?arguments[2]:0;var orderedOptions=[].concat(_toConsumableArray(options.slice(startIndex)),_toConsumableArray(options.slice(0,startIndex)));var firstMatch=filterOptions(orderedOptions,filter)[0];var allSameLetter=function allSameLetter(array){return array.every(function(letter){return letter===array[0];});};if(firstMatch){return options.indexOf(firstMatch);}else if(allSameLetter(filter.split(''))){var matches=filterOptions(orderedOptions,filter[0]);return options.indexOf(matches[0]);}else {return -1;}}function getUpdatedIndex(_ref){var currentIndex=_ref.currentIndex,maxIndex=_ref.maxIndex,actionType=_ref.actionType;var pageSize=10;switch(actionType){case SelectActions.First:return 0;case SelectActions.Last:return maxIndex;case SelectActions.Previous:return Math.max(0,currentIndex-1);case SelectActions.Next:return Math.min(maxIndex,currentIndex+1);case SelectActions.PageUp:return Math.max(0,currentIndex-pageSize);case SelectActions.PageDown:return Math.min(maxIndex,currentIndex+pageSize);default:return currentIndex;}}function isElementVisibleOnScreen(element){var bounding=element.getBoundingClientRect();return bounding.top>=0&&bounding.left>=0&&bounding.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&bounding.right<=(window.innerWidth||document.documentElement.clientWidth);}function isElementVisible(container,element){var containerRect=container.getBoundingClientRect();var elementRect=element.getBoundingClientRect();var isVerticalVisible=elementRect.top>=containerRect.top&&elementRect.bottom<=containerRect.bottom;return isVerticalVisible;}function isScrollable(element){return element&&element.clientHeight<element.scrollHeight;}var performAction=function performAction(action,payload,actions){var event=payload.event;switch(action){case SelectActions.Last:case SelectActions.First:actions.setIsOpen(true);case SelectActions.Next:case SelectActions.Previous:case SelectActions.PageUp:case SelectActions.PageDown:event.preventDefault();actions.onOptionChange(action);return true;case SelectActions.CloseSelect:event.preventDefault();actions.selectCurrentOption();return true;case SelectActions.Close:event.preventDefault();actions.close();return true;case SelectActions.Type:actions.onComboType(event.key,action);return true;case SelectActions.Open:event.preventDefault();actions.setIsOpen(true);return true;}return false;};var ensureScrollVisiblity=function ensureScrollVisiblity(newActiveIndex,containerElement,options){if(containerElement){if(isScrollable(containerElement)){var optionEl=containerElement.querySelectorAll('[role="option"], [role="menuitem"]');if(newActiveIndex>=0&&optionEl[newActiveIndex].dataset.value===options[newActiveIndex]){var activeElement=optionEl[newActiveIndex];if(!isElementVisible(containerElement,activeElement)){activeElement.scrollIntoView({inline:'nearest'});}if(!isElementVisibleOnScreen(optionEl[newActiveIndex])){activeElement.scrollIntoView({behavior:'smooth'});}}}}};var makeInputValue=function makeInputValue(selectedIndices,options){if(options.length===0){return '';}return selectedIndices.map(function(selectedIndex){var _options$selectedInde;return (_options$selectedInde=options[selectedIndex])==null?void 0:_options$selectedInde.value;}).join(', ');};var makeInputDisplayValue=function makeInputDisplayValue(selectedIndices,options){if(options.length===0||selectedIndices.length===0){return '';}if(selectedIndices.length===1){var _options$selectedIndi;return (_options$selectedIndi=options[selectedIndices[0]])==null?void 0:_options$selectedIndi.title;}return `${selectedIndices.length} items selected`;};
5
5
 
6
6
  export { ensureScrollVisiblity, filterOptions, getActionFromKey, getIndexByLetter, getUpdatedIndex, isElementVisibleOnScreen, isScrollable, makeInputDisplayValue, makeInputValue, performAction };
7
7
  //# sourceMappingURL=dropdownUtils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dropdownUtils.js","sources":["../../../../../src/components/Dropdown/dropdownUtils.ts"],"sourcesContent":["/*\n * This content is licensed according to the W3C Software License at\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n * This software or document includes material copied from or derived from\n * https://www.w3.org/WAI/ARIA/apg/example-index/combobox/combobox-select-only.html.\n * Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang)\n */\n\nimport type { DropdownContextType, OptionsType } from './useDropdown';\nimport { dropdownComponentIds } from './dropdownComponentIds';\nimport type { SpacingValueType } from '~components/Box/BaseBox';\n\nexport type SelectActionsType =\n | 'Close'\n | 'CloseSelect'\n | 'First'\n | 'Last'\n | 'Next'\n | 'Open'\n | 'PageDown'\n | 'PageUp'\n | 'Previous'\n | 'Select'\n | 'Type';\n\n// Save a list of named combobox actions, for future readability\nconst SelectActions: Record<SelectActionsType, SelectActionsType> = {\n Close: 'Close',\n CloseSelect: 'CloseSelect',\n First: 'First',\n Last: 'Last',\n Next: 'Next',\n Open: 'Open',\n PageDown: 'PageDown',\n PageUp: 'PageUp',\n Previous: 'Previous',\n Select: 'Select',\n Type: 'Type',\n};\n\n/**\n * Filter an array of options against an input string\n * returns an array of options that begin with the filter string, case-independent\n *\n */\nexport function filterOptions(\n options: string[] = [],\n filter: string,\n exclude: string[] = [],\n): string[] {\n return options.filter((option) => {\n const matches = option.toLowerCase().startsWith(filter.toLowerCase());\n return matches && !exclude.includes(option);\n });\n}\n\n/**\n * Map a keypress to action\n */\nexport function getActionFromKey(\n e: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>,\n isOpen: boolean,\n dropdownTriggerer: DropdownContextType['dropdownTriggerer'],\n): SelectActionsType | undefined {\n if (!e) {\n return undefined;\n }\n\n const { altKey, ctrlKey, metaKey } = e;\n let key = '';\n if ('key' in e) {\n key = e.key;\n }\n const openKeys = ['ArrowDown', 'ArrowUp', 'Enter', ' ']; // all keys that will do the default open action\n if (!key) return undefined;\n // handle opening when closed\n if (!isOpen && key && openKeys.includes(key)) {\n return SelectActions.Open;\n }\n\n // home and end move the selected option when open or closed\n if (key === 'Home') {\n return SelectActions.First;\n }\n if (key === 'End') {\n return SelectActions.Last;\n }\n\n // handle typing characters when open or closed\n if (\n key === 'Backspace' ||\n key === 'Clear' ||\n (key.length === 1 && key !== ' ' && !altKey && !ctrlKey && !metaKey)\n ) {\n return SelectActions.Type;\n }\n\n // handle keys when open\n if (isOpen) {\n if (key === 'ArrowUp' && altKey) {\n return SelectActions.CloseSelect;\n } else if (key === 'ArrowDown' && !altKey) {\n return SelectActions.Next;\n } else if (key === 'ArrowUp') {\n return SelectActions.Previous;\n } else if (key === 'PageUp') {\n return SelectActions.PageUp;\n } else if (key === 'PageDown') {\n return SelectActions.PageDown;\n } else if (key === 'Escape') {\n return SelectActions.Close;\n } else if (\n key === 'Enter' ||\n // we ignore the spacebar select in autocomplete since hitting spacebar might be expected while typing\n (dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete &&\n dropdownTriggerer !== dropdownComponentIds.triggers.SearchInput &&\n key === ' ')\n ) {\n return SelectActions.CloseSelect;\n }\n }\n\n return undefined;\n}\n\n/**\n * Return the index of an option from an array of options, based on a search string\n *\n * if the filter is multiple iterations of the same letter (e.g \"aaa\"), then cycle through first-letter matches\n **/\nexport function getIndexByLetter(options: string[], filter: string, startIndex = 0): number {\n const orderedOptions = [...options.slice(startIndex), ...options.slice(0, startIndex)];\n const firstMatch = filterOptions(orderedOptions, filter)[0];\n const allSameLetter = (array: string[]): boolean => array.every((letter) => letter === array[0]);\n\n // first check if there is an exact match for the typed string\n if (firstMatch) {\n return options.indexOf(firstMatch);\n }\n\n // if the same letter is being repeated, cycle through first-letter matches\n else if (allSameLetter(filter.split(''))) {\n const matches = filterOptions(orderedOptions, filter[0]);\n return options.indexOf(matches[0]);\n }\n\n // if no matches, return -1\n else {\n return -1;\n }\n}\n\n/**\n * This functions makes sure the optionsIndex is not going out of possible options\n */\nexport function getUpdatedIndex({\n currentIndex,\n maxIndex,\n actionType,\n}: {\n currentIndex: number;\n maxIndex: number;\n actionType: SelectActionsType;\n}): number {\n // On PageUP or PageDown, we jump focus by 10 items or to the first or last element\n // Details: https://www.w3.org/WAI/ARIA/apg/example-index/combobox/combobox-select-only.html#:~:text=PageUp,to%20last%20option).\n const pageSize = 10;\n\n switch (actionType) {\n case SelectActions.First:\n return 0;\n case SelectActions.Last:\n return maxIndex;\n case SelectActions.Previous:\n return Math.max(0, currentIndex - 1);\n case SelectActions.Next:\n return Math.min(maxIndex, currentIndex + 1);\n case SelectActions.PageUp:\n return Math.max(0, currentIndex - pageSize);\n case SelectActions.PageDown:\n return Math.min(maxIndex, currentIndex + pageSize);\n default:\n return currentIndex;\n }\n}\n\n/**\n * Checks if the given HTML element is visible on screen\n */\nexport function isElementVisibleOnScreen(element: HTMLElement): boolean {\n const bounding = element.getBoundingClientRect();\n\n return (\n bounding.top >= 0 &&\n bounding.left >= 0 &&\n bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n bounding.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n}\n\n/**\n * Checks if element is visible inside the given container\n */\nfunction isElementVisible(container: HTMLElement, element: HTMLElement): boolean {\n const containerRect = container.getBoundingClientRect();\n const elementRect = element.getBoundingClientRect();\n\n const isVerticalVisible =\n elementRect.top >= containerRect.top && elementRect.bottom <= containerRect.bottom;\n\n return isVerticalVisible;\n}\n\n/**\n * Checks if the dropdown is scrollable\n */\nexport function isScrollable(element: HTMLElement): boolean {\n return element && element.clientHeight < element.scrollHeight;\n}\n\ntype ActionsType = {\n setIsOpen: DropdownContextType['setIsOpen'];\n close: DropdownContextType['close'];\n selectCurrentOption: () => void;\n onOptionChange: (action: SelectActionsType) => void;\n onComboType: (letter: string, action: SelectActionsType) => void;\n};\n/**\n * Performs the action when actionType is passed\n *\n * This function handles all the keydown actions.\n */\nexport const performAction = (\n action: SelectActionsType,\n payload: {\n event: React.KeyboardEvent<HTMLInputElement | HTMLButtonElement>;\n },\n actions: ActionsType,\n): boolean => {\n const { event } = payload;\n\n switch (action) {\n case SelectActions.Last:\n // @ts-expect-error: intentional fallthrough, ignoring the warning\n case SelectActions.First:\n actions.setIsOpen(true);\n // intentional fallthrough\n case SelectActions.Next:\n case SelectActions.Previous:\n case SelectActions.PageUp:\n case SelectActions.PageDown:\n event.preventDefault();\n actions.onOptionChange(action);\n return true;\n case SelectActions.CloseSelect:\n event.preventDefault();\n actions.selectCurrentOption();\n return true;\n case SelectActions.Close:\n event.preventDefault();\n actions.close();\n return true;\n case SelectActions.Type:\n actions.onComboType(event.key, action);\n return true;\n case SelectActions.Open:\n event.preventDefault();\n actions.setIsOpen(true);\n return true;\n\n default:\n break;\n }\n\n return false;\n};\n\n/**\n * When options list is large, it can have a scrollbar.\n *\n * This function ensures the active option is always in the viewport\n */\nexport const ensureScrollVisiblity = (\n newActiveIndex: number,\n containerElement: HTMLElement | null,\n options: string[],\n): void => {\n // ensure the new option is in view\n if (containerElement) {\n if (isScrollable(containerElement)) {\n const optionEl = containerElement.querySelectorAll<HTMLElement>(\n '[role=\"option\"], [role=\"menuitem\"]',\n );\n // Making sure its the same element as the one from options state\n if (\n newActiveIndex >= 0 &&\n optionEl[newActiveIndex].dataset.value === options[newActiveIndex]\n ) {\n const activeElement = optionEl[newActiveIndex];\n\n if (!isElementVisible(containerElement, activeElement)) {\n activeElement.scrollIntoView({ inline: 'nearest' });\n }\n\n if (!isElementVisibleOnScreen(optionEl[newActiveIndex])) {\n activeElement.scrollIntoView({ behavior: 'smooth' });\n }\n }\n }\n }\n};\n\n/**\n * value that is set in the actual form input\n */\nexport const makeInputValue = (selectedIndices: number[], options: OptionsType): string => {\n if (options.length === 0) {\n return '';\n }\n return selectedIndices.map((selectedIndex) => options[selectedIndex]?.value).join(', ');\n};\n\n/**\n * Value that is displayed inside the select field\n */\nexport const makeInputDisplayValue = (selectedIndices: number[], options: OptionsType): string => {\n // When no item is selected or no item is present\n if (options.length === 0 || selectedIndices.length === 0) {\n return '';\n }\n\n // When one item is selected, we display that item's title in input\n if (selectedIndices.length === 1) {\n return options[selectedIndices[0]]?.title;\n }\n\n // When more than one item is selected, we display the count of items\n return `${selectedIndices.length} items selected`;\n};\n\nexport type DropdownPosition = {\n top?: SpacingValueType;\n bottom?: SpacingValueType;\n left?: SpacingValueType;\n right?: SpacingValueType;\n};\n"],"names":["SelectActions","Close","CloseSelect","First","Last","Next","Open","PageDown","PageUp","Previous","Select","Type","filterOptions","options","arguments","length","undefined","filter","exclude","option","matches","toLowerCase","startsWith","includes","getActionFromKey","e","isOpen","dropdownTriggerer","altKey","ctrlKey","metaKey","key","openKeys","dropdownComponentIds","triggers","AutoComplete","SearchInput","getIndexByLetter","startIndex","orderedOptions","concat","_toConsumableArray","slice","firstMatch","allSameLetter","array","every","letter","indexOf","split","getUpdatedIndex","_ref","currentIndex","maxIndex","actionType","pageSize","Math","max","min","isElementVisibleOnScreen","element","bounding","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","isElementVisible","container","containerRect","elementRect","isVerticalVisible","isScrollable","scrollHeight","performAction","action","payload","actions","event","setIsOpen","preventDefault","onOptionChange","selectCurrentOption","close","onComboType","ensureScrollVisiblity","newActiveIndex","containerElement","optionEl","querySelectorAll","dataset","value","activeElement","scrollIntoView","inline","behavior","makeInputValue","selectedIndices","map","selectedIndex","_options$selectedInde","join","makeInputDisplayValue","_options$selectedIndi","title"],"mappings":"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"}
1
+ {"version":3,"file":"dropdownUtils.js","sources":["../../../../../src/components/Dropdown/dropdownUtils.ts"],"sourcesContent":["/*\n * This content is licensed according to the W3C Software License at\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n * This software or document includes material copied from or derived from\n * https://www.w3.org/WAI/ARIA/apg/example-index/combobox/combobox-select-only.html.\n * Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang)\n */\n\nimport type { DropdownContextType, OptionsType } from './useDropdown';\nimport { dropdownComponentIds } from './dropdownComponentIds';\nimport type { SpacingValueType } from '~components/Box/BaseBox';\n\nexport type SelectActionsType =\n | 'Close'\n | 'CloseSelect'\n | 'First'\n | 'Last'\n | 'Next'\n | 'Open'\n | 'PageDown'\n | 'PageUp'\n | 'Previous'\n | 'Select'\n | 'Type';\n\n// Save a list of named combobox actions, for future readability\nconst SelectActions: Record<SelectActionsType, SelectActionsType> = {\n Close: 'Close',\n CloseSelect: 'CloseSelect',\n First: 'First',\n Last: 'Last',\n Next: 'Next',\n Open: 'Open',\n PageDown: 'PageDown',\n PageUp: 'PageUp',\n Previous: 'Previous',\n Select: 'Select',\n Type: 'Type',\n};\n\n/**\n * Filter an array of options against an input string\n * returns an array of options that begin with the filter string, case-independent\n *\n */\nexport function filterOptions(\n options: string[] = [],\n filter: string,\n exclude: string[] = [],\n): string[] {\n return options.filter((option) => {\n const matches = String(option).toLowerCase().startsWith(filter.toLowerCase());\n return matches && !exclude.includes(option);\n });\n}\n\n/**\n * Map a keypress to action\n */\nexport function getActionFromKey(\n e: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>,\n isOpen: boolean,\n dropdownTriggerer: DropdownContextType['dropdownTriggerer'],\n): SelectActionsType | undefined {\n if (!e) {\n return undefined;\n }\n\n const { altKey, ctrlKey, metaKey } = e;\n let key = '';\n if ('key' in e) {\n key = e.key;\n }\n const openKeys = ['ArrowDown', 'ArrowUp', 'Enter', ' ']; // all keys that will do the default open action\n if (!key) return undefined;\n // handle opening when closed\n if (!isOpen && key && openKeys.includes(key)) {\n return SelectActions.Open;\n }\n\n // home and end move the selected option when open or closed\n if (key === 'Home') {\n return SelectActions.First;\n }\n if (key === 'End') {\n return SelectActions.Last;\n }\n\n // handle typing characters when open or closed\n if (\n key === 'Backspace' ||\n key === 'Clear' ||\n (key.length === 1 && key !== ' ' && !altKey && !ctrlKey && !metaKey)\n ) {\n return SelectActions.Type;\n }\n\n // handle keys when open\n if (isOpen) {\n if (key === 'ArrowUp' && altKey) {\n return SelectActions.CloseSelect;\n } else if (key === 'ArrowDown' && !altKey) {\n return SelectActions.Next;\n } else if (key === 'ArrowUp') {\n return SelectActions.Previous;\n } else if (key === 'PageUp') {\n return SelectActions.PageUp;\n } else if (key === 'PageDown') {\n return SelectActions.PageDown;\n } else if (key === 'Escape') {\n return SelectActions.Close;\n } else if (\n key === 'Enter' ||\n // we ignore the spacebar select in autocomplete since hitting spacebar might be expected while typing\n (dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete &&\n dropdownTriggerer !== dropdownComponentIds.triggers.SearchInput &&\n key === ' ')\n ) {\n return SelectActions.CloseSelect;\n }\n }\n\n return undefined;\n}\n\n/**\n * Return the index of an option from an array of options, based on a search string\n *\n * if the filter is multiple iterations of the same letter (e.g \"aaa\"), then cycle through first-letter matches\n **/\nexport function getIndexByLetter(options: string[], filter: string, startIndex = 0): number {\n const orderedOptions = [...options.slice(startIndex), ...options.slice(0, startIndex)];\n const firstMatch = filterOptions(orderedOptions, filter)[0];\n const allSameLetter = (array: string[]): boolean => array.every((letter) => letter === array[0]);\n\n // first check if there is an exact match for the typed string\n if (firstMatch) {\n return options.indexOf(firstMatch);\n }\n\n // if the same letter is being repeated, cycle through first-letter matches\n else if (allSameLetter(filter.split(''))) {\n const matches = filterOptions(orderedOptions, filter[0]);\n return options.indexOf(matches[0]);\n }\n\n // if no matches, return -1\n else {\n return -1;\n }\n}\n\n/**\n * This functions makes sure the optionsIndex is not going out of possible options\n */\nexport function getUpdatedIndex({\n currentIndex,\n maxIndex,\n actionType,\n}: {\n currentIndex: number;\n maxIndex: number;\n actionType: SelectActionsType;\n}): number {\n // On PageUP or PageDown, we jump focus by 10 items or to the first or last element\n // Details: https://www.w3.org/WAI/ARIA/apg/example-index/combobox/combobox-select-only.html#:~:text=PageUp,to%20last%20option).\n const pageSize = 10;\n\n switch (actionType) {\n case SelectActions.First:\n return 0;\n case SelectActions.Last:\n return maxIndex;\n case SelectActions.Previous:\n return Math.max(0, currentIndex - 1);\n case SelectActions.Next:\n return Math.min(maxIndex, currentIndex + 1);\n case SelectActions.PageUp:\n return Math.max(0, currentIndex - pageSize);\n case SelectActions.PageDown:\n return Math.min(maxIndex, currentIndex + pageSize);\n default:\n return currentIndex;\n }\n}\n\n/**\n * Checks if the given HTML element is visible on screen\n */\nexport function isElementVisibleOnScreen(element: HTMLElement): boolean {\n const bounding = element.getBoundingClientRect();\n\n return (\n bounding.top >= 0 &&\n bounding.left >= 0 &&\n bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n bounding.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n}\n\n/**\n * Checks if element is visible inside the given container\n */\nfunction isElementVisible(container: HTMLElement, element: HTMLElement): boolean {\n const containerRect = container.getBoundingClientRect();\n const elementRect = element.getBoundingClientRect();\n\n const isVerticalVisible =\n elementRect.top >= containerRect.top && elementRect.bottom <= containerRect.bottom;\n\n return isVerticalVisible;\n}\n\n/**\n * Checks if the dropdown is scrollable\n */\nexport function isScrollable(element: HTMLElement): boolean {\n return element && element.clientHeight < element.scrollHeight;\n}\n\ntype ActionsType = {\n setIsOpen: DropdownContextType['setIsOpen'];\n close: DropdownContextType['close'];\n selectCurrentOption: () => void;\n onOptionChange: (action: SelectActionsType) => void;\n onComboType: (letter: string, action: SelectActionsType) => void;\n};\n/**\n * Performs the action when actionType is passed\n *\n * This function handles all the keydown actions.\n */\nexport const performAction = (\n action: SelectActionsType,\n payload: {\n event: React.KeyboardEvent<HTMLInputElement | HTMLButtonElement>;\n },\n actions: ActionsType,\n): boolean => {\n const { event } = payload;\n\n switch (action) {\n case SelectActions.Last:\n // @ts-expect-error: intentional fallthrough, ignoring the warning\n case SelectActions.First:\n actions.setIsOpen(true);\n // intentional fallthrough\n case SelectActions.Next:\n case SelectActions.Previous:\n case SelectActions.PageUp:\n case SelectActions.PageDown:\n event.preventDefault();\n actions.onOptionChange(action);\n return true;\n case SelectActions.CloseSelect:\n event.preventDefault();\n actions.selectCurrentOption();\n return true;\n case SelectActions.Close:\n event.preventDefault();\n actions.close();\n return true;\n case SelectActions.Type:\n actions.onComboType(event.key, action);\n return true;\n case SelectActions.Open:\n event.preventDefault();\n actions.setIsOpen(true);\n return true;\n\n default:\n break;\n }\n\n return false;\n};\n\n/**\n * When options list is large, it can have a scrollbar.\n *\n * This function ensures the active option is always in the viewport\n */\nexport const ensureScrollVisiblity = (\n newActiveIndex: number,\n containerElement: HTMLElement | null,\n options: string[],\n): void => {\n // ensure the new option is in view\n if (containerElement) {\n if (isScrollable(containerElement)) {\n const optionEl = containerElement.querySelectorAll<HTMLElement>(\n '[role=\"option\"], [role=\"menuitem\"]',\n );\n // Making sure its the same element as the one from options state\n if (\n newActiveIndex >= 0 &&\n optionEl[newActiveIndex].dataset.value === options[newActiveIndex]\n ) {\n const activeElement = optionEl[newActiveIndex];\n\n if (!isElementVisible(containerElement, activeElement)) {\n activeElement.scrollIntoView({ inline: 'nearest' });\n }\n\n if (!isElementVisibleOnScreen(optionEl[newActiveIndex])) {\n activeElement.scrollIntoView({ behavior: 'smooth' });\n }\n }\n }\n }\n};\n\n/**\n * value that is set in the actual form input\n */\nexport const makeInputValue = (selectedIndices: number[], options: OptionsType): string => {\n if (options.length === 0) {\n return '';\n }\n return selectedIndices.map((selectedIndex) => options[selectedIndex]?.value).join(', ');\n};\n\n/**\n * Value that is displayed inside the select field\n */\nexport const makeInputDisplayValue = (selectedIndices: number[], options: OptionsType): string => {\n // When no item is selected or no item is present\n if (options.length === 0 || selectedIndices.length === 0) {\n return '';\n }\n\n // When one item is selected, we display that item's title in input\n if (selectedIndices.length === 1) {\n return options[selectedIndices[0]]?.title;\n }\n\n // When more than one item is selected, we display the count of items\n return `${selectedIndices.length} items selected`;\n};\n\nexport type DropdownPosition = {\n top?: SpacingValueType;\n bottom?: SpacingValueType;\n left?: SpacingValueType;\n right?: SpacingValueType;\n};\n"],"names":["SelectActions","Close","CloseSelect","First","Last","Next","Open","PageDown","PageUp","Previous","Select","Type","filterOptions","options","arguments","length","undefined","filter","exclude","option","matches","String","toLowerCase","startsWith","includes","getActionFromKey","e","isOpen","dropdownTriggerer","altKey","ctrlKey","metaKey","key","openKeys","dropdownComponentIds","triggers","AutoComplete","SearchInput","getIndexByLetter","startIndex","orderedOptions","concat","_toConsumableArray","slice","firstMatch","allSameLetter","array","every","letter","indexOf","split","getUpdatedIndex","_ref","currentIndex","maxIndex","actionType","pageSize","Math","max","min","isElementVisibleOnScreen","element","bounding","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","isElementVisible","container","containerRect","elementRect","isVerticalVisible","isScrollable","scrollHeight","performAction","action","payload","actions","event","setIsOpen","preventDefault","onOptionChange","selectCurrentOption","close","onComboType","ensureScrollVisiblity","newActiveIndex","containerElement","optionEl","querySelectorAll","dataset","value","activeElement","scrollIntoView","inline","behavior","makeInputValue","selectedIndices","map","selectedIndex","_options$selectedInde","join","makeInputDisplayValue","_options$selectedIndi","title"],"mappings":"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"}
@@ -10,7 +10,7 @@ import { isReactNative } from '../../../utils/platform/isReactNative.js';
10
10
  import '../../BladeProvider/useTheme.js';
11
11
  import { jsx } from 'react/jsx-runtime';
12
12
 
13
- var useAutoComplete=function useAutoComplete(_ref){var props=_ref.props,inputValue=_ref.inputValue,setInputValue=_ref.setInputValue,getOptionValues=_ref.getOptionValues;var _useDropdown=useDropdown(),onBaseDropdownInputKeydown=_useDropdown.onTriggerKeydown,isOpen=_useDropdown.isOpen,setIsOpen=_useDropdown.setIsOpen,selectedIndices=_useDropdown.selectedIndices,setSelectedIndices=_useDropdown.setSelectedIndices,setControlledValueIndices=_useDropdown.setControlledValueIndices,isControlled=_useDropdown.isControlled,options=_useDropdown.options,setGlobalFilteredValues=_useDropdown.setFilteredValues,activeTagIndex=_useDropdown.activeTagIndex,setActiveTagIndex=_useDropdown.setActiveTagIndex,setActiveIndex=_useDropdown.setActiveIndex,globalFilteredValues=_useDropdown.filteredValues,selectionType=_useDropdown.selectionType,triggererRef=_useDropdown.triggererRef,hasAutoCompleteInHeader=_useDropdown.hasAutoCompleteInHeader;var resetFilters=function resetFilters(){return setGlobalFilteredValues(getOptionValues());};React__default.useEffect(function(){var firstItemOptionIndex=options.findIndex(function(option){return option.value===globalFilteredValues[0];});if(firstItemOptionIndex>=0){setActiveIndex(firstItemOptionIndex);}},[globalFilteredValues.length,options.length]);React__default.useEffect(function(){if(isOpen&&!inputValue){resetFilters();}},[isOpen,options]);React__default.useEffect(function(){if(isOpen&&selectionType==='single'){resetFilters();}if(hasAutoCompleteInHeader&&isOpen&&!isReactNative()){var _triggererRef$current;(_triggererRef$current=triggererRef.current)==null?void 0:_triggererRef$current.focus();}},[isOpen]);var onInputValueChange=function onInputValueChange(_ref2){var name=_ref2.name,value=_ref2.value;setInputValue(value!=null?value:'');props.onInputValueChange==null?void 0:props.onInputValueChange({name:name,value:value});setActiveTagIndex(-1);if(!isOpen){setIsOpen(true);}if(!props.filteredValues){if(value&&options&&options.length>0){var filteredOptions=getOptionValues().filter(function(optionValue){return optionValue.toLowerCase().includes(value.toLowerCase());});setGlobalFilteredValues(filteredOptions);}else {resetFilters();}}};var onTriggerKeydown=function onTriggerKeydown(e){if(e.key==='Backspace'&&!inputValue&&activeTagIndex<0&&selectedIndices.length>0){if(isControlled){setControlledValueIndices(selectedIndices.slice(0,-1));}else {setSelectedIndices(selectedIndices.slice(0,-1));}}onBaseDropdownInputKeydown==null?void 0:onBaseDropdownInputKeydown(e);};var onSelectionChange=function onSelectionChange(_ref3){var values=_ref3.values;console.log('selection change',values);if(selectionType==='multiple'){setInputValue('');props.onInputValueChange==null?void 0:props.onInputValueChange({name:props.name,value:''});setActiveTagIndex(-1);resetFilters();}else {var _options$find;var displayText=(_options$find=options.find(function(option){return option.value===values[0];}))==null?void 0:_options$find.title;props.onInputValueChange==null?void 0:props.onInputValueChange({name:props.name,value:displayText});if(hasAutoCompleteInHeader){setInputValue('');}else if(typeof props.value==='undefined'){setInputValue(displayText!=null?displayText:'');}}props.onChange==null?void 0:props.onChange({name:props.name,values:values});};return {onSelectionChange:onSelectionChange,onTriggerKeydown:onTriggerKeydown,onInputValueChange:onInputValueChange};};var _AutoComplete=function _AutoComplete(props,ref){var _props$inputValue,_props$autoFocus;var _React$useState=React__default.useState(''),_React$useState2=_slicedToArray(_React$useState,2),uncontrolledInputValue=_React$useState2[0],setInputValue=_React$useState2[1];var inputValue=(_props$inputValue=props.inputValue)!=null?_props$inputValue:uncontrolledInputValue;var _useDropdown2=useDropdown(),options=_useDropdown2.options,setGlobalFilteredValues=_useDropdown2.setFilteredValues,hasAutoCompleteInHeader=_useDropdown2.hasAutoCompleteInHeader,setHasAutoCompleteInHeader=_useDropdown2.setHasAutoCompleteInHeader,_onTriggerClick=_useDropdown2.onTriggerClick,dropdownTriggerer=_useDropdown2.dropdownTriggerer;var getOptionValues=React__default.useCallback(function(){return options.map(function(option){return option.value;});},[options]);var _useAutoComplete=useAutoComplete({props:props,inputValue:inputValue,setInputValue:setInputValue,getOptionValues:getOptionValues}),onSelectionChange=_useAutoComplete.onSelectionChange,onTriggerKeydown=_useAutoComplete.onTriggerKeydown,onInputValueChange=_useAutoComplete.onInputValueChange;React__default.useEffect(function(){if(dropdownTriggerer!==dropdownComponentIds.triggers.AutoComplete){setHasAutoCompleteInHeader(true);}},[]);React__default.useEffect(function(){if(props.filteredValues){setGlobalFilteredValues(props.filteredValues);}},[props.filteredValues,setGlobalFilteredValues]);var defaultAutoFocusState=hasAutoCompleteInHeader?true:undefined;return jsx(BaseBox,{position:"relative",children:jsx(BaseDropdownInputTrigger,Object.assign({},props,{autoFocus:(_props$autoFocus=props.autoFocus)!=null?_props$autoFocus:defaultAutoFocusState,ref:ref,onChange:onSelectionChange,isSelectInput:false,inputValue:inputValue,syncInputValueWithSelection:function syncInputValueWithSelection(value){var _selectedOption$title;if(!value){setInputValue('');return;}var selectedOption=options.find(function(option){return option.value===value;});setInputValue((_selectedOption$title=selectedOption==null?void 0:selectedOption.title)!=null?_selectedOption$title:'');},onTriggerKeydown:onTriggerKeydown,onInputValueChange:onInputValueChange,onTriggerClick:function onTriggerClick(triggerEvent){if(!hasAutoCompleteInHeader){_onTriggerClick();}props==null?void 0:props.onClick==null?void 0:props.onClick(triggerEvent);}}))});};var AutoComplete=assignWithoutSideEffects(React__default.forwardRef(_AutoComplete),{componentId:dropdownComponentIds.triggers.AutoComplete});
13
+ var useAutoComplete=function useAutoComplete(_ref){var props=_ref.props,inputValue=_ref.inputValue,setInputValue=_ref.setInputValue,getOptionValues=_ref.getOptionValues;var _useDropdown=useDropdown(),onBaseDropdownInputKeydown=_useDropdown.onTriggerKeydown,isOpen=_useDropdown.isOpen,setIsOpen=_useDropdown.setIsOpen,selectedIndices=_useDropdown.selectedIndices,setSelectedIndices=_useDropdown.setSelectedIndices,setControlledValueIndices=_useDropdown.setControlledValueIndices,isControlled=_useDropdown.isControlled,options=_useDropdown.options,setGlobalFilteredValues=_useDropdown.setFilteredValues,activeTagIndex=_useDropdown.activeTagIndex,setActiveTagIndex=_useDropdown.setActiveTagIndex,setActiveIndex=_useDropdown.setActiveIndex,globalFilteredValues=_useDropdown.filteredValues,selectionType=_useDropdown.selectionType,triggererRef=_useDropdown.triggererRef,hasAutoCompleteInHeader=_useDropdown.hasAutoCompleteInHeader;var resetFilters=function resetFilters(){return setGlobalFilteredValues(getOptionValues());};React__default.useEffect(function(){var firstItemOptionIndex=options.findIndex(function(option){return option.value===globalFilteredValues[0];});if(firstItemOptionIndex>=0){setActiveIndex(firstItemOptionIndex);}},[globalFilteredValues.length,options.length]);React__default.useEffect(function(){if(isOpen&&!inputValue){resetFilters();}},[isOpen,options]);React__default.useEffect(function(){if(isOpen&&selectionType==='single'){resetFilters();}if(hasAutoCompleteInHeader&&isOpen&&!isReactNative()){var _triggererRef$current;(_triggererRef$current=triggererRef.current)==null?void 0:_triggererRef$current.focus();}},[isOpen]);var onInputValueChange=function onInputValueChange(_ref2){var name=_ref2.name,value=_ref2.value;setInputValue(value!=null?value:'');props.onInputValueChange==null?void 0:props.onInputValueChange({name:name,value:value});setActiveTagIndex(-1);if(!isOpen){setIsOpen(true);}if(!props.filteredValues){if(value&&options&&options.length>0){var filteredOptions=getOptionValues().filter(function(optionValue){return String(optionValue).toLowerCase().includes(value.toLowerCase());});setGlobalFilteredValues(filteredOptions);}else {resetFilters();}}};var onTriggerKeydown=function onTriggerKeydown(e){if(e.key==='Backspace'&&!inputValue&&activeTagIndex<0&&selectedIndices.length>0){if(isControlled){setControlledValueIndices(selectedIndices.slice(0,-1));}else {setSelectedIndices(selectedIndices.slice(0,-1));}}onBaseDropdownInputKeydown==null?void 0:onBaseDropdownInputKeydown(e);};var onSelectionChange=function onSelectionChange(_ref3){var values=_ref3.values;console.log('selection change',values);if(selectionType==='multiple'){setInputValue('');props.onInputValueChange==null?void 0:props.onInputValueChange({name:props.name,value:''});setActiveTagIndex(-1);resetFilters();}else {var _options$find;var displayText=(_options$find=options.find(function(option){return option.value===values[0];}))==null?void 0:_options$find.title;props.onInputValueChange==null?void 0:props.onInputValueChange({name:props.name,value:displayText});if(hasAutoCompleteInHeader){setInputValue('');}else if(typeof props.value==='undefined'){setInputValue(displayText!=null?displayText:'');}}props.onChange==null?void 0:props.onChange({name:props.name,values:values});};return {onSelectionChange:onSelectionChange,onTriggerKeydown:onTriggerKeydown,onInputValueChange:onInputValueChange};};var _AutoComplete=function _AutoComplete(props,ref){var _props$inputValue,_props$autoFocus;var _React$useState=React__default.useState(''),_React$useState2=_slicedToArray(_React$useState,2),uncontrolledInputValue=_React$useState2[0],setInputValue=_React$useState2[1];var inputValue=(_props$inputValue=props.inputValue)!=null?_props$inputValue:uncontrolledInputValue;var _useDropdown2=useDropdown(),options=_useDropdown2.options,setGlobalFilteredValues=_useDropdown2.setFilteredValues,hasAutoCompleteInHeader=_useDropdown2.hasAutoCompleteInHeader,setHasAutoCompleteInHeader=_useDropdown2.setHasAutoCompleteInHeader,_onTriggerClick=_useDropdown2.onTriggerClick,dropdownTriggerer=_useDropdown2.dropdownTriggerer;var getOptionValues=React__default.useCallback(function(){return options.map(function(option){return option.value;});},[options]);var _useAutoComplete=useAutoComplete({props:props,inputValue:inputValue,setInputValue:setInputValue,getOptionValues:getOptionValues}),onSelectionChange=_useAutoComplete.onSelectionChange,onTriggerKeydown=_useAutoComplete.onTriggerKeydown,onInputValueChange=_useAutoComplete.onInputValueChange;React__default.useEffect(function(){if(dropdownTriggerer!==dropdownComponentIds.triggers.AutoComplete){setHasAutoCompleteInHeader(true);}},[]);React__default.useEffect(function(){if(props.filteredValues){setGlobalFilteredValues(props.filteredValues);}},[props.filteredValues,setGlobalFilteredValues]);var defaultAutoFocusState=hasAutoCompleteInHeader?true:undefined;return jsx(BaseBox,{position:"relative",children:jsx(BaseDropdownInputTrigger,Object.assign({},props,{autoFocus:(_props$autoFocus=props.autoFocus)!=null?_props$autoFocus:defaultAutoFocusState,ref:ref,onChange:onSelectionChange,isSelectInput:false,inputValue:inputValue,syncInputValueWithSelection:function syncInputValueWithSelection(value){var _selectedOption$title;if(!value){setInputValue('');return;}var selectedOption=options.find(function(option){return option.value===value;});setInputValue((_selectedOption$title=selectedOption==null?void 0:selectedOption.title)!=null?_selectedOption$title:'');},onTriggerKeydown:onTriggerKeydown,onInputValueChange:onInputValueChange,onTriggerClick:function onTriggerClick(triggerEvent){if(!hasAutoCompleteInHeader){_onTriggerClick();}props==null?void 0:props.onClick==null?void 0:props.onClick(triggerEvent);}}))});};var AutoComplete=assignWithoutSideEffects(React__default.forwardRef(_AutoComplete),{componentId:dropdownComponentIds.triggers.AutoComplete});
14
14
 
15
15
  export { AutoComplete };
16
16
  //# sourceMappingURL=AutoComplete.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AutoComplete.js","sources":["../../../../../../src/components/Input/DropdownInputTriggers/AutoComplete.tsx"],"sourcesContent":["import React from 'react';\nimport { useDropdown } from '../../Dropdown/useDropdown';\nimport type { AutoCompleteProps, BaseDropdownInputTriggerProps } from './types';\nimport { BaseDropdownInputTrigger } from './BaseDropdownInputTrigger';\nimport { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';\nimport BaseBox from '~components/Box/BaseBox';\nimport type { BladeElementRef } from '~utils/types';\nimport { dropdownComponentIds } from '~components/Dropdown/dropdownComponentIds';\nimport { isReactNative } from '~utils';\n\nconst useAutoComplete = ({\n props,\n inputValue,\n setInputValue,\n getOptionValues,\n}: {\n props: AutoCompleteProps;\n setInputValue: (inputValue: string) => void;\n inputValue: string;\n getOptionValues: () => string[];\n}): {\n onTriggerKeydown: BaseDropdownInputTriggerProps['onTriggerKeydown'];\n onSelectionChange: BaseDropdownInputTriggerProps['onChange'];\n onInputValueChange: BaseDropdownInputTriggerProps['onInputValueChange'];\n} => {\n const {\n onTriggerKeydown: onBaseDropdownInputKeydown,\n isOpen,\n setIsOpen,\n selectedIndices,\n setSelectedIndices,\n setControlledValueIndices,\n isControlled,\n options,\n setFilteredValues: setGlobalFilteredValues,\n activeTagIndex,\n setActiveTagIndex,\n setActiveIndex,\n filteredValues: globalFilteredValues,\n selectionType,\n triggererRef,\n hasAutoCompleteInHeader,\n } = useDropdown();\n\n const resetFilters = (): void => setGlobalFilteredValues(getOptionValues());\n\n // Makes sure that first item is always in focus\n React.useEffect((): void => {\n const firstItemOptionIndex = options.findIndex(\n (option) => option.value === globalFilteredValues[0],\n );\n\n if (firstItemOptionIndex >= 0) {\n setActiveIndex(firstItemOptionIndex);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [globalFilteredValues.length, options.length]);\n\n // When input is empty or its single select, we want all items to be shown in filter on open of dropdown\n React.useEffect(() => {\n if (isOpen && !inputValue) {\n resetFilters();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen, options]);\n\n React.useEffect(() => {\n if (isOpen && selectionType === 'single') {\n resetFilters();\n }\n\n // Just setting autoFocus is setting the input in focus state but its not showing keyboard active.\n // We do this in web to get around that\n if (hasAutoCompleteInHeader && isOpen && !isReactNative()) {\n triggererRef.current?.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n const onInputValueChange: BaseDropdownInputTriggerProps['onInputValueChange'] = ({\n name,\n value,\n }) => {\n setInputValue(value ?? '');\n props.onInputValueChange?.({ name, value });\n setActiveTagIndex(-1);\n\n if (!isOpen) {\n setIsOpen(true);\n }\n\n // default filtering when filteredValues is uncontrolled\n if (!props.filteredValues) {\n // eslint-disable-next-line no-lonely-if\n if (value && options && options.length > 0) {\n const filteredOptions = getOptionValues().filter((optionValue) =>\n optionValue.toLowerCase().includes(value.toLowerCase()),\n );\n setGlobalFilteredValues(filteredOptions);\n } else {\n resetFilters();\n }\n }\n };\n\n const onTriggerKeydown: BaseDropdownInputTriggerProps['onTriggerKeydown'] = (e) => {\n // Pressing backspace on empty input should remove the last tag\n if (e.key === 'Backspace' && !inputValue && activeTagIndex < 0 && selectedIndices.length > 0) {\n if (isControlled) {\n setControlledValueIndices(selectedIndices.slice(0, -1));\n } else {\n setSelectedIndices(selectedIndices.slice(0, -1));\n }\n }\n onBaseDropdownInputKeydown?.(e);\n };\n\n const onSelectionChange: BaseDropdownInputTriggerProps['onChange'] = ({ values }) => {\n console.log('selection change', values);\n if (selectionType === 'multiple') {\n setInputValue('');\n props.onInputValueChange?.({ name: props.name, value: '' });\n setActiveTagIndex(-1);\n resetFilters();\n } else {\n const displayText = options.find((option) => option.value === values[0])?.title;\n props.onInputValueChange?.({\n name: props.name,\n value: displayText,\n });\n // Use displayText as inputValue only if its not controlled by user\n if (hasAutoCompleteInHeader) {\n setInputValue('');\n } else if (typeof props.value === 'undefined') {\n setInputValue(displayText ?? '');\n }\n }\n props.onChange?.({ name: props.name, values });\n };\n return {\n onSelectionChange,\n onTriggerKeydown,\n onInputValueChange,\n };\n};\n\nconst _AutoComplete = (\n props: AutoCompleteProps,\n ref: React.ForwardedRef<BladeElementRef>,\n): React.ReactElement => {\n const [uncontrolledInputValue, setInputValue] = React.useState('');\n const inputValue = props.inputValue ?? uncontrolledInputValue;\n\n const {\n options,\n setFilteredValues: setGlobalFilteredValues,\n hasAutoCompleteInHeader,\n setHasAutoCompleteInHeader,\n onTriggerClick,\n dropdownTriggerer,\n } = useDropdown();\n\n const getOptionValues = React.useCallback(() => {\n return options.map((option) => option.value);\n }, [options]);\n\n const { onSelectionChange, onTriggerKeydown, onInputValueChange } = useAutoComplete({\n props,\n inputValue,\n setInputValue,\n getOptionValues,\n });\n\n React.useEffect(() => {\n if (dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete) {\n // When AutoComplete is mounted but not as trigger,\n // it has to be somewhere in the BottomSheet (most likely header based on UI but works in other parts too)\n setHasAutoCompleteInHeader(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // handles controlled filteredValues state (syncs it with our global filteredValues)\n React.useEffect(() => {\n if (props.filteredValues) {\n setGlobalFilteredValues(props.filteredValues);\n }\n }, [props.filteredValues, setGlobalFilteredValues]);\n\n // set autoFocus to true when used inside bottomsheet\n const defaultAutoFocusState = hasAutoCompleteInHeader ? true : undefined;\n\n return (\n <BaseBox position=\"relative\">\n <BaseDropdownInputTrigger\n {...props}\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={props.autoFocus ?? defaultAutoFocusState}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref={ref as any}\n onChange={onSelectionChange}\n isSelectInput={false}\n inputValue={inputValue}\n syncInputValueWithSelection={(value) => {\n if (!value) {\n setInputValue('');\n return;\n }\n const selectedOption = options.find((option) => option.value === value);\n setInputValue(selectedOption?.title ?? '');\n }}\n onTriggerKeydown={onTriggerKeydown}\n onInputValueChange={onInputValueChange}\n onTriggerClick={(triggerEvent) => {\n if (!hasAutoCompleteInHeader) {\n // we don't want clicking on autocomplete to open / close Dropdown when it is used inside BottomSheet's header\n onTriggerClick();\n }\n props?.onClick?.(triggerEvent);\n }}\n />\n </BaseBox>\n );\n};\n\n/**\n * ### AutoComplete\n *\n * Extension on top of SelectInput which allows you type and filter between ActionList items\n *\n * To be used in combination of `Dropdown` and `ActionList` component\n *\n * ---\n *\n * #### Usage in Desktop\n *\n * ```diff\n * <Dropdown>\n * + <AutoComplete label=\"Select Fruits\" />\n * <DropdownOverlay>\n * <ActionList>\n * <ActionListItem title=\"Mango\" value=\"mango\" />\n * <ActionListItem title=\"Apple\" value=\"apple\" />\n * </ActionList>\n * </DropdownOverlay>\n * </Dropdown>\n * ```\n *\n * #### Usage in Mobile\n *\n * ```diff\n * <Dropdown>\n * + <SelectInput label=\"Select Fruits\" />\n * <BottomSheet>\n * <BottomSheetHeader>\n * + <AutoComplete label=\"Select Fruits\" />\n * </BottomSheetHeader>\n * <BottomSheetBody>\n * <ActionList>\n * <ActionListItem title=\"Mango\" value=\"mango\" />\n * <ActionListItem title=\"Apple\" value=\"apple\" />\n * </ActionList>\n * </BottomSheetBody>\n * </BottomSheet>\n * </Dropdown>\n * ```\n *\n * ---\n *\n * Checkout {@link https://blade.razorpay.com/?path=/docs/components-dropdown-with-autocomplete--with-single-select AutoComplete Documentation}.\n */\nconst AutoComplete = assignWithoutSideEffects(React.forwardRef(_AutoComplete), {\n componentId: dropdownComponentIds.triggers.AutoComplete,\n});\n\nexport { AutoComplete };\n"],"names":["useAutoComplete","_ref","props","inputValue","setInputValue","getOptionValues","_useDropdown","useDropdown","onBaseDropdownInputKeydown","onTriggerKeydown","isOpen","setIsOpen","selectedIndices","setSelectedIndices","setControlledValueIndices","isControlled","options","setGlobalFilteredValues","setFilteredValues","activeTagIndex","setActiveTagIndex","setActiveIndex","globalFilteredValues","filteredValues","selectionType","triggererRef","hasAutoCompleteInHeader","resetFilters","React","useEffect","firstItemOptionIndex","findIndex","option","value","length","isReactNative","_triggererRef$current","current","focus","onInputValueChange","_ref2","name","filteredOptions","filter","optionValue","toLowerCase","includes","e","key","slice","onSelectionChange","_ref3","values","console","log","_options$find","displayText","find","title","onChange","_AutoComplete","ref","_props$inputValue","_props$autoFocus","_React$useState","useState","_React$useState2","_slicedToArray","uncontrolledInputValue","_useDropdown2","setHasAutoCompleteInHeader","onTriggerClick","dropdownTriggerer","useCallback","map","_useAutoComplete","dropdownComponentIds","triggers","AutoComplete","defaultAutoFocusState","undefined","_jsx","BaseBox","position","children","BaseDropdownInputTrigger","Object","assign","autoFocus","isSelectInput","syncInputValueWithSelection","_selectedOption$title","selectedOption","triggerEvent","onClick","assignWithoutSideEffects","forwardRef","componentId"],"mappings":"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"}
1
+ {"version":3,"file":"AutoComplete.js","sources":["../../../../../../src/components/Input/DropdownInputTriggers/AutoComplete.tsx"],"sourcesContent":["import React from 'react';\nimport { useDropdown } from '../../Dropdown/useDropdown';\nimport type { AutoCompleteProps, BaseDropdownInputTriggerProps } from './types';\nimport { BaseDropdownInputTrigger } from './BaseDropdownInputTrigger';\nimport { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';\nimport BaseBox from '~components/Box/BaseBox';\nimport type { BladeElementRef } from '~utils/types';\nimport { dropdownComponentIds } from '~components/Dropdown/dropdownComponentIds';\nimport { isReactNative } from '~utils';\n\nconst useAutoComplete = ({\n props,\n inputValue,\n setInputValue,\n getOptionValues,\n}: {\n props: AutoCompleteProps;\n setInputValue: (inputValue: string) => void;\n inputValue: string;\n getOptionValues: () => string[];\n}): {\n onTriggerKeydown: BaseDropdownInputTriggerProps['onTriggerKeydown'];\n onSelectionChange: BaseDropdownInputTriggerProps['onChange'];\n onInputValueChange: BaseDropdownInputTriggerProps['onInputValueChange'];\n} => {\n const {\n onTriggerKeydown: onBaseDropdownInputKeydown,\n isOpen,\n setIsOpen,\n selectedIndices,\n setSelectedIndices,\n setControlledValueIndices,\n isControlled,\n options,\n setFilteredValues: setGlobalFilteredValues,\n activeTagIndex,\n setActiveTagIndex,\n setActiveIndex,\n filteredValues: globalFilteredValues,\n selectionType,\n triggererRef,\n hasAutoCompleteInHeader,\n } = useDropdown();\n\n const resetFilters = (): void => setGlobalFilteredValues(getOptionValues());\n\n // Makes sure that first item is always in focus\n React.useEffect((): void => {\n const firstItemOptionIndex = options.findIndex(\n (option) => option.value === globalFilteredValues[0],\n );\n\n if (firstItemOptionIndex >= 0) {\n setActiveIndex(firstItemOptionIndex);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [globalFilteredValues.length, options.length]);\n\n // When input is empty or its single select, we want all items to be shown in filter on open of dropdown\n React.useEffect(() => {\n if (isOpen && !inputValue) {\n resetFilters();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen, options]);\n\n React.useEffect(() => {\n if (isOpen && selectionType === 'single') {\n resetFilters();\n }\n\n // Just setting autoFocus is setting the input in focus state but its not showing keyboard active.\n // We do this in web to get around that\n if (hasAutoCompleteInHeader && isOpen && !isReactNative()) {\n triggererRef.current?.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n const onInputValueChange: BaseDropdownInputTriggerProps['onInputValueChange'] = ({\n name,\n value,\n }) => {\n setInputValue(value ?? '');\n props.onInputValueChange?.({ name, value });\n setActiveTagIndex(-1);\n\n if (!isOpen) {\n setIsOpen(true);\n }\n\n // default filtering when filteredValues is uncontrolled\n if (!props.filteredValues) {\n // eslint-disable-next-line no-lonely-if\n if (value && options && options.length > 0) {\n const filteredOptions = getOptionValues().filter((optionValue) =>\n String(optionValue).toLowerCase().includes(value.toLowerCase()),\n );\n setGlobalFilteredValues(filteredOptions);\n } else {\n resetFilters();\n }\n }\n };\n\n const onTriggerKeydown: BaseDropdownInputTriggerProps['onTriggerKeydown'] = (e) => {\n // Pressing backspace on empty input should remove the last tag\n if (e.key === 'Backspace' && !inputValue && activeTagIndex < 0 && selectedIndices.length > 0) {\n if (isControlled) {\n setControlledValueIndices(selectedIndices.slice(0, -1));\n } else {\n setSelectedIndices(selectedIndices.slice(0, -1));\n }\n }\n onBaseDropdownInputKeydown?.(e);\n };\n\n const onSelectionChange: BaseDropdownInputTriggerProps['onChange'] = ({ values }) => {\n console.log('selection change', values);\n if (selectionType === 'multiple') {\n setInputValue('');\n props.onInputValueChange?.({ name: props.name, value: '' });\n setActiveTagIndex(-1);\n resetFilters();\n } else {\n const displayText = options.find((option) => option.value === values[0])?.title;\n props.onInputValueChange?.({\n name: props.name,\n value: displayText,\n });\n // Use displayText as inputValue only if its not controlled by user\n if (hasAutoCompleteInHeader) {\n setInputValue('');\n } else if (typeof props.value === 'undefined') {\n setInputValue(displayText ?? '');\n }\n }\n props.onChange?.({ name: props.name, values });\n };\n return {\n onSelectionChange,\n onTriggerKeydown,\n onInputValueChange,\n };\n};\n\nconst _AutoComplete = (\n props: AutoCompleteProps,\n ref: React.ForwardedRef<BladeElementRef>,\n): React.ReactElement => {\n const [uncontrolledInputValue, setInputValue] = React.useState('');\n const inputValue = props.inputValue ?? uncontrolledInputValue;\n\n const {\n options,\n setFilteredValues: setGlobalFilteredValues,\n hasAutoCompleteInHeader,\n setHasAutoCompleteInHeader,\n onTriggerClick,\n dropdownTriggerer,\n } = useDropdown();\n\n const getOptionValues = React.useCallback(() => {\n return options.map((option) => option.value);\n }, [options]);\n\n const { onSelectionChange, onTriggerKeydown, onInputValueChange } = useAutoComplete({\n props,\n inputValue,\n setInputValue,\n getOptionValues,\n });\n\n React.useEffect(() => {\n if (dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete) {\n // When AutoComplete is mounted but not as trigger,\n // it has to be somewhere in the BottomSheet (most likely header based on UI but works in other parts too)\n setHasAutoCompleteInHeader(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // handles controlled filteredValues state (syncs it with our global filteredValues)\n React.useEffect(() => {\n if (props.filteredValues) {\n setGlobalFilteredValues(props.filteredValues);\n }\n }, [props.filteredValues, setGlobalFilteredValues]);\n\n // set autoFocus to true when used inside bottomsheet\n const defaultAutoFocusState = hasAutoCompleteInHeader ? true : undefined;\n\n return (\n <BaseBox position=\"relative\">\n <BaseDropdownInputTrigger\n {...props}\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={props.autoFocus ?? defaultAutoFocusState}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref={ref as any}\n onChange={onSelectionChange}\n isSelectInput={false}\n inputValue={inputValue}\n syncInputValueWithSelection={(value) => {\n if (!value) {\n setInputValue('');\n return;\n }\n const selectedOption = options.find((option) => option.value === value);\n setInputValue(selectedOption?.title ?? '');\n }}\n onTriggerKeydown={onTriggerKeydown}\n onInputValueChange={onInputValueChange}\n onTriggerClick={(triggerEvent) => {\n if (!hasAutoCompleteInHeader) {\n // we don't want clicking on autocomplete to open / close Dropdown when it is used inside BottomSheet's header\n onTriggerClick();\n }\n props?.onClick?.(triggerEvent);\n }}\n />\n </BaseBox>\n );\n};\n\n/**\n * ### AutoComplete\n *\n * Extension on top of SelectInput which allows you type and filter between ActionList items\n *\n * To be used in combination of `Dropdown` and `ActionList` component\n *\n * ---\n *\n * #### Usage in Desktop\n *\n * ```diff\n * <Dropdown>\n * + <AutoComplete label=\"Select Fruits\" />\n * <DropdownOverlay>\n * <ActionList>\n * <ActionListItem title=\"Mango\" value=\"mango\" />\n * <ActionListItem title=\"Apple\" value=\"apple\" />\n * </ActionList>\n * </DropdownOverlay>\n * </Dropdown>\n * ```\n *\n * #### Usage in Mobile\n *\n * ```diff\n * <Dropdown>\n * + <SelectInput label=\"Select Fruits\" />\n * <BottomSheet>\n * <BottomSheetHeader>\n * + <AutoComplete label=\"Select Fruits\" />\n * </BottomSheetHeader>\n * <BottomSheetBody>\n * <ActionList>\n * <ActionListItem title=\"Mango\" value=\"mango\" />\n * <ActionListItem title=\"Apple\" value=\"apple\" />\n * </ActionList>\n * </BottomSheetBody>\n * </BottomSheet>\n * </Dropdown>\n * ```\n *\n * ---\n *\n * Checkout {@link https://blade.razorpay.com/?path=/docs/components-dropdown-with-autocomplete--with-single-select AutoComplete Documentation}.\n */\nconst AutoComplete = assignWithoutSideEffects(React.forwardRef(_AutoComplete), {\n componentId: dropdownComponentIds.triggers.AutoComplete,\n});\n\nexport { AutoComplete };\n"],"names":["useAutoComplete","_ref","props","inputValue","setInputValue","getOptionValues","_useDropdown","useDropdown","onBaseDropdownInputKeydown","onTriggerKeydown","isOpen","setIsOpen","selectedIndices","setSelectedIndices","setControlledValueIndices","isControlled","options","setGlobalFilteredValues","setFilteredValues","activeTagIndex","setActiveTagIndex","setActiveIndex","globalFilteredValues","filteredValues","selectionType","triggererRef","hasAutoCompleteInHeader","resetFilters","React","useEffect","firstItemOptionIndex","findIndex","option","value","length","isReactNative","_triggererRef$current","current","focus","onInputValueChange","_ref2","name","filteredOptions","filter","optionValue","String","toLowerCase","includes","e","key","slice","onSelectionChange","_ref3","values","console","log","_options$find","displayText","find","title","onChange","_AutoComplete","ref","_props$inputValue","_props$autoFocus","_React$useState","useState","_React$useState2","_slicedToArray","uncontrolledInputValue","_useDropdown2","setHasAutoCompleteInHeader","onTriggerClick","dropdownTriggerer","useCallback","map","_useAutoComplete","dropdownComponentIds","triggers","AutoComplete","defaultAutoFocusState","undefined","_jsx","BaseBox","position","children","BaseDropdownInputTrigger","Object","assign","autoFocus","isSelectInput","syncInputValueWithSelection","_selectedOption$title","selectedOption","triggerEvent","onClick","assignWithoutSideEffects","forwardRef","componentId"],"mappings":"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"}
@@ -26,7 +26,7 @@ function filterOptions() {
26
26
  var filter = arguments.length > 1 ? arguments[1] : undefined;
27
27
  var exclude = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
28
28
  return options.filter(function (option) {
29
- var matches = option.toLowerCase().startsWith(filter.toLowerCase());
29
+ var matches = String(option).toLowerCase().startsWith(filter.toLowerCase());
30
30
  return matches && !exclude.includes(option);
31
31
  });
32
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dropdownUtils.js","sources":["../../../../../../src/components/Dropdown/dropdownUtils.ts"],"sourcesContent":["/*\n * This content is licensed according to the W3C Software License at\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n * This software or document includes material copied from or derived from\n * https://www.w3.org/WAI/ARIA/apg/example-index/combobox/combobox-select-only.html.\n * Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang)\n */\n\nimport type { DropdownContextType, OptionsType } from './useDropdown';\nimport { dropdownComponentIds } from './dropdownComponentIds';\nimport type { SpacingValueType } from '~components/Box/BaseBox';\n\nexport type SelectActionsType =\n | 'Close'\n | 'CloseSelect'\n | 'First'\n | 'Last'\n | 'Next'\n | 'Open'\n | 'PageDown'\n | 'PageUp'\n | 'Previous'\n | 'Select'\n | 'Type';\n\n// Save a list of named combobox actions, for future readability\nconst SelectActions: Record<SelectActionsType, SelectActionsType> = {\n Close: 'Close',\n CloseSelect: 'CloseSelect',\n First: 'First',\n Last: 'Last',\n Next: 'Next',\n Open: 'Open',\n PageDown: 'PageDown',\n PageUp: 'PageUp',\n Previous: 'Previous',\n Select: 'Select',\n Type: 'Type',\n};\n\n/**\n * Filter an array of options against an input string\n * returns an array of options that begin with the filter string, case-independent\n *\n */\nexport function filterOptions(\n options: string[] = [],\n filter: string,\n exclude: string[] = [],\n): string[] {\n return options.filter((option) => {\n const matches = option.toLowerCase().startsWith(filter.toLowerCase());\n return matches && !exclude.includes(option);\n });\n}\n\n/**\n * Map a keypress to action\n */\nexport function getActionFromKey(\n e: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>,\n isOpen: boolean,\n dropdownTriggerer: DropdownContextType['dropdownTriggerer'],\n): SelectActionsType | undefined {\n if (!e) {\n return undefined;\n }\n\n const { altKey, ctrlKey, metaKey } = e;\n let key = '';\n if ('key' in e) {\n key = e.key;\n }\n const openKeys = ['ArrowDown', 'ArrowUp', 'Enter', ' ']; // all keys that will do the default open action\n if (!key) return undefined;\n // handle opening when closed\n if (!isOpen && key && openKeys.includes(key)) {\n return SelectActions.Open;\n }\n\n // home and end move the selected option when open or closed\n if (key === 'Home') {\n return SelectActions.First;\n }\n if (key === 'End') {\n return SelectActions.Last;\n }\n\n // handle typing characters when open or closed\n if (\n key === 'Backspace' ||\n key === 'Clear' ||\n (key.length === 1 && key !== ' ' && !altKey && !ctrlKey && !metaKey)\n ) {\n return SelectActions.Type;\n }\n\n // handle keys when open\n if (isOpen) {\n if (key === 'ArrowUp' && altKey) {\n return SelectActions.CloseSelect;\n } else if (key === 'ArrowDown' && !altKey) {\n return SelectActions.Next;\n } else if (key === 'ArrowUp') {\n return SelectActions.Previous;\n } else if (key === 'PageUp') {\n return SelectActions.PageUp;\n } else if (key === 'PageDown') {\n return SelectActions.PageDown;\n } else if (key === 'Escape') {\n return SelectActions.Close;\n } else if (\n key === 'Enter' ||\n // we ignore the spacebar select in autocomplete since hitting spacebar might be expected while typing\n (dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete &&\n dropdownTriggerer !== dropdownComponentIds.triggers.SearchInput &&\n key === ' ')\n ) {\n return SelectActions.CloseSelect;\n }\n }\n\n return undefined;\n}\n\n/**\n * Return the index of an option from an array of options, based on a search string\n *\n * if the filter is multiple iterations of the same letter (e.g \"aaa\"), then cycle through first-letter matches\n **/\nexport function getIndexByLetter(options: string[], filter: string, startIndex = 0): number {\n const orderedOptions = [...options.slice(startIndex), ...options.slice(0, startIndex)];\n const firstMatch = filterOptions(orderedOptions, filter)[0];\n const allSameLetter = (array: string[]): boolean => array.every((letter) => letter === array[0]);\n\n // first check if there is an exact match for the typed string\n if (firstMatch) {\n return options.indexOf(firstMatch);\n }\n\n // if the same letter is being repeated, cycle through first-letter matches\n else if (allSameLetter(filter.split(''))) {\n const matches = filterOptions(orderedOptions, filter[0]);\n return options.indexOf(matches[0]);\n }\n\n // if no matches, return -1\n else {\n return -1;\n }\n}\n\n/**\n * This functions makes sure the optionsIndex is not going out of possible options\n */\nexport function getUpdatedIndex({\n currentIndex,\n maxIndex,\n actionType,\n}: {\n currentIndex: number;\n maxIndex: number;\n actionType: SelectActionsType;\n}): number {\n // On PageUP or PageDown, we jump focus by 10 items or to the first or last element\n // Details: https://www.w3.org/WAI/ARIA/apg/example-index/combobox/combobox-select-only.html#:~:text=PageUp,to%20last%20option).\n const pageSize = 10;\n\n switch (actionType) {\n case SelectActions.First:\n return 0;\n case SelectActions.Last:\n return maxIndex;\n case SelectActions.Previous:\n return Math.max(0, currentIndex - 1);\n case SelectActions.Next:\n return Math.min(maxIndex, currentIndex + 1);\n case SelectActions.PageUp:\n return Math.max(0, currentIndex - pageSize);\n case SelectActions.PageDown:\n return Math.min(maxIndex, currentIndex + pageSize);\n default:\n return currentIndex;\n }\n}\n\n/**\n * Checks if the given HTML element is visible on screen\n */\nexport function isElementVisibleOnScreen(element: HTMLElement): boolean {\n const bounding = element.getBoundingClientRect();\n\n return (\n bounding.top >= 0 &&\n bounding.left >= 0 &&\n bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n bounding.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n}\n\n/**\n * Checks if element is visible inside the given container\n */\nfunction isElementVisible(container: HTMLElement, element: HTMLElement): boolean {\n const containerRect = container.getBoundingClientRect();\n const elementRect = element.getBoundingClientRect();\n\n const isVerticalVisible =\n elementRect.top >= containerRect.top && elementRect.bottom <= containerRect.bottom;\n\n return isVerticalVisible;\n}\n\n/**\n * Checks if the dropdown is scrollable\n */\nexport function isScrollable(element: HTMLElement): boolean {\n return element && element.clientHeight < element.scrollHeight;\n}\n\ntype ActionsType = {\n setIsOpen: DropdownContextType['setIsOpen'];\n close: DropdownContextType['close'];\n selectCurrentOption: () => void;\n onOptionChange: (action: SelectActionsType) => void;\n onComboType: (letter: string, action: SelectActionsType) => void;\n};\n/**\n * Performs the action when actionType is passed\n *\n * This function handles all the keydown actions.\n */\nexport const performAction = (\n action: SelectActionsType,\n payload: {\n event: React.KeyboardEvent<HTMLInputElement | HTMLButtonElement>;\n },\n actions: ActionsType,\n): boolean => {\n const { event } = payload;\n\n switch (action) {\n case SelectActions.Last:\n // @ts-expect-error: intentional fallthrough, ignoring the warning\n case SelectActions.First:\n actions.setIsOpen(true);\n // intentional fallthrough\n case SelectActions.Next:\n case SelectActions.Previous:\n case SelectActions.PageUp:\n case SelectActions.PageDown:\n event.preventDefault();\n actions.onOptionChange(action);\n return true;\n case SelectActions.CloseSelect:\n event.preventDefault();\n actions.selectCurrentOption();\n return true;\n case SelectActions.Close:\n event.preventDefault();\n actions.close();\n return true;\n case SelectActions.Type:\n actions.onComboType(event.key, action);\n return true;\n case SelectActions.Open:\n event.preventDefault();\n actions.setIsOpen(true);\n return true;\n\n default:\n break;\n }\n\n return false;\n};\n\n/**\n * When options list is large, it can have a scrollbar.\n *\n * This function ensures the active option is always in the viewport\n */\nexport const ensureScrollVisiblity = (\n newActiveIndex: number,\n containerElement: HTMLElement | null,\n options: string[],\n): void => {\n // ensure the new option is in view\n if (containerElement) {\n if (isScrollable(containerElement)) {\n const optionEl = containerElement.querySelectorAll<HTMLElement>(\n '[role=\"option\"], [role=\"menuitem\"]',\n );\n // Making sure its the same element as the one from options state\n if (\n newActiveIndex >= 0 &&\n optionEl[newActiveIndex].dataset.value === options[newActiveIndex]\n ) {\n const activeElement = optionEl[newActiveIndex];\n\n if (!isElementVisible(containerElement, activeElement)) {\n activeElement.scrollIntoView({ inline: 'nearest' });\n }\n\n if (!isElementVisibleOnScreen(optionEl[newActiveIndex])) {\n activeElement.scrollIntoView({ behavior: 'smooth' });\n }\n }\n }\n }\n};\n\n/**\n * value that is set in the actual form input\n */\nexport const makeInputValue = (selectedIndices: number[], options: OptionsType): string => {\n if (options.length === 0) {\n return '';\n }\n return selectedIndices.map((selectedIndex) => options[selectedIndex]?.value).join(', ');\n};\n\n/**\n * Value that is displayed inside the select field\n */\nexport const makeInputDisplayValue = (selectedIndices: number[], options: OptionsType): string => {\n // When no item is selected or no item is present\n if (options.length === 0 || selectedIndices.length === 0) {\n return '';\n }\n\n // When one item is selected, we display that item's title in input\n if (selectedIndices.length === 1) {\n return options[selectedIndices[0]]?.title;\n }\n\n // When more than one item is selected, we display the count of items\n return `${selectedIndices.length} items selected`;\n};\n\nexport type DropdownPosition = {\n top?: SpacingValueType;\n bottom?: SpacingValueType;\n left?: SpacingValueType;\n right?: SpacingValueType;\n};\n"],"names":["SelectActions","Close","CloseSelect","First","Last","Next","Open","PageDown","PageUp","Previous","Select","Type","filterOptions","options","arguments","length","undefined","filter","exclude","option","matches","toLowerCase","startsWith","includes","getActionFromKey","e","isOpen","dropdownTriggerer","altKey","ctrlKey","metaKey","key","openKeys","dropdownComponentIds","triggers","AutoComplete","SearchInput","getIndexByLetter","startIndex","orderedOptions","concat","_toConsumableArray","slice","firstMatch","allSameLetter","array","every","letter","indexOf","split","getUpdatedIndex","_ref","currentIndex","maxIndex","actionType","pageSize","Math","max","min","isElementVisibleOnScreen","element","bounding","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","isElementVisible","container","containerRect","elementRect","isVerticalVisible","isScrollable","scrollHeight","performAction","action","payload","actions","event","setIsOpen","preventDefault","onOptionChange","selectCurrentOption","close","onComboType","ensureScrollVisiblity","newActiveIndex","containerElement","optionEl","querySelectorAll","dataset","value","activeElement","scrollIntoView","inline","behavior","makeInputValue","selectedIndices","map","selectedIndex","_options$selectedInde","join","makeInputDisplayValue","_options$selectedIndi","title"],"mappings":"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"}
1
+ {"version":3,"file":"dropdownUtils.js","sources":["../../../../../../src/components/Dropdown/dropdownUtils.ts"],"sourcesContent":["/*\n * This content is licensed according to the W3C Software License at\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n * This software or document includes material copied from or derived from\n * https://www.w3.org/WAI/ARIA/apg/example-index/combobox/combobox-select-only.html.\n * Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang)\n */\n\nimport type { DropdownContextType, OptionsType } from './useDropdown';\nimport { dropdownComponentIds } from './dropdownComponentIds';\nimport type { SpacingValueType } from '~components/Box/BaseBox';\n\nexport type SelectActionsType =\n | 'Close'\n | 'CloseSelect'\n | 'First'\n | 'Last'\n | 'Next'\n | 'Open'\n | 'PageDown'\n | 'PageUp'\n | 'Previous'\n | 'Select'\n | 'Type';\n\n// Save a list of named combobox actions, for future readability\nconst SelectActions: Record<SelectActionsType, SelectActionsType> = {\n Close: 'Close',\n CloseSelect: 'CloseSelect',\n First: 'First',\n Last: 'Last',\n Next: 'Next',\n Open: 'Open',\n PageDown: 'PageDown',\n PageUp: 'PageUp',\n Previous: 'Previous',\n Select: 'Select',\n Type: 'Type',\n};\n\n/**\n * Filter an array of options against an input string\n * returns an array of options that begin with the filter string, case-independent\n *\n */\nexport function filterOptions(\n options: string[] = [],\n filter: string,\n exclude: string[] = [],\n): string[] {\n return options.filter((option) => {\n const matches = String(option).toLowerCase().startsWith(filter.toLowerCase());\n return matches && !exclude.includes(option);\n });\n}\n\n/**\n * Map a keypress to action\n */\nexport function getActionFromKey(\n e: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>,\n isOpen: boolean,\n dropdownTriggerer: DropdownContextType['dropdownTriggerer'],\n): SelectActionsType | undefined {\n if (!e) {\n return undefined;\n }\n\n const { altKey, ctrlKey, metaKey } = e;\n let key = '';\n if ('key' in e) {\n key = e.key;\n }\n const openKeys = ['ArrowDown', 'ArrowUp', 'Enter', ' ']; // all keys that will do the default open action\n if (!key) return undefined;\n // handle opening when closed\n if (!isOpen && key && openKeys.includes(key)) {\n return SelectActions.Open;\n }\n\n // home and end move the selected option when open or closed\n if (key === 'Home') {\n return SelectActions.First;\n }\n if (key === 'End') {\n return SelectActions.Last;\n }\n\n // handle typing characters when open or closed\n if (\n key === 'Backspace' ||\n key === 'Clear' ||\n (key.length === 1 && key !== ' ' && !altKey && !ctrlKey && !metaKey)\n ) {\n return SelectActions.Type;\n }\n\n // handle keys when open\n if (isOpen) {\n if (key === 'ArrowUp' && altKey) {\n return SelectActions.CloseSelect;\n } else if (key === 'ArrowDown' && !altKey) {\n return SelectActions.Next;\n } else if (key === 'ArrowUp') {\n return SelectActions.Previous;\n } else if (key === 'PageUp') {\n return SelectActions.PageUp;\n } else if (key === 'PageDown') {\n return SelectActions.PageDown;\n } else if (key === 'Escape') {\n return SelectActions.Close;\n } else if (\n key === 'Enter' ||\n // we ignore the spacebar select in autocomplete since hitting spacebar might be expected while typing\n (dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete &&\n dropdownTriggerer !== dropdownComponentIds.triggers.SearchInput &&\n key === ' ')\n ) {\n return SelectActions.CloseSelect;\n }\n }\n\n return undefined;\n}\n\n/**\n * Return the index of an option from an array of options, based on a search string\n *\n * if the filter is multiple iterations of the same letter (e.g \"aaa\"), then cycle through first-letter matches\n **/\nexport function getIndexByLetter(options: string[], filter: string, startIndex = 0): number {\n const orderedOptions = [...options.slice(startIndex), ...options.slice(0, startIndex)];\n const firstMatch = filterOptions(orderedOptions, filter)[0];\n const allSameLetter = (array: string[]): boolean => array.every((letter) => letter === array[0]);\n\n // first check if there is an exact match for the typed string\n if (firstMatch) {\n return options.indexOf(firstMatch);\n }\n\n // if the same letter is being repeated, cycle through first-letter matches\n else if (allSameLetter(filter.split(''))) {\n const matches = filterOptions(orderedOptions, filter[0]);\n return options.indexOf(matches[0]);\n }\n\n // if no matches, return -1\n else {\n return -1;\n }\n}\n\n/**\n * This functions makes sure the optionsIndex is not going out of possible options\n */\nexport function getUpdatedIndex({\n currentIndex,\n maxIndex,\n actionType,\n}: {\n currentIndex: number;\n maxIndex: number;\n actionType: SelectActionsType;\n}): number {\n // On PageUP or PageDown, we jump focus by 10 items or to the first or last element\n // Details: https://www.w3.org/WAI/ARIA/apg/example-index/combobox/combobox-select-only.html#:~:text=PageUp,to%20last%20option).\n const pageSize = 10;\n\n switch (actionType) {\n case SelectActions.First:\n return 0;\n case SelectActions.Last:\n return maxIndex;\n case SelectActions.Previous:\n return Math.max(0, currentIndex - 1);\n case SelectActions.Next:\n return Math.min(maxIndex, currentIndex + 1);\n case SelectActions.PageUp:\n return Math.max(0, currentIndex - pageSize);\n case SelectActions.PageDown:\n return Math.min(maxIndex, currentIndex + pageSize);\n default:\n return currentIndex;\n }\n}\n\n/**\n * Checks if the given HTML element is visible on screen\n */\nexport function isElementVisibleOnScreen(element: HTMLElement): boolean {\n const bounding = element.getBoundingClientRect();\n\n return (\n bounding.top >= 0 &&\n bounding.left >= 0 &&\n bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n bounding.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n}\n\n/**\n * Checks if element is visible inside the given container\n */\nfunction isElementVisible(container: HTMLElement, element: HTMLElement): boolean {\n const containerRect = container.getBoundingClientRect();\n const elementRect = element.getBoundingClientRect();\n\n const isVerticalVisible =\n elementRect.top >= containerRect.top && elementRect.bottom <= containerRect.bottom;\n\n return isVerticalVisible;\n}\n\n/**\n * Checks if the dropdown is scrollable\n */\nexport function isScrollable(element: HTMLElement): boolean {\n return element && element.clientHeight < element.scrollHeight;\n}\n\ntype ActionsType = {\n setIsOpen: DropdownContextType['setIsOpen'];\n close: DropdownContextType['close'];\n selectCurrentOption: () => void;\n onOptionChange: (action: SelectActionsType) => void;\n onComboType: (letter: string, action: SelectActionsType) => void;\n};\n/**\n * Performs the action when actionType is passed\n *\n * This function handles all the keydown actions.\n */\nexport const performAction = (\n action: SelectActionsType,\n payload: {\n event: React.KeyboardEvent<HTMLInputElement | HTMLButtonElement>;\n },\n actions: ActionsType,\n): boolean => {\n const { event } = payload;\n\n switch (action) {\n case SelectActions.Last:\n // @ts-expect-error: intentional fallthrough, ignoring the warning\n case SelectActions.First:\n actions.setIsOpen(true);\n // intentional fallthrough\n case SelectActions.Next:\n case SelectActions.Previous:\n case SelectActions.PageUp:\n case SelectActions.PageDown:\n event.preventDefault();\n actions.onOptionChange(action);\n return true;\n case SelectActions.CloseSelect:\n event.preventDefault();\n actions.selectCurrentOption();\n return true;\n case SelectActions.Close:\n event.preventDefault();\n actions.close();\n return true;\n case SelectActions.Type:\n actions.onComboType(event.key, action);\n return true;\n case SelectActions.Open:\n event.preventDefault();\n actions.setIsOpen(true);\n return true;\n\n default:\n break;\n }\n\n return false;\n};\n\n/**\n * When options list is large, it can have a scrollbar.\n *\n * This function ensures the active option is always in the viewport\n */\nexport const ensureScrollVisiblity = (\n newActiveIndex: number,\n containerElement: HTMLElement | null,\n options: string[],\n): void => {\n // ensure the new option is in view\n if (containerElement) {\n if (isScrollable(containerElement)) {\n const optionEl = containerElement.querySelectorAll<HTMLElement>(\n '[role=\"option\"], [role=\"menuitem\"]',\n );\n // Making sure its the same element as the one from options state\n if (\n newActiveIndex >= 0 &&\n optionEl[newActiveIndex].dataset.value === options[newActiveIndex]\n ) {\n const activeElement = optionEl[newActiveIndex];\n\n if (!isElementVisible(containerElement, activeElement)) {\n activeElement.scrollIntoView({ inline: 'nearest' });\n }\n\n if (!isElementVisibleOnScreen(optionEl[newActiveIndex])) {\n activeElement.scrollIntoView({ behavior: 'smooth' });\n }\n }\n }\n }\n};\n\n/**\n * value that is set in the actual form input\n */\nexport const makeInputValue = (selectedIndices: number[], options: OptionsType): string => {\n if (options.length === 0) {\n return '';\n }\n return selectedIndices.map((selectedIndex) => options[selectedIndex]?.value).join(', ');\n};\n\n/**\n * Value that is displayed inside the select field\n */\nexport const makeInputDisplayValue = (selectedIndices: number[], options: OptionsType): string => {\n // When no item is selected or no item is present\n if (options.length === 0 || selectedIndices.length === 0) {\n return '';\n }\n\n // When one item is selected, we display that item's title in input\n if (selectedIndices.length === 1) {\n return options[selectedIndices[0]]?.title;\n }\n\n // When more than one item is selected, we display the count of items\n return `${selectedIndices.length} items selected`;\n};\n\nexport type DropdownPosition = {\n top?: SpacingValueType;\n bottom?: SpacingValueType;\n left?: SpacingValueType;\n right?: SpacingValueType;\n};\n"],"names":["SelectActions","Close","CloseSelect","First","Last","Next","Open","PageDown","PageUp","Previous","Select","Type","filterOptions","options","arguments","length","undefined","filter","exclude","option","matches","String","toLowerCase","startsWith","includes","getActionFromKey","e","isOpen","dropdownTriggerer","altKey","ctrlKey","metaKey","key","openKeys","dropdownComponentIds","triggers","AutoComplete","SearchInput","getIndexByLetter","startIndex","orderedOptions","concat","_toConsumableArray","slice","firstMatch","allSameLetter","array","every","letter","indexOf","split","getUpdatedIndex","_ref","currentIndex","maxIndex","actionType","pageSize","Math","max","min","isElementVisibleOnScreen","element","bounding","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","isElementVisible","container","containerRect","elementRect","isVerticalVisible","isScrollable","scrollHeight","performAction","action","payload","actions","event","setIsOpen","preventDefault","onOptionChange","selectCurrentOption","close","onComboType","ensureScrollVisiblity","newActiveIndex","containerElement","optionEl","querySelectorAll","dataset","value","activeElement","scrollIntoView","inline","behavior","makeInputValue","selectedIndices","map","selectedIndex","_options$selectedInde","join","makeInputDisplayValue","_options$selectedIndi","title"],"mappings":"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"}
@@ -90,7 +90,7 @@ var useAutoComplete = function useAutoComplete(_ref) {
90
90
  // eslint-disable-next-line no-lonely-if
91
91
  if (value && options && options.length > 0) {
92
92
  var filteredOptions = getOptionValues().filter(function (optionValue) {
93
- return optionValue.toLowerCase().includes(value.toLowerCase());
93
+ return String(optionValue).toLowerCase().includes(value.toLowerCase());
94
94
  });
95
95
  setGlobalFilteredValues(filteredOptions);
96
96
  } else {
@@ -1 +1 @@
1
- {"version":3,"file":"AutoComplete.js","sources":["../../../../../../../src/components/Input/DropdownInputTriggers/AutoComplete.tsx"],"sourcesContent":["import React from 'react';\nimport { useDropdown } from '../../Dropdown/useDropdown';\nimport type { AutoCompleteProps, BaseDropdownInputTriggerProps } from './types';\nimport { BaseDropdownInputTrigger } from './BaseDropdownInputTrigger';\nimport { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';\nimport BaseBox from '~components/Box/BaseBox';\nimport type { BladeElementRef } from '~utils/types';\nimport { dropdownComponentIds } from '~components/Dropdown/dropdownComponentIds';\nimport { isReactNative } from '~utils';\n\nconst useAutoComplete = ({\n props,\n inputValue,\n setInputValue,\n getOptionValues,\n}: {\n props: AutoCompleteProps;\n setInputValue: (inputValue: string) => void;\n inputValue: string;\n getOptionValues: () => string[];\n}): {\n onTriggerKeydown: BaseDropdownInputTriggerProps['onTriggerKeydown'];\n onSelectionChange: BaseDropdownInputTriggerProps['onChange'];\n onInputValueChange: BaseDropdownInputTriggerProps['onInputValueChange'];\n} => {\n const {\n onTriggerKeydown: onBaseDropdownInputKeydown,\n isOpen,\n setIsOpen,\n selectedIndices,\n setSelectedIndices,\n setControlledValueIndices,\n isControlled,\n options,\n setFilteredValues: setGlobalFilteredValues,\n activeTagIndex,\n setActiveTagIndex,\n setActiveIndex,\n filteredValues: globalFilteredValues,\n selectionType,\n triggererRef,\n hasAutoCompleteInHeader,\n } = useDropdown();\n\n const resetFilters = (): void => setGlobalFilteredValues(getOptionValues());\n\n // Makes sure that first item is always in focus\n React.useEffect((): void => {\n const firstItemOptionIndex = options.findIndex(\n (option) => option.value === globalFilteredValues[0],\n );\n\n if (firstItemOptionIndex >= 0) {\n setActiveIndex(firstItemOptionIndex);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [globalFilteredValues.length, options.length]);\n\n // When input is empty or its single select, we want all items to be shown in filter on open of dropdown\n React.useEffect(() => {\n if (isOpen && !inputValue) {\n resetFilters();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen, options]);\n\n React.useEffect(() => {\n if (isOpen && selectionType === 'single') {\n resetFilters();\n }\n\n // Just setting autoFocus is setting the input in focus state but its not showing keyboard active.\n // We do this in web to get around that\n if (hasAutoCompleteInHeader && isOpen && !isReactNative()) {\n triggererRef.current?.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n const onInputValueChange: BaseDropdownInputTriggerProps['onInputValueChange'] = ({\n name,\n value,\n }) => {\n setInputValue(value ?? '');\n props.onInputValueChange?.({ name, value });\n setActiveTagIndex(-1);\n\n if (!isOpen) {\n setIsOpen(true);\n }\n\n // default filtering when filteredValues is uncontrolled\n if (!props.filteredValues) {\n // eslint-disable-next-line no-lonely-if\n if (value && options && options.length > 0) {\n const filteredOptions = getOptionValues().filter((optionValue) =>\n optionValue.toLowerCase().includes(value.toLowerCase()),\n );\n setGlobalFilteredValues(filteredOptions);\n } else {\n resetFilters();\n }\n }\n };\n\n const onTriggerKeydown: BaseDropdownInputTriggerProps['onTriggerKeydown'] = (e) => {\n // Pressing backspace on empty input should remove the last tag\n if (e.key === 'Backspace' && !inputValue && activeTagIndex < 0 && selectedIndices.length > 0) {\n if (isControlled) {\n setControlledValueIndices(selectedIndices.slice(0, -1));\n } else {\n setSelectedIndices(selectedIndices.slice(0, -1));\n }\n }\n onBaseDropdownInputKeydown?.(e);\n };\n\n const onSelectionChange: BaseDropdownInputTriggerProps['onChange'] = ({ values }) => {\n console.log('selection change', values);\n if (selectionType === 'multiple') {\n setInputValue('');\n props.onInputValueChange?.({ name: props.name, value: '' });\n setActiveTagIndex(-1);\n resetFilters();\n } else {\n const displayText = options.find((option) => option.value === values[0])?.title;\n props.onInputValueChange?.({\n name: props.name,\n value: displayText,\n });\n // Use displayText as inputValue only if its not controlled by user\n if (hasAutoCompleteInHeader) {\n setInputValue('');\n } else if (typeof props.value === 'undefined') {\n setInputValue(displayText ?? '');\n }\n }\n props.onChange?.({ name: props.name, values });\n };\n return {\n onSelectionChange,\n onTriggerKeydown,\n onInputValueChange,\n };\n};\n\nconst _AutoComplete = (\n props: AutoCompleteProps,\n ref: React.ForwardedRef<BladeElementRef>,\n): React.ReactElement => {\n const [uncontrolledInputValue, setInputValue] = React.useState('');\n const inputValue = props.inputValue ?? uncontrolledInputValue;\n\n const {\n options,\n setFilteredValues: setGlobalFilteredValues,\n hasAutoCompleteInHeader,\n setHasAutoCompleteInHeader,\n onTriggerClick,\n dropdownTriggerer,\n } = useDropdown();\n\n const getOptionValues = React.useCallback(() => {\n return options.map((option) => option.value);\n }, [options]);\n\n const { onSelectionChange, onTriggerKeydown, onInputValueChange } = useAutoComplete({\n props,\n inputValue,\n setInputValue,\n getOptionValues,\n });\n\n React.useEffect(() => {\n if (dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete) {\n // When AutoComplete is mounted but not as trigger,\n // it has to be somewhere in the BottomSheet (most likely header based on UI but works in other parts too)\n setHasAutoCompleteInHeader(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // handles controlled filteredValues state (syncs it with our global filteredValues)\n React.useEffect(() => {\n if (props.filteredValues) {\n setGlobalFilteredValues(props.filteredValues);\n }\n }, [props.filteredValues, setGlobalFilteredValues]);\n\n // set autoFocus to true when used inside bottomsheet\n const defaultAutoFocusState = hasAutoCompleteInHeader ? true : undefined;\n\n return (\n <BaseBox position=\"relative\">\n <BaseDropdownInputTrigger\n {...props}\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={props.autoFocus ?? defaultAutoFocusState}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref={ref as any}\n onChange={onSelectionChange}\n isSelectInput={false}\n inputValue={inputValue}\n syncInputValueWithSelection={(value) => {\n if (!value) {\n setInputValue('');\n return;\n }\n const selectedOption = options.find((option) => option.value === value);\n setInputValue(selectedOption?.title ?? '');\n }}\n onTriggerKeydown={onTriggerKeydown}\n onInputValueChange={onInputValueChange}\n onTriggerClick={(triggerEvent) => {\n if (!hasAutoCompleteInHeader) {\n // we don't want clicking on autocomplete to open / close Dropdown when it is used inside BottomSheet's header\n onTriggerClick();\n }\n props?.onClick?.(triggerEvent);\n }}\n />\n </BaseBox>\n );\n};\n\n/**\n * ### AutoComplete\n *\n * Extension on top of SelectInput which allows you type and filter between ActionList items\n *\n * To be used in combination of `Dropdown` and `ActionList` component\n *\n * ---\n *\n * #### Usage in Desktop\n *\n * ```diff\n * <Dropdown>\n * + <AutoComplete label=\"Select Fruits\" />\n * <DropdownOverlay>\n * <ActionList>\n * <ActionListItem title=\"Mango\" value=\"mango\" />\n * <ActionListItem title=\"Apple\" value=\"apple\" />\n * </ActionList>\n * </DropdownOverlay>\n * </Dropdown>\n * ```\n *\n * #### Usage in Mobile\n *\n * ```diff\n * <Dropdown>\n * + <SelectInput label=\"Select Fruits\" />\n * <BottomSheet>\n * <BottomSheetHeader>\n * + <AutoComplete label=\"Select Fruits\" />\n * </BottomSheetHeader>\n * <BottomSheetBody>\n * <ActionList>\n * <ActionListItem title=\"Mango\" value=\"mango\" />\n * <ActionListItem title=\"Apple\" value=\"apple\" />\n * </ActionList>\n * </BottomSheetBody>\n * </BottomSheet>\n * </Dropdown>\n * ```\n *\n * ---\n *\n * Checkout {@link https://blade.razorpay.com/?path=/docs/components-dropdown-with-autocomplete--with-single-select AutoComplete Documentation}.\n */\nconst AutoComplete = assignWithoutSideEffects(React.forwardRef(_AutoComplete), {\n componentId: dropdownComponentIds.triggers.AutoComplete,\n});\n\nexport { AutoComplete };\n"],"names":["useAutoComplete","_ref","props","inputValue","setInputValue","getOptionValues","_useDropdown","useDropdown","onBaseDropdownInputKeydown","onTriggerKeydown","isOpen","setIsOpen","selectedIndices","setSelectedIndices","setControlledValueIndices","isControlled","options","setGlobalFilteredValues","setFilteredValues","activeTagIndex","setActiveTagIndex","setActiveIndex","globalFilteredValues","filteredValues","selectionType","triggererRef","hasAutoCompleteInHeader","resetFilters","React","useEffect","firstItemOptionIndex","findIndex","option","value","length","isReactNative","_triggererRef$current","current","focus","onInputValueChange","_ref2","_props$onInputValueCh","name","call","filteredOptions","filter","optionValue","toLowerCase","includes","e","key","slice","onSelectionChange","_ref3","_props$onChange","values","console","log","_props$onInputValueCh2","_options$find","_props$onInputValueCh3","displayText","find","title","onChange","_AutoComplete","ref","_props$inputValue","_props$autoFocus","_React$useState","useState","_React$useState2","_slicedToArray","uncontrolledInputValue","_useDropdown2","setHasAutoCompleteInHeader","onTriggerClick","dropdownTriggerer","useCallback","map","_useAutoComplete","dropdownComponentIds","triggers","AutoComplete","defaultAutoFocusState","undefined","_jsx","BaseBox","position","children","BaseDropdownInputTrigger","_objectSpread","autoFocus","isSelectInput","syncInputValueWithSelection","_selectedOption$title","selectedOption","triggerEvent","_props$onClick","onClick","assignWithoutSideEffects","forwardRef","componentId"],"mappings":"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"}
1
+ {"version":3,"file":"AutoComplete.js","sources":["../../../../../../../src/components/Input/DropdownInputTriggers/AutoComplete.tsx"],"sourcesContent":["import React from 'react';\nimport { useDropdown } from '../../Dropdown/useDropdown';\nimport type { AutoCompleteProps, BaseDropdownInputTriggerProps } from './types';\nimport { BaseDropdownInputTrigger } from './BaseDropdownInputTrigger';\nimport { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';\nimport BaseBox from '~components/Box/BaseBox';\nimport type { BladeElementRef } from '~utils/types';\nimport { dropdownComponentIds } from '~components/Dropdown/dropdownComponentIds';\nimport { isReactNative } from '~utils';\n\nconst useAutoComplete = ({\n props,\n inputValue,\n setInputValue,\n getOptionValues,\n}: {\n props: AutoCompleteProps;\n setInputValue: (inputValue: string) => void;\n inputValue: string;\n getOptionValues: () => string[];\n}): {\n onTriggerKeydown: BaseDropdownInputTriggerProps['onTriggerKeydown'];\n onSelectionChange: BaseDropdownInputTriggerProps['onChange'];\n onInputValueChange: BaseDropdownInputTriggerProps['onInputValueChange'];\n} => {\n const {\n onTriggerKeydown: onBaseDropdownInputKeydown,\n isOpen,\n setIsOpen,\n selectedIndices,\n setSelectedIndices,\n setControlledValueIndices,\n isControlled,\n options,\n setFilteredValues: setGlobalFilteredValues,\n activeTagIndex,\n setActiveTagIndex,\n setActiveIndex,\n filteredValues: globalFilteredValues,\n selectionType,\n triggererRef,\n hasAutoCompleteInHeader,\n } = useDropdown();\n\n const resetFilters = (): void => setGlobalFilteredValues(getOptionValues());\n\n // Makes sure that first item is always in focus\n React.useEffect((): void => {\n const firstItemOptionIndex = options.findIndex(\n (option) => option.value === globalFilteredValues[0],\n );\n\n if (firstItemOptionIndex >= 0) {\n setActiveIndex(firstItemOptionIndex);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [globalFilteredValues.length, options.length]);\n\n // When input is empty or its single select, we want all items to be shown in filter on open of dropdown\n React.useEffect(() => {\n if (isOpen && !inputValue) {\n resetFilters();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen, options]);\n\n React.useEffect(() => {\n if (isOpen && selectionType === 'single') {\n resetFilters();\n }\n\n // Just setting autoFocus is setting the input in focus state but its not showing keyboard active.\n // We do this in web to get around that\n if (hasAutoCompleteInHeader && isOpen && !isReactNative()) {\n triggererRef.current?.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n const onInputValueChange: BaseDropdownInputTriggerProps['onInputValueChange'] = ({\n name,\n value,\n }) => {\n setInputValue(value ?? '');\n props.onInputValueChange?.({ name, value });\n setActiveTagIndex(-1);\n\n if (!isOpen) {\n setIsOpen(true);\n }\n\n // default filtering when filteredValues is uncontrolled\n if (!props.filteredValues) {\n // eslint-disable-next-line no-lonely-if\n if (value && options && options.length > 0) {\n const filteredOptions = getOptionValues().filter((optionValue) =>\n String(optionValue).toLowerCase().includes(value.toLowerCase()),\n );\n setGlobalFilteredValues(filteredOptions);\n } else {\n resetFilters();\n }\n }\n };\n\n const onTriggerKeydown: BaseDropdownInputTriggerProps['onTriggerKeydown'] = (e) => {\n // Pressing backspace on empty input should remove the last tag\n if (e.key === 'Backspace' && !inputValue && activeTagIndex < 0 && selectedIndices.length > 0) {\n if (isControlled) {\n setControlledValueIndices(selectedIndices.slice(0, -1));\n } else {\n setSelectedIndices(selectedIndices.slice(0, -1));\n }\n }\n onBaseDropdownInputKeydown?.(e);\n };\n\n const onSelectionChange: BaseDropdownInputTriggerProps['onChange'] = ({ values }) => {\n console.log('selection change', values);\n if (selectionType === 'multiple') {\n setInputValue('');\n props.onInputValueChange?.({ name: props.name, value: '' });\n setActiveTagIndex(-1);\n resetFilters();\n } else {\n const displayText = options.find((option) => option.value === values[0])?.title;\n props.onInputValueChange?.({\n name: props.name,\n value: displayText,\n });\n // Use displayText as inputValue only if its not controlled by user\n if (hasAutoCompleteInHeader) {\n setInputValue('');\n } else if (typeof props.value === 'undefined') {\n setInputValue(displayText ?? '');\n }\n }\n props.onChange?.({ name: props.name, values });\n };\n return {\n onSelectionChange,\n onTriggerKeydown,\n onInputValueChange,\n };\n};\n\nconst _AutoComplete = (\n props: AutoCompleteProps,\n ref: React.ForwardedRef<BladeElementRef>,\n): React.ReactElement => {\n const [uncontrolledInputValue, setInputValue] = React.useState('');\n const inputValue = props.inputValue ?? uncontrolledInputValue;\n\n const {\n options,\n setFilteredValues: setGlobalFilteredValues,\n hasAutoCompleteInHeader,\n setHasAutoCompleteInHeader,\n onTriggerClick,\n dropdownTriggerer,\n } = useDropdown();\n\n const getOptionValues = React.useCallback(() => {\n return options.map((option) => option.value);\n }, [options]);\n\n const { onSelectionChange, onTriggerKeydown, onInputValueChange } = useAutoComplete({\n props,\n inputValue,\n setInputValue,\n getOptionValues,\n });\n\n React.useEffect(() => {\n if (dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete) {\n // When AutoComplete is mounted but not as trigger,\n // it has to be somewhere in the BottomSheet (most likely header based on UI but works in other parts too)\n setHasAutoCompleteInHeader(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // handles controlled filteredValues state (syncs it with our global filteredValues)\n React.useEffect(() => {\n if (props.filteredValues) {\n setGlobalFilteredValues(props.filteredValues);\n }\n }, [props.filteredValues, setGlobalFilteredValues]);\n\n // set autoFocus to true when used inside bottomsheet\n const defaultAutoFocusState = hasAutoCompleteInHeader ? true : undefined;\n\n return (\n <BaseBox position=\"relative\">\n <BaseDropdownInputTrigger\n {...props}\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={props.autoFocus ?? defaultAutoFocusState}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref={ref as any}\n onChange={onSelectionChange}\n isSelectInput={false}\n inputValue={inputValue}\n syncInputValueWithSelection={(value) => {\n if (!value) {\n setInputValue('');\n return;\n }\n const selectedOption = options.find((option) => option.value === value);\n setInputValue(selectedOption?.title ?? '');\n }}\n onTriggerKeydown={onTriggerKeydown}\n onInputValueChange={onInputValueChange}\n onTriggerClick={(triggerEvent) => {\n if (!hasAutoCompleteInHeader) {\n // we don't want clicking on autocomplete to open / close Dropdown when it is used inside BottomSheet's header\n onTriggerClick();\n }\n props?.onClick?.(triggerEvent);\n }}\n />\n </BaseBox>\n );\n};\n\n/**\n * ### AutoComplete\n *\n * Extension on top of SelectInput which allows you type and filter between ActionList items\n *\n * To be used in combination of `Dropdown` and `ActionList` component\n *\n * ---\n *\n * #### Usage in Desktop\n *\n * ```diff\n * <Dropdown>\n * + <AutoComplete label=\"Select Fruits\" />\n * <DropdownOverlay>\n * <ActionList>\n * <ActionListItem title=\"Mango\" value=\"mango\" />\n * <ActionListItem title=\"Apple\" value=\"apple\" />\n * </ActionList>\n * </DropdownOverlay>\n * </Dropdown>\n * ```\n *\n * #### Usage in Mobile\n *\n * ```diff\n * <Dropdown>\n * + <SelectInput label=\"Select Fruits\" />\n * <BottomSheet>\n * <BottomSheetHeader>\n * + <AutoComplete label=\"Select Fruits\" />\n * </BottomSheetHeader>\n * <BottomSheetBody>\n * <ActionList>\n * <ActionListItem title=\"Mango\" value=\"mango\" />\n * <ActionListItem title=\"Apple\" value=\"apple\" />\n * </ActionList>\n * </BottomSheetBody>\n * </BottomSheet>\n * </Dropdown>\n * ```\n *\n * ---\n *\n * Checkout {@link https://blade.razorpay.com/?path=/docs/components-dropdown-with-autocomplete--with-single-select AutoComplete Documentation}.\n */\nconst AutoComplete = assignWithoutSideEffects(React.forwardRef(_AutoComplete), {\n componentId: dropdownComponentIds.triggers.AutoComplete,\n});\n\nexport { AutoComplete };\n"],"names":["useAutoComplete","_ref","props","inputValue","setInputValue","getOptionValues","_useDropdown","useDropdown","onBaseDropdownInputKeydown","onTriggerKeydown","isOpen","setIsOpen","selectedIndices","setSelectedIndices","setControlledValueIndices","isControlled","options","setGlobalFilteredValues","setFilteredValues","activeTagIndex","setActiveTagIndex","setActiveIndex","globalFilteredValues","filteredValues","selectionType","triggererRef","hasAutoCompleteInHeader","resetFilters","React","useEffect","firstItemOptionIndex","findIndex","option","value","length","isReactNative","_triggererRef$current","current","focus","onInputValueChange","_ref2","_props$onInputValueCh","name","call","filteredOptions","filter","optionValue","String","toLowerCase","includes","e","key","slice","onSelectionChange","_ref3","_props$onChange","values","console","log","_props$onInputValueCh2","_options$find","_props$onInputValueCh3","displayText","find","title","onChange","_AutoComplete","ref","_props$inputValue","_props$autoFocus","_React$useState","useState","_React$useState2","_slicedToArray","uncontrolledInputValue","_useDropdown2","setHasAutoCompleteInHeader","onTriggerClick","dropdownTriggerer","useCallback","map","_useAutoComplete","dropdownComponentIds","triggers","AutoComplete","defaultAutoFocusState","undefined","_jsx","BaseBox","position","children","BaseDropdownInputTrigger","_objectSpread","autoFocus","isSelectInput","syncInputValueWithSelection","_selectedOption$title","selectedOption","triggerEvent","_props$onClick","onClick","assignWithoutSideEffects","forwardRef","componentId"],"mappings":"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"}
@@ -26,7 +26,7 @@ function filterOptions() {
26
26
  var filter = arguments.length > 1 ? arguments[1] : undefined;
27
27
  var exclude = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
28
28
  return options.filter(function (option) {
29
- var matches = option.toLowerCase().startsWith(filter.toLowerCase());
29
+ var matches = String(option).toLowerCase().startsWith(filter.toLowerCase());
30
30
  return matches && !exclude.includes(option);
31
31
  });
32
32
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dropdownUtils.js","sources":["../../../../../../src/components/Dropdown/dropdownUtils.ts"],"sourcesContent":["/*\n * This content is licensed according to the W3C Software License at\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n * This software or document includes material copied from or derived from\n * https://www.w3.org/WAI/ARIA/apg/example-index/combobox/combobox-select-only.html.\n * Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang)\n */\n\nimport type { DropdownContextType, OptionsType } from './useDropdown';\nimport { dropdownComponentIds } from './dropdownComponentIds';\nimport type { SpacingValueType } from '~components/Box/BaseBox';\n\nexport type SelectActionsType =\n | 'Close'\n | 'CloseSelect'\n | 'First'\n | 'Last'\n | 'Next'\n | 'Open'\n | 'PageDown'\n | 'PageUp'\n | 'Previous'\n | 'Select'\n | 'Type';\n\n// Save a list of named combobox actions, for future readability\nconst SelectActions: Record<SelectActionsType, SelectActionsType> = {\n Close: 'Close',\n CloseSelect: 'CloseSelect',\n First: 'First',\n Last: 'Last',\n Next: 'Next',\n Open: 'Open',\n PageDown: 'PageDown',\n PageUp: 'PageUp',\n Previous: 'Previous',\n Select: 'Select',\n Type: 'Type',\n};\n\n/**\n * Filter an array of options against an input string\n * returns an array of options that begin with the filter string, case-independent\n *\n */\nexport function filterOptions(\n options: string[] = [],\n filter: string,\n exclude: string[] = [],\n): string[] {\n return options.filter((option) => {\n const matches = option.toLowerCase().startsWith(filter.toLowerCase());\n return matches && !exclude.includes(option);\n });\n}\n\n/**\n * Map a keypress to action\n */\nexport function getActionFromKey(\n e: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>,\n isOpen: boolean,\n dropdownTriggerer: DropdownContextType['dropdownTriggerer'],\n): SelectActionsType | undefined {\n if (!e) {\n return undefined;\n }\n\n const { altKey, ctrlKey, metaKey } = e;\n let key = '';\n if ('key' in e) {\n key = e.key;\n }\n const openKeys = ['ArrowDown', 'ArrowUp', 'Enter', ' ']; // all keys that will do the default open action\n if (!key) return undefined;\n // handle opening when closed\n if (!isOpen && key && openKeys.includes(key)) {\n return SelectActions.Open;\n }\n\n // home and end move the selected option when open or closed\n if (key === 'Home') {\n return SelectActions.First;\n }\n if (key === 'End') {\n return SelectActions.Last;\n }\n\n // handle typing characters when open or closed\n if (\n key === 'Backspace' ||\n key === 'Clear' ||\n (key.length === 1 && key !== ' ' && !altKey && !ctrlKey && !metaKey)\n ) {\n return SelectActions.Type;\n }\n\n // handle keys when open\n if (isOpen) {\n if (key === 'ArrowUp' && altKey) {\n return SelectActions.CloseSelect;\n } else if (key === 'ArrowDown' && !altKey) {\n return SelectActions.Next;\n } else if (key === 'ArrowUp') {\n return SelectActions.Previous;\n } else if (key === 'PageUp') {\n return SelectActions.PageUp;\n } else if (key === 'PageDown') {\n return SelectActions.PageDown;\n } else if (key === 'Escape') {\n return SelectActions.Close;\n } else if (\n key === 'Enter' ||\n // we ignore the spacebar select in autocomplete since hitting spacebar might be expected while typing\n (dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete &&\n dropdownTriggerer !== dropdownComponentIds.triggers.SearchInput &&\n key === ' ')\n ) {\n return SelectActions.CloseSelect;\n }\n }\n\n return undefined;\n}\n\n/**\n * Return the index of an option from an array of options, based on a search string\n *\n * if the filter is multiple iterations of the same letter (e.g \"aaa\"), then cycle through first-letter matches\n **/\nexport function getIndexByLetter(options: string[], filter: string, startIndex = 0): number {\n const orderedOptions = [...options.slice(startIndex), ...options.slice(0, startIndex)];\n const firstMatch = filterOptions(orderedOptions, filter)[0];\n const allSameLetter = (array: string[]): boolean => array.every((letter) => letter === array[0]);\n\n // first check if there is an exact match for the typed string\n if (firstMatch) {\n return options.indexOf(firstMatch);\n }\n\n // if the same letter is being repeated, cycle through first-letter matches\n else if (allSameLetter(filter.split(''))) {\n const matches = filterOptions(orderedOptions, filter[0]);\n return options.indexOf(matches[0]);\n }\n\n // if no matches, return -1\n else {\n return -1;\n }\n}\n\n/**\n * This functions makes sure the optionsIndex is not going out of possible options\n */\nexport function getUpdatedIndex({\n currentIndex,\n maxIndex,\n actionType,\n}: {\n currentIndex: number;\n maxIndex: number;\n actionType: SelectActionsType;\n}): number {\n // On PageUP or PageDown, we jump focus by 10 items or to the first or last element\n // Details: https://www.w3.org/WAI/ARIA/apg/example-index/combobox/combobox-select-only.html#:~:text=PageUp,to%20last%20option).\n const pageSize = 10;\n\n switch (actionType) {\n case SelectActions.First:\n return 0;\n case SelectActions.Last:\n return maxIndex;\n case SelectActions.Previous:\n return Math.max(0, currentIndex - 1);\n case SelectActions.Next:\n return Math.min(maxIndex, currentIndex + 1);\n case SelectActions.PageUp:\n return Math.max(0, currentIndex - pageSize);\n case SelectActions.PageDown:\n return Math.min(maxIndex, currentIndex + pageSize);\n default:\n return currentIndex;\n }\n}\n\n/**\n * Checks if the given HTML element is visible on screen\n */\nexport function isElementVisibleOnScreen(element: HTMLElement): boolean {\n const bounding = element.getBoundingClientRect();\n\n return (\n bounding.top >= 0 &&\n bounding.left >= 0 &&\n bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n bounding.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n}\n\n/**\n * Checks if element is visible inside the given container\n */\nfunction isElementVisible(container: HTMLElement, element: HTMLElement): boolean {\n const containerRect = container.getBoundingClientRect();\n const elementRect = element.getBoundingClientRect();\n\n const isVerticalVisible =\n elementRect.top >= containerRect.top && elementRect.bottom <= containerRect.bottom;\n\n return isVerticalVisible;\n}\n\n/**\n * Checks if the dropdown is scrollable\n */\nexport function isScrollable(element: HTMLElement): boolean {\n return element && element.clientHeight < element.scrollHeight;\n}\n\ntype ActionsType = {\n setIsOpen: DropdownContextType['setIsOpen'];\n close: DropdownContextType['close'];\n selectCurrentOption: () => void;\n onOptionChange: (action: SelectActionsType) => void;\n onComboType: (letter: string, action: SelectActionsType) => void;\n};\n/**\n * Performs the action when actionType is passed\n *\n * This function handles all the keydown actions.\n */\nexport const performAction = (\n action: SelectActionsType,\n payload: {\n event: React.KeyboardEvent<HTMLInputElement | HTMLButtonElement>;\n },\n actions: ActionsType,\n): boolean => {\n const { event } = payload;\n\n switch (action) {\n case SelectActions.Last:\n // @ts-expect-error: intentional fallthrough, ignoring the warning\n case SelectActions.First:\n actions.setIsOpen(true);\n // intentional fallthrough\n case SelectActions.Next:\n case SelectActions.Previous:\n case SelectActions.PageUp:\n case SelectActions.PageDown:\n event.preventDefault();\n actions.onOptionChange(action);\n return true;\n case SelectActions.CloseSelect:\n event.preventDefault();\n actions.selectCurrentOption();\n return true;\n case SelectActions.Close:\n event.preventDefault();\n actions.close();\n return true;\n case SelectActions.Type:\n actions.onComboType(event.key, action);\n return true;\n case SelectActions.Open:\n event.preventDefault();\n actions.setIsOpen(true);\n return true;\n\n default:\n break;\n }\n\n return false;\n};\n\n/**\n * When options list is large, it can have a scrollbar.\n *\n * This function ensures the active option is always in the viewport\n */\nexport const ensureScrollVisiblity = (\n newActiveIndex: number,\n containerElement: HTMLElement | null,\n options: string[],\n): void => {\n // ensure the new option is in view\n if (containerElement) {\n if (isScrollable(containerElement)) {\n const optionEl = containerElement.querySelectorAll<HTMLElement>(\n '[role=\"option\"], [role=\"menuitem\"]',\n );\n // Making sure its the same element as the one from options state\n if (\n newActiveIndex >= 0 &&\n optionEl[newActiveIndex].dataset.value === options[newActiveIndex]\n ) {\n const activeElement = optionEl[newActiveIndex];\n\n if (!isElementVisible(containerElement, activeElement)) {\n activeElement.scrollIntoView({ inline: 'nearest' });\n }\n\n if (!isElementVisibleOnScreen(optionEl[newActiveIndex])) {\n activeElement.scrollIntoView({ behavior: 'smooth' });\n }\n }\n }\n }\n};\n\n/**\n * value that is set in the actual form input\n */\nexport const makeInputValue = (selectedIndices: number[], options: OptionsType): string => {\n if (options.length === 0) {\n return '';\n }\n return selectedIndices.map((selectedIndex) => options[selectedIndex]?.value).join(', ');\n};\n\n/**\n * Value that is displayed inside the select field\n */\nexport const makeInputDisplayValue = (selectedIndices: number[], options: OptionsType): string => {\n // When no item is selected or no item is present\n if (options.length === 0 || selectedIndices.length === 0) {\n return '';\n }\n\n // When one item is selected, we display that item's title in input\n if (selectedIndices.length === 1) {\n return options[selectedIndices[0]]?.title;\n }\n\n // When more than one item is selected, we display the count of items\n return `${selectedIndices.length} items selected`;\n};\n\nexport type DropdownPosition = {\n top?: SpacingValueType;\n bottom?: SpacingValueType;\n left?: SpacingValueType;\n right?: SpacingValueType;\n};\n"],"names":["SelectActions","Close","CloseSelect","First","Last","Next","Open","PageDown","PageUp","Previous","Select","Type","filterOptions","options","arguments","length","undefined","filter","exclude","option","matches","toLowerCase","startsWith","includes","getActionFromKey","e","isOpen","dropdownTriggerer","altKey","ctrlKey","metaKey","key","openKeys","dropdownComponentIds","triggers","AutoComplete","SearchInput","getIndexByLetter","startIndex","orderedOptions","concat","_toConsumableArray","slice","firstMatch","allSameLetter","array","every","letter","indexOf","split","getUpdatedIndex","_ref","currentIndex","maxIndex","actionType","pageSize","Math","max","min","isElementVisibleOnScreen","element","bounding","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","isElementVisible","container","containerRect","elementRect","isVerticalVisible","isScrollable","scrollHeight","performAction","action","payload","actions","event","setIsOpen","preventDefault","onOptionChange","selectCurrentOption","close","onComboType","ensureScrollVisiblity","newActiveIndex","containerElement","optionEl","querySelectorAll","dataset","value","activeElement","scrollIntoView","inline","behavior","makeInputValue","selectedIndices","map","selectedIndex","_options$selectedInde","join","makeInputDisplayValue","_options$selectedIndi","title"],"mappings":"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"}
1
+ {"version":3,"file":"dropdownUtils.js","sources":["../../../../../../src/components/Dropdown/dropdownUtils.ts"],"sourcesContent":["/*\n * This content is licensed according to the W3C Software License at\n * https://www.w3.org/Consortium/Legal/2015/copyright-software-and-document\n *\n * This software or document includes material copied from or derived from\n * https://www.w3.org/WAI/ARIA/apg/example-index/combobox/combobox-select-only.html.\n * Copyright © 2022 W3C® (MIT, ERCIM, Keio, Beihang)\n */\n\nimport type { DropdownContextType, OptionsType } from './useDropdown';\nimport { dropdownComponentIds } from './dropdownComponentIds';\nimport type { SpacingValueType } from '~components/Box/BaseBox';\n\nexport type SelectActionsType =\n | 'Close'\n | 'CloseSelect'\n | 'First'\n | 'Last'\n | 'Next'\n | 'Open'\n | 'PageDown'\n | 'PageUp'\n | 'Previous'\n | 'Select'\n | 'Type';\n\n// Save a list of named combobox actions, for future readability\nconst SelectActions: Record<SelectActionsType, SelectActionsType> = {\n Close: 'Close',\n CloseSelect: 'CloseSelect',\n First: 'First',\n Last: 'Last',\n Next: 'Next',\n Open: 'Open',\n PageDown: 'PageDown',\n PageUp: 'PageUp',\n Previous: 'Previous',\n Select: 'Select',\n Type: 'Type',\n};\n\n/**\n * Filter an array of options against an input string\n * returns an array of options that begin with the filter string, case-independent\n *\n */\nexport function filterOptions(\n options: string[] = [],\n filter: string,\n exclude: string[] = [],\n): string[] {\n return options.filter((option) => {\n const matches = String(option).toLowerCase().startsWith(filter.toLowerCase());\n return matches && !exclude.includes(option);\n });\n}\n\n/**\n * Map a keypress to action\n */\nexport function getActionFromKey(\n e: React.MouseEvent<HTMLElement> | React.KeyboardEvent<HTMLElement>,\n isOpen: boolean,\n dropdownTriggerer: DropdownContextType['dropdownTriggerer'],\n): SelectActionsType | undefined {\n if (!e) {\n return undefined;\n }\n\n const { altKey, ctrlKey, metaKey } = e;\n let key = '';\n if ('key' in e) {\n key = e.key;\n }\n const openKeys = ['ArrowDown', 'ArrowUp', 'Enter', ' ']; // all keys that will do the default open action\n if (!key) return undefined;\n // handle opening when closed\n if (!isOpen && key && openKeys.includes(key)) {\n return SelectActions.Open;\n }\n\n // home and end move the selected option when open or closed\n if (key === 'Home') {\n return SelectActions.First;\n }\n if (key === 'End') {\n return SelectActions.Last;\n }\n\n // handle typing characters when open or closed\n if (\n key === 'Backspace' ||\n key === 'Clear' ||\n (key.length === 1 && key !== ' ' && !altKey && !ctrlKey && !metaKey)\n ) {\n return SelectActions.Type;\n }\n\n // handle keys when open\n if (isOpen) {\n if (key === 'ArrowUp' && altKey) {\n return SelectActions.CloseSelect;\n } else if (key === 'ArrowDown' && !altKey) {\n return SelectActions.Next;\n } else if (key === 'ArrowUp') {\n return SelectActions.Previous;\n } else if (key === 'PageUp') {\n return SelectActions.PageUp;\n } else if (key === 'PageDown') {\n return SelectActions.PageDown;\n } else if (key === 'Escape') {\n return SelectActions.Close;\n } else if (\n key === 'Enter' ||\n // we ignore the spacebar select in autocomplete since hitting spacebar might be expected while typing\n (dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete &&\n dropdownTriggerer !== dropdownComponentIds.triggers.SearchInput &&\n key === ' ')\n ) {\n return SelectActions.CloseSelect;\n }\n }\n\n return undefined;\n}\n\n/**\n * Return the index of an option from an array of options, based on a search string\n *\n * if the filter is multiple iterations of the same letter (e.g \"aaa\"), then cycle through first-letter matches\n **/\nexport function getIndexByLetter(options: string[], filter: string, startIndex = 0): number {\n const orderedOptions = [...options.slice(startIndex), ...options.slice(0, startIndex)];\n const firstMatch = filterOptions(orderedOptions, filter)[0];\n const allSameLetter = (array: string[]): boolean => array.every((letter) => letter === array[0]);\n\n // first check if there is an exact match for the typed string\n if (firstMatch) {\n return options.indexOf(firstMatch);\n }\n\n // if the same letter is being repeated, cycle through first-letter matches\n else if (allSameLetter(filter.split(''))) {\n const matches = filterOptions(orderedOptions, filter[0]);\n return options.indexOf(matches[0]);\n }\n\n // if no matches, return -1\n else {\n return -1;\n }\n}\n\n/**\n * This functions makes sure the optionsIndex is not going out of possible options\n */\nexport function getUpdatedIndex({\n currentIndex,\n maxIndex,\n actionType,\n}: {\n currentIndex: number;\n maxIndex: number;\n actionType: SelectActionsType;\n}): number {\n // On PageUP or PageDown, we jump focus by 10 items or to the first or last element\n // Details: https://www.w3.org/WAI/ARIA/apg/example-index/combobox/combobox-select-only.html#:~:text=PageUp,to%20last%20option).\n const pageSize = 10;\n\n switch (actionType) {\n case SelectActions.First:\n return 0;\n case SelectActions.Last:\n return maxIndex;\n case SelectActions.Previous:\n return Math.max(0, currentIndex - 1);\n case SelectActions.Next:\n return Math.min(maxIndex, currentIndex + 1);\n case SelectActions.PageUp:\n return Math.max(0, currentIndex - pageSize);\n case SelectActions.PageDown:\n return Math.min(maxIndex, currentIndex + pageSize);\n default:\n return currentIndex;\n }\n}\n\n/**\n * Checks if the given HTML element is visible on screen\n */\nexport function isElementVisibleOnScreen(element: HTMLElement): boolean {\n const bounding = element.getBoundingClientRect();\n\n return (\n bounding.top >= 0 &&\n bounding.left >= 0 &&\n bounding.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n bounding.right <= (window.innerWidth || document.documentElement.clientWidth)\n );\n}\n\n/**\n * Checks if element is visible inside the given container\n */\nfunction isElementVisible(container: HTMLElement, element: HTMLElement): boolean {\n const containerRect = container.getBoundingClientRect();\n const elementRect = element.getBoundingClientRect();\n\n const isVerticalVisible =\n elementRect.top >= containerRect.top && elementRect.bottom <= containerRect.bottom;\n\n return isVerticalVisible;\n}\n\n/**\n * Checks if the dropdown is scrollable\n */\nexport function isScrollable(element: HTMLElement): boolean {\n return element && element.clientHeight < element.scrollHeight;\n}\n\ntype ActionsType = {\n setIsOpen: DropdownContextType['setIsOpen'];\n close: DropdownContextType['close'];\n selectCurrentOption: () => void;\n onOptionChange: (action: SelectActionsType) => void;\n onComboType: (letter: string, action: SelectActionsType) => void;\n};\n/**\n * Performs the action when actionType is passed\n *\n * This function handles all the keydown actions.\n */\nexport const performAction = (\n action: SelectActionsType,\n payload: {\n event: React.KeyboardEvent<HTMLInputElement | HTMLButtonElement>;\n },\n actions: ActionsType,\n): boolean => {\n const { event } = payload;\n\n switch (action) {\n case SelectActions.Last:\n // @ts-expect-error: intentional fallthrough, ignoring the warning\n case SelectActions.First:\n actions.setIsOpen(true);\n // intentional fallthrough\n case SelectActions.Next:\n case SelectActions.Previous:\n case SelectActions.PageUp:\n case SelectActions.PageDown:\n event.preventDefault();\n actions.onOptionChange(action);\n return true;\n case SelectActions.CloseSelect:\n event.preventDefault();\n actions.selectCurrentOption();\n return true;\n case SelectActions.Close:\n event.preventDefault();\n actions.close();\n return true;\n case SelectActions.Type:\n actions.onComboType(event.key, action);\n return true;\n case SelectActions.Open:\n event.preventDefault();\n actions.setIsOpen(true);\n return true;\n\n default:\n break;\n }\n\n return false;\n};\n\n/**\n * When options list is large, it can have a scrollbar.\n *\n * This function ensures the active option is always in the viewport\n */\nexport const ensureScrollVisiblity = (\n newActiveIndex: number,\n containerElement: HTMLElement | null,\n options: string[],\n): void => {\n // ensure the new option is in view\n if (containerElement) {\n if (isScrollable(containerElement)) {\n const optionEl = containerElement.querySelectorAll<HTMLElement>(\n '[role=\"option\"], [role=\"menuitem\"]',\n );\n // Making sure its the same element as the one from options state\n if (\n newActiveIndex >= 0 &&\n optionEl[newActiveIndex].dataset.value === options[newActiveIndex]\n ) {\n const activeElement = optionEl[newActiveIndex];\n\n if (!isElementVisible(containerElement, activeElement)) {\n activeElement.scrollIntoView({ inline: 'nearest' });\n }\n\n if (!isElementVisibleOnScreen(optionEl[newActiveIndex])) {\n activeElement.scrollIntoView({ behavior: 'smooth' });\n }\n }\n }\n }\n};\n\n/**\n * value that is set in the actual form input\n */\nexport const makeInputValue = (selectedIndices: number[], options: OptionsType): string => {\n if (options.length === 0) {\n return '';\n }\n return selectedIndices.map((selectedIndex) => options[selectedIndex]?.value).join(', ');\n};\n\n/**\n * Value that is displayed inside the select field\n */\nexport const makeInputDisplayValue = (selectedIndices: number[], options: OptionsType): string => {\n // When no item is selected or no item is present\n if (options.length === 0 || selectedIndices.length === 0) {\n return '';\n }\n\n // When one item is selected, we display that item's title in input\n if (selectedIndices.length === 1) {\n return options[selectedIndices[0]]?.title;\n }\n\n // When more than one item is selected, we display the count of items\n return `${selectedIndices.length} items selected`;\n};\n\nexport type DropdownPosition = {\n top?: SpacingValueType;\n bottom?: SpacingValueType;\n left?: SpacingValueType;\n right?: SpacingValueType;\n};\n"],"names":["SelectActions","Close","CloseSelect","First","Last","Next","Open","PageDown","PageUp","Previous","Select","Type","filterOptions","options","arguments","length","undefined","filter","exclude","option","matches","String","toLowerCase","startsWith","includes","getActionFromKey","e","isOpen","dropdownTriggerer","altKey","ctrlKey","metaKey","key","openKeys","dropdownComponentIds","triggers","AutoComplete","SearchInput","getIndexByLetter","startIndex","orderedOptions","concat","_toConsumableArray","slice","firstMatch","allSameLetter","array","every","letter","indexOf","split","getUpdatedIndex","_ref","currentIndex","maxIndex","actionType","pageSize","Math","max","min","isElementVisibleOnScreen","element","bounding","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","isElementVisible","container","containerRect","elementRect","isVerticalVisible","isScrollable","scrollHeight","performAction","action","payload","actions","event","setIsOpen","preventDefault","onOptionChange","selectCurrentOption","close","onComboType","ensureScrollVisiblity","newActiveIndex","containerElement","optionEl","querySelectorAll","dataset","value","activeElement","scrollIntoView","inline","behavior","makeInputValue","selectedIndices","map","selectedIndex","_options$selectedInde","join","makeInputDisplayValue","_options$selectedIndi","title"],"mappings":"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"}
@@ -90,7 +90,7 @@ var useAutoComplete = function useAutoComplete(_ref) {
90
90
  // eslint-disable-next-line no-lonely-if
91
91
  if (value && options && options.length > 0) {
92
92
  var filteredOptions = getOptionValues().filter(function (optionValue) {
93
- return optionValue.toLowerCase().includes(value.toLowerCase());
93
+ return String(optionValue).toLowerCase().includes(value.toLowerCase());
94
94
  });
95
95
  setGlobalFilteredValues(filteredOptions);
96
96
  } else {
@@ -1 +1 @@
1
- {"version":3,"file":"AutoComplete.js","sources":["../../../../../../../src/components/Input/DropdownInputTriggers/AutoComplete.tsx"],"sourcesContent":["import React from 'react';\nimport { useDropdown } from '../../Dropdown/useDropdown';\nimport type { AutoCompleteProps, BaseDropdownInputTriggerProps } from './types';\nimport { BaseDropdownInputTrigger } from './BaseDropdownInputTrigger';\nimport { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';\nimport BaseBox from '~components/Box/BaseBox';\nimport type { BladeElementRef } from '~utils/types';\nimport { dropdownComponentIds } from '~components/Dropdown/dropdownComponentIds';\nimport { isReactNative } from '~utils';\n\nconst useAutoComplete = ({\n props,\n inputValue,\n setInputValue,\n getOptionValues,\n}: {\n props: AutoCompleteProps;\n setInputValue: (inputValue: string) => void;\n inputValue: string;\n getOptionValues: () => string[];\n}): {\n onTriggerKeydown: BaseDropdownInputTriggerProps['onTriggerKeydown'];\n onSelectionChange: BaseDropdownInputTriggerProps['onChange'];\n onInputValueChange: BaseDropdownInputTriggerProps['onInputValueChange'];\n} => {\n const {\n onTriggerKeydown: onBaseDropdownInputKeydown,\n isOpen,\n setIsOpen,\n selectedIndices,\n setSelectedIndices,\n setControlledValueIndices,\n isControlled,\n options,\n setFilteredValues: setGlobalFilteredValues,\n activeTagIndex,\n setActiveTagIndex,\n setActiveIndex,\n filteredValues: globalFilteredValues,\n selectionType,\n triggererRef,\n hasAutoCompleteInHeader,\n } = useDropdown();\n\n const resetFilters = (): void => setGlobalFilteredValues(getOptionValues());\n\n // Makes sure that first item is always in focus\n React.useEffect((): void => {\n const firstItemOptionIndex = options.findIndex(\n (option) => option.value === globalFilteredValues[0],\n );\n\n if (firstItemOptionIndex >= 0) {\n setActiveIndex(firstItemOptionIndex);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [globalFilteredValues.length, options.length]);\n\n // When input is empty or its single select, we want all items to be shown in filter on open of dropdown\n React.useEffect(() => {\n if (isOpen && !inputValue) {\n resetFilters();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen, options]);\n\n React.useEffect(() => {\n if (isOpen && selectionType === 'single') {\n resetFilters();\n }\n\n // Just setting autoFocus is setting the input in focus state but its not showing keyboard active.\n // We do this in web to get around that\n if (hasAutoCompleteInHeader && isOpen && !isReactNative()) {\n triggererRef.current?.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n const onInputValueChange: BaseDropdownInputTriggerProps['onInputValueChange'] = ({\n name,\n value,\n }) => {\n setInputValue(value ?? '');\n props.onInputValueChange?.({ name, value });\n setActiveTagIndex(-1);\n\n if (!isOpen) {\n setIsOpen(true);\n }\n\n // default filtering when filteredValues is uncontrolled\n if (!props.filteredValues) {\n // eslint-disable-next-line no-lonely-if\n if (value && options && options.length > 0) {\n const filteredOptions = getOptionValues().filter((optionValue) =>\n optionValue.toLowerCase().includes(value.toLowerCase()),\n );\n setGlobalFilteredValues(filteredOptions);\n } else {\n resetFilters();\n }\n }\n };\n\n const onTriggerKeydown: BaseDropdownInputTriggerProps['onTriggerKeydown'] = (e) => {\n // Pressing backspace on empty input should remove the last tag\n if (e.key === 'Backspace' && !inputValue && activeTagIndex < 0 && selectedIndices.length > 0) {\n if (isControlled) {\n setControlledValueIndices(selectedIndices.slice(0, -1));\n } else {\n setSelectedIndices(selectedIndices.slice(0, -1));\n }\n }\n onBaseDropdownInputKeydown?.(e);\n };\n\n const onSelectionChange: BaseDropdownInputTriggerProps['onChange'] = ({ values }) => {\n console.log('selection change', values);\n if (selectionType === 'multiple') {\n setInputValue('');\n props.onInputValueChange?.({ name: props.name, value: '' });\n setActiveTagIndex(-1);\n resetFilters();\n } else {\n const displayText = options.find((option) => option.value === values[0])?.title;\n props.onInputValueChange?.({\n name: props.name,\n value: displayText,\n });\n // Use displayText as inputValue only if its not controlled by user\n if (hasAutoCompleteInHeader) {\n setInputValue('');\n } else if (typeof props.value === 'undefined') {\n setInputValue(displayText ?? '');\n }\n }\n props.onChange?.({ name: props.name, values });\n };\n return {\n onSelectionChange,\n onTriggerKeydown,\n onInputValueChange,\n };\n};\n\nconst _AutoComplete = (\n props: AutoCompleteProps,\n ref: React.ForwardedRef<BladeElementRef>,\n): React.ReactElement => {\n const [uncontrolledInputValue, setInputValue] = React.useState('');\n const inputValue = props.inputValue ?? uncontrolledInputValue;\n\n const {\n options,\n setFilteredValues: setGlobalFilteredValues,\n hasAutoCompleteInHeader,\n setHasAutoCompleteInHeader,\n onTriggerClick,\n dropdownTriggerer,\n } = useDropdown();\n\n const getOptionValues = React.useCallback(() => {\n return options.map((option) => option.value);\n }, [options]);\n\n const { onSelectionChange, onTriggerKeydown, onInputValueChange } = useAutoComplete({\n props,\n inputValue,\n setInputValue,\n getOptionValues,\n });\n\n React.useEffect(() => {\n if (dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete) {\n // When AutoComplete is mounted but not as trigger,\n // it has to be somewhere in the BottomSheet (most likely header based on UI but works in other parts too)\n setHasAutoCompleteInHeader(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // handles controlled filteredValues state (syncs it with our global filteredValues)\n React.useEffect(() => {\n if (props.filteredValues) {\n setGlobalFilteredValues(props.filteredValues);\n }\n }, [props.filteredValues, setGlobalFilteredValues]);\n\n // set autoFocus to true when used inside bottomsheet\n const defaultAutoFocusState = hasAutoCompleteInHeader ? true : undefined;\n\n return (\n <BaseBox position=\"relative\">\n <BaseDropdownInputTrigger\n {...props}\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={props.autoFocus ?? defaultAutoFocusState}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref={ref as any}\n onChange={onSelectionChange}\n isSelectInput={false}\n inputValue={inputValue}\n syncInputValueWithSelection={(value) => {\n if (!value) {\n setInputValue('');\n return;\n }\n const selectedOption = options.find((option) => option.value === value);\n setInputValue(selectedOption?.title ?? '');\n }}\n onTriggerKeydown={onTriggerKeydown}\n onInputValueChange={onInputValueChange}\n onTriggerClick={(triggerEvent) => {\n if (!hasAutoCompleteInHeader) {\n // we don't want clicking on autocomplete to open / close Dropdown when it is used inside BottomSheet's header\n onTriggerClick();\n }\n props?.onClick?.(triggerEvent);\n }}\n />\n </BaseBox>\n );\n};\n\n/**\n * ### AutoComplete\n *\n * Extension on top of SelectInput which allows you type and filter between ActionList items\n *\n * To be used in combination of `Dropdown` and `ActionList` component\n *\n * ---\n *\n * #### Usage in Desktop\n *\n * ```diff\n * <Dropdown>\n * + <AutoComplete label=\"Select Fruits\" />\n * <DropdownOverlay>\n * <ActionList>\n * <ActionListItem title=\"Mango\" value=\"mango\" />\n * <ActionListItem title=\"Apple\" value=\"apple\" />\n * </ActionList>\n * </DropdownOverlay>\n * </Dropdown>\n * ```\n *\n * #### Usage in Mobile\n *\n * ```diff\n * <Dropdown>\n * + <SelectInput label=\"Select Fruits\" />\n * <BottomSheet>\n * <BottomSheetHeader>\n * + <AutoComplete label=\"Select Fruits\" />\n * </BottomSheetHeader>\n * <BottomSheetBody>\n * <ActionList>\n * <ActionListItem title=\"Mango\" value=\"mango\" />\n * <ActionListItem title=\"Apple\" value=\"apple\" />\n * </ActionList>\n * </BottomSheetBody>\n * </BottomSheet>\n * </Dropdown>\n * ```\n *\n * ---\n *\n * Checkout {@link https://blade.razorpay.com/?path=/docs/components-dropdown-with-autocomplete--with-single-select AutoComplete Documentation}.\n */\nconst AutoComplete = assignWithoutSideEffects(React.forwardRef(_AutoComplete), {\n componentId: dropdownComponentIds.triggers.AutoComplete,\n});\n\nexport { AutoComplete };\n"],"names":["useAutoComplete","_ref","props","inputValue","setInputValue","getOptionValues","_useDropdown","useDropdown","onBaseDropdownInputKeydown","onTriggerKeydown","isOpen","setIsOpen","selectedIndices","setSelectedIndices","setControlledValueIndices","isControlled","options","setGlobalFilteredValues","setFilteredValues","activeTagIndex","setActiveTagIndex","setActiveIndex","globalFilteredValues","filteredValues","selectionType","triggererRef","hasAutoCompleteInHeader","resetFilters","React","useEffect","firstItemOptionIndex","findIndex","option","value","length","isReactNative","_triggererRef$current","current","focus","onInputValueChange","_ref2","_props$onInputValueCh","name","call","filteredOptions","filter","optionValue","toLowerCase","includes","e","key","slice","onSelectionChange","_ref3","_props$onChange","values","console","log","_props$onInputValueCh2","_options$find","_props$onInputValueCh3","displayText","find","title","onChange","_AutoComplete","ref","_props$inputValue","_props$autoFocus","_React$useState","useState","_React$useState2","_slicedToArray","uncontrolledInputValue","_useDropdown2","setHasAutoCompleteInHeader","onTriggerClick","dropdownTriggerer","useCallback","map","_useAutoComplete","dropdownComponentIds","triggers","AutoComplete","defaultAutoFocusState","undefined","_jsx","BaseBox","position","children","BaseDropdownInputTrigger","_objectSpread","autoFocus","isSelectInput","syncInputValueWithSelection","_selectedOption$title","selectedOption","triggerEvent","_props$onClick","onClick","assignWithoutSideEffects","forwardRef","componentId"],"mappings":"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"}
1
+ {"version":3,"file":"AutoComplete.js","sources":["../../../../../../../src/components/Input/DropdownInputTriggers/AutoComplete.tsx"],"sourcesContent":["import React from 'react';\nimport { useDropdown } from '../../Dropdown/useDropdown';\nimport type { AutoCompleteProps, BaseDropdownInputTriggerProps } from './types';\nimport { BaseDropdownInputTrigger } from './BaseDropdownInputTrigger';\nimport { assignWithoutSideEffects } from '~utils/assignWithoutSideEffects';\nimport BaseBox from '~components/Box/BaseBox';\nimport type { BladeElementRef } from '~utils/types';\nimport { dropdownComponentIds } from '~components/Dropdown/dropdownComponentIds';\nimport { isReactNative } from '~utils';\n\nconst useAutoComplete = ({\n props,\n inputValue,\n setInputValue,\n getOptionValues,\n}: {\n props: AutoCompleteProps;\n setInputValue: (inputValue: string) => void;\n inputValue: string;\n getOptionValues: () => string[];\n}): {\n onTriggerKeydown: BaseDropdownInputTriggerProps['onTriggerKeydown'];\n onSelectionChange: BaseDropdownInputTriggerProps['onChange'];\n onInputValueChange: BaseDropdownInputTriggerProps['onInputValueChange'];\n} => {\n const {\n onTriggerKeydown: onBaseDropdownInputKeydown,\n isOpen,\n setIsOpen,\n selectedIndices,\n setSelectedIndices,\n setControlledValueIndices,\n isControlled,\n options,\n setFilteredValues: setGlobalFilteredValues,\n activeTagIndex,\n setActiveTagIndex,\n setActiveIndex,\n filteredValues: globalFilteredValues,\n selectionType,\n triggererRef,\n hasAutoCompleteInHeader,\n } = useDropdown();\n\n const resetFilters = (): void => setGlobalFilteredValues(getOptionValues());\n\n // Makes sure that first item is always in focus\n React.useEffect((): void => {\n const firstItemOptionIndex = options.findIndex(\n (option) => option.value === globalFilteredValues[0],\n );\n\n if (firstItemOptionIndex >= 0) {\n setActiveIndex(firstItemOptionIndex);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [globalFilteredValues.length, options.length]);\n\n // When input is empty or its single select, we want all items to be shown in filter on open of dropdown\n React.useEffect(() => {\n if (isOpen && !inputValue) {\n resetFilters();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen, options]);\n\n React.useEffect(() => {\n if (isOpen && selectionType === 'single') {\n resetFilters();\n }\n\n // Just setting autoFocus is setting the input in focus state but its not showing keyboard active.\n // We do this in web to get around that\n if (hasAutoCompleteInHeader && isOpen && !isReactNative()) {\n triggererRef.current?.focus();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n const onInputValueChange: BaseDropdownInputTriggerProps['onInputValueChange'] = ({\n name,\n value,\n }) => {\n setInputValue(value ?? '');\n props.onInputValueChange?.({ name, value });\n setActiveTagIndex(-1);\n\n if (!isOpen) {\n setIsOpen(true);\n }\n\n // default filtering when filteredValues is uncontrolled\n if (!props.filteredValues) {\n // eslint-disable-next-line no-lonely-if\n if (value && options && options.length > 0) {\n const filteredOptions = getOptionValues().filter((optionValue) =>\n String(optionValue).toLowerCase().includes(value.toLowerCase()),\n );\n setGlobalFilteredValues(filteredOptions);\n } else {\n resetFilters();\n }\n }\n };\n\n const onTriggerKeydown: BaseDropdownInputTriggerProps['onTriggerKeydown'] = (e) => {\n // Pressing backspace on empty input should remove the last tag\n if (e.key === 'Backspace' && !inputValue && activeTagIndex < 0 && selectedIndices.length > 0) {\n if (isControlled) {\n setControlledValueIndices(selectedIndices.slice(0, -1));\n } else {\n setSelectedIndices(selectedIndices.slice(0, -1));\n }\n }\n onBaseDropdownInputKeydown?.(e);\n };\n\n const onSelectionChange: BaseDropdownInputTriggerProps['onChange'] = ({ values }) => {\n console.log('selection change', values);\n if (selectionType === 'multiple') {\n setInputValue('');\n props.onInputValueChange?.({ name: props.name, value: '' });\n setActiveTagIndex(-1);\n resetFilters();\n } else {\n const displayText = options.find((option) => option.value === values[0])?.title;\n props.onInputValueChange?.({\n name: props.name,\n value: displayText,\n });\n // Use displayText as inputValue only if its not controlled by user\n if (hasAutoCompleteInHeader) {\n setInputValue('');\n } else if (typeof props.value === 'undefined') {\n setInputValue(displayText ?? '');\n }\n }\n props.onChange?.({ name: props.name, values });\n };\n return {\n onSelectionChange,\n onTriggerKeydown,\n onInputValueChange,\n };\n};\n\nconst _AutoComplete = (\n props: AutoCompleteProps,\n ref: React.ForwardedRef<BladeElementRef>,\n): React.ReactElement => {\n const [uncontrolledInputValue, setInputValue] = React.useState('');\n const inputValue = props.inputValue ?? uncontrolledInputValue;\n\n const {\n options,\n setFilteredValues: setGlobalFilteredValues,\n hasAutoCompleteInHeader,\n setHasAutoCompleteInHeader,\n onTriggerClick,\n dropdownTriggerer,\n } = useDropdown();\n\n const getOptionValues = React.useCallback(() => {\n return options.map((option) => option.value);\n }, [options]);\n\n const { onSelectionChange, onTriggerKeydown, onInputValueChange } = useAutoComplete({\n props,\n inputValue,\n setInputValue,\n getOptionValues,\n });\n\n React.useEffect(() => {\n if (dropdownTriggerer !== dropdownComponentIds.triggers.AutoComplete) {\n // When AutoComplete is mounted but not as trigger,\n // it has to be somewhere in the BottomSheet (most likely header based on UI but works in other parts too)\n setHasAutoCompleteInHeader(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // handles controlled filteredValues state (syncs it with our global filteredValues)\n React.useEffect(() => {\n if (props.filteredValues) {\n setGlobalFilteredValues(props.filteredValues);\n }\n }, [props.filteredValues, setGlobalFilteredValues]);\n\n // set autoFocus to true when used inside bottomsheet\n const defaultAutoFocusState = hasAutoCompleteInHeader ? true : undefined;\n\n return (\n <BaseBox position=\"relative\">\n <BaseDropdownInputTrigger\n {...props}\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={props.autoFocus ?? defaultAutoFocusState}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref={ref as any}\n onChange={onSelectionChange}\n isSelectInput={false}\n inputValue={inputValue}\n syncInputValueWithSelection={(value) => {\n if (!value) {\n setInputValue('');\n return;\n }\n const selectedOption = options.find((option) => option.value === value);\n setInputValue(selectedOption?.title ?? '');\n }}\n onTriggerKeydown={onTriggerKeydown}\n onInputValueChange={onInputValueChange}\n onTriggerClick={(triggerEvent) => {\n if (!hasAutoCompleteInHeader) {\n // we don't want clicking on autocomplete to open / close Dropdown when it is used inside BottomSheet's header\n onTriggerClick();\n }\n props?.onClick?.(triggerEvent);\n }}\n />\n </BaseBox>\n );\n};\n\n/**\n * ### AutoComplete\n *\n * Extension on top of SelectInput which allows you type and filter between ActionList items\n *\n * To be used in combination of `Dropdown` and `ActionList` component\n *\n * ---\n *\n * #### Usage in Desktop\n *\n * ```diff\n * <Dropdown>\n * + <AutoComplete label=\"Select Fruits\" />\n * <DropdownOverlay>\n * <ActionList>\n * <ActionListItem title=\"Mango\" value=\"mango\" />\n * <ActionListItem title=\"Apple\" value=\"apple\" />\n * </ActionList>\n * </DropdownOverlay>\n * </Dropdown>\n * ```\n *\n * #### Usage in Mobile\n *\n * ```diff\n * <Dropdown>\n * + <SelectInput label=\"Select Fruits\" />\n * <BottomSheet>\n * <BottomSheetHeader>\n * + <AutoComplete label=\"Select Fruits\" />\n * </BottomSheetHeader>\n * <BottomSheetBody>\n * <ActionList>\n * <ActionListItem title=\"Mango\" value=\"mango\" />\n * <ActionListItem title=\"Apple\" value=\"apple\" />\n * </ActionList>\n * </BottomSheetBody>\n * </BottomSheet>\n * </Dropdown>\n * ```\n *\n * ---\n *\n * Checkout {@link https://blade.razorpay.com/?path=/docs/components-dropdown-with-autocomplete--with-single-select AutoComplete Documentation}.\n */\nconst AutoComplete = assignWithoutSideEffects(React.forwardRef(_AutoComplete), {\n componentId: dropdownComponentIds.triggers.AutoComplete,\n});\n\nexport { AutoComplete };\n"],"names":["useAutoComplete","_ref","props","inputValue","setInputValue","getOptionValues","_useDropdown","useDropdown","onBaseDropdownInputKeydown","onTriggerKeydown","isOpen","setIsOpen","selectedIndices","setSelectedIndices","setControlledValueIndices","isControlled","options","setGlobalFilteredValues","setFilteredValues","activeTagIndex","setActiveTagIndex","setActiveIndex","globalFilteredValues","filteredValues","selectionType","triggererRef","hasAutoCompleteInHeader","resetFilters","React","useEffect","firstItemOptionIndex","findIndex","option","value","length","isReactNative","_triggererRef$current","current","focus","onInputValueChange","_ref2","_props$onInputValueCh","name","call","filteredOptions","filter","optionValue","String","toLowerCase","includes","e","key","slice","onSelectionChange","_ref3","_props$onChange","values","console","log","_props$onInputValueCh2","_options$find","_props$onInputValueCh3","displayText","find","title","onChange","_AutoComplete","ref","_props$inputValue","_props$autoFocus","_React$useState","useState","_React$useState2","_slicedToArray","uncontrolledInputValue","_useDropdown2","setHasAutoCompleteInHeader","onTriggerClick","dropdownTriggerer","useCallback","map","_useAutoComplete","dropdownComponentIds","triggers","AutoComplete","defaultAutoFocusState","undefined","_jsx","BaseBox","position","children","BaseDropdownInputTrigger","_objectSpread","autoFocus","isSelectInput","syncInputValueWithSelection","_selectedOption$title","selectedOption","triggerEvent","_props$onClick","onClick","assignWithoutSideEffects","forwardRef","componentId"],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@razorpay/blade",
3
3
  "description": "The Design System that powers Razorpay",
4
- "version": "12.53.0",
4
+ "version": "12.53.1",
5
5
  "license": "MIT",
6
6
  "engines": {
7
7
  "node": ">=18.12.1"