create-mithaq 0.0.0-stage → 0.1.1

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 (357) hide show
  1. package/LICENSE +22 -0
  2. package/LICENSES/payload.txt +22 -0
  3. package/LICENSES/ponytail.txt +21 -0
  4. package/index.js +127 -0
  5. package/package.json +19 -4
  6. package/template/apps/asas-platform/components.json +25 -0
  7. package/template/apps/asas-platform/gitignore +3 -0
  8. package/template/apps/asas-platform/package.json +55 -0
  9. package/template/apps/asas-platform/public/favicon.svg +1 -0
  10. package/template/apps/asas-platform/src/api.ts +147 -0
  11. package/template/apps/asas-platform/src/auth-frame.tsx +150 -0
  12. package/template/apps/asas-platform/src/components/mithaq/cells.tsx +112 -0
  13. package/template/apps/asas-platform/src/components/mithaq/controls.tsx +650 -0
  14. package/template/apps/asas-platform/src/components/mithaq/field-shell.tsx +53 -0
  15. package/template/apps/asas-platform/src/components/mithaq/filter-operators.ts +108 -0
  16. package/template/apps/asas-platform/src/components/mithaq/form.tsx +1467 -0
  17. package/template/apps/asas-platform/src/components/mithaq/list-columns.tsx +108 -0
  18. package/template/apps/asas-platform/src/components/mithaq/list-filters.tsx +368 -0
  19. package/template/apps/asas-platform/src/components/mithaq/list-pagination.tsx +153 -0
  20. package/template/apps/asas-platform/src/components/mithaq/list-query.ts +432 -0
  21. package/template/apps/asas-platform/src/components/mithaq/list-selection.tsx +74 -0
  22. package/template/apps/asas-platform/src/components/mithaq/list.tsx +865 -0
  23. package/template/apps/asas-platform/src/components/mithaq/nav.tsx +871 -0
  24. package/template/apps/asas-platform/src/components/mithaq/nodes.tsx +1024 -0
  25. package/template/apps/asas-platform/src/components/mithaq/relationship-cell.tsx +127 -0
  26. package/template/apps/asas-platform/src/components/mithaq/relationship-control.tsx +400 -0
  27. package/template/apps/asas-platform/src/components/mithaq/rich-text-nodes.ts +6 -0
  28. package/template/apps/asas-platform/src/components/mithaq/rich-text.tsx +1083 -0
  29. package/template/apps/asas-platform/src/components/mithaq/upload.tsx +686 -0
  30. package/template/apps/asas-platform/src/components/ui/accordion.tsx +74 -0
  31. package/template/apps/asas-platform/src/components/ui/alert-dialog.tsx +185 -0
  32. package/template/apps/asas-platform/src/components/ui/avatar.tsx +106 -0
  33. package/template/apps/asas-platform/src/components/ui/badge.tsx +48 -0
  34. package/template/apps/asas-platform/src/components/ui/breadcrumb.tsx +124 -0
  35. package/template/apps/asas-platform/src/components/ui/button-group.tsx +87 -0
  36. package/template/apps/asas-platform/src/components/ui/button.tsx +55 -0
  37. package/template/apps/asas-platform/src/components/ui/calendar.tsx +223 -0
  38. package/template/apps/asas-platform/src/components/ui/card.tsx +102 -0
  39. package/template/apps/asas-platform/src/components/ui/chart.tsx +371 -0
  40. package/template/apps/asas-platform/src/components/ui/checkbox.tsx +28 -0
  41. package/template/apps/asas-platform/src/components/ui/collapsible.tsx +19 -0
  42. package/template/apps/asas-platform/src/components/ui/combobox.tsx +308 -0
  43. package/template/apps/asas-platform/src/components/ui/dialog.tsx +158 -0
  44. package/template/apps/asas-platform/src/components/ui/direction.tsx +6 -0
  45. package/template/apps/asas-platform/src/components/ui/directional-icon.tsx +20 -0
  46. package/template/apps/asas-platform/src/components/ui/drawer.tsx +216 -0
  47. package/template/apps/asas-platform/src/components/ui/dropdown-menu.tsx +267 -0
  48. package/template/apps/asas-platform/src/components/ui/field.tsx +236 -0
  49. package/template/apps/asas-platform/src/components/ui/input-group.tsx +155 -0
  50. package/template/apps/asas-platform/src/components/ui/input-otp.tsx +84 -0
  51. package/template/apps/asas-platform/src/components/ui/input.tsx +19 -0
  52. package/template/apps/asas-platform/src/components/ui/label.tsx +19 -0
  53. package/template/apps/asas-platform/src/components/ui/popover.tsx +90 -0
  54. package/template/apps/asas-platform/src/components/ui/radio-group.tsx +37 -0
  55. package/template/apps/asas-platform/src/components/ui/resizable.tsx +47 -0
  56. package/template/apps/asas-platform/src/components/ui/scroll-area.tsx +54 -0
  57. package/template/apps/asas-platform/src/components/ui/select.tsx +204 -0
  58. package/template/apps/asas-platform/src/components/ui/separator.tsx +24 -0
  59. package/template/apps/asas-platform/src/components/ui/sheet.tsx +139 -0
  60. package/template/apps/asas-platform/src/components/ui/sidebar.tsx +714 -0
  61. package/template/apps/asas-platform/src/components/ui/skeleton.tsx +13 -0
  62. package/template/apps/asas-platform/src/components/ui/slider.tsx +55 -0
  63. package/template/apps/asas-platform/src/components/ui/spinner.tsx +10 -0
  64. package/template/apps/asas-platform/src/components/ui/switch.tsx +29 -0
  65. package/template/apps/asas-platform/src/components/ui/table.tsx +115 -0
  66. package/template/apps/asas-platform/src/components/ui/tabs.tsx +79 -0
  67. package/template/apps/asas-platform/src/components/ui/textarea.tsx +17 -0
  68. package/template/apps/asas-platform/src/components/ui/toggle-group.tsx +89 -0
  69. package/template/apps/asas-platform/src/components/ui/toggle.tsx +44 -0
  70. package/template/apps/asas-platform/src/components/ui/tooltip.tsx +63 -0
  71. package/template/apps/asas-platform/src/copy.ts +1 -0
  72. package/template/apps/asas-platform/src/hooks/use-mobile.ts +19 -0
  73. package/template/apps/asas-platform/src/lib/utils.ts +1 -0
  74. package/template/apps/asas-platform/src/links.ts +38 -0
  75. package/template/apps/asas-platform/src/locale-switch.tsx +26 -0
  76. package/template/apps/asas-platform/src/redirect.ts +1 -0
  77. package/template/apps/asas-platform/src/request-headers.ts +11 -0
  78. package/template/apps/asas-platform/src/routeTree.gen.ts +181 -0
  79. package/template/apps/asas-platform/src/router.tsx +7 -0
  80. package/template/apps/asas-platform/src/routes/(screens)/platform/files.ts +4 -0
  81. package/template/apps/asas-platform/src/routes/(screens)/platform/screen.json +3609 -0
  82. package/template/apps/asas-platform/src/routes/(screens)/platform/types.ts +145 -0
  83. package/template/apps/asas-platform/src/routes/(screens)/platform.$.tsx +17 -0
  84. package/template/apps/asas-platform/src/routes/(screens)/platform.index.tsx +10 -0
  85. package/template/apps/asas-platform/src/routes/(screens)/platform.tsx +13 -0
  86. package/template/apps/asas-platform/src/routes/__root.tsx +95 -0
  87. package/template/apps/asas-platform/src/routes/api/$.ts +30 -0
  88. package/template/apps/asas-platform/src/routes/auth.sign-in.tsx +72 -0
  89. package/template/apps/asas-platform/src/routes/unauthorized.tsx +122 -0
  90. package/template/apps/asas-platform/src/screen-form.tsx +34 -0
  91. package/template/apps/asas-platform/src/screen-list.tsx +139 -0
  92. package/template/apps/asas-platform/src/screen-names.ts +10 -0
  93. package/template/apps/asas-platform/src/screens.tsx +868 -0
  94. package/template/apps/asas-platform/src/server.ts +20 -0
  95. package/template/apps/asas-platform/src/slide.ts +22 -0
  96. package/template/apps/asas-platform/src/start.ts +42 -0
  97. package/template/apps/asas-platform/src/styles.css +200 -0
  98. package/template/apps/asas-platform/src/theme.ts +2 -0
  99. package/template/apps/asas-platform/tsconfig.json +19 -0
  100. package/template/apps/asas-platform/vite.config.ts +26 -0
  101. package/template/apps/asas-tanstack/components.json +25 -0
  102. package/template/apps/asas-tanstack/gitignore +3 -0
  103. package/template/apps/asas-tanstack/package.json +56 -0
  104. package/template/apps/asas-tanstack/public/favicon.svg +1 -0
  105. package/template/apps/asas-tanstack/src/api.ts +147 -0
  106. package/template/apps/asas-tanstack/src/auth-frame.tsx +150 -0
  107. package/template/apps/asas-tanstack/src/components/mithaq/cells.tsx +112 -0
  108. package/template/apps/asas-tanstack/src/components/mithaq/controls.tsx +650 -0
  109. package/template/apps/asas-tanstack/src/components/mithaq/field-shell.tsx +53 -0
  110. package/template/apps/asas-tanstack/src/components/mithaq/filter-operators.ts +108 -0
  111. package/template/apps/asas-tanstack/src/components/mithaq/form.tsx +1467 -0
  112. package/template/apps/asas-tanstack/src/components/mithaq/list-columns.tsx +108 -0
  113. package/template/apps/asas-tanstack/src/components/mithaq/list-filters.tsx +368 -0
  114. package/template/apps/asas-tanstack/src/components/mithaq/list-pagination.tsx +153 -0
  115. package/template/apps/asas-tanstack/src/components/mithaq/list-query.ts +432 -0
  116. package/template/apps/asas-tanstack/src/components/mithaq/list-selection.tsx +74 -0
  117. package/template/apps/asas-tanstack/src/components/mithaq/list.tsx +865 -0
  118. package/template/apps/asas-tanstack/src/components/mithaq/nav.tsx +871 -0
  119. package/template/apps/asas-tanstack/src/components/mithaq/nodes.tsx +1024 -0
  120. package/template/apps/asas-tanstack/src/components/mithaq/relationship-cell.tsx +127 -0
  121. package/template/apps/asas-tanstack/src/components/mithaq/relationship-control.tsx +400 -0
  122. package/template/apps/asas-tanstack/src/components/mithaq/rich-text-nodes.ts +6 -0
  123. package/template/apps/asas-tanstack/src/components/mithaq/rich-text.tsx +1083 -0
  124. package/template/apps/asas-tanstack/src/components/mithaq/upload.tsx +686 -0
  125. package/template/apps/asas-tanstack/src/components/ui/accordion.tsx +10 -0
  126. package/template/apps/asas-tanstack/src/components/ui/alert-dialog.tsx +173 -0
  127. package/template/apps/asas-tanstack/src/components/ui/avatar.tsx +104 -0
  128. package/template/apps/asas-tanstack/src/components/ui/badge.tsx +48 -0
  129. package/template/apps/asas-tanstack/src/components/ui/breadcrumb.tsx +125 -0
  130. package/template/apps/asas-tanstack/src/components/ui/button-group.tsx +87 -0
  131. package/template/apps/asas-tanstack/src/components/ui/button.tsx +56 -0
  132. package/template/apps/asas-tanstack/src/components/ui/calendar.tsx +223 -0
  133. package/template/apps/asas-tanstack/src/components/ui/card.tsx +94 -0
  134. package/template/apps/asas-tanstack/src/components/ui/chart.tsx +369 -0
  135. package/template/apps/asas-tanstack/src/components/ui/checkbox.tsx +27 -0
  136. package/template/apps/asas-tanstack/src/components/ui/collapsible.tsx +19 -0
  137. package/template/apps/asas-tanstack/src/components/ui/combobox.tsx +300 -0
  138. package/template/apps/asas-tanstack/src/components/ui/dialog.tsx +149 -0
  139. package/template/apps/asas-tanstack/src/components/ui/direction.tsx +5 -0
  140. package/template/apps/asas-tanstack/src/components/ui/directional-icon.tsx +20 -0
  141. package/template/apps/asas-tanstack/src/components/ui/drawer.tsx +215 -0
  142. package/template/apps/asas-tanstack/src/components/ui/dropdown-menu.tsx +267 -0
  143. package/template/apps/asas-tanstack/src/components/ui/field.tsx +225 -0
  144. package/template/apps/asas-tanstack/src/components/ui/input-group.tsx +147 -0
  145. package/template/apps/asas-tanstack/src/components/ui/input-otp.tsx +20 -0
  146. package/template/apps/asas-tanstack/src/components/ui/input.tsx +20 -0
  147. package/template/apps/asas-tanstack/src/components/ui/label.tsx +18 -0
  148. package/template/apps/asas-tanstack/src/components/ui/popover.tsx +50 -0
  149. package/template/apps/asas-tanstack/src/components/ui/radio-group.tsx +10 -0
  150. package/template/apps/asas-tanstack/src/components/ui/resizable.tsx +47 -0
  151. package/template/apps/asas-tanstack/src/components/ui/scroll-area.tsx +52 -0
  152. package/template/apps/asas-tanstack/src/components/ui/select.tsx +190 -0
  153. package/template/apps/asas-tanstack/src/components/ui/separator.tsx +23 -0
  154. package/template/apps/asas-tanstack/src/components/ui/sheet.tsx +127 -0
  155. package/template/apps/asas-tanstack/src/components/ui/sidebar.tsx +716 -0
  156. package/template/apps/asas-tanstack/src/components/ui/skeleton.tsx +13 -0
  157. package/template/apps/asas-tanstack/src/components/ui/slider.tsx +13 -0
  158. package/template/apps/asas-tanstack/src/components/ui/spinner.tsx +11 -0
  159. package/template/apps/asas-tanstack/src/components/ui/switch.tsx +8 -0
  160. package/template/apps/asas-tanstack/src/components/ui/table.tsx +119 -0
  161. package/template/apps/asas-tanstack/src/components/ui/tabs.tsx +80 -0
  162. package/template/apps/asas-tanstack/src/components/ui/textarea.tsx +18 -0
  163. package/template/apps/asas-tanstack/src/components/ui/toggle-group.tsx +8 -0
  164. package/template/apps/asas-tanstack/src/components/ui/toggle.tsx +44 -0
  165. package/template/apps/asas-tanstack/src/components/ui/tooltip.tsx +68 -0
  166. package/template/apps/asas-tanstack/src/copy.ts +870 -0
  167. package/template/apps/asas-tanstack/src/hooks/use-mobile.ts +19 -0
  168. package/template/apps/asas-tanstack/src/lib/utils.ts +6 -0
  169. package/template/apps/asas-tanstack/src/links.ts +38 -0
  170. package/template/apps/asas-tanstack/src/locale-switch.tsx +26 -0
  171. package/template/apps/asas-tanstack/src/quiet-abort.ts +25 -0
  172. package/template/apps/asas-tanstack/src/redirect.ts +20 -0
  173. package/template/apps/asas-tanstack/src/request-headers.ts +11 -0
  174. package/template/apps/asas-tanstack/src/routeTree.gen.ts +382 -0
  175. package/template/apps/asas-tanstack/src/router.tsx +7 -0
  176. package/template/apps/asas-tanstack/src/routes/(screens)/dashboard/files.ts +4 -0
  177. package/template/apps/asas-tanstack/src/routes/(screens)/dashboard/screen.json +3883 -0
  178. package/template/apps/asas-tanstack/src/routes/(screens)/dashboard/types.ts +158 -0
  179. package/template/apps/asas-tanstack/src/routes/(screens)/dashboard.$.tsx +17 -0
  180. package/template/apps/asas-tanstack/src/routes/(screens)/dashboard.index.tsx +10 -0
  181. package/template/apps/asas-tanstack/src/routes/(screens)/dashboard.tsx +13 -0
  182. package/template/apps/asas-tanstack/src/routes/(screens)/portal/files.ts +4 -0
  183. package/template/apps/asas-tanstack/src/routes/(screens)/portal/screen.json +1800 -0
  184. package/template/apps/asas-tanstack/src/routes/(screens)/portal/types.ts +92 -0
  185. package/template/apps/asas-tanstack/src/routes/(screens)/portal.$.tsx +17 -0
  186. package/template/apps/asas-tanstack/src/routes/(screens)/portal.index.tsx +10 -0
  187. package/template/apps/asas-tanstack/src/routes/(screens)/portal.tsx +13 -0
  188. package/template/apps/asas-tanstack/src/routes/__root.tsx +99 -0
  189. package/template/apps/asas-tanstack/src/routes/api/$.ts +11 -0
  190. package/template/apps/asas-tanstack/src/routes/auth.accept-invitation.tsx +101 -0
  191. package/template/apps/asas-tanstack/src/routes/auth.forgot-password.tsx +94 -0
  192. package/template/apps/asas-tanstack/src/routes/auth.handoff.ts +39 -0
  193. package/template/apps/asas-tanstack/src/routes/auth.reset-password.tsx +109 -0
  194. package/template/apps/asas-tanstack/src/routes/auth.sign-in.tsx +86 -0
  195. package/template/apps/asas-tanstack/src/routes/auth.sign-up.tsx +122 -0
  196. package/template/apps/asas-tanstack/src/routes/index.tsx +142 -0
  197. package/template/apps/asas-tanstack/src/routes/unauthorized.tsx +122 -0
  198. package/template/apps/asas-tanstack/src/screen-form.tsx +34 -0
  199. package/template/apps/asas-tanstack/src/screen-list.tsx +139 -0
  200. package/template/apps/asas-tanstack/src/screen-names.ts +10 -0
  201. package/template/apps/asas-tanstack/src/screens.tsx +868 -0
  202. package/template/apps/asas-tanstack/src/server.ts +16 -0
  203. package/template/apps/asas-tanstack/src/slide.ts +22 -0
  204. package/template/apps/asas-tanstack/src/start.ts +57 -0
  205. package/template/apps/asas-tanstack/src/styles.css +159 -0
  206. package/template/apps/asas-tanstack/src/theme.ts +5 -0
  207. package/template/apps/asas-tanstack/tsconfig.json +19 -0
  208. package/template/apps/asas-tanstack/vite.config.ts +28 -0
  209. package/template/package.json +16 -0
  210. package/template/templates/asas/.env.example +16 -0
  211. package/template/templates/asas/components.json +22 -0
  212. package/template/templates/asas/mithaq.hints.json +25 -0
  213. package/template/templates/asas/package.json +38 -0
  214. package/template/templates/asas/src/asas.ts +93 -0
  215. package/template/templates/asas/src/audit-log/audit-log.ts +187 -0
  216. package/template/templates/asas/src/audit-log/sink.ts +89 -0
  217. package/template/templates/asas/src/audit-log/ui/activity.tsx +243 -0
  218. package/template/templates/asas/src/courses/courses.ts +612 -0
  219. package/template/templates/asas/src/courses/ui/archive-button.tsx +25 -0
  220. package/template/templates/asas/src/courses/ui/fee-cell.tsx +19 -0
  221. package/template/templates/asas/src/courses/ui/no-courses-on-offer.tsx +11 -0
  222. package/template/templates/asas/src/courses/ui/no-courses.tsx +13 -0
  223. package/template/templates/asas/src/courses/ui/on-offer.ts +6 -0
  224. package/template/templates/asas/src/courses/ui/status-cell.tsx +31 -0
  225. package/template/templates/asas/src/enrollments/enrollments.ts +137 -0
  226. package/template/templates/asas/src/enrollments/ui/session-cell.tsx +65 -0
  227. package/template/templates/asas/src/kayan/auth/user/account.access.ts +8 -0
  228. package/template/templates/asas/src/kayan/auth/user/account.ts +31 -0
  229. package/template/templates/asas/src/kayan/auth/user/index.ts +18 -0
  230. package/template/templates/asas/src/kayan/auth/user/invitation.access.ts +4 -0
  231. package/template/templates/asas/src/kayan/auth/user/invitation.ts +27 -0
  232. package/template/templates/asas/src/kayan/auth/user/member.access.ts +10 -0
  233. package/template/templates/asas/src/kayan/auth/user/member.screens.ts +37 -0
  234. package/template/templates/asas/src/kayan/auth/user/member.ts +25 -0
  235. package/template/templates/asas/src/kayan/auth/user/organization.access.ts +20 -0
  236. package/template/templates/asas/src/kayan/auth/user/organization.screens.ts +37 -0
  237. package/template/templates/asas/src/kayan/auth/user/organization.ts +24 -0
  238. package/template/templates/asas/src/kayan/auth/user/organizationRole.access.ts +8 -0
  239. package/template/templates/asas/src/kayan/auth/user/organizationRole.ts +25 -0
  240. package/template/templates/asas/src/kayan/auth/user/session.access.ts +8 -0
  241. package/template/templates/asas/src/kayan/auth/user/session.ts +28 -0
  242. package/template/templates/asas/src/kayan/auth/user/user.access.ts +29 -0
  243. package/template/templates/asas/src/kayan/auth/user/user.screens.ts +45 -0
  244. package/template/templates/asas/src/kayan/auth/user/user.ts +31 -0
  245. package/template/templates/asas/src/kayan/auth/user/verification.access.ts +8 -0
  246. package/template/templates/asas/src/kayan/auth/user/verification.ts +23 -0
  247. package/template/templates/asas/src/local-users/local-users.ts +143 -0
  248. package/template/templates/asas/src/media/media.ts +137 -0
  249. package/template/templates/asas/src/media/ui/preview.tsx +143 -0
  250. package/template/templates/asas/src/member-roles/member-roles.ts +207 -0
  251. package/template/templates/asas/src/messages/account.json +106 -0
  252. package/template/templates/asas/src/messages/auditLog.json +186 -0
  253. package/template/templates/asas/src/messages/courses.json +270 -0
  254. package/template/templates/asas/src/messages/enrollments.json +42 -0
  255. package/template/templates/asas/src/messages/invitation.json +66 -0
  256. package/template/templates/asas/src/messages/localUsers.json +42 -0
  257. package/template/templates/asas/src/messages/media.json +66 -0
  258. package/template/templates/asas/src/messages/member.json +42 -0
  259. package/template/templates/asas/src/messages/memberRoles.json +42 -0
  260. package/template/templates/asas/src/messages/mithaq.json +170 -0
  261. package/template/templates/asas/src/messages/organization.json +50 -0
  262. package/template/templates/asas/src/messages/organizationRole.json +50 -0
  263. package/template/templates/asas/src/messages/roles.json +58 -0
  264. package/template/templates/asas/src/messages/session.json +82 -0
  265. package/template/templates/asas/src/messages/sessions.json +106 -0
  266. package/template/templates/asas/src/messages/settings.json +66 -0
  267. package/template/templates/asas/src/messages/tags.json +38 -0
  268. package/template/templates/asas/src/messages/user.json +90 -0
  269. package/template/templates/asas/src/messages/verification.json +50 -0
  270. package/template/templates/asas/src/migrations/20260920080701_parched_tombstone/migration.sql +177 -0
  271. package/template/templates/asas/src/migrations/20260920080701_parched_tombstone/snapshot.json +2169 -0
  272. package/template/templates/asas/src/migrations/20260920230505_zippy_ben_urich/migration.sql +1 -0
  273. package/template/templates/asas/src/migrations/20260920230505_zippy_ben_urich/snapshot.json +2182 -0
  274. package/template/templates/asas/src/migrations/20260920231219_slim_retro_girl/migration.sql +20 -0
  275. package/template/templates/asas/src/migrations/20260920231219_slim_retro_girl/snapshot.json +2409 -0
  276. package/template/templates/asas/src/migrations/20260922082945_military_ironclad/migration.sql +15 -0
  277. package/template/templates/asas/src/migrations/20260922082945_military_ironclad/snapshot.json +2627 -0
  278. package/template/templates/asas/src/migrations/20260922112630_bitter_chat/migration.sql +5 -0
  279. package/template/templates/asas/src/migrations/20260922112630_bitter_chat/snapshot.json +2691 -0
  280. package/template/templates/asas/src/migrations/20260923235915_foamy_rachel_grey/migration.sql +8 -0
  281. package/template/templates/asas/src/migrations/20260923235915_foamy_rachel_grey/snapshot.json +2795 -0
  282. package/template/templates/asas/src/migrations/20260926145709_clean_the_initiative/migration.sql +3 -0
  283. package/template/templates/asas/src/migrations/20260926145709_clean_the_initiative/snapshot.json +2834 -0
  284. package/template/templates/asas/src/migrations/20260927212525_bent_prowler/migration.sql +9 -0
  285. package/template/templates/asas/src/migrations/20260927212525_bent_prowler/snapshot.json +2870 -0
  286. package/template/templates/asas/src/migrations/20260927223441_tranquil_bromley/migration.sql +1 -0
  287. package/template/templates/asas/src/migrations/20260927223441_tranquil_bromley/snapshot.json +2881 -0
  288. package/template/templates/asas/src/migrations/20260928030047_outgoing_wraith/migration.sql +15 -0
  289. package/template/templates/asas/src/migrations/20260928030047_outgoing_wraith/snapshot.json +3073 -0
  290. package/template/templates/asas/src/migrations/20260929024407_grey_morlun/migration.sql +21 -0
  291. package/template/templates/asas/src/migrations/20260929024407_grey_morlun/snapshot.json +3098 -0
  292. package/template/templates/asas/src/migrations/20260929130530_bored_jackal/migration.sql +21 -0
  293. package/template/templates/asas/src/migrations/20260929130530_bored_jackal/snapshot.json +3124 -0
  294. package/template/templates/asas/src/migrations/20260930102924_material_newton_destine/migration.sql +32 -0
  295. package/template/templates/asas/src/migrations/20260930102924_material_newton_destine/snapshot.json +3324 -0
  296. package/template/templates/asas/src/migrations/20261003022353_clumsy_taskmaster/migration.sql +2 -0
  297. package/template/templates/asas/src/migrations/20261003022353_clumsy_taskmaster/snapshot.json +3350 -0
  298. package/template/templates/asas/src/migrations/20261003143249_premium_red_shift/migration.sql +21 -0
  299. package/template/templates/asas/src/migrations/20261003143249_premium_red_shift/snapshot.json +3635 -0
  300. package/template/templates/asas/src/migrations/20261008215349_square_norrin_radd/migration.sql +8 -0
  301. package/template/templates/asas/src/migrations/20261008215349_square_norrin_radd/snapshot.json +3635 -0
  302. package/template/templates/asas/src/migrations/20261008230204_many_scarecrow/migration.sql +18 -0
  303. package/template/templates/asas/src/migrations/20261008230204_many_scarecrow/snapshot.json +3635 -0
  304. package/template/templates/asas/src/migrations/20261010005521_elite_giant_girl/migration.sql +18 -0
  305. package/template/templates/asas/src/migrations/20261010005521_elite_giant_girl/snapshot.json +3635 -0
  306. package/template/templates/asas/src/migrations/20261010120822_needy_thunderbolt/migration.sql +11 -0
  307. package/template/templates/asas/src/migrations/20261010120822_needy_thunderbolt/snapshot.json +3667 -0
  308. package/template/templates/asas/src/migrations/20261012000752_organization_ownership/migration.sql +48 -0
  309. package/template/templates/asas/src/migrations/20261012000752_organization_ownership/snapshot.json +3891 -0
  310. package/template/templates/asas/src/migrations/drizzle.config.ts +11 -0
  311. package/template/templates/asas/src/migrations/schema.ts +29 -0
  312. package/template/templates/asas/src/mithaq.ts +406 -0
  313. package/template/templates/asas/src/pages.ts +74 -0
  314. package/template/templates/asas/src/platform-http.ts +96 -0
  315. package/template/templates/asas/src/rich-text-nodes.ts +11 -0
  316. package/template/templates/asas/src/roles/grants.ts +47 -0
  317. package/template/templates/asas/src/roles/roles.ts +184 -0
  318. package/template/templates/asas/src/roles/ui/role-form.tsx +226 -0
  319. package/template/templates/asas/src/roles/ui/roles.tsx +166 -0
  320. package/template/templates/asas/src/roles.ts +16 -0
  321. package/template/templates/asas/src/seed.ts +325 -0
  322. package/template/templates/asas/src/sessions/sessions.ts +155 -0
  323. package/template/templates/asas/src/settings/settings.ts +69 -0
  324. package/template/templates/asas/src/statements.ts +11 -0
  325. package/template/templates/asas/src/steps/expected-updated-at.ts +41 -0
  326. package/template/templates/asas/src/storage/defaults.ts +156 -0
  327. package/template/templates/asas/src/storage/index.ts +95 -0
  328. package/template/templates/asas/src/storage/local.ts +143 -0
  329. package/template/templates/asas/src/storage/r2.ts +5 -0
  330. package/template/templates/asas/src/storage/s3.ts +91 -0
  331. package/template/templates/asas/src/storage/uploadthing.ts +59 -0
  332. package/template/templates/asas/src/tags/tags.ts +80 -0
  333. package/template/templates/asas/src/tenant-access.ts +221 -0
  334. package/template/templates/asas/src/tenant-roles.ts +262 -0
  335. package/template/templates/asas/src/ui/app-shell.tsx +260 -0
  336. package/template/templates/asas/src/ui/kpi-card.tsx +25 -0
  337. package/template/templates/asas/src/ui/record-page.tsx +50 -0
  338. package/template/templates/asas/src/ui/rich-text-nodes.tsx +15 -0
  339. package/template/templates/asas/src/ui/screen-nav.tsx +28 -0
  340. package/template/templates/asas/src/ui/session-labels.tsx +36 -0
  341. package/template/templates/asas/src/ui/table-page.tsx +9 -0
  342. package/template/templates/asas/src/ui/top-shell.tsx +60 -0
  343. package/template/templates/asas/src/ui-dashboard/dashboard.tsx +294 -0
  344. package/template/templates/asas/src/ui-dashboard/members.tsx +630 -0
  345. package/template/templates/asas/src/ui-dashboard/theme-provider.tsx +10 -0
  346. package/template/templates/asas/src/ui-dashboard/versions.tsx +432 -0
  347. package/template/templates/asas/src/ui-platform/home.tsx +63 -0
  348. package/template/templates/asas/src/ui-platform/organization-actions.tsx +114 -0
  349. package/template/templates/asas/src/ui-platform/record-page.tsx +30 -0
  350. package/template/templates/asas/src/ui-platform/role-cells.tsx +52 -0
  351. package/template/templates/asas/src/ui-platform/user-actions.tsx +251 -0
  352. package/template/templates/asas/src/ui-portal/home.tsx +77 -0
  353. package/template/templates/asas/src/ui-portal/page.tsx +11 -0
  354. package/template/templates/auth/package.json +14 -0
  355. package/template/templates/auth/src/index.ts +690 -0
  356. package/template/templates/auth/src/platform-roles.ts +87 -0
  357. package/README.md +0 -3
@@ -0,0 +1,19 @@
1
+ import * as React from "react"
2
+
3
+ const MOBILE_BREAKPOINT = 768
4
+
5
+ export function useIsMobile() {
6
+ const [isMobile, setIsMobile] = React.useState<boolean | undefined>(undefined)
7
+
8
+ React.useEffect(() => {
9
+ const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`)
10
+ const onChange = () => {
11
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)
12
+ }
13
+ mql.addEventListener("change", onChange)
14
+ setIsMobile(window.innerWidth < MOBILE_BREAKPOINT)
15
+ return () => mql.removeEventListener("change", onChange)
16
+ }, [])
17
+
18
+ return !!isMobile
19
+ }
@@ -0,0 +1,6 @@
1
+ import { clsx, type ClassValue } from "clsx"
2
+ import { twMerge } from "tailwind-merge"
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs))
6
+ }
@@ -0,0 +1,38 @@
1
+ /**
2
+ * The path a click on a plain `<a href>` is routed to inside the screen, or
3
+ * `undefined` for a click the browser keeps: a modified or handled click, another
4
+ * target, a download, another origin, or a path outside the screen's `base`.
5
+ */
6
+ export const routedHref = ({
7
+ event,
8
+ origin,
9
+ base,
10
+ }: {
11
+ event: Pick<MouseEvent, 'button' | 'metaKey' | 'altKey' | 'ctrlKey' | 'shiftKey' | 'defaultPrevented' | 'target'>
12
+ origin: string
13
+ base: string
14
+ }): string | undefined => {
15
+ if (event.defaultPrevented || event.button !== 0 || event.metaKey || event.altKey || event.ctrlKey || event.shiftKey) return undefined
16
+ const anchor = (event.target as Element | null)?.closest?.('a[href]')
17
+ const target = anchor?.getAttribute('target')
18
+ if (!anchor || (target && target !== '_self') || anchor.hasAttribute('download')) return undefined
19
+ // The browser's own resolution against the current page: against the origin
20
+ // alone, `href="edit"` on `/dashboard/courses/` would read as `/edit`.
21
+ const url = new URL((anchor as HTMLAnchorElement).href)
22
+ if (url.origin !== origin || (url.pathname !== base && !url.pathname.startsWith(`${base}/`))) return undefined
23
+ return `${url.pathname}${url.search}${url.hash}`
24
+ }
25
+
26
+ /**
27
+ * Where a list asked for a page past its last is sent instead: the same URL at
28
+ * the last page, or with no page where the last is the first. `undefined` for a
29
+ * page in range.
30
+ */
31
+ export const clampedHref = ({ href, page, totalPages }: { href: string; page: number; totalPages: number }): string | undefined => {
32
+ if (page <= Math.max(1, totalPages)) return undefined
33
+ const url = new URL(href, 'http://local')
34
+ if (totalPages > 1) url.searchParams.set('page', String(totalPages))
35
+ else url.searchParams.delete('page')
36
+ return `${url.pathname}${url.search}${url.hash}`
37
+ }
38
+ // mithaq-admin b06d8d335d306c07556f8f2b81fba20ba7ded198 4754cbac64eeac528e7e037173ad56ffa8d07df3e526e1191bbe3be400db97a5
@@ -0,0 +1,26 @@
1
+ import { Button } from '@/components/ui/button'
2
+ import { localeEntries } from './components/mithaq/nav.tsx'
3
+ import { locales, switchLocale, type Locale } from './copy.ts'
4
+
5
+ /** The language switch for pages without a form: `switchLocale` reloads without asking, so a page with a form must use the user menu, which asks first. */
6
+ export function LocaleSwitch({ locale }: { locale: Locale }) {
7
+ return (
8
+ <div className="flex items-center gap-1">
9
+ {localeEntries(locales, locale).map((entry) => (
10
+ <Button
11
+ key={entry.locale}
12
+ type="button"
13
+ variant={entry.active ? 'secondary' : 'ghost'}
14
+ size="xs"
15
+ aria-current={entry.active}
16
+ aria-label={entry.label}
17
+ onClick={() => switchLocale({ to: entry.locale })}
18
+ >
19
+ <span className="hidden sm:inline">{entry.label}</span>
20
+ <span className="sm:hidden">{entry.locale.toUpperCase()}</span>
21
+ </Button>
22
+ ))}
23
+ </div>
24
+ )
25
+ }
26
+ // mithaq-admin b06d8d335d306c07556f8f2b81fba20ba7ded198 43c6d309a5bae4f6af3cdcf4c741106b3a16129ac77d142f1e4254594f5b8a54
@@ -0,0 +1,25 @@
1
+ /**
2
+ * h3 knows its own error by the name `HTTPError` alone. 499 is the status nginx logs for a client
3
+ * that closed its request.
4
+ */
5
+ const gone = () =>
6
+ Object.assign(new Error('The client closed the request.'), {
7
+ name: 'HTTPError',
8
+ status: 499,
9
+ statusText: 'Client Closed Request',
10
+ toJSON: () => ({ status: 499, message: 'The client closed the request.' }),
11
+ })
12
+
13
+ /**
14
+ * The request handed to TanStack Start, whose signal aborts with `gone` when the client's does.
15
+ * Start throws the signal's reason on abort and h3 logs any error that is not its own as an
16
+ * unhandled 500, so a closed tab would be logged as a fault. The request is rebuilt from its parts
17
+ * because the Node server's srvx request is a class `new Request(request)` cannot read.
18
+ */
19
+ export const withQuietAbort = (request: Request): Request => {
20
+ const controller = new AbortController()
21
+ if (request.signal.aborted) controller.abort(gone())
22
+ else request.signal.addEventListener('abort', () => controller.abort(gone()), { once: true })
23
+ const { method, headers, body } = request
24
+ return new Request(request.url, { method, headers, body: method === 'GET' || method === 'HEAD' ? null : body, signal: controller.signal, duplex: 'half' } as RequestInit)
25
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Where signing in lands: only a path of this origin, so a link cannot turn the sign-in page
3
+ * into a jump to another site; anything else lands on `home`.
4
+ *
5
+ * The origin is the URL parser's answer rather than a prefix test's, so `https://elsewhere`,
6
+ * `//elsewhere` and `javascript:` are refused however they are spelled. A backslash, a C0 control
7
+ * and DEL are refused before the parse, since the parser rewrites or strips them before reading
8
+ * the host. They are written as escapes so git and grep keep reading this file as text.
9
+ */
10
+ const base = 'https://mithaq.invalid'
11
+
12
+ export const wanted = ({ asked, home }: { asked: string | undefined; home: string }): string => {
13
+ if (asked === undefined || !asked.startsWith('/') || /[\\\x00-\x1f\x7f]/.test(asked)) return home
14
+ try {
15
+ return new URL(asked, base).origin === base ? asked : home
16
+ } catch {
17
+ // `new URL('//', base)` throws rather than resolving.
18
+ return home
19
+ }
20
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The headers a page's server-side `request` call sends: the session's, with
3
+ * the loader's own layered over them. The session's cookie always wins, so a
4
+ * loader's headers cannot act as another actor.
5
+ */
6
+ export const mergedHeaders = (session: Headers, own?: HeadersInit): Headers => {
7
+ const headers = new Headers(session)
8
+ if (own) for (const [key, value] of new Headers(own)) if (key !== 'cookie') headers.set(key, value)
9
+ return headers
10
+ }
11
+ // mithaq-admin b06d8d335d306c07556f8f2b81fba20ba7ded198 2969a3dafbf201d6eb6074ecda0e8f17e341cbd1ca176100350844e74ec23623
@@ -0,0 +1,382 @@
1
+ /* eslint-disable */
2
+
3
+ // @ts-nocheck
4
+
5
+ // noinspection JSUnusedGlobalSymbols
6
+
7
+ // This file was automatically generated by TanStack Router.
8
+ // You should NOT make any changes in this file as it will be overwritten.
9
+ // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
10
+
11
+ import { Route as rootRouteImport } from './routes/__root'
12
+ import { Route as IndexRouteImport } from './routes/index'
13
+ import { Route as UnauthorizedRouteImport } from './routes/unauthorized'
14
+ import { Route as screensDashboardRouteImport } from './routes/(screens)/dashboard'
15
+ import { Route as screensPortalRouteImport } from './routes/(screens)/portal'
16
+ import { Route as ApiSplatRouteImport } from './routes/api/$'
17
+ import { Route as AuthAcceptInvitationRouteImport } from './routes/auth.accept-invitation'
18
+ import { Route as AuthForgotPasswordRouteImport } from './routes/auth.forgot-password'
19
+ import { Route as AuthHandoffRouteImport } from './routes/auth.handoff'
20
+ import { Route as AuthResetPasswordRouteImport } from './routes/auth.reset-password'
21
+ import { Route as AuthSignInRouteImport } from './routes/auth.sign-in'
22
+ import { Route as AuthSignUpRouteImport } from './routes/auth.sign-up'
23
+ import { Route as screensDashboardIndexRouteImport } from './routes/(screens)/dashboard.index'
24
+ import { Route as screensDashboardSplatRouteImport } from './routes/(screens)/dashboard.$'
25
+ import { Route as screensPortalIndexRouteImport } from './routes/(screens)/portal.index'
26
+ import { Route as screensPortalSplatRouteImport } from './routes/(screens)/portal.$'
27
+
28
+ const IndexRoute = IndexRouteImport.update({
29
+ id: '/',
30
+ path: '/',
31
+ getParentRoute: () => rootRouteImport,
32
+ } as any)
33
+ const UnauthorizedRoute = UnauthorizedRouteImport.update({
34
+ id: '/unauthorized',
35
+ path: '/unauthorized',
36
+ getParentRoute: () => rootRouteImport,
37
+ } as any)
38
+ const screensDashboardRoute = screensDashboardRouteImport.update({
39
+ id: '/(screens)/dashboard',
40
+ path: '/dashboard',
41
+ getParentRoute: () => rootRouteImport,
42
+ } as any)
43
+ const screensPortalRoute = screensPortalRouteImport.update({
44
+ id: '/(screens)/portal',
45
+ path: '/portal',
46
+ getParentRoute: () => rootRouteImport,
47
+ } as any)
48
+ const ApiSplatRoute = ApiSplatRouteImport.update({
49
+ id: '/api/$',
50
+ path: '/api/$',
51
+ getParentRoute: () => rootRouteImport,
52
+ } as any)
53
+ const AuthAcceptInvitationRoute = AuthAcceptInvitationRouteImport.update({
54
+ id: '/auth/accept-invitation',
55
+ path: '/auth/accept-invitation',
56
+ getParentRoute: () => rootRouteImport,
57
+ } as any)
58
+ const AuthForgotPasswordRoute = AuthForgotPasswordRouteImport.update({
59
+ id: '/auth/forgot-password',
60
+ path: '/auth/forgot-password',
61
+ getParentRoute: () => rootRouteImport,
62
+ } as any)
63
+ const AuthHandoffRoute = AuthHandoffRouteImport.update({
64
+ id: '/auth/handoff',
65
+ path: '/auth/handoff',
66
+ getParentRoute: () => rootRouteImport,
67
+ } as any)
68
+ const AuthResetPasswordRoute = AuthResetPasswordRouteImport.update({
69
+ id: '/auth/reset-password',
70
+ path: '/auth/reset-password',
71
+ getParentRoute: () => rootRouteImport,
72
+ } as any)
73
+ const AuthSignInRoute = AuthSignInRouteImport.update({
74
+ id: '/auth/sign-in',
75
+ path: '/auth/sign-in',
76
+ getParentRoute: () => rootRouteImport,
77
+ } as any)
78
+ const AuthSignUpRoute = AuthSignUpRouteImport.update({
79
+ id: '/auth/sign-up',
80
+ path: '/auth/sign-up',
81
+ getParentRoute: () => rootRouteImport,
82
+ } as any)
83
+ const screensDashboardIndexRoute = screensDashboardIndexRouteImport.update({
84
+ id: '/',
85
+ path: '/',
86
+ getParentRoute: () => screensDashboardRoute,
87
+ } as any)
88
+ const screensDashboardSplatRoute = screensDashboardSplatRouteImport.update({
89
+ id: '/$',
90
+ path: '/$',
91
+ getParentRoute: () => screensDashboardRoute,
92
+ } as any)
93
+ const screensPortalIndexRoute = screensPortalIndexRouteImport.update({
94
+ id: '/',
95
+ path: '/',
96
+ getParentRoute: () => screensPortalRoute,
97
+ } as any)
98
+ const screensPortalSplatRoute = screensPortalSplatRouteImport.update({
99
+ id: '/$',
100
+ path: '/$',
101
+ getParentRoute: () => screensPortalRoute,
102
+ } as any)
103
+
104
+ export interface FileRoutesByFullPath {
105
+ '/': typeof IndexRoute
106
+ '/unauthorized': typeof UnauthorizedRoute
107
+ '/dashboard': typeof screensDashboardRouteWithChildren
108
+ '/portal': typeof screensPortalRouteWithChildren
109
+ '/api/$': typeof ApiSplatRoute
110
+ '/auth/accept-invitation': typeof AuthAcceptInvitationRoute
111
+ '/auth/forgot-password': typeof AuthForgotPasswordRoute
112
+ '/auth/handoff': typeof AuthHandoffRoute
113
+ '/auth/reset-password': typeof AuthResetPasswordRoute
114
+ '/auth/sign-in': typeof AuthSignInRoute
115
+ '/auth/sign-up': typeof AuthSignUpRoute
116
+ '/dashboard/$': typeof screensDashboardSplatRoute
117
+ '/portal/$': typeof screensPortalSplatRoute
118
+ '/dashboard/': typeof screensDashboardIndexRoute
119
+ '/portal/': typeof screensPortalIndexRoute
120
+ }
121
+ export interface FileRoutesByTo {
122
+ '/': typeof IndexRoute
123
+ '/unauthorized': typeof UnauthorizedRoute
124
+ '/api/$': typeof ApiSplatRoute
125
+ '/auth/accept-invitation': typeof AuthAcceptInvitationRoute
126
+ '/auth/forgot-password': typeof AuthForgotPasswordRoute
127
+ '/auth/handoff': typeof AuthHandoffRoute
128
+ '/auth/reset-password': typeof AuthResetPasswordRoute
129
+ '/auth/sign-in': typeof AuthSignInRoute
130
+ '/auth/sign-up': typeof AuthSignUpRoute
131
+ '/dashboard/$': typeof screensDashboardSplatRoute
132
+ '/portal/$': typeof screensPortalSplatRoute
133
+ '/dashboard': typeof screensDashboardIndexRoute
134
+ '/portal': typeof screensPortalIndexRoute
135
+ }
136
+ export interface FileRoutesById {
137
+ __root__: typeof rootRouteImport
138
+ '/': typeof IndexRoute
139
+ '/unauthorized': typeof UnauthorizedRoute
140
+ '/(screens)/dashboard': typeof screensDashboardRouteWithChildren
141
+ '/(screens)/portal': typeof screensPortalRouteWithChildren
142
+ '/api/$': typeof ApiSplatRoute
143
+ '/auth/accept-invitation': typeof AuthAcceptInvitationRoute
144
+ '/auth/forgot-password': typeof AuthForgotPasswordRoute
145
+ '/auth/handoff': typeof AuthHandoffRoute
146
+ '/auth/reset-password': typeof AuthResetPasswordRoute
147
+ '/auth/sign-in': typeof AuthSignInRoute
148
+ '/auth/sign-up': typeof AuthSignUpRoute
149
+ '/(screens)/dashboard/$': typeof screensDashboardSplatRoute
150
+ '/(screens)/portal/$': typeof screensPortalSplatRoute
151
+ '/(screens)/dashboard/': typeof screensDashboardIndexRoute
152
+ '/(screens)/portal/': typeof screensPortalIndexRoute
153
+ }
154
+ export interface FileRouteTypes {
155
+ fileRoutesByFullPath: FileRoutesByFullPath
156
+ fullPaths:
157
+ | '/'
158
+ | '/unauthorized'
159
+ | '/dashboard'
160
+ | '/portal'
161
+ | '/api/$'
162
+ | '/auth/accept-invitation'
163
+ | '/auth/forgot-password'
164
+ | '/auth/handoff'
165
+ | '/auth/reset-password'
166
+ | '/auth/sign-in'
167
+ | '/auth/sign-up'
168
+ | '/dashboard/$'
169
+ | '/portal/$'
170
+ | '/dashboard/'
171
+ | '/portal/'
172
+ fileRoutesByTo: FileRoutesByTo
173
+ to:
174
+ | '/'
175
+ | '/unauthorized'
176
+ | '/api/$'
177
+ | '/auth/accept-invitation'
178
+ | '/auth/forgot-password'
179
+ | '/auth/handoff'
180
+ | '/auth/reset-password'
181
+ | '/auth/sign-in'
182
+ | '/auth/sign-up'
183
+ | '/dashboard/$'
184
+ | '/portal/$'
185
+ | '/dashboard'
186
+ | '/portal'
187
+ id:
188
+ | '__root__'
189
+ | '/'
190
+ | '/unauthorized'
191
+ | '/(screens)/dashboard'
192
+ | '/(screens)/portal'
193
+ | '/api/$'
194
+ | '/auth/accept-invitation'
195
+ | '/auth/forgot-password'
196
+ | '/auth/handoff'
197
+ | '/auth/reset-password'
198
+ | '/auth/sign-in'
199
+ | '/auth/sign-up'
200
+ | '/(screens)/dashboard/$'
201
+ | '/(screens)/portal/$'
202
+ | '/(screens)/dashboard/'
203
+ | '/(screens)/portal/'
204
+ fileRoutesById: FileRoutesById
205
+ }
206
+ export interface RootRouteChildren {
207
+ IndexRoute: typeof IndexRoute
208
+ UnauthorizedRoute: typeof UnauthorizedRoute
209
+ screensDashboardRoute: typeof screensDashboardRouteWithChildren
210
+ screensPortalRoute: typeof screensPortalRouteWithChildren
211
+ ApiSplatRoute: typeof ApiSplatRoute
212
+ AuthAcceptInvitationRoute: typeof AuthAcceptInvitationRoute
213
+ AuthForgotPasswordRoute: typeof AuthForgotPasswordRoute
214
+ AuthHandoffRoute: typeof AuthHandoffRoute
215
+ AuthResetPasswordRoute: typeof AuthResetPasswordRoute
216
+ AuthSignInRoute: typeof AuthSignInRoute
217
+ AuthSignUpRoute: typeof AuthSignUpRoute
218
+ }
219
+
220
+ declare module '@tanstack/react-router' {
221
+ interface FileRoutesByPath {
222
+ '/': {
223
+ id: '/'
224
+ path: '/'
225
+ fullPath: '/'
226
+ preLoaderRoute: typeof IndexRouteImport
227
+ parentRoute: typeof rootRouteImport
228
+ }
229
+ '/unauthorized': {
230
+ id: '/unauthorized'
231
+ path: '/unauthorized'
232
+ fullPath: '/unauthorized'
233
+ preLoaderRoute: typeof UnauthorizedRouteImport
234
+ parentRoute: typeof rootRouteImport
235
+ }
236
+ '/(screens)/dashboard': {
237
+ id: '/(screens)/dashboard'
238
+ path: '/dashboard'
239
+ fullPath: '/dashboard'
240
+ preLoaderRoute: typeof screensDashboardRouteImport
241
+ parentRoute: typeof rootRouteImport
242
+ }
243
+ '/(screens)/portal': {
244
+ id: '/(screens)/portal'
245
+ path: '/portal'
246
+ fullPath: '/portal'
247
+ preLoaderRoute: typeof screensPortalRouteImport
248
+ parentRoute: typeof rootRouteImport
249
+ }
250
+ '/api/$': {
251
+ id: '/api/$'
252
+ path: '/api/$'
253
+ fullPath: '/api/$'
254
+ preLoaderRoute: typeof ApiSplatRouteImport
255
+ parentRoute: typeof rootRouteImport
256
+ }
257
+ '/auth/accept-invitation': {
258
+ id: '/auth/accept-invitation'
259
+ path: '/auth/accept-invitation'
260
+ fullPath: '/auth/accept-invitation'
261
+ preLoaderRoute: typeof AuthAcceptInvitationRouteImport
262
+ parentRoute: typeof rootRouteImport
263
+ }
264
+ '/auth/forgot-password': {
265
+ id: '/auth/forgot-password'
266
+ path: '/auth/forgot-password'
267
+ fullPath: '/auth/forgot-password'
268
+ preLoaderRoute: typeof AuthForgotPasswordRouteImport
269
+ parentRoute: typeof rootRouteImport
270
+ }
271
+ '/auth/handoff': {
272
+ id: '/auth/handoff'
273
+ path: '/auth/handoff'
274
+ fullPath: '/auth/handoff'
275
+ preLoaderRoute: typeof AuthHandoffRouteImport
276
+ parentRoute: typeof rootRouteImport
277
+ }
278
+ '/auth/reset-password': {
279
+ id: '/auth/reset-password'
280
+ path: '/auth/reset-password'
281
+ fullPath: '/auth/reset-password'
282
+ preLoaderRoute: typeof AuthResetPasswordRouteImport
283
+ parentRoute: typeof rootRouteImport
284
+ }
285
+ '/auth/sign-in': {
286
+ id: '/auth/sign-in'
287
+ path: '/auth/sign-in'
288
+ fullPath: '/auth/sign-in'
289
+ preLoaderRoute: typeof AuthSignInRouteImport
290
+ parentRoute: typeof rootRouteImport
291
+ }
292
+ '/auth/sign-up': {
293
+ id: '/auth/sign-up'
294
+ path: '/auth/sign-up'
295
+ fullPath: '/auth/sign-up'
296
+ preLoaderRoute: typeof AuthSignUpRouteImport
297
+ parentRoute: typeof rootRouteImport
298
+ }
299
+ '/(screens)/dashboard/': {
300
+ id: '/(screens)/dashboard/'
301
+ path: '/'
302
+ fullPath: '/dashboard/'
303
+ preLoaderRoute: typeof screensDashboardIndexRouteImport
304
+ parentRoute: typeof screensDashboardRoute
305
+ }
306
+ '/(screens)/dashboard/$': {
307
+ id: '/(screens)/dashboard/$'
308
+ path: '/$'
309
+ fullPath: '/dashboard/$'
310
+ preLoaderRoute: typeof screensDashboardSplatRouteImport
311
+ parentRoute: typeof screensDashboardRoute
312
+ }
313
+ '/(screens)/portal/': {
314
+ id: '/(screens)/portal/'
315
+ path: '/'
316
+ fullPath: '/portal/'
317
+ preLoaderRoute: typeof screensPortalIndexRouteImport
318
+ parentRoute: typeof screensPortalRoute
319
+ }
320
+ '/(screens)/portal/$': {
321
+ id: '/(screens)/portal/$'
322
+ path: '/$'
323
+ fullPath: '/portal/$'
324
+ preLoaderRoute: typeof screensPortalSplatRouteImport
325
+ parentRoute: typeof screensPortalRoute
326
+ }
327
+ }
328
+ }
329
+
330
+ interface screensDashboardRouteChildren {
331
+ screensDashboardSplatRoute: typeof screensDashboardSplatRoute
332
+ screensDashboardIndexRoute: typeof screensDashboardIndexRoute
333
+ }
334
+
335
+ const screensDashboardRouteChildren: screensDashboardRouteChildren = {
336
+ screensDashboardSplatRoute: screensDashboardSplatRoute,
337
+ screensDashboardIndexRoute: screensDashboardIndexRoute,
338
+ }
339
+
340
+ const screensDashboardRouteWithChildren =
341
+ screensDashboardRoute._addFileChildren(screensDashboardRouteChildren)
342
+
343
+ interface screensPortalRouteChildren {
344
+ screensPortalSplatRoute: typeof screensPortalSplatRoute
345
+ screensPortalIndexRoute: typeof screensPortalIndexRoute
346
+ }
347
+
348
+ const screensPortalRouteChildren: screensPortalRouteChildren = {
349
+ screensPortalSplatRoute: screensPortalSplatRoute,
350
+ screensPortalIndexRoute: screensPortalIndexRoute,
351
+ }
352
+
353
+ const screensPortalRouteWithChildren = screensPortalRoute._addFileChildren(
354
+ screensPortalRouteChildren,
355
+ )
356
+
357
+ const rootRouteChildren: RootRouteChildren = {
358
+ IndexRoute: IndexRoute,
359
+ UnauthorizedRoute: UnauthorizedRoute,
360
+ screensDashboardRoute: screensDashboardRouteWithChildren,
361
+ screensPortalRoute: screensPortalRouteWithChildren,
362
+ ApiSplatRoute: ApiSplatRoute,
363
+ AuthAcceptInvitationRoute: AuthAcceptInvitationRoute,
364
+ AuthForgotPasswordRoute: AuthForgotPasswordRoute,
365
+ AuthHandoffRoute: AuthHandoffRoute,
366
+ AuthResetPasswordRoute: AuthResetPasswordRoute,
367
+ AuthSignInRoute: AuthSignInRoute,
368
+ AuthSignUpRoute: AuthSignUpRoute,
369
+ }
370
+ export const routeTree = rootRouteImport
371
+ ._addFileChildren(rootRouteChildren)
372
+ ._addFileTypes<FileRouteTypes>()
373
+
374
+ import type { getRouter } from './router.tsx'
375
+ import type { startInstance } from './start.ts'
376
+ declare module '@tanstack/react-start' {
377
+ interface Register {
378
+ ssr: true
379
+ router: Awaited<ReturnType<typeof getRouter>>
380
+ config: Awaited<ReturnType<typeof startInstance.getOptions>>
381
+ }
382
+ }
@@ -0,0 +1,7 @@
1
+ import { createRouter } from '@tanstack/react-router'
2
+ import { routeTree } from './routeTree.gen'
3
+ import { flatSearch } from './screen-list.tsx'
4
+
5
+ // The search is read and written as the URL's own pairs, one string each, because a list
6
+ // keeps its `qs` query there.
7
+ export const getRouter = () => createRouter({ routeTree, scrollRestoration: true, ...flatSearch })
@@ -0,0 +1,4 @@
1
+ // Written by `mithaq generate screens`. Do not edit.
2
+ /// <reference types="vite/client" />
3
+ // Every file the `dashboard` screen's references name, each loaded when a page draws it.
4
+ export const files = import.meta.glob(['./src/audit-log/ui/activity.tsx', './src/courses/ui/fee-cell.tsx', './src/courses/ui/no-courses.tsx', './src/courses/ui/status-cell.tsx', './src/enrollments/ui/session-cell.tsx', './src/media/ui/preview.tsx', './src/roles/ui/role-form.tsx', './src/roles/ui/roles.tsx', './src/ui-dashboard/dashboard.tsx', './src/ui-dashboard/members.tsx', './src/ui-dashboard/theme-provider.tsx', './src/ui-dashboard/versions.tsx', './src/ui/app-shell.tsx', './src/ui/record-page.tsx', './src/ui/rich-text-nodes.tsx', './src/ui/session-labels.tsx', './src/ui/table-page.tsx', './src/ui/top-shell.tsx'], { base: '/node_modules/asas/', exhaustive: true })