@almadar/ui 4.32.0 → 4.34.0

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.
@@ -182,7 +182,7 @@ var init_types = __esm({
182
182
  }
183
183
  });
184
184
 
185
- // node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
185
+ // node_modules/clsx/dist/clsx.mjs
186
186
  function r(e) {
187
187
  var t, f, n = "";
188
188
  if ("string" == typeof e || "number" == typeof e) n += e;
@@ -197,11 +197,11 @@ function clsx() {
197
197
  return n;
198
198
  }
199
199
  var init_clsx = __esm({
200
- "node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs"() {
200
+ "node_modules/clsx/dist/clsx.mjs"() {
201
201
  }
202
202
  });
203
203
 
204
- // node_modules/.pnpm/tailwind-merge@2.6.1/node_modules/tailwind-merge/dist/bundle-mjs.mjs
204
+ // node_modules/tailwind-merge/dist/bundle-mjs.mjs
205
205
  function twJoin() {
206
206
  let index = 0;
207
207
  let argument;
@@ -245,7 +245,7 @@ function createTailwindMerge(createConfigFirst, ...createConfigRest) {
245
245
  }
246
246
  var CLASS_PART_SEPARATOR, createClassGroupUtils, getGroupRecursive, arbitraryPropertyRegex, getGroupIdForArbitraryProperty, createClassMap, processClassesRecursively, getPart, isThemeGetter, getPrefixedClassGroupEntries, createLruCache, IMPORTANT_MODIFIER, createParseClassName, sortModifiers, createConfigUtils, SPLIT_CLASSES_REGEX, mergeClassList, toValue, fromTheme, arbitraryValueRegex, fractionRegex, stringLengths, tshirtUnitRegex, lengthUnitRegex, colorFunctionRegex, shadowRegex, imageRegex, isLength, isArbitraryLength, isNumber, isArbitraryNumber, isInteger, isPercent, isArbitraryValue, isTshirtSize, sizeLabels, isArbitrarySize, isArbitraryPosition, imageLabels, isArbitraryImage, isArbitraryShadow, isAny, getIsArbitraryValue, isLengthOnly, isNever, isShadow, isImage, getDefaultConfig, twMerge;
247
247
  var init_bundle_mjs = __esm({
248
- "node_modules/.pnpm/tailwind-merge@2.6.1/node_modules/tailwind-merge/dist/bundle-mjs.mjs"() {
248
+ "node_modules/tailwind-merge/dist/bundle-mjs.mjs"() {
249
249
  CLASS_PART_SEPARATOR = "-";
250
250
  createClassGroupUtils = (config) => {
251
251
  const classMap = createClassMap(config);
@@ -12838,9 +12838,9 @@ var init_ScaledDiagram = __esm({
12838
12838
  }
12839
12839
  });
12840
12840
 
12841
- // node_modules/.pnpm/katex@0.16.45/node_modules/katex/dist/katex.min.css
12841
+ // node_modules/katex/dist/katex.min.css
12842
12842
  var init_katex_min = __esm({
12843
- "node_modules/.pnpm/katex@0.16.45/node_modules/katex/dist/katex.min.css"() {
12843
+ "node_modules/katex/dist/katex.min.css"() {
12844
12844
  }
12845
12845
  });
12846
12846
  var MarkdownContent;
@@ -20668,265 +20668,255 @@ var init_DashboardLayout = __esm({
20668
20668
  const user = userProp || (null);
20669
20669
  const { t } = useTranslate();
20670
20670
  const handleSignOut = onSignOutProp || authSignOut;
20671
- return /* @__PURE__ */ jsxRuntime.jsxs(
20672
- HStack,
20673
- {
20674
- gap: "none",
20675
- className: "min-h-screen w-full bg-background dark:bg-background items-stretch",
20676
- children: [
20677
- sidebarOpen && /* @__PURE__ */ jsxRuntime.jsx(
20678
- Box,
20679
- {
20680
- className: "fixed inset-0 bg-foreground/50 dark:bg-foreground/70 z-20 lg:hidden",
20681
- onClick: () => setSidebarOpen(false)
20682
- }
20671
+ return /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "min-h-screen bg-background dark:bg-background", children: [
20672
+ sidebarOpen && /* @__PURE__ */ jsxRuntime.jsx(
20673
+ Box,
20674
+ {
20675
+ className: "fixed inset-0 bg-foreground/50 dark:bg-foreground/70 z-20 lg:hidden",
20676
+ onClick: () => setSidebarOpen(false)
20677
+ }
20678
+ ),
20679
+ /* @__PURE__ */ jsxRuntime.jsxs(
20680
+ Box,
20681
+ {
20682
+ as: "aside",
20683
+ className: cn(
20684
+ "fixed inset-y-0 left-0 z-30 w-64 bg-card dark:bg-card border-r border-border dark:border-border",
20685
+ "transform transition-transform duration-200 ease-in-out lg:translate-x-0",
20686
+ sidebarOpen ? "translate-x-0" : "-translate-x-full"
20683
20687
  ),
20684
- /* @__PURE__ */ jsxRuntime.jsxs(
20685
- Box,
20686
- {
20687
- as: "aside",
20688
- className: cn(
20689
- "z-30 w-64 flex-shrink-0 bg-card dark:bg-card border-r border-border dark:border-border",
20690
- "fixed inset-y-0 left-0 lg:static lg:translate-x-0 lg:h-auto",
20691
- "transform transition-transform duration-200 ease-in-out",
20692
- "flex flex-col",
20693
- sidebarOpen ? "translate-x-0" : "-translate-x-full"
20694
- ),
20695
- children: [
20696
- /* @__PURE__ */ jsxRuntime.jsxs(
20697
- HStack,
20688
+ children: [
20689
+ /* @__PURE__ */ jsxRuntime.jsxs(
20690
+ HStack,
20691
+ {
20692
+ align: "center",
20693
+ justify: "between",
20694
+ className: "h-16 px-4 border-b border-border dark:border-border",
20695
+ children: [
20696
+ /* @__PURE__ */ jsxRuntime.jsxs(reactRouterDom.Link, { to: "/", className: "flex items-center gap-2", children: [
20697
+ logo || /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-8 h-8 bg-primary-600 rounded-lg flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
20698
+ Typography,
20699
+ {
20700
+ variant: "small",
20701
+ className: "text-white font-bold text-sm",
20702
+ as: "span",
20703
+ children: appName.charAt(0).toUpperCase()
20704
+ }
20705
+ ) }),
20706
+ /* @__PURE__ */ jsxRuntime.jsx(
20707
+ Typography,
20708
+ {
20709
+ variant: "label",
20710
+ className: "font-semibold text-foreground dark:text-foreground",
20711
+ as: "span",
20712
+ children: appName
20713
+ }
20714
+ )
20715
+ ] }),
20716
+ /* @__PURE__ */ jsxRuntime.jsx(
20717
+ Button,
20718
+ {
20719
+ variant: "ghost",
20720
+ className: "lg:hidden p-2 rounded-md hover:bg-muted dark:hover:bg-muted text-muted-foreground dark:text-muted-foreground",
20721
+ onClick: () => setSidebarOpen(false),
20722
+ children: /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.X, { className: "h-5 w-5" })
20723
+ }
20724
+ )
20725
+ ]
20726
+ }
20727
+ ),
20728
+ /* @__PURE__ */ jsxRuntime.jsx(
20729
+ VStack,
20730
+ {
20731
+ as: "nav",
20732
+ gap: "none",
20733
+ className: "flex-1 px-3 py-4 space-y-1 overflow-y-auto",
20734
+ children: navItems.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
20735
+ NavLink,
20698
20736
  {
20699
- align: "center",
20700
- justify: "between",
20701
- className: "h-16 px-4 border-b border-border dark:border-border",
20702
- children: [
20703
- /* @__PURE__ */ jsxRuntime.jsxs(reactRouterDom.Link, { to: "/", className: "flex items-center gap-2", children: [
20704
- logo || /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "w-8 h-8 bg-primary-600 rounded-lg flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(
20705
- Typography,
20706
- {
20707
- variant: "small",
20708
- className: "text-white font-bold text-sm",
20709
- as: "span",
20710
- children: appName.charAt(0).toUpperCase()
20711
- }
20712
- ) }),
20713
- /* @__PURE__ */ jsxRuntime.jsx(
20714
- Typography,
20715
- {
20716
- variant: "label",
20717
- className: "font-semibold text-foreground dark:text-foreground",
20718
- as: "span",
20719
- children: appName
20737
+ item,
20738
+ currentPath: location.pathname
20739
+ },
20740
+ item.href
20741
+ ))
20742
+ }
20743
+ ),
20744
+ sidebarFooter && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 border-t border-border dark:border-border", children: sidebarFooter })
20745
+ ]
20746
+ }
20747
+ ),
20748
+ /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "lg:pl-64", children: [
20749
+ /* @__PURE__ */ jsxRuntime.jsx(
20750
+ Box,
20751
+ {
20752
+ as: "header",
20753
+ className: "sticky top-0 z-20 h-16 bg-card dark:bg-card border-b border-border dark:border-border",
20754
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
20755
+ HStack,
20756
+ {
20757
+ align: "center",
20758
+ justify: "between",
20759
+ className: "h-full px-4 gap-4",
20760
+ children: [
20761
+ /* @__PURE__ */ jsxRuntime.jsx(
20762
+ Button,
20763
+ {
20764
+ variant: "ghost",
20765
+ className: "lg:hidden p-2 rounded-md hover:bg-muted dark:hover:bg-muted text-muted-foreground dark:text-muted-foreground touch-manipulation min-h-[44px] min-w-[44px] flex items-center justify-center",
20766
+ onClick: () => setSidebarOpen(true),
20767
+ "aria-label": "Open sidebar",
20768
+ children: /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.Menu, { className: "h-5 w-5" })
20769
+ }
20770
+ ),
20771
+ searchEnabled && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "hidden sm:block flex-1 max-w-md", children: /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "relative", children: [
20772
+ /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground dark:text-muted-foreground" }),
20773
+ /* @__PURE__ */ jsxRuntime.jsx(
20774
+ Input,
20775
+ {
20776
+ type: "search",
20777
+ placeholder: t("common.search"),
20778
+ className: "pl-10 w-full",
20779
+ onKeyDown: (e) => {
20780
+ if (e.key === "Enter") {
20781
+ handleSearchSubmit(e.target.value);
20720
20782
  }
20721
- )
20722
- ] }),
20723
- /* @__PURE__ */ jsxRuntime.jsx(
20724
- Button,
20725
- {
20726
- variant: "ghost",
20727
- className: "lg:hidden p-2 rounded-md hover:bg-muted dark:hover:bg-muted text-muted-foreground dark:text-muted-foreground",
20728
- onClick: () => setSidebarOpen(false),
20729
- children: /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.X, { className: "h-5 w-5" })
20730
20783
  }
20731
- )
20732
- ]
20733
- }
20734
- ),
20735
- /* @__PURE__ */ jsxRuntime.jsx(
20736
- VStack,
20737
- {
20738
- as: "nav",
20739
- gap: "none",
20740
- className: "flex-1 px-3 py-4 space-y-1 overflow-y-auto",
20741
- children: navItems.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
20742
- NavLink,
20784
+ }
20785
+ )
20786
+ ] }) }),
20787
+ /* @__PURE__ */ jsxRuntime.jsxs(HStack, { align: "center", gap: "xs", children: [
20788
+ headerActions,
20789
+ showThemeToggle && /* @__PURE__ */ jsxRuntime.jsx(ThemeToggle, {}),
20790
+ topBarActions.map((action, idx) => /* @__PURE__ */ jsxRuntime.jsxs(
20791
+ Button,
20743
20792
  {
20744
- item,
20745
- currentPath: location.pathname
20793
+ variant: "ghost",
20794
+ className: "relative p-2 rounded-full hover:bg-muted dark:hover:bg-muted",
20795
+ onClick: () => handleTopBarActionClick(action.event),
20796
+ "aria-label": action.label ?? action.icon,
20797
+ children: [
20798
+ /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: action.icon, className: "h-5 w-5 text-muted-foreground dark:text-muted-foreground" }),
20799
+ action.badge !== void 0 && action.badge !== null && action.badge !== 0 && action.badge !== "" && /* @__PURE__ */ jsxRuntime.jsx(
20800
+ Box,
20801
+ {
20802
+ as: "span",
20803
+ className: cn(
20804
+ "absolute -top-0.5 -right-0.5 min-w-[18px] h-[18px] px-1 rounded-full text-[10px] font-semibold text-white flex items-center justify-center",
20805
+ action.variant === "danger" ? "bg-error" : action.variant === "primary" ? "bg-primary" : "bg-foreground"
20806
+ ),
20807
+ children: action.badge
20808
+ }
20809
+ )
20810
+ ]
20746
20811
  },
20747
- item.href
20748
- ))
20749
- }
20750
- ),
20751
- sidebarFooter && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "p-4 border-t border-border dark:border-border", children: sidebarFooter })
20752
- ]
20753
- }
20754
- ),
20755
- /* @__PURE__ */ jsxRuntime.jsxs(VStack, { gap: "none", className: "flex-1 min-w-0 min-h-screen", children: [
20756
- /* @__PURE__ */ jsxRuntime.jsx(
20757
- Box,
20758
- {
20759
- as: "header",
20760
- className: "sticky top-0 z-20 h-16 bg-card dark:bg-card border-b border-border dark:border-border",
20761
- children: /* @__PURE__ */ jsxRuntime.jsxs(
20762
- HStack,
20763
- {
20764
- align: "center",
20765
- justify: "between",
20766
- className: "h-full px-3 sm:px-4 gap-2 sm:gap-4",
20767
- children: [
20768
- /* @__PURE__ */ jsxRuntime.jsx(
20812
+ `${action.event}-${idx}`
20813
+ )),
20814
+ notificationsEnabled && /* @__PURE__ */ jsxRuntime.jsxs(
20815
+ Button,
20816
+ {
20817
+ variant: "ghost",
20818
+ className: "relative p-2 rounded-full hover:bg-muted dark:hover:bg-muted",
20819
+ onClick: handleNotificationClick,
20820
+ "aria-label": t("common.notifications"),
20821
+ children: [
20822
+ /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.Bell, { className: "h-5 w-5 text-muted-foreground dark:text-muted-foreground" }),
20823
+ unreadCount > 0 && /* @__PURE__ */ jsxRuntime.jsx(
20824
+ Box,
20825
+ {
20826
+ as: "span",
20827
+ className: "absolute -top-0.5 -right-0.5 min-w-[18px] h-[18px] px-1 bg-error rounded-full text-[10px] font-semibold text-white flex items-center justify-center",
20828
+ children: unreadCount > 99 ? "99+" : unreadCount
20829
+ }
20830
+ )
20831
+ ]
20832
+ }
20833
+ ),
20834
+ user && /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "relative", children: [
20835
+ /* @__PURE__ */ jsxRuntime.jsxs(
20769
20836
  Button,
20770
20837
  {
20771
20838
  variant: "ghost",
20772
- className: "lg:hidden p-2 rounded-md hover:bg-muted dark:hover:bg-muted text-muted-foreground dark:text-muted-foreground touch-manipulation min-h-[44px] min-w-[44px] flex items-center justify-center",
20773
- onClick: () => setSidebarOpen(true),
20774
- "aria-label": "Open sidebar",
20775
- children: /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.Menu, { className: "h-5 w-5" })
20839
+ className: "flex items-center gap-2 p-2 rounded-lg hover:bg-muted dark:hover:bg-muted",
20840
+ onClick: () => setUserMenuOpen(!userMenuOpen),
20841
+ children: [
20842
+ /* @__PURE__ */ jsxRuntime.jsx(
20843
+ Avatar,
20844
+ {
20845
+ src: user.avatar,
20846
+ alt: user.name,
20847
+ initials: user.name.split(" ").map((n) => n[0]).join("").substring(0, 2),
20848
+ size: "sm"
20849
+ }
20850
+ ),
20851
+ /* @__PURE__ */ jsxRuntime.jsx(
20852
+ Typography,
20853
+ {
20854
+ variant: "small",
20855
+ className: "hidden sm:block text-sm font-medium text-foreground dark:text-foreground",
20856
+ as: "span",
20857
+ children: user.name
20858
+ }
20859
+ ),
20860
+ /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.ChevronDown, { className: "hidden sm:block h-4 w-4 text-muted-foreground dark:text-muted-foreground" })
20861
+ ]
20776
20862
  }
20777
20863
  ),
20778
- searchEnabled && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "hidden sm:block flex-1 min-w-0 xl:max-w-md", children: /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "relative", children: [
20779
- /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.Search, { className: "absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-muted-foreground dark:text-muted-foreground" }),
20864
+ userMenuOpen && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
20780
20865
  /* @__PURE__ */ jsxRuntime.jsx(
20781
- Input,
20782
- {
20783
- type: "search",
20784
- placeholder: t("common.search"),
20785
- className: "pl-10 w-full",
20786
- onKeyDown: (e) => {
20787
- if (e.key === "Enter") {
20788
- handleSearchSubmit(e.target.value);
20789
- }
20790
- }
20791
- }
20792
- )
20793
- ] }) }),
20794
- !searchEnabled && /* @__PURE__ */ jsxRuntime.jsx(Box, { className: "flex-1" }),
20795
- /* @__PURE__ */ jsxRuntime.jsxs(HStack, { align: "center", gap: "xs", children: [
20796
- headerActions,
20797
- showThemeToggle && /* @__PURE__ */ jsxRuntime.jsx(ThemeToggle, {}),
20798
- topBarActions.map((action, idx) => /* @__PURE__ */ jsxRuntime.jsxs(
20799
- Button,
20866
+ Box,
20800
20867
  {
20801
- variant: "ghost",
20802
- className: "relative p-2 rounded-full hover:bg-muted dark:hover:bg-muted",
20803
- onClick: () => handleTopBarActionClick(action.event),
20804
- "aria-label": action.label ?? action.icon,
20805
- children: [
20806
- /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: action.icon, className: "h-5 w-5 text-muted-foreground dark:text-muted-foreground" }),
20807
- action.badge !== void 0 && action.badge !== null && action.badge !== 0 && action.badge !== "" && /* @__PURE__ */ jsxRuntime.jsx(
20808
- Box,
20809
- {
20810
- as: "span",
20811
- className: cn(
20812
- "absolute -top-0.5 -right-0.5 min-w-[18px] h-[18px] px-1 rounded-full text-[10px] font-semibold text-white flex items-center justify-center",
20813
- action.variant === "danger" ? "bg-error" : action.variant === "primary" ? "bg-primary" : "bg-foreground"
20814
- ),
20815
- children: action.badge
20816
- }
20817
- )
20818
- ]
20819
- },
20820
- `${action.event}-${idx}`
20821
- )),
20822
- notificationsEnabled && /* @__PURE__ */ jsxRuntime.jsxs(
20823
- Button,
20824
- {
20825
- variant: "ghost",
20826
- className: "relative p-2 rounded-full hover:bg-muted dark:hover:bg-muted",
20827
- onClick: handleNotificationClick,
20828
- "aria-label": t("common.notifications"),
20829
- children: [
20830
- /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.Bell, { className: "h-5 w-5 text-muted-foreground dark:text-muted-foreground" }),
20831
- unreadCount > 0 && /* @__PURE__ */ jsxRuntime.jsx(
20832
- Box,
20833
- {
20834
- as: "span",
20835
- className: "absolute -top-0.5 -right-0.5 min-w-[18px] h-[18px] px-1 bg-error rounded-full text-[10px] font-semibold text-white flex items-center justify-center",
20836
- children: unreadCount > 99 ? "99+" : unreadCount
20837
- }
20838
- )
20839
- ]
20868
+ className: "fixed inset-0 z-20",
20869
+ onClick: () => setUserMenuOpen(false)
20840
20870
  }
20841
20871
  ),
20842
- user && /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "relative", children: [
20872
+ /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "absolute right-0 mt-2 w-48 bg-card dark:bg-card rounded-lg shadow-lg border border-border dark:border-border py-1 z-30", children: [
20873
+ /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "px-4 py-2 border-b border-border dark:border-border", children: [
20874
+ /* @__PURE__ */ jsxRuntime.jsx(
20875
+ Typography,
20876
+ {
20877
+ variant: "small",
20878
+ className: "text-sm font-medium text-foreground dark:text-foreground",
20879
+ as: "p",
20880
+ children: user.name
20881
+ }
20882
+ ),
20883
+ /* @__PURE__ */ jsxRuntime.jsx(
20884
+ Typography,
20885
+ {
20886
+ variant: "caption",
20887
+ className: "text-xs text-muted-foreground dark:text-muted-foreground",
20888
+ as: "p",
20889
+ children: user.email
20890
+ }
20891
+ )
20892
+ ] }),
20843
20893
  /* @__PURE__ */ jsxRuntime.jsxs(
20844
20894
  Button,
20845
20895
  {
20846
20896
  variant: "ghost",
20847
- className: "flex items-center gap-2 p-2 rounded-lg hover:bg-muted dark:hover:bg-muted",
20848
- onClick: () => setUserMenuOpen(!userMenuOpen),
20897
+ onClick: () => {
20898
+ setUserMenuOpen(false);
20899
+ handleSignOut?.();
20900
+ },
20901
+ className: "w-full flex items-center gap-2 px-4 py-2 text-sm text-error dark:text-error hover:bg-error/10 dark:hover:bg-error/20",
20849
20902
  children: [
20850
- /* @__PURE__ */ jsxRuntime.jsx(
20851
- Avatar,
20852
- {
20853
- src: user.avatar,
20854
- alt: user.name,
20855
- initials: user.name.split(" ").map((n) => n[0]).join("").substring(0, 2),
20856
- size: "sm"
20857
- }
20858
- ),
20859
- /* @__PURE__ */ jsxRuntime.jsx(
20860
- Typography,
20861
- {
20862
- variant: "small",
20863
- className: "hidden sm:block text-sm font-medium text-foreground dark:text-foreground",
20864
- as: "span",
20865
- children: user.name
20866
- }
20867
- ),
20868
- /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.ChevronDown, { className: "hidden sm:block h-4 w-4 text-muted-foreground dark:text-muted-foreground" })
20903
+ /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.LogOut, { className: "h-4 w-4" }),
20904
+ t("auth.signOut")
20869
20905
  ]
20870
20906
  }
20871
- ),
20872
- userMenuOpen && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
20873
- /* @__PURE__ */ jsxRuntime.jsx(
20874
- Box,
20875
- {
20876
- className: "fixed inset-0 z-20",
20877
- onClick: () => setUserMenuOpen(false)
20878
- }
20879
- ),
20880
- /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "absolute right-0 mt-2 w-48 bg-card dark:bg-card rounded-lg shadow-lg border border-border dark:border-border py-1 z-30", children: [
20881
- /* @__PURE__ */ jsxRuntime.jsxs(Box, { className: "px-4 py-2 border-b border-border dark:border-border", children: [
20882
- /* @__PURE__ */ jsxRuntime.jsx(
20883
- Typography,
20884
- {
20885
- variant: "small",
20886
- className: "text-sm font-medium text-foreground dark:text-foreground",
20887
- as: "p",
20888
- children: user.name
20889
- }
20890
- ),
20891
- /* @__PURE__ */ jsxRuntime.jsx(
20892
- Typography,
20893
- {
20894
- variant: "caption",
20895
- className: "text-xs text-muted-foreground dark:text-muted-foreground",
20896
- as: "p",
20897
- children: user.email
20898
- }
20899
- )
20900
- ] }),
20901
- /* @__PURE__ */ jsxRuntime.jsxs(
20902
- Button,
20903
- {
20904
- variant: "ghost",
20905
- onClick: () => {
20906
- setUserMenuOpen(false);
20907
- handleSignOut?.();
20908
- },
20909
- className: "w-full flex items-center gap-2 px-4 py-2 text-sm text-error dark:text-error hover:bg-error/10 dark:hover:bg-error/20",
20910
- children: [
20911
- /* @__PURE__ */ jsxRuntime.jsx(LucideIcons.LogOut, { className: "h-4 w-4" }),
20912
- t("auth.signOut")
20913
- ]
20914
- }
20915
- )
20916
- ] })
20917
- ] })
20907
+ )
20918
20908
  ] })
20919
20909
  ] })
20920
- ]
20921
- }
20922
- )
20910
+ ] })
20911
+ ] })
20912
+ ]
20923
20913
  }
20924
- ),
20925
- /* @__PURE__ */ jsxRuntime.jsx(Box, { as: "main", className: "flex-1 p-3 sm:p-4 md:p-6", children })
20926
- ] })
20927
- ]
20928
- }
20929
- );
20914
+ )
20915
+ }
20916
+ ),
20917
+ /* @__PURE__ */ jsxRuntime.jsx(Box, { as: "main", className: "p-4 sm:p-6", children })
20918
+ ] })
20919
+ ] });
20930
20920
  };
20931
20921
  DashboardLayout.displayName = "DashboardLayout";
20932
20922
  NavLink = ({
@@ -49015,7 +49005,7 @@ init_logger();
49015
49005
 
49016
49006
  // runtime/createClientEffectHandlers.ts
49017
49007
  function createClientEffectHandlers(options) {
49018
- const { eventBus, slotSetter, navigate, notify, callService } = options;
49008
+ const { eventBus, slotSetter, navigate, notify } = options;
49019
49009
  return {
49020
49010
  emit: (event, payload) => {
49021
49011
  const prefixedEvent = event.startsWith("UI:") ? event : `UI:${event}`;
@@ -49027,24 +49017,9 @@ function createClientEffectHandlers(options) {
49027
49017
  set: () => {
49028
49018
  console.warn("[ClientEffectHandlers] set is server-side only, ignored on client");
49029
49019
  },
49030
- callService: async (service, action, params) => {
49031
- if (callService) return callService(service, action, params);
49032
- const mockId = `mock_${service}_${action}_${Math.random().toString(36).slice(2, 10)}`;
49033
- const paramsEcho = {};
49034
- if (params) {
49035
- for (const [k, v] of Object.entries(params)) {
49036
- if (v !== void 0 && (typeof v === "string" || typeof v === "number" || typeof v === "boolean" || v === null || v instanceof Date)) {
49037
- paramsEcho[k] = v;
49038
- }
49039
- }
49040
- }
49041
- return {
49042
- id: mockId,
49043
- clientSecret: `secret_${mockId}`,
49044
- success: true,
49045
- status: "succeeded",
49046
- ...paramsEcho
49047
- };
49020
+ callService: async () => {
49021
+ console.warn("[ClientEffectHandlers] callService is server-side only, ignored on client");
49022
+ return {};
49048
49023
  },
49049
49024
  renderUI: (slot, pattern, props) => {
49050
49025
  if (pattern === null) {
@@ -49427,8 +49402,7 @@ function useTraitStateMachine(traitBindings, uiSlots, options) {
49427
49402
  }
49428
49403
  },
49429
49404
  navigate: optionsRef.current?.navigate,
49430
- notify: optionsRef.current?.notify,
49431
- callService: optionsRef.current?.callService
49405
+ notify: optionsRef.current?.notify
49432
49406
  });
49433
49407
  const persistence = optionsRef.current?.persistence;
49434
49408
  let handlers = clientHandlers;
@@ -1,4 +1,4 @@
1
- /* node_modules/.pnpm/katex@0.16.45/node_modules/katex/dist/katex.min.css */
1
+ /* node_modules/katex/dist/katex.min.css */
2
2
  @font-face {
3
3
  font-display: block;
4
4
  font-family: KaTeX_AMS;