groovinads-ui 1.2.75 → 1.9.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 (90) hide show
  1. package/README.md +628 -236
  2. package/dist/index.es.js +2 -15
  3. package/dist/index.js +2 -15
  4. package/index.d.ts +364 -0
  5. package/package.json +87 -79
  6. package/.babelrc +0 -3
  7. package/.eslintignore +0 -2
  8. package/.eslintrc.cjs +0 -32
  9. package/.prettierignore +0 -9
  10. package/.prettierrc +0 -7
  11. package/.storybook/main.js +0 -19
  12. package/.storybook/preview-head.html +0 -6
  13. package/.storybook/preview.js +0 -13
  14. package/.yarn/releases/yarn-4.1.1.cjs +0 -893
  15. package/.yarnrc.yml +0 -3
  16. package/rollup.config.mjs +0 -42
  17. package/src/components/Button/Button.jsx +0 -78
  18. package/src/components/Button/index.js +0 -3
  19. package/src/components/Dropdowns/DropdownComponent.jsx +0 -135
  20. package/src/components/Dropdowns/DropdownFilter.jsx +0 -304
  21. package/src/components/Dropdowns/DropdownMultiSelect.jsx +0 -304
  22. package/src/components/Dropdowns/DropdownSimpleDatePicker.jsx +0 -175
  23. package/src/components/Dropdowns/DropdownsDatePicker/DropdownDatePicker.jsx +0 -313
  24. package/src/components/Dropdowns/DropdownsDatePicker/PeriodAndDetailDropdowns.tsx +0 -351
  25. package/src/components/Dropdowns/DropdownsDatePicker/index.js +0 -3
  26. package/src/components/Dropdowns/index.js +0 -7
  27. package/src/components/Inputs/Checkbox.jsx +0 -55
  28. package/src/components/Inputs/Input.jsx +0 -155
  29. package/src/components/Inputs/InputChip.jsx +0 -168
  30. package/src/components/Inputs/InputEmail.jsx +0 -175
  31. package/src/components/Inputs/Radio.jsx +0 -57
  32. package/src/components/Inputs/Switch.jsx +0 -70
  33. package/src/components/Inputs/Textarea.jsx +0 -68
  34. package/src/components/Inputs/index.js +0 -9
  35. package/src/components/Labels/Alert.jsx +0 -62
  36. package/src/components/Labels/Icon.jsx +0 -76
  37. package/src/components/Labels/LoginSource.jsx +0 -19
  38. package/src/components/Labels/PillComponent.jsx +0 -47
  39. package/src/components/Labels/Spinner.jsx +0 -35
  40. package/src/components/Labels/StatusIcon.jsx +0 -66
  41. package/src/components/Labels/index.js +0 -8
  42. package/src/components/Navigation/Dropdowns/DeckDropdown.jsx +0 -210
  43. package/src/components/Navigation/Dropdowns/DropdownClient.jsx +0 -171
  44. package/src/components/Navigation/Dropdowns/UserDropdown.jsx +0 -69
  45. package/src/components/Navigation/Dropdowns/index.js +0 -5
  46. package/src/components/Navigation/Navbar.jsx +0 -81
  47. package/src/components/Navigation/Sidebar.jsx +0 -201
  48. package/src/components/Navigation/Stepper.jsx +0 -22
  49. package/src/components/Navigation/Tabnav.jsx +0 -73
  50. package/src/components/Navigation/index.js +0 -6
  51. package/src/components/Toasts/Toast/ToastCardComponent.jsx +0 -47
  52. package/src/components/Toasts/ToastComponent.jsx +0 -45
  53. package/src/components/Toasts/ToastProgress.jsx +0 -118
  54. package/src/components/Toasts/index.js +0 -4
  55. package/src/components/index.js +0 -50
  56. package/src/hooks/index.js +0 -4
  57. package/src/hooks/useGetBaseDomain.jsx +0 -9
  58. package/src/hooks/useTextFormatter.jsx +0 -48
  59. package/src/index.js +0 -51
  60. package/src/services/components.services.js +0 -29
  61. package/src/services/helpers.js +0 -32
  62. package/src/services/index.jsx +0 -10
  63. package/src/services/url.path.js +0 -29
  64. package/src/stories/Alert.stories.jsx +0 -11
  65. package/src/stories/Button.stories.jsx +0 -20
  66. package/src/stories/Checkbox.stories.jsx +0 -17
  67. package/src/stories/DropdownComponent.stories.jsx +0 -89
  68. package/src/stories/DropdownDatePicker.stories.jsx +0 -69
  69. package/src/stories/DropdownFilter.stories.jsx +0 -60
  70. package/src/stories/DropdownMultiSelect.stories.jsx +0 -72
  71. package/src/stories/DropdownSimpleDatePicker.stories.jsx +0 -64
  72. package/src/stories/Icon.stories.jsx +0 -11
  73. package/src/stories/Input.stories.jsx +0 -20
  74. package/src/stories/InputChip.stories.jsx +0 -44
  75. package/src/stories/InputEmail.stories.jsx +0 -27
  76. package/src/stories/Layout.stories.jsx +0 -73
  77. package/src/stories/LoginSource.stories.jsx +0 -11
  78. package/src/stories/Navbar.stories.jsx +0 -24
  79. package/src/stories/PillComponent.stories.jsx +0 -22
  80. package/src/stories/Radio.stories.jsx +0 -18
  81. package/src/stories/Sidebar.stories.jsx +0 -169
  82. package/src/stories/Spinner.stories.jsx +0 -11
  83. package/src/stories/StatusIcon.stories.jsx +0 -11
  84. package/src/stories/Stepper.stories.jsx +0 -16
  85. package/src/stories/Switch.stories.jsx +0 -17
  86. package/src/stories/Tabnav.stories.jsx +0 -55
  87. package/src/stories/Textarea.stories.jsx +0 -20
  88. package/src/stories/ToastComponent.stories.jsx +0 -62
  89. package/src/stories/ToastProgress.stories.jsx +0 -11
  90. package/version.js +0 -8
@@ -1,304 +0,0 @@
1
- import React, { useCallback, useEffect, useRef, useState } from 'react';
2
- import PropTypes from 'prop-types';
3
-
4
- // BOOTSTRAP
5
- import Dropdown from 'react-bootstrap/Dropdown';
6
-
7
- // COMPONENTS
8
- import { Icon, PillComponent } from '../Labels';
9
- import { Checkbox, Input } from '../Inputs';
10
-
11
- // HOOKS
12
- import { useTextFormatter } from '../../hooks/index';
13
-
14
- const DropdownMultiSelect = ({
15
- autoClose = false,
16
- className = '',
17
- drop,
18
- inputLabel = '',
19
- object = false,
20
- nameKey,
21
- customKey,
22
- idKey,
23
- searchLabel = 'Search',
24
- onToggle,
25
- overflow = false,
26
- valuesSelected = [],
27
- setValuesSelected,
28
- values = [],
29
- show,
30
- setShow,
31
- idInPill = false,
32
- showStatus = '',
33
- focus = false,
34
- buttonVariant = 'input',
35
- nowrap = false,
36
- hasId = true,
37
- validate = false,
38
- requiredText = 'required',
39
- errorRequired = false,
40
- setErrorRequiered,
41
- }) => {
42
- // STATES
43
- const [query, setQuery] = useState('');
44
- const [innerShow, setInnerShow] = useState(!!show);
45
-
46
- const dropdownRef = useRef(null);
47
- const toggleRef = useRef(null);
48
- const menuRef = useRef(null);
49
-
50
- const { highlightText } = useTextFormatter();
51
-
52
- // FUNCTIONS
53
- const handleCheckbox = (status, value) => {
54
- const i = values.findIndex(
55
- (item) =>
56
- (object ? item[idKey] : item) === (object ? value[idKey] : value),
57
- );
58
- if (status) {
59
- setValuesSelected((prevValues) => [...prevValues, values[i]]);
60
- } else {
61
- setValuesSelected((prevValues) =>
62
- prevValues.filter(
63
- (item) =>
64
- (object ? item[idKey] : item) !==
65
- (object ? values[i][idKey] : values[i]),
66
- ),
67
- );
68
- }
69
- };
70
-
71
- const handlePill = (index) => {
72
- setValuesSelected((prevValues) =>
73
- prevValues.filter((item, i) => i !== index),
74
- );
75
- };
76
-
77
- const valuesFromSearch = () =>
78
- values.filter(
79
- (item) =>
80
- (object ? `${item[idKey]} ${item[nameKey]} ${item[customKey]}` : item)
81
- .toLowerCase()
82
- .includes(query.toLowerCase()) &&
83
- (showStatus ? parseInt(item.status) === parseInt(showStatus) : true),
84
- );
85
-
86
- const handleClickOutside = useCallback((event) => {
87
- if (
88
- dropdownRef?.current &&
89
- !dropdownRef?.current.contains(event?.target) &&
90
- (autoClose === true || autoClose === 'outside')
91
- ) {
92
- setInnerShow(false);
93
- setShow(false);
94
- }
95
- }, []);
96
-
97
- // VALIDATION REQUIRED
98
- const validateRequired = () => {
99
- if (!valuesSelected.length) {
100
- setTimeout(() => {
101
- setErrorRequiered((prev) => !prev);
102
- }, 2000);
103
- }
104
- };
105
-
106
- useEffect(() => {
107
- setInnerShow(show);
108
- }, [show]);
109
-
110
- useEffect(() => {
111
- document.addEventListener('click', handleClickOutside);
112
- return () => {
113
- document.removeEventListener('click', handleClickOutside);
114
- };
115
- }, []);
116
-
117
- useEffect(() => {
118
- if (validate && errorRequired) validateRequired();
119
- }, [validate, errorRequired]);
120
-
121
- useEffect(() => {
122
- if (overflow && menuRef.current && toggleRef.current) {
123
- menuRef.current.style.width = `${toggleRef.current.offsetWidth}px`;
124
- }
125
- }, [innerShow, overflow]);
126
-
127
- useEffect(() => {
128
- function updateMenuWidth() {
129
- if (overflow && menuRef.current && toggleRef.current) {
130
- const width = toggleRef.current.offsetWidth;
131
- menuRef.current.style.width = `${width}px`;
132
- menuRef.current.style.minWidth = `${width}px`;
133
- menuRef.current.style.maxWidth = `${width}px`;
134
- }
135
- }
136
-
137
- if (innerShow) {
138
- updateMenuWidth();
139
- window.addEventListener('resize', updateMenuWidth);
140
- }
141
-
142
- return () => {
143
- window.removeEventListener('resize', updateMenuWidth);
144
- };
145
- }, [innerShow, overflow]);
146
-
147
- return (
148
- <Dropdown
149
- className={className}
150
- autoClose={autoClose}
151
- show={innerShow}
152
- ref={dropdownRef}
153
- onToggle={onToggle}
154
- drop={drop}
155
- data-error={requiredText}
156
- >
157
- <Dropdown.Toggle
158
- as={'div'}
159
- ref={toggleRef}
160
- className={`btn btn-${buttonVariant} ${nowrap ? 'nowrap' : ''}${errorRequired && valuesSelected.length === 0 ? 'not-validated' : ''}`}
161
- onClick={(e) => {
162
- e.stopPropagation(); // Detiene la propagación del clic
163
- setInnerShow((prevShow) => !prevShow); // Alterna el estado interno del dropdown
164
- // setShow((prevShow) => !prevShow); // Alterna el estado del dropdown en el estado externo también
165
- }}
166
- >
167
- {valuesSelected.length > 0 && buttonVariant === 'input' && (
168
- <div className='wrapper'>
169
- {valuesSelected.map((value, index) => {
170
- return (
171
- <PillComponent
172
- color='neutral'
173
- closeButton={true}
174
- onClick={(event) => {
175
- event.stopPropagation();
176
- handlePill(index);
177
- }}
178
- key={'Dropdown.PillComponent' + index}
179
- >
180
- {customKey
181
- ? `${value[nameKey]} - ${value[customKey]}`
182
- : idInPill
183
- ? `#${value[idKey]}`
184
- : value[nameKey] || value}
185
-
186
- {/* {idInPill ? `#${value[idKey]} - ` : ''}
187
- <span>{object ? value[nameKey] : value}</span> */}
188
- </PillComponent>
189
- );
190
- })}
191
- </div>
192
- )}
193
- <span className='label'>{inputLabel}</span>
194
- <Icon
195
- style={'solid'}
196
- iconName={'angle-down'}
197
- scale={1}
198
- className='caret'
199
- />
200
- </Dropdown.Toggle>
201
-
202
- <Dropdown.Menu
203
- className='w-100'
204
- ref={menuRef}
205
- popperConfig={
206
- overflow
207
- ? {
208
- strategy: 'fixed',
209
- onFirstUpdate: () =>
210
- window.dispatchEvent(new CustomEvent('scroll')),
211
- }
212
- : undefined
213
- }
214
- >
215
- <Dropdown.Item onClick={(e) => e.stopPropagation()} as={'div'}>
216
- <Input
217
- label={searchLabel}
218
- value={query}
219
- onChange={({ target }) => setQuery(target.value)}
220
- icon={'magnifying-glass'}
221
- size={'xs'}
222
- className={'w-100'}
223
- focus={focus}
224
- />
225
- </Dropdown.Item>
226
-
227
- <Dropdown.Item onClick={(e) => e.stopPropagation()} as={'div'}>
228
- {valuesFromSearch().length > 0 ? (
229
- <ul className='dropdown-checks'>
230
- {/* List values */}
231
- {valuesFromSearch().map((value, index) => {
232
- return (
233
- <Checkbox
234
- setStatus={(status) => {
235
- handleCheckbox(status, value);
236
- }}
237
- status={
238
- object
239
- ? valuesSelected.some(
240
- (item) => item[idKey] === value[idKey],
241
- )
242
- : valuesSelected.includes(value)
243
- }
244
- key={'Dropdown.Input.Checkbox' + index}
245
- >
246
- {highlightText(
247
- object
248
- ? customKey
249
- ? `${value[nameKey]} - ${value[customKey]}`
250
- : `${hasId ? `#${value[idKey]} - ` : ''}${value[nameKey]}`
251
- : value[nameKey] || value,
252
- query,
253
- )}
254
- </Checkbox>
255
- );
256
- })}
257
- </ul>
258
- ) : (
259
- <div className='not-matched'>
260
- <p>No match found</p>
261
- </div>
262
- )}
263
- </Dropdown.Item>
264
- </Dropdown.Menu>
265
- </Dropdown>
266
- );
267
- };
268
-
269
- DropdownMultiSelect.propTypes = {
270
- inputLabel: PropTypes.string,
271
- searchLabel: PropTypes.string,
272
- autoClose: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),
273
- className: PropTypes.string,
274
- drop: PropTypes.oneOf(['up', 'down']),
275
- onToggle: PropTypes.func,
276
- overflow: PropTypes.bool,
277
- valuesSelected: PropTypes.array,
278
- setValuesSelected: PropTypes.func,
279
- values: PropTypes.array,
280
- show: PropTypes.bool,
281
- setShow: PropTypes.func,
282
- object: PropTypes.bool,
283
- nameKey: PropTypes.string,
284
- customKey: PropTypes.string,
285
- idKey: PropTypes.string,
286
- idInPill: PropTypes.bool,
287
- showStatus: PropTypes.string,
288
- focus: PropTypes.bool,
289
- buttonVariant: PropTypes.oneOf([
290
- 'input',
291
- 'primary',
292
- 'secondary',
293
- 'terciary',
294
- 'outline',
295
- ]),
296
- nowrap: PropTypes.bool,
297
- hasId: PropTypes.bool,
298
- requiredText: PropTypes.string,
299
- validate: PropTypes.bool,
300
- errorRequired: PropTypes.bool,
301
- setErrorRequiered: PropTypes.func,
302
- };
303
-
304
- export default DropdownMultiSelect;
@@ -1,175 +0,0 @@
1
- import PropTypes from 'prop-types';
2
- import React, { useEffect, useRef, useState } from 'react';
3
- import { format } from 'date-fns';
4
-
5
- // COMPONENTS
6
- import { Dropdown } from 'react-bootstrap';
7
- import { Icon } from '../Labels';
8
- import { Button } from '../Button';
9
- import DatePicker from 'react-datepicker';
10
-
11
- export default function DropdownSimpleDatePicker({
12
- className = '',
13
- show,
14
- setShow,
15
- onToggle,
16
- inputLabel = 'period',
17
- overflow = false,
18
- date,
19
- setDate,
20
- handleClear,
21
- minDate,
22
- maxDate,
23
- requiredText,
24
- showError,
25
- }) {
26
- const [internalShow, setInternalShow] = useState(!!show);
27
- const dropdownRef = useRef(null);
28
-
29
- const formatDate = (date) => {
30
- if (!date) return null;
31
-
32
- if (date instanceof Date) return date;
33
-
34
- if (typeof date === 'string' && /^\d{4}-\d{2}-\d{2}$/.test(date)) {
35
- return new Date(`${date}T00:00:00`);
36
- }
37
-
38
- return new Date(date);
39
- };
40
-
41
- const internalToggle = () => {
42
- const newShowState = !internalShow;
43
- setInternalShow(newShowState);
44
-
45
- if (newShowState)
46
- window.dispatchEvent(
47
- new CustomEvent('dropdownToggle', { detail: inputLabel }),
48
- );
49
-
50
- try {
51
- onToggle();
52
- } catch (error) {}
53
- };
54
-
55
- const closeDropdown = () => {
56
- setInternalShow(false);
57
- try {
58
- setShow(false);
59
- } catch (error) {}
60
- };
61
-
62
- const updateDateFilters = (newDate) => {
63
- setDate(newDate?.toString());
64
- setTimeout(() => {
65
- closeDropdown();
66
- }, 200);
67
- };
68
-
69
- const clearDate = () => {
70
- closeDropdown();
71
-
72
- if (handleClear) {
73
- handleClear();
74
- return;
75
- }
76
- setDate(null);
77
- };
78
-
79
- useEffect(() => {
80
- const handleClickOutside = (event) => {
81
- if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
82
- closeDropdown();
83
- }
84
- };
85
-
86
- document.addEventListener('click', handleClickOutside);
87
- return () => {
88
- document.removeEventListener('click', handleClickOutside);
89
- };
90
- }, []);
91
-
92
- useEffect(() => {
93
- setInternalShow(!!show);
94
- }, [show]);
95
-
96
- return (
97
- <Dropdown
98
- show={internalShow}
99
- className={className}
100
- ref={dropdownRef}
101
- data-error={requiredText}
102
- >
103
- <Dropdown.Toggle
104
- variant='toggle-filter'
105
- onClick={internalToggle}
106
- className={`btn-input w-100 ${showError ? 'not-validated' : ''}`}
107
- >
108
- <span className='dropdown-label'>{inputLabel}</span>
109
- <span>{date ? format(new Date(date), 'EEE MMM dd yyyy') : ''}</span>
110
-
111
- <Icon iconName='angle-down' className={'caret'} />
112
- </Dropdown.Toggle>
113
-
114
- <Dropdown.Menu
115
- popperConfig={
116
- overflow
117
- ? {
118
- strategy: 'fixed',
119
- onFirstUpdate: () =>
120
- window.dispatchEvent(new CustomEvent('scroll')),
121
- }
122
- : undefined
123
- }
124
- >
125
- <Dropdown.Item as={'div'}>
126
- <DatePicker
127
- className='form-control form-search'
128
- selected={date || ''}
129
- onChange={updateDateFilters}
130
- startDate={date || ''}
131
- monthsShown={1}
132
- inline
133
- minDate={formatDate(minDate)}
134
- maxDate={formatDate(maxDate)}
135
- dayClassName={(date) =>
136
- (minDate && date < minDate) ||
137
- (maxDate && date > maxDate && date !== formatDate(maxDate))
138
- ? 'react-datepicker__day--disabled'
139
- : ''
140
- }
141
- />
142
-
143
- <div className='px-2 w-100'>
144
- <Button
145
- onClick={clearDate}
146
- icon='calendar-circle-minus'
147
- size='xs'
148
- variant='terciary'
149
- className='w-100'
150
- >
151
- Clear
152
- </Button>
153
- </div>
154
- </Dropdown.Item>
155
- </Dropdown.Menu>
156
- </Dropdown>
157
- );
158
- }
159
-
160
- DropdownSimpleDatePicker.propTypes = {
161
- className: PropTypes.string,
162
- show: PropTypes.bool,
163
- setShow: PropTypes.func,
164
- onToggle: PropTypes.func,
165
- inputLabel: PropTypes.string,
166
- overflow: PropTypes.bool,
167
- date: PropTypes.string,
168
- setDate: PropTypes.func,
169
- clearDate: PropTypes.func,
170
- handleClear: PropTypes.func,
171
- minDate: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(Date)]),
172
- maxDate: PropTypes.oneOfType([PropTypes.string, PropTypes.instanceOf(Date)]),
173
- requiredText: PropTypes.string,
174
- showError: PropTypes.bool,
175
- };