@umituz/web-dashboard 2.0.7 → 2.0.9

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 (171) hide show
  1. package/package.json +35 -77
  2. package/src/domains/layouts/components/BrandLogo.tsx +83 -0
  3. package/src/domains/layouts/components/DashboardHeader.tsx +240 -0
  4. package/src/domains/layouts/components/DashboardLayout.tsx +155 -0
  5. package/src/domains/layouts/components/DashboardSidebar.tsx +152 -0
  6. package/src/domains/layouts/components/index.ts +8 -0
  7. package/src/domains/layouts/hooks/dashboard.ts +81 -0
  8. package/src/domains/layouts/hooks/index.ts +8 -0
  9. package/src/domains/layouts/index.ts +11 -0
  10. package/{dist/layouts/theme/default.js → src/domains/layouts/theme/default.ts} +18 -11
  11. package/src/domains/layouts/theme/index.ts +18 -0
  12. package/src/domains/layouts/theme/presets.ts +96 -0
  13. package/src/domains/layouts/theme/utils.ts +67 -0
  14. package/src/domains/layouts/types/index.ts +9 -0
  15. package/src/domains/layouts/types/layout.ts +43 -0
  16. package/src/domains/layouts/types/notification.ts +19 -0
  17. package/src/domains/layouts/types/sidebar.ts +35 -0
  18. package/src/domains/layouts/types/theme.ts +64 -0
  19. package/src/domains/layouts/types/user.ts +35 -0
  20. package/src/domains/layouts/utils/dashboard.ts +96 -0
  21. package/src/domains/layouts/utils/index.ts +11 -0
  22. package/src/domains/onboarding/components/AppFocusStep.tsx +113 -0
  23. package/src/domains/onboarding/components/OnboardingWizard.tsx +262 -0
  24. package/src/domains/onboarding/components/PlanStep.tsx +208 -0
  25. package/src/domains/onboarding/components/PlatformsStep.tsx +109 -0
  26. package/src/domains/onboarding/components/UserTypeStep.tsx +135 -0
  27. package/src/domains/onboarding/components/index.ts +9 -0
  28. package/src/domains/onboarding/hooks/index.ts +5 -0
  29. package/{dist/onboarding/hooks/index.js → src/domains/onboarding/hooks/useOnboarding.ts} +65 -19
  30. package/src/domains/onboarding/index.ts +35 -0
  31. package/src/domains/onboarding/types/index.ts +16 -0
  32. package/src/domains/onboarding/types/onboarding.ts +214 -0
  33. package/src/domains/onboarding/utils/index.ts +15 -0
  34. package/src/domains/onboarding/utils/onboarding.ts +166 -0
  35. package/src/domains/settings/components/SettingsLayout.tsx +144 -0
  36. package/src/domains/settings/components/SettingsSection.tsx +106 -0
  37. package/src/domains/settings/components/index.ts +6 -0
  38. package/src/domains/settings/hooks/index.ts +7 -0
  39. package/src/domains/settings/hooks/useSettings.ts +80 -0
  40. package/src/domains/settings/index.ts +22 -0
  41. package/src/domains/settings/types/index.ts +11 -0
  42. package/src/domains/settings/types/settings.ts +81 -0
  43. package/src/domains/settings/utils/index.ts +11 -0
  44. package/src/domains/settings/utils/settings.ts +80 -0
  45. package/dist/layouts/components/BrandLogo.d.ts +0 -18
  46. package/dist/layouts/components/BrandLogo.js +0 -88
  47. package/dist/layouts/components/BrandLogo.js.map +0 -1
  48. package/dist/layouts/components/DashboardHeader.d.ts +0 -36
  49. package/dist/layouts/components/DashboardHeader.js +0 -225
  50. package/dist/layouts/components/DashboardHeader.js.map +0 -1
  51. package/dist/layouts/components/DashboardLayout.d.ts +0 -45
  52. package/dist/layouts/components/DashboardLayout.js +0 -501
  53. package/dist/layouts/components/DashboardLayout.js.map +0 -1
  54. package/dist/layouts/components/DashboardSidebar.d.ts +0 -29
  55. package/dist/layouts/components/DashboardSidebar.js +0 -189
  56. package/dist/layouts/components/DashboardSidebar.js.map +0 -1
  57. package/dist/layouts/components/index.d.ts +0 -10
  58. package/dist/layouts/components/index.js +0 -502
  59. package/dist/layouts/components/index.js.map +0 -1
  60. package/dist/layouts/hooks/dashboard.d.ts +0 -35
  61. package/dist/layouts/hooks/dashboard.js +0 -57
  62. package/dist/layouts/hooks/dashboard.js.map +0 -1
  63. package/dist/layouts/hooks/index.d.ts +0 -3
  64. package/dist/layouts/hooks/index.js +0 -57
  65. package/dist/layouts/hooks/index.js.map +0 -1
  66. package/dist/layouts/index.d.ts +0 -17
  67. package/dist/layouts/index.js +0 -756
  68. package/dist/layouts/index.js.map +0 -1
  69. package/dist/layouts/theme/default.d.ts +0 -18
  70. package/dist/layouts/theme/default.js.map +0 -1
  71. package/dist/layouts/theme/index.d.ts +0 -4
  72. package/dist/layouts/theme/index.js +0 -184
  73. package/dist/layouts/theme/index.js.map +0 -1
  74. package/dist/layouts/theme/presets.d.ts +0 -14
  75. package/dist/layouts/theme/presets.js +0 -137
  76. package/dist/layouts/theme/presets.js.map +0 -1
  77. package/dist/layouts/theme/utils.d.ts +0 -22
  78. package/dist/layouts/theme/utils.js +0 -181
  79. package/dist/layouts/theme/utils.js.map +0 -1
  80. package/dist/layouts/types/index.d.ts +0 -6
  81. package/dist/layouts/types/index.js +0 -2
  82. package/dist/layouts/types/index.js.map +0 -1
  83. package/dist/layouts/types/layout.d.ts +0 -45
  84. package/dist/layouts/types/layout.js +0 -2
  85. package/dist/layouts/types/layout.js.map +0 -1
  86. package/dist/layouts/types/notification.d.ts +0 -20
  87. package/dist/layouts/types/notification.js +0 -2
  88. package/dist/layouts/types/notification.js.map +0 -1
  89. package/dist/layouts/types/sidebar.d.ts +0 -36
  90. package/dist/layouts/types/sidebar.js +0 -2
  91. package/dist/layouts/types/sidebar.js.map +0 -1
  92. package/dist/layouts/types/theme.d.ts +0 -64
  93. package/dist/layouts/types/theme.js +0 -2
  94. package/dist/layouts/types/theme.js.map +0 -1
  95. package/dist/layouts/types/user.d.ts +0 -37
  96. package/dist/layouts/types/user.js +0 -2
  97. package/dist/layouts/types/user.js.map +0 -1
  98. package/dist/layouts/utils/dashboard.d.ts +0 -57
  99. package/dist/layouts/utils/dashboard.js +0 -44
  100. package/dist/layouts/utils/dashboard.js.map +0 -1
  101. package/dist/layouts/utils/index.d.ts +0 -1
  102. package/dist/layouts/utils/index.js +0 -44
  103. package/dist/layouts/utils/index.js.map +0 -1
  104. package/dist/onboarding/components/AppFocusStep.d.ts +0 -26
  105. package/dist/onboarding/components/AppFocusStep.js +0 -86
  106. package/dist/onboarding/components/AppFocusStep.js.map +0 -1
  107. package/dist/onboarding/components/OnboardingWizard.d.ts +0 -13
  108. package/dist/onboarding/components/OnboardingWizard.js +0 -332
  109. package/dist/onboarding/components/OnboardingWizard.js.map +0 -1
  110. package/dist/onboarding/components/PlanStep.d.ts +0 -21
  111. package/dist/onboarding/components/PlanStep.js +0 -167
  112. package/dist/onboarding/components/PlanStep.js.map +0 -1
  113. package/dist/onboarding/components/PlatformsStep.d.ts +0 -26
  114. package/dist/onboarding/components/PlatformsStep.js +0 -86
  115. package/dist/onboarding/components/PlatformsStep.js.map +0 -1
  116. package/dist/onboarding/components/UserTypeStep.d.ts +0 -30
  117. package/dist/onboarding/components/UserTypeStep.js +0 -93
  118. package/dist/onboarding/components/UserTypeStep.js.map +0 -1
  119. package/dist/onboarding/components/index.d.ts +0 -9
  120. package/dist/onboarding/components/index.js +0 -738
  121. package/dist/onboarding/components/index.js.map +0 -1
  122. package/dist/onboarding/hooks/index.d.ts +0 -4
  123. package/dist/onboarding/hooks/index.js.map +0 -1
  124. package/dist/onboarding/hooks/useOnboarding.d.ts +0 -50
  125. package/dist/onboarding/hooks/useOnboarding.js +0 -100
  126. package/dist/onboarding/hooks/useOnboarding.js.map +0 -1
  127. package/dist/onboarding/index.d.ts +0 -11
  128. package/dist/onboarding/index.js +0 -913
  129. package/dist/onboarding/index.js.map +0 -1
  130. package/dist/onboarding/types/index.d.ts +0 -3
  131. package/dist/onboarding/types/index.js +0 -2
  132. package/dist/onboarding/types/index.js.map +0 -1
  133. package/dist/onboarding/types/onboarding.d.ts +0 -209
  134. package/dist/onboarding/types/onboarding.js +0 -2
  135. package/dist/onboarding/types/onboarding.js.map +0 -1
  136. package/dist/onboarding/utils/index.d.ts +0 -4
  137. package/dist/onboarding/utils/index.js +0 -83
  138. package/dist/onboarding/utils/index.js.map +0 -1
  139. package/dist/onboarding/utils/onboarding.d.ts +0 -106
  140. package/dist/onboarding/utils/onboarding.js +0 -83
  141. package/dist/onboarding/utils/onboarding.js.map +0 -1
  142. package/dist/settings/components/SettingsLayout.d.ts +0 -19
  143. package/dist/settings/components/SettingsLayout.js +0 -170
  144. package/dist/settings/components/SettingsLayout.js.map +0 -1
  145. package/dist/settings/components/SettingsSection.d.ts +0 -24
  146. package/dist/settings/components/SettingsSection.js +0 -73
  147. package/dist/settings/components/SettingsSection.js.map +0 -1
  148. package/dist/settings/components/index.d.ts +0 -5
  149. package/dist/settings/components/index.js +0 -169
  150. package/dist/settings/components/index.js.map +0 -1
  151. package/dist/settings/hooks/index.d.ts +0 -3
  152. package/dist/settings/hooks/index.js +0 -59
  153. package/dist/settings/hooks/index.js.map +0 -1
  154. package/dist/settings/hooks/useSettings.d.ts +0 -25
  155. package/dist/settings/hooks/useSettings.js +0 -59
  156. package/dist/settings/hooks/useSettings.js.map +0 -1
  157. package/dist/settings/index.d.ts +0 -7
  158. package/dist/settings/index.js +0 -259
  159. package/dist/settings/index.js.map +0 -1
  160. package/dist/settings/types/index.d.ts +0 -2
  161. package/dist/settings/types/index.js +0 -2
  162. package/dist/settings/types/index.js.map +0 -1
  163. package/dist/settings/types/settings.d.ts +0 -79
  164. package/dist/settings/types/settings.js +0 -2
  165. package/dist/settings/types/settings.js.map +0 -1
  166. package/dist/settings/utils/index.d.ts +0 -3
  167. package/dist/settings/utils/index.js +0 -39
  168. package/dist/settings/utils/index.js.map +0 -1
  169. package/dist/settings/utils/settings.d.ts +0 -50
  170. package/dist/settings/utils/settings.js +0 -39
  171. package/dist/settings/utils/settings.js.map +0 -1
@@ -1,181 +0,0 @@
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
-
135
- // src/domains/layouts/theme/utils.ts
136
- function applyDashboardTheme(theme) {
137
- if (typeof document === "undefined") return;
138
- const root = document.documentElement;
139
- const cssVars = {
140
- "--primary": theme.primary,
141
- "--secondary": theme.secondary,
142
- "--sidebar": theme.sidebarBackground,
143
- "--sidebar-foreground": theme.sidebarForeground,
144
- "--sidebar-border": theme.sidebarBorder,
145
- "--background": theme.background,
146
- "--foreground": theme.foreground,
147
- "--border": theme.border,
148
- "--accent": theme.accent,
149
- "--accent-foreground": theme.accentForeground,
150
- "--destructive": theme.destructive,
151
- "--destructive-foreground": theme.destructiveForeground,
152
- "--muted": theme.muted,
153
- "--muted-foreground": theme.mutedForeground,
154
- "--card": theme.card,
155
- "--card-foreground": theme.cardForeground,
156
- "--popover": theme.popover,
157
- "--popover-foreground": theme.popoverForeground,
158
- "--radius": theme.radius
159
- };
160
- Object.entries(cssVars).forEach(([key, value]) => {
161
- if (value) {
162
- root.style.setProperty(key, value);
163
- }
164
- });
165
- }
166
- function getDashboardThemePreset(name) {
167
- return DASHBOARD_THEME_PRESETS.find((preset) => preset.name === name);
168
- }
169
- function mergeDashboardTheme(customTheme, dark = false) {
170
- const baseTheme = dark ? DEFAULT_DASHBOARD_THEME_DARK : DEFAULT_DASHBOARD_THEME;
171
- return {
172
- ...baseTheme,
173
- ...customTheme
174
- };
175
- }
176
- export {
177
- applyDashboardTheme,
178
- getDashboardThemePreset,
179
- mergeDashboardTheme
180
- };
181
- //# sourceMappingURL=utils.js.map
@@ -1 +0,0 @@
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":[]}
@@ -1,6 +0,0 @@
1
- export { SidebarGroup, SidebarItem } from './sidebar.js';
2
- export { DashboardHeaderProps, DashboardLayoutConfig, DashboardSidebarProps } from './layout.js';
3
- export { DashboardTheme, DashboardThemePreset } from './theme.js';
4
- export { DashboardNotification } from './notification.js';
5
- export { DashboardUser, UserNavMenuItem } from './user.js';
6
- import 'lucide-react';
@@ -1,2 +0,0 @@
1
- "use client";
2
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,45 +0,0 @@
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 };
@@ -1,2 +0,0 @@
1
- "use client";
2
- //# sourceMappingURL=layout.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,20 +0,0 @@
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 };
@@ -1,2 +0,0 @@
1
- "use client";
2
- //# sourceMappingURL=notification.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,36 +0,0 @@
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 };
@@ -1,2 +0,0 @@
1
- "use client";
2
- //# sourceMappingURL=sidebar.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,64 +0,0 @@
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 };
@@ -1,2 +0,0 @@
1
- "use client";
2
- //# sourceMappingURL=theme.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,37 +0,0 @@
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 };
@@ -1,2 +0,0 @@
1
- "use client";
2
- //# sourceMappingURL=user.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -1,57 +0,0 @@
1
- /**
2
- * Dashboard Utilities
3
- *
4
- * Utility functions for dashboard operations
5
- */
6
- /**
7
- * Format notification timestamp to relative time
8
- *
9
- * @param createdAt - Notification creation timestamp
10
- * @param t - i18n translation function
11
- * @returns Formatted time string
12
- */
13
- declare function formatNotificationTime(createdAt: Date | string | number, t: (key: string, params?: Record<string, unknown>) => string): string;
14
- /**
15
- * Check if a path is active
16
- *
17
- * @param currentPath - Current location pathname
18
- * @param targetPath - Target path to check
19
- * @returns True if paths match
20
- */
21
- declare function isPathActive(currentPath: string, targetPath: string): boolean;
22
- /**
23
- * Get page title from sidebar configuration
24
- *
25
- * @param pathname - Current pathname
26
- * @param sidebarGroups - Sidebar groups configuration
27
- * @param extraTitleMap - Extra title mappings
28
- * @returns Page title or null
29
- */
30
- declare function getPageTitle(pathname: string, sidebarGroups: Array<{
31
- items: Array<{
32
- path: string;
33
- label: string;
34
- }>;
35
- }>, extraTitleMap?: Record<string, string>): string | null;
36
- /**
37
- * Filter sidebar items by app type and enabled status
38
- *
39
- * @param items - Sidebar items to filter
40
- * @param user - Current user object
41
- * @returns Filtered items
42
- */
43
- declare function filterSidebarItems<T extends {
44
- enabled?: boolean;
45
- requiredApp?: "mobile" | "web";
46
- }>(items: T[], user?: {
47
- hasMobileApp?: boolean;
48
- hasWebApp?: boolean;
49
- }): T[];
50
- /**
51
- * Generate notification ID
52
- *
53
- * @returns Unique notification ID
54
- */
55
- declare function generateNotificationId(): string;
56
-
57
- export { filterSidebarItems, formatNotificationTime, generateNotificationId, getPageTitle, isPathActive };
@@ -1,44 +0,0 @@
1
- "use client";
2
-
3
- // src/domains/layouts/utils/dashboard.ts
4
- function formatNotificationTime(createdAt, t) {
5
- const date = new Date(createdAt);
6
- const secs = Math.floor((Date.now() - date.getTime()) / 1e3);
7
- if (secs < 60) return t("dashboard.activityFeed.times.justNow");
8
- if (secs < 3600) return t("dashboard.activityFeed.times.minutesAgo", { val: Math.floor(secs / 60) });
9
- if (secs < 86400) return t("dashboard.activityFeed.times.hoursAgo", { val: Math.floor(secs / 3600) });
10
- return t("dashboard.activityFeed.times.daysAgo", { val: Math.floor(secs / 86400) });
11
- }
12
- function isPathActive(currentPath, targetPath) {
13
- return currentPath === targetPath;
14
- }
15
- function getPageTitle(pathname, sidebarGroups, extraTitleMap) {
16
- for (const group of sidebarGroups) {
17
- const item = group.items.find((i) => i.path === pathname);
18
- if (item) return item.label;
19
- }
20
- if (extraTitleMap?.[pathname]) {
21
- return extraTitleMap[pathname];
22
- }
23
- return null;
24
- }
25
- function filterSidebarItems(items, user) {
26
- return items.filter((item) => {
27
- if (item.enabled === false) return false;
28
- if (!item.requiredApp) return true;
29
- if (item.requiredApp === "mobile") return user?.hasMobileApp ?? false;
30
- if (item.requiredApp === "web") return user?.hasWebApp ?? false;
31
- return true;
32
- });
33
- }
34
- function generateNotificationId() {
35
- return crypto.randomUUID();
36
- }
37
- export {
38
- filterSidebarItems,
39
- formatNotificationTime,
40
- generateNotificationId,
41
- getPageTitle,
42
- isPathActive
43
- };
44
- //# sourceMappingURL=dashboard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/domains/layouts/utils/dashboard.ts"],"sourcesContent":["/**\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":";;;AAaO,SAAS,uBACd,WACA,GACQ;AACR,QAAM,OAAO,IAAI,KAAK,SAAS;AAC/B,QAAM,OAAO,KAAK,OAAO,KAAK,IAAI,IAAI,KAAK,QAAQ,KAAK,GAAI;AAE5D,MAAI,OAAO,GAAI,QAAO,EAAE,sCAAsC;AAC9D,MAAI,OAAO,KAAM,QAAO,EAAE,2CAA2C,EAAE,KAAK,KAAK,MAAM,OAAO,EAAE,EAAE,CAAC;AACnG,MAAI,OAAO,MAAO,QAAO,EAAE,yCAAyC,EAAE,KAAK,KAAK,MAAM,OAAO,IAAI,EAAE,CAAC;AACpG,SAAO,EAAE,wCAAwC,EAAE,KAAK,KAAK,MAAM,OAAO,KAAK,EAAE,CAAC;AACpF;AASO,SAAS,aAAa,aAAqB,YAA6B;AAC7E,SAAO,gBAAgB;AACzB;AAUO,SAAS,aACd,UACA,eACA,eACe;AAEf,aAAW,SAAS,eAAe;AACjC,UAAM,OAAO,MAAM,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,QAAQ;AACxD,QAAI,KAAM,QAAO,KAAK;AAAA,EACxB;AAGA,MAAI,gBAAgB,QAAQ,GAAG;AAC7B,WAAO,cAAc,QAAQ;AAAA,EAC/B;AAEA,SAAO;AACT;AASO,SAAS,mBACd,OACA,MACK;AACL,SAAO,MAAM,OAAO,CAAC,SAAS;AAE5B,QAAI,KAAK,YAAY,MAAO,QAAO;AAGnC,QAAI,CAAC,KAAK,YAAa,QAAO;AAC9B,QAAI,KAAK,gBAAgB,SAAU,QAAO,MAAM,gBAAgB;AAChE,QAAI,KAAK,gBAAgB,MAAO,QAAO,MAAM,aAAa;AAE1D,WAAO;AAAA,EACT,CAAC;AACH;AAOO,SAAS,yBAAiC;AAC/C,SAAO,OAAO,WAAW;AAC3B;","names":[]}
@@ -1 +0,0 @@
1
- export { filterSidebarItems, formatNotificationTime, generateNotificationId, getPageTitle, isPathActive } from './dashboard.js';
@@ -1,44 +0,0 @@
1
- "use client";
2
-
3
- // src/domains/layouts/utils/dashboard.ts
4
- function formatNotificationTime(createdAt, t) {
5
- const date = new Date(createdAt);
6
- const secs = Math.floor((Date.now() - date.getTime()) / 1e3);
7
- if (secs < 60) return t("dashboard.activityFeed.times.justNow");
8
- if (secs < 3600) return t("dashboard.activityFeed.times.minutesAgo", { val: Math.floor(secs / 60) });
9
- if (secs < 86400) return t("dashboard.activityFeed.times.hoursAgo", { val: Math.floor(secs / 3600) });
10
- return t("dashboard.activityFeed.times.daysAgo", { val: Math.floor(secs / 86400) });
11
- }
12
- function isPathActive(currentPath, targetPath) {
13
- return currentPath === targetPath;
14
- }
15
- function getPageTitle(pathname, sidebarGroups, extraTitleMap) {
16
- for (const group of sidebarGroups) {
17
- const item = group.items.find((i) => i.path === pathname);
18
- if (item) return item.label;
19
- }
20
- if (extraTitleMap?.[pathname]) {
21
- return extraTitleMap[pathname];
22
- }
23
- return null;
24
- }
25
- function filterSidebarItems(items, user) {
26
- return items.filter((item) => {
27
- if (item.enabled === false) return false;
28
- if (!item.requiredApp) return true;
29
- if (item.requiredApp === "mobile") return user?.hasMobileApp ?? false;
30
- if (item.requiredApp === "web") return user?.hasWebApp ?? false;
31
- return true;
32
- });
33
- }
34
- function generateNotificationId() {
35
- return crypto.randomUUID();
36
- }
37
- export {
38
- filterSidebarItems,
39
- formatNotificationTime,
40
- generateNotificationId,
41
- getPageTitle,
42
- isPathActive
43
- };
44
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/domains/layouts/utils/dashboard.ts"],"sourcesContent":["/**\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":";;;AAaO,SAAS,uBACd,WACA,GACQ;AACR,QAAM,OAAO,IAAI,KAAK,SAAS;AAC/B,QAAM,OAAO,KAAK,OAAO,KAAK,IAAI,IAAI,KAAK,QAAQ,KAAK,GAAI;AAE5D,MAAI,OAAO,GAAI,QAAO,EAAE,sCAAsC;AAC9D,MAAI,OAAO,KAAM,QAAO,EAAE,2CAA2C,EAAE,KAAK,KAAK,MAAM,OAAO,EAAE,EAAE,CAAC;AACnG,MAAI,OAAO,MAAO,QAAO,EAAE,yCAAyC,EAAE,KAAK,KAAK,MAAM,OAAO,IAAI,EAAE,CAAC;AACpG,SAAO,EAAE,wCAAwC,EAAE,KAAK,KAAK,MAAM,OAAO,KAAK,EAAE,CAAC;AACpF;AASO,SAAS,aAAa,aAAqB,YAA6B;AAC7E,SAAO,gBAAgB;AACzB;AAUO,SAAS,aACd,UACA,eACA,eACe;AAEf,aAAW,SAAS,eAAe;AACjC,UAAM,OAAO,MAAM,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,QAAQ;AACxD,QAAI,KAAM,QAAO,KAAK;AAAA,EACxB;AAGA,MAAI,gBAAgB,QAAQ,GAAG;AAC7B,WAAO,cAAc,QAAQ;AAAA,EAC/B;AAEA,SAAO;AACT;AASO,SAAS,mBACd,OACA,MACK;AACL,SAAO,MAAM,OAAO,CAAC,SAAS;AAE5B,QAAI,KAAK,YAAY,MAAO,QAAO;AAGnC,QAAI,CAAC,KAAK,YAAa,QAAO;AAC9B,QAAI,KAAK,gBAAgB,SAAU,QAAO,MAAM,gBAAgB;AAChE,QAAI,KAAK,gBAAgB,MAAO,QAAO,MAAM,aAAa;AAE1D,WAAO;AAAA,EACT,CAAC;AACH;AAOO,SAAS,yBAAiC;AAC/C,SAAO,OAAO,WAAW;AAC3B;","names":[]}
@@ -1,26 +0,0 @@
1
- import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { OnboardingState } from '../types/onboarding.js';
3
- import 'lucide-react';
4
- import 'react';
5
-
6
- interface AppFocusStepProps {
7
- /** Current onboarding state */
8
- state: OnboardingState;
9
- /** Update state function */
10
- updateState: (updates: Partial<OnboardingState>) => void;
11
- /** Custom app type options */
12
- appTypes?: Array<{
13
- id: string;
14
- label: string;
15
- description: string;
16
- icon: string;
17
- }>;
18
- }
19
- /**
20
- * App Focus Selection Step
21
- *
22
- * Second step - select which app types to focus on (mobile/web)
23
- */
24
- declare const AppFocusStep: ({ state, updateState, appTypes, }: AppFocusStepProps) => react_jsx_runtime.JSX.Element;
25
-
26
- export { AppFocusStep, AppFocusStep as default };