@economic/taco 0.0.32-alpha.0 → 0.0.33-alpha.4
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/dist/components/Select/useSelect.d.ts +13 -8
- package/dist/esm/components/Button/util.js +1 -1
- package/dist/esm/components/Button/util.js.map +1 -1
- package/dist/esm/components/Group/Group.js +6 -8
- package/dist/esm/components/Group/Group.js.map +1 -1
- package/dist/esm/components/Hanger/Hanger.js +25 -33
- package/dist/esm/components/Hanger/Hanger.js.map +1 -1
- package/dist/esm/components/Icon/Icon.js +7 -8
- package/dist/esm/components/Icon/Icon.js.map +1 -1
- package/dist/esm/components/IconButton/IconButton.js +9 -11
- package/dist/esm/components/IconButton/IconButton.js.map +1 -1
- package/dist/esm/components/Input/Input.js +26 -24
- package/dist/esm/components/Input/Input.js.map +1 -1
- package/dist/esm/components/Listbox/Listbox.js +24 -25
- package/dist/esm/components/Listbox/Listbox.js.map +1 -1
- package/dist/esm/components/Listbox/useListbox.js +1 -1
- package/dist/esm/components/Listbox/useListbox.js.map +1 -1
- package/dist/esm/components/Listbox/util.js +4 -7
- package/dist/esm/components/Listbox/util.js.map +1 -1
- package/dist/esm/components/SearchInput/SearchInput.js +10 -11
- package/dist/esm/components/SearchInput/SearchInput.js.map +1 -1
- package/dist/esm/components/Select/Select.js.map +1 -1
- package/dist/esm/components/Select/useSelect.js +48 -32
- package/dist/esm/components/Select/useSelect.js.map +1 -1
- package/dist/esm/index.css +3 -3
- package/dist/index.css +3 -3
- package/dist/taco.cjs.development.js +159 -154
- 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/tailwind.d.ts +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useListbox.js","sources":["../../../../src/components/Listbox/useListbox.tsx"],"sourcesContent":["import * as React from 'react';\
|
|
1
|
+
{"version":3,"file":"useListbox.js","sources":["../../../../src/components/Listbox/useListbox.tsx"],"sourcesContent":["import * as React from 'react';\nimport { v4 as uuid } from 'uuid';\nimport { ListboxProps } from './Listbox';\nimport { useProxiedRef } from '../../utils/hooks/useProxiedRef';\nimport { setInputValueByRef, getIndexFromValue, findByValue, getActiveDescendant, useFlattenedData, sanitizeItem } from './util';\nimport { ScrollableListProps } from './ScrollableList';\nimport { useTypeahead } from './useTypeahead';\n\ntype useListbox = {\n list: ScrollableListProps;\n input: Omit<React.HTMLAttributes<HTMLInputElement>, 'defaultValue'>;\n};\n\nexport const useListbox = (\n {\n data: externalData = [],\n defaultValue,\n disabled,\n emptyValue,\n id: nativeId,\n invalid,\n name,\n onChange,\n onFocus,\n onKeyDown,\n value = emptyValue,\n ...otherProps\n }: ListboxProps,\n ref: React.Ref<HTMLInputElement>\n): useListbox => {\n const data = useFlattenedData(emptyValue !== undefined ? [{ text: '', value: emptyValue }, ...externalData] : externalData);\n const id = React.useMemo(() => nativeId || uuid(), [nativeId]);\n const inputRef = useProxiedRef<HTMLInputElement>(ref);\n const currentIndex = value !== undefined ? getIndexFromValue(data, value) : undefined;\n const { getNextIndex } = useTypeahead({ data, currentIndex });\n\n const setInputValueByIndex = (index: number | undefined): void => {\n if (index !== undefined) {\n const option = data[index];\n\n if (option && !option.disabled) {\n setInputValueByRef(inputRef.current, option.value);\n }\n }\n };\n\n const handleListboxChange = (index: number): void => {\n setInputValueByIndex(index);\n };\n\n React.useEffect(() => {\n if (data.length && currentIndex === undefined) {\n if (defaultValue !== undefined) {\n const defaultValueIndex = getIndexFromValue(data, defaultValue);\n\n if (defaultValueIndex !== undefined) {\n setInputValueByIndex(defaultValueIndex);\n }\n } else {\n setInputValueByIndex(0);\n }\n }\n }, [data]);\n\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLElement>): 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 setInputValueByIndex(nextIndex);\n }\n return;\n }\n\n if (onKeyDown) {\n event.persist();\n onKeyDown(event);\n }\n };\n\n const handleListboxFocus = (event: React.FocusEvent<HTMLElement>): void => {\n if (currentIndex === undefined && data.length) {\n setInputValueByIndex(0);\n }\n\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 if (onChange) {\n const item = findByValue(data, event.target.value);\n (event as any).detail = sanitizeItem(item);\n\n const indexes = item?.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 (event as any).detail.parents = indexes.map(i => {\n lastPath = lastPath ? [lastPath, i].join('.') : i;\n return sanitizeItem(data.find(i => i.path === lastPath));\n });\n }\n\n onChange(event);\n }\n };\n\n const list: ScrollableListProps = {\n ...otherProps,\n 'aria-activedescendant': getActiveDescendant(data, currentIndex, id),\n data,\n disabled,\n id,\n invalid,\n onChange: handleListboxChange,\n onFocus: handleListboxFocus,\n onKeyDown: handleListboxKeyDown,\n scrollOnFocus: true,\n tabIndex: disabled ? -1 : otherProps.tabIndex ? otherProps.tabIndex : 0,\n value: currentIndex,\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":["useListbox","data","externalData","defaultValue","disabled","emptyValue","id","nativeId","invalid","name","onChange","onFocus","onKeyDown","value","otherProps","ref","useFlattenedData","undefined","text","React","uuid","inputRef","useProxiedRef","currentIndex","getIndexFromValue","getNextIndex","useTypeahead","setInputValueByIndex","index","option","setInputValueByRef","current","handleListboxChange","length","defaultValueIndex","handleListboxKeyDown","event","charKey","String","fromCharCode","keyCode","match","nextIndex","persist","handleListboxFocus","handleInputChange","item","findByValue","target","detail","sanitizeItem","indexes","path","split","pop","lastPath","parents","map","i","join","find","list","getActiveDescendant","scrollOnFocus","tabIndex","input"],"mappings":"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"}
|
|
@@ -2,12 +2,11 @@ import React__default from 'react';
|
|
|
2
2
|
import { getId } from './ScrollableList.js';
|
|
3
3
|
import { setInputValueByRef as setInputValueByRef$1 } from '../../utils/input.js';
|
|
4
4
|
|
|
5
|
+
const getValue = value => String(value !== null && value !== void 0 ? value : '');
|
|
6
|
+
|
|
5
7
|
const setInputValueByRef = (input, value, event = 'change') => {
|
|
6
|
-
setInputValueByRef$1(input,
|
|
8
|
+
setInputValueByRef$1(input, getValue(value), event);
|
|
7
9
|
};
|
|
8
|
-
|
|
9
|
-
const getValue = value => value === undefined || value === null ? '' : String(value);
|
|
10
|
-
|
|
11
10
|
const getIndexFromValue = (data, value) => {
|
|
12
11
|
const index = data.findIndex(option => getValue(option.value) === getValue(value));
|
|
13
12
|
return index > -1 ? index : undefined;
|
|
@@ -32,9 +31,7 @@ const searchForString = (child, value, strategy = 'includes') => {
|
|
|
32
31
|
|
|
33
32
|
return searchForString((_child$props3 = child.props) === null || _child$props3 === void 0 ? void 0 : _child$props3.children, value, strategy);
|
|
34
33
|
} else {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return child.toString().toLowerCase()[strategy]((_String = String(value)) === null || _String === void 0 ? void 0 : _String.toLowerCase());
|
|
34
|
+
return child.toString().toLowerCase()[strategy](String(value).toLowerCase());
|
|
38
35
|
}
|
|
39
36
|
} catch {
|
|
40
37
|
return false;
|
|
@@ -1 +1 @@
|
|
|
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\nexport const setInputValueByRef = (input: HTMLInputElement | null, value: ScrollableListItemValue, event = 'change'): void => {\r\n setInputValueByRefBase(input, value !== undefined && value !== null ? String(value) : '', event);\r\n};\r\n\r\nconst getValue = (value: ScrollableListItemValue | undefined): string =>\r\n value === undefined || value === null ? '' : String(value);\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":["setInputValueByRef","input","value","event","setInputValueByRefBase","undefined","String","getValue","getIndexFromValue","data","index","findIndex","option","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
|
+
{"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","_1","_2","rest","getOptionParents","indexes","pop","lastPath","i","join","filterData","filteredOptionValues","Set","shouldFilterOption","parents","add","has"],"mappings":"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"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { objectWithoutPropertiesLoose as _objectWithoutPropertiesLoose } from '../../_virtual/_rollupPluginBabelHelpers.js';
|
|
2
1
|
import { forwardRef, createElement } from 'react';
|
|
3
2
|
import '../Icon/components/index.js';
|
|
4
3
|
import '../Icon/Icon.js';
|
|
@@ -49,22 +48,22 @@ import '../Switch/Switch.js';
|
|
|
49
48
|
import '../Tour/Tour.js';
|
|
50
49
|
import '../../utils/hooks/useOnClickOutside.js';
|
|
51
50
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
const SearchInput = /*#__PURE__*/forwardRef(function SearchInput({
|
|
52
|
+
onSearch,
|
|
53
|
+
...props
|
|
54
|
+
}, ref) {
|
|
55
|
+
const {
|
|
56
|
+
texts
|
|
57
|
+
} = useLocalization();
|
|
56
58
|
|
|
57
|
-
|
|
58
|
-
texts = _useLocalization.texts;
|
|
59
|
-
|
|
60
|
-
var handleClick = function handleClick() {
|
|
59
|
+
const handleClick = () => {
|
|
61
60
|
if (!props.disabled) {
|
|
62
61
|
onSearch === null || onSearch === void 0 ? void 0 : onSearch(props.value);
|
|
63
62
|
}
|
|
64
63
|
};
|
|
65
64
|
|
|
66
|
-
|
|
67
|
-
|
|
65
|
+
const handleKeyDown = event => {
|
|
66
|
+
const isEnterKeyPressed = event.keyCode === keycode('enter');
|
|
68
67
|
|
|
69
68
|
if (isEnterKeyPressed) {
|
|
70
69
|
handleClick();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SearchInput.js","sources":["../../../../src/components/SearchInput/SearchInput.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport keycode from 'keycode';\r\nimport { Input, InputProps, useLocalization, IconButton } from '../..';\r\n\r\nexport type SearchInputTexts = {\r\n /**\r\n * aria-label text for input\r\n */\r\n inputLabel: string;\r\n};\r\n\r\nexport type SearchInputProps = Omit<InputProps, 'icon'> & {\r\n /** Current input value will be passed to the method. In order to get the value, the component must be controlled otherwise value will always be undefined */\r\n onSearch?: (value: string | number | readonly string[] | undefined) => void;\r\n};\r\n\r\nexport const SearchInput = React.forwardRef(function SearchInput(\r\n { onSearch, ...props }: SearchInputProps,\r\n ref: React.Ref<HTMLInputElement>\r\n) {\r\n const { texts } = useLocalization();\r\n\r\n const handleClick = (): void => {\r\n if (!props.disabled) {\r\n onSearch?.(props.value);\r\n }\r\n };\r\n\r\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\r\n const isEnterKeyPressed = event.keyCode === keycode('enter');\r\n\r\n if (isEnterKeyPressed) {\r\n handleClick();\r\n }\r\n };\r\n\r\n return (\r\n <Input\r\n aria-label={texts.searchInput.inputLabel}\r\n {...props}\r\n button={\r\n <IconButton\r\n icon=\"search\"\r\n className=\"!border-transparent !bg-transparent focus:!border-transparent peer-focus:!border-transparent peer-focus:peer-active:!border-transparent\"\r\n disabled={props.disabled}\r\n onClick={handleClick}\r\n />\r\n }\r\n onKeyDown={handleKeyDown}\r\n ref={ref}\r\n type=\"search\"\r\n />\r\n );\r\n});\r\n"],"names":["SearchInput","React","
|
|
1
|
+
{"version":3,"file":"SearchInput.js","sources":["../../../../src/components/SearchInput/SearchInput.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport keycode from 'keycode';\r\nimport { Input, InputProps, useLocalization, IconButton } from '../..';\r\n\r\nexport type SearchInputTexts = {\r\n /**\r\n * aria-label text for input\r\n */\r\n inputLabel: string;\r\n};\r\n\r\nexport type SearchInputProps = Omit<InputProps, 'icon'> & {\r\n /** Current input value will be passed to the method. In order to get the value, the component must be controlled otherwise value will always be undefined */\r\n onSearch?: (value: string | number | readonly string[] | undefined) => void;\r\n};\r\n\r\nexport const SearchInput = React.forwardRef(function SearchInput(\r\n { onSearch, ...props }: SearchInputProps,\r\n ref: React.Ref<HTMLInputElement>\r\n) {\r\n const { texts } = useLocalization();\r\n\r\n const handleClick = (): void => {\r\n if (!props.disabled) {\r\n onSearch?.(props.value);\r\n }\r\n };\r\n\r\n const handleKeyDown = (event: React.KeyboardEvent<HTMLInputElement>): void => {\r\n const isEnterKeyPressed = event.keyCode === keycode('enter');\r\n\r\n if (isEnterKeyPressed) {\r\n handleClick();\r\n }\r\n };\r\n\r\n return (\r\n <Input\r\n aria-label={texts.searchInput.inputLabel}\r\n {...props}\r\n button={\r\n <IconButton\r\n icon=\"search\"\r\n className=\"!border-transparent !bg-transparent focus:!border-transparent peer-focus:!border-transparent peer-focus:peer-active:!border-transparent\"\r\n disabled={props.disabled}\r\n onClick={handleClick}\r\n />\r\n }\r\n onKeyDown={handleKeyDown}\r\n ref={ref}\r\n type=\"search\"\r\n />\r\n );\r\n});\r\n"],"names":["SearchInput","React","onSearch","props","ref","texts","useLocalization","handleClick","disabled","value","handleKeyDown","event","isEnterKeyPressed","keyCode","keycode","Input","searchInput","inputLabel","button","IconButton","icon","className","onClick","onKeyDown","type"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAgBaA,WAAW,gBAAGC,UAAA,CAAiB,SAASD,WAAT,CACxC;AAAEE,EAAAA,QAAF;AAAY,KAAGC;AAAf,CADwC,EAExCC,GAFwC;AAIxC,QAAM;AAAEC,IAAAA;AAAF,MAAYC,eAAe,EAAjC;;AAEA,QAAMC,WAAW,GAAG;AAChB,QAAI,CAACJ,KAAK,CAACK,QAAX,EAAqB;AACjBN,MAAAA,QAAQ,SAAR,IAAAA,QAAQ,WAAR,YAAAA,QAAQ,CAAGC,KAAK,CAACM,KAAT,CAAR;AACH;AACJ,GAJD;;AAMA,QAAMC,aAAa,GAAIC,KAAD;AAClB,UAAMC,iBAAiB,GAAGD,KAAK,CAACE,OAAN,KAAkBC,OAAO,CAAC,OAAD,CAAnD;;AAEA,QAAIF,iBAAJ,EAAuB;AACnBL,MAAAA,WAAW;AACd;AACJ,GAND;;AAQA,SACIN,aAAA,CAACc,KAAD;kBACgBV,KAAK,CAACW,WAAN,CAAkBC;KAC1Bd;AACJe,IAAAA,MAAM,EACFjB,aAAA,CAACkB,UAAD;AACIC,MAAAA,IAAI,EAAC;AACLC,MAAAA,SAAS,EAAC;AACVb,MAAAA,QAAQ,EAAEL,KAAK,CAACK;AAChBc,MAAAA,OAAO,EAAEf;KAJb;AAOJgB,IAAAA,SAAS,EAAEb;AACXN,IAAAA,GAAG,EAAEA;AACLoB,IAAAA,IAAI,EAAC;IAbT,CADJ;AAiBH,CArC0B;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Select.js","sources":["../../../../src/components/Select/Select.tsx"],"sourcesContent":["import * as React from 'react';\
|
|
1
|
+
{"version":3,"file":"Select.js","sources":["../../../../src/components/Select/Select.tsx"],"sourcesContent":["import * as React from 'react';\nimport cn from 'classnames';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { Icon } from '../Icon/Icon';\nimport { Listbox, MultiListbox, ListboxProps } from '../Listbox/Listbox';\nimport { useBoundingClientRectListener } from '../../utils/hooks/useBoundingClientRectListener';\nimport { useSelect } from './useSelect';\nimport { Combobox, ComboboxProps } from '../Combobox/Combobox';\nimport { Badge } from '../Badge/Badge';\nimport { getInputClasses } from '../Input/util';\n\nexport type SelectTexts = {\n /**\n * The text displayed when all options are selected when multiselect mode in on.\n */\n allOptionsSelected: string;\n};\n\nexport type BaseSelectProps = Omit<ListboxProps, 'dialog'> &\n Omit<ComboboxProps, 'inline'> & {\n /**\n * Allows to select multiple values.\n * All the selected values will be combined in a comma-seperated string as the value of the input.\n */\n multiselect?: boolean;\n };\n\nexport type SelectProps = BaseSelectProps & {\n /**\n * Creates an editable select.\n * Setting this will render a inline Combobox which will display the provided data on click/focus,\n * even if there is no value in the input.\n * After user starts typing, matching data will be displayed.\n */\n editable?: boolean;\n};\n\nconst BaseSelect = React.forwardRef(function BaseSelect(props: BaseSelectProps, ref: React.Ref<HTMLInputElement>) {\n const { autoFocus, className: externalClassName, highlighted, style, ...otherProps } = props;\n const { button, listbox, popover, input, text, more = 0 } = useSelect(otherProps, ref);\n const internalRef = React.useRef<HTMLButtonElement>(null);\n const selectDimensions = useBoundingClientRectListener(internalRef);\n const className = cn('inline-flex relative w-full', { 'yt-select--readonly': props.readOnly }, externalClassName);\n const inputClassname = cn(getInputClasses(props), 'h-8 text-left pr-0', {\n 'border-blue': popover.open,\n });\n\n React.useEffect(() => {\n if (autoFocus && internalRef.current) {\n internalRef.current.focus();\n }\n }, []);\n\n const renderMultiSelection = (): React.ReactNode => {\n return (\n <>\n <span className=\"flex-grow truncate text-left\">{text}</span>\n {more > 0 && <Badge className=\"ml-2\">{`+${more}`}</Badge>}\n </>\n );\n };\n\n const commonListboxProps: ListboxProps = {\n ...listbox,\n className: 'w-auto',\n invalid: undefined,\n style: { minWidth: selectDimensions?.width },\n tabIndex: popover.open ? 0 : -1,\n };\n\n return (\n <span className={className} data-taco=\"select\" style={style}>\n <PopoverPrimitive.Root {...popover}>\n <PopoverPrimitive.Trigger {...button} className={inputClassname} ref={internalRef}>\n {props.multiselect ? renderMultiSelection() : <span className=\"flex-grow truncate text-left\">{text}</span>}\n <span className=\"flex h-8 w-8 items-center justify-center\">\n <Icon className=\"pointer-events-none\" name={popover.open ? 'chevron-up' : 'chevron-down'} />\n </span>\n </PopoverPrimitive.Trigger>\n <PopoverPrimitive.Content align=\"start\" sideOffset={4}>\n {props.multiselect ? <MultiListbox {...commonListboxProps} /> : <Listbox {...commonListboxProps} />}\n </PopoverPrimitive.Content>\n <input {...input} className=\"hidden\" type=\"text\" />\n </PopoverPrimitive.Root>\n </span>\n );\n});\n\nexport const Select = React.forwardRef(function Select(props: SelectProps, ref: React.Ref<HTMLInputElement>) {\n const { editable, ...otherProps } = props;\n\n if (editable) {\n return <Combobox {...otherProps} dialog={undefined} inline ref={ref} />;\n }\n\n return <BaseSelect {...otherProps} ref={ref} />;\n});\n"],"names":["BaseSelect","React","props","ref","autoFocus","className","externalClassName","highlighted","style","otherProps","button","listbox","popover","input","text","more","useSelect","internalRef","selectDimensions","useBoundingClientRectListener","cn","readOnly","inputClassname","getInputClasses","open","current","focus","renderMultiSelection","Badge","commonListboxProps","invalid","undefined","minWidth","width","tabIndex","PopoverPrimitive","multiselect","Icon","name","align","sideOffset","MultiListbox","Listbox","type","Select","editable","Combobox","dialog","inline"],"mappings":"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"}
|
|
@@ -4,7 +4,8 @@ import { v4 } from 'uuid';
|
|
|
4
4
|
import { useLocalization } from '../Provider/Provider.js';
|
|
5
5
|
import { useProxiedRef } from '../../utils/hooks/useProxiedRef.js';
|
|
6
6
|
import keycode from 'keycode';
|
|
7
|
-
import {
|
|
7
|
+
import { createCustomEvent } from '../../utils/input.js';
|
|
8
|
+
import { useFlattenedData, findByValue, setInputValueByRef, sanitizeItem } from '../Listbox/util.js';
|
|
8
9
|
|
|
9
10
|
const useSelect = ({
|
|
10
11
|
'aria-label': ariaLabel,
|
|
@@ -15,20 +16,21 @@ const useSelect = ({
|
|
|
15
16
|
emptyValue,
|
|
16
17
|
id: nativeId,
|
|
17
18
|
multiselect,
|
|
19
|
+
onBlur,
|
|
18
20
|
onClick,
|
|
19
21
|
onChange,
|
|
20
22
|
readOnly,
|
|
21
|
-
value
|
|
23
|
+
value,
|
|
22
24
|
...otherProps
|
|
23
25
|
}, ref) => {
|
|
24
26
|
const {
|
|
25
27
|
texts
|
|
26
28
|
} = useLocalization();
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
+
const flattenedData = useFlattenedData(data);
|
|
30
|
+
const listboxInputRef = useProxiedRef(ref);
|
|
29
31
|
const [open, setOpen] = useState(false);
|
|
30
32
|
const id = useMemo(() => nativeId || `select_${v4()}`, [nativeId]);
|
|
31
|
-
const
|
|
33
|
+
const inputRef = useRef(null);
|
|
32
34
|
const buttonId = `${id}-button`; // support 'escape' resetting to the value that was set when the listbox opened
|
|
33
35
|
|
|
34
36
|
const [lastValue, setLastValue] = useState(value);
|
|
@@ -36,18 +38,24 @@ const useSelect = ({
|
|
|
36
38
|
setLastValue(value);
|
|
37
39
|
}, [open]);
|
|
38
40
|
useEffect(() => {
|
|
39
|
-
if (
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
} else
|
|
50
|
-
|
|
41
|
+
if (value === undefined) {
|
|
42
|
+
if (defaultValue !== undefined && findByValue(flattenedData, defaultValue)) {
|
|
43
|
+
setInputValueByRef(inputRef.current, defaultValue);
|
|
44
|
+
} else {
|
|
45
|
+
if (emptyValue !== undefined) {
|
|
46
|
+
setInputValueByRef(inputRef.current, emptyValue);
|
|
47
|
+
} else if (data.length > 0) {
|
|
48
|
+
setInputValueByRef(inputRef.current, data[0].value);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
} else {
|
|
52
|
+
if (!findByValue(flattenedData, value)) {
|
|
53
|
+
if (emptyValue !== undefined) {
|
|
54
|
+
setInputValueByRef(inputRef.current, emptyValue);
|
|
55
|
+
} else if (data.length > 0) {
|
|
56
|
+
setInputValueByRef(inputRef.current, data[0].value);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
51
59
|
}
|
|
52
60
|
}, []); // event handlers
|
|
53
61
|
|
|
@@ -65,7 +73,7 @@ const useSelect = ({
|
|
|
65
73
|
event.preventDefault();
|
|
66
74
|
|
|
67
75
|
if (lastValue !== undefined) {
|
|
68
|
-
setInputValueByRef(
|
|
76
|
+
setInputValueByRef(listboxInputRef.current, lastValue);
|
|
69
77
|
}
|
|
70
78
|
|
|
71
79
|
setOpen(false);
|
|
@@ -94,6 +102,10 @@ const useSelect = ({
|
|
|
94
102
|
|
|
95
103
|
if (!multiselect) {
|
|
96
104
|
setOpen(false);
|
|
105
|
+
|
|
106
|
+
if (onBlur) {
|
|
107
|
+
onBlur(createCustomEvent('blur'));
|
|
108
|
+
}
|
|
97
109
|
}
|
|
98
110
|
};
|
|
99
111
|
|
|
@@ -104,16 +116,16 @@ const useSelect = ({
|
|
|
104
116
|
if (multiselect) {
|
|
105
117
|
const selectedValues = (value === null || value === void 0 ? void 0 : value.toString().split(',')) || [];
|
|
106
118
|
|
|
107
|
-
if (selectedValues.length ===
|
|
119
|
+
if (selectedValues.length === flattenedData.filter(item => !item.disabled).length) {
|
|
108
120
|
text = texts.select.allOptionsSelected;
|
|
109
121
|
} else {
|
|
110
122
|
var _findByValue$text, _findByValue;
|
|
111
123
|
|
|
112
|
-
text = (_findByValue$text = (_findByValue = findByValue(
|
|
124
|
+
text = (_findByValue$text = (_findByValue = findByValue(flattenedData, selectedValues[0])) === null || _findByValue === void 0 ? void 0 : _findByValue.text) !== null && _findByValue$text !== void 0 ? _findByValue$text : '';
|
|
113
125
|
more = selectedValues.length > 1 ? selectedValues.length - 1 : 0;
|
|
114
126
|
}
|
|
115
127
|
} else {
|
|
116
|
-
const item = findByValue(
|
|
128
|
+
const item = findByValue(flattenedData, value);
|
|
117
129
|
|
|
118
130
|
if (item) {
|
|
119
131
|
text = item.icon ? createElement(Fragment, null, cloneElement(item.icon, {
|
|
@@ -129,7 +141,7 @@ const useSelect = ({
|
|
|
129
141
|
if (onChange) {
|
|
130
142
|
var _item$path$split, _item$path;
|
|
131
143
|
|
|
132
|
-
const item = findByValue(
|
|
144
|
+
const item = findByValue(flattenedData, event.target.value);
|
|
133
145
|
event.detail = sanitizeItem(item);
|
|
134
146
|
const indexes = (_item$path$split = item === null || item === void 0 ? void 0 : (_item$path = item.path) === null || _item$path === void 0 ? void 0 : _item$path.split('.')) !== null && _item$path$split !== void 0 ? _item$path$split : [];
|
|
135
147
|
|
|
@@ -140,7 +152,7 @@ const useSelect = ({
|
|
|
140
152
|
let lastPath;
|
|
141
153
|
event.detail.parents = indexes.map(i => {
|
|
142
154
|
lastPath = lastPath ? [lastPath, i].join('.') : i;
|
|
143
|
-
return sanitizeItem(
|
|
155
|
+
return sanitizeItem(flattenedData.find(i => i.path === lastPath));
|
|
144
156
|
});
|
|
145
157
|
}
|
|
146
158
|
|
|
@@ -163,21 +175,19 @@ const useSelect = ({
|
|
|
163
175
|
data,
|
|
164
176
|
disabled,
|
|
165
177
|
emptyValue,
|
|
178
|
+
onBlur,
|
|
166
179
|
onClick: handleListboxClick,
|
|
167
180
|
onChange: event => {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
setInputValueByRef(internalInputRef.current, (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.value);
|
|
181
|
+
setInputValueByRef(inputRef.current, event.target.value);
|
|
171
182
|
},
|
|
172
183
|
onKeyDown: handleListboxKeyDown,
|
|
173
|
-
ref:
|
|
174
|
-
value
|
|
175
|
-
multiselect
|
|
184
|
+
ref: listboxInputRef,
|
|
185
|
+
value
|
|
176
186
|
};
|
|
177
187
|
const input = {
|
|
178
188
|
onChange: handleInputChange,
|
|
179
|
-
ref:
|
|
180
|
-
value: value !== null && value !== void 0 ? value : ''
|
|
189
|
+
ref: inputRef,
|
|
190
|
+
value: String(value !== null && value !== void 0 ? value : '')
|
|
181
191
|
};
|
|
182
192
|
return {
|
|
183
193
|
button,
|
|
@@ -185,7 +195,13 @@ const useSelect = ({
|
|
|
185
195
|
input,
|
|
186
196
|
popover: {
|
|
187
197
|
open,
|
|
188
|
-
onOpenChange:
|
|
198
|
+
onOpenChange: open => {
|
|
199
|
+
if (!open && onBlur) {
|
|
200
|
+
onBlur(createCustomEvent('blur'));
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
setOpen(open);
|
|
204
|
+
}
|
|
189
205
|
},
|
|
190
206
|
text,
|
|
191
207
|
more
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSelect.js","sources":["../../../../src/components/Select/useSelect.tsx"],"sourcesContent":["import * as React from 'react';\r\nimport keycode from 'keycode';\r\nimport cn from 'classnames';\r\nimport { v4 as uuid } from 'uuid';\r\nimport { useLocalization } from '../Provider/Provider';\r\nimport { SelectProps } from './Select';\r\nimport { ListboxProps } from '../Listbox/Listbox';\r\nimport { useProxiedRef } from '../../utils/hooks/useProxiedRef';\r\nimport { setInputValueByRef, findByValue, useFlattenedData, sanitizeItem } from '../Listbox/util';\r\nimport { ScrollableListItemValue } from '../Listbox/ScrollableList';\r\n\r\ntype useSelect = React.HtmlHTMLAttributes<HTMLDivElement> & {\r\n button: React.ButtonHTMLAttributes<HTMLButtonElement>;\r\n listbox: ListboxProps;\r\n input: any;\r\n popover: { open: boolean; onOpenChange: (open: boolean) => void };\r\n text: string | JSX.Element;\r\n more?: number;\r\n};\r\n\r\nexport const useSelect = (\r\n {\r\n 'aria-label': ariaLabel,\r\n 'aria-labelledby': ariaLabelledBy,\r\n data = [],\r\n defaultValue,\r\n disabled,\r\n emptyValue,\r\n id: nativeId,\r\n multiselect,\r\n onClick,\r\n onChange,\r\n readOnly,\r\n value = emptyValue,\r\n ...otherProps\r\n }: SelectProps,\r\n ref: React.Ref<HTMLInputElement>\r\n): useSelect => {\r\n const { texts } = useLocalization();\r\n const searchData = useFlattenedData(data);\r\n const inputRef = useProxiedRef<HTMLInputElement>(ref);\r\n const [open, setOpen] = React.useState(false);\r\n const id = React.useMemo(() => nativeId || `select_${uuid()}`, [nativeId]);\r\n const internalInputRef = React.useRef(null);\r\n const buttonId = `${id}-button`;\r\n // support 'escape' resetting to the value that was set when the listbox opened\r\n const [lastValue, setLastValue] = React.useState<ScrollableListItemValue | undefined>(value);\r\n\r\n React.useEffect(() => {\r\n setLastValue(value);\r\n }, [open]);\r\n\r\n React.useEffect(() => {\r\n if (defaultValue !== undefined && value === undefined) {\r\n setInputValueByRef(internalInputRef.current, defaultValue);\r\n }\r\n }, [defaultValue]);\r\n\r\n React.useEffect(() => {\r\n // If emptyValue is defined, then set emptyValue\r\n if (emptyValue !== undefined && value === emptyValue) {\r\n setInputValueByRef(internalInputRef.current, value);\r\n } else if (value !== undefined && data.some(option => option.value === value)) {\r\n setInputValueByRef(internalInputRef.current, value);\r\n } else if (data.length && defaultValue === undefined) {\r\n setInputValueByRef(internalInputRef.current, data[0].value);\r\n }\r\n }, []);\r\n\r\n // event handlers\r\n const handleButtonKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>): void => {\r\n if (event.keyCode === keycode('up') || event.keyCode === keycode('down')) {\r\n event.preventDefault();\r\n setOpen(true);\r\n }\r\n };\r\n\r\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLElement>): void => {\r\n switch (event.keyCode) {\r\n case keycode('escape'): {\r\n event.preventDefault();\r\n if (lastValue !== undefined) {\r\n setInputValueByRef(inputRef.current, lastValue);\r\n }\r\n\r\n setOpen(false);\r\n break;\r\n }\r\n\r\n case keycode('tab'):\r\n case keycode('enter'): {\r\n if (event.keyCode !== keycode('tab')) {\r\n event.preventDefault();\r\n }\r\n setOpen(false);\r\n break;\r\n }\r\n\r\n default:\r\n }\r\n\r\n if (otherProps.onKeyDown) {\r\n otherProps.onKeyDown(event);\r\n }\r\n };\r\n\r\n const handleListboxClick = (event: React.MouseEvent<HTMLLIElement>): void => {\r\n event.preventDefault();\r\n if (!multiselect) {\r\n setOpen(false);\r\n }\r\n };\r\n\r\n let text: string | JSX.Element = '';\r\n let more = 0;\r\n\r\n if (value !== undefined) {\r\n if (multiselect) {\r\n const selectedValues = value?.toString().split(',') || [];\r\n\r\n if (selectedValues.length === searchData.filter(item => !item.disabled).length) {\r\n text = texts.select.allOptionsSelected;\r\n } else {\r\n text = findByValue(searchData, selectedValues[0])?.text ?? '';\r\n more = selectedValues.length > 1 ? selectedValues.length - 1 : 0;\r\n }\r\n } else {\r\n const item = findByValue(searchData, value);\r\n\r\n if (item) {\r\n text = item.icon ? (\r\n <>\r\n {React.cloneElement(item.icon, {\r\n className: cn(item.icon.props.className, 'mr-1 -mt-px'),\r\n })}\r\n {item.text}\r\n </>\r\n ) : (\r\n item.text\r\n );\r\n }\r\n }\r\n }\r\n\r\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\r\n event.persist();\r\n\r\n if (onChange) {\r\n const item = findByValue(searchData, event.target.value);\r\n (event as any).detail = sanitizeItem(item);\r\n\r\n const indexes = item?.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 (event as any).detail.parents = indexes.map(i => {\r\n lastPath = lastPath ? [lastPath, i].join('.') : i;\r\n return sanitizeItem(searchData.find(i => i.path === lastPath));\r\n });\r\n }\r\n\r\n onChange(event);\r\n }\r\n };\r\n\r\n const button: React.ButtonHTMLAttributes<HTMLButtonElement> = {\r\n 'aria-haspopup': 'listbox' as const,\r\n 'aria-label': ariaLabel ? `${ariaLabel} ${text}` : undefined,\r\n 'aria-labelledby': ariaLabelledBy ? `${ariaLabelledBy} ${buttonId}` : undefined,\r\n disabled,\r\n id: buttonId,\r\n onKeyDown: !disabled && !readOnly ? handleButtonKeyDown : undefined,\r\n type: 'button',\r\n };\r\n\r\n const listbox = {\r\n ...otherProps,\r\n 'aria-label': ariaLabel,\r\n 'aria-labelledby': ariaLabelledBy,\r\n data,\r\n disabled,\r\n emptyValue,\r\n onClick: handleListboxClick,\r\n onChange: event => {\r\n setInputValueByRef(internalInputRef.current, event.target?.value);\r\n },\r\n onKeyDown: handleListboxKeyDown,\r\n ref: inputRef,\r\n value,\r\n multiselect,\r\n };\r\n\r\n const input = {\r\n onChange: handleInputChange,\r\n ref: internalInputRef,\r\n value: value ?? '',\r\n };\r\n\r\n return {\r\n button,\r\n listbox,\r\n input,\r\n popover: {\r\n open,\r\n onOpenChange: setOpen,\r\n },\r\n text,\r\n more,\r\n };\r\n};\r\n"],"names":["useSelect","ariaLabel","ariaLabelledBy","data","defaultValue","disabled","emptyValue","id","nativeId","multiselect","onClick","onChange","readOnly","value","otherProps","ref","texts","useLocalization","searchData","useFlattenedData","inputRef","useProxiedRef","open","setOpen","React","uuid","internalInputRef","buttonId","lastValue","setLastValue","undefined","setInputValueByRef","current","some","option","length","handleButtonKeyDown","event","keyCode","keycode","preventDefault","handleListboxKeyDown","onKeyDown","handleListboxClick","text","more","selectedValues","toString","split","filter","item","select","allOptionsSelected","findByValue","icon","className","cn","props","handleInputChange","persist","target","detail","sanitizeItem","indexes","path","pop","lastPath","parents","map","i","join","find","button","type","listbox","input","popover","onOpenChange"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useSelect.js","sources":["../../../../src/components/Select/useSelect.tsx"],"sourcesContent":["import * as React from 'react';\nimport keycode from 'keycode';\nimport cn from 'classnames';\nimport { v4 as uuid } from 'uuid';\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\nimport { useLocalization } from '../Provider/Provider';\nimport { SelectProps } from './Select';\nimport { ListboxProps } from '../Listbox/Listbox';\nimport { useProxiedRef } from '../../utils/hooks/useProxiedRef';\nimport { setInputValueByRef, findByValue, useFlattenedData, sanitizeItem } from '../Listbox/util';\nimport { ScrollableListItemValue } from '../Listbox/ScrollableList';\nimport { createCustomEvent } from '../../utils/input';\n\ntype InternalButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement>;\ntype InternalListboxProps = ListboxProps & { ref: React.ForwardedRef<HTMLInputElement> };\ntype InternalInputProps = React.InputHTMLAttributes<HTMLInputElement> & { ref: React.ForwardedRef<HTMLInputElement> };\n\ntype useSelect = React.HtmlHTMLAttributes<HTMLDivElement> & {\n button: InternalButtonProps;\n listbox: InternalListboxProps;\n input: InternalInputProps;\n popover: Pick<PopoverPrimitive.PopoverProps, 'onOpenChange' | 'open'>;\n text: string | JSX.Element;\n more?: number;\n};\n\nexport const useSelect = (\n {\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n data = [],\n defaultValue,\n disabled,\n emptyValue,\n id: nativeId,\n multiselect,\n onBlur,\n onClick,\n onChange,\n readOnly,\n value,\n ...otherProps\n }: SelectProps,\n ref: React.Ref<HTMLInputElement>\n): useSelect => {\n const { texts } = useLocalization();\n const flattenedData = useFlattenedData(data);\n const listboxInputRef = useProxiedRef<HTMLInputElement>(ref);\n const [open, setOpen] = React.useState(false);\n const id = React.useMemo(() => nativeId || `select_${uuid()}`, [nativeId]);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const buttonId = `${id}-button`;\n // support 'escape' resetting to the value that was set when the listbox opened\n const [lastValue, setLastValue] = React.useState<ScrollableListItemValue | undefined>(value);\n\n React.useEffect(() => {\n setLastValue(value);\n }, [open]);\n\n React.useEffect(() => {\n if (value === undefined) {\n if (defaultValue !== undefined && findByValue(flattenedData, defaultValue)) {\n setInputValueByRef(inputRef.current, defaultValue);\n } else {\n if (emptyValue !== undefined) {\n setInputValueByRef(inputRef.current, emptyValue);\n } else if (data.length > 0) {\n setInputValueByRef(inputRef.current, data[0].value);\n }\n }\n } else {\n if (!findByValue(flattenedData, value)) {\n if (emptyValue !== undefined) {\n setInputValueByRef(inputRef.current, emptyValue);\n } else if (data.length > 0) {\n setInputValueByRef(inputRef.current, data[0].value);\n }\n }\n }\n }, []);\n\n // event handlers\n const handleButtonKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>): void => {\n if (event.keyCode === keycode('up') || event.keyCode === keycode('down')) {\n event.preventDefault();\n setOpen(true);\n }\n };\n\n const handleListboxKeyDown = (event: React.KeyboardEvent<HTMLElement>): void => {\n switch (event.keyCode) {\n case keycode('escape'): {\n event.preventDefault();\n if (lastValue !== undefined) {\n setInputValueByRef(listboxInputRef.current, lastValue);\n }\n\n setOpen(false);\n break;\n }\n\n case keycode('tab'):\n case keycode('enter'): {\n if (event.keyCode !== keycode('tab')) {\n event.preventDefault();\n }\n setOpen(false);\n break;\n }\n\n default:\n }\n\n if (otherProps.onKeyDown) {\n otherProps.onKeyDown(event);\n }\n };\n\n const handleListboxClick = (event: React.MouseEvent<HTMLLIElement>): void => {\n event.preventDefault();\n if (!multiselect) {\n setOpen(false);\n if (onBlur) {\n onBlur(createCustomEvent('blur'));\n }\n }\n };\n\n let text: string | JSX.Element = '';\n let more = 0;\n\n if (value !== undefined) {\n if (multiselect) {\n const selectedValues = value?.toString().split(',') || [];\n\n if (selectedValues.length === flattenedData.filter(item => !item.disabled).length) {\n text = texts.select.allOptionsSelected;\n } else {\n text = findByValue(flattenedData, selectedValues[0])?.text ?? '';\n more = selectedValues.length > 1 ? selectedValues.length - 1 : 0;\n }\n } else {\n const item = findByValue(flattenedData, value);\n\n if (item) {\n text = item.icon ? (\n <>\n {React.cloneElement(item.icon, {\n className: cn(item.icon.props.className, 'mr-1 -mt-px'),\n })}\n {item.text}\n </>\n ) : (\n item.text\n );\n }\n }\n }\n\n const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>): void => {\n event.persist();\n\n if (onChange) {\n const item = findByValue(flattenedData, event.target.value);\n (event as any).detail = sanitizeItem(item);\n\n const indexes = item?.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 (event as any).detail.parents = indexes.map(i => {\n lastPath = lastPath ? [lastPath, i].join('.') : i;\n return sanitizeItem(flattenedData.find(i => i.path === lastPath));\n });\n }\n\n onChange(event);\n }\n };\n\n const button: InternalButtonProps = {\n 'aria-haspopup': 'listbox' as const,\n 'aria-label': ariaLabel ? `${ariaLabel} ${text}` : undefined,\n 'aria-labelledby': ariaLabelledBy ? `${ariaLabelledBy} ${buttonId}` : undefined,\n disabled,\n id: buttonId,\n onKeyDown: !disabled && !readOnly ? handleButtonKeyDown : undefined,\n type: 'button',\n };\n\n const listbox: InternalListboxProps = {\n ...otherProps,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n data,\n disabled,\n emptyValue,\n onBlur,\n onClick: handleListboxClick,\n onChange: event => {\n setInputValueByRef(inputRef.current, event.target.value);\n },\n onKeyDown: handleListboxKeyDown,\n ref: listboxInputRef,\n value,\n };\n\n const input: InternalInputProps = {\n onChange: handleInputChange,\n ref: inputRef,\n value: String(value ?? ''),\n };\n\n return {\n button,\n listbox,\n input,\n popover: {\n open,\n onOpenChange: open => {\n if (!open && onBlur) {\n onBlur(createCustomEvent('blur'));\n }\n setOpen(open);\n },\n },\n text,\n more,\n };\n};\n"],"names":["useSelect","ariaLabel","ariaLabelledBy","data","defaultValue","disabled","emptyValue","id","nativeId","multiselect","onBlur","onClick","onChange","readOnly","value","otherProps","ref","texts","useLocalization","flattenedData","useFlattenedData","listboxInputRef","useProxiedRef","open","setOpen","React","uuid","inputRef","buttonId","lastValue","setLastValue","undefined","findByValue","setInputValueByRef","current","length","handleButtonKeyDown","event","keyCode","keycode","preventDefault","handleListboxKeyDown","onKeyDown","handleListboxClick","createCustomEvent","text","more","selectedValues","toString","split","filter","item","select","allOptionsSelected","icon","className","cn","props","handleInputChange","persist","target","detail","sanitizeItem","indexes","path","pop","lastPath","parents","map","i","join","find","button","type","listbox","input","String","popover","onOpenChange"],"mappings":"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"}
|
package/dist/esm/index.css
CHANGED
|
@@ -187,11 +187,11 @@
|
|
|
187
187
|
}
|
|
188
188
|
|
|
189
189
|
[data-taco='button'] > [data-taco='icon'] {
|
|
190
|
-
@apply pointer-events-none -ml-2
|
|
190
|
+
@apply pointer-events-none -ml-2 -mt-2 -mb-2 inline p-px;
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
-
[data-taco='button'] >
|
|
194
|
-
@apply
|
|
193
|
+
[data-taco='button'] > * + [data-taco='icon'] {
|
|
194
|
+
@apply -mr-2 ml-0;
|
|
195
195
|
}
|
|
196
196
|
|
|
197
197
|
[data-taco='spinner'] svg circle {
|
package/dist/index.css
CHANGED
|
@@ -187,11 +187,11 @@
|
|
|
187
187
|
}
|
|
188
188
|
|
|
189
189
|
[data-taco='button'] > [data-taco='icon'] {
|
|
190
|
-
@apply pointer-events-none -ml-2
|
|
190
|
+
@apply pointer-events-none -ml-2 -mt-2 -mb-2 inline p-px;
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
-
[data-taco='button'] >
|
|
194
|
-
@apply
|
|
193
|
+
[data-taco='button'] > * + [data-taco='icon'] {
|
|
194
|
+
@apply -mr-2 ml-0;
|
|
195
195
|
}
|
|
196
196
|
|
|
197
197
|
[data-taco='spinner'] svg circle {
|