@komensal/ui 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +14 -1
- package/dist/index.js +99 -24
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -357,6 +357,9 @@ interface SelectInputProps<Label extends string, Value extends string> {
|
|
|
357
357
|
}
|
|
358
358
|
declare const SelectInput: <Label extends string, Value extends string>(props: SelectInputProps<Label, Value>) => JSX.Element;
|
|
359
359
|
|
|
360
|
+
type SkeletonProps = React.HTMLAttributes<HTMLDivElement>;
|
|
361
|
+
declare const Skeleton: React.ForwardRefExoticComponent<SkeletonProps & React.RefAttributes<HTMLDivElement>>;
|
|
362
|
+
|
|
360
363
|
declare const sizes: {
|
|
361
364
|
lg: string;
|
|
362
365
|
md: string;
|
|
@@ -966,12 +969,20 @@ declare const setUiLanguage: (lng: string) => Promise<unknown>;
|
|
|
966
969
|
|
|
967
970
|
declare function cn(...inputs: ClassValue[]): string;
|
|
968
971
|
|
|
972
|
+
declare function isLightColor(hex: string): boolean;
|
|
973
|
+
|
|
974
|
+
declare function capitalize(value: null | string | undefined): string;
|
|
975
|
+
declare function formatNumber(value: number, locale?: string): string;
|
|
976
|
+
declare function formatPrice(value: number, locale?: string, currency?: string): string;
|
|
977
|
+
|
|
969
978
|
declare const inputBase: string;
|
|
970
979
|
declare const inputPlaceholder: string;
|
|
971
980
|
declare const inputDisabled: string;
|
|
972
981
|
declare const inputCompact: string;
|
|
973
982
|
declare const inputFocus: string;
|
|
974
983
|
|
|
984
|
+
declare function getTagEmoji(tag: string): null | string;
|
|
985
|
+
|
|
975
986
|
type ToastEmitter = ((type: ToastType, options: ToastOptions) => void) | null;
|
|
976
987
|
declare const toast: {
|
|
977
988
|
error(options: string | ToastOptions): void;
|
|
@@ -982,4 +993,6 @@ declare const toast: {
|
|
|
982
993
|
};
|
|
983
994
|
declare function registerToastEmitter(fn: ToastEmitter): void;
|
|
984
995
|
|
|
985
|
-
|
|
996
|
+
declare function isSafeUrl(url: string): boolean;
|
|
997
|
+
|
|
998
|
+
export { AddTile, type AddTileProps, Alert, AuthHeader, Breadcrumb, type BreadcrumbItem, type BreadcrumbProps, Button, type ButtonProps, Chip, type ChipProps, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Form, FormControl, FormField, FormItem, FormMessage, GoogleMapPicker, type GoogleMapPickerProps, Input, InputField, InputOTP, InputOTPGroup, InputOTPSlot, type InputProps, Label, LabelField, MapPickerField, OTPField, type Options, PasswordChecklist, type PasswordRule, type PasswordRulesConfig, Popover, PopoverContent, PopoverTrigger, type ResolvedAddress, SelectField, SelectInput, Skeleton, type SkeletonProps, Spinner, type SpinnerProps, StepHeader, Stepper, type StepperStep, Switch, type SwitchProps, Toast, type ToastOptions, type ToastPosition, ToastProvider, type ToastType, Tooltip, Wrapper, type WrapperProps, buttonVariants, capitalize, chipVariants, cn, formatNumber, formatPrice, getTagEmoji, inputBase, inputCompact, inputDisabled, inputFocus, inputPlaceholder, isLightColor, isSafeUrl, registerToastEmitter, setUiLanguage, toast, uiI18n, useFormField };
|
package/dist/index.js
CHANGED
|
@@ -8,6 +8,36 @@ function cn(...inputs) {
|
|
|
8
8
|
return twMerge(clsx(inputs));
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
+
// src/utils/color.ts
|
|
12
|
+
function isLightColor(hex) {
|
|
13
|
+
const normalized = hex.replace("#", "");
|
|
14
|
+
const r = parseInt(normalized.slice(0, 2), 16);
|
|
15
|
+
const g = parseInt(normalized.slice(2, 4), 16);
|
|
16
|
+
const b = parseInt(normalized.slice(4, 6), 16);
|
|
17
|
+
const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255;
|
|
18
|
+
return luminance > 0.6;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// src/utils/format.ts
|
|
22
|
+
var DEFAULT_CURRENCY = "COP";
|
|
23
|
+
var DEFAULT_LOCALE = "es-CO";
|
|
24
|
+
function capitalize(value) {
|
|
25
|
+
if (!value) return "";
|
|
26
|
+
const trimmed = value.trimStart();
|
|
27
|
+
if (trimmed.length === 0) return value;
|
|
28
|
+
return trimmed.charAt(0).toLocaleUpperCase("es") + trimmed.slice(1);
|
|
29
|
+
}
|
|
30
|
+
function formatNumber(value, locale = DEFAULT_LOCALE) {
|
|
31
|
+
return new Intl.NumberFormat(locale, { style: "decimal" }).format(value);
|
|
32
|
+
}
|
|
33
|
+
function formatPrice(value, locale = DEFAULT_LOCALE, currency = DEFAULT_CURRENCY) {
|
|
34
|
+
return new Intl.NumberFormat(locale, {
|
|
35
|
+
currency,
|
|
36
|
+
maximumFractionDigits: 0,
|
|
37
|
+
style: "currency"
|
|
38
|
+
}).format(value);
|
|
39
|
+
}
|
|
40
|
+
|
|
11
41
|
// src/utils/styles.ts
|
|
12
42
|
var inputBase = cn(
|
|
13
43
|
"flex w-full !h-[50px] rounded-[10px] px-3 gap-[10px] text-base font-normal justify-between items-center",
|
|
@@ -27,6 +57,28 @@ var inputFocus = cn(
|
|
|
27
57
|
"data-[state=open]:ring-2 data-[state=open]:ring-ring data-[state=open]:border-primary"
|
|
28
58
|
);
|
|
29
59
|
|
|
60
|
+
// src/utils/tag-emoji.ts
|
|
61
|
+
var TAG_EMOJI_RULES = [
|
|
62
|
+
{ emoji: "\u{1F336}\uFE0F", keywords: ["picante", "picoso", "spicy"] },
|
|
63
|
+
{ emoji: "\u{1F95C}", keywords: ["nuez", "nueces", "mani", "cacahuate", "frutos secos"] },
|
|
64
|
+
{ emoji: "\u{1F331}", keywords: ["vegano", "vegetariano", "vegan"] },
|
|
65
|
+
{ emoji: "\u{1F33E}", keywords: ["sin gluten", "gluten free"] },
|
|
66
|
+
{ emoji: "\u{1F95B}", keywords: ["lacteos", "leche", "lactosa"] },
|
|
67
|
+
{ emoji: "\u{1F990}", keywords: ["marisco", "camaron"] },
|
|
68
|
+
{ emoji: "\u{1F525}", keywords: ["popular", "top ventas"] },
|
|
69
|
+
{ emoji: "\u{1F195}", keywords: ["nuevo", "new"] },
|
|
70
|
+
{ emoji: "\u{1F36C}", keywords: ["dulce"] },
|
|
71
|
+
{ emoji: "\u{1F9CA}", keywords: ["frio", "helado"] }
|
|
72
|
+
];
|
|
73
|
+
function getTagEmoji(tag) {
|
|
74
|
+
const normalized = normalize(tag);
|
|
75
|
+
const match = TAG_EMOJI_RULES.find((rule) => rule.keywords.some((keyword) => normalized.includes(keyword)));
|
|
76
|
+
return match?.emoji ?? null;
|
|
77
|
+
}
|
|
78
|
+
function normalize(text) {
|
|
79
|
+
return text.toLowerCase().normalize("NFD").replace(/\p{Diacritic}/gu, "");
|
|
80
|
+
}
|
|
81
|
+
|
|
30
82
|
// src/utils/toast-emitter.ts
|
|
31
83
|
var emitToast = null;
|
|
32
84
|
var toast = {
|
|
@@ -58,6 +110,16 @@ function emit(type, options) {
|
|
|
58
110
|
}
|
|
59
111
|
}
|
|
60
112
|
|
|
113
|
+
// src/utils/url.ts
|
|
114
|
+
function isSafeUrl(url) {
|
|
115
|
+
try {
|
|
116
|
+
const parsed = new URL(url, "https://placeholder.invalid");
|
|
117
|
+
return parsed.protocol === "http:" || parsed.protocol === "https:";
|
|
118
|
+
} catch {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
61
123
|
// src/utils/z-index.ts
|
|
62
124
|
var zPopover = "z-50";
|
|
63
125
|
var zDialogOverlay = "z-60";
|
|
@@ -1626,23 +1688,29 @@ var PasswordChecklist = ({ className, rules, value }) => {
|
|
|
1626
1688
|
}) });
|
|
1627
1689
|
};
|
|
1628
1690
|
|
|
1691
|
+
// src/components/skeleton.tsx
|
|
1692
|
+
import * as React14 from "react";
|
|
1693
|
+
import { jsx as jsx26 } from "react/jsx-runtime";
|
|
1694
|
+
var Skeleton = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx26("div", { className: cn("bg-inactive animate-pulse rounded-md", className), ref, ...props }));
|
|
1695
|
+
Skeleton.displayName = "Skeleton";
|
|
1696
|
+
|
|
1629
1697
|
// src/components/step-header.tsx
|
|
1630
|
-
import { jsx as
|
|
1698
|
+
import { jsx as jsx27, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
1631
1699
|
var StepHeader = ({ subtitle, subtitleClassName, title }) => /* @__PURE__ */ jsxs19("div", { className: "flex flex-col gap-1", children: [
|
|
1632
|
-
/* @__PURE__ */
|
|
1633
|
-
subtitle !== void 0 && /* @__PURE__ */
|
|
1700
|
+
/* @__PURE__ */ jsx27("h1", { className: "text-title text-2xl font-bold", children: title }),
|
|
1701
|
+
subtitle !== void 0 && /* @__PURE__ */ jsx27("p", { className: cn("text-subtitle text-sm", subtitleClassName), children: subtitle })
|
|
1634
1702
|
] });
|
|
1635
1703
|
|
|
1636
1704
|
// src/components/stepper.tsx
|
|
1637
1705
|
import { CheckIcon } from "@phosphor-icons/react";
|
|
1638
|
-
import { jsx as
|
|
1706
|
+
import { jsx as jsx28, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
1639
1707
|
var Stepper = ({ activeIndex, className, intermediate = false, steps }) => {
|
|
1640
|
-
return /* @__PURE__ */
|
|
1708
|
+
return /* @__PURE__ */ jsx28("div", { className: cn("flex w-full items-start", className), children: steps.map((step, index) => {
|
|
1641
1709
|
const isCompleted = intermediate ? index <= activeIndex : index < activeIndex;
|
|
1642
1710
|
const isActive = !intermediate && index === activeIndex;
|
|
1643
1711
|
return /* @__PURE__ */ jsxs20("div", { className: "flex flex-1 flex-col items-center", children: [
|
|
1644
1712
|
/* @__PURE__ */ jsxs20("div", { className: "flex w-full items-center", children: [
|
|
1645
|
-
/* @__PURE__ */
|
|
1713
|
+
/* @__PURE__ */ jsx28(
|
|
1646
1714
|
"div",
|
|
1647
1715
|
{
|
|
1648
1716
|
className: cn(
|
|
@@ -1652,7 +1720,7 @@ var Stepper = ({ activeIndex, className, intermediate = false, steps }) => {
|
|
|
1652
1720
|
)
|
|
1653
1721
|
}
|
|
1654
1722
|
),
|
|
1655
|
-
/* @__PURE__ */
|
|
1723
|
+
/* @__PURE__ */ jsx28(
|
|
1656
1724
|
"div",
|
|
1657
1725
|
{
|
|
1658
1726
|
"aria-current": isActive ? "step" : void 0,
|
|
@@ -1662,10 +1730,10 @@ var Stepper = ({ activeIndex, className, intermediate = false, steps }) => {
|
|
|
1662
1730
|
isActive && "bg-primary border-primary text-inverse",
|
|
1663
1731
|
!isCompleted && !isActive && "bg-inactive border-inactive text-surface"
|
|
1664
1732
|
),
|
|
1665
|
-
children: isCompleted ? /* @__PURE__ */
|
|
1733
|
+
children: isCompleted ? /* @__PURE__ */ jsx28(CheckIcon, { className: "h-4 w-4" }) : index + 1
|
|
1666
1734
|
}
|
|
1667
1735
|
),
|
|
1668
|
-
/* @__PURE__ */
|
|
1736
|
+
/* @__PURE__ */ jsx28(
|
|
1669
1737
|
"div",
|
|
1670
1738
|
{
|
|
1671
1739
|
className: cn(
|
|
@@ -1673,7 +1741,7 @@ var Stepper = ({ activeIndex, className, intermediate = false, steps }) => {
|
|
|
1673
1741
|
isCompleted ? "bg-primary" : "bg-inactive",
|
|
1674
1742
|
index === steps.length - 1 && "rounded-r-full"
|
|
1675
1743
|
),
|
|
1676
|
-
children: index === 0 && /* @__PURE__ */
|
|
1744
|
+
children: index === 0 && /* @__PURE__ */ jsx28(
|
|
1677
1745
|
"div",
|
|
1678
1746
|
{
|
|
1679
1747
|
className: cn(
|
|
@@ -1685,16 +1753,16 @@ var Stepper = ({ activeIndex, className, intermediate = false, steps }) => {
|
|
|
1685
1753
|
}
|
|
1686
1754
|
)
|
|
1687
1755
|
] }),
|
|
1688
|
-
/* @__PURE__ */
|
|
1756
|
+
/* @__PURE__ */ jsx28("span", { className: cn("mt-1 text-xs font-normal", isCompleted || isActive ? "text-primary" : "text-muted"), children: step.label })
|
|
1689
1757
|
] }, step.label);
|
|
1690
1758
|
}) });
|
|
1691
1759
|
};
|
|
1692
1760
|
|
|
1693
1761
|
// src/components/switch.tsx
|
|
1694
1762
|
import * as SwitchPrimitive from "@radix-ui/react-switch";
|
|
1695
|
-
import * as
|
|
1696
|
-
import { jsx as
|
|
1697
|
-
var Switch =
|
|
1763
|
+
import * as React15 from "react";
|
|
1764
|
+
import { jsx as jsx29 } from "react/jsx-runtime";
|
|
1765
|
+
var Switch = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx29(
|
|
1698
1766
|
SwitchPrimitive.Root,
|
|
1699
1767
|
{
|
|
1700
1768
|
className: cn(
|
|
@@ -1703,7 +1771,7 @@ var Switch = React14.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
|
|
|
1703
1771
|
),
|
|
1704
1772
|
ref,
|
|
1705
1773
|
...props,
|
|
1706
|
-
children: /* @__PURE__ */
|
|
1774
|
+
children: /* @__PURE__ */ jsx29(SwitchPrimitive.Thumb, { className: "bg-surface pointer-events-none absolute top-[3px] left-[3px] block h-[18px] w-[18px] rounded-full shadow-lg transition-transform data-[state=checked]:translate-x-6" })
|
|
1707
1775
|
}
|
|
1708
1776
|
));
|
|
1709
1777
|
Switch.displayName = SwitchPrimitive.Root.displayName;
|
|
@@ -1711,7 +1779,7 @@ Switch.displayName = SwitchPrimitive.Root.displayName;
|
|
|
1711
1779
|
// src/components/toast/toast.tsx
|
|
1712
1780
|
import { CheckIcon as CheckIcon2, FileLockIcon, InfoIcon as InfoIcon2, WarningIcon as WarningIcon2, XIcon as XIcon4 } from "@phosphor-icons/react";
|
|
1713
1781
|
import { useEffect as useEffect5, useRef as useRef4, useState as useState5 } from "react";
|
|
1714
|
-
import { jsx as
|
|
1782
|
+
import { jsx as jsx30, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
1715
1783
|
var EXIT_ANIMATION_MS = 200;
|
|
1716
1784
|
var typeIcons = {
|
|
1717
1785
|
destructive: XIcon4,
|
|
@@ -1766,13 +1834,13 @@ function Toast({ duration = 2500, id, onClose, subtitle, title, type }) {
|
|
|
1766
1834
|
),
|
|
1767
1835
|
role: "status",
|
|
1768
1836
|
children: [
|
|
1769
|
-
/* @__PURE__ */
|
|
1770
|
-
subtitle ? /* @__PURE__ */
|
|
1771
|
-
/* @__PURE__ */
|
|
1837
|
+
/* @__PURE__ */ jsx30("div", { className: "min-w-0 pr-4", children: /* @__PURE__ */ jsx30("h4", { className: cn("text-[16px] leading-normal font-semibold", "text-foreground", "line-clamp-2"), children: title }) }),
|
|
1838
|
+
subtitle ? /* @__PURE__ */ jsx30("div", { className: "shrink-0 pr-4 text-left", children: /* @__PURE__ */ jsx30("div", { className: cn("max-w-28 text-[14px] leading-[19.5px] font-normal", "text-body"), children: subtitle }) }) : null,
|
|
1839
|
+
/* @__PURE__ */ jsx30(
|
|
1772
1840
|
"div",
|
|
1773
1841
|
{
|
|
1774
1842
|
className: cn("shrink-0", "flex h-8 w-8 min-w-8 items-center justify-center rounded-full border-2", styles.iconBorder),
|
|
1775
|
-
children: /* @__PURE__ */
|
|
1843
|
+
children: /* @__PURE__ */ jsx30(Icon, { className: cn("h-5 w-5", styles.icon) })
|
|
1776
1844
|
}
|
|
1777
1845
|
)
|
|
1778
1846
|
]
|
|
@@ -1782,7 +1850,7 @@ function Toast({ duration = 2500, id, onClose, subtitle, title, type }) {
|
|
|
1782
1850
|
|
|
1783
1851
|
// src/components/toast/toast-provider.tsx
|
|
1784
1852
|
import { useCallback as useCallback3, useEffect as useEffect6, useLayoutEffect, useMemo as useMemo4, useRef as useRef5, useState as useState6 } from "react";
|
|
1785
|
-
import { Fragment as Fragment4, jsx as
|
|
1853
|
+
import { Fragment as Fragment4, jsx as jsx31 } from "react/jsx-runtime";
|
|
1786
1854
|
function ToastProvider() {
|
|
1787
1855
|
const [toasts, setToasts] = useState6([]);
|
|
1788
1856
|
const itemRefs = useRef5(/* @__PURE__ */ new Map());
|
|
@@ -1843,7 +1911,7 @@ function ToastProvider() {
|
|
|
1843
1911
|
itemRefs.current.set(id, el);
|
|
1844
1912
|
};
|
|
1845
1913
|
}, []);
|
|
1846
|
-
return /* @__PURE__ */
|
|
1914
|
+
return /* @__PURE__ */ jsx31(Fragment4, { children: Object.entries(grouped).map(([position, list]) => /* @__PURE__ */ jsx31("div", { className: `fixed ${zToast} ${getPositionClass(position)}`, children: /* @__PURE__ */ jsx31("div", { className: "relative flex flex-col gap-3", children: list.map((toast2) => /* @__PURE__ */ jsx31("div", { ref: setItemRef(toast2.id), children: /* @__PURE__ */ jsx31(
|
|
1847
1915
|
Toast,
|
|
1848
1916
|
{
|
|
1849
1917
|
duration: toast2.duration,
|
|
@@ -1871,9 +1939,9 @@ function getPositionClass(position) {
|
|
|
1871
1939
|
}
|
|
1872
1940
|
|
|
1873
1941
|
// src/components/wrapper.tsx
|
|
1874
|
-
import { jsx as
|
|
1942
|
+
import { jsx as jsx32 } from "react/jsx-runtime";
|
|
1875
1943
|
var Wrapper = ({ children, className }) => {
|
|
1876
|
-
return /* @__PURE__ */
|
|
1944
|
+
return /* @__PURE__ */ jsx32("div", { className: cn("mx-auto h-full w-full", className), children });
|
|
1877
1945
|
};
|
|
1878
1946
|
export {
|
|
1879
1947
|
AddTile,
|
|
@@ -1922,6 +1990,7 @@ export {
|
|
|
1922
1990
|
PopoverTrigger,
|
|
1923
1991
|
SelectField,
|
|
1924
1992
|
SelectInput,
|
|
1993
|
+
Skeleton,
|
|
1925
1994
|
Spinner,
|
|
1926
1995
|
StepHeader,
|
|
1927
1996
|
Stepper,
|
|
@@ -1931,13 +2000,19 @@ export {
|
|
|
1931
2000
|
Tooltip,
|
|
1932
2001
|
Wrapper,
|
|
1933
2002
|
buttonVariants,
|
|
2003
|
+
capitalize,
|
|
1934
2004
|
chipVariants,
|
|
1935
2005
|
cn,
|
|
2006
|
+
formatNumber,
|
|
2007
|
+
formatPrice,
|
|
2008
|
+
getTagEmoji,
|
|
1936
2009
|
inputBase,
|
|
1937
2010
|
inputCompact,
|
|
1938
2011
|
inputDisabled,
|
|
1939
2012
|
inputFocus,
|
|
1940
2013
|
inputPlaceholder,
|
|
2014
|
+
isLightColor,
|
|
2015
|
+
isSafeUrl,
|
|
1941
2016
|
registerToastEmitter,
|
|
1942
2017
|
setUiLanguage,
|
|
1943
2018
|
toast,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/add-tile.tsx","../src/utils/cn.ts","../src/utils/styles.ts","../src/utils/toast-emitter.ts","../src/utils/z-index.ts","../src/components/alert.tsx","../src/components/auth-header.tsx","../src/components/breadcrumb.tsx","../src/components/button.tsx","../src/components/spinner.tsx","../src/lib/i18n.ts","../src/locales/es/ui.json","../src/components/tooltip.tsx","../src/components/chip.tsx","../src/components/command.tsx","../src/components/dialog.tsx","../src/components/form.tsx","../src/components/form-fields/input-field.tsx","../src/components/input.tsx","../src/components/label.tsx","../src/components/form-fields/label-field.tsx","../src/components/form-fields/form-field-shell.tsx","../src/components/google-map-picker.tsx","../src/components/use-google-map-picker.ts","../src/components/form-fields/map-picker-field.tsx","../src/components/otp-input.tsx","../src/components/form-fields/otp-field.tsx","../src/components/select-input.tsx","../src/components/popover.tsx","../src/components/time-columns.tsx","../src/components/use-select-input.ts","../src/components/form-fields/select-field.tsx","../src/components/password-checklist.tsx","../src/components/step-header.tsx","../src/components/stepper.tsx","../src/components/switch.tsx","../src/components/toast/toast.tsx","../src/components/toast/toast-provider.tsx","../src/components/wrapper.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { cn } from '../utils'\n\nexport interface AddTileProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n icon: React.ReactNode\n label: string\n labelClassName?: string\n}\n\nconst AddTile = React.forwardRef<HTMLButtonElement, AddTileProps>(\n ({ className, icon, label, labelClassName, ...props }, ref) => (\n <button\n className={cn(\n 'group border-border text-muted hover:border-primary-hover hover:bg-brand-200 hover:text-primary focus-visible:ring-ring flex min-h-92.5 cursor-pointer flex-col items-center justify-center gap-2 rounded-2xl border-2 border-dashed transition-colors focus-visible:ring-2 focus-visible:outline-none',\n className\n )}\n ref={ref}\n type='button'\n {...props}\n >\n {icon}\n <span className={cn('text-sm font-medium', labelClassName)}>{label}</span>\n </button>\n )\n)\nAddTile.displayName = 'AddTile'\n\nexport { AddTile }\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import { cn } from './cn'\n\nexport const inputBase = cn(\n 'flex w-full !h-[50px] rounded-[10px] px-3 gap-[10px] text-base font-normal justify-between items-center',\n 'border border-border bg-surface text-foreground',\n 'transition-all duration-200 ease-in-out',\n 'placeholder:text-icon-muted placeholder:text-sm placeholder:font-normal placeholder:leading-none',\n 'disabled:cursor-not-allowed disabled:bg-inactive disabled:text-inactive-text disabled:border-inactive disabled:placeholder:text-inactive-text'\n)\n\nexport const inputPlaceholder = cn('text-icon-muted text-sm font-normal leading-none')\n\nexport const inputDisabled = cn('cursor-not-allowed opacity-50')\n\nexport const inputCompact = cn(\n 'border-border bg-surface text-foreground focus:border-primary focus:ring-ring h-9 w-full rounded-lg border px-2.5 text-sm focus:ring-2 focus:outline-none'\n)\n\nexport const inputFocus = cn(\n 'focus:outline-none focus-visible:outline-none',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-primary',\n 'data-[state=open]:ring-2 data-[state=open]:ring-ring data-[state=open]:border-primary'\n)\n","import { ToastOptions, ToastType } from '../types/toast'\n\ntype ToastEmitter = ((type: ToastType, options: ToastOptions) => void) | null\n\nlet emitToast: ToastEmitter = null\n\nexport const toast = {\n error(options: string | ToastOptions) {\n emit('destructive', options)\n },\n info(options: string | ToastOptions) {\n emit('info', options)\n },\n success(options: string | ToastOptions) {\n emit('success', options)\n },\n wait(options: string | ToastOptions) {\n emit('wait', options)\n },\n warning(options: string | ToastOptions) {\n emit('warning', options)\n }\n}\n\nexport function registerToastEmitter(fn: ToastEmitter) {\n emitToast = fn\n}\n\nfunction emit(type: ToastType, options: string | ToastOptions) {\n if (!emitToast) return\n\n if (typeof options === 'string') {\n emitToast(type, { title: options })\n } else {\n emitToast(type, options)\n }\n}\n","export const zPopover = 'z-50'\nexport const zDialogOverlay = 'z-60'\nexport const zDialogContent = 'z-70'\nexport const zPopoverAboveDialog = 'z-100'\nexport const zToast = 'z-4000'\n","import { CheckCircleIcon, InfoIcon, WarningCircleIcon, WarningIcon } from '@phosphor-icons/react'\nimport * as React from 'react'\n\nimport { cn } from '../utils'\n\ninterface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: AlertVariant\n}\n\ntype AlertVariant = 'destructive' | 'info' | 'success' | 'warning'\n\nconst variantStyles: Record<AlertVariant, { container: string; icon: string }> = {\n destructive: { container: 'bg-destructive-subtle text-destructive', icon: 'text-destructive' },\n info: { container: 'bg-info-subtle text-info', icon: 'text-info' },\n success: { container: 'bg-success-subtle text-success', icon: 'text-success' },\n warning: { container: 'bg-warning-subtle text-warning', icon: 'text-warning' }\n}\n\nconst variantIcons: Record<AlertVariant, React.ComponentType<{ className?: string }>> = {\n destructive: WarningCircleIcon,\n info: InfoIcon,\n success: CheckCircleIcon,\n warning: WarningIcon\n}\n\nexport const Alert = ({ children, className, variant = 'destructive', ...props }: AlertProps) => {\n const styles = variantStyles[variant]\n const Icon = variantIcons[variant]\n\n return (\n <div\n aria-live='polite'\n className={cn(\n 'flex items-center justify-center gap-2 rounded-[10px] px-4 py-3 text-sm',\n styles.container,\n className\n )}\n role='alert'\n {...props}\n >\n <Icon className={cn('h-5 w-5 shrink-0', styles.icon)} />\n <span>{children}</span>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\n\nimport { cn } from '../utils'\n\ninterface AuthHeaderProps {\n children?: ReactNode\n desktopLogoSrc?: string\n logoAlt: string\n mobileClassName?: string\n mobileLogoSrc?: string\n}\n\nexport const AuthHeader = ({\n children,\n desktopLogoSrc = '/logo_color.svg',\n logoAlt,\n mobileClassName,\n mobileLogoSrc = '/logotipo_color.svg'\n}: AuthHeaderProps) => {\n return (\n <>\n <div className={cn('flex min-h-0 shrink flex-col lg:hidden', mobileClassName)}>\n <div className='flex justify-center py-2'>\n <img alt={logoAlt} className='h-11 md:h-12' src={mobileLogoSrc} />\n </div>\n {children}\n </div>\n\n <div className='absolute hidden p-10 lg:flex'>\n <img alt={logoAlt} className='h-12.5 w-12.5' src={desktopLogoSrc} />\n </div>\n </>\n )\n}\n","import * as React from 'react'\n\nimport { cn } from '../utils'\n\nexport interface BreadcrumbItem {\n label: string\n onClick?: () => void\n}\n\nexport interface BreadcrumbProps extends React.HTMLAttributes<HTMLDivElement> {\n items: BreadcrumbItem[]\n}\n\nconst Breadcrumb = React.forwardRef<HTMLDivElement, BreadcrumbProps>(({ className, items, ...props }, ref) => (\n <div className={cn('flex items-center gap-1 text-sm', className)} ref={ref} {...props}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1\n\n return (\n <span className='flex items-center gap-1' key={`${item.label}-${index}`}>\n {index > 0 && <span className='text-muted'>›</span>}\n {item.onClick && !isLast ? (\n <button\n className='text-muted hover:text-foreground transition-colors'\n onClick={item.onClick}\n type='button'\n >\n {item.label}\n </button>\n ) : (\n <span className={isLast ? 'text-foreground font-medium' : 'text-muted'}>{item.label}</span>\n )}\n </span>\n )\n })}\n </div>\n))\nBreadcrumb.displayName = 'Breadcrumb'\n\nexport { Breadcrumb }\n","import { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '../utils'\nimport { Spinner } from './spinner'\nimport { Tooltip } from './tooltip'\n\nconst buttonVariants = cva(\n 'w-full inline-flex items-center justify-center gap-[10px] whitespace-nowrap rounded-[12px] border border-transparent text-base font-semibold transition-all duration-300 ease-in-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:bg-inactive disabled:text-inactive-text disabled:border-transparent cursor-pointer',\n {\n defaultVariants: {\n hoverStyle: 'none',\n size: 'default',\n variant: 'primary'\n },\n variants: {\n hoverStyle: {\n highlight: `\n hover:bg-brand-subtle hover:border-primary hover:text-primary\n `,\n none: '',\n shine: `\n relative overflow-hidden\n hover:-translate-y-[1px] hover:shadow-lg\n before:content-[''] before:absolute before:top-0 before:left-[-100%]\n before:w-full before:h-full\n before:bg-[linear-gradient(90deg,transparent,rgba(255,255,255,0.15),transparent)]\n before:transition-all before:duration-300\n hover:before:left-[100%]\n `\n },\n size: {\n default: 'h-14 px-4',\n icon: 'h-12 w-12 p-0',\n lg: 'h-14 px-12',\n sm: 'h-9 px-3 text-sm',\n xs: 'h-9 px-3 rounded-[5px] text-xs font-normal'\n },\n variant: {\n destructive: 'bg-destructive text-inverse hover:bg-destructive/90',\n ghost: 'bg-transparent border border-border text-foreground hover:bg-hover',\n invisible: 'bg-transparent rounded-none',\n link: 'text-muted underline-offset-4 hover:underline text-sm font-normal disabled:bg-transparent',\n outline: 'bg-surface border border-primary text-primary hover:bg-brand-subtle',\n primary: 'bg-primary text-inverse hover:bg-primary-hover active:bg-primary-dark',\n subtle: 'bg-transparent hover:bg-hover disabled:bg-transparent',\n tertiary: 'bg-subtle border border-border text-foreground hover:bg-hover',\n underline: 'text-primary underline'\n }\n }\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {\n asChild?: boolean\n childrenClassName?: string\n hoverStyle?: 'highlight' | 'none' | 'shine'\n icon?: React.ReactNode\n iconLeft?: React.ReactNode\n iconRight?: React.ReactNode\n isLoading?: boolean\n sideTooltip?: 'bottom' | 'left' | 'right' | 'top'\n tooltip?: string\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n asChild = false,\n children,\n childrenClassName,\n className,\n disabled,\n hoverStyle,\n icon,\n iconLeft,\n iconRight,\n isLoading = false,\n sideTooltip,\n size,\n tooltip,\n variant,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : 'button'\n\n const buttonNode = (\n <Comp\n aria-busy={isLoading || undefined}\n className={cn(buttonVariants({ hoverStyle, size, variant }), isLoading && 'relative opacity-40', className)}\n disabled={disabled === true || isLoading}\n ref={ref}\n {...props}\n >\n {iconLeft}\n {icon}\n <span className={cn('flex w-full items-center justify-center gap-2', childrenClassName)}>{children}</span>\n {iconRight}\n {isLoading && (\n <div className='absolute inset-0 flex items-center justify-center bg-black/10 backdrop-blur-sm'>\n <Spinner size='sm' />\n </div>\n )}\n </Comp>\n )\n\n return tooltip ? (\n <Tooltip childrenClassName='flex items-center justify-center' message={tooltip} sideTooltip={sideTooltip}>\n {buttonNode}\n </Tooltip>\n ) : (\n buttonNode\n )\n }\n)\n\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n","import clsx from 'clsx'\n\nimport { useUiT } from '../lib/i18n'\n\nconst sizes = {\n lg: '70',\n md: '50',\n sm: '20',\n xl: '100',\n xs: '5'\n}\n\nconst variants = {\n light: 'var(--color-spinner-light)',\n primary: 'var(--color-spinner-primary)',\n secondary: 'var(--color-spinner-secondary)'\n}\n\nexport interface SpinnerProps {\n className?: string\n loadingLabel?: string\n size?: keyof typeof sizes\n variant?: keyof typeof variants\n}\n\nexport const Spinner = ({ className = '', loadingLabel, size = 'md', variant = 'primary' }: SpinnerProps) => {\n const t = useUiT()\n return (\n <>\n <svg\n fill='currentColor'\n height={sizes[size]}\n stroke={variants[variant]}\n viewBox='0 0 100 100'\n width={sizes[size]}\n xmlns='http://www.w3.org/2000/svg'\n >\n <g className={clsx('spinner_V8m1', className)}>\n <circle cx='50' cy='50' fill='none' opacity='0.25' r='35' stroke='currentColor' strokeWidth='10' />\n <circle\n cx='50'\n cy='50'\n fill='none'\n r='35'\n stroke='currentColor'\n strokeDasharray='164.93361431346415 56.97787143782138'\n strokeWidth='10'\n >\n <animateTransform\n attributeName='transform'\n dur='1s'\n keyTimes='0;1'\n repeatCount='indefinite'\n type='rotate'\n values='0 50 50;360 50 50'\n />\n </circle>\n </g>\n </svg>\n <span className='sr-only'>{loadingLabel ?? t('spinner.loading')}</span>\n </>\n )\n}\n","import i18n from 'i18next'\nimport { initReactI18next, useTranslation } from 'react-i18next'\n\nimport uiEs from '../locales/es/ui.json'\n\nexport const uiI18n = i18n.createInstance()\n\nvoid uiI18n.use(initReactI18next).init({\n defaultNS: 'ui',\n fallbackLng: 'es',\n interpolation: { escapeValue: false },\n lng: 'es',\n ns: ['ui'],\n resources: { es: { ui: uiEs } }\n})\n\nexport const setUiLanguage = (lng: string): Promise<unknown> => uiI18n.changeLanguage(lng)\n\nexport const useUiT = () => useTranslation('ui', { i18n: uiI18n }).t\n","{\n \"inputField\": {\n \"showPassword\": \"Mostrar contraseña\",\n \"hidePassword\": \"Ocultar contraseña\",\n \"clear\": \"Limpiar\"\n },\n \"dialog\": {\n \"close\": \"Cerrar\"\n },\n \"selectInput\": {\n \"placeholder\": \"Selecciona...\",\n \"loading\": \"Cargando...\",\n \"search\": \"Buscar...\",\n \"noResults\": \"Sin resultados.\",\n \"clear\": \"Limpiar selección\"\n },\n \"passwordChecklist\": {\n \"minLength\": \"Mínimo {{min}} caracteres\",\n \"hasUpperAndLower\": \"Una mayúscula y minúscula\",\n \"hasNumber\": \"Un número\",\n \"hasSpecialChar\": \"Un carácter especial\"\n },\n \"spinner\": {\n \"loading\": \"Cargando...\"\n }\n}\n","import * as TooltipPrimitive from '@radix-ui/react-tooltip'\nimport * as React from 'react'\n\nimport { cn, zPopover } from '../utils'\n\ninterface TooltipProps {\n children: React.ReactNode\n childrenClassName?: string\n className?: string\n message: string\n sideTooltip?: 'bottom' | 'left' | 'right' | 'top'\n}\n\nconst TooltipProvider = TooltipPrimitive.Provider\nconst TooltipRoot = TooltipPrimitive.Root\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n className={cn(\n `bg-tooltip text-tooltip-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ${zPopover} overflow-hidden rounded-md px-3 py-1.5 text-sm font-semibold shadow-sm`,\n className\n )}\n ref={ref}\n sideOffset={sideOffset}\n {...props}\n />\n </TooltipPrimitive.Portal>\n))\n\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport const Tooltip = React.forwardRef<HTMLDivElement, TooltipProps>(\n ({ children, childrenClassName, className, message, sideTooltip = 'top' }, ref) => {\n return (\n <TooltipProvider>\n <TooltipRoot>\n <TooltipTrigger asChild>\n <div className={cn('', childrenClassName)} ref={ref}>\n {children}\n </div>\n </TooltipTrigger>\n <TooltipContent className={cn('', className)} side={sideTooltip}>\n <p>{message}</p>\n </TooltipContent>\n </TooltipRoot>\n </TooltipProvider>\n )\n }\n)\n\nTooltip.displayName = 'Tooltip'\n","import { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '../utils'\n\nconst chipVariants = cva(\n 'focus-visible:ring-ring inline-flex cursor-pointer items-center justify-center rounded-full px-3 py-1.5 text-sm font-medium whitespace-nowrap transition-colors focus-visible:ring-2 focus-visible:outline-none',\n {\n defaultVariants: {\n active: false\n },\n variants: {\n active: {\n false: 'bg-inactive text-inactive-text hover:bg-hover',\n true: 'bg-primary text-inverse'\n }\n }\n }\n)\n\nexport interface ChipProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof chipVariants> {}\n\nconst Chip = React.forwardRef<HTMLButtonElement, ChipProps>(({ active, className, ...props }, ref) => (\n <button className={cn(chipVariants({ active }), className)} ref={ref} type='button' {...props} />\n))\nChip.displayName = 'Chip'\n\nexport { Chip, chipVariants }\n","import { type DialogProps } from '@radix-ui/react-dialog'\nimport { MagnifyingGlassIcon } from '@phosphor-icons/react'\nimport { Command as CommandPrimitive } from 'cmdk'\nimport * as React from 'react'\n\nimport { cn } from '../utils'\nimport { Dialog, DialogContent } from './dialog'\n\nconst Command = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive\n className={cn('bg-surface text-foreground flex h-full w-full flex-col overflow-hidden rounded-md', className)}\n ref={ref}\n {...props}\n />\n))\nCommand.displayName = CommandPrimitive.displayName\n\ntype CommandDialogProps = DialogProps\n\nconst CommandDialog = ({ children, ...props }: CommandDialogProps) => {\n return (\n <Dialog {...props}>\n <DialogContent className='overflow-hidden p-0'>\n <Command className='**:[[cmdk-group-heading]]:text-muted [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group]]:px-2 **:[[cmdk-input]]:h-12 **:[[cmdk-item]]:px-2 **:[[cmdk-item]]:py-3'>\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nconst CommandInput = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(({ className, ...props }, ref) => (\n <div className='flex items-center border-b px-3' cmdk-input-wrapper=''>\n <MagnifyingGlassIcon className='mr-2 h-4 w-4 shrink-0 opacity-50' />\n <CommandPrimitive.Input\n className={cn(\n 'placeholder:text-placeholder flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n ref={ref}\n {...props}\n />\n </div>\n))\n\nCommandInput.displayName = CommandPrimitive.Input.displayName\n\nconst CommandList = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.List className={cn('max-h-75 overflow-x-hidden overflow-y-auto', className)} ref={ref} {...props} />\n))\n\nCommandList.displayName = CommandPrimitive.List.displayName\n\nconst CommandEmpty = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Empty>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>((props, ref) => <CommandPrimitive.Empty className='py-6 text-center text-sm' ref={ref} {...props} />)\n\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName\n\nconst CommandGroup = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Group\n className={cn(\n 'text-foreground **:[[cmdk-group-heading]]:text-muted overflow-hidden p-1 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium',\n className\n )}\n ref={ref}\n {...props}\n />\n))\n\nCommandGroup.displayName = CommandPrimitive.Group.displayName\n\nconst CommandSeparator = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Separator className={cn('bg-border -mx-1 h-px', className)} ref={ref} {...props} />\n))\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName\n\nconst CommandItem = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Item\n className={cn(\n 'relative flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50',\n className\n )}\n ref={ref}\n {...props}\n />\n))\n\nCommandItem.displayName = CommandPrimitive.Item.displayName\n\nconst CommandShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {\n return <span className={cn('text-muted ml-auto text-xs tracking-widest', className)} {...props} />\n}\nCommandShortcut.displayName = 'CommandShortcut'\n\nexport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut\n}\n","import { XIcon } from '@phosphor-icons/react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport * as React from 'react'\n\nimport { useUiT } from '../lib/i18n'\nimport { cn, zDialogContent, zDialogOverlay } from '../utils'\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay> & { isAbsolute?: boolean }\n>(({ className, isAbsolute = false, ...props }, ref) => (\n <DialogPrimitive.Overlay\n className={cn(\n `data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 bg-foreground/10 ${zDialogOverlay} backdrop-blur-xs`,\n isAbsolute ? 'absolute inset-0' : 'fixed inset-0',\n className\n )}\n ref={ref}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\ninterface DialogContentProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n closeLabel?: string\n container?: HTMLElement | null\n isAbsolute?: boolean\n isCloseIcon?: boolean\n overlayClassName?: string\n}\n\nconst DialogContent = React.forwardRef<React.ElementRef<typeof DialogPrimitive.Content>, DialogContentProps>(\n (\n { children, className, closeLabel, container, isAbsolute = false, isCloseIcon = false, overlayClassName, ...props },\n ref\n ) => {\n const t = useUiT()\n\n return (\n <DialogPortal container={container}>\n <DialogOverlay className={overlayClassName} isAbsolute={isAbsolute} />\n\n <DialogPrimitive.Content\n className={cn(\n `bg-surface data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] ${zDialogContent} grid w-[calc(100%-2rem)] max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 rounded-2xl p-6 shadow-lg duration-200 outline-none`,\n isAbsolute ? 'absolute top-[50%] left-[50%]' : 'fixed top-[50%] left-[50%]',\n className\n )}\n ref={ref}\n {...props}\n >\n {children}\n {isCloseIcon && (\n <DialogPrimitive.Close className='data-[state=open]:text-muted ring-offset-surface focus:ring-ring data-[state=open]:bg-hover hover:bg-hover absolute top-5 right-5 flex h-8 w-8 min-w-8 cursor-pointer items-center justify-center rounded-full bg-transparent opacity-70 transition-all hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none'>\n <XIcon className='text-body h-4 w-4' />\n <span className='sr-only'>{closeLabel ?? t('dialog.close')}</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n }\n)\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-1.5 text-center sm:text-left', className)} {...props} />\n)\nDialogHeader.displayName = 'DialogHeader'\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col-reverse justify-center gap-2 rounded-2xl sm:flex-row', className)}\n {...props}\n />\n)\nDialogFooter.displayName = 'DialogFooter'\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n className={cn('text-lg leading-none font-semibold tracking-tight', className)}\n ref={ref}\n {...props}\n >\n <span>{props.children}</span>\n </DialogPrimitive.Title>\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description className={cn('text-muted text-sm', className)} ref={ref} {...props}>\n <span>{props.children}</span>\n </DialogPrimitive.Description>\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger\n}\n","import { Slot } from '@radix-ui/react-slot'\nimport * as React from 'react'\nimport { Controller, ControllerProps, FieldPath, FieldValues, FormProvider, useFormContext } from 'react-hook-form'\n\nimport { cn } from '../utils'\n\nconst Form = FormProvider\n\ninterface FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue | null>(null)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { formState, getFieldState } = useFormContext()\n\n if (!fieldContext) {\n throw new Error('useFormField must be used within <FormField>')\n }\n\n if (!itemContext) {\n throw new Error('useFormField must be used within <FormItem>')\n }\n\n const fieldState = getFieldState(fieldContext.name, formState)\n\n const { id } = itemContext\n\n return {\n formDescriptionId: `${id}-form-item-description`,\n formItemId: `${id}-form-item`,\n formMessageId: `${id}-form-item-message`,\n id,\n name: fieldContext.name,\n ...fieldState\n }\n}\n\ninterface FormItemContextValue {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue | null>(null)\n\nconst FormItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div className={cn('space-y-1', className)} ref={ref} {...props} />\n </FormItemContext.Provider>\n )\n }\n)\nFormItem.displayName = 'FormItem'\n\nconst FormControl = React.forwardRef<React.ElementRef<typeof Slot>, React.ComponentPropsWithoutRef<typeof Slot>>(\n ({ ...props }, ref) => {\n const { error, formDescriptionId, formItemId, formMessageId } = useFormField()\n\n return (\n <Slot\n aria-describedby={!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`}\n aria-invalid={!!error}\n id={formItemId}\n ref={ref}\n {...props}\n />\n )\n }\n)\nFormControl.displayName = 'FormControl'\n\nconst FormMessage = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ children, className, ...props }, ref) => {\n const { error, formMessageId } = useFormField()\n const body = error?.message ? String(error.message) : children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n className={cn('text-destructive text-[0.8rem] font-medium', className)}\n id={formMessageId}\n ref={ref}\n {...props}\n >\n {body}\n </p>\n )\n }\n)\nFormMessage.displayName = 'FormMessage'\n\nexport { Form, FormControl, FormField, FormItem, FormMessage, useFormField }\n","import { useState } from 'react'\nimport { Control, FieldValues, Path } from 'react-hook-form'\nimport { EyeIcon, EyeSlashIcon, XIcon } from '@phosphor-icons/react'\n\nimport { useUiT } from '../../lib/i18n'\nimport { cn } from '../../utils'\nimport { FormField } from '../form'\nimport { Input } from '../input'\nimport { FormFieldShell } from './form-field-shell'\n\ninterface InputFieldProps<T extends FieldValues = FieldValues> {\n clearLabel?: string\n control: Control<T>\n disabled?: boolean\n hidePasswordLabel?: string\n inputClassName?: string\n isClearable?: boolean\n label?: string\n labelClassName?: string\n mainClassName?: string\n name: Path<T>\n onClear?: () => void\n placeholder?: string\n showPasswordLabel?: string\n type?: string\n visualRequired?: boolean\n}\n\nexport const InputField = <T extends FieldValues = FieldValues>({\n clearLabel,\n control,\n disabled,\n hidePasswordLabel,\n inputClassName,\n isClearable,\n label,\n labelClassName,\n mainClassName,\n name,\n onClear,\n placeholder,\n showPasswordLabel,\n type = 'text',\n visualRequired\n}: InputFieldProps<T>) => {\n const t = useUiT()\n const [isPasswordVisible, setIsPasswordVisible] = useState(false)\n\n const togglePasswordVisibility = () => {\n setIsPasswordVisible((prev) => !prev)\n }\n\n const isPassword = type === 'password'\n const inputType = isPassword ? (isPasswordVisible ? 'text' : 'password') : type\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field, fieldState }) => {\n const hasError = !!fieldState.error\n\n return (\n <FormFieldShell\n hasError={hasError}\n label={label}\n labelClassName={labelClassName}\n mainClassName={mainClassName}\n name={name}\n visualRequired={visualRequired}\n >\n <div className='relative'>\n <Input\n {...field}\n autoComplete={isPassword ? 'current-password' : undefined}\n className={cn(\n inputClassName,\n hasError && 'border-destructive',\n isPassword && 'pr-10 [&::-ms-reveal]:hidden'\n )}\n data-1p-ignore={isPassword || undefined}\n data-bwignore={isPassword || undefined}\n data-lpignore={isPassword || undefined}\n disabled={disabled}\n min={type === 'number' ? 0 : undefined}\n placeholder={placeholder}\n type={inputType}\n value={field.value ?? ''}\n />\n\n <div className='absolute inset-y-0 right-0 flex items-center space-x-2 pr-2'>\n {field.value && isClearable && (\n <button\n className='focus:outline-none'\n onClick={onClear}\n title={clearLabel ?? t('inputField.clear')}\n type='button'\n >\n <XIcon size={18} />\n </button>\n )}\n\n {type === 'password' && (\n <button\n className='focus:outline-none'\n onClick={togglePasswordVisibility}\n title={\n isPasswordVisible\n ? (hidePasswordLabel ?? t('inputField.hidePassword'))\n : (showPasswordLabel ?? t('inputField.showPassword'))\n }\n type='button'\n >\n {isPasswordVisible ? <EyeIcon size={18} /> : <EyeSlashIcon size={20} />}\n </button>\n )}\n </div>\n </div>\n </FormFieldShell>\n )\n }}\n />\n )\n}\n","import * as React from 'react'\n\nimport { cn, inputBase, inputFocus } from '../utils'\n\nexport type InputProps = React.InputHTMLAttributes<HTMLInputElement>\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(({ className, onKeyDown, type, ...props }, ref) => {\n return (\n <input\n className={cn(\n inputBase,\n inputFocus,\n 'file:border-0 file:bg-transparent file:text-base file:font-medium',\n className\n )}\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e)\n if (e.defaultPrevented) return\n\n const key = e.key\n const allowedKeys = ['Backspace', 'Tab', 'Enter', 'Escape', 'ArrowLeft', 'ArrowUp', 'ArrowRight', 'ArrowDown']\n if (allowedKeys.includes(key)) {\n return\n }\n if (!(key >= '0' && key <= '9') && type === 'number') {\n e.preventDefault()\n }\n }}\n ref={ref}\n type={type}\n {...props}\n />\n )\n})\nInput.displayName = 'Input'\n\nexport { Input }\n","import * as LabelPrimitive from '@radix-ui/react-label'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '../utils'\n\nconst labelVariants = cva('text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70')\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root className={cn(labelVariants(), className)} ref={ref} {...props} />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","import { cn } from '../../utils'\nimport { Label } from '../label'\n\ninterface LabelFieldProps {\n label?: string\n labelClassName?: string\n name: string\n visualRequired?: boolean\n}\n\nexport const LabelField = ({ label, labelClassName, name, visualRequired }: LabelFieldProps) => {\n return (\n <Label\n className={cn('text-body mb-2 text-start text-sm leading-none font-normal tracking-normal', labelClassName)}\n htmlFor={name}\n >\n <span>{label}</span> {visualRequired && <span className='text-destructive'> *</span>}\n </Label>\n )\n}\n","import type { ReactNode } from 'react'\n\nimport { cn } from '../../utils'\nimport { FormControl, FormItem, FormMessage } from '../form'\nimport { LabelField } from './label-field'\n\ninterface FormFieldShellProps {\n children: ReactNode\n hasError?: boolean\n label?: string\n labelClassName?: string\n mainClassName?: string\n name: string\n visualRequired?: boolean\n}\n\nexport const FormFieldShell = ({\n children,\n hasError,\n label,\n labelClassName,\n mainClassName,\n name,\n visualRequired\n}: FormFieldShellProps) => (\n <FormItem className={cn('flex flex-col', mainClassName)}>\n <LabelField\n label={label}\n labelClassName={cn(labelClassName, hasError && 'text-destructive')}\n name={name}\n visualRequired={visualRequired}\n />\n <FormControl>{children}</FormControl>\n <FormMessage />\n </FormItem>\n)\n","import { AdvancedMarker, APIProvider, Map } from '@vis.gl/react-google-maps'\n\nimport { cn, inputBase, inputFocus, zPopover } from '../utils'\nimport { PICKER_MAP_ID, useGoogleMapPicker } from './use-google-map-picker'\n\nconst DEFAULT_CENTER = { lat: 4.711, lng: -74.0721 }\n\nexport interface ResolvedAddress {\n address: string\n city: null | string\n country: null | string\n countryName: null | string\n department: null | string\n lat: null | number\n lng: null | number\n}\n\nexport interface GoogleMapPickerProps {\n apiKey?: string\n centerOn?: google.maps.LatLngLiteral\n countryCode?: string\n disabled?: boolean\n hasError?: boolean\n initialPosition?: google.maps.LatLngLiteral\n locationQuery?: string\n locationZoom?: number\n mapId?: string\n onAddressResolved?: (resolved: ResolvedAddress) => void\n onChange: (address: string) => void\n onError?: (error: unknown) => void\n placeholder?: string\n value: string\n}\n\nconst MapPickerContent = (props: GoogleMapPickerProps) => {\n const { disabled, hasError, mapId, placeholder } = props\n const {\n handleBlur,\n handleInputChange,\n handleMapClick,\n handleMarkerDragEnd,\n handleSelect,\n inputValue,\n position,\n setShowDropdown,\n showDropdown,\n suggestions\n } = useGoogleMapPicker(props)\n\n return (\n <div className='flex flex-col gap-3'>\n <div className='relative'>\n <input\n className={cn(inputBase, inputFocus, hasError && 'border-destructive')}\n disabled={disabled}\n onBlur={handleBlur}\n onChange={handleInputChange}\n onFocus={() => suggestions.length > 0 && setShowDropdown(true)}\n placeholder={placeholder}\n type='text'\n value={inputValue}\n />\n\n {showDropdown && suggestions.length > 0 && (\n <ul className={cn('border-border bg-surface absolute mt-1 w-full overflow-hidden rounded-[10px] border shadow-md', zPopover)}>\n {suggestions.map((suggestion) => (\n <li key={suggestion.placePrediction?.placeId ?? suggestion.placePrediction?.text.text}>\n <button\n className='text-foreground hover:bg-hover w-full px-4 py-3 text-left text-sm transition-colors'\n onClick={() => void handleSelect(suggestion)}\n type='button'\n >\n {suggestion.placePrediction?.text.text ?? ''}\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n\n <div className='border-border h-59 overflow-hidden rounded-[10px] border md:h-87.5'>\n <Map\n defaultCenter={DEFAULT_CENTER}\n defaultZoom={5}\n disableDefaultUI\n gestureHandling='cooperative'\n id={PICKER_MAP_ID}\n mapId={mapId ?? (import.meta.env.VITE_GOOGLE_MAPS_MAP_ID as string | undefined) ?? 'DEMO_MAP_ID'}\n onClick={handleMapClick}\n style={{ height: '100%', width: '100%' }}\n >\n {position && <AdvancedMarker draggable={!disabled} onDragEnd={handleMarkerDragEnd} position={position} />}\n </Map>\n </div>\n </div>\n )\n}\n\nexport const GoogleMapPicker = (props: GoogleMapPickerProps) => (\n <APIProvider\n apiKey={props.apiKey ?? (import.meta.env.VITE_GOOGLE_MAPS_API_KEY as string | undefined) ?? ''}\n language='es'\n region='CO'\n >\n <MapPickerContent {...props} />\n </APIProvider>\n)\n","import type { MapMouseEvent } from '@vis.gl/react-google-maps'\n\nimport { useMap, useMapsLibrary } from '@vis.gl/react-google-maps'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport type { GoogleMapPickerProps } from './google-map-picker'\n\nexport const PICKER_MAP_ID = 'komensal-restaurant-map'\nconst SELECTED_ZOOM = 15\nconst CITY_ZOOM = 12\nconst DEBOUNCE_MS = 300\n\ninterface RawComponent {\n long: null | string\n short: null | string\n types: string[]\n}\n\nconst parseComponents = (components: RawComponent[]) => {\n const find = (type: string) => components.find((c) => c.types.includes(type))\n const country = find('country')\n const department = find('administrative_area_level_1')\n const city = find('locality') ?? find('administrative_area_level_2')\n return {\n city: city?.long ?? null,\n country: country?.short ?? null,\n countryName: country?.long ?? null,\n department: department?.long ?? null\n }\n}\n\nexport function useGoogleMapPicker({\n centerOn,\n countryCode,\n disabled,\n initialPosition,\n locationQuery,\n locationZoom,\n onAddressResolved,\n onChange,\n onError,\n value\n}: GoogleMapPickerProps) {\n const placesLib = useMapsLibrary('places')\n const geocodingLib = useMapsLibrary('geocoding')\n const map = useMap(PICKER_MAP_ID)\n const onChangeRef = useRef(onChange)\n const onResolvedRef = useRef(onAddressResolved)\n const onErrorRef = useRef(onError)\n const geocoder = useMemo<google.maps.Geocoder | null>(\n () => (geocodingLib ? new geocodingLib.Geocoder() : null),\n [geocodingLib]\n )\n const debounceRef = useRef<null | ReturnType<typeof setTimeout>>(null)\n const blurTimeoutRef = useRef<null | ReturnType<typeof setTimeout>>(null)\n\n const [inputValue, setInputValue] = useState(value)\n const [suggestions, setSuggestions] = useState<google.maps.places.AutocompleteSuggestion[]>([])\n const [showDropdown, setShowDropdown] = useState(false)\n const [sessionToken, setSessionToken] = useState<google.maps.places.AutocompleteSessionToken | undefined>()\n const [position, setPosition] = useState<google.maps.LatLngLiteral | null>(initialPosition ?? null)\n\n useEffect(() => {\n onChangeRef.current = onChange\n onResolvedRef.current = onAddressResolved\n onErrorRef.current = onError\n })\n\n useEffect(\n () => () => {\n if (debounceRef.current) clearTimeout(debounceRef.current)\n if (blurTimeoutRef.current) clearTimeout(blurTimeoutRef.current)\n },\n []\n )\n\n useEffect(() => {\n setInputValue(value)\n }, [value])\n\n useEffect(() => {\n if (map && centerOn) {\n map.panTo(centerOn)\n map.setZoom(CITY_ZOOM)\n }\n }, [map, centerOn])\n\n useEffect(() => {\n if (map && position) {\n map.panTo(position)\n map.setZoom(SELECTED_ZOOM)\n }\n }, [map, position])\n\n useEffect(() => {\n if (!placesLib) return\n setSessionToken(new placesLib.AutocompleteSessionToken())\n }, [placesLib])\n\n useEffect(() => {\n if (!geocoder || !locationQuery || !map || position) return\n const g = geocoder\n const ctrl = { cancelled: false }\n void (async () => {\n try {\n const { results } = await g.geocode({ address: locationQuery })\n if (ctrl.cancelled || results.length === 0) return\n const loc = results[0].geometry.location\n map.panTo({ lat: loc.lat(), lng: loc.lng() })\n map.setZoom(locationZoom ?? CITY_ZOOM)\n } catch (error) {\n if (!ctrl.cancelled) {\n console.error('[GoogleMapPicker] geocode by query failed', error)\n onErrorRef.current?.(error)\n }\n }\n })()\n return () => {\n ctrl.cancelled = true\n }\n }, [geocoder, locationQuery, locationZoom, map, position])\n\n const fetchSuggestions = useCallback(\n async (input: string) => {\n if (!placesLib || input.length < 2) {\n setSuggestions([])\n return\n }\n try {\n const result = await placesLib.AutocompleteSuggestion.fetchAutocompleteSuggestions({\n includedRegionCodes: countryCode ? [countryCode.trim().toLowerCase()] : undefined,\n input,\n sessionToken\n })\n setSuggestions(result.suggestions)\n setShowDropdown(true)\n } catch (error) {\n console.error('[GoogleMapPicker] fetchAutocompleteSuggestions failed', error)\n onErrorRef.current?.(error)\n setSuggestions([])\n }\n },\n [placesLib, sessionToken, countryCode]\n )\n\n const reverseGeocode = useCallback(\n async (latLng: google.maps.LatLngLiteral) => {\n if (!geocoder) return\n try {\n const { results } = await geocoder.geocode({ location: latLng })\n if (results.length > 0) {\n const result = results[0]\n const address = result.formatted_address\n setInputValue(address)\n onChangeRef.current(address)\n const parts = parseComponents(\n result.address_components.map((c) => ({ long: c.long_name, short: c.short_name, types: c.types }))\n )\n onResolvedRef.current?.({ address, lat: latLng.lat, lng: latLng.lng, ...parts })\n }\n } catch (error) {\n console.error('[GoogleMapPicker] reverse geocode failed', error)\n onErrorRef.current?.(error)\n }\n },\n [geocoder]\n )\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value\n setInputValue(val)\n onChangeRef.current(val)\n\n if (debounceRef.current) clearTimeout(debounceRef.current)\n debounceRef.current = setTimeout(() => void fetchSuggestions(val), DEBOUNCE_MS)\n }\n\n const handleSelect = async (suggestion: google.maps.places.AutocompleteSuggestion) => {\n const prediction = suggestion.placePrediction\n if (!prediction) return\n\n const place = prediction.toPlace()\n await place.fetchFields({ fields: ['formattedAddress', 'location', 'addressComponents'] })\n\n const address = place.formattedAddress ?? prediction.text.text\n setInputValue(address)\n onChangeRef.current(address)\n setSuggestions([])\n setShowDropdown(false)\n\n const lat = place.location?.lat() ?? null\n const lng = place.location?.lng() ?? null\n if (place.location) {\n setPosition({ lat: place.location.lat(), lng: place.location.lng() })\n }\n\n const parts = parseComponents(\n (place.addressComponents ?? []).map((c) => ({ long: c.longText, short: c.shortText, types: c.types }))\n )\n onResolvedRef.current?.({ address, lat, lng, ...parts })\n\n if (placesLib) setSessionToken(new placesLib.AutocompleteSessionToken())\n }\n\n const handleBlur = () => {\n if (blurTimeoutRef.current) clearTimeout(blurTimeoutRef.current)\n blurTimeoutRef.current = setTimeout(() => setShowDropdown(false), 150)\n }\n\n const handleMapClick = useCallback(\n (e: MapMouseEvent) => {\n if (disabled || !e.detail.latLng) return\n const latLng = e.detail.latLng\n setPosition(latLng)\n void reverseGeocode(latLng)\n },\n [disabled, reverseGeocode]\n )\n\n const handleMarkerDragEnd = useCallback(\n (e: google.maps.MapMouseEvent) => {\n const latLng = e.latLng\n if (!latLng) return\n const pos = { lat: latLng.lat(), lng: latLng.lng() }\n setPosition(pos)\n void reverseGeocode(pos)\n },\n [reverseGeocode]\n )\n\n return {\n handleBlur,\n handleInputChange,\n handleMapClick,\n handleMarkerDragEnd,\n handleSelect,\n inputValue,\n position,\n setShowDropdown,\n showDropdown,\n suggestions\n }\n}\n","import type { Control, FieldValues, Path } from 'react-hook-form'\n\nimport { FormField } from '../form'\nimport { GoogleMapPicker, type GoogleMapPickerProps } from '../google-map-picker'\nimport { FormFieldShell } from './form-field-shell'\n\ntype MapPickerFieldProps<T extends FieldValues> = Omit<GoogleMapPickerProps, 'hasError' | 'onChange' | 'value'> & {\n control: Control<T>\n label?: string\n labelClassName?: string\n mainClassName?: string\n name: Path<T>\n visualRequired?: boolean\n}\n\nexport const MapPickerField = <T extends FieldValues>({\n control,\n label,\n labelClassName,\n mainClassName,\n name,\n visualRequired,\n ...pickerProps\n}: MapPickerFieldProps<T>) => (\n <FormField\n control={control}\n name={name}\n render={({ field, fieldState }) => (\n <FormFieldShell\n hasError={!!fieldState.error}\n label={label}\n labelClassName={labelClassName}\n mainClassName={mainClassName}\n name={name}\n visualRequired={visualRequired}\n >\n <GoogleMapPicker\n {...pickerProps}\n hasError={!!fieldState.error}\n onChange={field.onChange}\n value={field.value ?? ''}\n />\n </FormFieldShell>\n )}\n />\n)\n","import { OTPInput, OTPInputContext } from 'input-otp'\nimport React from 'react'\n\nimport { cn } from '../utils'\n\nfunction InputOTP({\n className,\n containerClassName,\n ...props\n}: React.ComponentProps<typeof OTPInput> & {\n containerClassName?: string\n}) {\n return (\n <OTPInput\n className={cn('disabled:cursor-not-allowed', className)}\n containerClassName={cn('flex items-center gap-2 has-disabled:opacity-50', containerClassName)}\n data-slot='input-otp'\n {...props}\n />\n )\n}\n\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return <div className={cn('flex items-center gap-2', className)} data-slot='input-otp-group' {...props} />\n}\n\nfunction InputOTPSlot({\n className,\n index,\n ...props\n}: React.ComponentProps<'div'> & {\n index: number\n}) {\n const inputOTPContext = React.useContext(OTPInputContext) as {\n slots: { char: string | null; hasFakeCaret: boolean; isActive: boolean }[]\n }\n const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index] ?? {}\n\n return (\n <div\n className={cn(\n 'border-border text-foreground relative flex h-14 w-12 items-center justify-center rounded-[10px] border text-xl font-medium transition-all outline-none',\n char ? 'bg-brand-subtle' : 'bg-transparent',\n 'data-[active=true]:border-primary data-[active=true]:ring-ring data-[active=true]:z-10 data-[active=true]:ring-2',\n 'aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/40',\n className\n )}\n data-active={isActive}\n data-slot='input-otp-slot'\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className='pointer-events-none absolute inset-0 flex items-center justify-center'>\n <div className='animate-caret-blink bg-foreground h-6 w-px duration-1000' />\n </div>\n )}\n </div>\n )\n}\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot }\n","import React from 'react'\nimport { Control, FieldPath, FieldValues } from 'react-hook-form'\n\nimport { cn } from '../../utils'\nimport { FormControl, FormField, FormItem, FormMessage } from '../form'\nimport { InputOTP, InputOTPGroup, InputOTPSlot } from '../otp-input'\nimport { LabelField } from './label-field'\n\ninterface OtpInputFormFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> {\n autoFocus?: boolean\n className?: string\n containerClassName?: string\n control: Control<TFieldValues>\n disabled?: boolean\n label?: string\n labelClassName?: string\n name: TName\n otpLength?: number\n visualRequired?: boolean\n}\n\nexport function OTPField<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n autoFocus,\n className,\n containerClassName,\n control,\n disabled,\n label,\n labelClassName,\n name,\n otpLength = 6,\n visualRequired\n}: OtpInputFormFieldProps<TFieldValues, TName>) {\n return (\n <FormField\n control={control}\n name={name}\n render={({ field, fieldState }) => (\n <FormItem className={cn('flex flex-col', className)}>\n {label ? (\n <LabelField\n label={label}\n labelClassName={cn(labelClassName, fieldState.invalid && 'text-destructive')}\n name={name}\n visualRequired={visualRequired}\n />\n ) : null}\n <FormControl>\n <InputOTP\n aria-invalid={fieldState.invalid || undefined}\n autoComplete='one-time-code'\n autoFocus={autoFocus}\n containerClassName={cn('justify-center', containerClassName)}\n disabled={disabled}\n id={name}\n inputMode='numeric'\n maxLength={otpLength}\n onChange={(val: string) => field.onChange(val)}\n onPaste={(e: React.ClipboardEvent<HTMLInputElement>) => field.onChange(e.clipboardData.getData('text'))}\n pattern='[0-9]*'\n value={field.value ?? ''}\n >\n <InputOTPGroup>\n {Array.from({ length: otpLength }).map((_, i) => (\n <InputOTPSlot aria-invalid={fieldState.invalid || undefined} index={i} key={i} />\n ))}\n </InputOTPGroup>\n </InputOTP>\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n )\n}\n","import { CaretDownIcon, CaretUpIcon, ClockIcon, XIcon } from '@phosphor-icons/react'\nimport { cloneElement, JSX, useCallback, useEffect, useId, useMemo, useState } from 'react'\nimport { FieldError, Noop } from 'react-hook-form'\n\nimport { useUiT } from '../lib/i18n'\nimport { cn, inputBase, inputDisabled, inputFocus, inputPlaceholder, zPopoverAboveDialog } from '../utils'\nimport { Button } from './button'\nimport { Command, CommandEmpty, CommandGroup, CommandItem, CommandList } from './command'\nimport { Input } from './input'\nimport { Popover, PopoverContent, PopoverTrigger } from './popover'\nimport { Spinner } from './spinner'\nimport { TimeColumns } from './time-columns'\nimport { usePopoverWidth, useSelectFilter } from './use-select-input'\n\ninterface SelectInputProps<Label extends string, Value extends string> {\n ableDeleteOption?: boolean\n className?: string\n disabled?: boolean\n error?: FieldError\n items?: null | Record<Label | Value, number | string>[]\n labelKey?: string\n leftIcon?: JSX.Element\n loading?: boolean\n loadingLabel?: string\n noResultsLabel?: string\n onBlur?: Noop\n onChange?: (...event: unknown[]) => void\n onValueChangeCallBack?: (item: { label: string; value: string }) => void\n placeholder?: string\n placeholderClassName?: string\n search?: boolean\n searchPlaceholder?: string\n timeField?: boolean\n value?: string\n valueKey?: string\n}\n\nexport const SelectInput = <Label extends string, Value extends string>(props: SelectInputProps<Label, Value>) => {\n const t = useUiT()\n const {\n ableDeleteOption,\n className,\n disabled = false,\n error,\n items,\n labelKey = 'label',\n leftIcon,\n loading = false,\n loadingLabel,\n noResultsLabel,\n onBlur,\n onChange,\n onValueChangeCallBack = () => undefined,\n placeholder,\n placeholderClassName = '',\n search = false,\n searchPlaceholder,\n timeField = false,\n value = '',\n valueKey = 'value'\n } = props\n\n const resolvedPlaceholder = placeholder ?? t('selectInput.placeholder')\n const listboxId = useId()\n\n const [open, setOpen] = useState<boolean>(false)\n const [valueItem, setValueItem] = useState(value)\n\n const { ref: divRef, width } = usePopoverWidth<HTMLButtonElement>()\n const { filteredOptions, normalizedItems, query, setQuery } = useSelectFilter<Label, Value>(\n items,\n labelKey,\n valueKey\n )\n\n const onValueChange = useCallback(\n (val: string) => {\n if (!normalizedItems.length) return\n const item = normalizedItems.find((i) => i[valueKey as Value] === val)\n if (item) {\n onValueChangeCallBack({\n label: item[labelKey as Label],\n value: item[valueKey as Value]\n })\n setValueItem(val)\n }\n },\n [normalizedItems, labelKey, valueKey, onValueChangeCallBack]\n )\n\n const timeHours = useMemo(\n () =>\n Array.from(new Set(normalizedItems.map((i) => i[valueKey as Value].split(':')[0]))).sort((a, b) =>\n a.localeCompare(b)\n ),\n [normalizedItems, valueKey]\n )\n const timeMinutes = useMemo(\n () =>\n Array.from(new Set(normalizedItems.map((i) => i[valueKey as Value].split(':')[1]))).sort((a, b) =>\n a.localeCompare(b)\n ),\n [normalizedItems, valueKey]\n )\n\n const handleSelectHour = (hour: string) => {\n const minute = valueItem.split(':')[1] || timeMinutes[0]\n const newValue = `${hour}:${minute}`\n onChange?.(newValue)\n onValueChange(newValue)\n }\n\n const handleSelectMinute = (minute: string) => {\n const hour = valueItem.split(':')[0] || timeHours[0]\n const newValue = `${hour}:${minute}`\n onChange?.(newValue)\n onValueChange(newValue)\n setOpen(false)\n }\n\n const buttonClassName = useMemo(\n () =>\n cn(\n inputBase,\n inputFocus,\n 'hover:bg-surface',\n disabled && inputDisabled,\n error && 'border-destructive',\n className\n ),\n [disabled, error, className]\n )\n\n useEffect(() => {\n setValueItem(value)\n }, [value])\n\n return (\n <div className='flex flex-col gap-1'>\n <div className='relative flex flex-col justify-center'>\n <Popover onOpenChange={setOpen} open={open}>\n <PopoverTrigger asChild>\n <Button\n aria-controls={listboxId}\n aria-expanded={open}\n aria-haspopup='listbox'\n className={buttonClassName}\n disabled={disabled}\n isLoading={loading}\n onBlur={onBlur}\n ref={divRef}\n role='combobox'\n variant='primary'\n >\n {loading ? (\n <>\n {loadingLabel ?? t('selectInput.loading')} <Spinner />\n </>\n ) : (\n <div className='relative flex h-5 w-full items-center'>\n {timeField ? (\n <div className='flex w-full items-center justify-center gap-5 truncate'>\n {valueItem ? (\n filteredOptions.find((i) => i[valueKey as Value] === valueItem)?.[labelKey as Label]\n ) : (\n <span className={cn(inputPlaceholder, placeholderClassName)}>{resolvedPlaceholder}</span>\n )}\n <ClockIcon className='h-4 w-4 shrink-0 opacity-50' />\n </div>\n ) : (\n <>\n <div className='flex w-full max-w-[90%] items-center truncate'>\n {leftIcon && (\n <span className='mr-2 shrink-0'>{cloneElement(leftIcon, { size: 20, strokeWidth: 1 })}</span>\n )}\n {valueItem ? (\n filteredOptions.find((i) => i[valueKey as Value] === valueItem)?.[labelKey as Label]\n ) : (\n <span className={cn(inputPlaceholder, placeholderClassName)}>{resolvedPlaceholder}</span>\n )}\n </div>\n <div className='absolute top-0.5 right-0 flex gap-2'>\n {ableDeleteOption && <div aria-hidden className='h-4 w-4 shrink-0' />}\n {!open ? (\n <CaretDownIcon className='ml-2 h-4 w-4 shrink-0 opacity-50' />\n ) : (\n <CaretUpIcon className='ml-2 h-4 w-4 shrink-0 opacity-50' />\n )}\n </div>\n </>\n )}\n </div>\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className={cn('bg-surface border-border rounded-sm p-1', zPopoverAboveDialog)}\n id={listboxId}\n onOpenAutoFocus={(e) => e.preventDefault()}\n style={\n timeField\n ? { maxWidth: 'auto', width: '180px' }\n : { maxWidth: 'auto', minWidth: `${width}px`, width: `${width}px` }\n }\n >\n {timeField ? (\n <TimeColumns\n hours={timeHours}\n minutes={timeMinutes}\n onSelectHour={handleSelectHour}\n onSelectMinute={handleSelectMinute}\n value={valueItem}\n />\n ) : (\n <Command className='flex w-full flex-col gap-2'>\n {search && (\n <Input\n className='mb-1 rounded-sm'\n onChange={(e) => setQuery(e.target.value)}\n placeholder={searchPlaceholder ?? t('selectInput.search')}\n value={query}\n />\n )}\n <CommandEmpty className='text-center'>{noResultsLabel ?? t('selectInput.noResults')}</CommandEmpty>\n <CommandList>\n <CommandGroup className='p-0'>\n {filteredOptions.map((item) => {\n const labelValue = item[labelKey as Label] as string\n const valueValue = item[valueKey as Value] as string\n\n return (\n <CommandItem\n className={cn(\n 'hover:bg-hover mt-0.5 mb-0.5 flex cursor-pointer items-center gap-2 rounded-sm py-2 pl-3',\n valueValue === value && 'bg-inactive'\n )}\n key={valueValue}\n onSelect={(currentValue: string) => {\n onChange?.(currentValue)\n onValueChange(currentValue)\n setOpen(false)\n setTimeout(() => setQuery(''), 100)\n }}\n value={valueValue}\n >\n {labelValue.trim()}\n </CommandItem>\n )\n })}\n </CommandGroup>\n </CommandList>\n </Command>\n )}\n </PopoverContent>\n </Popover>\n {ableDeleteOption && !loading && !timeField && (\n <button\n aria-label={t('selectInput.clear')}\n className='absolute top-1/2 right-9 z-10 flex h-4 w-4 -translate-y-1/2 items-center justify-center'\n onClick={() => {\n onChange?.('')\n onValueChange('')\n setValueItem('')\n setQuery('')\n setOpen(false)\n }}\n type='button'\n >\n <XIcon className='h-4 w-4 shrink-0 opacity-50' />\n </button>\n )}\n </div>\n </div>\n )\n}\n","import * as PopoverPrimitive from '@radix-ui/react-popover'\nimport * as React from 'react'\n\nimport { cn, zPopover } from '../utils'\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ align = 'center', className, sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align={align}\n className={cn(\n `text-foreground bg-surface data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ${zPopover} w-72 rounded-md border p-4 shadow-md outline-none`,\n className\n )}\n ref={ref}\n sideOffset={sideOffset}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverContent, PopoverTrigger }\n","import * as React from 'react'\n\nimport { cn } from '../utils'\n\ninterface TimeColumnsProps {\n hours: string[]\n minutes: string[]\n onSelectHour: (hour: string) => void\n onSelectMinute: (minute: string) => void\n value: string\n}\n\nexport const TimeColumns = ({ hours, minutes, onSelectHour, onSelectMinute, value }: TimeColumnsProps) => {\n const [selectedHour, selectedMinute] = value ? value.split(':') : ['', '']\n const hourListRef = React.useRef<HTMLDivElement>(null)\n const minuteListRef = React.useRef<HTMLDivElement>(null)\n\n React.useEffect(() => {\n hourListRef.current?.querySelector('[data-selected=\"true\"]')?.scrollIntoView({ block: 'center' })\n minuteListRef.current?.querySelector('[data-selected=\"true\"]')?.scrollIntoView({ block: 'center' })\n }, [])\n\n return (\n <div className='divide-border flex divide-x'>\n <div className='max-h-60 flex-1 overflow-y-auto' ref={hourListRef}>\n {hours.map((hour) => {\n const isSelected = hour === selectedHour\n return (\n <button\n className={cn(\n 'hover:bg-hover flex w-full cursor-pointer items-center justify-center rounded-sm px-2 py-1.5 text-sm',\n isSelected && 'bg-inactive font-medium'\n )}\n data-selected={isSelected}\n key={hour}\n onClick={() => onSelectHour(hour)}\n type='button'\n >\n {formatHour12(hour)}\n </button>\n )\n })}\n </div>\n <div className='max-h-60 flex-1 overflow-y-auto' ref={minuteListRef}>\n {minutes.map((minute) => {\n const isSelected = minute === selectedMinute\n return (\n <button\n className={cn(\n 'hover:bg-hover w-full cursor-pointer rounded-sm px-2 py-1.5 text-center text-sm',\n isSelected && 'bg-inactive font-medium'\n )}\n data-selected={isSelected}\n key={minute}\n onClick={() => onSelectMinute(minute)}\n type='button'\n >\n {minute}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n\nfunction formatHour12(hour: string): string {\n const hourNum = Number(hour)\n const period = hourNum >= 12 ? 'PM' : 'AM'\n const hour12 = hourNum % 12 === 0 ? 12 : hourNum % 12\n return `${hour12} ${period}`\n}\n","import { useEffect, useMemo, useRef, useState } from 'react'\n\nconst normalizeString = (str: string): string => str.normalize('NFD').replace(/[̀-ͯ]/g, '').toLowerCase()\n\nexport function useSelectFilter<Label extends string, Value extends string>(\n items: null | Record<Label | Value, number | string>[] | undefined,\n labelKey: string,\n valueKey: string\n) {\n const [query, setQuery] = useState('')\n\n const normalizedItems = useMemo(() => {\n if (!items) return [] as Record<Label | Value, string>[]\n return items.map((it) => ({\n ...it,\n [labelKey]: String(it[labelKey as Label]),\n [valueKey]: String(it[valueKey as Value])\n })) as Record<Label | Value, string>[]\n }, [items, labelKey, valueKey])\n\n const filteredOptions = useMemo(() => {\n if (!query) return normalizedItems\n return normalizedItems.filter((el) =>\n normalizeString(el[labelKey as Label] as string).includes(normalizeString(query))\n )\n }, [normalizedItems, labelKey, query])\n\n return { filteredOptions, normalizedItems, query, setQuery }\n}\n\nexport function usePopoverWidth<T extends HTMLElement>() {\n const ref = useRef<T>(null)\n const [width, setWidth] = useState(0)\n\n useEffect(() => {\n const updateWidth = () => {\n if (ref.current) setWidth(ref.current.getBoundingClientRect().width)\n }\n updateWidth()\n window.addEventListener('resize', updateWidth)\n return () => window.removeEventListener('resize', updateWidth)\n }, [])\n\n return { ref, width }\n}\n","import { Control, FieldValues, Path } from 'react-hook-form'\n\nimport { FormField } from '../form'\nimport { SelectInput } from '../select-input'\nimport { FormFieldShell } from './form-field-shell'\n\nexport interface Options {\n label: string\n value: number | string\n}\n\ninterface SelectFieldProps<T extends FieldValues = FieldValues> {\n ableDeleteOption?: boolean\n className?: string\n control: Control<T>\n disabled?: boolean\n label?: string\n labelClassName?: string\n mainClassName?: string\n name: Path<T>\n onChange?: (...event: unknown[]) => void\n options: Options[] | undefined\n placeholder?: string\n search?: boolean\n visualRequired?: boolean\n}\n\nexport const SelectField = <T extends FieldValues = FieldValues>({\n ableDeleteOption,\n className,\n control,\n disabled,\n label,\n labelClassName,\n mainClassName,\n name,\n onChange,\n options,\n placeholder,\n search,\n visualRequired\n}: SelectFieldProps<T>) => {\n return (\n <FormField\n control={control}\n name={name}\n render={({ field, fieldState }) => {\n const hasError = !!fieldState.error\n\n return (\n <FormFieldShell\n hasError={hasError}\n label={label}\n labelClassName={labelClassName}\n mainClassName={mainClassName}\n name={name}\n visualRequired={visualRequired}\n >\n <SelectInput\n ableDeleteOption={ableDeleteOption}\n className={className}\n disabled={disabled}\n error={fieldState.error}\n items={options}\n onChange={(...args) => {\n field.onChange(...args)\n onChange?.(...args)\n }}\n placeholder={placeholder}\n search={search}\n value={typeof field.value === 'number' ? `${field.value}` : field.value}\n />\n </FormFieldShell>\n )\n }}\n />\n )\n}\n","import { CheckCircleIcon, XCircleIcon } from '@phosphor-icons/react'\n\nimport { PasswordRule } from '../types/password'\nimport { cn } from '../utils'\n\ninterface PasswordChecklistProps {\n className?: string\n rules: PasswordRule[]\n value: string\n}\n\nexport const PasswordChecklist = ({ className, rules, value }: PasswordChecklistProps) => {\n if (rules.length === 0) return null\n\n return (\n <ul className={cn('flex flex-col gap-1', className)}>\n {rules.map((rule) => {\n const isMet = rule.test(value)\n const Icon = isMet ? CheckCircleIcon : XCircleIcon\n\n return (\n <li\n className={cn(\n 'flex items-center gap-2 text-xs transition-colors',\n isMet ? 'text-success' : 'text-inactive-text'\n )}\n key={rule.key}\n >\n <Icon aria-hidden='true' className='h-4 w-4 shrink-0' />\n <span>{rule.label}</span>\n </li>\n )\n })}\n </ul>\n )\n}\n","import type { ReactNode } from 'react'\n\nimport { cn } from '../utils'\n\ninterface StepHeaderProps {\n subtitle?: ReactNode\n subtitleClassName?: string\n title: string\n}\n\nexport const StepHeader = ({ subtitle, subtitleClassName, title }: StepHeaderProps) => (\n <div className='flex flex-col gap-1'>\n <h1 className='text-title text-2xl font-bold'>{title}</h1>\n {subtitle !== undefined && <p className={cn('text-subtitle text-sm', subtitleClassName)}>{subtitle}</p>}\n </div>\n)\n","import { CheckIcon } from '@phosphor-icons/react'\n\nimport { cn } from '../utils'\n\nexport interface StepperStep {\n label: string\n}\n\ninterface StepperProps {\n activeIndex: number\n className?: string\n intermediate?: boolean\n steps: StepperStep[]\n}\n\nexport const Stepper = ({ activeIndex, className, intermediate = false, steps }: StepperProps) => {\n return (\n <div className={cn('flex w-full items-start', className)}>\n {steps.map((step, index) => {\n const isCompleted = intermediate ? index <= activeIndex : index < activeIndex\n const isActive = !intermediate && index === activeIndex\n\n return (\n <div className='flex flex-1 flex-col items-center' key={step.label}>\n <div className='flex w-full items-center'>\n <div\n className={cn(\n 'h-0.75 flex-1 self-center',\n isCompleted || isActive ? 'bg-primary' : 'bg-inactive',\n index === 0 && 'rounded-l-full'\n )}\n />\n <div\n aria-current={isActive ? 'step' : undefined}\n className={cn(\n 'flex h-5.5 w-5.5 shrink-0 items-center justify-center rounded-full border text-xs font-semibold transition-colors md:h-6.5 md:w-6.5',\n isCompleted && 'bg-primary border-primary text-inverse',\n isActive && 'bg-primary border-primary text-inverse',\n !isCompleted && !isActive && 'bg-inactive border-inactive text-surface'\n )}\n >\n {isCompleted ? <CheckIcon className='h-4 w-4' /> : index + 1}\n </div>\n <div\n className={cn(\n 'relative h-0.75 flex-1 self-center',\n isCompleted ? 'bg-primary' : 'bg-inactive',\n index === steps.length - 1 && 'rounded-r-full'\n )}\n >\n {index === 0 && (\n <div\n className={cn(\n 'absolute top-1/2 right-0 h-2.25 w-2.25 translate-x-1/2 -translate-y-1/2 rounded-full transition-colors',\n isCompleted ? 'bg-primary' : 'bg-inactive'\n )}\n />\n )}\n </div>\n </div>\n <span className={cn('mt-1 text-xs font-normal', isCompleted || isActive ? 'text-primary' : 'text-muted')}>\n {step.label}\n </span>\n </div>\n )\n })}\n </div>\n )\n}\n","import * as SwitchPrimitive from '@radix-ui/react-switch'\nimport * as React from 'react'\n\nimport { cn } from '../utils'\n\nexport interface SwitchProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'checked' | 'defaultChecked'> {\n checked?: boolean\n defaultChecked?: boolean\n onCheckedChange?: (checked: boolean) => void\n required?: boolean\n}\n\nconst Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(({ className, ...props }, ref) => (\n <SwitchPrimitive.Root\n className={cn(\n 'border-border focus-visible:ring-ring relative inline-flex h-[26px] w-[50px] shrink-0 cursor-pointer items-center rounded-full border transition-colors focus-visible:ring-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-success data-[state=unchecked]:bg-inactive',\n className\n )}\n ref={ref}\n {...props}\n >\n <SwitchPrimitive.Thumb className='bg-surface pointer-events-none absolute top-[3px] left-[3px] block h-[18px] w-[18px] rounded-full shadow-lg transition-transform data-[state=checked]:translate-x-6' />\n </SwitchPrimitive.Root>\n))\nSwitch.displayName = SwitchPrimitive.Root.displayName\n\nexport { Switch }\n","import { CheckIcon, FileLockIcon, InfoIcon, WarningIcon, XIcon } from '@phosphor-icons/react'\nimport { useEffect, useRef, useState } from 'react'\n\nimport { ToastType } from '../../types/toast'\nimport { cn } from '../../utils'\n\ninterface ToastProps {\n duration?: number\n id: string\n onClose: (id: string) => void\n subtitle?: string\n title: string\n type: ToastType\n}\n\nconst EXIT_ANIMATION_MS = 200\n\nconst typeIcons: Record<ToastType, React.ComponentType<{ className?: string }>> = {\n destructive: XIcon,\n info: InfoIcon,\n success: CheckIcon,\n wait: FileLockIcon,\n warning: WarningIcon\n}\n\nconst typeStyles: Record<ToastType, { border: string; icon: string; iconBorder: string }> = {\n destructive: { border: 'border-destructive', icon: 'text-destructive', iconBorder: 'border-destructive' },\n info: { border: 'border-info', icon: 'text-info', iconBorder: 'border-info' },\n success: { border: 'border-success', icon: 'text-success', iconBorder: 'border-success' },\n wait: { border: 'border-wait', icon: 'text-wait', iconBorder: 'border-wait' },\n warning: { border: 'border-warning', icon: 'text-warning', iconBorder: 'border-warning' }\n}\n\nexport function Toast({ duration = 2500, id, onClose, subtitle, title, type }: ToastProps) {\n const [leaving, setLeaving] = useState(false)\n const startedAtRef = useRef<number>(Date.now())\n const timeoutRef = useRef<null | ReturnType<typeof setTimeout>>(null)\n const exitRef = useRef<null | ReturnType<typeof setTimeout>>(null)\n\n const Icon = typeIcons[type]\n const styles = typeStyles[type]\n\n useEffect(() => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n if (exitRef.current) clearTimeout(exitRef.current)\n\n const elapsed = Date.now() - startedAtRef.current\n const remaining = Math.max(0, duration - elapsed)\n\n timeoutRef.current = setTimeout(() => {\n setLeaving(true)\n exitRef.current = setTimeout(() => onClose(id), EXIT_ANIMATION_MS)\n }, remaining)\n\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n if (exitRef.current) clearTimeout(exitRef.current)\n }\n }, [id, duration, onClose])\n\n return (\n <div\n aria-live='polite'\n className={cn(\n 'relative',\n leaving ? 'absolute top-0 right-0 left-0' : '',\n 'flex w-108.5 max-w-[calc(100vw-2rem)] items-center justify-between',\n 'min-h-16',\n 'bg-surface rounded-[10px] border-2',\n 'px-5 py-4.5',\n 'shadow-[0_4px_20px_rgba(0,0,0,0.05)]',\n 'transition-all duration-200 ease-out',\n styles.border,\n leaving ? 'translate-y-2 opacity-0' : 'translate-y-0 opacity-100'\n )}\n role='status'\n >\n <div className='min-w-0 pr-4'>\n <h4 className={cn('text-[16px] leading-normal font-semibold', 'text-foreground', 'line-clamp-2')}>{title}</h4>\n </div>\n\n {subtitle ? (\n <div className='shrink-0 pr-4 text-left'>\n <div className={cn('max-w-28 text-[14px] leading-[19.5px] font-normal', 'text-body')}>{subtitle}</div>\n </div>\n ) : null}\n\n <div\n className={cn('shrink-0', 'flex h-8 w-8 min-w-8 items-center justify-center rounded-full border-2', styles.iconBorder)}\n >\n <Icon className={cn('h-5 w-5', styles.icon)} />\n </div>\n </div>\n )\n}\n","import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\n\nimport { ToastOptions, ToastPosition, ToastType } from '../../types/toast'\nimport { registerToastEmitter } from '../../utils/toast-emitter'\nimport { zToast } from '../../utils/z-index'\nimport { Toast } from './toast'\n\ninterface ToastItem extends ToastOptions {\n id: string\n type: ToastType\n}\n\nexport function ToastProvider() {\n const [toasts, setToasts] = useState<ToastItem[]>([])\n const itemRefs = useRef(new Map<string, HTMLDivElement>())\n const prevRects = useRef(new Map<string, DOMRect>())\n\n const showToast = useCallback((type: ToastType, options: ToastOptions) => {\n setToasts((prev) => [\n ...prev,\n {\n duration: 2500,\n id: crypto.randomUUID(),\n position: 'top-right',\n type,\n ...options\n }\n ])\n }, [])\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n useEffect(() => {\n registerToastEmitter(showToast)\n return () => registerToastEmitter(null)\n }, [showToast])\n\n const grouped = useMemo(() => {\n return toasts.reduce<Partial<Record<ToastPosition, ToastItem[]>>>((acc, toast) => {\n const pos = toast.position ?? 'top'\n acc[pos] = [...(acc[pos] ?? []), toast]\n return acc\n }, {})\n }, [toasts])\n\n useLayoutEffect(() => {\n const newRects = new Map<string, DOMRect>()\n\n itemRefs.current.forEach((el, id) => {\n newRects.set(id, el.getBoundingClientRect())\n })\n\n newRects.forEach((newRect, id) => {\n const prevRect = prevRects.current.get(id)\n const el = itemRefs.current.get(id)\n if (!el || !prevRect) return\n\n const dy = prevRect.top - newRect.top\n if (dy === 0) return\n\n el.style.transform = `translateY(${dy}px)`\n el.style.transition = 'transform 0s'\n\n requestAnimationFrame(() => {\n el.style.transition = 'transform 200ms ease-out'\n el.style.transform = ''\n })\n })\n\n prevRects.current = newRects\n }, [toasts])\n\n const setItemRef = useCallback((id: string) => {\n return (el: HTMLDivElement | null) => {\n if (!el) {\n itemRefs.current.delete(id)\n prevRects.current.delete(id)\n return\n }\n itemRefs.current.set(id, el)\n }\n }, [])\n\n return (\n <>\n {Object.entries(grouped).map(([position, list]) => (\n <div className={`fixed ${zToast} ${getPositionClass(position as ToastPosition)}`} key={position}>\n <div className='relative flex flex-col gap-3'>\n {list.map((toast) => (\n <div key={toast.id} ref={setItemRef(toast.id)}>\n <Toast\n duration={toast.duration}\n id={toast.id}\n onClose={removeToast}\n subtitle={toast.subtitle}\n title={toast.title}\n type={toast.type}\n />\n </div>\n ))}\n </div>\n </div>\n ))}\n </>\n )\n}\n\nfunction getPositionClass(position: ToastPosition) {\n const map: Record<ToastPosition, string> = {\n bottom: 'bottom-6 left-1/2 -translate-x-1/2',\n 'bottom-left': 'bottom-6 left-6',\n 'bottom-right': 'bottom-6 right-6',\n center: 'top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2',\n 'middle-bottom': 'bottom-20 left-1/2 -translate-x-1/2',\n 'middle-top': 'top-20 left-1/2 -translate-x-1/2',\n top: 'top-6 left-1/2 -translate-x-1/2',\n 'top-left': 'top-6 left-6',\n 'top-right': 'top-6 right-6'\n }\n\n return map[position]\n}\n","import { ReactNode } from 'react'\n\nimport { cn } from '../utils'\n\nexport interface WrapperProps {\n children: ReactNode\n className?: string\n}\n\nexport const Wrapper = ({ children, className }: WrapperProps) => {\n return <div className={cn('mx-auto h-full w-full', className)}>{children}</div>\n}\n"],"mappings":"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","names":["jsx","jsxs","jsx","jsxs","React","jsx","jsxs","React","clsx","Fragment","jsx","jsxs","clsx","React","jsx","jsxs","jsx","jsxs","cva","React","jsx","cva","React","React","jsx","jsxs","jsx","jsxs","Slot","React","jsx","Slot","XIcon","React","jsx","cva","React","jsx","cva","jsx","jsxs","jsx","jsxs","jsx","jsxs","XIcon","Map","useState","jsx","jsxs","Map","jsx","React","jsx","jsxs","React","jsx","jsxs","XIcon","useCallback","useEffect","useId","useMemo","useState","React","jsx","React","jsx","jsxs","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","useId","useState","useCallback","useMemo","useEffect","XIcon","jsx","CheckCircleIcon","jsx","jsxs","CheckCircleIcon","jsx","jsxs","jsx","jsxs","React","jsx","CheckIcon","InfoIcon","WarningIcon","XIcon","useEffect","useRef","useState","jsx","jsxs","XIcon","InfoIcon","CheckIcon","WarningIcon","useState","useRef","useEffect","useCallback","useEffect","useMemo","useRef","useState","Fragment","jsx","useState","useRef","useCallback","useEffect","useMemo","toast","jsx"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/add-tile.tsx","../src/utils/cn.ts","../src/utils/color.ts","../src/utils/format.ts","../src/utils/styles.ts","../src/utils/tag-emoji.ts","../src/utils/toast-emitter.ts","../src/utils/url.ts","../src/utils/z-index.ts","../src/components/alert.tsx","../src/components/auth-header.tsx","../src/components/breadcrumb.tsx","../src/components/button.tsx","../src/components/spinner.tsx","../src/lib/i18n.ts","../src/locales/es/ui.json","../src/components/tooltip.tsx","../src/components/chip.tsx","../src/components/command.tsx","../src/components/dialog.tsx","../src/components/form.tsx","../src/components/form-fields/input-field.tsx","../src/components/input.tsx","../src/components/label.tsx","../src/components/form-fields/label-field.tsx","../src/components/form-fields/form-field-shell.tsx","../src/components/google-map-picker.tsx","../src/components/use-google-map-picker.ts","../src/components/form-fields/map-picker-field.tsx","../src/components/otp-input.tsx","../src/components/form-fields/otp-field.tsx","../src/components/select-input.tsx","../src/components/popover.tsx","../src/components/time-columns.tsx","../src/components/use-select-input.ts","../src/components/form-fields/select-field.tsx","../src/components/password-checklist.tsx","../src/components/skeleton.tsx","../src/components/step-header.tsx","../src/components/stepper.tsx","../src/components/switch.tsx","../src/components/toast/toast.tsx","../src/components/toast/toast-provider.tsx","../src/components/wrapper.tsx"],"sourcesContent":["import * as React from 'react'\n\nimport { cn } from '../utils'\n\nexport interface AddTileProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n icon: React.ReactNode\n label: string\n labelClassName?: string\n}\n\nconst AddTile = React.forwardRef<HTMLButtonElement, AddTileProps>(\n ({ className, icon, label, labelClassName, ...props }, ref) => (\n <button\n className={cn(\n 'group border-border text-muted hover:border-primary-hover hover:bg-brand-200 hover:text-primary focus-visible:ring-ring flex min-h-92.5 cursor-pointer flex-col items-center justify-center gap-2 rounded-2xl border-2 border-dashed transition-colors focus-visible:ring-2 focus-visible:outline-none',\n className\n )}\n ref={ref}\n type='button'\n {...props}\n >\n {icon}\n <span className={cn('text-sm font-medium', labelClassName)}>{label}</span>\n </button>\n )\n)\nAddTile.displayName = 'AddTile'\n\nexport { AddTile }\n","import { type ClassValue, clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","export function isLightColor(hex: string): boolean {\n const normalized = hex.replace('#', '')\n const r = parseInt(normalized.slice(0, 2), 16)\n const g = parseInt(normalized.slice(2, 4), 16)\n const b = parseInt(normalized.slice(4, 6), 16)\n const luminance = (0.299 * r + 0.587 * g + 0.114 * b) / 255\n\n return luminance > 0.6\n}\n","const DEFAULT_CURRENCY = 'COP'\nconst DEFAULT_LOCALE = 'es-CO'\n\nexport function capitalize(value: null | string | undefined): string {\n if (!value) return ''\n const trimmed = value.trimStart()\n if (trimmed.length === 0) return value\n return trimmed.charAt(0).toLocaleUpperCase('es') + trimmed.slice(1)\n}\n\nexport function formatNumber(value: number, locale = DEFAULT_LOCALE): string {\n return new Intl.NumberFormat(locale, { style: 'decimal' }).format(value)\n}\n\nexport function formatPrice(value: number, locale = DEFAULT_LOCALE, currency = DEFAULT_CURRENCY): string {\n return new Intl.NumberFormat(locale, {\n currency,\n maximumFractionDigits: 0,\n style: 'currency'\n }).format(value)\n}\n","import { cn } from './cn'\n\nexport const inputBase = cn(\n 'flex w-full !h-[50px] rounded-[10px] px-3 gap-[10px] text-base font-normal justify-between items-center',\n 'border border-border bg-surface text-foreground',\n 'transition-all duration-200 ease-in-out',\n 'placeholder:text-icon-muted placeholder:text-sm placeholder:font-normal placeholder:leading-none',\n 'disabled:cursor-not-allowed disabled:bg-inactive disabled:text-inactive-text disabled:border-inactive disabled:placeholder:text-inactive-text'\n)\n\nexport const inputPlaceholder = cn('text-icon-muted text-sm font-normal leading-none')\n\nexport const inputDisabled = cn('cursor-not-allowed opacity-50')\n\nexport const inputCompact = cn(\n 'border-border bg-surface text-foreground focus:border-primary focus:ring-ring h-9 w-full rounded-lg border px-2.5 text-sm focus:ring-2 focus:outline-none'\n)\n\nexport const inputFocus = cn(\n 'focus:outline-none focus-visible:outline-none',\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:border-primary',\n 'data-[state=open]:ring-2 data-[state=open]:ring-ring data-[state=open]:border-primary'\n)\n","const TAG_EMOJI_RULES: { emoji: string; keywords: string[] }[] = [\n { emoji: '🌶️', keywords: ['picante', 'picoso', 'spicy'] },\n { emoji: '🥜', keywords: ['nuez', 'nueces', 'mani', 'cacahuate', 'frutos secos'] },\n { emoji: '🌱', keywords: ['vegano', 'vegetariano', 'vegan'] },\n { emoji: '🌾', keywords: ['sin gluten', 'gluten free'] },\n { emoji: '🥛', keywords: ['lacteos', 'leche', 'lactosa'] },\n { emoji: '🦐', keywords: ['marisco', 'camaron'] },\n { emoji: '🔥', keywords: ['popular', 'top ventas'] },\n { emoji: '🆕', keywords: ['nuevo', 'new'] },\n { emoji: '🍬', keywords: ['dulce'] },\n { emoji: '🧊', keywords: ['frio', 'helado'] }\n]\n\nexport function getTagEmoji(tag: string): null | string {\n const normalized = normalize(tag)\n const match = TAG_EMOJI_RULES.find((rule) => rule.keywords.some((keyword) => normalized.includes(keyword)))\n return match?.emoji ?? null\n}\n\nfunction normalize(text: string): string {\n return text\n .toLowerCase()\n .normalize('NFD')\n .replace(/\\p{Diacritic}/gu, '')\n}\n","import { ToastOptions, ToastType } from '../types/toast'\n\ntype ToastEmitter = ((type: ToastType, options: ToastOptions) => void) | null\n\nlet emitToast: ToastEmitter = null\n\nexport const toast = {\n error(options: string | ToastOptions) {\n emit('destructive', options)\n },\n info(options: string | ToastOptions) {\n emit('info', options)\n },\n success(options: string | ToastOptions) {\n emit('success', options)\n },\n wait(options: string | ToastOptions) {\n emit('wait', options)\n },\n warning(options: string | ToastOptions) {\n emit('warning', options)\n }\n}\n\nexport function registerToastEmitter(fn: ToastEmitter) {\n emitToast = fn\n}\n\nfunction emit(type: ToastType, options: string | ToastOptions) {\n if (!emitToast) return\n\n if (typeof options === 'string') {\n emitToast(type, { title: options })\n } else {\n emitToast(type, options)\n }\n}\n","export function isSafeUrl(url: string): boolean {\n try {\n const parsed = new URL(url, 'https://placeholder.invalid')\n return parsed.protocol === 'http:' || parsed.protocol === 'https:'\n } catch {\n return false\n }\n}\n","export const zPopover = 'z-50'\nexport const zDialogOverlay = 'z-60'\nexport const zDialogContent = 'z-70'\nexport const zPopoverAboveDialog = 'z-100'\nexport const zToast = 'z-4000'\n","import { CheckCircleIcon, InfoIcon, WarningCircleIcon, WarningIcon } from '@phosphor-icons/react'\nimport * as React from 'react'\n\nimport { cn } from '../utils'\n\ninterface AlertProps extends React.HTMLAttributes<HTMLDivElement> {\n variant?: AlertVariant\n}\n\ntype AlertVariant = 'destructive' | 'info' | 'success' | 'warning'\n\nconst variantStyles: Record<AlertVariant, { container: string; icon: string }> = {\n destructive: { container: 'bg-destructive-subtle text-destructive', icon: 'text-destructive' },\n info: { container: 'bg-info-subtle text-info', icon: 'text-info' },\n success: { container: 'bg-success-subtle text-success', icon: 'text-success' },\n warning: { container: 'bg-warning-subtle text-warning', icon: 'text-warning' }\n}\n\nconst variantIcons: Record<AlertVariant, React.ComponentType<{ className?: string }>> = {\n destructive: WarningCircleIcon,\n info: InfoIcon,\n success: CheckCircleIcon,\n warning: WarningIcon\n}\n\nexport const Alert = ({ children, className, variant = 'destructive', ...props }: AlertProps) => {\n const styles = variantStyles[variant]\n const Icon = variantIcons[variant]\n\n return (\n <div\n aria-live='polite'\n className={cn(\n 'flex items-center justify-center gap-2 rounded-[10px] px-4 py-3 text-sm',\n styles.container,\n className\n )}\n role='alert'\n {...props}\n >\n <Icon className={cn('h-5 w-5 shrink-0', styles.icon)} />\n <span>{children}</span>\n </div>\n )\n}\n","import type { ReactNode } from 'react'\n\nimport { cn } from '../utils'\n\ninterface AuthHeaderProps {\n children?: ReactNode\n desktopLogoSrc?: string\n logoAlt: string\n mobileClassName?: string\n mobileLogoSrc?: string\n}\n\nexport const AuthHeader = ({\n children,\n desktopLogoSrc = '/logo_color.svg',\n logoAlt,\n mobileClassName,\n mobileLogoSrc = '/logotipo_color.svg'\n}: AuthHeaderProps) => {\n return (\n <>\n <div className={cn('flex min-h-0 shrink flex-col lg:hidden', mobileClassName)}>\n <div className='flex justify-center py-2'>\n <img alt={logoAlt} className='h-11 md:h-12' src={mobileLogoSrc} />\n </div>\n {children}\n </div>\n\n <div className='absolute hidden p-10 lg:flex'>\n <img alt={logoAlt} className='h-12.5 w-12.5' src={desktopLogoSrc} />\n </div>\n </>\n )\n}\n","import * as React from 'react'\n\nimport { cn } from '../utils'\n\nexport interface BreadcrumbItem {\n label: string\n onClick?: () => void\n}\n\nexport interface BreadcrumbProps extends React.HTMLAttributes<HTMLDivElement> {\n items: BreadcrumbItem[]\n}\n\nconst Breadcrumb = React.forwardRef<HTMLDivElement, BreadcrumbProps>(({ className, items, ...props }, ref) => (\n <div className={cn('flex items-center gap-1 text-sm', className)} ref={ref} {...props}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1\n\n return (\n <span className='flex items-center gap-1' key={`${item.label}-${index}`}>\n {index > 0 && <span className='text-muted'>›</span>}\n {item.onClick && !isLast ? (\n <button\n className='text-muted hover:text-foreground transition-colors'\n onClick={item.onClick}\n type='button'\n >\n {item.label}\n </button>\n ) : (\n <span className={isLast ? 'text-foreground font-medium' : 'text-muted'}>{item.label}</span>\n )}\n </span>\n )\n })}\n </div>\n))\nBreadcrumb.displayName = 'Breadcrumb'\n\nexport { Breadcrumb }\n","import { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '../utils'\nimport { Spinner } from './spinner'\nimport { Tooltip } from './tooltip'\n\nconst buttonVariants = cva(\n 'w-full inline-flex items-center justify-center gap-[10px] whitespace-nowrap rounded-[12px] border border-transparent text-base font-semibold transition-all duration-300 ease-in-out focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:bg-inactive disabled:text-inactive-text disabled:border-transparent cursor-pointer',\n {\n defaultVariants: {\n hoverStyle: 'none',\n size: 'default',\n variant: 'primary'\n },\n variants: {\n hoverStyle: {\n highlight: `\n hover:bg-brand-subtle hover:border-primary hover:text-primary\n `,\n none: '',\n shine: `\n relative overflow-hidden\n hover:-translate-y-[1px] hover:shadow-lg\n before:content-[''] before:absolute before:top-0 before:left-[-100%]\n before:w-full before:h-full\n before:bg-[linear-gradient(90deg,transparent,rgba(255,255,255,0.15),transparent)]\n before:transition-all before:duration-300\n hover:before:left-[100%]\n `\n },\n size: {\n default: 'h-14 px-4',\n icon: 'h-12 w-12 p-0',\n lg: 'h-14 px-12',\n sm: 'h-9 px-3 text-sm',\n xs: 'h-9 px-3 rounded-[5px] text-xs font-normal'\n },\n variant: {\n destructive: 'bg-destructive text-inverse hover:bg-destructive/90',\n ghost: 'bg-transparent border border-border text-foreground hover:bg-hover',\n invisible: 'bg-transparent rounded-none',\n link: 'text-muted underline-offset-4 hover:underline text-sm font-normal disabled:bg-transparent',\n outline: 'bg-surface border border-primary text-primary hover:bg-brand-subtle',\n primary: 'bg-primary text-inverse hover:bg-primary-hover active:bg-primary-dark',\n subtle: 'bg-transparent hover:bg-hover disabled:bg-transparent',\n tertiary: 'bg-subtle border border-border text-foreground hover:bg-hover',\n underline: 'text-primary underline'\n }\n }\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {\n asChild?: boolean\n childrenClassName?: string\n hoverStyle?: 'highlight' | 'none' | 'shine'\n icon?: React.ReactNode\n iconLeft?: React.ReactNode\n iconRight?: React.ReactNode\n isLoading?: boolean\n sideTooltip?: 'bottom' | 'left' | 'right' | 'top'\n tooltip?: string\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n asChild = false,\n children,\n childrenClassName,\n className,\n disabled,\n hoverStyle,\n icon,\n iconLeft,\n iconRight,\n isLoading = false,\n sideTooltip,\n size,\n tooltip,\n variant,\n ...props\n },\n ref\n ) => {\n const Comp = asChild ? Slot : 'button'\n\n const buttonNode = (\n <Comp\n aria-busy={isLoading || undefined}\n className={cn(buttonVariants({ hoverStyle, size, variant }), isLoading && 'relative opacity-40', className)}\n disabled={disabled === true || isLoading}\n ref={ref}\n {...props}\n >\n {iconLeft}\n {icon}\n <span className={cn('flex w-full items-center justify-center gap-2', childrenClassName)}>{children}</span>\n {iconRight}\n {isLoading && (\n <div className='absolute inset-0 flex items-center justify-center bg-black/10 backdrop-blur-sm'>\n <Spinner size='sm' />\n </div>\n )}\n </Comp>\n )\n\n return tooltip ? (\n <Tooltip childrenClassName='flex items-center justify-center' message={tooltip} sideTooltip={sideTooltip}>\n {buttonNode}\n </Tooltip>\n ) : (\n buttonNode\n )\n }\n)\n\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n","import clsx from 'clsx'\n\nimport { useUiT } from '../lib/i18n'\n\nconst sizes = {\n lg: '70',\n md: '50',\n sm: '20',\n xl: '100',\n xs: '5'\n}\n\nconst variants = {\n light: 'var(--color-spinner-light)',\n primary: 'var(--color-spinner-primary)',\n secondary: 'var(--color-spinner-secondary)'\n}\n\nexport interface SpinnerProps {\n className?: string\n loadingLabel?: string\n size?: keyof typeof sizes\n variant?: keyof typeof variants\n}\n\nexport const Spinner = ({ className = '', loadingLabel, size = 'md', variant = 'primary' }: SpinnerProps) => {\n const t = useUiT()\n return (\n <>\n <svg\n fill='currentColor'\n height={sizes[size]}\n stroke={variants[variant]}\n viewBox='0 0 100 100'\n width={sizes[size]}\n xmlns='http://www.w3.org/2000/svg'\n >\n <g className={clsx('spinner_V8m1', className)}>\n <circle cx='50' cy='50' fill='none' opacity='0.25' r='35' stroke='currentColor' strokeWidth='10' />\n <circle\n cx='50'\n cy='50'\n fill='none'\n r='35'\n stroke='currentColor'\n strokeDasharray='164.93361431346415 56.97787143782138'\n strokeWidth='10'\n >\n <animateTransform\n attributeName='transform'\n dur='1s'\n keyTimes='0;1'\n repeatCount='indefinite'\n type='rotate'\n values='0 50 50;360 50 50'\n />\n </circle>\n </g>\n </svg>\n <span className='sr-only'>{loadingLabel ?? t('spinner.loading')}</span>\n </>\n )\n}\n","import i18n from 'i18next'\nimport { initReactI18next, useTranslation } from 'react-i18next'\n\nimport uiEs from '../locales/es/ui.json'\n\nexport const uiI18n = i18n.createInstance()\n\nvoid uiI18n.use(initReactI18next).init({\n defaultNS: 'ui',\n fallbackLng: 'es',\n interpolation: { escapeValue: false },\n lng: 'es',\n ns: ['ui'],\n resources: { es: { ui: uiEs } }\n})\n\nexport const setUiLanguage = (lng: string): Promise<unknown> => uiI18n.changeLanguage(lng)\n\nexport const useUiT = () => useTranslation('ui', { i18n: uiI18n }).t\n","{\n \"inputField\": {\n \"showPassword\": \"Mostrar contraseña\",\n \"hidePassword\": \"Ocultar contraseña\",\n \"clear\": \"Limpiar\"\n },\n \"dialog\": {\n \"close\": \"Cerrar\"\n },\n \"selectInput\": {\n \"placeholder\": \"Selecciona...\",\n \"loading\": \"Cargando...\",\n \"search\": \"Buscar...\",\n \"noResults\": \"Sin resultados.\",\n \"clear\": \"Limpiar selección\"\n },\n \"passwordChecklist\": {\n \"minLength\": \"Mínimo {{min}} caracteres\",\n \"hasUpperAndLower\": \"Una mayúscula y minúscula\",\n \"hasNumber\": \"Un número\",\n \"hasSpecialChar\": \"Un carácter especial\"\n },\n \"spinner\": {\n \"loading\": \"Cargando...\"\n }\n}\n","import * as TooltipPrimitive from '@radix-ui/react-tooltip'\nimport * as React from 'react'\n\nimport { cn, zPopover } from '../utils'\n\ninterface TooltipProps {\n children: React.ReactNode\n childrenClassName?: string\n className?: string\n message: string\n sideTooltip?: 'bottom' | 'left' | 'right' | 'top'\n}\n\nconst TooltipProvider = TooltipPrimitive.Provider\nconst TooltipRoot = TooltipPrimitive.Root\nconst TooltipTrigger = TooltipPrimitive.Trigger\n\nconst TooltipContent = React.forwardRef<\n React.ElementRef<typeof TooltipPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n className={cn(\n `bg-tooltip text-tooltip-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ${zPopover} overflow-hidden rounded-md px-3 py-1.5 text-sm font-semibold shadow-sm`,\n className\n )}\n ref={ref}\n sideOffset={sideOffset}\n {...props}\n />\n </TooltipPrimitive.Portal>\n))\n\nTooltipContent.displayName = TooltipPrimitive.Content.displayName\n\nexport const Tooltip = React.forwardRef<HTMLDivElement, TooltipProps>(\n ({ children, childrenClassName, className, message, sideTooltip = 'top' }, ref) => {\n return (\n <TooltipProvider>\n <TooltipRoot>\n <TooltipTrigger asChild>\n <div className={cn('', childrenClassName)} ref={ref}>\n {children}\n </div>\n </TooltipTrigger>\n <TooltipContent className={cn('', className)} side={sideTooltip}>\n <p>{message}</p>\n </TooltipContent>\n </TooltipRoot>\n </TooltipProvider>\n )\n }\n)\n\nTooltip.displayName = 'Tooltip'\n","import { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '../utils'\n\nconst chipVariants = cva(\n 'focus-visible:ring-ring inline-flex cursor-pointer items-center justify-center rounded-full px-3 py-1.5 text-sm font-medium whitespace-nowrap transition-colors focus-visible:ring-2 focus-visible:outline-none',\n {\n defaultVariants: {\n active: false\n },\n variants: {\n active: {\n false: 'bg-inactive text-inactive-text hover:bg-hover',\n true: 'bg-primary text-inverse'\n }\n }\n }\n)\n\nexport interface ChipProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof chipVariants> {}\n\nconst Chip = React.forwardRef<HTMLButtonElement, ChipProps>(({ active, className, ...props }, ref) => (\n <button className={cn(chipVariants({ active }), className)} ref={ref} type='button' {...props} />\n))\nChip.displayName = 'Chip'\n\nexport { Chip, chipVariants }\n","import { type DialogProps } from '@radix-ui/react-dialog'\nimport { MagnifyingGlassIcon } from '@phosphor-icons/react'\nimport { Command as CommandPrimitive } from 'cmdk'\nimport * as React from 'react'\n\nimport { cn } from '../utils'\nimport { Dialog, DialogContent } from './dialog'\n\nconst Command = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive\n className={cn('bg-surface text-foreground flex h-full w-full flex-col overflow-hidden rounded-md', className)}\n ref={ref}\n {...props}\n />\n))\nCommand.displayName = CommandPrimitive.displayName\n\ntype CommandDialogProps = DialogProps\n\nconst CommandDialog = ({ children, ...props }: CommandDialogProps) => {\n return (\n <Dialog {...props}>\n <DialogContent className='overflow-hidden p-0'>\n <Command className='**:[[cmdk-group-heading]]:text-muted [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:font-medium **:[[cmdk-group]]:px-2 **:[[cmdk-input]]:h-12 **:[[cmdk-item]]:px-2 **:[[cmdk-item]]:py-3'>\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nconst CommandInput = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(({ className, ...props }, ref) => (\n <div className='flex items-center border-b px-3' cmdk-input-wrapper=''>\n <MagnifyingGlassIcon className='mr-2 h-4 w-4 shrink-0 opacity-50' />\n <CommandPrimitive.Input\n className={cn(\n 'placeholder:text-placeholder flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n ref={ref}\n {...props}\n />\n </div>\n))\n\nCommandInput.displayName = CommandPrimitive.Input.displayName\n\nconst CommandList = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.List className={cn('max-h-75 overflow-x-hidden overflow-y-auto', className)} ref={ref} {...props} />\n))\n\nCommandList.displayName = CommandPrimitive.List.displayName\n\nconst CommandEmpty = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Empty>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>((props, ref) => <CommandPrimitive.Empty className='py-6 text-center text-sm' ref={ref} {...props} />)\n\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName\n\nconst CommandGroup = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Group\n className={cn(\n 'text-foreground **:[[cmdk-group-heading]]:text-muted overflow-hidden p-1 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium',\n className\n )}\n ref={ref}\n {...props}\n />\n))\n\nCommandGroup.displayName = CommandPrimitive.Group.displayName\n\nconst CommandSeparator = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Separator className={cn('bg-border -mx-1 h-px', className)} ref={ref} {...props} />\n))\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName\n\nconst CommandItem = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Item\n className={cn(\n 'relative flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50',\n className\n )}\n ref={ref}\n {...props}\n />\n))\n\nCommandItem.displayName = CommandPrimitive.Item.displayName\n\nconst CommandShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {\n return <span className={cn('text-muted ml-auto text-xs tracking-widest', className)} {...props} />\n}\nCommandShortcut.displayName = 'CommandShortcut'\n\nexport {\n Command,\n CommandDialog,\n CommandEmpty,\n CommandGroup,\n CommandInput,\n CommandItem,\n CommandList,\n CommandSeparator,\n CommandShortcut\n}\n","import { XIcon } from '@phosphor-icons/react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport * as React from 'react'\n\nimport { useUiT } from '../lib/i18n'\nimport { cn, zDialogContent, zDialogOverlay } from '../utils'\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay> & { isAbsolute?: boolean }\n>(({ className, isAbsolute = false, ...props }, ref) => (\n <DialogPrimitive.Overlay\n className={cn(\n `data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 bg-foreground/10 ${zDialogOverlay} backdrop-blur-xs`,\n isAbsolute ? 'absolute inset-0' : 'fixed inset-0',\n className\n )}\n ref={ref}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\ninterface DialogContentProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n closeLabel?: string\n container?: HTMLElement | null\n isAbsolute?: boolean\n isCloseIcon?: boolean\n overlayClassName?: string\n}\n\nconst DialogContent = React.forwardRef<React.ElementRef<typeof DialogPrimitive.Content>, DialogContentProps>(\n (\n { children, className, closeLabel, container, isAbsolute = false, isCloseIcon = false, overlayClassName, ...props },\n ref\n ) => {\n const t = useUiT()\n\n return (\n <DialogPortal container={container}>\n <DialogOverlay className={overlayClassName} isAbsolute={isAbsolute} />\n\n <DialogPrimitive.Content\n className={cn(\n `bg-surface data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] ${zDialogContent} grid w-[calc(100%-2rem)] max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 rounded-2xl p-6 shadow-lg duration-200 outline-none`,\n isAbsolute ? 'absolute top-[50%] left-[50%]' : 'fixed top-[50%] left-[50%]',\n className\n )}\n ref={ref}\n {...props}\n >\n {children}\n {isCloseIcon && (\n <DialogPrimitive.Close className='data-[state=open]:text-muted ring-offset-surface focus:ring-ring data-[state=open]:bg-hover hover:bg-hover absolute top-5 right-5 flex h-8 w-8 min-w-8 cursor-pointer items-center justify-center rounded-full bg-transparent opacity-70 transition-all hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-none disabled:pointer-events-none'>\n <XIcon className='text-body h-4 w-4' />\n <span className='sr-only'>{closeLabel ?? t('dialog.close')}</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n )\n }\n)\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-1.5 text-center sm:text-left', className)} {...props} />\n)\nDialogHeader.displayName = 'DialogHeader'\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col-reverse justify-center gap-2 rounded-2xl sm:flex-row', className)}\n {...props}\n />\n)\nDialogFooter.displayName = 'DialogFooter'\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n className={cn('text-lg leading-none font-semibold tracking-tight', className)}\n ref={ref}\n {...props}\n >\n <span>{props.children}</span>\n </DialogPrimitive.Title>\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description className={cn('text-muted text-sm', className)} ref={ref} {...props}>\n <span>{props.children}</span>\n </DialogPrimitive.Description>\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogFooter,\n DialogHeader,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger\n}\n","import { Slot } from '@radix-ui/react-slot'\nimport * as React from 'react'\nimport { Controller, ControllerProps, FieldPath, FieldValues, FormProvider, useFormContext } from 'react-hook-form'\n\nimport { cn } from '../utils'\n\nconst Form = FormProvider\n\ninterface FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> {\n name: TName\n}\n\nconst FormFieldContext = React.createContext<FormFieldContextValue | null>(null)\n\nconst FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n return (\n <FormFieldContext.Provider value={{ name: props.name }}>\n <Controller {...props} />\n </FormFieldContext.Provider>\n )\n}\n\nconst useFormField = () => {\n const fieldContext = React.useContext(FormFieldContext)\n const itemContext = React.useContext(FormItemContext)\n const { formState, getFieldState } = useFormContext()\n\n if (!fieldContext) {\n throw new Error('useFormField must be used within <FormField>')\n }\n\n if (!itemContext) {\n throw new Error('useFormField must be used within <FormItem>')\n }\n\n const fieldState = getFieldState(fieldContext.name, formState)\n\n const { id } = itemContext\n\n return {\n formDescriptionId: `${id}-form-item-description`,\n formItemId: `${id}-form-item`,\n formMessageId: `${id}-form-item-message`,\n id,\n name: fieldContext.name,\n ...fieldState\n }\n}\n\ninterface FormItemContextValue {\n id: string\n}\n\nconst FormItemContext = React.createContext<FormItemContextValue | null>(null)\n\nconst FormItem = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => {\n const id = React.useId()\n\n return (\n <FormItemContext.Provider value={{ id }}>\n <div className={cn('space-y-1', className)} ref={ref} {...props} />\n </FormItemContext.Provider>\n )\n }\n)\nFormItem.displayName = 'FormItem'\n\nconst FormControl = React.forwardRef<React.ElementRef<typeof Slot>, React.ComponentPropsWithoutRef<typeof Slot>>(\n ({ ...props }, ref) => {\n const { error, formDescriptionId, formItemId, formMessageId } = useFormField()\n\n return (\n <Slot\n aria-describedby={!error ? `${formDescriptionId}` : `${formDescriptionId} ${formMessageId}`}\n aria-invalid={!!error}\n id={formItemId}\n ref={ref}\n {...props}\n />\n )\n }\n)\nFormControl.displayName = 'FormControl'\n\nconst FormMessage = React.forwardRef<HTMLParagraphElement, React.HTMLAttributes<HTMLParagraphElement>>(\n ({ children, className, ...props }, ref) => {\n const { error, formMessageId } = useFormField()\n const body = error?.message ? String(error.message) : children\n\n if (!body) {\n return null\n }\n\n return (\n <p\n className={cn('text-destructive text-[0.8rem] font-medium', className)}\n id={formMessageId}\n ref={ref}\n {...props}\n >\n {body}\n </p>\n )\n }\n)\nFormMessage.displayName = 'FormMessage'\n\nexport { Form, FormControl, FormField, FormItem, FormMessage, useFormField }\n","import { useState } from 'react'\nimport { Control, FieldValues, Path } from 'react-hook-form'\nimport { EyeIcon, EyeSlashIcon, XIcon } from '@phosphor-icons/react'\n\nimport { useUiT } from '../../lib/i18n'\nimport { cn } from '../../utils'\nimport { FormField } from '../form'\nimport { Input } from '../input'\nimport { FormFieldShell } from './form-field-shell'\n\ninterface InputFieldProps<T extends FieldValues = FieldValues> {\n clearLabel?: string\n control: Control<T>\n disabled?: boolean\n hidePasswordLabel?: string\n inputClassName?: string\n isClearable?: boolean\n label?: string\n labelClassName?: string\n mainClassName?: string\n name: Path<T>\n onClear?: () => void\n placeholder?: string\n showPasswordLabel?: string\n type?: string\n visualRequired?: boolean\n}\n\nexport const InputField = <T extends FieldValues = FieldValues>({\n clearLabel,\n control,\n disabled,\n hidePasswordLabel,\n inputClassName,\n isClearable,\n label,\n labelClassName,\n mainClassName,\n name,\n onClear,\n placeholder,\n showPasswordLabel,\n type = 'text',\n visualRequired\n}: InputFieldProps<T>) => {\n const t = useUiT()\n const [isPasswordVisible, setIsPasswordVisible] = useState(false)\n\n const togglePasswordVisibility = () => {\n setIsPasswordVisible((prev) => !prev)\n }\n\n const isPassword = type === 'password'\n const inputType = isPassword ? (isPasswordVisible ? 'text' : 'password') : type\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field, fieldState }) => {\n const hasError = !!fieldState.error\n\n return (\n <FormFieldShell\n hasError={hasError}\n label={label}\n labelClassName={labelClassName}\n mainClassName={mainClassName}\n name={name}\n visualRequired={visualRequired}\n >\n <div className='relative'>\n <Input\n {...field}\n autoComplete={isPassword ? 'current-password' : undefined}\n className={cn(\n inputClassName,\n hasError && 'border-destructive',\n isPassword && 'pr-10 [&::-ms-reveal]:hidden'\n )}\n data-1p-ignore={isPassword || undefined}\n data-bwignore={isPassword || undefined}\n data-lpignore={isPassword || undefined}\n disabled={disabled}\n min={type === 'number' ? 0 : undefined}\n placeholder={placeholder}\n type={inputType}\n value={field.value ?? ''}\n />\n\n <div className='absolute inset-y-0 right-0 flex items-center space-x-2 pr-2'>\n {field.value && isClearable && (\n <button\n className='focus:outline-none'\n onClick={onClear}\n title={clearLabel ?? t('inputField.clear')}\n type='button'\n >\n <XIcon size={18} />\n </button>\n )}\n\n {type === 'password' && (\n <button\n className='focus:outline-none'\n onClick={togglePasswordVisibility}\n title={\n isPasswordVisible\n ? (hidePasswordLabel ?? t('inputField.hidePassword'))\n : (showPasswordLabel ?? t('inputField.showPassword'))\n }\n type='button'\n >\n {isPasswordVisible ? <EyeIcon size={18} /> : <EyeSlashIcon size={20} />}\n </button>\n )}\n </div>\n </div>\n </FormFieldShell>\n )\n }}\n />\n )\n}\n","import * as React from 'react'\n\nimport { cn, inputBase, inputFocus } from '../utils'\n\nexport type InputProps = React.InputHTMLAttributes<HTMLInputElement>\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(({ className, onKeyDown, type, ...props }, ref) => {\n return (\n <input\n className={cn(\n inputBase,\n inputFocus,\n 'file:border-0 file:bg-transparent file:text-base file:font-medium',\n className\n )}\n onKeyDown={(e: React.KeyboardEvent<HTMLInputElement>) => {\n onKeyDown?.(e)\n if (e.defaultPrevented) return\n\n const key = e.key\n const allowedKeys = ['Backspace', 'Tab', 'Enter', 'Escape', 'ArrowLeft', 'ArrowUp', 'ArrowRight', 'ArrowDown']\n if (allowedKeys.includes(key)) {\n return\n }\n if (!(key >= '0' && key <= '9') && type === 'number') {\n e.preventDefault()\n }\n }}\n ref={ref}\n type={type}\n {...props}\n />\n )\n})\nInput.displayName = 'Input'\n\nexport { Input }\n","import * as LabelPrimitive from '@radix-ui/react-label'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\n\nimport { cn } from '../utils'\n\nconst labelVariants = cva('text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70')\n\nconst Label = React.forwardRef<\n React.ElementRef<typeof LabelPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof LabelPrimitive.Root> & VariantProps<typeof labelVariants>\n>(({ className, ...props }, ref) => (\n <LabelPrimitive.Root className={cn(labelVariants(), className)} ref={ref} {...props} />\n))\nLabel.displayName = LabelPrimitive.Root.displayName\n\nexport { Label }\n","import { cn } from '../../utils'\nimport { Label } from '../label'\n\ninterface LabelFieldProps {\n label?: string\n labelClassName?: string\n name: string\n visualRequired?: boolean\n}\n\nexport const LabelField = ({ label, labelClassName, name, visualRequired }: LabelFieldProps) => {\n return (\n <Label\n className={cn('text-body mb-2 text-start text-sm leading-none font-normal tracking-normal', labelClassName)}\n htmlFor={name}\n >\n <span>{label}</span> {visualRequired && <span className='text-destructive'> *</span>}\n </Label>\n )\n}\n","import type { ReactNode } from 'react'\n\nimport { cn } from '../../utils'\nimport { FormControl, FormItem, FormMessage } from '../form'\nimport { LabelField } from './label-field'\n\ninterface FormFieldShellProps {\n children: ReactNode\n hasError?: boolean\n label?: string\n labelClassName?: string\n mainClassName?: string\n name: string\n visualRequired?: boolean\n}\n\nexport const FormFieldShell = ({\n children,\n hasError,\n label,\n labelClassName,\n mainClassName,\n name,\n visualRequired\n}: FormFieldShellProps) => (\n <FormItem className={cn('flex flex-col', mainClassName)}>\n <LabelField\n label={label}\n labelClassName={cn(labelClassName, hasError && 'text-destructive')}\n name={name}\n visualRequired={visualRequired}\n />\n <FormControl>{children}</FormControl>\n <FormMessage />\n </FormItem>\n)\n","import { AdvancedMarker, APIProvider, Map } from '@vis.gl/react-google-maps'\n\nimport { cn, inputBase, inputFocus, zPopover } from '../utils'\nimport { PICKER_MAP_ID, useGoogleMapPicker } from './use-google-map-picker'\n\nconst DEFAULT_CENTER = { lat: 4.711, lng: -74.0721 }\n\nexport interface ResolvedAddress {\n address: string\n city: null | string\n country: null | string\n countryName: null | string\n department: null | string\n lat: null | number\n lng: null | number\n}\n\nexport interface GoogleMapPickerProps {\n apiKey?: string\n centerOn?: google.maps.LatLngLiteral\n countryCode?: string\n disabled?: boolean\n hasError?: boolean\n initialPosition?: google.maps.LatLngLiteral\n locationQuery?: string\n locationZoom?: number\n mapId?: string\n onAddressResolved?: (resolved: ResolvedAddress) => void\n onChange: (address: string) => void\n onError?: (error: unknown) => void\n placeholder?: string\n value: string\n}\n\nconst MapPickerContent = (props: GoogleMapPickerProps) => {\n const { disabled, hasError, mapId, placeholder } = props\n const {\n handleBlur,\n handleInputChange,\n handleMapClick,\n handleMarkerDragEnd,\n handleSelect,\n inputValue,\n position,\n setShowDropdown,\n showDropdown,\n suggestions\n } = useGoogleMapPicker(props)\n\n return (\n <div className='flex flex-col gap-3'>\n <div className='relative'>\n <input\n className={cn(inputBase, inputFocus, hasError && 'border-destructive')}\n disabled={disabled}\n onBlur={handleBlur}\n onChange={handleInputChange}\n onFocus={() => suggestions.length > 0 && setShowDropdown(true)}\n placeholder={placeholder}\n type='text'\n value={inputValue}\n />\n\n {showDropdown && suggestions.length > 0 && (\n <ul className={cn('border-border bg-surface absolute mt-1 w-full overflow-hidden rounded-[10px] border shadow-md', zPopover)}>\n {suggestions.map((suggestion) => (\n <li key={suggestion.placePrediction?.placeId ?? suggestion.placePrediction?.text.text}>\n <button\n className='text-foreground hover:bg-hover w-full px-4 py-3 text-left text-sm transition-colors'\n onClick={() => void handleSelect(suggestion)}\n type='button'\n >\n {suggestion.placePrediction?.text.text ?? ''}\n </button>\n </li>\n ))}\n </ul>\n )}\n </div>\n\n <div className='border-border h-59 overflow-hidden rounded-[10px] border md:h-87.5'>\n <Map\n defaultCenter={DEFAULT_CENTER}\n defaultZoom={5}\n disableDefaultUI\n gestureHandling='cooperative'\n id={PICKER_MAP_ID}\n mapId={mapId ?? (import.meta.env.VITE_GOOGLE_MAPS_MAP_ID as string | undefined) ?? 'DEMO_MAP_ID'}\n onClick={handleMapClick}\n style={{ height: '100%', width: '100%' }}\n >\n {position && <AdvancedMarker draggable={!disabled} onDragEnd={handleMarkerDragEnd} position={position} />}\n </Map>\n </div>\n </div>\n )\n}\n\nexport const GoogleMapPicker = (props: GoogleMapPickerProps) => (\n <APIProvider\n apiKey={props.apiKey ?? (import.meta.env.VITE_GOOGLE_MAPS_API_KEY as string | undefined) ?? ''}\n language='es'\n region='CO'\n >\n <MapPickerContent {...props} />\n </APIProvider>\n)\n","import type { MapMouseEvent } from '@vis.gl/react-google-maps'\n\nimport { useMap, useMapsLibrary } from '@vis.gl/react-google-maps'\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react'\n\nimport type { GoogleMapPickerProps } from './google-map-picker'\n\nexport const PICKER_MAP_ID = 'komensal-restaurant-map'\nconst SELECTED_ZOOM = 15\nconst CITY_ZOOM = 12\nconst DEBOUNCE_MS = 300\n\ninterface RawComponent {\n long: null | string\n short: null | string\n types: string[]\n}\n\nconst parseComponents = (components: RawComponent[]) => {\n const find = (type: string) => components.find((c) => c.types.includes(type))\n const country = find('country')\n const department = find('administrative_area_level_1')\n const city = find('locality') ?? find('administrative_area_level_2')\n return {\n city: city?.long ?? null,\n country: country?.short ?? null,\n countryName: country?.long ?? null,\n department: department?.long ?? null\n }\n}\n\nexport function useGoogleMapPicker({\n centerOn,\n countryCode,\n disabled,\n initialPosition,\n locationQuery,\n locationZoom,\n onAddressResolved,\n onChange,\n onError,\n value\n}: GoogleMapPickerProps) {\n const placesLib = useMapsLibrary('places')\n const geocodingLib = useMapsLibrary('geocoding')\n const map = useMap(PICKER_MAP_ID)\n const onChangeRef = useRef(onChange)\n const onResolvedRef = useRef(onAddressResolved)\n const onErrorRef = useRef(onError)\n const geocoder = useMemo<google.maps.Geocoder | null>(\n () => (geocodingLib ? new geocodingLib.Geocoder() : null),\n [geocodingLib]\n )\n const debounceRef = useRef<null | ReturnType<typeof setTimeout>>(null)\n const blurTimeoutRef = useRef<null | ReturnType<typeof setTimeout>>(null)\n\n const [inputValue, setInputValue] = useState(value)\n const [suggestions, setSuggestions] = useState<google.maps.places.AutocompleteSuggestion[]>([])\n const [showDropdown, setShowDropdown] = useState(false)\n const [sessionToken, setSessionToken] = useState<google.maps.places.AutocompleteSessionToken | undefined>()\n const [position, setPosition] = useState<google.maps.LatLngLiteral | null>(initialPosition ?? null)\n\n useEffect(() => {\n onChangeRef.current = onChange\n onResolvedRef.current = onAddressResolved\n onErrorRef.current = onError\n })\n\n useEffect(\n () => () => {\n if (debounceRef.current) clearTimeout(debounceRef.current)\n if (blurTimeoutRef.current) clearTimeout(blurTimeoutRef.current)\n },\n []\n )\n\n useEffect(() => {\n setInputValue(value)\n }, [value])\n\n useEffect(() => {\n if (map && centerOn) {\n map.panTo(centerOn)\n map.setZoom(CITY_ZOOM)\n }\n }, [map, centerOn])\n\n useEffect(() => {\n if (map && position) {\n map.panTo(position)\n map.setZoom(SELECTED_ZOOM)\n }\n }, [map, position])\n\n useEffect(() => {\n if (!placesLib) return\n setSessionToken(new placesLib.AutocompleteSessionToken())\n }, [placesLib])\n\n useEffect(() => {\n if (!geocoder || !locationQuery || !map || position) return\n const g = geocoder\n const ctrl = { cancelled: false }\n void (async () => {\n try {\n const { results } = await g.geocode({ address: locationQuery })\n if (ctrl.cancelled || results.length === 0) return\n const loc = results[0].geometry.location\n map.panTo({ lat: loc.lat(), lng: loc.lng() })\n map.setZoom(locationZoom ?? CITY_ZOOM)\n } catch (error) {\n if (!ctrl.cancelled) {\n console.error('[GoogleMapPicker] geocode by query failed', error)\n onErrorRef.current?.(error)\n }\n }\n })()\n return () => {\n ctrl.cancelled = true\n }\n }, [geocoder, locationQuery, locationZoom, map, position])\n\n const fetchSuggestions = useCallback(\n async (input: string) => {\n if (!placesLib || input.length < 2) {\n setSuggestions([])\n return\n }\n try {\n const result = await placesLib.AutocompleteSuggestion.fetchAutocompleteSuggestions({\n includedRegionCodes: countryCode ? [countryCode.trim().toLowerCase()] : undefined,\n input,\n sessionToken\n })\n setSuggestions(result.suggestions)\n setShowDropdown(true)\n } catch (error) {\n console.error('[GoogleMapPicker] fetchAutocompleteSuggestions failed', error)\n onErrorRef.current?.(error)\n setSuggestions([])\n }\n },\n [placesLib, sessionToken, countryCode]\n )\n\n const reverseGeocode = useCallback(\n async (latLng: google.maps.LatLngLiteral) => {\n if (!geocoder) return\n try {\n const { results } = await geocoder.geocode({ location: latLng })\n if (results.length > 0) {\n const result = results[0]\n const address = result.formatted_address\n setInputValue(address)\n onChangeRef.current(address)\n const parts = parseComponents(\n result.address_components.map((c) => ({ long: c.long_name, short: c.short_name, types: c.types }))\n )\n onResolvedRef.current?.({ address, lat: latLng.lat, lng: latLng.lng, ...parts })\n }\n } catch (error) {\n console.error('[GoogleMapPicker] reverse geocode failed', error)\n onErrorRef.current?.(error)\n }\n },\n [geocoder]\n )\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const val = e.target.value\n setInputValue(val)\n onChangeRef.current(val)\n\n if (debounceRef.current) clearTimeout(debounceRef.current)\n debounceRef.current = setTimeout(() => void fetchSuggestions(val), DEBOUNCE_MS)\n }\n\n const handleSelect = async (suggestion: google.maps.places.AutocompleteSuggestion) => {\n const prediction = suggestion.placePrediction\n if (!prediction) return\n\n const place = prediction.toPlace()\n await place.fetchFields({ fields: ['formattedAddress', 'location', 'addressComponents'] })\n\n const address = place.formattedAddress ?? prediction.text.text\n setInputValue(address)\n onChangeRef.current(address)\n setSuggestions([])\n setShowDropdown(false)\n\n const lat = place.location?.lat() ?? null\n const lng = place.location?.lng() ?? null\n if (place.location) {\n setPosition({ lat: place.location.lat(), lng: place.location.lng() })\n }\n\n const parts = parseComponents(\n (place.addressComponents ?? []).map((c) => ({ long: c.longText, short: c.shortText, types: c.types }))\n )\n onResolvedRef.current?.({ address, lat, lng, ...parts })\n\n if (placesLib) setSessionToken(new placesLib.AutocompleteSessionToken())\n }\n\n const handleBlur = () => {\n if (blurTimeoutRef.current) clearTimeout(blurTimeoutRef.current)\n blurTimeoutRef.current = setTimeout(() => setShowDropdown(false), 150)\n }\n\n const handleMapClick = useCallback(\n (e: MapMouseEvent) => {\n if (disabled || !e.detail.latLng) return\n const latLng = e.detail.latLng\n setPosition(latLng)\n void reverseGeocode(latLng)\n },\n [disabled, reverseGeocode]\n )\n\n const handleMarkerDragEnd = useCallback(\n (e: google.maps.MapMouseEvent) => {\n const latLng = e.latLng\n if (!latLng) return\n const pos = { lat: latLng.lat(), lng: latLng.lng() }\n setPosition(pos)\n void reverseGeocode(pos)\n },\n [reverseGeocode]\n )\n\n return {\n handleBlur,\n handleInputChange,\n handleMapClick,\n handleMarkerDragEnd,\n handleSelect,\n inputValue,\n position,\n setShowDropdown,\n showDropdown,\n suggestions\n }\n}\n","import type { Control, FieldValues, Path } from 'react-hook-form'\n\nimport { FormField } from '../form'\nimport { GoogleMapPicker, type GoogleMapPickerProps } from '../google-map-picker'\nimport { FormFieldShell } from './form-field-shell'\n\ntype MapPickerFieldProps<T extends FieldValues> = Omit<GoogleMapPickerProps, 'hasError' | 'onChange' | 'value'> & {\n control: Control<T>\n label?: string\n labelClassName?: string\n mainClassName?: string\n name: Path<T>\n visualRequired?: boolean\n}\n\nexport const MapPickerField = <T extends FieldValues>({\n control,\n label,\n labelClassName,\n mainClassName,\n name,\n visualRequired,\n ...pickerProps\n}: MapPickerFieldProps<T>) => (\n <FormField\n control={control}\n name={name}\n render={({ field, fieldState }) => (\n <FormFieldShell\n hasError={!!fieldState.error}\n label={label}\n labelClassName={labelClassName}\n mainClassName={mainClassName}\n name={name}\n visualRequired={visualRequired}\n >\n <GoogleMapPicker\n {...pickerProps}\n hasError={!!fieldState.error}\n onChange={field.onChange}\n value={field.value ?? ''}\n />\n </FormFieldShell>\n )}\n />\n)\n","import { OTPInput, OTPInputContext } from 'input-otp'\nimport React from 'react'\n\nimport { cn } from '../utils'\n\nfunction InputOTP({\n className,\n containerClassName,\n ...props\n}: React.ComponentProps<typeof OTPInput> & {\n containerClassName?: string\n}) {\n return (\n <OTPInput\n className={cn('disabled:cursor-not-allowed', className)}\n containerClassName={cn('flex items-center gap-2 has-disabled:opacity-50', containerClassName)}\n data-slot='input-otp'\n {...props}\n />\n )\n}\n\nfunction InputOTPGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return <div className={cn('flex items-center gap-2', className)} data-slot='input-otp-group' {...props} />\n}\n\nfunction InputOTPSlot({\n className,\n index,\n ...props\n}: React.ComponentProps<'div'> & {\n index: number\n}) {\n const inputOTPContext = React.useContext(OTPInputContext) as {\n slots: { char: string | null; hasFakeCaret: boolean; isActive: boolean }[]\n }\n const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index] ?? {}\n\n return (\n <div\n className={cn(\n 'border-border text-foreground relative flex h-14 w-12 items-center justify-center rounded-[10px] border text-xl font-medium transition-all outline-none',\n char ? 'bg-brand-subtle' : 'bg-transparent',\n 'data-[active=true]:border-primary data-[active=true]:ring-ring data-[active=true]:z-10 data-[active=true]:ring-2',\n 'aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/40',\n className\n )}\n data-active={isActive}\n data-slot='input-otp-slot'\n {...props}\n >\n {char}\n {hasFakeCaret && (\n <div className='pointer-events-none absolute inset-0 flex items-center justify-center'>\n <div className='animate-caret-blink bg-foreground h-6 w-px duration-1000' />\n </div>\n )}\n </div>\n )\n}\n\nexport { InputOTP, InputOTPGroup, InputOTPSlot }\n","import React from 'react'\nimport { Control, FieldPath, FieldValues } from 'react-hook-form'\n\nimport { cn } from '../../utils'\nimport { FormControl, FormField, FormItem, FormMessage } from '../form'\nimport { InputOTP, InputOTPGroup, InputOTPSlot } from '../otp-input'\nimport { LabelField } from './label-field'\n\ninterface OtpInputFormFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n> {\n autoFocus?: boolean\n className?: string\n containerClassName?: string\n control: Control<TFieldValues>\n disabled?: boolean\n label?: string\n labelClassName?: string\n name: TName\n otpLength?: number\n visualRequired?: boolean\n}\n\nexport function OTPField<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>\n>({\n autoFocus,\n className,\n containerClassName,\n control,\n disabled,\n label,\n labelClassName,\n name,\n otpLength = 6,\n visualRequired\n}: OtpInputFormFieldProps<TFieldValues, TName>) {\n return (\n <FormField\n control={control}\n name={name}\n render={({ field, fieldState }) => (\n <FormItem className={cn('flex flex-col', className)}>\n {label ? (\n <LabelField\n label={label}\n labelClassName={cn(labelClassName, fieldState.invalid && 'text-destructive')}\n name={name}\n visualRequired={visualRequired}\n />\n ) : null}\n <FormControl>\n <InputOTP\n aria-invalid={fieldState.invalid || undefined}\n autoComplete='one-time-code'\n autoFocus={autoFocus}\n containerClassName={cn('justify-center', containerClassName)}\n disabled={disabled}\n id={name}\n inputMode='numeric'\n maxLength={otpLength}\n onChange={(val: string) => field.onChange(val)}\n onPaste={(e: React.ClipboardEvent<HTMLInputElement>) => field.onChange(e.clipboardData.getData('text'))}\n pattern='[0-9]*'\n value={field.value ?? ''}\n >\n <InputOTPGroup>\n {Array.from({ length: otpLength }).map((_, i) => (\n <InputOTPSlot aria-invalid={fieldState.invalid || undefined} index={i} key={i} />\n ))}\n </InputOTPGroup>\n </InputOTP>\n </FormControl>\n <FormMessage />\n </FormItem>\n )}\n />\n )\n}\n","import { CaretDownIcon, CaretUpIcon, ClockIcon, XIcon } from '@phosphor-icons/react'\nimport { cloneElement, JSX, useCallback, useEffect, useId, useMemo, useState } from 'react'\nimport { FieldError, Noop } from 'react-hook-form'\n\nimport { useUiT } from '../lib/i18n'\nimport { cn, inputBase, inputDisabled, inputFocus, inputPlaceholder, zPopoverAboveDialog } from '../utils'\nimport { Button } from './button'\nimport { Command, CommandEmpty, CommandGroup, CommandItem, CommandList } from './command'\nimport { Input } from './input'\nimport { Popover, PopoverContent, PopoverTrigger } from './popover'\nimport { Spinner } from './spinner'\nimport { TimeColumns } from './time-columns'\nimport { usePopoverWidth, useSelectFilter } from './use-select-input'\n\ninterface SelectInputProps<Label extends string, Value extends string> {\n ableDeleteOption?: boolean\n className?: string\n disabled?: boolean\n error?: FieldError\n items?: null | Record<Label | Value, number | string>[]\n labelKey?: string\n leftIcon?: JSX.Element\n loading?: boolean\n loadingLabel?: string\n noResultsLabel?: string\n onBlur?: Noop\n onChange?: (...event: unknown[]) => void\n onValueChangeCallBack?: (item: { label: string; value: string }) => void\n placeholder?: string\n placeholderClassName?: string\n search?: boolean\n searchPlaceholder?: string\n timeField?: boolean\n value?: string\n valueKey?: string\n}\n\nexport const SelectInput = <Label extends string, Value extends string>(props: SelectInputProps<Label, Value>) => {\n const t = useUiT()\n const {\n ableDeleteOption,\n className,\n disabled = false,\n error,\n items,\n labelKey = 'label',\n leftIcon,\n loading = false,\n loadingLabel,\n noResultsLabel,\n onBlur,\n onChange,\n onValueChangeCallBack = () => undefined,\n placeholder,\n placeholderClassName = '',\n search = false,\n searchPlaceholder,\n timeField = false,\n value = '',\n valueKey = 'value'\n } = props\n\n const resolvedPlaceholder = placeholder ?? t('selectInput.placeholder')\n const listboxId = useId()\n\n const [open, setOpen] = useState<boolean>(false)\n const [valueItem, setValueItem] = useState(value)\n\n const { ref: divRef, width } = usePopoverWidth<HTMLButtonElement>()\n const { filteredOptions, normalizedItems, query, setQuery } = useSelectFilter<Label, Value>(\n items,\n labelKey,\n valueKey\n )\n\n const onValueChange = useCallback(\n (val: string) => {\n if (!normalizedItems.length) return\n const item = normalizedItems.find((i) => i[valueKey as Value] === val)\n if (item) {\n onValueChangeCallBack({\n label: item[labelKey as Label],\n value: item[valueKey as Value]\n })\n setValueItem(val)\n }\n },\n [normalizedItems, labelKey, valueKey, onValueChangeCallBack]\n )\n\n const timeHours = useMemo(\n () =>\n Array.from(new Set(normalizedItems.map((i) => i[valueKey as Value].split(':')[0]))).sort((a, b) =>\n a.localeCompare(b)\n ),\n [normalizedItems, valueKey]\n )\n const timeMinutes = useMemo(\n () =>\n Array.from(new Set(normalizedItems.map((i) => i[valueKey as Value].split(':')[1]))).sort((a, b) =>\n a.localeCompare(b)\n ),\n [normalizedItems, valueKey]\n )\n\n const handleSelectHour = (hour: string) => {\n const minute = valueItem.split(':')[1] || timeMinutes[0]\n const newValue = `${hour}:${minute}`\n onChange?.(newValue)\n onValueChange(newValue)\n }\n\n const handleSelectMinute = (minute: string) => {\n const hour = valueItem.split(':')[0] || timeHours[0]\n const newValue = `${hour}:${minute}`\n onChange?.(newValue)\n onValueChange(newValue)\n setOpen(false)\n }\n\n const buttonClassName = useMemo(\n () =>\n cn(\n inputBase,\n inputFocus,\n 'hover:bg-surface',\n disabled && inputDisabled,\n error && 'border-destructive',\n className\n ),\n [disabled, error, className]\n )\n\n useEffect(() => {\n setValueItem(value)\n }, [value])\n\n return (\n <div className='flex flex-col gap-1'>\n <div className='relative flex flex-col justify-center'>\n <Popover onOpenChange={setOpen} open={open}>\n <PopoverTrigger asChild>\n <Button\n aria-controls={listboxId}\n aria-expanded={open}\n aria-haspopup='listbox'\n className={buttonClassName}\n disabled={disabled}\n isLoading={loading}\n onBlur={onBlur}\n ref={divRef}\n role='combobox'\n variant='primary'\n >\n {loading ? (\n <>\n {loadingLabel ?? t('selectInput.loading')} <Spinner />\n </>\n ) : (\n <div className='relative flex h-5 w-full items-center'>\n {timeField ? (\n <div className='flex w-full items-center justify-center gap-5 truncate'>\n {valueItem ? (\n filteredOptions.find((i) => i[valueKey as Value] === valueItem)?.[labelKey as Label]\n ) : (\n <span className={cn(inputPlaceholder, placeholderClassName)}>{resolvedPlaceholder}</span>\n )}\n <ClockIcon className='h-4 w-4 shrink-0 opacity-50' />\n </div>\n ) : (\n <>\n <div className='flex w-full max-w-[90%] items-center truncate'>\n {leftIcon && (\n <span className='mr-2 shrink-0'>{cloneElement(leftIcon, { size: 20, strokeWidth: 1 })}</span>\n )}\n {valueItem ? (\n filteredOptions.find((i) => i[valueKey as Value] === valueItem)?.[labelKey as Label]\n ) : (\n <span className={cn(inputPlaceholder, placeholderClassName)}>{resolvedPlaceholder}</span>\n )}\n </div>\n <div className='absolute top-0.5 right-0 flex gap-2'>\n {ableDeleteOption && <div aria-hidden className='h-4 w-4 shrink-0' />}\n {!open ? (\n <CaretDownIcon className='ml-2 h-4 w-4 shrink-0 opacity-50' />\n ) : (\n <CaretUpIcon className='ml-2 h-4 w-4 shrink-0 opacity-50' />\n )}\n </div>\n </>\n )}\n </div>\n )}\n </Button>\n </PopoverTrigger>\n <PopoverContent\n className={cn('bg-surface border-border rounded-sm p-1', zPopoverAboveDialog)}\n id={listboxId}\n onOpenAutoFocus={(e) => e.preventDefault()}\n style={\n timeField\n ? { maxWidth: 'auto', width: '180px' }\n : { maxWidth: 'auto', minWidth: `${width}px`, width: `${width}px` }\n }\n >\n {timeField ? (\n <TimeColumns\n hours={timeHours}\n minutes={timeMinutes}\n onSelectHour={handleSelectHour}\n onSelectMinute={handleSelectMinute}\n value={valueItem}\n />\n ) : (\n <Command className='flex w-full flex-col gap-2'>\n {search && (\n <Input\n className='mb-1 rounded-sm'\n onChange={(e) => setQuery(e.target.value)}\n placeholder={searchPlaceholder ?? t('selectInput.search')}\n value={query}\n />\n )}\n <CommandEmpty className='text-center'>{noResultsLabel ?? t('selectInput.noResults')}</CommandEmpty>\n <CommandList>\n <CommandGroup className='p-0'>\n {filteredOptions.map((item) => {\n const labelValue = item[labelKey as Label] as string\n const valueValue = item[valueKey as Value] as string\n\n return (\n <CommandItem\n className={cn(\n 'hover:bg-hover mt-0.5 mb-0.5 flex cursor-pointer items-center gap-2 rounded-sm py-2 pl-3',\n valueValue === value && 'bg-inactive'\n )}\n key={valueValue}\n onSelect={(currentValue: string) => {\n onChange?.(currentValue)\n onValueChange(currentValue)\n setOpen(false)\n setTimeout(() => setQuery(''), 100)\n }}\n value={valueValue}\n >\n {labelValue.trim()}\n </CommandItem>\n )\n })}\n </CommandGroup>\n </CommandList>\n </Command>\n )}\n </PopoverContent>\n </Popover>\n {ableDeleteOption && !loading && !timeField && (\n <button\n aria-label={t('selectInput.clear')}\n className='absolute top-1/2 right-9 z-10 flex h-4 w-4 -translate-y-1/2 items-center justify-center'\n onClick={() => {\n onChange?.('')\n onValueChange('')\n setValueItem('')\n setQuery('')\n setOpen(false)\n }}\n type='button'\n >\n <XIcon className='h-4 w-4 shrink-0 opacity-50' />\n </button>\n )}\n </div>\n </div>\n )\n}\n","import * as PopoverPrimitive from '@radix-ui/react-popover'\nimport * as React from 'react'\n\nimport { cn, zPopover } from '../utils'\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ align = 'center', className, sideOffset = 4, ...props }, ref) => (\n <PopoverPrimitive.Portal>\n <PopoverPrimitive.Content\n align={align}\n className={cn(\n `text-foreground bg-surface data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ${zPopover} w-72 rounded-md border p-4 shadow-md outline-none`,\n className\n )}\n ref={ref}\n sideOffset={sideOffset}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverContent, PopoverTrigger }\n","import * as React from 'react'\n\nimport { cn } from '../utils'\n\ninterface TimeColumnsProps {\n hours: string[]\n minutes: string[]\n onSelectHour: (hour: string) => void\n onSelectMinute: (minute: string) => void\n value: string\n}\n\nexport const TimeColumns = ({ hours, minutes, onSelectHour, onSelectMinute, value }: TimeColumnsProps) => {\n const [selectedHour, selectedMinute] = value ? value.split(':') : ['', '']\n const hourListRef = React.useRef<HTMLDivElement>(null)\n const minuteListRef = React.useRef<HTMLDivElement>(null)\n\n React.useEffect(() => {\n hourListRef.current?.querySelector('[data-selected=\"true\"]')?.scrollIntoView({ block: 'center' })\n minuteListRef.current?.querySelector('[data-selected=\"true\"]')?.scrollIntoView({ block: 'center' })\n }, [])\n\n return (\n <div className='divide-border flex divide-x'>\n <div className='max-h-60 flex-1 overflow-y-auto' ref={hourListRef}>\n {hours.map((hour) => {\n const isSelected = hour === selectedHour\n return (\n <button\n className={cn(\n 'hover:bg-hover flex w-full cursor-pointer items-center justify-center rounded-sm px-2 py-1.5 text-sm',\n isSelected && 'bg-inactive font-medium'\n )}\n data-selected={isSelected}\n key={hour}\n onClick={() => onSelectHour(hour)}\n type='button'\n >\n {formatHour12(hour)}\n </button>\n )\n })}\n </div>\n <div className='max-h-60 flex-1 overflow-y-auto' ref={minuteListRef}>\n {minutes.map((minute) => {\n const isSelected = minute === selectedMinute\n return (\n <button\n className={cn(\n 'hover:bg-hover w-full cursor-pointer rounded-sm px-2 py-1.5 text-center text-sm',\n isSelected && 'bg-inactive font-medium'\n )}\n data-selected={isSelected}\n key={minute}\n onClick={() => onSelectMinute(minute)}\n type='button'\n >\n {minute}\n </button>\n )\n })}\n </div>\n </div>\n )\n}\n\nfunction formatHour12(hour: string): string {\n const hourNum = Number(hour)\n const period = hourNum >= 12 ? 'PM' : 'AM'\n const hour12 = hourNum % 12 === 0 ? 12 : hourNum % 12\n return `${hour12} ${period}`\n}\n","import { useEffect, useMemo, useRef, useState } from 'react'\n\nconst normalizeString = (str: string): string => str.normalize('NFD').replace(/[̀-ͯ]/g, '').toLowerCase()\n\nexport function useSelectFilter<Label extends string, Value extends string>(\n items: null | Record<Label | Value, number | string>[] | undefined,\n labelKey: string,\n valueKey: string\n) {\n const [query, setQuery] = useState('')\n\n const normalizedItems = useMemo(() => {\n if (!items) return [] as Record<Label | Value, string>[]\n return items.map((it) => ({\n ...it,\n [labelKey]: String(it[labelKey as Label]),\n [valueKey]: String(it[valueKey as Value])\n })) as Record<Label | Value, string>[]\n }, [items, labelKey, valueKey])\n\n const filteredOptions = useMemo(() => {\n if (!query) return normalizedItems\n return normalizedItems.filter((el) =>\n normalizeString(el[labelKey as Label] as string).includes(normalizeString(query))\n )\n }, [normalizedItems, labelKey, query])\n\n return { filteredOptions, normalizedItems, query, setQuery }\n}\n\nexport function usePopoverWidth<T extends HTMLElement>() {\n const ref = useRef<T>(null)\n const [width, setWidth] = useState(0)\n\n useEffect(() => {\n const updateWidth = () => {\n if (ref.current) setWidth(ref.current.getBoundingClientRect().width)\n }\n updateWidth()\n window.addEventListener('resize', updateWidth)\n return () => window.removeEventListener('resize', updateWidth)\n }, [])\n\n return { ref, width }\n}\n","import { Control, FieldValues, Path } from 'react-hook-form'\n\nimport { FormField } from '../form'\nimport { SelectInput } from '../select-input'\nimport { FormFieldShell } from './form-field-shell'\n\nexport interface Options {\n label: string\n value: number | string\n}\n\ninterface SelectFieldProps<T extends FieldValues = FieldValues> {\n ableDeleteOption?: boolean\n className?: string\n control: Control<T>\n disabled?: boolean\n label?: string\n labelClassName?: string\n mainClassName?: string\n name: Path<T>\n onChange?: (...event: unknown[]) => void\n options: Options[] | undefined\n placeholder?: string\n search?: boolean\n visualRequired?: boolean\n}\n\nexport const SelectField = <T extends FieldValues = FieldValues>({\n ableDeleteOption,\n className,\n control,\n disabled,\n label,\n labelClassName,\n mainClassName,\n name,\n onChange,\n options,\n placeholder,\n search,\n visualRequired\n}: SelectFieldProps<T>) => {\n return (\n <FormField\n control={control}\n name={name}\n render={({ field, fieldState }) => {\n const hasError = !!fieldState.error\n\n return (\n <FormFieldShell\n hasError={hasError}\n label={label}\n labelClassName={labelClassName}\n mainClassName={mainClassName}\n name={name}\n visualRequired={visualRequired}\n >\n <SelectInput\n ableDeleteOption={ableDeleteOption}\n className={className}\n disabled={disabled}\n error={fieldState.error}\n items={options}\n onChange={(...args) => {\n field.onChange(...args)\n onChange?.(...args)\n }}\n placeholder={placeholder}\n search={search}\n value={typeof field.value === 'number' ? `${field.value}` : field.value}\n />\n </FormFieldShell>\n )\n }}\n />\n )\n}\n","import { CheckCircleIcon, XCircleIcon } from '@phosphor-icons/react'\n\nimport { PasswordRule } from '../types/password'\nimport { cn } from '../utils'\n\ninterface PasswordChecklistProps {\n className?: string\n rules: PasswordRule[]\n value: string\n}\n\nexport const PasswordChecklist = ({ className, rules, value }: PasswordChecklistProps) => {\n if (rules.length === 0) return null\n\n return (\n <ul className={cn('flex flex-col gap-1', className)}>\n {rules.map((rule) => {\n const isMet = rule.test(value)\n const Icon = isMet ? CheckCircleIcon : XCircleIcon\n\n return (\n <li\n className={cn(\n 'flex items-center gap-2 text-xs transition-colors',\n isMet ? 'text-success' : 'text-inactive-text'\n )}\n key={rule.key}\n >\n <Icon aria-hidden='true' className='h-4 w-4 shrink-0' />\n <span>{rule.label}</span>\n </li>\n )\n })}\n </ul>\n )\n}\n","import * as React from 'react'\n\nimport { cn } from '../utils'\n\nexport type SkeletonProps = React.HTMLAttributes<HTMLDivElement>\n\nconst Skeleton = React.forwardRef<HTMLDivElement, SkeletonProps>(({ className, ...props }, ref) => (\n <div className={cn('bg-inactive animate-pulse rounded-md', className)} ref={ref} {...props} />\n))\nSkeleton.displayName = 'Skeleton'\n\nexport { Skeleton }\n","import type { ReactNode } from 'react'\n\nimport { cn } from '../utils'\n\ninterface StepHeaderProps {\n subtitle?: ReactNode\n subtitleClassName?: string\n title: string\n}\n\nexport const StepHeader = ({ subtitle, subtitleClassName, title }: StepHeaderProps) => (\n <div className='flex flex-col gap-1'>\n <h1 className='text-title text-2xl font-bold'>{title}</h1>\n {subtitle !== undefined && <p className={cn('text-subtitle text-sm', subtitleClassName)}>{subtitle}</p>}\n </div>\n)\n","import { CheckIcon } from '@phosphor-icons/react'\n\nimport { cn } from '../utils'\n\nexport interface StepperStep {\n label: string\n}\n\ninterface StepperProps {\n activeIndex: number\n className?: string\n intermediate?: boolean\n steps: StepperStep[]\n}\n\nexport const Stepper = ({ activeIndex, className, intermediate = false, steps }: StepperProps) => {\n return (\n <div className={cn('flex w-full items-start', className)}>\n {steps.map((step, index) => {\n const isCompleted = intermediate ? index <= activeIndex : index < activeIndex\n const isActive = !intermediate && index === activeIndex\n\n return (\n <div className='flex flex-1 flex-col items-center' key={step.label}>\n <div className='flex w-full items-center'>\n <div\n className={cn(\n 'h-0.75 flex-1 self-center',\n isCompleted || isActive ? 'bg-primary' : 'bg-inactive',\n index === 0 && 'rounded-l-full'\n )}\n />\n <div\n aria-current={isActive ? 'step' : undefined}\n className={cn(\n 'flex h-5.5 w-5.5 shrink-0 items-center justify-center rounded-full border text-xs font-semibold transition-colors md:h-6.5 md:w-6.5',\n isCompleted && 'bg-primary border-primary text-inverse',\n isActive && 'bg-primary border-primary text-inverse',\n !isCompleted && !isActive && 'bg-inactive border-inactive text-surface'\n )}\n >\n {isCompleted ? <CheckIcon className='h-4 w-4' /> : index + 1}\n </div>\n <div\n className={cn(\n 'relative h-0.75 flex-1 self-center',\n isCompleted ? 'bg-primary' : 'bg-inactive',\n index === steps.length - 1 && 'rounded-r-full'\n )}\n >\n {index === 0 && (\n <div\n className={cn(\n 'absolute top-1/2 right-0 h-2.25 w-2.25 translate-x-1/2 -translate-y-1/2 rounded-full transition-colors',\n isCompleted ? 'bg-primary' : 'bg-inactive'\n )}\n />\n )}\n </div>\n </div>\n <span className={cn('mt-1 text-xs font-normal', isCompleted || isActive ? 'text-primary' : 'text-muted')}>\n {step.label}\n </span>\n </div>\n )\n })}\n </div>\n )\n}\n","import * as SwitchPrimitive from '@radix-ui/react-switch'\nimport * as React from 'react'\n\nimport { cn } from '../utils'\n\nexport interface SwitchProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'checked' | 'defaultChecked'> {\n checked?: boolean\n defaultChecked?: boolean\n onCheckedChange?: (checked: boolean) => void\n required?: boolean\n}\n\nconst Switch = React.forwardRef<HTMLButtonElement, SwitchProps>(({ className, ...props }, ref) => (\n <SwitchPrimitive.Root\n className={cn(\n 'border-border focus-visible:ring-ring relative inline-flex h-[26px] w-[50px] shrink-0 cursor-pointer items-center rounded-full border transition-colors focus-visible:ring-2 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-success data-[state=unchecked]:bg-inactive',\n className\n )}\n ref={ref}\n {...props}\n >\n <SwitchPrimitive.Thumb className='bg-surface pointer-events-none absolute top-[3px] left-[3px] block h-[18px] w-[18px] rounded-full shadow-lg transition-transform data-[state=checked]:translate-x-6' />\n </SwitchPrimitive.Root>\n))\nSwitch.displayName = SwitchPrimitive.Root.displayName\n\nexport { Switch }\n","import { CheckIcon, FileLockIcon, InfoIcon, WarningIcon, XIcon } from '@phosphor-icons/react'\nimport { useEffect, useRef, useState } from 'react'\n\nimport { ToastType } from '../../types/toast'\nimport { cn } from '../../utils'\n\ninterface ToastProps {\n duration?: number\n id: string\n onClose: (id: string) => void\n subtitle?: string\n title: string\n type: ToastType\n}\n\nconst EXIT_ANIMATION_MS = 200\n\nconst typeIcons: Record<ToastType, React.ComponentType<{ className?: string }>> = {\n destructive: XIcon,\n info: InfoIcon,\n success: CheckIcon,\n wait: FileLockIcon,\n warning: WarningIcon\n}\n\nconst typeStyles: Record<ToastType, { border: string; icon: string; iconBorder: string }> = {\n destructive: { border: 'border-destructive', icon: 'text-destructive', iconBorder: 'border-destructive' },\n info: { border: 'border-info', icon: 'text-info', iconBorder: 'border-info' },\n success: { border: 'border-success', icon: 'text-success', iconBorder: 'border-success' },\n wait: { border: 'border-wait', icon: 'text-wait', iconBorder: 'border-wait' },\n warning: { border: 'border-warning', icon: 'text-warning', iconBorder: 'border-warning' }\n}\n\nexport function Toast({ duration = 2500, id, onClose, subtitle, title, type }: ToastProps) {\n const [leaving, setLeaving] = useState(false)\n const startedAtRef = useRef<number>(Date.now())\n const timeoutRef = useRef<null | ReturnType<typeof setTimeout>>(null)\n const exitRef = useRef<null | ReturnType<typeof setTimeout>>(null)\n\n const Icon = typeIcons[type]\n const styles = typeStyles[type]\n\n useEffect(() => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n if (exitRef.current) clearTimeout(exitRef.current)\n\n const elapsed = Date.now() - startedAtRef.current\n const remaining = Math.max(0, duration - elapsed)\n\n timeoutRef.current = setTimeout(() => {\n setLeaving(true)\n exitRef.current = setTimeout(() => onClose(id), EXIT_ANIMATION_MS)\n }, remaining)\n\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current)\n if (exitRef.current) clearTimeout(exitRef.current)\n }\n }, [id, duration, onClose])\n\n return (\n <div\n aria-live='polite'\n className={cn(\n 'relative',\n leaving ? 'absolute top-0 right-0 left-0' : '',\n 'flex w-108.5 max-w-[calc(100vw-2rem)] items-center justify-between',\n 'min-h-16',\n 'bg-surface rounded-[10px] border-2',\n 'px-5 py-4.5',\n 'shadow-[0_4px_20px_rgba(0,0,0,0.05)]',\n 'transition-all duration-200 ease-out',\n styles.border,\n leaving ? 'translate-y-2 opacity-0' : 'translate-y-0 opacity-100'\n )}\n role='status'\n >\n <div className='min-w-0 pr-4'>\n <h4 className={cn('text-[16px] leading-normal font-semibold', 'text-foreground', 'line-clamp-2')}>{title}</h4>\n </div>\n\n {subtitle ? (\n <div className='shrink-0 pr-4 text-left'>\n <div className={cn('max-w-28 text-[14px] leading-[19.5px] font-normal', 'text-body')}>{subtitle}</div>\n </div>\n ) : null}\n\n <div\n className={cn('shrink-0', 'flex h-8 w-8 min-w-8 items-center justify-center rounded-full border-2', styles.iconBorder)}\n >\n <Icon className={cn('h-5 w-5', styles.icon)} />\n </div>\n </div>\n )\n}\n","import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\n\nimport { ToastOptions, ToastPosition, ToastType } from '../../types/toast'\nimport { registerToastEmitter } from '../../utils/toast-emitter'\nimport { zToast } from '../../utils/z-index'\nimport { Toast } from './toast'\n\ninterface ToastItem extends ToastOptions {\n id: string\n type: ToastType\n}\n\nexport function ToastProvider() {\n const [toasts, setToasts] = useState<ToastItem[]>([])\n const itemRefs = useRef(new Map<string, HTMLDivElement>())\n const prevRects = useRef(new Map<string, DOMRect>())\n\n const showToast = useCallback((type: ToastType, options: ToastOptions) => {\n setToasts((prev) => [\n ...prev,\n {\n duration: 2500,\n id: crypto.randomUUID(),\n position: 'top-right',\n type,\n ...options\n }\n ])\n }, [])\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((t) => t.id !== id))\n }, [])\n\n useEffect(() => {\n registerToastEmitter(showToast)\n return () => registerToastEmitter(null)\n }, [showToast])\n\n const grouped = useMemo(() => {\n return toasts.reduce<Partial<Record<ToastPosition, ToastItem[]>>>((acc, toast) => {\n const pos = toast.position ?? 'top'\n acc[pos] = [...(acc[pos] ?? []), toast]\n return acc\n }, {})\n }, [toasts])\n\n useLayoutEffect(() => {\n const newRects = new Map<string, DOMRect>()\n\n itemRefs.current.forEach((el, id) => {\n newRects.set(id, el.getBoundingClientRect())\n })\n\n newRects.forEach((newRect, id) => {\n const prevRect = prevRects.current.get(id)\n const el = itemRefs.current.get(id)\n if (!el || !prevRect) return\n\n const dy = prevRect.top - newRect.top\n if (dy === 0) return\n\n el.style.transform = `translateY(${dy}px)`\n el.style.transition = 'transform 0s'\n\n requestAnimationFrame(() => {\n el.style.transition = 'transform 200ms ease-out'\n el.style.transform = ''\n })\n })\n\n prevRects.current = newRects\n }, [toasts])\n\n const setItemRef = useCallback((id: string) => {\n return (el: HTMLDivElement | null) => {\n if (!el) {\n itemRefs.current.delete(id)\n prevRects.current.delete(id)\n return\n }\n itemRefs.current.set(id, el)\n }\n }, [])\n\n return (\n <>\n {Object.entries(grouped).map(([position, list]) => (\n <div className={`fixed ${zToast} ${getPositionClass(position as ToastPosition)}`} key={position}>\n <div className='relative flex flex-col gap-3'>\n {list.map((toast) => (\n <div key={toast.id} ref={setItemRef(toast.id)}>\n <Toast\n duration={toast.duration}\n id={toast.id}\n onClose={removeToast}\n subtitle={toast.subtitle}\n title={toast.title}\n type={toast.type}\n />\n </div>\n ))}\n </div>\n </div>\n ))}\n </>\n )\n}\n\nfunction getPositionClass(position: ToastPosition) {\n const map: Record<ToastPosition, string> = {\n bottom: 'bottom-6 left-1/2 -translate-x-1/2',\n 'bottom-left': 'bottom-6 left-6',\n 'bottom-right': 'bottom-6 right-6',\n center: 'top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2',\n 'middle-bottom': 'bottom-20 left-1/2 -translate-x-1/2',\n 'middle-top': 'top-20 left-1/2 -translate-x-1/2',\n top: 'top-6 left-1/2 -translate-x-1/2',\n 'top-left': 'top-6 left-6',\n 'top-right': 'top-6 right-6'\n }\n\n return map[position]\n}\n","import { ReactNode } from 'react'\n\nimport { cn } from '../utils'\n\nexport interface WrapperProps {\n children: ReactNode\n className?: string\n}\n\nexport const Wrapper = ({ children, className }: WrapperProps) => {\n return <div className={cn('mx-auto h-full w-full', className)}>{children}</div>\n}\n"],"mappings":"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","names":["jsx","jsxs","jsx","jsxs","React","jsx","jsxs","React","clsx","Fragment","jsx","jsxs","clsx","React","jsx","jsxs","jsx","jsxs","cva","React","jsx","cva","React","React","jsx","jsxs","jsx","jsxs","Slot","React","jsx","Slot","XIcon","React","jsx","cva","React","jsx","cva","jsx","jsxs","jsx","jsxs","jsx","jsxs","XIcon","Map","useState","jsx","jsxs","Map","jsx","React","jsx","jsxs","React","jsx","jsxs","XIcon","useCallback","useEffect","useId","useMemo","useState","React","jsx","React","jsx","jsxs","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","useId","useState","useCallback","useMemo","useEffect","XIcon","jsx","CheckCircleIcon","jsx","jsxs","CheckCircleIcon","React","jsx","jsx","jsxs","jsx","jsxs","React","jsx","CheckIcon","InfoIcon","WarningIcon","XIcon","useEffect","useRef","useState","jsx","jsxs","XIcon","InfoIcon","CheckIcon","WarningIcon","useState","useRef","useEffect","useCallback","useEffect","useMemo","useRef","useState","Fragment","jsx","useState","useRef","useCallback","useEffect","useMemo","toast","jsx"]}
|