@onewelcome/react-lib-components 6.1.0 → 6.2.0
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/cjs/Form/Fieldset/Fieldset.cjs.js +1 -1
- package/dist/cjs/Form/Fieldset/Fieldset.cjs.js.map +1 -1
- package/dist/cjs/Form/Select/MultiSelect/MultiOption.cjs.js +2 -0
- package/dist/cjs/Form/Select/MultiSelect/MultiOption.cjs.js.map +1 -0
- package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js +2 -0
- package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js.map +1 -0
- package/dist/cjs/Form/Select/MultiSelect/MultiSelect.module.cjs.js +2 -0
- package/dist/cjs/Form/Select/MultiSelect/MultiSelect.module.cjs.js.map +1 -0
- package/dist/cjs/Form/Select/MultiSelect/SelectButton.cjs.js +2 -0
- package/dist/cjs/Form/Select/MultiSelect/SelectButton.cjs.js.map +1 -0
- package/dist/cjs/Form/Select/MultiSelect/SelectButton.module.cjs.js +2 -0
- package/dist/cjs/Form/Select/MultiSelect/SelectButton.module.cjs.js.map +1 -0
- package/dist/cjs/Form/Select/MultiSelect/SelectedOptions.cjs.js +2 -0
- package/dist/cjs/Form/Select/MultiSelect/SelectedOptions.cjs.js.map +1 -0
- package/dist/cjs/Form/Select/MultiSelect/SelectedOptions.module.cjs.js +2 -0
- package/dist/cjs/Form/Select/MultiSelect/SelectedOptions.module.cjs.js.map +1 -0
- package/dist/cjs/Form/Select/SelectService.cjs.js +1 -1
- package/dist/cjs/Form/Select/SelectService.cjs.js.map +1 -1
- package/dist/cjs/Form/Select/SingleSelect/Option.cjs.js.map +1 -0
- package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js +2 -0
- package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js.map +1 -0
- package/dist/cjs/Form/Select/SingleSelect/Select.module.cjs.js +2 -0
- package/dist/cjs/Form/Select/useAddNewBtn.cjs.js +2 -0
- package/dist/cjs/Form/Select/useAddNewBtn.cjs.js.map +1 -0
- package/dist/cjs/Form/Select/useAddNewBtn.module.cjs.js +2 -0
- package/dist/cjs/Form/Select/useAddNewBtn.module.cjs.js.map +1 -0
- package/dist/cjs/Form/Select/useSearch.cjs.js +2 -0
- package/dist/cjs/Form/Select/useSearch.cjs.js.map +1 -0
- package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.module.cjs.js +1 -1
- package/dist/cjs/Form/Wrapper/SelectWrapper/SelectWrapper.cjs.js +1 -1
- package/dist/cjs/Form/Wrapper/SelectWrapper/SelectWrapper.cjs.js.map +1 -1
- package/dist/cjs/Form/Wrapper/SelectWrapper/SelectWrapper.module.cjs.js +1 -1
- package/dist/cjs/Form/Wrapper/Wrapper/Wrapper.module.cjs.js +1 -1
- package/dist/cjs/Icon/Icon.cjs.js +1 -1
- package/dist/cjs/Icon/Icon.cjs.js.map +1 -1
- package/dist/cjs/Icon/Icon.module.cjs.js +1 -1
- package/dist/cjs/Pagination/Pagination.cjs.js +1 -1
- package/dist/cjs/Pagination/Pagination.cjs.js.map +1 -1
- package/dist/cjs/Tag/RemoveButton.cjs.js +2 -0
- package/dist/cjs/Tag/RemoveButton.cjs.js.map +1 -0
- package/dist/cjs/Tag/RemoveButton.module.cjs.js +2 -0
- package/dist/cjs/Tag/RemoveButton.module.cjs.js.map +1 -0
- package/dist/cjs/Tag/Tag.cjs.js +1 -1
- package/dist/cjs/Tag/Tag.cjs.js.map +1 -1
- package/dist/cjs/Tag/Tag.module.cjs.js +1 -1
- package/dist/cjs/src/components/Form/Select/MultiSelect/MultiOption.d.ts +6 -0
- package/dist/cjs/src/components/Form/Select/MultiSelect/MultiSelect.d.ts +3 -0
- package/dist/cjs/src/components/Form/Select/MultiSelect/SelectButton.d.ts +4 -0
- package/dist/cjs/src/components/Form/Select/MultiSelect/SelectedOptions.d.ts +11 -0
- package/dist/cjs/src/components/Form/Select/Select.interfaces.d.ts +44 -0
- package/dist/cjs/src/components/Form/Select/SelectService.d.ts +6 -2
- package/dist/cjs/src/components/Form/Select/SingleSelect/Select.d.ts +3 -0
- package/dist/cjs/src/components/Form/Select/{Select.test.d.ts → SingleSelect/Select.test.d.ts} +4 -4
- package/dist/cjs/src/components/Form/Select/useAddNewBtn.d.ts +12 -0
- package/dist/cjs/src/components/Form/Select/useSearch.d.ts +29 -0
- package/dist/cjs/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.d.ts +16 -0
- package/dist/cjs/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.d.ts +2 -2
- package/dist/cjs/src/components/Icon/Icon.d.ts +1 -0
- package/dist/cjs/src/components/Tag/RemoveButton.d.ts +7 -0
- package/dist/cjs/src/components/Tag/Tag.d.ts +3 -0
- package/dist/cjs/src/index.cjs.js +1 -1
- package/dist/cjs/src/index.d.ts +7 -4
- package/dist/esm/Form/Fieldset/Fieldset.esm.js +1 -1
- package/dist/esm/Form/Fieldset/Fieldset.esm.js.map +1 -1
- package/dist/esm/Form/Select/MultiSelect/MultiOption.esm.js +2 -0
- package/dist/esm/Form/Select/MultiSelect/MultiOption.esm.js.map +1 -0
- package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js +2 -0
- package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js.map +1 -0
- package/dist/esm/Form/Select/MultiSelect/MultiSelect.module.esm.js +2 -0
- package/dist/esm/Form/Select/MultiSelect/MultiSelect.module.esm.js.map +1 -0
- package/dist/esm/Form/Select/MultiSelect/SelectButton.esm.js +2 -0
- package/dist/esm/Form/Select/MultiSelect/SelectButton.esm.js.map +1 -0
- package/dist/esm/Form/Select/MultiSelect/SelectButton.module.esm.js +2 -0
- package/dist/esm/Form/Select/MultiSelect/SelectButton.module.esm.js.map +1 -0
- package/dist/esm/Form/Select/MultiSelect/SelectedOptions.esm.js +2 -0
- package/dist/esm/Form/Select/MultiSelect/SelectedOptions.esm.js.map +1 -0
- package/dist/esm/Form/Select/MultiSelect/SelectedOptions.module.esm.js +2 -0
- package/dist/esm/Form/Select/MultiSelect/SelectedOptions.module.esm.js.map +1 -0
- package/dist/esm/Form/Select/SelectService.esm.js +1 -1
- package/dist/esm/Form/Select/SelectService.esm.js.map +1 -1
- package/dist/esm/Form/Select/SingleSelect/Option.esm.js.map +1 -0
- package/dist/esm/Form/Select/SingleSelect/Select.esm.js +2 -0
- package/dist/esm/Form/Select/SingleSelect/Select.esm.js.map +1 -0
- package/dist/esm/Form/Select/SingleSelect/Select.module.esm.js +2 -0
- package/dist/esm/Form/Select/useAddNewBtn.esm.js +2 -0
- package/dist/esm/Form/Select/useAddNewBtn.esm.js.map +1 -0
- package/dist/esm/Form/Select/useAddNewBtn.module.esm.js +2 -0
- package/dist/esm/Form/Select/useAddNewBtn.module.esm.js.map +1 -0
- package/dist/esm/Form/Select/useSearch.esm.js +2 -0
- package/dist/esm/Form/Select/useSearch.esm.js.map +1 -0
- package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.module.esm.js +1 -1
- package/dist/esm/Form/Wrapper/SelectWrapper/SelectWrapper.esm.js +1 -1
- package/dist/esm/Form/Wrapper/SelectWrapper/SelectWrapper.esm.js.map +1 -1
- package/dist/esm/Form/Wrapper/SelectWrapper/SelectWrapper.module.esm.js +1 -1
- package/dist/esm/Form/Wrapper/Wrapper/Wrapper.module.esm.js +1 -1
- package/dist/esm/Icon/Icon.esm.js +1 -1
- package/dist/esm/Icon/Icon.esm.js.map +1 -1
- package/dist/esm/Icon/Icon.module.esm.js +1 -1
- package/dist/esm/Pagination/Pagination.esm.js +1 -1
- package/dist/esm/Pagination/Pagination.esm.js.map +1 -1
- package/dist/esm/Tag/RemoveButton.esm.js +2 -0
- package/dist/esm/Tag/RemoveButton.esm.js.map +1 -0
- package/dist/esm/Tag/RemoveButton.module.esm.js +2 -0
- package/dist/esm/Tag/RemoveButton.module.esm.js.map +1 -0
- package/dist/esm/Tag/Tag.esm.js +1 -1
- package/dist/esm/Tag/Tag.esm.js.map +1 -1
- package/dist/esm/Tag/Tag.module.esm.js +1 -1
- package/dist/esm/src/components/Form/Select/MultiSelect/MultiOption.d.ts +6 -0
- package/dist/esm/src/components/Form/Select/MultiSelect/MultiSelect.d.ts +3 -0
- package/dist/esm/src/components/Form/Select/MultiSelect/MultiSelect.test.d.ts +1 -0
- package/dist/esm/src/components/Form/Select/MultiSelect/SelectButton.d.ts +4 -0
- package/dist/esm/src/components/Form/Select/MultiSelect/SelectedOptions.d.ts +11 -0
- package/dist/esm/src/components/Form/Select/Select.interfaces.d.ts +44 -0
- package/dist/esm/src/components/Form/Select/SelectService.d.ts +6 -2
- package/dist/esm/src/components/Form/Select/SingleSelect/Option.test.d.ts +1 -0
- package/dist/esm/src/components/Form/Select/SingleSelect/Select.d.ts +3 -0
- package/dist/esm/src/components/Form/Select/{Select.test.d.ts → SingleSelect/Select.test.d.ts} +4 -4
- package/dist/esm/src/components/Form/Select/SingleSelect/SelectKeyboardNavigation.test.d.ts +1 -0
- package/dist/esm/src/components/Form/Select/useAddNewBtn.d.ts +12 -0
- package/dist/esm/src/components/Form/Select/useSearch.d.ts +29 -0
- package/dist/esm/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.d.ts +16 -0
- package/dist/esm/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.test.d.ts +1 -0
- package/dist/esm/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.d.ts +2 -2
- package/dist/esm/src/components/Icon/Icon.d.ts +1 -0
- package/dist/esm/src/components/Tag/RemoveButton.d.ts +7 -0
- package/dist/esm/src/components/Tag/Tag.d.ts +3 -0
- package/dist/esm/src/index.d.ts +7 -4
- package/dist/esm/src/index.esm.js +1 -1
- package/package.json +31 -31
- package/src/components/Form/Fieldset/Fieldset.tsx +3 -1
- package/src/components/Form/Select/MultiSelect/MultiOption.tsx +31 -0
- package/src/components/Form/Select/MultiSelect/MultiSelect.module.scss +244 -0
- package/src/components/Form/Select/MultiSelect/MultiSelect.tsx +363 -0
- package/src/{.scope.ts → components/Form/Select/MultiSelect/SelectButton.module.scss} +12 -2
- package/src/components/Form/Select/MultiSelect/SelectButton.tsx +37 -0
- package/src/components/Form/Select/MultiSelect/SelectedOptions.module.scss +31 -0
- package/src/components/Form/Select/MultiSelect/SelectedOptions.tsx +67 -0
- package/src/components/Form/Select/Select.interfaces.ts +48 -0
- package/src/components/Form/Select/SelectService.ts +23 -6
- package/src/components/Form/Select/{Select.module.scss → SingleSelect/Select.module.scss} +2 -36
- package/src/components/Form/Select/{Select.tsx → SingleSelect/Select.tsx} +45 -127
- package/src/components/Form/Select/useAddNewBtn.module.scss +51 -0
- package/src/components/Form/Select/useAddNewBtn.tsx +54 -0
- package/src/components/Form/Select/useSearch.tsx +124 -0
- package/src/components/Form/Wrapper/InputWrapper/InputWrapper.module.scss +0 -10
- package/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.module.scss +27 -0
- package/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.tsx +84 -0
- package/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.module.scss +0 -4
- package/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.tsx +3 -2
- package/src/components/Form/Wrapper/Wrapper/Wrapper.module.scss +0 -6
- package/src/components/Icon/Icon.module.scss +5 -0
- package/src/components/Icon/Icon.tsx +1 -0
- package/src/components/Pagination/Pagination.tsx +2 -2
- package/src/components/Tag/RemoveButton.module.scss +41 -0
- package/src/components/Tag/RemoveButton.tsx +52 -0
- package/src/components/Tag/Tag.module.scss +23 -2
- package/src/components/Tag/Tag.tsx +21 -11
- package/src/font/icomoon.eot +0 -0
- package/src/font/icomoon.svg +1 -0
- package/src/font/icomoon.ttf +0 -0
- package/src/font/icomoon.woff +0 -0
- package/src/font/selection.json +1 -1
- package/src/index.ts +11 -4
- package/dist/cjs/Form/Select/Option.cjs.js.map +0 -1
- package/dist/cjs/Form/Select/Select.cjs.js +0 -2
- package/dist/cjs/Form/Select/Select.cjs.js.map +0 -1
- package/dist/cjs/Form/Select/Select.module.cjs.js +0 -2
- package/dist/cjs/src/components/Form/Select/Select.d.ts +0 -43
- package/dist/esm/Form/Select/Option.esm.js.map +0 -1
- package/dist/esm/Form/Select/Select.esm.js +0 -2
- package/dist/esm/Form/Select/Select.esm.js.map +0 -1
- package/dist/esm/Form/Select/Select.module.esm.js +0 -2
- package/dist/esm/src/components/Form/Select/Select.d.ts +0 -43
- /package/dist/cjs/{src/.scope.d.ts → .scope.d.ts} +0 -0
- /package/dist/cjs/Form/Select/{Option.cjs.js → SingleSelect/Option.cjs.js} +0 -0
- /package/dist/cjs/Form/Select/{Select.module.cjs.js.map → SingleSelect/Select.module.cjs.js.map} +0 -0
- /package/dist/cjs/src/components/Form/Select/{Option.test.d.ts → MultiSelect/MultiSelect.test.d.ts} +0 -0
- /package/dist/cjs/src/components/Form/Select/{Option.d.ts → SingleSelect/Option.d.ts} +0 -0
- /package/dist/{esm/src/components/Form/Select → cjs/src/components/Form/Select/SingleSelect}/Option.test.d.ts +0 -0
- /package/dist/cjs/src/components/Form/Select/{SelectKeyboardNavigation.test.d.ts → SingleSelect/SelectKeyboardNavigation.test.d.ts} +0 -0
- /package/dist/{esm/src/components/Form/Select/SelectKeyboardNavigation.test.d.ts → cjs/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.test.d.ts} +0 -0
- /package/dist/esm/{src/.scope.d.ts → .scope.d.ts} +0 -0
- /package/dist/esm/Form/Select/{Option.esm.js → SingleSelect/Option.esm.js} +0 -0
- /package/dist/esm/Form/Select/{Select.module.esm.js.map → SingleSelect/Select.module.esm.js.map} +0 -0
- /package/dist/esm/src/components/Form/Select/{Option.d.ts → SingleSelect/Option.d.ts} +0 -0
- /package/src/components/Form/Select/{Option.tsx → SingleSelect/Option.tsx} +0 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2022 OneWelcome B.V.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import React, { useEffect, useRef, useState } from "react";
|
|
18
|
+
import { PartialInputProps, SearchProps } from "./Select.interfaces";
|
|
19
|
+
import { Input } from "../Input/Input";
|
|
20
|
+
|
|
21
|
+
interface Props {
|
|
22
|
+
search?: SearchProps;
|
|
23
|
+
optionsCount: number;
|
|
24
|
+
/**
|
|
25
|
+
* @deprecated
|
|
26
|
+
*/
|
|
27
|
+
searchPlaceholder?: string;
|
|
28
|
+
/**
|
|
29
|
+
* @deprecated
|
|
30
|
+
*/
|
|
31
|
+
searchInputProps?: PartialInputProps & { reset?: boolean };
|
|
32
|
+
searchInputClassName: string;
|
|
33
|
+
expanded: boolean;
|
|
34
|
+
setFocusedSelectItem: (idx: number) => void;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export const useSearch = ({
|
|
38
|
+
search,
|
|
39
|
+
optionsCount,
|
|
40
|
+
searchPlaceholder,
|
|
41
|
+
searchInputProps,
|
|
42
|
+
searchInputClassName,
|
|
43
|
+
expanded,
|
|
44
|
+
setFocusedSelectItem
|
|
45
|
+
}: Props) => {
|
|
46
|
+
const [filter, setFilter] = useState("");
|
|
47
|
+
const [isSearching, setIsSearching] = useState(false);
|
|
48
|
+
|
|
49
|
+
const DEFAULT_RENDER_THRESHOLD = 10;
|
|
50
|
+
|
|
51
|
+
const searchInputRef = useRef<HTMLInputElement>(null);
|
|
52
|
+
|
|
53
|
+
const threshold = search?.renderThreshold ?? DEFAULT_RENDER_THRESHOLD;
|
|
54
|
+
const hasEnoughChildren = optionsCount > threshold;
|
|
55
|
+
|
|
56
|
+
const filterResults = (event: React.ChangeEvent<HTMLInputElement>) => {
|
|
57
|
+
setFilter(event.currentTarget.value);
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const shouldRenderSearch = () => {
|
|
61
|
+
if (search?.enabled) {
|
|
62
|
+
return hasEnoughChildren;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (search) {
|
|
66
|
+
return search.enabled as boolean;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return optionsCount > DEFAULT_RENDER_THRESHOLD;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const renderSearch = () => (
|
|
73
|
+
<Input
|
|
74
|
+
{...(search?.searchInputProps ?? searchInputProps ?? {})}
|
|
75
|
+
ref={searchInputRef}
|
|
76
|
+
onFocus={() => setIsSearching(true)}
|
|
77
|
+
onBlur={() => setIsSearching(false)}
|
|
78
|
+
onChange={filterResults}
|
|
79
|
+
className={searchInputClassName}
|
|
80
|
+
wrapperProps={{
|
|
81
|
+
className:
|
|
82
|
+
search?.searchInputProps?.wrapperProps?.className ??
|
|
83
|
+
searchInputProps?.wrapperProps?.className
|
|
84
|
+
}}
|
|
85
|
+
style={{
|
|
86
|
+
display: expanded ? "block" : "none"
|
|
87
|
+
}}
|
|
88
|
+
type="text"
|
|
89
|
+
name="search-option"
|
|
90
|
+
placeholder={search?.searchPlaceholder ?? searchPlaceholder}
|
|
91
|
+
/>
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
const resetSearchState = () => {
|
|
95
|
+
setFilter("");
|
|
96
|
+
setIsSearching(false);
|
|
97
|
+
setFocusedSelectItem(-1);
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const visible = shouldRenderSearch();
|
|
101
|
+
|
|
102
|
+
useEffect(() => {
|
|
103
|
+
(search?.searchInputProps?.reset || searchInputProps?.reset) && resetSearchState();
|
|
104
|
+
}, [searchInputProps?.reset, search?.searchInputProps?.reset]);
|
|
105
|
+
|
|
106
|
+
useEffect(() => {
|
|
107
|
+
const searchDeactivated =
|
|
108
|
+
!visible &&
|
|
109
|
+
!isSearching; /*solves issue in MultiSelect when we filtered result and selected result causes list to be shorter than threshold so still we have a filter applied but can't change it due to `visible` variable has false */
|
|
110
|
+
if (searchDeactivated) {
|
|
111
|
+
resetSearchState();
|
|
112
|
+
}
|
|
113
|
+
}, [isSearching, visible]);
|
|
114
|
+
|
|
115
|
+
return {
|
|
116
|
+
renderSearch,
|
|
117
|
+
setIsSearching,
|
|
118
|
+
searchVisible: visible,
|
|
119
|
+
searchThreshold: threshold,
|
|
120
|
+
searchInputRef,
|
|
121
|
+
filter,
|
|
122
|
+
isSearching
|
|
123
|
+
};
|
|
124
|
+
};
|
|
@@ -36,10 +36,6 @@ input {
|
|
|
36
36
|
justify-content: center;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
.floating-label-active [data-icon]:before {
|
|
40
|
-
transform: translateY(5px);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
39
|
[data-prefix],
|
|
44
40
|
[data-suffix] {
|
|
45
41
|
font-size: var(--form-control-font-size);
|
|
@@ -63,9 +59,3 @@ input {
|
|
|
63
59
|
color: var(--greyed-out);
|
|
64
60
|
}
|
|
65
61
|
}
|
|
66
|
-
|
|
67
|
-
.floating-label-active [data-prefix],
|
|
68
|
-
.floating-label-active [data-suffix] {
|
|
69
|
-
padding-top: 1rem;
|
|
70
|
-
transform: translateY(0);
|
|
71
|
-
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright 2022 OneWelcome B.V.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
@use "src/variables";
|
|
18
|
+
|
|
19
|
+
.select-label {
|
|
20
|
+
left: calc(
|
|
21
|
+
1.25rem + 2px
|
|
22
|
+
); // 2px is for offset of the selectwrapper border. It's relative to the parent div which doesn't have a border.
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.select-helper-text {
|
|
26
|
+
margin-top: 0.15rem;
|
|
27
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2022 OneWelcome B.V.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import React, { ForwardRefRenderFunction, ComponentPropsWithRef, ReactElement } from "react";
|
|
18
|
+
import classes from "./MultiSelectWrapper.module.scss";
|
|
19
|
+
import { Wrapper, WrapperProps } from "../Wrapper/Wrapper";
|
|
20
|
+
import { useWrapper } from "../../../../hooks/useWrapper";
|
|
21
|
+
import { MultiSelect } from "../../Select/MultiSelect/MultiSelect";
|
|
22
|
+
import { MultiSelectProps } from "../../Select/Select.interfaces";
|
|
23
|
+
|
|
24
|
+
interface PartialSelectProps extends Partial<MultiSelectProps> {}
|
|
25
|
+
|
|
26
|
+
export interface Props
|
|
27
|
+
extends Omit<ComponentPropsWithRef<"div">, "onChange">,
|
|
28
|
+
Omit<WrapperProps, "onChange" | "error"> {
|
|
29
|
+
children: ReactElement[] | ReactElement | number[];
|
|
30
|
+
placeholder?: string;
|
|
31
|
+
value: string[];
|
|
32
|
+
error?: boolean;
|
|
33
|
+
selectProps?: PartialSelectProps;
|
|
34
|
+
onChange?: (event: React.ChangeEvent<HTMLSelectElement>) => void;
|
|
35
|
+
success?: boolean;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const MultiSelectWrapperComponent: ForwardRefRenderFunction<HTMLDivElement, Props> = (
|
|
39
|
+
{
|
|
40
|
+
children,
|
|
41
|
+
error,
|
|
42
|
+
success,
|
|
43
|
+
value,
|
|
44
|
+
placeholder,
|
|
45
|
+
selectProps,
|
|
46
|
+
helperProps,
|
|
47
|
+
onChange,
|
|
48
|
+
...rest
|
|
49
|
+
}: Props,
|
|
50
|
+
ref
|
|
51
|
+
) => {
|
|
52
|
+
const { errorId, helperId, labelId } = useWrapper();
|
|
53
|
+
|
|
54
|
+
return (
|
|
55
|
+
<Wrapper
|
|
56
|
+
{...rest}
|
|
57
|
+
ref={ref}
|
|
58
|
+
errorId={errorId}
|
|
59
|
+
helperId={helperId}
|
|
60
|
+
labelProps={{ id: labelId, className: classes["select-label"] }}
|
|
61
|
+
helperProps={{
|
|
62
|
+
...helperProps,
|
|
63
|
+
className: `${classes["select-helper-text"]} ${helperProps?.className ?? ""}`
|
|
64
|
+
}}
|
|
65
|
+
error={error}
|
|
66
|
+
>
|
|
67
|
+
<MultiSelect
|
|
68
|
+
{...selectProps}
|
|
69
|
+
value={value}
|
|
70
|
+
labeledBy={labelId}
|
|
71
|
+
error={error}
|
|
72
|
+
success={success}
|
|
73
|
+
describedBy={error ? errorId : helperId}
|
|
74
|
+
onChange={onChange}
|
|
75
|
+
placeholder={placeholder}
|
|
76
|
+
className={`${selectProps?.className ?? ""}`}
|
|
77
|
+
>
|
|
78
|
+
{children as ReactElement[]}
|
|
79
|
+
</MultiSelect>
|
|
80
|
+
</Wrapper>
|
|
81
|
+
);
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
export const MultiSelectWrapper = React.forwardRef(MultiSelectWrapperComponent);
|
|
@@ -17,10 +17,11 @@
|
|
|
17
17
|
import React, { ForwardRefRenderFunction, ComponentPropsWithRef, ReactElement } from "react";
|
|
18
18
|
import classes from "./SelectWrapper.module.scss";
|
|
19
19
|
import { Wrapper, WrapperProps } from "../Wrapper/Wrapper";
|
|
20
|
-
import { Select
|
|
20
|
+
import { Select } from "../../Select/SingleSelect/Select";
|
|
21
21
|
import { useWrapper } from "../../../../hooks/useWrapper";
|
|
22
|
+
import { SingleSelectProps } from "../../Select/Select.interfaces";
|
|
22
23
|
|
|
23
|
-
interface PartialSelectProps extends Partial<
|
|
24
|
+
interface PartialSelectProps extends Partial<SingleSelectProps> {}
|
|
24
25
|
|
|
25
26
|
export interface Props
|
|
26
27
|
extends Omit<ComponentPropsWithRef<"div">, "onChange">,
|
|
@@ -25,8 +25,8 @@ import classes from "./Pagination.module.scss";
|
|
|
25
25
|
import readyclasses from "../../readyclasses.module.scss";
|
|
26
26
|
import { IconButton } from "../Button/IconButton";
|
|
27
27
|
import { Icons, Icon } from "../Icon/Icon";
|
|
28
|
-
import { Select } from "../Form/Select/Select";
|
|
29
|
-
import { Option } from "../Form/Select/Option";
|
|
28
|
+
import { Select } from "../Form/Select/SingleSelect/Select";
|
|
29
|
+
import { Option } from "../Form/Select/SingleSelect/Option";
|
|
30
30
|
import { Label } from "../Form/Label/Label";
|
|
31
31
|
|
|
32
32
|
export type PaginationTranslations = {
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright 2022 OneWelcome B.V.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
@use "../../mixins.module.scss";
|
|
18
|
+
|
|
19
|
+
.remove {
|
|
20
|
+
width: 1.25rem;
|
|
21
|
+
height: 1.25rem;
|
|
22
|
+
background: none;
|
|
23
|
+
border: none;
|
|
24
|
+
padding: 0;
|
|
25
|
+
margin-right: -0.375rem;
|
|
26
|
+
|
|
27
|
+
&:hover {
|
|
28
|
+
border-radius: 0.125rem;
|
|
29
|
+
background-color: var(--color-black10);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
&:active {
|
|
33
|
+
background-color: var(--color-blue-grey400);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@include mixins.focusVisibleOutline($outlineOffset: 0);
|
|
37
|
+
|
|
38
|
+
.icon {
|
|
39
|
+
font-size: 0.625rem;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright 2022 OneWelcome B.V.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import React, { ForwardRefRenderFunction, HTMLAttributes, forwardRef } from "react";
|
|
18
|
+
import { Icon, Icons } from "../Icon/Icon";
|
|
19
|
+
|
|
20
|
+
import readyclasses from "../../readyclasses.module.scss";
|
|
21
|
+
import classes from "./RemoveButton.module.scss";
|
|
22
|
+
|
|
23
|
+
export interface Props extends HTMLAttributes<HTMLButtonElement> {
|
|
24
|
+
removeLabel?: string;
|
|
25
|
+
label?: string;
|
|
26
|
+
onRemove?: (e: React.MouseEvent<HTMLButtonElement>) => void;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const RemoveButtonComponent: ForwardRefRenderFunction<HTMLButtonElement, Props> = (
|
|
30
|
+
{ removeLabel = "Remove", label, onRemove, ...rest }: Props,
|
|
31
|
+
ref
|
|
32
|
+
) => {
|
|
33
|
+
return (
|
|
34
|
+
onRemove && (
|
|
35
|
+
<button
|
|
36
|
+
{...rest}
|
|
37
|
+
ref={ref}
|
|
38
|
+
className={`${classes["remove"]} ${rest.className ?? ""}`}
|
|
39
|
+
title=""
|
|
40
|
+
onClick={onRemove}
|
|
41
|
+
>
|
|
42
|
+
<Icon icon={Icons.Times} className={classes["icon"]} />
|
|
43
|
+
<span className={readyclasses["sr-only"]}>
|
|
44
|
+
{removeLabel}
|
|
45
|
+
{label ? " " + label : ""}
|
|
46
|
+
</span>
|
|
47
|
+
</button>
|
|
48
|
+
)
|
|
49
|
+
);
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
export const RemoveButton = forwardRef(RemoveButtonComponent);
|
|
@@ -1,8 +1,25 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright 2022 OneWelcome B.V.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
1
17
|
$tagFontSize: 0.75rem;
|
|
2
18
|
|
|
3
19
|
.tag {
|
|
4
20
|
font-size: $tagFontSize;
|
|
5
|
-
padding: 0.
|
|
21
|
+
padding: 0.25rem 0.75rem;
|
|
22
|
+
border: none;
|
|
6
23
|
border-radius: 3.125rem;
|
|
7
24
|
display: inline-flex;
|
|
8
25
|
align-items: center;
|
|
@@ -16,8 +33,12 @@ $tagFontSize: 0.75rem;
|
|
|
16
33
|
background-color: var(--color-blue-grey100);
|
|
17
34
|
}
|
|
18
35
|
|
|
36
|
+
&.sharp {
|
|
37
|
+
border-radius: 0.125rem;
|
|
38
|
+
}
|
|
39
|
+
|
|
19
40
|
.label {
|
|
20
|
-
line-height:
|
|
41
|
+
line-height: 2;
|
|
21
42
|
font-size: inherit;
|
|
22
43
|
color: inherit;
|
|
23
44
|
}
|
|
@@ -18,6 +18,7 @@ import React, { ForwardRefRenderFunction, HTMLAttributes, forwardRef } from "rea
|
|
|
18
18
|
import { Icon, Icons } from "../Icon/Icon";
|
|
19
19
|
import classes from "./Tag.module.scss";
|
|
20
20
|
import { Typography } from "../Typography/Typography";
|
|
21
|
+
import { RemoveButton, Props as RemoveButtonProps } from "./RemoveButton";
|
|
21
22
|
|
|
22
23
|
export interface Props extends HTMLAttributes<HTMLDivElement> {
|
|
23
24
|
variant?: "enabled" | "disabled";
|
|
@@ -25,10 +26,21 @@ export interface Props extends HTMLAttributes<HTMLDivElement> {
|
|
|
25
26
|
backgroundColor?: string;
|
|
26
27
|
color?: string;
|
|
27
28
|
children?: string;
|
|
29
|
+
shape?: "rounded" | "sharp";
|
|
30
|
+
removeButton?: RemoveButtonProps;
|
|
28
31
|
}
|
|
29
32
|
|
|
30
33
|
const TagComponent: ForwardRefRenderFunction<HTMLDivElement, Props> = (
|
|
31
|
-
{
|
|
34
|
+
{
|
|
35
|
+
children,
|
|
36
|
+
variant,
|
|
37
|
+
icon,
|
|
38
|
+
backgroundColor,
|
|
39
|
+
color,
|
|
40
|
+
shape = "rounded",
|
|
41
|
+
removeButton = {},
|
|
42
|
+
...rest
|
|
43
|
+
}: Props,
|
|
32
44
|
ref
|
|
33
45
|
) => {
|
|
34
46
|
const determineIcon = () => {
|
|
@@ -43,25 +55,23 @@ const TagComponent: ForwardRefRenderFunction<HTMLDivElement, Props> = (
|
|
|
43
55
|
}
|
|
44
56
|
};
|
|
45
57
|
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return classes["tag-disabled"];
|
|
51
|
-
}
|
|
52
|
-
};
|
|
58
|
+
const tagClasses = [classes["tag"]];
|
|
59
|
+
variant === "enabled" && tagClasses.push(classes["tag-enabled"]);
|
|
60
|
+
variant === "disabled" && tagClasses.push(classes["tag-disabled"]);
|
|
61
|
+
shape === "sharp" && tagClasses.push(classes["sharp"]);
|
|
53
62
|
|
|
54
63
|
return (
|
|
55
64
|
<div
|
|
56
|
-
ref={ref}
|
|
57
|
-
className={`${determineClassName()} ${classes["tag"]} ${rest.className ?? ""}`}
|
|
58
|
-
style={{ backgroundColor, color }}
|
|
59
65
|
{...rest}
|
|
66
|
+
ref={ref as any}
|
|
67
|
+
className={`${tagClasses.join(" ")} ${rest.className ?? ""}`}
|
|
68
|
+
style={{ backgroundColor, color }}
|
|
60
69
|
>
|
|
61
70
|
{determineIcon()}
|
|
62
71
|
<Typography spacing={{ marginBottom: 0 }} variant="body" className={classes["label"]}>
|
|
63
72
|
{children}
|
|
64
73
|
</Typography>
|
|
74
|
+
<RemoveButton {...removeButton} label={children} />
|
|
65
75
|
</div>
|
|
66
76
|
);
|
|
67
77
|
};
|
package/src/font/icomoon.eot
CHANGED
|
Binary file
|
package/src/font/icomoon.svg
CHANGED
|
@@ -79,5 +79,6 @@
|
|
|
79
79
|
<glyph unicode="" glyph-name="upload" d="M933.648 598.588h-240.942v361.412h-361.412v-361.412h-240.942l421.648-421.648 421.648 421.648zM451.764 478.116v361.412h120.47v-361.412h70.475l-130.711-130.711-130.711 130.711h70.475zM90.352 56.47h843.294v-120.47h-843.294v120.47z" />
|
|
80
80
|
<glyph unicode="" glyph-name="reply" d="M98.011 739.109l366.202-157.014-366.689 48.762 0.488 108.251zM463.726 313.905l-366.202-157.014v108.251l366.202 48.762zM0.488 886.857l-0.488-341.334 731.429-97.523-731.429-97.523 0.488-341.334 1023.512 438.857-1023.512 438.857z" />
|
|
81
81
|
<glyph unicode="" glyph-name="save" d="M796.445 959.998h-682.667c-63.147 0-113.777-51.2-113.777-113.777v-796.444c0-62.577 50.631-113.777 113.777-113.777h796.444c62.577 0 113.777 51.2 113.777 113.777v682.667l-227.556 227.556zM910.224 49.775h-796.444v796.444h635.449l160.996-160.996v-635.449zM512.001 447.998c-94.436 0-170.667-76.231-170.667-170.667s76.231-170.667 170.667-170.667c94.436 0 170.667 76.231 170.667 170.667s-76.231 170.667-170.667 170.667zM170.668 789.331h512v-227.556h-512v227.556z" />
|
|
82
|
+
<glyph unicode="" glyph-name="warning-filled" d="M0 5.818h1024l-511.999 884.364-511.999-884.364zM558.545 145.454h-93.091v93.091h93.091v-93.091zM558.545 331.636h-93.091v186.182h93.091v-186.182z" />
|
|
82
83
|
<glyph unicode="" glyph-name="eye-blocked" d="M945.942 945.942c-18.746 18.744-49.136 18.744-67.882 0l-202.164-202.164c-51.938 15.754-106.948 24.222-163.896 24.222-223.318 0-416.882-130.042-512-320 41.122-82.124 100.648-153.040 173.022-207.096l-158.962-158.962c-18.746-18.746-18.746-49.136 0-67.882 9.372-9.374 21.656-14.060 33.94-14.060s24.568 4.686 33.942 14.058l864 864c18.744 18.746 18.744 49.138 0 67.884zM416 640c42.24 0 78.082-27.294 90.92-65.196l-121.724-121.724c-37.902 12.838-65.196 48.68-65.196 90.92 0 53.020 42.98 96 96 96zM110.116 448c38.292 60.524 89.274 111.924 149.434 150.296 3.918 2.5 7.876 4.922 11.862 7.3-9.962-27.328-15.412-56.822-15.412-87.596 0-54.89 17.286-105.738 46.7-147.418l-60.924-60.924c-52.446 36.842-97.202 83.882-131.66 138.342zM768 518c0 27.166-4.256 53.334-12.102 77.898l-321.808-321.808c24.568-7.842 50.742-12.090 77.91-12.090 141.382 0 256 114.618 256 256zM830.026 670.026l-69.362-69.362c1.264-0.786 2.53-1.568 3.786-2.368 60.162-38.374 111.142-89.774 149.434-150.296-38.292-60.522-89.274-111.922-149.436-150.296-75.594-48.218-162.89-73.704-252.448-73.704-38.664 0-76.902 4.76-113.962 14.040l-76.894-76.894c59.718-21.462 123.95-33.146 190.856-33.146 223.31 0 416.876 130.042 512 320-45.022 89.916-112.118 166.396-193.974 222.026z" />
|
|
83
84
|
</font></defs></svg>
|
package/src/font/icomoon.ttf
CHANGED
|
Binary file
|
package/src/font/icomoon.woff
CHANGED
|
Binary file
|