@create-lft-app/nextjs 3.2.0 → 3.3.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 (133) hide show
  1. package/README.md +549 -549
  2. package/package.json +48 -48
  3. package/template/.claude/skills/anti-patterns.md +150 -0
  4. package/template/.claude/skills/drizzle-schema.md +178 -0
  5. package/template/.claude/skills/formatting.md +56 -0
  6. package/template/.claude/skills/module-architecture.md +143 -0
  7. package/template/.claude/skills/supabase-server-actions.md +199 -0
  8. package/template/.claude/skills/ui-patterns.md +161 -0
  9. package/template/CLAUDE.md +114 -1239
  10. package/template/drizzle.config.ts +12 -12
  11. package/template/eslint.config.mjs +16 -16
  12. package/template/gitignore +36 -36
  13. package/template/next.config.ts +7 -7
  14. package/template/package.json +86 -86
  15. package/template/postcss.config.mjs +7 -7
  16. package/template/proxy.ts +12 -12
  17. package/template/public/logolft.svg +11 -11
  18. package/template/src/app/(auth)/dashboard/dashboard-content.tsx +124 -124
  19. package/template/src/app/(auth)/dashboard/page.tsx +9 -9
  20. package/template/src/app/(auth)/layout.tsx +7 -7
  21. package/template/src/app/(auth)/users/page.tsx +9 -9
  22. package/template/src/app/(auth)/users/users-content.tsx +26 -26
  23. package/template/src/app/(public)/layout.tsx +7 -7
  24. package/template/src/app/(public)/login/page.tsx +17 -17
  25. package/template/src/app/api/webhooks/route.ts +20 -20
  26. package/template/src/app/globals.css +249 -249
  27. package/template/src/app/layout.tsx +37 -37
  28. package/template/src/app/page.tsx +5 -5
  29. package/template/src/app/providers.tsx +27 -27
  30. package/template/src/components/layout/main-content.tsx +28 -28
  31. package/template/src/components/layout/sidebar-context.tsx +33 -33
  32. package/template/src/components/layout/sidebar.tsx +141 -141
  33. package/template/src/components/tables/data-table-column-header.tsx +68 -68
  34. package/template/src/components/tables/data-table-date-filter.tsx +203 -203
  35. package/template/src/components/tables/data-table-faceted-filter.tsx +185 -185
  36. package/template/src/components/tables/data-table-filters-dropdown.tsx +130 -130
  37. package/template/src/components/tables/data-table-number-filter.tsx +295 -295
  38. package/template/src/components/tables/data-table-pagination.tsx +99 -99
  39. package/template/src/components/tables/data-table-toolbar.tsx +140 -140
  40. package/template/src/components/tables/data-table-view-options.tsx +63 -63
  41. package/template/src/components/tables/data-table.tsx +148 -148
  42. package/template/src/components/tables/index.ts +9 -9
  43. package/template/src/components/ui/accordion.tsx +58 -58
  44. package/template/src/components/ui/alert-dialog.tsx +165 -165
  45. package/template/src/components/ui/alert.tsx +66 -66
  46. package/template/src/components/ui/animations/index.ts +44 -44
  47. package/template/src/components/ui/avatar.tsx +55 -55
  48. package/template/src/components/ui/badge.tsx +50 -50
  49. package/template/src/components/ui/button.tsx +118 -118
  50. package/template/src/components/ui/calendar.tsx +220 -220
  51. package/template/src/components/ui/card.tsx +113 -113
  52. package/template/src/components/ui/checkbox.tsx +38 -38
  53. package/template/src/components/ui/collapsible.tsx +33 -33
  54. package/template/src/components/ui/command.tsx +196 -196
  55. package/template/src/components/ui/dialog.tsx +156 -156
  56. package/template/src/components/ui/dropdown-menu.tsx +280 -280
  57. package/template/src/components/ui/form.tsx +171 -171
  58. package/template/src/components/ui/icons.tsx +167 -167
  59. package/template/src/components/ui/input.tsx +28 -28
  60. package/template/src/components/ui/label.tsx +25 -25
  61. package/template/src/components/ui/motion.tsx +197 -197
  62. package/template/src/components/ui/page-transition.tsx +166 -166
  63. package/template/src/components/ui/popover.tsx +59 -59
  64. package/template/src/components/ui/progress.tsx +32 -32
  65. package/template/src/components/ui/radio-group.tsx +45 -45
  66. package/template/src/components/ui/scroll-area.tsx +63 -63
  67. package/template/src/components/ui/select.tsx +208 -208
  68. package/template/src/components/ui/separator.tsx +28 -28
  69. package/template/src/components/ui/sheet.tsx +170 -170
  70. package/template/src/components/ui/sidebar.tsx +726 -726
  71. package/template/src/components/ui/skeleton.tsx +15 -15
  72. package/template/src/components/ui/slider.tsx +58 -58
  73. package/template/src/components/ui/sonner.tsx +47 -47
  74. package/template/src/components/ui/spinner.tsx +27 -27
  75. package/template/src/components/ui/submit-button.tsx +47 -47
  76. package/template/src/components/ui/switch.tsx +31 -31
  77. package/template/src/components/ui/table.tsx +120 -120
  78. package/template/src/components/ui/tabs.tsx +75 -75
  79. package/template/src/components/ui/textarea.tsx +26 -26
  80. package/template/src/components/ui/tooltip.tsx +70 -70
  81. package/template/src/config/navigation.ts +59 -59
  82. package/template/src/config/roles.ts +27 -27
  83. package/template/src/config/site.ts +12 -12
  84. package/template/src/db/index.ts +12 -12
  85. package/template/src/db/schema/index.ts +1 -1
  86. package/template/src/db/schema/users.ts +16 -16
  87. package/template/src/db/seed.ts +39 -39
  88. package/template/src/hooks/index.ts +3 -3
  89. package/template/src/hooks/use-mobile.ts +21 -21
  90. package/template/src/hooks/useDataTable.ts +82 -82
  91. package/template/src/hooks/useDebounce.ts +49 -49
  92. package/template/src/hooks/useMediaQuery.ts +36 -36
  93. package/template/src/lib/date/config.ts +36 -36
  94. package/template/src/lib/date/formatters.ts +127 -127
  95. package/template/src/lib/date/index.ts +26 -26
  96. package/template/src/lib/excel/exporter.ts +89 -89
  97. package/template/src/lib/excel/index.ts +14 -14
  98. package/template/src/lib/excel/parser.ts +96 -96
  99. package/template/src/lib/query-client.ts +35 -35
  100. package/template/src/lib/supabase/admin.ts +23 -23
  101. package/template/src/lib/supabase/client.ts +11 -11
  102. package/template/src/lib/supabase/proxy.ts +67 -67
  103. package/template/src/lib/supabase/server.ts +38 -38
  104. package/template/src/lib/supabase/types.ts +53 -53
  105. package/template/src/lib/utils.ts +6 -6
  106. package/template/src/lib/validations/common.ts +75 -75
  107. package/template/src/lib/validations/index.ts +20 -20
  108. package/template/src/modules/auth/actions/auth-actions.ts +59 -59
  109. package/template/src/modules/auth/components/login-form.tsx +68 -68
  110. package/template/src/modules/auth/hooks/useAuth.ts +38 -38
  111. package/template/src/modules/auth/hooks/useAuthMutations.ts +43 -43
  112. package/template/src/modules/auth/hooks/useAuthQueries.ts +43 -43
  113. package/template/src/modules/auth/index.ts +12 -12
  114. package/template/src/modules/auth/schemas/auth.schema.ts +32 -32
  115. package/template/src/modules/auth/stores/useAuthStore.ts +37 -37
  116. package/template/src/modules/users/actions/users-actions.ts +166 -166
  117. package/template/src/modules/users/columns.tsx +106 -106
  118. package/template/src/modules/users/components/users-list.tsx +48 -48
  119. package/template/src/modules/users/hooks/useUsers.ts +39 -39
  120. package/template/src/modules/users/hooks/useUsersMutations.ts +55 -55
  121. package/template/src/modules/users/hooks/useUsersQueries.ts +35 -35
  122. package/template/src/modules/users/index.ts +30 -30
  123. package/template/src/modules/users/schemas/users.schema.ts +51 -51
  124. package/template/src/modules/users/stores/useUsersStore.ts +60 -60
  125. package/template/src/modules/users/types/auth-user.types.ts +42 -42
  126. package/template/src/modules/users/utils/user-mapper.ts +32 -32
  127. package/template/src/stores/index.ts +1 -1
  128. package/template/src/stores/useUiStore.ts +55 -55
  129. package/template/src/types/api.ts +28 -28
  130. package/template/src/types/index.ts +2 -2
  131. package/template/src/types/table.ts +34 -34
  132. package/template/supabase/config.toml +94 -94
  133. package/template/tsconfig.json +42 -42
@@ -1,249 +1,249 @@
1
- @import "tailwindcss";
2
- @import "tw-animate-css";
3
-
4
- @custom-variant dark (&:is(.dark *));
5
-
6
- @theme inline {
7
- --color-background: var(--background);
8
- --color-foreground: var(--foreground);
9
- --font-sans: var(--font-geist-sans);
10
- --font-mono: var(--font-geist-mono);
11
- --color-sidebar-ring: var(--sidebar-ring);
12
- --color-sidebar-border: var(--sidebar-border);
13
- --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
14
- --color-sidebar-accent: var(--sidebar-accent);
15
- --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
16
- --color-sidebar-primary: var(--sidebar-primary);
17
- --color-sidebar-foreground: var(--sidebar-foreground);
18
- --color-sidebar: var(--sidebar);
19
- --color-chart-5: var(--chart-5);
20
- --color-chart-4: var(--chart-4);
21
- --color-chart-3: var(--chart-3);
22
- --color-chart-2: var(--chart-2);
23
- --color-chart-1: var(--chart-1);
24
- --color-ring: var(--ring);
25
- --color-input: var(--input);
26
- --color-border: var(--border);
27
- --color-destructive: var(--destructive);
28
- --color-accent-foreground: var(--accent-foreground);
29
- --color-accent: var(--accent);
30
- --color-muted-foreground: var(--muted-foreground);
31
- --color-muted: var(--muted);
32
- --color-secondary-foreground: var(--secondary-foreground);
33
- --color-secondary: var(--secondary);
34
- --color-primary-foreground: var(--primary-foreground);
35
- --color-primary: var(--primary);
36
- --color-popover-foreground: var(--popover-foreground);
37
- --color-popover: var(--popover);
38
- --color-card-foreground: var(--card-foreground);
39
- --color-card: var(--card);
40
- --radius-sm: calc(var(--radius) - 4px);
41
- --radius-md: calc(var(--radius) - 2px);
42
- --radius-lg: var(--radius);
43
- --radius-xl: calc(var(--radius) + 4px);
44
- --radius-2xl: calc(var(--radius) + 8px);
45
- --radius-3xl: calc(var(--radius) + 12px);
46
- --radius-4xl: calc(var(--radius) + 16px);
47
- }
48
-
49
- /* ========================================
50
- MIDDAY DESIGN SYSTEM - Color Palette
51
- ======================================== */
52
-
53
- :root {
54
- --radius: 0.5rem;
55
-
56
- /* Midday Dark Theme - Pure blacks (DEFAULT) */
57
- --background: hsl(0 0% 5%);
58
- --foreground: hsl(0 0% 98%);
59
-
60
- --card: hsl(0 0% 7%);
61
- --card-foreground: hsl(0 0% 98%);
62
-
63
- --popover: hsl(0 0% 4%);
64
- --popover-foreground: hsl(0 0% 98%);
65
-
66
- --primary: hsl(0 0% 98%);
67
- --primary-foreground: hsl(0 0% 9%);
68
-
69
- --secondary: hsl(0 0% 11%);
70
- --secondary-foreground: hsl(0 0% 98%);
71
-
72
- --muted: hsl(0 0% 11%);
73
- --muted-foreground: hsl(0 0% 64%);
74
-
75
- --accent: hsl(0 0% 11%);
76
- --accent-foreground: hsl(0 0% 98%);
77
-
78
- --destructive: hsl(0 63% 31%);
79
- --destructive-foreground: hsl(0 0% 98%);
80
-
81
- --border: hsl(0 0% 11%);
82
- --input: hsl(0 0% 15%);
83
- --ring: hsl(0 0% 83%);
84
-
85
- /* Chart colors dark */
86
- --chart-1: hsl(220 70% 50%);
87
- --chart-2: hsl(160 60% 45%);
88
- --chart-3: hsl(30 80% 55%);
89
- --chart-4: hsl(280 65% 60%);
90
- --chart-5: hsl(340 75% 55%);
91
-
92
- /* Sidebar dark */
93
- --sidebar: hsl(0 0% 7%);
94
- --sidebar-foreground: hsl(0 0% 98%);
95
- --sidebar-primary: hsl(0 0% 98%);
96
- --sidebar-primary-foreground: hsl(0 0% 9%);
97
- --sidebar-accent: hsl(0 0% 11%);
98
- --sidebar-accent-foreground: hsl(0 0% 98%);
99
- --sidebar-border: hsl(0 0% 11%);
100
- --sidebar-ring: hsl(0 0% 83%);
101
- }
102
-
103
- .light {
104
- /* Midday Light Theme - Warm beige/neutral palette */
105
- --background: hsl(0 0% 100%);
106
- --foreground: hsl(0 0% 7%);
107
-
108
- --card: hsl(45 18% 96%);
109
- --card-foreground: hsl(0 0% 4%);
110
-
111
- --popover: hsl(0 0% 100%);
112
- --popover-foreground: hsl(0 0% 4%);
113
-
114
- --primary: hsl(240 6% 10%);
115
- --primary-foreground: hsl(0 0% 98%);
116
-
117
- --secondary: hsl(40 11% 89%);
118
- --secondary-foreground: hsl(0 0% 9%);
119
-
120
- --muted: hsl(40 11% 89%);
121
- --muted-foreground: hsl(0 0% 38%);
122
-
123
- --accent: hsl(40 10% 94%);
124
- --accent-foreground: hsl(0 0% 9%);
125
-
126
- --destructive: hsl(0 84% 60%);
127
- --destructive-foreground: hsl(0 0% 98%);
128
-
129
- --border: hsl(45 5% 85%);
130
- --input: hsl(0 0% 90%);
131
- --ring: hsl(0 0% 4%);
132
-
133
- /* Chart colors */
134
- --chart-1: hsl(12 76% 61%);
135
- --chart-2: hsl(173 58% 39%);
136
- --chart-3: hsl(197 37% 24%);
137
- --chart-4: hsl(43 74% 66%);
138
- --chart-5: hsl(27 87% 67%);
139
-
140
- /* Sidebar - Midday style */
141
- --sidebar: hsl(0 0% 99%);
142
- --sidebar-foreground: hsl(0 0% 7%);
143
- --sidebar-primary: hsl(240 6% 10%);
144
- --sidebar-primary-foreground: hsl(0 0% 98%);
145
- --sidebar-accent: hsl(40 10% 97%);
146
- --sidebar-accent-foreground: hsl(0 0% 9%);
147
- --sidebar-border: hsl(45 5% 85%);
148
- --sidebar-ring: hsl(0 0% 4%);
149
- }
150
-
151
- @layer base {
152
- * {
153
- @apply border-border outline-ring/50;
154
- }
155
- body {
156
- @apply bg-background text-foreground;
157
- }
158
- }
159
-
160
- /* ========================================
161
- MIDDAY UTILITIES
162
- ======================================== */
163
-
164
- /* Scrollbar hide utility */
165
- .scrollbar-hide {
166
- -ms-overflow-style: none;
167
- scrollbar-width: none;
168
- }
169
- .scrollbar-hide::-webkit-scrollbar {
170
- display: none;
171
- }
172
-
173
- /* ========================================
174
- MIDDAY ANIMATIONS
175
- ======================================== */
176
-
177
- @keyframes shimmer {
178
- 0% {
179
- transform: translateX(-100%);
180
- }
181
- 100% {
182
- transform: translateX(100%);
183
- }
184
- }
185
-
186
- @keyframes accordion-down {
187
- from {
188
- height: 0;
189
- }
190
- to {
191
- height: var(--radix-accordion-content-height);
192
- }
193
- }
194
-
195
- @keyframes accordion-up {
196
- from {
197
- height: var(--radix-accordion-content-height);
198
- }
199
- to {
200
- height: 0;
201
- }
202
- }
203
-
204
- @keyframes dialog-overlay-show {
205
- from {
206
- opacity: 0;
207
- }
208
- to {
209
- opacity: 1;
210
- }
211
- }
212
-
213
- @keyframes dialog-content-show {
214
- from {
215
- opacity: 0;
216
- transform: translate(-50%, -50%) scale(0.97);
217
- }
218
- to {
219
- opacity: 1;
220
- transform: translate(-50%, -50%) scale(1);
221
- }
222
- }
223
-
224
- @keyframes caret-blink {
225
- 0%, 70%, 100% {
226
- opacity: 1;
227
- }
228
- 20%, 50% {
229
- opacity: 0;
230
- }
231
- }
232
-
233
- /* Loading ellipsis animation */
234
- @keyframes loading-ellipsis {
235
- 0% { content: ''; }
236
- 25% { content: '.'; }
237
- 50% { content: '..'; }
238
- 75% { content: '...'; }
239
- }
240
-
241
- .loading-ellipsis::after {
242
- content: '';
243
- animation: loading-ellipsis 1.5s infinite;
244
- }
245
-
246
- /* Animate shimmer class */
247
- .animate-shimmer {
248
- animation: shimmer 2.5s linear infinite;
249
- }
1
+ @import "tailwindcss";
2
+ @import "tw-animate-css";
3
+
4
+ @custom-variant dark (&:is(.dark *));
5
+
6
+ @theme inline {
7
+ --color-background: var(--background);
8
+ --color-foreground: var(--foreground);
9
+ --font-sans: var(--font-geist-sans);
10
+ --font-mono: var(--font-geist-mono);
11
+ --color-sidebar-ring: var(--sidebar-ring);
12
+ --color-sidebar-border: var(--sidebar-border);
13
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
14
+ --color-sidebar-accent: var(--sidebar-accent);
15
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
16
+ --color-sidebar-primary: var(--sidebar-primary);
17
+ --color-sidebar-foreground: var(--sidebar-foreground);
18
+ --color-sidebar: var(--sidebar);
19
+ --color-chart-5: var(--chart-5);
20
+ --color-chart-4: var(--chart-4);
21
+ --color-chart-3: var(--chart-3);
22
+ --color-chart-2: var(--chart-2);
23
+ --color-chart-1: var(--chart-1);
24
+ --color-ring: var(--ring);
25
+ --color-input: var(--input);
26
+ --color-border: var(--border);
27
+ --color-destructive: var(--destructive);
28
+ --color-accent-foreground: var(--accent-foreground);
29
+ --color-accent: var(--accent);
30
+ --color-muted-foreground: var(--muted-foreground);
31
+ --color-muted: var(--muted);
32
+ --color-secondary-foreground: var(--secondary-foreground);
33
+ --color-secondary: var(--secondary);
34
+ --color-primary-foreground: var(--primary-foreground);
35
+ --color-primary: var(--primary);
36
+ --color-popover-foreground: var(--popover-foreground);
37
+ --color-popover: var(--popover);
38
+ --color-card-foreground: var(--card-foreground);
39
+ --color-card: var(--card);
40
+ --radius-sm: calc(var(--radius) - 4px);
41
+ --radius-md: calc(var(--radius) - 2px);
42
+ --radius-lg: var(--radius);
43
+ --radius-xl: calc(var(--radius) + 4px);
44
+ --radius-2xl: calc(var(--radius) + 8px);
45
+ --radius-3xl: calc(var(--radius) + 12px);
46
+ --radius-4xl: calc(var(--radius) + 16px);
47
+ }
48
+
49
+ /* ========================================
50
+ MIDDAY DESIGN SYSTEM - Color Palette
51
+ ======================================== */
52
+
53
+ :root {
54
+ --radius: 0.5rem;
55
+
56
+ /* Midday Dark Theme - Pure blacks (DEFAULT) */
57
+ --background: hsl(0 0% 5%);
58
+ --foreground: hsl(0 0% 98%);
59
+
60
+ --card: hsl(0 0% 7%);
61
+ --card-foreground: hsl(0 0% 98%);
62
+
63
+ --popover: hsl(0 0% 4%);
64
+ --popover-foreground: hsl(0 0% 98%);
65
+
66
+ --primary: hsl(0 0% 98%);
67
+ --primary-foreground: hsl(0 0% 9%);
68
+
69
+ --secondary: hsl(0 0% 11%);
70
+ --secondary-foreground: hsl(0 0% 98%);
71
+
72
+ --muted: hsl(0 0% 11%);
73
+ --muted-foreground: hsl(0 0% 64%);
74
+
75
+ --accent: hsl(0 0% 11%);
76
+ --accent-foreground: hsl(0 0% 98%);
77
+
78
+ --destructive: hsl(0 63% 31%);
79
+ --destructive-foreground: hsl(0 0% 98%);
80
+
81
+ --border: hsl(0 0% 11%);
82
+ --input: hsl(0 0% 15%);
83
+ --ring: hsl(0 0% 83%);
84
+
85
+ /* Chart colors dark */
86
+ --chart-1: hsl(220 70% 50%);
87
+ --chart-2: hsl(160 60% 45%);
88
+ --chart-3: hsl(30 80% 55%);
89
+ --chart-4: hsl(280 65% 60%);
90
+ --chart-5: hsl(340 75% 55%);
91
+
92
+ /* Sidebar dark */
93
+ --sidebar: hsl(0 0% 7%);
94
+ --sidebar-foreground: hsl(0 0% 98%);
95
+ --sidebar-primary: hsl(0 0% 98%);
96
+ --sidebar-primary-foreground: hsl(0 0% 9%);
97
+ --sidebar-accent: hsl(0 0% 11%);
98
+ --sidebar-accent-foreground: hsl(0 0% 98%);
99
+ --sidebar-border: hsl(0 0% 11%);
100
+ --sidebar-ring: hsl(0 0% 83%);
101
+ }
102
+
103
+ .light {
104
+ /* Midday Light Theme - Warm beige/neutral palette */
105
+ --background: hsl(0 0% 100%);
106
+ --foreground: hsl(0 0% 7%);
107
+
108
+ --card: hsl(45 18% 96%);
109
+ --card-foreground: hsl(0 0% 4%);
110
+
111
+ --popover: hsl(0 0% 100%);
112
+ --popover-foreground: hsl(0 0% 4%);
113
+
114
+ --primary: hsl(240 6% 10%);
115
+ --primary-foreground: hsl(0 0% 98%);
116
+
117
+ --secondary: hsl(40 11% 89%);
118
+ --secondary-foreground: hsl(0 0% 9%);
119
+
120
+ --muted: hsl(40 11% 89%);
121
+ --muted-foreground: hsl(0 0% 38%);
122
+
123
+ --accent: hsl(40 10% 94%);
124
+ --accent-foreground: hsl(0 0% 9%);
125
+
126
+ --destructive: hsl(0 84% 60%);
127
+ --destructive-foreground: hsl(0 0% 98%);
128
+
129
+ --border: hsl(45 5% 85%);
130
+ --input: hsl(0 0% 90%);
131
+ --ring: hsl(0 0% 4%);
132
+
133
+ /* Chart colors */
134
+ --chart-1: hsl(12 76% 61%);
135
+ --chart-2: hsl(173 58% 39%);
136
+ --chart-3: hsl(197 37% 24%);
137
+ --chart-4: hsl(43 74% 66%);
138
+ --chart-5: hsl(27 87% 67%);
139
+
140
+ /* Sidebar - Midday style */
141
+ --sidebar: hsl(0 0% 99%);
142
+ --sidebar-foreground: hsl(0 0% 7%);
143
+ --sidebar-primary: hsl(240 6% 10%);
144
+ --sidebar-primary-foreground: hsl(0 0% 98%);
145
+ --sidebar-accent: hsl(40 10% 97%);
146
+ --sidebar-accent-foreground: hsl(0 0% 9%);
147
+ --sidebar-border: hsl(45 5% 85%);
148
+ --sidebar-ring: hsl(0 0% 4%);
149
+ }
150
+
151
+ @layer base {
152
+ * {
153
+ @apply border-border outline-ring/50;
154
+ }
155
+ body {
156
+ @apply bg-background text-foreground;
157
+ }
158
+ }
159
+
160
+ /* ========================================
161
+ MIDDAY UTILITIES
162
+ ======================================== */
163
+
164
+ /* Scrollbar hide utility */
165
+ .scrollbar-hide {
166
+ -ms-overflow-style: none;
167
+ scrollbar-width: none;
168
+ }
169
+ .scrollbar-hide::-webkit-scrollbar {
170
+ display: none;
171
+ }
172
+
173
+ /* ========================================
174
+ MIDDAY ANIMATIONS
175
+ ======================================== */
176
+
177
+ @keyframes shimmer {
178
+ 0% {
179
+ transform: translateX(-100%);
180
+ }
181
+ 100% {
182
+ transform: translateX(100%);
183
+ }
184
+ }
185
+
186
+ @keyframes accordion-down {
187
+ from {
188
+ height: 0;
189
+ }
190
+ to {
191
+ height: var(--radix-accordion-content-height);
192
+ }
193
+ }
194
+
195
+ @keyframes accordion-up {
196
+ from {
197
+ height: var(--radix-accordion-content-height);
198
+ }
199
+ to {
200
+ height: 0;
201
+ }
202
+ }
203
+
204
+ @keyframes dialog-overlay-show {
205
+ from {
206
+ opacity: 0;
207
+ }
208
+ to {
209
+ opacity: 1;
210
+ }
211
+ }
212
+
213
+ @keyframes dialog-content-show {
214
+ from {
215
+ opacity: 0;
216
+ transform: translate(-50%, -50%) scale(0.97);
217
+ }
218
+ to {
219
+ opacity: 1;
220
+ transform: translate(-50%, -50%) scale(1);
221
+ }
222
+ }
223
+
224
+ @keyframes caret-blink {
225
+ 0%, 70%, 100% {
226
+ opacity: 1;
227
+ }
228
+ 20%, 50% {
229
+ opacity: 0;
230
+ }
231
+ }
232
+
233
+ /* Loading ellipsis animation */
234
+ @keyframes loading-ellipsis {
235
+ 0% { content: ''; }
236
+ 25% { content: '.'; }
237
+ 50% { content: '..'; }
238
+ 75% { content: '...'; }
239
+ }
240
+
241
+ .loading-ellipsis::after {
242
+ content: '';
243
+ animation: loading-ellipsis 1.5s infinite;
244
+ }
245
+
246
+ /* Animate shimmer class */
247
+ .animate-shimmer {
248
+ animation: shimmer 2.5s linear infinite;
249
+ }
@@ -1,37 +1,37 @@
1
- import type { Metadata } from "next"
2
- import { Inter } from "next/font/google"
3
- import "./globals.css"
4
- import { Providers } from "./providers"
5
- import { SidebarProvider } from "@/components/layout/sidebar-context"
6
- import { Sidebar } from "@/components/layout/sidebar"
7
- import { MainContent } from "@/components/layout/main-content"
8
-
9
- const inter = Inter({ subsets: ["latin"] })
10
-
11
- export const metadata: Metadata = {
12
- title: "Dashboard - LFT App",
13
- description: "Panel de administración creado con create-lft-app",
14
- }
15
-
16
- export default function RootLayout({
17
- children,
18
- }: {
19
- children: React.ReactNode
20
- }) {
21
- return (
22
- <html lang="es" suppressHydrationWarning>
23
- <body className={`${inter.className} font-sans antialiased`}>
24
- <Providers>
25
- <SidebarProvider>
26
- <div className="min-h-screen bg-background flex">
27
- <Sidebar />
28
- <MainContent>
29
- {children}
30
- </MainContent>
31
- </div>
32
- </SidebarProvider>
33
- </Providers>
34
- </body>
35
- </html>
36
- )
37
- }
1
+ import type { Metadata } from "next"
2
+ import { Inter } from "next/font/google"
3
+ import "./globals.css"
4
+ import { Providers } from "./providers"
5
+ import { SidebarProvider } from "@/components/layout/sidebar-context"
6
+ import { Sidebar } from "@/components/layout/sidebar"
7
+ import { MainContent } from "@/components/layout/main-content"
8
+
9
+ const inter = Inter({ subsets: ["latin"] })
10
+
11
+ export const metadata: Metadata = {
12
+ title: "Dashboard - LFT App",
13
+ description: "Panel de administración creado con create-lft-app",
14
+ }
15
+
16
+ export default function RootLayout({
17
+ children,
18
+ }: {
19
+ children: React.ReactNode
20
+ }) {
21
+ return (
22
+ <html lang="es" suppressHydrationWarning>
23
+ <body className={`${inter.className} font-sans antialiased`}>
24
+ <Providers>
25
+ <SidebarProvider>
26
+ <div className="min-h-screen bg-background flex">
27
+ <Sidebar />
28
+ <MainContent>
29
+ {children}
30
+ </MainContent>
31
+ </div>
32
+ </SidebarProvider>
33
+ </Providers>
34
+ </body>
35
+ </html>
36
+ )
37
+ }
@@ -1,5 +1,5 @@
1
- import { redirect } from "next/navigation"
2
-
3
- export default function Home() {
4
- redirect("/dashboard")
5
- }
1
+ import { redirect } from "next/navigation"
2
+
3
+ export default function Home() {
4
+ redirect("/dashboard")
5
+ }
@@ -1,27 +1,27 @@
1
- 'use client'
2
-
3
- import { useState } from 'react'
4
- import { QueryClientProvider } from '@tanstack/react-query'
5
- import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
6
- import { ThemeProvider } from 'next-themes'
7
- import { Toaster } from 'sonner'
8
- import { getQueryClient } from '@/lib/query-client'
9
-
10
- export function Providers({ children }: { children: React.ReactNode }) {
11
- const [queryClient] = useState(() => getQueryClient())
12
-
13
- return (
14
- <QueryClientProvider client={queryClient}>
15
- <ThemeProvider
16
- attribute="class"
17
- defaultTheme="system"
18
- enableSystem
19
- disableTransitionOnChange
20
- >
21
- {children}
22
- <Toaster richColors position="top-right" />
23
- </ThemeProvider>
24
- <ReactQueryDevtools initialIsOpen={false} />
25
- </QueryClientProvider>
26
- )
27
- }
1
+ 'use client'
2
+
3
+ import { useState } from 'react'
4
+ import { QueryClientProvider } from '@tanstack/react-query'
5
+ import { ReactQueryDevtools } from '@tanstack/react-query-devtools'
6
+ import { ThemeProvider } from 'next-themes'
7
+ import { Toaster } from 'sonner'
8
+ import { getQueryClient } from '@/lib/query-client'
9
+
10
+ export function Providers({ children }: { children: React.ReactNode }) {
11
+ const [queryClient] = useState(() => getQueryClient())
12
+
13
+ return (
14
+ <QueryClientProvider client={queryClient}>
15
+ <ThemeProvider
16
+ attribute="class"
17
+ defaultTheme="system"
18
+ enableSystem
19
+ disableTransitionOnChange
20
+ >
21
+ {children}
22
+ <Toaster richColors position="top-right" />
23
+ </ThemeProvider>
24
+ <ReactQueryDevtools initialIsOpen={false} />
25
+ </QueryClientProvider>
26
+ )
27
+ }