@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.
Files changed (186) hide show
  1. package/dist/cjs/Form/Fieldset/Fieldset.cjs.js +1 -1
  2. package/dist/cjs/Form/Fieldset/Fieldset.cjs.js.map +1 -1
  3. package/dist/cjs/Form/Select/MultiSelect/MultiOption.cjs.js +2 -0
  4. package/dist/cjs/Form/Select/MultiSelect/MultiOption.cjs.js.map +1 -0
  5. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js +2 -0
  6. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.cjs.js.map +1 -0
  7. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.module.cjs.js +2 -0
  8. package/dist/cjs/Form/Select/MultiSelect/MultiSelect.module.cjs.js.map +1 -0
  9. package/dist/cjs/Form/Select/MultiSelect/SelectButton.cjs.js +2 -0
  10. package/dist/cjs/Form/Select/MultiSelect/SelectButton.cjs.js.map +1 -0
  11. package/dist/cjs/Form/Select/MultiSelect/SelectButton.module.cjs.js +2 -0
  12. package/dist/cjs/Form/Select/MultiSelect/SelectButton.module.cjs.js.map +1 -0
  13. package/dist/cjs/Form/Select/MultiSelect/SelectedOptions.cjs.js +2 -0
  14. package/dist/cjs/Form/Select/MultiSelect/SelectedOptions.cjs.js.map +1 -0
  15. package/dist/cjs/Form/Select/MultiSelect/SelectedOptions.module.cjs.js +2 -0
  16. package/dist/cjs/Form/Select/MultiSelect/SelectedOptions.module.cjs.js.map +1 -0
  17. package/dist/cjs/Form/Select/SelectService.cjs.js +1 -1
  18. package/dist/cjs/Form/Select/SelectService.cjs.js.map +1 -1
  19. package/dist/cjs/Form/Select/SingleSelect/Option.cjs.js.map +1 -0
  20. package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js +2 -0
  21. package/dist/cjs/Form/Select/SingleSelect/Select.cjs.js.map +1 -0
  22. package/dist/cjs/Form/Select/SingleSelect/Select.module.cjs.js +2 -0
  23. package/dist/cjs/Form/Select/useAddNewBtn.cjs.js +2 -0
  24. package/dist/cjs/Form/Select/useAddNewBtn.cjs.js.map +1 -0
  25. package/dist/cjs/Form/Select/useAddNewBtn.module.cjs.js +2 -0
  26. package/dist/cjs/Form/Select/useAddNewBtn.module.cjs.js.map +1 -0
  27. package/dist/cjs/Form/Select/useSearch.cjs.js +2 -0
  28. package/dist/cjs/Form/Select/useSearch.cjs.js.map +1 -0
  29. package/dist/cjs/Form/Wrapper/InputWrapper/InputWrapper.module.cjs.js +1 -1
  30. package/dist/cjs/Form/Wrapper/SelectWrapper/SelectWrapper.cjs.js +1 -1
  31. package/dist/cjs/Form/Wrapper/SelectWrapper/SelectWrapper.cjs.js.map +1 -1
  32. package/dist/cjs/Form/Wrapper/SelectWrapper/SelectWrapper.module.cjs.js +1 -1
  33. package/dist/cjs/Form/Wrapper/Wrapper/Wrapper.module.cjs.js +1 -1
  34. package/dist/cjs/Icon/Icon.cjs.js +1 -1
  35. package/dist/cjs/Icon/Icon.cjs.js.map +1 -1
  36. package/dist/cjs/Icon/Icon.module.cjs.js +1 -1
  37. package/dist/cjs/Pagination/Pagination.cjs.js +1 -1
  38. package/dist/cjs/Pagination/Pagination.cjs.js.map +1 -1
  39. package/dist/cjs/Tag/RemoveButton.cjs.js +2 -0
  40. package/dist/cjs/Tag/RemoveButton.cjs.js.map +1 -0
  41. package/dist/cjs/Tag/RemoveButton.module.cjs.js +2 -0
  42. package/dist/cjs/Tag/RemoveButton.module.cjs.js.map +1 -0
  43. package/dist/cjs/Tag/Tag.cjs.js +1 -1
  44. package/dist/cjs/Tag/Tag.cjs.js.map +1 -1
  45. package/dist/cjs/Tag/Tag.module.cjs.js +1 -1
  46. package/dist/cjs/src/components/Form/Select/MultiSelect/MultiOption.d.ts +6 -0
  47. package/dist/cjs/src/components/Form/Select/MultiSelect/MultiSelect.d.ts +3 -0
  48. package/dist/cjs/src/components/Form/Select/MultiSelect/SelectButton.d.ts +4 -0
  49. package/dist/cjs/src/components/Form/Select/MultiSelect/SelectedOptions.d.ts +11 -0
  50. package/dist/cjs/src/components/Form/Select/Select.interfaces.d.ts +44 -0
  51. package/dist/cjs/src/components/Form/Select/SelectService.d.ts +6 -2
  52. package/dist/cjs/src/components/Form/Select/SingleSelect/Select.d.ts +3 -0
  53. package/dist/cjs/src/components/Form/Select/{Select.test.d.ts → SingleSelect/Select.test.d.ts} +4 -4
  54. package/dist/cjs/src/components/Form/Select/useAddNewBtn.d.ts +12 -0
  55. package/dist/cjs/src/components/Form/Select/useSearch.d.ts +29 -0
  56. package/dist/cjs/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.d.ts +16 -0
  57. package/dist/cjs/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.d.ts +2 -2
  58. package/dist/cjs/src/components/Icon/Icon.d.ts +1 -0
  59. package/dist/cjs/src/components/Tag/RemoveButton.d.ts +7 -0
  60. package/dist/cjs/src/components/Tag/Tag.d.ts +3 -0
  61. package/dist/cjs/src/index.cjs.js +1 -1
  62. package/dist/cjs/src/index.d.ts +7 -4
  63. package/dist/esm/Form/Fieldset/Fieldset.esm.js +1 -1
  64. package/dist/esm/Form/Fieldset/Fieldset.esm.js.map +1 -1
  65. package/dist/esm/Form/Select/MultiSelect/MultiOption.esm.js +2 -0
  66. package/dist/esm/Form/Select/MultiSelect/MultiOption.esm.js.map +1 -0
  67. package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js +2 -0
  68. package/dist/esm/Form/Select/MultiSelect/MultiSelect.esm.js.map +1 -0
  69. package/dist/esm/Form/Select/MultiSelect/MultiSelect.module.esm.js +2 -0
  70. package/dist/esm/Form/Select/MultiSelect/MultiSelect.module.esm.js.map +1 -0
  71. package/dist/esm/Form/Select/MultiSelect/SelectButton.esm.js +2 -0
  72. package/dist/esm/Form/Select/MultiSelect/SelectButton.esm.js.map +1 -0
  73. package/dist/esm/Form/Select/MultiSelect/SelectButton.module.esm.js +2 -0
  74. package/dist/esm/Form/Select/MultiSelect/SelectButton.module.esm.js.map +1 -0
  75. package/dist/esm/Form/Select/MultiSelect/SelectedOptions.esm.js +2 -0
  76. package/dist/esm/Form/Select/MultiSelect/SelectedOptions.esm.js.map +1 -0
  77. package/dist/esm/Form/Select/MultiSelect/SelectedOptions.module.esm.js +2 -0
  78. package/dist/esm/Form/Select/MultiSelect/SelectedOptions.module.esm.js.map +1 -0
  79. package/dist/esm/Form/Select/SelectService.esm.js +1 -1
  80. package/dist/esm/Form/Select/SelectService.esm.js.map +1 -1
  81. package/dist/esm/Form/Select/SingleSelect/Option.esm.js.map +1 -0
  82. package/dist/esm/Form/Select/SingleSelect/Select.esm.js +2 -0
  83. package/dist/esm/Form/Select/SingleSelect/Select.esm.js.map +1 -0
  84. package/dist/esm/Form/Select/SingleSelect/Select.module.esm.js +2 -0
  85. package/dist/esm/Form/Select/useAddNewBtn.esm.js +2 -0
  86. package/dist/esm/Form/Select/useAddNewBtn.esm.js.map +1 -0
  87. package/dist/esm/Form/Select/useAddNewBtn.module.esm.js +2 -0
  88. package/dist/esm/Form/Select/useAddNewBtn.module.esm.js.map +1 -0
  89. package/dist/esm/Form/Select/useSearch.esm.js +2 -0
  90. package/dist/esm/Form/Select/useSearch.esm.js.map +1 -0
  91. package/dist/esm/Form/Wrapper/InputWrapper/InputWrapper.module.esm.js +1 -1
  92. package/dist/esm/Form/Wrapper/SelectWrapper/SelectWrapper.esm.js +1 -1
  93. package/dist/esm/Form/Wrapper/SelectWrapper/SelectWrapper.esm.js.map +1 -1
  94. package/dist/esm/Form/Wrapper/SelectWrapper/SelectWrapper.module.esm.js +1 -1
  95. package/dist/esm/Form/Wrapper/Wrapper/Wrapper.module.esm.js +1 -1
  96. package/dist/esm/Icon/Icon.esm.js +1 -1
  97. package/dist/esm/Icon/Icon.esm.js.map +1 -1
  98. package/dist/esm/Icon/Icon.module.esm.js +1 -1
  99. package/dist/esm/Pagination/Pagination.esm.js +1 -1
  100. package/dist/esm/Pagination/Pagination.esm.js.map +1 -1
  101. package/dist/esm/Tag/RemoveButton.esm.js +2 -0
  102. package/dist/esm/Tag/RemoveButton.esm.js.map +1 -0
  103. package/dist/esm/Tag/RemoveButton.module.esm.js +2 -0
  104. package/dist/esm/Tag/RemoveButton.module.esm.js.map +1 -0
  105. package/dist/esm/Tag/Tag.esm.js +1 -1
  106. package/dist/esm/Tag/Tag.esm.js.map +1 -1
  107. package/dist/esm/Tag/Tag.module.esm.js +1 -1
  108. package/dist/esm/src/components/Form/Select/MultiSelect/MultiOption.d.ts +6 -0
  109. package/dist/esm/src/components/Form/Select/MultiSelect/MultiSelect.d.ts +3 -0
  110. package/dist/esm/src/components/Form/Select/MultiSelect/MultiSelect.test.d.ts +1 -0
  111. package/dist/esm/src/components/Form/Select/MultiSelect/SelectButton.d.ts +4 -0
  112. package/dist/esm/src/components/Form/Select/MultiSelect/SelectedOptions.d.ts +11 -0
  113. package/dist/esm/src/components/Form/Select/Select.interfaces.d.ts +44 -0
  114. package/dist/esm/src/components/Form/Select/SelectService.d.ts +6 -2
  115. package/dist/esm/src/components/Form/Select/SingleSelect/Option.test.d.ts +1 -0
  116. package/dist/esm/src/components/Form/Select/SingleSelect/Select.d.ts +3 -0
  117. package/dist/esm/src/components/Form/Select/{Select.test.d.ts → SingleSelect/Select.test.d.ts} +4 -4
  118. package/dist/esm/src/components/Form/Select/SingleSelect/SelectKeyboardNavigation.test.d.ts +1 -0
  119. package/dist/esm/src/components/Form/Select/useAddNewBtn.d.ts +12 -0
  120. package/dist/esm/src/components/Form/Select/useSearch.d.ts +29 -0
  121. package/dist/esm/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.d.ts +16 -0
  122. package/dist/esm/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.test.d.ts +1 -0
  123. package/dist/esm/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.d.ts +2 -2
  124. package/dist/esm/src/components/Icon/Icon.d.ts +1 -0
  125. package/dist/esm/src/components/Tag/RemoveButton.d.ts +7 -0
  126. package/dist/esm/src/components/Tag/Tag.d.ts +3 -0
  127. package/dist/esm/src/index.d.ts +7 -4
  128. package/dist/esm/src/index.esm.js +1 -1
  129. package/package.json +31 -31
  130. package/src/components/Form/Fieldset/Fieldset.tsx +3 -1
  131. package/src/components/Form/Select/MultiSelect/MultiOption.tsx +31 -0
  132. package/src/components/Form/Select/MultiSelect/MultiSelect.module.scss +244 -0
  133. package/src/components/Form/Select/MultiSelect/MultiSelect.tsx +363 -0
  134. package/src/{.scope.ts → components/Form/Select/MultiSelect/SelectButton.module.scss} +12 -2
  135. package/src/components/Form/Select/MultiSelect/SelectButton.tsx +37 -0
  136. package/src/components/Form/Select/MultiSelect/SelectedOptions.module.scss +31 -0
  137. package/src/components/Form/Select/MultiSelect/SelectedOptions.tsx +67 -0
  138. package/src/components/Form/Select/Select.interfaces.ts +48 -0
  139. package/src/components/Form/Select/SelectService.ts +23 -6
  140. package/src/components/Form/Select/{Select.module.scss → SingleSelect/Select.module.scss} +2 -36
  141. package/src/components/Form/Select/{Select.tsx → SingleSelect/Select.tsx} +45 -127
  142. package/src/components/Form/Select/useAddNewBtn.module.scss +51 -0
  143. package/src/components/Form/Select/useAddNewBtn.tsx +54 -0
  144. package/src/components/Form/Select/useSearch.tsx +124 -0
  145. package/src/components/Form/Wrapper/InputWrapper/InputWrapper.module.scss +0 -10
  146. package/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.module.scss +27 -0
  147. package/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.tsx +84 -0
  148. package/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.module.scss +0 -4
  149. package/src/components/Form/Wrapper/SelectWrapper/SelectWrapper.tsx +3 -2
  150. package/src/components/Form/Wrapper/Wrapper/Wrapper.module.scss +0 -6
  151. package/src/components/Icon/Icon.module.scss +5 -0
  152. package/src/components/Icon/Icon.tsx +1 -0
  153. package/src/components/Pagination/Pagination.tsx +2 -2
  154. package/src/components/Tag/RemoveButton.module.scss +41 -0
  155. package/src/components/Tag/RemoveButton.tsx +52 -0
  156. package/src/components/Tag/Tag.module.scss +23 -2
  157. package/src/components/Tag/Tag.tsx +21 -11
  158. package/src/font/icomoon.eot +0 -0
  159. package/src/font/icomoon.svg +1 -0
  160. package/src/font/icomoon.ttf +0 -0
  161. package/src/font/icomoon.woff +0 -0
  162. package/src/font/selection.json +1 -1
  163. package/src/index.ts +11 -4
  164. package/dist/cjs/Form/Select/Option.cjs.js.map +0 -1
  165. package/dist/cjs/Form/Select/Select.cjs.js +0 -2
  166. package/dist/cjs/Form/Select/Select.cjs.js.map +0 -1
  167. package/dist/cjs/Form/Select/Select.module.cjs.js +0 -2
  168. package/dist/cjs/src/components/Form/Select/Select.d.ts +0 -43
  169. package/dist/esm/Form/Select/Option.esm.js.map +0 -1
  170. package/dist/esm/Form/Select/Select.esm.js +0 -2
  171. package/dist/esm/Form/Select/Select.esm.js.map +0 -1
  172. package/dist/esm/Form/Select/Select.module.esm.js +0 -2
  173. package/dist/esm/src/components/Form/Select/Select.d.ts +0 -43
  174. /package/dist/cjs/{src/.scope.d.ts → .scope.d.ts} +0 -0
  175. /package/dist/cjs/Form/Select/{Option.cjs.js → SingleSelect/Option.cjs.js} +0 -0
  176. /package/dist/cjs/Form/Select/{Select.module.cjs.js.map → SingleSelect/Select.module.cjs.js.map} +0 -0
  177. /package/dist/cjs/src/components/Form/Select/{Option.test.d.ts → MultiSelect/MultiSelect.test.d.ts} +0 -0
  178. /package/dist/cjs/src/components/Form/Select/{Option.d.ts → SingleSelect/Option.d.ts} +0 -0
  179. /package/dist/{esm/src/components/Form/Select → cjs/src/components/Form/Select/SingleSelect}/Option.test.d.ts +0 -0
  180. /package/dist/cjs/src/components/Form/Select/{SelectKeyboardNavigation.test.d.ts → SingleSelect/SelectKeyboardNavigation.test.d.ts} +0 -0
  181. /package/dist/{esm/src/components/Form/Select/SelectKeyboardNavigation.test.d.ts → cjs/src/components/Form/Wrapper/MultiSelectWrapper/MultiSelectWrapper.test.d.ts} +0 -0
  182. /package/dist/esm/{src/.scope.d.ts → .scope.d.ts} +0 -0
  183. /package/dist/esm/Form/Select/{Option.esm.js → SingleSelect/Option.esm.js} +0 -0
  184. /package/dist/esm/Form/Select/{Select.module.esm.js.map → SingleSelect/Select.module.esm.js.map} +0 -0
  185. /package/dist/esm/src/components/Form/Select/{Option.d.ts → SingleSelect/Option.d.ts} +0 -0
  186. /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);
@@ -25,7 +25,3 @@
25
25
  .select-helper-text {
26
26
  margin-top: 0.15rem;
27
27
  }
28
-
29
- .floating-label-active [data-display] {
30
- top: calc(50% + 0.5rem);
31
- }
@@ -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, Props as SelectProps } from "../../Select/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<SelectProps> {}
24
+ interface PartialSelectProps extends Partial<SingleSelectProps> {}
24
25
 
25
26
  export interface Props
26
27
  extends Omit<ComponentPropsWithRef<"div">, "onChange">,
@@ -31,12 +31,6 @@
31
31
  @include mixins.transition(all, 0.2s, ease-in-out);
32
32
  pointer-events: none;
33
33
 
34
- &.floating-label-active {
35
- font-size: 0.75rem;
36
- transform: translateY(-0.8rem);
37
- color: var(--default);
38
- }
39
-
40
34
  &.error {
41
35
  color: var(--error);
42
36
  }
@@ -337,3 +337,8 @@
337
337
  content: "\e9d1";
338
338
  @include fontProperties();
339
339
  }
340
+
341
+ .icon-warning-filled:before {
342
+ content: "\e948";
343
+ @include fontProperties();
344
+ }
@@ -85,6 +85,7 @@ export enum Icons {
85
85
  TriangleUp = "triangle-up",
86
86
  Undo = "undo",
87
87
  Warning = "warning",
88
+ WarningFilled = "warning-filled",
88
89
  FileOutline = "file-outline",
89
90
  FileUpload = "file-upload-outline",
90
91
  FileDownload = "file-download-outline",
@@ -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.375rem 0.7rem;
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: $tagFontSize;
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
- { children, variant, icon, backgroundColor, color, ...rest }: Props,
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 determineClassName = () => {
47
- if (variant === "enabled") {
48
- return classes["tag-enabled"];
49
- } else if (variant === "disabled") {
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
  };
Binary file
@@ -79,5 +79,6 @@
79
79
  <glyph unicode="&#xe945;" 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="&#xe946;" 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="&#xe947;" 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="&#xe948;" 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="&#xe9d1;" 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>
Binary file
Binary file