@komensal/ui 0.12.1 → 0.13.1
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 +20 -10
- package/dist/index.js +134 -76
- package/dist/index.js.map +1 -1
- package/package.json +15 -2
package/dist/index.d.ts
CHANGED
|
@@ -222,15 +222,6 @@ interface LabelFieldProps {
|
|
|
222
222
|
}
|
|
223
223
|
declare const LabelField: ({ label, labelClassName, name, visualRequired }: LabelFieldProps) => React.JSX.Element;
|
|
224
224
|
|
|
225
|
-
interface ResolvedAddress {
|
|
226
|
-
address: string;
|
|
227
|
-
city: null | string;
|
|
228
|
-
country: null | string;
|
|
229
|
-
countryName: null | string;
|
|
230
|
-
department: null | string;
|
|
231
|
-
lat: null | number;
|
|
232
|
-
lng: null | number;
|
|
233
|
-
}
|
|
234
225
|
interface GoogleMapPickerProps {
|
|
235
226
|
apiKey?: string;
|
|
236
227
|
centerOn?: google.maps.LatLngLiteral;
|
|
@@ -247,6 +238,15 @@ interface GoogleMapPickerProps {
|
|
|
247
238
|
placeholder?: string;
|
|
248
239
|
value: string;
|
|
249
240
|
}
|
|
241
|
+
interface ResolvedAddress {
|
|
242
|
+
address: string;
|
|
243
|
+
city: null | string;
|
|
244
|
+
country: null | string;
|
|
245
|
+
countryName: null | string;
|
|
246
|
+
department: null | string;
|
|
247
|
+
lat: null | number;
|
|
248
|
+
lng: null | number;
|
|
249
|
+
}
|
|
250
250
|
declare const GoogleMapPicker: (props: GoogleMapPickerProps) => React.JSX.Element;
|
|
251
251
|
|
|
252
252
|
type MapPickerFieldProps<T extends FieldValues> = Omit<GoogleMapPickerProps, 'hasError' | 'onChange' | 'value'> & {
|
|
@@ -969,12 +969,20 @@ declare const setUiLanguage: (lng: string) => Promise<unknown>;
|
|
|
969
969
|
|
|
970
970
|
declare function cn(...inputs: ClassValue[]): string;
|
|
971
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
|
+
|
|
972
978
|
declare const inputBase: string;
|
|
973
979
|
declare const inputPlaceholder: string;
|
|
974
980
|
declare const inputDisabled: string;
|
|
975
981
|
declare const inputCompact: string;
|
|
976
982
|
declare const inputFocus: string;
|
|
977
983
|
|
|
984
|
+
declare function getTagEmoji(tag: string): null | string;
|
|
985
|
+
|
|
978
986
|
type ToastEmitter = ((type: ToastType, options: ToastOptions) => void) | null;
|
|
979
987
|
declare const toast: {
|
|
980
988
|
error(options: string | ToastOptions): void;
|
|
@@ -985,4 +993,6 @@ declare const toast: {
|
|
|
985
993
|
};
|
|
986
994
|
declare function registerToastEmitter(fn: ToastEmitter): void;
|
|
987
995
|
|
|
988
|
-
|
|
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,25 +8,77 @@ 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
|
-
"flex w-full
|
|
14
|
-
"border
|
|
43
|
+
"flex !h-[50px] w-full items-center justify-between gap-[10px] rounded-[10px] px-3 text-base font-normal",
|
|
44
|
+
"border-border bg-surface text-foreground border",
|
|
15
45
|
"transition-all duration-200 ease-in-out",
|
|
16
|
-
"placeholder:text-icon-muted placeholder:text-sm placeholder:
|
|
17
|
-
"disabled:
|
|
46
|
+
"placeholder:text-icon-muted placeholder:text-sm placeholder:leading-none placeholder:font-normal",
|
|
47
|
+
"disabled:bg-inactive disabled:text-inactive-text disabled:border-inactive disabled:placeholder:text-inactive-text disabled:cursor-not-allowed"
|
|
18
48
|
);
|
|
19
|
-
var inputPlaceholder = cn("text-icon-muted text-sm font-normal
|
|
49
|
+
var inputPlaceholder = cn("text-icon-muted text-sm leading-none font-normal");
|
|
20
50
|
var inputDisabled = cn("cursor-not-allowed opacity-50");
|
|
21
51
|
var inputCompact = cn(
|
|
22
52
|
"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"
|
|
23
53
|
);
|
|
24
54
|
var inputFocus = cn(
|
|
25
55
|
"focus:outline-none focus-visible:outline-none",
|
|
26
|
-
"focus-visible:ring-
|
|
27
|
-
"data-[state=open]:ring-
|
|
56
|
+
"focus-visible:ring-ring focus-visible:border-primary focus-visible:ring-2",
|
|
57
|
+
"data-[state=open]:ring-ring data-[state=open]:border-primary data-[state=open]:ring-2"
|
|
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";
|
|
@@ -149,15 +211,7 @@ var Breadcrumb = React2.forwardRef(({ className, items, ...props }, ref) => /* @
|
|
|
149
211
|
const isLast = index === items.length - 1;
|
|
150
212
|
return /* @__PURE__ */ jsxs4("span", { className: "flex items-center gap-1", children: [
|
|
151
213
|
index > 0 && /* @__PURE__ */ jsx4("span", { className: "text-muted", children: "\u203A" }),
|
|
152
|
-
item.onClick && !isLast ? /* @__PURE__ */ jsx4(
|
|
153
|
-
"button",
|
|
154
|
-
{
|
|
155
|
-
className: "text-muted hover:text-foreground transition-colors",
|
|
156
|
-
onClick: item.onClick,
|
|
157
|
-
type: "button",
|
|
158
|
-
children: item.label
|
|
159
|
-
}
|
|
160
|
-
) : /* @__PURE__ */ jsx4("span", { className: isLast ? "text-foreground font-medium" : "text-muted", children: item.label })
|
|
214
|
+
item.onClick && !isLast ? /* @__PURE__ */ jsx4("button", { className: "text-muted hover:text-foreground transition-colors", onClick: item.onClick, type: "button", children: item.label }) : /* @__PURE__ */ jsx4("span", { className: isLast ? "text-foreground font-medium" : "text-muted", children: item.label })
|
|
161
215
|
] }, `${item.label}-${index}`);
|
|
162
216
|
}) }));
|
|
163
217
|
Breadcrumb.displayName = "Breadcrumb";
|
|
@@ -469,13 +523,7 @@ var DialogContent = React6.forwardRef(
|
|
|
469
523
|
DialogContent.displayName = DialogPrimitive.Content.displayName;
|
|
470
524
|
var DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx9("div", { className: cn("flex flex-col space-y-1.5 text-center sm:text-left", className), ...props });
|
|
471
525
|
DialogHeader.displayName = "DialogHeader";
|
|
472
|
-
var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx9(
|
|
473
|
-
"div",
|
|
474
|
-
{
|
|
475
|
-
className: cn("flex flex-col-reverse justify-center gap-2 rounded-2xl sm:flex-row", className),
|
|
476
|
-
...props
|
|
477
|
-
}
|
|
478
|
-
);
|
|
526
|
+
var DialogFooter = ({ className, ...props }) => /* @__PURE__ */ jsx9("div", { className: cn("flex flex-col-reverse justify-center gap-2 rounded-2xl sm:flex-row", className), ...props });
|
|
479
527
|
DialogFooter.displayName = "DialogFooter";
|
|
480
528
|
var DialogTitle = React6.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx9(
|
|
481
529
|
DialogPrimitive.Title,
|
|
@@ -633,8 +681,8 @@ var FormMessage = React8.forwardRef(
|
|
|
633
681
|
FormMessage.displayName = "FormMessage";
|
|
634
682
|
|
|
635
683
|
// src/components/form-fields/input-field.tsx
|
|
636
|
-
import { useState } from "react";
|
|
637
684
|
import { EyeIcon, EyeSlashIcon, XIcon as XIcon2 } from "@phosphor-icons/react";
|
|
685
|
+
import { useState } from "react";
|
|
638
686
|
|
|
639
687
|
// src/components/input.tsx
|
|
640
688
|
import * as React9 from "react";
|
|
@@ -875,9 +923,11 @@ function useGoogleMapPicker({
|
|
|
875
923
|
},
|
|
876
924
|
[]
|
|
877
925
|
);
|
|
878
|
-
|
|
926
|
+
const [prevValue, setPrevValue] = useState2(value);
|
|
927
|
+
if (prevValue !== value) {
|
|
928
|
+
setPrevValue(value);
|
|
879
929
|
setInputValue(value);
|
|
880
|
-
}
|
|
930
|
+
}
|
|
881
931
|
useEffect(() => {
|
|
882
932
|
if (map && centerOn) {
|
|
883
933
|
map.panTo(centerOn);
|
|
@@ -890,10 +940,11 @@ function useGoogleMapPicker({
|
|
|
890
940
|
map.setZoom(SELECTED_ZOOM);
|
|
891
941
|
}
|
|
892
942
|
}, [map, position]);
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
943
|
+
const [prevPlacesLib, setPrevPlacesLib] = useState2(placesLib);
|
|
944
|
+
if (prevPlacesLib !== placesLib) {
|
|
945
|
+
setPrevPlacesLib(placesLib);
|
|
946
|
+
if (placesLib) setSessionToken(new placesLib.AutocompleteSessionToken());
|
|
947
|
+
}
|
|
897
948
|
useEffect(() => {
|
|
898
949
|
if (!geocoder || !locationQuery || !map || position) return;
|
|
899
950
|
const g = geocoder;
|
|
@@ -1057,15 +1108,24 @@ var MapPickerContent = (props) => {
|
|
|
1057
1108
|
value: inputValue
|
|
1058
1109
|
}
|
|
1059
1110
|
),
|
|
1060
|
-
showDropdown && suggestions.length > 0 && /* @__PURE__ */ jsx17(
|
|
1061
|
-
"
|
|
1111
|
+
showDropdown && suggestions.length > 0 && /* @__PURE__ */ jsx17(
|
|
1112
|
+
"ul",
|
|
1062
1113
|
{
|
|
1063
|
-
className:
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1114
|
+
className: cn(
|
|
1115
|
+
"border-border bg-surface absolute mt-1 w-full overflow-hidden rounded-[10px] border shadow-md",
|
|
1116
|
+
zPopover
|
|
1117
|
+
),
|
|
1118
|
+
children: suggestions.map((suggestion) => /* @__PURE__ */ jsx17("li", { children: /* @__PURE__ */ jsx17(
|
|
1119
|
+
"button",
|
|
1120
|
+
{
|
|
1121
|
+
className: "text-foreground hover:bg-hover w-full px-4 py-3 text-left text-sm transition-colors",
|
|
1122
|
+
onClick: () => void handleSelect(suggestion),
|
|
1123
|
+
type: "button",
|
|
1124
|
+
children: suggestion.placePrediction?.text.text ?? ""
|
|
1125
|
+
}
|
|
1126
|
+
) }, suggestion.placePrediction?.placeId ?? suggestion.placePrediction?.text.text))
|
|
1067
1127
|
}
|
|
1068
|
-
)
|
|
1128
|
+
)
|
|
1069
1129
|
] }),
|
|
1070
1130
|
/* @__PURE__ */ jsx17("div", { className: "border-border h-59 overflow-hidden rounded-[10px] border md:h-87.5", children: /* @__PURE__ */ jsx17(
|
|
1071
1131
|
Map2,
|
|
@@ -1083,15 +1143,7 @@ var MapPickerContent = (props) => {
|
|
|
1083
1143
|
) })
|
|
1084
1144
|
] });
|
|
1085
1145
|
};
|
|
1086
|
-
var GoogleMapPicker = (props) => /* @__PURE__ */ jsx17(
|
|
1087
|
-
APIProvider,
|
|
1088
|
-
{
|
|
1089
|
-
apiKey: props.apiKey ?? import.meta.env.VITE_GOOGLE_MAPS_API_KEY ?? "",
|
|
1090
|
-
language: "es",
|
|
1091
|
-
region: "CO",
|
|
1092
|
-
children: /* @__PURE__ */ jsx17(MapPickerContent, { ...props })
|
|
1093
|
-
}
|
|
1094
|
-
);
|
|
1146
|
+
var GoogleMapPicker = (props) => /* @__PURE__ */ jsx17(APIProvider, { apiKey: props.apiKey ?? import.meta.env.VITE_GOOGLE_MAPS_API_KEY ?? "", language: "es", region: "CO", children: /* @__PURE__ */ jsx17(MapPickerContent, { ...props }) });
|
|
1095
1147
|
|
|
1096
1148
|
// src/components/form-fields/map-picker-field.tsx
|
|
1097
1149
|
import { jsx as jsx18 } from "react/jsx-runtime";
|
|
@@ -1236,7 +1288,7 @@ function OTPField({
|
|
|
1236
1288
|
|
|
1237
1289
|
// src/components/select-input.tsx
|
|
1238
1290
|
import { CaretDownIcon, CaretUpIcon, ClockIcon, XIcon as XIcon3 } from "@phosphor-icons/react";
|
|
1239
|
-
import { cloneElement, useCallback as useCallback2,
|
|
1291
|
+
import { cloneElement, useCallback as useCallback2, useId as useId2, useMemo as useMemo3, useState as useState4 } from "react";
|
|
1240
1292
|
|
|
1241
1293
|
// src/components/popover.tsx
|
|
1242
1294
|
import * as PopoverPrimitive from "@radix-ui/react-popover";
|
|
@@ -1317,6 +1369,19 @@ function formatHour12(hour) {
|
|
|
1317
1369
|
// src/components/use-select-input.ts
|
|
1318
1370
|
import { useEffect as useEffect3, useMemo as useMemo2, useRef as useRef3, useState as useState3 } from "react";
|
|
1319
1371
|
var normalizeString = (str) => str.normalize("NFD").replace(/[̀-ͯ]/g, "").toLowerCase();
|
|
1372
|
+
function usePopoverWidth() {
|
|
1373
|
+
const ref = useRef3(null);
|
|
1374
|
+
const [width, setWidth] = useState3(0);
|
|
1375
|
+
useEffect3(() => {
|
|
1376
|
+
const updateWidth = () => {
|
|
1377
|
+
if (ref.current) setWidth(ref.current.getBoundingClientRect().width);
|
|
1378
|
+
};
|
|
1379
|
+
updateWidth();
|
|
1380
|
+
window.addEventListener("resize", updateWidth);
|
|
1381
|
+
return () => window.removeEventListener("resize", updateWidth);
|
|
1382
|
+
}, []);
|
|
1383
|
+
return { ref, width };
|
|
1384
|
+
}
|
|
1320
1385
|
function useSelectFilter(items, labelKey, valueKey) {
|
|
1321
1386
|
const [query, setQuery] = useState3("");
|
|
1322
1387
|
const normalizedItems = useMemo2(() => {
|
|
@@ -1329,25 +1394,10 @@ function useSelectFilter(items, labelKey, valueKey) {
|
|
|
1329
1394
|
}, [items, labelKey, valueKey]);
|
|
1330
1395
|
const filteredOptions = useMemo2(() => {
|
|
1331
1396
|
if (!query) return normalizedItems;
|
|
1332
|
-
return normalizedItems.filter(
|
|
1333
|
-
(el) => normalizeString(el[labelKey]).includes(normalizeString(query))
|
|
1334
|
-
);
|
|
1397
|
+
return normalizedItems.filter((el) => normalizeString(el[labelKey]).includes(normalizeString(query)));
|
|
1335
1398
|
}, [normalizedItems, labelKey, query]);
|
|
1336
1399
|
return { filteredOptions, normalizedItems, query, setQuery };
|
|
1337
1400
|
}
|
|
1338
|
-
function usePopoverWidth() {
|
|
1339
|
-
const ref = useRef3(null);
|
|
1340
|
-
const [width, setWidth] = useState3(0);
|
|
1341
|
-
useEffect3(() => {
|
|
1342
|
-
const updateWidth = () => {
|
|
1343
|
-
if (ref.current) setWidth(ref.current.getBoundingClientRect().width);
|
|
1344
|
-
};
|
|
1345
|
-
updateWidth();
|
|
1346
|
-
window.addEventListener("resize", updateWidth);
|
|
1347
|
-
return () => window.removeEventListener("resize", updateWidth);
|
|
1348
|
-
}, []);
|
|
1349
|
-
return { ref, width };
|
|
1350
|
-
}
|
|
1351
1401
|
|
|
1352
1402
|
// src/components/select-input.tsx
|
|
1353
1403
|
import { Fragment as Fragment3, jsx as jsx23, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
@@ -1380,11 +1430,7 @@ var SelectInput = (props) => {
|
|
|
1380
1430
|
const [open, setOpen] = useState4(false);
|
|
1381
1431
|
const [valueItem, setValueItem] = useState4(value);
|
|
1382
1432
|
const { ref: divRef, width } = usePopoverWidth();
|
|
1383
|
-
const { filteredOptions, normalizedItems, query, setQuery } = useSelectFilter(
|
|
1384
|
-
items,
|
|
1385
|
-
labelKey,
|
|
1386
|
-
valueKey
|
|
1387
|
-
);
|
|
1433
|
+
const { filteredOptions, normalizedItems, query, setQuery } = useSelectFilter(items, labelKey, valueKey);
|
|
1388
1434
|
const onValueChange = useCallback2(
|
|
1389
1435
|
(val) => {
|
|
1390
1436
|
if (!normalizedItems.length) return;
|
|
@@ -1435,9 +1481,11 @@ var SelectInput = (props) => {
|
|
|
1435
1481
|
),
|
|
1436
1482
|
[disabled, error, className]
|
|
1437
1483
|
);
|
|
1438
|
-
|
|
1484
|
+
const [prevValue, setPrevValue] = useState4(value);
|
|
1485
|
+
if (prevValue !== value) {
|
|
1486
|
+
setPrevValue(value);
|
|
1439
1487
|
setValueItem(value);
|
|
1440
|
-
}
|
|
1488
|
+
}
|
|
1441
1489
|
return /* @__PURE__ */ jsx23("div", { className: "flex flex-col gap-1", children: /* @__PURE__ */ jsxs17("div", { className: "relative flex flex-col justify-center", children: [
|
|
1442
1490
|
/* @__PURE__ */ jsxs17(Popover, { onOpenChange: setOpen, open, children: [
|
|
1443
1491
|
/* @__PURE__ */ jsx23(PopoverTrigger, { asChild: true, children: /* @__PURE__ */ jsx23(
|
|
@@ -1704,7 +1752,7 @@ var Switch = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ *
|
|
|
1704
1752
|
SwitchPrimitive.Root,
|
|
1705
1753
|
{
|
|
1706
1754
|
className: cn(
|
|
1707
|
-
"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
|
|
1755
|
+
"border-border focus-visible:ring-ring data-[state=checked]:bg-success data-[state=unchecked]:bg-inactive 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",
|
|
1708
1756
|
className
|
|
1709
1757
|
),
|
|
1710
1758
|
ref,
|
|
@@ -1716,7 +1764,7 @@ Switch.displayName = SwitchPrimitive.Root.displayName;
|
|
|
1716
1764
|
|
|
1717
1765
|
// src/components/toast/toast.tsx
|
|
1718
1766
|
import { CheckIcon as CheckIcon2, FileLockIcon, InfoIcon as InfoIcon2, WarningIcon as WarningIcon2, XIcon as XIcon4 } from "@phosphor-icons/react";
|
|
1719
|
-
import { useEffect as
|
|
1767
|
+
import { useEffect as useEffect4, useRef as useRef4, useState as useState5 } from "react";
|
|
1720
1768
|
import { jsx as jsx30, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
1721
1769
|
var EXIT_ANIMATION_MS = 200;
|
|
1722
1770
|
var typeIcons = {
|
|
@@ -1740,7 +1788,7 @@ function Toast({ duration = 2500, id, onClose, subtitle, title, type }) {
|
|
|
1740
1788
|
const exitRef = useRef4(null);
|
|
1741
1789
|
const Icon = typeIcons[type];
|
|
1742
1790
|
const styles = typeStyles[type];
|
|
1743
|
-
|
|
1791
|
+
useEffect4(() => {
|
|
1744
1792
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
1745
1793
|
if (exitRef.current) clearTimeout(exitRef.current);
|
|
1746
1794
|
const elapsed = Date.now() - startedAtRef.current;
|
|
@@ -1777,7 +1825,11 @@ function Toast({ duration = 2500, id, onClose, subtitle, title, type }) {
|
|
|
1777
1825
|
/* @__PURE__ */ jsx30(
|
|
1778
1826
|
"div",
|
|
1779
1827
|
{
|
|
1780
|
-
className: cn(
|
|
1828
|
+
className: cn(
|
|
1829
|
+
"shrink-0",
|
|
1830
|
+
"flex h-8 w-8 min-w-8 items-center justify-center rounded-full border-2",
|
|
1831
|
+
styles.iconBorder
|
|
1832
|
+
),
|
|
1781
1833
|
children: /* @__PURE__ */ jsx30(Icon, { className: cn("h-5 w-5", styles.icon) })
|
|
1782
1834
|
}
|
|
1783
1835
|
)
|
|
@@ -1787,7 +1839,7 @@ function Toast({ duration = 2500, id, onClose, subtitle, title, type }) {
|
|
|
1787
1839
|
}
|
|
1788
1840
|
|
|
1789
1841
|
// src/components/toast/toast-provider.tsx
|
|
1790
|
-
import { useCallback as useCallback3, useEffect as
|
|
1842
|
+
import { useCallback as useCallback3, useEffect as useEffect5, useLayoutEffect, useMemo as useMemo4, useRef as useRef5, useState as useState6 } from "react";
|
|
1791
1843
|
import { Fragment as Fragment4, jsx as jsx31 } from "react/jsx-runtime";
|
|
1792
1844
|
function ToastProvider() {
|
|
1793
1845
|
const [toasts, setToasts] = useState6([]);
|
|
@@ -1808,7 +1860,7 @@ function ToastProvider() {
|
|
|
1808
1860
|
const removeToast = useCallback3((id) => {
|
|
1809
1861
|
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
1810
1862
|
}, []);
|
|
1811
|
-
|
|
1863
|
+
useEffect5(() => {
|
|
1812
1864
|
registerToastEmitter(showToast);
|
|
1813
1865
|
return () => registerToastEmitter(null);
|
|
1814
1866
|
}, [showToast]);
|
|
@@ -1938,13 +1990,19 @@ export {
|
|
|
1938
1990
|
Tooltip,
|
|
1939
1991
|
Wrapper,
|
|
1940
1992
|
buttonVariants,
|
|
1993
|
+
capitalize,
|
|
1941
1994
|
chipVariants,
|
|
1942
1995
|
cn,
|
|
1996
|
+
formatNumber,
|
|
1997
|
+
formatPrice,
|
|
1998
|
+
getTagEmoji,
|
|
1943
1999
|
inputBase,
|
|
1944
2000
|
inputCompact,
|
|
1945
2001
|
inputDisabled,
|
|
1946
2002
|
inputFocus,
|
|
1947
2003
|
inputPlaceholder,
|
|
2004
|
+
isLightColor,
|
|
2005
|
+
isSafeUrl,
|
|
1948
2006
|
registerToastEmitter,
|
|
1949
2007
|
setUiLanguage,
|
|
1950
2008
|
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/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","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 * 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"]}
|
|
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 !h-[50px] w-full items-center justify-between gap-[10px] rounded-[10px] px-3 text-base font-normal',\n 'border-border bg-surface text-foreground border',\n 'transition-all duration-200 ease-in-out',\n 'placeholder:text-icon-muted placeholder:text-sm placeholder:leading-none placeholder:font-normal',\n 'disabled:bg-inactive disabled:text-inactive-text disabled:border-inactive disabled:placeholder:text-inactive-text disabled:cursor-not-allowed'\n)\n\nexport const inputPlaceholder = cn('text-icon-muted text-sm leading-none font-normal')\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-ring focus-visible:border-primary focus-visible:ring-2',\n 'data-[state=open]:ring-ring data-[state=open]:border-primary data-[state=open]:ring-2'\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 className='text-muted hover:text-foreground transition-colors' onClick={item.onClick} type='button'>\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 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 { MagnifyingGlassIcon } from '@phosphor-icons/react'\nimport { type DialogProps } from '@radix-ui/react-dialog'\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 className={cn('flex flex-col-reverse justify-center gap-2 rounded-2xl sm:flex-row', className)} {...props} />\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 { EyeIcon, EyeSlashIcon, XIcon } from '@phosphor-icons/react'\nimport { useState } from 'react'\nimport { Control, FieldValues, Path } from 'react-hook-form'\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 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\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\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\n className={cn(\n 'border-border bg-surface absolute mt-1 w-full overflow-hidden rounded-[10px] border shadow-md',\n zPopover\n )}\n >\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 ?? '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 apiKey={props.apiKey ?? import.meta.env.VITE_GOOGLE_MAPS_API_KEY ?? ''} language='es' region='CO'>\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 const [prevValue, setPrevValue] = useState(value)\n if (prevValue !== value) {\n setPrevValue(value)\n setInputValue(value)\n }\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 const [prevPlacesLib, setPrevPlacesLib] = useState(placesLib)\n if (prevPlacesLib !== placesLib) {\n setPrevPlacesLib(placesLib)\n if (placesLib) setSessionToken(new placesLib.AutocompleteSessionToken())\n }\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: null | string; 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, 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>(items, labelKey, valueKey)\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 const [prevValue, setPrevValue] = useState(value)\n if (prevValue !== value) {\n setPrevValue(value)\n setValueItem(value)\n }\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]\n const valueValue = item[valueKey as Value]\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 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\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 }))\n }, [items, labelKey, valueKey])\n\n const filteredOptions = useMemo(() => {\n if (!query) return normalizedItems\n return normalizedItems.filter((el) => normalizeString(el[labelKey as Label]).includes(normalizeString(query)))\n }, [normalizedItems, labelKey, query])\n\n return { filteredOptions, normalizedItems, query, setQuery }\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 data-[state=checked]:bg-success data-[state=unchecked]:bg-inactive 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',\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(\n 'shrink-0',\n 'flex h-8 w-8 min-w-8 items-center justify-center rounded-full border-2',\n styles.iconBorder\n )}\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","useId","useMemo","useState","React","jsx","React","jsx","jsxs","useEffect","useMemo","useRef","useState","Fragment","jsx","jsxs","useId","useState","useCallback","useMemo","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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@komensal/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.13.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -26,6 +26,8 @@
|
|
|
26
26
|
"scripts": {
|
|
27
27
|
"build": "tsup && node scripts/copy-assets.mjs",
|
|
28
28
|
"typecheck": "tsc --noEmit",
|
|
29
|
+
"lint": "eslint .",
|
|
30
|
+
"lint-fix": "eslint . --fix",
|
|
29
31
|
"prepublishOnly": "pnpm build"
|
|
30
32
|
},
|
|
31
33
|
"peerDependencies": {
|
|
@@ -51,13 +53,24 @@
|
|
|
51
53
|
"tailwind-merge": "^3.5.0"
|
|
52
54
|
},
|
|
53
55
|
"devDependencies": {
|
|
56
|
+
"@eslint/js": "^9.39.5",
|
|
54
57
|
"@types/google.maps": "^3.64.0",
|
|
55
58
|
"@types/react": "^19.2.14",
|
|
56
59
|
"@types/react-dom": "^19.2.3",
|
|
60
|
+
"eslint": "^9.39.5",
|
|
61
|
+
"eslint-config-prettier": "^9.1.2",
|
|
62
|
+
"eslint-plugin-perfectionist": "^5.10.0",
|
|
63
|
+
"eslint-plugin-prettier": "^5.5.6",
|
|
64
|
+
"eslint-plugin-react": "^7.37.5",
|
|
65
|
+
"eslint-plugin-react-hooks": "^7.1.1",
|
|
66
|
+
"globals": "^17.7.0",
|
|
67
|
+
"prettier": "^3.9.5",
|
|
68
|
+
"prettier-plugin-tailwindcss": "^0.8.1",
|
|
57
69
|
"react-hook-form": "^7.71.1",
|
|
58
70
|
"react-i18next": "^16.5.4",
|
|
59
71
|
"tsup": "^8.5.0",
|
|
60
|
-
"typescript": "~5.9.3"
|
|
72
|
+
"typescript": "~5.9.3",
|
|
73
|
+
"typescript-eslint": "^8.64.0"
|
|
61
74
|
},
|
|
62
75
|
"publishConfig": {
|
|
63
76
|
"access": "public"
|