@economic/taco 1.1.4 → 1.1.5-alpha.102
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.
- package/README.md +82 -82
- package/dist/components/Icon/components/LogOut.d.ts +3 -0
- package/dist/components/Icon/components/Menu.d.ts +3 -0
- package/dist/components/Icon/components/Numbers.d.ts +3 -0
- package/dist/components/Icon/components/Profile.d.ts +3 -0
- package/dist/components/Icon/components/index.d.ts +1 -1
- package/dist/components/Input/Input.d.ts +1 -1
- package/dist/components/Menu/Menu.d.ts +2 -2
- package/dist/components/Menu/components/Item.d.ts +1 -1
- package/dist/components/Menu/components/Link.d.ts +1 -1
- package/dist/components/Tour/Tour.d.ts +2 -0
- package/dist/esm/components/Banner/util.js +1 -1
- package/dist/esm/components/Banner/util.js.map +1 -1
- package/dist/esm/components/Button/util.js +18 -23
- package/dist/esm/components/Button/util.js.map +1 -1
- package/dist/esm/components/Card/Card.js +3 -0
- package/dist/esm/components/Card/Card.js.map +1 -1
- package/dist/esm/components/Combobox/Combobox.js +1 -0
- package/dist/esm/components/Combobox/Combobox.js.map +1 -1
- package/dist/esm/components/Combobox/useCombobox.js +67 -87
- package/dist/esm/components/Combobox/useCombobox.js.map +1 -1
- package/dist/esm/components/Datepicker/useDatepicker.js +27 -34
- package/dist/esm/components/Datepicker/useDatepicker.js.map +1 -1
- package/dist/esm/components/Dialog/Context.js +4 -4
- package/dist/esm/components/Dialog/Context.js.map +1 -1
- package/dist/esm/components/Dialog/components/Content.js +39 -44
- package/dist/esm/components/Dialog/components/Content.js.map +1 -1
- package/dist/esm/components/Dialog/components/Drawer.js +3 -3
- package/dist/esm/components/Dialog/components/Drawer.js.map +1 -1
- package/dist/esm/components/Dialog/components/Extra.js +2 -2
- package/dist/esm/components/Dialog/components/Extra.js.map +1 -1
- package/dist/esm/components/Dialog/components/Trigger.js +3 -3
- package/dist/esm/components/Dialog/components/Trigger.js.map +1 -1
- package/dist/esm/components/Hanger/Hanger.js +1 -1
- package/dist/esm/components/Hanger/Hanger.js.map +1 -1
- package/dist/esm/components/Icon/components/LogOut.js +20 -0
- package/dist/esm/components/Icon/components/LogOut.js.map +1 -0
- package/dist/esm/components/Icon/components/Menu.js +18 -0
- package/dist/esm/components/Icon/components/Menu.js.map +1 -0
- package/dist/esm/components/Icon/components/Numbers.js +18 -0
- package/dist/esm/components/Icon/components/Numbers.js.map +1 -0
- package/dist/esm/components/Icon/components/Profile.js +20 -0
- package/dist/esm/components/Icon/components/Profile.js.map +1 -0
- package/dist/esm/components/Icon/components/index.js +12 -4
- package/dist/esm/components/Icon/components/index.js.map +1 -1
- package/dist/esm/components/Input/util.js +2 -2
- package/dist/esm/components/Input/util.js.map +1 -1
- package/dist/esm/components/Listbox/ScrollableList.js +64 -83
- package/dist/esm/components/Listbox/ScrollableList.js.map +1 -1
- package/dist/esm/components/Listbox/useListbox.js +51 -60
- package/dist/esm/components/Listbox/useListbox.js.map +1 -1
- package/dist/esm/components/Listbox/useMultiListbox.js +64 -91
- package/dist/esm/components/Listbox/useMultiListbox.js.map +1 -1
- package/dist/esm/components/Listbox/useTypeahead.js +10 -9
- package/dist/esm/components/Listbox/useTypeahead.js.map +1 -1
- package/dist/esm/components/Listbox/util.js +48 -85
- package/dist/esm/components/Listbox/util.js.map +1 -1
- package/dist/esm/components/Menu/Context.js +2 -2
- package/dist/esm/components/Menu/Context.js.map +1 -1
- package/dist/esm/components/Menu/components/Checkbox.js +9 -10
- package/dist/esm/components/Menu/components/Checkbox.js.map +1 -1
- package/dist/esm/components/Menu/components/Content.js +9 -11
- package/dist/esm/components/Menu/components/Content.js.map +1 -1
- package/dist/esm/components/Menu/components/Header.js +3 -3
- package/dist/esm/components/Menu/components/Header.js.map +1 -1
- package/dist/esm/components/Menu/components/Item.js +30 -31
- package/dist/esm/components/Menu/components/Item.js.map +1 -1
- package/dist/esm/components/Menu/components/Link.js +10 -11
- package/dist/esm/components/Menu/components/Link.js.map +1 -1
- package/dist/esm/components/Menu/components/RadioGroup.js +17 -19
- package/dist/esm/components/Menu/components/RadioGroup.js.map +1 -1
- package/dist/esm/components/Menu/components/Separator.js +1 -1
- package/dist/esm/components/Menu/components/Separator.js.map +1 -1
- package/dist/esm/components/Menu/components/Trigger.js +4 -4
- package/dist/esm/components/Menu/components/Trigger.js.map +1 -1
- package/dist/esm/components/Pagination/PageNumbers.js +23 -28
- package/dist/esm/components/Pagination/PageNumbers.js.map +1 -1
- package/dist/esm/components/Pagination/usePagination.js +7 -21
- package/dist/esm/components/Pagination/usePagination.js.map +1 -1
- package/dist/esm/components/Pagination/usePaginationShortcuts.js +9 -9
- package/dist/esm/components/Pagination/usePaginationShortcuts.js.map +1 -1
- package/dist/esm/components/Popover/Popover.js +1 -1
- package/dist/esm/components/Popover/Popover.js.map +1 -1
- package/dist/esm/components/Popover/Primitives.js +7 -8
- package/dist/esm/components/Popover/Primitives.js.map +1 -1
- package/dist/esm/components/SearchInput/SearchInput.js +4 -1
- package/dist/esm/components/SearchInput/SearchInput.js.map +1 -1
- package/dist/esm/components/Select/useSelect.js +63 -81
- package/dist/esm/components/Select/useSelect.js.map +1 -1
- package/dist/esm/components/Table/components/BaseTable.js +23 -30
- package/dist/esm/components/Table/components/BaseTable.js.map +1 -1
- package/dist/esm/components/Table/components/PaginatedTable.js +3 -7
- package/dist/esm/components/Table/components/PaginatedTable.js.map +1 -1
- package/dist/esm/components/Table/components/Table.js +18 -25
- package/dist/esm/components/Table/components/Table.js.map +1 -1
- package/dist/esm/components/Table/components/WindowedTable.js +89 -109
- package/dist/esm/components/Table/components/WindowedTable.js.map +1 -1
- package/dist/esm/components/Table/hooks/plugins/useRowActions.js +122 -146
- package/dist/esm/components/Table/hooks/plugins/useRowActions.js.map +1 -1
- package/dist/esm/components/Table/hooks/plugins/useRowDraggable.js +57 -61
- package/dist/esm/components/Table/hooks/plugins/useRowDraggable.js.map +1 -1
- package/dist/esm/components/Table/hooks/plugins/useRowEditing.js +39 -36
- package/dist/esm/components/Table/hooks/plugins/useRowEditing.js.map +1 -1
- package/dist/esm/components/Table/hooks/plugins/useRowSelect.js +79 -89
- package/dist/esm/components/Table/hooks/plugins/useRowSelect.js.map +1 -1
- package/dist/esm/components/Table/hooks/useRowCreation.js +29 -64
- package/dist/esm/components/Table/hooks/useRowCreation.js.map +1 -1
- package/dist/esm/components/Table/hooks/useTable.js +119 -141
- package/dist/esm/components/Table/hooks/useTable.js.map +1 -1
- package/dist/esm/components/Table/hooks/useTableKeyboardNavigation.js +13 -16
- package/dist/esm/components/Table/hooks/useTableKeyboardNavigation.js.map +1 -1
- package/dist/esm/components/Table/util/renderColumn.js +10 -10
- package/dist/esm/components/Table/util/renderColumn.js.map +1 -1
- package/dist/esm/components/Table/util/renderRow.js +37 -46
- package/dist/esm/components/Table/util/renderRow.js.map +1 -1
- package/dist/esm/components/Table/util/rowIndexPath.js +14 -16
- package/dist/esm/components/Table/util/rowIndexPath.js.map +1 -1
- package/dist/esm/components/Table/util/sortTypes.js +23 -31
- package/dist/esm/components/Table/util/sortTypes.js.map +1 -1
- package/dist/esm/components/Table/util.js +29 -41
- package/dist/esm/components/Table/util.js.map +1 -1
- package/dist/esm/components/Toast/Toast.js +21 -22
- package/dist/esm/components/Toast/Toast.js.map +1 -1
- package/dist/esm/components/Toast/util.js +2 -2
- package/dist/esm/components/Toast/util.js.map +1 -1
- package/dist/esm/components/Tour/Tour.js +3 -1
- package/dist/esm/components/Tour/Tour.js.map +1 -1
- package/dist/esm/index.css +661 -661
- package/dist/esm/index.js +4 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/primitives/Button.js +9 -13
- package/dist/esm/primitives/Button.js.map +1 -1
- package/dist/esm/utils/date.js.map +1 -1
- package/dist/esm/utils/hooks/useBoundingClientRectListener.js.map +1 -1
- package/dist/esm/utils/hooks/useDraggable.js +16 -17
- package/dist/esm/utils/hooks/useDraggable.js.map +1 -1
- package/dist/esm/utils/hooks/useDropTarget.js.map +1 -1
- package/dist/esm/utils/hooks/useListKeyboardNavigation.js.map +1 -1
- package/dist/esm/utils/hooks/useListScrollTo.js.map +1 -1
- package/dist/esm/utils/hooks/useOnClickOutside.js.map +1 -1
- package/dist/esm/utils/hooks/useProxiedRef.js.map +1 -1
- package/dist/esm/utils/hooks/useTimer.js +9 -17
- package/dist/esm/utils/hooks/useTimer.js.map +1 -1
- package/dist/esm/utils/input.js +7 -11
- package/dist/esm/utils/input.js.map +1 -1
- package/dist/esm/utils/mergeRefs.js +1 -1
- package/dist/esm/utils/mergeRefs.js.map +1 -1
- package/dist/esm/utils/taillwind.js +2 -2
- package/dist/esm/utils/taillwind.js.map +1 -1
- package/dist/index.css +661 -661
- package/dist/index.d.ts +4 -1
- package/dist/taco.cjs.development.js +1566 -1823
- package/dist/taco.cjs.development.js.map +1 -1
- package/dist/taco.cjs.production.min.js +1 -1
- package/dist/taco.cjs.production.min.js.map +1 -1
- package/dist/utils/mergeRefs.d.ts +1 -1
- package/package.json +6 -7
- package/plugins/tailwindcss-aria-attributes.js +73 -73
- package/tailwind.config.js +9 -0
- package/types.json +2612 -7006
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useMultiListbox.js","sources":["../../../../src/components/Listbox/useMultiListbox.tsx"],"sourcesContent":["import * as React from 'react';\nimport keycode from 'keycode';\nimport { v4 as uuid } from 'uuid';\nimport { useLocalization } from '../Provider/Provider';\nimport { ListboxProps } from './Listbox';\nimport { useProxiedRef } from '../../utils/hooks/useProxiedRef';\nimport { setInputValueByRef, getIndexFromValue, getSelectedIndexesFromValue, findByValue, getActiveDescendant } from './util';\nimport { ScrollableListProps, ScrollableListItem, ScrollableListItemValue } from './ScrollableList';\nimport { useTypeahead } from './useTypeahead';\n\ntype useListbox = {\n list: ScrollableListProps;\n input: Omit<React.HTMLAttributes<HTMLInputElement>, 'defaultValue'>;\n};\n\nexport const useMultiListbox = (\n {\n data: externalData = [],\n defaultValue,\n disabled,\n emptyValue: _,\n id: nativeId,\n name,\n onClick,\n onChange,\n onFocus,\n onKeyDown,\n value,\n ...otherProps\n }: ListboxProps,\n ref: React.Ref<HTMLInputElement>\n): useListbox => {\n const { texts } = useLocalization();\n const id = React.useMemo(() => nativeId || uuid(), [nativeId]);\n const inputRef = useProxiedRef<HTMLInputElement>(ref);\n const data = React.useMemo(() => {\n return [{ text: texts.listbox.allOption, value: '#ALL-OPTIONS#' }, ...externalData];\n }, [externalData]);\n const [currentIndex, setCurrentIndex] = React.useState(getIndexFromValue(data, value) || 0);\n const [allOptionsSelected, setAllOptionsSelected] = React.useState(false);\n const { getNextIndex } = useTypeahead({ data, currentIndex });\n const [selectedIndexes, setSelectedIndexes] = React.useState(getSelectedIndexesFromValue(data, value));\n\n React.useEffect(() => {\n if (defaultValue && !value) {\n setInputValueByRef(inputRef.current, defaultValue.toString());\n }\n }, []);\n\n React.useEffect(() => {\n const selectableItemsCount = data.filter(item => !item.disabled).length - 1;\n\n if (selectableItemsCount === selectedIndexes.length) {\n setAllOptionsSelected(true);\n } else {\n setAllOptionsSelected(false);\n }\n }, [selectedIndexes, data]);\n\n const setInputValueByIndex = (index: number | undefined): void => {\n if (index !== undefined) {\n const option = data[index];\n\n if (option && !option.disabled) {\n let newInputValue: ScrollableListItemValue = '';\n const currentInputValue = inputRef.current?.value;\n const currentValuesArray = currentInputValue?.split(',') || [];\n const optionAlreadySelected = currentValuesArray.findIndex(val => val === String(option.value)) !== -1;\n\n // Handling the select_all option\n if (option.value === '#ALL-OPTIONS#') {\n if (!allOptionsSelected) {\n newInputValue = data\n .filter((option, index) => index !== 0 && !option.disabled)\n .map(option => option.value)\n .join(',');\n } else {\n newInputValue = '';\n }\n } else {\n // Handling rest options\n if (optionAlreadySelected) {\n newInputValue = currentValuesArray.filter(val => val !== String(option.value)).join(',');\n } else {\n newInputValue = currentInputValue ? `${currentInputValue},${option.value}` : option.value;\n }\n }\n\n setInputValueByRef(inputRef.current, newInputValue);\n }\n }\n };\n\n const handleListboxClick = (event: React.MouseEvent<HTMLLIElement>, index: number): void => {\n event.preventDefault();\n\n if (!data[index].disabled) {\n setCurrentIndex(index);\n setInputValueByIndex(index);\n }\n\n if (onClick) {\n onClick(event);\n }\n };\n\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLElement>, index: number): void => {\n const charKey = String.fromCharCode(event.keyCode);\n\n if (charKey.match(/(\\w)/g)) {\n const nextIndex = getNextIndex(charKey);\n\n if (nextIndex > -1 && nextIndex !== currentIndex) {\n setCurrentIndex(nextIndex);\n }\n return;\n }\n\n switch (event.keyCode) {\n case keycode('space'): {\n event.preventDefault();\n setInputValueByIndex(index);\n break;\n }\n\n case keycode('enter'): {\n setInputValueByIndex(index);\n break;\n }\n\n default:\n }\n setCurrentIndex(index);\n\n if (onKeyDown) {\n event.persist();\n onKeyDown(event);\n }\n };\n\n const handleListboxFocus = (event: React.FocusEvent<HTMLElement>): void => {\n if (onFocus) {\n event.persist();\n onFocus(event);\n }\n };\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\n event.persist();\n\n setSelectedIndexes(getSelectedIndexesFromValue(data, event.target.value));\n\n if (onChange) {\n const detail: ScrollableListItem[] = [];\n const valuesArray = event.target.value.split(',');\n\n valuesArray.forEach(val => {\n const item = findByValue(data, val);\n if (item) {\n detail.push(item);\n }\n });\n (event as any).detail = detail;\n\n onChange(event);\n }\n };\n\n const list = {\n ...otherProps,\n 'aria-activedescendant': getActiveDescendant(data, currentIndex, id),\n 'aria-multiselectable': true,\n data,\n disabled,\n id,\n onChange: () => null,\n onClick: handleListboxClick,\n onFocus: handleListboxFocus,\n onKeyDown: handleListboxKeyDown,\n scrollOnFocus: false,\n tabIndex: disabled ? -1 : otherProps.tabIndex ? otherProps.tabIndex : 0,\n value: currentIndex,\n selectedIndexes,\n multiselect: true,\n allOptionsSelected,\n };\n\n const input = {\n name,\n onChange: handleInputChange,\n ref: inputRef,\n tabIndex: -1,\n value: value ?? '',\n };\n\n return { list, input };\n};\n"],"names":["useMultiListbox","ref","data","externalData","defaultValue","disabled","nativeId","id","name","onClick","onChange","onFocus","onKeyDown","value","otherProps","useLocalization","texts","React","uuid","inputRef","useProxiedRef","text","listbox","allOption","getIndexFromValue","currentIndex","setCurrentIndex","allOptionsSelected","setAllOptionsSelected","useTypeahead","getNextIndex","getSelectedIndexesFromValue","selectedIndexes","setSelectedIndexes","setInputValueByRef","current","toString","selectableItemsCount","filter","item","length","setInputValueByIndex","index","undefined","option","newInputValue","currentInputValue","currentValuesArray","split","optionAlreadySelected","findIndex","val","String","map","join","handleListboxClick","event","preventDefault","handleListboxKeyDown","charKey","fromCharCode","keyCode","match","nextIndex","keycode","persist","handleListboxFocus","handleInputChange","target","detail","valuesArray","forEach","findByValue","push","list","getActiveDescendant","scrollOnFocus","tabIndex","multiselect","input"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"useMultiListbox.js","sources":["../../../../src/components/Listbox/useMultiListbox.tsx"],"sourcesContent":["import * as React from 'react';\nimport keycode from 'keycode';\nimport { v4 as uuid } from 'uuid';\nimport { useLocalization } from '../Provider/Provider';\nimport { ListboxProps } from './Listbox';\nimport { useProxiedRef } from '../../utils/hooks/useProxiedRef';\nimport { setInputValueByRef, getIndexFromValue, getSelectedIndexesFromValue, findByValue, getActiveDescendant } from './util';\nimport { ScrollableListProps, ScrollableListItem, ScrollableListItemValue } from './ScrollableList';\nimport { useTypeahead } from './useTypeahead';\n\ntype useListbox = {\n list: ScrollableListProps;\n input: Omit<React.HTMLAttributes<HTMLInputElement>, 'defaultValue'>;\n};\n\nexport const useMultiListbox = (\n {\n data: externalData = [],\n defaultValue,\n disabled,\n emptyValue: _,\n id: nativeId,\n name,\n onClick,\n onChange,\n onFocus,\n onKeyDown,\n value,\n ...otherProps\n }: ListboxProps,\n ref: React.Ref<HTMLInputElement>\n): useListbox => {\n const { texts } = useLocalization();\n const id = React.useMemo(() => nativeId || uuid(), [nativeId]);\n const inputRef = useProxiedRef<HTMLInputElement>(ref);\n const data = React.useMemo(() => {\n return [{ text: texts.listbox.allOption, value: '#ALL-OPTIONS#' }, ...externalData];\n }, [externalData]);\n const [currentIndex, setCurrentIndex] = React.useState(getIndexFromValue(data, value) || 0);\n const [allOptionsSelected, setAllOptionsSelected] = React.useState(false);\n const { getNextIndex } = useTypeahead({ data, currentIndex });\n const [selectedIndexes, setSelectedIndexes] = React.useState(getSelectedIndexesFromValue(data, value));\n\n React.useEffect(() => {\n if (defaultValue && !value) {\n setInputValueByRef(inputRef.current, defaultValue.toString());\n }\n }, []);\n\n React.useEffect(() => {\n const selectableItemsCount = data.filter(item => !item.disabled).length - 1;\n\n if (selectableItemsCount === selectedIndexes.length) {\n setAllOptionsSelected(true);\n } else {\n setAllOptionsSelected(false);\n }\n }, [selectedIndexes, data]);\n\n const setInputValueByIndex = (index: number | undefined): void => {\n if (index !== undefined) {\n const option = data[index];\n\n if (option && !option.disabled) {\n let newInputValue: ScrollableListItemValue = '';\n const currentInputValue = inputRef.current?.value;\n const currentValuesArray = currentInputValue?.split(',') || [];\n const optionAlreadySelected = currentValuesArray.findIndex(val => val === String(option.value)) !== -1;\n\n // Handling the select_all option\n if (option.value === '#ALL-OPTIONS#') {\n if (!allOptionsSelected) {\n newInputValue = data\n .filter((option, index) => index !== 0 && !option.disabled)\n .map(option => option.value)\n .join(',');\n } else {\n newInputValue = '';\n }\n } else {\n // Handling rest options\n if (optionAlreadySelected) {\n newInputValue = currentValuesArray.filter(val => val !== String(option.value)).join(',');\n } else {\n newInputValue = currentInputValue ? `${currentInputValue},${option.value}` : option.value;\n }\n }\n\n setInputValueByRef(inputRef.current, newInputValue);\n }\n }\n };\n\n const handleListboxClick = (event: React.MouseEvent<HTMLLIElement>, index: number): void => {\n event.preventDefault();\n\n if (!data[index].disabled) {\n setCurrentIndex(index);\n setInputValueByIndex(index);\n }\n\n if (onClick) {\n onClick(event);\n }\n };\n\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLElement>, index: number): void => {\n const charKey = String.fromCharCode(event.keyCode);\n\n if (charKey.match(/(\\w)/g)) {\n const nextIndex = getNextIndex(charKey);\n\n if (nextIndex > -1 && nextIndex !== currentIndex) {\n setCurrentIndex(nextIndex);\n }\n return;\n }\n\n switch (event.keyCode) {\n case keycode('space'): {\n event.preventDefault();\n setInputValueByIndex(index);\n break;\n }\n\n case keycode('enter'): {\n setInputValueByIndex(index);\n break;\n }\n\n default:\n }\n setCurrentIndex(index);\n\n if (onKeyDown) {\n event.persist();\n onKeyDown(event);\n }\n };\n\n const handleListboxFocus = (event: React.FocusEvent<HTMLElement>): void => {\n if (onFocus) {\n event.persist();\n onFocus(event);\n }\n };\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\n event.persist();\n\n setSelectedIndexes(getSelectedIndexesFromValue(data, event.target.value));\n\n if (onChange) {\n const detail: ScrollableListItem[] = [];\n const valuesArray = event.target.value.split(',');\n\n valuesArray.forEach(val => {\n const item = findByValue(data, val);\n if (item) {\n detail.push(item);\n }\n });\n (event as any).detail = detail;\n\n onChange(event);\n }\n };\n\n const list = {\n ...otherProps,\n 'aria-activedescendant': getActiveDescendant(data, currentIndex, id),\n 'aria-multiselectable': true,\n data,\n disabled,\n id,\n onChange: () => null,\n onClick: handleListboxClick,\n onFocus: handleListboxFocus,\n onKeyDown: handleListboxKeyDown,\n scrollOnFocus: false,\n tabIndex: disabled ? -1 : otherProps.tabIndex ? otherProps.tabIndex : 0,\n value: currentIndex,\n selectedIndexes,\n multiselect: true,\n allOptionsSelected,\n };\n\n const input = {\n name,\n onChange: handleInputChange,\n ref: inputRef,\n tabIndex: -1,\n value: value ?? '',\n };\n\n return { list, input };\n};\n"],"names":["useMultiListbox","data","externalData","defaultValue","disabled","emptyValue","_","id","nativeId","name","onClick","onChange","onFocus","onKeyDown","value","otherProps","ref","texts","useLocalization","React","uuid","inputRef","useProxiedRef","text","listbox","allOption","currentIndex","setCurrentIndex","getIndexFromValue","allOptionsSelected","setAllOptionsSelected","getNextIndex","useTypeahead","selectedIndexes","setSelectedIndexes","getSelectedIndexesFromValue","setInputValueByRef","current","toString","selectableItemsCount","filter","item","length","setInputValueByIndex","index","undefined","option","newInputValue","currentInputValue","currentValuesArray","split","optionAlreadySelected","findIndex","val","String","map","join","handleListboxClick","event","preventDefault","handleListboxKeyDown","charKey","fromCharCode","keyCode","match","nextIndex","keycode","persist","handleListboxFocus","handleInputChange","target","detail","valuesArray","forEach","findByValue","push","list","getActiveDescendant","scrollOnFocus","tabIndex","multiselect","input"],"mappings":"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"}
|
@@ -2,24 +2,25 @@ import { useRef } from 'react';
|
|
2
2
|
import useTimer from '../../utils/hooks/useTimer.js';
|
3
3
|
import { findNextIndexByValue } from './util.js';
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
const useTypeahead = ({
|
6
|
+
data,
|
7
|
+
currentIndex
|
8
|
+
}) => {
|
9
|
+
const typeaheadQuery = useRef();
|
10
|
+
const typeaheadQueryTimer = useTimer(1000, () => {
|
10
11
|
typeaheadQuery.current = undefined;
|
11
12
|
});
|
12
13
|
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
const getNextIndex = charKey => {
|
15
|
+
const query = (typeaheadQuery.current ? typeaheadQuery.current + charKey : charKey).toLowerCase();
|
16
|
+
const nextIndex = findNextIndexByValue(data, query, currentIndex);
|
16
17
|
typeaheadQueryTimer.start();
|
17
18
|
typeaheadQuery.current = query;
|
18
19
|
return nextIndex;
|
19
20
|
};
|
20
21
|
|
21
22
|
return {
|
22
|
-
getNextIndex
|
23
|
+
getNextIndex
|
23
24
|
};
|
24
25
|
};
|
25
26
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useTypeahead.js","sources":["../../../../src/components/Listbox/useTypeahead.tsx"],"sourcesContent":["import * as React from 'react';\nimport useTimer from '../../utils/hooks/useTimer';\nimport { findNextIndexByValue } from './util';\nimport { ScrollableListItem } from './ScrollableList';\n\ntype useTypeahead = {\n getNextIndex: (key: string) => number;\n};\n\ntype useTypeaheadProps = {\n data: ScrollableListItem[];\n currentIndex: number | undefined;\n};\n\nexport const useTypeahead = ({ data, currentIndex }: useTypeaheadProps): useTypeahead => {\n const typeaheadQuery = React.useRef<string | undefined>();\n const typeaheadQueryTimer = useTimer(1000, () => {\n typeaheadQuery.current = undefined;\n });\n\n const getNextIndex = (charKey: string): number => {\n const query = (typeaheadQuery.current ? typeaheadQuery.current + charKey : charKey).toLowerCase();\n const nextIndex = findNextIndexByValue(data, query, currentIndex);\n\n typeaheadQueryTimer.start();\n typeaheadQuery.current = query;\n\n return nextIndex;\n };\n\n return { getNextIndex };\n};\n"],"names":["useTypeahead","data","currentIndex","typeaheadQuery","React","typeaheadQueryTimer","useTimer","current","undefined","getNextIndex","charKey","query","toLowerCase","nextIndex","findNextIndexByValue","start"],"mappings":";;;;
|
1
|
+
{"version":3,"file":"useTypeahead.js","sources":["../../../../src/components/Listbox/useTypeahead.tsx"],"sourcesContent":["import * as React from 'react';\nimport useTimer from '../../utils/hooks/useTimer';\nimport { findNextIndexByValue } from './util';\nimport { ScrollableListItem } from './ScrollableList';\n\ntype useTypeahead = {\n getNextIndex: (key: string) => number;\n};\n\ntype useTypeaheadProps = {\n data: ScrollableListItem[];\n currentIndex: number | undefined;\n};\n\nexport const useTypeahead = ({ data, currentIndex }: useTypeaheadProps): useTypeahead => {\n const typeaheadQuery = React.useRef<string | undefined>();\n const typeaheadQueryTimer = useTimer(1000, () => {\n typeaheadQuery.current = undefined;\n });\n\n const getNextIndex = (charKey: string): number => {\n const query = (typeaheadQuery.current ? typeaheadQuery.current + charKey : charKey).toLowerCase();\n const nextIndex = findNextIndexByValue(data, query, currentIndex);\n\n typeaheadQueryTimer.start();\n typeaheadQuery.current = query;\n\n return nextIndex;\n };\n\n return { getNextIndex };\n};\n"],"names":["useTypeahead","data","currentIndex","typeaheadQuery","React","typeaheadQueryTimer","useTimer","current","undefined","getNextIndex","charKey","query","toLowerCase","nextIndex","findNextIndexByValue","start"],"mappings":";;;;MAcaA,YAAY,GAAG,CAAC;EAAEC,IAAF;EAAQC;AAAR,CAAD;EACxB,MAAMC,cAAc,GAAGC,MAAA,EAAvB;EACA,MAAMC,mBAAmB,GAAGC,QAAQ,CAAC,IAAD,EAAO;IACvCH,cAAc,CAACI,OAAf,GAAyBC,SAAzB;GADgC,CAApC;;EAIA,MAAMC,YAAY,GAAIC,OAAD;IACjB,MAAMC,KAAK,GAAG,CAACR,cAAc,CAACI,OAAf,GAAyBJ,cAAc,CAACI,OAAf,GAAyBG,OAAlD,GAA4DA,OAA7D,EAAsEE,WAAtE,EAAd;IACA,MAAMC,SAAS,GAAGC,oBAAoB,CAACb,IAAD,EAAOU,KAAP,EAAcT,YAAd,CAAtC;IAEAG,mBAAmB,CAACU,KAApB;IACAZ,cAAc,CAACI,OAAf,GAAyBI,KAAzB;IAEA,OAAOE,SAAP;GAPJ;;EAUA,OAAO;IAAEJ;GAAT;AACH;;;;"}
|
@@ -1,47 +1,24 @@
|
|
1
|
-
import { extends as _extends, objectWithoutPropertiesLoose as _objectWithoutPropertiesLoose } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
2
1
|
import React__default from 'react';
|
3
2
|
import { getId } from './ScrollableList.js';
|
4
3
|
import { setInputValueByRef as setInputValueByRef$1 } from '../../utils/input.js';
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
var getValue = function getValue(value) {
|
9
|
-
return String(value !== null && value !== void 0 ? value : '');
|
10
|
-
};
|
11
|
-
|
12
|
-
var setInputValueByRef = function setInputValueByRef(input, value, event) {
|
13
|
-
if (event === void 0) {
|
14
|
-
event = 'change';
|
15
|
-
}
|
5
|
+
const getValue = value => String(value !== null && value !== void 0 ? value : '');
|
16
6
|
|
7
|
+
const setInputValueByRef = (input, value, event = 'change') => {
|
17
8
|
setInputValueByRef$1(input, getValue(value), event);
|
18
9
|
};
|
19
|
-
|
20
|
-
|
21
|
-
return getValue(option.value) === getValue(value);
|
22
|
-
});
|
10
|
+
const getIndexFromValue = (data, value) => {
|
11
|
+
const index = data.findIndex(option => getValue(option.value) === getValue(value));
|
23
12
|
return index > -1 ? index : undefined;
|
24
13
|
};
|
25
|
-
|
14
|
+
const getSelectedIndexesFromValue = (data, value) => {
|
26
15
|
if (typeof value !== 'string') return [];
|
27
|
-
return value.split(',').map(
|
28
|
-
return data.findIndex(function (o) {
|
29
|
-
return String(o.value) === v;
|
30
|
-
});
|
31
|
-
}).filter(function (v) {
|
32
|
-
return v !== -1;
|
33
|
-
});
|
16
|
+
return value.split(',').map(v => data.findIndex(o => String(o.value) === v)).filter(v => v !== -1);
|
34
17
|
};
|
35
|
-
|
36
|
-
return data.find(
|
37
|
-
return getValue(option.value) === getValue(value);
|
38
|
-
});
|
18
|
+
const findByValue = (data, value) => {
|
19
|
+
return data.find(option => getValue(option.value) === getValue(value));
|
39
20
|
};
|
40
|
-
|
41
|
-
if (strategy === void 0) {
|
42
|
-
strategy = 'includes';
|
43
|
-
}
|
44
|
-
|
21
|
+
const searchForString = (child, value, strategy = 'includes') => {
|
45
22
|
try {
|
46
23
|
var _child$props;
|
47
24
|
|
@@ -49,26 +26,20 @@ var searchForString = function searchForString(child, value, strategy) {
|
|
49
26
|
var _child$props2, _child$props3;
|
50
27
|
|
51
28
|
if (Array.isArray((_child$props2 = child.props) === null || _child$props2 === void 0 ? void 0 : _child$props2.children)) {
|
52
|
-
return !!child.props.children.find(
|
53
|
-
return searchForString(subChild, value, strategy);
|
54
|
-
});
|
29
|
+
return !!child.props.children.find(subChild => searchForString(subChild, value, strategy));
|
55
30
|
}
|
56
31
|
|
57
32
|
return searchForString((_child$props3 = child.props) === null || _child$props3 === void 0 ? void 0 : _child$props3.children, value, strategy);
|
58
33
|
} else {
|
59
34
|
return child.toString().toLowerCase()[strategy](String(value).toLowerCase());
|
60
35
|
}
|
61
|
-
} catch
|
36
|
+
} catch {
|
62
37
|
return false;
|
63
38
|
}
|
64
39
|
};
|
65
40
|
|
66
|
-
|
67
|
-
|
68
|
-
lastIndex = data.length;
|
69
|
-
}
|
70
|
-
|
71
|
-
var index = data.slice(firstIndex, lastIndex).findIndex(function (option) {
|
41
|
+
const getIndexInRangeByValue = (data, query, firstIndex, lastIndex = data.length) => {
|
42
|
+
const index = data.slice(firstIndex, lastIndex).findIndex(option => {
|
72
43
|
if (option.disabled) {
|
73
44
|
return false;
|
74
45
|
}
|
@@ -78,9 +49,9 @@ var getIndexInRangeByValue = function getIndexInRangeByValue(data, query, firstI
|
|
78
49
|
return index > -1 ? index + firstIndex : -1;
|
79
50
|
};
|
80
51
|
|
81
|
-
|
82
|
-
|
83
|
-
|
52
|
+
const findNextIndexByValue = (data, query, activeIndex) => {
|
53
|
+
const firstIndex = activeIndex === undefined ? 0 : activeIndex + 1;
|
54
|
+
let index = getIndexInRangeByValue(data, query, firstIndex);
|
84
55
|
|
85
56
|
if (index === -1) {
|
86
57
|
index = getIndexInRangeByValue(data, query, 0, activeIndex);
|
@@ -88,76 +59,71 @@ var findNextIndexByValue = function findNextIndexByValue(data, query, activeInde
|
|
88
59
|
|
89
60
|
return index;
|
90
61
|
};
|
91
|
-
|
62
|
+
const getActiveDescendant = (data, currentIndex, id) => {
|
92
63
|
return currentIndex !== undefined && data[currentIndex] ? getId(id, data[currentIndex].value) : undefined;
|
93
64
|
};
|
94
|
-
|
95
|
-
return React__default.useMemo(
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
items.push(
|
65
|
+
const useFlattenedData = data => {
|
66
|
+
return React__default.useMemo(() => {
|
67
|
+
const items = [];
|
68
|
+
|
69
|
+
const flatten = (item, path, parentPath, parentDisabled) => {
|
70
|
+
const currentPath = parentPath ? `${parentPath}.${path}` : `${path}`;
|
71
|
+
const isItemDisabled = parentDisabled || item.disabled;
|
72
|
+
items.push({ ...item,
|
102
73
|
disabled: isItemDisabled,
|
103
74
|
path: currentPath,
|
104
75
|
hasChildren: !!item.children
|
105
|
-
})
|
76
|
+
});
|
106
77
|
|
107
78
|
if (item.children) {
|
108
|
-
item.children.forEach(
|
109
|
-
return flatten(childItem, childPath, currentPath, isItemDisabled);
|
110
|
-
});
|
79
|
+
item.children.forEach((childItem, childPath) => flatten(childItem, childPath, currentPath, isItemDisabled));
|
111
80
|
}
|
112
81
|
};
|
113
82
|
|
114
|
-
data.forEach(
|
83
|
+
data.forEach((item, index) => {
|
115
84
|
flatten(item, index);
|
116
85
|
});
|
117
86
|
return items;
|
118
87
|
}, [data]);
|
119
88
|
};
|
120
|
-
|
89
|
+
const sanitizeItem = item => {
|
121
90
|
if (item) {
|
122
|
-
|
123
|
-
|
91
|
+
const {
|
92
|
+
hasChildren: _1,
|
93
|
+
path: _2,
|
94
|
+
...rest
|
95
|
+
} = item;
|
124
96
|
return rest;
|
125
97
|
}
|
126
98
|
|
127
99
|
return undefined;
|
128
100
|
};
|
129
|
-
|
101
|
+
const getOptionParents = (data, path) => {
|
130
102
|
var _path$split;
|
131
103
|
|
132
|
-
|
104
|
+
const indexes = (_path$split = path === null || path === void 0 ? void 0 : path.split('.')) !== null && _path$split !== void 0 ? _path$split : [];
|
133
105
|
|
134
106
|
if (indexes.length > 1) {
|
135
107
|
// we don't want to map the current item
|
136
108
|
indexes.pop(); // we need to rebuild the path as we map
|
137
109
|
|
138
|
-
|
139
|
-
return indexes.map(
|
110
|
+
let lastPath;
|
111
|
+
return indexes.map(i => {
|
140
112
|
lastPath = lastPath ? [lastPath, i].join('.') : i;
|
141
|
-
return sanitizeItem(data.find(
|
142
|
-
return i.path === lastPath;
|
143
|
-
}));
|
113
|
+
return sanitizeItem(data.find(i => i.path === lastPath));
|
144
114
|
});
|
145
115
|
}
|
146
116
|
|
147
117
|
return null;
|
148
118
|
};
|
149
|
-
|
150
|
-
if (value === void 0) {
|
151
|
-
value = '';
|
152
|
-
}
|
153
|
-
|
119
|
+
const filterData = (data, value = '') => {
|
154
120
|
if (value === '' || value === null) {
|
155
121
|
return data;
|
156
122
|
}
|
157
123
|
|
158
|
-
|
124
|
+
const filteredOptionValues = new Set();
|
159
125
|
|
160
|
-
|
126
|
+
const shouldFilterOption = option => {
|
161
127
|
if (option.disabled) {
|
162
128
|
return false;
|
163
129
|
}
|
@@ -165,22 +131,19 @@ var filterData = function filterData(data, value) {
|
|
165
131
|
return searchForString(option.text, String(value));
|
166
132
|
};
|
167
133
|
|
168
|
-
data.forEach(
|
134
|
+
data.forEach(option => {
|
169
135
|
if (shouldFilterOption(option)) {
|
170
|
-
|
136
|
+
const parents = getOptionParents(data, option.path);
|
171
137
|
filteredOptionValues.add(option.value);
|
172
138
|
|
173
139
|
if (parents !== null) {
|
174
|
-
parents.forEach(
|
175
|
-
return filteredOptionValues.add(option === null || option === void 0 ? void 0 : option.value);
|
176
|
-
});
|
140
|
+
parents.forEach(option => filteredOptionValues.add(option === null || option === void 0 ? void 0 : option.value));
|
177
141
|
}
|
178
142
|
}
|
179
143
|
});
|
180
|
-
return data.filter(
|
181
|
-
|
182
|
-
|
183
|
-
});
|
144
|
+
return data.filter(({
|
145
|
+
value
|
146
|
+
}) => filteredOptionValues.has(value));
|
184
147
|
};
|
185
148
|
|
186
149
|
export { filterData, findByValue, findNextIndexByValue, getActiveDescendant, getIndexFromValue, getOptionParents, getSelectedIndexesFromValue, sanitizeItem, searchForString, setInputValueByRef, useFlattenedData };
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"util.js","sources":["../../../../src/components/Listbox/util.ts"],"sourcesContent":["import React from 'react';\nimport { ScrollableListItem, ScrollableListItemValue, getId } from './ScrollableList';\nimport { setInputValueByRef as setInputValueByRefBase } from '../../utils/input';\n\nconst getValue = (value: ScrollableListItemValue | undefined): string => String(value ?? '');\n\nexport const setInputValueByRef = (input: HTMLInputElement | null, value: ScrollableListItemValue, event = 'change'): void => {\n setInputValueByRefBase(input, getValue(value), event);\n};\n\nexport const getIndexFromValue = (data: ScrollableListItem[], value: ScrollableListItemValue | undefined): number | undefined => {\n const index = data.findIndex(option => getValue(option.value) === getValue(value));\n return index > -1 ? index : undefined;\n};\n\nexport const getSelectedIndexesFromValue = (data: ScrollableListItem[], value: ScrollableListItemValue | undefined): number[] => {\n if (typeof value !== 'string') return [];\n\n return value\n .split(',')\n .map(v => data.findIndex(o => String(o.value) === v))\n .filter(v => v !== -1);\n};\n\nexport const findByValue = (data: ScrollableListItem[], value: ScrollableListItemValue): ScrollableListItem | undefined => {\n return data.find(option => getValue(option.value) === getValue(value));\n};\n\nexport const searchForString = (child: JSX.Element | string, value: string, strategy = 'includes'): boolean => {\n try {\n if (typeof child !== 'string' && child.props?.children) {\n if (Array.isArray(child.props?.children)) {\n return !!child.props.children.find((subChild: JSX.Element | string) =>\n searchForString(subChild, value, strategy)\n );\n }\n\n return searchForString(child.props?.children, value, strategy);\n } else {\n return child.toString().toLowerCase()[strategy](String(value).toLowerCase());\n }\n } catch {\n return false;\n }\n};\n\nconst getIndexInRangeByValue = (\n data: ScrollableListItem[],\n query: string,\n firstIndex: number,\n lastIndex: number = data.length\n): number => {\n const index = data.slice(firstIndex, lastIndex).findIndex(option => {\n if (option.disabled) {\n return false;\n }\n\n return searchForString(option.text, query, 'startsWith');\n });\n\n return index > -1 ? index + firstIndex : -1;\n};\n\nexport const findNextIndexByValue = (data: ScrollableListItem[], query: string, activeIndex: number | undefined): number => {\n const firstIndex = activeIndex === undefined ? 0 : activeIndex + 1;\n let index = getIndexInRangeByValue(data, query, firstIndex);\n\n if (index === -1) {\n index = getIndexInRangeByValue(data, query, 0, activeIndex);\n }\n\n return index;\n};\n\nexport const getActiveDescendant = (data: ScrollableListItem[], currentIndex: number | undefined, id: string): any => {\n return currentIndex !== undefined && data[currentIndex] ? getId(id, data[currentIndex].value) : undefined;\n};\n\nexport const useFlattenedData = (data: ScrollableListItem[]): ScrollableListItem[] => {\n return React.useMemo(() => {\n const items: ScrollableListItem[] = [];\n\n const flatten = (item: ScrollableListItem, path: number, parentPath?: string, parentDisabled?: boolean) => {\n const currentPath = parentPath ? `${parentPath}.${path}` : `${path}`;\n const isItemDisabled = parentDisabled || item.disabled;\n\n items.push({\n ...item,\n disabled: isItemDisabled,\n path: currentPath,\n hasChildren: !!item.children,\n });\n\n if (item.children) {\n item.children.forEach((childItem: ScrollableListItem, childPath: number) =>\n flatten(childItem, childPath, currentPath, isItemDisabled)\n );\n }\n };\n\n data.forEach((item, index) => {\n flatten(item, index);\n });\n\n return items;\n }, [data]);\n};\n\nexport const sanitizeItem = (item: ScrollableListItem | undefined) => {\n if (item) {\n const { hasChildren: _1, path: _2, ...rest } = item;\n return rest;\n }\n\n return undefined;\n};\n\nexport const getOptionParents = (data: ScrollableListItem[], path?: string) => {\n const indexes = path?.split('.') ?? [];\n\n if (indexes.length > 1) {\n // we don't want to map the current item\n indexes.pop();\n // we need to rebuild the path as we map\n let lastPath: string;\n\n return indexes.map(i => {\n lastPath = lastPath ? [lastPath, i].join('.') : i;\n return sanitizeItem(data.find((i: ScrollableListItem) => i.path === lastPath));\n });\n }\n\n return null;\n};\n\nexport const filterData = (data: ScrollableListItem[], value: ScrollableListItemValue = ''): ScrollableListItem[] => {\n if (value === '' || value === null) {\n return data;\n }\n\n const filteredOptionValues = new Set();\n const shouldFilterOption = (option: ScrollableListItem): boolean => {\n if (option.disabled) {\n return false;\n }\n\n return searchForString(option.text, String(value));\n };\n\n data.forEach(option => {\n if (shouldFilterOption(option)) {\n const parents = getOptionParents(data, option.path);\n\n filteredOptionValues.add(option.value);\n\n if (parents !== null) {\n parents.forEach(option => filteredOptionValues.add(option?.value));\n }\n }\n });\n\n return data.filter(({ value }) => filteredOptionValues.has(value));\n};\n"],"names":["getValue","value","String","setInputValueByRef","input","event","setInputValueByRefBase","getIndexFromValue","data","index","findIndex","option","undefined","getSelectedIndexesFromValue","split","map","v","o","filter","findByValue","find","searchForString","child","strategy","props","children","Array","isArray","subChild","toString","toLowerCase","getIndexInRangeByValue","query","firstIndex","lastIndex","length","slice","disabled","text","findNextIndexByValue","activeIndex","getActiveDescendant","currentIndex","id","getId","useFlattenedData","React","useMemo","items","flatten","item","path","parentPath","parentDisabled","currentPath","isItemDisabled","push","hasChildren","forEach","childItem","childPath","sanitizeItem","rest","getOptionParents","indexes","pop","lastPath","i","join","filterData","filteredOptionValues","Set","shouldFilterOption","parents","add","has"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"util.js","sources":["../../../../src/components/Listbox/util.ts"],"sourcesContent":["import React from 'react';\r\nimport { ScrollableListItem, ScrollableListItemValue, getId } from './ScrollableList';\r\nimport { setInputValueByRef as setInputValueByRefBase } from '../../utils/input';\r\n\r\nconst getValue = (value: ScrollableListItemValue | undefined): string => String(value ?? '');\r\n\r\nexport const setInputValueByRef = (input: HTMLInputElement | null, value: ScrollableListItemValue, event = 'change'): void => {\r\n setInputValueByRefBase(input, getValue(value), event);\r\n};\r\n\r\nexport const getIndexFromValue = (data: ScrollableListItem[], value: ScrollableListItemValue | undefined): number | undefined => {\r\n const index = data.findIndex(option => getValue(option.value) === getValue(value));\r\n return index > -1 ? index : undefined;\r\n};\r\n\r\nexport const getSelectedIndexesFromValue = (data: ScrollableListItem[], value: ScrollableListItemValue | undefined): number[] => {\r\n if (typeof value !== 'string') return [];\r\n\r\n return value\r\n .split(',')\r\n .map(v => data.findIndex(o => String(o.value) === v))\r\n .filter(v => v !== -1);\r\n};\r\n\r\nexport const findByValue = (data: ScrollableListItem[], value: ScrollableListItemValue): ScrollableListItem | undefined => {\r\n return data.find(option => getValue(option.value) === getValue(value));\r\n};\r\n\r\nexport const searchForString = (child: JSX.Element | string, value: string, strategy = 'includes'): boolean => {\r\n try {\r\n if (typeof child !== 'string' && child.props?.children) {\r\n if (Array.isArray(child.props?.children)) {\r\n return !!child.props.children.find((subChild: JSX.Element | string) =>\r\n searchForString(subChild, value, strategy)\r\n );\r\n }\r\n\r\n return searchForString(child.props?.children, value, strategy);\r\n } else {\r\n return child.toString().toLowerCase()[strategy](String(value).toLowerCase());\r\n }\r\n } catch {\r\n return false;\r\n }\r\n};\r\n\r\nconst getIndexInRangeByValue = (\r\n data: ScrollableListItem[],\r\n query: string,\r\n firstIndex: number,\r\n lastIndex: number = data.length\r\n): number => {\r\n const index = data.slice(firstIndex, lastIndex).findIndex(option => {\r\n if (option.disabled) {\r\n return false;\r\n }\r\n\r\n return searchForString(option.text, query, 'startsWith');\r\n });\r\n\r\n return index > -1 ? index + firstIndex : -1;\r\n};\r\n\r\nexport const findNextIndexByValue = (data: ScrollableListItem[], query: string, activeIndex: number | undefined): number => {\r\n const firstIndex = activeIndex === undefined ? 0 : activeIndex + 1;\r\n let index = getIndexInRangeByValue(data, query, firstIndex);\r\n\r\n if (index === -1) {\r\n index = getIndexInRangeByValue(data, query, 0, activeIndex);\r\n }\r\n\r\n return index;\r\n};\r\n\r\nexport const getActiveDescendant = (data: ScrollableListItem[], currentIndex: number | undefined, id: string): any => {\r\n return currentIndex !== undefined && data[currentIndex] ? getId(id, data[currentIndex].value) : undefined;\r\n};\r\n\r\nexport const useFlattenedData = (data: ScrollableListItem[]): ScrollableListItem[] => {\r\n return React.useMemo(() => {\r\n const items: ScrollableListItem[] = [];\r\n\r\n const flatten = (item: ScrollableListItem, path: number, parentPath?: string, parentDisabled?: boolean) => {\r\n const currentPath = parentPath ? `${parentPath}.${path}` : `${path}`;\r\n const isItemDisabled = parentDisabled || item.disabled;\r\n\r\n items.push({\r\n ...item,\r\n disabled: isItemDisabled,\r\n path: currentPath,\r\n hasChildren: !!item.children,\r\n });\r\n\r\n if (item.children) {\r\n item.children.forEach((childItem: ScrollableListItem, childPath: number) =>\r\n flatten(childItem, childPath, currentPath, isItemDisabled)\r\n );\r\n }\r\n };\r\n\r\n data.forEach((item, index) => {\r\n flatten(item, index);\r\n });\r\n\r\n return items;\r\n }, [data]);\r\n};\r\n\r\nexport const sanitizeItem = (item: ScrollableListItem | undefined) => {\r\n if (item) {\r\n const { hasChildren: _1, path: _2, ...rest } = item;\r\n return rest;\r\n }\r\n\r\n return undefined;\r\n};\r\n\r\nexport const getOptionParents = (data: ScrollableListItem[], path?: string) => {\r\n const indexes = path?.split('.') ?? [];\r\n\r\n if (indexes.length > 1) {\r\n // we don't want to map the current item\r\n indexes.pop();\r\n // we need to rebuild the path as we map\r\n let lastPath: string;\r\n\r\n return indexes.map(i => {\r\n lastPath = lastPath ? [lastPath, i].join('.') : i;\r\n return sanitizeItem(data.find((i: ScrollableListItem) => i.path === lastPath));\r\n });\r\n }\r\n\r\n return null;\r\n};\r\n\r\nexport const filterData = (data: ScrollableListItem[], value: ScrollableListItemValue = ''): ScrollableListItem[] => {\r\n if (value === '' || value === null) {\r\n return data;\r\n }\r\n\r\n const filteredOptionValues = new Set();\r\n const shouldFilterOption = (option: ScrollableListItem): boolean => {\r\n if (option.disabled) {\r\n return false;\r\n }\r\n\r\n return searchForString(option.text, String(value));\r\n };\r\n\r\n data.forEach(option => {\r\n if (shouldFilterOption(option)) {\r\n const parents = getOptionParents(data, option.path);\r\n\r\n filteredOptionValues.add(option.value);\r\n\r\n if (parents !== null) {\r\n parents.forEach(option => filteredOptionValues.add(option?.value));\r\n }\r\n }\r\n });\r\n\r\n return data.filter(({ value }) => filteredOptionValues.has(value));\r\n};\r\n"],"names":["getValue","value","String","setInputValueByRef","input","event","setInputValueByRefBase","getIndexFromValue","data","index","findIndex","option","undefined","getSelectedIndexesFromValue","split","map","v","o","filter","findByValue","find","searchForString","child","strategy","props","children","Array","isArray","subChild","toString","toLowerCase","getIndexInRangeByValue","query","firstIndex","lastIndex","length","slice","disabled","text","findNextIndexByValue","activeIndex","getActiveDescendant","currentIndex","id","getId","useFlattenedData","React","useMemo","items","flatten","item","path","parentPath","parentDisabled","currentPath","isItemDisabled","push","hasChildren","forEach","childItem","childPath","sanitizeItem","_1","_2","rest","getOptionParents","indexes","pop","lastPath","i","join","filterData","filteredOptionValues","Set","shouldFilterOption","parents","add","has"],"mappings":"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"}
|
@@ -1,7 +1,7 @@
|
|
1
1
|
import { createContext, useContext } from 'react';
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
const MenuContext = /*#__PURE__*/createContext(undefined);
|
4
|
+
const useCurrentMenu = () => {
|
5
5
|
return useContext(MenuContext);
|
6
6
|
};
|
7
7
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Context.js","sources":["../../../../src/components/Menu/Context.tsx"],"sourcesContent":["import * as React from 'react';\n\nexport const MenuContext = React.createContext<\n | {\n indented: boolean;\n registerIndentation: () => void;\n minWidth?: number;\n setMinWidth: (width: number) => void;\n close: () => void;\n }\n | undefined\n>(undefined);\n\nexport const useCurrentMenu = () => {\n return React.useContext(MenuContext);\n};\n"],"names":["MenuContext","React","undefined","useCurrentMenu"],"mappings":";;
|
1
|
+
{"version":3,"file":"Context.js","sources":["../../../../src/components/Menu/Context.tsx"],"sourcesContent":["import * as React from 'react';\n\nexport const MenuContext = React.createContext<\n | {\n indented: boolean;\n registerIndentation: () => void;\n minWidth?: number;\n setMinWidth: (width: number) => void;\n close: () => void;\n }\n | undefined\n>(undefined);\n\nexport const useCurrentMenu = () => {\n return React.useContext(MenuContext);\n};\n"],"names":["MenuContext","React","undefined","useCurrentMenu"],"mappings":";;MAEaA,WAAW,gBAAGC,aAAA,CASzBC,SATyB;MAWdC,cAAc,GAAG;EAC1B,OAAOF,UAAA,CAAiBD,WAAjB,CAAP;AACH;;;;"}
|
@@ -1,17 +1,16 @@
|
|
1
|
-
import { objectWithoutPropertiesLoose as _objectWithoutPropertiesLoose } from '../../../_virtual/_rollupPluginBabelHelpers.js';
|
2
1
|
import { createElement } from 'react';
|
3
2
|
import { Icon } from '../../Icon/Icon.js';
|
4
3
|
import { CheckboxItem, ItemIndicator } from '@radix-ui/react-dropdown-menu';
|
5
4
|
import { useItemStyling } from './Item.js';
|
6
5
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
6
|
+
const Checkbox = props => {
|
7
|
+
const {
|
8
|
+
checked,
|
9
|
+
children,
|
10
|
+
onChange,
|
11
|
+
...otherProps
|
12
|
+
} = props;
|
13
|
+
const className = useItemStyling({
|
15
14
|
disabled: props.disabled,
|
16
15
|
indented: true,
|
17
16
|
className: props.className
|
@@ -24,7 +23,7 @@ var Checkbox = function Checkbox(props) {
|
|
24
23
|
className: "absolute left-0 ml-1.5"
|
25
24
|
}, createElement(Icon, {
|
26
25
|
name: "tick",
|
27
|
-
className: "!h-4 !w-4
|
26
|
+
className: "-ml-px !h-4 !w-4"
|
28
27
|
})), children);
|
29
28
|
};
|
30
29
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Checkbox.js","sources":["../../../../../src/components/Menu/components/Checkbox.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { Icon } from '../../Icon/Icon';\nimport { useItemStyling } from './Item';\n\nexport type MenuCheckboxItemProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> & {\n /* Whether the checkbox item is disabled */\n disabled?: boolean;\n /* The current checked state (controlled) */\n checked: boolean;\n /* Handler called when the checked state changes */\n onChange: (checked: boolean | 'indeterminate') => void;\n};\n\nexport const Checkbox = (props: MenuCheckboxItemProps) => {\n const { checked, children, onChange, ...otherProps } = props;\n const className = useItemStyling({\n disabled: props.disabled,\n indented: true,\n className: props.className,\n });\n\n return (\n <DropdownMenuPrimitive.CheckboxItem {...otherProps} className={className} checked={checked} onCheckedChange={onChange}>\n <DropdownMenuPrimitive.ItemIndicator className=\"absolute left-0 ml-1.5\">\n <Icon name=\"tick\" className=\"!h-4 !w-4
|
1
|
+
{"version":3,"file":"Checkbox.js","sources":["../../../../../src/components/Menu/components/Checkbox.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport { Icon } from '../../Icon/Icon';\nimport { useItemStyling } from './Item';\n\nexport type MenuCheckboxItemProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'onSelect'> & {\n /* Whether the checkbox item is disabled */\n disabled?: boolean;\n /* The current checked state (controlled) */\n checked: boolean;\n /* Handler called when the checked state changes */\n onChange: (checked: boolean | 'indeterminate') => void;\n};\n\nexport const Checkbox = (props: MenuCheckboxItemProps) => {\n const { checked, children, onChange, ...otherProps } = props;\n const className = useItemStyling({\n disabled: props.disabled,\n indented: true,\n className: props.className,\n });\n\n return (\n <DropdownMenuPrimitive.CheckboxItem {...otherProps} className={className} checked={checked} onCheckedChange={onChange}>\n <DropdownMenuPrimitive.ItemIndicator className=\"absolute left-0 ml-1.5\">\n <Icon name=\"tick\" className=\"-ml-px !h-4 !w-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n};\n"],"names":["Checkbox","props","checked","children","onChange","otherProps","className","useItemStyling","disabled","indented","React","DropdownMenuPrimitive","onCheckedChange","Icon","name"],"mappings":";;;;;MAcaA,QAAQ,GAAIC,KAAD;EACpB,MAAM;IAAEC,OAAF;IAAWC,QAAX;IAAqBC,QAArB;IAA+B,GAAGC;MAAeJ,KAAvD;EACA,MAAMK,SAAS,GAAGC,cAAc,CAAC;IAC7BC,QAAQ,EAAEP,KAAK,CAACO,QADa;IAE7BC,QAAQ,EAAE,IAFmB;IAG7BH,SAAS,EAAEL,KAAK,CAACK;GAHW,CAAhC;EAMA,OACII,aAAA,CAACC,YAAD,oBAAwCN;IAAYC,SAAS,EAAEA;IAAWJ,OAAO,EAAEA;IAASU,eAAe,EAAER;IAA7G,EACIM,aAAA,CAACC,aAAD;IAAqCL,SAAS,EAAC;GAA/C,EACII,aAAA,CAACG,IAAD;IAAMC,IAAI,EAAC;IAAOR,SAAS,EAAC;GAA5B,CADJ,CADJ,EAIKH,QAJL,CADJ;AAQH;;;;"}
|
@@ -1,20 +1,18 @@
|
|
1
|
-
import { objectWithoutPropertiesLoose as _objectWithoutPropertiesLoose } from '../../../_virtual/_rollupPluginBabelHelpers.js';
|
2
1
|
import { forwardRef, createElement } from 'react';
|
3
2
|
import cn from 'classnames';
|
4
3
|
import { useProxiedRef } from '../../../utils/hooks/useProxiedRef.js';
|
5
4
|
import { useCurrentMenu } from '../Context.js';
|
6
5
|
import { Content as Content$1 } from '@radix-ui/react-dropdown-menu';
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
var className = cn('border rounded block outline-none p-1 wcag-white border-grey yt-shadow', props.className);
|
7
|
+
const Content = /*#__PURE__*/forwardRef(function MenuContent(props, ref) {
|
8
|
+
const internalRef = useProxiedRef(ref);
|
9
|
+
const menu = useCurrentMenu();
|
10
|
+
const {
|
11
|
+
children,
|
12
|
+
placement: side,
|
13
|
+
...otherProps
|
14
|
+
} = props;
|
15
|
+
const className = cn('border rounded block outline-none p-1 wcag-white border-grey yt-shadow', props.className);
|
18
16
|
return createElement(Content$1, Object.assign({}, otherProps, {
|
19
17
|
align: "start",
|
20
18
|
className: className,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Content.js","sources":["../../../../../src/components/Menu/components/Content.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport cn from 'classnames';\nimport { Placement } from '../../../types';\nimport { useProxiedRef } from '../../../utils/hooks/useProxiedRef';\nimport { useCurrentMenu } from '../Context';\n\nexport type MenuContentProps = Omit<DropdownMenuPrimitive.DropdownMenuContentProps, 'children' | 'side'> & {\n children: React.ReactNode;\n /** Set the position of the Menu relative to its trigger. Default value is `bottom` */\n placement?: Placement;\n};\n\nexport const Content = React.forwardRef(function MenuContent(props: MenuContentProps, ref: React.Ref<HTMLDivElement>) {\n const internalRef = useProxiedRef<any>(ref);\n const menu = useCurrentMenu();\n const { children, placement: side, ...otherProps } = props;\n const className = cn('border rounded block outline-none p-1 wcag-white border-grey yt-shadow', props.className);\n\n return (\n <DropdownMenuPrimitive.Content\n {...otherProps}\n align=\"start\"\n className={className}\n data-taco=\"menu\"\n side={side}\n sideOffset={2}\n style={{ minWidth: menu?.minWidth }}\n ref={internalRef}\n >\n {children}\n </DropdownMenuPrimitive.Content>\n );\n});\n"],"names":["Content","React","MenuContent","props","ref","internalRef","useProxiedRef","menu","useCurrentMenu","children","
|
1
|
+
{"version":3,"file":"Content.js","sources":["../../../../../src/components/Menu/components/Content.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport cn from 'classnames';\nimport { Placement } from '../../../types';\nimport { useProxiedRef } from '../../../utils/hooks/useProxiedRef';\nimport { useCurrentMenu } from '../Context';\n\nexport type MenuContentProps = Omit<DropdownMenuPrimitive.DropdownMenuContentProps, 'children' | 'side'> & {\n children: React.ReactNode;\n /** Set the position of the Menu relative to its trigger. Default value is `bottom` */\n placement?: Placement;\n};\n\nexport const Content = React.forwardRef(function MenuContent(props: MenuContentProps, ref: React.Ref<HTMLDivElement>) {\n const internalRef = useProxiedRef<any>(ref);\n const menu = useCurrentMenu();\n const { children, placement: side, ...otherProps } = props;\n const className = cn('border rounded block outline-none p-1 wcag-white border-grey yt-shadow', props.className);\n\n return (\n <DropdownMenuPrimitive.Content\n {...otherProps}\n align=\"start\"\n className={className}\n data-taco=\"menu\"\n side={side}\n sideOffset={2}\n style={{ minWidth: menu?.minWidth }}\n ref={internalRef}\n >\n {children}\n </DropdownMenuPrimitive.Content>\n );\n});\n"],"names":["Content","React","MenuContent","props","ref","internalRef","useProxiedRef","menu","useCurrentMenu","children","placement","side","otherProps","className","cn","DropdownMenuPrimitive","align","sideOffset","style","minWidth"],"mappings":";;;;;;MAaaA,OAAO,gBAAGC,UAAA,CAAiB,SAASC,WAAT,CAAqBC,KAArB,EAA8CC,GAA9C;EACpC,MAAMC,WAAW,GAAGC,aAAa,CAAMF,GAAN,CAAjC;EACA,MAAMG,IAAI,GAAGC,cAAc,EAA3B;EACA,MAAM;IAAEC,QAAF;IAAYC,SAAS,EAAEC,IAAvB;IAA6B,GAAGC;MAAeT,KAArD;EACA,MAAMU,SAAS,GAAGC,EAAE,CAAC,wEAAD,EAA2EX,KAAK,CAACU,SAAjF,CAApB;EAEA,OACIZ,aAAA,CAACc,SAAD,oBACQH;IACJI,KAAK,EAAC;IACNH,SAAS,EAAEA;iBACD;IACVF,IAAI,EAAEA;IACNM,UAAU,EAAE;IACZC,KAAK,EAAE;MAAEC,QAAQ,EAAEZ,IAAF,aAAEA,IAAF,uBAAEA,IAAI,CAAEY;;IACzBf,GAAG,EAAEC;IART,EAUKI,QAVL,CADJ;AAcH,CApBsB;;;;"}
|
@@ -3,9 +3,9 @@ import cn from 'classnames';
|
|
3
3
|
import { useCurrentMenu } from '../Context.js';
|
4
4
|
import { Label } from '@radix-ui/react-dropdown-menu';
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
const Header = props => {
|
7
|
+
const menu = useCurrentMenu();
|
8
|
+
const className = cn('flex items-center justify-start h-7 pr-1.5 text-xs text-grey-darkest', {
|
9
9
|
'pl-7': menu === null || menu === void 0 ? void 0 : menu.indented,
|
10
10
|
'pl-1.5': !(menu !== null && menu !== void 0 && menu.indented)
|
11
11
|
}, props.className);
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Header.js","sources":["../../../../../src/components/Menu/components/Header.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport cn from 'classnames';\nimport { useCurrentMenu } from '../Context';\n\nexport type MenuHeaderProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const Header = (props: MenuHeaderProps) => {\n const menu = useCurrentMenu();\n const className = cn(\n 'flex items-center justify-start h-7 pr-1.5 text-xs text-grey-darkest',\n {\n 'pl-7': menu?.indented,\n 'pl-1.5': !menu?.indented,\n },\n props.className\n );\n\n return <DropdownMenuPrimitive.Label {...props} className={className} />;\n};\n"],"names":["Header","props","menu","useCurrentMenu","className","cn","indented","React","DropdownMenuPrimitive"],"mappings":";;;;;
|
1
|
+
{"version":3,"file":"Header.js","sources":["../../../../../src/components/Menu/components/Header.tsx"],"sourcesContent":["import * as React from 'react';\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';\nimport cn from 'classnames';\nimport { useCurrentMenu } from '../Context';\n\nexport type MenuHeaderProps = React.HTMLAttributes<HTMLDivElement>;\n\nexport const Header = (props: MenuHeaderProps) => {\n const menu = useCurrentMenu();\n const className = cn(\n 'flex items-center justify-start h-7 pr-1.5 text-xs text-grey-darkest',\n {\n 'pl-7': menu?.indented,\n 'pl-1.5': !menu?.indented,\n },\n props.className\n );\n\n return <DropdownMenuPrimitive.Label {...props} className={className} />;\n};\n"],"names":["Header","props","menu","useCurrentMenu","className","cn","indented","React","DropdownMenuPrimitive"],"mappings":";;;;;MAOaA,MAAM,GAAIC,KAAD;EAClB,MAAMC,IAAI,GAAGC,cAAc,EAA3B;EACA,MAAMC,SAAS,GAAGC,EAAE,CAChB,sEADgB,EAEhB;IACI,QAAQH,IAAR,aAAQA,IAAR,uBAAQA,IAAI,CAAEI,QADlB;IAEI,UAAU,EAACJ,IAAD,aAACA,IAAD,eAACA,IAAI,CAAEI,QAAP;GAJE,EAMhBL,KAAK,CAACG,SANU,CAApB;EASA,OAAOG,aAAA,CAACC,KAAD,oBAAiCP;IAAOG,SAAS,EAAEA;IAAnD,CAAP;AACH;;;;"}
|