kaze 1.3.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +72 -1
- data/README.md +1 -1
- data/lib/kaze/commands/app/hotwire_stack.rb +2 -0
- data/lib/kaze/commands/app/inertia_react_stack.rb +5 -1
- data/lib/kaze/commands/app/inertia_vue_stack.rb +5 -1
- data/lib/kaze/commands/app.rb +9 -2
- data/lib/kaze/version.rb +1 -1
- data/stubs/default/config/routes.rb +11 -4
- data/stubs/default/test/integration/appearance_test.rb +11 -0
- data/stubs/default/test/integration/password_update_test.rb +9 -1
- data/stubs/hotwire/app/assets/tailwind/application.css +123 -0
- data/stubs/hotwire/app/components/breadcrumbs_component.rb +32 -0
- data/stubs/hotwire/app/components/danger_button_component.rb +1 -1
- data/stubs/hotwire/app/components/dropdown_component.html.erb +2 -2
- data/stubs/hotwire/app/components/dropdown_component.rb +5 -1
- data/stubs/hotwire/app/components/dropdown_link_component.rb +1 -1
- data/stubs/hotwire/app/components/heading_component.rb +19 -0
- data/stubs/hotwire/app/components/icon_component.rb +30 -0
- data/stubs/hotwire/app/components/input_error_component.rb +1 -1
- data/stubs/hotwire/app/components/input_label_component.rb +3 -3
- data/stubs/hotwire/app/components/modal_component.html.erb +2 -2
- data/stubs/hotwire/app/components/primary_button_component.rb +1 -1
- data/stubs/hotwire/app/components/secondary_button_component.rb +1 -1
- data/stubs/hotwire/app/components/sidebar_menu_button_component.rb +25 -0
- data/stubs/hotwire/app/components/text_input_component.rb +1 -1
- data/stubs/hotwire/app/components/user_avatar_component.rb +27 -0
- data/stubs/hotwire/app/controllers/application_controller.rb +1 -0
- data/stubs/hotwire/app/controllers/concerns/sidebar_state.rb +14 -0
- data/stubs/hotwire/app/controllers/settings/appearance_controller.rb +7 -0
- data/stubs/hotwire/app/controllers/settings/password_controller.rb +19 -0
- data/stubs/hotwire/app/controllers/{profile_controller.rb → settings/profile_controller.rb} +3 -4
- data/stubs/hotwire/app/views/auth/login.html.erb +1 -1
- data/stubs/hotwire/app/views/dashboard/index.html.erb +6 -11
- data/stubs/hotwire/app/views/layouts/_appearance.html.erb +18 -0
- data/stubs/hotwire/app/views/layouts/_settings.html.erb +26 -0
- data/stubs/hotwire/app/views/layouts/_sidebar.html.erb +56 -0
- data/stubs/hotwire/app/views/layouts/_sidebar_header.html.erb +11 -0
- data/stubs/hotwire/app/views/layouts/_sidebar_user.html.erb +34 -0
- data/stubs/hotwire/app/views/layouts/application.html.erb +25 -15
- data/stubs/hotwire/app/views/layouts/guest.html.erb +1 -0
- data/stubs/hotwire/app/views/settings/appearance/_update_appearance_form.html.erb +28 -0
- data/stubs/hotwire/app/views/settings/appearance/edit.html.erb +10 -0
- data/stubs/hotwire/app/views/{profile/partials → settings/password}/_update_password_form.html.erb +2 -10
- data/stubs/hotwire/app/views/settings/password/edit.html.erb +10 -0
- data/stubs/hotwire/app/views/{profile/partials → settings/profile}/_confirm_user_deletion_modal.html.erb +2 -2
- data/stubs/hotwire/app/views/settings/profile/_delete_user_form.html.erb +6 -0
- data/stubs/hotwire/app/views/{profile/partials → settings/profile}/_update_profile_information_form.html.erb +4 -12
- data/stubs/hotwire/app/views/{profile → settings/profile}/destroy.turbo_stream.erb +1 -1
- data/stubs/hotwire/app/views/settings/profile/edit.html.erb +14 -0
- data/stubs/hotwire/app/views/welcome/index.html.erb +1 -0
- data/stubs/inertia-common/app/controllers/concerns/handle_inertia_requests.rb +4 -1
- data/stubs/inertia-common/app/controllers/settings/appearance_controller.rb +7 -0
- data/stubs/inertia-common/app/controllers/settings/password_controller.rb +17 -0
- data/stubs/inertia-common/app/controllers/{profile_controller.rb → settings/profile_controller.rb} +2 -2
- data/stubs/inertia-common/test/integration/appearance_test.rb +11 -0
- data/stubs/inertia-common/test/integration/password_update_test.rb +10 -2
- data/stubs/inertia-react-ts/app/assets/tailwind/application.css +124 -0
- data/stubs/inertia-react-ts/app/javascript/Components/AppLogo.tsx +17 -0
- data/stubs/inertia-react-ts/app/javascript/Components/AppShell.tsx +9 -0
- data/stubs/inertia-react-ts/app/javascript/Components/AppSidebar.tsx +65 -0
- data/stubs/inertia-react-ts/app/javascript/Components/AppSidebarHeader.tsx +14 -0
- data/stubs/inertia-react-ts/app/javascript/Components/Breadcrumbs.tsx +43 -0
- data/stubs/inertia-react-ts/app/javascript/Components/Heading.tsx +19 -0
- data/stubs/inertia-react-ts/app/javascript/Components/InputError.tsx +1 -1
- data/stubs/inertia-react-ts/app/javascript/Components/NavFooter.tsx +32 -0
- data/stubs/inertia-react-ts/app/javascript/Components/NavMain.tsx +32 -0
- data/stubs/inertia-react-ts/app/javascript/Components/NavUser.tsx +39 -0
- data/stubs/inertia-react-ts/app/javascript/Components/UserInfo.tsx +23 -0
- data/stubs/inertia-react-ts/app/javascript/Components/UserMenuContent.tsx +57 -0
- data/stubs/inertia-react-ts/app/javascript/Components/ui/avatar.tsx +51 -0
- data/stubs/inertia-react-ts/app/javascript/Components/ui/breadcrumb.tsx +109 -0
- data/stubs/inertia-react-ts/app/javascript/Components/ui/button.tsx +49 -0
- data/stubs/inertia-react-ts/app/javascript/Components/ui/checkbox.tsx +27 -0
- data/stubs/inertia-react-ts/app/javascript/Components/ui/dialog.tsx +109 -0
- data/stubs/inertia-react-ts/app/javascript/Components/ui/dropdown-menu.tsx +217 -0
- data/stubs/inertia-react-ts/app/javascript/Components/ui/input.tsx +21 -0
- data/stubs/inertia-react-ts/app/javascript/Components/ui/label.tsx +19 -0
- data/stubs/inertia-react-ts/app/javascript/Components/ui/separator.tsx +26 -0
- data/stubs/inertia-react-ts/app/javascript/Components/ui/sheet.tsx +137 -0
- data/stubs/inertia-react-ts/app/javascript/Components/ui/sidebar.tsx +719 -0
- data/stubs/inertia-react-ts/app/javascript/Components/ui/skeleton.tsx +13 -0
- data/stubs/inertia-react-ts/app/javascript/Components/ui/tooltip.tsx +55 -0
- data/stubs/inertia-react-ts/app/javascript/Layouts/AuthenticatedLayout.tsx +19 -127
- data/stubs/inertia-react-ts/app/javascript/Layouts/GuestLayout.tsx +2 -2
- data/stubs/inertia-react-ts/app/javascript/Layouts/SettingsLayout.tsx +57 -0
- data/stubs/inertia-react-ts/app/javascript/Pages/Auth/ForgotPassword.tsx +6 -6
- data/stubs/inertia-react-ts/app/javascript/Pages/Auth/Login.tsx +17 -12
- data/stubs/inertia-react-ts/app/javascript/Pages/Auth/Register.tsx +14 -14
- data/stubs/inertia-react-ts/app/javascript/Pages/Auth/ResetPassword.tsx +10 -10
- data/stubs/inertia-react-ts/app/javascript/Pages/Auth/VerifyEmail.tsx +2 -2
- data/stubs/inertia-react-ts/app/javascript/Pages/Dashboard.tsx +13 -8
- data/stubs/inertia-react-ts/app/javascript/Pages/Settings/Appearance.tsx +33 -0
- data/stubs/inertia-react-ts/app/javascript/Pages/Settings/Partials/DeleteUserForm.tsx +107 -0
- data/stubs/inertia-react-ts/app/javascript/Pages/Settings/Partials/UpdateAppearanceForm.tsx +41 -0
- data/stubs/inertia-react-ts/app/javascript/Pages/{Profile → Settings}/Partials/UpdatePasswordForm.tsx +12 -20
- data/stubs/inertia-react-ts/app/javascript/Pages/{Profile → Settings}/Partials/UpdateProfileInformationForm.tsx +13 -21
- data/stubs/inertia-react-ts/app/javascript/Pages/Settings/Password.tsx +33 -0
- data/stubs/inertia-react-ts/app/javascript/Pages/Settings/Profile.tsx +35 -0
- data/stubs/inertia-react-ts/app/javascript/entrypoints/application.tsx +6 -1
- data/stubs/inertia-react-ts/app/javascript/hooks/use-initials.tsx +23 -0
- data/stubs/inertia-react-ts/app/javascript/hooks/use-mobile-navigation.tsx +11 -0
- data/stubs/inertia-react-ts/app/javascript/hooks/use-mobile.tsx +36 -0
- data/stubs/inertia-react-ts/app/javascript/lib/appearance.ts +22 -0
- data/stubs/inertia-react-ts/app/javascript/lib/utils.ts +6 -0
- data/stubs/inertia-react-ts/app/javascript/types/global.d.ts +2 -2
- data/stubs/inertia-react-ts/app/javascript/types/index.d.ts +14 -0
- data/stubs/inertia-react-ts/app/views/layouts/application.html.erb +19 -1
- data/stubs/inertia-react-ts/components.json +21 -0
- data/stubs/inertia-react-ts/package.json +13 -0
- data/stubs/inertia-vue-ts/app/assets/tailwind/application.css +124 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/AppLogo.vue +17 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/AppShell.vue +12 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/AppSidebar.vue +65 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/AppSidebarHeader.vue +20 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/Breadcrumbs.vue +32 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/Heading.vue +15 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/InputError.vue +1 -1
- data/stubs/inertia-vue-ts/app/javascript/Components/NavFooter.vue +33 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/NavMain.vue +32 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/NavUser.vue +40 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/UserInfo.vue +25 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/UserMenuContent.vue +47 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/avatar/Avatar.vue +18 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/avatar/AvatarFallback.vue +21 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/avatar/AvatarImage.vue +16 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/avatar/index.ts +3 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/Breadcrumb.vue +17 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbEllipsis.vue +23 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbItem.vue +17 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbLink.vue +21 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbList.vue +17 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbPage.vue +20 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbSeparator.vue +22 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/index.ts +7 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/button/Button.vue +31 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/button/index.ts +34 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/checkbox/Checkbox.vue +35 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/checkbox/index.ts +1 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/Dialog.vue +15 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogClose.vue +12 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogContent.vue +52 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogDescription.vue +23 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogFooter.vue +25 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogHeader.vue +14 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogOverlay.vue +26 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogTitle.vue +23 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogTrigger.vue +12 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/index.ts +9 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenu.vue +15 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuContent.vue +37 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuGroup.vue +12 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuItem.vue +41 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuLabel.vue +23 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuSeparator.vue +23 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuTrigger.vue +14 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/index.ts +7 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/input/Input.vue +50 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/input/index.ts +1 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/label/Label.vue +26 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/label/index.ts +1 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/separator/Separator.vue +29 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/separator/index.ts +1 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/Sheet.vue +19 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetClose.vue +15 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetContent.vue +62 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetDescription.vue +21 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetFooter.vue +16 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetHeader.vue +15 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetOverlay.vue +21 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetTitle.vue +21 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetTrigger.vue +15 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/index.ts +8 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/Sidebar.vue +96 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarContent.vue +18 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarFooter.vue +18 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarGroup.vue +18 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarGroupAction.vue +27 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarGroupContent.vue +18 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarGroupLabel.vue +25 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarHeader.vue +18 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarInput.vue +22 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarInset.vue +21 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenu.vue +18 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuAction.vue +35 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuBadge.vue +26 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuButton.vue +48 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuButtonChild.vue +36 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuItem.vue +18 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuSkeleton.vue +35 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuSub.vue +22 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuSubButton.vue +36 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuSubItem.vue +18 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarProvider.vue +82 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarRail.vue +33 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarSeparator.vue +19 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarTrigger.vue +28 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/index.ts +60 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/utils.ts +19 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/skeleton/Skeleton.vue +17 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/skeleton/index.ts +1 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/Tooltip.vue +19 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/TooltipContent.vue +34 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/TooltipProvider.vue +14 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/TooltipTrigger.vue +15 -0
- data/stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/index.ts +4 -0
- data/stubs/inertia-vue-ts/app/javascript/Layouts/AuthenticatedLayout.vue +17 -147
- data/stubs/inertia-vue-ts/app/javascript/Layouts/SettingsLayout.vue +57 -0
- data/stubs/inertia-vue-ts/app/javascript/Pages/Auth/ForgotPassword.vue +7 -7
- data/stubs/inertia-vue-ts/app/javascript/Pages/Auth/Login.vue +10 -12
- data/stubs/inertia-vue-ts/app/javascript/Pages/Auth/Register.vue +12 -14
- data/stubs/inertia-vue-ts/app/javascript/Pages/Auth/ResetPassword.vue +8 -10
- data/stubs/inertia-vue-ts/app/javascript/Pages/Auth/VerifyEmail.vue +3 -3
- data/stubs/inertia-vue-ts/app/javascript/Pages/Dashboard.vue +15 -10
- data/stubs/inertia-vue-ts/app/javascript/Pages/Settings/Appearance.vue +33 -0
- data/stubs/inertia-vue-ts/app/javascript/Pages/Settings/Partials/DeleteUserForm.vue +96 -0
- data/stubs/inertia-vue-ts/app/javascript/Pages/Settings/Partials/UpdateAppearanceForm.vue +42 -0
- data/stubs/inertia-vue-ts/app/javascript/Pages/{Profile → Settings}/Partials/UpdatePasswordForm.vue +12 -20
- data/stubs/inertia-vue-ts/app/javascript/Pages/{Profile → Settings}/Partials/UpdateProfileInformationForm.vue +12 -20
- data/stubs/inertia-vue-ts/app/javascript/Pages/Settings/Password.vue +33 -0
- data/stubs/inertia-vue-ts/app/javascript/Pages/Settings/Profile.vue +40 -0
- data/stubs/inertia-vue-ts/app/javascript/composables/useInitials.ts +29 -0
- data/stubs/inertia-vue-ts/app/javascript/lib/appearance.ts +22 -0
- data/stubs/inertia-vue-ts/app/javascript/lib/utils.ts +6 -0
- data/stubs/inertia-vue-ts/app/javascript/types/index.d.ts +14 -0
- data/stubs/inertia-vue-ts/app/javascript/types/vue-shims.d.ts +10 -0
- data/stubs/inertia-vue-ts/app/views/layouts/application.html.erb +19 -1
- data/stubs/inertia-vue-ts/components.json +20 -0
- data/stubs/inertia-vue-ts/package.json +8 -1
- data/stubs/inertia-vue-ts/vite.config.ts +25 -1
- metadata +174 -43
- data/stubs/hotwire/app/components/nav_link_component.rb +0 -15
- data/stubs/hotwire/app/components/responsive_nav_link_component.rb +0 -15
- data/stubs/hotwire/app/controllers/password_controller.rb +0 -13
- data/stubs/hotwire/app/views/layouts/_navigation.html.erb +0 -82
- data/stubs/hotwire/app/views/profile/edit.html.erb +0 -24
- data/stubs/hotwire/app/views/profile/partials/_delete_user_form.html.erb +0 -14
- data/stubs/inertia-common/app/controllers/password_controller.rb +0 -13
- data/stubs/inertia-react-ts/app/javascript/Components/Checkbox.tsx +0 -11
- data/stubs/inertia-react-ts/app/javascript/Components/DangerButton.tsx +0 -20
- data/stubs/inertia-react-ts/app/javascript/Components/Dropdown.tsx +0 -100
- data/stubs/inertia-react-ts/app/javascript/Components/InputLabel.tsx +0 -14
- data/stubs/inertia-react-ts/app/javascript/Components/Modal.tsx +0 -66
- data/stubs/inertia-react-ts/app/javascript/Components/NavLink.tsx +0 -21
- data/stubs/inertia-react-ts/app/javascript/Components/PrimaryButton.tsx +0 -20
- data/stubs/inertia-react-ts/app/javascript/Components/ResponsiveNavLink.tsx +0 -21
- data/stubs/inertia-react-ts/app/javascript/Components/SecondaryButton.tsx +0 -22
- data/stubs/inertia-react-ts/app/javascript/Components/TextInput.tsx +0 -32
- data/stubs/inertia-react-ts/app/javascript/Pages/Profile/Edit.tsx +0 -32
- data/stubs/inertia-react-ts/app/javascript/Pages/Profile/Partials/DeleteUserForm.tsx +0 -102
- data/stubs/inertia-vue-ts/app/javascript/Components/Checkbox.vue +0 -29
- data/stubs/inertia-vue-ts/app/javascript/Components/DangerButton.vue +0 -7
- data/stubs/inertia-vue-ts/app/javascript/Components/Dropdown.vue +0 -75
- data/stubs/inertia-vue-ts/app/javascript/Components/DropdownLink.vue +0 -16
- data/stubs/inertia-vue-ts/app/javascript/Components/InputLabel.vue +0 -12
- data/stubs/inertia-vue-ts/app/javascript/Components/Modal.vue +0 -109
- data/stubs/inertia-vue-ts/app/javascript/Components/NavLink.vue +0 -21
- data/stubs/inertia-vue-ts/app/javascript/Components/PrimaryButton.vue +0 -7
- data/stubs/inertia-vue-ts/app/javascript/Components/ResponsiveNavLink.vue +0 -21
- data/stubs/inertia-vue-ts/app/javascript/Components/SecondaryButton.vue +0 -19
- data/stubs/inertia-vue-ts/app/javascript/Components/TextInput.vue +0 -23
- data/stubs/inertia-vue-ts/app/javascript/Pages/Profile/Edit.vue +0 -38
- data/stubs/inertia-vue-ts/app/javascript/Pages/Profile/Partials/DeleteUserForm.vue +0 -99
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { cn } from "@/lib/utils"
|
|
2
|
+
|
|
3
|
+
function Skeleton({ className, ...props }: React.ComponentProps<"div">) {
|
|
4
|
+
return (
|
|
5
|
+
<div
|
|
6
|
+
data-slot="skeleton"
|
|
7
|
+
className={cn("bg-primary/10 animate-pulse rounded-md", className)}
|
|
8
|
+
{...props}
|
|
9
|
+
/>
|
|
10
|
+
)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export { Skeleton }
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as TooltipPrimitive from "@radix-ui/react-tooltip"
|
|
2
|
+
import * as React from "react"
|
|
3
|
+
|
|
4
|
+
import { cn } from "@/lib/utils"
|
|
5
|
+
|
|
6
|
+
function TooltipProvider({
|
|
7
|
+
delayDuration = 0,
|
|
8
|
+
...props
|
|
9
|
+
}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {
|
|
10
|
+
return (
|
|
11
|
+
<TooltipPrimitive.Provider
|
|
12
|
+
data-slot="tooltip-provider"
|
|
13
|
+
delayDuration={delayDuration}
|
|
14
|
+
{...props}
|
|
15
|
+
/>
|
|
16
|
+
)
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function Tooltip({
|
|
20
|
+
...props
|
|
21
|
+
}: React.ComponentProps<typeof TooltipPrimitive.Root>) {
|
|
22
|
+
return <TooltipPrimitive.Root data-slot="tooltip" {...props} />
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function TooltipTrigger({
|
|
26
|
+
...props
|
|
27
|
+
}: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {
|
|
28
|
+
return <TooltipPrimitive.Trigger data-slot="tooltip-trigger" {...props} />
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function TooltipContent({
|
|
32
|
+
className,
|
|
33
|
+
sideOffset = 4,
|
|
34
|
+
children,
|
|
35
|
+
...props
|
|
36
|
+
}: React.ComponentProps<typeof TooltipPrimitive.Content>) {
|
|
37
|
+
return (
|
|
38
|
+
<TooltipPrimitive.Portal>
|
|
39
|
+
<TooltipPrimitive.Content
|
|
40
|
+
data-slot="tooltip-content"
|
|
41
|
+
sideOffset={sideOffset}
|
|
42
|
+
className={cn(
|
|
43
|
+
"bg-primary text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-w-sm rounded-md px-3 py-1.5 text-xs",
|
|
44
|
+
className
|
|
45
|
+
)}
|
|
46
|
+
{...props}
|
|
47
|
+
>
|
|
48
|
+
{children}
|
|
49
|
+
<TooltipPrimitive.Arrow className="bg-primary fill-primary z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" />
|
|
50
|
+
</TooltipPrimitive.Content>
|
|
51
|
+
</TooltipPrimitive.Portal>
|
|
52
|
+
)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }
|
|
@@ -1,130 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const [showingNavigationDropdown, setShowingNavigationDropdown] = useState(false)
|
|
13
|
-
|
|
14
|
-
const { pathname = '' } = typeof window !== 'undefined' ? window.location : {}
|
|
15
|
-
|
|
1
|
+
import { PropsWithChildren } from 'react'
|
|
2
|
+
import AppShell from '@/Components/AppShell'
|
|
3
|
+
import AppSidebar from '@/Components/AppSidebar'
|
|
4
|
+
import AppSidebarHeader from '@/Components/AppSidebarHeader'
|
|
5
|
+
import { SidebarInset } from '@/Components/ui/sidebar'
|
|
6
|
+
import { BreadcrumbItem } from '@/types'
|
|
7
|
+
|
|
8
|
+
export default function AuthenticatedLayout({
|
|
9
|
+
breadcrumbs = [],
|
|
10
|
+
children,
|
|
11
|
+
}: PropsWithChildren<{ breadcrumbs?: BreadcrumbItem[] }>) {
|
|
16
12
|
return (
|
|
17
|
-
<
|
|
18
|
-
<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
</Link>
|
|
26
|
-
</div>
|
|
27
|
-
|
|
28
|
-
<div className="hidden space-x-8 sm:-my-px sm:ms-10 sm:flex">
|
|
29
|
-
<NavLink href={dashboard_path()} active={pathname.match(/dashboard/) != null}>
|
|
30
|
-
Dashboard
|
|
31
|
-
</NavLink>
|
|
32
|
-
</div>
|
|
33
|
-
</div>
|
|
34
|
-
|
|
35
|
-
<div className="hidden sm:flex sm:items-center sm:ms-6">
|
|
36
|
-
<div className="ms-3 relative">
|
|
37
|
-
<Dropdown>
|
|
38
|
-
<Dropdown.Trigger>
|
|
39
|
-
<span className="inline-flex rounded-md">
|
|
40
|
-
<button
|
|
41
|
-
type="button"
|
|
42
|
-
className="inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium rounded-md text-gray-500 bg-white hover:text-gray-700 focus:outline-hidden transition ease-in-out duration-150"
|
|
43
|
-
>
|
|
44
|
-
{user.name}
|
|
45
|
-
|
|
46
|
-
<svg
|
|
47
|
-
className="ms-2 -me-0.5 h-4 w-4"
|
|
48
|
-
xmlns="http://www.w3.org/2000/svg"
|
|
49
|
-
viewBox="0 0 20 20"
|
|
50
|
-
fill="currentColor"
|
|
51
|
-
>
|
|
52
|
-
<path
|
|
53
|
-
fillRule="evenodd"
|
|
54
|
-
d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z"
|
|
55
|
-
clipRule="evenodd"
|
|
56
|
-
/>
|
|
57
|
-
</svg>
|
|
58
|
-
</button>
|
|
59
|
-
</span>
|
|
60
|
-
</Dropdown.Trigger>
|
|
61
|
-
|
|
62
|
-
<Dropdown.Content>
|
|
63
|
-
<Dropdown.Link href={profile_edit_path()}>Profile</Dropdown.Link>
|
|
64
|
-
<Dropdown.Link href={logout_path()} method="post" as="button">
|
|
65
|
-
Log Out
|
|
66
|
-
</Dropdown.Link>
|
|
67
|
-
</Dropdown.Content>
|
|
68
|
-
</Dropdown>
|
|
69
|
-
</div>
|
|
70
|
-
</div>
|
|
71
|
-
|
|
72
|
-
<div className="-me-2 flex items-center sm:hidden">
|
|
73
|
-
<button
|
|
74
|
-
onClick={() => setShowingNavigationDropdown((previousState) => !previousState)}
|
|
75
|
-
className="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-gray-500 hover:bg-gray-100 focus:outline-hidden focus:bg-gray-100 focus:text-gray-500 transition duration-150 ease-in-out"
|
|
76
|
-
>
|
|
77
|
-
<svg className="h-6 w-6" stroke="currentColor" fill="none" viewBox="0 0 24 24">
|
|
78
|
-
<path
|
|
79
|
-
className={!showingNavigationDropdown ? 'inline-flex' : 'hidden'}
|
|
80
|
-
strokeLinecap="round"
|
|
81
|
-
strokeLinejoin="round"
|
|
82
|
-
strokeWidth="2"
|
|
83
|
-
d="M4 6h16M4 12h16M4 18h16"
|
|
84
|
-
/>
|
|
85
|
-
<path
|
|
86
|
-
className={showingNavigationDropdown ? 'inline-flex' : 'hidden'}
|
|
87
|
-
strokeLinecap="round"
|
|
88
|
-
strokeLinejoin="round"
|
|
89
|
-
strokeWidth="2"
|
|
90
|
-
d="M6 18L18 6M6 6l12 12"
|
|
91
|
-
/>
|
|
92
|
-
</svg>
|
|
93
|
-
</button>
|
|
94
|
-
</div>
|
|
95
|
-
</div>
|
|
96
|
-
</div>
|
|
97
|
-
|
|
98
|
-
<div className={(showingNavigationDropdown ? 'block' : 'hidden') + ' sm:hidden'}>
|
|
99
|
-
<div className="pt-2 pb-3 space-y-1">
|
|
100
|
-
<ResponsiveNavLink href={dashboard_path()} active={pathname.match(/dashboard/) != null}>
|
|
101
|
-
Dashboard
|
|
102
|
-
</ResponsiveNavLink>
|
|
103
|
-
</div>
|
|
104
|
-
|
|
105
|
-
<div className="pt-4 pb-1 border-t border-gray-200">
|
|
106
|
-
<div className="px-4">
|
|
107
|
-
<div className="font-medium text-base text-gray-800">{user.name}</div>
|
|
108
|
-
<div className="font-medium text-sm text-gray-500">{user.email}</div>
|
|
109
|
-
</div>
|
|
110
|
-
|
|
111
|
-
<div className="mt-3 space-y-1">
|
|
112
|
-
<ResponsiveNavLink href={profile_edit_path()}>Profile</ResponsiveNavLink>
|
|
113
|
-
<ResponsiveNavLink method="post" href={logout_path()} as="button">
|
|
114
|
-
Log Out
|
|
115
|
-
</ResponsiveNavLink>
|
|
116
|
-
</div>
|
|
117
|
-
</div>
|
|
118
|
-
</div>
|
|
119
|
-
</nav>
|
|
120
|
-
|
|
121
|
-
{header && (
|
|
122
|
-
<header className="bg-white shadow-sm">
|
|
123
|
-
<div className="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8">{header}</div>
|
|
124
|
-
</header>
|
|
125
|
-
)}
|
|
126
|
-
|
|
127
|
-
<main>{children}</main>
|
|
128
|
-
</div>
|
|
13
|
+
<AppShell>
|
|
14
|
+
<AppSidebar />
|
|
15
|
+
|
|
16
|
+
<SidebarInset className="min-w-0 overflow-x-clip">
|
|
17
|
+
<AppSidebarHeader breadcrumbs={breadcrumbs} />
|
|
18
|
+
{children}
|
|
19
|
+
</SidebarInset>
|
|
20
|
+
</AppShell>
|
|
129
21
|
)
|
|
130
22
|
}
|
|
@@ -4,14 +4,14 @@ import { PropsWithChildren } from 'react'
|
|
|
4
4
|
|
|
5
5
|
export default function GuestLayout({ children }: PropsWithChildren) {
|
|
6
6
|
return (
|
|
7
|
-
<div className="min-h-screen flex flex-col sm:justify-center items-center pt-6 sm:pt-0 bg-gray-100">
|
|
7
|
+
<div className="min-h-screen flex flex-col sm:justify-center items-center pt-6 sm:pt-0 bg-gray-100 dark:bg-gray-900">
|
|
8
8
|
<div>
|
|
9
9
|
<Link href="/">
|
|
10
10
|
<ApplicationLogo className="w-20 h-20 fill-current text-red-500" />
|
|
11
11
|
</Link>
|
|
12
12
|
</div>
|
|
13
13
|
|
|
14
|
-
<div className="w-full sm:max-w-md mt-6 px-6 py-4 bg-white shadow-md overflow-hidden sm:rounded-lg">
|
|
14
|
+
<div className="w-full sm:max-w-md mt-6 px-6 py-4 bg-white dark:bg-gray-800 shadow-md overflow-hidden sm:rounded-lg">
|
|
15
15
|
{children}
|
|
16
16
|
</div>
|
|
17
17
|
</div>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { PropsWithChildren } from 'react'
|
|
2
|
+
import { Link, usePage } from '@inertiajs/react'
|
|
3
|
+
import Heading from '@/Components/Heading'
|
|
4
|
+
import { Button } from '@/Components/ui/button'
|
|
5
|
+
import { Separator } from '@/Components/ui/separator'
|
|
6
|
+
import { cn } from '@/lib/utils'
|
|
7
|
+
import { appearance_edit_path, password_edit_path, profile_edit_path } from '@/routes'
|
|
8
|
+
import { NavItem } from '@/types'
|
|
9
|
+
|
|
10
|
+
const sidebarNavItems: NavItem[] = [
|
|
11
|
+
{
|
|
12
|
+
title: 'Profile',
|
|
13
|
+
href: profile_edit_path(),
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
title: 'Password',
|
|
17
|
+
href: password_edit_path(),
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
title: 'Appearance',
|
|
21
|
+
href: appearance_edit_path(),
|
|
22
|
+
},
|
|
23
|
+
]
|
|
24
|
+
|
|
25
|
+
export default function SettingsLayout({ children }: PropsWithChildren) {
|
|
26
|
+
const { url } = usePage()
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<div className="px-4 py-6">
|
|
30
|
+
<Heading title="Settings" description="Manage your profile and account settings" />
|
|
31
|
+
|
|
32
|
+
<div className="flex flex-col lg:flex-row lg:space-x-12">
|
|
33
|
+
<aside className="w-full max-w-xl lg:w-48">
|
|
34
|
+
<nav className="flex flex-col space-y-1 space-x-0" aria-label="Settings">
|
|
35
|
+
{sidebarNavItems.map((item) => (
|
|
36
|
+
<Button
|
|
37
|
+
key={item.href}
|
|
38
|
+
size="sm"
|
|
39
|
+
variant="ghost"
|
|
40
|
+
asChild
|
|
41
|
+
className={cn('w-full justify-start', { 'bg-muted': url.startsWith(item.href) })}
|
|
42
|
+
>
|
|
43
|
+
<Link href={item.href}>{item.title}</Link>
|
|
44
|
+
</Button>
|
|
45
|
+
))}
|
|
46
|
+
</nav>
|
|
47
|
+
</aside>
|
|
48
|
+
|
|
49
|
+
<Separator className="my-6 lg:hidden" />
|
|
50
|
+
|
|
51
|
+
<div className="flex-1 md:max-w-2xl">
|
|
52
|
+
<section className="max-w-xl space-y-12">{children}</section>
|
|
53
|
+
</div>
|
|
54
|
+
</div>
|
|
55
|
+
</div>
|
|
56
|
+
)
|
|
57
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import GuestLayout from '@/Layouts/GuestLayout'
|
|
2
|
+
import { Button } from '@/Components/ui/button'
|
|
3
|
+
import { Input } from '@/Components/ui/input'
|
|
2
4
|
import InputError from '@/Components/InputError'
|
|
3
|
-
import PrimaryButton from '@/Components/PrimaryButton'
|
|
4
|
-
import TextInput from '@/Components/TextInput'
|
|
5
5
|
import { Head, useForm } from '@inertiajs/react'
|
|
6
6
|
import { FormEventHandler } from 'react'
|
|
7
7
|
import { password_email_path } from '@/routes'
|
|
@@ -29,22 +29,22 @@ export default function ForgotPassword({ status }: { status?: string }) {
|
|
|
29
29
|
{status && <div className="mb-4 font-medium text-sm text-green-600 dark:text-green-400">{status}</div>}
|
|
30
30
|
|
|
31
31
|
<form onSubmit={submit}>
|
|
32
|
-
<
|
|
32
|
+
<Input
|
|
33
33
|
id="email"
|
|
34
34
|
type="email"
|
|
35
35
|
name="email"
|
|
36
36
|
value={data.email}
|
|
37
37
|
className="mt-1 block w-full"
|
|
38
|
-
|
|
38
|
+
autoFocus
|
|
39
39
|
onChange={(e) => setData('email', e.target.value)}
|
|
40
40
|
/>
|
|
41
41
|
|
|
42
42
|
<InputError message={errors.email} className="mt-2" />
|
|
43
43
|
|
|
44
44
|
<div className="flex items-center justify-end mt-4">
|
|
45
|
-
<
|
|
45
|
+
<Button className="ms-4" disabled={processing}>
|
|
46
46
|
Email Password Reset Link
|
|
47
|
-
</
|
|
47
|
+
</Button>
|
|
48
48
|
</div>
|
|
49
49
|
</form>
|
|
50
50
|
</GuestLayout>
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { FormEventHandler } from 'react'
|
|
2
|
-
import
|
|
2
|
+
import { Button } from '@/Components/ui/button'
|
|
3
|
+
import { Input } from '@/Components/ui/input'
|
|
4
|
+
import { Label } from '@/Components/ui/label'
|
|
5
|
+
import { Checkbox } from '@/Components/ui/checkbox'
|
|
3
6
|
import GuestLayout from '@/Layouts/GuestLayout'
|
|
4
7
|
import InputError from '@/Components/InputError'
|
|
5
|
-
import InputLabel from '@/Components/InputLabel'
|
|
6
|
-
import PrimaryButton from '@/Components/PrimaryButton'
|
|
7
|
-
import TextInput from '@/Components/TextInput'
|
|
8
8
|
import { Head, Link, useForm } from '@inertiajs/react'
|
|
9
9
|
import { login_path, password_request_path } from '@/routes'
|
|
10
10
|
|
|
@@ -31,16 +31,16 @@ export default function Login({ status }: { status?: string }) {
|
|
|
31
31
|
|
|
32
32
|
<form onSubmit={submit}>
|
|
33
33
|
<div>
|
|
34
|
-
<
|
|
34
|
+
<Label htmlFor="email">Email</Label>
|
|
35
35
|
|
|
36
|
-
<
|
|
36
|
+
<Input
|
|
37
37
|
id="email"
|
|
38
38
|
type="email"
|
|
39
39
|
name="email"
|
|
40
40
|
value={data.email}
|
|
41
41
|
className="mt-1 block w-full"
|
|
42
42
|
autoComplete="username"
|
|
43
|
-
|
|
43
|
+
autoFocus
|
|
44
44
|
onChange={(e) => setData('email', e.target.value)}
|
|
45
45
|
/>
|
|
46
46
|
|
|
@@ -48,9 +48,9 @@ export default function Login({ status }: { status?: string }) {
|
|
|
48
48
|
</div>
|
|
49
49
|
|
|
50
50
|
<div className="mt-4">
|
|
51
|
-
<
|
|
51
|
+
<Label htmlFor="password">Password</Label>
|
|
52
52
|
|
|
53
|
-
<
|
|
53
|
+
<Input
|
|
54
54
|
id="password"
|
|
55
55
|
type="password"
|
|
56
56
|
name="password"
|
|
@@ -65,7 +65,12 @@ export default function Login({ status }: { status?: string }) {
|
|
|
65
65
|
|
|
66
66
|
<div className="block mt-4">
|
|
67
67
|
<label className="flex items-center">
|
|
68
|
-
<Checkbox
|
|
68
|
+
<Checkbox
|
|
69
|
+
id="remember"
|
|
70
|
+
name="remember"
|
|
71
|
+
checked={data.remember}
|
|
72
|
+
onCheckedChange={(checked) => setData('remember', (checked === true) as false)}
|
|
73
|
+
/>
|
|
69
74
|
<span className="ms-2 text-sm text-gray-600 dark:text-gray-400">Remember me</span>
|
|
70
75
|
</label>
|
|
71
76
|
</div>
|
|
@@ -78,9 +83,9 @@ export default function Login({ status }: { status?: string }) {
|
|
|
78
83
|
Forgot your password?
|
|
79
84
|
</Link>
|
|
80
85
|
|
|
81
|
-
<
|
|
86
|
+
<Button className="ms-4" disabled={processing}>
|
|
82
87
|
Log in
|
|
83
|
-
</
|
|
88
|
+
</Button>
|
|
84
89
|
</div>
|
|
85
90
|
</form>
|
|
86
91
|
</GuestLayout>
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { FormEventHandler } from 'react'
|
|
2
|
+
import { Button } from '@/Components/ui/button'
|
|
3
|
+
import { Input } from '@/Components/ui/input'
|
|
4
|
+
import { Label } from '@/Components/ui/label'
|
|
2
5
|
import GuestLayout from '@/Layouts/GuestLayout'
|
|
3
6
|
import InputError from '@/Components/InputError'
|
|
4
|
-
import InputLabel from '@/Components/InputLabel'
|
|
5
|
-
import PrimaryButton from '@/Components/PrimaryButton'
|
|
6
|
-
import TextInput from '@/Components/TextInput'
|
|
7
7
|
import { Head, Link, useForm } from '@inertiajs/react'
|
|
8
8
|
import { login_path, register_path } from '@/routes'
|
|
9
9
|
|
|
@@ -29,15 +29,15 @@ export default function Register() {
|
|
|
29
29
|
|
|
30
30
|
<form onSubmit={submit}>
|
|
31
31
|
<div>
|
|
32
|
-
<
|
|
32
|
+
<Label htmlFor="name">Name</Label>
|
|
33
33
|
|
|
34
|
-
<
|
|
34
|
+
<Input
|
|
35
35
|
id="name"
|
|
36
36
|
name="name"
|
|
37
37
|
value={data.name}
|
|
38
38
|
className="mt-1 block w-full"
|
|
39
39
|
autoComplete="name"
|
|
40
|
-
|
|
40
|
+
autoFocus
|
|
41
41
|
onChange={(e) => setData('name', e.target.value)}
|
|
42
42
|
required
|
|
43
43
|
/>
|
|
@@ -46,9 +46,9 @@ export default function Register() {
|
|
|
46
46
|
</div>
|
|
47
47
|
|
|
48
48
|
<div className="mt-4">
|
|
49
|
-
<
|
|
49
|
+
<Label htmlFor="email">Email</Label>
|
|
50
50
|
|
|
51
|
-
<
|
|
51
|
+
<Input
|
|
52
52
|
id="email"
|
|
53
53
|
type="email"
|
|
54
54
|
name="email"
|
|
@@ -63,9 +63,9 @@ export default function Register() {
|
|
|
63
63
|
</div>
|
|
64
64
|
|
|
65
65
|
<div className="mt-4">
|
|
66
|
-
<
|
|
66
|
+
<Label htmlFor="password">Password</Label>
|
|
67
67
|
|
|
68
|
-
<
|
|
68
|
+
<Input
|
|
69
69
|
id="password"
|
|
70
70
|
type="password"
|
|
71
71
|
name="password"
|
|
@@ -80,9 +80,9 @@ export default function Register() {
|
|
|
80
80
|
</div>
|
|
81
81
|
|
|
82
82
|
<div className="mt-4">
|
|
83
|
-
<
|
|
83
|
+
<Label htmlFor="password_confirmation">Confirm Password</Label>
|
|
84
84
|
|
|
85
|
-
<
|
|
85
|
+
<Input
|
|
86
86
|
id="password_confirmation"
|
|
87
87
|
type="password"
|
|
88
88
|
name="password_confirmation"
|
|
@@ -104,9 +104,9 @@ export default function Register() {
|
|
|
104
104
|
Already registered?
|
|
105
105
|
</Link>
|
|
106
106
|
|
|
107
|
-
<
|
|
107
|
+
<Button className="ms-4" disabled={processing}>
|
|
108
108
|
Register
|
|
109
|
-
</
|
|
109
|
+
</Button>
|
|
110
110
|
</div>
|
|
111
111
|
</form>
|
|
112
112
|
</GuestLayout>
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { FormEventHandler } from 'react'
|
|
2
|
+
import { Button } from '@/Components/ui/button'
|
|
3
|
+
import { Input } from '@/Components/ui/input'
|
|
4
|
+
import { Label } from '@/Components/ui/label'
|
|
2
5
|
import GuestLayout from '@/Layouts/GuestLayout'
|
|
3
6
|
import InputError from '@/Components/InputError'
|
|
4
|
-
import InputLabel from '@/Components/InputLabel'
|
|
5
|
-
import PrimaryButton from '@/Components/PrimaryButton'
|
|
6
|
-
import TextInput from '@/Components/TextInput'
|
|
7
7
|
import { Head, useForm } from '@inertiajs/react'
|
|
8
8
|
import { password_store_path } from '@/routes'
|
|
9
9
|
|
|
@@ -28,16 +28,16 @@ export default function ResetPassword({ token }: { token: string }) {
|
|
|
28
28
|
|
|
29
29
|
<form onSubmit={submit}>
|
|
30
30
|
<div>
|
|
31
|
-
<
|
|
31
|
+
<Label htmlFor="password">Password</Label>
|
|
32
32
|
|
|
33
|
-
<
|
|
33
|
+
<Input
|
|
34
34
|
id="password"
|
|
35
35
|
type="password"
|
|
36
36
|
name="password"
|
|
37
37
|
value={data.password}
|
|
38
38
|
className="mt-1 block w-full"
|
|
39
39
|
autoComplete="new-password"
|
|
40
|
-
|
|
40
|
+
autoFocus
|
|
41
41
|
onChange={(e) => setData('password', e.target.value)}
|
|
42
42
|
/>
|
|
43
43
|
|
|
@@ -45,9 +45,9 @@ export default function ResetPassword({ token }: { token: string }) {
|
|
|
45
45
|
</div>
|
|
46
46
|
|
|
47
47
|
<div className="mt-4">
|
|
48
|
-
<
|
|
48
|
+
<Label htmlFor="password_confirmation">Confirm Password</Label>
|
|
49
49
|
|
|
50
|
-
<
|
|
50
|
+
<Input
|
|
51
51
|
type="password"
|
|
52
52
|
name="password_confirmation"
|
|
53
53
|
value={data.password_confirmation}
|
|
@@ -60,9 +60,9 @@ export default function ResetPassword({ token }: { token: string }) {
|
|
|
60
60
|
</div>
|
|
61
61
|
|
|
62
62
|
<div className="flex items-center justify-end mt-4">
|
|
63
|
-
<
|
|
63
|
+
<Button className="ms-4" disabled={processing}>
|
|
64
64
|
Reset Password
|
|
65
|
-
</
|
|
65
|
+
</Button>
|
|
66
66
|
</div>
|
|
67
67
|
</form>
|
|
68
68
|
</GuestLayout>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import GuestLayout from '@/Layouts/GuestLayout'
|
|
2
|
-
import
|
|
2
|
+
import { Button } from '@/Components/ui/button'
|
|
3
3
|
import { Head, Link, useForm } from '@inertiajs/react'
|
|
4
4
|
import { FormEventHandler } from 'react'
|
|
5
5
|
import { logout_path, verification_send_path } from '@/routes'
|
|
@@ -30,7 +30,7 @@ export default function VerifyEmail({ status }: { status?: string }) {
|
|
|
30
30
|
|
|
31
31
|
<form onSubmit={submit}>
|
|
32
32
|
<div className="mt-4 flex items-center justify-between">
|
|
33
|
-
<
|
|
33
|
+
<Button disabled={processing}>Resend Verification Email</Button>
|
|
34
34
|
|
|
35
35
|
<Link
|
|
36
36
|
href={logout_path()}
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout'
|
|
2
2
|
import { Head } from '@inertiajs/react'
|
|
3
|
+
import { dashboard_path } from '@/routes'
|
|
4
|
+
import { BreadcrumbItem } from '@/types'
|
|
5
|
+
|
|
6
|
+
const breadcrumbs: BreadcrumbItem[] = [
|
|
7
|
+
{
|
|
8
|
+
title: 'Dashboard',
|
|
9
|
+
href: dashboard_path(),
|
|
10
|
+
},
|
|
11
|
+
]
|
|
3
12
|
|
|
4
13
|
export default function Dashboard() {
|
|
5
14
|
return (
|
|
6
|
-
<AuthenticatedLayout
|
|
7
|
-
header={<h2 className="font-semibold text-xl text-gray-800 dark:text-gray-200 leading-tight">Dashboard</h2>}
|
|
8
|
-
>
|
|
15
|
+
<AuthenticatedLayout breadcrumbs={breadcrumbs}>
|
|
9
16
|
<Head title="Dashboard" />
|
|
10
17
|
|
|
11
|
-
<div className="
|
|
12
|
-
<div className="
|
|
13
|
-
|
|
14
|
-
<div className="p-6 text-gray-900 dark:text-gray-100">You're logged in!</div>
|
|
15
|
-
</div>
|
|
18
|
+
<div className="flex h-full flex-1 flex-col gap-4 rounded-xl p-4">
|
|
19
|
+
<div className="relative min-h-[60vh] flex-1 overflow-hidden rounded-xl border border-sidebar-border/70 p-6 dark:border-sidebar-border">
|
|
20
|
+
You're logged in!
|
|
16
21
|
</div>
|
|
17
22
|
</div>
|
|
18
23
|
</AuthenticatedLayout>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Head } from '@inertiajs/react'
|
|
2
|
+
import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout'
|
|
3
|
+
import SettingsLayout from '@/Layouts/SettingsLayout'
|
|
4
|
+
import Heading from '@/Components/Heading'
|
|
5
|
+
import UpdateAppearanceForm from './Partials/UpdateAppearanceForm'
|
|
6
|
+
import { appearance_edit_path } from '@/routes'
|
|
7
|
+
import { BreadcrumbItem } from '@/types'
|
|
8
|
+
|
|
9
|
+
const breadcrumbs: BreadcrumbItem[] = [
|
|
10
|
+
{
|
|
11
|
+
title: 'Appearance settings',
|
|
12
|
+
href: appearance_edit_path(),
|
|
13
|
+
},
|
|
14
|
+
]
|
|
15
|
+
|
|
16
|
+
export default function Appearance() {
|
|
17
|
+
return (
|
|
18
|
+
<AuthenticatedLayout breadcrumbs={breadcrumbs}>
|
|
19
|
+
<Head title="Appearance settings" />
|
|
20
|
+
|
|
21
|
+
<SettingsLayout>
|
|
22
|
+
<div className="space-y-6">
|
|
23
|
+
<Heading
|
|
24
|
+
variant="small"
|
|
25
|
+
title="Appearance settings"
|
|
26
|
+
description="Update the appearance settings for your account"
|
|
27
|
+
/>
|
|
28
|
+
<UpdateAppearanceForm />
|
|
29
|
+
</div>
|
|
30
|
+
</SettingsLayout>
|
|
31
|
+
</AuthenticatedLayout>
|
|
32
|
+
)
|
|
33
|
+
}
|