create-mithaq 0.1.1 → 0.2.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.
- package/LICENSES/openstatus-time-picker.txt +21 -0
- package/index.js +457 -63
- package/package.json +1 -1
- package/template/apps/{asas-platform → asas-backoffice}/package.json +5 -3
- package/template/apps/{asas-platform → asas-backoffice}/src/api.ts +1 -1
- package/template/apps/{asas-platform → asas-backoffice}/src/auth-frame.tsx +12 -12
- package/template/apps/asas-backoffice/src/components.ts +35 -0
- package/template/apps/asas-backoffice/src/first-user.ts +14 -0
- package/template/apps/{asas-platform → asas-backoffice}/src/links.ts +1 -1
- package/template/apps/{asas-platform → asas-backoffice}/src/locale-switch.tsx +7 -5
- package/template/apps/asas-backoffice/src/no-organization.tsx +5 -0
- package/template/apps/asas-backoffice/src/redirect.ts +1 -0
- package/template/apps/{asas-platform → asas-backoffice}/src/request-headers.ts +1 -1
- package/template/apps/asas-backoffice/src/routeTree.gen.ts +206 -0
- package/template/apps/asas-backoffice/src/router.tsx +18 -0
- package/template/apps/asas-backoffice/src/routes/(screens)/backoffice/files.ts +10 -0
- package/template/apps/{asas-platform/src/routes/(screens)/platform → asas-backoffice/src/routes/(screens)/backoffice}/screen.json +426 -64
- package/template/apps/{asas-platform/src/routes/(screens)/platform → asas-backoffice/src/routes/(screens)/backoffice}/types.ts +18 -0
- package/template/apps/{asas-platform/src/routes/(screens)/platform.$.tsx → asas-backoffice/src/routes/(screens)/backoffice.$.tsx} +4 -4
- package/template/apps/{asas-platform/src/routes/(screens)/platform.index.tsx → asas-backoffice/src/routes/(screens)/backoffice.index.tsx} +3 -3
- package/template/apps/{asas-platform/src/routes/(screens)/platform.tsx → asas-backoffice/src/routes/(screens)/backoffice.tsx} +3 -3
- package/template/apps/{asas-platform → asas-backoffice}/src/routes/__root.tsx +2 -2
- package/template/apps/asas-backoffice/src/routes/api/$.ts +34 -0
- package/template/apps/asas-backoffice/src/routes/auth.create-first-user.tsx +113 -0
- package/template/apps/{asas-platform → asas-backoffice}/src/routes/auth.sign-in.tsx +9 -4
- package/template/apps/{asas-platform → asas-backoffice}/src/routes/unauthorized.tsx +24 -12
- package/template/apps/{asas-platform → asas-backoffice}/src/screen-form.tsx +5 -3
- package/template/apps/{asas-platform → asas-backoffice}/src/screen-list.tsx +6 -5
- package/template/apps/{asas-platform → asas-backoffice}/src/screen-names.ts +1 -1
- package/template/apps/{asas-platform → asas-backoffice}/src/screens.tsx +46 -26
- package/template/apps/asas-backoffice/src/server.ts +30 -0
- package/template/apps/{asas-platform → asas-backoffice}/src/slide.ts +1 -1
- package/template/apps/{asas-platform → asas-backoffice}/src/start.ts +1 -1
- package/template/apps/{asas-platform → asas-backoffice}/src/styles.css +9 -7
- package/template/apps/{asas-platform → asas-backoffice}/tsconfig.json +2 -2
- package/template/apps/{asas-platform → asas-backoffice}/vite.config.ts +7 -1
- package/template/apps/asas-tanstack/package.json +4 -2
- package/template/apps/asas-tanstack/src/api.ts +1 -1
- package/template/apps/asas-tanstack/src/auth-frame.tsx +12 -12
- package/template/apps/asas-tanstack/src/choose-password.tsx +150 -0
- package/template/apps/asas-tanstack/src/components.ts +35 -0
- package/template/apps/asas-tanstack/src/copy.ts +416 -79
- package/template/apps/asas-tanstack/src/first-run.ts +16 -0
- package/template/apps/asas-tanstack/src/links.ts +1 -1
- package/template/apps/asas-tanstack/src/locale-switch.tsx +7 -5
- package/template/apps/asas-tanstack/src/no-organization.tsx +108 -0
- package/template/apps/asas-tanstack/src/redirect.ts +20 -1
- package/template/apps/asas-tanstack/src/request-headers.ts +1 -1
- package/template/apps/asas-tanstack/src/routeTree.gen.ts +42 -0
- package/template/apps/asas-tanstack/src/router.tsx +12 -1
- package/template/apps/asas-tanstack/src/routes/(screens)/dashboard/files.ts +9 -2
- package/template/apps/asas-tanstack/src/routes/(screens)/dashboard/screen.json +475 -116
- package/template/apps/asas-tanstack/src/routes/(screens)/dashboard/types.ts +4 -2
- package/template/apps/asas-tanstack/src/routes/(screens)/portal/files.ts +7 -2
- package/template/apps/asas-tanstack/src/routes/(screens)/portal/screen.json +83 -319
- package/template/apps/asas-tanstack/src/routes/(screens)/portal/types.ts +3 -1
- package/template/apps/asas-tanstack/src/routes/__root.tsx +1 -1
- package/template/apps/asas-tanstack/src/routes/auth.accept-invitation.tsx +14 -7
- package/template/apps/asas-tanstack/src/routes/auth.first-run.tsx +114 -0
- package/template/apps/asas-tanstack/src/routes/auth.forgot-password.tsx +2 -2
- package/template/apps/asas-tanstack/src/routes/auth.handoff.ts +5 -5
- package/template/apps/asas-tanstack/src/routes/auth.reset-password.tsx +7 -100
- package/template/apps/asas-tanstack/src/routes/auth.set-password.tsx +16 -0
- package/template/apps/asas-tanstack/src/routes/auth.sign-in.tsx +27 -15
- package/template/apps/asas-tanstack/src/routes/auth.sign-up.tsx +59 -38
- package/template/apps/asas-tanstack/src/routes/index.tsx +18 -14
- package/template/apps/asas-tanstack/src/routes/unauthorized.tsx +24 -12
- package/template/apps/asas-tanstack/src/screen-form.tsx +5 -3
- package/template/apps/asas-tanstack/src/screen-list.tsx +6 -5
- package/template/apps/asas-tanstack/src/screen-names.ts +1 -1
- package/template/apps/asas-tanstack/src/screens.tsx +46 -26
- package/template/apps/asas-tanstack/src/server.ts +10 -0
- package/template/apps/asas-tanstack/src/slide.ts +1 -1
- package/template/apps/asas-tanstack/src/styles.css +7 -3
- package/template/apps/asas-tanstack/tsconfig.json +2 -2
- package/template/apps/asas-tanstack/vite.config.ts +7 -1
- package/template/package.json +3 -3
- package/template/templates/asas/.claude/skills/add-field/SKILL.md +27 -0
- package/template/templates/asas/.claude/skills/add-kayan/SKILL.md +26 -0
- package/template/templates/asas/.claude/skills/eject-admin-piece/SKILL.md +28 -0
- package/template/templates/asas/.claude/skills/upgrade-mithaq/SKILL.md +35 -0
- package/template/templates/asas/.env.example +22 -5
- package/template/templates/asas/AGENTS.md +101 -0
- package/template/templates/asas/CLAUDE.md +1 -0
- package/template/templates/asas/README.md +1094 -0
- package/template/templates/asas/package.json +19 -4
- package/template/templates/asas/src/asas.ts +81 -56
- package/template/templates/asas/src/{platform-http.ts → backoffice-http.ts} +48 -27
- package/template/templates/asas/src/dev-setup.ts +112 -0
- package/template/templates/asas/src/local-database.ts +22 -0
- package/template/templates/asas/src/messages/account.json +129 -103
- package/template/templates/asas/src/messages/auditLog.json +223 -105
- package/template/templates/asas/src/messages/backofficeLog.json +132 -0
- package/template/templates/asas/src/messages/courses.json +256 -214
- package/template/templates/asas/src/messages/enrollments.json +45 -27
- package/template/templates/asas/src/messages/invitation.json +72 -56
- package/template/templates/asas/src/messages/localUsers.json +34 -28
- package/template/templates/asas/src/messages/media.json +31 -21
- package/template/templates/asas/src/messages/member.json +59 -39
- package/template/templates/asas/src/messages/memberRoles.json +37 -31
- package/template/templates/asas/src/messages/mithaq.json +206 -162
- package/template/templates/asas/src/messages/organization.json +63 -41
- package/template/templates/asas/src/messages/organizationRole.json +59 -47
- package/template/templates/asas/src/messages/roles.json +59 -45
- package/template/templates/asas/src/messages/session.json +99 -79
- package/template/templates/asas/src/messages/sessions.json +110 -80
- package/template/templates/asas/src/messages/settings.json +51 -53
- package/template/templates/asas/src/messages/tags.json +31 -21
- package/template/templates/asas/src/messages/user.json +109 -87
- package/template/templates/asas/src/messages/verification.json +59 -47
- package/template/templates/asas/src/migrations/20261014221355_tags_restrict/migration.sql +1 -0
- package/template/templates/asas/src/migrations/20261014221355_tags_restrict/snapshot.json +3881 -0
- package/template/templates/asas/src/migrations/20261014222218_one_seat_per_session/migration.sql +1 -0
- package/template/templates/asas/src/migrations/20261014222218_one_seat_per_session/snapshot.json +3894 -0
- package/template/templates/asas/src/migrations/20261014223522_session_archive_reason/migration.sql +1 -0
- package/template/templates/asas/src/migrations/20261014223522_session_archive_reason/snapshot.json +3907 -0
- package/template/templates/asas/src/migrations/20261014225728_course_archive_by_operation/migration.sql +1 -0
- package/template/templates/asas/src/migrations/20261014225728_course_archive_by_operation/snapshot.json +3907 -0
- package/template/templates/asas/src/migrations/20261015042444_organization_names/migration.sql +1 -0
- package/template/templates/asas/src/migrations/20261015042444_organization_names/snapshot.json +3920 -0
- package/template/templates/asas/src/migrations/20261015053212_member_last_seen/migration.sql +1 -0
- package/template/templates/asas/src/migrations/20261015053212_member_last_seen/snapshot.json +3933 -0
- package/template/templates/asas/src/migrations/20261015093203_activity_and_staff_history/migration.sql +15 -0
- package/template/templates/asas/src/migrations/20261015093203_activity_and_staff_history/snapshot.json +4113 -0
- package/template/templates/asas/src/migrations/20261015095752_portal/migration.sql +2 -0
- package/template/templates/asas/src/migrations/20261015095752_portal/snapshot.json +4113 -0
- package/template/templates/asas/src/migrations/20261015135529_better_auth_indexes/migration.sql +9 -0
- package/template/templates/asas/src/migrations/20261015135529_better_auth_indexes/snapshot.json +4302 -0
- package/template/templates/asas/src/migrations/20261015162438_audit_changes_json/migration.sql +27 -0
- package/template/templates/asas/src/migrations/20261015162438_audit_changes_json/snapshot.json +4289 -0
- package/template/templates/asas/src/migrations/schema.ts +1 -0
- package/template/templates/asas/src/mithaq.ts +4 -406
- package/template/templates/asas/src/organizations.ts +3 -0
- package/template/templates/asas/src/seed.ts +147 -45
- package/template/templates/asas/src/{ui-platform → ui-backoffice}/home.tsx +9 -9
- package/template/templates/asas/src/ui-backoffice/organization-actions.tsx +121 -0
- package/template/templates/asas/src/{ui-platform → ui-backoffice}/record-page.tsx +4 -4
- package/template/templates/asas/src/{ui-platform → ui-backoffice}/role-cells.tsx +13 -6
- package/template/templates/asas/src/{ui-platform → ui-backoffice}/user-actions.tsx +46 -48
- package/template/templates/asas/src/ui-dashboard/dashboard.tsx +10 -4
- package/template/templates/asas/src/ui-dashboard/home.tsx +73 -0
- package/template/templates/asas/src/ui-dashboard/members-card.tsx +147 -0
- package/template/templates/asas/src/ui-dashboard/members.tsx +637 -438
- package/template/templates/asas/src/ui-dashboard/versions.tsx +22 -8
- package/template/templates/asas/src/ui-portal/courses-home.tsx +96 -0
- package/template/templates/asas/src/ui-portal/home.tsx +9 -13
- package/template/templates/features/audit-log/audit-log/audit-log.ts +284 -0
- package/template/templates/features/audit-log/backoffice-log/backoffice-log.ts +67 -0
- package/template/templates/features/audit-log/index.ts +4 -0
- package/template/templates/features/audit-log/package.json +13 -0
- package/template/templates/features/auth/index.ts +11 -0
- package/template/templates/{asas/src → features/auth}/local-users/local-users.ts +7 -7
- package/template/templates/{auth → features/auth}/package.json +2 -3
- package/template/templates/{asas/src/kayan → features}/auth/user/account.access.ts +2 -2
- package/template/templates/{asas/src/kayan → features}/auth/user/account.ts +2 -2
- package/template/templates/{asas/src/kayan → features}/auth/user/invitation.access.ts +1 -1
- package/template/templates/{asas/src/kayan → features}/auth/user/invitation.ts +3 -3
- package/template/templates/{asas/src/kayan → features}/auth/user/member.access.ts +4 -4
- package/template/templates/{asas/src/kayan → features}/auth/user/member.screens.ts +5 -5
- package/template/templates/{asas/src/kayan → features}/auth/user/member.ts +4 -3
- package/template/templates/{asas/src/kayan → features}/auth/user/organization.access.ts +6 -6
- package/template/templates/{asas/src/kayan → features}/auth/user/organization.screens.ts +6 -6
- package/template/templates/{asas/src/kayan → features}/auth/user/organization.ts +2 -1
- package/template/templates/{asas/src/kayan → features}/auth/user/organizationRole.access.ts +2 -2
- package/template/templates/{asas/src/kayan → features}/auth/user/organizationRole.ts +3 -3
- package/template/templates/{asas/src/kayan → features}/auth/user/session.access.ts +2 -2
- package/template/templates/{asas/src/kayan → features}/auth/user/session.ts +2 -2
- package/template/templates/{asas/src/kayan → features}/auth/user/user.access.ts +8 -7
- package/template/templates/{asas/src/kayan → features}/auth/user/user.screens.ts +9 -9
- package/template/templates/{asas/src/kayan → features}/auth/user/user.ts +2 -2
- package/template/templates/{asas/src/kayan → features}/auth/user/verification.access.ts +2 -2
- package/template/templates/{asas/src/kayan → features}/auth/user/verification.ts +2 -2
- package/template/templates/{asas/src → features/courses}/courses/courses.ts +122 -133
- package/template/templates/features/courses/courses/cover-reads.ts +33 -0
- package/template/templates/features/courses/courses/ui/archived-badge.tsx +9 -0
- package/template/templates/{asas/src → features/courses}/courses/ui/fee-cell.tsx +1 -1
- package/template/templates/{asas/src → features/courses}/courses/ui/status-cell.tsx +5 -3
- package/template/templates/features/courses/courses/ui/unpublish-button.tsx +15 -0
- package/template/templates/features/courses/domain/archive.ts +39 -0
- package/template/templates/features/courses/domain/on-offer.ts +6 -0
- package/template/templates/features/courses/enrollments/enrollments.ts +309 -0
- package/template/templates/{asas/src → features/courses}/enrollments/ui/session-cell.tsx +17 -7
- package/template/templates/{asas/src → features/courses/enrollments}/ui/session-labels.tsx +3 -3
- package/template/templates/features/courses/index.ts +8 -0
- package/template/templates/features/courses/package.json +24 -0
- package/template/templates/features/courses/portal/ui/catalogue.tsx +86 -0
- package/template/templates/features/courses/portal/ui/course.tsx +176 -0
- package/template/templates/features/courses/portal/ui/enrollments.tsx +170 -0
- package/template/templates/features/courses/portal/ui/parts.tsx +95 -0
- package/template/templates/features/courses/portal/ui/reads.ts +76 -0
- package/template/templates/features/courses/portal/ui/rules.ts +87 -0
- package/template/templates/features/courses/portal/ui/shell.tsx +194 -0
- package/template/templates/features/courses/sessions/seats.ts +42 -0
- package/template/templates/{asas/src → features/courses}/sessions/sessions.ts +45 -14
- package/template/templates/features/media/index.ts +10 -0
- package/template/templates/{asas/src → features/media}/media/media.ts +34 -40
- package/template/templates/{asas/src → features/media}/media/ui/preview.tsx +2 -2
- package/template/templates/features/media/package.json +19 -0
- package/template/templates/features/roles/index.ts +4 -0
- package/template/templates/{asas/src → features/roles}/member-roles/member-roles.ts +15 -15
- package/template/templates/features/roles/package.json +21 -0
- package/template/templates/{asas/src → features/roles}/roles/roles.ts +23 -23
- package/template/templates/{asas/src → features/roles}/roles/ui/role-form.tsx +65 -24
- package/template/templates/{asas/src → features/roles}/roles/ui/roles.tsx +49 -25
- package/template/templates/features/settings/index.ts +3 -0
- package/template/templates/features/settings/package.json +13 -0
- package/template/templates/{asas/src → features/settings}/settings/settings.ts +12 -17
- package/template/templates/features/tags/index.ts +3 -0
- package/template/templates/features/tags/package.json +14 -0
- package/template/templates/{asas/src → features/tags}/tags/tags.ts +15 -15
- package/template/templates/mithaq/package.json +33 -0
- package/template/templates/mithaq/src/mail/index.ts +32 -0
- package/template/templates/mithaq/src/mail/mailers.ts +36 -0
- package/template/templates/{asas/src/audit-log/sink.ts → mithaq/src/mithaq/audit-sink.ts} +31 -9
- package/template/templates/{auth/src/platform-roles.ts → mithaq/src/mithaq/auth/backoffice-roles.ts} +44 -23
- package/template/templates/mithaq/src/mithaq/auth/index.ts +1859 -0
- package/template/templates/mithaq/src/mithaq/auth/organizations.ts +80 -0
- package/template/templates/{asas/src → mithaq/src/mithaq}/pages.ts +16 -7
- package/template/templates/mithaq/src/mithaq/rich-text-nodes.ts +19 -0
- package/template/templates/mithaq/src/mithaq.ts +593 -0
- package/template/templates/mithaq/src/roles/default-member-roles.ts +29 -0
- package/template/templates/{asas → mithaq}/src/roles/grants.ts +1 -1
- package/template/templates/mithaq/src/roles/member-access.ts +11 -0
- package/template/templates/{asas/src → mithaq/src/roles}/statements.ts +6 -4
- package/template/templates/mithaq/src/roles/system-roles.ts +16 -0
- package/template/templates/{asas/src → mithaq/src/roles}/tenant-access.ts +96 -57
- package/template/templates/{asas/src → mithaq/src/roles}/tenant-roles.ts +84 -25
- package/template/templates/{asas → mithaq}/src/steps/expected-updated-at.ts +2 -2
- package/template/templates/{asas → mithaq}/src/storage/index.ts +3 -1
- package/template/templates/mithaq/src/ui/activity-page.tsx +33 -0
- package/template/templates/mithaq/src/ui/activity.tsx +527 -0
- package/template/templates/{asas → mithaq}/src/ui/app-shell.tsx +27 -19
- package/template/templates/mithaq/src/ui/rich-text-nodes.tsx +33 -0
- package/template/templates/{asas → mithaq}/src/ui/screen-nav.tsx +1 -1
- package/template/templates/{asas → mithaq}/src/ui/top-shell.tsx +8 -8
- package/template/apps/asas-platform/src/components/mithaq/cells.tsx +0 -112
- package/template/apps/asas-platform/src/components/mithaq/controls.tsx +0 -650
- package/template/apps/asas-platform/src/components/mithaq/field-shell.tsx +0 -53
- package/template/apps/asas-platform/src/components/mithaq/filter-operators.ts +0 -108
- package/template/apps/asas-platform/src/components/mithaq/form.tsx +0 -1467
- package/template/apps/asas-platform/src/components/mithaq/list-columns.tsx +0 -108
- package/template/apps/asas-platform/src/components/mithaq/list-filters.tsx +0 -368
- package/template/apps/asas-platform/src/components/mithaq/list-pagination.tsx +0 -153
- package/template/apps/asas-platform/src/components/mithaq/list-query.ts +0 -432
- package/template/apps/asas-platform/src/components/mithaq/list-selection.tsx +0 -74
- package/template/apps/asas-platform/src/components/mithaq/list.tsx +0 -865
- package/template/apps/asas-platform/src/components/mithaq/nav.tsx +0 -871
- package/template/apps/asas-platform/src/components/mithaq/nodes.tsx +0 -1024
- package/template/apps/asas-platform/src/components/mithaq/relationship-cell.tsx +0 -127
- package/template/apps/asas-platform/src/components/mithaq/relationship-control.tsx +0 -400
- package/template/apps/asas-platform/src/components/mithaq/rich-text-nodes.ts +0 -6
- package/template/apps/asas-platform/src/components/mithaq/rich-text.tsx +0 -1083
- package/template/apps/asas-platform/src/components/mithaq/upload.tsx +0 -686
- package/template/apps/asas-platform/src/components/ui/drawer.tsx +0 -216
- package/template/apps/asas-platform/src/redirect.ts +0 -1
- package/template/apps/asas-platform/src/routeTree.gen.ts +0 -181
- package/template/apps/asas-platform/src/router.tsx +0 -7
- package/template/apps/asas-platform/src/routes/(screens)/platform/files.ts +0 -4
- package/template/apps/asas-platform/src/routes/api/$.ts +0 -30
- package/template/apps/asas-platform/src/server.ts +0 -20
- package/template/apps/asas-tanstack/src/components/mithaq/cells.tsx +0 -112
- package/template/apps/asas-tanstack/src/components/mithaq/controls.tsx +0 -650
- package/template/apps/asas-tanstack/src/components/mithaq/field-shell.tsx +0 -53
- package/template/apps/asas-tanstack/src/components/mithaq/filter-operators.ts +0 -108
- package/template/apps/asas-tanstack/src/components/mithaq/form.tsx +0 -1467
- package/template/apps/asas-tanstack/src/components/mithaq/list-columns.tsx +0 -108
- package/template/apps/asas-tanstack/src/components/mithaq/list-filters.tsx +0 -368
- package/template/apps/asas-tanstack/src/components/mithaq/list-pagination.tsx +0 -153
- package/template/apps/asas-tanstack/src/components/mithaq/list-query.ts +0 -432
- package/template/apps/asas-tanstack/src/components/mithaq/list-selection.tsx +0 -74
- package/template/apps/asas-tanstack/src/components/mithaq/list.tsx +0 -865
- package/template/apps/asas-tanstack/src/components/mithaq/nav.tsx +0 -871
- package/template/apps/asas-tanstack/src/components/mithaq/nodes.tsx +0 -1024
- package/template/apps/asas-tanstack/src/components/mithaq/relationship-cell.tsx +0 -127
- package/template/apps/asas-tanstack/src/components/mithaq/relationship-control.tsx +0 -400
- package/template/apps/asas-tanstack/src/components/mithaq/rich-text-nodes.ts +0 -6
- package/template/apps/asas-tanstack/src/components/mithaq/rich-text.tsx +0 -1083
- package/template/apps/asas-tanstack/src/components/mithaq/upload.tsx +0 -686
- package/template/apps/asas-tanstack/src/components/ui/drawer.tsx +0 -215
- package/template/templates/asas/src/audit-log/audit-log.ts +0 -187
- package/template/templates/asas/src/audit-log/ui/activity.tsx +0 -243
- package/template/templates/asas/src/courses/ui/archive-button.tsx +0 -25
- package/template/templates/asas/src/courses/ui/no-courses-on-offer.tsx +0 -11
- package/template/templates/asas/src/courses/ui/on-offer.ts +0 -6
- package/template/templates/asas/src/enrollments/enrollments.ts +0 -137
- package/template/templates/asas/src/rich-text-nodes.ts +0 -11
- package/template/templates/asas/src/roles.ts +0 -16
- package/template/templates/asas/src/ui/rich-text-nodes.tsx +0 -15
- package/template/templates/asas/src/ui-platform/organization-actions.tsx +0 -114
- package/template/templates/auth/src/index.ts +0 -690
- /package/template/apps/{asas-platform → asas-backoffice}/components.json +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/gitignore +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/public/favicon.svg +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/accordion.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/alert-dialog.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/avatar.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/badge.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/breadcrumb.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/button-group.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/button.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/calendar.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/card.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/chart.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/checkbox.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/collapsible.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/combobox.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/dialog.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/direction.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/directional-icon.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/dropdown-menu.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/field.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/input-group.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/input-otp.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/input.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/label.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/popover.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/radio-group.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/resizable.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/scroll-area.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/select.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/separator.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/sheet.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/sidebar.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/skeleton.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/slider.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/spinner.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/switch.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/table.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/tabs.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/textarea.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/toggle-group.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/toggle.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/components/ui/tooltip.tsx +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/copy.ts +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/hooks/use-mobile.ts +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/lib/utils.ts +0 -0
- /package/template/apps/{asas-platform → asas-backoffice}/src/theme.ts +0 -0
- /package/template/templates/{asas/src/kayan → features}/auth/user/index.ts +0 -0
- /package/template/templates/{asas/src → features/courses}/courses/ui/no-courses.tsx +0 -0
- /package/template/templates/{asas → mithaq}/components.json +0 -0
- /package/template/templates/{asas → mithaq}/src/storage/defaults.ts +0 -0
- /package/template/templates/{asas → mithaq}/src/storage/local.ts +0 -0
- /package/template/templates/{asas → mithaq}/src/storage/r2.ts +0 -0
- /package/template/templates/{asas → mithaq}/src/storage/s3.ts +0 -0
- /package/template/templates/{asas → mithaq}/src/storage/uploadthing.ts +0 -0
- /package/template/templates/{asas → mithaq}/src/ui/kpi-card.tsx +0 -0
- /package/template/templates/{asas → mithaq}/src/ui/record-page.tsx +0 -0
- /package/template/templates/{asas → mithaq}/src/ui/table-page.tsx +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"name": "asas-
|
|
2
|
+
"name": "asas-backoffice",
|
|
3
3
|
"version": "0.0.0",
|
|
4
4
|
"private": true,
|
|
5
5
|
"type": "module",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"@fontsource-variable/figtree": "^5.3.0",
|
|
14
14
|
"@fontsource-variable/noto-sans": "^5.3.0",
|
|
15
15
|
"@fontsource/ibm-plex-sans-arabic": "^5.2.8",
|
|
16
|
-
"@hugeicons/core-free-icons": "
|
|
16
|
+
"@hugeicons/core-free-icons": "4.3.5",
|
|
17
17
|
"@hugeicons/react": "^1.1.6",
|
|
18
18
|
"@lexical/extension": "0.52.0",
|
|
19
19
|
"@lexical/link": "0.52.0",
|
|
@@ -34,9 +34,11 @@
|
|
|
34
34
|
"lexical": "0.52.0",
|
|
35
35
|
"lucide-react": "^1.16.0",
|
|
36
36
|
"mithaq": "*",
|
|
37
|
+
"mithaq-admin": "*",
|
|
37
38
|
"react": "^19.3.0",
|
|
38
39
|
"react-day-picker": "^10.0.1",
|
|
39
40
|
"react-dom": "^19.3.0",
|
|
41
|
+
"react-is": "^19.3.0",
|
|
40
42
|
"react-resizable-panels": "^4.14.1",
|
|
41
43
|
"recharts": "3.8.0",
|
|
42
44
|
"tw-animate-css": "^1.4.0"
|
|
@@ -47,9 +49,9 @@
|
|
|
47
49
|
"@types/react": "^19.3.0",
|
|
48
50
|
"@types/react-dom": "^19.3.0",
|
|
49
51
|
"@vitejs/plugin-react": "^6.0.2",
|
|
50
|
-
"mithaq-admin": "*",
|
|
51
52
|
"shadcn": "4.18.0",
|
|
52
53
|
"tailwindcss": "^4.3.0",
|
|
54
|
+
"typescript": "^7.0.2",
|
|
53
55
|
"vite": "^8.0.13"
|
|
54
56
|
}
|
|
55
57
|
}
|
|
@@ -144,4 +144,4 @@ export const authArm = async (path: string, body: unknown = {}) => {
|
|
|
144
144
|
// The status too, because a rate limit's refusal carries no code to read.
|
|
145
145
|
return { ok: response.ok, status: response.status, message: answered?.message, body: answered }
|
|
146
146
|
}
|
|
147
|
-
// mithaq-admin
|
|
147
|
+
// mithaq-admin 2d3ab739c92c6c2b397041b76bf4b23b2902b7a2 94db2fc49ad4391c0d1c2183cb41001dd08d62017c76af86cc5f611488c22c68
|
|
@@ -7,10 +7,10 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/com
|
|
|
7
7
|
import { Input } from '@/components/ui/input'
|
|
8
8
|
import { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput } from '@/components/ui/input-group'
|
|
9
9
|
import { authArm } from './api.ts'
|
|
10
|
-
import { FieldShell, describedBy } from '
|
|
10
|
+
import { FieldShell, describedBy } from 'mithaq-admin/field-shell.tsx'
|
|
11
11
|
import { refusalKey } from './copy.ts'
|
|
12
12
|
import { LocaleSwitch } from './locale-switch.tsx'
|
|
13
|
-
import {
|
|
13
|
+
import { landing } from './redirect.ts'
|
|
14
14
|
import { useCopy } from './routes/__root.tsx'
|
|
15
15
|
|
|
16
16
|
/** The one search key the auth pages read, off the raw search. */
|
|
@@ -21,8 +21,8 @@ export const redirectSearch = (search: Record<string, unknown>): { redirect?: st
|
|
|
21
21
|
export const signedInAs = async (actor: Promise<unknown>) => Boolean(((await actor.catch(() => null)) as { email?: unknown } | null)?.email)
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
|
-
* Whether this request carries a session,
|
|
25
|
-
* No auth page sends a referrer, since the reset page's address carries its token.
|
|
24
|
+
* Whether this request carries a session, the screens it opens, the first of them as `home`, which a link back names,
|
|
25
|
+
* and the provider's password bounds. No auth page sends a referrer, since the reset page's address carries its token.
|
|
26
26
|
*/
|
|
27
27
|
export const authGate = createServerFn({ method: 'GET' }).handler(async () => {
|
|
28
28
|
// Imported inside the server half so no auth page ships the screen host to the browser.
|
|
@@ -31,9 +31,9 @@ export const authGate = createServerFn({ method: 'GET' }).handler(async () => {
|
|
|
31
31
|
type Provider = { name: string; server: { $context: Promise<{ password: { config: { minPasswordLength: number; maxPasswordLength: number } } }> } }
|
|
32
32
|
const provider = (asas.auth.strategies as unknown as Provider[]).find((one) => one.name === 'user')!
|
|
33
33
|
const [signedIn, { password }] = await Promise.all([signedInAs(asas.auth.actor(getRequest().headers)), provider.server.$context])
|
|
34
|
-
const
|
|
35
|
-
const home: { path: string; name?: string } =
|
|
36
|
-
return { signedIn, home, password: { min: password.config.minPasswordLength, max: password.config.maxPasswordLength } }
|
|
34
|
+
const entered = signedIn ? ((await loadEnterable())?.screens ?? []) : []
|
|
35
|
+
const home: { path: string; name?: string } = entered[0] ?? { path: '/unauthorized' }
|
|
36
|
+
return { signedIn, home, screens: entered, password: { min: password.config.minPasswordLength, max: password.config.maxPasswordLength } }
|
|
37
37
|
})
|
|
38
38
|
|
|
39
39
|
/**
|
|
@@ -42,8 +42,8 @@ export const authGate = createServerFn({ method: 'GET' }).handler(async () => {
|
|
|
42
42
|
* route context.
|
|
43
43
|
*/
|
|
44
44
|
export const gate = async ({ search }: { search: { redirect?: string } }) => {
|
|
45
|
-
const { signedIn,
|
|
46
|
-
if (signedIn) throw redirect({ href:
|
|
45
|
+
const { signedIn, screens, password } = await authGate()
|
|
46
|
+
if (signedIn) throw redirect({ href: landing({ asked: search.redirect, screens }) })
|
|
47
47
|
return { password }
|
|
48
48
|
}
|
|
49
49
|
|
|
@@ -57,10 +57,10 @@ export const useHomeLabel = () => {
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
/** What the forgot and reset pages draw for someone already signed in: the way on, and a sign-out. */
|
|
60
|
-
export function AlreadySignedIn({ redirect: asked, home }: { redirect?: string; home: { path: string; name?: string } }) {
|
|
60
|
+
export function AlreadySignedIn({ redirect: asked, home, screens }: { redirect?: string; home: { path: string; name?: string }; screens: readonly { name: string; path: string }[] }) {
|
|
61
61
|
const { t } = useCopy()
|
|
62
62
|
const label = useHomeLabel()
|
|
63
|
-
const to =
|
|
63
|
+
const to = landing({ asked, screens })
|
|
64
64
|
return (
|
|
65
65
|
<AuthFrame title={t('auth.alreadySignedIn', 'You are already signed in')}>
|
|
66
66
|
<div className="grid gap-4">
|
|
@@ -147,4 +147,4 @@ export function AuthBox({
|
|
|
147
147
|
</FieldShell>
|
|
148
148
|
)
|
|
149
149
|
}
|
|
150
|
-
// mithaq-admin
|
|
150
|
+
// mithaq-admin 0.0.0 e498423cf4a61adb8cf6358d043d31ae92d853de4c6939a9c0fe138c848b7211
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Language } from 'asas'
|
|
2
|
+
import type { ComponentsOf } from 'mithaq-admin/components.tsx'
|
|
3
|
+
import { defaultComponents } from 'mithaq-admin/default-components.tsx'
|
|
4
|
+
// add-on: rich-text
|
|
5
|
+
import { richTextComponents } from 'mithaq-admin/rich-text.tsx'
|
|
6
|
+
// end add-on: rich-text
|
|
7
|
+
// add-on: uploads
|
|
8
|
+
import { uploadComponents } from 'mithaq-admin/upload.tsx'
|
|
9
|
+
// end add-on: uploads
|
|
10
|
+
|
|
11
|
+
// Typed against the language, so a kind of the project's own with no control or cell here is a type error, and so
|
|
12
|
+
// is leaving out the rich text or files add-on while the language holds its kind.
|
|
13
|
+
// Spread defaultComponents.controls or defaultComponents.cells to add or replace one.
|
|
14
|
+
// A file of its own, so the server entry reads the map without evaluating the router and its route tree.
|
|
15
|
+
export const components: ComponentsOf<Language> = {
|
|
16
|
+
...defaultComponents,
|
|
17
|
+
controls: {
|
|
18
|
+
...defaultComponents.controls,
|
|
19
|
+
// add-on: rich-text
|
|
20
|
+
...richTextComponents.controls,
|
|
21
|
+
// end add-on: rich-text
|
|
22
|
+
// add-on: uploads
|
|
23
|
+
...uploadComponents.controls,
|
|
24
|
+
// end add-on: uploads
|
|
25
|
+
},
|
|
26
|
+
cells: {
|
|
27
|
+
...defaultComponents.cells,
|
|
28
|
+
// add-on: rich-text
|
|
29
|
+
...richTextComponents.cells,
|
|
30
|
+
// end add-on: rich-text
|
|
31
|
+
// add-on: uploads
|
|
32
|
+
...uploadComponents.cells,
|
|
33
|
+
// end add-on: uploads
|
|
34
|
+
},
|
|
35
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { createServerFn } from '@tanstack/react-start'
|
|
2
|
+
|
|
3
|
+
type FirstUser = { initialized: true } | { initialized: false; code: 'none' | 'required' | 'unset' }
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Whether the backoffice has an administrator yet, and while it has none whether making one asks for
|
|
7
|
+
* the setup code: the provider's own `init`, read in process.
|
|
8
|
+
*/
|
|
9
|
+
export const firstUser = createServerFn({ method: 'GET' }).handler(async () => {
|
|
10
|
+
// Imported inside the server half so no page ships the provider to the browser.
|
|
11
|
+
const { asas } = await import('asas')
|
|
12
|
+
type Provider = { name: string; server: { api: { init(): Promise<FirstUser> } } }
|
|
13
|
+
return (asas.auth.strategies as unknown as Provider[]).find((one) => one.name === 'user')!.server.api.init()
|
|
14
|
+
})
|
|
@@ -35,4 +35,4 @@ export const clampedHref = ({ href, page, totalPages }: { href: string; page: nu
|
|
|
35
35
|
else url.searchParams.delete('page')
|
|
36
36
|
return `${url.pathname}${url.search}${url.hash}`
|
|
37
37
|
}
|
|
38
|
-
// mithaq-admin
|
|
38
|
+
// mithaq-admin 2d3ab739c92c6c2b397041b76bf4b23b2902b7a2 4754cbac64eeac528e7e037173ad56ffa8d07df3e526e1191bbe3be400db97a5
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import { useRouter } from '@tanstack/react-router'
|
|
1
2
|
import { Button } from '@/components/ui/button'
|
|
2
|
-
import { localeEntries } from '
|
|
3
|
-
import { locales,
|
|
3
|
+
import { localeEntries } from 'mithaq-admin/locale-menu.ts'
|
|
4
|
+
import { locales, showLocale, type Locale } from './copy.ts'
|
|
4
5
|
|
|
5
|
-
/** The language switch
|
|
6
|
+
/** The language switch of the auth and landing pages, which redraws the page in place, so a form keeps what was typed. */
|
|
6
7
|
export function LocaleSwitch({ locale }: { locale: Locale }) {
|
|
8
|
+
const router = useRouter()
|
|
7
9
|
return (
|
|
8
10
|
<div className="flex items-center gap-1">
|
|
9
11
|
{localeEntries(locales, locale).map((entry) => (
|
|
@@ -14,7 +16,7 @@ export function LocaleSwitch({ locale }: { locale: Locale }) {
|
|
|
14
16
|
size="xs"
|
|
15
17
|
aria-current={entry.active}
|
|
16
18
|
aria-label={entry.label}
|
|
17
|
-
onClick={() =>
|
|
19
|
+
onClick={() => void showLocale({ to: entry.locale, router })}
|
|
18
20
|
>
|
|
19
21
|
<span className="hidden sm:inline">{entry.label}</span>
|
|
20
22
|
<span className="sm:hidden">{entry.locale.toUpperCase()}</span>
|
|
@@ -23,4 +25,4 @@ export function LocaleSwitch({ locale }: { locale: Locale }) {
|
|
|
23
25
|
</div>
|
|
24
26
|
)
|
|
25
27
|
}
|
|
26
|
-
// mithaq-admin
|
|
28
|
+
// mithaq-admin 0.0.0 37e32a32766452cd88389e2e4cc6c246ccc3ccb40bf941f8c1e3835b4e377f98
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { landing } from '../../asas-tanstack/src/redirect.ts'
|
|
@@ -8,4 +8,4 @@ export const mergedHeaders = (session: Headers, own?: HeadersInit): Headers => {
|
|
|
8
8
|
if (own) for (const [key, value] of new Headers(own)) if (key !== 'cookie') headers.set(key, value)
|
|
9
9
|
return headers
|
|
10
10
|
}
|
|
11
|
-
// mithaq-admin
|
|
11
|
+
// mithaq-admin 2d3ab739c92c6c2b397041b76bf4b23b2902b7a2 2969a3dafbf201d6eb6074ecda0e8f17e341cbd1ca176100350844e74ec23623
|
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
/* eslint-disable */
|
|
2
|
+
|
|
3
|
+
// @ts-nocheck
|
|
4
|
+
|
|
5
|
+
// noinspection JSUnusedGlobalSymbols
|
|
6
|
+
|
|
7
|
+
// This file was automatically generated by TanStack Router.
|
|
8
|
+
// You should NOT make any changes in this file as it will be overwritten.
|
|
9
|
+
// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
|
|
10
|
+
|
|
11
|
+
import { Route as rootRouteImport } from './routes/__root'
|
|
12
|
+
import { Route as UnauthorizedRouteImport } from './routes/unauthorized'
|
|
13
|
+
import { Route as screensBackofficeRouteImport } from './routes/(screens)/backoffice'
|
|
14
|
+
import { Route as ApiSplatRouteImport } from './routes/api/$'
|
|
15
|
+
import { Route as AuthCreateFirstUserRouteImport } from './routes/auth.create-first-user'
|
|
16
|
+
import { Route as AuthSignInRouteImport } from './routes/auth.sign-in'
|
|
17
|
+
import { Route as screensBackofficeIndexRouteImport } from './routes/(screens)/backoffice.index'
|
|
18
|
+
import { Route as screensBackofficeSplatRouteImport } from './routes/(screens)/backoffice.$'
|
|
19
|
+
|
|
20
|
+
const UnauthorizedRoute = UnauthorizedRouteImport.update({
|
|
21
|
+
id: '/unauthorized',
|
|
22
|
+
path: '/unauthorized',
|
|
23
|
+
getParentRoute: () => rootRouteImport,
|
|
24
|
+
} as any)
|
|
25
|
+
const screensBackofficeRoute = screensBackofficeRouteImport.update({
|
|
26
|
+
id: '/(screens)/backoffice',
|
|
27
|
+
path: '/backoffice',
|
|
28
|
+
getParentRoute: () => rootRouteImport,
|
|
29
|
+
} as any)
|
|
30
|
+
const ApiSplatRoute = ApiSplatRouteImport.update({
|
|
31
|
+
id: '/api/$',
|
|
32
|
+
path: '/api/$',
|
|
33
|
+
getParentRoute: () => rootRouteImport,
|
|
34
|
+
} as any)
|
|
35
|
+
const AuthCreateFirstUserRoute = AuthCreateFirstUserRouteImport.update({
|
|
36
|
+
id: '/auth/create-first-user',
|
|
37
|
+
path: '/auth/create-first-user',
|
|
38
|
+
getParentRoute: () => rootRouteImport,
|
|
39
|
+
} as any)
|
|
40
|
+
const AuthSignInRoute = AuthSignInRouteImport.update({
|
|
41
|
+
id: '/auth/sign-in',
|
|
42
|
+
path: '/auth/sign-in',
|
|
43
|
+
getParentRoute: () => rootRouteImport,
|
|
44
|
+
} as any)
|
|
45
|
+
const screensBackofficeIndexRoute = screensBackofficeIndexRouteImport.update({
|
|
46
|
+
id: '/',
|
|
47
|
+
path: '/',
|
|
48
|
+
getParentRoute: () => screensBackofficeRoute,
|
|
49
|
+
} as any)
|
|
50
|
+
const screensBackofficeSplatRoute = screensBackofficeSplatRouteImport.update({
|
|
51
|
+
id: '/$',
|
|
52
|
+
path: '/$',
|
|
53
|
+
getParentRoute: () => screensBackofficeRoute,
|
|
54
|
+
} as any)
|
|
55
|
+
|
|
56
|
+
export interface FileRoutesByFullPath {
|
|
57
|
+
'/unauthorized': typeof UnauthorizedRoute
|
|
58
|
+
'/backoffice': typeof screensBackofficeRouteWithChildren
|
|
59
|
+
'/api/$': typeof ApiSplatRoute
|
|
60
|
+
'/auth/create-first-user': typeof AuthCreateFirstUserRoute
|
|
61
|
+
'/auth/sign-in': typeof AuthSignInRoute
|
|
62
|
+
'/backoffice/$': typeof screensBackofficeSplatRoute
|
|
63
|
+
'/backoffice/': typeof screensBackofficeIndexRoute
|
|
64
|
+
}
|
|
65
|
+
export interface FileRoutesByTo {
|
|
66
|
+
'/unauthorized': typeof UnauthorizedRoute
|
|
67
|
+
'/api/$': typeof ApiSplatRoute
|
|
68
|
+
'/auth/create-first-user': typeof AuthCreateFirstUserRoute
|
|
69
|
+
'/auth/sign-in': typeof AuthSignInRoute
|
|
70
|
+
'/backoffice/$': typeof screensBackofficeSplatRoute
|
|
71
|
+
'/backoffice': typeof screensBackofficeIndexRoute
|
|
72
|
+
}
|
|
73
|
+
export interface FileRoutesById {
|
|
74
|
+
__root__: typeof rootRouteImport
|
|
75
|
+
'/unauthorized': typeof UnauthorizedRoute
|
|
76
|
+
'/(screens)/backoffice': typeof screensBackofficeRouteWithChildren
|
|
77
|
+
'/api/$': typeof ApiSplatRoute
|
|
78
|
+
'/auth/create-first-user': typeof AuthCreateFirstUserRoute
|
|
79
|
+
'/auth/sign-in': typeof AuthSignInRoute
|
|
80
|
+
'/(screens)/backoffice/$': typeof screensBackofficeSplatRoute
|
|
81
|
+
'/(screens)/backoffice/': typeof screensBackofficeIndexRoute
|
|
82
|
+
}
|
|
83
|
+
export interface FileRouteTypes {
|
|
84
|
+
fileRoutesByFullPath: FileRoutesByFullPath
|
|
85
|
+
fullPaths:
|
|
86
|
+
| '/unauthorized'
|
|
87
|
+
| '/backoffice'
|
|
88
|
+
| '/api/$'
|
|
89
|
+
| '/auth/create-first-user'
|
|
90
|
+
| '/auth/sign-in'
|
|
91
|
+
| '/backoffice/$'
|
|
92
|
+
| '/backoffice/'
|
|
93
|
+
fileRoutesByTo: FileRoutesByTo
|
|
94
|
+
to:
|
|
95
|
+
| '/unauthorized'
|
|
96
|
+
| '/api/$'
|
|
97
|
+
| '/auth/create-first-user'
|
|
98
|
+
| '/auth/sign-in'
|
|
99
|
+
| '/backoffice/$'
|
|
100
|
+
| '/backoffice'
|
|
101
|
+
id:
|
|
102
|
+
| '__root__'
|
|
103
|
+
| '/unauthorized'
|
|
104
|
+
| '/(screens)/backoffice'
|
|
105
|
+
| '/api/$'
|
|
106
|
+
| '/auth/create-first-user'
|
|
107
|
+
| '/auth/sign-in'
|
|
108
|
+
| '/(screens)/backoffice/$'
|
|
109
|
+
| '/(screens)/backoffice/'
|
|
110
|
+
fileRoutesById: FileRoutesById
|
|
111
|
+
}
|
|
112
|
+
export interface RootRouteChildren {
|
|
113
|
+
UnauthorizedRoute: typeof UnauthorizedRoute
|
|
114
|
+
screensBackofficeRoute: typeof screensBackofficeRouteWithChildren
|
|
115
|
+
ApiSplatRoute: typeof ApiSplatRoute
|
|
116
|
+
AuthCreateFirstUserRoute: typeof AuthCreateFirstUserRoute
|
|
117
|
+
AuthSignInRoute: typeof AuthSignInRoute
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
declare module '@tanstack/react-router' {
|
|
121
|
+
interface FileRoutesByPath {
|
|
122
|
+
'/unauthorized': {
|
|
123
|
+
id: '/unauthorized'
|
|
124
|
+
path: '/unauthorized'
|
|
125
|
+
fullPath: '/unauthorized'
|
|
126
|
+
preLoaderRoute: typeof UnauthorizedRouteImport
|
|
127
|
+
parentRoute: typeof rootRouteImport
|
|
128
|
+
}
|
|
129
|
+
'/(screens)/backoffice': {
|
|
130
|
+
id: '/(screens)/backoffice'
|
|
131
|
+
path: '/backoffice'
|
|
132
|
+
fullPath: '/backoffice'
|
|
133
|
+
preLoaderRoute: typeof screensBackofficeRouteImport
|
|
134
|
+
parentRoute: typeof rootRouteImport
|
|
135
|
+
}
|
|
136
|
+
'/api/$': {
|
|
137
|
+
id: '/api/$'
|
|
138
|
+
path: '/api/$'
|
|
139
|
+
fullPath: '/api/$'
|
|
140
|
+
preLoaderRoute: typeof ApiSplatRouteImport
|
|
141
|
+
parentRoute: typeof rootRouteImport
|
|
142
|
+
}
|
|
143
|
+
'/auth/create-first-user': {
|
|
144
|
+
id: '/auth/create-first-user'
|
|
145
|
+
path: '/auth/create-first-user'
|
|
146
|
+
fullPath: '/auth/create-first-user'
|
|
147
|
+
preLoaderRoute: typeof AuthCreateFirstUserRouteImport
|
|
148
|
+
parentRoute: typeof rootRouteImport
|
|
149
|
+
}
|
|
150
|
+
'/auth/sign-in': {
|
|
151
|
+
id: '/auth/sign-in'
|
|
152
|
+
path: '/auth/sign-in'
|
|
153
|
+
fullPath: '/auth/sign-in'
|
|
154
|
+
preLoaderRoute: typeof AuthSignInRouteImport
|
|
155
|
+
parentRoute: typeof rootRouteImport
|
|
156
|
+
}
|
|
157
|
+
'/(screens)/backoffice/': {
|
|
158
|
+
id: '/(screens)/backoffice/'
|
|
159
|
+
path: '/'
|
|
160
|
+
fullPath: '/backoffice/'
|
|
161
|
+
preLoaderRoute: typeof screensBackofficeIndexRouteImport
|
|
162
|
+
parentRoute: typeof screensBackofficeRoute
|
|
163
|
+
}
|
|
164
|
+
'/(screens)/backoffice/$': {
|
|
165
|
+
id: '/(screens)/backoffice/$'
|
|
166
|
+
path: '/$'
|
|
167
|
+
fullPath: '/backoffice/$'
|
|
168
|
+
preLoaderRoute: typeof screensBackofficeSplatRouteImport
|
|
169
|
+
parentRoute: typeof screensBackofficeRoute
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
interface screensBackofficeRouteChildren {
|
|
175
|
+
screensBackofficeSplatRoute: typeof screensBackofficeSplatRoute
|
|
176
|
+
screensBackofficeIndexRoute: typeof screensBackofficeIndexRoute
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
const screensBackofficeRouteChildren: screensBackofficeRouteChildren = {
|
|
180
|
+
screensBackofficeSplatRoute: screensBackofficeSplatRoute,
|
|
181
|
+
screensBackofficeIndexRoute: screensBackofficeIndexRoute,
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const screensBackofficeRouteWithChildren =
|
|
185
|
+
screensBackofficeRoute._addFileChildren(screensBackofficeRouteChildren)
|
|
186
|
+
|
|
187
|
+
const rootRouteChildren: RootRouteChildren = {
|
|
188
|
+
UnauthorizedRoute: UnauthorizedRoute,
|
|
189
|
+
screensBackofficeRoute: screensBackofficeRouteWithChildren,
|
|
190
|
+
ApiSplatRoute: ApiSplatRoute,
|
|
191
|
+
AuthCreateFirstUserRoute: AuthCreateFirstUserRoute,
|
|
192
|
+
AuthSignInRoute: AuthSignInRoute,
|
|
193
|
+
}
|
|
194
|
+
export const routeTree = rootRouteImport
|
|
195
|
+
._addFileChildren(rootRouteChildren)
|
|
196
|
+
._addFileTypes<FileRouteTypes>()
|
|
197
|
+
|
|
198
|
+
import type { getRouter } from './router.tsx'
|
|
199
|
+
import type { startInstance } from './start.ts'
|
|
200
|
+
declare module '@tanstack/react-start' {
|
|
201
|
+
interface Register {
|
|
202
|
+
ssr: true
|
|
203
|
+
router: Awaited<ReturnType<typeof getRouter>>
|
|
204
|
+
config: Awaited<ReturnType<typeof startInstance.getOptions>>
|
|
205
|
+
}
|
|
206
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createRouter } from '@tanstack/react-router'
|
|
2
|
+
import { routeTree } from './routeTree.gen'
|
|
3
|
+
import { flatSearch } from './screen-list.tsx'
|
|
4
|
+
import { ComponentsProvider, RouteError } from 'mithaq-admin/components.tsx'
|
|
5
|
+
import { components } from './components.ts'
|
|
6
|
+
|
|
7
|
+
// routeTree.gen.ts is committed: a clean checkout has to typecheck before any build.
|
|
8
|
+
// The search stays the URL's own pairs, one string each; a screen's list keeps its `qs` URL there.
|
|
9
|
+
export const getRouter = () =>
|
|
10
|
+
createRouter({
|
|
11
|
+
routeTree,
|
|
12
|
+
scrollRestoration: true,
|
|
13
|
+
...flatSearch,
|
|
14
|
+
// Around every route, so each screen draws its controls from this map.
|
|
15
|
+
Wrap: ({ children }) => <ComponentsProvider components={components}>{children}</ComponentsProvider>,
|
|
16
|
+
// Drawn in place of the route that threw, so the shell around it stays.
|
|
17
|
+
defaultErrorComponent: RouteError,
|
|
18
|
+
})
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
// Written by `mithaq generate screens`. Do not edit.
|
|
2
|
+
/// <reference types="vite/client" />
|
|
3
|
+
// Every file the `backoffice` screen's references name, each loaded when a page draws it, keyed as the reference prints it.
|
|
4
|
+
const named = (name: string, files: Record<string, () => Promise<unknown>>) => Object.fromEntries(Object.entries(files).map(([file, load]) => [`${name}:${file}`, load]))
|
|
5
|
+
export const files = {
|
|
6
|
+
...import.meta.glob(['./src/ui-backoffice/home.tsx', './src/ui-backoffice/organization-actions.tsx', './src/ui-backoffice/record-page.tsx', './src/ui-backoffice/role-cells.tsx', './src/ui-backoffice/user-actions.tsx', './src/ui-dashboard/theme-provider.tsx'], { base: '../../../../../../templates/asas/', exhaustive: true }),
|
|
7
|
+
...named('@asas/courses', import.meta.glob(['./courses/ui/fee-cell.tsx', './enrollments/ui/session-cell.tsx', './enrollments/ui/session-labels.tsx'], { base: '../../../../../../templates/features/courses/', exhaustive: true })),
|
|
8
|
+
...named('@asas/mithaq', import.meta.glob(['./src/ui/app-shell.tsx', './src/ui/rich-text-nodes.tsx', './src/ui/table-page.tsx'], { base: '../../../../../../templates/mithaq/', exhaustive: true })),
|
|
9
|
+
...named('@asas/roles', import.meta.glob(['./roles/ui/roles.tsx'], { base: '../../../../../../templates/features/roles/', exhaustive: true })),
|
|
10
|
+
}
|