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.
@@ -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
+ };
@@ -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>, "type" | "size"> & {
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;
@@ -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>, "type" | "size"> & {
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;
@@ -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 };
@@ -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 };
@@ -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 import_animations = require("./animations");
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
- className: cx(
39
- "w-full",
40
- "rounded-3xl border border-[var(--border)] bg-[color-mix(in_oklab,var(--card)_92%,transparent)]",
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.jsxs)("div", { className: "flex items-center gap-3", children: [
47
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
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
  );
@@ -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 { microTransition } from "./animations.mjs";
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
- className: cx(
16
- "w-full",
17
- "rounded-3xl border border-[var(--border)] bg-[color-mix(in_oklab,var(--card)_92%,transparent)]",
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__ */ jsxs("div", { className: "flex items-center gap-3", children: [
24
- /* @__PURE__ */ jsxs(
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 };