@lets-events/react 11.8.1 → 12.0.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.
- package/.eslintrc.json +2 -2
- package/.turbo/turbo-build.log +21 -18
- package/CHANGELOG.md +6 -0
- package/dist/index.d.mts +122 -6
- package/dist/index.d.ts +122 -6
- package/dist/index.js +976 -237
- package/dist/index.mjs +970 -237
- package/package.json +7 -2
- package/src/components/Alert.tsx +303 -303
- package/src/components/Avatar.tsx +55 -55
- package/src/components/Badge.tsx +125 -125
- package/src/components/Box.tsx +3 -3
- package/src/components/Button/index.tsx +16 -16
- package/src/components/Button/styledComponents.ts +287 -287
- package/src/components/ButtonGroup.tsx +484 -484
- package/src/components/Calendar/index.tsx +139 -136
- package/src/components/Calendar/styledComponents.ts +209 -209
- package/src/components/Card.tsx +48 -48
- package/src/components/CheckboxGroup.tsx +176 -176
- package/src/components/Container.tsx +39 -39
- package/src/components/Drawer/index.tsx +55 -55
- package/src/components/Drawer/styledComponents.ts +46 -46
- package/src/components/Dropdown.tsx +302 -302
- package/src/components/Filter.tsx +164 -164
- package/src/components/Flex.tsx +118 -118
- package/src/components/FormFields/AddressFormFields/CityFormField.tsx +111 -111
- package/src/components/FormFields/AddressFormFields/CountryFormField.tsx +33 -33
- package/src/components/FormFields/AddressFormFields/PostalCodeFormField.tsx +39 -39
- package/src/components/FormFields/AddressFormFields/StateFormField.tsx +32 -32
- package/src/components/FormFields/AddressFormFields/index.tsx +141 -141
- package/src/components/FormFields/BirthDateFormField.tsx +84 -84
- package/src/components/FormFields/CNPJFormField.tsx +87 -87
- package/src/components/FormFields/CPFFormField.tsx +78 -78
- package/src/components/FormFields/CalendarFormField.tsx +89 -0
- package/src/components/FormFields/CheckboxGroupFormField.tsx +91 -91
- package/src/components/FormFields/EmailFormField.tsx +27 -27
- package/src/components/FormFields/Form.tsx +39 -39
- package/src/components/FormFields/IdentityDocumentNumberFormField.tsx +40 -40
- package/src/components/FormFields/MultiSelectFormField.tsx +61 -55
- package/src/components/FormFields/PhoneFormField.tsx +40 -40
- package/src/components/FormFields/RadioGroupFormField.tsx +84 -84
- package/src/components/FormFields/RichEditorFormField.tsx +69 -0
- package/src/components/FormFields/SelectFormField.tsx +93 -93
- package/src/components/FormFields/TextAreaFormField.tsx +57 -48
- package/src/components/FormFields/TextFormField.tsx +112 -112
- package/src/components/FormFields/TimePickerFormField.tsx +88 -0
- package/src/components/FormFields/subComponents/ErrorFormMessage.tsx +36 -36
- package/src/components/FormFields/subComponents/FormLabel.tsx +29 -29
- package/src/components/FormFields/utils/validation.ts +23 -23
- package/src/components/Grid.tsx +137 -137
- package/src/components/Icon.tsx +47 -47
- package/src/components/MenuDropdown/index.tsx +38 -38
- package/src/components/MenuDropdown/styledComponents.ts +31 -31
- package/src/components/Modal.tsx +90 -90
- package/src/components/MultiSelect.tsx +266 -267
- package/src/components/RadioGroup.tsx +210 -210
- package/src/components/RichEditor/QuillComponent.tsx +415 -0
- package/src/components/RichEditor/RichEditor.tsx +38 -0
- package/src/components/RichEditor/index.ts +2 -0
- package/src/components/RichEditor/styledComponents.ts +62 -0
- package/src/components/Section.tsx +33 -33
- package/src/components/Step.tsx +164 -164
- package/src/components/Switch.tsx +108 -108
- package/src/components/Text.tsx +38 -38
- package/src/components/TextField.tsx +372 -365
- package/src/components/TextareaField.tsx +128 -128
- package/src/components/TimePicker.tsx +301 -298
- package/src/components/Toast/components/ToastItem.tsx +41 -41
- package/src/components/Toast/components/ToastProvider.tsx +63 -63
- package/src/components/Toast/hooks/useToast.ts +12 -12
- package/src/components/Toast/index.tsx +5 -5
- package/src/components/Toast/styles/index.ts +135 -135
- package/src/components/Toast/types/index.ts +46 -46
- package/src/components/Tooltip/index.tsx +66 -66
- package/src/components/Tooltip/styles.ts +77 -77
- package/src/hooks/useCountries.ts +41 -41
- package/src/hooks/useImageUpload.ts +139 -0
- package/src/hooks/useOnClickOutside.tsx +20 -20
- package/src/index.tsx +67 -55
- package/src/styles/index.ts +38 -38
- package/src/types/typographyValues.ts +178 -178
- package/src/utils/getNestedValue.ts +3 -3
- package/src/utils/states.ts +29 -29
- package/src/utils/uploadService.ts +180 -0
- package/tsconfig.json +3 -3
- package/tsup.config.ts +38 -0
- package/dist/index.css +0 -171
package/dist/index.mjs
CHANGED
|
@@ -74,124 +74,11 @@ var __async = (__this, __arguments, generator) => {
|
|
|
74
74
|
});
|
|
75
75
|
};
|
|
76
76
|
|
|
77
|
-
// ../../node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js
|
|
78
|
-
var require_react_is_production_min = __commonJS({
|
|
79
|
-
"../../node_modules/prop-types/node_modules/react-is/cjs/react-is.production.min.js"(exports) {
|
|
80
|
-
"use strict";
|
|
81
|
-
var b = "function" === typeof Symbol && Symbol.for;
|
|
82
|
-
var c = b ? Symbol.for("react.element") : 60103;
|
|
83
|
-
var d = b ? Symbol.for("react.portal") : 60106;
|
|
84
|
-
var e = b ? Symbol.for("react.fragment") : 60107;
|
|
85
|
-
var f = b ? Symbol.for("react.strict_mode") : 60108;
|
|
86
|
-
var g = b ? Symbol.for("react.profiler") : 60114;
|
|
87
|
-
var h = b ? Symbol.for("react.provider") : 60109;
|
|
88
|
-
var k = b ? Symbol.for("react.context") : 60110;
|
|
89
|
-
var l = b ? Symbol.for("react.async_mode") : 60111;
|
|
90
|
-
var m = b ? Symbol.for("react.concurrent_mode") : 60111;
|
|
91
|
-
var n = b ? Symbol.for("react.forward_ref") : 60112;
|
|
92
|
-
var p = b ? Symbol.for("react.suspense") : 60113;
|
|
93
|
-
var q = b ? Symbol.for("react.suspense_list") : 60120;
|
|
94
|
-
var r = b ? Symbol.for("react.memo") : 60115;
|
|
95
|
-
var t = b ? Symbol.for("react.lazy") : 60116;
|
|
96
|
-
var v = b ? Symbol.for("react.block") : 60121;
|
|
97
|
-
var w = b ? Symbol.for("react.fundamental") : 60117;
|
|
98
|
-
var x = b ? Symbol.for("react.responder") : 60118;
|
|
99
|
-
var y = b ? Symbol.for("react.scope") : 60119;
|
|
100
|
-
function z(a) {
|
|
101
|
-
if ("object" === typeof a && null !== a) {
|
|
102
|
-
var u = a.$$typeof;
|
|
103
|
-
switch (u) {
|
|
104
|
-
case c:
|
|
105
|
-
switch (a = a.type, a) {
|
|
106
|
-
case l:
|
|
107
|
-
case m:
|
|
108
|
-
case e:
|
|
109
|
-
case g:
|
|
110
|
-
case f:
|
|
111
|
-
case p:
|
|
112
|
-
return a;
|
|
113
|
-
default:
|
|
114
|
-
switch (a = a && a.$$typeof, a) {
|
|
115
|
-
case k:
|
|
116
|
-
case n:
|
|
117
|
-
case t:
|
|
118
|
-
case r:
|
|
119
|
-
case h:
|
|
120
|
-
return a;
|
|
121
|
-
default:
|
|
122
|
-
return u;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
case d:
|
|
126
|
-
return u;
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
function A(a) {
|
|
131
|
-
return z(a) === m;
|
|
132
|
-
}
|
|
133
|
-
exports.AsyncMode = l;
|
|
134
|
-
exports.ConcurrentMode = m;
|
|
135
|
-
exports.ContextConsumer = k;
|
|
136
|
-
exports.ContextProvider = h;
|
|
137
|
-
exports.Element = c;
|
|
138
|
-
exports.ForwardRef = n;
|
|
139
|
-
exports.Fragment = e;
|
|
140
|
-
exports.Lazy = t;
|
|
141
|
-
exports.Memo = r;
|
|
142
|
-
exports.Portal = d;
|
|
143
|
-
exports.Profiler = g;
|
|
144
|
-
exports.StrictMode = f;
|
|
145
|
-
exports.Suspense = p;
|
|
146
|
-
exports.isAsyncMode = function(a) {
|
|
147
|
-
return A(a) || z(a) === l;
|
|
148
|
-
};
|
|
149
|
-
exports.isConcurrentMode = A;
|
|
150
|
-
exports.isContextConsumer = function(a) {
|
|
151
|
-
return z(a) === k;
|
|
152
|
-
};
|
|
153
|
-
exports.isContextProvider = function(a) {
|
|
154
|
-
return z(a) === h;
|
|
155
|
-
};
|
|
156
|
-
exports.isElement = function(a) {
|
|
157
|
-
return "object" === typeof a && null !== a && a.$$typeof === c;
|
|
158
|
-
};
|
|
159
|
-
exports.isForwardRef = function(a) {
|
|
160
|
-
return z(a) === n;
|
|
161
|
-
};
|
|
162
|
-
exports.isFragment = function(a) {
|
|
163
|
-
return z(a) === e;
|
|
164
|
-
};
|
|
165
|
-
exports.isLazy = function(a) {
|
|
166
|
-
return z(a) === t;
|
|
167
|
-
};
|
|
168
|
-
exports.isMemo = function(a) {
|
|
169
|
-
return z(a) === r;
|
|
170
|
-
};
|
|
171
|
-
exports.isPortal = function(a) {
|
|
172
|
-
return z(a) === d;
|
|
173
|
-
};
|
|
174
|
-
exports.isProfiler = function(a) {
|
|
175
|
-
return z(a) === g;
|
|
176
|
-
};
|
|
177
|
-
exports.isStrictMode = function(a) {
|
|
178
|
-
return z(a) === f;
|
|
179
|
-
};
|
|
180
|
-
exports.isSuspense = function(a) {
|
|
181
|
-
return z(a) === p;
|
|
182
|
-
};
|
|
183
|
-
exports.isValidElementType = function(a) {
|
|
184
|
-
return "string" === typeof a || "function" === typeof a || a === e || a === m || a === g || a === f || a === p || a === q || "object" === typeof a && null !== a && (a.$$typeof === t || a.$$typeof === r || a.$$typeof === h || a.$$typeof === k || a.$$typeof === n || a.$$typeof === w || a.$$typeof === x || a.$$typeof === y || a.$$typeof === v);
|
|
185
|
-
};
|
|
186
|
-
exports.typeOf = z;
|
|
187
|
-
}
|
|
188
|
-
});
|
|
189
|
-
|
|
190
77
|
// ../../node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js
|
|
191
78
|
var require_react_is_development = __commonJS({
|
|
192
79
|
"../../node_modules/prop-types/node_modules/react-is/cjs/react-is.development.js"(exports) {
|
|
193
80
|
"use strict";
|
|
194
|
-
if (
|
|
81
|
+
if (true) {
|
|
195
82
|
(function() {
|
|
196
83
|
"use strict";
|
|
197
84
|
var hasSymbol = typeof Symbol === "function" && Symbol.for;
|
|
@@ -346,8 +233,8 @@ var require_react_is_development = __commonJS({
|
|
|
346
233
|
var require_react_is = __commonJS({
|
|
347
234
|
"../../node_modules/prop-types/node_modules/react-is/index.js"(exports, module) {
|
|
348
235
|
"use strict";
|
|
349
|
-
if (
|
|
350
|
-
module.exports =
|
|
236
|
+
if (false) {
|
|
237
|
+
module.exports = null;
|
|
351
238
|
} else {
|
|
352
239
|
module.exports = require_react_is_development();
|
|
353
240
|
}
|
|
@@ -447,7 +334,7 @@ var require_checkPropTypes = __commonJS({
|
|
|
447
334
|
"use strict";
|
|
448
335
|
var printWarning = function() {
|
|
449
336
|
};
|
|
450
|
-
if (
|
|
337
|
+
if (true) {
|
|
451
338
|
ReactPropTypesSecret = require_ReactPropTypesSecret();
|
|
452
339
|
loggedTypeFailures = {};
|
|
453
340
|
has = require_has();
|
|
@@ -466,7 +353,7 @@ var require_checkPropTypes = __commonJS({
|
|
|
466
353
|
var loggedTypeFailures;
|
|
467
354
|
var has;
|
|
468
355
|
function checkPropTypes(typeSpecs, values, location, componentName, getStack) {
|
|
469
|
-
if (
|
|
356
|
+
if (true) {
|
|
470
357
|
for (var typeSpecName in typeSpecs) {
|
|
471
358
|
if (has(typeSpecs, typeSpecName)) {
|
|
472
359
|
var error;
|
|
@@ -499,7 +386,7 @@ var require_checkPropTypes = __commonJS({
|
|
|
499
386
|
}
|
|
500
387
|
}
|
|
501
388
|
checkPropTypes.resetWarningCache = function() {
|
|
502
|
-
if (
|
|
389
|
+
if (true) {
|
|
503
390
|
loggedTypeFailures = {};
|
|
504
391
|
}
|
|
505
392
|
};
|
|
@@ -518,7 +405,7 @@ var require_factoryWithTypeCheckers = __commonJS({
|
|
|
518
405
|
var checkPropTypes = require_checkPropTypes();
|
|
519
406
|
var printWarning = function() {
|
|
520
407
|
};
|
|
521
|
-
if (
|
|
408
|
+
if (true) {
|
|
522
409
|
printWarning = function(text) {
|
|
523
410
|
var message2 = "Warning: " + text;
|
|
524
411
|
if (typeof console !== "undefined") {
|
|
@@ -578,7 +465,7 @@ var require_factoryWithTypeCheckers = __commonJS({
|
|
|
578
465
|
}
|
|
579
466
|
PropTypeError.prototype = Error.prototype;
|
|
580
467
|
function createChainableTypeChecker(validate) {
|
|
581
|
-
if (
|
|
468
|
+
if (true) {
|
|
582
469
|
var manualPropTypeCallCache = {};
|
|
583
470
|
var manualPropTypeWarningCount = 0;
|
|
584
471
|
}
|
|
@@ -592,7 +479,7 @@ var require_factoryWithTypeCheckers = __commonJS({
|
|
|
592
479
|
);
|
|
593
480
|
err.name = "Invariant Violation";
|
|
594
481
|
throw err;
|
|
595
|
-
} else if (
|
|
482
|
+
} else if (typeof console !== "undefined") {
|
|
596
483
|
var cacheKey = componentName + ":" + propName;
|
|
597
484
|
if (!manualPropTypeCallCache[cacheKey] && // Avoid spamming the console because they are often not actionable except for lib authors
|
|
598
485
|
manualPropTypeWarningCount < 3) {
|
|
@@ -693,7 +580,7 @@ var require_factoryWithTypeCheckers = __commonJS({
|
|
|
693
580
|
}
|
|
694
581
|
function createEnumTypeChecker(expectedValues) {
|
|
695
582
|
if (!Array.isArray(expectedValues)) {
|
|
696
|
-
if (
|
|
583
|
+
if (true) {
|
|
697
584
|
if (arguments.length > 1) {
|
|
698
585
|
printWarning(
|
|
699
586
|
"Invalid arguments supplied to oneOf, expected an array, got " + arguments.length + " arguments. A common mistake is to write oneOf(x, y, z) instead of oneOf([x, y, z])."
|
|
@@ -746,7 +633,7 @@ var require_factoryWithTypeCheckers = __commonJS({
|
|
|
746
633
|
}
|
|
747
634
|
function createUnionTypeChecker(arrayOfTypeCheckers) {
|
|
748
635
|
if (!Array.isArray(arrayOfTypeCheckers)) {
|
|
749
|
-
|
|
636
|
+
true ? printWarning("Invalid argument supplied to oneOfType, expected an instance of array.") : void 0;
|
|
750
637
|
return emptyFunctionThatReturnsNull;
|
|
751
638
|
}
|
|
752
639
|
for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
|
|
@@ -950,72 +837,16 @@ var require_factoryWithTypeCheckers = __commonJS({
|
|
|
950
837
|
}
|
|
951
838
|
});
|
|
952
839
|
|
|
953
|
-
// ../../node_modules/prop-types/factoryWithThrowingShims.js
|
|
954
|
-
var require_factoryWithThrowingShims = __commonJS({
|
|
955
|
-
"../../node_modules/prop-types/factoryWithThrowingShims.js"(exports, module) {
|
|
956
|
-
"use strict";
|
|
957
|
-
var ReactPropTypesSecret = require_ReactPropTypesSecret();
|
|
958
|
-
function emptyFunction() {
|
|
959
|
-
}
|
|
960
|
-
function emptyFunctionWithReset() {
|
|
961
|
-
}
|
|
962
|
-
emptyFunctionWithReset.resetWarningCache = emptyFunction;
|
|
963
|
-
module.exports = function() {
|
|
964
|
-
function shim(props, propName, componentName, location, propFullName, secret) {
|
|
965
|
-
if (secret === ReactPropTypesSecret) {
|
|
966
|
-
return;
|
|
967
|
-
}
|
|
968
|
-
var err = new Error(
|
|
969
|
-
"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types"
|
|
970
|
-
);
|
|
971
|
-
err.name = "Invariant Violation";
|
|
972
|
-
throw err;
|
|
973
|
-
}
|
|
974
|
-
;
|
|
975
|
-
shim.isRequired = shim;
|
|
976
|
-
function getShim() {
|
|
977
|
-
return shim;
|
|
978
|
-
}
|
|
979
|
-
;
|
|
980
|
-
var ReactPropTypes = {
|
|
981
|
-
array: shim,
|
|
982
|
-
bigint: shim,
|
|
983
|
-
bool: shim,
|
|
984
|
-
func: shim,
|
|
985
|
-
number: shim,
|
|
986
|
-
object: shim,
|
|
987
|
-
string: shim,
|
|
988
|
-
symbol: shim,
|
|
989
|
-
any: shim,
|
|
990
|
-
arrayOf: getShim,
|
|
991
|
-
element: shim,
|
|
992
|
-
elementType: shim,
|
|
993
|
-
instanceOf: getShim,
|
|
994
|
-
node: shim,
|
|
995
|
-
objectOf: getShim,
|
|
996
|
-
oneOf: getShim,
|
|
997
|
-
oneOfType: getShim,
|
|
998
|
-
shape: getShim,
|
|
999
|
-
exact: getShim,
|
|
1000
|
-
checkPropTypes: emptyFunctionWithReset,
|
|
1001
|
-
resetWarningCache: emptyFunction
|
|
1002
|
-
};
|
|
1003
|
-
ReactPropTypes.PropTypes = ReactPropTypes;
|
|
1004
|
-
return ReactPropTypes;
|
|
1005
|
-
};
|
|
1006
|
-
}
|
|
1007
|
-
});
|
|
1008
|
-
|
|
1009
840
|
// ../../node_modules/prop-types/index.js
|
|
1010
841
|
var require_prop_types = __commonJS({
|
|
1011
842
|
"../../node_modules/prop-types/index.js"(exports, module) {
|
|
1012
843
|
"use strict";
|
|
1013
|
-
if (
|
|
844
|
+
if (true) {
|
|
1014
845
|
ReactIs = require_react_is();
|
|
1015
846
|
throwOnDirectAccess = true;
|
|
1016
847
|
module.exports = require_factoryWithTypeCheckers()(ReactIs.isElement, throwOnDirectAccess);
|
|
1017
848
|
} else {
|
|
1018
|
-
module.exports =
|
|
849
|
+
module.exports = null();
|
|
1019
850
|
}
|
|
1020
851
|
var ReactIs;
|
|
1021
852
|
var throwOnDirectAccess;
|
|
@@ -2735,7 +2566,8 @@ var TextField = React.forwardRef(
|
|
|
2735
2566
|
addon,
|
|
2736
2567
|
textAlign = "left",
|
|
2737
2568
|
mask,
|
|
2738
|
-
maxLength
|
|
2569
|
+
maxLength,
|
|
2570
|
+
hasError
|
|
2739
2571
|
} = _b, props = __objRest(_b, [
|
|
2740
2572
|
"children",
|
|
2741
2573
|
"isValid",
|
|
@@ -2746,7 +2578,8 @@ var TextField = React.forwardRef(
|
|
|
2746
2578
|
"addon",
|
|
2747
2579
|
"textAlign",
|
|
2748
2580
|
"mask",
|
|
2749
|
-
"maxLength"
|
|
2581
|
+
"maxLength",
|
|
2582
|
+
"hasError"
|
|
2750
2583
|
]);
|
|
2751
2584
|
const maskRef = mask ? useMask(mask) : void 0;
|
|
2752
2585
|
const inputRef = React.useRef(null);
|
|
@@ -2764,11 +2597,18 @@ var TextField = React.forwardRef(
|
|
|
2764
2597
|
};
|
|
2765
2598
|
return /* @__PURE__ */ jsxs(Flex2, { direction: "column", css: { width: "100%", position: "relative" }, children: [
|
|
2766
2599
|
/* @__PURE__ */ jsxs(Flex2, { gap: "0", css: { width: "100%" }, children: [
|
|
2767
|
-
!!addon && /* @__PURE__ */ jsx7(
|
|
2600
|
+
!!addon && /* @__PURE__ */ jsx7(
|
|
2601
|
+
InputAddon,
|
|
2602
|
+
{
|
|
2603
|
+
color: hasError ? "error" : color,
|
|
2604
|
+
typography: "labelSmall",
|
|
2605
|
+
children: addon
|
|
2606
|
+
}
|
|
2607
|
+
),
|
|
2768
2608
|
/* @__PURE__ */ jsxs(
|
|
2769
2609
|
TextFieldStyled,
|
|
2770
2610
|
__spreadProps(__spreadValues({
|
|
2771
|
-
color,
|
|
2611
|
+
color: hasError ? "error" : color || "default",
|
|
2772
2612
|
isValid: isValid2,
|
|
2773
2613
|
name,
|
|
2774
2614
|
typography,
|
|
@@ -2797,7 +2637,7 @@ var TextField = React.forwardRef(
|
|
|
2797
2637
|
{
|
|
2798
2638
|
position: "flex-end",
|
|
2799
2639
|
name,
|
|
2800
|
-
color,
|
|
2640
|
+
color: hasError ? "error" : color,
|
|
2801
2641
|
typography,
|
|
2802
2642
|
fontWeight,
|
|
2803
2643
|
textAlign,
|
|
@@ -7964,14 +7804,16 @@ function Calendar(_a) {
|
|
|
7964
7804
|
calendarLayout,
|
|
7965
7805
|
selected,
|
|
7966
7806
|
setSelected,
|
|
7967
|
-
position = "bottom"
|
|
7807
|
+
position = "bottom",
|
|
7808
|
+
hasError
|
|
7968
7809
|
} = _b, props = __objRest(_b, [
|
|
7969
7810
|
"action",
|
|
7970
7811
|
"actionText",
|
|
7971
7812
|
"calendarLayout",
|
|
7972
7813
|
"selected",
|
|
7973
7814
|
"setSelected",
|
|
7974
|
-
"position"
|
|
7815
|
+
"position",
|
|
7816
|
+
"hasError"
|
|
7975
7817
|
]);
|
|
7976
7818
|
const [inputValue, setInputValue] = useState2("");
|
|
7977
7819
|
const [showContainer, setShowCalendar] = useState2(false);
|
|
@@ -8013,6 +7855,7 @@ function Calendar(_a) {
|
|
|
8013
7855
|
onChange: handleInputChange,
|
|
8014
7856
|
inputMode: "numeric",
|
|
8015
7857
|
textAlign: "right",
|
|
7858
|
+
color: hasError ? "error" : "default",
|
|
8016
7859
|
children: /* @__PURE__ */ jsx15(TextFieldSlot, { children: /* @__PURE__ */ jsx15(Icon_default, { name: "calendar", size: "xl" }) })
|
|
8017
7860
|
}
|
|
8018
7861
|
)
|
|
@@ -8241,7 +8084,8 @@ var pad = (num) => String(num).padStart(2, "0");
|
|
|
8241
8084
|
function TimePicker({
|
|
8242
8085
|
selected,
|
|
8243
8086
|
setSelected,
|
|
8244
|
-
position = "bottom"
|
|
8087
|
+
position = "bottom",
|
|
8088
|
+
hasError
|
|
8245
8089
|
}) {
|
|
8246
8090
|
const [hours, setHours] = useState3("00");
|
|
8247
8091
|
const [minutes, setMinutes] = useState3("00");
|
|
@@ -8293,6 +8137,7 @@ function TimePicker({
|
|
|
8293
8137
|
placeholder: "00:00",
|
|
8294
8138
|
typography: "labelSmall",
|
|
8295
8139
|
fontWeight: "regular",
|
|
8140
|
+
color: hasError ? "error" : "default",
|
|
8296
8141
|
children: /* @__PURE__ */ jsx17(TextFieldSlot, { children: /* @__PURE__ */ jsx17(Icon_default, { name: "clock", size: "xl" }) })
|
|
8297
8142
|
}
|
|
8298
8143
|
)
|
|
@@ -9386,13 +9231,6 @@ var itemStyle = {
|
|
|
9386
9231
|
}
|
|
9387
9232
|
};
|
|
9388
9233
|
var StyledItem2 = styled("div", __spreadValues({}, itemStyle));
|
|
9389
|
-
var BadgeWrapper = styled("div", {
|
|
9390
|
-
flex: "1",
|
|
9391
|
-
display: "flex",
|
|
9392
|
-
gap: "4px",
|
|
9393
|
-
marginTop: "8px",
|
|
9394
|
-
flexDirection: "column"
|
|
9395
|
-
});
|
|
9396
9234
|
var BadgeCloseBtn = styled("div", {
|
|
9397
9235
|
cursor: "pointer"
|
|
9398
9236
|
});
|
|
@@ -9407,6 +9245,7 @@ var MultiSelect = React9.forwardRef(
|
|
|
9407
9245
|
zIndex = "auto",
|
|
9408
9246
|
showSelectedValues = true,
|
|
9409
9247
|
singleSelect = false,
|
|
9248
|
+
selectedOrientation = "column",
|
|
9410
9249
|
disabled = false
|
|
9411
9250
|
}, fowardedRef) => {
|
|
9412
9251
|
var _a;
|
|
@@ -9513,30 +9352,42 @@ var MultiSelect = React9.forwardRef(
|
|
|
9513
9352
|
}
|
|
9514
9353
|
)
|
|
9515
9354
|
] }),
|
|
9516
|
-
selectedValues.length > 0 && showSelectedValues && /* @__PURE__ */ jsx26(Fragment2, { children: /* @__PURE__ */ jsx26(
|
|
9517
|
-
|
|
9518
|
-
|
|
9519
|
-
|
|
9520
|
-
|
|
9521
|
-
|
|
9522
|
-
|
|
9523
|
-
|
|
9524
|
-
|
|
9525
|
-
|
|
9526
|
-
|
|
9527
|
-
}
|
|
9528
|
-
|
|
9529
|
-
|
|
9530
|
-
|
|
9531
|
-
|
|
9532
|
-
|
|
9533
|
-
|
|
9534
|
-
|
|
9535
|
-
|
|
9536
|
-
|
|
9537
|
-
|
|
9538
|
-
|
|
9539
|
-
|
|
9355
|
+
selectedValues.length > 0 && showSelectedValues && /* @__PURE__ */ jsx26(Fragment2, { children: /* @__PURE__ */ jsx26(
|
|
9356
|
+
Flex2,
|
|
9357
|
+
{
|
|
9358
|
+
direction: selectedOrientation,
|
|
9359
|
+
gap: 8,
|
|
9360
|
+
align: "center",
|
|
9361
|
+
justify: "start",
|
|
9362
|
+
css: {
|
|
9363
|
+
margin: "8px 0"
|
|
9364
|
+
},
|
|
9365
|
+
children: selectedValues.map((value) => {
|
|
9366
|
+
return /* @__PURE__ */ jsxs14(Flex2, { gap: 4, align: "center", css: { flexWrap: "wrap" }, children: [
|
|
9367
|
+
/* @__PURE__ */ jsx26(
|
|
9368
|
+
BadgeCloseBtn,
|
|
9369
|
+
{
|
|
9370
|
+
onClick: (e) => {
|
|
9371
|
+
e.stopPropagation();
|
|
9372
|
+
handleRemove(value);
|
|
9373
|
+
},
|
|
9374
|
+
role: "button",
|
|
9375
|
+
children: /* @__PURE__ */ jsx26(FontAwesomeIcon3, { icon: faSquareXmark, size: "sm" })
|
|
9376
|
+
}
|
|
9377
|
+
),
|
|
9378
|
+
/* @__PURE__ */ jsx26(
|
|
9379
|
+
Text,
|
|
9380
|
+
{
|
|
9381
|
+
typography: "captionMedium",
|
|
9382
|
+
fontWeight: "regular",
|
|
9383
|
+
color: "dark600",
|
|
9384
|
+
children: labelByValue[value]
|
|
9385
|
+
}
|
|
9386
|
+
)
|
|
9387
|
+
] });
|
|
9388
|
+
})
|
|
9389
|
+
}
|
|
9390
|
+
) })
|
|
9540
9391
|
] });
|
|
9541
9392
|
}
|
|
9542
9393
|
);
|
|
@@ -9779,12 +9630,16 @@ var TextAreaFormField = (_a) => {
|
|
|
9779
9630
|
name,
|
|
9780
9631
|
label,
|
|
9781
9632
|
required,
|
|
9782
|
-
placeholder
|
|
9633
|
+
placeholder,
|
|
9634
|
+
validate,
|
|
9635
|
+
validationErrorMessage = "Este campo \xE9 obrigat\xF3rio."
|
|
9783
9636
|
} = _b, props = __objRest(_b, [
|
|
9784
9637
|
"name",
|
|
9785
9638
|
"label",
|
|
9786
9639
|
"required",
|
|
9787
|
-
"placeholder"
|
|
9640
|
+
"placeholder",
|
|
9641
|
+
"validate",
|
|
9642
|
+
"validationErrorMessage"
|
|
9788
9643
|
]);
|
|
9789
9644
|
var _a2;
|
|
9790
9645
|
const {
|
|
@@ -9793,6 +9648,10 @@ var TextAreaFormField = (_a) => {
|
|
|
9793
9648
|
} = useFormContext();
|
|
9794
9649
|
const haveError = !!errors[name];
|
|
9795
9650
|
const errorMsg = (_a2 = errors[name]) == null ? void 0 : _a2.message;
|
|
9651
|
+
const validationRules = {
|
|
9652
|
+
required: required ? validationErrorMessage : false,
|
|
9653
|
+
validate
|
|
9654
|
+
};
|
|
9796
9655
|
return /* @__PURE__ */ jsxs17(Flex2, { direction: "column", children: [
|
|
9797
9656
|
/* @__PURE__ */ jsx32(
|
|
9798
9657
|
FormLabel,
|
|
@@ -9805,7 +9664,7 @@ var TextAreaFormField = (_a) => {
|
|
|
9805
9664
|
),
|
|
9806
9665
|
/* @__PURE__ */ jsx32(
|
|
9807
9666
|
TextareaField,
|
|
9808
|
-
__spreadProps(__spreadValues(__spreadValues({}, props), register(name,
|
|
9667
|
+
__spreadProps(__spreadValues(__spreadValues({}, props), register(name, validationRules)), {
|
|
9809
9668
|
placeholder,
|
|
9810
9669
|
color: haveError ? "error" : "default",
|
|
9811
9670
|
"aria-labelledby": `${name}-label`
|
|
@@ -9933,11 +9792,15 @@ var MultiSelectFormField = (_a) => {
|
|
|
9933
9792
|
var _b = _a, {
|
|
9934
9793
|
name,
|
|
9935
9794
|
label,
|
|
9936
|
-
required
|
|
9795
|
+
required,
|
|
9796
|
+
selectedOrientation = "column",
|
|
9797
|
+
zIndex
|
|
9937
9798
|
} = _b, rest = __objRest(_b, [
|
|
9938
9799
|
"name",
|
|
9939
9800
|
"label",
|
|
9940
|
-
"required"
|
|
9801
|
+
"required",
|
|
9802
|
+
"selectedOrientation",
|
|
9803
|
+
"zIndex"
|
|
9941
9804
|
]);
|
|
9942
9805
|
var _a2;
|
|
9943
9806
|
const { field, fieldState } = useController2({
|
|
@@ -9969,7 +9832,9 @@ var MultiSelectFormField = (_a) => {
|
|
|
9969
9832
|
value,
|
|
9970
9833
|
onValueChange: handleChange,
|
|
9971
9834
|
ref,
|
|
9972
|
-
color: haveError ? "error" : "default"
|
|
9835
|
+
color: haveError ? "error" : "default",
|
|
9836
|
+
selectedOrientation,
|
|
9837
|
+
zIndex
|
|
9973
9838
|
}, rest)
|
|
9974
9839
|
),
|
|
9975
9840
|
/* @__PURE__ */ jsx35(ErrorFormMessage, { message: errorMsg })
|
|
@@ -10822,6 +10687,878 @@ var EmailFormField = ({
|
|
|
10822
10687
|
}
|
|
10823
10688
|
);
|
|
10824
10689
|
};
|
|
10690
|
+
|
|
10691
|
+
// src/components/FormFields/RichEditorFormField.tsx
|
|
10692
|
+
import { useController as useController3 } from "react-hook-form";
|
|
10693
|
+
|
|
10694
|
+
// src/components/RichEditor/QuillComponent.tsx
|
|
10695
|
+
import { useState as useState8, useRef as useRef8, useEffect as useEffect5, useCallback as useCallback4 } from "react";
|
|
10696
|
+
import { useQuill } from "react-quilljs";
|
|
10697
|
+
import "quill/dist/quill.snow.css";
|
|
10698
|
+
|
|
10699
|
+
// src/utils/uploadService.ts
|
|
10700
|
+
var generateUniqueFilename = (originalName) => {
|
|
10701
|
+
const timestamp = Date.now().toString(36);
|
|
10702
|
+
const random = Math.random().toString(36).substring(2, 8);
|
|
10703
|
+
const extension = originalName.split(".").pop();
|
|
10704
|
+
return `${timestamp}_${random}.${extension}`;
|
|
10705
|
+
};
|
|
10706
|
+
var UploadService = class {
|
|
10707
|
+
static getPresignedUrl(filename, contentType, config2) {
|
|
10708
|
+
return __async(this, null, function* () {
|
|
10709
|
+
var _a;
|
|
10710
|
+
const apiUrl = config2.apiUrl;
|
|
10711
|
+
const presignedUrlEndpoint = (_a = config2.endpoints) == null ? void 0 : _a.presignedUrl;
|
|
10712
|
+
const bucket = config2.s3Bucket;
|
|
10713
|
+
try {
|
|
10714
|
+
const response = yield fetch(`${apiUrl}${presignedUrlEndpoint}`, {
|
|
10715
|
+
method: "POST",
|
|
10716
|
+
headers: {
|
|
10717
|
+
"Content-Type": "application/json"
|
|
10718
|
+
},
|
|
10719
|
+
body: JSON.stringify({
|
|
10720
|
+
filename,
|
|
10721
|
+
contentType,
|
|
10722
|
+
bucket
|
|
10723
|
+
})
|
|
10724
|
+
});
|
|
10725
|
+
if (!response.ok) {
|
|
10726
|
+
throw new Error("Falha ao gerar URL de upload");
|
|
10727
|
+
}
|
|
10728
|
+
const data = yield response.json();
|
|
10729
|
+
return data.presignedUrl;
|
|
10730
|
+
} catch (error) {
|
|
10731
|
+
console.error("Erro ao gerar URL pr\xE9-assinada:", error);
|
|
10732
|
+
throw new Error("Falha ao gerar URL de upload");
|
|
10733
|
+
}
|
|
10734
|
+
});
|
|
10735
|
+
}
|
|
10736
|
+
static uploadToS3(file, config2, onProgress) {
|
|
10737
|
+
return __async(this, null, function* () {
|
|
10738
|
+
try {
|
|
10739
|
+
const uniqueFilename = generateUniqueFilename(file.name);
|
|
10740
|
+
const blob = new Blob([file], { type: file.type });
|
|
10741
|
+
const s3Url = `${config2.s3Url}/${uniqueFilename}`;
|
|
10742
|
+
return new Promise((resolve, reject) => {
|
|
10743
|
+
const xhr = new XMLHttpRequest();
|
|
10744
|
+
xhr.upload.addEventListener("progress", (event) => {
|
|
10745
|
+
if (event.lengthComputable) {
|
|
10746
|
+
const percentComplete = Math.round(
|
|
10747
|
+
event.loaded / event.total * 100
|
|
10748
|
+
);
|
|
10749
|
+
onProgress == null ? void 0 : onProgress({
|
|
10750
|
+
amount: percentComplete,
|
|
10751
|
+
message: `Fazendo upload... ${percentComplete}%`
|
|
10752
|
+
});
|
|
10753
|
+
}
|
|
10754
|
+
});
|
|
10755
|
+
xhr.addEventListener("load", () => {
|
|
10756
|
+
if (xhr.status === 200) {
|
|
10757
|
+
resolve({
|
|
10758
|
+
url: s3Url,
|
|
10759
|
+
filename: uniqueFilename,
|
|
10760
|
+
size: file.size,
|
|
10761
|
+
type: file.type
|
|
10762
|
+
});
|
|
10763
|
+
} else {
|
|
10764
|
+
reject(new Error(`Upload falhou com status: ${xhr.status}`));
|
|
10765
|
+
}
|
|
10766
|
+
});
|
|
10767
|
+
xhr.addEventListener("error", () => {
|
|
10768
|
+
reject(new Error("Erro de rede durante upload"));
|
|
10769
|
+
});
|
|
10770
|
+
xhr.open("PUT", s3Url);
|
|
10771
|
+
xhr.setRequestHeader("Content-Type", file.type);
|
|
10772
|
+
xhr.send(blob);
|
|
10773
|
+
});
|
|
10774
|
+
} catch (error) {
|
|
10775
|
+
console.error("Erro no upload:", error);
|
|
10776
|
+
throw error;
|
|
10777
|
+
}
|
|
10778
|
+
});
|
|
10779
|
+
}
|
|
10780
|
+
static uploadViaAPI(file, config2, onProgress) {
|
|
10781
|
+
return __async(this, null, function* () {
|
|
10782
|
+
try {
|
|
10783
|
+
const formData = new FormData();
|
|
10784
|
+
formData.append("file", file);
|
|
10785
|
+
const bucket = config2.s3Bucket;
|
|
10786
|
+
formData.append("bucket", bucket);
|
|
10787
|
+
const xhr = new XMLHttpRequest();
|
|
10788
|
+
return new Promise((resolve, reject) => {
|
|
10789
|
+
var _a;
|
|
10790
|
+
xhr.upload.addEventListener("progress", (event) => {
|
|
10791
|
+
if (event.lengthComputable) {
|
|
10792
|
+
const percentComplete = Math.round(
|
|
10793
|
+
event.loaded / event.total * 100
|
|
10794
|
+
);
|
|
10795
|
+
onProgress == null ? void 0 : onProgress({
|
|
10796
|
+
amount: percentComplete,
|
|
10797
|
+
message: `Fazendo upload... ${percentComplete}%`
|
|
10798
|
+
});
|
|
10799
|
+
}
|
|
10800
|
+
});
|
|
10801
|
+
xhr.addEventListener("load", () => {
|
|
10802
|
+
if (xhr.status === 200) {
|
|
10803
|
+
try {
|
|
10804
|
+
const response = JSON.parse(xhr.responseText);
|
|
10805
|
+
resolve({
|
|
10806
|
+
url: response.url,
|
|
10807
|
+
filename: response.filename,
|
|
10808
|
+
size: file.size,
|
|
10809
|
+
type: file.type
|
|
10810
|
+
});
|
|
10811
|
+
} catch (error) {
|
|
10812
|
+
reject(new Error("Resposta inv\xE1lida do servidor"));
|
|
10813
|
+
}
|
|
10814
|
+
} else {
|
|
10815
|
+
reject(new Error(`Upload falhou com status: ${xhr.status}`));
|
|
10816
|
+
}
|
|
10817
|
+
});
|
|
10818
|
+
xhr.addEventListener("error", () => {
|
|
10819
|
+
reject(new Error("Erro de rede durante upload"));
|
|
10820
|
+
});
|
|
10821
|
+
const apiUrl = config2.apiUrl;
|
|
10822
|
+
const uploadEndpoint = (_a = config2.endpoints) == null ? void 0 : _a.upload;
|
|
10823
|
+
xhr.open("POST", `${apiUrl}${uploadEndpoint}`);
|
|
10824
|
+
xhr.send(formData);
|
|
10825
|
+
});
|
|
10826
|
+
} catch (error) {
|
|
10827
|
+
console.error("Erro no upload via API:", error);
|
|
10828
|
+
throw error;
|
|
10829
|
+
}
|
|
10830
|
+
});
|
|
10831
|
+
}
|
|
10832
|
+
};
|
|
10833
|
+
|
|
10834
|
+
// src/components/RichEditor/styledComponents.ts
|
|
10835
|
+
var QuillContainer = styled("div", {
|
|
10836
|
+
display: "flex",
|
|
10837
|
+
flexDirection: "column"
|
|
10838
|
+
});
|
|
10839
|
+
var QuillEditor = styled("div", {
|
|
10840
|
+
"& .ql-editor": {
|
|
10841
|
+
minHeight: "200px",
|
|
10842
|
+
padding: "$12",
|
|
10843
|
+
fontSize: "$14",
|
|
10844
|
+
lineHeight: "$base",
|
|
10845
|
+
fontFamily: "$default",
|
|
10846
|
+
color: "$neutral900",
|
|
10847
|
+
backgroundColor: "$white",
|
|
10848
|
+
border: "none",
|
|
10849
|
+
outline: "none",
|
|
10850
|
+
cursor: "text",
|
|
10851
|
+
caretColor: "$primary500",
|
|
10852
|
+
"&:focus": {
|
|
10853
|
+
borderColor: "$primary500",
|
|
10854
|
+
boxShadow: "0 0 0 1px $primary500"
|
|
10855
|
+
},
|
|
10856
|
+
"& p": {
|
|
10857
|
+
margin: "0 0 $8 0"
|
|
10858
|
+
},
|
|
10859
|
+
"& p:last-child": {
|
|
10860
|
+
marginBottom: 0
|
|
10861
|
+
},
|
|
10862
|
+
"& .ql-cursor": {
|
|
10863
|
+
borderLeft: "2px solid $primary500"
|
|
10864
|
+
}
|
|
10865
|
+
},
|
|
10866
|
+
"& .ql-toolbar": {
|
|
10867
|
+
backgroundColor: "$grey100",
|
|
10868
|
+
border: "1px solid $neutral300",
|
|
10869
|
+
borderBottom: "none",
|
|
10870
|
+
borderTopLeftRadius: "$sm",
|
|
10871
|
+
borderTopRightRadius: "$sm",
|
|
10872
|
+
padding: "$8 $12"
|
|
10873
|
+
},
|
|
10874
|
+
"& .ql-container": {
|
|
10875
|
+
border: "1px solid $neutral300",
|
|
10876
|
+
borderTop: "none",
|
|
10877
|
+
borderBottomLeftRadius: "$sm",
|
|
10878
|
+
borderBottomRightRadius: "$sm",
|
|
10879
|
+
fontFamily: "$default"
|
|
10880
|
+
},
|
|
10881
|
+
"& .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='1']::before": {
|
|
10882
|
+
content: "T\xEDtulo 1"
|
|
10883
|
+
},
|
|
10884
|
+
"& .ql-snow .ql-picker.ql-header .ql-picker-item[data-value='2']::before": {
|
|
10885
|
+
content: "T\xEDtulo 2"
|
|
10886
|
+
}
|
|
10887
|
+
});
|
|
10888
|
+
|
|
10889
|
+
// src/components/RichEditor/QuillComponent.tsx
|
|
10890
|
+
import { jsx as jsx50, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
10891
|
+
var QuillComponent = ({
|
|
10892
|
+
value = "",
|
|
10893
|
+
onChange,
|
|
10894
|
+
placeholder = "Digite seu texto aqui...",
|
|
10895
|
+
disabled = false,
|
|
10896
|
+
className,
|
|
10897
|
+
uploadConfig
|
|
10898
|
+
}) => {
|
|
10899
|
+
const [showVideoModal, setShowVideoModal] = useState8(false);
|
|
10900
|
+
const [videoUrl, setVideoUrl] = useState8("");
|
|
10901
|
+
const [showLinkModal, setShowLinkModal] = useState8(false);
|
|
10902
|
+
const [linkUrl, setLinkUrl] = useState8("");
|
|
10903
|
+
const videoModalRef = useRef8(null);
|
|
10904
|
+
const linkModalRef = useRef8(null);
|
|
10905
|
+
const { addToast, removeToast } = useToast();
|
|
10906
|
+
const modules = {
|
|
10907
|
+
toolbar: [
|
|
10908
|
+
[{ header: [1, 2, false] }],
|
|
10909
|
+
["bold", "italic", "underline", "strike"],
|
|
10910
|
+
[{ color: [] }, { background: [] }],
|
|
10911
|
+
[{ align: [] }],
|
|
10912
|
+
[{ list: "ordered" }, { list: "bullet" }],
|
|
10913
|
+
["link", "image", "video"]
|
|
10914
|
+
],
|
|
10915
|
+
clipboard: {
|
|
10916
|
+
matchVisual: false
|
|
10917
|
+
}
|
|
10918
|
+
};
|
|
10919
|
+
const formats = [
|
|
10920
|
+
"header",
|
|
10921
|
+
"bold",
|
|
10922
|
+
"italic",
|
|
10923
|
+
"underline",
|
|
10924
|
+
"strike",
|
|
10925
|
+
"color",
|
|
10926
|
+
"background",
|
|
10927
|
+
"align",
|
|
10928
|
+
"list",
|
|
10929
|
+
"link",
|
|
10930
|
+
"image",
|
|
10931
|
+
"video"
|
|
10932
|
+
];
|
|
10933
|
+
const { quill, quillRef } = useQuill({
|
|
10934
|
+
theme: "snow",
|
|
10935
|
+
modules,
|
|
10936
|
+
formats,
|
|
10937
|
+
placeholder,
|
|
10938
|
+
readOnly: disabled
|
|
10939
|
+
});
|
|
10940
|
+
const handleImageUpload = useCallback4(
|
|
10941
|
+
(file) => __async(null, null, function* () {
|
|
10942
|
+
if (disabled || !quill || !uploadConfig) return;
|
|
10943
|
+
try {
|
|
10944
|
+
addToast({
|
|
10945
|
+
type: "info",
|
|
10946
|
+
message: "Carregando imagem...",
|
|
10947
|
+
duration: 2e3
|
|
10948
|
+
});
|
|
10949
|
+
const uploadedFile = yield UploadService.uploadToS3(file, uploadConfig);
|
|
10950
|
+
removeToast("info");
|
|
10951
|
+
addToast({
|
|
10952
|
+
type: "success",
|
|
10953
|
+
message: "Imagem adicionada com sucesso!"
|
|
10954
|
+
});
|
|
10955
|
+
const selection = quill.getSelection();
|
|
10956
|
+
const index = selection ? selection.index : quill.getLength();
|
|
10957
|
+
quill.insertEmbed(index, "image", uploadedFile.url);
|
|
10958
|
+
quill.setSelection(index + 1, 0);
|
|
10959
|
+
} catch (error) {
|
|
10960
|
+
console.error("Erro no upload:", error);
|
|
10961
|
+
addToast({
|
|
10962
|
+
type: "error",
|
|
10963
|
+
message: "Erro no upload: N\xE3o foi poss\xEDvel enviar a imagem. Tente novamente."
|
|
10964
|
+
});
|
|
10965
|
+
}
|
|
10966
|
+
}),
|
|
10967
|
+
[disabled, quill, addToast, removeToast, uploadConfig]
|
|
10968
|
+
);
|
|
10969
|
+
useEffect5(() => {
|
|
10970
|
+
if (quill && value) {
|
|
10971
|
+
const currentContent = quill.root.innerHTML;
|
|
10972
|
+
if (currentContent !== value) {
|
|
10973
|
+
const selection = quill.getSelection();
|
|
10974
|
+
quill.clipboard.dangerouslyPasteHTML(value);
|
|
10975
|
+
if (selection) {
|
|
10976
|
+
quill.setSelection(selection.index, selection.length);
|
|
10977
|
+
} else {
|
|
10978
|
+
quill.setSelection(quill.getLength(), 0);
|
|
10979
|
+
}
|
|
10980
|
+
}
|
|
10981
|
+
}
|
|
10982
|
+
}, [quill, value]);
|
|
10983
|
+
useEffect5(() => {
|
|
10984
|
+
if (quill) {
|
|
10985
|
+
quill.on("text-change", (delta, oldDelta, source) => {
|
|
10986
|
+
if (source === "user") {
|
|
10987
|
+
const html = quill.root.innerHTML;
|
|
10988
|
+
onChange == null ? void 0 : onChange(html);
|
|
10989
|
+
}
|
|
10990
|
+
});
|
|
10991
|
+
const toolbar = quill.getModule("toolbar");
|
|
10992
|
+
if (toolbar) {
|
|
10993
|
+
toolbar.addHandler("link", () => setShowLinkModal(true));
|
|
10994
|
+
toolbar.addHandler("video", () => setShowVideoModal(true));
|
|
10995
|
+
toolbar.addHandler("image", () => {
|
|
10996
|
+
const input = document.createElement("input");
|
|
10997
|
+
input.setAttribute("type", "file");
|
|
10998
|
+
input.setAttribute("accept", "image/*");
|
|
10999
|
+
input.click();
|
|
11000
|
+
input.onchange = () => __async(null, null, function* () {
|
|
11001
|
+
var _a;
|
|
11002
|
+
const file = (_a = input.files) == null ? void 0 : _a[0];
|
|
11003
|
+
if (file) {
|
|
11004
|
+
yield handleImageUpload(file);
|
|
11005
|
+
}
|
|
11006
|
+
});
|
|
11007
|
+
});
|
|
11008
|
+
}
|
|
11009
|
+
setTimeout(() => {
|
|
11010
|
+
var _a, _b;
|
|
11011
|
+
const toolbarElement = (_b = (_a = quillRef.current) == null ? void 0 : _a.parentElement) == null ? void 0 : _b.querySelector(".ql-toolbar");
|
|
11012
|
+
if (toolbarElement) {
|
|
11013
|
+
const headerSelect = toolbarElement.querySelector(
|
|
11014
|
+
"select[data-value]"
|
|
11015
|
+
);
|
|
11016
|
+
console.log(headerSelect, "headerSelect");
|
|
11017
|
+
if (headerSelect) {
|
|
11018
|
+
const options = headerSelect.querySelectorAll("option");
|
|
11019
|
+
console.log(options, "options");
|
|
11020
|
+
options.forEach((option) => {
|
|
11021
|
+
if (option.value === "1") {
|
|
11022
|
+
option.textContent = "T\xEDtulo 1";
|
|
11023
|
+
} else if (option.value === "2") {
|
|
11024
|
+
option.textContent = "T\xEDtulo 2";
|
|
11025
|
+
} else if (option.value === "") {
|
|
11026
|
+
option.textContent = "Normal";
|
|
11027
|
+
}
|
|
11028
|
+
});
|
|
11029
|
+
}
|
|
11030
|
+
}
|
|
11031
|
+
}, 100);
|
|
11032
|
+
}
|
|
11033
|
+
}, [quill, onChange, handleImageUpload]);
|
|
11034
|
+
useEffect5(() => {
|
|
11035
|
+
if (quill) {
|
|
11036
|
+
quill.enable(!disabled);
|
|
11037
|
+
if (!disabled) {
|
|
11038
|
+
if (quill.getLength() <= 1) {
|
|
11039
|
+
quill.focus();
|
|
11040
|
+
quill.setSelection(0, 0);
|
|
11041
|
+
}
|
|
11042
|
+
}
|
|
11043
|
+
}
|
|
11044
|
+
}, [quill, disabled]);
|
|
11045
|
+
const handleLinkCancel = useCallback4(() => {
|
|
11046
|
+
setLinkUrl("");
|
|
11047
|
+
setShowLinkModal(false);
|
|
11048
|
+
}, []);
|
|
11049
|
+
const handleLinkSubmit = useCallback4(() => {
|
|
11050
|
+
if (!linkUrl.trim() || !quill) return;
|
|
11051
|
+
const url = linkUrl.trim();
|
|
11052
|
+
const selection = quill.getSelection();
|
|
11053
|
+
if (selection && selection.length > 0) {
|
|
11054
|
+
quill.format("link", url);
|
|
11055
|
+
} else {
|
|
11056
|
+
const index = quill.getLength();
|
|
11057
|
+
quill.insertText(index, url, "link", url);
|
|
11058
|
+
quill.setSelection(index + url.length, 0);
|
|
11059
|
+
}
|
|
11060
|
+
setLinkUrl("");
|
|
11061
|
+
setShowLinkModal(false);
|
|
11062
|
+
}, [linkUrl, quill]);
|
|
11063
|
+
const handleVideoCancel = useCallback4(() => {
|
|
11064
|
+
setVideoUrl("");
|
|
11065
|
+
setShowVideoModal(false);
|
|
11066
|
+
}, []);
|
|
11067
|
+
const handleVideoSubmit = useCallback4(() => {
|
|
11068
|
+
var _a, _b;
|
|
11069
|
+
if (!videoUrl.trim() || !quill) return;
|
|
11070
|
+
let processedUrl = videoUrl.trim();
|
|
11071
|
+
if (processedUrl.includes("youtube.com/watch")) {
|
|
11072
|
+
const videoId = (_a = processedUrl.match(/[?&]v=([^&]+)/)) == null ? void 0 : _a[1];
|
|
11073
|
+
if (videoId) {
|
|
11074
|
+
processedUrl = `https://www.youtube.com/embed/${videoId}`;
|
|
11075
|
+
}
|
|
11076
|
+
} else if (processedUrl.includes("youtu.be/")) {
|
|
11077
|
+
const videoId = (_b = processedUrl.split("youtu.be/")[1]) == null ? void 0 : _b.split("?")[0];
|
|
11078
|
+
if (videoId) {
|
|
11079
|
+
processedUrl = `https://www.youtube.com/embed/${videoId}`;
|
|
11080
|
+
}
|
|
11081
|
+
}
|
|
11082
|
+
const videoHTML = `
|
|
11083
|
+
<iframe
|
|
11084
|
+
src="${processedUrl}"
|
|
11085
|
+
style="max-width:100%; height:315px; border:0;"
|
|
11086
|
+
title="Video player"
|
|
11087
|
+
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
|
|
11088
|
+
allowfullscreen>
|
|
11089
|
+
</iframe>
|
|
11090
|
+
<br/>
|
|
11091
|
+
`;
|
|
11092
|
+
const selection = quill.getSelection();
|
|
11093
|
+
const insertIndex = selection ? selection.index : quill.getLength();
|
|
11094
|
+
quill.clipboard.dangerouslyPasteHTML(insertIndex, videoHTML);
|
|
11095
|
+
quill.setSelection(insertIndex + 1, 0);
|
|
11096
|
+
setVideoUrl("");
|
|
11097
|
+
setShowVideoModal(false);
|
|
11098
|
+
}, [videoUrl, quill]);
|
|
11099
|
+
useEffect5(() => {
|
|
11100
|
+
const handleClickOutside = (event) => {
|
|
11101
|
+
if (showVideoModal && videoModalRef.current && !videoModalRef.current.contains(event.target)) {
|
|
11102
|
+
handleVideoCancel();
|
|
11103
|
+
}
|
|
11104
|
+
if (showLinkModal && linkModalRef.current && !linkModalRef.current.contains(event.target)) {
|
|
11105
|
+
handleLinkCancel();
|
|
11106
|
+
}
|
|
11107
|
+
};
|
|
11108
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
11109
|
+
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
11110
|
+
}, [showVideoModal, showLinkModal, handleVideoCancel, handleLinkCancel]);
|
|
11111
|
+
return /* @__PURE__ */ jsx50(QuillContainer, { className, children: /* @__PURE__ */ jsxs25(QuillEditor, { style: { position: "relative" }, children: [
|
|
11112
|
+
/* @__PURE__ */ jsx50("div", { ref: quillRef }),
|
|
11113
|
+
showVideoModal && /* @__PURE__ */ jsx50(
|
|
11114
|
+
"div",
|
|
11115
|
+
{
|
|
11116
|
+
ref: videoModalRef,
|
|
11117
|
+
style: {
|
|
11118
|
+
position: "absolute",
|
|
11119
|
+
top: "20px",
|
|
11120
|
+
left: "20px",
|
|
11121
|
+
right: "20px",
|
|
11122
|
+
backgroundColor: "white",
|
|
11123
|
+
border: "1px solid #e0e0e0",
|
|
11124
|
+
borderRadius: "4px",
|
|
11125
|
+
padding: "12px",
|
|
11126
|
+
boxShadow: "0 2px 8px rgba(0,0,0,0.1)",
|
|
11127
|
+
zIndex: 1e3,
|
|
11128
|
+
width: "fit-content"
|
|
11129
|
+
},
|
|
11130
|
+
children: /* @__PURE__ */ jsxs25(Flex2, { gap: 8, align: "center", children: [
|
|
11131
|
+
/* @__PURE__ */ jsx50(
|
|
11132
|
+
Text,
|
|
11133
|
+
{
|
|
11134
|
+
style: { fontSize: "14px", fontWeight: "500", color: "#333" },
|
|
11135
|
+
children: "V\xEDdeo:"
|
|
11136
|
+
}
|
|
11137
|
+
),
|
|
11138
|
+
/* @__PURE__ */ jsx50(
|
|
11139
|
+
"input",
|
|
11140
|
+
{
|
|
11141
|
+
type: "text",
|
|
11142
|
+
value: videoUrl,
|
|
11143
|
+
onChange: (e) => setVideoUrl(e.target.value),
|
|
11144
|
+
placeholder: "Embed URL",
|
|
11145
|
+
style: {
|
|
11146
|
+
padding: "8px 12px",
|
|
11147
|
+
border: "1px solid #d0d0d0",
|
|
11148
|
+
borderRadius: "4px",
|
|
11149
|
+
fontSize: "14px",
|
|
11150
|
+
backgroundColor: "#f8f8f8"
|
|
11151
|
+
},
|
|
11152
|
+
onKeyDown: (e) => {
|
|
11153
|
+
if (e.key === "Enter") {
|
|
11154
|
+
handleVideoSubmit();
|
|
11155
|
+
} else if (e.key === "Escape") {
|
|
11156
|
+
handleVideoCancel();
|
|
11157
|
+
}
|
|
11158
|
+
},
|
|
11159
|
+
autoFocus: true
|
|
11160
|
+
}
|
|
11161
|
+
),
|
|
11162
|
+
/* @__PURE__ */ jsx50(
|
|
11163
|
+
"button",
|
|
11164
|
+
{
|
|
11165
|
+
onClick: handleVideoSubmit,
|
|
11166
|
+
disabled: !videoUrl.trim(),
|
|
11167
|
+
style: {
|
|
11168
|
+
padding: "8px 16px",
|
|
11169
|
+
backgroundColor: "#007bff",
|
|
11170
|
+
color: "white",
|
|
11171
|
+
border: "none",
|
|
11172
|
+
borderRadius: "4px",
|
|
11173
|
+
fontSize: "14px",
|
|
11174
|
+
cursor: videoUrl.trim() ? "pointer" : "not-allowed",
|
|
11175
|
+
opacity: videoUrl.trim() ? 1 : 0.6
|
|
11176
|
+
},
|
|
11177
|
+
children: "Ok"
|
|
11178
|
+
}
|
|
11179
|
+
)
|
|
11180
|
+
] })
|
|
11181
|
+
}
|
|
11182
|
+
),
|
|
11183
|
+
showLinkModal && /* @__PURE__ */ jsx50(
|
|
11184
|
+
"div",
|
|
11185
|
+
{
|
|
11186
|
+
ref: linkModalRef,
|
|
11187
|
+
style: {
|
|
11188
|
+
position: "absolute",
|
|
11189
|
+
top: "20px",
|
|
11190
|
+
left: "20px",
|
|
11191
|
+
right: "20px",
|
|
11192
|
+
backgroundColor: "white",
|
|
11193
|
+
border: "1px solid #e0e0e0",
|
|
11194
|
+
borderRadius: "4px",
|
|
11195
|
+
padding: "12px",
|
|
11196
|
+
boxShadow: "0 2px 8px rgba(0,0,0,0.1)",
|
|
11197
|
+
zIndex: 1e3,
|
|
11198
|
+
width: "fit-content"
|
|
11199
|
+
},
|
|
11200
|
+
children: /* @__PURE__ */ jsxs25(Flex2, { gap: 8, align: "center", children: [
|
|
11201
|
+
/* @__PURE__ */ jsx50(
|
|
11202
|
+
Text,
|
|
11203
|
+
{
|
|
11204
|
+
style: { fontSize: "14px", fontWeight: "500", color: "#333" },
|
|
11205
|
+
children: "Link:"
|
|
11206
|
+
}
|
|
11207
|
+
),
|
|
11208
|
+
/* @__PURE__ */ jsx50(
|
|
11209
|
+
"input",
|
|
11210
|
+
{
|
|
11211
|
+
type: "text",
|
|
11212
|
+
value: linkUrl,
|
|
11213
|
+
onChange: (e) => setLinkUrl(e.target.value),
|
|
11214
|
+
placeholder: "URL do link",
|
|
11215
|
+
style: {
|
|
11216
|
+
padding: "8px 12px",
|
|
11217
|
+
border: "1px solid #d0d0d0",
|
|
11218
|
+
borderRadius: "4px",
|
|
11219
|
+
fontSize: "14px",
|
|
11220
|
+
backgroundColor: "#f8f8f8",
|
|
11221
|
+
width: "300px"
|
|
11222
|
+
},
|
|
11223
|
+
onKeyDown: (e) => {
|
|
11224
|
+
if (e.key === "Enter") {
|
|
11225
|
+
handleLinkSubmit();
|
|
11226
|
+
} else if (e.key === "Escape") {
|
|
11227
|
+
handleLinkCancel();
|
|
11228
|
+
}
|
|
11229
|
+
},
|
|
11230
|
+
autoFocus: true
|
|
11231
|
+
}
|
|
11232
|
+
),
|
|
11233
|
+
/* @__PURE__ */ jsx50(
|
|
11234
|
+
"button",
|
|
11235
|
+
{
|
|
11236
|
+
onClick: handleLinkSubmit,
|
|
11237
|
+
disabled: !linkUrl.trim(),
|
|
11238
|
+
style: {
|
|
11239
|
+
padding: "8px 16px",
|
|
11240
|
+
backgroundColor: "#007bff",
|
|
11241
|
+
color: "white",
|
|
11242
|
+
border: "none",
|
|
11243
|
+
borderRadius: "4px",
|
|
11244
|
+
fontSize: "14px",
|
|
11245
|
+
cursor: linkUrl.trim() ? "pointer" : "not-allowed",
|
|
11246
|
+
opacity: linkUrl.trim() ? 1 : 0.6
|
|
11247
|
+
},
|
|
11248
|
+
children: "Ok"
|
|
11249
|
+
}
|
|
11250
|
+
)
|
|
11251
|
+
] })
|
|
11252
|
+
}
|
|
11253
|
+
)
|
|
11254
|
+
] }) });
|
|
11255
|
+
};
|
|
11256
|
+
var QuillComponent_default = QuillComponent;
|
|
11257
|
+
|
|
11258
|
+
// src/components/RichEditor/RichEditor.tsx
|
|
11259
|
+
import { jsx as jsx51 } from "react/jsx-runtime";
|
|
11260
|
+
var RichEditor = (props) => {
|
|
11261
|
+
return /* @__PURE__ */ jsx51("div", { children: /* @__PURE__ */ jsx51(ToastProvider, { children: /* @__PURE__ */ jsx51(QuillComponent_default, __spreadValues({}, props)) }) });
|
|
11262
|
+
};
|
|
11263
|
+
var RichEditor_default = RichEditor;
|
|
11264
|
+
|
|
11265
|
+
// src/components/FormFields/RichEditorFormField.tsx
|
|
11266
|
+
import { jsx as jsx52, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
11267
|
+
var RichEditorFormField = (_a) => {
|
|
11268
|
+
var _b = _a, {
|
|
11269
|
+
name,
|
|
11270
|
+
label,
|
|
11271
|
+
required,
|
|
11272
|
+
validate,
|
|
11273
|
+
validationErrorMessage = "Este campo \xE9 obrigat\xF3rio."
|
|
11274
|
+
} = _b, props = __objRest(_b, [
|
|
11275
|
+
"name",
|
|
11276
|
+
"label",
|
|
11277
|
+
"required",
|
|
11278
|
+
"validate",
|
|
11279
|
+
"validationErrorMessage"
|
|
11280
|
+
]);
|
|
11281
|
+
const { field, fieldState } = useController3({
|
|
11282
|
+
name,
|
|
11283
|
+
rules: {
|
|
11284
|
+
required: required ? validationErrorMessage : false,
|
|
11285
|
+
validate: (value) => {
|
|
11286
|
+
var _a2;
|
|
11287
|
+
if (value === void 0 || value === null || !required && value.trim() === "")
|
|
11288
|
+
return true;
|
|
11289
|
+
return (_a2 = validate == null ? void 0 : validate(value)) != null ? _a2 : true;
|
|
11290
|
+
}
|
|
11291
|
+
},
|
|
11292
|
+
defaultValue: ""
|
|
11293
|
+
});
|
|
11294
|
+
const fieldError = fieldState.error;
|
|
11295
|
+
const haveError = !!fieldError;
|
|
11296
|
+
const errorMsg = fieldError == null ? void 0 : fieldError.message;
|
|
11297
|
+
return /* @__PURE__ */ jsxs26(Flex2, { direction: "column", children: [
|
|
11298
|
+
label && /* @__PURE__ */ jsx52(
|
|
11299
|
+
FormLabel,
|
|
11300
|
+
{
|
|
11301
|
+
name,
|
|
11302
|
+
label,
|
|
11303
|
+
required,
|
|
11304
|
+
haveError
|
|
11305
|
+
}
|
|
11306
|
+
),
|
|
11307
|
+
/* @__PURE__ */ jsx52(
|
|
11308
|
+
RichEditor_default,
|
|
11309
|
+
__spreadProps(__spreadValues({}, props), {
|
|
11310
|
+
value: field.value,
|
|
11311
|
+
onChange: field.onChange,
|
|
11312
|
+
"aria-labelledby": `${name}-label`
|
|
11313
|
+
})
|
|
11314
|
+
),
|
|
11315
|
+
/* @__PURE__ */ jsx52(ErrorFormMessage, { message: errorMsg })
|
|
11316
|
+
] });
|
|
11317
|
+
};
|
|
11318
|
+
|
|
11319
|
+
// src/components/FormFields/CalendarFormField.tsx
|
|
11320
|
+
import { useController as useController4 } from "react-hook-form";
|
|
11321
|
+
import { useCallback as useCallback5 } from "react";
|
|
11322
|
+
import { jsx as jsx53, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
11323
|
+
var CalendarFormField = (_a) => {
|
|
11324
|
+
var _b = _a, {
|
|
11325
|
+
name,
|
|
11326
|
+
label,
|
|
11327
|
+
required,
|
|
11328
|
+
validate,
|
|
11329
|
+
validationErrorMessage = "Este campo \xE9 obrigat\xF3rio.",
|
|
11330
|
+
rules,
|
|
11331
|
+
onChange
|
|
11332
|
+
} = _b, calendarProps = __objRest(_b, [
|
|
11333
|
+
"name",
|
|
11334
|
+
"label",
|
|
11335
|
+
"required",
|
|
11336
|
+
"validate",
|
|
11337
|
+
"validationErrorMessage",
|
|
11338
|
+
"rules",
|
|
11339
|
+
"onChange"
|
|
11340
|
+
]);
|
|
11341
|
+
const handleValidate = useCallback5(
|
|
11342
|
+
(value) => {
|
|
11343
|
+
var _a2;
|
|
11344
|
+
if (value === void 0 || value === null) {
|
|
11345
|
+
if (required) return validationErrorMessage;
|
|
11346
|
+
return true;
|
|
11347
|
+
}
|
|
11348
|
+
return (_a2 = validate == null ? void 0 : validate(value)) != null ? _a2 : true;
|
|
11349
|
+
},
|
|
11350
|
+
[validate, required, validationErrorMessage]
|
|
11351
|
+
);
|
|
11352
|
+
const { field, fieldState } = useController4({
|
|
11353
|
+
name,
|
|
11354
|
+
rules: __spreadValues({
|
|
11355
|
+
required: required ? validationErrorMessage : false,
|
|
11356
|
+
validate: handleValidate
|
|
11357
|
+
}, rules),
|
|
11358
|
+
defaultValue: void 0
|
|
11359
|
+
});
|
|
11360
|
+
const fieldError = fieldState.error;
|
|
11361
|
+
const haveError = !!fieldError;
|
|
11362
|
+
const errorMsg = fieldError == null ? void 0 : fieldError.message;
|
|
11363
|
+
const { value: selected, onChange: setSelected } = field;
|
|
11364
|
+
const handleCalendarChange = (date) => {
|
|
11365
|
+
setSelected(date);
|
|
11366
|
+
};
|
|
11367
|
+
return /* @__PURE__ */ jsxs27(Flex2, { direction: "column", children: [
|
|
11368
|
+
label && /* @__PURE__ */ jsx53(
|
|
11369
|
+
FormLabel,
|
|
11370
|
+
{
|
|
11371
|
+
name,
|
|
11372
|
+
label,
|
|
11373
|
+
required,
|
|
11374
|
+
haveError
|
|
11375
|
+
}
|
|
11376
|
+
),
|
|
11377
|
+
/* @__PURE__ */ jsx53(
|
|
11378
|
+
Calendar,
|
|
11379
|
+
__spreadValues({
|
|
11380
|
+
selected,
|
|
11381
|
+
setSelected: (value) => {
|
|
11382
|
+
const date = typeof value === "function" ? value(selected) : value;
|
|
11383
|
+
handleCalendarChange(date);
|
|
11384
|
+
},
|
|
11385
|
+
hasError: haveError
|
|
11386
|
+
}, calendarProps)
|
|
11387
|
+
),
|
|
11388
|
+
/* @__PURE__ */ jsx53(ErrorFormMessage, { message: errorMsg })
|
|
11389
|
+
] });
|
|
11390
|
+
};
|
|
11391
|
+
|
|
11392
|
+
// src/components/FormFields/TimePickerFormField.tsx
|
|
11393
|
+
import { useController as useController5 } from "react-hook-form";
|
|
11394
|
+
import { useCallback as useCallback6 } from "react";
|
|
11395
|
+
import { jsx as jsx54, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
11396
|
+
var TimePickerFormField = (_a) => {
|
|
11397
|
+
var _b = _a, {
|
|
11398
|
+
name,
|
|
11399
|
+
label,
|
|
11400
|
+
required,
|
|
11401
|
+
validate,
|
|
11402
|
+
validationErrorMessage = "Este campo \xE9 obrigat\xF3rio.",
|
|
11403
|
+
rules
|
|
11404
|
+
} = _b, timePickerProps = __objRest(_b, [
|
|
11405
|
+
"name",
|
|
11406
|
+
"label",
|
|
11407
|
+
"required",
|
|
11408
|
+
"validate",
|
|
11409
|
+
"validationErrorMessage",
|
|
11410
|
+
"rules"
|
|
11411
|
+
]);
|
|
11412
|
+
const handleValidate = useCallback6(
|
|
11413
|
+
(value) => {
|
|
11414
|
+
var _a2;
|
|
11415
|
+
if (value === void 0 || value === null || value === "") {
|
|
11416
|
+
if (required) return validationErrorMessage;
|
|
11417
|
+
return true;
|
|
11418
|
+
}
|
|
11419
|
+
return (_a2 = validate == null ? void 0 : validate(value)) != null ? _a2 : true;
|
|
11420
|
+
},
|
|
11421
|
+
[validate, required, validationErrorMessage]
|
|
11422
|
+
);
|
|
11423
|
+
const { field, fieldState } = useController5({
|
|
11424
|
+
name,
|
|
11425
|
+
rules: __spreadValues({
|
|
11426
|
+
required: required ? validationErrorMessage : false,
|
|
11427
|
+
validate: handleValidate
|
|
11428
|
+
}, rules),
|
|
11429
|
+
defaultValue: void 0
|
|
11430
|
+
});
|
|
11431
|
+
const fieldError = fieldState.error;
|
|
11432
|
+
const haveError = !!fieldError;
|
|
11433
|
+
const errorMsg = fieldError == null ? void 0 : fieldError.message;
|
|
11434
|
+
const { value: selected, onChange: setSelected } = field;
|
|
11435
|
+
const handleTimePickerChange = (time) => {
|
|
11436
|
+
setSelected(time);
|
|
11437
|
+
};
|
|
11438
|
+
return /* @__PURE__ */ jsxs28(Flex2, { direction: "column", children: [
|
|
11439
|
+
label && /* @__PURE__ */ jsx54(
|
|
11440
|
+
FormLabel,
|
|
11441
|
+
{
|
|
11442
|
+
name,
|
|
11443
|
+
label,
|
|
11444
|
+
required,
|
|
11445
|
+
haveError
|
|
11446
|
+
}
|
|
11447
|
+
),
|
|
11448
|
+
/* @__PURE__ */ jsx54(
|
|
11449
|
+
TimePicker,
|
|
11450
|
+
__spreadValues({
|
|
11451
|
+
selected,
|
|
11452
|
+
setSelected: (value) => {
|
|
11453
|
+
const time = typeof value === "function" ? value(selected) : value;
|
|
11454
|
+
handleTimePickerChange(time);
|
|
11455
|
+
},
|
|
11456
|
+
hasError: haveError
|
|
11457
|
+
}, timePickerProps)
|
|
11458
|
+
),
|
|
11459
|
+
/* @__PURE__ */ jsx54(ErrorFormMessage, { message: errorMsg })
|
|
11460
|
+
] });
|
|
11461
|
+
};
|
|
11462
|
+
|
|
11463
|
+
// src/hooks/useImageUpload.ts
|
|
11464
|
+
import { useState as useState9, useCallback as useCallback7 } from "react";
|
|
11465
|
+
var useImageUpload = (options) => {
|
|
11466
|
+
const [isUploading, setIsUploading] = useState9(false);
|
|
11467
|
+
const [progress, setProgress] = useState9(null);
|
|
11468
|
+
const [error, setError] = useState9(null);
|
|
11469
|
+
const {
|
|
11470
|
+
onSuccess,
|
|
11471
|
+
onError,
|
|
11472
|
+
onProgress,
|
|
11473
|
+
maxFileSize = 5 * 1024 * 1024,
|
|
11474
|
+
// 5MB default
|
|
11475
|
+
allowedTypes = ["image/jpeg", "image/png", "image/gif", "image/webp"],
|
|
11476
|
+
uploadConfig
|
|
11477
|
+
} = options;
|
|
11478
|
+
const validateFile = useCallback7(
|
|
11479
|
+
(file) => {
|
|
11480
|
+
if (!allowedTypes.includes(file.type)) {
|
|
11481
|
+
const errorMsg = "Tipo de arquivo n\xE3o suportado";
|
|
11482
|
+
setError(errorMsg);
|
|
11483
|
+
onError == null ? void 0 : onError(errorMsg);
|
|
11484
|
+
return false;
|
|
11485
|
+
}
|
|
11486
|
+
if (file.size > maxFileSize) {
|
|
11487
|
+
const errorMsg = `Arquivo muito grande. M\xE1ximo: ${(maxFileSize / 1024 / 1024).toFixed(1)}MB`;
|
|
11488
|
+
setError(errorMsg);
|
|
11489
|
+
onError == null ? void 0 : onError(errorMsg);
|
|
11490
|
+
return false;
|
|
11491
|
+
}
|
|
11492
|
+
return true;
|
|
11493
|
+
},
|
|
11494
|
+
[allowedTypes, maxFileSize, onError]
|
|
11495
|
+
);
|
|
11496
|
+
const uploadFile = useCallback7(
|
|
11497
|
+
(file) => __async(null, null, function* () {
|
|
11498
|
+
if (!validateFile(file)) {
|
|
11499
|
+
return null;
|
|
11500
|
+
}
|
|
11501
|
+
setIsUploading(true);
|
|
11502
|
+
setError(null);
|
|
11503
|
+
setProgress(null);
|
|
11504
|
+
try {
|
|
11505
|
+
const uploadedFile = yield UploadService.uploadToS3(
|
|
11506
|
+
file,
|
|
11507
|
+
uploadConfig,
|
|
11508
|
+
(progress2) => {
|
|
11509
|
+
setProgress(progress2);
|
|
11510
|
+
onProgress == null ? void 0 : onProgress(progress2);
|
|
11511
|
+
}
|
|
11512
|
+
);
|
|
11513
|
+
setIsUploading(false);
|
|
11514
|
+
setProgress(null);
|
|
11515
|
+
onSuccess == null ? void 0 : onSuccess(uploadedFile);
|
|
11516
|
+
return uploadedFile;
|
|
11517
|
+
} catch (error2) {
|
|
11518
|
+
console.error("Erro no upload S3:", error2);
|
|
11519
|
+
try {
|
|
11520
|
+
setProgress({
|
|
11521
|
+
amount: 0,
|
|
11522
|
+
message: "Tentando m\xE9todo alternativo..."
|
|
11523
|
+
});
|
|
11524
|
+
const uploadedFile = yield UploadService.uploadViaAPI(
|
|
11525
|
+
file,
|
|
11526
|
+
uploadConfig,
|
|
11527
|
+
(progress2) => {
|
|
11528
|
+
setProgress(progress2);
|
|
11529
|
+
onProgress == null ? void 0 : onProgress(progress2);
|
|
11530
|
+
}
|
|
11531
|
+
);
|
|
11532
|
+
setIsUploading(false);
|
|
11533
|
+
setProgress(null);
|
|
11534
|
+
onSuccess == null ? void 0 : onSuccess(uploadedFile);
|
|
11535
|
+
return uploadedFile;
|
|
11536
|
+
} catch (fallbackError) {
|
|
11537
|
+
console.error("Erro no fallback:", fallbackError);
|
|
11538
|
+
const errorMsg = "Falha no upload da imagem. Tente novamente.";
|
|
11539
|
+
setError(errorMsg);
|
|
11540
|
+
setIsUploading(false);
|
|
11541
|
+
setProgress(null);
|
|
11542
|
+
onError == null ? void 0 : onError(errorMsg);
|
|
11543
|
+
return null;
|
|
11544
|
+
}
|
|
11545
|
+
}
|
|
11546
|
+
}),
|
|
11547
|
+
[validateFile, onSuccess, onError, onProgress]
|
|
11548
|
+
);
|
|
11549
|
+
const reset = useCallback7(() => {
|
|
11550
|
+
setIsUploading(false);
|
|
11551
|
+
setProgress(null);
|
|
11552
|
+
setError(null);
|
|
11553
|
+
}, []);
|
|
11554
|
+
return {
|
|
11555
|
+
uploadFile,
|
|
11556
|
+
isUploading,
|
|
11557
|
+
progress,
|
|
11558
|
+
error,
|
|
11559
|
+
reset
|
|
11560
|
+
};
|
|
11561
|
+
};
|
|
10825
11562
|
export {
|
|
10826
11563
|
AddressFormFields,
|
|
10827
11564
|
Alert,
|
|
@@ -10846,6 +11583,7 @@ export {
|
|
|
10846
11583
|
CNPJFormField,
|
|
10847
11584
|
CPFFormField,
|
|
10848
11585
|
Calendar,
|
|
11586
|
+
CalendarFormField,
|
|
10849
11587
|
Card,
|
|
10850
11588
|
CardStyled,
|
|
10851
11589
|
CheckboxGroup,
|
|
@@ -10880,6 +11618,8 @@ export {
|
|
|
10880
11618
|
RadioGroupFormField,
|
|
10881
11619
|
RadioGroupStyled,
|
|
10882
11620
|
RadioItem,
|
|
11621
|
+
RichEditor_default as RichEditor,
|
|
11622
|
+
RichEditorFormField,
|
|
10883
11623
|
Section,
|
|
10884
11624
|
SectionStyled,
|
|
10885
11625
|
SelectFormField,
|
|
@@ -10905,6 +11645,7 @@ export {
|
|
|
10905
11645
|
TimePickerButtonStyled,
|
|
10906
11646
|
TimePickerDropdownStyled,
|
|
10907
11647
|
TimePickerFooterStyled,
|
|
11648
|
+
TimePickerFormField,
|
|
10908
11649
|
TimePickerStyled,
|
|
10909
11650
|
TimerPickerContentStyled,
|
|
10910
11651
|
ToastItem,
|
|
@@ -10914,23 +11655,15 @@ export {
|
|
|
10914
11655
|
TooltipProvider,
|
|
10915
11656
|
TooltipRoot,
|
|
10916
11657
|
TooltipTrigger,
|
|
11658
|
+
UploadService,
|
|
10917
11659
|
isValidCNPJ,
|
|
10918
11660
|
maskFormat,
|
|
10919
11661
|
maskUnformat,
|
|
11662
|
+
useImageUpload,
|
|
10920
11663
|
useToast
|
|
10921
11664
|
};
|
|
10922
11665
|
/*! Bundled license information:
|
|
10923
11666
|
|
|
10924
|
-
react-is/cjs/react-is.production.min.js:
|
|
10925
|
-
(** @license React v16.13.1
|
|
10926
|
-
* react-is.production.min.js
|
|
10927
|
-
*
|
|
10928
|
-
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
10929
|
-
*
|
|
10930
|
-
* This source code is licensed under the MIT license found in the
|
|
10931
|
-
* LICENSE file in the root directory of this source tree.
|
|
10932
|
-
*)
|
|
10933
|
-
|
|
10934
11667
|
react-is/cjs/react-is.development.js:
|
|
10935
11668
|
(** @license React v16.13.1
|
|
10936
11669
|
* react-is.development.js
|