siam-ui-utils 3.0.31 → 3.1.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 (185) hide show
  1. package/dist/CustomBootstrap.js +9 -0
  2. package/dist/CustomBootstrap.js.map +1 -0
  3. package/dist/_virtual/_commonjsHelpers.js +7 -0
  4. package/dist/_virtual/_commonjsHelpers.js.map +1 -0
  5. package/dist/_virtual/events.js +6 -0
  6. package/dist/_virtual/events.js.map +1 -0
  7. package/dist/_virtual/events2.js +5 -0
  8. package/dist/_virtual/events2.js.map +1 -0
  9. package/dist/_virtual/index.js +8 -0
  10. package/dist/_virtual/index.js.map +1 -0
  11. package/dist/_virtual/index2.js +5 -0
  12. package/dist/_virtual/index2.js.map +1 -0
  13. package/dist/assets/img/copiar.png.js +5 -0
  14. package/dist/assets/img/copiar.png.js.map +1 -0
  15. package/dist/assets/img/take-photo.jpg.js +5 -0
  16. package/dist/assets/img/take-photo.jpg.js.map +1 -0
  17. package/dist/constants.js +9 -0
  18. package/dist/constants.js.map +1 -0
  19. package/dist/copy-link/index.js +60 -0
  20. package/dist/copy-link/index.js.map +1 -0
  21. package/dist/copy-link/styles.css +38 -0
  22. package/dist/custom-input/CustomInputCheckbox.js +37 -0
  23. package/dist/custom-input/CustomInputCheckbox.js.map +1 -0
  24. package/dist/custom-input/CustomInputCurrency.js +84 -0
  25. package/dist/custom-input/CustomInputCurrency.js.map +1 -0
  26. package/dist/custom-input/CustomInputFile.js +47 -0
  27. package/dist/custom-input/CustomInputFile.js.map +1 -0
  28. package/dist/custom-input/CustomInputRadio.js +68 -0
  29. package/dist/custom-input/CustomInputRadio.js.map +1 -0
  30. package/dist/custom-input/constant.js +5 -0
  31. package/dist/custom-input/constant.js.map +1 -0
  32. package/dist/custom-input/index.css +167 -0
  33. package/dist/custom-input/index.js +12 -0
  34. package/dist/custom-input/index.js.map +1 -0
  35. package/dist/drag-and-dropzone/DropzoneComponent.js +83 -0
  36. package/dist/drag-and-dropzone/DropzoneComponent.js.map +1 -0
  37. package/dist/drag-and-dropzone/config.js +59 -0
  38. package/dist/drag-and-dropzone/config.js.map +1 -0
  39. package/dist/drag-and-dropzone/index.css +276 -0
  40. package/dist/drag-and-dropzone/index.js +39 -0
  41. package/dist/drag-and-dropzone/index.js.map +1 -0
  42. package/dist/dropzone/Input.js +77 -0
  43. package/dist/dropzone/Input.js.map +1 -0
  44. package/dist/dropzone/Layout.js +50 -0
  45. package/dist/dropzone/Layout.js.map +1 -0
  46. package/dist/dropzone/Preview.js +117 -0
  47. package/dist/dropzone/Preview.js.map +1 -0
  48. package/dist/dropzone/SubmitButton.js +34 -0
  49. package/dist/dropzone/SubmitButton.js.map +1 -0
  50. package/dist/dropzone/assets/cancel.svg.js +5 -0
  51. package/dist/dropzone/assets/cancel.svg.js.map +1 -0
  52. package/dist/dropzone/assets/remove.svg.js +5 -0
  53. package/dist/dropzone/assets/remove.svg.js.map +1 -0
  54. package/dist/dropzone/assets/restart.svg.js +5 -0
  55. package/dist/dropzone/assets/restart.svg.js.map +1 -0
  56. package/dist/dropzone/index.js +514 -0
  57. package/dist/dropzone/index.js.map +1 -0
  58. package/dist/dropzone/utils.js +93 -0
  59. package/dist/dropzone/utils.js.map +1 -0
  60. package/dist/dropzone-uploader/base/index.css +207 -0
  61. package/dist/dropzone-uploader/base/index.js +135 -0
  62. package/dist/dropzone-uploader/base/index.js.map +1 -0
  63. package/dist/dropzone-uploader/index.js +7 -0
  64. package/dist/dropzone-uploader/index.js.map +1 -0
  65. package/dist/dropzone-uploader/styled/index.css +348 -0
  66. package/dist/dropzone-uploader/styled/index.js +148 -0
  67. package/dist/dropzone-uploader/styled/index.js.map +1 -0
  68. package/dist/iconos/constants-svg.js +666 -0
  69. package/dist/iconos/constants-svg.js.map +1 -0
  70. package/dist/iconos/icon-button-svg.js +50 -0
  71. package/dist/iconos/icon-button-svg.js.map +1 -0
  72. package/dist/iconos/index.js +24 -0
  73. package/dist/iconos/index.js.map +1 -0
  74. package/dist/iconos/styled-icon.js +26 -0
  75. package/dist/iconos/styled-icon.js.map +1 -0
  76. package/dist/index.js +4 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/intl-messages/index.js +11 -0
  79. package/dist/intl-messages/index.js.map +1 -0
  80. package/dist/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js +8 -0
  81. package/dist/node_modules/@babel/runtime/helpers/esm/assertThisInitialized.js.map +1 -0
  82. package/dist/node_modules/@babel/runtime/helpers/esm/extends.js +13 -0
  83. package/dist/node_modules/@babel/runtime/helpers/esm/extends.js.map +1 -0
  84. package/dist/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js +8 -0
  85. package/dist/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js.map +1 -0
  86. package/dist/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js +13 -0
  87. package/dist/node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js.map +1 -0
  88. package/dist/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js +9 -0
  89. package/dist/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js.map +1 -0
  90. package/dist/node_modules/@neolution-ch/reactstrap/esm/Button.js +111 -0
  91. package/dist/node_modules/@neolution-ch/reactstrap/esm/Button.js.map +1 -0
  92. package/dist/node_modules/@neolution-ch/reactstrap/esm/CloseButton.js +106 -0
  93. package/dist/node_modules/@neolution-ch/reactstrap/esm/CloseButton.js.map +1 -0
  94. package/dist/node_modules/@neolution-ch/reactstrap/esm/Col.js +125 -0
  95. package/dist/node_modules/@neolution-ch/reactstrap/esm/Col.js.map +1 -0
  96. package/dist/node_modules/@neolution-ch/reactstrap/esm/FormGroup.js +75 -0
  97. package/dist/node_modules/@neolution-ch/reactstrap/esm/FormGroup.js.map +1 -0
  98. package/dist/node_modules/@neolution-ch/reactstrap/esm/Input.js +225 -0
  99. package/dist/node_modules/@neolution-ch/reactstrap/esm/Input.js.map +1 -0
  100. package/dist/node_modules/@neolution-ch/reactstrap/esm/Label.js +122 -0
  101. package/dist/node_modules/@neolution-ch/reactstrap/esm/Label.js.map +1 -0
  102. package/dist/node_modules/@neolution-ch/reactstrap/esm/Row.js +83 -0
  103. package/dist/node_modules/@neolution-ch/reactstrap/esm/Row.js.map +1 -0
  104. package/dist/node_modules/@neolution-ch/reactstrap/esm/utils.js +68 -0
  105. package/dist/node_modules/@neolution-ch/reactstrap/esm/utils.js.map +1 -0
  106. package/dist/node_modules/classnames/index.js +62 -0
  107. package/dist/node_modules/classnames/index.js.map +1 -0
  108. package/dist/node_modules/dom-helpers/esm/addClass.js +10 -0
  109. package/dist/node_modules/dom-helpers/esm/addClass.js.map +1 -0
  110. package/dist/node_modules/dom-helpers/esm/hasClass.js +8 -0
  111. package/dist/node_modules/dom-helpers/esm/hasClass.js.map +1 -0
  112. package/dist/node_modules/dom-helpers/esm/removeClass.js +16 -0
  113. package/dist/node_modules/dom-helpers/esm/removeClass.js.map +1 -0
  114. package/dist/node_modules/dropzone/dist/dropzone.js +1968 -0
  115. package/dist/node_modules/dropzone/dist/dropzone.js.map +1 -0
  116. package/dist/node_modules/events/events.js +372 -0
  117. package/dist/node_modules/events/events.js.map +1 -0
  118. package/dist/node_modules/just-extend/index.esm.js +43 -0
  119. package/dist/node_modules/just-extend/index.esm.js.map +1 -0
  120. package/dist/node_modules/react-transition-group/esm/CSSTransition.js +275 -0
  121. package/dist/node_modules/react-transition-group/esm/CSSTransition.js.map +1 -0
  122. package/dist/node_modules/react-transition-group/esm/Transition.js +441 -0
  123. package/dist/node_modules/react-transition-group/esm/Transition.js.map +1 -0
  124. package/dist/node_modules/react-transition-group/esm/TransitionGroup.js +146 -0
  125. package/dist/node_modules/react-transition-group/esm/TransitionGroup.js.map +1 -0
  126. package/dist/node_modules/react-transition-group/esm/TransitionGroupContext.js +6 -0
  127. package/dist/node_modules/react-transition-group/esm/TransitionGroupContext.js.map +1 -0
  128. package/dist/node_modules/react-transition-group/esm/config.js +7 -0
  129. package/dist/node_modules/react-transition-group/esm/config.js.map +1 -0
  130. package/dist/node_modules/react-transition-group/esm/utils/ChildMapping.js +100 -0
  131. package/dist/node_modules/react-transition-group/esm/utils/ChildMapping.js.map +1 -0
  132. package/dist/node_modules/react-transition-group/esm/utils/PropTypes.js +24 -0
  133. package/dist/node_modules/react-transition-group/esm/utils/PropTypes.js.map +1 -0
  134. package/dist/node_modules/react-transition-group/esm/utils/reflow.js +7 -0
  135. package/dist/node_modules/react-transition-group/esm/utils/reflow.js.map +1 -0
  136. package/dist/react-notifications/Notification.js +73 -0
  137. package/dist/react-notifications/Notification.js.map +1 -0
  138. package/dist/react-notifications/NotificationContainer.js +59 -0
  139. package/dist/react-notifications/NotificationContainer.js.map +1 -0
  140. package/dist/react-notifications/NotificationManager.js +174 -0
  141. package/dist/react-notifications/NotificationManager.js.map +1 -0
  142. package/dist/react-notifications/Notifications.js +72 -0
  143. package/dist/react-notifications/Notifications.js.map +1 -0
  144. package/dist/react-notifications/constants.js +26 -0
  145. package/dist/react-notifications/constants.js.map +1 -0
  146. package/dist/react-notifications/index.js +11 -0
  147. package/dist/react-notifications/index.js.map +1 -0
  148. package/dist/react-notifications/notifications.css +213 -0
  149. package/dist/select/custom-select/constants.js +8 -0
  150. package/dist/select/custom-select/constants.js.map +1 -0
  151. package/dist/select/custom-select/index.js +89 -0
  152. package/dist/select/custom-select/index.js.map +1 -0
  153. package/dist/select/custom-select-input/index.js +12 -0
  154. package/dist/select/custom-select-input/index.js.map +1 -0
  155. package/dist/select/index.js +9 -0
  156. package/dist/select/index.js.map +1 -0
  157. package/dist/select/multi-select/badge-label-multi-select.js +29 -0
  158. package/dist/select/multi-select/badge-label-multi-select.js.map +1 -0
  159. package/dist/select/multi-select/index.css +37 -0
  160. package/dist/select/multi-select/index.js +171 -0
  161. package/dist/select/multi-select/index.js.map +1 -0
  162. package/dist/select/multi-select/styled-component.js +23 -0
  163. package/dist/select/multi-select/styled-component.js.map +1 -0
  164. package/dist/timer/index.js +60 -0
  165. package/dist/timer/index.js.map +1 -0
  166. package/dist/timer/styles.css +59 -0
  167. package/dist/tomar-foto/index.js +62 -0
  168. package/dist/tomar-foto/index.js.map +1 -0
  169. package/dist/view-layout/button-editor.js +14 -0
  170. package/dist/view-layout/button-editor.js.map +1 -0
  171. package/dist/view-layout/constants.js +11 -0
  172. package/dist/view-layout/constants.js.map +1 -0
  173. package/dist/view-layout/editor-layer.js +28 -0
  174. package/dist/view-layout/editor-layer.js.map +1 -0
  175. package/dist/view-layout/index.js +53 -0
  176. package/dist/view-layout/index.js.map +1 -0
  177. package/dist/view-layout/slot-wrapper.js +39 -0
  178. package/dist/view-layout/slot-wrapper.js.map +1 -0
  179. package/dist/view-layout/styles.css +127 -0
  180. package/dist/where-by-room/index.js +20 -0
  181. package/dist/where-by-room/index.js.map +1 -0
  182. package/dist/where-by-room/room.js +78 -0
  183. package/dist/where-by-room/room.js.map +1 -0
  184. package/index.d.ts +1 -1
  185. package/package.json +12 -10
@@ -0,0 +1,213 @@
1
+ .notification-container {
2
+ box-sizing: border-box;
3
+ position: fixed;
4
+ top: 0;
5
+ right: 0;
6
+ z-index: 999999;
7
+ width: 320px;
8
+ padding: 0px 15px;
9
+ max-height: calc(100% - 30px);
10
+ overflow-x: hidden;
11
+ overflow-y: auto;
12
+ }
13
+
14
+ .notification-container-empty {
15
+ display: none;
16
+ }
17
+
18
+ .notification {
19
+ box-sizing: border-box;
20
+ padding: 15px 15px 15px 15px;
21
+ text-align: start;
22
+ border-radius: 2px;
23
+ cursor: pointer;
24
+ font-size: 1em;
25
+ line-height: 1.2em;
26
+ position: relative;
27
+ opacity: 0.9;
28
+ margin-top: 15px;
29
+ }
30
+
31
+ .notification .title {
32
+ font-size: 1em;
33
+ line-height: 1.2em;
34
+ font-weight: bold;
35
+ margin: 0 0 5px 0;
36
+ }
37
+
38
+ .notification:hover,
39
+ .notification:focus {
40
+ opacity: 1;
41
+ }
42
+
43
+ .notification-enter {
44
+ visibility: hidden;
45
+ transform: translate3d(100%, 0, 0);
46
+ }
47
+
48
+ .notification-enter-active {
49
+ visibility: visible;
50
+ transform: translate3d(0, 0, 0);
51
+ transition: all 0.4s;
52
+ }
53
+
54
+ .notification-exit {
55
+ visibility: visible;
56
+ transform: translate3d(0, 0, 0);
57
+ }
58
+
59
+ .notification-exit-active {
60
+ visibility: hidden;
61
+ transform: translate3d(100%, 0, 0);
62
+ transition: all 0.4s;
63
+ }
64
+
65
+ .notification-primary {
66
+ color: #922c88;
67
+ background-color: #ffffff;
68
+ border: 1px solid #922c88;
69
+ opacity: 1;
70
+ }
71
+
72
+ .notification-primary .notification-message .title {
73
+ color: #922c88;
74
+ }
75
+
76
+ .notification-primary .notification-message .message {
77
+ color: #212529;
78
+ }
79
+
80
+ .notification-primary.filled {
81
+ color: #ffffff;
82
+ background-color: #922c88;
83
+ }
84
+
85
+ .notification-primary.filled .notification-message .title,
86
+ .notification-primary.filled .notification-message .message {
87
+ color: #ffffff;
88
+ }
89
+
90
+ .notification-secondary {
91
+ color: #145388;
92
+ background-color: #ffffff;
93
+ border: 1px solid #145388;
94
+ opacity: 1;
95
+ }
96
+
97
+ .notification-secondary .notification-message .title {
98
+ color: #145388;
99
+ }
100
+
101
+ .notification-secondary .notification-message .message {
102
+ color: #6c757d;
103
+ }
104
+
105
+ .notification-secondary.filled {
106
+ color: #ffffff;
107
+ background-color: #145388;
108
+ }
109
+
110
+ .notification-secondary.filled .notification-message .title,
111
+ .notification-secondary.filled .notification-message .message {
112
+ color: #ffffff;
113
+ }
114
+
115
+ .notification-info {
116
+ color: #17a2b8;
117
+ background-color: #ffffff;
118
+ border: 1px solid #17a2b8;
119
+ opacity: 1;
120
+ }
121
+
122
+ .notification-info .notification-message .title {
123
+ color: #17a2b8;
124
+ }
125
+
126
+ .notification-info .notification-message .message {
127
+ color: #6c757d;
128
+ }
129
+
130
+ .notification-info.filled {
131
+ color: #ffffff;
132
+ background-color: #17a2b8;
133
+ }
134
+
135
+ .notification-info.filled .notification-message .title,
136
+ .notification-info.filled .notification-message .message {
137
+ color: #ffffff;
138
+ }
139
+
140
+ .notification-success {
141
+ color: #28a745;
142
+ background-color: #ffffff;
143
+ border: 1px solid #28a745;
144
+ opacity: 1;
145
+ }
146
+
147
+ .notification-success .notification-message .title {
148
+ color: #28a745;
149
+ }
150
+
151
+ .notification-success .notification-message .message {
152
+ color: #6c757d;
153
+ }
154
+
155
+ .notification-success.filled {
156
+ color: #ffffff;
157
+ background-color: #28a745;
158
+ }
159
+
160
+ .notification-success.filled .notification-message .title,
161
+ .notification-success.filled .notification-message .message {
162
+ color: #ffffff;
163
+ }
164
+
165
+ .notification-warning {
166
+ color: #ffc107;
167
+ background-color: #ffffff;
168
+ border: 1px solid #ffc107;
169
+ opacity: 1;
170
+ }
171
+
172
+ .notification-warning .notification-message .title {
173
+ color: #ffc107;
174
+ }
175
+
176
+ .notification-warning .notification-message .message {
177
+ color: #6c757d;
178
+ }
179
+
180
+ .notification-warning.filled {
181
+ color: #ffffff;
182
+ background-color: #ffc107;
183
+ }
184
+
185
+ .notification-warning.filled .notification-message .title,
186
+ .notification-warning.filled .notification-message .message {
187
+ color: #ffffff;
188
+ }
189
+
190
+ .notification-error {
191
+ color: #dc3545;
192
+ background-color: #ffffff;
193
+ border: 1px solid #dc3545;
194
+ opacity: 1;
195
+ }
196
+
197
+ .notification-error .notification-message .title {
198
+ color: #dc3545;
199
+ }
200
+
201
+ .notification-error .notification-message .message {
202
+ color: #6c757d;
203
+ }
204
+
205
+ .notification-error.filled {
206
+ color: #ffffff;
207
+ background-color: #dc3545;
208
+ }
209
+
210
+ .notification-error.filled .notification-message .title,
211
+ .notification-error.filled .notification-message .message {
212
+ color: #ffffff;
213
+ }
@@ -0,0 +1,8 @@
1
+ const LABELS = {
2
+ SIN_DATOS: "SIN DATOS",
3
+ SELECCIONE: "SELECCIONE..."
4
+ };
5
+ export {
6
+ LABELS
7
+ };
8
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sources":["../../../src/select/custom-select/constants.js"],"sourcesContent":["export const LABELS = {\r\n SIN_DATOS: \"SIN DATOS\",\r\n SELECCIONE: \"SELECCIONE...\",\r\n};\r\n"],"names":[],"mappings":"AAAY,MAAC,SAAS;AAAA,EACpB,WAAW;AAAA,EACX,YAAY;AACd;"}
@@ -0,0 +1,89 @@
1
+ import { jsxs, Fragment, jsx } from "react/jsx-runtime";
2
+ import { useState, useEffect } from "react";
3
+ import Select from "react-select";
4
+ import Label from "../../node_modules/@neolution-ch/reactstrap/esm/Label.js";
5
+ import { CustomSelectInput } from "../custom-select-input/index.js";
6
+ import { LABELS } from "./constants.js";
7
+ const { SIN_DATOS, SELECCIONE } = LABELS;
8
+ const CustomSelect = (props) => {
9
+ const [firstElement] = useState(props.firstElement);
10
+ const [newItem] = useState(props.newItem);
11
+ const [selectedIoption, setIoption] = useState({});
12
+ const [customStylesOption] = useState(props.customStylesOption);
13
+ const [customStyles, setCustomStyles] = useState({});
14
+ useEffect(() => {
15
+ if (newItem) {
16
+ props.options.push(newItem);
17
+ }
18
+ }, [newItem, props.options]);
19
+ useEffect(() => {
20
+ const { options = [] } = props;
21
+ if (firstElement && Number(options?.length) > 1) {
22
+ const propIOption = options.filter((item) => item === firstElement);
23
+ if (propIOption?.length === 0) {
24
+ props.options.unshift(firstElement);
25
+ }
26
+ }
27
+ }, [firstElement, props.options]);
28
+ useEffect(() => {
29
+ const { selectedValue } = props;
30
+ const errorProp = { value: null };
31
+ if (selectedValue || firstElement && firstElement.value === selectedValue) {
32
+ const propIOption = props.options.filter(({ value }) => {
33
+ return JSON.stringify(value) === JSON.stringify(selectedValue);
34
+ });
35
+ if (propIOption[0]) {
36
+ setIoption(propIOption[0]);
37
+ if (!Object.getOwnPropertyDescriptor(selectedIoption, "label")) {
38
+ props.onChange(propIOption[0]);
39
+ }
40
+ } else {
41
+ setIoption(errorProp);
42
+ props.onChange(errorProp);
43
+ }
44
+ } else if (props.options.length > 0) {
45
+ setIoption(errorProp);
46
+ props.onChange(errorProp);
47
+ }
48
+ }, [props.selectedValue, props.options, firstElement]);
49
+ useEffect(() => {
50
+ if (customStylesOption) {
51
+ const stylesOption = {
52
+ option: (base, { data }) => {
53
+ return {
54
+ ...base,
55
+ color: data.fields && data.fields[customStylesOption.fieldMatch] === customStylesOption.valueMatch ? "blue !important" : "",
56
+ fontWeight: data.fields && data.fields[customStylesOption.fieldMatch] === customStylesOption.valueMatch ? "bold" : ""
57
+ };
58
+ }
59
+ };
60
+ setCustomStyles(stylesOption);
61
+ }
62
+ }, [customStylesOption]);
63
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
64
+ props.label && props.label !== "" && /* @__PURE__ */ jsxs(Label, { className: "mb-0", children: [
65
+ props.label,
66
+ ":"
67
+ ] }),
68
+ /* @__PURE__ */ jsx(
69
+ Select,
70
+ {
71
+ ...props,
72
+ components: { Input: CustomSelectInput },
73
+ className: "react-select",
74
+ classNamePrefix: "react-select",
75
+ name: "form-field-name",
76
+ value: Object.getOwnPropertyDescriptor(selectedIoption, "label") ? selectedIoption : "",
77
+ onChange: props.onChange,
78
+ options: props.options,
79
+ placeholder: Number(props.options.length) === 0 ? SIN_DATOS : props.placeholder || SELECCIONE,
80
+ isDisabled: props.disabled,
81
+ styles: customStyles
82
+ }
83
+ )
84
+ ] });
85
+ };
86
+ export {
87
+ CustomSelect
88
+ };
89
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/select/custom-select/index.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\r\nimport Select from 'react-select';\r\nimport { Label } from '@neolution-ch/reactstrap';\r\nimport { CustomSelectInput } from '../custom-select-input';\r\nimport { LABELS } from './constants';\r\n\r\ninterface ICustomStylesOption {\r\n fieldMatch: string;\r\n valueMatch: any;\r\n}\r\ninterface IOption {\r\n label: string;\r\n value: any;\r\n fields?: any;\r\n}\r\ninterface IOption {\r\n label: string;\r\n value: any;\r\n fields?: any;\r\n}\r\ninterface Props {\r\n label: string;\r\n tabIndex: number;\r\n options: [IOption];\r\n onChange: any;\r\n selectedValue: any;\r\n firstElement?: IOption; // no ingresar null como VALUE del elemento, setear '' ya que lo toma como que no se selecciono nada\r\n newItem?: IOption;\r\n placeholder?: string;\r\n disabled?: boolean;\r\n customStylesOption?: ICustomStylesOption;\r\n}\r\n\r\nconst { SIN_DATOS, SELECCIONE } = LABELS;\r\n\r\nexport const CustomSelect: React.FC<Props> = (props: Props) => {\r\n const [firstElement] = useState(props.firstElement);\r\n const [newItem] = useState(props.newItem);\r\n const [selectedIoption, setIoption] = useState({});\r\n const [customStylesOption] = useState(props.customStylesOption);\r\n const [customStyles, setCustomStyles] = useState({});\r\n\r\n // agrega items\r\n useEffect(() => {\r\n if (newItem) {\r\n props.options.push(newItem);\r\n }\r\n }, [newItem, props.options]);\r\n\r\n // Seleccion del 1er item.\r\n useEffect(() => {\r\n const { options = [] } = props;\r\n if (firstElement && Number(options?.length) > 1) {\r\n const propIOption = options.filter((item) => item === firstElement);\r\n\r\n if (propIOption?.length === 0) {\r\n props.options.unshift(firstElement);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [firstElement, props.options]);\r\n\r\n // selecciona un valor seteado dentro de la coleccion\r\n useEffect(() => {\r\n const { selectedValue } = props;\r\n const errorProp = { value: null };\r\n\r\n if (\r\n selectedValue ||\r\n (firstElement && firstElement.value === selectedValue)\r\n ) {\r\n const propIOption = props.options.filter(({ value }) => {\r\n return JSON.stringify(value) === JSON.stringify(selectedValue);\r\n });\r\n\r\n if (propIOption[0]) {\r\n setIoption(propIOption[0]);\r\n if (!Object.getOwnPropertyDescriptor(selectedIoption, 'label')) {\r\n props.onChange(propIOption[0]);\r\n }\r\n } else {\r\n setIoption(errorProp);\r\n props.onChange(errorProp);\r\n }\r\n } else if (props.options.length > 0) {\r\n setIoption(errorProp);\r\n props.onChange(errorProp);\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [props.selectedValue, props.options, firstElement]);\r\n\r\n useEffect(() => {\r\n if (customStylesOption) {\r\n const stylesOption = {\r\n option: (base: any, { data }: any) => {\r\n return {\r\n ...base,\r\n color:\r\n data.fields &&\r\n data.fields[customStylesOption.fieldMatch] ===\r\n customStylesOption.valueMatch\r\n ? 'blue !important'\r\n : '',\r\n fontWeight:\r\n data.fields &&\r\n data.fields[customStylesOption.fieldMatch] ===\r\n customStylesOption.valueMatch\r\n ? 'bold'\r\n : '',\r\n };\r\n },\r\n };\r\n setCustomStyles(stylesOption);\r\n }\r\n }, [customStylesOption]);\r\n\r\n return (\r\n <>\r\n {props.label && props.label !== '' && (\r\n <Label className=\"mb-0\">{props.label}:</Label>\r\n )}\r\n <Select\r\n {...props}\r\n components={{ Input: CustomSelectInput }}\r\n className=\"react-select\"\r\n classNamePrefix=\"react-select\"\r\n name=\"form-field-name\"\r\n value={\r\n Object.getOwnPropertyDescriptor(selectedIoption, 'label')\r\n ? selectedIoption\r\n : ''\r\n }\r\n onChange={props.onChange}\r\n options={props.options}\r\n placeholder={\r\n Number(props.options.length) === 0\r\n ? SIN_DATOS\r\n : props.placeholder || SELECCIONE\r\n }\r\n isDisabled={props.disabled}\r\n styles={customStyles}\r\n />\r\n </>\r\n );\r\n};\r\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { components } from "react-select";
3
+ const CustomSelectInput = (props) => {
4
+ const customProps = { ...props };
5
+ delete customProps.autoCorrect;
6
+ delete customProps.autoCapitalize;
7
+ return /* @__PURE__ */ jsx(components.Input, { ...customProps });
8
+ };
9
+ export {
10
+ CustomSelectInput
11
+ };
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/select/custom-select-input/index.jsx"],"sourcesContent":["import { components } from 'react-select';\r\n\r\nexport const CustomSelectInput = (props) => {\r\n const customProps = { ...props };\r\n delete customProps.autoCorrect;\r\n delete customProps.autoCapitalize;\r\n return <components.Input {...customProps} />;\r\n};\r\n"],"names":[],"mappings":";;AAEO,MAAM,oBAAoB,CAAC,UAAU;AAC1C,QAAM,cAAc,EAAE,GAAG,MAAA;AACzB,SAAO,YAAY;AACnB,SAAO,YAAY;AACnB,SAAO,oBAAC,WAAW,OAAX,EAAkB,GAAG,YAAA,CAAa;AAC5C;"}
@@ -0,0 +1,9 @@
1
+ import { CustomSelect } from "./custom-select/index.js";
2
+ import { CustomMultiSelect } from "./multi-select/index.js";
3
+ import { CustomSelectInput } from "./custom-select-input/index.js";
4
+ export {
5
+ CustomMultiSelect,
6
+ CustomSelect,
7
+ CustomSelectInput
8
+ };
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -0,0 +1,29 @@
1
+ import { jsx, Fragment, jsxs } from "react/jsx-runtime";
2
+ import { toCamelCase } from "siam-utils";
3
+ import { ClickableBadge } from "./styled-component.js";
4
+ const BadgeLabelMultiSelect = ({
5
+ descripcionLabel = [],
6
+ onRemove = () => {
7
+ }
8
+ }) => {
9
+ const getBadgeColor = (value) => {
10
+ return value.color || "dark";
11
+ };
12
+ return /* @__PURE__ */ jsx(Fragment, { children: descripcionLabel.map((item) => /* @__PURE__ */ jsxs(
13
+ ClickableBadge,
14
+ {
15
+ color: getBadgeColor(item),
16
+ pill: true,
17
+ onClick: () => onRemove(item.value),
18
+ children: [
19
+ toCamelCase(item.label),
20
+ " ×"
21
+ ]
22
+ },
23
+ item.value
24
+ )) });
25
+ };
26
+ export {
27
+ BadgeLabelMultiSelect as default
28
+ };
29
+ //# sourceMappingURL=badge-label-multi-select.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge-label-multi-select.js","sources":["../../../src/select/multi-select/badge-label-multi-select.jsx"],"sourcesContent":["import { toCamelCase } from 'siam-utils';\r\nimport { ClickableBadge } from './styled-component';\r\n\r\nconst BadgeLabelMultiSelect = ({\r\n descripcionLabel = [],\r\n onRemove = () => {},\r\n}) => {\r\n const getBadgeColor = (value) => {\r\n return value.color || 'dark';\r\n };\r\n\r\n return (\r\n <>\r\n {descripcionLabel.map((item) => (\r\n <ClickableBadge\r\n key={item.value}\r\n color={getBadgeColor(item)}\r\n pill\r\n onClick={() => onRemove(item.value)}\r\n >\r\n {toCamelCase(item.label)} &times;\r\n </ClickableBadge>\r\n ))}\r\n </>\r\n );\r\n};\r\n\r\nexport default BadgeLabelMultiSelect;\r\n"],"names":[],"mappings":";;;AAGA,MAAM,wBAAwB,CAAC;AAAA,EAC7B,mBAAmB,CAAA;AAAA,EACnB,WAAW,MAAM;AAAA,EAAC;AACpB,MAAM;AACJ,QAAM,gBAAgB,CAAC,UAAU;AAC/B,WAAO,MAAM,SAAS;AAAA,EACxB;AAEA,SACE,oBAAA,UAAA,EACG,UAAA,iBAAiB,IAAI,CAAC,SACrB;AAAA,IAAC;AAAA,IAAA;AAAA,MAEC,OAAO,cAAc,IAAI;AAAA,MACzB,MAAI;AAAA,MACJ,SAAS,MAAM,SAAS,KAAK,KAAK;AAAA,MAEjC,UAAA;AAAA,QAAA,YAAY,KAAK,KAAK;AAAA,QAAE;AAAA,MAAA;AAAA,IAAA;AAAA,IALpB,KAAK;AAAA,EAAA,CAOb,GACH;AAEJ;"}
@@ -0,0 +1,37 @@
1
+ .multiselect-checkbox-option .custom-checkbox {
2
+ margin-bottom: 0;
3
+ }
4
+ .multiselect-checkbox-option .custom-checkbox input[type=checkbox] + label {
5
+ line-height: 1.2 !important;
6
+ display: flex;
7
+ align-items: center;
8
+ padding-left: 1.75rem;
9
+ }
10
+ .multiselect-checkbox-option .custom-checkbox input[type=checkbox] + label::before {
11
+ top: 50%;
12
+ transform: translateY(-50%);
13
+ }
14
+ .multiselect-checkbox-option .custom-checkbox input[type=checkbox]:checked + label::after {
15
+ top: 50%;
16
+ transform: translateY(-65%) rotate(45deg);
17
+ }
18
+
19
+ .custom-multiselect__control {
20
+ min-height: 38px;
21
+ border-color: #ccc;
22
+ }
23
+ .custom-multiselect__control:hover {
24
+ border-color: #900604;
25
+ }
26
+ .custom-multiselect__control--is-focused {
27
+ border-color: #900604;
28
+ box-shadow: 0 0 0 1px #900604;
29
+ }
30
+
31
+ .dropdown-heading-value {
32
+ color: green;
33
+ height: 2rem;
34
+ display: inline;
35
+ font-weight: bold;
36
+ padding: 0.4rem;
37
+ }
@@ -0,0 +1,171 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { useState, useRef, useEffect, useCallback } from "react";
3
+ import Select, { components } from "react-select";
4
+ import { Row, Col } from "reactstrap";
5
+ import { CustomInputCheckbox } from "../../custom-input/CustomInputCheckbox.js";
6
+ import BadgeLabelMultiSelect from "./badge-label-multi-select.js";
7
+ import { BadgeWrapper, ClickableBadge } from "./styled-component.js";
8
+ import "./index.css";
9
+ const SELECT_ALL_VALUE = "__select_all__";
10
+ const SELECT_ALL_OPTION = {
11
+ value: SELECT_ALL_VALUE,
12
+ label: "SELECCIONAR TODOS"
13
+ };
14
+ function CheckboxOption({
15
+ data,
16
+ isSelected,
17
+ isFocused,
18
+ innerRef,
19
+ selectProps
20
+ }) {
21
+ const isSelectAll = data.value === SELECT_ALL_VALUE;
22
+ const handleMouseDown = (e) => {
23
+ e.preventDefault();
24
+ e.stopPropagation();
25
+ if (isSelectAll) {
26
+ selectProps.onSelectAll?.();
27
+ } else {
28
+ selectProps.onOptionClick?.(data);
29
+ }
30
+ };
31
+ return /* @__PURE__ */ jsx(
32
+ "div",
33
+ {
34
+ ref: innerRef,
35
+ onMouseDown: handleMouseDown,
36
+ onTouchEnd: handleMouseDown,
37
+ className: "multiselect-checkbox-option",
38
+ style: {
39
+ backgroundColor: isFocused ? "#f8e1e1" : "white",
40
+ borderBottom: isSelectAll ? "1px solid #ccc" : "none",
41
+ padding: "6px 12px",
42
+ cursor: "pointer"
43
+ },
44
+ children: /* @__PURE__ */ jsx(
45
+ CustomInputCheckbox,
46
+ {
47
+ id: `opt_${data.value}`,
48
+ checked: isSelected,
49
+ onChange: () => {
50
+ },
51
+ label: /* @__PURE__ */ jsx("span", { style: { fontWeight: isSelectAll ? "bold" : "normal" }, children: data.label })
52
+ }
53
+ )
54
+ }
55
+ );
56
+ }
57
+ function CustomValueContainer({ children, getValue, ...props }) {
58
+ const selected = getValue();
59
+ const totalOptions = props.selectProps.options.length - 1;
60
+ const count = selected.length;
61
+ const isAll = count > 0 && count === totalOptions;
62
+ const text = isAll ? "Todos Seleccionados" : count > 0 ? selected.map((s) => s.label).join(", ") : null;
63
+ console.log("selected", selected, text);
64
+ return /* @__PURE__ */ jsxs(components.ValueContainer, { ...props, getValue, children: [
65
+ text ? /* @__PURE__ */ jsx("span", { style: { color: "#333" }, children: text }) : /* @__PURE__ */ jsx(
66
+ "span",
67
+ {
68
+ style: {
69
+ color: count ? "transparent" : "#999",
70
+ position: "absolute"
71
+ },
72
+ children: props.selectProps.placeholder
73
+ }
74
+ ),
75
+ children[children.length - 1]
76
+ ] });
77
+ }
78
+ const CUSTOM_COMPONENTS = {
79
+ Option: CheckboxOption,
80
+ ValueContainer: CustomValueContainer
81
+ };
82
+ const CustomMultiSelect = ({
83
+ lista = [],
84
+ onListaUpdate = () => {
85
+ },
86
+ value = [],
87
+ styles = {}
88
+ }) => {
89
+ const [selected, setSelected] = useState(value);
90
+ const isInternalChange = useRef(false);
91
+ useEffect(() => {
92
+ if (isInternalChange.current) {
93
+ isInternalChange.current = false;
94
+ return;
95
+ }
96
+ setSelected(value);
97
+ }, [JSON.stringify(value)]);
98
+ const update = useCallback(
99
+ (newSelected) => {
100
+ isInternalChange.current = true;
101
+ setSelected(newSelected);
102
+ onListaUpdate(newSelected);
103
+ },
104
+ [onListaUpdate]
105
+ );
106
+ const handleOptionClick = useCallback(
107
+ (data) => {
108
+ setSelected((prev) => {
109
+ const isAlreadySelected = prev.some((s) => s.value === data.value);
110
+ const next = isAlreadySelected ? prev.filter((s) => s.value !== data.value) : [...prev, data];
111
+ isInternalChange.current = true;
112
+ onListaUpdate(next);
113
+ return next;
114
+ });
115
+ },
116
+ [onListaUpdate]
117
+ );
118
+ const handleSelectAll = useCallback(() => {
119
+ setSelected((prev) => {
120
+ const next = prev.length === lista.length ? [] : [...lista];
121
+ isInternalChange.current = true;
122
+ onListaUpdate(next);
123
+ return next;
124
+ });
125
+ }, [lista, onListaUpdate]);
126
+ const handleRemoveBadge = useCallback(
127
+ (valueToRemove) => {
128
+ update(selected.filter((item) => item.value !== valueToRemove));
129
+ },
130
+ [selected, update]
131
+ );
132
+ const allSelected = lista.length > 0 && selected.length === lista.length;
133
+ const optionsWithSelectAll = [SELECT_ALL_OPTION, ...lista];
134
+ const isOptionSelected = useCallback(
135
+ (option) => option.value === SELECT_ALL_VALUE ? allSelected : selected.some((s) => s.value === option.value),
136
+ [allSelected, selected]
137
+ );
138
+ return /* @__PURE__ */ jsxs(Row, { className: "align-items-center", children: [
139
+ /* @__PURE__ */ jsx(Col, { xs: 6, style: styles, children: /* @__PURE__ */ jsx(
140
+ Select,
141
+ {
142
+ options: optionsWithSelectAll,
143
+ value: selected,
144
+ onChange: update,
145
+ isMulti: true,
146
+ placeholder: "Seleccione",
147
+ noOptionsMessage: () => "Sin opciones",
148
+ className: "custom-multiselect",
149
+ classNamePrefix: "custom-multiselect",
150
+ components: CUSTOM_COMPONENTS,
151
+ closeMenuOnSelect: false,
152
+ hideSelectedOptions: false,
153
+ isSearchable: false,
154
+ onSelectAll: handleSelectAll,
155
+ onOptionClick: handleOptionClick,
156
+ isOptionSelected
157
+ }
158
+ ) }),
159
+ /* @__PURE__ */ jsx(Col, { xs: 6, children: selected.length > 0 && /* @__PURE__ */ jsx(BadgeWrapper, { children: allSelected ? /* @__PURE__ */ jsx(ClickableBadge, { color: "info", pill: true, children: "Todos" }) : /* @__PURE__ */ jsx(
160
+ BadgeLabelMultiSelect,
161
+ {
162
+ descripcionLabel: selected,
163
+ onRemove: handleRemoveBadge
164
+ }
165
+ ) }) })
166
+ ] });
167
+ };
168
+ export {
169
+ CustomMultiSelect
170
+ };
171
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../src/select/multi-select/index.jsx"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\r\nimport Select, { components } from 'react-select';\r\nimport { Col, Row } from 'reactstrap';\r\nimport { CustomInputCheckbox } from '../../custom-input/CustomInputCheckbox';\r\nimport BadgeLabelMultiSelect from './badge-label-multi-select';\r\nimport { BadgeWrapper, ClickableBadge } from './styled-component';\r\nimport './index.scss';\r\n\r\nconst SELECT_ALL_VALUE = '__select_all__';\r\nconst SELECT_ALL_OPTION = {\r\n value: SELECT_ALL_VALUE,\r\n label: 'SELECCIONAR TODOS',\r\n};\r\n\r\nfunction CheckboxOption({\r\n data,\r\n isSelected,\r\n isFocused,\r\n innerRef,\r\n selectProps,\r\n}) {\r\n const isSelectAll = data.value === SELECT_ALL_VALUE;\r\n\r\n const handleMouseDown = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (isSelectAll) {\r\n selectProps.onSelectAll?.();\r\n } else {\r\n selectProps.onOptionClick?.(data);\r\n }\r\n };\r\n\r\n return (\r\n <div\r\n ref={innerRef}\r\n onMouseDown={handleMouseDown}\r\n onTouchEnd={handleMouseDown}\r\n className=\"multiselect-checkbox-option\"\r\n style={{\r\n backgroundColor: isFocused ? '#f8e1e1' : 'white',\r\n borderBottom: isSelectAll ? '1px solid #ccc' : 'none',\r\n padding: '6px 12px',\r\n cursor: 'pointer',\r\n }}\r\n >\r\n <CustomInputCheckbox\r\n id={`opt_${data.value}`}\r\n checked={isSelected}\r\n onChange={() => {}}\r\n label={\r\n <span style={{ fontWeight: isSelectAll ? 'bold' : 'normal' }}>\r\n {data.label}\r\n </span>\r\n }\r\n />\r\n </div>\r\n );\r\n}\r\n\r\nfunction CustomValueContainer({ children, getValue, ...props }) {\r\n const selected = getValue();\r\n const totalOptions = props.selectProps.options.length - 1;\r\n const count = selected.length;\r\n const isAll = count > 0 && count === totalOptions;\r\n\r\n const text = isAll\r\n ? 'Todos Seleccionados'\r\n : count > 0\r\n ? selected.map((s) => s.label).join(', ')\r\n : null;\r\n console.log('selected', selected, text);\r\n\r\n return (\r\n <components.ValueContainer {...props} getValue={getValue}>\r\n {text ? (\r\n <span style={{ color: '#333' }}>{text}</span>\r\n ) : (\r\n <span\r\n style={{\r\n color: count ? 'transparent' : '#999',\r\n position: 'absolute',\r\n }}\r\n >\r\n {props.selectProps.placeholder}\r\n </span>\r\n )}\r\n {children[children.length - 1]}\r\n </components.ValueContainer>\r\n );\r\n}\r\n\r\nconst CUSTOM_COMPONENTS = {\r\n Option: CheckboxOption,\r\n ValueContainer: CustomValueContainer,\r\n};\r\n\r\nexport const CustomMultiSelect = ({\r\n lista = [],\r\n onListaUpdate = () => {},\r\n value = [],\r\n styles = {},\r\n}) => {\r\n const [selected, setSelected] = useState(value);\r\n const isInternalChange = useRef(false);\r\n\r\n useEffect(() => {\r\n if (isInternalChange.current) {\r\n isInternalChange.current = false;\r\n return;\r\n }\r\n setSelected(value);\r\n }, [JSON.stringify(value)]); // eslint-disable-line react-hooks/exhaustive-deps\r\n\r\n const update = useCallback(\r\n (newSelected) => {\r\n isInternalChange.current = true;\r\n setSelected(newSelected);\r\n onListaUpdate(newSelected);\r\n },\r\n [onListaUpdate]\r\n );\r\n\r\n const handleOptionClick = useCallback(\r\n (data) => {\r\n setSelected((prev) => {\r\n const isAlreadySelected = prev.some((s) => s.value === data.value);\r\n const next = isAlreadySelected\r\n ? prev.filter((s) => s.value !== data.value)\r\n : [...prev, data];\r\n isInternalChange.current = true;\r\n onListaUpdate(next);\r\n return next;\r\n });\r\n },\r\n [onListaUpdate]\r\n );\r\n\r\n const handleSelectAll = useCallback(() => {\r\n setSelected((prev) => {\r\n const next = prev.length === lista.length ? [] : [...lista];\r\n isInternalChange.current = true;\r\n onListaUpdate(next);\r\n return next;\r\n });\r\n }, [lista, onListaUpdate]);\r\n\r\n const handleRemoveBadge = useCallback(\r\n (valueToRemove) => {\r\n update(selected.filter((item) => item.value !== valueToRemove));\r\n },\r\n [selected, update]\r\n );\r\n\r\n const allSelected = lista.length > 0 && selected.length === lista.length;\r\n const optionsWithSelectAll = [SELECT_ALL_OPTION, ...lista];\r\n\r\n const isOptionSelected = useCallback(\r\n (option) =>\r\n option.value === SELECT_ALL_VALUE\r\n ? allSelected\r\n : selected.some((s) => s.value === option.value),\r\n [allSelected, selected]\r\n );\r\n\r\n return (\r\n <Row className=\"align-items-center\">\r\n <Col xs={6} style={styles}>\r\n <Select\r\n options={optionsWithSelectAll}\r\n value={selected}\r\n onChange={update}\r\n isMulti\r\n placeholder=\"Seleccione\"\r\n noOptionsMessage={() => 'Sin opciones'}\r\n className=\"custom-multiselect\"\r\n classNamePrefix=\"custom-multiselect\"\r\n components={CUSTOM_COMPONENTS}\r\n closeMenuOnSelect={false}\r\n hideSelectedOptions={false}\r\n isSearchable={false}\r\n onSelectAll={handleSelectAll}\r\n onOptionClick={handleOptionClick}\r\n isOptionSelected={isOptionSelected}\r\n />\r\n </Col>\r\n <Col xs={6}>\r\n {selected.length > 0 && (\r\n <BadgeWrapper>\r\n {allSelected ? (\r\n <ClickableBadge color=\"info\" pill>\r\n Todos\r\n </ClickableBadge>\r\n ) : (\r\n <BadgeLabelMultiSelect\r\n descripcionLabel={selected}\r\n onRemove={handleRemoveBadge}\r\n />\r\n )}\r\n </BadgeWrapper>\r\n )}\r\n </Col>\r\n </Row>\r\n );\r\n};\r\n\r\nexport default CustomMultiSelect;\r\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { Badge } from "reactstrap";
2
+ import styled from "styled-components";
3
+ const ClickableBadge = styled(Badge)`
4
+ cursor: pointer;
5
+ width: fit-content;
6
+ white-space: nowrap;
7
+ `;
8
+ const BadgeWrapper = styled.div`
9
+ display: inline-flex;
10
+ flex-wrap: wrap;
11
+ gap: 10px;
12
+ padding: 0.5rem;
13
+ border-radius: 0.5rem;
14
+ background-color: #f1f1f1;
15
+ border: 1px solid #ccc;
16
+ max-width: 100%;
17
+ overflow-x: auto;
18
+ `;
19
+ export {
20
+ BadgeWrapper,
21
+ ClickableBadge
22
+ };
23
+ //# sourceMappingURL=styled-component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styled-component.js","sources":["../../../src/select/multi-select/styled-component.js"],"sourcesContent":["import { Badge } from 'reactstrap';\r\nimport styled from 'styled-components';\r\n\r\nexport const ClickableBadge = styled(Badge)`\r\n cursor: pointer;\r\n width: fit-content;\r\n white-space: nowrap;\r\n`;\r\n\r\nexport const BadgeWrapper = styled.div`\r\n display: inline-flex;\r\n flex-wrap: wrap;\r\n gap: 10px;\r\n padding: 0.5rem;\r\n border-radius: 0.5rem;\r\n background-color: #f1f1f1;\r\n border: 1px solid #ccc;\r\n max-width: 100%;\r\n overflow-x: auto;\r\n`;\r\n"],"names":[],"mappings":";;AAGY,MAAC,iBAAiB,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAM9B,MAAC,eAAe,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;"}