kaze 1.4.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +62 -1
  3. data/README.md +1 -1
  4. data/lib/kaze/commands/app/base_stack.rb +12 -2
  5. data/lib/kaze/commands/app/hotwire_stack.rb +3 -1
  6. data/lib/kaze/commands/app/inertia_react_stack.rb +6 -2
  7. data/lib/kaze/commands/app/inertia_vue_stack.rb +6 -2
  8. data/lib/kaze/commands/app.rb +9 -2
  9. data/lib/kaze/version.rb +1 -1
  10. data/stubs/default/config/routes.rb +11 -4
  11. data/stubs/default/test/integration/appearance_test.rb +11 -0
  12. data/stubs/default/test/integration/password_update_test.rb +9 -1
  13. data/stubs/hotwire/app/assets/tailwind/application.css +119 -1
  14. data/stubs/hotwire/app/components/breadcrumbs_component.rb +32 -0
  15. data/stubs/hotwire/app/components/danger_button_component.rb +1 -1
  16. data/stubs/hotwire/app/components/dropdown_component.html.erb +2 -2
  17. data/stubs/hotwire/app/components/dropdown_component.rb +5 -1
  18. data/stubs/hotwire/app/components/dropdown_link_component.rb +1 -1
  19. data/stubs/hotwire/app/components/heading_component.rb +19 -0
  20. data/stubs/hotwire/app/components/icon_component.rb +30 -0
  21. data/stubs/hotwire/app/components/input_error_component.rb +1 -1
  22. data/stubs/hotwire/app/components/input_label_component.rb +3 -3
  23. data/stubs/hotwire/app/components/modal_component.html.erb +2 -2
  24. data/stubs/hotwire/app/components/primary_button_component.rb +1 -1
  25. data/stubs/hotwire/app/components/secondary_button_component.rb +1 -1
  26. data/stubs/hotwire/app/components/sidebar_menu_button_component.rb +25 -0
  27. data/stubs/hotwire/app/components/text_input_component.rb +1 -1
  28. data/stubs/hotwire/app/components/user_avatar_component.rb +27 -0
  29. data/stubs/hotwire/app/controllers/application_controller.rb +1 -0
  30. data/stubs/hotwire/app/controllers/concerns/sidebar_state.rb +14 -0
  31. data/stubs/hotwire/app/controllers/settings/appearance_controller.rb +7 -0
  32. data/stubs/hotwire/app/controllers/settings/password_controller.rb +19 -0
  33. data/stubs/hotwire/app/controllers/{profile_controller.rb → settings/profile_controller.rb} +3 -4
  34. data/stubs/hotwire/app/views/auth/login.html.erb +1 -1
  35. data/stubs/hotwire/app/views/dashboard/index.html.erb +6 -11
  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 +24 -15
  41. data/stubs/hotwire/app/views/settings/appearance/_update_appearance_form.html.erb +28 -0
  42. data/stubs/hotwire/app/views/settings/appearance/edit.html.erb +10 -0
  43. data/stubs/hotwire/app/views/{profile/partials → settings/password}/_update_password_form.html.erb +2 -10
  44. data/stubs/hotwire/app/views/settings/password/edit.html.erb +10 -0
  45. data/stubs/hotwire/app/views/{profile/partials → settings/profile}/_confirm_user_deletion_modal.html.erb +2 -2
  46. data/stubs/hotwire/app/views/settings/profile/_delete_user_form.html.erb +6 -0
  47. data/stubs/hotwire/app/views/{profile/partials → settings/profile}/_update_profile_information_form.html.erb +4 -12
  48. data/stubs/hotwire/app/views/{profile → settings/profile}/destroy.turbo_stream.erb +1 -1
  49. data/stubs/hotwire/app/views/settings/profile/edit.html.erb +14 -0
  50. data/stubs/inertia-common/app/controllers/concerns/handle_inertia_requests.rb +4 -1
  51. data/stubs/inertia-common/app/controllers/settings/appearance_controller.rb +7 -0
  52. data/stubs/inertia-common/app/controllers/settings/password_controller.rb +17 -0
  53. data/stubs/inertia-common/app/controllers/{profile_controller.rb → settings/profile_controller.rb} +2 -2
  54. data/stubs/inertia-common/test/integration/appearance_test.rb +11 -0
  55. data/stubs/inertia-common/test/integration/password_update_test.rb +10 -2
  56. data/stubs/inertia-react-ts/app/assets/tailwind/application.css +120 -1
  57. data/stubs/inertia-react-ts/app/javascript/Components/AppLogo.tsx +17 -0
  58. data/stubs/inertia-react-ts/app/javascript/Components/AppShell.tsx +9 -0
  59. data/stubs/inertia-react-ts/app/javascript/Components/AppSidebar.tsx +65 -0
  60. data/stubs/inertia-react-ts/app/javascript/Components/AppSidebarHeader.tsx +14 -0
  61. data/stubs/inertia-react-ts/app/javascript/Components/Breadcrumbs.tsx +43 -0
  62. data/stubs/inertia-react-ts/app/javascript/Components/Heading.tsx +19 -0
  63. data/stubs/inertia-react-ts/app/javascript/Components/InputError.tsx +1 -1
  64. data/stubs/inertia-react-ts/app/javascript/Components/NavFooter.tsx +32 -0
  65. data/stubs/inertia-react-ts/app/javascript/Components/NavMain.tsx +32 -0
  66. data/stubs/inertia-react-ts/app/javascript/Components/NavUser.tsx +39 -0
  67. data/stubs/inertia-react-ts/app/javascript/Components/UserInfo.tsx +23 -0
  68. data/stubs/inertia-react-ts/app/javascript/Components/UserMenuContent.tsx +57 -0
  69. data/stubs/inertia-react-ts/app/javascript/Components/ui/avatar.tsx +51 -0
  70. data/stubs/inertia-react-ts/app/javascript/Components/ui/breadcrumb.tsx +109 -0
  71. data/stubs/inertia-react-ts/app/javascript/Components/ui/button.tsx +49 -0
  72. data/stubs/inertia-react-ts/app/javascript/Components/ui/checkbox.tsx +27 -0
  73. data/stubs/inertia-react-ts/app/javascript/Components/ui/dialog.tsx +109 -0
  74. data/stubs/inertia-react-ts/app/javascript/Components/ui/dropdown-menu.tsx +217 -0
  75. data/stubs/inertia-react-ts/app/javascript/Components/ui/input.tsx +21 -0
  76. data/stubs/inertia-react-ts/app/javascript/Components/ui/label.tsx +19 -0
  77. data/stubs/inertia-react-ts/app/javascript/Components/ui/separator.tsx +26 -0
  78. data/stubs/inertia-react-ts/app/javascript/Components/ui/sheet.tsx +137 -0
  79. data/stubs/inertia-react-ts/app/javascript/Components/ui/sidebar.tsx +719 -0
  80. data/stubs/inertia-react-ts/app/javascript/Components/ui/skeleton.tsx +13 -0
  81. data/stubs/inertia-react-ts/app/javascript/Components/ui/tooltip.tsx +55 -0
  82. data/stubs/inertia-react-ts/app/javascript/Layouts/AuthenticatedLayout.tsx +19 -127
  83. data/stubs/inertia-react-ts/app/javascript/Layouts/GuestLayout.tsx +1 -1
  84. data/stubs/inertia-react-ts/app/javascript/Layouts/SettingsLayout.tsx +57 -0
  85. data/stubs/inertia-react-ts/app/javascript/Pages/Auth/ForgotPassword.tsx +6 -6
  86. data/stubs/inertia-react-ts/app/javascript/Pages/Auth/Login.tsx +17 -12
  87. data/stubs/inertia-react-ts/app/javascript/Pages/Auth/Register.tsx +14 -14
  88. data/stubs/inertia-react-ts/app/javascript/Pages/Auth/ResetPassword.tsx +10 -10
  89. data/stubs/inertia-react-ts/app/javascript/Pages/Auth/VerifyEmail.tsx +2 -2
  90. data/stubs/inertia-react-ts/app/javascript/Pages/Dashboard.tsx +13 -8
  91. data/stubs/inertia-react-ts/app/javascript/Pages/Settings/Appearance.tsx +33 -0
  92. data/stubs/inertia-react-ts/app/javascript/Pages/Settings/Partials/DeleteUserForm.tsx +107 -0
  93. data/stubs/inertia-react-ts/app/javascript/Pages/Settings/Partials/UpdateAppearanceForm.tsx +41 -0
  94. data/stubs/inertia-react-ts/app/javascript/Pages/{Profile → Settings}/Partials/UpdatePasswordForm.tsx +12 -20
  95. data/stubs/inertia-react-ts/app/javascript/Pages/{Profile → Settings}/Partials/UpdateProfileInformationForm.tsx +13 -21
  96. data/stubs/inertia-react-ts/app/javascript/Pages/Settings/Password.tsx +33 -0
  97. data/stubs/inertia-react-ts/app/javascript/Pages/Settings/Profile.tsx +35 -0
  98. data/stubs/inertia-react-ts/app/javascript/entrypoints/application.tsx +6 -1
  99. data/stubs/inertia-react-ts/app/javascript/hooks/use-initials.tsx +23 -0
  100. data/stubs/inertia-react-ts/app/javascript/hooks/use-mobile-navigation.tsx +11 -0
  101. data/stubs/inertia-react-ts/app/javascript/hooks/use-mobile.tsx +36 -0
  102. data/stubs/inertia-react-ts/app/javascript/lib/appearance.ts +1 -2
  103. data/stubs/inertia-react-ts/app/javascript/lib/utils.ts +6 -0
  104. data/stubs/inertia-react-ts/app/javascript/types/global.d.ts +2 -2
  105. data/stubs/inertia-react-ts/app/javascript/types/index.d.ts +14 -0
  106. data/stubs/inertia-react-ts/components.json +21 -0
  107. data/stubs/inertia-react-ts/package.json +13 -0
  108. data/stubs/inertia-vue-ts/app/assets/tailwind/application.css +120 -1
  109. data/stubs/inertia-vue-ts/app/javascript/Components/AppLogo.vue +17 -0
  110. data/stubs/inertia-vue-ts/app/javascript/Components/AppShell.vue +12 -0
  111. data/stubs/inertia-vue-ts/app/javascript/Components/AppSidebar.vue +65 -0
  112. data/stubs/inertia-vue-ts/app/javascript/Components/AppSidebarHeader.vue +20 -0
  113. data/stubs/inertia-vue-ts/app/javascript/Components/Breadcrumbs.vue +32 -0
  114. data/stubs/inertia-vue-ts/app/javascript/Components/Heading.vue +15 -0
  115. data/stubs/inertia-vue-ts/app/javascript/Components/InputError.vue +1 -1
  116. data/stubs/inertia-vue-ts/app/javascript/Components/NavFooter.vue +33 -0
  117. data/stubs/inertia-vue-ts/app/javascript/Components/NavMain.vue +32 -0
  118. data/stubs/inertia-vue-ts/app/javascript/Components/NavUser.vue +40 -0
  119. data/stubs/inertia-vue-ts/app/javascript/Components/UserInfo.vue +25 -0
  120. data/stubs/inertia-vue-ts/app/javascript/Components/UserMenuContent.vue +47 -0
  121. data/stubs/inertia-vue-ts/app/javascript/Components/ui/avatar/Avatar.vue +18 -0
  122. data/stubs/inertia-vue-ts/app/javascript/Components/ui/avatar/AvatarFallback.vue +21 -0
  123. data/stubs/inertia-vue-ts/app/javascript/Components/ui/avatar/AvatarImage.vue +16 -0
  124. data/stubs/inertia-vue-ts/app/javascript/Components/ui/avatar/index.ts +3 -0
  125. data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/Breadcrumb.vue +17 -0
  126. data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbEllipsis.vue +23 -0
  127. data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbItem.vue +17 -0
  128. data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbLink.vue +21 -0
  129. data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbList.vue +17 -0
  130. data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbPage.vue +20 -0
  131. data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/BreadcrumbSeparator.vue +22 -0
  132. data/stubs/inertia-vue-ts/app/javascript/Components/ui/breadcrumb/index.ts +7 -0
  133. data/stubs/inertia-vue-ts/app/javascript/Components/ui/button/Button.vue +31 -0
  134. data/stubs/inertia-vue-ts/app/javascript/Components/ui/button/index.ts +34 -0
  135. data/stubs/inertia-vue-ts/app/javascript/Components/ui/checkbox/Checkbox.vue +35 -0
  136. data/stubs/inertia-vue-ts/app/javascript/Components/ui/checkbox/index.ts +1 -0
  137. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/Dialog.vue +15 -0
  138. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogClose.vue +12 -0
  139. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogContent.vue +52 -0
  140. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogDescription.vue +23 -0
  141. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogFooter.vue +25 -0
  142. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogHeader.vue +14 -0
  143. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogOverlay.vue +26 -0
  144. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogTitle.vue +23 -0
  145. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/DialogTrigger.vue +12 -0
  146. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dialog/index.ts +9 -0
  147. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenu.vue +15 -0
  148. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuContent.vue +37 -0
  149. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuGroup.vue +12 -0
  150. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuItem.vue +41 -0
  151. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuLabel.vue +23 -0
  152. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuSeparator.vue +23 -0
  153. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/DropdownMenuTrigger.vue +14 -0
  154. data/stubs/inertia-vue-ts/app/javascript/Components/ui/dropdown-menu/index.ts +7 -0
  155. data/stubs/inertia-vue-ts/app/javascript/Components/ui/input/Input.vue +50 -0
  156. data/stubs/inertia-vue-ts/app/javascript/Components/ui/input/index.ts +1 -0
  157. data/stubs/inertia-vue-ts/app/javascript/Components/ui/label/Label.vue +26 -0
  158. data/stubs/inertia-vue-ts/app/javascript/Components/ui/label/index.ts +1 -0
  159. data/stubs/inertia-vue-ts/app/javascript/Components/ui/separator/Separator.vue +29 -0
  160. data/stubs/inertia-vue-ts/app/javascript/Components/ui/separator/index.ts +1 -0
  161. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/Sheet.vue +19 -0
  162. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetClose.vue +15 -0
  163. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetContent.vue +62 -0
  164. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetDescription.vue +21 -0
  165. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetFooter.vue +16 -0
  166. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetHeader.vue +15 -0
  167. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetOverlay.vue +21 -0
  168. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetTitle.vue +21 -0
  169. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/SheetTrigger.vue +15 -0
  170. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sheet/index.ts +8 -0
  171. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/Sidebar.vue +96 -0
  172. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarContent.vue +18 -0
  173. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarFooter.vue +18 -0
  174. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarGroup.vue +18 -0
  175. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarGroupAction.vue +27 -0
  176. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarGroupContent.vue +18 -0
  177. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarGroupLabel.vue +25 -0
  178. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarHeader.vue +18 -0
  179. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarInput.vue +22 -0
  180. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarInset.vue +21 -0
  181. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenu.vue +18 -0
  182. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuAction.vue +35 -0
  183. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuBadge.vue +26 -0
  184. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuButton.vue +48 -0
  185. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuButtonChild.vue +36 -0
  186. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuItem.vue +18 -0
  187. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuSkeleton.vue +35 -0
  188. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuSub.vue +22 -0
  189. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuSubButton.vue +36 -0
  190. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarMenuSubItem.vue +18 -0
  191. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarProvider.vue +82 -0
  192. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarRail.vue +33 -0
  193. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarSeparator.vue +19 -0
  194. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/SidebarTrigger.vue +28 -0
  195. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/index.ts +60 -0
  196. data/stubs/inertia-vue-ts/app/javascript/Components/ui/sidebar/utils.ts +19 -0
  197. data/stubs/inertia-vue-ts/app/javascript/Components/ui/skeleton/Skeleton.vue +17 -0
  198. data/stubs/inertia-vue-ts/app/javascript/Components/ui/skeleton/index.ts +1 -0
  199. data/stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/Tooltip.vue +19 -0
  200. data/stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/TooltipContent.vue +34 -0
  201. data/stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/TooltipProvider.vue +14 -0
  202. data/stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/TooltipTrigger.vue +15 -0
  203. data/stubs/inertia-vue-ts/app/javascript/Components/ui/tooltip/index.ts +4 -0
  204. data/stubs/inertia-vue-ts/app/javascript/Layouts/AuthenticatedLayout.vue +17 -147
  205. data/stubs/inertia-vue-ts/app/javascript/Layouts/SettingsLayout.vue +57 -0
  206. data/stubs/inertia-vue-ts/app/javascript/Pages/Auth/ForgotPassword.vue +7 -7
  207. data/stubs/inertia-vue-ts/app/javascript/Pages/Auth/Login.vue +10 -12
  208. data/stubs/inertia-vue-ts/app/javascript/Pages/Auth/Register.vue +12 -14
  209. data/stubs/inertia-vue-ts/app/javascript/Pages/Auth/ResetPassword.vue +8 -10
  210. data/stubs/inertia-vue-ts/app/javascript/Pages/Auth/VerifyEmail.vue +3 -3
  211. data/stubs/inertia-vue-ts/app/javascript/Pages/Dashboard.vue +15 -10
  212. data/stubs/inertia-vue-ts/app/javascript/Pages/Settings/Appearance.vue +33 -0
  213. data/stubs/inertia-vue-ts/app/javascript/Pages/Settings/Partials/DeleteUserForm.vue +96 -0
  214. data/stubs/inertia-vue-ts/app/javascript/Pages/Settings/Partials/UpdateAppearanceForm.vue +42 -0
  215. data/stubs/inertia-vue-ts/app/javascript/Pages/{Profile → Settings}/Partials/UpdatePasswordForm.vue +12 -20
  216. data/stubs/inertia-vue-ts/app/javascript/Pages/{Profile → Settings}/Partials/UpdateProfileInformationForm.vue +12 -20
  217. data/stubs/inertia-vue-ts/app/javascript/Pages/Settings/Password.vue +33 -0
  218. data/stubs/inertia-vue-ts/app/javascript/Pages/Settings/Profile.vue +40 -0
  219. data/stubs/inertia-vue-ts/app/javascript/composables/useInitials.ts +29 -0
  220. data/stubs/inertia-vue-ts/app/javascript/lib/appearance.ts +1 -2
  221. data/stubs/inertia-vue-ts/app/javascript/lib/utils.ts +6 -0
  222. data/stubs/inertia-vue-ts/app/javascript/types/index.d.ts +14 -0
  223. data/stubs/inertia-vue-ts/app/javascript/types/vue-shims.d.ts +10 -0
  224. data/stubs/inertia-vue-ts/components.json +20 -0
  225. data/stubs/inertia-vue-ts/package.json +8 -1
  226. data/stubs/inertia-vue-ts/vite.config.ts +25 -1
  227. metadata +171 -46
  228. data/stubs/hotwire/app/components/nav_link_component.rb +0 -15
  229. data/stubs/hotwire/app/components/responsive_nav_link_component.rb +0 -15
  230. data/stubs/hotwire/app/controllers/password_controller.rb +0 -13
  231. data/stubs/hotwire/app/views/layouts/_navigation.html.erb +0 -82
  232. data/stubs/hotwire/app/views/profile/edit.html.erb +0 -29
  233. data/stubs/hotwire/app/views/profile/partials/_delete_user_form.html.erb +0 -14
  234. data/stubs/hotwire/app/views/profile/partials/_update_appearance_form.html.erb +0 -39
  235. data/stubs/inertia-common/app/controllers/password_controller.rb +0 -13
  236. data/stubs/inertia-react-ts/app/javascript/Components/Checkbox.tsx +0 -11
  237. data/stubs/inertia-react-ts/app/javascript/Components/DangerButton.tsx +0 -20
  238. data/stubs/inertia-react-ts/app/javascript/Components/Dropdown.tsx +0 -100
  239. data/stubs/inertia-react-ts/app/javascript/Components/InputLabel.tsx +0 -14
  240. data/stubs/inertia-react-ts/app/javascript/Components/Modal.tsx +0 -66
  241. data/stubs/inertia-react-ts/app/javascript/Components/NavLink.tsx +0 -21
  242. data/stubs/inertia-react-ts/app/javascript/Components/PrimaryButton.tsx +0 -20
  243. data/stubs/inertia-react-ts/app/javascript/Components/ResponsiveNavLink.tsx +0 -21
  244. data/stubs/inertia-react-ts/app/javascript/Components/SecondaryButton.tsx +0 -22
  245. data/stubs/inertia-react-ts/app/javascript/Components/TextInput.tsx +0 -32
  246. data/stubs/inertia-react-ts/app/javascript/Pages/Profile/Edit.tsx +0 -37
  247. data/stubs/inertia-react-ts/app/javascript/Pages/Profile/Partials/DeleteUserForm.tsx +0 -102
  248. data/stubs/inertia-react-ts/app/javascript/Pages/Profile/Partials/UpdateAppearanceForm.tsx +0 -47
  249. data/stubs/inertia-vue-ts/app/javascript/Components/Checkbox.vue +0 -29
  250. data/stubs/inertia-vue-ts/app/javascript/Components/DangerButton.vue +0 -7
  251. data/stubs/inertia-vue-ts/app/javascript/Components/Dropdown.vue +0 -75
  252. data/stubs/inertia-vue-ts/app/javascript/Components/DropdownLink.vue +0 -16
  253. data/stubs/inertia-vue-ts/app/javascript/Components/InputLabel.vue +0 -12
  254. data/stubs/inertia-vue-ts/app/javascript/Components/Modal.vue +0 -109
  255. data/stubs/inertia-vue-ts/app/javascript/Components/NavLink.vue +0 -21
  256. data/stubs/inertia-vue-ts/app/javascript/Components/PrimaryButton.vue +0 -7
  257. data/stubs/inertia-vue-ts/app/javascript/Components/ResponsiveNavLink.vue +0 -21
  258. data/stubs/inertia-vue-ts/app/javascript/Components/SecondaryButton.vue +0 -19
  259. data/stubs/inertia-vue-ts/app/javascript/Components/TextInput.vue +0 -23
  260. data/stubs/inertia-vue-ts/app/javascript/Pages/Profile/Edit.vue +0 -43
  261. data/stubs/inertia-vue-ts/app/javascript/Pages/Profile/Partials/DeleteUserForm.vue +0 -99
  262. data/stubs/inertia-vue-ts/app/javascript/Pages/Profile/Partials/UpdateAppearanceForm.vue +0 -47
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.4.0
4
+ version: 2.0.1
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
@@ -148,16 +154,21 @@ files:
148
154
  - stubs/hotwire/app/views/auth/verify_email.html.erb
149
155
  - stubs/hotwire/app/views/dashboard/index.html.erb
150
156
  - stubs/hotwire/app/views/layouts/_appearance.html.erb
151
- - stubs/hotwire/app/views/layouts/_navigation.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
152
161
  - stubs/hotwire/app/views/layouts/application.html.erb
153
162
  - stubs/hotwire/app/views/layouts/guest.html.erb
154
- - stubs/hotwire/app/views/profile/destroy.turbo_stream.erb
155
- - stubs/hotwire/app/views/profile/edit.html.erb
156
- - stubs/hotwire/app/views/profile/partials/_confirm_user_deletion_modal.html.erb
157
- - stubs/hotwire/app/views/profile/partials/_delete_user_form.html.erb
158
- - stubs/hotwire/app/views/profile/partials/_update_appearance_form.html.erb
159
- - stubs/hotwire/app/views/profile/partials/_update_password_form.html.erb
160
- - 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
161
172
  - stubs/hotwire/app/views/welcome/index.html.erb
162
173
  - stubs/hotwire/config/importmap.rb
163
174
  - stubs/inertia-common/app/controllers/application_controller.rb
@@ -174,86 +185,200 @@ files:
174
185
  - stubs/inertia-common/app/controllers/concerns/validate_signature.rb
175
186
  - stubs/inertia-common/app/controllers/concerns/verify_csrf_token.rb
176
187
  - stubs/inertia-common/app/controllers/dashboard_controller.rb
177
- - stubs/inertia-common/app/controllers/password_controller.rb
178
- - 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
179
191
  - stubs/inertia-common/app/controllers/welcome_controller.rb
180
192
  - stubs/inertia-common/bin/vite
181
193
  - stubs/inertia-common/config/initializers/inertia_rails.rb
182
194
  - stubs/inertia-common/config/vite.json
195
+ - stubs/inertia-common/test/integration/appearance_test.rb
183
196
  - stubs/inertia-common/test/integration/password_update_test.rb
184
197
  - stubs/inertia-common/test/integration/profile_test.rb
185
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
186
203
  - stubs/inertia-react-ts/app/javascript/Components/ApplicationLogo.tsx
187
- - stubs/inertia-react-ts/app/javascript/Components/Checkbox.tsx
188
- - stubs/inertia-react-ts/app/javascript/Components/DangerButton.tsx
189
- - 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
190
206
  - stubs/inertia-react-ts/app/javascript/Components/InputError.tsx
191
- - stubs/inertia-react-ts/app/javascript/Components/InputLabel.tsx
192
- - stubs/inertia-react-ts/app/javascript/Components/Modal.tsx
193
- - stubs/inertia-react-ts/app/javascript/Components/NavLink.tsx
194
- - stubs/inertia-react-ts/app/javascript/Components/PrimaryButton.tsx
195
- - stubs/inertia-react-ts/app/javascript/Components/ResponsiveNavLink.tsx
196
- - stubs/inertia-react-ts/app/javascript/Components/SecondaryButton.tsx
197
- - 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
198
225
  - stubs/inertia-react-ts/app/javascript/Layouts/AuthenticatedLayout.tsx
199
226
  - stubs/inertia-react-ts/app/javascript/Layouts/GuestLayout.tsx
227
+ - stubs/inertia-react-ts/app/javascript/Layouts/SettingsLayout.tsx
200
228
  - stubs/inertia-react-ts/app/javascript/Pages/Auth/ForgotPassword.tsx
201
229
  - stubs/inertia-react-ts/app/javascript/Pages/Auth/Login.tsx
202
230
  - stubs/inertia-react-ts/app/javascript/Pages/Auth/Register.tsx
203
231
  - stubs/inertia-react-ts/app/javascript/Pages/Auth/ResetPassword.tsx
204
232
  - stubs/inertia-react-ts/app/javascript/Pages/Auth/VerifyEmail.tsx
205
233
  - stubs/inertia-react-ts/app/javascript/Pages/Dashboard.tsx
206
- - stubs/inertia-react-ts/app/javascript/Pages/Profile/Edit.tsx
207
- - stubs/inertia-react-ts/app/javascript/Pages/Profile/Partials/DeleteUserForm.tsx
208
- - stubs/inertia-react-ts/app/javascript/Pages/Profile/Partials/UpdateAppearanceForm.tsx
209
- - stubs/inertia-react-ts/app/javascript/Pages/Profile/Partials/UpdatePasswordForm.tsx
210
- - 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
211
241
  - stubs/inertia-react-ts/app/javascript/Pages/Welcome.tsx
212
242
  - stubs/inertia-react-ts/app/javascript/entrypoints/application.tsx
213
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
214
247
  - stubs/inertia-react-ts/app/javascript/lib/appearance.ts
248
+ - stubs/inertia-react-ts/app/javascript/lib/utils.ts
215
249
  - stubs/inertia-react-ts/app/javascript/types/global.d.ts
216
250
  - stubs/inertia-react-ts/app/javascript/types/index.d.ts
217
251
  - stubs/inertia-react-ts/app/javascript/types/vite-env.d.ts
218
252
  - stubs/inertia-react-ts/app/views/layouts/application.html.erb
253
+ - stubs/inertia-react-ts/components.json
219
254
  - stubs/inertia-react-ts/package.json
220
255
  - stubs/inertia-react-ts/tsconfig.json
221
256
  - stubs/inertia-react-ts/vite.config.ts
222
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
223
262
  - stubs/inertia-vue-ts/app/javascript/Components/ApplicationLogo.vue
224
- - stubs/inertia-vue-ts/app/javascript/Components/Checkbox.vue
225
- - stubs/inertia-vue-ts/app/javascript/Components/DangerButton.vue
226
- - stubs/inertia-vue-ts/app/javascript/Components/Dropdown.vue
227
- - 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
228
265
  - stubs/inertia-vue-ts/app/javascript/Components/InputError.vue
229
- - stubs/inertia-vue-ts/app/javascript/Components/InputLabel.vue
230
- - stubs/inertia-vue-ts/app/javascript/Components/Modal.vue
231
- - stubs/inertia-vue-ts/app/javascript/Components/NavLink.vue
232
- - stubs/inertia-vue-ts/app/javascript/Components/PrimaryButton.vue
233
- - stubs/inertia-vue-ts/app/javascript/Components/ResponsiveNavLink.vue
234
- - stubs/inertia-vue-ts/app/javascript/Components/SecondaryButton.vue
235
- - 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
236
354
  - stubs/inertia-vue-ts/app/javascript/Layouts/AuthenticatedLayout.vue
237
355
  - stubs/inertia-vue-ts/app/javascript/Layouts/GuestLayout.vue
356
+ - stubs/inertia-vue-ts/app/javascript/Layouts/SettingsLayout.vue
238
357
  - stubs/inertia-vue-ts/app/javascript/Pages/Auth/ForgotPassword.vue
239
358
  - stubs/inertia-vue-ts/app/javascript/Pages/Auth/Login.vue
240
359
  - stubs/inertia-vue-ts/app/javascript/Pages/Auth/Register.vue
241
360
  - stubs/inertia-vue-ts/app/javascript/Pages/Auth/ResetPassword.vue
242
361
  - stubs/inertia-vue-ts/app/javascript/Pages/Auth/VerifyEmail.vue
243
362
  - stubs/inertia-vue-ts/app/javascript/Pages/Dashboard.vue
244
- - stubs/inertia-vue-ts/app/javascript/Pages/Profile/Edit.vue
245
- - stubs/inertia-vue-ts/app/javascript/Pages/Profile/Partials/DeleteUserForm.vue
246
- - stubs/inertia-vue-ts/app/javascript/Pages/Profile/Partials/UpdateAppearanceForm.vue
247
- - stubs/inertia-vue-ts/app/javascript/Pages/Profile/Partials/UpdatePasswordForm.vue
248
- - 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
249
370
  - stubs/inertia-vue-ts/app/javascript/Pages/Welcome.vue
371
+ - stubs/inertia-vue-ts/app/javascript/composables/useInitials.ts
250
372
  - stubs/inertia-vue-ts/app/javascript/entrypoints/application.ts
251
373
  - stubs/inertia-vue-ts/app/javascript/entrypoints/bootstrap.ts
252
374
  - stubs/inertia-vue-ts/app/javascript/lib/appearance.ts
375
+ - stubs/inertia-vue-ts/app/javascript/lib/utils.ts
253
376
  - stubs/inertia-vue-ts/app/javascript/types/global.d.ts
254
377
  - stubs/inertia-vue-ts/app/javascript/types/index.d.ts
255
378
  - stubs/inertia-vue-ts/app/javascript/types/vite-env.d.ts
379
+ - stubs/inertia-vue-ts/app/javascript/types/vue-shims.d.ts
256
380
  - stubs/inertia-vue-ts/app/views/layouts/application.html.erb
381
+ - stubs/inertia-vue-ts/components.json
257
382
  - stubs/inertia-vue-ts/package.json
258
383
  - stubs/inertia-vue-ts/tsconfig.json
259
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,29 +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_appearance_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_profile_information_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/update_password_form" %>
21
- </div>
22
- </div>
23
- <div class="p-4 sm:p-8 bg-white dark:bg-gray-800 shadow-sm sm:rounded-lg">
24
- <div class="max-w-xl">
25
- <%= render "profile/partials/delete_user_form" %>
26
- </div>
27
- </div>
28
- </div>
29
- </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,39 +0,0 @@
1
- <section
2
- x-data="{
3
- preference: localStorage.getItem('appearance') || 'system',
4
- select(value) {
5
- this.preference = value
6
- localStorage.setItem('appearance', value)
7
- window.applyAppearance()
8
- }
9
- }"
10
- >
11
- <header>
12
- <h2 class="text-lg font-medium text-gray-900 dark:text-gray-100">
13
- Appearance
14
- </h2>
15
-
16
- <p class="mt-1 text-sm text-gray-600 dark:text-gray-400">
17
- Choose how the application looks to you. System follows your device setting.
18
- </p>
19
- </header>
20
-
21
- <div class="mt-6 inline-flex rounded-lg bg-gray-100 p-1 dark:bg-gray-900">
22
- <template x-for="option in [
23
- { value: 'light', label: 'Light' },
24
- { value: 'dark', label: 'Dark' },
25
- { value: 'system', label: 'System' }
26
- ]" :key="option.value">
27
- <button
28
- type="button"
29
- @click="select(option.value)"
30
- :aria-pressed="preference === option.value"
31
- class="rounded-md px-4 py-1.5 text-sm font-medium transition focus:outline-hidden focus:ring-2 focus:ring-indigo-500 focus:ring-offset-2 dark:focus:ring-offset-gray-800"
32
- :class="preference === option.value
33
- ? 'bg-white text-gray-900 shadow-xs dark:bg-gray-700 dark:text-gray-100'
34
- : 'text-gray-500 hover:text-gray-900 dark:text-gray-400 dark:hover:text-gray-100'"
35
- x-text="option.label"
36
- ></button>
37
- </template>
38
- </div>
39
- </section>
@@ -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
- }