create-zhx-monorepo 0.2.2 → 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 (349) hide show
  1. package/README.md +1 -1
  2. package/bin/index.js +0 -0
  3. package/package.json +3 -3
  4. package/templates/monorepo-starter/apps/dashboard/components.json +20 -0
  5. package/templates/monorepo-starter/apps/dashboard/eslint.config.js +1 -0
  6. package/templates/monorepo-starter/apps/dashboard/next-env.d.ts +6 -0
  7. package/templates/monorepo-starter/apps/dashboard/next.config.mjs +30 -0
  8. package/templates/monorepo-starter/apps/dashboard/package.json +43 -0
  9. package/templates/monorepo-starter/apps/dashboard/postcss.config.mjs +1 -0
  10. package/templates/monorepo-starter/apps/dashboard/src/app/(root)/admin/users/[id]/edit/page.tsx +8 -0
  11. package/templates/monorepo-starter/apps/dashboard/src/app/(root)/admin/users/[id]/page.tsx +104 -0
  12. package/templates/monorepo-starter/apps/dashboard/src/app/(root)/admin/users/new/page.tsx +7 -0
  13. package/templates/monorepo-starter/apps/dashboard/src/app/(root)/admin/users/page.tsx +88 -0
  14. package/templates/monorepo-starter/apps/dashboard/src/app/(root)/dashboard/data.json +614 -0
  15. package/templates/monorepo-starter/apps/dashboard/src/app/(root)/dashboard/page.tsx +21 -0
  16. package/templates/monorepo-starter/apps/dashboard/src/app/(root)/layout.tsx +40 -0
  17. package/templates/monorepo-starter/apps/dashboard/src/app/(root)/media/page.tsx +7 -0
  18. package/templates/monorepo-starter/apps/dashboard/src/app/(root)/users/account/page.tsx +75 -0
  19. package/templates/monorepo-starter/apps/dashboard/src/app/auth/[type]/page.tsx +19 -0
  20. package/templates/monorepo-starter/apps/dashboard/src/app/auth/layout.tsx +11 -0
  21. package/templates/monorepo-starter/apps/dashboard/src/app/auth/verify/page.tsx +11 -0
  22. package/templates/monorepo-starter/apps/dashboard/src/app/favicon.ico +0 -0
  23. package/templates/monorepo-starter/apps/dashboard/src/app/layout.tsx +28 -0
  24. package/templates/monorepo-starter/apps/dashboard/src/components/forms/AuthForm.tsx +345 -0
  25. package/templates/monorepo-starter/apps/dashboard/src/components/forms/CUUserForm.tsx +223 -0
  26. package/templates/monorepo-starter/apps/dashboard/src/components/forms/MediaForm.tsx +35 -0
  27. package/templates/monorepo-starter/apps/dashboard/src/components/forms/SocialAuthField.tsx +56 -0
  28. package/templates/monorepo-starter/apps/dashboard/src/components/layout/AppSidebar.tsx +141 -0
  29. package/templates/monorepo-starter/apps/dashboard/src/components/layout/DashboardChart.tsx +293 -0
  30. package/templates/monorepo-starter/apps/dashboard/src/components/layout/DashboardStats.tsx +104 -0
  31. package/templates/monorepo-starter/apps/dashboard/src/components/layout/Header.tsx +21 -0
  32. package/templates/monorepo-starter/apps/dashboard/src/components/layout/NavMain.tsx +99 -0
  33. package/templates/monorepo-starter/apps/dashboard/src/components/media/LibraryPopup.tsx +25 -0
  34. package/templates/monorepo-starter/apps/dashboard/src/components/media/MediaCard.tsx +175 -0
  35. package/templates/monorepo-starter/apps/dashboard/src/components/media/MediaDetails.tsx +58 -0
  36. package/templates/monorepo-starter/apps/dashboard/src/components/media/MediaGrid.tsx +51 -0
  37. package/templates/monorepo-starter/apps/dashboard/src/components/media/MediaUploader.tsx +182 -0
  38. package/templates/monorepo-starter/apps/dashboard/src/components/media/index.tsx +96 -0
  39. package/templates/monorepo-starter/apps/dashboard/src/components/shared/DateWrapper.tsx +43 -0
  40. package/templates/monorepo-starter/apps/dashboard/src/components/shared/GenericArrayField.tsx +189 -0
  41. package/templates/monorepo-starter/apps/dashboard/src/components/shared/GenericCUForm.tsx +124 -0
  42. package/templates/monorepo-starter/apps/dashboard/src/components/shared/GenericDetailsPage.tsx +291 -0
  43. package/templates/monorepo-starter/apps/dashboard/src/components/shared/GenericFormTable.tsx +189 -0
  44. package/templates/monorepo-starter/apps/dashboard/src/components/shared/GenericTable.tsx +244 -0
  45. package/templates/monorepo-starter/apps/dashboard/src/components/shared/ListPage.tsx +134 -0
  46. package/templates/monorepo-starter/apps/dashboard/src/components/shared/Pagination.tsx +120 -0
  47. package/templates/monorepo-starter/apps/dashboard/src/components/shared/SearchToolbar.tsx +133 -0
  48. package/templates/monorepo-starter/apps/dashboard/src/components/shared/ThemeSwitch.tsx +41 -0
  49. package/templates/monorepo-starter/apps/dashboard/src/components/shared/VerifyAuthPage.tsx +109 -0
  50. package/templates/monorepo-starter/apps/dashboard/src/components/skeleton/CUFormSkeleton.tsx +31 -0
  51. package/templates/monorepo-starter/apps/dashboard/src/components/skeleton/DashboardSke1eton.tsx +135 -0
  52. package/templates/monorepo-starter/apps/dashboard/src/components/skeleton/DetailsPageSkeleton.tsx +64 -0
  53. package/templates/monorepo-starter/apps/dashboard/src/components/skeleton/RootLayoutSkeleton.tsx +106 -0
  54. package/templates/monorepo-starter/apps/dashboard/src/components/skeleton/TableSkeleton.tsx +77 -0
  55. package/templates/monorepo-starter/apps/dashboard/src/components/user/UserAccountSection.tsx +530 -0
  56. package/templates/monorepo-starter/apps/dashboard/src/components/user/UserCard.tsx +54 -0
  57. package/templates/monorepo-starter/apps/dashboard/src/components/user/UserProfileSection.tsx +239 -0
  58. package/templates/monorepo-starter/apps/dashboard/src/components/user/UserSessions.tsx +154 -0
  59. package/templates/monorepo-starter/apps/dashboard/src/hooks/admin.ts +100 -0
  60. package/templates/monorepo-starter/apps/dashboard/src/hooks/auth.ts +59 -0
  61. package/templates/monorepo-starter/apps/dashboard/src/hooks/crud.ts +275 -0
  62. package/templates/monorepo-starter/apps/dashboard/src/hooks/lookup.ts +38 -0
  63. package/templates/monorepo-starter/apps/dashboard/src/hooks/media.ts +34 -0
  64. package/templates/monorepo-starter/apps/dashboard/src/hooks/user.ts +58 -0
  65. package/templates/monorepo-starter/apps/dashboard/src/lib/constants.ts +61 -0
  66. package/templates/monorepo-starter/apps/dashboard/src/providers/index.tsx +15 -0
  67. package/templates/monorepo-starter/apps/dashboard/src/providers/media-library.tsx +48 -0
  68. package/templates/monorepo-starter/apps/dashboard/tsconfig.json +20 -0
  69. package/templates/monorepo-starter/apps/web/components.json +20 -20
  70. package/templates/monorepo-starter/apps/web/eslint.config.js +1 -0
  71. package/templates/monorepo-starter/apps/web/next-env.d.ts +6 -6
  72. package/templates/monorepo-starter/apps/web/next.config.mjs +20 -6
  73. package/templates/monorepo-starter/apps/web/package.json +36 -31
  74. package/templates/monorepo-starter/apps/web/postcss.config.mjs +1 -1
  75. package/templates/monorepo-starter/apps/web/src/app/(root)/layout.tsx +2 -2
  76. package/templates/monorepo-starter/apps/web/src/app/favicon.ico +0 -0
  77. package/templates/monorepo-starter/apps/web/src/app/layout.tsx +13 -9
  78. package/templates/monorepo-starter/apps/web/src/components/Footer.tsx +5 -7
  79. package/templates/monorepo-starter/apps/web/src/components/Header.tsx +5 -9
  80. package/templates/monorepo-starter/apps/web/tsconfig.json +20 -20
  81. package/templates/monorepo-starter/eslint.config.mjs +1 -1
  82. package/templates/monorepo-starter/gitignore +13 -4
  83. package/templates/monorepo-starter/package.json +49 -23
  84. package/templates/monorepo-starter/packages/config/eslint/next.mjs +18 -0
  85. package/templates/monorepo-starter/packages/config/eslint/node.mjs +44 -0
  86. package/templates/monorepo-starter/packages/config/eslint/react.mjs +68 -0
  87. package/templates/monorepo-starter/packages/config/package.json +23 -32
  88. package/templates/monorepo-starter/packages/config/typescript/node.json +25 -0
  89. package/templates/monorepo-starter/packages/config/typescript/react.json +20 -3
  90. package/templates/monorepo-starter/packages/contracts/eslint.config.mjs +1 -0
  91. package/templates/monorepo-starter/packages/contracts/package.json +51 -0
  92. package/templates/monorepo-starter/packages/contracts/src/admin/dto.ts +6 -0
  93. package/templates/monorepo-starter/packages/contracts/src/admin/index.ts +2 -0
  94. package/templates/monorepo-starter/packages/contracts/src/admin/schema.ts +28 -0
  95. package/templates/monorepo-starter/packages/contracts/src/admin/types.d.ts +27 -0
  96. package/templates/monorepo-starter/packages/contracts/src/auth/dto.ts +24 -0
  97. package/templates/monorepo-starter/packages/contracts/src/auth/index.ts +2 -0
  98. package/templates/monorepo-starter/packages/contracts/src/auth/schema.ts +35 -0
  99. package/templates/monorepo-starter/packages/contracts/src/auth/types.d.ts +73 -0
  100. package/templates/monorepo-starter/packages/contracts/src/lib/enums.ts +55 -0
  101. package/templates/monorepo-starter/packages/contracts/src/lib/index.ts +4 -0
  102. package/templates/monorepo-starter/packages/contracts/src/lib/prisma.ts +2 -0
  103. package/templates/monorepo-starter/packages/contracts/src/lib/schema.ts +61 -0
  104. package/templates/monorepo-starter/packages/contracts/src/lib/types.d.ts +149 -0
  105. package/templates/monorepo-starter/packages/contracts/src/lib/utils.ts +8 -0
  106. package/templates/monorepo-starter/packages/contracts/src/media/dto.ts +12 -0
  107. package/templates/monorepo-starter/packages/contracts/src/media/index.ts +2 -0
  108. package/templates/monorepo-starter/packages/contracts/src/media/schema.ts +27 -0
  109. package/templates/monorepo-starter/packages/contracts/src/media/types.d.ts +36 -0
  110. package/templates/monorepo-starter/packages/contracts/src/notification/dto.ts +6 -0
  111. package/templates/monorepo-starter/packages/contracts/src/notification/index.ts +2 -0
  112. package/templates/monorepo-starter/packages/contracts/src/notification/schema.ts +7 -0
  113. package/templates/monorepo-starter/packages/contracts/src/notification/types.d.ts +22 -0
  114. package/templates/monorepo-starter/packages/contracts/src/user/dto.ts +4 -0
  115. package/templates/monorepo-starter/packages/contracts/src/user/index.ts +2 -0
  116. package/templates/monorepo-starter/packages/contracts/src/user/schema.ts +16 -0
  117. package/templates/monorepo-starter/packages/contracts/src/user/types.d.ts +36 -0
  118. package/templates/monorepo-starter/packages/contracts/tsconfig.json +12 -0
  119. package/templates/monorepo-starter/packages/contracts/tsup.config.ts +20 -0
  120. package/templates/monorepo-starter/packages/sdk/eslint.config.mjs +1 -0
  121. package/templates/monorepo-starter/packages/sdk/package.json +31 -0
  122. package/templates/monorepo-starter/packages/sdk/src/admin/index.ts +31 -0
  123. package/templates/monorepo-starter/packages/sdk/src/auth/index.ts +71 -0
  124. package/templates/monorepo-starter/packages/sdk/src/lib/api-client.ts +71 -0
  125. package/templates/monorepo-starter/packages/sdk/src/lib/index.ts +2 -0
  126. package/templates/monorepo-starter/packages/sdk/src/lib/types.ts +40 -0
  127. package/templates/monorepo-starter/packages/sdk/src/media/index.ts +27 -0
  128. package/templates/monorepo-starter/packages/sdk/src/notification/index.ts +10 -0
  129. package/templates/monorepo-starter/packages/sdk/src/public/index.ts +6 -0
  130. package/templates/monorepo-starter/packages/sdk/src/user/index.ts +7 -0
  131. package/templates/monorepo-starter/packages/sdk/tsconfig.json +12 -0
  132. package/templates/monorepo-starter/packages/shared/eslint.config.mjs +1 -0
  133. package/templates/monorepo-starter/packages/shared/package.json +36 -0
  134. package/templates/monorepo-starter/packages/shared/src/constants/app.ts +4 -0
  135. package/templates/monorepo-starter/packages/shared/src/constants/index.ts +1 -0
  136. package/templates/monorepo-starter/packages/shared/src/utils/date.ts +137 -0
  137. package/templates/monorepo-starter/packages/shared/src/utils/identifier.ts +11 -0
  138. package/templates/monorepo-starter/packages/shared/src/utils/index.ts +2 -0
  139. package/templates/monorepo-starter/packages/shared/tsconfig.json +12 -0
  140. package/templates/monorepo-starter/packages/shared/tsup.config.ts +16 -0
  141. package/templates/monorepo-starter/packages/templates/eslint.config.mjs +1 -0
  142. package/templates/monorepo-starter/packages/templates/package.json +38 -0
  143. package/templates/monorepo-starter/packages/templates/src/email/auth/disableMfa.tsx +40 -0
  144. package/templates/monorepo-starter/packages/templates/src/email/auth/index.ts +10 -0
  145. package/templates/monorepo-starter/packages/templates/src/email/auth/resetPassword.tsx +41 -0
  146. package/templates/monorepo-starter/packages/templates/src/email/auth/securityAlert.tsx +21 -0
  147. package/templates/monorepo-starter/packages/templates/src/email/auth/setPassword.tsx +42 -0
  148. package/templates/monorepo-starter/packages/templates/src/email/auth/signin.tsx +19 -0
  149. package/templates/monorepo-starter/packages/templates/src/email/auth/signup.tsx +24 -0
  150. package/templates/monorepo-starter/packages/templates/src/email/auth/updateIdentifier.tsx +79 -0
  151. package/templates/monorepo-starter/packages/templates/src/email/auth/updateMfa.tsx +40 -0
  152. package/templates/monorepo-starter/packages/templates/src/email/auth/verifyIdentifier.tsx +42 -0
  153. package/templates/monorepo-starter/packages/templates/src/email/auth/verifyMfa.tsx +23 -0
  154. package/templates/monorepo-starter/packages/templates/src/email/components/actionBlock.tsx +39 -0
  155. package/templates/monorepo-starter/packages/templates/src/email/components/footer.tsx +0 -0
  156. package/templates/monorepo-starter/packages/templates/src/email/components/greeting.tsx +11 -0
  157. package/templates/monorepo-starter/packages/templates/src/email/components/header.tsx +15 -0
  158. package/templates/monorepo-starter/packages/templates/src/email/components/layout.tsx +33 -0
  159. package/templates/monorepo-starter/packages/templates/src/email/components/numericCode.tsx +16 -0
  160. package/templates/monorepo-starter/packages/templates/src/email/index.ts +2 -0
  161. package/templates/monorepo-starter/packages/templates/src/email/service/accountReactivated.tsx +31 -0
  162. package/templates/monorepo-starter/packages/templates/src/email/service/accountSuspended.tsx +37 -0
  163. package/templates/monorepo-starter/packages/templates/src/email/service/index.ts +2 -0
  164. package/templates/monorepo-starter/packages/templates/src/email/test.tsx +141 -0
  165. package/templates/monorepo-starter/packages/templates/src/index.ts +1 -0
  166. package/templates/monorepo-starter/packages/templates/src/lib/constants.ts +22 -0
  167. package/templates/monorepo-starter/packages/templates/src/lib/utils.ts +19 -0
  168. package/templates/monorepo-starter/packages/templates/src/types/global.d.ts +37 -0
  169. package/templates/monorepo-starter/packages/templates/tsconfig.json +13 -0
  170. package/templates/monorepo-starter/packages/templates/tsup.config.ts +23 -0
  171. package/templates/monorepo-starter/packages/ui/components.json +1 -1
  172. package/templates/monorepo-starter/packages/ui/eslint.config.mjs +1 -4
  173. package/templates/monorepo-starter/packages/ui/package.json +81 -38
  174. package/templates/monorepo-starter/packages/ui/src/components/accordion.tsx +66 -0
  175. package/templates/monorepo-starter/packages/ui/src/components/airport-search-field.tsx +203 -0
  176. package/templates/monorepo-starter/packages/ui/src/components/alert-dialog.tsx +157 -0
  177. package/templates/monorepo-starter/packages/ui/src/components/alert.tsx +66 -0
  178. package/templates/monorepo-starter/packages/ui/src/components/aspect-ratio.tsx +11 -0
  179. package/templates/monorepo-starter/packages/ui/src/components/avatar.tsx +53 -0
  180. package/templates/monorepo-starter/packages/ui/src/components/badge.tsx +46 -0
  181. package/templates/monorepo-starter/packages/ui/src/components/breadcrumb.tsx +109 -0
  182. package/templates/monorepo-starter/packages/ui/src/components/button-group.tsx +83 -0
  183. package/templates/monorepo-starter/packages/ui/src/components/button.tsx +2 -1
  184. package/templates/monorepo-starter/packages/ui/src/components/calendar.tsx +220 -0
  185. package/templates/monorepo-starter/packages/ui/src/components/card.tsx +92 -0
  186. package/templates/monorepo-starter/packages/ui/src/components/carousel.tsx +241 -0
  187. package/templates/monorepo-starter/packages/ui/src/components/chart.tsx +357 -0
  188. package/templates/monorepo-starter/packages/ui/src/components/checkbox.tsx +32 -0
  189. package/templates/monorepo-starter/packages/ui/src/components/collapsible.tsx +33 -0
  190. package/templates/monorepo-starter/packages/ui/src/components/combobox-field.tsx +181 -0
  191. package/templates/monorepo-starter/packages/ui/src/components/combobox.tsx +309 -0
  192. package/templates/monorepo-starter/packages/ui/src/components/command.tsx +184 -0
  193. package/templates/monorepo-starter/packages/ui/src/components/context-menu.tsx +252 -0
  194. package/templates/monorepo-starter/packages/ui/src/components/date-field.tsx +65 -0
  195. package/templates/monorepo-starter/packages/ui/src/components/dialog.tsx +143 -0
  196. package/templates/monorepo-starter/packages/ui/src/components/direction.tsx +22 -0
  197. package/templates/monorepo-starter/packages/ui/src/components/drawer.tsx +135 -0
  198. package/templates/monorepo-starter/packages/ui/src/components/dropdown-menu.tsx +257 -0
  199. package/templates/monorepo-starter/packages/ui/src/components/empty.tsx +104 -0
  200. package/templates/monorepo-starter/packages/ui/src/components/field.tsx +248 -0
  201. package/templates/monorepo-starter/packages/ui/src/components/form.tsx +197 -0
  202. package/templates/monorepo-starter/packages/ui/src/components/hover-card.tsx +44 -0
  203. package/templates/monorepo-starter/packages/ui/src/components/input-field.tsx +116 -0
  204. package/templates/monorepo-starter/packages/ui/src/components/input-group.tsx +170 -0
  205. package/templates/monorepo-starter/packages/ui/src/components/input-otp.tsx +77 -0
  206. package/templates/monorepo-starter/packages/ui/src/components/input.tsx +44 -0
  207. package/templates/monorepo-starter/packages/ui/src/components/item.tsx +193 -0
  208. package/templates/monorepo-starter/packages/ui/src/components/kbd.tsx +28 -0
  209. package/templates/monorepo-starter/packages/ui/src/components/label.tsx +24 -0
  210. package/templates/monorepo-starter/packages/ui/src/components/menubar.tsx +276 -0
  211. package/templates/monorepo-starter/packages/ui/src/components/native-select.tsx +53 -0
  212. package/templates/monorepo-starter/packages/ui/src/components/navigation-menu.tsx +168 -0
  213. package/templates/monorepo-starter/packages/ui/src/components/otp-modal.tsx +125 -0
  214. package/templates/monorepo-starter/packages/ui/src/components/pagination.tsx +127 -0
  215. package/templates/monorepo-starter/packages/ui/src/components/popover.tsx +48 -0
  216. package/templates/monorepo-starter/packages/ui/src/components/progress.tsx +31 -0
  217. package/templates/monorepo-starter/packages/ui/src/components/radio-group.tsx +45 -0
  218. package/templates/monorepo-starter/packages/ui/src/components/resizable.tsx +53 -0
  219. package/templates/monorepo-starter/packages/ui/src/components/scroll-area.tsx +58 -0
  220. package/templates/monorepo-starter/packages/ui/src/components/select-field.tsx +165 -0
  221. package/templates/monorepo-starter/packages/ui/src/components/select.tsx +190 -0
  222. package/templates/monorepo-starter/packages/ui/src/components/separator.tsx +28 -0
  223. package/templates/monorepo-starter/packages/ui/src/components/sheet.tsx +139 -0
  224. package/templates/monorepo-starter/packages/ui/src/components/sidebar.tsx +728 -0
  225. package/templates/monorepo-starter/packages/ui/src/components/skeleton.tsx +13 -0
  226. package/templates/monorepo-starter/packages/ui/src/components/slider.tsx +63 -0
  227. package/templates/monorepo-starter/packages/ui/src/components/sonner.tsx +57 -0
  228. package/templates/monorepo-starter/packages/ui/src/components/spinner.tsx +16 -0
  229. package/templates/monorepo-starter/packages/ui/src/components/switch-field.tsx +22 -0
  230. package/templates/monorepo-starter/packages/ui/src/components/switch.tsx +35 -0
  231. package/templates/monorepo-starter/packages/ui/src/components/table.tsx +120 -0
  232. package/templates/monorepo-starter/packages/ui/src/components/tabs.tsx +66 -0
  233. package/templates/monorepo-starter/packages/ui/src/components/textarea.tsx +18 -0
  234. package/templates/monorepo-starter/packages/ui/src/components/toggle-group.tsx +83 -0
  235. package/templates/monorepo-starter/packages/ui/src/components/toggle.tsx +47 -0
  236. package/templates/monorepo-starter/packages/ui/src/components/tooltip.tsx +61 -0
  237. package/templates/monorepo-starter/packages/ui/src/hooks/use-confirm.ts +12 -0
  238. package/templates/monorepo-starter/packages/ui/src/hooks/use-dialog.ts +12 -0
  239. package/templates/monorepo-starter/packages/ui/src/hooks/use-mobile.ts +21 -0
  240. package/templates/monorepo-starter/packages/ui/src/lib/utils.ts +38 -3
  241. package/templates/monorepo-starter/packages/ui/src/provider/confirm-dialog.tsx +99 -0
  242. package/templates/monorepo-starter/packages/ui/src/provider/dialog.tsx +62 -0
  243. package/templates/monorepo-starter/packages/ui/src/provider/index.tsx +30 -0
  244. package/templates/monorepo-starter/packages/ui/src/provider/react-query.tsx +11 -0
  245. package/templates/monorepo-starter/{apps/web/src/providers → packages/ui/src/provider}/theme.tsx +5 -7
  246. package/templates/monorepo-starter/packages/ui/src/styles/globals.css +109 -61
  247. package/templates/monorepo-starter/packages/ui/src/types/airports-data.d.ts +21 -0
  248. package/templates/monorepo-starter/packages/ui/tsconfig.json +1 -3
  249. package/templates/monorepo-starter/pnpm-lock.yaml +17765 -12441
  250. package/templates/monorepo-starter/pnpm-workspace.yaml +3 -16
  251. package/templates/monorepo-starter/server/.env.example +7 -5
  252. package/templates/monorepo-starter/server/eslint.config.mjs +1 -4
  253. package/templates/monorepo-starter/server/package.json +129 -97
  254. package/templates/monorepo-starter/server/prisma/schema.prisma +170 -92
  255. package/templates/monorepo-starter/server/prisma/seed-functions.ts +0 -0
  256. package/templates/monorepo-starter/server/prisma/seed.ts +0 -0
  257. package/templates/monorepo-starter/server/prisma.config.ts +9 -9
  258. package/templates/monorepo-starter/server/scripts/admin-bootstrap.ts +61 -0
  259. package/templates/monorepo-starter/server/scripts/gen-module.sh +20 -0
  260. package/templates/monorepo-starter/server/scripts/gen-soft-delete.ts +52 -0
  261. package/templates/monorepo-starter/server/src/app.module.ts +35 -28
  262. package/templates/monorepo-starter/server/src/lib/constants/index.ts +59 -0
  263. package/templates/monorepo-starter/server/src/lib/decorators/boolean-query.decorator.ts +18 -0
  264. package/templates/monorepo-starter/server/src/lib/decorators/logger.decorator.ts +1 -1
  265. package/templates/monorepo-starter/server/src/lib/decorators/oauth.decorator.ts +7 -0
  266. package/templates/monorepo-starter/server/src/lib/decorators/user.decorator.ts +10 -0
  267. package/templates/monorepo-starter/server/src/lib/filters/exceptions.filter.ts +169 -24
  268. package/templates/monorepo-starter/server/src/lib/guards/auth.guard.ts +29 -65
  269. package/templates/monorepo-starter/server/src/lib/guards/oauth.guard.ts +28 -0
  270. package/templates/monorepo-starter/server/src/lib/interceptors/response.interceptor.ts +42 -5
  271. package/templates/monorepo-starter/server/src/lib/middleware/cache.middleware.ts +24 -0
  272. package/templates/monorepo-starter/server/src/lib/schemas/env.schema.ts +25 -5
  273. package/templates/monorepo-starter/server/src/lib/utils/client.utils.ts +95 -0
  274. package/templates/monorepo-starter/server/src/lib/utils/cookie.util.ts +4 -3
  275. package/templates/monorepo-starter/server/src/main.ts +20 -10
  276. package/templates/monorepo-starter/server/src/modules/admin/admin.controller.ts +54 -0
  277. package/templates/monorepo-starter/server/src/modules/admin/admin.module.ts +13 -0
  278. package/templates/monorepo-starter/server/src/modules/admin/admin.service.ts +134 -0
  279. package/templates/monorepo-starter/server/src/modules/auth/auth.controller.ts +60 -18
  280. package/templates/monorepo-starter/server/src/modules/auth/auth.module.ts +3 -2
  281. package/templates/monorepo-starter/server/src/modules/auth/auth.service.ts +354 -307
  282. package/templates/monorepo-starter/server/src/modules/auth/oauth.controller.ts +50 -28
  283. package/templates/monorepo-starter/server/src/modules/auth/oauth.service.ts +59 -34
  284. package/templates/monorepo-starter/server/src/modules/auth/otp.service.ts +29 -36
  285. package/templates/monorepo-starter/server/src/modules/cache/cache.module.ts +28 -0
  286. package/templates/monorepo-starter/server/src/modules/cache/cache.service.ts +33 -0
  287. package/templates/monorepo-starter/server/src/modules/env/env.service.ts +4 -3
  288. package/templates/monorepo-starter/server/src/modules/logger/logger.module.ts +1 -0
  289. package/templates/monorepo-starter/server/src/modules/logger/logger.service.ts +1 -1
  290. package/templates/monorepo-starter/server/src/modules/logger/winston.config.ts +15 -1
  291. package/templates/monorepo-starter/server/src/modules/media/cloudinary.provider.ts +14 -0
  292. package/templates/monorepo-starter/server/src/modules/media/cloudinary.service.ts +62 -0
  293. package/templates/monorepo-starter/server/src/modules/media/media.controller.ts +72 -0
  294. package/templates/monorepo-starter/server/src/modules/media/media.module.ts +13 -0
  295. package/templates/monorepo-starter/server/src/modules/media/media.service.ts +146 -0
  296. package/templates/monorepo-starter/server/src/modules/notification/email.service.ts +30 -0
  297. package/templates/monorepo-starter/server/src/modules/notification/messaging.service.ts +50 -0
  298. package/templates/monorepo-starter/server/src/modules/notification/notification.controller.ts +44 -0
  299. package/templates/monorepo-starter/server/src/modules/notification/notification.module.ts +7 -3
  300. package/templates/monorepo-starter/server/src/modules/notification/notification.service.ts +121 -78
  301. package/templates/monorepo-starter/server/src/modules/notification/push.service.ts +92 -0
  302. package/templates/monorepo-starter/server/src/modules/prisma/prisma.extension.ts +84 -56
  303. package/templates/monorepo-starter/server/src/modules/prisma/prisma.service.ts +10 -9
  304. package/templates/monorepo-starter/server/src/modules/prisma/soft-delete.models.ts +7 -0
  305. package/templates/monorepo-starter/server/src/modules/public/public.controller.ts +3 -2
  306. package/templates/monorepo-starter/server/src/modules/public/public.module.ts +5 -4
  307. package/templates/monorepo-starter/server/src/modules/public/public.service.ts +7 -4
  308. package/templates/monorepo-starter/server/src/modules/scheduler/cleanup.service.ts +15 -7
  309. package/templates/monorepo-starter/server/src/modules/scheduler/scheduler.module.ts +2 -0
  310. package/templates/monorepo-starter/server/src/modules/token/token.module.ts +3 -4
  311. package/templates/monorepo-starter/server/src/modules/token/token.service.ts +205 -76
  312. package/templates/monorepo-starter/server/src/modules/user/user.controller.ts +21 -0
  313. package/templates/monorepo-starter/server/src/modules/user/user.module.ts +12 -0
  314. package/templates/monorepo-starter/server/src/modules/user/user.service.ts +38 -0
  315. package/templates/monorepo-starter/server/src/types/express.d.ts +6 -2
  316. package/templates/monorepo-starter/server/src/types/index.ts +5 -0
  317. package/templates/monorepo-starter/server/tsconfig.json +17 -12
  318. package/templates/monorepo-starter/server/tsup.config.ts +7 -2
  319. package/templates/monorepo-starter/tsconfig.json +1 -1
  320. package/templates/monorepo-starter/turbo.json +1 -1
  321. package/templates/monorepo-starter/apps/web/eslint.config.mjs +0 -4
  322. package/templates/monorepo-starter/apps/web/src/app/(auth)/layout.tsx +0 -7
  323. package/templates/monorepo-starter/apps/web/src/app/globals.css +0 -1
  324. package/templates/monorepo-starter/apps/web/src/components/ThemeSwitch.tsx +0 -34
  325. package/templates/monorepo-starter/apps/web/src/providers/index.tsx +0 -10
  326. package/templates/monorepo-starter/apps/web/src/types/index.d.ts +0 -16
  327. package/templates/monorepo-starter/packages/config/eslint/base.js +0 -31
  328. package/templates/monorepo-starter/packages/config/eslint/nest.js +0 -26
  329. package/templates/monorepo-starter/packages/config/eslint/next.js +0 -39
  330. package/templates/monorepo-starter/packages/config/eslint/react.js +0 -30
  331. package/templates/monorepo-starter/packages/config/typescript/base.json +0 -31
  332. package/templates/monorepo-starter/packages/config/typescript/nest.json +0 -14
  333. package/templates/monorepo-starter/packages/config/typescript/next.json +0 -10
  334. package/templates/monorepo-starter/packages/ui/tsconfig.lint.json +0 -8
  335. package/templates/monorepo-starter/server/README.md +0 -63
  336. package/templates/monorepo-starter/server/scripts/generate.sh +0 -14
  337. package/templates/monorepo-starter/server/src/lib/dto/auth.dto.ts +0 -64
  338. package/templates/monorepo-starter/server/src/lib/dto/security-setting.dto.ts +0 -21
  339. package/templates/monorepo-starter/server/src/lib/pipes/validation.pipe.ts +0 -7
  340. package/templates/monorepo-starter/server/src/lib/templates/notification.templates.ts +0 -243
  341. package/templates/monorepo-starter/server/src/lib/utils/general.util.ts +0 -24
  342. package/templates/monorepo-starter/server/src/modules/auth/role.service.ts +0 -99
  343. package/templates/monorepo-starter/server/src/modules/auth/security-setting.service.ts +0 -102
  344. package/templates/monorepo-starter/server/src/modules/template/template.module.ts +0 -8
  345. package/templates/monorepo-starter/server/src/modules/template/template.service.ts +0 -33
  346. package/templates/monorepo-starter/server/src/types/index.d.ts +0 -13
  347. package/templates/monorepo-starter/server/test/app.e2e-spec.ts +0 -25
  348. package/templates/monorepo-starter/server/test/jest-e2e.json +0 -9
  349. /package/templates/monorepo-starter/{packages/ui/src/hooks → apps/dashboard/public}/.gitkeep +0 -0
@@ -1,6 +1,41 @@
1
- import { clsx, type ClassValue } from "clsx"
2
- import { twMerge } from "tailwind-merge"
1
+ import { clsx, type ClassValue } from "clsx";
2
+ import { twMerge } from "tailwind-merge";
3
+ import { toast } from "sonner";
3
4
 
4
5
  export function cn(...inputs: ClassValue[]) {
5
- return twMerge(clsx(inputs))
6
+ return twMerge(clsx(inputs));
6
7
  }
8
+
9
+ export const copyToClipboard = async (text: string, label: string) => {
10
+ await navigator.clipboard.writeText(text);
11
+ toast.success(`${label} copied to clipboard`);
12
+ };
13
+
14
+ export const handleDownload = async (media: MediaResponse) => {
15
+ try {
16
+ const response = await fetch(media.url);
17
+ const blob = await response.blob();
18
+
19
+ const url = window.URL.createObjectURL(blob);
20
+ const a = document.createElement("a");
21
+ a.href = url;
22
+ a.download = media.filename;
23
+ document.body.appendChild(a);
24
+ a.click();
25
+ a.remove();
26
+
27
+ window.URL.revokeObjectURL(url);
28
+ } catch {
29
+ toast.error("Failed to download file.");
30
+ }
31
+ };
32
+
33
+ export const getBackPath = (pathname: string, count = 1) => {
34
+ const segments = pathname.split("/").filter(Boolean);
35
+
36
+ if (count <= 0) return pathname;
37
+
38
+ return (
39
+ "/" + segments.slice(0, Math.max(segments.length - count, 0)).join("/")
40
+ );
41
+ };
@@ -0,0 +1,99 @@
1
+ "use client";
2
+
3
+ import React, { createContext, useCallback, useRef, useState } from "react";
4
+ import {
5
+ AlertDialog,
6
+ AlertDialogAction,
7
+ AlertDialogCancel,
8
+ AlertDialogContent,
9
+ AlertDialogDescription,
10
+ AlertDialogFooter,
11
+ AlertDialogHeader,
12
+ AlertDialogTitle,
13
+ } from "@workspace/ui/components/alert-dialog";
14
+
15
+ /* ========== Types ========== */
16
+ export type ConfirmOptions = {
17
+ title?: string;
18
+ description?: string;
19
+ confirmText?: string;
20
+ cancelText?: string;
21
+ };
22
+
23
+ type ConfirmContextType = {
24
+ confirm: (options?: ConfirmOptions) => Promise<boolean>;
25
+ };
26
+
27
+ /* ========== Context ========== */
28
+ export const ConfirmContext = createContext<ConfirmContextType | null>(null);
29
+
30
+ /* ========== Defaults ========== */
31
+ const DEFAULTS: Required<ConfirmOptions> = {
32
+ title: "Are you sure you want to delete this item?",
33
+ description: "This item will be moved to trash. You can restore it later.",
34
+ confirmText: "Move to trash",
35
+ cancelText: "Cancel",
36
+ };
37
+
38
+ /* ========== Provider ========== */
39
+ export function ConfirmProvider({ children }: { children: React.ReactNode }) {
40
+ const [isOpen, setIsOpen] = useState(false);
41
+ const [options, setOptions] = useState<ConfirmOptions>({});
42
+ const resolverRef = useRef<(value: boolean) => void>(undefined);
43
+
44
+ const confirm = useCallback((opts?: ConfirmOptions): Promise<boolean> => {
45
+ setOptions(opts ?? {});
46
+ setIsOpen(true);
47
+
48
+ return new Promise<boolean>((resolve) => {
49
+ resolverRef.current = resolve;
50
+ });
51
+ }, []);
52
+
53
+ const handleConfirm = () => {
54
+ resolverRef.current?.(true);
55
+ resolverRef.current = undefined;
56
+ setIsOpen(false);
57
+ };
58
+
59
+ const handleCancel = () => {
60
+ resolverRef.current?.(false);
61
+ resolverRef.current = undefined;
62
+ setIsOpen(false);
63
+ };
64
+
65
+ const merged = { ...DEFAULTS, ...options };
66
+
67
+ return (
68
+ <ConfirmContext.Provider value={{ confirm }}>
69
+ {children}
70
+
71
+ <AlertDialog
72
+ open={isOpen}
73
+ onOpenChange={(open) => !open && handleCancel()}
74
+ >
75
+ <AlertDialogContent className="gap-8">
76
+ <AlertDialogHeader className="text-start">
77
+ <AlertDialogTitle className="text-lg sm:text-xl font-semibold">
78
+ {merged.title}
79
+ </AlertDialogTitle>
80
+ <AlertDialogDescription>
81
+ {merged.description}
82
+ </AlertDialogDescription>
83
+ </AlertDialogHeader>
84
+
85
+ <AlertDialogFooter>
86
+ <AlertDialogCancel onClick={handleCancel}>
87
+ {merged.cancelText}
88
+ </AlertDialogCancel>
89
+ <AlertDialogAction onClick={handleConfirm}>
90
+ {merged.confirmText}
91
+ </AlertDialogAction>
92
+ </AlertDialogFooter>
93
+ </AlertDialogContent>
94
+ </AlertDialog>
95
+ </ConfirmContext.Provider>
96
+ );
97
+ }
98
+
99
+ export default ConfirmProvider;
@@ -0,0 +1,62 @@
1
+ "use client";
2
+
3
+ import React, { createContext, useState } from "react";
4
+ import {
5
+ Dialog,
6
+ DialogTitle,
7
+ DialogDescription,
8
+ DialogContent,
9
+ } from "@workspace/ui/components/dialog";
10
+
11
+ /* ========== Types ========== */
12
+ export type DialogOptions = {
13
+ title: string;
14
+ description?: string;
15
+ content: React.ReactNode;
16
+ };
17
+
18
+ type DialogContextType = {
19
+ openDialog: (options: DialogOptions) => void;
20
+ closeDialog: () => void;
21
+ };
22
+
23
+ /* ========== Context ========== */
24
+ export const DialogContext = createContext<DialogContextType | null>(null);
25
+
26
+ /* ========== Provider ========== */
27
+ export function DialogProvider({ children }: { children: React.ReactNode }) {
28
+ const [_openDialog, _setOpenDialog] = useState(false);
29
+ const [options, setOptions] = useState<DialogOptions | null>(null);
30
+
31
+ const openDialog = (opts: DialogOptions) => {
32
+ setOptions(opts);
33
+ _setOpenDialog(true);
34
+ };
35
+
36
+ const closeDialog = () => {
37
+ _setOpenDialog(false);
38
+ };
39
+
40
+ return (
41
+ <DialogContext.Provider value={{ openDialog, closeDialog }}>
42
+ {children}
43
+
44
+ <Dialog open={_openDialog} onOpenChange={_setOpenDialog}>
45
+ <DialogContent className="gap-8">
46
+ {options && (
47
+ <>
48
+ <div className="sr-only">
49
+ <DialogTitle>{options.title}</DialogTitle>
50
+ {options.description && (
51
+ <DialogDescription>{options.description}</DialogDescription>
52
+ )}
53
+ </div>
54
+
55
+ {options.content}
56
+ </>
57
+ )}
58
+ </DialogContent>
59
+ </Dialog>
60
+ </DialogContext.Provider>
61
+ );
62
+ }
@@ -0,0 +1,30 @@
1
+ "use client";
2
+
3
+ import React, { Suspense } from "react";
4
+ import ThemeProvider from "./theme";
5
+ import ReactQueryProvider from "./react-query";
6
+ import { ConfirmProvider } from "./confirm-dialog";
7
+ import { Toaster } from "../components/sonner";
8
+ import { TooltipProvider } from "../components/tooltip";
9
+ import { DialogProvider } from "./dialog";
10
+
11
+ const ProviderWrapper = ({ children }: { children: React.ReactNode }) => {
12
+ return (
13
+ <ReactQueryProvider>
14
+ <ThemeProvider>
15
+ <TooltipProvider>
16
+ <ConfirmProvider>
17
+ <DialogProvider>
18
+ <Suspense fallback={null}>
19
+ <Toaster />
20
+ </Suspense>
21
+ {children}
22
+ </DialogProvider>
23
+ </ConfirmProvider>
24
+ </TooltipProvider>
25
+ </ThemeProvider>
26
+ </ReactQueryProvider>
27
+ );
28
+ };
29
+
30
+ export default ProviderWrapper;
@@ -0,0 +1,11 @@
1
+ import { QueryClientProvider, QueryClient } from "@tanstack/react-query";
2
+
3
+ const queryClient = new QueryClient();
4
+
5
+ const ReactQueryProvider = ({ children }: { children: React.ReactNode }) => {
6
+ return (
7
+ <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
8
+ );
9
+ };
10
+
11
+ export default ReactQueryProvider;
@@ -1,8 +1,6 @@
1
-
2
- import React from "react"
3
- import { ThemeProvider as NextThemesProvider } from "next-themes"
1
+ import { ThemeProvider as NextThemesProvider } from "next-themes";
4
2
 
5
- function ThemeProvider({ children }: { children: React.ReactNode }) {
3
+ const ThemeProvider = ({ children }: { children: React.ReactNode }) => {
6
4
  return (
7
5
  <NextThemesProvider
8
6
  attribute="class"
@@ -13,7 +11,7 @@ import { ThemeProvider as NextThemesProvider } from "next-themes"
13
11
  >
14
12
  {children}
15
13
  </NextThemesProvider>
16
- )
17
- }
14
+ );
15
+ };
18
16
 
19
- export default ThemeProvider;
17
+ export default ThemeProvider;
@@ -10,79 +10,81 @@
10
10
  @custom-variant landscape (@media (orientation: landscape));
11
11
 
12
12
  :root {
13
+ --radius: 0.65rem;
13
14
  --background: oklch(1 0 0);
14
- --foreground: oklch(0.145 0 0);
15
+ --foreground: oklch(0.141 0.005 285.823);
15
16
  --card: oklch(1 0 0);
16
- --card-foreground: oklch(0.145 0 0);
17
+ --card-foreground: oklch(0.141 0.005 285.823);
17
18
  --popover: oklch(1 0 0);
18
- --popover-foreground: oklch(0.145 0 0);
19
- --primary: oklch(0.205 0 0);
20
- --primary-foreground: oklch(0.985 0 0);
21
- --secondary: oklch(0.97 0 0);
22
- --secondary-foreground: oklch(0.205 0 0);
23
- --muted: oklch(0.97 0 0);
24
- --muted-foreground: oklch(0.556 0 0);
25
- --accent: oklch(0.97 0 0);
26
- --accent-foreground: oklch(0.205 0 0);
19
+ --popover-foreground: oklch(0.141 0.005 285.823);
20
+ --primary: oklch(0.586 0.253 17.585);
21
+ --primary-foreground: oklch(0.969 0.015 12.422);
22
+ --secondary: oklch(0.967 0.001 286.375);
23
+ --secondary-foreground: oklch(0.21 0.006 285.885);
24
+ --muted: oklch(0.967 0.001 286.375);
25
+ --muted-foreground: oklch(0.552 0.016 285.938);
26
+ --accent: oklch(0.967 0.001 286.375);
27
+ --accent-foreground: oklch(0.21 0.006 285.885);
27
28
  --destructive: oklch(0.577 0.245 27.325);
28
- --destructive-foreground: oklch(0.577 0.245 27.325);
29
- --border: oklch(0.922 0 0);
30
- --input: oklch(0.922 0 0);
31
- --ring: oklch(0.708 0 0);
32
- --chart-1: oklch(0.646 0.222 41.116);
33
- --chart-2: oklch(0.6 0.118 184.704);
34
- --chart-3: oklch(0.398 0.07 227.392);
35
- --chart-4: oklch(0.828 0.189 84.429);
36
- --chart-5: oklch(0.769 0.188 70.08);
37
- --radius: 0.625rem;
29
+ --border: oklch(0.92 0.004 286.32);
30
+ --input: oklch(0.92 0.004 286.32);
31
+ --ring: oklch(0.712 0.194 13.428);
32
+ --chart-1: oklch(0.81 0.117 11.638);
33
+ --chart-2: oklch(0.645 0.246 16.439);
34
+ --chart-3: oklch(0.586 0.253 17.585);
35
+ --chart-4: oklch(0.514 0.222 16.935);
36
+ --chart-5: oklch(0.455 0.188 13.697);
38
37
  --sidebar: oklch(0.985 0 0);
39
- --sidebar-foreground: oklch(0.145 0 0);
40
- --sidebar-primary: oklch(0.205 0 0);
41
- --sidebar-primary-foreground: oklch(0.985 0 0);
42
- --sidebar-accent: oklch(0.97 0 0);
43
- --sidebar-accent-foreground: oklch(0.205 0 0);
44
- --sidebar-border: oklch(0.922 0 0);
45
- --sidebar-ring: oklch(0.708 0 0);
38
+ --sidebar-foreground: oklch(0.141 0.005 285.823);
39
+ --sidebar-primary: oklch(0.586 0.253 17.585);
40
+ --sidebar-primary-foreground: oklch(0.969 0.015 12.422);
41
+ --sidebar-accent: oklch(0.967 0.001 286.375);
42
+ --sidebar-accent-foreground: oklch(0.21 0.006 285.885);
43
+ --sidebar-border: oklch(0.92 0.004 286.32);
44
+ --sidebar-ring: oklch(0.712 0.194 13.428);
45
+ --sidebar-width: calc(var(--spacing) * 72);
46
+ --header-height: calc(var(--spacing) * 12);
46
47
  }
47
48
 
48
49
  .dark {
49
- --background: oklch(0.145 0 0);
50
+ --background: oklch(0.141 0.005 285.823);
50
51
  --foreground: oklch(0.985 0 0);
51
- --card: oklch(0.145 0 0);
52
+ --card: oklch(0.21 0.006 285.885);
52
53
  --card-foreground: oklch(0.985 0 0);
53
- --popover: oklch(0.145 0 0);
54
+ --popover: oklch(0.21 0.006 285.885);
54
55
  --popover-foreground: oklch(0.985 0 0);
55
- --primary: oklch(0.985 0 0);
56
- --primary-foreground: oklch(0.205 0 0);
57
- --secondary: oklch(0.269 0 0);
56
+ --primary: oklch(0.645 0.246 16.439);
57
+ --primary-foreground: oklch(0.969 0.015 12.422);
58
+ --secondary: oklch(0.274 0.006 286.033);
58
59
  --secondary-foreground: oklch(0.985 0 0);
59
- --muted: oklch(0.269 0 0);
60
- --muted-foreground: oklch(0.708 0 0);
61
- --accent: oklch(0.269 0 0);
60
+ --muted: oklch(0.274 0.006 286.033);
61
+ --muted-foreground: oklch(0.705 0.015 286.067);
62
+ --accent: oklch(0.274 0.006 286.033);
62
63
  --accent-foreground: oklch(0.985 0 0);
63
- --destructive: oklch(0.396 0.141 25.723);
64
- --destructive-foreground: oklch(0.637 0.237 25.331);
65
- --border: oklch(0.269 0 0);
66
- --input: oklch(0.269 0 0);
67
- --ring: oklch(0.556 0 0);
68
- --chart-1: oklch(0.488 0.243 264.376);
69
- --chart-2: oklch(0.696 0.17 162.48);
70
- --chart-3: oklch(0.769 0.188 70.08);
71
- --chart-4: oklch(0.627 0.265 303.9);
72
- --chart-5: oklch(0.645 0.246 16.439);
73
- --sidebar: oklch(0.205 0 0);
64
+ --destructive: oklch(0.704 0.191 22.216);
65
+ --border: oklch(1 0 0 / 10%);
66
+ --input: oklch(1 0 0 / 15%);
67
+ --ring: oklch(0.41 0.159 10.272);
68
+ --chart-1: oklch(0.81 0.117 11.638);
69
+ --chart-2: oklch(0.645 0.246 16.439);
70
+ --chart-3: oklch(0.586 0.253 17.585);
71
+ --chart-4: oklch(0.514 0.222 16.935);
72
+ --chart-5: oklch(0.455 0.188 13.697);
73
+ --sidebar: oklch(0.21 0.006 285.885);
74
74
  --sidebar-foreground: oklch(0.985 0 0);
75
- --sidebar-primary: oklch(0.488 0.243 264.376);
76
- --sidebar-primary-foreground: oklch(0.985 0 0);
77
- --sidebar-accent: oklch(0.269 0 0);
75
+ --sidebar-primary: oklch(0.645 0.246 16.439);
76
+ --sidebar-primary-foreground: oklch(0.969 0.015 12.422);
77
+ --sidebar-accent: oklch(0.274 0.006 286.033);
78
78
  --sidebar-accent-foreground: oklch(0.985 0 0);
79
- --sidebar-border: oklch(0.269 0 0);
80
- --sidebar-ring: oklch(0.439 0 0);
79
+ --sidebar-border: oklch(1 0 0 / 10%);
80
+ --sidebar-ring: oklch(0.41 0.159 10.272);
81
81
  }
82
82
 
83
83
  @theme inline {
84
84
  --color-background: var(--background);
85
85
  --color-foreground: var(--foreground);
86
+ --font-primary: var(--font-primary);
87
+ --font-secondary: var(--font-secondary);
86
88
  --color-card: var(--card);
87
89
  --color-card-foreground: var(--card-foreground);
88
90
  --color-popover: var(--popover);
@@ -120,12 +122,12 @@
120
122
  }
121
123
 
122
124
  @layer base {
123
- * {
124
- @apply !border-border outline-ring/50;
125
- }
126
-
127
125
  html {
128
126
  scroll-behavior: smooth;
127
+
128
+ * {
129
+ @apply border-border outline-ring/50 font-secondary;
130
+ }
129
131
  }
130
132
 
131
133
  body {
@@ -154,6 +156,30 @@
154
156
  @apply inline-block;
155
157
  }
156
158
 
159
+ h1,
160
+ h2,
161
+ h3,
162
+ h4,
163
+ h5,
164
+ h6 {
165
+ @apply font-primary;
166
+ }
167
+
168
+ input[type="number"]::-webkit-inner-spin-button,
169
+ input[type="number"]::-webkit-outer-spin-button {
170
+ -webkit-appearance: none;
171
+ margin: 0;
172
+ }
173
+
174
+ input[type="number"] {
175
+ -moz-appearance: textfield;
176
+ appearance: textfield;
177
+ }
178
+
179
+ svg {
180
+ @apply size-4;
181
+ }
182
+
157
183
  img {
158
184
  @apply max-w-full object-cover;
159
185
  }
@@ -164,19 +190,41 @@
164
190
  }
165
191
 
166
192
  main {
167
- @apply !space-y-16;
193
+ @apply space-y-16;
168
194
 
169
195
  > section {
170
196
  @apply section-container;
197
+
198
+ > div:has(table) {
199
+ @apply my-2 p-2 rounded-md border overflow-hidden;
200
+ }
171
201
  }
172
202
  }
173
203
  }
174
204
 
175
- /* Utility class for flex-center */
176
- .flex-center {
205
+ @utility flex-center {
177
206
  @apply flex items-center justify-center;
178
207
  }
179
208
 
209
+ @utility flex-center-inline {
210
+ @apply inline-flex items-center justify-center;
211
+ }
212
+
180
213
  @utility section-container {
181
- @apply w-full mx-auto px-4 sm:px-6 md:px-8 lg:px-10 xl:px-12;
214
+ @apply w-full mx-auto p-4 sm:p-6 md:p-8;
215
+ }
216
+
217
+ @utility scrollbar-hidden {
218
+ &::-webkit-scrollbar {
219
+ display: none;
220
+ }
221
+ }
222
+
223
+ @layer base {
224
+ * {
225
+ @apply border-border outline-ring/50;
226
+ }
227
+ body {
228
+ @apply bg-background text-foreground;
229
+ }
182
230
  }
@@ -0,0 +1,21 @@
1
+ declare module "airports-data/airports.json" {
2
+ export interface AirportData {
3
+ id: string;
4
+ name: string;
5
+ city: string;
6
+ country: string;
7
+ iata: string;
8
+ icao: string;
9
+ latitude: string;
10
+ longitude: string;
11
+ altitude: string;
12
+ timezone: string;
13
+ dst: string;
14
+ tz: string;
15
+ type: string;
16
+ source: string;
17
+ }
18
+
19
+ const airports: AirportData[];
20
+ export default airports;
21
+ }
@@ -2,12 +2,10 @@
2
2
  "extends": "@workspace/config/typescript/react",
3
3
  "compilerOptions": {
4
4
  "baseUrl": ".",
5
- "outDir": "dist",
6
- "rootDir": ".",
7
5
  "paths": {
8
6
  "@workspace/ui/*": ["src/*"]
9
7
  }
10
8
  },
11
- "include": ["."],
9
+ "include": [".", "../contracts/src/**/*types.d.ts"],
12
10
  "exclude": ["node_modules", "dist"]
13
11
  }