@beweco/aurora-ui 1.0.1-beta.161 → 1.0.1-qa.165
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/README.md +6 -4
- package/dist/assets/css/styles.css +2 -2
- package/dist/assets/css/theme.css +3 -1
- package/dist/index.cjs.js +199 -21
- package/dist/index.esm.js +196 -22
- package/dist/types/components/menu-claw/MenuClaw.types.d.ts +1 -1
- package/dist/types/contexts/theme/theme-context.type.d.ts +1 -1
- package/dist/types/contexts/theme/theme-context.type.d.ts.map +1 -1
- package/dist/types/providers/theme/apply-custom-color.d.ts.map +1 -1
- package/dist/types/providers/theme/generate-color-scale.d.ts +21 -1
- package/dist/types/providers/theme/generate-color-scale.d.ts.map +1 -1
- package/dist/types/providers/theme/hex-to-theme-color.d.ts.map +1 -1
- package/dist/types/styles/colors.default.d.ts +70 -0
- package/dist/types/styles/colors.default.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* AUTOGENERADO — no editar a mano.
|
|
3
3
|
* Tokens de tema: SOLO el bloque de tema (static). Export `./theme`; la app lo importa con theme(reference), que anula el static.
|
|
4
4
|
* Fuente: scripts/generate-theme-tokens.mjs
|
|
5
|
-
* ← src/styles/colors.default.ts (
|
|
5
|
+
* ← src/styles/colors.default.ts (16 packs)
|
|
6
6
|
* ← scripts/v2-base-palette.json (paleta base heredada por `extend`)
|
|
7
7
|
*
|
|
8
8
|
* Regenerar y verificar contra el oráculo v2:
|
|
@@ -105,6 +105,8 @@
|
|
|
105
105
|
--color-danger-700: #920b3a;
|
|
106
106
|
--color-danger-800: #610726;
|
|
107
107
|
--color-danger-900: #310413;
|
|
108
|
+
/* Texto de marca sobre fondo claro: expone a las apps la utilidad `text-accent-soft-foreground`, que solo trae el tema de @heroui/styles (las apps no lo importan). */
|
|
109
|
+
--color-accent-soft-foreground: var(--accent-soft-foreground);
|
|
108
110
|
--aurora-shadow-small: 0px 0px 5px 0px rgb(0 0 0 / 0.02), 0px 2px 10px 0px rgb(0 0 0 / 0.06), 0px 0px 1px 0px rgb(0 0 0 / 0.3);
|
|
109
111
|
--aurora-shadow-medium: 0px 0px 15px 0px rgb(0 0 0 / 0.03), 0px 2px 30px 0px rgb(0 0 0 / 0.08), 0px 0px 1px 0px rgb(0 0 0 / 0.3);
|
|
110
112
|
--aurora-shadow-large: 0px 0px 30px 0px rgb(0 0 0 / 0.04), 0px 30px 60px 0px rgb(0 0 0 / 0.12), 0px 0px 1px 0px rgb(0 0 0 / 0.3);
|
package/dist/index.cjs.js
CHANGED
|
@@ -471,7 +471,7 @@ const COLOR_TOKENS$1 = {
|
|
|
471
471
|
fg: "var(--color-primary-foreground)",
|
|
472
472
|
softBg: "var(--accent-soft)",
|
|
473
473
|
softBgHover: "var(--accent-soft-hover)",
|
|
474
|
-
softFg: "var(--
|
|
474
|
+
softFg: "var(--accent-soft-foreground)",
|
|
475
475
|
},
|
|
476
476
|
success: {
|
|
477
477
|
bg: "var(--success)",
|
|
@@ -1014,8 +1014,8 @@ const COLOR_TOKENS = {
|
|
|
1014
1014
|
bg: "var(--accent)",
|
|
1015
1015
|
fg: "var(--color-primary-foreground)",
|
|
1016
1016
|
flatBg: "color-mix(in srgb, var(--color-primary) 20%, transparent)",
|
|
1017
|
-
flatFg: "var(--
|
|
1018
|
-
tintFg: "var(--
|
|
1017
|
+
flatFg: "var(--accent-soft-foreground)",
|
|
1018
|
+
tintFg: "var(--accent-soft-foreground)",
|
|
1019
1019
|
},
|
|
1020
1020
|
success: {
|
|
1021
1021
|
bg: "var(--success)",
|
|
@@ -2896,7 +2896,7 @@ const AnalyticsCard = ({ data, showTimePeriods = true, showDropdownMenu = true,
|
|
|
2896
2896
|
return (jsxRuntime.jsx(Card, { className: "dark:border-default-100 border border-transparent", ...props, children: jsxRuntime.jsxs("section", { className: "flex flex-col flex-nowrap", children: [jsxRuntime.jsx("div", { className: "flex flex-col justify-between gap-y-2", children: jsxRuntime.jsxs("div", { className: "flex flex-col gap-y-2", children: [jsxRuntime.jsxs("div", { className: "flex flex-col gap-y-0", children: [jsxRuntime.jsx(H2, { children: t.title }), jsxRuntime.jsx(P, { children: t.description })] }), jsxRuntime.jsx("div", { className: "h-2", "aria-hidden": "true" }), showTimePeriods && (jsxRuntime.jsx(react.Tabs, { className: "self-end", onSelectionChange: (key) => handleTimePeriodChange(String(key)), children: jsxRuntime.jsx(react.Tabs.ListContainer, { className: "bg-default-100", children: jsxRuntime.jsxs(react.Tabs.List, { "aria-label": t.title, children: [jsxRuntime.jsxs(react.Tabs.Tab, { id: "6-months", className: "whitespace-nowrap", children: [t.months6, jsxRuntime.jsx(react.Tabs.Indicator, {})] }), jsxRuntime.jsxs(react.Tabs.Tab, { id: "3-months", className: "whitespace-nowrap", children: [t.months3, jsxRuntime.jsx(react.Tabs.Indicator, {})] }), jsxRuntime.jsxs(react.Tabs.Tab, { id: "30-days", className: "whitespace-nowrap", children: [t.days30, jsxRuntime.jsx(react.Tabs.Indicator, {})] }), jsxRuntime.jsxs(react.Tabs.Tab, { id: "7-days", className: "whitespace-nowrap", children: [t.days7, jsxRuntime.jsx(react.Tabs.Indicator, {})] }), jsxRuntime.jsxs(react.Tabs.Tab, { id: "24-hours", className: "whitespace-nowrap", children: [t.hours24, jsxRuntime.jsx(react.Tabs.Indicator, {})] })] }) }) })), showMetricCards && (jsxRuntime.jsx("div", { className: "mt-2 flex w-full items-center", children: jsxRuntime.jsx("div", { className: "-my-3 flex w-full max-w-[800px] items-center gap-x-3 overflow-x-auto py-3", children: data.map(({ key, change, changeType, type, value, title }) => (jsxRuntime.jsxs("button", { type: "button", className: cn("rounded-[12px] flex w-full flex-col gap-2 p-3 transition-colors", {
|
|
2897
2897
|
"bg-default-100": activeChart === key,
|
|
2898
2898
|
}), onClick: () => handleChartChange(key), children: [jsxRuntime.jsx("span", { className: cn("text-sm text-default-500 font-medium transition-colors", {
|
|
2899
|
-
"text-
|
|
2899
|
+
"text-accent-soft-foreground": activeChart === key,
|
|
2900
2900
|
}), children: title }), jsxRuntime.jsxs("div", { className: "flex items-center gap-x-3", children: [jsxRuntime.jsx("span", { className: "text-foreground text-2xl font-bold", children: formatValue(value, type) }), jsxRuntime.jsx(Chip, { color: changeType === "positive"
|
|
2901
2901
|
? "success"
|
|
2902
2902
|
: changeType === "negative"
|
|
@@ -4044,6 +4044,76 @@ const themeColors = {
|
|
|
4044
4044
|
overlay: "#ffffff",
|
|
4045
4045
|
},
|
|
4046
4046
|
},
|
|
4047
|
+
"amberYellow-light": {
|
|
4048
|
+
extend: "light",
|
|
4049
|
+
colors: {
|
|
4050
|
+
primary: {
|
|
4051
|
+
"50": "#FFFBE3",
|
|
4052
|
+
"100": "#FFF4BD",
|
|
4053
|
+
"200": "#FFEB92",
|
|
4054
|
+
"300": "#FFDC5E",
|
|
4055
|
+
"400": "#FFCF34",
|
|
4056
|
+
"500": "#FFBF00",
|
|
4057
|
+
"600": "#D8A200",
|
|
4058
|
+
"700": "#AC7E00",
|
|
4059
|
+
"800": "#805900",
|
|
4060
|
+
"900": "#533600",
|
|
4061
|
+
foreground: "#000",
|
|
4062
|
+
DEFAULT: "#FFBF00",
|
|
4063
|
+
},
|
|
4064
|
+
secondary: {
|
|
4065
|
+
"50": "#F3F7FD",
|
|
4066
|
+
"100": "#D1DFFB",
|
|
4067
|
+
"200": "#A5BEF7",
|
|
4068
|
+
"300": "#7494E7",
|
|
4069
|
+
"400": "#4E6FCF",
|
|
4070
|
+
"500": "#1E40AF",
|
|
4071
|
+
"600": "#153096",
|
|
4072
|
+
"700": "#0F237D",
|
|
4073
|
+
"800": "#091865",
|
|
4074
|
+
"900": "#051053",
|
|
4075
|
+
foreground: "#fff",
|
|
4076
|
+
DEFAULT: "#1E40AF",
|
|
4077
|
+
},
|
|
4078
|
+
focus: "#FFBF00",
|
|
4079
|
+
overlay: "#000000",
|
|
4080
|
+
},
|
|
4081
|
+
},
|
|
4082
|
+
"amberYellow-dark": {
|
|
4083
|
+
extend: "dark",
|
|
4084
|
+
colors: {
|
|
4085
|
+
primary: {
|
|
4086
|
+
"50": "#533600",
|
|
4087
|
+
"100": "#805900",
|
|
4088
|
+
"200": "#AC7E00",
|
|
4089
|
+
"300": "#D8A200",
|
|
4090
|
+
"400": "#FFBF00",
|
|
4091
|
+
"500": "#FFCF34",
|
|
4092
|
+
"600": "#FFDC5E",
|
|
4093
|
+
"700": "#FFEB92",
|
|
4094
|
+
"800": "#FFF4BD",
|
|
4095
|
+
"900": "#FFFBE3",
|
|
4096
|
+
foreground: "#000",
|
|
4097
|
+
DEFAULT: "#FFBF00",
|
|
4098
|
+
},
|
|
4099
|
+
secondary: {
|
|
4100
|
+
"50": "#002147",
|
|
4101
|
+
"100": "#003571",
|
|
4102
|
+
"200": "#00489b",
|
|
4103
|
+
"300": "#005cc4",
|
|
4104
|
+
"400": "#006fee",
|
|
4105
|
+
"500": "#2d88f1",
|
|
4106
|
+
"600": "#59a1f4",
|
|
4107
|
+
"700": "#86bbf7",
|
|
4108
|
+
"800": "#b3d4fa",
|
|
4109
|
+
"900": "#dfedfd",
|
|
4110
|
+
foreground: "#fff",
|
|
4111
|
+
DEFAULT: "#006fee",
|
|
4112
|
+
},
|
|
4113
|
+
focus: "#FFBF00",
|
|
4114
|
+
overlay: "#ffffff",
|
|
4115
|
+
},
|
|
4116
|
+
},
|
|
4047
4117
|
"coral-light": {
|
|
4048
4118
|
extend: "light",
|
|
4049
4119
|
colors: {
|
|
@@ -4552,7 +4622,7 @@ const themeColors = {
|
|
|
4552
4622
|
* Los mismos nombres de tema que resuelve HeroUI v3 (`@heroui/styles`):
|
|
4553
4623
|
* `:root, .light, .default, [data-theme=light], [data-theme=default]` para el claro y
|
|
4554
4624
|
* `.dark, [data-theme=dark]` para el oscuro. `default` es un alias del claro en v3; en v2 no
|
|
4555
|
-
* existía. Más los
|
|
4625
|
+
* existía. Más los 16 packs de aurora, cada uno en el lado de su `extend`, que son las clases
|
|
4556
4626
|
* que `theme-packs.generated.css` declara y `applyThemeClass` pone en `<html>`.
|
|
4557
4627
|
*/
|
|
4558
4628
|
const V3_ALIASES = {
|
|
@@ -6839,7 +6909,7 @@ const KanbanColumnComponent = ({ column, renderItem, onCardClick, cardClassName,
|
|
|
6839
6909
|
// siempre visible pero la story lo tapaba, y ahora queda apagado por defecto.
|
|
6840
6910
|
className: "static text-xs font-medium transform-none", style: column.countBadgeColor === "secondary"
|
|
6841
6911
|
? SECONDARY_BADGE_STYLE
|
|
6842
|
-
: undefined, "aria-label": `${itemCount} ${t.itemsLabel}`, children: itemCount }))] })), jsxRuntime.jsx("div", { ref: scrollContainerRef, className: cn("flex-1 overflow-y-auto p-3 space-y-3", isDragOver && isEmpty && "min-h-24"), style: { maxHeight }, children: isEmpty ? (isDragOver && isDragging ? (jsxRuntime.jsx("div", { className: "h-24 border-2 border-dashed border-primary-300 rounded-lg bg-primary-50/50 flex items-center justify-center", children: jsxRuntime.jsx("span", { className: "text-
|
|
6912
|
+
: undefined, "aria-label": `${itemCount} ${t.itemsLabel}`, children: itemCount }))] })), jsxRuntime.jsx("div", { ref: scrollContainerRef, className: cn("flex-1 overflow-y-auto p-3 space-y-3", isDragOver && isEmpty && "min-h-24"), style: { maxHeight }, children: isEmpty ? (isDragOver && isDragging ? (jsxRuntime.jsx("div", { className: "h-24 border-2 border-dashed border-primary-300 rounded-lg bg-primary-50/50 flex items-center justify-center", children: jsxRuntime.jsx("span", { className: "text-accent-soft-foreground text-sm", children: t.dropHere }) })) : renderEmptyState ? (renderEmptyState(column)) : (jsxRuntime.jsx("div", { className: "flex items-center justify-center h-24 text-default-400 text-sm", children: column.emptyMessage || t.emptyMessage }))) : (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [column.items.map((item, index) => (jsxRuntime.jsxs("div", { onDragOver: (e) => handleDragOverItem(e, index), children: [isDragOver && dropIndex === index && (jsxRuntime.jsx("div", { className: "h-1 bg-primary-400 rounded-full mb-3 animate-pulse" })), jsxRuntime.jsx(KanbanCard, { item: item, columnId: column.id, index: index, renderContent: renderItem, onCardClick: onCardClick, className: cardClassName, isClickable: isCardClickable, isDraggable: isDraggable, onDragStart: onDragStart, onDragEnd: onDragEnd })] }, item.id))), isDragOver && dropIndex === column.items.length && (jsxRuntime.jsx("div", { className: "h-1 bg-primary-400 rounded-full mt-3 animate-pulse" })), column.isLoading && (jsxRuntime.jsx("div", { className: "flex items-center justify-center py-4", children: jsxRuntime.jsx(react.Spinner, { size: "sm", color: "accent" }) }))] })) })] }));
|
|
6843
6913
|
};
|
|
6844
6914
|
const KanbanColumn = $8WNJc$react.memo(KanbanColumnComponent);
|
|
6845
6915
|
KanbanColumn.displayName = "KanbanColumn";
|
|
@@ -8166,12 +8236,6 @@ const MenuClawHistoryPanel = $8WNJc$react.memo(function MenuClawHistoryPanel({ i
|
|
|
8166
8236
|
// que no quede a la vista solo en el agregado del lateral comprimido.
|
|
8167
8237
|
const hasHiddenNews = $8WNJc$react.useMemo(() => !isExpanded &&
|
|
8168
8238
|
items.slice(initialVisibleCount).some((item) => item.hasNews === true), [isExpanded, items, initialVisibleCount]);
|
|
8169
|
-
// Plegado el botón es solo un icono y su nombre accesible es `aria-label` (que tapa
|
|
8170
|
-
// cualquier `sr-only` hijo): con novedades lleva primero la acción y luego el aviso,
|
|
8171
|
-
// para que el lector no anuncie solo «hay novedades» y pierda «Nueva conversación».
|
|
8172
|
-
const collapsedAriaLabel = hasAnyNews
|
|
8173
|
-
? `${newLabel}, ${collapsedNewsLabel}`
|
|
8174
|
-
: newLabel;
|
|
8175
8239
|
const handleToggleExpand = $8WNJc$react.useCallback(() => {
|
|
8176
8240
|
setIsExpanded((prev) => !prev);
|
|
8177
8241
|
}, []);
|
|
@@ -8189,9 +8253,9 @@ const MenuClawHistoryPanel = $8WNJc$react.memo(function MenuClawHistoryPanel({ i
|
|
|
8189
8253
|
if (isCollapsed && !onNewConversation) {
|
|
8190
8254
|
return null;
|
|
8191
8255
|
}
|
|
8192
|
-
return (jsxRuntime.jsxs("div", { className: "flex max-h-[40%] min-h-0 flex-col gap-2 pb-3", children: [onNewConversation ? (jsxRuntime.jsxs(Button, { title: newLabel, "aria-label": isCollapsed ?
|
|
8256
|
+
return (jsxRuntime.jsxs("div", { className: "flex max-h-[40%] min-h-0 flex-col gap-2 pb-3", children: [onNewConversation ? (jsxRuntime.jsxs(Button, { title: newLabel, "aria-label": isCollapsed ? newLabel : undefined, isIconOnly: isCollapsed, fullWidth: !isCollapsed, onPress: () => onNewConversation(), className: cn("h-9 shrink-0 bg-foreground text-sm font-medium text-background", isCollapsed
|
|
8193
8257
|
? "w-9 min-w-9 self-center"
|
|
8194
|
-
: "justify-start gap-3 px-2"), children: [jsxRuntime.jsxs("span", { className: "relative flex h-5 w-5 shrink-0 items-center justify-center", children: [jsxRuntime.jsx(IconComponent, { icon: "solar:pen-new-square-linear", size: "md", "aria-hidden": true }), isCollapsed && hasAnyNews ? (jsxRuntime.jsx("span", { "data-history-news-aggregate": "", "aria-hidden": "true", className: "absolute -right-1 -top-1 h-2.5 w-2.5 rounded-full bg-primary ring-2 ring-background" })) : null] }), !isCollapsed ? (jsxRuntime.jsx("span", { className: "menu-claw-collapsible truncate", children: newLabel })) : null] })) : null, !isCollapsed && items.length > 0 ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("p", { className: "shrink-0 px-2 pb-1 pt-2 text-xs font-medium uppercase tracking-wide text-default-400", children: title }), jsxRuntime.jsx("ul", { "aria-label": title, className: "flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]", children: visibleItems.map((item) => (jsxRuntime.jsx("li", { children: jsxRuntime.jsxs("button", { type: "button", disabled: item.disabled, "aria-disabled": item.disabled, title: item.title, onClick: () => handleItemPress(item), className: cn("flex min-h-9 w-full items-center gap-3 rounded-lg px-2 py-1.5 text-left text-sm text-default-600 transition-colors", "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus", item.disabled
|
|
8258
|
+
: "justify-start gap-3 px-2"), children: [jsxRuntime.jsxs("span", { className: "relative flex h-5 w-5 shrink-0 items-center justify-center", children: [jsxRuntime.jsx(IconComponent, { icon: "solar:pen-new-square-linear", size: "md", "aria-hidden": true }), isCollapsed && hasAnyNews ? (jsxRuntime.jsx("span", { "data-history-news-aggregate": "", "aria-hidden": "true", className: "absolute -right-1 -top-1 h-2.5 w-2.5 rounded-full bg-primary ring-2 ring-background" })) : null] }), isCollapsed && hasAnyNews ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { className: "sr-only", children: newLabel }), jsxRuntime.jsx("span", { className: "sr-only", children: collapsedNewsLabel })] })) : null, !isCollapsed ? (jsxRuntime.jsx("span", { className: "menu-claw-collapsible truncate", children: newLabel })) : null] })) : null, !isCollapsed && items.length > 0 ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("p", { className: "shrink-0 px-2 pb-1 pt-2 text-xs font-medium uppercase tracking-wide text-default-400", children: title }), jsxRuntime.jsx("ul", { "aria-label": title, className: "flex min-h-0 flex-1 flex-col gap-0.5 overflow-y-auto [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]", children: visibleItems.map((item) => (jsxRuntime.jsx("li", { children: jsxRuntime.jsxs("button", { type: "button", disabled: item.disabled, "aria-disabled": item.disabled, title: item.title, onClick: () => handleItemPress(item), className: cn("flex min-h-9 w-full items-center gap-3 rounded-lg px-2 py-1.5 text-left text-sm text-default-600 transition-colors", "focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus", item.disabled
|
|
8195
8259
|
? "cursor-not-allowed opacity-50"
|
|
8196
8260
|
: "hover:bg-default-100"), children: [jsxRuntime.jsx("span", { className: "flex h-5 w-5 shrink-0 items-center justify-center text-default-400", children: jsxRuntime.jsx(IconComponent, { icon: "solar:chat-round-dots-linear", size: "md", "aria-hidden": true }) }), jsxRuntime.jsxs("span", { className: "flex min-w-0 flex-1 flex-col", children: [jsxRuntime.jsx("span", { className: "truncate", children: item.title }), item.meta ? (jsxRuntime.jsx("span", { className: "truncate text-xs text-default-400", children: item.meta })) : null] }), item.hasNews === true ? (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("span", { "data-history-news-dot": "", "aria-hidden": "true", className: "h-2 w-2 shrink-0 rounded-full bg-primary" }), jsxRuntime.jsx("span", { className: "sr-only", children: newsLabel })] })) : null] }) }, item.id))) }), hasHiddenItems ? (jsxRuntime.jsxs("button", { type: "button", onClick: handleToggleExpand, "aria-expanded": isExpanded, className: "flex w-full shrink-0 items-center gap-1.5 rounded-lg px-2 py-2 text-xs font-medium text-default-500 transition-colors hover:bg-default-100 hover:text-default-700 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-focus", children: [jsxRuntime.jsx(IconComponent, { icon: isExpanded
|
|
8197
8261
|
? "solar:alt-arrow-up-linear"
|
|
@@ -13854,7 +13918,7 @@ size, width = "100%", height = "auto", multiple = false, maxFiles = 1, maxFileSi
|
|
|
13854
13918
|
? "opacity-0"
|
|
13855
13919
|
: "opacity-100 transition-opacity", children: jsxRuntime.jsxs("div", { className: `flex flex-col items-center ${size === "micro" ? "gap-0" : size === "small" ? "gap-0.5" : "gap-1"}`, children: [jsxRuntime.jsx(IconComponent, { icon: icon, size: size === "micro" ? "sm" : size === "small" ? "md" : "lg", className: `${size === "micro" ? "text-sm"
|
|
13856
13920
|
: size === "small" ? "text-base sm:text-lg"
|
|
13857
|
-
: "text-xl sm:text-2xl"} ${disabled ? "text-default-400" : iconColor || "text-
|
|
13921
|
+
: "text-xl sm:text-2xl"} ${disabled ? "text-default-400" : iconColor || "text-accent-soft-foreground"}` }), shouldShowText && (jsxRuntime.jsxs("div", { className: `text-center ${size === "micro" ? "px-0"
|
|
13858
13922
|
: size === "small" ? "px-0.5"
|
|
13859
13923
|
: "px-1"} ${size === "micro" || size === "small"
|
|
13860
13924
|
? "upload-file-dropzone-text"
|
|
@@ -14529,7 +14593,7 @@ const NavigationLoadingOverlay = ({ isVisible, }) => {
|
|
|
14529
14593
|
*/
|
|
14530
14594
|
const DrawerFiltersFooter = ({ onClearFilters, onCancel, onApplyFilters, translations = {}, }) => {
|
|
14531
14595
|
const { clearFilters = "Limpiar filtro", cancel = "Cancelar", applyFilters = "Aplicar filtro", } = translations;
|
|
14532
|
-
return (jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-6 py-10 bg-content1", children: [jsxRuntime.jsx(Button, { variant: "light", color: "primary", onPress: onClearFilters, className: "text-
|
|
14596
|
+
return (jsxRuntime.jsxs("div", { className: "flex items-center justify-between px-6 py-10 bg-content1", children: [jsxRuntime.jsx(Button, { variant: "light", color: "primary", onPress: onClearFilters, className: "text-accent-soft-foreground", children: clearFilters }), jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [jsxRuntime.jsx(Button, { variant: "bordered", color: "primary", onPress: onCancel, children: cancel }), jsxRuntime.jsx(Button, { variant: "solid", color: "primary", onPress: onApplyFilters, children: applyFilters })] })] }));
|
|
14533
14597
|
};
|
|
14534
14598
|
|
|
14535
14599
|
/**
|
|
@@ -15074,7 +15138,7 @@ const MultiSelectFilter = ({ filter, value, onChange, translations, titleId }) =
|
|
|
15074
15138
|
classNames: {
|
|
15075
15139
|
inputWrapper: "bg-default-100 shadow-none border-0 min-h-9 h-9",
|
|
15076
15140
|
input: "text-sm",
|
|
15077
|
-
}, endContent: jsxRuntime.jsx(IconComponent, { icon: "solar:magnifer-outline", className: "pointer-events-none shrink-0 text-default-400", size: "sm", "aria-hidden": true }), "aria-label": searchPlaceholder }) })), jsxRuntime.jsx("div", { className: "max-h-60 overflow-y-auto px-1 py-1", children: filteredData.length === 0 ? (jsxRuntime.jsx("p", { className: "px-2 py-3 text-center text-xs text-default-400", children: noResultsText })) : (jsxRuntime.jsx(react.ListBox, { "aria-label": filter.title, selectionMode: "multiple", selectionBehavior: "toggle", selectedKeys: selectedKeys, onSelectionChange: handleListboxSelectionChange, disallowEmptySelection: false, className: "w-full gap-0.5 p-0", children: filteredData.map((item) => (jsxRuntime.jsx(react.ListBoxItem, { id: item.value, textValue: item.label, className: "rounded-[12px] px-2 py-2.5 text-sm font-normal text-default-600 data-[hovered=true]:bg-default-100 data-[selectable=true]:focus:bg-default-100 data-[selected=true]:bg-primary-50/80 data-[selected=true]:font-medium data-[selected=true]:text-
|
|
15141
|
+
}, endContent: jsxRuntime.jsx(IconComponent, { icon: "solar:magnifer-outline", className: "pointer-events-none shrink-0 text-default-400", size: "sm", "aria-hidden": true }), "aria-label": searchPlaceholder }) })), jsxRuntime.jsx("div", { className: "max-h-60 overflow-y-auto px-1 py-1", children: filteredData.length === 0 ? (jsxRuntime.jsx("p", { className: "px-2 py-3 text-center text-xs text-default-400", children: noResultsText })) : (jsxRuntime.jsx(react.ListBox, { "aria-label": filter.title, selectionMode: "multiple", selectionBehavior: "toggle", selectedKeys: selectedKeys, onSelectionChange: handleListboxSelectionChange, disallowEmptySelection: false, className: "w-full gap-0.5 p-0", children: filteredData.map((item) => (jsxRuntime.jsx(react.ListBoxItem, { id: item.value, textValue: item.label, className: "rounded-[12px] px-2 py-2.5 text-sm font-normal text-default-600 data-[hovered=true]:bg-default-100 data-[selectable=true]:focus:bg-default-100 data-[selected=true]:bg-primary-50/80 data-[selected=true]:font-medium data-[selected=true]:text-accent-soft-foreground", children: item.label }, item.value))) })) })] }) })] }));
|
|
15078
15142
|
};
|
|
15079
15143
|
// =========================================================================
|
|
15080
15144
|
// RANGE FILTER
|
|
@@ -17778,7 +17842,7 @@ const RADIUS_CLASS = {
|
|
|
17778
17842
|
*/
|
|
17779
17843
|
const FLAT_BASE = {
|
|
17780
17844
|
default: "bg-default-100 text-default-foreground dark:bg-default-50/50",
|
|
17781
|
-
primary: "bg-primary-50 text-
|
|
17845
|
+
primary: "bg-primary-50 text-accent-soft-foreground dark:bg-primary-50/50",
|
|
17782
17846
|
secondary: "bg-secondary-50 text-secondary-600 dark:bg-secondary-50/50",
|
|
17783
17847
|
success: "bg-success-50 text-success-700 dark:bg-success-50/50 dark:text-success",
|
|
17784
17848
|
warning: "bg-warning-50 text-warning-700 dark:bg-warning-50/50 dark:text-warning",
|
|
@@ -17796,7 +17860,7 @@ const FADED_BORDER = {
|
|
|
17796
17860
|
/** `bordered`: `colorVariants.bordered.<color>` (+ `border-small`, sin fondo). */
|
|
17797
17861
|
const BORDERED_BASE = {
|
|
17798
17862
|
default: "bg-transparent border-default text-foreground",
|
|
17799
|
-
primary: "bg-transparent border-primary text-
|
|
17863
|
+
primary: "bg-transparent border-primary text-accent-soft-foreground",
|
|
17800
17864
|
secondary: "bg-transparent border-secondary text-secondary",
|
|
17801
17865
|
success: "bg-transparent border-success text-success",
|
|
17802
17866
|
warning: "bg-transparent border-warning text-warning",
|
|
@@ -19132,6 +19196,7 @@ const THEME_COLOR_HEX_MAP = {
|
|
|
19132
19196
|
blue: "#006fee",
|
|
19133
19197
|
purple: "#7828c8",
|
|
19134
19198
|
yellow: "#ffd505",
|
|
19199
|
+
amberYellow: "#ffbf00",
|
|
19135
19200
|
green: "#16c964",
|
|
19136
19201
|
coral: "#ff4f4f",
|
|
19137
19202
|
skyBlue: "#60A5FA",
|
|
@@ -19155,6 +19220,15 @@ function colorDistance(a, b) {
|
|
|
19155
19220
|
return (a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2 + (a[2] - b[2]) ** 2;
|
|
19156
19221
|
}
|
|
19157
19222
|
const THEME_COLORS = Object.keys(THEME_COLOR_HEX_MAP);
|
|
19223
|
+
/**
|
|
19224
|
+
* Packs que solo se resuelven por coincidencia exacta de su hex, nunca como «el más
|
|
19225
|
+
* cercano». `amberYellow` es una variante oscura de `yellow` pensada para una marca
|
|
19226
|
+
* concreta: si entrara en la búsqueda por cercanía, los hex de marca ámbar/oliva de
|
|
19227
|
+
* cualquier negocio cambiarían de pack (y con él su secundario y sus estados) sin
|
|
19228
|
+
* haberlo elegido nadie.
|
|
19229
|
+
*/
|
|
19230
|
+
const EXACT_MATCH_ONLY = new Set(["amberYellow"]);
|
|
19231
|
+
const NEAREST_CANDIDATES = THEME_COLORS.filter((themeColor) => !EXACT_MATCH_ONLY.has(themeColor));
|
|
19158
19232
|
function isHexColor(value) {
|
|
19159
19233
|
return /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(value);
|
|
19160
19234
|
}
|
|
@@ -19171,7 +19245,7 @@ function hexToThemeColor(hex) {
|
|
|
19171
19245
|
const targetRgb = hexToRgb$1(hex);
|
|
19172
19246
|
let closest = "blue";
|
|
19173
19247
|
let minDistance = Number.POSITIVE_INFINITY;
|
|
19174
|
-
for (const themeColor of
|
|
19248
|
+
for (const themeColor of NEAREST_CANDIDATES) {
|
|
19175
19249
|
const themeRgb = hexToRgb$1(THEME_COLOR_HEX_MAP[themeColor]);
|
|
19176
19250
|
const dist = colorDistance(targetRgb, themeRgb);
|
|
19177
19251
|
if (dist < minDistance) {
|
|
@@ -19229,7 +19303,7 @@ function hslToCssValue(h, s, l) {
|
|
|
19229
19303
|
* Pasa un hex (`#rgb` o `#rrggbb`, en cualquier caja) a canales HSL.
|
|
19230
19304
|
*
|
|
19231
19305
|
* Se expone porque el hex es una de las dos formas en las que llega el `primary` del
|
|
19232
|
-
* tema —los
|
|
19306
|
+
* tema —los 16 packs lo emiten así en `theme-tokens.generated.css`— y `linda-tones.ts`
|
|
19233
19307
|
* necesita esa misma conversión para derivar los tonos del aura. Antes de exportarla ya
|
|
19234
19308
|
* había dos copias privadas de `hexToRgb` en esta carpeta; no hacía falta una tercera.
|
|
19235
19309
|
*/
|
|
@@ -19242,6 +19316,93 @@ function getContrastForeground(hex) {
|
|
|
19242
19316
|
const luminance = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;
|
|
19243
19317
|
return luminance > 0.5 ? "0 0% 0%" : "0 0% 100%";
|
|
19244
19318
|
}
|
|
19319
|
+
/** Contraste mínimo (WCAG) del texto de marca sobre el fondo suave de la propia marca. */
|
|
19320
|
+
const ACCENT_SOFT_FOREGROUND_MIN_CONTRAST = 3;
|
|
19321
|
+
/**
|
|
19322
|
+
* Opacidad del fondo tintado más oscuro sobre el que se pinta el token en modo claro: el
|
|
19323
|
+
* `flatBg` del Chip (accent al 20 % sobre blanco). El `--accent-soft` de HeroUI v3 en claro es
|
|
19324
|
+
* más claro (15 %), así que lo que llega aquí llega también en el Button soft.
|
|
19325
|
+
*/
|
|
19326
|
+
const SOFT_TINT_ALPHA = 0.2;
|
|
19327
|
+
/**
|
|
19328
|
+
* Proporción de `--accent` en la mezcla que trae HeroUI v3 en modo claro para
|
|
19329
|
+
* `--accent-soft-foreground`: `color-mix(in oklab, var(--accent) 70%, var(--foreground) 30%)`
|
|
19330
|
+
* (bloque `:root, .light, .default` de `@heroui/styles/dist/themes/default/variables.css`).
|
|
19331
|
+
*/
|
|
19332
|
+
const V3_LIGHT_ACCENT_SOFT_FOREGROUND_SHARE = 70;
|
|
19333
|
+
/** `--foreground` de HeroUI v3 en modo claro (`--eclipse`, oklch(0.2103 0.0059 285.89)). */
|
|
19334
|
+
const LIGHT_FOREGROUND_HEX = "#18181b";
|
|
19335
|
+
const toLinear = (c) => {
|
|
19336
|
+
const v = c / 255;
|
|
19337
|
+
return v <= 0.04045 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4;
|
|
19338
|
+
};
|
|
19339
|
+
const fromLinear = (c) => {
|
|
19340
|
+
const v = c <= 0.0031308 ? 12.92 * c : 1.055 * c ** (1 / 2.4) - 0.055;
|
|
19341
|
+
return Math.round(Math.min(Math.max(v, 0), 1) * 255);
|
|
19342
|
+
};
|
|
19343
|
+
function relativeLuminance([r, g, b]) {
|
|
19344
|
+
return 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);
|
|
19345
|
+
}
|
|
19346
|
+
function contrastRatio(a, b) {
|
|
19347
|
+
const la = relativeLuminance(a);
|
|
19348
|
+
const lb = relativeLuminance(b);
|
|
19349
|
+
return (Math.max(la, lb) + 0.05) / (Math.min(la, lb) + 0.05);
|
|
19350
|
+
}
|
|
19351
|
+
function rgbToOklab([r, g, b]) {
|
|
19352
|
+
const [lr, lg, lb] = [toLinear(r), toLinear(g), toLinear(b)];
|
|
19353
|
+
const l = Math.cbrt(0.4122214708 * lr + 0.5363325363 * lg + 0.0514459929 * lb);
|
|
19354
|
+
const m = Math.cbrt(0.2119034982 * lr + 0.6806995451 * lg + 0.1073969566 * lb);
|
|
19355
|
+
const s = Math.cbrt(0.0883024619 * lr + 0.2817188376 * lg + 0.6299787005 * lb);
|
|
19356
|
+
return [
|
|
19357
|
+
0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,
|
|
19358
|
+
1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,
|
|
19359
|
+
0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s,
|
|
19360
|
+
];
|
|
19361
|
+
}
|
|
19362
|
+
function oklabToRgb([L, a, b]) {
|
|
19363
|
+
const l = (L + 0.3963377774 * a + 0.2158037573 * b) ** 3;
|
|
19364
|
+
const m = (L - 0.1055613458 * a - 0.0638541728 * b) ** 3;
|
|
19365
|
+
const s = (L - 0.0894841775 * a - 1.291485548 * b) ** 3;
|
|
19366
|
+
return [
|
|
19367
|
+
fromLinear(4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s),
|
|
19368
|
+
fromLinear(-1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s),
|
|
19369
|
+
fromLinear(-0.0041960863 * l - 0.7034186147 * m + 1.707614701 * s),
|
|
19370
|
+
];
|
|
19371
|
+
}
|
|
19372
|
+
/** `color-mix(in oklab, accent share, foreground resto)` calculado en sRGB. */
|
|
19373
|
+
function mixOklab(accent, foreground, share) {
|
|
19374
|
+
const A = rgbToOklab(accent);
|
|
19375
|
+
const F = rgbToOklab(foreground);
|
|
19376
|
+
return oklabToRgb([0, 1, 2].map((i) => A[i] * share + F[i] * (1 - share)));
|
|
19377
|
+
}
|
|
19378
|
+
/**
|
|
19379
|
+
* Proporción de `--accent` (0–100) con la que `--accent-soft-foreground` alcanza
|
|
19380
|
+
* `minContrast` sobre su fondo tintado (el accent al 20 % sobre blanco), en modo claro.
|
|
19381
|
+
*
|
|
19382
|
+
* Devuelve `null` cuando la mezcla 70/30 que ya trae HeroUI v3 llega al mínimo: en esos
|
|
19383
|
+
* temas no se pisa nada. Si no llega, la primera proporción que sí lo hace, bajando de 1 en 1
|
|
19384
|
+
* (cuanto menos accent, más se acerca al color de texto). En el límite, 0: el propio
|
|
19385
|
+
* `--foreground`.
|
|
19386
|
+
*/
|
|
19387
|
+
function getAccentSoftForegroundShare(accentHex, minContrast = ACCENT_SOFT_FOREGROUND_MIN_CONTRAST) {
|
|
19388
|
+
const accent = hexToRgb(accentHex);
|
|
19389
|
+
const foreground = hexToRgb(LIGHT_FOREGROUND_HEX);
|
|
19390
|
+
const tint = accent.map((c) => c * SOFT_TINT_ALPHA + 255 * (1 - SOFT_TINT_ALPHA));
|
|
19391
|
+
const reaches = (share) => contrastRatio(mixOklab(accent, foreground, share), tint) >= minContrast;
|
|
19392
|
+
if (reaches(V3_LIGHT_ACCENT_SOFT_FOREGROUND_SHARE / 100)) {
|
|
19393
|
+
return null;
|
|
19394
|
+
}
|
|
19395
|
+
for (let share = V3_LIGHT_ACCENT_SOFT_FOREGROUND_SHARE - 1; share > 0; share--) {
|
|
19396
|
+
if (reaches(share / 100)) {
|
|
19397
|
+
return share;
|
|
19398
|
+
}
|
|
19399
|
+
}
|
|
19400
|
+
return 0;
|
|
19401
|
+
}
|
|
19402
|
+
/** Valor CSS de `--accent-soft-foreground` para una proporción de accent dada. */
|
|
19403
|
+
function accentSoftForegroundMix(share) {
|
|
19404
|
+
return `color-mix(in oklab, var(--accent) ${share}%, var(--foreground))`;
|
|
19405
|
+
}
|
|
19245
19406
|
const LIGHT_SHADE_LIGHTNESS = {
|
|
19246
19407
|
"50": 95,
|
|
19247
19408
|
"100": 90,
|
|
@@ -19290,6 +19451,8 @@ function generateThemeColorScale(hex, mode) {
|
|
|
19290
19451
|
return { shades, foreground, defaultValue };
|
|
19291
19452
|
}
|
|
19292
19453
|
|
|
19454
|
+
/** La mezcla que trae HeroUI v3 para `--accent-soft-foreground` en modo claro. */
|
|
19455
|
+
const V3_ACCENT_SOFT_FOREGROUND = "color-mix(in oklab, var(--accent) 70%, var(--foreground) 30%)";
|
|
19293
19456
|
const PRIMARY_SHADES = [
|
|
19294
19457
|
"50",
|
|
19295
19458
|
"100",
|
|
@@ -19309,6 +19472,7 @@ const CUSTOM_PROPERTIES = [
|
|
|
19309
19472
|
"--color-focus",
|
|
19310
19473
|
"--accent",
|
|
19311
19474
|
"--accent-foreground",
|
|
19475
|
+
"--accent-soft-foreground",
|
|
19312
19476
|
];
|
|
19313
19477
|
/**
|
|
19314
19478
|
* `generateThemeColorScale` devuelve canales HSL sueltos (`"212 100% 46.67%"`), que es lo que
|
|
@@ -19338,6 +19502,16 @@ function applyCustomPrimaryColor(hex, mode) {
|
|
|
19338
19502
|
style.setProperty("--color-focus", primary);
|
|
19339
19503
|
style.setProperty("--accent", primary);
|
|
19340
19504
|
style.setProperty("--accent-foreground", primaryForeground);
|
|
19505
|
+
// Mismo cálculo que los packs (generate-theme-tokens.mjs). Se escribe SIEMPRE en línea,
|
|
19506
|
+
// también cuando basta la mezcla de v3: la clase del pack más cercano puede traer su propia
|
|
19507
|
+
// proporción, calculada para SU color, y aquí manda el de la marca.
|
|
19508
|
+
// En oscuro no se pisa: vale la mezcla propia del tema oscuro de v3.
|
|
19509
|
+
if (mode === "dark") {
|
|
19510
|
+
style.removeProperty("--accent-soft-foreground");
|
|
19511
|
+
return;
|
|
19512
|
+
}
|
|
19513
|
+
const share = getAccentSoftForegroundShare(hex);
|
|
19514
|
+
style.setProperty("--accent-soft-foreground", share === null ? V3_ACCENT_SOFT_FOREGROUND : accentSoftForegroundMix(share));
|
|
19341
19515
|
}
|
|
19342
19516
|
function removeCustomPrimaryColor() {
|
|
19343
19517
|
const style = document.documentElement.style;
|
|
@@ -19843,6 +20017,7 @@ Object.defineProperty(exports, "loadIcons", {
|
|
|
19843
20017
|
enumerable: true,
|
|
19844
20018
|
get: function () { return react$1.loadIcons; }
|
|
19845
20019
|
});
|
|
20020
|
+
exports.ACCENT_SOFT_FOREGROUND_MIN_CONTRAST = ACCENT_SOFT_FOREGROUND_MIN_CONTRAST;
|
|
19846
20021
|
exports.ALL_THEMES = ALL_THEMES;
|
|
19847
20022
|
exports.AURORA_THEME_FAMILIES = AURORA_THEME_FAMILIES;
|
|
19848
20023
|
exports.AURORA_THEME_REGISTRY = AURORA_THEME_REGISTRY;
|
|
@@ -19959,12 +20134,14 @@ exports.ToastContext = ToastContext;
|
|
|
19959
20134
|
exports.Tooltip = Tooltip;
|
|
19960
20135
|
exports.TwoColumnLayoutAgent = TwoColumnLayoutAgent;
|
|
19961
20136
|
exports.UploadFile = UploadFile;
|
|
20137
|
+
exports.V3_LIGHT_ACCENT_SOFT_FOREGROUND_SHARE = V3_LIGHT_ACCENT_SOFT_FOREGROUND_SHARE;
|
|
19962
20138
|
exports.VerticalSteps = VerticalSteps;
|
|
19963
20139
|
exports.ViolinPlot = ViolinPlot;
|
|
19964
20140
|
exports.WhatsAppPreview = WhatsAppPreview;
|
|
19965
20141
|
exports.Wizard = Wizard;
|
|
19966
20142
|
exports.WizardNavigation = WizardNavigation;
|
|
19967
20143
|
exports.WizardSidebar = WizardSidebar;
|
|
20144
|
+
exports.accentSoftForegroundMix = accentSoftForegroundMix;
|
|
19968
20145
|
exports.applyCustomPrimaryColor = applyCustomPrimaryColor;
|
|
19969
20146
|
exports.applyLindaTones = applyLindaTones;
|
|
19970
20147
|
exports.cn = cn;
|
|
@@ -19983,6 +20160,7 @@ exports.forceLightOnlyThemeBeforeReact = forceLightOnlyThemeBeforeReact;
|
|
|
19983
20160
|
exports.formatAuroraThemeTooltip = formatAuroraThemeTooltip;
|
|
19984
20161
|
exports.formatDonutPercent = formatDonutPercent;
|
|
19985
20162
|
exports.generateThemeColorScale = generateThemeColorScale;
|
|
20163
|
+
exports.getAccentSoftForegroundShare = getAccentSoftForegroundShare;
|
|
19986
20164
|
exports.getContrastForeground = getContrastForeground;
|
|
19987
20165
|
exports.getRegisteredThemeColorBases = getRegisteredThemeColorBases;
|
|
19988
20166
|
exports.getSelectedKeyFromPath = getSelectedKeyFromPath;
|