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,3609 @@
1
+ {
2
+ "path": "/platform",
3
+ "providers": [
4
+ "./src/ui-dashboard/theme-provider.tsx#ThemeProvider",
5
+ "./src/ui/rich-text-nodes.tsx#RichTextNodes",
6
+ "./src/ui/session-labels.tsx#SessionLabels"
7
+ ],
8
+ "pages": {
9
+ "home": {
10
+ "path": "/",
11
+ "component": "./src/ui-platform/home.tsx#Home"
12
+ }
13
+ },
14
+ "nav": [
15
+ {
16
+ "path": "/users",
17
+ "page": "list",
18
+ "kayan": "user",
19
+ "permission": "user.find"
20
+ },
21
+ {
22
+ "path": "/organizations",
23
+ "page": "list",
24
+ "kayan": "organization",
25
+ "permission": "organization.find"
26
+ },
27
+ {
28
+ "path": "/members",
29
+ "page": "list",
30
+ "kayan": "member",
31
+ "permission": "member.find"
32
+ },
33
+ {
34
+ "path": "/courses",
35
+ "page": "list",
36
+ "kayan": "courses",
37
+ "permission": "courses.find"
38
+ },
39
+ {
40
+ "path": "/sessions",
41
+ "page": "list",
42
+ "kayan": "sessions",
43
+ "permission": "sessions.find"
44
+ },
45
+ {
46
+ "path": "/enrollments",
47
+ "page": "list",
48
+ "kayan": "enrollments",
49
+ "permission": "enrollments.find"
50
+ },
51
+ {
52
+ "path": "/tags",
53
+ "page": "list",
54
+ "kayan": "tags",
55
+ "permission": "tags.find"
56
+ },
57
+ {
58
+ "path": "/roles",
59
+ "page": "list",
60
+ "kayan": "roles",
61
+ "permission": "roles.find"
62
+ },
63
+ {
64
+ "path": "/member-roles",
65
+ "page": "list",
66
+ "kayan": "memberRoles",
67
+ "permission": "memberRoles.find"
68
+ },
69
+ {
70
+ "path": "/local-users",
71
+ "page": "list",
72
+ "kayan": "localUsers",
73
+ "permission": "localUsers.find"
74
+ }
75
+ ],
76
+ "layouts": {
77
+ "app": "./src/ui/app-shell.tsx#PlatformShell",
78
+ "record": "./src/ui-platform/record-page.tsx#PlatformRecordPage",
79
+ "table": "./src/ui/table-page.tsx#TablePage"
80
+ },
81
+ "components": {},
82
+ "controls": {
83
+ "text": {
84
+ "control": "text",
85
+ "cell": "text"
86
+ },
87
+ "email": {
88
+ "control": "email",
89
+ "cell": "email"
90
+ },
91
+ "number": {
92
+ "control": "number",
93
+ "cell": "number"
94
+ },
95
+ "integer": {
96
+ "control": "integer",
97
+ "cell": "integer"
98
+ },
99
+ "decimal": {
100
+ "control": "decimal",
101
+ "cell": "decimal"
102
+ },
103
+ "checkbox": {
104
+ "control": "checkbox",
105
+ "cell": "checkbox"
106
+ },
107
+ "datetime": {
108
+ "control": "datetime",
109
+ "cell": "datetime"
110
+ },
111
+ "date": {
112
+ "control": "date",
113
+ "cell": "date"
114
+ },
115
+ "textArray": {
116
+ "control": "textArray",
117
+ "cell": "textArray"
118
+ },
119
+ "uuid": {
120
+ "control": "uuid",
121
+ "cell": "uuid"
122
+ },
123
+ "relationship": {
124
+ "control": "relationship",
125
+ "cell": "relationship"
126
+ },
127
+ "join": {
128
+ "control": "join",
129
+ "cell": "join"
130
+ },
131
+ "richText": {
132
+ "control": "richText",
133
+ "cell": "richText"
134
+ },
135
+ "upload": {
136
+ "control": "upload",
137
+ "cell": "upload"
138
+ }
139
+ },
140
+ "kayan": {
141
+ "user": {
142
+ "name": "user",
143
+ "single": false,
144
+ "fields": [
145
+ {
146
+ "name": "id",
147
+ "kind": "text",
148
+ "rules": {
149
+ "required": false
150
+ },
151
+ "component": "text",
152
+ "cell": "text"
153
+ },
154
+ {
155
+ "name": "updatedAt",
156
+ "kind": "datetime",
157
+ "rules": {
158
+ "required": true,
159
+ "nowOnUpdate": true,
160
+ "providedBy": {
161
+ "update": "application"
162
+ }
163
+ },
164
+ "component": "datetime",
165
+ "cell": "datetime"
166
+ },
167
+ {
168
+ "name": "createdAt",
169
+ "kind": "datetime",
170
+ "rules": {
171
+ "required": true
172
+ },
173
+ "component": "datetime",
174
+ "cell": "datetime"
175
+ },
176
+ {
177
+ "name": "name",
178
+ "kind": "text",
179
+ "rules": {
180
+ "required": true
181
+ },
182
+ "component": "text",
183
+ "cell": "text"
184
+ },
185
+ {
186
+ "name": "email",
187
+ "kind": "text",
188
+ "rules": {
189
+ "required": true,
190
+ "unique": true
191
+ },
192
+ "component": "text",
193
+ "cell": "text"
194
+ },
195
+ {
196
+ "name": "emailVerified",
197
+ "kind": "checkbox",
198
+ "rules": {
199
+ "required": true
200
+ },
201
+ "component": "checkbox",
202
+ "cell": "checkbox"
203
+ },
204
+ {
205
+ "name": "image",
206
+ "kind": "text",
207
+ "rules": {
208
+ "required": false
209
+ },
210
+ "component": "text",
211
+ "cell": "text"
212
+ },
213
+ {
214
+ "name": "role",
215
+ "kind": "text",
216
+ "rules": {
217
+ "required": false
218
+ },
219
+ "component": "text",
220
+ "cell": "text"
221
+ },
222
+ {
223
+ "name": "banned",
224
+ "kind": "checkbox",
225
+ "rules": {
226
+ "required": false
227
+ },
228
+ "component": "checkbox",
229
+ "cell": "checkbox"
230
+ },
231
+ {
232
+ "name": "banReason",
233
+ "kind": "text",
234
+ "rules": {
235
+ "required": false
236
+ },
237
+ "component": "text",
238
+ "cell": "text"
239
+ },
240
+ {
241
+ "name": "banExpires",
242
+ "kind": "datetime",
243
+ "rules": {
244
+ "required": false
245
+ },
246
+ "component": "datetime",
247
+ "cell": "datetime"
248
+ }
249
+ ],
250
+ "operations": [
251
+ {
252
+ "name": "create",
253
+ "effect": "create"
254
+ },
255
+ {
256
+ "name": "update",
257
+ "effect": "update"
258
+ },
259
+ {
260
+ "name": "delete",
261
+ "effect": "delete"
262
+ },
263
+ {
264
+ "name": "find",
265
+ "effect": "read"
266
+ },
267
+ {
268
+ "name": "findByID",
269
+ "effect": "read"
270
+ },
271
+ {
272
+ "name": "count",
273
+ "effect": "read"
274
+ },
275
+ {
276
+ "name": "updateMany",
277
+ "effect": "update",
278
+ "updatesMany": true
279
+ },
280
+ {
281
+ "name": "deleteMany",
282
+ "effect": "delete"
283
+ }
284
+ ],
285
+ "useAsTitle": "name",
286
+ "pages": {
287
+ "list": {
288
+ "path": "/users",
289
+ "page": {
290
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
291
+ "header": [
292
+ {
293
+ "title": {}
294
+ }
295
+ ],
296
+ "main": [
297
+ {
298
+ "layout": "./src/ui/table-page.tsx#TablePage",
299
+ "main": [
300
+ {
301
+ "list": {
302
+ "columns": [
303
+ {
304
+ "field": "name",
305
+ "cell": "text",
306
+ "decided": "table"
307
+ },
308
+ {
309
+ "field": "email",
310
+ "cell": "text",
311
+ "decided": "table"
312
+ },
313
+ {
314
+ "field": "role",
315
+ "cell": "./src/ui-platform/user-actions.tsx#PlatformRole",
316
+ "decided": "leaf"
317
+ },
318
+ {
319
+ "field": "banned",
320
+ "cell": "checkbox",
321
+ "decided": "table"
322
+ },
323
+ {
324
+ "field": "createdAt",
325
+ "cell": "datetime",
326
+ "decided": "table"
327
+ }
328
+ ],
329
+ "filters": [
330
+ "name",
331
+ "email",
332
+ "role",
333
+ "banned",
334
+ "createdAt"
335
+ ],
336
+ "search": [
337
+ "name",
338
+ "email"
339
+ ],
340
+ "menu": "./src/ui-platform/user-actions.tsx#UserMenu",
341
+ "sort": "email"
342
+ }
343
+ }
344
+ ]
345
+ }
346
+ ]
347
+ }
348
+ },
349
+ "view": {
350
+ "path": "/users/:id",
351
+ "page": {
352
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
353
+ "header": [
354
+ {
355
+ "title": {}
356
+ }
357
+ ],
358
+ "main": [
359
+ {
360
+ "layout": "./src/ui-platform/record-page.tsx#PlatformRecordPage",
361
+ "main": [
362
+ {
363
+ "component": "./src/ui-platform/user-actions.tsx#UserButtons"
364
+ },
365
+ {
366
+ "section": "person",
367
+ "label": {
368
+ "en": "Person",
369
+ "ar": "الشخص"
370
+ },
371
+ "fields": [
372
+ {
373
+ "field": "name",
374
+ "component": "text",
375
+ "decided": "table"
376
+ },
377
+ {
378
+ "field": "email",
379
+ "component": "text",
380
+ "decided": "table"
381
+ },
382
+ {
383
+ "field": "emailVerified",
384
+ "component": "checkbox",
385
+ "decided": "table"
386
+ },
387
+ {
388
+ "field": "image",
389
+ "component": "text",
390
+ "decided": "table"
391
+ }
392
+ ]
393
+ },
394
+ {
395
+ "section": "standing",
396
+ "label": {
397
+ "en": "Standing on the platform",
398
+ "ar": "الوضع في المنصة"
399
+ },
400
+ "fields": [
401
+ {
402
+ "field": "role",
403
+ "component": "text",
404
+ "cell": "./src/ui-platform/user-actions.tsx#PlatformRole",
405
+ "decided": "table"
406
+ },
407
+ {
408
+ "field": "banned",
409
+ "component": "checkbox",
410
+ "decided": "table"
411
+ },
412
+ {
413
+ "field": "banReason",
414
+ "component": "text",
415
+ "decided": "table"
416
+ },
417
+ {
418
+ "field": "banExpires",
419
+ "component": "datetime",
420
+ "decided": "table"
421
+ }
422
+ ]
423
+ }
424
+ ],
425
+ "side": [
426
+ {
427
+ "section": "record",
428
+ "label": {
429
+ "en": "Record",
430
+ "ar": "السجل"
431
+ },
432
+ "fields": [
433
+ {
434
+ "field": "createdAt",
435
+ "component": "datetime",
436
+ "decided": "table"
437
+ },
438
+ {
439
+ "field": "updatedAt",
440
+ "component": "datetime",
441
+ "decided": "table"
442
+ }
443
+ ]
444
+ }
445
+ ]
446
+ }
447
+ ]
448
+ }
449
+ }
450
+ }
451
+ },
452
+ "organization": {
453
+ "name": "organization",
454
+ "single": false,
455
+ "fields": [
456
+ {
457
+ "name": "id",
458
+ "kind": "text",
459
+ "rules": {
460
+ "required": false
461
+ },
462
+ "component": "text",
463
+ "cell": "text"
464
+ },
465
+ {
466
+ "name": "updatedAt",
467
+ "kind": "datetime",
468
+ "label": {
469
+ "en": "Updated at",
470
+ "ar": "تاريخ التعديل"
471
+ },
472
+ "rules": {
473
+ "required": true,
474
+ "defaultNow": true,
475
+ "nowOnUpdate": true,
476
+ "providedBy": {
477
+ "create": "application",
478
+ "update": "application"
479
+ }
480
+ },
481
+ "component": "datetime",
482
+ "cell": "datetime"
483
+ },
484
+ {
485
+ "name": "createdAt",
486
+ "kind": "datetime",
487
+ "rules": {
488
+ "required": true
489
+ },
490
+ "component": "datetime",
491
+ "cell": "datetime"
492
+ },
493
+ {
494
+ "name": "name",
495
+ "kind": "text",
496
+ "rules": {
497
+ "required": true
498
+ },
499
+ "component": "text",
500
+ "cell": "text"
501
+ },
502
+ {
503
+ "name": "slug",
504
+ "kind": "text",
505
+ "rules": {
506
+ "required": true,
507
+ "unique": true
508
+ },
509
+ "component": "text",
510
+ "cell": "text"
511
+ },
512
+ {
513
+ "name": "logo",
514
+ "kind": "text",
515
+ "rules": {
516
+ "required": false
517
+ },
518
+ "component": "text",
519
+ "cell": "text"
520
+ },
521
+ {
522
+ "name": "metadata",
523
+ "kind": "text",
524
+ "rules": {
525
+ "required": false
526
+ },
527
+ "component": "text",
528
+ "cell": "text"
529
+ }
530
+ ],
531
+ "operations": [
532
+ {
533
+ "name": "create",
534
+ "effect": "create"
535
+ },
536
+ {
537
+ "name": "update",
538
+ "effect": "update"
539
+ },
540
+ {
541
+ "name": "delete",
542
+ "effect": "delete"
543
+ },
544
+ {
545
+ "name": "find",
546
+ "effect": "read"
547
+ },
548
+ {
549
+ "name": "findByID",
550
+ "effect": "read"
551
+ },
552
+ {
553
+ "name": "count",
554
+ "effect": "read"
555
+ },
556
+ {
557
+ "name": "updateMany",
558
+ "effect": "update",
559
+ "updatesMany": true
560
+ },
561
+ {
562
+ "name": "deleteMany",
563
+ "effect": "delete"
564
+ }
565
+ ],
566
+ "useAsTitle": "name",
567
+ "pages": {
568
+ "list": {
569
+ "path": "/organizations",
570
+ "page": {
571
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
572
+ "header": [
573
+ {
574
+ "title": {}
575
+ }
576
+ ],
577
+ "main": [
578
+ {
579
+ "layout": "./src/ui/table-page.tsx#TablePage",
580
+ "main": [
581
+ {
582
+ "list": {
583
+ "columns": [
584
+ {
585
+ "field": "name",
586
+ "cell": "text",
587
+ "decided": "table"
588
+ },
589
+ {
590
+ "field": "slug",
591
+ "cell": "./src/ui-platform/organization-actions.tsx#OrganizationActions",
592
+ "decided": "leaf"
593
+ },
594
+ {
595
+ "field": "createdAt",
596
+ "cell": "datetime",
597
+ "decided": "table"
598
+ }
599
+ ],
600
+ "filters": [
601
+ "name",
602
+ "slug",
603
+ "createdAt"
604
+ ],
605
+ "search": [
606
+ "name",
607
+ "slug"
608
+ ],
609
+ "sort": "name"
610
+ }
611
+ }
612
+ ]
613
+ }
614
+ ]
615
+ }
616
+ },
617
+ "view": {
618
+ "path": "/organizations/:id",
619
+ "page": {
620
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
621
+ "header": [
622
+ {
623
+ "title": {}
624
+ }
625
+ ],
626
+ "main": [
627
+ {
628
+ "layout": "./src/ui-platform/record-page.tsx#PlatformRecordPage",
629
+ "main": [
630
+ {
631
+ "section": "organization",
632
+ "label": {
633
+ "en": "Organization",
634
+ "ar": "المؤسسة"
635
+ },
636
+ "fields": [
637
+ {
638
+ "field": "name",
639
+ "component": "text",
640
+ "decided": "table"
641
+ },
642
+ {
643
+ "field": "slug",
644
+ "component": "text",
645
+ "decided": "table"
646
+ },
647
+ {
648
+ "field": "logo",
649
+ "component": "text",
650
+ "decided": "table"
651
+ },
652
+ {
653
+ "field": "metadata",
654
+ "component": "text",
655
+ "decided": "table"
656
+ }
657
+ ]
658
+ }
659
+ ],
660
+ "side": [
661
+ {
662
+ "section": "record",
663
+ "label": {
664
+ "en": "Record",
665
+ "ar": "السجل"
666
+ },
667
+ "fields": [
668
+ {
669
+ "field": "createdAt",
670
+ "component": "datetime",
671
+ "decided": "table"
672
+ },
673
+ {
674
+ "field": "updatedAt",
675
+ "component": "datetime",
676
+ "decided": "table"
677
+ }
678
+ ]
679
+ }
680
+ ]
681
+ }
682
+ ]
683
+ }
684
+ }
685
+ }
686
+ },
687
+ "member": {
688
+ "name": "member",
689
+ "single": false,
690
+ "fields": [
691
+ {
692
+ "name": "id",
693
+ "kind": "text",
694
+ "rules": {
695
+ "required": false
696
+ },
697
+ "component": "text",
698
+ "cell": "text"
699
+ },
700
+ {
701
+ "name": "updatedAt",
702
+ "kind": "datetime",
703
+ "label": {
704
+ "en": "Updated at",
705
+ "ar": "تاريخ التعديل"
706
+ },
707
+ "rules": {
708
+ "required": true,
709
+ "defaultNow": true,
710
+ "nowOnUpdate": true,
711
+ "providedBy": {
712
+ "create": "application",
713
+ "update": "application"
714
+ }
715
+ },
716
+ "component": "datetime",
717
+ "cell": "datetime"
718
+ },
719
+ {
720
+ "name": "createdAt",
721
+ "kind": "datetime",
722
+ "rules": {
723
+ "required": true
724
+ },
725
+ "component": "datetime",
726
+ "cell": "datetime"
727
+ },
728
+ {
729
+ "name": "organizationId",
730
+ "kind": "relationship",
731
+ "rules": {
732
+ "required": true,
733
+ "onDelete": "cascade"
734
+ },
735
+ "relationTo": "organization",
736
+ "component": "relationship",
737
+ "cell": "relationship"
738
+ },
739
+ {
740
+ "name": "userId",
741
+ "kind": "relationship",
742
+ "rules": {
743
+ "required": true,
744
+ "onDelete": "cascade"
745
+ },
746
+ "relationTo": "user",
747
+ "component": "relationship",
748
+ "cell": "relationship"
749
+ },
750
+ {
751
+ "name": "role",
752
+ "kind": "text",
753
+ "rules": {
754
+ "required": true
755
+ },
756
+ "component": "text",
757
+ "cell": "text"
758
+ }
759
+ ],
760
+ "operations": [
761
+ {
762
+ "name": "create",
763
+ "effect": "create"
764
+ },
765
+ {
766
+ "name": "update",
767
+ "effect": "update"
768
+ },
769
+ {
770
+ "name": "delete",
771
+ "effect": "delete"
772
+ },
773
+ {
774
+ "name": "find",
775
+ "effect": "read"
776
+ },
777
+ {
778
+ "name": "findByID",
779
+ "effect": "read"
780
+ },
781
+ {
782
+ "name": "count",
783
+ "effect": "read"
784
+ },
785
+ {
786
+ "name": "updateMany",
787
+ "effect": "update",
788
+ "updatesMany": true
789
+ },
790
+ {
791
+ "name": "deleteMany",
792
+ "effect": "delete"
793
+ }
794
+ ],
795
+ "useAsTitle": "userId",
796
+ "pages": {
797
+ "list": {
798
+ "path": "/members",
799
+ "page": {
800
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
801
+ "header": [
802
+ {
803
+ "title": {}
804
+ }
805
+ ],
806
+ "main": [
807
+ {
808
+ "layout": "./src/ui/table-page.tsx#TablePage",
809
+ "main": [
810
+ {
811
+ "list": {
812
+ "columns": [
813
+ {
814
+ "field": "userId",
815
+ "cell": "relationship",
816
+ "decided": "table"
817
+ },
818
+ {
819
+ "field": "organizationId",
820
+ "cell": "relationship",
821
+ "decided": "table"
822
+ },
823
+ {
824
+ "field": "role",
825
+ "cell": "./src/ui-platform/role-cells.tsx#MembershipRole",
826
+ "decided": "leaf"
827
+ },
828
+ {
829
+ "field": "createdAt",
830
+ "cell": "datetime",
831
+ "decided": "table"
832
+ }
833
+ ],
834
+ "filters": [
835
+ "organizationId",
836
+ "userId",
837
+ "role",
838
+ "createdAt"
839
+ ],
840
+ "search": [
841
+ "userId.name",
842
+ "userId.email"
843
+ ],
844
+ "sort": "-createdAt"
845
+ }
846
+ }
847
+ ]
848
+ }
849
+ ]
850
+ }
851
+ },
852
+ "view": {
853
+ "path": "/members/:id",
854
+ "page": {
855
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
856
+ "header": [
857
+ {
858
+ "title": {}
859
+ }
860
+ ],
861
+ "main": [
862
+ {
863
+ "layout": "./src/ui-platform/record-page.tsx#PlatformRecordPage",
864
+ "main": [
865
+ {
866
+ "section": "membership",
867
+ "label": {
868
+ "en": "Membership",
869
+ "ar": "العضوية"
870
+ },
871
+ "fields": [
872
+ {
873
+ "field": "userId",
874
+ "component": "relationship",
875
+ "decided": "table"
876
+ },
877
+ {
878
+ "field": "organizationId",
879
+ "component": "relationship",
880
+ "decided": "table"
881
+ },
882
+ {
883
+ "field": "role",
884
+ "component": "text",
885
+ "cell": "./src/ui-platform/role-cells.tsx#MembershipRole",
886
+ "decided": "table"
887
+ }
888
+ ]
889
+ }
890
+ ],
891
+ "side": [
892
+ {
893
+ "section": "record",
894
+ "label": {
895
+ "en": "Record",
896
+ "ar": "السجل"
897
+ },
898
+ "fields": [
899
+ {
900
+ "field": "createdAt",
901
+ "component": "datetime",
902
+ "decided": "table"
903
+ },
904
+ {
905
+ "field": "updatedAt",
906
+ "component": "datetime",
907
+ "decided": "table"
908
+ }
909
+ ]
910
+ }
911
+ ]
912
+ }
913
+ ]
914
+ }
915
+ }
916
+ }
917
+ },
918
+ "courses": {
919
+ "name": "courses",
920
+ "single": false,
921
+ "fields": [
922
+ {
923
+ "name": "id",
924
+ "kind": "uuid",
925
+ "label": {
926
+ "en": "ID",
927
+ "ar": "المعرف"
928
+ },
929
+ "rules": {
930
+ "required": false
931
+ },
932
+ "component": "uuid",
933
+ "cell": "uuid"
934
+ },
935
+ {
936
+ "name": "updatedAt",
937
+ "kind": "datetime",
938
+ "label": {
939
+ "en": "Updated at",
940
+ "ar": "تاريخ التعديل"
941
+ },
942
+ "rules": {
943
+ "required": true,
944
+ "defaultNow": true,
945
+ "nowOnUpdate": true,
946
+ "providedBy": {
947
+ "create": "application",
948
+ "update": "application"
949
+ }
950
+ },
951
+ "component": "datetime",
952
+ "cell": "datetime"
953
+ },
954
+ {
955
+ "name": "createdAt",
956
+ "kind": "datetime",
957
+ "label": {
958
+ "en": "Created at",
959
+ "ar": "تاريخ الإنشاء"
960
+ },
961
+ "rules": {
962
+ "required": true,
963
+ "defaultNow": true,
964
+ "index": true,
965
+ "providedBy": {
966
+ "create": "application",
967
+ "update": "application"
968
+ }
969
+ },
970
+ "component": "datetime",
971
+ "cell": "datetime"
972
+ },
973
+ {
974
+ "name": "organization",
975
+ "kind": "relationship",
976
+ "label": {
977
+ "en": "Organization",
978
+ "ar": "المؤسسة"
979
+ },
980
+ "rules": {
981
+ "required": true,
982
+ "index": true,
983
+ "providedBy": {
984
+ "create": "application",
985
+ "update": "never"
986
+ },
987
+ "onDelete": "restrict"
988
+ },
989
+ "relationTo": "organization",
990
+ "component": "relationship",
991
+ "cell": "relationship"
992
+ },
993
+ {
994
+ "name": "title",
995
+ "kind": "text",
996
+ "label": {
997
+ "en": "Title",
998
+ "ar": "العنوان"
999
+ },
1000
+ "rules": {
1001
+ "required": true,
1002
+ "trim": true,
1003
+ "maxLength": 120,
1004
+ "index": true
1005
+ },
1006
+ "placeholder": {
1007
+ "en": "Introduction to Arabic calligraphy",
1008
+ "ar": "مقدمة في الخط العربي"
1009
+ },
1010
+ "prefix": {
1011
+ "en": "Course",
1012
+ "ar": "دورة"
1013
+ },
1014
+ "description": {
1015
+ "en": "The name a student sees in the catalogue.",
1016
+ "ar": "الاسم الذي يراه الطالب في الدليل."
1017
+ },
1018
+ "component": "text",
1019
+ "cell": "text"
1020
+ },
1021
+ {
1022
+ "name": "summary",
1023
+ "kind": "text",
1024
+ "label": {
1025
+ "en": "Summary",
1026
+ "ar": "الملخص"
1027
+ },
1028
+ "rules": {
1029
+ "maxLength": 200,
1030
+ "required": false
1031
+ },
1032
+ "component": "text",
1033
+ "cell": "text"
1034
+ },
1035
+ {
1036
+ "name": "fee",
1037
+ "kind": "number",
1038
+ "label": {
1039
+ "en": "Fee",
1040
+ "ar": "الرسوم"
1041
+ },
1042
+ "rules": {
1043
+ "required": false
1044
+ },
1045
+ "suffix": {
1046
+ "en": "per seat",
1047
+ "ar": "لكل مقعد"
1048
+ },
1049
+ "component": "number",
1050
+ "cell": "./src/courses/ui/fee-cell.tsx#FeeCell"
1051
+ },
1052
+ {
1053
+ "name": "currency",
1054
+ "kind": "text",
1055
+ "label": {
1056
+ "en": "Currency",
1057
+ "ar": "العملة"
1058
+ },
1059
+ "rules": {
1060
+ "required": false
1061
+ },
1062
+ "options": [
1063
+ {
1064
+ "value": "SAR",
1065
+ "label": {
1066
+ "en": "Saudi riyal",
1067
+ "ar": "ريال سعودي"
1068
+ }
1069
+ },
1070
+ {
1071
+ "value": "USD",
1072
+ "label": {
1073
+ "en": "US dollar",
1074
+ "ar": "دولار أمريكي"
1075
+ }
1076
+ }
1077
+ ],
1078
+ "component": "text",
1079
+ "cell": "text"
1080
+ },
1081
+ {
1082
+ "name": "level",
1083
+ "kind": "number",
1084
+ "label": {
1085
+ "en": "Level",
1086
+ "ar": "المستوى"
1087
+ },
1088
+ "rules": {
1089
+ "min": 1,
1090
+ "max": 5,
1091
+ "required": false
1092
+ },
1093
+ "component": "number",
1094
+ "cell": "number"
1095
+ },
1096
+ {
1097
+ "name": "notifications",
1098
+ "kind": "checkbox",
1099
+ "label": {
1100
+ "en": "Notifications",
1101
+ "ar": "الإشعارات"
1102
+ },
1103
+ "rules": {
1104
+ "required": false
1105
+ },
1106
+ "component": "checkbox",
1107
+ "cell": "checkbox"
1108
+ },
1109
+ {
1110
+ "name": "delivery",
1111
+ "kind": "text",
1112
+ "label": {
1113
+ "en": "Delivery",
1114
+ "ar": "طريقة التقديم"
1115
+ },
1116
+ "rules": {
1117
+ "required": false
1118
+ },
1119
+ "options": [
1120
+ {
1121
+ "value": "live",
1122
+ "label": {
1123
+ "en": "Live",
1124
+ "ar": "مباشر"
1125
+ }
1126
+ },
1127
+ {
1128
+ "value": "recorded",
1129
+ "label": {
1130
+ "en": "Recorded",
1131
+ "ar": "مسجل"
1132
+ }
1133
+ }
1134
+ ],
1135
+ "component": "text",
1136
+ "cell": "text"
1137
+ },
1138
+ {
1139
+ "name": "audience",
1140
+ "kind": "text",
1141
+ "label": {
1142
+ "en": "Audience",
1143
+ "ar": "الجمهور"
1144
+ },
1145
+ "rules": {
1146
+ "required": false
1147
+ },
1148
+ "options": [
1149
+ {
1150
+ "value": "beginner",
1151
+ "label": {
1152
+ "en": "Beginner",
1153
+ "ar": "مبتدئ"
1154
+ }
1155
+ },
1156
+ {
1157
+ "value": "advanced",
1158
+ "label": {
1159
+ "en": "Advanced",
1160
+ "ar": "متقدم"
1161
+ }
1162
+ }
1163
+ ],
1164
+ "component": "text",
1165
+ "cell": "text"
1166
+ },
1167
+ {
1168
+ "name": "accessCode",
1169
+ "kind": "text",
1170
+ "label": {
1171
+ "en": "Access code",
1172
+ "ar": "رمز الدخول"
1173
+ },
1174
+ "rules": {
1175
+ "maxLength": 6,
1176
+ "required": false
1177
+ },
1178
+ "component": "text",
1179
+ "cell": "text"
1180
+ },
1181
+ {
1182
+ "name": "archived",
1183
+ "kind": "checkbox",
1184
+ "label": {
1185
+ "en": "Archived",
1186
+ "ar": "مؤرشف"
1187
+ },
1188
+ "rules": {
1189
+ "required": false
1190
+ },
1191
+ "component": "checkbox",
1192
+ "cell": "checkbox"
1193
+ },
1194
+ {
1195
+ "name": "topics",
1196
+ "kind": "textArray",
1197
+ "label": {
1198
+ "en": "Topics",
1199
+ "ar": "المواضيع"
1200
+ },
1201
+ "rules": {
1202
+ "maxRows": 2,
1203
+ "required": false
1204
+ },
1205
+ "options": [
1206
+ {
1207
+ "value": "script",
1208
+ "label": {
1209
+ "en": "Script",
1210
+ "ar": "الخط"
1211
+ }
1212
+ },
1213
+ {
1214
+ "value": "grammar",
1215
+ "label": {
1216
+ "en": "Grammar",
1217
+ "ar": "النحو"
1218
+ }
1219
+ },
1220
+ {
1221
+ "value": "recitation",
1222
+ "label": {
1223
+ "en": "Recitation",
1224
+ "ar": "التلاوة"
1225
+ }
1226
+ }
1227
+ ],
1228
+ "component": "textArray",
1229
+ "cell": "textArray"
1230
+ },
1231
+ {
1232
+ "name": "opensOn",
1233
+ "kind": "date",
1234
+ "label": {
1235
+ "en": "Opens on",
1236
+ "ar": "يفتح في"
1237
+ },
1238
+ "rules": {
1239
+ "required": false
1240
+ },
1241
+ "component": "date",
1242
+ "cell": "date"
1243
+ },
1244
+ {
1245
+ "name": "archiveReason",
1246
+ "kind": "text",
1247
+ "label": {
1248
+ "en": "Archive reason",
1249
+ "ar": "سبب الأرشفة"
1250
+ },
1251
+ "rules": {
1252
+ "maxLength": 200,
1253
+ "required": false
1254
+ },
1255
+ "component": "text",
1256
+ "cell": "text"
1257
+ },
1258
+ {
1259
+ "name": "tags",
1260
+ "kind": "relationship",
1261
+ "label": {
1262
+ "en": "Tags",
1263
+ "ar": "الوسوم"
1264
+ },
1265
+ "rules": {
1266
+ "required": false
1267
+ },
1268
+ "relationTo": "tags",
1269
+ "hasMany": true,
1270
+ "component": "relationship",
1271
+ "cell": "relationship"
1272
+ },
1273
+ {
1274
+ "name": "scheduledSessions",
1275
+ "kind": "join",
1276
+ "label": {
1277
+ "en": "Scheduled sessions",
1278
+ "ar": "الجلسات المجدولة"
1279
+ },
1280
+ "rules": {
1281
+ "required": false,
1282
+ "providedBy": {
1283
+ "create": "never",
1284
+ "update": "never"
1285
+ }
1286
+ },
1287
+ "relationTo": "sessions",
1288
+ "on": "course",
1289
+ "component": "join",
1290
+ "cell": "join"
1291
+ },
1292
+ {
1293
+ "name": "_status",
1294
+ "kind": "text",
1295
+ "label": {
1296
+ "en": "Status",
1297
+ "ar": "الحالة"
1298
+ },
1299
+ "rules": {
1300
+ "index": true,
1301
+ "required": false
1302
+ },
1303
+ "options": [
1304
+ {
1305
+ "value": "draft",
1306
+ "label": {
1307
+ "en": "Draft",
1308
+ "ar": "مسودة"
1309
+ }
1310
+ },
1311
+ {
1312
+ "value": "published",
1313
+ "label": {
1314
+ "en": "Published",
1315
+ "ar": "منشور"
1316
+ }
1317
+ }
1318
+ ],
1319
+ "component": "text",
1320
+ "cell": "text"
1321
+ },
1322
+ {
1323
+ "name": "details",
1324
+ "kind": "richText",
1325
+ "label": {
1326
+ "en": "Details",
1327
+ "ar": "التفاصيل"
1328
+ },
1329
+ "rules": {
1330
+ "required": false
1331
+ },
1332
+ "component": "richText",
1333
+ "cell": "richText",
1334
+ "sortable": false
1335
+ },
1336
+ {
1337
+ "name": "cover",
1338
+ "kind": "upload",
1339
+ "label": {
1340
+ "en": "Cover image",
1341
+ "ar": "صورة الغلاف"
1342
+ },
1343
+ "rules": {
1344
+ "required": false,
1345
+ "onDelete": "restrict"
1346
+ },
1347
+ "relationTo": "media",
1348
+ "component": "upload",
1349
+ "cell": "upload"
1350
+ }
1351
+ ],
1352
+ "operations": [
1353
+ {
1354
+ "name": "create",
1355
+ "effect": "create"
1356
+ },
1357
+ {
1358
+ "name": "update",
1359
+ "effect": "update"
1360
+ },
1361
+ {
1362
+ "name": "delete",
1363
+ "effect": "delete"
1364
+ },
1365
+ {
1366
+ "name": "find",
1367
+ "effect": "read"
1368
+ },
1369
+ {
1370
+ "name": "findByID",
1371
+ "effect": "read"
1372
+ },
1373
+ {
1374
+ "name": "count",
1375
+ "effect": "read"
1376
+ },
1377
+ {
1378
+ "name": "updateMany",
1379
+ "effect": "update",
1380
+ "updatesMany": true
1381
+ },
1382
+ {
1383
+ "name": "deleteMany",
1384
+ "effect": "delete"
1385
+ },
1386
+ {
1387
+ "name": "findVersions",
1388
+ "effect": "read"
1389
+ },
1390
+ {
1391
+ "name": "findVersionByID",
1392
+ "effect": "read"
1393
+ },
1394
+ {
1395
+ "name": "restoreVersion",
1396
+ "effect": "update"
1397
+ },
1398
+ {
1399
+ "name": "archive",
1400
+ "effect": "update"
1401
+ },
1402
+ {
1403
+ "name": "findWithSessions",
1404
+ "effect": "read"
1405
+ }
1406
+ ],
1407
+ "useAsTitle": "title",
1408
+ "drafts": {
1409
+ "autosave": {
1410
+ "interval": 2000
1411
+ }
1412
+ },
1413
+ "pages": {
1414
+ "list": {
1415
+ "path": "/courses",
1416
+ "page": {
1417
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
1418
+ "header": [
1419
+ {
1420
+ "title": {}
1421
+ }
1422
+ ],
1423
+ "main": [
1424
+ {
1425
+ "layout": "./src/ui/table-page.tsx#TablePage",
1426
+ "main": [
1427
+ {
1428
+ "list": {
1429
+ "columns": [
1430
+ {
1431
+ "field": "title",
1432
+ "cell": "text",
1433
+ "decided": "table"
1434
+ },
1435
+ {
1436
+ "field": "organization",
1437
+ "cell": "relationship",
1438
+ "decided": "table"
1439
+ },
1440
+ {
1441
+ "field": "fee",
1442
+ "cell": "./src/courses/ui/fee-cell.tsx#FeeCell",
1443
+ "decided": "field"
1444
+ },
1445
+ {
1446
+ "field": "archived",
1447
+ "cell": "checkbox",
1448
+ "decided": "table"
1449
+ },
1450
+ {
1451
+ "field": "createdAt",
1452
+ "cell": "datetime",
1453
+ "decided": "table"
1454
+ }
1455
+ ],
1456
+ "filters": [
1457
+ "organization",
1458
+ "title",
1459
+ "fee",
1460
+ "archived"
1461
+ ],
1462
+ "search": [
1463
+ "title"
1464
+ ],
1465
+ "sort": "-createdAt"
1466
+ }
1467
+ }
1468
+ ]
1469
+ }
1470
+ ]
1471
+ }
1472
+ },
1473
+ "view": {
1474
+ "path": "/courses/:id",
1475
+ "page": {
1476
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
1477
+ "header": [
1478
+ {
1479
+ "title": {}
1480
+ }
1481
+ ],
1482
+ "main": [
1483
+ {
1484
+ "layout": "./src/ui-platform/record-page.tsx#PlatformRecordPage",
1485
+ "main": [
1486
+ {
1487
+ "tabs": [
1488
+ {
1489
+ "tab": "details",
1490
+ "label": {
1491
+ "en": "Details",
1492
+ "ar": "التفاصيل"
1493
+ },
1494
+ "fields": [
1495
+ {
1496
+ "section": "about",
1497
+ "label": {
1498
+ "en": "About the course",
1499
+ "ar": "عن الدورة"
1500
+ },
1501
+ "fields": [
1502
+ {
1503
+ "field": "title",
1504
+ "component": "text",
1505
+ "decided": "table"
1506
+ },
1507
+ {
1508
+ "field": "summary",
1509
+ "component": "text",
1510
+ "decided": "table"
1511
+ },
1512
+ {
1513
+ "field": "details",
1514
+ "component": "richText",
1515
+ "decided": "table"
1516
+ }
1517
+ ]
1518
+ },
1519
+ {
1520
+ "section": "pricing",
1521
+ "label": {
1522
+ "en": "Pricing",
1523
+ "ar": "التسعير"
1524
+ },
1525
+ "fields": [
1526
+ {
1527
+ "row": [
1528
+ {
1529
+ "field": "fee",
1530
+ "component": "number",
1531
+ "decided": "table"
1532
+ },
1533
+ {
1534
+ "field": "currency",
1535
+ "component": "text",
1536
+ "decided": "table"
1537
+ }
1538
+ ]
1539
+ },
1540
+ {
1541
+ "field": "audience",
1542
+ "component": "text",
1543
+ "decided": "table"
1544
+ },
1545
+ {
1546
+ "field": "topics",
1547
+ "component": "textArray",
1548
+ "decided": "table"
1549
+ }
1550
+ ]
1551
+ },
1552
+ {
1553
+ "section": "teaching",
1554
+ "label": {
1555
+ "en": "Teaching",
1556
+ "ar": "التدريس"
1557
+ },
1558
+ "fields": [
1559
+ {
1560
+ "field": "delivery",
1561
+ "component": "text",
1562
+ "decided": "table"
1563
+ },
1564
+ {
1565
+ "field": "accessCode",
1566
+ "component": "text",
1567
+ "decided": "table"
1568
+ },
1569
+ {
1570
+ "field": "level",
1571
+ "component": "number",
1572
+ "decided": "table"
1573
+ },
1574
+ {
1575
+ "field": "opensOn",
1576
+ "component": "date",
1577
+ "decided": "table"
1578
+ }
1579
+ ]
1580
+ },
1581
+ {
1582
+ "section": "notes",
1583
+ "label": {
1584
+ "en": "Notes",
1585
+ "ar": "ملاحظات"
1586
+ },
1587
+ "fields": [
1588
+ {
1589
+ "field": "archiveReason",
1590
+ "component": "text",
1591
+ "decided": "table"
1592
+ }
1593
+ ]
1594
+ }
1595
+ ]
1596
+ },
1597
+ {
1598
+ "tab": "sessions",
1599
+ "label": {
1600
+ "en": "Sessions",
1601
+ "ar": "الجلسات"
1602
+ },
1603
+ "fields": [
1604
+ {
1605
+ "list": {
1606
+ "of": "sessions",
1607
+ "where": "course",
1608
+ "columns": [
1609
+ {
1610
+ "field": "startsAt",
1611
+ "cell": "datetime",
1612
+ "decided": "table"
1613
+ },
1614
+ {
1615
+ "field": "capacity",
1616
+ "cell": "number",
1617
+ "decided": "table"
1618
+ },
1619
+ {
1620
+ "field": "venue",
1621
+ "cell": "text",
1622
+ "decided": "table"
1623
+ },
1624
+ {
1625
+ "field": "format",
1626
+ "cell": "text",
1627
+ "decided": "table"
1628
+ },
1629
+ {
1630
+ "field": "archived",
1631
+ "cell": "checkbox",
1632
+ "decided": "table"
1633
+ }
1634
+ ],
1635
+ "filters": [
1636
+ "venue",
1637
+ "archived"
1638
+ ],
1639
+ "search": [
1640
+ "venue"
1641
+ ],
1642
+ "sort": "startsAt"
1643
+ }
1644
+ }
1645
+ ]
1646
+ }
1647
+ ]
1648
+ }
1649
+ ],
1650
+ "side": [
1651
+ {
1652
+ "section": "catalogue",
1653
+ "label": {
1654
+ "en": "Catalogue",
1655
+ "ar": "الدليل"
1656
+ },
1657
+ "fields": [
1658
+ {
1659
+ "field": "tags",
1660
+ "component": "relationship",
1661
+ "decided": "table"
1662
+ },
1663
+ {
1664
+ "field": "archived",
1665
+ "component": "checkbox",
1666
+ "decided": "table"
1667
+ },
1668
+ {
1669
+ "field": "notifications",
1670
+ "component": "checkbox",
1671
+ "decided": "table"
1672
+ }
1673
+ ]
1674
+ },
1675
+ {
1676
+ "section": "record",
1677
+ "label": {
1678
+ "en": "Record",
1679
+ "ar": "السجل"
1680
+ },
1681
+ "fields": [
1682
+ {
1683
+ "field": "organization",
1684
+ "component": "relationship",
1685
+ "decided": "table"
1686
+ },
1687
+ {
1688
+ "field": "createdAt",
1689
+ "component": "datetime",
1690
+ "decided": "table"
1691
+ },
1692
+ {
1693
+ "field": "updatedAt",
1694
+ "component": "datetime",
1695
+ "decided": "table"
1696
+ }
1697
+ ]
1698
+ }
1699
+ ]
1700
+ }
1701
+ ]
1702
+ }
1703
+ }
1704
+ }
1705
+ },
1706
+ "sessions": {
1707
+ "name": "sessions",
1708
+ "single": false,
1709
+ "fields": [
1710
+ {
1711
+ "name": "id",
1712
+ "kind": "uuid",
1713
+ "label": {
1714
+ "en": "ID",
1715
+ "ar": "المعرف"
1716
+ },
1717
+ "rules": {
1718
+ "required": false
1719
+ },
1720
+ "component": "uuid",
1721
+ "cell": "uuid"
1722
+ },
1723
+ {
1724
+ "name": "updatedAt",
1725
+ "kind": "datetime",
1726
+ "label": {
1727
+ "en": "Updated at",
1728
+ "ar": "تاريخ التعديل"
1729
+ },
1730
+ "rules": {
1731
+ "required": true,
1732
+ "defaultNow": true,
1733
+ "nowOnUpdate": true,
1734
+ "providedBy": {
1735
+ "create": "application",
1736
+ "update": "application"
1737
+ }
1738
+ },
1739
+ "component": "datetime",
1740
+ "cell": "datetime"
1741
+ },
1742
+ {
1743
+ "name": "createdAt",
1744
+ "kind": "datetime",
1745
+ "label": {
1746
+ "en": "Created at",
1747
+ "ar": "تاريخ الإنشاء"
1748
+ },
1749
+ "rules": {
1750
+ "required": true,
1751
+ "defaultNow": true,
1752
+ "index": true,
1753
+ "providedBy": {
1754
+ "create": "application",
1755
+ "update": "application"
1756
+ }
1757
+ },
1758
+ "component": "datetime",
1759
+ "cell": "datetime"
1760
+ },
1761
+ {
1762
+ "name": "organization",
1763
+ "kind": "relationship",
1764
+ "label": {
1765
+ "en": "Organization",
1766
+ "ar": "المؤسسة"
1767
+ },
1768
+ "rules": {
1769
+ "required": true,
1770
+ "index": true,
1771
+ "providedBy": {
1772
+ "create": "application",
1773
+ "update": "never"
1774
+ },
1775
+ "onDelete": "restrict"
1776
+ },
1777
+ "relationTo": "organization",
1778
+ "component": "relationship",
1779
+ "cell": "relationship"
1780
+ },
1781
+ {
1782
+ "name": "course",
1783
+ "kind": "relationship",
1784
+ "label": {
1785
+ "en": "Course",
1786
+ "ar": "الدورة"
1787
+ },
1788
+ "rules": {
1789
+ "required": true,
1790
+ "onDelete": "restrict"
1791
+ },
1792
+ "relationTo": "courses",
1793
+ "component": "relationship",
1794
+ "cell": "relationship"
1795
+ },
1796
+ {
1797
+ "name": "startsAt",
1798
+ "kind": "datetime",
1799
+ "label": {
1800
+ "en": "Starts at",
1801
+ "ar": "وقت البداية"
1802
+ },
1803
+ "rules": {
1804
+ "required": true
1805
+ },
1806
+ "component": "datetime",
1807
+ "cell": "datetime"
1808
+ },
1809
+ {
1810
+ "name": "capacity",
1811
+ "kind": "number",
1812
+ "label": {
1813
+ "en": "Capacity",
1814
+ "ar": "السعة"
1815
+ },
1816
+ "rules": {
1817
+ "min": 1,
1818
+ "required": false
1819
+ },
1820
+ "component": "number",
1821
+ "cell": "number"
1822
+ },
1823
+ {
1824
+ "name": "venue",
1825
+ "kind": "text",
1826
+ "label": {
1827
+ "en": "Venue",
1828
+ "ar": "المكان"
1829
+ },
1830
+ "rules": {
1831
+ "required": false
1832
+ },
1833
+ "options": [
1834
+ {
1835
+ "value": "online",
1836
+ "label": {
1837
+ "en": "Online",
1838
+ "ar": "عبر الإنترنت"
1839
+ }
1840
+ },
1841
+ {
1842
+ "value": "campus",
1843
+ "label": {
1844
+ "en": "Campus",
1845
+ "ar": "الحرم"
1846
+ }
1847
+ }
1848
+ ],
1849
+ "component": "text",
1850
+ "cell": "text"
1851
+ },
1852
+ {
1853
+ "name": "format",
1854
+ "kind": "text",
1855
+ "label": {
1856
+ "en": "Format",
1857
+ "ar": "الصيغة"
1858
+ },
1859
+ "rules": {
1860
+ "required": false
1861
+ },
1862
+ "options": [
1863
+ {
1864
+ "value": "workshop",
1865
+ "label": {
1866
+ "en": "Workshop",
1867
+ "ar": "ورشة عمل"
1868
+ }
1869
+ },
1870
+ {
1871
+ "value": "lecture",
1872
+ "label": {
1873
+ "en": "Lecture",
1874
+ "ar": "محاضرة"
1875
+ }
1876
+ }
1877
+ ],
1878
+ "component": "text",
1879
+ "cell": "text"
1880
+ },
1881
+ {
1882
+ "name": "archived",
1883
+ "kind": "checkbox",
1884
+ "label": {
1885
+ "en": "Archived",
1886
+ "ar": "مؤرشفة"
1887
+ },
1888
+ "rules": {
1889
+ "required": false
1890
+ },
1891
+ "component": "checkbox",
1892
+ "cell": "checkbox"
1893
+ },
1894
+ {
1895
+ "name": "details",
1896
+ "kind": "richText",
1897
+ "label": {
1898
+ "en": "Details",
1899
+ "ar": "التفاصيل"
1900
+ },
1901
+ "rules": {
1902
+ "required": false
1903
+ },
1904
+ "component": "richText",
1905
+ "cell": "richText",
1906
+ "sortable": false
1907
+ },
1908
+ {
1909
+ "name": "enrollments",
1910
+ "kind": "join",
1911
+ "label": {
1912
+ "en": "Enrollments",
1913
+ "ar": "التسجيلات"
1914
+ },
1915
+ "rules": {
1916
+ "required": false,
1917
+ "providedBy": {
1918
+ "create": "never",
1919
+ "update": "never"
1920
+ }
1921
+ },
1922
+ "relationTo": "enrollments",
1923
+ "on": "session",
1924
+ "component": "join",
1925
+ "cell": "join"
1926
+ }
1927
+ ],
1928
+ "operations": [
1929
+ {
1930
+ "name": "create",
1931
+ "effect": "create"
1932
+ },
1933
+ {
1934
+ "name": "update",
1935
+ "effect": "update"
1936
+ },
1937
+ {
1938
+ "name": "delete",
1939
+ "effect": "delete"
1940
+ },
1941
+ {
1942
+ "name": "find",
1943
+ "effect": "read"
1944
+ },
1945
+ {
1946
+ "name": "findByID",
1947
+ "effect": "read"
1948
+ },
1949
+ {
1950
+ "name": "count",
1951
+ "effect": "read"
1952
+ },
1953
+ {
1954
+ "name": "updateMany",
1955
+ "effect": "update",
1956
+ "updatesMany": true
1957
+ },
1958
+ {
1959
+ "name": "deleteMany",
1960
+ "effect": "delete"
1961
+ },
1962
+ {
1963
+ "name": "archiveMany",
1964
+ "effect": "update",
1965
+ "updatesMany": true
1966
+ }
1967
+ ],
1968
+ "useAsTitle": "startsAt",
1969
+ "pages": {
1970
+ "list": {
1971
+ "path": "/sessions",
1972
+ "page": {
1973
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
1974
+ "header": [
1975
+ {
1976
+ "title": {}
1977
+ }
1978
+ ],
1979
+ "main": [
1980
+ {
1981
+ "layout": "./src/ui/table-page.tsx#TablePage",
1982
+ "main": [
1983
+ {
1984
+ "list": {
1985
+ "columns": [
1986
+ {
1987
+ "field": "startsAt",
1988
+ "cell": "datetime",
1989
+ "decided": "table"
1990
+ },
1991
+ {
1992
+ "field": "organization",
1993
+ "cell": "relationship",
1994
+ "decided": "table"
1995
+ },
1996
+ {
1997
+ "field": "course",
1998
+ "cell": "relationship",
1999
+ "decided": "table"
2000
+ },
2001
+ {
2002
+ "field": "capacity",
2003
+ "cell": "number",
2004
+ "decided": "table"
2005
+ },
2006
+ {
2007
+ "field": "venue",
2008
+ "cell": "text",
2009
+ "decided": "table"
2010
+ }
2011
+ ],
2012
+ "filters": [
2013
+ "organization",
2014
+ "course",
2015
+ "venue",
2016
+ "archived"
2017
+ ],
2018
+ "search": [
2019
+ "venue",
2020
+ "course.title"
2021
+ ],
2022
+ "sort": "-startsAt"
2023
+ }
2024
+ }
2025
+ ]
2026
+ }
2027
+ ]
2028
+ }
2029
+ },
2030
+ "view": {
2031
+ "path": "/sessions/:id",
2032
+ "page": {
2033
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
2034
+ "header": [
2035
+ {
2036
+ "title": {}
2037
+ }
2038
+ ],
2039
+ "main": [
2040
+ {
2041
+ "layout": "./src/ui-platform/record-page.tsx#PlatformRecordPage",
2042
+ "main": [
2043
+ {
2044
+ "tabs": [
2045
+ {
2046
+ "tab": "details",
2047
+ "label": {
2048
+ "en": "Details",
2049
+ "ar": "التفاصيل"
2050
+ },
2051
+ "fields": [
2052
+ {
2053
+ "section": "schedule",
2054
+ "label": {
2055
+ "en": "Schedule",
2056
+ "ar": "الموعد"
2057
+ },
2058
+ "fields": [
2059
+ {
2060
+ "row": [
2061
+ {
2062
+ "field": "startsAt",
2063
+ "component": "datetime",
2064
+ "decided": "table"
2065
+ },
2066
+ {
2067
+ "field": "capacity",
2068
+ "component": "number",
2069
+ "decided": "table"
2070
+ }
2071
+ ]
2072
+ }
2073
+ ]
2074
+ },
2075
+ {
2076
+ "section": "place",
2077
+ "label": {
2078
+ "en": "Venue and format",
2079
+ "ar": "المكان والصيغة"
2080
+ },
2081
+ "fields": [
2082
+ {
2083
+ "row": [
2084
+ {
2085
+ "field": "venue",
2086
+ "component": "text",
2087
+ "decided": "table"
2088
+ },
2089
+ {
2090
+ "field": "format",
2091
+ "component": "text",
2092
+ "decided": "table"
2093
+ }
2094
+ ]
2095
+ }
2096
+ ]
2097
+ },
2098
+ {
2099
+ "section": "notes",
2100
+ "label": {
2101
+ "en": "Notes",
2102
+ "ar": "ملاحظات"
2103
+ },
2104
+ "fields": [
2105
+ {
2106
+ "field": "details",
2107
+ "component": "richText",
2108
+ "decided": "table"
2109
+ }
2110
+ ]
2111
+ }
2112
+ ]
2113
+ },
2114
+ {
2115
+ "tab": "enrollments",
2116
+ "label": {
2117
+ "en": "Enrollments",
2118
+ "ar": "التسجيلات"
2119
+ },
2120
+ "fields": [
2121
+ {
2122
+ "list": {
2123
+ "of": "enrollments",
2124
+ "where": "session",
2125
+ "columns": [
2126
+ {
2127
+ "field": "student",
2128
+ "cell": "relationship",
2129
+ "decided": "table"
2130
+ },
2131
+ {
2132
+ "field": "createdAt",
2133
+ "cell": "datetime",
2134
+ "decided": "table"
2135
+ }
2136
+ ]
2137
+ }
2138
+ }
2139
+ ]
2140
+ }
2141
+ ]
2142
+ }
2143
+ ],
2144
+ "side": [
2145
+ {
2146
+ "section": "course",
2147
+ "label": {
2148
+ "en": "Course",
2149
+ "ar": "الدورة"
2150
+ },
2151
+ "fields": [
2152
+ {
2153
+ "field": "course",
2154
+ "component": "relationship",
2155
+ "decided": "table"
2156
+ },
2157
+ {
2158
+ "field": "archived",
2159
+ "component": "checkbox",
2160
+ "decided": "table"
2161
+ }
2162
+ ]
2163
+ },
2164
+ {
2165
+ "section": "record",
2166
+ "label": {
2167
+ "en": "Record",
2168
+ "ar": "السجل"
2169
+ },
2170
+ "fields": [
2171
+ {
2172
+ "field": "organization",
2173
+ "component": "relationship",
2174
+ "decided": "table"
2175
+ },
2176
+ {
2177
+ "field": "createdAt",
2178
+ "component": "datetime",
2179
+ "decided": "table"
2180
+ },
2181
+ {
2182
+ "field": "updatedAt",
2183
+ "component": "datetime",
2184
+ "decided": "table"
2185
+ }
2186
+ ]
2187
+ }
2188
+ ]
2189
+ }
2190
+ ]
2191
+ }
2192
+ }
2193
+ }
2194
+ },
2195
+ "enrollments": {
2196
+ "name": "enrollments",
2197
+ "single": false,
2198
+ "fields": [
2199
+ {
2200
+ "name": "id",
2201
+ "kind": "uuid",
2202
+ "label": {
2203
+ "en": "ID",
2204
+ "ar": "المعرف"
2205
+ },
2206
+ "rules": {
2207
+ "required": false
2208
+ },
2209
+ "component": "uuid",
2210
+ "cell": "uuid"
2211
+ },
2212
+ {
2213
+ "name": "updatedAt",
2214
+ "kind": "datetime",
2215
+ "label": {
2216
+ "en": "Updated at",
2217
+ "ar": "تاريخ التعديل"
2218
+ },
2219
+ "rules": {
2220
+ "required": true,
2221
+ "defaultNow": true,
2222
+ "nowOnUpdate": true,
2223
+ "providedBy": {
2224
+ "create": "application",
2225
+ "update": "application"
2226
+ }
2227
+ },
2228
+ "component": "datetime",
2229
+ "cell": "datetime"
2230
+ },
2231
+ {
2232
+ "name": "createdAt",
2233
+ "kind": "datetime",
2234
+ "label": {
2235
+ "en": "Created at",
2236
+ "ar": "تاريخ الإنشاء"
2237
+ },
2238
+ "rules": {
2239
+ "required": true,
2240
+ "defaultNow": true,
2241
+ "index": true,
2242
+ "providedBy": {
2243
+ "create": "application",
2244
+ "update": "application"
2245
+ }
2246
+ },
2247
+ "component": "datetime",
2248
+ "cell": "datetime"
2249
+ },
2250
+ {
2251
+ "name": "organization",
2252
+ "kind": "relationship",
2253
+ "label": {
2254
+ "en": "Organization",
2255
+ "ar": "المؤسسة"
2256
+ },
2257
+ "rules": {
2258
+ "required": true,
2259
+ "index": true,
2260
+ "providedBy": {
2261
+ "create": "application",
2262
+ "update": "never"
2263
+ },
2264
+ "onDelete": "restrict"
2265
+ },
2266
+ "relationTo": "organization",
2267
+ "component": "relationship",
2268
+ "cell": "relationship"
2269
+ },
2270
+ {
2271
+ "name": "session",
2272
+ "kind": "relationship",
2273
+ "label": {
2274
+ "en": "Session",
2275
+ "ar": "الحصة"
2276
+ },
2277
+ "rules": {
2278
+ "required": true,
2279
+ "onDelete": "restrict"
2280
+ },
2281
+ "relationTo": "sessions",
2282
+ "component": "relationship",
2283
+ "cell": "./src/enrollments/ui/session-cell.tsx#SessionCell"
2284
+ },
2285
+ {
2286
+ "name": "student",
2287
+ "kind": "relationship",
2288
+ "label": {
2289
+ "en": "Student",
2290
+ "ar": "الطالب"
2291
+ },
2292
+ "rules": {
2293
+ "required": true,
2294
+ "onDelete": "restrict"
2295
+ },
2296
+ "relationTo": "user",
2297
+ "component": "relationship",
2298
+ "cell": "relationship"
2299
+ },
2300
+ {
2301
+ "name": "deletedAt",
2302
+ "kind": "datetime",
2303
+ "label": {
2304
+ "en": "Deleted at",
2305
+ "ar": "تاريخ الحذف"
2306
+ },
2307
+ "rules": {
2308
+ "providedBy": {
2309
+ "create": "never",
2310
+ "update": "never"
2311
+ },
2312
+ "required": false
2313
+ },
2314
+ "component": "datetime",
2315
+ "cell": "datetime"
2316
+ }
2317
+ ],
2318
+ "operations": [
2319
+ {
2320
+ "name": "create",
2321
+ "effect": "create"
2322
+ },
2323
+ {
2324
+ "name": "update",
2325
+ "effect": "update"
2326
+ },
2327
+ {
2328
+ "name": "delete",
2329
+ "effect": "delete"
2330
+ },
2331
+ {
2332
+ "name": "find",
2333
+ "effect": "read"
2334
+ },
2335
+ {
2336
+ "name": "findByID",
2337
+ "effect": "read"
2338
+ },
2339
+ {
2340
+ "name": "count",
2341
+ "effect": "read"
2342
+ },
2343
+ {
2344
+ "name": "updateMany",
2345
+ "effect": "update",
2346
+ "updatesMany": true
2347
+ },
2348
+ {
2349
+ "name": "deleteMany",
2350
+ "effect": "delete"
2351
+ }
2352
+ ],
2353
+ "useAsTitle": "student",
2354
+ "pages": {
2355
+ "list": {
2356
+ "path": "/enrollments",
2357
+ "page": {
2358
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
2359
+ "header": [
2360
+ {
2361
+ "title": {}
2362
+ }
2363
+ ],
2364
+ "main": [
2365
+ {
2366
+ "layout": "./src/ui/table-page.tsx#TablePage",
2367
+ "main": [
2368
+ {
2369
+ "list": {
2370
+ "columns": [
2371
+ {
2372
+ "field": "session",
2373
+ "cell": "./src/enrollments/ui/session-cell.tsx#SessionCell",
2374
+ "decided": "field"
2375
+ },
2376
+ {
2377
+ "field": "student",
2378
+ "cell": "relationship",
2379
+ "decided": "table"
2380
+ },
2381
+ {
2382
+ "field": "organization",
2383
+ "cell": "relationship",
2384
+ "decided": "table"
2385
+ },
2386
+ {
2387
+ "field": "createdAt",
2388
+ "cell": "datetime",
2389
+ "decided": "table"
2390
+ }
2391
+ ],
2392
+ "filters": [
2393
+ "organization",
2394
+ "session",
2395
+ "student"
2396
+ ],
2397
+ "sort": "-createdAt"
2398
+ }
2399
+ }
2400
+ ]
2401
+ }
2402
+ ]
2403
+ }
2404
+ },
2405
+ "view": {
2406
+ "path": "/enrollments/:id",
2407
+ "page": {
2408
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
2409
+ "header": [
2410
+ {
2411
+ "title": {}
2412
+ }
2413
+ ],
2414
+ "main": [
2415
+ {
2416
+ "layout": "./src/ui-platform/record-page.tsx#PlatformRecordPage",
2417
+ "main": [
2418
+ {
2419
+ "section": "enrollment",
2420
+ "label": {
2421
+ "en": "Enrollment",
2422
+ "ar": "التسجيل"
2423
+ },
2424
+ "fields": [
2425
+ {
2426
+ "field": "session",
2427
+ "component": "relationship",
2428
+ "decided": "table"
2429
+ },
2430
+ {
2431
+ "field": "student",
2432
+ "component": "relationship",
2433
+ "decided": "table"
2434
+ },
2435
+ {
2436
+ "field": "deletedAt",
2437
+ "component": "datetime",
2438
+ "decided": "table"
2439
+ }
2440
+ ]
2441
+ }
2442
+ ],
2443
+ "side": [
2444
+ {
2445
+ "section": "record",
2446
+ "label": {
2447
+ "en": "Record",
2448
+ "ar": "السجل"
2449
+ },
2450
+ "fields": [
2451
+ {
2452
+ "field": "organization",
2453
+ "component": "relationship",
2454
+ "decided": "table"
2455
+ },
2456
+ {
2457
+ "field": "createdAt",
2458
+ "component": "datetime",
2459
+ "decided": "table"
2460
+ },
2461
+ {
2462
+ "field": "updatedAt",
2463
+ "component": "datetime",
2464
+ "decided": "table"
2465
+ }
2466
+ ]
2467
+ }
2468
+ ]
2469
+ }
2470
+ ]
2471
+ }
2472
+ }
2473
+ }
2474
+ },
2475
+ "tags": {
2476
+ "name": "tags",
2477
+ "single": false,
2478
+ "fields": [
2479
+ {
2480
+ "name": "id",
2481
+ "kind": "uuid",
2482
+ "label": {
2483
+ "en": "ID",
2484
+ "ar": "المعرف"
2485
+ },
2486
+ "rules": {
2487
+ "required": false
2488
+ },
2489
+ "component": "uuid",
2490
+ "cell": "uuid"
2491
+ },
2492
+ {
2493
+ "name": "updatedAt",
2494
+ "kind": "datetime",
2495
+ "label": {
2496
+ "en": "Updated at",
2497
+ "ar": "تاريخ التعديل"
2498
+ },
2499
+ "rules": {
2500
+ "required": true,
2501
+ "defaultNow": true,
2502
+ "nowOnUpdate": true,
2503
+ "providedBy": {
2504
+ "create": "application",
2505
+ "update": "application"
2506
+ }
2507
+ },
2508
+ "component": "datetime",
2509
+ "cell": "datetime"
2510
+ },
2511
+ {
2512
+ "name": "createdAt",
2513
+ "kind": "datetime",
2514
+ "label": {
2515
+ "en": "Created at",
2516
+ "ar": "تاريخ الإنشاء"
2517
+ },
2518
+ "rules": {
2519
+ "required": true,
2520
+ "defaultNow": true,
2521
+ "index": true,
2522
+ "providedBy": {
2523
+ "create": "application",
2524
+ "update": "application"
2525
+ }
2526
+ },
2527
+ "component": "datetime",
2528
+ "cell": "datetime"
2529
+ },
2530
+ {
2531
+ "name": "organization",
2532
+ "kind": "relationship",
2533
+ "label": {
2534
+ "en": "Organization",
2535
+ "ar": "المؤسسة"
2536
+ },
2537
+ "rules": {
2538
+ "required": true,
2539
+ "index": true,
2540
+ "providedBy": {
2541
+ "create": "application",
2542
+ "update": "never"
2543
+ },
2544
+ "onDelete": "restrict"
2545
+ },
2546
+ "relationTo": "organization",
2547
+ "component": "relationship",
2548
+ "cell": "relationship"
2549
+ },
2550
+ {
2551
+ "name": "name",
2552
+ "kind": "text",
2553
+ "label": {
2554
+ "en": "Name",
2555
+ "ar": "الاسم"
2556
+ },
2557
+ "rules": {
2558
+ "localized": true,
2559
+ "required": true,
2560
+ "trim": true,
2561
+ "maxLength": 60,
2562
+ "index": true
2563
+ },
2564
+ "component": "text",
2565
+ "cell": "text"
2566
+ }
2567
+ ],
2568
+ "operations": [
2569
+ {
2570
+ "name": "create",
2571
+ "effect": "create"
2572
+ },
2573
+ {
2574
+ "name": "update",
2575
+ "effect": "update"
2576
+ },
2577
+ {
2578
+ "name": "delete",
2579
+ "effect": "delete"
2580
+ },
2581
+ {
2582
+ "name": "find",
2583
+ "effect": "read"
2584
+ },
2585
+ {
2586
+ "name": "findByID",
2587
+ "effect": "read"
2588
+ },
2589
+ {
2590
+ "name": "count",
2591
+ "effect": "read"
2592
+ },
2593
+ {
2594
+ "name": "updateMany",
2595
+ "effect": "update",
2596
+ "updatesMany": true
2597
+ },
2598
+ {
2599
+ "name": "deleteMany",
2600
+ "effect": "delete"
2601
+ }
2602
+ ],
2603
+ "useAsTitle": "name",
2604
+ "pages": {
2605
+ "list": {
2606
+ "path": "/tags",
2607
+ "page": {
2608
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
2609
+ "header": [
2610
+ {
2611
+ "title": {}
2612
+ }
2613
+ ],
2614
+ "main": [
2615
+ {
2616
+ "layout": "./src/ui/table-page.tsx#TablePage",
2617
+ "main": [
2618
+ {
2619
+ "list": {
2620
+ "columns": [
2621
+ {
2622
+ "field": "name",
2623
+ "cell": "text",
2624
+ "decided": "table"
2625
+ },
2626
+ {
2627
+ "field": "organization",
2628
+ "cell": "relationship",
2629
+ "decided": "table"
2630
+ },
2631
+ {
2632
+ "field": "createdAt",
2633
+ "cell": "datetime",
2634
+ "decided": "table"
2635
+ }
2636
+ ],
2637
+ "filters": [
2638
+ "organization"
2639
+ ],
2640
+ "search": [
2641
+ "name"
2642
+ ]
2643
+ }
2644
+ }
2645
+ ]
2646
+ }
2647
+ ]
2648
+ }
2649
+ },
2650
+ "view": {
2651
+ "path": "/tags/:id",
2652
+ "page": {
2653
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
2654
+ "header": [
2655
+ {
2656
+ "title": {}
2657
+ }
2658
+ ],
2659
+ "main": [
2660
+ {
2661
+ "layout": "./src/ui-platform/record-page.tsx#PlatformRecordPage",
2662
+ "main": [
2663
+ {
2664
+ "section": "tag",
2665
+ "label": {
2666
+ "en": "Tag",
2667
+ "ar": "الوسم"
2668
+ },
2669
+ "fields": [
2670
+ {
2671
+ "field": "name",
2672
+ "component": "text",
2673
+ "decided": "table"
2674
+ }
2675
+ ]
2676
+ }
2677
+ ],
2678
+ "side": [
2679
+ {
2680
+ "section": "record",
2681
+ "label": {
2682
+ "en": "Record",
2683
+ "ar": "السجل"
2684
+ },
2685
+ "fields": [
2686
+ {
2687
+ "field": "organization",
2688
+ "component": "relationship",
2689
+ "decided": "table"
2690
+ },
2691
+ {
2692
+ "field": "createdAt",
2693
+ "component": "datetime",
2694
+ "decided": "table"
2695
+ },
2696
+ {
2697
+ "field": "updatedAt",
2698
+ "component": "datetime",
2699
+ "decided": "table"
2700
+ }
2701
+ ]
2702
+ }
2703
+ ]
2704
+ }
2705
+ ]
2706
+ }
2707
+ }
2708
+ }
2709
+ },
2710
+ "roles": {
2711
+ "name": "roles",
2712
+ "single": false,
2713
+ "fields": [
2714
+ {
2715
+ "name": "id",
2716
+ "kind": "uuid",
2717
+ "label": {
2718
+ "en": "ID",
2719
+ "ar": "المعرف"
2720
+ },
2721
+ "rules": {
2722
+ "required": false
2723
+ },
2724
+ "component": "uuid",
2725
+ "cell": "uuid"
2726
+ },
2727
+ {
2728
+ "name": "updatedAt",
2729
+ "kind": "datetime",
2730
+ "label": {
2731
+ "en": "Updated at",
2732
+ "ar": "تاريخ التعديل"
2733
+ },
2734
+ "rules": {
2735
+ "required": true,
2736
+ "defaultNow": true,
2737
+ "nowOnUpdate": true,
2738
+ "providedBy": {
2739
+ "create": "application",
2740
+ "update": "application"
2741
+ }
2742
+ },
2743
+ "component": "datetime",
2744
+ "cell": "datetime"
2745
+ },
2746
+ {
2747
+ "name": "createdAt",
2748
+ "kind": "datetime",
2749
+ "label": {
2750
+ "en": "Created at",
2751
+ "ar": "تاريخ الإنشاء"
2752
+ },
2753
+ "rules": {
2754
+ "required": true,
2755
+ "defaultNow": true,
2756
+ "index": true,
2757
+ "providedBy": {
2758
+ "create": "application",
2759
+ "update": "application"
2760
+ }
2761
+ },
2762
+ "component": "datetime",
2763
+ "cell": "datetime"
2764
+ },
2765
+ {
2766
+ "name": "organization",
2767
+ "kind": "relationship",
2768
+ "label": {
2769
+ "en": "Organization",
2770
+ "ar": "المؤسسة"
2771
+ },
2772
+ "rules": {
2773
+ "required": true,
2774
+ "index": true,
2775
+ "providedBy": {
2776
+ "create": "application",
2777
+ "update": "never"
2778
+ },
2779
+ "onDelete": "restrict"
2780
+ },
2781
+ "relationTo": "organization",
2782
+ "component": "relationship",
2783
+ "cell": "relationship"
2784
+ },
2785
+ {
2786
+ "name": "name",
2787
+ "kind": "text",
2788
+ "label": {
2789
+ "en": "Name",
2790
+ "ar": "الاسم"
2791
+ },
2792
+ "rules": {
2793
+ "required": true,
2794
+ "unique": true,
2795
+ "trim": true,
2796
+ "maxLength": 60,
2797
+ "index": true
2798
+ },
2799
+ "component": "text",
2800
+ "cell": "text"
2801
+ },
2802
+ {
2803
+ "name": "label",
2804
+ "kind": "text",
2805
+ "label": {
2806
+ "en": "Label",
2807
+ "ar": "التسمية"
2808
+ },
2809
+ "rules": {
2810
+ "required": true,
2811
+ "localized": true,
2812
+ "trim": true,
2813
+ "maxLength": 60
2814
+ },
2815
+ "component": "text",
2816
+ "cell": "text"
2817
+ },
2818
+ {
2819
+ "name": "permissions",
2820
+ "kind": "textArray",
2821
+ "label": {
2822
+ "en": "Permissions",
2823
+ "ar": "الصلاحيات"
2824
+ },
2825
+ "rules": {
2826
+ "required": true
2827
+ },
2828
+ "component": "textArray",
2829
+ "cell": "textArray"
2830
+ }
2831
+ ],
2832
+ "operations": [
2833
+ {
2834
+ "name": "create",
2835
+ "effect": "create"
2836
+ },
2837
+ {
2838
+ "name": "update",
2839
+ "effect": "update"
2840
+ },
2841
+ {
2842
+ "name": "delete",
2843
+ "effect": "delete"
2844
+ },
2845
+ {
2846
+ "name": "find",
2847
+ "effect": "read"
2848
+ },
2849
+ {
2850
+ "name": "findByID",
2851
+ "effect": "read"
2852
+ },
2853
+ {
2854
+ "name": "count",
2855
+ "effect": "read"
2856
+ },
2857
+ {
2858
+ "name": "updateMany",
2859
+ "effect": "update",
2860
+ "updatesMany": true
2861
+ },
2862
+ {
2863
+ "name": "deleteMany",
2864
+ "effect": "delete"
2865
+ }
2866
+ ],
2867
+ "useAsTitle": "label",
2868
+ "pages": {
2869
+ "list": {
2870
+ "path": "/roles",
2871
+ "page": {
2872
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
2873
+ "header": [
2874
+ {
2875
+ "title": {}
2876
+ }
2877
+ ],
2878
+ "main": [
2879
+ {
2880
+ "layout": "./src/ui/table-page.tsx#TablePage",
2881
+ "main": [
2882
+ {
2883
+ "list": {
2884
+ "columns": [
2885
+ {
2886
+ "field": "label",
2887
+ "cell": "text",
2888
+ "decided": "table"
2889
+ },
2890
+ {
2891
+ "field": "organization",
2892
+ "cell": "relationship",
2893
+ "decided": "table"
2894
+ }
2895
+ ],
2896
+ "filters": [
2897
+ "organization"
2898
+ ],
2899
+ "search": [
2900
+ "label"
2901
+ ]
2902
+ }
2903
+ }
2904
+ ]
2905
+ }
2906
+ ]
2907
+ }
2908
+ },
2909
+ "view": {
2910
+ "path": "/roles/:id",
2911
+ "page": {
2912
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
2913
+ "header": [
2914
+ {
2915
+ "title": {}
2916
+ }
2917
+ ],
2918
+ "main": [
2919
+ {
2920
+ "layout": "./src/ui-platform/record-page.tsx#PlatformRecordPage",
2921
+ "main": [
2922
+ {
2923
+ "section": "role",
2924
+ "label": {
2925
+ "en": "Role",
2926
+ "ar": "الدور"
2927
+ },
2928
+ "fields": [
2929
+ {
2930
+ "field": "label",
2931
+ "component": "text",
2932
+ "decided": "table"
2933
+ },
2934
+ {
2935
+ "field": "permissions",
2936
+ "component": "textArray",
2937
+ "cell": "./src/roles/ui/roles.tsx#Permissions",
2938
+ "decided": "table"
2939
+ }
2940
+ ]
2941
+ }
2942
+ ],
2943
+ "side": [
2944
+ {
2945
+ "section": "record",
2946
+ "label": {
2947
+ "en": "Record",
2948
+ "ar": "السجل"
2949
+ },
2950
+ "fields": [
2951
+ {
2952
+ "field": "organization",
2953
+ "component": "relationship",
2954
+ "decided": "table"
2955
+ },
2956
+ {
2957
+ "field": "createdAt",
2958
+ "component": "datetime",
2959
+ "decided": "table"
2960
+ },
2961
+ {
2962
+ "field": "updatedAt",
2963
+ "component": "datetime",
2964
+ "decided": "table"
2965
+ }
2966
+ ]
2967
+ }
2968
+ ]
2969
+ }
2970
+ ]
2971
+ }
2972
+ }
2973
+ }
2974
+ },
2975
+ "memberRoles": {
2976
+ "name": "memberRoles",
2977
+ "single": false,
2978
+ "fields": [
2979
+ {
2980
+ "name": "id",
2981
+ "kind": "uuid",
2982
+ "label": {
2983
+ "en": "ID",
2984
+ "ar": "المعرف"
2985
+ },
2986
+ "rules": {
2987
+ "required": false
2988
+ },
2989
+ "component": "uuid",
2990
+ "cell": "uuid"
2991
+ },
2992
+ {
2993
+ "name": "updatedAt",
2994
+ "kind": "datetime",
2995
+ "label": {
2996
+ "en": "Updated at",
2997
+ "ar": "تاريخ التعديل"
2998
+ },
2999
+ "rules": {
3000
+ "required": true,
3001
+ "defaultNow": true,
3002
+ "nowOnUpdate": true,
3003
+ "providedBy": {
3004
+ "create": "application",
3005
+ "update": "application"
3006
+ }
3007
+ },
3008
+ "component": "datetime",
3009
+ "cell": "datetime"
3010
+ },
3011
+ {
3012
+ "name": "createdAt",
3013
+ "kind": "datetime",
3014
+ "label": {
3015
+ "en": "Created at",
3016
+ "ar": "تاريخ الإنشاء"
3017
+ },
3018
+ "rules": {
3019
+ "required": true,
3020
+ "defaultNow": true,
3021
+ "index": true,
3022
+ "providedBy": {
3023
+ "create": "application",
3024
+ "update": "application"
3025
+ }
3026
+ },
3027
+ "component": "datetime",
3028
+ "cell": "datetime"
3029
+ },
3030
+ {
3031
+ "name": "organization",
3032
+ "kind": "relationship",
3033
+ "label": {
3034
+ "en": "Organization",
3035
+ "ar": "المؤسسة"
3036
+ },
3037
+ "rules": {
3038
+ "required": true,
3039
+ "index": true,
3040
+ "providedBy": {
3041
+ "create": "application",
3042
+ "update": "never"
3043
+ },
3044
+ "onDelete": "restrict"
3045
+ },
3046
+ "relationTo": "organization",
3047
+ "component": "relationship",
3048
+ "cell": "relationship"
3049
+ },
3050
+ {
3051
+ "name": "user",
3052
+ "kind": "relationship",
3053
+ "label": {
3054
+ "ar": "العضو",
3055
+ "en": "Member"
3056
+ },
3057
+ "rules": {
3058
+ "required": true,
3059
+ "index": true,
3060
+ "onDelete": "cascade"
3061
+ },
3062
+ "relationTo": "user",
3063
+ "component": "relationship",
3064
+ "cell": "relationship"
3065
+ },
3066
+ {
3067
+ "name": "role",
3068
+ "kind": "text",
3069
+ "label": {
3070
+ "ar": "الدور",
3071
+ "en": "Role"
3072
+ },
3073
+ "rules": {
3074
+ "required": true,
3075
+ "maxLength": 60,
3076
+ "index": true
3077
+ },
3078
+ "component": "text",
3079
+ "cell": "text"
3080
+ }
3081
+ ],
3082
+ "operations": [
3083
+ {
3084
+ "name": "create",
3085
+ "effect": "create"
3086
+ },
3087
+ {
3088
+ "name": "update",
3089
+ "effect": "update"
3090
+ },
3091
+ {
3092
+ "name": "delete",
3093
+ "effect": "delete"
3094
+ },
3095
+ {
3096
+ "name": "find",
3097
+ "effect": "read"
3098
+ },
3099
+ {
3100
+ "name": "findByID",
3101
+ "effect": "read"
3102
+ },
3103
+ {
3104
+ "name": "count",
3105
+ "effect": "read"
3106
+ },
3107
+ {
3108
+ "name": "updateMany",
3109
+ "effect": "update",
3110
+ "updatesMany": true
3111
+ },
3112
+ {
3113
+ "name": "deleteMany",
3114
+ "effect": "delete"
3115
+ }
3116
+ ],
3117
+ "useAsTitle": "user",
3118
+ "pages": {
3119
+ "list": {
3120
+ "path": "/member-roles",
3121
+ "page": {
3122
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
3123
+ "header": [
3124
+ {
3125
+ "title": {}
3126
+ }
3127
+ ],
3128
+ "main": [
3129
+ {
3130
+ "layout": "./src/ui/table-page.tsx#TablePage",
3131
+ "main": [
3132
+ {
3133
+ "list": {
3134
+ "columns": [
3135
+ {
3136
+ "field": "user",
3137
+ "cell": "relationship",
3138
+ "decided": "table"
3139
+ },
3140
+ {
3141
+ "field": "role",
3142
+ "cell": "./src/ui-platform/role-cells.tsx#RoleName",
3143
+ "decided": "leaf"
3144
+ },
3145
+ {
3146
+ "field": "organization",
3147
+ "cell": "relationship",
3148
+ "decided": "table"
3149
+ }
3150
+ ],
3151
+ "filters": [
3152
+ "organization",
3153
+ "user",
3154
+ "role"
3155
+ ],
3156
+ "search": [
3157
+ "user.name",
3158
+ "user.email"
3159
+ ]
3160
+ }
3161
+ }
3162
+ ]
3163
+ }
3164
+ ]
3165
+ }
3166
+ },
3167
+ "view": {
3168
+ "path": "/member-roles/:id",
3169
+ "page": {
3170
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
3171
+ "header": [
3172
+ {
3173
+ "title": {}
3174
+ }
3175
+ ],
3176
+ "main": [
3177
+ {
3178
+ "layout": "./src/ui-platform/record-page.tsx#PlatformRecordPage",
3179
+ "main": [
3180
+ {
3181
+ "section": "assignment",
3182
+ "label": {
3183
+ "en": "Assignment",
3184
+ "ar": "الإسناد"
3185
+ },
3186
+ "fields": [
3187
+ {
3188
+ "field": "user",
3189
+ "component": "relationship",
3190
+ "decided": "table"
3191
+ },
3192
+ {
3193
+ "field": "role",
3194
+ "component": "text",
3195
+ "cell": "./src/ui-platform/role-cells.tsx#RoleName",
3196
+ "decided": "table"
3197
+ }
3198
+ ]
3199
+ }
3200
+ ],
3201
+ "side": [
3202
+ {
3203
+ "section": "record",
3204
+ "label": {
3205
+ "en": "Record",
3206
+ "ar": "السجل"
3207
+ },
3208
+ "fields": [
3209
+ {
3210
+ "field": "organization",
3211
+ "component": "relationship",
3212
+ "decided": "table"
3213
+ },
3214
+ {
3215
+ "field": "createdAt",
3216
+ "component": "datetime",
3217
+ "decided": "table"
3218
+ },
3219
+ {
3220
+ "field": "updatedAt",
3221
+ "component": "datetime",
3222
+ "decided": "table"
3223
+ }
3224
+ ]
3225
+ }
3226
+ ]
3227
+ }
3228
+ ]
3229
+ }
3230
+ }
3231
+ }
3232
+ },
3233
+ "localUsers": {
3234
+ "name": "localUsers",
3235
+ "single": false,
3236
+ "fields": [
3237
+ {
3238
+ "name": "id",
3239
+ "kind": "uuid",
3240
+ "label": {
3241
+ "en": "ID",
3242
+ "ar": "المعرف"
3243
+ },
3244
+ "rules": {
3245
+ "required": false
3246
+ },
3247
+ "component": "uuid",
3248
+ "cell": "uuid"
3249
+ },
3250
+ {
3251
+ "name": "updatedAt",
3252
+ "kind": "datetime",
3253
+ "label": {
3254
+ "en": "Updated at",
3255
+ "ar": "تاريخ التعديل"
3256
+ },
3257
+ "rules": {
3258
+ "required": true,
3259
+ "defaultNow": true,
3260
+ "nowOnUpdate": true,
3261
+ "providedBy": {
3262
+ "create": "application",
3263
+ "update": "application"
3264
+ }
3265
+ },
3266
+ "component": "datetime",
3267
+ "cell": "datetime"
3268
+ },
3269
+ {
3270
+ "name": "createdAt",
3271
+ "kind": "datetime",
3272
+ "label": {
3273
+ "en": "Created at",
3274
+ "ar": "تاريخ الإنشاء"
3275
+ },
3276
+ "rules": {
3277
+ "required": true,
3278
+ "defaultNow": true,
3279
+ "index": true,
3280
+ "providedBy": {
3281
+ "create": "application",
3282
+ "update": "application"
3283
+ }
3284
+ },
3285
+ "component": "datetime",
3286
+ "cell": "datetime"
3287
+ },
3288
+ {
3289
+ "name": "email",
3290
+ "kind": "email",
3291
+ "label": {
3292
+ "en": "Email",
3293
+ "ar": "البريد الإلكتروني"
3294
+ },
3295
+ "rules": {
3296
+ "required": true,
3297
+ "unique": true,
3298
+ "lowercase": true,
3299
+ "trim": true
3300
+ },
3301
+ "component": "email",
3302
+ "cell": "email"
3303
+ },
3304
+ {
3305
+ "name": "hash",
3306
+ "kind": "text",
3307
+ "rules": {
3308
+ "required": true,
3309
+ "providedBy": {
3310
+ "create": "application",
3311
+ "update": "application"
3312
+ }
3313
+ },
3314
+ "component": "text",
3315
+ "cell": "text"
3316
+ },
3317
+ {
3318
+ "name": "salt",
3319
+ "kind": "text",
3320
+ "rules": {
3321
+ "required": true,
3322
+ "providedBy": {
3323
+ "create": "application",
3324
+ "update": "application"
3325
+ }
3326
+ },
3327
+ "component": "text",
3328
+ "cell": "text"
3329
+ },
3330
+ {
3331
+ "name": "sessions",
3332
+ "kind": "text",
3333
+ "rules": {
3334
+ "providedBy": {
3335
+ "create": "application",
3336
+ "update": "application"
3337
+ },
3338
+ "required": false
3339
+ },
3340
+ "component": "text",
3341
+ "cell": "text"
3342
+ },
3343
+ {
3344
+ "name": "loginAttempts",
3345
+ "kind": "number",
3346
+ "rules": {
3347
+ "providedBy": {
3348
+ "create": "application",
3349
+ "update": "application"
3350
+ },
3351
+ "required": false
3352
+ },
3353
+ "component": "number",
3354
+ "cell": "number"
3355
+ },
3356
+ {
3357
+ "name": "lockUntil",
3358
+ "kind": "datetime",
3359
+ "rules": {
3360
+ "providedBy": {
3361
+ "create": "application",
3362
+ "update": "application"
3363
+ },
3364
+ "required": false
3365
+ },
3366
+ "component": "datetime",
3367
+ "cell": "datetime"
3368
+ },
3369
+ {
3370
+ "name": "resetPasswordToken",
3371
+ "kind": "text",
3372
+ "rules": {
3373
+ "providedBy": {
3374
+ "create": "application",
3375
+ "update": "application"
3376
+ },
3377
+ "required": false
3378
+ },
3379
+ "component": "text",
3380
+ "cell": "text"
3381
+ },
3382
+ {
3383
+ "name": "resetPasswordAttempts",
3384
+ "kind": "number",
3385
+ "rules": {
3386
+ "providedBy": {
3387
+ "create": "application",
3388
+ "update": "application"
3389
+ },
3390
+ "required": false
3391
+ },
3392
+ "component": "number",
3393
+ "cell": "number"
3394
+ },
3395
+ {
3396
+ "name": "resetPasswordExpiration",
3397
+ "kind": "datetime",
3398
+ "rules": {
3399
+ "providedBy": {
3400
+ "create": "application",
3401
+ "update": "application"
3402
+ },
3403
+ "required": false
3404
+ },
3405
+ "component": "datetime",
3406
+ "cell": "datetime"
3407
+ },
3408
+ {
3409
+ "name": "_verified",
3410
+ "kind": "checkbox",
3411
+ "label": {
3412
+ "en": "Verified",
3413
+ "ar": "موثق"
3414
+ },
3415
+ "rules": {
3416
+ "required": false
3417
+ },
3418
+ "component": "checkbox",
3419
+ "cell": "checkbox"
3420
+ },
3421
+ {
3422
+ "name": "_verificationToken",
3423
+ "kind": "text",
3424
+ "rules": {
3425
+ "providedBy": {
3426
+ "create": "application",
3427
+ "update": "application"
3428
+ },
3429
+ "required": false
3430
+ },
3431
+ "component": "text",
3432
+ "cell": "text"
3433
+ }
3434
+ ],
3435
+ "operations": [
3436
+ {
3437
+ "name": "create",
3438
+ "effect": "create"
3439
+ },
3440
+ {
3441
+ "name": "update",
3442
+ "effect": "update"
3443
+ },
3444
+ {
3445
+ "name": "delete",
3446
+ "effect": "delete"
3447
+ },
3448
+ {
3449
+ "name": "find",
3450
+ "effect": "read"
3451
+ },
3452
+ {
3453
+ "name": "findByID",
3454
+ "effect": "read"
3455
+ },
3456
+ {
3457
+ "name": "count",
3458
+ "effect": "read"
3459
+ },
3460
+ {
3461
+ "name": "updateMany",
3462
+ "effect": "update",
3463
+ "updatesMany": true
3464
+ },
3465
+ {
3466
+ "name": "deleteMany",
3467
+ "effect": "delete"
3468
+ },
3469
+ {
3470
+ "name": "verify",
3471
+ "effect": "update"
3472
+ }
3473
+ ],
3474
+ "useAsTitle": "email",
3475
+ "pages": {
3476
+ "list": {
3477
+ "path": "/local-users",
3478
+ "page": {
3479
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
3480
+ "header": [
3481
+ {
3482
+ "title": {}
3483
+ }
3484
+ ],
3485
+ "main": [
3486
+ {
3487
+ "layout": "./src/ui/table-page.tsx#TablePage",
3488
+ "main": [
3489
+ {
3490
+ "list": {
3491
+ "columns": [
3492
+ {
3493
+ "field": "email",
3494
+ "cell": "email",
3495
+ "decided": "table"
3496
+ },
3497
+ {
3498
+ "field": "_verified",
3499
+ "cell": "checkbox",
3500
+ "decided": "table"
3501
+ },
3502
+ {
3503
+ "field": "createdAt",
3504
+ "cell": "datetime",
3505
+ "decided": "table"
3506
+ }
3507
+ ],
3508
+ "filters": [
3509
+ "_verified"
3510
+ ],
3511
+ "search": [
3512
+ "email"
3513
+ ],
3514
+ "row": [
3515
+ {
3516
+ "button": "verify",
3517
+ "label": {
3518
+ "en": "Verify",
3519
+ "ar": "توثيق"
3520
+ },
3521
+ "confirm": {
3522
+ "title": {
3523
+ "en": "Verify this account?",
3524
+ "ar": "توثيق هذا الحساب؟"
3525
+ },
3526
+ "body": {
3527
+ "en": "Its owner can sign in from now on.",
3528
+ "ar": "يستطيع صاحبه تسجيل الدخول من الآن."
3529
+ }
3530
+ },
3531
+ "when": {
3532
+ "or": [
3533
+ {
3534
+ "record._verified": {
3535
+ "exists": false
3536
+ }
3537
+ },
3538
+ {
3539
+ "record._verified": {
3540
+ "equals": false
3541
+ }
3542
+ }
3543
+ ]
3544
+ }
3545
+ }
3546
+ ]
3547
+ }
3548
+ }
3549
+ ]
3550
+ }
3551
+ ]
3552
+ }
3553
+ },
3554
+ "edit": {
3555
+ "path": "/local-users/:id",
3556
+ "page": {
3557
+ "shell": "./src/ui/app-shell.tsx#PlatformShell",
3558
+ "header": [
3559
+ {
3560
+ "title": {}
3561
+ },
3562
+ {
3563
+ "controls": {}
3564
+ }
3565
+ ],
3566
+ "main": [
3567
+ {
3568
+ "layout": "./src/ui-platform/record-page.tsx#PlatformRecordPage",
3569
+ "main": [
3570
+ {
3571
+ "form": [
3572
+ {
3573
+ "section": "verification",
3574
+ "label": {
3575
+ "en": "Verification",
3576
+ "ar": "التحقق"
3577
+ },
3578
+ "fields": [
3579
+ {
3580
+ "field": "email",
3581
+ "readOnly": true,
3582
+ "component": "email",
3583
+ "decided": "table"
3584
+ },
3585
+ {
3586
+ "field": "createdAt",
3587
+ "readOnly": true,
3588
+ "component": "datetime",
3589
+ "decided": "table"
3590
+ },
3591
+ {
3592
+ "field": "_verified",
3593
+ "component": "checkbox",
3594
+ "decided": "table"
3595
+ }
3596
+ ]
3597
+ }
3598
+ ]
3599
+ }
3600
+ ]
3601
+ }
3602
+ ]
3603
+ }
3604
+ }
3605
+ }
3606
+ }
3607
+ },
3608
+ "maxLimit": 100
3609
+ }