@lets-events/react 12.4.1 → 12.5.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 (91) hide show
  1. package/.eslintrc.json +2 -2
  2. package/CHANGELOG.md +6 -0
  3. package/package.json +1 -1
  4. package/src/components/Alert.tsx +303 -303
  5. package/src/components/Avatar.tsx +55 -55
  6. package/src/components/Badge.tsx +125 -125
  7. package/src/components/Box.tsx +3 -3
  8. package/src/components/Button/index.tsx +45 -45
  9. package/src/components/Button/styledComponents.ts +313 -313
  10. package/src/components/ButtonGroup.tsx +484 -484
  11. package/src/components/Calendar/index.tsx +148 -148
  12. package/src/components/Calendar/styledComponents.ts +259 -259
  13. package/src/components/Card.tsx +67 -67
  14. package/src/components/CheckboxGroup.tsx +176 -176
  15. package/src/components/Container.tsx +39 -39
  16. package/src/components/Divider.tsx +7 -7
  17. package/src/components/DoubleCalendar/index.tsx +170 -166
  18. package/src/components/Drawer/index.tsx +100 -98
  19. package/src/components/Drawer/styledComponents.ts +103 -103
  20. package/src/components/Dropdown.tsx +302 -302
  21. package/src/components/Filter.tsx +164 -164
  22. package/src/components/Flex.tsx +118 -118
  23. package/src/components/FormFields/AddressFormFields/CityFormField.tsx +111 -111
  24. package/src/components/FormFields/AddressFormFields/CountryFormField.tsx +33 -33
  25. package/src/components/FormFields/AddressFormFields/PostalCodeFormField.tsx +39 -39
  26. package/src/components/FormFields/AddressFormFields/StateFormField.tsx +32 -32
  27. package/src/components/FormFields/AddressFormFields/index.tsx +141 -141
  28. package/src/components/FormFields/BirthDateFormField.tsx +84 -84
  29. package/src/components/FormFields/CNPJFormField.tsx +87 -87
  30. package/src/components/FormFields/CPFFormField.tsx +78 -78
  31. package/src/components/FormFields/CalendarFormField.tsx +95 -95
  32. package/src/components/FormFields/CheckboxGroupFormField.tsx +91 -91
  33. package/src/components/FormFields/DoubleCalendarFormField.tsx +93 -90
  34. package/src/components/FormFields/EmailFormField.tsx +27 -27
  35. package/src/components/FormFields/Form.tsx +39 -39
  36. package/src/components/FormFields/IdentityDocumentNumberFormField.tsx +32 -32
  37. package/src/components/FormFields/MultiSelectFormField.tsx +64 -64
  38. package/src/components/FormFields/PhoneFormField.tsx +40 -40
  39. package/src/components/FormFields/RadioGroupFormField.tsx +84 -84
  40. package/src/components/FormFields/RichEditorFormField.tsx +103 -103
  41. package/src/components/FormFields/SelectFormField.tsx +93 -93
  42. package/src/components/FormFields/SwitchFormField.tsx +46 -46
  43. package/src/components/FormFields/TextAreaFormField.tsx +59 -59
  44. package/src/components/FormFields/TextFormField.tsx +112 -112
  45. package/src/components/FormFields/TimePickerFormField.tsx +88 -88
  46. package/src/components/FormFields/subComponents/ErrorFormMessage.tsx +36 -36
  47. package/src/components/FormFields/subComponents/FormLabel.tsx +29 -29
  48. package/src/components/FormFields/utils/validation.ts +23 -23
  49. package/src/components/Grid.tsx +137 -137
  50. package/src/components/Icon.tsx +47 -47
  51. package/src/components/MenuDropdown/index.tsx +38 -38
  52. package/src/components/MenuDropdown/styledComponents.ts +31 -31
  53. package/src/components/Modal.tsx +110 -110
  54. package/src/components/MultiSelect/index.tsx +243 -243
  55. package/src/components/MultiSelect/styledComponents.ts +160 -160
  56. package/src/components/RadioGroup.tsx +210 -210
  57. package/src/components/RichEditor/QuillComponent.tsx +457 -457
  58. package/src/components/RichEditor/RichEditor.tsx +49 -49
  59. package/src/components/RichEditor/index.ts +2 -2
  60. package/src/components/RichEditor/styledComponents.ts +1151 -1151
  61. package/src/components/Section.tsx +33 -33
  62. package/src/components/Step.tsx +164 -164
  63. package/src/components/Switch.tsx +108 -108
  64. package/src/components/Text.tsx +38 -38
  65. package/src/components/TextField.tsx +372 -372
  66. package/src/components/TextareaField.tsx +138 -138
  67. package/src/components/TimePicker.tsx +328 -328
  68. package/src/components/Toast/components/ToastItem.tsx +41 -41
  69. package/src/components/Toast/components/ToastProvider.tsx +63 -63
  70. package/src/components/Toast/hooks/useToast.ts +12 -12
  71. package/src/components/Toast/index.tsx +5 -5
  72. package/src/components/Toast/styles/index.ts +135 -135
  73. package/src/components/Toast/types/index.ts +46 -46
  74. package/src/components/Tooltip/index.tsx +66 -66
  75. package/src/components/Tooltip/styles.ts +77 -77
  76. package/src/hooks/useCountries.ts +41 -41
  77. package/src/hooks/useImageUpload.ts +139 -139
  78. package/src/hooks/useOnClickOutside.tsx +42 -42
  79. package/src/index.tsx +71 -71
  80. package/src/styles/index.ts +41 -41
  81. package/src/types/typographyValues.ts +178 -178
  82. package/src/utils/getNestedValue.ts +3 -3
  83. package/src/utils/states.ts +29 -29
  84. package/src/utils/uploadService.ts +180 -180
  85. package/tsconfig.json +3 -3
  86. package/tsup.config.ts +38 -38
  87. package/.turbo/turbo-build.log +0 -19
  88. package/dist/index.d.mts +0 -15398
  89. package/dist/index.d.ts +0 -15398
  90. package/dist/index.js +0 -13390
  91. package/dist/index.mjs +0 -13284
@@ -1,243 +1,243 @@
1
- import React, { useCallback, useRef, useState } from "react";
2
- import { DropdownMenu, Theme } from "@radix-ui/themes";
3
- import { CheckboxGroup, CheckboxItem } from "../CheckboxGroup";
4
- import { Text } from "../Text";
5
- import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
6
- import {
7
- faChevronDown,
8
- faChevronUp,
9
- faSquareXmark,
10
- } from "@fortawesome/free-solid-svg-icons";
11
- import { colors } from "@lets-events/tokens";
12
- import { ComponentProps, useMemo } from "react";
13
- import { Flex } from "../Flex";
14
- import { CloseBtnStyled, ButtonSelectAllStyled, itemStyle, StyledContent, StyledFlexSelectedItems, StyledFlexWithMaxHeight, StyledItem, StyledText, StyledTrigger } from "./styledComponents";
15
-
16
- export type MultiSelectProps = ComponentProps<typeof StyledTrigger> & {
17
- placeholder?: string;
18
- value?: string[];
19
- onValueChange?: (v: string[]) => void;
20
- options: Array<{
21
- label: string;
22
- value: string;
23
- }>;
24
- width?: string;
25
- zIndex?: string;
26
- showSelectedValues?: boolean;
27
- singleSelect?: boolean;
28
- selectedOrientation?: "row" | "column";
29
- disabled?: boolean;
30
- maxHeight?: string;
31
- selectedAllOptions?: boolean;
32
- selectedAllText?: string;
33
- selectedScroll?: boolean;
34
- };
35
-
36
- export const MultiSelect = React.forwardRef<HTMLDivElement, MultiSelectProps>(
37
- (
38
- {
39
- placeholder,
40
- value: selectedValues = [],
41
- onValueChange,
42
- options,
43
- color,
44
- width = "100%",
45
- zIndex = "auto",
46
- showSelectedValues = true,
47
- singleSelect = false,
48
- selectedOrientation = "column",
49
- disabled = false,
50
- maxHeight,
51
- selectedAllOptions = false,
52
- selectedAllText,
53
- selectedScroll = false
54
- },
55
- fowardedRef
56
- ) => {
57
- const [isOpen, setIsOpen] = useState(false);
58
- const triggerRef = useRef<HTMLDivElement>(null);
59
- const [allOptionsSelected, setAllOptionsSelected] = useState(false)
60
- const labelByValue = useMemo(() => {
61
- return options.reduce<{ [key: string]: string }>((prev, curr) => {
62
- return {
63
- ...prev,
64
- [curr.value]: curr.label,
65
- };
66
- }, {});
67
- }, [options]);
68
-
69
- const handleRemove = useCallback(
70
- (value: string) => {
71
- const newValue = selectedValues.filter((v) => v !== value);
72
- onValueChange?.(newValue);
73
- },
74
- [selectedValues, onValueChange]
75
- );
76
-
77
- const handleSelectAll = useCallback(
78
- (e: React.MouseEvent) => {
79
- e.preventDefault();
80
- e.stopPropagation();
81
- const allSelected = selectedValues.length === options.length;
82
- if (allSelected) {
83
- onValueChange?.([]);
84
- setAllOptionsSelected(false)
85
- } else {
86
- onValueChange?.(options.map((o) => o.value));
87
- setAllOptionsSelected(true)
88
- }
89
- },
90
- [selectedValues, options, onValueChange]
91
- );
92
-
93
- const text = useMemo(() => {
94
- if (selectedValues.length > 0 && singleSelect) {
95
- const value = selectedValues[0];
96
- return labelByValue[value];
97
- }
98
- return placeholder ?? "Selecione";
99
- }, [selectedValues, placeholder, singleSelect]);
100
-
101
- const handleItemClick = (v: string) => {
102
- onValueChange?.([v]);
103
- setIsOpen(false);
104
- };
105
-
106
- const handleToggle = useCallback(
107
- (e: React.MouseEvent) => {
108
- e.preventDefault();
109
- e.stopPropagation();
110
- if (disabled) return;
111
- setIsOpen((prev) => !prev);
112
- },
113
- [disabled]
114
- );
115
-
116
- return (
117
- <Theme style={width !== "100%" ? { width } : undefined}>
118
- <DropdownMenu.Root open={isOpen} onOpenChange={setIsOpen}>
119
- <DropdownMenu.Trigger>
120
- <StyledTrigger
121
- ref={(r) => {
122
- if (!r) return;
123
- triggerRef.current = r;
124
- if (fowardedRef) {
125
- if (typeof fowardedRef === "function") fowardedRef(r);
126
- else fowardedRef.current = r;
127
- }
128
- }}
129
- color={color}
130
- disabled={disabled}
131
- style={width !== "100%" ? { width } : undefined}
132
- onClick={handleToggle}
133
- >
134
- <StyledText
135
- typography={"labelMedium"}
136
- color={disabled ? "dark400" : undefined}
137
- >
138
- {text}
139
- </StyledText>
140
- <FontAwesomeIcon
141
- icon={isOpen ? faChevronUp : faChevronDown}
142
- size="sm"
143
- color={disabled ? colors.dark400 : colors.dark600}
144
- />
145
- </StyledTrigger>
146
- </DropdownMenu.Trigger>
147
- <StyledContent
148
- css={{
149
- width: "100%",
150
- zIndex: zIndex === "auto" ? 999999 : zIndex,
151
- }}
152
- >
153
- {!singleSelect ? (
154
- <CheckboxGroup
155
- value={selectedValues}
156
- onValueChange={(v) => {
157
- onValueChange?.(v)
158
- if (allOptionsSelected) {
159
- setAllOptionsSelected(false)
160
- }
161
- }}
162
- >
163
- <StyledFlexWithMaxHeight
164
- direction={"column"}
165
- gap={8}
166
- hasMaxHeight={!!maxHeight}
167
- style={maxHeight ? { maxHeight } : undefined}
168
- >
169
- {selectedAllOptions && (
170
- <ButtonSelectAllStyled
171
- css={itemStyle}
172
- onClick={(e) => { handleSelectAll(e), setIsOpen(false) }}
173
- type="button"
174
- >
175
- <div className={allOptionsSelected ? "checked" : ""}></div>
176
- <Text typography="labelSmall">
177
- {selectedAllText ? selectedAllText : "Selecionar Todos"}
178
- </Text>
179
- </ButtonSelectAllStyled>
180
- )}
181
-
182
- {options.map(({ value, label }, i) => (
183
- <CheckboxItem value={value} css={itemStyle} key={i}>
184
- <Text typography={"labelSmall"}>{label}</Text>
185
- </CheckboxItem>
186
- ))}
187
- </StyledFlexWithMaxHeight>
188
- </CheckboxGroup>
189
- ) : (
190
- <StyledFlexWithMaxHeight
191
- direction={"column"}
192
- gap={8}
193
- hasMaxHeight={!!maxHeight}
194
- style={maxHeight ? { maxHeight } : undefined}
195
- >
196
- {options.map(({ value, label }, i) => (
197
- <StyledItem key={i} onClick={() => handleItemClick(value)}>
198
- <Text typography={"labelSmall"}>{label}</Text>
199
- </StyledItem>
200
- ))}
201
- </StyledFlexWithMaxHeight>
202
- )}
203
- </StyledContent>
204
- </DropdownMenu.Root>
205
- {selectedValues.length > 0 && showSelectedValues && (
206
- <StyledFlexSelectedItems
207
- direction={selectedOrientation}
208
- gap={8}
209
- align={selectedOrientation === "column" ? "start" : "center"}
210
- justify={"start"}
211
- css={{ ...(selectedScroll && { maxHeight: maxHeight || "400px" }) }}
212
- >
213
- {selectedValues.map((value) => (
214
- <Flex
215
- key={value}
216
- gap={4}
217
- align={"center"}
218
- css={{ flexWrap: "wrap" }}
219
- >
220
- <CloseBtnStyled
221
- onClick={(e) => {
222
- e.stopPropagation();
223
- handleRemove(value);
224
- }}
225
- type="button"
226
- >
227
- <FontAwesomeIcon icon={faSquareXmark} size="sm" />
228
- </CloseBtnStyled>
229
- <Text
230
- typography={"captionMedium"}
231
- fontWeight={"regular"}
232
- color="dark600"
233
- >
234
- {labelByValue[value]}
235
- </Text>
236
- </Flex>
237
- ))}
238
- </StyledFlexSelectedItems>
239
- )}
240
- </Theme>
241
- );
242
- }
243
- );
1
+ import React, { useCallback, useRef, useState } from "react";
2
+ import { DropdownMenu, Theme } from "@radix-ui/themes";
3
+ import { CheckboxGroup, CheckboxItem } from "../CheckboxGroup";
4
+ import { Text } from "../Text";
5
+ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
6
+ import {
7
+ faChevronDown,
8
+ faChevronUp,
9
+ faSquareXmark,
10
+ } from "@fortawesome/free-solid-svg-icons";
11
+ import { colors } from "@lets-events/tokens";
12
+ import { ComponentProps, useMemo } from "react";
13
+ import { Flex } from "../Flex";
14
+ import { CloseBtnStyled, ButtonSelectAllStyled, itemStyle, StyledContent, StyledFlexSelectedItems, StyledFlexWithMaxHeight, StyledItem, StyledText, StyledTrigger } from "./styledComponents";
15
+
16
+ export type MultiSelectProps = ComponentProps<typeof StyledTrigger> & {
17
+ placeholder?: string;
18
+ value?: string[];
19
+ onValueChange?: (v: string[]) => void;
20
+ options: Array<{
21
+ label: string;
22
+ value: string;
23
+ }>;
24
+ width?: string;
25
+ zIndex?: string;
26
+ showSelectedValues?: boolean;
27
+ singleSelect?: boolean;
28
+ selectedOrientation?: "row" | "column";
29
+ disabled?: boolean;
30
+ maxHeight?: string;
31
+ selectedAllOptions?: boolean;
32
+ selectedAllText?: string;
33
+ selectedScroll?: boolean;
34
+ };
35
+
36
+ export const MultiSelect = React.forwardRef<HTMLDivElement, MultiSelectProps>(
37
+ (
38
+ {
39
+ placeholder,
40
+ value: selectedValues = [],
41
+ onValueChange,
42
+ options,
43
+ color,
44
+ width = "100%",
45
+ zIndex = "auto",
46
+ showSelectedValues = true,
47
+ singleSelect = false,
48
+ selectedOrientation = "column",
49
+ disabled = false,
50
+ maxHeight,
51
+ selectedAllOptions = false,
52
+ selectedAllText,
53
+ selectedScroll = false
54
+ },
55
+ fowardedRef
56
+ ) => {
57
+ const [isOpen, setIsOpen] = useState(false);
58
+ const triggerRef = useRef<HTMLDivElement>(null);
59
+ const [allOptionsSelected, setAllOptionsSelected] = useState(false)
60
+ const labelByValue = useMemo(() => {
61
+ return options.reduce<{ [key: string]: string }>((prev, curr) => {
62
+ return {
63
+ ...prev,
64
+ [curr.value]: curr.label,
65
+ };
66
+ }, {});
67
+ }, [options]);
68
+
69
+ const handleRemove = useCallback(
70
+ (value: string) => {
71
+ const newValue = selectedValues.filter((v) => v !== value);
72
+ onValueChange?.(newValue);
73
+ },
74
+ [selectedValues, onValueChange]
75
+ );
76
+
77
+ const handleSelectAll = useCallback(
78
+ (e: React.MouseEvent) => {
79
+ e.preventDefault();
80
+ e.stopPropagation();
81
+ const allSelected = selectedValues.length === options.length;
82
+ if (allSelected) {
83
+ onValueChange?.([]);
84
+ setAllOptionsSelected(false)
85
+ } else {
86
+ onValueChange?.(options.map((o) => o.value));
87
+ setAllOptionsSelected(true)
88
+ }
89
+ },
90
+ [selectedValues, options, onValueChange]
91
+ );
92
+
93
+ const text = useMemo(() => {
94
+ if (selectedValues.length > 0 && singleSelect) {
95
+ const value = selectedValues[0];
96
+ return labelByValue[value];
97
+ }
98
+ return placeholder ?? "Selecione";
99
+ }, [selectedValues, placeholder, singleSelect]);
100
+
101
+ const handleItemClick = (v: string) => {
102
+ onValueChange?.([v]);
103
+ setIsOpen(false);
104
+ };
105
+
106
+ const handleToggle = useCallback(
107
+ (e: React.MouseEvent) => {
108
+ e.preventDefault();
109
+ e.stopPropagation();
110
+ if (disabled) return;
111
+ setIsOpen((prev) => !prev);
112
+ },
113
+ [disabled]
114
+ );
115
+
116
+ return (
117
+ <Theme style={width !== "100%" ? { width } : undefined}>
118
+ <DropdownMenu.Root open={isOpen} onOpenChange={setIsOpen}>
119
+ <DropdownMenu.Trigger>
120
+ <StyledTrigger
121
+ ref={(r) => {
122
+ if (!r) return;
123
+ triggerRef.current = r;
124
+ if (fowardedRef) {
125
+ if (typeof fowardedRef === "function") fowardedRef(r);
126
+ else fowardedRef.current = r;
127
+ }
128
+ }}
129
+ color={color}
130
+ disabled={disabled}
131
+ style={width !== "100%" ? { width } : undefined}
132
+ onClick={handleToggle}
133
+ >
134
+ <StyledText
135
+ typography={"labelMedium"}
136
+ color={disabled ? "dark400" : undefined}
137
+ >
138
+ {text}
139
+ </StyledText>
140
+ <FontAwesomeIcon
141
+ icon={isOpen ? faChevronUp : faChevronDown}
142
+ size="sm"
143
+ color={disabled ? colors.dark400 : colors.dark600}
144
+ />
145
+ </StyledTrigger>
146
+ </DropdownMenu.Trigger>
147
+ <StyledContent
148
+ css={{
149
+ width: "100%",
150
+ zIndex: zIndex === "auto" ? 999999 : zIndex,
151
+ }}
152
+ >
153
+ {!singleSelect ? (
154
+ <CheckboxGroup
155
+ value={selectedValues}
156
+ onValueChange={(v) => {
157
+ onValueChange?.(v)
158
+ if (allOptionsSelected) {
159
+ setAllOptionsSelected(false)
160
+ }
161
+ }}
162
+ >
163
+ <StyledFlexWithMaxHeight
164
+ direction={"column"}
165
+ gap={8}
166
+ hasMaxHeight={!!maxHeight}
167
+ style={maxHeight ? { maxHeight } : undefined}
168
+ >
169
+ {selectedAllOptions && (
170
+ <ButtonSelectAllStyled
171
+ css={itemStyle}
172
+ onClick={(e) => { handleSelectAll(e), setIsOpen(false) }}
173
+ type="button"
174
+ >
175
+ <div className={allOptionsSelected ? "checked" : ""}></div>
176
+ <Text typography="labelSmall">
177
+ {selectedAllText ? selectedAllText : "Selecionar Todos"}
178
+ </Text>
179
+ </ButtonSelectAllStyled>
180
+ )}
181
+
182
+ {options.map(({ value, label }, i) => (
183
+ <CheckboxItem value={value} css={itemStyle} key={i}>
184
+ <Text typography={"labelSmall"}>{label}</Text>
185
+ </CheckboxItem>
186
+ ))}
187
+ </StyledFlexWithMaxHeight>
188
+ </CheckboxGroup>
189
+ ) : (
190
+ <StyledFlexWithMaxHeight
191
+ direction={"column"}
192
+ gap={8}
193
+ hasMaxHeight={!!maxHeight}
194
+ style={maxHeight ? { maxHeight } : undefined}
195
+ >
196
+ {options.map(({ value, label }, i) => (
197
+ <StyledItem key={i} onClick={() => handleItemClick(value)}>
198
+ <Text typography={"labelSmall"}>{label}</Text>
199
+ </StyledItem>
200
+ ))}
201
+ </StyledFlexWithMaxHeight>
202
+ )}
203
+ </StyledContent>
204
+ </DropdownMenu.Root>
205
+ {selectedValues.length > 0 && showSelectedValues && (
206
+ <StyledFlexSelectedItems
207
+ direction={selectedOrientation}
208
+ gap={8}
209
+ align={selectedOrientation === "column" ? "start" : "center"}
210
+ justify={"start"}
211
+ css={{ ...(selectedScroll && { maxHeight: maxHeight || "400px" }) }}
212
+ >
213
+ {selectedValues.map((value) => (
214
+ <Flex
215
+ key={value}
216
+ gap={4}
217
+ align={"center"}
218
+ css={{ flexWrap: "wrap" }}
219
+ >
220
+ <CloseBtnStyled
221
+ onClick={(e) => {
222
+ e.stopPropagation();
223
+ handleRemove(value);
224
+ }}
225
+ type="button"
226
+ >
227
+ <FontAwesomeIcon icon={faSquareXmark} size="sm" />
228
+ </CloseBtnStyled>
229
+ <Text
230
+ typography={"captionMedium"}
231
+ fontWeight={"regular"}
232
+ color="dark600"
233
+ >
234
+ {labelByValue[value]}
235
+ </Text>
236
+ </Flex>
237
+ ))}
238
+ </StyledFlexSelectedItems>
239
+ )}
240
+ </Theme>
241
+ );
242
+ }
243
+ );