@umituz/web-dashboard 1.0.0 → 1.0.2

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.
@@ -0,0 +1,45 @@
1
+ import { DashboardThemePreset, DashboardTheme } from '../types/index.js';
2
+ import 'lucide-react';
3
+
4
+ /**
5
+ * Dashboard Theme System
6
+ *
7
+ * Provides theme configuration and presets for the dashboard layout.
8
+ * Themes are applied via CSS variables, allowing runtime customization.
9
+ */
10
+
11
+ /**
12
+ * Default dashboard theme (light mode)
13
+ */
14
+ declare const DEFAULT_DASHBOARD_THEME: DashboardTheme;
15
+ /**
16
+ * Default dashboard theme (dark mode)
17
+ */
18
+ declare const DEFAULT_DASHBOARD_THEME_DARK: DashboardTheme;
19
+ /**
20
+ * Available theme presets
21
+ */
22
+ declare const DASHBOARD_THEME_PRESETS: DashboardThemePreset[];
23
+ /**
24
+ * Apply theme to document root via CSS variables
25
+ *
26
+ * @param theme - Theme configuration to apply
27
+ */
28
+ declare function applyDashboardTheme(theme: DashboardTheme): void;
29
+ /**
30
+ * Get theme preset by name
31
+ *
32
+ * @param name - Preset name
33
+ * @returns Theme preset or undefined
34
+ */
35
+ declare function getDashboardThemePreset(name: string): DashboardThemePreset | undefined;
36
+ /**
37
+ * Merge custom theme with default theme
38
+ *
39
+ * @param customTheme - Custom theme configuration
40
+ * @param dark - Whether to use dark mode base
41
+ * @returns Merged theme configuration
42
+ */
43
+ declare function mergeDashboardTheme(customTheme: Partial<DashboardTheme>, dark?: boolean): DashboardTheme;
44
+
45
+ export { DASHBOARD_THEME_PRESETS, DEFAULT_DASHBOARD_THEME, DEFAULT_DASHBOARD_THEME_DARK, applyDashboardTheme, getDashboardThemePreset, mergeDashboardTheme };
@@ -0,0 +1,180 @@
1
+ "use client";
2
+
3
+ // src/domain/theme/index.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
+ var DASHBOARD_THEME_PRESETS = [
49
+ {
50
+ name: "default",
51
+ theme: DEFAULT_DASHBOARD_THEME,
52
+ dark: false
53
+ },
54
+ {
55
+ name: "default-dark",
56
+ theme: DEFAULT_DASHBOARD_THEME_DARK,
57
+ dark: true
58
+ },
59
+ {
60
+ name: "blue",
61
+ theme: {
62
+ ...DEFAULT_DASHBOARD_THEME,
63
+ primary: "hsl(221.2 83.2% 53.3%)",
64
+ accent: "hsl(221.2 83.2% 53.3%)"
65
+ },
66
+ dark: false
67
+ },
68
+ {
69
+ name: "blue-dark",
70
+ theme: {
71
+ ...DEFAULT_DASHBOARD_THEME_DARK,
72
+ primary: "hsl(221.2 83.2% 53.3%)",
73
+ accent: "hsl(221.2 83.2% 53.3%)"
74
+ },
75
+ dark: true
76
+ },
77
+ {
78
+ name: "purple",
79
+ theme: {
80
+ ...DEFAULT_DASHBOARD_THEME,
81
+ primary: "hsl(271.5 81.3% 55.9%)",
82
+ accent: "hsl(271.5 81.3% 55.9%)"
83
+ },
84
+ dark: false
85
+ },
86
+ {
87
+ name: "purple-dark",
88
+ theme: {
89
+ ...DEFAULT_DASHBOARD_THEME_DARK,
90
+ primary: "hsl(271.5 81.3% 55.9%)",
91
+ accent: "hsl(271.5 81.3% 55.9%)"
92
+ },
93
+ dark: true
94
+ },
95
+ {
96
+ name: "green",
97
+ theme: {
98
+ ...DEFAULT_DASHBOARD_THEME,
99
+ primary: "hsl(142.1 76.2% 36.3%)",
100
+ accent: "hsl(142.1 76.2% 36.3%)"
101
+ },
102
+ dark: false
103
+ },
104
+ {
105
+ name: "green-dark",
106
+ theme: {
107
+ ...DEFAULT_DASHBOARD_THEME_DARK,
108
+ primary: "hsl(142.1 76.2% 36.3%)",
109
+ accent: "hsl(142.1 76.2% 36.3%)"
110
+ },
111
+ dark: true
112
+ },
113
+ {
114
+ name: "orange",
115
+ theme: {
116
+ ...DEFAULT_DASHBOARD_THEME,
117
+ primary: "hsl(24.6 95% 53.1%)",
118
+ accent: "hsl(24.6 95% 53.1%)"
119
+ },
120
+ dark: false
121
+ },
122
+ {
123
+ name: "orange-dark",
124
+ theme: {
125
+ ...DEFAULT_DASHBOARD_THEME_DARK,
126
+ primary: "hsl(24.6 95% 53.1%)",
127
+ accent: "hsl(24.6 95% 53.1%)"
128
+ },
129
+ dark: true
130
+ }
131
+ ];
132
+ function applyDashboardTheme(theme) {
133
+ if (typeof document === "undefined") return;
134
+ const root = document.documentElement;
135
+ const cssVars = {
136
+ "--primary": theme.primary,
137
+ "--secondary": theme.secondary,
138
+ "--sidebar": theme.sidebarBackground,
139
+ "--sidebar-foreground": theme.sidebarForeground,
140
+ "--sidebar-border": theme.sidebarBorder,
141
+ "--background": theme.background,
142
+ "--foreground": theme.foreground,
143
+ "--border": theme.border,
144
+ "--accent": theme.accent,
145
+ "--accent-foreground": theme.accentForeground,
146
+ "--destructive": theme.destructive,
147
+ "--destructive-foreground": theme.destructiveForeground,
148
+ "--muted": theme.muted,
149
+ "--muted-foreground": theme.mutedForeground,
150
+ "--card": theme.card,
151
+ "--card-foreground": theme.cardForeground,
152
+ "--popover": theme.popover,
153
+ "--popover-foreground": theme.popoverForeground,
154
+ "--radius": theme.radius
155
+ };
156
+ Object.entries(cssVars).forEach(([key, value]) => {
157
+ if (value) {
158
+ root.style.setProperty(key, value);
159
+ }
160
+ });
161
+ }
162
+ function getDashboardThemePreset(name) {
163
+ return DASHBOARD_THEME_PRESETS.find((preset) => preset.name === name);
164
+ }
165
+ function mergeDashboardTheme(customTheme, dark = false) {
166
+ const baseTheme = dark ? DEFAULT_DASHBOARD_THEME_DARK : DEFAULT_DASHBOARD_THEME;
167
+ return {
168
+ ...baseTheme,
169
+ ...customTheme
170
+ };
171
+ }
172
+ export {
173
+ DASHBOARD_THEME_PRESETS,
174
+ DEFAULT_DASHBOARD_THEME,
175
+ DEFAULT_DASHBOARD_THEME_DARK,
176
+ applyDashboardTheme,
177
+ getDashboardThemePreset,
178
+ mergeDashboardTheme
179
+ };
180
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/domain/theme/index.ts"],"sourcesContent":["/**\n * Dashboard Theme System\n *\n * Provides theme configuration and presets for the dashboard layout.\n * Themes are applied via CSS variables, allowing runtime customization.\n */\n\nimport type { DashboardTheme, DashboardThemePreset } from \"../types\";\n\n// =============================================================================\n// Default Theme\n// =============================================================================\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// =============================================================================\n// Theme Presets\n// =============================================================================\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// =============================================================================\n// Theme Utilities\n// =============================================================================\n\n/**\n * Apply theme to document root via CSS variables\n *\n * @param theme - Theme configuration to apply\n */\nexport function applyDashboardTheme(theme: DashboardTheme): void {\n if (typeof document === \"undefined\") return;\n\n const root = document.documentElement;\n\n // Map theme keys to CSS variable names\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 // Apply CSS variables\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 *\n * @param name - Preset name\n * @returns Theme preset or undefined\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 *\n * @param customTheme - Custom theme configuration\n * @param dark - Whether to use dark mode base\n * @returns Merged theme configuration\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,167 @@
1
+ import { LucideIcon } from 'lucide-react';
2
+
3
+ /**
4
+ * Dashboard Types
5
+ *
6
+ * Core type definitions for the dashboard layout system
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
+ * Dashboard header props
37
+ */
38
+ interface DashboardHeaderProps {
39
+ /** Whether sidebar is collapsed */
40
+ collapsed: boolean;
41
+ /** Toggle sidebar collapsed state */
42
+ setCollapsed: (collapsed: boolean) => void;
43
+ /** Toggle mobile menu open state */
44
+ setMobileOpen: (open: boolean) => void;
45
+ /** Current page title */
46
+ title: string;
47
+ }
48
+ /**
49
+ * Dashboard sidebar props
50
+ */
51
+ interface DashboardSidebarProps {
52
+ /** Whether sidebar is collapsed */
53
+ collapsed: boolean;
54
+ /** Toggle sidebar collapsed state */
55
+ setCollapsed: (collapsed: boolean) => void;
56
+ }
57
+ /**
58
+ * Dashboard layout configuration
59
+ */
60
+ interface DashboardLayoutConfig {
61
+ /** Sidebar groups */
62
+ sidebarGroups: SidebarGroup[];
63
+ /** Extra title mappings for routes */
64
+ extraTitleMap?: Record<string, string>;
65
+ /** Brand name */
66
+ brandName?: string;
67
+ /** Brand tagline */
68
+ brandTagline?: string;
69
+ }
70
+ /**
71
+ * Dashboard theme configuration
72
+ * Extends CSS variables for customization
73
+ */
74
+ interface DashboardTheme {
75
+ /** Primary color (CSS variable compatible) */
76
+ primary?: string;
77
+ /** Secondary color */
78
+ secondary?: string;
79
+ /** Sidebar background */
80
+ sidebarBackground?: string;
81
+ /** Sidebar foreground */
82
+ sidebarForeground?: string;
83
+ /** Sidebar border */
84
+ sidebarBorder?: string;
85
+ /** Header background */
86
+ headerBackground?: string;
87
+ /** Background color */
88
+ background?: string;
89
+ /** Foreground color */
90
+ foreground?: string;
91
+ /** Border color */
92
+ border?: string;
93
+ /** Accent color */
94
+ accent?: string;
95
+ /** Accent foreground */
96
+ accentForeground?: string;
97
+ /** Destructive color */
98
+ destructive?: string;
99
+ /** Destructive foreground */
100
+ destructiveForeground?: string;
101
+ /** Muted background */
102
+ muted?: string;
103
+ /** Muted foreground */
104
+ mutedForeground?: string;
105
+ /** Card background */
106
+ card?: string;
107
+ /** Card foreground */
108
+ cardForeground?: string;
109
+ /** Popover background */
110
+ popover?: string;
111
+ /** Popover foreground */
112
+ popoverForeground?: string;
113
+ /** Radius (border-radius) */
114
+ radius?: string;
115
+ }
116
+ /**
117
+ * Theme preset for quick setup
118
+ */
119
+ interface DashboardThemePreset {
120
+ /** Preset name */
121
+ name: string;
122
+ /** Theme configuration */
123
+ theme: DashboardTheme;
124
+ /** Whether this is a dark theme */
125
+ dark?: boolean;
126
+ }
127
+ /**
128
+ * Notification item
129
+ */
130
+ interface DashboardNotification {
131
+ /** Unique ID */
132
+ id: string;
133
+ /** Notification text */
134
+ text: string;
135
+ /** Whether notification is read */
136
+ read: boolean;
137
+ /** Creation timestamp */
138
+ createdAt: Date | string | number;
139
+ }
140
+ /**
141
+ * User profile info for header
142
+ */
143
+ interface DashboardUser {
144
+ /** User ID */
145
+ id: string;
146
+ /** Display name */
147
+ name?: string;
148
+ /** Email address */
149
+ email?: string;
150
+ /** Avatar URL */
151
+ avatar?: string;
152
+ }
153
+ /**
154
+ * Navigation item for user menu
155
+ */
156
+ interface UserNavMenuItem {
157
+ /** Display label */
158
+ label: string;
159
+ /** Icon component */
160
+ icon: React.ComponentType<{
161
+ className?: string;
162
+ }>;
163
+ /** Route path */
164
+ path: string;
165
+ }
166
+
167
+ export type { DashboardHeaderProps, DashboardLayoutConfig, DashboardNotification, DashboardSidebarProps, DashboardTheme, DashboardThemePreset, DashboardUser, SidebarGroup, SidebarItem, UserNavMenuItem };
@@ -0,0 +1,2 @@
1
+ "use client";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,8 @@
1
+ export { BrandLogo, DashboardHeader, DashboardLayout, DashboardLayout as DashboardLayoutDefault, DashboardSidebar } from './presentation/index.js';
2
+ export { DashboardHeaderProps, DashboardLayoutConfig, DashboardNotification, DashboardSidebarProps, DashboardTheme, DashboardThemePreset, DashboardUser, SidebarGroup, SidebarItem, UserNavMenuItem } from './domain/types/index.js';
3
+ export { DASHBOARD_THEME_PRESETS, DEFAULT_DASHBOARD_THEME, DEFAULT_DASHBOARD_THEME_DARK, applyDashboardTheme, getDashboardThemePreset, mergeDashboardTheme } from './domain/theme/index.js';
4
+ export { useNotifications, useSidebar } from './infrastructure/hooks/index.js';
5
+ export { filterSidebarItems, formatNotificationTime, generateNotificationId, getPageTitle, isPathActive } from './infrastructure/utils/index.js';
6
+ import 'react/jsx-runtime';
7
+ import 'lucide-react';
8
+ import 'react';