framepexls-ui-lib 2.2.2 → 2.2.6
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/AccessibilityFab.d.mts +27 -0
- package/dist/AccessibilityFab.d.ts +27 -0
- package/dist/AccessibilityFab.js +158 -0
- package/dist/AccessibilityFab.mjs +134 -0
- package/dist/Checkbox.d.mts +1 -1
- package/dist/Checkbox.d.ts +1 -1
- package/dist/HeliipLoader.d.mts +2 -1
- package/dist/HeliipLoader.d.ts +2 -1
- package/dist/HeliipLoader.js +10 -64
- package/dist/HeliipLoader.mjs +10 -64
- package/dist/Select.d.mts +3 -1
- package/dist/Select.d.ts +3 -1
- package/dist/Select.js +12 -2
- package/dist/Select.mjs +12 -2
- package/dist/index.d.mts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +5 -0
- package/dist/index.mjs +165 -162
- package/dist/theme/ThemeScript.d.mts +7 -1
- package/dist/theme/ThemeScript.d.ts +7 -1
- package/dist/theme/ThemeScript.js +9 -3
- package/dist/theme/ThemeScript.mjs +9 -3
- package/package.json +1 -1
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { FontSizeControllerProps } from './theme/FontSizeController.mjs';
|
|
3
|
+
import { ThemeToggleProps } from './theme/ThemeToggle.mjs';
|
|
4
|
+
|
|
5
|
+
type AccessibilityFabLabels = {
|
|
6
|
+
title?: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
close?: string;
|
|
9
|
+
open?: string;
|
|
10
|
+
appearanceTitle?: string;
|
|
11
|
+
appearanceDescription?: string;
|
|
12
|
+
fontFamilyTitle?: string;
|
|
13
|
+
fontFamilyDescription?: string;
|
|
14
|
+
fontSizeTitle?: string;
|
|
15
|
+
fontSizeDescription?: string;
|
|
16
|
+
};
|
|
17
|
+
type AccessibilityFabProps = {
|
|
18
|
+
className?: string;
|
|
19
|
+
fontFamilyControl?: React__default.ReactNode;
|
|
20
|
+
labels?: AccessibilityFabLabels;
|
|
21
|
+
showDescriptions?: boolean;
|
|
22
|
+
themeToggleProps?: Omit<ThemeToggleProps, "className">;
|
|
23
|
+
fontSizeProps?: Omit<FontSizeControllerProps, "className">;
|
|
24
|
+
};
|
|
25
|
+
declare function AccessibilityFab({ className, fontFamilyControl, labels, showDescriptions, themeToggleProps, fontSizeProps, }: AccessibilityFabProps): React__default.JSX.Element;
|
|
26
|
+
|
|
27
|
+
export { type AccessibilityFabLabels, type AccessibilityFabProps, AccessibilityFab as default };
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import React__default from 'react';
|
|
2
|
+
import { FontSizeControllerProps } from './theme/FontSizeController.js';
|
|
3
|
+
import { ThemeToggleProps } from './theme/ThemeToggle.js';
|
|
4
|
+
|
|
5
|
+
type AccessibilityFabLabels = {
|
|
6
|
+
title?: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
close?: string;
|
|
9
|
+
open?: string;
|
|
10
|
+
appearanceTitle?: string;
|
|
11
|
+
appearanceDescription?: string;
|
|
12
|
+
fontFamilyTitle?: string;
|
|
13
|
+
fontFamilyDescription?: string;
|
|
14
|
+
fontSizeTitle?: string;
|
|
15
|
+
fontSizeDescription?: string;
|
|
16
|
+
};
|
|
17
|
+
type AccessibilityFabProps = {
|
|
18
|
+
className?: string;
|
|
19
|
+
fontFamilyControl?: React__default.ReactNode;
|
|
20
|
+
labels?: AccessibilityFabLabels;
|
|
21
|
+
showDescriptions?: boolean;
|
|
22
|
+
themeToggleProps?: Omit<ThemeToggleProps, "className">;
|
|
23
|
+
fontSizeProps?: Omit<FontSizeControllerProps, "className">;
|
|
24
|
+
};
|
|
25
|
+
declare function AccessibilityFab({ className, fontFamilyControl, labels, showDescriptions, themeToggleProps, fontSizeProps, }: AccessibilityFabProps): React__default.JSX.Element;
|
|
26
|
+
|
|
27
|
+
export { type AccessibilityFabLabels, type AccessibilityFabProps, AccessibilityFab as default };
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
29
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
var AccessibilityFab_exports = {};
|
|
31
|
+
__export(AccessibilityFab_exports, {
|
|
32
|
+
default: () => AccessibilityFab
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(AccessibilityFab_exports);
|
|
35
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
36
|
+
var import_react = __toESM(require("react"));
|
|
37
|
+
var import_framer_motion = require("framer-motion");
|
|
38
|
+
var import_Button = __toESM(require("./Button"));
|
|
39
|
+
var import_FontSizeController = __toESM(require("./theme/FontSizeController"));
|
|
40
|
+
var import_ThemeToggle = __toESM(require("./theme/ThemeToggle"));
|
|
41
|
+
var import_iconos = require("./iconos");
|
|
42
|
+
function AccessibilityFab({
|
|
43
|
+
className,
|
|
44
|
+
fontFamilyControl,
|
|
45
|
+
labels,
|
|
46
|
+
showDescriptions = false,
|
|
47
|
+
themeToggleProps,
|
|
48
|
+
fontSizeProps
|
|
49
|
+
}) {
|
|
50
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
51
|
+
const [open, setOpen] = import_react.default.useState(false);
|
|
52
|
+
const reduceMotion = (0, import_framer_motion.useReducedMotion)();
|
|
53
|
+
const btnRef = import_react.default.useRef(null);
|
|
54
|
+
const popRef = import_react.default.useRef(null);
|
|
55
|
+
const text = {
|
|
56
|
+
title: (_a = labels == null ? void 0 : labels.title) != null ? _a : "Accesibilidad",
|
|
57
|
+
description: (_b = labels == null ? void 0 : labels.description) != null ? _b : "Ajusta el modo visual y el tama\xF1o del texto",
|
|
58
|
+
close: (_c = labels == null ? void 0 : labels.close) != null ? _c : "Cerrar accesibilidad",
|
|
59
|
+
open: (_d = labels == null ? void 0 : labels.open) != null ? _d : "Abrir accesibilidad",
|
|
60
|
+
appearanceTitle: (_e = labels == null ? void 0 : labels.appearanceTitle) != null ? _e : "Apariencia",
|
|
61
|
+
appearanceDescription: (_f = labels == null ? void 0 : labels.appearanceDescription) != null ? _f : "Alterna entre modo claro y oscuro",
|
|
62
|
+
fontFamilyTitle: (_g = labels == null ? void 0 : labels.fontFamilyTitle) != null ? _g : "Fuente",
|
|
63
|
+
fontFamilyDescription: (_h = labels == null ? void 0 : labels.fontFamilyDescription) != null ? _h : "Elige la familia tipogr\xE1fica de la app",
|
|
64
|
+
fontSizeTitle: (_i = labels == null ? void 0 : labels.fontSizeTitle) != null ? _i : "Tama\xF1o del texto",
|
|
65
|
+
fontSizeDescription: (_j = labels == null ? void 0 : labels.fontSizeDescription) != null ? _j : "Mejora la lectura con un ajuste r\xE1pido"
|
|
66
|
+
};
|
|
67
|
+
import_react.default.useEffect(() => {
|
|
68
|
+
if (!open) return;
|
|
69
|
+
const onKeyDown = (event) => {
|
|
70
|
+
var _a2;
|
|
71
|
+
if (event.key === "Escape") {
|
|
72
|
+
setOpen(false);
|
|
73
|
+
(_a2 = btnRef.current) == null ? void 0 : _a2.focus();
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
const onPointerDown = (event) => {
|
|
77
|
+
const path = typeof event.composedPath === "function" ? event.composedPath() : [];
|
|
78
|
+
if (popRef.current && path.includes(popRef.current)) return;
|
|
79
|
+
if (btnRef.current && path.includes(btnRef.current)) return;
|
|
80
|
+
setOpen(false);
|
|
81
|
+
};
|
|
82
|
+
window.addEventListener("keydown", onKeyDown);
|
|
83
|
+
window.addEventListener("pointerdown", onPointerDown, true);
|
|
84
|
+
return () => {
|
|
85
|
+
window.removeEventListener("keydown", onKeyDown);
|
|
86
|
+
window.removeEventListener("pointerdown", onPointerDown, true);
|
|
87
|
+
};
|
|
88
|
+
}, [open]);
|
|
89
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: ["fixed bottom-5 right-5 z-[70] flex items-end gap-3", className != null ? className : ""].join(" "), children: [
|
|
90
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_framer_motion.LazyMotion, { features: import_framer_motion.domAnimation, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_framer_motion.AnimatePresence, { children: open ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
91
|
+
import_framer_motion.m.div,
|
|
92
|
+
{
|
|
93
|
+
ref: popRef,
|
|
94
|
+
initial: reduceMotion ? { opacity: 1 } : { opacity: 0, y: 10, scale: 0.98 },
|
|
95
|
+
animate: reduceMotion ? { opacity: 1 } : { opacity: 1, y: 0, scale: 1 },
|
|
96
|
+
exit: reduceMotion ? { opacity: 0 } : { opacity: 0, y: 10, scale: 0.98 },
|
|
97
|
+
transition: reduceMotion ? { duration: 0 } : { duration: 0.18, ease: "easeOut" },
|
|
98
|
+
className: "w-[min(360px,calc(100vw-1.5rem))] overflow-hidden rounded-[1.75rem] border border-[color-mix(in_oklab,var(--border)_72%,transparent)] bg-[color-mix(in_oklab,var(--surface)_84%,transparent)] shadow-[0_30px_90px_rgba(2,12,27,0.24)] backdrop-blur-xl",
|
|
99
|
+
children: [
|
|
100
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between gap-3 border-b border-[color-mix(in_oklab,var(--border)_70%,transparent)] px-4 py-3", children: [
|
|
101
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
|
|
102
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-sm font-semibold text-[var(--foreground)]", children: text.title }),
|
|
103
|
+
showDescriptions ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-xs text-[var(--muted)]", children: text.description }) : null
|
|
104
|
+
] }),
|
|
105
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
106
|
+
import_Button.default,
|
|
107
|
+
{
|
|
108
|
+
unstyled: true,
|
|
109
|
+
type: "button",
|
|
110
|
+
onClick: () => setOpen(false),
|
|
111
|
+
className: "grid size-9 place-items-center rounded-2xl border border-[color-mix(in_oklab,var(--border)_70%,transparent)] bg-[color-mix(in_oklab,var(--card)_55%,transparent)] text-[var(--foreground)] transition hover:bg-[color-mix(in_oklab,var(--card)_65%,transparent)]",
|
|
112
|
+
"aria-label": text.close,
|
|
113
|
+
title: text.close,
|
|
114
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_iconos.CloseIcon, { className: "size-4", "aria-hidden": true })
|
|
115
|
+
}
|
|
116
|
+
)
|
|
117
|
+
] }),
|
|
118
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "space-y-3 p-4", children: [
|
|
119
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between gap-3 rounded-2xl border border-[color-mix(in_oklab,var(--border)_70%,transparent)] bg-[color-mix(in_oklab,var(--card)_55%,transparent)] p-3", children: [
|
|
120
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "min-w-0", children: [
|
|
121
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-sm font-semibold text-[var(--foreground)]", children: text.appearanceTitle }),
|
|
122
|
+
showDescriptions ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "mt-0.5 text-xs text-[var(--muted)]", children: text.appearanceDescription }) : null
|
|
123
|
+
] }),
|
|
124
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ThemeToggle.default, { cycle: ["light", "dark"], ...themeToggleProps })
|
|
125
|
+
] }),
|
|
126
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between gap-3 rounded-2xl border border-[color-mix(in_oklab,var(--border)_70%,transparent)] bg-[color-mix(in_oklab,var(--card)_55%,transparent)] p-3", children: [
|
|
127
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "min-w-0", children: [
|
|
128
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-sm font-semibold text-[var(--foreground)]", children: text.fontSizeTitle }),
|
|
129
|
+
showDescriptions ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "mt-0.5 text-xs text-[var(--muted)]", children: text.fontSizeDescription }) : null
|
|
130
|
+
] }),
|
|
131
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_FontSizeController.default, { ...fontSizeProps })
|
|
132
|
+
] }),
|
|
133
|
+
fontFamilyControl ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between gap-3 rounded-2xl border border-[color-mix(in_oklab,var(--border)_70%,transparent)] bg-[color-mix(in_oklab,var(--card)_55%,transparent)] p-3", children: [
|
|
134
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "min-w-0", children: [
|
|
135
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-sm font-semibold text-[var(--foreground)]", children: text.fontFamilyTitle }),
|
|
136
|
+
showDescriptions ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "mt-0.5 text-xs text-[var(--muted)]", children: text.fontFamilyDescription }) : null
|
|
137
|
+
] }),
|
|
138
|
+
fontFamilyControl
|
|
139
|
+
] }) : null
|
|
140
|
+
] })
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
) : null }) }),
|
|
144
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
145
|
+
import_Button.default,
|
|
146
|
+
{
|
|
147
|
+
unstyled: true,
|
|
148
|
+
ref: btnRef,
|
|
149
|
+
type: "button",
|
|
150
|
+
onClick: () => setOpen((value) => !value),
|
|
151
|
+
className: "group grid size-12 place-items-center rounded-2xl border border-[color-mix(in_oklab,var(--border)_70%,transparent)] bg-[color-mix(in_oklab,var(--surface)_84%,transparent)] text-[var(--foreground)] shadow-[0_24px_60px_rgba(15,23,42,0.22)] backdrop-blur-xl transition hover:scale-[1.02] hover:bg-[color-mix(in_oklab,var(--surface)_92%,transparent)]",
|
|
152
|
+
"aria-label": open ? text.close : text.open,
|
|
153
|
+
title: open ? text.close : text.title,
|
|
154
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_iconos.TextAaIcon, { className: "size-5 opacity-90 transition group-hover:opacity-100", "aria-hidden": true })
|
|
155
|
+
}
|
|
156
|
+
)
|
|
157
|
+
] });
|
|
158
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import React from "react";
|
|
4
|
+
import {
|
|
5
|
+
AnimatePresence,
|
|
6
|
+
LazyMotion,
|
|
7
|
+
domAnimation,
|
|
8
|
+
m,
|
|
9
|
+
useReducedMotion
|
|
10
|
+
} from "framer-motion";
|
|
11
|
+
import Button from "./Button.mjs";
|
|
12
|
+
import FontSizeController from "./theme/FontSizeController.mjs";
|
|
13
|
+
import ThemeToggle from "./theme/ThemeToggle.mjs";
|
|
14
|
+
import { CloseIcon, TextAaIcon } from "./iconos/index.mjs";
|
|
15
|
+
function AccessibilityFab({
|
|
16
|
+
className,
|
|
17
|
+
fontFamilyControl,
|
|
18
|
+
labels,
|
|
19
|
+
showDescriptions = false,
|
|
20
|
+
themeToggleProps,
|
|
21
|
+
fontSizeProps
|
|
22
|
+
}) {
|
|
23
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
|
|
24
|
+
const [open, setOpen] = React.useState(false);
|
|
25
|
+
const reduceMotion = useReducedMotion();
|
|
26
|
+
const btnRef = React.useRef(null);
|
|
27
|
+
const popRef = React.useRef(null);
|
|
28
|
+
const text = {
|
|
29
|
+
title: (_a = labels == null ? void 0 : labels.title) != null ? _a : "Accesibilidad",
|
|
30
|
+
description: (_b = labels == null ? void 0 : labels.description) != null ? _b : "Ajusta el modo visual y el tama\xF1o del texto",
|
|
31
|
+
close: (_c = labels == null ? void 0 : labels.close) != null ? _c : "Cerrar accesibilidad",
|
|
32
|
+
open: (_d = labels == null ? void 0 : labels.open) != null ? _d : "Abrir accesibilidad",
|
|
33
|
+
appearanceTitle: (_e = labels == null ? void 0 : labels.appearanceTitle) != null ? _e : "Apariencia",
|
|
34
|
+
appearanceDescription: (_f = labels == null ? void 0 : labels.appearanceDescription) != null ? _f : "Alterna entre modo claro y oscuro",
|
|
35
|
+
fontFamilyTitle: (_g = labels == null ? void 0 : labels.fontFamilyTitle) != null ? _g : "Fuente",
|
|
36
|
+
fontFamilyDescription: (_h = labels == null ? void 0 : labels.fontFamilyDescription) != null ? _h : "Elige la familia tipogr\xE1fica de la app",
|
|
37
|
+
fontSizeTitle: (_i = labels == null ? void 0 : labels.fontSizeTitle) != null ? _i : "Tama\xF1o del texto",
|
|
38
|
+
fontSizeDescription: (_j = labels == null ? void 0 : labels.fontSizeDescription) != null ? _j : "Mejora la lectura con un ajuste r\xE1pido"
|
|
39
|
+
};
|
|
40
|
+
React.useEffect(() => {
|
|
41
|
+
if (!open) return;
|
|
42
|
+
const onKeyDown = (event) => {
|
|
43
|
+
var _a2;
|
|
44
|
+
if (event.key === "Escape") {
|
|
45
|
+
setOpen(false);
|
|
46
|
+
(_a2 = btnRef.current) == null ? void 0 : _a2.focus();
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
const onPointerDown = (event) => {
|
|
50
|
+
const path = typeof event.composedPath === "function" ? event.composedPath() : [];
|
|
51
|
+
if (popRef.current && path.includes(popRef.current)) return;
|
|
52
|
+
if (btnRef.current && path.includes(btnRef.current)) return;
|
|
53
|
+
setOpen(false);
|
|
54
|
+
};
|
|
55
|
+
window.addEventListener("keydown", onKeyDown);
|
|
56
|
+
window.addEventListener("pointerdown", onPointerDown, true);
|
|
57
|
+
return () => {
|
|
58
|
+
window.removeEventListener("keydown", onKeyDown);
|
|
59
|
+
window.removeEventListener("pointerdown", onPointerDown, true);
|
|
60
|
+
};
|
|
61
|
+
}, [open]);
|
|
62
|
+
return /* @__PURE__ */ jsxs("div", { className: ["fixed bottom-5 right-5 z-[70] flex items-end gap-3", className != null ? className : ""].join(" "), children: [
|
|
63
|
+
/* @__PURE__ */ jsx(LazyMotion, { features: domAnimation, children: /* @__PURE__ */ jsx(AnimatePresence, { children: open ? /* @__PURE__ */ jsxs(
|
|
64
|
+
m.div,
|
|
65
|
+
{
|
|
66
|
+
ref: popRef,
|
|
67
|
+
initial: reduceMotion ? { opacity: 1 } : { opacity: 0, y: 10, scale: 0.98 },
|
|
68
|
+
animate: reduceMotion ? { opacity: 1 } : { opacity: 1, y: 0, scale: 1 },
|
|
69
|
+
exit: reduceMotion ? { opacity: 0 } : { opacity: 0, y: 10, scale: 0.98 },
|
|
70
|
+
transition: reduceMotion ? { duration: 0 } : { duration: 0.18, ease: "easeOut" },
|
|
71
|
+
className: "w-[min(360px,calc(100vw-1.5rem))] overflow-hidden rounded-[1.75rem] border border-[color-mix(in_oklab,var(--border)_72%,transparent)] bg-[color-mix(in_oklab,var(--surface)_84%,transparent)] shadow-[0_30px_90px_rgba(2,12,27,0.24)] backdrop-blur-xl",
|
|
72
|
+
children: [
|
|
73
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3 border-b border-[color-mix(in_oklab,var(--border)_70%,transparent)] px-4 py-3", children: [
|
|
74
|
+
/* @__PURE__ */ jsxs("div", { children: [
|
|
75
|
+
/* @__PURE__ */ jsx("div", { className: "text-sm font-semibold text-[var(--foreground)]", children: text.title }),
|
|
76
|
+
showDescriptions ? /* @__PURE__ */ jsx("div", { className: "text-xs text-[var(--muted)]", children: text.description }) : null
|
|
77
|
+
] }),
|
|
78
|
+
/* @__PURE__ */ jsx(
|
|
79
|
+
Button,
|
|
80
|
+
{
|
|
81
|
+
unstyled: true,
|
|
82
|
+
type: "button",
|
|
83
|
+
onClick: () => setOpen(false),
|
|
84
|
+
className: "grid size-9 place-items-center rounded-2xl border border-[color-mix(in_oklab,var(--border)_70%,transparent)] bg-[color-mix(in_oklab,var(--card)_55%,transparent)] text-[var(--foreground)] transition hover:bg-[color-mix(in_oklab,var(--card)_65%,transparent)]",
|
|
85
|
+
"aria-label": text.close,
|
|
86
|
+
title: text.close,
|
|
87
|
+
children: /* @__PURE__ */ jsx(CloseIcon, { className: "size-4", "aria-hidden": true })
|
|
88
|
+
}
|
|
89
|
+
)
|
|
90
|
+
] }),
|
|
91
|
+
/* @__PURE__ */ jsxs("div", { className: "space-y-3 p-4", children: [
|
|
92
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3 rounded-2xl border border-[color-mix(in_oklab,var(--border)_70%,transparent)] bg-[color-mix(in_oklab,var(--card)_55%,transparent)] p-3", children: [
|
|
93
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
94
|
+
/* @__PURE__ */ jsx("div", { className: "text-sm font-semibold text-[var(--foreground)]", children: text.appearanceTitle }),
|
|
95
|
+
showDescriptions ? /* @__PURE__ */ jsx("div", { className: "mt-0.5 text-xs text-[var(--muted)]", children: text.appearanceDescription }) : null
|
|
96
|
+
] }),
|
|
97
|
+
/* @__PURE__ */ jsx(ThemeToggle, { cycle: ["light", "dark"], ...themeToggleProps })
|
|
98
|
+
] }),
|
|
99
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3 rounded-2xl border border-[color-mix(in_oklab,var(--border)_70%,transparent)] bg-[color-mix(in_oklab,var(--card)_55%,transparent)] p-3", children: [
|
|
100
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
101
|
+
/* @__PURE__ */ jsx("div", { className: "text-sm font-semibold text-[var(--foreground)]", children: text.fontSizeTitle }),
|
|
102
|
+
showDescriptions ? /* @__PURE__ */ jsx("div", { className: "mt-0.5 text-xs text-[var(--muted)]", children: text.fontSizeDescription }) : null
|
|
103
|
+
] }),
|
|
104
|
+
/* @__PURE__ */ jsx(FontSizeController, { ...fontSizeProps })
|
|
105
|
+
] }),
|
|
106
|
+
fontFamilyControl ? /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-3 rounded-2xl border border-[color-mix(in_oklab,var(--border)_70%,transparent)] bg-[color-mix(in_oklab,var(--card)_55%,transparent)] p-3", children: [
|
|
107
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
108
|
+
/* @__PURE__ */ jsx("div", { className: "text-sm font-semibold text-[var(--foreground)]", children: text.fontFamilyTitle }),
|
|
109
|
+
showDescriptions ? /* @__PURE__ */ jsx("div", { className: "mt-0.5 text-xs text-[var(--muted)]", children: text.fontFamilyDescription }) : null
|
|
110
|
+
] }),
|
|
111
|
+
fontFamilyControl
|
|
112
|
+
] }) : null
|
|
113
|
+
] })
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
) : null }) }),
|
|
117
|
+
/* @__PURE__ */ jsx(
|
|
118
|
+
Button,
|
|
119
|
+
{
|
|
120
|
+
unstyled: true,
|
|
121
|
+
ref: btnRef,
|
|
122
|
+
type: "button",
|
|
123
|
+
onClick: () => setOpen((value) => !value),
|
|
124
|
+
className: "group grid size-12 place-items-center rounded-2xl border border-[color-mix(in_oklab,var(--border)_70%,transparent)] bg-[color-mix(in_oklab,var(--surface)_84%,transparent)] text-[var(--foreground)] shadow-[0_24px_60px_rgba(15,23,42,0.22)] backdrop-blur-xl transition hover:scale-[1.02] hover:bg-[color-mix(in_oklab,var(--surface)_92%,transparent)]",
|
|
125
|
+
"aria-label": open ? text.close : text.open,
|
|
126
|
+
title: open ? text.close : text.title,
|
|
127
|
+
children: /* @__PURE__ */ jsx(TextAaIcon, { className: "size-5 opacity-90 transition group-hover:opacity-100", "aria-hidden": true })
|
|
128
|
+
}
|
|
129
|
+
)
|
|
130
|
+
] });
|
|
131
|
+
}
|
|
132
|
+
export {
|
|
133
|
+
AccessibilityFab as default
|
|
134
|
+
};
|
package/dist/Checkbox.d.mts
CHANGED
|
@@ -11,7 +11,7 @@ type CheckboxProps = Omit<React__default.InputHTMLAttributes<HTMLInputElement>,
|
|
|
11
11
|
className?: string;
|
|
12
12
|
inputClassName?: string;
|
|
13
13
|
};
|
|
14
|
-
declare const Checkbox: React__default.ForwardRefExoticComponent<Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "
|
|
14
|
+
declare const Checkbox: React__default.ForwardRefExoticComponent<Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "size" | "type"> & {
|
|
15
15
|
label?: React__default.ReactNode;
|
|
16
16
|
description?: React__default.ReactNode;
|
|
17
17
|
error?: boolean;
|
package/dist/Checkbox.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ type CheckboxProps = Omit<React__default.InputHTMLAttributes<HTMLInputElement>,
|
|
|
11
11
|
className?: string;
|
|
12
12
|
inputClassName?: string;
|
|
13
13
|
};
|
|
14
|
-
declare const Checkbox: React__default.ForwardRefExoticComponent<Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "
|
|
14
|
+
declare const Checkbox: React__default.ForwardRefExoticComponent<Omit<React__default.InputHTMLAttributes<HTMLInputElement>, "size" | "type"> & {
|
|
15
15
|
label?: React__default.ReactNode;
|
|
16
16
|
description?: React__default.ReactNode;
|
|
17
17
|
error?: boolean;
|
package/dist/HeliipLoader.d.mts
CHANGED
|
@@ -5,7 +5,8 @@ type HeliipLoaderProps = {
|
|
|
5
5
|
subtitle?: string;
|
|
6
6
|
className?: string;
|
|
7
7
|
compact?: boolean;
|
|
8
|
+
size?: "sm" | "md" | "lg";
|
|
8
9
|
};
|
|
9
|
-
declare function HeliipLoader({ title, subtitle, className, compact, }: HeliipLoaderProps): React__default.JSX.Element;
|
|
10
|
+
declare function HeliipLoader({ title, subtitle, className, compact, size, }: HeliipLoaderProps): React__default.JSX.Element;
|
|
10
11
|
|
|
11
12
|
export { type HeliipLoaderProps, HeliipLoader as default };
|
package/dist/HeliipLoader.d.ts
CHANGED
|
@@ -5,7 +5,8 @@ type HeliipLoaderProps = {
|
|
|
5
5
|
subtitle?: string;
|
|
6
6
|
className?: string;
|
|
7
7
|
compact?: boolean;
|
|
8
|
+
size?: "sm" | "md" | "lg";
|
|
8
9
|
};
|
|
9
|
-
declare function HeliipLoader({ title, subtitle, className, compact, }: HeliipLoaderProps): React__default.JSX.Element;
|
|
10
|
+
declare function HeliipLoader({ title, subtitle, className, compact, size, }: HeliipLoaderProps): React__default.JSX.Element;
|
|
10
11
|
|
|
11
12
|
export { type HeliipLoaderProps, HeliipLoader as default };
|
package/dist/HeliipLoader.js
CHANGED
|
@@ -24,80 +24,26 @@ __export(HeliipLoader_exports, {
|
|
|
24
24
|
module.exports = __toCommonJS(HeliipLoader_exports);
|
|
25
25
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
26
26
|
var import_framer_motion = require("framer-motion");
|
|
27
|
-
var
|
|
27
|
+
var import_iconos = require("./iconos");
|
|
28
28
|
const cx = (...a) => a.filter(Boolean).join(" ");
|
|
29
29
|
function HeliipLoader({
|
|
30
30
|
title = "Heliip",
|
|
31
31
|
subtitle = "Cargando\u2026",
|
|
32
32
|
className,
|
|
33
|
-
compact = false
|
|
33
|
+
compact = false,
|
|
34
|
+
size
|
|
34
35
|
}) {
|
|
36
|
+
const resolvedSize = size != null ? size : compact ? "sm" : "md";
|
|
37
|
+
const iconSize = resolvedSize === "lg" ? "h-10 w-10" : resolvedSize === "sm" ? "h-5 w-5" : "h-7 w-7";
|
|
35
38
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
36
39
|
"div",
|
|
37
40
|
{
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
"shadow-2xl ring-1 ring-black/5",
|
|
42
|
-
compact ? "p-4" : "p-5",
|
|
43
|
-
className
|
|
44
|
-
),
|
|
41
|
+
"aria-label": subtitle || title,
|
|
42
|
+
className: cx("inline-flex items-center justify-center text-[var(--primary)]", className),
|
|
43
|
+
role: "status",
|
|
45
44
|
children: [
|
|
46
|
-
/* @__PURE__ */ (0, import_jsx_runtime.
|
|
47
|
-
|
|
48
|
-
"div",
|
|
49
|
-
{
|
|
50
|
-
className: [
|
|
51
|
-
"relative grid place-items-center",
|
|
52
|
-
compact ? "h-10 w-10 rounded-2xl" : "h-12 w-12 rounded-2xl",
|
|
53
|
-
"bg-[color-mix(in_oklab,var(--primary)_14%,transparent)]",
|
|
54
|
-
"ring-1 ring-[color-mix(in_oklab,var(--primary)_24%,transparent)]"
|
|
55
|
-
].join(" "),
|
|
56
|
-
"aria-hidden": true,
|
|
57
|
-
children: [
|
|
58
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
59
|
-
import_framer_motion.motion.div,
|
|
60
|
-
{
|
|
61
|
-
className: "absolute inset-1 rounded-xl border border-[color-mix(in_oklab,var(--primary)_55%,transparent)]",
|
|
62
|
-
animate: { rotate: 360 },
|
|
63
|
-
transition: { repeat: Infinity, duration: 1.2, ease: "linear" }
|
|
64
|
-
}
|
|
65
|
-
),
|
|
66
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
67
|
-
import_framer_motion.motion.div,
|
|
68
|
-
{
|
|
69
|
-
className: "h-4 w-4 rounded-full bg-[var(--primary)]",
|
|
70
|
-
animate: { scale: [1, 1.08, 1] },
|
|
71
|
-
transition: { repeat: Infinity, duration: 0.9, ease: "easeInOut" }
|
|
72
|
-
}
|
|
73
|
-
)
|
|
74
|
-
]
|
|
75
|
-
}
|
|
76
|
-
),
|
|
77
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
78
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: cx("truncate font-semibold tracking-tight", compact ? "text-base" : "text-lg"), children: title }),
|
|
79
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: cx("mt-0.5 truncate text-[var(--muted)]", compact ? "text-xs" : "text-sm"), children: subtitle })
|
|
80
|
-
] })
|
|
81
|
-
] }),
|
|
82
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: cx("mt-4 overflow-hidden rounded-full bg-[color-mix(in_oklab,var(--border)_65%,transparent)]", compact ? "h-1.5" : "h-2"), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
83
|
-
import_framer_motion.motion.div,
|
|
84
|
-
{
|
|
85
|
-
className: cx("h-full rounded-full bg-[var(--primary)]", compact ? "w-1/3" : "w-2/5"),
|
|
86
|
-
initial: { x: "-60%" },
|
|
87
|
-
animate: { x: "160%" },
|
|
88
|
-
transition: { repeat: Infinity, duration: 1.1, ease: "easeInOut" }
|
|
89
|
-
}
|
|
90
|
-
) }),
|
|
91
|
-
!compact ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
92
|
-
import_framer_motion.motion.div,
|
|
93
|
-
{
|
|
94
|
-
className: "mt-3 text-xs text-[var(--muted)]",
|
|
95
|
-
initial: { opacity: 0 },
|
|
96
|
-
animate: { opacity: 1 },
|
|
97
|
-
transition: import_animations.microTransition,
|
|
98
|
-
children: "Esto normalmente toma menos de un segundo."
|
|
99
|
-
}
|
|
100
|
-
) : null
|
|
45
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_framer_motion.motion.span, { animate: { rotate: 360 }, "aria-hidden": true, className: "inline-flex", transition: { duration: 0.8, ease: "linear", repeat: Infinity }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_iconos.SpinnerGapIcon, { className: iconSize }) }),
|
|
46
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "sr-only", children: subtitle || title })
|
|
101
47
|
]
|
|
102
48
|
}
|
|
103
49
|
);
|
package/dist/HeliipLoader.mjs
CHANGED
|
@@ -1,80 +1,26 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { motion } from "framer-motion";
|
|
4
|
-
import {
|
|
4
|
+
import { SpinnerGapIcon } from "./iconos/index.mjs";
|
|
5
5
|
const cx = (...a) => a.filter(Boolean).join(" ");
|
|
6
6
|
function HeliipLoader({
|
|
7
7
|
title = "Heliip",
|
|
8
8
|
subtitle = "Cargando\u2026",
|
|
9
9
|
className,
|
|
10
|
-
compact = false
|
|
10
|
+
compact = false,
|
|
11
|
+
size
|
|
11
12
|
}) {
|
|
13
|
+
const resolvedSize = size != null ? size : compact ? "sm" : "md";
|
|
14
|
+
const iconSize = resolvedSize === "lg" ? "h-10 w-10" : resolvedSize === "sm" ? "h-5 w-5" : "h-7 w-7";
|
|
12
15
|
return /* @__PURE__ */ jsxs(
|
|
13
16
|
"div",
|
|
14
17
|
{
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
"shadow-2xl ring-1 ring-black/5",
|
|
19
|
-
compact ? "p-4" : "p-5",
|
|
20
|
-
className
|
|
21
|
-
),
|
|
18
|
+
"aria-label": subtitle || title,
|
|
19
|
+
className: cx("inline-flex items-center justify-center text-[var(--primary)]", className),
|
|
20
|
+
role: "status",
|
|
22
21
|
children: [
|
|
23
|
-
/* @__PURE__ */
|
|
24
|
-
|
|
25
|
-
"div",
|
|
26
|
-
{
|
|
27
|
-
className: [
|
|
28
|
-
"relative grid place-items-center",
|
|
29
|
-
compact ? "h-10 w-10 rounded-2xl" : "h-12 w-12 rounded-2xl",
|
|
30
|
-
"bg-[color-mix(in_oklab,var(--primary)_14%,transparent)]",
|
|
31
|
-
"ring-1 ring-[color-mix(in_oklab,var(--primary)_24%,transparent)]"
|
|
32
|
-
].join(" "),
|
|
33
|
-
"aria-hidden": true,
|
|
34
|
-
children: [
|
|
35
|
-
/* @__PURE__ */ jsx(
|
|
36
|
-
motion.div,
|
|
37
|
-
{
|
|
38
|
-
className: "absolute inset-1 rounded-xl border border-[color-mix(in_oklab,var(--primary)_55%,transparent)]",
|
|
39
|
-
animate: { rotate: 360 },
|
|
40
|
-
transition: { repeat: Infinity, duration: 1.2, ease: "linear" }
|
|
41
|
-
}
|
|
42
|
-
),
|
|
43
|
-
/* @__PURE__ */ jsx(
|
|
44
|
-
motion.div,
|
|
45
|
-
{
|
|
46
|
-
className: "h-4 w-4 rounded-full bg-[var(--primary)]",
|
|
47
|
-
animate: { scale: [1, 1.08, 1] },
|
|
48
|
-
transition: { repeat: Infinity, duration: 0.9, ease: "easeInOut" }
|
|
49
|
-
}
|
|
50
|
-
)
|
|
51
|
-
]
|
|
52
|
-
}
|
|
53
|
-
),
|
|
54
|
-
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
55
|
-
/* @__PURE__ */ jsx("div", { className: cx("truncate font-semibold tracking-tight", compact ? "text-base" : "text-lg"), children: title }),
|
|
56
|
-
/* @__PURE__ */ jsx("div", { className: cx("mt-0.5 truncate text-[var(--muted)]", compact ? "text-xs" : "text-sm"), children: subtitle })
|
|
57
|
-
] })
|
|
58
|
-
] }),
|
|
59
|
-
/* @__PURE__ */ jsx("div", { className: cx("mt-4 overflow-hidden rounded-full bg-[color-mix(in_oklab,var(--border)_65%,transparent)]", compact ? "h-1.5" : "h-2"), children: /* @__PURE__ */ jsx(
|
|
60
|
-
motion.div,
|
|
61
|
-
{
|
|
62
|
-
className: cx("h-full rounded-full bg-[var(--primary)]", compact ? "w-1/3" : "w-2/5"),
|
|
63
|
-
initial: { x: "-60%" },
|
|
64
|
-
animate: { x: "160%" },
|
|
65
|
-
transition: { repeat: Infinity, duration: 1.1, ease: "easeInOut" }
|
|
66
|
-
}
|
|
67
|
-
) }),
|
|
68
|
-
!compact ? /* @__PURE__ */ jsx(
|
|
69
|
-
motion.div,
|
|
70
|
-
{
|
|
71
|
-
className: "mt-3 text-xs text-[var(--muted)]",
|
|
72
|
-
initial: { opacity: 0 },
|
|
73
|
-
animate: { opacity: 1 },
|
|
74
|
-
transition: microTransition,
|
|
75
|
-
children: "Esto normalmente toma menos de un segundo."
|
|
76
|
-
}
|
|
77
|
-
) : null
|
|
22
|
+
/* @__PURE__ */ jsx(motion.span, { animate: { rotate: 360 }, "aria-hidden": true, className: "inline-flex", transition: { duration: 0.8, ease: "linear", repeat: Infinity }, children: /* @__PURE__ */ jsx(SpinnerGapIcon, { className: iconSize }) }),
|
|
23
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: subtitle || title })
|
|
78
24
|
]
|
|
79
25
|
}
|
|
80
26
|
);
|
package/dist/Select.d.mts
CHANGED
|
@@ -7,6 +7,7 @@ type Option<T extends BaseValue> = {
|
|
|
7
7
|
disabled?: boolean;
|
|
8
8
|
};
|
|
9
9
|
type Size = "sm" | "md" | "lg";
|
|
10
|
+
type Placement = "bottom" | "top";
|
|
10
11
|
type Props<T extends BaseValue> = {
|
|
11
12
|
value: T | "";
|
|
12
13
|
onChange: (v: T | "") => void;
|
|
@@ -25,7 +26,8 @@ type Props<T extends BaseValue> = {
|
|
|
25
26
|
closeOnSelect?: boolean;
|
|
26
27
|
minWidthClasses?: string;
|
|
27
28
|
fit?: boolean;
|
|
29
|
+
placement?: Placement;
|
|
28
30
|
};
|
|
29
|
-
declare function ModernSelect<T extends BaseValue>({ value, onChange, options, id, label, hint, placeholder, title, className, fullWidth, disabled, error, size, clearable, closeOnSelect, minWidthClasses, fit, }: Props<T>): React__default.JSX.Element;
|
|
31
|
+
declare function ModernSelect<T extends BaseValue>({ value, onChange, options, id, label, hint, placeholder, title, className, fullWidth, disabled, error, size, clearable, closeOnSelect, minWidthClasses, fit, placement, }: Props<T>): React__default.JSX.Element;
|
|
30
32
|
|
|
31
33
|
export { type Option, ModernSelect as default };
|
package/dist/Select.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ type Option<T extends BaseValue> = {
|
|
|
7
7
|
disabled?: boolean;
|
|
8
8
|
};
|
|
9
9
|
type Size = "sm" | "md" | "lg";
|
|
10
|
+
type Placement = "bottom" | "top";
|
|
10
11
|
type Props<T extends BaseValue> = {
|
|
11
12
|
value: T | "";
|
|
12
13
|
onChange: (v: T | "") => void;
|
|
@@ -25,7 +26,8 @@ type Props<T extends BaseValue> = {
|
|
|
25
26
|
closeOnSelect?: boolean;
|
|
26
27
|
minWidthClasses?: string;
|
|
27
28
|
fit?: boolean;
|
|
29
|
+
placement?: Placement;
|
|
28
30
|
};
|
|
29
|
-
declare function ModernSelect<T extends BaseValue>({ value, onChange, options, id, label, hint, placeholder, title, className, fullWidth, disabled, error, size, clearable, closeOnSelect, minWidthClasses, fit, }: Props<T>): React__default.JSX.Element;
|
|
31
|
+
declare function ModernSelect<T extends BaseValue>({ value, onChange, options, id, label, hint, placeholder, title, className, fullWidth, disabled, error, size, clearable, closeOnSelect, minWidthClasses, fit, placement, }: Props<T>): React__default.JSX.Element;
|
|
30
32
|
|
|
31
33
|
export { type Option, ModernSelect as default };
|