From 696acf2f0663e7f64d3bd7d62855a6bc397e18e4 Mon Sep 17 00:00:00 2001 From: Jonas Tischer Date: Tue, 12 Dec 2023 17:33:44 +0100 Subject: [PATCH] Delete unnecessary files and add new components --- backend/.gitignore | 10 +- backend/backend/__init__.py | 0 backend/core/apps.py | 6 - backend/{backend => core}/asgi.py | 4 +- backend/core/management/__init__.py | 0 backend/core/management/commands/__init__.py | 0 .../core/management/commands/wait_for_db.py | 26 - backend/core/migrations/0001_initial.py | 46 - backend/core/migrations/__init__.py | 0 backend/{backend => core}/settings.py | 19 +- backend/core/tests/__init__.py | 0 backend/core/tests/test_commands.py | 34 - backend/{backend => core}/urls.py | 0 backend/{backend => core}/wsgi.py | 4 +- backend/manage.py | 2 +- backend/poetry.lock | 192 +- backend/pyproject.toml | 12 +- backend/requirements.txt | 8 +- backend/users/models.py | 3 - backend/users/tests/test_views.py | 2 - frontend/.gitignore | 2 + .../activation/[uid]/[token]/page.tsx | 0 .../app/{ => (auth)}/auth/facebook/page.tsx | 0 .../app/{ => (auth)}/auth/google/page.tsx | 0 frontend/app/(auth)/auth/login/page.tsx | 40 + frontend/app/(auth)/auth/register/page.tsx | 41 + frontend/app/(auth)/layout.tsx | 11 + .../password-reset/[uid]/[token]/page.tsx | 35 + frontend/app/(auth)/password-reset/page.tsx | 28 + .../_components/mobile-sidebar.tsx | 21 + .../app/(dashboard)/_components/navbar.tsx | 37 + .../(dashboard)/_components/sidebar-item.tsx | 56 + .../_components/sidebar-routes.tsx | 35 + .../app/(dashboard)/_components/sidebar.tsx | 17 + .../app/(dashboard)/_components/user-nav.tsx | 73 + .../{ => (dashboard)}/dashboard/layout.tsx | 0 .../app/{ => (dashboard)}/dashboard/page.tsx | 0 frontend/app/(dashboard)/layout.tsx | 25 + frontend/app/auth/login/page.tsx | 41 - frontend/app/auth/register/page.tsx | 41 - frontend/app/layout.tsx | 27 +- .../app/password-reset/[uid]/[token]/page.tsx | 35 - frontend/app/password-reset/page.tsx | 28 - frontend/components.json | 16 + frontend/components/common/Footer.tsx | 22 +- frontend/components/common/Logo.tsx | 14 + frontend/components/common/Navbar.tsx | 112 +- frontend/components/common/Select.tsx | 20 + frontend/components/common/SubmitButton.tsx | 33 + frontend/components/forms/Form.tsx | 9 +- frontend/components/forms/Input.tsx | 64 +- frontend/components/ui/avatar.tsx | 50 + frontend/components/ui/button.tsx | 56 + frontend/components/ui/calendar.tsx | 66 + frontend/components/ui/card.tsx | 79 + frontend/components/ui/icon-badge.tsx | 64 + .../ui/new-york/example/accordion-demo.tsx | 32 + .../ui/new-york/example/alert-demo.tsx | 19 + .../ui/new-york/example/alert-destructive.tsx | 19 + .../ui/new-york/example/alert-dialog-demo.tsx | 35 + .../ui/new-york/example/aspect-ratio-demo.tsx | 16 + .../ui/new-york/example/avatar-demo.tsx | 14 + .../ui/new-york/example/badge-demo.tsx | 5 + .../ui/new-york/example/badge-destructive.tsx | 5 + .../ui/new-york/example/badge-outline.tsx | 5 + .../ui/new-york/example/badge-secondary.tsx | 5 + .../ui/new-york/example/button-as-child.tsx | 11 + .../ui/new-york/example/button-demo.tsx | 5 + .../new-york/example/button-destructive.tsx | 5 + .../ui/new-york/example/button-ghost.tsx | 5 + .../ui/new-york/example/button-icon.tsx | 11 + .../ui/new-york/example/button-link.tsx | 5 + .../ui/new-york/example/button-loading.tsx | 12 + .../ui/new-york/example/button-outline.tsx | 5 + .../ui/new-york/example/button-secondary.tsx | 5 + .../ui/new-york/example/button-with-icon.tsx | 11 + .../ui/new-york/example/calendar-demo.tsx | 18 + .../ui/new-york/example/calendar-form.tsx | 101 + .../ui/new-york/example/card-demo.tsx | 78 + .../ui/new-york/example/card-with-form.tsx | 59 + .../new-york/example/cards/activity-goal.tsx | 132 + .../ui/new-york/example/cards/calendar.tsx | 26 + .../ui/new-york/example/cards/chat.tsx | 260 ++ .../example/cards/cookie-settings.tsx | 60 + .../new-york/example/cards/create-account.tsx | 60 + .../ui/new-york/example/cards/data-table.tsx | 335 +++ .../ui/new-york/example/cards/index.tsx | 63 + .../ui/new-york/example/cards/metric.tsx | 142 ++ .../new-york/example/cards/payment-method.tsx | 154 ++ .../new-york/example/cards/report-issue.tsx | 90 + .../ui/new-york/example/cards/share.tsx | 126 + .../ui/new-york/example/cards/stats.tsx | 131 + .../new-york/example/cards/team-members.tsx | 209 ++ .../ui/new-york/example/checkbox-demo.tsx | 17 + .../ui/new-york/example/checkbox-disabled.tsx | 15 + .../example/checkbox-form-multiple.tsx | 127 + .../new-york/example/checkbox-form-single.tsx | 73 + .../new-york/example/checkbox-with-text.tsx | 22 + .../ui/new-york/example/collapsible-demo.tsx | 46 + .../ui/new-york/example/combobox-demo.tsx | 91 + .../example/combobox-dropdown-menu.tsx | 102 + .../ui/new-york/example/combobox-form.tsx | 138 + .../ui/new-york/example/combobox-popover.tsx | 91 + .../ui/new-york/example/command-demo.tsx | 62 + .../ui/new-york/example/command-dialog.tsx | 87 + .../ui/new-york/example/context-menu-demo.tsx | 67 + .../ui/new-york/example/data-table-demo.tsx | 316 +++ .../ui/new-york/example/date-picker-demo.tsx | 43 + .../ui/new-york/example/date-picker-form.tsx | 101 + .../example/date-picker-with-presets.tsx | 65 + .../example/date-picker-with-range.tsx | 65 + .../new-york/example/dialog-close-button.tsx | 56 + .../ui/new-york/example/dialog-demo.tsx | 47 + .../example/dropdown-menu-checkboxes.tsx | 53 + .../new-york/example/dropdown-menu-demo.tsx | 75 + .../example/dropdown-menu-radio-group.tsx | 35 + .../ui/new-york/example/hover-card-demo.tsx | 43 + .../ui/new-york/example/input-demo.tsx | 5 + .../ui/new-york/example/input-disabled.tsx | 5 + .../ui/new-york/example/input-file.tsx | 11 + .../ui/new-york/example/input-form.tsx | 68 + .../ui/new-york/example/input-with-button.tsx | 11 + .../ui/new-york/example/input-with-label.tsx | 11 + .../ui/new-york/example/input-with-text.tsx | 12 + .../ui/new-york/example/label-demo.tsx | 13 + .../ui/new-york/example/menubar-demo.tsx | 107 + .../ui/new-york/example/mode-toggle.tsx | 40 + .../new-york/example/navigation-menu-demo.tsx | 145 ++ .../ui/new-york/example/popover-demo.tsx | 62 + .../ui/new-york/example/progress-demo.tsx | 16 + .../ui/new-york/example/radio-group-demo.tsx | 21 + .../ui/new-york/example/radio-group-form.tsx | 88 + .../ui/new-york/example/scroll-area-demo.tsx | 26 + .../example/scroll-area-horizontal-demo.tsx | 53 + .../ui/new-york/example/select-demo.tsx | 31 + .../ui/new-york/example/select-form.tsx | 84 + .../ui/new-york/example/select-scrollable.tsx | 75 + .../ui/new-york/example/separator-demo.tsx | 22 + .../ui/new-york/example/sheet-demo.tsx | 50 + .../ui/new-york/example/sheet-side.tsx | 60 + .../ui/new-york/example/skeleton-demo.tsx | 13 + .../ui/new-york/example/slider-demo.tsx | 16 + .../ui/new-york/example/switch-demo.tsx | 11 + .../ui/new-york/example/switch-form.tsx | 97 + .../ui/new-york/example/table-demo.tsx | 87 + .../ui/new-york/example/tabs-demo.tsx | 74 + .../ui/new-york/example/textarea-demo.tsx | 5 + .../ui/new-york/example/textarea-disabled.tsx | 5 + .../ui/new-york/example/textarea-form.tsx | 74 + .../new-york/example/textarea-with-button.tsx | 11 + .../new-york/example/textarea-with-label.tsx | 11 + .../new-york/example/textarea-with-text.tsx | 14 + .../ui/new-york/example/toast-demo.tsx | 26 + .../ui/new-york/example/toast-destructive.tsx | 25 + .../ui/new-york/example/toast-simple.tsx | 21 + .../ui/new-york/example/toast-with-action.tsx | 24 + .../ui/new-york/example/toast-with-title.tsx | 22 + .../ui/new-york/example/toggle-demo.tsx | 11 + .../ui/new-york/example/toggle-disabled.tsx | 11 + .../ui/new-york/example/toggle-group-demo.tsx | 26 + .../example/toggle-group-disabled.tsx | 26 + .../ui/new-york/example/toggle-group-lg.tsx | 26 + .../new-york/example/toggle-group-outline.tsx | 26 + .../new-york/example/toggle-group-single.tsx | 26 + .../ui/new-york/example/toggle-group-sm.tsx | 26 + .../ui/new-york/example/toggle-lg.tsx | 11 + .../ui/new-york/example/toggle-outline.tsx | 11 + .../ui/new-york/example/toggle-sm.tsx | 11 + .../ui/new-york/example/toggle-with-text.tsx | 12 + .../ui/new-york/example/tooltip-demo.tsx | 22 + .../example/typography-blockquote.tsx | 8 + .../ui/new-york/example/typography-demo.tsx | 119 + .../ui/new-york/example/typography-h1.tsx | 7 + .../ui/new-york/example/typography-h2.tsx | 7 + .../ui/new-york/example/typography-h3.tsx | 7 + .../ui/new-york/example/typography-h4.tsx | 7 + .../example/typography-inline-code.tsx | 7 + .../ui/new-york/example/typography-large.tsx | 5 + .../ui/new-york/example/typography-lead.tsx | 8 + .../ui/new-york/example/typography-list.tsx | 9 + .../ui/new-york/example/typography-muted.tsx | 5 + .../ui/new-york/example/typography-p.tsx | 8 + .../ui/new-york/example/typography-small.tsx | 5 + .../ui/new-york/example/typography-table.tsx | 44 + .../components/ui/new-york/ui/accordion.tsx | 57 + .../ui/new-york/ui/alert-dialog.tsx | 141 ++ frontend/components/ui/new-york/ui/alert.tsx | 59 + .../ui/new-york/ui/aspect-ratio.tsx | 7 + frontend/components/ui/new-york/ui/avatar.tsx | 50 + frontend/components/ui/new-york/ui/badge.tsx | 36 + frontend/components/ui/new-york/ui/button.tsx | 57 + .../components/ui/new-york/ui/calendar.tsx | 72 + frontend/components/ui/new-york/ui/card.tsx | 76 + .../components/ui/new-york/ui/checkbox.tsx | 30 + .../components/ui/new-york/ui/collapsible.tsx | 11 + .../components/ui/new-york/ui/command.tsx | 155 ++ .../ui/new-york/ui/context-menu.tsx | 204 ++ frontend/components/ui/new-york/ui/dialog.tsx | 122 + .../ui/new-york/ui/dropdown-menu.tsx | 205 ++ frontend/components/ui/new-york/ui/form.tsx | 176 ++ .../components/ui/new-york/ui/hover-card.tsx | 29 + frontend/components/ui/new-york/ui/input.tsx | 25 + frontend/components/ui/new-york/ui/label.tsx | 26 + .../components/ui/new-york/ui/menubar.tsx | 240 ++ .../ui/new-york/ui/navigation-menu.tsx | 128 + .../components/ui/new-york/ui/popover.tsx | 31 + .../components/ui/new-york/ui/progress.tsx | 28 + .../components/ui/new-york/ui/radio-group.tsx | 44 + .../components/ui/new-york/ui/scroll-area.tsx | 48 + frontend/components/ui/new-york/ui/select.tsx | 164 ++ .../components/ui/new-york/ui/separator.tsx | 31 + frontend/components/ui/new-york/ui/sheet.tsx | 140 ++ .../components/ui/new-york/ui/skeleton.tsx | 15 + frontend/components/ui/new-york/ui/slider.tsx | 28 + frontend/components/ui/new-york/ui/switch.tsx | 29 + frontend/components/ui/new-york/ui/table.tsx | 120 + frontend/components/ui/new-york/ui/tabs.tsx | 55 + .../components/ui/new-york/ui/textarea.tsx | 24 + frontend/components/ui/new-york/ui/toast.tsx | 127 + .../components/ui/new-york/ui/toaster.tsx | 35 + .../ui/new-york/ui/toggle-group.tsx | 61 + frontend/components/ui/new-york/ui/toggle.tsx | 45 + .../components/ui/new-york/ui/tooltip.tsx | 30 + .../components/ui/new-york/ui/use-toast.ts | 192 ++ frontend/components/ui/progress.tsx | 51 + frontend/components/ui/select.tsx | 160 ++ frontend/components/ui/sheet.tsx | 140 ++ frontend/components/ui/toggle.tsx | 45 + frontend/hooks/use-login.ts | 29 +- frontend/hooks/use-register.ts | 27 +- frontend/lib/utils.ts | 6 + frontend/next.config.js | 9 +- frontend/package-lock.json | 2239 ++++++++++++++++- frontend/package.json | 22 +- frontend/public/avatar.svg | 9 + frontend/public/logo.svg | 1 + frontend/redux/services/apiSlice.ts | 6 +- frontend/styles/globals.css | 80 + frontend/tailwind.config.js | 88 +- frontend/tsconfig.json | 2 +- frontend/typings.d.ts | 3 + 241 files changed, 13160 insertions(+), 630 deletions(-) delete mode 100644 backend/backend/__init__.py delete mode 100644 backend/core/apps.py rename backend/{backend => core}/asgi.py (74%) delete mode 100644 backend/core/management/__init__.py delete mode 100644 backend/core/management/commands/__init__.py delete mode 100644 backend/core/management/commands/wait_for_db.py delete mode 100644 backend/core/migrations/0001_initial.py delete mode 100644 backend/core/migrations/__init__.py rename backend/{backend => core}/settings.py (92%) delete mode 100644 backend/core/tests/__init__.py delete mode 100644 backend/core/tests/test_commands.py rename backend/{backend => core}/urls.py (100%) rename backend/{backend => core}/wsgi.py (74%) rename frontend/app/{ => (auth)}/activation/[uid]/[token]/page.tsx (100%) rename frontend/app/{ => (auth)}/auth/facebook/page.tsx (100%) rename frontend/app/{ => (auth)}/auth/google/page.tsx (100%) create mode 100644 frontend/app/(auth)/auth/login/page.tsx create mode 100644 frontend/app/(auth)/auth/register/page.tsx create mode 100644 frontend/app/(auth)/layout.tsx create mode 100644 frontend/app/(auth)/password-reset/[uid]/[token]/page.tsx create mode 100644 frontend/app/(auth)/password-reset/page.tsx create mode 100644 frontend/app/(dashboard)/_components/mobile-sidebar.tsx create mode 100644 frontend/app/(dashboard)/_components/navbar.tsx create mode 100644 frontend/app/(dashboard)/_components/sidebar-item.tsx create mode 100644 frontend/app/(dashboard)/_components/sidebar-routes.tsx create mode 100644 frontend/app/(dashboard)/_components/sidebar.tsx create mode 100644 frontend/app/(dashboard)/_components/user-nav.tsx rename frontend/app/{ => (dashboard)}/dashboard/layout.tsx (100%) rename frontend/app/{ => (dashboard)}/dashboard/page.tsx (100%) create mode 100644 frontend/app/(dashboard)/layout.tsx delete mode 100644 frontend/app/auth/login/page.tsx delete mode 100644 frontend/app/auth/register/page.tsx delete mode 100644 frontend/app/password-reset/[uid]/[token]/page.tsx delete mode 100644 frontend/app/password-reset/page.tsx create mode 100644 frontend/components.json create mode 100644 frontend/components/common/Logo.tsx create mode 100644 frontend/components/common/Select.tsx create mode 100644 frontend/components/common/SubmitButton.tsx create mode 100644 frontend/components/ui/avatar.tsx create mode 100644 frontend/components/ui/button.tsx create mode 100644 frontend/components/ui/calendar.tsx create mode 100644 frontend/components/ui/card.tsx create mode 100644 frontend/components/ui/icon-badge.tsx create mode 100644 frontend/components/ui/new-york/example/accordion-demo.tsx create mode 100644 frontend/components/ui/new-york/example/alert-demo.tsx create mode 100644 frontend/components/ui/new-york/example/alert-destructive.tsx create mode 100644 frontend/components/ui/new-york/example/alert-dialog-demo.tsx create mode 100644 frontend/components/ui/new-york/example/aspect-ratio-demo.tsx create mode 100644 frontend/components/ui/new-york/example/avatar-demo.tsx create mode 100644 frontend/components/ui/new-york/example/badge-demo.tsx create mode 100644 frontend/components/ui/new-york/example/badge-destructive.tsx create mode 100644 frontend/components/ui/new-york/example/badge-outline.tsx create mode 100644 frontend/components/ui/new-york/example/badge-secondary.tsx create mode 100644 frontend/components/ui/new-york/example/button-as-child.tsx create mode 100644 frontend/components/ui/new-york/example/button-demo.tsx create mode 100644 frontend/components/ui/new-york/example/button-destructive.tsx create mode 100644 frontend/components/ui/new-york/example/button-ghost.tsx create mode 100644 frontend/components/ui/new-york/example/button-icon.tsx create mode 100644 frontend/components/ui/new-york/example/button-link.tsx create mode 100644 frontend/components/ui/new-york/example/button-loading.tsx create mode 100644 frontend/components/ui/new-york/example/button-outline.tsx create mode 100644 frontend/components/ui/new-york/example/button-secondary.tsx create mode 100644 frontend/components/ui/new-york/example/button-with-icon.tsx create mode 100644 frontend/components/ui/new-york/example/calendar-demo.tsx create mode 100644 frontend/components/ui/new-york/example/calendar-form.tsx create mode 100644 frontend/components/ui/new-york/example/card-demo.tsx create mode 100644 frontend/components/ui/new-york/example/card-with-form.tsx create mode 100644 frontend/components/ui/new-york/example/cards/activity-goal.tsx create mode 100644 frontend/components/ui/new-york/example/cards/calendar.tsx create mode 100644 frontend/components/ui/new-york/example/cards/chat.tsx create mode 100644 frontend/components/ui/new-york/example/cards/cookie-settings.tsx create mode 100644 frontend/components/ui/new-york/example/cards/create-account.tsx create mode 100644 frontend/components/ui/new-york/example/cards/data-table.tsx create mode 100644 frontend/components/ui/new-york/example/cards/index.tsx create mode 100644 frontend/components/ui/new-york/example/cards/metric.tsx create mode 100644 frontend/components/ui/new-york/example/cards/payment-method.tsx create mode 100644 frontend/components/ui/new-york/example/cards/report-issue.tsx create mode 100644 frontend/components/ui/new-york/example/cards/share.tsx create mode 100644 frontend/components/ui/new-york/example/cards/stats.tsx create mode 100644 frontend/components/ui/new-york/example/cards/team-members.tsx create mode 100644 frontend/components/ui/new-york/example/checkbox-demo.tsx create mode 100644 frontend/components/ui/new-york/example/checkbox-disabled.tsx create mode 100644 frontend/components/ui/new-york/example/checkbox-form-multiple.tsx create mode 100644 frontend/components/ui/new-york/example/checkbox-form-single.tsx create mode 100644 frontend/components/ui/new-york/example/checkbox-with-text.tsx create mode 100644 frontend/components/ui/new-york/example/collapsible-demo.tsx create mode 100644 frontend/components/ui/new-york/example/combobox-demo.tsx create mode 100644 frontend/components/ui/new-york/example/combobox-dropdown-menu.tsx create mode 100644 frontend/components/ui/new-york/example/combobox-form.tsx create mode 100644 frontend/components/ui/new-york/example/combobox-popover.tsx create mode 100644 frontend/components/ui/new-york/example/command-demo.tsx create mode 100644 frontend/components/ui/new-york/example/command-dialog.tsx create mode 100644 frontend/components/ui/new-york/example/context-menu-demo.tsx create mode 100644 frontend/components/ui/new-york/example/data-table-demo.tsx create mode 100644 frontend/components/ui/new-york/example/date-picker-demo.tsx create mode 100644 frontend/components/ui/new-york/example/date-picker-form.tsx create mode 100644 frontend/components/ui/new-york/example/date-picker-with-presets.tsx create mode 100644 frontend/components/ui/new-york/example/date-picker-with-range.tsx create mode 100644 frontend/components/ui/new-york/example/dialog-close-button.tsx create mode 100644 frontend/components/ui/new-york/example/dialog-demo.tsx create mode 100644 frontend/components/ui/new-york/example/dropdown-menu-checkboxes.tsx create mode 100644 frontend/components/ui/new-york/example/dropdown-menu-demo.tsx create mode 100644 frontend/components/ui/new-york/example/dropdown-menu-radio-group.tsx create mode 100644 frontend/components/ui/new-york/example/hover-card-demo.tsx create mode 100644 frontend/components/ui/new-york/example/input-demo.tsx create mode 100644 frontend/components/ui/new-york/example/input-disabled.tsx create mode 100644 frontend/components/ui/new-york/example/input-file.tsx create mode 100644 frontend/components/ui/new-york/example/input-form.tsx create mode 100644 frontend/components/ui/new-york/example/input-with-button.tsx create mode 100644 frontend/components/ui/new-york/example/input-with-label.tsx create mode 100644 frontend/components/ui/new-york/example/input-with-text.tsx create mode 100644 frontend/components/ui/new-york/example/label-demo.tsx create mode 100644 frontend/components/ui/new-york/example/menubar-demo.tsx create mode 100644 frontend/components/ui/new-york/example/mode-toggle.tsx create mode 100644 frontend/components/ui/new-york/example/navigation-menu-demo.tsx create mode 100644 frontend/components/ui/new-york/example/popover-demo.tsx create mode 100644 frontend/components/ui/new-york/example/progress-demo.tsx create mode 100644 frontend/components/ui/new-york/example/radio-group-demo.tsx create mode 100644 frontend/components/ui/new-york/example/radio-group-form.tsx create mode 100644 frontend/components/ui/new-york/example/scroll-area-demo.tsx create mode 100644 frontend/components/ui/new-york/example/scroll-area-horizontal-demo.tsx create mode 100644 frontend/components/ui/new-york/example/select-demo.tsx create mode 100644 frontend/components/ui/new-york/example/select-form.tsx create mode 100644 frontend/components/ui/new-york/example/select-scrollable.tsx create mode 100644 frontend/components/ui/new-york/example/separator-demo.tsx create mode 100644 frontend/components/ui/new-york/example/sheet-demo.tsx create mode 100644 frontend/components/ui/new-york/example/sheet-side.tsx create mode 100644 frontend/components/ui/new-york/example/skeleton-demo.tsx create mode 100644 frontend/components/ui/new-york/example/slider-demo.tsx create mode 100644 frontend/components/ui/new-york/example/switch-demo.tsx create mode 100644 frontend/components/ui/new-york/example/switch-form.tsx create mode 100644 frontend/components/ui/new-york/example/table-demo.tsx create mode 100644 frontend/components/ui/new-york/example/tabs-demo.tsx create mode 100644 frontend/components/ui/new-york/example/textarea-demo.tsx create mode 100644 frontend/components/ui/new-york/example/textarea-disabled.tsx create mode 100644 frontend/components/ui/new-york/example/textarea-form.tsx create mode 100644 frontend/components/ui/new-york/example/textarea-with-button.tsx create mode 100644 frontend/components/ui/new-york/example/textarea-with-label.tsx create mode 100644 frontend/components/ui/new-york/example/textarea-with-text.tsx create mode 100644 frontend/components/ui/new-york/example/toast-demo.tsx create mode 100644 frontend/components/ui/new-york/example/toast-destructive.tsx create mode 100644 frontend/components/ui/new-york/example/toast-simple.tsx create mode 100644 frontend/components/ui/new-york/example/toast-with-action.tsx create mode 100644 frontend/components/ui/new-york/example/toast-with-title.tsx create mode 100644 frontend/components/ui/new-york/example/toggle-demo.tsx create mode 100644 frontend/components/ui/new-york/example/toggle-disabled.tsx create mode 100644 frontend/components/ui/new-york/example/toggle-group-demo.tsx create mode 100644 frontend/components/ui/new-york/example/toggle-group-disabled.tsx create mode 100644 frontend/components/ui/new-york/example/toggle-group-lg.tsx create mode 100644 frontend/components/ui/new-york/example/toggle-group-outline.tsx create mode 100644 frontend/components/ui/new-york/example/toggle-group-single.tsx create mode 100644 frontend/components/ui/new-york/example/toggle-group-sm.tsx create mode 100644 frontend/components/ui/new-york/example/toggle-lg.tsx create mode 100644 frontend/components/ui/new-york/example/toggle-outline.tsx create mode 100644 frontend/components/ui/new-york/example/toggle-sm.tsx create mode 100644 frontend/components/ui/new-york/example/toggle-with-text.tsx create mode 100644 frontend/components/ui/new-york/example/tooltip-demo.tsx create mode 100644 frontend/components/ui/new-york/example/typography-blockquote.tsx create mode 100644 frontend/components/ui/new-york/example/typography-demo.tsx create mode 100644 frontend/components/ui/new-york/example/typography-h1.tsx create mode 100644 frontend/components/ui/new-york/example/typography-h2.tsx create mode 100644 frontend/components/ui/new-york/example/typography-h3.tsx create mode 100644 frontend/components/ui/new-york/example/typography-h4.tsx create mode 100644 frontend/components/ui/new-york/example/typography-inline-code.tsx create mode 100644 frontend/components/ui/new-york/example/typography-large.tsx create mode 100644 frontend/components/ui/new-york/example/typography-lead.tsx create mode 100644 frontend/components/ui/new-york/example/typography-list.tsx create mode 100644 frontend/components/ui/new-york/example/typography-muted.tsx create mode 100644 frontend/components/ui/new-york/example/typography-p.tsx create mode 100644 frontend/components/ui/new-york/example/typography-small.tsx create mode 100644 frontend/components/ui/new-york/example/typography-table.tsx create mode 100644 frontend/components/ui/new-york/ui/accordion.tsx create mode 100644 frontend/components/ui/new-york/ui/alert-dialog.tsx create mode 100644 frontend/components/ui/new-york/ui/alert.tsx create mode 100644 frontend/components/ui/new-york/ui/aspect-ratio.tsx create mode 100644 frontend/components/ui/new-york/ui/avatar.tsx create mode 100644 frontend/components/ui/new-york/ui/badge.tsx create mode 100644 frontend/components/ui/new-york/ui/button.tsx create mode 100644 frontend/components/ui/new-york/ui/calendar.tsx create mode 100644 frontend/components/ui/new-york/ui/card.tsx create mode 100644 frontend/components/ui/new-york/ui/checkbox.tsx create mode 100644 frontend/components/ui/new-york/ui/collapsible.tsx create mode 100644 frontend/components/ui/new-york/ui/command.tsx create mode 100644 frontend/components/ui/new-york/ui/context-menu.tsx create mode 100644 frontend/components/ui/new-york/ui/dialog.tsx create mode 100644 frontend/components/ui/new-york/ui/dropdown-menu.tsx create mode 100644 frontend/components/ui/new-york/ui/form.tsx create mode 100644 frontend/components/ui/new-york/ui/hover-card.tsx create mode 100644 frontend/components/ui/new-york/ui/input.tsx create mode 100644 frontend/components/ui/new-york/ui/label.tsx create mode 100644 frontend/components/ui/new-york/ui/menubar.tsx create mode 100644 frontend/components/ui/new-york/ui/navigation-menu.tsx create mode 100644 frontend/components/ui/new-york/ui/popover.tsx create mode 100644 frontend/components/ui/new-york/ui/progress.tsx create mode 100644 frontend/components/ui/new-york/ui/radio-group.tsx create mode 100644 frontend/components/ui/new-york/ui/scroll-area.tsx create mode 100644 frontend/components/ui/new-york/ui/select.tsx create mode 100644 frontend/components/ui/new-york/ui/separator.tsx create mode 100644 frontend/components/ui/new-york/ui/sheet.tsx create mode 100644 frontend/components/ui/new-york/ui/skeleton.tsx create mode 100644 frontend/components/ui/new-york/ui/slider.tsx create mode 100644 frontend/components/ui/new-york/ui/switch.tsx create mode 100644 frontend/components/ui/new-york/ui/table.tsx create mode 100644 frontend/components/ui/new-york/ui/tabs.tsx create mode 100644 frontend/components/ui/new-york/ui/textarea.tsx create mode 100644 frontend/components/ui/new-york/ui/toast.tsx create mode 100644 frontend/components/ui/new-york/ui/toaster.tsx create mode 100644 frontend/components/ui/new-york/ui/toggle-group.tsx create mode 100644 frontend/components/ui/new-york/ui/toggle.tsx create mode 100644 frontend/components/ui/new-york/ui/tooltip.tsx create mode 100644 frontend/components/ui/new-york/ui/use-toast.ts create mode 100644 frontend/components/ui/progress.tsx create mode 100644 frontend/components/ui/select.tsx create mode 100644 frontend/components/ui/sheet.tsx create mode 100644 frontend/components/ui/toggle.tsx create mode 100644 frontend/lib/utils.ts create mode 100644 frontend/public/avatar.svg create mode 100644 frontend/public/logo.svg create mode 100644 frontend/typings.d.ts diff --git a/backend/.gitignore b/backend/.gitignore index dd0cd82..480c680 100644 --- a/backend/.gitignore +++ b/backend/.gitignore @@ -165,8 +165,14 @@ dmypy.json # Cython debug symbols cython_debug/ +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ + +# End of https://www.toptal.com/developers/gitignore/api/django .vscode .DS_Store - -*_cache \ No newline at end of file diff --git a/backend/backend/__init__.py b/backend/backend/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/backend/core/apps.py b/backend/core/apps.py deleted file mode 100644 index 8115ae6..0000000 --- a/backend/core/apps.py +++ /dev/null @@ -1,6 +0,0 @@ -from django.apps import AppConfig - - -class CoreConfig(AppConfig): - default_auto_field = 'django.db.models.BigAutoField' - name = 'core' diff --git a/backend/backend/asgi.py b/backend/core/asgi.py similarity index 74% rename from backend/backend/asgi.py rename to backend/core/asgi.py index e3a87a9..66c1231 100644 --- a/backend/backend/asgi.py +++ b/backend/core/asgi.py @@ -1,5 +1,5 @@ """ -ASGI config for backend project. +ASGI config for core project. It exposes the ASGI callable as a module-level variable named ``application``. @@ -11,6 +11,6 @@ from django.core.asgi import get_asgi_application -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "backend.settings") +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "core.settings") application = get_asgi_application() diff --git a/backend/core/management/__init__.py b/backend/core/management/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/backend/core/management/commands/__init__.py b/backend/core/management/commands/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/backend/core/management/commands/wait_for_db.py b/backend/core/management/commands/wait_for_db.py deleted file mode 100644 index 31e5c46..0000000 --- a/backend/core/management/commands/wait_for_db.py +++ /dev/null @@ -1,26 +0,0 @@ -""" -Django command to pause execution until database is available -""" -from django.core.management.base import BaseCommand - -from psycopg2 import OperationalError as Psycopg2Error -from django.db.utils import OperationalError - - -class Command(BaseCommand): - """Django command to pause execution until database is available""" - - def handle(self, *args, **options): - """Handle the command""" - self.stdout.write('Waiting for database...') - db_up = False - while not db_up: - try: - self.check(databases=['default']) - db_up = True - except (OperationalError, Psycopg2Error): - self.stdout.write('Database unavailable, waiting 1 second...') - self.stdout.flush() - import time - time.sleep(1) - self.stdout.write(self.style.SUCCESS('Database available')) diff --git a/backend/core/migrations/0001_initial.py b/backend/core/migrations/0001_initial.py deleted file mode 100644 index 0d4d063..0000000 --- a/backend/core/migrations/0001_initial.py +++ /dev/null @@ -1,46 +0,0 @@ -# Generated by Django 3.2.20 on 2023-07-31 08:18 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('auth', '0012_alter_user_first_name_max_length'), - ] - - operations = [ - migrations.CreateModel( - name='User', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('password', models.CharField(max_length=128, verbose_name='password')), - ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), - ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), - ('email', models.EmailField(max_length=255, unique=True)), - ('name', models.CharField(max_length=255)), - ('is_active', models.BooleanField(default=True)), - ('is_staff', models.BooleanField(default=False)), - ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')), - ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), - ], - options={ - 'abstract': False, - }, - ), - migrations.CreateModel( - name='Recipe', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.CharField(max_length=255)), - ('time_minutes', models.IntegerField()), - ('price', models.DecimalField(decimal_places=2, max_digits=5)), - ('description', models.TextField()), - ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), - ], - ), - ] diff --git a/backend/core/migrations/__init__.py b/backend/core/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/backend/backend/settings.py b/backend/core/settings.py similarity index 92% rename from backend/backend/settings.py rename to backend/core/settings.py index 72e99bf..74706ee 100644 --- a/backend/backend/settings.py +++ b/backend/core/settings.py @@ -1,5 +1,5 @@ """ -Django settings for backend project. +Django settings for core project. Generated by 'django-admin startproject' using Django 4.2.1. @@ -50,7 +50,6 @@ "django.contrib.staticfiles", "corsheaders", "rest_framework", - "core", "djoser", "storages", "social_django", @@ -69,7 +68,7 @@ "django.middleware.clickjacking.XFrameOptionsMiddleware", ] -ROOT_URLCONF = "backend.urls" +ROOT_URLCONF = "core.urls" TEMPLATES = [ { @@ -87,7 +86,7 @@ }, ] -WSGI_APPLICATION = "backend.wsgi.application" +WSGI_APPLICATION = "core.wsgi.application" # Database @@ -120,7 +119,7 @@ USE_SES_V2 = True DOMAIN = getenv("DOMAIN") -SITE_NAME = "Full Auth" +SITE_NAME = "Tutorial App" # Password validation # https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators @@ -179,18 +178,19 @@ AUTHENTICATION_BACKENDS = [ "social_core.backends.google.GoogleOAuth2", + "social_core.backends.facebook.FacebookOAuth2", "django.contrib.auth.backends.ModelBackend", ] DJOSER = { "PASSWORD_RESET_CONFIRM_URL": "password-reset/{uid}/{token}", - "SEND_ACTIVATION_EMAIL": False, # Change this if you want to send activation email + "SEND_ACTIVATION_EMAIL": False, "ACTIVATION_URL": "activation/{uid}/{token}", "USER_CREATE_PASSWORD_RETYPE": True, "PASSWORD_RESET_CONFIRM_RETYPE": True, "TOKEN_MODEL": None, - "SOCIAL_AUTH_ALLOWED_REDIRECT_URIS": getenv("REDIRECT_URLS", "").split(","), + "SOCIAL_AUTH_ALLOWED_REDIRECT_URIS": getenv("REDIRECT_URLS").split(","), } AUTH_COOKIE = "access" @@ -209,6 +209,11 @@ ] SOCIAL_AUTH_GOOGLE_OAUTH2_EXTRA_DATA = ["first_name", "last_name"] +SOCIAL_AUTH_FACEBOOK_KEY = getenv("FACEBOOK_AUTH_KEY") +SOCIAL_AUTH_FACEBOOK_SECRET = getenv("FACEBOOK_AUTH_SECRET_KEY") +SOCIAL_AUTH_FACEBOOK_SCOPE = ["email"] +SOCIAL_AUTH_FACEBOOK_PROFILE_EXTRA_PARAMS = {"fields": "email, first_name, last_name"} + CORS_ALLOWED_ORIGINS = getenv( "CORS_ALLOWED_ORIGINS", "http://localhost:3000,http://127.0.0.1:3000" ).split(",") diff --git a/backend/core/tests/__init__.py b/backend/core/tests/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/backend/core/tests/test_commands.py b/backend/core/tests/test_commands.py deleted file mode 100644 index 8050c95..0000000 --- a/backend/core/tests/test_commands.py +++ /dev/null @@ -1,34 +0,0 @@ -""" -Test custom Django maangement commands -""" - -from unittest.mock import patch -from psycopg2 import OperationalError as Psycopg2Error - -from django.core.management import call_command -from django.db.utils import OperationalError -from django.test import SimpleTestCase - - -@patch('core.management.commands.wait_for_db.Command.check') -class CommandTests(SimpleTestCase): - """Test commands""" - - def test_wait_for_db_read(self, patched_check): - """Test waiting for db when db is available""" - patched_check.return_value = True - - call_command('wait_for_db') - - patched_check.assert_called_once_with(databases=['default']) - - @patch('time.sleep') - def test_wait_for_db_delay(self, patched_sleep, patched_check): - """Test waiting for db""" - patched_check.side_effect = [Psycopg2Error] * 2 + \ - [OperationalError] * 3 + [True] - - call_command('wait_for_db') - - self.assertEqual(patched_check.call_count, 6) - patched_check.assert_called_with(databases=['default']) diff --git a/backend/backend/urls.py b/backend/core/urls.py similarity index 100% rename from backend/backend/urls.py rename to backend/core/urls.py diff --git a/backend/backend/wsgi.py b/backend/core/wsgi.py similarity index 74% rename from backend/backend/wsgi.py rename to backend/core/wsgi.py index e35bea4..a08c895 100644 --- a/backend/backend/wsgi.py +++ b/backend/core/wsgi.py @@ -1,5 +1,5 @@ """ -WSGI config for backend project. +WSGI config for core project. It exposes the WSGI callable as a module-level variable named ``application``. @@ -11,6 +11,6 @@ from django.core.wsgi import get_wsgi_application -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "backend.settings") +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "core.settings") application = get_wsgi_application() diff --git a/backend/manage.py b/backend/manage.py index 1917e46..4e20ce5 100755 --- a/backend/manage.py +++ b/backend/manage.py @@ -6,7 +6,7 @@ def main(): """Run administrative tasks.""" - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "backend.settings") + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "core.settings") try: from django.core.management import execute_from_command_line except ImportError as exc: diff --git a/backend/poetry.lock b/backend/poetry.lock index 1f5532a..ac28513 100644 --- a/backend/poetry.lock +++ b/backend/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.7.1 and should not be changed by hand. [[package]] name = "asgiref" @@ -485,27 +485,27 @@ pytz = "*" [[package]] name = "djangorestframework-simplejwt" -version = "5.3.0" +version = "5.3.1" description = "A minimal JSON Web Token authentication plugin for Django REST Framework" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "djangorestframework_simplejwt-5.3.0-py3-none-any.whl", hash = "sha256:631d7ae2ed4365d7196a35d3cc0f6d382f7bd3361fb24c894f8f92b4da5db27d"}, - {file = "djangorestframework_simplejwt-5.3.0.tar.gz", hash = "sha256:8e4c5dfca8d11c0b8a66dfd8a4e3fc1c6aa7ea188d10907ff91c942f4b52ed66"}, + {file = "djangorestframework_simplejwt-5.3.1-py3-none-any.whl", hash = "sha256:381bc966aa46913905629d472cd72ad45faa265509764e20ffd440164c88d220"}, + {file = "djangorestframework_simplejwt-5.3.1.tar.gz", hash = "sha256:6c4bd37537440bc439564ebf7d6085e74c5411485197073f508ebdfa34bc9fae"}, ] [package.dependencies] django = ">=3.2" -djangorestframework = ">=3.10" +djangorestframework = ">=3.12" pyjwt = ">=1.7.1,<3" [package.extras] crypto = ["cryptography (>=3.3.1)"] -dev = ["Sphinx (>=1.6.5,<2)", "cryptography", "flake8", "ipython", "isort", "pep8", "pytest", "pytest-cov", "pytest-django", "pytest-watch", "pytest-xdist", "python-jose (==3.3.0)", "sphinx-rtd-theme (>=0.1.9)", "tox", "twine", "wheel"] -doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9)"] +dev = ["Sphinx (>=1.6.5,<2)", "cryptography", "flake8", "freezegun", "ipython", "isort", "pep8", "pytest", "pytest-cov", "pytest-django", "pytest-watch", "pytest-xdist", "python-jose (==3.3.0)", "sphinx_rtd_theme (>=0.1.9)", "tox", "twine", "wheel"] +doc = ["Sphinx (>=1.6.5,<2)", "sphinx_rtd_theme (>=0.1.9)"] lint = ["flake8", "isort", "pep8"] python-jose = ["python-jose (==3.3.0)"] -test = ["cryptography", "pytest", "pytest-cov", "pytest-django", "pytest-xdist", "tox"] +test = ["cryptography", "freezegun", "pytest", "pytest-cov", "pytest-django", "pytest-xdist", "tox"] [[package]] name = "djoser" @@ -664,6 +664,17 @@ files = [ {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, ] +[[package]] +name = "joblib" +version = "1.3.2" +description = "Lightweight pipelining with Python functions" +optional = false +python-versions = ">=3.7" +files = [ + {file = "joblib-1.3.2-py3-none-any.whl", hash = "sha256:ef4331c65f239985f3f2220ecc87db222f08fd22097a3dd5698f693875f8cbb9"}, + {file = "joblib-1.3.2.tar.gz", hash = "sha256:92f865e621e17784e7955080b6d042489e3b8e294949cc44c6eac304f59772b1"}, +] + [[package]] name = "jsonschema" version = "4.19.1" @@ -710,6 +721,31 @@ files = [ {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] +[[package]] +name = "nltk" +version = "3.8.1" +description = "Natural Language Toolkit" +optional = false +python-versions = ">=3.7" +files = [ + {file = "nltk-3.8.1-py3-none-any.whl", hash = "sha256:fd5c9109f976fa86bcadba8f91e47f5e9293bd034474752e92a520f81c93dda5"}, + {file = "nltk-3.8.1.zip", hash = "sha256:1834da3d0682cba4f2cede2f9aad6b0fafb6461ba451db0efb6f9c39798d64d3"}, +] + +[package.dependencies] +click = "*" +joblib = "*" +regex = ">=2021.8.3" +tqdm = "*" + +[package.extras] +all = ["matplotlib", "numpy", "pyparsing", "python-crfsuite", "requests", "scikit-learn", "scipy", "twython"] +corenlp = ["requests"] +machine-learning = ["numpy", "python-crfsuite", "scikit-learn", "scipy"] +plot = ["matplotlib"] +tgrep = ["pyparsing"] +twitter = ["twython"] + [[package]] name = "oauthlib" version = "3.2.2" @@ -791,13 +827,13 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "poethepoet" -version = "0.24.4" +version = "0.24.1" description = "A task runner that works well with poetry." optional = false python-versions = ">=3.8" files = [ - {file = "poethepoet-0.24.4-py3-none-any.whl", hash = "sha256:fb4ea35d7f40fe2081ea917d2e4102e2310fda2cde78974050ca83896e229075"}, - {file = "poethepoet-0.24.4.tar.gz", hash = "sha256:ff4220843a87c888cbcb5312c8905214701d0af60ac7271795baa8369b428fef"}, + {file = "poethepoet-0.24.1-py3-none-any.whl", hash = "sha256:3afa44b4fc7327df0dd912eda012604a072af2bb4d243fb0e41e8eca8dabf9ed"}, + {file = "poethepoet-0.24.1.tar.gz", hash = "sha256:f5a386387c382f08890c273d13495938208a8ce91ab71536abf388c776c4f366"}, ] [package.dependencies] @@ -840,6 +876,7 @@ files = [ {file = "psycopg2_binary-2.9.9-cp311-cp311-win32.whl", hash = "sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d"}, {file = "psycopg2_binary-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0605eaed3eb239e87df0d5e3c6489daae3f7388d455d0c0b4df899519c6a38d"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996"}, @@ -848,6 +885,8 @@ files = [ {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win32.whl", hash = "sha256:64cf30263844fa208851ebb13b0732ce674d8ec6a0c86a4e160495d299ba3c93"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:81ff62668af011f9a48787564ab7eded4e9fb17a4a6a74af5ffa6a457400d2ab"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77"}, @@ -1031,6 +1070,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -1038,8 +1078,15 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, + {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, + {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, + {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -1056,6 +1103,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -1063,6 +1111,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -1083,6 +1132,103 @@ files = [ attrs = ">=22.2.0" rpds-py = ">=0.7.0" +[[package]] +name = "regex" +version = "2023.10.3" +description = "Alternative regular expression module, to replace re." +optional = false +python-versions = ">=3.7" +files = [ + {file = "regex-2023.10.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:4c34d4f73ea738223a094d8e0ffd6d2c1a1b4c175da34d6b0de3d8d69bee6bcc"}, + {file = "regex-2023.10.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a8f4e49fc3ce020f65411432183e6775f24e02dff617281094ba6ab079ef0915"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4cd1bccf99d3ef1ab6ba835308ad85be040e6a11b0977ef7ea8c8005f01a3c29"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:81dce2ddc9f6e8f543d94b05d56e70d03a0774d32f6cca53e978dc01e4fc75b8"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c6b4d23c04831e3ab61717a707a5d763b300213db49ca680edf8bf13ab5d91b"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c15ad0aee158a15e17e0495e1e18741573d04eb6da06d8b84af726cfc1ed02ee"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6239d4e2e0b52c8bd38c51b760cd870069f0bdf99700a62cd509d7a031749a55"}, + {file = "regex-2023.10.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4a8bf76e3182797c6b1afa5b822d1d5802ff30284abe4599e1247be4fd6b03be"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9c727bbcf0065cbb20f39d2b4f932f8fa1631c3e01fcedc979bd4f51fe051c5"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3ccf2716add72f80714b9a63899b67fa711b654be3fcdd34fa391d2d274ce767"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:107ac60d1bfdc3edb53be75e2a52aff7481b92817cfdddd9b4519ccf0e54a6ff"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:00ba3c9818e33f1fa974693fb55d24cdc8ebafcb2e4207680669d8f8d7cca79a"}, + {file = "regex-2023.10.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f0a47efb1dbef13af9c9a54a94a0b814902e547b7f21acb29434504d18f36e3a"}, + {file = "regex-2023.10.3-cp310-cp310-win32.whl", hash = "sha256:36362386b813fa6c9146da6149a001b7bd063dabc4d49522a1f7aa65b725c7ec"}, + {file = "regex-2023.10.3-cp310-cp310-win_amd64.whl", hash = "sha256:c65a3b5330b54103e7d21cac3f6bf3900d46f6d50138d73343d9e5b2900b2353"}, + {file = "regex-2023.10.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:90a79bce019c442604662d17bf69df99090e24cdc6ad95b18b6725c2988a490e"}, + {file = "regex-2023.10.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c7964c2183c3e6cce3f497e3a9f49d182e969f2dc3aeeadfa18945ff7bdd7051"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ef80829117a8061f974b2fda8ec799717242353bff55f8a29411794d635d964"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5addc9d0209a9afca5fc070f93b726bf7003bd63a427f65ef797a931782e7edc"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c148bec483cc4b421562b4bcedb8e28a3b84fcc8f0aa4418e10898f3c2c0eb9b"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d1f21af4c1539051049796a0f50aa342f9a27cde57318f2fc41ed50b0dbc4ac"}, + {file = "regex-2023.10.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b9ac09853b2a3e0d0082104036579809679e7715671cfbf89d83c1cb2a30f58"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ebedc192abbc7fd13c5ee800e83a6df252bec691eb2c4bedc9f8b2e2903f5e2a"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d8a993c0a0ffd5f2d3bda23d0cd75e7086736f8f8268de8a82fbc4bd0ac6791e"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:be6b7b8d42d3090b6c80793524fa66c57ad7ee3fe9722b258aec6d0672543fd0"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4023e2efc35a30e66e938de5aef42b520c20e7eda7bb5fb12c35e5d09a4c43f6"}, + {file = "regex-2023.10.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:0d47840dc05e0ba04fe2e26f15126de7c755496d5a8aae4a08bda4dd8d646c54"}, + {file = "regex-2023.10.3-cp311-cp311-win32.whl", hash = "sha256:9145f092b5d1977ec8c0ab46e7b3381b2fd069957b9862a43bd383e5c01d18c2"}, + {file = "regex-2023.10.3-cp311-cp311-win_amd64.whl", hash = "sha256:b6104f9a46bd8743e4f738afef69b153c4b8b592d35ae46db07fc28ae3d5fb7c"}, + {file = "regex-2023.10.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:bff507ae210371d4b1fe316d03433ac099f184d570a1a611e541923f78f05037"}, + {file = "regex-2023.10.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:be5e22bbb67924dea15039c3282fa4cc6cdfbe0cbbd1c0515f9223186fc2ec5f"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a992f702c9be9c72fa46f01ca6e18d131906a7180950958f766c2aa294d4b41"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7434a61b158be563c1362d9071358f8ab91b8d928728cd2882af060481244c9e"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c2169b2dcabf4e608416f7f9468737583ce5f0a6e8677c4efbf795ce81109d7c"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9e908ef5889cda4de038892b9accc36d33d72fb3e12c747e2799a0e806ec841"}, + {file = "regex-2023.10.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12bd4bc2c632742c7ce20db48e0d99afdc05e03f0b4c1af90542e05b809a03d9"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bc72c231f5449d86d6c7d9cc7cd819b6eb30134bb770b8cfdc0765e48ef9c420"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bce8814b076f0ce5766dc87d5a056b0e9437b8e0cd351b9a6c4e1134a7dfbda9"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:ba7cd6dc4d585ea544c1412019921570ebd8a597fabf475acc4528210d7c4a6f"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b0c7d2f698e83f15228ba41c135501cfe7d5740181d5903e250e47f617eb4292"}, + {file = "regex-2023.10.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5a8f91c64f390ecee09ff793319f30a0f32492e99f5dc1c72bc361f23ccd0a9a"}, + {file = "regex-2023.10.3-cp312-cp312-win32.whl", hash = "sha256:ad08a69728ff3c79866d729b095872afe1e0557251da4abb2c5faff15a91d19a"}, + {file = "regex-2023.10.3-cp312-cp312-win_amd64.whl", hash = "sha256:39cdf8d141d6d44e8d5a12a8569d5a227f645c87df4f92179bd06e2e2705e76b"}, + {file = "regex-2023.10.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4a3ee019a9befe84fa3e917a2dd378807e423d013377a884c1970a3c2792d293"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76066d7ff61ba6bf3cb5efe2428fc82aac91802844c022d849a1f0f53820502d"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfe50b61bab1b1ec260fa7cd91106fa9fece57e6beba05630afe27c71259c59b"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fd88f373cb71e6b59b7fa597e47e518282455c2734fd4306a05ca219a1991b0"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3ab05a182c7937fb374f7e946f04fb23a0c0699c0450e9fb02ef567412d2fa3"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dac37cf08fcf2094159922edc7a2784cfcc5c70f8354469f79ed085f0328ebdf"}, + {file = "regex-2023.10.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e54ddd0bb8fb626aa1f9ba7b36629564544954fff9669b15da3610c22b9a0991"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:3367007ad1951fde612bf65b0dffc8fd681a4ab98ac86957d16491400d661302"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:16f8740eb6dbacc7113e3097b0a36065a02e37b47c936b551805d40340fb9971"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:f4f2ca6df64cbdd27f27b34f35adb640b5d2d77264228554e68deda54456eb11"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:39807cbcbe406efca2a233884e169d056c35aa7e9f343d4e78665246a332f597"}, + {file = "regex-2023.10.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7eece6fbd3eae4a92d7c748ae825cbc1ee41a89bb1c3db05b5578ed3cfcfd7cb"}, + {file = "regex-2023.10.3-cp37-cp37m-win32.whl", hash = "sha256:ce615c92d90df8373d9e13acddd154152645c0dc060871abf6bd43809673d20a"}, + {file = "regex-2023.10.3-cp37-cp37m-win_amd64.whl", hash = "sha256:0f649fa32fe734c4abdfd4edbb8381c74abf5f34bc0b3271ce687b23729299ed"}, + {file = "regex-2023.10.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b98b7681a9437262947f41c7fac567c7e1f6eddd94b0483596d320092004533"}, + {file = "regex-2023.10.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:91dc1d531f80c862441d7b66c4505cd6ea9d312f01fb2f4654f40c6fdf5cc37a"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82fcc1f1cc3ff1ab8a57ba619b149b907072e750815c5ba63e7aa2e1163384a4"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7979b834ec7a33aafae34a90aad9f914c41fd6eaa8474e66953f3f6f7cbd4368"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef71561f82a89af6cfcbee47f0fabfdb6e63788a9258e913955d89fdd96902ab"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd829712de97753367153ed84f2de752b86cd1f7a88b55a3a775eb52eafe8a94"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00e871d83a45eee2f8688d7e6849609c2ca2a04a6d48fba3dff4deef35d14f07"}, + {file = "regex-2023.10.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:706e7b739fdd17cb89e1fbf712d9dc21311fc2333f6d435eac2d4ee81985098c"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cc3f1c053b73f20c7ad88b0d1d23be7e7b3901229ce89f5000a8399746a6e039"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6f85739e80d13644b981a88f529d79c5bdf646b460ba190bffcaf6d57b2a9863"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:741ba2f511cc9626b7561a440f87d658aabb3d6b744a86a3c025f866b4d19e7f"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:e77c90ab5997e85901da85131fd36acd0ed2221368199b65f0d11bca44549711"}, + {file = "regex-2023.10.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:979c24cbefaf2420c4e377ecd1f165ea08cc3d1fbb44bdc51bccbbf7c66a2cb4"}, + {file = "regex-2023.10.3-cp38-cp38-win32.whl", hash = "sha256:58837f9d221744d4c92d2cf7201c6acd19623b50c643b56992cbd2b745485d3d"}, + {file = "regex-2023.10.3-cp38-cp38-win_amd64.whl", hash = "sha256:c55853684fe08d4897c37dfc5faeff70607a5f1806c8be148f1695be4a63414b"}, + {file = "regex-2023.10.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2c54e23836650bdf2c18222c87f6f840d4943944146ca479858404fedeb9f9af"}, + {file = "regex-2023.10.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:69c0771ca5653c7d4b65203cbfc5e66db9375f1078689459fe196fe08b7b4930"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ac965a998e1388e6ff2e9781f499ad1eaa41e962a40d11c7823c9952c77123e"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c0e8fae5b27caa34177bdfa5a960c46ff2f78ee2d45c6db15ae3f64ecadde14"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6c56c3d47da04f921b73ff9415fbaa939f684d47293f071aa9cbb13c94afc17d"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ef1e014eed78ab650bef9a6a9cbe50b052c0aebe553fb2881e0453717573f52"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d29338556a59423d9ff7b6eb0cb89ead2b0875e08fe522f3e068b955c3e7b59b"}, + {file = "regex-2023.10.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9c6d0ced3c06d0f183b73d3c5920727268d2201aa0fe6d55c60d68c792ff3588"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:994645a46c6a740ee8ce8df7911d4aee458d9b1bc5639bc968226763d07f00fa"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:66e2fe786ef28da2b28e222c89502b2af984858091675044d93cb50e6f46d7af"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:11175910f62b2b8c055f2b089e0fedd694fe2be3941b3e2633653bc51064c528"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:06e9abc0e4c9ab4779c74ad99c3fc10d3967d03114449acc2c2762ad4472b8ca"}, + {file = "regex-2023.10.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fb02e4257376ae25c6dd95a5aec377f9b18c09be6ebdefa7ad209b9137b73d48"}, + {file = "regex-2023.10.3-cp39-cp39-win32.whl", hash = "sha256:3b2c3502603fab52d7619b882c25a6850b766ebd1b18de3df23b2f939360e1bd"}, + {file = "regex-2023.10.3-cp39-cp39-win_amd64.whl", hash = "sha256:adbccd17dcaff65704c856bd29951c58a1bd4b2b0f8ad6b826dbd543fe740988"}, + {file = "regex-2023.10.3.tar.gz", hash = "sha256:3fef4f844d2290ee0ba57addcec17eec9e3df73f10a2748485dfd6a3a188cc0f"}, +] + [[package]] name = "requests" version = "2.31.0" @@ -1353,6 +1499,26 @@ files = [ {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] +[[package]] +name = "tqdm" +version = "4.66.1" +description = "Fast, Extensible Progress Meter" +optional = false +python-versions = ">=3.7" +files = [ + {file = "tqdm-4.66.1-py3-none-any.whl", hash = "sha256:d302b3c5b53d47bce91fea46679d9c3c6508cf6332229aa1e7d8653723793386"}, + {file = "tqdm-4.66.1.tar.gz", hash = "sha256:d88e651f9db8d8551a62556d3cff9e3034274ca5d66e93197cf2490e2dcb69c7"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + +[package.extras] +dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +notebook = ["ipywidgets (>=6)"] +slack = ["slack-sdk"] +telegram = ["requests"] + [[package]] name = "typing-extensions" version = "4.8.0" @@ -1406,4 +1572,4 @@ zstd = ["zstandard (>=0.18.0)"] [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "7d2686dc3a04d8e7419f963f3a51bdffad4136ef1db0e5090c6d8659da0e0849" +content-hash = "5fd95db80d2734481c86272cbfa7ce714917ce52bda799042067af5ab15c564a" diff --git a/backend/pyproject.toml b/backend/pyproject.toml index 40b9aa2..09f8b5e 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -1,8 +1,8 @@ [tool.poetry] -name = "backend" +name = "core" version = "0.1.0" description = "" -authors = ["Jonas Tischer"] +authors = ["Jonas Tischer "] readme = "README.md" [tool.poetry.dependencies] @@ -13,7 +13,6 @@ djangorestframework = "^3.14.0" django-cors-headers = "^4.2.0" python-decouple = "^3.8" drf-spectacular = "^0.26.5" -psycopg2-binary = "^2.9.9" djoser = "^2.2.0" django-ses = "^3.5.0" poethepoet = "^0.24.1" @@ -26,11 +25,10 @@ python-dotenv = "^1.0.0" django-storages = "^1.14.2" gunicorn = "^21.2.0" factory-boy = "^3.3.0" +psycopg2-binary = "^2.9.9" +djangorestframework-simplejwt = "^5.3.1" -[tool.poetry.group.dev.dependencies] -poethepoet = "^0.24.4" - [build-system] requires = ["poetry-core"] build-backend = "poetry.core.masonry.api" @@ -46,6 +44,6 @@ precommit = ["format", "lint", "test", "export_reqs"] manage = "poetry run python manage.py" [tool.pytest.ini_options] -DJANGO_SETTINGS_MODULE = "backend.settings" +DJANGO_SETTINGS_MODULE = "core.settings" # -- recommended but optional: python_files = ["test_*.py", "*_test.py", "testing/python/*.py"] \ No newline at end of file diff --git a/backend/requirements.txt b/backend/requirements.txt index c955bfb..8a4d638 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -16,19 +16,23 @@ django-ses==3.5.0 ; python_version >= "3.11" and python_version < "4.0" django-storages==1.14.2 ; python_version >= "3.11" and python_version < "4.0" django-templated-mail==1.1.1 ; python_version >= "3.11" and python_version < "4.0" django==4.2.6 ; python_version >= "3.11" and python_version < "4.0" -djangorestframework-simplejwt==5.3.0 ; python_version >= "3.11" and python_version < "4.0" +djangorestframework-simplejwt==5.3.1 ; python_version >= "3.11" and python_version < "4.0" djangorestframework==3.14.0 ; python_version >= "3.11" and python_version < "4.0" djoser==2.2.0 ; python_version >= "3.11" and python_version < "4.0" drf-spectacular==0.26.5 ; python_version >= "3.11" and python_version < "4.0" +factory-boy==3.3.0 ; python_version >= "3.11" and python_version < "4.0" +faker==20.1.0 ; python_version >= "3.11" and python_version < "4.0" gunicorn==21.2.0 ; python_version >= "3.11" and python_version < "4.0" idna==3.4 ; python_version >= "3.11" and python_version < "4.0" inflection==0.5.1 ; python_version >= "3.11" and python_version < "4.0" iniconfig==2.0.0 ; python_version >= "3.11" and python_version < "4.0" isort==5.12.0 ; python_version >= "3.11" and python_version < "4.0" jmespath==1.0.1 ; python_version >= "3.11" and python_version < "4.0" +joblib==1.3.2 ; python_version >= "3.11" and python_version < "4.0" jsonschema-specifications==2023.7.1 ; python_version >= "3.11" and python_version < "4.0" jsonschema==4.19.1 ; python_version >= "3.11" and python_version < "4.0" mypy-extensions==1.0.0 ; python_version >= "3.11" and python_version < "4.0" +nltk==3.8.1 ; python_version >= "3.11" and python_version < "4.0" oauthlib==3.2.2 ; python_version >= "3.11" and python_version < "4.0" packaging==23.2 ; python_version >= "3.11" and python_version < "4.0" pastel==0.2.1 ; python_version >= "3.11" and python_version < "4.0" @@ -48,6 +52,7 @@ python3-openid==3.2.0 ; python_version >= "3.11" and python_version < "4.0" pytz==2023.3.post1 ; python_version >= "3.11" and python_version < "4.0" pyyaml==6.0.1 ; python_version >= "3.11" and python_version < "4.0" referencing==0.30.2 ; python_version >= "3.11" and python_version < "4.0" +regex==2023.10.3 ; python_version >= "3.11" and python_version < "4.0" requests-oauthlib==1.3.1 ; python_version >= "3.11" and python_version < "4.0" requests==2.31.0 ; python_version >= "3.11" and python_version < "4.0" rpds-py==0.10.6 ; python_version >= "3.11" and python_version < "4.0" @@ -58,6 +63,7 @@ social-auth-app-django==5.3.0 ; python_version >= "3.11" and python_version < "4 social-auth-core==4.4.2 ; python_version >= "3.11" and python_version < "4.0" sqlparse==0.4.4 ; python_version >= "3.11" and python_version < "4.0" tomli==2.0.1 ; python_version >= "3.11" and python_version < "4.0" +tqdm==4.66.1 ; python_version >= "3.11" and python_version < "4.0" typing-extensions==4.8.0 ; python_version >= "3.11" and python_version < "4.0" tzdata==2023.3 ; python_version >= "3.11" and python_version < "4.0" and sys_platform == "win32" uritemplate==4.1.1 ; python_version >= "3.11" and python_version < "4.0" diff --git a/backend/users/models.py b/backend/users/models.py index 22c3e1a..ae13e9b 100644 --- a/backend/users/models.py +++ b/backend/users/models.py @@ -47,6 +47,3 @@ class UserAccount(AbstractBaseUser, PermissionsMixin): def __str__(self): return self.email - - - diff --git a/backend/users/tests/test_views.py b/backend/users/tests/test_views.py index 882fc13..4cbc660 100644 --- a/backend/users/tests/test_views.py +++ b/backend/users/tests/test_views.py @@ -3,8 +3,6 @@ from rest_framework.test import APIClient from rest_framework_simplejwt.tokens import RefreshToken from .factories import UserAccountFactory -import pytest -from rest_framework.test import APIClient from django.contrib.auth import get_user_model diff --git a/frontend/.gitignore b/frontend/.gitignore index 1d5314f..c28b1d2 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -30,3 +30,5 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +.env.local \ No newline at end of file diff --git a/frontend/app/activation/[uid]/[token]/page.tsx b/frontend/app/(auth)/activation/[uid]/[token]/page.tsx similarity index 100% rename from frontend/app/activation/[uid]/[token]/page.tsx rename to frontend/app/(auth)/activation/[uid]/[token]/page.tsx diff --git a/frontend/app/auth/facebook/page.tsx b/frontend/app/(auth)/auth/facebook/page.tsx similarity index 100% rename from frontend/app/auth/facebook/page.tsx rename to frontend/app/(auth)/auth/facebook/page.tsx diff --git a/frontend/app/auth/google/page.tsx b/frontend/app/(auth)/auth/google/page.tsx similarity index 100% rename from frontend/app/auth/google/page.tsx rename to frontend/app/(auth)/auth/google/page.tsx diff --git a/frontend/app/(auth)/auth/login/page.tsx b/frontend/app/(auth)/auth/login/page.tsx new file mode 100644 index 0000000..542a353 --- /dev/null +++ b/frontend/app/(auth)/auth/login/page.tsx @@ -0,0 +1,40 @@ +import Link from 'next/link'; +import { LoginForm } from '@/components/forms'; +import { SocialButtons } from '@/components/common'; +import type { Metadata } from 'next'; +import Logo from '@/components/common/Logo'; + +export const metadata: Metadata = { + title: 'Next Tutorial | Login', + description: 'Next Tutorial login page', +}; + +export default function Page() { + return ( +
+
+
+ +
+

+ Sign in to your account +

+
+ +
+ + + +

+ Don't have an account?{' '} + + Register here + +

+
+
+ ); +} diff --git a/frontend/app/(auth)/auth/register/page.tsx b/frontend/app/(auth)/auth/register/page.tsx new file mode 100644 index 0000000..0ab5de0 --- /dev/null +++ b/frontend/app/(auth)/auth/register/page.tsx @@ -0,0 +1,41 @@ +import Link from 'next/link'; +import { RegisterForm } from '@/components/forms'; +import { SocialButtons } from '@/components/common'; +import type { Metadata } from 'next'; + +export const metadata: Metadata = { + title: 'Next Tutorial | Register', + description: 'Next Tutorial register page', +}; + +export default function Page() { + return ( +
+
+ Next Tutorial +

+ Sign up for your account +

+
+ +
+ + + +

+ Already have an account?{' '} + + Login here + +

+
+
+ ); +} diff --git a/frontend/app/(auth)/layout.tsx b/frontend/app/(auth)/layout.tsx new file mode 100644 index 0000000..2ee6f83 --- /dev/null +++ b/frontend/app/(auth)/layout.tsx @@ -0,0 +1,11 @@ +export default function AuthLayout({ + children, +}: { + children: React.ReactNode +}) { + return ( + + {children} + + ) +} diff --git a/frontend/app/(auth)/password-reset/[uid]/[token]/page.tsx b/frontend/app/(auth)/password-reset/[uid]/[token]/page.tsx new file mode 100644 index 0000000..915de00 --- /dev/null +++ b/frontend/app/(auth)/password-reset/[uid]/[token]/page.tsx @@ -0,0 +1,35 @@ +import { PasswordResetConfirmForm } from '@/components/forms'; +import type { Metadata } from 'next'; + +export const metadata: Metadata = { + title: 'Next Tutorial | Password Reset Confirm', + description: 'Next Tutorial password reset confirm page', +}; + +interface Props { + params: { + uid: string; + token: string; + }; +} + +export default function Page({ params: { uid, token } }: Props) { + return ( +
+
+ Next Tutorial +

+ Reset your password +

+
+ +
+ +
+
+ ); +} diff --git a/frontend/app/(auth)/password-reset/page.tsx b/frontend/app/(auth)/password-reset/page.tsx new file mode 100644 index 0000000..0de6fd6 --- /dev/null +++ b/frontend/app/(auth)/password-reset/page.tsx @@ -0,0 +1,28 @@ +import { PasswordResetForm } from '@/components/forms'; +import type { Metadata } from 'next'; + +export const metadata: Metadata = { + title: 'Next Tutorial | Password Reset', + description: 'Next Tutorial password reset page', +}; + +export default function Page() { + return ( +
+
+ Next Tutorial +

+ Reset your password +

+
+ +
+ +
+
+ ); +} diff --git a/frontend/app/(dashboard)/_components/mobile-sidebar.tsx b/frontend/app/(dashboard)/_components/mobile-sidebar.tsx new file mode 100644 index 0000000..7801b8b --- /dev/null +++ b/frontend/app/(dashboard)/_components/mobile-sidebar.tsx @@ -0,0 +1,21 @@ +import { Menu } from 'lucide-react'; + +import { + Sheet, + SheetContent, + SheetTrigger, +} from '@/components/ui/sheet'; +import { Sidebar } from './sidebar'; + +export const MobileSidebar = () => { + return ( + + + + + + + + + ); +}; diff --git a/frontend/app/(dashboard)/_components/navbar.tsx b/frontend/app/(dashboard)/_components/navbar.tsx new file mode 100644 index 0000000..69be86d --- /dev/null +++ b/frontend/app/(dashboard)/_components/navbar.tsx @@ -0,0 +1,37 @@ +'use client'; + +import { useAppDispatch } from '@/redux/hooks'; +import { useLogoutMutation } from '@/redux/features/authApiSlice'; +import { logout as setLogout } from '@/redux/features/authSlice'; +import { Button } from '@/components/ui/button'; +import { LogOut } from 'lucide-react'; +import { MobileSidebar } from '@/app/(dashboard)/_components/mobile-sidebar'; +import { UserNav } from './user-nav'; + +export default function Navbar() { + const dispatch = useAppDispatch(); + + const [logout] = useLogoutMutation(); + + + const handleLogout = () => { + logout(undefined) + .unwrap() + .then(() => { + dispatch(setLogout()); + }); + }; + + return ( +
+ +
+ + +
+
+ ); +} \ No newline at end of file diff --git a/frontend/app/(dashboard)/_components/sidebar-item.tsx b/frontend/app/(dashboard)/_components/sidebar-item.tsx new file mode 100644 index 0000000..a16e43a --- /dev/null +++ b/frontend/app/(dashboard)/_components/sidebar-item.tsx @@ -0,0 +1,56 @@ +'use client'; + +import { LucideIcon } from 'lucide-react'; +import { usePathname, useRouter } from 'next/navigation'; + +import { cn } from '@/lib/utils'; + +interface SidebarItemProps { + icon: LucideIcon; + label: string; + href: string; +} + +export const SidebarItem = ({ + icon: Icon, + label, + href, +}: SidebarItemProps) => { + const pathname = usePathname(); + const router = useRouter(); + + const isActive = + (pathname === '/' && href === '/') || + pathname === href || + pathname?.startsWith(`${href}/`); + + const onClick = () => { + router.push(href); + }; + + return ( + + ); +}; diff --git a/frontend/app/(dashboard)/_components/sidebar-routes.tsx b/frontend/app/(dashboard)/_components/sidebar-routes.tsx new file mode 100644 index 0000000..5121c7b --- /dev/null +++ b/frontend/app/(dashboard)/_components/sidebar-routes.tsx @@ -0,0 +1,35 @@ +'use client'; + +import { Compass, Layout, List } from 'lucide-react'; + +import { SidebarItem } from './sidebar-item'; + +const guestRoutes = [ + { + icon: Layout, + label: 'Dashboard', + href: '/dashboard', + }, + { + icon: Compass, + label: 'ToDos', + href: '/todos', + }, +]; + + +export const SidebarRoutes = () => { + + return ( +
+ {guestRoutes.map((route) => ( + + ))} +
+ ); +}; diff --git a/frontend/app/(dashboard)/_components/sidebar.tsx b/frontend/app/(dashboard)/_components/sidebar.tsx new file mode 100644 index 0000000..2d31633 --- /dev/null +++ b/frontend/app/(dashboard)/_components/sidebar.tsx @@ -0,0 +1,17 @@ +"use client"; + +import Logo from "@/components/common/Logo" +import { SidebarRoutes } from './sidebar-routes'; + +export const Sidebar = () => { + return ( +
+
+ +
+
+ +
+
+ ); +}; \ No newline at end of file diff --git a/frontend/app/(dashboard)/_components/user-nav.tsx b/frontend/app/(dashboard)/_components/user-nav.tsx new file mode 100644 index 0000000..8abd30e --- /dev/null +++ b/frontend/app/(dashboard)/_components/user-nav.tsx @@ -0,0 +1,73 @@ +import { + Avatar, + AvatarFallback, + AvatarImage, +} from '@/components/ui/new-york/ui/avatar'; +import { Button } from '@/components/ui/new-york/ui/button'; +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuShortcut, + DropdownMenuTrigger, +} from '@/components/ui/new-york/ui/dropdown-menu'; +import { useRetrieveUserQuery } from '@/redux/features/authApiSlice'; + +export function UserNav() { + const { + data: user, + isLoading, + isFetching, + } = useRetrieveUserQuery(); + return ( + + + + + + +
+

+ {user?.first_name} {user?.last_name} +

+

+ {user?.email} +

+
+
+ + + + Profile + ⇧⌘P + + + Billing + ⌘B + + + Settings + ⌘S + + + + + + Log out + ⇧⌘Q + +
+
+ ); +} diff --git a/frontend/app/dashboard/layout.tsx b/frontend/app/(dashboard)/dashboard/layout.tsx similarity index 100% rename from frontend/app/dashboard/layout.tsx rename to frontend/app/(dashboard)/dashboard/layout.tsx diff --git a/frontend/app/dashboard/page.tsx b/frontend/app/(dashboard)/dashboard/page.tsx similarity index 100% rename from frontend/app/dashboard/page.tsx rename to frontend/app/(dashboard)/dashboard/page.tsx diff --git a/frontend/app/(dashboard)/layout.tsx b/frontend/app/(dashboard)/layout.tsx new file mode 100644 index 0000000..a42f00a --- /dev/null +++ b/frontend/app/(dashboard)/layout.tsx @@ -0,0 +1,25 @@ +import { RequireAuth } from '@/components/utils'; +import { Sidebar } from './_components/sidebar'; +import Navbar from './_components/navbar'; + +const DashboardLayout = ({ + children, +}: { + children: React.ReactNode; +}) => { + return ( + +
+
+ +
+
+ +
+
{children}
+
+
+ ); +}; + +export default DashboardLayout; diff --git a/frontend/app/auth/login/page.tsx b/frontend/app/auth/login/page.tsx deleted file mode 100644 index 6331233..0000000 --- a/frontend/app/auth/login/page.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import Link from 'next/link'; -import { LoginForm } from '@/components/forms'; -import { SocialButtons } from '@/components/common'; -import type { Metadata } from 'next'; - -export const metadata: Metadata = { - title: 'Full Auth | Login', - description: 'Full Auth login page', -}; - -export default function Page() { - return ( -
-
- Full Auth -

- Sign in to your account -

-
- -
- - - -

- Don't have an account?{' '} - - Register here - -

-
-
- ); -} diff --git a/frontend/app/auth/register/page.tsx b/frontend/app/auth/register/page.tsx deleted file mode 100644 index 6d65683..0000000 --- a/frontend/app/auth/register/page.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import Link from 'next/link'; -import { RegisterForm } from '@/components/forms'; -import { SocialButtons } from '@/components/common'; -import type { Metadata } from 'next'; - -export const metadata: Metadata = { - title: 'Full Auth | Register', - description: 'Full Auth register page', -}; - -export default function Page() { - return ( -
-
- Full Auth -

- Sign up for your account -

-
- -
- - - -

- Already have an account?{' '} - - Login here - -

-
-
- ); -} diff --git a/frontend/app/layout.tsx b/frontend/app/layout.tsx index 973e704..cbfe82a 100644 --- a/frontend/app/layout.tsx +++ b/frontend/app/layout.tsx @@ -2,14 +2,13 @@ import '@/styles/globals.css'; import { Inter } from 'next/font/google'; import type { Metadata } from 'next'; import Provider from '@/redux/provider'; -import { Footer, Navbar } from '@/components/common'; import { Setup } from '@/components/utils'; const inter = Inter({ subsets: ['latin'] }); export const metadata: Metadata = { - title: 'Full Auth', - description: 'Full Auth application that provides jwt authentication', + title: 'Next.js', + description: 'Generated by Next.js', }; export default function RootLayout({ @@ -18,17 +17,13 @@ export default function RootLayout({ children: React.ReactNode; }) { return ( - - - - - -
- {children} -
-