@yeverlibs/ds 1.1.13 → 1.1.15

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/dist/index.js CHANGED
@@ -6,21 +6,19 @@ var React107 = require('react');
6
6
  var navigation = require('next/navigation');
7
7
  var jsxRuntime = require('react/jsx-runtime');
8
8
  var tw5 = require('tailwind-styled-components');
9
- var Image4 = require('next/image');
9
+ var Image3 = require('next/image');
10
10
  var ReactDOM = require('react-dom');
11
- var sonner = require('sonner');
12
- var cache = require('next/cache');
13
- var headers = require('next/headers');
14
- var Cookies = require('js-cookie');
15
11
  var Select = require('react-select');
16
12
  var dateFns = require('date-fns');
17
13
  var locale = require('date-fns/locale');
18
14
  var reactHookForm = require('react-hook-form');
19
15
  var Link2 = require('next/link');
20
16
  var framerMotion = require('framer-motion');
17
+ var sonner = require('sonner');
21
18
  var bar = require('@nivo/bar');
22
19
  var line = require('@nivo/line');
23
20
  var pie = require('@nivo/pie');
21
+ var Cookies = require('js-cookie');
24
22
  var currency = require('currency.js');
25
23
 
26
24
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -45,11 +43,11 @@ function _interopNamespace(e) {
45
43
 
46
44
  var React107__namespace = /*#__PURE__*/_interopNamespace(React107);
47
45
  var tw5__default = /*#__PURE__*/_interopDefault(tw5);
48
- var Image4__default = /*#__PURE__*/_interopDefault(Image4);
46
+ var Image3__default = /*#__PURE__*/_interopDefault(Image3);
49
47
  var ReactDOM__default = /*#__PURE__*/_interopDefault(ReactDOM);
50
- var Cookies__default = /*#__PURE__*/_interopDefault(Cookies);
51
48
  var Select__default = /*#__PURE__*/_interopDefault(Select);
52
49
  var Link2__default = /*#__PURE__*/_interopDefault(Link2);
50
+ var Cookies__default = /*#__PURE__*/_interopDefault(Cookies);
53
51
  var currency__default = /*#__PURE__*/_interopDefault(currency);
54
52
 
55
53
  // src/lib/utils.ts
@@ -3435,7 +3433,7 @@ var Avatar = ({ name, src, size = "large", className }) => {
3435
3433
  size === "xlarge" && "h-[44px] min-w-[44px]",
3436
3434
  className
3437
3435
  ),
3438
- children: src ? /* @__PURE__ */ jsxRuntime.jsx(Image4__default.default, { src, alt: name || "Avatar", layout: "fill", className: "object-cover" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("font-medium text-white", size === "small" && "text-xs", size === "large" && "text-2xl"), children: getInitials(name) }) })
3436
+ children: src ? /* @__PURE__ */ jsxRuntime.jsx(Image3__default.default, { src, alt: name || "Avatar", layout: "fill", className: "object-cover" }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full w-full items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("font-medium text-white", size === "small" && "text-xs", size === "large" && "text-2xl"), children: getInitials(name) }) })
3439
3437
  }
3440
3438
  );
3441
3439
  };
@@ -3960,603 +3958,142 @@ var CheckboxGroup = ({
3960
3958
  ] });
3961
3959
  };
3962
3960
  var checkbox_group_default = CheckboxGroup;
3963
- var ModalContainer = ({ isOpen, onClose, className, children }) => {
3964
- const [isVisible, setIsVisible] = React107.useState(false);
3965
- const [isMounted, setIsMounted] = React107.useState(false);
3966
- React107.useEffect(() => {
3967
- setIsMounted(true);
3968
- }, []);
3969
- React107.useEffect(() => {
3970
- if (isOpen) {
3971
- document.documentElement.classList.add("no-scroll-modal");
3972
- setIsVisible(true);
3973
- } else {
3974
- document.documentElement.classList.remove("no-scroll-modal");
3975
- setIsVisible(false);
3961
+ var DropdownContext = React107.createContext({
3962
+ isOpen: false,
3963
+ toggleDropdown: () => void 0,
3964
+ closeDropdown: () => void 0
3965
+ });
3966
+ var DropdownContainer = ({ children, ...props }) => {
3967
+ return /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "relative", ...props, children });
3968
+ };
3969
+ var ButtonAction = ({ children, ...props }) => {
3970
+ const context = React107.useContext(DropdownContext);
3971
+ if (!context) {
3972
+ throw new Error("Button must be used within a ButtonTrigger");
3973
+ }
3974
+ const { toggleDropdown } = context;
3975
+ return /* @__PURE__ */ jsxRuntime.jsx(
3976
+ Button,
3977
+ {
3978
+ $variant: "tertiary",
3979
+ className: "hover:bg-transparent min-h-8 min-w-8 border-none p-0",
3980
+ onClick: toggleDropdown,
3981
+ ...props,
3982
+ children
3976
3983
  }
3977
- }, [isOpen]);
3984
+ );
3985
+ };
3986
+ var DropdownContent = ({ children, ...props }) => {
3987
+ const { className } = props;
3988
+ return /* @__PURE__ */ jsxRuntime.jsx(Box, { ...props, className: cn("absolute right-0 overflow-x-hidden !p-0", className), children });
3989
+ };
3990
+ var DropdownContentHeader = ({ children, ...props }) => {
3991
+ const { className } = props;
3992
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ...props, className: cn("border-b border-gray-300", className), children });
3993
+ };
3994
+ var DropdownContentFooter = ({ children, ...props }) => {
3995
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { ...props, children });
3996
+ };
3997
+ var DropdownTrigger = ({ children, ...props }) => {
3998
+ const [isOpen, setIsOpen] = React107.useState(false);
3999
+ const containerRef = React107.useRef(null);
4000
+ const toggleDropdown = () => {
4001
+ setIsOpen((prev) => !prev);
4002
+ };
4003
+ const closeDropdown = () => {
4004
+ setIsOpen(false);
4005
+ };
3978
4006
  React107.useEffect(() => {
3979
- const handleEsc = (event) => {
3980
- if (event.key === "Escape") {
3981
- onClose();
4007
+ const handleClickOutside = (event) => {
4008
+ if (containerRef.current && !containerRef.current.contains(event.target)) {
4009
+ closeDropdown();
3982
4010
  }
3983
4011
  };
3984
- window.addEventListener("keydown", handleEsc);
4012
+ document.addEventListener("mousedown", handleClickOutside);
3985
4013
  return () => {
3986
- window.removeEventListener("keydown", handleEsc);
4014
+ document.removeEventListener("mousedown", handleClickOutside);
3987
4015
  };
3988
- }, [onClose]);
3989
- if (!isMounted) return null;
3990
- const portalContainer = document.getElementById("portal-root");
3991
- if (!portalContainer) return null;
3992
- return ReactDOM__default.default.createPortal(
3993
- /* @__PURE__ */ jsxRuntime.jsxs(
3994
- "div",
3995
- {
3996
- className: cn(
3997
- "fixed inset-0 z-[60] flex items-center justify-center",
3998
- isOpen ? "opacity-100" : "opacity-0",
3999
- isVisible ? "pointer-events-auto" : "pointer-events-none",
4000
- "transition-opacity duration-300 md:mx-auto",
4001
- className
4002
- ),
4003
- children: [
4004
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed inset-0 bg-black bg-opacity-50", onClick: onClose }),
4005
- /* @__PURE__ */ jsxRuntime.jsx(
4006
- "div",
4007
- {
4008
- className: cn(
4009
- "shadow-lg z-10 w-full transform overflow-hidden rounded-lg bg-white transition-transform duration-300",
4010
- isOpen ? "scale-100" : "scale-95",
4011
- className ? className : "max-w-lg"
4012
- ),
4013
- style: { margin: "1rem" },
4014
- children
4015
- }
4016
- )
4017
- ]
4018
- }
4019
- ),
4020
- portalContainer
4021
- );
4016
+ }, [containerRef]);
4017
+ return /* @__PURE__ */ jsxRuntime.jsx(DropdownContext.Provider, { value: { isOpen, toggleDropdown, closeDropdown }, children: /* @__PURE__ */ jsxRuntime.jsx("div", { ref: containerRef, className: "relative w-full", ...props, children }) });
4022
4018
  };
4023
- var ModalHeader = ({ children, onClose, className = "" }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative flex items-center justify-between border-b border-gray-300 px-6 pb-4 pt-6", className), children: [
4024
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-between gap-3", children }),
4025
- /* @__PURE__ */ jsxRuntime.jsx(
4026
- Button,
4019
+ var DrowpdownButton = {
4020
+ Container: DropdownContainer,
4021
+ Button: ButtonAction,
4022
+ Content: DropdownContent,
4023
+ Header: DropdownContentHeader,
4024
+ Footer: DropdownContentFooter
4025
+ };
4026
+ var DropdownItens = ({ items }) => {
4027
+ return /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex w-full min-w-[230px] flex-col justify-end p-0 shadow-base", children: items.map((item, index) => {
4028
+ const isFirst = index === 0;
4029
+ const isLast = index === items.length - 1;
4030
+ const borderRadiusClass = isFirst ? "rounded-t-md" : isLast ? "rounded-b-md" : "!rounded-none";
4031
+ return React107__namespace.default.cloneElement(item, {
4032
+ className: `${item.props.className} ${borderRadiusClass} border-b border-gray-200`,
4033
+ key: index
4034
+ });
4035
+ }) });
4036
+ };
4037
+ var FeedbackBadge = ({
4038
+ children,
4039
+ $variant,
4040
+ customClassName,
4041
+ tagColor,
4042
+ tagTextColor,
4043
+ ...props
4044
+ }) => {
4045
+ const { onClick } = props;
4046
+ const inlineStyles = {
4047
+ backgroundColor: tagColor,
4048
+ color: tagTextColor,
4049
+ borderColor: tagColor
4050
+ };
4051
+ return /* @__PURE__ */ jsxRuntime.jsx(
4052
+ "div",
4027
4053
  {
4028
- onClick: onClose,
4029
- $variant: "tertiary",
4030
- className: "absolute right-4 top-4 w-auto border-none p-0",
4031
- type: "button",
4032
- children: /* @__PURE__ */ jsxRuntime.jsx(CloseIcon_default, {})
4054
+ className: cn(
4055
+ "flex w-fit items-center justify-center rounded border px-2 py-1 text-xs font-medium",
4056
+ onClick && "cursor-pointer",
4057
+ customClassName,
4058
+ {
4059
+ "border-green-100 bg-green-0 text-green-800": $variant === "success",
4060
+ "border-orange-100 bg-orange-0 text-orange-800": $variant === "warning",
4061
+ "border-yellow-600 bg-orange-0 text-orange-100": $variant === "risk",
4062
+ "border-red-100 bg-red-0 text-red-800": $variant === "error",
4063
+ "border-gray-300 bg-gray-0 text-black": $variant === "default",
4064
+ "cursor-pointer border-orange-1000 bg-orange-1000 font-bold text-white": $variant === "ribbon"
4065
+ }
4066
+ ),
4067
+ onClick,
4068
+ style: inlineStyles,
4069
+ ...props,
4070
+ children
4033
4071
  }
4034
- )
4035
- ] });
4036
- var ModalContent = ({ children, className = "" }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("px-8 py-6", className), children });
4037
- var ModalFooter = ({ children, className = "" }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex border-t border-gray-300 px-6 py-4", className), children });
4038
- var Modal = {
4039
- Container: ModalContainer,
4040
- Header: ModalHeader,
4041
- Content: ModalContent,
4042
- Footer: ModalFooter
4043
- };
4044
-
4045
- // src/_design-system/typography/heading/styles.ts
4046
- var headingStyles = {
4047
- h1: "text-2xl font-semibold text-black",
4048
- h2: "text-lg font-semibold text-black",
4049
- h3: "text-lg font-semibold text-black",
4050
- h4: "text-base font-semibold text-black",
4051
- h5: "text-sm font-semibold text-black",
4052
- h6: ""
4072
+ );
4053
4073
  };
4054
- var Heading = ({ $as: Tag, children, className = "", tooltip }) => {
4055
- return /* @__PURE__ */ jsxRuntime.jsxs(Tag, { className: cn(headingStyles[Tag], className, tooltip ? "flex items-center gap-2" : ""), children: [
4056
- children,
4057
- tooltip ? /* @__PURE__ */ jsxRuntime.jsx(Tooltip, { text: tooltip }) : null
4058
- ] });
4074
+ var FilterListContext = React107.createContext({
4075
+ isOpen: false,
4076
+ toggleDropdown: () => void 0,
4077
+ closeDropdown: () => void 0
4078
+ });
4079
+ var FilterContainer = ({ children }) => {
4080
+ return /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full p-0", children });
4059
4081
  };
4060
-
4061
- // src/_design-system/typography/text/styles.ts
4062
- var textStyles = {
4063
- p: "text-base font-normal text-gray-600",
4064
- span: "text-sm font-medium text-gray-600",
4065
- div: "",
4066
- small: "text-sm font-normal text-gray-600",
4067
- label: "text-sm font-medium text-gray-600"
4082
+ var FilterHeader = ({ children }) => {
4083
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-between rounded-t-lg border-b border-gray-300 bg-gray-0 p-4", children });
4068
4084
  };
4069
- var Text = ({ $as: Tag, children, className = "", ...props }) => {
4070
- const elementProps = {
4071
- className: cn(textStyles[Tag], className),
4072
- ...props
4073
- };
4074
- return /* @__PURE__ */ jsxRuntime.jsx(Tag, { ...elementProps, children });
4085
+ var FilterContent = ({ children }) => {
4086
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { id: "select-filters", className: "z-10 flex max-h-[280px] flex-col gap-4 overflow-y-auto p-6", children });
4075
4087
  };
4076
- async function handleFormSubmission({
4077
- id,
4078
- createAction,
4079
- updateAction,
4080
- customAction,
4081
- successMessages,
4082
- onSuccess
4083
- }) {
4084
- let result = null;
4085
- let message = null;
4086
- if (customAction) {
4087
- result = await customAction();
4088
- message = successMessages?.custom || "";
4089
- } else {
4090
- if (id) {
4091
- if (updateAction) {
4092
- result = await updateAction();
4093
- message = successMessages?.update || "";
4094
- }
4095
- } else {
4096
- if (createAction) {
4097
- result = await createAction();
4098
- message = successMessages?.create || "";
4099
- }
4100
- }
4101
- }
4102
- if (result && typeof result === "object") {
4103
- const errorData = result.props?.error || result.error;
4104
- if (errorData) {
4105
- if (errorData?.status === 422 && errorData?.errors) {
4106
- Object.values(errorData.errors).forEach((errorMessages) => {
4107
- if (Array.isArray(errorMessages)) {
4108
- errorMessages.forEach((message2) => {
4109
- if (message2.trim()) {
4110
- sonner.toast.error(message2.trim());
4111
- }
4112
- });
4113
- } else if (typeof errorMessages === "string") {
4114
- sonner.toast.error(errorMessages);
4115
- }
4116
- });
4117
- return null;
4118
- }
4119
- if (errorData?.message) {
4120
- sonner.toast.error(errorData.message);
4121
- return null;
4122
- }
4123
- }
4124
- }
4125
- if (message) {
4126
- sonner.toast.success(message);
4127
- }
4128
- if (onSuccess) {
4129
- onSuccess(result);
4130
- }
4131
- return result;
4132
- }
4133
- async function getCsrfToken() {
4134
- const baseURL = process.env.NEXT_PUBLIC_API_URL ?? "http://api.yever.local";
4135
- const response = await fetch(`${baseURL}/sanctum/csrf-cookie`, {
4136
- credentials: "include",
4137
- headers: {
4138
- "X-Requested-With": "XMLHttpRequest"
4139
- }
4140
- });
4141
- if (!response.ok) {
4142
- throw new Error("Falha ao obter token CSRF");
4143
- }
4144
- await new Promise((resolve) => setTimeout(resolve, 100));
4145
- }
4146
- async function apiFetch(options) {
4147
- const baseURL = process.env.NEXT_PUBLIC_API_URL ?? "";
4148
- const isAbsolute = /^https?:\/\//i.test(options.url);
4149
- const url = isAbsolute ? options.url : `${baseURL}${options.url}`;
4150
- const method = (options.method ?? "GET").toString().toLowerCase();
4151
- const needsCSRFToken = ["post", "put", "delete"].includes(method);
4152
- const hasCSRFCookie = Cookies__default.default.get("XSRF-TOKEN");
4153
- if (needsCSRFToken && !hasCSRFCookie) {
4154
- await getCsrfToken();
4155
- }
4156
- const defaultHeaders = {
4157
- "X-Requested-With": "XMLHttpRequest",
4158
- Accept: "application/json"
4159
- };
4160
- if (!(options.body instanceof FormData)) {
4161
- defaultHeaders["Content-Type"] = "application/json";
4162
- }
4163
- const finalHeaders = new Headers(defaultHeaders);
4164
- if (options.headers) {
4165
- if (options.headers instanceof Headers) {
4166
- options.headers.forEach((v, k) => finalHeaders.set(k, v));
4167
- } else {
4168
- Object.entries(options.headers).forEach(([k, v]) => {
4169
- if (v !== void 0) finalHeaders.set(k, v);
4170
- });
4171
- }
4172
- }
4173
- const csrfToken = Cookies__default.default.get("XSRF-TOKEN");
4174
- if (csrfToken) {
4175
- finalHeaders.set("X-XSRF-TOKEN", csrfToken);
4176
- }
4177
- let finalOptions = options;
4178
- if (options.body) {
4179
- finalOptions = {
4180
- ...options,
4181
- body: options.body instanceof FormData ? options.body : JSON.stringify(options.body)
4182
- };
4183
- }
4184
- let response = await fetch(url, {
4185
- credentials: "include",
4186
- headers: finalHeaders,
4187
- ...finalOptions
4188
- });
4189
- if (response.status === 419) {
4190
- Cookies__default.default.remove("XSRF-TOKEN");
4191
- await getCsrfToken();
4192
- const newToken = Cookies__default.default.get("XSRF-TOKEN");
4193
- if (newToken) {
4194
- finalHeaders.set("X-XSRF-TOKEN", newToken);
4195
- }
4196
- response = await fetch(url, {
4197
- credentials: "include",
4198
- headers: finalHeaders,
4199
- ...options
4200
- });
4201
- if (!response.ok) {
4202
- Cookies__default.default.remove("XSRF-TOKEN");
4203
- Cookies__default.default.remove("yeverClientUser");
4204
- window.location.href = "/login";
4205
- return Promise.reject(new Error("CSRF token expirado"));
4206
- }
4207
- }
4208
- const headers2 = {};
4209
- response.headers.forEach((value, key) => {
4210
- headers2[key] = value;
4211
- });
4212
- if (!response.ok) {
4213
- const data2 = await response.json().catch(() => null);
4214
- const errorMessage = typeof data2 === "object" && data2 !== null && "message" in data2 ? data2.message : "Request failed";
4215
- const error = new Error(errorMessage);
4216
- error.status = response.status;
4217
- error.response = {
4218
- data: data2,
4219
- status: response.status
4220
- };
4221
- throw error;
4222
- }
4223
- let data = null;
4224
- if (options.responseType === "blob") {
4225
- data = await response.blob().catch(() => null);
4226
- } else {
4227
- data = await response.json().catch(() => null);
4228
- }
4229
- return {
4230
- status: response.status,
4231
- statusText: response.statusText,
4232
- data,
4233
- headers: headers2
4234
- };
4235
- }
4236
-
4237
- // src/utils/parse-parameters-into-url/index.tsx
4238
- var parseParametersIntoUrl = (url, query, filtersAllowed) => {
4239
- let urlFiltered = url;
4240
- for (const key in query) {
4241
- if (query && Object.keys(query).length > 0) {
4242
- urlFiltered = urlFiltered.replace(`/${key}/`, `/${query[key]}/`);
4243
- urlFiltered = urlFiltered.replace(`/${key}`, `/${query[key]}`);
4244
- if (filtersAllowed && filtersAllowed.includes(key)) {
4245
- if (urlFiltered.includes("?")) {
4246
- if (key === "searchNew") {
4247
- urlFiltered = urlFiltered + `&${key}=${atob(query[key])}`;
4248
- } else {
4249
- urlFiltered = urlFiltered + `&${key}=${query[key]}`;
4250
- }
4251
- } else {
4252
- if (key === "searchNew") {
4253
- urlFiltered = urlFiltered + `?${key}=${atob(query[key])}`;
4254
- } else {
4255
- urlFiltered = urlFiltered + `?${key}=${query[key]}`;
4256
- }
4257
- }
4258
- }
4259
- }
4260
- }
4261
- return urlFiltered;
4262
- };
4263
-
4264
- // src/lib/fetch-server-side/index.ts
4265
- var fetchServerSide = async ({
4266
- urlRequest,
4267
- parseData,
4268
- filtersAllowed,
4269
- method = "GET",
4270
- body
4271
- }) => {
4272
- "use server";
4273
- try {
4274
- const headersObject = Object.fromEntries((await headers.headers()).entries());
4275
- const searchParams = new URLSearchParams(headersObject.referer ? new URL(headersObject.referer).search : "");
4276
- const query = Array.from(searchParams.entries()).reduce((acc, [key, value]) => {
4277
- acc[key] = value;
4278
- return acc;
4279
- }, {});
4280
- const url = parseParametersIntoUrl(urlRequest, query, filtersAllowed);
4281
- const origin = headersObject.host;
4282
- const cookie = headersObject.cookie;
4283
- const xsrfToken = cookie?.match(/XSRF-TOKEN=([^;]+)/)?.[1];
4284
- const requestHeaders = {
4285
- Cookie: cookie,
4286
- origin
4287
- };
4288
- if (xsrfToken) {
4289
- requestHeaders["X-XSRF-TOKEN"] = decodeURIComponent(xsrfToken);
4290
- }
4291
- let pagination;
4292
- const res = await apiFetch({
4293
- url,
4294
- method,
4295
- body,
4296
- headers: requestHeaders,
4297
- cache: "no-store"
4298
- });
4299
- if (res?.data && typeof res.data === "object" && "paginate" in res.data) {
4300
- pagination = res.data.paginate;
4301
- }
4302
- const parsedData = parseData ? parseData(res) : res;
4303
- return {
4304
- props: {
4305
- pagination,
4306
- data: parsedData
4307
- }
4308
- };
4309
- } catch (error) {
4310
- const apiError = error;
4311
- switch (apiError.response?.status) {
4312
- case 401:
4313
- navigation.redirect("/login");
4314
- case 403:
4315
- return {
4316
- props: {
4317
- error: {
4318
- status: 403,
4319
- message: "Voc\xEA n\xE3o tem permiss\xE3o para executar essa a\xE7\xE3o",
4320
- errors: {}
4321
- },
4322
- data: null
4323
- }
4324
- };
4325
- case 404:
4326
- return {
4327
- props: {
4328
- error: {
4329
- status: 404,
4330
- message: apiError.response.data?.message || "Recurso n\xE3o encontrado",
4331
- errors: apiError.response?.data?.errors || {}
4332
- },
4333
- data: null
4334
- }
4335
- };
4336
- case 422:
4337
- return {
4338
- props: {
4339
- error: {
4340
- status: 422,
4341
- message: apiError.response.data?.message || "Erro de valida\xE7\xE3o",
4342
- errors: apiError.response?.data?.errors
4343
- }
4344
- }
4345
- };
4346
- case 500:
4347
- return {
4348
- props: {
4349
- error: {
4350
- status: 500,
4351
- message: apiError.response.data?.message || "Ocorreu um erro durante o processamento dessa requisi\xE7\xE3o. A Yever foi notificada e estamos atuando para sanar o problema.",
4352
- errors: {}
4353
- }
4354
- }
4355
- };
4356
- default:
4357
- if (apiError.response?.data?.errors || apiError.response?.data?.message) {
4358
- return {
4359
- props: {
4360
- error: {
4361
- status: apiError.response.status,
4362
- message: apiError.response.data?.message,
4363
- errors: apiError.response.data?.errors
4364
- }
4365
- }
4366
- };
4367
- }
4368
- navigation.redirect("/500");
4369
- }
4370
- }
4371
- };
4372
-
4373
- // src/_design-system/delete-modal/_actions/index.ts
4374
- async function deleteFunc(endpoint, location) {
4375
- const response = await fetchServerSide({
4376
- urlRequest: endpoint,
4377
- method: "DELETE"
4378
- });
4379
- cache.revalidatePath(location);
4380
- return response;
4381
- }
4382
- var DeleteModal = ({
4383
- isModalOpen,
4384
- setIsModalOpen,
4385
- endpoint,
4386
- successMessage,
4387
- location,
4388
- title,
4389
- message,
4390
- onSuccess
4391
- }) => {
4392
- const [loading, setLoading] = React107.useState(false);
4393
- const router = navigation.useRouter();
4394
- const handleSubmit = async () => {
4395
- setLoading(true);
4396
- await handleFormSubmission({
4397
- customAction: () => deleteFunc(endpoint, location),
4398
- successMessages: {
4399
- custom: successMessage || "Item deletado com sucesso"
4400
- },
4401
- onSuccess: () => {
4402
- setIsModalOpen(false);
4403
- if (onSuccess) {
4404
- onSuccess();
4405
- } else {
4406
- router.push(location);
4407
- }
4408
- }
4409
- });
4410
- setLoading(false);
4411
- };
4412
- return /* @__PURE__ */ jsxRuntime.jsxs(Modal.Container, { isOpen: isModalOpen, onClose: () => setIsModalOpen(false), className: "max-w-[590px]", children: [
4413
- /* @__PURE__ */ jsxRuntime.jsxs(Modal.Header, { onClose: () => setIsModalOpen(false), children: [
4414
- /* @__PURE__ */ jsxRuntime.jsx(Image4__default.default, { src: "/images/modal-delete-icon.svg", alt: "Secure", width: 40, height: 40 }),
4415
- /* @__PURE__ */ jsxRuntime.jsx(Heading, { $as: "h3", children: title })
4416
- ] }),
4417
- /* @__PURE__ */ jsxRuntime.jsx(Modal.Content, { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-6", children: /* @__PURE__ */ jsxRuntime.jsx(Text, { $as: "p", children: message }) }) }),
4418
- /* @__PURE__ */ jsxRuntime.jsxs(Modal.Footer, { className: "flex items-center justify-end gap-4", children: [
4419
- /* @__PURE__ */ jsxRuntime.jsx(Button, { $variant: "tertiary", onClick: () => setIsModalOpen(false), className: "w-fit", disabled: loading, children: "Cancelar" }),
4420
- /* @__PURE__ */ jsxRuntime.jsx(Button, { className: "w-fit", $variant: "warning", onClick: handleSubmit, disabled: loading, $isLoading: loading, children: "Remover" })
4421
- ] })
4422
- ] });
4423
- };
4424
- var DropdownContext = React107.createContext({
4425
- isOpen: false,
4426
- toggleDropdown: () => void 0,
4427
- closeDropdown: () => void 0
4428
- });
4429
- var DropdownContainer = ({ children, ...props }) => {
4430
- return /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "relative", ...props, children });
4431
- };
4432
- var ButtonAction = ({ children, ...props }) => {
4433
- const context = React107.useContext(DropdownContext);
4434
- if (!context) {
4435
- throw new Error("Button must be used within a ButtonTrigger");
4436
- }
4437
- const { toggleDropdown } = context;
4438
- return /* @__PURE__ */ jsxRuntime.jsx(
4439
- Button,
4440
- {
4441
- $variant: "tertiary",
4442
- className: "hover:bg-transparent min-h-8 min-w-8 border-none p-0",
4443
- onClick: toggleDropdown,
4444
- ...props,
4445
- children
4446
- }
4447
- );
4448
- };
4449
- var DropdownContent = ({ children, ...props }) => {
4450
- const { className } = props;
4451
- return /* @__PURE__ */ jsxRuntime.jsx(Box, { ...props, className: cn("absolute right-0 overflow-x-hidden !p-0", className), children });
4452
- };
4453
- var DropdownContentHeader = ({ children, ...props }) => {
4454
- const { className } = props;
4455
- return /* @__PURE__ */ jsxRuntime.jsx("div", { ...props, className: cn("border-b border-gray-300", className), children });
4456
- };
4457
- var DropdownContentFooter = ({ children, ...props }) => {
4458
- return /* @__PURE__ */ jsxRuntime.jsx("div", { ...props, children });
4459
- };
4460
- var DropdownTrigger = ({ children, ...props }) => {
4461
- const [isOpen, setIsOpen] = React107.useState(false);
4462
- const containerRef = React107.useRef(null);
4463
- const toggleDropdown = () => {
4464
- setIsOpen((prev) => !prev);
4465
- };
4466
- const closeDropdown = () => {
4467
- setIsOpen(false);
4468
- };
4469
- React107.useEffect(() => {
4470
- const handleClickOutside = (event) => {
4471
- if (containerRef.current && !containerRef.current.contains(event.target)) {
4472
- closeDropdown();
4473
- }
4474
- };
4475
- document.addEventListener("mousedown", handleClickOutside);
4476
- return () => {
4477
- document.removeEventListener("mousedown", handleClickOutside);
4478
- };
4479
- }, [containerRef]);
4480
- return /* @__PURE__ */ jsxRuntime.jsx(DropdownContext.Provider, { value: { isOpen, toggleDropdown, closeDropdown }, children: /* @__PURE__ */ jsxRuntime.jsx("div", { ref: containerRef, className: "relative w-full", ...props, children }) });
4481
- };
4482
- var DrowpdownButton = {
4483
- Container: DropdownContainer,
4484
- Button: ButtonAction,
4485
- Content: DropdownContent,
4486
- Header: DropdownContentHeader,
4487
- Footer: DropdownContentFooter
4488
- };
4489
- var DropdownItens = ({ items }) => {
4490
- return /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex w-full min-w-[230px] flex-col justify-end p-0 shadow-base", children: items.map((item, index) => {
4491
- const isFirst = index === 0;
4492
- const isLast = index === items.length - 1;
4493
- const borderRadiusClass = isFirst ? "rounded-t-md" : isLast ? "rounded-b-md" : "!rounded-none";
4494
- return React107__namespace.default.cloneElement(item, {
4495
- className: `${item.props.className} ${borderRadiusClass} border-b border-gray-200`,
4496
- key: index
4497
- });
4498
- }) });
4499
- };
4500
- var FeedbackBadge = ({
4501
- children,
4502
- $variant,
4503
- customClassName,
4504
- tagColor,
4505
- tagTextColor,
4506
- ...props
4507
- }) => {
4508
- const { onClick } = props;
4509
- const inlineStyles = {
4510
- backgroundColor: tagColor,
4511
- color: tagTextColor,
4512
- borderColor: tagColor
4513
- };
4514
- return /* @__PURE__ */ jsxRuntime.jsx(
4515
- "div",
4516
- {
4517
- className: cn(
4518
- "flex w-fit items-center justify-center rounded border px-2 py-1 text-xs font-medium",
4519
- onClick && "cursor-pointer",
4520
- customClassName,
4521
- {
4522
- "border-green-100 bg-green-0 text-green-800": $variant === "success",
4523
- "border-orange-100 bg-orange-0 text-orange-800": $variant === "warning",
4524
- "border-yellow-600 bg-orange-0 text-orange-100": $variant === "risk",
4525
- "border-red-100 bg-red-0 text-red-800": $variant === "error",
4526
- "border-gray-300 bg-gray-0 text-black": $variant === "default",
4527
- "cursor-pointer border-orange-1000 bg-orange-1000 font-bold text-white": $variant === "ribbon"
4528
- }
4529
- ),
4530
- onClick,
4531
- style: inlineStyles,
4532
- ...props,
4533
- children
4534
- }
4535
- );
4536
- };
4537
- var FilterListContext = React107.createContext({
4538
- isOpen: false,
4539
- toggleDropdown: () => void 0,
4540
- closeDropdown: () => void 0
4541
- });
4542
- var FilterContainer = ({ children }) => {
4543
- return /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-full p-0", children });
4544
- };
4545
- var FilterHeader = ({ children }) => {
4546
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-between rounded-t-lg border-b border-gray-300 bg-gray-0 p-4", children });
4547
- };
4548
- var FilterContent = ({ children }) => {
4549
- return /* @__PURE__ */ jsxRuntime.jsx("div", { id: "select-filters", className: "z-10 flex max-h-[280px] flex-col gap-4 overflow-y-auto p-6", children });
4550
- };
4551
- var FilterFooter = ({ children, className }) => {
4552
- return /* @__PURE__ */ jsxRuntime.jsx(
4553
- "div",
4554
- {
4555
- className: cn(
4556
- "flex flex-col justify-between gap-3 rounded-b-lg border-t border-gray-300 bg-gray-0 p-4 px-6",
4557
- className
4558
- ),
4559
- children
4088
+ var FilterFooter = ({ children, className }) => {
4089
+ return /* @__PURE__ */ jsxRuntime.jsx(
4090
+ "div",
4091
+ {
4092
+ className: cn(
4093
+ "flex flex-col justify-between gap-3 rounded-b-lg border-t border-gray-300 bg-gray-0 p-4 px-6",
4094
+ className
4095
+ ),
4096
+ children
4560
4097
  }
4561
4098
  );
4562
4099
  };
@@ -5537,6 +5074,38 @@ var SlidingPanel = {
5537
5074
  Footer: SlidingPanelFooter
5538
5075
  };
5539
5076
 
5077
+ // src/_design-system/typography/heading/styles.ts
5078
+ var headingStyles = {
5079
+ h1: "text-2xl font-semibold text-black",
5080
+ h2: "text-lg font-semibold text-black",
5081
+ h3: "text-lg font-semibold text-black",
5082
+ h4: "text-base font-semibold text-black",
5083
+ h5: "text-sm font-semibold text-black",
5084
+ h6: ""
5085
+ };
5086
+ var Heading = ({ $as: Tag, children, className = "", tooltip }) => {
5087
+ return /* @__PURE__ */ jsxRuntime.jsxs(Tag, { className: cn(headingStyles[Tag], className, tooltip ? "flex items-center gap-2" : ""), children: [
5088
+ children,
5089
+ tooltip ? /* @__PURE__ */ jsxRuntime.jsx(Tooltip, { text: tooltip }) : null
5090
+ ] });
5091
+ };
5092
+
5093
+ // src/_design-system/typography/text/styles.ts
5094
+ var textStyles = {
5095
+ p: "text-base font-normal text-gray-600",
5096
+ span: "text-sm font-medium text-gray-600",
5097
+ div: "",
5098
+ small: "text-sm font-normal text-gray-600",
5099
+ label: "text-sm font-medium text-gray-600"
5100
+ };
5101
+ var Text = ({ $as: Tag, children, className = "", ...props }) => {
5102
+ const elementProps = {
5103
+ className: cn(textStyles[Tag], className),
5104
+ ...props
5105
+ };
5106
+ return /* @__PURE__ */ jsxRuntime.jsx(Tag, { ...elementProps, children });
5107
+ };
5108
+
5540
5109
  // src/utils/next-replace-url/index.ts
5541
5110
  var nextReplaceUrl = (key, value, pathname) => {
5542
5111
  const params = new URLSearchParams(window.location.search);
@@ -6113,6 +5682,87 @@ var Link4 = ({
6113
5682
  }
6114
5683
  );
6115
5684
  };
5685
+ var ModalContainer = ({ isOpen, onClose, className, children }) => {
5686
+ const [isVisible, setIsVisible] = React107.useState(false);
5687
+ const [isMounted, setIsMounted] = React107.useState(false);
5688
+ React107.useEffect(() => {
5689
+ setIsMounted(true);
5690
+ }, []);
5691
+ React107.useEffect(() => {
5692
+ if (isOpen) {
5693
+ document.documentElement.classList.add("no-scroll-modal");
5694
+ setIsVisible(true);
5695
+ } else {
5696
+ document.documentElement.classList.remove("no-scroll-modal");
5697
+ setIsVisible(false);
5698
+ }
5699
+ }, [isOpen]);
5700
+ React107.useEffect(() => {
5701
+ const handleEsc = (event) => {
5702
+ if (event.key === "Escape") {
5703
+ onClose();
5704
+ }
5705
+ };
5706
+ window.addEventListener("keydown", handleEsc);
5707
+ return () => {
5708
+ window.removeEventListener("keydown", handleEsc);
5709
+ };
5710
+ }, [onClose]);
5711
+ if (!isMounted) return null;
5712
+ const portalContainer = document.getElementById("portal-root");
5713
+ if (!portalContainer) return null;
5714
+ return ReactDOM__default.default.createPortal(
5715
+ /* @__PURE__ */ jsxRuntime.jsxs(
5716
+ "div",
5717
+ {
5718
+ className: cn(
5719
+ "fixed inset-0 z-[60] flex items-center justify-center",
5720
+ isOpen ? "opacity-100" : "opacity-0",
5721
+ isVisible ? "pointer-events-auto" : "pointer-events-none",
5722
+ "transition-opacity duration-300 md:mx-auto",
5723
+ className
5724
+ ),
5725
+ children: [
5726
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "fixed inset-0 bg-black bg-opacity-50", onClick: onClose }),
5727
+ /* @__PURE__ */ jsxRuntime.jsx(
5728
+ "div",
5729
+ {
5730
+ className: cn(
5731
+ "shadow-lg z-10 w-full transform overflow-hidden rounded-lg bg-white transition-transform duration-300",
5732
+ isOpen ? "scale-100" : "scale-95",
5733
+ className ? className : "max-w-lg"
5734
+ ),
5735
+ style: { margin: "1rem" },
5736
+ children
5737
+ }
5738
+ )
5739
+ ]
5740
+ }
5741
+ ),
5742
+ portalContainer
5743
+ );
5744
+ };
5745
+ var ModalHeader = ({ children, onClose, className = "" }) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative flex items-center justify-between border-b border-gray-300 px-6 pb-4 pt-6", className), children: [
5746
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-between gap-3", children }),
5747
+ /* @__PURE__ */ jsxRuntime.jsx(
5748
+ Button,
5749
+ {
5750
+ onClick: onClose,
5751
+ $variant: "tertiary",
5752
+ className: "absolute right-4 top-4 w-auto border-none p-0",
5753
+ type: "button",
5754
+ children: /* @__PURE__ */ jsxRuntime.jsx(CloseIcon_default, {})
5755
+ }
5756
+ )
5757
+ ] });
5758
+ var ModalContent = ({ children, className = "" }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("px-8 py-6", className), children });
5759
+ var ModalFooter = ({ children, className = "" }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex border-t border-gray-300 px-6 py-4", className), children });
5760
+ var Modal = {
5761
+ Container: ModalContainer,
5762
+ Header: ModalHeader,
5763
+ Content: ModalContent,
5764
+ Footer: ModalFooter
5765
+ };
6116
5766
 
6117
5767
  // src/_design-system/helpers/formatDateAndReturnPassedHours.ts
6118
5768
  var formatDateAndReturnPassedHours = (date) => {
@@ -6123,7 +5773,7 @@ var formatDateAndReturnPassedHours = (date) => {
6123
5773
  var NotificationItem = ({ user, message, date }) => {
6124
5774
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex cursor-pointer items-start gap-4 px-6 py-4 hover:bg-gray-0", children: [
6125
5775
  /* @__PURE__ */ jsxRuntime.jsx(
6126
- Image4__default.default,
5776
+ Image3__default.default,
6127
5777
  {
6128
5778
  src: "/images/yever-notification-avatar.svg",
6129
5779
  width: 49,
@@ -6182,7 +5832,7 @@ var PaymentCard = ({
6182
5832
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-semibold text-black", children: paymentDate })
6183
5833
  ] })
6184
5834
  ] }),
6185
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex w-full justify-center sm:w-auto sm:justify-end", children: brand ? /* @__PURE__ */ jsxRuntime.jsx(Image4__default.default, { src: `/images/payments/${brand}.svg`, alt: "brand", width: 60, height: 47 }) : /* @__PURE__ */ jsxRuntime.jsx(Image4__default.default, { src: `/images/payments/others.svg`, alt: "brand", width: 60, height: 47 }) })
5835
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex w-full justify-center sm:w-auto sm:justify-end", children: brand ? /* @__PURE__ */ jsxRuntime.jsx(Image3__default.default, { src: `/images/payments/${brand}.svg`, alt: "brand", width: 60, height: 47 }) : /* @__PURE__ */ jsxRuntime.jsx(Image3__default.default, { src: `/images/payments/others.svg`, alt: "brand", width: 60, height: 47 }) })
6186
5836
  ] });
6187
5837
  };
6188
5838
  var PreviewPhone = ({ children, cartPosition = "bottom", bodyColor }) => {
@@ -6739,7 +6389,7 @@ var TableContent = ({
6739
6389
  rowIndex
6740
6390
  )) : /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: columns.length + (selectable ? 1 : 0), style: { textAlign: "center" }, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "py-6", children: [
6741
6391
  /* @__PURE__ */ jsxRuntime.jsx(
6742
- Image4__default.default,
6392
+ Image3__default.default,
6743
6393
  {
6744
6394
  src: "/empty-table.svg",
6745
6395
  width: 666,
@@ -6813,15 +6463,15 @@ var TableContent = ({
6813
6463
  var Table = (props) => {
6814
6464
  return /* @__PURE__ */ jsxRuntime.jsx(React107.Suspense, { fallback: null, children: /* @__PURE__ */ jsxRuntime.jsx(TableContent, { ...props }) });
6815
6465
  };
6816
- var Tabs = ({ headers: headers2, children, noGap, active, alignDiv = "full" }) => {
6466
+ var Tabs = ({ headers, children, noGap, active, alignDiv = "full" }) => {
6817
6467
  const [activeTab, setActiveTab] = React107.useState(active || 0);
6818
- const flattenHeaders = (headers3) => {
6819
- if (Array.isArray(headers3[0])) {
6820
- return headers3.flat();
6468
+ const flattenHeaders = (headers2) => {
6469
+ if (Array.isArray(headers2[0])) {
6470
+ return headers2.flat();
6821
6471
  }
6822
- return headers3;
6472
+ return headers2;
6823
6473
  };
6824
- const flattenedHeaders = flattenHeaders(headers2);
6474
+ const flattenedHeaders = flattenHeaders(headers);
6825
6475
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex flex-col", noGap ? "" : "gap-4"), children: [
6826
6476
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex gap-4 overflow-x-auto overflow-y-hidden border-b border-gray-300", children: flattenedHeaders.map((header, index) => /* @__PURE__ */ jsxRuntime.jsx(
6827
6477
  "button",
@@ -7204,7 +6854,7 @@ var MultiSelect = ({
7204
6854
  onSelect(newValue);
7205
6855
  };
7206
6856
  const formatOptionLabel = (option) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center", children: [
7207
- option.icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative mr-2 flex h-[24px] max-h-[24px] w-[24px] max-w-[24px] items-center justify-center rounded border border-gray-300", children: /* @__PURE__ */ jsxRuntime.jsx(Image4__default.default, { src: option.icon, alt: option.label, fill: true, className: "p-1", quality: 100 }) }),
6857
+ option.icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative mr-2 flex h-[24px] max-h-[24px] w-[24px] max-w-[24px] items-center justify-center rounded border border-gray-300", children: /* @__PURE__ */ jsxRuntime.jsx(Image3__default.default, { src: option.icon, alt: option.label, fill: true, className: "p-1", quality: 100 }) }),
7208
6858
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm", children: option.label })
7209
6859
  ] });
7210
6860
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative w-full", className), children: [
@@ -7292,7 +6942,7 @@ var CustomSelect = ({
7292
6942
  onSelect(option);
7293
6943
  };
7294
6944
  const formatOptionLabel = (option) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center", children: [
7295
- option.icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative mr-2 flex h-[24px] max-h-[24px] w-[24px] max-w-[24px] items-center justify-center rounded border border-gray-300", children: /* @__PURE__ */ jsxRuntime.jsx(Image4__default.default, { src: option.icon, alt: option.label, fill: true, className: "p-1", quality: 100 }) }),
6945
+ option.icon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative mr-2 flex h-[24px] max-h-[24px] w-[24px] max-w-[24px] items-center justify-center rounded border border-gray-300", children: /* @__PURE__ */ jsxRuntime.jsx(Image3__default.default, { src: option.icon, alt: option.label, fill: true, className: "p-1", quality: 100 }) }),
7296
6946
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm", children: option.label })
7297
6947
  ] });
7298
6948
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative w-full", className), children: [
@@ -8102,7 +7752,7 @@ function FileUploadComponent({
8102
7752
  }
8103
7753
  ) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "relative flex h-full w-full items-center justify-center", children: filePreview && isImagePreview(filePreview) ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
8104
7754
  /* @__PURE__ */ jsxRuntime.jsx("label", { htmlFor: `${name}-input`, className: "block h-full w-full cursor-pointer", children: /* @__PURE__ */ jsxRuntime.jsx(
8105
- Image4__default.default,
7755
+ Image3__default.default,
8106
7756
  {
8107
7757
  src: filePreview,
8108
7758
  alt: "Preview",
@@ -8129,7 +7779,7 @@ function FileUploadComponent({
8129
7779
  ] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex w-full items-center justify-between gap-4 rounded-md border border-gray-200 bg-white p-4", children: [
8130
7780
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
8131
7781
  /* @__PURE__ */ jsxRuntime.jsx(
8132
- Image4__default.default,
7782
+ Image3__default.default,
8133
7783
  {
8134
7784
  src: isPdfFile ? "/icons/pdf.png" : "/icons/xlsx.png",
8135
7785
  alt: "Preview",
@@ -8342,6 +7992,138 @@ var PieChart = ({
8342
7992
  }
8343
7993
  );
8344
7994
  };
7995
+ async function getCsrfToken() {
7996
+ const baseURL = process.env.NEXT_PUBLIC_API_URL ?? "http://api.yever.local";
7997
+ const response = await fetch(`${baseURL}/sanctum/csrf-cookie`, {
7998
+ credentials: "include",
7999
+ headers: {
8000
+ "X-Requested-With": "XMLHttpRequest"
8001
+ }
8002
+ });
8003
+ if (!response.ok) {
8004
+ throw new Error("Falha ao obter token CSRF");
8005
+ }
8006
+ await new Promise((resolve) => setTimeout(resolve, 100));
8007
+ }
8008
+ async function apiFetch(options) {
8009
+ const baseURL = process.env.NEXT_PUBLIC_API_URL ?? "";
8010
+ const isAbsolute = /^https?:\/\//i.test(options.url);
8011
+ const url = isAbsolute ? options.url : `${baseURL}${options.url}`;
8012
+ const method = (options.method ?? "GET").toString().toLowerCase();
8013
+ const needsCSRFToken = ["post", "put", "delete"].includes(method);
8014
+ const hasCSRFCookie = Cookies__default.default.get("XSRF-TOKEN");
8015
+ if (needsCSRFToken && !hasCSRFCookie) {
8016
+ await getCsrfToken();
8017
+ }
8018
+ const defaultHeaders = {
8019
+ "X-Requested-With": "XMLHttpRequest",
8020
+ Accept: "application/json"
8021
+ };
8022
+ if (!(options.body instanceof FormData)) {
8023
+ defaultHeaders["Content-Type"] = "application/json";
8024
+ }
8025
+ const finalHeaders = new Headers(defaultHeaders);
8026
+ if (options.headers) {
8027
+ if (options.headers instanceof Headers) {
8028
+ options.headers.forEach((v, k) => finalHeaders.set(k, v));
8029
+ } else {
8030
+ Object.entries(options.headers).forEach(([k, v]) => {
8031
+ if (v !== void 0) finalHeaders.set(k, v);
8032
+ });
8033
+ }
8034
+ }
8035
+ const csrfToken = Cookies__default.default.get("XSRF-TOKEN");
8036
+ if (csrfToken) {
8037
+ finalHeaders.set("X-XSRF-TOKEN", csrfToken);
8038
+ }
8039
+ let finalOptions = options;
8040
+ if (options.body) {
8041
+ finalOptions = {
8042
+ ...options,
8043
+ body: options.body instanceof FormData ? options.body : JSON.stringify(options.body)
8044
+ };
8045
+ }
8046
+ let response = await fetch(url, {
8047
+ credentials: "include",
8048
+ headers: finalHeaders,
8049
+ ...finalOptions
8050
+ });
8051
+ if (response.status === 419) {
8052
+ Cookies__default.default.remove("XSRF-TOKEN");
8053
+ await getCsrfToken();
8054
+ const newToken = Cookies__default.default.get("XSRF-TOKEN");
8055
+ if (newToken) {
8056
+ finalHeaders.set("X-XSRF-TOKEN", newToken);
8057
+ }
8058
+ response = await fetch(url, {
8059
+ credentials: "include",
8060
+ headers: finalHeaders,
8061
+ ...options
8062
+ });
8063
+ if (!response.ok) {
8064
+ Cookies__default.default.remove("XSRF-TOKEN");
8065
+ Cookies__default.default.remove("yeverClientUser");
8066
+ window.location.href = "/login";
8067
+ return Promise.reject(new Error("CSRF token expirado"));
8068
+ }
8069
+ }
8070
+ const headers = {};
8071
+ response.headers.forEach((value, key) => {
8072
+ headers[key] = value;
8073
+ });
8074
+ if (!response.ok) {
8075
+ const data2 = await response.json().catch(() => null);
8076
+ const errorMessage = typeof data2 === "object" && data2 !== null && "message" in data2 ? data2.message : "Request failed";
8077
+ const error = new Error(errorMessage);
8078
+ error.status = response.status;
8079
+ error.response = {
8080
+ data: data2,
8081
+ status: response.status
8082
+ };
8083
+ throw error;
8084
+ }
8085
+ let data = null;
8086
+ if (options.responseType === "blob") {
8087
+ data = await response.blob().catch(() => null);
8088
+ } else {
8089
+ data = await response.json().catch(() => null);
8090
+ }
8091
+ return {
8092
+ status: response.status,
8093
+ statusText: response.statusText,
8094
+ data,
8095
+ headers
8096
+ };
8097
+ }
8098
+
8099
+ // src/utils/parse-parameters-into-url/index.tsx
8100
+ var parseParametersIntoUrl = (url, query, filtersAllowed) => {
8101
+ let urlFiltered = url;
8102
+ for (const key in query) {
8103
+ if (query && Object.keys(query).length > 0) {
8104
+ urlFiltered = urlFiltered.replace(`/${key}/`, `/${query[key]}/`);
8105
+ urlFiltered = urlFiltered.replace(`/${key}`, `/${query[key]}`);
8106
+ if (filtersAllowed && filtersAllowed.includes(key)) {
8107
+ if (urlFiltered.includes("?")) {
8108
+ if (key === "searchNew") {
8109
+ urlFiltered = urlFiltered + `&${key}=${atob(query[key])}`;
8110
+ } else {
8111
+ urlFiltered = urlFiltered + `&${key}=${query[key]}`;
8112
+ }
8113
+ } else {
8114
+ if (key === "searchNew") {
8115
+ urlFiltered = urlFiltered + `?${key}=${atob(query[key])}`;
8116
+ } else {
8117
+ urlFiltered = urlFiltered + `?${key}=${query[key]}`;
8118
+ }
8119
+ }
8120
+ }
8121
+ }
8122
+ }
8123
+ return urlFiltered;
8124
+ };
8125
+
8126
+ // src/hooks/use-fetch-client-side/index.tsx
8345
8127
  var noopLoading = {
8346
8128
  loadingActions: {
8347
8129
  setLoading: () => {
@@ -8402,22 +8184,22 @@ function useFetchClientSide({
8402
8184
  if (body instanceof FormData) {
8403
8185
  delete configHeaders["Content-Type"];
8404
8186
  }
8405
- const headers2 = {
8187
+ const headers = {
8406
8188
  "X-Requested-With": "XMLHttpRequest",
8407
8189
  Accept: "application/json",
8408
8190
  ...configHeaders
8409
8191
  };
8410
8192
  if (body && !(body instanceof FormData)) {
8411
- headers2["Content-Type"] = "application/json";
8193
+ headers["Content-Type"] = "application/json";
8412
8194
  }
8413
8195
  if (csrfToken) {
8414
- headers2["X-XSRF-TOKEN"] = decodeURIComponent(csrfToken);
8196
+ headers["X-XSRF-TOKEN"] = decodeURIComponent(csrfToken);
8415
8197
  }
8416
8198
  const response = await apiFetch({
8417
8199
  url: customUrl || urlFiltered,
8418
8200
  method: customMethod || method,
8419
8201
  body,
8420
- headers: headers2,
8202
+ headers,
8421
8203
  credentials: "include",
8422
8204
  signal,
8423
8205
  responseType: config?.responseType
@@ -10057,6 +9839,63 @@ var shadow = {
10057
9839
  store: "0px 4px 8px 3px rgba(0, 0, 0, 0.04)"
10058
9840
  };
10059
9841
  var shadow_default = shadow;
9842
+ async function handleFormSubmission({
9843
+ id,
9844
+ createAction,
9845
+ updateAction,
9846
+ customAction,
9847
+ successMessages,
9848
+ onSuccess
9849
+ }) {
9850
+ let result = null;
9851
+ let message = null;
9852
+ if (customAction) {
9853
+ result = await customAction();
9854
+ message = successMessages?.custom || "";
9855
+ } else {
9856
+ if (id) {
9857
+ if (updateAction) {
9858
+ result = await updateAction();
9859
+ message = successMessages?.update || "";
9860
+ }
9861
+ } else {
9862
+ if (createAction) {
9863
+ result = await createAction();
9864
+ message = successMessages?.create || "";
9865
+ }
9866
+ }
9867
+ }
9868
+ if (result && typeof result === "object") {
9869
+ const errorData = result.props?.error || result.error;
9870
+ if (errorData) {
9871
+ if (errorData?.status === 422 && errorData?.errors) {
9872
+ Object.values(errorData.errors).forEach((errorMessages) => {
9873
+ if (Array.isArray(errorMessages)) {
9874
+ errorMessages.forEach((message2) => {
9875
+ if (message2.trim()) {
9876
+ sonner.toast.error(message2.trim());
9877
+ }
9878
+ });
9879
+ } else if (typeof errorMessages === "string") {
9880
+ sonner.toast.error(errorMessages);
9881
+ }
9882
+ });
9883
+ return null;
9884
+ }
9885
+ if (errorData?.message) {
9886
+ sonner.toast.error(errorData.message);
9887
+ return null;
9888
+ }
9889
+ }
9890
+ }
9891
+ if (message) {
9892
+ sonner.toast.success(message);
9893
+ }
9894
+ if (onSuccess) {
9895
+ onSuccess(result);
9896
+ }
9897
+ return result;
9898
+ }
10060
9899
  var useCopyToClipboard = (successMessage) => {
10061
9900
  const copyToClipboard = (initialText) => {
10062
9901
  const textArea = document.createElement("textarea");
@@ -10114,7 +9953,6 @@ exports.CurrencyInput = CurrencyInput;
10114
9953
  exports.CustomSelect = CustomSelect;
10115
9954
  exports.Dashboard = Dashboard_default;
10116
9955
  exports.DatePicker = datapicker_default;
10117
- exports.DeleteModal = DeleteModal;
10118
9956
  exports.Delivery = Delivery_default;
10119
9957
  exports.Depoimentos = Depoimentos_default;
10120
9958
  exports.Distribuicao = Distribuicao_default;