groovinads-ui 1.2.75 → 1.9.1

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
package/.yarnrc.yml DELETED
@@ -1,3 +0,0 @@
1
- nodeLinker: node-modules
2
-
3
- yarnPath: .yarn/releases/yarn-4.1.1.cjs
package/rollup.config.mjs DELETED
@@ -1,42 +0,0 @@
1
- import babel from 'rollup-plugin-babel';
2
- import resolve from '@rollup/plugin-node-resolve';
3
- import external from 'rollup-plugin-peer-deps-external';
4
- import { terser } from 'rollup-plugin-terser';
5
- import postcss from 'rollup-plugin-postcss';
6
- import commonjs from 'rollup-plugin-commonjs';
7
- import json from '@rollup/plugin-json';
8
-
9
- export default [
10
- {
11
- input: './src/index.js',
12
- output: [
13
- {
14
- file: 'dist/index.js',
15
- format: 'cjs',
16
- },
17
- {
18
- file: 'dist/index.es.js',
19
- format: 'es',
20
- exports: 'named',
21
- }
22
- ],
23
- plugins: [
24
- json(),
25
- commonjs({
26
- include: 'node_modules/**', // incluye todos los módulos de node_modules
27
- }),
28
- postcss({
29
- plugins: [],
30
- minimize: true,
31
- }),
32
- babel({
33
- exclude: 'node_modules/**',
34
- presets: ['@babel/preset-react']
35
- }),
36
- external(),
37
- // typescript(), // Añade esto para procesar archivos TypeScript
38
- resolve({extensions: ['.mjs', '.js', '.jsx', '.ts', '.tsx', '.json']}),
39
- terser(),
40
- ]
41
- }
42
- ];
@@ -1,78 +0,0 @@
1
- import React from 'react';
2
- import PropTypes from 'prop-types';
3
-
4
- // COMPONENTS
5
- import { Icon, Spinner } from '../Labels'
6
-
7
- const Button = ({
8
- variant = 'primary',
9
- size = 'md',
10
- onClick,
11
- children,
12
- icon,
13
- iconPosition = 'start',
14
- className = '',
15
- style = 'default',
16
- processing = false,
17
- disabled = false,
18
- }) => {
19
- // Icon
20
- const content = processing ? (
21
- <>
22
- <Spinner scale={1} />
23
- {children && <span>{children}…</span>}
24
- </>
25
- ) : icon ? (
26
- iconPosition === 'end' ? (
27
- <>
28
- {children && <span>{children}</span>}
29
- <Icon
30
- style={'solid'}
31
- iconName={icon}
32
- scale={1}
33
- />
34
- </>
35
- ) : (
36
- <>
37
- <Icon
38
- style={'solid'}
39
- iconName={icon}
40
- scale={1}
41
- />
42
- {children && <span>{children}</span>}
43
- </>
44
- )
45
- ) : (
46
- children && <span>{children}</span>
47
- );
48
-
49
- return (
50
- <button
51
- className={
52
- `btn ${className}
53
- btn-${variant}
54
- btn-${style}
55
- btn-${size}
56
- ${processing ? 'btn-processing' : ''}
57
- ${disabled ? 'disabled' : ''}`
58
- }
59
- onClick={onClick}
60
- >
61
- {content}
62
- </button>
63
- );
64
- };
65
-
66
- Button.propTypes = {
67
- variant: PropTypes.oneOf(['primary', 'secondary', 'terciary', 'outline']),
68
- size: PropTypes.oneOf(['xs', 'md', 'lg']),
69
- onClick: PropTypes.func,
70
- children: PropTypes.node,
71
- icon: PropTypes.string,
72
- iconPosition: PropTypes.oneOf(['start', 'end']),
73
- className: PropTypes.string,
74
- style: PropTypes.oneOf(['default', 'success', 'danger', 'warning', 'link']),
75
- processing: PropTypes.bool,
76
- };
77
-
78
- export default Button;
@@ -1,3 +0,0 @@
1
- import Button from "./Button";
2
-
3
- export { Button };
@@ -1,135 +0,0 @@
1
- import React, { useEffect, useState, useRef } from 'react';
2
- import PropTypes from 'prop-types';
3
- import Dropdown from 'react-bootstrap/Dropdown';
4
-
5
- const DropdownComponent = ({
6
- autoClose = false,
7
- children,
8
- className = '',
9
- drop,
10
- fullWidth = false,
11
- onToggle,
12
- overflow = false,
13
- align = 'start',
14
- show,
15
- setShow,
16
- }) => {
17
- const [innerShow, setInnerShow] = useState(!!show);
18
- const dropdownRef = useRef(null);
19
- const menuRef = useRef(null);
20
-
21
- const [Toggle, Menu] = children;
22
-
23
- const onAutoclose = () => {
24
- // Cierra el dropdown solo si autoClose es 'true' o 'inside'
25
- if (autoClose === true || autoClose === 'inside') {
26
- setInnerShow(false);
27
- if (setShow) setShow(false);
28
- }
29
- };
30
-
31
- const modifiedToggle = React.cloneElement(Toggle, {
32
- align,
33
- onClick: (e) => {
34
- // Se eliminan e.stopPropagation() y e.preventDefault()
35
- // para que el evento se maneje correctamente
36
- Toggle.props && Toggle.props.onClick
37
- ? Toggle.props.onClick()
38
- : setInnerShow(!innerShow);
39
- },
40
- });
41
-
42
- const modifiedMenu = React.cloneElement(Menu, {
43
- as: 'ul',
44
- align,
45
- className: fullWidth ? 'w-100' : '',
46
- ref: menuRef,
47
- popperConfig: overflow
48
- ? {
49
- strategy: 'fixed',
50
- onFirstUpdate: () => window.dispatchEvent(new CustomEvent('scroll')),
51
- }
52
- : undefined,
53
- children: Menu.props.children.length
54
- ? Menu.props.children.map((child, i) =>
55
- React.cloneElement(child, {
56
- as: 'li',
57
- key: `${child}${i}`,
58
- onClick: () => {
59
- if (child.props.onClick) {
60
- child.props.onClick();
61
- }
62
- onAutoclose();
63
- },
64
- }),
65
- )
66
- : Menu.props.children.map((child, i) =>
67
- React.cloneElement(Menu.props.children, {
68
- as: 'li',
69
- key: `${child}${i}`,
70
- onClick: () => {
71
- if (
72
- Menu.props.children.props &&
73
- Menu.props.children.props.onClick
74
- ) {
75
- Menu.props.children.props.onClick();
76
- }
77
- onAutoclose();
78
- },
79
- }),
80
- ),
81
- });
82
-
83
- useEffect(() => {
84
- setInnerShow(show);
85
- }, [show]);
86
-
87
- useEffect(() => {
88
- const handleClickOutside = (event) => {
89
- if (
90
- dropdownRef.current &&
91
- !dropdownRef.current.contains(event.target) &&
92
- (autoClose === true || autoClose === 'outside')
93
- ) {
94
- setInnerShow(false);
95
- if (setShow) setShow(false);
96
- }
97
- };
98
- document.addEventListener('click', handleClickOutside);
99
- return () => {
100
- document.removeEventListener('click', handleClickOutside);
101
- };
102
- }, [autoClose]);
103
-
104
- return (
105
- <Dropdown
106
- autoClose={autoClose}
107
- show={innerShow}
108
- onToggle={onToggle}
109
- className={className}
110
- align={align}
111
- drop={drop}
112
- ref={dropdownRef}
113
- >
114
- {modifiedToggle}
115
- {modifiedMenu}
116
- </Dropdown>
117
- );
118
- };
119
-
120
- DropdownComponent.propTypes = {
121
- children: PropTypes.node.isRequired,
122
- autoClose: PropTypes.oneOfType([
123
- PropTypes.bool,
124
- PropTypes.oneOf(['inside', 'outside']),
125
- ]),
126
- show: PropTypes.bool,
127
- onToggle: PropTypes.func,
128
- className: PropTypes.string,
129
- overflow: PropTypes.bool,
130
- align: PropTypes.oneOf(['start', 'end']),
131
- fullWidth: PropTypes.bool,
132
- drop: PropTypes.oneOf(['up', 'down', 'start', 'end']),
133
- };
134
-
135
- export default DropdownComponent;
@@ -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 Button from '../Button/Button';
9
- import { Icon, PillComponent } from '../Labels';
10
- import { Checkbox, Input } from '../Inputs';
11
-
12
- const DropdownFilter = ({
13
- title,
14
- valuesSelected = [],
15
- setValuesSelected,
16
- values = [],
17
- menuType = 'simple',
18
- locked = false,
19
- onRemoveFilter,
20
- show,
21
- setShow,
22
- onToggle,
23
- overflow = false,
24
- className = '',
25
- autoClose,
26
- }) => {
27
- const [query, setQuery] = useState('');
28
-
29
- const [innerShow, setInnerShow] = useState(!!show);
30
-
31
- const dropdownRef = useRef(null);
32
-
33
- const EmptySpace = () => {
34
- return (
35
- <div className='dropdown-filter-empty-space'>
36
- <img
37
- src={'https://ui.groovinads.com/assets/not-found.svg'}
38
- alt='Sad magnifier on abstract background'
39
- />
40
- <div>
41
- <h5>Value not found</h5>
42
- <p>It looks like this value does not exist.</p>
43
- </div>
44
- </div>
45
- );
46
- };
47
-
48
- const handleCheckbox = (value, i) => {
49
- if (value) setValuesSelected([...valuesSelected, values[i]]);
50
- else setValuesSelected(valuesSelected.filter((item) => item !== values[i]));
51
- };
52
-
53
- const selectAll = () => {
54
- setValuesSelected([...values]);
55
- };
56
-
57
- const clearSelection = () => {
58
- setValuesSelected([]);
59
- };
60
-
61
- const handlePill = (index) =>
62
- setValuesSelected(valuesSelected.filter((item, i) => i !== index));
63
-
64
- useEffect(() => {
65
- setInnerShow(show);
66
- }, [show]);
67
-
68
- const handleClickOutside = useCallback((event) => {
69
- if (
70
- dropdownRef?.current &&
71
- !dropdownRef?.current.contains(event?.target) &&
72
- (autoClose === true || autoClose === 'outside')
73
- ) {
74
- setInnerShow(false);
75
- setShow(false);
76
- }
77
- }, []);
78
-
79
- useEffect(() => {
80
- document.addEventListener('click', handleClickOutside);
81
- return () => {
82
- document.removeEventListener('click', handleClickOutside);
83
- };
84
- }, []);
85
-
86
- return (
87
- <Dropdown
88
- onToggle={onToggle}
89
- className={`dropdown-filter ${locked ? 'locked' : ''} ${className}`}
90
- autoClose={autoClose}
91
- show={innerShow}
92
- ref={dropdownRef}
93
- >
94
- <Dropdown.Toggle
95
- variant='toggle-filter'
96
- onClick={(e) => {
97
- e.stopPropagation(); // Detiene la propagación del clic
98
- setInnerShow((prevShow) => !prevShow); // Alterna el estado interno del dropdown
99
- setShow((prevShow) => !prevShow); // Alterna el estado del dropdown en el estado externo también
100
- }}
101
- >
102
- <div className='filter-heading'>
103
- <div className='filter-title'>
104
- <span>{title}</span>
105
- {locked && (
106
- <Icon style={'solid'} iconName={'lock-keyhole'} scale={0.7} />
107
- )}
108
- </div>
109
- <Icon
110
- style={'solid'}
111
- iconName={'chevron-down'}
112
- scale={1}
113
- className='caret'
114
- />
115
- </div>
116
- <div className='filter-values'>
117
- {valuesSelected.length === values.length
118
- ? 'All selected'
119
- : valuesSelected.length
120
- ? valuesSelected.join('; ')
121
- : 'None'}
122
- </div>
123
- </Dropdown.Toggle>
124
- {!locked && (
125
- <Button
126
- variant='terciary'
127
- icon='xmark-circle'
128
- size='md'
129
- className='remove-filter'
130
- onClick={onRemoveFilter}
131
- />
132
- )}
133
-
134
- {menuType === 'simple' && (
135
- <Dropdown.Menu
136
- className='dropdown-menu-simple'
137
- popperConfig={
138
- overflow
139
- ? {
140
- strategy: 'fixed',
141
- onFirstUpdate: () =>
142
- window.dispatchEvent(new CustomEvent('scroll')),
143
- }
144
- : undefined
145
- }
146
- >
147
- <div className='dropdown-menu-wrapper'>
148
- <Input
149
- size='xs'
150
- label='Search'
151
- icon='magnifying-glass'
152
- className='w-100'
153
- value={query}
154
- onChange={({ target }) => setQuery(target.value)}
155
- customRef={show}
156
- />
157
- {values.filter((item) =>
158
- item.toString().toLowerCase().includes(query.toLowerCase()),
159
- ).length > 0 ? (
160
- <ul className='dropdown-filter-list'>
161
- {/* List values */}
162
- {values
163
- .filter((item) =>
164
- item.toString().toLowerCase().includes(query.toLowerCase()),
165
- )
166
- .map((value, index) => {
167
- return (
168
- <Checkbox
169
- setStatus={(status) => {
170
- handleCheckbox(status, index);
171
- }}
172
- status={valuesSelected.includes(value)}
173
- key={'Dropdown.Simple.Checkbox' + index}
174
- >
175
- {value}
176
- </Checkbox>
177
- );
178
- })}
179
- </ul>
180
- ) : (
181
- <EmptySpace />
182
- )}
183
- </div>
184
- </Dropdown.Menu>
185
- )}
186
- {menuType === 'selection' && (
187
- <Dropdown.Menu
188
- className='dropdown-menu-selection'
189
- popperConfig={
190
- overflow
191
- ? {
192
- strategy: 'fixed',
193
- onFirstUpdate: () =>
194
- window.dispatchEvent(new CustomEvent('scroll')),
195
- }
196
- : undefined
197
- }
198
- >
199
- <div className='dropdown-menu-wrapper'>
200
- <div className='dropdown-filter-list-wrapper'>
201
- <Input
202
- size='xs'
203
- label='Search'
204
- icon='magnifying-glass'
205
- className='w-100'
206
- value={query}
207
- onChange={({ target }) => setQuery(target.value)}
208
- customRef={show}
209
- />
210
- <h4>All values ({values.length})</h4>
211
- {values.filter((item) =>
212
- item.toString().toLowerCase().includes(query.toLowerCase()),
213
- ).length > 0 ? (
214
- <>
215
- <ul className='dropdown-filter-list'>
216
- {/* List values */}
217
- {values
218
- .filter((item) =>
219
- item
220
- .toString()
221
- .toLowerCase()
222
- .includes(query.toLowerCase()),
223
- )
224
- .map((value, index) => {
225
- return (
226
- <Checkbox
227
- setStatus={(status) => {
228
- handleCheckbox(status, index);
229
- }}
230
- status={valuesSelected.includes(value)}
231
- key={'Dropdown.Selection.Checkbox' + index}
232
- >
233
- {value}
234
- </Checkbox>
235
- );
236
- })}
237
- </ul>
238
- </>
239
- ) : (
240
- <EmptySpace />
241
- )}
242
- </div>
243
- <div className='dropdown-filter-values-wrapper'>
244
- <div className='dropdown-filter-buttons-wrapper'>
245
- <Button
246
- icon={'check'}
247
- size='xs'
248
- variant='terciary'
249
- onClick={selectAll}
250
- >
251
- Select all
252
- </Button>
253
- <Button
254
- icon={'xmark'}
255
- size='xs'
256
- variant='terciary'
257
- onClick={clearSelection}
258
- >
259
- Clear selection
260
- </Button>
261
- </div>
262
- <h4>Selected values ({valuesSelected.length})</h4>
263
- <div className='dropdown-filter-selected-list'>
264
- {/* List selected values */}
265
- {valuesSelected.map((value, index) => {
266
- return (
267
- <PillComponent
268
- color='light'
269
- closeButton={true}
270
- onClick={() => {
271
- handlePill(index);
272
- }}
273
- key={'Dropdown.PillComponent' + index}
274
- >
275
- {value}
276
- </PillComponent>
277
- );
278
- })}
279
- </div>
280
- </div>
281
- </div>
282
- </Dropdown.Menu>
283
- )}
284
- </Dropdown>
285
- );
286
- };
287
-
288
- DropdownFilter.propTypes = {
289
- title: PropTypes.string,
290
- valuesSelected: PropTypes.array,
291
- setValuesSelected: PropTypes.func,
292
- values: PropTypes.array,
293
- menuType: PropTypes.oneOf(['simple', 'selection']),
294
- locked: PropTypes.bool,
295
- onRemoveFilter: PropTypes.func,
296
- show: PropTypes.bool,
297
- setShow: PropTypes.func,
298
- onToggle: PropTypes.func,
299
- overflow: PropTypes.bool,
300
- className: PropTypes.string,
301
- autoClose: PropTypes.bool,
302
- };
303
-
304
- export default DropdownFilter;