@axzydev/axzy_ui_system 1.0.165 → 1.0.167
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.cjs +468 -202
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +66 -10
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +88 -2
- package/dist/index.d.ts +88 -2
- package/dist/index.js +464 -201
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3724,10 +3724,178 @@ function ITNavbar({
|
|
|
3724
3724
|
] });
|
|
3725
3725
|
}
|
|
3726
3726
|
|
|
3727
|
-
// src/components/
|
|
3728
|
-
import { useState as useState15, useEffect as useEffect12 } from "react";
|
|
3727
|
+
// src/components/search-select/search-select.tsx
|
|
3728
|
+
import { useState as useState15, useEffect as useEffect12, useRef as useRef7, useMemo as useMemo4 } from "react";
|
|
3729
3729
|
import clsx14 from "clsx";
|
|
3730
|
-
import {
|
|
3730
|
+
import { FaSearch } from "react-icons/fa";
|
|
3731
|
+
import { jsx as jsx19, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
3732
|
+
function ITSearchSelect({
|
|
3733
|
+
name,
|
|
3734
|
+
options = [],
|
|
3735
|
+
label,
|
|
3736
|
+
placeholder = "Selecciona una opci\xF3n",
|
|
3737
|
+
valueField = "value",
|
|
3738
|
+
labelField = "label",
|
|
3739
|
+
value,
|
|
3740
|
+
onChange,
|
|
3741
|
+
onBlur,
|
|
3742
|
+
disabled = false,
|
|
3743
|
+
className,
|
|
3744
|
+
touched,
|
|
3745
|
+
required,
|
|
3746
|
+
error,
|
|
3747
|
+
readOnly = false,
|
|
3748
|
+
onSearch,
|
|
3749
|
+
isLoading = false,
|
|
3750
|
+
noResultsMessage = "No se encontraron resultados"
|
|
3751
|
+
}) {
|
|
3752
|
+
const [isOpen, setIsOpen] = useState15(false);
|
|
3753
|
+
const [searchTerm, setSearchTerm] = useState15("");
|
|
3754
|
+
const [isFocused, setIsFocused] = useState15(false);
|
|
3755
|
+
const containerRef = useRef7(null);
|
|
3756
|
+
const timeoutRef = useRef7(null);
|
|
3757
|
+
const selectedOption = useMemo4(() => {
|
|
3758
|
+
return options.find((opt) => opt[valueField] === value);
|
|
3759
|
+
}, [options, value, valueField]);
|
|
3760
|
+
useEffect12(() => {
|
|
3761
|
+
if (!isFocused) {
|
|
3762
|
+
setSearchTerm(selectedOption ? String(selectedOption[labelField]) : "");
|
|
3763
|
+
}
|
|
3764
|
+
}, [selectedOption, isFocused, labelField]);
|
|
3765
|
+
useEffect12(() => {
|
|
3766
|
+
function handleClickOutside(event) {
|
|
3767
|
+
if (containerRef.current && !containerRef.current.contains(event.target)) {
|
|
3768
|
+
setIsOpen(false);
|
|
3769
|
+
}
|
|
3770
|
+
}
|
|
3771
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
3772
|
+
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
3773
|
+
}, []);
|
|
3774
|
+
const filteredOptions = useMemo4(() => {
|
|
3775
|
+
if (onSearch) return options;
|
|
3776
|
+
if (!searchTerm || !isFocused) return options;
|
|
3777
|
+
return options.filter(
|
|
3778
|
+
(opt) => String(opt[labelField]).toLowerCase().includes(searchTerm.toLowerCase())
|
|
3779
|
+
);
|
|
3780
|
+
}, [options, searchTerm, onSearch, labelField, isFocused]);
|
|
3781
|
+
const handleInputChange = (e) => {
|
|
3782
|
+
const query = e.target.value;
|
|
3783
|
+
setSearchTerm(query);
|
|
3784
|
+
setIsOpen(true);
|
|
3785
|
+
if (onSearch) {
|
|
3786
|
+
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
3787
|
+
timeoutRef.current = setTimeout(() => {
|
|
3788
|
+
onSearch(query);
|
|
3789
|
+
}, 500);
|
|
3790
|
+
}
|
|
3791
|
+
};
|
|
3792
|
+
const handleSelect = (option) => {
|
|
3793
|
+
if (onChange) {
|
|
3794
|
+
onChange(option[valueField], option);
|
|
3795
|
+
}
|
|
3796
|
+
setSearchTerm(String(option[labelField]));
|
|
3797
|
+
setIsOpen(false);
|
|
3798
|
+
};
|
|
3799
|
+
const handleFocus = () => {
|
|
3800
|
+
if (disabled || readOnly) return;
|
|
3801
|
+
setIsFocused(true);
|
|
3802
|
+
setIsOpen(true);
|
|
3803
|
+
};
|
|
3804
|
+
const handleInputBlur = (e) => {
|
|
3805
|
+
setTimeout(() => {
|
|
3806
|
+
setIsFocused(false);
|
|
3807
|
+
onBlur?.(e);
|
|
3808
|
+
}, 200);
|
|
3809
|
+
};
|
|
3810
|
+
const inputTheme = theme.input || {};
|
|
3811
|
+
const getInputStyle = () => {
|
|
3812
|
+
const style = {
|
|
3813
|
+
backgroundColor: inputTheme.backgroundColor || "#ffffff",
|
|
3814
|
+
borderColor: inputTheme.borderColor || "#e2e8f0",
|
|
3815
|
+
borderRadius: inputTheme.borderRadius || "0.5rem",
|
|
3816
|
+
padding: inputTheme.padding || "0.5rem 0.75rem",
|
|
3817
|
+
fontSize: inputTheme.fontSize || "0.875rem",
|
|
3818
|
+
borderWidth: "1px",
|
|
3819
|
+
borderStyle: "solid",
|
|
3820
|
+
transition: "all 0.2s",
|
|
3821
|
+
color: theme.colors.gray[900],
|
|
3822
|
+
width: "100%"
|
|
3823
|
+
};
|
|
3824
|
+
if (disabled) {
|
|
3825
|
+
style.backgroundColor = inputTheme.disabled?.backgroundColor || "#f1f5f9";
|
|
3826
|
+
style.borderColor = inputTheme.disabled?.borderColor || "#e2e8f0";
|
|
3827
|
+
style.opacity = 0.7;
|
|
3828
|
+
style.cursor = "not-allowed";
|
|
3829
|
+
}
|
|
3830
|
+
if (touched && error) {
|
|
3831
|
+
style.borderColor = inputTheme.error?.borderColor || "red";
|
|
3832
|
+
if (isFocused) {
|
|
3833
|
+
style.boxShadow = inputTheme.error?.ring;
|
|
3834
|
+
}
|
|
3835
|
+
} else if (isFocused && !readOnly) {
|
|
3836
|
+
style.boxShadow = inputTheme.focus?.ring;
|
|
3837
|
+
style.borderColor = inputTheme.focus?.borderColor;
|
|
3838
|
+
}
|
|
3839
|
+
return style;
|
|
3840
|
+
};
|
|
3841
|
+
return /* @__PURE__ */ jsxs14("div", { className: clsx14("w-full flex flex-col gap-1.5", className), ref: containerRef, children: [
|
|
3842
|
+
label && /* @__PURE__ */ jsxs14(
|
|
3843
|
+
"label",
|
|
3844
|
+
{
|
|
3845
|
+
className: clsx14("text-sm font-medium text-gray-700", {
|
|
3846
|
+
"text-red-500": touched && error
|
|
3847
|
+
}),
|
|
3848
|
+
children: [
|
|
3849
|
+
label,
|
|
3850
|
+
required && /* @__PURE__ */ jsx19("span", { className: "text-red-500 ml-1", children: "*" })
|
|
3851
|
+
]
|
|
3852
|
+
}
|
|
3853
|
+
),
|
|
3854
|
+
/* @__PURE__ */ jsxs14("div", { className: "relative", children: [
|
|
3855
|
+
/* @__PURE__ */ jsxs14("div", { className: "relative flex items-center", children: [
|
|
3856
|
+
/* @__PURE__ */ jsx19(
|
|
3857
|
+
"input",
|
|
3858
|
+
{
|
|
3859
|
+
type: "text",
|
|
3860
|
+
name,
|
|
3861
|
+
value: searchTerm,
|
|
3862
|
+
onChange: handleInputChange,
|
|
3863
|
+
onFocus: handleFocus,
|
|
3864
|
+
onBlur: handleInputBlur,
|
|
3865
|
+
disabled,
|
|
3866
|
+
readOnly,
|
|
3867
|
+
placeholder,
|
|
3868
|
+
className: "outline-none pr-10",
|
|
3869
|
+
style: getInputStyle(),
|
|
3870
|
+
autoComplete: "off"
|
|
3871
|
+
}
|
|
3872
|
+
),
|
|
3873
|
+
/* @__PURE__ */ jsxs14("div", { className: "absolute right-3 flex items-center gap-2 text-gray-400 pointer-events-none", children: [
|
|
3874
|
+
isLoading && /* @__PURE__ */ jsx19("div", { className: "animate-spin h-4 w-4 border-2 border-primary-500 border-t-transparent rounded-full" }),
|
|
3875
|
+
!isLoading && /* @__PURE__ */ jsx19(FaSearch, { size: 14, className: clsx14({ "text-primary-500": isFocused }) })
|
|
3876
|
+
] })
|
|
3877
|
+
] }),
|
|
3878
|
+
isOpen && /* @__PURE__ */ jsx19("div", { className: "absolute z-50 w-full mt-1 bg-white border border-gray-200 rounded-lg shadow-xl overflow-hidden animate-in fade-in zoom-in duration-200 origin-top", children: /* @__PURE__ */ jsx19("div", { className: "max-h-60 overflow-y-auto", children: filteredOptions.length > 0 ? filteredOptions.map((option) => /* @__PURE__ */ jsx19(
|
|
3879
|
+
"div",
|
|
3880
|
+
{
|
|
3881
|
+
onClick: () => handleSelect(option),
|
|
3882
|
+
className: clsx14(
|
|
3883
|
+
"px-4 py-2 text-sm cursor-pointer transition-colors",
|
|
3884
|
+
value === option[valueField] ? "bg-primary-50 text-primary-700 font-medium" : "hover:bg-gray-50 text-gray-700"
|
|
3885
|
+
),
|
|
3886
|
+
children: option[labelField]
|
|
3887
|
+
},
|
|
3888
|
+
option[valueField]
|
|
3889
|
+
)) : /* @__PURE__ */ jsx19("div", { className: "px-4 py-6 text-sm text-center text-gray-500 italic", children: isLoading ? "Cargando..." : noResultsMessage }) }) })
|
|
3890
|
+
] }),
|
|
3891
|
+
touched && error && /* @__PURE__ */ jsx19("p", { className: "text-red-500 text-xs mt-1", children: error })
|
|
3892
|
+
] });
|
|
3893
|
+
}
|
|
3894
|
+
|
|
3895
|
+
// src/components/slide/slide.tsx
|
|
3896
|
+
import { useState as useState16, useEffect as useEffect13 } from "react";
|
|
3897
|
+
import clsx15 from "clsx";
|
|
3898
|
+
import { jsx as jsx20 } from "react/jsx-runtime";
|
|
3731
3899
|
function ITSlideToggle({
|
|
3732
3900
|
onToggle,
|
|
3733
3901
|
isOn: controlledIsOn,
|
|
@@ -3740,8 +3908,8 @@ function ITSlideToggle({
|
|
|
3740
3908
|
className = ""
|
|
3741
3909
|
}) {
|
|
3742
3910
|
const isControlled = controlledIsOn !== void 0;
|
|
3743
|
-
const [internalIsOn, setInternalIsOn] =
|
|
3744
|
-
|
|
3911
|
+
const [internalIsOn, setInternalIsOn] = useState16(initialState);
|
|
3912
|
+
useEffect13(() => {
|
|
3745
3913
|
if (isControlled) {
|
|
3746
3914
|
setInternalIsOn(controlledIsOn);
|
|
3747
3915
|
}
|
|
@@ -3780,11 +3948,11 @@ function ITSlideToggle({
|
|
|
3780
3948
|
}
|
|
3781
3949
|
};
|
|
3782
3950
|
const { container, knob, translate } = sizeClasses2[size];
|
|
3783
|
-
return /* @__PURE__ */
|
|
3951
|
+
return /* @__PURE__ */ jsx20(
|
|
3784
3952
|
"div",
|
|
3785
3953
|
{
|
|
3786
3954
|
onClick: toggleSwitch,
|
|
3787
|
-
className:
|
|
3955
|
+
className: clsx15(
|
|
3788
3956
|
"flex items-center rounded-full p-1 transition-colors duration-300",
|
|
3789
3957
|
container,
|
|
3790
3958
|
disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer",
|
|
@@ -3800,10 +3968,10 @@ function ITSlideToggle({
|
|
|
3800
3968
|
toggleSwitch();
|
|
3801
3969
|
}
|
|
3802
3970
|
},
|
|
3803
|
-
children: /* @__PURE__ */
|
|
3971
|
+
children: /* @__PURE__ */ jsx20(
|
|
3804
3972
|
"div",
|
|
3805
3973
|
{
|
|
3806
|
-
className:
|
|
3974
|
+
className: clsx15(
|
|
3807
3975
|
"bg-white rounded-full shadow-md transform transition-transform duration-300 pointer-events-none",
|
|
3808
3976
|
knob,
|
|
3809
3977
|
isOn ? translate : "translate-x-0"
|
|
@@ -3815,11 +3983,95 @@ function ITSlideToggle({
|
|
|
3815
3983
|
}
|
|
3816
3984
|
|
|
3817
3985
|
// src/components/text/text.tsx
|
|
3818
|
-
import { jsx as
|
|
3986
|
+
import { jsx as jsx21 } from "react/jsx-runtime";
|
|
3819
3987
|
function ITText({ children, className = "" }) {
|
|
3820
|
-
return /* @__PURE__ */
|
|
3988
|
+
return /* @__PURE__ */ jsx21("p", { className: `${className} text-gray-900 `, children });
|
|
3821
3989
|
}
|
|
3822
3990
|
|
|
3991
|
+
// src/components/tabs/tabs.tsx
|
|
3992
|
+
import { useState as useState17 } from "react";
|
|
3993
|
+
import { clsx as clsx16 } from "clsx";
|
|
3994
|
+
import { jsx as jsx22, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
3995
|
+
var ITTabs = ({
|
|
3996
|
+
items,
|
|
3997
|
+
defaultActiveId,
|
|
3998
|
+
onChange,
|
|
3999
|
+
variant = "line",
|
|
4000
|
+
className = "",
|
|
4001
|
+
containerClassName = ""
|
|
4002
|
+
}) => {
|
|
4003
|
+
const [activeId, setActiveId] = useState17(defaultActiveId || items[0]?.id);
|
|
4004
|
+
const handleTabClick = (id, disabled) => {
|
|
4005
|
+
if (disabled) return;
|
|
4006
|
+
setActiveId(id);
|
|
4007
|
+
if (onChange) onChange(id);
|
|
4008
|
+
};
|
|
4009
|
+
const activeContent = items.find((item) => item.id === activeId)?.content;
|
|
4010
|
+
return /* @__PURE__ */ jsxs15("div", { className: clsx16("w-full", containerClassName), children: [
|
|
4011
|
+
/* @__PURE__ */ jsx22("div", { className: clsx16(
|
|
4012
|
+
"flex border-gray-200 mb-4",
|
|
4013
|
+
variant === "line" ? "border-b" : "gap-2 p-1 bg-gray-100 rounded-lg w-fit",
|
|
4014
|
+
className
|
|
4015
|
+
), children: items.map((item) => {
|
|
4016
|
+
const isActive = item.id === activeId;
|
|
4017
|
+
return /* @__PURE__ */ jsxs15(
|
|
4018
|
+
"button",
|
|
4019
|
+
{
|
|
4020
|
+
onClick: () => handleTabClick(item.id, item.disabled),
|
|
4021
|
+
disabled: item.disabled,
|
|
4022
|
+
className: clsx16(
|
|
4023
|
+
"flex items-center gap-2 px-4 py-2 text-sm font-medium transition-all duration-200 outline-none",
|
|
4024
|
+
// LINE VARIANT
|
|
4025
|
+
variant === "line" && [
|
|
4026
|
+
"border-b-2 -mb-[2px]",
|
|
4027
|
+
isActive ? "border-primary-500 text-primary-600" : "border-transparent text-gray-500 hover:text-gray-700 hover:border-gray-300"
|
|
4028
|
+
],
|
|
4029
|
+
// PILL VARIANT
|
|
4030
|
+
variant === "pill" && [
|
|
4031
|
+
"rounded-md",
|
|
4032
|
+
isActive ? "bg-white text-primary-600 shadow-sm" : "text-gray-500 hover:text-gray-700"
|
|
4033
|
+
],
|
|
4034
|
+
item.disabled && "opacity-50 cursor-not-allowed"
|
|
4035
|
+
),
|
|
4036
|
+
children: [
|
|
4037
|
+
item.icon && /* @__PURE__ */ jsx22("span", { className: "w-4 h-4", children: item.icon }),
|
|
4038
|
+
item.label
|
|
4039
|
+
]
|
|
4040
|
+
},
|
|
4041
|
+
item.id
|
|
4042
|
+
);
|
|
4043
|
+
}) }),
|
|
4044
|
+
/* @__PURE__ */ jsx22("div", { className: "tab-content animate-fadeIn", children: activeContent })
|
|
4045
|
+
] });
|
|
4046
|
+
};
|
|
4047
|
+
var tabs_default = ITTabs;
|
|
4048
|
+
|
|
4049
|
+
// src/components/triple-filter/tripleFilter.tsx
|
|
4050
|
+
import { jsx as jsx23 } from "react/jsx-runtime";
|
|
4051
|
+
var ITTripleFilter = ({
|
|
4052
|
+
value,
|
|
4053
|
+
onChange,
|
|
4054
|
+
options,
|
|
4055
|
+
className = ""
|
|
4056
|
+
}) => {
|
|
4057
|
+
return /* @__PURE__ */ jsx23(
|
|
4058
|
+
"div",
|
|
4059
|
+
{
|
|
4060
|
+
className: `flex bg-slate-100 p-1 rounded-xl gap-1 w-fit ${className}`,
|
|
4061
|
+
children: options.map((option) => /* @__PURE__ */ jsx23(
|
|
4062
|
+
"button",
|
|
4063
|
+
{
|
|
4064
|
+
onClick: () => onChange(option.value),
|
|
4065
|
+
className: `px-4 py-1.5 rounded-lg text-[10px] font-bold uppercase tracking-wider transition-all duration-200 whitespace-nowrap ${value === option.value ? "bg-white text-emerald-600 shadow-sm" : "text-slate-400 hover:text-slate-600"}`,
|
|
4066
|
+
children: option.label
|
|
4067
|
+
},
|
|
4068
|
+
String(option.value)
|
|
4069
|
+
))
|
|
4070
|
+
}
|
|
4071
|
+
);
|
|
4072
|
+
};
|
|
4073
|
+
var tripleFilter_default = ITTripleFilter;
|
|
4074
|
+
|
|
3823
4075
|
// src/types/toast.types.ts
|
|
3824
4076
|
var positionStyles = {
|
|
3825
4077
|
"top-right": "top-4 right-4",
|
|
@@ -3831,10 +4083,10 @@ var positionStyles = {
|
|
|
3831
4083
|
};
|
|
3832
4084
|
|
|
3833
4085
|
// src/components/toast/toast.tsx
|
|
3834
|
-
import
|
|
3835
|
-
import { useEffect as
|
|
3836
|
-
import { FaTimesCircle, FaCheckCircle, FaExclamationTriangle, FaInfoCircle, FaTimes as
|
|
3837
|
-
import { jsx as
|
|
4086
|
+
import clsx17 from "clsx";
|
|
4087
|
+
import { useEffect as useEffect14, useState as useState18 } from "react";
|
|
4088
|
+
import { FaTimesCircle, FaCheckCircle, FaExclamationTriangle, FaInfoCircle, FaTimes as FaTimes5 } from "react-icons/fa";
|
|
4089
|
+
import { jsx as jsx24, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
3838
4090
|
function ITToast({
|
|
3839
4091
|
message,
|
|
3840
4092
|
type = "info",
|
|
@@ -3842,8 +4094,8 @@ function ITToast({
|
|
|
3842
4094
|
position = "top-right",
|
|
3843
4095
|
onClose
|
|
3844
4096
|
}) {
|
|
3845
|
-
const [isVisible, setIsVisible] =
|
|
3846
|
-
|
|
4097
|
+
const [isVisible, setIsVisible] = useState18(true);
|
|
4098
|
+
useEffect14(() => {
|
|
3847
4099
|
const timer = setTimeout(() => {
|
|
3848
4100
|
setIsVisible(false);
|
|
3849
4101
|
setTimeout(() => {
|
|
@@ -3863,21 +4115,21 @@ function ITToast({
|
|
|
3863
4115
|
const TypeIcon = () => {
|
|
3864
4116
|
switch (type) {
|
|
3865
4117
|
case "success":
|
|
3866
|
-
return /* @__PURE__ */
|
|
4118
|
+
return /* @__PURE__ */ jsx24(FaCheckCircle, { className: "w-5 h-5 flex-shrink-0" });
|
|
3867
4119
|
case "error":
|
|
3868
4120
|
case "danger":
|
|
3869
|
-
return /* @__PURE__ */
|
|
4121
|
+
return /* @__PURE__ */ jsx24(FaTimesCircle, { className: "w-5 h-5 flex-shrink-0" });
|
|
3870
4122
|
case "warning":
|
|
3871
|
-
return /* @__PURE__ */
|
|
4123
|
+
return /* @__PURE__ */ jsx24(FaExclamationTriangle, { className: "w-5 h-5 flex-shrink-0" });
|
|
3872
4124
|
case "info":
|
|
3873
4125
|
default:
|
|
3874
|
-
return /* @__PURE__ */
|
|
4126
|
+
return /* @__PURE__ */ jsx24(FaInfoCircle, { className: "w-5 h-5 flex-shrink-0" });
|
|
3875
4127
|
}
|
|
3876
4128
|
};
|
|
3877
|
-
return /* @__PURE__ */
|
|
4129
|
+
return /* @__PURE__ */ jsxs16(
|
|
3878
4130
|
"div",
|
|
3879
4131
|
{
|
|
3880
|
-
className:
|
|
4132
|
+
className: clsx17(
|
|
3881
4133
|
"fixed z-50 p-4 rounded-xl shadow-xl flex items-center justify-between gap-4 transition-all duration-300 text-white min-w-[300px]",
|
|
3882
4134
|
positionStyles[position],
|
|
3883
4135
|
{
|
|
@@ -3890,17 +4142,17 @@ function ITToast({
|
|
|
3890
4142
|
style: { backgroundColor },
|
|
3891
4143
|
role: "alert",
|
|
3892
4144
|
children: [
|
|
3893
|
-
/* @__PURE__ */
|
|
3894
|
-
/* @__PURE__ */
|
|
3895
|
-
/* @__PURE__ */
|
|
4145
|
+
/* @__PURE__ */ jsxs16("div", { className: "flex items-center gap-3", children: [
|
|
4146
|
+
/* @__PURE__ */ jsx24(TypeIcon, {}),
|
|
4147
|
+
/* @__PURE__ */ jsx24("span", { className: "font-medium text-sm sm:text-base leading-snug", children: message })
|
|
3896
4148
|
] }),
|
|
3897
|
-
/* @__PURE__ */
|
|
4149
|
+
/* @__PURE__ */ jsx24(
|
|
3898
4150
|
"button",
|
|
3899
4151
|
{
|
|
3900
4152
|
onClick: handleClose,
|
|
3901
4153
|
className: "p-1.5 rounded-full hover:bg-black/15 transition-colors focus:outline-none focus:ring-2 focus:ring-white/50",
|
|
3902
4154
|
"aria-label": "Close notification",
|
|
3903
|
-
children: /* @__PURE__ */
|
|
4155
|
+
children: /* @__PURE__ */ jsx24(FaTimes5, { className: "w-4 h-4" })
|
|
3904
4156
|
}
|
|
3905
4157
|
)
|
|
3906
4158
|
]
|
|
@@ -3909,10 +4161,10 @@ function ITToast({
|
|
|
3909
4161
|
}
|
|
3910
4162
|
|
|
3911
4163
|
// src/components/dropfile/dropfile.tsx
|
|
3912
|
-
import { useState as
|
|
4164
|
+
import { useState as useState19, useEffect as useEffect15, useRef as useRef8 } from "react";
|
|
3913
4165
|
import { useDropzone } from "react-dropzone";
|
|
3914
|
-
import
|
|
3915
|
-
import { Fragment as Fragment5, jsx as
|
|
4166
|
+
import clsx18 from "clsx";
|
|
4167
|
+
import { Fragment as Fragment5, jsx as jsx25, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
3916
4168
|
var ITDropfile = ({
|
|
3917
4169
|
onFileSelect,
|
|
3918
4170
|
onCancel,
|
|
@@ -3925,15 +4177,15 @@ var ITDropfile = ({
|
|
|
3925
4177
|
onStatusChange,
|
|
3926
4178
|
initialPreviewUrl
|
|
3927
4179
|
}) => {
|
|
3928
|
-
const [selectedFile, setSelectedFile] =
|
|
3929
|
-
const [fileType, setFileType] =
|
|
3930
|
-
const [imagePreview, setImagePreview] =
|
|
3931
|
-
const [isConfirmed, setIsConfirmed] =
|
|
3932
|
-
const [internalUploadStatus, setInternalUploadStatus] =
|
|
4180
|
+
const [selectedFile, setSelectedFile] = useState19(null);
|
|
4181
|
+
const [fileType, setFileType] = useState19(null);
|
|
4182
|
+
const [imagePreview, setImagePreview] = useState19(initialPreviewUrl || null);
|
|
4183
|
+
const [isConfirmed, setIsConfirmed] = useState19(false);
|
|
4184
|
+
const [internalUploadStatus, setInternalUploadStatus] = useState19(
|
|
3933
4185
|
initialPreviewUrl ? "subido" /* UPLOADED */ : "pendiente" /* PENDING */
|
|
3934
4186
|
);
|
|
3935
|
-
const canvasRef =
|
|
3936
|
-
|
|
4187
|
+
const canvasRef = useRef8(null);
|
|
4188
|
+
useEffect15(() => {
|
|
3937
4189
|
if (initialPreviewUrl && !selectedFile) {
|
|
3938
4190
|
setImagePreview(initialPreviewUrl);
|
|
3939
4191
|
if (externalStatus === void 0) setInternalUploadStatus("subido" /* UPLOADED */);
|
|
@@ -4022,9 +4274,9 @@ var ITDropfile = ({
|
|
|
4022
4274
|
}
|
|
4023
4275
|
};
|
|
4024
4276
|
const { label, color, dotColor } = config[status];
|
|
4025
|
-
return /* @__PURE__ */
|
|
4026
|
-
/* @__PURE__ */
|
|
4027
|
-
/* @__PURE__ */
|
|
4277
|
+
return /* @__PURE__ */ jsxs17("div", { className: `inline-flex items-center gap-2 px-2.5 py-1 rounded-full border ${color}`, children: [
|
|
4278
|
+
/* @__PURE__ */ jsx25("div", { className: `w-2 h-2 rounded-full ${dotColor}` }),
|
|
4279
|
+
/* @__PURE__ */ jsx25("span", { className: "text-xs font-medium flex items-center gap-1.5", children: label })
|
|
4028
4280
|
] });
|
|
4029
4281
|
};
|
|
4030
4282
|
const onDrop = (acceptedFiles) => {
|
|
@@ -4056,12 +4308,12 @@ var ITDropfile = ({
|
|
|
4056
4308
|
accept: getAcceptedFileTypes(),
|
|
4057
4309
|
maxFiles: 1
|
|
4058
4310
|
});
|
|
4059
|
-
|
|
4311
|
+
useEffect15(() => {
|
|
4060
4312
|
const renderPDF = async () => {
|
|
4061
4313
|
};
|
|
4062
4314
|
renderPDF();
|
|
4063
4315
|
}, [selectedFile, fileType]);
|
|
4064
|
-
|
|
4316
|
+
useEffect15(() => {
|
|
4065
4317
|
return () => {
|
|
4066
4318
|
if (imagePreview) {
|
|
4067
4319
|
URL.revokeObjectURL(imagePreview);
|
|
@@ -4099,19 +4351,19 @@ var ITDropfile = ({
|
|
|
4099
4351
|
handleCancel();
|
|
4100
4352
|
};
|
|
4101
4353
|
const isImage = fileType && fileType.startsWith("image/");
|
|
4102
|
-
return /* @__PURE__ */
|
|
4103
|
-
/* @__PURE__ */
|
|
4104
|
-
/* @__PURE__ */
|
|
4354
|
+
return /* @__PURE__ */ jsxs17("div", { className: clsx18("w-full transition-all duration-300", containerClassName), children: [
|
|
4355
|
+
/* @__PURE__ */ jsxs17("div", { className: "flex items-center justify-between mb-2", children: [
|
|
4356
|
+
/* @__PURE__ */ jsxs17("label", { className: "block text-sm font-semibold text-gray-700", children: [
|
|
4105
4357
|
"Subir archivo ",
|
|
4106
|
-
/* @__PURE__ */
|
|
4358
|
+
/* @__PURE__ */ jsxs17("span", { className: "text-gray-400 font-normal text-xs", children: [
|
|
4107
4359
|
"(",
|
|
4108
4360
|
getFileExtensions(),
|
|
4109
4361
|
")"
|
|
4110
4362
|
] })
|
|
4111
4363
|
] }),
|
|
4112
|
-
showStatusBadge && selectedFile && /* @__PURE__ */
|
|
4364
|
+
showStatusBadge && selectedFile && /* @__PURE__ */ jsx25(StatusBadge, { status: uploadStatus })
|
|
4113
4365
|
] }),
|
|
4114
|
-
!selectedFile && !imagePreview ? /* @__PURE__ */
|
|
4366
|
+
!selectedFile && !imagePreview ? /* @__PURE__ */ jsxs17(
|
|
4115
4367
|
"div",
|
|
4116
4368
|
{
|
|
4117
4369
|
...getRootProps(),
|
|
@@ -4121,41 +4373,41 @@ var ITDropfile = ({
|
|
|
4121
4373
|
${isDragActive ? "border-primary-500 bg-primary-50 scale-[1.01]" : "border-gray-300 bg-white hover:border-primary-400 hover:bg-gray-50"}
|
|
4122
4374
|
`,
|
|
4123
4375
|
children: [
|
|
4124
|
-
/* @__PURE__ */
|
|
4125
|
-
/* @__PURE__ */
|
|
4376
|
+
/* @__PURE__ */ jsx25("input", { ...getInputProps() }),
|
|
4377
|
+
/* @__PURE__ */ jsx25("div", { className: `mb-3 p-3 rounded-full transition-colors duration-300 ${isDragActive ? "bg-primary-100" : "bg-gray-100 group-hover:bg-primary-50"}`, children: /* @__PURE__ */ jsx25(
|
|
4126
4378
|
"svg",
|
|
4127
4379
|
{
|
|
4128
4380
|
className: `w-6 h-6 transition-colors duration-300 ${isDragActive ? "text-primary-600" : "text-gray-400 group-hover:text-primary-500"}`,
|
|
4129
4381
|
fill: "none",
|
|
4130
4382
|
viewBox: "0 0 24 24",
|
|
4131
4383
|
stroke: "currentColor",
|
|
4132
|
-
children: /* @__PURE__ */
|
|
4384
|
+
children: /* @__PURE__ */ jsx25("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12" })
|
|
4133
4385
|
}
|
|
4134
4386
|
) }),
|
|
4135
|
-
/* @__PURE__ */
|
|
4387
|
+
/* @__PURE__ */ jsx25("div", { className: "text-center space-y-1", children: /* @__PURE__ */ jsx25("p", { className: `text-sm font-medium transition-colors duration-300 ${isDragActive ? "text-primary-700" : "text-gray-700"}`, children: isDragActive ? "\xA1Suelta aqu\xED!" : "Haz clic o arrastra" }) })
|
|
4136
4388
|
]
|
|
4137
4389
|
}
|
|
4138
|
-
) : /* @__PURE__ */
|
|
4139
|
-
/* @__PURE__ */
|
|
4140
|
-
/* @__PURE__ */
|
|
4141
|
-
/* @__PURE__ */
|
|
4142
|
-
/* @__PURE__ */
|
|
4143
|
-
/* @__PURE__ */
|
|
4390
|
+
) : /* @__PURE__ */ jsxs17("div", { className: "w-full bg-white border border-gray-200 rounded-xl shadow-sm overflow-hidden animate-fade-in", children: [
|
|
4391
|
+
/* @__PURE__ */ jsx25("div", { className: "flex items-center justify-between p-3 bg-gray-50 border-b border-gray-100", children: /* @__PURE__ */ jsxs17("div", { className: "flex items-center gap-3 overflow-hidden", children: [
|
|
4392
|
+
/* @__PURE__ */ jsx25("div", { className: "flex-shrink-0 w-8 h-8 rounded-lg bg-primary-100 flex items-center justify-center text-primary-600", children: selectedFile && fileType?.startsWith("image/") || !selectedFile && imagePreview ? /* @__PURE__ */ jsx25("svg", { className: "w-5 h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsx25("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" }) }) : /* @__PURE__ */ jsx25("svg", { className: "w-5 h-5", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsx25("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" }) }) }),
|
|
4393
|
+
/* @__PURE__ */ jsxs17("div", { className: "min-w-0", children: [
|
|
4394
|
+
/* @__PURE__ */ jsx25("p", { className: "text-xs font-medium text-gray-900 truncate", title: selectedFile?.name || "Imagen cargada", children: selectedFile?.name || "Imagen cargada" }),
|
|
4395
|
+
/* @__PURE__ */ jsx25("p", { className: "text-[10px] text-gray-500", children: selectedFile ? (selectedFile.size / 1024 / 1024).toFixed(2) + " MB" : "" })
|
|
4144
4396
|
] })
|
|
4145
4397
|
] }) }),
|
|
4146
|
-
/* @__PURE__ */
|
|
4398
|
+
/* @__PURE__ */ jsx25("div", { className: clsx18("relative bg-gray-100 flex items-center justify-center", !contentClassName ? "max-h-[200px] min-h-[100px] overflow-auto" : contentClassName), children: selectedFile && fileType?.startsWith("image/") || !selectedFile && imagePreview ? /* @__PURE__ */ jsx25(
|
|
4147
4399
|
"img",
|
|
4148
4400
|
{
|
|
4149
4401
|
src: imagePreview,
|
|
4150
4402
|
alt: "Vista previa",
|
|
4151
4403
|
className: "w-full h-full object-contain max-h-[200px]"
|
|
4152
4404
|
}
|
|
4153
|
-
) : /* @__PURE__ */
|
|
4154
|
-
/* @__PURE__ */
|
|
4155
|
-
/* @__PURE__ */
|
|
4405
|
+
) : /* @__PURE__ */ jsxs17("div", { className: "py-8 flex flex-col items-center text-gray-400", children: [
|
|
4406
|
+
/* @__PURE__ */ jsx25("svg", { className: "w-10 h-10 mb-2 opacity-50", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsx25("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z" }) }),
|
|
4407
|
+
/* @__PURE__ */ jsx25("span", { className: "text-xs", children: "Sin vista previa" })
|
|
4156
4408
|
] }) }),
|
|
4157
|
-
/* @__PURE__ */
|
|
4158
|
-
/* @__PURE__ */
|
|
4409
|
+
/* @__PURE__ */ jsx25("div", { className: "px-3 py-2 bg-white border-t border-gray-100 flex justify-end gap-2", children: !isConfirmed ? /* @__PURE__ */ jsxs17(Fragment5, { children: [
|
|
4410
|
+
/* @__PURE__ */ jsx25(
|
|
4159
4411
|
"button",
|
|
4160
4412
|
{
|
|
4161
4413
|
type: "button",
|
|
@@ -4164,31 +4416,31 @@ var ITDropfile = ({
|
|
|
4164
4416
|
children: "Cancelar"
|
|
4165
4417
|
}
|
|
4166
4418
|
),
|
|
4167
|
-
/* @__PURE__ */
|
|
4419
|
+
/* @__PURE__ */ jsxs17(
|
|
4168
4420
|
"button",
|
|
4169
4421
|
{
|
|
4170
4422
|
type: "button",
|
|
4171
4423
|
onClick: handleConfirm,
|
|
4172
4424
|
className: "px-3 py-1.5 text-xs font-medium text-white bg-primary-600 rounded-lg hover:bg-primary-700 shadow-sm transition-colors flex items-center gap-1",
|
|
4173
4425
|
children: [
|
|
4174
|
-
/* @__PURE__ */
|
|
4175
|
-
/* @__PURE__ */
|
|
4426
|
+
/* @__PURE__ */ jsx25("span", { children: "Confirmar" }),
|
|
4427
|
+
/* @__PURE__ */ jsx25("svg", { className: "w-3 h-3", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsx25("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) })
|
|
4176
4428
|
]
|
|
4177
4429
|
}
|
|
4178
4430
|
)
|
|
4179
|
-
] }) : /* @__PURE__ */
|
|
4431
|
+
] }) : /* @__PURE__ */ jsxs17(
|
|
4180
4432
|
"button",
|
|
4181
4433
|
{
|
|
4182
4434
|
type: "button",
|
|
4183
4435
|
onClick: handleDelete,
|
|
4184
4436
|
className: "px-3 py-1.5 text-xs font-medium text-danger-600 bg-danger-50 border border-danger-100 rounded-lg hover:bg-danger-100 transition-colors flex items-center gap-1",
|
|
4185
4437
|
children: [
|
|
4186
|
-
/* @__PURE__ */
|
|
4187
|
-
/* @__PURE__ */
|
|
4438
|
+
/* @__PURE__ */ jsx25("svg", { className: "w-3 h-3", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ jsx25("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" }) }),
|
|
4439
|
+
/* @__PURE__ */ jsx25("span", { children: "Eliminar" })
|
|
4188
4440
|
]
|
|
4189
4441
|
}
|
|
4190
4442
|
) }),
|
|
4191
|
-
uploadStatus === "subiendo" /* UPLOADING */ && /* @__PURE__ */
|
|
4443
|
+
uploadStatus === "subiendo" /* UPLOADING */ && /* @__PURE__ */ jsx25("div", { className: "px-4 pb-2", children: /* @__PURE__ */ jsx25("div", { className: "w-full bg-gray-200 rounded-full h-1.5", children: /* @__PURE__ */ jsx25(
|
|
4192
4444
|
"div",
|
|
4193
4445
|
{
|
|
4194
4446
|
className: "bg-primary-600 h-1.5 rounded-full transition-all duration-1000 ease-out",
|
|
@@ -4204,12 +4456,12 @@ var ITDropfile = ({
|
|
|
4204
4456
|
var dropfile_default = ITDropfile;
|
|
4205
4457
|
|
|
4206
4458
|
// src/components/layout/layout.tsx
|
|
4207
|
-
import { useState as
|
|
4459
|
+
import { useState as useState22 } from "react";
|
|
4208
4460
|
|
|
4209
4461
|
// src/components/topbar/topbar.tsx
|
|
4210
4462
|
import { FaUserCircle as FaUserCircle2, FaBars } from "react-icons/fa";
|
|
4211
|
-
import { useRef as
|
|
4212
|
-
import { jsx as
|
|
4463
|
+
import { useRef as useRef9, useState as useState20 } from "react";
|
|
4464
|
+
import { jsx as jsx26, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
4213
4465
|
function ITTopBar({
|
|
4214
4466
|
logo,
|
|
4215
4467
|
logoText,
|
|
@@ -4219,10 +4471,10 @@ function ITTopBar({
|
|
|
4219
4471
|
navItems,
|
|
4220
4472
|
onNavItemClick
|
|
4221
4473
|
}) {
|
|
4222
|
-
const [isUserMenuOpen, setIsUserMenuOpen] =
|
|
4223
|
-
const userMenuRef =
|
|
4474
|
+
const [isUserMenuOpen, setIsUserMenuOpen] = useState20(false);
|
|
4475
|
+
const userMenuRef = useRef9(null);
|
|
4224
4476
|
useClickOutside_default(userMenuRef, () => setIsUserMenuOpen(false));
|
|
4225
|
-
return /* @__PURE__ */
|
|
4477
|
+
return /* @__PURE__ */ jsx26(
|
|
4226
4478
|
"header",
|
|
4227
4479
|
{
|
|
4228
4480
|
className: "sticky top-0 z-40 backdrop-blur-md transition-all duration-300",
|
|
@@ -4231,9 +4483,9 @@ function ITTopBar({
|
|
|
4231
4483
|
borderBottom: `1px solid ${theme.topbar?.borderColor || "#e2e8f0"}`,
|
|
4232
4484
|
boxShadow: theme.topbar?.shadow || "none"
|
|
4233
4485
|
},
|
|
4234
|
-
children: /* @__PURE__ */
|
|
4235
|
-
/* @__PURE__ */
|
|
4236
|
-
showMobileMenuButton && /* @__PURE__ */
|
|
4486
|
+
children: /* @__PURE__ */ jsxs18("div", { className: "flex items-center justify-between h-[72px] px-6 lg:px-8", children: [
|
|
4487
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-5", children: [
|
|
4488
|
+
showMobileMenuButton && /* @__PURE__ */ jsx26(
|
|
4237
4489
|
"button",
|
|
4238
4490
|
{
|
|
4239
4491
|
className: "lg:hidden p-2.5 rounded-xl transition-colors duration-200",
|
|
@@ -4243,12 +4495,12 @@ function ITTopBar({
|
|
|
4243
4495
|
onMouseEnter: (e) => e.currentTarget.style.backgroundColor = theme.topbar?.userMenu?.hoverBackground || "#f1f5f9",
|
|
4244
4496
|
onMouseLeave: (e) => e.currentTarget.style.backgroundColor = "transparent",
|
|
4245
4497
|
onClick: onToggleMobileMenu,
|
|
4246
|
-
children: /* @__PURE__ */
|
|
4498
|
+
children: /* @__PURE__ */ jsx26(FaBars, { className: "w-[1.125rem] h-[1.125rem]" })
|
|
4247
4499
|
}
|
|
4248
4500
|
),
|
|
4249
|
-
/* @__PURE__ */
|
|
4250
|
-
logo && /* @__PURE__ */
|
|
4251
|
-
logoText && /* @__PURE__ */
|
|
4501
|
+
/* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-3", children: [
|
|
4502
|
+
logo && /* @__PURE__ */ jsx26("div", { className: "flex-shrink-0 drop-shadow-sm", children: logo }),
|
|
4503
|
+
logoText && /* @__PURE__ */ jsx26(
|
|
4252
4504
|
"span",
|
|
4253
4505
|
{
|
|
4254
4506
|
className: "text-[1.15rem] font-bold tracking-tight",
|
|
@@ -4257,7 +4509,7 @@ function ITTopBar({
|
|
|
4257
4509
|
}
|
|
4258
4510
|
)
|
|
4259
4511
|
] }),
|
|
4260
|
-
navItems && navItems.length > 0 && /* @__PURE__ */
|
|
4512
|
+
navItems && navItems.length > 0 && /* @__PURE__ */ jsx26("nav", { className: "hidden md:flex ml-8 space-x-1 border-l pl-8", style: { borderColor: theme.topbar?.borderColor || "#e2e8f0" }, children: navItems.map((item) => /* @__PURE__ */ jsx26(
|
|
4261
4513
|
"button",
|
|
4262
4514
|
{
|
|
4263
4515
|
onClick: () => onNavItemClick?.(item.id),
|
|
@@ -4271,16 +4523,16 @@ function ITTopBar({
|
|
|
4271
4523
|
e.currentTarget.style.color = theme.topbar?.textColor || "#475569";
|
|
4272
4524
|
e.currentTarget.style.backgroundColor = "transparent";
|
|
4273
4525
|
},
|
|
4274
|
-
children: /* @__PURE__ */
|
|
4275
|
-
item.icon && /* @__PURE__ */
|
|
4526
|
+
children: /* @__PURE__ */ jsxs18("div", { className: "flex items-center gap-2", children: [
|
|
4527
|
+
item.icon && /* @__PURE__ */ jsx26("span", { className: "opacity-70", children: item.icon }),
|
|
4276
4528
|
item.label
|
|
4277
4529
|
] })
|
|
4278
4530
|
},
|
|
4279
4531
|
item.id
|
|
4280
4532
|
)) })
|
|
4281
4533
|
] }),
|
|
4282
|
-
userMenu && /* @__PURE__ */
|
|
4283
|
-
/* @__PURE__ */
|
|
4534
|
+
userMenu && /* @__PURE__ */ jsxs18("div", { className: "relative", children: [
|
|
4535
|
+
/* @__PURE__ */ jsxs18(
|
|
4284
4536
|
"button",
|
|
4285
4537
|
{
|
|
4286
4538
|
type: "button",
|
|
@@ -4296,19 +4548,19 @@ function ITTopBar({
|
|
|
4296
4548
|
},
|
|
4297
4549
|
onClick: () => setIsUserMenuOpen(!isUserMenuOpen),
|
|
4298
4550
|
children: [
|
|
4299
|
-
/* @__PURE__ */
|
|
4300
|
-
userMenu.userImage ? /* @__PURE__ */
|
|
4551
|
+
/* @__PURE__ */ jsxs18("div", { className: "relative", children: [
|
|
4552
|
+
userMenu.userImage ? /* @__PURE__ */ jsx26(
|
|
4301
4553
|
"img",
|
|
4302
4554
|
{
|
|
4303
4555
|
className: "w-9 h-9 rounded-full object-cover ring-2 ring-white shadow-sm",
|
|
4304
4556
|
src: userMenu.userImage,
|
|
4305
4557
|
alt: "Current user"
|
|
4306
4558
|
}
|
|
4307
|
-
) : /* @__PURE__ */
|
|
4308
|
-
/* @__PURE__ */
|
|
4559
|
+
) : /* @__PURE__ */ jsx26("div", { className: "w-9 h-9 rounded-full bg-slate-100 flex items-center justify-center ring-2 ring-white shadow-sm", children: /* @__PURE__ */ jsx26(FaUserCircle2, { className: "w-6 h-6", style: { color: theme.topbar?.iconColor || "#94a3b8" } }) }),
|
|
4560
|
+
/* @__PURE__ */ jsx26("div", { className: "absolute bottom-0 right-0 w-2.5 h-2.5 bg-green-500 border-2 border-white rounded-full" })
|
|
4309
4561
|
] }),
|
|
4310
|
-
/* @__PURE__ */
|
|
4311
|
-
/* @__PURE__ */
|
|
4562
|
+
/* @__PURE__ */ jsxs18("div", { className: "hidden sm:flex flex-col text-left py-0.5", children: [
|
|
4563
|
+
/* @__PURE__ */ jsx26(
|
|
4312
4564
|
"span",
|
|
4313
4565
|
{
|
|
4314
4566
|
className: "font-semibold text-[0.85rem] leading-tight",
|
|
@@ -4316,7 +4568,7 @@ function ITTopBar({
|
|
|
4316
4568
|
children: userMenu.userName
|
|
4317
4569
|
}
|
|
4318
4570
|
),
|
|
4319
|
-
/* @__PURE__ */
|
|
4571
|
+
/* @__PURE__ */ jsx26(
|
|
4320
4572
|
"span",
|
|
4321
4573
|
{
|
|
4322
4574
|
className: "text-[0.7rem] font-medium",
|
|
@@ -4328,7 +4580,7 @@ function ITTopBar({
|
|
|
4328
4580
|
]
|
|
4329
4581
|
}
|
|
4330
4582
|
),
|
|
4331
|
-
/* @__PURE__ */
|
|
4583
|
+
/* @__PURE__ */ jsxs18(
|
|
4332
4584
|
"div",
|
|
4333
4585
|
{
|
|
4334
4586
|
ref: userMenuRef,
|
|
@@ -4341,15 +4593,15 @@ function ITTopBar({
|
|
|
4341
4593
|
border: `1px solid ${theme.topbar?.userMenu?.dropdown?.borderColor || "#f1f5f9"}`
|
|
4342
4594
|
},
|
|
4343
4595
|
children: [
|
|
4344
|
-
/* @__PURE__ */
|
|
4345
|
-
/* @__PURE__ */
|
|
4346
|
-
/* @__PURE__ */
|
|
4596
|
+
/* @__PURE__ */ jsxs18("div", { className: "px-5 py-4 border-b bg-slate-50/50", style: { borderColor: theme.topbar?.userMenu?.dropdown?.borderColor || "#f1f5f9" }, children: [
|
|
4597
|
+
/* @__PURE__ */ jsx26("span", { className: "block font-bold text-[0.9rem]", style: { color: theme.topbar?.userMenu?.textColor || "#0f172a" }, children: userMenu.userName }),
|
|
4598
|
+
/* @__PURE__ */ jsx26("span", { className: "block text-xs font-medium truncate mt-0.5", style: { color: theme.topbar?.userMenu?.subtitleColor || "#64748b" }, children: userMenu.userEmail })
|
|
4347
4599
|
] }),
|
|
4348
|
-
/* @__PURE__ */
|
|
4600
|
+
/* @__PURE__ */ jsx26("ul", { className: "py-2", children: userMenu.menuItems.map((m, i) => {
|
|
4349
4601
|
const isDestructive = m.label.toLowerCase().includes("salir") || m.label.toLowerCase().includes("cerrar") || m.label.toLowerCase().includes("logout");
|
|
4350
|
-
return /* @__PURE__ */
|
|
4351
|
-
i === userMenu.menuItems.length - 1 && isDestructive && i > 0 && /* @__PURE__ */
|
|
4352
|
-
/* @__PURE__ */
|
|
4602
|
+
return /* @__PURE__ */ jsxs18("li", { className: "px-2", children: [
|
|
4603
|
+
i === userMenu.menuItems.length - 1 && isDestructive && i > 0 && /* @__PURE__ */ jsx26("div", { className: "h-px bg-slate-100 my-1 mx-2" }),
|
|
4604
|
+
/* @__PURE__ */ jsx26(
|
|
4353
4605
|
"button",
|
|
4354
4606
|
{
|
|
4355
4607
|
onClick: (e) => {
|
|
@@ -4379,22 +4631,24 @@ function ITTopBar({
|
|
|
4379
4631
|
}
|
|
4380
4632
|
|
|
4381
4633
|
// src/components/sidebar/sidebar.tsx
|
|
4382
|
-
import { useEffect as
|
|
4634
|
+
import { useEffect as useEffect16, useRef as useRef10, useState as useState21 } from "react";
|
|
4383
4635
|
import { FaChevronDown as FaChevronDown2 } from "react-icons/fa";
|
|
4384
|
-
import { jsx as
|
|
4636
|
+
import { jsx as jsx27, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
4385
4637
|
function ITSidebar({
|
|
4386
4638
|
navigationItems = [],
|
|
4387
4639
|
isCollapsed = false,
|
|
4388
4640
|
onToggleCollapse,
|
|
4389
4641
|
className = "",
|
|
4390
|
-
visibleOnMobile = false
|
|
4642
|
+
visibleOnMobile = false,
|
|
4643
|
+
onItemClick,
|
|
4644
|
+
onSubItemClick
|
|
4391
4645
|
}) {
|
|
4392
|
-
const [expandedItems, setExpandedItems] =
|
|
4393
|
-
const [isHovering, setIsHovering] =
|
|
4394
|
-
const sidebarRef =
|
|
4395
|
-
const hoverTimeoutRef =
|
|
4396
|
-
const leaveTimeoutRef =
|
|
4397
|
-
|
|
4646
|
+
const [expandedItems, setExpandedItems] = useState21(/* @__PURE__ */ new Set());
|
|
4647
|
+
const [isHovering, setIsHovering] = useState21(false);
|
|
4648
|
+
const sidebarRef = useRef10(null);
|
|
4649
|
+
const hoverTimeoutRef = useRef10(null);
|
|
4650
|
+
const leaveTimeoutRef = useRef10(null);
|
|
4651
|
+
useEffect16(() => {
|
|
4398
4652
|
const handleMouseEnter = () => {
|
|
4399
4653
|
if (hoverTimeoutRef.current) clearTimeout(hoverTimeoutRef.current);
|
|
4400
4654
|
if (leaveTimeoutRef.current) clearTimeout(leaveTimeoutRef.current);
|
|
@@ -4428,13 +4682,14 @@ function ITSidebar({
|
|
|
4428
4682
|
const handleItemClick = (item) => {
|
|
4429
4683
|
if (item.subitems && item.subitems.length > 0) {
|
|
4430
4684
|
toggleExpanded(item.id);
|
|
4431
|
-
} else
|
|
4432
|
-
item.action();
|
|
4685
|
+
} else {
|
|
4686
|
+
if (item.action) item.action();
|
|
4687
|
+
if (onItemClick) onItemClick(item);
|
|
4433
4688
|
}
|
|
4434
4689
|
};
|
|
4435
4690
|
const isSidebarCollapsed = visibleOnMobile ? false : !isHovering && isCollapsed;
|
|
4436
4691
|
const sidebarWidth = isSidebarCollapsed ? "w-[88px]" : "w-[280px]";
|
|
4437
|
-
return /* @__PURE__ */
|
|
4692
|
+
return /* @__PURE__ */ jsx27(
|
|
4438
4693
|
"aside",
|
|
4439
4694
|
{
|
|
4440
4695
|
ref: sidebarRef,
|
|
@@ -4453,8 +4708,8 @@ function ITSidebar({
|
|
|
4453
4708
|
WebkitBackdropFilter: "blur(12px)",
|
|
4454
4709
|
backdropFilter: "blur(12px)"
|
|
4455
4710
|
},
|
|
4456
|
-
children: /* @__PURE__ */
|
|
4457
|
-
/* @__PURE__ */
|
|
4711
|
+
children: /* @__PURE__ */ jsx27("nav", { className: "flex-1 py-6 overflow-y-auto overflow-x-hidden custom-scrollbar px-4", children: /* @__PURE__ */ jsx27("ul", { className: "space-y-2", children: navigationItems.map((item) => /* @__PURE__ */ jsxs19("li", { className: "relative group/navitem", children: [
|
|
4712
|
+
/* @__PURE__ */ jsxs19(
|
|
4458
4713
|
"div",
|
|
4459
4714
|
{
|
|
4460
4715
|
className: `flex items-center cursor-pointer
|
|
@@ -4475,15 +4730,15 @@ function ITSidebar({
|
|
|
4475
4730
|
},
|
|
4476
4731
|
onClick: () => handleItemClick(item),
|
|
4477
4732
|
children: [
|
|
4478
|
-
item.isActive && !isSidebarCollapsed && /* @__PURE__ */
|
|
4733
|
+
item.isActive && !isSidebarCollapsed && /* @__PURE__ */ jsx27(
|
|
4479
4734
|
"div",
|
|
4480
4735
|
{
|
|
4481
4736
|
className: "absolute left-0 top-1/4 bottom-1/4 w-[3px] rounded-r-full transition-all",
|
|
4482
4737
|
style: { backgroundColor: theme.sidebar?.active?.iconColor || "#10b981", boxShadow: `0 0 10px ${theme.sidebar?.active?.iconColor || "#10b981"}` }
|
|
4483
4738
|
}
|
|
4484
4739
|
),
|
|
4485
|
-
/* @__PURE__ */
|
|
4486
|
-
item.icon && /* @__PURE__ */
|
|
4740
|
+
/* @__PURE__ */ jsxs19("div", { className: `flex items-center ${!isSidebarCollapsed ? "gap-3.5" : "justify-center"} relative z-10 w-full`, children: [
|
|
4741
|
+
item.icon && /* @__PURE__ */ jsx27(
|
|
4487
4742
|
"div",
|
|
4488
4743
|
{
|
|
4489
4744
|
className: `transition-all duration-300 flex-shrink-0 flex items-center justify-center`,
|
|
@@ -4496,7 +4751,7 @@ function ITSidebar({
|
|
|
4496
4751
|
children: item.icon
|
|
4497
4752
|
}
|
|
4498
4753
|
),
|
|
4499
|
-
!isSidebarCollapsed && /* @__PURE__ */
|
|
4754
|
+
!isSidebarCollapsed && /* @__PURE__ */ jsx27(
|
|
4500
4755
|
"span",
|
|
4501
4756
|
{
|
|
4502
4757
|
className: `transition-all duration-300 truncate tracking-wide`,
|
|
@@ -4509,15 +4764,15 @@ function ITSidebar({
|
|
|
4509
4764
|
}
|
|
4510
4765
|
)
|
|
4511
4766
|
] }),
|
|
4512
|
-
!isSidebarCollapsed && item.subitems && item.subitems.length > 0 && /* @__PURE__ */
|
|
4767
|
+
!isSidebarCollapsed && item.subitems && item.subitems.length > 0 && /* @__PURE__ */ jsx27(
|
|
4513
4768
|
"div",
|
|
4514
4769
|
{
|
|
4515
4770
|
className: `flex-shrink-0 transition-transform duration-300 ease-[cubic-bezier(0.2,0,0,1)] ${expandedItems.has(item.id) ? "rotate-180" : ""}`,
|
|
4516
4771
|
style: { color: item.isActive ? theme.sidebar?.active?.color || "#0f172a" : theme.sidebar?.icon?.color || "#64748b", opacity: 0.7 },
|
|
4517
|
-
children: /* @__PURE__ */
|
|
4772
|
+
children: /* @__PURE__ */ jsx27(FaChevronDown2, { className: "w-3 h-3" })
|
|
4518
4773
|
}
|
|
4519
4774
|
),
|
|
4520
|
-
item.badge && /* @__PURE__ */
|
|
4775
|
+
item.badge && /* @__PURE__ */ jsx27(
|
|
4521
4776
|
"span",
|
|
4522
4777
|
{
|
|
4523
4778
|
className: `
|
|
@@ -4535,7 +4790,7 @@ function ITSidebar({
|
|
|
4535
4790
|
]
|
|
4536
4791
|
}
|
|
4537
4792
|
),
|
|
4538
|
-
isSidebarCollapsed && /* @__PURE__ */
|
|
4793
|
+
isSidebarCollapsed && /* @__PURE__ */ jsxs19(
|
|
4539
4794
|
"div",
|
|
4540
4795
|
{
|
|
4541
4796
|
className: "absolute left-full top-0 ml-4 rounded-2xl opacity-0 invisible group-hover/navitem:opacity-100 group-hover/navitem:visible transition-all duration-300 pointer-events-none z-50 min-w-[220px] overflow-hidden -translate-x-2 group-hover/navitem:translate-x-0 shadow-[0_10px_40px_-10px_rgba(0,0,0,0.15)]",
|
|
@@ -4546,30 +4801,33 @@ function ITSidebar({
|
|
|
4546
4801
|
backdropFilter: "blur(16px)"
|
|
4547
4802
|
},
|
|
4548
4803
|
children: [
|
|
4549
|
-
/* @__PURE__ */
|
|
4550
|
-
item.icon && /* @__PURE__ */
|
|
4551
|
-
/* @__PURE__ */
|
|
4804
|
+
/* @__PURE__ */ jsxs19("div", { className: "px-5 py-4 flex items-center gap-3 font-semibold border-b", style: { borderColor: theme.sidebar?.borderColor || "#e2e8f0", color: theme.sidebar?.active?.color || "#0f172a" }, children: [
|
|
4805
|
+
item.icon && /* @__PURE__ */ jsx27("span", { style: { color: theme.sidebar?.active?.iconColor || "#10b981" }, className: "text-xl drop-shadow-sm", children: item.icon }),
|
|
4806
|
+
/* @__PURE__ */ jsx27("span", { className: "tracking-wide text-[15px]", children: item.label })
|
|
4552
4807
|
] }),
|
|
4553
|
-
item.subitems && item.subitems.length > 0 ? /* @__PURE__ */
|
|
4808
|
+
item.subitems && item.subitems.length > 0 ? /* @__PURE__ */ jsx27("div", { className: "py-2", children: item.subitems.map((subitem) => /* @__PURE__ */ jsxs19(
|
|
4554
4809
|
"div",
|
|
4555
4810
|
{
|
|
4556
4811
|
className: `px-5 py-2.5 text-sm flex items-center gap-3 transition-colors`,
|
|
4557
4812
|
children: [
|
|
4558
|
-
/* @__PURE__ */
|
|
4559
|
-
/* @__PURE__ */
|
|
4813
|
+
/* @__PURE__ */ jsx27("span", { className: `w-1.5 h-1.5 rounded-full transition-all ${subitem.isActive ? "scale-125" : ""}`, style: { backgroundColor: subitem.isActive ? theme.sidebar?.active?.iconColor || "#10b981" : theme.sidebar?.icon?.color || "#94a3b8" } }),
|
|
4814
|
+
/* @__PURE__ */ jsx27("span", { style: { color: subitem.isActive ? theme.sidebar?.active?.color || "#0f172a" : theme.sidebar?.label?.color || "#475569", fontWeight: subitem.isActive ? 600 : 500 }, children: subitem.label })
|
|
4560
4815
|
]
|
|
4561
4816
|
},
|
|
4562
4817
|
subitem.id
|
|
4563
|
-
)) }) : /* @__PURE__ */
|
|
4818
|
+
)) }) : /* @__PURE__ */ jsx27("div", { className: "px-5 py-3 text-sm text-zinc-500 italic", children: "No hay submen\xFA" })
|
|
4564
4819
|
]
|
|
4565
4820
|
}
|
|
4566
4821
|
),
|
|
4567
|
-
!isSidebarCollapsed && item.subitems && item.subitems.length > 0 && /* @__PURE__ */
|
|
4568
|
-
subitem.isActive && /* @__PURE__ */
|
|
4569
|
-
/* @__PURE__ */
|
|
4822
|
+
!isSidebarCollapsed && item.subitems && item.subitems.length > 0 && /* @__PURE__ */ jsx27("div", { className: `overflow-hidden transition-all duration-400 ease-[cubic-bezier(0.2,0,0,1)] ${expandedItems.has(item.id) ? "max-h-[500px] opacity-100 mt-1" : "max-h-0 opacity-0"}`, children: /* @__PURE__ */ jsx27("ul", { className: "ml-5 pl-4 space-y-1 py-1", style: { borderLeft: `2px solid ${theme.sidebar?.borderColor || "#e2e8f0"}` }, children: item.subitems.map((subitem) => /* @__PURE__ */ jsxs19("li", { className: "relative", children: [
|
|
4823
|
+
subitem.isActive && /* @__PURE__ */ jsx27("div", { className: "absolute -left-[18px] top-1/2 -translate-y-1/2 w-4 h-[2px] rounded-r-full", style: { backgroundColor: theme.sidebar?.active?.iconColor || "#10b981" } }),
|
|
4824
|
+
/* @__PURE__ */ jsx27(
|
|
4570
4825
|
"button",
|
|
4571
4826
|
{
|
|
4572
|
-
onClick:
|
|
4827
|
+
onClick: () => {
|
|
4828
|
+
if (subitem.action) subitem.action();
|
|
4829
|
+
if (onSubItemClick) onSubItemClick(subitem);
|
|
4830
|
+
},
|
|
4573
4831
|
className: `block w-full text-left px-4 py-2 rounded-xl transition-all duration-300`,
|
|
4574
4832
|
style: {
|
|
4575
4833
|
color: subitem.isActive ? theme.sidebar?.active?.color || "#0f172a" : theme.sidebar?.label?.color || "#475569",
|
|
@@ -4600,7 +4858,7 @@ function ITSidebar({
|
|
|
4600
4858
|
}
|
|
4601
4859
|
|
|
4602
4860
|
// src/components/layout/layout.tsx
|
|
4603
|
-
import { jsx as
|
|
4861
|
+
import { jsx as jsx28, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
4604
4862
|
function ITLayout({
|
|
4605
4863
|
topBar,
|
|
4606
4864
|
sidebar,
|
|
@@ -4608,10 +4866,10 @@ function ITLayout({
|
|
|
4608
4866
|
className = "",
|
|
4609
4867
|
contentClassName = ""
|
|
4610
4868
|
}) {
|
|
4611
|
-
const [desktopCollapsed, setDesktopCollapsed] =
|
|
4612
|
-
const [mobileSidebarOpen, setMobileSidebarOpen] =
|
|
4613
|
-
return /* @__PURE__ */
|
|
4614
|
-
/* @__PURE__ */
|
|
4869
|
+
const [desktopCollapsed, setDesktopCollapsed] = useState22(true);
|
|
4870
|
+
const [mobileSidebarOpen, setMobileSidebarOpen] = useState22(false);
|
|
4871
|
+
return /* @__PURE__ */ jsxs20("div", { className: `flex flex-col h-screen overflow-hidden w-full ${className}`, children: [
|
|
4872
|
+
/* @__PURE__ */ jsx28(
|
|
4615
4873
|
ITTopBar,
|
|
4616
4874
|
{
|
|
4617
4875
|
...topBar,
|
|
@@ -4619,10 +4877,10 @@ function ITLayout({
|
|
|
4619
4877
|
onToggleMobileMenu: () => setMobileSidebarOpen((v) => !v)
|
|
4620
4878
|
}
|
|
4621
4879
|
),
|
|
4622
|
-
/* @__PURE__ */
|
|
4623
|
-
/* @__PURE__ */
|
|
4624
|
-
/* @__PURE__ */
|
|
4625
|
-
/* @__PURE__ */
|
|
4880
|
+
/* @__PURE__ */ jsxs20("div", { className: "flex flex-1 overflow-hidden relative", style: { backgroundColor: theme.layout?.backgroundColor || "#f8fafc" }, children: [
|
|
4881
|
+
/* @__PURE__ */ jsxs20("div", { className: "hidden lg:block relative z-40 h-full", children: [
|
|
4882
|
+
/* @__PURE__ */ jsx28("div", { className: "w-[88px] h-full flex-shrink-0" }),
|
|
4883
|
+
/* @__PURE__ */ jsx28("div", { className: "absolute top-0 left-0 h-full", children: /* @__PURE__ */ jsx28(
|
|
4626
4884
|
ITSidebar,
|
|
4627
4885
|
{
|
|
4628
4886
|
...sidebar,
|
|
@@ -4633,31 +4891,33 @@ function ITLayout({
|
|
|
4633
4891
|
}
|
|
4634
4892
|
) })
|
|
4635
4893
|
] }),
|
|
4636
|
-
mobileSidebarOpen && /* @__PURE__ */
|
|
4894
|
+
mobileSidebarOpen && /* @__PURE__ */ jsx28(
|
|
4637
4895
|
"div",
|
|
4638
4896
|
{
|
|
4639
4897
|
className: "lg:hidden fixed inset-0 z-50 transition-opacity duration-300 backdrop-blur-sm bg-black/40",
|
|
4640
4898
|
onClick: () => setMobileSidebarOpen(false),
|
|
4641
|
-
children: /* @__PURE__ */
|
|
4899
|
+
children: /* @__PURE__ */ jsx28(
|
|
4642
4900
|
"div",
|
|
4643
4901
|
{
|
|
4644
|
-
className: "h-full w-
|
|
4902
|
+
className: "h-full w-fit flex transform transition-transform duration-300 ease-[cubic-bezier(0.2,0,0,1)]",
|
|
4645
4903
|
onClick: (e) => e.stopPropagation(),
|
|
4646
|
-
children: /* @__PURE__ */
|
|
4904
|
+
children: /* @__PURE__ */ jsx28(
|
|
4647
4905
|
ITSidebar,
|
|
4648
4906
|
{
|
|
4649
4907
|
...sidebar,
|
|
4650
4908
|
isCollapsed: false,
|
|
4651
4909
|
visibleOnMobile: true,
|
|
4652
|
-
className: "h-full shadow-2xl",
|
|
4653
|
-
onToggleCollapse: () => setMobileSidebarOpen(false)
|
|
4910
|
+
className: "h-full shadow-2xl relative z-[60]",
|
|
4911
|
+
onToggleCollapse: () => setMobileSidebarOpen(false),
|
|
4912
|
+
onItemClick: () => setMobileSidebarOpen(false),
|
|
4913
|
+
onSubItemClick: () => setMobileSidebarOpen(false)
|
|
4654
4914
|
}
|
|
4655
4915
|
)
|
|
4656
4916
|
}
|
|
4657
4917
|
)
|
|
4658
4918
|
}
|
|
4659
4919
|
),
|
|
4660
|
-
/* @__PURE__ */
|
|
4920
|
+
/* @__PURE__ */ jsx28("main", { className: "flex-1 overflow-y-auto w-full custom-scrollbar relative z-0", children: /* @__PURE__ */ jsx28(
|
|
4661
4921
|
"div",
|
|
4662
4922
|
{
|
|
4663
4923
|
className: `mx-auto w-full h-full ${contentClassName}`,
|
|
@@ -4678,7 +4938,7 @@ var sizeClasses = {
|
|
|
4678
4938
|
};
|
|
4679
4939
|
|
|
4680
4940
|
// src/components/loader/loader.tsx
|
|
4681
|
-
import { jsx as
|
|
4941
|
+
import { jsx as jsx29 } from "react/jsx-runtime";
|
|
4682
4942
|
function ITLoader({
|
|
4683
4943
|
size = "md",
|
|
4684
4944
|
variant = "spinner",
|
|
@@ -4693,22 +4953,22 @@ function ITLoader({
|
|
|
4693
4953
|
const bgStyle = isCssValue ? { backgroundColor: resolvedColor } : {};
|
|
4694
4954
|
const colorClass = !isCssValue ? color : "";
|
|
4695
4955
|
if (variant === "spinner") {
|
|
4696
|
-
return /* @__PURE__ */
|
|
4956
|
+
return /* @__PURE__ */ jsx29(
|
|
4697
4957
|
"div",
|
|
4698
4958
|
{
|
|
4699
4959
|
className: `inline-block ${sizeClasses[size]} animate-spin rounded-full border-2 border-solid border-current border-r-transparent align-[-0.125em] motion-reduce:animate-[spin_1.5s_linear_infinite] ${colorClass} ${className}`,
|
|
4700
4960
|
role: "status",
|
|
4701
4961
|
style,
|
|
4702
|
-
children: /* @__PURE__ */
|
|
4962
|
+
children: /* @__PURE__ */ jsx29("span", { className: "!absolute !-m-px !h-px !w-px !overflow-hidden !whitespace-nowrap !border-0 !p-0 ![clip:rect(0,0,0,0)]", children: "Loading..." })
|
|
4703
4963
|
}
|
|
4704
4964
|
);
|
|
4705
4965
|
}
|
|
4706
4966
|
if (variant === "dots") {
|
|
4707
|
-
return /* @__PURE__ */
|
|
4967
|
+
return /* @__PURE__ */ jsx29(
|
|
4708
4968
|
"div",
|
|
4709
4969
|
{
|
|
4710
4970
|
className: `flex items-center justify-center space-x-2 ${className}`,
|
|
4711
|
-
children: [...Array(3)].map((_, i) => /* @__PURE__ */
|
|
4971
|
+
children: [...Array(3)].map((_, i) => /* @__PURE__ */ jsx29(
|
|
4712
4972
|
"div",
|
|
4713
4973
|
{
|
|
4714
4974
|
className: `${sizeClasses[size.replace(/l|g/, "")]} animate-bounce rounded-full ${colorClass}`,
|
|
@@ -4723,11 +4983,11 @@ function ITLoader({
|
|
|
4723
4983
|
);
|
|
4724
4984
|
}
|
|
4725
4985
|
if (variant === "bar") {
|
|
4726
|
-
return /* @__PURE__ */
|
|
4986
|
+
return /* @__PURE__ */ jsx29(
|
|
4727
4987
|
"div",
|
|
4728
4988
|
{
|
|
4729
4989
|
className: `w-full ${size === "sm" ? "h-1" : size === "md" ? "h-1.5" : size === "lg" ? "h-2" : "h-2.5"} bg-gray-200 rounded-full overflow-hidden ${className}`,
|
|
4730
|
-
children: /* @__PURE__ */
|
|
4990
|
+
children: /* @__PURE__ */ jsx29(
|
|
4731
4991
|
"div",
|
|
4732
4992
|
{
|
|
4733
4993
|
className: `h-full animate-progress ${colorClass}`,
|
|
@@ -4743,7 +5003,7 @@ function ITLoader({
|
|
|
4743
5003
|
);
|
|
4744
5004
|
}
|
|
4745
5005
|
if (variant === "pulse") {
|
|
4746
|
-
return /* @__PURE__ */
|
|
5006
|
+
return /* @__PURE__ */ jsx29(
|
|
4747
5007
|
"div",
|
|
4748
5008
|
{
|
|
4749
5009
|
className: `rounded-full ${sizeClasses[size]} animate-pulse ${colorClass} ${className}`,
|
|
@@ -4755,10 +5015,10 @@ function ITLoader({
|
|
|
4755
5015
|
}
|
|
4756
5016
|
|
|
4757
5017
|
// src/components/stepper/stepper.tsx
|
|
4758
|
-
import
|
|
4759
|
-
import { useEffect as
|
|
5018
|
+
import clsx19 from "clsx";
|
|
5019
|
+
import { useEffect as useEffect17, useRef as useRef11, useState as useState23 } from "react";
|
|
4760
5020
|
import { FaChevronLeft as FaChevronLeft4, FaChevronRight as FaChevronRight5, FaCheck as FaCheck3 } from "react-icons/fa";
|
|
4761
|
-
import { jsx as
|
|
5021
|
+
import { jsx as jsx30, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
4762
5022
|
function ITStepper({
|
|
4763
5023
|
steps,
|
|
4764
5024
|
currentStep,
|
|
@@ -4773,15 +5033,15 @@ function ITStepper({
|
|
|
4773
5033
|
maxContentHeight = "400px",
|
|
4774
5034
|
color = "primary"
|
|
4775
5035
|
}) {
|
|
4776
|
-
const [direction, setDirection] =
|
|
4777
|
-
const contentRef =
|
|
4778
|
-
const progressRef =
|
|
5036
|
+
const [direction, setDirection] = useState23("next");
|
|
5037
|
+
const contentRef = useRef11(null);
|
|
5038
|
+
const progressRef = useRef11(null);
|
|
4779
5039
|
const isThemeColor = color in theme.colors;
|
|
4780
5040
|
const resolvedColor = isThemeColor ? theme.colors[color][500] : color;
|
|
4781
|
-
|
|
5041
|
+
useEffect17(() => {
|
|
4782
5042
|
onStepChange?.(currentStep);
|
|
4783
5043
|
}, [currentStep, onStepChange]);
|
|
4784
|
-
|
|
5044
|
+
useEffect17(() => {
|
|
4785
5045
|
const pct = currentStep / Math.max(1, steps.length - 1) * 100;
|
|
4786
5046
|
if (progressRef.current) {
|
|
4787
5047
|
progressRef.current.style.width = `${pct}%`;
|
|
@@ -4825,23 +5085,23 @@ function ITStepper({
|
|
|
4825
5085
|
const renderStepContent = (index, isCompleted, isActive) => {
|
|
4826
5086
|
const step = steps[index];
|
|
4827
5087
|
if (isCompleted) {
|
|
4828
|
-
return /* @__PURE__ */
|
|
5088
|
+
return /* @__PURE__ */ jsx30(FaCheck3, { className: "w-4 h-4" });
|
|
4829
5089
|
}
|
|
4830
5090
|
if (step.icon && useIcons) {
|
|
4831
|
-
return /* @__PURE__ */
|
|
5091
|
+
return /* @__PURE__ */ jsx30("div", { className: "flex items-center justify-center w-5 h-5", children: step.icon });
|
|
4832
5092
|
}
|
|
4833
|
-
return /* @__PURE__ */
|
|
5093
|
+
return /* @__PURE__ */ jsx30("span", { className: "text-sm font-semibold", children: index + 1 });
|
|
4834
5094
|
};
|
|
4835
|
-
return /* @__PURE__ */
|
|
4836
|
-
/* @__PURE__ */
|
|
4837
|
-
/* @__PURE__ */
|
|
5095
|
+
return /* @__PURE__ */ jsxs21("div", { className: clsx19("w-full max-w-5xl mx-auto px-4", containerClassName), children: [
|
|
5096
|
+
/* @__PURE__ */ jsxs21("div", { className: "relative mb-8", children: [
|
|
5097
|
+
/* @__PURE__ */ jsx30(
|
|
4838
5098
|
"div",
|
|
4839
5099
|
{
|
|
4840
5100
|
className: "absolute left-6 right-6 top-5 h-1 bg-gray-200 rounded-full z-0",
|
|
4841
5101
|
"aria-hidden": true
|
|
4842
5102
|
}
|
|
4843
5103
|
),
|
|
4844
|
-
/* @__PURE__ */
|
|
5104
|
+
/* @__PURE__ */ jsx30(
|
|
4845
5105
|
"div",
|
|
4846
5106
|
{
|
|
4847
5107
|
ref: progressRef,
|
|
@@ -4849,11 +5109,11 @@ function ITStepper({
|
|
|
4849
5109
|
"aria-hidden": true
|
|
4850
5110
|
}
|
|
4851
5111
|
),
|
|
4852
|
-
/* @__PURE__ */
|
|
5112
|
+
/* @__PURE__ */ jsx30("div", { className: "flex items-start justify-between space-x-2 relative z-20", children: steps.map((step, idx) => {
|
|
4853
5113
|
const isActive = idx === currentStep;
|
|
4854
5114
|
const isCompleted = idx < currentStep;
|
|
4855
5115
|
const hasIcon = step.icon && useIcons;
|
|
4856
|
-
return /* @__PURE__ */
|
|
5116
|
+
return /* @__PURE__ */ jsx30(
|
|
4857
5117
|
"button",
|
|
4858
5118
|
{
|
|
4859
5119
|
type: "button",
|
|
@@ -4863,11 +5123,11 @@ function ITStepper({
|
|
|
4863
5123
|
"aria-label": `Paso ${idx + 1} ${step.label}`,
|
|
4864
5124
|
className: "flex-1 group",
|
|
4865
5125
|
title: step.label,
|
|
4866
|
-
children: /* @__PURE__ */
|
|
4867
|
-
/* @__PURE__ */
|
|
5126
|
+
children: /* @__PURE__ */ jsxs21("div", { className: "flex flex-col items-center", children: [
|
|
5127
|
+
/* @__PURE__ */ jsx30(
|
|
4868
5128
|
"div",
|
|
4869
5129
|
{
|
|
4870
|
-
className:
|
|
5130
|
+
className: clsx19(
|
|
4871
5131
|
"flex items-center justify-center w-11 h-11 rounded-full border-2 transition-all duration-300 transform",
|
|
4872
5132
|
hasIcon && "p-2",
|
|
4873
5133
|
isCompleted && "bg-slate-400 border-slate-400 text-white scale-100 shadow",
|
|
@@ -4878,10 +5138,10 @@ function ITStepper({
|
|
|
4878
5138
|
children: renderStepContent(idx, isCompleted, isActive)
|
|
4879
5139
|
}
|
|
4880
5140
|
),
|
|
4881
|
-
/* @__PURE__ */
|
|
5141
|
+
/* @__PURE__ */ jsx30(
|
|
4882
5142
|
"span",
|
|
4883
5143
|
{
|
|
4884
|
-
className:
|
|
5144
|
+
className: clsx19(
|
|
4885
5145
|
"mt-2 text-xs sm:text-sm font-medium transition-colors text-center",
|
|
4886
5146
|
isCompleted ? "text-slate-400" : !isActive && "text-gray-400"
|
|
4887
5147
|
),
|
|
@@ -4895,14 +5155,14 @@ function ITStepper({
|
|
|
4895
5155
|
);
|
|
4896
5156
|
}) })
|
|
4897
5157
|
] }),
|
|
4898
|
-
/* @__PURE__ */
|
|
5158
|
+
/* @__PURE__ */ jsx30(
|
|
4899
5159
|
"div",
|
|
4900
5160
|
{
|
|
4901
5161
|
ref: contentRef,
|
|
4902
5162
|
tabIndex: -1,
|
|
4903
5163
|
role: "region",
|
|
4904
5164
|
"aria-labelledby": `step-${currentStep}`,
|
|
4905
|
-
className:
|
|
5165
|
+
className: clsx19(
|
|
4906
5166
|
stepClassName,
|
|
4907
5167
|
"bg-white border border-gray-100 rounded-2xl shadow-lg min-h-[280px] transition-transform duration-400 no-scrollbar p-6",
|
|
4908
5168
|
scrollableContent && "overflow-y-auto hide-scrollbar"
|
|
@@ -4911,37 +5171,37 @@ function ITStepper({
|
|
|
4911
5171
|
children: steps[currentStep].content
|
|
4912
5172
|
}
|
|
4913
5173
|
),
|
|
4914
|
-
/* @__PURE__ */
|
|
4915
|
-
/* @__PURE__ */
|
|
5174
|
+
/* @__PURE__ */ jsxs21("div", { className: "flex justify-between items-center mt-6", children: [
|
|
5175
|
+
/* @__PURE__ */ jsx30(
|
|
4916
5176
|
ITButton,
|
|
4917
5177
|
{
|
|
4918
5178
|
variant: "outlined",
|
|
4919
5179
|
color: "secondary",
|
|
4920
5180
|
disabled: currentStep === 0,
|
|
4921
5181
|
onClick: prevStep,
|
|
4922
|
-
children: /* @__PURE__ */
|
|
4923
|
-
/* @__PURE__ */
|
|
5182
|
+
children: /* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-2", children: [
|
|
5183
|
+
/* @__PURE__ */ jsx30(FaChevronLeft4, {}),
|
|
4924
5184
|
"Atr\xE1s"
|
|
4925
5185
|
] })
|
|
4926
5186
|
}
|
|
4927
5187
|
),
|
|
4928
|
-
/* @__PURE__ */
|
|
4929
|
-
/* @__PURE__ */
|
|
5188
|
+
/* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-3", children: [
|
|
5189
|
+
/* @__PURE__ */ jsxs21("div", { className: "text-sm text-gray-500 mr-2 hidden sm:block", children: [
|
|
4930
5190
|
"Paso ",
|
|
4931
5191
|
currentStep + 1,
|
|
4932
5192
|
" de ",
|
|
4933
5193
|
steps.length
|
|
4934
5194
|
] }),
|
|
4935
|
-
/* @__PURE__ */
|
|
5195
|
+
/* @__PURE__ */ jsx30(
|
|
4936
5196
|
ITButton,
|
|
4937
5197
|
{
|
|
4938
5198
|
variant: "solid",
|
|
4939
5199
|
color,
|
|
4940
5200
|
disabled: disableNext,
|
|
4941
5201
|
onClick: nextStep,
|
|
4942
|
-
children: /* @__PURE__ */
|
|
5202
|
+
children: /* @__PURE__ */ jsxs21("div", { className: "flex items-center gap-2", children: [
|
|
4943
5203
|
currentStep === steps.length - 1 ? "Finalizar" : "Siguiente",
|
|
4944
|
-
currentStep === steps.length - 1 ? /* @__PURE__ */
|
|
5204
|
+
currentStep === steps.length - 1 ? /* @__PURE__ */ jsx30(FaCheck3, {}) : /* @__PURE__ */ jsx30(FaChevronRight5, {})
|
|
4945
5205
|
] })
|
|
4946
5206
|
}
|
|
4947
5207
|
)
|
|
@@ -4951,10 +5211,10 @@ function ITStepper({
|
|
|
4951
5211
|
}
|
|
4952
5212
|
|
|
4953
5213
|
// src/components/theme-provider/themeProvider.tsx
|
|
4954
|
-
import { useMemo as
|
|
4955
|
-
import { Fragment as Fragment6, jsx as
|
|
5214
|
+
import { useMemo as useMemo5 } from "react";
|
|
5215
|
+
import { Fragment as Fragment6, jsx as jsx31, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
4956
5216
|
function ITThemeProvider({ theme: theme2, children }) {
|
|
4957
|
-
const activeThemeContext =
|
|
5217
|
+
const activeThemeContext = useMemo5(() => {
|
|
4958
5218
|
const baseColors = {
|
|
4959
5219
|
primary: palette.blue,
|
|
4960
5220
|
secondary: palette.gray,
|
|
@@ -4975,7 +5235,7 @@ function ITThemeProvider({ theme: theme2, children }) {
|
|
|
4975
5235
|
}
|
|
4976
5236
|
};
|
|
4977
5237
|
}, [theme2]);
|
|
4978
|
-
const cssVariables =
|
|
5238
|
+
const cssVariables = useMemo5(() => {
|
|
4979
5239
|
let variablesString = "";
|
|
4980
5240
|
Object.entries(activeThemeContext.colors).forEach(([colorName, scale]) => {
|
|
4981
5241
|
Object.entries(scale).forEach(([shade, hexValue]) => {
|
|
@@ -5094,8 +5354,8 @@ function ITThemeProvider({ theme: theme2, children }) {
|
|
|
5094
5354
|
return `:root {
|
|
5095
5355
|
${variablesString}}`;
|
|
5096
5356
|
}, [activeThemeContext]);
|
|
5097
|
-
return /* @__PURE__ */
|
|
5098
|
-
/* @__PURE__ */
|
|
5357
|
+
return /* @__PURE__ */ jsxs22(Fragment6, { children: [
|
|
5358
|
+
/* @__PURE__ */ jsx31("style", { suppressHydrationWarning: true, children: cssVariables }),
|
|
5099
5359
|
children
|
|
5100
5360
|
] });
|
|
5101
5361
|
}
|
|
@@ -5126,14 +5386,17 @@ export {
|
|
|
5126
5386
|
ITLoader,
|
|
5127
5387
|
ITNavbar,
|
|
5128
5388
|
ITPagination,
|
|
5389
|
+
ITSearchSelect,
|
|
5129
5390
|
ITSelect,
|
|
5130
5391
|
ITSlideToggle,
|
|
5131
5392
|
ITStepper,
|
|
5132
5393
|
ITTable,
|
|
5394
|
+
tabs_default as ITTabs,
|
|
5133
5395
|
ITText,
|
|
5134
5396
|
ITThemeProvider,
|
|
5135
5397
|
ITTimePicker,
|
|
5136
5398
|
ITToast,
|
|
5399
|
+
tripleFilter_default as ITTripleFilter,
|
|
5137
5400
|
createValidationSchema
|
|
5138
5401
|
};
|
|
5139
5402
|
//# sourceMappingURL=index.js.map
|