@eintrek/erp-shell 0.1.43 → 0.1.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.esm.js +21 -8
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +21 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -1087,7 +1087,7 @@ function NavMain({ items, orgCode, closeOnNavigation = false, approvalCounts, })
|
|
|
1087
1087
|
// is active (so parent+child don't both light up).
|
|
1088
1088
|
const isItemActive = pathname === itemUrl && !hasActiveSubItem;
|
|
1089
1089
|
item.icon;
|
|
1090
|
-
return (jsx(Collapsible, { asChild: true, defaultOpen: isItemActive || hasActiveSubItem, className: "group/collapsible", children: jsxs(SidebarMenuItem, { children: [jsx(CollapsibleTrigger, { asChild: true, children: jsx(SidebarMenuButton, { asChild: !item.subModules || item.subModules.length === 0, isActive: isItemActive, className: " data-[state=open]:text-sidebar-accent-foreground", children: item.subModules && item.subModules.length > 0 ? (jsxs(Fragment$1, { children: [jsx("span", { id: item.id, children: item.titleTh }), jsx(ChevronRight, { className: "ml-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90" })] })) : (jsx(Link, { href: itemUrl, className: "flex items-center gap-2 w-full min-w-0 flex-1", onClick: handleNavLinkClick, children: jsx("span", { id: item.id, className: "flex-1 truncate", title: item.titleTh, children: item.titleTh }) })) }) }), item.subModules && item.subModules.length > 0 && (jsx(CollapsibleContent, { children: jsx(SidebarMenuSub, { children: item.subModules.map(subItem => {
|
|
1090
|
+
return (jsx(Collapsible, { asChild: true, defaultOpen: isItemActive || hasActiveSubItem, className: "group/collapsible", children: jsxs(SidebarMenuItem, { children: [jsx(CollapsibleTrigger, { asChild: true, children: jsx(SidebarMenuButton, { asChild: !item.subModules || item.subModules.length === 0, isActive: isItemActive, className: " data-[state=open]:text-sidebar-accent-foreground", children: item.subModules && item.subModules.length > 0 ? (jsxs(Fragment$1, { children: [jsx("span", { id: item.id, children: item.titleTh }), jsx(ChevronRight, { className: "ml-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90" })] })) : (jsx(Link, { href: itemUrl, prefetch: false, className: "flex items-center gap-2 w-full min-w-0 flex-1", onClick: handleNavLinkClick, children: jsx("span", { id: item.id, className: "flex-1 truncate", title: item.titleTh, children: item.titleTh }) })) }) }), item.subModules && item.subModules.length > 0 && (jsx(CollapsibleContent, { children: jsx(SidebarMenuSub, { children: item.subModules.map(subItem => {
|
|
1091
1091
|
const subItemUrl = buildUrlWithCode(code, subItem.url);
|
|
1092
1092
|
const isSubItemActive = subItemUrl === activeSubItemUrl;
|
|
1093
1093
|
const SubIcon = subItem.icon;
|
|
@@ -1104,10 +1104,10 @@ function NavMain({ items, orgCode, closeOnNavigation = false, approvalCounts, })
|
|
|
1104
1104
|
const SubPageIcon = subPage.icon;
|
|
1105
1105
|
return (jsx(SidebarMenuSubItem, { children: jsx(SidebarMenuSubButton, { asChild: true, className: `font-thai w-full text-sm ${isSubPageActive
|
|
1106
1106
|
? "text-sidebar-accent-foreground font-medium"
|
|
1107
|
-
: "text-sidebar-foreground"}`, isActive: false, children: jsxs(Link, { href: subPageUrl, className: "w-full flex items-center", onClick: handleNavLinkClick, children: [SubPageIcon && (jsx(SubPageIcon, { className: "sidebar-subpage-icon flex-shrink-0" })), jsx("span", { className: "flex-1 truncate", title: subPage.titleTh, children: subPage.titleTh })] }) }) }, subPage.id));
|
|
1107
|
+
: "text-sidebar-foreground"}`, isActive: false, children: jsxs(Link, { href: subPageUrl, prefetch: false, className: "w-full flex items-center", onClick: handleNavLinkClick, children: [SubPageIcon && (jsx(SubPageIcon, { className: "sidebar-subpage-icon flex-shrink-0" })), jsx("span", { className: "flex-1 truncate", title: subPage.titleTh, children: subPage.titleTh })] }) }) }, subPage.id));
|
|
1108
1108
|
}) }) })] }) }, subItem.id));
|
|
1109
1109
|
}
|
|
1110
|
-
return (jsx(SidebarMenuSubItem, { children: jsx(SidebarMenuSubButton, { asChild: true, className: "w-full", isActive: isSubItemActive, children: jsxs(Link, { href: subItemUrl, className: "w-full flex items-center", onClick: handleNavLinkClick, children: [SubIcon && (jsx(SubIcon, { className: "sidebar-submodule-icon flex-shrink-0" })), jsx("span", { className: "flex-1 truncate", title: subItem.titleTh, children: subItem.titleTh }), approvalCount > 0 && (jsx(Badge, { variant: "destructive", className: "ml-auto h-5 min-w-5 px-1.5 text-xs font-medium tabular-nums", children: approvalCount > 99 ? "99+" : approvalCount }))] }) }) }, subItem.id));
|
|
1110
|
+
return (jsx(SidebarMenuSubItem, { children: jsx(SidebarMenuSubButton, { asChild: true, className: "w-full", isActive: isSubItemActive, children: jsxs(Link, { href: subItemUrl, prefetch: false, className: "w-full flex items-center", onClick: handleNavLinkClick, children: [SubIcon && (jsx(SubIcon, { className: "sidebar-submodule-icon flex-shrink-0" })), jsx("span", { className: "flex-1 truncate", title: subItem.titleTh, children: subItem.titleTh }), approvalCount > 0 && (jsx(Badge, { variant: "destructive", className: "ml-auto h-5 min-w-5 px-1.5 text-xs font-medium tabular-nums", children: approvalCount > 99 ? "99+" : approvalCount }))] }) }) }, subItem.id));
|
|
1111
1111
|
}) }) }))] }) }, item.id));
|
|
1112
1112
|
}) }) }));
|
|
1113
1113
|
}
|
|
@@ -1650,27 +1650,40 @@ function writeThemeCookie(value) {
|
|
|
1650
1650
|
/**
|
|
1651
1651
|
* Bridges next-themes (per-origin localStorage) with a cookie scoped to the
|
|
1652
1652
|
* parent domain, so the light/dark/system choice is shared across the
|
|
1653
|
-
* accounting / HR / platform subdomains.
|
|
1654
|
-
*
|
|
1653
|
+
* accounting / HR / platform subdomains.
|
|
1654
|
+
*
|
|
1655
|
+
* Local storage wins when it already has a value (H57): adopting the shared
|
|
1656
|
+
* cookie first used to overwrite an explicit choice — including one set via
|
|
1657
|
+
* DevTools — and write `theme=light` back on every load whenever the cookie
|
|
1658
|
+
* still said light. Push the local value into the cookie instead so sibling
|
|
1659
|
+
* apps catch up.
|
|
1655
1660
|
*/
|
|
1656
1661
|
function ThemeCookieSync() {
|
|
1657
1662
|
const { theme, setTheme } = useTheme();
|
|
1658
1663
|
const skipFirstWrite = React.useRef(true);
|
|
1659
1664
|
React.useEffect(() => {
|
|
1665
|
+
const local = typeof window !== "undefined"
|
|
1666
|
+
? window.localStorage.getItem("theme")
|
|
1667
|
+
: null;
|
|
1660
1668
|
const cookie = readThemeCookie();
|
|
1661
|
-
if (
|
|
1669
|
+
if (local) {
|
|
1670
|
+
if (local !== theme)
|
|
1671
|
+
setTheme(local);
|
|
1672
|
+
writeThemeCookie(local);
|
|
1673
|
+
}
|
|
1674
|
+
else if (cookie) {
|
|
1662
1675
|
if (cookie !== theme)
|
|
1663
1676
|
setTheme(cookie);
|
|
1664
1677
|
}
|
|
1665
1678
|
else if (theme) {
|
|
1666
|
-
writeThemeCookie(theme);
|
|
1679
|
+
writeThemeCookie(theme);
|
|
1667
1680
|
}
|
|
1668
1681
|
// Run once on mount — `theme` is intentionally not a dependency here.
|
|
1669
1682
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1670
1683
|
}, []);
|
|
1671
1684
|
React.useEffect(() => {
|
|
1672
1685
|
// Skip the initial render; only persist genuine changes (incl. the
|
|
1673
|
-
// setTheme() triggered by adopting
|
|
1686
|
+
// setTheme() triggered by adopting storage above — harmless re-write).
|
|
1674
1687
|
if (skipFirstWrite.current) {
|
|
1675
1688
|
skipFirstWrite.current = false;
|
|
1676
1689
|
return;
|