@umituz/web-dashboard 1.0.4 → 2.0.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.
Files changed (51) hide show
  1. package/dist/components/BrandLogo.d.ts +18 -0
  2. package/dist/components/BrandLogo.js +88 -0
  3. package/dist/components/BrandLogo.js.map +1 -0
  4. package/dist/components/DashboardHeader.d.ts +36 -0
  5. package/dist/components/DashboardHeader.js +225 -0
  6. package/dist/components/DashboardHeader.js.map +1 -0
  7. package/dist/components/DashboardLayout.d.ts +45 -0
  8. package/dist/{index.js → components/DashboardLayout.js} +11 -262
  9. package/dist/components/DashboardLayout.js.map +1 -0
  10. package/dist/components/DashboardSidebar.d.ts +29 -0
  11. package/dist/components/DashboardSidebar.js +189 -0
  12. package/dist/components/DashboardSidebar.js.map +1 -0
  13. package/dist/{infrastructure/hooks/index.d.ts → hooks/dashboard.d.ts} +1 -2
  14. package/dist/{infrastructure/hooks/index.js → hooks/dashboard.js} +2 -2
  15. package/dist/hooks/dashboard.js.map +1 -0
  16. package/dist/theme/default.d.ts +18 -0
  17. package/dist/theme/default.js +52 -0
  18. package/dist/theme/default.js.map +1 -0
  19. package/dist/theme/presets.d.ts +14 -0
  20. package/dist/theme/presets.js +137 -0
  21. package/dist/theme/presets.js.map +1 -0
  22. package/dist/theme/utils.d.ts +22 -0
  23. package/dist/{domain/theme/index.js → theme/utils.js} +6 -5
  24. package/dist/theme/utils.js.map +1 -0
  25. package/dist/types/layout.d.ts +45 -0
  26. package/dist/types/layout.js +2 -0
  27. package/dist/types/notification.d.ts +20 -0
  28. package/dist/types/notification.js +2 -0
  29. package/dist/types/notification.js.map +1 -0
  30. package/dist/types/sidebar.d.ts +36 -0
  31. package/dist/types/sidebar.js +2 -0
  32. package/dist/types/sidebar.js.map +1 -0
  33. package/dist/types/theme.d.ts +64 -0
  34. package/dist/types/theme.js +2 -0
  35. package/dist/types/theme.js.map +1 -0
  36. package/dist/types/user.d.ts +37 -0
  37. package/dist/types/user.js +2 -0
  38. package/dist/types/user.js.map +1 -0
  39. package/dist/{infrastructure/utils/index.js → utils/dashboard.js} +2 -2
  40. package/dist/utils/dashboard.js.map +1 -0
  41. package/package.json +51 -23
  42. package/dist/domain/theme/index.d.ts +0 -45
  43. package/dist/domain/theme/index.js.map +0 -1
  44. package/dist/domain/types/index.d.ts +0 -171
  45. package/dist/domain/types/index.js +0 -2
  46. package/dist/index.d.ts +0 -112
  47. package/dist/index.js.map +0 -1
  48. package/dist/infrastructure/hooks/index.js.map +0 -1
  49. package/dist/infrastructure/utils/index.js.map +0 -1
  50. /package/dist/{domain/types/index.js.map → types/layout.js.map} +0 -0
  51. /package/dist/{infrastructure/utils/index.d.ts → utils/dashboard.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/domains/layouts/components/DashboardSidebar.tsx","../../src/domains/layouts/components/BrandLogo.tsx","../../src/domains/layouts/utils/dashboard.ts"],"sourcesContent":["import { useState } from \"react\";\nimport { Link, useLocation } from \"react-router-dom\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { Button } from \"@umituz/web-design-system/atoms\";\nimport { BrandLogo } from \"./BrandLogo\";\nimport { PenTool, Menu, ChevronLeft, ChevronDown, ChevronRight } from \"lucide-react\";\nimport type { DashboardSidebarProps } from \"../types/layout\";\nimport type { DashboardUser } from \"../types/user\";\nimport type { SidebarGroup } from \"../types/sidebar\";\nimport { filterSidebarItems } from \"../utils/dashboard\";\n\ninterface DashboardSidebarPropsExtended extends DashboardSidebarProps {\n /** Sidebar groups configuration */\n sidebarGroups: SidebarGroup[];\n /** Brand name */\n brandName?: string;\n /** Brand tagline */\n brandTagline?: string;\n /** Create post route */\n createPostRoute?: string;\n /** Auth user */\n user?: DashboardUser;\n}\n\n/**\n * Dashboard Sidebar Component\n *\n * Displays collapsible sidebar with navigation menu items.\n * Supports app-based filtering (mobile/web) and collapsible groups.\n *\n * @param props - Dashboard sidebar props\n */\nexport const DashboardSidebar = ({\n collapsed,\n setCollapsed,\n sidebarGroups,\n brandName = \"App\",\n brandTagline = \"grow smarter\",\n createPostRoute = \"/dashboard/create\",\n user,\n}: DashboardSidebarPropsExtended) => {\n const location = useLocation();\n const { t } = useTranslation();\n const [collapsedGroups, setCollapsedGroups] = useState<Record<string, boolean>>({});\n\n const toggleGroup = (title: string) => {\n setCollapsedGroups(prev => ({\n ...prev,\n [title]: !prev[title]\n }));\n };\n\n return (\n <div className=\"flex h-full flex-col\">\n {/* Brand Section */}\n <div className=\"flex h-16 items-center gap-3 border-b border-sidebar-border px-4 transition-all duration-300\">\n <BrandLogo size={32} />\n {!collapsed && (\n <div className=\"flex flex-col -gap-1\">\n <span className=\"text-2xl font-black text-sidebar-foreground tracking-tighter leading-none\">{brandName}</span>\n <span className=\"text-[11px] font-bold text-primary/70 lowercase tracking-tight mt-2 ml-1 select-none underline decoration-primary/40 underline-offset-[6px] decoration-2\">\n {brandTagline}\n </span>\n </div>\n )}\n </div>\n\n {/* Create Button */}\n <div className=\"px-3 py-4 border-b border-sidebar-border/50\">\n <Link to={createPostRoute}>\n <Button\n variant=\"default\"\n className={`w-full gap-3 shadow-glow transition-all active:scale-95 group overflow-hidden rounded-xl ${\n collapsed ? \"px-0 justify-center h-10 w-10 mx-auto\" : \"justify-start px-4 h-11\"\n }`}\n title={collapsed ? t('sidebar.createPost') : undefined}\n >\n <PenTool className={`shrink-0 transition-transform duration-300 ${collapsed ? \"h-5 w-5\" : \"h-4 w-4 group-hover:scale-110\"}`} />\n {!collapsed && <span className=\"font-bold tracking-tight\">{t('sidebar.createPost')}</span>}\n </Button>\n </Link>\n </div>\n\n {/* Navigation */}\n <nav className=\"flex-1 overflow-y-auto px-2 py-3 scrollbar-hide\">\n <div className=\"space-y-6\">\n {sidebarGroups.map((group) => {\n const filteredItems = filterSidebarItems(group.items, user);\n\n if (filteredItems.length === 0) return null;\n\n const isGroupCollapsed = collapsedGroups[group.title];\n\n return (\n <div key={group.title} className=\"space-y-1\">\n {!collapsed && (\n <button\n onClick={() => toggleGroup(group.title)}\n className=\"w-full flex items-center justify-between px-3 mb-2 group/header\"\n >\n <span className=\"text-[10px] font-bold uppercase tracking-widest text-sidebar-foreground/40 group-hover/header:text-sidebar-foreground/70 transition-colors\">\n {group.title === \"sidebar.ai\" ? `${brandName} AI` : t(group.title)}\n </span>\n {isGroupCollapsed ? (\n <ChevronRight className=\"h-3 w-3 text-sidebar-foreground/30 flex-shrink-0 group-hover/header:text-sidebar-foreground/50 transition-colors\" />\n ) : (\n <ChevronDown className=\"h-3 w-3 text-sidebar-foreground/30 flex-shrink-0 group-hover/header:text-sidebar-foreground/50 transition-colors\" />\n )}\n </button>\n )}\n\n {(!isGroupCollapsed || collapsed) && filteredItems.map((item) => {\n const active = location.pathname === item.path;\n return (\n <Link\n key={item.path}\n to={item.path}\n className={`flex items-center gap-3 rounded-lg px-3 py-2 text-sm font-medium transition-all duration-200 ${\n active\n ? \"bg-sidebar-accent text-sidebar-accent-foreground shadow-sm\"\n : \"text-sidebar-foreground/70 hover:bg-sidebar-accent/40 hover:text-sidebar-foreground\"\n } ${collapsed ? \"justify-center\" : \"\"}`}\n title={collapsed ? t(item.label) : undefined}\n >\n <item.icon className={`h-4 w-4 shrink-0 transition-transform ${active && \"scale-110\"}`} />\n {!collapsed && <span>{t(item.label)}</span>}\n </Link>\n );\n })}\n </div>\n );\n })}\n </div>\n </nav>\n\n {/* Collapse Toggle */}\n <div className=\"border-t border-sidebar-border p-3\">\n <div className={`flex items-center ${collapsed ? \"justify-center\" : \"justify-between\"}`}>\n {!collapsed && (\n <p className=\"text-[10px] uppercase tracking-wider text-sidebar-foreground/40 font-bold px-2\">\n {t('sidebar.system')}\n </p>\n )}\n <Button variant=\"ghost\" size=\"icon\" onClick={() => setCollapsed(!collapsed)} className=\"text-sidebar-foreground/70\">\n {collapsed ? <Menu className=\"h-4 w-4\" /> : <ChevronLeft className=\"h-4 w-4\" />}\n </Button>\n </div>\n </div>\n </div>\n );\n};\n","import React from \"react\";\nimport { cn } from \"@umituz/web-design-system/utils\";\n\ninterface BrandLogoProps {\n className?: string;\n size?: number;\n}\n\n/**\n * BrandLogo Component\n *\n * Displays the application brand logo as an SVG.\n * Supports custom sizing and styling through className.\n *\n * @param className - Optional CSS classes for styling\n * @param size - Width and height in pixels (default: 32)\n */\nexport const BrandLogo = ({ className, size = 32 }: BrandLogoProps) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 100 100\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={cn(\"shrink-0\", className)}\n >\n {/* Solid Foundation / Platform */}\n <rect\n x=\"15\"\n y=\"65\"\n width=\"70\"\n height=\"15\"\n rx=\"4\"\n fill=\"hsl(var(--primary))\"\n />\n\n {/* Assembly Paths / Structure */}\n <rect\n x=\"25\"\n y=\"25\"\n width=\"12\"\n height=\"40\"\n rx=\"2\"\n fill=\"hsl(var(--primary))\"\n />\n <rect\n x=\"44\"\n y=\"35\"\n width=\"12\"\n height=\"30\"\n rx=\"2\"\n fill=\"hsl(var(--primary))\"\n />\n <rect\n x=\"63\"\n y=\"20\"\n width=\"12\"\n height=\"45\"\n rx=\"2\"\n fill=\"hsl(var(--primary))\"\n />\n\n {/* Modern Accent - The 'Assembly' Bridge */}\n <rect\n x=\"20\"\n y=\"45\"\n width=\"60\"\n height=\"10\"\n rx=\"2\"\n fill=\"hsl(var(--secondary))\"\n />\n\n {/* Connection Point / Beacon */}\n <circle\n cx=\"50\"\n cy=\"20\"\n r=\"5\"\n fill=\"hsl(var(--secondary))\"\n />\n </svg>\n );\n};\n","/**\n * Dashboard Utilities\n *\n * Utility functions for dashboard operations\n */\n\n/**\n * Format notification timestamp to relative time\n *\n * @param createdAt - Notification creation timestamp\n * @param t - i18n translation function\n * @returns Formatted time string\n */\nexport function formatNotificationTime(\n createdAt: Date | string | number,\n t: (key: string, params?: Record<string, unknown>) => string\n): string {\n const date = new Date(createdAt);\n const secs = Math.floor((Date.now() - date.getTime()) / 1000);\n\n if (secs < 60) return t(\"dashboard.activityFeed.times.justNow\");\n if (secs < 3600) return t(\"dashboard.activityFeed.times.minutesAgo\", { val: Math.floor(secs / 60) });\n if (secs < 86400) return t(\"dashboard.activityFeed.times.hoursAgo\", { val: Math.floor(secs / 3600) });\n return t(\"dashboard.activityFeed.times.daysAgo\", { val: Math.floor(secs / 86400) });\n}\n\n/**\n * Check if a path is active\n *\n * @param currentPath - Current location pathname\n * @param targetPath - Target path to check\n * @returns True if paths match\n */\nexport function isPathActive(currentPath: string, targetPath: string): boolean {\n return currentPath === targetPath;\n}\n\n/**\n * Get page title from sidebar configuration\n *\n * @param pathname - Current pathname\n * @param sidebarGroups - Sidebar groups configuration\n * @param extraTitleMap - Extra title mappings\n * @returns Page title or null\n */\nexport function getPageTitle(\n pathname: string,\n sidebarGroups: Array<{ items: Array<{ path: string; label: string }> }>,\n extraTitleMap?: Record<string, string>\n): string | null {\n // Search in sidebar groups\n for (const group of sidebarGroups) {\n const item = group.items.find((i) => i.path === pathname);\n if (item) return item.label;\n }\n\n // Search in extra title map\n if (extraTitleMap?.[pathname]) {\n return extraTitleMap[pathname];\n }\n\n return null;\n}\n\n/**\n * Filter sidebar items by app type and enabled status\n *\n * @param items - Sidebar items to filter\n * @param user - Current user object\n * @returns Filtered items\n */\nexport function filterSidebarItems<T extends { enabled?: boolean; requiredApp?: \"mobile\" | \"web\" }>(\n items: T[],\n user?: { hasMobileApp?: boolean; hasWebApp?: boolean }\n): T[] {\n return items.filter((item) => {\n // Skip disabled items\n if (item.enabled === false) return false;\n\n // Skip items that require specific app types\n if (!item.requiredApp) return true;\n if (item.requiredApp === \"mobile\") return user?.hasMobileApp ?? false;\n if (item.requiredApp === \"web\") return user?.hasWebApp ?? false;\n\n return true;\n });\n}\n\n/**\n * Generate notification ID\n *\n * @returns Unique notification ID\n */\nexport function generateNotificationId(): string {\n return crypto.randomUUID();\n}\n"],"mappings":"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","names":["jsx","jsxs"]}
@@ -1,6 +1,5 @@
1
1
  import * as react from 'react';
2
- import { DashboardNotification } from '../../domain/types/index.js';
3
- import 'lucide-react';
2
+ import { DashboardNotification } from '../types/notification.js';
4
3
 
5
4
  /**
6
5
  * Use Notifications Hook
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- // src/infrastructure/hooks/index.ts
3
+ // src/domains/layouts/hooks/dashboard.ts
4
4
  import { useState, useCallback } from "react";
5
5
  function useNotifications(initialNotifications = []) {
6
6
  const [notifications, setNotifications] = useState(initialNotifications);
@@ -54,4 +54,4 @@ export {
54
54
  useNotifications,
55
55
  useSidebar
56
56
  };
57
- //# sourceMappingURL=index.js.map
57
+ //# sourceMappingURL=dashboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/domains/layouts/hooks/dashboard.ts"],"sourcesContent":["/**\n * Dashboard Hooks\n *\n * Custom React hooks for dashboard functionality\n */\n\nimport { useState, useCallback } from \"react\";\nimport type { DashboardNotification } from \"../types/notification\";\n\n/**\n * Use Notifications Hook\n *\n * Manages notification state and actions\n *\n * @param initialNotifications - Initial notification list\n * @returns Notification state and actions\n */\nexport function useNotifications(initialNotifications: DashboardNotification[] = []) {\n const [notifications, setNotifications] = useState<DashboardNotification[]>(initialNotifications);\n\n const markAllRead = useCallback(() => {\n setNotifications((prev) =>\n prev.map((n) => ({ ...n, read: true }))\n );\n }, []);\n\n const dismiss = useCallback((id: string) => {\n setNotifications((prev) => prev.filter((n) => n.id !== id));\n }, []);\n\n const add = useCallback((notification: Omit<DashboardNotification, \"id\">) => {\n const newNotification: DashboardNotification = {\n ...notification,\n id: crypto.randomUUID(),\n read: false,\n createdAt: new Date(),\n };\n setNotifications((prev) => [newNotification, ...prev]);\n }, []);\n\n return {\n notifications,\n markAllRead,\n dismiss,\n add,\n };\n}\n\n/**\n * Use Sidebar Hook\n *\n * Manages sidebar state\n *\n * @returns Sidebar state and actions\n */\nexport function useSidebar(initialCollapsed = false) {\n const [collapsed, setCollapsed] = useState(initialCollapsed);\n const [mobileOpen, setMobileOpen] = useState(false);\n\n const toggle = useCallback(() => {\n setCollapsed((prev) => !prev);\n }, []);\n\n const openMobile = useCallback(() => {\n setMobileOpen(true);\n }, []);\n\n const closeMobile = useCallback(() => {\n setMobileOpen(false);\n }, []);\n\n return {\n collapsed,\n setCollapsed,\n toggle,\n mobileOpen,\n setMobileOpen: setMobileOpen,\n openMobile,\n closeMobile,\n };\n}\n"],"mappings":";;;AAMA,SAAS,UAAU,mBAAmB;AAW/B,SAAS,iBAAiB,uBAAgD,CAAC,GAAG;AACnF,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAkC,oBAAoB;AAEhG,QAAM,cAAc,YAAY,MAAM;AACpC;AAAA,MAAiB,CAAC,SAChB,KAAK,IAAI,CAAC,OAAO,EAAE,GAAG,GAAG,MAAM,KAAK,EAAE;AAAA,IACxC;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,UAAU,YAAY,CAAC,OAAe;AAC1C,qBAAiB,CAAC,SAAS,KAAK,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;AAAA,EAC5D,GAAG,CAAC,CAAC;AAEL,QAAM,MAAM,YAAY,CAAC,iBAAoD;AAC3E,UAAM,kBAAyC;AAAA,MAC7C,GAAG;AAAA,MACH,IAAI,OAAO,WAAW;AAAA,MACtB,MAAM;AAAA,MACN,WAAW,oBAAI,KAAK;AAAA,IACtB;AACA,qBAAiB,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC;AAAA,EACvD,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AASO,SAAS,WAAW,mBAAmB,OAAO;AACnD,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,gBAAgB;AAC3D,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAElD,QAAM,SAAS,YAAY,MAAM;AAC/B,iBAAa,CAAC,SAAS,CAAC,IAAI;AAAA,EAC9B,GAAG,CAAC,CAAC;AAEL,QAAM,aAAa,YAAY,MAAM;AACnC,kBAAc,IAAI;AAAA,EACpB,GAAG,CAAC,CAAC;AAEL,QAAM,cAAc,YAAY,MAAM;AACpC,kBAAc,KAAK;AAAA,EACrB,GAAG,CAAC,CAAC;AAEL,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,18 @@
1
+ import { DashboardTheme } from '../types/theme.js';
2
+
3
+ /**
4
+ * Dashboard Theme - Default Themes
5
+ *
6
+ * Default light and dark theme configurations
7
+ */
8
+
9
+ /**
10
+ * Default dashboard theme (light mode)
11
+ */
12
+ declare const DEFAULT_DASHBOARD_THEME: DashboardTheme;
13
+ /**
14
+ * Default dashboard theme (dark mode)
15
+ */
16
+ declare const DEFAULT_DASHBOARD_THEME_DARK: DashboardTheme;
17
+
18
+ export { DEFAULT_DASHBOARD_THEME, DEFAULT_DASHBOARD_THEME_DARK };
@@ -0,0 +1,52 @@
1
+ "use client";
2
+
3
+ // src/domains/layouts/theme/default.ts
4
+ var DEFAULT_DASHBOARD_THEME = {
5
+ primary: "hsl(222.2 47.4% 11.2%)",
6
+ secondary: "hsl(217.2 32.6% 17.5%)",
7
+ sidebarBackground: "hsl(222.2 47.4% 11.2%)",
8
+ sidebarForeground: "hsl(210 40% 98%)",
9
+ sidebarBorder: "hsl(217.2 32.6% 17.5%)",
10
+ headerBackground: "hsla(0, 0%, 100%, 0.8)",
11
+ background: "hsl(0 0% 100%)",
12
+ foreground: "hsl(222.2 84% 4.9%)",
13
+ border: "hsl(214.3 31.8% 91.4%)",
14
+ accent: "hsl(217.2 91.2% 59.8%)",
15
+ accentForeground: "hsl(0 0% 100%)",
16
+ destructive: "hsl(0 84.2% 60.2%)",
17
+ destructiveForeground: "hsl(0 0% 98%)",
18
+ muted: "hsl(210 40% 96.1%)",
19
+ mutedForeground: "hsl(215.4 16.3% 46.9%)",
20
+ card: "hsl(0 0% 100%)",
21
+ cardForeground: "hsl(222.2 84% 4.9%)",
22
+ popover: "hsl(0 0% 100%)",
23
+ popoverForeground: "hsl(222.2 84% 4.9%)",
24
+ radius: "0.5rem"
25
+ };
26
+ var DEFAULT_DASHBOARD_THEME_DARK = {
27
+ primary: "hsl(217.2 91.2% 59.8%)",
28
+ secondary: "hsl(217.2 32.6% 17.5%)",
29
+ sidebarBackground: "hsl(222.2 47.4% 11.2%)",
30
+ sidebarForeground: "hsl(210 40% 98%)",
31
+ sidebarBorder: "hsl(217.2 32.6% 17.5%)",
32
+ headerBackground: "hsla(222.2 47.4% 11.2%, 0.8)",
33
+ background: "hsl(222.2 84% 4.9%)",
34
+ foreground: "hsl(210 40% 98%)",
35
+ border: "hsl(217.2 32.6% 17.5%)",
36
+ accent: "hsl(217.2 91.2% 59.8%)",
37
+ accentForeground: "hsl(0 0% 100%)",
38
+ destructive: "hsl(0 62.8% 30.6%)",
39
+ destructiveForeground: "hsl(0 0% 98%)",
40
+ muted: "hsl(217.2 32.6% 17.5%)",
41
+ mutedForeground: "hsl(215 20.2% 65.1%)",
42
+ card: "hsl(222.2 84% 4.9%)",
43
+ cardForeground: "hsl(210 40% 98%)",
44
+ popover: "hsl(222.2 84% 4.9%)",
45
+ popoverForeground: "hsl(210 40% 98%)",
46
+ radius: "0.5rem"
47
+ };
48
+ export {
49
+ DEFAULT_DASHBOARD_THEME,
50
+ DEFAULT_DASHBOARD_THEME_DARK
51
+ };
52
+ //# sourceMappingURL=default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/domains/layouts/theme/default.ts"],"sourcesContent":["/**\n * Dashboard Theme - Default Themes\n *\n * Default light and dark theme configurations\n */\n\nimport type { DashboardTheme } from '../types/theme';\n\n/**\n * Default dashboard theme (light mode)\n */\nexport const DEFAULT_DASHBOARD_THEME: DashboardTheme = {\n primary: \"hsl(222.2 47.4% 11.2%)\",\n secondary: \"hsl(217.2 32.6% 17.5%)\",\n sidebarBackground: \"hsl(222.2 47.4% 11.2%)\",\n sidebarForeground: \"hsl(210 40% 98%)\",\n sidebarBorder: \"hsl(217.2 32.6% 17.5%)\",\n headerBackground: \"hsla(0, 0%, 100%, 0.8)\",\n background: \"hsl(0 0% 100%)\",\n foreground: \"hsl(222.2 84% 4.9%)\",\n border: \"hsl(214.3 31.8% 91.4%)\",\n accent: \"hsl(217.2 91.2% 59.8%)\",\n accentForeground: \"hsl(0 0% 100%)\",\n destructive: \"hsl(0 84.2% 60.2%)\",\n destructiveForeground: \"hsl(0 0% 98%)\",\n muted: \"hsl(210 40% 96.1%)\",\n mutedForeground: \"hsl(215.4 16.3% 46.9%)\",\n card: \"hsl(0 0% 100%)\",\n cardForeground: \"hsl(222.2 84% 4.9%)\",\n popover: \"hsl(0 0% 100%)\",\n popoverForeground: \"hsl(222.2 84% 4.9%)\",\n radius: \"0.5rem\",\n};\n\n/**\n * Default dashboard theme (dark mode)\n */\nexport const DEFAULT_DASHBOARD_THEME_DARK: DashboardTheme = {\n primary: \"hsl(217.2 91.2% 59.8%)\",\n secondary: \"hsl(217.2 32.6% 17.5%)\",\n sidebarBackground: \"hsl(222.2 47.4% 11.2%)\",\n sidebarForeground: \"hsl(210 40% 98%)\",\n sidebarBorder: \"hsl(217.2 32.6% 17.5%)\",\n headerBackground: \"hsla(222.2 47.4% 11.2%, 0.8)\",\n background: \"hsl(222.2 84% 4.9%)\",\n foreground: \"hsl(210 40% 98%)\",\n border: \"hsl(217.2 32.6% 17.5%)\",\n accent: \"hsl(217.2 91.2% 59.8%)\",\n accentForeground: \"hsl(0 0% 100%)\",\n destructive: \"hsl(0 62.8% 30.6%)\",\n destructiveForeground: \"hsl(0 0% 98%)\",\n muted: \"hsl(217.2 32.6% 17.5%)\",\n mutedForeground: \"hsl(215 20.2% 65.1%)\",\n card: \"hsl(222.2 84% 4.9%)\",\n cardForeground: \"hsl(210 40% 98%)\",\n popover: \"hsl(222.2 84% 4.9%)\",\n popoverForeground: \"hsl(210 40% 98%)\",\n radius: \"0.5rem\",\n};\n"],"mappings":";;;AAWO,IAAM,0BAA0C;AAAA,EACrD,SAAS;AAAA,EACT,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,OAAO;AAAA,EACP,iBAAiB;AAAA,EACjB,MAAM;AAAA,EACN,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,mBAAmB;AAAA,EACnB,QAAQ;AACV;AAKO,IAAM,+BAA+C;AAAA,EAC1D,SAAS;AAAA,EACT,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,OAAO;AAAA,EACP,iBAAiB;AAAA,EACjB,MAAM;AAAA,EACN,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,mBAAmB;AAAA,EACnB,QAAQ;AACV;","names":[]}
@@ -0,0 +1,14 @@
1
+ import { DashboardThemePreset } from '../types/theme.js';
2
+
3
+ /**
4
+ * Dashboard Theme - Presets
5
+ *
6
+ * Pre-configured theme presets
7
+ */
8
+
9
+ /**
10
+ * Available theme presets
11
+ */
12
+ declare const DASHBOARD_THEME_PRESETS: DashboardThemePreset[];
13
+
14
+ export { DASHBOARD_THEME_PRESETS };
@@ -0,0 +1,137 @@
1
+ "use client";
2
+
3
+ // src/domains/layouts/theme/default.ts
4
+ var DEFAULT_DASHBOARD_THEME = {
5
+ primary: "hsl(222.2 47.4% 11.2%)",
6
+ secondary: "hsl(217.2 32.6% 17.5%)",
7
+ sidebarBackground: "hsl(222.2 47.4% 11.2%)",
8
+ sidebarForeground: "hsl(210 40% 98%)",
9
+ sidebarBorder: "hsl(217.2 32.6% 17.5%)",
10
+ headerBackground: "hsla(0, 0%, 100%, 0.8)",
11
+ background: "hsl(0 0% 100%)",
12
+ foreground: "hsl(222.2 84% 4.9%)",
13
+ border: "hsl(214.3 31.8% 91.4%)",
14
+ accent: "hsl(217.2 91.2% 59.8%)",
15
+ accentForeground: "hsl(0 0% 100%)",
16
+ destructive: "hsl(0 84.2% 60.2%)",
17
+ destructiveForeground: "hsl(0 0% 98%)",
18
+ muted: "hsl(210 40% 96.1%)",
19
+ mutedForeground: "hsl(215.4 16.3% 46.9%)",
20
+ card: "hsl(0 0% 100%)",
21
+ cardForeground: "hsl(222.2 84% 4.9%)",
22
+ popover: "hsl(0 0% 100%)",
23
+ popoverForeground: "hsl(222.2 84% 4.9%)",
24
+ radius: "0.5rem"
25
+ };
26
+ var DEFAULT_DASHBOARD_THEME_DARK = {
27
+ primary: "hsl(217.2 91.2% 59.8%)",
28
+ secondary: "hsl(217.2 32.6% 17.5%)",
29
+ sidebarBackground: "hsl(222.2 47.4% 11.2%)",
30
+ sidebarForeground: "hsl(210 40% 98%)",
31
+ sidebarBorder: "hsl(217.2 32.6% 17.5%)",
32
+ headerBackground: "hsla(222.2 47.4% 11.2%, 0.8)",
33
+ background: "hsl(222.2 84% 4.9%)",
34
+ foreground: "hsl(210 40% 98%)",
35
+ border: "hsl(217.2 32.6% 17.5%)",
36
+ accent: "hsl(217.2 91.2% 59.8%)",
37
+ accentForeground: "hsl(0 0% 100%)",
38
+ destructive: "hsl(0 62.8% 30.6%)",
39
+ destructiveForeground: "hsl(0 0% 98%)",
40
+ muted: "hsl(217.2 32.6% 17.5%)",
41
+ mutedForeground: "hsl(215 20.2% 65.1%)",
42
+ card: "hsl(222.2 84% 4.9%)",
43
+ cardForeground: "hsl(210 40% 98%)",
44
+ popover: "hsl(222.2 84% 4.9%)",
45
+ popoverForeground: "hsl(210 40% 98%)",
46
+ radius: "0.5rem"
47
+ };
48
+
49
+ // src/domains/layouts/theme/presets.ts
50
+ var DASHBOARD_THEME_PRESETS = [
51
+ {
52
+ name: "default",
53
+ theme: DEFAULT_DASHBOARD_THEME,
54
+ dark: false
55
+ },
56
+ {
57
+ name: "default-dark",
58
+ theme: DEFAULT_DASHBOARD_THEME_DARK,
59
+ dark: true
60
+ },
61
+ {
62
+ name: "blue",
63
+ theme: {
64
+ ...DEFAULT_DASHBOARD_THEME,
65
+ primary: "hsl(221.2 83.2% 53.3%)",
66
+ accent: "hsl(221.2 83.2% 53.3%)"
67
+ },
68
+ dark: false
69
+ },
70
+ {
71
+ name: "blue-dark",
72
+ theme: {
73
+ ...DEFAULT_DASHBOARD_THEME_DARK,
74
+ primary: "hsl(221.2 83.2% 53.3%)",
75
+ accent: "hsl(221.2 83.2% 53.3%)"
76
+ },
77
+ dark: true
78
+ },
79
+ {
80
+ name: "purple",
81
+ theme: {
82
+ ...DEFAULT_DASHBOARD_THEME,
83
+ primary: "hsl(271.5 81.3% 55.9%)",
84
+ accent: "hsl(271.5 81.3% 55.9%)"
85
+ },
86
+ dark: false
87
+ },
88
+ {
89
+ name: "purple-dark",
90
+ theme: {
91
+ ...DEFAULT_DASHBOARD_THEME_DARK,
92
+ primary: "hsl(271.5 81.3% 55.9%)",
93
+ accent: "hsl(271.5 81.3% 55.9%)"
94
+ },
95
+ dark: true
96
+ },
97
+ {
98
+ name: "green",
99
+ theme: {
100
+ ...DEFAULT_DASHBOARD_THEME,
101
+ primary: "hsl(142.1 76.2% 36.3%)",
102
+ accent: "hsl(142.1 76.2% 36.3%)"
103
+ },
104
+ dark: false
105
+ },
106
+ {
107
+ name: "green-dark",
108
+ theme: {
109
+ ...DEFAULT_DASHBOARD_THEME_DARK,
110
+ primary: "hsl(142.1 76.2% 36.3%)",
111
+ accent: "hsl(142.1 76.2% 36.3%)"
112
+ },
113
+ dark: true
114
+ },
115
+ {
116
+ name: "orange",
117
+ theme: {
118
+ ...DEFAULT_DASHBOARD_THEME,
119
+ primary: "hsl(24.6 95% 53.1%)",
120
+ accent: "hsl(24.6 95% 53.1%)"
121
+ },
122
+ dark: false
123
+ },
124
+ {
125
+ name: "orange-dark",
126
+ theme: {
127
+ ...DEFAULT_DASHBOARD_THEME_DARK,
128
+ primary: "hsl(24.6 95% 53.1%)",
129
+ accent: "hsl(24.6 95% 53.1%)"
130
+ },
131
+ dark: true
132
+ }
133
+ ];
134
+ export {
135
+ DASHBOARD_THEME_PRESETS
136
+ };
137
+ //# sourceMappingURL=presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/domains/layouts/theme/default.ts","../../src/domains/layouts/theme/presets.ts"],"sourcesContent":["/**\n * Dashboard Theme - Default Themes\n *\n * Default light and dark theme configurations\n */\n\nimport type { DashboardTheme } from '../types/theme';\n\n/**\n * Default dashboard theme (light mode)\n */\nexport const DEFAULT_DASHBOARD_THEME: DashboardTheme = {\n primary: \"hsl(222.2 47.4% 11.2%)\",\n secondary: \"hsl(217.2 32.6% 17.5%)\",\n sidebarBackground: \"hsl(222.2 47.4% 11.2%)\",\n sidebarForeground: \"hsl(210 40% 98%)\",\n sidebarBorder: \"hsl(217.2 32.6% 17.5%)\",\n headerBackground: \"hsla(0, 0%, 100%, 0.8)\",\n background: \"hsl(0 0% 100%)\",\n foreground: \"hsl(222.2 84% 4.9%)\",\n border: \"hsl(214.3 31.8% 91.4%)\",\n accent: \"hsl(217.2 91.2% 59.8%)\",\n accentForeground: \"hsl(0 0% 100%)\",\n destructive: \"hsl(0 84.2% 60.2%)\",\n destructiveForeground: \"hsl(0 0% 98%)\",\n muted: \"hsl(210 40% 96.1%)\",\n mutedForeground: \"hsl(215.4 16.3% 46.9%)\",\n card: \"hsl(0 0% 100%)\",\n cardForeground: \"hsl(222.2 84% 4.9%)\",\n popover: \"hsl(0 0% 100%)\",\n popoverForeground: \"hsl(222.2 84% 4.9%)\",\n radius: \"0.5rem\",\n};\n\n/**\n * Default dashboard theme (dark mode)\n */\nexport const DEFAULT_DASHBOARD_THEME_DARK: DashboardTheme = {\n primary: \"hsl(217.2 91.2% 59.8%)\",\n secondary: \"hsl(217.2 32.6% 17.5%)\",\n sidebarBackground: \"hsl(222.2 47.4% 11.2%)\",\n sidebarForeground: \"hsl(210 40% 98%)\",\n sidebarBorder: \"hsl(217.2 32.6% 17.5%)\",\n headerBackground: \"hsla(222.2 47.4% 11.2%, 0.8)\",\n background: \"hsl(222.2 84% 4.9%)\",\n foreground: \"hsl(210 40% 98%)\",\n border: \"hsl(217.2 32.6% 17.5%)\",\n accent: \"hsl(217.2 91.2% 59.8%)\",\n accentForeground: \"hsl(0 0% 100%)\",\n destructive: \"hsl(0 62.8% 30.6%)\",\n destructiveForeground: \"hsl(0 0% 98%)\",\n muted: \"hsl(217.2 32.6% 17.5%)\",\n mutedForeground: \"hsl(215 20.2% 65.1%)\",\n card: \"hsl(222.2 84% 4.9%)\",\n cardForeground: \"hsl(210 40% 98%)\",\n popover: \"hsl(222.2 84% 4.9%)\",\n popoverForeground: \"hsl(210 40% 98%)\",\n radius: \"0.5rem\",\n};\n","/**\n * Dashboard Theme - Presets\n *\n * Pre-configured theme presets\n */\n\nimport type { DashboardThemePreset } from '../types/theme';\nimport { DEFAULT_DASHBOARD_THEME, DEFAULT_DASHBOARD_THEME_DARK } from './default';\n\n/**\n * Available theme presets\n */\nexport const DASHBOARD_THEME_PRESETS: DashboardThemePreset[] = [\n {\n name: \"default\",\n theme: DEFAULT_DASHBOARD_THEME,\n dark: false,\n },\n {\n name: \"default-dark\",\n theme: DEFAULT_DASHBOARD_THEME_DARK,\n dark: true,\n },\n {\n name: \"blue\",\n theme: {\n ...DEFAULT_DASHBOARD_THEME,\n primary: \"hsl(221.2 83.2% 53.3%)\",\n accent: \"hsl(221.2 83.2% 53.3%)\",\n },\n dark: false,\n },\n {\n name: \"blue-dark\",\n theme: {\n ...DEFAULT_DASHBOARD_THEME_DARK,\n primary: \"hsl(221.2 83.2% 53.3%)\",\n accent: \"hsl(221.2 83.2% 53.3%)\",\n },\n dark: true,\n },\n {\n name: \"purple\",\n theme: {\n ...DEFAULT_DASHBOARD_THEME,\n primary: \"hsl(271.5 81.3% 55.9%)\",\n accent: \"hsl(271.5 81.3% 55.9%)\",\n },\n dark: false,\n },\n {\n name: \"purple-dark\",\n theme: {\n ...DEFAULT_DASHBOARD_THEME_DARK,\n primary: \"hsl(271.5 81.3% 55.9%)\",\n accent: \"hsl(271.5 81.3% 55.9%)\",\n },\n dark: true,\n },\n {\n name: \"green\",\n theme: {\n ...DEFAULT_DASHBOARD_THEME,\n primary: \"hsl(142.1 76.2% 36.3%)\",\n accent: \"hsl(142.1 76.2% 36.3%)\",\n },\n dark: false,\n },\n {\n name: \"green-dark\",\n theme: {\n ...DEFAULT_DASHBOARD_THEME_DARK,\n primary: \"hsl(142.1 76.2% 36.3%)\",\n accent: \"hsl(142.1 76.2% 36.3%)\",\n },\n dark: true,\n },\n {\n name: \"orange\",\n theme: {\n ...DEFAULT_DASHBOARD_THEME,\n primary: \"hsl(24.6 95% 53.1%)\",\n accent: \"hsl(24.6 95% 53.1%)\",\n },\n dark: false,\n },\n {\n name: \"orange-dark\",\n theme: {\n ...DEFAULT_DASHBOARD_THEME_DARK,\n primary: \"hsl(24.6 95% 53.1%)\",\n accent: \"hsl(24.6 95% 53.1%)\",\n },\n dark: true,\n },\n];\n"],"mappings":";;;AAWO,IAAM,0BAA0C;AAAA,EACrD,SAAS;AAAA,EACT,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,OAAO;AAAA,EACP,iBAAiB;AAAA,EACjB,MAAM;AAAA,EACN,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,mBAAmB;AAAA,EACnB,QAAQ;AACV;AAKO,IAAM,+BAA+C;AAAA,EAC1D,SAAS;AAAA,EACT,WAAW;AAAA,EACX,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,eAAe;AAAA,EACf,kBAAkB;AAAA,EAClB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,OAAO;AAAA,EACP,iBAAiB;AAAA,EACjB,MAAM;AAAA,EACN,gBAAgB;AAAA,EAChB,SAAS;AAAA,EACT,mBAAmB;AAAA,EACnB,QAAQ;AACV;;;AC9CO,IAAM,0BAAkD;AAAA,EAC7D;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,IACA,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,IACA,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,IACA,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,IACA,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,IACA,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,IACA,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,IACA,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,MACL,GAAG;AAAA,MACH,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,IACA,MAAM;AAAA,EACR;AACF;","names":[]}
@@ -0,0 +1,22 @@
1
+ import { DashboardTheme, DashboardThemePreset } from '../types/theme.js';
2
+
3
+ /**
4
+ * Dashboard Theme - Utilities
5
+ *
6
+ * Theme utility functions
7
+ */
8
+
9
+ /**
10
+ * Apply theme to document root via CSS variables
11
+ */
12
+ declare function applyDashboardTheme(theme: DashboardTheme): void;
13
+ /**
14
+ * Get theme preset by name
15
+ */
16
+ declare function getDashboardThemePreset(name: string): DashboardThemePreset | undefined;
17
+ /**
18
+ * Merge custom theme with default theme
19
+ */
20
+ declare function mergeDashboardTheme(customTheme: Partial<DashboardTheme>, dark?: boolean): DashboardTheme;
21
+
22
+ export { applyDashboardTheme, getDashboardThemePreset, mergeDashboardTheme };
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
- // src/domain/theme/index.ts
3
+ // src/domains/layouts/theme/default.ts
4
4
  var DEFAULT_DASHBOARD_THEME = {
5
5
  primary: "hsl(222.2 47.4% 11.2%)",
6
6
  secondary: "hsl(217.2 32.6% 17.5%)",
@@ -45,6 +45,8 @@ var DEFAULT_DASHBOARD_THEME_DARK = {
45
45
  popoverForeground: "hsl(210 40% 98%)",
46
46
  radius: "0.5rem"
47
47
  };
48
+
49
+ // src/domains/layouts/theme/presets.ts
48
50
  var DASHBOARD_THEME_PRESETS = [
49
51
  {
50
52
  name: "default",
@@ -129,6 +131,8 @@ var DASHBOARD_THEME_PRESETS = [
129
131
  dark: true
130
132
  }
131
133
  ];
134
+
135
+ // src/domains/layouts/theme/utils.ts
132
136
  function applyDashboardTheme(theme) {
133
137
  if (typeof document === "undefined") return;
134
138
  const root = document.documentElement;
@@ -170,11 +174,8 @@ function mergeDashboardTheme(customTheme, dark = false) {
170
174
  };
171
175
  }
172
176
  export {
173
- DASHBOARD_THEME_PRESETS,
174
- DEFAULT_DASHBOARD_THEME,
175
- DEFAULT_DASHBOARD_THEME_DARK,
176
177
  applyDashboardTheme,
177
178
  getDashboardThemePreset,
178
179
  mergeDashboardTheme
179
180
  };
180
- //# sourceMappingURL=index.js.map
181
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/domains/layouts/theme/default.ts","../../src/domains/layouts/theme/presets.ts","../../src/domains/layouts/theme/utils.ts"],"sourcesContent":["/**\n * Dashboard Theme - Default Themes\n *\n * Default light and dark theme configurations\n */\n\nimport type { DashboardTheme } from '../types/theme';\n\n/**\n * Default dashboard theme (light mode)\n */\nexport const DEFAULT_DASHBOARD_THEME: DashboardTheme = {\n primary: \"hsl(222.2 47.4% 11.2%)\",\n secondary: \"hsl(217.2 32.6% 17.5%)\",\n sidebarBackground: \"hsl(222.2 47.4% 11.2%)\",\n sidebarForeground: \"hsl(210 40% 98%)\",\n sidebarBorder: \"hsl(217.2 32.6% 17.5%)\",\n headerBackground: \"hsla(0, 0%, 100%, 0.8)\",\n background: \"hsl(0 0% 100%)\",\n foreground: \"hsl(222.2 84% 4.9%)\",\n border: \"hsl(214.3 31.8% 91.4%)\",\n accent: \"hsl(217.2 91.2% 59.8%)\",\n accentForeground: \"hsl(0 0% 100%)\",\n destructive: \"hsl(0 84.2% 60.2%)\",\n destructiveForeground: \"hsl(0 0% 98%)\",\n muted: \"hsl(210 40% 96.1%)\",\n mutedForeground: \"hsl(215.4 16.3% 46.9%)\",\n card: \"hsl(0 0% 100%)\",\n cardForeground: \"hsl(222.2 84% 4.9%)\",\n popover: \"hsl(0 0% 100%)\",\n popoverForeground: \"hsl(222.2 84% 4.9%)\",\n radius: \"0.5rem\",\n};\n\n/**\n * Default dashboard theme (dark mode)\n */\nexport const DEFAULT_DASHBOARD_THEME_DARK: DashboardTheme = {\n primary: \"hsl(217.2 91.2% 59.8%)\",\n secondary: \"hsl(217.2 32.6% 17.5%)\",\n sidebarBackground: \"hsl(222.2 47.4% 11.2%)\",\n sidebarForeground: \"hsl(210 40% 98%)\",\n sidebarBorder: \"hsl(217.2 32.6% 17.5%)\",\n headerBackground: \"hsla(222.2 47.4% 11.2%, 0.8)\",\n background: \"hsl(222.2 84% 4.9%)\",\n foreground: \"hsl(210 40% 98%)\",\n border: \"hsl(217.2 32.6% 17.5%)\",\n accent: \"hsl(217.2 91.2% 59.8%)\",\n accentForeground: \"hsl(0 0% 100%)\",\n destructive: \"hsl(0 62.8% 30.6%)\",\n destructiveForeground: \"hsl(0 0% 98%)\",\n muted: \"hsl(217.2 32.6% 17.5%)\",\n mutedForeground: \"hsl(215 20.2% 65.1%)\",\n card: \"hsl(222.2 84% 4.9%)\",\n cardForeground: \"hsl(210 40% 98%)\",\n popover: \"hsl(222.2 84% 4.9%)\",\n popoverForeground: \"hsl(210 40% 98%)\",\n radius: \"0.5rem\",\n};\n","/**\n * Dashboard Theme - Presets\n *\n * Pre-configured theme presets\n */\n\nimport type { DashboardThemePreset } from '../types/theme';\nimport { DEFAULT_DASHBOARD_THEME, DEFAULT_DASHBOARD_THEME_DARK } from './default';\n\n/**\n * Available theme presets\n */\nexport const DASHBOARD_THEME_PRESETS: DashboardThemePreset[] = [\n {\n name: \"default\",\n theme: DEFAULT_DASHBOARD_THEME,\n dark: false,\n },\n {\n name: \"default-dark\",\n theme: DEFAULT_DASHBOARD_THEME_DARK,\n dark: true,\n },\n {\n name: \"blue\",\n theme: {\n ...DEFAULT_DASHBOARD_THEME,\n primary: \"hsl(221.2 83.2% 53.3%)\",\n accent: \"hsl(221.2 83.2% 53.3%)\",\n },\n dark: false,\n },\n {\n name: \"blue-dark\",\n theme: {\n ...DEFAULT_DASHBOARD_THEME_DARK,\n primary: \"hsl(221.2 83.2% 53.3%)\",\n accent: \"hsl(221.2 83.2% 53.3%)\",\n },\n dark: true,\n },\n {\n name: \"purple\",\n theme: {\n ...DEFAULT_DASHBOARD_THEME,\n primary: \"hsl(271.5 81.3% 55.9%)\",\n accent: \"hsl(271.5 81.3% 55.9%)\",\n },\n dark: false,\n },\n {\n name: \"purple-dark\",\n theme: {\n ...DEFAULT_DASHBOARD_THEME_DARK,\n primary: \"hsl(271.5 81.3% 55.9%)\",\n accent: \"hsl(271.5 81.3% 55.9%)\",\n },\n dark: true,\n },\n {\n name: \"green\",\n theme: {\n ...DEFAULT_DASHBOARD_THEME,\n primary: \"hsl(142.1 76.2% 36.3%)\",\n accent: \"hsl(142.1 76.2% 36.3%)\",\n },\n dark: false,\n },\n {\n name: \"green-dark\",\n theme: {\n ...DEFAULT_DASHBOARD_THEME_DARK,\n primary: \"hsl(142.1 76.2% 36.3%)\",\n accent: \"hsl(142.1 76.2% 36.3%)\",\n },\n dark: true,\n },\n {\n name: \"orange\",\n theme: {\n ...DEFAULT_DASHBOARD_THEME,\n primary: \"hsl(24.6 95% 53.1%)\",\n accent: \"hsl(24.6 95% 53.1%)\",\n },\n dark: false,\n },\n {\n name: \"orange-dark\",\n theme: {\n ...DEFAULT_DASHBOARD_THEME_DARK,\n primary: \"hsl(24.6 95% 53.1%)\",\n accent: \"hsl(24.6 95% 53.1%)\",\n },\n dark: true,\n },\n];\n","/**\n * Dashboard Theme - Utilities\n *\n * Theme utility functions\n */\n\nimport type { DashboardTheme, DashboardThemePreset } from '../types/theme';\nimport { DEFAULT_DASHBOARD_THEME, DEFAULT_DASHBOARD_THEME_DARK } from './default';\nimport { DASHBOARD_THEME_PRESETS } from './presets';\n\n/**\n * Apply theme to document root via CSS variables\n */\nexport function applyDashboardTheme(theme: DashboardTheme): void {\n if (typeof document === \"undefined\") return;\n\n const root = document.documentElement;\n\n const cssVars: Record<string, string | undefined> = {\n \"--primary\": theme.primary,\n \"--secondary\": theme.secondary,\n \"--sidebar\": theme.sidebarBackground,\n \"--sidebar-foreground\": theme.sidebarForeground,\n \"--sidebar-border\": theme.sidebarBorder,\n \"--background\": theme.background,\n \"--foreground\": theme.foreground,\n \"--border\": theme.border,\n \"--accent\": theme.accent,\n \"--accent-foreground\": theme.accentForeground,\n \"--destructive\": theme.destructive,\n \"--destructive-foreground\": theme.destructiveForeground,\n \"--muted\": theme.muted,\n \"--muted-foreground\": theme.mutedForeground,\n \"--card\": theme.card,\n \"--card-foreground\": theme.cardForeground,\n \"--popover\": theme.popover,\n \"--popover-foreground\": theme.popoverForeground,\n \"--radius\": theme.radius,\n };\n\n Object.entries(cssVars).forEach(([key, value]) => {\n if (value) {\n root.style.setProperty(key, value);\n }\n });\n}\n\n/**\n * Get theme preset by name\n */\nexport function getDashboardThemePreset(name: string): DashboardThemePreset | undefined {\n return DASHBOARD_THEME_PRESETS.find((preset) => preset.name === name);\n}\n\n/**\n * Merge custom theme with default theme\n */\nexport function mergeDashboardTheme(\n customTheme: Partial<DashboardTheme>,\n dark = false\n): DashboardTheme {\n const baseTheme = dark ? DEFAULT_DASHBOARD_THEME_DARK : DEFAULT_DASHBOARD_THEME;\n return {\n ...baseTheme,\n ...customTheme,\n } as DashboardTheme;\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,45 @@
1
+ import { SidebarGroup } from './sidebar.js';
2
+ import 'lucide-react';
3
+
4
+ /**
5
+ * Dashboard Types - Layout
6
+ *
7
+ * Type definitions for layout components
8
+ */
9
+ /**
10
+ * Dashboard header props
11
+ */
12
+ interface DashboardHeaderProps {
13
+ /** Whether sidebar is collapsed */
14
+ collapsed: boolean;
15
+ /** Toggle sidebar collapsed state */
16
+ setCollapsed: (collapsed: boolean) => void;
17
+ /** Toggle mobile menu open state */
18
+ setMobileOpen: (open: boolean) => void;
19
+ /** Current page title */
20
+ title: string;
21
+ }
22
+ /**
23
+ * Dashboard sidebar props
24
+ */
25
+ interface DashboardSidebarProps {
26
+ /** Whether sidebar is collapsed */
27
+ collapsed: boolean;
28
+ /** Toggle sidebar collapsed state */
29
+ setCollapsed: (collapsed: boolean) => void;
30
+ }
31
+ /**
32
+ * Dashboard layout configuration
33
+ */
34
+ interface DashboardLayoutConfig {
35
+ /** Sidebar groups */
36
+ sidebarGroups: SidebarGroup[];
37
+ /** Extra title mappings for routes */
38
+ extraTitleMap?: Record<string, string>;
39
+ /** Brand name */
40
+ brandName?: string;
41
+ /** Brand tagline */
42
+ brandTagline?: string;
43
+ }
44
+
45
+ export type { DashboardHeaderProps, DashboardLayoutConfig, DashboardSidebarProps };
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Dashboard Types - Notification
3
+ *
4
+ * Type definitions for notification system
5
+ */
6
+ /**
7
+ * Notification item
8
+ */
9
+ interface DashboardNotification {
10
+ /** Unique ID */
11
+ id: string;
12
+ /** Notification text */
13
+ text: string;
14
+ /** Whether notification is read */
15
+ read: boolean;
16
+ /** Creation timestamp */
17
+ createdAt: Date | string | number;
18
+ }
19
+
20
+ export type { DashboardNotification };
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ //# sourceMappingURL=notification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,36 @@
1
+ import { LucideIcon } from 'lucide-react';
2
+
3
+ /**
4
+ * Dashboard Types - Sidebar
5
+ *
6
+ * Type definitions for sidebar components
7
+ */
8
+
9
+ /**
10
+ * Single sidebar menu item
11
+ */
12
+ interface SidebarItem {
13
+ /** Display label (can be i18n key) */
14
+ label: string;
15
+ /** Icon from lucide-react */
16
+ icon: LucideIcon;
17
+ /** Route path */
18
+ path: string;
19
+ /** Filter by app type (optional) */
20
+ requiredApp?: 'mobile' | 'web';
21
+ /** Enable/disable this item (default: true) */
22
+ enabled?: boolean;
23
+ }
24
+ /**
25
+ * Group of sidebar items with a title
26
+ */
27
+ interface SidebarGroup {
28
+ /** Group title (can be i18n key) */
29
+ title: string;
30
+ /** Items in this group */
31
+ items: SidebarItem[];
32
+ /** Optional: Route to title mapping for page headers */
33
+ titleMap?: Record<string, string>;
34
+ }
35
+
36
+ export type { SidebarGroup, SidebarItem };
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ //# sourceMappingURL=sidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Dashboard Types - Theme
3
+ *
4
+ * Type definitions for theme system
5
+ */
6
+ /**
7
+ * Dashboard theme configuration
8
+ * Extends CSS variables for customization
9
+ */
10
+ interface DashboardTheme {
11
+ /** Primary color (CSS variable compatible) */
12
+ primary?: string;
13
+ /** Secondary color */
14
+ secondary?: string;
15
+ /** Sidebar background */
16
+ sidebarBackground?: string;
17
+ /** Sidebar foreground */
18
+ sidebarForeground?: string;
19
+ /** Sidebar border */
20
+ sidebarBorder?: string;
21
+ /** Header background */
22
+ headerBackground?: string;
23
+ /** Background color */
24
+ background?: string;
25
+ /** Foreground color */
26
+ foreground?: string;
27
+ /** Border color */
28
+ border?: string;
29
+ /** Accent color */
30
+ accent?: string;
31
+ /** Accent foreground */
32
+ accentForeground?: string;
33
+ /** Destructive color */
34
+ destructive?: string;
35
+ /** Destructive foreground */
36
+ destructiveForeground?: string;
37
+ /** Muted background */
38
+ muted?: string;
39
+ /** Muted foreground */
40
+ mutedForeground?: string;
41
+ /** Card background */
42
+ card?: string;
43
+ /** Card foreground */
44
+ cardForeground?: string;
45
+ /** Popover background */
46
+ popover?: string;
47
+ /** Popover foreground */
48
+ popoverForeground?: string;
49
+ /** Radius (border-radius) */
50
+ radius?: string;
51
+ }
52
+ /**
53
+ * Theme preset for quick setup
54
+ */
55
+ interface DashboardThemePreset {
56
+ /** Preset name */
57
+ name: string;
58
+ /** Theme configuration */
59
+ theme: DashboardTheme;
60
+ /** Whether this is a dark theme */
61
+ dark?: boolean;
62
+ }
63
+
64
+ export type { DashboardTheme, DashboardThemePreset };
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ //# sourceMappingURL=theme.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Dashboard Types - User
3
+ *
4
+ * Type definitions for user profile
5
+ */
6
+ /**
7
+ * User profile info for header
8
+ */
9
+ interface DashboardUser {
10
+ /** User ID */
11
+ id: string;
12
+ /** Display name */
13
+ name?: string;
14
+ /** Email address */
15
+ email?: string;
16
+ /** Avatar URL */
17
+ avatar?: string;
18
+ /** Whether user has mobile app access */
19
+ hasMobileApp?: boolean;
20
+ /** Whether user has web app access */
21
+ hasWebApp?: boolean;
22
+ }
23
+ /**
24
+ * Navigation item for user menu
25
+ */
26
+ interface UserNavMenuItem {
27
+ /** Display label */
28
+ label: string;
29
+ /** Icon component */
30
+ icon: React.ComponentType<{
31
+ className?: string;
32
+ }>;
33
+ /** Route path */
34
+ path: string;
35
+ }
36
+
37
+ export type { DashboardUser, UserNavMenuItem };
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}