@beweco/aurora-ui 0.1.60 → 0.1.62
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/assets/css/styles.css +1 -1
- package/dist/index.cjs.js +313 -11
- package/dist/index.esm.js +304 -12
- package/dist/types/components/input-password/InputPassword.d.ts +3 -0
- package/dist/types/components/input-password/InputPassword.d.ts.map +1 -0
- package/dist/types/components/input-password/InputPassword.types.d.ts +19 -0
- package/dist/types/components/input-password/InputPassword.types.d.ts.map +1 -0
- package/dist/types/components/input-password/index.d.ts +3 -0
- package/dist/types/components/input-password/index.d.ts.map +1 -0
- package/dist/types/components/menu/Menu.d.ts.map +1 -1
- package/dist/types/components/menu/Menu.types.d.ts +4 -0
- package/dist/types/components/menu/Menu.types.d.ts.map +1 -1
- package/dist/types/contexts/theme/theme-context.d.ts.map +1 -1
- package/dist/types/contexts/theme/theme-context.type.d.ts +2 -1
- package/dist/types/contexts/theme/theme-context.type.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/providers/theme/apply-custom-color.d.ts +4 -0
- package/dist/types/providers/theme/apply-custom-color.d.ts.map +1 -0
- package/dist/types/providers/theme/generate-color-scale.d.ts +10 -0
- package/dist/types/providers/theme/generate-color-scale.d.ts.map +1 -0
- package/dist/types/providers/theme/hex-to-theme-color.d.ts +6 -0
- package/dist/types/providers/theme/hex-to-theme-color.d.ts.map +1 -0
- package/dist/types/providers/theme/index.d.ts +3 -0
- package/dist/types/providers/theme/index.d.ts.map +1 -1
- package/dist/types/providers/theme/theme-provider.d.ts.map +1 -1
- package/dist/types/providers/theme/useThemeManager.d.ts +4 -2
- package/dist/types/providers/theme/useThemeManager.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.js
CHANGED
|
@@ -785,6 +785,7 @@ ColorPicker.displayName = "ColorPicker";
|
|
|
785
785
|
var ThemeContext = React.createContext({
|
|
786
786
|
mode: "light",
|
|
787
787
|
color: "blue",
|
|
788
|
+
customHex: null,
|
|
788
789
|
// biome-ignore lint/suspicious/noEmptyBlockStatements: <explanation>
|
|
789
790
|
setMode: function () { },
|
|
790
791
|
// biome-ignore lint/suspicious/noEmptyBlockStatements: <explanation>
|
|
@@ -2190,6 +2191,8 @@ var DEFAULT_TRANSLATIONS$3 = {
|
|
|
2190
2191
|
mobileNavAriaLabel: "Navegación móvil",
|
|
2191
2192
|
logoAlt: "Logo de",
|
|
2192
2193
|
notDefinedLabel: "no definido",
|
|
2194
|
+
scrollUpAriaLabel: "Subir menú",
|
|
2195
|
+
scrollDownAriaLabel: "Bajar menú",
|
|
2193
2196
|
};
|
|
2194
2197
|
/**
|
|
2195
2198
|
* Sidebar menu component for navigation and user actions.
|
|
@@ -2266,7 +2269,7 @@ var MenuComponent = React.memo(function Menu(_a) {
|
|
|
2266
2269
|
// Drag-to-scroll: clic sostenido + arrastre en el área de scroll del menú
|
|
2267
2270
|
var scrollContainerRef = React.useRef(null);
|
|
2268
2271
|
var dragStateRef = React.useRef({ startY: 0, startScrollTop: 0, isDragging: false, prevClientY: 0 });
|
|
2269
|
-
var _h = React.useState(false)
|
|
2272
|
+
var _h = React.useState(false), isDraggingScroll = _h[0], setIsDraggingScroll = _h[1];
|
|
2270
2273
|
var handleScrollAreaMouseMove = React.useCallback(function (e) {
|
|
2271
2274
|
var el = scrollContainerRef.current;
|
|
2272
2275
|
if (!el)
|
|
@@ -2299,7 +2302,7 @@ var MenuComponent = React.memo(function Menu(_a) {
|
|
|
2299
2302
|
setTimeout(function () { return document.removeEventListener("click", preventClick_1, true); }, 50);
|
|
2300
2303
|
}
|
|
2301
2304
|
}, [handleScrollAreaMouseMove]);
|
|
2302
|
-
React.useCallback(function (e) {
|
|
2305
|
+
var handleScrollAreaMouseDown = React.useCallback(function (e) {
|
|
2303
2306
|
if (e.button !== 0)
|
|
2304
2307
|
return;
|
|
2305
2308
|
var el = scrollContainerRef.current;
|
|
@@ -2320,13 +2323,58 @@ var MenuComponent = React.memo(function Menu(_a) {
|
|
|
2320
2323
|
document.removeEventListener("mouseup", handleScrollAreaMouseUp);
|
|
2321
2324
|
};
|
|
2322
2325
|
}, [handleScrollAreaMouseMove, handleScrollAreaMouseUp]);
|
|
2326
|
+
// Indicadores de scroll: flechas arriba/abajo cuando el contenido requiere scroll
|
|
2327
|
+
var _j = React.useState({
|
|
2328
|
+
canScrollUp: false,
|
|
2329
|
+
canScrollDown: false,
|
|
2330
|
+
}), scrollState = _j[0], setScrollState = _j[1];
|
|
2331
|
+
var SCROLL_STEP_PX = 120;
|
|
2332
|
+
var updateScrollIndicators = React.useCallback(function () {
|
|
2333
|
+
var el = scrollContainerRef.current;
|
|
2334
|
+
if (!el)
|
|
2335
|
+
return;
|
|
2336
|
+
var scrollTop = el.scrollTop, scrollHeight = el.scrollHeight, clientHeight = el.clientHeight;
|
|
2337
|
+
var canScrollUp = scrollTop > 2;
|
|
2338
|
+
var canScrollDown = scrollTop < scrollHeight - clientHeight - 2;
|
|
2339
|
+
setScrollState(function (prev) {
|
|
2340
|
+
return prev.canScrollUp !== canScrollUp || prev.canScrollDown !== canScrollDown
|
|
2341
|
+
? { canScrollUp: canScrollUp, canScrollDown: canScrollDown }
|
|
2342
|
+
: prev;
|
|
2343
|
+
});
|
|
2344
|
+
}, []);
|
|
2345
|
+
React.useEffect(function () {
|
|
2346
|
+
var el = scrollContainerRef.current;
|
|
2347
|
+
if (!el)
|
|
2348
|
+
return;
|
|
2349
|
+
updateScrollIndicators();
|
|
2350
|
+
var ro = new ResizeObserver(updateScrollIndicators);
|
|
2351
|
+
ro.observe(el);
|
|
2352
|
+
el.addEventListener("scroll", updateScrollIndicators);
|
|
2353
|
+
return function () {
|
|
2354
|
+
ro.disconnect();
|
|
2355
|
+
el.removeEventListener("scroll", updateScrollIndicators);
|
|
2356
|
+
};
|
|
2357
|
+
}, [updateScrollIndicators, menuItems.items, isCollapsed]);
|
|
2358
|
+
var handleScrollUp = React.useCallback(function () {
|
|
2359
|
+
var el = scrollContainerRef.current;
|
|
2360
|
+
if (!el)
|
|
2361
|
+
return;
|
|
2362
|
+
el.scrollBy({ top: -SCROLL_STEP_PX, behavior: "smooth" });
|
|
2363
|
+
}, []);
|
|
2364
|
+
var handleScrollDown = React.useCallback(function () {
|
|
2365
|
+
var el = scrollContainerRef.current;
|
|
2366
|
+
if (!el)
|
|
2367
|
+
return;
|
|
2368
|
+
el.scrollBy({ top: SCROLL_STEP_PX, behavior: "smooth" });
|
|
2369
|
+
}, []);
|
|
2370
|
+
var showScrollArrows = scrollState.canScrollUp || scrollState.canScrollDown;
|
|
2323
2371
|
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [showBottomBar && (jsxRuntime.jsx(MenuMobileBottomBar, { items: bottomBarItems, selectedKey: selectedKey, onSelect: handleBottomBarSelect, onMenuPress: handleSidebarOpen, menuLabel: t.menuLabel, navAriaLabel: t.mobileNavAriaLabel, forceVisible: showNativeMenu && bottomBarItems.length === 0 })), jsxRuntime.jsx("button", { type: "button", "aria-label": t.closeSidebarAriaLabel, className: "menu-overlay ".concat(isOpenSidebar ? "menu-overlay--open" : ""), onClick: handleSidebarClose, tabIndex: isOpenSidebar ? 0 : -1 }), jsxRuntime.jsx("div", { className: "container__menu ".concat(isCollapsed
|
|
2324
2372
|
? "container__menu--collapsed"
|
|
2325
2373
|
: "container__menu--expanded", " ").concat(isOpenSidebar ? "container__menu--mobile-open" : ""), "aria-hidden": !isOpenSidebar, children: jsxRuntime.jsxs("div", { className: "content__menu", children: [jsxRuntime.jsxs("div", { className: "content__menu--header", style: {
|
|
2326
2374
|
flexDirection: isCollapsed ? "column-reverse" : "row",
|
|
2327
2375
|
}, children: [jsxRuntime.jsxs("div", { className: "flex flex-row items-center justify-center ".concat(isCollapsed ? "gap-0" : "gap-2"), children: [jsxRuntime.jsx("div", { className: "flex h-8 w-8 shrink-0 items-center justify-center overflow-hidden rounded-full bg-foreground text-background", children: hasValidLogo ? (jsxRuntime.jsx("img", { src: commerceInfo.logo, alt: "".concat(t.logoAlt, " ").concat(commerceName), className: "h-full w-full object-cover", onError: function () { return setLogoError(true); } })) : (jsxRuntime.jsx(IconComponent, { icon: "solar:buildings-2-outline", size: "sm", className: "shrink-0", "aria-hidden": true })) }), jsxRuntime.jsx("span", { className: "collapsible-item text-small font-bold truncate min-w-0", children: commerceName })] }), jsxRuntime.jsxs("div", { className: "flex items-center", children: [jsxRuntime.jsx(IconComponent, { icon: "material-symbols-light:close", size: "lg", className: "cursor-pointer block sm:hidden", onClick: handleSidebarClose }), jsxRuntime.jsx(IconComponent, { icon: isCollapsed
|
|
2328
2376
|
? "solar:alt-arrow-right-outline"
|
|
2329
|
-
: "solar:alt-arrow-left-outline", size: "lg", className: "hidden sm:block cursor-pointer", onClick: handleCollapseToggle })] })] }), jsxRuntime.jsx(react.Spacer, { y: 6 }), jsxRuntime.jsxs("div", { className: "content__menu--user ".concat(isCollapsed ? "gap-0" : "gap-3"), children: [jsxRuntime.jsx(react.Avatar, { size: "md", src: ((_b = userInfo === null || userInfo === void 0 ? void 0 : userInfo.avatar) === null || _b === void 0 ? void 0 : _b.trim()) || undefined, color: !((_c = userInfo === null || userInfo === void 0 ? void 0 : userInfo.avatar) === null || _c === void 0 ? void 0 : _c.trim()) ? "warning" : "default", name: userName, className: "shrink-0" }), jsxRuntime.jsxs("div", { className: "collapsible-item flex min-w-0 flex-col overflow-hidden", children: [jsxRuntime.jsx("p", { className: "text-small font-medium text-default-900 truncate", children: userName }), jsxRuntime.jsx("p", { className: "text-tiny text-default-400 truncate", children: userRole })] })] }), jsxRuntime.
|
|
2377
|
+
: "solar:alt-arrow-left-outline", size: "lg", className: "hidden sm:block cursor-pointer", onClick: handleCollapseToggle })] })] }), jsxRuntime.jsx(react.Spacer, { y: 6 }), jsxRuntime.jsxs("div", { className: "content__menu--user ".concat(isCollapsed ? "gap-0" : "gap-3"), children: [jsxRuntime.jsx(react.Avatar, { size: "md", src: ((_b = userInfo === null || userInfo === void 0 ? void 0 : userInfo.avatar) === null || _b === void 0 ? void 0 : _b.trim()) || undefined, color: !((_c = userInfo === null || userInfo === void 0 ? void 0 : userInfo.avatar) === null || _c === void 0 ? void 0 : _c.trim()) ? "warning" : "default", name: userName, className: "shrink-0" }), jsxRuntime.jsxs("div", { className: "collapsible-item flex min-w-0 flex-col overflow-hidden", children: [jsxRuntime.jsx("p", { className: "text-small font-medium text-default-900 truncate", children: userName }), jsxRuntime.jsx("p", { className: "text-tiny text-default-400 truncate", children: userRole })] })] }), jsxRuntime.jsxs("div", { className: "".concat(!isCollapsed ? "flex-1" : "h-full", " min-h-0 py-6 relative"), children: [!isCollapsed && showScrollArrows && (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [scrollState.canScrollUp && (jsxRuntime.jsx("button", { type: "button", "aria-label": t.scrollUpAriaLabel, className: "menu-scroll-arrow menu-scroll-arrow--up", onClick: handleScrollUp, children: jsxRuntime.jsx(IconComponent, { icon: "solar:alt-arrow-up-outline", size: "lg", "aria-hidden": true }) })), scrollState.canScrollDown && (jsxRuntime.jsx("button", { type: "button", "aria-label": t.scrollDownAriaLabel, className: "menu-scroll-arrow menu-scroll-arrow--down", onClick: handleScrollDown, children: jsxRuntime.jsx(IconComponent, { icon: "solar:alt-arrow-down-outline", size: "lg", "aria-hidden": true }) }))] })), jsxRuntime.jsx("div", { ref: scrollContainerRef, className: "h-full overflow-y-auto pr-6 -mr-6 [&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none] select-none ".concat(isDraggingScroll ? "cursor-grabbing" : ""), onMouseDown: handleScrollAreaMouseDown, children: jsxRuntime.jsx(MenuNavList, { defaultSelectedKey: selectedKey, items: menuItems.items, isCollapsed: isCollapsed, onSelect: handleMenuSelect }, selectedKey) })] }), jsxRuntime.jsx("div", { className: "mt-auto flex flex-col justify-center items-center", children: jsxRuntime.jsx(react.Button, { fullWidth: true, className: " text-default-500 data-[hover=true]:text-default-600", startContent: jsxRuntime.jsx(IconComponent, { className: "text-default-500", icon: "solar:info-circle-line-duotone", size: "md" }), variant: "light", onPress: handleHelpClick, isIconOnly: isCollapsed, children: !isCollapsed && (jsxRuntime.jsx("span", { className: "collapsible-item truncate", children: helpTitle })) }) })] }) })] }));
|
|
2330
2378
|
});
|
|
2331
2379
|
|
|
2332
2380
|
var StepIndicator = function (_a) {
|
|
@@ -3915,7 +3963,7 @@ var ORB_SIZES = {
|
|
|
3915
3963
|
xl: 192,
|
|
3916
3964
|
};
|
|
3917
3965
|
|
|
3918
|
-
var isHexColor = function (value) {
|
|
3966
|
+
var isHexColor$1 = function (value) {
|
|
3919
3967
|
var normalized = value.startsWith("#") ? value.slice(1) : value;
|
|
3920
3968
|
return /^[0-9A-Fa-f]{3}$|^[0-9A-Fa-f]{6}$/.test(normalized);
|
|
3921
3969
|
};
|
|
@@ -3933,7 +3981,7 @@ var hexToRgba = function (hexColor, alpha) {
|
|
|
3933
3981
|
return "rgba(".concat(r, ", ").concat(g, ", ").concat(b, ", ").concat(alpha, ")");
|
|
3934
3982
|
};
|
|
3935
3983
|
var colorWithAlpha = function (color, alpha) {
|
|
3936
|
-
if (isHexColor(color)) {
|
|
3984
|
+
if (isHexColor$1(color)) {
|
|
3937
3985
|
var normalized = color.startsWith("#") ? color : "#".concat(color);
|
|
3938
3986
|
return hexToRgba(normalized, alpha);
|
|
3939
3987
|
}
|
|
@@ -5624,6 +5672,27 @@ var DrawerFilters = function (_a) {
|
|
|
5624
5672
|
};
|
|
5625
5673
|
DrawerFilters.displayName = "DrawerFilters";
|
|
5626
5674
|
|
|
5675
|
+
var InputPassword = function (_a) {
|
|
5676
|
+
var _b, _c;
|
|
5677
|
+
var translations = _a.translations, _d = _a.showCriteria, showCriteria = _d === void 0 ? false : _d, criteria = _a.criteria, _e = _a.isPristine, isPristine = _e === void 0 ? true : _e, renderCriterionLabel = _a.renderCriterionLabel, _f = _a.criteriaId, criteriaId = _f === void 0 ? "password-criteria" : _f, inputProps = __rest(_a, ["translations", "showCriteria", "criteria", "isPristine", "renderCriterionLabel", "criteriaId"]);
|
|
5678
|
+
var _g = React.useState(false), showPassword = _g[0], setShowPassword = _g[1];
|
|
5679
|
+
var togglePasswordVisibility = function () {
|
|
5680
|
+
setShowPassword(function (prev) { return !prev; });
|
|
5681
|
+
};
|
|
5682
|
+
var showLabel = (_b = translations === null || translations === void 0 ? void 0 : translations.showPassword) !== null && _b !== void 0 ? _b : "Show password";
|
|
5683
|
+
var hideLabel = (_c = translations === null || translations === void 0 ? void 0 : translations.hidePassword) !== null && _c !== void 0 ? _c : "Hide password";
|
|
5684
|
+
return (jsxRuntime.jsxs("div", { className: "flex flex-col w-full", children: [jsxRuntime.jsx(Input, __assign({}, inputProps, { type: showPassword ? "text" : "password", "aria-describedby": showCriteria ? criteriaId : inputProps["aria-describedby"], endContent: jsxRuntime.jsx("button", { type: "button", tabIndex: -1, onClick: togglePasswordVisibility, className: "focus:outline-none", "aria-label": showPassword ? hideLabel : showLabel, children: showPassword ? (jsxRuntime.jsx(IconComponent, { icon: "lucide:eye-off", color: "gray" })) : (jsxRuntime.jsx(IconComponent, { icon: "lucide:eye", color: "gray" })) }) })), showCriteria && criteria && criteria.length > 0 && (jsxRuntime.jsx("fieldset", { id: criteriaId, className: "mt-2", children: jsxRuntime.jsx("ul", { className: "flex flex-col gap-2 list-none", children: criteria.map(function (criterion, idx) {
|
|
5685
|
+
var colorClass = criterion.passed
|
|
5686
|
+
? "text-success"
|
|
5687
|
+
: isPristine
|
|
5688
|
+
? "text-default-500"
|
|
5689
|
+
: "text-danger-500";
|
|
5690
|
+
return (jsxRuntime.jsxs("li", { className: "flex items-center gap-2 text-tiny w-full text-left ".concat(colorClass), "aria-label": "".concat(criterion.label, ": ").concat(criterion.passed ? "met" : "not met"), children: [criterion.passed ? (jsxRuntime.jsx(IconComponent, { icon: "ic:round-check", className: "text-success", "aria-hidden": "true" })) : (jsxRuntime.jsx(IconComponent, { icon: "solar:close-circle-linear", className: colorClass, "aria-hidden": "true" })), renderCriterionLabel
|
|
5691
|
+
? renderCriterionLabel(criterion.label)
|
|
5692
|
+
: criterion.label] }, "".concat(criteriaId, "-").concat(idx)));
|
|
5693
|
+
}) }) }))] }));
|
|
5694
|
+
};
|
|
5695
|
+
|
|
5627
5696
|
var DEFAULT_TRANSLATIONS = {
|
|
5628
5697
|
placeholder: "Nombre de la etiqueta",
|
|
5629
5698
|
labelSelect: "Selecciona etiqueta",
|
|
@@ -5724,6 +5793,195 @@ var Card = function (_a) {
|
|
|
5724
5793
|
return (jsxRuntime.jsx(react.Card, __assign({ shadow: shadow, radius: radius, className: combinedClassName }, props, { children: children })));
|
|
5725
5794
|
};
|
|
5726
5795
|
|
|
5796
|
+
var THEME_COLOR_HEX_MAP = {
|
|
5797
|
+
blue: "#006fee",
|
|
5798
|
+
purple: "#7828c8",
|
|
5799
|
+
yellow: "#ffd505",
|
|
5800
|
+
green: "#16c964",
|
|
5801
|
+
coral: "#ff4f4f",
|
|
5802
|
+
};
|
|
5803
|
+
function hexToRgb$1(hex) {
|
|
5804
|
+
var clean = hex.replace("#", "");
|
|
5805
|
+
var normalized = clean.length === 3
|
|
5806
|
+
? clean
|
|
5807
|
+
.split("")
|
|
5808
|
+
.map(function (c) { return c + c; })
|
|
5809
|
+
.join("")
|
|
5810
|
+
: clean;
|
|
5811
|
+
return [
|
|
5812
|
+
Number.parseInt(normalized.slice(0, 2), 16),
|
|
5813
|
+
Number.parseInt(normalized.slice(2, 4), 16),
|
|
5814
|
+
Number.parseInt(normalized.slice(4, 6), 16),
|
|
5815
|
+
];
|
|
5816
|
+
}
|
|
5817
|
+
function colorDistance(a, b) {
|
|
5818
|
+
return Math.pow((a[0] - b[0]), 2) + Math.pow((a[1] - b[1]), 2) + Math.pow((a[2] - b[2]), 2);
|
|
5819
|
+
}
|
|
5820
|
+
var THEME_COLORS = Object.keys(THEME_COLOR_HEX_MAP);
|
|
5821
|
+
function isHexColor(value) {
|
|
5822
|
+
return /^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6})$/.test(value);
|
|
5823
|
+
}
|
|
5824
|
+
function isExactThemeColor(hex) {
|
|
5825
|
+
var normalized = hex.toLowerCase();
|
|
5826
|
+
for (var _i = 0, THEME_COLORS_1 = THEME_COLORS; _i < THEME_COLORS_1.length; _i++) {
|
|
5827
|
+
var themeColor = THEME_COLORS_1[_i];
|
|
5828
|
+
if (THEME_COLOR_HEX_MAP[themeColor].toLowerCase() === normalized) {
|
|
5829
|
+
return themeColor;
|
|
5830
|
+
}
|
|
5831
|
+
}
|
|
5832
|
+
return null;
|
|
5833
|
+
}
|
|
5834
|
+
function hexToThemeColor(hex) {
|
|
5835
|
+
var targetRgb = hexToRgb$1(hex);
|
|
5836
|
+
var closest = "blue";
|
|
5837
|
+
var minDistance = Number.POSITIVE_INFINITY;
|
|
5838
|
+
for (var _i = 0, THEME_COLORS_2 = THEME_COLORS; _i < THEME_COLORS_2.length; _i++) {
|
|
5839
|
+
var themeColor = THEME_COLORS_2[_i];
|
|
5840
|
+
var themeRgb = hexToRgb$1(THEME_COLOR_HEX_MAP[themeColor]);
|
|
5841
|
+
var dist = colorDistance(targetRgb, themeRgb);
|
|
5842
|
+
if (dist < minDistance) {
|
|
5843
|
+
minDistance = dist;
|
|
5844
|
+
closest = themeColor;
|
|
5845
|
+
}
|
|
5846
|
+
}
|
|
5847
|
+
return closest;
|
|
5848
|
+
}
|
|
5849
|
+
|
|
5850
|
+
function hexToRgb(hex) {
|
|
5851
|
+
var clean = hex.replace("#", "");
|
|
5852
|
+
var normalized = clean.length === 3
|
|
5853
|
+
? clean
|
|
5854
|
+
.split("")
|
|
5855
|
+
.map(function (c) { return c + c; })
|
|
5856
|
+
.join("")
|
|
5857
|
+
: clean;
|
|
5858
|
+
return [
|
|
5859
|
+
Number.parseInt(normalized.slice(0, 2), 16),
|
|
5860
|
+
Number.parseInt(normalized.slice(2, 4), 16),
|
|
5861
|
+
Number.parseInt(normalized.slice(4, 6), 16),
|
|
5862
|
+
];
|
|
5863
|
+
}
|
|
5864
|
+
function rgbToHsl(r, g, b) {
|
|
5865
|
+
r /= 255;
|
|
5866
|
+
g /= 255;
|
|
5867
|
+
b /= 255;
|
|
5868
|
+
var max = Math.max(r, g, b);
|
|
5869
|
+
var min = Math.min(r, g, b);
|
|
5870
|
+
var l = (max + min) / 2;
|
|
5871
|
+
var h = 0;
|
|
5872
|
+
var s = 0;
|
|
5873
|
+
if (max !== min) {
|
|
5874
|
+
var d = max - min;
|
|
5875
|
+
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
|
5876
|
+
switch (max) {
|
|
5877
|
+
case r:
|
|
5878
|
+
h = ((g - b) / d + (g < b ? 6 : 0)) / 6;
|
|
5879
|
+
break;
|
|
5880
|
+
case g:
|
|
5881
|
+
h = ((b - r) / d + 2) / 6;
|
|
5882
|
+
break;
|
|
5883
|
+
case b:
|
|
5884
|
+
h = ((r - g) / d + 4) / 6;
|
|
5885
|
+
break;
|
|
5886
|
+
}
|
|
5887
|
+
}
|
|
5888
|
+
return { h: h * 360, s: s * 100, l: l * 100 };
|
|
5889
|
+
}
|
|
5890
|
+
function hslToCssValue(h, s, l) {
|
|
5891
|
+
return "".concat(h, " ").concat(s, "% ").concat(l, "%");
|
|
5892
|
+
}
|
|
5893
|
+
function getContrastForeground(hex) {
|
|
5894
|
+
var _a = hexToRgb(hex), r = _a[0], g = _a[1], b = _a[2];
|
|
5895
|
+
var luminance = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;
|
|
5896
|
+
return luminance > 0.5 ? "0 0% 0%" : "0 0% 100%";
|
|
5897
|
+
}
|
|
5898
|
+
var LIGHT_SHADE_LIGHTNESS = {
|
|
5899
|
+
"50": 95,
|
|
5900
|
+
"100": 90,
|
|
5901
|
+
"200": 82,
|
|
5902
|
+
"300": 72,
|
|
5903
|
+
"400": 60,
|
|
5904
|
+
};
|
|
5905
|
+
var DARK_SHADE_FACTORS = {
|
|
5906
|
+
"600": 0.83,
|
|
5907
|
+
"700": 0.67,
|
|
5908
|
+
"800": 0.50,
|
|
5909
|
+
"900": 0.33,
|
|
5910
|
+
};
|
|
5911
|
+
function generateLightScale(h, s, l) {
|
|
5912
|
+
var scale = {};
|
|
5913
|
+
for (var _i = 0, _a = Object.entries(LIGHT_SHADE_LIGHTNESS); _i < _a.length; _i++) {
|
|
5914
|
+
var _b = _a[_i], shade = _b[0], targetL = _b[1];
|
|
5915
|
+
var shadeL = l + (targetL - l) * ((targetL - l) / (95 - l));
|
|
5916
|
+
var clampedL = Math.min(Math.max(shadeL, 0), 100);
|
|
5917
|
+
var shadedS = Number(shade) <= 100 ? s * 0.92 : s;
|
|
5918
|
+
scale[shade] = hslToCssValue(h, Math.min(shadedS, 100), clampedL);
|
|
5919
|
+
}
|
|
5920
|
+
scale["500"] = hslToCssValue(h, s, l);
|
|
5921
|
+
for (var _c = 0, _d = Object.entries(DARK_SHADE_FACTORS); _c < _d.length; _c++) {
|
|
5922
|
+
var _e = _d[_c], shade = _e[0], factor = _e[1];
|
|
5923
|
+
var shadeL = l * factor;
|
|
5924
|
+
var shadedS = Number(shade) >= 800 ? s * 0.92 : s;
|
|
5925
|
+
scale[shade] = hslToCssValue(h, Math.min(shadedS, 100), Math.max(shadeL, 0));
|
|
5926
|
+
}
|
|
5927
|
+
return scale;
|
|
5928
|
+
}
|
|
5929
|
+
function reversScale(scale) {
|
|
5930
|
+
var shades = ["50", "100", "200", "300", "400", "500", "600", "700", "800", "900"];
|
|
5931
|
+
var values = shades.map(function (s) { return scale[s]; });
|
|
5932
|
+
var reversed = {};
|
|
5933
|
+
for (var i = 0; i < shades.length; i++) {
|
|
5934
|
+
reversed[shades[i]] = values[shades.length - 1 - i];
|
|
5935
|
+
}
|
|
5936
|
+
return reversed;
|
|
5937
|
+
}
|
|
5938
|
+
function generateThemeColorScale(hex, mode) {
|
|
5939
|
+
var _a = hexToRgb(hex), r = _a[0], g = _a[1], b = _a[2];
|
|
5940
|
+
var _b = rgbToHsl(r, g, b), h = _b.h, s = _b.s, l = _b.l;
|
|
5941
|
+
var lightScale = generateLightScale(h, s, l);
|
|
5942
|
+
var shades = mode === "dark" ? reversScale(lightScale) : lightScale;
|
|
5943
|
+
var foreground = getContrastForeground(hex);
|
|
5944
|
+
var defaultValue = hslToCssValue(h, s, l);
|
|
5945
|
+
return { shades: shades, foreground: foreground, defaultValue: defaultValue };
|
|
5946
|
+
}
|
|
5947
|
+
|
|
5948
|
+
var PRIMARY_SHADES = [
|
|
5949
|
+
"50",
|
|
5950
|
+
"100",
|
|
5951
|
+
"200",
|
|
5952
|
+
"300",
|
|
5953
|
+
"400",
|
|
5954
|
+
"500",
|
|
5955
|
+
"600",
|
|
5956
|
+
"700",
|
|
5957
|
+
"800",
|
|
5958
|
+
"900",
|
|
5959
|
+
];
|
|
5960
|
+
var CUSTOM_PROPERTIES = __spreadArray(__spreadArray([
|
|
5961
|
+
"--heroui-primary"
|
|
5962
|
+
], PRIMARY_SHADES.map(function (s) { return "--heroui-primary-".concat(s); }), true), [
|
|
5963
|
+
"--heroui-primary-foreground",
|
|
5964
|
+
"--heroui-focus",
|
|
5965
|
+
], false);
|
|
5966
|
+
function applyCustomPrimaryColor(hex, mode) {
|
|
5967
|
+
var _a = generateThemeColorScale(hex, mode), shades = _a.shades, foreground = _a.foreground, defaultValue = _a.defaultValue;
|
|
5968
|
+
var style = document.documentElement.style;
|
|
5969
|
+
style.setProperty("--heroui-primary", defaultValue);
|
|
5970
|
+
for (var _i = 0, PRIMARY_SHADES_1 = PRIMARY_SHADES; _i < PRIMARY_SHADES_1.length; _i++) {
|
|
5971
|
+
var shade = PRIMARY_SHADES_1[_i];
|
|
5972
|
+
style.setProperty("--heroui-primary-".concat(shade), shades[shade]);
|
|
5973
|
+
}
|
|
5974
|
+
style.setProperty("--heroui-primary-foreground", foreground);
|
|
5975
|
+
style.setProperty("--heroui-focus", defaultValue);
|
|
5976
|
+
}
|
|
5977
|
+
function removeCustomPrimaryColor() {
|
|
5978
|
+
var style = document.documentElement.style;
|
|
5979
|
+
for (var _i = 0, CUSTOM_PROPERTIES_1 = CUSTOM_PROPERTIES; _i < CUSTOM_PROPERTIES_1.length; _i++) {
|
|
5980
|
+
var prop = CUSTOM_PROPERTIES_1[_i];
|
|
5981
|
+
style.removeProperty(prop);
|
|
5982
|
+
}
|
|
5983
|
+
}
|
|
5984
|
+
|
|
5727
5985
|
/**
|
|
5728
5986
|
* @file This file contains the theme configurations for the application.
|
|
5729
5987
|
*/
|
|
@@ -5731,10 +5989,12 @@ var ALL_THEMES = __spreadArray(["light", "dark"], Object.keys(themeColors), true
|
|
|
5731
5989
|
|
|
5732
5990
|
/**
|
|
5733
5991
|
* Custom hook to manage the theme state and side effects.
|
|
5734
|
-
*
|
|
5992
|
+
* Supports both named ThemeColor values and arbitrary hex colors.
|
|
5993
|
+
* @returns An object with the current mode, color, customHex, and functions to set them.
|
|
5735
5994
|
*/
|
|
5736
5995
|
var useThemeManager = function () {
|
|
5737
5996
|
var _a = useTheme.useTheme(), rawTheme = _a.theme, setRawTheme = _a.setTheme;
|
|
5997
|
+
var _b = React.useState(null), customHex = _b[0], setCustomHex = _b[1];
|
|
5738
5998
|
var setTheme = React.useCallback(function (theme) {
|
|
5739
5999
|
var _a;
|
|
5740
6000
|
var html = document.documentElement;
|
|
@@ -5747,7 +6007,7 @@ var useThemeManager = function () {
|
|
|
5747
6007
|
(_a = html.classList).remove.apply(_a, ALL_THEMES);
|
|
5748
6008
|
html.classList.add(rawTheme);
|
|
5749
6009
|
}, [rawTheme]);
|
|
5750
|
-
var
|
|
6010
|
+
var _c = React.useMemo(function () {
|
|
5751
6011
|
var parts = rawTheme.split("-");
|
|
5752
6012
|
var parsedColor = "blue";
|
|
5753
6013
|
var parsedMode = "light";
|
|
@@ -5760,18 +6020,49 @@ var useThemeManager = function () {
|
|
|
5760
6020
|
parsedMode = rawTheme;
|
|
5761
6021
|
}
|
|
5762
6022
|
return { mode: parsedMode, color: parsedColor };
|
|
5763
|
-
}, [rawTheme]), mode =
|
|
6023
|
+
}, [rawTheme]), mode = _c.mode, color = _c.color;
|
|
6024
|
+
React.useEffect(function () {
|
|
6025
|
+
if (customHex) {
|
|
6026
|
+
applyCustomPrimaryColor(customHex, mode);
|
|
6027
|
+
}
|
|
6028
|
+
else {
|
|
6029
|
+
removeCustomPrimaryColor();
|
|
6030
|
+
}
|
|
6031
|
+
}, [customHex, mode]);
|
|
5764
6032
|
var setMode = React.useCallback(function (newMode) {
|
|
5765
6033
|
var newTheme = color === "blue" ? newMode : "".concat(color, "-").concat(newMode);
|
|
5766
6034
|
setTheme(newTheme);
|
|
5767
6035
|
}, [color, setTheme]);
|
|
5768
6036
|
var setColor = React.useCallback(function (newColor) {
|
|
5769
|
-
|
|
5770
|
-
|
|
6037
|
+
if (isHexColor(newColor)) {
|
|
6038
|
+
var exactMatch = isExactThemeColor(newColor);
|
|
6039
|
+
if (exactMatch) {
|
|
6040
|
+
setCustomHex(null);
|
|
6041
|
+
var newTheme = exactMatch === "blue" ? mode : "".concat(exactMatch, "-").concat(mode);
|
|
6042
|
+
setTheme(newTheme);
|
|
6043
|
+
}
|
|
6044
|
+
else {
|
|
6045
|
+
var closestColor = hexToThemeColor(newColor);
|
|
6046
|
+
setCustomHex(newColor);
|
|
6047
|
+
var newTheme = closestColor === "blue"
|
|
6048
|
+
? mode
|
|
6049
|
+
: "".concat(closestColor, "-").concat(mode);
|
|
6050
|
+
setTheme(newTheme);
|
|
6051
|
+
}
|
|
6052
|
+
}
|
|
6053
|
+
else {
|
|
6054
|
+
setCustomHex(null);
|
|
6055
|
+
var resolvedColor = newColor;
|
|
6056
|
+
var newTheme = resolvedColor === "blue"
|
|
6057
|
+
? mode
|
|
6058
|
+
: "".concat(resolvedColor, "-").concat(mode);
|
|
6059
|
+
setTheme(newTheme);
|
|
6060
|
+
}
|
|
5771
6061
|
}, [mode, setTheme]);
|
|
5772
6062
|
return {
|
|
5773
6063
|
mode: mode,
|
|
5774
6064
|
color: color,
|
|
6065
|
+
customHex: customHex,
|
|
5775
6066
|
setMode: setMode,
|
|
5776
6067
|
setColor: setColor,
|
|
5777
6068
|
};
|
|
@@ -5787,10 +6078,11 @@ var useThemeManager = function () {
|
|
|
5787
6078
|
*/
|
|
5788
6079
|
var ThemeProvider = function (_a) {
|
|
5789
6080
|
var children = _a.children;
|
|
5790
|
-
var _b = useThemeManager(), mode = _b.mode, color = _b.color, setMode = _b.setMode, setColor = _b.setColor;
|
|
6081
|
+
var _b = useThemeManager(), mode = _b.mode, color = _b.color, customHex = _b.customHex, setMode = _b.setMode, setColor = _b.setColor;
|
|
5791
6082
|
return (jsxRuntime.jsx(ThemeContext.Provider, { value: {
|
|
5792
6083
|
mode: mode,
|
|
5793
6084
|
color: color,
|
|
6085
|
+
customHex: customHex,
|
|
5794
6086
|
setMode: setMode,
|
|
5795
6087
|
setColor: setColor,
|
|
5796
6088
|
}, children: children }));
|
|
@@ -5896,6 +6188,7 @@ exports.HeaderComponent = HeaderComponent;
|
|
|
5896
6188
|
exports.IconComponent = IconComponent;
|
|
5897
6189
|
exports.ImagePreview = ImagePreview;
|
|
5898
6190
|
exports.Input = Input;
|
|
6191
|
+
exports.InputPassword = InputPassword;
|
|
5899
6192
|
exports.Kanban = Kanban;
|
|
5900
6193
|
exports.KanbanCard = KanbanCard;
|
|
5901
6194
|
exports.KanbanColumn = KanbanColumn;
|
|
@@ -5923,6 +6216,7 @@ exports.SocialMediaCarousel = SocialMediaCarousel;
|
|
|
5923
6216
|
exports.SocialMediaPreview = SocialMediaPreview;
|
|
5924
6217
|
exports.StepIndicator = StepIndicator;
|
|
5925
6218
|
exports.SwitchComponent = Switch;
|
|
6219
|
+
exports.THEME_COLOR_HEX_MAP = THEME_COLOR_HEX_MAP;
|
|
5926
6220
|
exports.TagsFilter = TagsFilter;
|
|
5927
6221
|
exports.Textarea = Textarea;
|
|
5928
6222
|
exports.ThemeContext = ThemeContext;
|
|
@@ -5937,8 +6231,16 @@ exports.WhatsAppPreview = WhatsAppPreview;
|
|
|
5937
6231
|
exports.Wizard = Wizard;
|
|
5938
6232
|
exports.WizardNavigation = WizardNavigation;
|
|
5939
6233
|
exports.WizardSidebar = WizardSidebar;
|
|
6234
|
+
exports.applyCustomPrimaryColor = applyCustomPrimaryColor;
|
|
5940
6235
|
exports.defaultTranslations = defaultTranslations$4;
|
|
6236
|
+
exports.generateThemeColorScale = generateThemeColorScale;
|
|
6237
|
+
exports.getContrastForeground = getContrastForeground;
|
|
5941
6238
|
exports.getSelectedKeyFromPath = getSelectedKeyFromPath;
|
|
6239
|
+
exports.hexToThemeColor = hexToThemeColor;
|
|
6240
|
+
exports.hslToCssValue = hslToCssValue;
|
|
6241
|
+
exports.isExactThemeColor = isExactThemeColor;
|
|
6242
|
+
exports.isHexColor = isHexColor;
|
|
6243
|
+
exports.removeCustomPrimaryColor = removeCustomPrimaryColor;
|
|
5942
6244
|
exports.sizeMap = sizeMap;
|
|
5943
6245
|
exports.themeColors = themeColors;
|
|
5944
6246
|
exports.useAuraToast = useAuraToast;
|