@os-design/core 1.0.183 → 1.0.184

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,125 +0,0 @@
1
- function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
- import React, { useCallback, useMemo } from 'react';
3
- import { FixedSizeList } from 'react-window';
4
- import { useFontSize, useSize } from '@os-design/utils';
5
- import { useTheme } from '@os-design/theming';
6
- import { useIsMinWidth } from '@os-design/media';
7
- import { useSelectHandler } from '@os-design/menu-utils';
8
- import MenuItem from '../MenuItem';
9
- import useRWLoadNext from '../List/utils/useRWLoadNext';
10
- const SelectList = ({
11
- searchVisible,
12
- options,
13
- visibleCount,
14
- overscanCount,
15
- threshold,
16
- onLoadNext,
17
- maxSelectedItems,
18
- containerRef,
19
- value,
20
- onChange = () => {},
21
- id,
22
- size
23
- }) => {
24
- const windowSize = useSize();
25
- const isMinXs = useIsMinWidth('xs');
26
- const fontSize = useFontSize(document.body);
27
- const {
28
- theme
29
- } = useTheme();
30
- const scaleFactor = useMemo(() => {
31
- const s = size || 'medium';
32
- return ['small', 'medium', 'large'].includes(s) ? theme.sizes[s] : Number(s.replace(/^([0-9]+(\.[0-9]+)?).*/, '$1')) || 1; // Extract the number
33
- }, [size, theme.sizes]);
34
- const paddingBottom = useMemo(() => {
35
- const paddingEm = isMinXs ? theme.menuPaddingVertical : theme.modalBodyPaddingVertical[0];
36
- return paddingEm * fontSize * scaleFactor;
37
- }, [isMinXs, theme.menuPaddingVertical, theme.modalBodyPaddingVertical, fontSize, scaleFactor]);
38
- const paddingTop = useMemo(() => searchVisible ? 5 * scaleFactor : paddingBottom, [searchVisible, scaleFactor, paddingBottom]);
39
- const searchInputHeight = useMemo(() => searchVisible ? (theme.baseHeight + theme.menuPaddingVertical) * fontSize * scaleFactor : 0, [searchVisible, theme.baseHeight, theme.menuPaddingVertical, fontSize, scaleFactor]);
40
- const itemSize = useMemo(() => theme.menuItemHeight * fontSize * scaleFactor, [theme.menuItemHeight, fontSize, scaleFactor]);
41
- const height = useMemo(() => {
42
- // Modal
43
- if (!isMinXs) {
44
- const maxHeight = windowSize.height - theme.modalHeaderHeight * fontSize * scaleFactor - searchInputHeight;
45
- const curHeight = options.length * itemSize + paddingTop + paddingBottom;
46
- return curHeight < maxHeight ? curHeight : maxHeight;
47
- }
48
- // Popover
49
- const count = options.length < visibleCount ? options.length : visibleCount;
50
- return count * itemSize + paddingTop + paddingBottom;
51
- }, [isMinXs, options.length, visibleCount, itemSize, windowSize.height, theme.modalHeaderHeight, fontSize, scaleFactor, searchInputHeight, paddingTop, paddingBottom]);
52
- const scrollHandler = useRWLoadNext({
53
- itemCount: options.length,
54
- threshold,
55
- itemSize,
56
- paddingTop,
57
- height,
58
- onLoadNext
59
- });
60
- const onSelect = useSelectHandler({
61
- value: value || [],
62
- onChange,
63
- maxSelectedItems
64
- });
65
-
66
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
- const InnerElement = useCallback(({
68
- style,
69
- ...innerElementRest
70
- }) => /*#__PURE__*/React.createElement("div", _extends({
71
- style: {
72
- ...style,
73
- height: `${parseFloat(style.height) + paddingTop + paddingBottom}px`
74
- },
75
- role: "listbox",
76
- id: id
77
- }, innerElementRest)), [id, paddingBottom, paddingTop]);
78
- const listItemFn = useCallback(({
79
- index,
80
- style
81
- }) => {
82
- const {
83
- title: optionTitle,
84
- value: optionValue,
85
- onClick: optionOnClick,
86
- ...restOption
87
- } = options[index];
88
- return /*#__PURE__*/React.createElement(MenuItem, _extends({
89
- style: {
90
- ...style,
91
- top: `${parseFloat(style.top ? style.top.toString() : '0') + paddingTop}px`
92
- },
93
- selected: (value || []).includes(optionValue || ''),
94
- onClick: e => {
95
- if (!optionValue) return;
96
- onSelect(optionValue);
97
-
98
- // Focus the input.
99
- // Otherwise, if the max number of selected items equals 1
100
- // and the user presses enter to select an item,
101
- // the input will lose focus.
102
- if (containerRef.current && maxSelectedItems === 1) {
103
- containerRef.current.focus();
104
- }
105
- if (optionOnClick) optionOnClick(e);
106
- },
107
- role: "option",
108
- "aria-selected": (value || []).includes(optionValue || '')
109
- }, restOption), optionTitle);
110
- }, [containerRef, maxSelectedItems, onSelect, options, paddingTop, value]);
111
- return /*#__PURE__*/React.createElement(FixedSizeList, {
112
- width: "100%",
113
- height: height,
114
- itemSize: itemSize,
115
- itemCount: options.length,
116
- overscanCount: overscanCount,
117
- onScroll: ({
118
- scrollOffset
119
- }) => scrollHandler(scrollOffset),
120
- innerElementType: InnerElement
121
- }, listItemFn);
122
- };
123
- SelectList.displayName = 'SelectList';
124
- export default SelectList;
125
- //# sourceMappingURL=SelectList.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectList.js","names":["React","useCallback","useMemo","FixedSizeList","useFontSize","useSize","useTheme","useIsMinWidth","useSelectHandler","MenuItem","useRWLoadNext","SelectList","searchVisible","options","visibleCount","overscanCount","threshold","onLoadNext","maxSelectedItems","containerRef","value","onChange","id","size","windowSize","isMinXs","fontSize","document","body","theme","scaleFactor","s","includes","sizes","Number","replace","paddingBottom","paddingEm","menuPaddingVertical","modalBodyPaddingVertical","paddingTop","searchInputHeight","baseHeight","itemSize","menuItemHeight","height","maxHeight","modalHeaderHeight","curHeight","length","count","scrollHandler","itemCount","onSelect","InnerElement","style","innerElementRest","parseFloat","listItemFn","index","title","optionTitle","optionValue","onClick","optionOnClick","restOption","top","toString","e","current","focus","scrollOffset","displayName"],"sources":["../../../src/Select/SelectList.tsx"],"sourcesContent":["import React, { RefObject, useCallback, useMemo } from 'react';\nimport { FixedSizeList } from 'react-window';\nimport { useFontSize, useSize } from '@os-design/utils';\nimport { useTheme } from '@os-design/theming';\nimport { useIsMinWidth } from '@os-design/media';\nimport { WithSize } from '@os-design/styles';\nimport { useSelectHandler } from '@os-design/menu-utils';\nimport MenuItem, { MenuItemProps } from '../MenuItem';\nimport useRWLoadNext from '../List/utils/useRWLoadNext';\n\nexport interface OptionProps extends MenuItemProps {\n title?: string;\n}\n\ninterface SelectListProps extends WithSize {\n searchVisible: boolean;\n options: OptionProps[];\n visibleCount: number;\n overscanCount: number;\n threshold: number;\n onLoadNext: () => void;\n maxSelectedItems: number | 'all';\n containerRef: RefObject<HTMLDivElement>;\n value?: string[];\n onChange?: (value: string[]) => void;\n id?: string;\n}\n\nconst SelectList: React.FC<SelectListProps> = ({\n searchVisible,\n options,\n visibleCount,\n overscanCount,\n threshold,\n onLoadNext,\n maxSelectedItems,\n containerRef,\n value,\n onChange = () => {},\n id,\n size,\n}) => {\n const windowSize = useSize();\n const isMinXs = useIsMinWidth('xs');\n const fontSize = useFontSize(document.body);\n const { theme } = useTheme();\n\n const scaleFactor = useMemo(() => {\n const s = size || 'medium';\n return ['small', 'medium', 'large'].includes(s)\n ? theme.sizes[s]\n : Number(s.replace(/^([0-9]+(\\.[0-9]+)?).*/, '$1')) || 1; // Extract the number\n }, [size, theme.sizes]);\n\n const paddingBottom = useMemo(() => {\n const paddingEm = isMinXs\n ? theme.menuPaddingVertical\n : theme.modalBodyPaddingVertical[0];\n return paddingEm * fontSize * scaleFactor;\n }, [\n isMinXs,\n theme.menuPaddingVertical,\n theme.modalBodyPaddingVertical,\n fontSize,\n scaleFactor,\n ]);\n\n const paddingTop = useMemo(\n () => (searchVisible ? 5 * scaleFactor : paddingBottom),\n [searchVisible, scaleFactor, paddingBottom]\n );\n\n const searchInputHeight = useMemo(\n () =>\n searchVisible\n ? (theme.baseHeight + theme.menuPaddingVertical) *\n fontSize *\n scaleFactor\n : 0,\n [\n searchVisible,\n theme.baseHeight,\n theme.menuPaddingVertical,\n fontSize,\n scaleFactor,\n ]\n );\n\n const itemSize = useMemo(\n () => theme.menuItemHeight * fontSize * scaleFactor,\n [theme.menuItemHeight, fontSize, scaleFactor]\n );\n\n const height = useMemo(() => {\n // Modal\n if (!isMinXs) {\n const maxHeight =\n windowSize.height -\n theme.modalHeaderHeight * fontSize * scaleFactor -\n searchInputHeight;\n const curHeight = options.length * itemSize + paddingTop + paddingBottom;\n return curHeight < maxHeight ? curHeight : maxHeight;\n }\n // Popover\n const count = options.length < visibleCount ? options.length : visibleCount;\n return count * itemSize + paddingTop + paddingBottom;\n }, [\n isMinXs,\n options.length,\n visibleCount,\n itemSize,\n windowSize.height,\n theme.modalHeaderHeight,\n fontSize,\n scaleFactor,\n searchInputHeight,\n paddingTop,\n paddingBottom,\n ]);\n\n const scrollHandler = useRWLoadNext({\n itemCount: options.length,\n threshold,\n itemSize,\n paddingTop,\n height,\n onLoadNext,\n });\n\n const onSelect = useSelectHandler({\n value: value || [],\n onChange,\n maxSelectedItems,\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const InnerElement = useCallback(\n ({ style, ...innerElementRest }) => (\n <div\n style={{\n ...style,\n height: `${parseFloat(style.height) + paddingTop + paddingBottom}px`,\n }}\n role='listbox'\n id={id}\n {...innerElementRest}\n />\n ),\n [id, paddingBottom, paddingTop]\n );\n\n const listItemFn = useCallback(\n ({ index, style }) => {\n const {\n title: optionTitle,\n value: optionValue,\n onClick: optionOnClick,\n ...restOption\n } = options[index];\n return (\n <MenuItem\n style={{\n ...style,\n top: `${\n parseFloat(style.top ? style.top.toString() : '0') + paddingTop\n }px`,\n }}\n selected={(value || []).includes(optionValue || '')}\n onClick={(e) => {\n if (!optionValue) return;\n onSelect(optionValue);\n\n // Focus the input.\n // Otherwise, if the max number of selected items equals 1\n // and the user presses enter to select an item,\n // the input will lose focus.\n if (containerRef.current && maxSelectedItems === 1) {\n containerRef.current.focus();\n }\n\n if (optionOnClick) optionOnClick(e);\n }}\n role='option'\n aria-selected={(value || []).includes(optionValue || '')}\n {...restOption}\n >\n {optionTitle}\n </MenuItem>\n );\n },\n [containerRef, maxSelectedItems, onSelect, options, paddingTop, value]\n );\n\n return (\n <FixedSizeList\n width='100%'\n height={height}\n itemSize={itemSize}\n itemCount={options.length}\n overscanCount={overscanCount}\n onScroll={({ scrollOffset }) => scrollHandler(scrollOffset)}\n innerElementType={InnerElement}\n >\n {listItemFn}\n </FixedSizeList>\n );\n};\n\nSelectList.displayName = 'SelectList';\n\nexport default SelectList;\n"],"mappings":"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"}
@@ -1,217 +0,0 @@
1
- import React, { useCallback, useMemo } from 'react';
2
- import styled from '@emotion/styled';
3
- import { Up, Down, Loading, Close, CloseCircle } from '@os-design/icons';
4
- import { ellipsisStyles, resetButtonStyles, transitionStyles } from '@os-design/styles';
5
- import { omitEmotionProps } from '@os-design/utils';
6
- import { clr, ThemeOverrider } from '@os-design/theming';
7
- import { css } from '@emotion/react';
8
- import Tag from '../Tag';
9
- import Button from '../Button';
10
- export const Container = styled.div`
11
- flex: 1;
12
- display: flex;
13
- align-items: center;
14
- overflow: hidden;
15
- `;
16
- const notHasLeftStyles = p => !p.hasLeft && css`
17
- padding-left: ${p.theme.inputPaddingHorizontal}em;
18
- `;
19
- const notHasRightStyles = p => !p.hasRight && !p.unbordered && css`
20
- padding-right: ${p.theme.inputPaddingHorizontal}em;
21
- `;
22
- export const Content = styled('div', omitEmotionProps('hasLeft', 'hasRight', 'unbordered'))`
23
- flex: 1;
24
- ${notHasLeftStyles};
25
- ${notHasRightStyles};
26
- ${ellipsisStyles};
27
- `;
28
- export const Placeholder = styled.span`
29
- color: ${p => clr(p.theme.inputColorPlaceholder)};
30
- ${ellipsisStyles};
31
- `;
32
- const unborderedTitleStyles = p => p.unbordered && css`
33
- font-weight: 500;
34
- ${!p.disabled && `color: ${clr(p.theme.colorPrimary)};`}
35
- `;
36
- const disabledStyles = p => p.disabled && css`
37
- color: ${clr(p.theme.inputDisabledColorText)};
38
- `;
39
- export const Title = styled('span', omitEmotionProps('disabled', 'unbordered'))`
40
- color: ${p => clr(p.theme.colorText)};
41
- ${unborderedTitleStyles};
42
- ${disabledStyles};
43
- ${ellipsisStyles};
44
- `;
45
- const ListItem = styled(Tag, omitEmotionProps('disabled'))`
46
- // Reset tag styles
47
- padding-top: 0;
48
- padding-bottom: 0;
49
-
50
- height: ${p => p.theme.selectToggleListItemHeight}em;
51
- ${disabledStyles};
52
- `;
53
- const List = styled.div`
54
- display: flex;
55
- flex-wrap: wrap;
56
- overflow: hidden; // For ellipsis styles
57
-
58
- margin: 0 ${p => p.theme.selectToggleListItemGap}em
59
- ${p => -p.theme.selectToggleListItemGap}em 0;
60
-
61
- & > div {
62
- margin: 0 ${p => p.theme.selectToggleListItemGap}em
63
- ${p => p.theme.selectToggleListItemGap}em 0;
64
- }
65
- `;
66
- const DeleteButton = styled.button`
67
- ${resetButtonStyles};
68
- cursor: pointer;
69
- display: inherit;
70
- font-size: 1em;
71
- margin-left: 0.2em;
72
-
73
- background-color: transparent;
74
- color: ${p => clr(p.theme.selectToggleDeleteButtonColorIcon)};
75
-
76
- @media (hover: hover) {
77
- &:hover,
78
- &:focus {
79
- color: ${p => clr(p.theme.selectToggleDeleteButtonColorIconHover)};
80
- }
81
- }
82
-
83
- ${transitionStyles('color')};
84
- `;
85
- const unborderedIconContainerStyles = p => p.unbordered && css`
86
- padding-top: 0.2em;
87
- font-size: 0.8em;
88
- ${!p.disabled && `color: ${clr(p.theme.colorPrimary)};`}
89
- `;
90
- export const IconContainer = styled('span', omitEmotionProps('unbordered', 'disabled'))`
91
- color: ${p => clr(p.theme.selectColorIcon)};
92
- line-height: 1;
93
- ${unborderedIconContainerStyles};
94
- `;
95
- export const ClearIcon = styled(CloseCircle)`
96
- transform: scale(1.2) !important;
97
- `;
98
- const Addon = styled('span', omitEmotionProps('hasPadding'))`
99
- display: flex;
100
- align-items: center;
101
- user-select: none;
102
- color: ${p => clr(p.theme.inputColorPlaceholder)};
103
-
104
- svg {
105
- transform: scale(1.2);
106
- }
107
- `;
108
- export const LeftAddon = styled(Addon)`
109
- padding-right: ${p => p.theme.inputAddonPaddingHorizontal}em;
110
- ${p => p.hasPadding && css`
111
- padding-left: ${p.theme.inputPaddingHorizontal}em;
112
- `}
113
- `;
114
- export const RightAddon = styled(Addon)`
115
- padding-left: ${p => p.theme.inputAddonPaddingHorizontal}em;
116
- ${p => p.hasPadding && css`
117
- padding-right: ${p.theme.inputPaddingHorizontal}em;
118
- `}
119
- `;
120
- const SelectToggle = ({
121
- selectedItems,
122
- onDelete,
123
- onClear,
124
- opened,
125
- multiple,
126
- left,
127
- leftHasPadding = false,
128
- right,
129
- rightHasPadding = false,
130
- placeholder,
131
- unbordered,
132
- loading,
133
- disabled,
134
- clearVisible,
135
- locale
136
- }) => {
137
- const renderContent = useCallback(() => {
138
- if (selectedItems.length === 0) {
139
- return /*#__PURE__*/React.createElement(Placeholder, null, placeholder);
140
- }
141
- if (multiple) {
142
- return /*#__PURE__*/React.createElement(List, null, selectedItems.map(({
143
- title,
144
- value
145
- }) => /*#__PURE__*/React.createElement(ListItem, {
146
- key: value,
147
- disabled: disabled,
148
- right: !disabled ? /*#__PURE__*/React.createElement(DeleteButton, {
149
- onClick: e => {
150
- onDelete(value);
151
- e.stopPropagation();
152
- },
153
- onKeyDown: e => e.stopPropagation(),
154
- "aria-label": `${locale.deleteLabel} ${title}`,
155
- "aria-hidden": true
156
- }, /*#__PURE__*/React.createElement(Close, null)) : undefined,
157
- "aria-hidden": true
158
- }, title)));
159
- }
160
- return /*#__PURE__*/React.createElement(Title, {
161
- disabled: disabled,
162
- unbordered: unbordered
163
- }, selectedItems[0].title);
164
- }, [selectedItems, multiple, disabled, unbordered, placeholder, locale.deleteLabel, onDelete]);
165
- const showClearButton = useMemo(() => clearVisible && selectedItems.length > 0, [clearVisible, selectedItems.length]);
166
- const rightValue = useMemo(() => {
167
- if (loading) return /*#__PURE__*/React.createElement(Loading, null);
168
- if (showClearButton) {
169
- return /*#__PURE__*/React.createElement(Button, {
170
- type: "ghost",
171
- wide: "never",
172
- size: "small",
173
- disabled: disabled,
174
- onClick: e => {
175
- onClear();
176
- e.stopPropagation();
177
- },
178
- onKeyDown: e => {
179
- if (e.key === 'Enter') onClear();
180
- e.stopPropagation();
181
- },
182
- "aria-label": locale.clearLabel
183
- }, /*#__PURE__*/React.createElement(ClearIcon, null));
184
- }
185
- return right || /*#__PURE__*/React.createElement(IconContainer, {
186
- unbordered: unbordered,
187
- disabled: disabled
188
- }, opened ? /*#__PURE__*/React.createElement(Up, null) : /*#__PURE__*/React.createElement(Down, null));
189
- }, [disabled, loading, locale.clearLabel, onClear, opened, right, showClearButton, unbordered]);
190
- const rightHasPaddingValue = useMemo(() => {
191
- if (loading) return true;
192
- if (showClearButton) return false;
193
- return right ? rightHasPadding : true;
194
- }, [loading, right, rightHasPadding, showClearButton]);
195
- return /*#__PURE__*/React.createElement(Container, null, left && /*#__PURE__*/React.createElement(ThemeOverrider, {
196
- overrides: t => ({
197
- buttonPaddingHorizontal: 0.8,
198
- baseHeight: t.selectToggleListItemHeight / t.sizes.small
199
- })
200
- }, /*#__PURE__*/React.createElement(LeftAddon, {
201
- hasPadding: leftHasPadding
202
- }, left)), /*#__PURE__*/React.createElement(Content, {
203
- hasLeft: !!left,
204
- hasRight: !!right,
205
- unbordered: unbordered
206
- }, renderContent()), rightValue && /*#__PURE__*/React.createElement(ThemeOverrider, {
207
- overrides: t => ({
208
- buttonPaddingHorizontal: 0.8,
209
- baseHeight: t.selectToggleListItemHeight / t.sizes.small
210
- })
211
- }, /*#__PURE__*/React.createElement(RightAddon, {
212
- hasPadding: rightHasPaddingValue
213
- }, rightValue)));
214
- };
215
- SelectToggle.displayName = 'SelectToggle';
216
- export default SelectToggle;
217
- //# sourceMappingURL=SelectToggle.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectToggle.js","names":["React","useCallback","useMemo","styled","Up","Down","Loading","Close","CloseCircle","ellipsisStyles","resetButtonStyles","transitionStyles","omitEmotionProps","clr","ThemeOverrider","css","Tag","Button","Container","div","notHasLeftStyles","p","hasLeft","theme","inputPaddingHorizontal","notHasRightStyles","hasRight","unbordered","Content","Placeholder","span","inputColorPlaceholder","unborderedTitleStyles","disabled","colorPrimary","disabledStyles","inputDisabledColorText","Title","colorText","ListItem","selectToggleListItemHeight","List","selectToggleListItemGap","DeleteButton","button","selectToggleDeleteButtonColorIcon","selectToggleDeleteButtonColorIconHover","unborderedIconContainerStyles","IconContainer","selectColorIcon","ClearIcon","Addon","LeftAddon","inputAddonPaddingHorizontal","hasPadding","RightAddon","SelectToggle","selectedItems","onDelete","onClear","opened","multiple","left","leftHasPadding","right","rightHasPadding","placeholder","loading","clearVisible","locale","renderContent","length","map","title","value","e","stopPropagation","deleteLabel","undefined","showClearButton","rightValue","key","clearLabel","rightHasPaddingValue","t","buttonPaddingHorizontal","baseHeight","sizes","small","displayName"],"sources":["../../../src/Select/SelectToggle.tsx"],"sourcesContent":["import React, { useCallback, useMemo } from 'react';\nimport styled from '@emotion/styled';\nimport { Up, Down, Loading, Close, CloseCircle } from '@os-design/icons';\nimport {\n ellipsisStyles,\n resetButtonStyles,\n transitionStyles,\n} from '@os-design/styles';\nimport { omitEmotionProps } from '@os-design/utils';\nimport { clr, ThemeOverrider } from '@os-design/theming';\nimport { css } from '@emotion/react';\nimport Tag from '../Tag';\nimport Button from '../Button';\nimport { SelectLocale } from './utils/defaultLocale';\n\ninterface SelectToggleProps {\n selectedItems: Array<{ title: string; value: string }>;\n onDelete: (value: string) => void;\n onClear: () => void;\n opened: boolean;\n multiple: boolean;\n left?: React.ReactNode;\n leftHasPadding?: boolean;\n right?: React.ReactNode;\n rightHasPadding?: boolean;\n placeholder?: string;\n unbordered?: boolean;\n loading?: boolean;\n disabled?: boolean;\n clearVisible?: boolean;\n locale: SelectLocale;\n}\n\nexport const Container = styled.div`\n flex: 1;\n display: flex;\n align-items: center;\n overflow: hidden;\n`;\n\nconst notHasLeftStyles = (p) =>\n !p.hasLeft &&\n css`\n padding-left: ${p.theme.inputPaddingHorizontal}em;\n `;\n\nconst notHasRightStyles = (p) =>\n !p.hasRight &&\n !p.unbordered &&\n css`\n padding-right: ${p.theme.inputPaddingHorizontal}em;\n `;\n\ninterface ContentProps {\n hasLeft?: boolean;\n hasRight?: boolean;\n unbordered?: boolean;\n}\nexport const Content = styled(\n 'div',\n omitEmotionProps('hasLeft', 'hasRight', 'unbordered')\n)<ContentProps>`\n flex: 1;\n ${notHasLeftStyles};\n ${notHasRightStyles};\n ${ellipsisStyles};\n`;\n\nexport const Placeholder = styled.span`\n color: ${(p) => clr(p.theme.inputColorPlaceholder)};\n ${ellipsisStyles};\n`;\n\nconst unborderedTitleStyles = (p) =>\n p.unbordered &&\n css`\n font-weight: 500;\n ${!p.disabled && `color: ${clr(p.theme.colorPrimary)};`}\n `;\n\nconst disabledStyles = (p) =>\n p.disabled &&\n css`\n color: ${clr(p.theme.inputDisabledColorText)};\n `;\n\ntype TitleProps = Pick<SelectToggleProps, 'disabled' | 'unbordered'>;\nexport const Title = styled(\n 'span',\n omitEmotionProps('disabled', 'unbordered')\n)<TitleProps>`\n color: ${(p) => clr(p.theme.colorText)};\n ${unborderedTitleStyles};\n ${disabledStyles};\n ${ellipsisStyles};\n`;\n\ntype ListItemProps = Pick<SelectToggleProps, 'disabled'>;\nconst ListItem = styled(Tag, omitEmotionProps('disabled'))<ListItemProps>`\n // Reset tag styles\n padding-top: 0;\n padding-bottom: 0;\n\n height: ${(p) => p.theme.selectToggleListItemHeight}em;\n ${disabledStyles};\n`;\n\nconst List = styled.div`\n display: flex;\n flex-wrap: wrap;\n overflow: hidden; // For ellipsis styles\n\n margin: 0 ${(p) => p.theme.selectToggleListItemGap}em\n ${(p) => -p.theme.selectToggleListItemGap}em 0;\n\n & > div {\n margin: 0 ${(p) => p.theme.selectToggleListItemGap}em\n ${(p) => p.theme.selectToggleListItemGap}em 0;\n }\n`;\n\nconst DeleteButton = styled.button`\n ${resetButtonStyles};\n cursor: pointer;\n display: inherit;\n font-size: 1em;\n margin-left: 0.2em;\n\n background-color: transparent;\n color: ${(p) => clr(p.theme.selectToggleDeleteButtonColorIcon)};\n\n @media (hover: hover) {\n &:hover,\n &:focus {\n color: ${(p) => clr(p.theme.selectToggleDeleteButtonColorIconHover)};\n }\n }\n\n ${transitionStyles('color')};\n`;\n\nconst unborderedIconContainerStyles = (p) =>\n p.unbordered &&\n css`\n padding-top: 0.2em;\n font-size: 0.8em;\n ${!p.disabled && `color: ${clr(p.theme.colorPrimary)};`}\n `;\n\ninterface IconContainerProps {\n unbordered?: boolean;\n disabled?: boolean;\n}\nexport const IconContainer = styled(\n 'span',\n omitEmotionProps('unbordered', 'disabled')\n)<IconContainerProps>`\n color: ${(p) => clr(p.theme.selectColorIcon)};\n line-height: 1;\n ${unborderedIconContainerStyles};\n`;\n\nexport const ClearIcon = styled(CloseCircle)`\n transform: scale(1.2) !important;\n`;\n\ninterface AddonProps {\n hasPadding: boolean;\n}\nconst Addon = styled('span', omitEmotionProps('hasPadding'))<AddonProps>`\n display: flex;\n align-items: center;\n user-select: none;\n color: ${(p) => clr(p.theme.inputColorPlaceholder)};\n\n svg {\n transform: scale(1.2);\n }\n`;\n\nexport const LeftAddon = styled(Addon)`\n padding-right: ${(p) => p.theme.inputAddonPaddingHorizontal}em;\n ${(p) =>\n p.hasPadding &&\n css`\n padding-left: ${p.theme.inputPaddingHorizontal}em;\n `}\n`;\n\nexport const RightAddon = styled(Addon)`\n padding-left: ${(p) => p.theme.inputAddonPaddingHorizontal}em;\n ${(p) =>\n p.hasPadding &&\n css`\n padding-right: ${p.theme.inputPaddingHorizontal}em;\n `}\n`;\n\nconst SelectToggle: React.FC<SelectToggleProps> = ({\n selectedItems,\n onDelete,\n onClear,\n opened,\n multiple,\n left,\n leftHasPadding = false,\n right,\n rightHasPadding = false,\n placeholder,\n unbordered,\n loading,\n disabled,\n clearVisible,\n locale,\n}) => {\n const renderContent = useCallback(() => {\n if (selectedItems.length === 0) {\n return <Placeholder>{placeholder}</Placeholder>;\n }\n if (multiple) {\n return (\n <List>\n {selectedItems.map(({ title, value }) => (\n <ListItem\n key={value}\n disabled={disabled}\n right={\n !disabled ? (\n <DeleteButton\n onClick={(e) => {\n onDelete(value);\n e.stopPropagation();\n }}\n onKeyDown={(e) => e.stopPropagation()}\n aria-label={`${locale.deleteLabel} ${title}`}\n aria-hidden\n >\n <Close />\n </DeleteButton>\n ) : undefined\n }\n aria-hidden\n >\n {title}\n </ListItem>\n ))}\n </List>\n );\n }\n return (\n <Title disabled={disabled} unbordered={unbordered}>\n {selectedItems[0].title}\n </Title>\n );\n }, [\n selectedItems,\n multiple,\n disabled,\n unbordered,\n placeholder,\n locale.deleteLabel,\n onDelete,\n ]);\n\n const showClearButton = useMemo(\n () => clearVisible && selectedItems.length > 0,\n [clearVisible, selectedItems.length]\n );\n\n const rightValue = useMemo(() => {\n if (loading) return <Loading />;\n if (showClearButton) {\n return (\n <Button\n type='ghost'\n wide='never'\n size='small'\n disabled={disabled}\n onClick={(e) => {\n onClear();\n e.stopPropagation();\n }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') onClear();\n e.stopPropagation();\n }}\n aria-label={locale.clearLabel}\n >\n <ClearIcon />\n </Button>\n );\n }\n return (\n right || (\n <IconContainer unbordered={unbordered} disabled={disabled}>\n {opened ? <Up /> : <Down />}\n </IconContainer>\n )\n );\n }, [\n disabled,\n loading,\n locale.clearLabel,\n onClear,\n opened,\n right,\n showClearButton,\n unbordered,\n ]);\n\n const rightHasPaddingValue = useMemo(() => {\n if (loading) return true;\n if (showClearButton) return false;\n return right ? rightHasPadding : true;\n }, [loading, right, rightHasPadding, showClearButton]);\n\n return (\n <Container>\n {left && (\n <ThemeOverrider\n overrides={(t) => ({\n buttonPaddingHorizontal: 0.8,\n baseHeight: t.selectToggleListItemHeight / t.sizes.small,\n })}\n >\n <LeftAddon hasPadding={leftHasPadding}>{left}</LeftAddon>\n </ThemeOverrider>\n )}\n\n <Content hasLeft={!!left} hasRight={!!right} unbordered={unbordered}>\n {renderContent()}\n </Content>\n\n {rightValue && (\n <ThemeOverrider\n overrides={(t) => ({\n buttonPaddingHorizontal: 0.8,\n baseHeight: t.selectToggleListItemHeight / t.sizes.small,\n })}\n >\n <RightAddon hasPadding={rightHasPaddingValue}>\n {rightValue}\n </RightAddon>\n </ThemeOverrider>\n )}\n </Container>\n );\n};\n\nSelectToggle.displayName = 'SelectToggle';\n\nexport default SelectToggle;\n"],"mappings":"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"}
@@ -1,22 +0,0 @@
1
- import React, { RefObject } from 'react';
2
- import { WithSize } from '@os-design/styles';
3
- import { MenuItemProps } from '../MenuItem';
4
- export interface OptionProps extends MenuItemProps {
5
- title?: string;
6
- }
7
- interface SelectListProps extends WithSize {
8
- searchVisible: boolean;
9
- options: OptionProps[];
10
- visibleCount: number;
11
- overscanCount: number;
12
- threshold: number;
13
- onLoadNext: () => void;
14
- maxSelectedItems: number | 'all';
15
- containerRef: RefObject<HTMLDivElement>;
16
- value?: string[];
17
- onChange?: (value: string[]) => void;
18
- id?: string;
19
- }
20
- declare const SelectList: React.FC<SelectListProps>;
21
- export default SelectList;
22
- //# sourceMappingURL=SelectList.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectList.d.ts","sourceRoot":"","sources":["../../../src/Select/SelectList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,SAAS,EAAwB,MAAM,OAAO,CAAC;AAK/D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAiB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGtD,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,UAAU,eAAgB,SAAQ,QAAQ;IACxC,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,gBAAgB,EAAE,MAAM,GAAG,KAAK,CAAC;IACjC,YAAY,EAAE,SAAS,CAAC,cAAc,CAAC,CAAC;IACxC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACrC,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAkLzC,CAAC;AAIF,eAAe,UAAU,CAAC"}
@@ -1,73 +0,0 @@
1
- import React from 'react';
2
- import { SelectLocale } from './utils/defaultLocale';
3
- interface SelectToggleProps {
4
- selectedItems: Array<{
5
- title: string;
6
- value: string;
7
- }>;
8
- onDelete: (value: string) => void;
9
- onClear: () => void;
10
- opened: boolean;
11
- multiple: boolean;
12
- left?: React.ReactNode;
13
- leftHasPadding?: boolean;
14
- right?: React.ReactNode;
15
- rightHasPadding?: boolean;
16
- placeholder?: string;
17
- unbordered?: boolean;
18
- loading?: boolean;
19
- disabled?: boolean;
20
- clearVisible?: boolean;
21
- locale: SelectLocale;
22
- }
23
- export declare const Container: import("@emotion/styled").StyledComponent<{
24
- theme?: import("@emotion/react").Theme | undefined;
25
- as?: React.ElementType<any> | undefined;
26
- }, React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
27
- interface ContentProps {
28
- hasLeft?: boolean;
29
- hasRight?: boolean;
30
- unbordered?: boolean;
31
- }
32
- export declare const Content: import("@emotion/styled").StyledComponent<{
33
- theme?: import("@emotion/react").Theme | undefined;
34
- as?: React.ElementType<any> | undefined;
35
- } & ContentProps, React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
36
- export declare const Placeholder: import("@emotion/styled").StyledComponent<{
37
- theme?: import("@emotion/react").Theme | undefined;
38
- as?: React.ElementType<any> | undefined;
39
- }, React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {}>;
40
- type TitleProps = Pick<SelectToggleProps, 'disabled' | 'unbordered'>;
41
- export declare const Title: import("@emotion/styled").StyledComponent<{
42
- theme?: import("@emotion/react").Theme | undefined;
43
- as?: React.ElementType<any> | undefined;
44
- } & TitleProps, React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {}>;
45
- interface IconContainerProps {
46
- unbordered?: boolean;
47
- disabled?: boolean;
48
- }
49
- export declare const IconContainer: import("@emotion/styled").StyledComponent<{
50
- theme?: import("@emotion/react").Theme | undefined;
51
- as?: React.ElementType<any> | undefined;
52
- } & IconContainerProps, React.DetailedHTMLProps<React.HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {}>;
53
- export declare const ClearIcon: import("@emotion/styled").StyledComponent<import("@os-design/icons").IconProps & React.RefAttributes<SVGSVGElement> & {
54
- theme?: import("@emotion/react").Theme | undefined;
55
- }, {}, {}>;
56
- interface AddonProps {
57
- hasPadding: boolean;
58
- }
59
- export declare const LeftAddon: import("@emotion/styled").StyledComponent<{
60
- theme?: import("@emotion/react").Theme | undefined;
61
- as?: React.ElementType<any> | undefined;
62
- } & AddonProps & React.ClassAttributes<HTMLSpanElement> & React.HTMLAttributes<HTMLSpanElement> & {
63
- theme?: import("@emotion/react").Theme | undefined;
64
- }, {}, {}>;
65
- export declare const RightAddon: import("@emotion/styled").StyledComponent<{
66
- theme?: import("@emotion/react").Theme | undefined;
67
- as?: React.ElementType<any> | undefined;
68
- } & AddonProps & React.ClassAttributes<HTMLSpanElement> & React.HTMLAttributes<HTMLSpanElement> & {
69
- theme?: import("@emotion/react").Theme | undefined;
70
- }, {}, {}>;
71
- declare const SelectToggle: React.FC<SelectToggleProps>;
72
- export default SelectToggle;
73
- //# sourceMappingURL=SelectToggle.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SelectToggle.d.ts","sourceRoot":"","sources":["../../../src/Select/SelectToggle.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+B,MAAM,OAAO,CAAC;AAapD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,UAAU,iBAAiB;IACzB,aAAa,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,eAAO,MAAM,SAAS;;;qFAKrB,CAAC;AAeF,UAAU,YAAY;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AACD,eAAO,MAAM,OAAO;;;oGAQnB,CAAC;AAEF,eAAO,MAAM,WAAW;;;uFAGvB,CAAC;AAeF,KAAK,UAAU,GAAG,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,YAAY,CAAC,CAAC;AACrE,eAAO,MAAM,KAAK;;;oGAQjB,CAAC;AAsDF,UAAU,kBAAkB;IAC1B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AACD,eAAO,MAAM,aAAa;;;4GAOzB,CAAC;AAEF,eAAO,MAAM,SAAS;;UAErB,CAAC;AAEF,UAAU,UAAU;IAClB,UAAU,EAAE,OAAO,CAAC;CACrB;AAYD,eAAO,MAAM,SAAS;;;;;UAOrB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;UAOtB,CAAC;AAEF,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAqJ7C,CAAC;AAIF,eAAe,YAAY,CAAC"}