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.
Files changed (263) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +72 -1
  3. data/README.md +1 -1
  4. data/lib/kaze/commands/app/hotwire_stack.rb +2 -0
  5. data/lib/kaze/commands/app/inertia_react_stack.rb +5 -1
  6. data/lib/kaze/commands/app/inertia_vue_stack.rb +5 -1
  7. data/lib/kaze/commands/app.rb +9 -2
  8. data/lib/kaze/version.rb +1 -1
  9. data/stubs/default/config/routes.rb +11 -4
  10. data/stubs/default/test/integration/appearance_test.rb +11 -0
  11. data/stubs/default/test/integration/password_update_test.rb +9 -1
  12. data/stubs/hotwire/app/assets/tailwind/application.css +123 -0
  13. data/stubs/hotwire/app/components/breadcrumbs_component.rb +32 -0
  14. data/stubs/hotwire/app/components/danger_button_component.rb +1 -1
  15. data/stubs/hotwire/app/components/dropdown_component.html.erb +2 -2
  16. data/stubs/hotwire/app/components/dropdown_component.rb +5 -1
  17. data/stubs/hotwire/app/components/dropdown_link_component.rb +1 -1
  18. data/stubs/hotwire/app/components/heading_component.rb +19 -0
  19. data/stubs/hotwire/app/components/icon_component.rb +30 -0
  20. data/stubs/hotwire/app/components/input_error_component.rb +1 -1
  21. data/stubs/hotwire/app/components/input_label_component.rb +3 -3
  22. data/stubs/hotwire/app/components/modal_component.html.erb +2 -2
  23. data/stubs/hotwire/app/components/primary_button_component.rb +1 -1
  24. data/stubs/hotwire/app/components/secondary_button_component.rb +1 -1
  25. data/stubs/hotwire/app/components/sidebar_menu_button_component.rb +25 -0
  26. data/stubs/hotwire/app/components/text_input_component.rb +1 -1
  27. data/stubs/hotwire/app/components/user_avatar_component.rb +27 -0
  28. data/stubs/hotwire/app/controllers/application_controller.rb +1 -0
  29. data/stubs/hotwire/app/controllers/concerns/sidebar_state.rb +14 -0
  30. data/stubs/hotwire/app/controllers/settings/appearance_controller.rb +7 -0
  31. data/stubs/hotwire/app/controllers/settings/password_controller.rb +19 -0
  32. data/stubs/hotwire/app/controllers/{profile_controller.rb → settings/profile_controller.rb} +3 -4
  33. data/stubs/hotwire/app/views/auth/login.html.erb +1 -1
  34. data/stubs/hotwire/app/views/dashboard/index.html.erb +6 -11
  35. data/stubs/hotwire/app/views/layouts/_appearance.html.erb +18 -0
  36. data/stubs/hotwire/app/views/layouts/_settings.html.erb +26 -0
  37. data/stubs/hotwire/app/views/layouts/_sidebar.html.erb +56 -0
  38. data/stubs/hotwire/app/views/layouts/_sidebar_header.html.erb +11 -0
  39. data/stubs/hotwire/app/views/layouts/_sidebar_user.html.erb +34 -0
  40. data/stubs/hotwire/app/views/layouts/application.html.erb +25 -15
  41. data/stubs/hotwire/app/views/layouts/guest.html.erb +1 -0
  42. data/stubs/hotwire/app/views/settings/appearance/_update_appearance_form.html.erb +28 -0
  43. data/stubs/hotwire/app/views/settings/appearance/edit.html.erb +10 -0
  44. data/stubs/hotwire/app/views/{profile/partials → settings/password}/_update_password_form.html.erb +2 -10
  45. data/stubs/hotwire/app/views/settings/password/edit.html.erb +10 -0
  46. data/stubs/hotwire/app/views/{profile/partials → settings/profile}/_confirm_user_deletion_modal.html.erb +2 -2
  47. data/stubs/hotwire/app/views/settings/profile/_delete_user_form.html.erb +6 -0
  48. data/stubs/hotwire/app/views/{profile/partials → settings/profile}/_update_profile_information_form.html.erb +4 -12
  49. data/stubs/hotwire/app/views/{profile → settings/profile}/destroy.turbo_stream.erb +1 -1
  50. data/stubs/hotwire/app/views/settings/profile/edit.html.erb +14 -0
  51. data/stubs/hotwire/app/views/welcome/index.html.erb +1 -0
  52. data/stubs/inertia-common/app/controllers/concerns/handle_inertia_requests.rb +4 -1
  53. data/stubs/inertia-common/app/controllers/settings/appearance_controller.rb +7 -0
  54. data/stubs/inertia-common/app/controllers/settings/password_controller.rb +17 -0
  55. data/stubs/inertia-common/app/controllers/{profile_controller.rb → settings/profile_controller.rb} +2 -2
  56. data/stubs/inertia-common/test/integration/appearance_test.rb +11 -0
  57. data/stubs/inertia-common/test/integration/password_update_test.rb +10 -2
  58. data/stubs/inertia-react-ts/app/assets/tailwind/application.css +124 -0
  59. data/stubs/inertia-react-ts/app/javascript/Components/AppLogo.tsx +17 -0
  60. data/stubs/inertia-react-ts/app/javascript/Components/AppShell.tsx +9 -0
  61. data/stubs/inertia-react-ts/app/javascript/Components/AppSidebar.tsx +65 -0
  62. data/stubs/inertia-react-ts/app/javascript/Components/AppSidebarHeader.tsx +14 -0
  63. data/stubs/inertia-react-ts/app/javascript/Components/Breadcrumbs.tsx +43 -0
  64. data/stubs/inertia-react-ts/app/javascript/Components/Heading.tsx +19 -0
  65. data/stubs/inertia-react-ts/app/javascript/Components/InputError.tsx +1 -1
  66. data/stubs/inertia-react-ts/app/javascript/Components/NavFooter.tsx +32 -0
  67. data/stubs/inertia-react-ts/app/javascript/Components/NavMain.tsx +32 -0
  68. data/stubs/inertia-react-ts/app/javascript/Components/NavUser.tsx +39 -0
  69. data/stubs/inertia-react-ts/app/javascript/Components/UserInfo.tsx +23 -0
  70. data/stubs/inertia-react-ts/app/javascript/Components/UserMenuContent.tsx +57 -0
  71. data/stubs/inertia-react-ts/app/javascript/Components/ui/avatar.tsx +51 -0
  72. data/stubs/inertia-react-ts/app/javascript/Components/ui/breadcrumb.tsx +109 -0
  73. data/stubs/inertia-react-ts/app/javascript/Components/ui/button.tsx +49 -0
  74. data/stubs/inertia-react-ts/app/javascript/Components/ui/checkbox.tsx +27 -0
  75. data/stubs/inertia-react-ts/app/javascript/Components/ui/dialog.tsx +109 -0
  76. data/stubs/inertia-react-ts/app/javascript/Components/ui/dropdown-menu.tsx +217 -0
  77. data/stubs/inertia-react-ts/app/javascript/Components/ui/input.tsx +21 -0
  78. data/stubs/inertia-react-ts/app/javascript/Components/ui/label.tsx +19 -0
  79. data/stubs/inertia-react-ts/app/javascript/Components/ui/separator.tsx +26 -0
  80. data/stubs/inertia-react-ts/app/javascript/Components/ui/sheet.tsx +137 -0
  81. data/stubs/inertia-react-ts/app/javascript/Components/ui/sidebar.tsx +719 -0
  82. data/stubs/inertia-react-ts/app/javascript/Components/ui/skeleton.tsx +13 -0
  83. data/stubs/inertia-react-ts/app/javascript/Components/ui/tooltip.tsx +55 -0
  84. data/stubs/inertia-react-ts/app/javascript/Layouts/AuthenticatedLayout.tsx +19 -127
  85. data/stubs/inertia-react-ts/app/javascript/Layouts/GuestLayout.tsx +2 -2
  86. data/stubs/inertia-react-ts/app/javascript/Layouts/SettingsLayout.tsx +57 -0
  87. data/stubs/inertia-react-ts/app/javascript/Pages/Auth/ForgotPassword.tsx +6 -6
  88. data/stubs/inertia-react-ts/app/javascript/Pages/Auth/Login.tsx +17 -12
  89. data/stubs/inertia-react-ts/app/javascript/Pages/Auth/Register.tsx +14 -14
  90. data/stubs/inertia-react-ts/app/javascript/Pages/Auth/ResetPassword.tsx +10 -10
  91. data/stubs/inertia-react-ts/app/javascript/Pages/Auth/VerifyEmail.tsx +2 -2
  92. data/stubs/inertia-react-ts/app/javascript/Pages/Dashboard.tsx +13 -8
  93. data/stubs/inertia-react-ts/app/javascript/Pages/Settings/Appearance.tsx +33 -0
  94. data/stubs/inertia-react-ts/app/javascript/Pages/Settings/Partials/DeleteUserForm.tsx +107 -0
  95. data/stubs/inertia-react-ts/app/javascript/Pages/Settings/Partials/UpdateAppearanceForm.tsx +41 -0
  96. data/stubs/inertia-react-ts/app/javascript/Pages/{Profile → Settings}/Partials/UpdatePasswordForm.tsx +12 -20
  97. data/stubs/inertia-react-ts/app/javascript/Pages/{Profile → Settings}/Partials/UpdateProfileInformationForm.tsx +13 -21
  98. data/stubs/inertia-react-ts/app/javascript/Pages/Settings/Password.tsx +33 -0
  99. data/stubs/inertia-react-ts/app/javascript/Pages/Settings/Profile.tsx +35 -0
  100. data/stubs/inertia-react-ts/app/javascript/entrypoints/application.tsx +6 -1
  101. data/stubs/inertia-react-ts/app/javascript/hooks/use-initials.tsx +23 -0
  102. data/stubs/inertia-react-ts/app/javascript/hooks/use-mobile-navigation.tsx +11 -0
  103. data/stubs/inertia-react-ts/app/javascript/hooks/use-mobile.tsx +36 -0
  104. data/stubs/inertia-react-ts/app/javascript/lib/appearance.ts +22 -0
  105. data/stubs/inertia-react-ts/app/javascript/lib/utils.ts +6 -0
  106. data/stubs/inertia-react-ts/app/javascript/types/global.d.ts +2 -2
  107. data/stubs/inertia-react-ts/app/javascript/types/index.d.ts +14 -0
  108. data/stubs/inertia-react-ts/app/views/layouts/application.html.erb +19 -1
  109. data/stubs/inertia-react-ts/components.json +21 -0
  110. data/stubs/inertia-react-ts/package.json +13 -0
  111. data/stubs/inertia-vue-ts/app/assets/tailwind/application.css +124 -0
  112. data/stubs/inertia-vue-ts/app/javascript/Components/AppLogo.vue +17 -0
  113. data/stubs/inertia-vue-ts/app/javascript/Components/AppShell.vue +12 -0
  114. data/stubs/inertia-vue-ts/app/javascript/Components/AppSidebar.vue +65 -0
  115. data/stubs/inertia-vue-ts/app/javascript/Components/AppSidebarHeader.vue +20 -0
  116. data/stubs/inertia-vue-ts/app/javascript/Components/Breadcrumbs.vue +32 -0
  117. data/stubs/inertia-vue-ts/app/javascript/Components/Heading.vue +15 -0
  118. data/stubs/inertia-vue-ts/app/javascript/Components/InputError.vue +1 -1
  119. data/stubs/inertia-vue-ts/app/javascript/Components/NavFooter.vue +33 -0
  120. data/stubs/inertia-vue-ts/app/javascript/Components/NavMain.vue +32 -0
  121. data/stubs/inertia-vue-ts/app/javascript/Components/NavUser.vue +40 -0
  122. data/stubs/inertia-vue-ts/app/javascript/Components/UserInfo.vue +25 -0
  123. data/stubs/inertia-vue-ts/app/javascript/Components/UserMenuContent.vue +47 -0
  124. data/stubs/inertia-vue-ts/app/javascript/Components/ui/avatar/Avatar.vue +18 -0
  125. data/stubs/inertia-vue-ts/app/javascript/Components/ui/avatar/AvatarFallback.vue +21 -0
  126. data/stubs/inertia-vue-ts/app/javascript/Components/ui/avatar/AvatarImage.vue +16 -0
  127. data/stubs/inertia-vue-ts/app/javascript/Components/ui/avatar/index.ts +3 -0
  128. data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/Breadcrumb.vue +17 -0
  129. data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbEllipsis.vue +23 -0
  130. data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbItem.vue +17 -0
  131. data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbLink.vue +21 -0
  132. data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbList.vue +17 -0
  133. data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbPage.vue +20 -0
  134. data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbSeparator.vue +22 -0
  135. data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/index.ts +7 -0
  136. data/stubs/inertia-vue-ts/app/javascript/Components/ui/button/Button.vue +31 -0
  137. data/stubs/inertia-vue-ts/app/javascript/Components/ui/button/index.ts +34 -0
  138. data/stubs/inertia-vue-ts/app/javascript/Components/ui/checkbox/Checkbox.vue +35 -0
  139. data/stubs/inertia-vue-ts/app/javascript/Components/ui/checkbox/index.ts +1 -0
  140. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/Dialog.vue +15 -0
  141. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogClose.vue +12 -0
  142. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogContent.vue +52 -0
  143. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogDescription.vue +23 -0
  144. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogFooter.vue +25 -0
  145. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogHeader.vue +14 -0
  146. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogOverlay.vue +26 -0
  147. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogTitle.vue +23 -0
  148. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogTrigger.vue +12 -0
  149. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/index.ts +9 -0
  150. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenu.vue +15 -0
  151. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuContent.vue +37 -0
  152. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuGroup.vue +12 -0
  153. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuItem.vue +41 -0
  154. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuLabel.vue +23 -0
  155. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuSeparator.vue +23 -0
  156. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuTrigger.vue +14 -0
  157. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/index.ts +7 -0
  158. data/stubs/inertia-vue-ts/app/javascript/Components/ui/input/Input.vue +50 -0
  159. data/stubs/inertia-vue-ts/app/javascript/Components/ui/input/index.ts +1 -0
  160. data/stubs/inertia-vue-ts/app/javascript/Components/ui/label/Label.vue +26 -0
  161. data/stubs/inertia-vue-ts/app/javascript/Components/ui/label/index.ts +1 -0
  162. data/stubs/inertia-vue-ts/app/javascript/Components/ui/separator/Separator.vue +29 -0
  163. data/stubs/inertia-vue-ts/app/javascript/Components/ui/separator/index.ts +1 -0
  164. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/Sheet.vue +19 -0
  165. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetClose.vue +15 -0
  166. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetContent.vue +62 -0
  167. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetDescription.vue +21 -0
  168. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetFooter.vue +16 -0
  169. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetHeader.vue +15 -0
  170. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetOverlay.vue +21 -0
  171. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetTitle.vue +21 -0
  172. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetTrigger.vue +15 -0
  173. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/index.ts +8 -0
  174. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/Sidebar.vue +96 -0
  175. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarContent.vue +18 -0
  176. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarFooter.vue +18 -0
  177. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarGroup.vue +18 -0
  178. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarGroupAction.vue +27 -0
  179. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarGroupContent.vue +18 -0
  180. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarGroupLabel.vue +25 -0
  181. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarHeader.vue +18 -0
  182. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarInput.vue +22 -0
  183. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarInset.vue +21 -0
  184. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenu.vue +18 -0
  185. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuAction.vue +35 -0
  186. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuBadge.vue +26 -0
  187. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuButton.vue +48 -0
  188. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuButtonChild.vue +36 -0
  189. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuItem.vue +18 -0
  190. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuSkeleton.vue +35 -0
  191. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuSub.vue +22 -0
  192. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuSubButton.vue +36 -0
  193. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuSubItem.vue +18 -0
  194. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarProvider.vue +82 -0
  195. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarRail.vue +33 -0
  196. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarSeparator.vue +19 -0
  197. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarTrigger.vue +28 -0
  198. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/index.ts +60 -0
  199. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/utils.ts +19 -0
  200. data/stubs/inertia-vue-ts/app/javascript/Components/ui/skeleton/Skeleton.vue +17 -0
  201. data/stubs/inertia-vue-ts/app/javascript/Components/ui/skeleton/index.ts +1 -0
  202. data/stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/Tooltip.vue +19 -0
  203. data/stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/TooltipContent.vue +34 -0
  204. data/stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/TooltipProvider.vue +14 -0
  205. data/stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/TooltipTrigger.vue +15 -0
  206. data/stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/index.ts +4 -0
  207. data/stubs/inertia-vue-ts/app/javascript/Layouts/AuthenticatedLayout.vue +17 -147
  208. data/stubs/inertia-vue-ts/app/javascript/Layouts/SettingsLayout.vue +57 -0
  209. data/stubs/inertia-vue-ts/app/javascript/Pages/Auth/ForgotPassword.vue +7 -7
  210. data/stubs/inertia-vue-ts/app/javascript/Pages/Auth/Login.vue +10 -12
  211. data/stubs/inertia-vue-ts/app/javascript/Pages/Auth/Register.vue +12 -14
  212. data/stubs/inertia-vue-ts/app/javascript/Pages/Auth/ResetPassword.vue +8 -10
  213. data/stubs/inertia-vue-ts/app/javascript/Pages/Auth/VerifyEmail.vue +3 -3
  214. data/stubs/inertia-vue-ts/app/javascript/Pages/Dashboard.vue +15 -10
  215. data/stubs/inertia-vue-ts/app/javascript/Pages/Settings/Appearance.vue +33 -0
  216. data/stubs/inertia-vue-ts/app/javascript/Pages/Settings/Partials/DeleteUserForm.vue +96 -0
  217. data/stubs/inertia-vue-ts/app/javascript/Pages/Settings/Partials/UpdateAppearanceForm.vue +42 -0
  218. data/stubs/inertia-vue-ts/app/javascript/Pages/{Profile → Settings}/Partials/UpdatePasswordForm.vue +12 -20
  219. data/stubs/inertia-vue-ts/app/javascript/Pages/{Profile → Settings}/Partials/UpdateProfileInformationForm.vue +12 -20
  220. data/stubs/inertia-vue-ts/app/javascript/Pages/Settings/Password.vue +33 -0
  221. data/stubs/inertia-vue-ts/app/javascript/Pages/Settings/Profile.vue +40 -0
  222. data/stubs/inertia-vue-ts/app/javascript/composables/useInitials.ts +29 -0
  223. data/stubs/inertia-vue-ts/app/javascript/lib/appearance.ts +22 -0
  224. data/stubs/inertia-vue-ts/app/javascript/lib/utils.ts +6 -0
  225. data/stubs/inertia-vue-ts/app/javascript/types/index.d.ts +14 -0
  226. data/stubs/inertia-vue-ts/app/javascript/types/vue-shims.d.ts +10 -0
  227. data/stubs/inertia-vue-ts/app/views/layouts/application.html.erb +19 -1
  228. data/stubs/inertia-vue-ts/components.json +20 -0
  229. data/stubs/inertia-vue-ts/package.json +8 -1
  230. data/stubs/inertia-vue-ts/vite.config.ts +25 -1
  231. metadata +174 -43
  232. data/stubs/hotwire/app/components/nav_link_component.rb +0 -15
  233. data/stubs/hotwire/app/components/responsive_nav_link_component.rb +0 -15
  234. data/stubs/hotwire/app/controllers/password_controller.rb +0 -13
  235. data/stubs/hotwire/app/views/layouts/_navigation.html.erb +0 -82
  236. data/stubs/hotwire/app/views/profile/edit.html.erb +0 -24
  237. data/stubs/hotwire/app/views/profile/partials/_delete_user_form.html.erb +0 -14
  238. data/stubs/inertia-common/app/controllers/password_controller.rb +0 -13
  239. data/stubs/inertia-react-ts/app/javascript/Components/Checkbox.tsx +0 -11
  240. data/stubs/inertia-react-ts/app/javascript/Components/DangerButton.tsx +0 -20
  241. data/stubs/inertia-react-ts/app/javascript/Components/Dropdown.tsx +0 -100
  242. data/stubs/inertia-react-ts/app/javascript/Components/InputLabel.tsx +0 -14
  243. data/stubs/inertia-react-ts/app/javascript/Components/Modal.tsx +0 -66
  244. data/stubs/inertia-react-ts/app/javascript/Components/NavLink.tsx +0 -21
  245. data/stubs/inertia-react-ts/app/javascript/Components/PrimaryButton.tsx +0 -20
  246. data/stubs/inertia-react-ts/app/javascript/Components/ResponsiveNavLink.tsx +0 -21
  247. data/stubs/inertia-react-ts/app/javascript/Components/SecondaryButton.tsx +0 -22
  248. data/stubs/inertia-react-ts/app/javascript/Components/TextInput.tsx +0 -32
  249. data/stubs/inertia-react-ts/app/javascript/Pages/Profile/Edit.tsx +0 -32
  250. data/stubs/inertia-react-ts/app/javascript/Pages/Profile/Partials/DeleteUserForm.tsx +0 -102
  251. data/stubs/inertia-vue-ts/app/javascript/Components/Checkbox.vue +0 -29
  252. data/stubs/inertia-vue-ts/app/javascript/Components/DangerButton.vue +0 -7
  253. data/stubs/inertia-vue-ts/app/javascript/Components/Dropdown.vue +0 -75
  254. data/stubs/inertia-vue-ts/app/javascript/Components/DropdownLink.vue +0 -16
  255. data/stubs/inertia-vue-ts/app/javascript/Components/InputLabel.vue +0 -12
  256. data/stubs/inertia-vue-ts/app/javascript/Components/Modal.vue +0 -109
  257. data/stubs/inertia-vue-ts/app/javascript/Components/NavLink.vue +0 -21
  258. data/stubs/inertia-vue-ts/app/javascript/Components/PrimaryButton.vue +0 -7
  259. data/stubs/inertia-vue-ts/app/javascript/Components/ResponsiveNavLink.vue +0 -21
  260. data/stubs/inertia-vue-ts/app/javascript/Components/SecondaryButton.vue +0 -19
  261. data/stubs/inertia-vue-ts/app/javascript/Components/TextInput.vue +0 -23
  262. data/stubs/inertia-vue-ts/app/javascript/Pages/Profile/Edit.vue +0 -38
  263. data/stubs/inertia-vue-ts/app/javascript/Pages/Profile/Partials/DeleteUserForm.vue +0 -99
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kaze
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cuong Giang
@@ -101,6 +101,7 @@ files:
101
101
  - stubs/default/config/routes.rb
102
102
  - stubs/default/db/migrate/20240101000000_create_users.rb
103
103
  - stubs/default/test/factories/users.rb
104
+ - stubs/default/test/integration/appearance_test.rb
104
105
  - stubs/default/test/integration/auth/authentication_test.rb
105
106
  - stubs/default/test/integration/auth/email_verification_test.rb
106
107
  - stubs/default/test/integration/auth/password_reset_test.rb
@@ -111,19 +112,22 @@ files:
111
112
  - stubs/hotwire/app/assets/tailwind/application.css
112
113
  - stubs/hotwire/app/components/application_logo_component.rb
113
114
  - stubs/hotwire/app/components/auth_session_status_component.rb
115
+ - stubs/hotwire/app/components/breadcrumbs_component.rb
114
116
  - stubs/hotwire/app/components/danger_button_component.rb
115
117
  - stubs/hotwire/app/components/dropdown_component.html.erb
116
118
  - stubs/hotwire/app/components/dropdown_component.rb
117
119
  - stubs/hotwire/app/components/dropdown_link_component.rb
120
+ - stubs/hotwire/app/components/heading_component.rb
121
+ - stubs/hotwire/app/components/icon_component.rb
118
122
  - stubs/hotwire/app/components/input_error_component.rb
119
123
  - stubs/hotwire/app/components/input_label_component.rb
120
124
  - stubs/hotwire/app/components/modal_component.html.erb
121
125
  - stubs/hotwire/app/components/modal_component.rb
122
- - stubs/hotwire/app/components/nav_link_component.rb
123
126
  - stubs/hotwire/app/components/primary_button_component.rb
124
- - stubs/hotwire/app/components/responsive_nav_link_component.rb
125
127
  - stubs/hotwire/app/components/secondary_button_component.rb
128
+ - stubs/hotwire/app/components/sidebar_menu_button_component.rb
126
129
  - stubs/hotwire/app/components/text_input_component.rb
130
+ - stubs/hotwire/app/components/user_avatar_component.rb
127
131
  - stubs/hotwire/app/controllers/application_controller.rb
128
132
  - stubs/hotwire/app/controllers/auth/authenticated_session_controller.rb
129
133
  - stubs/hotwire/app/controllers/auth/email_verification_notification_controller.rb
@@ -134,10 +138,12 @@ files:
134
138
  - stubs/hotwire/app/controllers/concerns/authenticate.rb
135
139
  - stubs/hotwire/app/controllers/concerns/redirect_if_authenticated.rb
136
140
  - stubs/hotwire/app/controllers/concerns/set_current_auth.rb
141
+ - stubs/hotwire/app/controllers/concerns/sidebar_state.rb
137
142
  - stubs/hotwire/app/controllers/concerns/validate_signature.rb
138
143
  - stubs/hotwire/app/controllers/dashboard_controller.rb
139
- - stubs/hotwire/app/controllers/password_controller.rb
140
- - stubs/hotwire/app/controllers/profile_controller.rb
144
+ - stubs/hotwire/app/controllers/settings/appearance_controller.rb
145
+ - stubs/hotwire/app/controllers/settings/password_controller.rb
146
+ - stubs/hotwire/app/controllers/settings/profile_controller.rb
141
147
  - stubs/hotwire/app/controllers/welcome_controller.rb
142
148
  - stubs/hotwire/app/javascript/alpinejs.stub
143
149
  - stubs/hotwire/app/javascript/application.js
@@ -147,15 +153,22 @@ files:
147
153
  - stubs/hotwire/app/views/auth/reset_password.html.erb
148
154
  - stubs/hotwire/app/views/auth/verify_email.html.erb
149
155
  - stubs/hotwire/app/views/dashboard/index.html.erb
150
- - stubs/hotwire/app/views/layouts/_navigation.html.erb
156
+ - stubs/hotwire/app/views/layouts/_appearance.html.erb
157
+ - stubs/hotwire/app/views/layouts/_settings.html.erb
158
+ - stubs/hotwire/app/views/layouts/_sidebar.html.erb
159
+ - stubs/hotwire/app/views/layouts/_sidebar_header.html.erb
160
+ - stubs/hotwire/app/views/layouts/_sidebar_user.html.erb
151
161
  - stubs/hotwire/app/views/layouts/application.html.erb
152
162
  - stubs/hotwire/app/views/layouts/guest.html.erb
153
- - stubs/hotwire/app/views/profile/destroy.turbo_stream.erb
154
- - stubs/hotwire/app/views/profile/edit.html.erb
155
- - stubs/hotwire/app/views/profile/partials/_confirm_user_deletion_modal.html.erb
156
- - stubs/hotwire/app/views/profile/partials/_delete_user_form.html.erb
157
- - stubs/hotwire/app/views/profile/partials/_update_password_form.html.erb
158
- - stubs/hotwire/app/views/profile/partials/_update_profile_information_form.html.erb
163
+ - stubs/hotwire/app/views/settings/appearance/_update_appearance_form.html.erb
164
+ - stubs/hotwire/app/views/settings/appearance/edit.html.erb
165
+ - stubs/hotwire/app/views/settings/password/_update_password_form.html.erb
166
+ - stubs/hotwire/app/views/settings/password/edit.html.erb
167
+ - stubs/hotwire/app/views/settings/profile/_confirm_user_deletion_modal.html.erb
168
+ - stubs/hotwire/app/views/settings/profile/_delete_user_form.html.erb
169
+ - stubs/hotwire/app/views/settings/profile/_update_profile_information_form.html.erb
170
+ - stubs/hotwire/app/views/settings/profile/destroy.turbo_stream.erb
171
+ - stubs/hotwire/app/views/settings/profile/edit.html.erb
159
172
  - stubs/hotwire/app/views/welcome/index.html.erb
160
173
  - stubs/hotwire/config/importmap.rb
161
174
  - stubs/inertia-common/app/controllers/application_controller.rb
@@ -172,82 +185,200 @@ files:
172
185
  - stubs/inertia-common/app/controllers/concerns/validate_signature.rb
173
186
  - stubs/inertia-common/app/controllers/concerns/verify_csrf_token.rb
174
187
  - stubs/inertia-common/app/controllers/dashboard_controller.rb
175
- - stubs/inertia-common/app/controllers/password_controller.rb
176
- - stubs/inertia-common/app/controllers/profile_controller.rb
188
+ - stubs/inertia-common/app/controllers/settings/appearance_controller.rb
189
+ - stubs/inertia-common/app/controllers/settings/password_controller.rb
190
+ - stubs/inertia-common/app/controllers/settings/profile_controller.rb
177
191
  - stubs/inertia-common/app/controllers/welcome_controller.rb
178
192
  - stubs/inertia-common/bin/vite
179
193
  - stubs/inertia-common/config/initializers/inertia_rails.rb
180
194
  - stubs/inertia-common/config/vite.json
195
+ - stubs/inertia-common/test/integration/appearance_test.rb
181
196
  - stubs/inertia-common/test/integration/password_update_test.rb
182
197
  - stubs/inertia-common/test/integration/profile_test.rb
183
198
  - stubs/inertia-react-ts/app/assets/tailwind/application.css
199
+ - stubs/inertia-react-ts/app/javascript/Components/AppLogo.tsx
200
+ - stubs/inertia-react-ts/app/javascript/Components/AppShell.tsx
201
+ - stubs/inertia-react-ts/app/javascript/Components/AppSidebar.tsx
202
+ - stubs/inertia-react-ts/app/javascript/Components/AppSidebarHeader.tsx
184
203
  - stubs/inertia-react-ts/app/javascript/Components/ApplicationLogo.tsx
185
- - stubs/inertia-react-ts/app/javascript/Components/Checkbox.tsx
186
- - stubs/inertia-react-ts/app/javascript/Components/DangerButton.tsx
187
- - stubs/inertia-react-ts/app/javascript/Components/Dropdown.tsx
204
+ - stubs/inertia-react-ts/app/javascript/Components/Breadcrumbs.tsx
205
+ - stubs/inertia-react-ts/app/javascript/Components/Heading.tsx
188
206
  - stubs/inertia-react-ts/app/javascript/Components/InputError.tsx
189
- - stubs/inertia-react-ts/app/javascript/Components/InputLabel.tsx
190
- - stubs/inertia-react-ts/app/javascript/Components/Modal.tsx
191
- - stubs/inertia-react-ts/app/javascript/Components/NavLink.tsx
192
- - stubs/inertia-react-ts/app/javascript/Components/PrimaryButton.tsx
193
- - stubs/inertia-react-ts/app/javascript/Components/ResponsiveNavLink.tsx
194
- - stubs/inertia-react-ts/app/javascript/Components/SecondaryButton.tsx
195
- - stubs/inertia-react-ts/app/javascript/Components/TextInput.tsx
207
+ - stubs/inertia-react-ts/app/javascript/Components/NavFooter.tsx
208
+ - stubs/inertia-react-ts/app/javascript/Components/NavMain.tsx
209
+ - stubs/inertia-react-ts/app/javascript/Components/NavUser.tsx
210
+ - stubs/inertia-react-ts/app/javascript/Components/UserInfo.tsx
211
+ - stubs/inertia-react-ts/app/javascript/Components/UserMenuContent.tsx
212
+ - stubs/inertia-react-ts/app/javascript/Components/ui/avatar.tsx
213
+ - stubs/inertia-react-ts/app/javascript/Components/ui/breadcrumb.tsx
214
+ - stubs/inertia-react-ts/app/javascript/Components/ui/button.tsx
215
+ - stubs/inertia-react-ts/app/javascript/Components/ui/checkbox.tsx
216
+ - stubs/inertia-react-ts/app/javascript/Components/ui/dialog.tsx
217
+ - stubs/inertia-react-ts/app/javascript/Components/ui/dropdown-menu.tsx
218
+ - stubs/inertia-react-ts/app/javascript/Components/ui/input.tsx
219
+ - stubs/inertia-react-ts/app/javascript/Components/ui/label.tsx
220
+ - stubs/inertia-react-ts/app/javascript/Components/ui/separator.tsx
221
+ - stubs/inertia-react-ts/app/javascript/Components/ui/sheet.tsx
222
+ - stubs/inertia-react-ts/app/javascript/Components/ui/sidebar.tsx
223
+ - stubs/inertia-react-ts/app/javascript/Components/ui/skeleton.tsx
224
+ - stubs/inertia-react-ts/app/javascript/Components/ui/tooltip.tsx
196
225
  - stubs/inertia-react-ts/app/javascript/Layouts/AuthenticatedLayout.tsx
197
226
  - stubs/inertia-react-ts/app/javascript/Layouts/GuestLayout.tsx
227
+ - stubs/inertia-react-ts/app/javascript/Layouts/SettingsLayout.tsx
198
228
  - stubs/inertia-react-ts/app/javascript/Pages/Auth/ForgotPassword.tsx
199
229
  - stubs/inertia-react-ts/app/javascript/Pages/Auth/Login.tsx
200
230
  - stubs/inertia-react-ts/app/javascript/Pages/Auth/Register.tsx
201
231
  - stubs/inertia-react-ts/app/javascript/Pages/Auth/ResetPassword.tsx
202
232
  - stubs/inertia-react-ts/app/javascript/Pages/Auth/VerifyEmail.tsx
203
233
  - stubs/inertia-react-ts/app/javascript/Pages/Dashboard.tsx
204
- - stubs/inertia-react-ts/app/javascript/Pages/Profile/Edit.tsx
205
- - stubs/inertia-react-ts/app/javascript/Pages/Profile/Partials/DeleteUserForm.tsx
206
- - stubs/inertia-react-ts/app/javascript/Pages/Profile/Partials/UpdatePasswordForm.tsx
207
- - stubs/inertia-react-ts/app/javascript/Pages/Profile/Partials/UpdateProfileInformationForm.tsx
234
+ - stubs/inertia-react-ts/app/javascript/Pages/Settings/Appearance.tsx
235
+ - stubs/inertia-react-ts/app/javascript/Pages/Settings/Partials/DeleteUserForm.tsx
236
+ - stubs/inertia-react-ts/app/javascript/Pages/Settings/Partials/UpdateAppearanceForm.tsx
237
+ - stubs/inertia-react-ts/app/javascript/Pages/Settings/Partials/UpdatePasswordForm.tsx
238
+ - stubs/inertia-react-ts/app/javascript/Pages/Settings/Partials/UpdateProfileInformationForm.tsx
239
+ - stubs/inertia-react-ts/app/javascript/Pages/Settings/Password.tsx
240
+ - stubs/inertia-react-ts/app/javascript/Pages/Settings/Profile.tsx
208
241
  - stubs/inertia-react-ts/app/javascript/Pages/Welcome.tsx
209
242
  - stubs/inertia-react-ts/app/javascript/entrypoints/application.tsx
210
243
  - stubs/inertia-react-ts/app/javascript/entrypoints/bootstrap.ts
244
+ - stubs/inertia-react-ts/app/javascript/hooks/use-initials.tsx
245
+ - stubs/inertia-react-ts/app/javascript/hooks/use-mobile-navigation.tsx
246
+ - stubs/inertia-react-ts/app/javascript/hooks/use-mobile.tsx
247
+ - stubs/inertia-react-ts/app/javascript/lib/appearance.ts
248
+ - stubs/inertia-react-ts/app/javascript/lib/utils.ts
211
249
  - stubs/inertia-react-ts/app/javascript/types/global.d.ts
212
250
  - stubs/inertia-react-ts/app/javascript/types/index.d.ts
213
251
  - stubs/inertia-react-ts/app/javascript/types/vite-env.d.ts
214
252
  - stubs/inertia-react-ts/app/views/layouts/application.html.erb
253
+ - stubs/inertia-react-ts/components.json
215
254
  - stubs/inertia-react-ts/package.json
216
255
  - stubs/inertia-react-ts/tsconfig.json
217
256
  - stubs/inertia-react-ts/vite.config.ts
218
257
  - stubs/inertia-vue-ts/app/assets/tailwind/application.css
258
+ - stubs/inertia-vue-ts/app/javascript/Components/AppLogo.vue
259
+ - stubs/inertia-vue-ts/app/javascript/Components/AppShell.vue
260
+ - stubs/inertia-vue-ts/app/javascript/Components/AppSidebar.vue
261
+ - stubs/inertia-vue-ts/app/javascript/Components/AppSidebarHeader.vue
219
262
  - stubs/inertia-vue-ts/app/javascript/Components/ApplicationLogo.vue
220
- - stubs/inertia-vue-ts/app/javascript/Components/Checkbox.vue
221
- - stubs/inertia-vue-ts/app/javascript/Components/DangerButton.vue
222
- - stubs/inertia-vue-ts/app/javascript/Components/Dropdown.vue
223
- - stubs/inertia-vue-ts/app/javascript/Components/DropdownLink.vue
263
+ - stubs/inertia-vue-ts/app/javascript/Components/Breadcrumbs.vue
264
+ - stubs/inertia-vue-ts/app/javascript/Components/Heading.vue
224
265
  - stubs/inertia-vue-ts/app/javascript/Components/InputError.vue
225
- - stubs/inertia-vue-ts/app/javascript/Components/InputLabel.vue
226
- - stubs/inertia-vue-ts/app/javascript/Components/Modal.vue
227
- - stubs/inertia-vue-ts/app/javascript/Components/NavLink.vue
228
- - stubs/inertia-vue-ts/app/javascript/Components/PrimaryButton.vue
229
- - stubs/inertia-vue-ts/app/javascript/Components/ResponsiveNavLink.vue
230
- - stubs/inertia-vue-ts/app/javascript/Components/SecondaryButton.vue
231
- - stubs/inertia-vue-ts/app/javascript/Components/TextInput.vue
266
+ - stubs/inertia-vue-ts/app/javascript/Components/NavFooter.vue
267
+ - stubs/inertia-vue-ts/app/javascript/Components/NavMain.vue
268
+ - stubs/inertia-vue-ts/app/javascript/Components/NavUser.vue
269
+ - stubs/inertia-vue-ts/app/javascript/Components/UserInfo.vue
270
+ - stubs/inertia-vue-ts/app/javascript/Components/UserMenuContent.vue
271
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/avatar/Avatar.vue
272
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/avatar/AvatarFallback.vue
273
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/avatar/AvatarImage.vue
274
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/avatar/index.ts
275
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/Breadcrumb.vue
276
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbEllipsis.vue
277
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbItem.vue
278
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbLink.vue
279
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbList.vue
280
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbPage.vue
281
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbSeparator.vue
282
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/index.ts
283
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/button/Button.vue
284
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/button/index.ts
285
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/checkbox/Checkbox.vue
286
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/checkbox/index.ts
287
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/Dialog.vue
288
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogClose.vue
289
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogContent.vue
290
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogDescription.vue
291
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogFooter.vue
292
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogHeader.vue
293
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogOverlay.vue
294
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogTitle.vue
295
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogTrigger.vue
296
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/index.ts
297
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenu.vue
298
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuContent.vue
299
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuGroup.vue
300
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuItem.vue
301
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuLabel.vue
302
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuSeparator.vue
303
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuTrigger.vue
304
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/index.ts
305
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/input/Input.vue
306
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/input/index.ts
307
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/label/Label.vue
308
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/label/index.ts
309
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/separator/Separator.vue
310
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/separator/index.ts
311
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/Sheet.vue
312
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetClose.vue
313
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetContent.vue
314
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetDescription.vue
315
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetFooter.vue
316
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetHeader.vue
317
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetOverlay.vue
318
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetTitle.vue
319
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetTrigger.vue
320
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/index.ts
321
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/Sidebar.vue
322
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarContent.vue
323
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarFooter.vue
324
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarGroup.vue
325
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarGroupAction.vue
326
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarGroupContent.vue
327
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarGroupLabel.vue
328
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarHeader.vue
329
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarInput.vue
330
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarInset.vue
331
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenu.vue
332
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuAction.vue
333
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuBadge.vue
334
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuButton.vue
335
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuButtonChild.vue
336
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuItem.vue
337
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuSkeleton.vue
338
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuSub.vue
339
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuSubButton.vue
340
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuSubItem.vue
341
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarProvider.vue
342
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarRail.vue
343
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarSeparator.vue
344
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarTrigger.vue
345
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/index.ts
346
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/utils.ts
347
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/skeleton/Skeleton.vue
348
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/skeleton/index.ts
349
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/Tooltip.vue
350
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/TooltipContent.vue
351
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/TooltipProvider.vue
352
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/TooltipTrigger.vue
353
+ - stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/index.ts
232
354
  - stubs/inertia-vue-ts/app/javascript/Layouts/AuthenticatedLayout.vue
233
355
  - stubs/inertia-vue-ts/app/javascript/Layouts/GuestLayout.vue
356
+ - stubs/inertia-vue-ts/app/javascript/Layouts/SettingsLayout.vue
234
357
  - stubs/inertia-vue-ts/app/javascript/Pages/Auth/ForgotPassword.vue
235
358
  - stubs/inertia-vue-ts/app/javascript/Pages/Auth/Login.vue
236
359
  - stubs/inertia-vue-ts/app/javascript/Pages/Auth/Register.vue
237
360
  - stubs/inertia-vue-ts/app/javascript/Pages/Auth/ResetPassword.vue
238
361
  - stubs/inertia-vue-ts/app/javascript/Pages/Auth/VerifyEmail.vue
239
362
  - stubs/inertia-vue-ts/app/javascript/Pages/Dashboard.vue
240
- - stubs/inertia-vue-ts/app/javascript/Pages/Profile/Edit.vue
241
- - stubs/inertia-vue-ts/app/javascript/Pages/Profile/Partials/DeleteUserForm.vue
242
- - stubs/inertia-vue-ts/app/javascript/Pages/Profile/Partials/UpdatePasswordForm.vue
243
- - stubs/inertia-vue-ts/app/javascript/Pages/Profile/Partials/UpdateProfileInformationForm.vue
363
+ - stubs/inertia-vue-ts/app/javascript/Pages/Settings/Appearance.vue
364
+ - stubs/inertia-vue-ts/app/javascript/Pages/Settings/Partials/DeleteUserForm.vue
365
+ - stubs/inertia-vue-ts/app/javascript/Pages/Settings/Partials/UpdateAppearanceForm.vue
366
+ - stubs/inertia-vue-ts/app/javascript/Pages/Settings/Partials/UpdatePasswordForm.vue
367
+ - stubs/inertia-vue-ts/app/javascript/Pages/Settings/Partials/UpdateProfileInformationForm.vue
368
+ - stubs/inertia-vue-ts/app/javascript/Pages/Settings/Password.vue
369
+ - stubs/inertia-vue-ts/app/javascript/Pages/Settings/Profile.vue
244
370
  - stubs/inertia-vue-ts/app/javascript/Pages/Welcome.vue
371
+ - stubs/inertia-vue-ts/app/javascript/composables/useInitials.ts
245
372
  - stubs/inertia-vue-ts/app/javascript/entrypoints/application.ts
246
373
  - stubs/inertia-vue-ts/app/javascript/entrypoints/bootstrap.ts
374
+ - stubs/inertia-vue-ts/app/javascript/lib/appearance.ts
375
+ - stubs/inertia-vue-ts/app/javascript/lib/utils.ts
247
376
  - stubs/inertia-vue-ts/app/javascript/types/global.d.ts
248
377
  - stubs/inertia-vue-ts/app/javascript/types/index.d.ts
249
378
  - stubs/inertia-vue-ts/app/javascript/types/vite-env.d.ts
379
+ - stubs/inertia-vue-ts/app/javascript/types/vue-shims.d.ts
250
380
  - stubs/inertia-vue-ts/app/views/layouts/application.html.erb
381
+ - stubs/inertia-vue-ts/components.json
251
382
  - stubs/inertia-vue-ts/package.json
252
383
  - stubs/inertia-vue-ts/tsconfig.json
253
384
  - stubs/inertia-vue-ts/vite.config.ts
@@ -1,15 +0,0 @@
1
- class NavLinkComponent < ViewComponent::Base
2
- erb_template <<~ERB
3
- <a <%= sanitize @attributes.join(" ") %>>
4
- <%= content %>
5
- </a>
6
- ERB
7
-
8
- def initialize(attributes = {})
9
- classes = attributes[:active] \
10
- ? 'inline-flex items-center px-1 pt-1 border-b-2 border-indigo-400 dark:border-indigo-600 text-sm font-medium leading-5 text-gray-900 dark:text-gray-100 focus:outline-hidden focus:border-indigo-700 transition duration-150 ease-in-out' \
11
- : 'inline-flex items-center px-1 pt-1 border-b-2 border-transparent text-sm font-medium leading-5 text-gray-500 dark:text-gray-400 hover:text-gray-700 dark:hover:text-gray-300 hover:border-gray-300 dark:hover:border-gray-700 focus:outline-hidden focus:text-gray-700 dark:focus:text-gray-300 focus:border-gray-300 dark:focus:border-gray-700 transition duration-150 ease-in-out'
12
- attributes[:class] = "#{classes}#{" #{attributes[:class]}" if attributes[:class]}"
13
- @attributes = attributes.without(:active).map { |key, attribute| "#{key}=\"#{attribute}\"" }
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- class ResponsiveNavLinkComponent < ViewComponent::Base
2
- erb_template <<~ERB
3
- <a <%= sanitize @attributes.join(" ") %>>
4
- <%= content %>
5
- </a>
6
- ERB
7
-
8
- def initialize(attributes = {})
9
- classes = attributes[:active] \
10
- ? 'block w-full ps-3 pe-4 py-2 border-l-4 border-indigo-400 dark:border-indigo-600 text-start text-base font-medium text-indigo-700 dark:text-indigo-300 bg-indigo-50 dark:bg-indigo-900/50 focus:outline-hidden focus:text-indigo-800 dark:focus:text-indigo-200 focus:bg-indigo-100 dark:focus:bg-indigo-900 focus:border-indigo-700 dark:focus:border-indigo-300 transition duration-150 ease-in-out' \
11
- : 'block w-full ps-3 pe-4 py-2 border-l-4 border-transparent text-start text-base font-medium text-gray-600 dark:text-gray-400 hover:text-gray-800 dark:hover:text-gray-200 hover:bg-gray-50 dark:hover:bg-gray-700 hover:border-gray-300 dark:hover:border-gray-600 focus:outline-hidden focus:text-gray-800 dark:focus:text-gray-200 focus:bg-gray-50 dark:focus:bg-gray-700 focus:border-gray-300 dark:focus:border-gray-600 transition duration-150 ease-in-out'
12
- attributes[:class] = "#{classes}#{" #{attributes[:class]}" if attributes[:class]}"
13
- @attributes = attributes.without(:active).map { |key, attribute| "#{key}=\"#{attribute}\"" }
14
- end
15
- end
@@ -1,13 +0,0 @@
1
- class PasswordController < ApplicationController
2
- skip_ensure_email_is_verified
3
-
4
- def update
5
- @update_password_form = UpdatePasswordForm.new(params.permit(:current_password, :password, :password_confirmation))
6
-
7
- return render partial: 'profile/partials/update_password_form', status: :unprocessable_entity if @update_password_form.invalid?
8
-
9
- Current.auth.user.update(password: @update_password_form.password)
10
-
11
- redirect_back_or_to profile_edit_path, flash: { status: 'password-updated' }
12
- end
13
- end
@@ -1,82 +0,0 @@
1
- <nav x-data="{ open: false }" class="bg-white dark:bg-gray-800 border-b border-gray-100 dark:border-gray-700">
2
- <!-- Primary Navigation Menu -->
3
- <div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8">
4
- <div class="flex justify-between h-16">
5
- <div class="flex">
6
- <!-- Logo -->
7
- <div class="shrink-0 flex items-center">
8
- <a href="/">
9
- <%= render(ApplicationLogoComponent.new({ class: "block h-9 w-auto fill-current text-red-800 dark:text-red-200" })) %>
10
- </a>
11
- </div>
12
- <!-- Navigation Links -->
13
- <div class="hidden space-x-8 sm:-my-px sm:ms-10 sm:flex">
14
- <%= render(NavLinkComponent.new({ href: dashboard_path, active: current_page?(dashboard_path) })) do %>
15
- Dashboard
16
- <% end %>
17
- </div>
18
- </div>
19
- <!-- Settings Dropdown -->
20
- <div class="hidden sm:flex sm:items-center sm:ms-6">
21
- <%= render DropdownComponent.new do |component| %>
22
- <% component.with_trigger(classes: "") do %>
23
- <button class="inline-flex items-center px-3 py-2 border border-transparent text-sm leading-4 font-medium rounded-md text-gray-500 dark:text-gray-400 bg-white dark:bg-gray-800 hover:text-gray-700 dark:hover:text-gray-300 focus:outline-hidden transition ease-in-out duration-150">
24
- <div><%= Current.auth.user.name %></div>
25
- <div class="ms-1">
26
- <svg class="fill-current h-4 w-4" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20">
27
- <path fill-rule="evenodd" 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" clip-rule="evenodd" />
28
- </svg>
29
- </div>
30
- </button>
31
- <% end %>
32
- <%= render(DropdownLinkComponent.new({ href: profile_edit_path })) do %>
33
- Profile
34
- <% end %>
35
- <!-- Authentication -->
36
- <form method="POST" action="<%= logout_path %>">
37
- <input type="hidden" name="authenticity_token" value="<%= form_authenticity_token %>">
38
- <%= render(DropdownLinkComponent.new({ href: logout_path, onclick: "event.preventDefault();this.closest('form').submit()" })) do %>
39
- Log Out
40
- <% end %>
41
- </form>
42
- <% end %>
43
- </div>
44
- <!-- Hamburger -->
45
- <div class="-me-2 flex items-center sm:hidden">
46
- <button x-on:click="open = ! open" class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 dark:text-gray-500 hover:text-gray-500 dark:hover:text-gray-400 hover:bg-gray-100 dark:hover:bg-gray-900 focus:outline-hidden focus:bg-gray-100 dark:focus:bg-gray-900 focus:text-gray-500 dark:focus:text-gray-400 transition duration-150 ease-in-out">
47
- <svg class="h-6 w-6" stroke="currentColor" fill="none" viewBox="0 0 24 24">
48
- <path :class="{'hidden': open, 'inline-flex': ! open }" class="inline-flex" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
49
- <path :class="{'hidden': ! open, 'inline-flex': open }" class="hidden" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
50
- </svg>
51
- </button>
52
- </div>
53
- </div>
54
- </div>
55
- <!-- Responsive Navigation Menu -->
56
- <div :class="{'block': open, 'hidden': ! open}" class="hidden sm:hidden">
57
- <div class="pt-2 pb-3 space-y-1">
58
- <%= render(ResponsiveNavLinkComponent.new({ href: dashboard_path, active: current_page?(dashboard_path) })) do %>
59
- Dashboard
60
- <% end %>
61
- </div>
62
- <!-- Responsive Settings Options -->
63
- <div class="pt-4 pb-1 border-t border-gray-200 dark:border-gray-600">
64
- <div class="px-4">
65
- <div class="font-medium text-base text-gray-800 dark:text-gray-200"><%= Current.auth.user.name %></div>
66
- <div class="font-medium text-sm text-gray-500"><%= Current.auth.user.email %></div>
67
- </div>
68
- <div class="mt-3 space-y-1">
69
- <%= render(ResponsiveNavLinkComponent.new({ href: profile_edit_path })) do %>
70
- Profile
71
- <% end %>
72
- <!-- Authentication -->
73
- <form method="POST" action="<%= logout_path %>">
74
- <input type="hidden" name="authenticity_token" value="<%= form_authenticity_token %>">
75
- <%= render(ResponsiveNavLinkComponent.new({ href: logout_path, onclick: "event.preventDefault();this.closest('form').submit()" })) do %>
76
- Log Out
77
- <% end %>
78
- </form>
79
- </div>
80
- </div>
81
- </div>
82
- </nav>
@@ -1,24 +0,0 @@
1
- <% content_for(:header) do %>
2
- <h2 class="font-semibold text-xl text-gray-800 dark:text-gray-200 leading-tight">
3
- Profile
4
- </h2>
5
- <% end %>
6
- <div class="py-12">
7
- <div class="max-w-7xl mx-auto sm:px-6 lg:px-8 space-y-6">
8
- <div class="p-4 sm:p-8 bg-white dark:bg-gray-800 shadow-sm sm:rounded-lg">
9
- <div class="max-w-xl">
10
- <%= render "profile/partials/update_profile_information_form" %>
11
- </div>
12
- </div>
13
- <div class="p-4 sm:p-8 bg-white dark:bg-gray-800 shadow-sm sm:rounded-lg">
14
- <div class="max-w-xl">
15
- <%= render "profile/partials/update_password_form" %>
16
- </div>
17
- </div>
18
- <div class="p-4 sm:p-8 bg-white dark:bg-gray-800 shadow-sm sm:rounded-lg">
19
- <div class="max-w-xl">
20
- <%= render "profile/partials/delete_user_form" %>
21
- </div>
22
- </div>
23
- </div>
24
- </div>
@@ -1,14 +0,0 @@
1
- <section class="space-y-6">
2
- <header>
3
- <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
4
- Delete Account
5
- </h2>
6
- <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
7
- Once your account is deleted, all of its resources and data will be permanently deleted. Before deleting your account, please download any data or information that you wish to retain.
8
- </p>
9
- </header>
10
- <%= render(DangerButtonComponent.new({"x-data": "", "x-on:click.prevent": "$dispatch('open-modal', 'confirm-user-deletion')"})) do %>
11
- Delete Account
12
- <% end %>
13
- </section>
14
- <%= render 'profile/partials/confirm_user_deletion_modal' %>
@@ -1,13 +0,0 @@
1
- class PasswordController < ApplicationController
2
- skip_ensure_email_is_verified
3
-
4
- def update
5
- form = UpdatePasswordForm.new(params.permit(:current_password, :password, :password_confirmation))
6
-
7
- return redirect_to profile_edit_path, inertia: { errors: form.error_messages } if form.invalid?
8
-
9
- Current.auth.user.update(password: form.password)
10
-
11
- redirect_back_or_to profile_edit_path
12
- end
13
- end
@@ -1,11 +0,0 @@
1
- import { InputHTMLAttributes } from 'react'
2
-
3
- export default function Checkbox({ className = '', ...props }: InputHTMLAttributes<HTMLInputElement>) {
4
- return (
5
- <input
6
- {...props}
7
- type="checkbox"
8
- className={`rounded-sm dark:bg-gray-900 border-gray-300 dark:border-gray-700 text-indigo-600 shadow-xs focus:ring-indigo-500 dark:focus:ring-indigo-600 dark:focus:ring-offset-gray-800 ${className}`}
9
- />
10
- )
11
- }
@@ -1,20 +0,0 @@
1
- import { ButtonHTMLAttributes } from 'react'
2
-
3
- export default function DangerButton({
4
- className = '',
5
- disabled,
6
- children,
7
- ...props
8
- }: ButtonHTMLAttributes<HTMLButtonElement>) {
9
- return (
10
- <button
11
- {...props}
12
- className={`inline-flex items-center px-4 py-2 bg-red-600 border border-transparent rounded-md font-semibold text-xs text-white uppercase tracking-widest hover:bg-red-500 active:bg-red-700 focus:outline-hidden focus:ring-2 focus:ring-red-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800 transition ease-in-out duration-150 ${
13
- disabled && 'opacity-25'
14
- } ${className}`}
15
- disabled={disabled}
16
- >
17
- {children}
18
- </button>
19
- )
20
- }